From 349b43612eb34176f4a5318eac57f2e0eaedc753 Mon Sep 17 00:00:00 2001 From: Juergen Kunz Date: Sun, 25 Jan 2026 12:56:56 +0000 Subject: [PATCH] feat(s3): add S3 create file/folder dialogs and in-place text editor; export mongodb plugin --- changelog.md | 10 ++ package.json | 3 +- pnpm-lock.yaml | 3 + ts/00_commitinfo_data.ts | 2 +- ts/api/handlers.mongodb.ts | 12 +- ts/bundled_ui.ts | 2 +- ts/plugins.ts | 4 + ts_web/00_commitinfo_data.ts | 2 +- ts_web/elements/tsview-app.ts | 146 ++++++++++++++++ ts_web/elements/tsview-s3-columns.ts | 251 ++++++++++++++++++++++++++- ts_web/elements/tsview-s3-keys.ts | 248 +++++++++++++++++++++++++- ts_web/elements/tsview-s3-preview.ts | 197 ++++++++++++++++++++- 12 files changed, 860 insertions(+), 20 deletions(-) diff --git a/changelog.md b/changelog.md index d21ab6e..dddf0d5 100644 --- a/changelog.md +++ b/changelog.md @@ -1,5 +1,15 @@ # Changelog +## 2026-01-25 - 1.3.0 - feat(s3) +add S3 create file/folder dialogs and in-place text editor; export mongodb plugin + +- Add mongodb dependency and export mongodb in ts/plugins.ts so ObjectId can be reused from plugins. +- Update handlers.mongodb to use plugins.mongodb.ObjectId instead of requiring mongodb directly. +- UI: Add create-file and create-folder dialogs and context-menu entries in tsview-app, tsview-s3-columns, and tsview-s3-keys to create objects (folders use a .keep object). +- Implement client-side helpers to determine content type/default content and call apiService.putObject with base64 content when creating files/folders. +- S3 preview: embed dees-input-code editor for text files with language detection, unsaved-changes indicator, Save/Discard flows, and saving via apiService.putObject. +- Various styling and UX improvements for dialogs, buttons, and editor states. + ## 2026-01-25 - 1.2.0 - feat(s3,web-ui) add S3 deletePrefix and getObjectUrl endpoints and add context menus in UI for S3 and Mongo views diff --git a/package.json b/package.json index e9d2d0e..6821469 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,8 @@ "@push.rocks/smartnetwork": "^4.4.0", "@push.rocks/smartopen": "^2.0.0", "@push.rocks/smartpath": "^6.0.0", - "@push.rocks/smartpromise": "^4.2.3" + "@push.rocks/smartpromise": "^4.2.3", + "mongodb": "^7.0.0" }, "files": [ "ts/**/*", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 8945112..51d6298 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -62,6 +62,9 @@ importers: '@push.rocks/smartpromise': specifier: ^4.2.3 version: 4.2.3 + mongodb: + specifier: ^7.0.0 + version: 7.0.0(socks@2.8.7) devDependencies: '@git.zone/tsbuild': specifier: ^4.1.2 diff --git a/ts/00_commitinfo_data.ts b/ts/00_commitinfo_data.ts index 572b8b7..c251883 100644 --- a/ts/00_commitinfo_data.ts +++ b/ts/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/tsview', - version: '1.2.0', + version: '1.3.0', description: 'A CLI tool for viewing S3 and MongoDB data with a web UI' } diff --git a/ts/api/handlers.mongodb.ts b/ts/api/handlers.mongodb.ts index ae53ef3..dc19d21 100644 --- a/ts/api/handlers.mongodb.ts +++ b/ts/api/handlers.mongodb.ts @@ -21,15 +21,9 @@ export async function registerMongoHandlers( // Helper to create ObjectId filter const createIdFilter = (documentId: string) => { - // Try to treat as ObjectId string - MongoDB driver will handle conversion - try { - // Import ObjectId from the mongodb package that smartdata uses - const { ObjectId } = require('mongodb'); - if (ObjectId.isValid(documentId)) { - return { _id: new ObjectId(documentId) }; - } - } catch { - // Fall through to string filter + const { ObjectId } = plugins.mongodb; + if (ObjectId.isValid(documentId)) { + return { _id: new ObjectId(documentId) }; } return { _id: documentId }; }; diff --git a/ts/bundled_ui.ts b/ts/bundled_ui.ts index 6ea810e..7737f08 100644 --- a/ts/bundled_ui.ts +++ b/ts/bundled_ui.ts @@ -2,7 +2,7 @@ export const files: { path: string; contentBase64: string }[] = [ { "path": "bundle.js", - "contentBase64": "dmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKdmFyIF9fZnJlZXplID0gT2JqZWN0LmZyZWV6ZTsKdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKdmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBfX2tub3duU3ltYm9sID0gKG5hbWUsIHN5bWJvbCkgPT4gKHN5bWJvbCA9IFN5bWJvbFtuYW1lXSkgPyBzeW1ib2wgOiAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiU3ltYm9sLiIgKyBuYW1lKTsKdmFyIF9fdHlwZUVycm9yID0gKG1zZykgPT4gewogIHRocm93IFR5cGVFcnJvcihtc2cpOwp9Owp2YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBrZXkyIGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleTIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlMiB9KSA6IG9ialtrZXkyXSA9IHZhbHVlMjsKdmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlMikgPT4gX19kZWZQcm9wKHRhcmdldCwgIm5hbWUiLCB7IHZhbHVlOiB2YWx1ZTIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKdmFyIF9fcmVxdWlyZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHgzKSA9PiB0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIgPyByZXF1aXJlIDogdHlwZW9mIFByb3h5ICE9PSAidW5kZWZpbmVkIiA/IG5ldyBQcm94eSh4MywgewogIGdldDogKGE1LCBiNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNSlbYjVdCn0pIDogeDMpKGZ1bmN0aW9uKHgzKSB7CiAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgeDMgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7Cn0pOwp2YXIgX19lc20gPSAoZm4sIHJlcykgPT4gZnVuY3Rpb24gX19pbml0KCkgewogIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7Cn07CnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZTIoKSB7CiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7Cn07CnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKfTsKdmFyIF9fY29weVByb3BzID0gKHRvMiwgZnJvbTIsIGV4Y2VwdCwgZGVzYykgPT4gewogIGlmIChmcm9tMiAmJiB0eXBlb2YgZnJvbTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBmcm9tMiA9PT0gImZ1bmN0aW9uIikgewogICAgZm9yIChsZXQga2V5MiBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tMikpCiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8yLCBrZXkyKSAmJiBrZXkyICE9PSBleGNlcHQpCiAgICAgICAgX19kZWZQcm9wKHRvMiwga2V5MiwgeyBnZXQ6ICgpID0+IGZyb20yW2tleTJdLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20yLCBrZXkyKSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogIH0KICByZXR1cm4gdG8yOwp9Owp2YXIgX190b0VTTSA9IChtb2QsIGlzTm9kZU1vZGUsIHRhcmdldCkgPT4gKHRhcmdldCA9IG1vZCAhPSBudWxsID8gX19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpIDoge30sIF9fY29weVByb3BzKAogIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU00KICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLQogIC8vIGNvbXBhdGlibGUgdHJhbnNmb3JtIChpLmUuICJfX2VzTW9kdWxlIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXQKICAvLyAiZGVmYXVsdCIgdG8gdGhlIENvbW1vbkpTICJtb2R1bGUuZXhwb3J0cyIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS4KICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgImRlZmF1bHQiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsCiAgbW9kCikpOwp2YXIgX19kZWNvcmF0b3JTdGFydCA9IChiYXNlKSA9PiBbLCAsICwgX19jcmVhdGUoYmFzZT8uW19fa25vd25TeW1ib2woIm1ldGFkYXRhIildID8/IG51bGwpXTsKdmFyIF9fZGVjb3JhdG9yU3RyaW5ncyA9IFsiY2xhc3MiLCAibWV0aG9kIiwgImdldHRlciIsICJzZXR0ZXIiLCAiYWNjZXNzb3IiLCAiZmllbGQiLCAidmFsdWUiLCAiZ2V0IiwgInNldCJdOwp2YXIgX19leHBlY3RGbiA9IChmbikgPT4gZm4gIT09IHZvaWQgMCAmJiB0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIgPyBfX3R5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKSA6IGZuOwp2YXIgX19kZWNvcmF0b3JDb250ZXh0ID0gKGtpbmQsIG5hbWUsIGRvbmUsIG1ldGFkYXRhLCBmbnMpID0+ICh7IGtpbmQ6IF9fZGVjb3JhdG9yU3RyaW5nc1traW5kXSwgbmFtZSwgbWV0YWRhdGEsIGFkZEluaXRpYWxpemVyOiAoZm4pID0+IGRvbmUuXyA/IF9fdHlwZUVycm9yKCJBbHJlYWR5IGluaXRpYWxpemVkIikgOiBmbnMucHVzaChfX2V4cGVjdEZuKGZuIHx8IG51bGwpKSB9KTsKdmFyIF9fZGVjb3JhdG9yTWV0YWRhdGEgPSAoYXJyYXksIHRhcmdldCkgPT4gX19kZWZOb3JtYWxQcm9wKHRhcmdldCwgX19rbm93blN5bWJvbCgibWV0YWRhdGEiKSwgYXJyYXlbM10pOwp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAoYXJyYXksIGZsYWdzLCBzZWxmMiwgdmFsdWUyKSA9PiB7CiAgZm9yICh2YXIgaTExID0gMCwgZm5zID0gYXJyYXlbZmxhZ3MgPj4gMV0sIG4xMyA9IGZucyAmJiBmbnMubGVuZ3RoOyBpMTEgPCBuMTM7IGkxMSsrKSBmbGFncyAmIDEgPyBmbnNbaTExXS5jYWxsKHNlbGYyKSA6IHZhbHVlMiA9IGZuc1tpMTFdLmNhbGwoc2VsZjIsIHZhbHVlMik7CiAgcmV0dXJuIHZhbHVlMjsKfTsKdmFyIF9fZGVjb3JhdGVFbGVtZW50ID0gKGFycmF5LCBmbGFncywgbmFtZSwgZGVjb3JhdG9ycywgdGFyZ2V0LCBleHRyYSkgPT4gewogIHZhciBmbiwgaXQsIGRvbmUsIGN0eCwgYWNjZXNzLCBrNCA9IGZsYWdzICYgNywgczkgPSAhIShmbGFncyAmIDgpLCBwNyA9ICEhKGZsYWdzICYgMTYpOwogIHZhciBqNCA9IGs0ID4gMyA/IGFycmF5Lmxlbmd0aCArIDEgOiBrNCA/IHM5ID8gMSA6IDIgOiAwLCBrZXkyID0gX19kZWNvcmF0b3JTdHJpbmdzW2s0ICsgNV07CiAgdmFyIGluaXRpYWxpemVycyA9IGs0ID4gMyAmJiAoYXJyYXlbajQgLSAxXSA9IFtdKSwgZXh0cmFJbml0aWFsaXplcnMgPSBhcnJheVtqNF0gfHwgKGFycmF5W2o0XSA9IFtdKTsKICB2YXIgZGVzYyA9IGs0ICYmICghcDcgJiYgIXM5ICYmICh0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlKSwgazQgPCA1ICYmIChrNCA+IDMgfHwgIXA3KSAmJiBfX2dldE93blByb3BEZXNjKGs0IDwgNCA/IHRhcmdldCA6IHsgZ2V0IFtuYW1lXSgpIHsKICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgZXh0cmEpOwogIH0sIHNldCBbbmFtZV0oeDMpIHsKICAgIHJldHVybiBfX3ByaXZhdGVTZXQodGhpcywgZXh0cmEsIHgzKTsKICB9IH0sIG5hbWUpKTsKICBrNCA/IHA3ICYmIGs0IDwgNCAmJiBfX25hbWUoZXh0cmEsIChrNCA+IDIgPyAic2V0ICIgOiBrNCA+IDEgPyAiZ2V0ICIgOiAiIikgKyBuYW1lKSA6IF9fbmFtZSh0YXJnZXQsIG5hbWUpOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICBjdHggPSBfX2RlY29yYXRvckNvbnRleHQoazQsIG5hbWUsIGRvbmUgPSB7fSwgYXJyYXlbM10sIGV4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGlmIChrNCkgewogICAgICBjdHguc3RhdGljID0gczksIGN0eC5wcml2YXRlID0gcDcsIGFjY2VzcyA9IGN0eC5hY2Nlc3MgPSB7IGhhczogcDcgPyAoeDMpID0+IF9fcHJpdmF0ZUluKHRhcmdldCwgeDMpIDogKHgzKSA9PiBuYW1lIGluIHgzIH07CiAgICAgIGlmIChrNCBeIDMpIGFjY2Vzcy5nZXQgPSBwNyA/ICh4MykgPT4gKGs0IF4gMSA/IF9fcHJpdmF0ZUdldCA6IF9fcHJpdmF0ZU1ldGhvZCkoeDMsIHRhcmdldCwgazQgXiA0ID8gZXh0cmEgOiBkZXNjLmdldCkgOiAoeDMpID0+IHgzW25hbWVdOwogICAgICBpZiAoazQgPiAyKSBhY2Nlc3Muc2V0ID0gcDcgPyAoeDMsIHk1KSA9PiBfX3ByaXZhdGVTZXQoeDMsIHRhcmdldCwgeTUsIGs0IF4gNCA/IGV4dHJhIDogZGVzYy5zZXQpIDogKHgzLCB5NSkgPT4geDNbbmFtZV0gPSB5NTsKICAgIH0KICAgIGl0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoazQgPyBrNCA8IDQgPyBwNyA/IGV4dHJhIDogZGVzY1trZXkyXSA6IGs0ID4gNCA/IHZvaWQgMCA6IHsgZ2V0OiBkZXNjLmdldCwgc2V0OiBkZXNjLnNldCB9IDogdGFyZ2V0LCBjdHgpLCBkb25lLl8gPSAxOwogICAgaWYgKGs0IF4gNCB8fCBpdCA9PT0gdm9pZCAwKSBfX2V4cGVjdEZuKGl0KSAmJiAoazQgPiA0ID8gaW5pdGlhbGl6ZXJzLnVuc2hpZnQoaXQpIDogazQgPyBwNyA/IGV4dHJhID0gaXQgOiBkZXNjW2tleTJdID0gaXQgOiB0YXJnZXQgPSBpdCk7CiAgICBlbHNlIGlmICh0eXBlb2YgaXQgIT09ICJvYmplY3QiIHx8IGl0ID09PSBudWxsKSBfX3R5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICBlbHNlIF9fZXhwZWN0Rm4oZm4gPSBpdC5nZXQpICYmIChkZXNjLmdldCA9IGZuKSwgX19leHBlY3RGbihmbiA9IGl0LnNldCkgJiYgKGRlc2Muc2V0ID0gZm4pLCBfX2V4cGVjdEZuKGZuID0gaXQuaW5pdCkgJiYgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoZm4pOwogIH0KICByZXR1cm4gazQgfHwgX19kZWNvcmF0b3JNZXRhZGF0YShhcnJheSwgdGFyZ2V0KSwgZGVzYyAmJiBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCBkZXNjKSwgcDcgPyBrNCBeIDQgPyBleHRyYSA6IGRlc2MgOiB0YXJnZXQ7Cn07CnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBfX2RlZk5vcm1hbFByb3Aob2JqLCB0eXBlb2Yga2V5MiAhPT0gInN5bWJvbCIgPyBrZXkyICsgIiIgOiBrZXkyLCB2YWx1ZTIpOwp2YXIgX19hY2Nlc3NDaGVjayA9IChvYmosIG1lbWJlciwgbXNnKSA9PiBtZW1iZXIuaGFzKG9iaikgfHwgX190eXBlRXJyb3IoIkNhbm5vdCAiICsgbXNnKTsKdmFyIF9fcHJpdmF0ZUluID0gKG1lbWJlciwgb2JqKSA9PiBPYmplY3Qob2JqKSAhPT0gb2JqID8gX190eXBlRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpIDogbWVtYmVyLmhhcyhvYmopOwp2YXIgX19wcml2YXRlR2V0ID0gKG9iaiwgbWVtYmVyLCBnZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSk7CnZhciBfX3ByaXZhdGVBZGQgPSAob2JqLCBtZW1iZXIsIHZhbHVlMikgPT4gbWVtYmVyLmhhcyhvYmopID8gX190eXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZVNldCA9IChvYmosIG1lbWJlciwgdmFsdWUyLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLCBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlMikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKSwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZU1ldGhvZCA9IChvYmosIG1lbWJlciwgbWV0aG9kKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLCBtZXRob2QpOwp2YXIgX190ZW1wbGF0ZSA9IChjb29rZWQsIHJhdzIpID0+IF9fZnJlZXplKF9fZGVmUHJvcChjb29rZWQsICJyYXciLCB7IHZhbHVlOiBfX2ZyZWV6ZShyYXcyIHx8IGNvb2tlZC5zbGljZSgpKSB9KSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qcwp2YXIgdCwgZSwgcywgbywgbiwgciwgaSwgUywgYzsKdmFyIGluaXRfY3NzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanMiKCkgewogICAgdCA9IGdsb2JhbFRoaXMsIGUgPSB0LlNoYWRvd1Jvb3QgJiYgKHZvaWQgMCA9PT0gdC5TaGFkeUNTUyB8fCB0LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykgJiYgImFkb3B0ZWRTdHlsZVNoZWV0cyIgaW4gRG9jdW1lbnQucHJvdG90eXBlICYmICJyZXBsYWNlIiBpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgbiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSwgbzEzKSB7CiAgICAgICAgaWYgKHRoaXMuXyRjc3NSZXN1bHQkID0gdHJ1ZSwgbzEzICE9PSBzKSB0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTsKICAgICAgICB0aGlzLmNzc1RleHQgPSB0OSwgdGhpcy50ID0gZTExOwogICAgICB9CiAgICAgIGdldCBzdHlsZVNoZWV0KCkgewogICAgICAgIGxldCB0OSA9IHRoaXMubzsKICAgICAgICBjb25zdCBzOSA9IHRoaXMudDsKICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IHQ5KSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB2b2lkIDAgIT09IHM5ICYmIDEgPT09IHM5Lmxlbmd0aDsKICAgICAgICAgIGUxMSAmJiAodDkgPSBvLmdldChzOSkpLCB2b2lkIDAgPT09IHQ5ICYmICgodGhpcy5vID0gdDkgPSBuZXcgQ1NTU3R5bGVTaGVldCgpKS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLCBlMTEgJiYgby5zZXQoczksIHQ5KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfQogICAgICB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5jc3NUZXh0OwogICAgICB9CiAgICB9OwogICAgciA9ICh0OSkgPT4gbmV3IG4oInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkgOiB0OSArICIiLCB2b2lkIDAsIHMpLCBpID0gKHQ5LCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgbzEzID0gMSA9PT0gdDkubGVuZ3RoID8gdDlbMF0gOiBlMTEucmVkdWNlKChlMTIsIHM5LCBvMTQpID0+IGUxMiArICgodDEwKSA9PiB7CiAgICAgICAgaWYgKHRydWUgPT09IHQxMC5fJGNzc1Jlc3VsdCQpIHJldHVybiB0MTAuY3NzVGV4dDsKICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIHQxMCkgcmV0dXJuIHQxMDsKICAgICAgICB0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIgKyB0MTAgKyAiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIik7CiAgICAgIH0pKHM5KSArIHQ5W28xNCArIDFdLCB0OVswXSk7CiAgICAgIHJldHVybiBuZXcgbihvMTMsIHQ5LCBzKTsKICAgIH0sIFMgPSAoczksIG8xMykgPT4gewogICAgICBpZiAoZSkgczkuYWRvcHRlZFN0eWxlU2hlZXRzID0gbzEzLm1hcCgodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/IHQ5IDogdDkuc3R5bGVTaGVldCk7CiAgICAgIGVsc2UgZm9yIChjb25zdCBlMTEgb2YgbzEzKSB7CiAgICAgICAgY29uc3QgbzE0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwgbjEzID0gdC5saXROb25jZTsKICAgICAgICB2b2lkIDAgIT09IG4xMyAmJiBvMTQuc2V0QXR0cmlidXRlKCJub25jZSIsIG4xMyksIG8xNC50ZXh0Q29udGVudCA9IGUxMS5jc3NUZXh0LCBzOS5hcHBlbmRDaGlsZChvMTQpOwogICAgICB9CiAgICB9LCBjID0gZSA/ICh0OSkgPT4gdDkgOiAodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/ICgodDEwKSA9PiB7CiAgICAgIGxldCBlMTEgPSAiIjsKICAgICAgZm9yIChjb25zdCBzOSBvZiB0MTAuY3NzUnVsZXMpIGUxMSArPSBzOS5jc3NUZXh0OwogICAgICByZXR1cm4gcihlMTEpOwogICAgfSkodDkpIDogdDk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzCnZhciBpMiwgZTIsIGgsIHIyLCBvMiwgbjIsIGEsIGMyLCBsLCBwLCBkLCB1LCBmLCBiLCB5Owp2YXIgaW5pdF9yZWFjdGl2ZV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Nzc190YWcoKTsKICAgIGluaXRfY3NzX3RhZygpOwogICAgKHsgaXM6IGkyLCBkZWZpbmVQcm9wZXJ0eTogZTIsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogaCwgZ2V0T3duUHJvcGVydHlOYW1lczogcjIsIGdldE93blByb3BlcnR5U3ltYm9sczogbzIsIGdldFByb3RvdHlwZU9mOiBuMiB9ID0gT2JqZWN0KSwgYSA9IGdsb2JhbFRoaXMsIGMyID0gYS50cnVzdGVkVHlwZXMsIGwgPSBjMiA/IGMyLmVtcHR5U2NyaXB0IDogIiIsIHAgPSBhLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCwgZCA9ICh0OSwgczkpID0+IHQ5LCB1ID0geyB0b0F0dHJpYnV0ZSh0OSwgczkpIHsKICAgICAgc3dpdGNoIChzOSkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIHQ5ID0gdDkgPyBsIDogbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0OSA9IG51bGwgPT0gdDkgPyB0OSA6IEpTT04uc3RyaW5naWZ5KHQ5KTsKICAgICAgfQogICAgICByZXR1cm4gdDk7CiAgICB9LCBmcm9tQXR0cmlidXRlKHQ5LCBzOSkgewogICAgICBsZXQgaTExID0gdDk7CiAgICAgIHN3aXRjaCAoczkpIHsKICAgICAgICBjYXNlIEJvb2xlYW46CiAgICAgICAgICBpMTEgPSBudWxsICE9PSB0OTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnVtYmVyOgogICAgICAgICAgaTExID0gbnVsbCA9PT0gdDkgPyBudWxsIDogTnVtYmVyKHQ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpMTEgPSBKU09OLnBhcnNlKHQ5KTsKICAgICAgICAgIH0gY2F0Y2ggKHQxMCkgewogICAgICAgICAgICBpMTEgPSBudWxsOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpMTE7CiAgICB9IH0sIGYgPSAodDksIHM5KSA9PiAhaTIodDksIHM5KSwgYiA9IHsgYXR0cmlidXRlOiB0cnVlLCB0eXBlOiBTdHJpbmcsIGNvbnZlcnRlcjogdSwgcmVmbGVjdDogZmFsc2UsIHVzZURlZmF1bHQ6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH07CiAgICBTeW1ib2wubWV0YWRhdGEgPz89IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIm1ldGFkYXRhIiksIGEubGl0UHJvcGVydHlNZXRhZGF0YSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB5ID0gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICAgIHN0YXRpYyBhZGRJbml0aWFsaXplcih0OSkgewogICAgICAgIHRoaXMuXyRFaSgpLCAodGhpcy5sID8/PSBbXSkucHVzaCh0OSk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUoKSwgdGhpcy5fJEVoICYmIFsuLi50aGlzLl8kRWgua2V5cygpXTsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHkodDksIHM5ID0gYikgewogICAgICAgIGlmIChzOS5zdGF0ZSAmJiAoczkuYXR0cmlidXRlID0gZmFsc2UpLCB0aGlzLl8kRWkoKSwgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodDkpICYmICgoczkgPSBPYmplY3QuY3JlYXRlKHM5KSkud3JhcHBlZCA9IHRydWUpLCB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0OSwgczkpLCAhczkubm9BY2Nlc3NvcikgewogICAgICAgICAgY29uc3QgaTExID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpLCBoOSA9IHRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQ5LCBpMTEsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaDkgJiYgZTIodGhpcy5wcm90b3R5cGUsIHQ5LCBoOSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIHM5LCBpMTEpIHsKICAgICAgICBjb25zdCB7IGdldDogZTExLCBzZXQ6IHIxMSB9ID0gaCh0aGlzLnByb3RvdHlwZSwgdDkpID8/IHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbczldOwogICAgICAgIH0sIHNldCh0MTApIHsKICAgICAgICAgIHRoaXNbczldID0gdDEwOwogICAgICAgIH0gfTsKICAgICAgICByZXR1cm4geyBnZXQ6IGUxMSwgc2V0KHMxMCkgewogICAgICAgICAgY29uc3QgaDkgPSBlMTE/LmNhbGwodGhpcyk7CiAgICAgICAgICByMTE/LmNhbGwodGhpcywgczEwKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKHQ5LCBoOSwgaTExKTsKICAgICAgICB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KHQ5KSA/PyBiOwogICAgICB9CiAgICAgIHN0YXRpYyBfJEVpKCkgewogICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGQoImVsZW1lbnRQcm9wZXJ0aWVzIikpKSByZXR1cm47CiAgICAgICAgY29uc3QgdDkgPSBuMih0aGlzKTsKICAgICAgICB0OS5maW5hbGl6ZSgpLCB2b2lkIDAgIT09IHQ5LmwgJiYgKHRoaXMubCA9IFsuLi50OS5sXSksIHRoaXMuZWxlbWVudFByb3BlcnRpZXMgPSBuZXcgTWFwKHQ5LmVsZW1lbnRQcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZCgiZmluYWxpemVkIikpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkID0gdHJ1ZSwgdGhpcy5fJEVpKCksIHRoaXMuaGFzT3duUHJvcGVydHkoZCgicHJvcGVydGllcyIpKSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5wcm9wZXJ0aWVzLCBzOSA9IFsuLi5yMih0MTApLCAuLi5vMih0MTApXTsKICAgICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5KSB0aGlzLmNyZWF0ZVByb3BlcnR5KGkxMSwgdDEwW2kxMV0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB0OSA9IHRoaXNbU3ltYm9sLm1ldGFkYXRhXTsKICAgICAgICBpZiAobnVsbCAhPT0gdDkpIHsKICAgICAgICAgIGNvbnN0IHM5ID0gbGl0UHJvcGVydHlNZXRhZGF0YS5nZXQodDkpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gczkpIGZvciAoY29uc3QgW3QxMCwgaTExXSBvZiBzOSkgdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodDEwLCBpMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl8kRWggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGZvciAoY29uc3QgW3QxMCwgczldIG9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRFdSh0MTAsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaTExICYmIHRoaXMuXyRFaC5zZXQoaTExLCB0MTApOwogICAgICAgIH0KICAgICAgICB0aGlzLmVsZW1lbnRTdHlsZXMgPSB0aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemVTdHlsZXMoczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzOSkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IG5ldyBTZXQoczkuZmxhdCgxIC8gMCkucmV2ZXJzZSgpKTsKICAgICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgaTExLnVuc2hpZnQoYyhzMTApKTsKICAgICAgICB9IGVsc2Ugdm9pZCAwICE9PSBzOSAmJiBpMTEucHVzaChjKHM5KSk7CiAgICAgICAgcmV0dXJuIGkxMTsKICAgICAgfQogICAgICBzdGF0aWMgXyRFdSh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBzOS5hdHRyaWJ1dGU7CiAgICAgICAgcmV0dXJuIGZhbHNlID09PSBpMTEgPyB2b2lkIDAgOiAic3RyaW5nIiA9PSB0eXBlb2YgaTExID8gaTExIDogInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkudG9Mb3dlckNhc2UoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpLCB0aGlzLl8kRXAgPSB2b2lkIDAsIHRoaXMuaXNVcGRhdGVQZW5kaW5nID0gZmFsc2UsIHRoaXMuaGFzVXBkYXRlZCA9IGZhbHNlLCB0aGlzLl8kRW0gPSBudWxsLCB0aGlzLl8kRXYoKTsKICAgICAgfQogICAgICBfJEV2KCkgewogICAgICAgIHRoaXMuXyRFUyA9IG5ldyBQcm9taXNlKCh0OSkgPT4gdGhpcy5lbmFibGVVcGRhdGluZyA9IHQ5KSwgdGhpcy5fJEFMID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgdGhpcy5fJEVfKCksIHRoaXMucmVxdWVzdFVwZGF0ZSgpLCB0aGlzLmNvbnN0cnVjdG9yLmw/LmZvckVhY2goKHQ5KSA9PiB0OSh0aGlzKSk7CiAgICAgIH0KICAgICAgYWRkQ29udHJvbGxlcih0OSkgewogICAgICAgICh0aGlzLl8kRU8gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZCh0OSksIHZvaWQgMCAhPT0gdGhpcy5yZW5kZXJSb290ICYmIHRoaXMuaXNDb25uZWN0ZWQgJiYgdDkuaG9zdENvbm5lY3RlZD8uKCk7CiAgICAgIH0KICAgICAgcmVtb3ZlQ29udHJvbGxlcih0OSkgewogICAgICAgIHRoaXMuXyRFTz8uZGVsZXRlKHQ5KTsKICAgICAgfQogICAgICBfJEVfKCkgewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgczkgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzOwogICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5LmtleXMoKSkgdGhpcy5oYXNPd25Qcm9wZXJ0eShpMTEpICYmICh0OS5zZXQoaTExLCB0aGlzW2kxMV0pLCBkZWxldGUgdGhpc1tpMTFdKTsKICAgICAgICB0OS5zaXplID4gMCAmJiAodGhpcy5fJEVwID0gdDkpOwogICAgICB9CiAgICAgIGNyZWF0ZVJlbmRlclJvb3QoKSB7CiAgICAgICAgY29uc3QgdDkgPSB0aGlzLnNoYWRvd1Jvb3QgPz8gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIFModDksIHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksIHQ5OwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMucmVuZGVyUm9vdCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJSb290KCksIHRoaXMuZW5hYmxlVXBkYXRpbmcodHJ1ZSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3RDb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBlbmFibGVVcGRhdGluZyh0OSkgewogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3REaXNjb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodDksIHM5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQUsodDksIGkxMSk7CiAgICAgIH0KICAgICAgXyRFVCh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0OSksIGUxMSA9IHRoaXMuY29uc3RydWN0b3IuXyRFdSh0OSwgaTExKTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdHJ1ZSA9PT0gaTExLnJlZmxlY3QpIHsKICAgICAgICAgIGNvbnN0IGg5ID0gKHZvaWQgMCAhPT0gaTExLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUgPyBpMTEuY29udmVydGVyIDogdSkudG9BdHRyaWJ1dGUoczksIGkxMS50eXBlKTsKICAgICAgICAgIHRoaXMuXyRFbSA9IHQ5LCBudWxsID09IGg5ID8gdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZTExKSA6IHRoaXMuc2V0QXR0cmlidXRlKGUxMSwgaDkpLCB0aGlzLl8kRW0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFLKHQ5LCBzOSkgewogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuY29uc3RydWN0b3IsIGUxMSA9IGkxMS5fJEVoLmdldCh0OSk7CiAgICAgICAgaWYgKHZvaWQgMCAhPT0gZTExICYmIHRoaXMuXyRFbSAhPT0gZTExKSB7CiAgICAgICAgICBjb25zdCB0MTAgPSBpMTEuZ2V0UHJvcGVydHlPcHRpb25zKGUxMSksIGg5ID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDEwLmNvbnZlcnRlciA/IHsgZnJvbUF0dHJpYnV0ZTogdDEwLmNvbnZlcnRlciB9IDogdm9pZCAwICE9PSB0MTAuY29udmVydGVyPy5mcm9tQXR0cmlidXRlID8gdDEwLmNvbnZlcnRlciA6IHU7CiAgICAgICAgICB0aGlzLl8kRW0gPSBlMTE7CiAgICAgICAgICBjb25zdCByMTEgPSBoOS5mcm9tQXR0cmlidXRlKHM5LCB0MTAudHlwZSk7CiAgICAgICAgICB0aGlzW2UxMV0gPSByMTEgPz8gdGhpcy5fJEVqPy5nZXQoZTExKSA/PyByMTEsIHRoaXMuXyRFbSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlcXVlc3RVcGRhdGUodDksIHM5LCBpMTEsIGUxMSA9IGZhbHNlLCBoOSkgewogICAgICAgIGlmICh2b2lkIDAgIT09IHQ5KSB7CiAgICAgICAgICBjb25zdCByMTEgPSB0aGlzLmNvbnN0cnVjdG9yOwogICAgICAgICAgaWYgKGZhbHNlID09PSBlMTEgJiYgKGg5ID0gdGhpc1t0OV0pLCBpMTEgPz89IHIxMS5nZXRQcm9wZXJ0eU9wdGlvbnModDkpLCAhKChpMTEuaGFzQ2hhbmdlZCA/PyBmKShoOSwgczkpIHx8IGkxMS51c2VEZWZhdWx0ICYmIGkxMS5yZWZsZWN0ICYmIGg5ID09PSB0aGlzLl8kRWo/LmdldCh0OSkgJiYgIXRoaXMuaGFzQXR0cmlidXRlKHIxMS5fJEV1KHQ5LCBpMTEpKSkpIHJldHVybjsKICAgICAgICAgIHRoaXMuQyh0OSwgczksIGkxMSk7CiAgICAgICAgfQogICAgICAgIGZhbHNlID09PSB0aGlzLmlzVXBkYXRlUGVuZGluZyAmJiAodGhpcy5fJEVTID0gdGhpcy5fJEVQKCkpOwogICAgICB9CiAgICAgIEModDksIHM5LCB7IHVzZURlZmF1bHQ6IGkxMSwgcmVmbGVjdDogZTExLCB3cmFwcGVkOiBoOSB9LCByMTEpIHsKICAgICAgICBpMTEgJiYgISh0aGlzLl8kRWogPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmhhcyh0OSkgJiYgKHRoaXMuXyRFai5zZXQodDksIHIxMSA/PyBzOSA/PyB0aGlzW3Q5XSksIHRydWUgIT09IGg5IHx8IHZvaWQgMCAhPT0gcjExKSB8fCAodGhpcy5fJEFMLmhhcyh0OSkgfHwgKHRoaXMuaGFzVXBkYXRlZCB8fCBpMTEgfHwgKHM5ID0gdm9pZCAwKSwgdGhpcy5fJEFMLnNldCh0OSwgczkpKSwgdHJ1ZSA9PT0gZTExICYmIHRoaXMuXyRFbSAhPT0gdDkgJiYgKHRoaXMuXyRFcSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkuYWRkKHQ5KSk7CiAgICAgIH0KICAgICAgYXN5bmMgXyRFUCgpIHsKICAgICAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuXyRFUzsKICAgICAgICB9IGNhdGNoICh0MTApIHsKICAgICAgICAgIFByb21pc2UucmVqZWN0KHQxMCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHQ5ID0gdGhpcy5zY2hlZHVsZVVwZGF0ZSgpOwogICAgICAgIHJldHVybiBudWxsICE9IHQ5ICYmIGF3YWl0IHQ5LCAhdGhpcy5pc1VwZGF0ZVBlbmRpbmc7CiAgICAgIH0KICAgICAgc2NoZWR1bGVVcGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpOwogICAgICB9CiAgICAgIHBlcmZvcm1VcGRhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlUGVuZGluZykgcmV0dXJuOwogICAgICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJSb290ID8/PSB0aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSwgdGhpcy5fJEVwKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgW3QxMSwgczEwXSBvZiB0aGlzLl8kRXApIHRoaXNbdDExXSA9IHMxMDsKICAgICAgICAgICAgdGhpcy5fJEVwID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllczsKICAgICAgICAgIGlmICh0MTAuc2l6ZSA+IDApIGZvciAoY29uc3QgW3MxMCwgaTExXSBvZiB0MTApIHsKICAgICAgICAgICAgY29uc3QgeyB3cmFwcGVkOiB0MTEgfSA9IGkxMSwgZTExID0gdGhpc1tzMTBdOwogICAgICAgICAgICB0cnVlICE9PSB0MTEgfHwgdGhpcy5fJEFMLmhhcyhzMTApIHx8IHZvaWQgMCA9PT0gZTExIHx8IHRoaXMuQyhzMTAsIHZvaWQgMCwgaTExLCBlMTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgdDkgPSBmYWxzZTsKICAgICAgICBjb25zdCBzOSA9IHRoaXMuXyRBTDsKICAgICAgICB0cnkgewogICAgICAgICAgdDkgPSB0aGlzLnNob3VsZFVwZGF0ZShzOSksIHQ5ID8gKHRoaXMud2lsbFVwZGF0ZShzOSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDEwKSA9PiB0MTAuaG9zdFVwZGF0ZT8uKCkpLCB0aGlzLnVwZGF0ZShzOSkpIDogdGhpcy5fJEVNKCk7CiAgICAgICAgfSBjYXRjaCAoczEwKSB7CiAgICAgICAgICB0aHJvdyB0OSA9IGZhbHNlLCB0aGlzLl8kRU0oKSwgczEwOwogICAgICAgIH0KICAgICAgICB0OSAmJiB0aGlzLl8kQUUoczkpOwogICAgICB9CiAgICAgIHdpbGxVcGRhdGUodDkpIHsKICAgICAgfQogICAgICBfJEFFKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5mb3JFYWNoKCh0MTApID0+IHQxMC5ob3N0VXBkYXRlZD8uKCkpLCB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMuaGFzVXBkYXRlZCA9IHRydWUsIHRoaXMuZmlyc3RVcGRhdGVkKHQ5KSksIHRoaXMudXBkYXRlZCh0OSk7CiAgICAgIH0KICAgICAgXyRFTSgpIHsKICAgICAgICB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIGdldCB1cGRhdGVDb21wbGV0ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGdldFVwZGF0ZUNvbXBsZXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kRVM7CiAgICAgIH0KICAgICAgc2hvdWxkVXBkYXRlKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVxICYmPSB0aGlzLl8kRXEuZm9yRWFjaCgodDEwKSA9PiB0aGlzLl8kRVQodDEwLCB0aGlzW3QxMF0pKSwgdGhpcy5fJEVNKCk7CiAgICAgIH0KICAgICAgdXBkYXRlZCh0OSkgewogICAgICB9CiAgICAgIGZpcnN0VXBkYXRlZCh0OSkgewogICAgICB9CiAgICB9OwogICAgeS5lbGVtZW50U3R5bGVzID0gW10sIHkuc2hhZG93Um9vdE9wdGlvbnMgPSB7IG1vZGU6ICJvcGVuIiB9LCB5W2QoImVsZW1lbnRQcm9wZXJ0aWVzIildID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgeVtkKCJmaW5hbGl6ZWQiKV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBwPy4oeyBSZWFjdGl2ZUVsZW1lbnQ6IHkgfSksIChhLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiMi4xLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcwpmdW5jdGlvbiBWKHQ5LCBpMTEpIHsKICBpZiAoIXUyKHQ5KSB8fCAhdDkuaGFzT3duUHJvcGVydHkoInJhdyIpKSB0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7CiAgcmV0dXJuIHZvaWQgMCAhPT0gZTMgPyBlMy5jcmVhdGVIVE1MKGkxMSkgOiBpMTE7Cn0KZnVuY3Rpb24gTSh0OSwgaTExLCBzOSA9IHQ5LCBlMTEpIHsKICBpZiAoaTExID09PSBFKSByZXR1cm4gaTExOwogIGxldCBoOSA9IHZvaWQgMCAhPT0gZTExID8gczkuXyRDbz8uW2UxMV0gOiBzOS5fJENsOwogIGNvbnN0IG8xMyA9IGEyKGkxMSkgPyB2b2lkIDAgOiBpMTEuXyRsaXREaXJlY3RpdmUkOwogIHJldHVybiBoOT8uY29uc3RydWN0b3IgIT09IG8xMyAmJiAoaDk/Ll8kQU8/LihmYWxzZSksIHZvaWQgMCA9PT0gbzEzID8gaDkgPSB2b2lkIDAgOiAoaDkgPSBuZXcgbzEzKHQ5KSwgaDkuXyRBVCh0OSwgczksIGUxMSkpLCB2b2lkIDAgIT09IGUxMSA/IChzOS5fJENvID8/PSBbXSlbZTExXSA9IGg5IDogczkuXyRDbCA9IGg5KSwgdm9pZCAwICE9PSBoOSAmJiAoaTExID0gTSh0OSwgaDkuXyRBUyh0OSwgaTExLnZhbHVlcyksIGg5LCBlMTEpKSwgaTExOwp9CnZhciB0MiwgaTMsIHMyLCBlMywgaDIsIG8zLCBuMywgcjMsIGwyLCBjMywgYTIsIHUyLCBkMiwgZjIsIHYsIF8sIG0sIHAyLCBnLCAkLCB5MiwgeCwgYjIsIHcsIFQsIEUsIEEsIEMsIFAsIE4sIFMyLCBSLCBrLCBILCBJLCBMLCB6LCBaLCBqLCBCLCBEOwp2YXIgaW5pdF9saXRfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcyIoKSB7CiAgICB0MiA9IGdsb2JhbFRoaXMsIGkzID0gKHQ5KSA9PiB0OSwgczIgPSB0Mi50cnVzdGVkVHlwZXMsIGUzID0gczIgPyBzMi5jcmVhdGVQb2xpY3koImxpdC1odG1sIiwgeyBjcmVhdGVIVE1MOiAodDkpID0+IHQ5IH0pIDogdm9pZCAwLCBoMiA9ICIkbGl0JCIsIG8zID0gYGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCwgbjMgPSAiPyIgKyBvMywgcjMgPSBgPCR7bjN9PmAsIGwyID0gZG9jdW1lbnQsIGMzID0gKCkgPT4gbDIuY3JlYXRlQ29tbWVudCgiIiksIGEyID0gKHQ5KSA9PiBudWxsID09PSB0OSB8fCAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgdDksIHUyID0gQXJyYXkuaXNBcnJheSwgZDIgPSAodDkpID0+IHUyKHQ5KSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiB0OT8uW1N5bWJvbC5pdGVyYXRvcl0sIGYyID0gIlsgCVxuXGZccl0iLCB2ID0gLzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csIF8gPSAvLS0+L2csIG0gPSAvPi9nLCBwMiA9IFJlZ0V4cChgPnwke2YyfSg/OihbXlxccyInPj0vXSspKCR7ZjJ9Kj0ke2YyfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsICJnIiksIGcgPSAvJy9nLCAkID0gLyIvZywgeTIgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksIHggPSAodDkpID0+IChpMTEsIC4uLnM5KSA9PiAoeyBfJGxpdFR5cGUkOiB0OSwgc3RyaW5nczogaTExLCB2YWx1ZXM6IHM5IH0pLCBiMiA9IHgoMSksIHcgPSB4KDIpLCBUID0geCgzKSwgRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSwgQSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLCBDID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIFAgPSBsMi5jcmVhdGVUcmVlV2Fsa2VyKGwyLCAxMjkpOwogICAgTiA9ICh0OSwgaTExKSA9PiB7CiAgICAgIGNvbnN0IHM5ID0gdDkubGVuZ3RoIC0gMSwgZTExID0gW107CiAgICAgIGxldCBuMTMsIGw2ID0gMiA9PT0gaTExID8gIjxzdmc+IiA6IDMgPT09IGkxMSA/ICI8bWF0aD4iIDogIiIsIGMxMSA9IHY7CiAgICAgIGZvciAobGV0IGkxMiA9IDA7IGkxMiA8IHM5OyBpMTIrKykgewogICAgICAgIGNvbnN0IHMxMCA9IHQ5W2kxMl07CiAgICAgICAgbGV0IGE1LCB1NywgZDYgPSAtMSwgZjcgPSAwOwogICAgICAgIGZvciAoOyBmNyA8IHMxMC5sZW5ndGggJiYgKGMxMS5sYXN0SW5kZXggPSBmNywgdTcgPSBjMTEuZXhlYyhzMTApLCBudWxsICE9PSB1Nyk7ICkgZjcgPSBjMTEubGFzdEluZGV4LCBjMTEgPT09IHYgPyAiIS0tIiA9PT0gdTdbMV0gPyBjMTEgPSBfIDogdm9pZCAwICE9PSB1N1sxXSA/IGMxMSA9IG0gOiB2b2lkIDAgIT09IHU3WzJdID8gKHkyLnRlc3QodTdbMl0pICYmIChuMTMgPSBSZWdFeHAoIjwvIiArIHU3WzJdLCAiZyIpKSwgYzExID0gcDIpIDogdm9pZCAwICE9PSB1N1szXSAmJiAoYzExID0gcDIpIDogYzExID09PSBwMiA/ICI+IiA9PT0gdTdbMF0gPyAoYzExID0gbjEzID8/IHYsIGQ2ID0gLTEpIDogdm9pZCAwID09PSB1N1sxXSA/IGQ2ID0gLTIgOiAoZDYgPSBjMTEubGFzdEluZGV4IC0gdTdbMl0ubGVuZ3RoLCBhNSA9IHU3WzFdLCBjMTEgPSB2b2lkIDAgPT09IHU3WzNdID8gcDIgOiAnIicgPT09IHU3WzNdID8gJCA6IGcpIDogYzExID09PSAkIHx8IGMxMSA9PT0gZyA/IGMxMSA9IHAyIDogYzExID09PSBfIHx8IGMxMSA9PT0gbSA/IGMxMSA9IHYgOiAoYzExID0gcDIsIG4xMyA9IHZvaWQgMCk7CiAgICAgICAgY29uc3QgeDMgPSBjMTEgPT09IHAyICYmIHQ5W2kxMiArIDFdLnN0YXJ0c1dpdGgoIi8+IikgPyAiICIgOiAiIjsKICAgICAgICBsNiArPSBjMTEgPT09IHYgPyBzMTAgKyByMyA6IGQ2ID49IDAgPyAoZTExLnB1c2goYTUpLCBzMTAuc2xpY2UoMCwgZDYpICsgaDIgKyBzMTAuc2xpY2UoZDYpICsgbzMgKyB4MykgOiBzMTAgKyBvMyArICgtMiA9PT0gZDYgPyBpMTIgOiB4Myk7CiAgICAgIH0KICAgICAgcmV0dXJuIFtWKHQ5LCBsNiArICh0OVtzOV0gfHwgIjw/PiIpICsgKDIgPT09IGkxMSA/ICI8L3N2Zz4iIDogMyA9PT0gaTExID8gIjwvbWF0aD4iIDogIiIpKSwgZTExXTsKICAgIH07CiAgICBTMiA9IGNsYXNzIF9TIHsKICAgICAgY29uc3RydWN0b3IoeyBzdHJpbmdzOiB0OSwgXyRsaXRUeXBlJDogaTExIH0sIGUxMSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdGhpcy5wYXJ0cyA9IFtdOwogICAgICAgIGxldCBsNiA9IDAsIGE1ID0gMDsKICAgICAgICBjb25zdCB1NyA9IHQ5Lmxlbmd0aCAtIDEsIGQ2ID0gdGhpcy5wYXJ0cywgW2Y3LCB2NV0gPSBOKHQ5LCBpMTEpOwogICAgICAgIGlmICh0aGlzLmVsID0gX1MuY3JlYXRlRWxlbWVudChmNywgZTExKSwgUC5jdXJyZW50Tm9kZSA9IHRoaXMuZWwuY29udGVudCwgMiA9PT0gaTExIHx8IDMgPT09IGkxMSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICB0MTAucmVwbGFjZVdpdGgoLi4udDEwLmNoaWxkTm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgbnVsbCAhPT0gKHIxMSA9IFAubmV4dE5vZGUoKSkgJiYgZDYubGVuZ3RoIDwgdTc7ICkgewogICAgICAgICAgaWYgKDEgPT09IHIxMS5ub2RlVHlwZSkgewogICAgICAgICAgICBpZiAocjExLmhhc0F0dHJpYnV0ZXMoKSkgZm9yIChjb25zdCB0MTAgb2YgcjExLmdldEF0dHJpYnV0ZU5hbWVzKCkpIGlmICh0MTAuZW5kc1dpdGgoaDIpKSB7CiAgICAgICAgICAgICAgY29uc3QgaTEyID0gdjVbYTUrK10sIHM5ID0gcjExLmdldEF0dHJpYnV0ZSh0MTApLnNwbGl0KG8zKSwgZTEyID0gLyhbLj9AXSk/KC4qKS8uZXhlYyhpMTIpOwogICAgICAgICAgICAgIGQ2LnB1c2goeyB0eXBlOiAxLCBpbmRleDogbDYsIG5hbWU6IGUxMlsyXSwgc3RyaW5nczogczksIGN0b3I6ICIuIiA9PT0gZTEyWzFdID8gSSA6ICI/IiA9PT0gZTEyWzFdID8gTCA6ICJAIiA9PT0gZTEyWzFdID8geiA6IEggfSksIHIxMS5yZW1vdmVBdHRyaWJ1dGUodDEwKTsKICAgICAgICAgICAgfSBlbHNlIHQxMC5zdGFydHNXaXRoKG8zKSAmJiAoZDYucHVzaCh7IHR5cGU6IDYsIGluZGV4OiBsNiB9KSwgcjExLnJlbW92ZUF0dHJpYnV0ZSh0MTApKTsKICAgICAgICAgICAgaWYgKHkyLnRlc3QocjExLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgY29uc3QgdDEwID0gcjExLnRleHRDb250ZW50LnNwbGl0KG8zKSwgaTEyID0gdDEwLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgaWYgKGkxMiA+IDApIHsKICAgICAgICAgICAgICAgIHIxMS50ZXh0Q29udGVudCA9IHMyID8gczIuZW1wdHlTY3JpcHQgOiAiIjsKICAgICAgICAgICAgICAgIGZvciAobGV0IHM5ID0gMDsgczkgPCBpMTI7IHM5KyspIHIxMS5hcHBlbmQodDEwW3M5XSwgYzMoKSksIFAubmV4dE5vZGUoKSwgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiArK2w2IH0pOwogICAgICAgICAgICAgICAgcjExLmFwcGVuZCh0MTBbaTEyXSwgYzMoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKDggPT09IHIxMS5ub2RlVHlwZSkgaWYgKHIxMS5kYXRhID09PSBuMykgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiBsNiB9KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBsZXQgdDEwID0gLTE7CiAgICAgICAgICAgIGZvciAoOyAtMSAhPT0gKHQxMCA9IHIxMS5kYXRhLmluZGV4T2YobzMsIHQxMCArIDEpKTsgKSBkNi5wdXNoKHsgdHlwZTogNywgaW5kZXg6IGw2IH0pLCB0MTAgKz0gbzMubGVuZ3RoIC0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGw2Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHQ5LCBpMTEpIHsKICAgICAgICBjb25zdCBzOSA9IGwyLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAgICAgcmV0dXJuIHM5LmlubmVySFRNTCA9IHQ5LCBzOTsKICAgICAgfQogICAgfTsKICAgIFIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQVYgPSBbXSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUQgPSB0OSwgdGhpcy5fJEFNID0gaTExOwogICAgICB9CiAgICAgIGdldCBwYXJlbnROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZTsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgdSh0OSkgewogICAgICAgIGNvbnN0IHsgZWw6IHsgY29udGVudDogaTExIH0sIHBhcnRzOiBzOSB9ID0gdGhpcy5fJEFELCBlMTEgPSAodDk/LmNyZWF0aW9uU2NvcGUgPz8gbDIpLmltcG9ydE5vZGUoaTExLCB0cnVlKTsKICAgICAgICBQLmN1cnJlbnROb2RlID0gZTExOwogICAgICAgIGxldCBoOSA9IFAubmV4dE5vZGUoKSwgbzEzID0gMCwgbjEzID0gMCwgcjExID0gczlbMF07CiAgICAgICAgZm9yICg7IHZvaWQgMCAhPT0gcjExOyApIHsKICAgICAgICAgIGlmIChvMTMgPT09IHIxMS5pbmRleCkgewogICAgICAgICAgICBsZXQgaTEyOwogICAgICAgICAgICAyID09PSByMTEudHlwZSA/IGkxMiA9IG5ldyBrKGg5LCBoOS5uZXh0U2libGluZywgdGhpcywgdDkpIDogMSA9PT0gcjExLnR5cGUgPyBpMTIgPSBuZXcgcjExLmN0b3IoaDksIHIxMS5uYW1lLCByMTEuc3RyaW5ncywgdGhpcywgdDkpIDogNiA9PT0gcjExLnR5cGUgJiYgKGkxMiA9IG5ldyBaKGg5LCB0aGlzLCB0OSkpLCB0aGlzLl8kQVYucHVzaChpMTIpLCByMTEgPSBzOVsrK24xM107CiAgICAgICAgICB9CiAgICAgICAgICBvMTMgIT09IHIxMT8uaW5kZXggJiYgKGg5ID0gUC5uZXh0Tm9kZSgpLCBvMTMrKyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQLmN1cnJlbnROb2RlID0gbDIsIGUxMTsKICAgICAgfQogICAgICBwKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzOSBvZiB0aGlzLl8kQVYpIHZvaWQgMCAhPT0gczkgJiYgKHZvaWQgMCAhPT0gczkuc3RyaW5ncyA/IChzOS5fJEFJKHQ5LCBzOSwgaTExKSwgaTExICs9IHM5LnN0cmluZ3MubGVuZ3RoIC0gMikgOiBzOS5fJEFJKHQ5W2kxMV0pKSwgaTExKys7CiAgICAgIH0KICAgIH07CiAgICBrID0gY2xhc3MgX2sgewogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNPy5fJEFVID8/IHRoaXMuXyRDdjsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSwgZTExKSB7CiAgICAgICAgdGhpcy50eXBlID0gMiwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUEgPSB0OSwgdGhpcy5fJEFCID0gaTExLCB0aGlzLl8kQU0gPSBzOSwgdGhpcy5vcHRpb25zID0gZTExLCB0aGlzLl8kQ3YgPSBlMTE/LmlzQ29ubmVjdGVkID8/IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IHBhcmVudE5vZGUoKSB7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5fJEFBLnBhcmVudE5vZGU7CiAgICAgICAgY29uc3QgaTExID0gdGhpcy5fJEFNOwogICAgICAgIHJldHVybiB2b2lkIDAgIT09IGkxMSAmJiAxMSA9PT0gdDk/Lm5vZGVUeXBlICYmICh0OSA9IGkxMS5wYXJlbnROb2RlKSwgdDk7CiAgICAgIH0KICAgICAgZ2V0IHN0YXJ0Tm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBOwogICAgICB9CiAgICAgIGdldCBlbmROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUI7CiAgICAgIH0KICAgICAgXyRBSSh0OSwgaTExID0gdGhpcykgewogICAgICAgIHQ5ID0gTSh0aGlzLCB0OSwgaTExKSwgYTIodDkpID8gdDkgPT09IEEgfHwgbnVsbCA9PSB0OSB8fCAiIiA9PT0gdDkgPyAodGhpcy5fJEFIICE9PSBBICYmIHRoaXMuXyRBUigpLCB0aGlzLl8kQUggPSBBKSA6IHQ5ICE9PSB0aGlzLl8kQUggJiYgdDkgIT09IEUgJiYgdGhpcy5fKHQ5KSA6IHZvaWQgMCAhPT0gdDkuXyRsaXRUeXBlJCA/IHRoaXMuJCh0OSkgOiB2b2lkIDAgIT09IHQ5Lm5vZGVUeXBlID8gdGhpcy5UKHQ5KSA6IGQyKHQ5KSA/IHRoaXMuayh0OSkgOiB0aGlzLl8odDkpOwogICAgICB9CiAgICAgIE8odDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQ5LCB0aGlzLl8kQUIpOwogICAgICB9CiAgICAgIFQodDkpIHsKICAgICAgICB0aGlzLl8kQUggIT09IHQ5ICYmICh0aGlzLl8kQVIoKSwgdGhpcy5fJEFIID0gdGhpcy5PKHQ5KSk7CiAgICAgIH0KICAgICAgXyh0OSkgewogICAgICAgIHRoaXMuXyRBSCAhPT0gQSAmJiBhMih0aGlzLl8kQUgpID8gdGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGEgPSB0OSA6IHRoaXMuVChsMi5jcmVhdGVUZXh0Tm9kZSh0OSkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICAkKHQ5KSB7CiAgICAgICAgY29uc3QgeyB2YWx1ZXM6IGkxMSwgXyRsaXRUeXBlJDogczkgfSA9IHQ5LCBlMTEgPSAibnVtYmVyIiA9PSB0eXBlb2YgczkgPyB0aGlzLl8kQUModDkpIDogKHZvaWQgMCA9PT0gczkuZWwgJiYgKHM5LmVsID0gUzIuY3JlYXRlRWxlbWVudChWKHM5LmgsIHM5LmhbMF0pLCB0aGlzLm9wdGlvbnMpKSwgczkpOwogICAgICAgIGlmICh0aGlzLl8kQUg/Ll8kQUQgPT09IGUxMSkgdGhpcy5fJEFILnAoaTExKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IG5ldyBSKGUxMSwgdGhpcyksIHMxMCA9IHQxMC51KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICB0MTAucChpMTEpLCB0aGlzLlQoczEwKSwgdGhpcy5fJEFIID0gdDEwOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFDKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IEMuZ2V0KHQ5LnN0cmluZ3MpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkxMSAmJiBDLnNldCh0OS5zdHJpbmdzLCBpMTEgPSBuZXcgUzIodDkpKSwgaTExOwogICAgICB9CiAgICAgIGsodDkpIHsKICAgICAgICB1Mih0aGlzLl8kQUgpIHx8ICh0aGlzLl8kQUggPSBbXSwgdGhpcy5fJEFSKCkpOwogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRBSDsKICAgICAgICBsZXQgczksIGUxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBoOSBvZiB0OSkgZTExID09PSBpMTEubGVuZ3RoID8gaTExLnB1c2goczkgPSBuZXcgX2sodGhpcy5PKGMzKCkpLCB0aGlzLk8oYzMoKSksIHRoaXMsIHRoaXMub3B0aW9ucykpIDogczkgPSBpMTFbZTExXSwgczkuXyRBSShoOSksIGUxMSsrOwogICAgICAgIGUxMSA8IGkxMS5sZW5ndGggJiYgKHRoaXMuXyRBUihzOSAmJiBzOS5fJEFCLm5leHRTaWJsaW5nLCBlMTEpLCBpMTEubGVuZ3RoID0gZTExKTsKICAgICAgfQogICAgICBfJEFSKHQ5ID0gdGhpcy5fJEFBLm5leHRTaWJsaW5nLCBzOSkgewogICAgICAgIGZvciAodGhpcy5fJEFQPy4oZmFsc2UsIHRydWUsIHM5KTsgdDkgIT09IHRoaXMuXyRBQjsgKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMyh0OSkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpMyh0OSkucmVtb3ZlKCksIHQ5ID0gczEwOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDb25uZWN0ZWQodDkpIHsKICAgICAgICB2b2lkIDAgPT09IHRoaXMuXyRBTSAmJiAodGhpcy5fJEN2ID0gdDksIHRoaXMuXyRBUD8uKHQ5KSk7CiAgICAgIH0KICAgIH07CiAgICBIID0gY2xhc3MgewogICAgICBnZXQgdGFnTmFtZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWU7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgdGhpcy50eXBlID0gMSwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLmVsZW1lbnQgPSB0OSwgdGhpcy5uYW1lID0gaTExLCB0aGlzLl8kQU0gPSBlMTEsIHRoaXMub3B0aW9ucyA9IGg5LCBzOS5sZW5ndGggPiAyIHx8ICIiICE9PSBzOVswXSB8fCAiIiAhPT0gczlbMV0gPyAodGhpcy5fJEFIID0gQXJyYXkoczkubGVuZ3RoIC0gMSkuZmlsbChuZXcgU3RyaW5nKCkpLCB0aGlzLnN0cmluZ3MgPSBzOSkgOiB0aGlzLl8kQUggPSBBOwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMsIHM5LCBlMTEpIHsKICAgICAgICBjb25zdCBoOSA9IHRoaXMuc3RyaW5nczsKICAgICAgICBsZXQgbzEzID0gZmFsc2U7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSwgbzEzID0gIWEyKHQ5KSB8fCB0OSAhPT0gdGhpcy5fJEFIICYmIHQ5ICE9PSBFLCBvMTMgJiYgKHRoaXMuXyRBSCA9IHQ5KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IGUxMiA9IHQ5OwogICAgICAgICAgbGV0IG4xMywgcjExOwogICAgICAgICAgZm9yICh0OSA9IGg5WzBdLCBuMTMgPSAwOyBuMTMgPCBoOS5sZW5ndGggLSAxOyBuMTMrKykgcjExID0gTSh0aGlzLCBlMTJbczkgKyBuMTNdLCBpMTEsIG4xMyksIHIxMSA9PT0gRSAmJiAocjExID0gdGhpcy5fJEFIW24xM10pLCBvMTMgfHw9ICFhMihyMTEpIHx8IHIxMSAhPT0gdGhpcy5fJEFIW24xM10sIHIxMSA9PT0gQSA/IHQ5ID0gQSA6IHQ5ICE9PSBBICYmICh0OSArPSAocjExID8/ICIiKSArIGg5W24xMyArIDFdKSwgdGhpcy5fJEFIW24xM10gPSByMTE7CiAgICAgICAgfQogICAgICAgIG8xMyAmJiAhZTExICYmIHRoaXMuaih0OSk7CiAgICAgIH0KICAgICAgaih0OSkgewogICAgICAgIHQ5ID09PSBBID8gdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpIDogdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHQ5ID8/ICIiKTsKICAgICAgfQogICAgfTsKICAgIEkgPSBjbGFzcyBleHRlbmRzIEggewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLnR5cGUgPSAzOwogICAgICB9CiAgICAgIGoodDkpIHsKICAgICAgICB0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXSA9IHQ5ID09PSBBID8gdm9pZCAwIDogdDk7CiAgICAgIH0KICAgIH07CiAgICBMID0gY2xhc3MgZXh0ZW5kcyBIIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy50eXBlID0gNDsKICAgICAgfQogICAgICBqKHQ5KSB7CiAgICAgICAgdGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsICEhdDkgJiYgdDkgIT09IEEpOwogICAgICB9CiAgICB9OwogICAgeiA9IGNsYXNzIGV4dGVuZHMgSCB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgc3VwZXIodDksIGkxMSwgczksIGUxMSwgaDkpLCB0aGlzLnR5cGUgPSA1OwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMpIHsKICAgICAgICBpZiAoKHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSA/PyBBKSA9PT0gRSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHM5ID0gdGhpcy5fJEFILCBlMTEgPSB0OSA9PT0gQSAmJiBzOSAhPT0gQSB8fCB0OS5jYXB0dXJlICE9PSBzOS5jYXB0dXJlIHx8IHQ5Lm9uY2UgIT09IHM5Lm9uY2UgfHwgdDkucGFzc2l2ZSAhPT0gczkucGFzc2l2ZSwgaDkgPSB0OSAhPT0gQSAmJiAoczkgPT09IEEgfHwgZTExKTsKICAgICAgICBlMTEgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLCB0aGlzLCBzOSksIGg5ICYmIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSwgdGhpcywgdDkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICBoYW5kbGVFdmVudCh0OSkgewogICAgICAgICJmdW5jdGlvbiIgPT0gdHlwZW9mIHRoaXMuXyRBSCA/IHRoaXMuXyRBSC5jYWxsKHRoaXMub3B0aW9ucz8uaG9zdCA/PyB0aGlzLmVsZW1lbnQsIHQ5KSA6IHRoaXMuXyRBSC5oYW5kbGVFdmVudCh0OSk7CiAgICAgIH0KICAgIH07CiAgICBaID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IHQ5LCB0aGlzLnR5cGUgPSA2LCB0aGlzLl8kQU4gPSB2b2lkIDAsIHRoaXMuXyRBTSA9IGkxMSwgdGhpcy5vcHRpb25zID0gczk7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQUkodDkpIHsKICAgICAgICBNKHRoaXMsIHQ5KTsKICAgICAgfQogICAgfTsKICAgIGogPSB7IE06IGgyLCBQOiBvMywgQTogbjMsIEM6IDEsIEw6IE4sIFIsIEQ6IGQyLCBWOiBNLCBJOiBrLCBILCBOOiBMLCBVOiB6LCBCOiBJLCBGOiBaIH0sIEIgPSB0Mi5saXRIdG1sUG9seWZpbGxTdXBwb3J0OwogICAgQj8uKFMyLCBrKSwgKHQyLmxpdEh0bWxWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjMuMy4yIik7CiAgICBEID0gKHQ5LCBpMTEsIHM5KSA9PiB7CiAgICAgIGNvbnN0IGUxMSA9IHM5Py5yZW5kZXJCZWZvcmUgPz8gaTExOwogICAgICBsZXQgaDkgPSBlMTEuXyRsaXRQYXJ0JDsKICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHsKICAgICAgICBjb25zdCB0MTAgPSBzOT8ucmVuZGVyQmVmb3JlID8/IG51bGw7CiAgICAgICAgZTExLl8kbGl0UGFydCQgPSBoOSA9IG5ldyBrKGkxMS5pbnNlcnRCZWZvcmUoYzMoKSwgdDEwKSwgdDEwLCB2b2lkIDAsIHM5ID8/IHt9KTsKICAgICAgfQogICAgICByZXR1cm4gaDkuXyRBSSh0OSksIGg5OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1lbGVtZW50QDQuMi4yL25vZGVfbW9kdWxlcy9saXQtZWxlbWVudC9saXQtZWxlbWVudC5qcwp2YXIgczMsIGk0LCBvNCwgbjQ7CnZhciBpbml0X2xpdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWVsZW1lbnRANC4yLjIvbm9kZV9tb2R1bGVzL2xpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgaW5pdF9yZWFjdGl2ZV9lbGVtZW50KCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBzMyA9IGdsb2JhbFRoaXM7CiAgICBpNCA9IGNsYXNzIGV4dGVuZHMgeSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMucmVuZGVyT3B0aW9ucyA9IHsgaG9zdDogdGhpcyB9LCB0aGlzLl8kRG8gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgY3JlYXRlUmVuZGVyUm9vdCgpIHsKICAgICAgICBjb25zdCB0OSA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZSA/Pz0gdDkuZmlyc3RDaGlsZCwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgY29uc3QgcjExID0gdGhpcy5yZW5kZXIoKTsKICAgICAgICB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZCA9IHRoaXMuaXNDb25uZWN0ZWQpLCBzdXBlci51cGRhdGUodDkpLCB0aGlzLl8kRG8gPSBEKHIxMSwgdGhpcy5yZW5kZXJSb290LCB0aGlzLnJlbmRlck9wdGlvbnMpOwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKHRydWUpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKGZhbHNlKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgIH07CiAgICBpNC5fJGxpdEVsZW1lbnQkID0gdHJ1ZSwgaTRbImZpbmFsaXplZCJdID0gdHJ1ZSwgczMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG80ID0gczMubGl0RWxlbWVudFBvbHlmaWxsU3VwcG9ydDsKICAgIG80Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG40ID0geyBfJEFLOiAodDksIGUxMSwgcjExKSA9PiB7CiAgICAgIHQ5Ll8kQUsoZTExLCByMTEpOwogICAgfSwgXyRBTDogKHQ5KSA9PiB0OS5fJEFMIH07CiAgICAoczMubGl0RWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiNC4yLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9pcy1zZXJ2ZXIuanMKdmFyIG81Owp2YXIgaW5pdF9pc19zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvaXMtc2VydmVyLmpzIigpIHsKICAgIG81ID0gZmFsc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcwp2YXIgaW5pdF9saXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfbGl0X2VsZW1lbnQoKTsKICAgIGluaXRfaXNfc2VydmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS9kaXN0X3RzL2luZGV4LmpzCnZhciByZXF1aXJlX2Rpc3RfdHMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb3VuaXF1ZUAxLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvaXNvdW5pcXVlL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLnVuaSA9IHZvaWQgMDsKICAgIHZhciB1bmkzID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH1fJHtgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KX1gOwogICAgfTsKICAgIGV4cG9ydHMudW5pID0gdW5pMzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkLCBkZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkID0gY2xhc3MgewogICAgICBjbGFpbSgpIHsKICAgICAgICBpZiAodGhpcy5jbGFpbWVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsYWltZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zdG9wcGVkQXQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmNsYWltZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkZWZlciA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzCnZhciBDdW11bGF0aXZlRGVmZXJyZWQsIGN1bXVsYXRpdmVEZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZCgpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMgPSBbXTsKICAgICAgICB0aGlzLmRlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgc3ViRGVmZXIoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRlZmVyKCk7CiAgICAgICAgdGhpcy5hZGRQcm9taXNlKGRvbmUucHJvbWlzZSk7CiAgICAgICAgcmV0dXJuIGRvbmU7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0cywgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkLAogIERlZmVycmVkOiAoKSA9PiBEZWZlcnJlZCwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlciwKICBkZWZlcjogKCkgPT4gZGVmZXIsCiAgZnJvbUNhbGxiYWNrOiAoKSA9PiBmcm9tQ2FsbGJhY2ssCiAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTogKCkgPT4gZ2V0Rmlyc3RUcnVlT3JGYWxzZSwKICBtYXA6ICgpID0+IG1hcCwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZSwKICByZXNvbHZlZFByb21pc2U6ICgpID0+IHJlc29sdmVkUHJvbWlzZSwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZSwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAKfSk7CnZhciByZXNvbHZlZFByb21pc2UsIHJlamVjdGVkUHJvbWlzZSwgbWFwLCB0aW1lb3V0V3JhcCwgdGltZW91dEFuZENvbnRpbnVlLCBnZXRGaXJzdFRydWVPckZhbHNlLCBmcm9tQ2FsbGJhY2s7CnZhciBpbml0X2Rpc3RfdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkKCk7CiAgICByZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UgPSAoZXJyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpOwogICAgfTsKICAgIG1hcCA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcgPSA2ZTQpID0+IHsKICAgICAgcmV0dXJuIHRpbWVvdXRXcmFwKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIoKTsKICAgICAgZm9yIChjb25zdCBwcm9taXNlQXJnIG9mIHByb21pc2VzQXJnKSB7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKChyZXN1bHRBcmcpID0+IHsKICAgICAgICAgIGlmIChyZXN1bHRBcmcgPT09IHRydWUpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQXJnKS50aGVuKCgpID0+IHsKICAgICAgICBkb25lLnJlc29sdmUoZmFsc2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgIH07CiAgICBmcm9tQ2FsbGJhY2sgPSAoZm4pID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgZm4oKGVyciwgcmVzdWx0KSA9PiB7CiAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRyeF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjguMS9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcwpmdW5jdGlvbiBfX2V4dGVuZHMoZDYsIGI1KSB7CiAgaWYgKHR5cGVvZiBiNSAhPT0gImZ1bmN0aW9uIiAmJiBiNSAhPT0gbnVsbCkKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIiArIFN0cmluZyhiNSkgKyAiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTsKICBleHRlbmRTdGF0aWNzKGQ2LCBiNSk7CiAgZnVuY3Rpb24gX18oKSB7CiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDY7CiAgfQogIGQ2LnByb3RvdHlwZSA9IGI1ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiNSkgOiAoX18ucHJvdG90eXBlID0gYjUucHJvdG90eXBlLCBuZXcgX18oKSk7Cn0KZnVuY3Rpb24gX19yZXN0KHM5LCBlMTEpIHsKICB2YXIgdDkgPSB7fTsKICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpICYmIGUxMS5pbmRleE9mKHA3KSA8IDApCiAgICB0OVtwN10gPSBzOVtwN107CiAgaWYgKHM5ICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpCiAgICBmb3IgKHZhciBpMTEgPSAwLCBwNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoczkpOyBpMTEgPCBwNy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChlMTEuaW5kZXhPZihwN1tpMTFdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHM5LCBwN1tpMTFdKSkKICAgICAgICB0OVtwN1tpMTFdXSA9IHM5W3A3W2kxMV1dOwogICAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYykgewogIHZhciBjMTEgPSBhcmd1bWVudHMubGVuZ3RoLCByMTEgPSBjMTEgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5MikgOiBkZXNjLCBkNjsKICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByMTEgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYyk7CiAgZWxzZSBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgaWYgKGQ2ID0gZGVjb3JhdG9yc1tpMTFdKSByMTEgPSAoYzExIDwgMyA/IGQ2KHIxMSkgOiBjMTEgPiAzID8gZDYodGFyZ2V0LCBrZXkyLCByMTEpIDogZDYodGFyZ2V0LCBrZXkyKSkgfHwgcjExOwogIHJldHVybiBjMTEgPiAzICYmIHIxMSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXkyLCByMTEpLCByMTE7Cn0KZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHsKICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXkyKSB7CiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXkyLCBwYXJhbUluZGV4KTsKICB9Owp9CmZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn0KZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnMyKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9CmZ1bmN0aW9uIF9fcHJvcEtleSh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzeW1ib2wiID8geDMgOiAiIi5jb25jYXQoeDMpOwp9CmZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGY3LCBuYW1lLCBwcmVmaXg0KSB7CiAgaWYgKHR5cGVvZiBuYW1lID09PSAic3ltYm9sIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyAiWyIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sICJdIikgOiAiIjsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGY3LCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4NCA/ICIiLmNvbmNhdChwcmVmaXg0LCAiICIsIG5hbWUpIDogbmFtZSB9KTsKfQpmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7CiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpOwp9CmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQNCwgZ2VuZXJhdG9yKSB7CiAgZnVuY3Rpb24gYWRvcHQodmFsdWUyKSB7CiAgICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgUDQgPyB2YWx1ZTIgOiBuZXcgUDQoZnVuY3Rpb24ocmVzb2x2ZTIpIHsKICAgICAgcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0pOwogIH0KICByZXR1cm4gbmV3IChQNCB8fCAoUDQgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlMikgewogICAgICB0cnkgewogICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUyKSk7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIHJlamVjdChlMTEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZTIpIHsKICAgICAgdHJ5IHsKICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZTIpKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZTIocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgIH0KICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICB9KTsKfQpmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5MykgewogIHZhciBfNCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHQ5WzBdICYgMSkgdGhyb3cgdDlbMV07CiAgICByZXR1cm4gdDlbMV07CiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZjcsIHk1LCB0OSwgZzQgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTsKICByZXR1cm4gZzQubmV4dCA9IHZlcmIoMCksIGc0WyJ0aHJvdyJdID0gdmVyYigxKSwgZzRbInJldHVybiJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZzRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSksIGc0OwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIHN0ZXAoW24xMywgdjVdKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgIGlmIChmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgd2hpbGUgKGc0ICYmIChnNCA9IDAsIG9wWzBdICYmIChfNCA9IDApKSwgXzQpIHRyeSB7CiAgICAgIGlmIChmNyA9IDEsIHk1ICYmICh0OSA9IG9wWzBdICYgMiA/IHk1WyJyZXR1cm4iXSA6IG9wWzBdID8geTVbInRocm93Il0gfHwgKCh0OSA9IHk1WyJyZXR1cm4iXSkgJiYgdDkuY2FsbCh5NSksIDApIDogeTUubmV4dCkgJiYgISh0OSA9IHQ5LmNhbGwoeTUsIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ5OwogICAgICBpZiAoeTUgPSAwLCB0OSkgb3AgPSBbb3BbMF0gJiAyLCB0OS52YWx1ZV07CiAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdDkgPSBvcDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIF80LmxhYmVsKys7CiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgXzQubGFiZWwrKzsKICAgICAgICAgIHk1ID0gb3BbMV07CiAgICAgICAgICBvcCA9IFswXTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIG9wID0gXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoISh0OSA9IF80LnRyeXMsIHQ5ID0gdDkubGVuZ3RoID4gMCAmJiB0OVt0OS5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgewogICAgICAgICAgICBfNCA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdDkgfHwgb3BbMV0gPiB0OVswXSAmJiBvcFsxXSA8IHQ5WzNdKSkgewogICAgICAgICAgICBfNC5sYWJlbCA9IG9wWzFdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfNC5sYWJlbCA8IHQ5WzFdKSB7CiAgICAgICAgICAgIF80LmxhYmVsID0gdDlbMV07CiAgICAgICAgICAgIHQ5ID0gb3A7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ICYmIF80LmxhYmVsIDwgdDlbMl0pIHsKICAgICAgICAgICAgXzQubGFiZWwgPSB0OVsyXTsKICAgICAgICAgICAgXzQub3BzLnB1c2gob3ApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OVsyXSkgXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG9wID0gYm9keTMuY2FsbCh0aGlzQXJnLCBfNCk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgb3AgPSBbNiwgZTExXTsKICAgICAgeTUgPSAwOwogICAgfSBmaW5hbGx5IHsKICAgICAgZjcgPSB0OSA9IDA7CiAgICB9CiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsKICAgIHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgfQp9CmZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtNiwgbzEzKSB7CiAgZm9yICh2YXIgcDcgaW4gbTYpIGlmIChwNyAhPT0gImRlZmF1bHQiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzEzLCBwNykpIF9fY3JlYXRlQmluZGluZyhvMTMsIG02LCBwNyk7Cn0KZnVuY3Rpb24gX192YWx1ZXMobzEzKSB7CiAgdmFyIHM5ID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG02ID0gczkgJiYgbzEzW3M5XSwgaTExID0gMDsKICBpZiAobTYpIHJldHVybiBtNi5jYWxsKG8xMyk7CiAgaWYgKG8xMyAmJiB0eXBlb2YgbzEzLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKG8xMyAmJiBpMTEgPj0gbzEzLmxlbmd0aCkgbzEzID0gdm9pZCAwOwogICAgICByZXR1cm4geyB2YWx1ZTogbzEzICYmIG8xM1tpMTErK10sIGRvbmU6ICFvMTMgfTsKICAgIH0KICB9OwogIHRocm93IG5ldyBUeXBlRXJyb3IoczkgPyAiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iIDogIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKfQpmdW5jdGlvbiBfX3JlYWQobzEzLCBuMTMpIHsKICB2YXIgbTYgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG8xM1tTeW1ib2wuaXRlcmF0b3JdOwogIGlmICghbTYpIHJldHVybiBvMTM7CiAgdmFyIGkxMSA9IG02LmNhbGwobzEzKSwgcjExLCBhciA9IFtdLCBlMTE7CiAgdHJ5IHsKICAgIHdoaWxlICgobjEzID09PSB2b2lkIDAgfHwgbjEzLS0gPiAwKSAmJiAhKHIxMSA9IGkxMS5uZXh0KCkpLmRvbmUpIGFyLnB1c2gocjExLnZhbHVlKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgZTExID0geyBlcnJvciB9OwogIH0gZmluYWxseSB7CiAgICB0cnkgewogICAgICBpZiAocjExICYmICFyMTEuZG9uZSAmJiAobTYgPSBpMTFbInJldHVybiJdKSkgbTYuY2FsbChpMTEpOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKGUxMSkgdGhyb3cgZTExLmVycm9yOwogICAgfQogIH0KICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWQoKSB7CiAgZm9yICh2YXIgYXIgPSBbXSwgaTExID0gMDsgaTExIDwgYXJndW1lbnRzLmxlbmd0aDsgaTExKyspCiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2kxMV0pKTsKICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7CiAgZm9yICh2YXIgczkgPSAwLCBpMTEgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IGlsOyBpMTErKykgczkgKz0gYXJndW1lbnRzW2kxMV0ubGVuZ3RoOwogIGZvciAodmFyIHIxMSA9IEFycmF5KHM5KSwgazQgPSAwLCBpMTEgPSAwOyBpMTEgPCBpbDsgaTExKyspCiAgICBmb3IgKHZhciBhNSA9IGFyZ3VtZW50c1tpMTFdLCBqNCA9IDAsIGpsID0gYTUubGVuZ3RoOyBqNCA8IGpsOyBqNCsrLCBrNCsrKQogICAgICByMTFbazRdID0gYTVbajRdOwogIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bzIsIGZyb20yLCBwYWNrKSB7CiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaTExID0gMCwgbDYgPSBmcm9tMi5sZW5ndGgsIGFyOyBpMTEgPCBsNjsgaTExKyspIHsKICAgIGlmIChhciB8fCAhKGkxMSBpbiBmcm9tMikpIHsKICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tMiwgMCwgaTExKTsKICAgICAgYXJbaTExXSA9IGZyb20yW2kxMV07CiAgICB9CiAgfQogIHJldHVybiB0bzIuY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20yKSk7Cn0KZnVuY3Rpb24gX19hd2FpdCh2NSkgewogIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2NSwgdGhpcykgOiBuZXcgX19hd2FpdCh2NSk7Cn0KZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHsKICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKICB2YXIgZzQgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGkxMSwgcTIgPSBbXTsKICByZXR1cm4gaTExID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIsIGF3YWl0UmV0dXJuKSwgaTExW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSwgaTExOwogIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGY3KSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2NSkudGhlbihmNywgcmVqZWN0KTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZlcmIobjEzLCBmNykgewogICAgaWYgKGc0W24xM10pIHsKICAgICAgaTExW24xM10gPSBmdW5jdGlvbih2NSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgIHEyLnB1c2goW24xMywgdjUsIGE1LCBiNV0pID4gMSB8fCByZXN1bWUobjEzLCB2NSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGlmIChmNykgaTExW24xM10gPSBmNyhpMTFbbjEzXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlc3VtZShuMTMsIHY1KSB7CiAgICB0cnkgewogICAgICBzdGVwKGc0W24xM10odjUpKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBzZXR0bGUocTJbMF1bM10sIGUxMSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0ZXAocjExKSB7CiAgICByMTEudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIxMS52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocTJbMF1bMl0sIHIxMSk7CiAgfQogIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUyKSB7CiAgICByZXN1bWUoIm5leHQiLCB2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiByZWplY3QodmFsdWUyKSB7CiAgICByZXN1bWUoInRocm93IiwgdmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKGY3LCB2NSkgewogICAgaWYgKGY3KHY1KSwgcTIuc2hpZnQoKSwgcTIubGVuZ3RoKSByZXN1bWUocTJbMF1bMF0sIHEyWzBdWzFdKTsKICB9Cn0KZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvMTMpIHsKICB2YXIgaTExLCBwNzsKICByZXR1cm4gaTExID0ge30sIHZlcmIoIm5leHQiKSwgdmVyYigidGhyb3ciLCBmdW5jdGlvbihlMTEpIHsKICAgIHRocm93IGUxMTsKICB9KSwgdmVyYigicmV0dXJuIiksIGkxMVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTE7CiAgZnVuY3Rpb24gdmVyYihuMTMsIGY3KSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdID8gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIChwNyA9ICFwNykgPyB7IHZhbHVlOiBfX2F3YWl0KG8xM1tuMTNdKHY1KSksIGRvbmU6IGZhbHNlIH0gOiBmNyA/IGY3KHY1KSA6IHY1OwogICAgfSA6IGY3OwogIH0KfQpmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8xMykgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBtNiA9IG8xM1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGkxMTsKICByZXR1cm4gbTYgPyBtNi5jYWxsKG8xMykgOiAobzEzID0gdHlwZW9mIF9fdmFsdWVzID09PSAiZnVuY3Rpb24iID8gX192YWx1ZXMobzEzKSA6IG8xM1tTeW1ib2wuaXRlcmF0b3JdKCksIGkxMSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIpLCBpMTFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTEpOwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdICYmIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgdjUgPSBvMTNbbjEzXSh2NSksIHNldHRsZShyZXNvbHZlMiwgcmVqZWN0LCB2NS5kb25lLCB2NS52YWx1ZSk7CiAgICAgIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUyLCByZWplY3QsIGQ2LCB2NSkgewogICAgUHJvbWlzZS5yZXNvbHZlKHY1KS50aGVuKGZ1bmN0aW9uKHY2KSB7CiAgICAgIHJlc29sdmUyKHsgdmFsdWU6IHY2LCBkb25lOiBkNiB9KTsKICAgIH0sIHJlamVjdCk7CiAgfQp9CmZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3MikgewogIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsICJyYXciLCB7IHZhbHVlOiByYXcyIH0pOwogIH0gZWxzZSB7CiAgICBjb29rZWQucmF3ID0gcmF3MjsKICB9CiAgcmV0dXJuIGNvb2tlZDsKfQpmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7CiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICB2YXIgcmVzdWx0ID0ge307CiAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICBmb3IgKHZhciBrNCA9IG93bktleXMobW9kKSwgaTExID0gMDsgaTExIDwgazQubGVuZ3RoOyBpMTErKykgaWYgKGs0W2kxMV0gIT09ICJkZWZhdWx0IikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrNFtpMTFdKTsKICB9CiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHsKICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZTEyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTIgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxMiB8fCAhZjcgOiAhc3RhdGUxMi5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsKICByZXR1cm4ga2luZCA9PT0gIm0iID8gZjcgOiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyKSA6IGY3ID8gZjcudmFsdWUgOiBzdGF0ZTEyLmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUxMiwgdmFsdWUyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOwogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTIgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxMiB8fCAhZjcgOiAhc3RhdGUxMi5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOwogIHJldHVybiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyLCB2YWx1ZTIpIDogZjcgPyBmNy52YWx1ZSA9IHZhbHVlMiA6IHN0YXRlMTIuc2V0KHJlY2VpdmVyLCB2YWx1ZTIpLCB2YWx1ZTI7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlMTIsIHJlY2VpdmVyKSB7CiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8IHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpOwogIHJldHVybiB0eXBlb2Ygc3RhdGUxMiA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZTEyIDogc3RhdGUxMi5oYXMocmVjZWl2ZXIpOwp9CmZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudjIsIHZhbHVlMiwgYXN5bmMyKSB7CiAgaWYgKHZhbHVlMiAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IHZvaWQgMCkgewogICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZC4iKTsKICAgIHZhciBkaXNwb3NlLCBpbm5lcjsKICAgIGlmIChhc3luYzIpIHsKICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICBkaXNwb3NlID0gdmFsdWUyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgewogICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgZGlzcG9zZSA9IHZhbHVlMltTeW1ib2wuZGlzcG9zZV07CiAgICAgIGlmIChhc3luYzIpIGlubmVyID0gZGlzcG9zZTsKICAgIH0KICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLiIpOwogICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaW5uZXIuY2FsbCh0aGlzKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH07CiAgICBlbnYyLnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUyLCBkaXNwb3NlLCBhc3luYzogYXN5bmMyIH0pOwogIH0gZWxzZSBpZiAoYXN5bmMyKSB7CiAgICBlbnYyLnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52MikgewogIGZ1bmN0aW9uIGZhaWwoZTExKSB7CiAgICBlbnYyLmVycm9yID0gZW52Mi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUxMSwgZW52Mi5lcnJvciwgIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKSA6IGUxMTsKICAgIGVudjIuaGFzRXJyb3IgPSB0cnVlOwogIH0KICB2YXIgcjExLCBzOSA9IDA7CiAgZnVuY3Rpb24gbmV4dDIoKSB7CiAgICB3aGlsZSAocjExID0gZW52Mi5zdGFjay5wb3AoKSkgewogICAgICB0cnkgewogICAgICAgIGlmICghcjExLmFzeW5jICYmIHM5ID09PSAxKSByZXR1cm4gczkgPSAwLCBlbnYyLnN0YWNrLnB1c2gocjExKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0Mik7CiAgICAgICAgaWYgKHIxMS5kaXNwb3NlKSB7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gcjExLmRpc3Bvc2UuY2FsbChyMTEudmFsdWUpOwogICAgICAgICAgaWYgKHIxMS5hc3luYykgcmV0dXJuIHM5IHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dDIsIGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICBmYWlsKGUxMSk7CiAgICAgICAgICAgIHJldHVybiBuZXh0MigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHM5IHw9IDE7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGZhaWwoZTExKTsKICAgICAgfQogICAgfQogICAgaWYgKHM5ID09PSAxKSByZXR1cm4gZW52Mi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudjIuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBpZiAoZW52Mi5oYXNFcnJvcikgdGhyb3cgZW52Mi5lcnJvcjsKICB9CiAgcmV0dXJuIG5leHQyKCk7Cn0KZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aDIsIHByZXNlcnZlSnN4KSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIgJiYgL15cLlwuP1wvLy50ZXN0KHBhdGgyKSkgewogICAgcmV0dXJuIHBhdGgyLnJlcGxhY2UoL1wuKHRzeCkkfCgoPzpcLmQpPykoKD86XC5bXi4vXSs/KT8pXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uKG02LCB0c3gsIGQ2LCBleHQsIGNtKSB7CiAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/ICIuanN4IiA6ICIuanMiIDogZDYgJiYgKCFleHQgfHwgIWNtKSA/IG02IDogZDYgKyBleHQgKyAiLiIgKyBjbS50b0xvd2VyQ2FzZSgpICsgImpzIjsKICAgIH0pOwogIH0KICByZXR1cm4gcGF0aDI7Cn0KdmFyIGV4dGVuZFN0YXRpY3MsIF9fYXNzaWduLCBfX2NyZWF0ZUJpbmRpbmcsIF9fc2V0TW9kdWxlRGVmYXVsdCwgb3duS2V5cywgX1N1cHByZXNzZWRFcnJvciwgdHNsaWJfZXM2X2RlZmF1bHQ7CnZhciBpbml0X3RzbGliX2VzNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIigpIHsKICAgIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkNiwgYjUpIHsKICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGQ3Ll9fcHJvdG9fXyA9IGI2OwogICAgICB9IHx8IGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGZvciAodmFyIHA3IGluIGI2KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI2LCBwNykpIGQ3W3A3XSA9IGI2W3A3XTsKICAgICAgfTsKICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZDYsIGI1KTsKICAgIH07CiAgICBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkgewogICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24yKHQ5KSB7CiAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgIHM5ID0gYXJndW1lbnRzW2kxMV07CiAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfTsKICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogICAgOwogICAgOwogICAgOwogICAgOwogICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtNiwgazQpOwogICAgICBpZiAoIWRlc2MgfHwgKCJnZXQiIGluIGRlc2MgPyAhbTYuX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7CiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBtNltrNF07CiAgICAgICAgfSB9OwogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgZGVzYyk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSk7CiAgICA7CiAgICBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfTsKICAgIG93bktleXMgPSBmdW5jdGlvbihvMTMpIHsKICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uKG8xNCkgewogICAgICAgIHZhciBhciA9IFtdOwogICAgICAgIGZvciAodmFyIGs0IGluIG8xNCkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvMTQsIGs0KSkgYXJbYXIubGVuZ3RoXSA9IGs0OwogICAgICAgIHJldHVybiBhcjsKICAgICAgfTsKICAgICAgcmV0dXJuIG93bktleXMobzEzKTsKICAgIH07CiAgICBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlMikgewogICAgICB2YXIgZTExID0gbmV3IEVycm9yKG1lc3NhZ2UyKTsKICAgICAgcmV0dXJuIGUxMS5uYW1lID0gIlN1cHByZXNzZWRFcnJvciIsIGUxMS5lcnJvciA9IGVycm9yLCBlMTEuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGUxMTsKICAgIH07CiAgICB0c2xpYl9lczZfZGVmYXVsdCA9IHsKICAgICAgX19leHRlbmRzLAogICAgICBfX2Fzc2lnbiwKICAgICAgX19yZXN0LAogICAgICBfX2RlY29yYXRlLAogICAgICBfX3BhcmFtLAogICAgICBfX2VzRGVjb3JhdGUsCiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOiBfX3J1bkluaXRpYWxpemVyczIsCiAgICAgIF9fcHJvcEtleSwKICAgICAgX19zZXRGdW5jdGlvbk5hbWUsCiAgICAgIF9fbWV0YWRhdGEsCiAgICAgIF9fYXdhaXRlciwKICAgICAgX19nZW5lcmF0b3IsCiAgICAgIF9fY3JlYXRlQmluZGluZywKICAgICAgX19leHBvcnRTdGFyLAogICAgICBfX3ZhbHVlcywKICAgICAgX19yZWFkLAogICAgICBfX3NwcmVhZCwKICAgICAgX19zcHJlYWRBcnJheXMsCiAgICAgIF9fc3ByZWFkQXJyYXksCiAgICAgIF9fYXdhaXQsCiAgICAgIF9fYXN5bmNHZW5lcmF0b3IsCiAgICAgIF9fYXN5bmNEZWxlZ2F0b3IsCiAgICAgIF9fYXN5bmNWYWx1ZXMsCiAgICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LAogICAgICBfX2ltcG9ydFN0YXIsCiAgICAgIF9faW1wb3J0RGVmYXVsdCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLAogICAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSwKICAgICAgX19kaXNwb3NlUmVzb3VyY2VzLAogICAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcwpmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iOwp9CnZhciBpbml0X2lzRnVuY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzCmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkgewogIHZhciBfc3VwZXIgPSBmdW5jdGlvbihpbnN0YW5jZSkgewogICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7CiAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrOwogIH07CiAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpOwogIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYzsKICByZXR1cm4gY3RvckZ1bmM7Cn0KdmFyIGluaXRfY3JlYXRlRXJyb3JDbGFzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvY3JlYXRlRXJyb3JDbGFzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMKdmFyIFVuc3Vic2NyaXB0aW9uRXJyb3I7CnZhciBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnMgPyBlcnJvcnMubGVuZ3RoICsgIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuIiArIGVycm9ycy5tYXAoZnVuY3Rpb24oZXJyLCBpMTEpIHsKICAgICAgICAgIHJldHVybiBpMTEgKyAxICsgIikgIiArIGVyci50b1N0cmluZygpOwogICAgICAgIH0pLmpvaW4oIlxuICAiKSA6ICIiOwogICAgICAgIHRoaXMubmFtZSA9ICJVbnN1YnNjcmlwdGlvbkVycm9yIjsKICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9yczsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMKZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkgewogIGlmIChhcnIpIHsKICAgIHZhciBpbmRleDIgPSBhcnIuaW5kZXhPZihpdGVtKTsKICAgIDAgPD0gaW5kZXgyICYmIGFyci5zcGxpY2UoaW5kZXgyLCAxKTsKICB9Cn0KdmFyIGluaXRfYXJyUmVtb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzCmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHwgdmFsdWUyICYmICJjbG9zZWQiIGluIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUyLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZTIudW5zdWJzY3JpYmUpOwp9CmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7CiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkgewogICAgZmluYWxpemVyKCk7CiAgfSBlbHNlIHsKICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpOwogIH0KfQp2YXIgU3Vic2NyaXB0aW9uLCBFTVBUWV9TVUJTQ1JJUFRJT047CnZhciBpbml0X1N1YnNjcmlwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IoKTsKICAgIGluaXRfYXJyUmVtb3ZlKCk7CiAgICBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbjIoaW5pdGlhbFRlYXJkb3duKSB7CiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247CiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsOwogICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsOwogICAgICB9CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVfMSwgX2ExNCwgZV8yLCBfYjsKICAgICAgICB2YXIgZXJyb3JzOwogICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHsKICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkgewogICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hMTQgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2ExNC5jYWxsKF9wYXJlbnRhZ2VfMSk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duOwogICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICAgIGVycm9ycyA9IGUxMSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlMTEuZXJyb3JzIDogW2UxMV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7CiAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHsKICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZV8yXzEpIHsKICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvcnMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHRlYXJkb3duKSB7CiAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7CiAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24yKSB7CiAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2ExNCA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hMTQgIT09IHZvaWQgMCA/IF9hMTQgOiBbXSkucHVzaCh0ZWFyZG93bik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KTsKICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50OwogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkgewogICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odGVhcmRvd24pIHsKICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzOwogICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pOwogICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbjIpIHsKICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLkVNUFRZID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbXB0eTQgPSBuZXcgU3Vic2NyaXB0aW9uMigpOwogICAgICAgIGVtcHR5NC5jbG9zZWQgPSB0cnVlOwogICAgICAgIHJldHVybiBlbXB0eTQ7CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBTdWJzY3JpcHRpb24yOwogICAgfSkoKTsKICAgIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcwp2YXIgY29uZmlnOwp2YXIgaW5pdF9jb25maWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9jb25maWcuanMiKCkgewogICAgY29uZmlnID0gewogICAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLAogICAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsCiAgICAgIFByb21pc2U6IHZvaWQgMCwKICAgICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsCiAgICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzCnZhciB0aW1lb3V0UHJvdmlkZXI7CnZhciBpbml0X3RpbWVvdXRQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIHRpbWVvdXRQcm92aWRlciA9IHsKICAgICAgc2V0VGltZW91dDogZnVuY3Rpb24oaGFuZGxlcjIsIHRpbWVvdXQyKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0VGltZW91dCkgewogICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldFRpbWVvdXQuYXBwbHkoZGVsZWdhdGUsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IuanMKZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7CiAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZy5vblVuaGFuZGxlZEVycm9yOwogICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHsKICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0pOwp9CnZhciBpbml0X3JlcG9ydFVuaGFuZGxlZEVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcwpmdW5jdGlvbiBub29wKCkgewp9CnZhciBpbml0X25vb3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzCmZ1bmN0aW9uIGVycm9yTm90aWZpY2F0aW9uKGVycm9yKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiRSIsIHZvaWQgMCwgZXJyb3IpOwp9CmZ1bmN0aW9uIG5leHROb3RpZmljYXRpb24odmFsdWUyKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiTiIsIHZhbHVlMiwgdm9pZCAwKTsKfQpmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZCwgdmFsdWUyLCBlcnJvcikgewogIHJldHVybiB7CiAgICBraW5kLAogICAgdmFsdWU6IHZhbHVlMiwKICAgIGVycm9yCiAgfTsKfQp2YXIgQ09NUExFVEVfTk9USUZJQ0FUSU9OOwp2YXIgaW5pdF9Ob3RpZmljYXRpb25GYWN0b3JpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiKCkgewogICAgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCJDIiwgdm9pZCAwLCB2b2lkIDApOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzCmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykgewogICAgdmFyIGlzUm9vdCA9ICFjb250ZXh0OwogICAgaWYgKGlzUm9vdCkgewogICAgICBjb250ZXh0ID0geyBlcnJvclRocm93bjogZmFsc2UsIGVycm9yOiBudWxsIH07CiAgICB9CiAgICBjYigpOwogICAgaWYgKGlzUm9vdCkgewogICAgICB2YXIgX2ExNCA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2ExNC5lcnJvclRocm93biwgZXJyb3IgPSBfYTE0LmVycm9yOwogICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgaWYgKGVycm9yVGhyb3duKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgY2IoKTsKICB9Cn0KZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7CiAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTsKICAgIGNvbnRleHQuZXJyb3IgPSBlcnI7CiAgfQp9CnZhciBjb250ZXh0Owp2YXIgaW5pdF9lcnJvckNvbnRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgY29udGV4dCA9IG51bGw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHsKICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7Cn0KZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHsKICAgIGNhcHR1cmVFcnJvcihlcnJvcik7CiAgfSBlbHNlIHsKICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTsKICB9Cn0KZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHsKICB0aHJvdyBlcnI7Cn0KZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHsKICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjsKICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIFN1YnNjcmliZXIsIF9iaW5kLCBDb25zdW1lck9ic2VydmVyLCBTYWZlU3Vic2NyaWJlciwgRU1QVFlfT0JTRVJWRVI7CnZhciBpbml0X1N1YnNjcmliZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X05vdGlmaWNhdGlvbkZhY3RvcmllcygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3Vic2NyaWJlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIyKGRlc3RpbmF0aW9uKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBTdWJzY3JpYmVyMi5jcmVhdGUgPSBmdW5jdGlvbihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obmV4dE5vdGlmaWNhdGlvbih2YWx1ZTIpLCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKGVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZTIpOwogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBTdWJzY3JpYmVyMjsKICAgIH0pKFN1YnNjcmlwdGlvbik7CiAgICBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kOwogICAgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcjIocGFydGlhbE9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgIH0KICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZTIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXIyOwogICAgfSkoKTsKICAgIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcjIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7CiAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7CiAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHZvaWQgMCwKICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHZvaWQgMCwKICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHZvaWQgMAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGNvbnRleHRfMTsKICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpOwogICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gewogICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICByZXR1cm4gU2FmZVN1YnNjcmliZXIyOwogICAgfSkoU3Vic2NyaWJlcik7CiAgICBFTVBUWV9PQlNFUlZFUiA9IHsKICAgICAgY2xvc2VkOiB0cnVlLAogICAgICBuZXh0OiBub29wLAogICAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlciwKICAgICAgY29tcGxldGU6IG5vb3AKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS5qcwp2YXIgb2JzZXJ2YWJsZTsKdmFyIGluaXRfb2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIigpIHsKICAgIG9ic2VydmFibGUgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICJAQG9ic2VydmFibGUiOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaWRlbnRpdHkuanMKZnVuY3Rpb24gaWRlbnRpdHkoeDMpIHsKICByZXR1cm4geDM7Cn0KdmFyIGluaXRfaWRlbnRpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcGlwZS5qcwpmdW5jdGlvbiBwaXBlKCkgewogIHZhciBmbnMgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7Cn0KZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHsKICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIGlkZW50aXR5OwogIH0KICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIGZuc1swXTsKICB9CiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7CiAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbihwcmV2LCBmbikgewogICAgICByZXR1cm4gZm4ocHJldik7CiAgICB9LCBpbnB1dCk7CiAgfTsKfQp2YXIgaW5pdF9waXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9waXBlLmpzIigpIHsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMKZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHsKICB2YXIgX2ExNDsKICByZXR1cm4gKF9hMTQgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2ExNCAhPT0gdm9pZCAwID8gX2ExNCA6IFByb21pc2U7Cn0KZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICYmIGlzRnVuY3Rpb24odmFsdWUyLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUyLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5jb21wbGV0ZSk7Cn0KZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdmFsdWUyIGluc3RhbmNlb2YgU3Vic2NyaWJlciB8fCBpc09ic2VydmVyKHZhbHVlMikgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUyKTsKfQp2YXIgT2JzZXJ2YWJsZTsKdmFyIGluaXRfT2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMiKCkgewogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X3BpcGUoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKSB7CiAgICAgICAgaWYgKHN1YnNjcmliZTIpIHsKICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZTIoKTsKICAgICAgICBvYnNlcnZhYmxlMi5zb3VyY2UgPSB0aGlzOwogICAgICAgIG9ic2VydmFibGUyLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIF9hMTQgPSBfdGhpcywgb3BlcmF0b3IgPSBfYTE0Lm9wZXJhdG9yLCBzb3VyY2UgPSBfYTE0LnNvdXJjZTsKICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yID8gb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpIDogc291cmNlID8gX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKSA6IF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzdWJzY3JpYmVyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHNpbmspIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obmV4dDIsIHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHsKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG5leHQyKHZhbHVlMik7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiByZWplY3QsCiAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlMgogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHJldHVybiAoX2ExNCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24oeDMpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlMiA9IHgzOwogICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5jcmVhdGUgPSBmdW5jdGlvbihzdWJzY3JpYmUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIE9ic2VydmFibGUyOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbGlmdC5qcwpmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkgewogIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTsKfQpmdW5jdGlvbiBvcGVyYXRlKGluaXQpIHsKICByZXR1cm4gZnVuY3Rpb24oc291cmNlKSB7CiAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7CiAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbihsaWZ0ZWRTb3VyY2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKTsKICB9Owp9CnZhciBpbml0X2xpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7CiAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7Cn0KdmFyIE9wZXJhdG9yU3Vic2NyaWJlcjsKdmFyIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7CiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7CiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTsKICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dCA/IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25OZXh0KHZhbHVlMik7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDsKICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yID8gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycjIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgIH0gOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjsKICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkNvbXBsZXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIE9wZXJhdG9yU3Vic2NyaWJlcjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkgewogICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYTE0ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmNhbGwodGhpcykpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjI7CiAgICB9KShTdWJzY3JpYmVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWZDb3VudC5qcwpmdW5jdGlvbiByZWZDb3VudCgpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDsKICAgIHNvdXJjZS5fcmVmQ291bnQrKzsKICAgIHZhciByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkgewogICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IHNvdXJjZS5fY29ubmVjdGlvbjsKICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uOwogICAgICBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7CiAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTsKICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHsKICAgICAgY29ubmVjdGlvbiA9IHNvdXJjZS5jb25uZWN0KCk7CiAgICB9CiAgfSk7Cn0KdmFyIGluaXRfcmVmQ291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMKdmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTsKdmFyIGluaXRfQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2xpZnQoKTsKICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlOwogICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7CiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsOwogICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgX3RoaXMuX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHsKICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlMi5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDsKICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0OwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgX2Nvbm5lY3Rpb24gPT09IG51bGwgfHwgX2Nvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHsKICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpOwogICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgICBzdWJqZWN0XzEuY29tcGxldGUoKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7CiAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgfSkpKTsKICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkodGhpcyk7CiAgICAgIH07CiAgICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGUyOwogICAgfSkoT2JzZXJ2YWJsZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcwp2YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzIigpIHsKICAgIHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IHBlcmZvcm1hbmNlKS5ub3coKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzCnZhciBhbmltYXRpb25GcmFtZVByb3ZpZGVyOwp2YXIgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyID0gewogICAgICBzY2hlZHVsZTogZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICAgICB2YXIgY2FuY2VsID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICBpZiAoZGVsZWdhdGUpIHsKICAgICAgICAgIHJlcXVlc3QgPSBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgICAgICBjYW5jZWwgPSBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZTsKICAgICAgICB9CiAgICAgICAgdmFyIGhhbmRsZTMgPSByZXF1ZXN0KGZ1bmN0aW9uKHRpbWVzdGFtcDIpIHsKICAgICAgICAgIGNhbmNlbCA9IHZvaWQgMDsKICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcDIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGNhbmNlbCA9PT0gbnVsbCB8fCBjYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbmNlbChoYW5kbGUzKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZSkgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZSkgfHwgY2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXMuanMKZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7CiAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7Cn0KZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyOwogICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7CiAgICB2YXIgaWQgPSAwOwogICAgdmFyIHJ1biA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbih0aW1lc3RhbXAyKSB7CiAgICAgICAgICBpZCA9IDA7CiAgICAgICAgICB2YXIgbm93MiA9IHByb3ZpZGVyLm5vdygpOwogICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsKICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdzIgOiB0aW1lc3RhbXAyLAogICAgICAgICAgICBlbGFwc2VkOiBub3cyIC0gc3RhcnQKICAgICAgICAgIH0pOwogICAgICAgICAgcnVuKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBydW4oKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgaWYgKGlkKSB7CiAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KdmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUzsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMKdmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yOwp2YXIgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIm9iamVjdCB1bnN1YnNjcmliZWQiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzCnZhciBTdWJqZWN0LCBBbm9ueW1vdXNTdWJqZWN0Owp2YXIgaW5pdF9TdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YmplY3QyKCkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107CiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpOwogICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZV8xLCBfYTE0OwogICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykgewogICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTsKICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYTE0ID0gX2IucmV0dXJuKSkgX2ExNC5jYWxsKF9iKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyOwogICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzOwogICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkgewogICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVyczsKICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlOwogICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QyLnByb3RvdHlwZSwgIm9ic2VydmVkIiwgewogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgX2ExNDsKICAgICAgICAgIHJldHVybiAoKF9hMTQgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5sZW5ndGgpID4gMDsKICAgICAgICB9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9KTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTQuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYTE0Lm9ic2VydmVyczsKICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7CiAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE0ID0gdGhpcywgaGFzRXJyb3IgPSBfYTE0Lmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hMTQudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkOwogICAgICAgIGlmIChoYXNFcnJvcikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0b3BwZWQpIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZSgpOwogICAgICAgIG9ic2VydmFibGUyLnNvdXJjZSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5jcmVhdGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogICAgICB9OwogICAgICByZXR1cm4gU3ViamVjdDI7CiAgICB9KShPYnNlcnZhYmxlKTsKICAgIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdDIoZGVzdGluYXRpb24sIHNvdXJjZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFub255bW91c1N1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIChfYiA9IChfYTE0ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0LCB2YWx1ZTIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX2ExNCwgX2I7CiAgICAgICAgKF9iID0gKF9hMTQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0LCBlcnIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCwgX2I7CiAgICAgICAgKF9iID0gKF9hMTQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0KTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIHJldHVybiAoX2IgPSAoX2ExNCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICB9OwogICAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcwp2YXIgQmVoYXZpb3JTdWJqZWN0Owp2YXIgaW5pdF9CZWhhdmlvclN1YmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3ViamVjdCgpOwogICAgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQmVoYXZpb3JTdWJqZWN0MihfdmFsdWUpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLCAidmFsdWUiLCB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7CiAgICAgICAgfSwKICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpOwogICAgICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNC5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYTE0LnRocm93bkVycm9yLCBfdmFsdWUgPSBfYTE0Ll92YWx1ZTsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIHRocm93IHRocm93bkVycm9yOwogICAgICAgIH0KICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgcmV0dXJuIF92YWx1ZTsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHRoaXMuX3ZhbHVlID0gdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMKdmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlci5qcyIoKSB7CiAgICBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChkYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzCnZhciBSZXBsYXlTdWJqZWN0Owp2YXIgaW5pdF9SZXBsYXlTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X2RhdGVUaW1lc3RhbXBQcm92aWRlcigpOwogICAgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0MihfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikgewogICAgICAgIGlmIChfYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OwogICAgICAgIH0KICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgewogICAgICAgICAgX3dpbmRvd1RpbWUgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lOwogICAgICAgIF90aGlzLl90aW1lc3RhbXBQcm92aWRlciA9IF90aW1lc3RhbXBQcm92aWRlcjsKICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IF93aW5kb3dUaW1lID09PSBJbmZpbml0eTsKICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBfYnVmZmVyID0gX2ExNC5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNC5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYTE0Ll90aW1lc3RhbXBQcm92aWRlciwgX3dpbmRvd1RpbWUgPSBfYTE0Ll93aW5kb3dUaW1lOwogICAgICAgIGlmICghaXNTdG9wcGVkKSB7CiAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUyKTsKICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTsKICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZTIpOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpOwogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE0Ll9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYTE0Ll9idWZmZXI7CiAgICAgICAgdmFyIGNvcHkgPSBfYnVmZmVyLnNsaWNlKCk7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgY29weS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpMTEgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpMTFdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9idWZmZXJTaXplID0gX2ExNC5fYnVmZmVyU2l6ZSwgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2ExNC5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYTE0Ll9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE0Ll9pbmZpbml0ZVRpbWVXaW5kb3c7CiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7CiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7CiAgICAgICAgaWYgKCFfaW5maW5pdGVUaW1lV2luZG93KSB7CiAgICAgICAgICB2YXIgbm93MiA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTsKICAgICAgICAgIHZhciBsYXN0MyA9IDA7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyW2kxMV0gPD0gbm93MjsgaTExICs9IDIpIHsKICAgICAgICAgICAgbGFzdDMgPSBpMTE7CiAgICAgICAgICB9CiAgICAgICAgICBsYXN0MyAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0MyArIDEpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIFJlcGxheVN1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Bc3luY1N1YmplY3QuanMKdmFyIEFzeW5jU3ViamVjdDsKdmFyIGluaXRfQXN5bmNTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQXN5bmNTdWJqZWN0LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YmplY3QoKTsKICAgIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jU3ViamVjdDIoKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDsKICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTsKICAgICAgICBfdGhpcy5faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBc3luY1N1YmplY3QyLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNC5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2ExNC5faGFzVmFsdWUsIF92YWx1ZSA9IF9hMTQuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hMTQudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBfaXNDb21wbGV0ZSA9IF9hMTQuX2lzQ29tcGxldGU7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTsKICAgICAgICB9IGVsc2UgaWYgKGlzU3RvcHBlZCB8fCBfaXNDb21wbGV0ZSkgewogICAgICAgICAgX2hhc1ZhbHVlICYmIHN1YnNjcmliZXIubmV4dChfdmFsdWUpOwogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUyOwogICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hMTQuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYTE0Ll92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYTE0Ll9pc0NvbXBsZXRlOwogICAgICAgIGlmICghX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICAgX2hhc1ZhbHVlICYmIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIF92YWx1ZSk7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQXN5bmNTdWJqZWN0MjsKICAgIH0pKFN1YmplY3QpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcwp2YXIgQWN0aW9uOwp2YXIgaW5pdF9BY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgfQogICAgICBBY3Rpb24yLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHJldHVybiBBY3Rpb24yOwogICAgfSkoU3Vic2NyaXB0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzCnZhciBpbnRlcnZhbFByb3ZpZGVyOwp2YXIgaW5pdF9pbnRlcnZhbFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGludGVydmFsUHJvdmlkZXIgPSB7CiAgICAgIHNldEludGVydmFsOiBmdW5jdGlvbihoYW5kbGVyMiwgdGltZW91dDIpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0SW50ZXJ2YWwpIHsKICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlcjIsIHRpbWVvdXQyXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlMyk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMKdmFyIEFzeW5jQWN0aW9uOwp2YXIgaW5pdF9Bc3luY0FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9BY3Rpb24oKTsKICAgIGluaXRfaW50ZXJ2YWxQcm92aWRlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc3luY0FjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTEyOwogICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7CiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOwogICAgICAgIGlmIChpZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5pZCA9IChfYTE0ID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2ExNCAhPT0gdm9pZCAwID8gX2ExNCA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheTIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBfaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKF9zY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheTIgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkgewogICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0KICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxMiwgZGVsYXkyKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxMiwgX2RlbGF5KSB7CiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTsKICAgICAgICB2YXIgZXJyb3JWYWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy53b3JrKHN0YXRlMTIpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgZXJyb3JlZCA9IHRydWU7CiAgICAgICAgICBlcnJvclZhbHVlID0gZTExID8gZTExIDogbmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcmVkKSB7CiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGlkID0gX2ExNC5pZCwgc2NoZWR1bGVyID0gX2ExNC5zY2hlZHVsZXI7CiAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDsKICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpOwogICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDsKICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY0FjdGlvbjI7CiAgICB9KShBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMKZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpIHsKICBpZiAoaGFuZGxlMyBpbiBhY3RpdmVIYW5kbGVzKSB7CiAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGUzXTsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KdmFyIG5leHRIYW5kbGUsIHJlc29sdmVkLCBhY3RpdmVIYW5kbGVzLCBJbW1lZGlhdGUsIFRlc3RUb29sczsKdmFyIGluaXRfSW1tZWRpYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMiKCkgewogICAgbmV4dEhhbmRsZSA9IDE7CiAgICBhY3RpdmVIYW5kbGVzID0ge307CiAgICBJbW1lZGlhdGUgPSB7CiAgICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24oY2IpIHsKICAgICAgICB2YXIgaGFuZGxlMyA9IG5leHRIYW5kbGUrKzsKICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZTNdID0gdHJ1ZTsKICAgICAgICBpZiAoIXJlc29sdmVkKSB7CiAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKSAmJiBjYigpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBoYW5kbGUzOwogICAgICB9LAogICAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24oaGFuZGxlMykgewogICAgICAgIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKTsKICAgICAgfQogICAgfTsKICAgIFRlc3RUb29scyA9IHsKICAgICAgcGVuZGluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbW1lZGlhdGVQcm92aWRlci5qcwp2YXIgc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSwgaW1tZWRpYXRlUHJvdmlkZXI7CnZhciBpbml0X2ltbWVkaWF0ZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0ltbWVkaWF0ZSgpOwogICAgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7CiAgICBpbW1lZGlhdGVQcm92aWRlciA9IHsKICAgICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbW1lZGlhdGVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwQWN0aW9uLmpzCnZhciBBc2FwQWN0aW9uOwp2YXIgaW5pdF9Bc2FwQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNBY3Rpb24oKTsKICAgIGluaXRfaW1tZWRpYXRlUHJvdmlkZXIoKTsKICAgIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXNhcEFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXNhcEFjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsYXkyICE9PSBudWxsICYmIGRlbGF5MiA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdm9pZCAwKSkpOwogICAgICB9OwogICAgICBBc2FwQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCA/IGRlbGF5MiA+IDAgOiB0aGlzLmRlbGF5ID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2ExNCA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5pZCkgIT09IGlkKSB7CiAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7CiAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7CiAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQXNhcEFjdGlvbjI7CiAgICB9KShBc3luY0FjdGlvbik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMKdmFyIFNjaGVkdWxlcjsKdmFyIGluaXRfU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBTY2hlZHVsZXIgPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFNjaGVkdWxlcjIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIyLm5vdzsKICAgICAgICB9CiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjsKICAgICAgICB0aGlzLm5vdyA9IG5vdzI7CiAgICAgIH0KICAgICAgU2NoZWR1bGVyMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih3b3JrLCBkZWxheTIsIHN0YXRlMTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlMTIsIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIFNjaGVkdWxlcjIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdzsKICAgICAgcmV0dXJuIFNjaGVkdWxlcjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzCnZhciBBc3luY1NjaGVkdWxlcjsKdmFyIGluaXRfQXN5bmNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU2NoZWR1bGVyKCk7CiAgICBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIyKFNjaGVkdWxlckFjdGlvbiwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIubm93OwogICAgICAgIH0KICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdzIpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdOwogICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNTY2hlZHVsZXIyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHsKICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjI7CiAgICB9KShTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBTY2hlZHVsZXIuanMKdmFyIEFzYXBTY2hlZHVsZXI7CnZhciBpbml0X0FzYXBTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyMigpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgIH0KICAgICAgQXNhcFNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICB2YXIgZmx1c2hJZCA9IHRoaXMuX3NjaGVkdWxlZDsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7CiAgICAgICAgdmFyIGVycm9yOwogICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkgewogICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzYXBTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAuanMKdmFyIGFzYXBTY2hlZHVsZXIsIGFzYXA7CnZhciBpbml0X2FzYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIoKSB7CiAgICBpbml0X0FzYXBBY3Rpb24oKTsKICAgIGluaXRfQXNhcFNjaGVkdWxlcigpOwogICAgYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyKEFzYXBBY3Rpb24pOwogICAgYXNhcCA9IGFzYXBTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMKdmFyIGFzeW5jU2NoZWR1bGVyLCBhc3luYzsKdmFyIGluaXRfYXN5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiKCkgewogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pOwogICAgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZUFjdGlvbi5qcwp2YXIgUXVldWVBY3Rpb247CnZhciBpbml0X1F1ZXVlQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUXVldWVBY3Rpb24yKHNjaGVkdWxlciwgd29yaykgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlMTIsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlMTI7CiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIHJldHVybiBkZWxheTIgPiAwIHx8IHRoaXMuY2xvc2VkID8gX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUxMiwgZGVsYXkyKSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgUXVldWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsICYmIGRlbGF5MiA+IDAgfHwgZGVsYXkyID09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmZsdXNoKHRoaXMpOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICByZXR1cm4gUXVldWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzCnZhciBRdWV1ZVNjaGVkdWxlcjsKdmFyIGluaXRfUXVldWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBRdWV1ZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMKdmFyIHF1ZXVlU2NoZWR1bGVyLCBxdWV1ZTsKdmFyIGluaXRfcXVldWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMiKCkgewogICAgaW5pdF9RdWV1ZUFjdGlvbigpOwogICAgaW5pdF9RdWV1ZVNjaGVkdWxlcigpOwogICAgcXVldWVTY2hlZHVsZXIgPSBuZXcgUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb24pOwogICAgcXVldWUgPSBxdWV1ZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcwp2YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb247CnZhciBpbml0X0FuaW1hdGlvbkZyYW1lQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPT0gbnVsbCAmJiBkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh2b2lkIDApOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsID8gZGVsYXkyID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgPT09IHNjaGVkdWxlci5fc2NoZWR1bGVkICYmICgoX2ExNCA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5pZCkgIT09IGlkKSB7CiAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzCnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKdmFyIGluaXRfQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihhY3Rpb24pIHsKICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlOwogICAgICAgIHZhciBmbHVzaElkOwogICAgICAgIGlmIChhY3Rpb24pIHsKICAgICAgICAgIGZsdXNoSWQgPSBhY3Rpb24uaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7CiAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMKdmFyIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBhbmltYXRpb25GcmFtZTsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMiKCkgewogICAgaW5pdF9BbmltYXRpb25GcmFtZUFjdGlvbigpOwogICAgaW5pdF9BbmltYXRpb25GcmFtZVNjaGVkdWxlcigpOwogICAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoQW5pbWF0aW9uRnJhbWVBY3Rpb24pOwogICAgYW5pbWF0aW9uRnJhbWUgPSBhbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcwp2YXIgVmlydHVhbFRpbWVTY2hlZHVsZXIsIFZpcnR1YWxBY3Rpb247CnZhciBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgVmlydHVhbFRpbWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhWaXJ0dWFsVGltZVNjaGVkdWxlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyMihzY2hlZHVsZXJBY3Rpb25DdG9yLCBtYXhGcmFtZXMpIHsKICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzY2hlZHVsZXJBY3Rpb25DdG9yID0gVmlydHVhbEFjdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBtYXhGcmFtZXMgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyQWN0aW9uQ3RvciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZnJhbWU7CiAgICAgICAgfSkgfHwgdGhpczsKICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7CiAgICAgICAgX3RoaXMuZnJhbWUgPSAwOwogICAgICAgIF90aGlzLmluZGV4ID0gLTE7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGFjdGlvbnMgPSBfYTE0LmFjdGlvbnMsIG1heEZyYW1lcyA9IF9hMTQubWF4RnJhbWVzOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB2YXIgYWN0aW9uOwogICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykgewogICAgICAgICAgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICBWaXJ0dWFsVGltZVNjaGVkdWxlcjIuZnJhbWVUaW1lRmFjdG9yID0gMTA7CiAgICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgICBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24yKHNjaGVkdWxlciwgd29yaywgaW5kZXgyKSB7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmRleDIgPSBzY2hlZHVsZXIuaW5kZXggKz0gMTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4MjsKICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlOwogICAgICAgIF90aGlzLmluZGV4ID0gc2NoZWR1bGVyLmluZGV4ID0gaW5kZXgyOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkyKSkgewogICAgICAgICAgaWYgKCF0aGlzLmlkKSB7CiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24yKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspOwogICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTsKICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5MjsKICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMpOwogICAgICAgIHJldHVybiAxOwogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZTEyLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMgPSBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICBpZiAoYTUuZGVsYXkgPT09IGI1LmRlbGF5KSB7CiAgICAgICAgICBpZiAoYTUuaW5kZXggPT09IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfSBlbHNlIGlmIChhNS5pbmRleCA+IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYTUuZGVsYXkgPiBiNS5kZWxheSkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMKZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTsKfQpmdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pOwogIH0pOwp9CnZhciBFTVBUWTsKdmFyIGluaXRfZW1wdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMKZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5zY2hlZHVsZSk7Cn0KdmFyIGluaXRfaXNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzLmpzCmZ1bmN0aW9uIGxhc3QoYXJyKSB7CiAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07Cn0KZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykgewogIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHZvaWQgMDsKfQpmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykgewogIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkgewogIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gIm51bWJlciIgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlOwp9CnZhciBpbml0X2FyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2lzU2NoZWR1bGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzCnZhciBpc0FycmF5TGlrZTsKdmFyIGluaXRfaXNBcnJheUxpa2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIigpIHsKICAgIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uKHgzKSB7CiAgICAgIHJldHVybiB4MyAmJiB0eXBlb2YgeDMubGVuZ3RoID09PSAibnVtYmVyIiAmJiB0eXBlb2YgeDMgIT09ICJmdW5jdGlvbiI7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTIpIHsKICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZTIudGhlbik7Cn0KdmFyIGluaXRfaXNQcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMKZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkgewogIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTsKfQp2YXIgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7CiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNBc3luY0l0ZXJhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMKZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHsKICByZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/ICJhbiBpbnZhbGlkIG9iamVjdCIgOiAiJyIgKyBpbnB1dCArICInIikgKyAiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIik7Cn0KdmFyIGluaXRfdGhyb3dVbm9ic2VydmFibGVFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMKZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7CiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJmdW5jdGlvbiIgfHwgIVN5bWJvbC5pdGVyYXRvcikgewogICAgcmV0dXJuICJAQGl0ZXJhdG9yIjsKICB9CiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjsKfQp2YXIgaXRlcmF0b3I7CnZhciBpbml0X2l0ZXJhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIigpIHsKICAgIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIoKSB7CiAgICBpbml0X2l0ZXJhdG9yKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMKZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkgewogIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkgewogICAgdmFyIHJlYWRlciwgX2ExNCwgdmFsdWUyLCBkb25lOwogICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uKF9iKSB7CiAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgICAgICAgIF9iLmxhYmVsID0gMTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTsKICAgICAgICAgIF9iLmxhYmVsID0gMjsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoZmFsc2UpIHJldHVybiBbMywgOF07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIF9hMTQgPSBfYi5zZW50KCksIHZhbHVlMiA9IF9hMTQudmFsdWUsIGRvbmUgPSBfYTE0LmRvbmU7CiAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFsyLCBfYi5zZW50KCldOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZTIpXTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gWzQsIF9iLnNlbnQoKV07CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgX2Iuc2VudCgpOwogICAgICAgICAgcmV0dXJuIFszLCAyXTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgIHJldHVybiBbN107CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBbMl07CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikgewogIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpOwp9CnZhciBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcwpmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHsKICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTsKICAgIH0KICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7CiAgICB9CiAgfQogIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTsKfQpmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTsKICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7CiAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkxMSsrKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpMTFdKTsKICAgIH0KICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICB9KS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGVfMSwgX2ExNDsKICAgIHRyeSB7CiAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7CiAgICAgICAgdmFyIHZhbHVlMiA9IGl0ZXJhYmxlXzFfMS52YWx1ZTsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYTE0ID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYTE0LmNhbGwoaXRlcmFibGVfMSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICB9CiAgICB9CiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICBwcm9jZXNzMihhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHsKICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpOwp9CmZ1bmN0aW9uIHByb2Nlc3MyKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHsKICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTsKICB2YXIgZV8yLCBfYTE0OwogIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlMiwgZV8yXzE7CiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oX2IpIHsKICAgICAgc3dpdGNoIChfYi5sYWJlbCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTsKICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7CiAgICAgICAgICBfYi5sYWJlbCA9IDE7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdOwogICAgICAgICAgdmFsdWUyID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gWzJdOwogICAgICAgICAgfQogICAgICAgICAgX2IubGFiZWwgPSAzOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBbMywgMV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7CiAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2ExNCA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTsKICAgICAgICAgIHJldHVybiBbNCwgX2ExNC5jYWxsKGFzeW5jSXRlcmFibGVfMSldOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIF9iLnNlbnQoKTsKICAgICAgICAgIF9iLmxhYmVsID0gODsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTE6CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm4gWzJdOwogICAgICB9CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9pbm5lckZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc1Byb21pc2UoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzSXRlcmFibGUoKTsKICAgIGluaXRfaXNSZWFkYWJsZVN0cmVhbUxpa2UoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcwpmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5MiwgcmVwZWF0MykgewogIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgZGVsYXkyID0gMDsKICB9CiAgaWYgKHJlcGVhdDMgPT09IHZvaWQgMCkgewogICAgcmVwZWF0MyA9IGZhbHNlOwogIH0KICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7CiAgICB3b3JrKCk7CiAgICBpZiAocmVwZWF0MykgewogICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkyKSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICB9CiAgfSwgZGVsYXkyKTsKICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTsKICBpZiAoIXJlcGVhdDMpIHsKICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjsKICB9Cn0KdmFyIGluaXRfZXhlY3V0ZVNjaGVkdWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcwpmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheTIpIHsKICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgIGRlbGF5MiA9IDA7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfb2JzZXJ2ZU9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIoKSB7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzCmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkyKSB7CiAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICBkZWxheTIgPSAwOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICB9LCBkZWxheTIpKTsKICB9KTsKfQp2YXIgaW5pdF9zdWJzY3JpYmVPbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTsKfQp2YXIgaW5pdF9zY2hlZHVsZU9ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X29ic2VydmVPbigpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikgewogIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpOwp9CnZhciBpbml0X3NjaGVkdWxlUHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiKCkgewogICAgaW5pdF9pbm5lckZyb20oKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGkxMSA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoaTExID09PSBpbnB1dC5sZW5ndGgpIHsKICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2kxMSsrXSk7CiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5zY2hlZHVsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVBcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFycmF5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBpdGVyYXRvcjI7CiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgaXRlcmF0b3IyID0gaW5wdXRbaXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgdmFyIGRvbmU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9hMTQgPSBpdGVyYXRvcjIubmV4dCgpLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBkb25lID0gX2ExNC5kb25lOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0sIDAsIHRydWUpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yMiA9PT0gbnVsbCB8fCBpdGVyYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yMi5yZXR1cm4pICYmIGl0ZXJhdG9yMi5yZXR1cm4oKTsKICAgIH07CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pdGVyYXRvcigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmICghaW5wdXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTsKICB9CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIGl0ZXJhdG9yMi5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkgewogICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgMCwgdHJ1ZSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9zY2hlZHVsZUFzeW5jSXRlcmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTsKfQp2YXIgaW5pdF9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc1JlYWRhYmxlU3RyZWFtTGlrZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcwpmdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7CiAgICB9CiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogIH0KICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7Cn0KdmFyIGluaXRfc2NoZWR1bGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9zY2hlZHVsZVByb21pc2UoKTsKICAgIGluaXRfc2NoZWR1bGVBcnJheSgpOwogICAgaW5pdF9zY2hlZHVsZUl0ZXJhYmxlKCk7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzUHJvbWlzZSgpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc0l0ZXJhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgICBpbml0X3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMKZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7Cn0KdmFyIGluaXRfZnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlZCgpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMKZnVuY3Rpb24gb2YoKSB7CiAgdmFyIGFyZ3MgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpOwogIHJldHVybiBmcm9tKGFyZ3MsIHNjaGVkdWxlcik7Cn0KdmFyIGluaXRfb2YgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29mLmpzIigpIHsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9mcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMKZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHsKICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OwogIH07CiAgdmFyIGluaXQgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7CiAgfTsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoc2NoZWR1bGVyID8gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShpbml0LCAwLCBzdWJzY3JpYmVyKTsKICB9IDogaW5pdCk7Cn0KdmFyIGluaXRfdGhyb3dFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzCmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikgewogIHZhciBfYTE0LCBfYiwgX2M7CiAgdmFyIF9kID0gbm90aWZpY2F0aW9uLCBraW5kID0gX2Qua2luZCwgdmFsdWUyID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7CiAgaWYgKHR5cGVvZiBraW5kICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7CiAgfQogIGtpbmQgPT09ICJOIiA/IChfYTE0ID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5jYWxsKG9ic2VydmVyLCB2YWx1ZTIpIDoga2luZCA9PT0gIkUiID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpOwp9CnZhciBOb3RpZmljYXRpb25LaW5kLCBOb3RpZmljYXRpb247CnZhciBpbml0X05vdGlmaWNhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIoKSB7CiAgICBpbml0X2VtcHR5KCk7CiAgICBpbml0X29mKCk7CiAgICBpbml0X3Rocm93RXJyb3IoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgKGZ1bmN0aW9uKE5vdGlmaWNhdGlvbktpbmQyKSB7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJORVhUIl0gPSAiTiI7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJFUlJPUiJdID0gIkUiOwogICAgICBOb3RpZmljYXRpb25LaW5kMlsiQ09NUExFVEUiXSA9ICJDIjsKICAgIH0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpOwogICAgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24yKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgIHRoaXMuaGFzVmFsdWUgPSBraW5kID09PSAiTiI7CiAgICAgIH0KICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKG9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKG5leHRIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGNvbXBsZXRlSGFuZGxlcikgewogICAgICAgIHZhciBfYTE0ID0gdGhpcywga2luZCA9IF9hMTQua2luZCwgdmFsdWUyID0gX2ExNC52YWx1ZSwgZXJyb3IgPSBfYTE0LmVycm9yOwogICAgICAgIHJldHVybiBraW5kID09PSAiTiIgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUyKSA6IGtpbmQgPT09ICJFIiA/IGVycm9ySGFuZGxlciA9PT0gbnVsbCB8fCBlcnJvckhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ySGFuZGxlcihlcnJvcikgOiBjb21wbGV0ZUhhbmRsZXIgPT09IG51bGwgfHwgY29tcGxldGVIYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wbGV0ZUhhbmRsZXIoKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYTE0ID0gbmV4dE9yT2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQubmV4dCkgPyB0aGlzLm9ic2VydmUobmV4dE9yT2JzZXJ2ZXIpIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBraW5kID0gX2ExNC5raW5kLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBlcnJvciA9IF9hMTQuZXJyb3I7CiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICJOIiA/IG9mKHZhbHVlMikgOiBraW5kID09PSAiRSIgPyB0aHJvd0Vycm9yKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgIH0pIDoga2luZCA9PT0gIkMiID8gRU1QVFkgOiAwOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIgKyBraW5kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVOZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24yKCJOIiwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uMigiRSIsIHZvaWQgMCwgZXJyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbjIoIkMiKTsKICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMKdmFyIGluaXRfaXNPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzCnZhciBFbXB0eUVycm9yOwp2YXIgaW5pdF9FbXB0eUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5uYW1lID0gIkVtcHR5RXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfbGFzdFZhbHVlRnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfZmlyc3RWYWx1ZUZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzCnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjsKdmFyIGluaXRfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMKdmFyIE5vdEZvdW5kRXJyb3I7CnZhciBpbml0X05vdEZvdW5kRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UyKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJOb3RGb3VuZEVycm9yIjsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlMjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzCnZhciBTZXF1ZW5jZUVycm9yOwp2YXIgaW5pdF9TZXF1ZW5jZUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgU2VxdWVuY2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlMikgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiU2VxdWVuY2VFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZTIpOwp9CnZhciBpbml0X2lzRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LmpzCmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnMywgc2NoZWR1bGVyQXJnKSB7CiAgdmFyIF9hMTQgPSBpc1ZhbGlkRGF0ZShjb25maWczKSA/IHsgZmlyc3Q6IGNvbmZpZzMgfSA6IHR5cGVvZiBjb25maWczID09PSAibnVtYmVyIiA/IHsgZWFjaDogY29uZmlnMyB9IDogY29uZmlnMywgZmlyc3QyID0gX2ExNC5maXJzdCwgZWFjaCA9IF9hMTQuZWFjaCwgX2IgPSBfYTE0LndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYTE0LnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyAhPT0gbnVsbCAmJiBzY2hlZHVsZXJBcmcgIT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyA6IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2ExNC5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDsKICBpZiAoZmlyc3QyID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjsKICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjsKICAgIHZhciBsYXN0VmFsdWUgPSBudWxsOwogICAgdmFyIHNlZW4gPSAwOwogICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbihkZWxheTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7CiAgICAgICAgICAgIG1ldGEsCiAgICAgICAgICAgIGxhc3RWYWx1ZSwKICAgICAgICAgICAgc2VlbgogICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9OwogICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIHNlZW4rKzsKICAgICAgc3Vic2NyaWJlci5uZXh0KGxhc3RWYWx1ZSA9IHZhbHVlMik7CiAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7CiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7CiAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH0KICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgIH0pKTsKICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QyICE9IG51bGwgPyB0eXBlb2YgZmlyc3QyID09PSAibnVtYmVyIiA/IGZpcnN0MiA6ICtmaXJzdDIgLSBzY2hlZHVsZXIubm93KCkgOiBlYWNoKTsKICB9KTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHsKICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pOwp9CnZhciBUaW1lb3V0RXJyb3I7CnZhciBpbml0X3RpbWVvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIoKSB7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X2lzRGF0ZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICAgIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHsKICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmZvID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJUaW1lb3V0IGhhcyBvY2N1cnJlZCI7CiAgICAgICAgdGhpcy5uYW1lID0gIlRpbWVvdXRFcnJvciI7CiAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcwpmdW5jdGlvbiBtYXAyKHByb2plY3QsIHRoaXNBcmcpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBpbmRleDIgPSAwOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChwcm9qZWN0LmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykpOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzCmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7CiAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7Cn0KZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikgewogIHJldHVybiBtYXAyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgIHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7CiAgfSk7Cn0KdmFyIGlzQXJyYXk7CnZhciBpbml0X21hcE9uZU9yTWFueUFyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzCnZhciBpbml0X2JpbmRDYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcwp2YXIgaW5pdF9iaW5kTm9kZUNhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcwpmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kMiwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHsKICB2YXIgYnVmZmVyMiA9IFtdOwogIHZhciBhY3RpdmUgPSAwOwogIHZhciBpbmRleDIgPSAwOwogIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7CiAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIyLmxlbmd0aCAmJiAhYWN0aXZlKSB7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0KICB9OwogIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgIHJldHVybiBhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZTIpIDogYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgfTsKICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgZXhwYW5kMiAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgIGFjdGl2ZSsrOwogICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTsKICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlMiwgaW5kZXgyKyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKGlubmVyVmFsdWUpIHsKICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpOwogICAgICBpZiAoZXhwYW5kMikgewogICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGFjdGl2ZS0tOwogICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIyLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikgewogICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2hpbGUgKGJ1ZmZlcjIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHsKICAgICAgICAgICAgX2xvb3BfMSgpOwogICAgICAgICAgfQogICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgfSkpOwogIH07CiAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbigpIHsKICAgIGlzQ29tcGxldGUgPSB0cnVlOwogICAgY2hlY2tDb21wbGV0ZSgpOwogIH0pKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTsKICB9Owp9CnZhciBpbml0X21lcmdlSW50ZXJuYWxzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcwpmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkgewogIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsKICAgIGNvbmN1cnJlbnQgPSBJbmZpbml0eTsKICB9CiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7CiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24oYTUsIGkxMSkgewogICAgICByZXR1cm4gbWFwMihmdW5jdGlvbihiNSwgaWkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYTUsIGI1LCBpMTEsIGlpKTsKICAgICAgfSkoaW5uZXJGcm9tKHByb2plY3QoYTUsIGkxMSkpKTsKICAgIH0sIGNvbmN1cnJlbnQpOwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAibnVtYmVyIikgewogICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOwogIH0pOwp9CnZhciBpbml0X21lcmdlTWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIigpIHsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X21lcmdlSW50ZXJuYWxzKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcwpmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7CiAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgewogICAgY29uY3VycmVudCA9IEluZmluaXR5OwogIH0KICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpOwp9CnZhciBpbml0X21lcmdlQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMKZnVuY3Rpb24gY29uY2F0QWxsKCkgewogIHJldHVybiBtZXJnZUFsbCgxKTsKfQp2YXIgaW5pdF9jb25jYXRBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzCmZ1bmN0aW9uIGNvbmNhdCgpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpOwp9CnZhciBpbml0X2NvbmNhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIigpIHsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfZnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcwp2YXIgaW5pdF9kZWZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25uZWN0YWJsZS5qcwp2YXIgaW5pdF9jb25uZWN0YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcwp2YXIgaW5pdF9mb3JrSm9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMKZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3RvcikgewogIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7CiAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7CiAgICBvcHRpb25zID0gdm9pZCAwOwogIH0KICBpZiAocmVzdWx0U2VsZWN0b3IpIHsKICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpOwogIH0KICB2YXIgX2ExNCA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgIHJldHVybiBmdW5jdGlvbihoYW5kbGVyMikgewogICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlcjIsIG9wdGlvbnMpOwogICAgfTsKICB9KSA6IGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKSA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBbXSwgMiksIGFkZDMgPSBfYTE0WzBdLCByZW1vdmUyID0gX2ExNFsxXTsKICBpZiAoIWFkZDMpIHsKICAgIGlmIChpc0FycmF5TGlrZSh0YXJnZXQpKSB7CiAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbihzdWJUYXJnZXQpIHsKICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsKICAgICAgfSkoaW5uZXJGcm9tKHRhcmdldCkpOwogICAgfQogIH0KICBpZiAoIWFkZDMpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgaGFuZGxlcjIgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7CiAgICB9OwogICAgYWRkMyhoYW5kbGVyMik7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZW1vdmUyKGhhbmRsZXIyKTsKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGhhbmRsZXIyKSB7CiAgICAgIHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyMik7CiAgICB9OwogIH07Cn0KZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7Cn0KZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7Cn0KZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcik7Cn0KdmFyIG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLCBldmVudFRhcmdldE1ldGhvZHMsIGpxdWVyeU1ldGhvZHM7CnZhciBpbml0X2Zyb21FdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X21lcmdlTWFwKCk7CiAgICBpbml0X2lzQXJyYXlMaWtlKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfbWFwT25lT3JNYW55QXJncygpOwogICAgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbImFkZExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIl07CiAgICBldmVudFRhcmdldE1ldGhvZHMgPSBbImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciJdOwogICAganF1ZXJ5TWV0aG9kcyA9IFsib24iLCAib2ZmIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMKdmFyIGluaXRfZnJvbUV2ZW50UGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzCnZhciBpbml0X2dlbmVyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcwp2YXIgaW5pdF9paWYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzCmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikgewogIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsKICAgIGR1ZVRpbWUgPSAwOwogIH0KICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jOwogIH0KICB2YXIgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xOwogIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHsKICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkgewogICAgICBzY2hlZHVsZXIgPSBpbnRlcnZhbE9yU2NoZWR1bGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7CiAgICB9CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgZHVlID0gaXNWYWxpZERhdGUoZHVlVGltZSkgPyArZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSA6IGR1ZVRpbWU7CiAgICBpZiAoZHVlIDwgMCkgewogICAgICBkdWUgPSAwOwogICAgfQogICAgdmFyIG4xMyA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4xMysrKTsKICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgaW50ZXJ2YWxEdXJhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIGR1ZSk7CiAgfSk7Cn0KdmFyIGluaXRfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9hc3luYygpOwogICAgaW5pdF9pc1NjaGVkdWxlcigpOwogICAgaW5pdF9pc0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMKdmFyIGluaXRfaW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbmV2ZXIuanMKZnVuY3Rpb24gbmV2ZXIoKSB7CiAgcmV0dXJuIE5FVkVSOwp9CnZhciBORVZFUjsKdmFyIGluaXRfbmV2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBORVZFUiA9IG5ldyBPYnNlcnZhYmxlKG5vb3ApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcwp2YXIgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcwp2YXIgaW5pdF9wYWlycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcwpmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgaW5kZXgyID0gMDsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcwp2YXIgaW5pdF9wYXJ0aXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UuanMKdmFyIGluaXRfcmFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLmpzCnZhciBpbml0X3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzCnZhciBpbml0X3VzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcwp2YXIgaW5pdF96aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcwp2YXIgaW5pdF90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3R5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcwp2YXIgaW5pdF9hdWRpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzCnZhciBpbml0X2F1ZGl0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcwpmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUyKTsKICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pKTsKICAgIGlubmVyRnJvbShjbG9zaW5nTm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiNSA9IGN1cnJlbnRCdWZmZXI7CiAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGI1KTsKICAgIH0sIG5vb3ApKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X25vb3AoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50LmpzCmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHsKICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7CiAgICBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsKICB9CiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVycyA9IFtdOwogICAgdmFyIGNvdW50MiA9IDA7CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNCwgZV8yLCBfYjsKICAgICAgdmFyIHRvRW1pdCA9IG51bGw7CiAgICAgIGlmIChjb3VudDIrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHsKICAgICAgICBidWZmZXJzLnB1c2goW10pOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkgewogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBidWZmZXJzXzFfMS52YWx1ZTsKICAgICAgICAgIGJ1ZmZlcjIucHVzaCh2YWx1ZTIpOwogICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ICE9PSBudWxsICYmIHRvRW1pdCAhPT0gdm9pZCAwID8gdG9FbWl0IDogW107CiAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZV8xXzEpIHsKICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hMTQgPSBidWZmZXJzXzEucmV0dXJuKSkgX2ExNC5jYWxsKGJ1ZmZlcnNfMSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRvRW1pdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSB0b0VtaXRfMV8xLnZhbHVlOwogICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyMik7CiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIyKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlXzJfMSkgewogICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZV8zLCBfYTE0OwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMiA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCk7ICFidWZmZXJzXzJfMS5kb25lOyBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCkpIHsKICAgICAgICAgIHZhciBidWZmZXIyID0gYnVmZmVyc18yXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlXzNfMSkgewogICAgICAgIGVfMyA9IHsgZXJyb3I6IGVfM18xIH07CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2ExNCA9IGJ1ZmZlcnNfMi5yZXR1cm4pKSBfYTE0LmNhbGwoYnVmZmVyc18yKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBidWZmZXJzID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9idWZmZXJDb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzCmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHsKICB2YXIgX2ExNCwgX2I7CiAgdmFyIG90aGVyQXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHZhciBzY2hlZHVsZXIgPSAoX2ExNCA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYTE0ICE9PSB2b2lkIDAgPyBfYTE0IDogYXN5bmNTY2hlZHVsZXI7CiAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7CiAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVyUmVjb3JkcyA9IFtdOwogICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBidWZmZXIyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzOwogICAgICBzdWJzLnVuc3Vic2NyaWJlKCk7CiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpOwogICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTsKICAgIH07CiAgICB2YXIgc3RhcnRCdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHsKICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTsKICAgICAgICB2YXIgYnVmZmVyMiA9IFtdOwogICAgICAgIHZhciByZWNvcmRfMSA9IHsKICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgICAgIHN1YnMKICAgICAgICB9OwogICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7CiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZW1pdChyZWNvcmRfMSk7CiAgICAgICAgfSwgYnVmZmVyVGltZVNwYW4pOwogICAgICB9CiAgICB9OwogICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0QnVmZmVyLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3RhcnRPbkVtaXQgPSB0cnVlOwogICAgfQogICAgc3RhcnRCdWZmZXIoKTsKICAgIHZhciBidWZmZXJUaW1lU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNTsKICAgICAgdmFyIHJlY29yZHNDb3B5ID0gYnVmZmVyUmVjb3Jkcy5zbGljZSgpOwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7CiAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0NvcHlfMV8xLnZhbHVlOwogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSByZWNvcmQuYnVmZmVyOwogICAgICAgICAgYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlcjIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hMTUgPSByZWNvcmRzQ29weV8xLnJldHVybikpIF9hMTUuY2FsbChyZWNvcmRzQ29weV8xKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBidWZmZXJSZWNvcmRzID0gbnVsbDsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShidWZmZXJUaW1lU3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIGluaXRfYnVmZmVyVGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMKdmFyIGluaXRfYnVmZmVyVG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcwp2YXIgaW5pdF9idWZmZXJXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMKdmFyIGluaXRfY2F0Y2hFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMKdmFyIGluaXRfcmVkdWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcwp2YXIgaW5pdF90b0FycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMKdmFyIGluaXRfY29tYmluZUxhdGVzdEFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsLmpzCnZhciBpbml0X2NvbWJpbmVBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzCnZhciBpbml0X2NvbmNhdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzCnZhciBpbml0X2NvbmNhdE1hcFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMKdmFyIGluaXRfY29uY2F0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMKdmFyIGluaXRfY29uY2F0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzCnZhciBpbml0X2Nvbm5lY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMKdmFyIGluaXRfY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzCmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBsYXN0VmFsdWU7CiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgfQogICAgfTsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBsYXN0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTsKICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUyKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X2RlYm91bmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMKZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikgewogIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgewogICAgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgdmFyIGFjdGl2ZVRhc2sgPSBudWxsOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgbGFzdFRpbWUgPSBudWxsOwogICAgdmFyIGVtaXQgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGFjdGl2ZVRhc2spIHsKICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7CiAgICAgICAgdmFyIHZhbHVlMiA9IGxhc3RWYWx1ZTsKICAgICAgICBsYXN0VmFsdWUgPSBudWxsOwogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkgewogICAgICB2YXIgdGFyZ2V0VGltZSA9IGxhc3RUaW1lICsgZHVlVGltZTsKICAgICAgdmFyIG5vdzIgPSBzY2hlZHVsZXIubm93KCk7CiAgICAgIGlmIChub3cyIDwgdGFyZ2V0VGltZSkgewogICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgdGFyZ2V0VGltZSAtIG5vdzIpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbWl0KCk7CiAgICB9CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgbGFzdFZhbHVlID0gdmFsdWUyOwogICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTsKICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7CiAgICAgICAgYWN0aXZlVGFzayA9IHNjaGVkdWxlci5zY2hlZHVsZShlbWl0V2hlbklkbGUsIGR1ZVRpbWUpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICB9CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9kZWJvdW5jZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcwp2YXIgaW5pdF9kZWZhdWx0SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcwp2YXIgaW5pdF90YWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzCnZhciBpbml0X2lnbm9yZUVsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcwp2YXIgaW5pdF9tYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzCnZhciBpbml0X2RlbGF5V2hlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzCnZhciBpbml0X2RlbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzCnZhciBpbml0X2RlbWF0ZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMKdmFyIGluaXRfZGlzdGluY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzCnZhciBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcwp2YXIgaW5pdF9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzCnZhciBpbml0X3Rocm93SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcwp2YXIgaW5pdF9lbGVtZW50QXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzCnZhciBpbml0X2VuZFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMKdmFyIGluaXRfZXZlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXAuanMKdmFyIGluaXRfZXhoYXVzdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzCnZhciBpbml0X2V4aGF1c3RBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdC5qcwp2YXIgaW5pdF9leGhhdXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZC5qcwp2YXIgaW5pdF9leHBhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcwp2YXIgaW5pdF9maW5hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZC5qcwp2YXIgaW5pdF9maW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcwp2YXIgaW5pdF9maW5kSW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcwp2YXIgaW5pdF9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcwp2YXIgaW5pdF9ncm91cEJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMKdmFyIGluaXRfaXNFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcwp2YXIgaW5pdF90YWtlTGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcwp2YXIgaW5pdF9sYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzCnZhciBpbml0X21hdGVyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMKdmFyIGluaXRfbWF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcwp2YXIgaW5pdF9mbGF0TWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMKdmFyIGluaXRfbWVyZ2VNYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4uanMKdmFyIGluaXRfbWVyZ2VTY2FuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMKdmFyIGluaXRfbWVyZ2VXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzCnZhciBpbml0X21pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcwp2YXIgaW5pdF9tdWx0aWNhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGguanMKdmFyIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMKdmFyIGluaXRfcGFpcndpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzCnZhciBpbml0X3BsdWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzCnZhciBpbml0X3B1Ymxpc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yLmpzCnZhciBpbml0X3B1Ymxpc2hCZWhhdmlvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzCnZhciBpbml0X3B1Ymxpc2hMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzCnZhciBpbml0X3B1Ymxpc2hSZXBsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMKdmFyIGluaXRfcmFjZVdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcwp2YXIgaW5pdF9yZXBlYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzCnZhciBpbml0X3JlcGVhdFdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMKdmFyIGluaXRfcmV0cnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcwp2YXIgaW5pdF9yZXRyeVdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMKdmFyIGluaXRfc2FtcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcwp2YXIgaW5pdF9zYW1wbGVUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMKdmFyIGluaXRfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzCnZhciBpbml0X3NlcXVlbmNlRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMKdmFyIGluaXRfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzCnZhciBpbml0X3NoYXJlUmVwbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMKdmFyIGluaXRfc2luZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcwp2YXIgaW5pdF9za2lwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzCnZhciBpbml0X3NraXBMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMKdmFyIGluaXRfc2tpcFVudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzCnZhciBpbml0X3NraXBXaGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcwpmdW5jdGlvbiBzdGFydFdpdGgoKSB7CiAgdmFyIHZhbHVlcyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTsKICB9CiAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcih2YWx1ZXMpOwogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgKHNjaGVkdWxlciA/IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF9zdGFydFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIigpIHsKICAgIGluaXRfY29uY2F0KCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfbGlmdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcwp2YXIgaW5pdF9zd2l0Y2hNYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMKdmFyIGluaXRfc3dpdGNoQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMKdmFyIGluaXRfc3dpdGNoTWFwVG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMKdmFyIGluaXRfc3dpdGNoU2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMKZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCBub29wKSk7CiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF90YWtlVW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X25vb3AoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMKdmFyIGluaXRfdGFrZVdoaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzCnZhciBpbml0X3RhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzCmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZzMpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBfYTE0ID0gY29uZmlnMyAhPT0gbnVsbCAmJiBjb25maWczICE9PSB2b2lkIDAgPyBjb25maWczIDoge30sIF9iID0gX2ExNC5sZWFkaW5nLCBsZWFkaW5nID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBfYTE0LnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jOwogICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7CiAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDsKICAgIHZhciB0aHJvdHRsZWQgPSBudWxsOwogICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTsKICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpOwogICAgICB0aHJvdHRsZWQgPSBudWxsOwogICAgICBpZiAodHJhaWxpbmcpIHsKICAgICAgICBzZW5kKCk7CiAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3R0bGVkID0gbnVsbDsKICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9OwogICAgdmFyIHN0YXJ0VGhyb3R0bGUgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHRocm90dGxlZCA9IGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlMikpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKTsKICAgIH07CiAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBzZW5kVmFsdWU7CiAgICAgICAgc2VuZFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAhaXNDb21wbGV0ZSAmJiBzdGFydFRocm90dGxlKHZhbHVlMik7CiAgICAgIH0KICAgIH07CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBzZW5kVmFsdWUgPSB2YWx1ZTI7CiAgICAgICEodGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiAobGVhZGluZyA/IHNlbmQoKSA6IHN0YXJ0VGhyb3R0bGUodmFsdWUyKSk7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgaXNDb21wbGV0ZSA9IHRydWU7CiAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfdGhyb3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGUuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMKZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZzMpIHsKICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOwogIH0KICB2YXIgZHVyYXRpb24kID0gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7CiAgcmV0dXJuIHRocm90dGxlKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGR1cmF0aW9uJDsKICB9LCBjb25maWczKTsKfQp2YXIgaW5pdF90aHJvdHRsZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfdGhyb3R0bGUoKTsKICAgIGluaXRfdGltZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMKdmFyIGluaXRfdGltZUludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMKdmFyIGluaXRfdGltZW91dFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcwp2YXIgaW5pdF90aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMKdmFyIGluaXRfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMKdmFyIGluaXRfd2luZG93Q291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMKdmFyIGluaXRfd2luZG93VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMKdmFyIGluaXRfd2luZG93VG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcwp2YXIgaW5pdF93aW5kb3dXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzCnZhciBpbml0X3dpdGhMYXRlc3RGcm9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMKdmFyIGluaXRfemlwQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzCnZhciBpbml0X3ppcDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBXaXRoLmpzCnZhciBpbml0X3ppcFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbmRleC5qcwp2YXIgaW5pdF9lc201ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW5kZXguanMiKCkgewogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lcygpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X0JlaGF2aW9yU3ViamVjdCgpOwogICAgaW5pdF9SZXBsYXlTdWJqZWN0KCk7CiAgICBpbml0X0FzeW5jU3ViamVjdCgpOwogICAgaW5pdF9hc2FwKCk7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X3F1ZXVlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lKCk7CiAgICBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyKCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9Ob3RpZmljYXRpb24oKTsKICAgIGluaXRfcGlwZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgICBpbml0X2lzT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9sYXN0VmFsdWVGcm9tKCk7CiAgICBpbml0X2ZpcnN0VmFsdWVGcm9tKCk7CiAgICBpbml0X0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7CiAgICBpbml0X0VtcHR5RXJyb3IoKTsKICAgIGluaXRfTm90Rm91bmRFcnJvcigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9TZXF1ZW5jZUVycm9yKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfVW5zdWJzY3JpcHRpb25FcnJvcigpOwogICAgaW5pdF9iaW5kQ2FsbGJhY2soKTsKICAgIGluaXRfYmluZE5vZGVDYWxsYmFjaygpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0KCk7CiAgICBpbml0X2NvbmNhdCgpOwogICAgaW5pdF9jb25uZWN0YWJsZSgpOwogICAgaW5pdF9kZWZlcigpOwogICAgaW5pdF9lbXB0eSgpOwogICAgaW5pdF9mb3JrSm9pbigpOwogICAgaW5pdF9mcm9tKCk7CiAgICBpbml0X2Zyb21FdmVudCgpOwogICAgaW5pdF9mcm9tRXZlbnRQYXR0ZXJuKCk7CiAgICBpbml0X2dlbmVyYXRlKCk7CiAgICBpbml0X2lpZigpOwogICAgaW5pdF9pbnRlcnZhbCgpOwogICAgaW5pdF9tZXJnZSgpOwogICAgaW5pdF9uZXZlcigpOwogICAgaW5pdF9vZigpOwogICAgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCgpOwogICAgaW5pdF9wYWlycygpOwogICAgaW5pdF9wYXJ0aXRpb24oKTsKICAgIGluaXRfcmFjZSgpOwogICAgaW5pdF9yYW5nZSgpOwogICAgaW5pdF90aHJvd0Vycm9yKCk7CiAgICBpbml0X3RpbWVyKCk7CiAgICBpbml0X3VzaW5nKCk7CiAgICBpbml0X3ppcCgpOwogICAgaW5pdF9zY2hlZHVsZWQoKTsKICAgIGluaXRfZW1wdHkoKTsKICAgIGluaXRfbmV2ZXIoKTsKICAgIGluaXRfdHlwZXMoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2F1ZGl0KCk7CiAgICBpbml0X2F1ZGl0VGltZSgpOwogICAgaW5pdF9idWZmZXIoKTsKICAgIGluaXRfYnVmZmVyQ291bnQoKTsKICAgIGluaXRfYnVmZmVyVGltZSgpOwogICAgaW5pdF9idWZmZXJUb2dnbGUoKTsKICAgIGluaXRfYnVmZmVyV2hlbigpOwogICAgaW5pdF9jYXRjaEVycm9yKCk7CiAgICBpbml0X2NvbWJpbmVBbGwoKTsKICAgIGluaXRfY29tYmluZUxhdGVzdEFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCgpOwogICAgaW5pdF9jb25jYXRBbGwoKTsKICAgIGluaXRfY29uY2F0TWFwKCk7CiAgICBpbml0X2NvbmNhdE1hcFRvKCk7CiAgICBpbml0X2NvbmNhdFdpdGgoKTsKICAgIGluaXRfY29ubmVjdCgpOwogICAgaW5pdF9jb3VudCgpOwogICAgaW5pdF9kZWJvdW5jZSgpOwogICAgaW5pdF9kZWJvdW5jZVRpbWUoKTsKICAgIGluaXRfZGVmYXVsdElmRW1wdHkoKTsKICAgIGluaXRfZGVsYXkoKTsKICAgIGluaXRfZGVsYXlXaGVuKCk7CiAgICBpbml0X2RlbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfZGlzdGluY3QoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbENoYW5nZWQoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoKTsKICAgIGluaXRfZWxlbWVudEF0KCk7CiAgICBpbml0X2VuZFdpdGgoKTsKICAgIGluaXRfZXZlcnkoKTsKICAgIGluaXRfZXhoYXVzdCgpOwogICAgaW5pdF9leGhhdXN0QWxsKCk7CiAgICBpbml0X2V4aGF1c3RNYXAoKTsKICAgIGluaXRfZXhwYW5kKCk7CiAgICBpbml0X2ZpbHRlcigpOwogICAgaW5pdF9maW5hbGl6ZSgpOwogICAgaW5pdF9maW5kKCk7CiAgICBpbml0X2ZpbmRJbmRleCgpOwogICAgaW5pdF9maXJzdCgpOwogICAgaW5pdF9ncm91cEJ5KCk7CiAgICBpbml0X2lnbm9yZUVsZW1lbnRzKCk7CiAgICBpbml0X2lzRW1wdHkoKTsKICAgIGluaXRfbGFzdCgpOwogICAgaW5pdF9tYXAoKTsKICAgIGluaXRfbWFwVG8oKTsKICAgIGluaXRfbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfbWF4KCk7CiAgICBpbml0X21lcmdlQWxsKCk7CiAgICBpbml0X2ZsYXRNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXBUbygpOwogICAgaW5pdF9tZXJnZVNjYW4oKTsKICAgIGluaXRfbWVyZ2VXaXRoKCk7CiAgICBpbml0X21pbigpOwogICAgaW5pdF9tdWx0aWNhc3QoKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X29uRXJyb3JSZXN1bWVOZXh0V2l0aCgpOwogICAgaW5pdF9wYWlyd2lzZSgpOwogICAgaW5pdF9wbHVjaygpOwogICAgaW5pdF9wdWJsaXNoKCk7CiAgICBpbml0X3B1Ymxpc2hCZWhhdmlvcigpOwogICAgaW5pdF9wdWJsaXNoTGFzdCgpOwogICAgaW5pdF9wdWJsaXNoUmVwbGF5KCk7CiAgICBpbml0X3JhY2VXaXRoKCk7CiAgICBpbml0X3JlZHVjZSgpOwogICAgaW5pdF9yZXBlYXQoKTsKICAgIGluaXRfcmVwZWF0V2hlbigpOwogICAgaW5pdF9yZXRyeSgpOwogICAgaW5pdF9yZXRyeVdoZW4oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfc2FtcGxlKCk7CiAgICBpbml0X3NhbXBsZVRpbWUoKTsKICAgIGluaXRfc2NhbigpOwogICAgaW5pdF9zZXF1ZW5jZUVxdWFsKCk7CiAgICBpbml0X3NoYXJlKCk7CiAgICBpbml0X3NoYXJlUmVwbGF5KCk7CiAgICBpbml0X3NpbmdsZSgpOwogICAgaW5pdF9za2lwKCk7CiAgICBpbml0X3NraXBMYXN0KCk7CiAgICBpbml0X3NraXBVbnRpbCgpOwogICAgaW5pdF9za2lwV2hpbGUoKTsKICAgIGluaXRfc3RhcnRXaXRoKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgICBpbml0X3N3aXRjaEFsbCgpOwogICAgaW5pdF9zd2l0Y2hNYXAoKTsKICAgIGluaXRfc3dpdGNoTWFwVG8oKTsKICAgIGluaXRfc3dpdGNoU2NhbigpOwogICAgaW5pdF90YWtlKCk7CiAgICBpbml0X3Rha2VMYXN0KCk7CiAgICBpbml0X3Rha2VVbnRpbCgpOwogICAgaW5pdF90YWtlV2hpbGUoKTsKICAgIGluaXRfdGFwKCk7CiAgICBpbml0X3Rocm90dGxlKCk7CiAgICBpbml0X3Rocm90dGxlVGltZSgpOwogICAgaW5pdF90aHJvd0lmRW1wdHkoKTsKICAgIGluaXRfdGltZUludGVydmFsKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfdGltZW91dFdpdGgoKTsKICAgIGluaXRfdGltZXN0YW1wKCk7CiAgICBpbml0X3RvQXJyYXkoKTsKICAgIGluaXRfd2luZG93KCk7CiAgICBpbml0X3dpbmRvd0NvdW50KCk7CiAgICBpbml0X3dpbmRvd1RpbWUoKTsKICAgIGluaXRfd2luZG93VG9nZ2xlKCk7CiAgICBpbml0X3dpbmRvd1doZW4oKTsKICAgIGluaXRfd2l0aExhdGVzdEZyb20oKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMKdmFyIGluaXRfcGFydGl0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UuanMKdmFyIGluaXRfcmFjZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9vcGVyYXRvcnMvaW5kZXguanMKdmFyIGluaXRfb3BlcmF0b3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvb3BlcmF0b3JzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYXVkaXQoKTsKICAgIGluaXRfYXVkaXRUaW1lKCk7CiAgICBpbml0X2J1ZmZlcigpOwogICAgaW5pdF9idWZmZXJDb3VudCgpOwogICAgaW5pdF9idWZmZXJUaW1lKCk7CiAgICBpbml0X2J1ZmZlclRvZ2dsZSgpOwogICAgaW5pdF9idWZmZXJXaGVuKCk7CiAgICBpbml0X2NhdGNoRXJyb3IoKTsKICAgIGluaXRfY29tYmluZUFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0QWxsKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3QyKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3RXaXRoKCk7CiAgICBpbml0X2NvbmNhdDIoKTsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2NvbmNhdE1hcCgpOwogICAgaW5pdF9jb25jYXRNYXBUbygpOwogICAgaW5pdF9jb25jYXRXaXRoKCk7CiAgICBpbml0X2Nvbm5lY3QoKTsKICAgIGluaXRfY291bnQoKTsKICAgIGluaXRfZGVib3VuY2UoKTsKICAgIGluaXRfZGVib3VuY2VUaW1lKCk7CiAgICBpbml0X2RlZmF1bHRJZkVtcHR5KCk7CiAgICBpbml0X2RlbGF5KCk7CiAgICBpbml0X2RlbGF5V2hlbigpOwogICAgaW5pdF9kZW1hdGVyaWFsaXplKCk7CiAgICBpbml0X2Rpc3RpbmN0KCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkKCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCk7CiAgICBpbml0X2VsZW1lbnRBdCgpOwogICAgaW5pdF9lbmRXaXRoKCk7CiAgICBpbml0X2V2ZXJ5KCk7CiAgICBpbml0X2V4aGF1c3QoKTsKICAgIGluaXRfZXhoYXVzdEFsbCgpOwogICAgaW5pdF9leGhhdXN0TWFwKCk7CiAgICBpbml0X2V4cGFuZCgpOwogICAgaW5pdF9maWx0ZXIoKTsKICAgIGluaXRfZmluYWxpemUoKTsKICAgIGluaXRfZmluZCgpOwogICAgaW5pdF9maW5kSW5kZXgoKTsKICAgIGluaXRfZmlyc3QoKTsKICAgIGluaXRfZ3JvdXBCeSgpOwogICAgaW5pdF9pZ25vcmVFbGVtZW50cygpOwogICAgaW5pdF9pc0VtcHR5KCk7CiAgICBpbml0X2xhc3QoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X21hcFRvKCk7CiAgICBpbml0X21hdGVyaWFsaXplKCk7CiAgICBpbml0X21heCgpOwogICAgaW5pdF9tZXJnZTIoKTsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICAgIGluaXRfZmxhdE1hcCgpOwogICAgaW5pdF9tZXJnZU1hcCgpOwogICAgaW5pdF9tZXJnZU1hcFRvKCk7CiAgICBpbml0X21lcmdlU2NhbigpOwogICAgaW5pdF9tZXJnZVdpdGgoKTsKICAgIGluaXRfbWluKCk7CiAgICBpbml0X211bHRpY2FzdCgpOwogICAgaW5pdF9vYnNlcnZlT24oKTsKICAgIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoKCk7CiAgICBpbml0X3BhaXJ3aXNlKCk7CiAgICBpbml0X3BhcnRpdGlvbjIoKTsKICAgIGluaXRfcGx1Y2soKTsKICAgIGluaXRfcHVibGlzaCgpOwogICAgaW5pdF9wdWJsaXNoQmVoYXZpb3IoKTsKICAgIGluaXRfcHVibGlzaExhc3QoKTsKICAgIGluaXRfcHVibGlzaFJlcGxheSgpOwogICAgaW5pdF9yYWNlMigpOwogICAgaW5pdF9yYWNlV2l0aCgpOwogICAgaW5pdF9yZWR1Y2UoKTsKICAgIGluaXRfcmVwZWF0KCk7CiAgICBpbml0X3JlcGVhdFdoZW4oKTsKICAgIGluaXRfcmV0cnkoKTsKICAgIGluaXRfcmV0cnlXaGVuKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X3NhbXBsZSgpOwogICAgaW5pdF9zYW1wbGVUaW1lKCk7CiAgICBpbml0X3NjYW4oKTsKICAgIGluaXRfc2VxdWVuY2VFcXVhbCgpOwogICAgaW5pdF9zaGFyZSgpOwogICAgaW5pdF9zaGFyZVJlcGxheSgpOwogICAgaW5pdF9zaW5nbGUoKTsKICAgIGluaXRfc2tpcCgpOwogICAgaW5pdF9za2lwTGFzdCgpOwogICAgaW5pdF9za2lwVW50aWwoKTsKICAgIGluaXRfc2tpcFdoaWxlKCk7CiAgICBpbml0X3N0YXJ0V2l0aCgpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogICAgaW5pdF9zd2l0Y2hBbGwoKTsKICAgIGluaXRfc3dpdGNoTWFwKCk7CiAgICBpbml0X3N3aXRjaE1hcFRvKCk7CiAgICBpbml0X3N3aXRjaFNjYW4oKTsKICAgIGluaXRfdGFrZSgpOwogICAgaW5pdF90YWtlTGFzdCgpOwogICAgaW5pdF90YWtlVW50aWwoKTsKICAgIGluaXRfdGFrZVdoaWxlKCk7CiAgICBpbml0X3RhcCgpOwogICAgaW5pdF90aHJvdHRsZSgpOwogICAgaW5pdF90aHJvdHRsZVRpbWUoKTsKICAgIGluaXRfdGhyb3dJZkVtcHR5KCk7CiAgICBpbml0X3RpbWVJbnRlcnZhbCgpOwogICAgaW5pdF90aW1lb3V0KCk7CiAgICBpbml0X3RpbWVvdXRXaXRoKCk7CiAgICBpbml0X3RpbWVzdGFtcCgpOwogICAgaW5pdF90b0FycmF5KCk7CiAgICBpbml0X3dpbmRvdygpOwogICAgaW5pdF93aW5kb3dDb3VudCgpOwogICAgaW5pdF93aW5kb3dUaW1lKCk7CiAgICBpbml0X3dpbmRvd1RvZ2dsZSgpOwogICAgaW5pdF93aW5kb3dXaGVuKCk7CiAgICBpbml0X3dpdGhMYXRlc3RGcm9tKCk7CiAgICBpbml0X3ppcDIoKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMKdmFyIHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cywgewogIE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGUsCiAgUmVwbGF5U3ViamVjdDogKCkgPT4gUmVwbGF5U3ViamVjdCwKICBTdWJqZWN0OiAoKSA9PiBTdWJqZWN0LAogIFN1YnNjcmlwdGlvbjogKCkgPT4gU3Vic2NyaXB0aW9uLAogIGZyb206ICgpID0+IGZyb20sCiAgZnJvbUV2ZW50OiAoKSA9PiBmcm9tRXZlbnQsCiAgb2Y6ICgpID0+IG9mLAogIG9wczogKCkgPT4gb3BzCn0pOwp2YXIgb3BzOwp2YXIgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgICBpbml0X29wZXJhdG9ycygpOwogICAgb3BzID0gewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckNvdW50LAogICAgICBidWZmZXJUaW1lLAogICAgICBkZWJvdW5jZSwKICAgICAgZGVib3VuY2VUaW1lLAogICAgICBmaWx0ZXIsCiAgICAgIG1hcDogbWFwMiwKICAgICAgc3RhcnRXaXRoLAogICAgICB0YWtlVW50aWwsCiAgICAgIHRocm90dGxlVGltZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMKdmFyIE9ic2VydmFibGVtYXA7CnZhciBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogICAgT2JzZXJ2YWJsZW1hcCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkgPSBuZXcgQXJyYXkoKTsKICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5ID0gbmV3IEFycmF5KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KICAgICAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLgogICAgICAgKi8KICAgICAgZ2V0U3ViamVjdEZvckVtaXR0ZXJFdmVudChlbWl0dGVyQXJnLCBldmVudEFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQoZW1pdHRlckFyZywgZXZlbnRBcmcpOwogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgZW1pdHRlck9ic2VydmFibGUuc3Vic2NyaWJlKGVtaXR0ZXJTdWJqZWN0KTsKICAgICAgICAgIGNvbnN0IG5ld0J1bmRsZSA9IHsKICAgICAgICAgICAgc3ViamVjdDogZW1pdHRlclN1YmplY3QsCiAgICAgICAgICAgIGV2ZW50UmVmOiBlbWl0dGVyQXJnLAogICAgICAgICAgICBldmVudDogZXZlbnRBcmcKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFN1YmplY3RGb3JFdmVudFRhcmdldChldmVudFRhcmdldEFyZywgZXZlbnROYW1lQXJnKSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgY29uc3QgbmV3QnVuZGxlID0gewogICAgICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCwKICAgICAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLAogICAgICAgICAgICBldmVudDogZXZlbnROYW1lQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRUYXJnZXRCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS5qcwp2YXIgT2JzZXJ2YWJsZUludGFrZTsKdmFyIGluaXRfc21hcnRyeF9jbGFzc2VzX29ic2VydmFibGVpbnRha2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgICBPYnNlcnZhYmxlSW50YWtlID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICBuZXh0OiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBudWxsOwogICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnBheWxvYWRCdWZmZXIgPSBbXTsKICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXJBcmcpID0+IHsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBzZXRPYnNlcnZhYmxlKG9ic2VydmFibGVGdW5jKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7CiAgICAgIH0KICAgICAgcHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuYnVmZmVyZWQpIHsKICAgICAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1c2hlcyBtYW55IHBheWxvYWRzIGFzIGFycmF5CiAgICAgICAqIEBwYXJhbSBwYXlsb2FkQXJnQXJyYXkKICAgICAgICovCiAgICAgIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXlsb2FkQXJnQXJyYXkpIHsKICAgICAgICAgIHRoaXMucHVzaChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBnZW5lcmF0b3IgdG8gcXVlcnkgdGhlIG5leHQgcHVzaGVkIHZhbHVlCiAgICAgICAqIEBwYXJhbSBnZW5lcmF0b3JBcmcKICAgICAgICovCiAgICAgIHNldEdlbmVyYXRvcihnZW5lcmF0b3JBcmcpIHsKICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvckFyZzsKICAgICAgfQogICAgICBtYWtlQnVmZmVyZWQoKSB7CiAgICAgICAgdGhpcy5idWZmZXJlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc3Vic2NyaWJlKC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVxdWVzdCB0aGUgbmV4dCB2YWx1ZXMgaW4gdGhlIHF1YW50aXR5IHNwZWNpZmllZAogICAgICAgKiBAcGFyYW0gaG93TWFueUFyZyBpZiBhIGdlbmVyYXRvciBpcyBzZXQsIG9mIGEgYnVmZmVyIGV4aXN0cywgdGhpcyBhbGxvd3MgcmV0cmlldmluZyB2YWx1ZXMKICAgICAgICovCiAgICAgIHJlcXVlc3QoaG93TWFueUFyZykgewogICAgICAgIGlmIChob3dNYW55QXJnID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSAhPT0gaG93TWFueUFyZzsgaTExKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gdGhpcy5nZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQdXNoKG5leHRQYXlsb2FkLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogc2lnbmFscyB0aGUgY29tcGxldGlvbiBvZiB0aGlzIG9ic2VydmFibGUKICAgICAgICovCiAgICAgIHNpZ25hbENvbXBsZXRlKCkgewogICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5jb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGludGVybmFsUHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguZnVuY3Rpb25zLmpzCmZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlKHN0cmVhbSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gewogICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTsKICAgIGNvbnN0IHJlc3VtZVN0cmVhbSA9ICgpID0+IHByb2Nlc3MubmV4dFRpY2soKCkgPT4gc3RyZWFtLnJlc3VtZSgpKTsKICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhKSA9PiB7CiAgICAgIHBhdXNlU3RyZWFtKCk7CiAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTsKICAgICAgcmVzdW1lU3RyZWFtKCk7CiAgICB9OwogICAgc3RyZWFtLm9uKCJkYXRhIiwgb25EYXRhKTsKICAgIHN0cmVhbS5vbigiZXJyb3IiLCAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKTsKICAgIHN0cmVhbS5vbigiZW5kIiwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTsKICAgIHN0cmVhbS5vbigiY2xvc2UiLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpOwogICAgcmV0dXJuICgpID0+IHsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJkYXRhIiwgb25EYXRhKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIHN1YnNjcmliZXIuZXJyb3IpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsIHN1YnNjcmliZXIuY29tcGxldGUpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgc3Vic2NyaWJlci5jb21wbGV0ZSk7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmZ1bmN0aW9ucy5qcyIoKSB7CiAgICBpbml0X2VzbTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMiwgewogIE9ic2VydmFibGVJbnRha2U6ICgpID0+IE9ic2VydmFibGVJbnRha2UsCiAgT2JzZXJ2YWJsZW1hcDogKCkgPT4gT2JzZXJ2YWJsZW1hcCwKICBmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTogKCkgPT4gZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmUsCiAgcnhqczogKCkgPT4gc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlaW50YWtlKCk7CiAgICBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzCmZ1bmN0aW9uIG41KHQ5KSB7CiAgcmV0dXJuIChlMTEsIG8xMykgPT4gIm9iamVjdCIgPT0gdHlwZW9mIG8xMyA/IHI0KHQ5LCBlMTEsIG8xMykgOiAoKHQxMCwgZTEyLCBvMTQpID0+IHsKICAgIGNvbnN0IHIxMSA9IGUxMi5oYXNPd25Qcm9wZXJ0eShvMTQpOwogICAgcmV0dXJuIGUxMi5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShvMTQsIHQxMCksIHIxMSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZTEyLCBvMTQpIDogdm9pZCAwOwogIH0pKHQ5LCBlMTEsIG8xMyk7Cn0KdmFyIG82LCByNDsKdmFyIGluaXRfcHJvcGVydHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgbzYgPSB7IGF0dHJpYnV0ZTogdHJ1ZSwgdHlwZTogU3RyaW5nLCBjb252ZXJ0ZXI6IHUsIHJlZmxlY3Q6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH0sIHI0ID0gKHQ5ID0gbzYsIGUxMSwgcjExKSA9PiB7CiAgICAgIGNvbnN0IHsga2luZDogbjEzLCBtZXRhZGF0YTogaTExIH0gPSByMTE7CiAgICAgIGxldCBzOSA9IGdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5nZXQoaTExKTsKICAgICAgaWYgKHZvaWQgMCA9PT0gczkgJiYgZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChpMTEsIHM5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSksICJzZXR0ZXIiID09PSBuMTMgJiYgKCh0OSA9IE9iamVjdC5jcmVhdGUodDkpKS53cmFwcGVkID0gdHJ1ZSksIHM5LnNldChyMTEubmFtZSwgdDkpLCAiYWNjZXNzb3IiID09PSBuMTMpIHsKICAgICAgICBjb25zdCB7IG5hbWU6IG8xMyB9ID0gcjExOwogICAgICAgIHJldHVybiB7IHNldChyMTIpIHsKICAgICAgICAgIGNvbnN0IG4xNCA9IGUxMS5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgIGUxMS5zZXQuY2FsbCh0aGlzLCByMTIpLCB0aGlzLnJlcXVlc3RVcGRhdGUobzEzLCBuMTQsIHQ5LCB0cnVlLCByMTIpOwogICAgICAgIH0sIGluaXQoZTEyKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBlMTIgJiYgdGhpcy5DKG8xMywgdm9pZCAwLCB0OSwgZTEyKSwgZTEyOwogICAgICAgIH0gfTsKICAgICAgfQogICAgICBpZiAoInNldHRlciIgPT09IG4xMykgewogICAgICAgIGNvbnN0IHsgbmFtZTogbzEzIH0gPSByMTE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgY29uc3QgbjE0ID0gdGhpc1tvMTNdOwogICAgICAgICAgZTExLmNhbGwodGhpcywgcjEyKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKG8xMywgbjE0LCB0OSwgdHJ1ZSwgcjEyKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBkZWNvcmF0b3IgbG9jYXRpb246ICIgKyBuMTMpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvcHJvcGVydHkuanMKdmFyIGluaXRfcHJvcGVydHkyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY29sb3JzLmpzCnZhciBpbml0X2RvbXRvb2xzX2NvbG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jb2xvcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0LAogIGRlbGF5Rm9yOiAoKSA9PiBkZWxheUZvciwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20KfSk7CnZhciBkZWxheUZvciwgZGVsYXlGb3JSYW5kb20sIFRpbWVvdXQ7CnZhciBpbml0X2Rpc3RfdHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogICAgZGVsYXlGb3IgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tID0gYXN5bmMgKHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgYXdhaXQgZGVsYXlGb3IoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7CiAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUocGFzc09uKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lSW5NaWxsaXNlY29uZEFyZyk7CiAgICAgICAgdGhpcy5zdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodW5yZWZlZEFyZykgewogICAgICAgICAgdGhpcy5tYWtlVW5yZWZlZCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdAogICAgICAgKi8KICAgICAgbWFrZVVucmVmZWQoKSB7CiAgICAgICAgdGhpcy5fdGltZW91dC51bnJlZigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjYW5jZWxzIHRoZSB0aW1lcgogICAgICAgKi8KICAgICAgY2FuY2VsKCkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOwogICAgICB9CiAgICAgIGdldFRpbWVMZWZ0KCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhcnRlZCArIHRoaXMudGltZW91dEluTWlsbGlzIC0gRGF0ZS5ub3coKTsKICAgICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czQgPSB7fTsKdmFyIGluaXRfZGlzdF90czQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2luZGV4LmpzCmZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHJpbmczKSB7CiAgaWYgKHR5cGVvZiBzdHJpbmczICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTsKICB9CiAgcmV0dXJuIHN0cmluZzMucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICJcXCQmIikucmVwbGFjZSgvLS9nLCAiXFx4MmQiKTsKfQp2YXIgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2VzY2FwZS1zdHJpbmctcmVnZXhwQDUuMC4wL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXRjaGVyQDUuMC4wL25vZGVfbW9kdWxlcy9tYXRjaGVyL2luZGV4LmpzCnZhciBtYXRjaGVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobWF0Y2hlcl9leHBvcnRzLCB7CiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaCwKICBtYXRjaGVyOiAoKSA9PiBtYXRjaGVyCn0pOwpmdW5jdGlvbiBtYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGJhc2VNYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zLCBmYWxzZSk7Cn0KZnVuY3Rpb24gaXNNYXRjaChpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucykgewogIHJldHVybiBiYXNlTWF0Y2hlcihpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucywgdHJ1ZSkubGVuZ3RoID4gMDsKfQp2YXIgcmVnZXhwQ2FjaGUsIHNhbml0aXplQXJyYXksIG1ha2VSZWdleHAsIGJhc2VNYXRjaGVyOwp2YXIgaW5pdF9tYXRjaGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWF0Y2hlckA1LjAuMC9ub2RlX21vZHVsZXMvbWF0Y2hlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgICByZWdleHBDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBzYW5pdGl6ZUFycmF5ID0gKGlucHV0LCBpbnB1dE5hbWUpID0+IHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkgewogICAgICAgIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICBpbnB1dCA9IFtpbnB1dF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgaW5wdXQgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtpbnB1dE5hbWV9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIGlucHV0fSdgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGlucHV0LmZpbHRlcigoc3RyaW5nMykgPT4gewogICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2Ygc3RyaW5nM30nIGluIHRoZSBhcnJheWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9OwogICAgbWFrZVJlZ2V4cCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7CiAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgLi4ub3B0aW9ucwogICAgICB9OwogICAgICBjb25zdCBjYWNoZUtleSA9IHBhdHRlcm4gKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTsKICAgICAgaWYgKHJlZ2V4cENhY2hlLmhhcyhjYWNoZUtleSkpIHsKICAgICAgICByZXR1cm4gcmVnZXhwQ2FjaGUuZ2V0KGNhY2hlS2V5KTsKICAgICAgfQogICAgICBjb25zdCBuZWdhdGVkID0gcGF0dGVyblswXSA9PT0gIiEiOwogICAgICBpZiAobmVnYXRlZCkgewogICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOwogICAgICB9CiAgICAgIHBhdHRlcm4gPSBlc2NhcGVTdHJpbmdSZWdleHAocGF0dGVybikucmVwbGFjZSgvXFxcKi9nLCAiW1xcc1xcU10qIik7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm59JGAsIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICIiIDogImkiKTsKICAgICAgcmVnZXhwLm5lZ2F0ZWQgPSBuZWdhdGVkOwogICAgICByZWdleHBDYWNoZS5zZXQoY2FjaGVLZXksIHJlZ2V4cCk7CiAgICAgIHJldHVybiByZWdleHA7CiAgICB9OwogICAgYmFzZU1hdGNoZXIgPSAoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMsIGZpcnN0TWF0Y2hPbmx5KSA9PiB7CiAgICAgIGlucHV0cyA9IHNhbml0aXplQXJyYXkoaW5wdXRzLCAiaW5wdXRzIik7CiAgICAgIHBhdHRlcm5zMiA9IHNhbml0aXplQXJyYXkocGF0dGVybnMyLCAicGF0dGVybnMiKTsKICAgICAgaWYgKHBhdHRlcm5zMi5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgcGF0dGVybnMyID0gcGF0dGVybnMyLm1hcCgocGF0dGVybikgPT4gbWFrZVJlZ2V4cChwYXR0ZXJuLCBvcHRpb25zKSk7CiAgICAgIGNvbnN0IHsgYWxsUGF0dGVybnMgfSA9IG9wdGlvbnMgfHwge307CiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgIGxldCBtYXRjaGVzOwogICAgICAgIGNvbnN0IGRpZEZpdCA9IFsuLi5wYXR0ZXJuczJdLmZpbGwoZmFsc2UpOwogICAgICAgIGZvciAoY29uc3QgW2luZGV4MiwgcGF0dGVybl0gb2YgcGF0dGVybnMyLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChpbnB1dCkpIHsKICAgICAgICAgICAgZGlkRml0W2luZGV4Ml0gPSB0cnVlOwogICAgICAgICAgICBtYXRjaGVzID0gIXBhdHRlcm4ubmVnYXRlZDsKICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEobWF0Y2hlcyA9PT0gZmFsc2UgfHwgbWF0Y2hlcyA9PT0gdm9pZCAwICYmIHBhdHRlcm5zMi5zb21lKChwYXR0ZXJuKSA9PiAhcGF0dGVybi5uZWdhdGVkKSB8fCBhbGxQYXR0ZXJucyAmJiBkaWRGaXQuc29tZSgoeWVzLCBpbmRleDIpID0+ICF5ZXMgJiYgIXBhdHRlcm5zMltpbmRleDJdLm5lZ2F0ZWQpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goaW5wdXQpOwogICAgICAgICAgaWYgKGZpcnN0TWF0Y2hPbmx5KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9zbWFydG1hdGNoLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X21hdGNoZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM1LCB7CiAgU21hcnRNYXRjaDogKCkgPT4gU21hcnRNYXRjaAp9KTsKdmFyIFNtYXJ0TWF0Y2g7CnZhciBpbml0X2Rpc3RfdHM1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zKCk7CiAgICBTbWFydE1hdGNoID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3aWxkY2FyZEFyZykgewogICAgICAgIHRoaXMud2lsZGNhcmQgPSB3aWxkY2FyZEFyZzsKICAgICAgfQogICAgICBtYXRjaChtYXRjaFN0cmluZ0FyZykgewogICAgICAgIHJldHVybiBtYXRjaGVyX2V4cG9ydHMuaXNNYXRjaChtYXRjaFN0cmluZ0FyZywgdGhpcy53aWxkY2FyZCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOS4xLjAvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcwp2YXIgY3JvbmVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY3JvbmVyX2V4cG9ydHMsIHsKICBDcm9uOiAoKSA9PiBSMiwKICBDcm9uRGF0ZTogKCkgPT4gZjMsCiAgQ3JvblBhdHRlcm46ICgpID0+IGQzLAogIHNjaGVkdWxlZEpvYnM6ICgpID0+IHkzCn0pOwpmdW5jdGlvbiBoMyhuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUsIGw2KSB7CiAgcmV0dXJuIGgzLmZyb21UWihoMy50cChuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUpLCBsNik7Cn0KZnVuY3Rpb24gRDIobjEzLCB0OSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKSB7CiAgbGV0IGUxMSA9IHQ5LnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IG4xMywgdGltZVpvbmVOYW1lOiAic2hvcnRPZmZzZXQiIH0pLnNwbGl0KCIgIikuc2xpY2UoLTEpWzBdLCByMTEgPSB0OS50b0xvY2FsZVN0cmluZygiZW4tVVMiKS5yZXBsYWNlKC9bXHUyMDJmXS8sICIgIik7CiAgcmV0dXJuIERhdGUucGFyc2UoYCR7cjExfSBHTVRgKSAtIERhdGUucGFyc2UoYCR7cjExfSAke2UxMX1gKTsKfQpmdW5jdGlvbiBrMihuMTMsIHQ5KSB7CiAgbGV0IGUxMSA9IG5ldyBEYXRlKERhdGUucGFyc2UobjEzKSk7CiAgaWYgKGlzTmFOKGUxMSkpIHRocm93IG5ldyBFcnJvcigibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci4iKTsKICBsZXQgcjExID0gbjEzLnN1YnN0cmluZyg5KTsKICByZXR1cm4gbjEzLmluY2x1ZGVzKCJaIikgfHwgcjExLmluY2x1ZGVzKCItIikgfHwgcjExLmluY2x1ZGVzKCIrIikgPyBoMy50cChlMTEuZ2V0VVRDRnVsbFllYXIoKSwgZTExLmdldFVUQ01vbnRoKCkgKyAxLCBlMTEuZ2V0VVRDRGF0ZSgpLCBlMTEuZ2V0VVRDSG91cnMoKSwgZTExLmdldFVUQ01pbnV0ZXMoKSwgZTExLmdldFVUQ1NlY29uZHMoKSwgIkV0Yy9VVEMiKSA6IGgzLnRwKGUxMS5nZXRGdWxsWWVhcigpLCBlMTEuZ2V0TW9udGgoKSArIDEsIGUxMS5nZXREYXRlKCksIGUxMS5nZXRIb3VycygpLCBlMTEuZ2V0TWludXRlcygpLCBlMTEuZ2V0U2Vjb25kcygpLCB0OSk7Cn0KZnVuY3Rpb24gTjIobjEzKSB7CiAgaWYgKG4xMyA9PT0gdm9pZCAwICYmIChuMTMgPSB7fSksIGRlbGV0ZSBuMTMubmFtZSwgbjEzLmxlZ2FjeU1vZGUgPSBuMTMubGVnYWN5TW9kZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IG4xMy5sZWdhY3lNb2RlLCBuMTMucGF1c2VkID0gbjEzLnBhdXNlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMucGF1c2VkLCBuMTMubWF4UnVucyA9IG4xMy5tYXhSdW5zID09PSB2b2lkIDAgPyAxIC8gMCA6IG4xMy5tYXhSdW5zLCBuMTMuY2F0Y2ggPSBuMTMuY2F0Y2ggPT09IHZvaWQgMCA/IGZhbHNlIDogbjEzLmNhdGNoLCBuMTMuaW50ZXJ2YWwgPSBuMTMuaW50ZXJ2YWwgPT09IHZvaWQgMCA/IDAgOiBwYXJzZUludChuMTMuaW50ZXJ2YWwudG9TdHJpbmcoKSwgMTApLCBuMTMudXRjT2Zmc2V0ID0gbjEzLnV0Y09mZnNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyc2VJbnQobjEzLnV0Y09mZnNldC50b1N0cmluZygpLCAxMCksIG4xMy51bnJlZiA9IG4xMy51bnJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMudW5yZWYsIG4xMy5zdGFydEF0ICYmIChuMTMuc3RhcnRBdCA9IG5ldyBmMyhuMTMuc3RhcnRBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5zdG9wQXQgJiYgKG4xMy5zdG9wQXQgPSBuZXcgZjMobjEzLnN0b3BBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5pbnRlcnZhbCAhPT0gbnVsbCkgewogICAgaWYgKGlzTmFOKG4xMy5pbnRlcnZhbCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXIiKTsKICAgIGlmIChuMTMuaW50ZXJ2YWwgPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAobjEzLnV0Y09mZnNldCAhPT0gdm9pZCAwKSB7CiAgICBpZiAoaXNOYU4objEzLnV0Y09mZnNldCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgPCAtODcwIHx8IG4xMy51dGNPZmZzZXQgPiA4NzApIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgIT09IHZvaWQgMCAmJiBuMTMudGltZXpvbmUpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuIik7CiAgfQogIGlmIChuMTMudW5yZWYgIT09IHRydWUgJiYgbjEzLnVucmVmICE9PSBmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLiIpOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gZzIobjEzKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuMTMpID09PSAiW29iamVjdCBGdW5jdGlvbl0iIHx8IHR5cGVvZiBuMTMgPT0gImZ1bmN0aW9uIiB8fCBuMTMgaW5zdGFuY2VvZiBGdW5jdGlvbjsKfQpmdW5jdGlvbiBTMyhuMTMpIHsKICByZXR1cm4gZzIobjEzKTsKfQpmdW5jdGlvbiBQMihuMTMpIHsKICB0eXBlb2YgRGVubyA8ICJ1IiAmJiB0eXBlb2YgRGVuby51bnJlZlRpbWVyIDwgInUiID8gRGVuby51bnJlZlRpbWVyKG4xMykgOiBuMTMgJiYgdHlwZW9mIG4xMy51bnJlZiA8ICJ1IiAmJiBuMTMudW5yZWYoKTsKfQp2YXIgYjMsIHAzLCB2MiwgZDMsIE8sIG0yLCBmMywgXzIsIHkzLCBSMjsKdmFyIGluaXRfY3JvbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDkuMS4wL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIuanMiKCkgewogICAgaDMuZnJvbVRaSVNPID0gKG4xMywgdDksIGUxMSkgPT4gaDMuZnJvbVRaKGsyKG4xMywgdDkpLCBlMTEpOwogICAgaDMuZnJvbVRaID0gZnVuY3Rpb24objEzLCB0OSkgewogICAgICBsZXQgZTExID0gbmV3IERhdGUoRGF0ZS5VVEMobjEzLnksIG4xMy5tIC0gMSwgbjEzLmQsIG4xMy5oLCBuMTMuaSwgbjEzLnMpKSwgcjExID0gRDIobjEzLnR6LCBlMTEpLCBzOSA9IG5ldyBEYXRlKGUxMS5nZXRUaW1lKCkgLSByMTEpLCBpMTEgPSBEMihuMTMudHosIHM5KTsKICAgICAgaWYgKGkxMSAtIHIxMSA9PT0gMCkgcmV0dXJuIHM5OwogICAgICB7CiAgICAgICAgbGV0IGE1ID0gbmV3IERhdGUoZTExLmdldFRpbWUoKSAtIGkxMSksIGw2ID0gRDIobjEzLnR6LCBhNSk7CiAgICAgICAgaWYgKGw2IC0gaTExID09PSAwKSByZXR1cm4gYTU7CiAgICAgICAgaWYgKCF0OSAmJiBsNiAtIGkxMSA+IDApIHJldHVybiBhNTsKICAgICAgICBpZiAodDkpIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKSIpOwogICAgICAgIHJldHVybiBzOTsKICAgICAgfQogICAgfTsKICAgIGgzLnRvVFogPSBmdW5jdGlvbihuMTMsIHQ5KSB7CiAgICAgIGxldCBlMTEgPSBuMTMudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogdDkgfSkucmVwbGFjZSgvW1x1MjAyZl0vLCAiICIpLCByMTEgPSBuZXcgRGF0ZShlMTEpOwogICAgICByZXR1cm4geyB5OiByMTEuZ2V0RnVsbFllYXIoKSwgbTogcjExLmdldE1vbnRoKCkgKyAxLCBkOiByMTEuZ2V0RGF0ZSgpLCBoOiByMTEuZ2V0SG91cnMoKSwgaTogcjExLmdldE1pbnV0ZXMoKSwgczogcjExLmdldFNlY29uZHMoKSwgdHo6IHQ5IH07CiAgICB9OwogICAgaDMudHAgPSAobjEzLCB0OSwgZTExLCByMTEsIHM5LCBpMTEsIGE1KSA9PiAoeyB5OiBuMTMsIG06IHQ5LCBkOiBlMTEsIGg6IHIxMSwgaTogczksIHM6IGkxMSwgdHo6IGE1IH0pOwogICAgaDMubWluaXR6ID0gaDM7CiAgICBiMyA9IDMyLCBwMyA9IDMxIHwgYjMsIHYyID0gWzEsIDIsIDQsIDgsIDE2XSwgZDMgPSBjbGFzcyB7CiAgICAgIHBhdHRlcm47CiAgICAgIHRpbWV6b25lOwogICAgICBzZWNvbmQ7CiAgICAgIG1pbnV0ZTsKICAgICAgaG91cjsKICAgICAgZGF5OwogICAgICBtb250aDsKICAgICAgZGF5T2ZXZWVrOwogICAgICBsYXN0RGF5T2ZNb250aDsKICAgICAgc3RhckRPTTsKICAgICAgc3RhckRPVzsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSkgewogICAgICAgIHRoaXMucGF0dGVybiA9IHQ5LCB0aGlzLnRpbWV6b25lID0gZTExLCB0aGlzLnNlY29uZCA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLm1pbnV0ZSA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLmhvdXIgPSBBcnJheSgyNCkuZmlsbCgwKSwgdGhpcy5kYXkgPSBBcnJheSgzMSkuZmlsbCgwKSwgdGhpcy5tb250aCA9IEFycmF5KDEyKS5maWxsKDApLCB0aGlzLmRheU9mV2VlayA9IEFycmF5KDcpLmZpbGwoMCksIHRoaXMubGFzdERheU9mTW9udGggPSBmYWxzZSwgdGhpcy5zdGFyRE9NID0gZmFsc2UsIHRoaXMuc3RhckRPVyA9IGZhbHNlLCB0aGlzLnBhcnNlKCk7CiAgICAgIH0KICAgICAgcGFyc2UoKSB7CiAgICAgICAgaWYgKCEodHlwZW9mIHRoaXMucGF0dGVybiA9PSAic3RyaW5nIiB8fCB0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7CiAgICAgICAgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKSA+PSAwICYmICh0aGlzLnBhdHRlcm4gPSB0aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xzKy9nLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA8IDUgfHwgdDkubGVuZ3RoID4gNikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCciICsgdGhpcy5wYXR0ZXJuICsgIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA9PT0gNSAmJiB0OS51bnNoaWZ0KCIwIiksIHQ5WzNdLmluZGV4T2YoIkwiKSA+PSAwICYmICh0OVszXSA9IHQ5WzNdLnJlcGxhY2UoIkwiLCAiIiksIHRoaXMubGFzdERheU9mTW9udGggPSB0cnVlKSwgdDlbM10gPT0gIioiICYmICh0aGlzLnN0YXJET00gPSB0cnVlKSwgdDlbNF0ubGVuZ3RoID49IDMgJiYgKHQ5WzRdID0gdGhpcy5yZXBsYWNlQWxwaGFNb250aHModDlbNF0pKSwgdDlbNV0ubGVuZ3RoID49IDMgJiYgKHQ5WzVdID0gdGhpcy5yZXBsYWNlQWxwaGFEYXlzKHQ5WzVdKSksIHQ5WzVdID09ICIqIiAmJiAodGhpcy5zdGFyRE9XID0gdHJ1ZSksIHRoaXMucGF0dGVybi5pbmRleE9mKCI/IikgPj0gMCkgewogICAgICAgICAgbGV0IGUxMSA9IG5ldyBmMygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTsKICAgICAgICAgIHQ5WzBdID0gdDlbMF0ucmVwbGFjZSgiPyIsIGUxMS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSksIHQ5WzFdID0gdDlbMV0ucmVwbGFjZSgiPyIsIGUxMS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksIHQ5WzJdID0gdDlbMl0ucmVwbGFjZSgiPyIsIGUxMS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLCB0aGlzLnN0YXJET00gfHwgKHQ5WzNdID0gdDlbM10ucmVwbGFjZSgiPyIsIGUxMS5nZXREYXRlKCkudG9TdHJpbmcoKSkpLCB0OVs0XSA9IHQ5WzRdLnJlcGxhY2UoIj8iLCAoZTExLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKSwgdGhpcy5zdGFyRE9XIHx8ICh0OVs1XSA9IHQ5WzVdLnJlcGxhY2UoIj8iLCBlMTEuZ2V0RGF5KCkudG9TdHJpbmcoKSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSksIHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsIHQ5WzBdLCAwLCAxKSwgdGhpcy5wYXJ0VG9BcnJheSgibWludXRlIiwgdDlbMV0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJob3VyIiwgdDlbMl0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJkYXkiLCB0OVszXSwgLTEsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJtb250aCIsIHQ5WzRdLCAtMSwgMSksIHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsIHQ5WzVdLCAwLCBwMyksIHRoaXMuZGF5T2ZXZWVrWzddICYmICh0aGlzLmRheU9mV2Vla1swXSA9IHRoaXMuZGF5T2ZXZWVrWzddKTsKICAgICAgfQogICAgICBwYXJ0VG9BcnJheSh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbdDldLCBhNSA9IHQ5ID09PSAiZGF5IiAmJiB0aGlzLmxhc3REYXlPZk1vbnRoOwogICAgICAgIGlmIChlMTEgPT09ICIiICYmICFhNSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIiArIHQ5ICsgIiAoIiArIGUxMSArICIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLiIpOwogICAgICAgIGlmIChlMTEgPT09ICIqIikgcmV0dXJuIGkxMS5maWxsKHM5KTsKICAgICAgICBsZXQgbDYgPSBlMTEuc3BsaXQoIiwiKTsKICAgICAgICBpZiAobDYubGVuZ3RoID4gMSkgZm9yIChsZXQgbzEzID0gMDsgbzEzIDwgbDYubGVuZ3RoOyBvMTMrKykgdGhpcy5wYXJ0VG9BcnJheSh0OSwgbDZbbzEzXSwgcjExLCBzOSk7CiAgICAgICAgZWxzZSBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSAmJiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2UoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEgIT09ICIiICYmIHRoaXMuaGFuZGxlTnVtYmVyKGUxMSwgdDksIHIxMSwgczkpOwogICAgICB9CiAgICAgIHRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSkgewogICAgICAgIGZvciAobGV0IGUxMSA9IDA7IGUxMSA8IHQ5Lmxlbmd0aDsgZTExKyspIGlmICgoZTExID09PSA1ID8gL1teLyowLTksXC0jTF0rLyA6IC9bXi8qMC05LC1dKy8pLnRlc3QodDlbZTExXSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIgKyBlMTEgKyAiICgiICsgdDlbZTExXSArICIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICBoYW5kbGVOdW1iZXIodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gcGFyc2VJbnQoaTExWzBdLCAxMCkgKyByMTE7CiAgICAgICAgaWYgKGlzTmFOKGE1KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46ICIgKyBlMTEgKyAiIGlzIG5vdCBhIG51bWJlcjogJyIgKyB0OSArICInIik7CiAgICAgICAgdGhpcy5zZXRQYXJ0KGUxMSwgYTUsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgc2V0UGFydCh0OSwgZTExLCByMTEpIHsKICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCB0OSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHBhcnQgc3BlY2lmaWVkOiAiICsgdDkpOwogICAgICAgIGlmICh0OSA9PT0gImRheU9mV2VlayIpIHsKICAgICAgICAgIGlmIChlMTEgPT09IDcgJiYgKGUxMSA9IDApLCBlMTEgPCAwIHx8IGUxMSA+IDYpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiAiICsgZTExKTsKICAgICAgICAgIHRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoZTExLCByMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodDkgPT09ICJzZWNvbmQiIHx8IHQ5ID09PSAibWludXRlIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDYwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJob3VyIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDI0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJkYXkiKSB7CiAgICAgICAgICBpZiAoZTExIDwgMCB8fCBlMTEgPj0gMzEpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIHQ5ICsgIjogIiArIGUxMSk7CiAgICAgICAgfSBlbHNlIGlmICh0OSA9PT0gIm1vbnRoIiAmJiAoZTExIDwgMCB8fCBlMTEgPj0gMTIpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIHRoaXNbdDldW2UxMV0gPSByMTE7CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLm1hdGNoKC9eKFxkKyktKFxkKylcLyhcZCspJC8pOwogICAgICAgIGlmIChhNSA9PT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBsZXQgWywgbDYsIG8xMywgdTddID0gYTUsIGMxMSA9IHBhcnNlSW50KGw2LCAxMCkgKyByMTEsIHczID0gcGFyc2VJbnQobzEzLCAxMCkgKyByMTEsIEMzID0gcGFyc2VJbnQodTcsIDEwKTsKICAgICAgICBpZiAoaXNOYU4oYzExKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpOwogICAgICAgIGlmIChpc05hTih3MykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAoaXNOYU4oQzMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpOwogICAgICAgIGlmIChDMyA9PT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpOwogICAgICAgIGlmIChDMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bSB2YWx1ZSBvZiBwYXJ0ICgiICsgdGhpc1tlMTFdLmxlbmd0aCArICIpIik7CiAgICAgICAgaWYgKGMxMSA+IHczKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIgKyB0OSArICInIik7CiAgICAgICAgZm9yIChsZXQgVDMgPSBjMTE7IFQzIDw9IHczOyBUMyArPSBDMykgdGhpcy5zZXRQYXJ0KGUxMSwgVDMsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgZXh0cmFjdE50aCh0OSwgZTExKSB7CiAgICAgICAgbGV0IHIxMSA9IHQ5LCBzOTsKICAgICAgICBpZiAocjExLmluY2x1ZGVzKCIjIikpIHsKICAgICAgICAgIGlmIChlMTEgIT09ICJkYXlPZldlZWsiKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZCIpOwogICAgICAgICAgczkgPSByMTEuc3BsaXQoIiMiKVsxXSwgcjExID0gcjExLnNwbGl0KCIjIilbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcjExLCBzOV07CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2UodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLnNwbGl0KCItIik7CiAgICAgICAgaWYgKGE1Lmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJyIgKyB0OSArICInIik7CiAgICAgICAgbGV0IGw2ID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSwgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKSArIHIxMTsKICAgICAgICBpZiAoaXNOYU4obDYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7CiAgICAgICAgaWYgKGlzTmFOKG8xMykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAobDYgPiBvMTMpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBmb3IgKGxldCB1NyA9IGw2OyB1NyA8PSBvMTM7IHU3KyspIHRoaXMuc2V0UGFydChlMTEsIHU3LCBpMTFbMV0gfHwgczkpOwogICAgICB9CiAgICAgIGhhbmRsZVN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgczkpIHsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKHQ5LCBlMTEpLCBhNSA9IGkxMVswXS5zcGxpdCgiLyIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciICsgdDkgKyAiJyIpOwogICAgICAgIGE1WzBdID09PSAiIiAmJiAoYTVbMF0gPSAiKiIpOwogICAgICAgIGxldCBsNiA9IDA7CiAgICAgICAgYTVbMF0gIT09ICIqIiAmJiAobDYgPSBwYXJzZUludChhNVswXSwgMTApICsgcjExKTsKICAgICAgICBsZXQgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKTsKICAgICAgICBpZiAoaXNOYU4obzEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKTsKICAgICAgICBpZiAobzEzID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwIik7CiAgICAgICAgaWYgKG8xMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoIiArIHRoaXNbZTExXS5sZW5ndGggKyAiKSIpOwogICAgICAgIGZvciAobGV0IHU3ID0gbDY7IHU3IDwgdGhpc1tlMTFdLmxlbmd0aDsgdTcgKz0gbzEzKSB0aGlzLnNldFBhcnQoZTExLCB1NywgaTExWzFdIHx8IHM5KTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFEYXlzKHQ5KSB7CiAgICAgICAgcmV0dXJuIHQ5LnJlcGxhY2UoLy1zdW4vZ2ksICItNyIpLnJlcGxhY2UoL3N1bi9naSwgIjAiKS5yZXBsYWNlKC9tb24vZ2ksICIxIikucmVwbGFjZSgvdHVlL2dpLCAiMiIpLnJlcGxhY2UoL3dlZC9naSwgIjMiKS5yZXBsYWNlKC90aHUvZ2ksICI0IikucmVwbGFjZSgvZnJpL2dpLCAiNSIpLnJlcGxhY2UoL3NhdC9naSwgIjYiKTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFNb250aHModDkpIHsKICAgICAgICByZXR1cm4gdDkucmVwbGFjZSgvamFuL2dpLCAiMSIpLnJlcGxhY2UoL2ZlYi9naSwgIjIiKS5yZXBsYWNlKC9tYXIvZ2ksICIzIikucmVwbGFjZSgvYXByL2dpLCAiNCIpLnJlcGxhY2UoL21heS9naSwgIjUiKS5yZXBsYWNlKC9qdW4vZ2ksICI2IikucmVwbGFjZSgvanVsL2dpLCAiNyIpLnJlcGxhY2UoL2F1Zy9naSwgIjgiKS5yZXBsYWNlKC9zZXAvZ2ksICI5IikucmVwbGFjZSgvb2N0L2dpLCAiMTAiKS5yZXBsYWNlKC9ub3YvZ2ksICIxMSIpLnJlcGxhY2UoL2RlYy9naSwgIjEyIik7CiAgICAgIH0KICAgICAgaGFuZGxlTmlja25hbWVzKHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9IHQ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBlMTEgPT09ICJAeWVhcmx5IiB8fCBlMTEgPT09ICJAYW5udWFsbHkiID8gIjAgMCAxIDEgKiIgOiBlMTEgPT09ICJAbW9udGhseSIgPyAiMCAwIDEgKiAqIiA6IGUxMSA9PT0gIkB3ZWVrbHkiID8gIjAgMCAqICogMCIgOiBlMTEgPT09ICJAZGFpbHkiID8gIjAgMCAqICogKiIgOiBlMTEgPT09ICJAaG91cmx5IiA/ICIwICogKiAqICoiIDogdDk7CiAgICAgIH0KICAgICAgc2V0TnRoV2Vla2RheU9mTW9udGgodDksIGUxMSkgewogICAgICAgIGlmICh0eXBlb2YgZTExICE9ICJudW1iZXIiICYmIGUxMSA9PT0gIkwiKSB0aGlzLmRheU9mV2Vla1t0OV0gPSB0aGlzLmRheU9mV2Vla1t0OV0gfCBiMzsKICAgICAgICBlbHNlIGlmIChlMTEgPT09IHAzKSB0aGlzLmRheU9mV2Vla1t0OV0gPSBwMzsKICAgICAgICBlbHNlIGlmIChlMTEgPCA2ICYmIGUxMSA+IDApIHRoaXMuZGF5T2ZXZWVrW3Q5XSA9IHRoaXMuZGF5T2ZXZWVrW3Q5XSB8IHYyW2UxMSAtIDFdOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG50aCB3ZWVrZGF5IG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtlMTF9LCBUeXBlOiAke3R5cGVvZiBlMTF9YCk7CiAgICAgIH0KICAgIH07CiAgICBPID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBtMiA9IFtbIm1vbnRoIiwgInllYXIiLCAwXSwgWyJkYXkiLCAibW9udGgiLCAtMV0sIFsiaG91ciIsICJkYXkiLCAwXSwgWyJtaW51dGUiLCAiaG91ciIsIDBdLCBbInNlY29uZCIsICJtaW51dGUiLCAwXV0sIGYzID0gY2xhc3MgbjYgewogICAgICB0ejsKICAgICAgbXM7CiAgICAgIHNlY29uZDsKICAgICAgbWludXRlOwogICAgICBob3VyOwogICAgICBkYXk7CiAgICAgIG1vbnRoOwogICAgICB5ZWFyOwogICAgICBjb25zdHJ1Y3Rvcih0OSwgZTExKSB7CiAgICAgICAgaWYgKHRoaXMudHogPSBlMTEsIHQ5ICYmIHQ5IGluc3RhbmNlb2YgRGF0ZSkgaWYgKCFpc05hTih0OSkpIHRoaXMuZnJvbURhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3IiKTsKICAgICAgICBlbHNlIGlmICh0OSA9PT0gdm9pZCAwKSB0aGlzLmZyb21EYXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKTsKICAgICAgICBlbHNlIGlmICh0OSAmJiB0eXBlb2YgdDkgPT0gInN0cmluZyIpIHRoaXMuZnJvbVN0cmluZyh0OSk7CiAgICAgICAgZWxzZSBpZiAodDkgaW5zdGFuY2VvZiBuNikgdGhpcy5mcm9tQ3JvbkRhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoIiArIHR5cGVvZiB0OSArICIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpOwogICAgICB9CiAgICAgIGlzTnRoV2Vla2RheU9mTW9udGgodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBhNSA9IG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIHIxMSkpLmdldFVUQ0RheSgpLCBsNiA9IDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gMTsgbzEzIDw9IHIxMTsgbzEzKyspIG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIG8xMykpLmdldFVUQ0RheSgpID09PSBhNSAmJiBsNisrOwogICAgICAgIGlmIChzOSAmIHAzICYmIHYyW2w2IC0gMV0gJiBzOSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHM5ICYgYjMpIHsKICAgICAgICAgIGxldCBvMTMgPSBuZXcgRGF0ZShEYXRlLlVUQyh0OSwgZTExICsgMSwgMCkpLmdldFVUQ0RhdGUoKTsKICAgICAgICAgIGZvciAobGV0IHU3ID0gcjExICsgMTsgdTcgPD0gbzEzOyB1NysrKSBpZiAobmV3IERhdGUoRGF0ZS5VVEModDksIGUxMSwgdTcpKS5nZXRVVENEYXkoKSA9PT0gYTUpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbURhdGUodDkpIHsKICAgICAgICBpZiAodGhpcy50eiAhPT0gdm9pZCAwKSBpZiAodHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIpIHRoaXMubXMgPSB0OS5nZXRVVENNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSB0OS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gdDkuZ2V0VVRDTWludXRlcygpICsgdGhpcy50eiwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0aGlzLmFwcGx5KCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsZXQgZTExID0gaDMudG9UWih0OSwgdGhpcy50eik7CiAgICAgICAgICB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gZTExLnMsIHRoaXMubWludXRlID0gZTExLmksIHRoaXMuaG91ciA9IGUxMS5oLCB0aGlzLmRheSA9IGUxMS5kLCB0aGlzLm1vbnRoID0gZTExLm0gLSAxLCB0aGlzLnllYXIgPSBlMTEueTsKICAgICAgICB9CiAgICAgICAgZWxzZSB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldE1pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0SG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXREYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRGdWxsWWVhcigpOwogICAgICB9CiAgICAgIGZyb21Dcm9uRGF0ZSh0OSkgewogICAgICAgIHRoaXMudHogPSB0OS50eiwgdGhpcy55ZWFyID0gdDkueWVhciwgdGhpcy5tb250aCA9IHQ5Lm1vbnRoLCB0aGlzLmRheSA9IHQ5LmRheSwgdGhpcy5ob3VyID0gdDkuaG91ciwgdGhpcy5taW51dGUgPSB0OS5taW51dGUsIHRoaXMuc2Vjb25kID0gdDkuc2Vjb25kLCB0aGlzLm1zID0gdDkubXM7CiAgICAgIH0KICAgICAgYXBwbHkoKSB7CiAgICAgICAgaWYgKHRoaXMubW9udGggPiAxMSB8fCB0aGlzLmRheSA+IE9bdGhpcy5tb250aF0gfHwgdGhpcy5ob3VyID4gNTkgfHwgdGhpcy5taW51dGUgPiA1OSB8fCB0aGlzLnNlY29uZCA+IDU5IHx8IHRoaXMuaG91ciA8IDAgfHwgdGhpcy5taW51dGUgPCAwIHx8IHRoaXMuc2Vjb25kIDwgMCkgewogICAgICAgICAgbGV0IHQ5ID0gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKTsKICAgICAgICAgIHJldHVybiB0aGlzLm1zID0gdDkuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0VVRDU2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbVN0cmluZyh0OSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy50eiA9PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IGUxMSA9IGgzLmZyb21UWklTTyh0OSk7CiAgICAgICAgICB0aGlzLm1zID0gZTExLmdldFVUQ01pbGxpc2Vjb25kcygpLCB0aGlzLnNlY29uZCA9IGUxMS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gZTExLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gZTExLmdldFVUQ0hvdXJzKCksIHRoaXMuZGF5ID0gZTExLmdldFVUQ0RhdGUoKSwgdGhpcy5tb250aCA9IGUxMS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSBlMTEuZ2V0VVRDRnVsbFllYXIoKSwgdGhpcy5hcHBseSgpOwogICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy5mcm9tRGF0ZShoMy5mcm9tVFpJU08odDksIHRoaXMudHopKTsKICAgICAgfQogICAgICBmaW5kTmV4dCh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbZTExXSwgYTU7CiAgICAgICAgcjExLmxhc3REYXlPZk1vbnRoICYmICh0aGlzLm1vbnRoICE9PSAxID8gYTUgPSBPW3RoaXMubW9udGhdIDogYTUgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCAwLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF0ZSgpKTsKICAgICAgICBsZXQgbDYgPSAhcjExLnN0YXJET1cgJiYgZTExID09ICJkYXkiID8gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF5KCkgOiB2b2lkIDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gdGhpc1tlMTFdICsgczk7IG8xMyA8IHIxMVtlMTFdLmxlbmd0aDsgbzEzKyspIHsKICAgICAgICAgIGxldCB1NyA9IHIxMVtlMTFdW28xM107CiAgICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiByMTEubGFzdERheU9mTW9udGggJiYgbzEzIC0gczkgPT0gYTUgJiYgKHU3ID0gMSksIGUxMSA9PT0gImRheSIgJiYgIXIxMS5zdGFyRE9XKSB7CiAgICAgICAgICAgIGxldCBjMTEgPSByMTEuZGF5T2ZXZWVrWyhsNiArIChvMTMgLSBzOSAtIDEpKSAlIDddOwogICAgICAgICAgICBpZiAoYzExICYmIGMxMSAmIHAzKSBjMTEgPSB0aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCBvMTMgLSBzOSwgYzExKSA/IDEgOiAwOwogICAgICAgICAgICBlbHNlIGlmIChjMTEpIHRocm93IG5ldyBFcnJvcihgQ3JvbkRhdGU6IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlayBlbmNvdW50ZXJlZC4gJHtjMTF9YCk7CiAgICAgICAgICAgIHQ5LmxlZ2FjeU1vZGUgJiYgIXIxMS5zdGFyRE9NID8gdTcgPSB1NyB8fCBjMTEgOiB1NyA9IHU3ICYmIGMxMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1NykgcmV0dXJuIHRoaXNbZTExXSA9IG8xMyAtIHM5LCBpMTEgIT09IHRoaXNbZTExXSA/IDIgOiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMzsKICAgICAgfQogICAgICByZWN1cnNlKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSA9IHRoaXMuZmluZE5leHQoZTExLCBtMltyMTFdWzBdLCB0OSwgbTJbcjExXVsyXSk7CiAgICAgICAgaWYgKHM5ID4gMSkgewogICAgICAgICAgbGV0IGkxMSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgaTExIDwgbTIubGVuZ3RoOyApIHRoaXNbbTJbaTExXVswXV0gPSAtbTJbaTExXVsyXSwgaTExKys7CiAgICAgICAgICBpZiAoczkgPT09IDMpIHJldHVybiB0aGlzW20yW3IxMV1bMV1dKyssIHRoaXNbbTJbcjExXVswXV0gPSAtbTJbcjExXVsyXSwgdGhpcy5hcHBseSgpLCB0aGlzLnJlY3Vyc2UodDksIGUxMSwgMCk7CiAgICAgICAgICBpZiAodGhpcy5hcHBseSgpKSByZXR1cm4gdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIHIxMSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBtMi5sZW5ndGggPyB0aGlzIDogdGhpcy55ZWFyID49IDNlMyA/IG51bGwgOiB0aGlzLnJlY3Vyc2UodDksIGUxMSwgcjExKTsKICAgICAgfQogICAgICBpbmNyZW1lbnQodDksIGUxMSwgcjExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kICs9IGUxMS5pbnRlcnZhbCAhPT0gdm9pZCAwICYmIGUxMS5pbnRlcnZhbCA+IDEgJiYgcjExID8gZTExLmludGVydmFsIDogMSwgdGhpcy5tcyA9IDAsIHRoaXMuYXBwbHkoKSwgdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIDApOwogICAgICB9CiAgICAgIGdldERhdGUodDkpIHsKICAgICAgICByZXR1cm4gdDkgfHwgdGhpcy50eiA9PT0gdm9pZCAwID8gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpIDogdHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIgPyBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlIC0gdGhpcy50eiwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKSA6IGgzLmZyb21UWihoMy50cCh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMudHopLCBmYWxzZSk7CiAgICAgIH0KICAgICAgZ2V0VGltZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlKGZhbHNlKS5nZXRUaW1lKCk7CiAgICAgIH0KICAgIH07CiAgICBfMiA9IDMwICogMWUzLCB5MyA9IFtdLCBSMiA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgb3B0aW9uczsKICAgICAgX3N0YXRlczsKICAgICAgZm47CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSwgaTExOwogICAgICAgIGlmIChnMihlMTEpKSBpMTEgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGUxMSA9PSAib2JqZWN0IikgczkgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAoZTExICE9PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIG9wdGlvbnNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTsKICAgICAgICBpZiAoZzIocjExKSkgaTExID0gcjExOwogICAgICAgIGVsc2UgaWYgKHR5cGVvZiByMTEgPT0gIm9iamVjdCIpIHM5ID0gcjExOwogICAgICAgIGVsc2UgaWYgKHIxMSAhPT0gdm9pZCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7CiAgICAgICAgaWYgKHRoaXMubmFtZSA9IHM5Py5uYW1lLCB0aGlzLm9wdGlvbnMgPSBOMihzOSksIHRoaXMuX3N0YXRlcyA9IHsga2lsbDogZmFsc2UsIGJsb2NraW5nOiBmYWxzZSwgcHJldmlvdXNSdW46IHZvaWQgMCwgY3VycmVudFJ1bjogdm9pZCAwLCBvbmNlOiB2b2lkIDAsIGN1cnJlbnRUaW1lb3V0OiB2b2lkIDAsIG1heFJ1bnM6IHM5ID8gczkubWF4UnVucyA6IHZvaWQgMCwgcGF1c2VkOiBzOSA/IHM5LnBhdXNlZCA6IGZhbHNlLCBwYXR0ZXJuOiBuZXcgZDMoIiogKiAqICogKiIpIH0sIHQ5ICYmICh0OSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHQ5ID09ICJzdHJpbmciICYmIHQ5LmluZGV4T2YoIjoiKSA+IDApID8gdGhpcy5fc3RhdGVzLm9uY2UgPSBuZXcgZjModDksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KSA6IHRoaXMuX3N0YXRlcy5wYXR0ZXJuID0gbmV3IGQzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUpLCB0aGlzLm5hbWUpIHsKICAgICAgICAgIGlmICh5My5maW5kKChsNikgPT4gbDYubmFtZSA9PT0gdGhpcy5uYW1lKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJyIgKyB0aGlzLm5hbWUgKyAiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTsKICAgICAgICAgIHkzLnB1c2godGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgIT09IHZvaWQgMCAmJiBTMyhpMTEpICYmICh0aGlzLmZuID0gaTExLCB0aGlzLnNjaGVkdWxlKCkpLCB0aGlzOwogICAgICB9CiAgICAgIG5leHRSdW4odDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IGUxMS5nZXREYXRlKGZhbHNlKSA6IG51bGw7CiAgICAgIH0KICAgICAgbmV4dFJ1bnModDksIGUxMSkgewogICAgICAgIHRoaXMuX3N0YXRlcy5tYXhSdW5zICE9PSB2b2lkIDAgJiYgdDkgPiB0aGlzLl9zdGF0ZXMubWF4UnVucyAmJiAodDkgPSB0aGlzLl9zdGF0ZXMubWF4UnVucyk7CiAgICAgICAgbGV0IHIxMSA9IFtdLCBzOSA9IGUxMSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biB8fCB2b2lkIDA7CiAgICAgICAgZm9yICg7IHQ5LS0gJiYgKHM5ID0gdGhpcy5uZXh0UnVuKHM5KSk7ICkgcjExLnB1c2goczkpOwogICAgICAgIHJldHVybiByMTE7CiAgICAgIH0KICAgICAgZ2V0UGF0dGVybigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4gPyB0aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuIDogdm9pZCAwOwogICAgICB9CiAgICAgIGlzUnVubmluZygpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLCBlMTEgPSAhdGhpcy5fc3RhdGVzLnBhdXNlZCwgcjExID0gdGhpcy5mbiAhPT0gdm9pZCAwLCBzOSA9ICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgICByZXR1cm4gZTExICYmIHIxMSAmJiBzOSAmJiB0OSAhPT0gbnVsbDsKICAgICAgfQogICAgICBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIGlzQnVzeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nOwogICAgICB9CiAgICAgIGN1cnJlbnRSdW4oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuID8gdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4uZ2V0RGF0ZSgpIDogbnVsbDsKICAgICAgfQogICAgICBwcmV2aW91c1J1bigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuID8gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgbXNUb05leHQodDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IHQ5IGluc3RhbmNlb2YgZjMgfHwgdDkgaW5zdGFuY2VvZiBEYXRlID8gZTExLmdldFRpbWUoKSAtIHQ5LmdldFRpbWUoKSA6IGUxMS5nZXRUaW1lKCkgLSBuZXcgZjModDkpLmdldFRpbWUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgc3RvcCgpIHsKICAgICAgICB0aGlzLl9zdGF0ZXMua2lsbCA9IHRydWUsIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiBjbGVhclRpbWVvdXQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KTsKICAgICAgICBsZXQgdDkgPSB5My5pbmRleE9mKHRoaXMpOwogICAgICAgIHQ5ID49IDAgJiYgeTMuc3BsaWNlKHQ5LCAxKTsKICAgICAgfQogICAgICBwYXVzZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZCA9IHRydWUsICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQgPSBmYWxzZSwgIXRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIHNjaGVkdWxlKHQ5KSB7CiAgICAgICAgaWYgKHQ5ICYmIHRoaXMuZm4pIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7CiAgICAgICAgdDkgJiYgKHRoaXMuZm4gPSB0OSk7CiAgICAgICAgbGV0IGUxMSA9IHRoaXMubXNUb05leHQoKSwgcjExID0gdGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTsKICAgICAgICByZXR1cm4gZTExID09IG51bGwgfHwgaXNOYU4oZTExKSB8fCByMTEgPT09IG51bGwgPyB0aGlzIDogKGUxMSA+IF8yICYmIChlMTEgPSBfMiksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fY2hlY2tUcmlnZ2VyKHIxMSksIGUxMSksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiB0aGlzLm9wdGlvbnMudW5yZWYgJiYgUDIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSwgdGhpcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3RyaWdnZXIodDkpIHsKICAgICAgICBpZiAodGhpcy5fc3RhdGVzLmJsb2NraW5nID0gdHJ1ZSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPSBuZXcgZjModm9pZCAwLCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5jYXRjaCkgdHJ5IHsKICAgICAgICAgIHRoaXMuZm4gIT09IHZvaWQgMCAmJiBhd2FpdCB0aGlzLmZuKHRoaXMsIHRoaXMub3B0aW9ucy5jb250ZXh0KTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGcyKHRoaXMub3B0aW9ucy5jYXRjaCkgJiYgdGhpcy5vcHRpb25zLmNhdGNoKGUxMSwgdGhpcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhpcy5mbiAhPT0gdm9pZCAwICYmIGF3YWl0IHRoaXMuZm4odGhpcywgdGhpcy5vcHRpb25zLmNvbnRleHQpOwogICAgICAgIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1biA9IG5ldyBmMyh0OSwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCB0aGlzLl9zdGF0ZXMuYmxvY2tpbmcgPSBmYWxzZTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXIoKTsKICAgICAgfQogICAgICBydW5zTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnM7CiAgICAgIH0KICAgICAgX2NoZWNrVHJpZ2dlcih0OSkgewogICAgICAgIGxldCBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgcjExID0gIXRoaXMuX3N0YXRlcy5wYXVzZWQgJiYgZTExLmdldFRpbWUoKSA+PSB0OS5nZXRUaW1lKCksIHM5ID0gdGhpcy5fc3RhdGVzLmJsb2NraW5nICYmIHRoaXMub3B0aW9ucy5wcm90ZWN0OwogICAgICAgIHIxMSAmJiAhczkgPyAodGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiB0aGlzLl9zdGF0ZXMubWF4UnVucy0tLCB0aGlzLl90cmlnZ2VyKCkpIDogcjExICYmIHM5ICYmIGcyKHRoaXMub3B0aW9ucy5wcm90ZWN0KSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLCAwKSwgdGhpcy5zY2hlZHVsZSgpOwogICAgICB9CiAgICAgIF9uZXh0KHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9ICEhKHQ5IHx8IHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSwgcjExID0gZmFsc2U7CiAgICAgICAgIXQ5ICYmIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAmJiAoW3Q5LCBlMTFdID0gdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4odDksIGUxMSksIHIxMSA9ICF0OSksIHQ5ID0gbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHQ5ICYmIHQ5LmdldFRpbWUoKSA8IHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSAmJiAodDkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdCk7CiAgICAgICAgbGV0IHM5ID0gdGhpcy5fc3RhdGVzLm9uY2UgfHwgbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCk7CiAgICAgICAgcmV0dXJuICFyMTEgJiYgczkgIT09IHRoaXMuX3N0YXRlcy5vbmNlICYmIChzOSA9IHM5LmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zLCBlMTEpKSwgdGhpcy5fc3RhdGVzLm9uY2UgJiYgdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpIDw9IHQ5LmdldFRpbWUoKSB8fCBzOSA9PT0gbnVsbCB8fCB0aGlzLl9zdGF0ZXMubWF4UnVucyAhPT0gdm9pZCAwICYmIHRoaXMuX3N0YXRlcy5tYXhSdW5zIDw9IDAgfHwgdGhpcy5fc3RhdGVzLmtpbGwgfHwgdGhpcy5vcHRpb25zLnN0b3BBdCAmJiBzOS5nZXRUaW1lKCkgPj0gdGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkgPyBudWxsIDogczk7CiAgICAgIH0KICAgICAgX2NhbGN1bGF0ZVByZXZpb3VzUnVuKHQ5LCBlMTEpIHsKICAgICAgICBsZXQgcjExID0gbmV3IGYzKHZvaWQgMCwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCBzOSA9IHQ5OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkgPD0gcjExLmdldFRpbWUoKSkgewogICAgICAgICAgczkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdDsKICAgICAgICAgIGxldCBpMTEgPSBzOS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICBmb3IgKDsgaTExIDw9IHIxMS5nZXRUaW1lKCk7ICkgczkgPSBuZXcgZjMoczksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sIHRoaXMub3B0aW9ucywgdHJ1ZSksIGkxMSA9IHM5LmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAqIDFlMzsKICAgICAgICAgIGUxMSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOSA9PT0gbnVsbCAmJiAoczkgPSB2b2lkIDApLCBbczksIGUxMV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RhbnRzLmpzCnZhciBkYXlzSW5XZWVrLCBkYXlzSW5ZZWFyLCBtYXhUaW1lLCBtaW5UaW1lLCBtaWxsaXNlY29uZHNJbldlZWssIG1pbGxpc2Vjb25kc0luRGF5LCBtaWxsaXNlY29uZHNJbk1pbnV0ZSwgbWlsbGlzZWNvbmRzSW5Ib3VyLCBtaWxsaXNlY29uZHNJblNlY29uZCwgbWludXRlc0luWWVhciwgbWludXRlc0luTW9udGgsIG1pbnV0ZXNJbkRheSwgbWludXRlc0luSG91ciwgbW9udGhzSW5RdWFydGVyLCBtb250aHNJblllYXIsIHF1YXJ0ZXJzSW5ZZWFyLCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbkRheSwgc2Vjb25kc0luV2Vlaywgc2Vjb25kc0luWWVhciwgc2Vjb25kc0luTW9udGgsIHNlY29uZHNJblF1YXJ0ZXIsIGNvbnN0cnVjdEZyb21TeW1ib2w7CnZhciBpbml0X2NvbnN0YW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMiKCkgewogICAgZGF5c0luV2VlayA9IDc7CiAgICBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7CiAgICBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMWUzOwogICAgbWluVGltZSA9IC1tYXhUaW1lOwogICAgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0OGU1OwogICAgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjRlNTsKICAgIG1pbGxpc2Vjb25kc0luTWludXRlID0gNmU0OwogICAgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzZlNTsKICAgIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMWUzOwogICAgbWludXRlc0luWWVhciA9IDUyNTYwMDsKICAgIG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7CiAgICBtaW51dGVzSW5EYXkgPSAxNDQwOwogICAgbWludXRlc0luSG91ciA9IDYwOwogICAgbW9udGhzSW5RdWFydGVyID0gMzsKICAgIG1vbnRoc0luWWVhciA9IDEyOwogICAgcXVhcnRlcnNJblllYXIgPSA0OwogICAgc2Vjb25kc0luSG91ciA9IDM2MDA7CiAgICBzZWNvbmRzSW5NaW51dGUgPSA2MDsKICAgIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDsKICAgIHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3OwogICAgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7CiAgICBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjsKICAgIHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7CiAgICBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImNvbnN0cnVjdERhdGVGcm9tIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcwpmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgZGF0ZSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIGRhdGUodmFsdWUyKTsKICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKQogICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUyKTsKICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZTIpOwogIHJldHVybiBuZXcgRGF0ZSh2YWx1ZTIpOwp9CnZhciBjb25zdHJ1Y3RGcm9tX2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdEZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgY29uc3RydWN0RnJvbV9kZWZhdWx0ID0gY29uc3RydWN0RnJvbTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMKZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBjb250ZXh0MikgewogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQyIHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7Cn0KdmFyIHRvRGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF90b0RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdG9EYXRlLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgdG9EYXRlX2RlZmF1bHQgPSB0b0RhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkRGF5cy5qcwpmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBpZiAoIWFtb3VudCkgcmV0dXJuIF9kYXRlOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZERheXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZERheXNfZGVmYXVsdCA9IGFkZERheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzCmZ1bmN0aW9uIGFkZE1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgaWYgKCFhbW91bnQpIHsKICAgIHJldHVybiBfZGF0ZTsKICB9CiAgY29uc3QgZGF5T2ZNb250aCA9IF9kYXRlLmdldERhdGUoKTsKICBjb25zdCBlbmRPZkRlc2lyZWRNb250aCA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgX2RhdGUuZ2V0VGltZSgpKTsKICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChfZGF0ZS5nZXRNb250aCgpICsgYW1vdW50ICsgMSwgMCk7CiAgY29uc3QgZGF5c0luTW9udGggPSBlbmRPZkRlc2lyZWRNb250aC5nZXREYXRlKCk7CiAgaWYgKGRheU9mTW9udGggPj0gZGF5c0luTW9udGgpIHsKICAgIHJldHVybiBlbmRPZkRlc2lyZWRNb250aDsKICB9IGVsc2UgewogICAgX2RhdGUuc2V0RnVsbFllYXIoCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldEZ1bGxZZWFyKCksCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksCiAgICAgIGRheU9mTW9udGgKICAgICk7CiAgICByZXR1cm4gX2RhdGU7CiAgfQp9CnZhciBhZGRNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1vbnRocy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBhZGRNb250aHNfZGVmYXVsdCA9IGFkZE1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGQuanMKZnVuY3Rpb24gYWRkKGRhdGUsIGR1cmF0aW9uLCBvcHRpb25zKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIHdlZWtzID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGVXaXRoTW9udGhzID0gbW9udGhzMiB8fCB5ZWFycyA/IGFkZE1vbnRocyhfZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIpIDogX2RhdGU7CiAgY29uc3QgZGF0ZVdpdGhEYXlzID0gZGF5czIgfHwgd2Vla3MgPyBhZGREYXlzKGRhdGVXaXRoTW9udGhzLCBkYXlzMiArIHdlZWtzICogNykgOiBkYXRlV2l0aE1vbnRoczsKICBjb25zdCBtaW51dGVzVG9BZGQgPSBtaW51dGVzICsgaG91cnMgKiA2MDsKICBjb25zdCBzZWNvbmRzVG9BZGQgPSBzZWNvbmRzICsgbWludXRlc1RvQWRkICogNjA7CiAgY29uc3QgbXNUb0FkZCA9IHNlY29uZHNUb0FkZCAqIDFlMzsKICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArZGF0ZVdpdGhEYXlzICsgbXNUb0FkZCk7Cn0KdmFyIGFkZF9kZWZhdWx0Owp2YXIgaW5pdF9hZGQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZF9kZWZhdWx0ID0gYWRkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2F0dXJkYXkuanMKZnVuY3Rpb24gaXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDY7Cn0KdmFyIGlzU2F0dXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1NhdHVyZGF5X2RlZmF1bHQgPSBpc1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU3VuZGF5LmpzCmZ1bmN0aW9uIGlzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMDsKfQp2YXIgaXNTdW5kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTdW5kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzU3VuZGF5X2RlZmF1bHQgPSBpc1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZWtlbmQuanMKZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2Owp9CnZhciBpc1dlZWtlbmRfZGVmYXVsdDsKdmFyIGluaXRfaXNXZWVrZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2Vla2VuZC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWVrZW5kX2RlZmF1bHQgPSBpc1dlZWtlbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIGFkZEJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3Qgc3RhcnRlZE9uV2Vla2VuZCA9IGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGhvdXJzID0gX2RhdGUuZ2V0SG91cnMoKTsKICBjb25zdCBzaWduID0gYW1vdW50IDwgMCA/IC0xIDogMTsKICBjb25zdCBmdWxsV2Vla3MgPSBNYXRoLnRydW5jKGFtb3VudCAvIDUpOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZnVsbFdlZWtzICogNyk7CiAgbGV0IHJlc3REYXlzID0gTWF0aC5hYnMoYW1vdW50ICUgNSk7CiAgd2hpbGUgKHJlc3REYXlzID4gMCkgewogICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBzaWduKTsKICAgIGlmICghaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSkgcmVzdERheXMgLT0gMTsKICB9CiAgaWYgKHN0YXJ0ZWRPbldlZWtlbmQgJiYgaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSAmJiBhbW91bnQgIT09IDApIHsKICAgIGlmIChpc1NhdHVyZGF5KF9kYXRlLCBvcHRpb25zKSkKICAgICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyAoc2lnbiA8IDAgPyAyIDogLTEpKTsKICAgIGlmIChpc1N1bmRheShfZGF0ZSwgb3B0aW9ucykpCiAgICAgIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgKHNpZ24gPCAwID8gMSA6IC0yKSk7CiAgfQogIF9kYXRlLnNldEhvdXJzKGhvdXJzKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9hZGRCdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9pc1NhdHVyZGF5KCk7CiAgICBpbml0X2lzU3VuZGF5KCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0ID0gYWRkQnVzaW5lc3NEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3RvRGF0ZShkYXRlKSArIGFtb3VudCk7Cn0KdmFyIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gYWRkTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzCmZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5Ib3VyLCBvcHRpb25zKTsKfQp2YXIgYWRkSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMiKCkgewogICAgaW5pdF9hZGRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBhZGRIb3Vyc19kZWZhdWx0ID0gYWRkSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0T3B0aW9ucy5qcwpmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHsKICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7Cn0KZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykgewogIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9uczsKfQp2YXIgZGVmYXVsdE9wdGlvbnM7CnZhciBpbml0X2RlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgZGVmYXVsdE9wdGlvbnMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vlay5qcwpmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7CiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZXZWVrX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mV2Vla19kZWZhdWx0ID0gc3RhcnRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgc3RhcnRPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgc3RhcnRPZklTT1dlZWtfZGVmYXVsdCA9IHN0YXJ0T2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTsKICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHsKICAgIHJldHVybiB5ZWFyICsgMTsKICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7CiAgICByZXR1cm4geWVhcjsKICB9IGVsc2UgewogICAgcmV0dXJuIHllYXIgLSAxOwogIH0KfQp2YXIgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IGdldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTsKICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoCiAgICBEYXRlLlVUQygKICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSwKICAgICAgX2RhdGUuZ2V0TW9udGgoKSwKICAgICAgX2RhdGUuZ2V0RGF0ZSgpLAogICAgICBfZGF0ZS5nZXRIb3VycygpLAogICAgICBfZGF0ZS5nZXRNaW51dGVzKCksCiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSwKICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICAgICkKICApOwogIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7CiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7Cn0KdmFyIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQyLCAuLi5kYXRlcykgewogIGNvbnN0IG5vcm1hbGl6ZTQgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoCiAgICBudWxsLAogICAgY29udGV4dDIgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09ICJvYmplY3QiKQogICk7CiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemU0KTsKfQp2YXIgaW5pdF9ub3JtYWxpemVEYXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMKZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZkRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZEYXlfZGVmYXVsdCA9IHN0YXJ0T2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPSArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpOwogIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPSArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpOwp9CnZhciBzdGFydE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIHN0YXJ0T2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIHNldElTT1dlZWtZZWFyKGRhdGUsIHdlZWtZZWFyLCBvcHRpb25zKSB7CiAgbGV0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKAogICAgX2RhdGUsCiAgICBzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpCiAgKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIF9kYXRlID0gc3RhcnRPZklTT1dlZWtZZWFyKGZvdXJ0aE9mSmFudWFyeSk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldElTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IHNldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIHNldElTT1dlZWtZZWFyKGRhdGUsIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpICsgYW1vdW50LCBvcHRpb25zKTsKfQp2YXIgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2FkZElTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zZXRJU09XZWVrWWVhcigpOwogICAgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBhZGRJU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWludXRlcy5qcwpmdW5jdGlvbiBhZGRNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRUaW1lKF9kYXRlLmdldFRpbWUoKSArIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luTWludXRlKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZE1pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkTWludXRlc19kZWZhdWx0ID0gYWRkTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcwpmdW5jdGlvbiBhZGRRdWFydGVycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDMsIG9wdGlvbnMpOwp9CnZhciBhZGRRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgYWRkUXVhcnRlcnNfZGVmYXVsdCA9IGFkZFF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMKZnVuY3Rpb24gYWRkU2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIDFlMywgb3B0aW9ucyk7Cn0KdmFyIGFkZFNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRTZWNvbmRzLmpzIigpIHsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBhZGRTZWNvbmRzX2RlZmF1bHQgPSBhZGRTZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFdlZWtzLmpzCmZ1bmN0aW9uIGFkZFdlZWtzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIGFtb3VudCAqIDcsIG9wdGlvbnMpOwp9CnZhciBhZGRXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGFkZFdlZWtzX2RlZmF1bHQgPSBhZGRXZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRZZWFycy5qcwpmdW5jdGlvbiBhZGRZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyLCBvcHRpb25zKTsKfQp2YXIgYWRkWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkWWVhcnMuanMiKCkgewogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGFkZFllYXJzX2RlZmF1bHQgPSBhZGRZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qcwpmdW5jdGlvbiBhcmVJbnRlcnZhbHNPdmVybGFwcGluZyhpbnRlcnZhbExlZnQsIGludGVydmFsUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBbbGVmdFN0YXJ0VGltZSwgbGVmdEVuZFRpbWVdID0gWwogICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuc3RhcnQsIG9wdGlvbnM/LmluKSwKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0VGltZSwgcmlnaHRFbmRUaW1lXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxSaWdodC5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGlmIChvcHRpb25zPy5pbmNsdXNpdmUpCiAgICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8PSByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPD0gbGVmdEVuZFRpbWU7CiAgcmV0dXJuIGxlZnRTdGFydFRpbWUgPCByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPCBsZWZ0RW5kVGltZTsKfQp2YXIgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmdfZGVmYXVsdDsKdmFyIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGFyZUludGVydmFsc092ZXJsYXBwaW5nX2RlZmF1bHQgPSBhcmVJbnRlcnZhbHNPdmVybGFwcGluZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMKZnVuY3Rpb24gbWF4MihkYXRlcywgb3B0aW9ucykgewogIGxldCByZXN1bHQ7CiAgbGV0IGNvbnRleHQyID0gb3B0aW9ucz8uaW47CiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4gewogICAgaWYgKCFjb250ZXh0MiAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIpCiAgICAgIGNvbnRleHQyID0gY29uc3RydWN0RnJvbS5iaW5kKG51bGwsIGRhdGUpOwogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgY29udGV4dDIpOwogICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0IDwgZGF0ZV8gfHwgaXNOYU4oK2RhdGVfKSkgcmVzdWx0ID0gZGF0ZV87CiAgfSk7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dDIsIHJlc3VsdCB8fCBOYU4pOwp9CnZhciBtYXhfZGVmYXVsdDsKdmFyIGluaXRfbWF4MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbWF4X2RlZmF1bHQgPSBtYXgyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcwpmdW5jdGlvbiBtaW4yKGRhdGVzLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdDsKICBsZXQgY29udGV4dDIgPSBvcHRpb25zPy5pbjsKICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7CiAgICBpZiAoIWNvbnRleHQyICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IikKICAgICAgY29udGV4dDIgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0Mik7CiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPiBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXzsKICB9KTsKICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0MiwgcmVzdWx0IHx8IE5hTik7Cn0KdmFyIG1pbl9kZWZhdWx0Owp2YXIgaW5pdF9taW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBtaW5fZGVmYXVsdCA9IG1pbjI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xhbXAuanMKZnVuY3Rpb24gY2xhbXAoZGF0ZSwgaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVfLCBzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZSwKICAgIGludGVydmFsMy5zdGFydCwKICAgIGludGVydmFsMy5lbmQKICApOwogIHJldHVybiBtaW4yKFttYXgyKFtkYXRlXywgc3RhcnRdLCBvcHRpb25zKSwgZW5kM10sIG9wdGlvbnMpOwp9CnZhciBjbGFtcF9kZWZhdWx0Owp2YXIgaW5pdF9jbGFtcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X21heDIoKTsKICAgIGluaXRfbWluMigpOwogICAgY2xhbXBfZGVmYXVsdCA9IGNsYW1wOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzKSB7CiAgY29uc3QgdGltZVRvQ29tcGFyZSA9ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7CiAgaWYgKGlzTmFOKHRpbWVUb0NvbXBhcmUpKSByZXR1cm4gTmFOOwogIGxldCByZXN1bHQ7CiAgbGV0IG1pbkRpc3RhbmNlOwogIGRhdGVzLmZvckVhY2goKGRhdGUsIGluZGV4MikgPT4gewogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgICBpZiAoaXNOYU4oK2RhdGVfKSkgewogICAgICByZXN1bHQgPSBOYU47CiAgICAgIG1pbkRpc3RhbmNlID0gTmFOOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRpbWVUb0NvbXBhcmUgLSArZGF0ZV8pOwogICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKICAgICAgcmVzdWx0ID0gaW5kZXgyOwogICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNsb3Nlc3RJbmRleFRvX2RlZmF1bHQ7CnZhciBpbml0X2Nsb3Nlc3RJbmRleFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBjbG9zZXN0SW5kZXhUb19kZWZhdWx0ID0gY2xvc2VzdEluZGV4VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RUbyhkYXRlVG9Db21wYXJlLCBkYXRlcywgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlVG9Db21wYXJlXywgLi4uZGF0ZXNfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlVG9Db21wYXJlLAogICAgLi4uZGF0ZXMKICApOwogIGNvbnN0IGluZGV4MiA9IGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmVfLCBkYXRlc18pOwogIGlmICh0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiAmJiBpc05hTihpbmRleDIpKQogICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZVRvQ29tcGFyZV8sIE5hTik7CiAgaWYgKGluZGV4MiAhPT0gdm9pZCAwKSByZXR1cm4gZGF0ZXNfW2luZGV4Ml07Cn0KdmFyIGNsb3Nlc3RUb19kZWZhdWx0Owp2YXIgaW5pdF9jbG9zZXN0VG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgY2xvc2VzdFRvX2RlZmF1bHQgPSBjbG9zZXN0VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcwpmdW5jdGlvbiBjb21wYXJlQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHsKICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7CiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZGlmZiA+IDApIHJldHVybiAxOwogIHJldHVybiBkaWZmOwp9CnZhciBjb21wYXJlQXNjX2RlZmF1bHQ7CnZhciBpbml0X2NvbXBhcmVBc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgY29tcGFyZUFzY19kZWZhdWx0ID0gY29tcGFyZUFzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlRGVzYy5qcwpmdW5jdGlvbiBjb21wYXJlRGVzYyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7CiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIC0xOwogIGVsc2UgaWYgKGRpZmYgPCAwKSByZXR1cm4gMTsKICByZXR1cm4gZGlmZjsKfQp2YXIgY29tcGFyZURlc2NfZGVmYXVsdDsKdmFyIGluaXRfY29tcGFyZURlc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZURlc2MuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGNvbXBhcmVEZXNjX2RlZmF1bHQgPSBjb21wYXJlRGVzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMKZnVuY3Rpb24gY29uc3RydWN0Tm93KGRhdGUpIHsKICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTsKfQp2YXIgY29uc3RydWN0Tm93X2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdE5vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBjb25zdHJ1Y3ROb3dfZGVmYXVsdCA9IGNvbnN0cnVjdE5vdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kYXlzVG9XZWVrcy5qcwpmdW5jdGlvbiBkYXlzVG9XZWVrcyhkYXlzMikgewogIGNvbnN0IHJlc3VsdCA9IE1hdGgudHJ1bmMoZGF5czIgLyBkYXlzSW5XZWVrKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGF5c1RvV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGF5c1RvV2Vla3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGF5c1RvV2Vla3MuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRheXNUb1dlZWtzX2RlZmF1bHQgPSBkYXlzVG9XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVEYXkuanMKZnVuY3Rpb24gaXNTYW1lRGF5KGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mRGF5KGRhdGVMZWZ0XykgPT09ICtzdGFydE9mRGF5KGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVEYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZURheS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZEYXkoKTsKICAgIGlzU2FtZURheV9kZWZhdWx0ID0gaXNTYW1lRGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRGF0ZS5qcwpmdW5jdGlvbiBpc0RhdGUodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlMikgPT09ICJbb2JqZWN0IERhdGVdIjsKfQp2YXIgaXNEYXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzRGF0ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzIigpIHsKICAgIGlzRGF0ZV9kZWZhdWx0ID0gaXNEYXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVmFsaWQuanMKZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7CiAgcmV0dXJuICEoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gIm51bWJlciIgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpOwp9CnZhciBpc1ZhbGlkX2RlZmF1bHQ7CnZhciBpbml0X2lzVmFsaWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcyIoKSB7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1ZhbGlkX2RlZmF1bHQgPSBpc1ZhbGlkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBpZiAoIWlzVmFsaWQobGF0ZXJEYXRlXykgfHwgIWlzVmFsaWQoZWFybGllckRhdGVfKSkgcmV0dXJuIE5hTjsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3Qgc2lnbiA9IGRpZmYgPCAwID8gLTEgOiAxOwogIGNvbnN0IHdlZWtzID0gTWF0aC50cnVuYyhkaWZmIC8gNyk7CiAgbGV0IHJlc3VsdCA9IHdlZWtzICogNTsKICBsZXQgbW92aW5nRGF0ZSA9IGFkZERheXMoZWFybGllckRhdGVfLCB3ZWVrcyAqIDcpOwogIHdoaWxlICghaXNTYW1lRGF5KGxhdGVyRGF0ZV8sIG1vdmluZ0RhdGUpKSB7CiAgICByZXN1bHQgKz0gaXNXZWVrZW5kKG1vdmluZ0RhdGUsIG9wdGlvbnMpID8gMCA6IHNpZ247CiAgICBtb3ZpbmdEYXRlID0gYWRkRGF5cyhtb3ZpbmdEYXRlLCBzaWduKTsKICB9CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBnZXRJU09XZWVrWWVhcihsYXRlckRhdGVfLCBvcHRpb25zKSAtIGdldElTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXywgb3B0aW9ucyk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla0xlZnQgPSBzdGFydE9mSVNPV2VlayhsYXRlckRhdGVfKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla1JpZ2h0ID0gc3RhcnRPZklTT1dlZWsoZWFybGllckRhdGVfKTsKICBjb25zdCB0aW1lc3RhbXBMZWZ0ID0gK3N0YXJ0T2ZJU09XZWVrTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZklTT1dlZWtMZWZ0KTsKICBjb25zdCB0aW1lc3RhbXBSaWdodCA9ICtzdGFydE9mSVNPV2Vla1JpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla1JpZ2h0KTsKICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCB5ZWFyc0RpZmYgPSBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFF1YXJ0ZXIuanMKZnVuY3Rpb24gZ2V0UXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLnRydW5jKF9kYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7CiAgcmV0dXJuIHF1YXJ0ZXI7Cn0KdmFyIGdldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRRdWFydGVyX2RlZmF1bHQgPSBnZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwogIGNvbnN0IHF1YXJ0ZXJzRGlmZiA9IGdldFF1YXJ0ZXIobGF0ZXJEYXRlXykgLSBnZXRRdWFydGVyKGVhcmxpZXJEYXRlXyk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDQgKyBxdWFydGVyc0RpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0UXVhcnRlcigpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBsYXRlclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZWFybGllckRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBsYXRlclRpbWVzdGFtcCA9ICtsYXRlclN0YXJ0T2ZXZWVrIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZXZWVrKTsKICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID0gK2VhcmxpZXJTdGFydE9mV2VlayAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZXZWVrKTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKQogICk7CiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGNvbnN0IGlzTGFzdERheU5vdEZ1bGwgPSBOdW1iZXIoCiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24KICApOwogIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZmVyZW5jZSAtIGlzTGFzdERheU5vdEZ1bGwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgY29uc3QgZGlmZiA9IGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fCBsYXRlckRhdGUuZ2V0TW9udGgoKSAtIGVhcmxpZXJEYXRlLmdldE1vbnRoKCkgfHwgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fCBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHwgbGF0ZXJEYXRlLmdldE1pbnV0ZXMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbnV0ZXMoKSB8fCBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8IGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpOwogIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7CiAgcmV0dXJuIGRpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkRheXNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBkaWZmZXJlbmNlSW5EYXlzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanMKZnVuY3Rpb24gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKSB7CiAgcmV0dXJuIChudW1iZXIyKSA9PiB7CiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7CiAgICBjb25zdCByZXN1bHQgPSByb3VuZChudW1iZXIyKTsKICAgIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0OwogIH07Cn0KdmFyIGluaXRfZ2V0Um91bmRpbmdNZXRob2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRpZmZlcmVuY2VJbkhvdXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJJU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gc3ViSVNPV2Vla1llYXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7Cn0KdmFyIHN1YklTT1dlZWtZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJJU09XZWVrWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfYWRkSVNPV2Vla1llYXJzKCk7CiAgICBzdWJJU09XZWVrWWVhcnNfZGVmYXVsdCA9IHN1YklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpCiAgKTsKICBjb25zdCBhZGp1c3RlZERhdGUgPSBzdWJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgc2lnbiAqIGRpZmYsIG9wdGlvbnMpOwogIGNvbnN0IGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCA9IE51bWJlcigKICAgIGNvbXBhcmVBc2MoYWRqdXN0ZWREYXRlLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbgogICk7CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gaXNMYXN0SVNPV2Vla1llYXJOb3RGdWxsKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1YklTT1dlZWtZZWFycygpOwogICAgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICt0b0RhdGUobGF0ZXJEYXRlKSAtICt0b0RhdGUoZWFybGllckRhdGUpOwp9CnZhciBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWludXRlcy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaW51dGVzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKCk7CiAgICBkaWZmZXJlbmNlSW5NaW51dGVzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzCmZ1bmN0aW9uIGVuZE9mRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGF5X2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRheV9kZWZhdWx0ID0gZW5kT2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcwpmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZk1vbnRoX2RlZmF1bHQgPSBlbmRPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMKZnVuY3Rpb24gaXNMYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIHJldHVybiArZW5kT2ZEYXkoX2RhdGUsIG9wdGlvbnMpID09PSArZW5kT2ZNb250aChfZGF0ZSwgb3B0aW9ucyk7Cn0KdmFyIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNMYXN0RGF5T2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdCA9IGlzTGFzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZmVyZW5jZSA9IE1hdGguYWJzKAogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKQogICk7CiAgaWYgKGRpZmZlcmVuY2UgPCAxKSByZXR1cm4gMDsKICBpZiAod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpID09PSAxICYmIHdvcmtpbmdMYXRlckRhdGUuZ2V0RGF0ZSgpID4gMjcpCiAgICB3b3JraW5nTGF0ZXJEYXRlLnNldERhdGUoMzApOwogIHdvcmtpbmdMYXRlckRhdGUuc2V0TW9udGgod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGxldCBpc0xhc3RNb250aE5vdEZ1bGwgPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduOwogIGlmIChpc0xhc3REYXlPZk1vbnRoKGxhdGVyRGF0ZV8pICYmIGRpZmZlcmVuY2UgPT09IDEgJiYgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxKSB7CiAgICBpc0xhc3RNb250aE5vdEZ1bGwgPSBmYWxzZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbk1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29tcGFyZUFzYygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocygpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBkaWZmZXJlbmNlSW5Nb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5RdWFydGVycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5RdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSAvIDM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGRpZmZlcmVuY2VJblF1YXJ0ZXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxZTM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblNlY29uZHMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoKTsKICAgIGRpZmZlcmVuY2VJblNlY29uZHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gNzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5XZWVrcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGRpZmZlcmVuY2VJbldlZWtzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5ZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSk7CiAgbGF0ZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTsKICBlYXJsaWVyRGF0ZV8uc2V0RnVsbFllYXIoMTU4NCk7CiAgY29uc3QgcGFydGlhbCA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ247CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gK3BhcnRpYWwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkaWZmZXJlbmNlSW5ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycygpOwogICAgZGlmZmVyZW5jZUluWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanMKZnVuY3Rpb24gbm9ybWFsaXplSW50ZXJ2YWwoY29udGV4dDIsIGludGVydmFsMykgewogIGNvbnN0IFtzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcyhjb250ZXh0MiwgaW50ZXJ2YWwzLnN0YXJ0LCBpbnRlcnZhbDMuZW5kKTsKICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07Cn0KdmFyIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaERheU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaERheU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApOwogICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hEYXlPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hEYXlPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hEYXlPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaERheU9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hEYXlPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hIb3VyT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoSG91ck9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRNaW51dGVzKDAsIDAsIDApOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hIb3VyT2ZJbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoSG91ck9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaEhvdXJPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaEhvdXJPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoSG91ck9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBzdGFydC5zZXRTZWNvbmRzKDAsIDApOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGxldCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNaW51dGVPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hNaW51dGVPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNaW51dGVPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfYWRkTWludXRlcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoTWludXRlT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1pbnV0ZU9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1vbnRoT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoTW9udGhPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kMyA6IHN0YXJ0OwogIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgZGF0ZS5zZXREYXRlKDEpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNb250aE9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaE1vbnRoT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTW9udGhPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaE1vbnRoT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1vbnRoT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mUXVhcnRlci5qcwpmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCAxKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZRdWFydGVyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mUXVhcnRlcl9kZWZhdWx0ID0gc3RhcnRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFF1YXJ0ZXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hRdWFydGVyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydE9mUXVhcnRlcihzdGFydCkgOiArc3RhcnRPZlF1YXJ0ZXIoZW5kMyk7CiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IHN0YXJ0T2ZRdWFydGVyKGVuZDMpIDogc3RhcnRPZlF1YXJ0ZXIoc3RhcnQpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZSA9IGFkZFF1YXJ0ZXJzKGRhdGUsIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFF1YXJ0ZXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoUXVhcnRlck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRRdWFydGVycygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBlYWNoUXVhcnRlck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hRdWFydGVyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3Qgc3RhcnREYXRlV2VlayA9IHJldmVyc2VkID8gc3RhcnRPZldlZWsoZW5kMywgb3B0aW9ucykgOiBzdGFydE9mV2VlayhzdGFydCwgb3B0aW9ucyk7CiAgY29uc3QgZW5kRGF0ZVdlZWsgPSByZXZlcnNlZCA/IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKSA6IHN0YXJ0T2ZXZWVrKGVuZDMsIG9wdGlvbnMpOwogIHN0YXJ0RGF0ZVdlZWsuc2V0SG91cnMoMTUpOwogIGVuZERhdGVXZWVrLnNldEhvdXJzKDE1KTsKICBjb25zdCBlbmRUaW1lID0gK2VuZERhdGVXZWVrLmdldFRpbWUoKTsKICBsZXQgY3VycmVudERhdGUgPSBzdGFydERhdGVXZWVrOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtjdXJyZW50RGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwKTsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgY3VycmVudERhdGUpKTsKICAgIGN1cnJlbnREYXRlID0gYWRkV2Vla3MoY3VycmVudERhdGUsIHN0ZXApOwogICAgY3VycmVudERhdGUuc2V0SG91cnMoMTUpOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFdlZWtPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRXZWVrcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBlYWNoV2Vla09mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hXZWVrT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgY29uc3QgZGF0ZUludGVydmFsID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kOiBlbmQzIH0sIG9wdGlvbnMpOwogIGNvbnN0IHdlZWtlbmRzID0gW107CiAgbGV0IGluZGV4MiA9IDA7CiAgd2hpbGUgKGluZGV4MiA8IGRhdGVJbnRlcnZhbC5sZW5ndGgpIHsKICAgIGNvbnN0IGRhdGUgPSBkYXRlSW50ZXJ2YWxbaW5kZXgyKytdOwogICAgaWYgKGlzV2Vla2VuZChkYXRlKSkgd2Vla2VuZHMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgfQogIHJldHVybiB3ZWVrZW5kczsKfQp2YXIgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrZW5kT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoV2Vla2VuZE9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldERhdGUoMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNb250aC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZk1vbnRoX2RlZmF1bHQgPSBzdGFydE9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzCmZ1bmN0aW9uIGVhY2hXZWVrZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQ6IGVuZDMgfSwgb3B0aW9ucyk7Cn0KdmFyIGVhY2hXZWVrZW5kT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoV2Vla2VuZE9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBlYWNoV2Vla2VuZE9mTW9udGhfZGVmYXVsdCA9IGVhY2hXZWVrZW5kT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllYXIuanMKZnVuY3Rpb24gZW5kT2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgX2RhdGUuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZZZWFyX2RlZmF1bHQgPSBlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMKZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlXy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mWWVhcl9kZWZhdWx0ID0gc3RhcnRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mWWVhcihkYXRlLCBvcHRpb25zKTsKICByZXR1cm4gZWFjaFdlZWtlbmRPZkludGVydmFsKHsgc3RhcnQsIGVuZDogZW5kMyB9LCBvcHRpb25zKTsKfQp2YXIgZWFjaFdlZWtlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtlbmRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMiKCkgewogICAgaW5pdF9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZZZWFyKCk7CiAgICBlYWNoV2Vla2VuZE9mWWVhcl9kZWZhdWx0ID0gZWFjaFdlZWtlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFllYXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hZZWFyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGRhdGUuc2V0TW9udGgoMCwgMSk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFllYXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hZZWFyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoWWVhck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoWWVhck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hZZWFyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkRlY2FkZS5qcwpmdW5jdGlvbiBlbmRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUsIDExLCAzMSk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRlY2FkZV9kZWZhdWx0ID0gZW5kT2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZIb3VyLmpzCmZ1bmN0aW9uIGVuZE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkhvdXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mSG91cl9kZWZhdWx0ID0gZW5kT2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcwpmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpOwogIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gLTcgOiAwKSArIDYgLSAoZGF5IC0gd2Vla1N0YXJ0c09uKTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZXZWVrX2RlZmF1bHQgPSBlbmRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrLmpzCmZ1bmN0aW9uIGVuZE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGVuZE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgZW5kT2ZJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGVuZE9mSVNPV2Vla19kZWZhdWx0ID0gZW5kT2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gZW5kT2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgX2RhdGUgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLCBvcHRpb25zKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSAxKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgZW5kT2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gZW5kT2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBlbmRPZk1pbnV0ZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZk1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZNaW51dGVfZGVmYXVsdCA9IGVuZE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcwpmdW5jdGlvbiBlbmRPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZRdWFydGVyX2RlZmF1bHQgPSBlbmRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMKZnVuY3Rpb24gZW5kT2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mU2Vjb25kLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlNlY29uZF9kZWZhdWx0ID0gZW5kT2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb2RheS5qcwpmdW5jdGlvbiBlbmRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gZW5kT2ZEYXkoRGF0ZS5ub3coKSwgb3B0aW9ucyk7Cn0KdmFyIGVuZE9mVG9kYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGVuZE9mVG9kYXlfZGVmYXVsdCA9IGVuZE9mVG9kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcwpmdW5jdGlvbiBlbmRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRheSArIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gb3B0aW9ucz8uaW4gPyBvcHRpb25zLmluKGRhdGUpIDogZGF0ZTsKfQp2YXIgZW5kT2ZUb21vcnJvd19kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mVG9tb3Jyb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGVuZE9mVG9tb3Jyb3dfZGVmYXVsdCA9IGVuZE9mVG9tb3Jyb3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMKZnVuY3Rpb24gZW5kT2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKG5vdzIuZ2V0RnVsbFllYXIoKSwgbm93Mi5nZXRNb250aCgpLCBub3cyLmdldERhdGUoKSAtIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IGVuZE9mWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzCnZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSwgZm9ybWF0RGlzdGFuY2U7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzIigpIHsKICAgIGZvcm1hdERpc3RhbmNlTG9jYWxlID0gewogICAgICBsZXNzVGhhblhTZWNvbmRzOiB7CiAgICAgICAgb25lOiAibGVzcyB0aGFuIGEgc2Vjb25kIiwKICAgICAgICBvdGhlcjogImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgeFNlY29uZHM6IHsKICAgICAgICBvbmU6ICIxIHNlY29uZCIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgaGFsZkFNaW51dGU6ICJoYWxmIGEgbWludXRlIiwKICAgICAgbGVzc1RoYW5YTWludXRlczogewogICAgICAgIG9uZTogImxlc3MgdGhhbiBhIG1pbnV0ZSIsCiAgICAgICAgb3RoZXI6ICJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIHhNaW51dGVzOiB7CiAgICAgICAgb25lOiAiMSBtaW51dGUiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIGFib3V0WEhvdXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSBob3VyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeEhvdXJzOiB7CiAgICAgICAgb25lOiAiMSBob3VyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeERheXM6IHsKICAgICAgICBvbmU6ICIxIGRheSIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gZGF5cyIKICAgICAgfSwKICAgICAgYWJvdXRYV2Vla3M6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIHdlZWsiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICB4V2Vla3M6IHsKICAgICAgICBvbmU6ICIxIHdlZWsiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICBhYm91dFhNb250aHM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIG1vbnRoIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIHhNb250aHM6IHsKICAgICAgICBvbmU6ICIxIG1vbnRoIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIGFib3V0WFllYXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgeFllYXJzOiB7CiAgICAgICAgb25lOiAiMSB5ZWFyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgb3ZlclhZZWFyczogewogICAgICAgIG9uZTogIm92ZXIgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogIm92ZXIge3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICBhbG1vc3RYWWVhcnM6IHsKICAgICAgICBvbmU6ICJhbG1vc3QgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFsbW9zdCB7e2NvdW50fX0geWVhcnMiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQyLCBvcHRpb25zKSA9PiB7CiAgICAgIGxldCByZXN1bHQ7CiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07CiAgICAgIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXN1bHQgPSB0b2tlblZhbHVlOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgie3tjb3VudH19IiwgY291bnQyLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHsKICAgICAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHsKICAgICAgICAgIHJldHVybiAiaW4gIiArIHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCArICIgYWdvIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMKZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykgewogIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7CiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgIGNvbnN0IGZvcm1hdDIgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07CiAgICByZXR1cm4gZm9ybWF0MjsKICB9Owp9CnZhciBpbml0X2J1aWxkRm9ybWF0TG9uZ0ZuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzCnZhciBkYXRlRm9ybWF0cywgdGltZUZvcm1hdHMsIGRhdGVUaW1lRm9ybWF0cywgZm9ybWF0TG9uZzsKdmFyIGluaXRfZm9ybWF0TG9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzIigpIHsKICAgIGluaXRfYnVpbGRGb3JtYXRMb25nRm4oKTsKICAgIGRhdGVGb3JtYXRzID0gewogICAgICBmdWxsOiAiRUVFRSwgTU1NTSBkbywgeSIsCiAgICAgIGxvbmc6ICJNTU1NIGRvLCB5IiwKICAgICAgbWVkaXVtOiAiTU1NIGQsIHkiLAogICAgICBzaG9ydDogIk1NL2RkL3l5eXkiCiAgICB9OwogICAgdGltZUZvcm1hdHMgPSB7CiAgICAgIGZ1bGw6ICJoOm1tOnNzIGEgenp6eiIsCiAgICAgIGxvbmc6ICJoOm1tOnNzIGEgeiIsCiAgICAgIG1lZGl1bTogImg6bW06c3MgYSIsCiAgICAgIHNob3J0OiAiaDptbSBhIgogICAgfTsKICAgIGRhdGVUaW1lRm9ybWF0cyA9IHsKICAgICAgZnVsbDogInt7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLAogICAgICBsb25nOiAie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsCiAgICAgIG1lZGl1bTogInt7ZGF0ZX19LCB7e3RpbWV9fSIsCiAgICAgIHNob3J0OiAie3tkYXRlfX0sIHt7dGltZX19IgogICAgfTsKICAgIGZvcm1hdExvbmcgPSB7CiAgICAgIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHsKICAgICAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KSwKICAgICAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pLAogICAgICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcwp2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUsIGZvcm1hdFJlbGF0aXZlOwp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIoKSB7CiAgICBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHsKICAgICAgbGFzdFdlZWs6ICInbGFzdCcgZWVlZSAnYXQnIHAiLAogICAgICB5ZXN0ZXJkYXk6ICIneWVzdGVyZGF5IGF0JyBwIiwKICAgICAgdG9kYXk6ICIndG9kYXkgYXQnIHAiLAogICAgICB0b21vcnJvdzogIid0b21vcnJvdyBhdCcgcCIsCiAgICAgIG5leHRXZWVrOiAiZWVlZSAnYXQnIHAiLAogICAgICBvdGhlcjogIlAiCiAgICB9OwogICAgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzCmZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7CiAgcmV0dXJuICh2YWx1ZTIsIG9wdGlvbnMpID0+IHsKICAgIGNvbnN0IGNvbnRleHQyID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogInN0YW5kYWxvbmUiOwogICAgbGV0IHZhbHVlc0FycmF5OwogICAgaWYgKGNvbnRleHQyID09PSAiZm9ybWF0dGluZyIgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7CiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7CiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTsKICAgIH0KICAgIGNvbnN0IGluZGV4MiA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayh2YWx1ZTIpIDogdmFsdWUyOwogICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4Ml07CiAgfTsKfQp2YXIgaW5pdF9idWlsZExvY2FsaXplRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcwp2YXIgZXJhVmFsdWVzLCBxdWFydGVyVmFsdWVzLCBtb250aFZhbHVlcywgZGF5VmFsdWVzLCBkYXlQZXJpb2RWYWx1ZXMsIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsIG9yZGluYWxOdW1iZXIsIGxvY2FsaXplOwp2YXIgaW5pdF9sb2NhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcyIoKSB7CiAgICBpbml0X2J1aWxkTG9jYWxpemVGbigpOwogICAgZXJhVmFsdWVzID0gewogICAgICBuYXJyb3c6IFsiQiIsICJBIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIkJDIiwgIkFEIl0sCiAgICAgIHdpZGU6IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdCiAgICB9OwogICAgcXVhcnRlclZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIjEiLCAiMiIsICIzIiwgIjQiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiUTEiLCAiUTIiLCAiUTMiLCAiUTQiXSwKICAgICAgd2lkZTogWyIxc3QgcXVhcnRlciIsICIybmQgcXVhcnRlciIsICIzcmQgcXVhcnRlciIsICI0dGggcXVhcnRlciJdCiAgICB9OwogICAgbW9udGhWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJKIiwgIkYiLCAiTSIsICJBIiwgIk0iLCAiSiIsICJKIiwgIkEiLCAiUyIsICJPIiwgIk4iLCAiRCJdLAogICAgICBhYmJyZXZpYXRlZDogWwogICAgICAgICJKYW4iLAogICAgICAgICJGZWIiLAogICAgICAgICJNYXIiLAogICAgICAgICJBcHIiLAogICAgICAgICJNYXkiLAogICAgICAgICJKdW4iLAogICAgICAgICJKdWwiLAogICAgICAgICJBdWciLAogICAgICAgICJTZXAiLAogICAgICAgICJPY3QiLAogICAgICAgICJOb3YiLAogICAgICAgICJEZWMiCiAgICAgIF0sCiAgICAgIHdpZGU6IFsKICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgIkZlYnJ1YXJ5IiwKICAgICAgICAiTWFyY2giLAogICAgICAgICJBcHJpbCIsCiAgICAgICAgIk1heSIsCiAgICAgICAgIkp1bmUiLAogICAgICAgICJKdWx5IiwKICAgICAgICAiQXVndXN0IiwKICAgICAgICAiU2VwdGVtYmVyIiwKICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgIk5vdmVtYmVyIiwKICAgICAgICAiRGVjZW1iZXIiCiAgICAgIF0KICAgIH07CiAgICBkYXlWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJTIiwgIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIl0sCiAgICAgIHNob3J0OiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdLAogICAgICB3aWRlOiBbCiAgICAgICAgIlN1bmRheSIsCiAgICAgICAgIk1vbmRheSIsCiAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgIkZyaWRheSIsCiAgICAgICAgIlNhdHVyZGF5IgogICAgICBdCiAgICB9OwogICAgZGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJldmVuaW5nIiwKICAgICAgICBuaWdodDogIm5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAibW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJpbiB0aGUgbW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiaW4gdGhlIGFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImluIHRoZSBldmVuaW5nIiwKICAgICAgICBuaWdodDogImF0IG5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAiaW4gdGhlIG1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImluIHRoZSBhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJpbiB0aGUgZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJhdCBuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogImluIHRoZSBtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJpbiB0aGUgYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiaW4gdGhlIGV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAiYXQgbmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4gewogICAgICBjb25zdCBudW1iZXIyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsKICAgICAgY29uc3QgcmVtMTAwID0gbnVtYmVyMiAlIDEwMDsKICAgICAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7CiAgICAgICAgc3dpdGNoIChyZW0xMDAgJSAxMCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyMiArICJzdCI7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIyICsgIm5kIjsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuIG51bWJlcjIgKyAicmQiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVtYmVyMiArICJ0aCI7CiAgICB9OwogICAgbG9jYWxpemUgPSB7CiAgICAgIG9yZGluYWxOdW1iZXIsCiAgICAgIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGVyYVZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIgogICAgICB9KSwKICAgICAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIsCiAgICAgICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxCiAgICAgIH0pLAogICAgICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiCiAgICAgIH0pLAogICAgICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7CiAgICAgICAgdmFsdWVzOiBkYXlWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIiwKICAgICAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLAogICAgICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICJ3aWRlIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHsKICByZXR1cm4gKHN0cmluZzMsIG9wdGlvbnMgPSB7fSkgPT4gewogICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoOwogICAgY29uc3QgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07CiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZzMubWF0Y2gobWF0Y2hQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hSZXN1bHQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07CiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07CiAgICBjb25zdCBrZXkyID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleDIocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkgOiAoCiAgICAgIC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlCiAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkKICAgICk7CiAgICBsZXQgdmFsdWUyOwogICAgdmFsdWUyID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleTIpIDoga2V5MjsKICAgIHZhbHVlMiA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/ICgKICAgICAgLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGUKICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlMikKICAgICkgOiB2YWx1ZTI7CiAgICBjb25zdCByZXN0ID0gc3RyaW5nMy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7CiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUyLCByZXN0IH07CiAgfTsKfQpmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7CiAgZm9yIChjb25zdCBrZXkyIGluIG9iamVjdCkgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJbmRleDIoYXJyYXksIHByZWRpY2F0ZSkgewogIGZvciAobGV0IGtleTIgPSAwOyBrZXkyIDwgYXJyYXkubGVuZ3RoOyBrZXkyKyspIHsKICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2J1aWxkTWF0Y2hGbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7CiAgcmV0dXJuIChzdHJpbmczLCBvcHRpb25zID0ge30pID0+IHsKICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7CiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTsKICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7CiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGxldCB2YWx1ZTIgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07CiAgICB2YWx1ZTIgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUyKSA6IHZhbHVlMjsKICAgIGNvbnN0IHJlc3QgPSBzdHJpbmczLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTsKICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIHJlc3QgfTsKICB9Owp9CnZhciBpbml0X2J1aWxkTWF0Y2hQYXR0ZXJuRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbWF0Y2guanMKdmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sIG1hdGNoRXJhUGF0dGVybnMsIHBhcnNlRXJhUGF0dGVybnMsIG1hdGNoUXVhcnRlclBhdHRlcm5zLCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucywgbWF0Y2hNb250aFBhdHRlcm5zLCBwYXJzZU1vbnRoUGF0dGVybnMsIG1hdGNoRGF5UGF0dGVybnMsIHBhcnNlRGF5UGF0dGVybnMsIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsIG1hdGNoOwp2YXIgaW5pdF9tYXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5qcyIoKSB7CiAgICBpbml0X2J1aWxkTWF0Y2hGbigpOwogICAgaW5pdF9idWlsZE1hdGNoUGF0dGVybkZuKCk7CiAgICBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXGQrKSh0aHxzdHxuZHxyZCk/L2k7CiAgICBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xkKy9pOwogICAgbWF0Y2hFcmFQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihifGEpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksCiAgICAgIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaQogICAgfTsKICAgIHBhcnNlRXJhUGF0dGVybnMgPSB7CiAgICAgIGFueTogWy9eYi9pLCAvXihhfGMpL2ldCiAgICB9OwogICAgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogL15bMTIzNF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLAogICAgICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaQogICAgfTsKICAgIHBhcnNlUXVhcnRlclBhdHRlcm5zID0gewogICAgICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXQogICAgfTsKICAgIG1hdGNoTW9udGhQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXltqZm1hc29uZF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLAogICAgICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pCiAgICB9OwogICAgcGFyc2VNb250aFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IFsKICAgICAgICAvXmovaSwKICAgICAgICAvXmYvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXnMvaSwKICAgICAgICAvXm8vaSwKICAgICAgICAvXm4vaSwKICAgICAgICAvXmQvaQogICAgICBdLAogICAgICBhbnk6IFsKICAgICAgICAvXmphL2ksCiAgICAgICAgL15mL2ksCiAgICAgICAgL15tYXIvaSwKICAgICAgICAvXmFwL2ksCiAgICAgICAgL15tYXkvaSwKICAgICAgICAvXmp1bi9pLAogICAgICAgIC9eanVsL2ksCiAgICAgICAgL15hdS9pLAogICAgICAgIC9ecy9pLAogICAgICAgIC9eby9pLAogICAgICAgIC9ebi9pLAogICAgICAgIC9eZC9pCiAgICAgIF0KICAgIH07CiAgICBtYXRjaERheVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eW3NtdHdmXS9pLAogICAgICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksCiAgICAgIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pCiAgICB9OwogICAgcGFyc2VEYXlQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLAogICAgICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldCiAgICB9OwogICAgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksCiAgICAgIGFueTogL14oW2FwXVwuP1xzP21cLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2kKICAgIH07CiAgICBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0gewogICAgICBhbnk6IHsKICAgICAgICBhbTogL15hL2ksCiAgICAgICAgcG06IC9ecC9pLAogICAgICAgIG1pZG5pZ2h0OiAvXm1pL2ksCiAgICAgICAgbm9vbjogL15uby9pLAogICAgICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksCiAgICAgICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksCiAgICAgICAgZXZlbmluZzogL2V2ZW5pbmcvaSwKICAgICAgICBuaWdodDogL25pZ2h0L2kKICAgICAgfQogICAgfTsKICAgIG1hdGNoID0gewogICAgICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHsKICAgICAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sCiAgICAgICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZTIpID0+IHBhcnNlSW50KHZhbHVlMiwgMTApCiAgICAgIH0pLAogICAgICBlcmE6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiCiAgICAgIH0pLAogICAgICBxdWFydGVyOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleDIpID0+IGluZGV4MiArIDEKICAgICAgfSksCiAgICAgIG1vbnRoOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheTogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAiYW55IiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMuanMKdmFyIGVuVVMsIGVuX1VTX2RlZmF1bHQ7CnZhciBpbml0X2VuX1VTID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy5qcyIoKSB7CiAgICBpbml0X2Zvcm1hdERpc3RhbmNlKCk7CiAgICBpbml0X2Zvcm1hdExvbmcoKTsKICAgIGluaXRfZm9ybWF0UmVsYXRpdmUoKTsKICAgIGluaXRfbG9jYWxpemUoKTsKICAgIGluaXRfbWF0Y2goKTsKICAgIGVuVVMgPSB7CiAgICAgIGNvZGU6ICJlbi1VUyIsCiAgICAgIGZvcm1hdERpc3RhbmNlLAogICAgICBmb3JtYXRMb25nLAogICAgICBmb3JtYXRSZWxhdGl2ZSwKICAgICAgbG9jYWxpemUsCiAgICAgIG1hdGNoLAogICAgICBvcHRpb25zOiB7CiAgICAgICAgd2Vla1N0YXJ0c09uOiAwLAogICAgICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMQogICAgICB9CiAgICB9OwogICAgZW5fVVNfZGVmYXVsdCA9IGVuVVM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzCnZhciBpbml0X2RlZmF1bHRMb2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzIigpIHsKICAgIGluaXRfZW5fVVMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlPZlllYXIuanMKZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhfZGF0ZSwgc3RhcnRPZlllYXIoX2RhdGUpKTsKICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTsKICByZXR1cm4gZGF5T2ZZZWFyOwp9CnZhciBnZXREYXlPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheU9mWWVhcl9kZWZhdWx0ID0gZ2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWsuanMKZnVuY3Rpb24gZ2V0SVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09XZWVrX2RlZmF1bHQgPSBnZXRJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gMTsKICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7CiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7CiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7CiAgICByZXR1cm4geWVhciArIDE7CiAgfSBlbHNlIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZUaGlzWWVhcikgewogICAgcmV0dXJuIHllYXI7CiAgfSBlbHNlIHsKICAgIHJldHVybiB5ZWFyIC0gMTsKICB9Cn0KdmFyIGdldFdlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtZZWFyX2RlZmF1bHQgPSBnZXRXZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZldlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHllYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZldlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIHN0YXJ0T2ZXZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZldlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWsuanMKZnVuY3Rpb24gZ2V0V2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRXZWVrX2RlZmF1bHQgPSBnZXRXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzCmZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIyLCB0YXJnZXRMZW5ndGgpIHsKICBjb25zdCBzaWduID0gbnVtYmVyMiA8IDAgPyAiLSIgOiAiIjsKICBjb25zdCBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgIjAiKTsKICByZXR1cm4gc2lnbiArIG91dHB1dDsKfQp2YXIgaW5pdF9hZGRMZWFkaW5nWmVyb3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy5qcwp2YXIgbGlnaHRGb3JtYXR0ZXJzOwp2YXIgaW5pdF9saWdodEZvcm1hdHRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBsaWdodEZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIFllYXIKICAgICAgeShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICJ5eSIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gTW9udGgKICAgICAgTShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHJldHVybiB0b2tlbiA9PT0gIk0iID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0SG91cnMoKSAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgIGNhc2UgImFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gImFtIiA/ICJhLm0uIiA6ICJwLm0uIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGgoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBIb3VyIFswLTIzXQogICAgICBIKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbnV0ZQogICAgICBtKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gU2Vjb25kCiAgICAgIHMoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0U2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUyhkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoOwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpOwogICAgICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgICAgIG1pbGxpc2Vjb25kczIgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzCmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkZWxpbWl0ZXIgPSAiIikgewogIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gIi0iIDogIisiOwogIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKTsKICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7CiAgaWYgKG1pbnV0ZXMgPT09IDApIHsKICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTsKICB9CiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRlbGltaXRlcikgewogIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkgewogICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAiLSIgOiAiKyI7CiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpOwogIH0KICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gIiIpIHsKICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICItIiA6ICIrIjsKICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTsKICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTsKICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlczsKfQp2YXIgZGF5UGVyaW9kRW51bSwgZm9ybWF0dGVyczsKdmFyIGluaXRfZm9ybWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfZ2V0RGF5T2ZZZWFyKCk7CiAgICBpbml0X2dldElTT1dlZWsoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBkYXlQZXJpb2RFbnVtID0gewogICAgICBhbTogImFtIiwKICAgICAgcG06ICJwbSIsCiAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICBub29uOiAibm9vbiIsCiAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICBuaWdodDogIm5pZ2h0IgogICAgfTsKICAgIGZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIEVyYQogICAgICBHOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEFELCBCQwogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICBjYXNlICJHR0ciOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSk7CiAgICAgICAgICAvLyBBLCBCCiAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogIm5hcnJvdyIgfSk7CiAgICAgICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdAogICAgICAgICAgY2FzZSAiR0dHRyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJ3aWRlIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFllYXIKICAgICAgeTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInlvIikgewogICAgICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICBZOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICAgICAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIllZIikgewogICAgICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7CiAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbiA9PT0gIllvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIKICAgICAgUjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgogICAgICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczoKICAgICAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHwKICAgICAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXwKICAgICAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHwKICAgICAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHwKICAgICAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHwKICAgICAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLAogICAgICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuCiAgICAgIHU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIFF1YXJ0ZXIKICAgICAgUTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7CiAgICAgICAgICAvLyAwMSwgMDIsIDAzLCAwNAogICAgICAgICAgY2FzZSAiUVEiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoCiAgICAgICAgICBjYXNlICJRbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6ICJxdWFydGVyIiB9KTsKICAgICAgICAgIC8vIFExLCBRMiwgUTMsIFE0CiAgICAgICAgICBjYXNlICJRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKQogICAgICAgICAgY2FzZSAiUVFRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLgogICAgICAgICAgY2FzZSAiUVFRUSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlcgogICAgICBxOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTsKICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0CiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBNb250aAogICAgICBNOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJNbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogIm1vbnRoIiB9KTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbW9udGgKICAgICAgTDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkwiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTG8iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6ICJtb250aCIgfSk7CiAgICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWMKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTExMTCI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIHdlZWsgb2YgeWVhcgogICAgICB3OiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRva2VuID09PSAid28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWsgb2YgeWVhcgogICAgICBJOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7CiAgICAgICAgaWYgKHRva2VuID09PSAiSW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAiZG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogImRhdGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgeWVhcgogICAgICBEOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpOwogICAgICAgIGlmICh0b2tlbiA9PT0gIkRvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiAiZGF5T2ZZZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIERheSBvZiB3ZWVrCiAgICAgIEU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJFRSI6CiAgICAgICAgICBjYXNlICJFRUUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiRUVFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIGRheSBvZiB3ZWVrCiAgICAgIGU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7CiAgICAgICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlCiAgICAgICAgICBjYXNlICJlZSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJlbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImVlZWVlIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJlZWVlIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsKICAgICAgYzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNzsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKQogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspOwogICAgICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZQogICAgICAgICAgY2FzZSAiY2MiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJjbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJjY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSVNPIGRheSBvZiB3ZWVrCiAgICAgIGk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMgogICAgICAgICAgY2FzZSAiaSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTsKICAgICAgICAgIC8vIDAyCiAgICAgICAgICBjYXNlICJpaSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMm5kCiAgICAgICAgICBjYXNlICJpbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJpaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJpaWlpIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgY2FzZSAiYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uCiAgICAgIGI6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlOwogICAgICAgIGlmIChob3VycyA9PT0gMTIpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICBjYXNlICJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYmJiYmIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiYiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHQKICAgICAgQjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7CiAgICAgICAgaWYgKGhvdXJzID49IDE3KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJobyIpIHsKICAgICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyOwogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMC0yM10KICAgICAgSDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIkhvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzAtMTFdCiAgICAgIEs6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIktvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0yNF0KICAgICAgazogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7CiAgICAgICAgaWYgKHRva2VuID09PSAia28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaW51dGUKICAgICAgbTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIm1vIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBTZWNvbmQKICAgICAgczogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInNvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6ICJzZWNvbmQiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKQogICAgICBYOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7CiAgICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIloiOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgCiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYIjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGAKICAgICAgICAgIGNhc2UgIlhYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYWCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpCiAgICAgIHg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgCiAgICAgICAgICBjYXNlICJ4eHh4IjoKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGAKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgIGNhc2UgInh4eCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChHTVQpCiAgICAgIE86IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAiTyI6CiAgICAgICAgICBjYXNlICJPTyI6CiAgICAgICAgICBjYXNlICJPT08iOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAiT09PTyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pCiAgICAgIHo6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICBjYXNlICJ6eiI6CiAgICAgICAgICBjYXNlICJ6enoiOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAienp6eiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFNlY29uZHMgdGltZXN0YW1wCiAgICAgIHQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gTWF0aC50cnVuYygrZGF0ZSAvIDFlMyk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wCiAgICAgIFQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzCnZhciBkYXRlTG9uZ0Zvcm1hdHRlciwgdGltZUxvbmdGb3JtYXR0ZXIsIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciwgbG9uZ0Zvcm1hdHRlcnM7CnZhciBpbml0X2xvbmdGb3JtYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIHN3aXRjaCAocGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogInNob3J0IiB9KTsKICAgICAgICBjYXNlICJQUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICBjYXNlICJQUFAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAiZnVsbCIgfSk7CiAgICAgIH0KICAgIH07CiAgICB0aW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nMikgPT4gewogICAgICBzd2l0Y2ggKHBhdHRlcm4pIHsKICAgICAgICBjYXNlICJwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJzaG9ydCIgfSk7CiAgICAgICAgY2FzZSAicHAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogIm1lZGl1bSIgfSk7CiAgICAgICAgY2FzZSAicHBwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICBjYXNlICJwcHBwIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogImZ1bGwiIH0pOwogICAgICB9CiAgICB9OwogICAgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107CiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07CiAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07CiAgICAgIGlmICghdGltZVBhdHRlcm4pIHsKICAgICAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZzIpOwogICAgICB9CiAgICAgIGxldCBkYXRlVGltZUZvcm1hdDsKICAgICAgc3dpdGNoIChkYXRlUGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAic2hvcnQiIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJmdWxsIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCJ7e2RhdGV9fSIsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nMikpLnJlcGxhY2UoInt7dGltZX19IiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcyKSk7CiAgICB9OwogICAgbG9uZ0Zvcm1hdHRlcnMgPSB7CiAgICAgIHA6IHRpbWVMb25nRm9ybWF0dGVyLAogICAgICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMKZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikgewogIHJldHVybiBkYXlPZlllYXJUb2tlblJFLnRlc3QodG9rZW4pOwp9CmZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikgewogIHJldHVybiB3ZWVrWWVhclRva2VuUkUudGVzdCh0b2tlbik7Cn0KZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0MiwgaW5wdXQpIHsKICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdDIsIGlucHV0KTsKICBjb25zb2xlLndhcm4oX21lc3NhZ2UpOwogIGlmICh0aHJvd1Rva2Vucy5pbmNsdWRlcyh0b2tlbikpIHRocm93IG5ldyBSYW5nZUVycm9yKF9tZXNzYWdlKTsKfQpmdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQyLCBpbnB1dCkgewogIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gIlkiID8gInllYXJzIiA6ICJkYXlzIG9mIHRoZSBtb250aCI7CiAgcmV0dXJuIGBVc2UgXGAke3Rva2VuLnRvTG93ZXJDYXNlKCl9XGAgaW5zdGVhZCBvZiBcYCR7dG9rZW59XGAgKGluIFxgJHtmb3JtYXQyfVxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcYCR7aW5wdXR9XGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGA7Cn0KdmFyIGRheU9mWWVhclRva2VuUkUsIHdlZWtZZWFyVG9rZW5SRSwgdGhyb3dUb2tlbnM7CnZhciBpbml0X3Byb3RlY3RlZFRva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL3Byb3RlY3RlZFRva2Vucy5qcyIoKSB7CiAgICBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvOwogICAgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvOwogICAgdGhyb3dUb2tlbnMgPSBbIkQiLCAiREQiLCAiWVkiLCAiWVlZWSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5qcwpmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJwIiB8fCBmaXJzdENoYXJhY3RlciA9PT0gIlAiKSB7CiAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07CiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpOwogICAgfQogICAgcmV0dXJuIHN1YnN0cmluZzsKICB9KS5qb2luKCIiKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgaWYgKHN1YnN0cmluZyA9PT0gIicnIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6ICInIiB9OwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICInIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpIH07CiAgICB9CiAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHsKICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9OwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07CiAgfSk7CiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHsKICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTsKICB9CiAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IHsKICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSwKICAgIHdlZWtTdGFydHNPbiwKICAgIGxvY2FsZQogIH07CiAgcmV0dXJuIHBhcnRzLm1hcCgocGFydCkgPT4gewogICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlOwogICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlOwogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB8fCAhb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gZm9ybWF0dGVyc1t0b2tlblswXV07CiAgICByZXR1cm4gZm9ybWF0dGVyMihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTsKICBpZiAoIW1hdGNoZWQpIHsKICAgIHJldHVybiBpbnB1dDsKICB9CiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgIiciKTsKfQp2YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAsIGVzY2FwZWRTdHJpbmdSZWdFeHAsIGRvdWJsZVF1b3RlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCwgZm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2Zvcm1hdHRlcnMoKTsKICAgIGluaXRfbG9uZ0Zvcm1hdHRlcnMoKTsKICAgIGluaXRfcHJvdGVjdGVkVG9rZW5zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87CiAgICBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vOwogICAgZm9ybWF0X2RlZmF1bHQgPSBmb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2UuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgbWludXRlc0luQWxtb3N0VHdvRGF5cyA9IDI1MjA7CiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7CiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgewogICAgYWRkU3VmZml4OiBvcHRpb25zPy5hZGRTdWZmaXgsCiAgICBjb21wYXJpc29uCiAgfSk7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgLi4uY29tcGFyaXNvbiA+IDAgPyBbZWFybGllckRhdGUsIGxhdGVyRGF0ZV0gOiBbbGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV0KICApOwogIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgY29uc3Qgb2Zmc2V0SW5TZWNvbmRzID0gKGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXykpIC8gMWUzOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLnJvdW5kKChzZWNvbmRzIC0gb2Zmc2V0SW5TZWNvbmRzKSAvIDYwKTsKICBsZXQgbW9udGhzMjsKICBpZiAobWludXRlcyA8IDIpIHsKICAgIGlmIChvcHRpb25zPy5pbmNsdWRlU2Vjb25kcykgewogICAgICBpZiAoc2Vjb25kcyA8IDUpIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgNSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMTApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgMTAsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDIwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YU2Vjb25kcyIsIDIwLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA0MCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImhhbGZBTWludXRlIiwgMCwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChtaW51dGVzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YTWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgNDUpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA5MCkgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgY29uc3QgaG91cnMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyA2MCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhIb3VycyIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCkgewogICAgY29uc3QgZGF5czIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5EYXkpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieERheXMiLCBkYXlzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCAqIDIpIHsKICAgIG1vbnRoczIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhNb250aHMiLCBtb250aHMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0KICBtb250aHMyID0gZGlmZmVyZW5jZUluTW9udGhzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgaWYgKG1vbnRoczIgPCAxMikgewogICAgY29uc3QgbmVhcmVzdE1vbnRoID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIsIG5lYXJlc3RNb250aCwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgbW9udGhzU2luY2VTdGFydE9mWWVhciA9IG1vbnRoczIgJSAxMjsKICAgIGNvbnN0IHllYXJzID0gTWF0aC50cnVuYyhtb250aHMyIC8gMTIpOwogICAgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCAzKSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgICB9IGVsc2UgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCA5KSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoIm92ZXJYWWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFsbW9zdFhZZWFycyIsIHllYXJzICsgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgIH0KICB9Cn0KdmFyIGZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgZm9ybWF0RGlzdGFuY2VfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVN0cmljdChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpOwogIGlmIChpc05hTihjb21wYXJpc29uKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7CiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCwKICAgIGNvbXBhcmlzb24KICB9KTsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICAuLi5jb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXQogICk7CiAgY29uc3Qgcm91bmRpbmdNZXRob2QgPSBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiKTsKICBjb25zdCBtaWxsaXNlY29uZHMyID0gZWFybGllckRhdGVfLmdldFRpbWUoKSAtIGxhdGVyRGF0ZV8uZ2V0VGltZSgpOwogIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMyIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJEYXRlXykgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZV8pOwogIGNvbnN0IGRzdE5vcm1hbGl6ZWRNaW51dGVzID0gKG1pbGxpc2Vjb25kczIgLSB0aW1lem9uZU9mZnNldCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICBjb25zdCBkZWZhdWx0VW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgbGV0IHVuaXQ7CiAgaWYgKCFkZWZhdWx0VW5pdCkgewogICAgaWYgKG1pbnV0ZXMgPCAxKSB7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IDYwKSB7CiAgICAgIHVuaXQgPSAibWludXRlIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgICB1bml0ID0gImhvdXIiOwogICAgfSBlbHNlIGlmIChkc3ROb3JtYWxpemVkTWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPCBtaW51dGVzSW5ZZWFyKSB7CiAgICAgIHVuaXQgPSAibW9udGgiOwogICAgfSBlbHNlIHsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IGRlZmF1bHRVbml0OwogIH0KICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgIGNvbnN0IHNlY29uZHMgPSByb3VuZGluZ01ldGhvZChtaWxsaXNlY29uZHMyIC8gMWUzKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIiwgc2Vjb25kcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJtaW51dGUiKSB7CiAgICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCByb3VuZGVkTWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgY29uc3QgaG91cnMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gNjApOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieEhvdXJzIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgY29uc3QgZGF5czIgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJbkRheSk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsIGRheXMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgY29uc3QgbW9udGhzMiA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIG1vbnRoczIgPT09IDEyICYmIGRlZmF1bHRVbml0ICE9PSAibW9udGgiID8gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpIDogbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIiwgbW9udGhzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgeWVhcnMgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJblllYXIpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfQp9CnZhciBmb3JtYXREaXN0YW5jZVN0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVN0cmljdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZm9ybWF0RGlzdGFuY2VTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlU3RyaWN0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2VUb05vdyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlMihkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpOwp9CnZhciBmb3JtYXREaXN0YW5jZVRvTm93X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlVG9Ob3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZm9ybWF0RGlzdGFuY2VTdHJpY3QoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpLCBvcHRpb25zKTsKfQp2YXIgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3Q7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMKZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb24sIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyBkZWZhdWx0Rm9ybWF0OwogIGNvbnN0IHplcm8gPSBvcHRpb25zPy56ZXJvID8/IGZhbHNlOwogIGNvbnN0IGRlbGltaXRlciA9IG9wdGlvbnM/LmRlbGltaXRlciA/PyAiICI7CiAgaWYgKCFsb2NhbGUuZm9ybWF0RGlzdGFuY2UpIHsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Mi5yZWR1Y2UoKGFjYywgdW5pdCkgPT4gewogICAgY29uc3QgdG9rZW4gPSBgeCR7dW5pdC5yZXBsYWNlKC8oXi4pLywgKG02KSA9PiBtNi50b1VwcGVyQ2FzZSgpKX1gOwogICAgY29uc3QgdmFsdWUyID0gZHVyYXRpb25bdW5pdF07CiAgICBpZiAodmFsdWUyICE9PSB2b2lkIDAgJiYgKHplcm8gfHwgZHVyYXRpb25bdW5pdF0pKSB7CiAgICAgIHJldHVybiBhY2MuY29uY2F0KGxvY2FsZS5mb3JtYXREaXN0YW5jZSh0b2tlbiwgdmFsdWUyKSk7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKS5qb2luKGRlbGltaXRlcik7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZGVmYXVsdEZvcm1hdCwgZm9ybWF0RHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBkZWZhdWx0Rm9ybWF0ID0gWwogICAgICAieWVhcnMiLAogICAgICAibW9udGhzIiwKICAgICAgIndlZWtzIiwKICAgICAgImRheXMiLAogICAgICAiaG91cnMiLAogICAgICAibWludXRlcyIsCiAgICAgICJzZWNvbmRzIgogICAgXTsKICAgIGZvcm1hdER1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXREdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMKZnVuY3Rpb24gZm9ybWF0SVNPKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyAiZXh0ZW5kZWQiOwogIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gImNvbXBsZXRlIjsKICBsZXQgcmVzdWx0ID0gIiI7CiAgbGV0IHR6T2Zmc2V0ID0gIiI7CiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiLSIgOiAiIjsKICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICI6IiA6ICIiOwogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gInRpbWUiKSB7CiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICAgIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7CiAgICByZXN1bHQgPSBgJHt5ZWFyfSR7ZGF0ZURlbGltaXRlcn0ke21vbnRofSR7ZGF0ZURlbGltaXRlcn0ke2RheX1gOwogIH0KICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJkYXRlIikgewogICAgY29uc3Qgb2Zmc2V0ID0gZGF0ZV8uZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgIGlmIChvZmZzZXQgIT09IDApIHsKICAgICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogICAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7CiAgICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPCAwID8gIisiIDogIi0iOwogICAgICB0ek9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogICAgfSBlbHNlIHsKICAgICAgdHpPZmZzZXQgPSAiWiI7CiAgICB9CiAgICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEhvdXJzKCksIDIpOwogICAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7CiAgICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICAgIGNvbnN0IHNlcGFyYXRvciA9IHJlc3VsdCA9PT0gIiIgPyAiIiA6ICJUIjsKICAgIGNvbnN0IHRpbWUgPSBbaG91ciwgbWludXRlLCBzZWNvbmRdLmpvaW4odGltZURlbGltaXRlcik7CiAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtzZXBhcmF0b3J9JHt0aW1lfSR7dHpPZmZzZXR9YDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZm9ybWF0SVNPX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU09fZGVmYXVsdCA9IGZvcm1hdElTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzCmZ1bmN0aW9uIGZvcm1hdElTTzkwNzUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZvcm1hdDIgPSBvcHRpb25zPy5mb3JtYXQgPz8gImV4dGVuZGVkIjsKICBjb25zdCByZXByZXNlbnRhdGlvbiA9IG9wdGlvbnM/LnJlcHJlc2VudGF0aW9uID8/ICJjb21wbGV0ZSI7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGNvbnN0IGRhdGVEZWxpbWl0ZXIgPSBmb3JtYXQyID09PSAiZXh0ZW5kZWQiID8gIi0iIDogIiI7CiAgY29uc3QgdGltZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiOiIgOiAiIjsKICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJ0aW1lIikgewogICAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7CiAgICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgICBjb25zdCB5ZWFyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEZ1bGxZZWFyKCksIDQpOwogICAgcmVzdWx0ID0gYCR7eWVhcn0ke2RhdGVEZWxpbWl0ZXJ9JHttb250aH0ke2RhdGVEZWxpbWl0ZXJ9JHtkYXl9YDsKICB9CiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSAiZGF0ZSIpIHsKICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7CiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICAgIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSAiIiA/ICIiIDogIiAiOwogICAgcmVzdWx0ID0gYCR7cmVzdWx0fSR7c2VwYXJhdG9yfSR7aG91cn0ke3RpbWVEZWxpbWl0ZXJ9JHttaW51dGV9JHt0aW1lRGVsaW1pdGVyfSR7c2Vjb25kfWA7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGZvcm1hdElTTzkwNzVfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPOTA3NSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU085MDc1X2RlZmF1bHQgPSBmb3JtYXRJU085MDc1OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGZvcm1hdElTT0R1cmF0aW9uKGR1cmF0aW9uKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgcmV0dXJuIGBQJHt5ZWFyc31ZJHttb250aHMyfU0ke2RheXMyfURUJHtob3Vyc31IJHttaW51dGVzfU0ke3NlY29uZHN9U2A7Cn0KdmFyIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTT0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzIigpIHsKICAgIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXRJU09EdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzCmZ1bmN0aW9uIGZvcm1hdFJGQzMzMzkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gb3B0aW9ucz8uZnJhY3Rpb25EaWdpdHMgPz8gMDsKICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTsKICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICBsZXQgZnJhY3Rpb25hbFNlY29uZCA9ICIiOwogIGlmIChmcmFjdGlvbkRpZ2l0cyA+IDApIHsKICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKTsKICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgbWlsbGlzZWNvbmRzMiAqIE1hdGgucG93KDEwLCBmcmFjdGlvbkRpZ2l0cyAtIDMpCiAgICApOwogICAgZnJhY3Rpb25hbFNlY29uZCA9ICIuIiArIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgZnJhY3Rpb25EaWdpdHMpOwogIH0KICBsZXQgb2Zmc2V0ID0gIiI7CiAgY29uc3QgdHpPZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpOwogIGlmICh0ek9mZnNldCAhPT0gMCkgewogICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyh0ek9mZnNldCk7CiAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgY29uc3QgbWludXRlT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKGFic29sdXRlT2Zmc2V0ICUgNjAsIDIpOwogICAgY29uc3Qgc2lnbiA9IHR6T2Zmc2V0IDwgMCA/ICIrIiA6ICItIjsKICAgIG9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSAiWiI7CiAgfQogIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9JHtmcmFjdGlvbmFsU2Vjb25kfSR7b2Zmc2V0fWA7Cn0KdmFyIGZvcm1hdFJGQzMzMzlfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0UkZDMzMzOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRSRkMzMzM5X2RlZmF1bHQgPSBmb3JtYXRSRkMzMzM5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzcyMzEuanMKZnVuY3Rpb24gZm9ybWF0UkZDNzIzMShkYXRlKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKF9kYXRlKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBkYXlOYW1lID0gZGF5c1tfZGF0ZS5nZXRVVENEYXkoKV07CiAgY29uc3QgZGF5T2ZNb250aCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENEYXRlKCksIDIpOwogIGNvbnN0IG1vbnRoTmFtZSA9IG1vbnRoc1tfZGF0ZS5nZXRVVENNb250aCgpXTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0VVRDRnVsbFllYXIoKTsKICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ0hvdXJzKCksIDIpOwogIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENNaW51dGVzKCksIDIpOwogIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpOwogIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXlPZk1vbnRofSAke21vbnRoTmFtZX0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYDsKfQp2YXIgZGF5cywgbW9udGhzLCBmb3JtYXRSRkM3MjMxX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdFJGQzcyMzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UkZDNzIzMS5qcyIoKSB7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF9pc1ZhbGlkKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGF5cyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il07CiAgICBtb250aHMgPSBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CiAgICBmb3JtYXRSRkM3MjMxX2RlZmF1bHQgPSBmb3JtYXRSRkM3MjMxOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJlbGF0aXZlLmpzCmZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlMihkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlXywgYmFzZURhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBkYXRlLCBiYXNlRGF0ZSk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZV8sIGJhc2VEYXRlXyk7CiAgaWYgKGlzTmFOKGRpZmYpKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGxldCB0b2tlbjsKICBpZiAoZGlmZiA8IC02KSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfSBlbHNlIGlmIChkaWZmIDwgLTEpIHsKICAgIHRva2VuID0gImxhc3RXZWVrIjsKICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7CiAgICB0b2tlbiA9ICJ5ZXN0ZXJkYXkiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDEpIHsKICAgIHRva2VuID0gInRvZGF5IjsKICB9IGVsc2UgaWYgKGRpZmYgPCAyKSB7CiAgICB0b2tlbiA9ICJ0b21vcnJvdyI7CiAgfSBlbHNlIGlmIChkaWZmIDwgNykgewogICAgdG9rZW4gPSAibmV4dFdlZWsiOwogIH0gZWxzZSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfQogIGNvbnN0IGZvcm1hdFN0ciA9IGxvY2FsZS5mb3JtYXRSZWxhdGl2ZSh0b2tlbiwgZGF0ZV8sIGJhc2VEYXRlXywgewogICAgbG9jYWxlLAogICAgd2Vla1N0YXJ0c09uCiAgfSk7CiAgcmV0dXJuIGZvcm1hdChkYXRlXywgZm9ybWF0U3RyLCB7IGxvY2FsZSwgd2Vla1N0YXJ0c09uIH0pOwp9CnZhciBmb3JtYXRSZWxhdGl2ZV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9mb3JtYXQoKTsKICAgIGZvcm1hdFJlbGF0aXZlX2RlZmF1bHQgPSBmb3JtYXRSZWxhdGl2ZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZnJvbVVuaXhUaW1lLmpzCmZ1bmN0aW9uIGZyb21Vbml4VGltZSh1bml4VGltZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUodW5peFRpbWUgKiAxZTMsIG9wdGlvbnM/LmluKTsKfQp2YXIgZnJvbVVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2Zyb21Vbml4VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGZyb21Vbml4VGltZV9kZWZhdWx0ID0gZnJvbVVuaXhUaW1lOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERhdGUuanMKZnVuY3Rpb24gZ2V0RGF0ZShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF0ZSgpOwp9CnZhciBnZXREYXRlX2RlZmF1bHQ7CnZhciBpbml0X2dldERhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF0ZV9kZWZhdWx0ID0gZ2V0RGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMKZnVuY3Rpb24gZ2V0RGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTsKfQp2YXIgZ2V0RGF5X2RlZmF1bHQ7CnZhciBpbml0X2dldERheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheV9kZWZhdWx0ID0gZ2V0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzCmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGhJbmRleCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbGFzdERheU9mTW9udGgyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgbGFzdERheU9mTW9udGgyLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoSW5kZXggKyAxLCAwKTsKICBsYXN0RGF5T2ZNb250aDIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoMi5nZXREYXRlKCk7Cn0KdmFyIGdldERheXNJbk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheXNJbk1vbnRoX2RlZmF1bHQgPSBnZXREYXlzSW5Nb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzCmZ1bmN0aW9uIGlzTGVhcFllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CnZhciBpc0xlYXBZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzTGVhcFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNMZWFwWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNMZWFwWWVhcl9kZWZhdWx0ID0gaXNMZWFwWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlzSW5ZZWFyLmpzCmZ1bmN0aW9uIGdldERheXNJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoTnVtYmVyLmlzTmFOKCtfZGF0ZSkpIHJldHVybiBOYU47CiAgcmV0dXJuIGlzTGVhcFllYXIoX2RhdGUpID8gMzY2IDogMzY1Owp9CnZhciBnZXREYXlzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJblllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luWWVhci5qcyIoKSB7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREYXlzSW5ZZWFyX2RlZmF1bHQgPSBnZXREYXlzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcwpmdW5jdGlvbiBnZXREZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICByZXR1cm4gZGVjYWRlOwp9CnZhciBnZXREZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGVjYWRlX2RlZmF1bHQgPSBnZXREZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMKZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMyKCkgewogIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXREZWZhdWx0T3B0aW9ucygpKTsKfQp2YXIgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVmYXVsdE9wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdCA9IGdldERlZmF1bHRPcHRpb25zMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRIb3Vycy5qcwpmdW5jdGlvbiBnZXRIb3VycyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0SG91cnMoKTsKfQp2YXIgZ2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldEhvdXJzX2RlZmF1bHQgPSBnZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09EYXkuanMKZnVuY3Rpb24gZ2V0SVNPRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5Owp9CnZhciBnZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT0RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPRGF5X2RlZmF1bHQgPSBnZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla3NJblllYXIuanMKZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IG5leHRZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGFkZFdlZWtzKHRoaXNZZWFyLCA2MCkpOwogIGNvbnN0IGRpZmYgPSArbmV4dFllYXIgLSArdGhpc1llYXI7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGdldElTT1dlZWtzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWtzSW5ZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtzSW5ZZWFyLmpzIigpIHsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrWWVhcigpOwogICAgZ2V0SVNPV2Vla3NJblllYXJfZGVmYXVsdCA9IGdldElTT1dlZWtzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0TWlsbGlzZWNvbmRzKCk7Cn0KdmFyIGdldE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNaWxsaXNlY29uZHNfZGVmYXVsdCA9IGdldE1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNaW51dGVzLmpzCmZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1pbnV0ZXMoKTsKfQp2YXIgZ2V0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1pbnV0ZXNfZGVmYXVsdCA9IGdldE1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TW9udGguanMKZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1vbnRoKCk7Cn0KdmFyIGdldE1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldE1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNb250aF9kZWZhdWx0ID0gZ2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMKZnVuY3Rpb24gZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMoaW50ZXJ2YWxMZWZ0LCBpbnRlcnZhbFJpZ2h0KSB7CiAgY29uc3QgW2xlZnRTdGFydCwgbGVmdEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCksCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5lbmQpCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0LCByaWdodEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuc3RhcnQpLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCkKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgaXNPdmVybGFwcGluZyA9IGxlZnRTdGFydCA8IHJpZ2h0RW5kICYmIHJpZ2h0U3RhcnQgPCBsZWZ0RW5kOwogIGlmICghaXNPdmVybGFwcGluZykgcmV0dXJuIDA7CiAgY29uc3Qgb3ZlcmxhcExlZnQgPSByaWdodFN0YXJ0IDwgbGVmdFN0YXJ0ID8gbGVmdFN0YXJ0IDogcmlnaHRTdGFydDsKICBjb25zdCBsZWZ0ID0gb3ZlcmxhcExlZnQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBMZWZ0KTsKICBjb25zdCBvdmVybGFwUmlnaHQgPSByaWdodEVuZCA+IGxlZnRFbmQgPyBsZWZ0RW5kIDogcmlnaHRFbmQ7CiAgY29uc3QgcmlnaHQgPSBvdmVybGFwUmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBSaWdodCk7CiAgcmV0dXJuIE1hdGguY2VpbCgocmlnaHQgLSBsZWZ0KSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzX2RlZmF1bHQgPSBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFsczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRTZWNvbmRzLmpzCmZ1bmN0aW9uIGdldFNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0U2Vjb25kcygpOwp9CnZhciBnZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2dldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0U2Vjb25kc19kZWZhdWx0ID0gZ2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRUaW1lLmpzCmZ1bmN0aW9uIGdldFRpbWUoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpOwp9CnZhciBnZXRUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0VGltZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0VGltZV9kZWZhdWx0ID0gZ2V0VGltZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRVbml4VGltZS5qcwpmdW5jdGlvbiBnZXRVbml4VGltZShkYXRlKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoK3RvRGF0ZShkYXRlKSAvIDFlMyk7Cn0KdmFyIGdldFVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFVuaXhUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFVuaXhUaW1lLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRVbml4VGltZV9kZWZhdWx0ID0gZ2V0VW5peFRpbWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla09mTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla09mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgY3VycmVudERheU9mTW9udGggPSBnZXREYXRlKHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikpOwogIGlmIChpc05hTihjdXJyZW50RGF5T2ZNb250aCkpIHJldHVybiBOYU47CiAgY29uc3Qgc3RhcnRXZWVrRGF5ID0gZ2V0RGF5KHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSk7CiAgbGV0IGxhc3REYXlPZkZpcnN0V2VlayA9IHdlZWtTdGFydHNPbiAtIHN0YXJ0V2Vla0RheTsKICBpZiAobGFzdERheU9mRmlyc3RXZWVrIDw9IDApIGxhc3REYXlPZkZpcnN0V2VlayArPSA3OwogIGNvbnN0IHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayA9IGN1cnJlbnREYXlPZk1vbnRoIC0gbGFzdERheU9mRmlyc3RXZWVrOwogIHJldHVybiBNYXRoLmNlaWwocmVtYWluaW5nRGF5c0FmdGVyRmlyc3RXZWVrIC8gNykgKyAxOwp9CnZhciBnZXRXZWVrT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9nZXRXZWVrT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrT2ZNb250aC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtPZk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZNb250aC5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IG1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTsKICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiB0b0RhdGUoX2RhdGUsIG9wdGlvbnM/LmluKTsKfQp2YXIgbGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZk1vbnRoX2RlZmF1bHQgPSBsYXN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrc0luTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla3NJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBjb250ZXh0RGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgcmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoCiAgICBsYXN0RGF5T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksCiAgICBzdGFydE9mTW9udGgoY29udGV4dERhdGUsIG9wdGlvbnMpLAogICAgb3B0aW9ucwogICkgKyAxOwp9CnZhciBnZXRXZWVrc0luTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2Vla3NJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtzSW5Nb250aC5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla3NJbk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrc0luTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcwpmdW5jdGlvbiBnZXRZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRGdWxsWWVhcigpOwp9CnZhciBnZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0WWVhcl9kZWZhdWx0ID0gZ2V0WWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaWxsaXNlY29uZHMoaG91cnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbGxpc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBob3Vyc1RvTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaW51dGVzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaW51dGVzKGhvdXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBtaW51dGVzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9NaW51dGVzX2RlZmF1bHQgPSBob3Vyc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBob3Vyc1RvU2Vjb25kcyhob3VycykgewogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzICogc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2hvdXJzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9TZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvU2Vjb25kc19kZWZhdWx0ID0gaG91cnNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWwuanMKZnVuY3Rpb24gaW50ZXJ2YWwyKHN0YXJ0LCBlbmQzLCBvcHRpb25zKSB7CiAgY29uc3QgW19zdGFydCwgX2VuZF0gPSBub3JtYWxpemVEYXRlcyhvcHRpb25zPy5pbiwgc3RhcnQsIGVuZDMpOwogIGlmIChpc05hTigrX3N0YXJ0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7CiAgaWYgKGlzTmFOKCtfZW5kKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgaXMgaW52YWxpZCIpOwogIGlmIChvcHRpb25zPy5hc3NlcnRQb3NpdGl2ZSAmJiArX3N0YXJ0ID4gK19lbmQpCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGUiKTsKICByZXR1cm4geyBzdGFydDogX3N0YXJ0LCBlbmQ6IF9lbmQgfTsKfQp2YXIgaW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGludGVydmFsX2RlZmF1bHQgPSBpbnRlcnZhbDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWxUb0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGludGVydmFsVG9EdXJhdGlvbihpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGNvbnN0IGR1cmF0aW9uID0ge307CiAgY29uc3QgeWVhcnMgPSBkaWZmZXJlbmNlSW5ZZWFycyhlbmQzLCBzdGFydCk7CiAgaWYgKHllYXJzKSBkdXJhdGlvbi55ZWFycyA9IHllYXJzOwogIGNvbnN0IHJlbWFpbmluZ01vbnRocyA9IGFkZChzdGFydCwgeyB5ZWFyczogZHVyYXRpb24ueWVhcnMgfSk7CiAgY29uc3QgbW9udGhzMiA9IGRpZmZlcmVuY2VJbk1vbnRocyhlbmQzLCByZW1haW5pbmdNb250aHMpOwogIGlmIChtb250aHMyKSBkdXJhdGlvbi5tb250aHMgPSBtb250aHMyOwogIGNvbnN0IHJlbWFpbmluZ0RheXMgPSBhZGQocmVtYWluaW5nTW9udGhzLCB7IG1vbnRoczogZHVyYXRpb24ubW9udGhzIH0pOwogIGNvbnN0IGRheXMyID0gZGlmZmVyZW5jZUluRGF5cyhlbmQzLCByZW1haW5pbmdEYXlzKTsKICBpZiAoZGF5czIpIGR1cmF0aW9uLmRheXMgPSBkYXlzMjsKICBjb25zdCByZW1haW5pbmdIb3VycyA9IGFkZChyZW1haW5pbmdEYXlzLCB7IGRheXM6IGR1cmF0aW9uLmRheXMgfSk7CiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhlbmQzLCByZW1haW5pbmdIb3Vycyk7CiAgaWYgKGhvdXJzKSBkdXJhdGlvbi5ob3VycyA9IGhvdXJzOwogIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBhZGQocmVtYWluaW5nSG91cnMsIHsgaG91cnM6IGR1cmF0aW9uLmhvdXJzIH0pOwogIGNvbnN0IG1pbnV0ZXMgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGVuZDMsIHJlbWFpbmluZ01pbnV0ZXMpOwogIGlmIChtaW51dGVzKSBkdXJhdGlvbi5taW51dGVzID0gbWludXRlczsKICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gYWRkKHJlbWFpbmluZ01pbnV0ZXMsIHsgbWludXRlczogZHVyYXRpb24ubWludXRlcyB9KTsKICBjb25zdCBzZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhlbmQzLCByZW1haW5pbmdTZWNvbmRzKTsKICBpZiAoc2Vjb25kcykgZHVyYXRpb24uc2Vjb25kcyA9IHNlY29uZHM7CiAgcmV0dXJuIGR1cmF0aW9uOwp9CnZhciBpbnRlcnZhbFRvRHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWxUb0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsVG9EdXJhdGlvbi5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5EYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblNlY29uZHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluWWVhcnMoKTsKICAgIGludGVydmFsVG9EdXJhdGlvbl9kZWZhdWx0ID0gaW50ZXJ2YWxUb0R1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMKZnVuY3Rpb24gaW50bEZvcm1hdChkYXRlLCBmb3JtYXRPckxvY2FsZSwgbG9jYWxlT3B0aW9ucykgewogIGxldCBmb3JtYXRPcHRpb25zOwogIGlmIChpc0Zvcm1hdE9wdGlvbnMoZm9ybWF0T3JMb2NhbGUpKSB7CiAgICBmb3JtYXRPcHRpb25zID0gZm9ybWF0T3JMb2NhbGU7CiAgfSBlbHNlIHsKICAgIGxvY2FsZU9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTsKICB9CiAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZU9wdGlvbnM/LmxvY2FsZSwgZm9ybWF0T3B0aW9ucykuZm9ybWF0KAogICAgdG9EYXRlKGRhdGUpCiAgKTsKfQpmdW5jdGlvbiBpc0Zvcm1hdE9wdGlvbnMob3B0cykgewogIHJldHVybiBvcHRzICE9PSB2b2lkIDAgJiYgISgibG9jYWxlIiBpbiBvcHRzKTsKfQp2YXIgaW50bEZvcm1hdF9kZWZhdWx0Owp2YXIgaW5pdF9pbnRsRm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGludGxGb3JtYXRfZGVmYXVsdCA9IGludGxGb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdERpc3RhbmNlLmpzCmZ1bmN0aW9uIGludGxGb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgbGV0IHZhbHVlMiA9IDA7CiAgbGV0IHVuaXQ7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGlmICghb3B0aW9ucz8udW5pdCkgewogICAgY29uc3QgZGlmZkluU2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbk1pbnV0ZSkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Ib3VyKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJtaW51dGUiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkRheSAmJiBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgPCAxKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAiaG91ciI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykpICYmIE1hdGguYWJzKHZhbHVlMikgPCA3KSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Nb250aCkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAid2VlayI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luUXVhcnRlcikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gIm1vbnRoIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5ZZWFyKSB7CiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykgPCA0KSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAicXVhcnRlciI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAieWVhciI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAibWludXRlIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIndlZWsiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAicXVhcnRlciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAieWVhciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfQogIH0KICBjb25zdCBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucz8ubG9jYWxlLCB7CiAgICBudW1lcmljOiAiYXV0byIsCiAgICAuLi5vcHRpb25zCiAgfSk7CiAgcmV0dXJuIHJ0Zi5mb3JtYXQodmFsdWUyLCB1bml0KTsKfQp2YXIgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2ludGxGb3JtYXREaXN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQgPSBpbnRsRm9ybWF0RGlzdGFuY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcwpmdW5jdGlvbiBpc0FmdGVyKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQWZ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNBZnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0FmdGVyX2RlZmF1bHQgPSBpc0FmdGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzCmZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQmVmb3JlX2RlZmF1bHQ7CnZhciBpbml0X2lzQmVmb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0JlZm9yZV9kZWZhdWx0ID0gaXNCZWZvcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFcXVhbC5qcwpmdW5jdGlvbiBpc0VxdWFsKGxlZnREYXRlLCByaWdodERhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShsZWZ0RGF0ZSkgPT09ICt0b0RhdGUocmlnaHREYXRlKTsKfQp2YXIgaXNFcXVhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc0VxdWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRXF1YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRXF1YWxfZGVmYXVsdCA9IGlzRXF1YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMKZnVuY3Rpb24gaXNFeGlzdHMoeWVhciwgbW9udGgsIGRheSkgewogIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTsKICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgZGF0ZS5nZXREYXRlKCkgPT09IGRheTsKfQp2YXIgaXNFeGlzdHNfZGVmYXVsdDsKdmFyIGluaXRfaXNFeGlzdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMiKCkgewogICAgaXNFeGlzdHNfZGVmYXVsdCA9IGlzRXhpc3RzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzCmZ1bmN0aW9uIGlzRmlyc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXRlKCkgPT09IDE7Cn0KdmFyIGlzRmlyc3REYXlPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzRmlyc3REYXlPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0ZpcnN0RGF5T2ZNb250aF9kZWZhdWx0ID0gaXNGaXJzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGcmlkYXkuanMKZnVuY3Rpb24gaXNGcmlkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSA1Owp9CnZhciBpc0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNGcmlkYXlfZGVmYXVsdCA9IGlzRnJpZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzCmZ1bmN0aW9uIGlzRnV0dXJlKGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+IERhdGUubm93KCk7Cn0KdmFyIGlzRnV0dXJlX2RlZmF1bHQ7CnZhciBpbml0X2lzRnV0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0Z1dHVyZV9kZWZhdWx0ID0gaXNGdXR1cmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdHJhbnNwb3NlLmpzCmZ1bmN0aW9uIHRyYW5zcG9zZShkYXRlLCBjb25zdHJ1Y3RvcikgewogIGNvbnN0IGRhdGVfID0gaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgPyBuZXcgY29uc3RydWN0b3IoMCkgOiBjb25zdHJ1Y3RGcm9tKGNvbnN0cnVjdG9yLCAwKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpOwogIGRhdGVfLnNldEhvdXJzKAogICAgZGF0ZS5nZXRIb3VycygpLAogICAgZGF0ZS5nZXRNaW51dGVzKCksCiAgICBkYXRlLmdldFNlY29uZHMoKSwKICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICApOwogIHJldHVybiBkYXRlXzsKfQpmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7CiAgcmV0dXJuIHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gImZ1bmN0aW9uIiAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU/LmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3RvcjsKfQp2YXIgdHJhbnNwb3NlX2RlZmF1bHQ7CnZhciBpbml0X3RyYW5zcG9zZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICB0cmFuc3Bvc2VfZGVmYXVsdCA9IHRyYW5zcG9zZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcwp2YXIgVElNRVpPTkVfVU5JVF9QUklPUklUWSwgU2V0dGVyLCBWYWx1ZVNldHRlciwgRGF0ZVRpbWV6b25lU2V0dGVyOwp2YXIgaW5pdF9TZXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9TZXR0ZXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RyYW5zcG9zZSgpOwogICAgVElNRVpPTkVfVU5JVF9QUklPUklUWSA9IDEwOwogICAgU2V0dGVyID0gY2xhc3MgewogICAgICBzdWJQcmlvcml0eSA9IDA7CiAgICAgIHZhbGlkYXRlKF91dGNEYXRlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogICAgVmFsdWVTZXR0ZXIgPSBjbGFzcyBleHRlbmRzIFNldHRlciB7CiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMiwgdmFsaWRhdGVWYWx1ZSwgc2V0VmFsdWUsIHByaW9yaXR5LCBzdWJQcmlvcml0eSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlOwogICAgICAgIHRoaXMuc2V0VmFsdWUgPSBzZXRWYWx1ZTsKICAgICAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAgICAgICAgaWYgKHN1YlByaW9yaXR5KSB7CiAgICAgICAgICB0aGlzLnN1YlByaW9yaXR5ID0gc3ViUHJpb3JpdHk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGRhdGUsIHRoaXMudmFsdWUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBmbGFncywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLnNldFZhbHVlKGRhdGUsIGZsYWdzLCB0aGlzLnZhbHVlLCBvcHRpb25zKTsKICAgICAgfQogICAgfTsKICAgIERhdGVUaW1lem9uZVNldHRlciA9IGNsYXNzIGV4dGVuZHMgU2V0dGVyIHsKICAgICAgcHJpb3JpdHkgPSBUSU1FWk9ORV9VTklUX1BSSU9SSVRZOwogICAgICBzdWJQcmlvcml0eSA9IC0xOwogICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0MiwgcmVmZXJlbmNlKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0MiB8fCAoKGRhdGUpID0+IGNvbnN0cnVjdEZyb20ocmVmZXJlbmNlLCBkYXRlKSk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzKSB7CiAgICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCB0cmFuc3Bvc2UoZGF0ZSwgdGhpcy5jb250ZXh0KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9QYXJzZXIuanMKdmFyIFBhcnNlcjsKdmFyIGluaXRfUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvUGFyc2VyLmpzIigpIHsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBQYXJzZXIgPSBjbGFzcyB7CiAgICAgIHJ1bihkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKTsKICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzZXR0ZXI6IG5ldyBWYWx1ZVNldHRlcigKICAgICAgICAgICAgcmVzdWx0LnZhbHVlLAogICAgICAgICAgICB0aGlzLnZhbGlkYXRlLAogICAgICAgICAgICB0aGlzLnNldCwKICAgICAgICAgICAgdGhpcy5wcmlvcml0eSwKICAgICAgICAgICAgdGhpcy5zdWJQcmlvcml0eQogICAgICAgICAgKSwKICAgICAgICAgIHJlc3Q6IHJlc3VsdC5yZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICB2YWxpZGF0ZShfdXRjRGF0ZSwgX3ZhbHVlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMKdmFyIEVyYVBhcnNlcjsKdmFyIGluaXRfRXJhUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIEVyYVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxNDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBBRCwgQkMKICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgY2FzZSAiR0dHIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgICAgLy8gQSwgQgogICAgICAgICAgY2FzZSAiR0dHR0ciOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0CiAgICAgICAgICBjYXNlICJHR0dHIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSkgfHwgbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBmbGFncy5lcmEgPSB2YWx1ZTI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJSIiwgInUiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvY29uc3RhbnRzLmpzCnZhciBudW1lcmljUGF0dGVybnMsIHRpbWV6b25lUGF0dGVybnM7CnZhciBpbml0X2NvbnN0YW50czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9jb25zdGFudHMuanMiKCkgewogICAgbnVtZXJpY1BhdHRlcm5zID0gewogICAgICBtb250aDogL14oMVswLTJdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMgogICAgICBkYXRlOiAvXigzWzAtMV18WzAtMl0/XGQpLywKICAgICAgLy8gMCB0byAzMQogICAgICBkYXlPZlllYXI6IC9eKDM2WzAtNl18M1swLTVdXGR8WzAtMl0/XGQ/XGQpLywKICAgICAgLy8gMCB0byAzNjYKICAgICAgd2VlazogL14oNVswLTNdfFswLTRdP1xkKS8sCiAgICAgIC8vIDAgdG8gNTMKICAgICAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjMKICAgICAgaG91cjI0aDogL14oMlswLTRdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjQKICAgICAgaG91cjExaDogL14oMVswLTFdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMQogICAgICBob3VyMTJoOiAvXigxWzAtMl18MD9cZCkvLAogICAgICAvLyAwIHRvIDEyCiAgICAgIG1pbnV0ZTogL15bMC01XT9cZC8sCiAgICAgIC8vIDAgdG8gNTkKICAgICAgc2Vjb25kOiAvXlswLTVdP1xkLywKICAgICAgLy8gMCB0byA1OQogICAgICBzaW5nbGVEaWdpdDogL15cZC8sCiAgICAgIC8vIDAgdG8gOQogICAgICB0d29EaWdpdHM6IC9eXGR7MSwyfS8sCiAgICAgIC8vIDAgdG8gOTkKICAgICAgdGhyZWVEaWdpdHM6IC9eXGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5CiAgICAgIGZvdXJEaWdpdHM6IC9eXGR7MSw0fS8sCiAgICAgIC8vIDAgdG8gOTk5OQogICAgICBhbnlEaWdpdHNTaWduZWQ6IC9eLT9cZCsvLAogICAgICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xkLywKICAgICAgLy8gMCB0byA5LCAtMCB0byAtOQogICAgICB0d29EaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDJ9LywKICAgICAgLy8gMCB0byA5OSwgLTAgdG8gLTk5CiAgICAgIHRocmVlRGlnaXRzU2lnbmVkOiAvXi0/XGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5CiAgICAgIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDR9LwogICAgICAvLyAwIHRvIDk5OTksIC0wIHRvIC05OTk5CiAgICB9OwogICAgdGltZXpvbmVQYXR0ZXJucyA9IHsKICAgICAgYmFzaWNPcHRpb25hbE1pbnV0ZXM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSk/fFovLAogICAgICBiYXNpYzogL14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLywKICAgICAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSkoKFxkezJ9KSk/fFovLAogICAgICBleHRlbmRlZDogL14oWystXSkoXGR7Mn0pOihcZHsyfSl8Wi8sCiAgICAgIGV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzOiAvXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvdXRpbHMuanMKZnVuY3Rpb24gbWFwVmFsdWUocGFyc2VGblJlc3VsdCwgbWFwRm4pIHsKICBpZiAoIXBhcnNlRm5SZXN1bHQpIHsKICAgIHJldHVybiBwYXJzZUZuUmVzdWx0OwogIH0KICByZXR1cm4gewogICAgdmFsdWU6IG1hcEZuKHBhcnNlRm5SZXN1bHQudmFsdWUpLAogICAgcmVzdDogcGFyc2VGblJlc3VsdC5yZXN0CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU51bWVyaWNQYXR0ZXJuKHBhdHRlcm4sIGRhdGVTdHJpbmcpIHsKICBjb25zdCBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7CiAgaWYgKCFtYXRjaFJlc3VsdCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB7CiAgICB2YWx1ZTogcGFyc2VJbnQobWF0Y2hSZXN1bHRbMF0sIDEwKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZVBhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykgewogIGNvbnN0IG1hdGNoUmVzdWx0ID0gZGF0ZVN0cmluZy5tYXRjaChwYXR0ZXJuKTsKICBpZiAoIW1hdGNoUmVzdWx0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAiWiIpIHsKICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiAwLAogICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpCiAgICB9OwogIH0KICBjb25zdCBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09ICIrIiA/IDEgOiAtMTsKICBjb25zdCBob3VycyA9IG1hdGNoUmVzdWx0WzJdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbMl0sIDEwKSA6IDA7CiAgY29uc3QgbWludXRlcyA9IG1hdGNoUmVzdWx0WzNdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbM10sIDEwKSA6IDA7CiAgY29uc3Qgc2Vjb25kcyA9IG1hdGNoUmVzdWx0WzVdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbNV0sIDEwKSA6IDA7CiAgcmV0dXJuIHsKICAgIHZhbHVlOiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZykgewogIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5hbnlEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwp9CmZ1bmN0aW9uIHBhcnNlTkRpZ2l0cyhuMTMsIGRhdGVTdHJpbmcpIHsKICBzd2l0Y2ggKG4xMykgewogICAgY2FzZSAxOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAyOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgNDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cCgiXlxcZHsxLCIgKyBuMTMgKyAifSIpLCBkYXRlU3RyaW5nKTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4xMywgZGF0ZVN0cmluZykgewogIHN3aXRjaCAobjEzKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdFNpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSA0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCJeLT9cXGR7MSwiICsgbjEzICsgIn0iKSwgZGF0ZVN0cmluZyk7CiAgfQp9CmZ1bmN0aW9uIGRheVBlcmlvZEVudW1Ub0hvdXJzKGRheVBlcmlvZCkgewogIHN3aXRjaCAoZGF5UGVyaW9kKSB7CiAgICBjYXNlICJtb3JuaW5nIjoKICAgICAgcmV0dXJuIDQ7CiAgICBjYXNlICJldmVuaW5nIjoKICAgICAgcmV0dXJuIDE3OwogICAgY2FzZSAicG0iOgogICAgY2FzZSAibm9vbiI6CiAgICBjYXNlICJhZnRlcm5vb24iOgogICAgICByZXR1cm4gMTI7CiAgICBjYXNlICJhbSI6CiAgICBjYXNlICJtaWRuaWdodCI6CiAgICBjYXNlICJuaWdodCI6CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gMDsKICB9Cn0KZnVuY3Rpb24gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHR3b0RpZ2l0WWVhciwgY3VycmVudFllYXIpIHsKICBjb25zdCBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDsKICBjb25zdCBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7CiAgbGV0IHJlc3VsdDsKICBpZiAoYWJzQ3VycmVudFllYXIgPD0gNTApIHsKICAgIHJlc3VsdCA9IHR3b0RpZ2l0WWVhciB8fCAxMDA7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHJhbmdlRW5kID0gYWJzQ3VycmVudFllYXIgKyA1MDsKICAgIGNvbnN0IHJhbmdlRW5kQ2VudHVyeSA9IE1hdGgudHJ1bmMocmFuZ2VFbmQgLyAxMDApICogMTAwOwogICAgY29uc3QgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7CiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgKyByYW5nZUVuZENlbnR1cnkgLSAoaXNQcmV2aW91c0NlbnR1cnkgPyAxMDAgOiAwKTsKICB9CiAgcmV0dXJuIGlzQ29tbW9uRXJhID8gcmVzdWx0IDogMSAtIHJlc3VsdDsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikgewogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KdmFyIGluaXRfdXRpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMKdmFyIFllYXJQYXJzZXI7CnZhciBpbml0X1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIlkiLCAiUiIsICJ1IiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJ5eSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJ5byI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBpZiAodmFsdWUyLmlzVHdvRGlnaXRZZWFyKSB7CiAgICAgICAgICBjb25zdCBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKAogICAgICAgICAgICB2YWx1ZTIueWVhciwKICAgICAgICAgICAgY3VycmVudFllYXIKICAgICAgICAgICk7CiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIDEpOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBkYXRlOwogICAgICAgIH0KICAgICAgICBjb25zdCB5ZWFyID0gISgiZXJhIiBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUyLnllYXIgOiAxIC0gdmFsdWUyLnllYXI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzCnZhciBMb2NhbFdlZWtZZWFyUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBMb2NhbFdlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJZWSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJZIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJZbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIGlmICh2YWx1ZTIuaXNUd29EaWdpdFllYXIpIHsKICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoCiAgICAgICAgICAgIHZhbHVlMi55ZWFyLAogICAgICAgICAgICBjdXJyZW50WWVhcgogICAgICAgICAgKTsKICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoCiAgICAgICAgICAgIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlCiAgICAgICAgICApOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeWVhciA9ICEoImVyYSIgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlMi55ZWFyIDogMSAtIHZhbHVlMi55ZWFyOwogICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgMCwgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAiUSIsCiAgICAgICAgInEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzCnZhciBJU09XZWVrWWVhclBhcnNlcjsKdmFyIGluaXRfSVNPV2Vla1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT1dlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJSIikgewogICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGZpcnN0V2Vla09mWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgNCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBzdGFydE9mSVNPV2VlayhmaXJzdFdlZWtPZlllYXIpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiRyIsCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgIlEiLAogICAgICAgICJxIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzCnZhciBFeHRlbmRlZFllYXJQYXJzZXI7CnZhciBpbml0X0V4dGVuZGVkWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBFeHRlbmRlZFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInUiKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJHIiwgInkiLCAiWSIsICJSIiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMKdmFyIFF1YXJ0ZXJQYXJzZXI7CnZhciBpbml0X1F1YXJ0ZXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFF1YXJ0ZXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTIwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICBjYXNlICJRUSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAiUW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAiUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgIlFRUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgIlFRUVEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA0OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlMiAtIDEpICogMywgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyOwp2YXIgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEyMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQKICAgICAgICAgIGNhc2UgInEiOgogICAgICAgICAgY2FzZSAicXEiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKCh2YWx1ZTIgLSAxKSAqIDMsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzCnZhciBNb250aFBhcnNlcjsKdmFyIGluaXRfTW9udGhQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIE1vbnRoUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICAgIHByaW9yaXR5ID0gMTEwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHZhbHVlMiAtIDE7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoMiwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogIm1vbnRoIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gSiwgRiwgLi4uLCBECiAgICAgICAgICBjYXNlICJNTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKHZhbHVlMiwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTW9udGhQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVNb250aFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVNb250aFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gdmFsdWUyIC0gMTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJMbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAibW9udGgiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJMTEwiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgodmFsdWUyLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vlay5qcwpmdW5jdGlvbiBzZXRXZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldFdlZWsoZGF0ZV8sIG9wdGlvbnMpIC0gd2VlazsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gdG9EYXRlKGRhdGVfLCBvcHRpb25zPy5pbik7Cn0KdmFyIHNldFdlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldFdlZWtfZGVmYXVsdCA9IHNldFdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcwp2YXIgTG9jYWxXZWVrUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIExvY2FsV2Vla1BhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ3IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLndlZWssIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAid28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDUzOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBzdGFydE9mV2VlayhzZXRXZWVrKGRhdGUsIHZhbHVlMiwgb3B0aW9ucyksIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vlay5qcwpmdW5jdGlvbiBzZXRJU09XZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldElTT1dlZWsoX2RhdGUsIG9wdGlvbnMpIC0gd2VlazsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldElTT1dlZWtfZGVmYXVsdCA9IHNldElTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMKdmFyIElTT1dlZWtQYXJzZXI7CnZhciBpbml0X0lTT1dlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXRJU09XZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09XZWVrUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJJbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNTM7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKHNldElTT1dlZWsoZGF0ZSwgdmFsdWUyKSk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMKdmFyIERBWVNfSU5fTU9OVEgsIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSLCBEYXRlUGFyc2VyOwp2YXIgaW5pdF9EYXRlUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXRlUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFsKICAgICAgMzEsCiAgICAgIDI5LAogICAgICAzMSwKICAgICAgMzAsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMQogICAgXTsKICAgIERhdGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHN1YlByaW9yaXR5ID0gMTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJkbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJkYXRlIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCBpc0xlYXBZZWFyMiA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTsKICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKICAgICAgICBpZiAoaXNMZWFwWWVhcjIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IERBWVNfSU5fTU9OVEhbbW9udGhdOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldERhdGUodmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzCnZhciBEYXlPZlllYXJQYXJzZXI7CnZhciBpbml0X0RheU9mWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheU9mWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgc3VicHJpb3JpdHkgPSAxOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICBjYXNlICJERCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXlPZlllYXIsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiRG8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiZGF0ZSIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIHZhbHVlMikgewogICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgaXNMZWFwWWVhcjIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcik7CiAgICAgICAgaWYgKGlzTGVhcFllYXIyKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDM2NjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAzNjU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoMCwgdmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRSIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXkuanMKZnVuY3Rpb24gc2V0RGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnREYXkgPSBkYXRlXy5nZXREYXkoKTsKICBjb25zdCByZW1haW5kZXIgPSBkYXkgJSA3OwogIGNvbnN0IGRheUluZGV4ID0gKHJlbWFpbmRlciArIDcpICUgNzsKICBjb25zdCBkZWx0YSA9IDcgLSB3ZWVrU3RhcnRzT247CiAgY29uc3QgZGlmZiA9IGRheSA8IDAgfHwgZGF5ID4gNiA/IGRheSAtIChjdXJyZW50RGF5ICsgZGVsdGEpICUgNyA6IChkYXlJbmRleCArIGRlbHRhKSAlIDcgLSAoY3VycmVudERheSArIGRlbHRhKSAlIDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXREYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0RGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXREYXlfZGVmYXVsdCA9IHNldERheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzCnZhciBEYXlQYXJzZXI7CnZhciBpbml0X0RheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgIGNhc2UgIkVFIjoKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJFRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiRCIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzCnZhciBMb2NhbERheVBhcnNlcjsKdmFyIGluaXRfTG9jYWxEYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTG9jYWxEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gewogICAgICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlMiAtIDEpIC8gNykgKiA3OwogICAgICAgICAgcmV0dXJuICh2YWx1ZTIgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7CiAgICAgICAgfTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAzCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgIGNhc2UgImVlIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDNyZAogICAgICAgICAgY2FzZSAiZW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogImRheSIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiZWVlZSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgIkUiLAogICAgICAgICJpIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGNvbnN0IHdob2xlV2Vla0RheXMgPSBNYXRoLmZsb29yKCh2YWx1ZTIgLSAxKSAvIDcpICogNzsKICAgICAgICAgIHJldHVybiAodmFsdWUyICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyB3aG9sZVdlZWtEYXlzOwogICAgICAgIH07CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAzcmQKICAgICAgICAgIGNhc2UgImNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJkYXkiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiY2NjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gNjsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBkYXRlID0gc2V0RGF5KGRhdGUsIHZhbHVlMiwgb3B0aW9ucyk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJSIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJFIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPRGF5LmpzCmZ1bmN0aW9uIHNldElTT0RheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudERheSA9IGdldElTT0RheShkYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZGlmZiA9IGRheSAtIGN1cnJlbnREYXk7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT0RheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0SVNPRGF5KCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPRGF5X2RlZmF1bHQgPSBzZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcwp2YXIgSVNPRGF5UGFyc2VyOwp2YXIgaW5pdF9JU09EYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldElTT0RheSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT0RheVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgICB9OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDIKICAgICAgICAgIGNhc2UgImkiOgogICAgICAgICAgY2FzZSAiaWkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAybmQKICAgICAgICAgIGNhc2UgImlvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiaWlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImlpaWkiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDc7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZSA9IHNldElTT0RheShkYXRlLCB2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiRSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzCnZhciBBTVBNUGFyc2VyOwp2YXIgaW5pdF9BTVBNUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDgwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjYXNlICJhYSI6CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWFhYSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUyKSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJiIiwgIkIiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzCnZhciBBTVBNTWlkbmlnaHRQYXJzZXI7CnZhciBpbml0X0FNUE1NaWRuaWdodFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNTWlkbmlnaHRQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gODA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgIGNhc2UgImJiIjoKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJiYmJiIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZTIpLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiQiIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMKdmFyIERheVBlcmlvZFBhcnNlcjsKdmFyIGluaXRfRGF5UGVyaW9kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheVBlcmlvZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA4MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgIkJCQkIiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlMiksIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJiIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzCnZhciBIb3VyMXRvMTJQYXJzZXI7CnZhciBpbml0X0hvdXIxdG8xMlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxdG8xMlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjEyaCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJobyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMTI7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaXNQTSA9IGRhdGUuZ2V0SG91cnMoKSA+PSAxMjsKICAgICAgICBpZiAoaXNQTSAmJiB2YWx1ZTIgPCAxMikgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIgKyAxMiwgMCwgMCwgMCk7CiAgICAgICAgfSBlbHNlIGlmICghaXNQTSAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiSCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMKdmFyIEhvdXIwdG8yM1BhcnNlcjsKdmFyIGluaXRfSG91cjB0bzIzUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjB0bzIzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjNoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIkhvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAyMzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJhIiwgImIiLCAiaCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMKdmFyIEhvdXIwVG8xMVBhcnNlcjsKdmFyIGluaXRfSG91cjBUbzExUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjBUbzExUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSyI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTFoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIktvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBpc1BNID0gZGF0ZS5nZXRIb3VycygpID49IDEyOwogICAgICAgIGlmIChpc1BNICYmIHZhbHVlMiA8IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiArIDEyLCAwLCAwLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIsIDAsIDAsIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImgiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzCnZhciBIb3VyMVRvMjRQYXJzZXI7CnZhciBpbml0X0hvdXIxVG8yNFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxVG8yNFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImsiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJrbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMjQ7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSB2YWx1ZTIgPD0gMjQgPyB2YWx1ZTIgJSAyNCA6IHZhbHVlMjsKICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiYiIsICJoIiwgIkgiLCAiSyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcwp2YXIgTWludXRlUGFyc2VyOwp2YXIgaW5pdF9NaW51dGVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBNaW51dGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1pbnV0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJtbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA1OTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1pbnV0ZXModmFsdWUyLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzCnZhciBTZWNvbmRQYXJzZXI7CnZhciBpbml0X1NlY29uZFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFNlY29uZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA1MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2Vjb25kLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgInNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInNlY29uZCIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDU5OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0U2Vjb25kcyh2YWx1ZTIsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzCnZhciBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyOwp2YXIgaW5pdF9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiBNYXRoLnRydW5jKHZhbHVlMiAqIE1hdGgucG93KDEwLCAtdG9rZW4ubGVuZ3RoICsgMykpOwogICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWUyKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVXaXRoWlBhcnNlcjsKdmFyIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFhYWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWFgiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oCiAgICAgICAgICBkYXRlLAogICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIC0gdmFsdWUyCiAgICAgICAgKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCIsICJ4Il07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVQYXJzZXI7CnZhciBpbml0X0lTT1RpbWV6b25lUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxNaW51dGVzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuYmFzaWMsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAieHh4eCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHh4IjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHJldHVybiBkYXRlOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKAogICAgICAgICAgZGF0ZSwKICAgICAgICAgIGRhdGUuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSAtIHZhbHVlMgogICAgICAgICk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJ0IiwgIlQiLCAiWCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wU2Vjb25kc1BhcnNlcjsKdmFyIGluaXRfVGltZXN0YW1wU2Vjb25kc1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDQwOwogICAgICBwYXJzZShkYXRlU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIHJldHVybiBbY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZTIgKiAxZTMpLCB7IHRpbWVzdGFtcElzU2V0OiB0cnVlIH1dOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9ICIqIjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyOwp2YXIgaW5pdF9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcpIHsKICAgICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMiksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gIioiOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMuanMKdmFyIHBhcnNlcnM7CnZhciBpbml0X3BhcnNlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzLmpzIigpIHsKICAgIGluaXRfRXJhUGFyc2VyKCk7CiAgICBpbml0X1llYXJQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9JU09XZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9FeHRlbmRlZFllYXJQYXJzZXIoKTsKICAgIGluaXRfUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9Nb250aFBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lTW9udGhQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrUGFyc2VyKCk7CiAgICBpbml0X0lTT1dlZWtQYXJzZXIoKTsKICAgIGluaXRfRGF0ZVBhcnNlcigpOwogICAgaW5pdF9EYXlPZlllYXJQYXJzZXIoKTsKICAgIGluaXRfRGF5UGFyc2VyKCk7CiAgICBpbml0X0xvY2FsRGF5UGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlcigpOwogICAgaW5pdF9JU09EYXlQYXJzZXIoKTsKICAgIGluaXRfQU1QTVBhcnNlcigpOwogICAgaW5pdF9BTVBNTWlkbmlnaHRQYXJzZXIoKTsKICAgIGluaXRfRGF5UGVyaW9kUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxdG8xMlBhcnNlcigpOwogICAgaW5pdF9Ib3VyMHRvMjNQYXJzZXIoKTsKICAgIGluaXRfSG91cjBUbzExUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxVG8yNFBhcnNlcigpOwogICAgaW5pdF9NaW51dGVQYXJzZXIoKTsKICAgIGluaXRfU2Vjb25kUGFyc2VyKCk7CiAgICBpbml0X0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKTsKICAgIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpOwogICAgaW5pdF9JU09UaW1lem9uZVBhcnNlcigpOwogICAgaW5pdF9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCk7CiAgICBpbml0X1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcigpOwogICAgcGFyc2VycyA9IHsKICAgICAgRzogbmV3IEVyYVBhcnNlcigpLAogICAgICB5OiBuZXcgWWVhclBhcnNlcigpLAogICAgICBZOiBuZXcgTG9jYWxXZWVrWWVhclBhcnNlcigpLAogICAgICBSOiBuZXcgSVNPV2Vla1llYXJQYXJzZXIoKSwKICAgICAgdTogbmV3IEV4dGVuZGVkWWVhclBhcnNlcigpLAogICAgICBROiBuZXcgUXVhcnRlclBhcnNlcigpLAogICAgICBxOiBuZXcgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIoKSwKICAgICAgTTogbmV3IE1vbnRoUGFyc2VyKCksCiAgICAgIEw6IG5ldyBTdGFuZEFsb25lTW9udGhQYXJzZXIoKSwKICAgICAgdzogbmV3IExvY2FsV2Vla1BhcnNlcigpLAogICAgICBJOiBuZXcgSVNPV2Vla1BhcnNlcigpLAogICAgICBkOiBuZXcgRGF0ZVBhcnNlcigpLAogICAgICBEOiBuZXcgRGF5T2ZZZWFyUGFyc2VyKCksCiAgICAgIEU6IG5ldyBEYXlQYXJzZXIoKSwKICAgICAgZTogbmV3IExvY2FsRGF5UGFyc2VyKCksCiAgICAgIGM6IG5ldyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIoKSwKICAgICAgaTogbmV3IElTT0RheVBhcnNlcigpLAogICAgICBhOiBuZXcgQU1QTVBhcnNlcigpLAogICAgICBiOiBuZXcgQU1QTU1pZG5pZ2h0UGFyc2VyKCksCiAgICAgIEI6IG5ldyBEYXlQZXJpb2RQYXJzZXIoKSwKICAgICAgaDogbmV3IEhvdXIxdG8xMlBhcnNlcigpLAogICAgICBIOiBuZXcgSG91cjB0bzIzUGFyc2VyKCksCiAgICAgIEs6IG5ldyBIb3VyMFRvMTFQYXJzZXIoKSwKICAgICAgazogbmV3IEhvdXIxVG8yNFBhcnNlcigpLAogICAgICBtOiBuZXcgTWludXRlUGFyc2VyKCksCiAgICAgIHM6IG5ldyBTZWNvbmRQYXJzZXIoKSwKICAgICAgUzogbmV3IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKSwKICAgICAgWDogbmV3IElTT1RpbWV6b25lV2l0aFpQYXJzZXIoKSwKICAgICAgeDogbmV3IElTT1RpbWV6b25lUGFyc2VyKCksCiAgICAgIHQ6IG5ldyBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCksCiAgICAgIFQ6IG5ldyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS5qcwpmdW5jdGlvbiBwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIHJlZmVyZW5jZURhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgcmVmZXJlbmNlRGF0ZSwgTmFOKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9uczIoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGlmICghZm9ybWF0U3RyKQogICAgcmV0dXJuIGRhdGVTdHIgPyBpbnZhbGlkRGF0ZSgpIDogdG9EYXRlKHJlZmVyZW5jZURhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBzdWJGbk9wdGlvbnMgPSB7CiAgICBmaXJzdFdlZWtDb250YWluc0RhdGUsCiAgICB3ZWVrU3RhcnRzT24sCiAgICBsb2NhbGUKICB9OwogIGNvbnN0IHNldHRlcnMgPSBbbmV3IERhdGVUaW1lem9uZVNldHRlcihvcHRpb25zPy5pbiwgcmVmZXJlbmNlRGF0ZSldOwogIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciBpbiBsb25nRm9ybWF0dGVycykgewogICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTsKICAgIH0KICAgIHJldHVybiBzdWJzdHJpbmc7CiAgfSkuam9pbigiIikubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpOwogIGNvbnN0IHVzZWRUb2tlbnMgPSBbXTsKICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHsKICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBkYXRlU3RyKTsKICAgIH0KICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpOwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSB0b2tlblswXTsKICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgaWYgKHBhcnNlcikgewogICAgICBjb25zdCB7IGluY29tcGF0aWJsZVRva2VucyB9ID0gcGFyc2VyOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbXBhdGlibGVUb2tlbnMpKSB7CiAgICAgICAgY29uc3QgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zLmZpbmQoCiAgICAgICAgICAodXNlZFRva2VuKSA9PiBpbmNvbXBhdGlibGVUb2tlbnMuaW5jbHVkZXModXNlZFRva2VuLnRva2VuKSB8fCB1c2VkVG9rZW4udG9rZW4gPT09IGZpcnN0Q2hhcmFjdGVyCiAgICAgICAgKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW4pIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgICBgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtpbmNvbXBhdGlibGVUb2tlbi5mdWxsVG9rZW59XGAgYW5kIFxgJHt0b2tlbn1cYCBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gIioiICYmIHVzZWRUb2tlbnMubGVuZ3RoID4gMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7dG9rZW59XGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICk7CiAgICAgIH0KICAgICAgdXNlZFRva2Vucy5wdXNoKHsgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLCBmdWxsVG9rZW46IHRva2VuIH0pOwogICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oCiAgICAgICAgZGF0ZVN0ciwKICAgICAgICB0b2tlbiwKICAgICAgICBsb2NhbGUubWF0Y2gsCiAgICAgICAgc3ViRm5PcHRpb25zCiAgICAgICk7CiAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICByZXR1cm4gaW52YWxpZERhdGUoKTsKICAgICAgfQogICAgICBzZXR0ZXJzLnB1c2gocGFyc2VSZXN1bHQuc2V0dGVyKTsKICAgICAgZGF0ZVN0ciA9IHBhcnNlUmVzdWx0LnJlc3Q7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAyKSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodG9rZW4gPT09ICInJyIpIHsKICAgICAgICB0b2tlbiA9ICInIjsKICAgICAgfSBlbHNlIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgICAgdG9rZW4gPSBjbGVhbkVzY2FwZWRTdHJpbmcyKHRva2VuKTsKICAgICAgfQogICAgICBpZiAoZGF0ZVN0ci5pbmRleE9mKHRva2VuKSA9PT0gMCkgewogICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnNsaWNlKHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGRhdGVTdHIubGVuZ3RoID4gMCAmJiBub3RXaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZGF0ZVN0cikpIHsKICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBjb25zdCB1bmlxdWVQcmlvcml0eVNldHRlcnMgPSBzZXR0ZXJzLm1hcCgoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkpLnNvcnQoKGE1LCBiNSkgPT4gYjUgLSBhNSkuZmlsdGVyKChwcmlvcml0eSwgaW5kZXgyLCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihwcmlvcml0eSkgPT09IGluZGV4MikubWFwKAogICAgKHByaW9yaXR5KSA9PiBzZXR0ZXJzLmZpbHRlcigoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkgPT09IHByaW9yaXR5KS5zb3J0KChhNSwgYjUpID0+IGI1LnN1YlByaW9yaXR5IC0gYTUuc3ViUHJpb3JpdHkpCiAgKS5tYXAoKHNldHRlckFycmF5KSA9PiBzZXR0ZXJBcnJheVswXSk7CiAgbGV0IGRhdGUgPSB0b0RhdGUocmVmZXJlbmNlRGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIGNvbnN0IGZsYWdzID0ge307CiAgZm9yIChjb25zdCBzZXR0ZXIgb2YgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSB7CiAgICBpZiAoIXNldHRlci52YWxpZGF0ZShkYXRlLCBzdWJGbk9wdGlvbnMpKSB7CiAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogICAgfQogICAgY29uc3QgcmVzdWx0ID0gc2V0dGVyLnNldChkYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgZGF0ZSA9IHJlc3VsdFswXTsKICAgICAgT2JqZWN0LmFzc2lnbihmbGFncywgcmVzdWx0WzFdKTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGUgPSByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZzIoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cDIpWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAyLCAiJyIpOwp9CnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAyLCBlc2NhcGVkU3RyaW5nUmVnRXhwMiwgZG91YmxlUXVvdGVSZWdFeHAyLCBub3RXaGl0ZXNwYWNlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIsIHBhcnNlX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9sb25nRm9ybWF0dGVycygpOwogICAgaW5pdF9wcm90ZWN0ZWRUb2tlbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBpbml0X3BhcnNlcnMoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAyID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDIgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMiA9IC8nJy9nOwogICAgbm90V2hpdGVzcGFjZVJlZ0V4cCA9IC9cUy87CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIgPSAvW2EtekEtWl0vOwogICAgcGFyc2VfZGVmYXVsdCA9IHBhcnNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTWF0Y2guanMKZnVuY3Rpb24gaXNNYXRjaDIoZGF0ZVN0ciwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzVmFsaWQocGFyc2UoZGF0ZVN0ciwgZm9ybWF0U3RyLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgb3B0aW9ucykpOwp9CnZhciBpc01hdGNoX2RlZmF1bHQ7CnZhciBpbml0X2lzTWF0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcyIoKSB7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfcGFyc2UoKTsKICAgIGlzTWF0Y2hfZGVmYXVsdCA9IGlzTWF0Y2gyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTW9uZGF5LmpzCmZ1bmN0aW9uIGlzTW9uZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMTsKfQp2YXIgaXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNb25kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTW9uZGF5X2RlZmF1bHQgPSBpc01vbmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1Bhc3QuanMKZnVuY3Rpb24gaXNQYXN0KGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8IERhdGUubm93KCk7Cn0KdmFyIGlzUGFzdF9kZWZhdWx0Owp2YXIgaW5pdF9pc1Bhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNQYXN0LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1Bhc3RfZGVmYXVsdCA9IGlzUGFzdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcwpmdW5jdGlvbiBzdGFydE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mSG91cl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkhvdXJfZGVmYXVsdCA9IHN0YXJ0T2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUhvdXIuanMKZnVuY3Rpb24gaXNTYW1lSG91cihkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZUxlZnQsCiAgICBkYXRlUmlnaHQKICApOwogIHJldHVybiArc3RhcnRPZkhvdXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZIb3VyKGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUhvdXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSG91ci5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZIb3VyKCk7CiAgICBpc1NhbWVIb3VyX2RlZmF1bHQgPSBpc1NhbWVIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVdlZWsuanMKZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucykgPT09ICtzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpOwp9CnZhciBpc1NhbWVXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpc1NhbWVXZWVrX2RlZmF1bHQgPSBpc1NhbWVXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMKZnVuY3Rpb24gaXNTYW1lSVNPV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVdlZWsobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrLmpzIigpIHsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaXNTYW1lSVNPV2Vla19kZWZhdWx0ID0gaXNTYW1lSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBpc1NhbWVJU09XZWVrWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZklTT1dlZWtZZWFyKGxhdGVyRGF0ZV8pID09PSArc3RhcnRPZklTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXyk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUlTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVJU09XZWVrWWVhcl9kZWZhdWx0ID0gaXNTYW1lSVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBzdGFydE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0U2Vjb25kcygwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZNaW51dGVfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTWludXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mTWludXRlX2RlZmF1bHQgPSBzdGFydE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZU1pbnV0ZS5qcwpmdW5jdGlvbiBpc1NhbWVNaW51dGUobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgewogIHJldHVybiArc3RhcnRPZk1pbnV0ZShsYXRlckRhdGUpID09PSArc3RhcnRPZk1pbnV0ZShlYXJsaWVyRGF0ZSk7Cn0KdmFyIGlzU2FtZU1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNaW51dGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTWludXRlLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZk1pbnV0ZSgpOwogICAgaXNTYW1lTWludXRlX2RlZmF1bHQgPSBpc1NhbWVNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTW9udGguanMKZnVuY3Rpb24gaXNTYW1lTW9udGgobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAmJiBsYXRlckRhdGVfLmdldE1vbnRoKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRNb250aCgpOwp9CnZhciBpc1NhbWVNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVNb250aF9kZWZhdWx0ID0gaXNTYW1lTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lUXVhcnRlci5qcwpmdW5jdGlvbiBpc1NhbWVRdWFydGVyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mUXVhcnRlcihkYXRlTGVmdF8pID09PSArc3RhcnRPZlF1YXJ0ZXIoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVRdWFydGVyLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZlF1YXJ0ZXIoKTsKICAgIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdCA9IGlzU2FtZVF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlNlY29uZC5qcwpmdW5jdGlvbiBzdGFydE9mU2Vjb25kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TWlsbGlzZWNvbmRzKDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZlNlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZTZWNvbmQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZTZWNvbmRfZGVmYXVsdCA9IHN0YXJ0T2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lU2Vjb25kLmpzCmZ1bmN0aW9uIGlzU2FtZVNlY29uZChsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICtzdGFydE9mU2Vjb25kKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mU2Vjb25kKGVhcmxpZXJEYXRlKTsKfQp2YXIgaXNTYW1lU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVNlY29uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVTZWNvbmQuanMiKCkgewogICAgaW5pdF9zdGFydE9mU2Vjb25kKCk7CiAgICBpc1NhbWVTZWNvbmRfZGVmYXVsdCA9IGlzU2FtZVNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVZZWFyLmpzCmZ1bmN0aW9uIGlzU2FtZVllYXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKfQp2YXIgaXNTYW1lWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVllYXIuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaXNTYW1lWWVhcl9kZWZhdWx0ID0gaXNTYW1lWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzCmZ1bmN0aW9uIGlzVGhpc0hvdXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVIb3VyKAogICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc0hvdXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RoaXNIb3VyX2RlZmF1bHQgPSBpc1RoaXNIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMKZnVuY3Rpb24gaXNUaGlzSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZUlTT1dlZWsoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrKCk7CiAgICBpc1RoaXNJU09XZWVrX2RlZmF1bHQgPSBpc1RoaXNJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01pbnV0ZS5qcwpmdW5jdGlvbiBpc1RoaXNNaW51dGUoZGF0ZSkgewogIHJldHVybiBpc1NhbWVNaW51dGUoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpKTsKfQp2YXIgaXNUaGlzTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNaW51dGUuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTWludXRlKCk7CiAgICBpc1RoaXNNaW51dGVfZGVmYXVsdCA9IGlzVGhpc01pbnV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNb250aC5qcwpmdW5jdGlvbiBpc1RoaXNNb250aChkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZU1vbnRoKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc01vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGlzVGhpc01vbnRoX2RlZmF1bHQgPSBpc1RoaXNNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzCmZ1bmN0aW9uIGlzVGhpc1F1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVRdWFydGVyKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc1F1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaXNUaGlzUXVhcnRlcl9kZWZhdWx0ID0gaXNUaGlzUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNTZWNvbmQuanMKZnVuY3Rpb24gaXNUaGlzU2Vjb25kKGRhdGUpIHsKICByZXR1cm4gaXNTYW1lU2Vjb25kKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7Cn0KdmFyIGlzVGhpc1NlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzU2Vjb25kLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVNlY29uZCgpOwogICAgaXNUaGlzU2Vjb25kX2RlZmF1bHQgPSBpc1RoaXNTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcwpmdW5jdGlvbiBpc1RoaXNXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lV2VlaygKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksCiAgICBvcHRpb25zCiAgKTsKfQp2YXIgaXNUaGlzV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVXZWVrKCk7CiAgICBpc1RoaXNXZWVrX2RlZmF1bHQgPSBpc1RoaXNXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMKZnVuY3Rpb24gaXNUaGlzWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVllYXIoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpc1RoaXNZZWFyX2RlZmF1bHQgPSBpc1RoaXNZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGh1cnNkYXkuanMKZnVuY3Rpb24gaXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDQ7Cn0KdmFyIGlzVGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUaHVyc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RodXJzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RodXJzZGF5X2RlZmF1bHQgPSBpc1RodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9kYXkuanMKZnVuY3Rpb24gaXNUb2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RvZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzVG9kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZURheSgpOwogICAgaXNUb2RheV9kZWZhdWx0ID0gaXNUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzCmZ1bmN0aW9uIGlzVG9tb3Jyb3coZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBkYXRlLAogICAgYWRkRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpLAogICAgb3B0aW9ucwogICk7Cn0KdmFyIGlzVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfaXNUb21vcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpc1RvbW9ycm93X2RlZmF1bHQgPSBpc1RvbW9ycm93OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcwpmdW5jdGlvbiBpc1R1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAyOwp9CnZhciBpc1R1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUdWVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNUdWVzZGF5X2RlZmF1bHQgPSBpc1R1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWRuZXNkYXkuanMKZnVuY3Rpb24gaXNXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAzOwp9CnZhciBpc1dlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1dlZG5lc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWRuZXNkYXlfZGVmYXVsdCA9IGlzV2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMKZnVuY3Rpb24gaXNXaXRoaW5JbnRlcnZhbChkYXRlLCBpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB0aW1lID0gK3RvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSBbCiAgICArdG9EYXRlKGludGVydmFsMy5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbDMuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgcmV0dXJuIHRpbWUgPj0gc3RhcnRUaW1lICYmIHRpbWUgPD0gZW5kVGltZTsKfQp2YXIgaXNXaXRoaW5JbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc1dpdGhpbkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzV2l0aGluSW50ZXJ2YWxfZGVmYXVsdCA9IGlzV2l0aGluSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcwpmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X3N1YkRheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIHN1YkRheXNfZGVmYXVsdCA9IHN1YkRheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMKZnVuY3Rpb24gaXNZZXN0ZXJkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgc3ViRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpCiAgKTsKfQp2YXIgaXNZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGluaXRfc3ViRGF5cygpOwogICAgaXNZZXN0ZXJkYXlfZGVmYXVsdCA9IGlzWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZEZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSA5ICsgTWF0aC5mbG9vcih5ZWFyIC8gMTApICogMTA7CiAgX2RhdGUuc2V0RnVsbFllYXIoZGVjYWRlICsgMSwgMCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pOwp9CnZhciBsYXN0RGF5T2ZEZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mRGVjYWRlX2RlZmF1bHQgPSBsYXN0RGF5T2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mV2Vlay5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTsKICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IC03IDogMCkgKyA2IC0gKGRheSAtIHdlZWtTdGFydHNPbik7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGxhc3REYXlPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBsYXN0RGF5T2ZXZWVrX2RlZmF1bHQgPSBsYXN0RGF5T2ZXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWsuanMKZnVuY3Rpb24gbGFzdERheU9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGxhc3REYXlPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGxhc3REYXlPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrLmpzIigpIHsKICAgIGluaXRfbGFzdERheU9mV2VlaygpOwogICAgbGFzdERheU9mSVNPV2Vla19kZWZhdWx0ID0gbGFzdERheU9mSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnksIG9wdGlvbnMpOwogIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gMSk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGxhc3REYXlPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBsYXN0RGF5T2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZRdWFydGVyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBkYXRlXy5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgZGF0ZV8uc2V0TW9udGgobW9udGgsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlF1YXJ0ZXJfZGVmYXVsdCA9IGxhc3REYXlPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlllYXJfZGVmYXVsdCA9IGxhc3REYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGlnaHRGb3JtYXQuanMKZnVuY3Rpb24gbGlnaHRGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKGRhdGVfKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCB0b2tlbnMgPSBmb3JtYXRTdHIubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDMpOwogIGlmICghdG9rZW5zKSByZXR1cm4gIiI7CiAgY29uc3QgcmVzdWx0ID0gdG9rZW5zLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBpZiAoc3Vic3RyaW5nID09PSAiJyciKSB7CiAgICAgIHJldHVybiAiJyI7CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmczKHN1YnN0cmluZyk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gbGlnaHRGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTsKICAgIGlmIChmb3JtYXR0ZXIyKSB7CiAgICAgIHJldHVybiBmb3JtYXR0ZXIyKGRhdGVfLCBzdWJzdHJpbmcpOwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMykpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gc3Vic3RyaW5nOwogIH0pLmpvaW4oIiIpOwogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nMyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwMyk7CiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gaW5wdXQ7CiAgcmV0dXJuIG1hdGNoZXNbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cDMsICInIik7Cn0KdmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAzLCBlc2NhcGVkU3RyaW5nUmVnRXhwMywgZG91YmxlUXVvdGVSZWdFeHAzLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDMsIGxpZ2h0Rm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2xpZ2h0Rm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xpZ2h0Rm9ybWF0LmpzIigpIHsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMyA9IC8oXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDMgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMyA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAzID0gL1thLXpBLVpdLzsKICAgIGxpZ2h0Rm9ybWF0X2RlZmF1bHQgPSBsaWdodEZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzKHsKICB5ZWFycywKICBtb250aHM6IG1vbnRoczIsCiAgd2Vla3MsCiAgZGF5czogZGF5czIsCiAgaG91cnMsCiAgbWludXRlcywKICBzZWNvbmRzCn0pIHsKICBsZXQgdG90YWxEYXlzID0gMDsKICBpZiAoeWVhcnMpIHRvdGFsRGF5cyArPSB5ZWFycyAqIGRheXNJblllYXI7CiAgaWYgKG1vbnRoczIpIHRvdGFsRGF5cyArPSBtb250aHMyICogKGRheXNJblllYXIgLyAxMik7CiAgaWYgKHdlZWtzKSB0b3RhbERheXMgKz0gd2Vla3MgKiA3OwogIGlmIChkYXlzMikgdG90YWxEYXlzICs9IGRheXMyOwogIGxldCB0b3RhbFNlY29uZHMgPSB0b3RhbERheXMgKiAyNCAqIDYwICogNjA7CiAgaWYgKGhvdXJzKSB0b3RhbFNlY29uZHMgKz0gaG91cnMgKiA2MCAqIDYwOwogIGlmIChtaW51dGVzKSB0b3RhbFNlY29uZHMgKz0gbWludXRlcyAqIDYwOwogIGlmIChzZWNvbmRzKSB0b3RhbFNlY29uZHMgKz0gc2Vjb25kczsKICByZXR1cm4gTWF0aC50cnVuYyh0b3RhbFNlY29uZHMgKiAxZTMpOwp9CnZhciBtaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHNUb0hvdXJzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBob3VycyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBtaWxsaXNlY29uZHNUb0hvdXJzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9Ib3Vyc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb01pbnV0ZXMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9NaW51dGVzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBtaW51dGVzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luTWludXRlOwogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMpOwp9CnZhciBtaWxsaXNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9NaW51dGVzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgY29uc3Qgc2Vjb25kcyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJblNlY29uZDsKICByZXR1cm4gTWF0aC50cnVuYyhzZWNvbmRzKTsKfQp2YXIgbWlsbGlzZWNvbmRzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbGxpc2Vjb25kc1RvU2Vjb25kc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9TZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb0hvdXJzLmpzCmZ1bmN0aW9uIG1pbnV0ZXNUb0hvdXJzKG1pbnV0ZXMpIHsKICBjb25zdCBob3VycyA9IG1pbnV0ZXMgLyBtaW51dGVzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgbWludXRlc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb0hvdXJzX2RlZmF1bHQgPSBtaW51dGVzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWludXRlc1RvTWlsbGlzZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpOwp9CnZhciBtaW51dGVzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaW51dGVzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBtaW51dGVzVG9TZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogc2Vjb25kc0luTWludXRlKTsKfQp2YXIgbWludXRlc1RvU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb1NlY29uZHNfZGVmYXVsdCA9IG1pbnV0ZXNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcwpmdW5jdGlvbiBtb250aHNUb1F1YXJ0ZXJzKG1vbnRoczIpIHsKICBjb25zdCBxdWFydGVycyA9IG1vbnRoczIgLyBtb250aHNJblF1YXJ0ZXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMocXVhcnRlcnMpOwp9CnZhciBtb250aHNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X21vbnRoc1RvUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbW9udGhzVG9RdWFydGVyc19kZWZhdWx0ID0gbW9udGhzVG9RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzCmZ1bmN0aW9uIG1vbnRoc1RvWWVhcnMobW9udGhzMikgewogIGNvbnN0IHllYXJzID0gbW9udGhzMiAvIG1vbnRoc0luWWVhcjsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyk7Cn0KdmFyIG1vbnRoc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfbW9udGhzVG9ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtb250aHNUb1llYXJzX2RlZmF1bHQgPSBtb250aHNUb1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHREYXkuanMKZnVuY3Rpb24gbmV4dERheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBsZXQgZGVsdGEgPSBkYXkgLSBnZXREYXkoZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGRlbHRhIDw9IDApIGRlbHRhICs9IDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgZGVsdGEsIG9wdGlvbnMpOwp9CnZhciBuZXh0RGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHREYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dERheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBuZXh0RGF5X2RlZmF1bHQgPSBuZXh0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRGcmlkYXkuanMKZnVuY3Rpb24gbmV4dEZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNSwgb3B0aW9ucyk7Cn0KdmFyIG5leHRGcmlkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dEZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RnJpZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dEZyaWRheV9kZWZhdWx0ID0gbmV4dEZyaWRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0TW9uZGF5LmpzCmZ1bmN0aW9uIG5leHRNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDEsIG9wdGlvbnMpOwp9CnZhciBuZXh0TW9uZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dE1vbmRheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRNb25kYXlfZGVmYXVsdCA9IG5leHRNb25kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzCmZ1bmN0aW9uIG5leHRTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNiwgb3B0aW9ucyk7Cn0KdmFyIG5leHRTYXR1cmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dFNhdHVyZGF5X2RlZmF1bHQgPSBuZXh0U2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFN1bmRheS5qcwpmdW5jdGlvbiBuZXh0U3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAwLCBvcHRpb25zKTsKfQp2YXIgbmV4dFN1bmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTdW5kYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0U3VuZGF5X2RlZmF1bHQgPSBuZXh0U3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcwpmdW5jdGlvbiBuZXh0VGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDQsIG9wdGlvbnMpOwp9CnZhciBuZXh0VGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFRodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRUaHVyc2RheV9kZWZhdWx0ID0gbmV4dFRodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUdWVzZGF5LmpzCmZ1bmN0aW9uIG5leHRUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAyLCBvcHRpb25zKTsKfQp2YXIgbmV4dFR1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFR1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFR1ZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0VHVlc2RheV9kZWZhdWx0ID0gbmV4dFR1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFdlZG5lc2RheS5qcwpmdW5jdGlvbiBuZXh0V2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAzLCBvcHRpb25zKTsKfQp2YXIgbmV4dFdlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0V2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRXZWRuZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0V2VkbmVzZGF5X2RlZmF1bHQgPSBuZXh0V2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLmpzCmZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7CiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpOwogIGxldCBkYXRlOwogIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7CiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7CiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpOwogIH0KICBpZiAoIWRhdGUgfHwgaXNOYU4oK2RhdGUpKSByZXR1cm4gaW52YWxpZERhdGUoKTsKICBjb25zdCB0aW1lc3RhbXAyID0gK2RhdGU7CiAgbGV0IHRpbWUgPSAwOwogIGxldCBvZmZzZXQ7CiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHsKICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7CiAgICBpZiAoaXNOYU4odGltZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHsKICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpOwogICAgaWYgKGlzTmFOKG9mZnNldCkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0gZWxzZSB7CiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wMiArIHRpbWUpOwogICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTsKICAgIHJlc3VsdC5zZXRGdWxsWWVhcigKICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLAogICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDRGF0ZSgpCiAgICApOwogICAgcmVzdWx0LnNldEhvdXJzKAogICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLAogICAgICB0bXBEYXRlLmdldFVUQ1NlY29uZHMoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKQogICAgKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiB0b0RhdGUodGltZXN0YW1wMiArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTsKfQpmdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogIGNvbnN0IGRhdGVTdHJpbmdzID0ge307CiAgY29uc3QgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTsKICBsZXQgdGltZVN0cmluZzsKICBpZiAoYXJyYXkubGVuZ3RoID4gMikgewogICAgcmV0dXJuIGRhdGVTdHJpbmdzOwogIH0KICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7CiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07CiAgfSBlbHNlIHsKICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTsKICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTsKICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7CiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyKVswXTsKICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKAogICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLAogICAgICAgIGRhdGVTdHJpbmcubGVuZ3RoCiAgICAgICk7CiAgICB9CiAgfQogIGlmICh0aW1lU3RyaW5nKSB7CiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7CiAgICBpZiAodG9rZW4pIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgIiIpOwogICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdOwogICAgfSBlbHNlIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmc7CiAgICB9CiAgfQogIHJldHVybiBkYXRlU3RyaW5nczsKfQpmdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykgewogIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgKICAgICJeKD86KFxcZHs0fXxbKy1dXFxkeyIgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgIn0pfChcXGR7Mn18WystXVxcZHsiICsgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArICJ9KSQpIgogICk7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsKICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiAiIiB9OwogIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7CiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDsKICByZXR1cm4gewogICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLAogICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikgewogIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKGRhdGVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdOwogIGNvbnN0IGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pOwogIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxOwogIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pOwogIGNvbnN0IHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTsKICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7CiAgaWYgKGlzV2Vla0RhdGUpIHsKICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7CiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICAgIH0KICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7CiAgfSBlbHNlIHsKICAgIGNvbnN0IGRhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7CiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHsKICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogICAgfQogICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTsKICAgIHJldHVybiBkYXRlOwogIH0KfQpmdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPyBwYXJzZUludCh2YWx1ZTIpIDogMTsKfQpmdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykgewogIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47CiAgY29uc3QgaG91cnMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzFdKTsKICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7CiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pOwogIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkgewogICAgcmV0dXJuIE5hTjsKICB9CiAgcmV0dXJuIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDFlMzsKfQpmdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgcGFyc2VGbG9hdCh2YWx1ZTIucmVwbGFjZSgiLCIsICIuIikpIHx8IDA7Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykgewogIGlmICh0aW1lem9uZVN0cmluZyA9PT0gIloiKSByZXR1cm4gMDsKICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiAwOwogIGNvbnN0IHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gIisiID8gLTEgOiAxOwogIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQoY2FwdHVyZXNbMl0pOwogIGNvbnN0IG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDsKICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7CiAgICByZXR1cm4gTmFOOwogIH0KICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7Cn0KZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7CiAgY29uc3QgZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTsKICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7CiAgY29uc3QgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTsKICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gZGF0ZTsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgyKHllYXIpIHsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkgewogIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMjkgOiAyOCkpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHsKICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMzY2IDogMzY1KTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHsKICByZXR1cm4gd2VlayA+PSAxICYmIHdlZWsgPD0gNTMgJiYgZGF5ID49IDAgJiYgZGF5IDw9IDY7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7CiAgaWYgKGhvdXJzID09PSAyNCkgewogICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgJiYgc2Vjb25kcyA9PT0gMDsKICB9CiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHsKICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7Cn0KdmFyIHBhdHRlcm5zLCBkYXRlUmVnZXgsIHRpbWVSZWdleCwgdGltZXpvbmVSZWdleCwgZGF5c0luTW9udGhzLCBwYXJzZUlTT19kZWZhdWx0Owp2YXIgaW5pdF9wYXJzZUlTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcGF0dGVybnMgPSB7CiAgICAgIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sCiAgICAgIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLAogICAgICB0aW1lem9uZTogLyhbWistXS4qKSQvCiAgICB9OwogICAgZGF0ZVJlZ2V4ID0gL14tPyg/OihcZHszfSl8KFxkezJ9KSg/Oi0/KFxkezJ9KSk/fFcoXGR7Mn0pKD86LT8oXGR7MX0pKT98KSQvOwogICAgdGltZVJlZ2V4ID0gL14oXGR7Mn0oPzpbLixdXGQqKT8pKD86Oj8oXGR7Mn0oPzpbLixdXGQqKT8pKT8oPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyQvOwogICAgdGltZXpvbmVSZWdleCA9IC9eKFsrLV0pKFxkezJ9KSg/Ojo/KFxkezJ9KSk/JC87CiAgICBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsKICAgIHBhcnNlSVNPX2RlZmF1bHQgPSBwYXJzZUlTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMKZnVuY3Rpb24gcGFyc2VKU09OKGRhdGVTdHIsIG9wdGlvbnMpIHsKICBjb25zdCBwYXJ0cyA9IGRhdGVTdHIubWF0Y2goCiAgICAvKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlbVCBdKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoPzpcLihcZHswLDd9KSk/KD86WnwoLikoXGR7Mn0pOj8oXGR7Mn0pPyk/LwogICk7CiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRvRGF0ZShOYU4sIG9wdGlvbnM/LmluKTsKICByZXR1cm4gdG9EYXRlKAogICAgRGF0ZS5VVEMoCiAgICAgICtwYXJ0c1sxXSwKICAgICAgK3BhcnRzWzJdIC0gMSwKICAgICAgK3BhcnRzWzNdLAogICAgICArcGFydHNbNF0gLSAoK3BhcnRzWzldIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s1XSAtICgrcGFydHNbMTBdIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s2XSwKICAgICAgKygocGFydHNbN10gfHwgIjAiKSArICIwMCIpLnN1YnN0cmluZygwLCAzKQogICAgKSwKICAgIG9wdGlvbnM/LmluCiAgKTsKfQp2YXIgcGFyc2VKU09OX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlSlNPTiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHBhcnNlSlNPTl9kZWZhdWx0ID0gcGFyc2VKU09OOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzRGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGxldCBkZWx0YSA9IGdldERheShkYXRlLCBvcHRpb25zKSAtIGRheTsKICBpZiAoZGVsdGEgPD0gMCkgZGVsdGEgKz0gNzsKICByZXR1cm4gc3ViRGF5cyhkYXRlLCBkZWx0YSwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzRGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzIigpIHsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIHByZXZpb3VzRGF5X2RlZmF1bHQgPSBwcmV2aW91c0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcwpmdW5jdGlvbiBwcmV2aW91c0ZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDUsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c0ZyaWRheV9kZWZhdWx0ID0gcHJldmlvdXNGcmlkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMKZnVuY3Rpb24gcHJldmlvdXNNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAxLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNNb25kYXlfZGVmYXVsdCA9IHByZXZpb3VzTW9uZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU2F0dXJkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDYsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTYXR1cmRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQgPSBwcmV2aW91c1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMCwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQgPSBwcmV2aW91c1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1RodXJzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzVGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCA0LCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1RodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUaHVyc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMiwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1R1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNUdWVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUdWVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzV2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMywgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzV2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1dlZG5lc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHF1YXJ0ZXJzVG9Nb250aHMocXVhcnRlcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhxdWFydGVycyAqIG1vbnRoc0luUXVhcnRlcik7Cn0KdmFyIHF1YXJ0ZXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBxdWFydGVyc1RvTW9udGhzX2RlZmF1bHQgPSBxdWFydGVyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcwpmdW5jdGlvbiBxdWFydGVyc1RvWWVhcnMocXVhcnRlcnMpIHsKICBjb25zdCB5ZWFycyA9IHF1YXJ0ZXJzIC8gcXVhcnRlcnNJblllYXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMpOwp9CnZhciBxdWFydGVyc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgcXVhcnRlcnNUb1llYXJzX2RlZmF1bHQgPSBxdWFydGVyc1RvWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdEhvdXJzKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBuZWFyZXN0VG8gPSBvcHRpb25zPy5uZWFyZXN0VG8gPz8gMTsKICBpZiAobmVhcmVzdFRvIDwgMSB8fCBuZWFyZXN0VG8gPiAxMikKICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGZyYWN0aW9uYWxNaW51dGVzID0gZGF0ZV8uZ2V0TWludXRlcygpIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MCAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwIC8gNjA7CiAgY29uc3QgaG91cnMgPSBkYXRlXy5nZXRIb3VycygpICsgZnJhY3Rpb25hbE1pbnV0ZXMgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZEhvdXJzID0gcm91bmRpbmdNZXRob2QoaG91cnMgLyBuZWFyZXN0VG8pICogbmVhcmVzdFRvOwogIGRhdGVfLnNldEhvdXJzKHJvdW5kZWRIb3VycywgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQ7CnZhciBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3JvdW5kVG9OZWFyZXN0TWludXRlcy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxOwogIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDMwKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pOwogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IGRhdGVfLmdldFNlY29uZHMoKSAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwOwogIGNvbnN0IG1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZE1pbnV0ZXMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gbmVhcmVzdFRvKSAqIG5lYXJlc3RUbzsKICBkYXRlXy5zZXRNaW51dGVzKHJvdW5kZWRNaW51dGVzLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9yb3VuZFRvTmVhcmVzdE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0ID0gcm91bmRUb05lYXJlc3RNaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb0hvdXJzLmpzCmZ1bmN0aW9uIHNlY29uZHNUb0hvdXJzKHNlY29uZHMpIHsKICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBzZWNvbmRzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgc2Vjb25kc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb0hvdXJzX2RlZmF1bHQgPSBzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHNlY29uZHMpIHsKICByZXR1cm4gc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kOwp9CnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzZWNvbmRzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWludXRlcy5qcwpmdW5jdGlvbiBzZWNvbmRzVG9NaW51dGVzKHNlY29uZHMpIHsKICBjb25zdCBtaW51dGVzID0gc2Vjb25kcyAvIHNlY29uZHNJbk1pbnV0ZTsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzKTsKfQp2YXIgc2Vjb25kc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdCA9IHNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TW9udGguanMKZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF0ZSgpOwogIGNvbnN0IG1pZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBtaWRNb250aC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgMTUpOwogIG1pZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGgobWlkTW9udGgpOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9zZXRNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNb250aC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0RGF5c0luTW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRNb250aF9kZWZhdWx0ID0gc2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0LmpzCmZ1bmN0aW9uIHNldChkYXRlLCB2YWx1ZXMsIG9wdGlvbnMpIHsKICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrX2RhdGUpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pOwogIGlmICh2YWx1ZXMueWVhciAhPSBudWxsKSBfZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZXMueWVhcik7CiAgaWYgKHZhbHVlcy5tb250aCAhPSBudWxsKSBfZGF0ZSA9IHNldE1vbnRoKF9kYXRlLCB2YWx1ZXMubW9udGgpOwogIGlmICh2YWx1ZXMuZGF0ZSAhPSBudWxsKSBfZGF0ZS5zZXREYXRlKHZhbHVlcy5kYXRlKTsKICBpZiAodmFsdWVzLmhvdXJzICE9IG51bGwpIF9kYXRlLnNldEhvdXJzKHZhbHVlcy5ob3Vycyk7CiAgaWYgKHZhbHVlcy5taW51dGVzICE9IG51bGwpIF9kYXRlLnNldE1pbnV0ZXModmFsdWVzLm1pbnV0ZXMpOwogIGlmICh2YWx1ZXMuc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRTZWNvbmRzKHZhbHVlcy5zZWNvbmRzKTsKICBpZiAodmFsdWVzLm1pbGxpc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWVzLm1pbGxpc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRfZGVmYXVsdDsKdmFyIGluaXRfc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRfZGVmYXVsdCA9IHNldDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXRlLmpzCmZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgZGF5T2ZNb250aCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXREYXRlKGRheU9mTW9udGgpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0RGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF9zZXREYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERhdGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERhdGVfZGVmYXVsdCA9IHNldERhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5T2ZZZWFyLmpzCmZ1bmN0aW9uIHNldERheU9mWWVhcihkYXRlLCBkYXlPZlllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TW9udGgoMCk7CiAgZGF0ZV8uc2V0RGF0ZShkYXlPZlllYXIpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0RGF5T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldERheU9mWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERheU9mWWVhcl9kZWZhdWx0ID0gc2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzCmZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zMihvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0ge307CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBmb3IgKGNvbnN0IHByb3BlcnR5MTEgaW4gZGVmYXVsdE9wdGlvbnMyKSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zMiwgcHJvcGVydHkxMSkpIHsKICAgICAgcmVzdWx0W3Byb3BlcnR5MTFdID0gZGVmYXVsdE9wdGlvbnMyW3Byb3BlcnR5MTFdOwogICAgfQogIH0KICBmb3IgKGNvbnN0IHByb3BlcnR5MTEgaW4gb3B0aW9ucykgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBwcm9wZXJ0eTExKSkgewogICAgICBpZiAob3B0aW9uc1twcm9wZXJ0eTExXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wZXJ0eTExXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbcHJvcGVydHkxMV0gPSBvcHRpb25zW3Byb3BlcnR5MTFdOwogICAgICB9CiAgICB9CiAgfQogIHNldERlZmF1bHRPcHRpb25zKHJlc3VsdCk7Cn0KdmFyIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQ7CnZhciBpbml0X3NldERlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQgPSBzZXREZWZhdWx0T3B0aW9uczI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMKZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldEhvdXJzX2RlZmF1bHQgPSBzZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKGRhdGUsIG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gc2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMKZnVuY3Rpb24gc2V0TWludXRlcyhkYXRlLCBtaW51dGVzLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0TWludXRlc19kZWZhdWx0ID0gc2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzCmZ1bmN0aW9uIHNldFF1YXJ0ZXIoZGF0ZSwgcXVhcnRlciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBvbGRRdWFydGVyID0gTWF0aC50cnVuYyhkYXRlXy5nZXRNb250aCgpIC8gMykgKyAxOwogIGNvbnN0IGRpZmYgPSBxdWFydGVyIC0gb2xkUXVhcnRlcjsKICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7Cn0KdmFyIHNldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRRdWFydGVyX2RlZmF1bHQgPSBzZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFNlY29uZHMuanMKZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0U2Vjb25kc19kZWZhdWx0ID0gc2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrWWVhci5qcwpmdW5jdGlvbiBzZXRXZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygKICAgIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbiksCiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsKICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mV2Vla1llYXIoZmlyc3RXZWVrLCBvcHRpb25zKTsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRXZWVrWWVhcl9kZWZhdWx0ID0gc2V0V2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcwpmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRZZWFyX2RlZmF1bHQgPSBzZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMKZnVuY3Rpb24gc3RhcnRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRlY2FkZV9kZWZhdWx0ID0gc3RhcnRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMKZnVuY3Rpb24gc3RhcnRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgc3RhcnRPZlRvZGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBzdGFydE9mVG9kYXlfZGVmYXVsdCA9IHN0YXJ0T2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMKZnVuY3Rpb24gc3RhcnRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlOwp9CnZhciBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdCA9IHN0YXJ0T2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzCmZ1bmN0aW9uIHN0YXJ0T2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5IC0gMSk7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgc3RhcnRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mWWVzdGVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIHN0YXJ0T2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IHN0YXJ0T2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzCmZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1vbnRocy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgc3ViTW9udGhzX2RlZmF1bHQgPSBzdWJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzCmZ1bmN0aW9uIHN1YihkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IHsKICAgIHllYXJzID0gMCwKICAgIG1vbnRoczogbW9udGhzMiA9IDAsCiAgICB3ZWVrcyA9IDAsCiAgICBkYXlzOiBkYXlzMiA9IDAsCiAgICBob3VycyA9IDAsCiAgICBtaW51dGVzID0gMCwKICAgIHNlY29uZHMgPSAwCiAgfSA9IGR1cmF0aW9uOwogIGNvbnN0IHdpdGhvdXRNb250aHMgPSBzdWJNb250aHMoZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIsIG9wdGlvbnMpOwogIGNvbnN0IHdpdGhvdXREYXlzID0gc3ViRGF5cyh3aXRob3V0TW9udGhzLCBkYXlzMiArIHdlZWtzICogNywgb3B0aW9ucyk7CiAgY29uc3QgbWludXRlc1RvU3ViID0gbWludXRlcyArIGhvdXJzICogNjA7CiAgY29uc3Qgc2Vjb25kc1RvU3ViID0gc2Vjb25kcyArIG1pbnV0ZXNUb1N1YiAqIDYwOwogIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxZTM7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3dpdGhvdXREYXlzIC0gbXNUb1N1Yik7Cn0KdmFyIHN1Yl9kZWZhdWx0Owp2YXIgaW5pdF9zdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgc3ViX2RlZmF1bHQgPSBzdWI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIHN1YkJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJCdXNpbmVzc0RheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViQnVzaW5lc3NEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkJ1c2luZXNzRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZEJ1c2luZXNzRGF5cygpOwogICAgc3ViQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBzdWJCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMKZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZEhvdXJzKCk7CiAgICBzdWJIb3Vyc19kZWZhdWx0ID0gc3ViSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgc3ViTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzdWJNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcwpmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaW51dGVzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3N1Yk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIHN1Yk1pbnV0ZXNfZGVmYXVsdCA9IHN1Yk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMKZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBzdWJRdWFydGVyc19kZWZhdWx0ID0gc3ViUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcwpmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRTZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3N1YlNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIHN1YlNlY29uZHNfZGVmYXVsdCA9IHN1YlNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMKZnVuY3Rpb24gc3ViV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBzdWJXZWVrc19kZWZhdWx0ID0gc3ViV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViWWVhcnMuanMKZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZFllYXJzKCk7CiAgICBzdWJZZWFyc19kZWZhdWx0ID0gc3ViWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvd2Vla3NUb0RheXMuanMKZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHsKICByZXR1cm4gTWF0aC50cnVuYyh3ZWVrcyAqIGRheXNJbldlZWspOwp9CnZhciB3ZWVrc1RvRGF5c19kZWZhdWx0Owp2YXIgaW5pdF93ZWVrc1RvRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy93ZWVrc1RvRGF5cy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgd2Vla3NUb0RheXNfZGVmYXVsdCA9IHdlZWtzVG9EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9EYXlzLmpzCmZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMgKiBkYXlzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb0RheXNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9EYXlzX2RlZmF1bHQgPSB5ZWFyc1RvRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHllYXJzVG9Nb250aHMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7Cn0KdmFyIHllYXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICB5ZWFyc1RvTW9udGhzX2RlZmF1bHQgPSB5ZWFyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9RdWFydGVycy5qcwpmdW5jdGlvbiB5ZWFyc1RvUXVhcnRlcnMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X3llYXJzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9RdWFydGVyc19kZWZhdWx0ID0geWVhcnNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2luZGV4LmpzCnZhciBkYXRlX2Zuc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRhdGVfZm5zX2V4cG9ydHMsIHsKICBhZGQ6ICgpID0+IGFkZCwKICBhZGRCdXNpbmVzc0RheXM6ICgpID0+IGFkZEJ1c2luZXNzRGF5cywKICBhZGREYXlzOiAoKSA9PiBhZGREYXlzLAogIGFkZEhvdXJzOiAoKSA9PiBhZGRIb3VycywKICBhZGRJU09XZWVrWWVhcnM6ICgpID0+IGFkZElTT1dlZWtZZWFycywKICBhZGRNaWxsaXNlY29uZHM6ICgpID0+IGFkZE1pbGxpc2Vjb25kcywKICBhZGRNaW51dGVzOiAoKSA9PiBhZGRNaW51dGVzLAogIGFkZE1vbnRoczogKCkgPT4gYWRkTW9udGhzLAogIGFkZFF1YXJ0ZXJzOiAoKSA9PiBhZGRRdWFydGVycywKICBhZGRTZWNvbmRzOiAoKSA9PiBhZGRTZWNvbmRzLAogIGFkZFdlZWtzOiAoKSA9PiBhZGRXZWVrcywKICBhZGRZZWFyczogKCkgPT4gYWRkWWVhcnMsCiAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6ICgpID0+IGFyZUludGVydmFsc092ZXJsYXBwaW5nLAogIGNsYW1wOiAoKSA9PiBjbGFtcCwKICBjbG9zZXN0SW5kZXhUbzogKCkgPT4gY2xvc2VzdEluZGV4VG8sCiAgY2xvc2VzdFRvOiAoKSA9PiBjbG9zZXN0VG8sCiAgY29tcGFyZUFzYzogKCkgPT4gY29tcGFyZUFzYywKICBjb21wYXJlRGVzYzogKCkgPT4gY29tcGFyZURlc2MsCiAgY29uc3RydWN0RnJvbTogKCkgPT4gY29uc3RydWN0RnJvbSwKICBjb25zdHJ1Y3ROb3c6ICgpID0+IGNvbnN0cnVjdE5vdywKICBkYXlzVG9XZWVrczogKCkgPT4gZGF5c1RvV2Vla3MsCiAgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczogKCkgPT4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcywKICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLAogIGRpZmZlcmVuY2VJbkRheXM6ICgpID0+IGRpZmZlcmVuY2VJbkRheXMsCiAgZGlmZmVyZW5jZUluSG91cnM6ICgpID0+IGRpZmZlcmVuY2VJbkhvdXJzLAogIGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczogKCkgPT4gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczogKCkgPT4gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLAogIGRpZmZlcmVuY2VJbk1pbnV0ZXM6ICgpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMsCiAgZGlmZmVyZW5jZUluTW9udGhzOiAoKSA9PiBkaWZmZXJlbmNlSW5Nb250aHMsCiAgZGlmZmVyZW5jZUluUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJblF1YXJ0ZXJzLAogIGRpZmZlcmVuY2VJblNlY29uZHM6ICgpID0+IGRpZmZlcmVuY2VJblNlY29uZHMsCiAgZGlmZmVyZW5jZUluV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbldlZWtzLAogIGRpZmZlcmVuY2VJblllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5ZZWFycywKICBlYWNoRGF5T2ZJbnRlcnZhbDogKCkgPT4gZWFjaERheU9mSW50ZXJ2YWwsCiAgZWFjaEhvdXJPZkludGVydmFsOiAoKSA9PiBlYWNoSG91ck9mSW50ZXJ2YWwsCiAgZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNaW51dGVPZkludGVydmFsLAogIGVhY2hNb250aE9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNb250aE9mSW50ZXJ2YWwsCiAgZWFjaFF1YXJ0ZXJPZkludGVydmFsOiAoKSA9PiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla09mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZk1vbnRoOiAoKSA9PiBlYWNoV2Vla2VuZE9mTW9udGgsCiAgZWFjaFdlZWtlbmRPZlllYXI6ICgpID0+IGVhY2hXZWVrZW5kT2ZZZWFyLAogIGVhY2hZZWFyT2ZJbnRlcnZhbDogKCkgPT4gZWFjaFllYXJPZkludGVydmFsLAogIGVuZE9mRGF5OiAoKSA9PiBlbmRPZkRheSwKICBlbmRPZkRlY2FkZTogKCkgPT4gZW5kT2ZEZWNhZGUsCiAgZW5kT2ZIb3VyOiAoKSA9PiBlbmRPZkhvdXIsCiAgZW5kT2ZJU09XZWVrOiAoKSA9PiBlbmRPZklTT1dlZWssCiAgZW5kT2ZJU09XZWVrWWVhcjogKCkgPT4gZW5kT2ZJU09XZWVrWWVhciwKICBlbmRPZk1pbnV0ZTogKCkgPT4gZW5kT2ZNaW51dGUsCiAgZW5kT2ZNb250aDogKCkgPT4gZW5kT2ZNb250aCwKICBlbmRPZlF1YXJ0ZXI6ICgpID0+IGVuZE9mUXVhcnRlciwKICBlbmRPZlNlY29uZDogKCkgPT4gZW5kT2ZTZWNvbmQsCiAgZW5kT2ZUb2RheTogKCkgPT4gZW5kT2ZUb2RheSwKICBlbmRPZlRvbW9ycm93OiAoKSA9PiBlbmRPZlRvbW9ycm93LAogIGVuZE9mV2VlazogKCkgPT4gZW5kT2ZXZWVrLAogIGVuZE9mWWVhcjogKCkgPT4gZW5kT2ZZZWFyLAogIGVuZE9mWWVzdGVyZGF5OiAoKSA9PiBlbmRPZlllc3RlcmRheSwKICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICBmb3JtYXREYXRlOiAoKSA9PiBmb3JtYXQsCiAgZm9ybWF0RGlzdGFuY2U6ICgpID0+IGZvcm1hdERpc3RhbmNlMiwKICBmb3JtYXREaXN0YW5jZVN0cmljdDogKCkgPT4gZm9ybWF0RGlzdGFuY2VTdHJpY3QsCiAgZm9ybWF0RGlzdGFuY2VUb05vdzogKCkgPT4gZm9ybWF0RGlzdGFuY2VUb05vdywKICBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OiAoKSA9PiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LAogIGZvcm1hdER1cmF0aW9uOiAoKSA9PiBmb3JtYXREdXJhdGlvbiwKICBmb3JtYXRJU086ICgpID0+IGZvcm1hdElTTywKICBmb3JtYXRJU085MDc1OiAoKSA9PiBmb3JtYXRJU085MDc1LAogIGZvcm1hdElTT0R1cmF0aW9uOiAoKSA9PiBmb3JtYXRJU09EdXJhdGlvbiwKICBmb3JtYXRSRkMzMzM5OiAoKSA9PiBmb3JtYXRSRkMzMzM5LAogIGZvcm1hdFJGQzcyMzE6ICgpID0+IGZvcm1hdFJGQzcyMzEsCiAgZm9ybWF0UmVsYXRpdmU6ICgpID0+IGZvcm1hdFJlbGF0aXZlMiwKICBmb3JtYXR0ZXJzOiAoKSA9PiBmb3JtYXR0ZXJzLAogIGZyb21Vbml4VGltZTogKCkgPT4gZnJvbVVuaXhUaW1lLAogIGdldERhdGU6ICgpID0+IGdldERhdGUsCiAgZ2V0RGF5OiAoKSA9PiBnZXREYXksCiAgZ2V0RGF5T2ZZZWFyOiAoKSA9PiBnZXREYXlPZlllYXIsCiAgZ2V0RGF5c0luTW9udGg6ICgpID0+IGdldERheXNJbk1vbnRoLAogIGdldERheXNJblllYXI6ICgpID0+IGdldERheXNJblllYXIsCiAgZ2V0RGVjYWRlOiAoKSA9PiBnZXREZWNhZGUsCiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zMiwKICBnZXRIb3VyczogKCkgPT4gZ2V0SG91cnMsCiAgZ2V0SVNPRGF5OiAoKSA9PiBnZXRJU09EYXksCiAgZ2V0SVNPV2VlazogKCkgPT4gZ2V0SVNPV2VlaywKICBnZXRJU09XZWVrWWVhcjogKCkgPT4gZ2V0SVNPV2Vla1llYXIsCiAgZ2V0SVNPV2Vla3NJblllYXI6ICgpID0+IGdldElTT1dlZWtzSW5ZZWFyLAogIGdldE1pbGxpc2Vjb25kczogKCkgPT4gZ2V0TWlsbGlzZWNvbmRzLAogIGdldE1pbnV0ZXM6ICgpID0+IGdldE1pbnV0ZXMsCiAgZ2V0TW9udGg6ICgpID0+IGdldE1vbnRoLAogIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOiAoKSA9PiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscywKICBnZXRRdWFydGVyOiAoKSA9PiBnZXRRdWFydGVyLAogIGdldFNlY29uZHM6ICgpID0+IGdldFNlY29uZHMsCiAgZ2V0VGltZTogKCkgPT4gZ2V0VGltZSwKICBnZXRVbml4VGltZTogKCkgPT4gZ2V0VW5peFRpbWUsCiAgZ2V0V2VlazogKCkgPT4gZ2V0V2VlaywKICBnZXRXZWVrT2ZNb250aDogKCkgPT4gZ2V0V2Vla09mTW9udGgsCiAgZ2V0V2Vla1llYXI6ICgpID0+IGdldFdlZWtZZWFyLAogIGdldFdlZWtzSW5Nb250aDogKCkgPT4gZ2V0V2Vla3NJbk1vbnRoLAogIGdldFllYXI6ICgpID0+IGdldFllYXIsCiAgaG91cnNUb01pbGxpc2Vjb25kczogKCkgPT4gaG91cnNUb01pbGxpc2Vjb25kcywKICBob3Vyc1RvTWludXRlczogKCkgPT4gaG91cnNUb01pbnV0ZXMsCiAgaG91cnNUb1NlY29uZHM6ICgpID0+IGhvdXJzVG9TZWNvbmRzLAogIGludGVydmFsOiAoKSA9PiBpbnRlcnZhbDIsCiAgaW50ZXJ2YWxUb0R1cmF0aW9uOiAoKSA9PiBpbnRlcnZhbFRvRHVyYXRpb24sCiAgaW50bEZvcm1hdDogKCkgPT4gaW50bEZvcm1hdCwKICBpbnRsRm9ybWF0RGlzdGFuY2U6ICgpID0+IGludGxGb3JtYXREaXN0YW5jZSwKICBpc0FmdGVyOiAoKSA9PiBpc0FmdGVyLAogIGlzQmVmb3JlOiAoKSA9PiBpc0JlZm9yZSwKICBpc0RhdGU6ICgpID0+IGlzRGF0ZSwKICBpc0VxdWFsOiAoKSA9PiBpc0VxdWFsLAogIGlzRXhpc3RzOiAoKSA9PiBpc0V4aXN0cywKICBpc0ZpcnN0RGF5T2ZNb250aDogKCkgPT4gaXNGaXJzdERheU9mTW9udGgsCiAgaXNGcmlkYXk6ICgpID0+IGlzRnJpZGF5LAogIGlzRnV0dXJlOiAoKSA9PiBpc0Z1dHVyZSwKICBpc0xhc3REYXlPZk1vbnRoOiAoKSA9PiBpc0xhc3REYXlPZk1vbnRoLAogIGlzTGVhcFllYXI6ICgpID0+IGlzTGVhcFllYXIsCiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaDIsCiAgaXNNb25kYXk6ICgpID0+IGlzTW9uZGF5LAogIGlzUGFzdDogKCkgPT4gaXNQYXN0LAogIGlzU2FtZURheTogKCkgPT4gaXNTYW1lRGF5LAogIGlzU2FtZUhvdXI6ICgpID0+IGlzU2FtZUhvdXIsCiAgaXNTYW1lSVNPV2VlazogKCkgPT4gaXNTYW1lSVNPV2VlaywKICBpc1NhbWVJU09XZWVrWWVhcjogKCkgPT4gaXNTYW1lSVNPV2Vla1llYXIsCiAgaXNTYW1lTWludXRlOiAoKSA9PiBpc1NhbWVNaW51dGUsCiAgaXNTYW1lTW9udGg6ICgpID0+IGlzU2FtZU1vbnRoLAogIGlzU2FtZVF1YXJ0ZXI6ICgpID0+IGlzU2FtZVF1YXJ0ZXIsCiAgaXNTYW1lU2Vjb25kOiAoKSA9PiBpc1NhbWVTZWNvbmQsCiAgaXNTYW1lV2VlazogKCkgPT4gaXNTYW1lV2VlaywKICBpc1NhbWVZZWFyOiAoKSA9PiBpc1NhbWVZZWFyLAogIGlzU2F0dXJkYXk6ICgpID0+IGlzU2F0dXJkYXksCiAgaXNTdW5kYXk6ICgpID0+IGlzU3VuZGF5LAogIGlzVGhpc0hvdXI6ICgpID0+IGlzVGhpc0hvdXIsCiAgaXNUaGlzSVNPV2VlazogKCkgPT4gaXNUaGlzSVNPV2VlaywKICBpc1RoaXNNaW51dGU6ICgpID0+IGlzVGhpc01pbnV0ZSwKICBpc1RoaXNNb250aDogKCkgPT4gaXNUaGlzTW9udGgsCiAgaXNUaGlzUXVhcnRlcjogKCkgPT4gaXNUaGlzUXVhcnRlciwKICBpc1RoaXNTZWNvbmQ6ICgpID0+IGlzVGhpc1NlY29uZCwKICBpc1RoaXNXZWVrOiAoKSA9PiBpc1RoaXNXZWVrLAogIGlzVGhpc1llYXI6ICgpID0+IGlzVGhpc1llYXIsCiAgaXNUaHVyc2RheTogKCkgPT4gaXNUaHVyc2RheSwKICBpc1RvZGF5OiAoKSA9PiBpc1RvZGF5LAogIGlzVG9tb3Jyb3c6ICgpID0+IGlzVG9tb3Jyb3csCiAgaXNUdWVzZGF5OiAoKSA9PiBpc1R1ZXNkYXksCiAgaXNWYWxpZDogKCkgPT4gaXNWYWxpZCwKICBpc1dlZG5lc2RheTogKCkgPT4gaXNXZWRuZXNkYXksCiAgaXNXZWVrZW5kOiAoKSA9PiBpc1dlZWtlbmQsCiAgaXNXaXRoaW5JbnRlcnZhbDogKCkgPT4gaXNXaXRoaW5JbnRlcnZhbCwKICBpc1llc3RlcmRheTogKCkgPT4gaXNZZXN0ZXJkYXksCiAgbGFzdERheU9mRGVjYWRlOiAoKSA9PiBsYXN0RGF5T2ZEZWNhZGUsCiAgbGFzdERheU9mSVNPV2VlazogKCkgPT4gbGFzdERheU9mSVNPV2VlaywKICBsYXN0RGF5T2ZJU09XZWVrWWVhcjogKCkgPT4gbGFzdERheU9mSVNPV2Vla1llYXIsCiAgbGFzdERheU9mTW9udGg6ICgpID0+IGxhc3REYXlPZk1vbnRoLAogIGxhc3REYXlPZlF1YXJ0ZXI6ICgpID0+IGxhc3REYXlPZlF1YXJ0ZXIsCiAgbGFzdERheU9mV2VlazogKCkgPT4gbGFzdERheU9mV2VlaywKICBsYXN0RGF5T2ZZZWFyOiAoKSA9PiBsYXN0RGF5T2ZZZWFyLAogIGxpZ2h0Rm9ybWF0OiAoKSA9PiBsaWdodEZvcm1hdCwKICBsaWdodEZvcm1hdHRlcnM6ICgpID0+IGxpZ2h0Rm9ybWF0dGVycywKICBsb25nRm9ybWF0dGVyczogKCkgPT4gbG9uZ0Zvcm1hdHRlcnMsCiAgbWF4OiAoKSA9PiBtYXgyLAogIG1pbGxpc2Vjb25kczogKCkgPT4gbWlsbGlzZWNvbmRzLAogIG1pbGxpc2Vjb25kc1RvSG91cnM6ICgpID0+IG1pbGxpc2Vjb25kc1RvSG91cnMsCiAgbWlsbGlzZWNvbmRzVG9NaW51dGVzOiAoKSA9PiBtaWxsaXNlY29uZHNUb01pbnV0ZXMsCiAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzOiAoKSA9PiBtaWxsaXNlY29uZHNUb1NlY29uZHMsCiAgbWluOiAoKSA9PiBtaW4yLAogIG1pbnV0ZXNUb0hvdXJzOiAoKSA9PiBtaW51dGVzVG9Ib3VycywKICBtaW51dGVzVG9NaWxsaXNlY29uZHM6ICgpID0+IG1pbnV0ZXNUb01pbGxpc2Vjb25kcywKICBtaW51dGVzVG9TZWNvbmRzOiAoKSA9PiBtaW51dGVzVG9TZWNvbmRzLAogIG1vbnRoc1RvUXVhcnRlcnM6ICgpID0+IG1vbnRoc1RvUXVhcnRlcnMsCiAgbW9udGhzVG9ZZWFyczogKCkgPT4gbW9udGhzVG9ZZWFycywKICBuZXh0RGF5OiAoKSA9PiBuZXh0RGF5LAogIG5leHRGcmlkYXk6ICgpID0+IG5leHRGcmlkYXksCiAgbmV4dE1vbmRheTogKCkgPT4gbmV4dE1vbmRheSwKICBuZXh0U2F0dXJkYXk6ICgpID0+IG5leHRTYXR1cmRheSwKICBuZXh0U3VuZGF5OiAoKSA9PiBuZXh0U3VuZGF5LAogIG5leHRUaHVyc2RheTogKCkgPT4gbmV4dFRodXJzZGF5LAogIG5leHRUdWVzZGF5OiAoKSA9PiBuZXh0VHVlc2RheSwKICBuZXh0V2VkbmVzZGF5OiAoKSA9PiBuZXh0V2VkbmVzZGF5LAogIHBhcnNlOiAoKSA9PiBwYXJzZSwKICBwYXJzZUlTTzogKCkgPT4gcGFyc2VJU08sCiAgcGFyc2VKU09OOiAoKSA9PiBwYXJzZUpTT04sCiAgcGFyc2VyczogKCkgPT4gcGFyc2VycywKICBwcmV2aW91c0RheTogKCkgPT4gcHJldmlvdXNEYXksCiAgcHJldmlvdXNGcmlkYXk6ICgpID0+IHByZXZpb3VzRnJpZGF5LAogIHByZXZpb3VzTW9uZGF5OiAoKSA9PiBwcmV2aW91c01vbmRheSwKICBwcmV2aW91c1NhdHVyZGF5OiAoKSA9PiBwcmV2aW91c1NhdHVyZGF5LAogIHByZXZpb3VzU3VuZGF5OiAoKSA9PiBwcmV2aW91c1N1bmRheSwKICBwcmV2aW91c1RodXJzZGF5OiAoKSA9PiBwcmV2aW91c1RodXJzZGF5LAogIHByZXZpb3VzVHVlc2RheTogKCkgPT4gcHJldmlvdXNUdWVzZGF5LAogIHByZXZpb3VzV2VkbmVzZGF5OiAoKSA9PiBwcmV2aW91c1dlZG5lc2RheSwKICBxdWFydGVyc1RvTW9udGhzOiAoKSA9PiBxdWFydGVyc1RvTW9udGhzLAogIHF1YXJ0ZXJzVG9ZZWFyczogKCkgPT4gcXVhcnRlcnNUb1llYXJzLAogIHJvdW5kVG9OZWFyZXN0SG91cnM6ICgpID0+IHJvdW5kVG9OZWFyZXN0SG91cnMsCiAgcm91bmRUb05lYXJlc3RNaW51dGVzOiAoKSA9PiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMsCiAgc2Vjb25kc1RvSG91cnM6ICgpID0+IHNlY29uZHNUb0hvdXJzLAogIHNlY29uZHNUb01pbGxpc2Vjb25kczogKCkgPT4gc2Vjb25kc1RvTWlsbGlzZWNvbmRzLAogIHNlY29uZHNUb01pbnV0ZXM6ICgpID0+IHNlY29uZHNUb01pbnV0ZXMsCiAgc2V0OiAoKSA9PiBzZXQsCiAgc2V0RGF0ZTogKCkgPT4gc2V0RGF0ZSwKICBzZXREYXk6ICgpID0+IHNldERheSwKICBzZXREYXlPZlllYXI6ICgpID0+IHNldERheU9mWWVhciwKICBzZXREZWZhdWx0T3B0aW9uczogKCkgPT4gc2V0RGVmYXVsdE9wdGlvbnMyLAogIHNldEhvdXJzOiAoKSA9PiBzZXRIb3VycywKICBzZXRJU09EYXk6ICgpID0+IHNldElTT0RheSwKICBzZXRJU09XZWVrOiAoKSA9PiBzZXRJU09XZWVrLAogIHNldElTT1dlZWtZZWFyOiAoKSA9PiBzZXRJU09XZWVrWWVhciwKICBzZXRNaWxsaXNlY29uZHM6ICgpID0+IHNldE1pbGxpc2Vjb25kcywKICBzZXRNaW51dGVzOiAoKSA9PiBzZXRNaW51dGVzLAogIHNldE1vbnRoOiAoKSA9PiBzZXRNb250aCwKICBzZXRRdWFydGVyOiAoKSA9PiBzZXRRdWFydGVyLAogIHNldFNlY29uZHM6ICgpID0+IHNldFNlY29uZHMsCiAgc2V0V2VlazogKCkgPT4gc2V0V2VlaywKICBzZXRXZWVrWWVhcjogKCkgPT4gc2V0V2Vla1llYXIsCiAgc2V0WWVhcjogKCkgPT4gc2V0WWVhciwKICBzdGFydE9mRGF5OiAoKSA9PiBzdGFydE9mRGF5LAogIHN0YXJ0T2ZEZWNhZGU6ICgpID0+IHN0YXJ0T2ZEZWNhZGUsCiAgc3RhcnRPZkhvdXI6ICgpID0+IHN0YXJ0T2ZIb3VyLAogIHN0YXJ0T2ZJU09XZWVrOiAoKSA9PiBzdGFydE9mSVNPV2VlaywKICBzdGFydE9mSVNPV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZJU09XZWVrWWVhciwKICBzdGFydE9mTWludXRlOiAoKSA9PiBzdGFydE9mTWludXRlLAogIHN0YXJ0T2ZNb250aDogKCkgPT4gc3RhcnRPZk1vbnRoLAogIHN0YXJ0T2ZRdWFydGVyOiAoKSA9PiBzdGFydE9mUXVhcnRlciwKICBzdGFydE9mU2Vjb25kOiAoKSA9PiBzdGFydE9mU2Vjb25kLAogIHN0YXJ0T2ZUb2RheTogKCkgPT4gc3RhcnRPZlRvZGF5LAogIHN0YXJ0T2ZUb21vcnJvdzogKCkgPT4gc3RhcnRPZlRvbW9ycm93LAogIHN0YXJ0T2ZXZWVrOiAoKSA9PiBzdGFydE9mV2VlaywKICBzdGFydE9mV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZXZWVrWWVhciwKICBzdGFydE9mWWVhcjogKCkgPT4gc3RhcnRPZlllYXIsCiAgc3RhcnRPZlllc3RlcmRheTogKCkgPT4gc3RhcnRPZlllc3RlcmRheSwKICBzdWI6ICgpID0+IHN1YiwKICBzdWJCdXNpbmVzc0RheXM6ICgpID0+IHN1YkJ1c2luZXNzRGF5cywKICBzdWJEYXlzOiAoKSA9PiBzdWJEYXlzLAogIHN1YkhvdXJzOiAoKSA9PiBzdWJIb3VycywKICBzdWJJU09XZWVrWWVhcnM6ICgpID0+IHN1YklTT1dlZWtZZWFycywKICBzdWJNaWxsaXNlY29uZHM6ICgpID0+IHN1Yk1pbGxpc2Vjb25kcywKICBzdWJNaW51dGVzOiAoKSA9PiBzdWJNaW51dGVzLAogIHN1Yk1vbnRoczogKCkgPT4gc3ViTW9udGhzLAogIHN1YlF1YXJ0ZXJzOiAoKSA9PiBzdWJRdWFydGVycywKICBzdWJTZWNvbmRzOiAoKSA9PiBzdWJTZWNvbmRzLAogIHN1YldlZWtzOiAoKSA9PiBzdWJXZWVrcywKICBzdWJZZWFyczogKCkgPT4gc3ViWWVhcnMsCiAgdG9EYXRlOiAoKSA9PiB0b0RhdGUsCiAgdHJhbnNwb3NlOiAoKSA9PiB0cmFuc3Bvc2UsCiAgd2Vla3NUb0RheXM6ICgpID0+IHdlZWtzVG9EYXlzLAogIHllYXJzVG9EYXlzOiAoKSA9PiB5ZWFyc1RvRGF5cywKICB5ZWFyc1RvTW9udGhzOiAoKSA9PiB5ZWFyc1RvTW9udGhzLAogIHllYXJzVG9RdWFydGVyczogKCkgPT4geWVhcnNUb1F1YXJ0ZXJzCn0pOwp2YXIgaW5pdF9kYXRlX2ZucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9hZGRCdXNpbmVzc0RheXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRIb3VycygpOwogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfYWRkWWVhcnMoKTsKICAgIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoKTsKICAgIGluaXRfY2xhbXAoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY2xvc2VzdFRvKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29tcGFyZURlc2MoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZGF5c1RvV2Vla3MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblllYXJzKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTWludXRlT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTW9udGhPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoV2Vla09mSW50ZXJ2YWwoKTsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCgpOwogICAgaW5pdF9lYWNoV2Vla2VuZE9mWWVhcigpOwogICAgaW5pdF9lYWNoWWVhck9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZEZWNhZGUoKTsKICAgIGluaXRfZW5kT2ZIb3VyKCk7CiAgICBpbml0X2VuZE9mSVNPV2VlaygpOwogICAgaW5pdF9lbmRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X2VuZE9mTWludXRlKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfZW5kT2ZRdWFydGVyKCk7CiAgICBpbml0X2VuZE9mU2Vjb25kKCk7CiAgICBpbml0X2VuZE9mVG9kYXkoKTsKICAgIGluaXRfZW5kT2ZUb21vcnJvdygpOwogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X2VuZE9mWWVzdGVyZGF5KCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KCk7CiAgICBpbml0X2Zvcm1hdER1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdElTTygpOwogICAgaW5pdF9mb3JtYXRJU085MDc1KCk7CiAgICBpbml0X2Zvcm1hdElTT0R1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdFJGQzMzMzkoKTsKICAgIGluaXRfZm9ybWF0UkZDNzIzMSgpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZTIoKTsKICAgIGluaXRfZnJvbVVuaXhUaW1lKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X2dldERheU9mWWVhcigpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF9nZXREYXlzSW5ZZWFyKCk7CiAgICBpbml0X2dldERlY2FkZSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRIb3VycygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRJU09XZWVrc0luWWVhcigpOwogICAgaW5pdF9nZXRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfZ2V0TWludXRlcygpOwogICAgaW5pdF9nZXRNb250aCgpOwogICAgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBpbml0X2dldFNlY29uZHMoKTsKICAgIGluaXRfZ2V0VGltZSgpOwogICAgaW5pdF9nZXRVbml4VGltZSgpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtPZk1vbnRoKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2dldFdlZWtzSW5Nb250aCgpOwogICAgaW5pdF9nZXRZZWFyKCk7CiAgICBpbml0X2hvdXJzVG9NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfaG91cnNUb01pbnV0ZXMoKTsKICAgIGluaXRfaG91cnNUb1NlY29uZHMoKTsKICAgIGluaXRfaW50ZXJ2YWwyKCk7CiAgICBpbml0X2ludGVydmFsVG9EdXJhdGlvbigpOwogICAgaW5pdF9pbnRsRm9ybWF0KCk7CiAgICBpbml0X2ludGxGb3JtYXREaXN0YW5jZSgpOwogICAgaW5pdF9pc0FmdGVyKCk7CiAgICBpbml0X2lzQmVmb3JlKCk7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfaXNFcXVhbCgpOwogICAgaW5pdF9pc0V4aXN0cygpOwogICAgaW5pdF9pc0ZpcnN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9pc0ZyaWRheSgpOwogICAgaW5pdF9pc0Z1dHVyZSgpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfaXNNYXRjaCgpOwogICAgaW5pdF9pc01vbmRheSgpOwogICAgaW5pdF9pc1Bhc3QoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfaXNTYW1lSVNPV2VlaygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrWWVhcigpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaW5pdF9pc1NhbWVTZWNvbmQoKTsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNUaGlzSG91cigpOwogICAgaW5pdF9pc1RoaXNJU09XZWVrKCk7CiAgICBpbml0X2lzVGhpc01pbnV0ZSgpOwogICAgaW5pdF9pc1RoaXNNb250aCgpOwogICAgaW5pdF9pc1RoaXNRdWFydGVyKCk7CiAgICBpbml0X2lzVGhpc1NlY29uZCgpOwogICAgaW5pdF9pc1RoaXNXZWVrKCk7CiAgICBpbml0X2lzVGhpc1llYXIoKTsKICAgIGluaXRfaXNUaHVyc2RheSgpOwogICAgaW5pdF9pc1RvZGF5KCk7CiAgICBpbml0X2lzVG9tb3Jyb3coKTsKICAgIGluaXRfaXNUdWVzZGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWRuZXNkYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X2lzV2l0aGluSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNZZXN0ZXJkYXkoKTsKICAgIGluaXRfbGFzdERheU9mRGVjYWRlKCk7CiAgICBpbml0X2xhc3REYXlPZklTT1dlZWsoKTsKICAgIGluaXRfbGFzdERheU9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfbGFzdERheU9mUXVhcnRlcigpOwogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBpbml0X2xhc3REYXlPZlllYXIoKTsKICAgIGluaXRfbGlnaHRGb3JtYXQoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taWxsaXNlY29uZHMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycygpOwogICAgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzKCk7CiAgICBpbml0X21pbjIoKTsKICAgIGluaXRfbWludXRlc1RvSG91cnMoKTsKICAgIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X21pbnV0ZXNUb1NlY29uZHMoKTsKICAgIGluaXRfbW9udGhzVG9RdWFydGVycygpOwogICAgaW5pdF9tb250aHNUb1llYXJzKCk7CiAgICBpbml0X25leHREYXkoKTsKICAgIGluaXRfbmV4dEZyaWRheSgpOwogICAgaW5pdF9uZXh0TW9uZGF5KCk7CiAgICBpbml0X25leHRTYXR1cmRheSgpOwogICAgaW5pdF9uZXh0U3VuZGF5KCk7CiAgICBpbml0X25leHRUaHVyc2RheSgpOwogICAgaW5pdF9uZXh0VHVlc2RheSgpOwogICAgaW5pdF9uZXh0V2VkbmVzZGF5KCk7CiAgICBpbml0X3BhcnNlKCk7CiAgICBpbml0X3BhcnNlSVNPKCk7CiAgICBpbml0X3BhcnNlSlNPTigpOwogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgaW5pdF9wcmV2aW91c0ZyaWRheSgpOwogICAgaW5pdF9wcmV2aW91c01vbmRheSgpOwogICAgaW5pdF9wcmV2aW91c1NhdHVyZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzU3VuZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzVGh1cnNkYXkoKTsKICAgIGluaXRfcHJldmlvdXNUdWVzZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzV2VkbmVzZGF5KCk7CiAgICBpbml0X3F1YXJ0ZXJzVG9Nb250aHMoKTsKICAgIGluaXRfcXVhcnRlcnNUb1llYXJzKCk7CiAgICBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMoKTsKICAgIGluaXRfcm91bmRUb05lYXJlc3RNaW51dGVzKCk7CiAgICBpbml0X3NlY29uZHNUb0hvdXJzKCk7CiAgICBpbml0X3NlY29uZHNUb01pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zZWNvbmRzVG9NaW51dGVzKCk7CiAgICBpbml0X3NldCgpOwogICAgaW5pdF9zZXREYXRlKCk7CiAgICBpbml0X3NldERheSgpOwogICAgaW5pdF9zZXREYXlPZlllYXIoKTsKICAgIGluaXRfc2V0RGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfc2V0SG91cnMoKTsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc2V0TWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X3NldE1pbnV0ZXMoKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfc2V0UXVhcnRlcigpOwogICAgaW5pdF9zZXRTZWNvbmRzKCk7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc2V0V2Vla1llYXIoKTsKICAgIGluaXRfc2V0WWVhcigpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZEZWNhZGUoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZNaW51dGUoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGluaXRfc3RhcnRPZlRvZGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZUb21vcnJvdygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllc3RlcmRheSgpOwogICAgaW5pdF9zdWIoKTsKICAgIGluaXRfc3ViQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIGluaXRfc3ViSG91cnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1Yk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zdWJNaW51dGVzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgaW5pdF9zdWJRdWFydGVycygpOwogICAgaW5pdF9zdWJTZWNvbmRzKCk7CiAgICBpbml0X3N1YldlZWtzKCk7CiAgICBpbml0X3N1YlllYXJzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF90cmFuc3Bvc2UoKTsKICAgIGluaXRfd2Vla3NUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb01vbnRocygpOwogICAgaW5pdF95ZWFyc1RvUXVhcnRlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcwp2YXIgcmVxdWlyZV9kYXlqc19taW4gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKHQ5LCBlMTEpIHsKICAgICAgIm9iamVjdCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIG1vZHVsZSA/IG1vZHVsZS5leHBvcnRzID0gZTExKCkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShlMTEpIDogKHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogdDkgfHwgc2VsZikuZGF5anMgPSBlMTEoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdDkgPSAxZTMsIGUxMSA9IDZlNCwgbjEzID0gMzZlNSwgcjExID0gIm1pbGxpc2Vjb25kIiwgaTExID0gInNlY29uZCIsIHM5ID0gIm1pbnV0ZSIsIHU3ID0gImhvdXIiLCBhNSA9ICJkYXkiLCBvMTMgPSAid2VlayIsIGMxMSA9ICJtb250aCIsIGY3ID0gInF1YXJ0ZXIiLCBoOSA9ICJ5ZWFyIiwgZDYgPSAiZGF0ZSIsIGw2ID0gIkludmFsaWQgRGF0ZSIsICQzID0gL14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sIHk1ID0gL1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZywgTTMgPSB7IG5hbWU6ICJlbiIsIHdlZWtkYXlzOiAiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksIG1vbnRoczogIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksIG9yZGluYWw6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSBbInRoIiwgInN0IiwgIm5kIiwgInJkIl0sIG4xNCA9IHQxMCAlIDEwMDsKICAgICAgICByZXR1cm4gIlsiICsgdDEwICsgKGUxMlsobjE0IC0gMjApICUgMTBdIHx8IGUxMltuMTRdIHx8IGUxMlswXSkgKyAiXSI7CiAgICAgIH0gfSwgbTYgPSBmdW5jdGlvbih0MTAsIGUxMiwgbjE0KSB7CiAgICAgICAgdmFyIHIxMiA9IFN0cmluZyh0MTApOwogICAgICAgIHJldHVybiAhcjEyIHx8IHIxMi5sZW5ndGggPj0gZTEyID8gdDEwIDogIiIgKyBBcnJheShlMTIgKyAxIC0gcjEyLmxlbmd0aCkuam9pbihuMTQpICsgdDEwOwogICAgICB9LCB2NSA9IHsgczogbTYsIHo6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSAtdDEwLnV0Y09mZnNldCgpLCBuMTQgPSBNYXRoLmFicyhlMTIpLCByMTIgPSBNYXRoLmZsb29yKG4xNCAvIDYwKSwgaTEyID0gbjE0ICUgNjA7CiAgICAgICAgcmV0dXJuIChlMTIgPD0gMCA/ICIrIiA6ICItIikgKyBtNihyMTIsIDIsICIwIikgKyAiOiIgKyBtNihpMTIsIDIsICIwIik7CiAgICAgIH0sIG06IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCkgewogICAgICAgIGlmIChlMTIuZGF0ZSgpIDwgbjE0LmRhdGUoKSkgcmV0dXJuIC10MTAobjE0LCBlMTIpOwogICAgICAgIHZhciByMTIgPSAxMiAqIChuMTQueWVhcigpIC0gZTEyLnllYXIoKSkgKyAobjE0Lm1vbnRoKCkgLSBlMTIubW9udGgoKSksIGkxMiA9IGUxMi5jbG9uZSgpLmFkZChyMTIsIGMxMSksIHMxMCA9IG4xNCAtIGkxMiA8IDAsIHU4ID0gZTEyLmNsb25lKCkuYWRkKHIxMiArIChzMTAgPyAtMSA6IDEpLCBjMTEpOwogICAgICAgIHJldHVybiArKC0ocjEyICsgKG4xNCAtIGkxMikgLyAoczEwID8gaTEyIC0gdTggOiB1OCAtIGkxMikpIHx8IDApOwogICAgICB9LCBhOiBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4gdDEwIDwgMCA/IE1hdGguY2VpbCh0MTApIHx8IDAgOiBNYXRoLmZsb29yKHQxMCk7CiAgICAgIH0sIHA6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB7IE06IGMxMSwgeTogaDksIHc6IG8xMywgZDogYTUsIEQ6IGQ2LCBoOiB1NywgbTogczksIHM6IGkxMSwgbXM6IHIxMSwgUTogZjcgfVt0MTBdIHx8IFN0cmluZyh0MTAgfHwgIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCAiIik7CiAgICAgIH0sIHU6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQxMDsKICAgICAgfSB9LCBnNCA9ICJlbiIsIEQ0ID0ge307CiAgICAgIEQ0W2c0XSA9IE0zOwogICAgICB2YXIgcDcgPSAiJGlzRGF5anNPYmplY3QiLCBTNSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB0MTAgaW5zdGFuY2VvZiBfNCB8fCAhKCF0MTAgfHwgIXQxMFtwN10pOwogICAgICB9LCB3MyA9IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCwgcjEyKSB7CiAgICAgICAgdmFyIGkxMjsKICAgICAgICBpZiAoIWUxMikgcmV0dXJuIGc0OwogICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZTEyKSB7CiAgICAgICAgICB2YXIgczEwID0gZTEyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBENFtzMTBdICYmIChpMTIgPSBzMTApLCBuMTQgJiYgKEQ0W3MxMF0gPSBuMTQsIGkxMiA9IHMxMCk7CiAgICAgICAgICB2YXIgdTggPSBlMTIuc3BsaXQoIi0iKTsKICAgICAgICAgIGlmICghaTEyICYmIHU4Lmxlbmd0aCA+IDEpIHJldHVybiB0MTAodThbMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgYTYgPSBlMTIubmFtZTsKICAgICAgICAgIEQ0W2E2XSA9IGUxMiwgaTEyID0gYTY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAhcjEyICYmIGkxMiAmJiAoZzQgPSBpMTIpLCBpMTIgfHwgIXIxMiAmJiBnNDsKICAgICAgfSwgTzIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIGlmIChTNSh0MTApKSByZXR1cm4gdDEwLmNsb25lKCk7CiAgICAgICAgdmFyIG4xNCA9ICJvYmplY3QiID09IHR5cGVvZiBlMTIgPyBlMTIgOiB7fTsKICAgICAgICByZXR1cm4gbjE0LmRhdGUgPSB0MTAsIG4xNC5hcmdzID0gYXJndW1lbnRzLCBuZXcgXzQobjE0KTsKICAgICAgfSwgYjUgPSB2NTsKICAgICAgYjUubCA9IHczLCBiNS5pID0gUzUsIGI1LncgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIHJldHVybiBPMih0MTAsIHsgbG9jYWxlOiBlMTIuJEwsIHV0YzogZTEyLiR1LCB4OiBlMTIuJHgsICRvZmZzZXQ6IGUxMi4kb2Zmc2V0IH0pOwogICAgICB9OwogICAgICB2YXIgXzQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gTTQodDEwKSB7CiAgICAgICAgICB0aGlzLiRMID0gdzModDEwLmxvY2FsZSwgbnVsbCwgdHJ1ZSksIHRoaXMucGFyc2UodDEwKSwgdGhpcy4keCA9IHRoaXMuJHggfHwgdDEwLnggfHwge30sIHRoaXNbcDddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG03ID0gTTQucHJvdG90eXBlOwogICAgICAgIHJldHVybiBtNy5wYXJzZSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgdGhpcy4kZCA9IChmdW5jdGlvbih0MTEpIHsKICAgICAgICAgICAgdmFyIGUxMiA9IHQxMS5kYXRlLCBuMTQgPSB0MTEudXRjOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gZTEyKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgICAgICAgICAgIGlmIChiNS51KGUxMikpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgICAgaWYgKGUxMiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgRGF0ZShlMTIpOwogICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUxMiAmJiAhL1okL2kudGVzdChlMTIpKSB7CiAgICAgICAgICAgICAgdmFyIHIxMiA9IGUxMi5tYXRjaCgkMyk7CiAgICAgICAgICAgICAgaWYgKHIxMikgewogICAgICAgICAgICAgICAgdmFyIGkxMiA9IHIxMlsyXSAtIDEgfHwgMCwgczEwID0gKHIxMls3XSB8fCAiMCIpLnN1YnN0cmluZygwLCAzKTsKICAgICAgICAgICAgICAgIHJldHVybiBuMTQgPyBuZXcgRGF0ZShEYXRlLlVUQyhyMTJbMV0sIGkxMiwgcjEyWzNdIHx8IDEsIHIxMls0XSB8fCAwLCByMTJbNV0gfHwgMCwgcjEyWzZdIHx8IDAsIHMxMCkpIDogbmV3IERhdGUocjEyWzFdLCBpMTIsIHIxMlszXSB8fCAxLCByMTJbNF0gfHwgMCwgcjEyWzVdIHx8IDAsIHIxMls2XSB8fCAwLCBzMTApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZTEyKTsKICAgICAgICAgIH0pKHQxMCksIHRoaXMuaW5pdCgpOwogICAgICAgIH0sIG03LmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciB0MTAgPSB0aGlzLiRkOwogICAgICAgICAgdGhpcy4keSA9IHQxMC5nZXRGdWxsWWVhcigpLCB0aGlzLiRNID0gdDEwLmdldE1vbnRoKCksIHRoaXMuJEQgPSB0MTAuZ2V0RGF0ZSgpLCB0aGlzLiRXID0gdDEwLmdldERheSgpLCB0aGlzLiRIID0gdDEwLmdldEhvdXJzKCksIHRoaXMuJG0gPSB0MTAuZ2V0TWludXRlcygpLCB0aGlzLiRzID0gdDEwLmdldFNlY29uZHMoKSwgdGhpcy4kbXMgPSB0MTAuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgICAgICAgfSwgbTcuJHV0aWxzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYjU7CiAgICAgICAgfSwgbTcuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICEodGhpcy4kZC50b1N0cmluZygpID09PSBsNik7CiAgICAgICAgfSwgbTcuaXNTYW1lID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSBPMih0MTApOwogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihlMTIpIDw9IG4xNCAmJiBuMTQgPD0gdGhpcy5lbmRPZihlMTIpOwogICAgICAgIH0sIG03LmlzQWZ0ZXIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgcmV0dXJuIE8yKHQxMCkgPCB0aGlzLnN0YXJ0T2YoZTEyKTsKICAgICAgICB9LCBtNy5pc0JlZm9yZSA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbmRPZihlMTIpIDwgTzIodDEwKTsKICAgICAgICB9LCBtNy4kZyA9IGZ1bmN0aW9uKHQxMCwgZTEyLCBuMTQpIHsKICAgICAgICAgIHJldHVybiBiNS51KHQxMCkgPyB0aGlzW2UxMl0gOiB0aGlzLnNldChuMTQsIHQxMCk7CiAgICAgICAgfSwgbTcudW5peCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxZTMpOwogICAgICAgIH0sIG03LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLmdldFRpbWUoKTsKICAgICAgICB9LCBtNy5zdGFydE9mID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLCByMTIgPSAhIWI1LnUoZTEyKSB8fCBlMTIsIGY4ID0gYjUucCh0MTApLCBsNyA9IGZ1bmN0aW9uKHQxMSwgZTEzKSB7CiAgICAgICAgICAgIHZhciBpMTIgPSBiNS53KG4xNC4kdSA/IERhdGUuVVRDKG4xNC4keSwgZTEzLCB0MTEpIDogbmV3IERhdGUobjE0LiR5LCBlMTMsIHQxMSksIG4xNCk7CiAgICAgICAgICAgIHJldHVybiByMTIgPyBpMTIgOiBpMTIuZW5kT2YoYTUpOwogICAgICAgICAgfSwgJDQgPSBmdW5jdGlvbih0MTEsIGUxMykgewogICAgICAgICAgICByZXR1cm4gYjUudyhuMTQudG9EYXRlKClbdDExXS5hcHBseShuMTQudG9EYXRlKCJzIiksIChyMTIgPyBbMCwgMCwgMCwgMF0gOiBbMjMsIDU5LCA1OSwgOTk5XSkuc2xpY2UoZTEzKSksIG4xNCk7CiAgICAgICAgICB9LCB5NiA9IHRoaXMuJFcsIE01ID0gdGhpcy4kTSwgbTggPSB0aGlzLiRELCB2NiA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKTsKICAgICAgICAgIHN3aXRjaCAoZjgpIHsKICAgICAgICAgICAgY2FzZSBoOToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgMCkgOiBsNygzMSwgMTEpOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgTTUpIDogbDcoMCwgTTUgKyAxKTsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgdmFyIGc1ID0gdGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0IHx8IDAsIEQ1ID0gKHk2IDwgZzUgPyB5NiArIDcgOiB5NikgLSBnNTsKICAgICAgICAgICAgICByZXR1cm4gbDcocjEyID8gbTggLSBENSA6IG04ICsgKDYgLSBENSksIE01KTsKICAgICAgICAgICAgY2FzZSBhNToKICAgICAgICAgICAgY2FzZSBkNjoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiSG91cnMiLCAwKTsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiTWludXRlcyIsIDEpOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJTZWNvbmRzIiwgMik7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJNaWxsaXNlY29uZHMiLCAzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0sIG03LmVuZE9mID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHQxMCwgZmFsc2UpOwogICAgICAgIH0sIG03LiRzZXQgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xNCwgbzE0ID0gYjUucCh0MTApLCBmOCA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKSwgbDcgPSAobjE0ID0ge30sIG4xNFthNV0gPSBmOCArICJEYXRlIiwgbjE0W2Q2XSA9IGY4ICsgIkRhdGUiLCBuMTRbYzExXSA9IGY4ICsgIk1vbnRoIiwgbjE0W2g5XSA9IGY4ICsgIkZ1bGxZZWFyIiwgbjE0W3U3XSA9IGY4ICsgIkhvdXJzIiwgbjE0W3M5XSA9IGY4ICsgIk1pbnV0ZXMiLCBuMTRbaTExXSA9IGY4ICsgIlNlY29uZHMiLCBuMTRbcjExXSA9IGY4ICsgIk1pbGxpc2Vjb25kcyIsIG4xNClbbzE0XSwgJDQgPSBvMTQgPT09IGE1ID8gdGhpcy4kRCArIChlMTIgLSB0aGlzLiRXKSA6IGUxMjsKICAgICAgICAgIGlmIChvMTQgPT09IGMxMSB8fCBvMTQgPT09IGg5KSB7CiAgICAgICAgICAgIHZhciB5NiA9IHRoaXMuY2xvbmUoKS5zZXQoZDYsIDEpOwogICAgICAgICAgICB5Ni4kZFtsN10oJDQpLCB5Ni5pbml0KCksIHRoaXMuJGQgPSB5Ni5zZXQoZDYsIE1hdGgubWluKHRoaXMuJEQsIHk2LmRheXNJbk1vbnRoKCkpKS4kZDsKICAgICAgICAgIH0gZWxzZSBsNyAmJiB0aGlzLiRkW2w3XSgkNCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KCksIHRoaXM7CiAgICAgICAgfSwgbTcuc2V0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuJHNldCh0MTAsIGUxMik7CiAgICAgICAgfSwgbTcuZ2V0ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpc1tiNS5wKHQxMCldKCk7CiAgICAgICAgfSwgbTcuYWRkID0gZnVuY3Rpb24ocjEyLCBmOCkgewogICAgICAgICAgdmFyIGQ3LCBsNyA9IHRoaXM7CiAgICAgICAgICByMTIgPSBOdW1iZXIocjEyKTsKICAgICAgICAgIHZhciAkNCA9IGI1LnAoZjgpLCB5NiA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgICB2YXIgZTEyID0gTzIobDcpOwogICAgICAgICAgICByZXR1cm4gYjUudyhlMTIuZGF0ZShlMTIuZGF0ZSgpICsgTWF0aC5yb3VuZCh0MTAgKiByMTIpKSwgbDcpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmICgkNCA9PT0gYzExKSByZXR1cm4gdGhpcy5zZXQoYzExLCB0aGlzLiRNICsgcjEyKTsKICAgICAgICAgIGlmICgkNCA9PT0gaDkpIHJldHVybiB0aGlzLnNldChoOSwgdGhpcy4keSArIHIxMik7CiAgICAgICAgICBpZiAoJDQgPT09IGE1KSByZXR1cm4geTYoMSk7CiAgICAgICAgICBpZiAoJDQgPT09IG8xMykgcmV0dXJuIHk2KDcpOwogICAgICAgICAgdmFyIE01ID0gKGQ3ID0ge30sIGQ3W3M5XSA9IGUxMSwgZDdbdTddID0gbjEzLCBkN1tpMTFdID0gdDksIGQ3KVskNF0gfHwgMSwgbTggPSB0aGlzLiRkLmdldFRpbWUoKSArIHIxMiAqIE01OwogICAgICAgICAgcmV0dXJuIGI1LncobTgsIHRoaXMpOwogICAgICAgIH0sIG03LnN1YnRyYWN0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgtMSAqIHQxMCwgZTEyKTsKICAgICAgICB9LCBtNy5mb3JtYXQgPSBmdW5jdGlvbih0MTApIHsKICAgICAgICAgIHZhciBlMTIgPSB0aGlzLCBuMTQgPSB0aGlzLiRsb2NhbGUoKTsKICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHJldHVybiBuMTQuaW52YWxpZERhdGUgfHwgbDY7CiAgICAgICAgICB2YXIgcjEyID0gdDEwIHx8ICJZWVlZLU1NLUREVEhIOm1tOnNzWiIsIGkxMiA9IGI1LnoodGhpcyksIHMxMCA9IHRoaXMuJEgsIHU4ID0gdGhpcy4kbSwgYTYgPSB0aGlzLiRNLCBvMTQgPSBuMTQud2Vla2RheXMsIGMxMiA9IG4xNC5tb250aHMsIGY4ID0gbjE0Lm1lcmlkaWVtLCBoMTAgPSBmdW5jdGlvbih0MTEsIG4xNSwgaTEzLCBzMTEpIHsKICAgICAgICAgICAgcmV0dXJuIHQxMSAmJiAodDExW24xNV0gfHwgdDExKGUxMiwgcjEyKSkgfHwgaTEzW24xNV0uc2xpY2UoMCwgczExKTsKICAgICAgICAgIH0sIGQ3ID0gZnVuY3Rpb24odDExKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCAlIDEyIHx8IDEyLCB0MTEsICIwIik7CiAgICAgICAgICB9LCAkNCA9IGY4IHx8IGZ1bmN0aW9uKHQxMSwgZTEzLCBuMTUpIHsKICAgICAgICAgICAgdmFyIHIxMyA9IHQxMSA8IDEyID8gIkFNIiA6ICJQTSI7CiAgICAgICAgICAgIHJldHVybiBuMTUgPyByMTMudG9Mb3dlckNhc2UoKSA6IHIxMzsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gcjEyLnJlcGxhY2UoeTUsIChmdW5jdGlvbih0MTEsIHIxMykgewogICAgICAgICAgICByZXR1cm4gcjEzIHx8IChmdW5jdGlvbih0MTIpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHQxMikgewogICAgICAgICAgICAgICAgY2FzZSAiWVkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUxMi4keSkuc2xpY2UoLTIpOwogICAgICAgICAgICAgICAgY2FzZSAiWVlZWSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKGUxMi4keSwgNCwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYTYgKyAxOwogICAgICAgICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhhNiArIDEsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC5tb250aHNTaG9ydCwgYTYsIGMxMiwgMyk7CiAgICAgICAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChjMTIsIGE2KTsKICAgICAgICAgICAgICAgIGNhc2UgIkQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZTEyLiREOwogICAgICAgICAgICAgICAgY2FzZSAiREQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJEQsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJFcpOwogICAgICAgICAgICAgICAgY2FzZSAiZGQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC53ZWVrZGF5c01pbiwgZTEyLiRXLCBvMTQsIDIpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChuMTQud2Vla2RheXNTaG9ydCwgZTEyLiRXLCBvMTQsIDMpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBvMTRbZTEyLiRXXTsKICAgICAgICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMxMCk7CiAgICAgICAgICAgICAgICBjYXNlICJISCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZDcoMSk7CiAgICAgICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBkNygyKTsKICAgICAgICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgICAgICAgICByZXR1cm4gJDQoczEwLCB1OCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICQ0KHMxMCwgdTgsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHU4KTsKICAgICAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnModTgsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHMpOwogICAgICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHMsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJG1zLCAzLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBpMTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KSh0MTEpIHx8IGkxMi5yZXBsYWNlKCI6IiwgIiIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0sIG03LnV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDE1ICogLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpOwogICAgICAgIH0sIG03LmRpZmYgPSBmdW5jdGlvbihyMTIsIGQ3LCBsNykgewogICAgICAgICAgdmFyICQ0LCB5NiA9IHRoaXMsIE01ID0gYjUucChkNyksIG04ID0gTzIocjEyKSwgdjYgPSAobTgudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIGUxMSwgZzUgPSB0aGlzIC0gbTgsIEQ1ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5tKHk2LCBtOCk7CiAgICAgICAgICB9OwogICAgICAgICAgc3dpdGNoIChNNSkgewogICAgICAgICAgICBjYXNlIGg5OgogICAgICAgICAgICAgICQ0ID0gRDUoKSAvIDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICAkNCA9IEQ1KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZjc6CiAgICAgICAgICAgICAgJDQgPSBENSgpIC8gMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA2MDQ4ZTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgYTU6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA4NjRlNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICAkNCA9IGc1IC8gbjEzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgICQ0ID0gZzUgLyBlMTE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgICQ0ID0gZzUgLyB0OTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAkNCA9IGc1OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGw3ID8gJDQgOiBiNS5hKCQ0KTsKICAgICAgICB9LCBtNy5kYXlzSW5Nb250aCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZW5kT2YoYzExKS4kRDsKICAgICAgICB9LCBtNy4kbG9jYWxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gRDRbdGhpcy4kTF07CiAgICAgICAgfSwgbTcubG9jYWxlID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIGlmICghdDEwKSByZXR1cm4gdGhpcy4kTDsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLmNsb25lKCksIHIxMiA9IHczKHQxMCwgZTEyLCB0cnVlKTsKICAgICAgICAgIHJldHVybiByMTIgJiYgKG4xNC4kTCA9IHIxMiksIG4xNDsKICAgICAgICB9LCBtNy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGI1LncodGhpcy4kZCwgdGhpcyk7CiAgICAgICAgfSwgbTcudG9EYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpOwogICAgICAgIH0sIG03LnRvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDsKICAgICAgICB9LCBtNy50b0lTT1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKTsKICAgICAgICB9LCBtNy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKTsKICAgICAgICB9LCBNNDsKICAgICAgfSkoKSwgazQgPSBfNC5wcm90b3R5cGU7CiAgICAgIHJldHVybiBPMi5wcm90b3R5cGUgPSBrNCwgW1siJG1zIiwgcjExXSwgWyIkcyIsIGkxMV0sIFsiJG0iLCBzOV0sIFsiJEgiLCB1N10sIFsiJFciLCBhNV0sIFsiJE0iLCBjMTFdLCBbIiR5IiwgaDldLCBbIiREIiwgZDZdXS5mb3JFYWNoKChmdW5jdGlvbih0MTApIHsKICAgICAgICBrNFt0MTBbMV1dID0gZnVuY3Rpb24oZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kZyhlMTIsIHQxMFswXSwgdDEwWzFdKTsKICAgICAgICB9OwogICAgICB9KSksIE8yLmV4dGVuZCA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgcmV0dXJuIHQxMC4kaSB8fCAodDEwKGUxMiwgXzQsIE8yKSwgdDEwLiRpID0gdHJ1ZSksIE8yOwogICAgICB9LCBPMi5sb2NhbGUgPSB3MywgTzIuaXNEYXlqcyA9IFM1LCBPMi51bml4ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIE8yKDFlMyAqIHQxMCk7CiAgICAgIH0sIE8yLmVuID0gRDRbZzRdLCBPMi5McyA9IEQ0LCBPMi5wID0ge30sIE8yOwogICAgfSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMKdmFyIHJlcXVpcmVfaXNUb2RheSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgIShmdW5jdGlvbihlMTEsIG8xMykgewogICAgICAib2JqZWN0IiA9PSB0eXBlb2YgZXhwb3J0cyAmJiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgbW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgPSBvMTMoKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKG8xMykgOiAoZTExID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogZTExIHx8IHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5ID0gbzEzKCk7CiAgICB9KShleHBvcnRzLCAoZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUxMSwgbzEzLCB0OSkgewogICAgICAgIG8xMy5wcm90b3R5cGUuaXNUb2RheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGUxMiA9ICJZWVlZLU1NLUREIiwgbzE0ID0gdDkoKTsKICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChlMTIpID09PSBvMTQuZm9ybWF0KGUxMik7CiAgICAgICAgfTsKICAgICAgfTsKICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZU51bWJlcihtaWxsaXNlY29uZHMyKSB7CiAgcmV0dXJuIHsKICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAvIDg2NGU1KSwKICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyAzNmU1ICUgMjQpLAogICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gNmU0ICUgNjApLAogICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gMWUzICUgNjApLAogICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgJSAxZTMpLAogICAgbWljcm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzMiAqIDFlMykgJSAxZTMpLAogICAgbmFub3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMyICogMWU2KSAlIDFlMykKICB9Owp9CmZ1bmN0aW9uIHBhcnNlQmlnaW50KG1pbGxpc2Vjb25kczIpIHsKICByZXR1cm4gewogICAgZGF5czogbWlsbGlzZWNvbmRzMiAvIDg2NDAwMDAwbiwKICAgIGhvdXJzOiBtaWxsaXNlY29uZHMyIC8gMzYwMDAwMG4gJSAyNG4sCiAgICBtaW51dGVzOiBtaWxsaXNlY29uZHMyIC8gNjAwMDBuICUgNjBuLAogICAgc2Vjb25kczogbWlsbGlzZWNvbmRzMiAvIDEwMDBuICUgNjBuLAogICAgbWlsbGlzZWNvbmRzOiBtaWxsaXNlY29uZHMyICUgMTAwMG4sCiAgICBtaWNyb3NlY29uZHM6IDBuLAogICAgbmFub3NlY29uZHM6IDBuCiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgc3dpdGNoICh0eXBlb2YgbWlsbGlzZWNvbmRzMikgewogICAgY2FzZSAibnVtYmVyIjogewogICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kczIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAiYmlnaW50IjogewogICAgICByZXR1cm4gcGFyc2VCaWdpbnQobWlsbGlzZWNvbmRzMik7CiAgICB9CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTsKfQp2YXIgdG9aZXJvSWZJbmZpbml0eTsKdmFyIGluaXRfcGFyc2VfbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXJzZS1tc0A0LjAuMC9ub2RlX21vZHVsZXMvcGFyc2UtbXMvaW5kZXguanMiKCkgewogICAgdG9aZXJvSWZJbmZpbml0eSA9ICh2YWx1ZTIpID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZTIpID8gdmFsdWUyIDogMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1tc0A5LjMuMC9ub2RlX21vZHVsZXMvcHJldHR5LW1zL2luZGV4LmpzCmZ1bmN0aW9uIHByZXR0eU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyLCBvcHRpb25zKSB7CiAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgbWlsbGlzZWNvbmRzMiA9PT0gImJpZ2ludCI7CiAgaWYgKCFpc0JpZ0ludCAmJiAhTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZpbml0ZSBudW1iZXIgb3IgYmlnaW50Iik7CiAgfQogIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjb25zdCBzaWduID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAiLSIgOiAiIjsKICBtaWxsaXNlY29uZHMyID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAtbWlsbGlzZWNvbmRzMiA6IG1pbGxpc2Vjb25kczI7CiAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgb3B0aW9ucy5jb21wYWN0ID0gZmFsc2U7CiAgICBvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy5zZXBhcmF0ZU1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy52ZXJib3NlID0gZmFsc2U7CiAgfQogIGlmIChvcHRpb25zLmNvbXBhY3QpIHsKICAgIG9wdGlvbnMudW5pdENvdW50ID0gMTsKICAgIG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwOwogICAgb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID0gMDsKICB9CiAgbGV0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGZsb29yRGVjaW1hbHMgPSAodmFsdWUyLCBkZWNpbWFsRGlnaXRzKSA9PiB7CiAgICBjb25zdCBmbG9vcmVkSW50ZXJpbVZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZTIgKiAxMCAqKiBkZWNpbWFsRGlnaXRzICsgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04pOwogICAgY29uc3QgZmxvb3JlZFZhbHVlID0gTWF0aC5yb3VuZChmbG9vcmVkSW50ZXJpbVZhbHVlKSAvIDEwICoqIGRlY2ltYWxEaWdpdHM7CiAgICByZXR1cm4gZmxvb3JlZFZhbHVlLnRvRml4ZWQoZGVjaW1hbERpZ2l0cyk7CiAgfTsKICBjb25zdCBhZGQzID0gKHZhbHVlMiwgbG9uZywgc2hvcnQsIHZhbHVlU3RyaW5nKSA9PiB7CiAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgfHwgIW9wdGlvbnMuY29sb25Ob3RhdGlvbikgJiYgaXNaZXJvKHZhbHVlMikgJiYgIShvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09ICJtIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFsdWVTdHJpbmcgPz89IFN0cmluZyh2YWx1ZTIpOwogICAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgICBjb25zdCB3aG9sZURpZ2l0cyA9IHZhbHVlU3RyaW5nLmluY2x1ZGVzKCIuIikgPyB2YWx1ZVN0cmluZy5zcGxpdCgiLiIpWzBdLmxlbmd0aCA6IHZhbHVlU3RyaW5nLmxlbmd0aDsKICAgICAgY29uc3QgbWluTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyAyIDogMTsKICAgICAgdmFsdWVTdHJpbmcgPSAiMCIucmVwZWF0KE1hdGgubWF4KDAsIG1pbkxlbmd0aCAtIHdob2xlRGlnaXRzKSkgKyB2YWx1ZVN0cmluZzsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlU3RyaW5nICs9IG9wdGlvbnMudmVyYm9zZSA/ICIgIiArIHBsdXJhbGl6ZShsb25nLCB2YWx1ZTIpIDogc2hvcnQ7CiAgICB9CiAgICByZXN1bHQucHVzaCh2YWx1ZVN0cmluZyk7CiAgfTsKICBjb25zdCBwYXJzZWQgPSBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKTsKICBjb25zdCBkYXlzMiA9IEJpZ0ludChwYXJzZWQuZGF5cyk7CiAgaWYgKG9wdGlvbnMuaGlkZVllYXJBbmREYXlzKSB7CiAgICBhZGQzKEJpZ0ludChkYXlzMikgKiAyNG4gKyBCaWdJbnQocGFyc2VkLmhvdXJzKSwgImhvdXIiLCAiaCIpOwogIH0gZWxzZSB7CiAgICBpZiAob3B0aW9ucy5oaWRlWWVhcikgewogICAgICBhZGQzKGRheXMyLCAiZGF5IiwgImQiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZDMoZGF5czIgLyAzNjVuLCAieWVhciIsICJ5Iik7CiAgICAgIGFkZDMoZGF5czIgJSAzNjVuLCAiZGF5IiwgImQiKTsKICAgIH0KICAgIGFkZDMoTnVtYmVyKHBhcnNlZC5ob3VycyksICJob3VyIiwgImgiKTsKICB9CiAgYWRkMyhOdW1iZXIocGFyc2VkLm1pbnV0ZXMpLCAibWludXRlIiwgIm0iKTsKICBpZiAoIW9wdGlvbnMuaGlkZVNlY29uZHMpIHsKICAgIGlmIChvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzIHx8IG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzIHx8ICFvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgbWlsbGlzZWNvbmRzMiA8IDFlMyAmJiAhb3B0aW9ucy5zdWJTZWNvbmRzQXNEZWNpbWFscykgewogICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5zZWNvbmRzKTsKICAgICAgY29uc3QgbWlsbGlzZWNvbmRzMyA9IE51bWJlcihwYXJzZWQubWlsbGlzZWNvbmRzKTsKICAgICAgY29uc3QgbWljcm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5taWNyb3NlY29uZHMpOwogICAgICBjb25zdCBuYW5vc2Vjb25kcyA9IE51bWJlcihwYXJzZWQubmFub3NlY29uZHMpOwogICAgICBhZGQzKHNlY29uZHMsICJzZWNvbmQiLCAicyIpOwogICAgICBpZiAob3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMpIHsKICAgICAgICBhZGQzKG1pbGxpc2Vjb25kczMsICJtaWxsaXNlY29uZCIsICJtcyIpOwogICAgICAgIGFkZDMobWljcm9zZWNvbmRzLCAibWljcm9zZWNvbmQiLCAiXHhCNXMiKTsKICAgICAgICBhZGQzKG5hbm9zZWNvbmRzLCAibmFub3NlY29uZCIsICJucyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0FuZEJlbG93ID0gbWlsbGlzZWNvbmRzMyArIG1pY3Jvc2Vjb25kcyAvIDFlMyArIG5hbm9zZWNvbmRzIC8gMWU2OwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSB0eXBlb2Ygb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA6IDA7CiAgICAgICAgY29uc3Qgcm91bmRlZE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kc0FuZEJlbG93ID49IDEgPyBNYXRoLnJvdW5kKG1pbGxpc2Vjb25kc0FuZEJlbG93KSA6IE1hdGguY2VpbChtaWxsaXNlY29uZHNBbmRCZWxvdyk7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzU3RyaW5nID0gbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA/IG1pbGxpc2Vjb25kc0FuZEJlbG93LnRvRml4ZWQobWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cykgOiByb3VuZGVkTWlsbGlzZWNvbmRzOwogICAgICAgIGFkZDMoCiAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdChtaWxsaXNlY29uZHNTdHJpbmcpLAogICAgICAgICAgIm1pbGxpc2Vjb25kIiwKICAgICAgICAgICJtcyIsCiAgICAgICAgICBtaWxsaXNlY29uZHNTdHJpbmcKICAgICAgICApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzZWNvbmRzID0gKGlzQmlnSW50ID8gTnVtYmVyKG1pbGxpc2Vjb25kczIgJSBPTkVfREFZX0lOX01JTExJU0VDT05EUykgOiBtaWxsaXNlY29uZHMyKSAvIDFlMyAlIDYwOwogICAgICBjb25zdCBzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zLnNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgOiAxOwogICAgICBjb25zdCBzZWNvbmRzRml4ZWQgPSBmbG9vckRlY2ltYWxzKHNlY29uZHMsIHNlY29uZHNEZWNpbWFsRGlnaXRzKTsKICAgICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IG9wdGlvbnMua2VlcERlY2ltYWxzT25XaG9sZVNlY29uZHMgPyBzZWNvbmRzRml4ZWQgOiBzZWNvbmRzRml4ZWQucmVwbGFjZSgvXC4wKyQvLCAiIik7CiAgICAgIGFkZDMoTnVtYmVyLnBhcnNlRmxvYXQoc2Vjb25kc1N0cmluZyksICJzZWNvbmQiLCAicyIsIHNlY29uZHNTdHJpbmcpOwogICAgfQogIH0KICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHNpZ24gKyAiMCIgKyAob3B0aW9ucy52ZXJib3NlID8gIiBtaWxsaXNlY29uZHMiIDogIm1zIik7CiAgfQogIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuY29sb25Ob3RhdGlvbiA/ICI6IiA6ICIgIjsKICBpZiAodHlwZW9mIG9wdGlvbnMudW5pdENvdW50ID09PSAibnVtYmVyIikgewogICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIE1hdGgubWF4KG9wdGlvbnMudW5pdENvdW50LCAxKSk7CiAgfQogIHJldHVybiBzaWduICsgcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTsKfQp2YXIgaXNaZXJvLCBwbHVyYWxpemUsIFNFQ09ORF9ST1VORElOR19FUFNJTE9OLCBPTkVfREFZX0lOX01JTExJU0VDT05EUzsKdmFyIGluaXRfcHJldHR5X21zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMiKCkgewogICAgaW5pdF9wYXJzZV9tcygpOwogICAgaXNaZXJvID0gKHZhbHVlMikgPT4gdmFsdWUyID09PSAwIHx8IHZhbHVlMiA9PT0gMG47CiAgICBwbHVyYWxpemUgPSAod29yZCwgY291bnQyKSA9PiBjb3VudDIgPT09IDEgfHwgY291bnQyID09PSAxbiA/IHdvcmQgOiBgJHt3b3JkfXNgOwogICAgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04gPSAxZS03OwogICAgT05FX0RBWV9JTl9NSUxMSVNFQ09ORFMgPSAyNG4gKiA2MG4gKiA2MG4gKiAxMDAwbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLnBsdWdpbnMuanMKdmFyIGltcG9ydF9kYXlqcywgaW1wb3J0X2lzVG9kYXk7CnZhciBpbml0X3NtYXJ0dGltZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfY3JvbmVyKCk7CiAgICBpbml0X2RhdGVfZm5zKCk7CiAgICBpbXBvcnRfZGF5anMgPSBfX3RvRVNNKHJlcXVpcmVfZGF5anNfbWluKCksIDEpOwogICAgaW1wb3J0X2lzVG9kYXkgPSBfX3RvRVNNKHJlcXVpcmVfaXNUb2RheSgpLCAxKTsKICAgIGluaXRfcHJldHR5X21zKCk7CiAgICBpbXBvcnRfZGF5anMuZGVmYXVsdC5leHRlbmQoaW1wb3J0X2lzVG9kYXkuZGVmYXVsdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMKdmFyIENyb25QYXJzZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgQ3JvblBhcnNlciA9IGNsYXNzIHsKICAgICAgZ2V0IGNyb25BcnJheSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5jcm9uRXhwcmVzc2lvbi5zcGxpdCgiICIpOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKGNyb25FeHByZXNzaW9uQXJnKSB7CiAgICAgICAgdGhpcy5jcm9uRXhwcmVzc2lvbiA9IGNyb25FeHByZXNzaW9uQXJnOwogICAgICAgIGlmICh0aGlzLmNyb25BcnJheS5sZW5ndGggPCA2KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXJzZXIgbmVlZHMgc2Vjb25kIGxldmVsIGFjY3VyYWN5Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldE5leHRQYXJ0TWF0Y2goY3JvblBhcnQsIHN0YXJ0VmFsdWUsIG1vZHVsb0FyZykgewogICAgICAgIGlmIChjcm9uUGFydCA9PT0gIioiKSB7CiAgICAgICAgICByZXR1cm4gc3RhcnRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNyb25QYXJ0LmluY2x1ZGVzKCIvIikpIHsKICAgICAgICAgIGNvbnN0IGV2ZXJ5MyA9IHBhcnNlSW50KGNyb25QYXJ0LnNwbGl0KCIvIilbMV0sIDEwKTsKICAgICAgICAgIGNvbnN0IGZpbmRFdmVuTWF0Y2ggPSAocmVjdXJzaW9uU3RhcnRBcmcpID0+IHsKICAgICAgICAgICAgaWYgKHJlY3Vyc2lvblN0YXJ0QXJnICUgZXZlcnkzID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2lvblN0YXJ0QXJnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmaW5kRXZlbk1hdGNoKHJlY3Vyc2lvblN0YXJ0QXJnICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmluZEV2ZW5NYXRjaChzdGFydFZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnNlSW50KGNyb25QYXJ0LCAxMCkgfHwgY3JvblBhcnQgPT09ICIwIikgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gcGFyc2VJbnQoY3JvblBhcnQsIDEwKTsKICAgICAgICAgIHJldHVybiBtYXRjaDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1zVG9OZXh0KCkgewogICAgICAgIGNvbnN0IGNyb25BcnJheSA9IHRoaXMuY3JvbkFycmF5OwogICAgICAgIGNvbnN0IHNlY29uZEV4cHJlc3Npb24gPSBjcm9uQXJyYXlbMF07CiAgICAgICAgY29uc3QgbWludXRlRXhwcmVzc2lvbiA9IGNyb25BcnJheVsxXTsKICAgICAgICBjb25zdCBob3VyRXhwcmVzc2lvbiA9IGNyb25BcnJheVsyXTsKICAgICAgICBjb25zdCBkYXlFeHByZXNzaW9uID0gY3JvbkFycmF5WzNdOwogICAgICAgIGNvbnN0IG1vbnRoRXhwcmVzc2lvbiA9IGNyb25BcnJheVs0XTsKICAgICAgICBjb25zdCB5ZWFyRXhwcmVzc2lvbiA9IGNyb25BcnJheVs1XTsKICAgICAgICBsZXQgY3VycmVudERhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudFNlY29uZCA9IGN1cnJlbnREYXRlLmdldFNlY29uZHMoKSArIDE7CiAgICAgICAgbGV0IGN1cnJlbnRNaW51dGUgPSBjdXJyZW50RGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgbGV0IGN1cnJlbnRIb3VyID0gY3VycmVudERhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgY3VycmVudERheSA9IGN1cnJlbnREYXRlLmdldERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudE1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IHRhcmdldFNlY29uZCA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChzZWNvbmRFeHByZXNzaW9uLCBjdXJyZW50U2Vjb25kLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldFNlY29uZCA8IGN1cnJlbnRTZWNvbmQpIHsKICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSAoY3VycmVudE1pbnV0ZSArIDEpICUgNTk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRhcmdldE1pbnV0ZSA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChtaW51dGVFeHByZXNzaW9uLCBjdXJyZW50TWludXRlLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldE1pbnV0ZSA8IGN1cnJlbnRNaW51dGUpIHsKICAgICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICsgMSkgJSAyMzsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0SG91ciA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChob3VyRXhwcmVzc2lvbiwgY3VycmVudEhvdXIsIDIzKTsKICAgICAgICBpZiAodGFyZ2V0SG91ciA8IGN1cnJlbnRIb3VyKSB7CiAgICAgICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDMwOwogICAgICAgIH0KICAgICAgICBjb25zdCB0YXJnZXREYXkgPSBjdXJyZW50RGF5OwogICAgICAgIGlmICh0YXJnZXREYXkgPCBjdXJyZW50RGF5KSB7CiAgICAgICAgICBjdXJyZW50TW9udGggPSAoY3VycmVudE1vbnRoICsgMSkgJSAxMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0TW9udGggPSBjdXJyZW50TW9udGg7CiAgICAgICAgaWYgKHRhcmdldE1vbnRoIDwgY3VycmVudE1vbnRoKSB7CiAgICAgICAgICBjdXJyZW50WWVhciA9IGN1cnJlbnRZZWFyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGN1cnJlbnRZZWFyOwogICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBuZXcgRGF0ZSh0YXJnZXRZZWFyLCB0YXJnZXRNb250aCwgdGFyZ2V0RGF5LCB0YXJnZXRIb3VyLCB0YXJnZXRNaW51dGUsIHRhcmdldFNlY29uZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0VGltZSA9IHRhcmdldERhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiB0YXJnZXRUaW1lIC0gRGF0ZS5ub3coKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcwp2YXIgQ3JvbkpvYjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIoKTsKICAgIENyb25Kb2IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGNyb25NYW5hZ2VyLCBjcm9uRXhwcmVzc2lvbkFyZywgam9iRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnN0YXR1cyA9ICJpbml0aWFsIjsKICAgICAgICB0aGlzLm5leHRFeGVjdXRpb25Vbml4ID0gMDsKICAgICAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7CiAgICAgICAgdGhpcy5qb2JGdW5jdGlvbiA9IGpvYkZ1bmN0aW9uOwogICAgICAgIHRoaXMuY3JvblBhcnNlciA9IG5ldyBjcm9uZXJfZXhwb3J0cy5Dcm9uKGNyb25FeHByZXNzaW9uQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgY3JvbmpvYiBuZWVkcyB0byBiZSBleGVjdXRlZAogICAgICAgKi8KICAgICAgY2hlY2tFeGVjdXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPT09IDApIHsKICAgICAgICAgIHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgPiB0aGlzLm5leHRFeGVjdXRpb25Vbml4KSB7CiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpOwogICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKChlMTEpID0+IGNvbnNvbGUubG9nKGUxMSkpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7CiAgICAgIH0KICAgICAgZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSBEYXRlLm5vdygpICsgdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgdGhlIHRpbWUgdG8gbmV4dCBleGVjdXRpb24KICAgICAgICovCiAgICAgIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcwp2YXIgdW5pdHMsIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLCBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOwp2YXIgaW5pdF9zbWFydHRpbWVfdW5pdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICB1bml0cyA9IHsKICAgICAgeWVhcnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzMTU0ZTc7CiAgICAgIH0sCiAgICAgIG1vbnRoczogKHRpbWVzQXJnID0gMSkgPT4gewogICAgICAgIHJldHVybiB0aW1lc0FyZyAqIDI2MjhlNjsKICAgICAgfSwKICAgICAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA2MDQ4ZTU7CiAgICAgIH0sCiAgICAgIGRheXM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA4NjRlNTsKICAgICAgfSwKICAgICAgaG91cnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzNmU1OwogICAgICB9LAogICAgICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogNmU0OwogICAgICB9LAogICAgICBzZWNvbmRzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogMWUzOwogICAgICB9CiAgICB9OwogICAgZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzID0gKGNvbWJpbmF0aW9uQXJnKSA9PiB7CiAgICAgIGxldCB0aW1lSW5NaWxsaXNlY29uZHMgPSAwOwogICAgICBsZXQgYWRkTWlsbGlTZWNvbmRzID0gKG1pbGxpU2Vjb25kc0FyZykgPT4gewogICAgICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZzsKICAgICAgfTsKICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykgewogICAgICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRpbWVJbk1pbGxpc2Vjb25kczsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcgPSAobWlsbGlTZWNvbmRzQXJnKSA9PiB7CiAgICAgIHJldHVybiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlTZWNvbmRzQXJnKTsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lID0gKHRpbWVTdGFtcEFyZykgPT4gewogICAgICByZXR1cm4gZGF0ZV9mbnNfZXhwb3J0cy5mb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHRpbWVTdGFtcEFyZykpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMKdmFyIENyb25NYW5hZ2VyOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9ubWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9uam9iKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgQ3Jvbk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuY3JvbmpvYnMgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgfQogICAgICBhZGRDcm9uam9iKGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpIHsKICAgICAgICBjb25zdCBuZXdDcm9uSm9iID0gbmV3IENyb25Kb2IodGhpcywgY3JvbklkZW50aWZpZXJBcmcsIGNyb25GdW5jdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jcm9uam9icy5hZGQobmV3Q3JvbkpvYik7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIG5ld0Nyb25Kb2Iuc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld0Nyb25Kb2I7CiAgICAgIH0KICAgICAgcmVtb3ZlQ3JvbmpvYihjcm9uam9iQXJnKSB7CiAgICAgICAgY3JvbmpvYkFyZy5zdG9wKCk7CiAgICAgICAgdGhpcy5jcm9uam9icy5yZW1vdmUoY3JvbmpvYkFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgY3JvbmpvYgogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBydW5Dcm9uQ3ljbGUoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgwKTsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgbmV4dFJ1bm5pbmdDcm9uam9iOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLmNoZWNrRXhlY3V0aW9uKCk7CiAgICAgICAgICAgIGlmICghbmV4dFJ1bm5pbmdDcm9uam9iIHx8IGNyb25Kb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpIDwgbmV4dFJ1bm5pbmdDcm9uam9iLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSkgewogICAgICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYiA9IGNyb25Kb2I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChuZXh0UnVubmluZ0Nyb25qb2IpIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dChuZXh0UnVubmluZ0Nyb25qb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHtnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcodGhpcy5leGVjdXRpb25UaW1lb3V0LmdldFRpbWVMZWZ0KCkpfWApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgxZTMpOwogICAgICAgICAgICBjb25zb2xlLmxvZygibm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCIpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25UaW1lb3V0LnByb21pc2U7CiAgICAgICAgfSB3aGlsZSAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3BzIGFsbCBjcm9uam9icwogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIikgewogICAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3UgdHJpZWQgdG8gc3RvcCBhIENyb25NYW5hZ2VyIHRoYXQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLmApOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICBjcm9uLnN0b3AoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcwp2YXIgRXh0ZW5kZWREYXRlOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19leHRlbmRlZGRhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgRXh0ZW5kZWREYXRlID0gY2xhc3MgX0V4dGVuZGVkRGF0ZSBleHRlbmRzIERhdGUgewogICAgICAvLyBTVEFUSUMgZmFjdG9yaWVzCiAgICAgIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpU2Vjb25kcykgewogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShtaWxsaVNlY29uZHMpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tRGF0ZShkYXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKGRhdGVBcmcuZ2V0VGltZSgpKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShldXJvcGVhbkRhdGUpIHsKICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAvKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGUpOwogICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzNdKSwKICAgICAgICAgIC8vIHllYXIKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzJdKSAtIDEsCiAgICAgICAgICAvLyBtb250aAogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMV0pCiAgICAgICAgICAvLyBkYXkKICAgICAgICApOwogICAgICAgIGNvbnN0IHVuaXhNaWxsaSA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZSh1bml4TWlsbGkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIEV4dGVuZGVkIGRhdGUgZnJvbSBhIGh5cGVkRGF0ZSBsaWtlICIyMDE4LTAzLTI4IgogICAgICAgKiBAcGFyYW0gZGF0ZVN0cmluZwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IeXBoZWREYXRlKGRhdGVTdHJpbmcpIHsKICAgICAgICBjb25zdCBkYXRlTWlsbGlzID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShkYXRlTWlsbGlzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2FtZSBhcyAuZnJvbUV1cm9wZWFuRGF0ZSgpLCBidXQgYWNjZXB0cyBhZGRpdGlvbmFsIHRpbWVBcmcgYW5kIHpvbmVBcmcKICAgICAgICovCiAgICAgIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlQW5kVGltZShldXJvcGVhbkRhdGVBcmcsIHRpbWVBcmcgPSAiMTI6MDA6MDAiLCB6b25lQXJnID0gIkV1cm9wZS9CZXJsaW4iKSB7CiAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcLiguKilcLiguKikvLmV4ZWMoZXVyb3BlYW5EYXRlQXJnKTsKICAgICAgICBjb25zdCBzbGljZURhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgICAgICAgcmV0dXJuIGAwJHtkYXRlU3RyaW5nfWAuc2xpY2UoLTIpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgZGF0ZVRpbWVTdHJpbmcgPSBgJHtkYXRlQXJyYXlbM119LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsyXSl9LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsxXSl9VCR7dGltZUFyZ31gOwogICAgICAgIGNvbnN0IGRhdGUgPSBpbXBvcnRfZGF5anMuZGVmYXVsdChkYXRlVGltZVN0cmluZyk7CiAgICAgICAgY29uc3QgdW5peE1pbGxpID0gZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodW5peE1pbGxpID0gRGF0ZS5ub3coKSkgewogICAgICAgIHN1cGVyKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgLy8KICAgICAgZXhwb3J0VG9FdXJvcGVhbkRhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi5kYXlTdHJpbmd9LiR7dW5pdHMyLm1vbnRoU3RyaW5nfS4ke3VuaXRzMi55ZWFyU3RyaW5nfWA7CiAgICAgIH0KICAgICAgZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi55ZWFyU3RyaW5nfS0ke3VuaXRzMi5tb250aFN0cmluZ30tJHt1bml0czIuZGF5U3RyaW5nfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGV4cG9ydHMgdW5pdHMKICAgICAgICovCiAgICAgIGV4cG9ydFRvVW5pdHMoKSB7CiAgICAgICAgY29uc3QgbW9udGhzQXJyYXkgPSBbCiAgICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgICAiRmVicnVhcnkiLAogICAgICAgICAgIk1hcmNoIiwKICAgICAgICAgICJBcHJpbCIsCiAgICAgICAgICAiTWF5IiwKICAgICAgICAgICJKdW5lIiwKICAgICAgICAgICJKdWx5IiwKICAgICAgICAgICJBdWd1c3QiLAogICAgICAgICAgIlNlcHRlbWJlciIsCiAgICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgICAiTm92ZW1iZXIiLAogICAgICAgICAgIkRlY2VtYmVyIgogICAgICAgIF07CiAgICAgICAgY29uc3QgZGF5c0FycmF5ID0gWwogICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAiU3VuZGF5IgogICAgICAgIF07CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHllYXI6IHRoaXMuZ2V0RnVsbFllYXIoKSwKICAgICAgICAgIHllYXJTdHJpbmc6IGAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLAogICAgICAgICAgbW9udGg6IHRoaXMuZ2V0TW9udGgoKSArIDEsCiAgICAgICAgICBtb250aFN0cmluZzogKCIwIiArICh0aGlzLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpLAogICAgICAgICAgbW9udGhOYW1lOiBtb250aHNBcnJheVt0aGlzLmdldE1vbnRoKCldLAogICAgICAgICAgZGF5OiB0aGlzLmdldERhdGUoKSwKICAgICAgICAgIGRheVN0cmluZzogKCIwIiArIHRoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksCiAgICAgICAgICBkYXlPZlRoZVdlZWs6IHRoaXMuZ2V0RGF5KCksCiAgICAgICAgICBkYXlPZlRoZVdlZWtOYW1lOiBkYXlzQXJyYXlbdGhpcy5nZXREYXkoKV0KICAgICAgICB9OwogICAgICB9CiAgICAgIGZvcm1hdChmb3JtYXRBcmcpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChmb3JtYXRBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBib29sZWFuIGNoZWNrcwogICAgICAgKi8KICAgICAgaXNUb2RheSgpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKTsKICAgICAgfQogICAgICBsZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKSB7CiAgICAgICAgY29uc3QgbWF4UGFzc2VkVW5peFRpbWUgPSBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHModW5pdEFyZ3MpOwogICAgICAgIGNvbnN0IGFjdHVhbFBhc3NlZFVuaXhUaW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBhY3R1YWxQYXNzZWRVbml4VGltZSA8IG1heFBhc3NlZFVuaXhUaW1lOwogICAgICB9CiAgICAgIG1vcmVUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3MpIHsKICAgICAgICByZXR1cm4gIXRoaXMubGVzc1RpbWVQYXNzZWRUb05vdyh1bml0QXJncyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzCnZhciBIcnRNZWFzdXJlbWVudDsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaHJ0bWVhc3VyZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzIigpIHsKICAgIEhydE1lYXN1cmVtZW50ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlEaWZmID0gbnVsbDsKICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0IHRoZSBtZWFzdXJlbWVudAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IERhdGUubm93KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3AgdGhlIG1lYXN1cmVtZW50CiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkgewogICAgICAgICAgY29uc29sZS5sb2coIkhhc24ndCBzdGFydGVkIHlldCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBEYXRlLm5vdygpIC0gdGhpcy5fbWlsbGlTdGFydDsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmICogMWUzOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXNldCB0aGUgbWVhc3VyZW1lbnQKICAgICAgICovCiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBudWxsOwogICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMKdmFyIEludGVydmFsOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19pbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgSW50ZXJ2YWwgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGludGVydmFsTWlsbGlzZW5jb25kc0FyZykgewogICAgICAgIHRoaXMuc3RhdHVzID0gImluaXRpYWwiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgICAgdGhpcy5pbnRlcnZhbEpvYnMgPSBbXTsKICAgICAgICB0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzID0gaW50ZXJ2YWxNaWxsaXNlbmNvbmRzQXJnOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgIGNvbnN0IHN0YXR1c0F1dGggPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPSBzdGF0dXNBdXRoOwogICAgICAgIGNvbnN0IHJ1bkludGVydmFsID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIgJiYgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID09PSBzdGF0dXNBdXRoKSB7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUludGVydmFsSm9icygpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcnVuSW50ZXJ2YWwoKTsKICAgICAgfQogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgYWRkSW50ZXJ2YWxKb2IoZnVuY0FyZykgewogICAgICAgIHRoaXMuaW50ZXJ2YWxKb2JzLnB1c2goZnVuY0FyZyk7CiAgICAgIH0KICAgICAgZXhlY3V0ZUludGVydmFsSm9icygpIHsKICAgICAgICBmb3IgKGNvbnN0IGZ1bmNBcmcgb2YgdGhpcy5pbnRlcnZhbEpvYnMpIHsKICAgICAgICAgIGZ1bmNBcmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcwp2YXIgVGltZVN0YW1wOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc190aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBUaW1lU3RhbXAgPSBjbGFzcyBfVGltZVN0YW1wIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmcm9tIG1pbGxpc2Vjb25kcwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21NaWxsaVNlY29uZHMobWlsbGlTZWNvbmRzQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfVGltZVN0YW1wKG1pbGxpU2Vjb25kc0FyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmb3Igbm93IHdpdGggY2hhbmdlIHNldAogICAgICAgKiBAcGFyYW0gdGltZVN0YW1wQXJnCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbVRpbWVTdGFtcCh0aW1lU3RhbXBBcmcpIHsKICAgICAgICBjb25zdCBsb2NhbFRpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgbG9jYWxUaW1lU3RhbXAuY2hhbmdlID0gbG9jYWxUaW1lU3RhbXAubWlsbGlTZWNvbmRzIC0gdGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kczsKICAgICAgICByZXR1cm4gbG9jYWxUaW1lU3RhbXA7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoY3JlYXRvckFyZykgewogICAgICAgIHRoaXMuY2hhbmdlID0gbnVsbDsKICAgICAgICBpZiAoIWNyZWF0b3JBcmcpIHsKICAgICAgICAgIHRoaXMuZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNyZWF0b3JBcmcgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShjcmVhdG9yQXJnKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLmRhdGUuZ2V0VGltZSgpOwogICAgICAgIHRoaXMuZXBvY2h0aW1lID0gTWF0aC5mbG9vcih0aGlzLm1pbGxpU2Vjb25kcyAvIDFlMyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyBvbGRlciB0aGFuIGFub3RoZXIgdGltZXN0YW1wCiAgICAgICAqIEBwYXJhbSBUaW1lU3RhbXBBcmcKICAgICAgICogQHBhcmFtIHRyZXNob2xkVGltZUFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzIC0gdHJlc2hvbGRUaW1lQXJnKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2xkZXIgdGhhbiB0aGUgYXJndW1lbnQKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW4oVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzICsgdHJlc2hvbGRUaW1lQXJnIDwgVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyB5b3VuZ2VyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXAKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnCiAgICAgICAqLwogICAgICBpc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzID4gVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyArIHRyZXNob2xkVGltZUFyZykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhtaWxsaXNlY29uZEFyZykgewogICAgICAgIGNvbnN0IG5vd1RpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgY29uc3QgY29tcGFyZUVwb2NoVGltZSA9IG5vd1RpbWVTdGFtcC5lcG9jaHRpbWUgLSBtaWxsaXNlY29uZEFyZzsKICAgICAgICBjb25zdCBjb21wYXJlVGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoY29tcGFyZUVwb2NoVGltZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGNvbXBhcmVUaW1lU3RhbXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcwp2YXIgVGltZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgVGltZXIgPSBjbGFzcyB7CiAgICAgIGdldCB0aW1lTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50aW1lSW5NaWxsaXNlY29uZHMgLSB0aGlzLnBhdXNlZEF0LmNoYW5nZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZHNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gImluaXRpYXRlZCI7CiAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMudGltZUluTWlsbGlzZWNvbmRzID0gdGltZUluTWlsbGlzZWNvbmRzQXJnOwogICAgICAgIHRoaXMuY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdGFydHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfSwgdGhpcy50aW1lSW5NaWxsaXNlY29uZHMpOwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBuZXcgVGltZVN0YW1wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGltZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgcmVzdW1lIGluc3RlYWQiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50VGltZW91dCk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIHRoaXMucGF1c2VkQXQgPSBUaW1lU3RhbXAuZnJvbVRpbWVTdGFtcCh0aGlzLnN0YXJ0ZWRBdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VtZSgpIHsKICAgICAgICBpZiAodGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9LCB0aGlzLnRpbWVMZWZ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBudWxsOwogICAgICAgIHRoaXMucGF1c2VkQXQgPSBudWxsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM3LCB7CiAgQ3JvbkpvYjogKCkgPT4gQ3JvbkpvYiwKICBDcm9uTWFuYWdlcjogKCkgPT4gQ3Jvbk1hbmFnZXIsCiAgRXh0ZW5kZWREYXRlOiAoKSA9PiBFeHRlbmRlZERhdGUsCiAgSHJ0TWVhc3VyZW1lbnQ6ICgpID0+IEhydE1lYXN1cmVtZW50LAogIEludGVydmFsOiAoKSA9PiBJbnRlcnZhbCwKICBUaW1lU3RhbXA6ICgpID0+IFRpbWVTdGFtcCwKICBUaW1lcjogKCkgPT4gVGltZXIsCiAgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZSwKICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmc6ICgpID0+IGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZywKICBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6ICgpID0+IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywKICB1bml0czogKCkgPT4gdW5pdHMKfSk7CnZhciBpbml0X2Rpc3RfdHM2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25qb2IoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfZXh0ZW5kZWRkYXRlKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2hydG1lYXN1cmVtZW50KCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2ludGVydmFsKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgaW5pdF9zbWFydHRpbWVfdW5pdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMKdmFyIHJlcXVpcmVfU3ltYm9sVHJlZU5vZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTeW1ib2xUcmVlTm9kZSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsKICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSAwOwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgfQogICAgICBnZXQgaXNBdHRhY2hlZCgpIHsKICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTsKICAgICAgfQogICAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICBjaGlsZHJlbkNoYW5nZWQoKSB7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSB0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEgJiA0Mjk0OTY3Mjk1OwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICB9CiAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHsKICAgICAgICBpZiAodGhpcy5jYWNoZWRJbmRleFZlcnNpb24gIT09IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uKSB7CiAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXg7CiAgICAgIH0KICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgyKSB7CiAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXgyOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlUG9zaXRpb24uanMKdmFyIHJlcXVpcmVfVHJlZVBvc2l0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoewogICAgICAvLyBzYW1lIGFzIERPTSBET0NVTUVOVF9QT1NJVElPTl8KICAgICAgRElTQ09OTkVDVEVEOiAxLAogICAgICBQUkVDRURJTkc6IDIsCiAgICAgIEZPTExPV0lORzogNCwKICAgICAgQ09OVEFJTlM6IDgsCiAgICAgIENPTlRBSU5FRF9CWTogMTYKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMKdmFyIHJlcXVpcmVfVHJlZUl0ZXJhdG9yID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVFJFRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTsKICAgIHZhciBST09UID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIE5FWFQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgSVRFUkFURV9GVU5DID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIFRyZWVJdGVyYXRvciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodHJlZSwgcm9vdDYsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHsKICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTsKICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDY7CiAgICAgICAgdGhpc1tORVhUXSA9IGZpcnN0UmVzdWx0OwogICAgICAgIHRoaXNbSVRFUkFURV9GVU5DXSA9IGl0ZXJhdGVGdW5jdGlvbjsKICAgICAgfQogICAgICBuZXh0KCkgewogICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzW1RSRUVdOwogICAgICAgIGNvbnN0IGl0ZXJhdGVGdW5jID0gdGhpc1tJVEVSQVRFX0ZVTkNdOwogICAgICAgIGNvbnN0IHJvb3Q2ID0gdGhpc1tST09UXTsKICAgICAgICBpZiAoIXRoaXNbTkVYVF0pIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRvbmU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiByb290NgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1tORVhUXTsKICAgICAgICBpZiAoaXRlcmF0ZUZ1bmMgPT09IDEpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikucHJldmlvdXNTaWJsaW5nOwogICAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikubmV4dFNpYmxpbmc7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gMykgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gNCkgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUucHJlY2VkaW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuZm9sbG93aW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7CiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICB9KTsKICAgIFRyZWVJdGVyYXRvci5QUkVWID0gMTsKICAgIFRyZWVJdGVyYXRvci5ORVhUID0gMjsKICAgIFRyZWVJdGVyYXRvci5QQVJFTlQgPSAzOwogICAgVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7CiAgICBUcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yKTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFRyZWVJdGVyYXRvcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZS5qcwp2YXIgcmVxdWlyZV9TeW1ib2xUcmVlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFN5bWJvbFRyZWVOb2RlID0gcmVxdWlyZV9TeW1ib2xUcmVlTm9kZSgpOwogICAgdmFyIFRyZWVQb3NpdGlvbiA9IHJlcXVpcmVfVHJlZVBvc2l0aW9uKCk7CiAgICB2YXIgVHJlZUl0ZXJhdG9yID0gcmVxdWlyZV9UcmVlSXRlcmF0b3IoKTsKICAgIGZ1bmN0aW9uIHJldHVyblRydWUoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkgewogICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07CiAgICB9CiAgICB2YXIgU3ltYm9sVHJlZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAYWxpYXMgbW9kdWxlOnN5bWJvbC10cmVlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb249J1N5bWJvbFRyZWUgZGF0YSddIERlc2NyaXB0aW9uIHVzZWQgZm9yIHRoZSBTeW1ib2wKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5zeW1ib2wgPSBTeW1ib2woZGVzY3JpcHRpb24gfHwgIlN5bWJvbFRyZWUgZGF0YSIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sCiAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0bwogICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kCiAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0CiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdCkgewogICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIF9ub2RlKG9iamVjdCkgewogICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgbm9kZTIgPSBvYmplY3RbdGhpcy5zeW1ib2xdOwogICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgcmV0dXJuIG5vZGUyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0W3RoaXMuc3ltYm9sXSA9IG5ldyBTeW1ib2xUcmVlTm9kZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbnkgY2hpbGRyZW4uIE90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaGFzQ2hpbGRyZW4KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtCb29sZWFufQogICAgICAgKi8KICAgICAgaGFzQ2hpbGRyZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5oYXNDaGlsZHJlbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBmaXJzdENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgZmlyc3RDaGlsZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmV2aW91c1NpYmxpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwcmV2aW91c1NpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgbmV4dFNpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwYXJlbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwYXJlbnQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGluY2x1c2l2ZSBkZXNjZW5kYW50IHRoYXQgaXMgbGFzdCBpbiB0cmVlIG9yZGVyIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGRlcHRoIG9mIHRoZSBzdWJ0cmVlIG9mIGBvYmplY3RgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3QpIHsKICAgICAgICBsZXQgbGFzdENoaWxkOwogICAgICAgIGxldCBjdXJyZW50ID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChsYXN0Q2hpbGQgPSB0aGlzLl9ub2RlKGN1cnJlbnQpLmxhc3RDaGlsZCkgewogICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIHByZWNlZGluZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBwcmVjZWRpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBiZWZvcmUgQiBpbiB0cmVlIG9yZGVyLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkKICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHByZWNlZGluZwogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEByZXR1cm4gez9PYmplY3R9CiAgICAgICAqLwogICAgICBwcmVjZWRpbmcob2JqZWN0LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDsKICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZXZpb3VzU2libGluZyA9IHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykgewogICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGZvbGxvd2luZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBmb2xsb3dpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBhZnRlciBCIGluIHRyZWUgb3JkZXIuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBlbnRpcmUgdHJlZQogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgZm9sbG93aW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcENoaWxkcmVuPWZhbHNlXSBJZiBzZXQsIGlnbm9yZSB0aGUgY2hpbGRyZW4gb2YgYG9iamVjdGAKICAgICAgICogQHJldHVybiB7P09iamVjdH0KICAgICAgICovCiAgICAgIGZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290OwogICAgICAgIGNvbnN0IHNraXBDaGlsZHJlbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwQ2hpbGRyZW47CiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IHRoaXMuX25vZGUoY3VycmVudCkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpZiAobmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50OwogICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBgcGFyZW50YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgYXJyYXkgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkgfHwgW107CiAgICAgICAgY29uc3QgZmlsdGVyMiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIgfHwgcmV0dXJuVHJ1ZTsKICAgICAgICBjb25zdCB0aGlzQXJnID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoaXNBcmcgfHwgdm9pZCAwOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgICB3aGlsZSAob2JqZWN0KSB7CiAgICAgICAgICBjb25zdCBub2RlMiA9IHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICAgIG5vZGUyLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGluZGV4Mik7CiAgICAgICAgICBpZiAoZmlsdGVyMi5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpOwogICAgICAgICAgfQogICAgICAgICAgb2JqZWN0ID0gbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgICArK2luZGV4MjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBgb2JqZWN0YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc1RvQXJyYXkKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChhbmNlc3RvcikgewogICAgICAgICAgaWYgKGZpbHRlcjIuY2FsbCh0aGlzQXJnLCBhbmNlc3RvcikpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChhbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgICBhbmNlc3RvciA9IHRoaXMuX25vZGUoYW5jZXN0b3IpLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkgKGluIHRyZWUgb3JkZXIpLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICoKICAgICAgICogQG1ldGhvZCB0cmVlVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgdHJlZVRvQXJyYXkocm9vdDYsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHJvb3Q2OwogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGlmIChmaWx0ZXIyLmNhbGwodGhpc0FyZywgb2JqZWN0KSkgewogICAgICAgICAgICBhcnJheS5wdXNoKG9iamVjdCk7CiAgICAgICAgICB9CiAgICAgICAgICBvYmplY3QgPSB0aGlzLmZvbGxvd2luZyhvYmplY3QsIHsgcm9vdDogcm9vdDYgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0CiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgcmV2ZXJzZSA/IHBhcmVudE5vZGUubGFzdENoaWxkIDogcGFyZW50Tm9kZS5maXJzdENoaWxkLAogICAgICAgICAgcmV2ZXJzZSA/IFRyZWVJdGVyYXRvci5QUkVWIDogVHJlZUl0ZXJhdG9yLk5FWFQKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gcmV2ZXJzZSB0cmVlIG9yZGVyKQogICAgICAgKgogICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmcsCiAgICAgICAgICBUcmVlSXRlcmF0b3IuUFJFVgogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvcgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZywKICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBpbmNsdXNpdmUgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgVHJlZUl0ZXJhdG9yLlBBUkVOVAogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCAoaW4gdHJlZSBvcmRlcikuCiAgICAgICAqCiAgICAgICAqIFdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgcm9vdGA6CiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBpdGVyYXRpb24pCiAgICAgICAqICogYE8obilgIChhbW9ydGl6ZWQsIHdoZW4gY29tcGxldGluZyB0aGUgaXRlcmF0b3IpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgdHJlZUl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV0KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgdHJlZUl0ZXJhdG9yKHJvb3Q2LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIHJvb3Q2LAogICAgICAgICAgcmV2ZXJzZSA/IHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocm9vdDYpIDogcm9vdDYsCiAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA6IFRyZWVJdGVyYXRvci5GT0xMT1dJTkcKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICh0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncykuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIHByZWNlZGluZyBzaWJsaW5ncwogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaW5kZXgKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoaWxkCiAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MsIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5vIHBhcmVudAogICAgICAgKi8KICAgICAgaW5kZXgoY2hpbGQpIHsKICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkKTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShjaGlsZE5vZGUucGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGNoaWxkTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKTsKICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbykgewogICAgICAgICAgY29uc3QgY2FjaGVkVXBUb05vZGUgPSB0aGlzLl9ub2RlKHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8pOwogICAgICAgICAgb2JqZWN0ID0gY2FjaGVkVXBUb05vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjYWNoZWRVcFRvTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKSArIDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgICAgbm9kZTIuc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgY3VycmVudEluZGV4KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IGNoaWxkKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgKytjdXJyZW50SW5kZXg7CiAgICAgICAgICBvYmplY3QgPSBub2RlMi5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IGNoaWxkOwogICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbgogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY2hpbGRyZW5Db3VudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNoaWxkcmVuQ291bnQocGFyZW50KSB7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUubGFzdENoaWxkKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGFyZSB0aGUgcG9zaXRpb24gb2YgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgb2JqZWN0LiBBIGJpdCBzZXQgaXMgcmV0dXJuZWQ6CiAgICAgICAqCiAgICAgICAqIDx1bD4KICAgICAgICogICAgIDxsaT5ESVNDT05ORUNURUQgOiAxPC9saT4KICAgICAgICogICAgIDxsaT5QUkVDRURJTkcgOiAyPC9saT4KICAgICAgICogICAgIDxsaT5GT0xMT1dJTkcgOiA0PC9saT4KICAgICAgICogICAgIDxsaT5DT05UQUlOUyA6IDg8L2xpPgogICAgICAgKiAgICAgPGxpPkNPTlRBSU5FRF9CWSA6IDE2PC9saT4KICAgICAgICogPC91bD4KICAgICAgICoKICAgICAgICogVGhlIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24gaW4gRE9NLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAogICAgICAgKiBESVNDT05ORUNURUQgbmV2ZXIgb2NjdXJzIHdpdGggYW55IG90aGVyIGJpdC4KICAgICAgICoKICAgICAgICogd2hlcmUgYG5gIGFuZCBgbWAgYXJlIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIGBsZWZ0YCBhbmQgYHJpZ2h0YDsKICAgICAgICogd2hlcmUgYG9gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gb2YgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgYGxlZnRgIGFuZCBgcmlnaHRgOgogICAgICAgKgogICAgICAgKiAqIGBPKG4gKyBtICsgbylgICh3b3JzdCBjYXNlKQogICAgICAgKiAqIGBPKG4gKyBtKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNvbXBhcmVUcmVlUG9zaXRpb24KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdCwgcmlnaHQpIHsKICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7CiAgICAgICAgICB3aGlsZSAobGVmdEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgPT09IHJpZ2h0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlOUyB8IFRyZWVQb3NpdGlvbi5QUkVDRURJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVmdEFuY2VzdG9ycy5wdXNoKGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICAgIGxlZnRBbmNlc3RvciA9IHRoaXMucGFyZW50KGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDsKICAgICAgICAgIHdoaWxlIChyaWdodEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChyaWdodEFuY2VzdG9yID09PSBsZWZ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlORURfQlkgfCBUcmVlUG9zaXRpb24uRk9MTE9XSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3JzLnB1c2gocmlnaHRBbmNlc3Rvcik7CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChyaWdodEFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgcm9vdDYgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCAwKTsKICAgICAgICBpZiAoIXJvb3Q2IHx8IHJvb3Q2ICE9PSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgMCkpIHsKICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uRElTQ09OTkVDVEVEOwogICAgICAgIH0KICAgICAgICBsZXQgY29tbW9uQW5jZXN0b3JJbmRleCA9IDA7CiAgICAgICAgY29uc3QgYW5jZXN0b3JzTWluTGVuZ3RoID0gTWF0aC5taW4obGVmdEFuY2VzdG9ycy5sZW5ndGgsIHJpZ2h0QW5jZXN0b3JzLmxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW5jZXN0b3JzTWluTGVuZ3RoOyArK2kxMSkgewogICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3IgPSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgIT09IHJpZ2h0QW5jZXN0b3IpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb21tb25BbmNlc3RvckluZGV4ID0gaTExOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0SW5kZXggPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgcmV0dXJuIHJpZ2h0SW5kZXggPCBsZWZ0SW5kZXggPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HIDogVHJlZVBvc2l0aW9uLkZPTExPV0lORzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuCiAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHJlbW92ZQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqLwogICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIGlmIChwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlbW92ZU9iamVjdCkgewogICAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSByZW1vdmVOb2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHsKICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHByZXZOb2RlKSB7CiAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgfQogICAgICAgIHJlbW92ZU5vZGUucGFyZW50ID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5jYWNoZWRJbmRleCA9IC0xOwogICAgICAgIHJlbW92ZU5vZGUuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVtb3ZlT2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBpbnNlcnRCZWZvcmUKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTsKICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50OwogICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAocHJldk5vZGUpIHsKICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbmV4dCBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGluc2VydEFmdGVyCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7CiAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAobmV4dE5vZGUpIHsKICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgZmlyc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJlcGVuZENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHsKICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCwgbmV3T2JqZWN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LgogICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGxhc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYXBwZW5kQ2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7CiAgICAgICAgICB0aGlzLmluc2VydEFmdGVyKHJlZmVyZW5jZU5vZGUubGFzdENoaWxkLCBuZXdPYmplY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gU3ltYm9sVHJlZTsKICAgIFN5bWJvbFRyZWUuVHJlZVBvc2l0aW9uID0gVHJlZVBvc2l0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTsKdmFyIGluaXRfY2xhc3Nlc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHM2KCk7CiAgICBpbXBvcnRfc3ltYm9sX3RyZWUgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5hc3luY2V4ZWN1dGlvbnN0YWNrLmpzCnZhciBBc3luY0V4ZWN1dGlvblN0YWNrOwp2YXIgaW5pdF9jbGFzc2VzX2FzeW5jZXhlY3V0aW9uc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYXN5bmNleGVjdXRpb25zdGFjay5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQXN5bmNFeGVjdXRpb25TdGFjayA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cyA9IFtdOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IEluZmluaXR5OwogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50ID0gMDsKICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZSA9IFtdOwogICAgICB9CiAgICAgIGFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZnVuY0FyZywgdGltZW91dEFyZykgewogICAgICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uU2xvdCA9IHsKICAgICAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsCiAgICAgICAgICBleGVjdXRpb25EZWZlcnJlZCwKICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsCiAgICAgICAgICBtb2RlOiAiZXhjbHVzaXZlIgogICAgICAgIH07CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGV4ZWN1dGlvblNsb3QpOwogICAgICAgIHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCk7CiAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkRlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0Tm9uRXhjbHVzaXZlRXhlY3V0aW9uU2xvdChmdW5jQXJnLCB0aW1lb3V0QXJnKSB7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBleGVjdXRpb25TbG90ID0gewogICAgICAgICAgZnVuY1RvRXhlY3V0ZTogZnVuY0FyZywKICAgICAgICAgIGV4ZWN1dGlvbkRlZmVycmVkLAogICAgICAgICAgdGltZW91dDogdGltZW91dEFyZywKICAgICAgICAgIG1vZGU6ICJub25leGNsdXNpdmUiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goZXhlY3V0aW9uU2xvdCk7CiAgICAgICAgdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKTsKICAgICAgICByZXR1cm4gZXhlY3V0aW9uRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG5vbi1leGNsdXNpdmUgdGFza3MuCiAgICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSBtaW5pbXVtIDEgKEluZmluaXR5IG1lYW5zIHVubGltaXRlZCkKICAgICAgICovCiAgICAgIHNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY29uY3VycmVuY3kpIHx8IGNvbmN1cnJlbmN5IDwgMSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSBtdXN0IGJlIGEgZmluaXRlIG51bWJlciA+PSAxIik7CiAgICAgICAgfQogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogR2V0IHRoZSBjb25maWd1cmVkIG1heCBjb25jdXJyZW5jeSBmb3Igbm9uLWV4Y2x1c2l2ZSB0YXNrcyAqLwogICAgICBnZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogTnVtYmVyIG9mIG5vbi1leGNsdXNpdmUgdGFza3MgY3VycmVudGx5IHJ1bm5pbmcgKi8KICAgICAgZ2V0QWN0aXZlTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50OwogICAgICB9CiAgICAgIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyB3YWl0aW5nIGZvciBhIGZyZWUgc2xvdCAqLwogICAgICBnZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLmxlbmd0aDsKICAgICAgfQogICAgICBhc3luYyBwcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB3aGlsZSAodGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50U2xvdCA9IHRoaXMuZXhlY3V0aW9uU2xvdHNbMF07CiAgICAgICAgICBpZiAoY3VycmVudFNsb3QubW9kZSA9PT0gImV4Y2x1c2l2ZSIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChjdXJyZW50U2xvdCk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkV4Y2x1c2l2ZVNsb3RzID0gW107CiAgICAgICAgICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGVjdXRpb25TbG90c1swXS5tb2RlID09PSAibm9uZXhjbHVzaXZlIikgewogICAgICAgICAgICAgIG5vbkV4Y2x1c2l2ZVNsb3RzLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhub25FeGNsdXNpdmVTbG90cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZUV4Y2x1c2l2ZVNsb3Qoc2xvdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoc2xvdC50aW1lb3V0KSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbCiAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihzbG90LnRpbWVvdXQpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzbG90LmZ1bmNUb0V4ZWN1dGUoKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKHNsb3RzKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBzbG90cy5tYXAoYXN5bmMgKHNsb3QpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIik7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNsb3QuZnVuY1RvRXhlY3V0ZSgpOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBXYWl0IHVudGlsIGEgbm9uLWV4Y2x1c2l2ZSBzbG90IGlzIGF2YWlsYWJsZSAocmVzcGVjdHMgbWF4IGNvbmN1cnJlbmN5KS4KICAgICAgICovCiAgICAgIHdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIGlmICh0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCA8IHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kpIHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50Kys7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnB1c2goKCkgPT4gewogICAgICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrOwogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqIFJlbGVhc2UgYSBub24tZXhjbHVzaXZlIHNsb3QgYW5kIHdha2UgdGhlIG5leHQgd2FpdGVyLCBpZiBhbnkuICovCiAgICAgIHJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50LS07CiAgICAgICAgY29uc3QgbmV4dDIgPSB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpOwogICAgICAgIGlmIChuZXh0MikgewogICAgICAgICAgbmV4dDIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYmFja3ByZXNzdXJlZGFycmF5LmpzCnZhciBCYWNrcHJlc3N1cmVkQXJyYXk7CnZhciBpbml0X2NsYXNzZXNfYmFja3ByZXNzdXJlZGFycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmJhY2twcmVzc3VyZWRhcnJheS5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQmFja3ByZXNzdXJlZEFycmF5ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihoaWdoV2F0ZXJNYXJrID0gMTYpIHsKICAgICAgICB0aGlzLmhhc1NwYWNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMuZGF0YSA9IFtdOwogICAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZS5uZXh0KCJpdGVtc0F2YWlsYWJsZSIpOwogICAgICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcGFjZUF2YWlsYWJsZTsKICAgICAgfQogICAgICBzaGlmdCgpIHsKICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhLnNoaWZ0KCk7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9CiAgICAgIGNoZWNrU3BhY2VBdmFpbGFibGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPCB0aGlzLmhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgY2hlY2tIYXNJdGVtcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgICAgd2FpdEZvclNwYWNlKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5oYXNTcGFjZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHdhaXRGb3JJdGVtcygpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKCgpID0+IHsKICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5mYXN0bWFwLmpzCnZhciBGYXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2Zhc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgRmFzdE1hcCA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMKdmFyIHVuaSwgT2JqZWN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19mYXN0bWFwKCk7CiAgICB1bmkgPSAocHJlZml4NCA9ICJ1bmkiKSA9PiB7CiAgICAgIHJldHVybiBgJHtwcmVmaXg0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KTsKICAgIH07CiAgICBPYmplY3RNYXAgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pKCJrZXkiKTsKICAgICAgICB0aGlzLmFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXksIG9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICBvcGVyYXRpb246ICJhZGQiLAogICAgICAgICAgcGF5bG9hZDogb2JqZWN0QXJnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSAuYWRkIGJ1dCBhZGRzIGFuIHdob2xlIGFycmF5IG9mIG9iamVjdHMKICAgICAgICovCiAgICAgIGFkZEFycmF5KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldCBrZXkgZm9yIG9iamVjdAogICAgICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uCiAgICAgICAqLwogICAgICBnZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgbGV0IGZvdW5kS2V5ID0gbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kIG9iamVjdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmaW5kU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kT25lQW5kUmVtb3ZlKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgZmluZE9uZUFuZFJlbW92ZVN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJ1biBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYW4gb2JqZWN0IGluIHRoZSBPYnNlcnZhYmxlbWFwIGFuZCByZW1vdmVzIGl0LCBzbyBpdCBjYW4ndCBiZSByZXRyaWV2ZWQgYWdhaW4KICAgICAgICovCiAgICAgIGdldE9uZUFuZFJlbW92ZSgpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IHRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGtleVRvVXNlID0ga2V5czJbMF07CiAgICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgZ2V0QXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5CiAgICAgICAqLwogICAgICBpc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlKG9iamVjdEFyZykgewogICAgICAgIGlmICh0aGlzLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIGNvbnN0IGtleUFyZyA9IHRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgICAgICBjb25zdCByZW1vdmVkT2JqZWN0ID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkT2JqZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkT2JqZWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgT2JqZWN0bWFwIHRoYXQgaW5jbHVkZXMKICAgICAgICovCiAgICAgIGNvbmNhdChvYmplY3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXR0ZWRPYmplY3RNYXAgPSBuZXcgX09iamVjdE1hcCgpOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBPYmplY3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gb2JqZWN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QuanMKdmFyIEludGVyZXN0Owp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmludGVyZXN0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXAoKTsKICAgIEludGVyZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogcXVpY2sgYWNjZXNzIHRvIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGludGVyZXN0IGNvbXBhcmFibGUgZm9yIGNoZWNraW5nIGZvciBzaW1pbGFyIGludGVyZXN0cwogICAgICAgKi8KICAgICAgZ2V0IGNvbXBhcmlzb25TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkZ1bmModGhpcy5vcmlnaW5hbEludGVyZXN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZnVsbGZpbGwgdGhlIGludGVyZXN0CiAgICAgICAqLwogICAgICBmdWxsZmlsbEludGVyZXN0KG9iamVjdEFyZykgewogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmZ1bGxmaWxsbWVudFN0b3JlID0gW107CiAgICAgICAgdGhpcy5pbnRlcmVzdERlZmVycmVkLnJlc29sdmUob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICoKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGludGVyZXN0TWFwQXJnLCBpbnRlcmVzdEFyZywgY29tcGFyaXNvbkZ1bmNBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIgPSBuZXcgZGlzdF90c19leHBvcnRzNy5UaW1lcigxZTQpOwogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5mdWxsZmlsbG1lbnRTdG9yZSA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJlc3REZWZlcnJlZCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMuRGVmZXJyZWQoKTsKICAgICAgICB0aGlzLmludGVyZXN0RnVsbGZpbGxlZCA9IHRoaXMuaW50ZXJlc3REZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYgPSBpbnRlcmVzdE1hcEFyZzsKICAgICAgICB0aGlzLm9yaWdpbmFsSW50ZXJlc3QgPSBpbnRlcmVzdEFyZzsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubWFya0xvc3RBZnRlckRlZmF1bHQpIHsKICAgICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0KS50aGVuKHRoaXMubWFya0xvc3QpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIExJRkVDWUNMRSBNQU5BR0VNRU5UCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIHNlbGYgZGVzdHJ1Y3RzIHRoZSBpbnRlcmVzdAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpOwogICAgICAgIGlmICghdGhpcy5pc0Z1bGxmaWxsZWQgJiYgdGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpIHsKICAgICAgICAgIHRoaXMuZnVsbGZpbGxJbnRlcmVzdCh0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBub3RpZmllcyB0aGUgaW50ZXJlc3QgdGhhdCB0aGUgaW50ZXJlc3QgaW4gaXQgaGFzIGJlZW4gbG9zdAogICAgICAgKi8KICAgICAgbWFya0xvc3QoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiByZXN0b3JlZAogICAgICAgKi8KICAgICAgcmVuZXcoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMKdmFyIEludGVyZXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfb2JqZWN0bWFwKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QoKTsKICAgIEludGVyZXN0TWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihjb21wYXJpc29uRnVuY0FyZywgb3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5pbnRlcmVzdE9iamVjdE1hcCA9IG5ldyBPYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmludGVyZXN0T2JzZXJ2YWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLk9ic2VydmFibGVJbnRha2UoKTsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBpbnRlcmVzdCB0byB0aGUgSW50ZXJlc3RNYXAKICAgICAgICogQHBhcmFtIGludGVyZXN0SWQKICAgICAgICovCiAgICAgIGFzeW5jIGFkZEludGVyZXN0KGludGVyZXN0SWQsIGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhpbnRlcmVzdElkKTsKICAgICAgICBsZXQgcmV0dXJuSW50ZXJlc3Q7CiAgICAgICAgY29uc3QgbmV3SW50ZXJlc3QgPSBuZXcgSW50ZXJlc3QodGhpcywgaW50ZXJlc3RJZCwgdGhpcy5jb21wYXJpc29uRnVuYywgewogICAgICAgICAgbWFya0xvc3RBZnRlckRlZmF1bHQ6IHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCwKICAgICAgICAgIGRlZmF1bHRGdWxsZmlsbG1lbnQ6IGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcKICAgICAgICB9KTsKICAgICAgICBsZXQgaW50ZXJlc3RFeGlzdHMgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZvckVhY2goKGludGVyZXN0QXJnKSA9PiB7CiAgICAgICAgICBpZiAoIWludGVyZXN0RXhpc3RzICYmIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IG5ld0ludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCBgaW50ZXJlc3QgYWxyZWFkeSBleGlzdHMgZm9yICR7bmV3SW50ZXJlc3QuY29tcGFyaXNvblN0cmluZ31gKTsKICAgICAgICAgICAgaW50ZXJlc3RFeGlzdHMgPSB0cnVlOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdCA9IGludGVyZXN0QXJnOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdC5yZW5ldygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghcmV0dXJuSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybkludGVyZXN0ID0gbmV3SW50ZXJlc3Q7CiAgICAgICAgICB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChyZXR1cm5JbnRlcmVzdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlLnB1c2gocmV0dXJuSW50ZXJlc3QpOwogICAgICAgIHJldHVybiByZXR1cm5JbnRlcmVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhbiBpbnRlcmVzdCBmcm9tIHRoZSBpbnRlcmVzdCBtYXAKICAgICAgICovCiAgICAgIHJlbW92ZUludGVyZXN0KGludGVyZXN0QXJnKSB7CiAgICAgICAgY29uc3QgaW50ZXJlc3RUb1JlbW92ZSA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZE9uZUFuZFJlbW92ZVN5bmMoKGludGVyZXN0QXJnMikgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IGludGVyZXN0QXJnMi5jb21wYXJpc29uU3RyaW5nOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpbnRlcmVzdAogICAgICAgKi8KICAgICAgY2hlY2tJbnRlcmVzdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhvYmplY3RBcmcpOwogICAgICAgIHJldHVybiB0aGlzLmNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBjb21wYXJpc29uU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBjaGVja0ludGVyZXN0QnlTdHJpbmcoY29tcGFyaXNvblN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IGZvdW5kSW50ZXJlc3QgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKChpbnRlcmVzdCkgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcgPT09IGNvbXBhcmlzb25TdHJpbmdBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGZvdW5kSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm0gbG9zdCBpbnRlcmVzdAogICAgICAgKiBAcGFyYW0gaW50ZXJlc3RJZAogICAgICAgKi8KICAgICAgaW5mb3JtTG9zdEludGVyZXN0KGludGVyZXN0SWQpIHsKICAgICAgICBjb25zdCB3YW50ZWRJbnRlcmVzdCA9IHRoaXMuZmluZEludGVyZXN0KGludGVyZXN0SWQpOwogICAgICAgIGlmICh3YW50ZWRJbnRlcmVzdCkgewogICAgICAgICAgd2FudGVkSW50ZXJlc3QubWFya0xvc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBpbnRlcmVzdElkCiAgICAgICAqLwogICAgICBmaW5kSW50ZXJlc3QoaW50ZXJlc3RJZCkgewogICAgICAgIGNvbnN0IGNvbXBhcmFibGVTdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpOwogICAgICAgIGNvbnN0IGludGVyZXN0ID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYygoaW50ZXJlc3RBcmcpID0+IHsKICAgICAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBjb21wYXJhYmxlU3RyaW5nOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmVzdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMKdmFyIExpbWl0ZWRBcnJheTsKdmFyIGluaXRfY2xhc3Nlc19saW1pdGVkYXJyYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMubGltaXRlZGFycmF5LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBMaW1pdGVkQXJyYXkgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGxpbWl0QXJnKSB7CiAgICAgICAgdGhpcy5hcnJheSA9IFtdOwogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICB9CiAgICAgIGFkZE9uZShvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQob2JqZWN0QXJnKTsKICAgICAgICBpZiAodGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmFycmF5TGltaXQpIHsKICAgICAgICAgIHRoaXMuYXJyYXkubGVuZ3RoID0gdGhpcy5hcnJheUxpbWl0OwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRNYW55KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChsZXQgb2JqZWN0QXJnIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZE9uZShvYmplY3RBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRMaW1pdChsaW1pdEFyZykgewogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICAgIGlmICh0aGlzLmFycmF5Lmxlbmd0aCA+IHRoaXMuYXJyYXlMaW1pdCkgewogICAgICAgICAgdGhpcy5hcnJheS5sZW5ndGggPSB0aGlzLmFycmF5TGltaXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEF2ZXJhZ2UoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFycmF5WzBdID09PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgICBmb3IgKGxldCBsb2NhbE51bWJlciBvZiB0aGlzLmFycmF5KSB7CiAgICAgICAgICAgIGxldCBsb2NhbE51bWJlckFueSA9IGxvY2FsTnVtYmVyOwogICAgICAgICAgICBzdW0gPSBzdW0gKyBsb2NhbE51bWJlckFueTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzdW0gLyB0aGlzLmFycmF5Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxvb3B0cmFja2VyLmpzCnZhciBMb29wVHJhY2tlcjsKdmFyIGluaXRfY2xhc3Nlc19sb29wdHJhY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5sb29wdHJhY2tlci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX29iamVjdG1hcCgpOwogICAgTG9vcFRyYWNrZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgYW5kIHRyYWNrcyBhbiBvYmplY3QKICAgICAgICogQHBhcmFtIG9iamVjdEFyZwogICAgICAgKi8KICAgICAgY2hlY2tBbmRUcmFjayhvYmplY3RBcmcpIHsKICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChvYmplY3RBcmcpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXA7CnZhciBpbml0X2NsYXNzZXNfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgU3RyaW5nbWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcwp2YXIgVGltZWRBZ2dyZWd0b3I7CnZhciBpbml0X2NsYXNzZXNfdGltZWRhZ2dyZWdhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgVGltZWRBZ2dyZWd0b3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0b3JhZ2VBcnJheSA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgY2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpIHsKICAgICAgICBjb25zdCBhZGRBZ2dyZWdhdGlvblRpbWVyID0gKCkgPT4gewogICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czcuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyk7CiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nID0gdGhpcy5zdG9yYWdlQXJyYXk7CiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lciA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107CiAgICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYWdncmVnYXRlRm9yUHJvY2Vzc2luZyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5zdGFydCgpOwogICAgICAgIH07CiAgICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uVGltZXIpIHsKICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKGFnZ3JlZ2F0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5zdG9yYWdlQXJyYXkucHVzaChhZ2dyZWdhdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudHJlZS5qcwp2YXIgVHJlZTsKdmFyIGluaXRfY2xhc3Nlc190cmVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRyZWUuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIFRyZWUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3ltYm9sVHJlZSA9IG5ldyBpbXBvcnRfc3ltYm9sX3RyZWUuZGVmYXVsdCgpOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbnMgdGhhdCBtYXAgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc3ltYm9sLXRyZWUKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gb2JqZWN0QXJnCiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5pdGlhbGl6ZShvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGhhc0NoaWxkcmVuKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4ob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBmaXJzdENoaWxkKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGxhc3RDaGlsZChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwYXJlbnQob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wYXJlbnQob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkob2JqZWN0QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICB0cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICB0cmVlSXRlcmF0b3Iocm9vdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHJvb3RBcmcpOwogICAgICB9CiAgICAgIGluZGV4KGNoaWxkQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbmRleChjaGlsZEFyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQocGFyZW50QXJnKTsKICAgICAgfQogICAgICBjb21wYXJlVHJlZVBvc2l0aW9uKGxlZnRBcmcsIHJpZ2h0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0QXJnLCByaWdodEFyZyk7CiAgICAgIH0KICAgICAgcmVtb3ZlKHJlbW92ZU9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKHJlbW92ZU9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hcHBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbmlvbmFsaXR5IHRoYXQgZXh0ZW5kcyBzeW1ib2wtdHJlZQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgYnJhbmNoIG9mIHRoZSB0cmVlIGFzIEpTT04KICAgICAgICogY2FuIGJlIHVzZXIKICAgICAgICovCiAgICAgIHRvSnNvbldpdGhIaWVyYWNoeShyb290RWxlbWVudCkgewogICAgICAgIGNvbnN0IHRyZWVJdGVyYWJsZSA9IHRoaXMudHJlZUl0ZXJhdG9yKHJvb3RFbGVtZW50LCB7fSk7CiAgICAgICAgZm9yIChjb25zdCB0cmVlSXRlbSBvZiB0cmVlSXRlcmFibGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHRyZWVJdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGJ1aWxkcyBhIHRyZWUgZnJvbSBhIEpTT04gd2l0aCBoaWVyYWNoeQogICAgICAgKiBAcGFyYW0gcm9vdEVsZW1lbnQKICAgICAgICovCiAgICAgIGZyb21Kc29uV2l0aEhpZXJhY2h5KHJvb3RFbGVtZW50KSB7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czYsIHsKICBBc3luY0V4ZWN1dGlvblN0YWNrOiAoKSA9PiBBc3luY0V4ZWN1dGlvblN0YWNrLAogIEJhY2twcmVzc3VyZWRBcnJheTogKCkgPT4gQmFja3ByZXNzdXJlZEFycmF5LAogIEZhc3RNYXA6ICgpID0+IEZhc3RNYXAsCiAgSW50ZXJlc3Q6ICgpID0+IEludGVyZXN0LAogIEludGVyZXN0TWFwOiAoKSA9PiBJbnRlcmVzdE1hcCwKICBMaW1pdGVkQXJyYXk6ICgpID0+IExpbWl0ZWRBcnJheSwKICBMb29wVHJhY2tlcjogKCkgPT4gTG9vcFRyYWNrZXIsCiAgT2JqZWN0TWFwOiAoKSA9PiBPYmplY3RNYXAsCiAgU3RyaW5nbWFwOiAoKSA9PiBTdHJpbmdtYXAsCiAgVGltZWRBZ2dyZWd0b3I6ICgpID0+IFRpbWVkQWdncmVndG9yLAogIFRyZWU6ICgpID0+IFRyZWUsCiAgdW5pOiAoKSA9PiB1bmkKfSk7CnZhciBpbml0X2Rpc3RfdHM3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfYXN5bmNleGVjdXRpb25zdGFjaygpOwogICAgaW5pdF9jbGFzc2VzX2JhY2twcmVzc3VyZWRhcnJheSgpOwogICAgaW5pdF9jbGFzc2VzX2Zhc3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfbGltaXRlZGFycmF5KCk7CiAgICBpbml0X2NsYXNzZXNfbG9vcHRyYWNrZXIoKTsKICAgIGluaXRfY2xhc3Nlc19vYmplY3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19zdHJpbmdtYXAoKTsKICAgIGluaXRfY2xhc3Nlc190aW1lZGFnZ3JlZ2F0b3IoKTsKICAgIGluaXRfY2xhc3Nlc190cmVlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91aW50OGFycmF5LWV4dHJhc0AxLjUuMC9ub2RlX21vZHVsZXMvdWludDhhcnJheS1leHRyYXMvaW5kZXguanMKdmFyIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodWludDhhcnJheV9leHRyYXNfZXhwb3J0cywgewogIGFyZVVpbnQ4QXJyYXlzRXF1YWw6ICgpID0+IGFyZVVpbnQ4QXJyYXlzRXF1YWwsCiAgYXNzZXJ0VWludDhBcnJheTogKCkgPT4gYXNzZXJ0VWludDhBcnJheSwKICBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjogKCkgPT4gYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIsCiAgYmFzZTY0VG9TdHJpbmc6ICgpID0+IGJhc2U2NFRvU3RyaW5nLAogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5LAogIGNvbXBhcmVVaW50OEFycmF5czogKCkgPT4gY29tcGFyZVVpbnQ4QXJyYXlzLAogIGNvbmNhdFVpbnQ4QXJyYXlzOiAoKSA9PiBjb25jYXRVaW50OEFycmF5cywKICBnZXRVaW50QkU6ICgpID0+IGdldFVpbnRCRSwKICBoZXhUb1VpbnQ4QXJyYXk6ICgpID0+IGhleFRvVWludDhBcnJheSwKICBpbmNsdWRlczogKCkgPT4gaW5jbHVkZXMsCiAgaW5kZXhPZjogKCkgPT4gaW5kZXhPZiwKICBpc1VpbnQ4QXJyYXk6ICgpID0+IGlzVWludDhBcnJheSwKICBzdHJpbmdUb0Jhc2U2NDogKCkgPT4gc3RyaW5nVG9CYXNlNjQsCiAgc3RyaW5nVG9VaW50OEFycmF5OiAoKSA9PiBzdHJpbmdUb1VpbnQ4QXJyYXksCiAgdG9VaW50OEFycmF5OiAoKSA9PiB0b1VpbnQ4QXJyYXksCiAgdWludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1aW50OEFycmF5VG9CYXNlNjQsCiAgdWludDhBcnJheVRvSGV4OiAoKSA9PiB1aW50OEFycmF5VG9IZXgsCiAgdWludDhBcnJheVRvU3RyaW5nOiAoKSA9PiB1aW50OEFycmF5VG9TdHJpbmcKfSk7CmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTIsIHR5cGVDb25zdHJ1Y3RvciwgdHlwZVN0cmluZ2lmaWVkKSB7CiAgaWYgKCF2YWx1ZTIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKHZhbHVlMi5jb25zdHJ1Y3RvciA9PT0gdHlwZUNvbnN0cnVjdG9yKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUyKSA9PT0gdHlwZVN0cmluZ2lmaWVkOwp9CmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZTIpIHsKICByZXR1cm4gaXNUeXBlKHZhbHVlMiwgVWludDhBcnJheSwgdWludDhBcnJheVN0cmluZ2lmaWVkKTsKfQpmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlMikgewogIHJldHVybiBpc1R5cGUodmFsdWUyLCBBcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCk7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICByZXR1cm4gaXNVaW50OEFycmF5KHZhbHVlMikgfHwgaXNBcnJheUJ1ZmZlcih2YWx1ZTIpOwp9CmZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXkodmFsdWUyKSB7CiAgaWYgKCFpc1VpbnQ4QXJyYXkodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICBpZiAoIWlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAgb3IgXGBBcnJheUJ1ZmZlclxgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gdG9VaW50OEFycmF5KHZhbHVlMikgewogIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgfQogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUyKSkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIsIHZhbHVlMi5ieXRlT2Zmc2V0LCB2YWx1ZTIuYnl0ZUxlbmd0aCk7CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGAuYCk7Cn0KZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzLCB0b3RhbExlbmd0aCkgewogIGlmIChhcnJheXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgfQogIHRvdGFsTGVuZ3RoID8/PSBhcnJheXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZS5sZW5ndGgsIDApOwogIGNvbnN0IHJldHVyblZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYXJyYXkgb2YgYXJyYXlzKSB7CiAgICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICAgIHJldHVyblZhbHVlLnNldChhcnJheSwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7CiAgfQogIHJldHVybiByZXR1cm5WYWx1ZTsKfQpmdW5jdGlvbiBhcmVVaW50OEFycmF5c0VxdWFsKGE1LCBiNSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYTUpOwogIGFzc2VydFVpbnQ4QXJyYXkoYjUpOwogIGlmIChhNSA9PT0gYjUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoYTUubGVuZ3RoICE9PSBiNS5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgYTUubGVuZ3RoOyBpbmRleDIrKykgewogICAgaWYgKGE1W2luZGV4Ml0gIT09IGI1W2luZGV4Ml0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjb21wYXJlVWludDhBcnJheXMoYTUsIGI1KSB7CiAgYXNzZXJ0VWludDhBcnJheShhNSk7CiAgYXNzZXJ0VWludDhBcnJheShiNSk7CiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYTUubGVuZ3RoLCBiNS5sZW5ndGgpOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgIGNvbnN0IGRpZmYgPSBhNVtpbmRleDJdIC0gYjVbaW5kZXgyXTsKICAgIGlmIChkaWZmICE9PSAwKSB7CiAgICAgIHJldHVybiBNYXRoLnNpZ24oZGlmZik7CiAgICB9CiAgfQogIHJldHVybiBNYXRoLnNpZ24oYTUubGVuZ3RoIC0gYjUubGVuZ3RoKTsKfQpmdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYXJyYXksIGVuY29kaW5nID0gInV0ZjgiKSB7CiAgYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIoYXJyYXkpOwogIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXSA/Pz0gbmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoZW5jb2RpbmcpOwogIHJldHVybiBjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10uZGVjb2RlKGFycmF5KTsKfQpmdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYHN0cmluZ1xgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZzMpIHsKICBhc3NlcnRTdHJpbmcoc3RyaW5nMyk7CiAgcmV0dXJuIGNhY2hlZEVuY29kZXIuZW5jb2RlKHN0cmluZzMpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIHsKICByZXR1cm4gYmFzZTY0Mi5yZXBsYWNlQWxsKCIrIiwgIi0iKS5yZXBsYWNlQWxsKCIvIiwgIl8iKS5yZXBsYWNlKC89KyQvLCAiIik7Cn0KZnVuY3Rpb24gYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0dXJsKSB7CiAgY29uc3QgYmFzZTY0MiA9IGJhc2U2NHVybC5yZXBsYWNlQWxsKCItIiwgIisiKS5yZXBsYWNlQWxsKCJfIiwgIi8iKTsKICBjb25zdCBwYWRkaW5nID0gKDQgLSBiYXNlNjQyLmxlbmd0aCAlIDQpICUgNDsKICByZXR1cm4gYmFzZTY0MiArICI9Ii5yZXBlYXQocGFkZGluZyk7Cn0KZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGFycmF5LCB7IHVybFNhZmUgPSBmYWxzZSB9ID0ge30pIHsKICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICBsZXQgYmFzZTY0MiA9ICIiOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGFycmF5Lmxlbmd0aDsgaW5kZXgyICs9IE1BWF9CTE9DS19TSVpFKSB7CiAgICBjb25zdCBjaHVuayA9IGFycmF5LnN1YmFycmF5KGluZGV4MiwgaW5kZXgyICsgTUFYX0JMT0NLX1NJWkUpOwogICAgYmFzZTY0MiArPSBnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodm9pZCAwLCBjaHVuaykpOwogIH0KICByZXR1cm4gdXJsU2FmZSA/IGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIDogYmFzZTY0MjsKfQpmdW5jdGlvbiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7CiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0U3RyaW5nKSksICh4MykgPT4geDMuY29kZVBvaW50QXQoMCkpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cmluZzMsIHsgdXJsU2FmZSA9IGZhbHNlIH0gPSB7fSkgewogIGFzc2VydFN0cmluZyhzdHJpbmczKTsKICByZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KHN0cmluZ1RvVWludDhBcnJheShzdHJpbmczKSwgeyB1cmxTYWZlIH0pOwp9CmZ1bmN0aW9uIGJhc2U2NFRvU3RyaW5nKGJhc2U2NFN0cmluZykgewogIGFzc2VydFN0cmluZyhiYXNlNjRTdHJpbmcpOwogIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykpOwp9CmZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0hleChhcnJheSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogIGxldCBoZXhTdHJpbmcgPSAiIjsKICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCBhcnJheS5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBoZXhTdHJpbmcgKz0gYnl0ZVRvSGV4TG9va3VwVGFibGVbYXJyYXlbaW5kZXgyXV07CiAgfQogIHJldHVybiBoZXhTdHJpbmc7Cn0KZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleFN0cmluZykgewogIGFzc2VydFN0cmluZyhoZXhTdHJpbmcpOwogIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMiAhPT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLiIpOwogIH0KICBjb25zdCByZXN1bHRMZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoIC8gMjsKICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdExlbmd0aCk7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgcmVzdWx0TGVuZ3RoOyBpbmRleDIrKykgewogICAgY29uc3QgaGlnaE5pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleDIgKiAyXV07CiAgICBjb25zdCBsb3dOaWJibGUgPSBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZVtoZXhTdHJpbmdbaW5kZXgyICogMiArIDFdXTsKICAgIGlmIChoaWdoTmliYmxlID09PSB2b2lkIDAgfHwgbG93TmliYmxlID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEhleCBjaGFyYWN0ZXIgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gJHtpbmRleDIgKiAyfWApOwogICAgfQogICAgYnl0ZXNbaW5kZXgyXSA9IGhpZ2hOaWJibGUgPDwgNCB8IGxvd05pYmJsZTsKICB9CiAgcmV0dXJuIGJ5dGVzOwp9CmZ1bmN0aW9uIGdldFVpbnRCRSh2aWV3KSB7CiAgY29uc3QgeyBieXRlTGVuZ3RoIH0gPSB2aWV3OwogIGlmIChieXRlTGVuZ3RoID09PSA2KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50MTYoMCkgKiAyICoqIDMyICsgdmlldy5nZXRVaW50MzIoMik7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSA1KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50OCgwKSAqIDIgKiogMzIgKyB2aWV3LmdldFVpbnQzMigxKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDMpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KDApICogMiAqKiAxNiArIHZpZXcuZ2V0VWludDE2KDEpOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KDApOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDgoMCk7CiAgfQp9CmZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlMikgewogIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogIGNvbnN0IHZhbHVlTGVuZ3RoID0gdmFsdWUyLmxlbmd0aDsKICBpZiAodmFsdWVMZW5ndGggPT09IDApIHsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKHZhbHVlTGVuZ3RoID4gYXJyYXlMZW5ndGgpIHsKICAgIHJldHVybiAtMTsKICB9CiAgY29uc3QgdmFsaWRPZmZzZXRMZW5ndGggPSBhcnJheUxlbmd0aCAtIHZhbHVlTGVuZ3RoOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8PSB2YWxpZE9mZnNldExlbmd0aDsgaW5kZXgyKyspIHsKICAgIGxldCBpc01hdGNoMyA9IHRydWU7CiAgICBmb3IgKGxldCBpbmRleDIyID0gMDsgaW5kZXgyMiA8IHZhbHVlTGVuZ3RoOyBpbmRleDIyKyspIHsKICAgICAgaWYgKGFycmF5W2luZGV4MiArIGluZGV4MjJdICE9PSB2YWx1ZTJbaW5kZXgyMl0pIHsKICAgICAgICBpc01hdGNoMyA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNNYXRjaDMpIHsKICAgICAgcmV0dXJuIGluZGV4MjsKICAgIH0KICB9CiAgcmV0dXJuIC0xOwp9CmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZTIpIHsKICByZXR1cm4gaW5kZXhPZihhcnJheSwgdmFsdWUyKSAhPT0gLTE7Cn0KdmFyIG9iamVjdFRvU3RyaW5nLCB1aW50OEFycmF5U3RyaW5naWZpZWQsIGFycmF5QnVmZmVyU3RyaW5naWZpZWQsIGNhY2hlZERlY29kZXJzLCBjYWNoZWRFbmNvZGVyLCBNQVhfQkxPQ0tfU0laRSwgYnl0ZVRvSGV4TG9va3VwVGFibGUsIGhleFRvRGVjaW1hbExvb2t1cFRhYmxlOwp2YXIgaW5pdF91aW50OGFycmF5X2V4dHJhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIoKSB7CiAgICBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB1aW50OEFycmF5U3RyaW5naWZpZWQgPSAiW29iamVjdCBVaW50OEFycmF5XSI7CiAgICBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICAgIGNhY2hlZERlY29kZXJzID0gewogICAgICB1dGY4OiBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpCiAgICB9OwogICAgY2FjaGVkRW5jb2RlciA9IG5ldyBnbG9iYWxUaGlzLlRleHRFbmNvZGVyKCk7CiAgICBNQVhfQkxPQ0tfU0laRSA9IDY1NTM1OwogICAgYnl0ZVRvSGV4TG9va3VwVGFibGUgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF80LCBpbmRleDIpID0+IGluZGV4Mi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZSA9IHsKICAgICAgMDogMCwKICAgICAgMTogMSwKICAgICAgMjogMiwKICAgICAgMzogMywKICAgICAgNDogNCwKICAgICAgNTogNSwKICAgICAgNjogNiwKICAgICAgNzogNywKICAgICAgODogOCwKICAgICAgOTogOSwKICAgICAgYTogMTAsCiAgICAgIGI6IDExLAogICAgICBjOiAxMiwKICAgICAgZDogMTMsCiAgICAgIGU6IDE0LAogICAgICBmOiAxNSwKICAgICAgQTogMTAsCiAgICAgIEI6IDExLAogICAgICBDOiAxMiwKICAgICAgRDogMTMsCiAgICAgIEU6IDE0LAogICAgICBGOiAxNQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRidWZmZXJfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF91aW50OGFycmF5X2V4dHJhcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOCwgewogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5MiwKICBlbnN1cmVQdXJlVWludDhBcnJheTogKCkgPT4gZW5zdXJlUHVyZVVpbnQ4QXJyYXksCiAgaXNCdWZmZXJMaWtlOiAoKSA9PiBpc0J1ZmZlckxpa2UsCiAgaXNVaW50OEFycmF5OiAoKSA9PiBpc1VpbnQ4QXJyYXkyLAogIHVJbnQ4QXJyYXlFeHRyYXM6ICgpID0+IHVJbnQ4QXJyYXlFeHRyYXMsCiAgdUludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1SW50OEFycmF5VG9CYXNlNjQKfSk7CmZ1bmN0aW9uIHVJbnQ4QXJyYXlUb0Jhc2U2NCh1SW50OEFycmF5KSB7CiAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMudWludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXkpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheTIoYmFzZTY0MikgewogIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjQyKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2Uob2JqKSB7CiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLmJ5dGVMZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIEJ1ZmZlci5pc0J1ZmZlcikgewogICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gZW5zdXJlUHVyZVVpbnQ4QXJyYXkoYnVmZmVyQXJnKSB7CiAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZy5sZW5ndGgpOwogIHVpbnQ4QXJyYXkuc2V0KGJ1ZmZlckFyZyk7CiAgcmV0dXJuIHVpbnQ4QXJyYXk7Cn0KdmFyIHVJbnQ4QXJyYXlFeHRyYXMsIGlzVWludDhBcnJheTI7CnZhciBpbml0X2Rpc3RfdHM4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGJ1ZmZlcl9wbHVnaW5zKCk7CiAgICB1SW50OEFycmF5RXh0cmFzID0gdWludDhhcnJheV9leHRyYXNfZXhwb3J0czsKICAgIGlzVWludDhBcnJheTIgPSAob2JqKSA9PiB7CiAgICAgIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmlzVWludDhBcnJheShvYmopOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9zbWFydGd1YXJkLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRndWFyZF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzCnZhciBHdWFyZDsKdmFyIGluaXRfY2xhc3Nlc19ndWFyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzIigpIHsKICAgIGluaXRfc21hcnRndWFyZF9wbHVnaW5zKCk7CiAgICBHdWFyZCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRGdW5jdGlvbkFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuZ3VhcmRGdW5jdGlvbiA9IGd1YXJkRnVuY3Rpb25Bcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZXhlY3V0ZXMgdGhlIGd1YXJkIGFnYWluc3QgYSBkYXRhIGFyZ3VtZW50OwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlYyhkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ndWFyZEZ1bmN0aW9uKGRhdGFBcmcpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKGRhdGFBcmcpOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZhaWxlZEhpbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMKdmFyIEd1YXJkRXJyb3I7CnZhciBpbml0X2NsYXNzZXNfZ3VhcmRlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIEd1YXJkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIpIHsKICAgICAgICBzdXBlcihtZXNzYWdlMik7CiAgICAgICAgdGhpcy5uYW1lID0gIkd1YXJkRXJyb3IiOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMKdmFyIEd1YXJkU2V0Owp2YXIgaW5pdF9jbGFzc2VzX2d1YXJkc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgR3VhcmRTZXQgPSBjbGFzcyBleHRlbmRzIEd1YXJkIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRBcnJheSA9IFtdKSB7CiAgICAgICAgc3VwZXIoYXN5bmMgKGRhdGFBcmcpID0+IHsKICAgICAgICAgIHJldHVybiB0aGlzLmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ndWFyZHMgPSBndWFyZEFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBleGVjdXRlcyBhbGwgZ3VhcmRzIGluIGFsbCBndWFyZFNldHMgYWdhaW5zdCBhIGRhdGEgYXJndW1lbnQKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnID0gewogICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgfSkgewogICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2VzID0gW107CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZ3VhcmRSZXN1bHRQcm9taXNlID0gZ3VhcmQuZXhlYyhkYXRhQXJnKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1vZGUgPT09ICJzZXJpYWwiKSB7CiAgICAgICAgICAgIGF3YWl0IGd1YXJkUmVzdWx0UHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goZ3VhcmRSZXN1bHRQcm9taXNlKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnN0b3BPbkZhaWwpIHsKICAgICAgICAgICAgaWYgKCFhd2FpdCBndWFyZFJlc3VsdFByb21pc2UpIHsKICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0UHJvbWlzZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBpZiBhbGwgZ3VhcmRzIHBhc3MKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFsbEd1YXJkc1Bhc3MoZGF0YUFyZywgb3B0aW9uc0FyZyA9IHsKICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgIHN0b3BPbkZhaWw6IGZhbHNlCiAgICAgIH0pIHsKICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5leGVjQWxsV2l0aERhdGEoZGF0YUFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIGFueSBndWFyZCBwYXNzZXMKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFueUd1YXJkc1Bhc3MoZGF0YUFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCB7CiAgICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgdGhlIGZpcnN0IHJlYXNvbiBmb3Igd2h5IHNvbWV0aGluZyBmYWlscwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKiBAcmV0dXJucwogICAgICAgKi8KICAgICAgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGd1YXJkLmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICBpZiAoZmFpbGVkSGludCkgewogICAgICAgICAgICByZXR1cm4gZmFpbGVkSGludDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOSwgewogIEd1YXJkOiAoKSA9PiBHdWFyZCwKICBHdWFyZEVycm9yOiAoKSA9PiBHdWFyZEVycm9yLAogIEd1YXJkU2V0OiAoKSA9PiBHdWFyZFNldCwKICBwYXNzR3VhcmRzT3JSZWplY3Q6ICgpID0+IHBhc3NHdWFyZHNPclJlamVjdAp9KTsKdmFyIHBhc3NHdWFyZHNPclJlamVjdDsKdmFyIGluaXRfZGlzdF90czkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkc2V0KCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRzZXQoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZGVycm9yKCk7CiAgICBwYXNzR3VhcmRzT3JSZWplY3QgPSBhc3luYyAoZGF0YUFyZywgZ3VhcmRzKSA9PiB7CiAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IEd1YXJkU2V0KGd1YXJkcyk7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgdGhyb3cgbmV3IEd1YXJkRXJyb3IoYEd1YXJkcyBmYWlsZWQ6CiR7ZmFpbGVkSGludH0KICAgIGApOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGVudl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMKdmFyIFNtYXJ0ZW52Owp2YXIgaW5pdF9zbWFydGVudl9jbGFzc2VzX3NtYXJ0ZW52ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMiKCkgewogICAgaW5pdF9zbWFydGVudl9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMoKTsKICAgIFNtYXJ0ZW52ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICAgICAgfQogICAgICBhc3luYyBnZXRFbnZBd2FyZU1vZHVsZShvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKG9wdGlvbnNBcmcubm9kZU1vZHVsZU5hbWUpOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVXZWJNb2R1bGUob3B0aW9uc0FyZy53ZWJVcmxBcmcsIG9wdGlvbnNBcmcuZ2V0RnVuY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcigicGxhdGZvcm0gZm9yIGxvYWRpbmcgbm90IHN1cHBvcnRlZCBieSBzbWFydGVudiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlTm9kZU1vZHVsZShtb2R1bGVOYW1lQXJnLCBydW5BZnRlckZ1bmMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBZb3UgdHJpZWQgdG8gbG9hZCBhIG5vZGUgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7bW9kdWxlTmFtZUFyZ30nKWApKCk7CiAgICAgICAgaWYgKHJ1bkFmdGVyRnVuYykgewogICAgICAgICAgYXdhaXQgcnVuQWZ0ZXJGdW5jKHJldHVyblZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgICB9CiAgICAgIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnLCBnZXRGdW5jdGlvbkFyZykgewogICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyh1cmxBcmcpOwogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgc2NyaXB0LnNyYyA9IHVybEFyZzsKICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgICB9CiAgICAgIGdldCBydW50aW1lRW52KCkgewogICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiAibm9kZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCBpc0Jyb3dzZXIoKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLmlzTm9kZTsKICAgICAgfQogICAgICBnZXQgdXNlckFnZW50KCkgewogICAgICAgIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IGlzTm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAibm9kZSI7CiAgICAgIH0KICAgICAgZ2V0IG5vZGVWZXJzaW9uKCkgewogICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb247CiAgICAgIH0KICAgICAgZ2V0IGlzQ0koKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc1dpbmRvd3NBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAid2luMzIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTGludXhBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAibGludXgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGUKICAgICAgICovCiAgICAgIGFzeW5jIHByaW50RW52KCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gTk9ERSIpOwogICAgICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIEJST1dTRVIiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMCwgewogIFNtYXJ0ZW52OiAoKSA9PiBTbWFydGVudgp9KTsKdmFyIGluaXRfZGlzdF90czEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRlbnZfY2xhc3Nlc19zbWFydGVudigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlOwp2YXIgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcwp2YXIgc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsIHsKICBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZywKICBjcmVhdGVSYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZVJhbmRvbVN0cmluZwp9KTsKdmFyIGdldFJhbmRvbUludCwgY3VzdG9tUmFuZG9tYXRpYywgY3JlYXRlUmFuZG9tU3RyaW5nLCBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGdldFJhbmRvbUludCA9IChtaW4zLCBtYXgzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gInVuZGVmaW5lZCIgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjM7CiAgICAgICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7CiAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTsKICAgICAgICByZXR1cm4gbWluMyArIGFycmF5WzBdICUgcmFuZ2UyOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4MyAtIG1pbjMpKSArIG1pbjM7CiAgICAgIH0KICAgIH07CiAgICBjdXN0b21SYW5kb21hdGljID0gKHBhdHRlcm4sIGxlbmd0aCwgb3B0aW9ucykgPT4gewogICAgICBjb25zdCBjaGFyU2V0cyA9IHsKICAgICAgICAiQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsCiAgICAgICAgImEiOiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogICAgICAgICIwIjogIjAxMjM0NTY3ODkiLAogICAgICAgICIhIjogIiFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IiwKICAgICAgICAiKiI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IgogICAgICB9OwogICAgICBsZXQgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm47CiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gcGF0dGVybi5sZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5yZXBlYXQoTWF0aC5jZWlsKGxlbmd0aCAvIHBhdHRlcm4ubGVuZ3RoKSkuc2xpY2UoMCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChsZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5zbGljZSgwLCBsZW5ndGgpOwogICAgICB9CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFjdHVhbFBhdHRlcm4pIHsKICAgICAgICBpZiAoY2hhclNldHNbY2hhcl0pIHsKICAgICAgICAgIGNvbnN0IGNoYXJTZXQgPSBjaGFyU2V0c1tjaGFyXTsKICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gZ2V0UmFuZG9tSW50KDAsIGNoYXJTZXQubGVuZ3RoKTsKICAgICAgICAgIHJlc3VsdCArPSBjaGFyU2V0W3JhbmRvbUluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ICs9IGNoYXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgY3JlYXRlUmFuZG9tU3RyaW5nID0gKHBhdHRlcm5BcmcsIGxlbmd0aEFyZywgb3B0aW9uc0FyZykgPT4gewogICAgICByZXR1cm4gY3VzdG9tUmFuZG9tYXRpYyhwYXR0ZXJuQXJnLCBsZW5ndGhBcmcsIG9wdGlvbnNBcmcpOwogICAgfTsKICAgIGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyA9ICgpID0+IHsKICAgICAgcmV0dXJuIGlzb3VuaXF1ZS51bmkoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb2NrZXIuanMKdmFyIHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzLCB7CiAgbWFrZUVudk9iamVjdDogKCkgPT4gbWFrZUVudk9iamVjdAp9KTsKdmFyIG1ha2VFbnZPYmplY3Q7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvY2tlci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIG1ha2VFbnZPYmplY3QgPSBmdW5jdGlvbihlbnZBcnJheUFyZykgewogICAgICBsZXQgcmV0dXJuT2JqZWN0ID0ge307CiAgICAgIGxldCByZWdleFN0cmluZyA9IC8oLiopPSguKikvOwogICAgICBpZiAodHlwZW9mIGVudkFycmF5QXJnICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIGZvciAobGV0IGVudktleSBpbiBlbnZBcnJheUFyZykgewogICAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoZW52QXJyYXlBcmdbZW52S2V5XSk7CiAgICAgICAgICByZXR1cm5PYmplY3RbcmVnZXhNYXRjaGVzWzFdXSA9IHJlZ2V4TWF0Y2hlc1syXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVybk9iamVjdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5pbmRlbnQuanMKdmFyIHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLCB7CiAgaW5kZW50OiAoKSA9PiBpbmRlbnQsCiAgaW5kZW50V2l0aFByZWZpeDogKCkgPT4gaW5kZW50V2l0aFByZWZpeCwKICBub3JtYWxpemU6ICgpID0+IG5vcm1hbGl6ZQp9KTsKdmFyIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWssIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcywgY2xlYW5TdHJpbmdBcnJheSwgaW5kZW50LCBpbmRlbnRXaXRoUHJlZml4LCBub3JtYWxpemU7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmluZGVudC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRBcnJheSA9IHN0cmluZ0FyZy5zcGxpdCgiXG4iKTsKICAgICAgcmV0dXJuIGNsZWFuU3RyaW5nQXJyYXkocmVzdWx0QXJyYXkpOwogICAgfTsKICAgIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyA9IChzdHJpbmdBcnJheUFyZykgPT4gewogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gIiI7CiAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBsaW5lICsgIlxuIjsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGNsZWFuU3RyaW5nQXJyYXkgPSAoc3RyaW5nQXJyYXlBcmcpID0+IHsKICAgICAgbGV0IHRlc3RSZWdleCA9IC9eW1xzXSokLzsKICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnWzBdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnW3N0cmluZ0FycmF5QXJnLmxlbmd0aCAtIDFdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnBvcCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdBcnJheUFyZzsKICAgIH07CiAgICBpbmRlbnQgPSAoc3RyaW5nQXJnLCBzcGFjZUFtb3VudCkgPT4gewogICAgICBsZXQgbG9jYWxTdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgZm9yIChsZXQgc3RyaW5nQXJnMiBvZiBsb2NhbFN0cmluZ0FycmF5KSB7CiAgICAgICAgc3RyaW5nQXJnMiA9ICIgIi5yZXBlYXQoc3BhY2VBbW91bnQpICsgc3RyaW5nQXJnMjsKICAgICAgfQogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKGxvY2FsU3RyaW5nQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGluZGVudFdpdGhQcmVmaXggPSAoc3RyaW5nQXJnLCBwcmVmaXhBcmcpID0+IHsKICAgICAgbGV0IHJlc3VsdFN0cmluZzsKICAgICAgbGV0IHN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheSkgewogICAgICAgIHJlc3VsdEFycmF5LnB1c2gocHJlZml4QXJnICsgc3RyaW5nSXRlbSk7CiAgICAgIH0KICAgICAgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKHJlc3VsdEFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBub3JtYWxpemUgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRTdHJpbmc7CiAgICAgIGxldCBzcGxpdFN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgbWluQ29tbW9uTGVmdE9mZnNldDsKICAgICAgY29uc3QgZGVJbmRlbnRSZWdleCA9IC9eKFxzKikvOwogICAgICBjb25zdCBlbXB0eUxpbmVSZWdleCA9IC9eKFxzKikkLzsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzcGxpdFN0cmluZ0FycmF5KSB7CiAgICAgICAgbGV0IG9mZnNldFN0cmluZyA9IGRlSW5kZW50UmVnZXguZXhlYyhzdHJpbmdJdGVtKVsxXTsKICAgICAgICBpZiAoKHR5cGVvZiBtaW5Db21tb25MZWZ0T2Zmc2V0ID09PSAidW5kZWZpbmVkIiB8fCBvZmZzZXRTdHJpbmcubGVuZ3RoIDwgbWluQ29tbW9uTGVmdE9mZnNldCkgJiYgIWVtcHR5TGluZVJlZ2V4LnRlc3Qoc3RyaW5nSXRlbSkpIHsKICAgICAgICAgIG1pbkNvbW1vbkxlZnRPZmZzZXQgPSBvZmZzZXRTdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgcmVzdWx0U3BsaXRTdHJpbmdBcnJheSA9IFtdOwogICAgICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHNwbGl0U3RyaW5nQXJyYXkpIHsKICAgICAgICByZXN1bHRTcGxpdFN0cmluZ0FycmF5LnB1c2goc3RyaW5nSXRlbS5zdWJzdHIobWluQ29tbW9uTGVmdE9mZnNldCkpOwogICAgICB9CiAgICAgIHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhyZXN1bHRTcGxpdFN0cmluZ0FycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5ub3JtYWxpemUuanMKdmFyIHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzLCB7CiAgcmVwbGFjZUFsbDogKCkgPT4gcmVwbGFjZUFsbCwKICBzdGFuZGFyZDogKCkgPT4gc3RhbmRhcmQKfSk7CnZhciByZXBsYWNlQWxsLCBzdHJpcEluZGVudCwgc3RhbmRhcmQ7CnZhciBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5qcyIoKSB7CiAgICByZXBsYWNlQWxsID0gKHN0cmluZ0FyZywgc2VhcmNoUGF0dGVybiwgcmVwbGFjZW1lbnRTdHJpbmcpID0+IHsKICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKG5ldyBSZWdFeHAoc2VhcmNoUGF0dGVybiwgImciKSwgcmVwbGFjZW1lbnRTdHJpbmcpOwogICAgfTsKICAgIHN0cmlwSW5kZW50ID0gKHN0cikgPT4gewogICAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgiXG4iKTsKICAgICAgbGV0IG1pbkluZGVudCA9IEluZmluaXR5OwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gbGluZS5tYXRjaCgvXihccyopLyk7CiAgICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICAgIG1pbkluZGVudCA9IE1hdGgubWluKG1pbkluZGVudCwgbWF0Y2gyWzFdLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtaW5JbmRlbnQgPT09IEluZmluaXR5IHx8IG1pbkluZGVudCA9PT0gMCkgewogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gewogICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSBtaW5JbmRlbnQpIHsKICAgICAgICAgIHJldHVybiBsaW5lLnNsaWNlKG1pbkluZGVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9KS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YW5kYXJkID0gKHN0cmluZ0FyZywgb3B0aW9ucykgPT4gewogICAgICBsZXQgcmVzdWx0ID0gc3RyaW5nQXJnOwogICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcEluZGVudCkgewogICAgICAgIHJlc3VsdCA9IHN0cmlwSW5kZW50KHJlc3VsdCk7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMubm9ybWFsaXplTmV3bGluZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cclxuL2csICJcbiIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnJlcGxhY2VUYWJzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZUFsbChyZXN1bHQsICIJLyIsICIgIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBMZWFkaW5nVHJhaWxpbmdFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKS5yZXBsYWNlKC9ccypbXHJcbl0kL2dtLCAiIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBBbGxFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcwp2YXIgdW5pdmVyc2FsQmFzZTY0LCBCYXNlNjQsIGJhc2U2NDsKdmFyIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuYmFzZTY0LmpzIigpIHsKICAgIHVuaXZlcnNhbEJhc2U2NCA9IHsKICAgICAgZW5jb2RlOiAoc3RyKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAidXRmOCIpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgY29uc3QgdXRmOEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7CiAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBBcnJheS5mcm9tKHV0ZjhCeXRlcywgKGJ5dGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkpLmpvaW4oIiIpOwogICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpOwogICAgICAgICAgbGV0IHJlc3VsdCA9ICIiOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGE1ID0gYnl0ZXNbaTExKytdOwogICAgICAgICAgICBjb25zdCBiNSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGMxMSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGJpdG1hcCA9IGE1IDw8IDE2IHwgYjUgPDwgOCB8IGMxMTsKICAgICAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gMTggJiA2Myk7CiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoYml0bWFwID4+IDEyICYgNjMpOwogICAgICAgICAgICByZXN1bHQgKz0gaTExIC0gMiA8IGJ5dGVzLmxlbmd0aCA/IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gNiAmIDYzKSA6ICI9IjsKICAgICAgICAgICAgcmVzdWx0ICs9IGkxMSAtIDEgPCBieXRlcy5sZW5ndGggPyBjaGFycy5jaGFyQXQoYml0bWFwICYgNjMpIDogIj0iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlY29kZTogKHN0cikgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHN0ci5yZXBsYWNlKC8tL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIpLnBhZEVuZChzdHIubGVuZ3RoICsgKDQgLSBzdHIubGVuZ3RoICUgNCkgJSA0LCAiPSIpOwogICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NFN0cmluZywgImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXRvYiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0U3RyaW5nKTsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBieXRlc1tpMTFdID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjaGFycyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgICAgIGxldCBieXRlcyA9IFtdOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYmFzZTY0U3RyaW5nLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkMSA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMyA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkNCA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBiaXRtYXAgPSBlbmNvZGVkMSA8PCAxOCB8IGVuY29kZWQyIDw8IDEyIHwgZW5jb2RlZDMgPDwgNiB8IGVuY29kZWQ0OwogICAgICAgICAgICBieXRlcy5wdXNoKGJpdG1hcCA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkMyAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkNCAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgJiAyNTUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIEJhc2U2NCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoaW5wdXRTdHJpbmdBcmcsIHR5cGVBcmcpIHsKICAgICAgICBzd2l0Y2ggKHR5cGVBcmcpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIHRoaXMucmVmU3RyaW5nID0gaW5wdXRTdHJpbmdBcmc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiYXNlNjR1cmkiOgogICAgICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGJhc2U2NC5kZWNvZGUoaW5wdXRTdHJpbmdBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIHNpbXBsZSBzdHJpbmcgKHVuZW5jb2RlZCkKICAgICAgICovCiAgICAgIGdldCBzaW1wbGVTdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVmU3RyaW5nOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0aGUgYmFzZTY0IGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nCiAgICAgICAqLwogICAgICBnZXQgYmFzZTY0U3RyaW5nKCkgewogICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKHRoaXMucmVmU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIGJhc2U2NHVyaSBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZwogICAgICAgKi8KICAgICAgZ2V0IGJhc2U2NFVyaVN0cmluZygpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LmVuY29kZVVyaSh0aGlzLnJlZlN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgICBiYXNlNjQgPSB7CiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIHRoZSBzdHJpbmcKICAgICAgICovCiAgICAgIGVuY29kZTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIGEgc3RyaW5nQXJnIHRvIGJhc2U2NCB1cmkgc3R5bGUKICAgICAgICovCiAgICAgIGVuY29kZVVyaTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZykucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0vZywgIiIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogZGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZwogICAgICAgKi8KICAgICAgZGVjb2RlOiAoc3RyaW5nQXJnKSA9PiB7CiAgICAgICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5kZWNvZGUoc3RyaW5nQXJnKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzdHJpbmdBcmcKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgc3RyaW5nIGlzIGJhc2U2NCBlbmNvZGVkCiAgICAgICAqLwogICAgICBpc0Jhc2U2NDogKHN0cmluZ0FyZykgPT4gewogICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC87CiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nQXJnKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnR5cGUuanMKdmFyIHNtYXJ0c3RyaW5nX3R5cGVfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ190eXBlX2V4cG9ydHMsIHsKICBpc0Jhc2U2NDogKCkgPT4gaXNCYXNlNjQsCiAgaXNVdGY4OiAoKSA9PiBpc1V0ZjgKfSk7CnZhciBpc1V0ZjgsIGlzQmFzZTY0Owp2YXIgaW5pdF9zbWFydHN0cmluZ190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcudHlwZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0KCk7CiAgICBpc1V0ZjggPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGVuY29kZXIyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gZW5jb2RlcjIuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gQVNDSUkKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDkgfHwgYnl0ZXNbaTExXSA9PT0gMTAgfHwgYnl0ZXNbaTExXSA9PT0gMTMgfHwgMzIgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDEyNgogICAgICAgICkgewogICAgICAgICAgaTExICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gbm9uLW92ZXJsb25nIDItYnl0ZQogICAgICAgICAgMTk0IDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyMjMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gZXhjbHVkaW5nIG92ZXJsb25ncwogICAgICAgICAgYnl0ZXNbaTExXSA9PT0gMjI0ICYmIDE2MCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDJdICYmIGJ5dGVzW2kxMSArIDJdIDw9IDE5MSB8fCAvLyBzdHJhaWdodCAzLWJ5dGUKICAgICAgICAgICgyMjUgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDIzNiB8fCBieXRlc1tpMTFdID09PSAyMzggfHwgYnl0ZXNbaTExXSA9PT0gMjM5KSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgfHwgLy8gZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDIzNyAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTU5ICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIHBsYW5lcyAxLTMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0MCAmJiAxNDQgPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MSB8fCAvLyBwbGFuZXMgNC0xNQogICAgICAgICAgMjQxIDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyNDMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEgfHwgLy8gcGxhbmUgMTYKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0NCAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTQzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIGlzQmFzZTY0ID0gKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBub3RCYXNlNjQgPSAvW15BLVowLTkrXC89XS9pOwogICAgICBjb25zdCBsZW4gPSBzdHJpbmdBcmcubGVuZ3RoOwogICAgICBpZiAoIWxlbiB8fCBsZW4gJSA0ICE9PSAwIHx8IG5vdEJhc2U2NC50ZXN0KHN0cmluZ0FyZykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgZmlyc3RQYWRkaW5nQ2hhciA9IHN0cmluZ0FyZy5pbmRleE9mKCI9Iik7CiAgICAgIHJldHVybiBmaXJzdFBhZGRpbmdDaGFyID09PSAtMSB8fCBmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAxIHx8IGZpcnN0UGFkZGluZ0NoYXIgPT09IGxlbiAtIDIgJiYgc3RyaW5nQXJnW2xlbiAtIDFdID09PSAiPSI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuZG9tYWluLmpzCnZhciBEb21haW47CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvbWFpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcyIoKSB7CiAgICBEb21haW4gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpblN0cmluZ0FyZykgewogICAgICAgIHRoaXMucHJvdG9jb2wgPSB0aGlzLl9wcm90b2NvbFJlZ2V4KGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgaWYgKCF0aGlzLnByb3RvY29sKSB7CiAgICAgICAgICBkb21haW5TdHJpbmdBcmcgPSBgaHR0cHM6Ly8ke2RvbWFpblN0cmluZ0FyZ31gOwogICAgICAgIH0KICAgICAgICB0aGlzLm5vZGVQYXJzZWRVcmwgPSBuZXcgVVJMKGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5wb3J0ID0gdGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gdGhpcy5fZG9tYWluUmVnZXgoZG9tYWluU3RyaW5nQXJnLnJlcGxhY2UodGhpcy5ub2RlUGFyc2VkVXJsLnBhdGhuYW1lLCAiIikpOwogICAgICAgIHRoaXMuZnVsbE5hbWUgPSAiIjsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgICAgICAgIGlmIChyZWdleE1hdGNoZXNbaTExIC0gMV0pIHsKICAgICAgICAgICAgY29uc3QgbG9jYWxNYXRjaCA9IHJlZ2V4TWF0Y2hlc1tpMTEgLSAxXTsKICAgICAgICAgICAgdGhpc1sibGV2ZWwiICsgaTExLnRvU3RyaW5nKCldID0gbG9jYWxNYXRjaDsKICAgICAgICAgICAgaWYgKHRoaXMuZnVsbE5hbWUgPT09ICIiKSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2g7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2ggKyAiLiIgKyB0aGlzLmZ1bGxOYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzWyJsZXZlbCIgKyBpMTEudG9TdHJpbmcoKV0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLmxldmVsMiArICIuIiArIHRoaXMubGV2ZWwxOwogICAgICAgIHRoaXMudG9wTGV2ZWwgPSB0aGlzLmxldmVsMTsKICAgICAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLmxldmVsMjsKICAgICAgICB0aGlzLnN1YkRvbWFpbiA9IHRoaXMubGV2ZWwzOwogICAgICB9CiAgICAgIC8vIGhlbHBlciBmdW5jdGlvbnMKICAgICAgLyoqICovCiAgICAgIF9kb21haW5SZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC8oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfSQvOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICByZWdleE1hdGNoZXMucmV2ZXJzZSgpOwogICAgICAgIHJlZ2V4TWF0Y2hlcy5wb3AoKTsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXNGaWx0ZXJlZCA9IHJlZ2V4TWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oc3RyaW5nQXJnMikgewogICAgICAgICAgcmV0dXJuIHN0cmluZ0FyZzIgIT09ICIiOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZWdleE1hdGNoZXNGaWx0ZXJlZDsKICAgICAgfQogICAgICBfcHJvdG9jb2xSZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC9eKFthLXpBLVowLTldKik6XC9cLy87CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpOwogICAgICAgIGlmIChyZWdleE1hdGNoZXMpIHsKICAgICAgICAgIHJldHVybiByZWdleE1hdGNoZXNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9wb3J0UmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvXihbYS16QS1aMC05XSopOlwvXC8vOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICBpZiAocmVnZXhNYXRjaGVzKSB7CiAgICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcwp2YXIgR2l0UmVwbywgZ2l0UmVnZXgsIGdpdExpbms7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2dpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIEdpdFJlcG8gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZ0FyZywgdG9rZW5BcmcpIHsKICAgICAgICBsZXQgcmVnZXhNYXRjaGVzID0gZ2l0UmVnZXgoc3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmhvc3QgPSByZWdleE1hdGNoZXNbMV07CiAgICAgICAgdGhpcy51c2VyID0gcmVnZXhNYXRjaGVzWzJdOwogICAgICAgIHRoaXMucmVwbyA9IHJlZ2V4TWF0Y2hlc1szXTsKICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdG9rZW5Bcmc7CiAgICAgICAgdGhpcy5zc2hVcmwgPSBnaXRMaW5rKHRoaXMuaG9zdCwgdGhpcy51c2VyLCB0aGlzLnJlcG8sIHRoaXMuYWNjZXNzVG9rZW4sICJzc2giKTsKICAgICAgICB0aGlzLmh0dHBzVXJsID0gZ2l0TGluayh0aGlzLmhvc3QsIHRoaXMudXNlciwgdGhpcy5yZXBvLCB0aGlzLmFjY2Vzc1Rva2VuLCAiaHR0cHMiKTsKICAgICAgfQogICAgfTsKICAgIGdpdFJlZ2V4ID0gZnVuY3Rpb24oc3RyaW5nQXJnKSB7CiAgICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gLyhbYS16QS1aMC05XC1fXC5dKikoPzpcL3xcOikoW2EtekEtWjAtOVwtX1wuXSopKD86XC8pKFthLXpBLVowLTlcLV9cLl0qKSg/OlwuZ2l0KS87CiAgICAgIGxldCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgIHJldHVybiByZWdleE1hdGNoZXM7CiAgICB9OwogICAgZ2l0TGluayA9IGZ1bmN0aW9uKGhvc3RBcmcsIHVzZXJBcmcsIHJlcG9BcmcsIHRva2VuQXJnID0gIiIsIGxpbmtUeXBlQXJnKSB7CiAgICAgIGxldCByZXR1cm5TdHJpbmc7CiAgICAgIGlmICh0b2tlbkFyZyAhPT0gIiIpIHsKICAgICAgICB0b2tlbkFyZyA9IHRva2VuQXJnICsgIkAiOwogICAgICB9CiAgICAgIHN3aXRjaCAobGlua1R5cGVBcmcpIHsKICAgICAgICBjYXNlICJodHRwcyI6CiAgICAgICAgICByZXR1cm5TdHJpbmcgPSAiaHR0cHM6Ly8iICsgdG9rZW5BcmcgKyBob3N0QXJnICsgIi8iICsgdXNlckFyZyArICIvIiArIHJlcG9BcmcgKyAiLmdpdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzc2giOgogICAgICAgICAgcmV0dXJuU3RyaW5nID0gImdpdEAiICsgaG9zdEFyZyArICI6IiArIHVzZXJBcmcgKyAiLyIgKyByZXBvQXJnICsgIi5naXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkxpbmsgVHlwZSAiICsgbGlua1R5cGVBcmcgKyAiIG5vdCBrbm93biIpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTEsIHsKICBCYXNlNjQ6ICgpID0+IEJhc2U2NCwKICBEb21haW46ICgpID0+IERvbWFpbiwKICBHaXRSZXBvOiAoKSA9PiBHaXRSZXBvLAogIGJhc2U2NDogKCkgPT4gYmFzZTY0LAogIGNyZWF0ZTogKCkgPT4gc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsCiAgZG9ja2VyOiAoKSA9PiBzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cywKICBpbmRlbnQ6ICgpID0+IHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLAogIG5vcm1hbGl6ZTogKCkgPT4gc21hcnRzdHJpbmdfbm9ybWFsaXplX2V4cG9ydHMsCiAgdHlwZTogKCkgPT4gc21hcnRzdHJpbmdfdHlwZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb2NrZXIoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfaW5kZW50KCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ190eXBlKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb21haW4oKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZ2l0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2guY2xvbmVkZWVwQDQuNS4wL25vZGVfbW9kdWxlcy9sb2Rhc2guY2xvbmVkZWVwL2luZGV4LmpzCnZhciByZXF1aXJlX2xvZGFzaCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLmNsb25lZGVlcEA0LjUuMC9ub2RlX21vZHVsZXMvbG9kYXNoLmNsb25lZGVlcC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDsKICAgIHZhciBIQVNIX1VOREVGSU5FRCA9ICJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjsKICAgIHZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTsKICAgIHZhciBhcmdzVGFnID0gIltvYmplY3QgQXJndW1lbnRzXSIsIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIiwgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIiwgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIiwgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iLCBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIiwgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwgbWFwVGFnID0gIltvYmplY3QgTWFwXSIsIG51bWJlclRhZyA9ICJbb2JqZWN0IE51bWJlcl0iLCBvYmplY3RUYWcgPSAiW29iamVjdCBPYmplY3RdIiwgcHJvbWlzZVRhZyA9ICJbb2JqZWN0IFByb21pc2VdIiwgcmVnZXhwVGFnID0gIltvYmplY3QgUmVnRXhwXSIsIHNldFRhZyA9ICJbb2JqZWN0IFNldF0iLCBzdHJpbmdUYWcgPSAiW29iamVjdCBTdHJpbmddIiwgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSIsIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCBkYXRhVmlld1RhZyA9ICJbb2JqZWN0IERhdGFWaWV3XSIsIGZsb2F0MzJUYWcgPSAiW29iamVjdCBGbG9hdDMyQXJyYXldIiwgZmxvYXQ2NFRhZyA9ICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCBpbnQ4VGFnID0gIltvYmplY3QgSW50OEFycmF5XSIsIGludDE2VGFnID0gIltvYmplY3QgSW50MTZBcnJheV0iLCBpbnQzMlRhZyA9ICJbb2JqZWN0IEludDMyQXJyYXldIiwgdWludDhUYWcgPSAiW29iamVjdCBVaW50OEFycmF5XSIsIHVpbnQ4Q2xhbXBlZFRhZyA9ICJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIHVpbnQxNlRhZyA9ICJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIHVpbnQzMlRhZyA9ICJbb2JqZWN0IFVpbnQzMkFycmF5XSI7CiAgICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXF4kLiorPygpW1xde318XS9nOwogICAgdmFyIHJlRmxhZ3MgPSAvXHcqJC87CiAgICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CiAgICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cZCopJC87CiAgICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9OwogICAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9IGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9IGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICAgIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9IGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKICAgIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICAgIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICJvYmplY3QiICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmOwogICAgdmFyIHJvb3Q2ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogICAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogICAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICAgIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzOwogICAgZnVuY3Rpb24gYWRkTWFwRW50cnkobWFwNywgcGFpcikgewogICAgICBtYXA3LnNldChwYWlyWzBdLCBwYWlyWzFdKTsKICAgICAgcmV0dXJuIG1hcDc7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRTZXRFbnRyeShzZXQzLCB2YWx1ZTIpIHsKICAgICAgc2V0My5hZGQodmFsdWUyKTsKICAgICAgcmV0dXJuIHNldDM7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLCBvZmZzZXQgPSBhcnJheS5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W29mZnNldCArIGluZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVRpbWVzKG4xMywgaXRlcmF0ZWUpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShuMTMpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBuMTMpIHsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IGl0ZXJhdGVlKGluZGV4Mik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5MikgewogICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3Rba2V5Ml07CiAgICB9CiAgICBmdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUyKSB7CiAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKICAgICAgaWYgKHZhbHVlMiAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZTIudG9TdHJpbmcgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSAhISh2YWx1ZTIgKyAiIik7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBUb0FycmF5KG1hcDcpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShtYXA3LnNpemUpOwogICAgICBtYXA3LmZvckVhY2goZnVuY3Rpb24odmFsdWUyLCBrZXkyKSB7CiAgICAgICAgcmVzdWx0WysraW5kZXgyXSA9IFtrZXkyLCB2YWx1ZTJdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtMikgewogICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtMihhcmcpKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0MykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIHJlc3VsdCA9IEFycmF5KHNldDMuc2l6ZSk7CiAgICAgIHNldDMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICByZXN1bHRbKytpbmRleDJdID0gdmFsdWUyOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICAgIHZhciBjb3JlSnNEYXRhID0gcm9vdDZbIl9fY29yZS1qc19zaGFyZWRfXyJdOwogICAgdmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAiIik7CiAgICAgIHJldHVybiB1aWQgPyAiU3ltYm9sKHNyYylfMS4iICsgdWlkIDogIiI7CiAgICB9KSgpOwogICAgdmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZzsKICAgIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciBvYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90by50b1N0cmluZzsKICAgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKAogICAgICAiXiIgKyBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eTMpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICIkMS4qPyIpICsgIiQiCiAgICApOwogICAgdmFyIEJ1ZmZlcjIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdDYuQnVmZmVyIDogdm9pZCAwLCBTeW1ib2wyID0gcm9vdDYuU3ltYm9sLCBVaW50OEFycmF5MiA9IHJvb3Q2LlVpbnQ4QXJyYXksIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLCBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBzcGxpY2UyID0gYXJyYXlQcm90by5zcGxpY2U7CiAgICB2YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyMiA/IEJ1ZmZlcjIuaXNCdWZmZXIgOiB2b2lkIDAsIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpOwogICAgdmFyIERhdGFWaWV3MiA9IGdldE5hdGl2ZShyb290NiwgIkRhdGFWaWV3IiksIE1hcDMgPSBnZXROYXRpdmUocm9vdDYsICJNYXAiKSwgUHJvbWlzZTIgPSBnZXROYXRpdmUocm9vdDYsICJQcm9taXNlIiksIFNldDIgPSBnZXROYXRpdmUocm9vdDYsICJTZXQiKSwgV2Vha01hcDIgPSBnZXROYXRpdmUocm9vdDYsICJXZWFrTWFwIiksIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICJjcmVhdGUiKTsKICAgIHZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldzIpLCBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwMyksIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZTIpLCBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0MiksIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcDIpOwogICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sMiA/IFN5bWJvbDIucHJvdG90eXBlIDogdm9pZCAwLCBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdm9pZCAwOwogICAgZnVuY3Rpb24gSGFzaDIoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLmhhcyhrZXkyKSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXkyXTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187CiAgICAgIGlmIChuYXRpdmVDcmVhdGUpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXkyXTsKICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHZvaWQgMCA6IHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkzLmNhbGwoZGF0YSwga2V5MikgPyBkYXRhW2tleTJdIDogdm9pZCAwOwogICAgfQogICAgZnVuY3Rpb24gaGFzaEhhcyhrZXkyKSB7CiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXzsKICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5Ml0gIT09IHZvaWQgMCA6IGhhc093blByb3BlcnR5My5jYWxsKGRhdGEsIGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gaGFzaFNldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fOwogICAgICBkYXRhW2tleTJdID0gbmF0aXZlQ3JlYXRlICYmIHZhbHVlMiA9PT0gdm9pZCAwID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTI7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgSGFzaDIucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyOwogICAgSGFzaDIucHJvdG90eXBlWyJkZWxldGUiXSA9IGhhc2hEZWxldGU7CiAgICBIYXNoMi5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDsKICAgIEhhc2gyLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzOwogICAgSGFzaDIucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7CiAgICBmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTsKICAgICAgaWYgKGluZGV4MiA9PSBsYXN0SW5kZXgpIHsKICAgICAgICBkYXRhLnBvcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwbGljZTIuY2FsbChkYXRhLCBpbmRleDIsIDEpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLCBpbmRleDIgPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5Mik7CiAgICAgIHJldHVybiBpbmRleDIgPCAwID8gdm9pZCAwIDogZGF0YVtpbmRleDJdWzFdOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkyKSA+IC0xOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICBkYXRhLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFbaW5kZXgyXVsxXSA9IHZhbHVlMjsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjsKICAgIExpc3RDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbGlzdENhY2hlRGVsZXRlOwogICAgTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhczsKICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0OwogICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSB7CiAgICAgICAgImhhc2giOiBuZXcgSGFzaDIoKSwKICAgICAgICAibWFwIjogbmV3IChNYXAzIHx8IExpc3RDYWNoZSkoKSwKICAgICAgICAic3RyaW5nIjogbmV3IEhhc2gyKCkKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5MilbImRlbGV0ZSJdKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5MikgewogICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5nZXQoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkyKSB7CiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleTIpLmhhcyhrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICBnZXRNYXBEYXRhKHRoaXMsIGtleTIpLnNldChrZXkyLCB2YWx1ZTIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIE1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7CiAgICBNYXBDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbWFwQ2FjaGVEZWxldGU7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7CiAgICBmdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX19bImRlbGV0ZSJdKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0hhcyhrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgY2FjaGUgPSB0aGlzLl9fZGF0YV9fOwogICAgICBpZiAoY2FjaGUgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHsKICAgICAgICB2YXIgcGFpcnMyID0gY2FjaGUuX19kYXRhX187CiAgICAgICAgaWYgKCFNYXAzIHx8IHBhaXJzMi5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkgewogICAgICAgICAgcGFpcnMyLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGNhY2hlID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlyczIpOwogICAgICB9CiAgICAgIGNhY2hlLnNldChrZXkyLCB2YWx1ZTIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7CiAgICBTdGFjay5wcm90b3R5cGVbImRlbGV0ZSJdID0gc3RhY2tEZWxldGU7CiAgICBTdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7CiAgICBTdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7CiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7CiAgICBmdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlMiwgaW5oZXJpdGVkKSB7CiAgICAgIHZhciByZXN1bHQgPSBpc0FycmF5Myh2YWx1ZTIpIHx8IGlzQXJndW1lbnRzKHZhbHVlMikgPyBiYXNlVGltZXModmFsdWUyLmxlbmd0aCwgU3RyaW5nKSA6IFtdOwogICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCwgc2tpcEluZGV4ZXMgPSAhIWxlbmd0aDsKICAgICAgZm9yICh2YXIga2V5MiBpbiB2YWx1ZTIpIHsKICAgICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eTMuY2FsbCh2YWx1ZTIsIGtleTIpKSAmJiAhKHNraXBJbmRleGVzICYmIChrZXkyID09ICJsZW5ndGgiIHx8IGlzSW5kZXgoa2V5MiwgbGVuZ3RoKSkpKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5MiwgdmFsdWUyKSB7CiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXkyXTsKICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkzLmNhbGwob2JqZWN0LCBrZXkyKSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUyKSkgfHwgdmFsdWUyID09PSB2b2lkIDAgJiYgIShrZXkyIGluIG9iamVjdCkpIHsKICAgICAgICBvYmplY3Rba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5MikgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5MikpIHsKICAgICAgICAgIHJldHVybiBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHsKICAgICAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5czIoc291cmNlKSwgb2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZTIsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXkyLCBvYmplY3QsIHN0YWNrKSB7CiAgICAgIHZhciByZXN1bHQ7CiAgICAgIGlmIChjdXN0b21pemVyKSB7CiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZTIsIGtleTIsIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZTIpOwogICAgICB9CiAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaWYgKCFpc09iamVjdDModmFsdWUyKSkgewogICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgIH0KICAgICAgdmFyIGlzQXJyID0gaXNBcnJheTModmFsdWUyKTsKICAgICAgaWYgKGlzQXJyKSB7CiAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUyKTsKICAgICAgICBpZiAoIWlzRGVlcCkgewogICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZTIsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUyKSwgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZzsKICAgICAgICBpZiAoaXNCdWZmZXIodmFsdWUyKSkgewogICAgICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlMiwgaXNEZWVwKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgaXNGdW5jICYmICFvYmplY3QpIHsKICAgICAgICAgIGlmIChpc0hvc3RPYmplY3QodmFsdWUyKSkgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUyIDoge307CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVPYmplY3QoaXNGdW5jID8ge30gOiB2YWx1ZTIpOwogICAgICAgICAgaWYgKCFpc0RlZXApIHsKICAgICAgICAgICAgcmV0dXJuIGNvcHlTeW1ib2xzKHZhbHVlMiwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlMikpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUyIDoge307CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZTIsIHRhZywgYmFzZUNsb25lLCBpc0RlZXApOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2soKSk7CiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlMik7CiAgICAgIGlmIChzdGFja2VkKSB7CiAgICAgICAgcmV0dXJuIHN0YWNrZWQ7CiAgICAgIH0KICAgICAgc3RhY2suc2V0KHZhbHVlMiwgcmVzdWx0KTsKICAgICAgaWYgKCFpc0FycikgewogICAgICAgIHZhciBwcm9wcyA9IGlzRnVsbCA/IGdldEFsbEtleXModmFsdWUyKSA6IGtleXMyKHZhbHVlMik7CiAgICAgIH0KICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlMiwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleTMpIHsKICAgICAgICBpZiAocHJvcHMpIHsKICAgICAgICAgIGtleTMgPSBzdWJWYWx1ZTsKICAgICAgICAgIHN1YlZhbHVlID0gdmFsdWUyW2tleTNdOwogICAgICAgIH0KICAgICAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleTMsIGJhc2VDbG9uZShzdWJWYWx1ZSwgaXNEZWVwLCBpc0Z1bGwsIGN1c3RvbWl6ZXIsIGtleTMsIHZhbHVlMiwgc3RhY2spKTsKICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvKSB7CiAgICAgIHJldHVybiBpc09iamVjdDMocHJvdG8pID8gb2JqZWN0Q3JlYXRlKHByb3RvKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHsKICAgICAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7CiAgICAgIHJldHVybiBpc0FycmF5MyhvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlMikgewogICAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZTIpIHsKICAgICAgaWYgKCFpc09iamVjdDModmFsdWUyKSB8fCBpc01hc2tlZCh2YWx1ZTIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbjIodmFsdWUyKSB8fCBpc0hvc3RPYmplY3QodmFsdWUyKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7CiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHsKICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7CiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgIGZvciAodmFyIGtleTIgaW4gT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkzLmNhbGwob2JqZWN0LCBrZXkyKSAmJiBrZXkyICE9ICJjb25zdHJ1Y3RvciIpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGtleTIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyMiwgaXNEZWVwKSB7CiAgICAgIGlmIChpc0RlZXApIHsKICAgICAgICByZXR1cm4gYnVmZmVyMi5zbGljZSgpOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBuZXcgYnVmZmVyMi5jb25zdHJ1Y3RvcihidWZmZXIyLmxlbmd0aCk7CiAgICAgIGJ1ZmZlcjIuY29weShyZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpOwogICAgICBuZXcgVWludDhBcnJheTIocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkyKGFycmF5QnVmZmVyKSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHsKICAgICAgdmFyIGJ1ZmZlcjIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7CiAgICAgIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyMiwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZU1hcChtYXA3LCBpc0RlZXAsIGNsb25lRnVuYykgewogICAgICB2YXIgYXJyYXkgPSBpc0RlZXAgPyBjbG9uZUZ1bmMobWFwVG9BcnJheShtYXA3KSwgdHJ1ZSkgOiBtYXBUb0FycmF5KG1hcDcpOwogICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZE1hcEVudHJ5LCBuZXcgbWFwNy5jb25zdHJ1Y3RvcigpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7CiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4OwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVTZXQoc2V0MywgaXNEZWVwLCBjbG9uZUZ1bmMpIHsKICAgICAgdmFyIGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKHNldFRvQXJyYXkoc2V0MyksIHRydWUpIDogc2V0VG9BcnJheShzZXQzKTsKICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRTZXRFbnRyeSwgbmV3IHNldDMuY29uc3RydWN0b3IoKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHsKICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7CiAgICAgIHZhciBidWZmZXIyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjsKICAgICAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlcjIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYXJyYXlbaW5kZXgyXSA9IHNvdXJjZVtpbmRleDJdOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7CiAgICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pOwogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGtleTIgPSBwcm9wc1tpbmRleDJdOwogICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9iamVjdFtrZXkyXSwgc291cmNlW2tleTJdLCBrZXkyLCBvYmplY3QsIHNvdXJjZSkgOiB2b2lkIDA7CiAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXkyLCBuZXdWYWx1ZSA9PT0gdm9pZCAwID8gc291cmNlW2tleTJdIDogbmV3VmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9CiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkgewogICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7CiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMyLCBnZXRTeW1ib2xzKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldE1hcERhdGEobWFwNywga2V5MikgewogICAgICB2YXIgZGF0YSA9IG1hcDcuX19kYXRhX187CiAgICAgIHJldHVybiBpc0tleWFibGUoa2V5MikgPyBkYXRhW3R5cGVvZiBrZXkyID09ICJzdHJpbmciID8gInN0cmluZyIgOiAiaGFzaCJdIDogZGF0YS5tYXA7CiAgICB9CiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkyKSB7CiAgICAgIHZhciB2YWx1ZTIgPSBnZXRWYWx1ZShvYmplY3QsIGtleTIpOwogICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlMikgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9CiAgICB2YXIgZ2V0U3ltYm9scyA9IG5hdGl2ZUdldFN5bWJvbHMgPyBvdmVyQXJnKG5hdGl2ZUdldFN5bWJvbHMsIE9iamVjdCkgOiBzdHViQXJyYXk7CiAgICB2YXIgZ2V0VGFnID0gYmFzZUdldFRhZzsKICAgIGlmIChEYXRhVmlldzIgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldzIobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcgfHwgTWFwMyAmJiBnZXRUYWcobmV3IE1hcDMoKSkgIT0gbWFwVGFnIHx8IFByb21pc2UyICYmIGdldFRhZyhQcm9taXNlMi5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcgfHwgU2V0MiAmJiBnZXRUYWcobmV3IFNldDIoKSkgIT0gc2V0VGFnIHx8IFdlYWtNYXAyICYmIGdldFRhZyhuZXcgV2Vha01hcDIoKSkgIT0gd2Vha01hcFRhZykgewogICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKSwgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZTIuY29uc3RydWN0b3IgOiB2b2lkIDAsIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiB2b2lkIDA7CiAgICAgICAgaWYgKGN0b3JTdHJpbmcpIHsKICAgICAgICAgIHN3aXRjaCAoY3RvclN0cmluZykgewogICAgICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gZGF0YVZpZXdUYWc7CiAgICAgICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gbWFwVGFnOwogICAgICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBwcm9taXNlVGFnOwogICAgICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIHNldFRhZzsKICAgICAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gd2Vha01hcFRhZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsIHJlc3VsdCA9IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7CiAgICAgIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICJzdHJpbmciICYmIGhhc093blByb3BlcnR5My5jYWxsKGFycmF5LCAiaW5kZXgiKSkgewogICAgICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4OwogICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0OwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGNsb25lRnVuYywgaXNEZWVwKSB7CiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yOwogICAgICBzd2l0Y2ggKHRhZykgewogICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpOwogICAgICAgIGNhc2UgYm9vbFRhZzoKICAgICAgICBjYXNlIGRhdGVUYWc6CiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7CiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzoKICAgICAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTsKICAgICAgICBjYXNlIGZsb2F0MzJUYWc6CiAgICAgICAgY2FzZSBmbG9hdDY0VGFnOgogICAgICAgIGNhc2UgaW50OFRhZzoKICAgICAgICBjYXNlIGludDE2VGFnOgogICAgICAgIGNhc2UgaW50MzJUYWc6CiAgICAgICAgY2FzZSB1aW50OFRhZzoKICAgICAgICBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzoKICAgICAgICBjYXNlIHVpbnQxNlRhZzoKICAgICAgICBjYXNlIHVpbnQzMlRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApOwogICAgICAgIGNhc2UgbWFwVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lTWFwKG9iamVjdCwgaXNEZWVwLCBjbG9uZUZ1bmMpOwogICAgICAgIGNhc2UgbnVtYmVyVGFnOgogICAgICAgIGNhc2Ugc3RyaW5nVGFnOgogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7CiAgICAgICAgY2FzZSByZWdleHBUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTsKICAgICAgICBjYXNlIHNldFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVNldChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTsKICAgICAgICBjYXNlIHN5bWJvbFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlMiwgbGVuZ3RoKSB7CiAgICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDsKICAgICAgcmV0dXJuICEhbGVuZ3RoICYmICh0eXBlb2YgdmFsdWUyID09ICJudW1iZXIiIHx8IHJlSXNVaW50LnRlc3QodmFsdWUyKSkgJiYgKHZhbHVlMiA+IC0xICYmIHZhbHVlMiAlIDEgPT0gMCAmJiB2YWx1ZTIgPCBsZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlMikgewogICAgICB2YXIgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICByZXR1cm4gdHlwZTUgPT0gInN0cmluZyIgfHwgdHlwZTUgPT0gIm51bWJlciIgfHwgdHlwZTUgPT0gInN5bWJvbCIgfHwgdHlwZTUgPT0gImJvb2xlYW4iID8gdmFsdWUyICE9PSAiX19wcm90b19fIiA6IHZhbHVlMiA9PT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHsKICAgICAgcmV0dXJuICEhbWFza1NyY0tleSAmJiBtYXNrU3JjS2V5IGluIGZ1bmM7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZTIpIHsKICAgICAgdmFyIEN0b3IgPSB2YWx1ZTIgJiYgdmFsdWUyLmNvbnN0cnVjdG9yLCBwcm90byA9IHR5cGVvZiBDdG9yID09ICJmdW5jdGlvbiIgJiYgQ3Rvci5wcm90b3R5cGUgfHwgb2JqZWN0UHJvdG87CiAgICAgIHJldHVybiB2YWx1ZTIgPT09IHByb3RvOwogICAgfQogICAgZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykgewogICAgICBpZiAoZnVuYyAhPSBudWxsKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBmdW5jICsgIiI7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZTIsIHRydWUsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gZXEodmFsdWUyLCBvdGhlcikgewogICAgICByZXR1cm4gdmFsdWUyID09PSBvdGhlciB8fCB2YWx1ZTIgIT09IHZhbHVlMiAmJiBvdGhlciAhPT0gb3RoZXI7CiAgICB9CiAgICBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlMikgJiYgaGFzT3duUHJvcGVydHkzLmNhbGwodmFsdWUyLCAiY2FsbGVlIikgJiYgKCFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlMiwgImNhbGxlZSIpIHx8IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMikgPT0gYXJnc1RhZyk7CiAgICB9CiAgICB2YXIgaXNBcnJheTMgPSBBcnJheS5pc0FycmF5OwogICAgZnVuY3Rpb24gaXNBcnJheUxpa2UyKHZhbHVlMikgewogICAgICByZXR1cm4gdmFsdWUyICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUyLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24yKHZhbHVlMik7CiAgICB9CiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZTIpICYmIGlzQXJyYXlMaWtlMih2YWx1ZTIpOwogICAgfQogICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlOwogICAgZnVuY3Rpb24gaXNGdW5jdGlvbjIodmFsdWUyKSB7CiAgICAgIHZhciB0YWcgPSBpc09iamVjdDModmFsdWUyKSA/IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMikgOiAiIjsKICAgICAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7CiAgICB9CiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTIgPT0gIm51bWJlciIgJiYgdmFsdWUyID4gLTEgJiYgdmFsdWUyICUgMSA9PSAwICYmIHZhbHVlMiA8PSBNQVhfU0FGRV9JTlRFR0VSOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3QzKHZhbHVlMikgewogICAgICB2YXIgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICByZXR1cm4gISF2YWx1ZTIgJiYgKHR5cGU1ID09ICJvYmplY3QiIHx8IHR5cGU1ID09ICJmdW5jdGlvbiIpOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlMikgewogICAgICByZXR1cm4gISF2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PSAib2JqZWN0IjsKICAgIH0KICAgIGZ1bmN0aW9uIGtleXMyKG9iamVjdCkgewogICAgICByZXR1cm4gaXNBcnJheUxpa2UyKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpOwogICAgfQogICAgZnVuY3Rpb24gc3R1YkFycmF5KCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gY2xvbmVEZWVwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnlAMi4xLjAvbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzCnZhciByZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeUAyLjEuMC9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkYXRhLCBvcHRzKSB7CiAgICAgIGlmICghb3B0cykgb3B0cyA9IHt9OwogICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICJmdW5jdGlvbiIpIG9wdHMgPSB7IGNtcDogb3B0cyB9OwogICAgICB2YXIgY3ljbGVzID0gdHlwZW9mIG9wdHMuY3ljbGVzID09PSAiYm9vbGVhbiIgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlOwogICAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgLyogQF9fUFVSRV9fICovIChmdW5jdGlvbihmNykgewogICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlMikgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGE1LCBiNSkgewogICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhNSwgdmFsdWU6IG5vZGUyW2E1XSB9OwogICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiNSwgdmFsdWU6IG5vZGUyW2I1XSB9OwogICAgICAgICAgICByZXR1cm4gZjcoYW9iaiwgYm9iaik7CiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0pKG9wdHMuY21wKTsKICAgICAgdmFyIHNlZW4gPSBbXTsKICAgICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnk1KG5vZGUyKSB7CiAgICAgICAgaWYgKG5vZGUyICYmIG5vZGUyLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZTIudG9KU09OID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBub2RlMiA9IG5vZGUyLnRvSlNPTigpOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZTIgPT09IHZvaWQgMCkgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2Ygbm9kZTIgPT0gIm51bWJlciIpIHJldHVybiBpc0Zpbml0ZShub2RlMikgPyAiIiArIG5vZGUyIDogIm51bGwiOwogICAgICAgIGlmICh0eXBlb2Ygbm9kZTIgIT09ICJvYmplY3QiKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZTIpOwogICAgICAgIHZhciBpMTEsIG91dDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlMikpIHsKICAgICAgICAgIG91dCA9ICJbIjsKICAgICAgICAgIGZvciAoaTExID0gMDsgaTExIDwgbm9kZTIubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBpZiAoaTExKSBvdXQgKz0gIiwiOwogICAgICAgICAgICBvdXQgKz0gc3RyaW5naWZ5NShub2RlMltpMTFdKSB8fCAibnVsbCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0ICsgIl0iOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZTIgPT09IG51bGwpIHJldHVybiAibnVsbCI7CiAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlMikgIT09IC0xKSB7CiAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkoIl9fY3ljbGVfXyIpOwogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTiIpOwogICAgICAgIH0KICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5wdXNoKG5vZGUyKSAtIDE7CiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMobm9kZTIpLnNvcnQoY21wICYmIGNtcChub2RlMikpOwogICAgICAgIG91dCA9ICIiOwogICAgICAgIGZvciAoaTExID0gMDsgaTExIDwga2V5czIubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgdmFyIGtleTIgPSBrZXlzMltpMTFdOwogICAgICAgICAgdmFyIHZhbHVlMiA9IHN0cmluZ2lmeTUobm9kZTJba2V5Ml0pOwogICAgICAgICAgaWYgKCF2YWx1ZTIpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKG91dCkgb3V0ICs9ICIsIjsKICAgICAgICAgIG91dCArPSBKU09OLnN0cmluZ2lmeShrZXkyKSArICI6IiArIHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc2Vlbi5zcGxpY2Uoc2VlbkluZGV4LCAxKTsKICAgICAgICByZXR1cm4gInsiICsgb3V0ICsgIn0iOwogICAgICB9KShkYXRhKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL3NtYXJ0anNvbi5wbHVnaW5zLmpzCnZhciBpbXBvcnRfbG9kYXNoLCBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnksIHN0YWJsZUpzb247CnZhciBpbml0X3NtYXJ0anNvbl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9zbWFydGpzb24ucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTEoKTsKICAgIGltcG9ydF9sb2Rhc2ggPSBfX3RvRVNNKHJlcXVpcmVfbG9kYXNoKCksIDEpOwogICAgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5ID0gX190b0VTTShyZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5KCksIDEpOwogICAgc3RhYmxlSnNvbiA9IGltcG9ydF9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeS5kZWZhdWx0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcwpmdW5jdGlvbiBiYXNlNjRFbmNvZGUoZGF0YSkgewogIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICB9CiAgcmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5kYXRhKSk7Cn0KZnVuY3Rpb24gYmFzZTY0RGVjb2RlKHN0cikgewogIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAiYmFzZTY0Iik7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTsKICB9CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oYXRvYihzdHIpKS5tYXAoKGNoYXIpID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpOwp9CmZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZTIsIHNwYWNlMikgewogIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZTIsIHJlcGxhY2VyLCBzcGFjZTIpOwp9CmZ1bmN0aW9uIHBhcnNlMih0ZXh0OSkgewogIHJldHVybiBKU09OLnBhcnNlKHRleHQ5LCByZXZpdmVyKTsKfQpmdW5jdGlvbiBpc0VuY29kZWRCdWZmZXIoeDMpIHsKICByZXR1cm4gaXNPYmplY3QoeDMpICYmIHgzLnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiBpc1N0cmluZyh4My5kYXRhKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2UyKHgzKSB7CiAgcmV0dXJuIGlzT2JqZWN0KHgzKSAmJiAoeDMudHlwZSA9PT0gIkJ1ZmZlciIgJiYgKGlzQXJyYXkyKHgzLmRhdGEpIHx8IGlzU3RyaW5nKHgzLmRhdGEpKSkgfHwgeDMgaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIGlzQXJyYXkyKHgzKSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeDMpOwp9CmZ1bmN0aW9uIGlzU3RyaW5nKHgzKSB7CiAgcmV0dXJuIHR5cGVvZiB4MyA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaXNPYmplY3QoeDMpIHsKICByZXR1cm4gdHlwZW9mIHgzID09PSAib2JqZWN0IiAmJiB4MyAhPT0gbnVsbDsKfQp2YXIgcmVwbGFjZXIsIHJldml2ZXI7CnZhciBpbml0X2J1ZmZlcmhhbmRsaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0anNvbl9wbHVnaW5zKCk7CiAgICByZXBsYWNlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzQnVmZmVyTGlrZTIodmFsdWUyKSkgewogICAgICAgIGxldCBidWZmZXJEYXRhOwogICAgICAgIGlmICgiZGF0YSIgaW4gdmFsdWUyICYmIGlzQXJyYXkyKHZhbHVlMi5kYXRhKSkgewogICAgICAgICAgYnVmZmVyRGF0YSA9IG5ldyBVaW50OEFycmF5KHZhbHVlMi5kYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSB2YWx1ZTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSAiYmFzZTY0OiIgKyBiYXNlNjRFbmNvZGUoYnVmZmVyRGF0YSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICJFbmNvZGVkQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IGJhc2U2NERhdGEKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9OwogICAgcmV2aXZlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzRW5jb2RlZEJ1ZmZlcih2YWx1ZTIpKSB7CiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlMi5kYXRhKSAmJiB2YWx1ZTIuZGF0YS5zdGFydHNXaXRoKCJiYXNlNjQ6IikpIHsKICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB2YWx1ZTIuZGF0YS5zbGljZSg3KTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBiYXNlNjREZWNvZGUoYmFzZTY0RGF0YSk7CiAgICAgICAgICByZXR1cm4gYnVmZmVyMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMiwgewogIFNtYXJ0anNvbjogKCkgPT4gU21hcnRqc29uLAogIGRlZXBFcXVhbEpzb25MU3RyaW5nczogKCkgPT4gZGVlcEVxdWFsSnNvbkxTdHJpbmdzLAogIGRlZXBFcXVhbE9iamVjdHM6ICgpID0+IGRlZXBFcXVhbE9iamVjdHMsCiAgZm9sZERlYzogKCkgPT4gZm9sZERlYywKICBwYXJzZTogKCkgPT4gcGFyc2UzLAogIHBhcnNlQmFzZTY0OiAoKSA9PiBwYXJzZUJhc2U2NCwKICBwYXJzZUpzb25MOiAoKSA9PiBwYXJzZUpzb25MLAogIHN0YWJsZU9uZVdheVN0cmluZ2lmeTogKCkgPT4gc3RhYmxlT25lV2F5U3RyaW5naWZ5LAogIHN0cmluZ2lmeTogKCkgPT4gc3RyaW5naWZ5MiwKICBzdHJpbmdpZnlCYXNlNjQ6ICgpID0+IHN0cmluZ2lmeUJhc2U2NCwKICBzdHJpbmdpZnlKc29uTDogKCkgPT4gc3RyaW5naWZ5SnNvbkwsCiAgc3RyaW5naWZ5UHJldHR5OiAoKSA9PiBzdHJpbmdpZnlQcmV0dHkKfSk7CnZhciBwYXJzZTMsIHBhcnNlSnNvbkwsIHN0cmluZ2lmeUpzb25MLCBzdGFibGVPbmVXYXlTdHJpbmdpZnksIHN0cmluZ2lmeTIsIHN0cmluZ2lmeVByZXR0eSwgc3RyaW5naWZ5QmFzZTY0LCBwYXJzZUJhc2U2NCwgU21hcnRqc29uLCBmb2xkRGVjLCBkZWVwRXF1YWxPYmplY3RzLCBkZWVwRXF1YWxKc29uTFN0cmluZ3M7CnZhciBpbml0X2Rpc3RfdHMxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGpzb25fcGx1Z2lucygpOwogICAgaW5pdF9idWZmZXJoYW5kbGluZygpOwogICAgcGFyc2UzID0gcGFyc2UyOwogICAgcGFyc2VKc29uTCA9IChqc29ubERhdGEpID0+IHsKICAgICAgY29uc3QgbGluZXMgPSBqc29ubERhdGEuc3BsaXQoIlxuIik7CiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBsaW5lcy5yZWR1Y2UoKGFjYywgbGluZSkgPT4gewogICAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTsKICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBhY2MucHVzaChwYXJzZTModHJpbW1lZCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCBbXSk7CiAgICAgIHJldHVybiBwYXJzZWREYXRhOwogICAgfTsKICAgIHN0cmluZ2lmeUpzb25MID0gKGl0ZW1zKSA9PiB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHN0cmluZ2lmeTIoaXRlbSkpLmpvaW4oIlxuIik7CiAgICB9OwogICAgc3RhYmxlT25lV2F5U3RyaW5naWZ5ID0gKG9iakFyZywgc2ltcGxlT3JkZXJBcnJheSwgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTsKICAgICAgY29uc3Qgc2FuaXRpemUyID0gKHZhbCkgPT4gewogICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlcGxhY2VkID0gcmVwbGFjZXIoIiIsIHZhbCk7CiAgICAgICAgaWYgKHJlcGxhY2VkICYmIHJlcGxhY2VkLnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiB0eXBlb2YgcmVwbGFjZWQuZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKICAgICAgICB9CiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKHZhbCkpIHsKICAgICAgICAgIHJldHVybiAiX19jeWNsZV9fIjsKICAgICAgICB9CiAgICAgICAgdmlzaXRlZC5hZGQodmFsKTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbSkgPT4gc2FuaXRpemUyKGl0ZW0pKTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3V0ID0ge307CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKHZhbCkpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9IHNhbml0aXplMih2YWxba2V5Ml0pOwogICAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9ICJfX3Vuc2VyaWFsaXphYmxlX18iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCBvYmogPSBzYW5pdGl6ZTIob2JqQXJnKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKICAgICAgICAuLi5vcHRpb25zQXJnLAogICAgICAgIGN5Y2xlczogdHJ1ZQogICAgICB9OwogICAgICBpZiAoc2ltcGxlT3JkZXJBcnJheSAmJiAhb3B0aW9ucy5jbXApIHsKICAgICAgICBjb25zdCBvcmRlcjIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIHNpbXBsZU9yZGVyQXJyYXkuZm9yRWFjaCgoa2V5MiwgaWR4KSA9PiBvcmRlcjIuc2V0KGtleTIsIGlkeCkpOwogICAgICAgIG9wdGlvbnMuY21wID0gKGE1LCBiNSkgPT4gewogICAgICAgICAgY29uc3QgYUlkeCA9IG9yZGVyMi5oYXMoYTUua2V5KSA/IG9yZGVyMi5nZXQoYTUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGNvbnN0IGJJZHggPSBvcmRlcjIuaGFzKGI1LmtleSkgPyBvcmRlcjIuZ2V0KGI1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBpZiAoYUlkeCAhPT0gYklkeCkKICAgICAgICAgICAgcmV0dXJuIGFJZHggLSBiSWR4OwogICAgICAgICAgcmV0dXJuIGE1LmtleSA8IGI1LmtleSA/IC0xIDogYTUua2V5ID4gYjUua2V5ID8gMSA6IDA7CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gc3RhYmxlSnNvbihvYmosIG9wdGlvbnMpOwogICAgfTsKICAgIHN0cmluZ2lmeTIgPSAob2JqQXJnLCBzaW1wbGVPcmRlckFycmF5LCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgY29uc3QgYnVmZmVyZWRKc29uID0gc3RyaW5naWZ5KG9iakFyZyk7CiAgICAgIG9iakFyZyA9IEpTT04ucGFyc2UoYnVmZmVyZWRKc29uKTsKICAgICAgbGV0IG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNBcmcgfTsKICAgICAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7CiAgICAgICAgY29uc3Qgb3JkZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzaW1wbGVPcmRlckFycmF5LmZvckVhY2goKGtleTIsIGlkeCkgPT4gb3JkZXIyLnNldChrZXkyLCBpZHgpKTsKICAgICAgICBvcHRpb25zLmNtcCA9IChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFJZHggPSBvcmRlcjIuaGFzKGE1LmtleSkgPyBvcmRlcjIuZ2V0KGE1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBiSWR4ID0gb3JkZXIyLmhhcyhiNS5rZXkpID8gb3JkZXIyLmdldChiNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgaWYgKGFJZHggIT09IGJJZHgpCiAgICAgICAgICAgIHJldHVybiBhSWR4IC0gYklkeDsKICAgICAgICAgIHJldHVybiBhNS5rZXkgPCBiNS5rZXkgPyAtMSA6IGE1LmtleSA+IGI1LmtleSA/IDEgOiAwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgbGV0IHJldHVybkpzb24gPSBzdGFibGVKc29uKG9iakFyZywgb3B0aW9ucyk7CiAgICAgIHJldHVybiByZXR1cm5Kc29uOwogICAgfTsKICAgIHN0cmluZ2lmeVByZXR0eSA9IChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkyKG9iamVjdEFyZyk7CiAgICAgIGNvbnN0IG9iamVjdCA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWQpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCBudWxsLCAyKTsKICAgIH07CiAgICBzdHJpbmdpZnlCYXNlNjQgPSAoLi4uYXJncykgPT4gewogICAgICBjb25zdCBzdHJpbmdpZmllZFJlc3VsdCA9IHN0cmluZ2lmeTIoLi4uYXJncyk7CiAgICAgIHJldHVybiBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQuZW5jb2RlVXJpKHN0cmluZ2lmaWVkUmVzdWx0KTsKICAgIH07CiAgICBwYXJzZUJhc2U2NCA9IChiYXNlNjRKc29uU3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGJhc2U2NDIgPSBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQ7CiAgICAgIGNvbnN0IGRlY29kZUZuID0gYmFzZTY0Mi5kZWNvZGVVcmkgfHwgYmFzZTY0Mi5kZWNvZGU7CiAgICAgIGNvbnN0IHNpbXBsZVN0cmluZ2lmaWVkID0gZGVjb2RlRm4oYmFzZTY0SnNvblN0cmluZ0FyZyk7CiAgICAgIHJldHVybiBwYXJzZTMoc2ltcGxlU3RyaW5naWZpZWQpOwogICAgfTsKICAgIFNtYXJ0anNvbiA9IGNsYXNzIF9TbWFydGpzb24gewogICAgICAvKioKICAgICAgICogZW5mb2xkcyBkYXRhIGZyb20gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBzdGF0aWMgZW5mb2xkRnJvbU9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyB0aGlzKCk7CiAgICAgICAgY29uc3Qgc2F2ZWFibGVzID0gbmV3SW5zdGFuY2Uuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBvYmplY3RBcmcpIHsKICAgICAgICAgIGlmIChzYXZlYWJsZXMuaW5kZXhPZihrZXlOYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgbmV3SW5zdGFuY2Vba2V5TmFtZV0gPSBvYmplY3RBcmdba2V5TmFtZV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZW5mb2xkIGZyb20ganNvbgogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21Kc29uKGpzb25BcmcpIHsKICAgICAgICBjb25zdCBvYmplY3RGcm9tSnNvbiA9IHBhcnNlMyhqc29uQXJnKTsKICAgICAgICByZXR1cm4gdGhpcy5lbmZvbGRGcm9tT2JqZWN0KG9iamVjdEZyb21Kc29uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZm9sZHMgYSBjbGFzcyBpbnRvIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgZm9sZFRvT2JqZWN0KCkgewogICAgICAgIGNvbnN0IHRyYWNrU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgICB0cmFja1NldC5hZGQodGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQpOwogICAgICB9CiAgICAgIGZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307CiAgICAgICAgY29uc3QgZm9sZFZhbHVlID0gKHZhbCkgPT4gewogICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIF9TbWFydGpzb24pIHsKICAgICAgICAgICAgaWYgKHRyYWNrU2V0Lmhhcyh2YWwpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBkZXRlY3RlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyYWNrU2V0LmFkZCh2YWwpOwogICAgICAgICAgICByZXR1cm4gdmFsLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IGZvbGRWYWx1ZShpdGVtKSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaW1wb3J0X2xvZGFzaC5kZWZhdWx0KHZhbCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBvZiBwcm9wcykgewogICAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1trZXlOYW1lXTsKICAgICAgICAgIHJlc3VsdFtrZXlOYW1lXSA9IGZvbGRWYWx1ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBmb2xkVG9Kc29uKCkgewogICAgICAgIGNvbnN0IGZvbGRlZE9iamVjdCA9IHRoaXMuZm9sZFRvT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeTIoZm9sZGVkT2JqZWN0KTsKICAgICAgfQogICAgfTsKICAgIGZvbGREZWMgPSAoKSA9PiB7CiAgICAgIHJldHVybiAodGFyZ2V0LCBrZXkyKSA9PiB7CiAgICAgICAgaWYgKCF0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzKSB7CiAgICAgICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzID0gW107CiAgICAgICAgfQogICAgICAgIHRhcmdldC5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChrZXkyKTsKICAgICAgfTsKICAgIH07CiAgICBkZWVwRXF1YWxPYmplY3RzID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHsKICAgICAgY29uc3Qgb2JqZWN0MVN0cmluZyA9IHN0cmluZ2lmeTIob2JqZWN0MSk7CiAgICAgIGNvbnN0IG9iamVjdDJTdHJpbmcgPSBzdHJpbmdpZnkyKG9iamVjdDIpOwogICAgICByZXR1cm4gb2JqZWN0MVN0cmluZyA9PT0gb2JqZWN0MlN0cmluZzsKICAgIH07CiAgICBkZWVwRXF1YWxKc29uTFN0cmluZ3MgPSAoanNvbkxTdHJpbmcxLCBqc29uTFN0cmluZzIpID0+IHsKICAgICAgY29uc3QgZmlyc3RBcnJheSA9IHBhcnNlSnNvbkwoanNvbkxTdHJpbmcxKTsKICAgICAgY29uc3Qgc2Vjb25kQXJyYXkgPSBwYXJzZUpzb25MKGpzb25MU3RyaW5nMik7CiAgICAgIHJldHVybiBkZWVwRXF1YWxPYmplY3RzKGZpcnN0QXJyYXksIHNlY29uZEFycmF5KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtpZGJAOC4wLjMvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2lkYi9idWlsZC9pbmRleC5qcwp2YXIgYnVpbGRfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidWlsZF9leHBvcnRzLCB7CiAgZGVsZXRlREI6ICgpID0+IGRlbGV0ZURCLAogIG9wZW5EQjogKCkgPT4gb3BlbkRCLAogIHVud3JhcDogKCkgPT4gdW53cmFwLAogIHdyYXA6ICgpID0+IHdyYXAKfSk7CmZ1bmN0aW9uIGdldElkYlByb3h5YWJsZVR5cGVzKCkgewogIHJldHVybiBpZGJQcm94eWFibGVUeXBlcyB8fCAoaWRiUHJveHlhYmxlVHlwZXMgPSBbCiAgICBJREJEYXRhYmFzZSwKICAgIElEQk9iamVjdFN0b3JlLAogICAgSURCSW5kZXgsCiAgICBJREJDdXJzb3IsCiAgICBJREJUcmFuc2FjdGlvbgogIF0pOwp9CmZ1bmN0aW9uIGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkgewogIHJldHVybiBjdXJzb3JBZHZhbmNlTWV0aG9kcyB8fCAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgPSBbCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlLAogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXkKICBdKTsKfQpmdW5jdGlvbiBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpIHsKICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHVubGlzdGVuID0gKCkgPT4gewogICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBzdWNjZXNzID0gKCkgPT4gewogICAgICByZXNvbHZlMih3cmFwKHJlcXVlc3QucmVzdWx0KSk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7CiAgICAgIHJlamVjdChyZXF1ZXN0LmVycm9yKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBlcnJvcik7CiAgfSk7CiAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm9taXNlLCByZXF1ZXN0KTsKICByZXR1cm4gcHJvbWlzZTsKfQpmdW5jdGlvbiBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHJhbnNhY3Rpb25Eb25lTWFwLmhhcyh0eCkpCiAgICByZXR1cm47CiAgY29uc3QgZG9uZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHsKICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLCBjb21wbGV0ZSk7CiAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHsKICAgICAgcmVzb2x2ZTIoKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICBjb25zdCBlcnJvciA9ICgpID0+IHsKICAgICAgcmVqZWN0KHR4LmVycm9yIHx8IG5ldyBET01FeGNlcHRpb24oIkFib3J0RXJyb3IiLCAiQWJvcnRFcnJvciIpKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICB0eC5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIGNvbXBsZXRlKTsKICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgdHguYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBlcnJvcik7CiAgfSk7CiAgdHJhbnNhY3Rpb25Eb25lTWFwLnNldCh0eCwgZG9uZSk7Cn0KZnVuY3Rpb24gcmVwbGFjZVRyYXBzKGNhbGxiYWNrKSB7CiAgaWRiUHJveHlUcmFwcyA9IGNhbGxiYWNrKGlkYlByb3h5VHJhcHMpOwp9CmZ1bmN0aW9uIHdyYXBGdW5jdGlvbihmdW5jKSB7CiAgaWYgKGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkuaW5jbHVkZXMoZnVuYykpIHsKICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICAgIGZ1bmMuYXBwbHkodW53cmFwKHRoaXMpLCBhcmdzKTsKICAgICAgcmV0dXJuIHdyYXAodGhpcy5yZXF1ZXN0KTsKICAgIH07CiAgfQogIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICByZXR1cm4gd3JhcChmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncykpOwogIH07Cn0KZnVuY3Rpb24gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gImZ1bmN0aW9uIikKICAgIHJldHVybiB3cmFwRnVuY3Rpb24odmFsdWUyKTsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pCiAgICBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odmFsdWUyKTsKICBpZiAoaW5zdGFuY2VPZkFueSh2YWx1ZTIsIGdldElkYlByb3h5YWJsZVR5cGVzKCkpKQogICAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZTIsIGlkYlByb3h5VHJhcHMpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gd3JhcCh2YWx1ZTIpIHsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCUmVxdWVzdCkKICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHZhbHVlMik7CiAgaWYgKHRyYW5zZm9ybUNhY2hlLmhhcyh2YWx1ZTIpKQogICAgcmV0dXJuIHRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZTIpOwogIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpOwogIGlmIChuZXdWYWx1ZSAhPT0gdmFsdWUyKSB7CiAgICB0cmFuc2Zvcm1DYWNoZS5zZXQodmFsdWUyLCBuZXdWYWx1ZSk7CiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KG5ld1ZhbHVlLCB2YWx1ZTIpOwogIH0KICByZXR1cm4gbmV3VmFsdWU7Cn0KZnVuY3Rpb24gb3BlbkRCKG5hbWUsIHZlcnNpb24yLCB7IGJsb2NrZWQsIHVwZ3JhZGUsIGJsb2NraW5nLCB0ZXJtaW5hdGVkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihuYW1lLCB2ZXJzaW9uMik7CiAgY29uc3Qgb3BlblByb21pc2UgPSB3cmFwKHJlcXVlc3QpOwogIGlmICh1cGdyYWRlKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInVwZ3JhZGVuZWVkZWQiLCAoZXZlbnQpID0+IHsKICAgICAgdXBncmFkZSh3cmFwKHJlcXVlc3QucmVzdWx0KSwgZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgd3JhcChyZXF1ZXN0LnRyYW5zYWN0aW9uKSwgZXZlbnQpOwogICAgfSk7CiAgfQogIGlmIChibG9ja2VkKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLCAoZXZlbnQpID0+IGJsb2NrZWQoCiAgICAgIC8vIENhc3RpbmcgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9wdWxsLzE0MDUKICAgICAgZXZlbnQub2xkVmVyc2lvbiwKICAgICAgZXZlbnQubmV3VmVyc2lvbiwKICAgICAgZXZlbnQKICAgICkpOwogIH0KICBvcGVuUHJvbWlzZS50aGVuKChkYikgPT4gewogICAgaWYgKHRlcm1pbmF0ZWQpCiAgICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgKCkgPT4gdGVybWluYXRlZCgpKTsKICAgIGlmIChibG9ja2luZykgewogICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCJ2ZXJzaW9uY2hhbmdlIiwgKGV2ZW50KSA9PiBibG9ja2luZyhldmVudC5vbGRWZXJzaW9uLCBldmVudC5uZXdWZXJzaW9uLCBldmVudCkpOwogICAgfQogIH0pLmNhdGNoKCgpID0+IHsKICB9KTsKICByZXR1cm4gb3BlblByb21pc2U7Cn0KZnVuY3Rpb24gZGVsZXRlREIobmFtZSwgeyBibG9ja2VkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UobmFtZSk7CiAgaWYgKGJsb2NrZWQpIHsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2tlZCIsIChldmVudCkgPT4gYmxvY2tlZCgKICAgICAgLy8gQ2FzdGluZyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0LURPTS1saWItZ2VuZXJhdG9yL3B1bGwvMTQwNQogICAgICBldmVudC5vbGRWZXJzaW9uLAogICAgICBldmVudAogICAgKSk7CiAgfQogIHJldHVybiB3cmFwKHJlcXVlc3QpLnRoZW4oKCkgPT4gdm9pZCAwKTsKfQpmdW5jdGlvbiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB7CiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSURCRGF0YWJhc2UgJiYgIShwcm9wIGluIHRhcmdldCkgJiYgdHlwZW9mIHByb3AgPT09ICJzdHJpbmciKSkgewogICAgcmV0dXJuOwogIH0KICBpZiAoY2FjaGVkTWV0aG9kcy5nZXQocHJvcCkpCiAgICByZXR1cm4gY2FjaGVkTWV0aG9kcy5nZXQocHJvcCk7CiAgY29uc3QgdGFyZ2V0RnVuY05hbWUgPSBwcm9wLnJlcGxhY2UoL0Zyb21JbmRleCQvLCAiIik7CiAgY29uc3QgdXNlSW5kZXggPSBwcm9wICE9PSB0YXJnZXRGdW5jTmFtZTsKICBjb25zdCBpc1dyaXRlID0gd3JpdGVNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKTsKICBpZiAoCiAgICAvLyBCYWlsIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdCBvbiB0aGUgdGFyZ2V0LiBFZywgZ2V0QWxsIGlzbid0IGluIEVkZ2UuCiAgICAhKHRhcmdldEZ1bmNOYW1lIGluICh1c2VJbmRleCA/IElEQkluZGV4IDogSURCT2JqZWN0U3RvcmUpLnByb3RvdHlwZSkgfHwgIShpc1dyaXRlIHx8IHJlYWRNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKSkKICApIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgbWV0aG9kID0gYXN5bmMgZnVuY3Rpb24oc3RvcmVOYW1lLCAuLi5hcmdzKSB7CiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBpc1dyaXRlID8gInJlYWR3cml0ZSIgOiAicmVhZG9ubHkiKTsKICAgIGxldCB0YXJnZXQyID0gdHguc3RvcmU7CiAgICBpZiAodXNlSW5kZXgpCiAgICAgIHRhcmdldDIgPSB0YXJnZXQyLmluZGV4KGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgdGFyZ2V0Mlt0YXJnZXRGdW5jTmFtZV0oLi4uYXJncyksCiAgICAgIGlzV3JpdGUgJiYgdHguZG9uZQogICAgXSkpWzBdOwogIH07CiAgY2FjaGVkTWV0aG9kcy5zZXQocHJvcCwgbWV0aG9kKTsKICByZXR1cm4gbWV0aG9kOwp9CmFzeW5jIGZ1bmN0aW9uKiBpdGVyYXRlKC4uLmFyZ3MpIHsKICBsZXQgY3Vyc29yID0gdGhpczsKICBpZiAoIShjdXJzb3IgaW5zdGFuY2VvZiBJREJDdXJzb3IpKSB7CiAgICBjdXJzb3IgPSBhd2FpdCBjdXJzb3Iub3BlbkN1cnNvciguLi5hcmdzKTsKICB9CiAgaWYgKCFjdXJzb3IpCiAgICByZXR1cm47CiAgY3Vyc29yID0gY3Vyc29yOwogIGNvbnN0IHByb3hpZWRDdXJzb3IgPSBuZXcgUHJveHkoY3Vyc29yLCBjdXJzb3JJdGVyYXRvclRyYXBzKTsKICBpdHRyUHJveGllZEN1cnNvclRvT3JpZ2luYWxQcm94eS5zZXQocHJveGllZEN1cnNvciwgY3Vyc29yKTsKICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KHByb3hpZWRDdXJzb3IsIHVud3JhcChjdXJzb3IpKTsKICB3aGlsZSAoY3Vyc29yKSB7CiAgICB5aWVsZCBwcm94aWVkQ3Vyc29yOwogICAgY3Vyc29yID0gYXdhaXQgKGFkdmFuY2VSZXN1bHRzLmdldChwcm94aWVkQ3Vyc29yKSB8fCBjdXJzb3IuY29udGludWUoKSk7CiAgICBhZHZhbmNlUmVzdWx0cy5kZWxldGUocHJveGllZEN1cnNvcik7CiAgfQp9CmZ1bmN0aW9uIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgewogIHJldHVybiBwcm9wID09PSBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZSwgSURCQ3Vyc29yXSkgfHwgcHJvcCA9PT0gIml0ZXJhdGUiICYmIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlXSk7Cn0KdmFyIGluc3RhbmNlT2ZBbnksIGlkYlByb3h5YWJsZVR5cGVzLCBjdXJzb3JBZHZhbmNlTWV0aG9kcywgdHJhbnNhY3Rpb25Eb25lTWFwLCB0cmFuc2Zvcm1DYWNoZSwgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLCBpZGJQcm94eVRyYXBzLCB1bndyYXAsIHJlYWRNZXRob2RzLCB3cml0ZU1ldGhvZHMsIGNhY2hlZE1ldGhvZHMsIGFkdmFuY2VNZXRob2RQcm9wcywgbWV0aG9kTWFwLCBhZHZhbmNlUmVzdWx0cywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHksIGN1cnNvckl0ZXJhdG9yVHJhcHM7CnZhciBpbml0X2J1aWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMiKCkgewogICAgaW5zdGFuY2VPZkFueSA9IChvYmplY3QsIGNvbnN0cnVjdG9ycykgPT4gY29uc3RydWN0b3JzLnNvbWUoKGMxMSkgPT4gb2JqZWN0IGluc3RhbmNlb2YgYzExKTsKICAgIHRyYW5zYWN0aW9uRG9uZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgdHJhbnNmb3JtQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaWRiUHJveHlUcmFwcyA9IHsKICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pIHsKICAgICAgICAgIGlmIChwcm9wID09PSAiZG9uZSIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkRvbmVNYXAuZ2V0KHRhcmdldCk7CiAgICAgICAgICBpZiAocHJvcCA9PT0gInN0b3JlIikgewogICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXIub2JqZWN0U3RvcmVOYW1lc1sxXSA/IHZvaWQgMCA6IHJlY2VpdmVyLm9iamVjdFN0b3JlKHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gd3JhcCh0YXJnZXRbcHJvcF0pOwogICAgICB9LAogICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZTIpIHsKICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0sCiAgICAgIGhhcyh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24gJiYgKHByb3AgPT09ICJkb25lIiB8fCBwcm9wID09PSAic3RvcmUiKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldDsKICAgICAgfQogICAgfTsKICAgIHVud3JhcCA9ICh2YWx1ZTIpID0+IHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUyKTsKICAgIHJlYWRNZXRob2RzID0gWyJnZXQiLCAiZ2V0S2V5IiwgImdldEFsbCIsICJnZXRBbGxLZXlzIiwgImNvdW50Il07CiAgICB3cml0ZU1ldGhvZHMgPSBbInB1dCIsICJhZGQiLCAiZGVsZXRlIiwgImNsZWFyIl07CiAgICBjYWNoZWRNZXRob2RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7CiAgICAgIC4uLm9sZFRyYXBzLAogICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlciksCiAgICAgIGhhczogKHRhcmdldCwgcHJvcCkgPT4gISFnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5oYXModGFyZ2V0LCBwcm9wKQogICAgfSkpOwogICAgYWR2YW5jZU1ldGhvZFByb3BzID0gWyJjb250aW51ZSIsICJjb250aW51ZVByaW1hcnlLZXkiLCAiYWR2YW5jZSJdOwogICAgbWV0aG9kTWFwID0ge307CiAgICBhZHZhbmNlUmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGN1cnNvckl0ZXJhdG9yVHJhcHMgPSB7CiAgICAgIGdldCh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAoIWFkdmFuY2VNZXRob2RQcm9wcy5pbmNsdWRlcyhwcm9wKSkKICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07CiAgICAgICAgbGV0IGNhY2hlZEZ1bmMgPSBtZXRob2RNYXBbcHJvcF07CiAgICAgICAgaWYgKCFjYWNoZWRGdW5jKSB7CiAgICAgICAgICBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdID0gZnVuY3Rpb24oLi4uYXJncykgewogICAgICAgICAgICBhZHZhbmNlUmVzdWx0cy5zZXQodGhpcywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuZ2V0KHRoaXMpW3Byb3BdKC4uLmFyZ3MpKTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYWNoZWRGdW5jOwogICAgICB9CiAgICB9OwogICAgcmVwbGFjZVRyYXBzKChvbGRUcmFwcykgPT4gKHsKICAgICAgLi4ub2xkVHJhcHMsCiAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CiAgICAgICAgaWYgKGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkpCiAgICAgICAgICByZXR1cm4gaXRlcmF0ZTsKICAgICAgICByZXR1cm4gb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpOwogICAgICB9LAogICAgICBoYXModGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCk7CiAgICAgIH0KICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnN0b3JlX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaW5pdF9idWlsZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMKdmFyIFdlYlN0b3JlOwp2YXIgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3dlYnN0b3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBXZWJTdG9yZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuaW5pdENhbGxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgICBpZiAodGhpcy5pbml0Q2FsbGVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBzbWFydGVudiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMC5TbWFydGVudigpOwogICAgICAgIGlmICghc21hcnRlbnYuaXNCcm93c2VyICYmICFnbG9iYWxUaGlzLmluZGV4ZWREQikgewogICAgICAgICAgY29uc29sZS5sb2coImhleSIpOwogICAgICAgICAgY29uc29sZS5sb2coZ2xvYmFsVGhpcy5pbmRleGVkREIpOwogICAgICAgICAgYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiL2F1dG8iKTsKICAgICAgICAgIGlmICghZ2xvYmFsVGhpcy5pbmRleGVkREIpIHsKICAgICAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiIik7CiAgICAgICAgICAgIGdsb2JhbFRoaXMuaW5kZXhlZERCID0gbmV3IG1vZC5JREJGYWN0b3J5KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZGIgPSBhd2FpdCBidWlsZF9leHBvcnRzLm9wZW5EQih0aGlzLm9wdGlvbnMuZGJOYW1lLCAxLCB7CiAgICAgICAgICB1cGdyYWRlOiAoZGIpID0+IHsKICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0KGtleTIpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5nZXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSwga2V5Mik7CiAgICAgIH0KICAgICAgYXN5bmMgY2hlY2soa2V5QXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQoa2V5QXJnKTsKICAgICAgICByZXR1cm4gISFyZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0KGtleTIsIHZhbCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLnB1dCh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB2YWwsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGRlbGV0ZShrZXkyKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZGVsZXRlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGNsZWFyKCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmNsZWFyKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpOwogICAgICB9CiAgICAgIGFzeW5jIGtleXMoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZ2V0QWxsS2V5cyh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzCnZhciBUeXBlZHJlcXVlc3RDYWNoZTsKdmFyIGluaXRfd2Vic3RvcmVfY2xhc3Nlc190eXBlZHJlcXVlc3RjYWNoZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfY2xhc3Nlc193ZWJzdG9yZSgpOwogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBUeXBlZHJlcXVlc3RDYWNoZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZG9tYWluQXJnID0gImRlZmF1bHQiKSB7CiAgICAgICAgdGhpcy53ZWJzdG9yZSA9IG5ldyBXZWJTdG9yZSh7CiAgICAgICAgICBkYk5hbWU6ICJ0clN0b3JlIiwKICAgICAgICAgIHN0b3JlTmFtZTogYHRyU3RvcmUtJHtkb21haW5Bcmd9YAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGJ1aWxkS2V5KHJlcXVlc3RBcmcpIHsKICAgICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHsKICAgICAgICAgIG1ldGhvZDogcmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0QXJnLnJlcXVlc3QKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3RvcmVzIGJ5IHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGlmICghdHlwZWRyZXF1ZXN0QXJnLnJlc3BvbnNlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc3RvcmUgcmVxdWVzdHMgd2l0aG91dCBhIHJlc3BvbnNlIHByZXNlbnQiKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzdG9yZS5zZXQodGhpcy5idWlsZEtleSh0eXBlZHJlcXVlc3RBcmcpLCB0eXBlZHJlcXVlc3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXQgYnkgZnVsbCB0eW9lZHJlcXVlc3QgYnkgcGFydGlhbCB0eXBlZHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZ2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMud2Vic3RvcmUuZ2V0KHRoaXMuYnVpbGRLZXkodHlwZWRyZXF1ZXN0QXJnKSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTMgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTMsIHsKICBUeXBlZHJlcXVlc3RDYWNoZTogKCkgPT4gVHlwZWRyZXF1ZXN0Q2FjaGUsCiAgV2ViU3RvcmU6ICgpID0+IFdlYlN0b3JlCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3R5cGVkcmVxdWVzdGNhY2hlKCk7CiAgICBpbml0X3dlYnN0b3JlX2NsYXNzZXNfd2Vic3RvcmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnJlcXVlc3RfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czEwKCk7CiAgICBpbml0X2Rpc3RfdHMxMigpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEAzLjAuMzcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTQgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTQsIHsKICBXZWJSZXF1ZXN0OiAoKSA9PiBXZWJSZXF1ZXN0Cn0pOwp2YXIgV2ViUmVxdWVzdDsKdmFyIGluaXRfZGlzdF90czE0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEAzLjAuMzcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3dlYnJlcXVlc3RfcGx1Z2lucygpOwogICAgV2ViUmVxdWVzdCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5vcHRpb25zQXJnID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmNhY2hlU3RvcmUgPSBuZXcgZGlzdF90c19leHBvcnRzMTMuV2ViU3RvcmUoewogICAgICAgICAgZGJOYW1lOiAid2VicmVxdWVzdCIsCiAgICAgICAgICBzdG9yZU5hbWU6ICJ3ZWJyZXF1ZXN0IgogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgICAgIGxvZ2dpbmc6IHRydWUsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgfQogICAgICBhc3luYyBnZXRKc29uKHVybEFyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICAgIHVzZUNhY2hlOiB1c2VDYWNoZUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwb3N0SnNvbgogICAgICAgKi8KICAgICAgYXN5bmMgcG9zdEpzb24odXJsQXJnLCByZXF1ZXN0Qm9keSwgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLAogICAgICAgICAgdXNlQ2FjaGU6IHVzZUNhY2hlQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1dCBqcwogICAgICAgKi8KICAgICAgYXN5bmMgcHV0SnNvbih1cmxBcmcsIHJlcXVlc3RCb2R5LCB1c2VTdG9yZUFzRmFsbGJhY2sgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiUFVUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSkKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcHV0IGpzCiAgICAgICAqLwogICAgICBhc3luYyBkZWxldGVKc29uKHVybEFyZywgdXNlU3RvcmVBc0ZhbGxiYWNrID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIG1ldGhvZDogIkdFVCIKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICBhc3luYyByZXF1ZXN0KHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIG9wdGlvbnNBcmcgPSB7CiAgICAgICAgICB0aW1lb3V0TXM6IDZlNCwKICAgICAgICAgIHVzZUNhY2hlOiBmYWxzZSwKICAgICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgICB9OwogICAgICAgIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Iob3B0aW9uc0FyZy50aW1lb3V0TXMpLnRoZW4oKCkgPT4gewogICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIH0pOwogICAgICAgIGxldCBjYWNoZWRSZXNwb25zZURlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgbGV0IGNhY2hlVXNlZCA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5jaGVjayh1cmxBcmcpKSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZUJ1ZmZlciA9IGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5nZXQodXJsQXJnKTsKICAgICAgICAgIGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucmVzb2x2ZShuZXcgUmVzcG9uc2UocmVzcG9uc2VCdWZmZXIsIHt9KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucmVzb2x2ZShudWxsKTsKICAgICAgICB9CiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsQXJnLCB7CiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLAogICAgICAgICAgbWV0aG9kOiBvcHRpb25zQXJnLm1ldGhvZCwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgLi4ub3B0aW9uc0FyZy5oZWFkZXJzIHx8IHt9CiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5CiAgICAgICAgfSkuY2F0Y2goYXN5bmMgKGVycikgPT4gewogICAgICAgICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgYXdhaXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlKSB7CiAgICAgICAgICAgIGNhY2hlVXNlZCA9IHRydWU7CiAgICAgICAgICAgIGNvbnN0IGNhY2hlZFJlc3BvbnNlID0gY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICByZXR1cm4gY2FjaGVkUmVzcG9uc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDUwMCkgewogICAgICAgICAgY2FjaGVVc2VkID0gdHJ1ZTsKICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWNhY2hlVXNlZCAmJiBvcHRpb25zQXJnLnVzZUNhY2hlICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkgewogICAgICAgICAgY29uc3QgYnVmZmVyMiA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5zZXQodXJsQXJnLCBidWZmZXIyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5sb2coYCR7dXJsQXJnfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGEgbXVsdGkgZW5kcG9pbnQsIGZhdWx0IHRvbGVyYW50IHJlcXVlc3QgZnVuY3Rpb24KICAgICAgICovCiAgICAgIGFzeW5jIHJlcXVlc3RNdWx0aUVuZHBvaW50KHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGxldCBhbGxVcmxzOwogICAgICAgIGxldCB1c2VkVXJsSW5kZXggPSAwOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybEFyZykpIHsKICAgICAgICAgIGFsbFVybHMgPSB1cmxBcmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsbFVybHMgPSBbdXJsQXJnXTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVxdWVzdEhpc3RvcnkgPSBbXTsKICAgICAgICBjb25zdCBkb0hpc3RvcnlDaGVjayA9IGFzeW5jIChoaXN0b3J5RW50cnlUeXBlQXJnKSA9PiB7CiAgICAgICAgICByZXF1ZXN0SGlzdG9yeS5wdXNoKGhpc3RvcnlFbnRyeVR5cGVBcmcpOwogICAgICAgICAgaWYgKGhpc3RvcnlFbnRyeVR5cGVBcmcgPT09ICI0MjkiKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJnb3QgNDI5LCBzbyB3YWl0aW5nIGEgbGl0dGxlIGJpdC4iKTsKICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMmUzIC0gMWUzICsgMSkpICsgMWUzKTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBudW1PZkhpc3RvcnlUeXBlID0gMDsKICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVxdWVzdEhpc3RvcnkpIHsKICAgICAgICAgICAgaWYgKGVudHJ5ID09PSBoaXN0b3J5RW50cnlUeXBlQXJnKQogICAgICAgICAgICAgIG51bU9mSGlzdG9yeVR5cGUrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChudW1PZkhpc3RvcnlUeXBlID4gMiAqIGFsbFVybHMubGVuZ3RoICogdXNlZFVybEluZGV4KSB7CiAgICAgICAgICAgIHVzZWRVcmxJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgZG9SZXF1ZXN0ID0gYXN5bmMgKHVybFRvVXNlKSA9PiB7CiAgICAgICAgICBpZiAoIXVybFRvVXNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigicmVxdWVzdCBmYWlsZWQgcGVybWFuZW50bHkiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubG9nKGBHZXR0aW5nICR7dXJsVG9Vc2V9IHdpdGggbWV0aG9kICR7b3B0aW9uc0FyZy5tZXRob2R9YCk7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybFRvVXNlLCB7CiAgICAgICAgICAgIG1ldGhvZDogb3B0aW9uc0FyZy5tZXRob2QsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgIC4uLm9wdGlvbnNBcmcuaGVhZGVycyB8fCB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICBib2R5OiBvcHRpb25zQXJnLmJvZHkKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5sb2coYCR7dXJsVG9Vc2V9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IGRvSGlzdG9yeUNoZWNrKHJlc3BvbnNlLnN0YXR1cy50b1N0cmluZygpKTsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZG9SZXF1ZXN0KGFsbFVybHNbdXNlZFVybEluZGV4XSk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBjb25zdCBmaW5hbFJlc3BvbnNlID0gYXdhaXQgZG9SZXF1ZXN0KGFsbFVybHNbdXNlZFVybEluZGV4XSk7CiAgICAgICAgcmV0dXJuIGZpbmFsUmVzcG9uc2U7CiAgICAgIH0KICAgICAgbG9nKGxvZ0FyZykgewogICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZykgewogICAgICAgICAgY29uc29sZS5sb2cobG9nQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMKdmFyIGlzb3VuaXF1ZTI7CnZhciBpbml0X3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaXNvdW5pcXVlMiA9IF9fdG9FU00ocmVxdWlyZV9kaXN0X3RzKCksIDEpOwogICAgaW5pdF9kaXN0X3RzNygpOwogICAgaW5pdF9kaXN0X3RzOCgpOwogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzOSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcmVzcG9uc2VlcnJvci5qcwp2YXIgVHlwZWRSZXNwb25zZUVycm9yOwp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFJlc3BvbnNlRXJyb3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGVycm9yVGV4dEFyZywgZXJyb3JEYXRhQXJnKSB7CiAgICAgICAgdGhpcy5lcnJvclRleHQgPSBlcnJvclRleHRBcmc7CiAgICAgICAgdGhpcy5lcnJvckRhdGEgPSBlcnJvckRhdGFBcmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0b29scy5qcwp2YXIgVHlwZWRUb29sczsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdG9vbHMuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRvb2xzID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvY2FsRGF0YSA9IHt9OwogICAgICB9CiAgICAgIGFzeW5jIHBhc3NHdWFyZHMoZ3VhcmRzQXJnLCBkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgZ3VhcmRTZXQgPSBuZXcgZGlzdF90c19leHBvcnRzOS5HdWFyZFNldChndWFyZHNBcmcpOwogICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gYXdhaXQgZ3VhcmRTZXQuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTsKICAgICAgICBpZiAoIWd1YXJkUmVzdWx0KSB7CiAgICAgICAgICBjb25zdCBmYWlsZWRIaW50ID0gYXdhaXQgZ3VhcmRTZXQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IoYGd1YXJkIGZhaWxlZDogJHtmYWlsZWRIaW50fWAsIHsgZmFpbGVkSGludCB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRoYW5kbGVyLmpzCnZhciBUeXBlZEhhbmRsZXI7CnZhciBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzKCk7CiAgICBUeXBlZEhhbmRsZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7CiAgICAgICAgdGhpcy5oYW5kbGVyRnVuY3Rpb24gPSBoYW5kbGVyRnVuY3Rpb25Bcmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgYSByZXNwb25zZSB0byB0aGUgdHlwZWRSZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3RBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFkZFJlc3BvbnNlKHR5cGVkUmVxdWVzdEFyZykgewogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmcubWV0aG9kICE9PSB0aGlzLm1ldGhvZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aGlzIGhhbmRsZXIgaGFzIGJlZW4gZ2l2ZW4gYSB3cm9uZyBtZXRob2QgdG8gYW5zd2VyIHRvLiBQbGVhc2UgdXNlIGEgVHlwZWRSb3V0ZXIgdG8gZmlsdGVyIHJlcXVlc3RzIik7CiAgICAgICAgfQogICAgICAgIGxldCB0eXBlZFJlc3BvbnNlRXJyb3I7CiAgICAgICAgY29uc3QgdHlwZWR0b29sc0luc3RhbmNlID0gbmV3IFR5cGVkVG9vbHMoKTsKICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSkgewogICAgICAgICAgdHlwZWR0b29sc0luc3RhbmNlLmxvY2FsRGF0YSA9IHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGE7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVyRnVuY3Rpb24odHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QsIHR5cGVkdG9vbHNJbnN0YW5jZSkuY2F0Y2goKGUxMSkgPT4gewogICAgICAgICAgaWYgKGUxMSBpbnN0YW5jZW9mIFR5cGVkUmVzcG9uc2VFcnJvcikgewogICAgICAgICAgICB0eXBlZFJlc3BvbnNlRXJyb3IgPSBlMTE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZyhlMTEpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh0eXBlZFJlc3BvbnNlRXJyb3IpIHsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5lcnJvciA9IHsKICAgICAgICAgICAgdGV4dDogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yVGV4dCwKICAgICAgICAgICAgZGF0YTogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yRGF0YQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3BvbnNlKSB7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UgPSByZXNwb25zZTsKICAgICAgICB9CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPyB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAicmVzcG9uc2UiIDogbnVsbDsKICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcm91dGVyLmpzCnZhciBUeXBlZFJvdXRlcjsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJvdXRlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc192aXJ0dWFsc3RyZWFtKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBUeXBlZFJvdXRlciA9IGNsYXNzIF9UeXBlZFJvdXRlciB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuaG9va3MgPSB7fTsKICAgICAgICB0aGlzLnJvdXRlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuaGFuZGxlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuT2JqZWN0TWFwKCk7CiAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2LkludGVyZXN0TWFwKChjb3JyZWxhdGlvbklkKSA9PiBjb3JyZWxhdGlvbklkKTsKICAgICAgfQogICAgICAvLyBVc2UgZ2xvYmFsVGhpcyBmb3IgY3Jvc3MtYnVuZGxlIGhvb2sgc2hhcmluZwogICAgICBzdGF0aWMgZ2V0IGdsb2JhbEhvb2tzKCkgewogICAgICAgIGlmICghZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rczsKICAgICAgfQogICAgICBzdGF0aWMgc2V0IGdsb2JhbEhvb2tzKHZhbHVlMikgewogICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0gdmFsdWUyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgZ2xvYmFsIGhvb2tzIGZvciBtb25pdG9yaW5nIGFsbCBUeXBlZFJlcXVlc3QgdHJhZmZpYwogICAgICAgKiBIb29rcyBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgYnVuZGxlcyB2aWEgZ2xvYmFsVGhpcwogICAgICAgKi8KICAgICAgc3RhdGljIHNldEdsb2JhbEhvb2tzKGhvb2tzOCkgewogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBfVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3M7CiAgICAgICAgX1R5cGVkUm91dGVyLmdsb2JhbEhvb2tzID0geyAuLi5jdXJyZW50LCAuLi5ob29rczggfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgYWxsIGdsb2JhbCBob29rcwogICAgICAgKi8KICAgICAgc3RhdGljIGNsZWFyR2xvYmFsSG9va3MoKSB7CiAgICAgICAgZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGluc3RhbmNlLWxldmVsIGhvb2tzIGZvciBtb25pdG9yaW5nIHRyYWZmaWMgdGhyb3VnaCB0aGlzIHJvdXRlcgogICAgICAgKi8KICAgICAgc2V0SG9va3MoaG9va3M4KSB7CiAgICAgICAgdGhpcy5ob29rcyA9IHsgLi4udGhpcy5ob29rcywgLi4uaG9va3M4IH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhlbHBlciB0byBjYWxsIGJvdGggZ2xvYmFsIGFuZCBpbnN0YW5jZSBob29rcwogICAgICAgKi8KICAgICAgY2FsbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9UeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgICAgICAgICB0aGlzLmhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUm91dGVyIGhvb2sgZXJyb3IgKCR7aG9va05hbWV9KTpgLCBlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyB0aGUgaGFuZGxlciB0byB0aGUgcm91dGluZyBtYXAKICAgICAgICogQHBhcmFtIHR5cGVkSGFuZGxlckFyZwogICAgICAgKi8KICAgICAgYWRkVHlwZWRIYW5kbGVyKHR5cGVkSGFuZGxlckFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nVHlwZWRIYW5kbGVyID0gdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QodHlwZWRIYW5kbGVyQXJnLm1ldGhvZCk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGEgVHlwZWRIYW5kbGVyIGZvciAke3R5cGVkSGFuZGxlckFyZy5tZXRob2R9IGFscmVkeSBleGlzdHMhIENhbid0IGFkZCBhbm90aGVyIG9uZS5gKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oYW5kbGVyTWFwLmFkZCh0eXBlZEhhbmRsZXJBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFub3RoZXIgc3ViIHR5cGVkUm91dGVyCiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3QKICAgICAgICovCiAgICAgIGFkZFR5cGVkUm91dGVyKHR5cGVkUm91dGVyQXJnKSB7CiAgICAgICAgY29uc3Qgcm91dGVyRXhpc3RzID0gdGhpcy5yb3V0ZXJNYXAuZmluZFN5bmMoKHJvdXRlckFyZykgPT4gcm91dGVyQXJnID09PSB0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgaWYgKCFyb3V0ZXJFeGlzdHMpIHsKICAgICAgICAgIHRoaXMucm91dGVyTWFwLmFkZCh0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgICB0eXBlZFJvdXRlckFyZy5hZGRUeXBlZFJvdXRlcih0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2hlY2tGb3JUeXBlZEhhbmRsZXIobWV0aG9kQXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhIHR5cGVkIFJvdXRlciBmcm9tIHRoZSByb3V0ZXIgY2hhaW4sIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICogQHBhcmFtIGNoZWNrVXBzdHJlYW1Sb3V0ZXIKICAgICAgICovCiAgICAgIGdldFR5cGVkSGFuZGxlckZvck1ldGhvZChtZXRob2RBcmcsIGNoZWNrZWRSb3V0ZXJzID0gW10pIHsKICAgICAgICBjaGVja2VkUm91dGVycy5wdXNoKHRoaXMpOwogICAgICAgIGxldCB0eXBlZEhhbmRsZXI7CiAgICAgICAgdHlwZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKChoYW5kbGVyMikgPT4gewogICAgICAgICAgcmV0dXJuIGhhbmRsZXIyLm1ldGhvZCA9PT0gbWV0aG9kQXJnOwogICAgICAgIH0pOwogICAgICAgIGlmICghdHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpLmZvckVhY2goKHR5cGVkUm91dGVyQXJnKSA9PiB7CiAgICAgICAgICAgIGlmICghdHlwZWRIYW5kbGVyICYmICFjaGVja2VkUm91dGVycy5pbmNsdWRlcyh0eXBlZFJvdXRlckFyZykpIHsKICAgICAgICAgICAgICB0eXBlZEhhbmRsZXIgPSB0eXBlZFJvdXRlckFyZy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnLCBjaGVja2VkUm91dGVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZWRIYW5kbGVyOwogICAgICB9CiAgICAgIHN0YXRpYyB7CiAgICAgICAgdGhpcy5kZWZhdWx0Um91dGVPcHRpb25zID0gewogICAgICAgICAgbG9jYWxSZXF1ZXN0OiBmYWxzZSwKICAgICAgICAgIHNraXBIb29rczogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3JlcXVlc3QnIC0+IHJvdXRlcyBhIHR5cGVkIHJlcXVlc3Qgb2JqZWN0IHRvIGEgaGFuZGxlcgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3Jlc3BvbnNlJyAtPiByb3V0ZXMgYSB0eXBlZCByZXF1ZXN0IG9iamVjdCB0byByZXF1ZXN0IGZpcmUgZXZlbnQKICAgICAgICogQHBhcmFtIHR5cGVkUmVxdWVzdEFyZwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyAtIE9wdGlvbnMgb2JqZWN0IHdpdGg6CiAgICAgICAqICAgLSBsb2NhbFJlcXVlc3Q6IHRyZWF0IGFzIGxvY2FsIHJlcXVlc3QgKGRlZmF1bHQ6IGZhbHNlKQogICAgICAgKiAgIC0gc2tpcEhvb2tzOiBza2lwIGNhbGxpbmcgaG9va3MgZm9yIHRoaXMgcm91dGluZyAoZGVmYXVsdDogZmFsc2UsIHVzZSBmb3IgYnJvYWRjYXN0LXJlY2VpdmVkIG1lc3NhZ2VzKQogICAgICAgKi8KICAgICAgYXN5bmMgcm91dGVBbmRBZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLl9UeXBlZFJvdXRlci5kZWZhdWx0Um91dGVPcHRpb25zLCAuLi5vcHRpb25zQXJnIH07CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsodHlwZWRSZXF1ZXN0QXJnLCB7CiAgICAgICAgICB0eXBlZHJvdXRlcjogdGhpcwogICAgICAgIH0pOwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhIHx8IHt9OwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEuZmlyc3RUeXBlZHJvdXRlciA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QgPT09ICIjI1ZpcnR1YWxTdHJlYW0jIyIpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHR5cGVkUmVxdWVzdEFyZyk7CiAgICAgICAgICByZXN1bHQubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmc/LmNvcnJlbGF0aW9uPy5waGFzZSA9PT0gInJlcXVlc3QiIHx8IG9wdGlvbnMubG9jYWxSZXF1ZXN0KSB7CiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1JlcXVlc3QiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogImluY29taW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVxdWVzdAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHR5cGVkSGFuZGxlciA9IHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QpOwogICAgICAgICAgaWYgKCF0eXBlZEhhbmRsZXIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYENhbm5vdCBmaW5kIGhhbmRsZXIgZm9yIG1ldGhvZG5hbWUgJHt0eXBlZFJlcXVlc3RBcmcubWV0aG9kfWApOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7CiAgICAgICAgICAgICAgdGV4dDogIlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLAogICAgICAgICAgICAgIGRhdGE6IHt9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5waGFzZSA9ICJyZXNwb25zZSI7CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywgewogICAgICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICJvdXRnb2luZyIsCiAgICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0eXBlZFJlcXVlc3RBcmc7CiAgICAgICAgICB9CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBhd2FpdCB0eXBlZEhhbmRsZXIuYWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHsKICAgICAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBIb29rcykgewogICAgICAgICAgICB0aGlzLmNhbGxIb29rKCJvbk91dGdvaW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogIm91dGdvaW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgIGVycm9yOiB0eXBlZFJlcXVlc3RBcmcuZXJyb3I/LnRleHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICAgIH0gZWxzZSBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICJyZXNwb25zZSIpIHsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QodHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uLmlkKT8uZnVsbGZpbGxJbnRlcmVzdCh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJyZWNlaXZlZCB3ZWlyZGx5IHNoYXBlZCByZXF1ZXN0Iik7CiAgICAgICAgICBjb25zb2xlLmxvZyh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBoYW5kbGUgc3RyZWFtaW5nCiAgICAgICAqIEBwYXJhbSBzdHJlYW1UckFyZwogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHN0cmVhbVRyQXJnKSB7CiAgICAgICAgY29uc3QgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtID0gYXdhaXQgdGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZmluZChhc3luYyAodmlydHVhbFN0cmVhbUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIHZpcnR1YWxTdHJlYW1Bcmcuc3RyZWFtSWQgPT09IHN0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWQ7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZWxldmFudFZpcnR1YWxTdHJlYW0pIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBubyByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSBmb3VuZCBmb3Igc3RyZWFtIHdpdGggaWQgJHtzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkfWApOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZ2V0QXJyYXkoKSk7CiAgICAgICAgICByZXR1cm4gc3RyZWFtVHJBcmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBzdWNjZXNzOiBmb3VuZCByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtLmhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnZpcnR1YWxzdHJlYW0uanMKdmFyIGNsb3NpbmdCaXQsIFZpcnR1YWxTdHJlYW07CnZhciBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBjbG9zaW5nQml0ID0gIiMjIyMjIyMjIyMjIyNDTE9TSU5HIEJJVCMjIyMjIyMjIyMjIyMiOwogICAgVmlydHVhbFN0cmVhbSA9IGNsYXNzIF9WaXJ0dWFsU3RyZWFtIHsKICAgICAgLy8gU1RBVElDCiAgICAgIHN0YXRpYyBlbmNvZGVQYXlsb2FkRm9yTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zLCBvcmlnaW5hbFBheWxvYWQsIHBhdGgyID0gW10pIHsKICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAoZGlzdF90c19leHBvcnRzOC5pc0J1ZmZlckxpa2Uob2JqZWN0UGF5bG9hZCkpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAob2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIF9WaXJ0dWFsU3RyZWFtKSB7CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC5zaWRlID0gInJlcXVlc3RpbmciOwogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnNlbmRNZXRob2QgPSBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2Q7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICJyZXNwb25kaW5nIjsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZChvYmplY3RQYXlsb2FkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghb3JpZ2luYWxQYXlsb2FkLnJlc3BvbnNlIHx8IHBhdGgyLmluY2x1ZGVzKCJyZXNwb25zZSIpKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgX2lzVmlydHVhbFN0cmVhbTogdHJ1ZSwKICAgICAgICAgICAgICBzdHJlYW1JZDogb2JqZWN0UGF5bG9hZC5zdHJlYW1JZAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBfT0JNSVRURURfVklSVFVBTF9TVFJFQU06IHRydWUsCiAgICAgICAgICAgICAgcmVhc29uOiAicGF0aCBpcyB1bmRlciAucmVxdWVzdDogb2JtaXR0ZWQgZm9yIGRlZHVwbGljYXRpb24gcmVhc29ucyBpbiByZXNwb25zZSBjeWNsZS4iCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZC5tYXAoKGl0ZW0sIGluZGV4MikgPT4gX1ZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoCiAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMsCiAgICAgICAgICAgIG9yaWdpbmFsUGF5bG9hZCB8fCBvYmplY3RQYXlsb2FkLAogICAgICAgICAgICBwYXRoMi5jb25jYXQoU3RyaW5nKGluZGV4MikpCiAgICAgICAgICAgIC8vIENvbnZlcnQgaW5kZXggdG8gc3RyaW5nIGFuZCBjb25jYXRlbmF0ZSB0byBwYXRoCiAgICAgICAgICApKTsKICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFBheWxvYWQgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdFBheWxvYWQgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIFtrZXkyLCB2YWx1ZTJdKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoMi5jb25jYXQoa2V5Mik7CiAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHZhbHVlMiwgY29tbUZ1bmN0aW9ucywgb3JpZ2luYWxQYXlsb2FkIHx8IG9iamVjdFBheWxvYWQsIG5ld1BhdGgpOwogICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgfSwge30pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zKSB7CiAgICAgICAgaWYgKGRpc3RfdHNfZXhwb3J0czguaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBUeXBlZFJvdXRlcikgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7CiAgICAgICAgfQogICAgICAgIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAib2JqZWN0IikgewogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBTZXQgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIE1hcCB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUmVnRXhwIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBFcnJvciB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUHJvbWlzZSB8fCB0eXBlb2Ygb2JqZWN0UGF5bG9hZC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQuX2lzVmlydHVhbFN0cmVhbSkgewogICAgICAgICAgICBjb25zdCB2aXJ0dWFsU3RyZWFtID0gbmV3IF9WaXJ0dWFsU3RyZWFtKCk7CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RyZWFtSWQgPSBvYmplY3RQYXlsb2FkLnN0cmVhbUlkOwogICAgICAgICAgICBpZiAoIXZpcnR1YWxTdHJlYW0uc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVxdWVzdGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zZW5kTWV0aG9kID0gY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdmlydHVhbFN0cmVhbS5zaWRlICYmIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVzcG9uZGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgICAgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuYWRkKHZpcnR1YWxTdHJlYW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsU3RyZWFtOwogICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RQYXlsb2FkKSB7CiAgICAgICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChfVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsoaXRlbSwgY29tbUZ1bmN0aW9ucykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3RQYXlsb2FkKS5yZWR1Y2UoKGFjYywga2V5MikgPT4gewogICAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkW2tleTJdLCBjb21tRnVuY3Rpb25zKTsKICAgICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgICB9LCB7fSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnN0cmVhbUlkID0gaXNvdW5pcXVlMi51bmkoKTsKICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IHRydWU7CiAgICAgICAgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5ID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuQmFja3ByZXNzdXJlZEFycmF5KDE2KTsKICAgICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkgPSBuZXcgZGlzdF90c19leHBvcnRzNi5CYWNrcHJlc3N1cmVkQXJyYXkoMTYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0YWtlcyBjYXJlIG9mIHNlbmRpbmcKICAgICAgICovCiAgICAgIGFzeW5jIHdvcmtPblF1ZXVlKCkgewogICAgICAgIGlmICh0aGlzLndvcmtpbmdEZWZlcnJlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMud29ya2luZ0RlZmVycmVkLnByb21pc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXF1ZXN0aW5nIikgewogICAgICAgICAgbGV0IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkID0gIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgICBsZXQgb3RoZXJTaWRlSGFzTmV4dCA9IGZhbHNlOwogICAgICAgICAgbGV0IG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IGZhbHNlOwogICAgICAgICAgY29uc3QgZ2V0RmVlZGJhY2sgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHN0cmVhbVRyID0gYXdhaXQgdGhpcy5zZW5kTWV0aG9kKHsKICAgICAgICAgICAgICBtZXRob2Q6ICIjI1ZpcnR1YWxTdHJlYW0jIyIsCiAgICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgICAgICBjeWNsZUlkOiBpc291bmlxdWUyLnVuaSgpLAogICAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICAgIG90aGVyU2lkZUhhc05leHQgPSBzdHJlYW1Uci5yZXNwb25zZS5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTsKICAgICAgICAgIHdoaWxlICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwIHx8IG90aGVyU2lkZUhhc05leHQpIHsKICAgICAgICAgICAgaWYgKG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCkgewogICAgICAgICAgICAgIHdoaWxlIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ3YWl0aW5nIGZvciBmZWVkYmFjayBiZWNhdXNlIG9mIGJhY2twcmVzc3VyZS4uLiIpOwogICAgICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcig1MCk7CiAgICAgICAgICAgICAgICBhd2FpdCBnZXRGZWVkYmFjaygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgZGF0YUFyZzsKICAgICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IHN0cmVhbVRyOwogICAgICAgICAgICBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiIyNWaXJ0dWFsU3RyZWFtIyMiLAogICAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgICAgY3ljbGVJZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICBtYWluUHVycG9zZTogZGF0YUFyZyA/ICJjaHVuayIgOiAicmVhZCIsCiAgICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIC4uLmRhdGFBcmcgPyB7IGNodW5rRGF0YTogZGF0YUFyZyB9IDoge30KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSkgewogICAgICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpOwogICAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy53b3JraW5nRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc3RyZWFtIG9ubHkgb24gdGhlIHJlc3BvbmRpbmcgc2lkZQogICAgICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcKICAgICAgICogQHJldHVybnMKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKSB7CiAgICAgICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3Qua2VlcEFsaXZlID09PSB0cnVlICYmIHRoaXMua2VlcEFsaXZlID09PSB0cnVlKSB7CiAgICAgICAgICB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA9IERhdGUubm93KCk7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAia2VlcEFsaXZlIikgewogICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5rZWVwQWxpdmUsCiAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAiZmVlZGJhY2siKSB7CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLAogICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImNodW5rIikgewogICAgICAgICAgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnB1c2goc3RyZWFtVHJBcmcucmVxdWVzdC5jaHVua0RhdGEpOwogICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAgJiYgc3RyZWFtVHJBcmcucmVzcG9uc2UuYmFja3ByZXNzdXJlID09PSBmYWxzZSkgewogICAgICAgICAgICBjb25zdCBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0gewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgICBjeWNsZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImNodW5rIiwKICAgICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAxLAogICAgICAgICAgICAgIC8vIDEgYW5kIG5vdCAwIGJlY2F1c2Ugd2UgY2FsbCBzaGlmdCBhIGZldyBsaW5lcyBkb3duCiAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSwKICAgICAgICAgICAgICBjaHVua0RhdGE6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJmZWVkYmFjayIsCiAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmVhbVRyQXJnOwogICAgICB9CiAgICAgIC8vIGxpZmVjeWNsZSBtZXRob2RzCiAgICAgIC8qKgogICAgICAgKiBjbG9zZXMgdGhlIHZpcnR1YWwgc3RyZWFtCiAgICAgICAqLwogICAgICBhc3luYyBjbGVhbnVwKCkgewogICAgICAgIGlmICh0aGlzLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICB0aGlzLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5yZW1vdmUodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhIGtlZXBBbGl2ZSBsb29wIHRoYXQgd29ya3MgYWNyb3NzIHRlY2hub2xvZ2llcwogICAgICAgKi8KICAgICAgYXN5bmMgc3RhcnRLZWVwQWxpdmVMb29wKCkgewogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXNwb25kaW5nIikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKDApOwogICAgICAgIGNvbnNvbGUubG9nKGBzdGFydGluZyBrZWVwYWxpdmUgbG9vcCBvbiBzaWRlICR7dGhpcy5zaWRlfWApOwogICAgICAgIGxldCBjb3VudGVyMiA9IDA7CiAgICAgICAga2VlcEFsaXZlTG9vcDogd2hpbGUgKHRoaXMua2VlcEFsaXZlKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKTsKICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoMWUzKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcigxZTMpOwogICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpOwogICAgICAgIGNvbnNvbGUubG9nKGBjbGVhbmVkIHVwIGZvciBzdHJlYW0gJHt0aGlzLnN0cmVhbUlkfWApOwogICAgICB9CiAgICAgIGFzeW5jIHRyaWdnZXJLZWVwQWxpdmUoKSB7CiAgICAgICAgaWYgKHRoaXMuc2lkZSA9PT0gInJlcXVlc3RpbmciKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhga2VlcGFsaXZlIHNlbnQuYCk7CiAgICAgICAgICBjb25zdCBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgIG1ldGhvZDogIiMjVmlydHVhbFN0cmVhbSMjIiwKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgICAga2VlcEFsaXZlOiB0aGlzLmtlZXBBbGl2ZQogICAgICAgICAgICB9LAogICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2Uua2VlcEFsaXZlID09PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPSBEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLm5leHQpIHsKICAgICAgICAgICAgdGhpcy53b3JrT25RdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEtlZXBBbGl2ZUV2ZW50ID4gMWU0KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgY2xvc2luZyBzdHJlYW0gZm9yICR7dGhpcy5zdHJlYW1JZH1gKTsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIERhdGEgc2VuZGluZyBhbmQgcmVjZWl2aW5nCiAgICAgIGFzeW5jIHNlbmREYXRhKGRhdGFBcmcpIHsKICAgICAgICB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChkYXRhQXJnKTsKICAgICAgICB0aGlzLndvcmtPblF1ZXVlKCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LndhaXRGb3JTcGFjZSgpOwogICAgICB9CiAgICAgIGFzeW5jIGZldGNoRGF0YSgpIHsKICAgICAgICBpZiAodGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5Lmhhc1NwYWNlKSB7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9ySXRlbXMoKTsKICAgICAgICBjb25zdCBkYXRhUGFja2FnZSA9IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgIHJldHVybiBkYXRhUGFja2FnZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVhZHMgZnJvbSBhIFJlYWRhYmxlIGFuZCBzZW5kcyBpdCB0byB0aGUgb3RoZXIgc2lkZQogICAgICAgKiBAcGFyYW0gcmVhZGFibGVTdHJlYW1BcmcKICAgICAgICovCiAgICAgIGFzeW5jIHJlYWRGcm9tV2Vic3RyZWFtKHJlYWRhYmxlU3RyZWFtQXJnLCBjbG9zZUFmdGVyUmVhZGluZyA9IHRydWUpIHsKICAgICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbUFyZy5nZXRSZWFkZXIoKTsKICAgICAgICBsZXQgc3RyZWFtSXNEb25lID0gZmFsc2U7CiAgICAgICAgd2hpbGUgKCFzdHJlYW1Jc0RvbmUpIHsKICAgICAgICAgIGNvbnN0IHsgdmFsdWU6IHZhbHVlMiwgZG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kRGF0YSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgc3RyZWFtSXNEb25lID0gZG9uZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlQWZ0ZXJSZWFkaW5nKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB3cml0ZVRvV2Vic3RyZWFtKHdyaXRhYmxlU3RyZWFtQXJnKSB7CiAgICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGVTdHJlYW1BcmcuZ2V0V3JpdGVyKCk7CiAgICAgICAgd2hpbGUgKHRoaXMua2VlcEFsaXZlIHx8IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCkpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7CiAgICAgICAgICBpZiAodmFsdWUyID09PSBjbG9zaW5nQml0KSB7CiAgICAgICAgICAgIHdyaXRlci5yZWxlYXNlTG9jaygpOwogICAgICAgICAgICBhd2FpdCB3cml0YWJsZVN0cmVhbUFyZy5jbG9zZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHdyaXRlci53cml0ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2xvc2VzIHRoZSBzdHJlYW0KICAgICAgICogaWYgc2VuZENsb3NpbmdCaXRBcmcgaXMgdHJ1ZSwgdGhlIHN0cmVhbSB3aWxsIHNlbmQgYSBjbG9zaW5nIGJpdAogICAgICAgKiBAcGFyYW0gc2VuZENsb3NpbmdCaXRBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGNsb3NlKHNlbmRDbG9zaW5nQml0QXJnID0gZmFsc2UpIHsKICAgICAgICBpZiAoc2VuZENsb3NpbmdCaXRBcmcpIHsKICAgICAgICAgIHRoaXMuc2VuZERhdGEoY2xvc2luZ0JpdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0YXJnZXQuanMKdmFyIFR5cGVkVGFyZ2V0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRhcmdldCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIGlmIChvcHRpb25zQXJnLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXIgJiYgIW9wdGlvbnNBcmcudHlwZWRSb3V0ZXJSZWYpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7CiAgICAgICAgfQogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdChwYXlsb2FkQXJnKSB7CiAgICAgICAgbGV0IHJlc3BvbnNlSW50ZXJlc3Q7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZikgewogICAgICAgICAgcmVzcG9uc2VJbnRlcmVzdCA9IGF3YWl0IHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZi5maXJlRXZlbnRJbnRlcmVzdE1hcC5hZGRJbnRlcmVzdChwYXlsb2FkQXJnLmNvcnJlbGF0aW9uLmlkLCBwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcG9zdE1ldGhvZCA9IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kIHx8IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOwogICAgICAgIGNvbnN0IHBvc3RNZXRob2RSZXR1cm5WYWx1ZSA9IGF3YWl0IHBvc3RNZXRob2QocGF5bG9hZEFyZyk7CiAgICAgICAgbGV0IHJlc3BvbnNlQm9keTsKICAgICAgICBpZiAocmVzcG9uc2VJbnRlcmVzdCkgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzcG9uc2VJbnRlcmVzdC5pbnRlcmVzdEZ1bGxmaWxsZWQ7CiAgICAgICAgfSBlbHNlIGlmIChwb3N0TWV0aG9kUmV0dXJuVmFsdWUpIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IHBvc3RNZXRob2RSZXR1cm5WYWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcGF5bG9hZEFyZzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMKZnVuY3Rpb24gY2FsbEdsb2JhbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgdHJ5IHsKICAgIFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTsKICB9Cn0KdmFyIHdlYnJlcXVlc3RJbnN0YW5jZSwgVHlwZWRSZXF1ZXN0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWR0YXJnZXQoKTsKICAgIHdlYnJlcXVlc3RJbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNC5XZWJSZXF1ZXN0KCk7CiAgICBUeXBlZFJlcXVlc3QgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0gcG9zdEVuZFBvaW50QXJnCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHBvc3RUYXJnZXQsIG1ldGhvZEFyZykgewogICAgICAgIHRoaXMuc2tpcEhvb2tzID0gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBwb3N0VGFyZ2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgdGhpcy51cmxFbmRQb2ludCA9IHBvc3RUYXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudHlwZWRUYXJnZXQgPSBwb3N0VGFyZ2V0OwogICAgICAgIH0KICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZEFyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmlyZXMgdGhlIHJlcXVlc3QKICAgICAgICovCiAgICAgIGFzeW5jIGZpcmUoZmlyZUFyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgIGxldCBwYXlsb2FkU2VuZGluZyA9IHsKICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiBmaXJlQXJnLAogICAgICAgICAgcmVzcG9uc2U6IG51bGwsCiAgICAgICAgICBjb3JyZWxhdGlvbjogewogICAgICAgICAgICBpZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IgogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcGF5bG9hZFNlbmRpbmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHBheWxvYWRTZW5kaW5nLCB7CiAgICAgICAgICBzZW5kTWV0aG9kOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZEFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCF0aGlzLnNraXBIb29rcykgewogICAgICAgICAgY2FsbEdsb2JhbEhvb2soIm9uT3V0Z29pbmdSZXF1ZXN0IiwgewogICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwYXlsb2FkU2VuZGluZy5jb3JyZWxhdGlvbi5pZCwKICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCwKICAgICAgICAgICAgZGlyZWN0aW9uOiAib3V0Z29pbmciLAogICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgIHBheWxvYWQ6IGZpcmVBcmcKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBsZXQgcGF5bG9hZFJlY2VpdmluZzsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsocGF5bG9hZFJlY2VpdmluZywgewogICAgICAgICAgc2VuZE1ldGhvZDogKHBheWxvYWRBcmcpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghdGhpcy5za2lwSG9va3MpIHsKICAgICAgICAgIGNhbGxHbG9iYWxIb29rKCJvbkluY29taW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHBheWxvYWRTZW5kaW5nLmNvcnJlbGF0aW9uLmlkLAogICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgIHBoYXNlOiAicmVzcG9uc2UiLAogICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkUmVjZWl2aW5nPy5yZXNwb25zZSwKICAgICAgICAgICAgZXJyb3I6IHBheWxvYWRSZWNlaXZpbmc/LmVycm9yPy50ZXh0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmcucmVzcG9uc2U7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyA9IGZhbHNlKSB7CiAgICAgICAgbGV0IHBheWxvYWRSZWNlaXZpbmc7CiAgICAgICAgaWYgKHRoaXMudXJsRW5kUG9pbnQpIHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgd2VicmVxdWVzdEluc3RhbmNlLnBvc3RKc29uKHRoaXMudXJsRW5kUG9pbnQsIHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyk7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gcmVzcG9uc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSBhd2FpdCB0aGlzLnR5cGVkVGFyZ2V0LnBvc3QocGF5bG9hZFNlbmRpbmdBcmcpOwogICAgICAgIH0KICAgICAgICBpZiAocGF5bG9hZFJlY2VpdmluZy5lcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgbWV0aG9kOiA+PiR7dGhpcy5tZXRob2R9PDwgZ290IGFuIEVSUk9SOiAiJHtwYXlsb2FkUmVjZWl2aW5nLmVycm9yLnRleHR9IiB3aXRoIGRhdGEgJHtKU09OLnN0cmluZ2lmeShwYXlsb2FkUmVjZWl2aW5nLmVycm9yLmRhdGEsIG51bGwsIDIpfWApOwogICAgICAgICAgaWYgKCFwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IocGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0LCBwYXlsb2FkUmVjZWl2aW5nLmVycm9yLmRhdGEpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgc2VydmVyIHJlcXVlc3RlZCByZXRyeSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICR7cGF5bG9hZFJlY2VpdmluZy5yZXRyeS5yZWFzb259YCk7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHBheWxvYWRSZWNlaXZpbmcucmV0cnkud2FpdEZvck1zKTsKICAgICAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSBhd2FpdCB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGF5bG9hZFJlY2VpdmluZzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE1ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE1LCB7CiAgVHlwZWRIYW5kbGVyOiAoKSA9PiBUeXBlZEhhbmRsZXIsCiAgVHlwZWRSZXF1ZXN0OiAoKSA9PiBUeXBlZFJlcXVlc3QsCiAgVHlwZWRSZXNwb25zZUVycm9yOiAoKSA9PiBUeXBlZFJlc3BvbnNlRXJyb3IsCiAgVHlwZWRSb3V0ZXI6ICgpID0+IFR5cGVkUm91dGVyLAogIFR5cGVkVGFyZ2V0OiAoKSA9PiBUeXBlZFRhcmdldCwKICBWaXJ0dWFsU3RyZWFtOiAoKSA9PiBWaXJ0dWFsU3RyZWFtCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlcXVlc3QoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZGhhbmRsZXIoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0KCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL3V0aWwuanMKZnVuY3Rpb24gaXNQcm9taXNlMihvYmopIHsKICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gImZ1bmN0aW9uIjsKfQpmdW5jdGlvbiBzbGVlcCh0aW1lLCByZXNvbHZlV2l0aCkgewogIGlmICghdGltZSkgdGltZSA9IDA7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZXMocmVzb2x2ZVdpdGgpOwogICAgfSwgdGltZSk7CiAgfSk7Cn0KZnVuY3Rpb24gcmFuZG9tSW50KG1pbjMsIG1heDMpIHsKICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heDMgLSBtaW4zICsgMSkgKyBtaW4zKTsKfQpmdW5jdGlvbiByYW5kb21Ub2tlbigpIHsKICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpOwp9CmZ1bmN0aW9uIG1pY3JvU2Vjb25kcygpIHsKICB2YXIgcmV0ID0gRGF0ZS5ub3coKSAqIDFlMzsKICBpZiAocmV0IDw9IGxhc3RNcykgewogICAgcmV0ID0gbGFzdE1zICsgMTsKICB9CiAgbGFzdE1zID0gcmV0OwogIHJldHVybiByZXQ7Cn0KZnVuY3Rpb24gc3VwcG9ydHNXZWJMb2NrQVBJKCkgewogIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgbmF2aWdhdG9yLmxvY2tzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CnZhciBQUk9NSVNFX1JFU09MVkVEX0ZBTFNFLCBQUk9NSVNFX1JFU09MVkVEX1RSVUUsIFBST01JU0VfUkVTT0xWRURfVk9JRCwgbGFzdE1zOwp2YXIgaW5pdF91dGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL3V0aWwuanMiKCkgewogICAgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgICBQUk9NSVNFX1JFU09MVkVEX1RSVUUgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7CiAgICBQUk9NSVNFX1JFU09MVkVEX1ZPSUQgPSBQcm9taXNlLnJlc29sdmUoKTsKICAgIGxhc3RNcyA9IDA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9uYXRpdmUuanMKZnVuY3Rpb24gY3JlYXRlKGNoYW5uZWxOYW1lKSB7CiAgdmFyIHN0YXRlMTIgPSB7CiAgICB0aW1lOiBtaWNyb1NlY29uZHMoKSwKICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwsCiAgICBiYzogbmV3IEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpLAogICAgc3ViRm5zOiBbXQogICAgLy8gc3Vic2NyaWJlckZ1bmN0aW9ucwogIH07CiAgc3RhdGUxMi5iYy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtc2dFdmVudCkgewogICAgaWYgKHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjaykgewogICAgICBzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2sobXNnRXZlbnQuZGF0YSk7CiAgICB9CiAgfTsKICByZXR1cm4gc3RhdGUxMjsKfQpmdW5jdGlvbiBjbG9zZShjaGFubmVsU3RhdGUpIHsKICBjaGFubmVsU3RhdGUuYmMuY2xvc2UoKTsKICBjaGFubmVsU3RhdGUuc3ViRm5zID0gW107Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHRyeSB7CiAgICBjaGFubmVsU3RhdGUuYmMucG9zdE1lc3NhZ2UobWVzc2FnZUpzb24sIGZhbHNlKTsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICB9Cn0KZnVuY3Rpb24gb25NZXNzYWdlKGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZCgpIHsKICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICJ1bmRlZmluZWQiICYmIGdsb2JhbFRoaXMuRGVubyAmJiBnbG9iYWxUaGlzLkRlbm8uYXJncykgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGlmICgodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiKSAmJiB0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gImZ1bmN0aW9uIikgewogICAgaWYgKEJyb2FkY2FzdENoYW5uZWwuX3B1YmtleSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IERvIG5vdCBvdmVyd3JpdGUgd2luZG93LkJyb2FkY2FzdENoYW5uZWwgd2l0aCB0aGlzIG1vZHVsZSwgdGhpcyBpcyBub3QgYSBwb2x5ZmlsbCIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZSgpIHsKICByZXR1cm4gMTUwOwp9CnZhciBtaWNyb1NlY29uZHMyLCB0eXBlLCBOYXRpdmVNZXRob2Q7CnZhciBpbml0X25hdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL25hdGl2ZS5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczIgPSBtaWNyb1NlY29uZHM7CiAgICB0eXBlID0gIm5hdGl2ZSI7CiAgICBOYXRpdmVNZXRob2QgPSB7CiAgICAgIGNyZWF0ZSwKICAgICAgY2xvc2UsCiAgICAgIG9uTWVzc2FnZSwKICAgICAgcG9zdE1lc3NhZ2UsCiAgICAgIGNhbkJlVXNlZCwKICAgICAgdHlwZSwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZSwKICAgICAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHMyCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMKZnVuY3Rpb24gcmVtb3ZlVG9vT2xkVmFsdWVzKG9ibGl2aW91c1NldCkgewogIGNvbnN0IG9sZGVyVGhlbiA9IG5vdygpIC0gb2JsaXZpb3VzU2V0LnR0bDsKICBjb25zdCBpdGVyYXRvcjIgPSBvYmxpdmlvdXNTZXQubWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKICB3aGlsZSAodHJ1ZSkgewogICAgY29uc3QgbmV4dDIgPSBpdGVyYXRvcjIubmV4dCgpLnZhbHVlOwogICAgaWYgKCFuZXh0MikgewogICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IHZhbHVlMiA9IG5leHQyWzBdOwogICAgY29uc3QgdGltZSA9IG5leHQyWzFdOwogICAgaWYgKHRpbWUgPCBvbGRlclRoZW4pIHsKICAgICAgb2JsaXZpb3VzU2V0Lm1hcC5kZWxldGUodmFsdWUyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KfQpmdW5jdGlvbiBub3coKSB7CiAgcmV0dXJuIERhdGUubm93KCk7Cn0KdmFyIE9ibGl2aW91c1NldDsKdmFyIGluaXRfc3JjID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMiKCkgewogICAgT2JsaXZpb3VzU2V0ID0gY2xhc3MgewogICAgICB0dGw7CiAgICAgIG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGluZyBjYWxscyB0byBzZXRUaW1lb3V0KCkgaXMgZXhwZW5zaXZlLAogICAgICAgKiBzbyB3ZSBvbmx5IGRvIHRoYXQgaWYgdGhlcmUgaXMgbm90IHRpbWVvdXQgYWxyZWFkeSBvcGVuLgogICAgICAgKi8KICAgICAgX3RvID0gZmFsc2U7CiAgICAgIGNvbnN0cnVjdG9yKHR0bCkgewogICAgICAgIHRoaXMudHRsID0gdHRsOwogICAgICB9CiAgICAgIGhhcyh2YWx1ZTIpIHsKICAgICAgICBjb25zdCB2YWx1ZVRpbWUgPSB0aGlzLm1hcC5nZXQodmFsdWUyKTsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlVGltZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlVGltZSA8IG5vdygpIC0gdGhpcy50dGwpIHsKICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZTIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBhZGQodmFsdWUyKSB7CiAgICAgICAgdGhpcy5tYXAuZGVsZXRlKHZhbHVlMik7CiAgICAgICAgdGhpcy5tYXAuc2V0KHZhbHVlMiwgbm93KCkpOwogICAgICAgIGlmICghdGhpcy5fdG8pIHsKICAgICAgICAgIHRoaXMuX3RvID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0aGlzLl90byA9IGZhbHNlOwogICAgICAgICAgICByZW1vdmVUb29PbGRWYWx1ZXModGhpcyk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9vcHRpb25zLmpzCmZ1bmN0aW9uIGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKCkgewogIHZhciBvcmlnaW5hbE9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9OwogIHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5hbE9wdGlvbnMpKTsKICBpZiAodHlwZW9mIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9PT0gInVuZGVmaW5lZCIpIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9IHRydWU7CiAgaWYgKCFvcHRpb25zLmlkYikgb3B0aW9ucy5pZGIgPSB7fTsKICBpZiAoIW9wdGlvbnMuaWRiLnR0bCkgb3B0aW9ucy5pZGIudHRsID0gMWUzICogNDU7CiAgaWYgKCFvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKSBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsID0gMTUwOwogIGlmIChvcmlnaW5hbE9wdGlvbnMuaWRiICYmIHR5cGVvZiBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2UgPT09ICJmdW5jdGlvbiIpIG9wdGlvbnMuaWRiLm9uY2xvc2UgPSBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2U7CiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZSkgb3B0aW9ucy5sb2NhbHN0b3JhZ2UgPSB7fTsKICBpZiAoIW9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQpIG9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQgPSAxZTMgKiA2MDsKICBpZiAob3JpZ2luYWxPcHRpb25zLm1ldGhvZHMpIG9wdGlvbnMubWV0aG9kcyA9IG9yaWdpbmFsT3B0aW9ucy5tZXRob2RzOwogIGlmICghb3B0aW9ucy5ub2RlKSBvcHRpb25zLm5vZGUgPSB7fTsKICBpZiAoIW9wdGlvbnMubm9kZS50dGwpIG9wdGlvbnMubm9kZS50dGwgPSAxZTMgKiA2MCAqIDI7CiAgaWYgKCFvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMpIG9wdGlvbnMubm9kZS5tYXhQYXJhbGxlbFdyaXRlcyA9IDIwNDg7CiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPT09ICJ1bmRlZmluZWQiKSBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPSB0cnVlOwogIHJldHVybiBvcHRpb25zOwp9CnZhciBpbml0X29wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzCmZ1bmN0aW9uIGdldElkYigpIHsKICBpZiAodHlwZW9mIGluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiBpbmRleGVkREI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5tb3pJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjsKICAgIGlmICh0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiB3aW5kb3cud2Via2l0SW5kZXhlZERCOwogICAgaWYgKHR5cGVvZiB3aW5kb3cubXNJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1zSW5kZXhlZERCOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHguY29tbWl0KSB7CiAgICB0eC5jb21taXQoKTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpIHsKICB2YXIgSW5kZXhlZERCID0gZ2V0SWRiKCk7CiAgdmFyIGRiTmFtZSA9IERCX1BSRUZJWCArIGNoYW5uZWxOYW1lOwogIHZhciBvcGVuUmVxdWVzdCA9IEluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CiAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXYpIHsKICAgIHZhciBkYiA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQsIHsKICAgICAga2V5UGF0aDogImlkIiwKICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZQogICAgfSk7CiAgfTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldikgewogICAgICByZXR1cm4gcmVqKGV2KTsKICAgIH07CiAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgcmVzKG9wZW5SZXF1ZXN0LnJlc3VsdCk7CiAgICB9OwogIH0pOwp9CmZ1bmN0aW9uIHdyaXRlTWVzc2FnZShkYiwgcmVhZGVyVXVpZCwgbWVzc2FnZUpzb24pIHsKICB2YXIgdGltZSA9IERhdGUubm93KCk7CiAgdmFyIHdyaXRlT2JqZWN0ID0gewogICAgdXVpZDogcmVhZGVyVXVpZCwKICAgIHRpbWUsCiAgICBkYXRhOiBtZXNzYWdlSnNvbgogIH07CiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oW09CSkVDVF9TVE9SRV9JRF0sICJyZWFkd3JpdGUiLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZXMoKTsKICAgIH07CiAgICB0eC5vbmVycm9yID0gZnVuY3Rpb24oZXYpIHsKICAgICAgcmV0dXJuIHJlaihldik7CiAgICB9OwogICAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTsKICAgIG9iamVjdFN0b3JlLmFkZCh3cml0ZU9iamVjdCk7CiAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0QWxsTWVzc2FnZXMoZGIpIHsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXYpIHsKICAgICAgdmFyIGN1cnNvciA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgIGlmIChjdXJzb3IpIHsKICAgICAgICByZXQucHVzaChjdXJzb3IudmFsdWUpOwogICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oZGIsIGxhc3RDdXJzb3JJZCkgewogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHZhciBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogIGlmIChvYmplY3RTdG9yZS5nZXRBbGwpIHsKICAgIHZhciBnZXRBbGxSZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0QWxsKGtleVJhbmdlVmFsdWUpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICAgIGdldEFsbFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiByZWooZXJyKTsKICAgICAgfTsKICAgICAgZ2V0QWxsUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICByZXMoZTExLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5DdXJzb3IoKSB7CiAgICB0cnkgewogICAgICBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpOwogICAgfQogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIHZhciBvcGVuQ3Vyc29yUmVxdWVzdCA9IG9wZW5DdXJzb3IoKTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHJlaihlcnIpOwogICAgfTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgaWYgKGN1cnNvci52YWx1ZS5pZCA8IGxhc3RDdXJzb3JJZCArIDEpIHsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXShsYXN0Q3Vyc29ySWQgKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgaWRzKSB7CiAgaWYgKGNoYW5uZWxTdGF0ZS5jbG9zZWQpIHsKICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pOwogIH0KICB2YXIgdHggPSBjaGFubmVsU3RhdGUuZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAicmVhZHdyaXRlIiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgcmV0dXJuIFByb21pc2UuYWxsKGlkcy5tYXAoZnVuY3Rpb24oaWQpIHsKICAgIHZhciBkZWxldGVSZXF1ZXN0ID0gb2JqZWN0U3RvcmVbImRlbGV0ZSJdKGlkKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgICAgZGVsZXRlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gcmVzKCk7CiAgICAgIH07CiAgICB9KTsKICB9KSk7Cn0KZnVuY3Rpb24gZ2V0T2xkTWVzc2FnZXMoZGIsIHR0bCkgewogIHZhciBvbGRlclRoZW4gPSBEYXRlLm5vdygpIC0gdHRsOwogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldikgewogICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgaWYgKGN1cnNvcikgewogICAgICAgIHZhciBtc2dPYmsgPSBjdXJzb3IudmFsdWU7CiAgICAgICAgaWYgKG1zZ09iay50aW1lIDwgb2xkZXJUaGVuKSB7CiAgICAgICAgICByZXQucHVzaChtc2dPYmspOwogICAgICAgICAgY3Vyc29yWyJjb250aW51ZSJdKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICAgIHJlcyhyZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSkgewogIHJldHVybiBnZXRPbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUuZGIsIGNoYW5uZWxTdGF0ZS5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24odG9vT2xkKSB7CiAgICByZXR1cm4gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgdG9vT2xkLm1hcChmdW5jdGlvbihtc2cpIHsKICAgICAgcmV0dXJuIG1zZy5pZDsKICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBjcmVhdGUyKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIHJldHVybiBjcmVhdGVEYXRhYmFzZShjaGFubmVsTmFtZSkudGhlbihmdW5jdGlvbihkYikgewogICAgdmFyIHN0YXRlMTIgPSB7CiAgICAgIGNsb3NlZDogZmFsc2UsCiAgICAgIGxhc3RDdXJzb3JJZDogMCwKICAgICAgY2hhbm5lbE5hbWUsCiAgICAgIG9wdGlvbnMsCiAgICAgIHV1aWQ6IHJhbmRvbVRva2VuKCksCiAgICAgIC8qKgogICAgICAgKiBlbWl0dGVkTWVzc2FnZXNJZHMKICAgICAgICogY29udGFpbnMgYWxsIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQgYmVmb3JlCiAgICAgICAqIEB0eXBlIHtPYmxpdmlvdXNTZXR9CiAgICAgICAqLwogICAgICBlTUlzOiBuZXcgT2JsaXZpb3VzU2V0KG9wdGlvbnMuaWRiLnR0bCAqIDIpLAogICAgICAvLyBlbnN1cmVzIHdlIGRvIG5vdCByZWFkIG1lc3NhZ2VzIGluIHBhcmFsbGVsCiAgICAgIHdyaXRlQmxvY2tQcm9taXNlOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsCiAgICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwsCiAgICAgIHJlYWRRdWV1ZVByb21pc2VzOiBbXSwKICAgICAgZGIKICAgIH07CiAgICBkYi5vbmNsb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHN0YXRlMTIuY2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKG9wdGlvbnMuaWRiLm9uY2xvc2UpIG9wdGlvbnMuaWRiLm9uY2xvc2UoKTsKICAgIH07CiAgICBfcmVhZExvb3Aoc3RhdGUxMik7CiAgICByZXR1cm4gc3RhdGUxMjsKICB9KTsKfQpmdW5jdGlvbiBfcmVhZExvb3Aoc3RhdGUxMikgewogIGlmIChzdGF0ZTEyLmNsb3NlZCkgcmV0dXJuOwogIHJlYWROZXdNZXNzYWdlcyhzdGF0ZTEyKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHNsZWVwKHN0YXRlMTIub3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCk7CiAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiBfcmVhZExvb3Aoc3RhdGUxMik7CiAgfSk7Cn0KZnVuY3Rpb24gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZTEyKSB7CiAgaWYgKG1zZ09iai51dWlkID09PSBzdGF0ZTEyLnV1aWQpIHJldHVybiBmYWxzZTsKICBpZiAoc3RhdGUxMi5lTUlzLmhhcyhtc2dPYmouaWQpKSByZXR1cm4gZmFsc2U7CiAgaWYgKG1zZ09iai5kYXRhLnRpbWUgPCBzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gcmVhZE5ld01lc3NhZ2VzKHN0YXRlMTIpIHsKICBpZiAoc3RhdGUxMi5jbG9zZWQpIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgaWYgKCFzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2spIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgcmV0dXJuIGdldE1lc3NhZ2VzSGlnaGVyVGhhbihzdGF0ZTEyLmRiLCBzdGF0ZTEyLmxhc3RDdXJzb3JJZCkudGhlbihmdW5jdGlvbihuZXdlck1lc3NhZ2VzKSB7CiAgICB2YXIgdXNlTWVzc2FnZXMgPSBuZXdlck1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbihtc2dPYmopIHsKICAgICAgcmV0dXJuICEhbXNnT2JqOwogICAgfSkubWFwKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAobXNnT2JqLmlkID4gc3RhdGUxMi5sYXN0Q3Vyc29ySWQpIHsKICAgICAgICBzdGF0ZTEyLmxhc3RDdXJzb3JJZCA9IG1zZ09iai5pZDsKICAgICAgfQogICAgICByZXR1cm4gbXNnT2JqOwogICAgfSkuZmlsdGVyKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICByZXR1cm4gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZTEyKTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obXNnT2JqQSwgbXNnT2JqQikgewogICAgICByZXR1cm4gbXNnT2JqQS50aW1lIC0gbXNnT2JqQi50aW1lOwogICAgfSk7CiAgICB1c2VNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAoc3RhdGUxMi5tZXNzYWdlc0NhbGxiYWNrKSB7CiAgICAgICAgc3RhdGUxMi5lTUlzLmFkZChtc2dPYmouaWQpOwogICAgICAgIHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjayhtc2dPYmouZGF0YSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDsKICB9KTsKfQpmdW5jdGlvbiBjbG9zZTIoY2hhbm5lbFN0YXRlKSB7CiAgY2hhbm5lbFN0YXRlLmNsb3NlZCA9IHRydWU7CiAgY2hhbm5lbFN0YXRlLmRiLmNsb3NlKCk7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UgPSBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiB3cml0ZU1lc3NhZ2UoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUudXVpZCwgbWVzc2FnZUpzb24pOwogIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICBpZiAocmFuZG9tSW50KDAsIDEwKSA9PT0gMCkgewogICAgICBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNoYW5uZWxTdGF0ZS53cml0ZUJsb2NrUHJvbWlzZTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgZm4sIHRpbWUpIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFja1RpbWUgPSB0aW1lOwogIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrID0gZm47CiAgcmVhZE5ld01lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7Cn0KZnVuY3Rpb24gY2FuQmVVc2VkMigpIHsKICByZXR1cm4gISFnZXRJZGIoKTsKfQpmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lMihvcHRpb25zKSB7CiAgcmV0dXJuIG9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwgKiAyOwp9CnZhciBtaWNyb1NlY29uZHMzLCBEQl9QUkVGSVgsIE9CSkVDVF9TVE9SRV9JRCwgVFJBTlNBQ1RJT05fU0VUVElOR1MsIHR5cGUyLCBJbmRleGVkREJNZXRob2Q7CnZhciBpbml0X2luZGV4ZWRfZGIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9zcmMoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgbWljcm9TZWNvbmRzMyA9IG1pY3JvU2Vjb25kczsKICAgIERCX1BSRUZJWCA9ICJwdWJrZXkuYnJvYWRjYXN0LWNoYW5uZWwtMC0iOwogICAgT0JKRUNUX1NUT1JFX0lEID0gIm1lc3NhZ2VzIjsKICAgIFRSQU5TQUNUSU9OX1NFVFRJTkdTID0gewogICAgICBkdXJhYmlsaXR5OiAicmVsYXhlZCIKICAgIH07CiAgICB0eXBlMiA9ICJpZGIiOwogICAgSW5kZXhlZERCTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTIsCiAgICAgIGNsb3NlOiBjbG9zZTIsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMiwKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMiwKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQyLAogICAgICB0eXBlOiB0eXBlMiwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTIsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzMwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcwpmdW5jdGlvbiBnZXRMb2NhbFN0b3JhZ2UoKSB7CiAgdmFyIGxvY2FsU3RvcmFnZTI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICB0cnkgewogICAgbG9jYWxTdG9yYWdlMiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgICBsb2NhbFN0b3JhZ2UyID0gd2luZG93WyJpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlIl0gfHwgd2luZG93LmxvY2FsU3RvcmFnZTsKICB9IGNhdGNoIChlMTEpIHsKICB9CiAgcmV0dXJuIGxvY2FsU3RvcmFnZTI7Cn0KZnVuY3Rpb24gc3RvcmFnZUtleShjaGFubmVsTmFtZSkgewogIHJldHVybiBLRVlfUFJFRklYICsgY2hhbm5lbE5hbWU7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UzKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBzbGVlcCgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBrZXkyID0gc3RvcmFnZUtleShjaGFubmVsU3RhdGUuY2hhbm5lbE5hbWUpOwogICAgICB2YXIgd3JpdGVPYmogPSB7CiAgICAgICAgdG9rZW46IHJhbmRvbVRva2VuKCksCiAgICAgICAgdGltZTogRGF0ZS5ub3coKSwKICAgICAgICBkYXRhOiBtZXNzYWdlSnNvbiwKICAgICAgICB1dWlkOiBjaGFubmVsU3RhdGUudXVpZAogICAgICB9OwogICAgICB2YXIgdmFsdWUyID0gSlNPTi5zdHJpbmdpZnkod3JpdGVPYmopOwogICAgICBnZXRMb2NhbFN0b3JhZ2UoKS5zZXRJdGVtKGtleTIsIHZhbHVlMik7CiAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICBldi5pbml0RXZlbnQoInN0b3JhZ2UiLCB0cnVlLCB0cnVlKTsKICAgICAgZXYua2V5ID0ga2V5MjsKICAgICAgZXYubmV3VmFsdWUgPSB2YWx1ZTI7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2KTsKICAgICAgcmVzKCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsTmFtZSwgZm4pIHsKICB2YXIga2V5MiA9IHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpOwogIHZhciBsaXN0ZW5lcjIgPSBmdW5jdGlvbiBsaXN0ZW5lcjMoZXYpIHsKICAgIGlmIChldi5rZXkgPT09IGtleTIpIHsKICAgICAgZm4oSlNPTi5wYXJzZShldi5uZXdWYWx1ZSkpOwogICAgfQogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwogIHJldHVybiBsaXN0ZW5lcjI7Cn0KZnVuY3Rpb24gcmVtb3ZlU3RvcmFnZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwp9CmZ1bmN0aW9uIGNyZWF0ZTMoY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgaWYgKCFjYW5CZVVzZWQzKCkpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbDogbG9jYWxzdG9yYWdlIGNhbm5vdCBiZSB1c2VkIik7CiAgfQogIHZhciB1dWlkID0gcmFuZG9tVG9rZW4oKTsKICB2YXIgZU1JcyA9IG5ldyBPYmxpdmlvdXNTZXQob3B0aW9ucy5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dCk7CiAgdmFyIHN0YXRlMTIgPSB7CiAgICBjaGFubmVsTmFtZSwKICAgIHV1aWQsCiAgICBlTUlzCiAgICAvLyBlbWl0dGVkTWVzc2FnZXNJZHMKICB9OwogIHN0YXRlMTIubGlzdGVuZXIgPSBhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsTmFtZSwgZnVuY3Rpb24obXNnT2JqKSB7CiAgICBpZiAoIXN0YXRlMTIubWVzc2FnZXNDYWxsYmFjaykgcmV0dXJuOwogICAgaWYgKG1zZ09iai51dWlkID09PSB1dWlkKSByZXR1cm47CiAgICBpZiAoIW1zZ09iai50b2tlbiB8fCBlTUlzLmhhcyhtc2dPYmoudG9rZW4pKSByZXR1cm47CiAgICBpZiAobXNnT2JqLmRhdGEudGltZSAmJiBtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUxMi5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuOwogICAgZU1Jcy5hZGQobXNnT2JqLnRva2VuKTsKICAgIHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjayhtc2dPYmouZGF0YSk7CiAgfSk7CiAgcmV0dXJuIHN0YXRlMTI7Cn0KZnVuY3Rpb24gY2xvc2UzKGNoYW5uZWxTdGF0ZSkgewogIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGNoYW5uZWxTdGF0ZS5saXN0ZW5lcik7Cn0KZnVuY3Rpb24gb25NZXNzYWdlMyhjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lID0gdGltZTsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDMoKSB7CiAgdmFyIGxzID0gZ2V0TG9jYWxTdG9yYWdlKCk7CiAgaWYgKCFscykgcmV0dXJuIGZhbHNlOwogIHRyeSB7CiAgICB2YXIga2V5MiA9ICJfX2Jyb2FkY2FzdGNoYW5uZWxfY2hlY2siOwogICAgbHMuc2V0SXRlbShrZXkyLCAid29ya3MiKTsKICAgIGxzLnJlbW92ZUl0ZW0oa2V5Mik7CiAgfSBjYXRjaCAoZTExKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUzKCkgewogIHZhciBkZWZhdWx0VGltZSA9IDEyMDsKICB2YXIgdXNlckFnZW50MiA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKICBpZiAodXNlckFnZW50Mi5pbmNsdWRlcygic2FmYXJpIikgJiYgIXVzZXJBZ2VudDIuaW5jbHVkZXMoImNocm9tZSIpKSB7CiAgICByZXR1cm4gZGVmYXVsdFRpbWUgKiAyOwogIH0KICByZXR1cm4gZGVmYXVsdFRpbWU7Cn0KdmFyIG1pY3JvU2Vjb25kczQsIEtFWV9QUkVGSVgsIHR5cGUzLCBMb2NhbHN0b3JhZ2VNZXRob2Q7CnZhciBpbml0X2xvY2Fsc3RvcmFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcyIoKSB7CiAgICBpbml0X3NyYygpOwogICAgaW5pdF9vcHRpb25zKCk7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczQgPSBtaWNyb1NlY29uZHM7CiAgICBLRVlfUFJFRklYID0gInB1YmtleS5icm9hZGNhc3RDaGFubmVsLSI7CiAgICB0eXBlMyA9ICJsb2NhbHN0b3JhZ2UiOwogICAgTG9jYWxzdG9yYWdlTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTMsCiAgICAgIGNsb3NlOiBjbG9zZTMsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMywKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMywKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQzLAogICAgICB0eXBlOiB0eXBlMywKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTMsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzNAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzCmZ1bmN0aW9uIGNyZWF0ZTQoY2hhbm5lbE5hbWUpIHsKICB2YXIgc3RhdGUxMiA9IHsKICAgIHRpbWU6IG1pY3JvU2Vjb25kczUoKSwKICAgIG5hbWU6IGNoYW5uZWxOYW1lLAogICAgbWVzc2FnZXNDYWxsYmFjazogbnVsbAogIH07CiAgU0lNVUxBVEVfQ0hBTk5FTFMuYWRkKHN0YXRlMTIpOwogIHJldHVybiBzdGF0ZTEyOwp9CmZ1bmN0aW9uIGNsb3NlNChjaGFubmVsU3RhdGUpIHsKICBTSU1VTEFURV9DSEFOTkVMU1siZGVsZXRlIl0oY2hhbm5lbFN0YXRlKTsKfQpmdW5jdGlvbiBwb3N0TWVzc2FnZTQoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2hhbm5lbEFycmF5ID0gQXJyYXkuZnJvbShTSU1VTEFURV9DSEFOTkVMUyk7CiAgICAgIGNoYW5uZWxBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoYW5uZWwpIHsKICAgICAgICBpZiAoY2hhbm5lbC5uYW1lID09PSBjaGFubmVsU3RhdGUubmFtZSAmJiAvLyBoYXMgc2FtZSBuYW1lCiAgICAgICAgY2hhbm5lbCAhPT0gY2hhbm5lbFN0YXRlICYmIC8vIG5vdCBvd24gY2hhbm5lbAogICAgICAgICEhY2hhbm5lbC5tZXNzYWdlc0NhbGxiYWNrICYmIC8vIGhhcyBzdWJzY3JpYmVycwogICAgICAgIGNoYW5uZWwudGltZSA8IG1lc3NhZ2VKc29uLnRpbWUpIHsKICAgICAgICAgIGNoYW5uZWwubWVzc2FnZXNDYWxsYmFjayhtZXNzYWdlSnNvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmVzKCk7CiAgICB9LCBTSU1VTEFURV9ERUxBWV9USU1FKTsKICB9KTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2U0KGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDQoKSB7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZTQoKSB7CiAgcmV0dXJuIFNJTVVMQVRFX0RFTEFZX1RJTUU7Cn0KdmFyIG1pY3JvU2Vjb25kczUsIHR5cGU0LCBTSU1VTEFURV9DSEFOTkVMUywgU0lNVUxBVEVfREVMQVlfVElNRSwgU2ltdWxhdGVNZXRob2Q7CnZhciBpbml0X3NpbXVsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvc2ltdWxhdGUuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHM1ID0gbWljcm9TZWNvbmRzOwogICAgdHlwZTQgPSAic2ltdWxhdGUiOwogICAgU0lNVUxBVEVfQ0hBTk5FTFMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgU0lNVUxBVEVfREVMQVlfVElNRSA9IDU7CiAgICBTaW11bGF0ZU1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGU0LAogICAgICBjbG9zZTogY2xvc2U0LAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTQsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTQsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkNCwKICAgICAgdHlwZTogdHlwZTQsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWU0LAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kLWNob29zZXIuanMKZnVuY3Rpb24gY2hvb3NlTWV0aG9kKG9wdGlvbnMpIHsKICB2YXIgY2hvb3NlTWV0aG9kcyA9IFtdLmNvbmNhdChvcHRpb25zLm1ldGhvZHMsIE1FVEhPRFMpLmZpbHRlcihCb29sZWFuKTsKICBpZiAob3B0aW9ucy50eXBlKSB7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAic2ltdWxhdGUiKSB7CiAgICAgIHJldHVybiBTaW11bGF0ZU1ldGhvZDsKICAgIH0KICAgIHZhciByZXQgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgPT09IG9wdGlvbnMudHlwZTsKICAgIH0pOwogICAgaWYgKCFyZXQpIHRocm93IG5ldyBFcnJvcigibWV0aG9kLXR5cGUgIiArIG9wdGlvbnMudHlwZSArICIgbm90IGZvdW5kIik7CiAgICBlbHNlIHJldHVybiByZXQ7CiAgfQogIGlmICghb3B0aW9ucy53ZWJXb3JrZXJTdXBwb3J0KSB7CiAgICBjaG9vc2VNZXRob2RzID0gY2hvb3NlTWV0aG9kcy5maWx0ZXIoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgIT09ICJpZGIiOwogICAgfSk7CiAgfQogIHZhciB1c2VNZXRob2QgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obWV0aG9kKSB7CiAgICByZXR1cm4gbWV0aG9kLmNhbkJlVXNlZCgpOwogIH0pOwogIGlmICghdXNlTWV0aG9kKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHVzYWJsZSBtZXRob2QgZm91bmQgaW4gIiArIEpTT04uc3RyaW5naWZ5KE1FVEhPRFMubWFwKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlOwogICAgfSkpKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVzZU1ldGhvZDsKICB9Cn0KdmFyIE1FVEhPRFM7CnZhciBpbml0X21ldGhvZF9jaG9vc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZC1jaG9vc2VyLmpzIigpIHsKICAgIGluaXRfbmF0aXZlKCk7CiAgICBpbml0X2luZGV4ZWRfZGIoKTsKICAgIGluaXRfbG9jYWxzdG9yYWdlKCk7CiAgICBpbml0X3NpbXVsYXRlKCk7CiAgICBNRVRIT0RTID0gWwogICAgICBOYXRpdmVNZXRob2QsCiAgICAgIC8vIGZhc3Rlc3QKICAgICAgSW5kZXhlZERCTWV0aG9kLAogICAgICBMb2NhbHN0b3JhZ2VNZXRob2QKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvYnJvYWRjYXN0LWNoYW5uZWwuanMKZnVuY3Rpb24gY2xlYXJOb2RlRm9sZGVyKG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgdmFyIG1ldGhvZCA9IGNob29zZU1ldGhvZChvcHRpb25zKTsKICBpZiAobWV0aG9kLnR5cGUgPT09ICJub2RlIikgewogICAgcmV0dXJuIG1ldGhvZC5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9GQUxTRTsKICB9Cn0KZnVuY3Rpb24gZW5mb3JjZU9wdGlvbnMob3B0aW9ucykgewogIEVORk9SQ0VEX09QVElPTlMgPSBvcHRpb25zOwp9CmZ1bmN0aW9uIF9wb3N0KGJyb2FkY2FzdENoYW5uZWwsIHR5cGU1LCBtc2cpIHsKICB2YXIgdGltZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogIHZhciBtc2dPYmogPSB7CiAgICB0aW1lLAogICAgdHlwZTogdHlwZTUsCiAgICBkYXRhOiBtc2cKICB9OwogIHZhciBhd2FpdFByZXBhcmUgPSBicm9hZGNhc3RDaGFubmVsLl9wcmVwUCA/IGJyb2FkY2FzdENoYW5uZWwuX3ByZXBQIDogUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbigpIHsKICAgIHZhciBzZW5kUHJvbWlzZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnBvc3RNZXNzYWdlKGJyb2FkY2FzdENoYW5uZWwuX3N0YXRlLCBtc2dPYmopOwogICAgYnJvYWRjYXN0Q2hhbm5lbC5fdU1QLmFkZChzZW5kUHJvbWlzZSk7CiAgICBzZW5kUHJvbWlzZVsiY2F0Y2giXSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBicm9hZGNhc3RDaGFubmVsLl91TVBbImRlbGV0ZSJdKHNlbmRQcm9taXNlKTsKICAgIH0pOwogICAgcmV0dXJuIHNlbmRQcm9taXNlOwogIH0pOwp9CmZ1bmN0aW9uIF9wcmVwYXJlQ2hhbm5lbChjaGFubmVsKSB7CiAgdmFyIG1heWJlUHJvbWlzZSA9IGNoYW5uZWwubWV0aG9kLmNyZWF0ZShjaGFubmVsLm5hbWUsIGNoYW5uZWwub3B0aW9ucyk7CiAgaWYgKGlzUHJvbWlzZTIobWF5YmVQcm9taXNlKSkgewogICAgY2hhbm5lbC5fcHJlcFAgPSBtYXliZVByb21pc2U7CiAgICBtYXliZVByb21pc2UudGhlbihmdW5jdGlvbihzOSkgewogICAgICBjaGFubmVsLl9zdGF0ZSA9IHM5OwogICAgfSk7CiAgfSBlbHNlIHsKICAgIGNoYW5uZWwuX3N0YXRlID0gbWF5YmVQcm9taXNlOwogIH0KfQpmdW5jdGlvbiBfaGFzTWVzc2FnZUxpc3RlbmVycyhjaGFubmVsKSB7CiAgaWYgKGNoYW5uZWwuX2FkZEVMLm1lc3NhZ2UubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7CiAgaWYgKGNoYW5uZWwuX2FkZEVMLmludGVybmFsLmxlbmd0aCA+IDApIHJldHVybiB0cnVlOwogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBfYWRkTGlzdGVuZXJPYmplY3QoY2hhbm5lbCwgdHlwZTUsIG9iaikgewogIGNoYW5uZWwuX2FkZEVMW3R5cGU1XS5wdXNoKG9iaik7CiAgX3N0YXJ0TGlzdGVuaW5nKGNoYW5uZWwpOwp9CmZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lck9iamVjdChjaGFubmVsLCB0eXBlNSwgb2JqKSB7CiAgY2hhbm5lbC5fYWRkRUxbdHlwZTVdID0gY2hhbm5lbC5fYWRkRUxbdHlwZTVdLmZpbHRlcihmdW5jdGlvbihvMTMpIHsKICAgIHJldHVybiBvMTMgIT09IG9iajsKICB9KTsKICBfc3RvcExpc3RlbmluZyhjaGFubmVsKTsKfQpmdW5jdGlvbiBfc3RhcnRMaXN0ZW5pbmcoY2hhbm5lbCkgewogIGlmICghY2hhbm5lbC5faUwgJiYgX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkpIHsKICAgIHZhciBsaXN0ZW5lckZuID0gZnVuY3Rpb24gbGlzdGVuZXJGbjIobXNnT2JqKSB7CiAgICAgIGNoYW5uZWwuX2FkZEVMW21zZ09iai50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyT2JqZWN0KSB7CiAgICAgICAgaWYgKG1zZ09iai50aW1lID49IGxpc3RlbmVyT2JqZWN0LnRpbWUpIHsKICAgICAgICAgIGxpc3RlbmVyT2JqZWN0LmZuKG1zZ09iai5kYXRhKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKICAgIHZhciB0aW1lID0gY2hhbm5lbC5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICBpZiAoY2hhbm5lbC5fcHJlcFApIHsKICAgICAgY2hhbm5lbC5fcHJlcFAudGhlbihmdW5jdGlvbigpIHsKICAgICAgICBjaGFubmVsLl9pTCA9IHRydWU7CiAgICAgICAgY2hhbm5lbC5tZXRob2Qub25NZXNzYWdlKGNoYW5uZWwuX3N0YXRlLCBsaXN0ZW5lckZuLCB0aW1lKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBjaGFubmVsLl9pTCA9IHRydWU7CiAgICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbGlzdGVuZXJGbiwgdGltZSk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIF9zdG9wTGlzdGVuaW5nKGNoYW5uZWwpIHsKICBpZiAoY2hhbm5lbC5faUwgJiYgIV9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpKSB7CiAgICBjaGFubmVsLl9pTCA9IGZhbHNlOwogICAgdmFyIHRpbWUgPSBjaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbnVsbCwgdGltZSk7CiAgfQp9CnZhciBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUywgbGFzdElkLCBCcm9hZGNhc3RDaGFubmVsMiwgRU5GT1JDRURfT1BUSU9OUzsKdmFyIGluaXRfYnJvYWRjYXN0X2NoYW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvYnJvYWRjYXN0LWNoYW5uZWwuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBpbml0X21ldGhvZF9jaG9vc2VyKCk7CiAgICBpbml0X29wdGlvbnMoKTsKICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIGxhc3RJZCA9IDA7CiAgICBCcm9hZGNhc3RDaGFubmVsMiA9IGZ1bmN0aW9uIEJyb2FkY2FzdENoYW5uZWwzKG5hbWUsIG9wdGlvbnMpIHsKICAgICAgdGhpcy5pZCA9IGxhc3RJZCsrOwogICAgICBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUy5hZGQodGhpcyk7CiAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgIGlmIChFTkZPUkNFRF9PUFRJT05TKSB7CiAgICAgICAgb3B0aW9ucyA9IEVORk9SQ0VEX09QVElPTlM7CiAgICAgIH0KICAgICAgdGhpcy5vcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgICAgIHRoaXMubWV0aG9kID0gY2hvb3NlTWV0aG9kKHRoaXMub3B0aW9ucyk7CiAgICAgIHRoaXMuX2lMID0gZmFsc2U7CiAgICAgIHRoaXMuX29uTUwgPSBudWxsOwogICAgICB0aGlzLl9hZGRFTCA9IHsKICAgICAgICBtZXNzYWdlOiBbXSwKICAgICAgICBpbnRlcm5hbDogW10KICAgICAgfTsKICAgICAgdGhpcy5fdU1QID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgdGhpcy5fYmVmQyA9IFtdOwogICAgICB0aGlzLl9wcmVwUCA9IG51bGw7CiAgICAgIF9wcmVwYXJlQ2hhbm5lbCh0aGlzKTsKICAgIH07CiAgICBCcm9hZGNhc3RDaGFubmVsMi5fcHVia2V5ID0gdHJ1ZTsKICAgIEJyb2FkY2FzdENoYW5uZWwyLnByb3RvdHlwZSA9IHsKICAgICAgcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uIHBvc3RNZXNzYWdlNShtc2cpIHsKICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZSgpOiBDYW5ub3QgcG9zdCBtZXNzYWdlIGFmdGVyIGNoYW5uZWwgaGFzIGNsb3NlZCAiICsgLyoqCiAgICAgICAgICAgKiBJbiB0aGUgcGFzdCB3aGVuIHRoaXMgZXJyb3IgYXBwZWFyZWQsIGl0IHdhcyByZWFsbHkgaGFyZCB0byBkZWJ1Zy4KICAgICAgICAgICAqIFNvIG5vdyB3ZSBsb2cgdGhlIG1zZyB0b2dldGhlciB3aXRoIHRoZSBlcnJvciBzbyBpdCBhdCBsZWFzdAogICAgICAgICAgICogZ2l2ZXMgc29tZSBjbHVlIGFib3V0IHdoZXJlIGluIHlvdXIgYXBwbGljYXRpb24gdGhpcyBoYXBwZW5zLgogICAgICAgICAgICovCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtc2cpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9wb3N0KHRoaXMsICJtZXNzYWdlIiwgbXNnKTsKICAgICAgfSwKICAgICAgcG9zdEludGVybmFsOiBmdW5jdGlvbiBwb3N0SW50ZXJuYWwobXNnKSB7CiAgICAgICAgcmV0dXJuIF9wb3N0KHRoaXMsICJpbnRlcm5hbCIsIG1zZyk7CiAgICAgIH0sCiAgICAgIHNldCBvbm1lc3NhZ2UoZm4pIHsKICAgICAgICB2YXIgdGltZSA9IHRoaXMubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgICAgIHZhciBsaXN0ZW5PYmogPSB7CiAgICAgICAgICB0aW1lLAogICAgICAgICAgZm4KICAgICAgICB9OwogICAgICAgIF9yZW1vdmVMaXN0ZW5lck9iamVjdCh0aGlzLCAibWVzc2FnZSIsIHRoaXMuX29uTUwpOwogICAgICAgIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuX29uTUwgPSBsaXN0ZW5PYmo7CiAgICAgICAgICBfYWRkTGlzdGVuZXJPYmplY3QodGhpcywgIm1lc3NhZ2UiLCBsaXN0ZW5PYmopOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZTUsIGZuKSB7CiAgICAgICAgdmFyIHRpbWUgPSB0aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgICAgICB2YXIgbGlzdGVuT2JqID0gewogICAgICAgICAgdGltZSwKICAgICAgICAgIGZuCiAgICAgICAgfTsKICAgICAgICBfYWRkTGlzdGVuZXJPYmplY3QodGhpcywgdHlwZTUsIGxpc3Rlbk9iaik7CiAgICAgIH0sCiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTUsIGZuKSB7CiAgICAgICAgdmFyIG9iaiA9IHRoaXMuX2FkZEVMW3R5cGU1XS5maW5kKGZ1bmN0aW9uKG9iajIpIHsKICAgICAgICAgIHJldHVybiBvYmoyLmZuID09PSBmbjsKICAgICAgICB9KTsKICAgICAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgdHlwZTUsIG9iaik7CiAgICAgIH0sCiAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZTUoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFNbImRlbGV0ZSJdKHRoaXMpOwogICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICB2YXIgYXdhaXRQcmVwYXJlID0gdGhpcy5fcHJlcFAgPyB0aGlzLl9wcmVwUCA6IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICAgICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgICB0aGlzLl9hZGRFTC5tZXNzYWdlID0gW107CiAgICAgICAgcmV0dXJuIGF3YWl0UHJlcGFyZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20oX3RoaXMuX3VNUCkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoX3RoaXMuX2JlZkMubWFwKGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHJldHVybiBmbigpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMubWV0aG9kLmNsb3NlKF90aGlzLl9zdGF0ZSk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGdldCB0eXBlKCkgewogICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC50eXBlOwogICAgICB9LAogICAgICBnZXQgaXNDbG9zZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VkOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9icm93c2VyLmpzCmZ1bmN0aW9uIGFkZEJyb3dzZXIoZm4pIHsKICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlID09PSAiZnVuY3Rpb24iICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkgewogICAgdmFyIG9sZENsb3NlID0gc2VsZi5jbG9zZS5iaW5kKHNlbGYpOwogICAgc2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgICByZXR1cm4gb2xkQ2xvc2UoKTsKICAgIH07CiAgfSBlbHNlIHsKICAgIGlmICh0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgfSwgdHJ1ZSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGZuKCk7CiAgICB9LCB0cnVlKTsKICB9Cn0KdmFyIGluaXRfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvYnJvd3Nlci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL25vZGUuanMKZnVuY3Rpb24gYWRkTm9kZShmbikgewogIHByb2Nlc3Mub24oImV4aXQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpOwogIH0pOwogIHByb2Nlc3Mub24oImJlZm9yZUV4aXQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwogIH0pOwogIHByb2Nlc3Mub24oIlNJR0lOVCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgpOwogICAgfSk7CiAgfSk7CiAgcHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLCBmdW5jdGlvbihlcnIpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGNvbnNvbGUudHJhY2UoZXJyKTsKICAgICAgcHJvY2Vzcy5leGl0KDEwMSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9ub2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9ub2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvaW5kZXguanMKZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmcoKSB7CiAgaWYgKHN0YXJ0ZWRMaXN0ZW5pbmcpIHsKICAgIHJldHVybjsKICB9CiAgc3RhcnRlZExpc3RlbmluZyA9IHRydWU7CiAgVVNFX01FVEhPRChydW5BbGwpOwp9CmZ1bmN0aW9uIGFkZDIoZm4pIHsKICBzdGFydExpc3RlbmluZygpOwogIGlmICh0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiTGlzdGVuZXIgaXMgbm8gZnVuY3Rpb24iKTsKICB9CiAgTElTVEVORVJTLmFkZChmbik7CiAgdmFyIGFkZFJldHVybiA9IHsKICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlMigpIHsKICAgICAgcmV0dXJuIExJU1RFTkVSU1siZGVsZXRlIl0oZm4pOwogICAgfSwKICAgIHJ1bjogZnVuY3Rpb24gcnVuKCkgewogICAgICBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICAgICAgcmV0dXJuIGZuKCk7CiAgICB9CiAgfTsKICByZXR1cm4gYWRkUmV0dXJuOwp9CmZ1bmN0aW9uIHJ1bkFsbCgpIHsKICB2YXIgcHJvbWlzZXMgPSBbXTsKICBMSVNURU5FUlMuZm9yRWFjaChmdW5jdGlvbihmbikgewogICAgcHJvbWlzZXMucHVzaChmbigpKTsKICAgIExJU1RFTkVSU1siZGVsZXRlIl0oZm4pOwogIH0pOwogIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7Cn0KZnVuY3Rpb24gcmVtb3ZlQWxsKCkgewogIExJU1RFTkVSUy5jbGVhcigpOwp9CmZ1bmN0aW9uIGdldFNpemUoKSB7CiAgcmV0dXJuIExJU1RFTkVSUy5zaXplOwp9CnZhciBpc05vZGUsIFVTRV9NRVRIT0QsIExJU1RFTkVSUywgc3RhcnRlZExpc3RlbmluZzsKdmFyIGluaXRfZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnJvd3NlcigpOwogICAgaW5pdF9ub2RlKCk7CiAgICBpc05vZGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiID8gcHJvY2VzcyA6IDApID09PSAiW29iamVjdCBwcm9jZXNzXSI7CiAgICBVU0VfTUVUSE9EID0gaXNOb2RlID8gYWRkTm9kZSA6IGFkZEJyb3dzZXI7CiAgICBMSVNURU5FUlMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgc3RhcnRlZExpc3RlbmluZyA9IGZhbHNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi11dGlsLmpzCmZ1bmN0aW9uIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsIGFjdGlvbikgewogIHZhciBtc2dKc29uID0gewogICAgY29udGV4dDogImxlYWRlciIsCiAgICBhY3Rpb24sCiAgICB0b2tlbjogbGVhZGVyRWxlY3Rvci50b2tlbgogIH07CiAgcmV0dXJuIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0SW50ZXJuYWwobXNnSnNvbik7Cn0KZnVuY3Rpb24gYmVMZWFkZXIobGVhZGVyRWxlY3RvcikgewogIGxlYWRlckVsZWN0b3IuaXNMZWFkZXIgPSB0cnVlOwogIGxlYWRlckVsZWN0b3IuX2hhc0xlYWRlciA9IHRydWU7CiAgdmFyIHVubG9hZEZuID0gYWRkMihmdW5jdGlvbigpIHsKICAgIHJldHVybiBsZWFkZXJFbGVjdG9yLmRpZSgpOwogIH0pOwogIGxlYWRlckVsZWN0b3IuX3VubC5wdXNoKHVubG9hZEZuKTsKICB2YXIgaXNMZWFkZXJMaXN0ZW5lciA9IGZ1bmN0aW9uIGlzTGVhZGVyTGlzdGVuZXIyKG1zZykgewogICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAiYXBwbHkiKSB7CiAgICAgIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICJ0ZWxsIik7CiAgICB9CiAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy5hY3Rpb24gPT09ICJ0ZWxsIiAmJiAhbGVhZGVyRWxlY3Rvci5fZHBMQykgewogICAgICBsZWFkZXJFbGVjdG9yLl9kcExDID0gdHJ1ZTsKICAgICAgbGVhZGVyRWxlY3Rvci5fZHBMKCk7CiAgICAgIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICJ0ZWxsIik7CiAgICB9CiAgfTsKICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBpc0xlYWRlckxpc3RlbmVyKTsKICBsZWFkZXJFbGVjdG9yLl9sc3Rucy5wdXNoKGlzTGVhZGVyTGlzdGVuZXIpOwogIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwp9CnZhciBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi11dGlsLmpzIigpIHsKICAgIGluaXRfZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24td2ViLWxvY2suanMKdmFyIExlYWRlckVsZWN0aW9uV2ViTG9jaywgTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRTsKdmFyIGluaXRfbGVhZGVyX2VsZWN0aW9uX3dlYl9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi13ZWItbG9jay5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwoKTsKICAgIExlYWRlckVsZWN0aW9uV2ViTG9jayA9IGZ1bmN0aW9uIExlYWRlckVsZWN0aW9uV2ViTG9jazIoYnJvYWRjYXN0Q2hhbm5lbCwgb3B0aW9ucykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBicm9hZGNhc3RDaGFubmVsOwogICAgICBicm9hZGNhc3RDaGFubmVsLl9iZWZDLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIF90aGlzLmRpZSgpOwogICAgICB9KTsKICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgdGhpcy5pc0RlYWQgPSBmYWxzZTsKICAgICAgdGhpcy50b2tlbiA9IHJhbmRvbVRva2VuKCk7CiAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICB0aGlzLl9kcEwgPSBmdW5jdGlvbigpIHsKICAgICAgfTsKICAgICAgdGhpcy5fZHBMQyA9IGZhbHNlOwogICAgICB0aGlzLl93S01DID0ge307CiAgICAgIHRoaXMubE4gPSAicHVia2V5LWJjfHwiICsgYnJvYWRjYXN0Q2hhbm5lbC5tZXRob2QudHlwZSArICJ8fCIgKyBicm9hZGNhc3RDaGFubmVsLm5hbWU7CiAgICB9OwogICAgTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSA9ICJMZWFkZXJFbGVjdGlvbldlYkxvY2suZGllKCkgY2FsbGVkIjsKICAgIExlYWRlckVsZWN0aW9uV2ViTG9jay5wcm90b3R5cGUgPSB7CiAgICAgIGhhc0xlYWRlcjogZnVuY3Rpb24gaGFzTGVhZGVyKCkgewogICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgIHJldHVybiBuYXZpZ2F0b3IubG9ja3MucXVlcnkoKS50aGVuKGZ1bmN0aW9uKGxvY2tzKSB7CiAgICAgICAgICB2YXIgcmVsZXZhbnRMb2NrcyA9IGxvY2tzLmhlbGQgPyBsb2Nrcy5oZWxkLmZpbHRlcihmdW5jdGlvbihsb2NrKSB7CiAgICAgICAgICAgIHJldHVybiBsb2NrLm5hbWUgPT09IF90aGlzMi5sTjsKICAgICAgICAgIH0pIDogW107CiAgICAgICAgICBpZiAocmVsZXZhbnRMb2NrcyAmJiByZWxldmFudExvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGF3YWl0TGVhZGVyc2hpcDogZnVuY3Rpb24gYXdhaXRMZWFkZXJzaGlwKCkgewogICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICAgIGlmICghdGhpcy5fd0xNUCkgewogICAgICAgICAgdGhpcy5fd0tNQy5jID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgdmFyIHJldHVyblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgICAgICAgICBfdGhpczMuX3dLTUMucmVzID0gcmVzOwogICAgICAgICAgICBfdGhpczMuX3dLTUMucmVqID0gcmVqOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLl93TE1QID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWplY3QpIHsKICAgICAgICAgICAgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QoX3RoaXMzLmxOLCB7CiAgICAgICAgICAgICAgc2lnbmFsOiBfdGhpczMuX3dLTUMuYy5zaWduYWwKICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgX3RoaXMzLl93S01DLmMgPSB2b2lkIDA7CiAgICAgICAgICAgICAgYmVMZWFkZXIoX3RoaXMzKTsKICAgICAgICAgICAgICByZXMoKTsKICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUHJvbWlzZTsKICAgICAgICAgICAgfSlbImNhdGNoIl0oZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlID09PSBMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFKSB7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChfdGhpczMuX3dLTUMucmVqKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzMy5fd0tNQy5yZWooZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX3dMTVA7CiAgICAgIH0sCiAgICAgIHNldCBvbmR1cGxpY2F0ZShfZm4pIHsKICAgICAgfSwKICAgICAgZGllOiBmdW5jdGlvbiBkaWUoKSB7CiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgICAgdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcjIpIHsKICAgICAgICAgIHJldHVybiBfdGhpczQuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGxpc3RlbmVyMik7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgICB0aGlzLl91bmwuZm9yRWFjaChmdW5jdGlvbih1Rm4pIHsKICAgICAgICAgIHJldHVybiB1Rm4ucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0RlYWQgPSB0cnVlOwogICAgICAgIGlmICh0aGlzLl93S01DLnJlcykgewogICAgICAgICAgdGhpcy5fd0tNQy5yZXMoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3dLTUMuYykgewogICAgICAgICAgdGhpcy5fd0tNQy5jLmFib3J0KG5ldyBFcnJvcihMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZSh0aGlzLCAiZGVhdGgiKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24uanMKZnVuY3Rpb24gX2F3YWl0TGVhZGVyc2hpcE9uY2UobGVhZGVyRWxlY3RvcikgewogIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICB2YXIgcmVzb2x2ZWQyID0gZmFsc2U7CiAgICBmdW5jdGlvbiBmaW5pc2goKSB7CiAgICAgIGlmIChyZXNvbHZlZDIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcmVzb2x2ZWQyID0gdHJ1ZTsKICAgICAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgd2hlbkRlYXRoTGlzdGVuZXIpOwogICAgICByZXModHJ1ZSk7CiAgICB9CiAgICBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgZmluaXNoKCk7CiAgICAgIH0KICAgIH0pOwogICAgdmFyIF90cnlPbkZhbGxCYWNrID0gZnVuY3Rpb24gdHJ5T25GYWxsQmFjaygpIHsKICAgICAgcmV0dXJuIHNsZWVwKGxlYWRlckVsZWN0b3IuX29wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0RlYWQgfHwgcmVzb2x2ZWQyKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgICBmaW5pc2goKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGxlYWRlckVsZWN0b3IuYXBwbHlPbmNlKHRydWUpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3RyeU9uRmFsbEJhY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBfdHJ5T25GYWxsQmFjaygpOwogICAgdmFyIHdoZW5EZWF0aExpc3RlbmVyID0gZnVuY3Rpb24gd2hlbkRlYXRoTGlzdGVuZXIyKG1zZykgewogICAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy5hY3Rpb24gPT09ICJkZWF0aCIpIHsKICAgICAgICBsZWFkZXJFbGVjdG9yLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIHdoZW5EZWF0aExpc3RlbmVyKTsKICAgIGxlYWRlckVsZWN0b3IuX2xzdG5zLnB1c2god2hlbkRlYXRoTGlzdGVuZXIpOwogIH0pOwp9CmZ1bmN0aW9uIGZpbGxPcHRpb25zV2l0aERlZmF1bHRzMihvcHRpb25zLCBjaGFubmVsKSB7CiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CiAgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpOwogIGlmICghb3B0aW9ucy5mYWxsYmFja0ludGVydmFsKSB7CiAgICBvcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwgPSAzZTM7CiAgfQogIGlmICghb3B0aW9ucy5yZXNwb25zZVRpbWUpIHsKICAgIG9wdGlvbnMucmVzcG9uc2VUaW1lID0gY2hhbm5lbC5tZXRob2QuYXZlcmFnZVJlc3BvbnNlVGltZShjaGFubmVsLm9wdGlvbnMpOwogIH0KICByZXR1cm4gb3B0aW9uczsKfQpmdW5jdGlvbiBjcmVhdGVMZWFkZXJFbGVjdGlvbihjaGFubmVsLCBvcHRpb25zKSB7CiAgaWYgKGNoYW5uZWwuX2xlYWRlckVsZWN0b3IpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbCBhbHJlYWR5IGhhcyBhIGxlYWRlci1lbGVjdG9yIik7CiAgfQogIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0czIob3B0aW9ucywgY2hhbm5lbCk7CiAgdmFyIGVsZWN0b3IgPSBzdXBwb3J0c1dlYkxvY2tBUEkoKSA/IG5ldyBMZWFkZXJFbGVjdGlvbldlYkxvY2soY2hhbm5lbCwgb3B0aW9ucykgOiBuZXcgTGVhZGVyRWxlY3Rpb24oY2hhbm5lbCwgb3B0aW9ucyk7CiAgY2hhbm5lbC5fYmVmQy5wdXNoKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGVsZWN0b3IuZGllKCk7CiAgfSk7CiAgY2hhbm5lbC5fbGVhZGVyRWxlY3RvciA9IGVsZWN0b3I7CiAgcmV0dXJuIGVsZWN0b3I7Cn0KdmFyIExlYWRlckVsZWN0aW9uOwp2YXIgaW5pdF9sZWFkZXJfZWxlY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fd2ViX2xvY2soKTsKICAgIExlYWRlckVsZWN0aW9uID0gZnVuY3Rpb24gTGVhZGVyRWxlY3Rpb24yKGJyb2FkY2FzdENoYW5uZWwsIG9wdGlvbnMpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gYnJvYWRjYXN0Q2hhbm5lbDsKICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgdGhpcy5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuaXNEZWFkID0gZmFsc2U7CiAgICAgIHRoaXMudG9rZW4gPSByYW5kb21Ub2tlbigpOwogICAgICB0aGlzLl9hcGxRID0gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogICAgICB0aGlzLl9hcGxRQyA9IDA7CiAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICB0aGlzLl9kcEwgPSBmdW5jdGlvbigpIHsKICAgICAgfTsKICAgICAgdGhpcy5fZHBMQyA9IGZhbHNlOwogICAgICB2YXIgaGFzTGVhZGVyTGlzdGVuZXIgPSBmdW5jdGlvbiBoYXNMZWFkZXJMaXN0ZW5lcjIobXNnKSB7CiAgICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIikgewogICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJkZWF0aCIpIHsKICAgICAgICAgICAgX3RoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJ0ZWxsIikgewogICAgICAgICAgICBfdGhpcy5faGFzTGVhZGVyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhc0xlYWRlckxpc3RlbmVyKTsKICAgICAgdGhpcy5fbHN0bnMucHVzaChoYXNMZWFkZXJMaXN0ZW5lcik7CiAgICB9OwogICAgTGVhZGVyRWxlY3Rpb24ucHJvdG90eXBlID0gewogICAgICBoYXNMZWFkZXI6IGZ1bmN0aW9uIGhhc0xlYWRlcjIoKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9oYXNMZWFkZXIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpcyBsZWFkZXIsCiAgICAgICAqIGZhbHNlIGlmIG5vdC4KICAgICAgICogQGFzeW5jCiAgICAgICAqLwogICAgICBhcHBseU9uY2U6IGZ1bmN0aW9uIGFwcGx5T25jZShpc0Zyb21GYWxsYmFja0ludGVydmFsKSB7CiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHJldHVybiBzbGVlcCgwLCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNEZWFkKSB7CiAgICAgICAgICByZXR1cm4gc2xlZXAoMCwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fYXBsUUMgPiAxKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fYXBsUTsKICAgICAgICB9CiAgICAgICAgdmFyIGFwcGx5UnVuID0gZnVuY3Rpb24gYXBwbHlSdW4yKCkgewogICAgICAgICAgaWYgKF90aGlzMi5pc0xlYWRlcikgewogICAgICAgICAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9UUlVFOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYSA9IGZhbHNlOwogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlOwogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUgPSBmdW5jdGlvbiBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZTIoKSB7CiAgICAgICAgICAgICAgc3RvcENyaXRlcmlhID0gdHJ1ZTsKICAgICAgICAgICAgICByZXMoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGhhbmRsZU1lc3NhZ2UgPSBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlMihtc2cpIHsKICAgICAgICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cudG9rZW4gIT0gX3RoaXMyLnRva2VuKSB7CiAgICAgICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJhcHBseSIpIHsKICAgICAgICAgICAgICAgIGlmIChtc2cudG9rZW4gPiBfdGhpczIudG9rZW4pIHsKICAgICAgICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJ0ZWxsIikgewogICAgICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUoKTsKICAgICAgICAgICAgICAgIF90aGlzMi5faGFzTGVhZGVyID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBfdGhpczIuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhbmRsZU1lc3NhZ2UpOwogICAgICAgICAgdmFyIHdhaXRGb3JBbnN3ZXJUaW1lID0gaXNGcm9tRmFsbGJhY2tJbnRlcnZhbCA/IF90aGlzMi5fb3B0aW9ucy5yZXNwb25zZVRpbWUgKiA0IDogX3RoaXMyLl9vcHRpb25zLnJlc3BvbnNlVGltZTsKICAgICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShfdGhpczIsICJhcHBseSIpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3NsZWVwKHdhaXRGb3JBbnN3ZXJUaW1lKSwgc3RvcENyaXRlcmlhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoKSk7CiAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UoX3RoaXMyLCAiYXBwbHkiKTsKICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3NsZWVwKHdhaXRGb3JBbnN3ZXJUaW1lKSwgc3RvcENyaXRlcmlhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoKSk7CiAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICB9KVsiY2F0Y2giXShmdW5jdGlvbigpIHsKICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzMi5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaGFuZGxlTWVzc2FnZSk7CiAgICAgICAgICAgIGlmICghc3RvcENyaXRlcmlhKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGJlTGVhZGVyKF90aGlzMikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9hcGxRQyA9IHRoaXMuX2FwbFFDICsgMTsKICAgICAgICB0aGlzLl9hcGxRID0gdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGFwcGx5UnVuKCk7CiAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzMi5fYXBsUUMgPSBfdGhpczIuX2FwbFFDIC0gMTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzMi5pc0xlYWRlcjsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgYXdhaXRMZWFkZXJzaGlwOiBmdW5jdGlvbiBhd2FpdExlYWRlcnNoaXAyKCkgewogICAgICAgIGlmICgKICAgICAgICAgIC8qIF9hd2FpdExlYWRlcnNoaXBQcm9taXNlICovCiAgICAgICAgICAhdGhpcy5fYUxQCiAgICAgICAgKSB7CiAgICAgICAgICB0aGlzLl9hTFAgPSBfYXdhaXRMZWFkZXJzaGlwT25jZSh0aGlzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2FMUDsKICAgICAgfSwKICAgICAgc2V0IG9uZHVwbGljYXRlKGZuKSB7CiAgICAgICAgdGhpcy5fZHBMID0gZm47CiAgICAgIH0sCiAgICAgIGRpZTogZnVuY3Rpb24gZGllMigpIHsKICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgICB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyMikgewogICAgICAgICAgcmV0dXJuIF90aGlzMy5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgbGlzdGVuZXIyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICAgIHRoaXMuX3VubC5mb3JFYWNoKGZ1bmN0aW9uKHVGbikgewogICAgICAgICAgcmV0dXJuIHVGbi5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgICBpZiAodGhpcy5pc0xlYWRlcikgewogICAgICAgICAgdGhpcy5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNEZWFkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UodGhpcywgImRlYXRoIik7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvaW5kZXguanMKdmFyIGluaXRfZXNicm93c2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnJvYWRjYXN0X2NoYW5uZWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMucGx1Z2lucy5qcwp2YXIgaW5pdF9kZWVzX2NvbW1zX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHM0KCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9lc2Jyb3dzZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5jbGFzc2VzLmRlZXNjb21tcy5qcwp2YXIgQnJvYWRjYXN0Q2hhbm5lbDQsIERlZXNDb21tczsKdmFyIGluaXRfZGVlc19jb21tc19jbGFzc2VzX2RlZXNjb21tcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5jbGFzc2VzLmRlZXNjb21tcy5qcyIoKSB7CiAgICBpbml0X2RlZXNfY29tbXNfcGx1Z2lucygpOwogICAgQnJvYWRjYXN0Q2hhbm5lbDQgPSBnbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWw7CiAgICBpZiAoIUJyb2FkY2FzdENoYW5uZWw0KSB7CiAgICAgIEJyb2FkY2FzdENoYW5uZWw0ID0gQnJvYWRjYXN0Q2hhbm5lbDI7CiAgICB9CiAgICBEZWVzQ29tbXMgPSBjbGFzcyB7CiAgICAgIC8vIHJlY2VpdmluZyBtZXNzYWdlcwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbDQoImRlZXMtY29tbXMiKTsKICAgICAgICB0aGlzLnR5cGVkcm91dGVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkUm91dGVyKCk7CiAgICAgICAgdGhpcy50eXBlZHRhcmdldCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFRhcmdldCh7CiAgICAgICAgICBwb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOiBhc3luYyAobWVzc2FnZUFyZykgPT4gewogICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2VBcmcpOwogICAgICAgICAgfSwKICAgICAgICAgIHR5cGVkUm91dGVyUmVmOiB0aGlzLnR5cGVkcm91dGVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBldmVudEFyZy5tZXRob2QgPyBldmVudEFyZyA6IGV2ZW50QXJnLmRhdGE7CiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtZXNzYWdlMikpOwogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnR5cGVkcm91dGVyLnJvdXRlQW5kQWRkUmVzcG9uc2UobWVzc2FnZTIsIHsgc2tpcEhvb2tzOiB0cnVlIH0pOwogICAgICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhIHR5cGVkcmVxdWVzdCB3aXRoIHRoaXMgY2xhc3NlcyBwb3N0TWVzc2FnZSBhcyBwb3N0TWV0aG9kCiAgICAgICAqLwogICAgICBjcmVhdGVUeXBlZFJlcXVlc3QobWV0aG9kTmFtZSkgewogICAgICAgIGNvbnN0IHR5cGVkcmVxdWVzdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJlcXVlc3QodGhpcy50eXBlZHRhcmdldCwgbWV0aG9kTmFtZSk7CiAgICAgICAgcmV0dXJuIHR5cGVkcmVxdWVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcG9zdHMgYSB0eXBlZHJlcXVlc3RtZXNzYWdlCiAgICAgICAqLwogICAgICBhc3luYyBwb3N0TWVzc2FnZShtZXNzYWdlQXJnKSB7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2VBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdWJzY3JpYmUgdG8gbWVzc2FnZXMKICAgICAgICovCiAgICAgIGFzeW5jIGNyZWF0ZVR5cGVkSGFuZGxlcihtZXRob2RBcmcsIGhhbmRsZXJGdW5jdGlvbikgewogICAgICAgIHRoaXMudHlwZWRyb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIobWV0aG9kQXJnLCBoYW5kbGVyRnVuY3Rpb24pKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE2LCB7CiAgRGVlc0NvbW1zOiAoKSA9PiBEZWVzQ29tbXMKfSk7CnZhciBpbml0X2Rpc3RfdHMxNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2NvbW1zX2NsYXNzZXNfZGVlc2NvbW1zKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMKdmFyIHJlcXVpcmVfY29tbW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSAidW5kZWZpbmVkIiB8fCBzdWJqZWN0ID09PSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3QzKHN1YmplY3QpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSAib2JqZWN0IiAmJiBzdWJqZWN0ICE9PSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gdG9BcnJheTMoc2VxdWVuY2UpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VxdWVuY2UpKSByZXR1cm4gc2VxdWVuY2U7CiAgICAgIGVsc2UgaWYgKGlzTm90aGluZyhzZXF1ZW5jZSkpIHJldHVybiBbXTsKICAgICAgcmV0dXJuIFtzZXF1ZW5jZV07CiAgICB9CiAgICBmdW5jdGlvbiBleHRlbmQzKHRhcmdldCwgc291cmNlKSB7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwga2V5Miwgc291cmNlS2V5czsKICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgIGtleTIgPSBzb3VyY2VLZXlzW2luZGV4Ml07CiAgICAgICAgICB0YXJnZXRba2V5Ml0gPSBzb3VyY2Vba2V5Ml07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBlYXQzKHN0cmluZzMsIGNvdW50MikgewogICAgICB2YXIgcmVzdWx0ID0gIiIsIGN5Y2xlOwogICAgICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDI7IGN5Y2xlICs9IDEpIHsKICAgICAgICByZXN1bHQgKz0gc3RyaW5nMzsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyMikgewogICAgICByZXR1cm4gbnVtYmVyMiA9PT0gMCAmJiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBudW1iZXIyOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMuaXNOb3RoaW5nID0gaXNOb3RoaW5nOwogICAgbW9kdWxlLmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDM7CiAgICBtb2R1bGUuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTM7CiAgICBtb2R1bGUuZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQzOwogICAgbW9kdWxlLmV4cG9ydHMuaXNOZWdhdGl2ZVplcm8gPSBpc05lZ2F0aXZlWmVybzsKICAgIG1vZHVsZS5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMKdmFyIHJlcXVpcmVfZXhjZXB0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgZnVuY3Rpb24gWUFNTEV4Y2VwdGlvbihyZWFzb24sIG1hcmsyKSB7CiAgICAgIEVycm9yLmNhbGwodGhpcyk7CiAgICAgIHRoaXMubmFtZSA9ICJZQU1MRXhjZXB0aW9uIjsKICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247CiAgICAgIHRoaXMubWFyayA9IG1hcmsyOwogICAgICB0aGlzLm1lc3NhZ2UgPSAodGhpcy5yZWFzb24gfHwgIih1bmtub3duIHJlYXNvbikiKSArICh0aGlzLm1hcmsgPyAiICIgKyB0aGlzLm1hcmsudG9TdHJpbmcoKSA6ICIiKTsKICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrIHx8ICIiOwogICAgICB9CiAgICB9CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICAgIFlBTUxFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbjsKICAgIFlBTUxFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmczKGNvbXBhY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9IHRoaXMubmFtZSArICI6ICI7CiAgICAgIHJlc3VsdCArPSB0aGlzLnJlYXNvbiB8fCAiKHVua25vd24gcmVhc29uKSI7CiAgICAgIGlmICghY29tcGFjdCAmJiB0aGlzLm1hcmspIHsKICAgICAgICByZXN1bHQgKz0gIiAiICsgdGhpcy5tYXJrLnRvU3RyaW5nKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFlBTUxFeGNlcHRpb247CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzCnZhciByZXF1aXJlX21hcmsgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL21hcmsuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICBmdW5jdGlvbiBNYXJrKG5hbWUsIGJ1ZmZlcjIsIHBvc2l0aW9uMywgbGluZSwgY29sdW1uKSB7CiAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyMjsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5saW5lID0gbGluZTsKICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB9CiAgICBNYXJrLnByb3RvdHlwZS5nZXRTbmlwcGV0ID0gZnVuY3Rpb24gZ2V0U25pcHBldChpbmRlbnQzLCBtYXhMZW5ndGgpIHsKICAgICAgdmFyIGhlYWQyLCBzdGFydCwgdGFpbCwgZW5kMywgc25pcHBldDsKICAgICAgaWYgKCF0aGlzLmJ1ZmZlcikgcmV0dXJuIG51bGw7CiAgICAgIGluZGVudDMgPSBpbmRlbnQzIHx8IDQ7CiAgICAgIG1heExlbmd0aCA9IG1heExlbmd0aCB8fCA3NTsKICAgICAgaGVhZDIgPSAiIjsKICAgICAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmICJcMFxyXG5ceDg1XHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChzdGFydCAtIDEpKSA9PT0gLTEpIHsKICAgICAgICBzdGFydCAtPSAxOwogICAgICAgIGlmICh0aGlzLnBvc2l0aW9uIC0gc3RhcnQgPiBtYXhMZW5ndGggLyAyIC0gMSkgewogICAgICAgICAgaGVhZDIgPSAiIC4uLiAiOwogICAgICAgICAgc3RhcnQgKz0gNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICB0YWlsID0gIiI7CiAgICAgIGVuZDMgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoZW5kMyA8IHRoaXMuYnVmZmVyLmxlbmd0aCAmJiAiXDBcclxuXHg4NVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoZW5kMykpID09PSAtMSkgewogICAgICAgIGVuZDMgKz0gMTsKICAgICAgICBpZiAoZW5kMyAtIHRoaXMucG9zaXRpb24gPiBtYXhMZW5ndGggLyAyIC0gMSkgewogICAgICAgICAgdGFpbCA9ICIgLi4uICI7CiAgICAgICAgICBlbmQzIC09IDU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQzKTsKICAgICAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoIiAiLCBpbmRlbnQzKSArIGhlYWQyICsgc25pcHBldCArIHRhaWwgKyAiXG4iICsgY29tbW9uLnJlcGVhdCgiICIsIGluZGVudDMgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkMi5sZW5ndGgpICsgIl4iOwogICAgfTsKICAgIE1hcmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmczKGNvbXBhY3QpIHsKICAgICAgdmFyIHNuaXBwZXQsIHdoZXJlID0gIiI7CiAgICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgICB3aGVyZSArPSAnaW4gIicgKyB0aGlzLm5hbWUgKyAnIiAnOwogICAgICB9CiAgICAgIHdoZXJlICs9ICJhdCBsaW5lICIgKyAodGhpcy5saW5lICsgMSkgKyAiLCBjb2x1bW4gIiArICh0aGlzLmNvbHVtbiArIDEpOwogICAgICBpZiAoIWNvbXBhY3QpIHsKICAgICAgICBzbmlwcGV0ID0gdGhpcy5nZXRTbmlwcGV0KCk7CiAgICAgICAgaWYgKHNuaXBwZXQpIHsKICAgICAgICAgIHdoZXJlICs9ICI6XG4iICsgc25pcHBldDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHdoZXJlOwogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gTWFyazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMKdmFyIHJlcXVpcmVfdHlwZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TID0gWwogICAgICAia2luZCIsCiAgICAgICJyZXNvbHZlIiwKICAgICAgImNvbnN0cnVjdCIsCiAgICAgICJpbnN0YW5jZU9mIiwKICAgICAgInByZWRpY2F0ZSIsCiAgICAgICJyZXByZXNlbnQiLAogICAgICAiZGVmYXVsdFN0eWxlIiwKICAgICAgInN0eWxlQWxpYXNlcyIKICAgIF07CiAgICB2YXIgWUFNTF9OT0RFX0tJTkRTID0gWwogICAgICAic2NhbGFyIiwKICAgICAgInNlcXVlbmNlIiwKICAgICAgIm1hcHBpbmciCiAgICBdOwogICAgZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXA3KSB7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1hcDcgIT09IG51bGwpIHsKICAgICAgICBPYmplY3Qua2V5cyhtYXA3KS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlKSB7CiAgICAgICAgICBtYXA3W3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIFR5cGUyKHRhZywgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uICInICsgbmFtZSArICciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInICsgdGFnICsgJyIgWUFNTCB0eXBlLicpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMudGFnID0gdGFnOwogICAgICB0aGlzLmtpbmQgPSBvcHRpb25zWyJraW5kIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXNvbHZlID0gb3B0aW9uc1sicmVzb2x2ZSJdIHx8IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbImNvbnN0cnVjdCJdIHx8IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfTsKICAgICAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9uc1siaW5zdGFuY2VPZiJdIHx8IG51bGw7CiAgICAgIHRoaXMucHJlZGljYXRlID0gb3B0aW9uc1sicHJlZGljYXRlIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zWyJyZXByZXNlbnQiXSB8fCBudWxsOwogICAgICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbImRlZmF1bHRTdHlsZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWyJzdHlsZUFsaWFzZXMiXSB8fCBudWxsKTsKICAgICAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCAiJyArIHRoaXMua2luZCArICciIGlzIHNwZWNpZmllZCBmb3IgIicgKyB0YWcgKyAnIiBZQU1MIHR5cGUuJyk7CiAgICAgIH0KICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gVHlwZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMKdmFyIHJlcXVpcmVfc2NoZW1hID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSwgcmVzdWx0KSB7CiAgICAgIHZhciBleGNsdWRlID0gW107CiAgICAgIHNjaGVtYS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oaW5jbHVkZWRTY2hlbWEpIHsKICAgICAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTsKICAgICAgfSk7CiAgICAgIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRUeXBlKSB7CiAgICAgICAgcmVzdWx0LmZvckVhY2goZnVuY3Rpb24ocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7CiAgICAgICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmIHByZXZpb3VzVHlwZS5raW5kID09PSBjdXJyZW50VHlwZS5raW5kKSB7CiAgICAgICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbih0eXBlNSwgaW5kZXgyKSB7CiAgICAgICAgcmV0dXJuIGV4Y2x1ZGUuaW5kZXhPZihpbmRleDIpID09PSAtMTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBjb21waWxlTWFwKCkgewogICAgICB2YXIgcmVzdWx0ID0gewogICAgICAgIHNjYWxhcjoge30sCiAgICAgICAgc2VxdWVuY2U6IHt9LAogICAgICAgIG1hcHBpbmc6IHt9LAogICAgICAgIGZhbGxiYWNrOiB7fQogICAgICB9LCBpbmRleDIsIGxlbmd0aDsKICAgICAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZTUpIHsKICAgICAgICByZXN1bHRbdHlwZTUua2luZF1bdHlwZTUudGFnXSA9IHJlc3VsdFsiZmFsbGJhY2siXVt0eXBlNS50YWddID0gdHlwZTU7CiAgICAgIH0KICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgYXJndW1lbnRzW2luZGV4Ml0uZm9yRWFjaChjb2xsZWN0VHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIFNjaGVtYTIoZGVmaW5pdGlvbjMpIHsKICAgICAgdGhpcy5pbmNsdWRlID0gZGVmaW5pdGlvbjMuaW5jbHVkZSB8fCBbXTsKICAgICAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24zLmltcGxpY2l0IHx8IFtdOwogICAgICB0aGlzLmV4cGxpY2l0ID0gZGVmaW5pdGlvbjMuZXhwbGljaXQgfHwgW107CiAgICAgIHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlNSkgewogICAgICAgIGlmICh0eXBlNS5sb2FkS2luZCAmJiB0eXBlNS5sb2FkS2luZCAhPT0gInNjYWxhciIpIHsKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmNvbXBpbGVkSW1wbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAiaW1wbGljaXQiLCBbXSk7CiAgICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICJleHBsaWNpdCIsIFtdKTsKICAgICAgdGhpcy5jb21waWxlZFR5cGVNYXAgPSBjb21waWxlTWFwKHRoaXMuY29tcGlsZWRJbXBsaWNpdCwgdGhpcy5jb21waWxlZEV4cGxpY2l0KTsKICAgIH0KICAgIFNjaGVtYTIuREVGQVVMVCA9IG51bGw7CiAgICBTY2hlbWEyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYSgpIHsKICAgICAgdmFyIHNjaGVtYXMsIHR5cGVzOwogICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBzY2hlbWFzID0gU2NoZW1hMi5ERUZBVUxUOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBzY2hlbWFzID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMV07CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBzY2hlbWFzID0gY29tbW9uLnRvQXJyYXkoc2NoZW1hcyk7CiAgICAgIHR5cGVzID0gY29tbW9uLnRvQXJyYXkodHlwZXMpOwogICAgICBpZiAoIXNjaGVtYXMuZXZlcnkoZnVuY3Rpb24oc2NoZW1hKSB7CiAgICAgICAgcmV0dXJuIHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYTI7CiAgICAgIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlcy5ldmVyeShmdW5jdGlvbih0eXBlNSkgewogICAgICAgIHJldHVybiB0eXBlNSBpbnN0YW5jZW9mIFR5cGUyOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTY2hlbWEyKHsKICAgICAgICBpbmNsdWRlOiBzY2hlbWFzLAogICAgICAgIGV4cGxpY2l0OiB0eXBlcwogICAgICB9KTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcwp2YXIgcmVxdWlyZV9zdHIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6ICIiOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzCnZhciByZXF1aXJlX3NlcSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6c2VxIiwgewogICAgICBraW5kOiAic2VxdWVuY2UiLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcwp2YXIgcmVxdWlyZV9tYXAgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWFwLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMKdmFyIHJlcXVpcmVfZmFpbHNhZmUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3N0cigpLAogICAgICAgIHJlcXVpcmVfc2VxKCksCiAgICAgICAgcmVxdWlyZV9tYXAoKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcwp2YXIgcmVxdWlyZV9udWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBtYXgzID0gZGF0YS5sZW5ndGg7CiAgICAgIHJldHVybiBtYXgzID09PSAxICYmIGRhdGEgPT09ICJ+IiB8fCBtYXgzID09PSA0ICYmIChkYXRhID09PSAibnVsbCIgfHwgZGF0YSA9PT0gIk51bGwiIHx8IGRhdGEgPT09ICJOVUxMIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc051bGwob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sTnVsbCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sTnVsbCwKICAgICAgcHJlZGljYXRlOiBpc051bGwsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGNhbm9uaWNhbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIn4iOwogICAgICAgIH0sCiAgICAgICAgbG93ZXJjYXNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAibnVsbCI7CiAgICAgICAgfSwKICAgICAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJOVUxMIjsKICAgICAgICB9LAogICAgICAgIGNhbWVsY2FzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIk51bGwiOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Jvb2wuanMKdmFyIHJlcXVpcmVfYm9vbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJ0cnVlIiB8fCBkYXRhID09PSAiVHJ1ZSIgfHwgZGF0YSA9PT0gIlRSVUUiKSB8fCBtYXgzID09PSA1ICYmIChkYXRhID09PSAiZmFsc2UiIHx8IGRhdGEgPT09ICJGYWxzZSIgfHwgZGF0YSA9PT0gIkZBTFNFIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAidHJ1ZSIgfHwgZGF0YSA9PT0gIlRydWUiIHx8IGRhdGEgPT09ICJUUlVFIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBCb29sZWFuXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbiwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbiwKICAgICAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGxvd2VyY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gInRydWUiIDogImZhbHNlIjsKICAgICAgICB9LAogICAgICAgIHVwcGVyY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gIlRSVUUiIDogIkZBTFNFIjsKICAgICAgICB9LAogICAgICAgIGNhbWVsY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gIlRydWUiIDogIkZhbHNlIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9pbnQuanMKdmFyIHJlcXVpcmVfaW50ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gaXNIZXhDb2RlKGMxMSkgewogICAgICByZXR1cm4gNDggPD0gYzExICYmIGMxMSA8PSA1NyB8fCA2NSA8PSBjMTEgJiYgYzExIDw9IDcwIHx8IDk3IDw9IGMxMSAmJiBjMTEgPD0gMTAyOwogICAgfQogICAgZnVuY3Rpb24gaXNPY3RDb2RlKGMxMSkgewogICAgICByZXR1cm4gNDggPD0gYzExICYmIGMxMSA8PSA1NTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRGVjQ29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTc7CiAgICB9CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgbWF4MyA9IGRhdGEubGVuZ3RoLCBpbmRleDIgPSAwLCBoYXNEaWdpdHMgPSBmYWxzZSwgY2g7CiAgICAgIGlmICghbWF4MykgcmV0dXJuIGZhbHNlOwogICAgICBjaCA9IGRhdGFbaW5kZXgyXTsKICAgICAgaWYgKGNoID09PSAiLSIgfHwgY2ggPT09ICIrIikgewogICAgICAgIGNoID0gZGF0YVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgaWYgKGNoID09PSAiMCIpIHsKICAgICAgICBpZiAoaW5kZXgyICsgMSA9PT0gbWF4MykgcmV0dXJuIHRydWU7CiAgICAgICAgY2ggPSBkYXRhWysraW5kZXgyXTsKICAgICAgICBpZiAoY2ggPT09ICJiIikgewogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICAgIGlmIChjaCA9PT0gIl8iKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGNoICE9PSAiMCIgJiYgY2ggIT09ICIxIikgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT09ICJ4IikgewogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICAgIGlmIChjaCA9PT0gIl8iKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCFpc0hleENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4MikpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAiXyI7CiAgICAgICAgfQogICAgICAgIGZvciAoOyBpbmRleDIgPCBtYXgzOyBpbmRleDIrKykgewogICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgyKSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICJfIjsKICAgICAgfQogICAgICBpZiAoY2ggPT09ICJfIikgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICBjaCA9IGRhdGFbaW5kZXgyXTsKICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgaWYgKGNoID09PSAiOiIpIGJyZWFrOwogICAgICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleDIpKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSAiXyIpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGNoICE9PSAiOiIpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gL14oOlswLTVdP1swLTldKSskLy50ZXN0KGRhdGEuc2xpY2UoaW5kZXgyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7CiAgICAgIHZhciB2YWx1ZTIgPSBkYXRhLCBzaWduID0gMSwgY2gsIGJhc2UsIGRpZ2l0cyA9IFtdOwogICAgICBpZiAodmFsdWUyLmluZGV4T2YoIl8iKSAhPT0gLTEpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXy9nLCAiIik7CiAgICAgIH0KICAgICAgY2ggPSB2YWx1ZTJbMF07CiAgICAgIGlmIChjaCA9PT0gIi0iIHx8IGNoID09PSAiKyIpIHsKICAgICAgICBpZiAoY2ggPT09ICItIikgc2lnbiA9IC0xOwogICAgICAgIHZhbHVlMiA9IHZhbHVlMi5zbGljZSgxKTsKICAgICAgICBjaCA9IHZhbHVlMlswXTsKICAgICAgfQogICAgICBpZiAodmFsdWUyID09PSAiMCIpIHJldHVybiAwOwogICAgICBpZiAoY2ggPT09ICIwIikgewogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJiIikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIuc2xpY2UoMiksIDIpOwogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJ4IikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDE2KTsKICAgICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlMiwgOCk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMi5pbmRleE9mKCI6IikgIT09IC0xKSB7CiAgICAgICAgdmFsdWUyLnNwbGl0KCI6IikuZm9yRWFjaChmdW5jdGlvbih2NSkgewogICAgICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VJbnQodjUsIDEwKSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsdWUyID0gMDsKICAgICAgICBiYXNlID0gMTsKICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbihkNikgewogICAgICAgICAgdmFsdWUyICs9IGQ2ICogYmFzZTsKICAgICAgICAgIGJhc2UgKj0gNjA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBOdW1iZXJdIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOmludCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlciwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlciwKICAgICAgcHJlZGljYXRlOiBpc0ludGVnZXIsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGJpbmFyeTogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMGIiICsgb2JqLnRvU3RyaW5nKDIpIDogIi0wYiIgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7CiAgICAgICAgfSwKICAgICAgICBvY3RhbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMCIgKyBvYmoudG9TdHJpbmcoOCkgOiAiLTAiICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOwogICAgICAgIH0sCiAgICAgICAgZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTsKICAgICAgICB9LAogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8KICAgICAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMHgiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogIi0weCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWZhdWx0U3R5bGU6ICJkZWNpbWFsIiwKICAgICAgc3R5bGVBbGlhc2VzOiB7CiAgICAgICAgYmluYXJ5OiBbMiwgImJpbiJdLAogICAgICAgIG9jdGFsOiBbOCwgIm9jdCJdLAogICAgICAgIGRlY2ltYWw6IFsxMCwgImRlYyJdLAogICAgICAgIGhleGFkZWNpbWFsOiBbMTYsICJoZXgiXQogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMKdmFyIHJlcXVpcmVfZmxvYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKAogICAgICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2VycwogICAgICAiXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qfFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIgogICAgKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sRmxvYXQoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8IC8vIFF1aWNrIGhhY2sgdG8gbm90IGFsbG93IGludGVnZXJzIGVuZCB3aXRoIGBfYAogICAgICAvLyBQcm9iYWJseSBzaG91bGQgdXBkYXRlIHJlZ2V4cCAmIGNoZWNrIHNwZWVkCiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gIl8iKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEZsb2F0KGRhdGEpIHsKICAgICAgdmFyIHZhbHVlMiwgc2lnbiwgYmFzZSwgZGlnaXRzOwogICAgICB2YWx1ZTIgPSBkYXRhLnJlcGxhY2UoL18vZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHNpZ24gPSB2YWx1ZTJbMF0gPT09ICItIiA/IC0xIDogMTsKICAgICAgZGlnaXRzID0gW107CiAgICAgIGlmICgiKy0iLmluZGV4T2YodmFsdWUyWzBdKSA+PSAwKSB7CiAgICAgICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDEpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZTIgPT09ICIuaW5mIikgewogICAgICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOwogICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIi5uYW4iKSB7CiAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgfSBlbHNlIGlmICh2YWx1ZTIuaW5kZXhPZigiOiIpID49IDApIHsKICAgICAgICB2YWx1ZTIuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKHY1KSB7CiAgICAgICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHY1LCAxMCkpOwogICAgICAgIH0pOwogICAgICAgIHZhbHVlMiA9IDA7CiAgICAgICAgYmFzZSA9IDE7CiAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24oZDYpIHsKICAgICAgICAgIHZhbHVlMiArPSBkNiAqIGJhc2U7CiAgICAgICAgICBiYXNlICo9IDYwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzaWduICogdmFsdWUyOwogICAgICB9CiAgICAgIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIHZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvOwogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHsKICAgICAgdmFyIHJlczsKICAgICAgaWYgKGlzTmFOKG9iamVjdCkpIHsKICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5uYW4iOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuTkFOIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLk5hTiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuaW5mIjsKICAgICAgICAgIGNhc2UgInVwcGVyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5JbmYiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkgewogICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLS5pbmYiOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICItLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi0uSW5mIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gIi0wLjAiOwogICAgICB9CiAgICAgIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7CiAgICAgIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCJlIiwgIi5lIikgOiByZXM7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IE51bWJlcl0iICYmIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LAogICAgICBwcmVkaWNhdGU6IGlzRmxvYXQsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LAogICAgICBkZWZhdWx0U3R5bGU6ICJsb3dlcmNhc2UiCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzCnZhciByZXF1aXJlX2pzb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9mYWlsc2FmZSgpCiAgICAgIF0sCiAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgcmVxdWlyZV9udWxsKCksCiAgICAgICAgcmVxdWlyZV9ib29sKCksCiAgICAgICAgcmVxdWlyZV9pbnQoKSwKICAgICAgICByZXF1aXJlX2Zsb2F0KCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcwp2YXIgcmVxdWlyZV9jb3JlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfanNvbigpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMKdmFyIHJlcXVpcmVfdGltZXN0YW1wID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3RpbWVzdGFtcC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0RBVEVfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICAgIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIgogICAgKTsKICAgIHZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKAogICAgICAiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7CiAgICAgIHZhciBtYXRjaDIsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlOwogICAgICBtYXRjaDIgPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7CiAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIG1hdGNoMiA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgICB5ZWFyID0gK21hdGNoMlsxXTsKICAgICAgbW9udGggPSArbWF0Y2gyWzJdIC0gMTsKICAgICAgZGF5ID0gK21hdGNoMlszXTsKICAgICAgaWYgKCFtYXRjaDJbNF0pIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpOwogICAgICB9CiAgICAgIGhvdXIgPSArbWF0Y2gyWzRdOwogICAgICBtaW51dGUgPSArbWF0Y2gyWzVdOwogICAgICBzZWNvbmQgPSArbWF0Y2gyWzZdOwogICAgICBpZiAobWF0Y2gyWzddKSB7CiAgICAgICAgZnJhY3Rpb24gPSBtYXRjaDJbN10uc2xpY2UoMCwgMyk7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsKICAgICAgICAgIGZyYWN0aW9uICs9ICIwIjsKICAgICAgICB9CiAgICAgICAgZnJhY3Rpb24gPSArZnJhY3Rpb247CiAgICAgIH0KICAgICAgaWYgKG1hdGNoMls5XSkgewogICAgICAgIHR6X2hvdXIgPSArbWF0Y2gyWzEwXTsKICAgICAgICB0el9taW51dGUgPSArKG1hdGNoMlsxMV0gfHwgMCk7CiAgICAgICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDZlNDsKICAgICAgICBpZiAobWF0Y2gyWzldID09PSAiLSIpIGRlbHRhID0gLWRlbHRhOwogICAgICB9CiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTsKICAgICAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7CiAgICAgIHJldHVybiBkYXRlOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b0lTT1N0cmluZygpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sVGltZXN0YW1wLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsCiAgICAgIGluc3RhbmNlT2Y6IERhdGUsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzCnZhciByZXF1aXJlX21lcmdlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAiPDwiIHx8IGRhdGEgPT09IG51bGw7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzCnZhciByZXF1aXJlX2JpbmFyeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIE5vZGVCdWZmZXI7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgTm9kZUJ1ZmZlciA9IF9yZXF1aXJlKCJidWZmZXIiKS5CdWZmZXI7CiAgICB9IGNhdGNoIChfXykgewogICAgfQogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgQkFTRTY0X01BUCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxuXHIiOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgY29kZTQsIGlkeCwgYml0bGVuID0gMCwgbWF4MyA9IGRhdGEubGVuZ3RoLCBtYXA3ID0gQkFTRTY0X01BUDsKICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXgzOyBpZHgrKykgewogICAgICAgIGNvZGU0ID0gbWFwNy5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpOwogICAgICAgIGlmIChjb2RlNCA+IDY0KSBjb250aW51ZTsKICAgICAgICBpZiAoY29kZTQgPCAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgYml0bGVuICs9IDY7CiAgICAgIH0KICAgICAgcmV0dXJuIGJpdGxlbiAlIDggPT09IDA7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHsKICAgICAgdmFyIGlkeCwgdGFpbGJpdHMsIGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXHJcbj1dL2csICIiKSwgbWF4MyA9IGlucHV0Lmxlbmd0aCwgbWFwNyA9IEJBU0U2NF9NQVAsIGJpdHMgPSAwLCByZXN1bHQgPSBbXTsKICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXgzOyBpZHgrKykgewogICAgICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkgewogICAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxNiAmIDI1NSk7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpOwogICAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgICAgfQogICAgICAgIGJpdHMgPSBiaXRzIDw8IDYgfCBtYXA3LmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpOwogICAgICB9CiAgICAgIHRhaWxiaXRzID0gbWF4MyAlIDQgKiA2OwogICAgICBpZiAodGFpbGJpdHMgPT09IDApIHsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDE2ICYgMjU1KTsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAyNTUpOwogICAgICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTAgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMiAmIDI1NSk7CiAgICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiA0ICYgMjU1KTsKICAgICAgfQogICAgICBpZiAoTm9kZUJ1ZmZlcikgewogICAgICAgIHJldHVybiBOb2RlQnVmZmVyLmZyb20gPyBOb2RlQnVmZmVyLmZyb20ocmVzdWx0KSA6IG5ldyBOb2RlQnVmZmVyKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudFlhbWxCaW5hcnkob2JqZWN0KSB7CiAgICAgIHZhciByZXN1bHQgPSAiIiwgYml0cyA9IDAsIGlkeCwgdGFpbCwgbWF4MyA9IG9iamVjdC5sZW5ndGgsIG1hcDcgPSBCQVNFNjRfTUFQOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgaWYgKGlkeCAlIDMgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDE4ICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMiAmIDYzXTsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gNiAmIDYzXTsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgJiA2M107CiAgICAgICAgfQogICAgICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdOwogICAgICB9CiAgICAgIHRhaWwgPSBtYXgzICUgMzsKICAgICAgaWYgKHRhaWwgPT09IDApIHsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDE4ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTIgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA2ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgJiA2M107CiAgICAgIH0gZWxzZSBpZiAodGFpbCA9PT0gMikgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTAgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA0ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPDwgMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1s2NF07CiAgICAgIH0gZWxzZSBpZiAodGFpbCA9PT0gMSkgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzIDw8IDQgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbNjRdOwogICAgICAgIHJlc3VsdCArPSBtYXA3WzY0XTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNCaW5hcnkob2JqZWN0KSB7CiAgICAgIHJldHVybiBOb2RlQnVmZmVyICYmIE5vZGVCdWZmZXIuaXNCdWZmZXIob2JqZWN0KTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LAogICAgICBwcmVkaWNhdGU6IGlzQmluYXJ5LAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnkKICAgIH0pOwogICAgdmFyIF9yZXF1aXJlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9vbWFwLmpzCnZhciByZXF1aXJlX29tYXAgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBwYWlyS2V5LCBwYWlySGFzS2V5LCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgcGFpckhhc0tleSA9IGZhbHNlOwogICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBmYWxzZTsKICAgICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7CiAgICAgICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIiwgewogICAgICBraW5kOiAic2VxdWVuY2UiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcwp2YXIgcmVxdWlyZV9wYWlycyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxQYWlycyhkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBrZXlzMiwgcmVzdWx0LCBvYmplY3QgPSBkYXRhOwogICAgICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXIgPSBvYmplY3RbaW5kZXgyXTsKICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwocGFpcikgIT09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gZmFsc2U7CiAgICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhwYWlyKTsKICAgICAgICBpZiAoa2V5czIubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBba2V5czJbMF0sIHBhaXJba2V5czJbMF1dXTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxQYWlycyhkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gW107CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgcGFpciwga2V5czIsIHJlc3VsdCwgb2JqZWN0ID0gZGF0YTsKICAgICAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhwYWlyKTsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IFtrZXlzMlswXSwgcGFpcltrZXlzMlswXV1dOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzCnZhciByZXF1aXJlX3NldCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sU2V0KGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIga2V5Miwgb2JqZWN0ID0gZGF0YTsKICAgICAgZm9yIChrZXkyIGluIG9iamVjdCkgewogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpKSB7CiAgICAgICAgICBpZiAob2JqZWN0W2tleTJdICE9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFNldChkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnNldCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbFNldCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sU2V0CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMKdmFyIHJlcXVpcmVfZGVmYXVsdF9zYWZlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9jb3JlKCkKICAgICAgXSwKICAgICAgaW1wbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3RpbWVzdGFtcCgpLAogICAgICAgIHJlcXVpcmVfbWVyZ2UoKQogICAgICBdLAogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfYmluYXJ5KCksCiAgICAgICAgcmVxdWlyZV9vbWFwKCksCiAgICAgICAgcmVxdWlyZV9wYWlycygpLAogICAgICAgIHJlcXVpcmVfc2V0KCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcwp2YXIgcmVxdWlyZV91bmRlZmluZWQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCwKICAgICAgcHJlZGljYXRlOiBpc1VuZGVmaW5lZCwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0VW5kZWZpbmVkCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvcmVnZXhwLmpzCnZhciByZXF1aXJlX3JlZ2V4cCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgcmVnZXhwID0gZGF0YSwgdGFpbCA9IC9cLyhbZ2ltXSopJC8uZXhlYyhkYXRhKSwgbW9kaWZpZXJzID0gIiI7CiAgICAgIGlmIChyZWdleHBbMF0gPT09ICIvIikgewogICAgICAgIGlmICh0YWlsKSBtb2RpZmllcnMgPSB0YWlsWzFdOwogICAgICAgIGlmIChtb2RpZmllcnMubGVuZ3RoID4gMykgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChyZWdleHBbcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxXSAhPT0gIi8iKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwKGRhdGEpIHsKICAgICAgdmFyIHJlZ2V4cCA9IGRhdGEsIHRhaWwgPSAvXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksIG1vZGlmaWVycyA9ICIiOwogICAgICBpZiAocmVnZXhwWzBdID09PSAiLyIpIHsKICAgICAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTsKICAgICAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleHAsIG1vZGlmaWVycyk7CiAgICB9CiAgICBmdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwKG9iamVjdCkgewogICAgICB2YXIgcmVzdWx0ID0gIi8iICsgb2JqZWN0LnNvdXJjZSArICIvIjsKICAgICAgaWYgKG9iamVjdC5nbG9iYWwpIHJlc3VsdCArPSAiZyI7CiAgICAgIGlmIChvYmplY3QubXVsdGlsaW5lKSByZXN1bHQgKz0gIm0iOwogICAgICBpZiAob2JqZWN0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAiaSI7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc1JlZ0V4cChvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBSZWdFeHBdIjsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwLAogICAgICBwcmVkaWNhdGU6IGlzUmVnRXhwLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcwp2YXIgcmVxdWlyZV9mdW5jdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZXNwcmltYTsKICAgIHRyeSB7CiAgICAgIF9yZXF1aXJlID0gX19yZXF1aXJlOwogICAgICBlc3ByaW1hID0gX3JlcXVpcmUoImVzcHJpbWEiKTsKICAgIH0gY2F0Y2ggKF80KSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hOwogICAgfQogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgc291cmNlID0gIigiICsgZGF0YSArICIpIiwgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSk7CiAgICAgICAgaWYgKGFzdC50eXBlICE9PSAiUHJvZ3JhbSIgfHwgYXN0LmJvZHkubGVuZ3RoICE9PSAxIHx8IGFzdC5ib2R5WzBdLnR5cGUgIT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiB8fCBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIgJiYgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YSkgewogICAgICB2YXIgc291cmNlID0gIigiICsgZGF0YSArICIpIiwgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSksIHBhcmFtczIgPSBbXSwgYm9keTM7CiAgICAgIGlmIChhc3QudHlwZSAhPT0gIlByb2dyYW0iIHx8IGFzdC5ib2R5Lmxlbmd0aCAhPT0gMSB8fCBhc3QuYm9keVswXS50eXBlICE9PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgfHwgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iICYmIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgewogICAgICAgIHBhcmFtczIucHVzaChwYXJhbS5uYW1lKTsKICAgICAgfSk7CiAgICAgIGJvZHkzID0gYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlOwogICAgICBpZiAoYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKHBhcmFtczIsIHNvdXJjZS5zbGljZShib2R5M1swXSArIDEsIGJvZHkzWzFdIC0gMSkpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zMiwgInJldHVybiAiICsgc291cmNlLnNsaWNlKGJvZHkzWzBdLCBib2R5M1sxXSkpOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uKG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uMihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBGdW5jdGlvbl0iOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbiwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24sCiAgICAgIHByZWRpY2F0ZTogaXNGdW5jdGlvbjIsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uCiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanMKdmFyIHJlcXVpcmVfZGVmYXVsdF9mdWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gU2NoZW1hMi5ERUZBVUxUID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9kZWZhdWx0X3NhZmUoKQogICAgICBdLAogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfdW5kZWZpbmVkKCksCiAgICAgICAgcmVxdWlyZV9yZWdleHAoKSwKICAgICAgICByZXF1aXJlX2Z1bmN0aW9uKCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMKdmFyIHJlcXVpcmVfbG9hZGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgTWFyayA9IHJlcXVpcmVfbWFyaygpOwogICAgdmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgdmFyIERFRkFVTFRfRlVMTF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgQ09OVEVYVF9GTE9XX0lOID0gMTsKICAgIHZhciBDT05URVhUX0ZMT1dfT1VUID0gMjsKICAgIHZhciBDT05URVhUX0JMT0NLX0lOID0gMzsKICAgIHZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7CiAgICB2YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7CiAgICB2YXIgQ0hPTVBJTkdfU1RSSVAgPSAyOwogICAgdmFyIENIT01QSU5HX0tFRVAgPSAzOwogICAgdmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS87CiAgICB2YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1x4ODVcdTIwMjhcdTIwMjldLzsKICAgIHZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyA9IC9bLFxbXF1ce1x9XS87CiAgICB2YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XC1dKyEpJC9pOwogICAgdmFyIFBBVFRFUk5fVEFHX1VSSSA9IC9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7CiAgICBmdW5jdGlvbiBfY2xhc3Mob2JqKSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX0VPTChjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gMTAgfHwgYzExID09PSAxMzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA5IHx8IGMxMSA9PT0gMzI7CiAgICB9CiAgICBmdW5jdGlvbiBpc19XU19PUl9FT0woYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDkgfHwgYzExID09PSAzMiB8fCBjMTEgPT09IDEwIHx8IGMxMSA9PT0gMTM7CiAgICB9CiAgICBmdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gNDQgfHwgYzExID09PSA5MSB8fCBjMTEgPT09IDkzIHx8IGMxMSA9PT0gMTIzIHx8IGMxMSA9PT0gMTI1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbUhleENvZGUoYzExKSB7CiAgICAgIHZhciBsYzsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgbGMgPSBjMTEgfCAzMjsKICAgICAgaWYgKDk3IDw9IGxjICYmIGxjIDw9IDEwMikgewogICAgICAgIHJldHVybiBsYyAtIDk3ICsgMTA7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlZEhleExlbihjMTEpIHsKICAgICAgaWYgKGMxMSA9PT0gMTIwKSB7CiAgICAgICAgcmV0dXJuIDI7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gMTE3KSB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gODUpIHsKICAgICAgICByZXR1cm4gODsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjMTEpIHsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDQ4ID8gIlwwIiA6IGMxMSA9PT0gOTcgPyAiXHgwNyIgOiBjMTEgPT09IDk4ID8gIlxiIiA6IGMxMSA9PT0gMTE2ID8gIgkiIDogYzExID09PSA5ID8gIgkiIDogYzExID09PSAxMTAgPyAiXG4iIDogYzExID09PSAxMTggPyAiXHYiIDogYzExID09PSAxMDIgPyAiXGYiIDogYzExID09PSAxMTQgPyAiXHIiIDogYzExID09PSAxMDEgPyAiXHgxQiIgOiBjMTEgPT09IDMyID8gIiAiIDogYzExID09PSAzNCA/ICciJyA6IGMxMSA9PT0gNDcgPyAiLyIgOiBjMTEgPT09IDkyID8gIlxcIiA6IGMxMSA9PT0gNzggPyAiXHg4NSIgOiBjMTEgPT09IDk1ID8gIlx4QTAiIDogYzExID09PSA3NiA/ICJcdTIwMjgiIDogYzExID09PSA4MCA/ICJcdTIwMjkiIDogIiI7CiAgICB9CiAgICBmdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjMTEpIHsKICAgICAgaWYgKGMxMSA8PSA2NTUzNSkgewogICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoCiAgICAgICAgKGMxMSAtIDY1NTM2ID4+IDEwKSArIDU1Mjk2LAogICAgICAgIChjMTEgLSA2NTUzNiAmIDEwMjMpICsgNTYzMjAKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFByb3BlcnR5KG9iamVjdCwga2V5MiwgdmFsdWUyKSB7CiAgICAgIGlmIChrZXkyID09PSAiX19wcm90b19fIikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleTIsIHsKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZTIKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvYmplY3Rba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0KICAgIH0KICAgIHZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOwogICAgdmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpOwogICAgZm9yIChpMTEgPSAwOyBpMTEgPCAyNTY7IGkxMSsrKSB7CiAgICAgIHNpbXBsZUVzY2FwZUNoZWNrW2kxMV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpMTEpID8gMSA6IDA7CiAgICAgIHNpbXBsZUVzY2FwZU1hcFtpMTFdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTExKTsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKICAgICAgdGhpcy5maWxlbmFtZSA9IG9wdGlvbnNbImZpbGVuYW1lIl0gfHwgbnVsbDsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLm9uV2FybmluZyA9IG9wdGlvbnNbIm9uV2FybmluZyJdIHx8IG51bGw7CiAgICAgIHRoaXMubGVnYWN5ID0gb3B0aW9uc1sibGVnYWN5Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuanNvbiA9IG9wdGlvbnNbImpzb24iXSB8fCBmYWxzZTsKICAgICAgdGhpcy5saXN0ZW5lciA9IG9wdGlvbnNbImxpc3RlbmVyIl0gfHwgbnVsbDsKICAgICAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDsKICAgICAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwOwogICAgICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7CiAgICAgIHRoaXMubGluZSA9IDA7CiAgICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKICAgICAgdGhpcy5saW5lSW5kZW50ID0gMDsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKAogICAgICAgIG1lc3NhZ2UyLAogICAgICAgIG5ldyBNYXJrKHN0YXRlMTIuZmlsZW5hbWUsIHN0YXRlMTIuaW5wdXQsIHN0YXRlMTIucG9zaXRpb24sIHN0YXRlMTIubGluZSwgc3RhdGUxMi5wb3NpdGlvbiAtIHN0YXRlMTIubGluZVN0YXJ0KQogICAgICApOwogICAgfQogICAgZnVuY3Rpb24gdGhyb3dFcnJvcjIoc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZTEyLCBtZXNzYWdlMik7CiAgICB9CiAgICBmdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgaWYgKHN0YXRlMTIub25XYXJuaW5nKSB7CiAgICAgICAgc3RhdGUxMi5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlMTIsIG1lc3NhZ2UyKSk7CiAgICAgIH0KICAgIH0KICAgIHZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHsKICAgICAgWUFNTDogZnVuY3Rpb24gaGFuZGxlWWFtbERpcmVjdGl2ZShzdGF0ZTEyLCBuYW1lLCBhcmdzKSB7CiAgICAgICAgdmFyIG1hdGNoMiwgbWFqb3IsIG1pbm9yOwogICAgICAgIGlmIChzdGF0ZTEyLnZlcnNpb24gIT09IG51bGwpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpOwogICAgICAgIH0KICAgICAgICBtYXRjaDIgPSAvXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7CiAgICAgICAgaWYgKG1hdGNoMiA9PT0gbnVsbCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2gyWzFdLCAxMCk7CiAgICAgICAgbWlub3IgPSBwYXJzZUludChtYXRjaDJbMl0sIDEwKTsKICAgICAgICBpZiAobWFqb3IgIT09IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnZlcnNpb24gPSBhcmdzWzBdOwogICAgICAgIHN0YXRlMTIuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyOwogICAgICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlMTIsICJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZTEyLCBuYW1lLCBhcmdzKSB7CiAgICAgICAgdmFyIGhhbmRsZTMsIHByZWZpeDQ7CiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpOwogICAgICAgIH0KICAgICAgICBoYW5kbGUzID0gYXJnc1swXTsKICAgICAgICBwcmVmaXg0ID0gYXJnc1sxXTsKICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZTMpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTIudGFnTWFwLCBoYW5kbGUzKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInICsgaGFuZGxlMyArICciIHRhZyBoYW5kbGUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFQQVRURVJOX1RBR19VUkkudGVzdChwcmVmaXg0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnRhZ01hcFtoYW5kbGUzXSA9IHByZWZpeDQ7CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBzdGFydCwgZW5kMywgY2hlY2tKc29uKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIF9sZW5ndGgsIF9jaGFyYWN0ZXIsIF9yZXN1bHQ7CiAgICAgIGlmIChzdGFydCA8IGVuZDMpIHsKICAgICAgICBfcmVzdWx0ID0gc3RhdGUxMi5pbnB1dC5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgICAgaWYgKGNoZWNrSnNvbikgewogICAgICAgICAgZm9yIChfcG9zaXRpb24gPSAwLCBfbGVuZ3RoID0gX3Jlc3VsdC5sZW5ndGg7IF9wb3NpdGlvbiA8IF9sZW5ndGg7IF9wb3NpdGlvbiArPSAxKSB7CiAgICAgICAgICAgIF9jaGFyYWN0ZXIgPSBfcmVzdWx0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTsKICAgICAgICAgICAgaWYgKCEoX2NoYXJhY3RlciA9PT0gOSB8fCAzMiA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMTExNDExMSkpIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoUEFUVEVSTl9OT05fUFJJTlRBQkxFLnRlc3QoX3Jlc3VsdCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBfcmVzdWx0OwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlMTIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykgewogICAgICB2YXIgc291cmNlS2V5cywga2V5MiwgaW5kZXgyLCBxdWFudGl0eTsKICAgICAgaWYgKCFjb21tb24uaXNPYmplY3Qoc291cmNlKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpOwogICAgICB9CiAgICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4MiA8IHF1YW50aXR5OyBpbmRleDIgKz0gMSkgewogICAgICAgIGtleTIgPSBzb3VyY2VLZXlzW2luZGV4Ml07CiAgICAgICAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChkZXN0aW5hdGlvbiwga2V5MikpIHsKICAgICAgICAgIHNldFByb3BlcnR5KGRlc3RpbmF0aW9uLCBrZXkyLCBzb3VyY2Vba2V5Ml0pOwogICAgICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleTJdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgc3RhcnRMaW5lLCBzdGFydFBvcykgewogICAgICB2YXIgaW5kZXgyLCBxdWFudGl0eTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHsKICAgICAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7CiAgICAgICAgZm9yIChpbmRleDIgPSAwLCBxdWFudGl0eSA9IGtleU5vZGUubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGVbaW5kZXgyXSkpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gIm9iamVjdCIgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXgyXSkgPT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAgICAgIGtleU5vZGVbaW5kZXgyXSA9ICJbb2JqZWN0IE9iamVjdF0iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICJvYmplY3QiICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICBrZXlOb2RlID0gIltvYmplY3QgT2JqZWN0XSI7CiAgICAgIH0KICAgICAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTsKICAgICAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHsKICAgICAgICBfcmVzdWx0ID0ge307CiAgICAgIH0KICAgICAgaWYgKGtleVRhZyA9PT0gInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIikgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHsKICAgICAgICAgIGZvciAoaW5kZXgyID0gMCwgcXVhbnRpdHkgPSB2YWx1ZU5vZGUubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZTEyLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXgyXSwgb3ZlcnJpZGFibGVLZXlzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZTEyLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICghc3RhdGUxMi5qc29uICYmICFfaGFzT3duUHJvcGVydHkuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKF9yZXN1bHQsIGtleU5vZGUpKSB7CiAgICAgICAgICBzdGF0ZTEyLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUxMi5saW5lOwogICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiA9IHN0YXJ0UG9zIHx8IHN0YXRlMTIucG9zaXRpb247CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpOwogICAgICAgIH0KICAgICAgICBzZXRQcm9wZXJ0eShfcmVzdWx0LCBrZXlOb2RlLCB2YWx1ZU5vZGUpOwogICAgICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07CiAgICAgIH0KICAgICAgcmV0dXJuIF9yZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlMTIpIHsKICAgICAgdmFyIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSAxMCkgewogICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMTMpIHsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgaWYgKHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKSA9PT0gMTApIHsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpOwogICAgICB9CiAgICAgIHN0YXRlMTIubGluZSArPSAxOwogICAgICBzdGF0ZTEyLmxpbmVTdGFydCA9IHN0YXRlMTIucG9zaXRpb247CiAgICB9CiAgICBmdW5jdGlvbiBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7CiAgICAgIHZhciBsaW5lQnJlYWtzID0gMCwgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAzNSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfSB3aGlsZSAoY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gMCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICByZWFkTGluZUJyZWFrKHN0YXRlMTIpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICBsaW5lQnJlYWtzKys7CiAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQgPSAwOwogICAgICAgICAgd2hpbGUgKGNoID09PSAzMikgewogICAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQrKzsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGVja0luZGVudCAhPT0gLTEgJiYgbGluZUJyZWFrcyAhPT0gMCAmJiBzdGF0ZTEyLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZTEyLCAiZGVmaWNpZW50IGluZGVudGF0aW9uIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVCcmVha3M7CiAgICB9CiAgICBmdW5jdGlvbiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxMikgewogICAgICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbiwgY2g7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgIGlmICgoY2ggPT09IDQ1IHx8IGNoID09PSA0NikgJiYgY2ggPT09IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSAmJiBjaCA9PT0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7CiAgICAgICAgX3Bvc2l0aW9uICs9IDM7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxMiwgY291bnQyKSB7CiAgICAgIGlmIChjb3VudDIgPT09IDEpIHsKICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSAiICI7CiAgICAgIH0gZWxzZSBpZiAoY291bnQyID4gMSkgewogICAgICAgIHN0YXRlMTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgY291bnQyIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZTEyLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikgewogICAgICB2YXIgcHJlY2VkaW5nLCBmb2xsb3dpbmcsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgaGFzUGVuZGluZ0NvbnRlbnQsIF9saW5lLCBfbGluZVN0YXJ0LCBfbGluZUluZGVudCwgX2tpbmQgPSBzdGF0ZTEyLmtpbmQsIF9yZXN1bHQgPSBzdGF0ZTEyLnJlc3VsdCwgY2g7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoaXNfV1NfT1JfRU9MKGNoKSB8fCBpc19GTE9XX0lORElDQVRPUihjaCkgfHwgY2ggPT09IDM1IHx8IGNoID09PSAzOCB8fCBjaCA9PT0gNDIgfHwgY2ggPT09IDMzIHx8IGNoID09PSAxMjQgfHwgY2ggPT09IDYyIHx8IGNoID09PSAzOSB8fCBjaCA9PT0gMzQgfHwgY2ggPT09IDM3IHx8IGNoID09PSA2NCB8fCBjaCA9PT0gOTYpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGNoID09PSA2MyB8fCBjaCA9PT0gNDUpIHsKICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSA1OCkgewogICAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24gKyAxKTsKICAgICAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICBwcmVjZWRpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiAtIDEpOwogICAgICAgICAgaWYgKGlzX1dTX09SX0VPTChwcmVjZWRpbmcpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5wb3NpdGlvbiA9PT0gc3RhdGUxMi5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTIpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBfbGluZSA9IHN0YXRlMTIubGluZTsKICAgICAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZTEyLmxpbmVTdGFydDsKICAgICAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUxMi5saW5lSW5kZW50OwogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCBmYWxzZSwgLTEpOwogICAgICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7CiAgICAgICAgICAgIHN0YXRlMTIubGluZSA9IF9saW5lOwogICAgICAgICAgICBzdGF0ZTEyLmxpbmVTdGFydCA9IF9saW5lU3RhcnQ7CiAgICAgICAgICAgIHN0YXRlMTIubGluZUluZGVudCA9IF9saW5lSW5kZW50OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxMiwgc3RhdGUxMi5saW5lIC0gX2xpbmUpOwogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb24gKyAxOwogICAgICAgIH0KICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpOwogICAgICBpZiAoc3RhdGUxMi5yZXN1bHQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZTEyLmtpbmQgPSBfa2luZDsKICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlMTIsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIGNoLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDM5KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gMzkpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgc3RhdGUxMi5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgaWYgKGNoID09PSAzOSkgewogICAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTEyLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTIucG9zaXRpb24gPT09IHN0YXRlMTIubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTEyKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUxMiwgbm9kZUluZGVudCkgewogICAgICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgc3RhdGUxMi5raW5kID0gInNjYWxhciI7CiAgICAgIHN0YXRlMTIucmVzdWx0ID0gIiI7CiAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgIHdoaWxlICgoY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbikpICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSAzNCkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxMiwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTEyLnBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIHN0YXRlMTIucG9zaXRpb24sIHRydWUpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgZmFsc2UsIG5vZGVJbmRlbnQpOwogICAgICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBzaW1wbGVFc2NhcGVDaGVja1tjaF0pIHsKICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkgewogICAgICAgICAgICBoZXhMZW5ndGggPSB0bXA7CiAgICAgICAgICAgIGhleFJlc3VsdCA9IDA7CiAgICAgICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkgewogICAgICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHsKICAgICAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gY2hhckZyb21Db2RlcG9pbnQoaGV4UmVzdWx0KTsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7CiAgICAgICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTIsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgZmFsc2UsIG5vZGVJbmRlbnQpKTsKICAgICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5wb3NpdGlvbiA9PT0gc3RhdGUxMi5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTIpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlMTIsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIHJlYWROZXh0ID0gdHJ1ZSwgX2xpbmUsIF90YWcgPSBzdGF0ZTEyLnRhZywgX3Jlc3VsdCwgX2FuY2hvciA9IHN0YXRlMTIuYW5jaG9yLCBmb2xsb3dpbmcsIHRlcm1pbmF0b3IsIGlzUGFpciwgaXNFeHBsaWNpdFBhaXIsIGlzTWFwcGluZywgb3ZlcnJpZGFibGVLZXlzID0ge30sIGtleU5vZGUsIGtleVRhZywgdmFsdWVOb2RlLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gOTEpIHsKICAgICAgICB0ZXJtaW5hdG9yID0gOTM7CiAgICAgICAgaXNNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgX3Jlc3VsdCA9IFtdOwogICAgICB9IGVsc2UgaWYgKGNoID09PSAxMjMpIHsKICAgICAgICB0ZXJtaW5hdG9yID0gMTI1OwogICAgICAgIGlzTWFwcGluZyA9IHRydWU7CiAgICAgICAgX3Jlc3VsdCA9IHt9OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZTEyLmFuY2hvck1hcFtzdGF0ZTEyLmFuY2hvcl0gPSBfcmVzdWx0OwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSB0ZXJtaW5hdG9yKSB7CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgICAgICBzdGF0ZTEyLmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgICBzdGF0ZTEyLmtpbmQgPSBpc01hcHBpbmcgPyAibWFwcGluZyIgOiAic2VxdWVuY2UiOwogICAgICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcyIpOwogICAgICAgIH0KICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlOwogICAgICAgIGlmIChjaCA9PT0gNjMpIHsKICAgICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlOwogICAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpOwogICAgICAgIGtleVRhZyA9IHN0YXRlMTIudGFnOwogICAgICAgIGtleU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUxMi5saW5lID09PSBfbGluZSkgJiYgY2ggPT09IDU4KSB7CiAgICAgICAgICBpc1BhaXIgPSB0cnVlOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTEyLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNNYXBwaW5nKSB7CiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7CiAgICAgICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBudWxsLCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTsKICAgICAgICB9CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDQ0KSB7CiAgICAgICAgICByZWFkTmV4dCA9IHRydWU7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWFkTmV4dCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZTEyLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSAxMjQpIHsKICAgICAgICBmb2xkaW5nID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDYyKSB7CiAgICAgICAgZm9sZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gNDMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHsKICAgICAgICAgICAgY2hvbXBpbmcgPSBjaCA9PT0gNDMgPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkgewogICAgICAgICAgaWYgKHRtcCA9PT0gMCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOwogICAgICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHsKICAgICAgICAgICAgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQgKyB0bXAgLSAxOwogICAgICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7CiAgICAgICAgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfSB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApOwogICAgICAgIH0KICAgICAgfQogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICByZWFkTGluZUJyZWFrKHN0YXRlMTIpOwogICAgICAgIHN0YXRlMTIubGluZUluZGVudCA9IDA7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUxMi5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiYgY2ggPT09IDMyKSB7CiAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQrKzsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmICghZGV0ZWN0ZWRJbmRlbnQgJiYgc3RhdGUxMi5saW5lSW5kZW50ID4gdGV4dEluZGVudCkgewogICAgICAgICAgdGV4dEluZGVudCA9IHN0YXRlMTIubGluZUluZGVudDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX0VPTChjaCkpIHsKICAgICAgICAgIGVtcHR5TGluZXMrKzsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgewogICAgICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7CiAgICAgICAgICAgIHN0YXRlMTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpOwogICAgICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkgewogICAgICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHsKICAgICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGZvbGRpbmcpIHsKICAgICAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlOwogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHsKICAgICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBlbXB0eUxpbmVzICsgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXMgPT09IDApIHsKICAgICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGVtcHR5TGluZXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICB9CiAgICAgICAgZGlkUmVhZENvbnRlbnQgPSB0cnVlOwogICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTsKICAgICAgICBlbXB0eUxpbmVzID0gMDsKICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIHdoaWxlICghaXNfRU9MKGNoKSAmJiBjaCAhPT0gMCkgewogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxMiwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTEyLnBvc2l0aW9uLCBmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBfbGluZSwgX3RhZyA9IHN0YXRlMTIudGFnLCBfYW5jaG9yID0gc3RhdGUxMi5hbmNob3IsIF9yZXN1bHQgPSBbXSwgZm9sbG93aW5nLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDsKICAgICAgaWYgKHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5hbmNob3JNYXBbc3RhdGUxMi5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgaWYgKGNoICE9PSA0NSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSk7CiAgICAgICAgaWYgKCFpc19XU19PUl9FT0woZm9sbG93aW5nKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRldGVjdGVkID0gdHJ1ZTsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDw9IG5vZGVJbmRlbnQpIHsKICAgICAgICAgICAgX3Jlc3VsdC5wdXNoKG51bGwpOwogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICBfcmVzdWx0LnB1c2goc3RhdGUxMi5yZXN1bHQpOwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmICgoc3RhdGUxMi5saW5lID09PSBfbGluZSB8fCBzdGF0ZTEyLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiBjaCAhPT0gMCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBfdGFnOwogICAgICAgIHN0YXRlMTIuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICBzdGF0ZTEyLmtpbmQgPSAic2VxdWVuY2UiOwogICAgICAgIHN0YXRlMTIucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlMTIsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHsKICAgICAgdmFyIGZvbGxvd2luZywgYWxsb3dDb21wYWN0LCBfbGluZSwgX3BvcywgX3RhZyA9IHN0YXRlMTIudGFnLCBfYW5jaG9yID0gc3RhdGUxMi5hbmNob3IsIF9yZXN1bHQgPSB7fSwgb3ZlcnJpZGFibGVLZXlzID0ge30sIGtleVRhZyA9IG51bGwsIGtleU5vZGUgPSBudWxsLCB2YWx1ZU5vZGUgPSBudWxsLCBhdEV4cGxpY2l0S2V5ID0gZmFsc2UsIGRldGVjdGVkID0gZmFsc2UsIGNoOwogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZTEyLmFuY2hvck1hcFtzdGF0ZTEyLmFuY2hvcl0gPSBfcmVzdWx0OwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIF9wb3MgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIGlmICgoY2ggPT09IDYzIHx8IGNoID09PSA1OCkgJiYgaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgIGlmIChjaCA9PT0gNjMpIHsKICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsKTsKICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSB0cnVlOwogICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICBjaCA9IGZvbGxvd2luZzsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlMTIsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgaWYgKHN0YXRlMTIubGluZSA9PT0gX2xpbmUpIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaCA9PT0gNTgpIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTsKICAgICAgICAgICAgICBrZXlUYWcgPSBzdGF0ZTEyLnRhZzsKICAgICAgICAgICAgICBrZXlOb2RlID0gc3RhdGUxMi5yZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgICAgICAgICAgc3RhdGUxMi5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlMTIudGFnID0gX3RhZzsKICAgICAgICAgICAgc3RhdGUxMi5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTEyLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlMTIubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHsKICAgICAgICAgIGlmIChjb21wb3NlTm9kZShzdGF0ZTEyLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkgewogICAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9wb3MpOwogICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmIGNoICE9PSAwKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBfdGFnOwogICAgICAgIHN0YXRlMTIuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICBzdGF0ZTEyLmtpbmQgPSAibWFwcGluZyI7CiAgICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBkZXRlY3RlZDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGlzVmVyYmF0aW0gPSBmYWxzZSwgaXNOYW1lZCA9IGZhbHNlLCB0YWdIYW5kbGUsIHRhZ05hbWUsIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzMykgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoc3RhdGUxMi50YWcgIT09IG51bGwpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKTsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoY2ggPT09IDYwKSB7CiAgICAgICAgaXNWZXJiYXRpbSA9IHRydWU7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMzMpIHsKICAgICAgICBpc05hbWVkID0gdHJ1ZTsKICAgICAgICB0YWdIYW5kbGUgPSAiISEiOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFnSGFuZGxlID0gIiEiOwogICAgICB9CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgICAgZG8gewogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gNjIpOwogICAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uIDwgc3RhdGUxMi5sZW5ndGgpIHsKICAgICAgICAgIHRhZ05hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7CiAgICAgICAgICBpZiAoY2ggPT09IDMzKSB7CiAgICAgICAgICAgIGlmICghaXNOYW1lZCkgewogICAgICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlMTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uIC0gMSwgc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlzTmFtZWQgPSB0cnVlOwogICAgICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTIucG9zaXRpb24gKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIHRhZ05hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIiArIHRhZ05hbWUpOwogICAgICB9CiAgICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSB0YWdOYW1lOwogICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTIudGFnTWFwLCB0YWdIYW5kbGUpKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBzdGF0ZTEyLnRhZ01hcFt0YWdIYW5kbGVdICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICIhIikgewogICAgICAgIHN0YXRlMTIudGFnID0gIiEiICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICIhISIpIHsKICAgICAgICBzdGF0ZTEyLnRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInICsgdGFnSGFuZGxlICsgJyInKTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzOCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iik7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpOwogICAgICB9CiAgICAgIHN0YXRlMTIuYW5jaG9yID0gc3RhdGUxMi5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTIucG9zaXRpb24pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRBbGlhcyhzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGFsaWFzLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gNDIpIHJldHVybiBmYWxzZTsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIik7CiAgICAgIH0KICAgICAgYWxpYXMgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUxMi5hbmNob3JNYXAsIGFsaWFzKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICd1bmlkZW50aWZpZWQgYWxpYXMgIicgKyBhbGlhcyArICciJyk7CiAgICAgIH0KICAgICAgc3RhdGUxMi5yZXN1bHQgPSBzdGF0ZTEyLmFuY2hvck1hcFthbGlhc107CiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlMTIsIHBhcmVudEluZGVudCwgbm9kZUNvbnRleHQsIGFsbG93VG9TZWVrLCBhbGxvd0NvbXBhY3QpIHsKICAgICAgdmFyIGFsbG93QmxvY2tTdHlsZXMsIGFsbG93QmxvY2tTY2FsYXJzLCBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsIGluZGVudFN0YXR1cyA9IDEsIGF0TmV3TGluZSA9IGZhbHNlLCBoYXNDb250ZW50ID0gZmFsc2UsIHR5cGVJbmRleCwgdHlwZVF1YW50aXR5LCB0eXBlNSwgZmxvd0luZGVudCwgYmxvY2tJbmRlbnQ7CiAgICAgIGlmIChzdGF0ZTEyLmxpc3RlbmVyICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5saXN0ZW5lcigib3BlbiIsIHN0YXRlMTIpOwogICAgICB9CiAgICAgIHN0YXRlMTIudGFnID0gbnVsbDsKICAgICAgc3RhdGUxMi5hbmNob3IgPSBudWxsOwogICAgICBzdGF0ZTEyLmtpbmQgPSBudWxsOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9IG51bGw7CiAgICAgIGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDsKICAgICAgaWYgKGFsbG93VG9TZWVrKSB7CiAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBhdE5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA+IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHsKICAgICAgICB3aGlsZSAocmVhZFRhZ1Byb3BlcnR5KHN0YXRlMTIpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZTEyKSkgewogICAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICAgIGF0TmV3TGluZSA9IHRydWU7CiAgICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGFsbG93QmxvY2tTdHlsZXM7CiAgICAgICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxOwogICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTIubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHsKICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0OwogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEgfHwgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0KSB7CiAgICAgICAgaWYgKENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9GTE9XX09VVCA9PT0gbm9kZUNvbnRleHQpIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQgKyAxOwogICAgICAgIH0KICAgICAgICBibG9ja0luZGVudCA9IHN0YXRlMTIucG9zaXRpb24gLSBzdGF0ZTEyLmxpbmVTdGFydDsKICAgICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7CiAgICAgICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBibG9ja0luZGVudCkgfHwgcmVhZEJsb2NrTWFwcGluZyhzdGF0ZTEyLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8IHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZTEyLCBmbG93SW5kZW50KSkgewogICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUxMiwgZmxvd0luZGVudCkgfHwgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZTEyLCBmbG93SW5kZW50KSB8fCByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMTIsIGZsb3dJbmRlbnQpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlMTIpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsIHx8IHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlMTIsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTIudGFnID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9ICI/IjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5hbmNob3JNYXBbc3RhdGUxMi5hbmNob3JdID0gc3RhdGUxMi5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkgewogICAgICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBibG9ja0luZGVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTEyLnRhZyAhPT0gIiEiKSB7CiAgICAgICAgaWYgKHN0YXRlMTIudGFnID09PSAiPyIpIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZTEyLmtpbmQgIT09ICJzY2FsYXIiKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlICJzY2FsYXIiLCBub3QgIicgKyBzdGF0ZTEyLmtpbmQgKyAnIicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7CiAgICAgICAgICAgIHR5cGU1ID0gc3RhdGUxMi5pbXBsaWNpdFR5cGVzW3R5cGVJbmRleF07CiAgICAgICAgICAgIGlmICh0eXBlNS5yZXNvbHZlKHN0YXRlMTIucmVzdWx0KSkgewogICAgICAgICAgICAgIHN0YXRlMTIucmVzdWx0ID0gdHlwZTUuY29uc3RydWN0KHN0YXRlMTIucmVzdWx0KTsKICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9IHR5cGU1LnRhZzsKICAgICAgICAgICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHN0YXRlMTIuYW5jaG9yTWFwW3N0YXRlMTIuYW5jaG9yXSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUxMi50eXBlTWFwW3N0YXRlMTIua2luZCB8fCAiZmFsbGJhY2siXSwgc3RhdGUxMi50YWcpKSB7CiAgICAgICAgICB0eXBlNSA9IHN0YXRlMTIudHlwZU1hcFtzdGF0ZTEyLmtpbmQgfHwgImZhbGxiYWNrIl1bc3RhdGUxMi50YWddOwogICAgICAgICAgaWYgKHN0YXRlMTIucmVzdWx0ICE9PSBudWxsICYmIHR5cGU1LmtpbmQgIT09IHN0YXRlMTIua2luZCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiICsgc3RhdGUxMi50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyArIHR5cGU1LmtpbmQgKyAnIiwgbm90ICInICsgc3RhdGUxMi5raW5kICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdHlwZTUucmVzb2x2ZShzdGF0ZTEyLnJlc3VsdCkpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IiArIHN0YXRlMTIudGFnICsgIj4gZXhwbGljaXQgdGFnIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCA9IHR5cGU1LmNvbnN0cnVjdChzdGF0ZTEyLnJlc3VsdCk7CiAgICAgICAgICAgIGlmIChzdGF0ZTEyLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlMTIuYW5jaG9yTWFwW3N0YXRlMTIuYW5jaG9yXSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ1bmtub3duIHRhZyAhPCIgKyBzdGF0ZTEyLnRhZyArICI+Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLmxpc3RlbmVyICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5saXN0ZW5lcigiY2xvc2UiLCBzdGF0ZTEyKTsKICAgICAgfQogICAgICByZXR1cm4gc3RhdGUxMi50YWcgIT09IG51bGwgfHwgc3RhdGUxMi5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZTEyKSB7CiAgICAgIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUxMi5wb3NpdGlvbiwgX3Bvc2l0aW9uLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzLCBoYXNEaXJlY3RpdmVzID0gZmFsc2UsIGNoOwogICAgICBzdGF0ZTEyLnZlcnNpb24gPSBudWxsOwogICAgICBzdGF0ZTEyLmNoZWNrTGluZUJyZWFrcyA9IHN0YXRlMTIubGVnYWN5OwogICAgICBzdGF0ZTEyLnRhZ01hcCA9IHt9OwogICAgICBzdGF0ZTEyLmFuY2hvck1hcCA9IHt9OwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiAwIHx8IGNoICE9PSAzNykgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgZGlyZWN0aXZlQXJncyA9IFtdOwogICAgICAgIGlmIChkaXJlY3RpdmVOYW1lLmxlbmd0aCA8IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfRU9MKGNoKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzX0VPTChjaCkpIGJyZWFrOwogICAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgZGlyZWN0aXZlQXJncy5wdXNoKHN0YXRlMTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTEyLnBvc2l0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGlmIChjaCAhPT0gMCkgcmVhZExpbmVCcmVhayhzdGF0ZTEyKTsKICAgICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoZGlyZWN0aXZlSGFuZGxlcnMsIGRpcmVjdGl2ZU5hbWUpKSB7CiAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVyc1tkaXJlY3RpdmVOYW1lXShzdGF0ZTEyLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlMTIsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJyArIGRpcmVjdGl2ZU5hbWUgKyAnIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIHRydWUsIC0xKTsKICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA9PT0gMCAmJiBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbikgPT09IDQ1ICYmIHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSkgPT09IDQ1ICYmIHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMikgPT09IDQ1KSB7CiAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiArPSAzOwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpOwogICAgICB9CiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIHN0YXRlMTIubGluZUluZGVudCAtIDEsIENPTlRFWFRfQkxPQ0tfT1VULCBmYWxzZSwgdHJ1ZSk7CiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICBpZiAoc3RhdGUxMi5jaGVja0xpbmVCcmVha3MgJiYgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChzdGF0ZTEyLmlucHV0LnNsaWNlKGRvY3VtZW50U3RhcnQsIHN0YXRlMTIucG9zaXRpb24pKSkgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZTEyLCAibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50Iik7CiAgICAgIH0KICAgICAgc3RhdGUxMi5kb2N1bWVudHMucHVzaChzdGF0ZTEyLnJlc3VsdCk7CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBzdGF0ZTEyLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxMikpIHsKICAgICAgICBpZiAoc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pID09PSA0NikgewogICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiArPSAzOwogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCB0cnVlLCAtMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoc3RhdGUxMi5wb3NpdGlvbiA8IHN0YXRlMTIubGVuZ3RoIC0gMSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucykgewogICAgICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICBpZiAoaW5wdXQubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEwICYmIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEzKSB7CiAgICAgICAgICBpbnB1dCArPSAiXG4iOwogICAgICAgIH0KICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gNjUyNzkpIHsKICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBzdGF0ZTEyID0gbmV3IFN0YXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgdmFyIG51bGxwb3MgPSBpbnB1dC5pbmRleE9mKCJcMCIpOwogICAgICBpZiAobnVsbHBvcyAhPT0gLTEpIHsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uID0gbnVsbHBvczsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0Iik7CiAgICAgIH0KICAgICAgc3RhdGUxMi5pbnB1dCArPSAiXDAiOwogICAgICB3aGlsZSAoc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pID09PSAzMikgewogICAgICAgIHN0YXRlMTIubGluZUluZGVudCArPSAxOwogICAgICAgIHN0YXRlMTIucG9zaXRpb24gKz0gMTsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUxMi5wb3NpdGlvbiA8IHN0YXRlMTIubGVuZ3RoIC0gMSkgewogICAgICAgIHJlYWREb2N1bWVudChzdGF0ZTEyKTsKICAgICAgfQogICAgICByZXR1cm4gc3RhdGUxMi5kb2N1bWVudHM7CiAgICB9CiAgICBmdW5jdGlvbiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvcjIsIG9wdGlvbnMpIHsKICAgICAgaWYgKGl0ZXJhdG9yMiAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlcmF0b3IyID09PSAib2JqZWN0IiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBvcHRpb25zID0gaXRlcmF0b3IyOwogICAgICAgIGl0ZXJhdG9yMiA9IG51bGw7CiAgICAgIH0KICAgICAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpOwogICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yMiAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBkb2N1bWVudHM7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaW5kZXgyID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGl0ZXJhdG9yMihkb2N1bWVudHNbaW5kZXgyXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWQoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpOwogICAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBkb2N1bWVudHNbMF07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIik7CiAgICB9CiAgICBmdW5jdGlvbiBzYWZlTG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7CiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IyID09PSAib2JqZWN0IiAmJiBpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgb3B0aW9ucyA9IGl0ZXJhdG9yMjsKICAgICAgICBpdGVyYXRvcjIgPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvcjIsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpOwogICAgfQogICAgZnVuY3Rpb24gc2FmZUxvYWQoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGxvYWQoaW5wdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMubG9hZEFsbCA9IGxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gc2FmZUxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCA9IHNhZmVMb2FkOwogICAgdmFyIGkxMTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2R1bXBlci5qcwp2YXIgcmVxdWlyZV9kdW1wZXIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2R1bXBlci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIHZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIHZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X3NhZmUoKTsKICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgQ0hBUl9UQUIgPSA5OwogICAgdmFyIENIQVJfTElORV9GRUVEID0gMTA7CiAgICB2YXIgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsKICAgIHZhciBDSEFSX1NQQUNFID0gMzI7CiAgICB2YXIgQ0hBUl9FWENMQU1BVElPTiA9IDMzOwogICAgdmFyIENIQVJfRE9VQkxFX1FVT1RFID0gMzQ7CiAgICB2YXIgQ0hBUl9TSEFSUCA9IDM1OwogICAgdmFyIENIQVJfUEVSQ0VOVCA9IDM3OwogICAgdmFyIENIQVJfQU1QRVJTQU5EID0gMzg7CiAgICB2YXIgQ0hBUl9TSU5HTEVfUVVPVEUgPSAzOTsKICAgIHZhciBDSEFSX0FTVEVSSVNLID0gNDI7CiAgICB2YXIgQ0hBUl9DT01NQSA9IDQ0OwogICAgdmFyIENIQVJfTUlOVVMgPSA0NTsKICAgIHZhciBDSEFSX0NPTE9OID0gNTg7CiAgICB2YXIgQ0hBUl9FUVVBTFMgPSA2MTsKICAgIHZhciBDSEFSX0dSRUFURVJfVEhBTiA9IDYyOwogICAgdmFyIENIQVJfUVVFU1RJT04gPSA2MzsKICAgIHZhciBDSEFSX0NPTU1FUkNJQUxfQVQgPSA2NDsKICAgIHZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsKICAgIHZhciBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUID0gOTM7CiAgICB2YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsKICAgIHZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCA9IDEyMzsKICAgIHZhciBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7CiAgICB2YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OwogICAgdmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMF0gPSAiXFwwIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbN10gPSAiXFxhIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOF0gPSAiXFxiIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOV0gPSAiXFx0IjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTBdID0gIlxcbiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzExXSA9ICJcXHYiOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMl0gPSAiXFxmIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTNdID0gIlxcciI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzI3XSA9ICJcXGUiOwogICAgRVNDQVBFX1NFUVVFTkNFU1szNF0gPSAnXFwiJzsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOTJdID0gIlxcXFwiOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMzNdID0gIlxcTiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzE2MF0gPSAiXFxfIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbODIzMl0gPSAiXFxMIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbODIzM10gPSAiXFxQIjsKICAgIHZhciBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWCA9IFsKICAgICAgInkiLAogICAgICAiWSIsCiAgICAgICJ5ZXMiLAogICAgICAiWWVzIiwKICAgICAgIllFUyIsCiAgICAgICJvbiIsCiAgICAgICJPbiIsCiAgICAgICJPTiIsCiAgICAgICJuIiwKICAgICAgIk4iLAogICAgICAibm8iLAogICAgICAiTm8iLAogICAgICAiTk8iLAogICAgICAib2ZmIiwKICAgICAgIk9mZiIsCiAgICAgICJPRkYiCiAgICBdOwogICAgZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwNykgewogICAgICB2YXIgcmVzdWx0LCBrZXlzMiwgaW5kZXgyLCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU1OwogICAgICBpZiAobWFwNyA9PT0gbnVsbCkgcmV0dXJuIHt9OwogICAgICByZXN1bHQgPSB7fTsKICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhtYXA3KTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBrZXlzMi5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICB0YWcgPSBrZXlzMltpbmRleDJdOwogICAgICAgIHN0eWxlID0gU3RyaW5nKG1hcDdbdGFnXSk7CiAgICAgICAgaWYgKHRhZy5zbGljZSgwLCAyKSA9PT0gIiEhIikgewogICAgICAgICAgdGFnID0gInRhZzp5YW1sLm9yZywyMDAyOiIgKyB0YWcuc2xpY2UoMik7CiAgICAgICAgfQogICAgICAgIHR5cGU1ID0gc2NoZW1hLmNvbXBpbGVkVHlwZU1hcFsiZmFsbGJhY2siXVt0YWddOwogICAgICAgIGlmICh0eXBlNSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlNS5zdHlsZUFsaWFzZXMsIHN0eWxlKSkgewogICAgICAgICAgc3R5bGUgPSB0eXBlNS5zdHlsZUFsaWFzZXNbc3R5bGVdOwogICAgICAgIH0KICAgICAgICByZXN1bHRbdGFnXSA9IHN0eWxlOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBlbmNvZGVIZXgoY2hhcmFjdGVyKSB7CiAgICAgIHZhciBzdHJpbmczLCBoYW5kbGUzLCBsZW5ndGg7CiAgICAgIHN0cmluZzMgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgIGlmIChjaGFyYWN0ZXIgPD0gMjU1KSB7CiAgICAgICAgaGFuZGxlMyA9ICJ4IjsKICAgICAgICBsZW5ndGggPSAyOwogICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSA2NTUzNSkgewogICAgICAgIGhhbmRsZTMgPSAidSI7CiAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gNDI5NDk2NzI5NSkgewogICAgICAgIGhhbmRsZTMgPSAiVSI7CiAgICAgICAgbGVuZ3RoID0gODsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpOwogICAgICB9CiAgICAgIHJldHVybiAiXFwiICsgaGFuZGxlMyArIGNvbW1vbi5yZXBlYXQoIjAiLCBsZW5ndGggLSBzdHJpbmczLmxlbmd0aCkgKyBzdHJpbmczOwogICAgfQogICAgZnVuY3Rpb24gU3RhdGUob3B0aW9ucykgewogICAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnNbInNjaGVtYSJdIHx8IERFRkFVTFRfRlVMTF9TQ0hFTUE7CiAgICAgIHRoaXMuaW5kZW50ID0gTWF0aC5tYXgoMSwgb3B0aW9uc1siaW5kZW50Il0gfHwgMik7CiAgICAgIHRoaXMubm9BcnJheUluZGVudCA9IG9wdGlvbnNbIm5vQXJyYXlJbmRlbnQiXSB8fCBmYWxzZTsKICAgICAgdGhpcy5za2lwSW52YWxpZCA9IG9wdGlvbnNbInNraXBJbnZhbGlkIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMuZmxvd0xldmVsID0gY29tbW9uLmlzTm90aGluZyhvcHRpb25zWyJmbG93TGV2ZWwiXSkgPyAtMSA6IG9wdGlvbnNbImZsb3dMZXZlbCJdOwogICAgICB0aGlzLnN0eWxlTWFwID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zWyJzdHlsZXMiXSB8fCBudWxsKTsKICAgICAgdGhpcy5zb3J0S2V5cyA9IG9wdGlvbnNbInNvcnRLZXlzIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubGluZVdpZHRoID0gb3B0aW9uc1sibGluZVdpZHRoIl0gfHwgODA7CiAgICAgIHRoaXMubm9SZWZzID0gb3B0aW9uc1sibm9SZWZzIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubm9Db21wYXRNb2RlID0gb3B0aW9uc1sibm9Db21wYXRNb2RlIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMuY29uZGVuc2VGbG93ID0gb3B0aW9uc1siY29uZGVuc2VGbG93Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7CiAgICAgIHRoaXMuZXhwbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQ7CiAgICAgIHRoaXMudGFnID0gbnVsbDsKICAgICAgdGhpcy5yZXN1bHQgPSAiIjsKICAgICAgdGhpcy5kdXBsaWNhdGVzID0gW107CiAgICAgIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaW5kZW50U3RyaW5nKHN0cmluZzMsIHNwYWNlcykgewogICAgICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgiICIsIHNwYWNlcyksIHBvc2l0aW9uMyA9IDAsIG5leHQyID0gLTEsIHJlc3VsdCA9ICIiLCBsaW5lLCBsZW5ndGggPSBzdHJpbmczLmxlbmd0aDsKICAgICAgd2hpbGUgKHBvc2l0aW9uMyA8IGxlbmd0aCkgewogICAgICAgIG5leHQyID0gc3RyaW5nMy5pbmRleE9mKCJcbiIsIHBvc2l0aW9uMyk7CiAgICAgICAgaWYgKG5leHQyID09PSAtMSkgewogICAgICAgICAgbGluZSA9IHN0cmluZzMuc2xpY2UocG9zaXRpb24zKTsKICAgICAgICAgIHBvc2l0aW9uMyA9IGxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGluZSA9IHN0cmluZzMuc2xpY2UocG9zaXRpb24zLCBuZXh0MiArIDEpOwogICAgICAgICAgcG9zaXRpb24zID0gbmV4dDIgKyAxOwogICAgICAgIH0KICAgICAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gIlxuIikgcmVzdWx0ICs9IGluZDsKICAgICAgICByZXN1bHQgKz0gbGluZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCkgewogICAgICByZXR1cm4gIlxuIiArIGNvbW1vbi5yZXBlYXQoIiAiLCBzdGF0ZTEyLmluZGVudCAqIGxldmVsKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZTEyLCBzdHIpIHsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCB0eXBlNTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdHlwZTUgPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXNbaW5kZXgyXTsKICAgICAgICBpZiAodHlwZTUucmVzb2x2ZShzdHIpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSBDSEFSX1NQQUNFIHx8IGMxMSA9PT0gQ0hBUl9UQUI7CiAgICB9CiAgICBmdW5jdGlvbiBpc1ByaW50YWJsZShjMTEpIHsKICAgICAgcmV0dXJuIDMyIDw9IGMxMSAmJiBjMTEgPD0gMTI2IHx8IDE2MSA8PSBjMTEgJiYgYzExIDw9IDU1Mjk1ICYmIGMxMSAhPT0gODIzMiAmJiBjMTEgIT09IDgyMzMgfHwgNTczNDQgPD0gYzExICYmIGMxMSA8PSA2NTUzMyAmJiBjMTEgIT09IDY1Mjc5IHx8IDY1NTM2IDw9IGMxMSAmJiBjMTEgPD0gMTExNDExMTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnNDaGFyKGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiAhaXNXaGl0ZXNwYWNlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOICYmIGMxMSAhPT0gQ0hBUl9MSU5FX0ZFRUQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZShjMTEsIHByZXYpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX0NPTE9OICYmIChjMTEgIT09IENIQVJfU0hBUlAgfHwgcHJldiAmJiBpc05zQ2hhcihwcmV2KSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiBjMTEgIT09IDY1Mjc5ICYmICFpc1doaXRlc3BhY2UoYzExKSAmJiBjMTEgIT09IENIQVJfTUlOVVMgJiYgYzExICE9PSBDSEFSX1FVRVNUSU9OICYmIGMxMSAhPT0gQ0hBUl9DT0xPTiAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1NIQVJQICYmIGMxMSAhPT0gQ0hBUl9BTVBFUlNBTkQgJiYgYzExICE9PSBDSEFSX0FTVEVSSVNLICYmIGMxMSAhPT0gQ0hBUl9FWENMQU1BVElPTiAmJiBjMTEgIT09IENIQVJfVkVSVElDQUxfTElORSAmJiBjMTEgIT09IENIQVJfRVFVQUxTICYmIGMxMSAhPT0gQ0hBUl9HUkVBVEVSX1RIQU4gJiYgYzExICE9PSBDSEFSX1NJTkdMRV9RVU9URSAmJiBjMTEgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmIGMxMSAhPT0gQ0hBUl9QRVJDRU5UICYmIGMxMSAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUICYmIGMxMSAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpIHsKICAgICAgdmFyIGxlYWRpbmdTcGFjZVJlID0gL15cbiogLzsKICAgICAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nMyk7CiAgICB9CiAgICB2YXIgU1RZTEVfUExBSU4gPSAxLCBTVFlMRV9TSU5HTEUgPSAyLCBTVFlMRV9MSVRFUkFMID0gMywgU1RZTEVfRk9MREVEID0gNCwgU1RZTEVfRE9VQkxFID0gNTsKICAgIGZ1bmN0aW9uIGNob29zZVNjYWxhclN0eWxlKHN0cmluZzMsIHNpbmdsZUxpbmVPbmx5LCBpbmRlbnRQZXJMZXZlbCwgbGluZVdpZHRoLCB0ZXN0QW1iaWd1b3VzVHlwZSkgewogICAgICB2YXIgaTExOwogICAgICB2YXIgY2hhciwgcHJldl9jaGFyOwogICAgICB2YXIgaGFzTGluZUJyZWFrID0gZmFsc2U7CiAgICAgIHZhciBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTsKICAgICAgdmFyIHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xOwogICAgICB2YXIgcHJldmlvdXNMaW5lQnJlYWsgPSAtMTsKICAgICAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChzdHJpbmczLmNoYXJDb2RlQXQoMCkpICYmICFpc1doaXRlc3BhY2Uoc3RyaW5nMy5jaGFyQ29kZUF0KHN0cmluZzMubGVuZ3RoIC0gMSkpOwogICAgICBpZiAoc2luZ2xlTGluZU9ubHkpIHsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEpOwogICAgICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaTExID0gMDsgaTExIDwgc3RyaW5nMy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgICBpZiAoY2hhciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHsKICAgICAgICAgICAgaGFzTGluZUJyZWFrID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHsKICAgICAgICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgLy8gRm9sZGFibGUgbGluZSA9IHRvbyBsb25nLCBhbmQgbm90IG1vcmUtaW5kZW50ZWQuCiAgICAgICAgICAgICAgaTExIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZzNbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gIiAiOwogICAgICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTExOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fCBzaG91bGRUcmFja1dpZHRoICYmIChpMTEgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nM1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAiICIpOwogICAgICB9CiAgICAgIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHsKICAgICAgICByZXR1cm4gcGxhaW4gJiYgIXRlc3RBbWJpZ3VvdXNUeXBlKHN0cmluZzMpID8gU1RZTEVfUExBSU4gOiBTVFlMRV9TSU5HTEU7CiAgICAgIH0KICAgICAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpKSB7CiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgfQogICAgICByZXR1cm4gaGFzRm9sZGFibGVMaW5lID8gU1RZTEVfRk9MREVEIDogU1RZTEVfTElURVJBTDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlMTIsIHN0cmluZzMsIGxldmVsLCBpc2tleSkgewogICAgICBzdGF0ZTEyLmR1bXAgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHN0cmluZzMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIicnIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFzdGF0ZTEyLm5vQ29tcGF0TW9kZSAmJiBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZzMpICE9PSAtMSkgewogICAgICAgICAgcmV0dXJuICInIiArIHN0cmluZzMgKyAiJyI7CiAgICAgICAgfQogICAgICAgIHZhciBpbmRlbnQzID0gc3RhdGUxMi5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7CiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHN0YXRlMTIubGluZVdpZHRoID09PSAtMSA/IC0xIDogTWF0aC5tYXgoTWF0aC5taW4oc3RhdGUxMi5saW5lV2lkdGgsIDQwKSwgc3RhdGUxMi5saW5lV2lkdGggLSBpbmRlbnQzKTsKICAgICAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleSB8fCBzdGF0ZTEyLmZsb3dMZXZlbCA+IC0xICYmIGxldmVsID49IHN0YXRlMTIuZmxvd0xldmVsOwogICAgICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyaW5nNCkgewogICAgICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZTEyLCBzdHJpbmc0KTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChjaG9vc2VTY2FsYXJTdHlsZShzdHJpbmczLCBzaW5nbGVMaW5lT25seSwgc3RhdGUxMi5pbmRlbnQsIGxpbmVXaWR0aCwgdGVzdEFtYmlndWl0eSkpIHsKICAgICAgICAgIGNhc2UgU1RZTEVfUExBSU46CiAgICAgICAgICAgIHJldHVybiBzdHJpbmczOwogICAgICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6CiAgICAgICAgICAgIHJldHVybiAiJyIgKyBzdHJpbmczLnJlcGxhY2UoLycvZywgIicnIikgKyAiJyI7CiAgICAgICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6CiAgICAgICAgICAgIHJldHVybiAifCIgKyBibG9ja0hlYWRlcihzdHJpbmczLCBzdGF0ZTEyLmluZGVudCkgKyBkcm9wRW5kaW5nTmV3bGluZShpbmRlbnRTdHJpbmcoc3RyaW5nMywgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6CiAgICAgICAgICAgIHJldHVybiAiPiIgKyBibG9ja0hlYWRlcihzdHJpbmczLCBzdGF0ZTEyLmluZGVudCkgKyBkcm9wRW5kaW5nTmV3bGluZShpbmRlbnRTdHJpbmcoZm9sZFN0cmluZyhzdHJpbmczLCBsaW5lV2lkdGgpLCBpbmRlbnQzKSk7CiAgICAgICAgICBjYXNlIFNUWUxFX0RPVUJMRToKICAgICAgICAgICAgcmV0dXJuICciJyArIGVzY2FwZVN0cmluZyhzdHJpbmczLCBsaW5lV2lkdGgpICsgJyInOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlIik7CiAgICAgICAgfQogICAgICB9KSgpOwogICAgfQogICAgZnVuY3Rpb24gYmxvY2tIZWFkZXIoc3RyaW5nMywgaW5kZW50UGVyTGV2ZWwpIHsKICAgICAgdmFyIGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nMykgPyBTdHJpbmcoaW5kZW50UGVyTGV2ZWwpIDogIiI7CiAgICAgIHZhciBjbGlwID0gc3RyaW5nM1tzdHJpbmczLmxlbmd0aCAtIDFdID09PSAiXG4iOwogICAgICB2YXIga2VlcCA9IGNsaXAgJiYgKHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAyXSA9PT0gIlxuIiB8fCBzdHJpbmczID09PSAiXG4iKTsKICAgICAgdmFyIGNob21wID0ga2VlcCA/ICIrIiA6IGNsaXAgPyAiIiA6ICItIjsKICAgICAgcmV0dXJuIGluZGVudEluZGljYXRvciArIGNob21wICsgIlxuIjsKICAgIH0KICAgIGZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZzMpIHsKICAgICAgcmV0dXJuIHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAxXSA9PT0gIlxuIiA/IHN0cmluZzMuc2xpY2UoMCwgLTEpIDogc3RyaW5nMzsKICAgIH0KICAgIGZ1bmN0aW9uIGZvbGRTdHJpbmcoc3RyaW5nMywgd2lkdGgpIHsKICAgICAgdmFyIGxpbmVSZSA9IC8oXG4rKShbXlxuXSopL2c7CiAgICAgIHZhciByZXN1bHQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG5leHRMRiA9IHN0cmluZzMuaW5kZXhPZigiXG4iKTsKICAgICAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nMy5sZW5ndGg7CiAgICAgICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjsKICAgICAgICByZXR1cm4gZm9sZExpbmUoc3RyaW5nMy5zbGljZSgwLCBuZXh0TEYpLCB3aWR0aCk7CiAgICAgIH0pKCk7CiAgICAgIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nM1swXSA9PT0gIlxuIiB8fCBzdHJpbmczWzBdID09PSAiICI7CiAgICAgIHZhciBtb3JlSW5kZW50ZWQ7CiAgICAgIHZhciBtYXRjaDI7CiAgICAgIHdoaWxlIChtYXRjaDIgPSBsaW5lUmUuZXhlYyhzdHJpbmczKSkgewogICAgICAgIHZhciBwcmVmaXg0ID0gbWF0Y2gyWzFdLCBsaW5lID0gbWF0Y2gyWzJdOwogICAgICAgIG1vcmVJbmRlbnRlZCA9IGxpbmVbMF0gPT09ICIgIjsKICAgICAgICByZXN1bHQgKz0gcHJlZml4NCArICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09ICIiID8gIlxuIiA6ICIiKSArIGZvbGRMaW5lKGxpbmUsIHdpZHRoKTsKICAgICAgICBwcmV2TW9yZUluZGVudGVkID0gbW9yZUluZGVudGVkOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkgewogICAgICBpZiAobGluZSA9PT0gIiIgfHwgbGluZVswXSA9PT0gIiAiKSByZXR1cm4gbGluZTsKICAgICAgdmFyIGJyZWFrUmUgPSAvIFteIF0vZzsKICAgICAgdmFyIG1hdGNoMjsKICAgICAgdmFyIHN0YXJ0ID0gMCwgZW5kMywgY3VyciA9IDAsIG5leHQyID0gMDsKICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICB3aGlsZSAobWF0Y2gyID0gYnJlYWtSZS5leGVjKGxpbmUpKSB7CiAgICAgICAgbmV4dDIgPSBtYXRjaDIuaW5kZXg7CiAgICAgICAgaWYgKG5leHQyIC0gc3RhcnQgPiB3aWR0aCkgewogICAgICAgICAgZW5kMyA9IGN1cnIgPiBzdGFydCA/IGN1cnIgOiBuZXh0MjsKICAgICAgICAgIHJlc3VsdCArPSAiXG4iICsgbGluZS5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgICAgICBzdGFydCA9IGVuZDMgKyAxOwogICAgICAgIH0KICAgICAgICBjdXJyID0gbmV4dDI7CiAgICAgIH0KICAgICAgcmVzdWx0ICs9ICJcbiI7CiAgICAgIGlmIChsaW5lLmxlbmd0aCAtIHN0YXJ0ID4gd2lkdGggJiYgY3VyciA+IHN0YXJ0KSB7CiAgICAgICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQsIGN1cnIpICsgIlxuIiArIGxpbmUuc2xpY2UoY3VyciArIDEpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDEpOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cmluZzMpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICB2YXIgY2hhciwgbmV4dENoYXI7CiAgICAgIHZhciBlc2NhcGVTZXE7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGNoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICBpZiAoY2hhciA+PSA1NTI5NiAmJiBjaGFyIDw9IDU2MzE5KSB7CiAgICAgICAgICBuZXh0Q2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEgKyAxKTsKICAgICAgICAgIGlmIChuZXh0Q2hhciA+PSA1NjMyMCAmJiBuZXh0Q2hhciA8PSA1NzM0MykgewogICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSGV4KChjaGFyIC0gNTUyOTYpICogMTAyNCArIG5leHRDaGFyIC0gNTYzMjAgKyA2NTUzNik7CiAgICAgICAgICAgIGkxMSsrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTsKICAgICAgICByZXN1bHQgKz0gIWVzY2FwZVNlcSAmJiBpc1ByaW50YWJsZShjaGFyKSA/IHN0cmluZzNbaTExXSA6IGVzY2FwZVNlcSB8fCBlbmNvZGVIZXgoY2hhcik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlMTIsIGxldmVsLCBvYmplY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTIudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0W2luZGV4Ml0sIGZhbHNlLCBmYWxzZSkpIHsKICAgICAgICAgIGlmIChpbmRleDIgIT09IDApIF9yZXN1bHQgKz0gIiwiICsgKCFzdGF0ZTEyLmNvbmRlbnNlRmxvdyA/ICIgIiA6ICIiKTsKICAgICAgICAgIF9yZXN1bHQgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9ICJbIiArIF9yZXN1bHQgKyAiXSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUxMi50YWcsIGluZGV4MiwgbGVuZ3RoOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBpZiAod3JpdGVOb2RlKHN0YXRlMTIsIGxldmVsICsgMSwgb2JqZWN0W2luZGV4Ml0sIHRydWUsIHRydWUpKSB7CiAgICAgICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXgyICE9PSAwKSB7CiAgICAgICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdGUxMi5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZTEyLmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgICBfcmVzdWx0ICs9ICItIjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9yZXN1bHQgKz0gIi0gIjsKICAgICAgICAgIH0KICAgICAgICAgIF9yZXN1bHQgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9IF9yZXN1bHQgfHwgIltdIjsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUxMi50YWcsIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLCBpbmRleDIsIGxlbmd0aCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSwgcGFpckJ1ZmZlcjsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXJCdWZmZXIgPSAiIjsKICAgICAgICBpZiAoaW5kZXgyICE9PSAwKSBwYWlyQnVmZmVyICs9ICIsICI7CiAgICAgICAgaWYgKHN0YXRlMTIuY29uZGVuc2VGbG93KSBwYWlyQnVmZmVyICs9ICciJzsKICAgICAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4Ml07CiAgICAgICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTsKICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIuZHVtcC5sZW5ndGggPiAxMDI0KSBwYWlyQnVmZmVyICs9ICI/ICI7CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTEyLmR1bXAgKyAoc3RhdGUxMi5jb25kZW5zZUZsb3cgPyAnIicgOiAiIikgKyAiOiIgKyAoc3RhdGUxMi5jb25kZW5zZUZsb3cgPyAiIiA6ICIgIik7CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdFZhbHVlLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTEyLmR1bXA7CiAgICAgICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyOwogICAgICB9CiAgICAgIHN0YXRlMTIudGFnID0gX3RhZzsKICAgICAgc3RhdGUxMi5kdW1wID0gInsiICsgX3Jlc3VsdCArICJ9IjsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTIudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSwgaW5kZXgyLCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIGV4cGxpY2l0UGFpciwgcGFpckJ1ZmZlcjsKICAgICAgaWYgKHN0YXRlMTIuc29ydEtleXMgPT09IHRydWUpIHsKICAgICAgICBvYmplY3RLZXlMaXN0LnNvcnQoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUxMi5zb3J0S2V5cyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZTEyLnNvcnRLZXlzKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLnNvcnRLZXlzKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgcGFpckJ1ZmZlciA9ICIiOwogICAgICAgIGlmICghY29tcGFjdCB8fCBpbmRleDIgIT09IDApIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCk7CiAgICAgICAgfQogICAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXgyXTsKICAgICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlMTIsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGV4cGxpY2l0UGFpciA9IHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIgfHwgc3RhdGUxMi5kdW1wICYmIHN0YXRlMTIuZHVtcC5sZW5ndGggPiAxMDI0OwogICAgICAgIGlmIChleHBsaWNpdFBhaXIpIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlMTIuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8iOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwYWlyQnVmZmVyICs9IHN0YXRlMTIuZHVtcDsKICAgICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxMiwgbGV2ZWwpOwogICAgICAgIH0KICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCArIDEsIG9iamVjdFZhbHVlLCB0cnVlLCBleHBsaWNpdFBhaXIpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUxMi5kdW1wLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIjoiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9ICI6ICI7CiAgICAgICAgfQogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjsKICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9IF9yZXN1bHQgfHwgInt9IjsKICAgIH0KICAgIGZ1bmN0aW9uIGRldGVjdFR5cGUoc3RhdGUxMiwgb2JqZWN0LCBleHBsaWNpdCkgewogICAgICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4MiwgbGVuZ3RoLCB0eXBlNSwgc3R5bGU7CiAgICAgIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZTEyLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZTEyLmltcGxpY2l0VHlwZXM7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdHlwZTUgPSB0eXBlTGlzdFtpbmRleDJdOwogICAgICAgIGlmICgodHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlNS5wcmVkaWNhdGUpICYmICghdHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IiAmJiBvYmplY3QgaW5zdGFuY2VvZiB0eXBlNS5pbnN0YW5jZU9mKSAmJiAoIXR5cGU1LnByZWRpY2F0ZSB8fCB0eXBlNS5wcmVkaWNhdGUob2JqZWN0KSkpIHsKICAgICAgICAgIHN0YXRlMTIudGFnID0gZXhwbGljaXQgPyB0eXBlNS50YWcgOiAiPyI7CiAgICAgICAgICBpZiAodHlwZTUucmVwcmVzZW50KSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUxMi5zdHlsZU1hcFt0eXBlNS50YWddIHx8IHR5cGU1LmRlZmF1bHRTdHlsZTsKICAgICAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHR5cGU1LnJlcHJlc2VudCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgICBfcmVzdWx0ID0gdHlwZTUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGU1LnJlcHJlc2VudCwgc3R5bGUpKSB7CiAgICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGU1LnJlcHJlc2VudFtzdHlsZV0ob2JqZWN0LCBzdHlsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIiE8IiArIHR5cGU1LnRhZyArICc+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCAiJyArIHN0eWxlICsgJyIgc3R5bGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGF0ZTEyLmR1bXAgPSBfcmVzdWx0OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0LCBibG9jaywgY29tcGFjdCwgaXNrZXkpIHsKICAgICAgc3RhdGUxMi50YWcgPSBudWxsOwogICAgICBzdGF0ZTEyLmR1bXAgPSBvYmplY3Q7CiAgICAgIGlmICghZGV0ZWN0VHlwZShzdGF0ZTEyLCBvYmplY3QsIGZhbHNlKSkgewogICAgICAgIGRldGVjdFR5cGUoc3RhdGUxMiwgb2JqZWN0LCB0cnVlKTsKICAgICAgfQogICAgICB2YXIgdHlwZTUgPSBfdG9TdHJpbmcuY2FsbChzdGF0ZTEyLmR1bXApOwogICAgICBpZiAoYmxvY2spIHsKICAgICAgICBibG9jayA9IHN0YXRlMTIuZmxvd0xldmVsIDwgMCB8fCBzdGF0ZTEyLmZsb3dMZXZlbCA+IGxldmVsOwogICAgICB9CiAgICAgIHZhciBvYmplY3RPckFycmF5ID0gdHlwZTUgPT09ICJbb2JqZWN0IE9iamVjdF0iIHx8IHR5cGU1ID09PSAiW29iamVjdCBBcnJheV0iLCBkdXBsaWNhdGVJbmRleCwgZHVwbGljYXRlOwogICAgICBpZiAob2JqZWN0T3JBcnJheSkgewogICAgICAgIGR1cGxpY2F0ZUluZGV4ID0gc3RhdGUxMi5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTsKICAgICAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIgfHwgZHVwbGljYXRlIHx8IHN0YXRlMTIuaW5kZW50ICE9PSAyICYmIGxldmVsID4gMCkgewogICAgICAgIGNvbXBhY3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoZHVwbGljYXRlICYmIHN0YXRlMTIudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7CiAgICAgICAgc3RhdGUxMi5kdW1wID0gIipyZWZfIiArIGR1cGxpY2F0ZUluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUxMi51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHsKICAgICAgICAgIHN0YXRlMTIudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGU1ID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgICAgaWYgKGJsb2NrICYmIE9iamVjdC5rZXlzKHN0YXRlMTIuZHVtcCkubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBzdGF0ZTEyLmR1bXAsIGNvbXBhY3QpOwogICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5kdW1wID0gIiZyZWZfIiArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUxMi5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBzdGF0ZTEyLmR1bXApOwogICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5kdW1wID0gIiZyZWZfIiArIGR1cGxpY2F0ZUluZGV4ICsgIiAiICsgc3RhdGUxMi5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gIltvYmplY3QgQXJyYXldIikgewogICAgICAgICAgdmFyIGFycmF5TGV2ZWwgPSBzdGF0ZTEyLm5vQXJyYXlJbmRlbnQgJiYgbGV2ZWwgPiAwID8gbGV2ZWwgLSAxIDogbGV2ZWw7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgc3RhdGUxMi5kdW1wLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUxMiwgYXJyYXlMZXZlbCwgc3RhdGUxMi5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlMTIuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUxMiwgYXJyYXlMZXZlbCwgc3RhdGUxMi5kdW1wKTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArICIgIiArIHN0YXRlMTIuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJbb2JqZWN0IFN0cmluZ10iKSB7CiAgICAgICAgICBpZiAoc3RhdGUxMi50YWcgIT09ICI/IikgewogICAgICAgICAgICB3cml0ZVNjYWxhcihzdGF0ZTEyLCBzdGF0ZTEyLmR1bXAsIGxldmVsLCBpc2tleSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIiArIHR5cGU1KTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIpIHsKICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICIhPCIgKyBzdGF0ZTEyLnRhZyArICI+ICIgKyBzdGF0ZTEyLmR1bXA7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlMTIpIHsKICAgICAgdmFyIG9iamVjdHMgPSBbXSwgZHVwbGljYXRlc0luZGV4ZXMgPSBbXSwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHN0YXRlMTIuZHVwbGljYXRlcy5wdXNoKG9iamVjdHNbZHVwbGljYXRlc0luZGV4ZXNbaW5kZXgyXV0pOwogICAgICB9CiAgICAgIHN0YXRlMTIudXNlZER1cGxpY2F0ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpIHsKICAgICAgdmFyIG9iamVjdEtleUxpc3QsIGluZGV4MiwgbGVuZ3RoOwogICAgICBpZiAob2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3QiKSB7CiAgICAgICAgaW5kZXgyID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gLTEpIHsKICAgICAgICAgIGlmIChkdXBsaWNhdGVzSW5kZXhlcy5pbmRleE9mKGluZGV4MikgPT09IC0xKSB7CiAgICAgICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgyKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtpbmRleDJdLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXgyXV0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgdmFyIHN0YXRlMTIgPSBuZXcgU3RhdGUob3B0aW9ucyk7CiAgICAgIGlmICghc3RhdGUxMi5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlMTIpOwogICAgICBpZiAod3JpdGVOb2RlKHN0YXRlMTIsIDAsIGlucHV0LCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlMTIuZHVtcCArICJcbiI7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIHNhZmVEdW1wKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBkdW1wKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmR1bXAgPSBkdW1wOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBzYWZlRHVtcDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzCnZhciByZXF1aXJlX2pzX3lhbWwgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBsb2FkZXIgPSByZXF1aXJlX2xvYWRlcigpOwogICAgdmFyIGR1bXBlciA9IHJlcXVpcmVfZHVtcGVyKCk7CiAgICBmdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gIiArIG5hbWUgKyAiIGlzIGRlcHJlY2F0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkLiIpOwogICAgICB9OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMuVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuU2NoZW1hID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzLkZBSUxTQUZFX1NDSEVNQSA9IHJlcXVpcmVfZmFpbHNhZmUoKTsKICAgIG1vZHVsZS5leHBvcnRzLkpTT05fU0NIRU1BID0gcmVxdWlyZV9qc29uKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5DT1JFX1NDSEVNQSA9IHJlcXVpcmVfY29yZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIG1vZHVsZS5leHBvcnRzLmxvYWQgPSBsb2FkZXIubG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkZXIubG9hZEFsbDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkID0gbG9hZGVyLnNhZmVMb2FkOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUxvYWRBbGwgPSBsb2FkZXIuc2FmZUxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5kdW1wID0gZHVtcGVyLmR1bXA7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlRHVtcCA9IGR1bXBlci5zYWZlRHVtcDsKICAgIG1vZHVsZS5leHBvcnRzLllBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgbW9kdWxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUEgPSByZXF1aXJlX2ZhaWxzYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5zY2FuID0gZGVwcmVjYXRlZCgic2NhbiIpOwogICAgbW9kdWxlLmV4cG9ydHMucGFyc2UgPSBkZXByZWNhdGVkKCJwYXJzZSIpOwogICAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IGRlcHJlY2F0ZWQoImNvbXBvc2UiKTsKICAgIG1vZHVsZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yID0gZGVwcmVjYXRlZCgiYWRkQ29uc3RydWN0b3IiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2luZGV4LmpzCnZhciByZXF1aXJlX2pzX3lhbWwyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgeWFtbCA9IHJlcXVpcmVfanNfeWFtbCgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSB5YW1sOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9zbWFydHlhbWwucGx1Z2lucy5qcwp2YXIgcmVxdWlyZV9zbWFydHlhbWxfcGx1Z2lucyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9zbWFydHlhbWwucGx1Z2lucy5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIF9fY3JlYXRlQmluZGluZzIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgazIyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIG02W2s0XTsKICAgICAgfSB9KTsKICAgIH0pIDogKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgbzEzW2syMl0gPSBtNltrNF07CiAgICB9KSk7CiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0MiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobzEzLCAiZGVmYXVsdCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHY1IH0pOwogICAgfSkgOiBmdW5jdGlvbihvMTMsIHY1KSB7CiAgICAgIG8xM1siZGVmYXVsdCJdID0gdjU7CiAgICB9KTsKICAgIHZhciBfX2ltcG9ydFN0YXIyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICBpZiAobW9kICE9IG51bGwpIHsKICAgICAgICBmb3IgKHZhciBrNCBpbiBtb2QpIGlmIChrNCAhPT0gImRlZmF1bHQiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgazQpKSBfX2NyZWF0ZUJpbmRpbmcyKHJlc3VsdCwgbW9kLCBrNCk7CiAgICAgIH0KICAgICAgX19zZXRNb2R1bGVEZWZhdWx0MihyZXN1bHQsIG1vZCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMuanNZYW1sID0gdm9pZCAwOwogICAgdmFyIGpzWWFtbCA9IF9faW1wb3J0U3RhcjIocmVxdWlyZV9qc195YW1sMigpKTsKICAgIGV4cG9ydHMuanNZYW1sID0ganNZYW1sOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0X3RzMiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9pbmRleC5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIF9fY3JlYXRlQmluZGluZzIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgazIyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIG02W2s0XTsKICAgICAgfSB9KTsKICAgIH0pIDogKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgbzEzW2syMl0gPSBtNltrNF07CiAgICB9KSk7CiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0MiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobzEzLCAiZGVmYXVsdCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHY1IH0pOwogICAgfSkgOiBmdW5jdGlvbihvMTMsIHY1KSB7CiAgICAgIG8xM1siZGVmYXVsdCJdID0gdjU7CiAgICB9KTsKICAgIHZhciBfX2ltcG9ydFN0YXIyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICBpZiAobW9kICE9IG51bGwpIHsKICAgICAgICBmb3IgKHZhciBrNCBpbiBtb2QpIGlmIChrNCAhPT0gImRlZmF1bHQiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgazQpKSBfX2NyZWF0ZUJpbmRpbmcyKHJlc3VsdCwgbW9kLCBrNCk7CiAgICAgIH0KICAgICAgX19zZXRNb2R1bGVEZWZhdWx0MihyZXN1bHQsIG1vZCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMub2JqZWN0VG9ZYW1sU3RyaW5nID0gZXhwb3J0cy55YW1sU3RyaW5nVG9PYmplY3QgPSB2b2lkIDA7CiAgICB2YXIgcGx1Z2luczMgPSBfX2ltcG9ydFN0YXIyKHJlcXVpcmVfc21hcnR5YW1sX3BsdWdpbnMoKSk7CiAgICBleHBvcnRzLnlhbWxTdHJpbmdUb09iamVjdCA9IGFzeW5jICh5YW1sU3RyaW5nQXJnLCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgcmV0dXJuIHBsdWdpbnMzLmpzWWFtbC5zYWZlTG9hZCh5YW1sU3RyaW5nQXJnKTsKICAgIH07CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGFzeW5jIChvYmplY3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICByZXR1cm4gcGx1Z2luczMuanNZYW1sLnNhZmVEdW1wKG9iamVjdEFyZyk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYmFpbEAyLjAuMi9ub2RlX21vZHVsZXMvYmFpbC9pbmRleC5qcwpmdW5jdGlvbiBiYWlsKGVycm9yKSB7CiAgaWYgKGVycm9yKSB7CiAgICB0aHJvdyBlcnJvcjsKICB9Cn0KdmFyIGluaXRfYmFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2JhaWxAMi4wLjIvbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMKdmFyIHJlcXVpcmVfZXh0ZW5kID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9leHRlbmRAMy4wLjIvbm9kZV9tb2R1bGVzL2V4dGVuZC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICB2YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CiAgICB2YXIgaXNBcnJheTMgPSBmdW5jdGlvbiBpc0FycmF5NChhcnIpIHsKICAgICAgaWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTsKICAgICAgfQogICAgICByZXR1cm4gdG9TdHIuY2FsbChhcnIpID09PSAiW29iamVjdCBBcnJheV0iOwogICAgfTsKICAgIHZhciBpc1BsYWluT2JqZWN0MiA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QzKG9iaikgewogICAgICBpZiAoIW9iaiB8fCB0b1N0ci5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgImNvbnN0cnVjdG9yIik7CiAgICAgIHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKTsKICAgICAgaWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGtleTI7CiAgICAgIGZvciAoa2V5MiBpbiBvYmopIHsKICAgICAgfQogICAgICByZXR1cm4gdHlwZW9mIGtleTIgPT09ICJ1bmRlZmluZWQiIHx8IGhhc093bi5jYWxsKG9iaiwga2V5Mik7CiAgICB9OwogICAgdmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkyKHRhcmdldCwgb3B0aW9ucykgewogICAgICBpZiAoZGVmaW5lUHJvcGVydHkgJiYgb3B0aW9ucy5uYW1lID09PSAiX19wcm90b19fIikgewogICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgb3B0aW9ucy5uYW1lLCB7CiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgdmFsdWU6IG9wdGlvbnMubmV3VmFsdWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRhcmdldFtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy5uZXdWYWx1ZTsKICAgICAgfQogICAgfTsKICAgIHZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5MihvYmosIG5hbWUpIHsKICAgICAgaWYgKG5hbWUgPT09ICJfX3Byb3RvX18iKSB7CiAgICAgICAgaWYgKCFoYXNPd24uY2FsbChvYmosIG5hbWUpKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0gZWxzZSBpZiAoZ09QRCkgewogICAgICAgICAgcmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9ialtuYW1lXTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZDMoKSB7CiAgICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTsKICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTsKICAgICAgdmFyIGkxMSA9IDE7CiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwogICAgICB2YXIgZGVlcCA9IGZhbHNlOwogICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgZGVlcCA9IHRhcmdldDsKICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CiAgICAgICAgaTExID0gMjsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09IG51bGwgfHwgdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHRhcmdldCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHRhcmdldCA9IHt9OwogICAgICB9CiAgICAgIGZvciAoOyBpMTEgPCBsZW5ndGg7ICsraTExKSB7CiAgICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1tpMTFdOwogICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHsKICAgICAgICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7CiAgICAgICAgICAgIHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7CiAgICAgICAgICAgIGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTsKICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gY29weSkgewogICAgICAgICAgICAgIGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QyKGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkzKGNvcHkpKSkpIHsKICAgICAgICAgICAgICAgIGlmIChjb3B5SXNBcnJheSkgewogICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBpc0FycmF5MyhzcmMpID8gc3JjIDogW107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0MihzcmMpID8gc3JjIDoge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZSwgbmV3VmFsdWU6IGV4dGVuZDMoZGVlcCwgY2xvbmUsIGNvcHkpIH0pOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMKZnVuY3Rpb24gZGVwcmVjYXRlKGZuKSB7CiAgcmV0dXJuIGZuOwp9CmZ1bmN0aW9uIGVxdWFsKCkgewp9CmZ1bmN0aW9uIG9rKCkgewp9CmZ1bmN0aW9uIHVucmVhY2hhYmxlKCkgewp9CnZhciBpbml0X2RlZmF1bHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kZXZsb3BAMS4xLjAvbm9kZV9tb2R1bGVzL2RldmxvcC9saWIvZGVmYXVsdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1wbGFpbi1vYmpANC4xLjAvbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iai9pbmRleC5qcwpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlMikgewogIGlmICh0eXBlb2YgdmFsdWUyICE9PSAib2JqZWN0IiB8fCB2YWx1ZTIgPT09IG51bGwpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlMik7CiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZTIpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlMik7Cn0KdmFyIGluaXRfaXNfcGxhaW5fb2JqID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaXMtcGxhaW4tb2JqQDQuMS4wL25vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmovaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHJvdWdoQDIuMi4wL25vZGVfbW9kdWxlcy90cm91Z2gvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRyb3VnaCgpIHsKICBjb25zdCBmbnMgPSBbXTsKICBjb25zdCBwaXBlbGluZSA9IHsgcnVuLCB1c2UgfTsKICByZXR1cm4gcGlwZWxpbmU7CiAgZnVuY3Rpb24gcnVuKC4uLnZhbHVlcykgewogICAgbGV0IG1pZGRsZXdhcmVJbmRleCA9IC0xOwogICAgY29uc3QgY2FsbGJhY2sgPSB2YWx1ZXMucG9wKCk7CiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uIGFzIGxhc3QgYXJndW1lbnQsIG5vdCAiICsgY2FsbGJhY2spOwogICAgfQogICAgbmV4dDIobnVsbCwgLi4udmFsdWVzKTsKICAgIGZ1bmN0aW9uIG5leHQyKGVycm9yLCAuLi5vdXRwdXQpIHsKICAgICAgY29uc3QgZm4gPSBmbnNbKyttaWRkbGV3YXJlSW5kZXhdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIGlmIChlcnJvcikgewogICAgICAgIGNhbGxiYWNrKGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgICAgIGlmIChvdXRwdXRbaW5kZXgyXSA9PT0gbnVsbCB8fCBvdXRwdXRbaW5kZXgyXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvdXRwdXRbaW5kZXgyXSA9IHZhbHVlc1tpbmRleDJdOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWx1ZXMgPSBvdXRwdXQ7CiAgICAgIGlmIChmbikgewogICAgICAgIHdyYXAyKGZuLCBuZXh0MikoLi4ub3V0cHV0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjayhudWxsLCAuLi5vdXRwdXQpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIHVzZShtaWRkZWx3YXJlKSB7CiAgICBpZiAodHlwZW9mIG1pZGRlbHdhcmUgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICAiRXhwZWN0ZWQgYG1pZGRlbHdhcmVgIHRvIGJlIGEgZnVuY3Rpb24sIG5vdCAiICsgbWlkZGVsd2FyZQogICAgICApOwogICAgfQogICAgZm5zLnB1c2gobWlkZGVsd2FyZSk7CiAgICByZXR1cm4gcGlwZWxpbmU7CiAgfQp9CmZ1bmN0aW9uIHdyYXAyKG1pZGRsZXdhcmUsIGNhbGxiYWNrKSB7CiAgbGV0IGNhbGxlZDsKICByZXR1cm4gd3JhcHBlZDsKICBmdW5jdGlvbiB3cmFwcGVkKC4uLnBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IGZuRXhwZWN0c0NhbGxiYWNrID0gbWlkZGxld2FyZS5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGxldCByZXN1bHQ7CiAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2spIHsKICAgICAgcGFyYW1ldGVycy5wdXNoKGRvbmUpOwogICAgfQogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gbWlkZGxld2FyZS5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9ICgKICAgICAgICAvKiogQHR5cGUge0Vycm9yfSAqLwogICAgICAgIGVycm9yCiAgICAgICk7CiAgICAgIGlmIChmbkV4cGVjdHNDYWxsYmFjayAmJiBjYWxsZWQpIHsKICAgICAgICB0aHJvdyBleGNlcHRpb247CiAgICAgIH0KICAgICAgcmV0dXJuIGRvbmUoZXhjZXB0aW9uKTsKICAgIH0KICAgIGlmICghZm5FeHBlY3RzQ2FsbGJhY2spIHsKICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXN1bHQudGhlbih0aGVuLCBkb25lKTsKICAgICAgfSBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgIGRvbmUocmVzdWx0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGVuKHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZG9uZShlcnJvciwgLi4ub3V0cHV0KSB7CiAgICBpZiAoIWNhbGxlZCkgewogICAgICBjYWxsZWQgPSB0cnVlOwogICAgICBjYWxsYmFjayhlcnJvciwgLi4ub3V0cHV0KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gdGhlbih2YWx1ZTIpIHsKICAgIGRvbmUobnVsbCwgdmFsdWUyKTsKICB9Cn0KdmFyIGluaXRfbGliID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHJvdWdoQDIuMi4wL25vZGVfbW9kdWxlcy90cm91Z2gvbGliL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzCnZhciBpbml0X3Ryb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHN0cmluZ2lmeVBvc2l0aW9uKHZhbHVlMikgewogIGlmICghdmFsdWUyIHx8IHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGlmICgicG9zaXRpb24iIGluIHZhbHVlMiB8fCAidHlwZSIgaW4gdmFsdWUyKSB7CiAgICByZXR1cm4gcG9zaXRpb24odmFsdWUyLnBvc2l0aW9uKTsKICB9CiAgaWYgKCJzdGFydCIgaW4gdmFsdWUyIHx8ICJlbmQiIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlMik7CiAgfQogIGlmICgibGluZSIgaW4gdmFsdWUyIHx8ICJjb2x1bW4iIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvaW50KHZhbHVlMik7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBwb2ludChwb2ludDQpIHsKICByZXR1cm4gaW5kZXgocG9pbnQ0ICYmIHBvaW50NC5saW5lKSArICI6IiArIGluZGV4KHBvaW50NCAmJiBwb2ludDQuY29sdW1uKTsKfQpmdW5jdGlvbiBwb3NpdGlvbihwb3MpIHsKICByZXR1cm4gcG9pbnQocG9zICYmIHBvcy5zdGFydCkgKyAiLSIgKyBwb2ludChwb3MgJiYgcG9zLmVuZCk7Cn0KZnVuY3Rpb24gaW5kZXgodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIiA/IHZhbHVlMiA6IDE7Cn0KdmFyIGluaXRfbGliMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9saWIvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfc3RyaW5naWZ5X3Bvc2l0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9saWIvaW5kZXguanMKdmFyIFZGaWxlTWVzc2FnZTsKdmFyIGluaXRfbGliMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9zdHJpbmdpZnlfcG9zaXRpb24oKTsKICAgIFZGaWxlTWVzc2FnZSA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAuCiAgICAgICAqCiAgICAgICAqID4g8J+qpiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5zdGFuY2Ugb2YgYFZGaWxlTWVzc2FnZWAuCiAgICAgICAqLwogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eQogICAgICBjb25zdHJ1Y3RvcihjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIG9yaWdpbiA9IG9wdGlvbnNPclBhcmVudE9yUGxhY2U7CiAgICAgICAgICBvcHRpb25zT3JQYXJlbnRPclBsYWNlID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICBsZXQgcmVhc29uID0gIiI7CiAgICAgICAgbGV0IG9wdGlvbnMgPSB7fTsKICAgICAgICBsZXQgbGVnYWN5Q2F1c2UgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9uc09yUGFyZW50T3JQbGFjZSkgewogICAgICAgICAgaWYgKCJsaW5lIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmICJjb2x1bW4iIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0gZWxzZSBpZiAoInN0YXJ0IiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmICJlbmQiIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0gZWxzZSBpZiAoInR5cGUiIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsKICAgICAgICAgICAgICBhbmNlc3RvcnM6IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXSwKICAgICAgICAgICAgICBwbGFjZTogb3B0aW9uc09yUGFyZW50T3JQbGFjZS5wb3NpdGlvbgogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9uc09yUGFyZW50T3JQbGFjZSB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGNhdXNlT3JSZWFzb24gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZWFzb24gPSBjYXVzZU9yUmVhc29uOwogICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuY2F1c2UgJiYgY2F1c2VPclJlYXNvbikgewogICAgICAgICAgbGVnYWN5Q2F1c2UgPSB0cnVlOwogICAgICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbi5tZXNzYWdlOwogICAgICAgICAgb3B0aW9ucy5jYXVzZSA9IGNhdXNlT3JSZWFzb247CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucy5ydWxlSWQgJiYgIW9wdGlvbnMuc291cmNlICYmIHR5cGVvZiBvcmlnaW4gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBjb25zdCBpbmRleDIgPSBvcmlnaW4uaW5kZXhPZigiOiIpOwogICAgICAgICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvcHRpb25zLnNvdXJjZSA9IG9yaWdpbi5zbGljZSgwLCBpbmRleDIpOwogICAgICAgICAgICBvcHRpb25zLnJ1bGVJZCA9IG9yaWdpbi5zbGljZShpbmRleDIgKyAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWNlICYmIG9wdGlvbnMuYW5jZXN0b3JzICYmIG9wdGlvbnMuYW5jZXN0b3JzKSB7CiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBvcHRpb25zLmFuY2VzdG9yc1tvcHRpb25zLmFuY2VzdG9ycy5sZW5ndGggLSAxXTsKICAgICAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgICAgb3B0aW9ucy5wbGFjZSA9IHBhcmVudC5wb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnBsYWNlICYmICJzdGFydCIgaW4gb3B0aW9ucy5wbGFjZSA/IG9wdGlvbnMucGxhY2Uuc3RhcnQgOiBvcHRpb25zLnBsYWNlOwogICAgICAgIHRoaXMuYW5jZXN0b3JzID0gb3B0aW9ucy5hbmNlc3RvcnMgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuY2F1c2UgPSBvcHRpb25zLmNhdXNlIHx8IHZvaWQgMDsKICAgICAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0ID8gc3RhcnQuY29sdW1uIDogdm9pZCAwOwogICAgICAgIHRoaXMuZmF0YWwgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5maWxlID0gIiI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVhc29uOwogICAgICAgIHRoaXMubGluZSA9IHN0YXJ0ID8gc3RhcnQubGluZSA6IHZvaWQgMDsKICAgICAgICB0aGlzLm5hbWUgPSBzdHJpbmdpZnlQb3NpdGlvbihvcHRpb25zLnBsYWNlKSB8fCAiMToxIjsKICAgICAgICB0aGlzLnBsYWNlID0gb3B0aW9ucy5wbGFjZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLm1lc3NhZ2U7CiAgICAgICAgdGhpcy5ydWxlSWQgPSBvcHRpb25zLnJ1bGVJZCB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5zb3VyY2UgPSBvcHRpb25zLnNvdXJjZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5zdGFjayA9IGxlZ2FjeUNhdXNlICYmIG9wdGlvbnMuY2F1c2UgJiYgdHlwZW9mIG9wdGlvbnMuY2F1c2Uuc3RhY2sgPT09ICJzdHJpbmciID8gb3B0aW9ucy5jYXVzZS5zdGFjayA6ICIiOwogICAgICAgIHRoaXMuYWN0dWFsID0gdm9pZCAwOwogICAgICAgIHRoaXMuZXhwZWN0ZWQgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5ub3RlID0gdm9pZCAwOwogICAgICAgIHRoaXMudXJsID0gdm9pZCAwOwogICAgICB9CiAgICB9OwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5maWxlID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLm5hbWUgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUucmVhc29uID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLm1lc3NhZ2UgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc3RhY2sgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuY29sdW1uID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5saW5lID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5hbmNlc3RvcnMgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNhdXNlID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5mYXRhbCA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUucGxhY2UgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJ1bGVJZCA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc291cmNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9pbmRleC5qcwp2YXIgaW5pdF92ZmlsZV9tZXNzYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucGF0aC5icm93c2VyLmpzCmZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgyLCBleHRuYW1lMikgewogIGlmIChleHRuYW1lMiAhPT0gdm9pZCAwICYmIHR5cGVvZiBleHRuYW1lMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICB9CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgZW5kMyA9IC0xOwogIGxldCBpbmRleDIgPSBwYXRoMi5sZW5ndGg7CiAgbGV0IHNlZW5Ob25TbGFzaDsKICBpZiAoZXh0bmFtZTIgPT09IHZvaWQgMCB8fCBleHRuYW1lMi5sZW5ndGggPT09IDAgfHwgZXh0bmFtZTIubGVuZ3RoID4gcGF0aDIubGVuZ3RoKSB7CiAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgaWYgKHBhdGgyLmNvZGVQb2ludEF0KGluZGV4MikgPT09IDQ3KSB7CiAgICAgICAgaWYgKHNlZW5Ob25TbGFzaCkgewogICAgICAgICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVuZDMgPCAwKSB7CiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZTsKICAgICAgICBlbmQzID0gaW5kZXgyICsgMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVuZDMgPCAwID8gIiIgOiBwYXRoMi5zbGljZShzdGFydCwgZW5kMyk7CiAgfQogIGlmIChleHRuYW1lMiA9PT0gcGF0aDIpIHsKICAgIHJldHVybiAiIjsKICB9CiAgbGV0IGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTsKICBsZXQgZXh0bmFtZUluZGV4ID0gZXh0bmFtZTIubGVuZ3RoIC0gMTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICBpZiAoc2Vlbk5vblNsYXNoKSB7CiAgICAgICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA8IDApIHsKICAgICAgICBzZWVuTm9uU2xhc2ggPSB0cnVlOwogICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpbmRleDIgKyAxOwogICAgICB9CiAgICAgIGlmIChleHRuYW1lSW5kZXggPiAtMSkgewogICAgICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSBleHRuYW1lMi5jb2RlUG9pbnRBdChleHRuYW1lSW5kZXgtLSkpIHsKICAgICAgICAgIGlmIChleHRuYW1lSW5kZXggPCAwKSB7CiAgICAgICAgICAgIGVuZDMgPSBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4dG5hbWVJbmRleCA9IC0xOwogICAgICAgICAgZW5kMyA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmIChzdGFydCA9PT0gZW5kMykgewogICAgZW5kMyA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgfSBlbHNlIGlmIChlbmQzIDwgMCkgewogICAgZW5kMyA9IHBhdGgyLmxlbmd0aDsKICB9CiAgcmV0dXJuIHBhdGgyLnNsaWNlKHN0YXJ0LCBlbmQzKTsKfQpmdW5jdGlvbiBkaXJuYW1lKHBhdGgyKSB7CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuICIuIjsKICB9CiAgbGV0IGVuZDMgPSAtMTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCB1bm1hdGNoZWRTbGFzaDsKICB3aGlsZSAoLS1pbmRleDIpIHsKICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHsKICAgICAgICBlbmQzID0gaW5kZXgyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCF1bm1hdGNoZWRTbGFzaCkgewogICAgICB1bm1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICB9CiAgfQogIHJldHVybiBlbmQzIDwgMCA/IHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NyA/ICIvIiA6ICIuIiA6IGVuZDMgPT09IDEgJiYgcGF0aDIuY29kZVBvaW50QXQoMCkgPT09IDQ3ID8gIi8vIiA6IHBhdGgyLnNsaWNlKDAsIGVuZDMpOwp9CmZ1bmN0aW9uIGV4dG5hbWUocGF0aDIpIHsKICBhc3NlcnRQYXRoKHBhdGgyKTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCBlbmQzID0gLTE7CiAgbGV0IHN0YXJ0UGFydCA9IDA7CiAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgbGV0IHByZURvdFN0YXRlID0gMDsKICBsZXQgdW5tYXRjaGVkU2xhc2g7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCBjb2RlNCA9IHBhdGgyLmNvZGVQb2ludEF0KGluZGV4Mik7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGlmICh1bm1hdGNoZWRTbGFzaCkgewogICAgICAgIHN0YXJ0UGFydCA9IGluZGV4MiArIDE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoZW5kMyA8IDApIHsKICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgICBlbmQzID0gaW5kZXgyICsgMTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDYpIHsKICAgICAgaWYgKHN0YXJ0RG90IDwgMCkgewogICAgICAgIHN0YXJ0RG90ID0gaW5kZXgyOwogICAgICB9IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSB7CiAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ID4gLTEpIHsKICAgICAgcHJlRG90U3RhdGUgPSAtMTsKICAgIH0KICB9CiAgaWYgKHN0YXJ0RG90IDwgMCB8fCBlbmQzIDwgMCB8fCAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdC4KICBwcmVEb3RTdGF0ZSA9PT0gMCB8fCAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSBgLi5gLgogIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQzIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgcmV0dXJuICIiOwogIH0KICByZXR1cm4gcGF0aDIuc2xpY2Uoc3RhcnREb3QsIGVuZDMpOwp9CmZ1bmN0aW9uIGpvaW4oLi4uc2VnbWVudHMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGpvaW5lZDsKICB3aGlsZSAoKytpbmRleDIgPCBzZWdtZW50cy5sZW5ndGgpIHsKICAgIGFzc2VydFBhdGgoc2VnbWVudHNbaW5kZXgyXSk7CiAgICBpZiAoc2VnbWVudHNbaW5kZXgyXSkgewogICAgICBqb2luZWQgPSBqb2luZWQgPT09IHZvaWQgMCA/IHNlZ21lbnRzW2luZGV4Ml0gOiBqb2luZWQgKyAiLyIgKyBzZWdtZW50c1tpbmRleDJdOwogICAgfQogIH0KICByZXR1cm4gam9pbmVkID09PSB2b2lkIDAgPyAiLiIgOiBub3JtYWxpemUyKGpvaW5lZCk7Cn0KZnVuY3Rpb24gbm9ybWFsaXplMihwYXRoMikgewogIGFzc2VydFBhdGgocGF0aDIpOwogIGNvbnN0IGFic29sdXRlID0gcGF0aDIuY29kZVBvaW50QXQoMCkgPT09IDQ3OwogIGxldCB2YWx1ZTIgPSBub3JtYWxpemVTdHJpbmcocGF0aDIsICFhYnNvbHV0ZSk7CiAgaWYgKHZhbHVlMi5sZW5ndGggPT09IDAgJiYgIWFic29sdXRlKSB7CiAgICB2YWx1ZTIgPSAiLiI7CiAgfQogIGlmICh2YWx1ZTIubGVuZ3RoID4gMCAmJiBwYXRoMi5jb2RlUG9pbnRBdChwYXRoMi5sZW5ndGggLSAxKSA9PT0gNDcpIHsKICAgIHZhbHVlMiArPSAiLyI7CiAgfQogIHJldHVybiBhYnNvbHV0ZSA/ICIvIiArIHZhbHVlMiA6IHZhbHVlMjsKfQpmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcocGF0aDIsIGFsbG93QWJvdmVSb290KSB7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgbGV0IGxhc3RTbGFzaCA9IC0xOwogIGxldCBkb3RzID0gMDsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGNvZGU0OwogIGxldCBsYXN0U2xhc2hJbmRleDsKICB3aGlsZSAoKytpbmRleDIgPD0gcGF0aDIubGVuZ3RoKSB7CiAgICBpZiAoaW5kZXgyIDwgcGF0aDIubGVuZ3RoKSB7CiAgICAgIGNvZGU0ID0gcGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKTsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGJyZWFrOwogICAgfSBlbHNlIHsKICAgICAgY29kZTQgPSA0NzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaW5kZXgyIC0gMSB8fCBkb3RzID09PSAxKSB7CiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpbmRleDIgLSAxICYmIGRvdHMgPT09IDIpIHsKICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gNDYgfHwgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAyKSAhPT0gNDYpIHsKICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMikgewogICAgICAgICAgICBsYXN0U2xhc2hJbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlc3VsdC5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4IDwgMCkgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlc3VsdC5sZW5ndGggLSAxIC0gcmVzdWx0Lmxhc3RJbmRleE9mKCIvIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4MjsKICAgICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXN1bHQgPSAiIjsKICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgICAgICAgIGRvdHMgPSAwOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7CiAgICAgICAgICByZXN1bHQgPSByZXN1bHQubGVuZ3RoID4gMCA/IHJlc3VsdCArICIvLi4iIDogIi4uIjsKICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7CiAgICAgICAgICByZXN1bHQgKz0gIi8iICsgcGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ID0gcGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgyKTsKICAgICAgICB9CiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpbmRleDIgLSBsYXN0U2xhc2ggLSAxOwogICAgICB9CiAgICAgIGxhc3RTbGFzaCA9IGluZGV4MjsKICAgICAgZG90cyA9IDA7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA0NiAmJiBkb3RzID4gLTEpIHsKICAgICAgZG90cysrOwogICAgfSBlbHNlIHsKICAgICAgZG90cyA9IC0xOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aDIpIHsKICBpZiAodHlwZW9mIHBhdGgyICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIiArIEpTT04uc3RyaW5naWZ5KHBhdGgyKQogICAgKTsKICB9Cn0KdmFyIG1pbnBhdGg7CnZhciBpbml0X21pbnBhdGhfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucGF0aC5icm93c2VyLmpzIigpIHsKICAgIG1pbnBhdGggPSB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCBzZXA6ICIvIiB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW5wcm9jLmJyb3dzZXIuanMKZnVuY3Rpb24gY3dkKCkgewogIHJldHVybiAiLyI7Cn0KdmFyIG1pbnByb2M7CnZhciBpbml0X21pbnByb2NfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucHJvYy5icm93c2VyLmpzIigpIHsKICAgIG1pbnByb2MgPSB7IGN3ZCB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzCmZ1bmN0aW9uIGlzVXJsKGZpbGVVcmxPclBhdGgpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIGZpbGVVcmxPclBhdGggIT09IG51bGwgJiYgdHlwZW9mIGZpbGVVcmxPclBhdGggPT09ICJvYmplY3QiICYmICJocmVmIiBpbiBmaWxlVXJsT3JQYXRoICYmIGZpbGVVcmxPclBhdGguaHJlZiAmJiAicHJvdG9jb2wiIGluIGZpbGVVcmxPclBhdGggJiYgZmlsZVVybE9yUGF0aC5wcm90b2NvbCAmJiAvLyBAdHMtZXhwZWN0LWVycm9yOiBpbmRleGluZyBpcyBmaW5lLgogICAgZmlsZVVybE9yUGF0aC5hdXRoID09PSB2b2lkIDAKICApOwp9CnZhciBpbml0X21pbnVybF9zaGFyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5zaGFyZWQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuYnJvd3Nlci5qcwpmdW5jdGlvbiB1cmxUb1BhdGgocGF0aDIpIHsKICBpZiAodHlwZW9mIHBhdGgyID09PSAic3RyaW5nIikgewogICAgcGF0aDIgPSBuZXcgVVJMKHBhdGgyKTsKICB9IGVsc2UgaWYgKCFpc1VybChwYXRoMikpIHsKICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcigKICAgICAgJ1RoZSAicGF0aCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBVUkwuIFJlY2VpdmVkIGAnICsgcGF0aDIgKyAiYCIKICAgICk7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX0FSR19UWVBFIjsKICAgIHRocm93IGVycm9yOwogIH0KICBpZiAocGF0aDIucHJvdG9jb2wgIT09ICJmaWxlOiIpIHsKICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcigiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlIik7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX1VSTF9TQ0hFTUUiOwogICAgdGhyb3cgZXJyb3I7CiAgfQogIHJldHVybiBnZXRQYXRoRnJvbVVSTFBvc2l4KHBhdGgyKTsKfQpmdW5jdGlvbiBnZXRQYXRoRnJvbVVSTFBvc2l4KHVybCkgewogIGlmICh1cmwuaG9zdG5hbWUgIT09ICIiKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICdGaWxlIFVSTCBob3N0IG11c3QgYmUgImxvY2FsaG9zdCIgb3IgZW1wdHkgb24gZGFyd2luJwogICAgKTsKICAgIGVycm9yLmNvZGUgPSAiRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCI7CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgY29uc3QgcGF0aG5hbWUgPSB1cmwucGF0aG5hbWU7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHBhdGhuYW1lLmxlbmd0aCkgewogICAgaWYgKHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MikgPT09IDM3ICYmIHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MiArIDEpID09PSA1MCkgewogICAgICBjb25zdCB0aGlyZCA9IHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MiArIDIpOwogICAgICBpZiAodGhpcmQgPT09IDcwIHx8IHRoaXJkID09PSAxMDIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAiRmlsZSBVUkwgcGF0aCBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzIgogICAgICAgICk7CiAgICAgICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIIjsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhuYW1lKTsKfQp2YXIgaW5pdF9taW51cmxfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMiKCkgewogICAgaW5pdF9taW51cmxfc2hhcmVkKCk7CiAgICBpbml0X21pbnVybF9zaGFyZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvaW5kZXguanMKZnVuY3Rpb24gYXNzZXJ0UGFydChwYXJ0LCBuYW1lKSB7CiAgaWYgKHBhcnQgJiYgcGFydC5pbmNsdWRlcyhtaW5wYXRoLnNlcCkpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgImAiICsgbmFtZSArICJgIGNhbm5vdCBiZSBhIHBhdGg6IGRpZCBub3QgZXhwZWN0IGAiICsgbWlucGF0aC5zZXAgKyAiYCIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5KHBhcnQsIG5hbWUpIHsKICBpZiAoIXBhcnQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiYCIgKyBuYW1lICsgImAgY2Fubm90IGJlIGVtcHR5Iik7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydFBhdGgyKHBhdGgyLCBuYW1lKSB7CiAgaWYgKCFwYXRoMikgewogICAgdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIGAiICsgbmFtZSArICJgIHJlcXVpcmVzIGBwYXRoYCB0byBiZSBzZXQgdG9vIik7CiAgfQp9CmZ1bmN0aW9uIGlzVWludDhBcnJheTModmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgImJ5dGVMZW5ndGgiIGluIHZhbHVlMiAmJiAiYnl0ZU9mZnNldCIgaW4gdmFsdWUyCiAgKTsKfQp2YXIgb3JkZXIsIFZGaWxlOwp2YXIgaW5pdF9saWI0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3ZmaWxlX21lc3NhZ2UoKTsKICAgIGluaXRfbWlucGF0aF9icm93c2VyKCk7CiAgICBpbml0X21pbnByb2NfYnJvd3NlcigpOwogICAgaW5pdF9taW51cmxfYnJvd3NlcigpOwogICAgb3JkZXIgPSAvKiogQHR5cGUge2NvbnN0fSAqLwogICAgWwogICAgICAiaGlzdG9yeSIsCiAgICAgICJwYXRoIiwKICAgICAgImJhc2VuYW1lIiwKICAgICAgInN0ZW0iLAogICAgICAiZXh0bmFtZSIsCiAgICAgICJkaXJuYW1lIgogICAgXTsKICAgIFZGaWxlID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbmV3IHZpcnR1YWwgZmlsZS4KICAgICAgICoKICAgICAgICogYG9wdGlvbnNgIGlzIHRyZWF0ZWQgYXM6CiAgICAgICAqCiAgICAgICAqICogICBgc3RyaW5nYCBvciBgVWludDhBcnJheWAg4oCUIGB7dmFsdWU6IG9wdGlvbnN9YAogICAgICAgKiAqICAgYFVSTGAg4oCUIGB7cGF0aDogb3B0aW9uc31gCiAgICAgICAqICogICBgVkZpbGVgIOKAlCBzaGFsbG93IGNvcGllcyBpdHMgZGF0YSBvdmVyIHRvIHRoZSBuZXcgZmlsZQogICAgICAgKiAqICAgYG9iamVjdGAg4oCUIGFsbCBmaWVsZHMgYXJlIHNoYWxsb3cgY29waWVkIG92ZXIgdG8gdGhlIG5ldyBmaWxlCiAgICAgICAqCiAgICAgICAqIFBhdGggcmVsYXRlZCBmaWVsZHMgYXJlIHNldCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIChsZWFzdCBzcGVjaWZpYyB0bwogICAgICAgKiBtb3N0IHNwZWNpZmljKTogYGhpc3RvcnlgLCBgcGF0aGAsIGBiYXNlbmFtZWAsIGBzdGVtYCwgYGV4dG5hbWVgLAogICAgICAgKiBgZGlybmFtZWAuCiAgICAgICAqCiAgICAgICAqIFlvdSBjYW5ub3Qgc2V0IGBkaXJuYW1lYCBvciBgZXh0bmFtZWAgd2l0aG91dCBzZXR0aW5nIGVpdGhlciBgaGlzdG9yeWAsCiAgICAgICAqIGBwYXRoYCwgYGJhc2VuYW1lYCwgb3IgYHN0ZW1gIHRvby4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ZhbHVlXQogICAgICAgKiAgIEZpbGUgdmFsdWUuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgTmV3IGluc3RhbmNlLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IodmFsdWUyKSB7CiAgICAgICAgbGV0IG9wdGlvbnM7CiAgICAgICAgaWYgKCF2YWx1ZTIpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9IGVsc2UgaWYgKGlzVXJsKHZhbHVlMikpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7IHBhdGg6IHZhbHVlMiB9OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgfHwgaXNVaW50OEFycmF5Myh2YWx1ZTIpKSB7CiAgICAgICAgICBvcHRpb25zID0geyB2YWx1ZTogdmFsdWUyIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3dkID0gImN3ZCIgaW4gb3B0aW9ucyA/ICIiIDogbWlucHJvYy5jd2QoKTsKICAgICAgICB0aGlzLmRhdGEgPSB7fTsKICAgICAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107CiAgICAgICAgdGhpcy52YWx1ZTsKICAgICAgICB0aGlzLm1hcDsKICAgICAgICB0aGlzLnJlc3VsdDsKICAgICAgICB0aGlzLnN0b3JlZDsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgb3JkZXIubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBmaWVsZDIgPSBvcmRlcltpbmRleDJdOwogICAgICAgICAgaWYgKGZpZWxkMiBpbiBvcHRpb25zICYmIG9wdGlvbnNbZmllbGQyXSAhPT0gdm9pZCAwICYmIG9wdGlvbnNbZmllbGQyXSAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzW2ZpZWxkMl0gPSBmaWVsZDIgPT09ICJoaXN0b3J5IiA/IFsuLi5vcHRpb25zW2ZpZWxkMl1dIDogb3B0aW9uc1tmaWVsZDJdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgZmllbGQ7CiAgICAgICAgZm9yIChmaWVsZCBpbiBvcHRpb25zKSB7CiAgICAgICAgICBpZiAoIW9yZGVyLmluY2x1ZGVzKGZpZWxkKSkgewogICAgICAgICAgICB0aGlzW2ZpZWxkXSA9IG9wdGlvbnNbZmllbGRdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBCYXNlbmFtZS4KICAgICAgICovCiAgICAgIGdldCBiYXNlbmFtZSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmJhc2VuYW1lKHRoaXMucGF0aCkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChgJ2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZW5hbWUKICAgICAgICogICBCYXNlbmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGJhc2VuYW1lKGJhc2VuYW1lMikgewogICAgICAgIGFzc2VydE5vbkVtcHR5KGJhc2VuYW1lMiwgImJhc2VuYW1lIik7CiAgICAgICAgYXNzZXJ0UGFydChiYXNlbmFtZTIsICJiYXNlbmFtZSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgIiIsIGJhc2VuYW1lMik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBEaXJuYW1lLgogICAgICAgKi8KICAgICAgZ2V0IGRpcm5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5kaXJuYW1lKHRoaXMucGF0aCkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGRpcm5hbWUKICAgICAgICogICBEaXJuYW1lLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgZGlybmFtZShkaXJuYW1lMikgewogICAgICAgIGFzc2VydFBhdGgyKHRoaXMuYmFzZW5hbWUsICJkaXJuYW1lIik7CiAgICAgICAgdGhpcy5wYXRoID0gbWlucGF0aC5qb2luKGRpcm5hbWUyIHx8ICIiLCB0aGlzLmJhc2VuYW1lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgRXh0bmFtZS4KICAgICAgICovCiAgICAgIGdldCBleHRuYW1lKCkgewogICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAic3RyaW5nIiA/IG1pbnBhdGguZXh0bmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGV4dG5hbWUgKGluY2x1ZGluZyBkb3QpIChleGFtcGxlOiBgJy5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGV4dG5hbWUKICAgICAgICogICBFeHRuYW1lLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgZXh0bmFtZShleHRuYW1lMikgewogICAgICAgIGFzc2VydFBhcnQoZXh0bmFtZTIsICJleHRuYW1lIik7CiAgICAgICAgYXNzZXJ0UGF0aDIodGhpcy5kaXJuYW1lLCAiZXh0bmFtZSIpOwogICAgICAgIGlmIChleHRuYW1lMikgewogICAgICAgICAgaWYgKGV4dG5hbWUyLmNvZGVQb2ludEF0KDApICE9PSA0NikgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXh0bmFtZTIuaW5jbHVkZXMoIi4iLCAxKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUsIHRoaXMuc3RlbSArIChleHRuYW1lMiB8fCAiIikpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAgICogICBQYXRoLgogICAgICAgKi8KICAgICAgZ2V0IHBhdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgZnVsbCBwYXRoIChleGFtcGxlOiBgJ34vaW5kZXgubWluLmpzJ2ApLgogICAgICAgKgogICAgICAgKiBDYW5ub3QgYmUgbnVsbGlmaWVkLgogICAgICAgKiBZb3UgY2FuIHNldCBhIGZpbGUgVVJMIChhIGBVUkxgIG9iamVjdCB3aXRoIGEgYGZpbGU6YCBwcm90b2NvbCkgd2hpY2ggd2lsbAogICAgICAgKiBiZSB0dXJuZWQgaW50byBhIHBhdGggd2l0aCBgdXJsLmZpbGVVUkxUb1BhdGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1VSTCB8IHN0cmluZ30gcGF0aAogICAgICAgKiAgIFBhdGguCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBwYXRoKHBhdGgyKSB7CiAgICAgICAgaWYgKGlzVXJsKHBhdGgyKSkgewogICAgICAgICAgcGF0aDIgPSB1cmxUb1BhdGgocGF0aDIpOwogICAgICAgIH0KICAgICAgICBhc3NlcnROb25FbXB0eShwYXRoMiwgInBhdGgiKTsKICAgICAgICBpZiAodGhpcy5wYXRoICE9PSBwYXRoMikgewogICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocGF0aDIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIFN0ZW0uCiAgICAgICAqLwogICAgICBnZXQgc3RlbSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmJhc2VuYW1lKHRoaXMucGF0aCwgdGhpcy5leHRuYW1lKSA6IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLgogICAgICAgKgogICAgICAgKiBDYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKGAnLydgIG9uIHVuaXgsIG1hY09TLCBhbmQgYnJvd3NlcnMsIGAnXCdgCiAgICAgICAqIG9uIHdpbmRvd3MpLgogICAgICAgKiBDYW5ub3QgYmUgbnVsbGlmaWVkICh1c2UgYGZpbGUucGF0aCA9IGZpbGUuZGlybmFtZWAgaW5zdGVhZCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGVtCiAgICAgICAqICAgU3RlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IHN0ZW0oc3RlbSkgewogICAgICAgIGFzc2VydE5vbkVtcHR5KHN0ZW0sICJzdGVtIik7CiAgICAgICAgYXNzZXJ0UGFydChzdGVtLCAic3RlbSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgIiIsIHN0ZW0gKyAodGhpcy5leHRuYW1lIHx8ICIiKSk7CiAgICAgIH0KICAgICAgLy8gTm9ybWFsIHByb3RvdHlwYWwgbWV0aG9kcy4KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIGZhdGFsIG1lc3NhZ2UgZm9yIGByZWFzb25gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogVGhlIGBmYXRhbGAgZmllbGQgb2YgdGhlIG1lc3NhZ2UgaXMgc2V0IHRvIGB0cnVlYCAoZXJyb3I7IGZpbGUgbm90IHVzYWJsZSkKICAgICAgICogYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC4KICAgICAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc10KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXQogICAgICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZToKICAgICAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS4KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKiAgIE5ldmVyLgogICAgICAgKiBAdGhyb3dzIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqICAgTWVzc2FnZS4KICAgICAgICovCiAgICAgIGZhaWwoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZTIgPSB0aGlzLm1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKTsKICAgICAgICBtZXNzYWdlMi5mYXRhbCA9IHRydWU7CiAgICAgICAgdGhyb3cgbWVzc2FnZTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhbiBpbmZvIG1lc3NhZ2UgZm9yIGByZWFzb25gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogVGhlIGBmYXRhbGAgZmllbGQgb2YgdGhlIG1lc3NhZ2UgaXMgc2V0IHRvIGB1bmRlZmluZWRgIChpbmZvOyBjaGFuZ2UKICAgICAgICogbGlrZWx5IG5vdCBuZWVkZWQpIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgTWVzc2FnZU9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBpbmZvKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbik7CiAgICAgICAgbWVzc2FnZTIuZmF0YWwgPSB2b2lkIDA7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgZmFsc2VgICh3YXJuaW5nOyBjaGFuZ2UgbWF5IGJlCiAgICAgICAqIG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC4KICAgICAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc10KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvbgogICAgICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi4KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBNZXNzYWdlT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqICAgTWVzc2FnZS4KICAgICAgICovCiAgICAgIG1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBuZXcgVkZpbGVNZXNzYWdlKAogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhlIG92ZXJsb2FkcyBhcmUgZmluZS4KICAgICAgICAgIGNhdXNlT3JSZWFzb24sCiAgICAgICAgICBvcHRpb25zT3JQYXJlbnRPclBsYWNlLAogICAgICAgICAgb3JpZ2luCiAgICAgICAgKTsKICAgICAgICBpZiAodGhpcy5wYXRoKSB7CiAgICAgICAgICBtZXNzYWdlMi5uYW1lID0gdGhpcy5wYXRoICsgIjoiICsgbWVzc2FnZTIubmFtZTsKICAgICAgICAgIG1lc3NhZ2UyLmZpbGUgPSB0aGlzLnBhdGg7CiAgICAgICAgfQogICAgICAgIG1lc3NhZ2UyLmZhdGFsID0gZmFsc2U7CiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UyKTsKICAgICAgICByZXR1cm4gbWVzc2FnZTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNlcmlhbGl6ZSB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogd2hpY2ggZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgZW5naW5lLgogICAgICAgKiA+IEZvciBpbmZvIG9uIE5vZGUuanMsIHNlZToKICAgICAgICogPiA8aHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjd2hhdHdnLXN1cHBvcnRlZC1lbmNvZGluZ3M+LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZz0ndXRmOCddCiAgICAgICAqICAgQ2hhcmFjdGVyIGVuY29kaW5nIHRvIHVuZGVyc3RhbmQgYHZhbHVlYCBhcyB3aGVuIGl04oCZcyBhIGBVaW50OEFycmF5YAogICAgICAgKiAgIChkZWZhdWx0OiBgJ3V0Zi04J2ApLgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfQogICAgICAgKiAgIFNlcmlhbGl6ZWQgZmlsZS4KICAgICAgICovCiAgICAgIHRvU3RyaW5nKGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZGVjb2RlcjIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdm9pZCAwKTsKICAgICAgICByZXR1cm4gZGVjb2RlcjIuZGVjb2RlKHRoaXMudmFsdWUpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzCnZhciBpbml0X3ZmaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2NhbGxhYmxlLWluc3RhbmNlLmpzCnZhciBDYWxsYWJsZUluc3RhbmNlOwp2YXIgaW5pdF9jYWxsYWJsZV9pbnN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9jYWxsYWJsZS1pbnN0YW5jZS5qcyIoKSB7CiAgICBDYWxsYWJsZUluc3RhbmNlID0gLyoqCiAgICAgKiBAdHlwZSB7bmV3IDxQYXJhbWV0ZXJzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIFJlc3VsdD4ocHJvcGVydHk6IHN0cmluZyB8IHN5bWJvbCkgPT4gKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnMpID0+IFJlc3VsdH0KICAgICAqLwogICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLwogICAgLyoqCiAgICAgKiBAdGhpcyB7RnVuY3Rpb259CiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcGVydHkKICAgICAqIEByZXR1cm5zIHsoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd259CiAgICAgKi8KICAgIChmdW5jdGlvbihwcm9wZXJ0eTExKSB7CiAgICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgICAgY29uc3QgY29uc3RyID0gc2VsZjIuY29uc3RydWN0b3I7CiAgICAgIGNvbnN0IHByb3RvID0gKAogICAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgRnVuY3Rpb24+fSAqLwogICAgICAgIC8vIFByb3RvdHlwZXMgZG8gZXhpc3QuCiAgICAgICAgLy8gdHlwZS1jb3ZlcmFnZTppZ25vcmUtbmV4dC1saW5lCiAgICAgICAgY29uc3RyLnByb3RvdHlwZQogICAgICApOwogICAgICBjb25zdCB2YWx1ZTIgPSBwcm90b1twcm9wZXJ0eTExXTsKICAgICAgY29uc3QgYXBwbHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmFsdWUyLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXBwbHksIHByb3RvKTsKICAgICAgcmV0dXJuIGFwcGx5OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvaW5kZXguanMKZnVuY3Rpb24gYXNzZXJ0UGFyc2VyKG5hbWUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgdmFsdWUyICE9PSAiZnVuY3Rpb24iKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYCIgKyBuYW1lICsgImAgd2l0aG91dCBgcGFyc2VyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRDb21waWxlcihuYW1lLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGAiICsgbmFtZSArICJgIHdpdGhvdXQgYGNvbXBpbGVyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVbmZyb3plbihuYW1lLCBmcm96ZW4pIHsKICBpZiAoZnJvemVuKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3QgY2FsbCBgIiArIG5hbWUgKyAiYCBvbiBhIGZyb3plbiBwcm9jZXNzb3IuXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLiIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydE5vZGUobm9kZTIpIHsKICBpZiAoIWlzUGxhaW5PYmplY3Qobm9kZTIpIHx8IHR5cGVvZiBub2RlMi50eXBlICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgbm9kZSwgZ290IGAiICsgbm9kZTIgKyAiYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnREb25lKG5hbWUsIGFzeW5jTmFtZSwgY29tcGxldGUpIHsKICBpZiAoIWNvbXBsZXRlKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGAiICsgYXN5bmNOYW1lICsgImAgaW5zdGVhZCIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIHZmaWxlKHZhbHVlMikgewogIHJldHVybiBsb29rc0xpa2VBVkZpbGUodmFsdWUyKSA/IHZhbHVlMiA6IG5ldyBWRmlsZSh2YWx1ZTIpOwp9CmZ1bmN0aW9uIGxvb2tzTGlrZUFWRmlsZSh2YWx1ZTIpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiAibWVzc2FnZSIgaW4gdmFsdWUyICYmICJtZXNzYWdlcyIgaW4gdmFsdWUyCiAgKTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBVmFsdWUodmFsdWUyKSB7CiAgcmV0dXJuIHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTQodmFsdWUyKTsKfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXk0KHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIGltcG9ydF9leHRlbmQsIG93biwgUHJvY2Vzc29yLCB1bmlmaWVkOwp2YXIgaW5pdF9saWI1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfYmFpbCgpOwogICAgaW1wb3J0X2V4dGVuZCA9IF9fdG9FU00ocmVxdWlyZV9leHRlbmQoKSwgMSk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfaXNfcGxhaW5fb2JqKCk7CiAgICBpbml0X3Ryb3VnaCgpOwogICAgaW5pdF92ZmlsZSgpOwogICAgaW5pdF9jYWxsYWJsZV9pbnN0YW5jZSgpOwogICAgb3duID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBQcm9jZXNzb3IgPSBjbGFzcyBfUHJvY2Vzc29yIGV4dGVuZHMgQ2FsbGFibGVJbnN0YW5jZSB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigiY29weSIpOwogICAgICAgIHRoaXMuQ29tcGlsZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5QYXJzZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5hdHRhY2hlcnMgPSBbXTsKICAgICAgICB0aGlzLmNvbXBpbGVyID0gdm9pZCAwOwogICAgICAgIHRoaXMuZnJlZXplSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmZyb3plbiA9IHZvaWQgMDsKICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IHt9OwogICAgICAgIHRoaXMucGFyc2VyID0gdm9pZCAwOwogICAgICAgIHRoaXMudHJhbnNmb3JtZXJzID0gdHJvdWdoKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvcHkgYSBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgbWV0aG9kIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBOZXcgKnVuZnJvemVuKiBwcm9jZXNzb3IgKHtAbGlua2NvZGUgUHJvY2Vzc29yfSkgdGhhdCBpcwogICAgICAgKiAgIGNvbmZpZ3VyZWQgdG8gd29yayB0aGUgc2FtZSBhcyBpdHMgYW5jZXN0b3IuCiAgICAgICAqICAgV2hlbiB0aGUgZGVzY2VuZGFudCBwcm9jZXNzb3IgaXMgY29uZmlndXJlZCBpbiB0aGUgZnV0dXJlIGl0IGRvZXMgbm90CiAgICAgICAqICAgYWZmZWN0IHRoZSBhbmNlc3RyYWwgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgY29weSgpIHsKICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICgKICAgICAgICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59ICovCiAgICAgICAgICBuZXcgX1Byb2Nlc3NvcigpCiAgICAgICAgKTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBhdHRhY2hlciA9IHRoaXMuYXR0YWNoZXJzW2luZGV4Ml07CiAgICAgICAgICBkZXN0aW5hdGlvbi51c2UoLi4uYXR0YWNoZXIpOwogICAgICAgIH0KICAgICAgICBkZXN0aW5hdGlvbi5kYXRhKCgwLCBpbXBvcnRfZXh0ZW5kLmRlZmF1bHQpKHRydWUsIHt9LCB0aGlzLm5hbWVzcGFjZSkpOwogICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3Igd2l0aCBpbmZvIGF2YWlsYWJsZSB0byBhbGwgcGx1Z2lucy4KICAgICAgICogSW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGFuIG9iamVjdC4KICAgICAgICoKICAgICAgICogVHlwaWNhbGx5LCBvcHRpb25zIGNhbiBiZSBnaXZlbiB0byBhIHNwZWNpZmljIHBsdWdpbiwgYnV0IHNvbWV0aW1lcyBpdAogICAgICAgKiBtYWtlcyBzZW5zZSB0byBoYXZlIGluZm9ybWF0aW9uIHNoYXJlZCB3aXRoIHNldmVyYWwgcGx1Z2lucy4KICAgICAgICogRm9yIGV4YW1wbGUsIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzIHRoYXQgYXJlIHNlbGYtY2xvc2luZywgd2hpY2ggaXMKICAgICAgICogbmVlZGVkIGR1cmluZyBhbGwgcGhhc2VzLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBzZXR0aW5nIGluZm9ybWF0aW9uIGNhbm5vdCBvY2N1ciBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiB0byByZWdpc3RlciBjdXN0b20gZGF0YSBpbiBUeXBlU2NyaXB0LCBhdWdtZW50IHRoZQogICAgICAgKiA+IHtAbGlua2NvZGUgRGF0YX0gaW50ZXJmYWNlLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBzaG93IGhvdyB0byBnZXQgYW5kIHNldCBpbmZvOgogICAgICAgKgogICAgICAgKiAgIGBgYGpzCiAgICAgICAqICAgaW1wb3J0IHt1bmlmaWVkfSBmcm9tICd1bmlmaWVkJwogICAgICAgKgogICAgICAgKiAgIGNvbnN0IHByb2Nlc3NvciA9IHVuaWZpZWQoKS5kYXRhKCdhbHBoYScsICdicmF2bycpCiAgICAgICAqCiAgICAgICAqICAgcHJvY2Vzc29yLmRhdGEoJ2FscGhhJykgLy8gPT4gJ2JyYXZvJwogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKCkgLy8gPT4ge2FscGhhOiAnYnJhdm8nfQogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKHtjaGFybGllOiAnZGVsdGEnfSkKICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSgpIC8vID0+IHtjaGFybGllOiAnZGVsdGEnfQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge2tleW9mIERhdGF9IEtleQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHJldHVybnMge0RhdGF9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0RhdGF9IGRhdGFzZXQKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcmV0dXJucyB7RGF0YVtLZXldfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcGFyYW0ge0RhdGFbS2V5XX0gdmFsdWUKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0RhdGEgfCBLZXl9IFtrZXldCiAgICAgICAqICAgS2V5IHRvIGdldCBvciBzZXQsIG9yIGVudGlyZSBkYXRhc2V0IHRvIHNldCwgb3Igbm90aGluZyB0byBnZXQgdGhlCiAgICAgICAqICAgZW50aXJlIGRhdGFzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtEYXRhW0tleV19IFt2YWx1ZV0KICAgICAgICogICBWYWx1ZSB0byBzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge3Vua25vd259CiAgICAgICAqICAgVGhlIGN1cnJlbnQgcHJvY2Vzc29yIHdoZW4gc2V0dGluZywgdGhlIHZhbHVlIGF0IGBrZXlgIHdoZW4gZ2V0dGluZywgb3IKICAgICAgICogICB0aGUgZW50aXJlIGRhdGFzZXQgd2hlbiBnZXR0aW5nIHdpdGhvdXQga2V5LgogICAgICAgKi8KICAgICAgZGF0YShrZXkyLCB2YWx1ZTIpIHsKICAgICAgICBpZiAodHlwZW9mIGtleTIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2Vba2V5Ml0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG93bi5jYWxsKHRoaXMubmFtZXNwYWNlLCBrZXkyKSAmJiB0aGlzLm5hbWVzcGFjZVtrZXkyXSB8fCB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIGlmIChrZXkyKSB7CiAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgIHRoaXMubmFtZXNwYWNlID0ga2V5MjsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZyZWV6ZSBhIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogRnJvemVuIHByb2Nlc3NvcnMgYXJlIG1lYW50IHRvIGJlIGV4dGVuZGVkIGFuZCBub3QgdG8gYmUgY29uZmlndXJlZAogICAgICAgKiBkaXJlY3RseS4KICAgICAgICoKICAgICAgICogV2hlbiBhIHByb2Nlc3NvciBpcyBmcm96ZW4gaXQgY2Fubm90IGJlIHVuZnJvemVuLgogICAgICAgKiBOZXcgcHJvY2Vzc29ycyB3b3JraW5nIHRoZSBzYW1lIHdheSBjYW4gYmUgY3JlYXRlZCBieSBjYWxsaW5nIHRoZQogICAgICAgKiBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEl04oCZcyBwb3NzaWJsZSB0byBmcmVlemUgcHJvY2Vzc29ycyBleHBsaWNpdGx5IGJ5IGNhbGxpbmcgYC5mcmVlemUoKWAuCiAgICAgICAqIFByb2Nlc3NvcnMgZnJlZXplIGF1dG9tYXRpY2FsbHkgd2hlbiBgLnBhcnNlKClgLCBgLnJ1bigpYCwgYC5ydW5TeW5jKClgLAogICAgICAgKiBgLnN0cmluZ2lmeSgpYCwgYC5wcm9jZXNzKClgLCBvciBgLnByb2Nlc3NTeW5jKClgIGFyZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBUaGUgY3VycmVudCBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBmcmVlemUoKSB7CiAgICAgICAgaWYgKHRoaXMuZnJvemVuKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc2VsZjIgPSAoCiAgICAgICAgICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8KICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgIHRoaXMKICAgICAgICApOwogICAgICAgIHdoaWxlICgrK3RoaXMuZnJlZXplSW5kZXggPCB0aGlzLmF0dGFjaGVycy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IFthdHRhY2hlciwgLi4ub3B0aW9uc10gPSB0aGlzLmF0dGFjaGVyc1t0aGlzLmZyZWV6ZUluZGV4XTsKICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSBmYWxzZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSB0cnVlKSB7CiAgICAgICAgICAgIG9wdGlvbnNbMF0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGF0dGFjaGVyLmNhbGwoc2VsZjIsIC4uLm9wdGlvbnMpOwogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVycy51c2UodHJhbnNmb3JtZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmZyb3plbiA9IHRydWU7CiAgICAgICAgdGhpcy5mcmVlemVJbmRleCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICAvKioKICAgICAgICogUGFyc2UgdGV4dCB0byBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcGFyc2VgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBwZXJmb3JtcyB0aGUgcGFyc2UgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlIG9yIG90aGVyCiAgICAgICAqID4gcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIGZpbGUgdG8gcGFyc2UgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWA7IGFueSB2YWx1ZQogICAgICAgKiAgIGFjY2VwdGVkIGFzIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1BhcnNlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBQYXJzZVRyZWV9CiAgICAgICAqICAgU3ludGF4IHRyZWUgcmVwcmVzZW50aW5nIGBmaWxlYC4KICAgICAgICovCiAgICAgIHBhcnNlKGZpbGUpIHsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgY29uc3QgcGFyc2VyID0gdGhpcy5wYXJzZXIgfHwgdGhpcy5QYXJzZXI7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwYXJzZSIsIHBhcnNlcik7CiAgICAgICAgcmV0dXJuIHBhcnNlcihTdHJpbmcocmVhbEZpbGUpLCByZWFsRmlsZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgcGVyZm9ybXMgdGhlIHBhcnNlLCBydW4sIGFuZCBzdHJpbmdpZnkgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlCiAgICAgICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYF07IGFueSB2YWx1ZSBhY2NlcHRlZCBhcwogICAgICAgKiAgIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHBhcmFtIHtQcm9jZXNzQ2FsbGJhY2s8VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+PiB8IHVuZGVmaW5lZH0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VkZpbGU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSBhIHByb21pc2UsIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3MoZmlsZSwgZG9uZSkgewogICAgICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGFzc2VydFBhcnNlcigicHJvY2VzcyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2VzcyIsIHRoaXMuY29tcGlsZXIgfHwgdGhpcy5Db21waWxlcik7CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgICBjb25zdCBwYXJzZVRyZWUgPSAoCiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9ICovCiAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgc2VsZjIucGFyc2UocmVhbEZpbGUpCiAgICAgICAgICApOwogICAgICAgICAgc2VsZjIucnVuKHBhcnNlVHJlZSwgcmVhbEZpbGUsIGZ1bmN0aW9uKGVycm9yLCB0cmVlLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIXRyZWUgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEb25lKGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBjb21waWxlVHJlZSA9ICgKICAgICAgICAgICAgICAvKiogQHR5cGUge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSAqLwogICAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgICB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVSZXN1bHQgPSBzZWxmMi5zdHJpbmdpZnkoY29tcGlsZVRyZWUsIGZpbGUyKTsKICAgICAgICAgICAgaWYgKGxvb2tzTGlrZUFWYWx1ZShjb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgIGZpbGUyLnZhbHVlID0gY29tcGlsZVJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmaWxlMi5yZXN1bHQgPSBjb21waWxlUmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYWxEb25lKAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fSAqLwogICAgICAgICAgICAgIGZpbGUyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlMikgewogICAgICAgICAgICAgIHJlc29sdmUyKGZpbGUyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBwcm9jZXNzU3luY2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIHBlcmZvcm1zIHRoZSBwYXJzZSwgcnVuLCBhbmQgc3RyaW5naWZ5IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogICBGaWxlIChvcHRpb25hbCk7IHR5cGljYWxseSBgc3RyaW5nYCBvciBgVkZpbGVgOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMKICAgICAgICogICBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgVGhlIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3NTeW5jKGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwcm9jZXNzU3luYyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2Vzc1N5bmMiLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpOwogICAgICAgIHRoaXMucHJvY2VzcyhmaWxlLCByZWFsRG9uZSk7CiAgICAgICAgYXNzZXJ0RG9uZSgicHJvY2Vzc1N5bmMiLCAicHJvY2VzcyIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZTIpIHsKICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gZmlsZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHJ1bmAgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gZG9uZQogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IGZpbGUKICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7KAogICAgICAgKiAgIFJ1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8CiAgICAgICAqICAgQ29tcGF0aWJsZQogICAgICAgKiApfSBbZmlsZV0KICAgICAgICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgbm9kZWAgKG9wdGlvbmFsKTsgYW55IHZhbHVlIGFjY2VwdGVkIGFzIGB4YCBpbgogICAgICAgKiAgIGBuZXcgVkZpbGUoeClgLgogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSwgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW4odHJlZSwgZmlsZSwgZG9uZSkgewogICAgICAgIGFzc2VydE5vZGUodHJlZSk7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSB0aGlzLnRyYW5zZm9ybWVyczsKICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZW9mIGZpbGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGRvbmUgPSBmaWxlOwogICAgICAgICAgZmlsZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIG9rKAogICAgICAgICAgICB0eXBlb2YgZmlsZSAhPT0gImZ1bmN0aW9uIiwKICAgICAgICAgICAgImBmaWxlYCBjYW5cdTIwMTl0IGJlIGEgYGRvbmVgIGFueW1vcmUsIHdlIGNoZWNrZWQiCiAgICAgICAgICApOwogICAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICAgIHRyYW5zZm9ybWVycy5ydW4odHJlZSwgcmVhbEZpbGUsIHJlYWxEb25lKTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBvdXRwdXRUcmVlLCBmaWxlMikgewogICAgICAgICAgICBjb25zdCByZXN1bHRpbmdUcmVlID0gKAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWV9ICovCiAgICAgICAgICAgICAgb3V0cHV0VHJlZSB8fCB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZTIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihyZXN1bHRpbmdUcmVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCByZXN1bHRpbmdUcmVlLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJ1biAqdHJhbnNmb3JtZXJzKiBvbiBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1RhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlfQogICAgICAgKiAgIFRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW5TeW5jKHRyZWUsIGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMucnVuKHRyZWUsIGZpbGUsIHJlYWxEb25lKTsKICAgICAgICBhc3NlcnREb25lKCJydW5TeW5jIiwgInJ1biIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgdHJlZTIpIHsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gdHJlZTI7CiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21waWxlIGEgc3ludGF4IHRyZWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHN0cmluZ2lmeWAgcGVyZm9ybXMgdGhlIHN0cmluZ2lmeSBwaGFzZSwgbm90IHRoZSBydW4gcGhhc2UKICAgICAgICogPiBvciBvdGhlciBwaGFzZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGlsZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogQ29tcGlsZVRyZWV9IHRyZWUKICAgICAgICogICBUcmVlIHRvIGNvbXBpbGUuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge0NvbXBpbGVSZXN1bHQgZXh0ZW5kcyB1bmRlZmluZWQgPyBWYWx1ZSA6IENvbXBpbGVSZXN1bHR9CiAgICAgICAqICAgVGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZSAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0IGNvbXBpbGVycwogICAgICAgKiAgID4gcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBzdHJpbmdpZnkodHJlZSwgZmlsZSkgewogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICBjb25zdCBjb21waWxlcjIgPSB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXI7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInN0cmluZ2lmeSIsIGNvbXBpbGVyMik7CiAgICAgICAgYXNzZXJ0Tm9kZSh0cmVlKTsKICAgICAgICByZXR1cm4gY29tcGlsZXIyKHRyZWUsIHJlYWxGaWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3IgdG8gdXNlIGEgcGx1Z2luLCBhIGxpc3Qgb2YgdXNhYmxlIHZhbHVlcywgb3IgYQogICAgICAgKiBwcmVzZXQuCiAgICAgICAqCiAgICAgICAqIElmIHRoZSBwcm9jZXNzb3IgaXMgYWxyZWFkeSB1c2luZyBhIHBsdWdpbiwgdGhlIHByZXZpb3VzIHBsdWdpbgogICAgICAgKiBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIGluLgogICAgICAgKiBJbiBvdGhlciB3b3JkcywgdGhlIHBsdWdpbiBpcyBub3QgYWRkZWQgYSBzZWNvbmQgdGltZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHVzZWAgY2Fubm90IGJlIGNhbGxlZCBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoZXJlIGFyZSBtYW55IHdheXMgdG8gcGFzcyBwbHVnaW5zIHRvIGAudXNlKClgLgogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBnaXZlcyBhbiBvdmVydmlldzoKICAgICAgICoKICAgICAgICogICBgYGBqcwogICAgICAgKiAgIGltcG9ydCB7dW5pZmllZH0gZnJvbSAndW5pZmllZCcKICAgICAgICoKICAgICAgICogICB1bmlmaWVkKCkKICAgICAgICogICAgIC8vIFBsdWdpbiB3aXRoIG9wdGlvbnM6CiAgICAgICAqICAgICAudXNlKHBsdWdpbkEsIHt4OiB0cnVlLCB5OiB0cnVlfSkKICAgICAgICogICAgIC8vIFBhc3NpbmcgdGhlIHNhbWUgcGx1Z2luIGFnYWluIG1lcmdlcyBjb25maWd1cmF0aW9uICh0byBge3g6IHRydWUsIHk6IGZhbHNlLCB6OiB0cnVlfWApOgogICAgICAgKiAgICAgLnVzZShwbHVnaW5BLCB7eTogZmFsc2UsIHo6IHRydWV9KQogICAgICAgKiAgICAgLy8gUGx1Z2luczoKICAgICAgICogICAgIC51c2UoW3BsdWdpbkIsIHBsdWdpbkNdKQogICAgICAgKiAgICAgLy8gVHdvIHBsdWdpbnMsIHRoZSBzZWNvbmQgd2l0aCBvcHRpb25zOgogICAgICAgKiAgICAgLnVzZShbcGx1Z2luRCwgW3BsdWdpbkUsIHt9XV0pCiAgICAgICAqICAgICAvLyBQcmVzZXQgd2l0aCBwbHVnaW5zIGFuZCBzZXR0aW5nczoKICAgICAgICogICAgIC51c2Uoe3BsdWdpbnM6IFtwbHVnaW5GLCBbcGx1Z2luRywge31dXSwgc2V0dGluZ3M6IHtwb3NpdGlvbjogZmFsc2V9fSkKICAgICAgICogICAgIC8vIFNldHRpbmdzIG9ubHk6CiAgICAgICAqICAgICAudXNlKHtzZXR0aW5nczoge3Bvc2l0aW9uOiBmYWxzZX19KQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge0FycmF5PHVua25vd24+fSBbUGFyYW1ldGVycz1bXV0KICAgICAgICogQHRlbXBsYXRlIHtOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBbSW5wdXQ9dW5kZWZpbmVkXQogICAgICAgKiBAdGVtcGxhdGUgW091dHB1dD1JbnB1dF0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ByZXNldF0KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtQbHVnZ2FibGVMaXN0fSBsaXN0CiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UGx1Z2luPFBhcmFtZXRlcnMsIElucHV0LCBPdXRwdXQ+fSBwbHVnaW4KICAgICAgICogQHBhcmFtIHsuLi4oUGFyYW1ldGVycyB8IFtib29sZWFuXSl9IHBhcmFtZXRlcnMKICAgICAgICogQHJldHVybnMge1VzZVBsdWdpbjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQsIElucHV0LCBPdXRwdXQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1BsdWdnYWJsZUxpc3QgfCBQbHVnaW4gfCBQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZQogICAgICAgKiAgIFVzYWJsZSB2YWx1ZS4KICAgICAgICogQHBhcmFtIHsuLi51bmtub3dufSBwYXJhbWV0ZXJzCiAgICAgICAqICAgUGFyYW1ldGVycywgd2hlbiBhIHBsdWdpbiBpcyBnaXZlbiBhcyBhIHVzYWJsZSB2YWx1ZS4KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKiAgIEN1cnJlbnQgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgdXNlKHZhbHVlMiwgLi4ucGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IGF0dGFjaGVycyA9IHRoaXMuYXR0YWNoZXJzOwogICAgICAgIGNvbnN0IG5hbWVzcGFjZTIgPSB0aGlzLm5hbWVzcGFjZTsKICAgICAgICBhc3NlcnRVbmZyb3plbigidXNlIiwgdGhpcy5mcm96ZW4pOwogICAgICAgIGlmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDApIHsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTIsIHBhcmFtZXRlcnMpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgICAgICAgICAgYWRkTGlzdCh2YWx1ZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUyICsgImAiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZnVuY3Rpb24gYWRkMyh2YWx1ZTMpIHsKICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTMsIFtdKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMyA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUzKSkgewogICAgICAgICAgICAgIGNvbnN0IFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSA9ICgKICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7UGx1Z2luVHVwbGU8QXJyYXk8dW5rbm93bj4+fSAqLwogICAgICAgICAgICAgICAgdmFsdWUzCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICBhZGRQbHVnaW4ocGx1Z2luLCBwYXJhbWV0ZXJzMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUzICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUHJlc2V0KHJlc3VsdCkgewogICAgICAgICAgaWYgKCEoInBsdWdpbnMiIGluIHJlc3VsdCkgJiYgISgic2V0dGluZ3MiIGluIHJlc3VsdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICJFeHBlY3RlZCB1c2FibGUgdmFsdWUgYnV0IHJlY2VpdmVkIGFuIGVtcHR5IHByZXNldCwgd2hpY2ggaXMgcHJvYmFibHkgYSBtaXN0YWtlOiBwcmVzZXRzIHR5cGljYWxseSBjb21lIHdpdGggYHBsdWdpbnNgIGFuZCBzb21ldGltZXMgd2l0aCBgc2V0dGluZ3NgLCBidXQgdGhpcyBoYXMgbmVpdGhlciIKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkZExpc3QocmVzdWx0LnBsdWdpbnMpOwogICAgICAgICAgaWYgKHJlc3VsdC5zZXR0aW5ncykgewogICAgICAgICAgICBuYW1lc3BhY2UyLnNldHRpbmdzID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgbmFtZXNwYWNlMi5zZXR0aW5ncywgcmVzdWx0LnNldHRpbmdzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdChwbHVnaW5zMykgewogICAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgICAgaWYgKHBsdWdpbnMzID09PSBudWxsIHx8IHBsdWdpbnMzID09PSB2b2lkIDApIHsKICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwbHVnaW5zMykpIHsKICAgICAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgcGx1Z2luczMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgY29uc3QgdGhpbmcgPSBwbHVnaW5zM1tpbmRleDJdOwogICAgICAgICAgICAgIGFkZDModGhpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGAiICsgcGx1Z2luczMgKyAiYCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luLCBwYXJhbWV0ZXJzMikgewogICAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgICAgbGV0IGVudHJ5SW5kZXggPSAtMTsKICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGF0dGFjaGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGF0dGFjaGVyc1tpbmRleDJdWzBdID09PSBwbHVnaW4pIHsKICAgICAgICAgICAgICBlbnRyeUluZGV4ID0gaW5kZXgyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW50cnlJbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgYXR0YWNoZXJzLnB1c2goW3BsdWdpbiwgLi4ucGFyYW1ldGVyczJdKTsKICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyczIubGVuZ3RoID4gMCkgewogICAgICAgICAgICBsZXQgW3ByaW1hcnksIC4uLnJlc3RdID0gcGFyYW1ldGVyczI7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmltYXJ5ID0gYXR0YWNoZXJzW2VudHJ5SW5kZXhdWzFdOwogICAgICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChjdXJyZW50UHJpbWFyeSkgJiYgaXNQbGFpbk9iamVjdChwcmltYXJ5KSkgewogICAgICAgICAgICAgIHByaW1hcnkgPSAoMCwgaW1wb3J0X2V4dGVuZC5kZWZhdWx0KSh0cnVlLCBjdXJyZW50UHJpbWFyeSwgcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXR0YWNoZXJzW2VudHJ5SW5kZXhdID0gW3BsdWdpbiwgcHJpbWFyeSwgLi4ucmVzdF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgdW5pZmllZCA9IG5ldyBQcm9jZXNzb3IoKS5mcmVlemUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2luZGV4LmpzCnZhciBpbml0X3VuaWZpZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzCmZ1bmN0aW9uIGNjb3VudCh2YWx1ZTIsIGNoYXJhY3RlcikgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGlmICh0eXBlb2YgY2hhcmFjdGVyICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgY2hhcmFjdGVyIik7CiAgfQogIGxldCBjb3VudDIgPSAwOwogIGxldCBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIpOwogIHdoaWxlIChpbmRleDIgIT09IC0xKSB7CiAgICBjb3VudDIrKzsKICAgIGluZGV4MiA9IHNvdXJjZS5pbmRleE9mKGNoYXJhY3RlciwgaW5kZXgyICsgY2hhcmFjdGVyLmxlbmd0aCk7CiAgfQogIHJldHVybiBjb3VudDI7Cn0KdmFyIGluaXRfY2NvdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2NvdW50QDIuMC4xL25vZGVfbW9kdWxlcy9jY291bnQvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXIvaW5kZXguanMKZnVuY3Rpb24gYXNjaWlDb250cm9sKGNvZGU0KSB7CiAgcmV0dXJuICgKICAgIC8vIFNwZWNpYWwgd2hpdGVzcGFjZSBjb2RlcyAod2hpY2ggaGF2ZSBuZWdhdGl2ZSB2YWx1ZXMpLCBDMCBhbmQgQ29udHJvbAogICAgLy8gY2hhcmFjdGVyIERFTAogICAgY29kZTQgIT09IG51bGwgJiYgKGNvZGU0IDwgMzIgfHwgY29kZTQgPT09IDEyNykKICApOwp9CmZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgewogIHJldHVybiBjb2RlNCAhPT0gbnVsbCAmJiBjb2RlNCA8IC0yOwp9CmZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IG51bGwgJiYgKGNvZGU0IDwgMCB8fCBjb2RlNCA9PT0gMzIpOwp9CmZ1bmN0aW9uIG1hcmtkb3duU3BhY2UoY29kZTQpIHsKICByZXR1cm4gY29kZTQgPT09IC0yIHx8IGNvZGU0ID09PSAtMSB8fCBjb2RlNCA9PT0gMzI7Cn0KZnVuY3Rpb24gcmVnZXhDaGVjayhyZWdleCkgewogIHJldHVybiBjaGVjazsKICBmdW5jdGlvbiBjaGVjayhjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ICE9PSBudWxsICYmIGNvZGU0ID4gLTEgJiYgcmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KSk7CiAgfQp9CnZhciBhc2NpaUFscGhhLCBhc2NpaUFscGhhbnVtZXJpYywgYXNjaWlBdGV4dCwgYXNjaWlEaWdpdCwgYXNjaWlIZXhEaWdpdCwgYXNjaWlQdW5jdHVhdGlvbiwgdW5pY29kZVB1bmN0dWF0aW9uLCB1bmljb2RlV2hpdGVzcGFjZTsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXIvaW5kZXguanMiKCkgewogICAgYXNjaWlBbHBoYSA9IHJlZ2V4Q2hlY2soL1tBLVphLXpdLyk7CiAgICBhc2NpaUFscGhhbnVtZXJpYyA9IHJlZ2V4Q2hlY2soL1tcZEEtWmEtel0vKTsKICAgIGFzY2lpQXRleHQgPSByZWdleENoZWNrKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7CiAgICBhc2NpaURpZ2l0ID0gcmVnZXhDaGVjaygvXGQvKTsKICAgIGFzY2lpSGV4RGlnaXQgPSByZWdleENoZWNrKC9bXGRBLUZhLWZdLyk7CiAgICBhc2NpaVB1bmN0dWF0aW9uID0gcmVnZXhDaGVjaygvWyEtLzotQFstYHstfl0vKTsKICAgIHVuaWNvZGVQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1xwe1B9fFxwe1N9L3UpOwogICAgdW5pY29kZVdoaXRlc3BhY2UgPSByZWdleENoZWNrKC9ccy8pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMKZnVuY3Rpb24gYW55RmFjdG9yeSh0ZXN0cykgewogIGNvbnN0IGNoZWNrczIgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgdGVzdHMubGVuZ3RoKSB7CiAgICBjaGVja3MyW2luZGV4Ml0gPSBjb252ZXJ0KHRlc3RzW2luZGV4Ml0pOwogIH0KICByZXR1cm4gY2FzdEZhY3RvcnkoYW55KTsKICBmdW5jdGlvbiBhbnkoLi4ucGFyYW1ldGVycykgewogICAgbGV0IGluZGV4MyA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgzIDwgY2hlY2tzMi5sZW5ndGgpIHsKICAgICAgaWYgKGNoZWNrczJbaW5kZXgzXS5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmZ1bmN0aW9uIHByb3BlcnRpZXNGYWN0b3J5KGNoZWNrKSB7CiAgY29uc3QgY2hlY2tBc1JlY29yZCA9ICgKICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICBjaGVjawogICk7CiAgcmV0dXJuIGNhc3RGYWN0b3J5KGFsbDMpOwogIGZ1bmN0aW9uIGFsbDMobm9kZTIpIHsKICAgIGNvbnN0IG5vZGVBc1JlY29yZCA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8KICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLwogICAgICBub2RlMgogICAgKTsKICAgIGxldCBrZXkyOwogICAgZm9yIChrZXkyIGluIGNoZWNrKSB7CiAgICAgIGlmIChub2RlQXNSZWNvcmRba2V5Ml0gIT09IGNoZWNrQXNSZWNvcmRba2V5Ml0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQpmdW5jdGlvbiB0eXBlRmFjdG9yeShjaGVjaykgewogIHJldHVybiBjYXN0RmFjdG9yeSh0eXBlNSk7CiAgZnVuY3Rpb24gdHlwZTUobm9kZTIpIHsKICAgIHJldHVybiBub2RlMiAmJiBub2RlMi50eXBlID09PSBjaGVjazsKICB9Cn0KZnVuY3Rpb24gY2FzdEZhY3RvcnkodGVzdEZ1bmN0aW9uKSB7CiAgcmV0dXJuIGNoZWNrOwogIGZ1bmN0aW9uIGNoZWNrKHZhbHVlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICAgIHJldHVybiBCb29sZWFuKAogICAgICBsb29rc0xpa2VBTm9kZSh2YWx1ZTIpICYmIHRlc3RGdW5jdGlvbi5jYWxsKAogICAgICAgIHRoaXMsCiAgICAgICAgdmFsdWUyLAogICAgICAgIHR5cGVvZiBpbmRleDIgPT09ICJudW1iZXIiID8gaW5kZXgyIDogdm9pZCAwLAogICAgICAgIHBhcmVudCB8fCB2b2lkIDAKICAgICAgKQogICAgKTsKICB9Cn0KZnVuY3Rpb24gb2syKCkgewogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGxvb2tzTGlrZUFOb2RlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgInR5cGUiIGluIHZhbHVlMjsKfQp2YXIgaXMsIGNvbnZlcnQ7CnZhciBpbml0X2xpYjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLWlzQDYuMC4xL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLWlzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpcyA9IC8vIE5vdGU6IG92ZXJsb2FkcyBpbiBKU0RvYyBjYW7igJl0IHlldCB1c2UgZGlmZmVyZW50IGBAdGVtcGxhdGVgcy4KICAgIC8qKgogICAgICogQHR5cGUgeygKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBSZWFkb25seUFycmF5PHN0cmluZz4+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbltudW1iZXJdfSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIEFycmF5PHN0cmluZz4+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbltudW1iZXJdfSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiB7dHlwZTogQ29uZGl0aW9ufSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIENvbmRpdGlvbikgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJgogICAgICogICAoKG5vZGU/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiBmYWxzZSkgJgogICAgICogICAoKG5vZGU6IHVua25vd24sIHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUpICYKICAgICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogVGVzdCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gYm9vbGVhbikKICAgICAqICl9CiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHt1bmtub3dufSBbbm9kZV0KICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdCiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmRleF0KICAgICAqIEBwYXJhbSB7UGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BhcmVudF0KICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW2NvbnRleHRdCiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0KICAgICAqLwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXMKICAgIChmdW5jdGlvbihub2RlMiwgdGVzdCwgaW5kZXgyLCBwYXJlbnQsIGNvbnRleHQyKSB7CiAgICAgIGNvbnN0IGNoZWNrID0gY29udmVydCh0ZXN0KTsKICAgICAgaWYgKGluZGV4MiAhPT0gdm9pZCAwICYmIGluZGV4MiAhPT0gbnVsbCAmJiAodHlwZW9mIGluZGV4MiAhPT0gIm51bWJlciIgfHwgaW5kZXgyIDwgMCB8fCBpbmRleDIgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleCIpOwogICAgICB9CiAgICAgIGlmIChwYXJlbnQgIT09IHZvaWQgMCAmJiBwYXJlbnQgIT09IG51bGwgJiYgKCFpcyhwYXJlbnQpIHx8ICFwYXJlbnQuY2hpbGRyZW4pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwYXJlbnQgbm9kZSIpOwogICAgICB9CiAgICAgIGlmICgocGFyZW50ID09PSB2b2lkIDAgfHwgcGFyZW50ID09PSBudWxsKSAhPT0gKGluZGV4MiA9PT0gdm9pZCAwIHx8IGluZGV4MiA9PT0gbnVsbCkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGJvdGggcGFyZW50IGFuZCBpbmRleCIpOwogICAgICB9CiAgICAgIHJldHVybiBsb29rc0xpa2VBTm9kZShub2RlMikgPyBjaGVjay5jYWxsKGNvbnRleHQyLCBub2RlMiwgaW5kZXgyLCBwYXJlbnQpIDogZmFsc2U7CiAgICB9KTsKICAgIGNvbnZlcnQgPSAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2Fu4oCZdCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuCiAgICAvKioKICAgICAqIEB0eXBlIHsoCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgc3RyaW5nPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiB7dHlwZTogQ29uZGl0aW9ufSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBUZXN0RnVuY3Rpb24+KHRlc3Q6IENvbmRpdGlvbikgPT4gKG5vZGU6IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIFByZWRpY2F0ZTxDb25kaXRpb24sIE5vZGU+KSAmCiAgICAgKiAgICgodGVzdD86IG51bGwgfCB1bmRlZmluZWQpID0+IChub2RlPzogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmCiAgICAgKiAgICgodGVzdD86IFRlc3QpID0+IENoZWNrKQogICAgICogKX0KICAgICAqLwogICAgLyoqCiAgICAgKiBAcGFyYW0ge1Rlc3R9IFt0ZXN0XQogICAgICogQHJldHVybnMge0NoZWNrfQogICAgICovCiAgICAoZnVuY3Rpb24odGVzdCkgewogICAgICBpZiAodGVzdCA9PT0gbnVsbCB8fCB0ZXN0ID09PSB2b2lkIDApIHsKICAgICAgICByZXR1cm4gb2syOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgdGVzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBjYXN0RmFjdG9yeSh0ZXN0KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJvYmplY3QiKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGVzdCkgPyBhbnlGYWN0b3J5KHRlc3QpIDogKAogICAgICAgICAgLy8gQ2FzdCBiZWNhdXNlIGBSZWFkb25seUFycmF5YCBnb2VzIGludG8gdGhlIGFib3ZlIGJ1dCBgaXNBcnJheWAKICAgICAgICAgIC8vIG5hcnJvd3MgdG8gYEFycmF5YC4KICAgICAgICAgIHByb3BlcnRpZXNGYWN0b3J5KAogICAgICAgICAgICAvKiogQHR5cGUge1Byb3BzfSAqLwogICAgICAgICAgICB0ZXN0CiAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIHR5cGVGYWN0b3J5KHRlc3QpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3QiKTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9jb2xvci5qcwpmdW5jdGlvbiBjb2xvcihkNikgewogIHJldHVybiBkNjsKfQp2YXIgaW5pdF9jb2xvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9jb2xvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvaW5kZXguanMKZnVuY3Rpb24gdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIHZpc2l0b3IsIHJldmVyc2UpIHsKICBsZXQgY2hlY2s7CiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiB2aXNpdG9yICE9PSAiZnVuY3Rpb24iKSB7CiAgICByZXZlcnNlID0gdmlzaXRvcjsKICAgIHZpc2l0b3IgPSB0ZXN0OwogIH0gZWxzZSB7CiAgICBjaGVjayA9IHRlc3Q7CiAgfQogIGNvbnN0IGlzMyA9IGNvbnZlcnQoY2hlY2spOwogIGNvbnN0IHN0ZXAgPSByZXZlcnNlID8gLTEgOiAxOwogIGZhY3RvcnkodHJlZSwgdm9pZCAwLCBbXSkoKTsKICBmdW5jdGlvbiBmYWN0b3J5KG5vZGUyLCBpbmRleDIsIHBhcmVudHMpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8KICAgICAgbm9kZTIgJiYgdHlwZW9mIG5vZGUyID09PSAib2JqZWN0IiA/IG5vZGUyIDoge30KICAgICk7CiAgICBpZiAodHlwZW9mIHZhbHVlMi50eXBlID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBuYW1lID0gKAogICAgICAgIC8vIGBoYXN0YAogICAgICAgIHR5cGVvZiB2YWx1ZTIudGFnTmFtZSA9PT0gInN0cmluZyIgPyB2YWx1ZTIudGFnTmFtZSA6ICgKICAgICAgICAgIC8vIGB4YXN0YAogICAgICAgICAgdHlwZW9mIHZhbHVlMi5uYW1lID09PSAic3RyaW5nIiA/IHZhbHVlMi5uYW1lIDogdm9pZCAwCiAgICAgICAgKQogICAgICApOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlzaXQyLCAibmFtZSIsIHsKICAgICAgICB2YWx1ZTogIm5vZGUgKCIgKyBjb2xvcihub2RlMi50eXBlICsgKG5hbWUgPyAiPCIgKyBuYW1lICsgIj4iIDogIiIpKSArICIpIgogICAgICB9KTsKICAgIH0KICAgIHJldHVybiB2aXNpdDI7CiAgICBmdW5jdGlvbiB2aXNpdDIoKSB7CiAgICAgIGxldCByZXN1bHQgPSBlbXB0eTI7CiAgICAgIGxldCBzdWJyZXN1bHQ7CiAgICAgIGxldCBvZmZzZXQ7CiAgICAgIGxldCBncmFuZHBhcmVudHM7CiAgICAgIGlmICghdGVzdCB8fCBpczMobm9kZTIsIGluZGV4MiwgcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdIHx8IHZvaWQgMCkpIHsKICAgICAgICByZXN1bHQgPSB0b1Jlc3VsdCh2aXNpdG9yKG5vZGUyLCBwYXJlbnRzKSk7CiAgICAgICAgaWYgKHJlc3VsdFswXSA9PT0gRVhJVCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCJjaGlsZHJlbiIgaW4gbm9kZTIgJiYgbm9kZTIuY2hpbGRyZW4pIHsKICAgICAgICBjb25zdCBub2RlQXNQYXJlbnQgPSAoCiAgICAgICAgICAvKiogQHR5cGUge1VuaXN0UGFyZW50fSAqLwogICAgICAgICAgbm9kZTIKICAgICAgICApOwogICAgICAgIGlmIChub2RlQXNQYXJlbnQuY2hpbGRyZW4gJiYgcmVzdWx0WzBdICE9PSBTS0lQKSB7CiAgICAgICAgICBvZmZzZXQgPSAocmV2ZXJzZSA/IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGggOiAtMSkgKyBzdGVwOwogICAgICAgICAgZ3JhbmRwYXJlbnRzID0gcGFyZW50cy5jb25jYXQobm9kZUFzUGFyZW50KTsKICAgICAgICAgIHdoaWxlIChvZmZzZXQgPiAtMSAmJiBvZmZzZXQgPCBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZUFzUGFyZW50LmNoaWxkcmVuW29mZnNldF07CiAgICAgICAgICAgIHN1YnJlc3VsdCA9IGZhY3RvcnkoY2hpbGQsIG9mZnNldCwgZ3JhbmRwYXJlbnRzKSgpOwogICAgICAgICAgICBpZiAoc3VicmVzdWx0WzBdID09PSBFWElUKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHN1YnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZmZzZXQgPSB0eXBlb2Ygc3VicmVzdWx0WzFdID09PSAibnVtYmVyIiA/IHN1YnJlc3VsdFsxXSA6IG9mZnNldCArIHN0ZXA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHRvUmVzdWx0KHZhbHVlMikgewogIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGlmICh0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIikgewogICAgcmV0dXJuIFtDT05USU5VRSwgdmFsdWUyXTsKICB9CiAgcmV0dXJuIHZhbHVlMiA9PT0gbnVsbCB8fCB2YWx1ZTIgPT09IHZvaWQgMCA/IGVtcHR5MiA6IFt2YWx1ZTJdOwp9CnZhciBlbXB0eTIsIENPTlRJTlVFLCBFWElULCBTS0lQOwp2YXIgaW5pdF9saWI3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogICAgaW5pdF9jb2xvcigpOwogICAgZW1wdHkyID0gW107CiAgICBDT05USU5VRSA9IHRydWU7CiAgICBFWElUID0gZmFsc2U7CiAgICBTS0lQID0gInNraXAiOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI3KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2VAMy4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZmluZEFuZFJlcGxhY2UodHJlZSwgbGlzdDUsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgaWdub3JlZCA9IGNvbnZlcnQoc2V0dGluZ3MuaWdub3JlIHx8IFtdKTsKICBjb25zdCBwYWlyczIgPSB0b1BhaXJzKGxpc3Q1KTsKICBsZXQgcGFpckluZGV4ID0gLTE7CiAgd2hpbGUgKCsrcGFpckluZGV4IDwgcGFpcnMyLmxlbmd0aCkgewogICAgdmlzaXRQYXJlbnRzKHRyZWUsICJ0ZXh0IiwgdmlzaXRvcik7CiAgfQogIGZ1bmN0aW9uIHZpc2l0b3Iobm9kZTIsIHBhcmVudHMpIHsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGxldCBncmFuZHBhcmVudDsKICAgIHdoaWxlICgrK2luZGV4MiA8IHBhcmVudHMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbaW5kZXgyXTsKICAgICAgY29uc3Qgc2libGluZ3MyID0gZ3JhbmRwYXJlbnQgPyBncmFuZHBhcmVudC5jaGlsZHJlbiA6IHZvaWQgMDsKICAgICAgaWYgKGlnbm9yZWQoCiAgICAgICAgcGFyZW50LAogICAgICAgIHNpYmxpbmdzMiA/IHNpYmxpbmdzMi5pbmRleE9mKHBhcmVudCkgOiB2b2lkIDAsCiAgICAgICAgZ3JhbmRwYXJlbnQKICAgICAgKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBncmFuZHBhcmVudCA9IHBhcmVudDsKICAgIH0KICAgIGlmIChncmFuZHBhcmVudCkgewogICAgICByZXR1cm4gaGFuZGxlcjIobm9kZTIsIHBhcmVudHMpOwogICAgfQogIH0KICBmdW5jdGlvbiBoYW5kbGVyMihub2RlMiwgcGFyZW50cykgewogICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdOwogICAgY29uc3QgZmluZDMgPSBwYWlyczJbcGFpckluZGV4XVswXTsKICAgIGNvbnN0IHJlcGxhY2U1ID0gcGFpcnMyW3BhaXJJbmRleF1bMV07CiAgICBsZXQgc3RhcnQgPSAwOwogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgY29uc3QgaW5kZXgyID0gc2libGluZ3MyLmluZGV4T2Yobm9kZTIpOwogICAgbGV0IGNoYW5nZSA9IGZhbHNlOwogICAgbGV0IG5vZGVzID0gW107CiAgICBmaW5kMy5sYXN0SW5kZXggPSAwOwogICAgbGV0IG1hdGNoMiA9IGZpbmQzLmV4ZWMobm9kZTIudmFsdWUpOwogICAgd2hpbGUgKG1hdGNoMikgewogICAgICBjb25zdCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXg7CiAgICAgIGNvbnN0IG1hdGNoT2JqZWN0ID0gewogICAgICAgIGluZGV4OiBtYXRjaDIuaW5kZXgsCiAgICAgICAgaW5wdXQ6IG1hdGNoMi5pbnB1dCwKICAgICAgICBzdGFjazogWy4uLnBhcmVudHMsIG5vZGUyXQogICAgICB9OwogICAgICBsZXQgdmFsdWUyID0gcmVwbGFjZTUoLi4ubWF0Y2gyLCBtYXRjaE9iamVjdCk7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIikgewogICAgICAgIHZhbHVlMiA9IHZhbHVlMi5sZW5ndGggPiAwID8geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfSA6IHZvaWQgMDsKICAgICAgfQogICAgICBpZiAodmFsdWUyID09PSBmYWxzZSkgewogICAgICAgIGZpbmQzLmxhc3RJbmRleCA9IHBvc2l0aW9uMyArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbjMpIHsKICAgICAgICAgIG5vZGVzLnB1c2goewogICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgIHZhbHVlOiBub2RlMi52YWx1ZS5zbGljZShzdGFydCwgcG9zaXRpb24zKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgICAgICAgIG5vZGVzLnB1c2goLi4udmFsdWUyKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMikgewogICAgICAgICAgbm9kZXMucHVzaCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHBvc2l0aW9uMyArIG1hdGNoMlswXS5sZW5ndGg7CiAgICAgICAgY2hhbmdlID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoIWZpbmQzLmdsb2JhbCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1hdGNoMiA9IGZpbmQzLmV4ZWMobm9kZTIudmFsdWUpOwogICAgfQogICAgaWYgKGNoYW5nZSkgewogICAgICBpZiAoc3RhcnQgPCBub2RlMi52YWx1ZS5sZW5ndGgpIHsKICAgICAgICBub2Rlcy5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUuc2xpY2Uoc3RhcnQpIH0pOwogICAgICB9CiAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgyLCAxLCAuLi5ub2Rlcyk7CiAgICB9IGVsc2UgewogICAgICBub2RlcyA9IFtub2RlMl07CiAgICB9CiAgICByZXR1cm4gaW5kZXgyICsgbm9kZXMubGVuZ3RoOwogIH0KfQpmdW5jdGlvbiB0b1BhaXJzKHR1cGxlT3JMaXN0KSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgaWYgKCFBcnJheS5pc0FycmF5KHR1cGxlT3JMaXN0KSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgZmluZCBhbmQgcmVwbGFjZSB0dXBsZSBvciBsaXN0IG9mIHR1cGxlcyIpOwogIH0KICBjb25zdCBsaXN0NSA9ICF0dXBsZU9yTGlzdFswXSB8fCBBcnJheS5pc0FycmF5KHR1cGxlT3JMaXN0WzBdKSA/IHR1cGxlT3JMaXN0IDogW3R1cGxlT3JMaXN0XTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICBjb25zdCB0dXBsZSA9IGxpc3Q1W2luZGV4Ml07CiAgICByZXN1bHQucHVzaChbdG9FeHByZXNzaW9uKHR1cGxlWzBdKSwgdG9GdW5jdGlvbih0dXBsZVsxXSldKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiB0b0V4cHJlc3Npb24oZmluZDMpIHsKICByZXR1cm4gdHlwZW9mIGZpbmQzID09PSAic3RyaW5nIiA/IG5ldyBSZWdFeHAoZXNjYXBlU3RyaW5nUmVnZXhwKGZpbmQzKSwgImciKSA6IGZpbmQzOwp9CmZ1bmN0aW9uIHRvRnVuY3Rpb24ocmVwbGFjZTUpIHsKICByZXR1cm4gdHlwZW9mIHJlcGxhY2U1ID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZTUgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiByZXBsYWNlNTsKICB9Owp9CnZhciBpbml0X2xpYjggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2VAMy4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCgpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0X3BhcmVudHMoKTsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9maW5kX2FuZF9yZXBsYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHRyYW5zZm9ybXM6IFt0cmFuc2Zvcm1HZm1BdXRvbGlua0xpdGVyYWxzXSwKICAgIGVudGVyOiB7CiAgICAgIGxpdGVyYWxBdXRvbGluazogZW50ZXJMaXRlcmFsQXV0b2xpbmssCiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsOiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlLAogICAgICBsaXRlcmFsQXV0b2xpbmtIdHRwOiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUKICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGxpdGVyYWxBdXRvbGluazogZXhpdExpdGVyYWxBdXRvbGluaywKICAgICAgbGl0ZXJhbEF1dG9saW5rRW1haWw6IGV4aXRMaXRlcmFsQXV0b2xpbmtFbWFpbCwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZXhpdExpdGVyYWxBdXRvbGlua0h0dHAsCiAgICAgIGxpdGVyYWxBdXRvbGlua1d3dzogZXhpdExpdGVyYWxBdXRvbGlua1d3dwogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsVG9NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgdW5zYWZlOiBbCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJAIiwKICAgICAgICBiZWZvcmU6ICJbK1xcLS5cXHddIiwKICAgICAgICBhZnRlcjogIltcXC0uXFx3XSIsCiAgICAgICAgaW5Db25zdHJ1Y3QsCiAgICAgICAgbm90SW5Db25zdHJ1Y3QKICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIi4iLAogICAgICAgIGJlZm9yZTogIltXd10iLAogICAgICAgIGFmdGVyOiAiW1xcLS5cXHddIiwKICAgICAgICBpbkNvbnN0cnVjdCwKICAgICAgICBub3RJbkNvbnN0cnVjdAogICAgICB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiOiIsCiAgICAgICAgYmVmb3JlOiAiW3BzXSIsCiAgICAgICAgYWZ0ZXI6ICJcXC8iLAogICAgICAgIGluQ29uc3RydWN0LAogICAgICAgIG5vdEluQ29uc3RydWN0CiAgICAgIH0KICAgIF0KICB9Owp9CmZ1bmN0aW9uIGVudGVyTGl0ZXJhbEF1dG9saW5rKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJsaW5rIiwgdGl0bGU6IG51bGwsIHVybDogIiIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSh0b2tlbikgewogIHRoaXMuY29uZmlnLmVudGVyLmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGlua0h0dHAodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGlua1d3dyh0b2tlbikgewogIHRoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAibGluayIpOwogIG5vZGUyLnVybCA9ICJodHRwOi8vIiArIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtFbWFpbCh0b2tlbikgewogIHRoaXMuY29uZmlnLmV4aXQuYXV0b2xpbmtFbWFpbC5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiB0cmFuc2Zvcm1HZm1BdXRvbGlua0xpdGVyYWxzKHRyZWUpIHsKICBmaW5kQW5kUmVwbGFjZSgKICAgIHRyZWUsCiAgICBbCiAgICAgIFsvKGh0dHBzPzpcL1wvfHd3dyg/PVwuKSkoWy0uXHddKykoW14gXHRcclxuXSopL2dpLCBmaW5kVXJsXSwKICAgICAgWy8oPzw9Xnxcc3xccHtQfXxccHtTfSkoWy0uXHcrXSspQChbLVx3XSsoPzpcLlstXHddKykrKS9ndSwgZmluZEVtYWlsXQogICAgXSwKICAgIHsgaWdub3JlOiBbImxpbmsiLCAibGlua1JlZmVyZW5jZSJdIH0KICApOwp9CmZ1bmN0aW9uIGZpbmRVcmwoXzQsIHByb3RvY29sLCBkb21haW4yLCBwYXRoMiwgbWF0Y2gyKSB7CiAgbGV0IHByZWZpeDQgPSAiIjsKICBpZiAoIXByZXZpb3VzKG1hdGNoMikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKC9edy9pLnRlc3QocHJvdG9jb2wpKSB7CiAgICBkb21haW4yID0gcHJvdG9jb2wgKyBkb21haW4yOwogICAgcHJvdG9jb2wgPSAiIjsKICAgIHByZWZpeDQgPSAiaHR0cDovLyI7CiAgfQogIGlmICghaXNDb3JyZWN0RG9tYWluKGRvbWFpbjIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IHBhcnRzID0gc3BsaXRVcmwoZG9tYWluMiArIHBhdGgyKTsKICBpZiAoIXBhcnRzWzBdKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImxpbmsiLAogICAgdGl0bGU6IG51bGwsCiAgICB1cmw6IHByZWZpeDQgKyBwcm90b2NvbCArIHBhcnRzWzBdLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHByb3RvY29sICsgcGFydHNbMF0gfV0KICB9OwogIGlmIChwYXJ0c1sxXSkgewogICAgcmV0dXJuIFtyZXN1bHQsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogcGFydHNbMV0gfV07CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZmluZEVtYWlsKF80LCBhdGV4dCwgbGFiZWwsIG1hdGNoMikgewogIGlmICgKICAgIC8vIE5vdCBhbiBleHBlY3RlZCBwcmV2aW91cyBjaGFyYWN0ZXIuCiAgICAhcHJldmlvdXMobWF0Y2gyLCB0cnVlKSB8fCAvLyBMYWJlbCBlbmRzIGluIG5vdCBhbGxvd2VkIGNoYXJhY3Rlci4KICAgIC9bLVxkX10kLy50ZXN0KGxhYmVsKQogICkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gewogICAgdHlwZTogImxpbmsiLAogICAgdGl0bGU6IG51bGwsCiAgICB1cmw6ICJtYWlsdG86IiArIGF0ZXh0ICsgIkAiICsgbGFiZWwsCiAgICBjaGlsZHJlbjogW3sgdHlwZTogInRleHQiLCB2YWx1ZTogYXRleHQgKyAiQCIgKyBsYWJlbCB9XQogIH07Cn0KZnVuY3Rpb24gaXNDb3JyZWN0RG9tYWluKGRvbWFpbjIpIHsKICBjb25zdCBwYXJ0cyA9IGRvbWFpbjIuc3BsaXQoIi4iKTsKICBpZiAocGFydHMubGVuZ3RoIDwgMiB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSAmJiAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIHx8ICEvW2EtekEtWlxkXS8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkpIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdICYmICgvXy8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSkgfHwgIS9bYS16QS1aXGRdLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdKSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc3BsaXRVcmwodXJsKSB7CiAgY29uc3QgdHJhaWxFeGVjID0gL1shIiYnKSwuOjs8Pj9cXX1dKyQvLmV4ZWModXJsKTsKICBpZiAoIXRyYWlsRXhlYykgewogICAgcmV0dXJuIFt1cmwsIHZvaWQgMF07CiAgfQogIHVybCA9IHVybC5zbGljZSgwLCB0cmFpbEV4ZWMuaW5kZXgpOwogIGxldCB0cmFpbDIgPSB0cmFpbEV4ZWNbMF07CiAgbGV0IGNsb3NpbmdQYXJlbkluZGV4ID0gdHJhaWwyLmluZGV4T2YoIikiKTsKICBjb25zdCBvcGVuaW5nUGFyZW5zID0gY2NvdW50KHVybCwgIigiKTsKICBsZXQgY2xvc2luZ1BhcmVucyA9IGNjb3VudCh1cmwsICIpIik7CiAgd2hpbGUgKGNsb3NpbmdQYXJlbkluZGV4ICE9PSAtMSAmJiBvcGVuaW5nUGFyZW5zID4gY2xvc2luZ1BhcmVucykgewogICAgdXJsICs9IHRyYWlsMi5zbGljZSgwLCBjbG9zaW5nUGFyZW5JbmRleCArIDEpOwogICAgdHJhaWwyID0gdHJhaWwyLnNsaWNlKGNsb3NpbmdQYXJlbkluZGV4ICsgMSk7CiAgICBjbG9zaW5nUGFyZW5JbmRleCA9IHRyYWlsMi5pbmRleE9mKCIpIik7CiAgICBjbG9zaW5nUGFyZW5zKys7CiAgfQogIHJldHVybiBbdXJsLCB0cmFpbDJdOwp9CmZ1bmN0aW9uIHByZXZpb3VzKG1hdGNoMiwgZW1haWwpIHsKICBjb25zdCBjb2RlNCA9IG1hdGNoMi5pbnB1dC5jaGFyQ29kZUF0KG1hdGNoMi5pbmRleCAtIDEpOwogIHJldHVybiAobWF0Y2gyLmluZGV4ID09PSAwIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpKSAmJiAvLyBJZiBpdOKAmXMgYW4gZW1haWwsIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2hvdWxkIG5vdCBiZSBhIHNsYXNoLgogICghZW1haWwgfHwgY29kZTQgIT09IDQ3KTsKfQp2YXIgaW5Db25zdHJ1Y3QsIG5vdEluQ29uc3RydWN0Owp2YXIgaW5pdF9saWI5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9jY291bnQoKTsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9maW5kX2FuZF9yZXBsYWNlKCk7CiAgICBpbkNvbnN0cnVjdCA9ICJwaHJhc2luZyI7CiAgICBub3RJbkNvbnN0cnVjdCA9IFsiYXV0b2xpbmsiLCAibGluayIsICJpbWFnZSIsICJsYWJlbCJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV9hdXRvbGlua19saXRlcmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllci9pbmRleC5qcwpmdW5jdGlvbiBub3JtYWxpemVJZGVudGlmaWVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvW1x0XG5cciBdKy9nLCAiICIpLnJlcGxhY2UoL14gfCAkL2csICIiKS50b0xvd2VyQ2FzZSgpLnRvVXBwZXJDYXNlKCk7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZygpIHsKICB0aGlzLmJ1ZmZlcigpOwp9CmZ1bmN0aW9uIGVudGVyRm9vdG5vdGVDYWxsKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJmb290bm90ZVJlZmVyZW5jZSIsIGlkZW50aWZpZXI6ICIiLCBsYWJlbDogIiIgfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcoKSB7CiAgdGhpcy5idWZmZXIoKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikgewogIHRoaXMuZW50ZXIoCiAgICB7IHR5cGU6ICJmb290bm90ZURlZmluaXRpb24iLCBpZGVudGlmaWVyOiAiIiwgbGFiZWw6ICIiLCBjaGlsZHJlbjogW10gfSwKICAgIHRva2VuCiAgKTsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVDYWxsU3RyaW5nKHRva2VuKSB7CiAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJmb290bm90ZVJlZmVyZW5jZSIpOwogIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKAogICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikKICApLnRvTG93ZXJDYXNlKCk7CiAgbm9kZTIubGFiZWwgPSBsYWJlbDsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVDYWxsKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcodG9rZW4pIHsKICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImZvb3Rub3RlRGVmaW5pdGlvbiIpOwogIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKAogICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikKICApLnRvTG93ZXJDYXNlKCk7CiAgbm9kZTIubGFiZWwgPSBsYWJlbDsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICJbIjsKfQpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZShub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlteIik7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJmb290bm90ZVJlZmVyZW5jZSIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJyZWZlcmVuY2UiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxMi5zYWZlKHN0YXRlMTIuYXNzb2NpYXRpb25JZChub2RlMiksIHsgYWZ0ZXI6ICJdIiwgYmVmb3JlOiB2YWx1ZTIgfSkKICApOwogIHN1YmV4aXQoKTsKICBleGl0MygpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl0iKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmc6IGVudGVyRm9vdG5vdGVDYWxsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZUNhbGw6IGVudGVyRm9vdG5vdGVDYWxsLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZW50ZXJGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uOiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbgogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBleGl0Rm9vdG5vdGVDYWxsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZUNhbGw6IGV4aXRGb290bm90ZUNhbGwsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZXhpdEZvb3Rub3RlRGVmaW5pdGlvbgogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVUb01hcmtkb3duKG9wdGlvbnMpIHsKICBsZXQgZmlyc3RMaW5lQmxhbmsgPSBmYWxzZTsKICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpcnN0TGluZUJsYW5rKSB7CiAgICBmaXJzdExpbmVCbGFuayA9IHRydWU7CiAgfQogIHJldHVybiB7CiAgICBoYW5kbGVyczogeyBmb290bm90ZURlZmluaXRpb24sIGZvb3Rub3RlUmVmZXJlbmNlIH0sCiAgICAvLyBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQgYWxyZWFkeS4KICAgIHVuc2FmZTogW3sgY2hhcmFjdGVyOiAiWyIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInBocmFzaW5nIiwgInJlZmVyZW5jZSJdIH1dCiAgfTsKICBmdW5jdGlvbiBmb290bm90ZURlZmluaXRpb24obm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogICAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiW14iKTsKICAgIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigiZm9vdG5vdGVEZWZpbml0aW9uIik7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIl0iIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXToiKTsKICAgIGlmIChub2RlMi5jaGlsZHJlbiAmJiBub2RlMi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIHRyYWNrZXIuc2hpZnQoNCk7CiAgICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgICAgKGZpcnN0TGluZUJsYW5rID8gIlxuIiA6ICIgIikgKyBzdGF0ZTEyLmluZGVudExpbmVzKAogICAgICAgICAgc3RhdGUxMi5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICAgICAgICBmaXJzdExpbmVCbGFuayA/IG1hcEFsbCA6IG1hcEV4Y2VwdEZpcnN0CiAgICAgICAgKQogICAgICApOwogICAgfQogICAgZXhpdDMoKTsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CmZ1bmN0aW9uIG1hcEV4Y2VwdEZpcnN0KGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICByZXR1cm4gaW5kZXgyID09PSAwID8gbGluZSA6IG1hcEFsbChsaW5lLCBpbmRleDIsIGJsYW5rKTsKfQpmdW5jdGlvbiBtYXBBbGwobGluZSwgaW5kZXgyLCBibGFuaykgewogIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgICAgIikgKyBsaW5lOwp9CnZhciBpbml0X2xpYjEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGZvb3Rub3RlUmVmZXJlbmNlLnBlZWsgPSBmb290bm90ZVJlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaEZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgY2FuQ29udGFpbkVvbHM6IFsiZGVsZXRlIl0sCiAgICBlbnRlcjogeyBzdHJpa2V0aHJvdWdoOiBlbnRlclN0cmlrZXRocm91Z2ggfSwKICAgIGV4aXQ6IHsgc3RyaWtldGhyb3VnaDogZXhpdFN0cmlrZXRocm91Z2ggfQogIH07Cn0KZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAifiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaAogICAgICB9CiAgICBdLAogICAgaGFuZGxlcnM6IHsgZGVsZXRlOiBoYW5kbGVEZWxldGUgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJkZWxldGUiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBoYW5kbGVEZWxldGUobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoInN0cmlrZXRocm91Z2giKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIHZhbHVlMiArPSBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAuLi50cmFja2VyLmN1cnJlbnQoKSwKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJ+IgogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIn5+Iik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIHBlZWtEZWxldGUoKSB7CiAgcmV0dXJuICJ+IjsKfQp2YXIgY29uc3RydWN0c1dpdGhvdXRTdHJpa2V0aHJvdWdoOwp2YXIgaW5pdF9saWIxMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2luZGV4LmpzIigpIHsKICAgIGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaCA9IFsKICAgICAgImF1dG9saW5rIiwKICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICJkZXN0aW5hdGlvblJhdyIsCiAgICAgICJyZWZlcmVuY2UiLAogICAgICAidGl0bGVRdW90ZSIsCiAgICAgICJ0aXRsZUFwb3N0cm9waGUiCiAgICBdOwogICAgaGFuZGxlRGVsZXRlLnBlZWsgPSBwZWVrRGVsZXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV9zdHJpa2V0aHJvdWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjExKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXJrZG93bi10YWJsZUAzLjAuNC9ub2RlX21vZHVsZXMvbWFya2Rvd24tdGFibGUvaW5kZXguanMKZnVuY3Rpb24gZGVmYXVsdFN0cmluZ0xlbmd0aCh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLmxlbmd0aDsKfQpmdW5jdGlvbiBtYXJrZG93blRhYmxlKHRhYmxlMiwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBhbGlnbiA9IChzZXR0aW5ncy5hbGlnbiB8fCBbXSkuY29uY2F0KCk7CiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoIHx8IGRlZmF1bHRTdHJpbmdMZW5ndGg7CiAgY29uc3QgYWxpZ25tZW50cyA9IFtdOwogIGNvbnN0IGNlbGxNYXRyaXggPSBbXTsKICBjb25zdCBzaXplTWF0cml4ID0gW107CiAgY29uc3QgbG9uZ2VzdENlbGxCeUNvbHVtbiA9IFtdOwogIGxldCBtb3N0Q2VsbHNQZXJSb3cgPSAwOwogIGxldCByb3dJbmRleCA9IC0xOwogIHdoaWxlICgrK3Jvd0luZGV4IDwgdGFibGUyLmxlbmd0aCkgewogICAgY29uc3Qgcm93MiA9IFtdOwogICAgY29uc3Qgc2l6ZXMyID0gW107CiAgICBsZXQgY29sdW1uSW5kZXgyID0gLTE7CiAgICBpZiAodGFibGUyW3Jvd0luZGV4XS5sZW5ndGggPiBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgICAgbW9zdENlbGxzUGVyUm93ID0gdGFibGUyW3Jvd0luZGV4XS5sZW5ndGg7CiAgICB9CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleDIgPCB0YWJsZTJbcm93SW5kZXhdLmxlbmd0aCkgewogICAgICBjb25zdCBjZWxsMiA9IHNlcmlhbGl6ZSh0YWJsZTJbcm93SW5kZXhdW2NvbHVtbkluZGV4Ml0pOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IHNpemUgPSBzdHJpbmdMZW5ndGgoY2VsbDIpOwogICAgICAgIHNpemVzMltjb2x1bW5JbmRleDJdID0gc2l6ZTsKICAgICAgICBpZiAobG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleDJdID09PSB2b2lkIDAgfHwgc2l6ZSA+IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSkgewogICAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleDJdID0gc2l6ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcm93Mi5wdXNoKGNlbGwyKTsKICAgIH0KICAgIGNlbGxNYXRyaXhbcm93SW5kZXhdID0gcm93MjsKICAgIHNpemVNYXRyaXhbcm93SW5kZXhdID0gc2l6ZXMyOwogIH0KICBsZXQgY29sdW1uSW5kZXggPSAtMTsKICBpZiAodHlwZW9mIGFsaWduID09PSAib2JqZWN0IiAmJiAibGVuZ3RoIiBpbiBhbGlnbikgewogICAgd2hpbGUgKCsrY29sdW1uSW5kZXggPCBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgICAgYWxpZ25tZW50c1tjb2x1bW5JbmRleF0gPSB0b0FsaWdubWVudChhbGlnbltjb2x1bW5JbmRleF0pOwogICAgfQogIH0gZWxzZSB7CiAgICBjb25zdCBjb2RlNCA9IHRvQWxpZ25tZW50KGFsaWduKTsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGFsaWdubWVudHNbY29sdW1uSW5kZXhdID0gY29kZTQ7CiAgICB9CiAgfQogIGNvbHVtbkluZGV4ID0gLTE7CiAgY29uc3Qgcm93ID0gW107CiAgY29uc3Qgc2l6ZXMgPSBbXTsKICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgY29uc3QgY29kZTQgPSBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XTsKICAgIGxldCBiZWZvcmUgPSAiIjsKICAgIGxldCBhZnRlciA9ICIiOwogICAgaWYgKGNvZGU0ID09PSA5OSkgewogICAgICBiZWZvcmUgPSAiOiI7CiAgICAgIGFmdGVyID0gIjoiOwogICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gMTA4KSB7CiAgICAgIGJlZm9yZSA9ICI6IjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDExNCkgewogICAgICBhZnRlciA9ICI6IjsKICAgIH0KICAgIGxldCBzaXplID0gc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzID09PSBmYWxzZSA/IDEgOiBNYXRoLm1heCgKICAgICAgMSwKICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gLSBiZWZvcmUubGVuZ3RoIC0gYWZ0ZXIubGVuZ3RoCiAgICApOwogICAgY29uc3QgY2VsbDIgPSBiZWZvcmUgKyAiLSIucmVwZWF0KHNpemUpICsgYWZ0ZXI7CiAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICBzaXplID0gYmVmb3JlLmxlbmd0aCArIHNpemUgKyBhZnRlci5sZW5ndGg7CiAgICAgIGlmIChzaXplID4gbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0pIHsKICAgICAgICBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSA9IHNpemU7CiAgICAgIH0KICAgICAgc2l6ZXNbY29sdW1uSW5kZXhdID0gc2l6ZTsKICAgIH0KICAgIHJvd1tjb2x1bW5JbmRleF0gPSBjZWxsMjsKICB9CiAgY2VsbE1hdHJpeC5zcGxpY2UoMSwgMCwgcm93KTsKICBzaXplTWF0cml4LnNwbGljZSgxLCAwLCBzaXplcyk7CiAgcm93SW5kZXggPSAtMTsKICBjb25zdCBsaW5lcyA9IFtdOwogIHdoaWxlICgrK3Jvd0luZGV4IDwgY2VsbE1hdHJpeC5sZW5ndGgpIHsKICAgIGNvbnN0IHJvdzIgPSBjZWxsTWF0cml4W3Jvd0luZGV4XTsKICAgIGNvbnN0IHNpemVzMiA9IHNpemVNYXRyaXhbcm93SW5kZXhdOwogICAgY29sdW1uSW5kZXggPSAtMTsKICAgIGNvbnN0IGxpbmUgPSBbXTsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGNvbnN0IGNlbGwyID0gcm93Mltjb2x1bW5JbmRleF0gfHwgIiI7CiAgICAgIGxldCBiZWZvcmUgPSAiIjsKICAgICAgbGV0IGFmdGVyID0gIiI7CiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7CiAgICAgICAgY29uc3Qgc2l6ZSA9IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gKHNpemVzMltjb2x1bW5JbmRleF0gfHwgMCk7CiAgICAgICAgY29uc3QgY29kZTQgPSBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XTsKICAgICAgICBpZiAoY29kZTQgPT09IDExNCkgewogICAgICAgICAgYmVmb3JlID0gIiAiLnJlcGVhdChzaXplKTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA5OSkgewogICAgICAgICAgaWYgKHNpemUgJSAyKSB7CiAgICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIgKyAwLjUpOwogICAgICAgICAgICBhZnRlciA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIgLSAwLjUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmVmb3JlID0gIiAiLnJlcGVhdChzaXplIC8gMik7CiAgICAgICAgICAgIGFmdGVyID0gYmVmb3JlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZnRlciA9ICIgIi5yZXBlYXQoc2l6ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5kZWxpbWl0ZXJTdGFydCAhPT0gZmFsc2UgJiYgIWNvbHVtbkluZGV4KSB7CiAgICAgICAgbGluZS5wdXNoKCJ8Iik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLnBhZGRpbmcgIT09IGZhbHNlICYmIC8vIERvbuKAmXQgYWRkIHRoZSBvcGVuaW5nIHNwYWNlIGlmIHdl4oCZcmUgbm90IGFsaWduaW5nIGFuZCB0aGUgY2VsbCBpcwogICAgICAvLyBlbXB0eTogdGhlcmUgd2lsbCBiZSBhIGNsb3Npbmcgc3BhY2UuCiAgICAgICEoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzID09PSBmYWxzZSAmJiBjZWxsMiA9PT0gIiIpICYmIChzZXR0aW5ncy5kZWxpbWl0ZXJTdGFydCAhPT0gZmFsc2UgfHwgY29sdW1uSW5kZXgpKSB7CiAgICAgICAgbGluZS5wdXNoKCIgIik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBsaW5lLnB1c2goYmVmb3JlKTsKICAgICAgfQogICAgICBsaW5lLnB1c2goY2VsbDIpOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGxpbmUucHVzaChhZnRlcik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLnBhZGRpbmcgIT09IGZhbHNlKSB7CiAgICAgICAgbGluZS5wdXNoKCIgIik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLmRlbGltaXRlckVuZCAhPT0gZmFsc2UgfHwgY29sdW1uSW5kZXggIT09IG1vc3RDZWxsc1BlclJvdyAtIDEpIHsKICAgICAgICBsaW5lLnB1c2goInwiKTsKICAgICAgfQogICAgfQogICAgbGluZXMucHVzaCgKICAgICAgc2V0dGluZ3MuZGVsaW1pdGVyRW5kID09PSBmYWxzZSA/IGxpbmUuam9pbigiIikucmVwbGFjZSgvICskLywgIiIpIDogbGluZS5qb2luKCIiKQogICAgKTsKICB9CiAgcmV0dXJuIGxpbmVzLmpvaW4oIlxuIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyAiIiA6IFN0cmluZyh2YWx1ZTIpOwp9CmZ1bmN0aW9uIHRvQWxpZ25tZW50KHZhbHVlMikgewogIGNvbnN0IGNvZGU0ID0gdHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgPyB2YWx1ZTIuY29kZVBvaW50QXQoMCkgOiAwOwogIHJldHVybiBjb2RlNCA9PT0gNjcgfHwgY29kZTQgPT09IDk5ID8gOTkgOiBjb2RlNCA9PT0gNzYgfHwgY29kZTQgPT09IDEwOCA/IDEwOCA6IGNvZGU0ID09PSA4MiB8fCBjb2RlNCA9PT0gMTE0ID8gMTE0IDogMDsKfQp2YXIgaW5pdF9tYXJrZG93bl90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21hcmtkb3duLXRhYmxlQDMuMC40L25vZGVfbW9kdWxlcy9tYXJrZG93bi10YWJsZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcwpmdW5jdGlvbiB6d2l0Y2goa2V5Miwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBmdW5jdGlvbiBvbmUzKHZhbHVlMiwgLi4ucGFyYW1ldGVycykgewogICAgbGV0IGZuID0gb25lMy5pbnZhbGlkOwogICAgY29uc3QgaGFuZGxlcnMyID0gb25lMy5oYW5kbGVyczsKICAgIGlmICh2YWx1ZTIgJiYgb3duMi5jYWxsKHZhbHVlMiwga2V5MikpIHsKICAgICAgY29uc3QgaWQgPSBTdHJpbmcodmFsdWUyW2tleTJdKTsKICAgICAgZm4gPSBvd24yLmNhbGwoaGFuZGxlcnMyLCBpZCkgPyBoYW5kbGVyczJbaWRdIDogb25lMy51bmtub3duOwogICAgfQogICAgaWYgKGZuKSB7CiAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHZhbHVlMiwgLi4ucGFyYW1ldGVycyk7CiAgICB9CiAgfQogIG9uZTMuaGFuZGxlcnMgPSBzZXR0aW5ncy5oYW5kbGVycyB8fCB7fTsKICBvbmUzLmludmFsaWQgPSBzZXR0aW5ncy5pbnZhbGlkOwogIG9uZTMudW5rbm93biA9IHNldHRpbmdzLnVua25vd247CiAgcmV0dXJuIG9uZTM7Cn0KdmFyIG93bjI7CnZhciBpbml0X3p3aXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3p3aXRjaEAyLjAuNC9ub2RlX21vZHVsZXMvendpdGNoL2luZGV4LmpzIigpIHsKICAgIG93bjIgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2NvbmZpZ3VyZS5qcwpmdW5jdGlvbiBjb25maWd1cmUoYmFzZSwgZXh0ZW5zaW9uMikgewogIGxldCBpbmRleDIgPSAtMTsKICBsZXQga2V5MjsKICBpZiAoZXh0ZW5zaW9uMi5leHRlbnNpb25zKSB7CiAgICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb24yLmV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICAgIGNvbmZpZ3VyZShiYXNlLCBleHRlbnNpb24yLmV4dGVuc2lvbnNbaW5kZXgyXSk7CiAgICB9CiAgfQogIGZvciAoa2V5MiBpbiBleHRlbnNpb24yKSB7CiAgICBpZiAob3duMy5jYWxsKGV4dGVuc2lvbjIsIGtleTIpKSB7CiAgICAgIHN3aXRjaCAoa2V5MikgewogICAgICAgIGNhc2UgImV4dGVuc2lvbnMiOiB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqLwogICAgICAgIGNhc2UgInVuc2FmZSI6IHsKICAgICAgICAgIGxpc3QoYmFzZVtrZXkyXSwgZXh0ZW5zaW9uMltrZXkyXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiam9pbiI6IHsKICAgICAgICAgIGxpc3QoYmFzZVtrZXkyXSwgZXh0ZW5zaW9uMltrZXkyXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiaGFuZGxlcnMiOiB7CiAgICAgICAgICBtYXAzKGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGJhc2Uub3B0aW9uc1trZXkyXSA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBiYXNlOwp9CmZ1bmN0aW9uIGxpc3QobGVmdCwgcmlnaHQpIHsKICBpZiAocmlnaHQpIHsKICAgIGxlZnQucHVzaCguLi5yaWdodCk7CiAgfQp9CmZ1bmN0aW9uIG1hcDMobGVmdCwgcmlnaHQpIHsKICBpZiAocmlnaHQpIHsKICAgIE9iamVjdC5hc3NpZ24obGVmdCwgcmlnaHQpOwogIH0KfQp2YXIgb3duMzsKdmFyIGluaXRfY29uZmlndXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvY29uZmlndXJlLmpzIigpIHsKICAgIG93bjMgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9ibG9ja3F1b3RlLmpzCmZ1bmN0aW9uIGJsb2NrcXVvdGUobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJibG9ja3F1b3RlIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB0cmFja2VyLm1vdmUoIj4gIik7CiAgdHJhY2tlci5zaGlmdCgyKTsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTEyLmluZGVudExpbmVzKAogICAgc3RhdGUxMi5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICBtYXA0CiAgKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbWFwNChsaW5lLCBfNCwgYmxhbmspIHsKICByZXR1cm4gIj4iICsgKGJsYW5rID8gIiIgOiAiICIpICsgbGluZTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2Jsb2NrcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzCmZ1bmN0aW9uIHBhdHRlcm5JblNjb3BlKHN0YWNrLCBwYXR0ZXJuKSB7CiAgcmV0dXJuIGxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLmluQ29uc3RydWN0LCB0cnVlKSAmJiAhbGlzdEluU2NvcGUoc3RhY2ssIHBhdHRlcm4ubm90SW5Db25zdHJ1Y3QsIGZhbHNlKTsKfQpmdW5jdGlvbiBsaXN0SW5TY29wZShzdGFjaywgbGlzdDUsIG5vbmUpIHsKICBpZiAodHlwZW9mIGxpc3Q1ID09PSAic3RyaW5nIikgewogICAgbGlzdDUgPSBbbGlzdDVdOwogIH0KICBpZiAoIWxpc3Q1IHx8IGxpc3Q1Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIG5vbmU7CiAgfQogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgIGlmIChzdGFjay5pbmNsdWRlcyhsaXN0NVtpbmRleDJdKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CnZhciBpbml0X3BhdHRlcm5faW5fc2NvcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3BhdHRlcm4taW4tc2NvcGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhayhfNCwgXzEsIHN0YXRlMTIsIGluZm8pIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxMi51bnNhZmUubGVuZ3RoKSB7CiAgICBpZiAoc3RhdGUxMi51bnNhZmVbaW5kZXgyXS5jaGFyYWN0ZXIgPT09ICJcbiIgJiYgcGF0dGVybkluU2NvcGUoc3RhdGUxMi5zdGFjaywgc3RhdGUxMi51bnNhZmVbaW5kZXgyXSkpIHsKICAgICAgcmV0dXJuIC9bIFx0XS8udGVzdChpbmZvLmJlZm9yZSkgPyAiIiA6ICIgIjsKICAgIH0KICB9CiAgcmV0dXJuICJcXFxuIjsKfQp2YXIgaW5pdF9icmVhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9icmVhay5qcyIoKSB7CiAgICBpbml0X3BhdHRlcm5faW5fc2NvcGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvbmdlc3Qtc3RyZWFrQDMuMS4wL25vZGVfbW9kdWxlcy9sb25nZXN0LXN0cmVhay9pbmRleC5qcwpmdW5jdGlvbiBsb25nZXN0U3RyZWFrKHZhbHVlMiwgc3Vic3RyaW5nKSB7CiAgY29uc3Qgc291cmNlID0gU3RyaW5nKHZhbHVlMik7CiAgbGV0IGluZGV4MiA9IHNvdXJjZS5pbmRleE9mKHN1YnN0cmluZyk7CiAgbGV0IGV4cGVjdGVkID0gaW5kZXgyOwogIGxldCBjb3VudDIgPSAwOwogIGxldCBtYXgzID0gMDsKICBpZiAodHlwZW9mIHN1YnN0cmluZyAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHN1YnN0cmluZyIpOwogIH0KICB3aGlsZSAoaW5kZXgyICE9PSAtMSkgewogICAgaWYgKGluZGV4MiA9PT0gZXhwZWN0ZWQpIHsKICAgICAgaWYgKCsrY291bnQyID4gbWF4MykgewogICAgICAgIG1heDMgPSBjb3VudDI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvdW50MiA9IDE7CiAgICB9CiAgICBleHBlY3RlZCA9IGluZGV4MiArIHN1YnN0cmluZy5sZW5ndGg7CiAgICBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihzdWJzdHJpbmcsIGV4cGVjdGVkKTsKICB9CiAgcmV0dXJuIG1heDM7Cn0KdmFyIGluaXRfbG9uZ2VzdF9zdHJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sb25nZXN0LXN0cmVha0AzLjEuMC9ub2RlX21vZHVsZXMvbG9uZ2VzdC1zdHJlYWsvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcwpmdW5jdGlvbiBmb3JtYXRDb2RlQXNJbmRlbnRlZChub2RlMiwgc3RhdGUxMikgewogIHJldHVybiBCb29sZWFuKAogICAgc3RhdGUxMi5vcHRpb25zLmZlbmNlcyA9PT0gZmFsc2UgJiYgbm9kZTIudmFsdWUgJiYgLy8gSWYgdGhlcmXigJlzIG5vIGluZm/igKYKICAgICFub2RlMi5sYW5nICYmIC8vIEFuZCB0aGVyZeKAmXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXLigKYKICAgIC9bXiBcclxuXS8udGVzdChub2RlMi52YWx1ZSkgJiYgLy8gQW5kIHRoZSB2YWx1ZSBkb2VzbuKAmXQgc3RhcnQgb3IgZW5kIGluIGEgYmxhbmvigKYKICAgICEvXltcdCBdKig/OltcclxuXXwkKXwoPzpefFtcclxuXSlbXHQgXSokLy50ZXN0KG5vZGUyLnZhbHVlKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2NvZGVfYXNfaW5kZW50ZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1jb2RlLWFzLWluZGVudGVkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZmVuY2UuanMKZnVuY3Rpb24gY2hlY2tGZW5jZShzdGF0ZTEyKSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxMi5vcHRpb25zLmZlbmNlIHx8ICJgIjsKICBpZiAobWFya2VyICE9PSAiYCIgJiYgbWFya2VyICE9PSAifiIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgY29kZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmZlbmNlYCwgZXhwZWN0ZWQgYGAgYCBgYCBvciBgfmAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2ZlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1mZW5jZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvY29kZS5qcwpmdW5jdGlvbiBjb2RlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrRmVuY2Uoc3RhdGUxMik7CiAgY29uc3QgcmF3MiA9IG5vZGUyLnZhbHVlIHx8ICIiOwogIGNvbnN0IHN1ZmZpeCA9IG1hcmtlciA9PT0gImAiID8gIkdyYXZlQWNjZW50IiA6ICJUaWxkZSI7CiAgaWYgKGZvcm1hdENvZGVBc0luZGVudGVkKG5vZGUyLCBzdGF0ZTEyKSkgewogICAgY29uc3QgZXhpdDQgPSBzdGF0ZTEyLmVudGVyKCJjb2RlSW5kZW50ZWQiKTsKICAgIGNvbnN0IHZhbHVlMyA9IHN0YXRlMTIuaW5kZW50TGluZXMocmF3MiwgbWFwNSk7CiAgICBleGl0NCgpOwogICAgcmV0dXJuIHZhbHVlMzsKICB9CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBzZXF1ZW5jZSA9IG1hcmtlci5yZXBlYXQoTWF0aC5tYXgobG9uZ2VzdFN0cmVhayhyYXcyLCBtYXJrZXIpICsgMSwgMykpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigiY29kZUZlbmNlZCIpOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoc2VxdWVuY2UpOwogIGlmIChub2RlMi5sYW5nKSB7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgY29kZUZlbmNlZExhbmcke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi5sYW5nLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6ICIgIiwKICAgICAgICBlbmNvZGU6IFsiYCJdLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogIH0KICBpZiAobm9kZTIubGFuZyAmJiBub2RlMi5tZXRhKSB7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgY29kZUZlbmNlZE1ldGEke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIiAiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi5tZXRhLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6ICJcbiIsCiAgICAgICAgZW5jb2RlOiBbImAiXSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXG4iKTsKICBpZiAocmF3MikgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShyYXcyICsgIlxuIik7CiAgfQogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoc2VxdWVuY2UpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBtYXA1KGxpbmUsIF80LCBibGFuaykgewogIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgICAgIikgKyBsaW5lOwp9CnZhciBpbml0X2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvY29kZS5qcyIoKSB7CiAgICBpbml0X2xvbmdlc3Rfc3RyZWFrKCk7CiAgICBpbml0X2Zvcm1hdF9jb2RlX2FzX2luZGVudGVkKCk7CiAgICBpbml0X2NoZWNrX2ZlbmNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXF1b3RlLmpzCmZ1bmN0aW9uIGNoZWNrUXVvdGUoc3RhdGUxMikgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlMTIub3B0aW9ucy5xdW90ZSB8fCAnIic7CiAgaWYgKG1hcmtlciAhPT0gJyInICYmIG1hcmtlciAhPT0gIiciKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHRpdGxlIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMucXVvdGVgLCBleHBlY3RlZCBgXCJgLCBvciBgJ2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1xdW90ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZGVmaW5pdGlvbi5qcwpmdW5jdGlvbiBkZWZpbml0aW9uKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IHF1b3RlID0gY2hlY2tRdW90ZShzdGF0ZTEyKTsKICBjb25zdCBzdWZmaXggPSBxdW90ZSA9PT0gJyInID8gIlF1b3RlIiA6ICJBcG9zdHJvcGhlIjsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImRlZmluaXRpb24iKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7CiAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICBhZnRlcjogIl0iLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl06ICIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsLCBvcuKApgogICAgIW5vZGUyLnVybCB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiXG4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogIH0KICBzdWJleGl0KCk7CiAgaWYgKG5vZGUyLnRpdGxlKSB7CiAgICBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgdGl0bGUke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIiAiICsgcXVvdGUpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnRpdGxlLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6IHF1b3RlLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShxdW90ZSk7CiAgICBzdWJleGl0KCk7CiAgfQogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9kZWZpbml0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2RlZmluaXRpb24uanMiKCkgewogICAgaW5pdF9jaGVja19xdW90ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1lbXBoYXNpcy5qcwpmdW5jdGlvbiBjaGVja0VtcGhhc2lzKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuZW1waGFzaXMgfHwgIioiOwogIGlmIChtYXJrZXIgIT09ICIqIiAmJiBtYXJrZXIgIT09ICJfIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBlbXBoYXNpcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmVtcGhhc2lzYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2VtcGhhc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1lbXBoYXNpcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2VuY29kZS1jaGFyYWN0ZXItcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShjb2RlNCkgewogIHJldHVybiAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgIjsiOwp9CnZhciBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcwpmdW5jdGlvbiBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCkgewogIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgIHJldHVybiAxOwogIH0KICBpZiAodW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgewogICAgcmV0dXJuIDI7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3RlckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2VuY29kZS1pbmZvLmpzCmZ1bmN0aW9uIGVuY29kZUluZm8ob3V0c2lkZSwgaW5zaWRlLCBtYXJrZXIpIHsKICBjb25zdCBvdXRzaWRlS2luZCA9IGNsYXNzaWZ5Q2hhcmFjdGVyKG91dHNpZGUpOwogIGNvbnN0IGluc2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihpbnNpZGUpOwogIGlmIChvdXRzaWRlS2luZCA9PT0gdm9pZCAwKSB7CiAgICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgICAvLyBMZXR0ZXIgaW5zaWRlOgogICAgICAvLyB3ZSBoYXZlIHRvIGVuY29kZSAqYm90aCogbGV0dGVycyBmb3IgYF9gIGFzIGl0IGlzIGxvb3Nlci4KICAgICAgLy8gaXQgYWxyZWFkeSBmb3JtcyBmb3IgYCpgIChhbmQgR0ZNcyBgfmApLgogICAgICBtYXJrZXIgPT09ICJfIiA/IHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0gOiB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICAgICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgICAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGJvdGggKGxldHRlciwgd2hpdGVzcGFjZSkuCiAgICAgIHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0KICAgICkgOiAoCiAgICAgIC8vIFB1bmN0dWF0aW9uIGluc2lkZTogZW5jb2RlIG91dGVyIChsZXR0ZXIpCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApOwogIH0KICBpZiAob3V0c2lkZUtpbmQgPT09IDEpIHsKICAgIHJldHVybiBpbnNpZGVLaW5kID09PSB2b2lkIDAgPyAoCiAgICAgIC8vIExldHRlciBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICAgKSA6IGluc2lkZUtpbmQgPT09IDEgPyAoCiAgICAgIC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgYm90aCAod2hpdGVzcGFjZSkuCiAgICAgIHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0KICAgICkgOiAoCiAgICAgIC8vIFB1bmN0dWF0aW9uIGluc2lkZTogYWxyZWFkeSBmb3Jtcy4KICAgICAgeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgICApOwogIH0KICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgLy8gTGV0dGVyIGluc2lkZTogYWxyZWFkeSBmb3Jtcy4KICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBpbm5lciAod2hpdGVzcGFjZSkuCiAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogZmFsc2UgfQogICkgOiAoCiAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICApOwp9CnZhciBpbml0X2VuY29kZV9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2VtcGhhc2lzLmpzCmZ1bmN0aW9uIGVtcGhhc2lzKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrRW1waGFzaXMoc3RhdGUxMik7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJlbXBoYXNpcyIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTEyLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlcik7CiAgbGV0IGJldHdlZW4yID0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBhZnRlcjogbWFya2VyLAogICAgICBiZWZvcmUsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KDApOwogIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKAogICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSwKICAgIGJldHdlZW5IZWFkLAogICAgbWFya2VyCiAgKTsKICBpZiAob3Blbi5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4yLnNsaWNlKDEpOwogIH0KICBjb25zdCBiZXR3ZWVuVGFpbCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoYmV0d2VlbjIubGVuZ3RoIC0gMSk7CiAgY29uc3QgY2xvc2U3ID0gZW5jb2RlSW5mbyhpbmZvLmFmdGVyLmNoYXJDb2RlQXQoMCksIGJldHdlZW5UYWlsLCBtYXJrZXIpOwogIGlmIChjbG9zZTcuaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGJldHdlZW4yLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuVGFpbCk7CiAgfQogIGNvbnN0IGFmdGVyID0gdHJhY2tlci5tb3ZlKG1hcmtlcik7CiAgZXhpdDMoKTsKICBzdGF0ZTEyLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHsKICAgIGFmdGVyOiBjbG9zZTcub3V0c2lkZSwKICAgIGJlZm9yZTogb3Blbi5vdXRzaWRlCiAgfTsKICByZXR1cm4gYmVmb3JlICsgYmV0d2VlbjIgKyBhZnRlcjsKfQpmdW5jdGlvbiBlbXBoYXNpc1BlZWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIub3B0aW9ucy5lbXBoYXNpcyB8fCAiKiI7Cn0KdmFyIGluaXRfZW1waGFzaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZW1waGFzaXMuanMiKCkgewogICAgaW5pdF9jaGVja19lbXBoYXNpcygpOwogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9lbmNvZGVfaW5mbygpOwogICAgZW1waGFzaXMucGVlayA9IGVtcGhhc2lzUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0KHRyZWUsIHRlc3RPclZpc2l0b3IsIHZpc2l0b3JPclJldmVyc2UsIG1heWJlUmV2ZXJzZSkgewogIGxldCByZXZlcnNlOwogIGxldCB0ZXN0OwogIGxldCB2aXNpdG9yOwogIGlmICh0eXBlb2YgdGVzdE9yVmlzaXRvciA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvck9yUmV2ZXJzZSAhPT0gImZ1bmN0aW9uIikgewogICAgdGVzdCA9IHZvaWQgMDsKICAgIHZpc2l0b3IgPSB0ZXN0T3JWaXNpdG9yOwogICAgcmV2ZXJzZSA9IHZpc2l0b3JPclJldmVyc2U7CiAgfSBlbHNlIHsKICAgIHRlc3QgPSB0ZXN0T3JWaXNpdG9yOwogICAgdmlzaXRvciA9IHZpc2l0b3JPclJldmVyc2U7CiAgICByZXZlcnNlID0gbWF5YmVSZXZlcnNlOwogIH0KICB2aXNpdFBhcmVudHModHJlZSwgdGVzdCwgb3ZlcmxvYWQsIHJldmVyc2UpOwogIGZ1bmN0aW9uIG92ZXJsb2FkKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBpbmRleDIgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlMikgOiB2b2lkIDA7CiAgICByZXR1cm4gdmlzaXRvcihub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgaW5pdF9saWIxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Zpc2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlMiwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM7CiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID0gdHlwZW9mIHNldHRpbmdzLmluY2x1ZGVJbWFnZUFsdCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0IDogdHJ1ZTsKICBjb25zdCBpbmNsdWRlSHRtbCA9IHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlOwogIHJldHVybiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKfQpmdW5jdGlvbiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7CiAgaWYgKG5vZGUodmFsdWUyKSkgewogICAgaWYgKCJ2YWx1ZSIgaW4gdmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIudHlwZSA9PT0gImh0bWwiICYmICFpbmNsdWRlSHRtbCA/ICIiIDogdmFsdWUyLnZhbHVlOwogICAgfQogICAgaWYgKGluY2x1ZGVJbWFnZUFsdCAmJiAiYWx0IiBpbiB2YWx1ZTIgJiYgdmFsdWUyLmFsdCkgewogICAgICByZXR1cm4gdmFsdWUyLmFsdDsKICAgIH0KICAgIGlmICgiY2hpbGRyZW4iIGluIHZhbHVlMikgewogICAgICByZXR1cm4gYWxsKHZhbHVlMi5jaGlsZHJlbiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7CiAgICB9CiAgfQogIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgIHJldHVybiBhbGwodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIGFsbCh2YWx1ZXMsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgcmVzdWx0W2luZGV4Ml0gPSBvbmUodmFsdWVzW2luZGV4Ml0sIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpOwogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG5vZGUodmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4odmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiKTsKfQp2YXIgZW1wdHlPcHRpb25zOwp2YXIgaW5pdF9saWIxMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tc3RyaW5nQDQuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLXN0cmluZy9saWIvaW5kZXguanMiKCkgewogICAgZW1wdHlPcHRpb25zID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtaGVhZGluZy1hcy1zZXRleHQuanMKZnVuY3Rpb24gZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZTEyKSB7CiAgbGV0IGxpdGVyYWxXaXRoQnJlYWsgPSBmYWxzZTsKICB2aXNpdChub2RlMiwgZnVuY3Rpb24obm9kZTMpIHsKICAgIGlmICgidmFsdWUiIGluIG5vZGUzICYmIC9ccj9cbnxcci8udGVzdChub2RlMy52YWx1ZSkgfHwgbm9kZTMudHlwZSA9PT0gImJyZWFrIikgewogICAgICBsaXRlcmFsV2l0aEJyZWFrID0gdHJ1ZTsKICAgICAgcmV0dXJuIEVYSVQ7CiAgICB9CiAgfSk7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICAoIW5vZGUyLmRlcHRoIHx8IG5vZGUyLmRlcHRoIDwgMykgJiYgdG9TdHJpbmcobm9kZTIpICYmIChzdGF0ZTEyLm9wdGlvbnMuc2V0ZXh0IHx8IGxpdGVyYWxXaXRoQnJlYWspCiAgKTsKfQp2YXIgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1oZWFkaW5nLWFzLXNldGV4dC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXQoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9oZWFkaW5nLmpzCmZ1bmN0aW9uIGhlYWRpbmcobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgcmFuayA9IE1hdGgubWF4KE1hdGgubWluKDYsIG5vZGUyLmRlcHRoIHx8IDEpLCAxKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGlmIChmb3JtYXRIZWFkaW5nQXNTZXRleHQobm9kZTIsIHN0YXRlMTIpKSB7CiAgICBjb25zdCBleGl0NCA9IHN0YXRlMTIuZW50ZXIoImhlYWRpbmdTZXRleHQiKTsKICAgIGNvbnN0IHN1YmV4aXQyID0gc3RhdGUxMi5lbnRlcigicGhyYXNpbmciKTsKICAgIGNvbnN0IHZhbHVlMyA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICAgIGJlZm9yZTogIlxuIiwKICAgICAgYWZ0ZXI6ICJcbiIKICAgIH0pOwogICAgc3ViZXhpdDIoKTsKICAgIGV4aXQ0KCk7CiAgICByZXR1cm4gdmFsdWUzICsgIlxuIiArIChyYW5rID09PSAxID8gIj0iIDogIi0iKS5yZXBlYXQoCiAgICAgIC8vIFRoZSB3aG9sZSBzaXpl4oCmCiAgICAgIHZhbHVlMy5sZW5ndGggLSAvLyBNaW51cyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgbGFzdCBFT0wgKG9yCiAgICAgIC8vIDAgaWYgdGhlcmUgaXMgbm9uZSnigKYKICAgICAgKE1hdGgubWF4KHZhbHVlMy5sYXN0SW5kZXhPZigiXHIiKSwgdmFsdWUzLmxhc3RJbmRleE9mKCJcbiIpKSArIDEpCiAgICApOwogIH0KICBjb25zdCBzZXF1ZW5jZSA9ICIjIi5yZXBlYXQocmFuayk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJoZWFkaW5nQXR4Iik7CiAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoInBocmFzaW5nIik7CiAgdHJhY2tlci5tb3ZlKHNlcXVlbmNlICsgIiAiKTsKICBsZXQgdmFsdWUyID0gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgYmVmb3JlOiAiIyAiLAogICAgYWZ0ZXI6ICJcbiIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIGlmICgvXltcdCBdLy50ZXN0KHZhbHVlMikpIHsKICAgIHZhbHVlMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIuY2hhckNvZGVBdCgwKSkgKyB2YWx1ZTIuc2xpY2UoMSk7CiAgfQogIHZhbHVlMiA9IHZhbHVlMiA/IHNlcXVlbmNlICsgIiAiICsgdmFsdWUyIDogc2VxdWVuY2U7CiAgaWYgKHN0YXRlMTIub3B0aW9ucy5jbG9zZUF0eCkgewogICAgdmFsdWUyICs9ICIgIiArIHNlcXVlbmNlOwogIH0KICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X2hlYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaGVhZGluZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X2Zvcm1hdF9oZWFkaW5nX2FzX3NldGV4dCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2h0bWwuanMKZnVuY3Rpb24gaHRtbChub2RlMikgewogIHJldHVybiBub2RlMi52YWx1ZSB8fCAiIjsKfQpmdW5jdGlvbiBodG1sUGVlaygpIHsKICByZXR1cm4gIjwiOwp9CnZhciBpbml0X2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaHRtbC5qcyIoKSB7CiAgICBodG1sLnBlZWsgPSBodG1sUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS5qcwpmdW5jdGlvbiBpbWFnZShub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxMik7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJpbWFnZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIiFbIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTIuc2FmZShub2RlMi5hbHQsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiXSIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdKCIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxl4oCmCiAgICAhbm9kZTIudXJsICYmIG5vZGUyLnRpdGxlIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICI+IiwgLi4udHJhY2tlci5jdXJyZW50KCkgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgfSBlbHNlIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBub2RlMi50aXRsZSA/ICIgIiA6ICIpIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIpIik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGltYWdlUGVlaygpIHsKICByZXR1cm4gIiEiOwp9CnZhciBpbml0X2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICAgIGltYWdlLnBlZWsgPSBpbWFnZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IHR5cGU1ID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImltYWdlUmVmZXJlbmNlIik7CiAgbGV0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJsYWJlbCIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTEyLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiIVsiKTsKICBjb25zdCBhbHQgPSBzdGF0ZTEyLnNhZmUobm9kZTIuYWx0LCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoYWx0ICsgIl1bIik7CiAgc3ViZXhpdCgpOwogIGNvbnN0IHN0YWNrID0gc3RhdGUxMi5zdGFjazsKICBzdGF0ZTEyLnN0YWNrID0gW107CiAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoInJlZmVyZW5jZSIpOwogIGNvbnN0IHJlZmVyZW5jZSA9IHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHN1YmV4aXQoKTsKICBzdGF0ZTEyLnN0YWNrID0gc3RhY2s7CiAgZXhpdDMoKTsKICBpZiAodHlwZTUgPT09ICJmdWxsIiB8fCAhYWx0IHx8IGFsdCAhPT0gcmVmZXJlbmNlKSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHJlZmVyZW5jZSArICJdIik7CiAgfSBlbHNlIGlmICh0eXBlNSA9PT0gInNob3J0Y3V0IikgewogICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIC0xKTsKICB9IGVsc2UgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSIpOwogIH0KICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlUGVlaygpIHsKICByZXR1cm4gIiEiOwp9CnZhciBpbml0X2ltYWdlX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS1yZWZlcmVuY2UuanMiKCkgewogICAgaW1hZ2VSZWZlcmVuY2UucGVlayA9IGltYWdlUmVmZXJlbmNlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcwpmdW5jdGlvbiBpbmxpbmVDb2RlKG5vZGUyLCBfNCwgc3RhdGUxMikgewogIGxldCB2YWx1ZTIgPSBub2RlMi52YWx1ZSB8fCAiIjsKICBsZXQgc2VxdWVuY2UgPSAiYCI7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlIChuZXcgUmVnRXhwKCIoXnxbXmBdKSIgKyBzZXF1ZW5jZSArICIoW15gXXwkKSIpLnRlc3QodmFsdWUyKSkgewogICAgc2VxdWVuY2UgKz0gImAiOwogIH0KICBpZiAoL1teIFxyXG5dLy50ZXN0KHZhbHVlMikgJiYgKC9eWyBcclxuXS8udGVzdCh2YWx1ZTIpICYmIC9bIFxyXG5dJC8udGVzdCh2YWx1ZTIpIHx8IC9eYHxgJC8udGVzdCh2YWx1ZTIpKSkgewogICAgdmFsdWUyID0gIiAiICsgdmFsdWUyICsgIiAiOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBzdGF0ZTEyLnVuc2FmZS5sZW5ndGgpIHsKICAgIGNvbnN0IHBhdHRlcm4gPSBzdGF0ZTEyLnVuc2FmZVtpbmRleDJdOwogICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlMTIuY29tcGlsZVBhdHRlcm4ocGF0dGVybik7CiAgICBsZXQgbWF0Y2gyOwogICAgaWYgKCFwYXR0ZXJuLmF0QnJlYWspIGNvbnRpbnVlOwogICAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZTIpKSB7CiAgICAgIGxldCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXg7CiAgICAgIGlmICh2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMpID09PSAxMCAmJiB2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMgLSAxKSA9PT0gMTMpIHsKICAgICAgICBwb3NpdGlvbjMtLTsKICAgICAgfQogICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgcG9zaXRpb24zKSArICIgIiArIHZhbHVlMi5zbGljZShtYXRjaDIuaW5kZXggKyAxKTsKICAgIH0KICB9CiAgcmV0dXJuIHNlcXVlbmNlICsgdmFsdWUyICsgc2VxdWVuY2U7Cn0KZnVuY3Rpb24gaW5saW5lQ29kZVBlZWsoKSB7CiAgcmV0dXJuICJgIjsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcyIoKSB7CiAgICBpbmxpbmVDb2RlLnBlZWsgPSBpbmxpbmVDb2RlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWxpbmstYXMtYXV0b2xpbmsuanMKZnVuY3Rpb24gZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlMTIpIHsKICBjb25zdCByYXcyID0gdG9TdHJpbmcobm9kZTIpOwogIHJldHVybiBCb29sZWFuKAogICAgIXN0YXRlMTIub3B0aW9ucy5yZXNvdXJjZUxpbmsgJiYgLy8gSWYgdGhlcmXigJlzIGEgdXJs4oCmCiAgICBub2RlMi51cmwgJiYgLy8gQW5kIHRoZXJl4oCZcyBhIG5vIHRpdGxl4oCmCiAgICAhbm9kZTIudGl0bGUgJiYgLy8gQW5kIHRoZSBjb250ZW50IG9mIGBub2RlYCBpcyBhIHNpbmdsZSB0ZXh0IG5vZGXigKYKICAgIG5vZGUyLmNoaWxkcmVuICYmIG5vZGUyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBub2RlMi5jaGlsZHJlblswXS50eXBlID09PSAidGV4dCIgJiYgLy8gQW5kIGlmIHRoZSB1cmwgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbnRlbnTigKYKICAgIChyYXcyID09PSBub2RlMi51cmwgfHwgIm1haWx0bzoiICsgcmF3MiA9PT0gbm9kZTIudXJsKSAmJiAvLyBBbmQgdGhhdCBzdGFydHMgdy8gYSBwcm90b2NvbOKApgogICAgL15bYS16XVthLXorLi1dKzovaS50ZXN0KG5vZGUyLnVybCkgJiYgLy8gQW5kIHRoYXQgZG9lc27igJl0IGNvbnRhaW4gQVNDSUkgY29udHJvbCBjb2RlcyAoY2hhcmFjdGVyIGVzY2FwZXMgYW5kCiAgICAvLyByZWZlcmVuY2VzIGRvbuKAmXQgd29yayksIHNwYWNlLCBvciBhbmdsZSBicmFja2V0c+KApgogICAgIS9bXDAtIDw+XHUwMDdGXS8udGVzdChub2RlMi51cmwpCiAgKTsKfQp2YXIgaW5pdF9mb3JtYXRfbGlua19hc19hdXRvbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWxpbmstYXMtYXV0b2xpbmsuanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpbmsuanMKZnVuY3Rpb24gbGluayhub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxMik7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgZXhpdDM7CiAgbGV0IHN1YmV4aXQ7CiAgaWYgKGZvcm1hdExpbmtBc0F1dG9saW5rKG5vZGUyLCBzdGF0ZTEyKSkgewogICAgY29uc3Qgc3RhY2sgPSBzdGF0ZTEyLnN0YWNrOwogICAgc3RhdGUxMi5zdGFjayA9IFtdOwogICAgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJhdXRvbGluayIpOwogICAgbGV0IHZhbHVlMyA9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICAgIGJlZm9yZTogdmFsdWUzLAogICAgICAgIGFmdGVyOiAiPiIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTMgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgICBleGl0MygpOwogICAgc3RhdGUxMi5zdGFjayA9IHN0YWNrOwogICAgcmV0dXJuIHZhbHVlMzsKICB9CiAgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJsaW5rIik7CiAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImxhYmVsIik7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICBhZnRlcjogIl0oIiwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdKCIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxl4oCmCiAgICAhbm9kZTIudXJsICYmIG5vZGUyLnRpdGxlIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICI+IiwgLi4udHJhY2tlci5jdXJyZW50KCkgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgfSBlbHNlIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBub2RlMi50aXRsZSA/ICIgIiA6ICIpIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIpIik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGxpbmtQZWVrKG5vZGUyLCBfNCwgc3RhdGUxMikgewogIHJldHVybiBmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlMiwgc3RhdGUxMikgPyAiPCIgOiAiWyI7Cn0KdmFyIGluaXRfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICAgIGluaXRfZm9ybWF0X2xpbmtfYXNfYXV0b2xpbmsoKTsKICAgIGxpbmsucGVlayA9IGxpbmtQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpbmstcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2Uobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgdHlwZTUgPSBub2RlMi5yZWZlcmVuY2VUeXBlOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigibGlua1JlZmVyZW5jZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlsiKTsKICBjb25zdCB0ZXh0OSA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSh0ZXh0OSArICJdWyIpOwogIHN1YmV4aXQoKTsKICBjb25zdCBzdGFjayA9IHN0YXRlMTIuc3RhY2s7CiAgc3RhdGUxMi5zdGFjayA9IFtdOwogIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJyZWZlcmVuY2UiKTsKICBjb25zdCByZWZlcmVuY2UgPSBzdGF0ZTEyLnNhZmUoc3RhdGUxMi5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBzdWJleGl0KCk7CiAgc3RhdGUxMi5zdGFjayA9IHN0YWNrOwogIGV4aXQzKCk7CiAgaWYgKHR5cGU1ID09PSAiZnVsbCIgfHwgIXRleHQ5IHx8IHRleHQ5ICE9PSByZWZlcmVuY2UpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmVmZXJlbmNlICsgIl0iKTsKICB9IGVsc2UgaWYgKHR5cGU1ID09PSAic2hvcnRjdXQiKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgLTEpOwogIH0gZWxzZSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgfQogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbGlua1JlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICJbIjsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBsaW5rUmVmZXJlbmNlLnBlZWsgPSBsaW5rUmVmZXJlbmNlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0KHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuYnVsbGV0IHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiKyIgJiYgbWFya2VyICE9PSAiLSIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5idWxsZXRgLCBleHBlY3RlZCBgKmAsIGArYCwgb3IgYC1gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vdGhlci5qcwpmdW5jdGlvbiBjaGVja0J1bGxldE90aGVyKHN0YXRlMTIpIHsKICBjb25zdCBidWxsZXQgPSBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBjb25zdCBidWxsZXRPdGhlciA9IHN0YXRlMTIub3B0aW9ucy5idWxsZXRPdGhlcjsKICBpZiAoIWJ1bGxldE90aGVyKSB7CiAgICByZXR1cm4gYnVsbGV0ID09PSAiKiIgPyAiLSIgOiAiKiI7CiAgfQogIGlmIChidWxsZXRPdGhlciAhPT0gIioiICYmIGJ1bGxldE90aGVyICE9PSAiKyIgJiYgYnVsbGV0T3RoZXIgIT09ICItIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgYnVsbGV0T3RoZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3RoZXJgLCBleHBlY3RlZCBgKmAsIGArYCwgb3IgYC1gIgogICAgKTsKICB9CiAgaWYgKGJ1bGxldE90aGVyID09PSBidWxsZXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkV4cGVjdGVkIGBidWxsZXRgIChgIiArIGJ1bGxldCArICJgKSBhbmQgYGJ1bGxldE90aGVyYCAoYCIgKyBidWxsZXRPdGhlciArICJgKSB0byBiZSBkaWZmZXJlbnQiCiAgICApOwogIH0KICByZXR1cm4gYnVsbGV0T3RoZXI7Cn0KdmFyIGluaXRfY2hlY2tfYnVsbGV0X290aGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3RoZXIuanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMKZnVuY3Rpb24gY2hlY2tCdWxsZXRPcmRlcmVkKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuYnVsbGV0T3JkZXJlZCB8fCAiLiI7CiAgaWYgKG1hcmtlciAhPT0gIi4iICYmIG1hcmtlciAhPT0gIikiKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3JkZXJlZGAsIGV4cGVjdGVkIGAuYCBvciBgKWAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2J1bGxldF9vcmRlcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3JkZXJlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMKZnVuY3Rpb24gY2hlY2tSdWxlKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMucnVsZSB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIi0iICYmIG1hcmtlciAhPT0gIl8iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMucnVsZWAsIGV4cGVjdGVkIGAqYCwgYC1gLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3J1bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMKZnVuY3Rpb24gbGlzdDIobm9kZTIsIHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigibGlzdCIpOwogIGNvbnN0IGJ1bGxldEN1cnJlbnQgPSBzdGF0ZTEyLmJ1bGxldEN1cnJlbnQ7CiAgbGV0IGJ1bGxldCA9IG5vZGUyLm9yZGVyZWQgPyBjaGVja0J1bGxldE9yZGVyZWQoc3RhdGUxMikgOiBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBjb25zdCBidWxsZXRPdGhlciA9IG5vZGUyLm9yZGVyZWQgPyBidWxsZXQgPT09ICIuIiA/ICIpIiA6ICIuIiA6IGNoZWNrQnVsbGV0T3RoZXIoc3RhdGUxMik7CiAgbGV0IHVzZURpZmZlcmVudE1hcmtlciA9IHBhcmVudCAmJiBzdGF0ZTEyLmJ1bGxldExhc3RVc2VkID8gYnVsbGV0ID09PSBzdGF0ZTEyLmJ1bGxldExhc3RVc2VkIDogZmFsc2U7CiAgaWYgKCFub2RlMi5vcmRlcmVkKSB7CiAgICBjb25zdCBmaXJzdExpc3RJdGVtID0gbm9kZTIuY2hpbGRyZW4gPyBub2RlMi5jaGlsZHJlblswXSA6IHZvaWQgMDsKICAgIGlmICgKICAgICAgLy8gQnVsbGV0IGNvdWxkIGJlIHVzZWQgYXMgYSB0aGVtYXRpYyBicmVhayBtYXJrZXI6CiAgICAgIChidWxsZXQgPT09ICIqIiB8fCBidWxsZXQgPT09ICItIikgJiYgLy8gRW1wdHkgZmlyc3QgbGlzdCBpdGVtOgogICAgICBmaXJzdExpc3RJdGVtICYmICghZmlyc3RMaXN0SXRlbS5jaGlsZHJlbiB8fCAhZmlyc3RMaXN0SXRlbS5jaGlsZHJlblswXSkgJiYgLy8gRGlyZWN0bHkgaW4gdHdvIG90aGVyIGxpc3QgaXRlbXM6CiAgICAgIHN0YXRlMTIuc3RhY2tbc3RhdGUxMi5zdGFjay5sZW5ndGggLSAxXSA9PT0gImxpc3QiICYmIHN0YXRlMTIuc3RhY2tbc3RhdGUxMi5zdGFjay5sZW5ndGggLSAyXSA9PT0gImxpc3RJdGVtIiAmJiBzdGF0ZTEyLnN0YWNrW3N0YXRlMTIuc3RhY2subGVuZ3RoIC0gM10gPT09ICJsaXN0IiAmJiBzdGF0ZTEyLnN0YWNrW3N0YXRlMTIuc3RhY2subGVuZ3RoIC0gNF0gPT09ICJsaXN0SXRlbSIgJiYgLy8gVGhhdCBhcmUgZWFjaCB0aGUgZmlyc3QgY2hpbGQuCiAgICAgIHN0YXRlMTIuaW5kZXhTdGFja1tzdGF0ZTEyLmluZGV4U3RhY2subGVuZ3RoIC0gMV0gPT09IDAgJiYgc3RhdGUxMi5pbmRleFN0YWNrW3N0YXRlMTIuaW5kZXhTdGFjay5sZW5ndGggLSAyXSA9PT0gMCAmJiBzdGF0ZTEyLmluZGV4U3RhY2tbc3RhdGUxMi5pbmRleFN0YWNrLmxlbmd0aCAtIDNdID09PSAwCiAgICApIHsKICAgICAgdXNlRGlmZmVyZW50TWFya2VyID0gdHJ1ZTsKICAgIH0KICAgIGlmIChjaGVja1J1bGUoc3RhdGUxMikgPT09IGJ1bGxldCAmJiBmaXJzdExpc3RJdGVtKSB7CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IG5vZGUyLmNoaWxkcmVuW2luZGV4Ml07CiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50eXBlID09PSAibGlzdEl0ZW0iICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlblswXSAmJiBpdGVtLmNoaWxkcmVuWzBdLnR5cGUgPT09ICJ0aGVtYXRpY0JyZWFrIikgewogICAgICAgICAgdXNlRGlmZmVyZW50TWFya2VyID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpZiAodXNlRGlmZmVyZW50TWFya2VyKSB7CiAgICBidWxsZXQgPSBidWxsZXRPdGhlcjsKICB9CiAgc3RhdGUxMi5idWxsZXRDdXJyZW50ID0gYnVsbGV0OwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTIuY29udGFpbmVyRmxvdyhub2RlMiwgaW5mbyk7CiAgc3RhdGUxMi5idWxsZXRMYXN0VXNlZCA9IGJ1bGxldDsKICBzdGF0ZTEyLmJ1bGxldEN1cnJlbnQgPSBidWxsZXRDdXJyZW50OwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9saXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICAgIGluaXRfY2hlY2tfYnVsbGV0X290aGVyKCk7CiAgICBpbml0X2NoZWNrX2J1bGxldF9vcmRlcmVkKCk7CiAgICBpbml0X2NoZWNrX3J1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stbGlzdC1pdGVtLWluZGVudC5qcwpmdW5jdGlvbiBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlMTIpIHsKICBjb25zdCBzdHlsZSA9IHN0YXRlMTIub3B0aW9ucy5saXN0SXRlbUluZGVudCB8fCAib25lIjsKICBpZiAoc3R5bGUgIT09ICJ0YWIiICYmIHN0eWxlICE9PSAib25lIiAmJiBzdHlsZSAhPT0gIm1peGVkIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgc3R5bGUgKyAiYCBmb3IgYG9wdGlvbnMubGlzdEl0ZW1JbmRlbnRgLCBleHBlY3RlZCBgdGFiYCwgYG9uZWAsIG9yIGBtaXhlZGAiCiAgICApOwogIH0KICByZXR1cm4gc3R5bGU7Cn0KdmFyIGluaXRfY2hlY2tfbGlzdF9pdGVtX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stbGlzdC1pdGVtLWluZGVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGlzdC1pdGVtLmpzCmZ1bmN0aW9uIGxpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBsaXN0SXRlbUluZGVudCA9IGNoZWNrTGlzdEl0ZW1JbmRlbnQoc3RhdGUxMik7CiAgbGV0IGJ1bGxldCA9IHN0YXRlMTIuYnVsbGV0Q3VycmVudCB8fCBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAibGlzdCIgJiYgcGFyZW50Lm9yZGVyZWQpIHsKICAgIGJ1bGxldCA9ICh0eXBlb2YgcGFyZW50LnN0YXJ0ID09PSAibnVtYmVyIiAmJiBwYXJlbnQuc3RhcnQgPiAtMSA/IHBhcmVudC5zdGFydCA6IDEpICsgKHN0YXRlMTIub3B0aW9ucy5pbmNyZW1lbnRMaXN0TWFya2VyID09PSBmYWxzZSA/IDAgOiBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlMikpICsgYnVsbGV0OwogIH0KICBsZXQgc2l6ZSA9IGJ1bGxldC5sZW5ndGggKyAxOwogIGlmIChsaXN0SXRlbUluZGVudCA9PT0gInRhYiIgfHwgbGlzdEl0ZW1JbmRlbnQgPT09ICJtaXhlZCIgJiYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3QiICYmIHBhcmVudC5zcHJlYWQgfHwgbm9kZTIuc3ByZWFkKSkgewogICAgc2l6ZSA9IE1hdGguY2VpbChzaXplIC8gNCkgKiA0OwogIH0KICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIHRyYWNrZXIubW92ZShidWxsZXQgKyAiICIucmVwZWF0KHNpemUgLSBidWxsZXQubGVuZ3RoKSk7CiAgdHJhY2tlci5zaGlmdChzaXplKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImxpc3RJdGVtIik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUxMi5pbmRlbnRMaW5lcygKICAgIHN0YXRlMTIuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgbWFwNwogICk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwogIGZ1bmN0aW9uIG1hcDcobGluZSwgaW5kZXgyLCBibGFuaykgewogICAgaWYgKGluZGV4MikgewogICAgICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICIucmVwZWF0KHNpemUpKSArIGxpbmU7CiAgICB9CiAgICByZXR1cm4gKGJsYW5rID8gYnVsbGV0IDogYnVsbGV0ICsgIiAiLnJlcGVhdChzaXplIC0gYnVsbGV0Lmxlbmd0aCkpICsgbGluZTsKICB9Cn0KdmFyIGluaXRfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QtaXRlbS5qcyIoKSB7CiAgICBpbml0X2NoZWNrX2J1bGxldCgpOwogICAgaW5pdF9jaGVja19saXN0X2l0ZW1faW5kZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcGFyYWdyYXBoLmpzCmZ1bmN0aW9uIHBhcmFncmFwaChub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoInBhcmFncmFwaCIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJwaHJhc2luZyIpOwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIGluZm8pOwogIHN1YmV4aXQoKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfcGFyYWdyYXBoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3BhcmFncmFwaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2xpYi9pbmRleC5qcwp2YXIgcGhyYXNpbmc7CnZhciBpbml0X2xpYjE0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX2lzKCk7CiAgICBwaHJhc2luZyA9IC8qKiBAdHlwZSB7KG5vZGU/OiB1bmtub3duKSA9PiBub2RlIGlzIEV4Y2x1ZGU8UGhyYXNpbmdDb250ZW50LCBIdG1sPn0gKi8KICAgIGNvbnZlcnQoWwogICAgICAiYnJlYWsiLAogICAgICAiZGVsZXRlIiwKICAgICAgImVtcGhhc2lzIiwKICAgICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZWQgc2luY2UgZm9vdG5vdGVzIHdlcmUgYWRkZWQgdG8gR0ZNLgogICAgICAiZm9vdG5vdGUiLAogICAgICAiZm9vdG5vdGVSZWZlcmVuY2UiLAogICAgICAiaW1hZ2UiLAogICAgICAiaW1hZ2VSZWZlcmVuY2UiLAogICAgICAiaW5saW5lQ29kZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWF0aGA6CiAgICAgICJpbmxpbmVNYXRoIiwKICAgICAgImxpbmsiLAogICAgICAibGlua1JlZmVyZW5jZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWR4YDoKICAgICAgIm1keEpzeFRleHRFbGVtZW50IiwKICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1tZHhgOgogICAgICAibWR4VGV4dEV4cHJlc3Npb24iLAogICAgICAic3Ryb25nIiwKICAgICAgInRleHQiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLWRpcmVjdGl2ZWA6CiAgICAgICJ0ZXh0RGlyZWN0aXZlIgogICAgXSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9yb290LmpzCmZ1bmN0aW9uIHJvb3Qobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgaGFzUGhyYXNpbmcgPSBub2RlMi5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uKGQ2KSB7CiAgICByZXR1cm4gcGhyYXNpbmcoZDYpOwogIH0pOwogIGNvbnN0IGNvbnRhaW5lciA9IGhhc1BocmFzaW5nID8gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyA6IHN0YXRlMTIuY29udGFpbmVyRmxvdzsKICByZXR1cm4gY29udGFpbmVyLmNhbGwoc3RhdGUxMiwgbm9kZTIsIGluZm8pOwp9CnZhciBpbml0X3Jvb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcm9vdC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfcGhyYXNpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stc3Ryb25nLmpzCmZ1bmN0aW9uIGNoZWNrU3Ryb25nKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuc3Ryb25nIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgc3Ryb25nIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuc3Ryb25nYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3N0cm9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stc3Ryb25nLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMKZnVuY3Rpb24gc3Ryb25nKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrU3Ryb25nKHN0YXRlMTIpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigic3Ryb25nIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBiZWZvcmUgPSB0cmFja2VyLm1vdmUobWFya2VyICsgbWFya2VyKTsKICBsZXQgYmV0d2VlbjIgPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIGFmdGVyOiBtYXJrZXIsCiAgICAgIGJlZm9yZSwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICBjb25zdCBiZXR3ZWVuSGVhZCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoMCk7CiAgY29uc3Qgb3BlbiA9IGVuY29kZUluZm8oCiAgICBpbmZvLmJlZm9yZS5jaGFyQ29kZUF0KGluZm8uYmVmb3JlLmxlbmd0aCAtIDEpLAogICAgYmV0d2VlbkhlYWQsCiAgICBtYXJrZXIKICApOwogIGlmIChvcGVuLmluc2lkZSkgewogICAgYmV0d2VlbjIgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlbkhlYWQpICsgYmV0d2VlbjIuc2xpY2UoMSk7CiAgfQogIGNvbnN0IGJldHdlZW5UYWlsID0gYmV0d2VlbjIuY2hhckNvZGVBdChiZXR3ZWVuMi5sZW5ndGggLSAxKTsKICBjb25zdCBjbG9zZTcgPSBlbmNvZGVJbmZvKGluZm8uYWZ0ZXIuY2hhckNvZGVBdCgwKSwgYmV0d2VlblRhaWwsIG1hcmtlcik7CiAgaWYgKGNsb3NlNy5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gYmV0d2VlbjIuc2xpY2UoMCwgLTEpICsgZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5UYWlsKTsKICB9CiAgY29uc3QgYWZ0ZXIgPSB0cmFja2VyLm1vdmUobWFya2VyICsgbWFya2VyKTsKICBleGl0MygpOwogIHN0YXRlMTIuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvID0gewogICAgYWZ0ZXI6IGNsb3NlNy5vdXRzaWRlLAogICAgYmVmb3JlOiBvcGVuLm91dHNpZGUKICB9OwogIHJldHVybiBiZWZvcmUgKyBiZXR3ZWVuMiArIGFmdGVyOwp9CmZ1bmN0aW9uIHN0cm9uZ1BlZWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIub3B0aW9ucy5zdHJvbmcgfHwgIioiOwp9CnZhciBpbml0X3N0cm9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMiKCkgewogICAgaW5pdF9jaGVja19zdHJvbmcoKTsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfZW5jb2RlX2luZm8oKTsKICAgIHN0cm9uZy5wZWVrID0gc3Ryb25nUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90ZXh0LmpzCmZ1bmN0aW9uIHRleHQobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgcmV0dXJuIHN0YXRlMTIuc2FmZShub2RlMi52YWx1ZSwgaW5mbyk7Cn0KdmFyIGluaXRfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90ZXh0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcnVsZS1yZXBldGl0aW9uLmpzCmZ1bmN0aW9uIGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUxMikgewogIGNvbnN0IHJlcGV0aXRpb24gPSBzdGF0ZTEyLm9wdGlvbnMucnVsZVJlcGV0aXRpb24gfHwgMzsKICBpZiAocmVwZXRpdGlvbiA8IDMpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgcnVsZXMgd2l0aCByZXBldGl0aW9uIGAiICsgcmVwZXRpdGlvbiArICJgIGZvciBgb3B0aW9ucy5ydWxlUmVwZXRpdGlvbmAsIGV4cGVjdGVkIGAzYCBvciBtb3JlIgogICAgKTsKICB9CiAgcmV0dXJuIHJlcGV0aXRpb247Cn0KdmFyIGluaXRfY2hlY2tfcnVsZV9yZXBldGl0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLXJlcGV0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzCmZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgY29uc3QgdmFsdWUyID0gKGNoZWNrUnVsZShzdGF0ZTEyKSArIChzdGF0ZTEyLm9wdGlvbnMucnVsZVNwYWNlcyA/ICIgIiA6ICIiKSkucmVwZWF0KGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUxMikpOwogIHJldHVybiBzdGF0ZTEyLm9wdGlvbnMucnVsZVNwYWNlcyA/IHZhbHVlMi5zbGljZSgwLCAtMSkgOiB2YWx1ZTI7Cn0KdmFyIGluaXRfdGhlbWF0aWNfYnJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogICAgaW5pdF9jaGVja19ydWxlX3JlcGV0aXRpb24oKTsKICAgIGluaXRfY2hlY2tfcnVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2luZGV4LmpzCnZhciBoYW5kbGU7CnZhciBpbml0X2hhbmRsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jsb2NrcXVvdGUoKTsKICAgIGluaXRfYnJlYWsoKTsKICAgIGluaXRfY29kZSgpOwogICAgaW5pdF9kZWZpbml0aW9uKCk7CiAgICBpbml0X2VtcGhhc2lzKCk7CiAgICBpbml0X2hlYWRpbmcoKTsKICAgIGluaXRfaHRtbCgpOwogICAgaW5pdF9pbWFnZSgpOwogICAgaW5pdF9pbWFnZV9yZWZlcmVuY2UoKTsKICAgIGluaXRfaW5saW5lX2NvZGUoKTsKICAgIGluaXRfbGluaygpOwogICAgaW5pdF9saW5rX3JlZmVyZW5jZSgpOwogICAgaW5pdF9saXN0KCk7CiAgICBpbml0X2xpc3RfaXRlbSgpOwogICAgaW5pdF9wYXJhZ3JhcGgoKTsKICAgIGluaXRfcm9vdCgpOwogICAgaW5pdF9zdHJvbmcoKTsKICAgIGluaXRfdGV4dCgpOwogICAgaW5pdF90aGVtYXRpY19icmVhaygpOwogICAgaGFuZGxlID0gewogICAgICBibG9ja3F1b3RlLAogICAgICBicmVhazogaGFyZEJyZWFrLAogICAgICBjb2RlLAogICAgICBkZWZpbml0aW9uLAogICAgICBlbXBoYXNpcywKICAgICAgaGFyZEJyZWFrLAogICAgICBoZWFkaW5nLAogICAgICBodG1sLAogICAgICBpbWFnZSwKICAgICAgaW1hZ2VSZWZlcmVuY2UsCiAgICAgIGlubGluZUNvZGUsCiAgICAgIGxpbmssCiAgICAgIGxpbmtSZWZlcmVuY2UsCiAgICAgIGxpc3Q6IGxpc3QyLAogICAgICBsaXN0SXRlbSwKICAgICAgcGFyYWdyYXBoLAogICAgICByb290LAogICAgICBzdHJvbmcsCiAgICAgIHRleHQsCiAgICAgIHRoZW1hdGljQnJlYWsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9qb2luLmpzCmZ1bmN0aW9uIGpvaW5EZWZhdWx0cyhsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgaWYgKHJpZ2h0LnR5cGUgPT09ICJjb2RlIiAmJiBmb3JtYXRDb2RlQXNJbmRlbnRlZChyaWdodCwgc3RhdGUxMikgJiYgKGxlZnQudHlwZSA9PT0gImxpc3QiIHx8IGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSAmJiBmb3JtYXRDb2RlQXNJbmRlbnRlZChsZWZ0LCBzdGF0ZTEyKSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKCJzcHJlYWQiIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50LnNwcmVhZCA9PT0gImJvb2xlYW4iKSB7CiAgICBpZiAobGVmdC50eXBlID09PSAicGFyYWdyYXBoIiAmJiAvLyBUd28gcGFyYWdyYXBocy4KICAgIChsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUgfHwgcmlnaHQudHlwZSA9PT0gImRlZmluaXRpb24iIHx8IC8vIFBhcmFncmFwaCBmb2xsb3dlZCBieSBhIHNldGV4dCBoZWFkaW5nLgogICAgcmlnaHQudHlwZSA9PT0gImhlYWRpbmciICYmIGZvcm1hdEhlYWRpbmdBc1NldGV4dChyaWdodCwgc3RhdGUxMikpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiBwYXJlbnQuc3ByZWFkID8gMSA6IDA7CiAgfQp9CnZhciBqb2luMjsKdmFyIGluaXRfam9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2pvaW4uanMiKCkgewogICAgaW5pdF9mb3JtYXRfY29kZV9hc19pbmRlbnRlZCgpOwogICAgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQoKTsKICAgIGpvaW4yID0gW2pvaW5EZWZhdWx0c107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91bnNhZmUuanMKdmFyIGZ1bGxQaHJhc2luZ1NwYW5zLCB1bnNhZmU7CnZhciBpbml0X3Vuc2FmZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3Vuc2FmZS5qcyIoKSB7CiAgICBmdWxsUGhyYXNpbmdTcGFucyA9IFsKICAgICAgImF1dG9saW5rIiwKICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICJkZXN0aW5hdGlvblJhdyIsCiAgICAgICJyZWZlcmVuY2UiLAogICAgICAidGl0bGVRdW90ZSIsCiAgICAgICJ0aXRsZUFwb3N0cm9waGUiCiAgICBdOwogICAgdW5zYWZlID0gWwogICAgICB7IGNoYXJhY3RlcjogIgkiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIJIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiCSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIlxyIiwKICAgICAgICBpbkNvbnN0cnVjdDogWwogICAgICAgICAgImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRMYW5nVGlsZGUiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhVGlsZGUiLAogICAgICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICAgICAiaGVhZGluZ0F0eCIKICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJcbiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YVRpbGRlIiwKICAgICAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAgICAgImhlYWRpbmdBdHgiCiAgICAgICAgXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogIiAiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIgIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiICIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgLy8gQW4gZXhjbGFtYXRpb24gbWFyayBjYW4gc3RhcnQgYW4gaW1hZ2UsIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IGEgbGluayBvcgogICAgICAvLyBhIGxpbmsgcmVmZXJlbmNlLgogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiISIsCiAgICAgICAgYWZ0ZXI6ICJcXFsiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHF1b3RlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICciJywgaW5Db25zdHJ1Y3Q6ICJ0aXRsZVF1b3RlIiB9LAogICAgICAvLyBBIG51bWJlciBzaWduIGNvdWxkIHN0YXJ0IGFuIEFUWCBoZWFkaW5nIGlmIGl0IHN0YXJ0cyBhIGxpbmUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiIyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIjIiwgaW5Db25zdHJ1Y3Q6ICJoZWFkaW5nQXR4IiwgYWZ0ZXI6ICIoPzpbXHJcbl18JCkiIH0sCiAgICAgIC8vIERvbGxhciBzaWduIGFuZCBwZXJjZW50YWdlIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93bi4KICAgICAgLy8gQW4gYW1wZXJzYW5kIGNvdWxkIHN0YXJ0IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4KICAgICAgeyBjaGFyYWN0ZXI6ICImIiwgYWZ0ZXI6ICJbI0EtWmEtel0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICAvLyBBbiBhcG9zdHJvcGhlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICInIiwgaW5Db25zdHJ1Y3Q6ICJ0aXRsZUFwb3N0cm9waGUiIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiByYXcuCiAgICAgIHsgY2hhcmFjdGVyOiAiKCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25SYXciIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBmb2xsb3dlZCBieSBgXWAgY291bGQgbWFrZSBzb21ldGhpbmcgaW50byBhIGxpbmsgb3IgaW1hZ2UuCiAgICAgIHsKICAgICAgICBiZWZvcmU6ICJcXF0iLAogICAgICAgIGNoYXJhY3RlcjogIigiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHJpZ2h0IHBhcmVuIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtIG9yIGJyZWFrIG91dCBvZiBhIGRlc3RpbmF0aW9uCiAgICAgIC8vIHJhdy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICJcXGQrIiwgY2hhcmFjdGVyOiAiKSIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIpIiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvblJhdyIgfSwKICAgICAgLy8gQW4gYXN0ZXJpc2sgY2FuIHN0YXJ0IHRoZW1hdGljIGJyZWFrcywgbGlzdCBpdGVtcywgZW1waGFzaXMsIHN0cm9uZy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICIqIiwgYWZ0ZXI6ICIoPzpbIAlcclxuKl0pIiB9LAogICAgICB7IGNoYXJhY3RlcjogIioiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIEEgcGx1cyBzaWduIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIisiLCBhZnRlcjogIig/OlsgCVxyXG5dKSIgfSwKICAgICAgLy8gQSBkYXNoIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGFuZCBzZXRleHQgaGVhZGluZwogICAgICAvLyB1bmRlcmxpbmVzLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIig/OlsgCVxyXG4tXSkiIH0sCiAgICAgIC8vIEEgZG90IGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGJlZm9yZTogIlxcZCsiLCBjaGFyYWN0ZXI6ICIuIiwgYWZ0ZXI6ICIoPzpbIAlcclxuXXwkKSIgfSwKICAgICAgLy8gU2xhc2gsIGNvbG9uLCBhbmQgc2VtaWNvbG9uIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQSBsZXNzIHRoYW4gY2FuIHN0YXJ0IGh0bWwgKGZsb3cgb3IgdGV4dCkgb3IgYW4gYXV0b2xpbmsuCiAgICAgIC8vIEhUTUwgY291bGQgc3RhcnQgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChkZWNsYXJhdGlvbiwgY2RhdGEsIGNvbW1lbnQpLAogICAgICAvLyBzbGFzaCAoY2xvc2luZyB0YWcpLCBxdWVzdGlvbiBtYXJrIChpbnN0cnVjdGlvbiksIG9yIGEgbGV0dGVyICh0YWcpLgogICAgICAvLyBBbiBhdXRvbGluayBhbHNvIHN0YXJ0cyB3aXRoIGEgbGV0dGVyLgogICAgICAvLyBGaW5hbGx5LCBpdCBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiBsaXRlcmFsLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjwiLCBhZnRlcjogIlshLz9BLVphLXpdIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiPCIsCiAgICAgICAgYWZ0ZXI6ICJbIS8/QS1aYS16XSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zCiAgICAgIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiPCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25MaXRlcmFsIiB9LAogICAgICAvLyBBbiBlcXVhbHMgdG8gY2FuIHN0YXJ0IHNldGV4dCBoZWFkaW5nIHVuZGVybGluZXMuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPSIgfSwKICAgICAgLy8gQSBncmVhdGVyIHRoYW4gY2FuIHN0YXJ0IGJsb2NrIHF1b3RlcyBhbmQgaXQgY2FuIGJyZWFrIG91dCBvZiBhCiAgICAgIC8vIGRlc3RpbmF0aW9uIGxpdGVyYWwuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPiIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICI+IiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvbkxpdGVyYWwiIH0sCiAgICAgIC8vIFF1ZXN0aW9uIG1hcmsgYW5kIGF0IHNpZ24gYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBIGxlZnQgYnJhY2tldCBjYW4gc3RhcnQgZGVmaW5pdGlvbnMsIHJlZmVyZW5jZXMsIGxhYmVscywKICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJbIiB9LAogICAgICB7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiWyIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIEEgYmFja3NsYXNoIGNhbiBzdGFydCBhbiBlc2NhcGUgKHdoZW4gZm9sbG93ZWQgYnkgcHVuY3R1YXRpb24pIG9yIGEKICAgICAgLy8gaGFyZCBicmVhayAod2hlbiBmb2xsb3dlZCBieSBhbiBlb2wpLgogICAgICAvLyBOb3RlOiB0eXBpY2FsIGVzY2FwZXMgYXJlIGhhbmRsZWQgaW4gYHNhZmVgIQogICAgICB7IGNoYXJhY3RlcjogIlxcIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIC8vIEEgcmlnaHQgYnJhY2tldCBjYW4gZXhpdCBsYWJlbHMuCiAgICAgIHsgY2hhcmFjdGVyOiAiXSIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIENhcmV0IGlzIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBbiB1bmRlcnNjb3JlIGNhbiBzdGFydCBlbXBoYXNpcywgc3Ryb25nLCBvciBhIHRoZW1hdGljIGJyZWFrLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIl8iIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXyIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciLCBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMgfSwKICAgICAgLy8gQSBncmF2ZSBhY2NlbnQgY2FuIHN0YXJ0IGNvZGUgKGZlbmNlZCBvciB0ZXh0KSwgb3IgaXQgY2FuIGJyZWFrIG91dCBvZgogICAgICAvLyBhIGdyYXZlIGFjY2VudCBjb2RlIGZlbmNlLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogImAiIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJgIiwKICAgICAgICBpbkNvbnN0cnVjdDogWyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogImAiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIExlZnQgYnJhY2UsIHZlcnRpY2FsIGJhciwgcmlnaHQgYnJhY2UgYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvcgogICAgICAvLyBjb25zdHJ1Y3RzLgogICAgICAvLyBBIHRpbGRlIGNhbiBzdGFydCBjb2RlIChmZW5jZWQpLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIn4iIH0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzCmZ1bmN0aW9uIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMikgewogIGNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZTIgPSAiJiIgKyB2YWx1ZTIgKyAiOyI7CiAgZWxlbWVudC5pbm5lckhUTUwgPSBjaGFyYWN0ZXJSZWZlcmVuY2UyOwogIGNvbnN0IGNoYXJhY3RlciA9IGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgaWYgKGNoYXJhY3Rlci5jaGFyQ29kZUF0KGNoYXJhY3Rlci5sZW5ndGggLSAxKSA9PT0gNTkgJiYgdmFsdWUyICE9PSAic2VtaSIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIGNoYXJhY3RlciA9PT0gY2hhcmFjdGVyUmVmZXJlbmNlMiA/IGZhbHNlIDogY2hhcmFjdGVyOwp9CnZhciBlbGVtZW50Owp2YXIgaW5pdF9pbmRleF9kb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzIigpIHsKICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzCmZ1bmN0aW9uIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLCBiYXNlKSB7CiAgY29uc3QgY29kZTQgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUyLCBiYXNlKTsKICBpZiAoCiAgICAvLyBDMCBleGNlcHQgZm9yIEhULCBMRiwgRkYsIENSLCBzcGFjZS4KICAgIGNvZGU0IDwgOSB8fCBjb2RlNCA9PT0gMTEgfHwgY29kZTQgPiAxMyAmJiBjb2RlNCA8IDMyIHx8IC8vIENvbnRyb2wgY2hhcmFjdGVyIChERUwpIG9mIEMwLCBhbmQgQzEgY29udHJvbHMuCiAgICBjb2RlNCA+IDEyNiAmJiBjb2RlNCA8IDE2MCB8fCAvLyBMb25lIGhpZ2ggc3Vycm9nYXRlcyBhbmQgbG93IHN1cnJvZ2F0ZXMuCiAgICBjb2RlNCA+IDU1Mjk1ICYmIGNvZGU0IDwgNTczNDQgfHwgLy8gTm9uY2hhcmFjdGVycy4KICAgIGNvZGU0ID4gNjQ5NzUgJiYgY29kZTQgPCA2NTAwOCB8fCAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovCiAgICAoY29kZTQgJiA2NTUzNSkgPT09IDY1NTM1IHx8IChjb2RlNCAmIDY1NTM1KSA9PT0gNjU1MzQgfHwgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovCiAgICAvLyBPdXQgb2YgcmFuZ2UKICAgIGNvZGU0ID4gMTExNDExMQogICkgewogICAgcmV0dXJuICJcdUZGRkQiOwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmdAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvaW5kZXguanMKZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSwgZGVjb2RlKTsKfQpmdW5jdGlvbiBkZWNvZGUoJDAsICQxLCAkMjIpIHsKICBpZiAoJDEpIHsKICAgIHJldHVybiAkMTsKICB9CiAgY29uc3QgaGVhZDIgPSAkMjIuY2hhckNvZGVBdCgwKTsKICBpZiAoaGVhZDIgPT09IDM1KSB7CiAgICBjb25zdCBoZWFkMyA9ICQyMi5jaGFyQ29kZUF0KDEpOwogICAgY29uc3QgaGV4MiA9IGhlYWQzID09PSAxMjAgfHwgaGVhZDMgPT09IDg4OwogICAgcmV0dXJuIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoJDIyLnNsaWNlKGhleDIgPyAyIDogMSksIGhleDIgPyAxNiA6IDEwKTsKICB9CiAgcmV0dXJuIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKCQyMikgfHwgJDA7Cn0KdmFyIGNoYXJhY3RlckVzY2FwZU9yUmVmZXJlbmNlOwp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfc3RyaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZ0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9IC9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzCmZ1bmN0aW9uIGFzc29jaWF0aW9uKG5vZGUyKSB7CiAgaWYgKG5vZGUyLmxhYmVsIHx8ICFub2RlMi5pZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbm9kZTIubGFiZWwgfHwgIiI7CiAgfQogIHJldHVybiBkZWNvZGVTdHJpbmcobm9kZTIuaWRlbnRpZmllcik7Cn0KdmFyIGluaXRfYXNzb2NpYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jb21waWxlLXBhdHRlcm4uanMKZnVuY3Rpb24gY29tcGlsZVBhdHRlcm4ocGF0dGVybikgewogIGlmICghcGF0dGVybi5fY29tcGlsZWQpIHsKICAgIGNvbnN0IGJlZm9yZSA9IChwYXR0ZXJuLmF0QnJlYWsgPyAiW1xcclxcbl1bXFx0IF0qIiA6ICIiKSArIChwYXR0ZXJuLmJlZm9yZSA/ICIoPzoiICsgcGF0dGVybi5iZWZvcmUgKyAiKSIgOiAiIik7CiAgICBwYXR0ZXJuLl9jb21waWxlZCA9IG5ldyBSZWdFeHAoCiAgICAgIChiZWZvcmUgPyAiKCIgKyBiZWZvcmUgKyAiKSIgOiAiIikgKyAoL1t8XFx7fSgpW1xdXiQrKj8uLV0vLnRlc3QocGF0dGVybi5jaGFyYWN0ZXIpID8gIlxcIiA6ICIiKSArIHBhdHRlcm4uY2hhcmFjdGVyICsgKHBhdHRlcm4uYWZ0ZXIgPyAiKD86IiArIHBhdHRlcm4uYWZ0ZXIgKyAiKSIgOiAiIiksCiAgICAgICJnIgogICAgKTsKICB9CiAgcmV0dXJuIHBhdHRlcm4uX2NvbXBpbGVkOwp9CnZhciBpbml0X2NvbXBpbGVfcGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29tcGlsZS1wYXR0ZXJuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzCmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGluZGV4U3RhY2sgPSBzdGF0ZTEyLmluZGV4U3RhY2s7CiAgY29uc3QgY2hpbGRyZW4yID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdOwogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGJlZm9yZSA9IGluZm8uYmVmb3JlOwogIGxldCBlbmNvZGVBZnRlcjsKICBpbmRleFN0YWNrLnB1c2goLTEpOwogIGxldCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW4yW2luZGV4Ml07CiAgICBsZXQgYWZ0ZXI7CiAgICBpbmRleFN0YWNrW2luZGV4U3RhY2subGVuZ3RoIC0gMV0gPSBpbmRleDI7CiAgICBpZiAoaW5kZXgyICsgMSA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgbGV0IGhhbmRsZTMgPSBzdGF0ZTEyLmhhbmRsZS5oYW5kbGVyc1tjaGlsZHJlbjJbaW5kZXgyICsgMV0udHlwZV07CiAgICAgIGlmIChoYW5kbGUzICYmIGhhbmRsZTMucGVlaykgaGFuZGxlMyA9IGhhbmRsZTMucGVlazsKICAgICAgYWZ0ZXIgPSBoYW5kbGUzID8gaGFuZGxlMyhjaGlsZHJlbjJbaW5kZXgyICsgMV0sIHBhcmVudCwgc3RhdGUxMiwgewogICAgICAgIGJlZm9yZTogIiIsCiAgICAgICAgYWZ0ZXI6ICIiLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pLmNoYXJBdCgwKSA6ICIiOwogICAgfSBlbHNlIHsKICAgICAgYWZ0ZXIgPSBpbmZvLmFmdGVyOwogICAgfQogICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiAoYmVmb3JlID09PSAiXHIiIHx8IGJlZm9yZSA9PT0gIlxuIikgJiYgY2hpbGQudHlwZSA9PT0gImh0bWwiKSB7CiAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5yZXBsYWNlKAogICAgICAgIC8oXHI/XG58XHIpJC8sCiAgICAgICAgIiAiCiAgICAgICk7CiAgICAgIGJlZm9yZSA9ICIgIjsKICAgICAgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICAgICAgdHJhY2tlci5tb3ZlKHJlc3VsdHMuam9pbigiIikpOwogICAgfQogICAgbGV0IHZhbHVlMiA9IHN0YXRlMTIuaGFuZGxlKGNoaWxkLCBwYXJlbnQsIHN0YXRlMTIsIHsKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICAgIGFmdGVyLAogICAgICBiZWZvcmUKICAgIH0pOwogICAgaWYgKGVuY29kZUFmdGVyICYmIGVuY29kZUFmdGVyID09PSB2YWx1ZTIuc2xpY2UoMCwgMSkpIHsKICAgICAgdmFsdWUyID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGVuY29kZUFmdGVyLmNoYXJDb2RlQXQoMCkpICsgdmFsdWUyLnNsaWNlKDEpOwogICAgfQogICAgY29uc3QgZW5jb2RpbmdJbmZvID0gc3RhdGUxMi5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm87CiAgICBzdGF0ZTEyLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHZvaWQgMDsKICAgIGVuY29kZUFmdGVyID0gdm9pZCAwOwogICAgaWYgKGVuY29kaW5nSW5mbykgewogICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwICYmIGVuY29kaW5nSW5mby5iZWZvcmUgJiYgYmVmb3JlID09PSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0uc2xpY2UoLTEpKSB7CiAgICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZWZvcmUuY2hhckNvZGVBdCgwKSk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nSW5mby5hZnRlcikgZW5jb2RlQWZ0ZXIgPSBhZnRlcjsKICAgIH0KICAgIHRyYWNrZXIubW92ZSh2YWx1ZTIpOwogICAgcmVzdWx0cy5wdXNoKHZhbHVlMik7CiAgICBiZWZvcmUgPSB2YWx1ZTIuc2xpY2UoLTEpOwogIH0KICBpbmRleFN0YWNrLnBvcCgpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBpbml0X2NvbnRhaW5lcl9waHJhc2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzIigpIHsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLWZsb3cuanMKZnVuY3Rpb24gY29udGFpbmVyRmxvdyhwYXJlbnQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBpbmRleFN0YWNrID0gc3RhdGUxMi5pbmRleFN0YWNrOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudC5jaGlsZHJlbiB8fCBbXTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaW5kZXhTdGFjay5wdXNoKC0xKTsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuMltpbmRleDJdOwogICAgaW5kZXhTdGFja1tpbmRleFN0YWNrLmxlbmd0aCAtIDFdID0gaW5kZXgyOwogICAgcmVzdWx0cy5wdXNoKAogICAgICB0cmFja2VyLm1vdmUoCiAgICAgICAgc3RhdGUxMi5oYW5kbGUoY2hpbGQsIHBhcmVudCwgc3RhdGUxMiwgewogICAgICAgICAgYmVmb3JlOiAiXG4iLAogICAgICAgICAgYWZ0ZXI6ICJcbiIsCiAgICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICAgIH0pCiAgICAgICkKICAgICk7CiAgICBpZiAoY2hpbGQudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgIHN0YXRlMTIuYnVsbGV0TGFzdFVzZWQgPSB2b2lkIDA7CiAgICB9CiAgICBpZiAoaW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgcmVzdWx0cy5wdXNoKAogICAgICAgIHRyYWNrZXIubW92ZShiZXR3ZWVuKGNoaWxkLCBjaGlsZHJlbjJbaW5kZXgyICsgMV0sIHBhcmVudCwgc3RhdGUxMikpCiAgICAgICk7CiAgICB9CiAgfQogIGluZGV4U3RhY2sucG9wKCk7CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KZnVuY3Rpb24gYmV0d2VlbihsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgbGV0IGluZGV4MiA9IHN0YXRlMTIuam9pbi5sZW5ndGg7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZTEyLmpvaW5baW5kZXgyXShsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKTsKICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSAxKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJudW1iZXIiKSB7CiAgICAgIHJldHVybiAiXG4iLnJlcGVhdCgxICsgcmVzdWx0KTsKICAgIH0KICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgIHJldHVybiAiXG5cbjwhLS0tLT5cblxuIjsKICAgIH0KICB9CiAgcmV0dXJuICJcblxuIjsKfQp2YXIgaW5pdF9jb250YWluZXJfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLWZsb3cuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9pbmRlbnQtbGluZXMuanMKZnVuY3Rpb24gaW5kZW50TGluZXModmFsdWUyLCBtYXA3KSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgbGluZSA9IDA7CiAgbGV0IG1hdGNoMjsKICB3aGlsZSAobWF0Y2gyID0gZW9sLmV4ZWModmFsdWUyKSkgewogICAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIG1hdGNoMi5pbmRleCkpOwogICAgcmVzdWx0LnB1c2gobWF0Y2gyWzBdKTsKICAgIHN0YXJ0ID0gbWF0Y2gyLmluZGV4ICsgbWF0Y2gyWzBdLmxlbmd0aDsKICAgIGxpbmUrKzsKICB9CiAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQpKTsKICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwogIGZ1bmN0aW9uIG9uZTModmFsdWUzKSB7CiAgICByZXN1bHQucHVzaChtYXA3KHZhbHVlMywgbGluZSwgIXZhbHVlMykpOwogIH0KfQp2YXIgZW9sOwp2YXIgaW5pdF9pbmRlbnRfbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2luZGVudC1saW5lcy5qcyIoKSB7CiAgICBlb2wgPSAvXHI/XG58XHIvZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvc2FmZS5qcwpmdW5jdGlvbiBzYWZlKHN0YXRlMTIsIGlucHV0LCBjb25maWczKSB7CiAgY29uc3QgdmFsdWUyID0gKGNvbmZpZzMuYmVmb3JlIHx8ICIiKSArIChpbnB1dCB8fCAiIikgKyAoY29uZmlnMy5hZnRlciB8fCAiIik7CiAgY29uc3QgcG9zaXRpb25zID0gW107CiAgY29uc3QgcmVzdWx0ID0gW107CiAgY29uc3QgaW5mb3MgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxMi51bnNhZmUubGVuZ3RoKSB7CiAgICBjb25zdCBwYXR0ZXJuID0gc3RhdGUxMi51bnNhZmVbaW5kZXgyXTsKICAgIGlmICghcGF0dGVybkluU2NvcGUoc3RhdGUxMi5zdGFjaywgcGF0dGVybikpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGUxMi5jb21waWxlUGF0dGVybihwYXR0ZXJuKTsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAobWF0Y2gyID0gZXhwcmVzc2lvbi5leGVjKHZhbHVlMikpIHsKICAgICAgY29uc3QgYmVmb3JlID0gImJlZm9yZSIgaW4gcGF0dGVybiB8fCBCb29sZWFuKHBhdHRlcm4uYXRCcmVhayk7CiAgICAgIGNvbnN0IGFmdGVyID0gImFmdGVyIiBpbiBwYXR0ZXJuOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXggKyAoYmVmb3JlID8gbWF0Y2gyWzFdLmxlbmd0aCA6IDApOwogICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHBvc2l0aW9uMykpIHsKICAgICAgICBpZiAoaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgJiYgIWJlZm9yZSkgewogICAgICAgICAgaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZm9zW3Bvc2l0aW9uM10uYWZ0ZXIgJiYgIWFmdGVyKSB7CiAgICAgICAgICBpbmZvc1twb3NpdGlvbjNdLmFmdGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uMyk7CiAgICAgICAgaW5mb3NbcG9zaXRpb24zXSA9IHsgYmVmb3JlLCBhZnRlciB9OwogICAgICB9CiAgICB9CiAgfQogIHBvc2l0aW9ucy5zb3J0KG51bWVyaWNhbCk7CiAgbGV0IHN0YXJ0ID0gY29uZmlnMy5iZWZvcmUgPyBjb25maWczLmJlZm9yZS5sZW5ndGggOiAwOwogIGNvbnN0IGVuZDMgPSB2YWx1ZTIubGVuZ3RoIC0gKGNvbmZpZzMuYWZ0ZXIgPyBjb25maWczLmFmdGVyLmxlbmd0aCA6IDApOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHBvc2l0aW9ucy5sZW5ndGgpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHBvc2l0aW9uc1tpbmRleDJdOwogICAgaWYgKHBvc2l0aW9uMyA8IHN0YXJ0IHx8IHBvc2l0aW9uMyA+PSBlbmQzKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHBvc2l0aW9uMyArIDEgPCBlbmQzICYmIHBvc2l0aW9uc1tpbmRleDIgKyAxXSA9PT0gcG9zaXRpb24zICsgMSAmJiBpbmZvc1twb3NpdGlvbjNdLmFmdGVyICYmICFpbmZvc1twb3NpdGlvbjMgKyAxXS5iZWZvcmUgJiYgIWluZm9zW3Bvc2l0aW9uMyArIDFdLmFmdGVyIHx8IHBvc2l0aW9uc1tpbmRleDIgLSAxXSA9PT0gcG9zaXRpb24zIC0gMSAmJiBpbmZvc1twb3NpdGlvbjNdLmJlZm9yZSAmJiAhaW5mb3NbcG9zaXRpb24zIC0gMV0uYmVmb3JlICYmICFpbmZvc1twb3NpdGlvbjMgLSAxXS5hZnRlcikgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24zKSB7CiAgICAgIHJlc3VsdC5wdXNoKGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlMi5zbGljZShzdGFydCwgcG9zaXRpb24zKSwgIlxcIikpOwogICAgfQogICAgc3RhcnQgPSBwb3NpdGlvbjM7CiAgICBpZiAoL1shLS86LUBbLWB7LX5dLy50ZXN0KHZhbHVlMi5jaGFyQXQocG9zaXRpb24zKSkgJiYgKCFjb25maWczLmVuY29kZSB8fCAhY29uZmlnMy5lbmNvZGUuaW5jbHVkZXModmFsdWUyLmNoYXJBdChwb3NpdGlvbjMpKSkpIHsKICAgICAgcmVzdWx0LnB1c2goIlxcIik7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQucHVzaChlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zKSkpOwogICAgICBzdGFydCsrOwogICAgfQogIH0KICByZXN1bHQucHVzaChlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIGVuZDMpLCBjb25maWczLmFmdGVyKSk7CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQpmdW5jdGlvbiBudW1lcmljYWwoYTUsIGI1KSB7CiAgcmV0dXJuIGE1IC0gYjU7Cn0KZnVuY3Rpb24gZXNjYXBlQmFja3NsYXNoZXModmFsdWUyLCBhZnRlcikgewogIGNvbnN0IGV4cHJlc3Npb24gPSAvXFwoPz1bIS0vOi1AWy1gey1+XSkvZzsKICBjb25zdCBwb3NpdGlvbnMgPSBbXTsKICBjb25zdCByZXN1bHRzID0gW107CiAgY29uc3Qgd2hvbGUgPSB2YWx1ZTIgKyBhZnRlcjsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgbWF0Y2gyOwogIHdoaWxlIChtYXRjaDIgPSBleHByZXNzaW9uLmV4ZWMod2hvbGUpKSB7CiAgICBwb3NpdGlvbnMucHVzaChtYXRjaDIuaW5kZXgpOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CiAgICBpZiAoc3RhcnQgIT09IHBvc2l0aW9uc1tpbmRleDJdKSB7CiAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uc1tpbmRleDJdKSk7CiAgICB9CiAgICByZXN1bHRzLnB1c2goIlxcIik7CiAgICBzdGFydCA9IHBvc2l0aW9uc1tpbmRleDJdOwogIH0KICByZXN1bHRzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0KSk7CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KdmFyIGluaXRfc2FmZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvc2FmZS5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X3BhdHRlcm5faW5fc2NvcGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvdHJhY2suanMKZnVuY3Rpb24gdHJhY2soY29uZmlnMykgewogIGNvbnN0IG9wdGlvbnMgPSBjb25maWczIHx8IHt9OwogIGNvbnN0IG5vdzIgPSBvcHRpb25zLm5vdyB8fCB7fTsKICBsZXQgbGluZVNoaWZ0ID0gb3B0aW9ucy5saW5lU2hpZnQgfHwgMDsKICBsZXQgbGluZSA9IG5vdzIubGluZSB8fCAxOwogIGxldCBjb2x1bW4gPSBub3cyLmNvbHVtbiB8fCAxOwogIHJldHVybiB7IG1vdmUsIGN1cnJlbnQsIHNoaWZ0IH07CiAgZnVuY3Rpb24gY3VycmVudCgpIHsKICAgIHJldHVybiB7IG5vdzogeyBsaW5lLCBjb2x1bW4gfSwgbGluZVNoaWZ0IH07CiAgfQogIGZ1bmN0aW9uIHNoaWZ0KHZhbHVlMikgewogICAgbGluZVNoaWZ0ICs9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gbW92ZShpbnB1dCkgewogICAgY29uc3QgdmFsdWUyID0gaW5wdXQgfHwgIiI7CiAgICBjb25zdCBjaHVua3MgPSB2YWx1ZTIuc3BsaXQoL1xyP1xufFxyL2cpOwogICAgY29uc3QgdGFpbCA9IGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV07CiAgICBsaW5lICs9IGNodW5rcy5sZW5ndGggLSAxOwogICAgY29sdW1uID0gY2h1bmtzLmxlbmd0aCA9PT0gMSA/IGNvbHVtbiArIHRhaWwubGVuZ3RoIDogMSArIHRhaWwubGVuZ3RoICsgbGluZVNoaWZ0OwogICAgcmV0dXJuIHZhbHVlMjsKICB9Cn0KdmFyIGluaXRfdHJhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3RyYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvTWFya2Rvd24odHJlZSwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBzdGF0ZTEyID0gewogICAgYXNzb2NpYXRpb25JZDogYXNzb2NpYXRpb24sCiAgICBjb250YWluZXJQaHJhc2luZzogY29udGFpbmVyUGhyYXNpbmdCb3VuZCwKICAgIGNvbnRhaW5lckZsb3c6IGNvbnRhaW5lckZsb3dCb3VuZCwKICAgIGNyZWF0ZVRyYWNrZXI6IHRyYWNrLAogICAgY29tcGlsZVBhdHRlcm4sCiAgICBlbnRlciwKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEdGTSAvIGZyb250bWF0dGVyIGFyZSB0eXBlZCBpbiBgbWRhc3RgIGJ1dCBub3QgZGVmaW5lZAogICAgLy8gaGVyZS4KICAgIGhhbmRsZXJzOiB7IC4uLmhhbmRsZSB9LAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYWRkIGBoYW5kbGVgIGluIGEgc2Vjb25kLgogICAgaGFuZGxlOiB2b2lkIDAsCiAgICBpbmRlbnRMaW5lcywKICAgIGluZGV4U3RhY2s6IFtdLAogICAgam9pbjogWy4uLmpvaW4yXSwKICAgIG9wdGlvbnM6IHt9LAogICAgc2FmZTogc2FmZUJvdW5kLAogICAgc3RhY2s6IFtdLAogICAgdW5zYWZlOiBbLi4udW5zYWZlXQogIH07CiAgY29uZmlndXJlKHN0YXRlMTIsIHNldHRpbmdzKTsKICBpZiAoc3RhdGUxMi5vcHRpb25zLnRpZ2h0RGVmaW5pdGlvbnMpIHsKICAgIHN0YXRlMTIuam9pbi5wdXNoKGpvaW5EZWZpbml0aW9uKTsKICB9CiAgc3RhdGUxMi5oYW5kbGUgPSB6d2l0Y2goInR5cGUiLCB7CiAgICBpbnZhbGlkLAogICAgdW5rbm93biwKICAgIGhhbmRsZXJzOiBzdGF0ZTEyLmhhbmRsZXJzCiAgfSk7CiAgbGV0IHJlc3VsdCA9IHN0YXRlMTIuaGFuZGxlKHRyZWUsIHZvaWQgMCwgc3RhdGUxMiwgewogICAgYmVmb3JlOiAiXG4iLAogICAgYWZ0ZXI6ICJcbiIsCiAgICBub3c6IHsgbGluZTogMSwgY29sdW1uOiAxIH0sCiAgICBsaW5lU2hpZnQ6IDAKICB9KTsKICBpZiAocmVzdWx0ICYmIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTAgJiYgcmVzdWx0LmNoYXJDb2RlQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSAxMykgewogICAgcmVzdWx0ICs9ICJcbiI7CiAgfQogIHJldHVybiByZXN1bHQ7CiAgZnVuY3Rpb24gZW50ZXIobmFtZSkgewogICAgc3RhdGUxMi5zdGFjay5wdXNoKG5hbWUpOwogICAgcmV0dXJuIGV4aXQzOwogICAgZnVuY3Rpb24gZXhpdDMoKSB7CiAgICAgIHN0YXRlMTIuc3RhY2sucG9wKCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGludmFsaWQodmFsdWUyKSB7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHZhbHVlIGAiICsgdmFsdWUyICsgImAsIGV4cGVjdGVkIG5vZGUiKTsKfQpmdW5jdGlvbiB1bmtub3duKHZhbHVlMikgewogIGNvbnN0IG5vZGUyID0gKAogICAgLyoqIEB0eXBlIHtOb2Rlc30gKi8KICAgIHZhbHVlMgogICk7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHVua25vd24gbm9kZSBgIiArIG5vZGUyLnR5cGUgKyAiYCIpOwp9CmZ1bmN0aW9uIGpvaW5EZWZpbml0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKGxlZnQudHlwZSA9PT0gImRlZmluaXRpb24iICYmIGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSkgewogICAgcmV0dXJuIDA7CiAgfQp9CmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nQm91bmQocGFyZW50LCBpbmZvKSB7CiAgcmV0dXJuIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gY29udGFpbmVyRmxvd0JvdW5kKHBhcmVudCwgaW5mbykgewogIHJldHVybiBjb250YWluZXJGbG93KHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gc2FmZUJvdW5kKHZhbHVlMiwgY29uZmlnMykgewogIHJldHVybiBzYWZlKHRoaXMsIHZhbHVlMiwgY29uZmlnMyk7Cn0KdmFyIGluaXRfbGliMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb25maWd1cmUoKTsKICAgIGluaXRfaGFuZGxlKCk7CiAgICBpbml0X2pvaW4oKTsKICAgIGluaXRfdW5zYWZlKCk7CiAgICBpbml0X2Fzc29jaWF0aW9uKCk7CiAgICBpbml0X2NvbXBpbGVfcGF0dGVybigpOwogICAgaW5pdF9jb250YWluZXJfcGhyYXNpbmcoKTsKICAgIGluaXRfY29udGFpbmVyX2Zsb3coKTsKICAgIGluaXRfaW5kZW50X2xpbmVzKCk7CiAgICBpbml0X3NhZmUoKTsKICAgIGluaXRfdHJhY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNSgpOwogICAgaW5pdF9oYW5kbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtVGFibGVGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhYmxlOiBlbnRlclRhYmxlLAogICAgICB0YWJsZURhdGE6IGVudGVyQ2VsbCwKICAgICAgdGFibGVIZWFkZXI6IGVudGVyQ2VsbCwKICAgICAgdGFibGVSb3c6IGVudGVyUm93CiAgICB9LAogICAgZXhpdDogewogICAgICBjb2RlVGV4dDogZXhpdENvZGVUZXh0LAogICAgICB0YWJsZTogZXhpdFRhYmxlLAogICAgICB0YWJsZURhdGE6IGV4aXQsCiAgICAgIHRhYmxlSGVhZGVyOiBleGl0LAogICAgICB0YWJsZVJvdzogZXhpdAogICAgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJUYWJsZSh0b2tlbikgewogIGNvbnN0IGFsaWduID0gdG9rZW4uX2FsaWduOwogIG9rKGFsaWduLCAiZXhwZWN0ZWQgYF9hbGlnbmAgb24gdGFibGUiKTsKICB0aGlzLmVudGVyKAogICAgewogICAgICB0eXBlOiAidGFibGUiLAogICAgICBhbGlnbjogYWxpZ24ubWFwKGZ1bmN0aW9uKGQ2KSB7CiAgICAgICAgcmV0dXJuIGQ2ID09PSAibm9uZSIgPyBudWxsIDogZDY7CiAgICAgIH0pLAogICAgICBjaGlsZHJlbjogW10KICAgIH0sCiAgICB0b2tlbgogICk7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB0cnVlOwp9CmZ1bmN0aW9uIGV4aXRUYWJsZSh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB2b2lkIDA7Cn0KZnVuY3Rpb24gZW50ZXJSb3codG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlUm93IiwgY2hpbGRyZW46IFtdIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0KHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckNlbGwodG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlQ2VsbCIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdENvZGVUZXh0KHRva2VuKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgaWYgKHRoaXMuZGF0YS5pblRhYmxlKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXFwoW1xcfF0pL2csIHJlcGxhY2UpOwogIH0KICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiaW5saW5lQ29kZSIpOwogIG5vZGUyLnZhbHVlID0gdmFsdWUyOwogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gcmVwbGFjZSgkMCwgJDEpIHsKICByZXR1cm4gJDEgPT09ICJ8IiA/ICQxIDogJDA7Cn0KZnVuY3Rpb24gZ2ZtVGFibGVUb01hcmtkb3duKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgcGFkZGluZyA9IHNldHRpbmdzLnRhYmxlQ2VsbFBhZGRpbmc7CiAgY29uc3QgYWxpZ25EZWxpbWl0ZXJzID0gc2V0dGluZ3MudGFibGVQaXBlQWxpZ247CiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFyb3VuZCA9IHBhZGRpbmcgPyAiICIgOiAifCI7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7IGNoYXJhY3RlcjogIlxyIiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXG4iLCBpbkNvbnN0cnVjdDogInRhYmxlQ2VsbCIgfSwKICAgICAgLy8gQSBwaXBlLCB3aGVuIGZvbGxvd2VkIGJ5IGEgdGFiIG9yIHNwYWNlIChwYWRkaW5nKSwgb3IgYSBkYXNoIG9yIGNvbG9uCiAgICAgIC8vICh1bnBhZGRlZCBkZWxpbWl0ZXIgcm93KSwgY291bGQgcmVzdWx0IGluIGEgdGFibGUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAifCIsIGFmdGVyOiAiWwkgOi1dIiB9LAogICAgICAvLyBBIHBpcGUgaW4gYSBjZWxsIG11c3QgYmUgZW5jb2RlZC4KICAgICAgeyBjaGFyYWN0ZXI6ICJ8IiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIC8vIEEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRhc2gsIGluIHdoaWNoIGNhc2UgaXQgY291bGQgc3RhcnQgYQogICAgICAvLyBkZWxpbWl0ZXIgcm93LgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjoiLCBhZnRlcjogIi0iIH0sCiAgICAgIC8vIEEgZGVsaW1pdGVyIHJvdyBjYW4gYWxzbyBzdGFydCB3aXRoIGEgZGFzaCwgd2hlbiBmb2xsb3dlZCBieSBtb3JlCiAgICAgIC8vIGRhc2hlcywgYSBjb2xvbiwgb3IgYSBwaXBlLgogICAgICAvLyBUaGlzIGlzIGEgc3RyaWN0ZXIgdmVyc2lvbiB0aGFuIHRoZSBidWlsdCBpbiBjaGVjayBmb3IgbGlzdHMsIHRoZW1hdGljCiAgICAgIC8vIGJyZWFrcywgYW5kIHNldGV4IGhlYWRpbmcgdW5kZXJsaW5lcyB0aG91Z2g6CiAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGF4LXRyZWUvbWRhc3QtdXRpbC10by1tYXJrZG93bi9ibG9iLzUxYTIwMzgvbGliL3Vuc2FmZS5qcyNMNTc+CiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiLSIsIGFmdGVyOiAiWzp8LV0iIH0KICAgIF0sCiAgICBoYW5kbGVyczogewogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlV2l0aFRhYmxlLAogICAgICB0YWJsZTogaGFuZGxlVGFibGUsCiAgICAgIHRhYmxlQ2VsbDogaGFuZGxlVGFibGVDZWxsLAogICAgICB0YWJsZVJvdzogaGFuZGxlVGFibGVSb3cKICAgIH0KICB9OwogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgcmV0dXJuIHNlcmlhbGl6ZURhdGEoaGFuZGxlVGFibGVBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pLCBub2RlMi5hbGlnbik7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlUm93KG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3Qgcm93ID0gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pOwogICAgY29uc3QgdmFsdWUyID0gc2VyaWFsaXplRGF0YShbcm93XSk7CiAgICByZXR1cm4gdmFsdWUyLnNsaWNlKDAsIHZhbHVlMi5pbmRleE9mKCJcbiIpKTsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVDZWxsKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJ0YWJsZUNlbGwiKTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJwaHJhc2luZyIpOwogICAgY29uc3QgdmFsdWUyID0gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICAuLi5pbmZvLAogICAgICBiZWZvcmU6IGFyb3VuZCwKICAgICAgYWZ0ZXI6IGFyb3VuZAogICAgfSk7CiAgICBzdWJleGl0KCk7CiAgICBleGl0MygpOwogICAgcmV0dXJuIHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplRGF0YShtYXRyaXgsIGFsaWduKSB7CiAgICByZXR1cm4gbWFya2Rvd25UYWJsZShtYXRyaXgsIHsKICAgICAgYWxpZ24sCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLgogICAgICBhbGlnbkRlbGltaXRlcnMsCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLgogICAgICBwYWRkaW5nLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgc3RyaW5nTGVuZ3RoCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pIHsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigidGFibGUiKTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4Ml0gPSBoYW5kbGVUYWJsZVJvd0FzRGF0YShjaGlsZHJlbjJbaW5kZXgyXSwgc3RhdGUxMiwgaW5mbyk7CiAgICB9CiAgICBzdWJleGl0KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBoYW5kbGVUYWJsZVJvd0FzRGF0YShub2RlMiwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3QgY2hpbGRyZW4yID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXgyXSA9IGhhbmRsZVRhYmxlQ2VsbChjaGlsZHJlbjJbaW5kZXgyXSwgbm9kZTIsIHN0YXRlMTIsIGluZm8pOwogICAgfQogICAgc3ViZXhpdCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaW5saW5lQ29kZVdpdGhUYWJsZShub2RlMiwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgICBsZXQgdmFsdWUyID0gaGFuZGxlLmlubGluZUNvZGUobm9kZTIsIHBhcmVudCwgc3RhdGUxMik7CiAgICBpZiAoc3RhdGUxMi5zdGFjay5pbmNsdWRlcygidGFibGVDZWxsIikpIHsKICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1x8L2csICJcXCQmIik7CiAgICB9CiAgICByZXR1cm4gdmFsdWUyOwogIH0KfQp2YXIgaW5pdF9saWIxNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21hcmtkb3duX3RhYmxlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgZXhpdDogewogICAgICB0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkOiBleGl0Q2hlY2ssCiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZDogZXhpdENoZWNrLAogICAgICBwYXJhZ3JhcGg6IGV4aXRQYXJhZ3JhcGhXaXRoVGFza0xpc3RJdGVtCiAgICB9CiAgfTsKfQpmdW5jdGlvbiBnZm1UYXNrTGlzdEl0ZW1Ub01hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB1bnNhZmU6IFt7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIls6fC1dIiB9XSwKICAgIGhhbmRsZXJzOiB7IGxpc3RJdGVtOiBsaXN0SXRlbVdpdGhUYXNrTGlzdEl0ZW0gfQogIH07Cn0KZnVuY3Rpb24gZXhpdENoZWNrKHRva2VuKSB7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgb2sobm9kZTIudHlwZSA9PT0gImxpc3RJdGVtIik7CiAgbm9kZTIuY2hlY2tlZCA9IHRva2VuLnR5cGUgPT09ICJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIjsKfQpmdW5jdGlvbiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbSh0b2tlbikgewogIGNvbnN0IHBhcmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAibGlzdEl0ZW0iICYmIHR5cGVvZiBwYXJlbnQuY2hlY2tlZCA9PT0gImJvb2xlYW4iKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG9rKG5vZGUyLnR5cGUgPT09ICJwYXJhZ3JhcGgiKTsKICAgIGNvbnN0IGhlYWQyID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudC5jaGlsZHJlbjsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBsZXQgZmlyc3RQYXJhZ2hyYXBoOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBzaWJsaW5nczIubGVuZ3RoKSB7CiAgICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzMltpbmRleDJdOwogICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICJwYXJhZ3JhcGgiKSB7CiAgICAgICAgICBmaXJzdFBhcmFnaHJhcGggPSBzaWJsaW5nOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaXJzdFBhcmFnaHJhcGggPT09IG5vZGUyKSB7CiAgICAgICAgaGVhZDIudmFsdWUgPSBoZWFkMi52YWx1ZS5zbGljZSgxKTsKICAgICAgICBpZiAoaGVhZDIudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBub2RlMi5jaGlsZHJlbi5zaGlmdCgpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZTIucG9zaXRpb24gJiYgaGVhZDIucG9zaXRpb24gJiYgdHlwZW9mIGhlYWQyLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGhlYWQyLnBvc2l0aW9uLnN0YXJ0LmNvbHVtbisrOwogICAgICAgICAgaGVhZDIucG9zaXRpb24uc3RhcnQub2Zmc2V0Kys7CiAgICAgICAgICBub2RlMi5wb3NpdGlvbi5zdGFydCA9IE9iamVjdC5hc3NpZ24oe30sIGhlYWQyLnBvc2l0aW9uLnN0YXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBsaXN0SXRlbVdpdGhUYXNrTGlzdEl0ZW0obm9kZTIsIHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGhlYWQyID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgY29uc3QgY2hlY2thYmxlID0gdHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIiAmJiBoZWFkMiAmJiBoZWFkMi50eXBlID09PSAicGFyYWdyYXBoIjsKICBjb25zdCBjaGVja2JveCA9ICJbIiArIChub2RlMi5jaGVja2VkID8gIngiIDogIiAiKSArICJdICI7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBpZiAoY2hlY2thYmxlKSB7CiAgICB0cmFja2VyLm1vdmUoY2hlY2tib3gpOwogIH0KICBsZXQgdmFsdWUyID0gaGFuZGxlLmxpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTIsIHsKICAgIC4uLmluZm8sCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIGlmIChjaGVja2FibGUpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9eKD86WyorLV18XGQrXC4pKFtcclxuXXwgezEsM30pLywgY2hlY2spOwogIH0KICByZXR1cm4gdmFsdWUyOwogIGZ1bmN0aW9uIGNoZWNrKCQwKSB7CiAgICByZXR1cm4gJDAgKyBjaGVja2JveDsKICB9Cn0KdmFyIGluaXRfbGliMTcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFza19saXN0X2l0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm1AMy4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1Gcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbEZyb21NYXJrZG93bigpLAogICAgZ2ZtRm9vdG5vdGVGcm9tTWFya2Rvd24oKSwKICAgIGdmbVN0cmlrZXRocm91Z2hGcm9tTWFya2Rvd24oKSwKICAgIGdmbVRhYmxlRnJvbU1hcmtkb3duKCksCiAgICBnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24oKQogIF07Cn0KZnVuY3Rpb24gZ2ZtVG9NYXJrZG93bihvcHRpb25zKSB7CiAgcmV0dXJuIHsKICAgIGV4dGVuc2lvbnM6IFsKICAgICAgZ2ZtQXV0b2xpbmtMaXRlcmFsVG9NYXJrZG93bigpLAogICAgICBnZm1Gb290bm90ZVRvTWFya2Rvd24ob3B0aW9ucyksCiAgICAgIGdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duKCksCiAgICAgIGdmbVRhYmxlVG9NYXJrZG93bihvcHRpb25zKSwKICAgICAgZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93bigpCiAgICBdCiAgfTsKfQp2YXIgaW5pdF9saWIxOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9hdXRvbGlua19saXRlcmFsKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX2Zvb3Rub3RlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3N0cmlrZXRocm91Z2goKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFibGUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFza19saXN0X2l0ZW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jaHVua2VkQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaHVua2VkL2luZGV4LmpzCmZ1bmN0aW9uIHNwbGljZShsaXN0NSwgc3RhcnQsIHJlbW92ZTIsIGl0ZW1zKSB7CiAgY29uc3QgZW5kMyA9IGxpc3Q1Lmxlbmd0aDsKICBsZXQgY2h1bmtTdGFydCA9IDA7CiAgbGV0IHBhcmFtZXRlcnM7CiAgaWYgKHN0YXJ0IDwgMCkgewogICAgc3RhcnQgPSAtc3RhcnQgPiBlbmQzID8gMCA6IGVuZDMgKyBzdGFydDsKICB9IGVsc2UgewogICAgc3RhcnQgPSBzdGFydCA+IGVuZDMgPyBlbmQzIDogc3RhcnQ7CiAgfQogIHJlbW92ZTIgPSByZW1vdmUyID4gMCA/IHJlbW92ZTIgOiAwOwogIGlmIChpdGVtcy5sZW5ndGggPCAxZTQpIHsKICAgIHBhcmFtZXRlcnMgPSBBcnJheS5mcm9tKGl0ZW1zKTsKICAgIHBhcmFtZXRlcnMudW5zaGlmdChzdGFydCwgcmVtb3ZlMik7CiAgICBsaXN0NS5zcGxpY2UoLi4ucGFyYW1ldGVycyk7CiAgfSBlbHNlIHsKICAgIGlmIChyZW1vdmUyKSBsaXN0NS5zcGxpY2Uoc3RhcnQsIHJlbW92ZTIpOwogICAgd2hpbGUgKGNodW5rU3RhcnQgPCBpdGVtcy5sZW5ndGgpIHsKICAgICAgcGFyYW1ldGVycyA9IGl0ZW1zLnNsaWNlKGNodW5rU3RhcnQsIGNodW5rU3RhcnQgKyAxZTQpOwogICAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIDApOwogICAgICBsaXN0NS5zcGxpY2UoLi4ucGFyYW1ldGVycyk7CiAgICAgIGNodW5rU3RhcnQgKz0gMWU0OwogICAgICBzdGFydCArPSAxZTQ7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHB1c2gobGlzdDUsIGl0ZW1zKSB7CiAgaWYgKGxpc3Q1Lmxlbmd0aCA+IDApIHsKICAgIHNwbGljZShsaXN0NSwgbGlzdDUubGVuZ3RoLCAwLCBpdGVtcyk7CiAgICByZXR1cm4gbGlzdDU7CiAgfQogIHJldHVybiBpdGVtczsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2h1bmtlZEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnNAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcwpmdW5jdGlvbiBjb21iaW5lRXh0ZW5zaW9ucyhleHRlbnNpb25zKSB7CiAgY29uc3QgYWxsMyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb25zLmxlbmd0aCkgewogICAgc3ludGF4RXh0ZW5zaW9uKGFsbDMsIGV4dGVuc2lvbnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiBhbGwzOwp9CmZ1bmN0aW9uIHN5bnRheEV4dGVuc2lvbihhbGwzLCBleHRlbnNpb24yKSB7CiAgbGV0IGhvb2s7CiAgZm9yIChob29rIGluIGV4dGVuc2lvbjIpIHsKICAgIGNvbnN0IG1heWJlID0gaGFzT3duUHJvcGVydHkuY2FsbChhbGwzLCBob29rKSA/IGFsbDNbaG9va10gOiB2b2lkIDA7CiAgICBjb25zdCBsZWZ0ID0gbWF5YmUgfHwgKGFsbDNbaG9va10gPSB7fSk7CiAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJbaG9va107CiAgICBsZXQgY29kZTQ7CiAgICBpZiAocmlnaHQpIHsKICAgICAgZm9yIChjb2RlNCBpbiByaWdodCkgewogICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsZWZ0LCBjb2RlNCkpIGxlZnRbY29kZTRdID0gW107CiAgICAgICAgY29uc3QgdmFsdWUyID0gcmlnaHRbY29kZTRdOwogICAgICAgIGNvbnN0cnVjdHMoCiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYSBsaXN0LgogICAgICAgICAgbGVmdFtjb2RlNF0sCiAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMikgPyB2YWx1ZTIgOiB2YWx1ZTIgPyBbdmFsdWUyXSA6IFtdCiAgICAgICAgKTsKICAgICAgfQogICAgfQogIH0KfQpmdW5jdGlvbiBjb25zdHJ1Y3RzKGV4aXN0aW5nLCBsaXN0NSkgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBiZWZvcmUgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgIDsKICAgIChsaXN0NVtpbmRleDJdLmFkZCA9PT0gImFmdGVyIiA/IGV4aXN0aW5nIDogYmVmb3JlKS5wdXNoKGxpc3Q1W2luZGV4Ml0pOwogIH0KICBzcGxpY2UoZXhpc3RpbmcsIDAsIDAsIGJlZm9yZSk7Cn0KZnVuY3Rpb24gY29tYmluZUh0bWxFeHRlbnNpb25zKGh0bWxFeHRlbnNpb25zKSB7CiAgY29uc3QgaGFuZGxlcnMyID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGh0bWxFeHRlbnNpb25zLmxlbmd0aCkgewogICAgaHRtbEV4dGVuc2lvbihoYW5kbGVyczIsIGh0bWxFeHRlbnNpb25zW2luZGV4Ml0pOwogIH0KICByZXR1cm4gaGFuZGxlcnMyOwp9CmZ1bmN0aW9uIGh0bWxFeHRlbnNpb24oYWxsMywgZXh0ZW5zaW9uMikgewogIGxldCBob29rOwogIGZvciAoaG9vayBpbiBleHRlbnNpb24yKSB7CiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsMywgaG9vaykgPyBhbGwzW2hvb2tdIDogdm9pZCAwOwogICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGwzW2hvb2tdID0ge30pOwogICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2hvb2tdOwogICAgbGV0IHR5cGU1OwogICAgaWYgKHJpZ2h0KSB7CiAgICAgIGZvciAodHlwZTUgaW4gcmlnaHQpIHsKICAgICAgICBsZWZ0W3R5cGU1XSA9IHJpZ2h0W3R5cGU1XTsKICAgICAgfQogICAgfQogIH0KfQp2YXIgaGFzT3duUHJvcGVydHk7CnZhciBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9uc0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWwoKSB7CiAgcmV0dXJuIHsKICAgIHRleHQ6IHRleHQyCiAgfTsKfQpmdW5jdGlvbiB0b2tlbml6ZUVtYWlsQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGRvdDsKICBsZXQgZGF0YTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghZ2ZtQXRleHQoY29kZTQpIHx8ICFwcmV2aW91c0VtYWlsLmNhbGwoc2VsZjIsIHNlbGYyLnByZXZpb3VzKSB8fCBwcmV2aW91c1VuYmFsYW5jZWQoc2VsZjIuZXZlbnRzKSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpOwogICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rRW1haWwiKTsKICAgIHJldHVybiBhdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoZ2ZtQXRleHQoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBhdGV4dDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsRG9tYWluOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsRG9tYWluKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGVtYWlsRG9tYWluRG90VHJhaWwsIGVtYWlsRG9tYWluQWZ0ZXIsIGVtYWlsRG9tYWluRG90KShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxEb21haW5Eb3QoY29kZTQpIHsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBkb3QgPSB0cnVlOwogICAgcmV0dXJuIGVtYWlsRG9tYWluOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KSB7CiAgICBpZiAoZGF0YSAmJiBkb3QgJiYgYXNjaWlBbHBoYShzZWxmMi5wcmV2aW91cykpIHsKICAgICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmtFbWFpbCIpOwogICAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVd3d0F1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiB3d3dTdGFydDsKICBmdW5jdGlvbiB3d3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ICE9PSA4NyAmJiBjb2RlNCAhPT0gMTE5IHx8ICFwcmV2aW91c1d3dy5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgfHwgcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua1d3dyIpOwogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sod3d3UHJlZml4LCBlZmZlY3RzLmF0dGVtcHQoZG9tYWluLCBlZmZlY3RzLmF0dGVtcHQocGF0aCwgd3d3QWZ0ZXIpLCBub2spLCBub2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd3d3QWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rV3d3Iik7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUHJvdG9jb2xBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgYnVmZmVyMiA9ICIiOwogIGxldCBzZWVuID0gZmFsc2U7CiAgcmV0dXJuIHByb3RvY29sU3RhcnQ7CiAgZnVuY3Rpb24gcHJvdG9jb2xTdGFydChjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gNzIgfHwgY29kZTQgPT09IDEwNCkgJiYgcHJldmlvdXNQcm90b2NvbC5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgJiYgIXByZXZpb3VzVW5iYWxhbmNlZChzZWxmMi5ldmVudHMpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpOwogICAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmtIdHRwIik7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xQcmVmaXhJbnNpZGUoY29kZTQpIHsKICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSAmJiBidWZmZXIyLmxlbmd0aCA8IDUpIHsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlNCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwcm90b2NvbFByZWZpeEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgY29uc3QgcHJvdG9jb2wgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmIChwcm90b2NvbCA9PT0gImh0dHAiIHx8IHByb3RvY29sID09PSAiaHR0cHMiKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gcHJvdG9jb2xTbGFzaGVzSW5zaWRlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xTbGFzaGVzSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGlmIChzZWVuKSB7CiAgICAgICAgcmV0dXJuIGFmdGVyUHJvdG9jb2w7CiAgICAgIH0KICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBwcm90b2NvbFNsYXNoZXNJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJQcm90b2NvbChjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IGFzY2lpQ29udHJvbChjb2RlNCkgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpIHx8IHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkgPyBub2soY29kZTQpIDogZWZmZWN0cy5hdHRlbXB0KGRvbWFpbiwgZWZmZWN0cy5hdHRlbXB0KHBhdGgsIHByb3RvY29sQWZ0ZXIpLCBub2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xBZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmtIdHRwIik7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplV3d3UHJlZml4KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiB3d3dQcmVmaXhJbnNpZGU7CiAgZnVuY3Rpb24gd3d3UHJlZml4SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoKGNvZGU0ID09PSA4NyB8fCBjb2RlNCA9PT0gMTE5KSAmJiBzaXplIDwgMykgewogICAgICBzaXplKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB3d3dQcmVmaXhJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ2ICYmIHNpemUgPT09IDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHd3d1ByZWZpeEFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHd3d1ByZWZpeEFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEb21haW4oZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQ7CiAgbGV0IHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudDsKICBsZXQgc2VlbjsKICByZXR1cm4gZG9tYWluSW5zaWRlOwogIGZ1bmN0aW9uIGRvbWFpbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gOTUpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sodHJhaWwsIGRvbWFpbkFmdGVyLCBkb21haW5BdFB1bmN0dWF0aW9uKShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpIHx8IGNvZGU0ICE9PSA0NSAmJiB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpKSB7CiAgICAgIHJldHVybiBkb21haW5BZnRlcihjb2RlNCk7CiAgICB9CiAgICBzZWVuID0gdHJ1ZTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZG9tYWluSW5zaWRlOwogIH0KICBmdW5jdGlvbiBkb21haW5BdFB1bmN0dWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk1KSB7CiAgICAgIHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50ID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudCA9IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50OwogICAgICB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCA9IHZvaWQgMDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZG9tYWluSW5zaWRlOwogIH0KICBmdW5jdGlvbiBkb21haW5BZnRlcihjb2RlNCkgewogICAgaWYgKHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudCB8fCB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCB8fCAhc2VlbikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVBhdGgoZWZmZWN0cywgb2szKSB7CiAgbGV0IHNpemVPcGVuID0gMDsKICBsZXQgc2l6ZUNsb3NlID0gMDsKICByZXR1cm4gcGF0aEluc2lkZTsKICBmdW5jdGlvbiBwYXRoSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQwKSB7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwYXRoSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0MSAmJiBzaXplQ2xvc2UgPCBzaXplT3BlbikgewogICAgICByZXR1cm4gcGF0aEF0UHVuY3R1YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzMyB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM4IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA0NCB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA1OSB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYzIHx8IGNvZGU0ID09PSA5MyB8fCBjb2RlNCA9PT0gOTUgfHwgY29kZTQgPT09IDEyNikgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh0cmFpbCwgb2szLCBwYXRoQXRQdW5jdHVhdGlvbikoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gcGF0aEluc2lkZTsKICB9CiAgZnVuY3Rpb24gcGF0aEF0UHVuY3R1YXRpb24oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgc2l6ZUNsb3NlKys7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplVHJhaWwoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gdHJhaWwyOwogIGZ1bmN0aW9uIHRyYWlsMihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMyB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0MSB8fCBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ0IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDU5IHx8IGNvZGU0ID09PSA2MyB8fCBjb2RlNCA9PT0gOTUgfHwgY29kZTQgPT09IDEyNikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWwyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzOCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VTdGFydDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsQnJhY2tldEFmdGVyOwogICAgfQogICAgaWYgKAogICAgICAvLyBgPGAgaXMgYW4gZW5kLgogICAgICBjb2RlNCA9PT0gNjAgfHwgLy8gU28gaXMgd2hpdGVzcGFjZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxCcmFja2V0QWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiB0cmFpbDIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYXNjaWlBbHBoYShjb2RlNCkgPyB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWwyOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUVtYWlsRG9tYWluRG90VHJhaWwoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gYWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHByZXZpb3VzV3d3KGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0MCB8fCBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgfHwgY29kZTQgPT09IDEyNiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c1Byb3RvY29sKGNvZGU0KSB7CiAgcmV0dXJuICFhc2NpaUFscGhhKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c0VtYWlsKGNvZGU0KSB7CiAgcmV0dXJuICEoY29kZTQgPT09IDQ3IHx8IGdmbUF0ZXh0KGNvZGU0KSk7Cn0KZnVuY3Rpb24gZ2ZtQXRleHQoY29kZTQpIHsKICByZXR1cm4gY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c1VuYmFsYW5jZWQoZXZlbnRzKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IHJlc3VsdCA9IGZhbHNlOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmICgodG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsSW1hZ2UiKSAmJiAhdG9rZW4uX2JhbGFuY2VkKSB7CiAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHRva2VuLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvKSB7CiAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICBicmVhazsKICAgIH0KICB9CiAgaWYgKGV2ZW50cy5sZW5ndGggPiAwICYmICFyZXN1bHQpIHsKICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uX2dmbUF1dG9saW5rTGl0ZXJhbFdhbGtlZEludG8gPSB0cnVlOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CnZhciB3d3dQcmVmaXgsIGRvbWFpbiwgcGF0aCwgdHJhaWwsIGVtYWlsRG9tYWluRG90VHJhaWwsIHd3d0F1dG9saW5rLCBwcm90b2NvbEF1dG9saW5rLCBlbWFpbEF1dG9saW5rLCB0ZXh0MiwgY29kZTI7CnZhciBpbml0X3N5bnRheCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgd3d3UHJlZml4ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVXd3dQcmVmaXgsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBkb21haW4gPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZURvbWFpbiwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIHBhdGggPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVBhdGgsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICB0cmFpbCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplVHJhaWwsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBlbWFpbERvbWFpbkRvdFRyYWlsID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVFbWFpbERvbWFpbkRvdFRyYWlsLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgd3d3QXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJ3d3dBdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVd3d0F1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNXd3cKICAgIH07CiAgICBwcm90b2NvbEF1dG9saW5rID0gewogICAgICBuYW1lOiAicHJvdG9jb2xBdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVByb3RvY29sQXV0b2xpbmssCiAgICAgIHByZXZpb3VzOiBwcmV2aW91c1Byb3RvY29sCiAgICB9OwogICAgZW1haWxBdXRvbGluayA9IHsKICAgICAgbmFtZTogImVtYWlsQXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVFbWFpbEF1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNFbWFpbAogICAgfTsKICAgIHRleHQyID0ge307CiAgICBjb2RlMiA9IDQ4OwogICAgd2hpbGUgKGNvZGUyIDwgMTIzKSB7CiAgICAgIHRleHQyW2NvZGUyXSA9IGVtYWlsQXV0b2xpbms7CiAgICAgIGNvZGUyKys7CiAgICAgIGlmIChjb2RlMiA9PT0gNTgpIGNvZGUyID0gNjU7CiAgICAgIGVsc2UgaWYgKGNvZGUyID09PSA5MSkgY29kZTIgPSA5NzsKICAgIH0KICAgIHRleHQyWzQzXSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls0NV0gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNDZdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzk1XSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls3Ml0gPSBbZW1haWxBdXRvbGluaywgcHJvdG9jb2xBdXRvbGlua107CiAgICB0ZXh0MlsxMDRdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdOwogICAgdGV4dDJbODddID0gW2VtYWlsQXV0b2xpbmssIHd3d0F1dG9saW5rXTsKICAgIHRleHQyWzExOV0gPSBbZW1haWxBdXRvbGluaywgd3d3QXV0b2xpbmtdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1lbmNvZGUvaW5kZXguanMKZnVuY3Rpb24gZW5jb2RlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvWyImPD5dL2csIHJlcGxhY2U1KTsKICBmdW5jdGlvbiByZXBsYWNlNSh2YWx1ZTMpIHsKICAgIHJldHVybiAiJiIgKyBjaGFyYWN0ZXJSZWZlcmVuY2VzWwogICAgICAvKiogQHR5cGUge2tleW9mIHR5cGVvZiBjaGFyYWN0ZXJSZWZlcmVuY2VzfSAqLwogICAgICB2YWx1ZTMKICAgIF0gKyAiOyI7CiAgfQp9CnZhciBjaGFyYWN0ZXJSZWZlcmVuY2VzOwp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9lbmNvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1lbmNvZGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWVuY29kZS9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJSZWZlcmVuY2VzID0geyAnIic6ICJxdW90IiwgIiYiOiAiYW1wIiwgIjwiOiAibHQiLCAiPiI6ICJndCIgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpL2luZGV4LmpzCmZ1bmN0aW9uIHNhbml0aXplVXJpKHVybCwgcHJvdG9jb2wpIHsKICBjb25zdCB2YWx1ZTIgPSBlbmNvZGUobm9ybWFsaXplVXJpKHVybCB8fCAiIikpOwogIGlmICghcHJvdG9jb2wpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGNvbnN0IGNvbG9uID0gdmFsdWUyLmluZGV4T2YoIjoiKTsKICBjb25zdCBxdWVzdGlvbk1hcmsgPSB2YWx1ZTIuaW5kZXhPZigiPyIpOwogIGNvbnN0IG51bWJlclNpZ24gPSB2YWx1ZTIuaW5kZXhPZigiIyIpOwogIGNvbnN0IHNsYXNoID0gdmFsdWUyLmluZGV4T2YoIi8iKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZSBpcyBubyBwcm90b2NvbCwgaXTigJlzIHJlbGF0aXZlLgogICAgY29sb24gPCAwIHx8IC8vIElmIHRoZSBmaXJzdCBjb2xvbiBpcyBhZnRlciBhIGA/YCwgYCNgLCBvciBgL2AsIGl04oCZcyBub3QgYSBwcm90b2NvbC4KICAgIHNsYXNoID4gLTEgJiYgY29sb24gPiBzbGFzaCB8fCBxdWVzdGlvbk1hcmsgPiAtMSAmJiBjb2xvbiA+IHF1ZXN0aW9uTWFyayB8fCBudW1iZXJTaWduID4gLTEgJiYgY29sb24gPiBudW1iZXJTaWduIHx8IC8vIEl0IGlzIGEgcHJvdG9jb2wsIGl0IHNob3VsZCBiZSBhbGxvd2VkLgogICAgcHJvdG9jb2wudGVzdCh2YWx1ZTIuc2xpY2UoMCwgY29sb24pKQogICkgewogICAgcmV0dXJuIHZhbHVlMjsKICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVVyaSh2YWx1ZTIpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgc2tpcDIgPSAwOwogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlMi5sZW5ndGgpIHsKICAgIGNvbnN0IGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICAgIGxldCByZXBsYWNlNSA9ICIiOwogICAgaWYgKGNvZGU0ID09PSAzNyAmJiBhc2NpaUFscGhhbnVtZXJpYyh2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIgKyAxKSkgJiYgYXNjaWlBbHBoYW51bWVyaWModmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMikpKSB7CiAgICAgIHNraXAyID0gMjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPCAxMjgpIHsKICAgICAgaWYgKCEvWyEjJCYtOz0/LVpfYS16fl0vLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCkpKSB7CiAgICAgICAgcmVwbGFjZTUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb2RlNCA+IDU1Mjk1ICYmIGNvZGU0IDwgNTczNDQpIHsKICAgICAgY29uc3QgbmV4dDIgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIgKyAxKTsKICAgICAgaWYgKGNvZGU0IDwgNTYzMjAgJiYgbmV4dDIgPiA1NjMxOSAmJiBuZXh0MiA8IDU3MzQ0KSB7CiAgICAgICAgcmVwbGFjZTUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0LCBuZXh0Mik7CiAgICAgICAgc2tpcDIgPSAxOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcGxhY2U1ID0gIlx1RkZGRCI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICB9CiAgICBpZiAocmVwbGFjZTUpIHsKICAgICAgcmVzdWx0LnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0LCBpbmRleDIpLCBlbmNvZGVVUklDb21wb25lbnQocmVwbGFjZTUpKTsKICAgICAgc3RhcnQgPSBpbmRleDIgKyBza2lwMiArIDE7CiAgICAgIHJlcGxhY2U1ID0gIiI7CiAgICB9CiAgICBpZiAoc2tpcDIpIHsKICAgICAgaW5kZXgyICs9IHNraXAyOwogICAgICBza2lwMiA9IDA7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQuam9pbigiIikgKyB2YWx1ZTIuc2xpY2Uoc3RhcnQpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2VuY29kZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaHRtbC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsLAogICAgICBsaXRlcmFsQXV0b2xpbmtIdHRwLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3cKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua1d3dyh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuLCAiaHR0cDovLyIpOwp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua0VtYWlsKHRva2VuKSB7CiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4sICJtYWlsdG86Iik7Cn0KZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rSHR0cCh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBhbmNob3JGcm9tVG9rZW4odG9rZW4sIHByb3RvY29sKSB7CiAgY29uc3QgdXJsID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgdGhpcy50YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSgocHJvdG9jb2wgfHwgIiIpICsgdXJsKSArICciPicpOwogIHRoaXMucmF3KHRoaXMuZW5jb2RlKHVybCkpOwogIHRoaXMudGFnKCI8L2E+Iik7Cn0KdmFyIGluaXRfaHRtbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2F1dG9saW5rX2xpdGVyYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3ludGF4KCk7CiAgICBpbml0X2h0bWwyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwvaW5kZXguanMKZnVuY3Rpb24gcmVzb2x2ZUFsbChjb25zdHJ1Y3RzMiwgZXZlbnRzLCBjb250ZXh0MikgewogIGNvbnN0IGNhbGxlZCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBjb25zdHJ1Y3RzMi5sZW5ndGgpIHsKICAgIGNvbnN0IHJlc29sdmUyID0gY29uc3RydWN0czJbaW5kZXgyXS5yZXNvbHZlQWxsOwogICAgaWYgKHJlc29sdmUyICYmICFjYWxsZWQuaW5jbHVkZXMocmVzb2x2ZTIpKSB7CiAgICAgIGV2ZW50cyA9IHJlc29sdmUyKGV2ZW50cywgY29udGV4dDIpOwogICAgICBjYWxsZWQucHVzaChyZXNvbHZlMik7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXR0ZW50aW9uLmpzCmZ1bmN0aW9uIHJlc29sdmVBbGxBdHRlbnRpb24oZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgb3BlbjsKICBsZXQgZ3JvdXA7CiAgbGV0IHRleHQ5OwogIGxldCBvcGVuaW5nU2VxdWVuY2U7CiAgbGV0IGNsb3NpbmdTZXF1ZW5jZTsKICBsZXQgdXNlOwogIGxldCBuZXh0RXZlbnRzOwogIGxldCBvZmZzZXQ7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIgJiYgZXZlbnRzW2luZGV4Ml1bMV0uX2Nsb3NlKSB7CiAgICAgIG9wZW4gPSBpbmRleDI7CiAgICAgIHdoaWxlIChvcGVuLS0pIHsKICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzBdID09PSAiZXhpdCIgJiYgZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIgJiYgZXZlbnRzW29wZW5dWzFdLl9vcGVuICYmIC8vIElmIHRoZSBtYXJrZXJzIGFyZSB0aGUgc2FtZToKICAgICAgICBjb250ZXh0Mi5zbGljZVNlcmlhbGl6ZShldmVudHNbb3Blbl1bMV0pLmNoYXJDb2RlQXQoMCkgPT09IGNvbnRleHQyLnNsaWNlU2VyaWFsaXplKGV2ZW50c1tpbmRleDJdWzFdKS5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICBpZiAoKGV2ZW50c1tvcGVuXVsxXS5fY2xvc2UgfHwgZXZlbnRzW2luZGV4Ml1bMV0uX29wZW4pICYmIChldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0KSAlIDMgJiYgISgoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ICsgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCkgJSAzKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHVzZSA9IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCA+IDEgJiYgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA+IDEgPyAyIDogMTsKICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gewogICAgICAgICAgICAuLi5ldmVudHNbb3Blbl1bMV0uZW5kCiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgZW5kMyA9IHsKICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgIH07CiAgICAgICAgICBtb3ZlUG9pbnQoc3RhcnQsIC11c2UpOwogICAgICAgICAgbW92ZVBvaW50KGVuZDMsIHVzZSk7CiAgICAgICAgICBvcGVuaW5nU2VxdWVuY2UgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nU2VxdWVuY2UiIDogImVtcGhhc2lzU2VxdWVuY2UiLAogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgY2xvc2luZ1NlcXVlbmNlID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZ1NlcXVlbmNlIiA6ICJlbXBoYXNpc1NlcXVlbmNlIiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbaW5kZXgyXVsxXS5zdGFydAogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IGVuZDMKICAgICAgICAgIH07CiAgICAgICAgICB0ZXh0OSA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmdUZXh0IiA6ICJlbXBoYXNpc1RleHQiLAogICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGdyb3VwID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZyIgOiAiZW1waGFzaXMiLAogICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgIC4uLm9wZW5pbmdTZXF1ZW5jZS5zdGFydAogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICAuLi5jbG9zaW5nU2VxdWVuY2UuZW5kCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBldmVudHNbb3Blbl1bMV0uZW5kID0gewogICAgICAgICAgICAuLi5vcGVuaW5nU2VxdWVuY2Uuc3RhcnQKICAgICAgICAgIH07CiAgICAgICAgICBldmVudHNbaW5kZXgyXVsxXS5zdGFydCA9IHsKICAgICAgICAgICAgLi4uY2xvc2luZ1NlcXVlbmNlLmVuZAogICAgICAgICAgfTsKICAgICAgICAgIG5leHRFdmVudHMgPSBbXTsKICAgICAgICAgIGlmIChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQpIHsKICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZW50ZXIiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml1dKTsKICAgICAgICAgIH0KICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZ3JvdXAsIGNvbnRleHQyXSwgWyJlbnRlciIsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImV4aXQiLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml1dKTsKICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIHJlc29sdmVBbGwoY29udGV4dDIucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4MiksIGNvbnRleHQyKSk7CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgWyJlbnRlciIsIGNsb3NpbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImV4aXQiLCBjbG9zaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0IiwgZ3JvdXAsIGNvbnRleHQyXV0pOwogICAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQpIHsKICAgICAgICAgICAgb2Zmc2V0ID0gMjsKICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZW50ZXIiLCBldmVudHNbaW5kZXgyXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbaW5kZXgyXVsxXSwgY29udGV4dDJdXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgICAgfQogICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4MiAtIG9wZW4gKyAzLCBuZXh0RXZlbnRzKTsKICAgICAgICAgIGluZGV4MiA9IG9wZW4gKyBuZXh0RXZlbnRzLmxlbmd0aCAtIG9mZnNldCAtIDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIpIHsKICAgICAgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9ICJkYXRhIjsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUF0dGVudGlvbihlZmZlY3RzLCBvazMpIHsKICBjb25zdCBhdHRlbnRpb25NYXJrZXJzMiA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsOwogIGNvbnN0IHByZXZpb3VzMyA9IHRoaXMucHJldmlvdXM7CiAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMzKTsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgbWFya2VyID0gY29kZTQ7CiAgICBlZmZlY3RzLmVudGVyKCJhdHRlbnRpb25TZXF1ZW5jZSIpOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc2lkZTsKICAgIH0KICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpOwogICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCk7CiAgICBjb25zdCBvcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIGJlZm9yZSB8fCBhdHRlbnRpb25NYXJrZXJzMi5pbmNsdWRlcyhjb2RlNCk7CiAgICBjb25zdCBjbG9zZTcgPSAhYmVmb3JlIHx8IGJlZm9yZSA9PT0gMiAmJiBhZnRlciB8fCBhdHRlbnRpb25NYXJrZXJzMi5pbmNsdWRlcyhwcmV2aW91czMpOwogICAgdG9rZW4uX29wZW4gPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBvcGVuIDogb3BlbiAmJiAoYmVmb3JlIHx8ICFjbG9zZTcpKTsKICAgIHRva2VuLl9jbG9zZSA9IEJvb2xlYW4obWFya2VyID09PSA0MiA/IGNsb3NlNyA6IGNsb3NlNyAmJiAoYWZ0ZXIgfHwgIW9wZW4pKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBtb3ZlUG9pbnQocG9pbnQ0LCBvZmZzZXQpIHsKICBwb2ludDQuY29sdW1uICs9IG9mZnNldDsKICBwb2ludDQub2Zmc2V0ICs9IG9mZnNldDsKICBwb2ludDQuX2J1ZmZlckluZGV4ICs9IG9mZnNldDsKfQp2YXIgYXR0ZW50aW9uOwp2YXIgaW5pdF9hdHRlbnRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdHRlbnRpb24uanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9yZXNvbHZlX2FsbCgpOwogICAgYXR0ZW50aW9uID0gewogICAgICBuYW1lOiAiYXR0ZW50aW9uIiwKICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbEF0dGVudGlvbiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQXR0ZW50aW9uCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXV0b2xpbmsuanMKZnVuY3Rpb24gdG9rZW5pemVBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rIik7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua01hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rUHJvdG9jb2wiKTsKICAgIHJldHVybiBvcGVuOwogIH0KICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNjaGVtZU9yRW1haWxBdGV4dDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNjaGVtZU9yRW1haWxBdGV4dChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBzaXplID0gMTsKICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplID0gMDsKICAgICAgcmV0dXJuIHVybEluc2lkZTsKICAgIH0KICAgIGlmICgoY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSAmJiBzaXplKysgPCAzMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0OwogICAgfQogICAgc2l6ZSA9IDA7CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHVybEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA2MCB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB1cmxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3Q7CiAgICB9CiAgICBpZiAoYXNjaWlBdGV4dChjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsQXRleHQ7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxBdFNpZ25PckRvdChjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSA/IGVtYWlsTGFiZWwoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxMYWJlbChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplID0gMDsKICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3Q7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLnR5cGUgPSAiYXV0b2xpbmtFbWFpbCI7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGluayIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIGVtYWlsVmFsdWUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbFZhbHVlKGNvZGU0KSB7CiAgICBpZiAoKGNvZGU0ID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpICYmIHNpemUrKyA8IDYzKSB7CiAgICAgIGNvbnN0IG5leHQyID0gY29kZTQgPT09IDQ1ID8gZW1haWxWYWx1ZSA6IGVtYWlsTGFiZWw7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBuZXh0MjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgYXV0b2xpbms7CnZhciBpbml0X2F1dG9saW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXV0b2xpbmsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGF1dG9saW5rID0gewogICAgICBuYW1lOiAiYXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVBdXRvbGluawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1zcGFjZS9pbmRleC5qcwpmdW5jdGlvbiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCB0eXBlNSwgbWF4MykgewogIGNvbnN0IGxpbWl0ID0gbWF4MyA/IG1heDMgLSAxIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgICAgcmV0dXJuIHByZWZpeDQoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByZWZpeDQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSAmJiBzaXplKysgPCBsaW1pdCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJlZml4NDsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1zcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2JsYW5rLWxpbmUuanMKZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgImxpbmVQcmVmaXgiKShjb2RlNCkgOiBhZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQp2YXIgYmxhbmtMaW5lOwp2YXIgaW5pdF9ibGFua19saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxhbmstbGluZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgYmxhbmtMaW5lID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibG9jay1xdW90ZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgY29uc3Qgc3RhdGUxMiA9IHNlbGYyLmNvbnRhaW5lclN0YXRlOwogICAgICBpZiAoIXN0YXRlMTIub3BlbikgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGUiLCB7CiAgICAgICAgICBfY29udGFpbmVyOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgc3RhdGUxMi5vcGVuID0gdHJ1ZTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlTWFya2VyIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKTsKICAgICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUJsb2NrUXVvdGVDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGNvbnRTdGFydDsKICBmdW5jdGlvbiBjb250U3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGNvbnRCZWZvcmUsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBjb250QmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udEJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChibG9ja1F1b3RlLCBvazMsIG5vaykoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBleGl0MihlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlIik7Cn0KdmFyIGJsb2NrUXVvdGU7CnZhciBpbml0X2Jsb2NrX3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxvY2stcXVvdGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGJsb2NrUXVvdGUgPSB7CiAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVDb250aW51YXRpb24KICAgICAgfSwKICAgICAgZXhpdDogZXhpdDIsCiAgICAgIG5hbWU6ICJibG9ja1F1b3RlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZVN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLWVzY2FwZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIik7CiAgICBlZmZlY3RzLmVudGVyKCJlc2NhcGVNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImVzY2FwZU1hcmtlciIpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlckVzY2FwZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBjaGFyYWN0ZXJFc2NhcGU7CnZhciBpbml0X2NoYXJhY3Rlcl9lc2NhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjaGFyYWN0ZXJFc2NhcGUgPSB7CiAgICAgIG5hbWU6ICJjaGFyYWN0ZXJFc2NhcGUiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDaGFyYWN0ZXJFc2NhcGUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIHRva2VuaXplQ2hhcmFjdGVyUmVmZXJlbmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplID0gMDsKICBsZXQgbWF4MzsKICBsZXQgdGVzdDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZSIpOwogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKTsKICAgIHJldHVybiBvcGVuOwogIH0KICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIik7CiAgICAgIHJldHVybiBudW1lcmljOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgIG1heDMgPSAzMTsKICAgIHRlc3QgPSBhc2NpaUFscGhhbnVtZXJpYzsKICAgIHJldHVybiB2YWx1ZTIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBudW1lcmljKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDg4IHx8IGNvZGU0ID09PSAxMjApIHsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpOwogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgICBtYXgzID0gNjsKICAgICAgdGVzdCA9IGFzY2lpSGV4RGlnaXQ7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgbWF4MyA9IDc7CiAgICB0ZXN0ID0gYXNjaWlEaWdpdDsKICAgIHJldHVybiB2YWx1ZTIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB2YWx1ZTIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTkgJiYgc2l6ZSkgewogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgICAgaWYgKHRlc3QgPT09IGFzY2lpQWxwaGFudW1lcmljICYmICFkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAodGVzdChjb2RlNCkgJiYgc2l6ZSsrIDwgbWF4MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBjaGFyYWN0ZXJSZWZlcmVuY2U7CnZhciBpbml0X2NoYXJhY3Rlcl9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfaW5kZXhfZG9tKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY2hhcmFjdGVyUmVmZXJlbmNlID0gewogICAgICBuYW1lOiAiY2hhcmFjdGVyUmVmZXJlbmNlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyUmVmZXJlbmNlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1mZW5jZWQuanMKZnVuY3Rpb24gdG9rZW5pemVDb2RlRmVuY2VkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGNsb3NlU3RhcnQgPSB7CiAgICBwYXJ0aWFsOiB0cnVlLAogICAgdG9rZW5pemU6IHRva2VuaXplQ2xvc2VTdGFydAogIH07CiAgbGV0IGluaXRpYWxQcmVmaXggPSAwOwogIGxldCBzaXplT3BlbiA9IDA7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgaW5pdGlhbFByZWZpeCA9IHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgPyB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA6IDA7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWQiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47CiAgICB9CiAgICBpZiAoc2l6ZU9wZW4gPCAzKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGluZm9CZWZvcmUsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogaW5mb0JlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluZm9CZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uLCBhdE5vbkxhenlCcmVhaywgYWZ0ZXIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGluZm8oY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbmZvKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpOwogICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBtZXRhQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYgJiYgY29kZTQgPT09IG1hcmtlcikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5mbzsKICB9CiAgZnVuY3Rpb24gbWV0YUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gbWV0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG1ldGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIik7CiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYgJiYgY29kZTQgPT09IG1hcmtlcikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gbWV0YTsKICB9CiAgZnVuY3Rpb24gYXROb25MYXp5QnJlYWsoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY2xvc2VTdGFydCwgYWZ0ZXIsIGNvbnRlbnRCZWZvcmUpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGVudEJlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGNvbnRlbnRTdGFydDsKICB9CiAgZnVuY3Rpb24gY29udGVudFN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gaW5pdGlhbFByZWZpeCA+IDAgJiYgbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYmVmb3JlQ29udGVudENodW5rLCAibGluZVByZWZpeCIsIGluaXRpYWxQcmVmaXggKyAxKShjb2RlNCkgOiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZsb3dWYWx1ZSIpOwogICAgcmV0dXJuIGNvbnRlbnRDaHVuayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRDaHVuayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmxvd1ZhbHVlIik7CiAgICAgIHJldHVybiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250ZW50Q2h1bms7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWQiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NlU3RhcnQoZWZmZWN0czIsIG9rNCwgbm9rMikgewogICAgbGV0IHNpemUgPSAwOwogICAgcmV0dXJuIHN0YXJ0QmVmb3JlOwogICAgZnVuY3Rpb24gc3RhcnRCZWZvcmUoY29kZTQpIHsKICAgICAgZWZmZWN0czIuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0czIuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMyLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIHN0YXJ0MjsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0Mihjb2RlNCkgewogICAgICBlZmZlY3RzMi5lbnRlcigiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzMiwgYmVmb3JlU2VxdWVuY2VDbG9zZSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpIDogYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgICAgZWZmZWN0czIuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2UoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgICBzaXplKys7CiAgICAgICAgZWZmZWN0czIuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2U7CiAgICAgIH0KICAgICAgaWYgKHNpemUgPj0gc2l6ZU9wZW4pIHsKICAgICAgICBlZmZlY3RzMi5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzMiwgc2VxdWVuY2VDbG9zZUFmdGVyLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vazIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZUFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0czIuZXhpdCgiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgICAgcmV0dXJuIG9rNChjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vazIoY29kZTQpOwogICAgfQogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gbGluZVN0YXJ0OwogIH0KICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQp2YXIgbm9uTGF6eUNvbnRpbnVhdGlvbiwgY29kZUZlbmNlZDsKdmFyIGluaXRfY29kZV9mZW5jZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWZlbmNlZC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgbm9uTGF6eUNvbnRpbnVhdGlvbiA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvbgogICAgfTsKICAgIGNvZGVGZW5jZWQgPSB7CiAgICAgIGNvbmNyZXRlOiB0cnVlLAogICAgICBuYW1lOiAiY29kZUZlbmNlZCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVGZW5jZWQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWluZGVudGVkLmpzCmZ1bmN0aW9uIHRva2VuaXplQ29kZUluZGVudGVkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY29kZUluZGVudGVkIik7CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAibGluZVByZWZpeCIsIDQgKyAxKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQgPyBhdEJyZWFrKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gYWZ0ZXIoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChmdXJ0aGVyU3RhcnQsIGF0QnJlYWssIGFmdGVyKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmxvd1ZhbHVlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGbG93VmFsdWUiKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNvZGVJbmRlbnRlZCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRnVydGhlclN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBmdXJ0aGVyU3RhcnQyOwogIGZ1bmN0aW9uIGZ1cnRoZXJTdGFydDIoY29kZTQpIHsKICAgIGlmIChzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBmdXJ0aGVyU3RhcnQyOwogICAgfQogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCA0ICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0ID8gb2szKGNvZGU0KSA6IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBmdXJ0aGVyU3RhcnQyKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBjb2RlSW5kZW50ZWQsIGZ1cnRoZXJTdGFydDsKdmFyIGluaXRfY29kZV9pbmRlbnRlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtaW5kZW50ZWQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvZGVJbmRlbnRlZCA9IHsKICAgICAgbmFtZTogImNvZGVJbmRlbnRlZCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVJbmRlbnRlZAogICAgfTsKICAgIGZ1cnRoZXJTdGFydCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplRnVydGhlclN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzCmZ1bmN0aW9uIHJlc29sdmVDb2RlVGV4dChldmVudHMpIHsKICBsZXQgdGFpbEV4aXRJbmRleCA9IGV2ZW50cy5sZW5ndGggLSA0OwogIGxldCBoZWFkRW50ZXJJbmRleCA9IDM7CiAgbGV0IGluZGV4MjsKICBsZXQgZW50ZXI7CiAgaWYgKChldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICJzcGFjZSIpICYmIChldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID09PSAic3BhY2UiKSkgewogICAgaW5kZXgyID0gaGVhZEVudGVySW5kZXg7CiAgICB3aGlsZSAoKytpbmRleDIgPCB0YWlsRXhpdEluZGV4KSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiY29kZVRleHREYXRhIikgewogICAgICAgIGV2ZW50c1toZWFkRW50ZXJJbmRleF1bMV0udHlwZSA9ICJjb2RlVGV4dFBhZGRpbmciOwogICAgICAgIGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID0gImNvZGVUZXh0UGFkZGluZyI7CiAgICAgICAgaGVhZEVudGVySW5kZXggKz0gMjsKICAgICAgICB0YWlsRXhpdEluZGV4IC09IDI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgaW5kZXgyID0gaGVhZEVudGVySW5kZXggLSAxOwogIHRhaWxFeGl0SW5kZXgrKzsKICB3aGlsZSAoKytpbmRleDIgPD0gdGFpbEV4aXRJbmRleCkgewogICAgaWYgKGVudGVyID09PSB2b2lkIDApIHsKICAgICAgaWYgKGluZGV4MiAhPT0gdGFpbEV4aXRJbmRleCAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAibGluZUVuZGluZyIpIHsKICAgICAgICBlbnRlciA9IGluZGV4MjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpbmRleDIgPT09IHRhaWxFeGl0SW5kZXggfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciKSB7CiAgICAgIGV2ZW50c1tlbnRlcl1bMV0udHlwZSA9ICJjb2RlVGV4dERhdGEiOwogICAgICBpZiAoaW5kZXgyICE9PSBlbnRlciArIDIpIHsKICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleDIgLSAxXVsxXS5lbmQ7CiAgICAgICAgZXZlbnRzLnNwbGljZShlbnRlciArIDIsIGluZGV4MiAtIGVudGVyIC0gMik7CiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSBpbmRleDIgLSBlbnRlciAtIDI7CiAgICAgICAgaW5kZXgyID0gZW50ZXIgKyAyOwogICAgICB9CiAgICAgIGVudGVyID0gdm9pZCAwOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHByZXZpb3VzMihjb2RlNCkgewogIHJldHVybiBjb2RlNCAhPT0gOTYgfHwgdGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoIC0gMV1bMV0udHlwZSA9PT0gImNoYXJhY3RlckVzY2FwZSI7Cn0KZnVuY3Rpb24gdG9rZW5pemVDb2RlVGV4dChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZU9wZW4gPSAwOwogIGxldCBzaXplOwogIGxldCB0b2tlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0Iik7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgIHJldHVybiBiZXR3ZWVuMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJldHdlZW4yKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDMyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgic3BhY2UiKTsKICAgICAgcmV0dXJuIGJldHdlZW4yOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5NikgewogICAgICB0b2tlbiA9IGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0RGF0YSIpOwogICAgcmV0dXJuIGRhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHREYXRhIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMihjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZTsKICAgIH0KICAgIGlmIChzaXplID09PSBzaXplT3BlbikgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dCIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHRva2VuLnR5cGUgPSAiY29kZVRleHREYXRhIjsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9Cn0KdmFyIGNvZGVUZXh0Owp2YXIgaW5pdF9jb2RlX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLXRleHQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvZGVUZXh0ID0gewogICAgICBuYW1lOiAiY29kZVRleHQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMyLAogICAgICByZXNvbHZlOiByZXNvbHZlQ29kZVRleHQsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVUZXh0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2xpYi9zcGxpY2UtYnVmZmVyLmpzCmZ1bmN0aW9uIGNodW5rZWRQdXNoKGxpc3Q1LCByaWdodCkgewogIGxldCBjaHVua1N0YXJ0ID0gMDsKICBpZiAocmlnaHQubGVuZ3RoIDwgMWU0KSB7CiAgICBsaXN0NS5wdXNoKC4uLnJpZ2h0KTsKICB9IGVsc2UgewogICAgd2hpbGUgKGNodW5rU3RhcnQgPCByaWdodC5sZW5ndGgpIHsKICAgICAgbGlzdDUucHVzaCguLi5yaWdodC5zbGljZShjaHVua1N0YXJ0LCBjaHVua1N0YXJ0ICsgMWU0KSk7CiAgICAgIGNodW5rU3RhcnQgKz0gMWU0OwogICAgfQogIH0KfQp2YXIgU3BsaWNlQnVmZmVyOwp2YXIgaW5pdF9zcGxpY2VfYnVmZmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2xpYi9zcGxpY2UtYnVmZmVyLmpzIigpIHsKICAgIFNwbGljZUJ1ZmZlciA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpbml0aWFsXQogICAgICAgKiAgIEluaXRpYWwgaXRlbXMgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBTcGxpY2UgYnVmZmVyLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoaW5pdGlhbDIpIHsKICAgICAgICB0aGlzLmxlZnQgPSBpbml0aWFsMiA/IFsuLi5pbml0aWFsMl0gOiBbXTsKICAgICAgICB0aGlzLnJpZ2h0ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFycmF5IGFjY2VzczsKICAgICAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgICogICBJbmRleC4KICAgICAgICogQHJldHVybiB7VH0KICAgICAgICogICBJdGVtLgogICAgICAgKi8KICAgICAgZ2V0KGluZGV4MikgewogICAgICAgIGlmIChpbmRleDIgPCAwIHx8IGluZGV4MiA+PSB0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJDYW5ub3QgYWNjZXNzIGluZGV4IGAiICsgaW5kZXgyICsgImAgaW4gYSBzcGxpY2UgYnVmZmVyIG9mIHNpemUgYCIgKyAodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSArICJgIik7CiAgICAgICAgfQogICAgICAgIGlmIChpbmRleDIgPCB0aGlzLmxlZnQubGVuZ3RoKSByZXR1cm4gdGhpcy5sZWZ0W2luZGV4Ml07CiAgICAgICAgcmV0dXJuIHRoaXMucmlnaHRbdGhpcy5yaWdodC5sZW5ndGggLSBpbmRleDIgKyB0aGlzLmxlZnQubGVuZ3RoIC0gMV07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBsZW5ndGggb2YgdGhlIHNwbGljZSBidWZmZXIsIG9uZSBncmVhdGVyIHRoYW4gdGhlIGxhcmdlc3QgaW5kZXggaW4gdGhlCiAgICAgICAqIGFycmF5LgogICAgICAgKi8KICAgICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW5kIHJldHVybiBgbGlzdFswXWA7CiAgICAgICAqIG1vdmVzIHRoZSBjdXJzb3IgdG8gYDBgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH0KICAgICAgICogICBJdGVtLCBvcHRpb25hbC4KICAgICAgICovCiAgICAgIHNoaWZ0KCkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKDApOwogICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LnBvcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTbGljZSB0aGUgYnVmZmVyIHRvIGdldCBhbiBhcnJheTsKICAgICAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQKICAgICAgICogICBTdGFydC4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5kXQogICAgICAgKiAgIEVuZCAob3B0aW9uYWwpLgogICAgICAgKiBAcmV0dXJucyB7QXJyYXk8VD59CiAgICAgICAqICAgQXJyYXkgb2YgaXRlbXMuCiAgICAgICAqLwogICAgICBzbGljZShzdGFydCwgZW5kMykgewogICAgICAgIGNvbnN0IHN0b3AgPSBlbmQzID09PSBudWxsIHx8IGVuZDMgPT09IHZvaWQgMCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IGVuZDM7CiAgICAgICAgaWYgKHN0b3AgPCB0aGlzLmxlZnQubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5sZWZ0LnNsaWNlKHN0YXJ0LCBzdG9wKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID4gdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGggLSBzdG9wICsgdGhpcy5sZWZ0Lmxlbmd0aCwgdGhpcy5yaWdodC5sZW5ndGggLSBzdGFydCArIHRoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5zbGljZShzdGFydCkuY29uY2F0KHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGggLSBzdG9wICsgdGhpcy5sZWZ0Lmxlbmd0aCkucmV2ZXJzZSgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTWltaWNzIHRoZSBiZWhhdmlvciBvZiBBcnJheS5wcm90b3R5cGUuc3BsaWNlKCkgZXhjZXB0IGZvciB0aGUgY2hhbmdlIG9mCiAgICAgICAqIGludGVyZmFjZSBuZWNlc3NhcnkgdG8gYXZvaWQgc2VnZmF1bHRzIHdoZW4gcGF0Y2hpbmcgaW4gdmVyeSBsYXJnZSBhcnJheXMuCiAgICAgICAqCiAgICAgICAqIFRoaXMgb3BlcmF0aW9uIG1vdmVzIGN1cnNvciBpcyBtb3ZlZCB0byBgc3RhcnRgIGFuZCByZXN1bHRzIGluIHRoZSBjdXJzb3IKICAgICAgICogcGxhY2VkIGFmdGVyIGFueSBpbnNlcnRlZCBpdGVtcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgICAqICAgU3RhcnQ7CiAgICAgICAqICAgemVyby1iYXNlZCBpbmRleCBhdCB3aGljaCB0byBzdGFydCBjaGFuZ2luZyB0aGUgYXJyYXk7CiAgICAgICAqICAgbmVnYXRpdmUgbnVtYmVycyBjb3VudCBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBhbmQgdmFsdWVzCiAgICAgICAqICAgdGhhdCBhcmUgb3V0LW9mIGJvdW5kcyBhcmUgY2xhbXBlZCB0byB0aGUgYXBwcm9wcmlhdGUgZW5kIG9mIHRoZSBhcnJheS4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbZGVsZXRlQ291bnQ9MF0KICAgICAgICogICBEZWxldGUgY291bnQgKGRlZmF1bHQ6IGAwYCk7CiAgICAgICAqICAgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZGVsZXRlLCBzdGFydGluZyBmcm9tIHN0YXJ0LgogICAgICAgKiBAcGFyYW0ge0FycmF5PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2l0ZW1zPVtdXQogICAgICAgKiAgIEl0ZW1zIHRvIGluY2x1ZGUgaW4gcGxhY2Ugb2YgdGhlIGRlbGV0ZWQgaXRlbXMgKGRlZmF1bHQ6IGBbXWApLgogICAgICAgKiBAcmV0dXJuIHtBcnJheTxUPn0KICAgICAgICogICBBbnkgcmVtb3ZlZCBpdGVtcy4KICAgICAgICovCiAgICAgIHNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGl0ZW1zKSB7CiAgICAgICAgY29uc3QgY291bnQyID0gZGVsZXRlQ291bnQgfHwgMDsKICAgICAgICB0aGlzLnNldEN1cnNvcihNYXRoLnRydW5jKHN0YXJ0KSk7CiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMucmlnaHQuc3BsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gY291bnQyLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIGlmIChpdGVtcykgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCBpdGVtcyk7CiAgICAgICAgcmV0dXJuIHJlbW92ZWQucmV2ZXJzZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgaGlnaGVzdC1udW1iZXJlZCBpdGVtIGluIHRoZSBhcnJheSwgc28KICAgICAgICogYGxpc3RbbGlzdC5sZW5ndGggLSAxXWA7CiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYGxlbmd0aGAuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtUIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIEl0ZW0sIG9wdGlvbmFsLgogICAgICAgKi8KICAgICAgcG9wKCkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5wb3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBhIHNpbmdsZSBpdGVtIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1R9IGl0ZW0KICAgICAgICogICBJdGVtLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBwdXNoKGl0ZW0pIHsKICAgICAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIHRoaXMubGVmdC5wdXNoKGl0ZW0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnRzIG1hbnkgaXRlbXMgdG8gdGhlIGhpZ2gtbnVtYmVyZWQgc2lkZSBvZiB0aGUgYXJyYXkuCiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYGxlbmd0aGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zCiAgICAgICAqICAgSXRlbXMuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHB1c2hNYW55KGl0ZW1zKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICBjaHVua2VkUHVzaCh0aGlzLmxlZnQsIGl0ZW1zKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBhIHNpbmdsZSBpdGVtIHRvIHRoZSBsb3ctbnVtYmVyZWQgc2lkZSBvZiB0aGUgYXJyYXk7CiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYDBgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1R9IGl0ZW0KICAgICAgICogICBJdGVtLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICB1bnNoaWZ0KGl0ZW0pIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICB0aGlzLnJpZ2h0LnB1c2goaXRlbSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgbWFueSBpdGVtcyB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXMKICAgICAgICogICBJdGVtcy4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgdW5zaGlmdE1hbnkoaXRlbXMpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICBjaHVua2VkUHVzaCh0aGlzLnJpZ2h0LCBpdGVtcy5yZXZlcnNlKCkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBNb3ZlIHRoZSBjdXJzb3IgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbiBpbiB0aGUgYXJyYXkuIFJlcXVpcmVzCiAgICAgICAqIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBkaXN0YW5jZSBtb3ZlZC4KICAgICAgICoKICAgICAgICogSWYgYG4gPCAwYCwgdGhlIGN1cnNvciB3aWxsIGVuZCB1cCBhdCB0aGUgYmVnaW5uaW5nLgogICAgICAgKiBJZiBgbiA+IGxlbmd0aGAsIHRoZSBjdXJzb3Igd2lsbCBlbmQgdXAgYXQgdGhlIGVuZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4KICAgICAgICogICBQb3NpdGlvbi4KICAgICAgICogQHJldHVybiB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXRDdXJzb3IobjEzKSB7CiAgICAgICAgaWYgKG4xMyA9PT0gdGhpcy5sZWZ0Lmxlbmd0aCB8fCBuMTMgPiB0aGlzLmxlZnQubGVuZ3RoICYmIHRoaXMucmlnaHQubGVuZ3RoID09PSAwIHx8IG4xMyA8IDAgJiYgdGhpcy5sZWZ0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgIGlmIChuMTMgPCB0aGlzLmxlZnQubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5sZWZ0LnNwbGljZShuMTMsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgICBjaHVua2VkUHVzaCh0aGlzLnJpZ2h0LCByZW1vdmVkLnJldmVyc2UoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGggLSBuMTMsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgICBjaHVua2VkUHVzaCh0aGlzLmxlZnQsIHJlbW92ZWQucmV2ZXJzZSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemUvaW5kZXguanMKZnVuY3Rpb24gc3VidG9rZW5pemUoZXZlbnRzQXJyYXkpIHsKICBjb25zdCBqdW1wcyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgZXZlbnQ7CiAgbGV0IGxpbmVJbmRleDsKICBsZXQgb3RoZXJJbmRleDsKICBsZXQgb3RoZXJFdmVudDsKICBsZXQgcGFyYW1ldGVyczsKICBsZXQgc3ViZXZlbnRzOwogIGxldCBtb3JlOwogIGNvbnN0IGV2ZW50cyA9IG5ldyBTcGxpY2VCdWZmZXIoZXZlbnRzQXJyYXkpOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIHdoaWxlIChpbmRleDIgaW4ganVtcHMpIHsKICAgICAgaW5kZXgyID0ganVtcHNbaW5kZXgyXTsKICAgIH0KICAgIGV2ZW50ID0gZXZlbnRzLmdldChpbmRleDIpOwogICAgaWYgKGluZGV4MiAmJiBldmVudFsxXS50eXBlID09PSAiY2h1bmtGbG93IiAmJiBldmVudHMuZ2V0KGluZGV4MiAtIDEpWzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIpIHsKICAgICAgc3ViZXZlbnRzID0gZXZlbnRbMV0uX3Rva2VuaXplci5ldmVudHM7CiAgICAgIG90aGVySW5kZXggPSAwOwogICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgb3RoZXJJbmRleCArPSAyOwogICAgICB9CiAgICAgIGlmIChvdGhlckluZGV4IDwgc3ViZXZlbnRzLmxlbmd0aCAmJiBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgd2hpbGUgKCsrb3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGgpIHsKICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAiY2h1bmtUZXh0IikgewogICAgICAgICAgICBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTsKICAgICAgICAgICAgb3RoZXJJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgIGlmIChldmVudFsxXS5jb250ZW50VHlwZSkgewogICAgICAgIE9iamVjdC5hc3NpZ24oanVtcHMsIHN1YmNvbnRlbnQoZXZlbnRzLCBpbmRleDIpKTsKICAgICAgICBpbmRleDIgPSBqdW1wc1tpbmRleDJdOwogICAgICAgIG1vcmUgPSB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV2ZW50WzFdLl9jb250YWluZXIpIHsKICAgICAgb3RoZXJJbmRleCA9IGluZGV4MjsKICAgICAgbGluZUluZGV4ID0gdm9pZCAwOwogICAgICB3aGlsZSAob3RoZXJJbmRleC0tKSB7CiAgICAgICAgb3RoZXJFdmVudCA9IGV2ZW50cy5nZXQob3RoZXJJbmRleCk7CiAgICAgICAgaWYgKG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpIHsKICAgICAgICAgIGlmIChvdGhlckV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICAgICAgICBldmVudHMuZ2V0KGxpbmVJbmRleClbMV0udHlwZSA9ICJsaW5lRW5kaW5nQmxhbmsiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG90aGVyRXZlbnRbMV0udHlwZSA9ICJsaW5lRW5kaW5nIjsKICAgICAgICAgICAgbGluZUluZGV4ID0gb3RoZXJJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiIHx8IG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpc3RJdGVtSW5kZW50IikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxpbmVJbmRleCkgewogICAgICAgIGV2ZW50WzFdLmVuZCA9IHsKICAgICAgICAgIC4uLmV2ZW50cy5nZXQobGluZUluZGV4KVsxXS5zdGFydAogICAgICAgIH07CiAgICAgICAgcGFyYW1ldGVycyA9IGV2ZW50cy5zbGljZShsaW5lSW5kZXgsIGluZGV4Mik7CiAgICAgICAgcGFyYW1ldGVycy51bnNoaWZ0KGV2ZW50KTsKICAgICAgICBldmVudHMuc3BsaWNlKGxpbmVJbmRleCwgaW5kZXgyIC0gbGluZUluZGV4ICsgMSwgcGFyYW1ldGVycyk7CiAgICAgIH0KICAgIH0KICB9CiAgc3BsaWNlKGV2ZW50c0FycmF5LCAwLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIGV2ZW50cy5zbGljZSgwKSk7CiAgcmV0dXJuICFtb3JlOwp9CmZ1bmN0aW9uIHN1YmNvbnRlbnQoZXZlbnRzLCBldmVudEluZGV4KSB7CiAgY29uc3QgdG9rZW4gPSBldmVudHMuZ2V0KGV2ZW50SW5kZXgpWzFdOwogIGNvbnN0IGNvbnRleHQyID0gZXZlbnRzLmdldChldmVudEluZGV4KVsyXTsKICBsZXQgc3RhcnRQb3NpdGlvbiA9IGV2ZW50SW5kZXggLSAxOwogIGNvbnN0IHN0YXJ0UG9zaXRpb25zID0gW107CiAgbGV0IHRva2VuaXplciA9IHRva2VuLl90b2tlbml6ZXI7CiAgaWYgKCF0b2tlbml6ZXIpIHsKICAgIHRva2VuaXplciA9IGNvbnRleHQyLnBhcnNlclt0b2tlbi5jb250ZW50VHlwZV0odG9rZW4uc3RhcnQpOwogICAgaWYgKHRva2VuLl9jb250ZW50VHlwZVRleHRUcmFpbGluZykgewogICAgICB0b2tlbml6ZXIuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nID0gdHJ1ZTsKICAgIH0KICB9CiAgY29uc3QgY2hpbGRFdmVudHMgPSB0b2tlbml6ZXIuZXZlbnRzOwogIGNvbnN0IGp1bXBzID0gW107CiAgY29uc3QgZ2FwcyA9IHt9OwogIGxldCBzdHJlYW07CiAgbGV0IHByZXZpb3VzMzsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGN1cnJlbnQgPSB0b2tlbjsKICBsZXQgYWRqdXN0ID0gMDsKICBsZXQgc3RhcnQgPSAwOwogIGNvbnN0IGJyZWFrcyA9IFtzdGFydF07CiAgd2hpbGUgKGN1cnJlbnQpIHsKICAgIHdoaWxlIChldmVudHMuZ2V0KCsrc3RhcnRQb3NpdGlvbilbMV0gIT09IGN1cnJlbnQpIHsKICAgIH0KICAgIHN0YXJ0UG9zaXRpb25zLnB1c2goc3RhcnRQb3NpdGlvbik7CiAgICBpZiAoIWN1cnJlbnQuX3Rva2VuaXplcikgewogICAgICBzdHJlYW0gPSBjb250ZXh0Mi5zbGljZVN0cmVhbShjdXJyZW50KTsKICAgICAgaWYgKCFjdXJyZW50Lm5leHQpIHsKICAgICAgICBzdHJlYW0ucHVzaChudWxsKTsKICAgICAgfQogICAgICBpZiAocHJldmlvdXMzKSB7CiAgICAgICAgdG9rZW5pemVyLmRlZmluZVNraXAoY3VycmVudC5zdGFydCk7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7CiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB0cnVlOwogICAgICB9CiAgICAgIHRva2VuaXplci53cml0ZShzdHJlYW0pOwogICAgICBpZiAoY3VycmVudC5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0pIHsKICAgICAgICB0b2tlbml6ZXIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHZvaWQgMDsKICAgICAgfQogICAgfQogICAgcHJldmlvdXMzID0gY3VycmVudDsKICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgfQogIGN1cnJlbnQgPSB0b2tlbjsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZEV2ZW50cy5sZW5ndGgpIHsKICAgIGlmICgKICAgICAgLy8gRmluZCBhIHZvaWQgdG9rZW4gdGhhdCBpbmNsdWRlcyBhIGJyZWFrLgogICAgICBjaGlsZEV2ZW50c1tpbmRleDJdWzBdID09PSAiZXhpdCIgJiYgY2hpbGRFdmVudHNbaW5kZXgyIC0gMV1bMF0gPT09ICJlbnRlciIgJiYgY2hpbGRFdmVudHNbaW5kZXgyXVsxXS50eXBlID09PSBjaGlsZEV2ZW50c1tpbmRleDIgLSAxXVsxXS50eXBlICYmIGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQubGluZSAhPT0gY2hpbGRFdmVudHNbaW5kZXgyXVsxXS5lbmQubGluZQogICAgKSB7CiAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgYnJlYWtzLnB1c2goc3RhcnQpOwogICAgICBjdXJyZW50Ll90b2tlbml6ZXIgPSB2b2lkIDA7CiAgICAgIGN1cnJlbnQucHJldmlvdXMgPSB2b2lkIDA7CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgfQogIHRva2VuaXplci5ldmVudHMgPSBbXTsKICBpZiAoY3VycmVudCkgewogICAgY3VycmVudC5fdG9rZW5pemVyID0gdm9pZCAwOwogICAgY3VycmVudC5wcmV2aW91cyA9IHZvaWQgMDsKICB9IGVsc2UgewogICAgYnJlYWtzLnBvcCgpOwogIH0KICBpbmRleDIgPSBicmVha3MubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3Qgc2xpY2UgPSBjaGlsZEV2ZW50cy5zbGljZShicmVha3NbaW5kZXgyXSwgYnJlYWtzW2luZGV4MiArIDFdKTsKICAgIGNvbnN0IHN0YXJ0MiA9IHN0YXJ0UG9zaXRpb25zLnBvcCgpOwogICAganVtcHMucHVzaChbc3RhcnQyLCBzdGFydDIgKyBzbGljZS5sZW5ndGggLSAxXSk7CiAgICBldmVudHMuc3BsaWNlKHN0YXJ0MiwgMiwgc2xpY2UpOwogIH0KICBqdW1wcy5yZXZlcnNlKCk7CiAgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwganVtcHMubGVuZ3RoKSB7CiAgICBnYXBzW2FkanVzdCArIGp1bXBzW2luZGV4Ml1bMF1dID0gYWRqdXN0ICsganVtcHNbaW5kZXgyXVsxXTsKICAgIGFkanVzdCArPSBqdW1wc1tpbmRleDJdWzFdIC0ganVtcHNbaW5kZXgyXVswXSAtIDE7CiAgfQogIHJldHVybiBnYXBzOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9zcGxpY2VfYnVmZmVyKCk7CiAgICBpbml0X3NwbGljZV9idWZmZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvbnRlbnQuanMKZnVuY3Rpb24gcmVzb2x2ZUNvbnRlbnQoZXZlbnRzKSB7CiAgc3VidG9rZW5pemUoZXZlbnRzKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplQ29udGVudChlZmZlY3RzLCBvazMpIHsKICBsZXQgcHJldmlvdXMzOwogIHJldHVybiBjaHVua1N0YXJ0OwogIGZ1bmN0aW9uIGNodW5rU3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvbnRlbnQiKTsKICAgIHByZXZpb3VzMyA9IGVmZmVjdHMuZW50ZXIoImNodW5rQ29udGVudCIsIHsKICAgICAgY29udGVudFR5cGU6ICJjb250ZW50IgogICAgfSk7CiAgICByZXR1cm4gY2h1bmtJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjaHVua0luc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGNvbnRpbnVhdGlvbkNvbnN0cnVjdCwgY29udGVudENvbnRpbnVlLCBjb250ZW50RW5kKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNodW5rSW5zaWRlOwogIH0KICBmdW5jdGlvbiBjb250ZW50RW5kKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNodW5rQ29udGVudCIpOwogICAgZWZmZWN0cy5leGl0KCJjb250ZW50Iik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGVudENvbnRpbnVlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJjaHVua0NvbnRlbnQiKTsKICAgIHByZXZpb3VzMy5uZXh0ID0gZWZmZWN0cy5lbnRlcigiY2h1bmtDb250ZW50IiwgewogICAgICBjb250ZW50VHlwZTogImNvbnRlbnQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMzCiAgICB9KTsKICAgIHByZXZpb3VzMyA9IHByZXZpb3VzMy5uZXh0OwogICAgcmV0dXJuIGNodW5rSW5zaWRlOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnRMb29rYWhlYWQ7CiAgZnVuY3Rpb24gc3RhcnRMb29rYWhlYWQoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtDb250ZW50Iik7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHByZWZpeGVkLCAibGluZVByZWZpeCIpOwogIH0KICBmdW5jdGlvbiBwcmVmaXhlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIGlmICghc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSAmJiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZWZmZWN0cy5pbnRlcnJ1cHQoc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZmxvdywgbm9rLCBvazMpKGNvZGU0KTsKICB9Cn0KdmFyIGNvbnRlbnQsIGNvbnRpbnVhdGlvbkNvbnN0cnVjdDsKdmFyIGluaXRfY29udGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvbnRlbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc3VidG9rZW5pemUoKTsKICAgIGNvbnRlbnQgPSB7CiAgICAgIHJlc29sdmU6IHJlc29sdmVDb250ZW50LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250ZW50CiAgICB9OwogICAgY29udGludWF0aW9uQ29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250aW51YXRpb24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeURlc3RpbmF0aW9uKGVmZmVjdHMsIG9rMywgbm9rLCB0eXBlNSwgbGl0ZXJhbFR5cGUsIGxpdGVyYWxNYXJrZXJUeXBlLCByYXdUeXBlLCBzdHJpbmdUeXBlLCBtYXgzKSB7CiAgY29uc3QgbGltaXQgPSBtYXgzIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICBsZXQgYmFsYW5jZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxUeXBlKTsKICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsTWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsTWFya2VyVHlwZSk7CiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzIgfHwgY29kZTQgPT09IDQxIHx8IGFzY2lpQ29udHJvbChjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgIGVmZmVjdHMuZW50ZXIocmF3VHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gcmF3Mihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbFR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGVuY2xvc2VkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5jbG9zZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYwIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGVuY2xvc2VkRXNjYXBlIDogZW5jbG9zZWQ7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVuY2xvc2VkOwogICAgfQogICAgcmV0dXJuIGVuY2xvc2VkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmF3Mihjb2RlNCkgewogICAgaWYgKCFiYWxhbmNlICYmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpOwogICAgICBlZmZlY3RzLmV4aXQocmF3VHlwZSk7CiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgaWYgKGJhbGFuY2UgPCBsaW1pdCAmJiBjb2RlNCA9PT0gNDApIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYmFsYW5jZSsrOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYmFsYW5jZS0tOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzIgfHwgY29kZTQgPT09IDQwIHx8IGFzY2lpQ29udHJvbChjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IHJhd0VzY2FwZSA6IHJhdzI7CiAgfQogIGZ1bmN0aW9uIHJhd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MCB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiByYXcyOwogICAgfQogICAgcmV0dXJuIHJhdzIoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9kZXN0aW5hdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktbGFiZWxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlMYWJlbChlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBzZWVuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICByZXR1cm4gYXRCcmVhazsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKHNpemUgPiA5OTkgfHwgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MyAmJiAhc2VlbiB8fCAvLyBUbyBkbzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgb25jZSB3ZeKAmXZlIHN3aXRjaGVkIGZyb20KICAgIC8vIGBtaWNyb21hcmstZXh0ZW5zaW9uLWZvb3Rub3RlYCB0byBgbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVgLAogICAgLy8gd2hpY2ggZG9lc27igJl0IG5lZWQgdGhpcy4KICAgIC8vIEhpZGRlbiBmb290bm90ZXMgaG9vay4KICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi8KICAgIGNvZGU0ID09PSA5NCAmJiAhc2l6ZSAmJiAiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCIgaW4gc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGF0QnJlYWs7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MyB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpIHx8IHNpemUrKyA+IDk5OSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBpZiAoIXNlZW4pIHNlZW4gPSAhbWFya2Rvd25TcGFjZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gbGFiZWxFc2NhcGUgOiBsYWJlbEluc2lkZTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBsYWJlbEluc2lkZTsKICAgIH0KICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktbGFiZWxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS10aXRsZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktdGl0bGUvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIG9rMywgbm9rLCB0eXBlNSwgbWFya2VyVHlwZSwgc3RyaW5nVHlwZSkgewogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDApIHsKICAgICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgbWFya2VyID0gY29kZTQgPT09IDQwID8gNDEgOiBjb2RlNDsKICAgICAgcmV0dXJuIGJlZ2luMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWdpbjMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgcmV0dXJuIGJlZ2luMyhtYXJrZXIpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAibGluZVByZWZpeCIpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlciB8fCBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBlc2NhcGUgOiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfdGl0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS10aXRsZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktdGl0bGUvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgb2szKSB7CiAgbGV0IHNlZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgcmV0dXJuIHN0YXJ0OwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgc3RhcnQsIHNlZW4gPyAibGluZVByZWZpeCIgOiAibGluZVN1ZmZpeCIpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV93aGl0ZXNwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvZGVmaW5pdGlvbi5qcwpmdW5jdGlvbiB0b2tlbml6ZURlZmluaXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGlkZW50aWZpZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeUxhYmVsLmNhbGwoCiAgICAgIHNlbGYyLAogICAgICBlZmZlY3RzLAogICAgICBsYWJlbEFmdGVyLAogICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuCiAgICAgIG5vaywKICAgICAgImRlZmluaXRpb25MYWJlbCIsCiAgICAgICJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLAogICAgICAiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIgogICAgKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsQWZ0ZXIoY29kZTQpIHsKICAgIGlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYyLnNsaWNlU2VyaWFsaXplKHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV1bMV0pLnNsaWNlKDEsIC0xKSk7CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImRlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIHJldHVybiBtYXJrZXJBZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBtYXJrZXJBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgZGVzdGluYXRpb25CZWZvcmUpKGNvZGU0KSA6IGRlc3RpbmF0aW9uQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGVzdGluYXRpb25CZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oCiAgICAgIGVmZmVjdHMsCiAgICAgIGRlc3RpbmF0aW9uQWZ0ZXIsCiAgICAgIC8vIE5vdGU6IHdlIGRvbuKAmXQgbmVlZCB0byByZXNldCB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy4KICAgICAgbm9rLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsCiAgICAgICJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIgogICAgKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlc3RpbmF0aW9uQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQodGl0bGVCZWZvcmUsIGFmdGVyLCBhZnRlcikoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyV2hpdGVzcGFjZSwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiBhZnRlcldoaXRlc3BhY2UoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcldoaXRlc3BhY2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbiIpOwogICAgICBzZWxmMi5wYXJzZXIuZGVmaW5lZC5wdXNoKGlkZW50aWZpZXIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVRpdGxlQmVmb3JlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHRpdGxlQmVmb3JlMjsKICBmdW5jdGlvbiB0aXRsZUJlZm9yZTIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGJlZm9yZU1hcmtlcikoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlTWFya2VyKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIHRpdGxlQWZ0ZXIsIG5vaywgImRlZmluaXRpb25UaXRsZSIsICJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCAiZGVmaW5pdGlvblRpdGxlU3RyaW5nIikoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0aXRsZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZSwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiB0aXRsZUFmdGVyT3B0aW9uYWxXaGl0ZXNwYWNlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGRlZmluaXRpb24yLCB0aXRsZUJlZm9yZTsKdmFyIGluaXRfZGVmaW5pdGlvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9kZWZpbml0aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfZGVzdGluYXRpb24oKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfbGFiZWwoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfdGl0bGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGRlZmluaXRpb24yID0gewogICAgICBuYW1lOiAiZGVmaW5pdGlvbiIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb24KICAgIH07CiAgICB0aXRsZUJlZm9yZSA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplVGl0bGVCZWZvcmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiaGFyZEJyZWFrRXNjYXBlIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGhhcmRCcmVha0VzY2FwZTsKdmFyIGluaXRfaGFyZF9icmVha19lc2NhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaGFyZEJyZWFrRXNjYXBlID0gewogICAgICBuYW1lOiAiaGFyZEJyZWFrRXNjYXBlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSGFyZEJyZWFrRXNjYXBlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMKZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdBdHgoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBjb250ZW50RW5kID0gZXZlbnRzLmxlbmd0aCAtIDI7CiAgbGV0IGNvbnRlbnRTdGFydCA9IDM7CiAgbGV0IGNvbnRlbnQzOwogIGxldCB0ZXh0OTsKICBpZiAoZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0udHlwZSA9PT0gIndoaXRlc3BhY2UiKSB7CiAgICBjb250ZW50U3RhcnQgKz0gMjsKICB9CiAgaWYgKGNvbnRlbnRFbmQgLSAyID4gY29udGVudFN0YXJ0ICYmIGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSAid2hpdGVzcGFjZSIpIHsKICAgIGNvbnRlbnRFbmQgLT0gMjsKICB9CiAgaWYgKGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSAiYXR4SGVhZGluZ1NlcXVlbmNlIiAmJiAoY29udGVudFN0YXJ0ID09PSBjb250ZW50RW5kIC0gMSB8fCBjb250ZW50RW5kIC0gNCA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZCAtIDJdWzFdLnR5cGUgPT09ICJ3aGl0ZXNwYWNlIikpIHsKICAgIGNvbnRlbnRFbmQgLT0gY29udGVudFN0YXJ0ICsgMSA9PT0gY29udGVudEVuZCA/IDIgOiA0OwogIH0KICBpZiAoY29udGVudEVuZCA+IGNvbnRlbnRTdGFydCkgewogICAgY29udGVudDMgPSB7CiAgICAgIHR5cGU6ICJhdHhIZWFkaW5nVGV4dCIsCiAgICAgIHN0YXJ0OiBldmVudHNbY29udGVudFN0YXJ0XVsxXS5zdGFydCwKICAgICAgZW5kOiBldmVudHNbY29udGVudEVuZF1bMV0uZW5kCiAgICB9OwogICAgdGV4dDkgPSB7CiAgICAgIHR5cGU6ICJjaHVua1RleHQiLAogICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsCiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZCwKICAgICAgY29udGVudFR5cGU6ICJ0ZXh0IgogICAgfTsKICAgIHNwbGljZShldmVudHMsIGNvbnRlbnRTdGFydCwgY29udGVudEVuZCAtIGNvbnRlbnRTdGFydCArIDEsIFtbImVudGVyIiwgY29udGVudDMsIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZXhpdCIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZXhpdCIsIGNvbnRlbnQzLCBjb250ZXh0Ml1dKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUhlYWRpbmdBdHgoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzUgJiYgc2l6ZSsrIDwgNikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZyIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZ1RleHQiKTsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VGdXJ0aGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZXF1ZW5jZUZ1cnRoZXI7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDM1IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZ1RleHQiKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KfQp2YXIgaGVhZGluZ0F0eDsKdmFyIGluaXRfaGVhZGluZ19hdHggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oZWFkaW5nLWF0eC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBoZWFkaW5nQXR4ID0gewogICAgICBuYW1lOiAiaGVhZGluZ0F0eCIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVIZWFkaW5nQXR4LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVIZWFkaW5nQXR4CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZS9pbmRleC5qcwp2YXIgaHRtbEJsb2NrTmFtZXMsIGh0bWxSYXdOYW1lczsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfaHRtbF90YWdfbmFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMiKCkgewogICAgaHRtbEJsb2NrTmFtZXMgPSBbCiAgICAgICJhZGRyZXNzIiwKICAgICAgImFydGljbGUiLAogICAgICAiYXNpZGUiLAogICAgICAiYmFzZSIsCiAgICAgICJiYXNlZm9udCIsCiAgICAgICJibG9ja3F1b3RlIiwKICAgICAgImJvZHkiLAogICAgICAiY2FwdGlvbiIsCiAgICAgICJjZW50ZXIiLAogICAgICAiY29sIiwKICAgICAgImNvbGdyb3VwIiwKICAgICAgImRkIiwKICAgICAgImRldGFpbHMiLAogICAgICAiZGlhbG9nIiwKICAgICAgImRpciIsCiAgICAgICJkaXYiLAogICAgICAiZGwiLAogICAgICAiZHQiLAogICAgICAiZmllbGRzZXQiLAogICAgICAiZmlnY2FwdGlvbiIsCiAgICAgICJmaWd1cmUiLAogICAgICAiZm9vdGVyIiwKICAgICAgImZvcm0iLAogICAgICAiZnJhbWUiLAogICAgICAiZnJhbWVzZXQiLAogICAgICAiaDEiLAogICAgICAiaDIiLAogICAgICAiaDMiLAogICAgICAiaDQiLAogICAgICAiaDUiLAogICAgICAiaDYiLAogICAgICAiaGVhZCIsCiAgICAgICJoZWFkZXIiLAogICAgICAiaHIiLAogICAgICAiaHRtbCIsCiAgICAgICJpZnJhbWUiLAogICAgICAibGVnZW5kIiwKICAgICAgImxpIiwKICAgICAgImxpbmsiLAogICAgICAibWFpbiIsCiAgICAgICJtZW51IiwKICAgICAgIm1lbnVpdGVtIiwKICAgICAgIm5hdiIsCiAgICAgICJub2ZyYW1lcyIsCiAgICAgICJvbCIsCiAgICAgICJvcHRncm91cCIsCiAgICAgICJvcHRpb24iLAogICAgICAicCIsCiAgICAgICJwYXJhbSIsCiAgICAgICJzZWFyY2giLAogICAgICAic2VjdGlvbiIsCiAgICAgICJzdW1tYXJ5IiwKICAgICAgInRhYmxlIiwKICAgICAgInRib2R5IiwKICAgICAgInRkIiwKICAgICAgInRmb290IiwKICAgICAgInRoIiwKICAgICAgInRoZWFkIiwKICAgICAgInRpdGxlIiwKICAgICAgInRyIiwKICAgICAgInRyYWNrIiwKICAgICAgInVsIgogICAgXTsKICAgIGh0bWxSYXdOYW1lcyA9IFsicHJlIiwgInNjcmlwdCIsICJzdHlsZSIsICJ0ZXh0YXJlYSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC1mbG93LmpzCmZ1bmN0aW9uIHJlc29sdmVUb0h0bWxGbG93KGV2ZW50cykgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJodG1sRmxvdyIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmIChpbmRleDIgPiAxICYmIGV2ZW50c1tpbmRleDIgLSAyXVsxXS50eXBlID09PSAibGluZVByZWZpeCIpIHsKICAgIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4MiAtIDJdWzFdLnN0YXJ0OwogICAgZXZlbnRzW2luZGV4MiArIDFdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4MiAtIDJdWzFdLnN0YXJ0OwogICAgZXZlbnRzLnNwbGljZShpbmRleDIgLSAyLCAyKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUh0bWxGbG93KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgbGV0IGNsb3NpbmdUYWc7CiAgbGV0IGJ1ZmZlcjI7CiAgbGV0IGluZGV4MjsKICBsZXQgbWFya2VyQjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBiZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImh0bWxGbG93Iik7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvd0RhdGEiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZGVjbGFyYXRpb25PcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBjbG9zaW5nVGFnID0gdHJ1ZTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDM7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdOYW1lOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSAyOwogICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDU7CiAgICAgIGluZGV4MiA9IDA7CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gNDsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCA/IG9rMyA6IGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YU9wZW5JbnNpZGUoY29kZTQpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICJDREFUQVsiOwogICAgaWYgKGNvZGU0ID09PSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIrKykpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgaWYgKGluZGV4MiA9PT0gdmFsdWUyLmxlbmd0aCkgewogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb247CiAgICAgIH0KICAgICAgcmV0dXJuIGNkYXRhT3Blbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBjb25zdCBzbGFzaCA9IGNvZGU0ID09PSA0NzsKICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlcjIudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKCFzbGFzaCAmJiAhY2xvc2luZ1RhZyAmJiBodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICBtYXJrZXIgPSAxOwogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogY29udGludWF0aW9uKGNvZGU0KTsKICAgICAgfQogICAgICBpZiAoaHRtbEJsb2NrTmFtZXMuaW5jbHVkZXMoYnVmZmVyMi50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgIG1hcmtlciA9IDY7CiAgICAgICAgaWYgKHNsYXNoKSB7CiAgICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgICAgcmV0dXJuIGJhc2ljU2VsZkNsb3Npbmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogY29udGludWF0aW9uKGNvZGU0KTsKICAgICAgfQogICAgICBtYXJrZXIgPSA3OwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ICYmICFzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA/IG5vayhjb2RlNCkgOiBjbG9zaW5nVGFnID8gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZTQpIDogY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdOYW1lOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJhc2ljU2VsZkNsb3NpbmcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCA/IG9rMyA6IGNvbnRpbnVhdGlvbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcjsKICAgIH0KICAgIHJldHVybiBjb21wbGV0ZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVFbmQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlckIgPSBjb2RlNDsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXJCKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlckIgPSBudWxsOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVFbmQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1ICYmIG1hcmtlciA9PT0gMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQ29tbWVudEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjAgJiYgbWFya2VyID09PSAxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdUYWdPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MiAmJiBtYXJrZXIgPT09IDQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MyAmJiBtYXJrZXIgPT09IDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MyAmJiBtYXJrZXIgPT09IDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNkYXRhSW5zaWRlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgJiYgKG1hcmtlciA9PT0gNiB8fCBtYXJrZXIgPT09IDcpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3dEYXRhIik7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZUJlZm9yZSwgY29udGludWF0aW9uQWZ0ZXIsIGNvbnRpbnVhdGlvblN0YXJ0KShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250aW51YXRpb247CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uU3RhcnQsIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eSwgY29udGludWF0aW9uQWZ0ZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uU3RhcnROb25MYXp5KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gY29udGludWF0aW9uQmVmb3JlOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25CZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb250aW51YXRpb25TdGFydChjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvd0RhdGEiKTsKICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25Db21tZW50SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25SYXdUYWdPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgPSAiIjsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZzsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25SYXdFbmRUYWcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlcjIudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGh0bWxSYXdOYW1lcy5pbmNsdWRlcyhuYW1lKSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgICB9CiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpICYmIGJ1ZmZlcjIubGVuZ3RoIDwgOCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uUmF3RW5kVGFnOwogICAgfQogICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNkYXRhSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2U7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1ICYmIG1hcmtlciA9PT0gMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3dEYXRhIik7CiAgICAgIHJldHVybiBjb250aW51YXRpb25BZnRlcihjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25BZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJodG1sRmxvdyIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmVCZWZvcmUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoYmxhbmtMaW5lLCBvazMsIG5vayk7CiAgfQp9CnZhciBodG1sRmxvdywgYmxhbmtMaW5lQmVmb3JlLCBub25MYXp5Q29udGludWF0aW9uU3RhcnQ7CnZhciBpbml0X2h0bWxfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9odG1sX3RhZ19uYW1lKCk7CiAgICBpbml0X2JsYW5rX2xpbmUoKTsKICAgIGh0bWxGbG93ID0gewogICAgICBjb25jcmV0ZTogdHJ1ZSwKICAgICAgbmFtZTogImh0bWxGbG93IiwKICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9IdG1sRmxvdywKICAgICAgdG9rZW5pemU6IHRva2VuaXplSHRtbEZsb3cKICAgIH07CiAgICBibGFua0xpbmVCZWZvcmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsYW5rTGluZUJlZm9yZQogICAgfTsKICAgIG5vbkxhenlDb250aW51YXRpb25TdGFydCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC10ZXh0LmpzCmZ1bmN0aW9uIHRva2VuaXplSHRtbFRleHQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IG1hcmtlcjsKICBsZXQgaW5kZXgyOwogIGxldCByZXR1cm5TdGF0ZTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImh0bWxUZXh0Iik7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dERhdGEiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZGVjbGFyYXRpb25PcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2VTdGFydDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc3RydWN0aW9uOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGluZGV4MiA9IDA7CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50RW5kOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnQzKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50Q2xvc2U7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IGNvbW1lbnQzOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbW1lbnQzOwogIH0KICBmdW5jdGlvbiBjb21tZW50Q2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbW1lbnRFbmQ7CiAgICB9CiAgICByZXR1cm4gY29tbWVudDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50RW5kKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IDYyID8gZW5kMyhjb2RlNCkgOiBjb2RlNCA9PT0gNDUgPyBjb21tZW50Q2xvc2UoY29kZTQpIDogY29tbWVudDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YU9wZW5JbnNpZGUoY29kZTQpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICJDREFUQVsiOwogICAgaWYgKGNvZGU0ID09PSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIrKykpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluZGV4MiA9PT0gdmFsdWUyLmxlbmd0aCA/IGNkYXRhIDogY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjZGF0YUNsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBjZGF0YTsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjZGF0YTsKICB9CiAgZnVuY3Rpb24gY2RhdGFDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFFbmQ7CiAgICB9CiAgICByZXR1cm4gY2RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YUVuZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjZGF0YUVuZDsKICAgIH0KICAgIHJldHVybiBjZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYyKSB7CiAgICAgIHJldHVybiBlbmQzKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gZGVjbGFyYXRpb247CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQogIGZ1bmN0aW9uIGluc3RydWN0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkNsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBpbnN0cnVjdGlvbjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICB9CiAgZnVuY3Rpb24gaW5zdHJ1Y3Rpb25DbG9zZShjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA2MiA/IGVuZDMoY29kZTQpIDogaW5zdHJ1Y3Rpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ0Nsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2U7CiAgICB9CiAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VCZXR3ZWVuKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ0Nsb3NlQmV0d2VlbjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdDbG9zZUJldHdlZW47CiAgICB9CiAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQmV0d2Vlbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW5kMzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkJldHdlZW47CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW47CiAgICB9CiAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyOwogICAgfQogICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MSB8fCBjb2RlNCA9PT0gNjIgfHwgY29kZTQgPT09IDk2KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gY29kZTQ7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IHZvaWQgMDsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MSB8fCBjb2RlNCA9PT0gOTYpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5kMyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImh0bWxUZXh0RGF0YSIpOwogICAgICBlZmZlY3RzLmV4aXQoImh0bWxUZXh0Iik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGluZUVuZGluZ0JlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dERhdGEiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBsaW5lRW5kaW5nQWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGxpbmVFbmRpbmdBZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpIDogbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dERhdGEiKTsKICAgIHJldHVybiByZXR1cm5TdGF0ZShjb2RlNCk7CiAgfQp9CnZhciBodG1sVGV4dDsKdmFyIGluaXRfaHRtbF90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC10ZXh0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBodG1sVGV4dCA9IHsKICAgICAgbmFtZTogImh0bWxUZXh0IiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSHRtbFRleHQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMKZnVuY3Rpb24gcmVzb2x2ZUFsbExhYmVsRW5kKGV2ZW50cykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBuZXdFdmVudHMgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgbmV3RXZlbnRzLnB1c2goZXZlbnRzW2luZGV4Ml0pOwogICAgaWYgKHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxFbmQiKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIiA/IDQgOiAyOwogICAgICB0b2tlbi50eXBlID0gImRhdGEiOwogICAgICBpbmRleDIgKz0gb2Zmc2V0OwogICAgfQogIH0KICBpZiAoZXZlbnRzLmxlbmd0aCAhPT0gbmV3RXZlbnRzLmxlbmd0aCkgewogICAgc3BsaWNlKGV2ZW50cywgMCwgZXZlbnRzLmxlbmd0aCwgbmV3RXZlbnRzKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiByZXNvbHZlVG9MYWJlbEVuZChldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IG9mZnNldCA9IDA7CiAgbGV0IHRva2VuOwogIGxldCBvcGVuOwogIGxldCBjbG9zZTc7CiAgbGV0IG1lZGlhOwogIHdoaWxlIChpbmRleDItLSkgewogICAgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmIChvcGVuKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAibGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgJiYgdG9rZW4uX2luYWN0aXZlKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiKSB7CiAgICAgICAgdG9rZW4uX2luYWN0aXZlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjbG9zZTcpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIpICYmICF0b2tlbi5fYmFsYW5jZWQpIHsKICAgICAgICBvcGVuID0gaW5kZXgyOwogICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAibGFiZWxMaW5rIikgewogICAgICAgICAgb2Zmc2V0ID0gMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxFbmQiKSB7CiAgICAgIGNsb3NlNyA9IGluZGV4MjsKICAgIH0KICB9CiAgY29uc3QgZ3JvdXAgPSB7CiAgICB0eXBlOiBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gImxhYmVsTGluayIgPyAibGluayIgOiAiaW1hZ2UiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kCiAgICB9CiAgfTsKICBjb25zdCBsYWJlbCA9IHsKICAgIHR5cGU6ICJsYWJlbCIsCiAgICBzdGFydDogewogICAgICAuLi5ldmVudHNbb3Blbl1bMV0uc3RhcnQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2Nsb3NlN11bMV0uZW5kCiAgICB9CiAgfTsKICBjb25zdCB0ZXh0OSA9IHsKICAgIHR5cGU6ICJsYWJlbFRleHQiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW4gKyBvZmZzZXQgKyAyXVsxXS5lbmQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2Nsb3NlNyAtIDJdWzFdLnN0YXJ0CiAgICB9CiAgfTsKICBtZWRpYSA9IFtbImVudGVyIiwgZ3JvdXAsIGNvbnRleHQyXSwgWyJlbnRlciIsIGxhYmVsLCBjb250ZXh0Ml1dOwogIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBvcGVuICsgb2Zmc2V0ICsgMykpOwogIG1lZGlhID0gcHVzaChtZWRpYSwgW1siZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdXSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCByZXNvbHZlQWxsKGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyBvZmZzZXQgKyA0LCBjbG9zZTcgLSAzKSwgY29udGV4dDIpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBldmVudHNbY2xvc2U3IC0gMl0sIGV2ZW50c1tjbG9zZTcgLSAxXSwgWyJleGl0IiwgbGFiZWwsIGNvbnRleHQyXV0pOwogIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKGNsb3NlNyArIDEpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImV4aXQiLCBncm91cCwgY29udGV4dDJdXSk7CiAgc3BsaWNlKGV2ZW50cywgb3BlbiwgZXZlbnRzLmxlbmd0aCwgbWVkaWEpOwogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVMYWJlbEVuZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICBsZXQgbGFiZWxTdGFydDsKICBsZXQgZGVmaW5lZDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmICgoc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxhYmVsSW1hZ2UiIHx8IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbExpbmsiKSAmJiAhc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uX2JhbGFuY2VkKSB7CiAgICAgIGxhYmVsU3RhcnQgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXTsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKCFsYWJlbFN0YXJ0KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGxhYmVsU3RhcnQuX2luYWN0aXZlKSB7CiAgICAgIHJldHVybiBsYWJlbEVuZE5vayhjb2RlNCk7CiAgICB9CiAgICBkZWZpbmVkID0gc2VsZjIucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh7CiAgICAgIHN0YXJ0OiBsYWJlbFN0YXJ0LmVuZCwKICAgICAgZW5kOiBzZWxmMi5ub3coKQogICAgfSkpKTsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsRW5kIik7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxFbmQiKTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDApIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZXNvdXJjZUNvbnN0cnVjdCwgbGFiZWxFbmRPaywgZGVmaW5lZCA/IGxhYmVsRW5kT2sgOiBsYWJlbEVuZE5vaykoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyByZWZlcmVuY2VOb3RGdWxsIDogbGFiZWxFbmROb2spKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBkZWZpbmVkID8gbGFiZWxFbmRPayhjb2RlNCkgOiBsYWJlbEVuZE5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZU5vdEZ1bGwoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQocmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBsYWJlbEVuZE5vaykoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEVuZE9rKGNvZGU0KSB7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFbmROb2soY29kZTQpIHsKICAgIGxhYmVsU3RhcnQuX2JhbGFuY2VkID0gdHJ1ZTsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlc291cmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHJlc291cmNlU3RhcnQ7CiAgZnVuY3Rpb24gcmVzb3VyY2VTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicmVzb3VyY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJyZXNvdXJjZU1hcmtlciIpOwogICAgcmV0dXJuIHJlc291cmNlQmVmb3JlOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VPcGVuKShjb2RlNCkgOiByZXNvdXJjZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oZWZmZWN0cywgcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyLCByZXNvdXJjZURlc3RpbmF0aW9uTWlzc2luZywgInJlc291cmNlRGVzdGluYXRpb24iLCAicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWwiLCAicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCAicmVzb3VyY2VEZXN0aW5hdGlvblJhdyIsICJyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nIiwgMzIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUJldHdlZW4pKGNvZGU0KSA6IHJlc291cmNlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcoY29kZTQpIHsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUJldHdlZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0MCkgewogICAgICByZXR1cm4gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIHJlc291cmNlVGl0bGVBZnRlciwgbm9rLCAicmVzb3VyY2VUaXRsZSIsICJyZXNvdXJjZVRpdGxlTWFya2VyIiwgInJlc291cmNlVGl0bGVTdHJpbmciKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZVRpdGxlQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlRW5kKShjb2RlNCkgOiByZXNvdXJjZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRW5kKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJyZXNvdXJjZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUmVmZXJlbmNlRnVsbChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gcmVmZXJlbmNlRnVsbDsKICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeUxhYmVsLmNhbGwoc2VsZjIsIGVmZmVjdHMsIHJlZmVyZW5jZUZ1bGxBZnRlciwgcmVmZXJlbmNlRnVsbE1pc3NpbmcsICJyZWZlcmVuY2UiLCAicmVmZXJlbmNlTWFya2VyIiwgInJlZmVyZW5jZVN0cmluZyIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbEFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZShzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSkpKSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsTWlzc2luZyhjb2RlNCkgewogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHJlZmVyZW5jZUNvbGxhcHNlZFN0YXJ0OwogIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZFN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlTWFya2VyIik7CiAgICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkT3BlbjsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlQ29sbGFwc2VkT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJyZWZlcmVuY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgbGFiZWxFbmQsIHJlc291cmNlQ29uc3RydWN0LCByZWZlcmVuY2VGdWxsQ29uc3RydWN0LCByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3Q7CnZhciBpbml0X2xhYmVsX2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLWVuZC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2Rlc3RpbmF0aW9uKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3doaXRlc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICAgIGxhYmVsRW5kID0gewogICAgICBuYW1lOiAibGFiZWxFbmQiLAogICAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsTGFiZWxFbmQsCiAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvTGFiZWxFbmQsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsRW5kCiAgICB9OwogICAgcmVzb3VyY2VDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlc291cmNlCiAgICB9OwogICAgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlRnVsbAogICAgfTsKICAgIHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtaW1hZ2UuanMKZnVuY3Rpb24gdG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEltYWdlIik7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbEltYWdlTWFya2VyIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgibGFiZWxJbWFnZSIpOwogICAgICByZXR1cm4gYWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gOTQgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBsYWJlbFN0YXJ0SW1hZ2U7CnZhciBpbml0X2xhYmVsX3N0YXJ0X2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtaW1hZ2UuanMiKCkgewogICAgaW5pdF9sYWJlbF9lbmQoKTsKICAgIGxhYmVsU3RhcnRJbWFnZSA9IHsKICAgICAgbmFtZTogImxhYmVsU3RhcnRJbWFnZSIsCiAgICAgIHJlc29sdmVBbGw6IGxhYmVsRW5kLnJlc29sdmVBbGwsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMKZnVuY3Rpb24gdG9rZW5pemVMYWJlbFN0YXJ0TGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsTGluayIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTGluayIpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA5NCAmJiAiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCIgaW4gc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIGxhYmVsU3RhcnRMaW5rOwp2YXIgaW5pdF9sYWJlbF9zdGFydF9saW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtbGluay5qcyIoKSB7CiAgICBpbml0X2xhYmVsX2VuZCgpOwogICAgbGFiZWxTdGFydExpbmsgPSB7CiAgICAgIG5hbWU6ICJsYWJlbFN0YXJ0TGluayIsCiAgICAgIHJlc29sdmVBbGw6IGxhYmVsRW5kLnJlc29sdmVBbGwsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGluZS1lbmRpbmcuanMKZnVuY3Rpb24gdG9rZW5pemVMaW5lRW5kaW5nKGVmZmVjdHMsIG9rMykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvazMsICJsaW5lUHJlZml4Iik7CiAgfQp9CnZhciBsaW5lRW5kaW5nOwp2YXIgaW5pdF9saW5lX2VuZGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBsaW5lRW5kaW5nID0gewogICAgICBuYW1lOiAibGluZUVuZGluZyIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpbmVFbmRpbmcKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi90aGVtYXRpYy1icmVhay5qcwpmdW5jdGlvbiB0b2tlbml6ZVRoZW1hdGljQnJlYWsoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInRoZW1hdGljQnJlYWsiKTsKICAgIHJldHVybiBiZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIG1hcmtlciA9IGNvZGU0OwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmVudGVyKCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKTsKICAgICAgcmV0dXJuIHNlcXVlbmNlKGNvZGU0KTsKICAgIH0KICAgIGlmIChzaXplID49IDMgJiYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgidGhlbWF0aWNCcmVhayIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gc2VxdWVuY2U7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpOwogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogYXRCcmVhayhjb2RlNCk7CiAgfQp9CnZhciB0aGVtYXRpY0JyZWFrMjsKdmFyIGluaXRfdGhlbWF0aWNfYnJlYWsyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHRoZW1hdGljQnJlYWsyID0gewogICAgICBuYW1lOiAidGhlbWF0aWNCcmVhayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRoZW1hdGljQnJlYWsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saXN0LmpzCmZ1bmN0aW9uIHRva2VuaXplTGlzdFN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogIGxldCBpbml0aWFsU2l6ZSA9IHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgPyB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA6IDA7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgY29uc3Qga2luZCA9IHNlbGYyLmNvbnRhaW5lclN0YXRlLnR5cGUgfHwgKGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1ID8gImxpc3RVbm9yZGVyZWQiIDogImxpc3RPcmRlcmVkIik7CiAgICBpZiAoa2luZCA9PT0gImxpc3RVbm9yZGVyZWQiID8gIXNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlNCA9PT0gc2VsZjIuY29udGFpbmVyU3RhdGUubWFya2VyIDogYXNjaWlEaWdpdChjb2RlNCkpIHsKICAgICAgaWYgKCFzZWxmMi5jb250YWluZXJTdGF0ZS50eXBlKSB7CiAgICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUudHlwZSA9IGtpbmQ7CiAgICAgICAgZWZmZWN0cy5lbnRlcihraW5kLCB7CiAgICAgICAgICBfY29udGFpbmVyOiB0cnVlCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGtpbmQgPT09ICJsaXN0VW5vcmRlcmVkIikgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4Iik7CiAgICAgICAgcmV0dXJuIGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDUgPyBlZmZlY3RzLmNoZWNrKHRoZW1hdGljQnJlYWsyLCBub2ssIGF0TWFya2VyKShjb2RlNCkgOiBhdE1hcmtlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKCFzZWxmMi5pbnRlcnJ1cHQgfHwgY29kZTQgPT09IDQ5KSB7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1QcmVmaXgiKTsKICAgICAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbVZhbHVlIik7CiAgICAgICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChhc2NpaURpZ2l0KGNvZGU0KSAmJiArK3NpemUgPCAxMCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgaWYgKCghc2VsZjIuaW50ZXJydXB0IHx8IHNpemUgPCAyKSAmJiAoc2VsZjIuY29udGFpbmVyU3RhdGUubWFya2VyID8gY29kZTQgPT09IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGNvZGU0ID09PSA0MSB8fCBjb2RlNCA9PT0gNDYpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1WYWx1ZSIpOwogICAgICByZXR1cm4gYXRNYXJrZXIoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0TWFya2VyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1NYXJrZXIiKTsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA9IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlNDsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKAogICAgICBibGFua0xpbmUsCiAgICAgIC8vIENhbuKAmXQgYmUgZW1wdHkgd2hlbiBpbnRlcnJ1cHRpbmcuCiAgICAgIHNlbGYyLmludGVycnVwdCA/IG5vayA6IG9uQmxhbmssCiAgICAgIGVmZmVjdHMuYXR0ZW1wdChsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QsIGVuZE9mUHJlZml4LCBvdGhlclByZWZpeCkKICAgICk7CiAgfQogIGZ1bmN0aW9uIG9uQmxhbmsoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUgPSB0cnVlOwogICAgaW5pdGlhbFNpemUrKzsKICAgIHJldHVybiBlbmRPZlByZWZpeChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG90aGVyUHJlZml4KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIHJldHVybiBlbmRPZlByZWZpeDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbmRPZlByZWZpeChjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSA9IGluaXRpYWxTaXplICsgc2VsZjIuc2xpY2VTZXJpYWxpemUoZWZmZWN0cy5leGl0KCJsaXN0SXRlbVByZWZpeCIpLCB0cnVlKS5sZW5ndGg7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVMaXN0Q29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB2b2lkIDA7CiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvbkJsYW5rLCBub3RCbGFuayk7CiAgZnVuY3Rpb24gb25CbGFuayhjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyB8fCBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvazMsICJsaXN0SXRlbUluZGVudCIsIHNlbGYyLmNvbnRhaW5lclN0YXRlLnNpemUgKyAxKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG5vdEJsYW5rKGNvZGU0KSB7CiAgICBpZiAoc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgIW1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gdm9pZCAwOwogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdm9pZCAwOwogICAgICByZXR1cm4gbm90SW5DdXJyZW50SXRlbShjb2RlNCk7CiAgICB9CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHZvaWQgMDsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUgPSB2b2lkIDA7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGluZGVudENvbnN0cnVjdCwgb2szLCBub3RJbkN1cnJlbnRJdGVtKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG5vdEluQ3VycmVudEl0ZW0oY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB0cnVlOwogICAgc2VsZjIuaW50ZXJydXB0ID0gdm9pZCAwOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBlZmZlY3RzLmF0dGVtcHQobGlzdDMsIG9rMywgbm9rKSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUluZGVudChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAibGlzdEl0ZW1JbmRlbnQiLCBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplICsgMSk7CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGlzdEl0ZW1JbmRlbnQiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdEVuZChlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSk7Cn0KZnVuY3Rpb24gdG9rZW5pemVMaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIsIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0ICsgMSk7CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuICFtYXJrZG93blNwYWNlKGNvZGU0KSAmJiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGxpc3QzLCBsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QsIGluZGVudENvbnN0cnVjdDsKdmFyIGluaXRfbGlzdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saXN0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X2JsYW5rX2xpbmUoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsyKCk7CiAgICBsaXN0MyA9IHsKICAgICAgY29udGludWF0aW9uOiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdENvbnRpbnVhdGlvbgogICAgICB9LAogICAgICBleGl0OiB0b2tlbml6ZUxpc3RFbmQsCiAgICAgIG5hbWU6ICJsaXN0IiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdFN0YXJ0CiAgICB9OwogICAgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UKICAgIH07CiAgICBpbmRlbnRDb25zdHJ1Y3QgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUluZGVudAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3NldGV4dC11bmRlcmxpbmUuanMKZnVuY3Rpb24gcmVzb2x2ZVRvU2V0ZXh0VW5kZXJsaW5lKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgY29udGVudDM7CiAgbGV0IHRleHQ5OwogIGxldCBkZWZpbml0aW9uMzsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgY29udGVudDMgPSBpbmRleDI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJwYXJhZ3JhcGgiKSB7CiAgICAgICAgdGV4dDkgPSBpbmRleDI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiY29udGVudCIpIHsKICAgICAgICBldmVudHMuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgIH0KICAgICAgaWYgKCFkZWZpbml0aW9uMyAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiZGVmaW5pdGlvbiIpIHsKICAgICAgICBkZWZpbml0aW9uMyA9IGluZGV4MjsKICAgICAgfQogICAgfQogIH0KICBjb25zdCBoZWFkaW5nMyA9IHsKICAgIHR5cGU6ICJzZXRleHRIZWFkaW5nIiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tjb250ZW50M11bMV0uc3RhcnQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5lbmQKICAgIH0KICB9OwogIGV2ZW50c1t0ZXh0OV1bMV0udHlwZSA9ICJzZXRleHRIZWFkaW5nVGV4dCI7CiAgaWYgKGRlZmluaXRpb24zKSB7CiAgICBldmVudHMuc3BsaWNlKHRleHQ5LCAwLCBbImVudGVyIiwgaGVhZGluZzMsIGNvbnRleHQyXSk7CiAgICBldmVudHMuc3BsaWNlKGRlZmluaXRpb24zICsgMSwgMCwgWyJleGl0IiwgZXZlbnRzW2NvbnRlbnQzXVsxXSwgY29udGV4dDJdKTsKICAgIGV2ZW50c1tjb250ZW50M11bMV0uZW5kID0gewogICAgICAuLi5ldmVudHNbZGVmaW5pdGlvbjNdWzFdLmVuZAogICAgfTsKICB9IGVsc2UgewogICAgZXZlbnRzW2NvbnRlbnQzXVsxXSA9IGhlYWRpbmczOwogIH0KICBldmVudHMucHVzaChbImV4aXQiLCBoZWFkaW5nMywgY29udGV4dDJdKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplU2V0ZXh0VW5kZXJsaW5lKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgIGxldCBwYXJhZ3JhcGgzOwogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAibGluZUVuZGluZyIgJiYgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVQcmVmaXgiICYmIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJjb250ZW50IikgewogICAgICAgIHBhcmFncmFwaDMgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAicGFyYWdyYXBoIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSAmJiAoc2VsZjIuaW50ZXJydXB0IHx8IHBhcmFncmFwaDMpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIik7CiAgICAgIG1hcmtlciA9IGNvZGU0OwogICAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKTsKICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgImxpbmVTdWZmaXgiKShjb2RlNCkgOiBhZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBzZXRleHRVbmRlcmxpbmU7CnZhciBpbml0X3NldGV4dF91bmRlcmxpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBzZXRleHRVbmRlcmxpbmUgPSB7CiAgICAgIG5hbWU6ICJzZXRleHRVbmRlcmxpbmUiLAogICAgICByZXNvbHZlVG86IHJlc29sdmVUb1NldGV4dFVuZGVybGluZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplU2V0ZXh0VW5kZXJsaW5lCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2F0dGVudGlvbigpOwogICAgaW5pdF9hdXRvbGluaygpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBpbml0X2Jsb2NrX3F1b3RlKCk7CiAgICBpbml0X2NoYXJhY3Rlcl9lc2NhcGUoKTsKICAgIGluaXRfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9jb2RlX2ZlbmNlZCgpOwogICAgaW5pdF9jb2RlX2luZGVudGVkKCk7CiAgICBpbml0X2NvZGVfdGV4dCgpOwogICAgaW5pdF9jb250ZW50KCk7CiAgICBpbml0X2RlZmluaXRpb24yKCk7CiAgICBpbml0X2hhcmRfYnJlYWtfZXNjYXBlKCk7CiAgICBpbml0X2hlYWRpbmdfYXR4KCk7CiAgICBpbml0X2h0bWxfZmxvdygpOwogICAgaW5pdF9odG1sX3RleHQoKTsKICAgIGluaXRfbGFiZWxfZW5kKCk7CiAgICBpbml0X2xhYmVsX3N0YXJ0X2ltYWdlKCk7CiAgICBpbml0X2xhYmVsX3N0YXJ0X2xpbmsoKTsKICAgIGluaXRfbGluZV9lbmRpbmcoKTsKICAgIGluaXRfbGlzdDIoKTsKICAgIGluaXRfc2V0ZXh0X3VuZGVybGluZSgpOwogICAgaW5pdF90aGVtYXRpY19icmVhazIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbUZvb3Rub3RlKCkgewogIHJldHVybiB7CiAgICBkb2N1bWVudDogewogICAgICBbOTFdOiB7CiAgICAgICAgbmFtZTogImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvblN0YXJ0LAogICAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgICAgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvbkNvbnRpbnVhdGlvbgogICAgICAgIH0sCiAgICAgICAgZXhpdDogZ2ZtRm9vdG5vdGVEZWZpbml0aW9uRW5kCiAgICAgIH0KICAgIH0sCiAgICB0ZXh0OiB7CiAgICAgIFs5MV06IHsKICAgICAgICBuYW1lOiAiZ2ZtRm9vdG5vdGVDYWxsIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVHZm1Gb290bm90ZUNhbGwKICAgICAgfSwKICAgICAgWzkzXTogewogICAgICAgIG5hbWU6ICJnZm1Qb3RlbnRpYWxGb290bm90ZUNhbGwiLAogICAgICAgIGFkZDogImFmdGVyIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwsCiAgICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9Qb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IGxhYmVsU3RhcnQ7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCB0b2tlbiA9IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdOwogICAgaWYgKHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIikgewogICAgICBsYWJlbFN0YXJ0ID0gdG9rZW47CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHRva2VuLnR5cGUgPT09ICJnZm1Gb290bm90ZUNhbGwiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbCIgfHwgdG9rZW4udHlwZSA9PT0gImltYWdlIiB8fCB0b2tlbi50eXBlID09PSAibGluayIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKCFsYWJlbFN0YXJ0IHx8ICFsYWJlbFN0YXJ0Ll9iYWxhbmNlZCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh7CiAgICAgIHN0YXJ0OiBsYWJlbFN0YXJ0LmVuZCwKICAgICAgZW5kOiBzZWxmMi5ub3coKQogICAgfSkpOwogICAgaWYgKGlkLmNvZGVQb2ludEF0KDApICE9PSA5NCB8fCAhZGVmaW5lZC5pbmNsdWRlcyhpZC5zbGljZSgxKSkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiByZXNvbHZlVG9Qb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCBsYWJlbFN0YXJ0OwogIHdoaWxlIChpbmRleDItLSkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbEltYWdlIiAmJiBldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICBsYWJlbFN0YXJ0ID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBldmVudHNbaW5kZXgyICsgMV1bMV0udHlwZSA9ICJkYXRhIjsKICBldmVudHNbaW5kZXgyICsgM11bMV0udHlwZSA9ICJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciI7CiAgY29uc3QgY2FsbCA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGwiLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5zdGFydCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kKQogIH07CiAgY29uc3QgbWFya2VyID0gewogICAgdHlwZTogImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4MiArIDNdWzFdLmVuZCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5lbmQpCiAgfTsKICBtYXJrZXIuZW5kLmNvbHVtbisrOwogIG1hcmtlci5lbmQub2Zmc2V0Kys7CiAgbWFya2VyLmVuZC5fYnVmZmVySW5kZXgrKzsKICBjb25zdCBzdHJpbmczID0gewogICAgdHlwZTogImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbWFya2VyLmVuZCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uc3RhcnQpCiAgfTsKICBjb25zdCBjaHVuayA9IHsKICAgIHR5cGU6ICJjaHVua1N0cmluZyIsCiAgICBjb250ZW50VHlwZTogInN0cmluZyIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgc3RyaW5nMy5zdGFydCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHN0cmluZzMuZW5kKQogIH07CiAgY29uc3QgcmVwbGFjZW1lbnQgPSBbCiAgICAvLyBUYWtlIHRoZSBgbGFiZWxJbWFnZU1hcmtlcmAgKG5vdyBgZGF0YWAsIHRoZSBgIWApCiAgICBldmVudHNbaW5kZXgyICsgMV0sCiAgICBldmVudHNbaW5kZXgyICsgMl0sCiAgICBbImVudGVyIiwgY2FsbCwgY29udGV4dDJdLAogICAgLy8gVGhlIGBbYAogICAgZXZlbnRzW2luZGV4MiArIDNdLAogICAgZXZlbnRzW2luZGV4MiArIDRdLAogICAgLy8gVGhlIGBeYC4KICAgIFsiZW50ZXIiLCBtYXJrZXIsIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIG1hcmtlciwgY29udGV4dDJdLAogICAgLy8gRXZlcnl0aGluZyBpbiBiZXR3ZWVuLgogICAgWyJlbnRlciIsIHN0cmluZzMsIGNvbnRleHQyXSwKICAgIFsiZW50ZXIiLCBjaHVuaywgY29udGV4dDJdLAogICAgWyJleGl0IiwgY2h1bmssIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIHN0cmluZzMsIGNvbnRleHQyXSwKICAgIC8vIFRoZSBlbmRpbmcgKGBdYCwgcHJvcGVybHkgcGFyc2VkIGFuZCBsYWJlbGxlZCkuCiAgICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdLAogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXSwKICAgIFsiZXhpdCIsIGNhbGwsIGNvbnRleHQyXQogIF07CiAgZXZlbnRzLnNwbGljZShpbmRleDIsIGV2ZW50cy5sZW5ndGggLSBpbmRleDIgKyAxLCAuLi5yZXBsYWNlbWVudCk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUdmbUZvb3Rub3RlQ2FsbChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBkZWZpbmVkID0gc2VsZjIucGFyc2VyLmdmbUZvb3Rub3RlcyB8fCAoc2VsZjIucGFyc2VyLmdmbUZvb3Rub3RlcyA9IFtdKTsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IGRhdGE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGwiKTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgcmV0dXJuIGNhbGxTdGFydDsKICB9CiAgZnVuY3Rpb24gY2FsbFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgIT09IDk0KSByZXR1cm4gbm9rKGNvZGU0KTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIik7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGUgPSAic3RyaW5nIjsKICAgIHJldHVybiBjYWxsRGF0YTsKICB9CiAgZnVuY3Rpb24gY2FsbERhdGEoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YSB8fCAvLyBTcGFjZSBvciB0YWIgaXMgbm90IHN1cHBvcnRlZCBieSBHRk0gZm9yIHNvbWUgcmVhc29uLgogICAgICAvLyBgXG5gIGFuZCBgW2Agbm90IGJlaW5nIHN1cHBvcnRlZCBtYWtlcyBzZW5zZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIpOwogICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKSkgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGwiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmICghbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICB9CiAgICBzaXplKys7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGNhbGxFc2NhcGUgOiBjYWxsRGF0YTsKICB9CiAgZnVuY3Rpb24gY2FsbEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIGNhbGxEYXRhOwogICAgfQogICAgcmV0dXJuIGNhbGxEYXRhKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uU3RhcnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IGlkZW50aWZpZXI7CiAgbGV0IHNpemUgPSAwOwogIGxldCBkYXRhOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIikuX2NvbnRhaW5lciA9IHRydWU7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICByZXR1cm4gbGFiZWxBdE1hcmtlcjsKICB9CiAgZnVuY3Rpb24gbGFiZWxBdE1hcmtlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NCkgewogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKTsKICAgICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciKS5jb250ZW50VHlwZSA9ICJzdHJpbmciOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxJbnNpZGUoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YSB8fCAvLyBTcGFjZSBvciB0YWIgaXMgbm90IHN1cHBvcnRlZCBieSBHRk0gZm9yIHNvbWUgcmVhc29uLgogICAgICAvLyBgXG5gIGFuZCBgW2Agbm90IGJlaW5nIHN1cHBvcnRlZCBtYWtlcyBzZW5zZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nIik7CiAgICAgIGlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYyLnNsaWNlU2VyaWFsaXplKHRva2VuKSk7CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpOwogICAgICByZXR1cm4gbGFiZWxBZnRlcjsKICAgIH0KICAgIGlmICghbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICB9CiAgICBzaXplKys7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImRlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGlmICghZGVmaW5lZC5pbmNsdWRlcyhpZGVudGlmaWVyKSkgewogICAgICAgIGRlZmluZWQucHVzaChpZGVudGlmaWVyKTsKICAgICAgfQogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHdoaXRlc3BhY2VBZnRlciwgImdmbUZvb3Rub3RlRGVmaW5pdGlvbldoaXRlc3BhY2UiKTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB3aGl0ZXNwYWNlQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZURlZmluaXRpb25Db250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmUsIG9rMywgZWZmZWN0cy5hdHRlbXB0KGluZGVudDIsIG9rMywgbm9rKSk7Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVEZWZpbml0aW9uRW5kKGVmZmVjdHMpIHsKICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIpOwp9CmZ1bmN0aW9uIHRva2VuaXplSW5kZW50MihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uSW5kZW50IiwgNCArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPT09IDQgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGluZGVudDI7CnZhciBpbml0X3N5bnRheDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19jb3JlX2NvbW1vbm1hcmsoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbmRlbnQyID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQyLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGRlZmF1bHRCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpIHsKICByZXR1cm4gIkJhY2sgdG8gcmVmZXJlbmNlICIgKyAocmVmZXJlbmNlSW5kZXggKyAxKSArIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICItIiArIHJlcmVmZXJlbmNlSW5kZXggOiAiIik7Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVIdG1sKG9wdGlvbnMpIHsKICBjb25zdCBjb25maWczID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnMyOwogIGNvbnN0IGxhYmVsID0gY29uZmlnMy5sYWJlbCB8fCAiRm9vdG5vdGVzIjsKICBjb25zdCBsYWJlbFRhZ05hbWUgPSBjb25maWczLmxhYmVsVGFnTmFtZSB8fCAiaDIiOwogIGNvbnN0IGxhYmVsQXR0cmlidXRlcyA9IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzID09PSBudWxsIHx8IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzID09PSB2b2lkIDAgPyAnY2xhc3M9InNyLW9ubHkiJyA6IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzOwogIGNvbnN0IGJhY2tMYWJlbCA9IGNvbmZpZzMuYmFja0xhYmVsIHx8IGRlZmF1bHRCYWNrTGFiZWw7CiAgY29uc3QgY2xvYmJlclByZWZpeCA9IGNvbmZpZzMuY2xvYmJlclByZWZpeCA9PT0gbnVsbCB8fCBjb25maWczLmNsb2JiZXJQcmVmaXggPT09IHZvaWQgMCA/ICJ1c2VyLWNvbnRlbnQtIiA6IGNvbmZpZzMuY2xvYmJlclByZWZpeDsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkgewogICAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIik7CiAgICAgICAgc3RhY2sucHVzaChmYWxzZSk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCkgewogICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZygpIHsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9CiAgICB9LAogICAgZXhpdDogewogICAgICBnZm1Gb290bm90ZURlZmluaXRpb24oKSB7CiAgICAgICAgbGV0IGRlZmluaXRpb25zID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIik7CiAgICAgICAgY29uc3QgZm9vdG5vdGVTdGFjayA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uU3RhY2siKTsKICAgICAgICBjb25zdCB0aWdodFN0YWNrID0gdGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIik7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGZvb3Rub3RlU3RhY2sucG9wKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXN1bWUoKTsKICAgICAgICBpZiAoIWRlZmluaXRpb25zKSB7CiAgICAgICAgICB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiLCBkZWZpbml0aW9ucyA9IHt9KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFvd240LmNhbGwoZGVmaW5pdGlvbnMsIGN1cnJlbnQpKSBkZWZpbml0aW9uc1tjdXJyZW50XSA9IHZhbHVlMjsKICAgICAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgICAgIHRoaXMuc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIiwgdHJ1ZSk7CiAgICAgICAgdGhpcy5zZXREYXRhKCJsYXN0V2FzVGFnIik7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7CiAgICAgICAgbGV0IGZvb3Rub3RlU3RhY2sgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7CiAgICAgICAgaWYgKCFmb290bm90ZVN0YWNrKSB7CiAgICAgICAgICB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIiwgZm9vdG5vdGVTdGFjayA9IFtdKTsKICAgICAgICB9CiAgICAgICAgZm9vdG5vdGVTdGFjay5wdXNoKG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICAgICAgICB0aGlzLnJlc3VtZSgpOwogICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikgewogICAgICAgIGxldCBjYWxscyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiKTsKICAgICAgICBsZXQgY291bnRzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKTsKICAgICAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpOwogICAgICAgIGxldCBjb3VudGVyMjsKICAgICAgICB0aGlzLnJlc3VtZSgpOwogICAgICAgIGlmICghY2FsbHMpIHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiLCBjYWxscyA9IFtdKTsKICAgICAgICBpZiAoIWNvdW50cykgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiLCBjb3VudHMgPSB7fSk7CiAgICAgICAgY29uc3QgaW5kZXgyID0gY2FsbHMuaW5kZXhPZihpZCk7CiAgICAgICAgY29uc3Qgc2FmZUlkID0gc2FuaXRpemVVcmkoaWQudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgICAgIGNhbGxzLnB1c2goaWQpOwogICAgICAgICAgY291bnRzW2lkXSA9IDE7CiAgICAgICAgICBjb3VudGVyMiA9IGNhbGxzLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY291bnRzW2lkXSsrOwogICAgICAgICAgY291bnRlcjIgPSBpbmRleDIgKyAxOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXVzZUNvdW50ZXIgPSBjb3VudHNbaWRdOwogICAgICAgIHRoaXMudGFnKCc8c3VwPjxhIGhyZWY9IiMnICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkICsgJyIgaWQ9IicgKyBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmV1c2VDb3VudGVyID4gMSA/ICItIiArIHJldXNlQ291bnRlciA6ICIiKSArICciIGRhdGEtZm9vdG5vdGUtcmVmPSIiIGFyaWEtZGVzY3JpYmVkYnk9ImZvb3Rub3RlLWxhYmVsIj4nICsgU3RyaW5nKGNvdW50ZXIyKSArICI8L2E+PC9zdXA+Iik7CiAgICAgIH0sCiAgICAgIG51bGwoKSB7CiAgICAgICAgY29uc3QgY2FsbHMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIikgfHwgW107CiAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKSB8fCB7fTsKICAgICAgICBjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpIHx8IHt9OwogICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICBpZiAoY2FsbHMubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCc8c2VjdGlvbiBkYXRhLWZvb3Rub3Rlcz0iIiBjbGFzcz0iZm9vdG5vdGVzIj48JyArIGxhYmVsVGFnTmFtZSArICcgaWQ9ImZvb3Rub3RlLWxhYmVsIicgKyAobGFiZWxBdHRyaWJ1dGVzID8gIiAiICsgbGFiZWxBdHRyaWJ1dGVzIDogIiIpICsgIj4iKTsKICAgICAgICAgIHRoaXMucmF3KHRoaXMuZW5jb2RlKGxhYmVsKSk7CiAgICAgICAgICB0aGlzLnRhZygiPC8iICsgbGFiZWxUYWdOYW1lICsgIj4iKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPG9sPiIpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBjYWxscy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IGlkID0gY2FsbHNbaW5kZXgyXTsKICAgICAgICAgIGNvbnN0IHNhZmVJZCA9IHNhbml0aXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgICAgICAgbGV0IHJlZmVyZW5jZUluZGV4ID0gMDsKICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbXTsKICAgICAgICAgIHdoaWxlICgrK3JlZmVyZW5jZUluZGV4IDw9IGNvdW50c1tpZF0pIHsKICAgICAgICAgICAgcmVmZXJlbmNlcy5wdXNoKCc8YSBocmVmPSIjJyArIGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZWZlcmVuY2VJbmRleCA6ICIiKSArICciIGRhdGEtZm9vdG5vdGUtYmFja3JlZj0iIiBhcmlhLWxhYmVsPSInICsgdGhpcy5lbmNvZGUodHlwZW9mIGJhY2tMYWJlbCA9PT0gInN0cmluZyIgPyBiYWNrTGFiZWwgOiBiYWNrTGFiZWwoaW5kZXgyLCByZWZlcmVuY2VJbmRleCkpICsgJyIgY2xhc3M9ImRhdGEtZm9vdG5vdGUtYmFja3JlZiI+XHUyMUE5JyArIChyZWZlcmVuY2VJbmRleCA+IDEgPyAiPHN1cD4iICsgcmVmZXJlbmNlSW5kZXggKyAiPC9zdXA+IiA6ICIiKSArICI8L2E+Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmpvaW4oIiAiKTsKICAgICAgICAgIGxldCBpbmplY3RlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCc8bGkgaWQ9IicgKyBjbG9iYmVyUHJlZml4ICsgImZuLSIgKyBzYWZlSWQgKyAnIj4nKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZyhkZWZpbml0aW9uc1tpZF0ucmVwbGFjZSgvPFwvcD4oPzpccj9cbnxccik/JC8sIGZ1bmN0aW9uKCQwKSB7CiAgICAgICAgICAgIGluamVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuICIgIiArIHJlZmVyZW5jZSArICQwOwogICAgICAgICAgfSkpOwogICAgICAgICAgaWYgKCFpbmplY3RlZCkgewogICAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgICB0aGlzLnRhZyhyZWZlcmVuY2UpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L2xpPiIpOwogICAgICAgIH0KICAgICAgICBpZiAoY2FsbHMubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L29sPiIpOwogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L3NlY3Rpb24+Iik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKfQp2YXIgb3duNCwgZW1wdHlPcHRpb25zMjsKdmFyIGluaXRfaHRtbDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL2h0bWwuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICAgIG93bjQgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGVtcHR5T3B0aW9uczIgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9mb290bm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheDIoKTsKICAgIGluaXRfaHRtbDMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaEh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHN0cmlrZXRocm91Z2goKSB7CiAgICAgICAgdGhpcy50YWcoIjxkZWw+Iik7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIHN0cmlrZXRocm91Z2goKSB7CiAgICAgICAgdGhpcy50YWcoIjwvZGVsPiIpOwogICAgICB9CiAgICB9CiAgfTsKfQp2YXIgaW5pdF9odG1sNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2gob3B0aW9ucykgewogIGNvbnN0IG9wdGlvbnNfID0gb3B0aW9ucyB8fCB7fTsKICBsZXQgc2luZ2xlMiA9IG9wdGlvbnNfLnNpbmdsZVRpbGRlOwogIGNvbnN0IHRva2VuaXplciA9IHsKICAgIG5hbWU6ICJzdHJpa2V0aHJvdWdoIiwKICAgIHRva2VuaXplOiB0b2tlbml6ZVN0cmlrZXRocm91Z2gsCiAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsU3RyaWtldGhyb3VnaAogIH07CiAgaWYgKHNpbmdsZTIgPT09IG51bGwgfHwgc2luZ2xlMiA9PT0gdm9pZCAwKSB7CiAgICBzaW5nbGUyID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHsKICAgIHRleHQ6IHsKICAgICAgWzEyNl06IHRva2VuaXplcgogICAgfSwKICAgIGluc2lkZVNwYW46IHsKICAgICAgbnVsbDogW3Rva2VuaXplcl0KICAgIH0sCiAgICBhdHRlbnRpb25NYXJrZXJzOiB7CiAgICAgIG51bGw6IFsxMjZdCiAgICB9CiAgfTsKICBmdW5jdGlvbiByZXNvbHZlQWxsU3RyaWtldGhyb3VnaChldmVudHMsIGNvbnRleHQyKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiAmJiBldmVudHNbaW5kZXgyXVsxXS5fY2xvc2UpIHsKICAgICAgICBsZXQgb3BlbiA9IGluZGV4MjsKICAgICAgICB3aGlsZSAob3Blbi0tKSB7CiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzBdID09PSAiZXhpdCIgJiYgZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJiAvLyBJZiB0aGUgc2l6ZXMgYXJlIHRoZSBzYW1lOgogICAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA9PT0gZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPSAic3RyaWtldGhyb3VnaFNlcXVlbmNlIjsKICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLnR5cGUgPSAic3RyaWtldGhyb3VnaFNlcXVlbmNlIjsKICAgICAgICAgICAgY29uc3Qgc3RyaWtldGhyb3VnaDMgPSB7CiAgICAgICAgICAgICAgdHlwZTogInN0cmlrZXRocm91Z2giLAogICAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uc3RhcnQpLAogICAgICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4Ml1bMV0uZW5kKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCB0ZXh0OSA9IHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaWtldGhyb3VnaFRleHQiLAogICAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uZW5kKSwKICAgICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCBuZXh0RXZlbnRzID0gW1siZW50ZXIiLCBzdHJpa2V0aHJvdWdoMywgY29udGV4dDJdLCBbImVudGVyIiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV07CiAgICAgICAgICAgIGNvbnN0IGluc2lkZVNwYW4yID0gY29udGV4dDIucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsOwogICAgICAgICAgICBpZiAoaW5zaWRlU3BhbjIpIHsKICAgICAgICAgICAgICBzcGxpY2UobmV4dEV2ZW50cywgbmV4dEV2ZW50cy5sZW5ndGgsIDAsIHJlc29sdmVBbGwoaW5zaWRlU3BhbjIsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgaW5kZXgyKSwgY29udGV4dDIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzcGxpY2UobmV4dEV2ZW50cywgbmV4dEV2ZW50cy5sZW5ndGgsIDAsIFtbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImVudGVyIiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0Iiwgc3RyaWtldGhyb3VnaDMsIGNvbnRleHQyXV0pOwogICAgICAgICAgICBzcGxpY2UoZXZlbnRzLCBvcGVuIC0gMSwgaW5kZXgyIC0gb3BlbiArIDMsIG5leHRFdmVudHMpOwogICAgICAgICAgICBpbmRleDIgPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpIHsKICAgICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gImRhdGEiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZlbnRzOwogIH0KICBmdW5jdGlvbiB0b2tlbml6ZVN0cmlrZXRocm91Z2goZWZmZWN0cywgb2szLCBub2spIHsKICAgIGNvbnN0IHByZXZpb3VzMyA9IHRoaXMucHJldmlvdXM7CiAgICBjb25zdCBldmVudHMgPSB0aGlzLmV2ZW50czsKICAgIGxldCBzaXplID0gMDsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIGlmIChwcmV2aW91czMgPT09IDEyNiAmJiBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnR5cGUgIT09ICJjaGFyYWN0ZXJFc2NhcGUiKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5Iik7CiAgICAgIHJldHVybiBtb3JlKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG1vcmUoY29kZTQpIHsKICAgICAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMzKTsKICAgICAgaWYgKGNvZGU0ID09PSAxMjYpIHsKICAgICAgICBpZiAoc2l6ZSA+IDEpIHJldHVybiBub2soY29kZTQpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgc2l6ZSsrOwogICAgICAgIHJldHVybiBtb3JlOwogICAgICB9CiAgICAgIGlmIChzaXplIDwgMiAmJiAhc2luZ2xlMikgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiKTsKICAgICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCk7CiAgICAgIHRva2VuLl9vcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIEJvb2xlYW4oYmVmb3JlKTsKICAgICAgdG9rZW4uX2Nsb3NlID0gIWJlZm9yZSB8fCBiZWZvcmUgPT09IDIgJiYgQm9vbGVhbihhZnRlcik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogIH0KfQp2YXIgaW5pdF9zeW50YXgzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvc3ludGF4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fc3RyaWtldGhyb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMiKCkgewogICAgaW5pdF9odG1sNCgpOwogICAgaW5pdF9zeW50YXgzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtVGFibGVIdG1sKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICB0YWJsZSh0b2tlbikgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0b2tlbi5fYWxpZ247CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRhYmxlPiIpOwogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVBbGlnbiIsIHRhYmxlQWxpZ24pOwogICAgICB9LAogICAgICB0YWJsZUJvZHkoKSB7CiAgICAgICAgdGhpcy50YWcoIjx0Ym9keT4iKTsKICAgICAgfSwKICAgICAgdGFibGVEYXRhKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBjb25zdCBhbGlnbiA9IGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV07CiAgICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPHRkIiArIGFsaWduICsgIj4iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZCgpIHsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8dGhlYWQ+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZGVyKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBjb25zdCBhbGlnbiA9IGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV07CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRoIiArIGFsaWduICsgIj4iKTsKICAgICAgfSwKICAgICAgdGFibGVSb3coKSB7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIDApOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0cj4iKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZWZhdWx0IGNvZGUgdGV4dCBkYXRhIGhhbmRsZXIgdG8gdW5lc2NhcGUgZXNjYXBlZCBwaXBlcyB3aGVuCiAgICAgIC8vIHRoZXkgYXJlIGluIHRhYmxlcy4KICAgICAgY29kZVRleHREYXRhKHRva2VuKSB7CiAgICAgICAgbGV0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgICAgIGlmICh0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKSkgewogICAgICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1xcKFtcXHxdKS9nLCByZXBsYWNlMik7CiAgICAgICAgfQogICAgICAgIHRoaXMucmF3KHRoaXMuZW5jb2RlKHZhbHVlMikpOwogICAgICB9LAogICAgICB0YWJsZSgpIHsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICB0aGlzLnNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8L3RhYmxlPiIpOwogICAgICB9LAogICAgICB0YWJsZUJvZHkoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90Ym9keT4iKTsKICAgICAgfSwKICAgICAgdGFibGVEYXRhKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBpZiAodGFibGVDb2x1bW4gaW4gdGFibGVBbGlnbikgewogICAgICAgICAgdGhpcy50YWcoIjwvdGQ+Iik7CiAgICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4gKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZCgpIHsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8L3RoZWFkPiIpOwogICAgICB9LAogICAgICB0YWJsZUhlYWRlcigpIHsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICB0aGlzLnRhZygiPC90aD4iKTsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4gKyAxKTsKICAgICAgfSwKICAgICAgdGFibGVSb3coKSB7CiAgICAgICAgY29uc3QgdGFibGVBbGlnbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpOwogICAgICAgIGxldCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICB3aGlsZSAodGFibGVDb2x1bW4gPCB0YWJsZUFsaWduLmxlbmd0aCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8dGQiICsgYWxpZ25tZW50W3RhYmxlQWxpZ25bdGFibGVDb2x1bW5dXSArICI+PC90ZD4iKTsKICAgICAgICAgIHRhYmxlQ29sdW1uKys7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLCB0YWJsZUNvbHVtbik7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90cj4iKTsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gcmVwbGFjZTIoJDAsICQxKSB7CiAgcmV0dXJuICQxID09PSAifCIgPyAkMSA6ICQwOwp9CnZhciBhbGlnbm1lbnQ7CnZhciBpbml0X2h0bWw1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9odG1sLmpzIigpIHsKICAgIGFsaWdubWVudCA9IHsKICAgICAgbm9uZTogIiIsCiAgICAgIGxlZnQ6ICcgYWxpZ249ImxlZnQiJywKICAgICAgcmlnaHQ6ICcgYWxpZ249InJpZ2h0IicsCiAgICAgIGNlbnRlcjogJyBhbGlnbj0iY2VudGVyIicKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2VkaXQtbWFwLmpzCmZ1bmN0aW9uIGFkZEltcGxlbWVudGF0aW9uKGVkaXRNYXAsIGF0LCByZW1vdmUyLCBhZGQzKSB7CiAgbGV0IGluZGV4MiA9IDA7CiAgaWYgKHJlbW92ZTIgPT09IDAgJiYgYWRkMy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybjsKICB9CiAgd2hpbGUgKGluZGV4MiA8IGVkaXRNYXAubWFwLmxlbmd0aCkgewogICAgaWYgKGVkaXRNYXAubWFwW2luZGV4Ml1bMF0gPT09IGF0KSB7CiAgICAgIGVkaXRNYXAubWFwW2luZGV4Ml1bMV0gKz0gcmVtb3ZlMjsKICAgICAgZWRpdE1hcC5tYXBbaW5kZXgyXVsyXS5wdXNoKC4uLmFkZDMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbmRleDIgKz0gMTsKICB9CiAgZWRpdE1hcC5tYXAucHVzaChbYXQsIHJlbW92ZTIsIGFkZDNdKTsKfQp2YXIgRWRpdE1hcDsKdmFyIGluaXRfZWRpdF9tYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2VkaXQtbWFwLmpzIigpIHsKICAgIEVkaXRNYXAgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBuZXcgZWRpdCBtYXAuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm1hcCA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYW4gZWRpdDogYSByZW1vdmUgYW5kL29yIGFkZCBhdCBhIGNlcnRhaW4gcGxhY2UuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBhZGQKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICovCiAgICAgIGFkZChpbmRleDIsIHJlbW92ZTIsIGFkZDMpIHsKICAgICAgICBhZGRJbXBsZW1lbnRhdGlvbih0aGlzLCBpbmRleDIsIHJlbW92ZTIsIGFkZDMpOwogICAgICB9CiAgICAgIC8vIFRvIGRvOiBhZGQgdGhpcyB3aGVuIG1vdmluZyB0byBgbWljcm9tYXJrYC4KICAgICAgLy8gLyoqCiAgICAgIC8vICAqIENyZWF0ZSBhbiBlZGl0OiBidXQgaW5zZXJ0IGBhZGRgIGJlZm9yZSBleGlzdGluZyBhZGRpdGlvbnMuCiAgICAgIC8vICAqCiAgICAgIC8vICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICAvLyAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlCiAgICAgIC8vICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBhZGQKICAgICAgLy8gICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgLy8gICovCiAgICAgIC8vIGFkZEJlZm9yZShpbmRleCwgcmVtb3ZlLCBhZGQpIHsKICAgICAgLy8gICBhZGRJbXBsZW1lbnRhdGlvbih0aGlzLCBpbmRleCwgcmVtb3ZlLCBhZGQsIHRydWUpCiAgICAgIC8vIH0KICAgICAgLyoqCiAgICAgICAqIERvbmUsIGNoYW5nZSB0aGUgZXZlbnRzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqLwogICAgICBjb25zdW1lKGV2ZW50cykgewogICAgICAgIHRoaXMubWFwLnNvcnQoZnVuY3Rpb24oYTUsIGI1KSB7CiAgICAgICAgICByZXR1cm4gYTVbMF0gLSBiNVswXTsKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5tYXAubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBpbmRleDIgPSB0aGlzLm1hcC5sZW5ndGg7CiAgICAgICAgY29uc3QgdmVjcyA9IFtdOwogICAgICAgIHdoaWxlIChpbmRleDIgPiAwKSB7CiAgICAgICAgICBpbmRleDIgLT0gMTsKICAgICAgICAgIHZlY3MucHVzaChldmVudHMuc2xpY2UodGhpcy5tYXBbaW5kZXgyXVswXSArIHRoaXMubWFwW2luZGV4Ml1bMV0pLCB0aGlzLm1hcFtpbmRleDJdWzJdKTsKICAgICAgICAgIGV2ZW50cy5sZW5ndGggPSB0aGlzLm1hcFtpbmRleDJdWzBdOwogICAgICAgIH0KICAgICAgICB2ZWNzLnB1c2goZXZlbnRzLnNsaWNlKCkpOwogICAgICAgIGV2ZW50cy5sZW5ndGggPSAwOwogICAgICAgIGxldCBzbGljZSA9IHZlY3MucG9wKCk7CiAgICAgICAgd2hpbGUgKHNsaWNlKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQ0IG9mIHNsaWNlKSB7CiAgICAgICAgICAgIGV2ZW50cy5wdXNoKGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNsaWNlID0gdmVjcy5wb3AoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5tYXAubGVuZ3RoID0gMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMKZnVuY3Rpb24gZ2ZtVGFibGVBbGlnbihldmVudHMsIGluZGV4MikgewogIGxldCBpbkRlbGltaXRlclJvdyA9IGZhbHNlOwogIGNvbnN0IGFsaWduID0gW107CiAgd2hpbGUgKGluZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgICBpZiAoaW5EZWxpbWl0ZXJSb3cpIHsKICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZUNvbnRlbnQiKSB7CiAgICAgICAgICBhbGlnbi5wdXNoKGV2ZW50c1tpbmRleDIgKyAxXVsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiID8gImxlZnQiIDogIm5vbmUiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlQ29udGVudCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4MiAtIDFdWzFdLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlck1hcmtlciIpIHsKICAgICAgICAgIGNvbnN0IGFsaWduSW5kZXggPSBhbGlnbi5sZW5ndGggLSAxOwogICAgICAgICAgYWxpZ25bYWxpZ25JbmRleF0gPSBhbGlnblthbGlnbkluZGV4XSA9PT0gImxlZnQiID8gImNlbnRlciIgOiAicmlnaHQiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChldmVudFsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICBpbkRlbGltaXRlclJvdyA9IHRydWU7CiAgICB9CiAgICBpbmRleDIgKz0gMTsKICB9CiAgcmV0dXJuIGFsaWduOwp9CnZhciBpbml0X2luZmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9pbmZlci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1UYWJsZSgpIHsKICByZXR1cm4gewogICAgZmxvdzogewogICAgICBudWxsOiB7CiAgICAgICAgbmFtZTogInRhYmxlIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVUYWJsZSwKICAgICAgICByZXNvbHZlQWxsOiByZXNvbHZlVGFibGUKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVUYWJsZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IHNpemVCID0gMDsKICBsZXQgc2VlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGxldCBpbmRleDIgPSBzZWxmMi5ldmVudHMubGVuZ3RoIC0gMTsKICAgIHdoaWxlIChpbmRleDIgPiAtMSkgewogICAgICBjb25zdCB0eXBlNSA9IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGU7CiAgICAgIGlmICh0eXBlNSA9PT0gImxpbmVFbmRpbmciIHx8IC8vIE5vdGU6IG1hcmtkb3duLXJzIHVzZXMgYHdoaXRlc3BhY2VgIGluc3RlYWQgb2YgYGxpbmVQcmVmaXhgCiAgICAgIHR5cGU1ID09PSAibGluZVByZWZpeCIpIGluZGV4Mi0tOwogICAgICBlbHNlIGJyZWFrOwogICAgfQogICAgY29uc3QgdGFpbCA9IGluZGV4MiA+IC0xID8gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA6IG51bGw7CiAgICBjb25zdCBuZXh0MiA9IHRhaWwgPT09ICJ0YWJsZUhlYWQiIHx8IHRhaWwgPT09ICJ0YWJsZVJvdyIgPyBib2R5Um93U3RhcnQgOiBoZWFkUm93QmVmb3JlOwogICAgaWYgKG5leHQyID09PSBib2R5Um93U3RhcnQgJiYgc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbmV4dDIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93QmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUhlYWQiKTsKICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlUm93Iik7CiAgICByZXR1cm4gaGVhZFJvd1N0YXJ0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd1N0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGU0KTsKICAgIH0KICAgIHNlZW4gPSB0cnVlOwogICAgc2l6ZUIgKz0gMTsKICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGlmIChzaXplQiA+IDEpIHsKICAgICAgICBzaXplQiA9IDA7CiAgICAgICAgc2VsZjIuaW50ZXJydXB0ID0gdHJ1ZTsKICAgICAgICBlZmZlY3RzLmV4aXQoInRhYmxlUm93Iik7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJTdGFydDsKICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWRSb3dCcmVhaywgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICBzaXplQiArPSAxOwogICAgaWYgKHNlZW4pIHsKICAgICAgc2VlbiA9IGZhbHNlOwogICAgICBzaXplICs9IDE7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhazsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgIHJldHVybiBoZWFkUm93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dEYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDEyNCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGhlYWRSb3dFc2NhcGUgOiBoZWFkUm93RGF0YTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBoZWFkUm93RGF0YTsKICAgIH0KICAgIHJldHVybiBoZWFkUm93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJTdGFydChjb2RlNCkgewogICAgc2VsZjIuaW50ZXJydXB0ID0gZmFsc2U7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZURlbGltaXRlclJvdyIpOwogICAgc2VlbiA9IGZhbHNlOwogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlckJlZm9yZSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA1OCkgewogICAgICByZXR1cm4gaGVhZERlbGltaXRlclZhbHVlQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckNlbGxCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJDZWxsQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBzaXplQiArPSAxOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgc2l6ZUIgKz0gMTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJMZWZ0QWxpZ25tZW50QWZ0ZXIoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyRmlsbGVyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckZpbGxlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckZpbGxlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJGaWxsZXIiKTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXI7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyUmlnaHRBbGlnbm1lbnRBZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlckNlbGxBZnRlciwgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlckNlbGxBZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGlmICghc2VlbiB8fCBzaXplICE9PSBzaXplQikgewogICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyUm93Iik7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVIZWFkIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KSB7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd1N0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgcmV0dXJuIGJvZHlSb3dCcmVhayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhazsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVSb3ciKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBib2R5Um93QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiZGF0YSIpOwogICAgcmV0dXJuIGJvZHlSb3dEYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd0RhdGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMTI0IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGF0YSIpOwogICAgICByZXR1cm4gYm9keVJvd0JyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gYm9keVJvd0VzY2FwZSA6IGJvZHlSb3dEYXRhOwogIH0KICBmdW5jdGlvbiBib2R5Um93RXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGJvZHlSb3dEYXRhOwogICAgfQogICAgcmV0dXJuIGJvZHlSb3dEYXRhKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZVRhYmxlKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTsKICBsZXQgcm93S2luZCA9IDA7CiAgbGV0IGxhc3RDZWxsID0gWzAsIDAsIDAsIDBdOwogIGxldCBjZWxsMiA9IFswLCAwLCAwLCAwXTsKICBsZXQgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICBsZXQgbGFzdFRhYmxlRW5kID0gMDsKICBsZXQgY3VycmVudFRhYmxlOwogIGxldCBjdXJyZW50Qm9keTsKICBsZXQgY3VycmVudENlbGw7CiAgY29uc3QgbWFwNyA9IG5ldyBFZGl0TWFwKCk7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICAgIGNvbnN0IHRva2VuID0gZXZlbnRbMV07CiAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZUhlYWQiKSB7CiAgICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICAgICAgICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7CiAgICAgICAgICBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBsYXN0VGFibGVFbmQsIGN1cnJlbnRUYWJsZSwgY3VycmVudEJvZHkpOwogICAgICAgICAgY3VycmVudEJvZHkgPSB2b2lkIDA7CiAgICAgICAgICBsYXN0VGFibGVFbmQgPSAwOwogICAgICAgIH0KICAgICAgICBjdXJyZW50VGFibGUgPSB7CiAgICAgICAgICB0eXBlOiAidGFibGUiLAogICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KSwKICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgdG9rZW4uZW5kKQogICAgICAgIH07CiAgICAgICAgbWFwNy5hZGQoaW5kZXgyLCAwLCBbWyJlbnRlciIsIGN1cnJlbnRUYWJsZSwgY29udGV4dDJdXSk7CiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlUm93IiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgICAgaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUgPSB0cnVlOwogICAgICAgIGN1cnJlbnRDZWxsID0gdm9pZCAwOwogICAgICAgIGxhc3RDZWxsID0gWzAsIDAsIDAsIDBdOwogICAgICAgIGNlbGwyID0gWzAsIGluZGV4MiArIDEsIDAsIDBdOwogICAgICAgIGlmIChhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdykgewogICAgICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICAgICAgICAgIGN1cnJlbnRCb2R5ID0gewogICAgICAgICAgICB0eXBlOiAidGFibGVCb2R5IiwKICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KSwKICAgICAgICAgICAgLy8gTm90ZTogY29ycmVjdCBlbmQgaXMgc2V0IGxhdGVyLgogICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZCkKICAgICAgICAgIH07CiAgICAgICAgICBtYXA3LmFkZChpbmRleDIsIDAsIFtbImVudGVyIiwgY3VycmVudEJvZHksIGNvbnRleHQyXV0pOwogICAgICAgIH0KICAgICAgICByb3dLaW5kID0gdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IiA/IDIgOiBjdXJyZW50Qm9keSA/IDMgOiAxOwogICAgICB9IGVsc2UgaWYgKHJvd0tpbmQgJiYgKHRva2VuLnR5cGUgPT09ICJkYXRhIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlckZpbGxlciIpKSB7CiAgICAgICAgaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUgPSBmYWxzZTsKICAgICAgICBpZiAoY2VsbDJbMl0gPT09IDApIHsKICAgICAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgICAgICBjZWxsMlswXSA9IGNlbGwyWzFdOwogICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIHZvaWQgMCwgY3VycmVudENlbGwpOwogICAgICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICAgICAgICAgIH0KICAgICAgICAgIGNlbGwyWzJdID0gaW5kZXgyOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAidGFibGVDZWxsRGl2aWRlciIpIHsKICAgICAgICBpZiAoaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUpIHsKICAgICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgICAgICBjZWxsMlswXSA9IGNlbGwyWzFdOwogICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIHZvaWQgMCwgY3VycmVudENlbGwpOwogICAgICAgICAgfQogICAgICAgICAgbGFzdENlbGwgPSBjZWxsMjsKICAgICAgICAgIGNlbGwyID0gW2xhc3RDZWxsWzFdLCBpbmRleDIsIDAsIDBdOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAidGFibGVIZWFkIikgewogICAgICBhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdyA9IHRydWU7CiAgICAgIGxhc3RUYWJsZUVuZCA9IGluZGV4MjsKICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlUm93IiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgIGxhc3RUYWJsZUVuZCA9IGluZGV4MjsKICAgICAgaWYgKGxhc3RDZWxsWzFdICE9PSAwKSB7CiAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIGluZGV4MiwgY3VycmVudENlbGwpOwogICAgICB9IGVsc2UgaWYgKGNlbGwyWzFdICE9PSAwKSB7CiAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGNlbGwyLCByb3dLaW5kLCBpbmRleDIsIGN1cnJlbnRDZWxsKTsKICAgICAgfQogICAgICByb3dLaW5kID0gMDsKICAgIH0gZWxzZSBpZiAocm93S2luZCAmJiAodG9rZW4udHlwZSA9PT0gImRhdGEiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlck1hcmtlciIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyRmlsbGVyIikpIHsKICAgICAgY2VsbDJbM10gPSBpbmRleDI7CiAgICB9CiAgfQogIGlmIChsYXN0VGFibGVFbmQgIT09IDApIHsKICAgIGZsdXNoVGFibGVFbmQobWFwNywgY29udGV4dDIsIGxhc3RUYWJsZUVuZCwgY3VycmVudFRhYmxlLCBjdXJyZW50Qm9keSk7CiAgfQogIG1hcDcuY29uc3VtZShjb250ZXh0Mi5ldmVudHMpOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGNvbnRleHQyLmV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gY29udGV4dDIuZXZlbnRzW2luZGV4Ml07CiAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlIikgewogICAgICBldmVudFsxXS5fYWxpZ24gPSBnZm1UYWJsZUFsaWduKGNvbnRleHQyLmV2ZW50cywgaW5kZXgyKTsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIHJhbmdlMiwgcm93S2luZCwgcm93RW5kLCBwcmV2aW91c0NlbGwpIHsKICBjb25zdCBncm91cE5hbWUgPSByb3dLaW5kID09PSAxID8gInRhYmxlSGVhZGVyIiA6IHJvd0tpbmQgPT09IDIgPyAidGFibGVEZWxpbWl0ZXIiIDogInRhYmxlRGF0YSI7CiAgY29uc3QgdmFsdWVOYW1lID0gInRhYmxlQ29udGVudCI7CiAgaWYgKHJhbmdlMlswXSAhPT0gMCkgewogICAgcHJldmlvdXNDZWxsLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzBdKSk7CiAgICBtYXA3LmFkZChyYW5nZTJbMF0sIDAsIFtbImV4aXQiLCBwcmV2aW91c0NlbGwsIGNvbnRleHQyXV0pOwogIH0KICBjb25zdCBub3cyID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByYW5nZTJbMV0pOwogIHByZXZpb3VzQ2VsbCA9IHsKICAgIHR5cGU6IGdyb3VwTmFtZSwKICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBub3cyKSwKICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgbm93MikKICB9OwogIG1hcDcuYWRkKHJhbmdlMlsxXSwgMCwgW1siZW50ZXIiLCBwcmV2aW91c0NlbGwsIGNvbnRleHQyXV0pOwogIGlmIChyYW5nZTJbMl0gIT09IDApIHsKICAgIGNvbnN0IHJlbGF0ZWRTdGFydCA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzJdKTsKICAgIGNvbnN0IHJlbGF0ZWRFbmQgPSBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlszXSk7CiAgICBjb25zdCB2YWx1ZVRva2VuID0gewogICAgICB0eXBlOiB2YWx1ZU5hbWUsCiAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkU3RhcnQpLAogICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHJlbGF0ZWRFbmQpCiAgICB9OwogICAgbWFwNy5hZGQocmFuZ2UyWzJdLCAwLCBbWyJlbnRlciIsIHZhbHVlVG9rZW4sIGNvbnRleHQyXV0pOwogICAgaWYgKHJvd0tpbmQgIT09IDIpIHsKICAgICAgY29uc3Qgc3RhcnQgPSBjb250ZXh0Mi5ldmVudHNbcmFuZ2UyWzJdXTsKICAgICAgY29uc3QgZW5kMyA9IGNvbnRleHQyLmV2ZW50c1tyYW5nZTJbM11dOwogICAgICBzdGFydFsxXS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBlbmQzWzFdLmVuZCk7CiAgICAgIHN0YXJ0WzFdLnR5cGUgPSAiY2h1bmtUZXh0IjsKICAgICAgc3RhcnRbMV0uY29udGVudFR5cGUgPSAidGV4dCI7CiAgICAgIGlmIChyYW5nZTJbM10gPiByYW5nZTJbMl0gKyAxKSB7CiAgICAgICAgY29uc3QgYTUgPSByYW5nZTJbMl0gKyAxOwogICAgICAgIGNvbnN0IGI1ID0gcmFuZ2UyWzNdIC0gcmFuZ2UyWzJdIC0gMTsKICAgICAgICBtYXA3LmFkZChhNSwgYjUsIFtdKTsKICAgICAgfQogICAgfQogICAgbWFwNy5hZGQocmFuZ2UyWzNdICsgMSwgMCwgW1siZXhpdCIsIHZhbHVlVG9rZW4sIGNvbnRleHQyXV0pOwogIH0KICBpZiAocm93RW5kICE9PSB2b2lkIDApIHsKICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJvd0VuZCkpOwogICAgbWFwNy5hZGQocm93RW5kLCAwLCBbWyJleGl0IiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICAgIHByZXZpb3VzQ2VsbCA9IHZvaWQgMDsKICB9CiAgcmV0dXJuIHByZXZpb3VzQ2VsbDsKfQpmdW5jdGlvbiBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBpbmRleDIsIHRhYmxlMiwgdGFibGVCb2R5KSB7CiAgY29uc3QgZXhpdHMgPSBbXTsKICBjb25zdCByZWxhdGVkID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCBpbmRleDIpOwogIGlmICh0YWJsZUJvZHkpIHsKICAgIHRhYmxlQm9keS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkKTsKICAgIGV4aXRzLnB1c2goWyJleGl0IiwgdGFibGVCb2R5LCBjb250ZXh0Ml0pOwogIH0KICB0YWJsZTIuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7CiAgZXhpdHMucHVzaChbImV4aXQiLCB0YWJsZTIsIGNvbnRleHQyXSk7CiAgbWFwNy5hZGQoaW5kZXgyICsgMSwgMCwgZXhpdHMpOwp9CmZ1bmN0aW9uIGdldFBvaW50KGV2ZW50cywgaW5kZXgyKSB7CiAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICBjb25zdCBzaWRlID0gZXZlbnRbMF0gPT09ICJlbnRlciIgPyAic3RhcnQiIDogImVuZCI7CiAgcmV0dXJuIGV2ZW50WzFdW3NpZGVdOwp9CnZhciBpbml0X3N5bnRheDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9lZGl0X21hcCgpOwogICAgaW5pdF9pbmZlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDUoKTsKICAgIGluaXRfc3ludGF4NCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhZ2ZpbHRlckh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGV4aXQ6IHsKICAgICAgaHRtbEZsb3dEYXRhKHRva2VuKSB7CiAgICAgICAgZXhpdEh0bWxEYXRhLmNhbGwodGhpcywgdG9rZW4sIHJlRmxvdyk7CiAgICAgIH0sCiAgICAgIGh0bWxUZXh0RGF0YSh0b2tlbikgewogICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZVRleHQpOwogICAgICB9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBleGl0SHRtbERhdGEodG9rZW4sIGZpbHRlcjIpIHsKICBsZXQgdmFsdWUyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKGZpbHRlcjIsICImbHQ7JDEkMiIpOwogIH0KICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZTIpKTsKfQp2YXIgcmVGbG93LCByZVRleHQ7CnZhciBpbml0X2xpYjE5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvbGliL2luZGV4LmpzIigpIHsKICAgIHJlRmxvdyA9IC88KFwvPykoaWZyYW1lfG5vZW1iZWR8bm9mcmFtZXN8cGxhaW50ZXh0fHNjcmlwdHxzdHlsZXx0aXRsZXx0ZXh0YXJlYXx4bXApKD89W1x0XG5cZlxyIC8+XSkvZ2k7CiAgICByZVRleHQgPSBuZXcgUmVnRXhwKCJeIiArIHJlRmxvdy5zb3VyY2UsICJpIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlci9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWdmaWx0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtSHRtbCgpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgdGFza0xpc3RDaGVjaygpIHsKICAgICAgICB0aGlzLnRhZygnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD0iIiAnKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgdGFza0xpc3RDaGVjaygpIHsKICAgICAgICB0aGlzLnRhZygiLz4iKTsKICAgICAgfSwKICAgICAgdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCgpIHsKICAgICAgICB0aGlzLnRhZygnY2hlY2tlZD0iIiAnKTsKICAgICAgfQogICAgfQogIH07Cn0KdmFyIGluaXRfaHRtbDYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtKCkgewogIHJldHVybiB7CiAgICB0ZXh0OiB7CiAgICAgIFs5MV06IHRhc2tsaXN0Q2hlY2sKICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplVGFza2xpc3RDaGVjayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gb3BlbjsKICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIEV4aXQgaWYgdGhlcmXigJlzIHN0dWZmIGJlZm9yZS4KICAgICAgc2VsZjIucHJldmlvdXMgIT09IG51bGwgfHwgLy8gRXhpdCBpZiBub3QgaW4gdGhlIGZpcnN0IGNvbnRlbnQgdGhhdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgYSBsaXN0CiAgICAgIC8vIGl0ZW0uCiAgICAgICFzZWxmMi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrIik7CiAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICByZXR1cm4gaW5zaWRlOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKTsKICAgICAgcmV0dXJuIGNsb3NlNzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gODggfHwgY29kZTQgPT09IDEyMCkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpOwogICAgICByZXR1cm4gY2xvc2U3OwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNsb3NlNyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2siKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh7CiAgICAgICAgdG9rZW5pemU6IHNwYWNlVGhlbk5vblNwYWNlCiAgICAgIH0sIG9rMywgbm9rKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gc3BhY2VUaGVuTm9uU3BhY2UoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCAid2hpdGVzcGFjZSIpOwogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIHRhc2tsaXN0Q2hlY2s7CnZhciBpbml0X3N5bnRheDUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgdGFza2xpc3RDaGVjayA9IHsKICAgICAgbmFtZTogInRhc2tsaXN0Q2hlY2siLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVUYXNrbGlzdENoZWNrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3Rhc2tfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDYoKTsKICAgIGluaXRfc3ludGF4NSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm1AMy4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtL2luZGV4LmpzCmZ1bmN0aW9uIGdmbShvcHRpb25zKSB7CiAgcmV0dXJuIGNvbWJpbmVFeHRlbnNpb25zKFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbCgpLAogICAgZ2ZtRm9vdG5vdGUoKSwKICAgIGdmbVN0cmlrZXRocm91Z2gob3B0aW9ucyksCiAgICBnZm1UYWJsZSgpLAogICAgZ2ZtVGFza0xpc3RJdGVtKCkKICBdKTsKfQpmdW5jdGlvbiBnZm1IdG1sKG9wdGlvbnMpIHsKICByZXR1cm4gY29tYmluZUh0bWxFeHRlbnNpb25zKFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbEh0bWwoKSwKICAgIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSwKICAgIGdmbVN0cmlrZXRocm91Z2hIdG1sKCksCiAgICBnZm1UYWJsZUh0bWwoKSwKICAgIGdmbVRhZ2ZpbHRlckh0bWwoKSwKICAgIGdmbVRhc2tMaXN0SXRlbUh0bWwoKQogIF0pOwp9CnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm1AMy4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2F1dG9saW5rX2xpdGVyYWwoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fZm9vdG5vdGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWJsZSgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWdmaWx0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFza19saXN0X2l0ZW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0dmbShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSAoCiAgICAvKiogQHR5cGUge1Byb2Nlc3NvcjxSb290Pn0gKi8KICAgIHRoaXMKICApOwogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnMzOwogIGNvbnN0IGRhdGEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyB8fCAoZGF0YS5taWNyb21hcmtFeHRlbnNpb25zID0gW10pOwogIGNvbnN0IGZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCB0b01hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGdmbShzZXR0aW5ncykpOwogIGZyb21NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Gcm9tTWFya2Rvd24oKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Ub01hcmtkb3duKHNldHRpbmdzKSk7Cn0KdmFyIGVtcHR5T3B0aW9uczM7CnZhciBpbml0X2xpYjIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2dmbSgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSgpOwogICAgZW1wdHlPcHRpb25zMyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29tcGlsZS5qcwpmdW5jdGlvbiBjb21waWxlKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHRhZ3MgPSB0cnVlOwogIGNvbnN0IGRlZmluaXRpb25zID0ge307CiAgY29uc3QgYnVmZmVycyA9IFtbXV07CiAgY29uc3QgbWVkaWFTdGFjayA9IFtdOwogIGNvbnN0IHRpZ2h0U3RhY2sgPSBbXTsKICBjb25zdCBkZWZhdWx0SGFuZGxlcnMgPSB7CiAgICBlbnRlcjogewogICAgICBibG9ja1F1b3RlOiBvbmVudGVyYmxvY2txdW90ZSwKICAgICAgY29kZUZlbmNlZDogb25lbnRlcmNvZGVmZW5jZWQsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IGJ1ZmZlcjIsCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IGJ1ZmZlcjIsCiAgICAgIGNvZGVJbmRlbnRlZDogb25lbnRlcmNvZGVpbmRlbnRlZCwKICAgICAgY29kZVRleHQ6IG9uZW50ZXJjb2RldGV4dCwKICAgICAgY29udGVudDogb25lbnRlcmNvbnRlbnQsCiAgICAgIGRlZmluaXRpb246IG9uZW50ZXJkZWZpbml0aW9uLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBlbXBoYXNpczogb25lbnRlcmVtcGhhc2lzLAogICAgICBodG1sRmxvdzogb25lbnRlcmh0bWxmbG93LAogICAgICBodG1sVGV4dDogb25lbnRlcmh0bWwsCiAgICAgIGltYWdlOiBvbmVudGVyaW1hZ2UsCiAgICAgIGxhYmVsOiBidWZmZXIyLAogICAgICBsaW5rOiBvbmVudGVybGluaywKICAgICAgbGlzdEl0ZW1NYXJrZXI6IG9uZW50ZXJsaXN0aXRlbW1hcmtlciwKICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsCiAgICAgIGxpc3RPcmRlcmVkOiBvbmVudGVybGlzdG9yZGVyZWQsCiAgICAgIGxpc3RVbm9yZGVyZWQ6IG9uZW50ZXJsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZW50ZXJwYXJhZ3JhcGgsCiAgICAgIHJlZmVyZW5jZTogYnVmZmVyMiwKICAgICAgcmVzb3VyY2U6IG9uZW50ZXJyZXNvdXJjZSwKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25lbnRlcnJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9uZW50ZXJzZXRleHRoZWFkaW5nLAogICAgICBzdHJvbmc6IG9uZW50ZXJzdHJvbmcKICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGF0eEhlYWRpbmc6IG9uZXhpdGF0eGhlYWRpbmcsCiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLAogICAgICBhdXRvbGlua0VtYWlsOiBvbmV4aXRhdXRvbGlua2VtYWlsLAogICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmV4aXRhdXRvbGlua3Byb3RvY29sLAogICAgICBibG9ja1F1b3RlOiBvbmV4aXRibG9ja3F1b3RlLAogICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsCiAgICAgIGNvZGVGZW5jZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlRmVuY2VkRmVuY2U6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZSwKICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbywKICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogb25yZXN1bWVkcm9wLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRjb2RlZmxvd3ZhbHVlLAogICAgICBjb2RlSW5kZW50ZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlVGV4dDogb25leGl0Y29kZXRleHQsCiAgICAgIGNvZGVUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgZGF0YTogb25leGl0ZGF0YSwKICAgICAgZGVmaW5pdGlvbjogb25leGl0ZGVmaW5pdGlvbiwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZywKICAgICAgZW1waGFzaXM6IG9uZXhpdGVtcGhhc2lzLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaGFyZEJyZWFrVHJhaWxpbmc6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaHRtbEZsb3c6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IG9uZXhpdG1lZGlhLAogICAgICBsYWJlbDogb25leGl0bGFiZWwsCiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LAogICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLAogICAgICBsaW5rOiBvbmV4aXRtZWRpYSwKICAgICAgbGlzdE9yZGVyZWQ6IG9uZXhpdGxpc3RvcmRlcmVkLAogICAgICBsaXN0VW5vcmRlcmVkOiBvbmV4aXRsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZXhpdHBhcmFncmFwaCwKICAgICAgcmVmZXJlbmNlOiBvbnJlc3VtZWRyb3AsCiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLAogICAgICByZXNvdXJjZTogb25yZXN1bWVkcm9wLAogICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nLAogICAgICBzZXRleHRIZWFkaW5nOiBvbmV4aXRzZXRleHRoZWFkaW5nLAogICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLAogICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsCiAgICAgIHN0cm9uZzogb25leGl0c3Ryb25nLAogICAgICB0aGVtYXRpY0JyZWFrOiBvbmV4aXR0aGVtYXRpY2JyZWFrCiAgICB9CiAgfTsKICBjb25zdCBoYW5kbGVyczIgPSAoCiAgICAvKiogQHR5cGUge05vcm1hbGl6ZWRIdG1sRXh0ZW5zaW9ufSAqLwogICAgY29tYmluZUh0bWxFeHRlbnNpb25zKFtkZWZhdWx0SGFuZGxlcnMsIC4uLnNldHRpbmdzLmh0bWxFeHRlbnNpb25zIHx8IFtdXSkKICApOwogIGNvbnN0IGRhdGEgPSB7CiAgICBkZWZpbml0aW9ucywKICAgIHRpZ2h0U3RhY2sKICB9OwogIGNvbnN0IGNvbnRleHQyID0gewogICAgYnVmZmVyOiBidWZmZXIyLAogICAgZW5jb2RlOiBlbmNvZGUyLAogICAgZ2V0RGF0YSwKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCwKICAgIG9wdGlvbnM6IHNldHRpbmdzLAogICAgcmF3OiByYXcyLAogICAgcmVzdW1lLAogICAgc2V0RGF0YSwKICAgIHRhZwogIH07CiAgbGV0IGxpbmVFbmRpbmdTdHlsZSA9IHNldHRpbmdzLmRlZmF1bHRMaW5lRW5kaW5nOwogIHJldHVybiBjb21waWxlMjsKICBmdW5jdGlvbiBjb21waWxlMihldmVudHMpIHsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBjb25zdCBsaXN0U3RhY2sgPSBbXTsKICAgIGxldCBoZWFkMiA9IFtdOwogICAgbGV0IGJvZHkzID0gW107CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmICghbGluZUVuZGluZ1N0eWxlICYmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpKSB7CiAgICAgICAgbGluZUVuZGluZ1N0eWxlID0gLyoqIEB0eXBlIHtMaW5lRW5kaW5nfSAqLwogICAgICAgIGV2ZW50c1tpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplKGV2ZW50c1tpbmRleDJdWzFdKTsKICAgICAgfQogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXBhcmVMaXN0KGV2ZW50cy5zbGljZShsaXN0U3RhY2sucG9wKCksIGluZGV4MikpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRlZmluaXRpb24iKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBib2R5MyA9IHB1c2goYm9keTMsIGV2ZW50cy5zbGljZShzdGFydCwgaW5kZXgyKSk7CiAgICAgICAgICBzdGFydCA9IGluZGV4MjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZDIgPSBwdXNoKGhlYWQyLCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4MiArIDEpKTsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhlYWQyID0gcHVzaChoZWFkMiwgYm9keTMpOwogICAgaGVhZDIgPSBwdXNoKGhlYWQyLCBldmVudHMuc2xpY2Uoc3RhcnQpKTsKICAgIGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gaGVhZDI7CiAgICBpZiAoaGFuZGxlcnMyLmVudGVyLm51bGwpIHsKICAgICAgaGFuZGxlcnMyLmVudGVyLm51bGwuY2FsbChjb250ZXh0Mik7CiAgICB9CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXMgPSBoYW5kbGVyczJbcmVzdWx0W2luZGV4Ml1bMF1dOwogICAgICBjb25zdCBraW5kID0gcmVzdWx0W2luZGV4Ml1bMV0udHlwZTsKICAgICAgY29uc3QgaGFuZGxlMyA9IGhhbmRsZXNba2luZF07CiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eTIuY2FsbChoYW5kbGVzLCBraW5kKSAmJiBoYW5kbGUzKSB7CiAgICAgICAgaGFuZGxlMy5jYWxsKHsKICAgICAgICAgIHNsaWNlU2VyaWFsaXplOiByZXN1bHRbaW5kZXgyXVsyXS5zbGljZVNlcmlhbGl6ZSwKICAgICAgICAgIC4uLmNvbnRleHQyCiAgICAgICAgfSwgcmVzdWx0W2luZGV4Ml1bMV0pOwogICAgICB9CiAgICB9CiAgICBpZiAoaGFuZGxlcnMyLmV4aXQubnVsbCkgewogICAgICBoYW5kbGVyczIuZXhpdC5udWxsLmNhbGwoY29udGV4dDIpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcnNbMF0uam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVMaXN0KHNsaWNlKSB7CiAgICBjb25zdCBsZW5ndGggPSBzbGljZS5sZW5ndGg7CiAgICBsZXQgaW5kZXgyID0gMDsKICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gMDsKICAgIGxldCBsb29zZSA9IGZhbHNlOwogICAgbGV0IGF0TWFya2VyOwogICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgIGNvbnN0IGV2ZW50ID0gc2xpY2VbaW5kZXgyXTsKICAgICAgaWYgKGV2ZW50WzFdLl9jb250YWluZXIpIHsKICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGNvbnRhaW5lckJhbGFuY2UrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tOwogICAgICAgIH0KICAgICAgfSBlbHNlIHN3aXRjaCAoZXZlbnRbMV0udHlwZSkgewogICAgICAgIGNhc2UgImxpc3RJdGVtUHJlZml4IjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZXhpdCIpIHsKICAgICAgICAgICAgYXRNYXJrZXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVQcmVmaXgiOiB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZUVuZGluZ0JsYW5rIjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmICFjb250YWluZXJCYWxhbmNlKSB7CiAgICAgICAgICAgIGlmIChhdE1hcmtlcikgewogICAgICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxvb3NlID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc2xpY2VbMF1bMV0uX2xvb3NlID0gbG9vc2U7CiAgfQogIGZ1bmN0aW9uIHNldERhdGEoa2V5MiwgdmFsdWUyKSB7CiAgICBkYXRhW2tleTJdID0gdmFsdWUyOwogIH0KICBmdW5jdGlvbiBnZXREYXRhKGtleTIpIHsKICAgIHJldHVybiBkYXRhW2tleTJdOwogIH0KICBmdW5jdGlvbiBidWZmZXIyKCkgewogICAgYnVmZmVycy5wdXNoKFtdKTsKICB9CiAgZnVuY3Rpb24gcmVzdW1lKCkgewogICAgY29uc3QgYnVmID0gYnVmZmVycy5wb3AoKTsKICAgIHJldHVybiBidWYuam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHRhZyh2YWx1ZTIpIHsKICAgIGlmICghdGFncykgcmV0dXJuOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIsIHRydWUpOwogICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnB1c2godmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gcmF3Mih2YWx1ZTIpIHsKICAgIHNldERhdGEoImxhc3RXYXNUYWciKTsKICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmcyKCkgewogICAgcmF3MihsaW5lRW5kaW5nU3R5bGUgfHwgIlxuIik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdJZk5lZWRlZCgpIHsKICAgIGNvbnN0IGJ1ZmZlcjMgPSBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBzbGljZSA9IGJ1ZmZlcjNbYnVmZmVyMy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHByZXZpb3VzMyA9IHNsaWNlID8gc2xpY2UuY2hhckNvZGVBdChzbGljZS5sZW5ndGggLSAxKSA6IG51bGw7CiAgICBpZiAocHJldmlvdXMzID09PSAxMCB8fCBwcmV2aW91czMgPT09IDEzIHx8IHByZXZpb3VzMyA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsaW5lRW5kaW5nMigpOwogIH0KICBmdW5jdGlvbiBlbmNvZGUyKHZhbHVlMikgewogICAgcmV0dXJuIGdldERhdGEoImlnbm9yZUVuY29kZSIpID8gdmFsdWUyIDogZW5jb2RlKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIG9ucmVzdW1lZHJvcCgpIHsKICAgIHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdG9yZGVyZWQodG9rZW4pIHsKICAgIHRpZ2h0U3RhY2sucHVzaCghdG9rZW4uX2xvb3NlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8b2wiKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdHVub3JkZXJlZCh0b2tlbikgewogICAgdGlnaHRTdGFjay5wdXNoKCF0b2tlbi5fbG9vc2UpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjx1bCIpOwogICAgc2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbXZhbHVlKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgY29uc3QgdmFsdWUyID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIGlmICh2YWx1ZTIgIT09IDEpIHsKICAgICAgICB0YWcoJyBzdGFydD0iJyArIGVuY29kZTIoU3RyaW5nKHZhbHVlMikpICsgJyInKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW1tYXJrZXIoKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgdGFnKCI+Iik7CiAgICB9IGVsc2UgewogICAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgfQogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxsaT4iKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaXN0b3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC9vbD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdHVub3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC91bD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdGl0ZW0oKSB7CiAgICBpZiAoZ2V0RGF0YSgibGFzdFdhc1RhZyIpICYmICFnZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIikpIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB9CiAgICB0YWcoIjwvbGk+Iik7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJibG9ja3F1b3RlKCkgewogICAgdGlnaHRTdGFjay5wdXNoKGZhbHNlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8YmxvY2txdW90ZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YmxvY2txdW90ZSgpIHsKICAgIHRpZ2h0U3RhY2sucG9wKCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPC9ibG9ja3F1b3RlPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVycGFyYWdyYXBoKCkgewogICAgaWYgKCF0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgIHRhZygiPHA+Iik7CiAgICB9CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHBhcmFncmFwaCgpIHsKICAgIGlmICh0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCI8L3A+Iik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RlZmVuY2VkKCkgewogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxwcmU+PGNvZGUiKTsKICAgIHNldERhdGEoImZlbmNlc0NvdW50IiwgMCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCB2YWx1ZTIgPSByZXN1bWUoKTsKICAgIHRhZygnIGNsYXNzPSJsYW5ndWFnZS0nICsgdmFsdWUyICsgJyInKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlKCkgewogICAgY29uc3QgY291bnQyID0gZ2V0RGF0YSgiZmVuY2VzQ291bnQiKSB8fCAwOwogICAgaWYgKCFjb3VudDIpIHsKICAgICAgdGFnKCI+Iik7CiAgICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgfQogICAgc2V0RGF0YSgiZmVuY2VzQ291bnQiLCBjb3VudDIgKyAxKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvZGVpbmRlbnRlZCgpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8cHJlPjxjb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRmbG93Y29kZSgpIHsKICAgIGNvbnN0IGNvdW50MiA9IGdldERhdGEoImZlbmNlc0NvdW50Iik7CiAgICBpZiAoY291bnQyICE9PSB2b2lkIDAgJiYgY291bnQyIDwgMiAmJiBkYXRhLnRpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiAhZ2V0RGF0YSgibGFzdFdhc1RhZyIpKSB7CiAgICAgIGxpbmVFbmRpbmcyKCk7CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIpKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgfQogICAgdGFnKCI8L2NvZGU+PC9wcmU+Iik7CiAgICBpZiAoY291bnQyICE9PSB2b2lkIDAgJiYgY291bnQyIDwgMikgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICBzZXREYXRhKCJmbG93Q29kZVNlZW5EYXRhIik7CiAgICBzZXREYXRhKCJmZW5jZXNDb3VudCIpOwogICAgc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJpbWFnZSgpIHsKICAgIG1lZGlhU3RhY2sucHVzaCh7CiAgICAgIGltYWdlOiB0cnVlCiAgICB9KTsKICAgIHRhZ3MgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaW5rKCkgewogICAgbWVkaWFTdGFjay5wdXNoKHt9KTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWxJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbCgpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbCA9IHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcodG9rZW4pIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5yZWZlcmVuY2VJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmVudGVycmVzb3VyY2UoKSB7CiAgICBidWZmZXIyKCk7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSAiIjsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnJlc291cmNlZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBidWZmZXIyKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0udGl0bGUgPSByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bWVkaWEoKSB7CiAgICBsZXQgaW5kZXgyID0gbWVkaWFTdGFjay5sZW5ndGggLSAxOwogICAgY29uc3QgbWVkaWEgPSBtZWRpYVN0YWNrW2luZGV4Ml07CiAgICBjb25zdCBpZCA9IG1lZGlhLnJlZmVyZW5jZUlkIHx8IG1lZGlhLmxhYmVsSWQ7CiAgICBjb25zdCBjb250ZXh0MyA9IG1lZGlhLmRlc3RpbmF0aW9uID09PSB2b2lkIDAgPyBkZWZpbml0aW9uc1tub3JtYWxpemVJZGVudGlmaWVyKGlkKV0gOiBtZWRpYTsKICAgIHRhZ3MgPSB0cnVlOwogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChtZWRpYVN0YWNrW2luZGV4Ml0uaW1hZ2UpIHsKICAgICAgICB0YWdzID0gdm9pZCAwOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobWVkaWEuaW1hZ2UpIHsKICAgICAgdGFnKCc8aW1nIHNyYz0iJyArIHNhbml0aXplVXJpKGNvbnRleHQzLmRlc3RpbmF0aW9uLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xTb3VyY2UpICsgJyIgYWx0PSInKTsKICAgICAgcmF3MihtZWRpYS5sYWJlbCk7CiAgICAgIHRhZygnIicpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoY29udGV4dDMuZGVzdGluYXRpb24sIHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2wgPyB2b2lkIDAgOiBwcm90b2NvbEhyZWYpICsgJyInKTsKICAgIH0KICAgIHRhZyhjb250ZXh0My50aXRsZSA/ICcgdGl0bGU9IicgKyBjb250ZXh0My50aXRsZSArICciJyA6ICIiKTsKICAgIGlmIChtZWRpYS5pbWFnZSkgewogICAgICB0YWcoIiAvPiIpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCI+Iik7CiAgICAgIHJhdzIobWVkaWEubGFiZWwpOwogICAgICB0YWcoIjwvYT4iKTsKICAgIH0KICAgIG1lZGlhU3RhY2sucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJkZWZpbml0aW9uKCkgewogICAgYnVmZmVyMigpOwogICAgbWVkaWFTdGFjay5wdXNoKHt9KTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7CiAgICByZXN1bWUoKTsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbElkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBidWZmZXIyKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uID0gcmVzdW1lKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnRpdGxlID0gcmVzdW1lKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb24oKSB7CiAgICBjb25zdCBtZWRpYSA9IG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXTsKICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWRlbnRpZmllcihtZWRpYS5sYWJlbElkKTsKICAgIHJlc3VtZSgpOwogICAgaWYgKCFoYXNPd25Qcm9wZXJ0eTIuY2FsbChkZWZpbml0aW9ucywgaWQpKSB7CiAgICAgIGRlZmluaXRpb25zW2lkXSA9IG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXTsKICAgIH0KICAgIG1lZGlhU3RhY2sucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb250ZW50KCkgewogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHsKICAgIGlmIChnZXREYXRhKCJoZWFkaW5nUmFuayIpKSByZXR1cm47CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIsIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmxlbmd0aCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGgiICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJzZXRleHRoZWFkaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCgpIHsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZygpIHsKICAgIHRhZygiPC9oIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ2xpbmVzZXF1ZW5jZSh0b2tlbikgewogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiLCB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5jaGFyQ29kZUF0KDApID09PSA2MSA/IDEgOiAyKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHsKICAgIGNvbnN0IHZhbHVlMiA9IHJlc3VtZSgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxoIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgcmF3Mih2YWx1ZTIpOwogICAgdGFnKCI8L2giICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkYXRhKHRva2VuKSB7CiAgICByYXcyKGVuY29kZTIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikgewogICAgaWYgKGdldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIikpIHsKICAgICAgc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChnZXREYXRhKCJpbkNvZGVUZXh0IikpIHsKICAgICAgcmF3MigiICIpOwogICAgICByZXR1cm47CiAgICB9CiAgICByYXcyKGVuY29kZTIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZsb3d2YWx1ZSh0b2tlbikgewogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgICBzZXREYXRhKCJmbG93Q29kZVNlZW5EYXRhIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGhhcmRicmVhaygpIHsKICAgIHRhZygiPGJyIC8+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJodG1sZmxvdygpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgb25lbnRlcmh0bWwoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0aHRtbCgpIHsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaHRtbCgpIHsKICAgIGlmIChzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJlbXBoYXNpcygpIHsKICAgIHRhZygiPGVtPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyc3Ryb25nKCkgewogICAgdGFnKCI8c3Ryb25nPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyY29kZXRleHQoKSB7CiAgICBzZXREYXRhKCJpbkNvZGVUZXh0IiwgdHJ1ZSk7CiAgICB0YWcoIjxjb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RldGV4dCgpIHsKICAgIHNldERhdGEoImluQ29kZVRleHQiKTsKICAgIHRhZygiPC9jb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRlbXBoYXNpcygpIHsKICAgIHRhZygiPC9lbT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c3Ryb25nKCkgewogICAgdGFnKCI8L3N0cm9uZz4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0dGhlbWF0aWNicmVhaygpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8aHIgLz4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyKHRva2VuKSB7CiAgICBzZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIiwgdG9rZW4udHlwZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZXZhbHVlKHRva2VuKSB7CiAgICBjb25zdCB2YWx1ZTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IGRlY29kZWQgPSBnZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIikgPyBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMiwgZ2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpID09PSAiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIgPyAxMCA6IDE2KSA6IGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMik7CiAgICByYXcyKGVuY29kZTIoCiAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICBkZWNvZGVkCiAgICApKTsKICAgIHNldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtwcm90b2NvbCh0b2tlbikgewogICAgY29uc3QgdXJpID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICB0YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSh1cmksIHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2wgPyB2b2lkIDAgOiBwcm90b2NvbEhyZWYpICsgJyI+Jyk7CiAgICByYXcyKGVuY29kZTIodXJpKSk7CiAgICB0YWcoIjwvYT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikgewogICAgY29uc3QgdXJpID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICB0YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSgibWFpbHRvOiIgKyB1cmkpICsgJyI+Jyk7CiAgICByYXcyKGVuY29kZTIodXJpKSk7CiAgICB0YWcoIjwvYT4iKTsKICB9Cn0KdmFyIGhhc093blByb3BlcnR5MiwgcHJvdG9jb2xIcmVmLCBwcm90b2NvbFNvdXJjZTsKdmFyIGluaXRfY29tcGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jb21waWxlLmpzIigpIHsKICAgIGluaXRfaW5kZXhfZG9tKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZW5jb2RlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaGFzT3duUHJvcGVydHkyID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBwcm90b2NvbEhyZWYgPSAvXihodHRwcz98aXJjcz98bWFpbHRvfHhtcHApJC9pOwogICAgcHJvdG9jb2xTb3VyY2UgPSAvXmh0dHBzPyQvaTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2NvbnRlbnQuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRlbnQoZWZmZWN0cykgewogIGNvbnN0IGNvbnRlbnRTdGFydCA9IGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLCBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdCwgcGFyYWdyYXBoSW5pdGlhbCk7CiAgbGV0IHByZXZpb3VzMzsKICByZXR1cm4gY29udGVudFN0YXJ0OwogIGZ1bmN0aW9uIGFmdGVyQ29udGVudFN0YXJ0Q29uc3RydWN0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBjb250ZW50U3RhcnQsICJsaW5lUHJlZml4Iik7CiAgfQogIGZ1bmN0aW9uIHBhcmFncmFwaEluaXRpYWwoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInBhcmFncmFwaCIpOwogICAgcmV0dXJuIGxpbmVTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVTdGFydChjb2RlNCkgewogICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmVudGVyKCJjaHVua1RleHQiLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAidGV4dCIsCiAgICAgIHByZXZpb3VzOiBwcmV2aW91czMKICAgIH0pOwogICAgaWYgKHByZXZpb3VzMykgewogICAgICBwcmV2aW91czMubmV4dCA9IHRva2VuOwogICAgfQogICAgcHJldmlvdXMzID0gdG9rZW47CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRhdGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICBlZmZlY3RzLmV4aXQoInBhcmFncmFwaCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICByZXR1cm4gbGluZVN0YXJ0OwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KfQp2YXIgY29udGVudDI7CnZhciBpbml0X2NvbnRlbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvY29udGVudC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY29udGVudDIgPSB7CiAgICAgIHRva2VuaXplOiBpbml0aWFsaXplQ29udGVudAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVEb2N1bWVudChlZmZlY3RzKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHN0YWNrID0gW107CiAgbGV0IGNvbnRpbnVlZCA9IDA7CiAgbGV0IGNoaWxkRmxvdzsKICBsZXQgY2hpbGRUb2tlbjsKICBsZXQgbGluZVN0YXJ0T2Zmc2V0OwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvbnRpbnVlZCA8IHN0YWNrLmxlbmd0aCkgewogICAgICBjb25zdCBpdGVtID0gc3RhY2tbY29udGludWVkXTsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSBpdGVtWzFdOwogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGl0ZW1bMF0uY29udGludWF0aW9uLCBkb2N1bWVudENvbnRpbnVlLCBjaGVja05ld0NvbnRhaW5lcnMpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkb2N1bWVudENvbnRpbnVlKGNvZGU0KSB7CiAgICBjb250aW51ZWQrKzsKICAgIGlmIChzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KSB7CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB2b2lkIDA7CiAgICAgIGlmIChjaGlsZEZsb3cpIHsKICAgICAgICBjbG9zZUZsb3coKTsKICAgICAgfQogICAgICBjb25zdCBpbmRleEJlZm9yZUV4aXRzID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIGxldCBwb2ludDQ7CiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkgewogICAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gImV4aXQiICYmIHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLnR5cGUgPT09ICJjaHVua0Zsb3ciKSB7CiAgICAgICAgICBwb2ludDQgPSBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTsKICAgICAgbGV0IGluZGV4MiA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIHdoaWxlIChpbmRleDIgPCBzZWxmMi5ldmVudHMubGVuZ3RoKSB7CiAgICAgICAgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uZW5kID0gewogICAgICAgICAgLi4ucG9pbnQ0CiAgICAgICAgfTsKICAgICAgICBpbmRleDIrKzsKICAgICAgfQogICAgICBzcGxpY2Uoc2VsZjIuZXZlbnRzLCBpbmRleEJlZm9yZUZsb3cgKyAxLCAwLCBzZWxmMi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cykpOwogICAgICBzZWxmMi5ldmVudHMubGVuZ3RoID0gaW5kZXgyOwogICAgICByZXR1cm4gY2hlY2tOZXdDb250YWluZXJzKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBzdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlNCkgewogICAgaWYgKGNvbnRpbnVlZCA9PT0gc3RhY2subGVuZ3RoKSB7CiAgICAgIGlmICghY2hpbGRGbG93KSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGU0KTsKICAgICAgfQogICAgICBpZiAoY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QgJiYgY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QuY29uY3JldGUpIHsKICAgICAgICByZXR1cm4gZmxvd1N0YXJ0KGNvZGU0KTsKICAgICAgfQogICAgICBzZWxmMi5pbnRlcnJ1cHQgPSBCb29sZWFuKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmICFjaGlsZEZsb3cuX2dmbVRhYmxlRHluYW1pY0ludGVycnVwdEhhY2spOwogICAgfQogICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSB7fTsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGNvbnRhaW5lckNvbnN0cnVjdCwgdGhlcmVJc0FOZXdDb250YWluZXIsIHRoZXJlSXNOb05ld0NvbnRhaW5lcikoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0aGVyZUlzQU5ld0NvbnRhaW5lcihjb2RlNCkgewogICAgaWYgKGNoaWxkRmxvdykgY2xvc2VGbG93KCk7CiAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpOwogICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGhlcmVJc05vTmV3Q29udGFpbmVyKGNvZGU0KSB7CiAgICBzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA9IGNvbnRpbnVlZCAhPT0gc3RhY2subGVuZ3RoOwogICAgbGluZVN0YXJ0T2Zmc2V0ID0gc2VsZjIubm93KCkub2Zmc2V0OwogICAgcmV0dXJuIGZsb3dTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWVkKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IHt9OwogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjb250YWluZXJDb25zdHJ1Y3QsIGNvbnRhaW5lckNvbnRpbnVlLCBmbG93U3RhcnQpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGFpbmVyQ29udGludWUoY29kZTQpIHsKICAgIGNvbnRpbnVlZCsrOwogICAgc3RhY2sucHVzaChbc2VsZjIuY3VycmVudENvbnN0cnVjdCwgc2VsZjIuY29udGFpbmVyU3RhdGVdKTsKICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGZsb3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpOwogICAgICBleGl0Q29udGFpbmVycygwKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY2hpbGRGbG93ID0gY2hpbGRGbG93IHx8IHNlbGYyLnBhcnNlci5mbG93KHNlbGYyLm5vdygpKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rRmxvdyIsIHsKICAgICAgX3Rva2VuaXplcjogY2hpbGRGbG93LAogICAgICBjb250ZW50VHlwZTogImZsb3ciLAogICAgICBwcmV2aW91czogY2hpbGRUb2tlbgogICAgfSk7CiAgICByZXR1cm4gZmxvd0NvbnRpbnVlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZmxvd0NvbnRpbnVlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCgiY2h1bmtGbG93IiksIHRydWUpOwogICAgICBleGl0Q29udGFpbmVycygwKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCgiY2h1bmtGbG93IikpOwogICAgICBjb250aW51ZWQgPSAwOwogICAgICBzZWxmMi5pbnRlcnJ1cHQgPSB2b2lkIDA7CiAgICAgIHJldHVybiBzdGFydDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZmxvd0NvbnRpbnVlOwogIH0KICBmdW5jdGlvbiB3cml0ZVRvQ2hpbGQodG9rZW4sIGVuZE9mRmlsZSkgewogICAgY29uc3Qgc3RyZWFtID0gc2VsZjIuc2xpY2VTdHJlYW0odG9rZW4pOwogICAgaWYgKGVuZE9mRmlsZSkgc3RyZWFtLnB1c2gobnVsbCk7CiAgICB0b2tlbi5wcmV2aW91cyA9IGNoaWxkVG9rZW47CiAgICBpZiAoY2hpbGRUb2tlbikgY2hpbGRUb2tlbi5uZXh0ID0gdG9rZW47CiAgICBjaGlsZFRva2VuID0gdG9rZW47CiAgICBjaGlsZEZsb3cuZGVmaW5lU2tpcCh0b2tlbi5zdGFydCk7CiAgICBjaGlsZEZsb3cud3JpdGUoc3RyZWFtKTsKICAgIGlmIChzZWxmMi5wYXJzZXIubGF6eVt0b2tlbi5zdGFydC5saW5lXSkgewogICAgICBsZXQgaW5kZXgyID0gY2hpbGRGbG93LmV2ZW50cy5sZW5ndGg7CiAgICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICAgIGlmICgKICAgICAgICAgIC8vIFRoZSB0b2tlbiBzdGFydHMgYmVmb3JlIHRoZSBsaW5lIGVuZGluZ+KApgogICAgICAgICAgY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA8IGxpbmVTdGFydE9mZnNldCAmJiAvLyDigKZhbmQgZWl0aGVyIGlzIG5vdCBlbmRlZCB5ZXTigKYKICAgICAgICAgICghY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLmVuZCB8fCAvLyDigKZvciBlbmRzIGFmdGVyIGl0LgogICAgICAgICAgY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgPiBsaW5lU3RhcnRPZmZzZXQpCiAgICAgICAgKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IGluZGV4QmVmb3JlRXhpdHMgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogICAgICBsZXQgaW5kZXhCZWZvcmVGbG93ID0gaW5kZXhCZWZvcmVFeGl0czsKICAgICAgbGV0IHNlZW47CiAgICAgIGxldCBwb2ludDQ7CiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkgewogICAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gImV4aXQiICYmIHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLnR5cGUgPT09ICJjaHVua0Zsb3ciKSB7CiAgICAgICAgICBpZiAoc2VlbikgewogICAgICAgICAgICBwb2ludDQgPSBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7CiAgICAgIGluZGV4MiA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIHdoaWxlIChpbmRleDIgPCBzZWxmMi5ldmVudHMubGVuZ3RoKSB7CiAgICAgICAgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uZW5kID0gewogICAgICAgICAgLi4ucG9pbnQ0CiAgICAgICAgfTsKICAgICAgICBpbmRleDIrKzsKICAgICAgfQogICAgICBzcGxpY2Uoc2VsZjIuZXZlbnRzLCBpbmRleEJlZm9yZUZsb3cgKyAxLCAwLCBzZWxmMi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cykpOwogICAgICBzZWxmMi5ldmVudHMubGVuZ3RoID0gaW5kZXgyOwogICAgfQogIH0KICBmdW5jdGlvbiBleGl0Q29udGFpbmVycyhzaXplKSB7CiAgICBsZXQgaW5kZXgyID0gc3RhY2subGVuZ3RoOwogICAgd2hpbGUgKGluZGV4Mi0tID4gc2l6ZSkgewogICAgICBjb25zdCBlbnRyeSA9IHN0YWNrW2luZGV4Ml07CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0gZW50cnlbMV07CiAgICAgIGVudHJ5WzBdLmV4aXQuY2FsbChzZWxmMiwgZWZmZWN0cyk7CiAgICB9CiAgICBzdGFjay5sZW5ndGggPSBzaXplOwogIH0KICBmdW5jdGlvbiBjbG9zZUZsb3coKSB7CiAgICBjaGlsZEZsb3cud3JpdGUoW251bGxdKTsKICAgIGNoaWxkVG9rZW4gPSB2b2lkIDA7CiAgICBjaGlsZEZsb3cgPSB2b2lkIDA7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRhaW5lcihlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsIG9rMywgbm9rKSwgImxpbmVQcmVmaXgiLCB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0KTsKfQp2YXIgZG9jdW1lbnQyLCBjb250YWluZXJDb25zdHJ1Y3Q7CnZhciBpbml0X2RvY3VtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZG9jdW1lbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgZG9jdW1lbnQyID0gewogICAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZURvY3VtZW50CiAgICB9OwogICAgY29udGFpbmVyQ29uc3RydWN0ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250YWluZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9mbG93LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVGbG93KGVmZmVjdHMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgaW5pdGlhbDIgPSBlZmZlY3RzLmF0dGVtcHQoCiAgICAvLyBUcnkgdG8gcGFyc2UgYSBibGFuayBsaW5lLgogICAgYmxhbmtMaW5lLAogICAgYXRCbGFua0VuZGluZywKICAgIC8vIFRyeSB0byBwYXJzZSBpbml0aWFsIGZsb3cgKGVzc2VudGlhbGx5LCBvbmx5IGNvZGUpLgogICAgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsIGFmdGVyQ29uc3RydWN0LCBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdywgYWZ0ZXJDb25zdHJ1Y3QsIGVmZmVjdHMuYXR0ZW1wdChjb250ZW50LCBhZnRlckNvbnN0cnVjdCkpLCAibGluZVByZWZpeCIpKQogICk7CiAgcmV0dXJuIGluaXRpYWwyOwogIGZ1bmN0aW9uIGF0QmxhbmtFbmRpbmcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmdCbGFuayIpOwogICAgc2VsZjIuY3VycmVudENvbnN0cnVjdCA9IHZvaWQgMDsKICAgIHJldHVybiBpbml0aWFsMjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJDb25zdHJ1Y3QoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICBzZWxmMi5jdXJyZW50Q29uc3RydWN0ID0gdm9pZCAwOwogICAgcmV0dXJuIGluaXRpYWwyOwogIH0KfQp2YXIgZmxvdzsKdmFyIGluaXRfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2Zsb3cuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgZmxvdyA9IHsKICAgICAgdG9rZW5pemU6IGluaXRpYWxpemVGbG93CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvdGV4dC5qcwpmdW5jdGlvbiBpbml0aWFsaXplRmFjdG9yeShmaWVsZCkgewogIHJldHVybiB7CiAgICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcihmaWVsZCA9PT0gInRleHQiID8gcmVzb2x2ZUFsbExpbmVTdWZmaXhlcyA6IHZvaWQgMCksCiAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZVRleHQKICB9OwogIGZ1bmN0aW9uIGluaXRpYWxpemVUZXh0KGVmZmVjdHMpIHsKICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgIGNvbnN0IGNvbnN0cnVjdHMyID0gdGhpcy5wYXJzZXIuY29uc3RydWN0c1tmaWVsZF07CiAgICBjb25zdCB0ZXh0OSA9IGVmZmVjdHMuYXR0ZW1wdChjb25zdHJ1Y3RzMiwgc3RhcnQsIG5vdFRleHQpOwogICAgcmV0dXJuIHN0YXJ0OwogICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpID8gdGV4dDkoY29kZTQpIDogbm90VGV4dChjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBub3RUZXh0KGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICAgIGlmIChhdEJyZWFrKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCgiZGF0YSIpOwogICAgICAgIHJldHVybiB0ZXh0OShjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGNvbnN0IGxpc3Q1ID0gY29uc3RydWN0czJbY29kZTRdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIGlmIChsaXN0NSkgewogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgaXRlbSA9IGxpc3Q1W2luZGV4Ml07CiAgICAgICAgICBpZiAoIWl0ZW0ucHJldmlvdXMgfHwgaXRlbS5wcmV2aW91cy5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIoZXh0cmFSZXNvbHZlcikgewogIHJldHVybiByZXNvbHZlQWxsVGV4dDsKICBmdW5jdGlvbiByZXNvbHZlQWxsVGV4dChldmVudHMsIGNvbnRleHQyKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgZW50ZXI7CiAgICB3aGlsZSAoKytpbmRleDIgPD0gZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZW50ZXIgPT09IHZvaWQgMCkgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXSAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiZGF0YSIpIHsKICAgICAgICAgIGVudGVyID0gaW5kZXgyOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFldmVudHNbaW5kZXgyXSB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAiZGF0YSIpIHsKICAgICAgICBpZiAoaW5kZXgyICE9PSBlbnRlciArIDIpIHsKICAgICAgICAgIGV2ZW50c1tlbnRlcl1bMV0uZW5kID0gZXZlbnRzW2luZGV4MiAtIDFdWzFdLmVuZDsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZW50ZXIgKyAyLCBpbmRleDIgLSBlbnRlciAtIDIpOwogICAgICAgICAgaW5kZXgyID0gZW50ZXIgKyAyOwogICAgICAgIH0KICAgICAgICBlbnRlciA9IHZvaWQgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV4dHJhUmVzb2x2ZXIgPyBleHRyYVJlc29sdmVyKGV2ZW50cywgY29udGV4dDIpIDogZXZlbnRzOwogIH0KfQpmdW5jdGlvbiByZXNvbHZlQWxsTGluZVN1ZmZpeGVzKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgZXZlbnRJbmRleCA9IDA7CiAgd2hpbGUgKCsrZXZlbnRJbmRleCA8PSBldmVudHMubGVuZ3RoKSB7CiAgICBpZiAoKGV2ZW50SW5kZXggPT09IGV2ZW50cy5sZW5ndGggfHwgZXZlbnRzW2V2ZW50SW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIikgJiYgZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXS50eXBlID09PSAiZGF0YSIpIHsKICAgICAgY29uc3QgZGF0YSA9IGV2ZW50c1tldmVudEluZGV4IC0gMV1bMV07CiAgICAgIGNvbnN0IGNodW5rcyA9IGNvbnRleHQyLnNsaWNlU3RyZWFtKGRhdGEpOwogICAgICBsZXQgaW5kZXgyID0gY2h1bmtzLmxlbmd0aDsKICAgICAgbGV0IGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgIGxldCBzaXplID0gMDsKICAgICAgbGV0IHRhYnM7CiAgICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4Ml07CiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gY2h1bmsubGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGNodW5rLmNoYXJDb2RlQXQoYnVmZmVySW5kZXggLSAxKSA9PT0gMzIpIHsKICAgICAgICAgICAgc2l6ZSsrOwogICAgICAgICAgICBidWZmZXJJbmRleC0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJ1ZmZlckluZGV4KSBicmVhazsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgICAgfSBlbHNlIGlmIChjaHVuayA9PT0gLTIpIHsKICAgICAgICAgIHRhYnMgPSB0cnVlOwogICAgICAgICAgc2l6ZSsrOwogICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0xKSB7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjb250ZXh0Mi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcgJiYgZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNpemUgPSAwOwogICAgICB9CiAgICAgIGlmIChzaXplKSB7CiAgICAgICAgY29uc3QgdG9rZW4gPSB7CiAgICAgICAgICB0eXBlOiBldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IHRhYnMgfHwgc2l6ZSA8IDIgPyAibGluZVN1ZmZpeCIgOiAiaGFyZEJyZWFrVHJhaWxpbmciLAogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgX2J1ZmZlckluZGV4OiBpbmRleDIgPyBidWZmZXJJbmRleCA6IGRhdGEuc3RhcnQuX2J1ZmZlckluZGV4ICsgYnVmZmVySW5kZXgsCiAgICAgICAgICAgIF9pbmRleDogZGF0YS5zdGFydC5faW5kZXggKyBpbmRleDIsCiAgICAgICAgICAgIGxpbmU6IGRhdGEuZW5kLmxpbmUsCiAgICAgICAgICAgIGNvbHVtbjogZGF0YS5lbmQuY29sdW1uIC0gc2l6ZSwKICAgICAgICAgICAgb2Zmc2V0OiBkYXRhLmVuZC5vZmZzZXQgLSBzaXplCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIC4uLmRhdGEuZW5kCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkYXRhLmVuZCA9IHsKICAgICAgICAgIC4uLnRva2VuLnN0YXJ0CiAgICAgICAgfTsKICAgICAgICBpZiAoZGF0YS5zdGFydC5vZmZzZXQgPT09IGRhdGEuZW5kLm9mZnNldCkgewogICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZXZlbnRJbmRleCwgMCwgWyJlbnRlciIsIHRva2VuLCBjb250ZXh0Ml0sIFsiZXhpdCIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgICAgICAgZXZlbnRJbmRleCArPSAyOwogICAgICAgIH0KICAgICAgfQogICAgICBldmVudEluZGV4Kys7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KdmFyIHJlc29sdmVyLCBzdHJpbmcsIHRleHQzOwp2YXIgaW5pdF90ZXh0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL3RleHQuanMiKCkgewogICAgcmVzb2x2ZXIgPSB7CiAgICAgIHJlc29sdmVBbGw6IGNyZWF0ZVJlc29sdmVyKCkKICAgIH07CiAgICBzdHJpbmcgPSBpbml0aWFsaXplRmFjdG9yeSgic3RyaW5nIik7CiAgICB0ZXh0MyA9IGluaXRpYWxpemVGYWN0b3J5KCJ0ZXh0Iik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29uc3RydWN0cy5qcwp2YXIgY29uc3RydWN0c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGNvbnN0cnVjdHNfZXhwb3J0cywgewogIGF0dGVudGlvbk1hcmtlcnM6ICgpID0+IGF0dGVudGlvbk1hcmtlcnMsCiAgY29udGVudEluaXRpYWw6ICgpID0+IGNvbnRlbnRJbml0aWFsLAogIGRpc2FibGU6ICgpID0+IGRpc2FibGUsCiAgZG9jdW1lbnQ6ICgpID0+IGRvY3VtZW50MywKICBmbG93OiAoKSA9PiBmbG93MiwKICBmbG93SW5pdGlhbDogKCkgPT4gZmxvd0luaXRpYWwsCiAgaW5zaWRlU3BhbjogKCkgPT4gaW5zaWRlU3BhbiwKICBzdHJpbmc6ICgpID0+IHN0cmluZzIsCiAgdGV4dDogKCkgPT4gdGV4dDQKfSk7CnZhciBkb2N1bWVudDMsIGNvbnRlbnRJbml0aWFsLCBmbG93SW5pdGlhbCwgZmxvdzIsIHN0cmluZzIsIHRleHQ0LCBpbnNpZGVTcGFuLCBhdHRlbnRpb25NYXJrZXJzLCBkaXNhYmxlOwp2YXIgaW5pdF9jb25zdHJ1Y3RzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbnN0cnVjdHMuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X3RleHQyKCk7CiAgICBkb2N1bWVudDMgPSB7CiAgICAgIFs0Ml06IGxpc3QzLAogICAgICBbNDNdOiBsaXN0MywKICAgICAgWzQ1XTogbGlzdDMsCiAgICAgIFs0OF06IGxpc3QzLAogICAgICBbNDldOiBsaXN0MywKICAgICAgWzUwXTogbGlzdDMsCiAgICAgIFs1MV06IGxpc3QzLAogICAgICBbNTJdOiBsaXN0MywKICAgICAgWzUzXTogbGlzdDMsCiAgICAgIFs1NF06IGxpc3QzLAogICAgICBbNTVdOiBsaXN0MywKICAgICAgWzU2XTogbGlzdDMsCiAgICAgIFs1N106IGxpc3QzLAogICAgICBbNjJdOiBibG9ja1F1b3RlCiAgICB9OwogICAgY29udGVudEluaXRpYWwgPSB7CiAgICAgIFs5MV06IGRlZmluaXRpb24yCiAgICB9OwogICAgZmxvd0luaXRpYWwgPSB7CiAgICAgIFstMl06IGNvZGVJbmRlbnRlZCwKICAgICAgWy0xXTogY29kZUluZGVudGVkLAogICAgICBbMzJdOiBjb2RlSW5kZW50ZWQKICAgIH07CiAgICBmbG93MiA9IHsKICAgICAgWzM1XTogaGVhZGluZ0F0eCwKICAgICAgWzQyXTogdGhlbWF0aWNCcmVhazIsCiAgICAgIFs0NV06IFtzZXRleHRVbmRlcmxpbmUsIHRoZW1hdGljQnJlYWsyXSwKICAgICAgWzYwXTogaHRtbEZsb3csCiAgICAgIFs2MV06IHNldGV4dFVuZGVybGluZSwKICAgICAgWzk1XTogdGhlbWF0aWNCcmVhazIsCiAgICAgIFs5Nl06IGNvZGVGZW5jZWQsCiAgICAgIFsxMjZdOiBjb2RlRmVuY2VkCiAgICB9OwogICAgc3RyaW5nMiA9IHsKICAgICAgWzM4XTogY2hhcmFjdGVyUmVmZXJlbmNlLAogICAgICBbOTJdOiBjaGFyYWN0ZXJFc2NhcGUKICAgIH07CiAgICB0ZXh0NCA9IHsKICAgICAgWy01XTogbGluZUVuZGluZywKICAgICAgWy00XTogbGluZUVuZGluZywKICAgICAgWy0zXTogbGluZUVuZGluZywKICAgICAgWzMzXTogbGFiZWxTdGFydEltYWdlLAogICAgICBbMzhdOiBjaGFyYWN0ZXJSZWZlcmVuY2UsCiAgICAgIFs0Ml06IGF0dGVudGlvbiwKICAgICAgWzYwXTogW2F1dG9saW5rLCBodG1sVGV4dF0sCiAgICAgIFs5MV06IGxhYmVsU3RhcnRMaW5rLAogICAgICBbOTJdOiBbaGFyZEJyZWFrRXNjYXBlLCBjaGFyYWN0ZXJFc2NhcGVdLAogICAgICBbOTNdOiBsYWJlbEVuZCwKICAgICAgWzk1XTogYXR0ZW50aW9uLAogICAgICBbOTZdOiBjb2RlVGV4dAogICAgfTsKICAgIGluc2lkZVNwYW4gPSB7CiAgICAgIG51bGw6IFthdHRlbnRpb24sIHJlc29sdmVyXQogICAgfTsKICAgIGF0dGVudGlvbk1hcmtlcnMgPSB7CiAgICAgIG51bGw6IFs0MiwgOTVdCiAgICB9OwogICAgZGlzYWJsZSA9IHsKICAgICAgbnVsbDogW10KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY3JlYXRlLXRva2VuaXplci5qcwpmdW5jdGlvbiBjcmVhdGVUb2tlbml6ZXIocGFyc2VyLCBpbml0aWFsaXplLCBmcm9tMikgewogIGxldCBwb2ludDQgPSB7CiAgICBfYnVmZmVySW5kZXg6IC0xLAogICAgX2luZGV4OiAwLAogICAgbGluZTogZnJvbTIgJiYgZnJvbTIubGluZSB8fCAxLAogICAgY29sdW1uOiBmcm9tMiAmJiBmcm9tMi5jb2x1bW4gfHwgMSwKICAgIG9mZnNldDogZnJvbTIgJiYgZnJvbTIub2Zmc2V0IHx8IDAKICB9OwogIGNvbnN0IGNvbHVtblN0YXJ0ID0ge307CiAgY29uc3QgcmVzb2x2ZUFsbENvbnN0cnVjdHMgPSBbXTsKICBsZXQgY2h1bmtzID0gW107CiAgbGV0IHN0YWNrID0gW107CiAgbGV0IGNvbnN1bWVkID0gdHJ1ZTsKICBjb25zdCBlZmZlY3RzID0gewogICAgYXR0ZW1wdDogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjb25zdHJ1Y3QpLAogICAgY2hlY2s6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY2hlY2spLAogICAgY29uc3VtZSwKICAgIGVudGVyLAogICAgZXhpdDogZXhpdDMsCiAgICBpbnRlcnJ1cHQ6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY2hlY2ssIHsKICAgICAgaW50ZXJydXB0OiB0cnVlCiAgICB9KQogIH07CiAgY29uc3QgY29udGV4dDIgPSB7CiAgICBjb2RlOiBudWxsLAogICAgY29udGFpbmVyU3RhdGU6IHt9LAogICAgZGVmaW5lU2tpcCwKICAgIGV2ZW50czogW10sCiAgICBub3c6IG5vdzIsCiAgICBwYXJzZXIsCiAgICBwcmV2aW91czogbnVsbCwKICAgIHNsaWNlU2VyaWFsaXplLAogICAgc2xpY2VTdHJlYW0sCiAgICB3cml0ZQogIH07CiAgbGV0IHN0YXRlMTIgPSBpbml0aWFsaXplLnRva2VuaXplLmNhbGwoY29udGV4dDIsIGVmZmVjdHMpOwogIGxldCBleHBlY3RlZENvZGU7CiAgaWYgKGluaXRpYWxpemUucmVzb2x2ZUFsbCkgewogICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChpbml0aWFsaXplKTsKICB9CiAgcmV0dXJuIGNvbnRleHQyOwogIGZ1bmN0aW9uIHdyaXRlKHNsaWNlKSB7CiAgICBjaHVua3MgPSBwdXNoKGNodW5rcywgc2xpY2UpOwogICAgbWFpbigpOwogICAgaWYgKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0gIT09IG51bGwpIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgYWRkUmVzdWx0KGluaXRpYWxpemUsIDApOwogICAgY29udGV4dDIuZXZlbnRzID0gcmVzb2x2ZUFsbChyZXNvbHZlQWxsQ29uc3RydWN0cywgY29udGV4dDIuZXZlbnRzLCBjb250ZXh0Mik7CiAgICByZXR1cm4gY29udGV4dDIuZXZlbnRzOwogIH0KICBmdW5jdGlvbiBzbGljZVNlcmlhbGl6ZSh0b2tlbiwgZXhwYW5kVGFicykgewogICAgcmV0dXJuIHNlcmlhbGl6ZUNodW5rcyhzbGljZVN0cmVhbSh0b2tlbiksIGV4cGFuZFRhYnMpOwogIH0KICBmdW5jdGlvbiBzbGljZVN0cmVhbSh0b2tlbikgewogICAgcmV0dXJuIHNsaWNlQ2h1bmtzKGNodW5rcywgdG9rZW4pOwogIH0KICBmdW5jdGlvbiBub3cyKCkgewogICAgY29uc3QgewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH0gPSBwb2ludDQ7CiAgICByZXR1cm4gewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRlZmluZVNraXAodmFsdWUyKSB7CiAgICBjb2x1bW5TdGFydFt2YWx1ZTIubGluZV0gPSB2YWx1ZTIuY29sdW1uOwogICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICB9CiAgZnVuY3Rpb24gbWFpbigpIHsKICAgIGxldCBjaHVua0luZGV4OwogICAgd2hpbGUgKHBvaW50NC5faW5kZXggPCBjaHVua3MubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW3BvaW50NC5faW5kZXhdOwogICAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICAgIGNodW5rSW5kZXggPSBwb2ludDQuX2luZGV4OwogICAgICAgIGlmIChwb2ludDQuX2J1ZmZlckluZGV4IDwgMCkgewogICAgICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChwb2ludDQuX2luZGV4ID09PSBjaHVua0luZGV4ICYmIHBvaW50NC5fYnVmZmVySW5kZXggPCBjaHVuay5sZW5ndGgpIHsKICAgICAgICAgIGdvKGNodW5rLmNoYXJDb2RlQXQocG9pbnQ0Ll9idWZmZXJJbmRleCkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBnbyhjaHVuayk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZ28oY29kZTQpIHsKICAgIGNvbnN1bWVkID0gdm9pZCAwOwogICAgZXhwZWN0ZWRDb2RlID0gY29kZTQ7CiAgICBzdGF0ZTEyID0gc3RhdGUxMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnN1bWUoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHBvaW50NC5saW5lKys7CiAgICAgIHBvaW50NC5jb2x1bW4gPSAxOwogICAgICBwb2ludDQub2Zmc2V0ICs9IGNvZGU0ID09PSAtMyA/IDIgOiAxOwogICAgICBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpOwogICAgfSBlbHNlIGlmIChjb2RlNCAhPT0gLTEpIHsKICAgICAgcG9pbnQ0LmNvbHVtbisrOwogICAgICBwb2ludDQub2Zmc2V0Kys7CiAgICB9CiAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA8IDApIHsKICAgICAgcG9pbnQ0Ll9pbmRleCsrOwogICAgfSBlbHNlIHsKICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCsrOwogICAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA9PT0gLy8gUG9pbnRzIHcvIG5vbi1uZWdhdGl2ZSBgX2J1ZmZlckluZGV4YCByZWZlcmVuY2UKICAgICAgLy8gc3RyaW5ncy4KICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgIGNodW5rc1twb2ludDQuX2luZGV4XS5sZW5ndGgpIHsKICAgICAgICBwb2ludDQuX2J1ZmZlckluZGV4ID0gLTE7CiAgICAgICAgcG9pbnQ0Ll9pbmRleCsrOwogICAgICB9CiAgICB9CiAgICBjb250ZXh0Mi5wcmV2aW91cyA9IGNvZGU0OwogICAgY29uc3VtZWQgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBlbnRlcih0eXBlNSwgZmllbGRzKSB7CiAgICBjb25zdCB0b2tlbiA9IGZpZWxkcyB8fCB7fTsKICAgIHRva2VuLnR5cGUgPSB0eXBlNTsKICAgIHRva2VuLnN0YXJ0ID0gbm93MigpOwogICAgY29udGV4dDIuZXZlbnRzLnB1c2goWyJlbnRlciIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgc3RhY2sucHVzaCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQogIGZ1bmN0aW9uIGV4aXQzKHR5cGU1KSB7CiAgICBjb25zdCB0b2tlbiA9IHN0YWNrLnBvcCgpOwogICAgdG9rZW4uZW5kID0gbm93MigpOwogICAgY29udGV4dDIuZXZlbnRzLnB1c2goWyJleGl0IiwgdG9rZW4sIGNvbnRleHQyXSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQogIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNvbnN0cnVjdChjb25zdHJ1Y3QsIGluZm8pIHsKICAgIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGluZm8uZnJvbSk7CiAgfQogIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNoZWNrKF80LCBpbmZvKSB7CiAgICBpbmZvLnJlc3RvcmUoKTsKICB9CiAgZnVuY3Rpb24gY29uc3RydWN0RmFjdG9yeShvbnJldHVybiwgZmllbGRzKSB7CiAgICByZXR1cm4gaG9vazsKICAgIGZ1bmN0aW9uIGhvb2soY29uc3RydWN0czIsIHJldHVyblN0YXRlLCBib2d1c1N0YXRlKSB7CiAgICAgIGxldCBsaXN0T2ZDb25zdHJ1Y3RzOwogICAgICBsZXQgY29uc3RydWN0SW5kZXg7CiAgICAgIGxldCBjdXJyZW50Q29uc3RydWN0OwogICAgICBsZXQgaW5mbzsKICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29uc3RydWN0czIpID8gKAogICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDEgKi8KICAgICAgICBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMyKQogICAgICApIDogInRva2VuaXplIiBpbiBjb25zdHJ1Y3RzMiA/ICgKICAgICAgICAvLyBMb29rcyBsaWtlIGEgY29uc3RydWN0LgogICAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoWwogICAgICAgICAgLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovCiAgICAgICAgICBjb25zdHJ1Y3RzMgogICAgICAgIF0pCiAgICAgICkgOiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMoY29uc3RydWN0czIpOwogICAgICBmdW5jdGlvbiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMobWFwNykgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICAgICAgY29uc3QgbGVmdCA9IGNvZGU0ICE9PSBudWxsICYmIG1hcDdbY29kZTRdOwogICAgICAgICAgY29uc3QgYWxsMyA9IGNvZGU0ICE9PSBudWxsICYmIG1hcDcubnVsbDsKICAgICAgICAgIGNvbnN0IGxpc3Q1ID0gWwogICAgICAgICAgICAvLyBUbyBkbzogYWRkIG1vcmUgZXh0ZW5zaW9uIHRlc3RzLgogICAgICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAyICovCiAgICAgICAgICAgIC4uLkFycmF5LmlzQXJyYXkobGVmdCkgPyBsZWZ0IDogbGVmdCA/IFtsZWZ0XSA6IFtdLAogICAgICAgICAgICAuLi5BcnJheS5pc0FycmF5KGFsbDMpID8gYWxsMyA6IGFsbDMgPyBbYWxsM10gOiBbXQogICAgICAgICAgXTsKICAgICAgICAgIHJldHVybiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3Q1KShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMobGlzdDUpIHsKICAgICAgICBsaXN0T2ZDb25zdHJ1Y3RzID0gbGlzdDU7CiAgICAgICAgY29uc3RydWN0SW5kZXggPSAwOwogICAgICAgIGlmIChsaXN0NS5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBib2d1c1N0YXRlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0KGxpc3Q1W2NvbnN0cnVjdEluZGV4XSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaGFuZGxlQ29uc3RydWN0KGNvbnN0cnVjdCkgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICAgICAgaW5mbyA9IHN0b3JlKCk7CiAgICAgICAgICBjdXJyZW50Q29uc3RydWN0ID0gY29uc3RydWN0OwogICAgICAgICAgaWYgKCFjb25zdHJ1Y3QucGFydGlhbCkgewogICAgICAgICAgICBjb250ZXh0Mi5jdXJyZW50Q29uc3RydWN0ID0gY29uc3RydWN0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbnN0cnVjdC5uYW1lICYmIGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhjb25zdHJ1Y3QubmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY29uc3RydWN0LnRva2VuaXplLmNhbGwoCiAgICAgICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZmllbGRzLCBjcmVhdGUgYW4gb2JqZWN0IHcvIGBjb250ZXh0YCBhcyBpdHMKICAgICAgICAgICAgLy8gcHJvdG90eXBlLgogICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBhIOKAnGxpdmUgYmluZGluZ+KAnSwgd2hpY2ggaXMgbmVlZGVkIGZvciBgaW50ZXJydXB0YC4KICAgICAgICAgICAgZmllbGRzID8gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGNvbnRleHQyKSwgZmllbGRzKSA6IGNvbnRleHQyLAogICAgICAgICAgICBlZmZlY3RzLAogICAgICAgICAgICBvazMsCiAgICAgICAgICAgIG5vawogICAgICAgICAgKShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIG9rMyhjb2RlNCkgewogICAgICAgIGNvbnN1bWVkID0gdHJ1ZTsKICAgICAgICBvbnJldHVybihjdXJyZW50Q29uc3RydWN0LCBpbmZvKTsKICAgICAgICByZXR1cm4gcmV0dXJuU3RhdGU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbm9rKGNvZGU0KSB7CiAgICAgICAgY29uc3VtZWQgPSB0cnVlOwogICAgICAgIGluZm8ucmVzdG9yZSgpOwogICAgICAgIGlmICgrK2NvbnN0cnVjdEluZGV4IDwgbGlzdE9mQ29uc3RydWN0cy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdE9mQ29uc3RydWN0c1tjb25zdHJ1Y3RJbmRleF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBhZGRSZXN1bHQoY29uc3RydWN0LCBmcm9tMykgewogICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlQWxsICYmICFyZXNvbHZlQWxsQ29uc3RydWN0cy5pbmNsdWRlcyhjb25zdHJ1Y3QpKSB7CiAgICAgIHJlc29sdmVBbGxDb25zdHJ1Y3RzLnB1c2goY29uc3RydWN0KTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZSkgewogICAgICBzcGxpY2UoY29udGV4dDIuZXZlbnRzLCBmcm9tMywgY29udGV4dDIuZXZlbnRzLmxlbmd0aCAtIGZyb20zLCBjb25zdHJ1Y3QucmVzb2x2ZShjb250ZXh0Mi5ldmVudHMuc2xpY2UoZnJvbTMpLCBjb250ZXh0MikpOwogICAgfQogICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlVG8pIHsKICAgICAgY29udGV4dDIuZXZlbnRzID0gY29uc3RydWN0LnJlc29sdmVUbyhjb250ZXh0Mi5ldmVudHMsIGNvbnRleHQyKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc3RvcmUoKSB7CiAgICBjb25zdCBzdGFydFBvaW50ID0gbm93MigpOwogICAgY29uc3Qgc3RhcnRQcmV2aW91cyA9IGNvbnRleHQyLnByZXZpb3VzOwogICAgY29uc3Qgc3RhcnRDdXJyZW50Q29uc3RydWN0ID0gY29udGV4dDIuY3VycmVudENvbnN0cnVjdDsKICAgIGNvbnN0IHN0YXJ0RXZlbnRzSW5kZXggPSBjb250ZXh0Mi5ldmVudHMubGVuZ3RoOwogICAgY29uc3Qgc3RhcnRTdGFjayA9IEFycmF5LmZyb20oc3RhY2spOwogICAgcmV0dXJuIHsKICAgICAgZnJvbTogc3RhcnRFdmVudHNJbmRleCwKICAgICAgcmVzdG9yZQogICAgfTsKICAgIGZ1bmN0aW9uIHJlc3RvcmUoKSB7CiAgICAgIHBvaW50NCA9IHN0YXJ0UG9pbnQ7CiAgICAgIGNvbnRleHQyLnByZXZpb3VzID0gc3RhcnRQcmV2aW91czsKICAgICAgY29udGV4dDIuY3VycmVudENvbnN0cnVjdCA9IHN0YXJ0Q3VycmVudENvbnN0cnVjdDsKICAgICAgY29udGV4dDIuZXZlbnRzLmxlbmd0aCA9IHN0YXJ0RXZlbnRzSW5kZXg7CiAgICAgIHN0YWNrID0gc3RhcnRTdGFjazsKICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gYWNjb3VudEZvclBvdGVudGlhbFNraXAoKSB7CiAgICBpZiAocG9pbnQ0LmxpbmUgaW4gY29sdW1uU3RhcnQgJiYgcG9pbnQ0LmNvbHVtbiA8IDIpIHsKICAgICAgcG9pbnQ0LmNvbHVtbiA9IGNvbHVtblN0YXJ0W3BvaW50NC5saW5lXTsKICAgICAgcG9pbnQ0Lm9mZnNldCArPSBjb2x1bW5TdGFydFtwb2ludDQubGluZV0gLSAxOwogICAgfQogIH0KfQpmdW5jdGlvbiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKSB7CiAgY29uc3Qgc3RhcnRJbmRleCA9IHRva2VuLnN0YXJ0Ll9pbmRleDsKICBjb25zdCBzdGFydEJ1ZmZlckluZGV4ID0gdG9rZW4uc3RhcnQuX2J1ZmZlckluZGV4OwogIGNvbnN0IGVuZEluZGV4ID0gdG9rZW4uZW5kLl9pbmRleDsKICBjb25zdCBlbmRCdWZmZXJJbmRleCA9IHRva2VuLmVuZC5fYnVmZmVySW5kZXg7CiAgbGV0IHZpZXc7CiAgaWYgKHN0YXJ0SW5kZXggPT09IGVuZEluZGV4KSB7CiAgICB2aWV3ID0gW2NodW5rc1tzdGFydEluZGV4XS5zbGljZShzdGFydEJ1ZmZlckluZGV4LCBlbmRCdWZmZXJJbmRleCldOwogIH0gZWxzZSB7CiAgICB2aWV3ID0gY2h1bmtzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChzdGFydEJ1ZmZlckluZGV4ID4gLTEpIHsKICAgICAgY29uc3QgaGVhZDIgPSB2aWV3WzBdOwogICAgICBpZiAodHlwZW9mIGhlYWQyID09PSAic3RyaW5nIikgewogICAgICAgIHZpZXdbMF0gPSBoZWFkMi5zbGljZShzdGFydEJ1ZmZlckluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2aWV3LnNoaWZ0KCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChlbmRCdWZmZXJJbmRleCA+IDApIHsKICAgICAgdmlldy5wdXNoKGNodW5rc1tlbmRJbmRleF0uc2xpY2UoMCwgZW5kQnVmZmVySW5kZXgpKTsKICAgIH0KICB9CiAgcmV0dXJuIHZpZXc7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQ2h1bmtzKGNodW5rcywgZXhwYW5kVGFicykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgYXRUYWI7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2h1bmtzLmxlbmd0aCkgewogICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaW5kZXgyXTsKICAgIGxldCB2YWx1ZTI7CiAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICB2YWx1ZTIgPSBjaHVuazsKICAgIH0gZWxzZSBzd2l0Y2ggKGNodW5rKSB7CiAgICAgIGNhc2UgLTU6IHsKICAgICAgICB2YWx1ZTIgPSAiXHIiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTQ6IHsKICAgICAgICB2YWx1ZTIgPSAiXG4iOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTM6IHsKICAgICAgICB2YWx1ZTIgPSAiXHJcbiI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtMjogewogICAgICAgIHZhbHVlMiA9IGV4cGFuZFRhYnMgPyAiICIgOiAiCSI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtMTogewogICAgICAgIGlmICghZXhwYW5kVGFicyAmJiBhdFRhYikgY29udGludWU7CiAgICAgICAgdmFsdWUyID0gIiAiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICB2YWx1ZTIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNodW5rKTsKICAgICAgfQogICAgfQogICAgYXRUYWIgPSBjaHVuayA9PT0gLTI7CiAgICByZXN1bHQucHVzaCh2YWx1ZTIpOwogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CnZhciBpbml0X2NyZWF0ZV90b2tlbml6ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY3JlYXRlLXRva2VuaXplci5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcGFyc2UuanMKZnVuY3Rpb24gcGFyc2U0KG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgY29uc3RydWN0czIgPSAoCiAgICAvKiogQHR5cGUge0Z1bGxOb3JtYWxpemVkRXh0ZW5zaW9ufSAqLwogICAgY29tYmluZUV4dGVuc2lvbnMoW2NvbnN0cnVjdHNfZXhwb3J0cywgLi4uc2V0dGluZ3MuZXh0ZW5zaW9ucyB8fCBbXV0pCiAgKTsKICBjb25zdCBwYXJzZXIgPSB7CiAgICBjb25zdHJ1Y3RzOiBjb25zdHJ1Y3RzMiwKICAgIGNvbnRlbnQ6IGNyZWF0ZTcoY29udGVudDIpLAogICAgZGVmaW5lZDogW10sCiAgICBkb2N1bWVudDogY3JlYXRlNyhkb2N1bWVudDIpLAogICAgZmxvdzogY3JlYXRlNyhmbG93KSwKICAgIGxhenk6IHt9LAogICAgc3RyaW5nOiBjcmVhdGU3KHN0cmluZyksCiAgICB0ZXh0OiBjcmVhdGU3KHRleHQzKQogIH07CiAgcmV0dXJuIHBhcnNlcjsKICBmdW5jdGlvbiBjcmVhdGU3KGluaXRpYWwyKSB7CiAgICByZXR1cm4gY3JlYXRvcjsKICAgIGZ1bmN0aW9uIGNyZWF0b3IoZnJvbTIpIHsKICAgICAgcmV0dXJuIGNyZWF0ZVRva2VuaXplcihwYXJzZXIsIGluaXRpYWwyLCBmcm9tMik7CiAgICB9CiAgfQp9CnZhciBpbml0X3BhcnNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wYXJzZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9jb250ZW50MigpOwogICAgaW5pdF9kb2N1bWVudCgpOwogICAgaW5pdF9mbG93KCk7CiAgICBpbml0X3RleHQyKCk7CiAgICBpbml0X2NvbnN0cnVjdHMoKTsKICAgIGluaXRfY3JlYXRlX3Rva2VuaXplcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzCmZ1bmN0aW9uIHBvc3Rwcm9jZXNzKGV2ZW50cykgewogIHdoaWxlICghc3VidG9rZW5pemUoZXZlbnRzKSkgewogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciBpbml0X3Bvc3Rwcm9jZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc3VidG9rZW5pemUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wcmVwcm9jZXNzLmpzCmZ1bmN0aW9uIHByZXByb2Nlc3MoKSB7CiAgbGV0IGNvbHVtbiA9IDE7CiAgbGV0IGJ1ZmZlcjIgPSAiIjsKICBsZXQgc3RhcnQgPSB0cnVlOwogIGxldCBhdENhcnJpYWdlUmV0dXJuOwogIHJldHVybiBwcmVwcm9jZXNzb3I7CiAgZnVuY3Rpb24gcHJlcHJvY2Vzc29yKHZhbHVlMiwgZW5jb2RpbmcsIGVuZDMpIHsKICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgbGV0IG1hdGNoMjsKICAgIGxldCBuZXh0MjsKICAgIGxldCBzdGFydFBvc2l0aW9uOwogICAgbGV0IGVuZFBvc2l0aW9uOwogICAgbGV0IGNvZGU0OwogICAgdmFsdWUyID0gYnVmZmVyMiArICh0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIiA/IHZhbHVlMi50b1N0cmluZygpIDogbmV3IFRleHREZWNvZGVyKGVuY29kaW5nIHx8IHZvaWQgMCkuZGVjb2RlKHZhbHVlMikpOwogICAgc3RhcnRQb3NpdGlvbiA9IDA7CiAgICBidWZmZXIyID0gIiI7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgaWYgKHZhbHVlMi5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkgewogICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKICAgICAgfQogICAgICBzdGFydCA9IHZvaWQgMDsKICAgIH0KICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgdmFsdWUyLmxlbmd0aCkgewogICAgICBzZWFyY2gubGFzdEluZGV4ID0gc3RhcnRQb3NpdGlvbjsKICAgICAgbWF0Y2gyID0gc2VhcmNoLmV4ZWModmFsdWUyKTsKICAgICAgZW5kUG9zaXRpb24gPSBtYXRjaDIgJiYgbWF0Y2gyLmluZGV4ICE9PSB2b2lkIDAgPyBtYXRjaDIuaW5kZXggOiB2YWx1ZTIubGVuZ3RoOwogICAgICBjb2RlNCA9IHZhbHVlMi5jaGFyQ29kZUF0KGVuZFBvc2l0aW9uKTsKICAgICAgaWYgKCFtYXRjaDIpIHsKICAgICAgICBidWZmZXIyID0gdmFsdWUyLnNsaWNlKHN0YXJ0UG9zaXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gMTAgJiYgc3RhcnRQb3NpdGlvbiA9PT0gZW5kUG9zaXRpb24gJiYgYXRDYXJyaWFnZVJldHVybikgewogICAgICAgIGNodW5rcy5wdXNoKC0zKTsKICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdm9pZCAwOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhdENhcnJpYWdlUmV0dXJuKSB7CiAgICAgICAgICBjaHVua3MucHVzaCgtNSk7CiAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3MucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKTsKICAgICAgICAgIGNvbHVtbiArPSBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY29kZTQpIHsKICAgICAgICAgIGNhc2UgMDogewogICAgICAgICAgICBjaHVua3MucHVzaCg2NTUzMyk7CiAgICAgICAgICAgIGNvbHVtbisrOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgOTogewogICAgICAgICAgICBuZXh0MiA9IE1hdGguY2VpbChjb2x1bW4gLyA0KSAqIDQ7CiAgICAgICAgICAgIGNodW5rcy5wdXNoKC0yKTsKICAgICAgICAgICAgd2hpbGUgKGNvbHVtbisrIDwgbmV4dDIpIGNodW5rcy5wdXNoKC0xKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIDEwOiB7CiAgICAgICAgICAgIGNodW5rcy5wdXNoKC00KTsKICAgICAgICAgICAgY29sdW1uID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICBjb2x1bW4gPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdGFydFBvc2l0aW9uID0gZW5kUG9zaXRpb24gKyAxOwogICAgfQogICAgaWYgKGVuZDMpIHsKICAgICAgaWYgKGF0Q2FycmlhZ2VSZXR1cm4pIGNodW5rcy5wdXNoKC01KTsKICAgICAgaWYgKGJ1ZmZlcjIpIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICBjaHVua3MucHVzaChudWxsKTsKICAgIH0KICAgIHJldHVybiBjaHVua3M7CiAgfQp9CnZhciBzZWFyY2g7CnZhciBpbml0X3ByZXByb2Nlc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcyIoKSB7CiAgICBzZWFyY2ggPSAvW1wwXHRcblxyXS9nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvaW5kZXguanMKZnVuY3Rpb24gbWljcm9tYXJrKHZhbHVlMiwgZW5jb2RpbmcsIG9wdGlvbnMpIHsKICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgb3B0aW9ucyA9IGVuY29kaW5nOwogICAgZW5jb2RpbmcgPSB2b2lkIDA7CiAgfQogIHJldHVybiBjb21waWxlKG9wdGlvbnMpKHBvc3Rwcm9jZXNzKHBhcnNlNChvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZTIsIGVuY29kaW5nLCB0cnVlKSkpKTsKfQp2YXIgaW5pdF9taWNyb21hcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBpbGUoKTsKICAgIGluaXRfcGFyc2UyKCk7CiAgICBpbml0X3Bvc3Rwcm9jZXNzKCk7CiAgICBpbml0X3ByZXByb2Nlc3MoKTsKICAgIGluaXRfY29tcGlsZSgpOwogICAgaW5pdF9wYXJzZTIoKTsKICAgIGluaXRfcG9zdHByb2Nlc3MoKTsKICAgIGluaXRfcHJlcHJvY2VzcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIGZyb21NYXJrZG93bih2YWx1ZTIsIGVuY29kaW5nLCBvcHRpb25zKSB7CiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgIG9wdGlvbnMgPSBlbmNvZGluZzsKICAgIGVuY29kaW5nID0gdm9pZCAwOwogIH0KICByZXR1cm4gY29tcGlsZXIob3B0aW9ucykocG9zdHByb2Nlc3MocGFyc2U0KG9wdGlvbnMpLmRvY3VtZW50KCkud3JpdGUocHJlcHJvY2VzcygpKHZhbHVlMiwgZW5jb2RpbmcsIHRydWUpKSkpOwp9CmZ1bmN0aW9uIGNvbXBpbGVyKG9wdGlvbnMpIHsKICBjb25zdCBjb25maWczID0gewogICAgdHJhbnNmb3JtczogW10sCiAgICBjYW5Db250YWluRW9sczogWyJlbXBoYXNpcyIsICJmcmFnbWVudCIsICJoZWFkaW5nIiwgInBhcmFncmFwaCIsICJzdHJvbmciXSwKICAgIGVudGVyOiB7CiAgICAgIGF1dG9saW5rOiBvcGVuZXIyKGxpbmszKSwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25lbnRlcmRhdGEsCiAgICAgIGF1dG9saW5rRW1haWw6IG9uZW50ZXJkYXRhLAogICAgICBhdHhIZWFkaW5nOiBvcGVuZXIyKGhlYWRpbmczKSwKICAgICAgYmxvY2tRdW90ZTogb3BlbmVyMihibG9ja1F1b3RlMiksCiAgICAgIGNoYXJhY3RlckVzY2FwZTogb25lbnRlcmRhdGEsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25lbnRlcmRhdGEsCiAgICAgIGNvZGVGZW5jZWQ6IG9wZW5lcjIoY29kZUZsb3cpLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBidWZmZXIyLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBidWZmZXIyLAogICAgICBjb2RlSW5kZW50ZWQ6IG9wZW5lcjIoY29kZUZsb3csIGJ1ZmZlcjIpLAogICAgICBjb2RlVGV4dDogb3BlbmVyMihjb2RlVGV4dDIsIGJ1ZmZlcjIpLAogICAgICBjb2RlVGV4dERhdGE6IG9uZW50ZXJkYXRhLAogICAgICBkYXRhOiBvbmVudGVyZGF0YSwKICAgICAgY29kZUZsb3dWYWx1ZTogb25lbnRlcmRhdGEsCiAgICAgIGRlZmluaXRpb246IG9wZW5lcjIoZGVmaW5pdGlvbjMpLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBlbXBoYXNpczogb3BlbmVyMihlbXBoYXNpczMpLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IG9wZW5lcjIoaGFyZEJyZWFrMyksCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBvcGVuZXIyKGhhcmRCcmVhazMpLAogICAgICBodG1sRmxvdzogb3BlbmVyMihodG1sMTgsIGJ1ZmZlcjIpLAogICAgICBodG1sRmxvd0RhdGE6IG9uZW50ZXJkYXRhLAogICAgICBodG1sVGV4dDogb3BlbmVyMihodG1sMTgsIGJ1ZmZlcjIpLAogICAgICBodG1sVGV4dERhdGE6IG9uZW50ZXJkYXRhLAogICAgICBpbWFnZTogb3BlbmVyMihpbWFnZTMpLAogICAgICBsYWJlbDogYnVmZmVyMiwKICAgICAgbGluazogb3BlbmVyMihsaW5rMyksCiAgICAgIGxpc3RJdGVtOiBvcGVuZXIyKGxpc3RJdGVtMyksCiAgICAgIGxpc3RJdGVtVmFsdWU6IG9uZW50ZXJsaXN0aXRlbXZhbHVlLAogICAgICBsaXN0T3JkZXJlZDogb3BlbmVyMihsaXN0NSwgb25lbnRlcmxpc3RvcmRlcmVkKSwKICAgICAgbGlzdFVub3JkZXJlZDogb3BlbmVyMihsaXN0NSksCiAgICAgIHBhcmFncmFwaDogb3BlbmVyMihwYXJhZ3JhcGgzKSwKICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLAogICAgICByZWZlcmVuY2VTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9wZW5lcjIoaGVhZGluZzMpLAogICAgICBzdHJvbmc6IG9wZW5lcjIoc3Ryb25nMyksCiAgICAgIHRoZW1hdGljQnJlYWs6IG9wZW5lcjIodGhlbWF0aWNCcmVhazQpCiAgICB9LAogICAgZXhpdDogewogICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSwKICAgICAgYXR4SGVhZGluZ1NlcXVlbmNlOiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UsCiAgICAgIGF1dG9saW5rOiBjbG9zZXIoKSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCwKICAgICAgYmxvY2tRdW90ZTogY2xvc2VyKCksCiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2UsCiAgICAgIGNvZGVGZW5jZWQ6IGNsb3NlcihvbmV4aXRjb2RlZmVuY2VkKSwKICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8sCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEsCiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZXhpdGRhdGEsCiAgICAgIGNvZGVJbmRlbnRlZDogY2xvc2VyKG9uZXhpdGNvZGVpbmRlbnRlZCksCiAgICAgIGNvZGVUZXh0OiBjbG9zZXIob25leGl0Y29kZXRleHQpLAogICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRlZmluaXRpb246IGNsb3NlcigpLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZywKICAgICAgZGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9ubGFiZWxzdHJpbmcsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nLAogICAgICBlbXBoYXNpczogY2xvc2VyKCksCiAgICAgIGhhcmRCcmVha0VzY2FwZTogY2xvc2VyKG9uZXhpdGhhcmRicmVhayksCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSwKICAgICAgaHRtbEZsb3c6IGNsb3NlcihvbmV4aXRodG1sZmxvdyksCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IGNsb3NlcihvbmV4aXRodG1sdGV4dCksCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IGNsb3NlcihvbmV4aXRpbWFnZSksCiAgICAgIGxhYmVsOiBvbmV4aXRsYWJlbCwKICAgICAgbGFiZWxUZXh0OiBvbmV4aXRsYWJlbHRleHQsCiAgICAgIGxpbmVFbmRpbmc6IG9uZXhpdGxpbmVlbmRpbmcsCiAgICAgIGxpbms6IGNsb3NlcihvbmV4aXRsaW5rKSwKICAgICAgbGlzdEl0ZW06IGNsb3NlcigpLAogICAgICBsaXN0T3JkZXJlZDogY2xvc2VyKCksCiAgICAgIGxpc3RVbm9yZGVyZWQ6IGNsb3NlcigpLAogICAgICBwYXJhZ3JhcGg6IGNsb3NlcigpLAogICAgICByZWZlcmVuY2VTdHJpbmc6IG9uZXhpdHJlZmVyZW5jZXN0cmluZywKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZywKICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZywKICAgICAgcmVzb3VyY2U6IG9uZXhpdHJlc291cmNlLAogICAgICBzZXRleHRIZWFkaW5nOiBjbG9zZXIob25leGl0c2V0ZXh0aGVhZGluZyksCiAgICAgIHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6IG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UsCiAgICAgIHNldGV4dEhlYWRpbmdUZXh0OiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCwKICAgICAgc3Ryb25nOiBjbG9zZXIoKSwKICAgICAgdGhlbWF0aWNCcmVhazogY2xvc2VyKCkKICAgIH0KICB9OwogIGNvbmZpZ3VyZTIoY29uZmlnMywgKG9wdGlvbnMgfHwge30pLm1kYXN0RXh0ZW5zaW9ucyB8fCBbXSk7CiAgY29uc3QgZGF0YSA9IHt9OwogIHJldHVybiBjb21waWxlMjsKICBmdW5jdGlvbiBjb21waWxlMihldmVudHMpIHsKICAgIGxldCB0cmVlID0gewogICAgICB0eXBlOiAicm9vdCIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICBzdGFjazogW3RyZWVdLAogICAgICB0b2tlblN0YWNrOiBbXSwKICAgICAgY29uZmlnOiBjb25maWczLAogICAgICBlbnRlciwKICAgICAgZXhpdDogZXhpdDMsCiAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgcmVzdW1lLAogICAgICBkYXRhCiAgICB9OwogICAgY29uc3QgbGlzdFN0YWNrID0gW107CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdE9yZGVyZWQiIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaXN0VW5vcmRlcmVkIikgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICAgICAgbGlzdFN0YWNrLnB1c2goaW5kZXgyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgdGFpbCA9IGxpc3RTdGFjay5wb3AoKTsKICAgICAgICAgIGluZGV4MiA9IHByZXBhcmVMaXN0KGV2ZW50cywgdGFpbCwgaW5kZXgyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBoYW5kbGVyMiA9IGNvbmZpZzNbZXZlbnRzW2luZGV4Ml1bMF1dOwogICAgICBpZiAob3duNS5jYWxsKGhhbmRsZXIyLCBldmVudHNbaW5kZXgyXVsxXS50eXBlKSkgewogICAgICAgIGhhbmRsZXIyW2V2ZW50c1tpbmRleDJdWzFdLnR5cGVdLmNhbGwoT2JqZWN0LmFzc2lnbih7CiAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogZXZlbnRzW2luZGV4Ml1bMl0uc2xpY2VTZXJpYWxpemUKICAgICAgICB9LCBjb250ZXh0MiksIGV2ZW50c1tpbmRleDJdWzFdKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbnRleHQyLnRva2VuU3RhY2subGVuZ3RoID4gMCkgewogICAgICBjb25zdCB0YWlsID0gY29udGV4dDIudG9rZW5TdGFja1tjb250ZXh0Mi50b2tlblN0YWNrLmxlbmd0aCAtIDFdOwogICAgICBjb25zdCBoYW5kbGVyMiA9IHRhaWxbMV0gfHwgZGVmYXVsdE9uRXJyb3I7CiAgICAgIGhhbmRsZXIyLmNhbGwoY29udGV4dDIsIHZvaWQgMCwgdGFpbFswXSk7CiAgICB9CiAgICB0cmVlLnBvc2l0aW9uID0gewogICAgICBzdGFydDogcG9pbnQyKGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzWzBdWzFdLnN0YXJ0IDogewogICAgICAgIGxpbmU6IDEsCiAgICAgICAgY29sdW1uOiAxLAogICAgICAgIG9mZnNldDogMAogICAgICB9KSwKICAgICAgZW5kOiBwb2ludDIoZXZlbnRzLmxlbmd0aCA+IDAgPyBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdWzFdLmVuZCA6IHsKICAgICAgICBsaW5lOiAxLAogICAgICAgIGNvbHVtbjogMSwKICAgICAgICBvZmZzZXQ6IDAKICAgICAgfSkKICAgIH07CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNvbmZpZzMudHJhbnNmb3Jtcy5sZW5ndGgpIHsKICAgICAgdHJlZSA9IGNvbmZpZzMudHJhbnNmb3Jtc1tpbmRleDJdKHRyZWUpIHx8IHRyZWU7CiAgICB9CiAgICByZXR1cm4gdHJlZTsKICB9CiAgZnVuY3Rpb24gcHJlcGFyZUxpc3QoZXZlbnRzLCBzdGFydCwgbGVuZ3RoKSB7CiAgICBsZXQgaW5kZXgyID0gc3RhcnQgLSAxOwogICAgbGV0IGNvbnRhaW5lckJhbGFuY2UgPSAtMTsKICAgIGxldCBsaXN0U3ByZWFkID0gZmFsc2U7CiAgICBsZXQgbGlzdEl0ZW00OwogICAgbGV0IGxpbmVJbmRleDsKICAgIGxldCBmaXJzdEJsYW5rTGluZUluZGV4OwogICAgbGV0IGF0TWFya2VyOwogICAgd2hpbGUgKCsraW5kZXgyIDw9IGxlbmd0aCkgewogICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpbmRleDJdOwogICAgICBzd2l0Y2ggKGV2ZW50WzFdLnR5cGUpIHsKICAgICAgICBjYXNlICJsaXN0VW5vcmRlcmVkIjoKICAgICAgICBjYXNlICJsaXN0T3JkZXJlZCI6CiAgICAgICAgY2FzZSAiYmxvY2tRdW90ZSI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250YWluZXJCYWxhbmNlLS07CiAgICAgICAgICB9CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lRW5kaW5nQmxhbmsiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgICAgaWYgKGxpc3RJdGVtNCAmJiAhYXRNYXJrZXIgJiYgIWNvbnRhaW5lckJhbGFuY2UgJiYgIWZpcnN0QmxhbmtMaW5lSW5kZXgpIHsKICAgICAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gaW5kZXgyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVQcmVmaXgiOgogICAgICAgIGNhc2UgImxpc3RJdGVtVmFsdWUiOgogICAgICAgIGNhc2UgImxpc3RJdGVtTWFya2VyIjoKICAgICAgICBjYXNlICJsaXN0SXRlbVByZWZpeCI6CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNvbnRhaW5lckJhbGFuY2UgJiYgZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gImxpc3RJdGVtUHJlZml4IiB8fCBjb250YWluZXJCYWxhbmNlID09PSAtMSAmJiBldmVudFswXSA9PT0gImV4aXQiICYmIChldmVudFsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIgfHwgZXZlbnRbMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIikpIHsKICAgICAgICBpZiAobGlzdEl0ZW00KSB7CiAgICAgICAgICBsZXQgdGFpbEluZGV4ID0gaW5kZXgyOwogICAgICAgICAgbGluZUluZGV4ID0gdm9pZCAwOwogICAgICAgICAgd2hpbGUgKHRhaWxJbmRleC0tKSB7CiAgICAgICAgICAgIGNvbnN0IHRhaWxFdmVudCA9IGV2ZW50c1t0YWlsSW5kZXhdOwogICAgICAgICAgICBpZiAodGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpIHsKICAgICAgICAgICAgICBpZiAodGFpbEV2ZW50WzBdID09PSAiZXhpdCIpIGNvbnRpbnVlOwogICAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICAgICAgICAgIGV2ZW50c1tsaW5lSW5kZXhdWzFdLnR5cGUgPSAibGluZUVuZGluZ0JsYW5rIjsKICAgICAgICAgICAgICAgIGxpc3RTcHJlYWQgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9ICJsaW5lRW5kaW5nIjsKICAgICAgICAgICAgICBsaW5lSW5kZXggPSB0YWlsSW5kZXg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVQcmVmaXgiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAiYmxvY2tRdW90ZU1hcmtlciIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbUluZGVudCIpIHsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGZpcnN0QmxhbmtMaW5lSW5kZXggJiYgKCFsaW5lSW5kZXggfHwgZmlyc3RCbGFua0xpbmVJbmRleCA8IGxpbmVJbmRleCkpIHsKICAgICAgICAgICAgbGlzdEl0ZW00Ll9zcHJlYWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgbGlzdEl0ZW00LmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGxpbmVJbmRleCA/IGV2ZW50c1tsaW5lSW5kZXhdWzFdLnN0YXJ0IDogZXZlbnRbMV0uZW5kKTsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UobGluZUluZGV4IHx8IGluZGV4MiwgMCwgWyJleGl0IiwgbGlzdEl0ZW00LCBldmVudFsyXV0pOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICB9CiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7CiAgICAgICAgICAgIHR5cGU6ICJsaXN0SXRlbSIsCiAgICAgICAgICAgIF9zcHJlYWQ6IGZhbHNlLAogICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRbMV0uc3RhcnQpLAogICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZeKAmWxsIGFkZCBgZW5kYCBpbiBhIHNlY29uZC4KICAgICAgICAgICAgZW5kOiB2b2lkIDAKICAgICAgICAgIH07CiAgICAgICAgICBsaXN0SXRlbTQgPSBpdGVtOwogICAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleDIsIDAsIFsiZW50ZXIiLCBpdGVtLCBldmVudFsyXV0pOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICAgIGZpcnN0QmxhbmtMaW5lSW5kZXggPSB2b2lkIDA7CiAgICAgICAgICBhdE1hcmtlciA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBldmVudHNbc3RhcnRdWzFdLl9zcHJlYWQgPSBsaXN0U3ByZWFkOwogICAgcmV0dXJuIGxlbmd0aDsKICB9CiAgZnVuY3Rpb24gb3BlbmVyMihjcmVhdGU3LCBhbmQpIHsKICAgIHJldHVybiBvcGVuOwogICAgZnVuY3Rpb24gb3Blbih0b2tlbikgewogICAgICBlbnRlci5jYWxsKHRoaXMsIGNyZWF0ZTcodG9rZW4pLCB0b2tlbik7CiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gYnVmZmVyMigpIHsKICAgIHRoaXMuc3RhY2sucHVzaCh7CiAgICAgIHR5cGU6ICJmcmFnbWVudCIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGVudGVyKG5vZGUyLCB0b2tlbiwgZXJyb3JIYW5kbGVyKSB7CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQuY2hpbGRyZW47CiAgICBzaWJsaW5nczIucHVzaChub2RlMik7CiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZTIpOwogICAgdGhpcy50b2tlblN0YWNrLnB1c2goW3Rva2VuLCBlcnJvckhhbmRsZXIgfHwgdm9pZCAwXSk7CiAgICBub2RlMi5wb3NpdGlvbiA9IHsKICAgICAgc3RhcnQ6IHBvaW50Mih0b2tlbi5zdGFydCksCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBlbmRgIHdpbGwgYmUgcGF0Y2hlZCBsYXRlci4KICAgICAgZW5kOiB2b2lkIDAKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNsb3NlcihhbmQpIHsKICAgIHJldHVybiBjbG9zZTc7CiAgICBmdW5jdGlvbiBjbG9zZTcodG9rZW4pIHsKICAgICAgaWYgKGFuZCkgYW5kLmNhbGwodGhpcywgdG9rZW4pOwogICAgICBleGl0My5jYWxsKHRoaXMsIHRva2VuKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZXhpdDModG9rZW4sIG9uRXhpdEVycm9yKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICBjb25zdCBvcGVuID0gdGhpcy50b2tlblN0YWNrLnBvcCgpOwogICAgaWYgKCFvcGVuKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiICsgdG9rZW4udHlwZSArICJgICgiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICAgIHN0YXJ0OiB0b2tlbi5zdGFydCwKICAgICAgICBlbmQ6IHRva2VuLmVuZAogICAgICB9KSArICIpOiBpdFx1MjAxOXMgbm90IG9wZW4iKTsKICAgIH0gZWxzZSBpZiAob3BlblswXS50eXBlICE9PSB0b2tlbi50eXBlKSB7CiAgICAgIGlmIChvbkV4aXRFcnJvcikgewogICAgICAgIG9uRXhpdEVycm9yLmNhbGwodGhpcywgdG9rZW4sIG9wZW5bMF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gb3BlblsxXSB8fCBkZWZhdWx0T25FcnJvcjsKICAgICAgICBoYW5kbGVyMi5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTsKICAgICAgfQogICAgfQogICAgbm9kZTIucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIHJlc3VtZSgpIHsKICAgIHJldHVybiB0b1N0cmluZyh0aGlzLnN0YWNrLnBvcCgpKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RvcmRlcmVkKCkgewogICAgdGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbXZhbHVlKHRva2VuKSB7CiAgICBpZiAodGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSkgewogICAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICAgICAgYW5jZXN0b3Iuc3RhcnQgPSBOdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbiksIDEwKTsKICAgICAgdGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSA9IHZvaWQgMDsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubGFuZyA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5tZXRhID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHsKICAgIGlmICh0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUpIHJldHVybjsKICAgIHRoaXMuYnVmZmVyKCk7CiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyLnJlcGxhY2UoL14oXHI/XG58XHIpfChccj9cbnxccikkL2csICIiKTsKICAgIHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWluZGVudGVkKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyLnJlcGxhY2UoLyhccj9cbnxccikkL2csICIiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7CiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhYmVsID0gbGFiZWw7CiAgICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi50aXRsZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKCFub2RlMi5kZXB0aCkgewogICAgICBjb25zdCBkZXB0aCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmxlbmd0aDsKICAgICAgbm9kZTIuZGVwdGggPSBkZXB0aDsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ3RleHQoKSB7CiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIuZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5jb2RlUG9pbnRBdCgwKSA9PT0gNjEgPyAxIDogMjsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHsKICAgIHRoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGF0YSh0b2tlbikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBzaWJsaW5nczIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCB0YWlsID0gc2libGluZ3MyW3NpYmxpbmdzMi5sZW5ndGggLSAxXTsKICAgIGlmICghdGFpbCB8fCB0YWlsLnR5cGUgIT09ICJ0ZXh0IikgewogICAgICB0YWlsID0gdGV4dDkoKTsKICAgICAgdGFpbC5wb3NpdGlvbiA9IHsKICAgICAgICBzdGFydDogcG9pbnQyKHRva2VuLnN0YXJ0KSwKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZeKAmWxsIGFkZCBgZW5kYCBsYXRlci4KICAgICAgICBlbmQ6IHZvaWQgMAogICAgICB9OwogICAgICBzaWJsaW5nczIucHVzaCh0YWlsKTsKICAgIH0KICAgIHRoaXMuc3RhY2sucHVzaCh0YWlsKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikgewogICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICB0YWlsLnZhbHVlICs9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludDIodG9rZW4uZW5kKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikgewogICAgY29uc3QgY29udGV4dDIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmF0SGFyZEJyZWFrKSB7CiAgICAgIGNvbnN0IHRhaWwgPSBjb250ZXh0Mi5jaGlsZHJlbltjb250ZXh0Mi5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludDIodG9rZW4uZW5kKTsKICAgICAgdGhpcy5kYXRhLmF0SGFyZEJyZWFrID0gdm9pZCAwOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nICYmIGNvbmZpZzMuY2FuQ29udGFpbkVvbHMuaW5jbHVkZXMoY29udGV4dDIudHlwZSkpIHsKICAgICAgb25lbnRlcmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGhhcmRicmVhaygpIHsKICAgIHRoaXMuZGF0YS5hdEhhcmRCcmVhayA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGh0bWxmbG93KCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sdGV4dCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmsoKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGlmICh0aGlzLmRhdGEuaW5SZWZlcmVuY2UpIHsKICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlIHx8ICJzaG9ydGN1dCI7CiAgICAgIG5vZGUyLnR5cGUgKz0gIlJlZmVyZW5jZSI7CiAgICAgIG5vZGUyLnJlZmVyZW5jZVR5cGUgPSByZWZlcmVuY2VUeXBlOwogICAgICBkZWxldGUgbm9kZTIudXJsOwogICAgICBkZWxldGUgbm9kZTIudGl0bGU7CiAgICB9IGVsc2UgewogICAgICBkZWxldGUgbm9kZTIuaWRlbnRpZmllcjsKICAgICAgZGVsZXRlIG5vZGUyLmxhYmVsOwogICAgfQogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGltYWdlKCkgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmluUmVmZXJlbmNlKSB7CiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAic2hvcnRjdXQiOwogICAgICBub2RlMi50eXBlICs9ICJSZWZlcmVuY2UiOwogICAgICBub2RlMi5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTsKICAgICAgZGVsZXRlIG5vZGUyLnVybDsKICAgICAgZGVsZXRlIG5vZGUyLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgZGVsZXRlIG5vZGUyLmlkZW50aWZpZXI7CiAgICAgIGRlbGV0ZSBub2RlMi5sYWJlbDsKICAgIH0KICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbHRleHQodG9rZW4pIHsKICAgIGNvbnN0IHN0cmluZzMgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IGFuY2VzdG9yID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdOwogICAgYW5jZXN0b3IubGFiZWwgPSBkZWNvZGVTdHJpbmcoc3RyaW5nMyk7CiAgICBhbmNlc3Rvci5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzdHJpbmczKS50b0xvd2VyQ2FzZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbCgpIHsKICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgdGhpcy5kYXRhLmluUmVmZXJlbmNlID0gdHJ1ZTsKICAgIGlmIChub2RlMi50eXBlID09PSAibGluayIpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gZnJhZ21lbnQuY2hpbGRyZW47CiAgICAgIG5vZGUyLmNoaWxkcmVuID0gY2hpbGRyZW4yOwogICAgfSBlbHNlIHsKICAgICAgbm9kZTIuYWx0ID0gdmFsdWUyOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudGl0bGUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2UoKSB7CiAgICB0aGlzLmRhdGEuaW5SZWZlcmVuY2UgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJyZWZlcmVuY2UoKSB7CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9ICJjb2xsYXBzZWQiOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcodG9rZW4pIHsKICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubGFiZWwgPSBsYWJlbDsKICAgIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKS50b0xvd2VyQ2FzZSgpOwogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSAiZnVsbCI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikgewogICAgdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUgPSB0b2tlbi50eXBlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IHR5cGU1ID0gdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU7CiAgICBsZXQgdmFsdWUyOwogICAgaWYgKHR5cGU1KSB7CiAgICAgIHZhbHVlMiA9IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTIsIHR5cGU1ID09PSAiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIgPyAxMCA6IDE2KTsKICAgICAgdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUgPSB2b2lkIDA7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShkYXRhMik7CiAgICAgIHZhbHVlMiA9IHJlc3VsdDsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICB0YWlsLnZhbHVlICs9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlKHRva2VuKSB7CiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFjay5wb3AoKTsKICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHsKICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua2VtYWlsKHRva2VuKSB7CiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSAibWFpbHRvOiIgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gYmxvY2tRdW90ZTIoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiYmxvY2txdW90ZSIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gY29kZUZsb3coKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiY29kZSIsCiAgICAgIGxhbmc6IG51bGwsCiAgICAgIG1ldGE6IG51bGwsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gY29kZVRleHQyKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImlubGluZUNvZGUiLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRlZmluaXRpb24zKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImRlZmluaXRpb24iLAogICAgICBpZGVudGlmaWVyOiAiIiwKICAgICAgbGFiZWw6IG51bGwsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbXBoYXNpczMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiZW1waGFzaXMiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGhlYWRpbmczKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImhlYWRpbmciLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBkZXB0aGAgd2lsbCBiZSBzZXQgbGF0ZXIuCiAgICAgIGRlcHRoOiAwLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGhhcmRCcmVhazMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiYnJlYWsiCiAgICB9OwogIH0KICBmdW5jdGlvbiBodG1sMTgoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiaHRtbCIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gaW1hZ2UzKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgdGl0bGU6IG51bGwsCiAgICAgIHVybDogIiIsCiAgICAgIGFsdDogbnVsbAogICAgfTsKICB9CiAgZnVuY3Rpb24gbGluazMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGluayIsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpc3Q1KHRva2VuKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIG9yZGVyZWQ6IHRva2VuLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIsCiAgICAgIHN0YXJ0OiBudWxsLAogICAgICBzcHJlYWQ6IHRva2VuLl9zcHJlYWQsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gbGlzdEl0ZW0zKHRva2VuKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGlzdEl0ZW0iLAogICAgICBzcHJlYWQ6IHRva2VuLl9zcHJlYWQsCiAgICAgIGNoZWNrZWQ6IG51bGwsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gcGFyYWdyYXBoMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0cm9uZzMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAic3Ryb25nIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiB0ZXh0OSgpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgdmFsdWU6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiB0aGVtYXRpY0JyZWFrNCgpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJ0aGVtYXRpY0JyZWFrIgogICAgfTsKICB9Cn0KZnVuY3Rpb24gcG9pbnQyKGQ2KSB7CiAgcmV0dXJuIHsKICAgIGxpbmU6IGQ2LmxpbmUsCiAgICBjb2x1bW46IGQ2LmNvbHVtbiwKICAgIG9mZnNldDogZDYub2Zmc2V0CiAgfTsKfQpmdW5jdGlvbiBjb25maWd1cmUyKGNvbWJpbmVkLCBleHRlbnNpb25zKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSBleHRlbnNpb25zW2luZGV4Ml07CiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgIGNvbmZpZ3VyZTIoY29tYmluZWQsIHZhbHVlMik7CiAgICB9IGVsc2UgewogICAgICBleHRlbnNpb24oY29tYmluZWQsIHZhbHVlMik7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGV4dGVuc2lvbihjb21iaW5lZCwgZXh0ZW5zaW9uMikgewogIGxldCBrZXkyOwogIGZvciAoa2V5MiBpbiBleHRlbnNpb24yKSB7CiAgICBpZiAob3duNS5jYWxsKGV4dGVuc2lvbjIsIGtleTIpKSB7CiAgICAgIHN3aXRjaCAoa2V5MikgewogICAgICAgIGNhc2UgImNhbkNvbnRhaW5Fb2xzIjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIGNvbWJpbmVkW2tleTJdLnB1c2goLi4ucmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInRyYW5zZm9ybXMiOiB7CiAgICAgICAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgICBpZiAocmlnaHQpIHsKICAgICAgICAgICAgY29tYmluZWRba2V5Ml0ucHVzaCguLi5yaWdodCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiZW50ZXIiOgogICAgICAgIGNhc2UgImV4aXQiOiB7CiAgICAgICAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgICBpZiAocmlnaHQpIHsKICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21iaW5lZFtrZXkyXSwgcmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKGxlZnQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiICsgbGVmdC50eXBlICsgImAgKCIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiBsZWZ0LnN0YXJ0LAogICAgICBlbmQ6IGxlZnQuZW5kCiAgICB9KSArICIpOiBhIGRpZmZlcmVudCB0b2tlbiAoYCIgKyByaWdodC50eXBlICsgImAsICIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiByaWdodC5zdGFydCwKICAgICAgZW5kOiByaWdodC5lbmQKICAgIH0pICsgIikgaXMgb3BlbiIpOwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBkb2N1bWVudCwgYSB0b2tlbiAoYCIgKyByaWdodC50eXBlICsgImAsICIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiByaWdodC5zdGFydCwKICAgICAgZW5kOiByaWdodC5lbmQKICAgIH0pICsgIikgaXMgc3RpbGwgb3BlbiIpOwogIH0KfQp2YXIgb3duNTsKdmFyIGluaXRfbGliMjEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb20tbWFya2Rvd25AMi4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bi9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX3N0cmluZygpOwogICAgaW5pdF9taWNyb21hcmsoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX251bWVyaWNfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfc3RyaW5nKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3N0cmluZ2lmeV9wb3NpdGlvbigpOwogICAgb3duNSA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9mcm9tX21hcmtkb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtQYXJzZShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLnBhcnNlciA9IHBhcnNlcjsKICBmdW5jdGlvbiBwYXJzZXIoZG9jKSB7CiAgICByZXR1cm4gZnJvbU1hcmtkb3duKGRvYywgewogICAgICAuLi5zZWxmMi5kYXRhKCJzZXR0aW5ncyIpLAogICAgICAuLi5vcHRpb25zLAogICAgICAvLyBOb3RlOiB0aGVzZSBvcHRpb25zIGFyZSBub3QgaW4gdGhlIHJlYWRtZS4KICAgICAgLy8gVGhlIGdvYWwgaXMgZm9yIHRoZW0gdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmcKICAgICAgLy8gcGFzc2VkIGJ5IHVzZXJzLgogICAgICBleHRlbnNpb25zOiBzZWxmMi5kYXRhKCJtaWNyb21hcmtFeHRlbnNpb25zIikgfHwgW10sCiAgICAgIG1kYXN0RXh0ZW5zaW9uczogc2VsZjIuZGF0YSgiZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyIpIHx8IFtdCiAgICB9KTsKICB9Cn0KdmFyIGluaXRfbGliMjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstcGFyc2VAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9mcm9tX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstcGFyc2VAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvaW5kZXguanMKdmFyIGluaXRfcmVtYXJrX3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1hdEAwLjIuMi9ub2RlX21vZHVsZXMvZm9ybWF0L2Zvcm1hdC5qcwp2YXIgcmVxdWlyZV9mb3JtYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1hdEAwLjIuMi9ub2RlX21vZHVsZXMvZm9ybWF0L2Zvcm1hdC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICA7CiAgICAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciBuYW1lc3BhY2UyOwogICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBuYW1lc3BhY2UyID0gbW9kdWxlLmV4cG9ydHMgPSBmb3JtYXQyOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVzcGFjZTIgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcyB8fCAoMSwgZXZhbCkoInRoaXMiKTsKICAgICAgICB9KSgpOwogICAgICB9CiAgICAgIG5hbWVzcGFjZTIuZm9ybWF0ID0gZm9ybWF0MjsKICAgICAgbmFtZXNwYWNlMi52c3ByaW50ZiA9IHZzcHJpbnRmOwogICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG5hbWVzcGFjZTIucHJpbnRmID0gcHJpbnRmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHByaW50ZigpIHsKICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXQyLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwgcmVwbGFjZW1lbnRzKSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdDIuYXBwbHkobnVsbCwgW2ZtdF0uY29uY2F0KHJlcGxhY2VtZW50cykpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZvcm1hdDIoZm10KSB7CiAgICAgICAgdmFyIGFyZ0luZGV4ID0gMSwgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgaTExID0gMCwgbjEzID0gZm10Lmxlbmd0aCwgcmVzdWx0ID0gIiIsIGMxMSwgZXNjYXBlZCA9IGZhbHNlLCBhcmcsIHRtcCwgbGVhZGluZ1plcm8gPSBmYWxzZSwgcHJlY2lzaW9uLCBuZXh0QXJnID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKICAgICAgICB9LCBzbHVycE51bWJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGRpZ2l0cyA9ICIiOwogICAgICAgICAgd2hpbGUgKC9cZC8udGVzdChmbXRbaTExXSkpIHsKICAgICAgICAgICAgZGlnaXRzICs9IGZtdFtpMTErK107CiAgICAgICAgICAgIGMxMSA9IGZtdFtpMTFdOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGRpZ2l0cy5sZW5ndGggPiAwID8gcGFyc2VJbnQoZGlnaXRzKSA6IG51bGw7CiAgICAgICAgfTsKICAgICAgICBmb3IgKDsgaTExIDwgbjEzOyArK2kxMSkgewogICAgICAgICAgYzExID0gZm10W2kxMV07CiAgICAgICAgICBpZiAoZXNjYXBlZCkgewogICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChjMTEgPT0gIi4iKSB7CiAgICAgICAgICAgICAgbGVhZGluZ1plcm8gPSBmYWxzZTsKICAgICAgICAgICAgICBjMTEgPSBmbXRbKytpMTFdOwogICAgICAgICAgICB9IGVsc2UgaWYgKGMxMSA9PSAiMCIgJiYgZm10W2kxMSArIDFdID09ICIuIikgewogICAgICAgICAgICAgIGxlYWRpbmdaZXJvID0gdHJ1ZTsKICAgICAgICAgICAgICBpMTEgKz0gMjsKICAgICAgICAgICAgICBjMTEgPSBmbXRbaTExXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJlY2lzaW9uID0gc2x1cnBOdW1iZXIoKTsKICAgICAgICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygyKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImMiOgogICAgICAgICAgICAgICAgYXJnID0gbmV4dEFyZygpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFN0cmluZykKICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGFyZzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZCI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQobmV4dEFyZygpLCAxMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJmIjoKICAgICAgICAgICAgICAgIHRtcCA9IFN0cmluZyhwYXJzZUZsb2F0KG5leHRBcmcoKSkudG9GaXhlZChwcmVjaXNpb24gfHwgNikpOwogICAgICAgICAgICAgICAgcmVzdWx0ICs9IGxlYWRpbmdaZXJvID8gdG1wIDogdG1wLnJlcGxhY2UoL14wLywgIiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiaiI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gSlNPTi5zdHJpbmdpZnkobmV4dEFyZygpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIm8iOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIwIiArIHBhcnNlSW50KG5leHRBcmcoKSwgMTApLnRvU3RyaW5nKDgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAicyI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gbmV4dEFyZygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gIjB4IiArIHBhcnNlSW50KG5leHRBcmcoKSwgMTApLnRvU3RyaW5nKDE2KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIlgiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIweCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYzExOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoYzExID09PSAiJSIpIHsKICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgKz0gYzExOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZmF1bHRAMi4wLjEvbm9kZV9tb2R1bGVzL2ZhdWx0L2luZGV4LmpzCmZ1bmN0aW9uIGNyZWF0ZTUoQ29uc3RydWN0b3IpIHsKICBGb3JtYXR0ZWRFcnJvci5kaXNwbGF5TmFtZSA9IENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IENvbnN0cnVjdG9yLm5hbWU7CiAgcmV0dXJuIEZvcm1hdHRlZEVycm9yOwogIGZ1bmN0aW9uIEZvcm1hdHRlZEVycm9yKGZvcm1hdDIsIC4uLnZhbHVlcykgewogICAgY29uc3QgcmVhc29uID0gZm9ybWF0MiA/ICgwLCBpbXBvcnRfZm9ybWF0Mi5kZWZhdWx0KShmb3JtYXQyLCAuLi52YWx1ZXMpIDogZm9ybWF0MjsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IocmVhc29uKTsKICB9Cn0KdmFyIGltcG9ydF9mb3JtYXQyLCBmYXVsdDsKdmFyIGluaXRfZmF1bHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mYXVsdEAyLjAuMS9ub2RlX21vZHVsZXMvZmF1bHQvaW5kZXguanMiKCkgewogICAgaW1wb3J0X2Zvcm1hdDIgPSBfX3RvRVNNKHJlcXVpcmVfZm9ybWF0KCksIDEpOwogICAgZmF1bHQgPSBPYmplY3QuYXNzaWduKGNyZWF0ZTUoRXJyb3IpLCB7CiAgICAgIGV2YWw6IGNyZWF0ZTUoRXZhbEVycm9yKSwKICAgICAgcmFuZ2U6IGNyZWF0ZTUoUmFuZ2VFcnJvciksCiAgICAgIHJlZmVyZW5jZTogY3JlYXRlNShSZWZlcmVuY2VFcnJvciksCiAgICAgIHN5bnRheDogY3JlYXRlNShTeW50YXhFcnJvciksCiAgICAgIHR5cGU6IGNyZWF0ZTUoVHlwZUVycm9yKSwKICAgICAgdXJpOiBjcmVhdGU1KFVSSUVycm9yKQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi90by1tYXR0ZXJzLmpzCmZ1bmN0aW9uIHRvTWF0dGVycyhvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGNvbnN0IHByZXNldHNPck1hdHRlcnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBbb3B0aW9uc10gOiBbInlhbWwiXTsKICB3aGlsZSAoKytpbmRleDIgPCBwcmVzZXRzT3JNYXR0ZXJzLmxlbmd0aCkgewogICAgcmVzdWx0W2luZGV4Ml0gPSBtYXR0ZXIocHJlc2V0c09yTWF0dGVyc1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBtYXR0ZXIob3B0aW9uMikgewogIGxldCByZXN1bHQgPSBvcHRpb24yOwogIGlmICh0eXBlb2YgcmVzdWx0ID09PSAic3RyaW5nIikgewogICAgaWYgKCFvd242LmNhbGwobWFya2VycywgcmVzdWx0KSkgewogICAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBtYXR0ZXIgZGVmaW5pdGlvbiBmb3IgYCVzYCIsIHJlc3VsdCk7CiAgICB9CiAgICByZXN1bHQgPSB7CiAgICAgIHR5cGU6IHJlc3VsdCwKICAgICAgbWFya2VyOiBtYXJrZXJzW3Jlc3VsdF0KICAgIH07CiAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgewogICAgdGhyb3cgZmF1bHQoIkV4cGVjdGVkIG1hdHRlciB0byBiZSBhbiBvYmplY3QsIG5vdCBgJWpgIiwgcmVzdWx0KTsKICB9CiAgaWYgKCFvd242LmNhbGwocmVzdWx0LCAidHlwZSIpKSB7CiAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBgdHlwZWAgaW4gbWF0dGVyIGAlamAiLCByZXN1bHQpOwogIH0KICBpZiAoIW93bjYuY2FsbChyZXN1bHQsICJmZW5jZSIpICYmICFvd242LmNhbGwocmVzdWx0LCAibWFya2VyIikpIHsKICAgIHRocm93IGZhdWx0KCJNaXNzaW5nIGBtYXJrZXJgIG9yIGBmZW5jZWAgaW4gbWF0dGVyIGAlamAiLCByZXN1bHQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CnZhciBvd242LCBtYXJrZXJzOwp2YXIgaW5pdF90b19tYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvdG8tbWF0dGVycy5qcyIoKSB7CiAgICBpbml0X2ZhdWx0KCk7CiAgICBvd242ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBtYXJrZXJzID0gewogICAgICB5YW1sOiAiLSIsCiAgICAgIHRvbWw6ICIrIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBmcm9udG1hdHRlcihvcHRpb25zKSB7CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBjb25zdCBmbG93MyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGNvbnN0IGNvZGU0ID0gZmVuY2UobWF0dGVyMiwgIm9wZW4iKS5jaGFyQ29kZUF0KDApOwogICAgY29uc3QgY29uc3RydWN0ID0gY3JlYXRlQ29uc3RydWN0KG1hdHRlcjIpOwogICAgY29uc3QgZXhpc3RpbmcgPSBmbG93M1tjb2RlNF07CiAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHsKICAgICAgZXhpc3RpbmcucHVzaChjb25zdHJ1Y3QpOwogICAgfSBlbHNlIHsKICAgICAgZmxvdzNbY29kZTRdID0gW2NvbnN0cnVjdF07CiAgICB9CiAgfQogIHJldHVybiB7CiAgICBmbG93OiBmbG93MwogIH07Cn0KZnVuY3Rpb24gY3JlYXRlQ29uc3RydWN0KG1hdHRlcjIpIHsKICBjb25zdCBhbnl3aGVyZSA9IG1hdHRlcjIuYW55d2hlcmU7CiAgY29uc3QgZnJvbnRtYXR0ZXJUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBtYXR0ZXIyLnR5cGUKICApOwogIGNvbnN0IGZlbmNlVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgZnJvbnRtYXR0ZXJUeXBlICsgIkZlbmNlIgogICk7CiAgY29uc3Qgc2VxdWVuY2VUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBmZW5jZVR5cGUgKyAiU2VxdWVuY2UiCiAgKTsKICBjb25zdCB2YWx1ZVR5cGUgPSAoCiAgICAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8KICAgIGZyb250bWF0dGVyVHlwZSArICJWYWx1ZSIKICApOwogIGNvbnN0IGNsb3NpbmdGZW5jZUNvbnN0cnVjdCA9IHsKICAgIHRva2VuaXplOiB0b2tlbml6ZUNsb3NpbmdGZW5jZSwKICAgIHBhcnRpYWw6IHRydWUKICB9OwogIGxldCBidWZmZXIyOwogIGxldCBidWZmZXJJbmRleCA9IDA7CiAgcmV0dXJuIHsKICAgIHRva2VuaXplOiB0b2tlbml6ZUZyb250bWF0dGVyLAogICAgY29uY3JldGU6IHRydWUKICB9OwogIGZ1bmN0aW9uIHRva2VuaXplRnJvbnRtYXR0ZXIoZWZmZWN0cywgb2szLCBub2spIHsKICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHNlbGYyLm5vdygpOwogICAgICBpZiAoCiAgICAgICAgLy8gSW5kZW50IG5vdCBhbGxvd2VkLgogICAgICAgIHBvc2l0aW9uMy5jb2x1bW4gPT09IDEgJiYgLy8gTm9ybWFsbHksIG9ubHkgYWxsb3dlZCBpbiBmaXJzdCBsaW5lLgogICAgICAgIChwb3NpdGlvbjMubGluZSA9PT0gMSB8fCBhbnl3aGVyZSkKICAgICAgKSB7CiAgICAgICAgYnVmZmVyMiA9IGZlbmNlKG1hdHRlcjIsICJvcGVuIik7CiAgICAgICAgYnVmZmVySW5kZXggPSAwOwogICAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4KSkgewogICAgICAgICAgZWZmZWN0cy5lbnRlcihmcm9udG1hdHRlclR5cGUpOwogICAgICAgICAgZWZmZWN0cy5lbnRlcihmZW5jZVR5cGUpOwogICAgICAgICAgZWZmZWN0cy5lbnRlcihzZXF1ZW5jZVR5cGUpOwogICAgICAgICAgcmV0dXJuIG9wZW5TZXF1ZW5jZShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlblNlcXVlbmNlKGNvZGU0KSB7CiAgICAgIGlmIChidWZmZXJJbmRleCA9PT0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICBlZmZlY3RzLmV4aXQoc2VxdWVuY2VUeXBlKTsKICAgICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoIndoaXRlc3BhY2UiKTsKICAgICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9wZW5BZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgrKykpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2U7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIG9wZW5TZXF1ZW5jZVdoaXRlc3BhY2U7CiAgICAgIH0KICAgICAgZWZmZWN0cy5leGl0KCJ3aGl0ZXNwYWNlIik7CiAgICAgIHJldHVybiBvcGVuQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlbkFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KGZlbmNlVHlwZSk7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgICAgYnVmZmVyMiA9IGZlbmNlKG1hdHRlcjIsICJjbG9zZSIpOwogICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKICAgICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NpbmdGZW5jZUNvbnN0cnVjdCwgYWZ0ZXIsIGNvbnRlbnRTdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb250ZW50U3RhcnQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgICByZXR1cm4gY29udGVudEVuZChjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcih2YWx1ZVR5cGUpOwogICAgICByZXR1cm4gY29udGVudEluc2lkZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb250ZW50SW5zaWRlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHZhbHVlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250ZW50SW5zaWRlOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NpbmdGZW5jZUNvbnN0cnVjdCwgYWZ0ZXIsIGNvbnRlbnRTdGFydCk7CiAgICB9CiAgICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgICBlZmZlY3RzLmV4aXQoZnJvbnRtYXR0ZXJUeXBlKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRva2VuaXplQ2xvc2luZ0ZlbmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBsZXQgYnVmZmVySW5kZXgyID0gMDsKICAgIHJldHVybiBjbG9zZVN0YXJ0OwogICAgZnVuY3Rpb24gY2xvc2VTdGFydChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IGJ1ZmZlcjIuY2hhckNvZGVBdChidWZmZXJJbmRleDIpKSB7CiAgICAgICAgZWZmZWN0cy5lbnRlcihmZW5jZVR5cGUpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKTsKICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZShjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlKGNvZGU0KSB7CiAgICAgIGlmIChidWZmZXJJbmRleDIgPT09IGJ1ZmZlcjIubGVuZ3RoKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHNlcXVlbmNlVHlwZSk7CiAgICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgICAgICBlZmZlY3RzLmVudGVyKCJ3aGl0ZXNwYWNlIik7CiAgICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZVdoaXRlc3BhY2UoY29kZTQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2xvc2VBZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgyKyspKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZTsKICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZXhpdCgid2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gY2xvc2VBZnRlcihjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZUFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KGZlbmNlVHlwZSk7CiAgICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGZlbmNlKG1hdHRlcjIsIHByb3ApIHsKICByZXR1cm4gbWF0dGVyMi5tYXJrZXIgPyBwaWNrKG1hdHRlcjIubWFya2VyLCBwcm9wKS5yZXBlYXQoMykgOiAoCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUaGV54oCZcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgcGljayhtYXR0ZXIyLmZlbmNlLCBwcm9wKQogICk7Cn0KZnVuY3Rpb24gcGljayhzY2hlbWEsIHByb3ApIHsKICByZXR1cm4gdHlwZW9mIHNjaGVtYSA9PT0gInN0cmluZyIgPyBzY2hlbWEgOiBzY2hlbWFbcHJvcF07Cn0KdmFyIGluaXRfc3ludGF4NiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF90b19tYXR0ZXJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9odG1sLmpzCnZhciBpbml0X2h0bWw3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3ludGF4NigpOwogICAgaW5pdF9odG1sNygpOwogICAgaW5pdF90b19tYXR0ZXJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBmcm9udG1hdHRlckZyb21NYXJrZG93bihvcHRpb25zKSB7CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBjb25zdCBlbnRlciA9IHt9OwogIGNvbnN0IGV4aXQzID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IG1hdHRlcnMubGVuZ3RoKSB7CiAgICBjb25zdCBtYXR0ZXIyID0gbWF0dGVyc1tpbmRleDJdOwogICAgZW50ZXJbbWF0dGVyMi50eXBlXSA9IG9wZW5lcihtYXR0ZXIyKTsKICAgIGV4aXQzW21hdHRlcjIudHlwZV0gPSBjbG9zZTY7CiAgICBleGl0M1ttYXR0ZXIyLnR5cGUgKyAiVmFsdWUiXSA9IHZhbHVlOwogIH0KICByZXR1cm4geyBlbnRlciwgZXhpdDogZXhpdDMgfTsKfQpmdW5jdGlvbiBvcGVuZXIobWF0dGVyMikgewogIHJldHVybiBvcGVuOwogIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHsKICAgIHRoaXMuZW50ZXIoeyB0eXBlOiBtYXR0ZXIyLnR5cGUsIHZhbHVlOiAiIiB9LCB0b2tlbik7CiAgICB0aGlzLmJ1ZmZlcigpOwogIH0KfQpmdW5jdGlvbiBjbG9zZTYodG9rZW4pIHsKICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvaygidmFsdWUiIGluIG5vZGUyKTsKICB0aGlzLmV4aXQodG9rZW4pOwogIG5vZGUyLnZhbHVlID0gZGF0YS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCAiIik7Cn0KZnVuY3Rpb24gdmFsdWUodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5lbnRlci5kYXRhLmNhbGwodGhpcywgdG9rZW4pOwogIHRoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBmcm9udG1hdHRlclRvTWFya2Rvd24ob3B0aW9ucykgewogIGNvbnN0IHVuc2FmZTIgPSBbXTsKICBjb25zdCBoYW5kbGVyczIgPSB7fTsKICBjb25zdCBtYXR0ZXJzID0gdG9NYXR0ZXJzKG9wdGlvbnMpOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGhhbmRsZXJzMlttYXR0ZXIyLnR5cGVdID0gaGFuZGxlcihtYXR0ZXIyKTsKICAgIGNvbnN0IG9wZW4gPSBmZW5jZTIobWF0dGVyMiwgIm9wZW4iKTsKICAgIHVuc2FmZTIucHVzaCh7CiAgICAgIGF0QnJlYWs6IHRydWUsCiAgICAgIGNoYXJhY3Rlcjogb3Blbi5jaGFyQXQoMCksCiAgICAgIGFmdGVyOiBlc2NhcGVTdHJpbmdSZWdleHAob3Blbi5jaGFyQXQoMSkpCiAgICB9KTsKICB9CiAgcmV0dXJuIHsgdW5zYWZlOiB1bnNhZmUyLCBoYW5kbGVyczogaGFuZGxlcnMyIH07Cn0KZnVuY3Rpb24gaGFuZGxlcihtYXR0ZXIyKSB7CiAgY29uc3Qgb3BlbiA9IGZlbmNlMihtYXR0ZXIyLCAib3BlbiIpOwogIGNvbnN0IGNsb3NlNyA9IGZlbmNlMihtYXR0ZXIyLCAiY2xvc2UiKTsKICByZXR1cm4gaGFuZGxlMzsKICBmdW5jdGlvbiBoYW5kbGUzKG5vZGUyKSB7CiAgICByZXR1cm4gb3BlbiArIChub2RlMi52YWx1ZSA/ICJcbiIgKyBub2RlMi52YWx1ZSA6ICIiKSArICJcbiIgKyBjbG9zZTc7CiAgfQp9CmZ1bmN0aW9uIGZlbmNlMihtYXR0ZXIyLCBwcm9wKSB7CiAgcmV0dXJuIG1hdHRlcjIubWFya2VyID8gcGljazIobWF0dGVyMi5tYXJrZXIsIHByb3ApLnJlcGVhdCgzKSA6ICgKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFRoZXnigJlyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAgICBwaWNrMihtYXR0ZXIyLmZlbmNlLCBwcm9wKQogICk7Cn0KZnVuY3Rpb24gcGljazIoc2NoZW1hLCBwcm9wKSB7CiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICJzdHJpbmciID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdOwp9CnZhciBpbml0X2xpYjIzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIoKTsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9mcm9udG1hdHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWZyb250bWF0dGVyQDUuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstZnJvbnRtYXR0ZXIvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0Zyb250bWF0dGVyKG9wdGlvbnMpIHsKICBjb25zdCBzZWxmMiA9ICgKICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yfSAqLwogICAgdGhpcwogICk7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczQ7CiAgY29uc3QgZGF0YSA9IHNlbGYyLmRhdGEoKTsKICBjb25zdCBtaWNyb21hcmtFeHRlbnNpb25zID0gZGF0YS5taWNyb21hcmtFeHRlbnNpb25zIHx8IChkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgPSBbXSk7CiAgY29uc3QgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyB8fCAoZGF0YS5mcm9tTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIGNvbnN0IHRvTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyB8fCAoZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBtaWNyb21hcmtFeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXIoc2V0dGluZ3MpKTsKICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24oc2V0dGluZ3MpKTsKICB0b01hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyVG9NYXJrZG93bihzZXR0aW5ncykpOwp9CnZhciBlbXB0eU9wdGlvbnM0Owp2YXIgaW5pdF9saWIyNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZnJvbnRtYXR0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9mcm9udG1hdHRlcigpOwogICAgZW1wdHlPcHRpb25zNCA9ICJ5YW1sIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19mcm9udG1hdHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMKdmFyIFZPSUQsIFBSSU1JVElWRSwgQVJSQVksIE9CSkVDVCwgREFURSwgUkVHRVhQLCBNQVAsIFNFVCwgRVJST1IsIEJJR0lOVDsKdmFyIGluaXRfdHlwZXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS90eXBlcy5qcyIoKSB7CiAgICBWT0lEID0gLTE7CiAgICBQUklNSVRJVkUgPSAwOwogICAgQVJSQVkgPSAxOwogICAgT0JKRUNUID0gMjsKICAgIERBVEUgPSAzOwogICAgUkVHRVhQID0gNDsKICAgIE1BUCA9IDU7CiAgICBTRVQgPSA2OwogICAgRVJST1IgPSA3OwogICAgQklHSU5UID0gODsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vZGVzZXJpYWxpemUuanMKdmFyIGVudiwgZGVzZXJpYWxpemVyLCBkZXNlcmlhbGl6ZTsKdmFyIGluaXRfZGVzZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2Rlc2VyaWFsaXplLmpzIigpIHsKICAgIGluaXRfdHlwZXMyKCk7CiAgICBlbnYgPSB0eXBlb2Ygc2VsZiA9PT0gIm9iamVjdCIgPyBzZWxmIDogZ2xvYmFsVGhpczsKICAgIGRlc2VyaWFsaXplciA9ICgkMywgXzQpID0+IHsKICAgICAgY29uc3QgYXMgPSAob3V0LCBpbmRleDIpID0+IHsKICAgICAgICAkMy5zZXQoaW5kZXgyLCBvdXQpOwogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH07CiAgICAgIGNvbnN0IHVucGFpciA9IChpbmRleDIpID0+IHsKICAgICAgICBpZiAoJDMuaGFzKGluZGV4MikpCiAgICAgICAgICByZXR1cm4gJDMuZ2V0KGluZGV4Mik7CiAgICAgICAgY29uc3QgW3R5cGU1LCB2YWx1ZTJdID0gXzRbaW5kZXgyXTsKICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICBjYXNlIFBSSU1JVElWRToKICAgICAgICAgIGNhc2UgVk9JRDoKICAgICAgICAgICAgcmV0dXJuIGFzKHZhbHVlMiwgaW5kZXgyKTsKICAgICAgICAgIGNhc2UgQVJSQVk6IHsKICAgICAgICAgICAgY29uc3QgYXJyID0gYXMoW10sIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXgzIG9mIHZhbHVlMikKICAgICAgICAgICAgICBhcnIucHVzaCh1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9CSkVDVDogewogICAgICAgICAgICBjb25zdCBvYmplY3QgPSBhcyh7fSwgaW5kZXgyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgaW5kZXgzXSBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgb2JqZWN0W3VucGFpcihrZXkyKV0gPSB1bnBhaXIoaW5kZXgzKTsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgREFURToKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRlKHZhbHVlMiksIGluZGV4Mik7CiAgICAgICAgICBjYXNlIFJFR0VYUDogewogICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgZmxhZ3MgfSA9IHZhbHVlMjsKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBSZWdFeHAoc291cmNlLCBmbGFncyksIGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE1BUDogewogICAgICAgICAgICBjb25zdCBtYXA3ID0gYXMoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgaW5kZXgyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgaW5kZXgzXSBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgbWFwNy5zZXQodW5wYWlyKGtleTIpLCB1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBtYXA3OwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBTRVQ6IHsKICAgICAgICAgICAgY29uc3Qgc2V0MyA9IGFzKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXgzIG9mIHZhbHVlMikKICAgICAgICAgICAgICBzZXQzLmFkZCh1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBzZXQzOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBFUlJPUjogewogICAgICAgICAgICBjb25zdCB7IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UyIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgZW52W25hbWVdKG1lc3NhZ2UyKSwgaW5kZXgyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgQklHSU5UOgogICAgICAgICAgICByZXR1cm4gYXMoQmlnSW50KHZhbHVlMiksIGluZGV4Mik7CiAgICAgICAgICBjYXNlICJCaWdJbnQiOgogICAgICAgICAgICByZXR1cm4gYXMoT2JqZWN0KEJpZ0ludCh2YWx1ZTIpKSwgaW5kZXgyKTsKICAgICAgICAgIGNhc2UgIkFycmF5QnVmZmVyIjoKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBVaW50OEFycmF5KHZhbHVlMikuYnVmZmVyLCB2YWx1ZTIpOwogICAgICAgICAgY2FzZSAiRGF0YVZpZXciOiB7CiAgICAgICAgICAgIGNvbnN0IHsgYnVmZmVyOiBidWZmZXIyIH0gPSBuZXcgVWludDhBcnJheSh2YWx1ZTIpOwogICAgICAgICAgICByZXR1cm4gYXMobmV3IERhdGFWaWV3KGJ1ZmZlcjIpLCB2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXMobmV3IGVudlt0eXBlNV0odmFsdWUyKSwgaW5kZXgyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHVucGFpcjsKICAgIH07CiAgICBkZXNlcmlhbGl6ZSA9IChzZXJpYWxpemVkKSA9PiBkZXNlcmlhbGl6ZXIoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgc2VyaWFsaXplZCkoMCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL3NlcmlhbGl6ZS5qcwp2YXIgRU1QVFkyLCB0b1N0cmluZzIsIGtleXMsIHR5cGVPZiwgc2hvdWxkU2tpcCwgc2VyaWFsaXplciwgc2VyaWFsaXplMjsKdmFyIGluaXRfc2VyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9zZXJpYWxpemUuanMiKCkgewogICAgaW5pdF90eXBlczIoKTsKICAgIEVNUFRZMiA9ICIiOwogICAgKHsgdG9TdHJpbmc6IHRvU3RyaW5nMiB9ID0ge30pOwogICAgKHsga2V5cyB9ID0gT2JqZWN0KTsKICAgIHR5cGVPZiA9ICh2YWx1ZTIpID0+IHsKICAgICAgY29uc3QgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICBpZiAodHlwZTUgIT09ICJvYmplY3QiIHx8ICF2YWx1ZTIpCiAgICAgICAgcmV0dXJuIFtQUklNSVRJVkUsIHR5cGU1XTsKICAgICAgY29uc3QgYXNTdHJpbmcgPSB0b1N0cmluZzIuY2FsbCh2YWx1ZTIpLnNsaWNlKDgsIC0xKTsKICAgICAgc3dpdGNoIChhc1N0cmluZykgewogICAgICAgIGNhc2UgIkFycmF5IjoKICAgICAgICAgIHJldHVybiBbQVJSQVksIEVNUFRZMl07CiAgICAgICAgY2FzZSAiT2JqZWN0IjoKICAgICAgICAgIHJldHVybiBbT0JKRUNULCBFTVBUWTJdOwogICAgICAgIGNhc2UgIkRhdGUiOgogICAgICAgICAgcmV0dXJuIFtEQVRFLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIlJlZ0V4cCI6CiAgICAgICAgICByZXR1cm4gW1JFR0VYUCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJNYXAiOgogICAgICAgICAgcmV0dXJuIFtNQVAsIEVNUFRZMl07CiAgICAgICAgY2FzZSAiU2V0IjoKICAgICAgICAgIHJldHVybiBbU0VULCBFTVBUWTJdOwogICAgICAgIGNhc2UgIkRhdGFWaWV3IjoKICAgICAgICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTsKICAgICAgfQogICAgICBpZiAoYXNTdHJpbmcuaW5jbHVkZXMoIkFycmF5IikpCiAgICAgICAgcmV0dXJuIFtBUlJBWSwgYXNTdHJpbmddOwogICAgICBpZiAoYXNTdHJpbmcuaW5jbHVkZXMoIkVycm9yIikpCiAgICAgICAgcmV0dXJuIFtFUlJPUiwgYXNTdHJpbmddOwogICAgICByZXR1cm4gW09CSkVDVCwgYXNTdHJpbmddOwogICAgfTsKICAgIHNob3VsZFNraXAgPSAoW1RZUEUsIHR5cGU1XSkgPT4gVFlQRSA9PT0gUFJJTUlUSVZFICYmICh0eXBlNSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlNSA9PT0gInN5bWJvbCIpOwogICAgc2VyaWFsaXplciA9IChzdHJpY3QsIGpzb24sICQzLCBfNCkgPT4gewogICAgICBjb25zdCBhcyA9IChvdXQsIHZhbHVlMikgPT4gewogICAgICAgIGNvbnN0IGluZGV4MiA9IF80LnB1c2gob3V0KSAtIDE7CiAgICAgICAgJDMuc2V0KHZhbHVlMiwgaW5kZXgyKTsKICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICB9OwogICAgICBjb25zdCBwYWlyID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICgkMy5oYXModmFsdWUyKSkKICAgICAgICAgIHJldHVybiAkMy5nZXQodmFsdWUyKTsKICAgICAgICBsZXQgW1RZUEUsIHR5cGU1XSA9IHR5cGVPZih2YWx1ZTIpOwogICAgICAgIHN3aXRjaCAoVFlQRSkgewogICAgICAgICAgY2FzZSBQUklNSVRJVkU6IHsKICAgICAgICAgICAgbGV0IGVudHJ5ID0gdmFsdWUyOwogICAgICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICAgICAgY2FzZSAiYmlnaW50IjoKICAgICAgICAgICAgICAgIFRZUEUgPSBCSUdJTlQ7CiAgICAgICAgICAgICAgICBlbnRyeSA9IHZhbHVlMi50b1N0cmluZygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZnVuY3Rpb24iOgogICAgICAgICAgICAgIGNhc2UgInN5bWJvbCI6CiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KQogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmFibGUgdG8gc2VyaWFsaXplICIgKyB0eXBlNSk7CiAgICAgICAgICAgICAgICBlbnRyeSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgogICAgICAgICAgICAgICAgcmV0dXJuIGFzKFtWT0lEXSwgdmFsdWUyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXMoW1RZUEUsIGVudHJ5XSwgdmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgQVJSQVk6IHsKICAgICAgICAgICAgaWYgKHR5cGU1KSB7CiAgICAgICAgICAgICAgbGV0IHNwcmVhZCA9IHZhbHVlMjsKICAgICAgICAgICAgICBpZiAodHlwZTUgPT09ICJEYXRhVmlldyIpIHsKICAgICAgICAgICAgICAgIHNwcmVhZCA9IG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJBcnJheUJ1ZmZlciIpIHsKICAgICAgICAgICAgICAgIHNwcmVhZCA9IG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIFsuLi5zcHJlYWRdXSwgdmFsdWUyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBhcnIgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGFycl0sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUyKQogICAgICAgICAgICAgIGFyci5wdXNoKHBhaXIoZW50cnkpKTsKICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgT0JKRUNUOiB7CiAgICAgICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgICAgICAgIGNhc2UgIkJpZ0ludCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIHZhbHVlMi50b1N0cmluZygpXSwgdmFsdWUyKTsKICAgICAgICAgICAgICAgIGNhc2UgIkJvb2xlYW4iOgogICAgICAgICAgICAgICAgY2FzZSAiTnVtYmVyIjoKICAgICAgICAgICAgICAgIGNhc2UgIlN0cmluZyI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIHZhbHVlMi52YWx1ZU9mKCldLCB2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoanNvbiAmJiAidG9KU09OIiBpbiB2YWx1ZTIpCiAgICAgICAgICAgICAgcmV0dXJuIHBhaXIodmFsdWUyLnRvSlNPTigpKTsKICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdOwogICAgICAgICAgICBjb25zdCBpbmRleDIgPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzKHZhbHVlMikpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZih2YWx1ZTJba2V5Ml0pKSkKICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChbcGFpcihrZXkyKSwgcGFpcih2YWx1ZTJba2V5Ml0pXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgREFURToKICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB2YWx1ZTIudG9JU09TdHJpbmcoKV0sIHZhbHVlMik7CiAgICAgICAgICBjYXNlIFJFR0VYUDogewogICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgZmxhZ3MgfSA9IHZhbHVlMjsKICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB7IHNvdXJjZSwgZmxhZ3MgfV0sIHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE1BUDogewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBlbnRyaWVzXSwgdmFsdWUyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgZW50cnldIG9mIHZhbHVlMikgewogICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgIShzaG91bGRTa2lwKHR5cGVPZihrZXkyKSkgfHwgc2hvdWxkU2tpcCh0eXBlT2YoZW50cnkpKSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5MiksIHBhaXIoZW50cnkpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgU0VUOiB7CiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlMikgewogICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgIXNob3VsZFNraXAodHlwZU9mKGVudHJ5KSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2gocGFpcihlbnRyeSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZTIgfSA9IHZhbHVlMjsKICAgICAgICByZXR1cm4gYXMoW1RZUEUsIHsgbmFtZTogdHlwZTUsIG1lc3NhZ2U6IG1lc3NhZ2UyIH1dLCB2YWx1ZTIpOwogICAgICB9OwogICAgICByZXR1cm4gcGFpcjsKICAgIH07CiAgICBzZXJpYWxpemUyID0gKHZhbHVlMiwgeyBqc29uLCBsb3NzeSB9ID0ge30pID0+IHsKICAgICAgY29uc3QgXzQgPSBbXTsKICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIoIShqc29uIHx8IGxvc3N5KSwgISFqc29uLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBfNCkodmFsdWUyKSwgXzQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9pbmRleC5qcwp2YXIgZXNtX2RlZmF1bHQ7CnZhciBpbml0X2VzbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vaW5kZXguanMiKCkgewogICAgaW5pdF9kZXNlcmlhbGl6ZSgpOwogICAgaW5pdF9zZXJpYWxpemUoKTsKICAgIGVzbV9kZWZhdWx0ID0gdHlwZW9mIHN0cnVjdHVyZWRDbG9uZSA9PT0gImZ1bmN0aW9uIiA/ICgKICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovCiAgICAgIChhbnksIG9wdGlvbnMpID0+IG9wdGlvbnMgJiYgKCJqc29uIiBpbiBvcHRpb25zIHx8ICJsb3NzeSIgaW4gb3B0aW9ucykgPyBkZXNlcmlhbGl6ZShzZXJpYWxpemUyKGFueSwgb3B0aW9ucykpIDogc3RydWN0dXJlZENsb25lKGFueSkKICAgICkgOiAoYW55LCBvcHRpb25zKSA9PiBkZXNlcmlhbGl6ZShzZXJpYWxpemUyKGFueSwgb3B0aW9ucykpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9saWIvaW5kZXguanMKZnVuY3Rpb24gcG9pbnQzKHR5cGU1KSB7CiAgcmV0dXJuIHBvaW50NDsKICBmdW5jdGlvbiBwb2ludDQobm9kZTIpIHsKICAgIGNvbnN0IHBvaW50NSA9IG5vZGUyICYmIG5vZGUyLnBvc2l0aW9uICYmIG5vZGUyLnBvc2l0aW9uW3R5cGU1XSB8fCB7fTsKICAgIGlmICh0eXBlb2YgcG9pbnQ1LmxpbmUgPT09ICJudW1iZXIiICYmIHBvaW50NS5saW5lID4gMCAmJiB0eXBlb2YgcG9pbnQ1LmNvbHVtbiA9PT0gIm51bWJlciIgJiYgcG9pbnQ1LmNvbHVtbiA+IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBsaW5lOiBwb2ludDUubGluZSwKICAgICAgICBjb2x1bW46IHBvaW50NS5jb2x1bW4sCiAgICAgICAgb2Zmc2V0OiB0eXBlb2YgcG9pbnQ1Lm9mZnNldCA9PT0gIm51bWJlciIgJiYgcG9pbnQ1Lm9mZnNldCA+IC0xID8gcG9pbnQ1Lm9mZnNldCA6IHZvaWQgMAogICAgICB9OwogICAgfQogIH0KfQpmdW5jdGlvbiBwb3NpdGlvbjIobm9kZTIpIHsKICBjb25zdCBzdGFydCA9IHBvaW50U3RhcnQobm9kZTIpOwogIGNvbnN0IGVuZDMgPSBwb2ludEVuZChub2RlMik7CiAgaWYgKHN0YXJ0ICYmIGVuZDMpIHsKICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKICB9Cn0KdmFyIHBvaW50RW5kLCBwb2ludFN0YXJ0Owp2YXIgaW5pdF9saWIyNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtcG9zaXRpb25ANS4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vbGliL2luZGV4LmpzIigpIHsKICAgIHBvaW50RW5kID0gcG9pbnQzKCJlbmQiKTsKICAgIHBvaW50U3RhcnQgPSBwb2ludDMoInN0YXJ0Iik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9zY2hlbWEuanMKdmFyIGFyaWEsIGRlZmF1bHRTY2hlbWE7CnZhciBpbml0X3NjaGVtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9zY2hlbWEuanMiKCkgewogICAgYXJpYSA9IFsiYXJpYURlc2NyaWJlZEJ5IiwgImFyaWFMYWJlbCIsICJhcmlhTGFiZWxsZWRCeSJdOwogICAgZGVmYXVsdFNjaGVtYSA9IHsKICAgICAgYW5jZXN0b3JzOiB7CiAgICAgICAgdGJvZHk6IFsidGFibGUiXSwKICAgICAgICB0ZDogWyJ0YWJsZSJdLAogICAgICAgIHRoOiBbInRhYmxlIl0sCiAgICAgICAgdGhlYWQ6IFsidGFibGUiXSwKICAgICAgICB0Zm9vdDogWyJ0YWJsZSJdLAogICAgICAgIHRyOiBbInRhYmxlIl0KICAgICAgfSwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGE6IFsKICAgICAgICAgIC4uLmFyaWEsCiAgICAgICAgICAvLyBOb3RlOiB0aGVzZSAzIGFyZSB1c2VkIGJ5IEdGTSBmb290bm90ZXMsIHRoZXkgZG8gd29yayBvbiBhbGwgbGlua3MuCiAgICAgICAgICAiZGF0YUZvb3Rub3RlQmFja3JlZiIsCiAgICAgICAgICAiZGF0YUZvb3Rub3RlUmVmIiwKICAgICAgICAgIFsiY2xhc3NOYW1lIiwgImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdLAogICAgICAgICAgImhyZWYiCiAgICAgICAgXSwKICAgICAgICBibG9ja3F1b3RlOiBbImNpdGUiXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgY29kZWAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBjb2RlOiBbWyJjbGFzc05hbWUiLCAvXmxhbmd1YWdlLS4vXV0sCiAgICAgICAgZGVsOiBbImNpdGUiXSwKICAgICAgICBkaXY6IFsiaXRlbVNjb3BlIiwgIml0ZW1UeXBlIl0sCiAgICAgICAgZGw6IFsuLi5hcmlhXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHVzZWQgYnkgR0ZNIGZvb3Rub3Rlcy4KICAgICAgICBoMjogW1siY2xhc3NOYW1lIiwgInNyLW9ubHkiXV0sCiAgICAgICAgaW1nOiBbLi4uYXJpYSwgImxvbmdEZXNjIiwgInNyYyJdLAogICAgICAgIC8vIE5vdGU6IGBpbnB1dGAgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGl0IGluIG1hcmtkb3duLCB0aGV5IGFkZCBpdCBmcm9tIHRhc2tsaXN0cyBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgaW5wdXQ6IFsKICAgICAgICAgIFsiZGlzYWJsZWQiLCB0cnVlXSwKICAgICAgICAgIFsidHlwZSIsICJjaGVja2JveCJdCiAgICAgICAgXSwKICAgICAgICBpbnM6IFsiY2l0ZSJdLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBsaWAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBsaTogW1siY2xhc3NOYW1lIiwgInRhc2stbGlzdC1pdGVtIl1dLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBvbGAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBvbDogWy4uLmFyaWEsIFsiY2xhc3NOYW1lIiwgImNvbnRhaW5zLXRhc2stbGlzdCJdXSwKICAgICAgICBxOiBbImNpdGUiXSwKICAgICAgICBzZWN0aW9uOiBbImRhdGFGb290bm90ZXMiLCBbImNsYXNzTmFtZSIsICJmb290bm90ZXMiXV0sCiAgICAgICAgc291cmNlOiBbInNyY1NldCJdLAogICAgICAgIHN1bW1hcnk6IFsuLi5hcmlhXSwKICAgICAgICB0YWJsZTogWy4uLmFyaWFdLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBvbGAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICB1bDogWy4uLmFyaWEsIFsiY2xhc3NOYW1lIiwgImNvbnRhaW5zLXRhc2stbGlzdCJdXSwKICAgICAgICAiKiI6IFsKICAgICAgICAgICJhYmJyIiwKICAgICAgICAgICJhY2NlcHQiLAogICAgICAgICAgImFjY2VwdENoYXJzZXQiLAogICAgICAgICAgImFjY2Vzc0tleSIsCiAgICAgICAgICAiYWN0aW9uIiwKICAgICAgICAgICJhbGlnbiIsCiAgICAgICAgICAiYWx0IiwKICAgICAgICAgICJheGlzIiwKICAgICAgICAgICJib3JkZXIiLAogICAgICAgICAgImNlbGxQYWRkaW5nIiwKICAgICAgICAgICJjZWxsU3BhY2luZyIsCiAgICAgICAgICAiY2hhciIsCiAgICAgICAgICAiY2hhck9mZiIsCiAgICAgICAgICAiY2hhclNldCIsCiAgICAgICAgICAiY2hlY2tlZCIsCiAgICAgICAgICAiY2xlYXIiLAogICAgICAgICAgImNvbFNwYW4iLAogICAgICAgICAgImNvbG9yIiwKICAgICAgICAgICJjb2xzIiwKICAgICAgICAgICJjb21wYWN0IiwKICAgICAgICAgICJjb29yZHMiLAogICAgICAgICAgImRhdGVUaW1lIiwKICAgICAgICAgICJkaXIiLAogICAgICAgICAgLy8gTm90ZTogYGRpc2FibGVkYCBpcyB0ZWNobmljYWxseSBhbGxvd2VkIG9uIGFsbCBlbGVtZW50cyBieSBHSC4KICAgICAgICAgIC8vIEJ1dCBpdCBpcyB1c2VsZXNzIG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IGBpbnB1dGAuCiAgICAgICAgICAvLyBCZWNhdXNlIGBpbnB1dGBzIGFyZSBub3JtYWxseSBub3QgYWxsb3dlZCwgYnV0IHdlIGFsbG93IHRoZW0gZm9yCiAgICAgICAgICAvLyBjaGVja2JveGVzIGR1ZSB0byB0YXNrbGlzdHMsIHdlIGFsbG93IGBkaXNhYmxlZGAgb25seSB0aGVyZS4KICAgICAgICAgICJlbmNUeXBlIiwKICAgICAgICAgICJmcmFtZSIsCiAgICAgICAgICAiaFNwYWNlIiwKICAgICAgICAgICJoZWFkZXJzIiwKICAgICAgICAgICJoZWlnaHQiLAogICAgICAgICAgImhyZWZMYW5nIiwKICAgICAgICAgICJodG1sRm9yIiwKICAgICAgICAgICJpZCIsCiAgICAgICAgICAiaXNNYXAiLAogICAgICAgICAgIml0ZW1Qcm9wIiwKICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAibGFuZyIsCiAgICAgICAgICAibWF4TGVuZ3RoIiwKICAgICAgICAgICJtZWRpYSIsCiAgICAgICAgICAibWV0aG9kIiwKICAgICAgICAgICJtdWx0aXBsZSIsCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAibm9IcmVmIiwKICAgICAgICAgICJub1NoYWRlIiwKICAgICAgICAgICJub1dyYXAiLAogICAgICAgICAgIm9wZW4iLAogICAgICAgICAgInByb21wdCIsCiAgICAgICAgICAicmVhZE9ubHkiLAogICAgICAgICAgInJldiIsCiAgICAgICAgICAicm93U3BhbiIsCiAgICAgICAgICAicm93cyIsCiAgICAgICAgICAicnVsZXMiLAogICAgICAgICAgInNjb3BlIiwKICAgICAgICAgICJzZWxlY3RlZCIsCiAgICAgICAgICAic2hhcGUiLAogICAgICAgICAgInNpemUiLAogICAgICAgICAgInNwYW4iLAogICAgICAgICAgInN0YXJ0IiwKICAgICAgICAgICJzdW1tYXJ5IiwKICAgICAgICAgICJ0YWJJbmRleCIsCiAgICAgICAgICAidGl0bGUiLAogICAgICAgICAgInVzZU1hcCIsCiAgICAgICAgICAidkFsaWduIiwKICAgICAgICAgICJ2YWx1ZSIsCiAgICAgICAgICAid2lkdGgiCiAgICAgICAgXQogICAgICB9LAogICAgICBjbG9iYmVyOiBbImFyaWFEZXNjcmliZWRCeSIsICJhcmlhTGFiZWxsZWRCeSIsICJpZCIsICJuYW1lIl0sCiAgICAgIGNsb2JiZXJQcmVmaXg6ICJ1c2VyLWNvbnRlbnQtIiwKICAgICAgcHJvdG9jb2xzOiB7CiAgICAgICAgY2l0ZTogWyJodHRwIiwgImh0dHBzIl0sCiAgICAgICAgaHJlZjogWyJodHRwIiwgImh0dHBzIiwgImlyYyIsICJpcmNzIiwgIm1haWx0byIsICJ4bXBwIl0sCiAgICAgICAgbG9uZ0Rlc2M6IFsiaHR0cCIsICJodHRwcyJdLAogICAgICAgIHNyYzogWyJodHRwIiwgImh0dHBzIl0KICAgICAgfSwKICAgICAgcmVxdWlyZWQ6IHsKICAgICAgICBpbnB1dDogeyBkaXNhYmxlZDogdHJ1ZSwgdHlwZTogImNoZWNrYm94IiB9CiAgICAgIH0sCiAgICAgIHN0cmlwOiBbInNjcmlwdCJdLAogICAgICB0YWdOYW1lczogWwogICAgICAgICJhIiwKICAgICAgICAiYiIsCiAgICAgICAgImJsb2NrcXVvdGUiLAogICAgICAgICJiciIsCiAgICAgICAgImNvZGUiLAogICAgICAgICJkZCIsCiAgICAgICAgImRlbCIsCiAgICAgICAgImRldGFpbHMiLAogICAgICAgICJkaXYiLAogICAgICAgICJkbCIsCiAgICAgICAgImR0IiwKICAgICAgICAiZW0iLAogICAgICAgICJoMSIsCiAgICAgICAgImgyIiwKICAgICAgICAiaDMiLAogICAgICAgICJoNCIsCiAgICAgICAgImg1IiwKICAgICAgICAiaDYiLAogICAgICAgICJociIsCiAgICAgICAgImkiLAogICAgICAgICJpbWciLAogICAgICAgIC8vIE5vdGU6IGBpbnB1dGAgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGl0IGluIG1hcmtkb3duLCB0aGV5IGFkZCBpdCBmcm9tIHRhc2tsaXN0cyBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgImlucHV0IiwKICAgICAgICAiaW5zIiwKICAgICAgICAia2JkIiwKICAgICAgICAibGkiLAogICAgICAgICJvbCIsCiAgICAgICAgInAiLAogICAgICAgICJwaWN0dXJlIiwKICAgICAgICAicHJlIiwKICAgICAgICAicSIsCiAgICAgICAgInJwIiwKICAgICAgICAicnQiLAogICAgICAgICJydWJ5IiwKICAgICAgICAicyIsCiAgICAgICAgInNhbXAiLAogICAgICAgICJzZWN0aW9uIiwKICAgICAgICAic291cmNlIiwKICAgICAgICAic3BhbiIsCiAgICAgICAgInN0cmlrZSIsCiAgICAgICAgInN0cm9uZyIsCiAgICAgICAgInN1YiIsCiAgICAgICAgInN1bW1hcnkiLAogICAgICAgICJzdXAiLAogICAgICAgICJ0YWJsZSIsCiAgICAgICAgInRib2R5IiwKICAgICAgICAidGQiLAogICAgICAgICJ0Zm9vdCIsCiAgICAgICAgInRoIiwKICAgICAgICAidGhlYWQiLAogICAgICAgICJ0ciIsCiAgICAgICAgInR0IiwKICAgICAgICAidWwiLAogICAgICAgICJ2YXIiCiAgICAgIF0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMKZnVuY3Rpb24gc2FuaXRpemUobm9kZTIsIG9wdGlvbnMpIHsKICBsZXQgcmVzdWx0ID0geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBbXSB9OwogIGNvbnN0IHN0YXRlMTIgPSB7CiAgICBzY2hlbWE6IG9wdGlvbnMgPyB7IC4uLmRlZmF1bHRTY2hlbWEsIC4uLm9wdGlvbnMgfSA6IGRlZmF1bHRTY2hlbWEsCiAgICBzdGFjazogW10KICB9OwogIGNvbnN0IHJlcGxhY2U1ID0gdHJhbnNmb3JtKHN0YXRlMTIsIG5vZGUyKTsKICBpZiAocmVwbGFjZTUpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2U1KSkgewogICAgICBpZiAocmVwbGFjZTUubGVuZ3RoID09PSAxKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZTVbMF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gcmVwbGFjZTU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IHJlcGxhY2U1OwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybShzdGF0ZTEyLCBub2RlMikgewogIGlmIChub2RlMiAmJiB0eXBlb2Ygbm9kZTIgPT09ICJvYmplY3QiKSB7CiAgICBjb25zdCB1bnNhZmUyID0gKAogICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pn0gKi8KICAgICAgbm9kZTIKICAgICk7CiAgICBjb25zdCB0eXBlNSA9IHR5cGVvZiB1bnNhZmUyLnR5cGUgPT09ICJzdHJpbmciID8gdW5zYWZlMi50eXBlIDogIiI7CiAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgIGNhc2UgImNvbW1lbnQiOiB7CiAgICAgICAgcmV0dXJuIGNvbW1lbnQoc3RhdGUxMiwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAiZG9jdHlwZSI6IHsKICAgICAgICByZXR1cm4gZG9jdHlwZShzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJlbGVtZW50IjogewogICAgICAgIHJldHVybiBlbGVtZW50MihzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJyb290IjogewogICAgICAgIHJldHVybiByb290MihzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJ0ZXh0IjogewogICAgICAgIHJldHVybiB0ZXh0NShzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBkZWZhdWx0OgogICAgfQogIH0KfQpmdW5jdGlvbiBjb21tZW50KHN0YXRlMTIsIHVuc2FmZTIpIHsKICBpZiAoc3RhdGUxMi5zY2hlbWEuYWxsb3dDb21tZW50cykgewogICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIHVuc2FmZTIudmFsdWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi52YWx1ZSA6ICIiOwogICAgY29uc3QgaW5kZXgyID0gcmVzdWx0LmluZGV4T2YoIi0tPiIpOwogICAgY29uc3QgdmFsdWUyID0gaW5kZXgyIDwgMCA/IHJlc3VsdCA6IHJlc3VsdC5zbGljZSgwLCBpbmRleDIpOwogICAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJjb21tZW50IiwgdmFsdWU6IHZhbHVlMiB9OwogICAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogICAgcmV0dXJuIG5vZGUyOwogIH0KfQpmdW5jdGlvbiBkb2N0eXBlKHN0YXRlMTIsIHVuc2FmZTIpIHsKICBpZiAoc3RhdGUxMi5zY2hlbWEuYWxsb3dEb2N0eXBlcykgewogICAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJkb2N0eXBlIiB9OwogICAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogICAgcmV0dXJuIG5vZGUyOwogIH0KfQpmdW5jdGlvbiBlbGVtZW50MihzdGF0ZTEyLCB1bnNhZmUyKSB7CiAgY29uc3QgbmFtZSA9IHR5cGVvZiB1bnNhZmUyLnRhZ05hbWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi50YWdOYW1lIDogIiI7CiAgc3RhdGUxMi5zdGFjay5wdXNoKG5hbWUpOwogIGNvbnN0IGNvbnRlbnQzID0gKAogICAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Q29udGVudD59ICovCiAgICBjaGlsZHJlbihzdGF0ZTEyLCB1bnNhZmUyLmNoaWxkcmVuKQogICk7CiAgY29uc3QgcHJvcGVydGllc18gPSBwcm9wZXJ0aWVzKHN0YXRlMTIsIHVuc2FmZTIucHJvcGVydGllcyk7CiAgc3RhdGUxMi5zdGFjay5wb3AoKTsKICBsZXQgc2FmZUVsZW1lbnQgPSBmYWxzZTsKICBpZiAobmFtZSAmJiBuYW1lICE9PSAiKiIgJiYgKCFzdGF0ZTEyLnNjaGVtYS50YWdOYW1lcyB8fCBzdGF0ZTEyLnNjaGVtYS50YWdOYW1lcy5pbmNsdWRlcyhuYW1lKSkpIHsKICAgIHNhZmVFbGVtZW50ID0gdHJ1ZTsKICAgIGlmIChzdGF0ZTEyLnNjaGVtYS5hbmNlc3RvcnMgJiYgb3duNy5jYWxsKHN0YXRlMTIuc2NoZW1hLmFuY2VzdG9ycywgbmFtZSkpIHsKICAgICAgY29uc3QgYW5jZXN0b3JzID0gc3RhdGUxMi5zY2hlbWEuYW5jZXN0b3JzW25hbWVdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIHNhZmVFbGVtZW50ID0gZmFsc2U7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGFuY2VzdG9ycy5sZW5ndGgpIHsKICAgICAgICBpZiAoc3RhdGUxMi5zdGFjay5pbmNsdWRlcyhhbmNlc3RvcnNbaW5kZXgyXSkpIHsKICAgICAgICAgIHNhZmVFbGVtZW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKCFzYWZlRWxlbWVudCkgewogICAgcmV0dXJuIHN0YXRlMTIuc2NoZW1hLnN0cmlwICYmICFzdGF0ZTEyLnNjaGVtYS5zdHJpcC5pbmNsdWRlcyhuYW1lKSA/IGNvbnRlbnQzIDogdm9pZCAwOwogIH0KICBjb25zdCBub2RlMiA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6IG5hbWUsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXywKICAgIGNoaWxkcmVuOiBjb250ZW50MwogIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiByb290MihzdGF0ZTEyLCB1bnNhZmUyKSB7CiAgY29uc3QgY29udGVudDMgPSAoCiAgICAvKiogQHR5cGUge0FycmF5PFJvb3RDb250ZW50Pn0gKi8KICAgIGNoaWxkcmVuKHN0YXRlMTIsIHVuc2FmZTIuY2hpbGRyZW4pCiAgKTsKICBjb25zdCBub2RlMiA9IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogY29udGVudDMgfTsKICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIHRleHQ1KF80LCB1bnNhZmUyKSB7CiAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHVuc2FmZTIudmFsdWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi52YWx1ZSA6ICIiOwogIGNvbnN0IG5vZGUyID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfTsKICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIGNoaWxkcmVuKHN0YXRlMTIsIGNoaWxkcmVuMikgewogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbjIpKSB7CiAgICBjb25zdCBjaGlsZHJlblVua25vd24gPSAoCiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVhZG9ubHk8dW5rbm93bj4+fSAqLwogICAgICBjaGlsZHJlbjIKICAgICk7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlblVua25vd24ubGVuZ3RoKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHRyYW5zZm9ybShzdGF0ZTEyLCBjaGlsZHJlblVua25vd25baW5kZXgyXSk7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2goLi4udmFsdWUyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHRzOwp9CmZ1bmN0aW9uIHByb3BlcnRpZXMoc3RhdGUxMiwgcHJvcGVydGllczIpIHsKICBjb25zdCB0YWdOYW1lID0gc3RhdGUxMi5zdGFja1tzdGF0ZTEyLnN0YWNrLmxlbmd0aCAtIDFdOwogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzdGF0ZTEyLnNjaGVtYS5hdHRyaWJ1dGVzOwogIGNvbnN0IHJlcXVpcmVkID0gc3RhdGUxMi5zY2hlbWEucmVxdWlyZWQ7CiAgY29uc3Qgc3BlY2lmaWMgPSBhdHRyaWJ1dGVzICYmIG93bjcuY2FsbChhdHRyaWJ1dGVzLCB0YWdOYW1lKSA/IGF0dHJpYnV0ZXNbdGFnTmFtZV0gOiB2b2lkIDA7CiAgY29uc3QgZGVmYXVsdHMgPSBhdHRyaWJ1dGVzICYmIG93bjcuY2FsbChhdHRyaWJ1dGVzLCAiKiIpID8gYXR0cmlidXRlc1siKiJdIDogdm9pZCAwOwogIGNvbnN0IHByb3BlcnRpZXNfID0gKAogICAgLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj4+fSAqLwogICAgcHJvcGVydGllczIgJiYgdHlwZW9mIHByb3BlcnRpZXMyID09PSAib2JqZWN0IiA/IHByb3BlcnRpZXMyIDoge30KICApOwogIGNvbnN0IHJlc3VsdCA9IHt9OwogIGxldCBrZXkyOwogIGZvciAoa2V5MiBpbiBwcm9wZXJ0aWVzXykgewogICAgaWYgKG93bjcuY2FsbChwcm9wZXJ0aWVzXywga2V5MikpIHsKICAgICAgY29uc3QgdW5zYWZlMiA9IHByb3BlcnRpZXNfW2tleTJdOwogICAgICBsZXQgc2FmZTIgPSBwcm9wZXJ0eVZhbHVlKAogICAgICAgIHN0YXRlMTIsCiAgICAgICAgZmluZERlZmluaXRpb24oc3BlY2lmaWMsIGtleTIpLAogICAgICAgIGtleTIsCiAgICAgICAgdW5zYWZlMgogICAgICApOwogICAgICBpZiAoc2FmZTIgPT09IG51bGwgfHwgc2FmZTIgPT09IHZvaWQgMCkgewogICAgICAgIHNhZmUyID0gcHJvcGVydHlWYWx1ZShzdGF0ZTEyLCBmaW5kRGVmaW5pdGlvbihkZWZhdWx0cywga2V5MiksIGtleTIsIHVuc2FmZTIpOwogICAgICB9CiAgICAgIGlmIChzYWZlMiAhPT0gbnVsbCAmJiBzYWZlMiAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmVzdWx0W2tleTJdID0gc2FmZTI7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKHJlcXVpcmVkICYmIG93bjcuY2FsbChyZXF1aXJlZCwgdGFnTmFtZSkpIHsKICAgIGNvbnN0IHByb3BlcnRpZXMzID0gcmVxdWlyZWRbdGFnTmFtZV07CiAgICBmb3IgKGtleTIgaW4gcHJvcGVydGllczMpIHsKICAgICAgaWYgKG93bjcuY2FsbChwcm9wZXJ0aWVzMywga2V5MikgJiYgIW93bjcuY2FsbChyZXN1bHQsIGtleTIpKSB7CiAgICAgICAgcmVzdWx0W2tleTJdID0gcHJvcGVydGllczNba2V5Ml07CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBwcm9wZXJ0eVZhbHVlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIHsKICByZXR1cm4gZGVmaW5pdGlvbjMgPyBBcnJheS5pc0FycmF5KHZhbHVlMikgPyBwcm9wZXJ0eVZhbHVlTWFueShzdGF0ZTEyLCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSA6IHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUxMiwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlMikgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZU1hbnkoc3RhdGUxMiwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlcykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCByZXN1bHQgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZXMubGVuZ3RoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZXNbaW5kZXgyXSk7CiAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgcmVzdWx0LnB1c2godmFsdWUyKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJudW1iZXIiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm47CiAgfQogIGlmICghc2FmZVByb3RvY29sKHN0YXRlMTIsIGtleTIsIHZhbHVlMikpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKHR5cGVvZiBkZWZpbml0aW9uMyA9PT0gIm9iamVjdCIgJiYgZGVmaW5pdGlvbjMubGVuZ3RoID4gMSkgewogICAgbGV0IG9rMyA9IGZhbHNlOwogICAgbGV0IGluZGV4MiA9IDA7CiAgICB3aGlsZSAoKytpbmRleDIgPCBkZWZpbml0aW9uMy5sZW5ndGgpIHsKICAgICAgY29uc3QgYWxsb3dlZCA9IGRlZmluaXRpb24zW2luZGV4Ml07CiAgICAgIGlmIChhbGxvd2VkICYmIHR5cGVvZiBhbGxvd2VkID09PSAib2JqZWN0IiAmJiAiZmxhZ3MiIGluIGFsbG93ZWQpIHsKICAgICAgICBpZiAoYWxsb3dlZC50ZXN0KFN0cmluZyh2YWx1ZTIpKSkgewogICAgICAgICAgb2szID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhbGxvd2VkID09PSB2YWx1ZTIpIHsKICAgICAgICBvazMgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoIW9rMykgcmV0dXJuOwogIH0KICByZXR1cm4gc3RhdGUxMi5zY2hlbWEuY2xvYmJlciAmJiBzdGF0ZTEyLnNjaGVtYS5jbG9iYmVyUHJlZml4ICYmIHN0YXRlMTIuc2NoZW1hLmNsb2JiZXIuaW5jbHVkZXMoa2V5MikgPyBzdGF0ZTEyLnNjaGVtYS5jbG9iYmVyUHJlZml4ICsgdmFsdWUyIDogdmFsdWUyOwp9CmZ1bmN0aW9uIHNhZmVQcm90b2NvbChzdGF0ZTEyLCBrZXkyLCB2YWx1ZTIpIHsKICBjb25zdCBwcm90b2NvbHMgPSBzdGF0ZTEyLnNjaGVtYS5wcm90b2NvbHMgJiYgb3duNy5jYWxsKHN0YXRlMTIuc2NoZW1hLnByb3RvY29scywga2V5MikgPyBzdGF0ZTEyLnNjaGVtYS5wcm90b2NvbHNba2V5Ml0gOiB2b2lkIDA7CiAgaWYgKCFwcm90b2NvbHMgfHwgcHJvdG9jb2xzLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGNvbnN0IHVybCA9IFN0cmluZyh2YWx1ZTIpOwogIGNvbnN0IGNvbG9uID0gdXJsLmluZGV4T2YoIjoiKTsKICBjb25zdCBxdWVzdGlvbk1hcmsgPSB1cmwuaW5kZXhPZigiPyIpOwogIGNvbnN0IG51bWJlclNpZ24gPSB1cmwuaW5kZXhPZigiIyIpOwogIGNvbnN0IHNsYXNoID0gdXJsLmluZGV4T2YoIi8iKTsKICBpZiAoY29sb24gPCAwIHx8IC8vIElmIHRoZSBmaXJzdCBjb2xvbiBpcyBhZnRlciBhIGA/YCwgYCNgLCBvciBgL2AsIGl04oCZcyBub3QgYSBwcm90b2NvbC4KICBzbGFzaCA+IC0xICYmIGNvbG9uID4gc2xhc2ggfHwgcXVlc3Rpb25NYXJrID4gLTEgJiYgY29sb24gPiBxdWVzdGlvbk1hcmsgfHwgbnVtYmVyU2lnbiA+IC0xICYmIGNvbG9uID4gbnVtYmVyU2lnbikgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwcm90b2NvbHMubGVuZ3RoKSB7CiAgICBjb25zdCBwcm90b2NvbCA9IHByb3RvY29sc1tpbmRleDJdOwogICAgaWYgKGNvbG9uID09PSBwcm90b2NvbC5sZW5ndGggJiYgdXJsLnNsaWNlKDAsIHByb3RvY29sLmxlbmd0aCkgPT09IHByb3RvY29sKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcGF0Y2gobm9kZTIsIHVuc2FmZTIpIHsKICBjb25zdCBjbGVhblBvc2l0aW9uID0gcG9zaXRpb24yKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbG9va3MgbGlrZSBhIG5vZGUuCiAgICB1bnNhZmUyCiAgKTsKICBpZiAodW5zYWZlMi5kYXRhKSB7CiAgICBub2RlMi5kYXRhID0gZXNtX2RlZmF1bHQodW5zYWZlMi5kYXRhKTsKICB9CiAgaWYgKGNsZWFuUG9zaXRpb24pIG5vZGUyLnBvc2l0aW9uID0gY2xlYW5Qb3NpdGlvbjsKfQpmdW5jdGlvbiBmaW5kRGVmaW5pdGlvbihkZWZpbml0aW9ucywga2V5MikgewogIGxldCBkYXRhRGVmYXVsdDsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKGRlZmluaXRpb25zKSB7CiAgICB3aGlsZSAoKytpbmRleDIgPCBkZWZpbml0aW9ucy5sZW5ndGgpIHsKICAgICAgY29uc3QgZW50cnkgPSBkZWZpbml0aW9uc1tpbmRleDJdOwogICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGVudHJ5ID09PSAic3RyaW5nIiA/IGVudHJ5IDogZW50cnlbMF07CiAgICAgIGlmIChuYW1lID09PSBrZXkyKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICB9CiAgICAgIGlmIChuYW1lID09PSAiZGF0YSoiKSBkYXRhRGVmYXVsdCA9IGVudHJ5OwogICAgfQogIH0KICBpZiAoa2V5Mi5sZW5ndGggPiA0ICYmIGtleTIuc2xpY2UoMCwgNCkudG9Mb3dlckNhc2UoKSA9PT0gImRhdGEiKSB7CiAgICByZXR1cm4gZGF0YURlZmF1bHQ7CiAgfQp9CnZhciBvd243Owp2YXIgaW5pdF9saWIyNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgICBpbml0X3NjaGVtYSgpOwogICAgb3duNyA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3Nhbml0aXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyNigpOwogICAgaW5pdF9zY2hlbWEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcwpmdW5jdGlvbiBibG9ja3F1b3RlMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJibG9ja3F1b3RlIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTIud3JhcChzdGF0ZTEyLmFsbChub2RlMiksIHRydWUpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhazIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImJyIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIFtzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KSwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH1dOwp9CnZhciBpbml0X2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzCmZ1bmN0aW9uIGNvZGUzKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgdmFsdWUyID0gbm9kZTIudmFsdWUgPyBub2RlMi52YWx1ZSArICJcbiIgOiAiIjsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IGxhbmd1YWdlID0gbm9kZTIubGFuZyA/IG5vZGUyLmxhbmcuc3BsaXQoL1xzKy8pIDogW107CiAgaWYgKGxhbmd1YWdlLmxlbmd0aCA+IDApIHsKICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsibGFuZ3VhZ2UtIiArIGxhbmd1YWdlWzBdXTsKICB9CiAgbGV0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJjb2RlIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHZhbHVlMiB9XQogIH07CiAgaWYgKG5vZGUyLm1ldGEpIHsKICAgIHJlc3VsdC5kYXRhID0geyBtZXRhOiBub2RlMi5tZXRhIH07CiAgfQogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmVzdWx0ID0gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7CiAgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwcmUiLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW46IFtyZXN1bHRdIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CnZhciBpbml0X2NvZGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzCmZ1bmN0aW9uIHN0cmlrZXRocm91Z2goc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZGVsIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTIuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfZGVsZXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9kZWxldGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9lbXBoYXNpcy5qcwpmdW5jdGlvbiBlbXBoYXNpczIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZW0iLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9lbXBoYXNpczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2VtcGhhc2lzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGZvb3Rub3RlUmVmZXJlbmNlMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSB0eXBlb2Ygc3RhdGUxMi5vcHRpb25zLmNsb2JiZXJQcmVmaXggPT09ICJzdHJpbmciID8gc3RhdGUxMi5vcHRpb25zLmNsb2JiZXJQcmVmaXggOiAidXNlci1jb250ZW50LSI7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBzYWZlSWQgPSBub3JtYWxpemVVcmkoaWQudG9Mb3dlckNhc2UoKSk7CiAgY29uc3QgaW5kZXgyID0gc3RhdGUxMi5mb290bm90ZU9yZGVyLmluZGV4T2YoaWQpOwogIGxldCBjb3VudGVyMjsKICBsZXQgcmV1c2VDb3VudGVyID0gc3RhdGUxMi5mb290bm90ZUNvdW50cy5nZXQoaWQpOwogIGlmIChyZXVzZUNvdW50ZXIgPT09IHZvaWQgMCkgewogICAgcmV1c2VDb3VudGVyID0gMDsKICAgIHN0YXRlMTIuZm9vdG5vdGVPcmRlci5wdXNoKGlkKTsKICAgIGNvdW50ZXIyID0gc3RhdGUxMi5mb290bm90ZU9yZGVyLmxlbmd0aDsKICB9IGVsc2UgewogICAgY291bnRlcjIgPSBpbmRleDIgKyAxOwogIH0KICByZXVzZUNvdW50ZXIgKz0gMTsKICBzdGF0ZTEyLmZvb3Rub3RlQ291bnRzLnNldChpZCwgcmV1c2VDb3VudGVyKTsKICBjb25zdCBsaW5rMyA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHsKICAgICAgaHJlZjogIiMiICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkLAogICAgICBpZDogY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJldXNlQ291bnRlciA+IDEgPyAiLSIgKyByZXVzZUNvdW50ZXIgOiAiIiksCiAgICAgIGRhdGFGb290bm90ZVJlZjogdHJ1ZSwKICAgICAgYXJpYURlc2NyaWJlZEJ5OiBbImZvb3Rub3RlLWxhYmVsIl0KICAgIH0sCiAgICBjaGlsZHJlbjogW3sgdHlwZTogInRleHQiLCB2YWx1ZTogU3RyaW5nKGNvdW50ZXIyKSB9XQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgbGluazMpOwogIGNvbnN0IHN1cCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJzdXAiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW2xpbmszXQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgc3VwKTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHN1cCk7Cn0KdmFyIGluaXRfZm9vdG5vdGVfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9mb290bm90ZS1yZWZlcmVuY2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcwpmdW5jdGlvbiBoZWFkaW5nMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJoIiArIG5vZGUyLmRlcHRoLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9oZWFkaW5nMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2h0bWwuanMKZnVuY3Rpb24gaHRtbDIoc3RhdGUxMiwgbm9kZTIpIHsKICBpZiAoc3RhdGUxMi5vcHRpb25zLmFsbG93RGFuZ2Vyb3VzSHRtbCkgewogICAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAicmF3IiwgdmFsdWU6IG5vZGUyLnZhbHVlIH07CiAgICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogICAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2h0bWw4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvcmV2ZXJ0LmpzCmZ1bmN0aW9uIHJldmVydChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHN1YnR5cGUgPSBub2RlMi5yZWZlcmVuY2VUeXBlOwogIGxldCBzdWZmaXggPSAiXSI7CiAgaWYgKHN1YnR5cGUgPT09ICJjb2xsYXBzZWQiKSB7CiAgICBzdWZmaXggKz0gIltdIjsKICB9IGVsc2UgaWYgKHN1YnR5cGUgPT09ICJmdWxsIikgewogICAgc3VmZml4ICs9ICJbIiArIChub2RlMi5sYWJlbCB8fCBub2RlMi5pZGVudGlmaWVyKSArICJdIjsKICB9CiAgaWYgKG5vZGUyLnR5cGUgPT09ICJpbWFnZVJlZmVyZW5jZSIpIHsKICAgIHJldHVybiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiIVsiICsgbm9kZTIuYWx0ICsgc3VmZml4IH1dOwogIH0KICBjb25zdCBjb250ZW50cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBjb25zdCBoZWFkMiA9IGNvbnRlbnRzWzBdOwogIGlmIChoZWFkMiAmJiBoZWFkMi50eXBlID09PSAidGV4dCIpIHsKICAgIGhlYWQyLnZhbHVlID0gIlsiICsgaGVhZDIudmFsdWU7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnVuc2hpZnQoeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiWyIgfSk7CiAgfQogIGNvbnN0IHRhaWwgPSBjb250ZW50c1tjb250ZW50cy5sZW5ndGggLSAxXTsKICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgdGFpbC52YWx1ZSArPSBzdWZmaXg7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBzdWZmaXggfSk7CiAgfQogIHJldHVybiBjb250ZW50czsKfQp2YXIgaW5pdF9yZXZlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxMi5kZWZpbml0aW9uQnlJZC5nZXQoaWQpOwogIGlmICghZGVmaW5pdGlvbjMpIHsKICAgIHJldHVybiByZXZlcnQoc3RhdGUxMiwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkoZGVmaW5pdGlvbjMudXJsIHx8ICIiKSwgYWx0OiBub2RlMi5hbHQgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJpbWciLCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwgY2hpbGRyZW46IFtdIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaW1hZ2VfcmVmZXJlbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UtcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBpbml0X3JldmVydCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS5qcwpmdW5jdGlvbiBpbWFnZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi5hbHQgIT09IG51bGwgJiYgbm9kZTIuYWx0ICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLmFsdCA9IG5vZGUyLmFsdDsKICB9CiAgaWYgKG5vZGUyLnRpdGxlICE9PSBudWxsICYmIG5vZGUyLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gbm9kZTIudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAiaW1nIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2ltYWdlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5saW5lLWNvZGUuanMKZnVuY3Rpb24gaW5saW5lQ29kZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCB0ZXh0OSA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHRleHQ5KTsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiY29kZSIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBbdGV4dDldCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2lubGluZS1jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay1yZWZlcmVuY2UuanMKZnVuY3Rpb24gbGlua1JlZmVyZW5jZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxMi5kZWZpbml0aW9uQnlJZC5nZXQoaWQpOwogIGlmICghZGVmaW5pdGlvbjMpIHsKICAgIHJldHVybiByZXZlcnQoc3RhdGUxMiwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgaHJlZjogbm9ybWFsaXplVXJpKGRlZmluaXRpb24zLnVybCB8fCAiIikgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImEiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmstcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBpbml0X3JldmVydCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzCmZ1bmN0aW9uIGxpbmsyKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgcHJvcGVydGllczIgPSB7IGhyZWY6IG5vcm1hbGl6ZVVyaShub2RlMi51cmwpIH07CiAgaWYgKG5vZGUyLnRpdGxlICE9PSBudWxsICYmIG5vZGUyLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gbm9kZTIudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IHN0YXRlMTIuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfbGluazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC1pdGVtLmpzCmZ1bmN0aW9uIGxpc3RJdGVtMihzdGF0ZTEyLCBub2RlMiwgcGFyZW50KSB7CiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBjb25zdCBsb29zZSA9IHBhcmVudCA/IGxpc3RMb29zZShwYXJlbnQpIDogbGlzdEl0ZW1Mb29zZShub2RlMik7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBjaGlsZHJlbjIgPSBbXTsKICBpZiAodHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIikgewogICAgY29uc3QgaGVhZDIgPSByZXN1bHRzWzBdOwogICAgbGV0IHBhcmFncmFwaDM7CiAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIGhlYWQyLnRhZ05hbWUgPT09ICJwIikgewogICAgICBwYXJhZ3JhcGgzID0gaGVhZDI7CiAgICB9IGVsc2UgewogICAgICBwYXJhZ3JhcGgzID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXSB9OwogICAgICByZXN1bHRzLnVuc2hpZnQocGFyYWdyYXBoMyk7CiAgICB9CiAgICBpZiAocGFyYWdyYXBoMy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgIH0KICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogImlucHV0IiwKICAgICAgcHJvcGVydGllczogeyB0eXBlOiAiY2hlY2tib3giLCBjaGVja2VkOiBub2RlMi5jaGVja2VkLCBkaXNhYmxlZDogdHJ1ZSB9LAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogICAgcHJvcGVydGllczIuY2xhc3NOYW1lID0gWyJ0YXNrLWxpc3QtaXRlbSJdOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcmVzdWx0cy5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gcmVzdWx0c1tpbmRleDJdOwogICAgaWYgKGxvb3NlIHx8IGluZGV4MiAhPT0gMCB8fCBjaGlsZC50eXBlICE9PSAiZWxlbWVudCIgfHwgY2hpbGQudGFnTmFtZSAhPT0gInAiKSB7CiAgICAgIGNoaWxkcmVuMi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICAgIH0KICAgIGlmIChjaGlsZC50eXBlID09PSAiZWxlbWVudCIgJiYgY2hpbGQudGFnTmFtZSA9PT0gInAiICYmICFsb29zZSkgewogICAgICBjaGlsZHJlbjIucHVzaCguLi5jaGlsZC5jaGlsZHJlbik7CiAgICB9IGVsc2UgewogICAgICBjaGlsZHJlbjIucHVzaChjaGlsZCk7CiAgICB9CiAgfQogIGNvbnN0IHRhaWwgPSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV07CiAgaWYgKHRhaWwgJiYgKGxvb3NlIHx8IHRhaWwudHlwZSAhPT0gImVsZW1lbnQiIHx8IHRhaWwudGFnTmFtZSAhPT0gInAiKSkgewogICAgY2hpbGRyZW4yLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImxpIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBjaGlsZHJlbjIgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQpmdW5jdGlvbiBsaXN0TG9vc2Uobm9kZTIpIHsKICBsZXQgbG9vc2UgPSBmYWxzZTsKICBpZiAobm9kZTIudHlwZSA9PT0gImxpc3QiKSB7CiAgICBsb29zZSA9IG5vZGUyLnNwcmVhZCB8fCBmYWxzZTsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCFsb29zZSAmJiArK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgbG9vc2UgPSBsaXN0SXRlbUxvb3NlKGNoaWxkcmVuMltpbmRleDJdKTsKICAgIH0KICB9CiAgcmV0dXJuIGxvb3NlOwp9CmZ1bmN0aW9uIGxpc3RJdGVtTG9vc2Uobm9kZTIpIHsKICBjb25zdCBzcHJlYWQgPSBub2RlMi5zcHJlYWQ7CiAgcmV0dXJuIHNwcmVhZCA9PT0gbnVsbCB8fCBzcHJlYWQgPT09IHZvaWQgMCA/IG5vZGUyLmNoaWxkcmVuLmxlbmd0aCA+IDEgOiBzcHJlYWQ7Cn0KdmFyIGluaXRfbGlzdF9pdGVtMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC1pdGVtLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcwpmdW5jdGlvbiBsaXN0NChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKHR5cGVvZiBub2RlMi5zdGFydCA9PT0gIm51bWJlciIgJiYgbm9kZTIuc3RhcnQgIT09IDEpIHsKICAgIHByb3BlcnRpZXMyLnN0YXJ0ID0gbm9kZTIuc3RhcnQ7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IHJlc3VsdHMubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IHJlc3VsdHNbaW5kZXgyXTsKICAgIGlmIChjaGlsZC50eXBlID09PSAiZWxlbWVudCIgJiYgY2hpbGQudGFnTmFtZSA9PT0gImxpIiAmJiBjaGlsZC5wcm9wZXJ0aWVzICYmIEFycmF5LmlzQXJyYXkoY2hpbGQucHJvcGVydGllcy5jbGFzc05hbWUpICYmIGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lLmluY2x1ZGVzKCJ0YXNrLWxpc3QtaXRlbSIpKSB7CiAgICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsiY29udGFpbnMtdGFzay1saXN0Il07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiBub2RlMi5vcmRlcmVkID8gIm9sIiA6ICJ1bCIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAocmVzdWx0cywgdHJ1ZSkKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2xpc3QzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcGFyYWdyYXBoLmpzCmZ1bmN0aW9uIHBhcmFncmFwaDIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAicCIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLmFsbChub2RlMikKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3BhcmFncmFwaDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3Jvb3QuanMKZnVuY3Rpb24gcm9vdDMoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IHN0YXRlMTIud3JhcChzdGF0ZTEyLmFsbChub2RlMikpIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfcm9vdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3Jvb3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9zdHJvbmcuanMKZnVuY3Rpb24gc3Ryb25nMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJzdHJvbmciLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9zdHJvbmcyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9zdHJvbmcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS5qcwpmdW5jdGlvbiB0YWJsZShzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJvd3MgPSBzdGF0ZTEyLmFsbChub2RlMik7CiAgY29uc3QgZmlyc3RSb3cgPSByb3dzLnNoaWZ0KCk7CiAgY29uc3QgdGFibGVDb250ZW50ID0gW107CiAgaWYgKGZpcnN0Um93KSB7CiAgICBjb25zdCBoZWFkMiA9IHsKICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICB0YWdOYW1lOiAidGhlYWQiLAogICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgY2hpbGRyZW46IHN0YXRlMTIud3JhcChbZmlyc3RSb3ddLCB0cnVlKQogICAgfTsKICAgIHN0YXRlMTIucGF0Y2gobm9kZTIuY2hpbGRyZW5bMF0sIGhlYWQyKTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGhlYWQyKTsKICB9CiAgaWYgKHJvd3MubGVuZ3RoID4gMCkgewogICAgY29uc3QgYm9keTMgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRib2R5IiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAocm93cywgdHJ1ZSkKICAgIH07CiAgICBjb25zdCBzdGFydCA9IHBvaW50U3RhcnQobm9kZTIuY2hpbGRyZW5bMV0pOwogICAgY29uc3QgZW5kMyA9IHBvaW50RW5kKG5vZGUyLmNoaWxkcmVuW25vZGUyLmNoaWxkcmVuLmxlbmd0aCAtIDFdKTsKICAgIGlmIChzdGFydCAmJiBlbmQzKSBib2R5My5wb3NpdGlvbiA9IHsgc3RhcnQsIGVuZDogZW5kMyB9OwogICAgdGFibGVDb250ZW50LnB1c2goYm9keTMpOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidGFibGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi53cmFwKHRhYmxlQ29udGVudCwgdHJ1ZSkKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtcm93LmpzCmZ1bmN0aW9uIHRhYmxlUm93KHN0YXRlMTIsIG5vZGUyLCBwYXJlbnQpIHsKICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4gOiB2b2lkIDA7CiAgY29uc3Qgcm93SW5kZXggPSBzaWJsaW5nczIgPyBzaWJsaW5nczIuaW5kZXhPZihub2RlMikgOiAxOwogIGNvbnN0IHRhZ05hbWUgPSByb3dJbmRleCA9PT0gMCA/ICJ0aCIgOiAidGQiOwogIGNvbnN0IGFsaWduID0gcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAidGFibGUiID8gcGFyZW50LmFsaWduIDogdm9pZCAwOwogIGNvbnN0IGxlbmd0aCA9IGFsaWduID8gYWxpZ24ubGVuZ3RoIDogbm9kZTIuY2hpbGRyZW4ubGVuZ3RoOwogIGxldCBjZWxsSW5kZXggPSAtMTsKICBjb25zdCBjZWxsczIgPSBbXTsKICB3aGlsZSAoKytjZWxsSW5kZXggPCBsZW5ndGgpIHsKICAgIGNvbnN0IGNlbGwyID0gbm9kZTIuY2hpbGRyZW5bY2VsbEluZGV4XTsKICAgIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgICBjb25zdCBhbGlnblZhbHVlID0gYWxpZ24gPyBhbGlnbltjZWxsSW5kZXhdIDogdm9pZCAwOwogICAgaWYgKGFsaWduVmFsdWUpIHsKICAgICAgcHJvcGVydGllczIuYWxpZ24gPSBhbGlnblZhbHVlOwogICAgfQogICAgbGV0IHJlc3VsdDIgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZSwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogICAgaWYgKGNlbGwyKSB7CiAgICAgIHJlc3VsdDIuY2hpbGRyZW4gPSBzdGF0ZTEyLmFsbChjZWxsMik7CiAgICAgIHN0YXRlMTIucGF0Y2goY2VsbDIsIHJlc3VsdDIpOwogICAgICByZXN1bHQyID0gc3RhdGUxMi5hcHBseURhdGEoY2VsbDIsIHJlc3VsdDIpOwogICAgfQogICAgY2VsbHMyLnB1c2gocmVzdWx0Mik7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJ0ciIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAoY2VsbHMyLCB0cnVlKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGFibGVfcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1yb3cuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1jZWxsLmpzCmZ1bmN0aW9uIHRhYmxlQ2VsbChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJ0ZCIsCiAgICAvLyBBc3N1bWUgYm9keSBjZWxsLgogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZV9jZWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1jZWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RyaW0tbGluZXNAMy4wLjEvbm9kZV9tb2R1bGVzL3RyaW0tbGluZXMvaW5kZXguanMKZnVuY3Rpb24gdHJpbUxpbmVzKHZhbHVlMikgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGNvbnN0IHNlYXJjaDIgPSAvXHI/XG58XHIvZzsKICBsZXQgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgbGV0IGxhc3QzID0gMDsKICBjb25zdCBsaW5lcyA9IFtdOwogIHdoaWxlIChtYXRjaDIpIHsKICAgIGxpbmVzLnB1c2goCiAgICAgIHRyaW1MaW5lKHNvdXJjZS5zbGljZShsYXN0MywgbWF0Y2gyLmluZGV4KSwgbGFzdDMgPiAwLCB0cnVlKSwKICAgICAgbWF0Y2gyWzBdCiAgICApOwogICAgbGFzdDMgPSBtYXRjaDIuaW5kZXggKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgfQogIGxpbmVzLnB1c2godHJpbUxpbmUoc291cmNlLnNsaWNlKGxhc3QzKSwgbGFzdDMgPiAwLCBmYWxzZSkpOwogIHJldHVybiBsaW5lcy5qb2luKCIiKTsKfQpmdW5jdGlvbiB0cmltTGluZSh2YWx1ZTIsIHN0YXJ0LCBlbmQzKSB7CiAgbGV0IHN0YXJ0SW5kZXggPSAwOwogIGxldCBlbmRJbmRleCA9IHZhbHVlMi5sZW5ndGg7CiAgaWYgKHN0YXJ0KSB7CiAgICBsZXQgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoc3RhcnRJbmRleCk7CiAgICB3aGlsZSAoY29kZTQgPT09IHRhYiB8fCBjb2RlNCA9PT0gc3BhY2UpIHsKICAgICAgc3RhcnRJbmRleCsrOwogICAgICBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChzdGFydEluZGV4KTsKICAgIH0KICB9CiAgaWYgKGVuZDMpIHsKICAgIGxldCBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpOwogICAgd2hpbGUgKGNvZGU0ID09PSB0YWIgfHwgY29kZTQgPT09IHNwYWNlKSB7CiAgICAgIGVuZEluZGV4LS07CiAgICAgIGNvZGU0ID0gdmFsdWUyLmNvZGVQb2ludEF0KGVuZEluZGV4IC0gMSk7CiAgICB9CiAgfQogIHJldHVybiBlbmRJbmRleCA+IHN0YXJ0SW5kZXggPyB2YWx1ZTIuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogIiI7Cn0KdmFyIHRhYiwgc3BhY2U7CnZhciBpbml0X3RyaW1fbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cmltLWxpbmVzQDMuMC4xL25vZGVfbW9kdWxlcy90cmltLWxpbmVzL2luZGV4LmpzIigpIHsKICAgIHRhYiA9IDk7CiAgICBzcGFjZSA9IDMyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90ZXh0LmpzCmZ1bmN0aW9uIHRleHQ2KHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB0cmltTGluZXMoU3RyaW5nKG5vZGUyLnZhbHVlKSkgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90ZXh0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcyIoKSB7CiAgICBpbml0X3RyaW1fbGluZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdGhlbWF0aWNCcmVhazMoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiaHIiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW10KICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcwpmdW5jdGlvbiBpZ25vcmUoKSB7CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaGFuZGxlcnM7CnZhciBpbml0X2hhbmRsZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jsb2NrcXVvdGUyKCk7CiAgICBpbml0X2JyZWFrMigpOwogICAgaW5pdF9jb2RlMigpOwogICAgaW5pdF9kZWxldGUoKTsKICAgIGluaXRfZW1waGFzaXMyKCk7CiAgICBpbml0X2Zvb3Rub3RlX3JlZmVyZW5jZSgpOwogICAgaW5pdF9oZWFkaW5nMigpOwogICAgaW5pdF9odG1sOCgpOwogICAgaW5pdF9pbWFnZV9yZWZlcmVuY2UyKCk7CiAgICBpbml0X2ltYWdlMigpOwogICAgaW5pdF9pbmxpbmVfY29kZTIoKTsKICAgIGluaXRfbGlua19yZWZlcmVuY2UyKCk7CiAgICBpbml0X2xpbmsyKCk7CiAgICBpbml0X2xpc3RfaXRlbTIoKTsKICAgIGluaXRfbGlzdDMoKTsKICAgIGluaXRfcGFyYWdyYXBoMigpOwogICAgaW5pdF9yb290MigpOwogICAgaW5pdF9zdHJvbmcyKCk7CiAgICBpbml0X3RhYmxlKCk7CiAgICBpbml0X3RhYmxlX3JvdygpOwogICAgaW5pdF90YWJsZV9jZWxsKCk7CiAgICBpbml0X3RleHQzKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMygpOwogICAgaGFuZGxlcnMgPSB7CiAgICAgIGJsb2NrcXVvdGU6IGJsb2NrcXVvdGUyLAogICAgICBicmVhazogaGFyZEJyZWFrMiwKICAgICAgY29kZTogY29kZTMsCiAgICAgIGRlbGV0ZTogc3RyaWtldGhyb3VnaCwKICAgICAgZW1waGFzaXM6IGVtcGhhc2lzMiwKICAgICAgZm9vdG5vdGVSZWZlcmVuY2U6IGZvb3Rub3RlUmVmZXJlbmNlMiwKICAgICAgaGVhZGluZzogaGVhZGluZzIsCiAgICAgIGh0bWw6IGh0bWwyLAogICAgICBpbWFnZVJlZmVyZW5jZTogaW1hZ2VSZWZlcmVuY2UyLAogICAgICBpbWFnZTogaW1hZ2UyLAogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlMiwKICAgICAgbGlua1JlZmVyZW5jZTogbGlua1JlZmVyZW5jZTIsCiAgICAgIGxpbms6IGxpbmsyLAogICAgICBsaXN0SXRlbTogbGlzdEl0ZW0yLAogICAgICBsaXN0OiBsaXN0NCwKICAgICAgcGFyYWdyYXBoOiBwYXJhZ3JhcGgyLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiByb290IGlzIGRpZmZlcmVudCwgYnV0IGhhcmQgdG8gdHlwZS4KICAgICAgcm9vdDogcm9vdDMsCiAgICAgIHN0cm9uZzogc3Ryb25nMiwKICAgICAgdGFibGUsCiAgICAgIHRhYmxlQ2VsbCwKICAgICAgdGFibGVSb3csCiAgICAgIHRleHQ6IHRleHQ2LAogICAgICB0aGVtYXRpY0JyZWFrOiB0aGVtYXRpY0JyZWFrMywKICAgICAgdG9tbDogaWdub3JlLAogICAgICB5YW1sOiBpZ25vcmUsCiAgICAgIGRlZmluaXRpb246IGlnbm9yZSwKICAgICAgZm9vdG5vdGVEZWZpbml0aW9uOiBpZ25vcmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcwpmdW5jdGlvbiBkZWZhdWx0Rm9vdG5vdGVCYWNrQ29udGVudChfNCwgcmVyZWZlcmVuY2VJbmRleCkgewogIGNvbnN0IHJlc3VsdCA9IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcdTIxQTkiIH1dOwogIGlmIChyZXJlZmVyZW5jZUluZGV4ID4gMSkgewogICAgcmVzdWx0LnB1c2goewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJzdXAiLAogICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IFN0cmluZyhyZXJlZmVyZW5jZUluZGV4KSB9XQogICAgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGZvb3RlcihzdGF0ZTEyKSB7CiAgY29uc3QgY2xvYmJlclByZWZpeCA9IHR5cGVvZiBzdGF0ZTEyLm9wdGlvbnMuY2xvYmJlclByZWZpeCA9PT0gInN0cmluZyIgPyBzdGF0ZTEyLm9wdGlvbnMuY2xvYmJlclByZWZpeCA6ICJ1c2VyLWNvbnRlbnQtIjsKICBjb25zdCBmb290bm90ZUJhY2tDb250ZW50ID0gc3RhdGUxMi5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnQgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQ7CiAgY29uc3QgZm9vdG5vdGVCYWNrTGFiZWwgPSBzdGF0ZTEyLm9wdGlvbnMuZm9vdG5vdGVCYWNrTGFiZWwgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsOwogIGNvbnN0IGZvb3Rub3RlTGFiZWwgPSBzdGF0ZTEyLm9wdGlvbnMuZm9vdG5vdGVMYWJlbCB8fCAiRm9vdG5vdGVzIjsKICBjb25zdCBmb290bm90ZUxhYmVsVGFnTmFtZSA9IHN0YXRlMTIub3B0aW9ucy5mb290bm90ZUxhYmVsVGFnTmFtZSB8fCAiaDIiOwogIGNvbnN0IGZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzID0gc3RhdGUxMi5vcHRpb25zLmZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzIHx8IHsKICAgIGNsYXNzTmFtZTogWyJzci1vbmx5Il0KICB9OwogIGNvbnN0IGxpc3RJdGVtcyA9IFtdOwogIGxldCByZWZlcmVuY2VJbmRleCA9IC0xOwogIHdoaWxlICgrK3JlZmVyZW5jZUluZGV4IDwgc3RhdGUxMi5mb290bm90ZU9yZGVyLmxlbmd0aCkgewogICAgY29uc3QgZGVmaW5pdGlvbjMgPSBzdGF0ZTEyLmZvb3Rub3RlQnlJZC5nZXQoCiAgICAgIHN0YXRlMTIuZm9vdG5vdGVPcmRlcltyZWZlcmVuY2VJbmRleF0KICAgICk7CiAgICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgY29udGVudDMgPSBzdGF0ZTEyLmFsbChkZWZpbml0aW9uMyk7CiAgICBjb25zdCBpZCA9IFN0cmluZyhkZWZpbml0aW9uMy5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogICAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgbGV0IHJlcmVmZXJlbmNlSW5kZXggPSAwOwogICAgY29uc3QgYmFja1JlZmVyZW5jZXMgPSBbXTsKICAgIGNvbnN0IGNvdW50cyA9IHN0YXRlMTIuZm9vdG5vdGVDb3VudHMuZ2V0KGlkKTsKICAgIHdoaWxlIChjb3VudHMgIT09IHZvaWQgMCAmJiArK3JlcmVmZXJlbmNlSW5kZXggPD0gY291bnRzKSB7CiAgICAgIGlmIChiYWNrUmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYmFja1JlZmVyZW5jZXMucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgICAgfQogICAgICBsZXQgY2hpbGRyZW4yID0gdHlwZW9mIGZvb3Rub3RlQmFja0NvbnRlbnQgPT09ICJzdHJpbmciID8gZm9vdG5vdGVCYWNrQ29udGVudCA6IGZvb3Rub3RlQmFja0NvbnRlbnQocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpOwogICAgICBpZiAodHlwZW9mIGNoaWxkcmVuMiA9PT0gInN0cmluZyIpIHsKICAgICAgICBjaGlsZHJlbjIgPSB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGNoaWxkcmVuMiB9OwogICAgICB9CiAgICAgIGJhY2tSZWZlcmVuY2VzLnB1c2goewogICAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgICB0YWdOYW1lOiAiYSIsCiAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgaHJlZjogIiMiICsgY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVyZWZlcmVuY2VJbmRleCA6ICIiKSwKICAgICAgICAgIGRhdGFGb290bm90ZUJhY2tyZWY6ICIiLAogICAgICAgICAgYXJpYUxhYmVsOiB0eXBlb2YgZm9vdG5vdGVCYWNrTGFiZWwgPT09ICJzdHJpbmciID8gZm9vdG5vdGVCYWNrTGFiZWwgOiBmb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCksCiAgICAgICAgICBjbGFzc05hbWU6IFsiZGF0YS1mb290bm90ZS1iYWNrcmVmIl0KICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuMikgPyBjaGlsZHJlbjIgOiBbY2hpbGRyZW4yXQogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSBjb250ZW50M1tjb250ZW50My5sZW5ndGggLSAxXTsKICAgIGlmICh0YWlsICYmIHRhaWwudHlwZSA9PT0gImVsZW1lbnQiICYmIHRhaWwudGFnTmFtZSA9PT0gInAiKSB7CiAgICAgIGNvbnN0IHRhaWxUYWlsID0gdGFpbC5jaGlsZHJlblt0YWlsLmNoaWxkcmVuLmxlbmd0aCAtIDFdOwogICAgICBpZiAodGFpbFRhaWwgJiYgdGFpbFRhaWwudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgdGFpbFRhaWwudmFsdWUgKz0gIiAiOwogICAgICB9IGVsc2UgewogICAgICAgIHRhaWwuY2hpbGRyZW4ucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgICAgfQogICAgICB0YWlsLmNoaWxkcmVuLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpOwogICAgfSBlbHNlIHsKICAgICAgY29udGVudDMucHVzaCguLi5iYWNrUmVmZXJlbmNlcyk7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbTMgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogImxpIiwKICAgICAgcHJvcGVydGllczogeyBpZDogY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkIH0sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAoY29udGVudDMsIHRydWUpCiAgICB9OwogICAgc3RhdGUxMi5wYXRjaChkZWZpbml0aW9uMywgbGlzdEl0ZW0zKTsKICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtMyk7CiAgfQogIGlmIChsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHJldHVybiB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic2VjdGlvbiIsCiAgICBwcm9wZXJ0aWVzOiB7IGRhdGFGb290bm90ZXM6IHRydWUsIGNsYXNzTmFtZTogWyJmb290bm90ZXMiXSB9LAogICAgY2hpbGRyZW46IFsKICAgICAgewogICAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgICB0YWdOYW1lOiBmb290bm90ZUxhYmVsVGFnTmFtZSwKICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAuLi5lc21fZGVmYXVsdChmb290bm90ZUxhYmVsUHJvcGVydGllcyksCiAgICAgICAgICBpZDogImZvb3Rub3RlLWxhYmVsIgogICAgICAgIH0sCiAgICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGZvb3Rub3RlTGFiZWwgfV0KICAgICAgfSwKICAgICAgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0sCiAgICAgIHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogIm9sIiwKICAgICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgICBjaGlsZHJlbjogc3RhdGUxMi53cmFwKGxpc3RJdGVtcywgdHJ1ZSkKICAgICAgfSwKICAgICAgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0KICAgIF0KICB9Owp9CnZhciBpbml0X2Zvb3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvZm9vdGVyLmpzIigpIHsKICAgIGluaXRfZXNtKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcwpmdW5jdGlvbiBjcmVhdGVTdGF0ZSh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczU7CiAgY29uc3QgZGVmaW5pdGlvbkJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGZvb3Rub3RlQnlJZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgZm9vdG5vdGVDb3VudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGhhbmRsZXJzMiA9IHsgLi4uaGFuZGxlcnMsIC4uLnNldHRpbmdzLmhhbmRsZXJzIH07CiAgY29uc3Qgc3RhdGUxMiA9IHsKICAgIGFsbDogYWxsMywKICAgIGFwcGx5RGF0YSwKICAgIGRlZmluaXRpb25CeUlkLAogICAgZm9vdG5vdGVCeUlkLAogICAgZm9vdG5vdGVDb3VudHMsCiAgICBmb290bm90ZU9yZGVyOiBbXSwKICAgIGhhbmRsZXJzOiBoYW5kbGVyczIsCiAgICBvbmU6IG9uZTMsCiAgICBvcHRpb25zOiBzZXR0aW5ncywKICAgIHBhdGNoOiBwYXRjaDIsCiAgICB3cmFwOiB3cmFwMwogIH07CiAgdmlzaXQodHJlZSwgZnVuY3Rpb24obm9kZTIpIHsKICAgIGlmIChub2RlMi50eXBlID09PSAiZGVmaW5pdGlvbiIgfHwgbm9kZTIudHlwZSA9PT0gImZvb3Rub3RlRGVmaW5pdGlvbiIpIHsKICAgICAgY29uc3QgbWFwNyA9IG5vZGUyLnR5cGUgPT09ICJkZWZpbml0aW9uIiA/IGRlZmluaXRpb25CeUlkIDogZm9vdG5vdGVCeUlkOwogICAgICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogICAgICBpZiAoIW1hcDcuaGFzKGlkKSkgewogICAgICAgIG1hcDcuc2V0KGlkLCBub2RlMik7CiAgICAgIH0KICAgIH0KICB9KTsKICByZXR1cm4gc3RhdGUxMjsKICBmdW5jdGlvbiBvbmUzKG5vZGUyLCBwYXJlbnQpIHsKICAgIGNvbnN0IHR5cGU1ID0gbm9kZTIudHlwZTsKICAgIGNvbnN0IGhhbmRsZTMgPSBzdGF0ZTEyLmhhbmRsZXJzW3R5cGU1XTsKICAgIGlmIChvd244LmNhbGwoc3RhdGUxMi5oYW5kbGVycywgdHlwZTUpICYmIGhhbmRsZTMpIHsKICAgICAgcmV0dXJuIGhhbmRsZTMoc3RhdGUxMiwgbm9kZTIsIHBhcmVudCk7CiAgICB9CiAgICBpZiAoc3RhdGUxMi5vcHRpb25zLnBhc3NUaHJvdWdoICYmIHN0YXRlMTIub3B0aW9ucy5wYXNzVGhyb3VnaC5pbmNsdWRlcyh0eXBlNSkpIHsKICAgICAgaWYgKCJjaGlsZHJlbiIgaW4gbm9kZTIpIHsKICAgICAgICBjb25zdCB7IGNoaWxkcmVuOiBjaGlsZHJlbjIsIC4uLnNoYWxsb3cgfSA9IG5vZGUyOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGVzbV9kZWZhdWx0KHNoYWxsb3cpOwogICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBlc21fZGVmYXVsdChub2RlMik7CiAgICB9CiAgICBjb25zdCB1bmtub3duMyA9IHN0YXRlMTIub3B0aW9ucy51bmtub3duSGFuZGxlciB8fCBkZWZhdWx0VW5rbm93bkhhbmRsZXI7CiAgICByZXR1cm4gdW5rbm93bjMoc3RhdGUxMiwgbm9kZTIsIHBhcmVudCk7CiAgfQogIGZ1bmN0aW9uIGFsbDMocGFyZW50KSB7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGlmICgiY2hpbGRyZW4iIGluIHBhcmVudCkgewogICAgICBjb25zdCBub2RlcyA9IHBhcmVudC5jaGlsZHJlbjsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBub2Rlcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBzdGF0ZTEyLm9uZShub2Rlc1tpbmRleDJdLCBwYXJlbnQpOwogICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgIGlmIChpbmRleDIgJiYgbm9kZXNbaW5kZXgyIC0gMV0udHlwZSA9PT0gImJyZWFrIikgewogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdHJpbU1hcmtkb3duU3BhY2VTdGFydChyZXN1bHQudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIpIHsKICAgICAgICAgICAgICBjb25zdCBoZWFkMiA9IHJlc3VsdC5jaGlsZHJlblswXTsKICAgICAgICAgICAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICBoZWFkMi52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQoaGVhZDIudmFsdWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgICB2YWx1ZXMucHVzaCguLi5yZXN1bHQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQp9CmZ1bmN0aW9uIHBhdGNoMihmcm9tMiwgdG8yKSB7CiAgaWYgKGZyb20yLnBvc2l0aW9uKSB0bzIucG9zaXRpb24gPSBwb3NpdGlvbjIoZnJvbTIpOwp9CmZ1bmN0aW9uIGFwcGx5RGF0YShmcm9tMiwgdG8yKSB7CiAgbGV0IHJlc3VsdCA9IHRvMjsKICBpZiAoZnJvbTIgJiYgZnJvbTIuZGF0YSkgewogICAgY29uc3QgaE5hbWUgPSBmcm9tMi5kYXRhLmhOYW1lOwogICAgY29uc3QgaENoaWxkcmVuID0gZnJvbTIuZGF0YS5oQ2hpbGRyZW47CiAgICBjb25zdCBoUHJvcGVydGllcyA9IGZyb20yLmRhdGEuaFByb3BlcnRpZXM7CiAgICBpZiAodHlwZW9mIGhOYW1lID09PSAic3RyaW5nIikgewogICAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJlbGVtZW50IikgewogICAgICAgIHJlc3VsdC50YWdOYW1lID0gaE5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gImNoaWxkcmVuIiBpbiByZXN1bHQgPyByZXN1bHQuY2hpbGRyZW4gOiBbcmVzdWx0XTsKICAgICAgICByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogaE5hbWUsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogY2hpbGRyZW4yIH07CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHQudHlwZSA9PT0gImVsZW1lbnQiICYmIGhQcm9wZXJ0aWVzKSB7CiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnByb3BlcnRpZXMsIGVzbV9kZWZhdWx0KGhQcm9wZXJ0aWVzKSk7CiAgICB9CiAgICBpZiAoImNoaWxkcmVuIiBpbiByZXN1bHQgJiYgcmVzdWx0LmNoaWxkcmVuICYmIGhDaGlsZHJlbiAhPT0gbnVsbCAmJiBoQ2hpbGRyZW4gIT09IHZvaWQgMCkgewogICAgICByZXN1bHQuY2hpbGRyZW4gPSBoQ2hpbGRyZW47CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZGVmYXVsdFVua25vd25IYW5kbGVyKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgZGF0YSA9IG5vZGUyLmRhdGEgfHwge307CiAgY29uc3QgcmVzdWx0ID0gInZhbHVlIiBpbiBub2RlMiAmJiAhKG93bjguY2FsbChkYXRhLCAiaFByb3BlcnRpZXMiKSB8fCBvd244LmNhbGwoZGF0YSwgImhDaGlsZHJlbiIpKSA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUgfSA6IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJkaXYiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQpmdW5jdGlvbiB3cmFwMyhub2RlcywgbG9vc2UpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKGxvb3NlKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IG5vZGVzLmxlbmd0aCkgewogICAgaWYgKGluZGV4MikgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogICAgcmVzdWx0LnB1c2gobm9kZXNbaW5kZXgyXSk7CiAgfQogIGlmIChsb29zZSAmJiBub2Rlcy5sZW5ndGggPiAwKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdHJpbU1hcmtkb3duU3BhY2VTdGFydCh2YWx1ZTIpIHsKICBsZXQgaW5kZXgyID0gMDsKICBsZXQgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIHdoaWxlIChjb2RlNCA9PT0gOSB8fCBjb2RlNCA9PT0gMzIpIHsKICAgIGluZGV4MisrOwogICAgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIH0KICByZXR1cm4gdmFsdWUyLnNsaWNlKGluZGV4Mik7Cn0KdmFyIG93bjgsIGVtcHR5T3B0aW9uczU7CnZhciBpbml0X3N0YXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0KCk7CiAgICBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24oKTsKICAgIGluaXRfaGFuZGxlcnMoKTsKICAgIG93bjggPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGVtcHR5T3B0aW9uczUgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9IYXN0KHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBzdGF0ZTEyID0gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucyk7CiAgY29uc3Qgbm9kZTIgPSBzdGF0ZTEyLm9uZSh0cmVlLCB2b2lkIDApOwogIGNvbnN0IGZvb3QgPSBmb290ZXIoc3RhdGUxMik7CiAgY29uc3QgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShub2RlMikgPyB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IG5vZGUyIH0gOiBub2RlMiB8fCB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IFtdIH07CiAgaWYgKGZvb3QpIHsKICAgIG9rKCJjaGlsZHJlbiIgaW4gcmVzdWx0KTsKICAgIHJlc3VsdC5jaGlsZHJlbi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9LCBmb290KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9saWIyNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X2Zvb3RlcigpOwogICAgaW5pdF9zdGF0ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9faGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2hhbmRsZXJzKCk7CiAgICBpbml0X2xpYjI3KCk7CiAgICBpbml0X2Zvb3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaHRtbC12b2lkLWVsZW1lbnRzQDMuMC4wL25vZGVfbW9kdWxlcy9odG1sLXZvaWQtZWxlbWVudHMvaW5kZXguanMKdmFyIGh0bWxWb2lkRWxlbWVudHM7CnZhciBpbml0X2h0bWxfdm9pZF9lbGVtZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2h0bWwtdm9pZC1lbGVtZW50c0AzLjAuMC9ub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzIigpIHsKICAgIGh0bWxWb2lkRWxlbWVudHMgPSBbCiAgICAgICJhcmVhIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmdzb3VuZCIsCiAgICAgICJiciIsCiAgICAgICJjb2wiLAogICAgICAiY29tbWFuZCIsCiAgICAgICJlbWJlZCIsCiAgICAgICJmcmFtZSIsCiAgICAgICJociIsCiAgICAgICJpbWFnZSIsCiAgICAgICJpbWciLAogICAgICAiaW5wdXQiLAogICAgICAia2V5Z2VuIiwKICAgICAgImxpbmsiLAogICAgICAibWV0YSIsCiAgICAgICJwYXJhbSIsCiAgICAgICJzb3VyY2UiLAogICAgICAidHJhY2siLAogICAgICAid2JyIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMKdmFyIFNjaGVtYTsKdmFyIGluaXRfc2NoZW1hMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMiKCkgewogICAgU2NoZW1hID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydwcm9wZXJ0eSddfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge1NjaGVtYVR5cGVbJ25vcm1hbCddfSBub3JtYWwKICAgICAgICogICBOb3JtYWwuCiAgICAgICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV0KICAgICAgICogICBTcGFjZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBTY2hlbWEuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTExLCBub3JtYWwsIHNwYWNlMikgewogICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFsOwogICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTExOwogICAgICAgIGlmIChzcGFjZTIpIHsKICAgICAgICAgIHRoaXMuc3BhY2UgPSBzcGFjZTI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgU2NoZW1hLnByb3RvdHlwZS5ub3JtYWwgPSB7fTsKICAgIFNjaGVtYS5wcm90b3R5cGUucHJvcGVydHkgPSB7fTsKICAgIFNjaGVtYS5wcm90b3R5cGUuc3BhY2UgPSB2b2lkIDA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvbWVyZ2UuanMKZnVuY3Rpb24gbWVyZ2UzKGRlZmluaXRpb25zLCBzcGFjZTIpIHsKICBjb25zdCBwcm9wZXJ0eTExID0ge307CiAgY29uc3Qgbm9ybWFsID0ge307CiAgZm9yIChjb25zdCBkZWZpbml0aW9uMyBvZiBkZWZpbml0aW9ucykgewogICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0eTExLCBkZWZpbml0aW9uMy5wcm9wZXJ0eSk7CiAgICBPYmplY3QuYXNzaWduKG5vcm1hbCwgZGVmaW5pdGlvbjMubm9ybWFsKTsKICB9CiAgcmV0dXJuIG5ldyBTY2hlbWEocHJvcGVydHkxMSwgbm9ybWFsLCBzcGFjZTIpOwp9CnZhciBpbml0X21lcmdlMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9tZXJnZS5qcyIoKSB7CiAgICBpbml0X3NjaGVtYTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvbm9ybWFsaXplLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZTModmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi50b0xvd2VyQ2FzZSgpOwp9CnZhciBpbml0X25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvbm9ybWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9pbmZvLmpzCnZhciBJbmZvOwp2YXIgaW5pdF9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2luZm8uanMiKCkgewogICAgSW5mbyA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlCiAgICAgICAqICAgQXR0cmlidXRlLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIEluZm8uCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTExLCBhdHRyaWJ1dGUpIHsKICAgICAgICB0aGlzLmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHkxMTsKICAgICAgfQogICAgfTsKICAgIEluZm8ucHJvdG90eXBlLmF0dHJpYnV0ZSA9ICIiOwogICAgSW5mby5wcm90b3R5cGUuYm9vbGVhbmlzaCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuYm9vbGVhbiA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuY29tbWFPclNwYWNlU2VwYXJhdGVkID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuZGVmaW5lZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUubXVzdFVzZVByb3BlcnR5ID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5udW1iZXIgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLm92ZXJsb2FkZWRCb29sZWFuID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5wcm9wZXJ0eSA9ICIiOwogICAgSW5mby5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLnNwYWNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3R5cGVzLmpzCnZhciB0eXBlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KHR5cGVzX2V4cG9ydHMsIHsKICBib29sZWFuOiAoKSA9PiBib29sZWFuLAogIGJvb2xlYW5pc2g6ICgpID0+IGJvb2xlYW5pc2gsCiAgY29tbWFPclNwYWNlU2VwYXJhdGVkOiAoKSA9PiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgY29tbWFTZXBhcmF0ZWQ6ICgpID0+IGNvbW1hU2VwYXJhdGVkLAogIG51bWJlcjogKCkgPT4gbnVtYmVyLAogIG92ZXJsb2FkZWRCb29sZWFuOiAoKSA9PiBvdmVybG9hZGVkQm9vbGVhbiwKICBzcGFjZVNlcGFyYXRlZDogKCkgPT4gc3BhY2VTZXBhcmF0ZWQKfSk7CmZ1bmN0aW9uIGluY3JlbWVudCgpIHsKICByZXR1cm4gMiAqKiArK3Bvd2VyczsKfQp2YXIgcG93ZXJzLCBib29sZWFuLCBib29sZWFuaXNoLCBvdmVybG9hZGVkQm9vbGVhbiwgbnVtYmVyLCBzcGFjZVNlcGFyYXRlZCwgY29tbWFTZXBhcmF0ZWQsIGNvbW1hT3JTcGFjZVNlcGFyYXRlZDsKdmFyIGluaXRfdHlwZXMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3R5cGVzLmpzIigpIHsKICAgIHBvd2VycyA9IDA7CiAgICBib29sZWFuID0gaW5jcmVtZW50KCk7CiAgICBib29sZWFuaXNoID0gaW5jcmVtZW50KCk7CiAgICBvdmVybG9hZGVkQm9vbGVhbiA9IGluY3JlbWVudCgpOwogICAgbnVtYmVyID0gaW5jcmVtZW50KCk7CiAgICBzcGFjZVNlcGFyYXRlZCA9IGluY3JlbWVudCgpOwogICAgY29tbWFTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICAgIGNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGluY3JlbWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2RlZmluZWQtaW5mby5qcwpmdW5jdGlvbiBtYXJrKHZhbHVlcywga2V5MiwgdmFsdWUyKSB7CiAgaWYgKHZhbHVlMikgewogICAgdmFsdWVzW2tleTJdID0gdmFsdWUyOwogIH0KfQp2YXIgY2hlY2tzLCBEZWZpbmVkSW5mbzsKdmFyIGluaXRfZGVmaW5lZF9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2RlZmluZWQtaW5mby5qcyIoKSB7CiAgICBpbml0X2luZm8oKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBjaGVja3MgPSAvKiogQHR5cGUge1JlYWRvbmx5QXJyYXk8a2V5b2YgdHlwZW9mIHR5cGVzPn0gKi8KICAgIE9iamVjdC5rZXlzKHR5cGVzX2V4cG9ydHMpOwogICAgRGVmaW5lZEluZm8gPSBjbGFzcyBleHRlbmRzIEluZm8gewogICAgICAvKioKICAgICAgICogQGNvbnN0cnVjdG9yCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlCiAgICAgICAqICAgQXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFttYXNrXQogICAgICAgKiAgIE1hc2suCiAgICAgICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV0KICAgICAgICogICBTcGFjZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBJbmZvLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMSwgYXR0cmlidXRlLCBtYXNrLCBzcGFjZTIpIHsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgc3VwZXIocHJvcGVydHkxMSwgYXR0cmlidXRlKTsKICAgICAgICBtYXJrKHRoaXMsICJzcGFjZSIsIHNwYWNlMik7CiAgICAgICAgaWYgKHR5cGVvZiBtYXNrID09PSAibnVtYmVyIikgewogICAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2hlY2tzLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGVjayA9IGNoZWNrc1tpbmRleDJdOwogICAgICAgICAgICBtYXJrKHRoaXMsIGNoZWNrc1tpbmRleDJdLCAobWFzayAmIHR5cGVzX2V4cG9ydHNbY2hlY2tdKSA9PT0gdHlwZXNfZXhwb3J0c1tjaGVja10pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIERlZmluZWRJbmZvLnByb3RvdHlwZS5kZWZpbmVkID0gdHJ1ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jcmVhdGUuanMKZnVuY3Rpb24gY3JlYXRlNihkZWZpbml0aW9uMykgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3Qgbm9ybWFscyA9IHt9OwogIGZvciAoY29uc3QgW3Byb3BlcnR5MTEsIHZhbHVlMl0gb2YgT2JqZWN0LmVudHJpZXMoZGVmaW5pdGlvbjMucHJvcGVydGllcykpIHsKICAgIGNvbnN0IGluZm8gPSBuZXcgRGVmaW5lZEluZm8oCiAgICAgIHByb3BlcnR5MTEsCiAgICAgIGRlZmluaXRpb24zLnRyYW5zZm9ybShkZWZpbml0aW9uMy5hdHRyaWJ1dGVzIHx8IHt9LCBwcm9wZXJ0eTExKSwKICAgICAgdmFsdWUyLAogICAgICBkZWZpbml0aW9uMy5zcGFjZQogICAgKTsKICAgIGlmIChkZWZpbml0aW9uMy5tdXN0VXNlUHJvcGVydHkgJiYgZGVmaW5pdGlvbjMubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKHByb3BlcnR5MTEpKSB7CiAgICAgIGluZm8ubXVzdFVzZVByb3BlcnR5ID0gdHJ1ZTsKICAgIH0KICAgIHByb3BlcnRpZXMyW3Byb3BlcnR5MTFdID0gaW5mbzsKICAgIG5vcm1hbHNbbm9ybWFsaXplMyhwcm9wZXJ0eTExKV0gPSBwcm9wZXJ0eTExOwogICAgbm9ybWFsc1tub3JtYWxpemUzKGluZm8uYXR0cmlidXRlKV0gPSBwcm9wZXJ0eTExOwogIH0KICByZXR1cm4gbmV3IFNjaGVtYShwcm9wZXJ0aWVzMiwgbm9ybWFscywgZGVmaW5pdGlvbjMuc3BhY2UpOwp9CnZhciBpbml0X2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jcmVhdGUuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemUoKTsKICAgIGluaXRfZGVmaW5lZF9pbmZvKCk7CiAgICBpbml0X3NjaGVtYTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvYXJpYS5qcwp2YXIgYXJpYTI7CnZhciBpbml0X2FyaWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2FyaWEuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBhcmlhMiA9IGNyZWF0ZTYoewogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgYXJpYUFjdGl2ZURlc2NlbmRhbnQ6IG51bGwsCiAgICAgICAgYXJpYUF0b21pYzogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQXV0b0NvbXBsZXRlOiBudWxsLAogICAgICAgIGFyaWFCdXN5OiBib29sZWFuaXNoLAogICAgICAgIGFyaWFDaGVja2VkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFDb2xDb3VudDogbnVtYmVyLAogICAgICAgIGFyaWFDb2xJbmRleDogbnVtYmVyLAogICAgICAgIGFyaWFDb2xTcGFuOiBudW1iZXIsCiAgICAgICAgYXJpYUNvbnRyb2xzOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhQ3VycmVudDogbnVsbCwKICAgICAgICBhcmlhRGVzY3JpYmVkQnk6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFEZXRhaWxzOiBudWxsLAogICAgICAgIGFyaWFEaXNhYmxlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhRHJvcEVmZmVjdDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUVycm9yTWVzc2FnZTogbnVsbCwKICAgICAgICBhcmlhRXhwYW5kZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUZsb3dUbzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUdyYWJiZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUhhc1BvcHVwOiBudWxsLAogICAgICAgIGFyaWFIaWRkZW46IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUludmFsaWQ6IG51bGwsCiAgICAgICAgYXJpYUtleVNob3J0Y3V0czogbnVsbCwKICAgICAgICBhcmlhTGFiZWw6IG51bGwsCiAgICAgICAgYXJpYUxhYmVsbGVkQnk6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFMZXZlbDogbnVtYmVyLAogICAgICAgIGFyaWFMaXZlOiBudWxsLAogICAgICAgIGFyaWFNb2RhbDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhTXVsdGlMaW5lOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYU9yaWVudGF0aW9uOiBudWxsLAogICAgICAgIGFyaWFPd25zOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhUGxhY2Vob2xkZXI6IG51bGwsCiAgICAgICAgYXJpYVBvc0luU2V0OiBudW1iZXIsCiAgICAgICAgYXJpYVByZXNzZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVJlYWRPbmx5OiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSZWxldmFudDogbnVsbCwKICAgICAgICBhcmlhUmVxdWlyZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYVJvd0NvdW50OiBudW1iZXIsCiAgICAgICAgYXJpYVJvd0luZGV4OiBudW1iZXIsCiAgICAgICAgYXJpYVJvd1NwYW46IG51bWJlciwKICAgICAgICBhcmlhU2VsZWN0ZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVNldFNpemU6IG51bWJlciwKICAgICAgICBhcmlhU29ydDogbnVsbCwKICAgICAgICBhcmlhVmFsdWVNYXg6IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVNaW46IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVOb3c6IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVUZXh0OiBudWxsLAogICAgICAgIHJvbGU6IG51bGwKICAgICAgfSwKICAgICAgdHJhbnNmb3JtKF80LCBwcm9wZXJ0eTExKSB7CiAgICAgICAgcmV0dXJuIHByb3BlcnR5MTEgPT09ICJyb2xlIiA/IHByb3BlcnR5MTEgOiAiYXJpYS0iICsgcHJvcGVydHkxMS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBhdHRyaWJ1dGUpIHsKICByZXR1cm4gYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGU7Cn0KdmFyIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2Utc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIHByb3BlcnR5MTEpIHsKICByZXR1cm4gY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBwcm9wZXJ0eTExLnRvTG93ZXJDYXNlKCkpOwp9CnZhciBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzIigpIHsKICAgIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2h0bWwuanMKdmFyIGh0bWwzOwp2YXIgaW5pdF9odG1sOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaHRtbC5qcyIoKSB7CiAgICBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF90eXBlczMoKTsKICAgIGh0bWwzID0gY3JlYXRlNih7CiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhY2NlcHRjaGFyc2V0OiAiYWNjZXB0LWNoYXJzZXQiLAogICAgICAgIGNsYXNzbmFtZTogImNsYXNzIiwKICAgICAgICBodG1sZm9yOiAiZm9yIiwKICAgICAgICBodHRwZXF1aXY6ICJodHRwLWVxdWl2IgogICAgICB9LAogICAgICBtdXN0VXNlUHJvcGVydHk6IFsiY2hlY2tlZCIsICJtdWx0aXBsZSIsICJtdXRlZCIsICJzZWxlY3RlZCJdLAogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgLy8gU3RhbmRhcmQgUHJvcGVydGllcy4KICAgICAgICBhYmJyOiBudWxsLAogICAgICAgIGFjY2VwdDogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgYWNjZXB0Q2hhcnNldDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYWNjZXNzS2V5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhY3Rpb246IG51bGwsCiAgICAgICAgYWxsb3c6IG51bGwsCiAgICAgICAgYWxsb3dGdWxsU2NyZWVuOiBib29sZWFuLAogICAgICAgIGFsbG93UGF5bWVudFJlcXVlc3Q6IGJvb2xlYW4sCiAgICAgICAgYWxsb3dVc2VyTWVkaWE6IGJvb2xlYW4sCiAgICAgICAgYWx0OiBudWxsLAogICAgICAgIGFzOiBudWxsLAogICAgICAgIGFzeW5jOiBib29sZWFuLAogICAgICAgIGF1dG9DYXBpdGFsaXplOiBudWxsLAogICAgICAgIGF1dG9Db21wbGV0ZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXV0b0ZvY3VzOiBib29sZWFuLAogICAgICAgIGF1dG9QbGF5OiBib29sZWFuLAogICAgICAgIGJsb2NraW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjYXB0dXJlOiBudWxsLAogICAgICAgIGNoYXJTZXQ6IG51bGwsCiAgICAgICAgY2hlY2tlZDogYm9vbGVhbiwKICAgICAgICBjaXRlOiBudWxsLAogICAgICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY29sczogbnVtYmVyLAogICAgICAgIGNvbFNwYW46IG51bGwsCiAgICAgICAgY29udGVudDogbnVsbCwKICAgICAgICBjb250ZW50RWRpdGFibGU6IGJvb2xlYW5pc2gsCiAgICAgICAgY29udHJvbHM6IGJvb2xlYW4sCiAgICAgICAgY29udHJvbHNMaXN0OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjb29yZHM6IG51bWJlciB8IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGNyb3NzT3JpZ2luOiBudWxsLAogICAgICAgIGRhdGE6IG51bGwsCiAgICAgICAgZGF0ZVRpbWU6IG51bGwsCiAgICAgICAgZGVjb2Rpbmc6IG51bGwsCiAgICAgICAgZGVmYXVsdDogYm9vbGVhbiwKICAgICAgICBkZWZlcjogYm9vbGVhbiwKICAgICAgICBkaXI6IG51bGwsCiAgICAgICAgZGlyTmFtZTogbnVsbCwKICAgICAgICBkaXNhYmxlZDogYm9vbGVhbiwKICAgICAgICBkb3dubG9hZDogb3ZlcmxvYWRlZEJvb2xlYW4sCiAgICAgICAgZHJhZ2dhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGVuY1R5cGU6IG51bGwsCiAgICAgICAgZW50ZXJLZXlIaW50OiBudWxsLAogICAgICAgIGZldGNoUHJpb3JpdHk6IG51bGwsCiAgICAgICAgZm9ybTogbnVsbCwKICAgICAgICBmb3JtQWN0aW9uOiBudWxsLAogICAgICAgIGZvcm1FbmNUeXBlOiBudWxsLAogICAgICAgIGZvcm1NZXRob2Q6IG51bGwsCiAgICAgICAgZm9ybU5vVmFsaWRhdGU6IGJvb2xlYW4sCiAgICAgICAgZm9ybVRhcmdldDogbnVsbCwKICAgICAgICBoZWFkZXJzOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBoZWlnaHQ6IG51bWJlciwKICAgICAgICBoaWRkZW46IG92ZXJsb2FkZWRCb29sZWFuLAogICAgICAgIGhpZ2g6IG51bWJlciwKICAgICAgICBocmVmOiBudWxsLAogICAgICAgIGhyZWZMYW5nOiBudWxsLAogICAgICAgIGh0bWxGb3I6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGh0dHBFcXVpdjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaWQ6IG51bGwsCiAgICAgICAgaW1hZ2VTaXplczogbnVsbCwKICAgICAgICBpbWFnZVNyY1NldDogbnVsbCwKICAgICAgICBpbmVydDogYm9vbGVhbiwKICAgICAgICBpbnB1dE1vZGU6IG51bGwsCiAgICAgICAgaW50ZWdyaXR5OiBudWxsLAogICAgICAgIGlzOiBudWxsLAogICAgICAgIGlzTWFwOiBib29sZWFuLAogICAgICAgIGl0ZW1JZDogbnVsbCwKICAgICAgICBpdGVtUHJvcDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaXRlbVJlZjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaXRlbVNjb3BlOiBib29sZWFuLAogICAgICAgIGl0ZW1UeXBlOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBraW5kOiBudWxsLAogICAgICAgIGxhYmVsOiBudWxsLAogICAgICAgIGxhbmc6IG51bGwsCiAgICAgICAgbGFuZ3VhZ2U6IG51bGwsCiAgICAgICAgbGlzdDogbnVsbCwKICAgICAgICBsb2FkaW5nOiBudWxsLAogICAgICAgIGxvb3A6IGJvb2xlYW4sCiAgICAgICAgbG93OiBudW1iZXIsCiAgICAgICAgbWFuaWZlc3Q6IG51bGwsCiAgICAgICAgbWF4OiBudWxsLAogICAgICAgIG1heExlbmd0aDogbnVtYmVyLAogICAgICAgIG1lZGlhOiBudWxsLAogICAgICAgIG1ldGhvZDogbnVsbCwKICAgICAgICBtaW46IG51bGwsCiAgICAgICAgbWluTGVuZ3RoOiBudW1iZXIsCiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4sCiAgICAgICAgbXV0ZWQ6IGJvb2xlYW4sCiAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICBub25jZTogbnVsbCwKICAgICAgICBub01vZHVsZTogYm9vbGVhbiwKICAgICAgICBub1ZhbGlkYXRlOiBib29sZWFuLAogICAgICAgIG9uQWJvcnQ6IG51bGwsCiAgICAgICAgb25BZnRlclByaW50OiBudWxsLAogICAgICAgIG9uQXV4Q2xpY2s6IG51bGwsCiAgICAgICAgb25CZWZvcmVNYXRjaDogbnVsbCwKICAgICAgICBvbkJlZm9yZVByaW50OiBudWxsLAogICAgICAgIG9uQmVmb3JlVG9nZ2xlOiBudWxsLAogICAgICAgIG9uQmVmb3JlVW5sb2FkOiBudWxsLAogICAgICAgIG9uQmx1cjogbnVsbCwKICAgICAgICBvbkNhbmNlbDogbnVsbCwKICAgICAgICBvbkNhblBsYXk6IG51bGwsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCwKICAgICAgICBvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkNsaWNrOiBudWxsLAogICAgICAgIG9uQ2xvc2U6IG51bGwsCiAgICAgICAgb25Db250ZXh0TG9zdDogbnVsbCwKICAgICAgICBvbkNvbnRleHRNZW51OiBudWxsLAogICAgICAgIG9uQ29udGV4dFJlc3RvcmVkOiBudWxsLAogICAgICAgIG9uQ29weTogbnVsbCwKICAgICAgICBvbkN1ZUNoYW5nZTogbnVsbCwKICAgICAgICBvbkN1dDogbnVsbCwKICAgICAgICBvbkRibENsaWNrOiBudWxsLAogICAgICAgIG9uRHJhZzogbnVsbCwKICAgICAgICBvbkRyYWdFbmQ6IG51bGwsCiAgICAgICAgb25EcmFnRW50ZXI6IG51bGwsCiAgICAgICAgb25EcmFnRXhpdDogbnVsbCwKICAgICAgICBvbkRyYWdMZWF2ZTogbnVsbCwKICAgICAgICBvbkRyYWdPdmVyOiBudWxsLAogICAgICAgIG9uRHJhZ1N0YXJ0OiBudWxsLAogICAgICAgIG9uRHJvcDogbnVsbCwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uRW1wdGllZDogbnVsbCwKICAgICAgICBvbkVuZGVkOiBudWxsLAogICAgICAgIG9uRXJyb3I6IG51bGwsCiAgICAgICAgb25Gb2N1czogbnVsbCwKICAgICAgICBvbkZvcm1EYXRhOiBudWxsLAogICAgICAgIG9uSGFzaENoYW5nZTogbnVsbCwKICAgICAgICBvbklucHV0OiBudWxsLAogICAgICAgIG9uSW52YWxpZDogbnVsbCwKICAgICAgICBvbktleURvd246IG51bGwsCiAgICAgICAgb25LZXlQcmVzczogbnVsbCwKICAgICAgICBvbktleVVwOiBudWxsLAogICAgICAgIG9uTGFuZ3VhZ2VDaGFuZ2U6IG51bGwsCiAgICAgICAgb25Mb2FkOiBudWxsLAogICAgICAgIG9uTG9hZGVkRGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhOiBudWxsLAogICAgICAgIG9uTG9hZEVuZDogbnVsbCwKICAgICAgICBvbkxvYWRTdGFydDogbnVsbCwKICAgICAgICBvbk1lc3NhZ2U6IG51bGwsCiAgICAgICAgb25NZXNzYWdlRXJyb3I6IG51bGwsCiAgICAgICAgb25Nb3VzZURvd246IG51bGwsCiAgICAgICAgb25Nb3VzZUVudGVyOiBudWxsLAogICAgICAgIG9uTW91c2VMZWF2ZTogbnVsbCwKICAgICAgICBvbk1vdXNlTW92ZTogbnVsbCwKICAgICAgICBvbk1vdXNlT3V0OiBudWxsLAogICAgICAgIG9uTW91c2VPdmVyOiBudWxsLAogICAgICAgIG9uTW91c2VVcDogbnVsbCwKICAgICAgICBvbk9mZmxpbmU6IG51bGwsCiAgICAgICAgb25PbmxpbmU6IG51bGwsCiAgICAgICAgb25QYWdlSGlkZTogbnVsbCwKICAgICAgICBvblBhZ2VTaG93OiBudWxsLAogICAgICAgIG9uUGFzdGU6IG51bGwsCiAgICAgICAgb25QYXVzZTogbnVsbCwKICAgICAgICBvblBsYXk6IG51bGwsCiAgICAgICAgb25QbGF5aW5nOiBudWxsLAogICAgICAgIG9uUG9wU3RhdGU6IG51bGwsCiAgICAgICAgb25Qcm9ncmVzczogbnVsbCwKICAgICAgICBvblJhdGVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25SZWplY3Rpb25IYW5kbGVkOiBudWxsLAogICAgICAgIG9uUmVzZXQ6IG51bGwsCiAgICAgICAgb25SZXNpemU6IG51bGwsCiAgICAgICAgb25TY3JvbGw6IG51bGwsCiAgICAgICAgb25TY3JvbGxFbmQ6IG51bGwsCiAgICAgICAgb25TZWN1cml0eVBvbGljeVZpb2xhdGlvbjogbnVsbCwKICAgICAgICBvblNlZWtlZDogbnVsbCwKICAgICAgICBvblNlZWtpbmc6IG51bGwsCiAgICAgICAgb25TZWxlY3Q6IG51bGwsCiAgICAgICAgb25TbG90Q2hhbmdlOiBudWxsLAogICAgICAgIG9uU3RhbGxlZDogbnVsbCwKICAgICAgICBvblN0b3JhZ2U6IG51bGwsCiAgICAgICAgb25TdWJtaXQ6IG51bGwsCiAgICAgICAgb25TdXNwZW5kOiBudWxsLAogICAgICAgIG9uVGltZVVwZGF0ZTogbnVsbCwKICAgICAgICBvblRvZ2dsZTogbnVsbCwKICAgICAgICBvblVuaGFuZGxlZFJlamVjdGlvbjogbnVsbCwKICAgICAgICBvblVubG9hZDogbnVsbCwKICAgICAgICBvblZvbHVtZUNoYW5nZTogbnVsbCwKICAgICAgICBvbldhaXRpbmc6IG51bGwsCiAgICAgICAgb25XaGVlbDogbnVsbCwKICAgICAgICBvcGVuOiBib29sZWFuLAogICAgICAgIG9wdGltdW06IG51bWJlciwKICAgICAgICBwYXR0ZXJuOiBudWxsLAogICAgICAgIHBpbmc6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIHBsYXlzSW5saW5lOiBib29sZWFuLAogICAgICAgIHBvcG92ZXI6IG51bGwsCiAgICAgICAgcG9wb3ZlclRhcmdldDogbnVsbCwKICAgICAgICBwb3BvdmVyVGFyZ2V0QWN0aW9uOiBudWxsLAogICAgICAgIHBvc3RlcjogbnVsbCwKICAgICAgICBwcmVsb2FkOiBudWxsLAogICAgICAgIHJlYWRPbmx5OiBib29sZWFuLAogICAgICAgIHJlZmVycmVyUG9saWN5OiBudWxsLAogICAgICAgIHJlbDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW4sCiAgICAgICAgcmV2ZXJzZWQ6IGJvb2xlYW4sCiAgICAgICAgcm93czogbnVtYmVyLAogICAgICAgIHJvd1NwYW46IG51bWJlciwKICAgICAgICBzYW5kYm94OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBzY29wZTogbnVsbCwKICAgICAgICBzY29wZWQ6IGJvb2xlYW4sCiAgICAgICAgc2VhbWxlc3M6IGJvb2xlYW4sCiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW4sCiAgICAgICAgc2hhZG93Um9vdENsb25hYmxlOiBib29sZWFuLAogICAgICAgIHNoYWRvd1Jvb3REZWxlZ2F0ZXNGb2N1czogYm9vbGVhbiwKICAgICAgICBzaGFkb3dSb290TW9kZTogbnVsbCwKICAgICAgICBzaGFwZTogbnVsbCwKICAgICAgICBzaXplOiBudW1iZXIsCiAgICAgICAgc2l6ZXM6IG51bGwsCiAgICAgICAgc2xvdDogbnVsbCwKICAgICAgICBzcGFuOiBudW1iZXIsCiAgICAgICAgc3BlbGxDaGVjazogYm9vbGVhbmlzaCwKICAgICAgICBzcmM6IG51bGwsCiAgICAgICAgc3JjRG9jOiBudWxsLAogICAgICAgIHNyY0xhbmc6IG51bGwsCiAgICAgICAgc3JjU2V0OiBudWxsLAogICAgICAgIHN0YXJ0OiBudW1iZXIsCiAgICAgICAgc3RlcDogbnVsbCwKICAgICAgICBzdHlsZTogbnVsbCwKICAgICAgICB0YWJJbmRleDogbnVtYmVyLAogICAgICAgIHRhcmdldDogbnVsbCwKICAgICAgICB0aXRsZTogbnVsbCwKICAgICAgICB0cmFuc2xhdGU6IG51bGwsCiAgICAgICAgdHlwZTogbnVsbCwKICAgICAgICB0eXBlTXVzdE1hdGNoOiBib29sZWFuLAogICAgICAgIHVzZU1hcDogbnVsbCwKICAgICAgICB2YWx1ZTogYm9vbGVhbmlzaCwKICAgICAgICB3aWR0aDogbnVtYmVyLAogICAgICAgIHdyYXA6IG51bGwsCiAgICAgICAgd3JpdGluZ1N1Z2dlc3Rpb25zOiBudWxsLAogICAgICAgIC8vIExlZ2FjeS4KICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI290aGVyLWVsZW1lbnRzLC1hdHRyaWJ1dGVzLWFuZC1hcGlzCiAgICAgICAgYWxpZ246IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdGV4dC1hbGlnbmAgaW5zdGVhZCwKICAgICAgICBhTGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTphY3RpdmUge2NvbG9yfWAgaW5zdGVhZAogICAgICAgIGFyY2hpdmU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIC8vIGA8b2JqZWN0PmAuIExpc3Qgb2YgVVJJcyB0byBhcmNoaXZlcwogICAgICAgIGF4aXM6IG51bGwsCiAgICAgICAgLy8gYDx0ZD5gIGFuZCBgPHRoPmAuIFVzZSBgc2NvcGVgIG9uIGA8dGg+YAogICAgICAgIGJhY2tncm91bmQ6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGJhY2tncm91bmQtaW1hZ2VgIGluc3RlYWQKICAgICAgICBiZ0NvbG9yOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gIGFuZCB0YWJsZSBlbGVtZW50cy4gVXNlIENTUyBgYmFja2dyb3VuZC1jb2xvcmAgaW5zdGVhZAogICAgICAgIGJvcmRlcjogbnVtYmVyLAogICAgICAgIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLXdpZHRoYCBpbnN0ZWFkLAogICAgICAgIGJvcmRlckNvbG9yOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLWNvbG9yYCBpbnN0ZWFkLAogICAgICAgIGJvdHRvbU1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgY2VsbFBhZGRpbmc6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgY2VsbFNwYWNpbmc6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgY2hhcjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBhbGlnbj1jaGFyYCwgc2V0cyB0aGUgY2hhcmFjdGVyIHRvIGFsaWduIG9uCiAgICAgICAgY2hhck9mZjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBjaGFyYCwgb2Zmc2V0cyB0aGUgYWxpZ25tZW50CiAgICAgICAgY2xhc3NJZDogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY2xlYXI6IG51bGwsCiAgICAgICAgLy8gYDxicj5gLiBVc2UgQ1NTIGBjbGVhcmAgaW5zdGVhZAogICAgICAgIGNvZGU6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNvZGVCYXNlOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjb2RlVHlwZTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY29sb3I6IG51bGwsCiAgICAgICAgLy8gYDxmb250PmAgYW5kIGA8aHI+YC4gVXNlIENTUyBpbnN0ZWFkCiAgICAgICAgY29tcGFjdDogYm9vbGVhbiwKICAgICAgICAvLyBMaXN0cy4gVXNlIENTUyB0byByZWR1Y2Ugc3BhY2UgYmV0d2VlbiBpdGVtcyBpbnN0ZWFkCiAgICAgICAgZGVjbGFyZTogYm9vbGVhbiwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgZXZlbnQ6IG51bGwsCiAgICAgICAgLy8gYDxzY3JpcHQ+YAogICAgICAgIGZhY2U6IG51bGwsCiAgICAgICAgLy8gYDxmb250PmAuIFVzZSBDU1MgaW5zdGVhZAogICAgICAgIGZyYW1lOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGZyYW1lQm9yZGVyOiBudWxsLAogICAgICAgIC8vIGA8aWZyYW1lPmAuIFVzZSBDU1MgYGJvcmRlcmAgaW5zdGVhZAogICAgICAgIGhTcGFjZTogbnVtYmVyLAogICAgICAgIC8vIGA8aW1nPmAgYW5kIGA8b2JqZWN0PmAKICAgICAgICBsZWZ0TWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBsaW5rOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOmxpbmsge2NvbG9yOiAqfWAgaW5zdGVhZAogICAgICAgIGxvbmdEZXNjOiBudWxsLAogICAgICAgIC8vIGA8ZnJhbWU+YCwgYDxpZnJhbWU+YCwgYW5kIGA8aW1nPmAuIFVzZSBhbiBgPGE+YAogICAgICAgIGxvd1NyYzogbnVsbCwKICAgICAgICAvLyBgPGltZz5gLiBVc2UgYSBgPHBpY3R1cmU+YAogICAgICAgIG1hcmdpbkhlaWdodDogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgbWFyZ2luV2lkdGg6IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIG5vUmVzaXplOiBib29sZWFuLAogICAgICAgIC8vIGA8ZnJhbWU+YAogICAgICAgIG5vSHJlZjogYm9vbGVhbiwKICAgICAgICAvLyBgPGFyZWE+YC4gVXNlIG5vIGhyZWYgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBgbm9ocmVmYAogICAgICAgIG5vU2hhZGU6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxocj5gLiBVc2UgYmFja2dyb3VuZC1jb2xvciBhbmQgaGVpZ2h0IGluc3RlYWQgb2YgYm9yZGVycwogICAgICAgIG5vV3JhcDogYm9vbGVhbiwKICAgICAgICAvLyBgPHRkPmAgYW5kIGA8dGg+YAogICAgICAgIG9iamVjdDogbnVsbCwKICAgICAgICAvLyBgPGFwcGxldD5gCiAgICAgICAgcHJvZmlsZTogbnVsbCwKICAgICAgICAvLyBgPGhlYWQ+YAogICAgICAgIHByb21wdDogbnVsbCwKICAgICAgICAvLyBgPGlzaW5kZXg+YAogICAgICAgIHJldjogbnVsbCwKICAgICAgICAvLyBgPGxpbms+YAogICAgICAgIHJpZ2h0TWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBydWxlczogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBzY2hlbWU6IG51bGwsCiAgICAgICAgLy8gYDxtZXRhPmAKICAgICAgICBzY3JvbGxpbmc6IGJvb2xlYW5pc2gsCiAgICAgICAgLy8gYDxmcmFtZT5gLiBVc2Ugb3ZlcmZsb3cgaW4gdGhlIGNoaWxkIGNvbnRleHQKICAgICAgICBzdGFuZGJ5OiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBzdW1tYXJ5OiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIHRleHQ6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGNvbG9yYCBpbnN0ZWFkCiAgICAgICAgdG9wTWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICB2YWx1ZVR5cGU6IG51bGwsCiAgICAgICAgLy8gYDxwYXJhbT5gCiAgICAgICAgdmVyc2lvbjogbnVsbCwKICAgICAgICAvLyBgPGh0bWw+YC4gVXNlIGEgZG9jdHlwZS4KICAgICAgICB2QWxpZ246IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdmVydGljYWwtYWxpZ25gIGluc3RlYWQKICAgICAgICB2TGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTp2aXNpdGVkIHtjb2xvcn1gIGluc3RlYWQKICAgICAgICB2U3BhY2U6IG51bWJlciwKICAgICAgICAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gCiAgICAgICAgLy8gTm9uLXN0YW5kYXJkIFByb3BlcnRpZXMuCiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k6IG51bGwsCiAgICAgICAgYXV0b0NvcnJlY3Q6IG51bGwsCiAgICAgICAgYXV0b1NhdmU6IG51bGwsCiAgICAgICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6IGJvb2xlYW4sCiAgICAgICAgZGlzYWJsZVJlbW90ZVBsYXliYWNrOiBib29sZWFuLAogICAgICAgIHByZWZpeDogbnVsbCwKICAgICAgICBwcm9wZXJ0eTogbnVsbCwKICAgICAgICByZXN1bHRzOiBudW1iZXIsCiAgICAgICAgc2VjdXJpdHk6IG51bGwsCiAgICAgICAgdW5zZWxlY3RhYmxlOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAiaHRtbCIsCiAgICAgIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvc3ZnLmpzCnZhciBzdmc7CnZhciBpbml0X3N2ZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvc3ZnLmpzIigpIHsKICAgIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF90eXBlczMoKTsKICAgIHN2ZyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgYWNjZW50SGVpZ2h0OiAiYWNjZW50LWhlaWdodCIsCiAgICAgICAgYWxpZ25tZW50QmFzZWxpbmU6ICJhbGlnbm1lbnQtYmFzZWxpbmUiLAogICAgICAgIGFyYWJpY0Zvcm06ICJhcmFiaWMtZm9ybSIsCiAgICAgICAgYmFzZWxpbmVTaGlmdDogImJhc2VsaW5lLXNoaWZ0IiwKICAgICAgICBjYXBIZWlnaHQ6ICJjYXAtaGVpZ2h0IiwKICAgICAgICBjbGFzc05hbWU6ICJjbGFzcyIsCiAgICAgICAgY2xpcFBhdGg6ICJjbGlwLXBhdGgiLAogICAgICAgIGNsaXBSdWxlOiAiY2xpcC1ydWxlIiwKICAgICAgICBjb2xvckludGVycG9sYXRpb246ICJjb2xvci1pbnRlcnBvbGF0aW9uIiwKICAgICAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwKICAgICAgICBjb2xvclByb2ZpbGU6ICJjb2xvci1wcm9maWxlIiwKICAgICAgICBjb2xvclJlbmRlcmluZzogImNvbG9yLXJlbmRlcmluZyIsCiAgICAgICAgY3Jvc3NPcmlnaW46ICJjcm9zc29yaWdpbiIsCiAgICAgICAgZGF0YVR5cGU6ICJkYXRhdHlwZSIsCiAgICAgICAgZG9taW5hbnRCYXNlbGluZTogImRvbWluYW50LWJhc2VsaW5lIiwKICAgICAgICBlbmFibGVCYWNrZ3JvdW5kOiAiZW5hYmxlLWJhY2tncm91bmQiLAogICAgICAgIGZpbGxPcGFjaXR5OiAiZmlsbC1vcGFjaXR5IiwKICAgICAgICBmaWxsUnVsZTogImZpbGwtcnVsZSIsCiAgICAgICAgZmxvb2RDb2xvcjogImZsb29kLWNvbG9yIiwKICAgICAgICBmbG9vZE9wYWNpdHk6ICJmbG9vZC1vcGFjaXR5IiwKICAgICAgICBmb250RmFtaWx5OiAiZm9udC1mYW1pbHkiLAogICAgICAgIGZvbnRTaXplOiAiZm9udC1zaXplIiwKICAgICAgICBmb250U2l6ZUFkanVzdDogImZvbnQtc2l6ZS1hZGp1c3QiLAogICAgICAgIGZvbnRTdHJldGNoOiAiZm9udC1zdHJldGNoIiwKICAgICAgICBmb250U3R5bGU6ICJmb250LXN0eWxlIiwKICAgICAgICBmb250VmFyaWFudDogImZvbnQtdmFyaWFudCIsCiAgICAgICAgZm9udFdlaWdodDogImZvbnQtd2VpZ2h0IiwKICAgICAgICBnbHlwaE5hbWU6ICJnbHlwaC1uYW1lIiwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDogImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiLAogICAgICAgIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwKICAgICAgICBocmVmTGFuZzogImhyZWZsYW5nIiwKICAgICAgICBob3JpekFkdlg6ICJob3Jpei1hZHYteCIsCiAgICAgICAgaG9yaXpPcmlnaW5YOiAiaG9yaXotb3JpZ2luLXgiLAogICAgICAgIGhvcml6T3JpZ2luWTogImhvcml6LW9yaWdpbi15IiwKICAgICAgICBpbWFnZVJlbmRlcmluZzogImltYWdlLXJlbmRlcmluZyIsCiAgICAgICAgbGV0dGVyU3BhY2luZzogImxldHRlci1zcGFjaW5nIiwKICAgICAgICBsaWdodGluZ0NvbG9yOiAibGlnaHRpbmctY29sb3IiLAogICAgICAgIG1hcmtlckVuZDogIm1hcmtlci1lbmQiLAogICAgICAgIG1hcmtlck1pZDogIm1hcmtlci1taWQiLAogICAgICAgIG1hcmtlclN0YXJ0OiAibWFya2VyLXN0YXJ0IiwKICAgICAgICBuYXZEb3duOiAibmF2LWRvd24iLAogICAgICAgIG5hdkRvd25MZWZ0OiAibmF2LWRvd24tbGVmdCIsCiAgICAgICAgbmF2RG93blJpZ2h0OiAibmF2LWRvd24tcmlnaHQiLAogICAgICAgIG5hdkxlZnQ6ICJuYXYtbGVmdCIsCiAgICAgICAgbmF2TmV4dDogIm5hdi1uZXh0IiwKICAgICAgICBuYXZQcmV2OiAibmF2LXByZXYiLAogICAgICAgIG5hdlJpZ2h0OiAibmF2LXJpZ2h0IiwKICAgICAgICBuYXZVcDogIm5hdi11cCIsCiAgICAgICAgbmF2VXBMZWZ0OiAibmF2LXVwLWxlZnQiLAogICAgICAgIG5hdlVwUmlnaHQ6ICJuYXYtdXAtcmlnaHQiLAogICAgICAgIG9uQWJvcnQ6ICJvbmFib3J0IiwKICAgICAgICBvbkFjdGl2YXRlOiAib25hY3RpdmF0ZSIsCiAgICAgICAgb25BZnRlclByaW50OiAib25hZnRlcnByaW50IiwKICAgICAgICBvbkJlZm9yZVByaW50OiAib25iZWZvcmVwcmludCIsCiAgICAgICAgb25CZWdpbjogIm9uYmVnaW4iLAogICAgICAgIG9uQ2FuY2VsOiAib25jYW5jZWwiLAogICAgICAgIG9uQ2FuUGxheTogIm9uY2FucGxheSIsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogIm9uY2FucGxheXRocm91Z2giLAogICAgICAgIG9uQ2hhbmdlOiAib25jaGFuZ2UiLAogICAgICAgIG9uQ2xpY2s6ICJvbmNsaWNrIiwKICAgICAgICBvbkNsb3NlOiAib25jbG9zZSIsCiAgICAgICAgb25Db3B5OiAib25jb3B5IiwKICAgICAgICBvbkN1ZUNoYW5nZTogIm9uY3VlY2hhbmdlIiwKICAgICAgICBvbkN1dDogIm9uY3V0IiwKICAgICAgICBvbkRibENsaWNrOiAib25kYmxjbGljayIsCiAgICAgICAgb25EcmFnOiAib25kcmFnIiwKICAgICAgICBvbkRyYWdFbmQ6ICJvbmRyYWdlbmQiLAogICAgICAgIG9uRHJhZ0VudGVyOiAib25kcmFnZW50ZXIiLAogICAgICAgIG9uRHJhZ0V4aXQ6ICJvbmRyYWdleGl0IiwKICAgICAgICBvbkRyYWdMZWF2ZTogIm9uZHJhZ2xlYXZlIiwKICAgICAgICBvbkRyYWdPdmVyOiAib25kcmFnb3ZlciIsCiAgICAgICAgb25EcmFnU3RhcnQ6ICJvbmRyYWdzdGFydCIsCiAgICAgICAgb25Ecm9wOiAib25kcm9wIiwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiAib25kdXJhdGlvbmNoYW5nZSIsCiAgICAgICAgb25FbXB0aWVkOiAib25lbXB0aWVkIiwKICAgICAgICBvbkVuZDogIm9uZW5kIiwKICAgICAgICBvbkVuZGVkOiAib25lbmRlZCIsCiAgICAgICAgb25FcnJvcjogIm9uZXJyb3IiLAogICAgICAgIG9uRm9jdXM6ICJvbmZvY3VzIiwKICAgICAgICBvbkZvY3VzSW46ICJvbmZvY3VzaW4iLAogICAgICAgIG9uRm9jdXNPdXQ6ICJvbmZvY3Vzb3V0IiwKICAgICAgICBvbkhhc2hDaGFuZ2U6ICJvbmhhc2hjaGFuZ2UiLAogICAgICAgIG9uSW5wdXQ6ICJvbmlucHV0IiwKICAgICAgICBvbkludmFsaWQ6ICJvbmludmFsaWQiLAogICAgICAgIG9uS2V5RG93bjogIm9ua2V5ZG93biIsCiAgICAgICAgb25LZXlQcmVzczogIm9ua2V5cHJlc3MiLAogICAgICAgIG9uS2V5VXA6ICJvbmtleXVwIiwKICAgICAgICBvbkxvYWQ6ICJvbmxvYWQiLAogICAgICAgIG9uTG9hZGVkRGF0YTogIm9ubG9hZGVkZGF0YSIsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogIm9ubG9hZGVkbWV0YWRhdGEiLAogICAgICAgIG9uTG9hZFN0YXJ0OiAib25sb2Fkc3RhcnQiLAogICAgICAgIG9uTWVzc2FnZTogIm9ubWVzc2FnZSIsCiAgICAgICAgb25Nb3VzZURvd246ICJvbm1vdXNlZG93biIsCiAgICAgICAgb25Nb3VzZUVudGVyOiAib25tb3VzZWVudGVyIiwKICAgICAgICBvbk1vdXNlTGVhdmU6ICJvbm1vdXNlbGVhdmUiLAogICAgICAgIG9uTW91c2VNb3ZlOiAib25tb3VzZW1vdmUiLAogICAgICAgIG9uTW91c2VPdXQ6ICJvbm1vdXNlb3V0IiwKICAgICAgICBvbk1vdXNlT3ZlcjogIm9ubW91c2VvdmVyIiwKICAgICAgICBvbk1vdXNlVXA6ICJvbm1vdXNldXAiLAogICAgICAgIG9uTW91c2VXaGVlbDogIm9ubW91c2V3aGVlbCIsCiAgICAgICAgb25PZmZsaW5lOiAib25vZmZsaW5lIiwKICAgICAgICBvbk9ubGluZTogIm9ub25saW5lIiwKICAgICAgICBvblBhZ2VIaWRlOiAib25wYWdlaGlkZSIsCiAgICAgICAgb25QYWdlU2hvdzogIm9ucGFnZXNob3ciLAogICAgICAgIG9uUGFzdGU6ICJvbnBhc3RlIiwKICAgICAgICBvblBhdXNlOiAib25wYXVzZSIsCiAgICAgICAgb25QbGF5OiAib25wbGF5IiwKICAgICAgICBvblBsYXlpbmc6ICJvbnBsYXlpbmciLAogICAgICAgIG9uUG9wU3RhdGU6ICJvbnBvcHN0YXRlIiwKICAgICAgICBvblByb2dyZXNzOiAib25wcm9ncmVzcyIsCiAgICAgICAgb25SYXRlQ2hhbmdlOiAib25yYXRlY2hhbmdlIiwKICAgICAgICBvblJlcGVhdDogIm9ucmVwZWF0IiwKICAgICAgICBvblJlc2V0OiAib25yZXNldCIsCiAgICAgICAgb25SZXNpemU6ICJvbnJlc2l6ZSIsCiAgICAgICAgb25TY3JvbGw6ICJvbnNjcm9sbCIsCiAgICAgICAgb25TZWVrZWQ6ICJvbnNlZWtlZCIsCiAgICAgICAgb25TZWVraW5nOiAib25zZWVraW5nIiwKICAgICAgICBvblNlbGVjdDogIm9uc2VsZWN0IiwKICAgICAgICBvblNob3c6ICJvbnNob3ciLAogICAgICAgIG9uU3RhbGxlZDogIm9uc3RhbGxlZCIsCiAgICAgICAgb25TdG9yYWdlOiAib25zdG9yYWdlIiwKICAgICAgICBvblN1Ym1pdDogIm9uc3VibWl0IiwKICAgICAgICBvblN1c3BlbmQ6ICJvbnN1c3BlbmQiLAogICAgICAgIG9uVGltZVVwZGF0ZTogIm9udGltZXVwZGF0ZSIsCiAgICAgICAgb25Ub2dnbGU6ICJvbnRvZ2dsZSIsCiAgICAgICAgb25VbmxvYWQ6ICJvbnVubG9hZCIsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6ICJvbnZvbHVtZWNoYW5nZSIsCiAgICAgICAgb25XYWl0aW5nOiAib253YWl0aW5nIiwKICAgICAgICBvblpvb206ICJvbnpvb20iLAogICAgICAgIG92ZXJsaW5lUG9zaXRpb246ICJvdmVybGluZS1wb3NpdGlvbiIsCiAgICAgICAgb3ZlcmxpbmVUaGlja25lc3M6ICJvdmVybGluZS10aGlja25lc3MiLAogICAgICAgIHBhaW50T3JkZXI6ICJwYWludC1vcmRlciIsCiAgICAgICAgcGFub3NlMTogInBhbm9zZS0xIiwKICAgICAgICBwb2ludGVyRXZlbnRzOiAicG9pbnRlci1ldmVudHMiLAogICAgICAgIHJlZmVycmVyUG9saWN5OiAicmVmZXJyZXJwb2xpY3kiLAogICAgICAgIHJlbmRlcmluZ0ludGVudDogInJlbmRlcmluZy1pbnRlbnQiLAogICAgICAgIHNoYXBlUmVuZGVyaW5nOiAic2hhcGUtcmVuZGVyaW5nIiwKICAgICAgICBzdG9wQ29sb3I6ICJzdG9wLWNvbG9yIiwKICAgICAgICBzdG9wT3BhY2l0eTogInN0b3Atb3BhY2l0eSIsCiAgICAgICAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiAic3RyaWtldGhyb3VnaC1wb3NpdGlvbiIsCiAgICAgICAgc3RyaWtldGhyb3VnaFRoaWNrbmVzczogInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIiwKICAgICAgICBzdHJva2VEYXNoQXJyYXk6ICJzdHJva2UtZGFzaGFycmF5IiwKICAgICAgICBzdHJva2VEYXNoT2Zmc2V0OiAic3Ryb2tlLWRhc2hvZmZzZXQiLAogICAgICAgIHN0cm9rZUxpbmVDYXA6ICJzdHJva2UtbGluZWNhcCIsCiAgICAgICAgc3Ryb2tlTGluZUpvaW46ICJzdHJva2UtbGluZWpvaW4iLAogICAgICAgIHN0cm9rZU1pdGVyTGltaXQ6ICJzdHJva2UtbWl0ZXJsaW1pdCIsCiAgICAgICAgc3Ryb2tlT3BhY2l0eTogInN0cm9rZS1vcGFjaXR5IiwKICAgICAgICBzdHJva2VXaWR0aDogInN0cm9rZS13aWR0aCIsCiAgICAgICAgdGFiSW5kZXg6ICJ0YWJpbmRleCIsCiAgICAgICAgdGV4dEFuY2hvcjogInRleHQtYW5jaG9yIiwKICAgICAgICB0ZXh0RGVjb3JhdGlvbjogInRleHQtZGVjb3JhdGlvbiIsCiAgICAgICAgdGV4dFJlbmRlcmluZzogInRleHQtcmVuZGVyaW5nIiwKICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICJ0cmFuc2Zvcm0tb3JpZ2luIiwKICAgICAgICB0eXBlT2Y6ICJ0eXBlb2YiLAogICAgICAgIHVuZGVybGluZVBvc2l0aW9uOiAidW5kZXJsaW5lLXBvc2l0aW9uIiwKICAgICAgICB1bmRlcmxpbmVUaGlja25lc3M6ICJ1bmRlcmxpbmUtdGhpY2tuZXNzIiwKICAgICAgICB1bmljb2RlQmlkaTogInVuaWNvZGUtYmlkaSIsCiAgICAgICAgdW5pY29kZVJhbmdlOiAidW5pY29kZS1yYW5nZSIsCiAgICAgICAgdW5pdHNQZXJFbTogInVuaXRzLXBlci1lbSIsCiAgICAgICAgdkFscGhhYmV0aWM6ICJ2LWFscGhhYmV0aWMiLAogICAgICAgIHZIYW5naW5nOiAidi1oYW5naW5nIiwKICAgICAgICB2SWRlb2dyYXBoaWM6ICJ2LWlkZW9ncmFwaGljIiwKICAgICAgICB2TWF0aGVtYXRpY2FsOiAidi1tYXRoZW1hdGljYWwiLAogICAgICAgIHZlY3RvckVmZmVjdDogInZlY3Rvci1lZmZlY3QiLAogICAgICAgIHZlcnRBZHZZOiAidmVydC1hZHYteSIsCiAgICAgICAgdmVydE9yaWdpblg6ICJ2ZXJ0LW9yaWdpbi14IiwKICAgICAgICB2ZXJ0T3JpZ2luWTogInZlcnQtb3JpZ2luLXkiLAogICAgICAgIHdvcmRTcGFjaW5nOiAid29yZC1zcGFjaW5nIiwKICAgICAgICB3cml0aW5nTW9kZTogIndyaXRpbmctbW9kZSIsCiAgICAgICAgeEhlaWdodDogIngtaGVpZ2h0IiwKICAgICAgICAvLyBUaGVzZSB3ZXJlIGNhbWVsY2FzZWQgaW4gVGlueS4gTm93IGxvd2VyY2FzZWQgaW4gU1ZHIDIKICAgICAgICBwbGF5YmFja09yZGVyOiAicGxheWJhY2tvcmRlciIsCiAgICAgICAgdGltZWxpbmVCZWdpbjogInRpbWVsaW5lYmVnaW4iCiAgICAgIH0sCiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICBhYm91dDogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFjY2VudEhlaWdodDogbnVtYmVyLAogICAgICAgIGFjY3VtdWxhdGU6IG51bGwsCiAgICAgICAgYWRkaXRpdmU6IG51bGwsCiAgICAgICAgYWxpZ25tZW50QmFzZWxpbmU6IG51bGwsCiAgICAgICAgYWxwaGFiZXRpYzogbnVtYmVyLAogICAgICAgIGFtcGxpdHVkZTogbnVtYmVyLAogICAgICAgIGFyYWJpY0Zvcm06IG51bGwsCiAgICAgICAgYXNjZW50OiBudW1iZXIsCiAgICAgICAgYXR0cmlidXRlTmFtZTogbnVsbCwKICAgICAgICBhdHRyaWJ1dGVUeXBlOiBudWxsLAogICAgICAgIGF6aW11dGg6IG51bWJlciwKICAgICAgICBiYW5kd2lkdGg6IG51bGwsCiAgICAgICAgYmFzZWxpbmVTaGlmdDogbnVsbCwKICAgICAgICBiYXNlRnJlcXVlbmN5OiBudWxsLAogICAgICAgIGJhc2VQcm9maWxlOiBudWxsLAogICAgICAgIGJib3g6IG51bGwsCiAgICAgICAgYmVnaW46IG51bGwsCiAgICAgICAgYmlhczogbnVtYmVyLAogICAgICAgIGJ5OiBudWxsLAogICAgICAgIGNhbGNNb2RlOiBudWxsLAogICAgICAgIGNhcEhlaWdodDogbnVtYmVyLAogICAgICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY2xpcDogbnVsbCwKICAgICAgICBjbGlwUGF0aDogbnVsbCwKICAgICAgICBjbGlwUGF0aFVuaXRzOiBudWxsLAogICAgICAgIGNsaXBSdWxlOiBudWxsLAogICAgICAgIGNvbG9yOiBudWxsLAogICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbjogbnVsbCwKICAgICAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBudWxsLAogICAgICAgIGNvbG9yUHJvZmlsZTogbnVsbCwKICAgICAgICBjb2xvclJlbmRlcmluZzogbnVsbCwKICAgICAgICBjb250ZW50OiBudWxsLAogICAgICAgIGNvbnRlbnRTY3JpcHRUeXBlOiBudWxsLAogICAgICAgIGNvbnRlbnRTdHlsZVR5cGU6IG51bGwsCiAgICAgICAgY3Jvc3NPcmlnaW46IG51bGwsCiAgICAgICAgY3Vyc29yOiBudWxsLAogICAgICAgIGN4OiBudWxsLAogICAgICAgIGN5OiBudWxsLAogICAgICAgIGQ6IG51bGwsCiAgICAgICAgZGF0YVR5cGU6IG51bGwsCiAgICAgICAgZGVmYXVsdEFjdGlvbjogbnVsbCwKICAgICAgICBkZXNjZW50OiBudW1iZXIsCiAgICAgICAgZGlmZnVzZUNvbnN0YW50OiBudW1iZXIsCiAgICAgICAgZGlyZWN0aW9uOiBudWxsLAogICAgICAgIGRpc3BsYXk6IG51bGwsCiAgICAgICAgZHVyOiBudWxsLAogICAgICAgIGRpdmlzb3I6IG51bWJlciwKICAgICAgICBkb21pbmFudEJhc2VsaW5lOiBudWxsLAogICAgICAgIGRvd25sb2FkOiBib29sZWFuLAogICAgICAgIGR4OiBudWxsLAogICAgICAgIGR5OiBudWxsLAogICAgICAgIGVkZ2VNb2RlOiBudWxsLAogICAgICAgIGVkaXRhYmxlOiBudWxsLAogICAgICAgIGVsZXZhdGlvbjogbnVtYmVyLAogICAgICAgIGVuYWJsZUJhY2tncm91bmQ6IG51bGwsCiAgICAgICAgZW5kOiBudWxsLAogICAgICAgIGV2ZW50OiBudWxsLAogICAgICAgIGV4cG9uZW50OiBudW1iZXIsCiAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDogbnVsbCwKICAgICAgICBmaWxsOiBudWxsLAogICAgICAgIGZpbGxPcGFjaXR5OiBudW1iZXIsCiAgICAgICAgZmlsbFJ1bGU6IG51bGwsCiAgICAgICAgZmlsdGVyOiBudWxsLAogICAgICAgIGZpbHRlclJlczogbnVsbCwKICAgICAgICBmaWx0ZXJVbml0czogbnVsbCwKICAgICAgICBmbG9vZENvbG9yOiBudWxsLAogICAgICAgIGZsb29kT3BhY2l0eTogbnVsbCwKICAgICAgICBmb2N1c2FibGU6IG51bGwsCiAgICAgICAgZm9jdXNIaWdobGlnaHQ6IG51bGwsCiAgICAgICAgZm9udEZhbWlseTogbnVsbCwKICAgICAgICBmb250U2l6ZTogbnVsbCwKICAgICAgICBmb250U2l6ZUFkanVzdDogbnVsbCwKICAgICAgICBmb250U3RyZXRjaDogbnVsbCwKICAgICAgICBmb250U3R5bGU6IG51bGwsCiAgICAgICAgZm9udFZhcmlhbnQ6IG51bGwsCiAgICAgICAgZm9udFdlaWdodDogbnVsbCwKICAgICAgICBmb3JtYXQ6IG51bGwsCiAgICAgICAgZnI6IG51bGwsCiAgICAgICAgZnJvbTogbnVsbCwKICAgICAgICBmeDogbnVsbCwKICAgICAgICBmeTogbnVsbCwKICAgICAgICBnMTogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgZzI6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGdseXBoTmFtZTogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IG51bGwsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiBudWxsLAogICAgICAgIGdseXBoUmVmOiBudWxsLAogICAgICAgIGdyYWRpZW50VHJhbnNmb3JtOiBudWxsLAogICAgICAgIGdyYWRpZW50VW5pdHM6IG51bGwsCiAgICAgICAgaGFuZGxlcjogbnVsbCwKICAgICAgICBoYW5naW5nOiBudW1iZXIsCiAgICAgICAgaGF0Y2hDb250ZW50VW5pdHM6IG51bGwsCiAgICAgICAgaGF0Y2hVbml0czogbnVsbCwKICAgICAgICBoZWlnaHQ6IG51bGwsCiAgICAgICAgaHJlZjogbnVsbCwKICAgICAgICBocmVmTGFuZzogbnVsbCwKICAgICAgICBob3JpekFkdlg6IG51bWJlciwKICAgICAgICBob3Jpek9yaWdpblg6IG51bWJlciwKICAgICAgICBob3Jpek9yaWdpblk6IG51bWJlciwKICAgICAgICBpZDogbnVsbCwKICAgICAgICBpZGVvZ3JhcGhpYzogbnVtYmVyLAogICAgICAgIGltYWdlUmVuZGVyaW5nOiBudWxsLAogICAgICAgIGluaXRpYWxWaXNpYmlsaXR5OiBudWxsLAogICAgICAgIGluOiBudWxsLAogICAgICAgIGluMjogbnVsbCwKICAgICAgICBpbnRlcmNlcHQ6IG51bWJlciwKICAgICAgICBrOiBudW1iZXIsCiAgICAgICAgazE6IG51bWJlciwKICAgICAgICBrMjogbnVtYmVyLAogICAgICAgIGszOiBudW1iZXIsCiAgICAgICAgazQ6IG51bWJlciwKICAgICAgICBrZXJuZWxNYXRyaXg6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBrZXJuZWxVbml0TGVuZ3RoOiBudWxsLAogICAgICAgIGtleVBvaW50czogbnVsbCwKICAgICAgICAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRAogICAgICAgIGtleVNwbGluZXM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXlUaW1lczogbnVsbCwKICAgICAgICAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRAogICAgICAgIGtlcm5pbmc6IG51bGwsCiAgICAgICAgbGFuZzogbnVsbCwKICAgICAgICBsZW5ndGhBZGp1c3Q6IG51bGwsCiAgICAgICAgbGV0dGVyU3BhY2luZzogbnVsbCwKICAgICAgICBsaWdodGluZ0NvbG9yOiBudWxsLAogICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlOiBudW1iZXIsCiAgICAgICAgbG9jYWw6IG51bGwsCiAgICAgICAgbWFya2VyRW5kOiBudWxsLAogICAgICAgIG1hcmtlck1pZDogbnVsbCwKICAgICAgICBtYXJrZXJTdGFydDogbnVsbCwKICAgICAgICBtYXJrZXJIZWlnaHQ6IG51bGwsCiAgICAgICAgbWFya2VyVW5pdHM6IG51bGwsCiAgICAgICAgbWFya2VyV2lkdGg6IG51bGwsCiAgICAgICAgbWFzazogbnVsbCwKICAgICAgICBtYXNrQ29udGVudFVuaXRzOiBudWxsLAogICAgICAgIG1hc2tVbml0czogbnVsbCwKICAgICAgICBtYXRoZW1hdGljYWw6IG51bGwsCiAgICAgICAgbWF4OiBudWxsLAogICAgICAgIG1lZGlhOiBudWxsLAogICAgICAgIG1lZGlhQ2hhcmFjdGVyRW5jb2Rpbmc6IG51bGwsCiAgICAgICAgbWVkaWFDb250ZW50RW5jb2RpbmdzOiBudWxsLAogICAgICAgIG1lZGlhU2l6ZTogbnVtYmVyLAogICAgICAgIG1lZGlhVGltZTogbnVsbCwKICAgICAgICBtZXRob2Q6IG51bGwsCiAgICAgICAgbWluOiBudWxsLAogICAgICAgIG1vZGU6IG51bGwsCiAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICBuYXZEb3duOiBudWxsLAogICAgICAgIG5hdkRvd25MZWZ0OiBudWxsLAogICAgICAgIG5hdkRvd25SaWdodDogbnVsbCwKICAgICAgICBuYXZMZWZ0OiBudWxsLAogICAgICAgIG5hdk5leHQ6IG51bGwsCiAgICAgICAgbmF2UHJldjogbnVsbCwKICAgICAgICBuYXZSaWdodDogbnVsbCwKICAgICAgICBuYXZVcDogbnVsbCwKICAgICAgICBuYXZVcExlZnQ6IG51bGwsCiAgICAgICAgbmF2VXBSaWdodDogbnVsbCwKICAgICAgICBudW1PY3RhdmVzOiBudWxsLAogICAgICAgIG9ic2VydmVyOiBudWxsLAogICAgICAgIG9mZnNldDogbnVsbCwKICAgICAgICBvbkFib3J0OiBudWxsLAogICAgICAgIG9uQWN0aXZhdGU6IG51bGwsCiAgICAgICAgb25BZnRlclByaW50OiBudWxsLAogICAgICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsCiAgICAgICAgb25CZWdpbjogbnVsbCwKICAgICAgICBvbkNhbmNlbDogbnVsbCwKICAgICAgICBvbkNhblBsYXk6IG51bGwsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCwKICAgICAgICBvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkNsaWNrOiBudWxsLAogICAgICAgIG9uQ2xvc2U6IG51bGwsCiAgICAgICAgb25Db3B5OiBudWxsLAogICAgICAgIG9uQ3VlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uQ3V0OiBudWxsLAogICAgICAgIG9uRGJsQ2xpY2s6IG51bGwsCiAgICAgICAgb25EcmFnOiBudWxsLAogICAgICAgIG9uRHJhZ0VuZDogbnVsbCwKICAgICAgICBvbkRyYWdFbnRlcjogbnVsbCwKICAgICAgICBvbkRyYWdFeGl0OiBudWxsLAogICAgICAgIG9uRHJhZ0xlYXZlOiBudWxsLAogICAgICAgIG9uRHJhZ092ZXI6IG51bGwsCiAgICAgICAgb25EcmFnU3RhcnQ6IG51bGwsCiAgICAgICAgb25Ecm9wOiBudWxsLAogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25FbXB0aWVkOiBudWxsLAogICAgICAgIG9uRW5kOiBudWxsLAogICAgICAgIG9uRW5kZWQ6IG51bGwsCiAgICAgICAgb25FcnJvcjogbnVsbCwKICAgICAgICBvbkZvY3VzOiBudWxsLAogICAgICAgIG9uRm9jdXNJbjogbnVsbCwKICAgICAgICBvbkZvY3VzT3V0OiBudWxsLAogICAgICAgIG9uSGFzaENoYW5nZTogbnVsbCwKICAgICAgICBvbklucHV0OiBudWxsLAogICAgICAgIG9uSW52YWxpZDogbnVsbCwKICAgICAgICBvbktleURvd246IG51bGwsCiAgICAgICAgb25LZXlQcmVzczogbnVsbCwKICAgICAgICBvbktleVVwOiBudWxsLAogICAgICAgIG9uTG9hZDogbnVsbCwKICAgICAgICBvbkxvYWRlZERhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRTdGFydDogbnVsbCwKICAgICAgICBvbk1lc3NhZ2U6IG51bGwsCiAgICAgICAgb25Nb3VzZURvd246IG51bGwsCiAgICAgICAgb25Nb3VzZUVudGVyOiBudWxsLAogICAgICAgIG9uTW91c2VMZWF2ZTogbnVsbCwKICAgICAgICBvbk1vdXNlTW92ZTogbnVsbCwKICAgICAgICBvbk1vdXNlT3V0OiBudWxsLAogICAgICAgIG9uTW91c2VPdmVyOiBudWxsLAogICAgICAgIG9uTW91c2VVcDogbnVsbCwKICAgICAgICBvbk1vdXNlV2hlZWw6IG51bGwsCiAgICAgICAgb25PZmZsaW5lOiBudWxsLAogICAgICAgIG9uT25saW5lOiBudWxsLAogICAgICAgIG9uUGFnZUhpZGU6IG51bGwsCiAgICAgICAgb25QYWdlU2hvdzogbnVsbCwKICAgICAgICBvblBhc3RlOiBudWxsLAogICAgICAgIG9uUGF1c2U6IG51bGwsCiAgICAgICAgb25QbGF5OiBudWxsLAogICAgICAgIG9uUGxheWluZzogbnVsbCwKICAgICAgICBvblBvcFN0YXRlOiBudWxsLAogICAgICAgIG9uUHJvZ3Jlc3M6IG51bGwsCiAgICAgICAgb25SYXRlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uUmVwZWF0OiBudWxsLAogICAgICAgIG9uUmVzZXQ6IG51bGwsCiAgICAgICAgb25SZXNpemU6IG51bGwsCiAgICAgICAgb25TY3JvbGw6IG51bGwsCiAgICAgICAgb25TZWVrZWQ6IG51bGwsCiAgICAgICAgb25TZWVraW5nOiBudWxsLAogICAgICAgIG9uU2VsZWN0OiBudWxsLAogICAgICAgIG9uU2hvdzogbnVsbCwKICAgICAgICBvblN0YWxsZWQ6IG51bGwsCiAgICAgICAgb25TdG9yYWdlOiBudWxsLAogICAgICAgIG9uU3VibWl0OiBudWxsLAogICAgICAgIG9uU3VzcGVuZDogbnVsbCwKICAgICAgICBvblRpbWVVcGRhdGU6IG51bGwsCiAgICAgICAgb25Ub2dnbGU6IG51bGwsCiAgICAgICAgb25VbmxvYWQ6IG51bGwsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25XYWl0aW5nOiBudWxsLAogICAgICAgIG9uWm9vbTogbnVsbCwKICAgICAgICBvcGFjaXR5OiBudWxsLAogICAgICAgIG9wZXJhdG9yOiBudWxsLAogICAgICAgIG9yZGVyOiBudWxsLAogICAgICAgIG9yaWVudDogbnVsbCwKICAgICAgICBvcmllbnRhdGlvbjogbnVsbCwKICAgICAgICBvcmlnaW46IG51bGwsCiAgICAgICAgb3ZlcmZsb3c6IG51bGwsCiAgICAgICAgb3ZlcmxheTogbnVsbCwKICAgICAgICBvdmVybGluZVBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgb3ZlcmxpbmVUaGlja25lc3M6IG51bWJlciwKICAgICAgICBwYWludE9yZGVyOiBudWxsLAogICAgICAgIHBhbm9zZTE6IG51bGwsCiAgICAgICAgcGF0aDogbnVsbCwKICAgICAgICBwYXRoTGVuZ3RoOiBudW1iZXIsCiAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0czogbnVsbCwKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtOiBudWxsLAogICAgICAgIHBhdHRlcm5Vbml0czogbnVsbCwKICAgICAgICBwaGFzZTogbnVsbCwKICAgICAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBwaXRjaDogbnVsbCwKICAgICAgICBwbGF5YmFja09yZGVyOiBudWxsLAogICAgICAgIHBvaW50ZXJFdmVudHM6IG51bGwsCiAgICAgICAgcG9pbnRzOiBudWxsLAogICAgICAgIHBvaW50c0F0WDogbnVtYmVyLAogICAgICAgIHBvaW50c0F0WTogbnVtYmVyLAogICAgICAgIHBvaW50c0F0WjogbnVtYmVyLAogICAgICAgIHByZXNlcnZlQWxwaGE6IG51bGwsCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogbnVsbCwKICAgICAgICBwcmltaXRpdmVVbml0czogbnVsbCwKICAgICAgICBwcm9wYWdhdGU6IG51bGwsCiAgICAgICAgcHJvcGVydHk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByOiBudWxsLAogICAgICAgIHJhZGl1czogbnVsbCwKICAgICAgICByZWZlcnJlclBvbGljeTogbnVsbCwKICAgICAgICByZWZYOiBudWxsLAogICAgICAgIHJlZlk6IG51bGwsCiAgICAgICAgcmVsOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmV2OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVuZGVyaW5nSW50ZW50OiBudWxsLAogICAgICAgIHJlcGVhdENvdW50OiBudWxsLAogICAgICAgIHJlcGVhdER1cjogbnVsbCwKICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZEZlYXR1cmVzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWRGb250czogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkRm9ybWF0czogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlc291cmNlOiBudWxsLAogICAgICAgIHJlc3RhcnQ6IG51bGwsCiAgICAgICAgcmVzdWx0OiBudWxsLAogICAgICAgIHJvdGF0ZTogbnVsbCwKICAgICAgICByeDogbnVsbCwKICAgICAgICByeTogbnVsbCwKICAgICAgICBzY2FsZTogbnVsbCwKICAgICAgICBzZWVkOiBudWxsLAogICAgICAgIHNoYXBlUmVuZGVyaW5nOiBudWxsLAogICAgICAgIHNpZGU6IG51bGwsCiAgICAgICAgc2xvcGU6IG51bGwsCiAgICAgICAgc25hcHNob3RUaW1lOiBudWxsLAogICAgICAgIHNwZWN1bGFyQ29uc3RhbnQ6IG51bWJlciwKICAgICAgICBzcGVjdWxhckV4cG9uZW50OiBudW1iZXIsCiAgICAgICAgc3ByZWFkTWV0aG9kOiBudWxsLAogICAgICAgIHNwYWNpbmc6IG51bGwsCiAgICAgICAgc3RhcnRPZmZzZXQ6IG51bGwsCiAgICAgICAgc3RkRGV2aWF0aW9uOiBudWxsLAogICAgICAgIHN0ZW1oOiBudWxsLAogICAgICAgIHN0ZW12OiBudWxsLAogICAgICAgIHN0aXRjaFRpbGVzOiBudWxsLAogICAgICAgIHN0b3BDb2xvcjogbnVsbCwKICAgICAgICBzdG9wT3BhY2l0eTogbnVsbCwKICAgICAgICBzdHJpa2V0aHJvdWdoUG9zaXRpb246IG51bWJlciwKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgc3RyaW5nOiBudWxsLAogICAgICAgIHN0cm9rZTogbnVsbCwKICAgICAgICBzdHJva2VEYXNoQXJyYXk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBzdHJva2VEYXNoT2Zmc2V0OiBudWxsLAogICAgICAgIHN0cm9rZUxpbmVDYXA6IG51bGwsCiAgICAgICAgc3Ryb2tlTGluZUpvaW46IG51bGwsCiAgICAgICAgc3Ryb2tlTWl0ZXJMaW1pdDogbnVtYmVyLAogICAgICAgIHN0cm9rZU9wYWNpdHk6IG51bWJlciwKICAgICAgICBzdHJva2VXaWR0aDogbnVsbCwKICAgICAgICBzdHlsZTogbnVsbCwKICAgICAgICBzdXJmYWNlU2NhbGU6IG51bWJlciwKICAgICAgICBzeW5jQmVoYXZpb3I6IG51bGwsCiAgICAgICAgc3luY0JlaGF2aW9yRGVmYXVsdDogbnVsbCwKICAgICAgICBzeW5jTWFzdGVyOiBudWxsLAogICAgICAgIHN5bmNUb2xlcmFuY2U6IG51bGwsCiAgICAgICAgc3luY1RvbGVyYW5jZURlZmF1bHQ6IG51bGwsCiAgICAgICAgc3lzdGVtTGFuZ3VhZ2U6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICB0YWJJbmRleDogbnVtYmVyLAogICAgICAgIHRhYmxlVmFsdWVzOiBudWxsLAogICAgICAgIHRhcmdldDogbnVsbCwKICAgICAgICB0YXJnZXRYOiBudW1iZXIsCiAgICAgICAgdGFyZ2V0WTogbnVtYmVyLAogICAgICAgIHRleHRBbmNob3I6IG51bGwsCiAgICAgICAgdGV4dERlY29yYXRpb246IG51bGwsCiAgICAgICAgdGV4dFJlbmRlcmluZzogbnVsbCwKICAgICAgICB0ZXh0TGVuZ3RoOiBudWxsLAogICAgICAgIHRpbWVsaW5lQmVnaW46IG51bGwsCiAgICAgICAgdGl0bGU6IG51bGwsCiAgICAgICAgdHJhbnNmb3JtQmVoYXZpb3I6IG51bGwsCiAgICAgICAgdHlwZTogbnVsbCwKICAgICAgICB0eXBlT2Y6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICB0bzogbnVsbCwKICAgICAgICB0cmFuc2Zvcm06IG51bGwsCiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBudWxsLAogICAgICAgIHUxOiBudWxsLAogICAgICAgIHUyOiBudWxsLAogICAgICAgIHVuZGVybGluZVBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgdW5pY29kZTogbnVsbCwKICAgICAgICB1bmljb2RlQmlkaTogbnVsbCwKICAgICAgICB1bmljb2RlUmFuZ2U6IG51bGwsCiAgICAgICAgdW5pdHNQZXJFbTogbnVtYmVyLAogICAgICAgIHZhbHVlczogbnVsbCwKICAgICAgICB2QWxwaGFiZXRpYzogbnVtYmVyLAogICAgICAgIHZNYXRoZW1hdGljYWw6IG51bWJlciwKICAgICAgICB2ZWN0b3JFZmZlY3Q6IG51bGwsCiAgICAgICAgdkhhbmdpbmc6IG51bWJlciwKICAgICAgICB2SWRlb2dyYXBoaWM6IG51bWJlciwKICAgICAgICB2ZXJzaW9uOiBudWxsLAogICAgICAgIHZlcnRBZHZZOiBudW1iZXIsCiAgICAgICAgdmVydE9yaWdpblg6IG51bWJlciwKICAgICAgICB2ZXJ0T3JpZ2luWTogbnVtYmVyLAogICAgICAgIHZpZXdCb3g6IG51bGwsCiAgICAgICAgdmlld1RhcmdldDogbnVsbCwKICAgICAgICB2aXNpYmlsaXR5OiBudWxsLAogICAgICAgIHdpZHRoOiBudWxsLAogICAgICAgIHdpZHRoczogbnVsbCwKICAgICAgICB3b3JkU3BhY2luZzogbnVsbCwKICAgICAgICB3cml0aW5nTW9kZTogbnVsbCwKICAgICAgICB4OiBudWxsLAogICAgICAgIHgxOiBudWxsLAogICAgICAgIHgyOiBudWxsLAogICAgICAgIHhDaGFubmVsU2VsZWN0b3I6IG51bGwsCiAgICAgICAgeEhlaWdodDogbnVtYmVyLAogICAgICAgIHk6IG51bGwsCiAgICAgICAgeTE6IG51bGwsCiAgICAgICAgeTI6IG51bGwsCiAgICAgICAgeUNoYW5uZWxTZWxlY3RvcjogbnVsbCwKICAgICAgICB6OiBudWxsLAogICAgICAgIHpvb21BbmRQYW46IG51bGwKICAgICAgfSwKICAgICAgc3BhY2U6ICJzdmciLAogICAgICB0cmFuc2Zvcm06IGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bGluay5qcwp2YXIgeGxpbms7CnZhciBpbml0X3hsaW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bGluay5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgeGxpbmsgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogewogICAgICAgIHhMaW5rQWN0dWF0ZTogbnVsbCwKICAgICAgICB4TGlua0FyY1JvbGU6IG51bGwsCiAgICAgICAgeExpbmtIcmVmOiBudWxsLAogICAgICAgIHhMaW5rUm9sZTogbnVsbCwKICAgICAgICB4TGlua1Nob3c6IG51bGwsCiAgICAgICAgeExpbmtUaXRsZTogbnVsbCwKICAgICAgICB4TGlua1R5cGU6IG51bGwKICAgICAgfSwKICAgICAgc3BhY2U6ICJ4bGluayIsCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMSkgewogICAgICAgIHJldHVybiAieGxpbms6IiArIHByb3BlcnR5MTEuc2xpY2UoNSkudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3htbG5zLmpzCnZhciB4bWxuczsKdmFyIGluaXRfeG1sbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3htbG5zLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICB4bWxucyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7IHhtbG5zeGxpbms6ICJ4bWxuczp4bGluayIgfSwKICAgICAgcHJvcGVydGllczogeyB4bWxuc1hMaW5rOiBudWxsLCB4bWxuczogbnVsbCB9LAogICAgICBzcGFjZTogInhtbG5zIiwKICAgICAgdHJhbnNmb3JtOiBjYXNlSW5zZW5zaXRpdmVUcmFuc2Zvcm0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWwuanMKdmFyIHhtbDsKdmFyIGluaXRfeG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWwuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIHhtbCA9IGNyZWF0ZTYoewogICAgICBwcm9wZXJ0aWVzOiB7IHhtbEJhc2U6IG51bGwsIHhtbExhbmc6IG51bGwsIHhtbFNwYWNlOiBudWxsIH0sCiAgICAgIHNwYWNlOiAieG1sIiwKICAgICAgdHJhbnNmb3JtKF80LCBwcm9wZXJ0eTExKSB7CiAgICAgICAgcmV0dXJuICJ4bWw6IiArIHByb3BlcnR5MTEuc2xpY2UoMykudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMKdmFyIGluaXRfaGFzdF90b19yZWFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaGFzdC10by1yZWFjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2ZpbmQuanMKZnVuY3Rpb24gZmluZDIoc2NoZW1hLCB2YWx1ZTIpIHsKICBjb25zdCBub3JtYWwgPSBub3JtYWxpemUzKHZhbHVlMik7CiAgbGV0IHByb3BlcnR5MTEgPSB2YWx1ZTI7CiAgbGV0IFR5cGUyID0gSW5mbzsKICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHsKICAgIHJldHVybiBzY2hlbWEucHJvcGVydHlbc2NoZW1hLm5vcm1hbFtub3JtYWxdXTsKICB9CiAgaWYgKG5vcm1hbC5sZW5ndGggPiA0ICYmIG5vcm1hbC5zbGljZSgwLCA0KSA9PT0gImRhdGEiICYmIHZhbGlkLnRlc3QodmFsdWUyKSkgewogICAgaWYgKHZhbHVlMi5jaGFyQXQoNCkgPT09ICItIikgewogICAgICBjb25zdCByZXN0ID0gdmFsdWUyLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKTsKICAgICAgcHJvcGVydHkxMSA9ICJkYXRhIiArIHJlc3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN0LnNsaWNlKDEpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdCA9IHZhbHVlMi5zbGljZSg0KTsKICAgICAgaWYgKCFkYXNoLnRlc3QocmVzdCkpIHsKICAgICAgICBsZXQgZGFzaGVzID0gcmVzdC5yZXBsYWNlKGNhcCwga2ViYWIpOwogICAgICAgIGlmIChkYXNoZXMuY2hhckF0KDApICE9PSAiLSIpIHsKICAgICAgICAgIGRhc2hlcyA9ICItIiArIGRhc2hlczsKICAgICAgICB9CiAgICAgICAgdmFsdWUyID0gImRhdGEiICsgZGFzaGVzOwogICAgICB9CiAgICB9CiAgICBUeXBlMiA9IERlZmluZWRJbmZvOwogIH0KICByZXR1cm4gbmV3IFR5cGUyKHByb3BlcnR5MTEsIHZhbHVlMik7Cn0KZnVuY3Rpb24ga2ViYWIoJDApIHsKICByZXR1cm4gIi0iICsgJDAudG9Mb3dlckNhc2UoKTsKfQpmdW5jdGlvbiBjYW1lbGNhc2UoJDApIHsKICByZXR1cm4gJDAuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7Cn0KdmFyIGNhcCwgZGFzaCwgdmFsaWQ7CnZhciBpbml0X2ZpbmQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9maW5kLmpzIigpIHsKICAgIGluaXRfZGVmaW5lZF9pbmZvKCk7CiAgICBpbml0X2luZm8oKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBjYXAgPSAvW0EtWl0vZzsKICAgIGRhc2ggPSAvLVthLXpdL2c7CiAgICB2YWxpZCA9IC9eZGF0YVstXHcuOl0rJC9pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzCnZhciBodG1sNCwgc3ZnMjsKdmFyIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9tZXJnZTMoKTsKICAgIGluaXRfYXJpYSgpOwogICAgaW5pdF9odG1sOSgpOwogICAgaW5pdF9zdmcoKTsKICAgIGluaXRfeGxpbmsoKTsKICAgIGluaXRfeG1sbnMoKTsKICAgIGluaXRfeG1sKCk7CiAgICBpbml0X2hhc3RfdG9fcmVhY3QoKTsKICAgIGluaXRfZmluZDIoKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBodG1sNCA9IG1lcmdlMyhbYXJpYTIsIGh0bWwzLCB4bGluaywgeG1sbnMsIHhtbF0sICJodG1sIik7CiAgICBzdmcyID0gbWVyZ2UzKFthcmlhMiwgc3ZnLCB4bGluaywgeG1sbnMsIHhtbF0sICJzdmciKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzCmZ1bmN0aW9uIGNvcmUodmFsdWUyLCBvcHRpb25zKSB7CiAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoCiAgICBvcHRpb25zLnN1YnNldCA/IGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQob3B0aW9ucy5zdWJzZXQpIDogZGVmYXVsdFN1YnNldFJlZ2V4LAogICAgYmFzaWMKICApOwogIGlmIChvcHRpb25zLnN1YnNldCB8fCBvcHRpb25zLmVzY2FwZU9ubHkpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIHJldHVybiB2YWx1ZTIucmVwbGFjZShzdXJyb2dhdGVQYWlyc1JlZ2V4LCBzdXJyb2dhdGUpLnJlcGxhY2UoY29udHJvbENoYXJhY3RlcnNSZWdleCwgYmFzaWMpOwogIGZ1bmN0aW9uIHN1cnJvZ2F0ZShwYWlyLCBpbmRleDIsIGFsbDMpIHsKICAgIHJldHVybiBvcHRpb25zLmZvcm1hdCgKICAgICAgKHBhaXIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyBwYWlyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCArIDY1NTM2LAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMiksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQogIGZ1bmN0aW9uIGJhc2ljKGNoYXJhY3RlciwgaW5kZXgyLCBhbGwzKSB7CiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoCiAgICAgIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApLAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMSksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQoc3Vic2V0KSB7CiAgbGV0IGNhY2hlZCA9IHN1YnNldFRvUmVnZXhDYWNoZS5nZXQoc3Vic2V0KTsKICBpZiAoIWNhY2hlZCkgewogICAgY2FjaGVkID0gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpOwogICAgc3Vic2V0VG9SZWdleENhY2hlLnNldChzdWJzZXQsIGNhY2hlZCk7CiAgfQogIHJldHVybiBjYWNoZWQ7Cn0KZnVuY3Rpb24gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpIHsKICBjb25zdCBncm91cHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3Vic2V0Lmxlbmd0aCkgewogICAgZ3JvdXBzLnB1c2goc3Vic2V0W2luZGV4Ml0ucmVwbGFjZShyZWdleEVzY2FwZVJlZ2V4LCAiXFwkJiIpKTsKICB9CiAgcmV0dXJuIG5ldyBSZWdFeHAoIig/OiIgKyBncm91cHMuam9pbigifCIpICsgIikiLCAiZyIpOwp9CnZhciBkZWZhdWx0U3Vic2V0UmVnZXgsIHN1cnJvZ2F0ZVBhaXJzUmVnZXgsIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXgsIHJlZ2V4RXNjYXBlUmVnZXgsIHN1YnNldFRvUmVnZXhDYWNoZTsKdmFyIGluaXRfY29yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzIigpIHsKICAgIGRlZmF1bHRTdWJzZXRSZWdleCA9IC9bIiYnPD5gXS9nOwogICAgc3Vycm9nYXRlUGFpcnNSZWdleCA9IC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZzsKICAgIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXggPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCwgdW5pY29ybi9uby1oZXgtZXNjYXBlCiAgICAvW1x4MDEtXHRcdlxmXHgwRS1ceDFGXHg3Rlx4ODFceDhEXHg4Rlx4OTBceDlEXHhBMC1cdUZGRkZdL2c7CiAgICByZWdleEVzY2FwZVJlZ2V4ID0gL1t8XFx7fSgpW1xdXiQrKj8uXS9nOwogICAgc3Vic2V0VG9SZWdleENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1oZXhhZGVjaW1hbC5qcwpmdW5jdGlvbiB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgcmV0dXJuIG9taXQgJiYgbmV4dDIgJiYgIWhleGFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGhleGFkZWNpbWFsUmVnZXg7CnZhciBpbml0X3RvX2hleGFkZWNpbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMiKCkgewogICAgaGV4YWRlY2ltYWxSZWdleCA9IC9bXGRBLUZhLWZdLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMKZnVuY3Rpb24gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImIyIgKyBTdHJpbmcoY29kZTQpOwogIHJldHVybiBvbWl0ICYmIG5leHQyICYmICFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGRlY2ltYWxSZWdleDsKdmFyIGluaXRfdG9fZGVjaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMiKCkgewogICAgZGVjaW1hbFJlZ2V4ID0gL1xkLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMKdmFyIGNoYXJhY3RlckVudGl0aWVzTGVnYWN5Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeUAzLjAuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeS9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeSA9IFsKICAgICAgIkFFbGlnIiwKICAgICAgIkFNUCIsCiAgICAgICJBYWN1dGUiLAogICAgICAiQWNpcmMiLAogICAgICAiQWdyYXZlIiwKICAgICAgIkFyaW5nIiwKICAgICAgIkF0aWxkZSIsCiAgICAgICJBdW1sIiwKICAgICAgIkNPUFkiLAogICAgICAiQ2NlZGlsIiwKICAgICAgIkVUSCIsCiAgICAgICJFYWN1dGUiLAogICAgICAiRWNpcmMiLAogICAgICAiRWdyYXZlIiwKICAgICAgIkV1bWwiLAogICAgICAiR1QiLAogICAgICAiSWFjdXRlIiwKICAgICAgIkljaXJjIiwKICAgICAgIklncmF2ZSIsCiAgICAgICJJdW1sIiwKICAgICAgIkxUIiwKICAgICAgIk50aWxkZSIsCiAgICAgICJPYWN1dGUiLAogICAgICAiT2NpcmMiLAogICAgICAiT2dyYXZlIiwKICAgICAgIk9zbGFzaCIsCiAgICAgICJPdGlsZGUiLAogICAgICAiT3VtbCIsCiAgICAgICJRVU9UIiwKICAgICAgIlJFRyIsCiAgICAgICJUSE9STiIsCiAgICAgICJVYWN1dGUiLAogICAgICAiVWNpcmMiLAogICAgICAiVWdyYXZlIiwKICAgICAgIlV1bWwiLAogICAgICAiWWFjdXRlIiwKICAgICAgImFhY3V0ZSIsCiAgICAgICJhY2lyYyIsCiAgICAgICJhY3V0ZSIsCiAgICAgICJhZWxpZyIsCiAgICAgICJhZ3JhdmUiLAogICAgICAiYW1wIiwKICAgICAgImFyaW5nIiwKICAgICAgImF0aWxkZSIsCiAgICAgICJhdW1sIiwKICAgICAgImJydmJhciIsCiAgICAgICJjY2VkaWwiLAogICAgICAiY2VkaWwiLAogICAgICAiY2VudCIsCiAgICAgICJjb3B5IiwKICAgICAgImN1cnJlbiIsCiAgICAgICJkZWciLAogICAgICAiZGl2aWRlIiwKICAgICAgImVhY3V0ZSIsCiAgICAgICJlY2lyYyIsCiAgICAgICJlZ3JhdmUiLAogICAgICAiZXRoIiwKICAgICAgImV1bWwiLAogICAgICAiZnJhYzEyIiwKICAgICAgImZyYWMxNCIsCiAgICAgICJmcmFjMzQiLAogICAgICAiZ3QiLAogICAgICAiaWFjdXRlIiwKICAgICAgImljaXJjIiwKICAgICAgImlleGNsIiwKICAgICAgImlncmF2ZSIsCiAgICAgICJpcXVlc3QiLAogICAgICAiaXVtbCIsCiAgICAgICJsYXF1byIsCiAgICAgICJsdCIsCiAgICAgICJtYWNyIiwKICAgICAgIm1pY3JvIiwKICAgICAgIm1pZGRvdCIsCiAgICAgICJuYnNwIiwKICAgICAgIm5vdCIsCiAgICAgICJudGlsZGUiLAogICAgICAib2FjdXRlIiwKICAgICAgIm9jaXJjIiwKICAgICAgIm9ncmF2ZSIsCiAgICAgICJvcmRmIiwKICAgICAgIm9yZG0iLAogICAgICAib3NsYXNoIiwKICAgICAgIm90aWxkZSIsCiAgICAgICJvdW1sIiwKICAgICAgInBhcmEiLAogICAgICAicGx1c21uIiwKICAgICAgInBvdW5kIiwKICAgICAgInF1b3QiLAogICAgICAicmFxdW8iLAogICAgICAicmVnIiwKICAgICAgInNlY3QiLAogICAgICAic2h5IiwKICAgICAgInN1cDEiLAogICAgICAic3VwMiIsCiAgICAgICJzdXAzIiwKICAgICAgInN6bGlnIiwKICAgICAgInRob3JuIiwKICAgICAgInRpbWVzIiwKICAgICAgInVhY3V0ZSIsCiAgICAgICJ1Y2lyYyIsCiAgICAgICJ1Z3JhdmUiLAogICAgICAidW1sIiwKICAgICAgInV1bWwiLAogICAgICAieWFjdXRlIiwKICAgICAgInllbiIsCiAgICAgICJ5dW1sIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNEAyLjEuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0L2luZGV4LmpzCnZhciBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDRAMi4xLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0ID0gewogICAgICBuYnNwOiAiXHhBMCIsCiAgICAgIGlleGNsOiAiXHhBMSIsCiAgICAgIGNlbnQ6ICJceEEyIiwKICAgICAgcG91bmQ6ICJceEEzIiwKICAgICAgY3VycmVuOiAiXHhBNCIsCiAgICAgIHllbjogIlx4QTUiLAogICAgICBicnZiYXI6ICJceEE2IiwKICAgICAgc2VjdDogIlx4QTciLAogICAgICB1bWw6ICJceEE4IiwKICAgICAgY29weTogIlx4QTkiLAogICAgICBvcmRmOiAiXHhBQSIsCiAgICAgIGxhcXVvOiAiXHhBQiIsCiAgICAgIG5vdDogIlx4QUMiLAogICAgICBzaHk6ICJceEFEIiwKICAgICAgcmVnOiAiXHhBRSIsCiAgICAgIG1hY3I6ICJceEFGIiwKICAgICAgZGVnOiAiXHhCMCIsCiAgICAgIHBsdXNtbjogIlx4QjEiLAogICAgICBzdXAyOiAiXHhCMiIsCiAgICAgIHN1cDM6ICJceEIzIiwKICAgICAgYWN1dGU6ICJceEI0IiwKICAgICAgbWljcm86ICJceEI1IiwKICAgICAgcGFyYTogIlx4QjYiLAogICAgICBtaWRkb3Q6ICJceEI3IiwKICAgICAgY2VkaWw6ICJceEI4IiwKICAgICAgc3VwMTogIlx4QjkiLAogICAgICBvcmRtOiAiXHhCQSIsCiAgICAgIHJhcXVvOiAiXHhCQiIsCiAgICAgIGZyYWMxNDogIlx4QkMiLAogICAgICBmcmFjMTI6ICJceEJEIiwKICAgICAgZnJhYzM0OiAiXHhCRSIsCiAgICAgIGlxdWVzdDogIlx4QkYiLAogICAgICBBZ3JhdmU6ICJceEMwIiwKICAgICAgQWFjdXRlOiAiXHhDMSIsCiAgICAgIEFjaXJjOiAiXHhDMiIsCiAgICAgIEF0aWxkZTogIlx4QzMiLAogICAgICBBdW1sOiAiXHhDNCIsCiAgICAgIEFyaW5nOiAiXHhDNSIsCiAgICAgIEFFbGlnOiAiXHhDNiIsCiAgICAgIENjZWRpbDogIlx4QzciLAogICAgICBFZ3JhdmU6ICJceEM4IiwKICAgICAgRWFjdXRlOiAiXHhDOSIsCiAgICAgIEVjaXJjOiAiXHhDQSIsCiAgICAgIEV1bWw6ICJceENCIiwKICAgICAgSWdyYXZlOiAiXHhDQyIsCiAgICAgIElhY3V0ZTogIlx4Q0QiLAogICAgICBJY2lyYzogIlx4Q0UiLAogICAgICBJdW1sOiAiXHhDRiIsCiAgICAgIEVUSDogIlx4RDAiLAogICAgICBOdGlsZGU6ICJceEQxIiwKICAgICAgT2dyYXZlOiAiXHhEMiIsCiAgICAgIE9hY3V0ZTogIlx4RDMiLAogICAgICBPY2lyYzogIlx4RDQiLAogICAgICBPdGlsZGU6ICJceEQ1IiwKICAgICAgT3VtbDogIlx4RDYiLAogICAgICB0aW1lczogIlx4RDciLAogICAgICBPc2xhc2g6ICJceEQ4IiwKICAgICAgVWdyYXZlOiAiXHhEOSIsCiAgICAgIFVhY3V0ZTogIlx4REEiLAogICAgICBVY2lyYzogIlx4REIiLAogICAgICBVdW1sOiAiXHhEQyIsCiAgICAgIFlhY3V0ZTogIlx4REQiLAogICAgICBUSE9STjogIlx4REUiLAogICAgICBzemxpZzogIlx4REYiLAogICAgICBhZ3JhdmU6ICJceEUwIiwKICAgICAgYWFjdXRlOiAiXHhFMSIsCiAgICAgIGFjaXJjOiAiXHhFMiIsCiAgICAgIGF0aWxkZTogIlx4RTMiLAogICAgICBhdW1sOiAiXHhFNCIsCiAgICAgIGFyaW5nOiAiXHhFNSIsCiAgICAgIGFlbGlnOiAiXHhFNiIsCiAgICAgIGNjZWRpbDogIlx4RTciLAogICAgICBlZ3JhdmU6ICJceEU4IiwKICAgICAgZWFjdXRlOiAiXHhFOSIsCiAgICAgIGVjaXJjOiAiXHhFQSIsCiAgICAgIGV1bWw6ICJceEVCIiwKICAgICAgaWdyYXZlOiAiXHhFQyIsCiAgICAgIGlhY3V0ZTogIlx4RUQiLAogICAgICBpY2lyYzogIlx4RUUiLAogICAgICBpdW1sOiAiXHhFRiIsCiAgICAgIGV0aDogIlx4RjAiLAogICAgICBudGlsZGU6ICJceEYxIiwKICAgICAgb2dyYXZlOiAiXHhGMiIsCiAgICAgIG9hY3V0ZTogIlx4RjMiLAogICAgICBvY2lyYzogIlx4RjQiLAogICAgICBvdGlsZGU6ICJceEY1IiwKICAgICAgb3VtbDogIlx4RjYiLAogICAgICBkaXZpZGU6ICJceEY3IiwKICAgICAgb3NsYXNoOiAiXHhGOCIsCiAgICAgIHVncmF2ZTogIlx4RjkiLAogICAgICB1YWN1dGU6ICJceEZBIiwKICAgICAgdWNpcmM6ICJceEZCIiwKICAgICAgdXVtbDogIlx4RkMiLAogICAgICB5YWN1dGU6ICJceEZEIiwKICAgICAgdGhvcm46ICJceEZFIiwKICAgICAgeXVtbDogIlx4RkYiLAogICAgICBmbm9mOiAiXHUwMTkyIiwKICAgICAgQWxwaGE6ICJcdTAzOTEiLAogICAgICBCZXRhOiAiXHUwMzkyIiwKICAgICAgR2FtbWE6ICJcdTAzOTMiLAogICAgICBEZWx0YTogIlx1MDM5NCIsCiAgICAgIEVwc2lsb246ICJcdTAzOTUiLAogICAgICBaZXRhOiAiXHUwMzk2IiwKICAgICAgRXRhOiAiXHUwMzk3IiwKICAgICAgVGhldGE6ICJcdTAzOTgiLAogICAgICBJb3RhOiAiXHUwMzk5IiwKICAgICAgS2FwcGE6ICJcdTAzOUEiLAogICAgICBMYW1iZGE6ICJcdTAzOUIiLAogICAgICBNdTogIlx1MDM5QyIsCiAgICAgIE51OiAiXHUwMzlEIiwKICAgICAgWGk6ICJcdTAzOUUiLAogICAgICBPbWljcm9uOiAiXHUwMzlGIiwKICAgICAgUGk6ICJcdTAzQTAiLAogICAgICBSaG86ICJcdTAzQTEiLAogICAgICBTaWdtYTogIlx1MDNBMyIsCiAgICAgIFRhdTogIlx1MDNBNCIsCiAgICAgIFVwc2lsb246ICJcdTAzQTUiLAogICAgICBQaGk6ICJcdTAzQTYiLAogICAgICBDaGk6ICJcdTAzQTciLAogICAgICBQc2k6ICJcdTAzQTgiLAogICAgICBPbWVnYTogIlx1MDNBOSIsCiAgICAgIGFscGhhOiAiXHUwM0IxIiwKICAgICAgYmV0YTogIlx1MDNCMiIsCiAgICAgIGdhbW1hOiAiXHUwM0IzIiwKICAgICAgZGVsdGE6ICJcdTAzQjQiLAogICAgICBlcHNpbG9uOiAiXHUwM0I1IiwKICAgICAgemV0YTogIlx1MDNCNiIsCiAgICAgIGV0YTogIlx1MDNCNyIsCiAgICAgIHRoZXRhOiAiXHUwM0I4IiwKICAgICAgaW90YTogIlx1MDNCOSIsCiAgICAgIGthcHBhOiAiXHUwM0JBIiwKICAgICAgbGFtYmRhOiAiXHUwM0JCIiwKICAgICAgbXU6ICJcdTAzQkMiLAogICAgICBudTogIlx1MDNCRCIsCiAgICAgIHhpOiAiXHUwM0JFIiwKICAgICAgb21pY3JvbjogIlx1MDNCRiIsCiAgICAgIHBpOiAiXHUwM0MwIiwKICAgICAgcmhvOiAiXHUwM0MxIiwKICAgICAgc2lnbWFmOiAiXHUwM0MyIiwKICAgICAgc2lnbWE6ICJcdTAzQzMiLAogICAgICB0YXU6ICJcdTAzQzQiLAogICAgICB1cHNpbG9uOiAiXHUwM0M1IiwKICAgICAgcGhpOiAiXHUwM0M2IiwKICAgICAgY2hpOiAiXHUwM0M3IiwKICAgICAgcHNpOiAiXHUwM0M4IiwKICAgICAgb21lZ2E6ICJcdTAzQzkiLAogICAgICB0aGV0YXN5bTogIlx1MDNEMSIsCiAgICAgIHVwc2loOiAiXHUwM0QyIiwKICAgICAgcGl2OiAiXHUwM0Q2IiwKICAgICAgYnVsbDogIlx1MjAyMiIsCiAgICAgIGhlbGxpcDogIlx1MjAyNiIsCiAgICAgIHByaW1lOiAiXHUyMDMyIiwKICAgICAgUHJpbWU6ICJcdTIwMzMiLAogICAgICBvbGluZTogIlx1MjAzRSIsCiAgICAgIGZyYXNsOiAiXHUyMDQ0IiwKICAgICAgd2VpZXJwOiAiXHUyMTE4IiwKICAgICAgaW1hZ2U6ICJcdTIxMTEiLAogICAgICByZWFsOiAiXHUyMTFDIiwKICAgICAgdHJhZGU6ICJcdTIxMjIiLAogICAgICBhbGVmc3ltOiAiXHUyMTM1IiwKICAgICAgbGFycjogIlx1MjE5MCIsCiAgICAgIHVhcnI6ICJcdTIxOTEiLAogICAgICByYXJyOiAiXHUyMTkyIiwKICAgICAgZGFycjogIlx1MjE5MyIsCiAgICAgIGhhcnI6ICJcdTIxOTQiLAogICAgICBjcmFycjogIlx1MjFCNSIsCiAgICAgIGxBcnI6ICJcdTIxRDAiLAogICAgICB1QXJyOiAiXHUyMUQxIiwKICAgICAgckFycjogIlx1MjFEMiIsCiAgICAgIGRBcnI6ICJcdTIxRDMiLAogICAgICBoQXJyOiAiXHUyMUQ0IiwKICAgICAgZm9yYWxsOiAiXHUyMjAwIiwKICAgICAgcGFydDogIlx1MjIwMiIsCiAgICAgIGV4aXN0OiAiXHUyMjAzIiwKICAgICAgZW1wdHk6ICJcdTIyMDUiLAogICAgICBuYWJsYTogIlx1MjIwNyIsCiAgICAgIGlzaW46ICJcdTIyMDgiLAogICAgICBub3RpbjogIlx1MjIwOSIsCiAgICAgIG5pOiAiXHUyMjBCIiwKICAgICAgcHJvZDogIlx1MjIwRiIsCiAgICAgIHN1bTogIlx1MjIxMSIsCiAgICAgIG1pbnVzOiAiXHUyMjEyIiwKICAgICAgbG93YXN0OiAiXHUyMjE3IiwKICAgICAgcmFkaWM6ICJcdTIyMUEiLAogICAgICBwcm9wOiAiXHUyMjFEIiwKICAgICAgaW5maW46ICJcdTIyMUUiLAogICAgICBhbmc6ICJcdTIyMjAiLAogICAgICBhbmQ6ICJcdTIyMjciLAogICAgICBvcjogIlx1MjIyOCIsCiAgICAgIGNhcDogIlx1MjIyOSIsCiAgICAgIGN1cDogIlx1MjIyQSIsCiAgICAgIGludDogIlx1MjIyQiIsCiAgICAgIHRoZXJlNDogIlx1MjIzNCIsCiAgICAgIHNpbTogIlx1MjIzQyIsCiAgICAgIGNvbmc6ICJcdTIyNDUiLAogICAgICBhc3ltcDogIlx1MjI0OCIsCiAgICAgIG5lOiAiXHUyMjYwIiwKICAgICAgZXF1aXY6ICJcdTIyNjEiLAogICAgICBsZTogIlx1MjI2NCIsCiAgICAgIGdlOiAiXHUyMjY1IiwKICAgICAgc3ViOiAiXHUyMjgyIiwKICAgICAgc3VwOiAiXHUyMjgzIiwKICAgICAgbnN1YjogIlx1MjI4NCIsCiAgICAgIHN1YmU6ICJcdTIyODYiLAogICAgICBzdXBlOiAiXHUyMjg3IiwKICAgICAgb3BsdXM6ICJcdTIyOTUiLAogICAgICBvdGltZXM6ICJcdTIyOTciLAogICAgICBwZXJwOiAiXHUyMkE1IiwKICAgICAgc2RvdDogIlx1MjJDNSIsCiAgICAgIGxjZWlsOiAiXHUyMzA4IiwKICAgICAgcmNlaWw6ICJcdTIzMDkiLAogICAgICBsZmxvb3I6ICJcdTIzMEEiLAogICAgICByZmxvb3I6ICJcdTIzMEIiLAogICAgICBsYW5nOiAiXHUyMzI5IiwKICAgICAgcmFuZzogIlx1MjMyQSIsCiAgICAgIGxvejogIlx1MjVDQSIsCiAgICAgIHNwYWRlczogIlx1MjY2MCIsCiAgICAgIGNsdWJzOiAiXHUyNjYzIiwKICAgICAgaGVhcnRzOiAiXHUyNjY1IiwKICAgICAgZGlhbXM6ICJcdTI2NjYiLAogICAgICBxdW90OiAnIicsCiAgICAgIGFtcDogIiYiLAogICAgICBsdDogIjwiLAogICAgICBndDogIj4iLAogICAgICBPRWxpZzogIlx1MDE1MiIsCiAgICAgIG9lbGlnOiAiXHUwMTUzIiwKICAgICAgU2Nhcm9uOiAiXHUwMTYwIiwKICAgICAgc2Nhcm9uOiAiXHUwMTYxIiwKICAgICAgWXVtbDogIlx1MDE3OCIsCiAgICAgIGNpcmM6ICJcdTAyQzYiLAogICAgICB0aWxkZTogIlx1MDJEQyIsCiAgICAgIGVuc3A6ICJcdTIwMDIiLAogICAgICBlbXNwOiAiXHUyMDAzIiwKICAgICAgdGhpbnNwOiAiXHUyMDA5IiwKICAgICAgenduajogIlx1MjAwQyIsCiAgICAgIHp3ajogIlx1MjAwRCIsCiAgICAgIGxybTogIlx1MjAwRSIsCiAgICAgIHJsbTogIlx1MjAwRiIsCiAgICAgIG5kYXNoOiAiXHUyMDEzIiwKICAgICAgbWRhc2g6ICJcdTIwMTQiLAogICAgICBsc3F1bzogIlx1MjAxOCIsCiAgICAgIHJzcXVvOiAiXHUyMDE5IiwKICAgICAgc2JxdW86ICJcdTIwMUEiLAogICAgICBsZHF1bzogIlx1MjAxQyIsCiAgICAgIHJkcXVvOiAiXHUyMDFEIiwKICAgICAgYmRxdW86ICJcdTIwMUUiLAogICAgICBkYWdnZXI6ICJcdTIwMjAiLAogICAgICBEYWdnZXI6ICJcdTIwMjEiLAogICAgICBwZXJtaWw6ICJcdTIwMzAiLAogICAgICBsc2FxdW86ICJcdTIwMzkiLAogICAgICByc2FxdW86ICJcdTIwM0EiLAogICAgICBldXJvOiAiXHUyMEFDIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb25zdGFudC9kYW5nZXJvdXMuanMKdmFyIGRhbmdlcm91czsKdmFyIGluaXRfZGFuZ2Vyb3VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2NvbnN0YW50L2Rhbmdlcm91cy5qcyIoKSB7CiAgICBkYW5nZXJvdXMgPSBbCiAgICAgICJjZW50IiwKICAgICAgImNvcHkiLAogICAgICAiZGl2aWRlIiwKICAgICAgImd0IiwKICAgICAgImx0IiwKICAgICAgIm5vdCIsCiAgICAgICJwYXJhIiwKICAgICAgInRpbWVzIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzCmZ1bmN0aW9uIHRvTmFtZWQoY29kZTQsIG5leHQyLCBvbWl0LCBhdHRyaWJ1dGUpIHsKICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICBpZiAob3duOS5jYWxsKGNoYXJhY3RlcnMsIGNoYXJhY3RlcikpIHsKICAgIGNvbnN0IG5hbWUgPSBjaGFyYWN0ZXJzW2NoYXJhY3Rlcl07CiAgICBjb25zdCB2YWx1ZTIgPSAiJiIgKyBuYW1lOwogICAgaWYgKG9taXQgJiYgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kuaW5jbHVkZXMobmFtZSkgJiYgIWRhbmdlcm91cy5pbmNsdWRlcyhuYW1lKSAmJiAoIWF0dHJpYnV0ZSB8fCBuZXh0MiAmJiBuZXh0MiAhPT0gNjEgJiYgbm90QWxwaGFudW1lcmljUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkpKSB7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICByZXR1cm4gdmFsdWUyICsgIjsiOwogIH0KICByZXR1cm4gIiI7Cn0KdmFyIG93bjksIGNoYXJhY3RlcnMsIGtleSwgbm90QWxwaGFudW1lcmljUmVnZXg7CnZhciBpbml0X3RvX25hbWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8tbmFtZWQuanMiKCkgewogICAgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5KCk7CiAgICBpbml0X2NoYXJhY3Rlcl9lbnRpdGllc19odG1sNCgpOwogICAgaW5pdF9kYW5nZXJvdXMoKTsKICAgIG93bjkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGNoYXJhY3RlcnMgPSB7fTsKICAgIGZvciAoa2V5IGluIGNoYXJhY3RlckVudGl0aWVzSHRtbDQpIHsKICAgICAgaWYgKG93bjkuY2FsbChjaGFyYWN0ZXJFbnRpdGllc0h0bWw0LCBrZXkpKSB7CiAgICAgICAgY2hhcmFjdGVyc1tjaGFyYWN0ZXJFbnRpdGllc0h0bWw0W2tleV1dID0ga2V5OwogICAgICB9CiAgICB9CiAgICBub3RBbHBoYW51bWVyaWNSZWdleCA9IC9bXlxkQS1aYS16XS87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC9mb3JtYXQtc21hcnQuanMKZnVuY3Rpb24gZm9ybWF0U21hcnQoY29kZTQsIG5leHQyLCBvcHRpb25zKSB7CiAgbGV0IG51bWVyaWMgPSB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICBsZXQgbmFtZWQ7CiAgaWYgKG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzIHx8IG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBuYW1lZCA9IHRvTmFtZWQoCiAgICAgIGNvZGU0LAogICAgICBuZXh0MiwKICAgICAgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zLAogICAgICBvcHRpb25zLmF0dHJpYnV0ZQogICAgKTsKICB9CiAgaWYgKChvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCAhbmFtZWQpICYmIG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBjb25zdCBkZWNpbWFsID0gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IG51bWVyaWMubGVuZ3RoKSB7CiAgICAgIG51bWVyaWMgPSBkZWNpbWFsOwogICAgfQogIH0KICByZXR1cm4gbmFtZWQgJiYgKCFvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCBuYW1lZC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkgPyBuYW1lZCA6IG51bWVyaWM7Cn0KdmFyIGluaXRfZm9ybWF0X3NtYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzIigpIHsKICAgIGluaXRfdG9faGV4YWRlY2ltYWwoKTsKICAgIGluaXRfdG9fZGVjaW1hbCgpOwogICAgaW5pdF90b19uYW1lZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzCmZ1bmN0aW9uIGZvcm1hdEJhc2ljKGNvZGU0KSB7CiAgcmV0dXJuICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyAiOyI7Cn0KdmFyIGluaXRfZm9ybWF0X2Jhc2ljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllcyh2YWx1ZTIsIG9wdGlvbnMpIHsKICByZXR1cm4gY29yZSh2YWx1ZTIsIE9iamVjdC5hc3NpZ24oeyBmb3JtYXQ6IGZvcm1hdFNtYXJ0IH0sIG9wdGlvbnMpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllc0xpZ2h0KHZhbHVlMiwgb3B0aW9ucykgewogIHJldHVybiBjb3JlKHZhbHVlMiwgT2JqZWN0LmFzc2lnbih7IGZvcm1hdDogZm9ybWF0QmFzaWMgfSwgb3B0aW9ucykpOwp9CnZhciBpbml0X2xpYjI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29yZSgpOwogICAgaW5pdF9mb3JtYXRfc21hcnQoKTsKICAgIGluaXRfZm9ybWF0X2Jhc2ljKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcwp2YXIgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9jb21tZW50LmpzCmZ1bmN0aW9uIGNvbW1lbnQyKG5vZGUyLCBfMSwgXzIyLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIuc2V0dGluZ3MuYm9ndXNDb21tZW50cyA/ICI8PyIgKyBzdHJpbmdpZnlFbnRpdGllcygKICAgIG5vZGUyLnZhbHVlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIHN1YnNldDogYm9ndXNDb21tZW50RW50aXR5U3Vic2V0CiAgICB9KQogICkgKyAiPiIgOiAiPCEtLSIgKyBub2RlMi52YWx1ZS5yZXBsYWNlKGh0bWxDb21tZW50UmVnZXgsIGVuY29kZTIpICsgIi0tPiI7CiAgZnVuY3Rpb24gZW5jb2RlMigkMCkgewogICAgcmV0dXJuIHN0cmluZ2lmeUVudGl0aWVzKAogICAgICAkMCwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgICAgc3Vic2V0OiBjb21tZW50RW50aXR5U3Vic2V0CiAgICAgIH0pCiAgICApOwogIH0KfQp2YXIgaHRtbENvbW1lbnRSZWdleCwgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0LCBjb21tZW50RW50aXR5U3Vic2V0Owp2YXIgaW5pdF9jb21tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvY29tbWVudC5qcyIoKSB7CiAgICBpbml0X3N0cmluZ2lmeV9lbnRpdGllcygpOwogICAgaHRtbENvbW1lbnRSZWdleCA9IC9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2c7CiAgICBib2d1c0NvbW1lbnRFbnRpdHlTdWJzZXQgPSBbIj4iXTsKICAgIGNvbW1lbnRFbnRpdHlTdWJzZXQgPSBbIjwiLCAiPiJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcwpmdW5jdGlvbiBkb2N0eXBlMihfMSwgXzIyLCBfMzIsIHN0YXRlMTIpIHsKICByZXR1cm4gIjwhIiArIChzdGF0ZTEyLnNldHRpbmdzLnVwcGVyRG9jdHlwZSA/ICJET0NUWVBFIiA6ICJkb2N0eXBlIikgKyAoc3RhdGUxMi5zZXR0aW5ncy50aWdodERvY3R5cGUgPyAiIiA6ICIgIikgKyAiaHRtbD4iOwp9CnZhciBpbml0X2RvY3R5cGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9kb2N0eXBlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMvbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMKZnVuY3Rpb24gcGFyc2U1KHZhbHVlMikgewogIGNvbnN0IHRva2VucyA9IFtdOwogIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlMiB8fCAiIik7CiAgbGV0IGluZGV4MiA9IGlucHV0LmluZGV4T2YoIiwiKTsKICBsZXQgc3RhcnQgPSAwOwogIGxldCBlbmQzID0gZmFsc2U7CiAgd2hpbGUgKCFlbmQzKSB7CiAgICBpZiAoaW5kZXgyID09PSAtMSkgewogICAgICBpbmRleDIgPSBpbnB1dC5sZW5ndGg7CiAgICAgIGVuZDMgPSB0cnVlOwogICAgfQogICAgY29uc3QgdG9rZW4gPSBpbnB1dC5zbGljZShzdGFydCwgaW5kZXgyKS50cmltKCk7CiAgICBpZiAodG9rZW4gfHwgIWVuZDMpIHsKICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgfQogICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgaW5kZXgyID0gaW5wdXQuaW5kZXhPZigiLCIsIHN0YXJ0KTsKICB9CiAgcmV0dXJuIHRva2VuczsKfQpmdW5jdGlvbiBzdHJpbmdpZnkzKHZhbHVlcywgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBpbnB1dCA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gPT09ICIiID8gWy4uLnZhbHVlcywgIiJdIDogdmFsdWVzOwogIHJldHVybiBpbnB1dC5qb2luKAogICAgKHNldHRpbmdzLnBhZFJpZ2h0ID8gIiAiIDogIiIpICsgIiwiICsgKHNldHRpbmdzLnBhZExlZnQgPT09IGZhbHNlID8gIiIgOiAiICIpCiAgKS50cmltKCk7Cn0KdmFyIGluaXRfY29tbWFfc2VwYXJhdGVkX3Rva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMvbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMi9ub2RlX21vZHVsZXMvc3BhY2Utc2VwYXJhdGVkLXRva2Vucy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZTYodmFsdWUyKSB7CiAgY29uc3QgaW5wdXQgPSBTdHJpbmcodmFsdWUyIHx8ICIiKS50cmltKCk7CiAgcmV0dXJuIGlucHV0ID8gaW5wdXQuc3BsaXQoL1sgXHRcblxyXGZdKy9nKSA6IFtdOwp9CmZ1bmN0aW9uIHN0cmluZ2lmeTQodmFsdWVzKSB7CiAgcmV0dXJuIHZhbHVlcy5qb2luKCIgIikudHJpbSgpOwp9CnZhciBpbml0X3NwYWNlX3NlcGFyYXRlZF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zcGFjZS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4yL25vZGVfbW9kdWxlcy9zcGFjZS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC13aGl0ZXNwYWNlQDMuMC4wL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtd2hpdGVzcGFjZS9saWIvaW5kZXguanMKZnVuY3Rpb24gd2hpdGVzcGFjZSh0aGluZykgewogIHJldHVybiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiID8gdGhpbmcudHlwZSA9PT0gInRleHQiID8gZW1wdHkzKHRoaW5nLnZhbHVlKSA6IGZhbHNlIDogZW1wdHkzKHRoaW5nKTsKfQpmdW5jdGlvbiBlbXB0eTModmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5yZXBsYWNlKHJlLCAiIikgPT09ICIiOwp9CnZhciByZTsKdmFyIGluaXRfbGliMjkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvbGliL2luZGV4LmpzIigpIHsKICAgIHJlID0gL1sgXHRcblxmXHJdL2c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3doaXRlc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzCmZ1bmN0aW9uIHNpYmxpbmdzKGluY3JlbWVudDIpIHsKICByZXR1cm4gc2libGluZzsKICBmdW5jdGlvbiBzaWJsaW5nKHBhcmVudCwgaW5kZXgyLCBpbmNsdWRlV2hpdGVzcGFjZSkgewogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogZW1wdHlDaGlsZHJlbjsKICAgIGxldCBvZmZzZXQgPSAoaW5kZXgyIHx8IDApICsgaW5jcmVtZW50MjsKICAgIGxldCBuZXh0MiA9IHNpYmxpbmdzMltvZmZzZXRdOwogICAgaWYgKCFpbmNsdWRlV2hpdGVzcGFjZSkgewogICAgICB3aGlsZSAobmV4dDIgJiYgd2hpdGVzcGFjZShuZXh0MikpIHsKICAgICAgICBvZmZzZXQgKz0gaW5jcmVtZW50MjsKICAgICAgICBuZXh0MiA9IHNpYmxpbmdzMltvZmZzZXRdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV4dDI7CiAgfQp9CnZhciBzaWJsaW5nQWZ0ZXIsIHNpYmxpbmdCZWZvcmUsIGVtcHR5Q2hpbGRyZW47CnZhciBpbml0X3NpYmxpbmdzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzIigpIHsKICAgIGluaXRfaGFzdF91dGlsX3doaXRlc3BhY2UoKTsKICAgIHNpYmxpbmdBZnRlciA9IHNpYmxpbmdzKDEpOwogICAgc2libGluZ0JlZm9yZSA9IHNpYmxpbmdzKC0xKTsKICAgIGVtcHR5Q2hpbGRyZW4gPSBbXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb21pc3Npb24uanMKZnVuY3Rpb24gb21pc3Npb24oaGFuZGxlcnMyKSB7CiAgcmV0dXJuIG9taXQ7CiAgZnVuY3Rpb24gb21pdChub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICAgIHJldHVybiBvd24xMC5jYWxsKGhhbmRsZXJzMiwgbm9kZTIudGFnTmFtZSkgJiYgaGFuZGxlcnMyW25vZGUyLnRhZ05hbWVdKG5vZGUyLCBpbmRleDIsIHBhcmVudCk7CiAgfQp9CnZhciBvd24xMDsKdmFyIGluaXRfb21pc3Npb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzIigpIHsKICAgIG93bjEwID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMKZnVuY3Rpb24gaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24oXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIsIHRydWUpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiICYmICEobmV4dDIudHlwZSA9PT0gInRleHQiICYmIHdoaXRlc3BhY2UobmV4dDIudmFsdWUuY2hhckF0KDApKSk7Cn0KZnVuY3Rpb24gaHRtbDUoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIGJvZHkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIHA0KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gbmV4dDIgPyBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJhZGRyZXNzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiYXJ0aWNsZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImFzaWRlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiYmxvY2txdW90ZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRldGFpbHMiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkaXYiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkbCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZWxkc2V0IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZmlnY2FwdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZ3VyZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZvb3RlciIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZvcm0iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoMSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImgyIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDMiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoNCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImg1IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDYiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoZWFkZXIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoZ3JvdXAiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJociIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm1haW4iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJtZW51IiB8fCBuZXh0Mi50YWdOYW1lID09PSAibmF2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAib2wiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJwIiB8fCBuZXh0Mi50YWdOYW1lID09PSAicHJlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAic2VjdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRhYmxlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAidWwiKSA6ICFwYXJlbnQgfHwgLy8gQ29uZnVzaW5nIHBhcmVudC4KICAhKHBhcmVudC50eXBlID09PSAiZWxlbWVudCIgJiYgKHBhcmVudC50YWdOYW1lID09PSAiYSIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJhdWRpbyIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJkZWwiIHx8IHBhcmVudC50YWdOYW1lID09PSAiaW5zIiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gIm1hcCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJub3NjcmlwdCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJ2aWRlbyIpKTsKfQpmdW5jdGlvbiBsaShfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgbmV4dDIudGFnTmFtZSA9PT0gImxpIjsKfQpmdW5jdGlvbiBkdChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICBuZXh0MiAmJiBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJkdCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRkIikKICApOwp9CmZ1bmN0aW9uIGRkKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gImR0IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGQiKTsKfQpmdW5jdGlvbiBydWJ5RWxlbWVudChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJycCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInJ0Iik7Cn0KZnVuY3Rpb24gb3B0Z3JvdXAoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIG5leHQyLnRhZ05hbWUgPT09ICJvcHRncm91cCI7Cn0KZnVuY3Rpb24gb3B0aW9uKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gIm9wdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm9wdGdyb3VwIik7Cn0KZnVuY3Rpb24gdGhlYWQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiBCb29sZWFuKAogICAgbmV4dDIgJiYgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAidGJvZHkiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0Zm9vdCIpCiAgKTsKfQpmdW5jdGlvbiB0Ym9keShfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJ0Ym9keSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRmb290Iik7Cn0KZnVuY3Rpb24gdGZvb3QoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgcmV0dXJuICFzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwp9CmZ1bmN0aW9uIHRyKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBuZXh0Mi50YWdOYW1lID09PSAidHIiOwp9CmZ1bmN0aW9uIGNlbGxzKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gInRkIiB8fCBuZXh0Mi50YWdOYW1lID09PSAidGgiKTsKfQp2YXIgY2xvc2luZzsKdmFyIGluaXRfY2xvc2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vY2xvc2luZy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBpbml0X3NpYmxpbmdzKCk7CiAgICBpbml0X29taXNzaW9uKCk7CiAgICBjbG9zaW5nID0gb21pc3Npb24oewogICAgICBib2R5LAogICAgICBjYXB0aW9uOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgY29sZ3JvdXA6IGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uLAogICAgICBkZCwKICAgICAgZHQsCiAgICAgIGhlYWQ6IGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uLAogICAgICBodG1sOiBodG1sNSwKICAgICAgbGksCiAgICAgIG9wdGdyb3VwLAogICAgICBvcHRpb24sCiAgICAgIHA6IHA0LAogICAgICBycDogcnVieUVsZW1lbnQsCiAgICAgIHJ0OiBydWJ5RWxlbWVudCwKICAgICAgdGJvZHksCiAgICAgIHRkOiBjZWxscywKICAgICAgdGZvb3QsCiAgICAgIHRoOiBjZWxscywKICAgICAgdGhlYWQsCiAgICAgIHRyCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcwpmdW5jdGlvbiBodG1sNihub2RlMikgewogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSk7CiAgcmV0dXJuICFoZWFkMiB8fCBoZWFkMi50eXBlICE9PSAiY29tbWVudCI7Cn0KZnVuY3Rpb24gaGVhZChub2RlMikgewogIGNvbnN0IHNlZW4gPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogIGZvciAoY29uc3QgY2hpbGQyIG9mIG5vZGUyLmNoaWxkcmVuKSB7CiAgICBpZiAoY2hpbGQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAoY2hpbGQyLnRhZ05hbWUgPT09ICJiYXNlIiB8fCBjaGlsZDIudGFnTmFtZSA9PT0gInRpdGxlIikpIHsKICAgICAgaWYgKHNlZW4uaGFzKGNoaWxkMi50YWdOYW1lKSkgcmV0dXJuIGZhbHNlOwogICAgICBzZWVuLmFkZChjaGlsZDIudGFnTmFtZSk7CiAgICB9CiAgfQogIGNvbnN0IGNoaWxkID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgcmV0dXJuICFjaGlsZCB8fCBjaGlsZC50eXBlID09PSAiZWxlbWVudCI7Cn0KZnVuY3Rpb24gYm9keTIobm9kZTIpIHsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEsIHRydWUpOwogIHJldHVybiAhaGVhZDIgfHwgaGVhZDIudHlwZSAhPT0gImNvbW1lbnQiICYmICEoaGVhZDIudHlwZSA9PT0gInRleHQiICYmIHdoaXRlc3BhY2UoaGVhZDIudmFsdWUuY2hhckF0KDApKSkgJiYgIShoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgKGhlYWQyLnRhZ05hbWUgPT09ICJtZXRhIiB8fCBoZWFkMi50YWdOYW1lID09PSAibGluayIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInNjcmlwdCIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInN0eWxlIiB8fCBoZWFkMi50YWdOYW1lID09PSAidGVtcGxhdGUiKSk7Cn0KZnVuY3Rpb24gY29sZ3JvdXAobm9kZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgcHJldmlvdXMzID0gc2libGluZ0JlZm9yZShwYXJlbnQsIGluZGV4Mik7CiAgY29uc3QgaGVhZDIgPSBzaWJsaW5nQWZ0ZXIobm9kZTIsIC0xLCB0cnVlKTsKICBpZiAocGFyZW50ICYmIHByZXZpb3VzMyAmJiBwcmV2aW91czMudHlwZSA9PT0gImVsZW1lbnQiICYmIHByZXZpb3VzMy50YWdOYW1lID09PSAiY29sZ3JvdXAiICYmIGNsb3NpbmcocHJldmlvdXMzLCBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihwcmV2aW91czMpLCBwYXJlbnQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBCb29sZWFuKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAiY29sIik7Cn0KZnVuY3Rpb24gdGJvZHkyKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IHByZXZpb3VzMyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleDIpOwogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSk7CiAgaWYgKHBhcmVudCAmJiBwcmV2aW91czMgJiYgcHJldmlvdXMzLnR5cGUgPT09ICJlbGVtZW50IiAmJiAocHJldmlvdXMzLnRhZ05hbWUgPT09ICJ0aGVhZCIgfHwgcHJldmlvdXMzLnRhZ05hbWUgPT09ICJ0Ym9keSIpICYmIGNsb3NpbmcocHJldmlvdXMzLCBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihwcmV2aW91czMpLCBwYXJlbnQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBCb29sZWFuKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAidHIiKTsKfQp2YXIgb3BlbmluZzsKdmFyIGluaXRfb3BlbmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBpbml0X3NpYmxpbmdzKCk7CiAgICBpbml0X2Nsb3NpbmcoKTsKICAgIGluaXRfb21pc3Npb24oKTsKICAgIG9wZW5pbmcgPSBvbWlzc2lvbih7CiAgICAgIGJvZHk6IGJvZHkyLAogICAgICBjb2xncm91cCwKICAgICAgaGVhZCwKICAgICAgaHRtbDogaHRtbDYsCiAgICAgIHRib2R5OiB0Ym9keTIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZWxlbWVudC5qcwpmdW5jdGlvbiBlbGVtZW50Myhub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHN0YXRlMTIpIHsKICBjb25zdCBzY2hlbWEgPSBzdGF0ZTEyLnNjaGVtYTsKICBjb25zdCBvbWl0ID0gc2NoZW1hLnNwYWNlID09PSAic3ZnIiA/IGZhbHNlIDogc3RhdGUxMi5zZXR0aW5ncy5vbWl0T3B0aW9uYWxUYWdzOwogIGxldCBzZWxmQ2xvc2luZyA9IHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgPyBzdGF0ZTEyLnNldHRpbmdzLmNsb3NlRW1wdHlFbGVtZW50cyA6IHN0YXRlMTIuc2V0dGluZ3Mudm9pZHMuaW5jbHVkZXMobm9kZTIudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICBjb25zdCBwYXJ0cyA9IFtdOwogIGxldCBsYXN0MzsKICBpZiAoc2NoZW1hLnNwYWNlID09PSAiaHRtbCIgJiYgbm9kZTIudGFnTmFtZSA9PT0gInN2ZyIpIHsKICAgIHN0YXRlMTIuc2NoZW1hID0gc3ZnMjsKICB9CiAgY29uc3QgYXR0cmlidXRlcyA9IHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUxMiwgbm9kZTIucHJvcGVydGllcyk7CiAgY29uc3QgY29udGVudDMgPSBzdGF0ZTEyLmFsbCgKICAgIHNjaGVtYS5zcGFjZSA9PT0gImh0bWwiICYmIG5vZGUyLnRhZ05hbWUgPT09ICJ0ZW1wbGF0ZSIgPyBub2RlMi5jb250ZW50IDogbm9kZTIKICApOwogIHN0YXRlMTIuc2NoZW1hID0gc2NoZW1hOwogIGlmIChjb250ZW50Mykgc2VsZkNsb3NpbmcgPSBmYWxzZTsKICBpZiAoYXR0cmlidXRlcyB8fCAhb21pdCB8fCAhb3BlbmluZyhub2RlMiwgaW5kZXgyLCBwYXJlbnQpKSB7CiAgICBwYXJ0cy5wdXNoKCI8Iiwgbm9kZTIudGFnTmFtZSwgYXR0cmlidXRlcyA/ICIgIiArIGF0dHJpYnV0ZXMgOiAiIik7CiAgICBpZiAoc2VsZkNsb3NpbmcgJiYgKHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgfHwgc3RhdGUxMi5zZXR0aW5ncy5jbG9zZVNlbGZDbG9zaW5nKSkgewogICAgICBsYXN0MyA9IGF0dHJpYnV0ZXMuY2hhckF0KGF0dHJpYnV0ZXMubGVuZ3RoIC0gMSk7CiAgICAgIGlmICghc3RhdGUxMi5zZXR0aW5ncy50aWdodFNlbGZDbG9zaW5nIHx8IGxhc3QzID09PSAiLyIgfHwgbGFzdDMgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgICAgcGFydHMucHVzaCgiICIpOwogICAgICB9CiAgICAgIHBhcnRzLnB1c2goIi8iKTsKICAgIH0KICAgIHBhcnRzLnB1c2goIj4iKTsKICB9CiAgcGFydHMucHVzaChjb250ZW50Myk7CiAgaWYgKCFzZWxmQ2xvc2luZyAmJiAoIW9taXQgfHwgIWNsb3Npbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkpIHsKICAgIHBhcnRzLnB1c2goIjwvIiArIG5vZGUyLnRhZ05hbWUgKyAiPiIpOwogIH0KICByZXR1cm4gcGFydHMuam9pbigiIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlcyhzdGF0ZTEyLCBwcm9wZXJ0aWVzMikgewogIGNvbnN0IHZhbHVlcyA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQga2V5MjsKICBpZiAocHJvcGVydGllczIpIHsKICAgIGZvciAoa2V5MiBpbiBwcm9wZXJ0aWVzMikgewogICAgICBpZiAocHJvcGVydGllczJba2V5Ml0gIT09IG51bGwgJiYgcHJvcGVydGllczJba2V5Ml0gIT09IHZvaWQgMCkgewogICAgICAgIGNvbnN0IHZhbHVlMiA9IHNlcmlhbGl6ZUF0dHJpYnV0ZShzdGF0ZTEyLCBrZXkyLCBwcm9wZXJ0aWVzMltrZXkyXSk7CiAgICAgICAgaWYgKHZhbHVlMikgdmFsdWVzLnB1c2godmFsdWUyKTsKICAgICAgfQogICAgfQogIH0KICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZXMubGVuZ3RoKSB7CiAgICBjb25zdCBsYXN0MyA9IHN0YXRlMTIuc2V0dGluZ3MudGlnaHRBdHRyaWJ1dGVzID8gdmFsdWVzW2luZGV4Ml0uY2hhckF0KHZhbHVlc1tpbmRleDJdLmxlbmd0aCAtIDEpIDogdm9pZCAwOwogICAgaWYgKGluZGV4MiAhPT0gdmFsdWVzLmxlbmd0aCAtIDEgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgIHZhbHVlc1tpbmRleDJdICs9ICIgIjsKICAgIH0KICB9CiAgcmV0dXJuIHZhbHVlcy5qb2luKCIiKTsKfQpmdW5jdGlvbiBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUxMiwga2V5MiwgdmFsdWUyKSB7CiAgY29uc3QgaW5mbyA9IGZpbmQyKHN0YXRlMTIuc2NoZW1hLCBrZXkyKTsKICBjb25zdCB4MyA9IHN0YXRlMTIuc2V0dGluZ3MuYWxsb3dQYXJzZUVycm9ycyAmJiBzdGF0ZTEyLnNjaGVtYS5zcGFjZSA9PT0gImh0bWwiID8gMCA6IDE7CiAgY29uc3QgeTUgPSBzdGF0ZTEyLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycyA/IDAgOiAxOwogIGxldCBxdW90ZSA9IHN0YXRlMTIucXVvdGU7CiAgbGV0IHJlc3VsdDsKICBpZiAoaW5mby5vdmVybG9hZGVkQm9vbGVhbiAmJiAodmFsdWUyID09PSBpbmZvLmF0dHJpYnV0ZSB8fCB2YWx1ZTIgPT09ICIiKSkgewogICAgdmFsdWUyID0gdHJ1ZTsKICB9IGVsc2UgaWYgKChpbmZvLmJvb2xlYW4gfHwgaW5mby5vdmVybG9hZGVkQm9vbGVhbikgJiYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciIHx8IHZhbHVlMiA9PT0gaW5mby5hdHRyaWJ1dGUgfHwgdmFsdWUyID09PSAiIikpIHsKICAgIHZhbHVlMiA9IEJvb2xlYW4odmFsdWUyKTsKICB9CiAgaWYgKHZhbHVlMiA9PT0gbnVsbCB8fCB2YWx1ZTIgPT09IHZvaWQgMCB8fCB2YWx1ZTIgPT09IGZhbHNlIHx8IHR5cGVvZiB2YWx1ZTIgPT09ICJudW1iZXIiICYmIE51bWJlci5pc05hTih2YWx1ZTIpKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IG5hbWUgPSBzdHJpbmdpZnlFbnRpdGllcygKICAgIGluZm8uYXR0cmlidXRlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuCiAgICAgIHN1YnNldDogY29uc3RhbnRzLm5hbWVbeDNdW3k1XQogICAgfSkKICApOwogIGlmICh2YWx1ZTIgPT09IHRydWUpIHJldHVybiBuYW1lOwogIHZhbHVlMiA9IEFycmF5LmlzQXJyYXkodmFsdWUyKSA/IChpbmZvLmNvbW1hU2VwYXJhdGVkID8gc3RyaW5naWZ5MyA6IHN0cmluZ2lmeTQpKHZhbHVlMiwgewogICAgcGFkTGVmdDogIXN0YXRlMTIuc2V0dGluZ3MudGlnaHRDb21tYVNlcGFyYXRlZExpc3RzCiAgfSkgOiBTdHJpbmcodmFsdWUyKTsKICBpZiAoc3RhdGUxMi5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyAmJiAhdmFsdWUyKSByZXR1cm4gbmFtZTsKICBpZiAoc3RhdGUxMi5zZXR0aW5ncy5wcmVmZXJVbnF1b3RlZCkgewogICAgcmVzdWx0ID0gc3RyaW5naWZ5RW50aXRpZXMoCiAgICAgIHZhbHVlMiwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgICAgYXR0cmlidXRlOiB0cnVlLAogICAgICAgIHN1YnNldDogY29uc3RhbnRzLnVucXVvdGVkW3gzXVt5NV0KICAgICAgfSkKICAgICk7CiAgfQogIGlmIChyZXN1bHQgIT09IHZhbHVlMikgewogICAgaWYgKHN0YXRlMTIuc2V0dGluZ3MucXVvdGVTbWFydCAmJiBjY291bnQodmFsdWUyLCBxdW90ZSkgPiBjY291bnQodmFsdWUyLCBzdGF0ZTEyLmFsdGVybmF0aXZlKSkgewogICAgICBxdW90ZSA9IHN0YXRlMTIuYWx0ZXJuYXRpdmU7CiAgICB9CiAgICByZXN1bHQgPSBxdW90ZSArIHN0cmluZ2lmeUVudGl0aWVzKAogICAgICB2YWx1ZTIsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTIuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuCiAgICAgICAgc3Vic2V0OiAocXVvdGUgPT09ICInIiA/IGNvbnN0YW50cy5zaW5nbGUgOiBjb25zdGFudHMuZG91YmxlKVt4M11beTVdLAogICAgICAgIGF0dHJpYnV0ZTogdHJ1ZQogICAgICB9KQogICAgKSArIHF1b3RlOwogIH0KICByZXR1cm4gbmFtZSArIChyZXN1bHQgPyAiPSIgKyByZXN1bHQgOiByZXN1bHQpOwp9CnZhciBjb25zdGFudHM7CnZhciBpbml0X2VsZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9lbGVtZW50LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMoKTsKICAgIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24oKTsKICAgIGluaXRfc3BhY2Vfc2VwYXJhdGVkX3Rva2VucygpOwogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGluaXRfY2xvc2luZygpOwogICAgaW5pdF9vcGVuaW5nKCk7CiAgICBjb25zdGFudHMgPSB7CiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS1uYW1lLXN0YXRlPi4KICAgICAgbmFtZTogWwogICAgICAgIFsiCVxuXGZcciAmLz0+Ii5zcGxpdCgiIiksICIJXG5cZlxyIFwiJicvPT5gIi5zcGxpdCgiIildLAogICAgICAgIFtgXDAJClxmXHIgIiYnLzw9PmAuc3BsaXQoIiIpLCAiXDAJXG5cZlxyIFwiJicvPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHVucXVvdGVkKS1zdGF0ZT4uCiAgICAgIHVucXVvdGVkOiBbCiAgICAgICAgWyIJXG5cZlxyICY+Ii5zcGxpdCgiIiksICJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKSwgIlwwCVxuXGZcciBcIiYnPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHNpbmdsZS1xdW90ZWQpLXN0YXRlPi4KICAgICAgc2luZ2xlOiBbCiAgICAgICAgWyImJyIuc3BsaXQoIiIpLCAiXCImJ2AiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMCYnIi5zcGxpdCgiIiksICJcMFwiJidgIi5zcGxpdCgiIildCiAgICAgIF0sCiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oZG91YmxlLXF1b3RlZCktc3RhdGU+LgogICAgICBkb3VibGU6IFsKICAgICAgICBbJyImJy5zcGxpdCgiIiksICJcIiYnYCIuc3BsaXQoIiIpXSwKICAgICAgICBbJ1wwIiYnLnNwbGl0KCIiKSwgIlwwXCImJ2AiLnNwbGl0KCIiKV0KICAgICAgXQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMKZnVuY3Rpb24gdGV4dDcobm9kZTIsIF80LCBwYXJlbnQsIHN0YXRlMTIpIHsKICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAiZWxlbWVudCIgJiYgKHBhcmVudC50YWdOYW1lID09PSAic2NyaXB0IiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gInN0eWxlIikgPyBub2RlMi52YWx1ZSA6IHN0cmluZ2lmeUVudGl0aWVzKAogICAgbm9kZTIudmFsdWUsCiAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZTEyLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHsKICAgICAgc3Vic2V0OiB0ZXh0RW50aXR5U3Vic2V0CiAgICB9KQogICk7Cn0KdmFyIHRleHRFbnRpdHlTdWJzZXQ7CnZhciBpbml0X3RleHQ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvdGV4dC5qcyIoKSB7CiAgICBpbml0X3N0cmluZ2lmeV9lbnRpdGllcygpOwogICAgdGV4dEVudGl0eVN1YnNldCA9IFsiPCIsICImIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yYXcuanMKZnVuY3Rpb24gcmF3KG5vZGUyLCBpbmRleDIsIHBhcmVudCwgc3RhdGUxMikgewogIHJldHVybiBzdGF0ZTEyLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzSHRtbCA/IG5vZGUyLnZhbHVlIDogdGV4dDcobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZTEyKTsKfQp2YXIgaW5pdF9yYXcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yYXcuanMiKCkgewogICAgaW5pdF90ZXh0NCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcm9vdC5qcwpmdW5jdGlvbiByb290NChub2RlMiwgXzEsIF8yMiwgc3RhdGUxMikgewogIHJldHVybiBzdGF0ZTEyLmFsbChub2RlMik7Cn0KdmFyIGluaXRfcm9vdDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yb290LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2luZGV4LmpzCmZ1bmN0aW9uIGludmFsaWQyKG5vZGUyKSB7CiAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlLCBub3QgYCIgKyBub2RlMiArICJgIik7Cn0KZnVuY3Rpb24gdW5rbm93bjIobm9kZV8pIHsKICBjb25zdCBub2RlMiA9ICgKICAgIC8qKiBAdHlwZSB7Tm9kZXN9ICovCiAgICBub2RlXwogICk7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tcGlsZSB1bmtub3duIG5vZGUgYCIgKyBub2RlMi50eXBlICsgImAiKTsKfQp2YXIgaGFuZGxlMjsKdmFyIGluaXRfaGFuZGxlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfendpdGNoKCk7CiAgICBpbml0X2NvbW1lbnQoKTsKICAgIGluaXRfZG9jdHlwZSgpOwogICAgaW5pdF9lbGVtZW50KCk7CiAgICBpbml0X3JhdygpOwogICAgaW5pdF9yb290MygpOwogICAgaW5pdF90ZXh0NCgpOwogICAgaGFuZGxlMiA9IHp3aXRjaCgidHlwZSIsIHsKICAgICAgaW52YWxpZDogaW52YWxpZDIsCiAgICAgIHVua25vd246IHVua25vd24yLAogICAgICBoYW5kbGVyczogeyBjb21tZW50OiBjb21tZW50MiwgZG9jdHlwZTogZG9jdHlwZTIsIGVsZW1lbnQ6IGVsZW1lbnQzLCByYXcsIHJvb3Q6IHJvb3Q0LCB0ZXh0OiB0ZXh0NyB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9IdG1sKHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBvcHRpb25zXyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zNjsKICBjb25zdCBxdW90ZSA9IG9wdGlvbnNfLnF1b3RlIHx8ICciJzsKICBjb25zdCBhbHRlcm5hdGl2ZSA9IHF1b3RlID09PSAnIicgPyAiJyIgOiAnIic7CiAgaWYgKHF1b3RlICE9PSAnIicgJiYgcXVvdGUgIT09ICInIikgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHF1b3RlIGAiICsgcXVvdGUgKyAiYCwgZXhwZWN0ZWQgYCdgIG9yIGBcImAiKTsKICB9CiAgY29uc3Qgc3RhdGUxMiA9IHsKICAgIG9uZTogb25lMiwKICAgIGFsbDogYWxsMiwKICAgIHNldHRpbmdzOiB7CiAgICAgIG9taXRPcHRpb25hbFRhZ3M6IG9wdGlvbnNfLm9taXRPcHRpb25hbFRhZ3MgfHwgZmFsc2UsCiAgICAgIGFsbG93UGFyc2VFcnJvcnM6IG9wdGlvbnNfLmFsbG93UGFyc2VFcnJvcnMgfHwgZmFsc2UsCiAgICAgIGFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVyczogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzIHx8IGZhbHNlLAogICAgICBxdW90ZVNtYXJ0OiBvcHRpb25zXy5xdW90ZVNtYXJ0IHx8IGZhbHNlLAogICAgICBwcmVmZXJVbnF1b3RlZDogb3B0aW9uc18ucHJlZmVyVW5xdW90ZWQgfHwgZmFsc2UsCiAgICAgIHRpZ2h0QXR0cmlidXRlczogb3B0aW9uc18udGlnaHRBdHRyaWJ1dGVzIHx8IGZhbHNlLAogICAgICB1cHBlckRvY3R5cGU6IG9wdGlvbnNfLnVwcGVyRG9jdHlwZSB8fCBmYWxzZSwKICAgICAgdGlnaHREb2N0eXBlOiBvcHRpb25zXy50aWdodERvY3R5cGUgfHwgZmFsc2UsCiAgICAgIGJvZ3VzQ29tbWVudHM6IG9wdGlvbnNfLmJvZ3VzQ29tbWVudHMgfHwgZmFsc2UsCiAgICAgIHRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0czogb3B0aW9uc18udGlnaHRDb21tYVNlcGFyYXRlZExpc3RzIHx8IGZhbHNlLAogICAgICB0aWdodFNlbGZDbG9zaW5nOiBvcHRpb25zXy50aWdodFNlbGZDbG9zaW5nIHx8IGZhbHNlLAogICAgICBjb2xsYXBzZUVtcHR5QXR0cmlidXRlczogb3B0aW9uc18uY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgfHwgZmFsc2UsCiAgICAgIGFsbG93RGFuZ2Vyb3VzSHRtbDogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNIdG1sIHx8IGZhbHNlLAogICAgICB2b2lkczogb3B0aW9uc18udm9pZHMgfHwgaHRtbFZvaWRFbGVtZW50cywKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlczogb3B0aW9uc18uY2hhcmFjdGVyUmVmZXJlbmNlcyB8fCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsCiAgICAgIGNsb3NlU2VsZkNsb3Npbmc6IG9wdGlvbnNfLmNsb3NlU2VsZkNsb3NpbmcgfHwgZmFsc2UsCiAgICAgIGNsb3NlRW1wdHlFbGVtZW50czogb3B0aW9uc18uY2xvc2VFbXB0eUVsZW1lbnRzIHx8IGZhbHNlCiAgICB9LAogICAgc2NoZW1hOiBvcHRpb25zXy5zcGFjZSA9PT0gInN2ZyIgPyBzdmcyIDogaHRtbDQsCiAgICBxdW90ZSwKICAgIGFsdGVybmF0aXZlCiAgfTsKICByZXR1cm4gc3RhdGUxMi5vbmUoCiAgICBBcnJheS5pc0FycmF5KHRyZWUpID8geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiB0cmVlIH0gOiB0cmVlLAogICAgdm9pZCAwLAogICAgdm9pZCAwCiAgKTsKfQpmdW5jdGlvbiBvbmUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiBoYW5kbGUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCwgdGhpcyk7Cn0KZnVuY3Rpb24gYWxsMihwYXJlbnQpIHsKICBjb25zdCByZXN1bHRzID0gW107CiAgY29uc3QgY2hpbGRyZW4yID0gcGFyZW50ICYmIHBhcmVudC5jaGlsZHJlbiB8fCBlbXB0eUNoaWxkcmVuMjsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgcmVzdWx0c1tpbmRleDJdID0gdGhpcy5vbmUoY2hpbGRyZW4yW2luZGV4Ml0sIGluZGV4MiwgcGFyZW50KTsKICB9CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KdmFyIGVtcHR5T3B0aW9uczYsIGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcywgZW1wdHlDaGlsZHJlbjI7CnZhciBpbml0X2xpYjMwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWxfdm9pZF9lbGVtZW50cygpOwogICAgaW5pdF9wcm9wZXJ0eV9pbmZvcm1hdGlvbigpOwogICAgaW5pdF9oYW5kbGUyKCk7CiAgICBlbXB0eU9wdGlvbnM2ID0ge307CiAgICBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMgPSB7fTsKICAgIGVtcHR5Q2hpbGRyZW4yID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3RvX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrSHRtbChvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgc2FuaXRpemU6IGNsZWFuLCAuLi50b0h0bWxPcHRpb25zIH0gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczc7CiAgbGV0IGFsbG93RGFuZ2Vyb3VzSHRtbCA9IGZhbHNlOwogIGxldCBzY2hlbWE7CiAgaWYgKHR5cGVvZiBjbGVhbiA9PT0gImJvb2xlYW4iKSB7CiAgICBhbGxvd0Rhbmdlcm91c0h0bWwgPSAhY2xlYW47CiAgfSBlbHNlIGlmIChjbGVhbikgewogICAgc2NoZW1hID0gY2xlYW47CiAgfQogIHNlbGYyLmNvbXBpbGVyID0gY29tcGlsZXIyOwogIGZ1bmN0aW9uIGNvbXBpbGVyMih0cmVlLCBmaWxlKSB7CiAgICBjb25zdCBoYXN0ID0gdG9IYXN0KHRyZWUsIHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgYWxsb3dEYW5nZXJvdXNIdG1sIH0pOwogICAgY29uc3Qgc2FmZUhhc3QgPSBhbGxvd0Rhbmdlcm91c0h0bWwgPyBoYXN0IDogc2FuaXRpemUoaGFzdCwgc2NoZW1hKTsKICAgIGNvbnN0IHJlc3VsdCA9IHRvSHRtbChzYWZlSGFzdCwgeyAuLi50b0h0bWxPcHRpb25zLCBhbGxvd0Rhbmdlcm91c0h0bWwgfSk7CiAgICBpZiAoZmlsZS5leHRuYW1lKSB7CiAgICAgIGZpbGUuZXh0bmFtZSA9ICIuaHRtbCI7CiAgICB9CiAgICByZXR1cm4gdHJlZSAmJiB0cmVlLnR5cGUgPT09ICJyb290IiAmJiByZXN1bHQgJiYgL1teXHJcbl0vLnRlc3QocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkpID8gcmVzdWx0ICsgIlxuIiA6IHJlc3VsdDsKICB9Cn0KdmFyIGVtcHR5T3B0aW9uczc7CnZhciBpbml0X2xpYjMxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfc2FuaXRpemUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19oYXN0KCk7CiAgICBpbml0X2hhc3RfdXRpbF90b19odG1sKCk7CiAgICBlbXB0eU9wdGlvbnM3ID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstaHRtbEAxNi4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1odG1sL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMxKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrU3RyaW5naWZ5KG9wdGlvbnMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgc2VsZjIuY29tcGlsZXIgPSBjb21waWxlcjI7CiAgZnVuY3Rpb24gY29tcGlsZXIyKHRyZWUpIHsKICAgIHJldHVybiB0b01hcmtkb3duKHRyZWUsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhpcyBvcHRpb24gaXMgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciBpdCB0byBiZSBzZXQgYnkgcGx1Z2lucyBvbiBgZGF0YWAgaW5zdGVhZCBvZiBiZWluZwogICAgICAvLyBwYXNzZWQgYnkgdXNlcnMuCiAgICAgIGV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoInRvTWFya2Rvd25FeHRlbnNpb25zIikgfHwgW10KICAgIH0pOwogIH0KfQp2YXIgaW5pdF9saWIzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2luZGV4LmpzCnZhciBpbml0X3JlbWFya19zdHJpbmdpZnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bkA3LjIuMi9ub2RlX21vZHVsZXMvdHVybmRvd24vbGliL3R1cm5kb3duLmJyb3dzZXIuZXMuanMKZnVuY3Rpb24gZXh0ZW5kMihkZXN0aW5hdGlvbikgewogIGZvciAodmFyIGkxMSA9IDE7IGkxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2kxMV07CiAgICBmb3IgKHZhciBrZXkyIGluIHNvdXJjZSkgewogICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleTIpKSBkZXN0aW5hdGlvbltrZXkyXSA9IHNvdXJjZVtrZXkyXTsKICAgIH0KICB9CiAgcmV0dXJuIGRlc3RpbmF0aW9uOwp9CmZ1bmN0aW9uIHJlcGVhdDIoY2hhcmFjdGVyLCBjb3VudDIpIHsKICByZXR1cm4gQXJyYXkoY291bnQyICsgMSkuam9pbihjaGFyYWN0ZXIpOwp9CmZ1bmN0aW9uIHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHJldHVybiBzdHJpbmczLnJlcGxhY2UoL15cbiovLCAiIik7Cn0KZnVuY3Rpb24gdHJpbVRyYWlsaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHZhciBpbmRleEVuZCA9IHN0cmluZzMubGVuZ3RoOwogIHdoaWxlIChpbmRleEVuZCA+IDAgJiYgc3RyaW5nM1tpbmRleEVuZCAtIDFdID09PSAiXG4iKSBpbmRleEVuZC0tOwogIHJldHVybiBzdHJpbmczLnN1YnN0cmluZygwLCBpbmRleEVuZCk7Cn0KZnVuY3Rpb24gdHJpbU5ld2xpbmVzKHN0cmluZzMpIHsKICByZXR1cm4gdHJpbVRyYWlsaW5nTmV3bGluZXModHJpbUxlYWRpbmdOZXdsaW5lcyhzdHJpbmczKSk7Cn0KZnVuY3Rpb24gaXNCbG9jayhub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIGJsb2NrRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGlzVm9pZChub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaGFzVm9pZChub2RlMikgewogIHJldHVybiBoYXMobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGlzMihub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBoYXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGhhcyhub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBpczIobm9kZTIsIHRhZ05hbWVzKSB7CiAgcmV0dXJuIHRhZ05hbWVzLmluZGV4T2Yobm9kZTIubm9kZU5hbWUpID49IDA7Cn0KZnVuY3Rpb24gaGFzKG5vZGUyLCB0YWdOYW1lcykgewogIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSAmJiB0YWdOYW1lcy5zb21lKGZ1bmN0aW9uKHRhZ05hbWUpIHsKICAgIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKS5sZW5ndGg7CiAgfSk7Cn0KZnVuY3Rpb24gY2xlYW5BdHRyaWJ1dGUoYXR0cmlidXRlKSB7CiAgcmV0dXJuIGF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS5yZXBsYWNlKC8oXG4rXHMqKSsvZywgIlxuIikgOiAiIjsKfQpmdW5jdGlvbiBSdWxlcyhvcHRpb25zKSB7CiAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKICB0aGlzLl9rZWVwID0gW107CiAgdGhpcy5fcmVtb3ZlID0gW107CiAgdGhpcy5ibGFua1J1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5ibGFua1JlcGxhY2VtZW50CiAgfTsKICB0aGlzLmtlZXBSZXBsYWNlbWVudCA9IG9wdGlvbnMua2VlcFJlcGxhY2VtZW50OwogIHRoaXMuZGVmYXVsdFJ1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5kZWZhdWx0UmVwbGFjZW1lbnQKICB9OwogIHRoaXMuYXJyYXkgPSBbXTsKICBmb3IgKHZhciBrZXkyIGluIG9wdGlvbnMucnVsZXMpIHRoaXMuYXJyYXkucHVzaChvcHRpb25zLnJ1bGVzW2tleTJdKTsKfQpmdW5jdGlvbiBmaW5kUnVsZShydWxlczMsIG5vZGUyLCBvcHRpb25zKSB7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcnVsZXMzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhciBydWxlID0gcnVsZXMzW2kxMV07CiAgICBpZiAoZmlsdGVyVmFsdWUocnVsZSwgbm9kZTIsIG9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQpmdW5jdGlvbiBmaWx0ZXJWYWx1ZShydWxlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBmaWx0ZXIyID0gcnVsZS5maWx0ZXI7CiAgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAic3RyaW5nIikgewogICAgaWYgKGZpbHRlcjIgPT09IG5vZGUyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiB0cnVlOwogIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIyKSkgewogICAgaWYgKGZpbHRlcjIuaW5kZXhPZihub2RlMi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAiZnVuY3Rpb24iKSB7CiAgICBpZiAoZmlsdGVyMi5jYWxsKHJ1bGUsIG5vZGUyLCBvcHRpb25zKSkgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBmaWx0ZXJgIG5lZWRzIHRvIGJlIGEgc3RyaW5nLCBhcnJheSwgb3IgZnVuY3Rpb24iKTsKICB9Cn0KZnVuY3Rpb24gY29sbGFwc2VXaGl0ZXNwYWNlKG9wdGlvbnMpIHsKICB2YXIgZWxlbWVudDQgPSBvcHRpb25zLmVsZW1lbnQ7CiAgdmFyIGlzQmxvY2syID0gb3B0aW9ucy5pc0Jsb2NrOwogIHZhciBpc1ZvaWQyID0gb3B0aW9ucy5pc1ZvaWQ7CiAgdmFyIGlzUHJlID0gb3B0aW9ucy5pc1ByZSB8fCBmdW5jdGlvbihub2RlMykgewogICAgcmV0dXJuIG5vZGUzLm5vZGVOYW1lID09PSAiUFJFIjsKICB9OwogIGlmICghZWxlbWVudDQuZmlyc3RDaGlsZCB8fCBpc1ByZShlbGVtZW50NCkpIHJldHVybjsKICB2YXIgcHJldlRleHQgPSBudWxsOwogIHZhciBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgdmFyIHByZXYgPSBudWxsOwogIHZhciBub2RlMiA9IG5leHQocHJldiwgZWxlbWVudDQsIGlzUHJlKTsKICB3aGlsZSAobm9kZTIgIT09IGVsZW1lbnQ0KSB7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMgfHwgbm9kZTIubm9kZVR5cGUgPT09IDQpIHsKICAgICAgdmFyIHRleHQ5ID0gbm9kZTIuZGF0YS5yZXBsYWNlKC9bIFxyXG5cdF0rL2csICIgIik7CiAgICAgIGlmICgoIXByZXZUZXh0IHx8IC8gJC8udGVzdChwcmV2VGV4dC5kYXRhKSkgJiYgIWtlZXBMZWFkaW5nV3MgJiYgdGV4dDlbMF0gPT09ICIgIikgewogICAgICAgIHRleHQ5ID0gdGV4dDkuc3Vic3RyKDEpOwogICAgICB9CiAgICAgIGlmICghdGV4dDkpIHsKICAgICAgICBub2RlMiA9IHJlbW92ZShub2RlMik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgbm9kZTIuZGF0YSA9IHRleHQ5OwogICAgICBwcmV2VGV4dCA9IG5vZGUyOwogICAgfSBlbHNlIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gMSkgewogICAgICBpZiAoaXNCbG9jazIobm9kZTIpIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQlIiKSB7CiAgICAgICAgaWYgKHByZXZUZXh0KSB7CiAgICAgICAgICBwcmV2VGV4dC5kYXRhID0gcHJldlRleHQuZGF0YS5yZXBsYWNlKC8gJC8sICIiKTsKICAgICAgICB9CiAgICAgICAgcHJldlRleHQgPSBudWxsOwogICAgICAgIGtlZXBMZWFkaW5nV3MgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChpc1ZvaWQyKG5vZGUyKSB8fCBpc1ByZShub2RlMikpIHsKICAgICAgICBwcmV2VGV4dCA9IG51bGw7CiAgICAgICAga2VlcExlYWRpbmdXcyA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAocHJldlRleHQpIHsKICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyID0gcmVtb3ZlKG5vZGUyKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICB2YXIgbmV4dE5vZGUgPSBuZXh0KHByZXYsIG5vZGUyLCBpc1ByZSk7CiAgICBwcmV2ID0gbm9kZTI7CiAgICBub2RlMiA9IG5leHROb2RlOwogIH0KICBpZiAocHJldlRleHQpIHsKICAgIHByZXZUZXh0LmRhdGEgPSBwcmV2VGV4dC5kYXRhLnJlcGxhY2UoLyAkLywgIiIpOwogICAgaWYgKCFwcmV2VGV4dC5kYXRhKSB7CiAgICAgIHJlbW92ZShwcmV2VGV4dCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHJlbW92ZShub2RlMikgewogIHZhciBuZXh0MiA9IG5vZGUyLm5leHRTaWJsaW5nIHx8IG5vZGUyLnBhcmVudE5vZGU7CiAgbm9kZTIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlMik7CiAgcmV0dXJuIG5leHQyOwp9CmZ1bmN0aW9uIG5leHQocHJldiwgY3VycmVudCwgaXNQcmUpIHsKICBpZiAocHJldiAmJiBwcmV2LnBhcmVudE5vZGUgPT09IGN1cnJlbnQgfHwgaXNQcmUoY3VycmVudCkpIHsKICAgIHJldHVybiBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKICB9CiAgcmV0dXJuIGN1cnJlbnQuZmlyc3RDaGlsZCB8fCBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKfQpmdW5jdGlvbiBjYW5QYXJzZUhUTUxOYXRpdmVseSgpIHsKICB2YXIgUGFyc2VyMiA9IHJvb3Q1LkRPTVBhcnNlcjsKICB2YXIgY2FuUGFyc2UgPSBmYWxzZTsKICB0cnkgewogICAgaWYgKG5ldyBQYXJzZXIyKCkucGFyc2VGcm9tU3RyaW5nKCIiLCAidGV4dC9odG1sIikpIHsKICAgICAgY2FuUGFyc2UgPSB0cnVlOwogICAgfQogIH0gY2F0Y2ggKGUxMSkgewogIH0KICByZXR1cm4gY2FuUGFyc2U7Cn0KZnVuY3Rpb24gY3JlYXRlSFRNTFBhcnNlcigpIHsKICB2YXIgUGFyc2VyMiA9IGZ1bmN0aW9uKCkgewogIH07CiAgewogICAgaWYgKHNob3VsZFVzZUFjdGl2ZVgoKSkgewogICAgICBQYXJzZXIyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmczKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTsKICAgICAgICBkb2MuZGVzaWduTW9kZSA9ICJvbiI7CiAgICAgICAgZG9jLm9wZW4oKTsKICAgICAgICBkb2Mud3JpdGUoc3RyaW5nMyk7CiAgICAgICAgZG9jLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGRvYzsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIFBhcnNlcjIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZzMpIHsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKTsKICAgICAgICBkb2Mub3BlbigpOwogICAgICAgIGRvYy53cml0ZShzdHJpbmczKTsKICAgICAgICBkb2MuY2xvc2UoKTsKICAgICAgICByZXR1cm4gZG9jOwogICAgICB9OwogICAgfQogIH0KICByZXR1cm4gUGFyc2VyMjsKfQpmdW5jdGlvbiBzaG91bGRVc2VBY3RpdmVYKCkgewogIHZhciB1c2VBY3RpdmVYID0gZmFsc2U7CiAgdHJ5IHsKICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpOwogIH0gY2F0Y2ggKGUxMSkgewogICAgaWYgKHJvb3Q1LkFjdGl2ZVhPYmplY3QpIHVzZUFjdGl2ZVggPSB0cnVlOwogIH0KICByZXR1cm4gdXNlQWN0aXZlWDsKfQpmdW5jdGlvbiBSb290Tm9kZShpbnB1dCwgb3B0aW9ucykgewogIHZhciByb290NjsKICBpZiAodHlwZW9mIGlucHV0ID09PSAic3RyaW5nIikgewogICAgdmFyIGRvYyA9IGh0bWxQYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoCiAgICAgIC8vIERPTSBwYXJzZXJzIGFycmFuZ2UgZWxlbWVudHMgaW4gdGhlIDxoZWFkPiBhbmQgPGJvZHk+LgogICAgICAvLyBXcmFwcGluZyBpbiBhIGN1c3RvbSBlbGVtZW50IGVuc3VyZXMgZWxlbWVudHMgYXJlIHJlbGlhYmx5IGFycmFuZ2VkIGluCiAgICAgIC8vIGEgc2luZ2xlIGVsZW1lbnQuCiAgICAgICc8eC10dXJuZG93biBpZD0idHVybmRvd24tcm9vdCI+JyArIGlucHV0ICsgIjwveC10dXJuZG93bj4iLAogICAgICAidGV4dC9odG1sIgogICAgKTsKICAgIHJvb3Q2ID0gZG9jLmdldEVsZW1lbnRCeUlkKCJ0dXJuZG93bi1yb290Iik7CiAgfSBlbHNlIHsKICAgIHJvb3Q2ID0gaW5wdXQuY2xvbmVOb2RlKHRydWUpOwogIH0KICBjb2xsYXBzZVdoaXRlc3BhY2UoewogICAgZWxlbWVudDogcm9vdDYsCiAgICBpc0Jsb2NrLAogICAgaXNWb2lkLAogICAgaXNQcmU6IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSA/IGlzUHJlT3JDb2RlIDogbnVsbAogIH0pOwogIHJldHVybiByb290NjsKfQpmdW5jdGlvbiBodG1sUGFyc2VyKCkgewogIF9odG1sUGFyc2VyID0gX2h0bWxQYXJzZXIgfHwgbmV3IEhUTUxQYXJzZXIoKTsKICByZXR1cm4gX2h0bWxQYXJzZXI7Cn0KZnVuY3Rpb24gaXNQcmVPckNvZGUobm9kZTIpIHsKICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQ09ERSI7Cn0KZnVuY3Rpb24gTm9kZTIobm9kZTIsIG9wdGlvbnMpIHsKICBub2RlMi5pc0Jsb2NrID0gaXNCbG9jayhub2RlMik7CiAgbm9kZTIuaXNDb2RlID0gbm9kZTIubm9kZU5hbWUgPT09ICJDT0RFIiB8fCBub2RlMi5wYXJlbnROb2RlLmlzQ29kZTsKICBub2RlMi5pc0JsYW5rID0gaXNCbGFuayhub2RlMik7CiAgbm9kZTIuZmxhbmtpbmdXaGl0ZXNwYWNlID0gZmxhbmtpbmdXaGl0ZXNwYWNlKG5vZGUyLCBvcHRpb25zKTsKICByZXR1cm4gbm9kZTI7Cn0KZnVuY3Rpb24gaXNCbGFuayhub2RlMikgewogIHJldHVybiAhaXNWb2lkKG5vZGUyKSAmJiAhaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSAmJiAvXlxzKiQvaS50ZXN0KG5vZGUyLnRleHRDb250ZW50KSAmJiAhaGFzVm9pZChub2RlMikgJiYgIWhhc01lYW5pbmdmdWxXaGVuQmxhbmsobm9kZTIpOwp9CmZ1bmN0aW9uIGZsYW5raW5nV2hpdGVzcGFjZShub2RlMiwgb3B0aW9ucykgewogIGlmIChub2RlMi5pc0Jsb2NrIHx8IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSAmJiBub2RlMi5pc0NvZGUpIHsKICAgIHJldHVybiB7IGxlYWRpbmc6ICIiLCB0cmFpbGluZzogIiIgfTsKICB9CiAgdmFyIGVkZ2VzID0gZWRnZVdoaXRlc3BhY2Uobm9kZTIudGV4dENvbnRlbnQpOwogIGlmIChlZGdlcy5sZWFkaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCJsZWZ0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy5sZWFkaW5nID0gZWRnZXMubGVhZGluZ05vbkFzY2lpOwogIH0KICBpZiAoZWRnZXMudHJhaWxpbmdBc2NpaSAmJiBpc0ZsYW5rZWRCeVdoaXRlc3BhY2UoInJpZ2h0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy50cmFpbGluZyA9IGVkZ2VzLnRyYWlsaW5nTm9uQXNjaWk7CiAgfQogIHJldHVybiB7IGxlYWRpbmc6IGVkZ2VzLmxlYWRpbmcsIHRyYWlsaW5nOiBlZGdlcy50cmFpbGluZyB9Owp9CmZ1bmN0aW9uIGVkZ2VXaGl0ZXNwYWNlKHN0cmluZzMpIHsKICB2YXIgbTYgPSBzdHJpbmczLm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7CiAgcmV0dXJuIHsKICAgIGxlYWRpbmc6IG02WzFdLAogICAgLy8gd2hvbGUgc3RyaW5nIGZvciB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5ncwogICAgbGVhZGluZ0FzY2lpOiBtNlsyXSwKICAgIGxlYWRpbmdOb25Bc2NpaTogbTZbM10sCiAgICB0cmFpbGluZzogbTZbNF0sCiAgICAvLyBlbXB0eSBmb3Igd2hpdGVzcGFjZS1vbmx5IHN0cmluZ3MKICAgIHRyYWlsaW5nTm9uQXNjaWk6IG02WzVdLAogICAgdHJhaWxpbmdBc2NpaTogbTZbNl0KICB9Owp9CmZ1bmN0aW9uIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZShzaWRlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBzaWJsaW5nOwogIHZhciByZWdFeHA7CiAgdmFyIGlzRmxhbmtlZDsKICBpZiAoc2lkZSA9PT0gImxlZnQiKSB7CiAgICBzaWJsaW5nID0gbm9kZTIucHJldmlvdXNTaWJsaW5nOwogICAgcmVnRXhwID0gLyAkLzsKICB9IGVsc2UgewogICAgc2libGluZyA9IG5vZGUyLm5leHRTaWJsaW5nOwogICAgcmVnRXhwID0gL14gLzsKICB9CiAgaWYgKHNpYmxpbmcpIHsKICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7CiAgICAgIGlzRmxhbmtlZCA9IHJlZ0V4cC50ZXN0KHNpYmxpbmcubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVmb3JtYXR0ZWRDb2RlICYmIHNpYmxpbmcubm9kZU5hbWUgPT09ICJDT0RFIikgewogICAgICBpc0ZsYW5rZWQgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMSAmJiAhaXNCbG9jayhzaWJsaW5nKSkgewogICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLnRleHRDb250ZW50KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzRmxhbmtlZDsKfQpmdW5jdGlvbiBUdXJuZG93blNlcnZpY2Uob3B0aW9ucykgewogIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUdXJuZG93blNlcnZpY2UpKSByZXR1cm4gbmV3IFR1cm5kb3duU2VydmljZShvcHRpb25zKTsKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBydWxlcywKICAgIGhlYWRpbmdTdHlsZTogInNldGV4dCIsCiAgICBocjogIiogKiAqIiwKICAgIGJ1bGxldExpc3RNYXJrZXI6ICIqIiwKICAgIGNvZGVCbG9ja1N0eWxlOiAiaW5kZW50ZWQiLAogICAgZmVuY2U6ICJgYGAiLAogICAgZW1EZWxpbWl0ZXI6ICJfIiwKICAgIHN0cm9uZ0RlbGltaXRlcjogIioqIiwKICAgIGxpbmtTdHlsZTogImlubGluZWQiLAogICAgbGlua1JlZmVyZW5jZVN0eWxlOiAiZnVsbCIsCiAgICBicjogIiAgIiwKICAgIHByZWZvcm1hdHRlZENvZGU6IGZhbHNlLAogICAgYmxhbmtSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iIDogIiI7CiAgICB9LAogICAga2VlcFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBub2RlMi5vdXRlckhUTUwgKyAiXG5cbiIgOiBub2RlMi5vdXRlckhUTUw7CiAgICB9LAogICAgZGVmYXVsdFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIiA6IGNvbnRlbnQzOwogICAgfQogIH07CiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kMih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpOwogIHRoaXMucnVsZXMgPSBuZXcgUnVsZXModGhpcy5vcHRpb25zKTsKfQpmdW5jdGlvbiBwcm9jZXNzMyhwYXJlbnROb2RlKSB7CiAgdmFyIHNlbGYyID0gdGhpczsKICByZXR1cm4gcmVkdWNlMi5jYWxsKHBhcmVudE5vZGUuY2hpbGROb2RlcywgZnVuY3Rpb24ob3V0cHV0LCBub2RlMikgewogICAgbm9kZTIgPSBuZXcgTm9kZTIobm9kZTIsIHNlbGYyLm9wdGlvbnMpOwogICAgdmFyIHJlcGxhY2VtZW50ID0gIiI7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMpIHsKICAgICAgcmVwbGFjZW1lbnQgPSBub2RlMi5pc0NvZGUgPyBub2RlMi5ub2RlVmFsdWUgOiBzZWxmMi5lc2NhcGUobm9kZTIubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAobm9kZTIubm9kZVR5cGUgPT09IDEpIHsKICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudEZvck5vZGUuY2FsbChzZWxmMiwgbm9kZTIpOwogICAgfQogICAgcmV0dXJuIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpOwogIH0sICIiKTsKfQpmdW5jdGlvbiBwb3N0UHJvY2VzcyhvdXRwdXQpIHsKICB2YXIgc2VsZjIgPSB0aGlzOwogIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7CiAgICBpZiAodHlwZW9mIHJ1bGUuYXBwZW5kID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIG91dHB1dCA9IGpvaW4zKG91dHB1dCwgcnVsZS5hcHBlbmQoc2VsZjIub3B0aW9ucykpOwogICAgfQogIH0pOwogIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXltcdFxyXG5dKy8sICIiKS5yZXBsYWNlKC9bXHRcclxuXHNdKyQvLCAiIik7Cn0KZnVuY3Rpb24gcmVwbGFjZW1lbnRGb3JOb2RlKG5vZGUyKSB7CiAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzLmZvck5vZGUobm9kZTIpOwogIHZhciBjb250ZW50MyA9IHByb2Nlc3MzLmNhbGwodGhpcywgbm9kZTIpOwogIHZhciB3aGl0ZXNwYWNlMiA9IG5vZGUyLmZsYW5raW5nV2hpdGVzcGFjZTsKICBpZiAod2hpdGVzcGFjZTIubGVhZGluZyB8fCB3aGl0ZXNwYWNlMi50cmFpbGluZykgY29udGVudDMgPSBjb250ZW50My50cmltKCk7CiAgcmV0dXJuIHdoaXRlc3BhY2UyLmxlYWRpbmcgKyBydWxlLnJlcGxhY2VtZW50KGNvbnRlbnQzLCBub2RlMiwgdGhpcy5vcHRpb25zKSArIHdoaXRlc3BhY2UyLnRyYWlsaW5nOwp9CmZ1bmN0aW9uIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpIHsKICB2YXIgczEgPSB0cmltVHJhaWxpbmdOZXdsaW5lcyhvdXRwdXQpOwogIHZhciBzMjIgPSB0cmltTGVhZGluZ05ld2xpbmVzKHJlcGxhY2VtZW50KTsKICB2YXIgbmxzID0gTWF0aC5tYXgob3V0cHV0Lmxlbmd0aCAtIHMxLmxlbmd0aCwgcmVwbGFjZW1lbnQubGVuZ3RoIC0gczIyLmxlbmd0aCk7CiAgdmFyIHNlcGFyYXRvciA9ICJcblxuIi5zdWJzdHJpbmcoMCwgbmxzKTsKICByZXR1cm4gczEgKyBzZXBhcmF0b3IgKyBzMjI7Cn0KZnVuY3Rpb24gY2FuQ29udmVydChpbnB1dCkgewogIHJldHVybiBpbnB1dCAhPSBudWxsICYmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciIHx8IGlucHV0Lm5vZGVUeXBlICYmIChpbnB1dC5ub2RlVHlwZSA9PT0gMSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gOSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gMTEpKTsKfQp2YXIgYmxvY2tFbGVtZW50cywgdm9pZEVsZW1lbnRzLCBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMsIHJ1bGVzLCByb290NSwgSFRNTFBhcnNlciwgX2h0bWxQYXJzZXIsIHJlZHVjZTIsIGVzY2FwZXMsIHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdDsKdmFyIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3R1cm5kb3duQDcuMi4yL25vZGVfbW9kdWxlcy90dXJuZG93bi9saWIvdHVybmRvd24uYnJvd3Nlci5lcy5qcyIoKSB7CiAgICBibG9ja0VsZW1lbnRzID0gWwogICAgICAiQUREUkVTUyIsCiAgICAgICJBUlRJQ0xFIiwKICAgICAgIkFTSURFIiwKICAgICAgIkFVRElPIiwKICAgICAgIkJMT0NLUVVPVEUiLAogICAgICAiQk9EWSIsCiAgICAgICJDQU5WQVMiLAogICAgICAiQ0VOVEVSIiwKICAgICAgIkREIiwKICAgICAgIkRJUiIsCiAgICAgICJESVYiLAogICAgICAiREwiLAogICAgICAiRFQiLAogICAgICAiRklFTERTRVQiLAogICAgICAiRklHQ0FQVElPTiIsCiAgICAgICJGSUdVUkUiLAogICAgICAiRk9PVEVSIiwKICAgICAgIkZPUk0iLAogICAgICAiRlJBTUVTRVQiLAogICAgICAiSDEiLAogICAgICAiSDIiLAogICAgICAiSDMiLAogICAgICAiSDQiLAogICAgICAiSDUiLAogICAgICAiSDYiLAogICAgICAiSEVBREVSIiwKICAgICAgIkhHUk9VUCIsCiAgICAgICJIUiIsCiAgICAgICJIVE1MIiwKICAgICAgIklTSU5ERVgiLAogICAgICAiTEkiLAogICAgICAiTUFJTiIsCiAgICAgICJNRU5VIiwKICAgICAgIk5BViIsCiAgICAgICJOT0ZSQU1FUyIsCiAgICAgICJOT1NDUklQVCIsCiAgICAgICJPTCIsCiAgICAgICJPVVRQVVQiLAogICAgICAiUCIsCiAgICAgICJQUkUiLAogICAgICAiU0VDVElPTiIsCiAgICAgICJUQUJMRSIsCiAgICAgICJUQk9EWSIsCiAgICAgICJURCIsCiAgICAgICJURk9PVCIsCiAgICAgICJUSCIsCiAgICAgICJUSEVBRCIsCiAgICAgICJUUiIsCiAgICAgICJVTCIKICAgIF07CiAgICB2b2lkRWxlbWVudHMgPSBbCiAgICAgICJBUkVBIiwKICAgICAgIkJBU0UiLAogICAgICAiQlIiLAogICAgICAiQ09MIiwKICAgICAgIkNPTU1BTkQiLAogICAgICAiRU1CRUQiLAogICAgICAiSFIiLAogICAgICAiSU1HIiwKICAgICAgIklOUFVUIiwKICAgICAgIktFWUdFTiIsCiAgICAgICJMSU5LIiwKICAgICAgIk1FVEEiLAogICAgICAiUEFSQU0iLAogICAgICAiU09VUkNFIiwKICAgICAgIlRSQUNLIiwKICAgICAgIldCUiIKICAgIF07CiAgICBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMgPSBbCiAgICAgICJBIiwKICAgICAgIlRBQkxFIiwKICAgICAgIlRIRUFEIiwKICAgICAgIlRCT0RZIiwKICAgICAgIlRGT09UIiwKICAgICAgIlRIIiwKICAgICAgIlREIiwKICAgICAgIklGUkFNRSIsCiAgICAgICJTQ1JJUFQiLAogICAgICAiQVVESU8iLAogICAgICAiVklERU8iCiAgICBdOwogICAgcnVsZXMgPSB7fTsKICAgIHJ1bGVzLnBhcmFncmFwaCA9IHsKICAgICAgZmlsdGVyOiAicCIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpbmVCcmVhayA9IHsKICAgICAgZmlsdGVyOiAiYnIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYnIgKyAiXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuaGVhZGluZyA9IHsKICAgICAgZmlsdGVyOiBbImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaExldmVsID0gTnVtYmVyKG5vZGUyLm5vZGVOYW1lLmNoYXJBdCgxKSk7CiAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGluZ1N0eWxlID09PSAic2V0ZXh0IiAmJiBoTGV2ZWwgPCAzKSB7CiAgICAgICAgICB2YXIgdW5kZXJsaW5lID0gcmVwZWF0MihoTGV2ZWwgPT09IDEgPyAiPSIgOiAiLSIsIGNvbnRlbnQzLmxlbmd0aCk7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG4iICsgdW5kZXJsaW5lICsgIlxuXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgcmVwZWF0MigiIyIsIGhMZXZlbCkgKyAiICIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5ibG9ja3F1b3RlID0gewogICAgICBmaWx0ZXI6ICJibG9ja3F1b3RlIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSB0cmltTmV3bGluZXMoY29udGVudDMpLnJlcGxhY2UoL14vZ20sICI+ICIpOwogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpc3QgPSB7CiAgICAgIGZpbHRlcjogWyJ1bCIsICJvbCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gIkxJIiAmJiBwYXJlbnQubGFzdEVsZW1lbnRDaGlsZCA9PT0gbm9kZTIpIHsKICAgICAgICAgIHJldHVybiAiXG4iICsgY29udGVudDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saXN0SXRlbSA9IHsKICAgICAgZmlsdGVyOiAibGkiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHByZWZpeDQgPSBvcHRpb25zLmJ1bGxldExpc3RNYXJrZXIgKyAiICAgIjsKICAgICAgICB2YXIgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTsKICAgICAgICBpZiAocGFyZW50Lm5vZGVOYW1lID09PSAiT0wiKSB7CiAgICAgICAgICB2YXIgc3RhcnQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJzdGFydCIpOwogICAgICAgICAgdmFyIGluZGV4MiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocGFyZW50LmNoaWxkcmVuLCBub2RlMik7CiAgICAgICAgICBwcmVmaXg0ID0gKHN0YXJ0ID8gTnVtYmVyKHN0YXJ0KSArIGluZGV4MiA6IGluZGV4MiArIDEpICsgIi4gICI7CiAgICAgICAgfQogICAgICAgIHZhciBpc1BhcmFncmFwaCA9IC9cbiQvLnRlc3QoY29udGVudDMpOwogICAgICAgIGNvbnRlbnQzID0gdHJpbU5ld2xpbmVzKGNvbnRlbnQzKSArIChpc1BhcmFncmFwaCA/ICJcbiIgOiAiIik7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKC9cbi9nbSwgIlxuIiArICIgIi5yZXBlYXQocHJlZml4NC5sZW5ndGgpKTsKICAgICAgICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgKG5vZGUyLm5leHRTaWJsaW5nID8gIlxuIiA6ICIiKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmluZGVudGVkQ29kZUJsb2NrID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29kZUJsb2NrU3R5bGUgPT09ICJpbmRlbnRlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkNPREUiOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuICJcblxuICAgICIgKyBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50LnJlcGxhY2UoL1xuL2csICJcbiAgICAiKSArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmZlbmNlZENvZGVCbG9jayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAiZmVuY2VkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgbm9kZTIuZmlyc3RDaGlsZCAmJiBub2RlMi5maXJzdENoaWxkLm5vZGVOYW1lID09PSAiQ09ERSI7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiI7CiAgICAgICAgdmFyIGxhbmd1YWdlID0gKGNsYXNzTmFtZS5tYXRjaCgvbGFuZ3VhZ2UtKFxTKykvKSB8fCBbbnVsbCwgIiJdKVsxXTsKICAgICAgICB2YXIgY29kZTQgPSBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50OwogICAgICAgIHZhciBmZW5jZUNoYXIgPSBvcHRpb25zLmZlbmNlLmNoYXJBdCgwKTsKICAgICAgICB2YXIgZmVuY2VTaXplID0gMzsKICAgICAgICB2YXIgZmVuY2VJbkNvZGVSZWdleCA9IG5ldyBSZWdFeHAoIl4iICsgZmVuY2VDaGFyICsgInszLH0iLCAiZ20iKTsKICAgICAgICB2YXIgbWF0Y2gyOwogICAgICAgIHdoaWxlIChtYXRjaDIgPSBmZW5jZUluQ29kZVJlZ2V4LmV4ZWMoY29kZTQpKSB7CiAgICAgICAgICBpZiAobWF0Y2gyWzBdLmxlbmd0aCA+PSBmZW5jZVNpemUpIHsKICAgICAgICAgICAgZmVuY2VTaXplID0gbWF0Y2gyWzBdLmxlbmd0aCArIDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBmZW5jZTMgPSByZXBlYXQyKGZlbmNlQ2hhciwgZmVuY2VTaXplKTsKICAgICAgICByZXR1cm4gIlxuXG4iICsgZmVuY2UzICsgbGFuZ3VhZ2UgKyAiXG4iICsgY29kZTQucmVwbGFjZSgvXG4kLywgIiIpICsgIlxuIiArIGZlbmNlMyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmhvcml6b250YWxSdWxlID0gewogICAgICBmaWx0ZXI6ICJociIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gIlxuXG4iICsgb3B0aW9ucy5ociArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmlubGluZUxpbmsgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5saW5rU3R5bGUgPT09ICJpbmxpbmVkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIkEiICYmIG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGhyZWYgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICBpZiAoaHJlZikgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFsoKV0pL2csICJcXCQxIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwogICAgICAgIHJldHVybiAiWyIgKyBjb250ZW50MyArICJdKCIgKyBocmVmICsgdGl0bGUgKyAiKSI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5yZWZlcmVuY2VMaW5rID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGlua1N0eWxlID09PSAicmVmZXJlbmNlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJBIiAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHZhciBocmVmID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlICsgJyInOwogICAgICAgIHZhciByZXBsYWNlbWVudDsKICAgICAgICB2YXIgcmVmZXJlbmNlOwogICAgICAgIHN3aXRjaCAob3B0aW9ucy5saW5rUmVmZXJlbmNlU3R5bGUpIHsKICAgICAgICAgIGNhc2UgImNvbGxhcHNlZCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVtdIjsKICAgICAgICAgICAgcmVmZXJlbmNlID0gIlsiICsgY29udGVudDMgKyAiXTogIiArIGhyZWYgKyB0aXRsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJzaG9ydGN1dCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGNvbnRlbnQzICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCArIDE7CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVsiICsgaWQgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGlkICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICB9LAogICAgICByZWZlcmVuY2VzOiBbXSwKICAgICAgYXBwZW5kOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIHJlZmVyZW5jZXMgPSAiIjsKICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzLmxlbmd0aCkgewogICAgICAgICAgcmVmZXJlbmNlcyA9ICJcblxuIiArIHRoaXMucmVmZXJlbmNlcy5qb2luKCJcbiIpICsgIlxuXG4iOwogICAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWZlcmVuY2VzOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuZW1waGFzaXMgPSB7CiAgICAgIGZpbHRlcjogWyJlbSIsICJpIl0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWNvbnRlbnQzLnRyaW0oKSkgcmV0dXJuICIiOwogICAgICAgIHJldHVybiBvcHRpb25zLmVtRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLmVtRGVsaW1pdGVyOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuc3Ryb25nID0gewogICAgICBmaWx0ZXI6IFsic3Ryb25nIiwgImIiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIGlmICghY29udGVudDMudHJpbSgpKSByZXR1cm4gIiI7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3Ryb25nRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLnN0cm9uZ0RlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmNvZGUgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICB2YXIgaGFzU2libGluZ3MgPSBub2RlMi5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgdmFyIGlzQ29kZUJsb2NrID0gbm9kZTIucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgIWhhc1NpYmxpbmdzOwogICAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIkNPREUiICYmICFpc0NvZGVCbG9jazsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgaWYgKCFjb250ZW50MykgcmV0dXJuICIiOwogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKTsKICAgICAgICB2YXIgZXh0cmFTcGFjZSA9IC9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KGNvbnRlbnQzKSA/ICIgIiA6ICIiOwogICAgICAgIHZhciBkZWxpbWl0ZXIgPSAiYCI7CiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb250ZW50My5tYXRjaCgvYCsvZ20pIHx8IFtdOwogICAgICAgIHdoaWxlIChtYXRjaGVzLmluZGV4T2YoZGVsaW1pdGVyKSAhPT0gLTEpIGRlbGltaXRlciA9IGRlbGltaXRlciArICJgIjsKICAgICAgICByZXR1cm4gZGVsaW1pdGVyICsgZXh0cmFTcGFjZSArIGNvbnRlbnQzICsgZXh0cmFTcGFjZSArIGRlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmltYWdlID0gewogICAgICBmaWx0ZXI6ICJpbWciLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGFsdCA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgiYWx0IikpOwogICAgICAgIHZhciBzcmMgPSBub2RlMi5nZXRBdHRyaWJ1dGUoInNyYyIpIHx8ICIiOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgdmFyIHRpdGxlUGFydCA9IHRpdGxlID8gJyAiJyArIHRpdGxlICsgJyInIDogIiI7CiAgICAgICAgcmV0dXJuIHNyYyA/ICIhWyIgKyBhbHQgKyAiXSgiICsgc3JjICsgdGl0bGVQYXJ0ICsgIikiIDogIiI7CiAgICAgIH0KICAgIH07CiAgICBSdWxlcy5wcm90b3R5cGUgPSB7CiAgICAgIGFkZDogZnVuY3Rpb24oa2V5MiwgcnVsZSkgewogICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlKTsKICAgICAgfSwKICAgICAga2VlcDogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMuX2tlZXAudW5zaGlmdCh7CiAgICAgICAgICBmaWx0ZXI6IGZpbHRlcjIsCiAgICAgICAgICByZXBsYWNlbWVudDogdGhpcy5rZWVwUmVwbGFjZW1lbnQKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5fcmVtb3ZlLnVuc2hpZnQoewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGZvck5vZGU6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgaWYgKG5vZGUyLmlzQmxhbmspIHJldHVybiB0aGlzLmJsYW5rUnVsZTsKICAgICAgICB2YXIgcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuYXJyYXksIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX2tlZXAsIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX3JlbW92ZSwgbm9kZTIsIHRoaXMub3B0aW9ucykpIHJldHVybiBydWxlOwogICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRSdWxlOwogICAgICB9LAogICAgICBmb3JFYWNoOiBmdW5jdGlvbihmbikgewogICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpMTErKykgZm4odGhpcy5hcnJheVtpMTFdLCBpMTEpOwogICAgICB9CiAgICB9OwogICAgcm9vdDUgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9OwogICAgSFRNTFBhcnNlciA9IGNhblBhcnNlSFRNTE5hdGl2ZWx5KCkgPyByb290NS5ET01QYXJzZXIgOiBjcmVhdGVIVE1MUGFyc2VyKCk7CiAgICByZWR1Y2UyID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKICAgIGVzY2FwZXMgPSBbCiAgICAgIFsvXFwvZywgIlxcXFwiXSwKICAgICAgWy9cKi9nLCAiXFwqIl0sCiAgICAgIFsvXi0vZywgIlxcLSJdLAogICAgICBbL15cKyAvZywgIlxcKyAiXSwKICAgICAgWy9eKD0rKS9nLCAiXFwkMSJdLAogICAgICBbL14oI3sxLDZ9KSAvZywgIlxcJDEgIl0sCiAgICAgIFsvYC9nLCAiXFxgIl0sCiAgICAgIFsvXn5+fi9nLCAiXFx+fn4iXSwKICAgICAgWy9cWy9nLCAiXFxbIl0sCiAgICAgIFsvXF0vZywgIlxcXSJdLAogICAgICBbL14+L2csICJcXD4iXSwKICAgICAgWy9fL2csICJcXF8iXSwKICAgICAgWy9eKFxkKylcLiAvZywgIiQxXFwuICJdCiAgICBdOwogICAgVHVybmRvd25TZXJ2aWNlLnByb3RvdHlwZSA9IHsKICAgICAgLyoqCiAgICAgICAqIFRoZSBlbnRyeSBwb2ludCBmb3IgY29udmVydGluZyBhIHN0cmluZyBvciBET00gbm9kZSB0byBNYXJrZG93bgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEhUTUxFbGVtZW50fSBpbnB1dCBUaGUgc3RyaW5nIG9yIERPTSBub2RlIHRvIGNvbnZlcnQKICAgICAgICogQHJldHVybnMgQSBNYXJrZG93biByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQKICAgICAgICogQHR5cGUgU3RyaW5nCiAgICAgICAqLwogICAgICB0dXJuZG93bjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICBpZiAoIWNhbkNvbnZlcnQoaW5wdXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICBpbnB1dCArICIgaXMgbm90IGEgc3RyaW5nLCBvciBhbiBlbGVtZW50L2RvY3VtZW50L2ZyYWdtZW50IG5vZGUuIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0ID09PSAiIikgcmV0dXJuICIiOwogICAgICAgIHZhciBvdXRwdXQgPSBwcm9jZXNzMy5jYWxsKHRoaXMsIG5ldyBSb290Tm9kZShpbnB1dCwgdGhpcy5vcHRpb25zKSk7CiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzLmNhbGwodGhpcywgb3V0cHV0KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEFkZCBvbmUgb3IgbW9yZSBwbHVnaW5zCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gcGx1Z2luIFRoZSBwbHVnaW4gb3IgYXJyYXkgb2YgcGx1Z2lucyB0byBhZGQKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIHVzZTogZnVuY3Rpb24ocGx1Z2luKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luKSkgewogICAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcGx1Z2luLmxlbmd0aDsgaTExKyspIHRoaXMudXNlKHBsdWdpbltpMTFdKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBsdWdpbih0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicGx1Z2luIG11c3QgYmUgYSBGdW5jdGlvbiBvciBhbiBBcnJheSBvZiBGdW5jdGlvbnMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGEgcnVsZQogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKGtleTIsIHJ1bGUpIHsKICAgICAgICB0aGlzLnJ1bGVzLmFkZChrZXkyLCBydWxlKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEtlZXAgYSBub2RlIChhcyBIVE1MKSB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlcgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEZ1bmN0aW9ufSBmaWx0ZXIgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGtlZXA6IGZ1bmN0aW9uKGZpbHRlcjIpIHsKICAgICAgICB0aGlzLnJ1bGVzLmtlZXAoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZmlsdGVyCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8RnVuY3Rpb259IGZpbHRlciBUaGUgdW5pcXVlIGtleSBvZiB0aGUgcnVsZQogICAgICAgKiBAcmV0dXJucyBUaGUgVHVybmRvd24gaW5zdGFuY2UgZm9yIGNoYWluaW5nCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKi8KICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5ydWxlcy5yZW1vdmUoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFc2NhcGVzIE1hcmtkb3duIHN5bnRheAogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUKICAgICAgICogQHJldHVybnMgQSBzdHJpbmcgd2l0aCBNYXJrZG93biBzeW50YXggZXNjYXBlZAogICAgICAgKiBAdHlwZSBTdHJpbmcKICAgICAgICovCiAgICAgIGVzY2FwZTogZnVuY3Rpb24oc3RyaW5nMykgewogICAgICAgIHJldHVybiBlc2NhcGVzLnJlZHVjZShmdW5jdGlvbihhY2N1bXVsYXRvciwgZXNjYXBlKSB7CiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IucmVwbGFjZShlc2NhcGVbMF0sIGVzY2FwZVsxXSk7CiAgICAgICAgfSwgc3RyaW5nMyk7CiAgICAgIH0KICAgIH07CiAgICB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQgPSBUdXJuZG93blNlcnZpY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzCnZhciB0dXJuZG93bl9wbHVnaW5fZ2ZtX2VzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLCB7CiAgZ2ZtOiAoKSA9PiBnZm0yLAogIGhpZ2hsaWdodGVkQ29kZUJsb2NrOiAoKSA9PiBoaWdobGlnaHRlZENvZGVCbG9jaywKICBzdHJpa2V0aHJvdWdoOiAoKSA9PiBzdHJpa2V0aHJvdWdoMiwKICB0YWJsZXM6ICgpID0+IHRhYmxlcywKICB0YXNrTGlzdEl0ZW1zOiAoKSA9PiB0YXNrTGlzdEl0ZW1zCn0pOwpmdW5jdGlvbiBoaWdobGlnaHRlZENvZGVCbG9jayh0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UuYWRkUnVsZSgiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHZhciBmaXJzdENoaWxkID0gbm9kZTIuZmlyc3RDaGlsZDsKICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiRElWIiAmJiBoaWdobGlnaHRSZWdFeHAudGVzdChub2RlMi5jbGFzc05hbWUpICYmIGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIlBSRSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuY2xhc3NOYW1lIHx8ICIiOwogICAgICB2YXIgbGFuZ3VhZ2UgPSAoY2xhc3NOYW1lLm1hdGNoKGhpZ2hsaWdodFJlZ0V4cCkgfHwgW251bGwsICIiXSlbMV07CiAgICAgIHJldHVybiAiXG5cbiIgKyBvcHRpb25zLmZlbmNlICsgbGFuZ3VhZ2UgKyAiXG4iICsgbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudCArICJcbiIgKyBvcHRpb25zLmZlbmNlICsgIlxuXG4iOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHN0cmlrZXRocm91Z2gyKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCJzdHJpa2V0aHJvdWdoIiwgewogICAgZmlsdGVyOiBbImRlbCIsICJzIiwgInN0cmlrZSJdLAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgIHJldHVybiAifiIgKyBjb250ZW50MyArICJ+IjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBpc0hlYWRpbmdSb3codHIyKSB7CiAgdmFyIHBhcmVudE5vZGUgPSB0cjIucGFyZW50Tm9kZTsKICByZXR1cm4gcGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRIRUFEIiB8fCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHRyMiAmJiAocGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRBQkxFIiB8fCBpc0ZpcnN0VGJvZHkocGFyZW50Tm9kZSkpICYmIGV2ZXJ5Mi5jYWxsKHRyMi5jaGlsZE5vZGVzLCBmdW5jdGlvbihuMTMpIHsKICAgIHJldHVybiBuMTMubm9kZU5hbWUgPT09ICJUSCI7CiAgfSk7Cn0KZnVuY3Rpb24gaXNGaXJzdFRib2R5KGVsZW1lbnQ0KSB7CiAgdmFyIHByZXZpb3VzU2libGluZyA9IGVsZW1lbnQ0LnByZXZpb3VzU2libGluZzsKICByZXR1cm4gZWxlbWVudDQubm9kZU5hbWUgPT09ICJUQk9EWSIgJiYgKCFwcmV2aW91c1NpYmxpbmcgfHwgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSAiVEhFQUQiICYmIC9eXHMqJC9pLnRlc3QocHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50KSk7Cn0KZnVuY3Rpb24gY2VsbChjb250ZW50Mywgbm9kZTIpIHsKICB2YXIgaW5kZXgyID0gaW5kZXhPZjIuY2FsbChub2RlMi5wYXJlbnROb2RlLmNoaWxkTm9kZXMsIG5vZGUyKTsKICB2YXIgcHJlZml4NCA9ICIgIjsKICBpZiAoaW5kZXgyID09PSAwKSBwcmVmaXg0ID0gInwgIjsKICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgIiB8IjsKfQpmdW5jdGlvbiB0YWJsZXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmtlZXAoZnVuY3Rpb24obm9kZTIpIHsKICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIlRBQkxFIiAmJiAhaXNIZWFkaW5nUm93KG5vZGUyLnJvd3NbMF0pOwogIH0pOwogIGZvciAodmFyIGtleTIgaW4gcnVsZXMyKSB0dXJuZG93blNlcnZpY2UuYWRkUnVsZShrZXkyLCBydWxlczJba2V5Ml0pOwp9CmZ1bmN0aW9uIHRhc2tMaXN0SXRlbXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoInRhc2tMaXN0SXRlbXMiLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi50eXBlID09PSAiY2hlY2tib3giICYmIG5vZGUyLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJMSSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICByZXR1cm4gKG5vZGUyLmNoZWNrZWQgPyAiW3hdIiA6ICJbIF0iKSArICIgIjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBnZm0yKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS51c2UoWwogICAgaGlnaGxpZ2h0ZWRDb2RlQmxvY2ssCiAgICBzdHJpa2V0aHJvdWdoMiwKICAgIHRhYmxlcywKICAgIHRhc2tMaXN0SXRlbXMKICBdKTsKfQp2YXIgaGlnaGxpZ2h0UmVnRXhwLCBpbmRleE9mMiwgZXZlcnkyLCBydWxlczI7CnZhciBpbml0X3R1cm5kb3duX3BsdWdpbl9nZm1fZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzIigpIHsKICAgIGhpZ2hsaWdodFJlZ0V4cCA9IC9oaWdobGlnaHQtKD86dGV4dHxzb3VyY2UpLShbYS16MC05XSspLzsKICAgIGluZGV4T2YyID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7CiAgICBldmVyeTIgPSBBcnJheS5wcm90b3R5cGUuZXZlcnk7CiAgICBydWxlczIgPSB7fTsKICAgIHJ1bGVzMi50YWJsZUNlbGwgPSB7CiAgICAgIGZpbHRlcjogWyJ0aCIsICJ0ZCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIGNlbGwoY29udGVudDMsIG5vZGUyKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZVJvdyA9IHsKICAgICAgZmlsdGVyOiAidHIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGJvcmRlckNlbGxzID0gIiI7CiAgICAgICAgdmFyIGFsaWduTWFwID0geyBsZWZ0OiAiOi0tIiwgcmlnaHQ6ICItLToiLCBjZW50ZXI6ICI6LToiIH07CiAgICAgICAgaWYgKGlzSGVhZGluZ1Jvdyhub2RlMikpIHsKICAgICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IG5vZGUyLmNoaWxkTm9kZXMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICB2YXIgYm9yZGVyID0gIi0tLSI7CiAgICAgICAgICAgIHZhciBhbGlnbiA9IChub2RlMi5jaGlsZE5vZGVzW2kxMV0uZ2V0QXR0cmlidXRlKCJhbGlnbiIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoYWxpZ24pIGJvcmRlciA9IGFsaWduTWFwW2FsaWduXSB8fCBib3JkZXI7CiAgICAgICAgICAgIGJvcmRlckNlbGxzICs9IGNlbGwoYm9yZGVyLCBub2RlMi5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gIlxuIiArIGNvbnRlbnQzICsgKGJvcmRlckNlbGxzID8gIlxuIiArIGJvcmRlckNlbGxzIDogIiIpOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlID0gewogICAgICAvLyBPbmx5IGNvbnZlcnQgdGFibGVzIHdpdGggYSBoZWFkaW5nIHJvdy4KICAgICAgLy8gVGFibGVzIHdpdGggbm8gaGVhZGluZyByb3cgYXJlIGtlcHQgdXNpbmcgYGtlZXBgIChzZWUgYmVsb3cpLgogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiVEFCTEUiICYmIGlzSGVhZGluZ1Jvdyhub2RlMi5yb3dzWzBdKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKCJcblxuIiwgIlxuIik7CiAgICAgICAgcmV0dXJuICJcblxuIiArIGNvbnRlbnQzICsgIlxuXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlU2VjdGlvbiA9IHsKICAgICAgZmlsdGVyOiBbInRoZWFkIiwgInRib2R5IiwgInRmb290Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiBjb250ZW50MzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLnBsdWdpbnMuanMKdmFyIHNtYXJ0eWFtbDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24ucGx1Z2lucy5qcyIoKSB7CiAgICBzbWFydHlhbWwgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90czIoKSwgMSk7CiAgICBpbml0X3VuaWZpZWQoKTsKICAgIGluaXRfcmVtYXJrX2dmbSgpOwogICAgaW5pdF9yZW1hcmtfcGFyc2UoKTsKICAgIGluaXRfcmVtYXJrX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X3JlbWFya19odG1sKCk7CiAgICBpbml0X3JlbWFya19zdHJpbmdpZnkoKTsKICAgIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcygpOwogICAgaW5pdF90dXJuZG93bl9wbHVnaW5fZ2ZtX2VzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvc21hcnRtYXJrZG93bi5jbGFzc2VzLm1kcGFyc2VkcmVzdWx0LmpzCnZhciBNZFBhcnNlZFJlc3VsdDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9jbGFzc2VzX21kcGFyc2VkcmVzdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24uY2xhc3Nlcy5tZHBhcnNlZHJlc3VsdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucygpOwogICAgTWRQYXJzZWRSZXN1bHQgPSBjbGFzcyBfTWRQYXJzZWRSZXN1bHQgewogICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgbWRQYXJzZWRSZXN1bHQgPSBuZXcgX01kUGFyc2VkUmVzdWx0KCk7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgbGV0IHlhbWxTdHJpbmc7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdW5pZmllZCgpLnVzZShyZW1hcmtQYXJzZSkudXNlKHJlbWFya0dmbSkudXNlKHJlbWFya0Zyb250bWF0dGVyLCBbInlhbWwiLCAidG9tbCJdKS51c2UocmVtYXJrU3RyaW5naWZ5KS51c2UocmVtYXJrSHRtbCkudXNlKCgpID0+ICh0cmVlKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmRpcih0cmVlKTsKICAgICAgICAgIGNvbnN0IHlhbWxDaGlsZCA9IHRyZWUuY2hpbGRyZW4uZmluZCgob2JqZWN0QXJnKSA9PiBvYmplY3RBcmcudHlwZSA9PT0gInlhbWwiKTsKICAgICAgICAgIGlmICh5YW1sQ2hpbGQpIHsKICAgICAgICAgICAgeWFtbFN0cmluZyA9IHlhbWxDaGlsZC52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5wcm9jZXNzKG1kU3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmh0bWwgPSByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICBpZiAoeWFtbFN0cmluZykgewogICAgICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSBhd2FpdCBzbWFydHlhbWwueWFtbFN0cmluZ1RvT2JqZWN0KHlhbWxTdHJpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmZyb250bWF0dGVyRGF0YSA9IHt9OwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTcgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTcsIHsKICBTbWFydE1hcmtkb3duOiAoKSA9PiBTbWFydE1hcmtkb3duCn0pOwp2YXIgU21hcnRNYXJrZG93bjsKdmFyIGluaXRfZGlzdF90czE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fY2xhc3Nlc19tZHBhcnNlZHJlc3VsdCgpOwogICAgU21hcnRNYXJrZG93biA9IGNsYXNzIF9TbWFydE1hcmtkb3duIHsKICAgICAgc3RhdGljIGFzeW5jIGVhc3lNYXJrZG93blRvSHRtbChtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBfU21hcnRNYXJrZG93bigpOwogICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gYXdhaXQgc21hcnRtYXJrZG93bkluc3RhbmNlLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQuaHRtbDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlIGEgTWRQYXJzZWRSZXN1bHQgZnJvbSBtYXJrZG93bgogICAgICAgKiBAcGFyYW0gbWRTdHJpbmdBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTWRQYXJzZWRSZXN1bHQuY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGh0bWxUb01hcmtkb3duKGh0bWxTdHJpbmcpIHsKICAgICAgICBjb25zdCB0dXJuZG93bkluc3RhbmNlID0gbmV3IHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdCh7CiAgICAgICAgICBoZWFkaW5nU3R5bGU6ICJhdHgiLAogICAgICAgICAgY29kZUJsb2NrU3R5bGU6ICJmZW5jZWQiCiAgICAgICAgfSk7CiAgICAgICAgdHVybmRvd25JbnN0YW5jZS51c2UodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLmdmbSk7CiAgICAgICAgcmV0dXJuIHR1cm5kb3duSW5zdGFuY2UudHVybmRvd24oaHRtbFN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gZXhwb3J0cy5Ub2tlbkRhdGEgPSB2b2lkIDA7CiAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U4OwogICAgZXhwb3J0cy5jb21waWxlID0gY29tcGlsZTI7CiAgICBleHBvcnRzLm1hdGNoID0gbWF0Y2gyOwogICAgZXhwb3J0cy5wYXRoVG9SZWdleHAgPSBwYXRoVG9SZWdleHA7CiAgICBleHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTU7CiAgICB2YXIgREVGQVVMVF9ERUxJTUlURVIgPSAiLyI7CiAgICB2YXIgTk9PUF9WQUxVRSA9ICh2YWx1ZTIpID0+IHZhbHVlMjsKICAgIHZhciBJRF9TVEFSVCA9IC9eWyRfXHB7SURfU3RhcnR9XSQvdTsKICAgIHZhciBJRF9DT05USU5VRSA9IC9eWyRcdTIwMGNcdTIwMGRccHtJRF9Db250aW51ZX1dJC91OwogICAgdmFyIFNJTVBMRV9UT0tFTlMgPSB7CiAgICAgIC8vIEdyb3Vwcy4KICAgICAgInsiOiAieyIsCiAgICAgICJ9IjogIn0iLAogICAgICAvLyBSZXNlcnZlZC4KICAgICAgIigiOiAiKCIsCiAgICAgICIpIjogIikiLAogICAgICAiWyI6ICJbIiwKICAgICAgIl0iOiAiXSIsCiAgICAgICIrIjogIisiLAogICAgICAiPyI6ICI/IiwKICAgICAgIiEiOiAiISIKICAgIH07CiAgICBmdW5jdGlvbiBlc2NhcGVUZXh0KHN0cikgewogICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1t7fSgpXFtcXSs/IToqXFxdL2csICJcXCQmIik7CiAgICB9CiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyKSB7CiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4rKj9eJHt9KClbXF18L1xcXS9nLCAiXFwkJiIpOwogICAgfQogICAgdmFyIFRva2VuRGF0YSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodG9rZW5zLCBvcmlnaW5hbFBhdGgpIHsKICAgICAgICB0aGlzLnRva2VucyA9IHRva2VuczsKICAgICAgICB0aGlzLm9yaWdpbmFsUGF0aCA9IG9yaWdpbmFsUGF0aDsKICAgICAgfQogICAgfTsKICAgIGV4cG9ydHMuVG9rZW5EYXRhID0gVG9rZW5EYXRhOwogICAgdmFyIFBhdGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgVHlwZUVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIsIG9yaWdpbmFsUGF0aCkgewogICAgICAgIGxldCB0ZXh0OSA9IG1lc3NhZ2UyOwogICAgICAgIGlmIChvcmlnaW5hbFBhdGgpCiAgICAgICAgICB0ZXh0OSArPSBgOiAke29yaWdpbmFsUGF0aH1gOwogICAgICAgIHRleHQ5ICs9IGA7IHZpc2l0IGh0dHBzOi8vZ2l0Lm5ldy9wYXRoVG9SZWdleHBFcnJvciBmb3IgaW5mb2A7CiAgICAgICAgc3VwZXIodGV4dDkpOwogICAgICAgIHRoaXMub3JpZ2luYWxQYXRoID0gb3JpZ2luYWxQYXRoOwogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5QYXRoRXJyb3IgPSBQYXRoRXJyb3I7CiAgICBmdW5jdGlvbiBwYXJzZTgoc3RyLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBlbmNvZGVQYXRoID0gTk9PUF9WQUxVRSB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgY2hhcnMgPSBbLi4uc3RyXTsKICAgICAgY29uc3QgdG9rZW5zID0gW107CiAgICAgIGxldCBpbmRleDIgPSAwOwogICAgICBsZXQgcG9zID0gMDsKICAgICAgZnVuY3Rpb24gbmFtZSgpIHsKICAgICAgICBsZXQgdmFsdWUyID0gIiI7CiAgICAgICAgaWYgKElEX1NUQVJULnRlc3QoY2hhcnNbaW5kZXgyXSkpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgdmFsdWUyICs9IGNoYXJzW2luZGV4MisrXTsKICAgICAgICAgIH0gd2hpbGUgKElEX0NPTlRJTlVFLnRlc3QoY2hhcnNbaW5kZXgyXSkpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhcnNbaW5kZXgyXSA9PT0gJyInKSB7CiAgICAgICAgICBsZXQgcXVvdGVTdGFydCA9IGluZGV4MjsKICAgICAgICAgIHdoaWxlIChpbmRleDIrKyA8IGNoYXJzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoY2hhcnNbaW5kZXgyXSA9PT0gJyInKSB7CiAgICAgICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICAgICAgcXVvdGVTdGFydCA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICJcXCIpCiAgICAgICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICAgIHZhbHVlMiArPSBjaGFyc1tpbmRleDJdOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHF1b3RlU3RhcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgVW50ZXJtaW5hdGVkIHF1b3RlIGF0IGluZGV4ICR7cXVvdGVTdGFydH1gLCBzdHIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgTWlzc2luZyBwYXJhbWV0ZXIgbmFtZSBhdCBpbmRleCAke2luZGV4Mn1gLCBzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICB9CiAgICAgIHdoaWxlIChpbmRleDIgPCBjaGFycy5sZW5ndGgpIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBjaGFyc1tpbmRleDJdOwogICAgICAgIGNvbnN0IHR5cGU1ID0gU0lNUExFX1RPS0VOU1t2YWx1ZTJdOwogICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiB0eXBlNSwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogdmFsdWUyIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiXFwiKSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJlc2NhcGUiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBjaGFyc1tpbmRleDIrK10gfSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgPT09ICI6IikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAicGFyYW0iLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBuYW1lKCkgfSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgPT09ICIqIikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAid2lsZGNhcmQiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBuYW1lKCkgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogImNoYXIiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiB2YWx1ZTIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogImVuZCIsIGluZGV4OiBpbmRleDIsIHZhbHVlOiAiIiB9KTsKICAgICAgZnVuY3Rpb24gY29uc3VtZVVudGlsKGVuZFR5cGUpIHsKICAgICAgICBjb25zdCBvdXRwdXQgPSBbXTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbcG9zKytdOwogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IGVuZFR5cGUpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJjaGFyIiB8fCB0b2tlbi50eXBlID09PSAiZXNjYXBlIikgewogICAgICAgICAgICBsZXQgcGF0aDIgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgbGV0IGN1ciA9IHRva2Vuc1twb3NdOwogICAgICAgICAgICB3aGlsZSAoY3VyLnR5cGUgPT09ICJjaGFyIiB8fCBjdXIudHlwZSA9PT0gImVzY2FwZSIpIHsKICAgICAgICAgICAgICBwYXRoMiArPSBjdXIudmFsdWU7CiAgICAgICAgICAgICAgY3VyID0gdG9rZW5zWysrcG9zXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdXRwdXQucHVzaCh7CiAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVQYXRoKHBhdGgyKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInBhcmFtIiB8fCB0b2tlbi50eXBlID09PSAid2lsZGNhcmQiKSB7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiB0b2tlbi50eXBlLAogICAgICAgICAgICAgIG5hbWU6IHRva2VuLnZhbHVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAieyIpIHsKICAgICAgICAgICAgb3V0cHV0LnB1c2goewogICAgICAgICAgICAgIHR5cGU6ICJncm91cCIsCiAgICAgICAgICAgICAgdG9rZW5zOiBjb25zdW1lVW50aWwoIn0iKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gYXQgaW5kZXggJHt0b2tlbi5pbmRleH0sIGV4cGVjdGVkICR7ZW5kVHlwZX1gLCBzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0cHV0OwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVG9rZW5EYXRhKGNvbnN1bWVVbnRpbCgiZW5kIiksIHN0cik7CiAgICB9CiAgICBmdW5jdGlvbiBjb21waWxlMihwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZW5jb2RlOiBlbmNvZGUyID0gZW5jb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiBwYXRoMiA9PT0gIm9iamVjdCIgPyBwYXRoMiA6IHBhcnNlOChwYXRoMiwgb3B0aW9ucyk7CiAgICAgIGNvbnN0IGZuID0gdG9rZW5zVG9GdW5jdGlvbihkYXRhLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGgzKHBhcmFtczIgPSB7fSkgewogICAgICAgIGNvbnN0IFtwYXRoNCwgLi4ubWlzc2luZ10gPSBmbihwYXJhbXMyKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXRoNDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24odG9rZW5zLCBkZWxpbWl0ZXIsIGVuY29kZTIpIHsKICAgICAgY29uc3QgZW5jb2RlcnMgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW5Ub0Z1bmN0aW9uKHRva2VuLCBkZWxpbWl0ZXIsIGVuY29kZTIpKTsKICAgICAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gWyIiXTsKICAgICAgICBmb3IgKGNvbnN0IGVuY29kZXIyIG9mIGVuY29kZXJzKSB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5leHRyYXNdID0gZW5jb2RlcjIoZGF0YSk7CiAgICAgICAgICByZXN1bHRbMF0gKz0gdmFsdWUyOwogICAgICAgICAgcmVzdWx0LnB1c2goLi4uZXh0cmFzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUyKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAidGV4dCIpCiAgICAgICAgcmV0dXJuICgpID0+IFt0b2tlbi52YWx1ZV07CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAiZ3JvdXAiKSB7CiAgICAgICAgY29uc3QgZm4gPSB0b2tlbnNUb0Z1bmN0aW9uKHRva2VuLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKTsKICAgICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICAgIGNvbnN0IFt2YWx1ZTIsIC4uLm1pc3NpbmddID0gZm4oZGF0YSk7CiAgICAgICAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gW3ZhbHVlMl07CiAgICAgICAgICByZXR1cm4gWyIiXTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGNvbnN0IGVuY29kZVZhbHVlID0gZW5jb2RlMiB8fCBOT09QX1ZBTFVFOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIiAmJiBlbmNvZGUyICE9PSBmYWxzZSkgewogICAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZGF0YVt0b2tlbi5uYW1lXTsKICAgICAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFsiIiwgdG9rZW4ubmFtZV07CiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUyKSB8fCB2YWx1ZTIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3Rva2VuLm5hbWV9IiB0byBiZSBhIG5vbi1lbXB0eSBhcnJheWApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgdmFsdWUyLm1hcCgodmFsdWUzLCBpbmRleDIpID0+IHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3Rva2VuLm5hbWV9LyR7aW5kZXgyfSIgdG8gYmUgYSBzdHJpbmdgKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVZhbHVlKHZhbHVlMyk7CiAgICAgICAgICAgIH0pLmpvaW4oZGVsaW1pdGVyKQogICAgICAgICAgXTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgIGNvbnN0IHZhbHVlMiA9IGRhdGFbdG9rZW4ubmFtZV07CiAgICAgICAgaWYgKHZhbHVlMiA9PSBudWxsKQogICAgICAgICAgcmV0dXJuIFsiIiwgdG9rZW4ubmFtZV07CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfSIgdG8gYmUgYSBzdHJpbmdgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFtlbmNvZGVWYWx1ZSh2YWx1ZTIpXTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hdGNoMihwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZGVjb2RlOiBkZWNvZGUyID0gZGVjb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgeyByZWdleHAsIGtleXM6IGtleXMyIH0gPSBwYXRoVG9SZWdleHAocGF0aDIsIG9wdGlvbnMpOwogICAgICBjb25zdCBkZWNvZGVycyA9IGtleXMyLm1hcCgoa2V5MikgPT4gewogICAgICAgIGlmIChkZWNvZGUyID09PSBmYWxzZSkKICAgICAgICAgIHJldHVybiBOT09QX1ZBTFVFOwogICAgICAgIGlmIChrZXkyLnR5cGUgPT09ICJwYXJhbSIpCiAgICAgICAgICByZXR1cm4gZGVjb2RlMjsKICAgICAgICByZXR1cm4gKHZhbHVlMikgPT4gdmFsdWUyLnNwbGl0KGRlbGltaXRlcikubWFwKGRlY29kZTIpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoMyhpbnB1dCkgewogICAgICAgIGNvbnN0IG02ID0gcmVnZXhwLmV4ZWMoaW5wdXQpOwogICAgICAgIGlmICghbTYpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgY29uc3QgcGF0aDMgPSBtNlswXTsKICAgICAgICBjb25zdCBwYXJhbXMyID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMTsgaTExIDwgbTYubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgaWYgKG02W2kxMV0gPT09IHZvaWQgMCkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBjb25zdCBrZXkyID0ga2V5czJbaTExIC0gMV07CiAgICAgICAgICBjb25zdCBkZWNvZGVyMiA9IGRlY29kZXJzW2kxMSAtIDFdOwogICAgICAgICAgcGFyYW1zMltrZXkyLm5hbWVdID0gZGVjb2RlcjIobTZbaTExXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHBhdGg6IHBhdGgzLCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhdGhUb1JlZ2V4cChwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIsIGVuZDogZW5kMyA9IHRydWUsIHNlbnNpdGl2ZSA9IGZhbHNlLCB0cmFpbGluZyA9IHRydWUgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGtleXMyID0gW107CiAgICAgIGNvbnN0IGZsYWdzID0gc2Vuc2l0aXZlID8gIiIgOiAiaSI7CiAgICAgIGNvbnN0IHNvdXJjZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBwYXRoc1RvQXJyYXkocGF0aDIsIFtdKSkgewogICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgaW5wdXQgPT09ICJvYmplY3QiID8gaW5wdXQgOiBwYXJzZTgoaW5wdXQsIG9wdGlvbnMpOwogICAgICAgIGZvciAoY29uc3QgdG9rZW5zIG9mIGZsYXR0ZW4oZGF0YS50b2tlbnMsIDAsIFtdKSkgewogICAgICAgICAgc291cmNlcy5wdXNoKHRvUmVnRXhwU291cmNlKHRva2VucywgZGVsaW1pdGVyLCBrZXlzMiwgZGF0YS5vcmlnaW5hbFBhdGgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IHBhdHRlcm4gPSBgXig/OiR7c291cmNlcy5qb2luKCJ8Iil9KWA7CiAgICAgIGlmICh0cmFpbGluZykKICAgICAgICBwYXR0ZXJuICs9IGAoPzoke2VzY2FwZShkZWxpbWl0ZXIpfSQpP2A7CiAgICAgIHBhdHRlcm4gKz0gZW5kMyA/ICIkIiA6IGAoPz0ke2VzY2FwZShkZWxpbWl0ZXIpfXwkKWA7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOwogICAgICByZXR1cm4geyByZWdleHAsIGtleXM6IGtleXMyIH07CiAgICB9CiAgICBmdW5jdGlvbiBwYXRoc1RvQXJyYXkocGF0aHMsIGluaXQpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aHMpKSB7CiAgICAgICAgZm9yIChjb25zdCBwNyBvZiBwYXRocykKICAgICAgICAgIHBhdGhzVG9BcnJheShwNywgaW5pdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdC5wdXNoKHBhdGhzKTsKICAgICAgfQogICAgICByZXR1cm4gaW5pdDsKICAgIH0KICAgIGZ1bmN0aW9uKiBmbGF0dGVuKHRva2VucywgaW5kZXgyLCBpbml0KSB7CiAgICAgIGlmIChpbmRleDIgPT09IHRva2Vucy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4geWllbGQgaW5pdDsKICAgICAgfQogICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleDJdOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImdyb3VwIikgewogICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIGZsYXR0ZW4odG9rZW4udG9rZW5zLCAwLCBpbml0LnNsaWNlKCkpKSB7CiAgICAgICAgICB5aWVsZCogZmxhdHRlbih0b2tlbnMsIGluZGV4MiArIDEsIHNlcSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGluaXQucHVzaCh0b2tlbik7CiAgICAgIH0KICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleDIgKyAxLCBpbml0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHRvUmVnRXhwU291cmNlKHRva2VucywgZGVsaW1pdGVyLCBrZXlzMiwgb3JpZ2luYWxQYXRoKSB7CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgbGV0IGJhY2t0cmFjayA9ICIiOwogICAgICBsZXQgaXNTYWZlU2VnbWVudFBhcmFtID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICByZXN1bHQgKz0gZXNjYXBlKHRva2VuLnZhbHVlKTsKICAgICAgICAgIGJhY2t0cmFjayArPSB0b2tlbi52YWx1ZTsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSB8fCAoaXNTYWZlU2VnbWVudFBhcmFtID0gdG9rZW4udmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIgfHwgdG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgaWYgKCFpc1NhZmVTZWdtZW50UGFyYW0gJiYgIWJhY2t0cmFjaykgewogICAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke3Rva2VuLm5hbWV9IiAke3Rva2VuLnR5cGV9YCwgb3JpZ2luYWxQYXRoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iKSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKCR7bmVnYXRlKGRlbGltaXRlciwgaXNTYWZlU2VnbWVudFBhcmFtID8gIiIgOiBiYWNrdHJhY2spfSspYDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKFtcXHNcXFNdKylgOwogICAgICAgICAgfQogICAgICAgICAga2V5czIucHVzaCh0b2tlbik7CiAgICAgICAgICBiYWNrdHJhY2sgPSAiIjsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSA9IGZhbHNlOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWdhdGUoZGVsaW1pdGVyLCBiYWNrdHJhY2spIHsKICAgICAgaWYgKGJhY2t0cmFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgaWYgKGRlbGltaXRlci5sZW5ndGggPCAyKQogICAgICAgICAgcmV0dXJuIGBbXiR7ZXNjYXBlKGRlbGltaXRlciArIGJhY2t0cmFjayl9XWA7CiAgICAgICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShkZWxpbWl0ZXIpfSlbXiR7ZXNjYXBlKGJhY2t0cmFjayl9XSlgOwogICAgICB9CiAgICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikgewogICAgICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoYmFja3RyYWNrKX0pW14ke2VzY2FwZShkZWxpbWl0ZXIpfV0pYDsKICAgICAgfQogICAgICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9fCR7ZXNjYXBlKGRlbGltaXRlcil9KVtcXHNcXFNdKWA7CiAgICB9CiAgICBmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnModG9rZW5zKSB7CiAgICAgIGxldCB2YWx1ZTIgPSAiIjsKICAgICAgbGV0IGkxMSA9IDA7CiAgICAgIGZ1bmN0aW9uIG5hbWUodmFsdWUzKSB7CiAgICAgICAgY29uc3QgaXNTYWZlID0gaXNOYW1lU2FmZSh2YWx1ZTMpICYmIGlzTmV4dE5hbWVTYWZlKHRva2Vuc1tpMTFdKTsKICAgICAgICByZXR1cm4gaXNTYWZlID8gdmFsdWUzIDogSlNPTi5zdHJpbmdpZnkodmFsdWUzKTsKICAgICAgfQogICAgICB3aGlsZSAoaTExIDwgdG9rZW5zLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2kxMSsrXTsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gZXNjYXBlVGV4dCh0b2tlbi52YWx1ZSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgeyR7c3RyaW5naWZ5VG9rZW5zKHRva2VuLnRva2Vucyl9fWA7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgOiR7bmFtZSh0b2tlbi5uYW1lKX1gOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAid2lsZGNhcmQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYCoke25hbWUodG9rZW4ubmFtZSl9YDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7dG9rZW4udHlwZX1gKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgZnVuY3Rpb24gc3RyaW5naWZ5NShkYXRhKSB7CiAgICAgIHJldHVybiBzdHJpbmdpZnlUb2tlbnMoZGF0YS50b2tlbnMpOwogICAgfQogICAgZnVuY3Rpb24gaXNOYW1lU2FmZShuYW1lKSB7CiAgICAgIGNvbnN0IFtmaXJzdDIsIC4uLnJlc3RdID0gbmFtZTsKICAgICAgcmV0dXJuIElEX1NUQVJULnRlc3QoZmlyc3QyKSAmJiByZXN0LmV2ZXJ5KChjaGFyKSA9PiBJRF9DT05USU5VRS50ZXN0KGNoYXIpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmV4dE5hbWVTYWZlKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAidGV4dCIpCiAgICAgICAgcmV0dXJuICFJRF9DT05USU5VRS50ZXN0KHRva2VuLnZhbHVlWzBdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5wbHVnaW5zLmpzCnZhciBwYXRoVG9SZWdFeHA7CnZhciBpbml0X3NtYXJ0cm91dGVyX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czcoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIHBhdGhUb1JlZ0V4cCA9IF9fdG9FU00ocmVxdWlyZV9kaXN0KCksIDEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcwp2YXIgUXVlcnlQYXJhbXM7CnZhciBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfcXVlcnlwYXJhbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnF1ZXJ5cGFyYW1zLmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfcGx1Z2lucygpOwogICAgUXVlcnlQYXJhbXMgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB9CiAgICAgIGdldEFsbEFzT2JqZWN0KCkgewogICAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh1cmxTZWFyY2hQYXJhbXMuZW50cmllcygpKTsKICAgICAgfQogICAgICBzZXRRdWVyeVBhcmFtKHF1ZXJ5S2V5QXJnLCBxdWVyeUNvbnRlbnRBcmcsIHB1c2hPclJlcGxhY2VBcmcgPSAicmVwbGFjZSIpIHsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHF1ZXJ5UGFyYW1zLnNldChxdWVyeUtleUFyZywgcXVlcnlDb250ZW50QXJnKTsKICAgICAgICBwdXNoT3JSZXBsYWNlQXJnID09PSAicHVzaCIgPyBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKSA6IGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsICI/IiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGRlbGV0ZVF1ZXJ5UGFyYW0ocXVlcnlLZXlBcmcsIHB1c2hPclJlcGxhY2VBcmcgPSAicmVwbGFjZSIpIHsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHF1ZXJ5UGFyYW1zLmRlbGV0ZShxdWVyeUtleUFyZyk7CiAgICAgICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gInB1c2giID8gaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSkgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTsKICAgICAgfQogICAgICBnZXRRdWVyeVBhcmFtKHF1ZXJ5UGFyYW1OYW1lKSB7CiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLmdldEFsbEFzT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1OYW1lXTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMuc21hcnRyb3V0ZXIuanMKdmFyIHJvdXRlTG9nLCBTbWFydFJvdXRlcjsKdmFyIGluaXRfc21hcnRyb3V0ZXJfY2xhc3Nlc19zbWFydHJvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMuc21hcnRyb3V0ZXIuanMiKCkgewogICAgaW5pdF9zbWFydHJvdXRlcl9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfcXVlcnlwYXJhbXMoKTsKICAgIHJvdXRlTG9nID0gKG1lc3NhZ2UyKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGAlY1tSb3V0ZXJdJWMgJHttZXNzYWdlMn1gLCAiY29sb3I6IHJnYigyNTUsIDEwNSwgMTAwKTsiLCAiY29sb3I6IGluaGVyaXQiKTsKICAgIH07CiAgICBTbWFydFJvdXRlciA9IGNsYXNzIF9TbWFydFJvdXRlciB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJvdXRlci4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcsIGJhc2VQYXRoID0gIiIpIHsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICBkZWJ1ZzogZmFsc2UKICAgICAgICB9OwogICAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBuZXcgUXVlcnlQYXJhbXMoKTsKICAgICAgICB0aGlzLnJvdXRlcyA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgICAgIC4uLnRoaXMub3B0aW9ucywKICAgICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgICB9OwogICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDsKICAgICAgICB0aGlzLnBvcHN0YXRlTGlzdGVuZXIgPSAocG9wU3RhdGVFdmVudEFyZykgPT4gewogICAgICAgICAgcG9wU3RhdGVFdmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpOwogICAgICAgIH07CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIiwgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgc3ViLXJvdXRlciB3aXRoIGEgc3BlY2lmaWMgcHJlZml4CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXRoCiAgICAgICAqIEBwYXJhbSB7SVJvdXRlck9wdGlvbnN9IFtvcHRpb25zXQogICAgICAgKi8KICAgICAgY3JlYXRlU3ViUm91dGVyKHN1YlBhdGgsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBuZXdCYXNlUGF0aCA9IGAke3RoaXMuYmFzZVBhdGh9JHtzdWJQYXRofWA7CiAgICAgICAgcmV0dXJuIG5ldyBfU21hcnRSb3V0ZXIoeyAuLi50aGlzLm9wdGlvbnMsIC4uLm9wdGlvbnMgfSwgbmV3QmFzZVBhdGgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQdXNoIHJvdXRlIHN0YXRlIHRvIGhpc3Rvcnkgc3RhY2sKICAgICAgICovCiAgICAgIGFzeW5jIHB1c2hVcmwodXJsID0gIi8iLCBzdGF0ZTEyID0ge30pIHsKICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7dGhpcy5iYXNlUGF0aH0ke3VybH1gOwogICAgICAgIGlmIChmdWxsVXJsICE9PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpIHsKICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZTEyLCB3aW5kb3cuZG9jdW1lbnQudGl0bGUsIGZ1bGxVcmwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUxMiwgd2luZG93LmRvY3VtZW50LnRpdGxlLCBmdWxsVXJsKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBdHRhY2ggcm91dGUgd2l0aCBoYW5kbGVyCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcm91dGVBcmcKICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlckFyZwogICAgICAgKi8KICAgICAgb24ocm91dGVBcmcsIGhhbmRsZXJBcmcpIHsKICAgICAgICBjb25zdCBmdWxsUm91dGUgPSBgJHt0aGlzLmJhc2VQYXRofSR7cm91dGVBcmd9YDsKICAgICAgICBjb25zdCByb3V0ZU9iamVjdCA9IHsKICAgICAgICAgIG1hdGNoRnVuY3Rpb246IHBhdGhUb1JlZ0V4cC5tYXRjaChmdWxsUm91dGUpLAogICAgICAgICAgaGFuZGxlcjogaGFuZGxlckFyZwogICAgICAgIH07CiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZU9iamVjdCk7CiAgICAgICAgY29uc3QgcmVtb3ZlRnVuY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJvdXRlcy5zcGxpY2UodGhpcy5yb3V0ZXMuaW5kZXhPZihyb3V0ZU9iamVjdCksIDEpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlbW92ZUZ1bmN0aW9uOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBseSByb3V0ZXMgaGFuZGxlciB0byBjdXJyZW50IHJvdXRlCiAgICAgICAqLwogICAgICBhc3luYyBfaGFuZGxlUm91dGVTdGF0ZSgpIHsKICAgICAgICBjb25zdCBjdXJyZW50TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICAgICAgY29uc3Qgd2FudGVkUm91dGVzID0gdGhpcy5yb3V0ZXMuZmlsdGVyKChyb3V0ZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuICEhcm91dGVBcmcubWF0Y2hGdW5jdGlvbihjdXJyZW50TG9jYXRpb24pOwogICAgICAgIH0pOwogICAgICAgIGZvciAoY29uc3Qgd2FudGVkUm91dGUgb2Ygd2FudGVkUm91dGVzKSB7CiAgICAgICAgICBjb25zdCByb3V0ZVJlc3VsdCA9IHdhbnRlZFJvdXRlLm1hdGNoRnVuY3Rpb24oY3VycmVudExvY2F0aW9uKTsKICAgICAgICAgIHdhbnRlZFJvdXRlLmhhbmRsZXIoewogICAgICAgICAgICAuLi5yb3V0ZVJlc3VsdC52YWx1ZU9mKCksCiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLmdldEFsbEFzT2JqZWN0KCkKICAgICAgICAgICAgLy8gVE9ETyBjaGVjayB3ZXRoZXIgZW50cmllcyBpcyBzdXBwb3J0ZWQgaW4gdHlwaW5ncwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXN0cm95IHRoZSByb3V0ZXIgaW5zdGFuY2UsIHJlbW92aW5nIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7CiAgICAgICAgdGhpcy5yb3V0ZXMgPSBbXTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxOCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxOCwgewogIFNtYXJ0Um91dGVyOiAoKSA9PiBTbWFydFJvdXRlcgp9KTsKdmFyIGluaXRfZGlzdF90czE4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3NtYXJ0cm91dGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9wbHVnaW5zLmpzCnZhciBpbml0X3BsdWdpbnMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvcGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3NoYTI1Ni5mYWxsYmFjay5qcwpmdW5jdGlvbiByb3RyKG4xMywgYjUpIHsKICByZXR1cm4gbjEzID4+PiBiNSB8IG4xMyA8PCAzMiAtIGI1Owp9CmZ1bmN0aW9uIHNoYTI1NlRyYW5zZm9ybShXMiwgSDQpIHsKICBsZXQgYTUgPSBINFswXTsKICBsZXQgYjUgPSBINFsxXTsKICBsZXQgYzExID0gSDRbMl07CiAgbGV0IGQ2ID0gSDRbM107CiAgbGV0IGUxMSA9IEg0WzRdOwogIGxldCBmNyA9IEg0WzVdOwogIGxldCBnNCA9IEg0WzZdOwogIGxldCBoOSA9IEg0WzddOwogIGZvciAobGV0IGo0ID0gMDsgajQgPCA2NDsgajQrKykgewogICAgaWYgKGo0ID49IDE2KSB7CiAgICAgIGNvbnN0IHMwID0gcm90cihXMltqNCAtIDE1XSwgNykgXiByb3RyKFcyW2o0IC0gMTVdLCAxOCkgXiBXMltqNCAtIDE1XSA+Pj4gMzsKICAgICAgY29uc3QgczEgPSByb3RyKFcyW2o0IC0gMl0sIDE3KSBeIHJvdHIoVzJbajQgLSAyXSwgMTkpIF4gVzJbajQgLSAyXSA+Pj4gMTA7CiAgICAgIFcyW2o0XSA9IFcyW2o0IC0gMTZdICsgczAgKyBXMltqNCAtIDddICsgczEgPj4+IDA7CiAgICB9CiAgICBjb25zdCBTMSA9IHJvdHIoZTExLCA2KSBeIHJvdHIoZTExLCAxMSkgXiByb3RyKGUxMSwgMjUpOwogICAgY29uc3QgY2ggPSBlMTEgJiBmNyBeIH5lMTEgJiBnNDsKICAgIGNvbnN0IHRlbXAxID0gaDkgKyBTMSArIGNoICsgS1tqNF0gKyBXMltqNF0gPj4+IDA7CiAgICBjb25zdCBTMCA9IHJvdHIoYTUsIDIpIF4gcm90cihhNSwgMTMpIF4gcm90cihhNSwgMjIpOwogICAgY29uc3QgbWFqID0gYTUgJiBiNSBeIGE1ICYgYzExIF4gYjUgJiBjMTE7CiAgICBjb25zdCB0ZW1wMiA9IFMwICsgbWFqID4+PiAwOwogICAgaDkgPSBnNDsKICAgIGc0ID0gZjc7CiAgICBmNyA9IGUxMTsKICAgIGUxMSA9IGQ2ICsgdGVtcDEgPj4+IDA7CiAgICBkNiA9IGMxMTsKICAgIGMxMSA9IGI1OwogICAgYjUgPSBhNTsKICAgIGE1ID0gdGVtcDEgKyB0ZW1wMiA+Pj4gMDsKICB9CiAgSDRbMF0gPSBINFswXSArIGE1ID4+PiAwOwogIEg0WzFdID0gSDRbMV0gKyBiNSA+Pj4gMDsKICBINFsyXSA9IEg0WzJdICsgYzExID4+PiAwOwogIEg0WzNdID0gSDRbM10gKyBkNiA+Pj4gMDsKICBINFs0XSA9IEg0WzRdICsgZTExID4+PiAwOwogIEg0WzVdID0gSDRbNV0gKyBmNyA+Pj4gMDsKICBINFs2XSA9IEg0WzZdICsgZzQgPj4+IDA7CiAgSDRbN10gPSBINFs3XSArIGg5ID4+PiAwOwp9CmZ1bmN0aW9uIHNoYTI1NkZhbGxiYWNrKGJ5dGVzKSB7CiAgY29uc3QgSF9jb3B5ID0gWy4uLkgyXTsKICBjb25zdCBtc2dMZW4gPSBieXRlcy5sZW5ndGg7CiAgY29uc3QgbXNnQml0TGVuID0gbXNnTGVuICogODsKICBjb25zdCBwYWRMZW4gPSBtc2dMZW4gJSA2NCA8IDU2ID8gNTYgLSBtc2dMZW4gJSA2NCA6IDEyMCAtIG1zZ0xlbiAlIDY0OwogIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KG1zZ0xlbiArIHBhZExlbiArIDgpOwogIHBhZGRlZC5zZXQoYnl0ZXMpOwogIHBhZGRlZFttc2dMZW5dID0gMTI4OwogIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHBhZGRlZC5idWZmZXIpOwogIGRhdGFWaWV3LnNldFVpbnQzMihwYWRkZWQubGVuZ3RoIC0gOCwgMCwgZmFsc2UpOwogIGRhdGFWaWV3LnNldFVpbnQzMihwYWRkZWQubGVuZ3RoIC0gNCwgbXNnQml0TGVuID4+PiAwLCBmYWxzZSk7CiAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgcGFkZGVkLmxlbmd0aDsgb2Zmc2V0ICs9IDY0KSB7CiAgICBjb25zdCBXMiA9IG5ldyBBcnJheSg2NCk7CiAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCAxNjsgaTExKyspIHsKICAgICAgVzJbaTExXSA9IGRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyBpMTEgKiA0LCBmYWxzZSk7CiAgICB9CiAgICBzaGEyNTZUcmFuc2Zvcm0oVzIsIEhfY29weSk7CiAgfQogIGxldCBoZXgyID0gIiI7CiAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgODsgaTExKyspIHsKICAgIGhleDIgKz0gSF9jb3B5W2kxMV0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICIwIik7CiAgfQogIHJldHVybiBoZXgyOwp9CnZhciBLLCBIMjsKdmFyIGluaXRfc2hhMjU2X2ZhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvc2hhMjU2LmZhbGxiYWNrLmpzIigpIHsKICAgIEsgPSBbCiAgICAgIDExMTYzNTI0MDgsCiAgICAgIDE4OTk0NDc0NDEsCiAgICAgIDMwNDkzMjM0NzEsCiAgICAgIDM5MjEwMDk1NzMsCiAgICAgIDk2MTk4NzE2MywKICAgICAgMTUwODk3MDk5MywKICAgICAgMjQ1MzYzNTc0OCwKICAgICAgMjg3MDc2MzIyMSwKICAgICAgMzYyNDM4MTA4MCwKICAgICAgMzEwNTk4NDAxLAogICAgICA2MDcyMjUyNzgsCiAgICAgIDE0MjY4ODE5ODcsCiAgICAgIDE5MjUwNzgzODgsCiAgICAgIDIxNjIwNzgyMDYsCiAgICAgIDI2MTQ4ODgxMDMsCiAgICAgIDMyNDgyMjI1ODAsCiAgICAgIDM4MzUzOTA0MDEsCiAgICAgIDQwMjIyMjQ3NzQsCiAgICAgIDI2NDM0NzA3OCwKICAgICAgNjA0ODA3NjI4LAogICAgICA3NzAyNTU5ODMsCiAgICAgIDEyNDkxNTAxMjIsCiAgICAgIDE1NTUwODE2OTIsCiAgICAgIDE5OTYwNjQ5ODYsCiAgICAgIDI1NTQyMjA4ODIsCiAgICAgIDI4MjE4MzQzNDksCiAgICAgIDI5NTI5OTY4MDgsCiAgICAgIDMyMTAzMTM2NzEsCiAgICAgIDMzMzY1NzE4OTEsCiAgICAgIDM1ODQ1Mjg3MTEsCiAgICAgIDExMzkyNjk5MywKICAgICAgMzM4MjQxODk1LAogICAgICA2NjYzMDcyMDUsCiAgICAgIDc3MzUyOTkxMiwKICAgICAgMTI5NDc1NzM3MiwKICAgICAgMTM5NjE4MjI5MSwKICAgICAgMTY5NTE4MzcwMCwKICAgICAgMTk4NjY2MTA1MSwKICAgICAgMjE3NzAyNjM1MCwKICAgICAgMjQ1Njk1NjAzNywKICAgICAgMjczMDQ4NTkyMSwKICAgICAgMjgyMDMwMjQxMSwKICAgICAgMzI1OTczMDgwMCwKICAgICAgMzM0NTc2NDc3MSwKICAgICAgMzUxNjA2NTgxNywKICAgICAgMzYwMDM1MjgwNCwKICAgICAgNDA5NDU3MTkwOSwKICAgICAgMjc1NDIzMzQ0LAogICAgICA0MzAyMjc3MzQsCiAgICAgIDUwNjk0ODYxNiwKICAgICAgNjU5MDYwNTU2LAogICAgICA4ODM5OTc4NzcsCiAgICAgIDk1ODEzOTU3MSwKICAgICAgMTMyMjgyMjIxOCwKICAgICAgMTUzNzAwMjA2MywKICAgICAgMTc0Nzg3Mzc3OSwKICAgICAgMTk1NTU2MjIyMiwKICAgICAgMjAyNDEwNDgxNSwKICAgICAgMjIyNzczMDQ1MiwKICAgICAgMjM2MTg1MjQyNCwKICAgICAgMjQyODQzNjQ3NCwKICAgICAgMjc1NjczNDE4NywKICAgICAgMzIwNDAzMTQ3OSwKICAgICAgMzMyOTMyNTI5OAogICAgXTsKICAgIEgyID0gWwogICAgICAxNzc5MDMzNzAzLAogICAgICAzMTQ0MTM0Mjc3LAogICAgICAxMDEzOTA0MjQyLAogICAgICAyNzczNDgwNzYyLAogICAgICAxMzU5ODkzMTE5LAogICAgICAyNjAwODIyOTI0LAogICAgICA1Mjg3MzQ2MzUsCiAgICAgIDE1NDE0NTkyMjUKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9pbmRleC5qcwp2YXIgZGlzdF90c193ZWJfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX3dlYl9leHBvcnRzLCB7CiAgbWQ1RnJvbVN0cmluZzogKCkgPT4gbWQ1RnJvbVN0cmluZywKICBzaGEyNTZGcm9tQnVmZmVyOiAoKSA9PiBzaGEyNTZGcm9tQnVmZmVyLAogIHNoYTI1NkZyb21GaWxlOiAoKSA9PiBzaGEyNTZGcm9tRmlsZSwKICBzaGEyNTZGcm9tU3RyZWFtOiAoKSA9PiBzaGEyNTZGcm9tU3RyZWFtLAogIHNoYTI1NkZyb21TdHJpbmc6ICgpID0+IHNoYTI1NkZyb21TdHJpbmcsCiAgc2hhMjU2RnJvbVN0cmluZ1N5bmM6ICgpID0+IHNoYTI1NkZyb21TdHJpbmdTeW5jLAogIHNoYTI2NUZyb21PYmplY3Q6ICgpID0+IHNoYTI2NUZyb21PYmplY3QKfSk7CnZhciBoZXgsIGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlLCBzaGEyNTZGcm9tU3RyaW5nLCBzaGEyNTZGcm9tU3RyaW5nU3luYywgc2hhMjU2RnJvbUJ1ZmZlciwgc2hhMjY1RnJvbU9iamVjdCwgc2hhMjU2RnJvbVN0cmVhbSwgc2hhMjU2RnJvbUZpbGUsIG1kNUZyb21TdHJpbmc7CnZhciBpbml0X2Rpc3RfdHNfd2ViID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvaW5kZXguanMiKCkgewogICAgaW5pdF9wbHVnaW5zMigpOwogICAgaW5pdF9zaGEyNTZfZmFsbGJhY2soKTsKICAgIGhleCA9IChidWZmZXIyKSA9PiB7CiAgICAgIGNvbnN0IGhleENvZGVzID0gW107CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyMik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHZpZXcuYnl0ZUxlbmd0aDsgaTExICs9IDQpIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSB2aWV3LmdldFVpbnQzMihpMTEpOwogICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdmFsdWUyLnRvU3RyaW5nKDE2KTsKICAgICAgICBjb25zdCBwYWRkaW5nID0gIjAwMDAwMDAwIjsKICAgICAgICBjb25zdCBwYWRkZWRWYWx1ZSA9IChwYWRkaW5nICsgc3RyaW5nVmFsdWUpLnNsaWNlKC1wYWRkaW5nLmxlbmd0aCk7CiAgICAgICAgaGV4Q29kZXMucHVzaChwYWRkZWRWYWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGhleENvZGVzLmpvaW4oIiIpOwogICAgfTsKICAgIGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlID0gKCkgPT4gewogICAgICByZXR1cm4gdHlwZW9mIGNyeXB0byAhPT0gInVuZGVmaW5lZCIgJiYgY3J5cHRvLnN1YnRsZSAhPT0gdm9pZCAwOwogICAgfTsKICAgIHNoYTI1NkZyb21TdHJpbmcgPSBhc3luYyAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nQXJnKTsKICAgICAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHsKICAgICAgICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLCBidWZmZXIyKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBoZXgoaGFzaCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc2hhMjU2RmFsbGJhY2soYnVmZmVyMik7CiAgICAgIH0KICAgIH07CiAgICBzaGEyNTZGcm9tU3RyaW5nU3luYyA9IChzdHJpbmdBcmcpID0+IHsKICAgICAgY29uc29sZS53YXJuKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3QgdHJ1bHkgc3luY2hyb25vdXMgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgICB0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21TdHJpbmdTeW5jIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gVXNlIHNoYTI1NkZyb21TdHJpbmcgaW5zdGVhZC4iKTsKICAgIH07CiAgICBzaGEyNTZGcm9tQnVmZmVyID0gYXN5bmMgKGJ1ZmZlckFyZykgPT4gewogICAgICBpZiAoaXNDcnlwdG9TdWJ0bGVBdmFpbGFibGUoKSkgewogICAgICAgIGxldCBpbnB1dEJ1ZmZlcjsKICAgICAgICBpZiAoYnVmZmVyQXJnIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICAgICAgY29uc3QgdmlldyA9IGJ1ZmZlckFyZzsKICAgICAgICAgIGlucHV0QnVmZmVyID0gdmlldy5idWZmZXIuc2xpY2Uodmlldy5ieXRlT2Zmc2V0LCB2aWV3LmJ5dGVPZmZzZXQgKyB2aWV3LmJ5dGVMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnB1dEJ1ZmZlciA9IGJ1ZmZlckFyZzsKICAgICAgICB9CiAgICAgICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgaW5wdXRCdWZmZXIpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGhleChoYXNoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBidWZmZXJBcmcgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gYnVmZmVyQXJnIDogbmV3IFVpbnQ4QXJyYXkoYnVmZmVyQXJnKTsKICAgICAgICByZXR1cm4gc2hhMjU2RmFsbGJhY2sodWludDhBcnJheSk7CiAgICAgIH0KICAgIH07CiAgICBzaGEyNjVGcm9tT2JqZWN0ID0gYXN5bmMgKG9iamVjdEFyZykgPT4gewogICAgICBjb25zdCBzdHJpbmdpZmllZE9iamVjdCA9IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShvYmplY3RBcmcpOwogICAgICBjb25zdCBoYXNoUmVzdWx0ID0gYXdhaXQgc2hhMjU2RnJvbVN0cmluZyhzdHJpbmdpZmllZE9iamVjdCk7CiAgICAgIHJldHVybiBoYXNoUmVzdWx0OwogICAgfTsKICAgIHNoYTI1NkZyb21TdHJlYW0gPSAoaW5wdXQpID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyZWFtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgfTsKICAgIHNoYTI1NkZyb21GaWxlID0gYXN5bmMgKGZpbGVQYXRoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbUZpbGUgaXMgbm90IHN1cHBvcnRlZCBpbiBicm93c2VyIGVudmlyb25tZW50Iik7CiAgICB9OwogICAgbWQ1RnJvbVN0cmluZyA9IGFzeW5jIChzdHJpbmdUb0hhc2gpID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtZDVGcm9tU3RyaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gV2ViIENyeXB0byBBUEkgZG9lcyBub3Qgc3VwcG9ydCBNRDUuIik7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzX3dlYigpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlYWN0aW9uLmpzCnZhciBTdGF0ZUFjdGlvbjsKdmFyIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVhY3Rpb24uanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU3RhdGVBY3Rpb24gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0YXRlUGFydFJlZiwgYWN0aW9uRGVmKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRSZWYgPSBzdGF0ZVBhcnRSZWY7CiAgICAgICAgdGhpcy5hY3Rpb25EZWYgPSBhY3Rpb25EZWY7CiAgICAgIH0KICAgICAgdHJpZ2dlcihwYXlsb2FkKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQYXJ0UmVmLmRpc3BhdGNoQWN0aW9uKHRoaXMsIHBheWxvYWQpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzCnZhciBTdGF0ZVBhcnQ7CnZhciBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uKCk7CiAgICBTdGF0ZVBhcnQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG5hbWVBcmcsIHdlYlN0b3JlT3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5jdW11bGF0aXZlRGVmZXIoKTsKICAgICAgICB0aGlzLndlYlN0b3JlID0gbnVsbDsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lQXJnOwogICAgICAgIGlmICh3ZWJTdG9yZU9wdGlvbnNBcmcpIHsKICAgICAgICAgIHRoaXMud2ViU3RvcmVPcHRpb25zID0gd2ViU3RvcmVPcHRpb25zQXJnOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaW5pdGlhbGl6ZXMgdGhlIHdlYnN0b3JlCiAgICAgICAqLwogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLndlYlN0b3JlT3B0aW9ucykgewogICAgICAgICAgdGhpcy53ZWJTdG9yZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMy5XZWJTdG9yZSh0aGlzLndlYlN0b3JlT3B0aW9ucyk7CiAgICAgICAgICBhd2FpdCB0aGlzLndlYlN0b3JlLmluaXQoKTsKICAgICAgICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gYXdhaXQgdGhpcy53ZWJTdG9yZS5nZXQoU3RyaW5nKHRoaXMubmFtZSkpOwogICAgICAgICAgaWYgKHN0b3JlZFN0YXRlICYmIHRoaXMudmFsaWRhdGVTdGF0ZShzdG9yZWRTdGF0ZSkpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZVN0b3JlID0gc3RvcmVkU3RhdGU7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIHRoZSBzdGF0ZSBmcm9tIHRoZSBzdGF0ZSBzdG9yZQogICAgICAgKi8KICAgICAgZ2V0U3RhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0cyB0aGUgc3RhdGVTdG9yZSB0byB0aGUgbmV3IHN0YXRlCiAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0U3RhdGUobmV3U3RhdGVBcmcpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVTdGF0ZShuZXdTdGF0ZUFyZykpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSdgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZVN0b3JlID0gbmV3U3RhdGVBcmc7CiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTsKICAgICAgICBpZiAodGhpcy53ZWJTdG9yZSkgewogICAgICAgICAgYXdhaXQgdGhpcy53ZWJTdG9yZS5zZXQoU3RyaW5nKHRoaXMubmFtZSksIG5ld1N0YXRlQXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVmFsaWRhdGVzIHN0YXRlIHN0cnVjdHVyZSAtIGNhbiBiZSBvdmVycmlkZGVuIGZvciBjdXN0b20gdmFsaWRhdGlvbgogICAgICAgKiBAcGFyYW0gc3RhdGVBcmcKICAgICAgICovCiAgICAgIHZhbGlkYXRlU3RhdGUoc3RhdGVBcmcpIHsKICAgICAgICByZXR1cm4gc3RhdGVBcmcgIT09IG51bGwgJiYgc3RhdGVBcmcgIT09IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgb2YgYSBjaGFuZ2Ugb24gdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBhc3luYyBub3RpZnlDaGFuZ2UoKSB7CiAgICAgICAgaWYgKCF0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3JlYXRlU3RhdGVIYXNoID0gYXN5bmMgKHN0YXRlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0cy5zaGEyNTZGcm9tU3RyaW5nKGRpc3RfdHNfZXhwb3J0czEyLnN0YWJsZU9uZVdheVN0cmluZ2lmeShzdGF0ZUFyZykpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgY3VycmVudEhhc2ggPSBhd2FpdCBjcmVhdGVTdGF0ZUhhc2godGhpcy5zdGF0ZVN0b3JlKTsKICAgICAgICBpZiAodGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCAmJiBjdXJyZW50SGFzaCA9PT0gdGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoID0gY3VycmVudEhhc2g7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUubmV4dCh0aGlzLnN0YXRlU3RvcmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGEgY3VtdWxhdGl2ZSBub3RpZmljYXRpb24gYnkgYWRkaW5nIGEgY2hhbmdlIG5vdGlmaWNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBjYWxsIHN0YWNrOwogICAgICAgKi8KICAgICAgbm90aWZ5Q2hhbmdlQ3VtdWxhdGl2ZSgpIHsKICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTsKICAgICAgICAgIH0KICAgICAgICB9LCAwKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2VsZWN0cyBhIHN0YXRlIG9yIGEgc3Vic3RhdGUKICAgICAgICovCiAgICAgIHNlbGVjdChzZWxlY3RvckZuKSB7CiAgICAgICAgaWYgKCFzZWxlY3RvckZuKSB7CiAgICAgICAgICBzZWxlY3RvckZuID0gKHN0YXRlMTIpID0+IHN0YXRlMTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMuc3RhdGUucGlwZShkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLnN0YXJ0V2l0aCh0aGlzLmdldFN0YXRlKCkpLCBkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLmZpbHRlcigoc3RhdGVBcmcpID0+IHN0YXRlQXJnICE9PSB2b2lkIDApLCBkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLm1hcCgoc3RhdGVBcmcpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvckZuKHN0YXRlQXJnKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gbWFwcGVkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIGFjdGlvbiBjYXBhYmxlIG9mIG1vZGlmeWluZyB0aGUgc3RhdGUKICAgICAgICovCiAgICAgIGNyZWF0ZUFjdGlvbihhY3Rpb25EZWYpIHsKICAgICAgICByZXR1cm4gbmV3IFN0YXRlQWN0aW9uKHRoaXMsIGFjdGlvbkRlZik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGRpc3BhdGNoZXMgYW4gYWN0aW9uIG9uIHRoZSBzdGF0ZXBhcnQgbGV2ZWwKICAgICAgICovCiAgICAgIGFzeW5jIGRpc3BhdGNoQWN0aW9uKHN0YXRlQWN0aW9uLCBhY3Rpb25QYXlsb2FkKSB7CiAgICAgICAgYXdhaXQgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IGF3YWl0IHN0YXRlQWN0aW9uLmFjdGlvbkRlZih0aGlzLCBhY3Rpb25QYXlsb2FkKTsKICAgICAgICBhd2FpdCB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTsKICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3YWl0cyB1bnRpbCBhIGNlcnRhaW4gcGFydCBvZiB0aGUgc3RhdGUgYmVjb21lcyBhdmFpbGFibGUKICAgICAgICogQHBhcmFtIHNlbGVjdG9yRm4KICAgICAgICovCiAgICAgIGFzeW5jIHdhaXRVbnRpbFByZXNlbnQoc2VsZWN0b3JGbikgewogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzZWxlY3RlZE9ic2VydmFibGUgPSB0aGlzLnNlbGVjdChzZWxlY3RvckZuKTsKICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzZWxlY3RlZE9ic2VydmFibGUuc3Vic2NyaWJlKGFzeW5jICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGlzIGV4ZWN1dGVkCiAgICAgICAqLwogICAgICBhc3luYyBzdGF0ZVNldHVwKGZ1bmNBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlID0gZnVuY0FyZyh0aGlzKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5hZGRQcm9taXNlKHJlc3VsdFByb21pc2UpOwogICAgICAgIHRoaXMuc2V0U3RhdGUoYXdhaXQgcmVzdWx0UHJvbWlzZSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzCnZhciBTbWFydHN0YXRlOwp2YXIgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc21hcnRzdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnNtYXJ0c3RhdGUuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU21hcnRzdGF0ZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRNYXAgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQWxsb3dzIGdldHRpbmcgYW5kIGluaXRpYWxpemluZyBhIG5ldyBzdGF0ZXBhcnQKICAgICAgICogaW5pdE1vZGUgPT09ICdzb2Z0JyAoZGVmYXVsdCkgLSByZXR1cm5zIGV4aXN0aW5nIHN0YXRlcGFydCBpZiBleGlzdHMsIGNyZWF0ZXMgbmV3IGlmIG5vdAogICAgICAgKiBpbml0TW9kZSA9PT0gJ21hbmRhdG9yeScgLSByZXF1aXJlcyBzdGF0ZXBhcnQgdG8gbm90IGV4aXN0LCBmYWlscyBpZiBpdCBkb2VzCiAgICAgICAqIGluaXRNb2RlID09PSAnZm9yY2UnIC0gYWx3YXlzIGNyZWF0ZXMgbmV3IHN0YXRlcGFydCwgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nCiAgICAgICAqIGluaXRNb2RlID09PSAncGVyc2lzdGVudCcgLSBsaWtlICdzb2Z0JyBidXQgd2l0aCB3ZWJzdG9yZSBwZXJzaXN0ZW5jZQogICAgICAgKiBAcGFyYW0gc3RhdGVQYXJ0TmFtZUFyZwogICAgICAgKiBAcGFyYW0gaW5pdGlhbEFyZwogICAgICAgKiBAcGFyYW0gaW5pdE1vZGUKICAgICAgICovCiAgICAgIGFzeW5jIGdldFN0YXRlUGFydChzdGF0ZVBhcnROYW1lQXJnLCBpbml0aWFsQXJnLCBpbml0TW9kZSA9ICJzb2Z0IikgewogICAgICAgIGNvbnN0IGV4aXN0aW5nU3RhdGVQYXJ0ID0gdGhpcy5zdGF0ZVBhcnRNYXBbc3RhdGVQYXJ0TmFtZUFyZ107CiAgICAgICAgaWYgKGV4aXN0aW5nU3RhdGVQYXJ0KSB7CiAgICAgICAgICBzd2l0Y2ggKGluaXRNb2RlKSB7CiAgICAgICAgICAgIGNhc2UgIm1hbmRhdG9yeSI6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBwYXJ0ICcke3N0YXRlUGFydE5hbWVBcmd9JyBhbHJlYWR5IGV4aXN0cywgYnV0IGluaXRNb2RlIGlzICdtYW5kYXRvcnknYCk7CiAgICAgICAgICAgIGNhc2UgImZvcmNlIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUpOwogICAgICAgICAgICBjYXNlICJzb2Z0IjoKICAgICAgICAgICAgY2FzZSAicGVyc2lzdGVudCI6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdGVQYXJ0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWluaXRpYWxBcmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBwYXJ0ICcke3N0YXRlUGFydE5hbWVBcmd9JyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gaW5pdGlhbCBzdGF0ZSBwcm92aWRlZGApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWVBcmcsIGluaXRpYWxBcmcsIGluaXRNb2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBzdGF0ZXBhcnQKICAgICAgICogQHBhcmFtIHN0YXRlUGFydE5hbWUKICAgICAgICogQHBhcmFtIGluaXRpYWxQYXlsb2FkQXJnCiAgICAgICAqIEBwYXJhbSBpbml0TW9kZQogICAgICAgKi8KICAgICAgYXN5bmMgY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWUsIGluaXRpYWxQYXlsb2FkQXJnLCBpbml0TW9kZSA9ICJzb2Z0IikgewogICAgICAgIGNvbnN0IG5ld1N0YXRlID0gbmV3IFN0YXRlUGFydChzdGF0ZVBhcnROYW1lLCBpbml0TW9kZSA9PT0gInBlcnNpc3RlbnQiID8gewogICAgICAgICAgZGJOYW1lOiAic21hcnRzdGF0ZSIsCiAgICAgICAgICBzdG9yZU5hbWU6IHN0YXRlUGFydE5hbWUKICAgICAgICB9IDogbnVsbCk7CiAgICAgICAgYXdhaXQgbmV3U3RhdGUuaW5pdCgpOwogICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlLmdldFN0YXRlKCk7CiAgICAgICAgYXdhaXQgbmV3U3RhdGUuc2V0U3RhdGUoewogICAgICAgICAgLi4uY3VycmVudFN0YXRlLAogICAgICAgICAgLi4uaW5pdGlhbFBheWxvYWRBcmcKICAgICAgICB9KTsKICAgICAgICB0aGlzLnN0YXRlUGFydE1hcFtzdGF0ZVBhcnROYW1lXSA9IG5ld1N0YXRlOwogICAgICAgIHJldHVybiBuZXdTdGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE5ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE5LCB7CiAgU21hcnRzdGF0ZTogKCkgPT4gU21hcnRzdGF0ZSwKICBTdGF0ZUFjdGlvbjogKCkgPT4gU3RhdGVBY3Rpb24sCiAgU3RhdGVQYXJ0OiAoKSA9PiBTdGF0ZVBhcnQKfSk7CnZhciBpbml0X2Rpc3RfdHMxOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc21hcnRzdGF0ZSgpOwogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVwYXJ0KCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydHVybF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwucGx1Z2lucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5jbGFzc2VzLnNtYXJ0dXJsLmpzCnZhciBTbWFydHVybDsKdmFyIGluaXRfc21hcnR1cmxfY2xhc3Nlc19zbWFydHVybCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLmNsYXNzZXMuc21hcnR1cmwuanMiKCkgewogICAgaW5pdF9zbWFydHVybF9wbHVnaW5zKCk7CiAgICBTbWFydHVybCA9IGNsYXNzIF9TbWFydHVybCB7CiAgICAgIC8vIFN0YXRpYyBtZXRob2QgdG8gY3JlYXRlIGEgU21hcnR1cmwgaW5zdGFuY2UgZnJvbSBhIFVSTCBzdHJpbmcKICAgICAgc3RhdGljIGNyZWF0ZUZyb21VcmwodXJsQXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgY29uc3QgcGFyc2VkVXJsSW5zdGFuY2UgPSBuZXcgVVJMKHVybEFyZyk7CiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0ge307CiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1QYWlycyA9IFtdOwogICAgICAgIGlmIChwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gpIHsKICAgICAgICAgIHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaC5yZXBsYWNlKCI/IiwgIiIpLnNwbGl0KCImIikubWFwKChzZWFyY2hQYXJhbVBhaXIpID0+IHsKICAgICAgICAgICAgc2VhcmNoUGFyYW1QYWlycy5wdXNoKHsKICAgICAgICAgICAgICBrZXk6IHNlYXJjaFBhcmFtUGFpci5zcGxpdCgiPSIpWzBdLAogICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hQYXJhbVBhaXIuc3BsaXQoIj0iKVsxXQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtUGFpciBvZiBzZWFyY2hQYXJhbVBhaXJzKSB7CiAgICAgICAgICBzZWFyY2hQYXJhbXNbc2VhcmNoUGFyYW1QYWlyLmtleV0gPSBzZWFyY2hQYXJhbVBhaXIudmFsdWU7CiAgICAgICAgfQogICAgICAgIGlmIChvcHRpb25zQXJnPy5zZWFyY2hQYXJhbXMpIHsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhvcHRpb25zQXJnLnNlYXJjaFBhcmFtcykpIHsKICAgICAgICAgICAgc2VhcmNoUGFyYW1zW2tleTJdID0gb3B0aW9uc0FyZy5zZWFyY2hQYXJhbXNba2V5Ml07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBwYXRoMiA9IHBhcnNlZFVybEluc3RhbmNlLnBhdGhuYW1lIHx8ICIiOwogICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHBhdGgyICs9ICI/IjsKICAgICAgICAgIGxldCBmaXJzdDIgPSB0cnVlOwogICAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHsKICAgICAgICAgICAgaWYgKGZpcnN0MikgewogICAgICAgICAgICAgIGZpcnN0MiA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBhdGgyICs9ICImIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBwYXRoMiArPSBgJHtrZXkyfT0ke3NlYXJjaFBhcmFtc1trZXkyXX1gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSB7CiAgICAgICAgICAuLi5wYXJzZWRVcmxJbnN0YW5jZSwKICAgICAgICAgIGhyZWY6IHBhcnNlZFVybEluc3RhbmNlLmhyZWYsCiAgICAgICAgICBvcmlnaW46IHBhcnNlZFVybEluc3RhbmNlLm9yaWdpbiwKICAgICAgICAgIHByb3RvY29sOiBwYXJzZWRVcmxJbnN0YW5jZS5wcm90b2NvbCwKICAgICAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmxJbnN0YW5jZS51c2VybmFtZSwKICAgICAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmxJbnN0YW5jZS5wYXNzd29yZCwKICAgICAgICAgIGhvc3Q6IHBhcnNlZFVybEluc3RhbmNlLmhvc3QsCiAgICAgICAgICBob3N0bmFtZTogcGFyc2VkVXJsSW5zdGFuY2UuaG9zdG5hbWUsCiAgICAgICAgICBwb3J0OiBwYXJzZWRVcmxJbnN0YW5jZS5wb3J0LAogICAgICAgICAgcGF0aDogcGF0aDIsCiAgICAgICAgICBwYXRobmFtZTogcGFyc2VkVXJsSW5zdGFuY2UucGF0aG5hbWUsCiAgICAgICAgICBzZWFyY2g6IHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaCwKICAgICAgICAgIHNlYXJjaFBhcmFtcywKICAgICAgICAgIGhhc2g6IHBhcnNlZFVybEluc3RhbmNlLmhhc2gKICAgICAgICB9OwogICAgICAgIGlmICghcGFyc2VkVXJsLnBvcnQgJiYgcGFyc2VkVXJsLnByb3RvY29sID09PSAiaHR0cHM6IikgewogICAgICAgICAgcGFyc2VkVXJsLnBvcnQgPSAiNDQzIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJzZWRVcmwucG9ydCAmJiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICJodHRwOiIpIHsKICAgICAgICAgIHBhcnNlZFVybC5wb3J0ID0gIjgwIjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuU21hcnR1cmwgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXR1cm5TbWFydHVybCwgcGFyc2VkVXJsKTsKICAgICAgICByZXR1cm4gcmV0dXJuU21hcnR1cmw7CiAgICAgIH0KICAgICAgLy8gU3RhdGljIG1ldGhvZCB0byBjcmVhdGUgYSBTbWFydHVybCBpbnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nIElVcmxPYmplY3QKICAgICAgc3RhdGljIGNyZWF0ZUZyb21QYXJzZWRVcmwocGFyc2VkVXJsQXJnKSB7CiAgICAgICAgY29uc3QgcmV0dXJuU21hcnR1cmwgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXR1cm5TbWFydHVybCwgcGFyc2VkVXJsQXJnKTsKICAgICAgICByZXR1cm4gcmV0dXJuU21hcnR1cmw7CiAgICAgIH0KICAgICAgLy8gQ29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgc2VhcmNoUGFyYW1zIGFzIGFuIGVtcHR5IG9iamVjdAogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IHt9OwogICAgICB9CiAgICAgIC8vIE1ldGhvZCB0byBjcmVhdGUgYW4gaW5kZXBlbmRlbnQgY2xvbmUgb2YgdGhlIGN1cnJlbnQgU21hcnR1cmwgaW5zdGFuY2UKICAgICAgY2xvbmUoKSB7CiAgICAgICAgY29uc3QgY2xvbmVkSW5zdGFuY2UgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihjbG9uZWRJbnN0YW5jZSwgdGhpcyk7CiAgICAgICAgY2xvbmVkSW5zdGFuY2Uuc2VhcmNoUGFyYW1zID0geyAuLi50aGlzLnNlYXJjaFBhcmFtcyB9OwogICAgICAgIHJldHVybiBjbG9uZWRJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVHlwZWQgbWV0aG9kIHRvIHNldCBhIHByb3BlcnR5IGFuZCByZXR1cm4gdGhlIGluc3RhbmNlIGZvciBjaGFpbmluZy4KICAgICAgICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBzZXQgKG11c3QgYmUgYSBrZXkgb2YgU21hcnR1cmwpCiAgICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIHByb3BlcnR5CiAgICAgICAqIEByZXR1cm5zIFRoZSBTbWFydHVybCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nCiAgICAgICAqLwogICAgICBzZXQocHJvcCwgdmFsdWUyKSB7CiAgICAgICAgdGhpc1twcm9wXSA9IHZhbHVlMjsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICAvLyBNZXRob2QgdG8gY29udmVydCB0aGUgU21hcnR1cmwgaW5zdGFuY2UgYmFjayBpbnRvIGEgVVJMIHN0cmluZwogICAgICB0b1N0cmluZygpIHsKICAgICAgICBsZXQgdXNlcnBhcnQgPSBgYDsKICAgICAgICBpZiAodGhpcy51c2VybmFtZSAmJiAhdGhpcy5wYXNzd29yZCkgewogICAgICAgICAgdXNlcnBhcnQgPSBgJHt0aGlzLnVzZXJuYW1lfUBgOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7CiAgICAgICAgICB1c2VycGFydCA9IGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5wYXNzd29yZH1AYDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGAke3RoaXMucHJvdG9jb2x9Ly8ke3VzZXJwYXJ0fSR7dGhpcy5ob3N0bmFtZX06JHt0aGlzLnBvcnR9JHt0aGlzLnBhdGh9YDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMCwgewogIFNtYXJ0dXJsOiAoKSA9PiBTbWFydHVybAp9KTsKdmFyIGluaXRfZGlzdF90czIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHVybF9jbGFzc2VzX3NtYXJ0dXJsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcwp2YXIgRGVmZXJyZWQyLCBkZWZlcjM7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkMiA9IGNsYXNzIHsKICAgICAgY2xhaW0oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xhaW1lZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEZWZlcnJlZCBhbHJlYWR5IGNsYWltZWQiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jbGFpbWVkID0gdHJ1ZTsKICAgICAgfQogICAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkQXQgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5jbGFpbWVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgICAgIHRoaXMucmVzb2x2ZSA9ICh2YWx1ZUFyZykgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJmdWxmaWxsZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlc29sdmUyKHZhbHVlQXJnKTsKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnJlamVjdCA9IChyZWFzb24pID0+IHsKICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAicmVqZWN0ZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZGVmZXIzID0gKCkgPT4gewogICAgICByZXR1cm4gbmV3IERlZmVycmVkMigpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcwp2YXIgQ3VtdWxhdGl2ZURlZmVycmVkMiwgY3VtdWxhdGl2ZURlZmVyMjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMigpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkMiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzID0gW107CiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IGRlZmVyMygpOwogICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIHdoaWxlICh0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBwb3BwZWRQcm9taXNlID0gdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnNoaWZ0KCk7CiAgICAgICAgICAgIGF3YWl0IHBvcHBlZFByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9LCAwKTsKICAgICAgfQogICAgICBhZGRQcm9taXNlKHByb21pc2VBcmcpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMucHVzaChwcm9taXNlQXJnKTsKICAgICAgfQogICAgfTsKICAgIGN1bXVsYXRpdmVEZWZlcjIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkMigpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMSwgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkMiwKICBEZWZlcnJlZDogKCkgPT4gRGVmZXJyZWQyLAogIGN1bXVsYXRpdmVEZWZlcjogKCkgPT4gY3VtdWxhdGl2ZURlZmVyMiwKICBkZWZlcjogKCkgPT4gZGVmZXIzLAogIGdldEZpcnN0VHJ1ZU9yRmFsc2U6ICgpID0+IGdldEZpcnN0VHJ1ZU9yRmFsc2UyLAogIG1hcDogKCkgPT4gbWFwNiwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZTIsCiAgcmVzb2x2ZWRQcm9taXNlOiAoKSA9PiByZXNvbHZlZFByb21pc2UyLAogIHRpbWVvdXRBbmRDb250aW51ZTogKCkgPT4gdGltZW91dEFuZENvbnRpbnVlMiwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAyCn0pOwp2YXIgcmVzb2x2ZWRQcm9taXNlMiwgcmVqZWN0ZWRQcm9taXNlMiwgbWFwNiwgdGltZW91dFdyYXAyLCB0aW1lb3V0QW5kQ29udGludWUyLCBnZXRGaXJzdFRydWVPckZhbHNlMjsKdmFyIGluaXRfZGlzdF90czIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkMigpOwogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIHJlc29sdmVkUHJvbWlzZTIgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UyID0gKGVycikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICAgIH07CiAgICBtYXA2ID0gYXN5bmMgKGlucHV0QXJnLCBmdW5jdGlvbkFyZykgPT4gewogICAgICBjb25zdCBwcm9taXNlQXJyYXkgPSBbXTsKICAgICAgY29uc3QgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0QXJnKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZ1bmN0aW9uQXJnKGl0ZW0pOwogICAgICAgIHByb21pc2VBcnJheS5wdXNoKHByb21pc2UpOwogICAgICAgIHByb21pc2UudGhlbigoeDMpID0+IHsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goeDMpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7CiAgICAgIHJldHVybiByZXN1bHRBcnJheTsKICAgIH07CiAgICB0aW1lb3V0V3JhcDIgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUyID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnID0gNmU0KSA9PiB7CiAgICAgIHJldHVybiB0aW1lb3V0V3JhcDIocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIGZhbHNlKTsKICAgIH07CiAgICBnZXRGaXJzdFRydWVPckZhbHNlMiA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIzKCk7CiAgICAgIGZvciAoY29uc3QgcHJvbWlzZUFyZyBvZiBwcm9taXNlc0FyZykgewogICAgICAgIHByb21pc2VBcmcudGhlbigocmVzdWx0QXJnKSA9PiB7CiAgICAgICAgICBpZiAocmVzdWx0QXJnID09PSB0cnVlKSB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBQcm9taXNlLmFsbChwcm9taXNlc0FyZykudGhlbigoKSA9PiB7CiAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydGRlbGF5QDMuMC4xL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZGVsYXkvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjIsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0MiwKICBkZWxheUZvcjogKCkgPT4gZGVsYXlGb3IyLAogIGRlbGF5Rm9yUmFuZG9tOiAoKSA9PiBkZWxheUZvclJhbmRvbTIKfSk7CnZhciBkZWxheUZvcjIsIGRlbGF5Rm9yUmFuZG9tMiwgVGltZW91dDI7CnZhciBpbml0X2Rpc3RfdHMyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRkZWxheUAzLjAuMS9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjEoKTsKICAgIGRlbGF5Rm9yMiA9IGFzeW5jICh0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgY29uc3QgdGltZW91dDIgPSBuZXcgVGltZW91dDIodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tMiA9IGFzeW5jICh0aW1lTWluSW5NaWxsaXNlY29uZEFyZywgdGltZU1heEluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGF3YWl0IGRlbGF5Rm9yMihNYXRoLnJhbmRvbSgpICogKHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnIC0gdGltZU1pbkluTWlsbGlzZWNvbmRBcmcpICsgdGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIFRpbWVvdXQyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIzKCk7CiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAoIXRoaXMuX2NhbmNlbGxlZCkgewogICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHBhc3NPbik7CiAgICAgICAgICB9CiAgICAgICAgfSwgdGltZUluTWlsbGlzZWNvbmRBcmcpOwogICAgICAgIHRoaXMuc3RhcnRlZCA9IERhdGUubm93KCk7CiAgICAgICAgaWYgKHVucmVmZWRBcmcpIHsKICAgICAgICAgIHRoaXMubWFrZVVucmVmZWQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHVucmVmZmluZyBhIHRpbWVvdXQgY2F1c2VzIHRoZSBub2RlIHByb2Nlc3MgdG8gbm90IHdhaXQgZm9yIGNvbXBsZXRpb24gYmVmb3JlIGV4aXQKICAgICAgICovCiAgICAgIG1ha2VVbnJlZmVkKCkgewogICAgICAgIHRoaXMuX3RpbWVvdXQudW5yZWYoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2FuY2VscyB0aGUgdGltZXIKICAgICAgICovCiAgICAgIGNhbmNlbCgpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlOwogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTsKICAgICAgfQogICAgICBnZXRUaW1lTGVmdCgpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0YXJ0ZWQgKyB0aGlzLnRpbWVvdXRJbk1pbGxpcyAtIERhdGUubm93KCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdCA+IDAgPyByZXN1bHQgOiAwOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2FkZHJlc3MuanMKdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9hZGRyZXNzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb21wYW55LmpzCnZhciBpbml0X2NvbXBhbnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29tcGFueS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbnRhY3QuanMKdmFyIGluaXRfY29udGFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb250YWN0LmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY2hlY2tpbmdhY2NvdW50LmpzCnZhciBpbml0X2NoZWNraW5nYWNjb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2NoZWNraW5nYWNjb3VudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY3VycmVuY3kuanMKdmFyIGluaXRfY3VycmVuY3kgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jdXJyZW5jeS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9leHBlbnNlLmpzCnZhciBpbml0X2V4cGVuc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9leHBlbnNlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbnZvaWNlLmpzCnZhciBpbml0X2ludm9pY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbnZvaWNlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9wYXltZW50LmpzCnZhciBpbml0X3BheW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9wYXltZW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3RyYW5zYWN0aW9uLmpzCnZhciBpbml0X3RyYW5zYWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvdHJhbnNhY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMKdmFyIGZpbmFuY2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9maW5hbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9jaGVja2luZ2FjY291bnQoKTsKICAgIGluaXRfY3VycmVuY3koKTsKICAgIGluaXRfZXhwZW5zZSgpOwogICAgaW5pdF9pbnZvaWNlKCk7CiAgICBpbml0X3BheW1lbnQoKTsKICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9qb2IuanMKdmFyIElKb2I7CnZhciBpbml0X2pvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9qb2IuanMiKCkgewogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2NvbXBhbnkoKTsKICAgIGluaXRfY29udGFjdCgpOwogICAgSUpvYiA9IGNsYXNzIHsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvbW9uZ29kZXNjcmlwdG9yLmpzCnZhciBpbml0X21vbmdvZGVzY3JpcHRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9tb25nb2Rlc2NyaXB0b3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdGFjdGlvbi5qcwp2YXIgaW5pdF9vYmplY3RhY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMKdmFyIGluaXRfb2JqZWN0c3RhdHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdHN0YXR1cy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvd3JhcHBlZGRhdGEuanMKdmFyIGluaXRfd3JhcHBlZGRhdGEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvd3JhcHBlZGRhdGEuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL2luZGV4LmpzCnZhciBkYXRhYmFzZV9leHBvcnRzID0ge307CnZhciBpbml0X2RhdGFiYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbW9uZ29kZXNjcmlwdG9yKCk7CiAgICBpbml0X29iamVjdGFjdGlvbigpOwogICAgaW5pdF9vYmplY3RzdGF0dXMoKTsKICAgIGluaXRfd3JhcHBlZGRhdGEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9sZXR0ZXIuanMKdmFyIGluaXRfbGV0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2xldHRlci5qcyIoKSB7CiAgICBpbml0X2J1c2luZXNzKCk7CiAgICBpbml0X2ZpbmFuY2UoKTsKICAgIGluaXRfZGF0YWJhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZGYuanMKdmFyIGluaXRfcGRmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BkZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGVyc29uLmpzCnZhciBpbml0X3BlcnNvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZXJzb24uanMiKCkgewogICAgaW5pdF9jb250YWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcHJvamVjdC5qcwp2YXIgaW5pdF9wcm9qZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzCnZhciBidXNpbmVzc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGJ1c2luZXNzX2V4cG9ydHMsIHsKICBJSm9iOiAoKSA9PiBJSm9iCn0pOwp2YXIgaW5pdF9idXNpbmVzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZHJlc3MoKTsKICAgIGluaXRfY29tcGFueSgpOwogICAgaW5pdF9jb250YWN0KCk7CiAgICBpbml0X2pvYigpOwogICAgaW5pdF9sZXR0ZXIoKTsKICAgIGluaXRfcGRmKCk7CiAgICBpbml0X3BlcnNvbigpOwogICAgaW5pdF9wcm9qZWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9jb21taXRpbmZvLmpzCnZhciBpbml0X2NvbW1pdGluZm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9jb21taXRpbmZvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL3N0YXR1c29iamVjdC5qcwp2YXIgaW5pdF9zdGF0dXNvYmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9zdGF0dXNvYmplY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvaW5kZXguanMKdmFyIGNvZGVfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb2RlMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tbWl0aW5mbygpOwogICAgaW5pdF9zdGF0dXNvYmplY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvY29udGFpbmVyLmpzCnZhciBpbml0X2NvbnRhaW5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvY29udGFpbmVyLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvdm9sdW1lbW91bnQuanMKdmFyIGluaXRfdm9sdW1lbW91bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL3ZvbHVtZW1vdW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMKdmFyIGNvbnRhaW5lcl9leHBvcnRzID0ge307CnZhciBpbml0X2NvbnRhaW5lcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29udGFpbmVyKCk7CiAgICBpbml0X3ZvbHVtZW1vdW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hcnRpY2xlLmpzCnZhciBpbml0X2FydGljbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hcnRpY2xlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hdXRob3IuanMKdmFyIGluaXRfYXV0aG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXV0aG9yLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9kb2N1bWVudGF0aW9uc2V0LmpzCnZhciBpbml0X2RvY3VtZW50YXRpb25zZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9kb2N1bWVudGF0aW9uc2V0LmpzIigpIHsKICAgIGluaXRfYXJ0aWNsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvaW5kZXguanMKdmFyIGNvbnRlbnRfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb250ZW50MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzIigpIHsKICAgIGluaXRfYXJ0aWNsZSgpOwogICAgaW5pdF9hdXRob3IoKTsKICAgIGluaXRfZG9jdW1lbnRhdGlvbnNldCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvZGF0ZS5qcwp2YXIgaW5pdF9kYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvZGF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC90aW1lLmpzCnZhciBpbml0X3RpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC90aW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2luZGV4LmpzCnZhciBnZW5lcmFsX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZ2VuZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGF0ZSgpOwogICAgaW5pdF90aW1lKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jZXJ0LmpzCnZhciBpbml0X2NlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jZXJ0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NuYW1lLmpzCnZhciBJQ25hbWVEZXNjcmlwdG9yOwp2YXIgaW5pdF9jbmFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NuYW1lLmpzIigpIHsKICAgIGluaXRfY2VydCgpOwogICAgSUNuYW1lRGVzY3JpcHRvciA9IGNsYXNzIHsKICAgIH07CiAgICA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kZXZpY2UuanMKdmFyIGluaXRfZGV2aWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Rucy5qcwp2YXIgaW5pdF9kbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zY2hhbGxlbmdlLmpzCnZhciBpbml0X2Ruc2NoYWxsZW5nZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kb21haW5kZWxlZ2F0aW9uLmpzCnZhciBpbml0X2RvbWFpbmRlbGVnYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kb21haW5kZWxlZ2F0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2p3dC5qcwp2YXIgaW5pdF9qd3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9qd3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMKdmFyIGluaXRfbmV0d29ya25vZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9uZXR3b3Jrbm9kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXF1ZXN0LmpzCnZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXF1ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JldmVyc2Vwcm94eS5qcwp2YXIgaW5pdF9yZXZlcnNlcHJveHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXZlcnNlcHJveHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvc3NoLmpzCnZhciBpbml0X3NzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3NzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcwp2YXIgbmV0d29ya19leHBvcnRzID0ge307Cl9fZXhwb3J0KG5ldHdvcmtfZXhwb3J0cywgewogIElDbmFtZURlc2NyaXB0b3I6ICgpID0+IElDbmFtZURlc2NyaXB0b3IKfSk7CnZhciBpbml0X25ldHdvcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NlcnQoKTsKICAgIGluaXRfY25hbWUoKTsKICAgIGluaXRfZGV2aWNlKCk7CiAgICBpbml0X2RucygpOwogICAgaW5pdF9kbnNjaGFsbGVuZ2UoKTsKICAgIGluaXRfZG9tYWluZGVsZWdhdGlvbigpOwogICAgaW5pdF9qd3QoKTsKICAgIGluaXRfbmV0d29ya25vZGUoKTsKICAgIGluaXRfcmVxdWVzdCgpOwogICAgaW5pdF9yZXZlcnNlcHJveHkoKTsKICAgIGluaXRfc3NoKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9wcm9kdWN0LmpzCnZhciBpbml0X3Byb2R1Y3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9wcm9kdWN0LmpzIigpIHsKICAgIGluaXRfY29tcGFueSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvc3Vic2NyaXB0aW9ucGxhbi5qcwp2YXIgaW5pdF9zdWJzY3JpcHRpb25wbGFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvc3Vic2NyaXB0aW9ucGxhbi5qcyIoKSB7CiAgICBpbml0X3Byb2R1Y3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzCnZhciBzYWFzX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfc2FhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3Vic2NyaXB0aW9ucGxhbigpOwogICAgaW5pdF9wcm9kdWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcwp2YXIgc3RvcmFnZV9leHBvcnRzID0ge307CnZhciBpbml0X3N0b3JhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rLmpzCnZhciBpbml0X2xpbmszID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGluay5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9tZW51aXRlbS5qcwp2YXIgaW5pdF9tZW51aXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL21lbnVpdGVtLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmtibG9jay5qcwp2YXIgaW5pdF9saW5rYmxvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rYmxvY2suanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvaW5kZXguanMKdmFyIHdlYnNpdGVfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF93ZWJzaXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saW5rMygpOwogICAgaW5pdF9tZW51aXRlbSgpOwogICAgaW5pdF9saW5rYmxvY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy90eXBlZmVzdC5vd24uanMKdmFyIGluaXRfdHlwZWZlc3Rfb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3R5cGVmZXN0Lm93bi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIzLCB7CiAgYnVzaW5lc3M6ICgpID0+IGJ1c2luZXNzX2V4cG9ydHMsCiAgY29kZTogKCkgPT4gY29kZV9leHBvcnRzLAogIGNvbnRhaW5lcjogKCkgPT4gY29udGFpbmVyX2V4cG9ydHMsCiAgY29udGVudDogKCkgPT4gY29udGVudF9leHBvcnRzLAogIGRhdGFiYXNlOiAoKSA9PiBkYXRhYmFzZV9leHBvcnRzLAogIGZpbmFuY2U6ICgpID0+IGZpbmFuY2VfZXhwb3J0cywKICBnZW5lcmFsOiAoKSA9PiBnZW5lcmFsX2V4cG9ydHMsCiAgbmV0d29yazogKCkgPT4gbmV0d29ya19leHBvcnRzLAogIHNhYXM6ICgpID0+IHNhYXNfZXhwb3J0cywKICBzdG9yYWdlOiAoKSA9PiBzdG9yYWdlX2V4cG9ydHMsCiAgd2Vic2l0ZTogKCkgPT4gd2Vic2l0ZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9idXNpbmVzcygpOwogICAgaW5pdF9jb2RlMygpOwogICAgaW5pdF9jb250YWluZXIyKCk7CiAgICBpbml0X2RhdGFiYXNlKCk7CiAgICBpbml0X2ZpbmFuY2UoKTsKICAgIGluaXRfY29udGVudDMoKTsKICAgIGluaXRfZ2VuZXJhbCgpOwogICAgaW5pdF9uZXR3b3JrKCk7CiAgICBpbml0X3NhYXMoKTsKICAgIGluaXRfc3RvcmFnZSgpOwogICAgaW5pdF93ZWJzaXRlKCk7CiAgICBpbml0X3R5cGVmZXN0X293bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLnBsdWdpbnMuanMKdmFyIGluaXRfd2Vic2V0dXBfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIyKCk7CiAgICBpbml0X2Rpc3RfdHMyMSgpOwogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbnRlcmZhY2VzL2luZGV4LmpzCnZhciBpbml0X2ludGVyZmFjZXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanMKdmFyIFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBUYWcgPSBjbGFzcyB7CiAgICAgIGFwcGVuZFRvRG9tKCkgewogICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQgJiYgIXRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlbW92ZUZyb21Eb20oKSB7CiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUpIHsKICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzb25sZHRhZy5qcwp2YXIgSnNvbkxkVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanNvbmxkdGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzMigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgSnNvbkxkVGFnID0gY2xhc3MgX0pzb25MZFRhZyBleHRlbmRzIFRhZyB7CiAgICAgIHN0YXRpYyBjcmVhdGVDb21wYW55SnNvbkxkKGNvbXBhbnlEYXRhQXJnKSB7CiAgICAgICAgY29uc3QgY29tcGFueUxkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiQ29ycG9yYXRpb24iLAogICAgICAgICAgbmFtZTogY29tcGFueURhdGFBcmcubmFtZSwKICAgICAgICAgIGFsdGVybmF0ZU5hbWU6IGNvbXBhbnlEYXRhQXJnLm5hbWUucmVwbGFjZSgiIEdtYkgiLCAiIiksCiAgICAgICAgICB1cmw6IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3Qud2Vic2l0ZSwKICAgICAgICAgIGxvZ286IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCwKICAgICAgICAgIGNvbnRhY3RQb2ludDogewogICAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICAgdGVsZXBob25lOiBjb21wYW55RGF0YUFyZy5jb250YWN0LnBob25lLAogICAgICAgICAgICBjb250YWN0VHlwZTogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgICBhcmVhU2VydmVkOiAiREUiLAogICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZTogWyJlbiIsICJHZXJtYW4iXQogICAgICAgICAgfSwKICAgICAgICAgIHNhbWVBczogW10KICAgICAgICB9OwogICAgICAgIGlmIChjb21wYW55RGF0YUFyZy5jb250YWN0LmZhY2Vib29rVXJsKSB7CiAgICAgICAgICBjb21wYW55TGQuc2FtZUFzLnB1c2goY29tcGFueURhdGFBcmcuY29udGFjdC5mYWNlYm9va1VybCk7CiAgICAgICAgfQogICAgICAgIGlmIChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpIHsKICAgICAgICAgIGNvbXBhbnlMZC5zYW1lQXMucHVzaChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZFRhZyA9IG5ldyBfSnNvbkxkVGFnKGNvbXBhbnlMZCk7CiAgICAgICAgcmV0dXJuIGxkVGFnOwogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVOZXdzQXJ0aWNsZUpzb25MZChuZXdzQXJ0aWNsZUFyZykgewogICAgICAgIGNvbnN0IG5ld3NBcnRpY2xlTGQgPSB7CiAgICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAgICJAdHlwZSI6ICJOZXdzQXJ0aWNsZSIsCiAgICAgICAgICBtYWluRW50aXR5T2ZQYWdlOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKICAgICAgICAgICAgIkBpZCI6IHdpbmRvdy5sb2NhdGlvbi5ocmVmCiAgICAgICAgICB9LAogICAgICAgICAgaGVhZGxpbmU6ICJBcnRpY2xlIGhlYWRsaW5lIiwKICAgICAgICAgIGltYWdlOiBbbmV3c0FydGljbGVBcmcuZmVhdHVyZWRJbWFnZVVybF0sCiAgICAgICAgICBkYXRlUHVibGlzaGVkOiBuZXcgRGF0ZShuZXdzQXJ0aWNsZUFyZy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICBkYXRlTW9kaWZpZWQ6IG5ldyBEYXRlKG5ld3NBcnRpY2xlQXJnLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSwKICAgICAgICAgIGF1dGhvcjogewogICAgICAgICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgICAgICAgbmFtZTogYCR7bmV3c0FydGljbGVBcmcuYXV0aG9yLmZpcnN0TmFtZX0gJHtuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZX1gCiAgICAgICAgICB9LAogICAgICAgICAgcHVibGlzaGVyOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAogICAgICAgICAgICBuYW1lOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZSwKICAgICAgICAgICAgbG9nbzogewogICAgICAgICAgICAgICJAdHlwZSI6ICJJbWFnZU9iamVjdCIsCiAgICAgICAgICAgICAgdXJsOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZQogICAgICAgICAgICAgIC8vIFRPRE8KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3IuZmlyc3ROYW1lCiAgICAgICAgfTsKICAgICAgICBjb25zdCBsZFRhZyA9IG5ldyBfSnNvbkxkVGFnKG5ld3NBcnRpY2xlTGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvZHVjdEpzb25MZChwcm9kdWN0QXJnLCBwdWJsaXNoZXJBcmcpIHsKICAgICAgICBjb25zdCBwcm9kdWN0TGQgPSB7CiAgICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAgICJAdHlwZSI6ICJTb2Z0d2FyZUFwcGxpY2F0aW9uIiwKICAgICAgICAgIG5hbWU6IHByb2R1Y3RBcmcubmFtZSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0QXJnLmRlc2NyaXB0aW9uLAogICAgICAgICAgb3BlcmF0aW5nU3lzdGVtOiBwcm9kdWN0QXJnLm9zLAogICAgICAgICAgYXBwbGljYXRpb25DYXRlZ29yeTogcHJvZHVjdEFyZy5jYXRlZ29yeSwKICAgICAgICAgIG9mZmVyczogewogICAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgICBuYW1lOiAiVXNlci1iYXNlZCBQbGFuIiwKICAgICAgICAgICAgcHJpY2VTcGVjaWZpY2F0aW9uOiB7CiAgICAgICAgICAgICAgIkB0eXBlIjogIlByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICJOdW1iZXIgb2YgVXNlcnMiLAogICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgICAgcHJpY2U6ICI0Ljk5IiwKICAgICAgICAgICAgICBwcmljZUN1cnJlbmN5OiAiRVVSIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHVibGlzaGVyOiB0aGlzLmNyZWF0ZUNvbXBhbnlKc29uTGQocHVibGlzaGVyQXJnKS5lbGVtZW50UmVmLnRleHRDb250ZW50LAogICAgICAgICAgc2NyZWVuc2hvdDogImh0dHBzOi8vd3d3LnNvY2lhbC5pby9zY3JlZW5zaG90LnBuZyIsCiAgICAgICAgICB1cmw6ICJodHRwczovL3d3dy5zb2NpYWwuaW8vIgogICAgICAgIH07CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhwcm9kdWN0TGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICAvLyBJTlNUQU5DRQogICAgICBjb25zdHJ1Y3RvcihsZE9iamVjdEFyZykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgY29uc3QganNvbkxkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgIGpzb25MZEVsZW1lbnQudHlwZSA9ICJhcHBsaWNhdGlvbi9sZCtqc29uIjsKICAgICAgICBqc29uTGRFbGVtZW50LnRleHQgPSBKU09OLnN0cmluZ2lmeShsZE9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0ganNvbkxkRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcuanMKdmFyIE9wZW5ncmFwaFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm9wZW5ncmFwaHRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIE9wZW5ncmFwaFRhZyA9IGNsYXNzIF9PcGVuZ3JhcGhUYWcgZXh0ZW5kcyBUYWcgewogICAgICBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MobmV3c0FydGljbGVBcmcpIHsKICAgICAgICBjb25zdCB0YWdBcnJheSA9IFtdOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnVybCIsIG5ld3NBcnRpY2xlQXJnLnVybCkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnRpdGxlIiwgbmV3c0FydGljbGVBcmcudGl0bGUpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzpkZXNjcmlwdGlvbiIsIG5ld3NBcnRpY2xlQXJnLmNvbnRlbnQpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzppbWFnZSIsIG5ld3NBcnRpY2xlQXJnLmZlYXR1cmVkSW1hZ2VVcmwpKTsKICAgICAgICByZXR1cm4gdGFnQXJyYXk7CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZVByb2R1Y3RPZ1RhZ3MocHJvZHVjdEFyZykgewogICAgICAgIGNvbnN0IHRhZ0FycmF5ID0gW107CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dXJsIiwgZ2xvYmFsVGhpcy5sb2NhdGlvbi5ocmVmKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dGl0bGUiLCBgJHtwcm9kdWN0QXJnLm5hbWV9IC0gJHtwcm9kdWN0QXJnLnNsb2dhbn1gKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6c2l0ZV9uYW1lIiwgcHJvZHVjdEFyZy5uYW1lKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6ZGVzY3JpcHRpb24iLCBwcm9kdWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBwcm9kdWN0QXJnLmxvZ29MaW5rKSk7CiAgICAgICAgcmV0dXJuIHRhZ0FycmF5OwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5TmFtZUFyZywgY29udGVudEFyZykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgY29uc3Qgb3BlbkdyYXBoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTsKICAgICAgICBvcGVuR3JhcGhFbGVtZW50LnNldEF0dHJpYnV0ZSgicHJvcGVydHkiLCBwcm9wZXJ0eU5hbWVBcmcpOwogICAgICAgIG9wZW5HcmFwaEVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gb3BlbkdyYXBoRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ2xldmVsLmpzCnZhciBUYWdMZXZlbDsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ2xldmVsLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIoKTsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGFnTGV2ZWwgPSBjbGFzcyB7CiAgICAgIHNldCB0aXRsZSh0aXRsZUFyZykgewogICAgICAgIHRoaXMudGl0bGVTdG9yZSA9IHRpdGxlQXJnOwogICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAiZW5hYmxlZCIpIHsKICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy50aXRsZVN0b3JlOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXQgdGl0bGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVTdG9yZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0YWdNYW5hZ2VyUmVmQXJnLCBsZXZlbFR5cGUpIHsKICAgICAgICB0aGlzLnRhZ3MgPSBbXTsKICAgICAgICB0aGlzLnN0YXRlID0gImRpc2FibGVkIjsKICAgICAgICB0aGlzLnRhZ01hbmFnZXJSZWYgPSB0YWdNYW5hZ2VyUmVmQXJnOwogICAgICB9CiAgICAgIGFkZFRhZyh0YWdBcmcpIHsKICAgICAgICBpZiAodGFnQXJnIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgIGZvciAoY29uc3QgdGFnQXJnMiBvZiB0YWdBcmcpIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcodGFnQXJnMik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudGFncy5wdXNoKHRhZ0FyZyk7CiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gImVuYWJsZWQiKSB7CiAgICAgICAgICAgIHRhZ0FyZy5hcHBlbmRUb0RvbSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBhZGRDb21wYW55SW5mbyhjb21wYW55RGF0YUFyZykgewogICAgICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVDb21wYW55SnNvbkxkKGNvbXBhbnlEYXRhQXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dHlwZSIsICJidXNpbmVzcy5idXNpbmVzcyIpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzp0aXRsZSIsIGNvbXBhbnlEYXRhQXJnLm5hbWUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzp1cmwiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LndlYnNpdGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzppbWFnZSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpzdHJlZXRfYWRkcmVzcyIsIGAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5zdHJlZXROYW1lfSAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5ob3VzZU51bWJlcn1gKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmxvY2FsaXR5IiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6cmVnaW9uIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNpdHkpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6cG9zdGFsX2NvZGUiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MucG9zdGFsQ29kZSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpjb3VudHJ5X25hbWUiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MuY291bnRyeSkpOwogICAgICB9CiAgICAgIGFkZE5ld3NBcnRpY2xlSW5mbyhhcnRpY2xlQXJnKSB7CiAgICAgICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKGFydGljbGVBcmcpKTsKICAgICAgICB0aGlzLmFkZFRhZyhPcGVuZ3JhcGhUYWcuY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MoYXJ0aWNsZUFyZykpOwogICAgICB9CiAgICAgIGFkZFByb2R1Y3RJbmZvKHByb2R1Y3RBcmcsIGNvbXBhbnlBcmcpIHsKICAgICAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlUHJvZHVjdEpzb25MZChwcm9kdWN0QXJnLCBjb21wYW55QXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcoT3BlbmdyYXBoVGFnLmNyZWF0ZVByb2R1Y3RPZ1RhZ3MocHJvZHVjdEFyZykpOwogICAgICB9CiAgICAgIGFzeW5jIGVuYWJsZSgpIHsKICAgICAgICBpZiAodGhpcy50aXRsZSkgewogICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aGlzLnRpdGxlOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IHRhZ0FyZyBvZiB0aGlzLnRhZ3MpIHsKICAgICAgICAgIHRhZ0FyZy5hcHBlbmRUb0RvbSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImVuYWJsZWQiOwogICAgICB9CiAgICAgIGFzeW5jIGRpc2FibGUoKSB7CiAgICAgICAgZm9yIChjb25zdCB0YWdBcmcgb2YgdGhpcy50YWdzKSB7CiAgICAgICAgICB0YWdBcmcucmVtb3ZlRnJvbURvbSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRpc2FibGVkIjsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzCnZhciBNZXRhVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19tZXRhdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm1ldGF0YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgTWV0YVRhZyA9IGNsYXNzIGV4dGVuZHMgVGFnIHsKICAgICAgY29uc3RydWN0b3IobWV0YU5hbWVBcmcsIGNvbnRlbnRBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IG1ldGFFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibWV0YSIpOwogICAgICAgIG1ldGFFbGVtZW50Lm5hbWUgPSBtZXRhTmFtZUFyZzsKICAgICAgICBtZXRhRWxlbWVudC5jb250ZW50ID0gY29udGVudEFyZzsKICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBtZXRhRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ21hbmFnZXIuanMKdmFyIFRhZ01hbmFnZXI7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ21hbmFnZXIuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ2xldmVsKCk7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfaW50ZXJmYWNlczIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnKCk7CiAgICBUYWdNYW5hZ2VyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmdsb2JhbExldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICJnbG9iYWwiKTsKICAgICAgICB0aGlzLmJhc2VMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAiYmFzZSIpOwogICAgICB9CiAgICAgIGFzeW5jIHNldHVwKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZ29vZ2xlIiwgIm5vdHJhbnNsYXRlIikpOwogICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJyZXZpc2l0LWFmdGVyIiwgIjEgZGF5cyIpKTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpjYXJkIiwgInN1bW1hcnlfbGFyZ2VfaW1hZ2UiKSk7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpzaXRlIiwgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpjcmVhdG9yIiwgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuYmFzZUxldmVsLnRpdGxlID0gbWV0YU9iamVjdEFyZy50aXRsZTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikgewogICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJkZXNjcmlwdGlvbiIsIG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSB7CiAgICAgICAgICB0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImNhbm9uaWNhbCIsIG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgY2FzZSAobWV0YU9iamVjdEFyZy5sZENvbXBhbnkgJiYgIW1ldGFPYmplY3RBcmcubGRQcm9kdWN0KToKICAgICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkQ29tcGFueUluZm8obWV0YU9iamVjdEFyZy5sZENvbXBhbnkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgISFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdDoKICAgICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkUHJvZHVjdEluZm8obWV0YU9iamVjdEFyZy5sZFByb2R1Y3QsIG1ldGFPYmplY3RBcmcubGRDb21wYW55KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuZ2xvYmFsTGV2ZWwuZW5hYmxlKCk7CiAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHRoaXMuYmFzZUxldmVsOwogICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0U3ViUGFnZUxldmVsKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBzdWJQYWdlTGV2ZWwgPSBuZXcgVGFnTGV2ZWwodGhpcywgInN1YnBhZ2UiKTsKICAgICAgICBzdWJQYWdlTGV2ZWwudGl0bGUgPSBtZXRhT2JqZWN0QXJnLnRpdGxlOwogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICBzdWJQYWdlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJkZXNjcmlwdGlvbiIsIG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCk7CiAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHN1YlBhZ2VMZXZlbDsKICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICAgIHJldHVybiBzdWJQYWdlTGV2ZWw7CiAgICAgIH0KICAgICAgYXN5bmMgcmV2ZXJ0VG9CYXNlTGV2ZWwoKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgIT09IHRoaXMuYmFzZUxldmVsKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKTsKICAgICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSB0aGlzLmJhc2VMZXZlbDsKICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMud2Vic2V0dXAuanMKdmFyIFdlYlNldHVwOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3dlYnNldHVwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMud2Vic2V0dXAuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMyKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbWFuYWdlcigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ2xldmVsKCk7CiAgICBXZWJTZXR1cCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMudGFnTWFuYWdlciA9IG5ldyBUYWdNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjEuZGVmZXIoKTsKICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czIxLmRlZmVyKCk7CiAgICAgICAgdGhpcy5yZWFkeVByb21pc2UgPSB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JQcm9taXNlID0gdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICAgIHRoaXMuc2V0dXAoKS50aGVuKCgpID0+IHsKICAgICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbCkgewogICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFuIGFzeW5jIHNldHVwIGNhbGxlZCBieSB0aGUgY29uc3RydWN0b3IKICAgICAgICovCiAgICAgIGFzeW5jIHNldHVwKG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAob3B0aW9uc0FyZykgewogICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy50YWdNYW5hZ2VyLnNldHVwKHRoaXMub3B0aW9ucy5tZXRhT2JqZWN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV2ZXJ0cyB0aGUgYWN0aXZlIGxldmVsIGFuZCByZXR1cm5zIHRvIHRoZSBiYXNlIGxldmVsCiAgICAgICAqLwogICAgICByZXZlcnRUb0Jhc2VMZXZlbCgpIHsKICAgICAgICB0aGlzLnRhZ01hbmFnZXIucmV2ZXJ0VG9CYXNlTGV2ZWwoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0cyBhIHN1YnBhZ2UKICAgICAgICogQHBhcmFtIG1ldGFPYmplY3RBcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldFN1YkxldmVsKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBzdWJMZXZlbCA9IGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXRTdWJQYWdlTGV2ZWwobWV0YU9iamVjdEFyZyk7CiAgICAgICAgcmV0dXJuIHN1YkxldmVsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmbGFzaGVzIHRoZSB0aXRsZSB3aXRoIHRoZSBnaXZlbiB0ZXh0CiAgICAgICAqIEBwYXJhbSBmbGFzaFRleHRBcmcKICAgICAgICovCiAgICAgIGZsYXNoVGl0bGUoZmxhc2hUZXh0QXJnKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGluZm9ybXMgc21hcnRzc3IgdGhhdCB0aGUgcGFnZSBpcyByZWFkeSB0byBiZSByZW5kZXJlZAogICAgICAgKi8KICAgICAgaW5mb3JtUmVhZHlGb3JTbWFydHNzcigpIHsKICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbCkgewogICAgICAgICAgY29uc29sZS5lcnJvcihgWW91IGhhdmUgbm90IGluZGljYXRlZCB0aGF0IHlvdSBpbmZvcm0gc21hcnRzc3IgYnkgYSBkZWRpY2F0ZWQgc2lnbmFsISBQbGVhc2UgY29uc2lkZXIgZG9pbmcgc28hYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRpdGxlLmpzCnZhciBUaXRsZTsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190aXRsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRpdGxlLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGl0bGUgPSBjbGFzcyB7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyNCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyNCwgewogIEpzb25MZFRhZzogKCkgPT4gSnNvbkxkVGFnLAogIE1ldGFUYWc6ICgpID0+IE1ldGFUYWcsCiAgT3BlbmdyYXBoVGFnOiAoKSA9PiBPcGVuZ3JhcGhUYWcsCiAgVGl0bGU6ICgpID0+IFRpdGxlLAogIFdlYlNldHVwOiAoKSA9PiBXZWJTZXR1cAp9KTsKdmFyIGluaXRfZGlzdF90czI0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc193ZWJzZXR1cCgpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19tZXRhdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190aXRsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsucGx1Z2lucy5qcwp2YXIgaW1wb3J0X3N5bWJvbF90cmVlMjsKdmFyIGluaXRfbGlrX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czUoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzNigpOwogICAgaW1wb3J0X3N5bWJvbF90cmVlMiA9IF9fdG9FU00ocmVxdWlyZV9TeW1ib2xUcmVlKCksIDEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuZmFzdG1hcC5qcwp2YXIgRmFzdE1hcDI7CnZhciBpbml0X2xpa19mYXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBGYXN0TWFwMiA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLm9iamVjdG1hcC5qcwp2YXIgdW5pMiwgT2JqZWN0TWFwMjsKdmFyIGluaXRfbGlrX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLm9iamVjdG1hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBpbml0X2xpa19mYXN0bWFwKCk7CiAgICB1bmkyID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH14eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLCAoYzExKSA9PiB7CiAgICAgICAgY29uc3QgcjExID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKICAgICAgICBjb25zdCB2NSA9IGMxMSA9PT0gIngiID8gcjExIDogcjExICYgMyB8IDg7CiAgICAgICAgcmV0dXJuIHY1LnRvU3RyaW5nKDE2KTsKICAgICAgfSk7CiAgICB9OwogICAgT2JqZWN0TWFwMiA9IGNsYXNzIF9PYmplY3RNYXAgewogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwID0gbmV3IEZhc3RNYXAyKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pMigia2V5Iik7CiAgICAgICAgdGhpcy5hZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5LCBvYmplY3RBcmcpOwogICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgb3BlcmF0aW9uOiAiYWRkIiwKICAgICAgICAgIHBheWxvYWQ6IG9iamVjdEFyZwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB1bmlxdWVLZXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGxpa2UgLmFkZCBidXQgYWRkcyBhbiB3aG9sZSBhcnJheSBvZiBvYmplY3RzCiAgICAgICAqLwogICAgICBhZGRBcnJheShvYmplY3RBcnJheUFyZykgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RBcnJheUFyZykgewogICAgICAgICAgdGhpcy5hZGQoaXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBvYmplY3QgaXMgaW4gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBjaGVja0Zvck9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gISF0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXQga2V5IGZvciBvYmplY3QKICAgICAgICogQHBhcmFtIGZpbmRGdW5jdGlvbgogICAgICAgKi8KICAgICAgZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIGxldCBmb3VuZEtleSA9IG51bGw7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgaWYgKCFmb3VuZEtleSAmJiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSA9PT0gb2JqZWN0QXJnKSB7CiAgICAgICAgICAgIGZvdW5kS2V5ID0ga2V5QXJnOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZCBvYmplY3QKICAgICAgICovCiAgICAgIGFzeW5jIGZpbmQoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5maW5kKGZpbmRGdW5jdGlvbik7CiAgICAgIH0KICAgICAgZmluZFN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgaWYgKGZpbmRGdW5jdGlvbih0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFwcGVkVW5pcXVlKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kcyBhIHNwZWNpZmljIGVsZW1lbnQgYW5kIHRoZW4gcmVtb3ZlcyBpdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZE9uZUFuZFJlbW92ZShmaW5kRnVuY3Rpb24pIHsKICAgICAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLnJlbW92ZShmb3VuZEVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50OwogICAgICB9CiAgICAgIGZpbmRPbmVBbmRSZW1vdmVTeW5jKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IHRoaXMuZmluZFN5bmMoZmluZEZ1bmN0aW9uKTsKICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLnJlbW92ZShmb3VuZEVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBydW4gZnVuY3Rpb24gZm9yIGVhY2ggaXRlbSBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGFzeW5jIGZvckVhY2goZnVuY3Rpb25BcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBhd2FpdCBmdW5jdGlvbkFyZyh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGFuIG9iamVjdCBpbiB0aGUgT2JzZXJ2YWJsZW1hcCBhbmQgcmVtb3ZlcyBpdCwgc28gaXQgY2FuJ3QgYmUgcmV0cmlldmVkIGFnYWluCiAgICAgICAqLwogICAgICBnZXRPbmVBbmRSZW1vdmUoKSB7CiAgICAgICAgY29uc3Qga2V5czIgPSB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpOwogICAgICAgIGlmIChrZXlzMi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBrZXlUb1VzZSA9IGtleXMyWzBdOwogICAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlUb1VzZSk7CiAgICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgICAgb3BlcmF0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgcGF5bG9hZDogcmVtb3ZlZEl0ZW0KICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIGNsb25lZCBhcnJheSBvZiBhbGwgdGhlIG9iamVjdHMgY3VycmVudGx5IGluIHRoZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGdldEFycmF5KCkgewogICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaCh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgT2JqZWN0bWFwIGlzdCBlbXB0eQogICAgICAgKi8KICAgICAgaXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEtleXMoKS5sZW5ndGggPT09IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBvYmplY3QgZnJvbSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHJlbW92ZShvYmplY3RBcmcpIHsKICAgICAgICBpZiAodGhpcy5jaGVja0Zvck9iamVjdChvYmplY3RBcmcpKSB7CiAgICAgICAgICBjb25zdCBrZXlBcmcgPSB0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpOwogICAgICAgICAgY29uc3QgcmVtb3ZlZE9iamVjdCA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleUFyZyk7CiAgICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgICAgb3BlcmF0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgcGF5bG9hZDogcmVtb3ZlZE9iamVjdAogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZE9iamVjdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGUgT2JqZWN0bWFwCiAgICAgICAqLwogICAgICB3aXBlKCkgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleUFyZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IE9iamVjdG1hcCB0aGF0IGluY2x1ZGVzCiAgICAgICAqLwogICAgICBjb25jYXQob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgY29uc3QgY29uY2F0dGVkT2JqZWN0TWFwID0gbmV3IF9PYmplY3RNYXAoKTsKICAgICAgICBjb25jYXR0ZWRPYmplY3RNYXAuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIodGhpcy5mYXN0TWFwKTsKICAgICAgICBjb25jYXR0ZWRPYmplY3RNYXAuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnLmZhc3RNYXApOwogICAgICAgIHJldHVybiBjb25jYXR0ZWRPYmplY3RNYXA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRyaWVzIHRvIG1lcmdlIGFub3RoZXIgT2JqZWN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIG9iamVjdE1hcEFyZwogICAgICAgKi8KICAgICAgYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnLmZhc3RNYXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXAyOwp2YXIgaW5pdF9saWtfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuc3RyaW5nbWFwLmpzIigpIHsKICAgIGluaXRfbGlrX3BsdWdpbnMoKTsKICAgIFN0cmluZ21hcDIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuX3N0cmluZ0FycmF5ID0gW107CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIGEgc3RyaW5nIHRvIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIGFkZFN0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheS5wdXNoKHN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGxpa2UgYWRkU3RyaW5nLCBidXQgYWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzCiAgICAgICAqLwogICAgICBhZGRTdHJpbmdBcnJheShzdHJpbmdBcnJheUFyZykgewogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheUFyZykgewogICAgICAgICAgdGhpcy5hZGRTdHJpbmcoc3RyaW5nSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmVzIGEgc3RyaW5nIGZyb20gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICByZW1vdmVTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgaW4gdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmICh0aGlzLl9zdHJpbmdBcnJheVtrZXlBcmddID09PSBzdHJpbmdBcmcpIHsKICAgICAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkuc3BsaWNlKHBhcnNlSW50KGtleUFyZyksIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZXMgdGhlIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBzdHJpbmcgaXMgaW4gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBjaGVja1N0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkuaW5kZXhPZihzdHJpbmdBcmcpICE9PSAtMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHN0cmluZ1ByZXNlbmNlIHdpdGggbWluaW1hdGNoCiAgICAgICAqLwogICAgICBjaGVja01pbmltYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCBzbWFydE1hdGNoSW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzNS5TbWFydE1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZyk7CiAgICAgICAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2YgdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmIChzbWFydE1hdGNoSW5zdGFuY2UubWF0Y2goc3RyaW5nSXRlbSkpIHsKICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZE1hdGNoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgaWYgdGhlIFN0cmluZ21hcCBpcyBlbXB0eQogICAgICAgKi8KICAgICAgY2hlY2tJc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGggPT09IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYSBjbG9uZWQgY29weSBvZiB0aGUgY3VycmVudCBzdHJpbmcgQXJyYXkKICAgICAgICovCiAgICAgIGdldFN0cmluZ0FycmF5KCkgewogICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLy8gdHJpZ2dlciByZWdpc3RlcmluZwogICAgICAvKioKICAgICAgICogcmVnaXN0ZXIgYSBuZXcgdHJpZ2dlcgogICAgICAgKi8KICAgICAgcmVnaXN0ZXJVbnRpbFRydWUoZnVuY3Rpb25BcmcsIGNhbGxiYWNrQXJnKSB7CiAgICAgICAgY29uc3QgdHJ1ZURlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkucHVzaCgoKSA9PiB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jdGlvbkFyZyh0aGlzLmdldFN0cmluZ0FycmF5KCkpOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY2FsbGJhY2tBcmcpIHsKICAgICAgICAgICAgICBjYWxsYmFja0FyZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRydWVEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0pOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICAgIHJldHVybiB0cnVlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgdHJpZ2dlcnMKICAgICAgICovCiAgICAgIG5vdGlmeVRyaWdnZXIoKSB7CiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnJheSA9IHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcigoZnVuY3Rpb25BcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhZnVuY3Rpb25BcmcoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheSA9IGZpbHRlcmVkQXJyYXk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtsZW5pc0AxLjMuMjAvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2xlbmlzL2Rpc3QvbGVuaXMubWpzCmZ1bmN0aW9uIGNsYW1wMihtaW4zLCBpbnB1dCwgbWF4MykgewogIHJldHVybiBNYXRoLm1heChtaW4zLCBNYXRoLm1pbihpbnB1dCwgbWF4MykpOwp9CmZ1bmN0aW9uIGxlcnAoeDMsIHk1LCB0OSkgewogIHJldHVybiAoMSAtIHQ5KSAqIHgzICsgdDkgKiB5NTsKfQpmdW5jdGlvbiBkYW1wKHgzLCB5NSwgbGFtYmRhLCBkZWx0YVRpbWUpIHsKICByZXR1cm4gbGVycCh4MywgeTUsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZGVsdGFUaW1lKSk7Cn0KZnVuY3Rpb24gbW9kdWxvKG4xMywgZDYpIHsKICByZXR1cm4gKG4xMyAlIGQ2ICsgZDYpICUgZDY7Cn0KZnVuY3Rpb24gZGVib3VuY2UyKGNhbGxiYWNrLCBkZWxheTIpIHsKICBsZXQgdGltZXIyOwogIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICBsZXQgY29udGV4dDIgPSB0aGlzOwogICAgY2xlYXJUaW1lb3V0KHRpbWVyMik7CiAgICB0aW1lcjIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGltZXIyID0gdm9pZCAwOwogICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0MiwgYXJncyk7CiAgICB9LCBkZWxheTIpOwogIH07Cn0KdmFyIHZlcnNpb24sIEFuaW1hdGUsIERpbWVuc2lvbnMsIEVtaXR0ZXIsIExJTkVfSEVJR0hULCBsaXN0ZW5lck9wdGlvbnMsIFZpcnR1YWxTY3JvbGwsIGRlZmF1bHRFYXNpbmcsIExlbmlzOwp2YXIgaW5pdF9sZW5pcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4yMC9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvZGlzdC9sZW5pcy5tanMiKCkgewogICAgdmVyc2lvbiA9ICIxLjMuMTciOwogICAgQW5pbWF0ZSA9IGNsYXNzIHsKICAgICAgaXNSdW5uaW5nID0gZmFsc2U7CiAgICAgIHZhbHVlID0gMDsKICAgICAgZnJvbSA9IDA7CiAgICAgIHRvID0gMDsKICAgICAgY3VycmVudFRpbWUgPSAwOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBmcm9tVG8gbWV0aG9kCiAgICAgIGxlcnA7CiAgICAgIGR1cmF0aW9uOwogICAgICBlYXNpbmc7CiAgICAgIG9uVXBkYXRlOwogICAgICAvKioKICAgICAgICogQWR2YW5jZSB0aGUgYW5pbWF0aW9uIGJ5IHRoZSBnaXZlbiBkZWx0YSB0aW1lCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBkZWx0YVRpbWUgLSBUaGUgdGltZSBpbiBzZWNvbmRzIHRvIGFkdmFuY2UgdGhlIGFuaW1hdGlvbgogICAgICAgKi8KICAgICAgYWR2YW5jZShkZWx0YVRpbWUpIHsKICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSByZXR1cm47CiAgICAgICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLmR1cmF0aW9uICYmIHRoaXMuZWFzaW5nKSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTsKICAgICAgICAgIGNvbnN0IGxpbmVhclByb2dyZXNzID0gY2xhbXAyKDAsIHRoaXMuY3VycmVudFRpbWUgLyB0aGlzLmR1cmF0aW9uLCAxKTsKICAgICAgICAgIGNvbXBsZXRlZCA9IGxpbmVhclByb2dyZXNzID49IDE7CiAgICAgICAgICBjb25zdCBlYXNlZFByb2dyZXNzID0gY29tcGxldGVkID8gMSA6IHRoaXMuZWFzaW5nKGxpbmVhclByb2dyZXNzKTsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZyb20gKyAodGhpcy50byAtIHRoaXMuZnJvbSkgKiBlYXNlZFByb2dyZXNzOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZXJwKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gZGFtcCh0aGlzLnZhbHVlLCB0aGlzLnRvLCB0aGlzLmxlcnAgKiA2MCwgZGVsdGFUaW1lKTsKICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRoaXMudmFsdWUpID09PSB0aGlzLnRvKSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnRvOwogICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50bzsKICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChjb21wbGV0ZWQpIHsKICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLm9uVXBkYXRlPy4odGhpcy52YWx1ZSwgY29tcGxldGVkKTsKICAgICAgfQogICAgICAvKiogU3RvcCB0aGUgYW5pbWF0aW9uICovCiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHVwIHRoZSBhbmltYXRpb24gZnJvbSBhIHN0YXJ0aW5nIHZhbHVlIHRvIGFuIGVuZGluZyB2YWx1ZQogICAgICAgKiB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGxlcnBpbmcsIGR1cmF0aW9uLCBlYXNpbmcsIGFuZCBvblVwZGF0ZSBjYWxsYmFjawogICAgICAgKgogICAgICAgKiBAcGFyYW0gZnJvbSAtIFRoZSBzdGFydGluZyB2YWx1ZQogICAgICAgKiBAcGFyYW0gdG8gLSBUaGUgZW5kaW5nIHZhbHVlCiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbgogICAgICAgKi8KICAgICAgZnJvbVRvKGZyb20yLCB0bzIsIHsgbGVycDogbGVycDIsIGR1cmF0aW9uLCBlYXNpbmcsIG9uU3RhcnQsIG9uVXBkYXRlIH0pIHsKICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnZhbHVlID0gZnJvbTI7CiAgICAgICAgdGhpcy50byA9IHRvMjsKICAgICAgICB0aGlzLmxlcnAgPSBsZXJwMjsKICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7CiAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlOwogICAgICAgIG9uU3RhcnQ/LigpOwogICAgICAgIHRoaXMub25VcGRhdGUgPSBvblVwZGF0ZTsKICAgICAgfQogICAgfTsKICAgIERpbWVuc2lvbnMgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHdyYXBwZXIsIGNvbnRlbnQzLCB7IGF1dG9SZXNpemUgPSB0cnVlLCBkZWJvdW5jZTogZGVib3VuY2VWYWx1ZSA9IDI1MCB9ID0ge30pIHsKICAgICAgICB0aGlzLndyYXBwZXIgPSB3cmFwcGVyOwogICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQzOwogICAgICAgIGlmIChhdXRvUmVzaXplKSB7CiAgICAgICAgICB0aGlzLmRlYm91bmNlZFJlc2l6ZSA9IGRlYm91bmNlMih0aGlzLnJlc2l6ZSwgZGVib3VuY2VWYWx1ZSk7CiAgICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpOwogICAgICAgICAgICB0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSk7CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgIH0KICAgICAgd2lkdGggPSAwOwogICAgICBoZWlnaHQgPSAwOwogICAgICBzY3JvbGxIZWlnaHQgPSAwOwogICAgICBzY3JvbGxXaWR0aCA9IDA7CiAgICAgIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFzIHRoZXkgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zCiAgICAgIGRlYm91bmNlZFJlc2l6ZTsKICAgICAgd3JhcHBlclJlc2l6ZU9ic2VydmVyOwogICAgICBjb250ZW50UmVzaXplT2JzZXJ2ZXI7CiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICAgIGlmICh0aGlzLndyYXBwZXIgPT09IHdpbmRvdyAmJiB0aGlzLmRlYm91bmNlZFJlc2l6ZSkgewogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuZGVib3VuY2VkUmVzaXplLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc2l6ZSA9ICgpID0+IHsKICAgICAgICB0aGlzLm9uV3JhcHBlclJlc2l6ZSgpOwogICAgICAgIHRoaXMub25Db250ZW50UmVzaXplKCk7CiAgICAgIH07CiAgICAgIG9uV3JhcHBlclJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud3JhcHBlci5jbGllbnRXaWR0aDsKICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uQ29udGVudFJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuY29udGVudC5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy5jb250ZW50LnNjcm9sbFdpZHRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMud3JhcHBlci5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy53cmFwcGVyLnNjcm9sbFdpZHRoOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZ2V0IGxpbWl0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB4OiB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy53aWR0aCwKICAgICAgICAgIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5oZWlnaHQKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgRW1pdHRlciA9IGNsYXNzIHsKICAgICAgZXZlbnRzID0ge307CiAgICAgIC8qKgogICAgICAgKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIGRhdGEKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGFyZ3MgRGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBoYW5kbGVycwogICAgICAgKi8KICAgICAgZW1pdChldmVudCwgLi4uYXJncykgewogICAgICAgIGxldCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tldmVudF0gfHwgW107CiAgICAgICAgZm9yIChsZXQgaTExID0gMCwgbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDsgaTExIDwgbGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2FsbGJhY2tzW2kxMV0/LiguLi5hcmdzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIGNhbGxiYWNrIHRvIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICogQHJldHVybnMgVW5zdWJzY3JpYmUgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9uKGV2ZW50LCBjYikgewogICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50XT8ucHVzaChjYikgfHwgKHRoaXMuZXZlbnRzW2V2ZW50XSA9IFtjYl0pOwogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYiAhPT0gaTExKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9mZihldmVudCwgY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYWxsYmFjayAhPT0gaTExKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFuIHVwCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMuZXZlbnRzID0ge307CiAgICAgIH0KICAgIH07CiAgICBMSU5FX0hFSUdIVCA9IDEwMCAvIDY7CiAgICBsaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlIH07CiAgICBWaXJ0dWFsU2Nyb2xsID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihlbGVtZW50NCwgb3B0aW9ucyA9IHsgd2hlZWxNdWx0aXBsaWVyOiAxLCB0b3VjaE11bHRpcGxpZXI6IDEgfSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMub25XaW5kb3dSZXNpemUsIGZhbHNlKTsKICAgICAgICB0aGlzLm9uV2luZG93UmVzaXplKCk7CiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0aGlzLm9uVG91Y2hFbmQsIGxpc3RlbmVyT3B0aW9ucyk7CiAgICAgIH0KICAgICAgdG91Y2hTdGFydCA9IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfTsKICAgICAgbGFzdERlbHRhID0gewogICAgICAgIHg6IDAsCiAgICAgICAgeTogMAogICAgICB9OwogICAgICB3aW5kb3cgPSB7CiAgICAgICAgd2lkdGg6IDAsCiAgICAgICAgaGVpZ2h0OiAwCiAgICAgIH07CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvKioKICAgICAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYW5kIGNhbGxiYWNrCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lCiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbgogICAgICAgKi8KICAgICAgb24oZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vbihldmVudCwgY2FsbGJhY2spOwogICAgICB9CiAgICAgIC8qKiBSZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaGVuZCIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hFbmQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFdmVudCBoYW5kbGVyIGZvciAndG91Y2hzdGFydCcgZXZlbnQKICAgICAgICoKICAgICAgICogQHBhcmFtIGV2ZW50IFRvdWNoIGV2ZW50CiAgICAgICAqLwogICAgICBvblRvdWNoU3RhcnQgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50LnRhcmdldFRvdWNoZXMgPyBldmVudC50YXJnZXRUb3VjaGVzWzBdIDogZXZlbnQ7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnggPSBjbGllbnRYOwogICAgICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WTsKICAgICAgICB0aGlzLmxhc3REZWx0YSA9IHsKICAgICAgICAgIHg6IDAsCiAgICAgICAgICB5OiAwCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYOiAwLAogICAgICAgICAgZGVsdGFZOiAwLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqIEV2ZW50IGhhbmRsZXIgZm9yICd0b3VjaG1vdmUnIGV2ZW50ICovCiAgICAgIG9uVG91Y2hNb3ZlID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudC50YXJnZXRUb3VjaGVzID8gZXZlbnQudGFyZ2V0VG91Y2hlc1swXSA6IGV2ZW50OwogICAgICAgIGNvbnN0IGRlbHRhWCA9IC0oY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydC54KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7CiAgICAgICAgY29uc3QgZGVsdGFZID0gLShjbGllbnRZIC0gdGhpcy50b3VjaFN0YXJ0LnkpICogdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcjsKICAgICAgICB0aGlzLnRvdWNoU3RhcnQueCA9IGNsaWVudFg7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnkgPSBjbGllbnRZOwogICAgICAgIHRoaXMubGFzdERlbHRhID0gewogICAgICAgICAgeDogZGVsdGFYLAogICAgICAgICAgeTogZGVsdGFZCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYLAogICAgICAgICAgZGVsdGFZLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgb25Ub3VjaEVuZCA9IChldmVudCkgPT4gewogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7CiAgICAgICAgICBkZWx0YVg6IHRoaXMubGFzdERlbHRhLngsCiAgICAgICAgICBkZWx0YVk6IHRoaXMubGFzdERlbHRhLnksCiAgICAgICAgICBldmVudAogICAgICAgIH0pOwogICAgICB9OwogICAgICAvKiogRXZlbnQgaGFuZGxlciBmb3IgJ3doZWVsJyBldmVudCAqLwogICAgICBvbldoZWVsID0gKGV2ZW50KSA9PiB7CiAgICAgICAgbGV0IHsgZGVsdGFYLCBkZWx0YVksIGRlbHRhTW9kZSB9ID0gZXZlbnQ7CiAgICAgICAgY29uc3QgbXVsdGlwbGllclggPSBkZWx0YU1vZGUgPT09IDEgPyBMSU5FX0hFSUdIVCA6IGRlbHRhTW9kZSA9PT0gMiA/IHRoaXMud2luZG93LndpZHRoIDogMTsKICAgICAgICBjb25zdCBtdWx0aXBsaWVyWSA9IGRlbHRhTW9kZSA9PT0gMSA/IExJTkVfSEVJR0hUIDogZGVsdGFNb2RlID09PSAyID8gdGhpcy53aW5kb3cuaGVpZ2h0IDogMTsKICAgICAgICBkZWx0YVggKj0gbXVsdGlwbGllclg7CiAgICAgICAgZGVsdGFZICo9IG11bHRpcGxpZXJZOwogICAgICAgIGRlbHRhWCAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIGRlbHRhWSAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7IGRlbHRhWCwgZGVsdGFZLCBldmVudCB9KTsKICAgICAgfTsKICAgICAgb25XaW5kb3dSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy53aW5kb3cgPSB7CiAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodAogICAgICAgIH07CiAgICAgIH07CiAgICB9OwogICAgZGVmYXVsdEVhc2luZyA9ICh0OSkgPT4gTWF0aC5taW4oMSwgMS4wMDEgLSBNYXRoLnBvdygyLCAtMTAgKiB0OSkpOwogICAgTGVuaXMgPSBjbGFzcyB7CiAgICAgIF9pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAvLyB0cnVlIHdoZW4gc2Nyb2xsIGlzIGFuaW1hdGluZwogICAgICBfaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgIC8vIHRydWUgaWYgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2Nyb2xsIC0gZW5hYmxlL2Rpc2FibGUgcHJvZ3JhbW1hdGljYWxseQogICAgICBfaXNMb2NrZWQgPSBmYWxzZTsKICAgICAgLy8gc2FtZSBhcyBpc1N0b3BwZWQgYnV0IGVuYWJsZWQvZGlzYWJsZWQgd2hlbiBzY3JvbGwgcmVhY2hlcyB0YXJnZXQKICAgICAgX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gbnVsbDsKICAgICAgX3JhZklkID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGlzIHRvdWNoaW5nIHRoZSBzY3JlZW4KICAgICAgICovCiAgICAgIGlzVG91Y2hpbmc7CiAgICAgIC8qKgogICAgICAgKiBUaGUgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGVuaXMgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQKICAgICAgICovCiAgICAgIHRpbWUgPSAwOwogICAgICAvKioKICAgICAgICogVXNlciBkYXRhIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdGhyb3VnaCB0aGUgc2Nyb2xsIGV2ZW50CiAgICAgICAqCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqIGxlbmlzLnNjcm9sbFRvKDEwMCwgewogICAgICAgKiAgIHVzZXJEYXRhOiB7CiAgICAgICAqICAgICBmb286ICdiYXInCiAgICAgICAqICAgfQogICAgICAgKiB9KQogICAgICAgKi8KICAgICAgdXNlckRhdGEgPSB7fTsKICAgICAgLyoqCiAgICAgICAqIFRoZSBsYXN0IHZlbG9jaXR5IG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGxhc3RWZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgY3VycmVudCB2ZWxvY2l0eSBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICB2ZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGRpcmVjdGlvbiA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGxlbmlzIGluc3RhbmNlCiAgICAgICAqLwogICAgICBvcHRpb25zOwogICAgICAvKioKICAgICAgICogVGhlIHRhcmdldCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIHRhcmdldFNjcm9sbDsKICAgICAgLyoqCiAgICAgICAqIFRoZSBhbmltYXRlZCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGFuaW1hdGVkU2Nyb2xsOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGhlcmUgYXMgdGhleSBkb24ndCBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnMKICAgICAgYW5pbWF0ZSA9IG5ldyBBbmltYXRlKCk7CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcyB0aGV5IG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW9ucwogICAgICBkaW1lbnNpb25zOwogICAgICAvLyBUaGlzIGlzIG5vdCBwcml2YXRlIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBTbmFwIGNsYXNzCiAgICAgIHZpcnR1YWxTY3JvbGw7CiAgICAgIGNvbnN0cnVjdG9yKHsKICAgICAgICB3cmFwcGVyID0gd2luZG93LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgIGV2ZW50c1RhcmdldCA9IHdyYXBwZXIsCiAgICAgICAgc21vb3RoV2hlZWwgPSB0cnVlLAogICAgICAgIHN5bmNUb3VjaCA9IGZhbHNlLAogICAgICAgIHN5bmNUb3VjaExlcnAgPSAwLjA3NSwKICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCA9IDEuNywKICAgICAgICBkdXJhdGlvbiwKICAgICAgICAvLyBpbiBzZWNvbmRzCiAgICAgICAgZWFzaW5nLAogICAgICAgIGxlcnA6IGxlcnAyID0gMC4xLAogICAgICAgIGluZmluaXRlID0gZmFsc2UsCiAgICAgICAgb3JpZW50YXRpb24gPSAidmVydGljYWwiLAogICAgICAgIC8vIHZlcnRpY2FsLCBob3Jpem9udGFsCiAgICAgICAgZ2VzdHVyZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiA/ICJib3RoIiA6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgLy8gdmVydGljYWwsIGhvcml6b250YWwsIGJvdGgKICAgICAgICB0b3VjaE11bHRpcGxpZXIgPSAxLAogICAgICAgIHdoZWVsTXVsdGlwbGllciA9IDEsCiAgICAgICAgYXV0b1Jlc2l6ZSA9IHRydWUsCiAgICAgICAgcHJldmVudCwKICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgIG92ZXJzY3JvbGwgPSB0cnVlLAogICAgICAgIGF1dG9SYWYgPSBmYWxzZSwKICAgICAgICBhbmNob3JzID0gZmFsc2UsCiAgICAgICAgYXV0b1RvZ2dsZSA9IGZhbHNlLAogICAgICAgIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD10cmFuc2l0aW9uLWJlaGF2aW9yCiAgICAgICAgYWxsb3dOZXN0ZWRTY3JvbGwgPSBmYWxzZSwKICAgICAgICAvLyBAdHMtaWdub3JlOiB0aGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlCiAgICAgICAgX19leHBlcmltZW50YWxfX25haXZlRGltZW5zaW9ucyA9IGZhbHNlLAogICAgICAgIG5haXZlRGltZW5zaW9ucyA9IF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMsCiAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlID0gZmFsc2UKICAgICAgfSA9IHt9KSB7CiAgICAgICAgd2luZG93LmxlbmlzVmVyc2lvbiA9IHZlcnNpb247CiAgICAgICAgaWYgKCF3cmFwcGVyIHx8IHdyYXBwZXIgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewogICAgICAgICAgd3JhcHBlciA9IHdpbmRvdzsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVhc2luZyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAibnVtYmVyIikgewogICAgICAgICAgZHVyYXRpb24gPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICB3cmFwcGVyLAogICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICBldmVudHNUYXJnZXQsCiAgICAgICAgICBzbW9vdGhXaGVlbCwKICAgICAgICAgIHN5bmNUb3VjaCwKICAgICAgICAgIHN5bmNUb3VjaExlcnAsCiAgICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCwKICAgICAgICAgIGR1cmF0aW9uLAogICAgICAgICAgZWFzaW5nLAogICAgICAgICAgbGVycDogbGVycDIsCiAgICAgICAgICBpbmZpbml0ZSwKICAgICAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiwKICAgICAgICAgIG9yaWVudGF0aW9uLAogICAgICAgICAgdG91Y2hNdWx0aXBsaWVyLAogICAgICAgICAgd2hlZWxNdWx0aXBsaWVyLAogICAgICAgICAgYXV0b1Jlc2l6ZSwKICAgICAgICAgIHByZXZlbnQsCiAgICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgICAgb3ZlcnNjcm9sbCwKICAgICAgICAgIGF1dG9SYWYsCiAgICAgICAgICBhbmNob3JzLAogICAgICAgICAgYXV0b1RvZ2dsZSwKICAgICAgICAgIGFsbG93TmVzdGVkU2Nyb2xsLAogICAgICAgICAgbmFpdmVEaW1lbnNpb25zLAogICAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlCiAgICAgICAgfTsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyh3cmFwcGVyLCBjb250ZW50MywgeyBhdXRvUmVzaXplIH0pOwogICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vbk5hdGl2ZVNjcm9sbCwgZmFsc2UpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsIHRoaXMub25TY3JvbGxFbmQsIHsKICAgICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMgfHwgdGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgImNsaWNrIiwKICAgICAgICAgICAgdGhpcy5vbkNsaWNrLAogICAgICAgICAgICBmYWxzZQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJwb2ludGVyZG93biIsCiAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd24sCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gbmV3IFZpcnR1YWxTY3JvbGwoZXZlbnRzVGFyZ2V0LCB7CiAgICAgICAgICB0b3VjaE11bHRpcGxpZXIsCiAgICAgICAgICB3aGVlbE11bHRpcGxpZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwub24oInNjcm9sbCIsIHRoaXMub25WaXJ0dWFsU2Nyb2xsKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpOwogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgdGhpcy5vblRyYW5zaXRpb25FbmQsIHsKICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1JhZikgewogICAgICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgbGVuaXMgaW5zdGFuY2UsIHJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cCB0aGUgY2xhc3MgbmFtZQogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAic2Nyb2xsIiwKICAgICAgICAgIHRoaXMub25OYXRpdmVTY3JvbGwsCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsZW5kIiwgdGhpcy5vblNjcm9sbEVuZCwgewogICAgICAgICAgY2FwdHVyZTogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAicG9pbnRlcmRvd24iLAogICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycyB8fCB0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgICAiY2xpY2siLAogICAgICAgICAgICB0aGlzLm9uQ2xpY2ssCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwuZGVzdHJveSgpOwogICAgICAgIHRoaXMuZGltZW5zaW9ucy5kZXN0cm95KCk7CiAgICAgICAgdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCk7CiAgICAgICAgaWYgKHRoaXMuX3JhZklkKSB7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWZJZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9uKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vZmYoZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvblNjcm9sbEVuZCA9IChlMTEpID0+IHsKICAgICAgICBpZiAoIShlMTEgaW5zdGFuY2VvZiBDdXN0b21FdmVudCkpIHsKICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIiB8fCB0aGlzLmlzU2Nyb2xsaW5nID09PSBmYWxzZSkgewogICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBkaXNwYXRjaFNjcm9sbGVuZEV2ZW50ID0gKCkgPT4gewogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbGVuZCIsIHsKICAgICAgICAgICAgYnViYmxlczogdGhpcy5vcHRpb25zLndyYXBwZXIgPT09IHdpbmRvdywKICAgICAgICAgICAgLy8gY2FuY2VsYWJsZTogZmFsc2UsCiAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgIGxlbmlzU2Nyb2xsRW5kOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgfTsKICAgICAgZ2V0IG92ZXJmbG93KCkgewogICAgICAgIGNvbnN0IHByb3BlcnR5MTEgPSB0aGlzLmlzSG9yaXpvbnRhbCA/ICJvdmVyZmxvdy14IiA6ICJvdmVyZmxvdy15IjsKICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KVtwcm9wZXJ0eTExXTsKICAgICAgfQogICAgICBjaGVja092ZXJmbG93KCkgewogICAgICAgIGlmIChbImhpZGRlbiIsICJjbGlwIl0uaW5jbHVkZXModGhpcy5vdmVyZmxvdykpIHsKICAgICAgICAgIHRoaXMuaW50ZXJuYWxTdG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaW50ZXJuYWxTdGFydCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBvblRyYW5zaXRpb25FbmQgPSAoZXZlbnQpID0+IHsKICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lLmluY2x1ZGVzKCJvdmVyZmxvdyIpKSB7CiAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNldFNjcm9sbChzY3JvbGwpIHsKICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnNjcm9sbFRvKHsgbGVmdDogc2Nyb2xsLCBiZWhhdmlvcjogImluc3RhbnQiIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsLCBiZWhhdmlvcjogImluc3RhbnQiIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBvbkNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgcGF0aDIgPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBjb25zdCBhbmNob3JFbGVtZW50cyA9IHBhdGgyLmZpbHRlcigKICAgICAgICAgIChub2RlMikgPT4gbm9kZTIgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKQogICAgICAgICk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3JzKSB7CiAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JFbGVtZW50cy5maW5kKAogICAgICAgICAgICAobm9kZTIpID0+IG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpPy5pbmNsdWRlcygiIyIpCiAgICAgICAgICApOwogICAgICAgICAgaWYgKGFuY2hvcikgewogICAgICAgICAgICBjb25zdCBocmVmID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgICBpZiAoaHJlZikgewogICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2YgdGhpcy5vcHRpb25zLmFuY2hvcnMgPT09ICJvYmplY3QiICYmIHRoaXMub3B0aW9ucy5hbmNob3JzID8gdGhpcy5vcHRpb25zLmFuY2hvcnMgOiB2b2lkIDA7CiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCMke2hyZWYuc3BsaXQoIiMiKVsxXX1gOwogICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGFyZ2V0LCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgY29uc3QgaW50ZXJuYWxMaW5rID0gYW5jaG9yRWxlbWVudHMuZmluZCgKICAgICAgICAgICAgKG5vZGUyKSA9PiBub2RlMi5ob3N0ID09PSB3aW5kb3cubG9jYXRpb24uaG9zdAogICAgICAgICAgKTsKICAgICAgICAgIGlmIChpbnRlcm5hbExpbmspIHsKICAgICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgb25Qb2ludGVyRG93biA9IChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5idXR0b24gPT09IDEpIHsKICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uVmlydHVhbFNjcm9sbCA9IChkYXRhKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbCA9PT0gImZ1bmN0aW9uIiAmJiB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbChkYXRhKSA9PT0gZmFsc2UpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSA9IGRhdGE7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInZpcnR1YWwtc2Nyb2xsIiwgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSk7CiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHJldHVybjsKICAgICAgICBpZiAoZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24pIHJldHVybjsKICAgICAgICBjb25zdCBpc1RvdWNoID0gZXZlbnQudHlwZS5pbmNsdWRlcygidG91Y2giKTsKICAgICAgICBjb25zdCBpc1doZWVsID0gZXZlbnQudHlwZS5pbmNsdWRlcygid2hlZWwiKTsKICAgICAgICB0aGlzLmlzVG91Y2hpbmcgPSBldmVudC50eXBlID09PSAidG91Y2hzdGFydCIgfHwgZXZlbnQudHlwZSA9PT0gInRvdWNobW92ZSI7CiAgICAgICAgY29uc3QgaXNDbGlja09yVGFwID0gZGVsdGFYID09PSAwICYmIGRlbHRhWSA9PT0gMDsKICAgICAgICBjb25zdCBpc1RhcFRvU3RvcCA9IHRoaXMub3B0aW9ucy5zeW5jVG91Y2ggJiYgaXNUb3VjaCAmJiBldmVudC50eXBlID09PSAidG91Y2hzdGFydCIgJiYgaXNDbGlja09yVGFwICYmICF0aGlzLmlzU3RvcHBlZCAmJiAhdGhpcy5pc0xvY2tlZDsKICAgICAgICBpZiAoaXNUYXBUb1N0b3ApIHsKICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNVbmtub3duR2VzdHVyZSA9IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIgJiYgZGVsdGFZID09PSAwIHx8IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiBkZWx0YVggPT09IDA7CiAgICAgICAgaWYgKGlzQ2xpY2tPclRhcCB8fCBpc1Vua25vd25HZXN0dXJlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBjb21wb3NlZFBhdGggPSBjb21wb3NlZFBhdGguc2xpY2UoMCwgY29tcG9zZWRQYXRoLmluZGV4T2YodGhpcy5yb290RWxlbWVudCkpOwogICAgICAgIGNvbnN0IHByZXZlbnQgPSB0aGlzLm9wdGlvbnMucHJldmVudDsKICAgICAgICBpZiAoISFjb21wb3NlZFBhdGguZmluZCgKICAgICAgICAgIChub2RlMikgPT4gbm9kZTIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAodHlwZW9mIHByZXZlbnQgPT09ICJmdW5jdGlvbiIgJiYgcHJldmVudD8uKG5vZGUyKSB8fCBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50IikgfHwgaXNUb3VjaCAmJiBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXRvdWNoIikgfHwgaXNXaGVlbCAmJiBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXdoZWVsIikgfHwgdGhpcy5vcHRpb25zLmFsbG93TmVzdGVkU2Nyb2xsICYmIHRoaXMuY2hlY2tOZXN0ZWRTY3JvbGwobm9kZTIsIHsgZGVsdGFYLCBkZWx0YVkgfSkpCiAgICAgICAgKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5pc0xvY2tlZCkgewogICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNTbW9vdGggPSB0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmIGlzVG91Y2ggfHwgdGhpcy5vcHRpb25zLnNtb290aFdoZWVsICYmIGlzV2hlZWw7CiAgICAgICAgaWYgKCFpc1Ntb290aCkgewogICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJuYXRpdmUiOwogICAgICAgICAgdGhpcy5hbmltYXRlLnN0b3AoKTsKICAgICAgICAgIGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbGV0IGRlbHRhID0gZGVsdGFZOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiYm90aCIpIHsKICAgICAgICAgIGRlbHRhID0gTWF0aC5hYnMoZGVsdGFZKSA+IE1hdGguYWJzKGRlbHRhWCkgPyBkZWx0YVkgOiBkZWx0YVg7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICAgIGRlbHRhID0gZGVsdGFYOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5vdmVyc2Nyb2xsIHx8IHRoaXMub3B0aW9ucy5pbmZpbml0ZSB8fCB0aGlzLm9wdGlvbnMud3JhcHBlciAhPT0gd2luZG93ICYmIHRoaXMubGltaXQgPiAwICYmICh0aGlzLmFuaW1hdGVkU2Nyb2xsID4gMCAmJiB0aGlzLmFuaW1hdGVkU2Nyb2xsIDwgdGhpcy5saW1pdCB8fCB0aGlzLmFuaW1hdGVkU2Nyb2xsID09PSAwICYmIGRlbHRhWSA+IDAgfHwgdGhpcy5hbmltYXRlZFNjcm9sbCA9PT0gdGhpcy5saW1pdCAmJiBkZWx0YVkgPCAwKSkgewogICAgICAgICAgZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24gPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNTeW5jVG91Y2ggPSBpc1RvdWNoICYmIHRoaXMub3B0aW9ucy5zeW5jVG91Y2g7CiAgICAgICAgY29uc3QgaXNUb3VjaEVuZCA9IGlzVG91Y2ggJiYgZXZlbnQudHlwZSA9PT0gInRvdWNoZW5kIjsKICAgICAgICBjb25zdCBoYXNUb3VjaEluZXJ0aWEgPSBpc1RvdWNoRW5kOwogICAgICAgIGlmIChoYXNUb3VjaEluZXJ0aWEpIHsKICAgICAgICAgIGRlbHRhID0gTWF0aC5zaWduKHRoaXMudmVsb2NpdHkpICogTWF0aC5wb3coTWF0aC5hYnModGhpcy52ZWxvY2l0eSksIHRoaXMub3B0aW9ucy50b3VjaEluZXJ0aWFFeHBvbmVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50YXJnZXRTY3JvbGwgKyBkZWx0YSwgewogICAgICAgICAgcHJvZ3JhbW1hdGljOiBmYWxzZSwKICAgICAgICAgIC4uLmlzU3luY1RvdWNoID8gewogICAgICAgICAgICBsZXJwOiBoYXNUb3VjaEluZXJ0aWEgPyB0aGlzLm9wdGlvbnMuc3luY1RvdWNoTGVycCA6IDEKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIGxlcnA6IHRoaXMub3B0aW9ucy5sZXJwLAogICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLmR1cmF0aW9uLAogICAgICAgICAgICBlYXNpbmc6IHRoaXMub3B0aW9ucy5lYXNpbmcKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEZvcmNlIGxlbmlzIHRvIHJlY2FsY3VsYXRlIHRoZSBkaW1lbnNpb25zCiAgICAgICAqLwogICAgICByZXNpemUoKSB7CiAgICAgICAgdGhpcy5kaW1lbnNpb25zLnJlc2l6ZSgpOwogICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIGVtaXQoKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHRoaXMpOwogICAgICB9CiAgICAgIG9uTmF0aXZlU2Nyb2xsID0gKCkgPT4gewogICAgICAgIGlmICh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCAhPT0gbnVsbCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0KTsKICAgICAgICAgIHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQpIHsKICAgICAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcgPT09IGZhbHNlIHx8IHRoaXMuaXNTY3JvbGxpbmcgPT09ICJuYXRpdmUiKSB7CiAgICAgICAgICBjb25zdCBsYXN0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgLSBsYXN0U2Nyb2xsOwogICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBNYXRoLnNpZ24oCiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgLSBsYXN0U2Nyb2xsCiAgICAgICAgICApOwogICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gIm5hdGl2ZSI7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5ICE9PSAwKSB7CiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSAwOwogICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgfSwgNDAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMuaXNMb2NrZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5ID0gMDsKICAgICAgICB0aGlzLmFuaW1hdGUuc3RvcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdGFydCBsZW5pcyBzY3JvbGwgYWZ0ZXIgaXQgaGFzIGJlZW4gc3RvcHBlZAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgewogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgib3ZlcmZsb3ciKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXJ0KCk7CiAgICAgIH0KICAgICAgaW50ZXJuYWxTdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFN0b3AgbGVuaXMgc2Nyb2xsCiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgewogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgib3ZlcmZsb3ciLCAiY2xpcCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmludGVybmFsU3RvcCgpOwogICAgICB9CiAgICAgIGludGVybmFsU3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIGxlbmlzCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB0aW1lIFRoZSB0aW1lIGluIG1zIGZyb20gYW4gZXh0ZXJuYWwgY2xvY2sgbGlrZSBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBvciBUZW1wdXMKICAgICAgICovCiAgICAgIHJhZiA9ICh0aW1lKSA9PiB7CiAgICAgICAgY29uc3QgZGVsdGFUaW1lID0gdGltZSAtICh0aGlzLnRpbWUgfHwgdGltZSk7CiAgICAgICAgdGhpcy50aW1lID0gdGltZTsKICAgICAgICB0aGlzLmFuaW1hdGUuYWR2YW5jZShkZWx0YVRpbWUgKiAxZS0zKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9SYWYpIHsKICAgICAgICAgIHRoaXMuX3JhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBTY3JvbGwgdG8gYSB0YXJnZXQgdmFsdWUKICAgICAgICoKICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHZhbHVlIHRvIHNjcm9sbCB0bwogICAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIHNjcm9sbAogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBsZW5pcy5zY3JvbGxUbygxMDAsIHsKICAgICAgICogICBvZmZzZXQ6IDEwMCwKICAgICAgICogICBkdXJhdGlvbjogMSwKICAgICAgICogICBlYXNpbmc6ICh0KSA9PiAxIC0gTWF0aC5jb3MoKHQgKiBNYXRoLlBJKSAvIDIpLAogICAgICAgKiAgIGxlcnA6IDAuMSwKICAgICAgICogICBvblN0YXJ0OiAoKSA9PiB7CiAgICAgICAqICAgICBjb25zb2xlLmxvZygnb25TdGFydCcpCiAgICAgICAqICAgfSwKICAgICAgICogICBvbkNvbXBsZXRlOiAoKSA9PiB7CiAgICAgICAqICAgICBjb25zb2xlLmxvZygnb25Db21wbGV0ZScpCiAgICAgICAqICAgfSwKICAgICAgICogfSkKICAgICAgICovCiAgICAgIHNjcm9sbFRvKHRhcmdldCwgewogICAgICAgIG9mZnNldCA9IDAsCiAgICAgICAgaW1tZWRpYXRlID0gZmFsc2UsCiAgICAgICAgbG9jayA9IGZhbHNlLAogICAgICAgIHByb2dyYW1tYXRpYyA9IHRydWUsCiAgICAgICAgLy8gY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgY2xhc3MKICAgICAgICBsZXJwOiBsZXJwMiA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5sZXJwIDogdm9pZCAwLAogICAgICAgIGR1cmF0aW9uID0gcHJvZ3JhbW1hdGljID8gdGhpcy5vcHRpb25zLmR1cmF0aW9uIDogdm9pZCAwLAogICAgICAgIGVhc2luZyA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5lYXNpbmcgOiB2b2lkIDAsCiAgICAgICAgb25TdGFydCwKICAgICAgICBvbkNvbXBsZXRlLAogICAgICAgIGZvcmNlID0gZmFsc2UsCiAgICAgICAgLy8gc2Nyb2xsIGV2ZW4gaWYgc3RvcHBlZAogICAgICAgIHVzZXJEYXRhCiAgICAgIH0gPSB7fSkgewogICAgICAgIGlmICgodGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5pc0xvY2tlZCkgJiYgIWZvcmNlKSByZXR1cm47CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJzdHJpbmciICYmIFsidG9wIiwgImxlZnQiLCAic3RhcnQiLCAiIyJdLmluY2x1ZGVzKHRhcmdldCkpIHsKICAgICAgICAgIHRhcmdldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIiAmJiBbImJvdHRvbSIsICJyaWdodCIsICJlbmQiXS5pbmNsdWRlcyh0YXJnZXQpKSB7CiAgICAgICAgICB0YXJnZXQgPSB0aGlzLmxpbWl0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbm9kZTI7CiAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgbm9kZTIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7CiAgICAgICAgICAgIGlmICghbm9kZTIpIHsKICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSAiI3RvcCIpIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiTGVuaXM6IFRhcmdldCBub3QgZm91bmQiLCB0YXJnZXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQ/Lm5vZGVUeXBlKSB7CiAgICAgICAgICAgIG5vZGUyID0gdGFyZ2V0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUyKSB7CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMud3JhcHBlciAhPT0gd2luZG93KSB7CiAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSB0aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIG9mZnNldCAtPSB0aGlzLmlzSG9yaXpvbnRhbCA/IHdyYXBwZXJSZWN0LmxlZnQgOiB3cmFwcGVyUmVjdC50b3A7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVjdCA9IG5vZGUyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICB0YXJnZXQgPSAodGhpcy5pc0hvcml6b250YWwgPyByZWN0LmxlZnQgOiByZWN0LnRvcCkgKyB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gIm51bWJlciIpIHJldHVybjsKICAgICAgICB0YXJnZXQgKz0gb2Zmc2V0OwogICAgICAgIHRhcmdldCA9IE1hdGgucm91bmQodGFyZ2V0KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmluZmluaXRlKSB7CiAgICAgICAgICBpZiAocHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMuc2Nyb2xsOwogICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRhcmdldCAtIHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IHRoaXMubGltaXQgLyAyKSB7CiAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IC0gdGhpcy5saW1pdDsKICAgICAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA8IC10aGlzLmxpbWl0IC8gMikgewogICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCArIHRoaXMubGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0ID0gY2xhbXAyKDAsIHRhcmdldCwgdGhpcy5saW1pdCk7CiAgICAgICAgfQogICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMudGFyZ2V0U2Nyb2xsKSB7CiAgICAgICAgICBvblN0YXJ0Py4odGhpcyk7CiAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMudXNlckRhdGEgPSB1c2VyRGF0YSA/PyB7fTsKICAgICAgICBpZiAoaW1tZWRpYXRlKSB7CiAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0YXJnZXQ7CiAgICAgICAgICB0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbCk7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICB0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKTsKICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgb25Db21wbGV0ZT8uKHRoaXMpOwogICAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFwcm9ncmFtbWF0aWMpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGR1cmF0aW9uID09PSAibnVtYmVyIiAmJiB0eXBlb2YgZWFzaW5nICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBlYXNpbmcgPSBkZWZhdWx0RWFzaW5nOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVhc2luZyA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgZHVyYXRpb24gIT09ICJudW1iZXIiKSB7CiAgICAgICAgICBkdXJhdGlvbiA9IDE7CiAgICAgICAgfQogICAgICAgIHRoaXMuYW5pbWF0ZS5mcm9tVG8odGhpcy5hbmltYXRlZFNjcm9sbCwgdGFyZ2V0LCB7CiAgICAgICAgICBkdXJhdGlvbiwKICAgICAgICAgIGVhc2luZywKICAgICAgICAgIGxlcnA6IGxlcnAyLAogICAgICAgICAgb25TdGFydDogKCkgPT4gewogICAgICAgICAgICBpZiAobG9jaykgdGhpcy5pc0xvY2tlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAic21vb3RoIjsKICAgICAgICAgICAgb25TdGFydD8uKHRoaXMpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uVXBkYXRlOiAodmFsdWUyLCBjb21wbGV0ZWQpID0+IHsKICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJzbW9vdGgiOwogICAgICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHk7CiAgICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSB2YWx1ZTIgLSB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IE1hdGguc2lnbih0aGlzLnZlbG9jaXR5KTsKICAgICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHZhbHVlMjsKICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpOwogICAgICAgICAgICBpZiAocHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB2YWx1ZTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHRoaXMuZW1pdCgpOwogICAgICAgICAgICBpZiAoY29tcGxldGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgICAgIG9uQ29tcGxldGU/Lih0aGlzKTsKICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCgpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHRoaXMucHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpIHsKICAgICAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNoZWNrTmVzdGVkU2Nyb2xsKG5vZGUyLCB7IGRlbHRhWCwgZGVsdGFZIH0pIHsKICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTsKICAgICAgICBjb25zdCBjYWNoZSA9IG5vZGUyLl9sZW5pcyA/Pz0ge307CiAgICAgICAgbGV0IGhhc092ZXJmbG93WCwgaGFzT3ZlcmZsb3dZLCBpc1Njcm9sbGFibGVYLCBpc1Njcm9sbGFibGVZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0OwogICAgICAgIGNvbnN0IGdlc3R1cmVPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb247CiAgICAgICAgaWYgKHRpbWUgLSAoY2FjaGUudGltZSA/PyAwKSA+IDJlMykgewogICAgICAgICAgY2FjaGUudGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZTIpOwogICAgICAgICAgY2FjaGUuY29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7CiAgICAgICAgICBjb25zdCBvdmVyZmxvd1hTdHJpbmcgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WDsKICAgICAgICAgIGNvbnN0IG92ZXJmbG93WVN0cmluZyA9IGNvbXB1dGVkU3R5bGUub3ZlcmZsb3dZOwogICAgICAgICAgaGFzT3ZlcmZsb3dYID0gWyJhdXRvIiwgIm92ZXJsYXkiLCAic2Nyb2xsIl0uaW5jbHVkZXMob3ZlcmZsb3dYU3RyaW5nKTsKICAgICAgICAgIGhhc092ZXJmbG93WSA9IFsiYXV0byIsICJvdmVybGF5IiwgInNjcm9sbCJdLmluY2x1ZGVzKG92ZXJmbG93WVN0cmluZyk7CiAgICAgICAgICBjYWNoZS5oYXNPdmVyZmxvd1ggPSBoYXNPdmVyZmxvd1g7CiAgICAgICAgICBjYWNoZS5oYXNPdmVyZmxvd1kgPSBoYXNPdmVyZmxvd1k7CiAgICAgICAgICBpZiAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmICFoYXNPdmVyZmxvd1kpIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiAhaGFzT3ZlcmZsb3dYKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBzY3JvbGxXaWR0aCA9IG5vZGUyLnNjcm9sbFdpZHRoOwogICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gbm9kZTIuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2xpZW50V2lkdGggPSBub2RlMi5jbGllbnRXaWR0aDsKICAgICAgICAgIGNsaWVudEhlaWdodCA9IG5vZGUyLmNsaWVudEhlaWdodDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVggPSBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoOwogICAgICAgICAgaXNTY3JvbGxhYmxlWSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodDsKICAgICAgICAgIGNhY2hlLmlzU2Nyb2xsYWJsZVggPSBpc1Njcm9sbGFibGVYOwogICAgICAgICAgY2FjaGUuaXNTY3JvbGxhYmxlWSA9IGlzU2Nyb2xsYWJsZVk7CiAgICAgICAgICBjYWNoZS5zY3JvbGxXaWR0aCA9IHNjcm9sbFdpZHRoOwogICAgICAgICAgY2FjaGUuc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2FjaGUuY2xpZW50V2lkdGggPSBjbGllbnRXaWR0aDsKICAgICAgICAgIGNhY2hlLmNsaWVudEhlaWdodCA9IGNsaWVudEhlaWdodDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNTY3JvbGxhYmxlWCA9IGNhY2hlLmlzU2Nyb2xsYWJsZVg7CiAgICAgICAgICBpc1Njcm9sbGFibGVZID0gY2FjaGUuaXNTY3JvbGxhYmxlWTsKICAgICAgICAgIGhhc092ZXJmbG93WCA9IGNhY2hlLmhhc092ZXJmbG93WDsKICAgICAgICAgIGhhc092ZXJmbG93WSA9IGNhY2hlLmhhc092ZXJmbG93WTsKICAgICAgICAgIHNjcm9sbFdpZHRoID0gY2FjaGUuc2Nyb2xsV2lkdGg7CiAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBjYWNoZS5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICBjbGllbnRXaWR0aCA9IGNhY2hlLmNsaWVudFdpZHRoOwogICAgICAgICAgY2xpZW50SGVpZ2h0ID0gY2FjaGUuY2xpZW50SGVpZ2h0OwogICAgICAgIH0KICAgICAgICBpZiAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZIHx8ICFpc1Njcm9sbGFibGVYICYmICFpc1Njcm9sbGFibGVZKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIgJiYgKCFoYXNPdmVyZmxvd1kgfHwgIWlzU2Nyb2xsYWJsZVkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiAoIWhhc092ZXJmbG93WCB8fCAhaXNTY3JvbGxhYmxlWCkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgbGV0IG9yaWVudGF0aW9uOwogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgewogICAgICAgICAgb3JpZW50YXRpb24gPSAieCI7CiAgICAgICAgfSBlbHNlIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIpIHsKICAgICAgICAgIG9yaWVudGF0aW9uID0gInkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1ggPSBkZWx0YVggIT09IDA7CiAgICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1kgPSBkZWx0YVkgIT09IDA7CiAgICAgICAgICBpZiAoaXNTY3JvbGxpbmdYICYmIGhhc092ZXJmbG93WCAmJiBpc1Njcm9sbGFibGVYKSB7CiAgICAgICAgICAgIG9yaWVudGF0aW9uID0gIngiOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzU2Nyb2xsaW5nWSAmJiBoYXNPdmVyZmxvd1kgJiYgaXNTY3JvbGxhYmxlWSkgewogICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ5IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvcmllbnRhdGlvbikgcmV0dXJuIGZhbHNlOwogICAgICAgIGxldCBzY3JvbGwsIG1heFNjcm9sbCwgZGVsdGEsIGhhc092ZXJmbG93LCBpc1Njcm9sbGFibGU7CiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAieCIpIHsKICAgICAgICAgIHNjcm9sbCA9IG5vZGUyLnNjcm9sbExlZnQ7CiAgICAgICAgICBtYXhTY3JvbGwgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoOwogICAgICAgICAgZGVsdGEgPSBkZWx0YVg7CiAgICAgICAgICBoYXNPdmVyZmxvdyA9IGhhc092ZXJmbG93WDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZVg7CiAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gInkiKSB7CiAgICAgICAgICBzY3JvbGwgPSBub2RlMi5zY3JvbGxUb3A7CiAgICAgICAgICBtYXhTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQ7CiAgICAgICAgICBkZWx0YSA9IGRlbHRhWTsKICAgICAgICAgIGhhc092ZXJmbG93ID0gaGFzT3ZlcmZsb3dZOwogICAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNTY3JvbGxhYmxlWTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb25zdCB3aWxsU2Nyb2xsID0gZGVsdGEgPiAwID8gc2Nyb2xsIDwgbWF4U2Nyb2xsIDogc2Nyb2xsID4gMDsKICAgICAgICByZXR1cm4gd2lsbFNjcm9sbCAmJiBoYXNPdmVyZmxvdyAmJiBpc1Njcm9sbGFibGU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSByb290IGVsZW1lbnQgb24gd2hpY2ggbGVuaXMgaXMgaW5zdGFuY2VkCiAgICAgICAqLwogICAgICBnZXQgcm9vdEVsZW1lbnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cmFwcGVyID09PSB3aW5kb3cgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiB0aGlzLm9wdGlvbnMud3JhcHBlcjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGxpbWl0IHdoaWNoIGlzIHRoZSBtYXhpbXVtIHNjcm9sbCB2YWx1ZQogICAgICAgKi8KICAgICAgZ2V0IGxpbWl0KCkgewogICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmFpdmVEaW1lbnNpb25zKSB7CiAgICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLnJvb3RFbGVtZW50LmNsaWVudFdpZHRoOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5yb290RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGltaXRbdGhpcy5pc0hvcml6b250YWwgPyAieCIgOiAieSJdOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogV2hldGhlciBvciBub3QgdGhlIHNjcm9sbCBpcyBob3Jpem9udGFsCiAgICAgICAqLwogICAgICBnZXQgaXNIb3Jpem9udGFsKCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGFjdHVhbCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBhY3R1YWxTY3JvbGwoKSB7CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMub3B0aW9ucy53cmFwcGVyOwogICAgICAgIHJldHVybiB0aGlzLmlzSG9yaXpvbnRhbCA/IHdyYXBwZXIuc2Nyb2xsWCA/PyB3cmFwcGVyLnNjcm9sbExlZnQgOiB3cmFwcGVyLnNjcm9sbFkgPz8gd3JhcHBlci5zY3JvbGxUb3A7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBjdXJyZW50IHNjcm9sbCB2YWx1ZQogICAgICAgKi8KICAgICAgZ2V0IHNjcm9sbCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluZmluaXRlID8gbW9kdWxvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRoaXMubGltaXQpIDogdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIHByb2dyZXNzIG9mIHRoZSBzY3JvbGwgcmVsYXRpdmUgdG8gdGhlIGxpbWl0CiAgICAgICAqLwogICAgICBnZXQgcHJvZ3Jlc3MoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGltaXQgPT09IDAgPyAxIDogdGhpcy5zY3JvbGwgLyB0aGlzLmxpbWl0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDdXJyZW50IHNjcm9sbCBzdGF0ZQogICAgICAgKi8KICAgICAgZ2V0IGlzU2Nyb2xsaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc1Njcm9sbGluZzsKICAgICAgfQogICAgICBzZXQgaXNTY3JvbGxpbmcodmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzU2Nyb2xsaW5nICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsaW5nID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIHN0b3BwZWQKICAgICAgICovCiAgICAgIGdldCBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RvcHBlZDsKICAgICAgfQogICAgICBzZXQgaXNTdG9wcGVkKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc1N0b3BwZWQgIT09IHZhbHVlMikgewogICAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIGxvY2tlZAogICAgICAgKi8KICAgICAgZ2V0IGlzTG9ja2VkKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2tlZDsKICAgICAgfQogICAgICBzZXQgaXNMb2NrZWQodmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzTG9ja2VkICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIHNtb290aCBzY3JvbGxpbmcKICAgICAgICovCiAgICAgIGdldCBpc1Ntb290aCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5pc1Njcm9sbGluZyA9PT0gInNtb290aCI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gdGhlIHdyYXBwZXIgZWxlbWVudAogICAgICAgKi8KICAgICAgZ2V0IGNsYXNzTmFtZSgpIHsKICAgICAgICBsZXQgY2xhc3NOYW1lID0gImxlbmlzIjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIGNsYXNzTmFtZSArPSAiIGxlbmlzLWF1dG9Ub2dnbGUiOwogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgY2xhc3NOYW1lICs9ICIgbGVuaXMtc3RvcHBlZCI7CiAgICAgICAgaWYgKHRoaXMuaXNMb2NrZWQpIGNsYXNzTmFtZSArPSAiIGxlbmlzLWxvY2tlZCI7CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcpIGNsYXNzTmFtZSArPSAiIGxlbmlzLXNjcm9sbGluZyI7CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcgPT09ICJzbW9vdGgiKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1zbW9vdGgiOwogICAgICAgIHJldHVybiBjbGFzc05hbWU7CiAgICAgIH0KICAgICAgdXBkYXRlQ2xhc3NOYW1lKCkgewogICAgICAgIHRoaXMuY2xlYW5VcENsYXNzTmFtZSgpOwogICAgICAgIHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7dGhpcy5yb290RWxlbWVudC5jbGFzc05hbWV9ICR7dGhpcy5jbGFzc05hbWV9YC50cmltKCk7CiAgICAgIH0KICAgICAgY2xlYW5VcENsYXNzTmFtZSgpIHsKICAgICAgICB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoL2xlbmlzKC1cdyspPy9nLCAiIikudHJpbSgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3dlZXQtc2Nyb2xsQDQuMC4wL25vZGVfbW9kdWxlcy9zd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzCnZhciByZXF1aXJlX3N3ZWV0X3Njcm9sbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vc3dlZXQtc2Nyb2xsQDQuMC4wL25vZGVfbW9kdWxlcy9zd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgIChmdW5jdGlvbihnbG9iYWwyLCBmYWN0b3J5KSB7CiAgICAgIHR5cGVvZiBleHBvcnRzID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDogdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDogKGdsb2JhbDIgPSBnbG9iYWwyIHx8IHNlbGYsIGdsb2JhbDIuU3dlZXRTY3JvbGwgPSBmYWN0b3J5KCkpOwogICAgfSkoZXhwb3J0cywgZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXNzaWduMiA9IGZ1bmN0aW9uKCkgewogICAgICAgIF9fYXNzaWduMiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24zKHQ5KSB7CiAgICAgICAgICBmb3IgKHZhciBzOSwgaTExID0gMSwgbjEzID0gYXJndW1lbnRzLmxlbmd0aDsgaTExIDwgbjEzOyBpMTErKykgewogICAgICAgICAgICBzOSA9IGFyZ3VtZW50c1tpMTFdOwogICAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdDk7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX19hc3NpZ24yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIHZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpOwogICAgICB2YXIgY2FuVXNlSGlzdG9yeSA9ICFjYW5Vc2VET00gPyBmYWxzZSA6IHdpbmRvdy5oaXN0b3J5ICYmICJwdXNoU3RhdGUiIGluIHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gImZpbGU6IjsKICAgICAgdmFyIGNhblVzZVBhc3NpdmVPcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1cHBvcnQgPSBmYWxzZTsKICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgcmV0dXJuIHN1cHBvcnQ7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgd2luID0gd2luZG93OwogICAgICAgICAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICJwYXNzaXZlIiwgewogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHN1cHBvcnQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IiwgbnVsbCwgb3B0cyk7CiAgICAgICAgICB3aW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsIG51bGwsIG9wdHMpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VwcG9ydDsKICAgICAgfSkoKTsKICAgICAgdmFyIGlzU3RyaW5nMiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAic3RyaW5nIjsKICAgICAgfTsKICAgICAgdmFyIGlzRnVuY3Rpb24yID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiI7CiAgICAgIH07CiAgICAgIHZhciBpc0FycmF5MyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7CiAgICAgIH07CiAgICAgIHZhciBpc051bWVyaWMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gIWlzQXJyYXkzKG9iaikgJiYgb2JqIC0gcGFyc2VGbG9hdChvYmopICsgMSA+PSAwOwogICAgICB9OwogICAgICB2YXIgaGFzUHJvcCA9IGZ1bmN0aW9uKG9iaiwga2V5MikgewogICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KGtleTIpOwogICAgICB9OwogICAgICB2YXIgcmFmID0gY2FuVXNlRE9NID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBudWxsOwogICAgICB2YXIgY2FmID0gY2FuVXNlRE9NID8gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IG51bGw7CiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcywgc2luID0gTWF0aC5zaW4sIHBvdyA9IE1hdGgucG93LCBzcXJ0ID0gTWF0aC5zcXJ0LCBQSSA9IE1hdGguUEk7CiAgICAgIHZhciBlYXNpbmdzID0gewogICAgICAgIGxpbmVhcjogZnVuY3Rpb24ocDcpIHsKICAgICAgICAgIHJldHVybiBwNzsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1YWQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRRdWFkOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqICh0OSAvPSBkNikgKiAodDkgLSAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IGMxMSAvIDIgKiB0OSAqIHQ5ICsgYjUgOiAtYzExIC8gMiAqICgtLXQ5ICogKHQ5IC0gMikgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluQ3ViaWM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dEN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKyAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICsgYjUgOiBjMTEgLyAyICogKCh0OSAtPSAyKSAqIHQ5ICogdDkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluUXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKiB0OSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAtYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKiB0OSAtIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IGMxMSAvIDIgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1IDogLWMxMSAvIDIgKiAoKHQ5IC09IDIpICogdDkgKiB0OSAqIHQ5IC0gMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKiB0OSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAoKHQ5ID0gdDkgLyBkNiAtIDEpICogdDkgKiB0OSAqIHQ5ICogdDkgKyAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1IDogYzExIC8gMiAqICgodDkgLT0gMikgKiB0OSAqIHQ5ICogdDkgKiB0OSArIDIpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5TaW5lOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqIGNvcyh0OSAvIGQ2ICogKFBJIC8gMikpICsgYzExICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0U2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqIHNpbih0OSAvIGQ2ICogKFBJIC8gMikpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAvIDIgKiAoY29zKFBJICogdDkgLyBkNikgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluRXhwbzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIHQ5ID09PSAwID8gYjUgOiBjMTEgKiBwb3coMiwgMTAgKiAodDkgLyBkNiAtIDEpKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dEV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiB0OSA9PT0gZDYgPyBiNSArIGMxMSA6IGMxMSAqICgtcG93KDIsIC0xMCAqIHQ5IC8gZDYpICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIGlmICh0OSA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIGI1OwogICAgICAgICAgaWYgKHQ5ID09PSBkNikKICAgICAgICAgICAgcmV0dXJuIGI1ICsgYzExOwogICAgICAgICAgaWYgKCh0OSAvPSBkNiAvIDIpIDwgMSkKICAgICAgICAgICAgcmV0dXJuIGMxMSAvIDIgKiBwb3coMiwgMTAgKiAodDkgLSAxKSkgKyBiNTsKICAgICAgICAgIHJldHVybiBjMTEgLyAyICogKC1wb3coMiwgLTEwICogLS10OSkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluQ2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiAoc3FydCgxIC0gKHQ5IC89IGQ2KSAqIHQ5KSAtIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0Q2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqIHNxcnQoMSAtICh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5KSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0Q2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IC1jMTEgLyAyICogKHNxcnQoMSAtIHQ5ICogdDkpIC0gMSkgKyBiNSA6IGMxMSAvIDIgKiAoc3FydCgxIC0gKHQ5IC09IDIpICogdDkpICsgMSkgKyBiNTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciAkJCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCFzZWxlY3RvciA/IFtdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOwogICAgICB9OwogICAgICB2YXIgJDMgPSBmdW5jdGlvbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiAkJChzZWxlY3Rvcikuc2hpZnQoKSB8fCBudWxsOwogICAgICB9OwogICAgICB2YXIgaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQ7CiAgICAgIH07CiAgICAgIHZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiAkZWwgPT09IHdpbmRvdzsKICAgICAgfTsKICAgICAgdmFyIGlzUm9vdENvbnRhaW5lciA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiAkZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAkZWwgPT09IGRvY3VtZW50LmJvZHk7CiAgICAgIH07CiAgICAgIHZhciBtYXRjaGVzID0gZnVuY3Rpb24oJGVsLCBzZWxlY3RvcikgewogICAgICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7CiAgICAgICAgICByZXR1cm4gJGVsID09PSBzZWxlY3RvcjsKICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdHMgPSAkJChzZWxlY3Rvcik7CiAgICAgICAgdmFyIGkxMSA9IHJlc3VsdHMubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWkxMSA+PSAwICYmIHJlc3VsdHNbaTExXSAhPT0gJGVsKSB7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgPiAtMTsKICAgICAgfTsKICAgICAgdmFyIGdldEhlaWdodCA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsSGVpZ2h0LCAkZWwuY2xpZW50SGVpZ2h0LCAkZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgfTsKICAgICAgdmFyIGdldFdpZHRoID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4KCRlbC5zY3JvbGxXaWR0aCwgJGVsLmNsaWVudFdpZHRoLCAkZWwub2Zmc2V0V2lkdGgpOwogICAgICB9OwogICAgICB2YXIgZ2V0U2l6ZTIgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgd2lkdGg6IGdldFdpZHRoKCRlbCksCiAgICAgICAgICBoZWlnaHQ6IGdldEhlaWdodCgkZWwpCiAgICAgICAgfTsKICAgICAgfTsKICAgICAgdmFyIGdldFZpZXdwb3J0QW5kRWxlbWVudFNpemVzID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgdmFyIGlzUm9vdCA9IGlzV2luZG93KCRlbCkgfHwgaXNSb290Q29udGFpbmVyKCRlbCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZpZXdwb3J0OiB7CiAgICAgICAgICAgIHdpZHRoOiBpc1Jvb3QgPyBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSA6ICRlbC5jbGllbnRXaWR0aCwKICAgICAgICAgICAgaGVpZ2h0OiBpc1Jvb3QgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiAkZWwuY2xpZW50SGVpZ2h0CiAgICAgICAgICB9LAogICAgICAgICAgc2l6ZTogaXNSb290ID8gewogICAgICAgICAgICB3aWR0aDogTWF0aC5tYXgoZ2V0V2lkdGgoZG9jdW1lbnQuYm9keSksIGdldFdpZHRoKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpLAogICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KGdldEhlaWdodChkb2N1bWVudC5ib2R5KSwgZ2V0SGVpZ2h0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpCiAgICAgICAgICB9IDogZ2V0U2l6ZTIoJGVsKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIHZhciBkaXJlY3Rpb25NZXRob2RNYXAgPSB7CiAgICAgICAgeTogInNjcm9sbFRvcCIsCiAgICAgICAgeDogInNjcm9sbExlZnQiCiAgICAgIH07CiAgICAgIHZhciBkaXJlY3Rpb25Qcm9wTWFwID0gewogICAgICAgIHk6ICJwYWdlWU9mZnNldCIsCiAgICAgICAgeDogInBhZ2VYT2Zmc2V0IgogICAgICB9OwogICAgICB2YXIgZ2V0U2Nyb2xsID0gZnVuY3Rpb24oJGVsLCBkaXJlY3Rpb24pIHsKICAgICAgICByZXR1cm4gaXNXaW5kb3coJGVsKSA/ICRlbFtkaXJlY3Rpb25Qcm9wTWFwW2RpcmVjdGlvbl1dIDogJGVsW2RpcmVjdGlvbk1ldGhvZE1hcFtkaXJlY3Rpb25dXTsKICAgICAgfTsKICAgICAgdmFyIHNldFNjcm9sbCA9IGZ1bmN0aW9uKCRlbCwgb2Zmc2V0LCBkaXJlY3Rpb24pIHsKICAgICAgICBpZiAoaXNXaW5kb3coJGVsKSkgewogICAgICAgICAgdmFyIHRvcF8xID0gZGlyZWN0aW9uID09PSAieSI7CiAgICAgICAgICAkZWwuc2Nyb2xsVG8oIXRvcF8xID8gb2Zmc2V0IDogJGVsLnBhZ2VYT2Zmc2V0LCB0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWU9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICRlbFtkaXJlY3Rpb25NZXRob2RNYXBbZGlyZWN0aW9uXV0gPSBvZmZzZXQ7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24oJGVsLCAkY29udGV4dCkgewogICAgICAgIHZhciByZWN0ID0gJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGlmIChyZWN0LndpZHRoIHx8IHJlY3QuaGVpZ2h0KSB7CiAgICAgICAgICB2YXIgc2Nyb2xsXzEgPSB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgdmFyICRjdHggPSB2b2lkIDA7CiAgICAgICAgICBpZiAoaXNXaW5kb3coJGNvbnRleHQpIHx8IGlzUm9vdENvbnRhaW5lcigkY29udGV4dCkpIHsKICAgICAgICAgICAgJGN0eCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueV07CiAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSB3aW5kb3dbZGlyZWN0aW9uUHJvcE1hcC54XTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdHggPSAkY29udGV4dDsKICAgICAgICAgICAgdmFyIGNSZWN0ID0gJGN0eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gY1JlY3QudG9wICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC55XTsKICAgICAgICAgICAgc2Nyb2xsXzEubGVmdCA9IGNSZWN0LmxlZnQgKiAtMSArICRjdHhbZGlyZWN0aW9uTWV0aG9kTWFwLnhdOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9wOiByZWN0LnRvcCArIHNjcm9sbF8xLnRvcCAtICRjdHguY2xpZW50VG9wLAogICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxfMS5sZWZ0IC0gJGN0eC5jbGllbnRMZWZ0CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVjdDsKICAgICAgfTsKICAgICAgdmFyIHdoZWVsRXZlbnROYW1lID0gKGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghY2FuVXNlRE9NKSB7CiAgICAgICAgICByZXR1cm4gIndoZWVsIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJvbndoZWVsIiBpbiBkb2N1bWVudCA/ICJ3aGVlbCIgOiAibW91c2V3aGVlbCI7CiAgICAgIH0pKCk7CiAgICAgIHZhciBldmVudE5hbWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJ3aGVlbCIgPyB3aGVlbEV2ZW50TmFtZSA6IG5hbWU7CiAgICAgIH07CiAgICAgIHZhciBhcHBseSA9IGZ1bmN0aW9uKCRlbCwgbWV0aG9kLCBldmVudCwgbGlzdGVuZXIyLCBwYXNzaXZlKSB7CiAgICAgICAgZXZlbnQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICRlbFttZXRob2RdKGV2ZW50TmFtZShuYW1lKSwgbGlzdGVuZXIyLCBjYW5Vc2VQYXNzaXZlT3B0aW9uID8geyBwYXNzaXZlIH0gOiBmYWxzZSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHZhciBhZGRFdmVudCA9IGZ1bmN0aW9uKCRlbCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIHJldHVybiBhcHBseSgkZWwsICJhZGRFdmVudExpc3RlbmVyIiwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSk7CiAgICAgIH07CiAgICAgIHZhciByZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCRlbCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIHJldHVybiBhcHBseSgkZWwsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSk7CiAgICAgIH07CiAgICAgIHZhciByZVJlbGF0aXZlVG9rZW4gPSAvXihcK3wtKT0oXGQrKD86XC5cZCspPykkLzsKICAgICAgdmFyIHBhcnNlQ29vcmRpbmF0ZSA9IGZ1bmN0aW9uKGNvb3JkaW5hdGUsIGVuYWJsZVZlcnRpY2FsKSB7CiAgICAgICAgdmFyIHJlcyA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByZWxhdGl2ZTogZmFsc2UgfTsKICAgICAgICBpZiAoaGFzUHJvcChjb29yZGluYXRlLCAidG9wIikgfHwgaGFzUHJvcChjb29yZGluYXRlLCAibGVmdCIpKSB7CiAgICAgICAgICByZXMgPSBfX2Fzc2lnbjIoe30sIHJlcywgY29vcmRpbmF0ZSk7CiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5Myhjb29yZGluYXRlKSkgewogICAgICAgICAgaWYgKGNvb3JkaW5hdGUubGVuZ3RoID4gMSkgewogICAgICAgICAgICByZXMudG9wID0gY29vcmRpbmF0ZVswXTsKICAgICAgICAgICAgcmVzLmxlZnQgPSBjb29yZGluYXRlWzFdOwogICAgICAgICAgfSBlbHNlIGlmIChjb29yZGluYXRlLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyBjb29yZGluYXRlWzBdIDogMDsKICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyBjb29yZGluYXRlWzBdIDogMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKGNvb3JkaW5hdGUpKSB7CiAgICAgICAgICBpZiAoZW5hYmxlVmVydGljYWwpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMubGVmdCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZzIoY29vcmRpbmF0ZSkpIHsKICAgICAgICAgIHZhciBtNiA9IGNvb3JkaW5hdGUudHJpbSgpLm1hdGNoKHJlUmVsYXRpdmVUb2tlbik7CiAgICAgICAgICBpZiAoIW02KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgdmFyIG9wID0gbTZbMV07CiAgICAgICAgICB2YXIgdmFsID0gcGFyc2VJbnQobTZbMl0sIDEwKTsKICAgICAgICAgIGlmIChvcCA9PT0gIisiKSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IHZhbCA6IDA7CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gdmFsIDogMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IC12YWwgOiAwOwogICAgICAgICAgICByZXMubGVmdCA9ICFlbmFibGVWZXJ0aWNhbCA/IC12YWwgOiAwOwogICAgICAgICAgfQogICAgICAgICAgcmVzLnJlbGF0aXZlID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH07CiAgICAgIHZhciBkZWZhdWx0T3B0aW9uczIgPSB7CiAgICAgICAgdHJpZ2dlcjogIltkYXRhLXNjcm9sbF0iLAogICAgICAgIGhlYWRlcjogIltkYXRhLXNjcm9sbC1oZWFkZXJdIiwKICAgICAgICBkdXJhdGlvbjogMWUzLAogICAgICAgIGVhc2luZzogImVhc2VPdXRRdWludCIsCiAgICAgICAgb2Zmc2V0OiAwLAogICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgIGhvcml6b250YWw6IGZhbHNlLAogICAgICAgIGNhbmNlbGxhYmxlOiB0cnVlLAogICAgICAgIHVwZGF0ZVVSTDogZmFsc2UsCiAgICAgICAgcHJldmVudERlZmF1bHQ6IHRydWUsCiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiB0cnVlLAogICAgICAgIC8vIENhbGxiYWNrcwogICAgICAgIGJlZm9yZTogbnVsbCwKICAgICAgICBhZnRlcjogbnVsbCwKICAgICAgICBjYW5jZWw6IG51bGwsCiAgICAgICAgY29tcGxldGU6IG51bGwsCiAgICAgICAgc3RlcDogbnVsbAogICAgICB9OwogICAgICB2YXIgQ09OVEFJTkVSX0NMSUNLX0VWRU5UID0gImNsaWNrIjsKICAgICAgdmFyIENPTlRBSU5FUl9TVE9QX0VWRU5UID0gIndoZWVsIHRvdWNoc3RhcnQgdG91Y2htb3ZlIjsKICAgICAgdmFyIFN3ZWV0U2Nyb2xsMyA9ICgKICAgICAgICAvKiogQGNsYXNzICovCiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgZnVuY3Rpb24gU3dlZXRTY3JvbGw0KG9wdGlvbnMsIGNvbnRhaW5lcikgewogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRlbCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuY3R4ID0gewogICAgICAgICAgICAgICR0cmlnZ2VyOiBudWxsLAogICAgICAgICAgICAgIG9wdHM6IG51bGwsCiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGZhbHNlLAogICAgICAgICAgICAgIHBvczogbnVsbCwKICAgICAgICAgICAgICBzdGFydFBvczogbnVsbCwKICAgICAgICAgICAgICBlYXNpbmc6IG51bGwsCiAgICAgICAgICAgICAgc3RhcnQ6IDAsCiAgICAgICAgICAgICAgaWQ6IDAsCiAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSwKICAgICAgICAgICAgICBoYXNoOiBudWxsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMubG9vcCA9IGZ1bmN0aW9uKHRpbWUpIHsKICAgICAgICAgICAgICB2YXIgX2ExNCA9IF90aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgICAgaWYgKCFjdHguc3RhcnQpIHsKICAgICAgICAgICAgICAgIGN0eC5zdGFydCA9IHRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghY3R4LnByb2dyZXNzIHx8ICEkZWwpIHsKICAgICAgICAgICAgICAgIF90aGlzLnN0b3AoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMyID0gY3R4Lm9wdHM7CiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGN0eC5wb3M7CiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY3R4LnN0YXJ0OwogICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IGN0eC5zdGFydFBvczsKICAgICAgICAgICAgICB2YXIgZWFzaW5nID0gY3R4LmVhc2luZzsKICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBvcHRpb25zMi5kdXJhdGlvbjsKICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uTWFwID0geyB0b3A6ICJ5IiwgbGVmdDogIngiIH07CiAgICAgICAgICAgICAgdmFyIHRpbWVFbGFwc2VkID0gdGltZSAtIHN0YXJ0OwogICAgICAgICAgICAgIHZhciB0OSA9IE1hdGgubWluKDEsIE1hdGgubWF4KHRpbWVFbGFwc2VkIC8gZHVyYXRpb24sIDApKTsKICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvZmZzZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlMiA9IG9mZnNldFtrZXkyXTsKICAgICAgICAgICAgICAgIHZhciBpbml0aWFsMiA9IHN0YXJ0T2Zmc2V0W2tleTJdOwogICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdmFsdWUyIC0gaW5pdGlhbDI7CiAgICAgICAgICAgICAgICBpZiAoZGVsdGEgIT09IDApIHsKICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVhc2luZyh0OSwgZHVyYXRpb24gKiB0OSwgMCwgMSwgZHVyYXRpb24pOwogICAgICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBNYXRoLnJvdW5kKGluaXRpYWwyICsgZGVsdGEgKiB2YWwpLCBkaXJlY3Rpb25NYXBba2V5Ml0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmICh0aW1lRWxhcHNlZCA8PSBkdXJhdGlvbikgewogICAgICAgICAgICAgICAgX3RoaXMuaG9vayhvcHRpb25zMiwgInN0ZXAiLCB0OSk7CiAgICAgICAgICAgICAgICBjdHguaWQgPSBTd2VldFNjcm9sbDQucmFmKF90aGlzLmxvb3ApOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICAgIHZhciBvcHRzID0gX3RoaXMub3B0czsKICAgICAgICAgICAgICB2YXIgJGVsID0gZTExLnRhcmdldDsKICAgICAgICAgICAgICBmb3IgKDsgJGVsICYmICRlbCAhPT0gZG9jdW1lbnQ7ICRlbCA9ICRlbC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoJGVsLCBvcHRzLnRyaWdnZXIpKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGRhdGFPcHRpb25zID0gSlNPTi5wYXJzZSgkZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNjcm9sbC1vcHRpb25zIikgfHwgInt9Iik7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9ICRlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc2Nyb2xsIik7CiAgICAgICAgICAgICAgICB2YXIgdG8yID0gZGF0YSB8fCAkZWwuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uczIgPSBfX2Fzc2lnbjIoe30sIG9wdHMsIGRhdGFPcHRpb25zKTsKICAgICAgICAgICAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMyLnByZXZlbnREZWZhdWx0LCBzdG9wUHJvcGFnYXRpb24gPSBvcHRpb25zMi5zdG9wUHJvcGFnYXRpb24sIHZlcnRpY2FsID0gb3B0aW9uczIudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRpb25zMi5ob3Jpem9udGFsOwogICAgICAgICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7CiAgICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikgewogICAgICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfdGhpcy5jdHguJHRyaWdnZXIgPSAkZWw7CiAgICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbCAmJiB2ZXJ0aWNhbCkgewogICAgICAgICAgICAgICAgICBfdGhpcy50byh0bzIsIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9Ub3AodG8yLCBvcHRpb25zMik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9MZWZ0KHRvMiwgb3B0aW9uczIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmhhbmRsZVN0b3AgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICAgICAgICB2YXIgY3R4ID0gX3RoaXMuY3R4OwogICAgICAgICAgICAgIHZhciBvcHRzID0gY3R4Lm9wdHM7CiAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5jYW5jZWxsYWJsZSkgewogICAgICAgICAgICAgICAgY3R4LmNhbmNlbCA9IHRydWU7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5vcHRzID0gX19hc3NpZ24yKHt9LCBkZWZhdWx0T3B0aW9uczIsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9IG51bGw7CiAgICAgICAgICAgIGlmIChjYW5Vc2VET00pIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRhaW5lciA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSAkMyhjb250YWluZXIpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSBjb250YWluZXI7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSB3aW5kb3c7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJGVsID0gJGNvbnRhaW5lcjsKICAgICAgICAgICAgaWYgKCRjb250YWluZXIpIHsKICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBTd2VldFNjcm9sbDQuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucywgY29udGFpbmVyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3dlZXRTY3JvbGw0KG9wdGlvbnMsIGNvbnRhaW5lcik7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS50byA9IGZ1bmN0aW9uKGRpc3RhbmNlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIGlmICghY2FuVXNlRE9NKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIGN0eCA9IF9hMTQuY3R4LCBjdXJyZW50T3B0aW9ucyA9IF9hMTQub3B0czsKICAgICAgICAgICAgdmFyICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyOwogICAgICAgICAgICB2YXIgb3B0cyA9IF9fYXNzaWduMih7fSwgY3VycmVudE9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgb3B0T2Zmc2V0ID0gb3B0cy5vZmZzZXQsIHZlcnRpY2FsID0gb3B0cy52ZXJ0aWNhbCwgaG9yaXpvbnRhbCA9IG9wdHMuaG9yaXpvbnRhbDsKICAgICAgICAgICAgdmFyICRoZWFkZXIgPSBpc0VsZW1lbnQob3B0cy5oZWFkZXIpID8gb3B0cy5oZWFkZXIgOiAkMyhvcHRzLmhlYWRlcik7CiAgICAgICAgICAgIHZhciByZWcgPSAvXiMvOwogICAgICAgICAgICB2YXIgaGFzaCA9IGlzU3RyaW5nMihkaXN0YW5jZSkgJiYgcmVnLnRlc3QoZGlzdGFuY2UpID8gZGlzdGFuY2UgOiBudWxsOwogICAgICAgICAgICBjdHgub3B0cyA9IG9wdHM7CiAgICAgICAgICAgIGN0eC5jYW5jZWwgPSBmYWxzZTsKICAgICAgICAgICAgY3R4Lmhhc2ggPSBoYXNoOwogICAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgICAgaWYgKCEkZWwpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9mZnNldCA9IHBhcnNlQ29vcmRpbmF0ZShvcHRPZmZzZXQsIHZlcnRpY2FsKTsKICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGUgPSBwYXJzZUNvb3JkaW5hdGUoZGlzdGFuY2UsIHZlcnRpY2FsKTsKICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07CiAgICAgICAgICAgIGlmIChjb29yZGluYXRlKSB7CiAgICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGUucmVsYXRpdmUpIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZ2V0U2Nyb2xsKCRlbCwgdmVydGljYWwgPyAieSIgOiAieCIpOwogICAgICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IHZlcnRpY2FsID8gY3VycmVudCArIGNvb3JkaW5hdGUudG9wIDogY29vcmRpbmF0ZS50b3A7CiAgICAgICAgICAgICAgICBzY3JvbGwubGVmdCA9ICF2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLmxlZnQgOiBjb29yZGluYXRlLmxlZnQ7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNjcm9sbCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nMihkaXN0YW5jZSkgJiYgZGlzdGFuY2UgIT09ICIjIikgewogICAgICAgICAgICAgIHZhciAkdGFyZ2V0ID0gJDMoZGlzdGFuY2UpOwogICAgICAgICAgICAgIGlmICghJHRhcmdldCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzY3JvbGwgPSBnZXRPZmZzZXQoJHRhcmdldCwgJGVsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgICAgc2Nyb2xsLnRvcCArPSBvZmZzZXQudG9wOwogICAgICAgICAgICAgIHNjcm9sbC5sZWZ0ICs9IG9mZnNldC5sZWZ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaGVhZGVyKSB7CiAgICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbC50b3AgLSBnZXRTaXplMigkaGVhZGVyKS5oZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYiA9IGdldFZpZXdwb3J0QW5kRWxlbWVudFNpemVzKCRlbCksIHZpZXdwb3J0ID0gX2Iudmlld3BvcnQsIHNpemUgPSBfYi5zaXplOwogICAgICAgICAgICBzY3JvbGwudG9wID0gdmVydGljYWwgPyBNYXRoLm1heCgwLCBNYXRoLm1pbihzaXplLmhlaWdodCAtIHZpZXdwb3J0LmhlaWdodCwgc2Nyb2xsLnRvcCkpIDogZ2V0U2Nyb2xsKCRlbCwgInkiKTsKICAgICAgICAgICAgc2Nyb2xsLmxlZnQgPSBob3Jpem9udGFsID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2l6ZS53aWR0aCAtIHZpZXdwb3J0LndpZHRoLCBzY3JvbGwubGVmdCkpIDogZ2V0U2Nyb2xsKCRlbCwgIngiKTsKICAgICAgICAgICAgaWYgKHRoaXMuaG9vayhvcHRzLCAiYmVmb3JlIiwgc2Nyb2xsLCAkdHJpZ2dlcikgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgY3R4Lm9wdHMgPSBudWxsOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHgucG9zID0gc2Nyb2xsOwogICAgICAgICAgICB0aGlzLnN0YXJ0KG9wdHMpOwogICAgICAgICAgICB0aGlzLmJpbmQoZmFsc2UsIHRydWUpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG9Ub3AgPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICB0aGlzLnRvKGRpc3RhbmNlLCBfX2Fzc2lnbjIoe30sIG9wdGlvbnMgfHwge30sIHsgdmVydGljYWw6IHRydWUsIGhvcml6b250YWw6IGZhbHNlIH0pKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvTGVmdCA9IGZ1bmN0aW9uKGRpc3RhbmNlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIHRoaXMudG8oZGlzdGFuY2UsIF9fYXNzaWduMih7fSwgb3B0aW9ucyB8fCB7fSwgeyB2ZXJ0aWNhbDogZmFsc2UsIGhvcml6b250YWw6IHRydWUgfSkpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG9FbGVtZW50ID0gZnVuY3Rpb24oJGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyICRlbCA9IHRoaXMuJGVsOwogICAgICAgICAgICBpZiAoIWNhblVzZURPTSB8fCAhJGVsKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMudG8oZ2V0T2Zmc2V0KCRlbGVtZW50LCAkZWwpLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbihnb3RvRW5kKSB7CiAgICAgICAgICAgIGlmIChnb3RvRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgICAgICBnb3RvRW5kID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgIHZhciBwb3MgPSBjdHgucG9zOwogICAgICAgICAgICBpZiAoISRlbCB8fCAhY3R4LnByb2dyZXNzKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5jYWYoY3R4LmlkKTsKICAgICAgICAgICAgY3R4LnByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICAgIGN0eC5zdGFydCA9IDA7CiAgICAgICAgICAgIGN0eC5pZCA9IDA7CiAgICAgICAgICAgIGlmIChnb3RvRW5kICYmIHBvcykgewogICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIHBvcy5sZWZ0LCAieCIpOwogICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIHBvcy50b3AsICJ5Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICBpZiAodGhpcy4kZWwpIHsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IF9fYXNzaWduMih7fSwgdGhpcy5vcHRzLCBvcHRpb25zKTsKICAgICAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgICAgICB0aGlzLnVuYmluZCh0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICB0aGlzLm9wdHMgPSBvcHRzOwogICAgICAgICAgICAgIHRoaXMuYmluZCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkJlZm9yZSA9IGZ1bmN0aW9uKF80LCBfXykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLm9uU3RlcCA9IGZ1bmN0aW9uKF80KSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkFmdGVyID0gZnVuY3Rpb24oXzQsIF9fKSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25Db21wbGV0ZSA9IGZ1bmN0aW9uKF80KSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKG9wdHMpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4OwogICAgICAgICAgICBjdHgub3B0cyA9IG9wdHM7CiAgICAgICAgICAgIGN0eC5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgICAgIGN0eC5lYXNpbmcgPSBpc0Z1bmN0aW9uMihvcHRzLmVhc2luZykgPyBvcHRzLmVhc2luZyA6IGVhc2luZ3Nbb3B0cy5lYXNpbmddOwogICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9IHRoaXMuJGVsOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgdG9wOiBnZXRTY3JvbGwoJGNvbnRhaW5lciwgInkiKSwKICAgICAgICAgICAgICBsZWZ0OiBnZXRTY3JvbGwoJGNvbnRhaW5lciwgIngiKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjdHguc3RhcnRQb3MgPSBzdGFydDsKICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGw0LnJhZih0aGlzLmxvb3ApOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgIHZhciBoYXNoID0gY3R4Lmhhc2gsIGNhbmNlbCA9IGN0eC5jYW5jZWwsIG9wdHMgPSBjdHgub3B0cywgcG9zID0gY3R4LnBvcywgJHRyaWdnZXIgPSBjdHguJHRyaWdnZXI7CiAgICAgICAgICAgIGlmICghJGVsIHx8ICFvcHRzKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChoYXNoICE9IG51bGwgJiYgaGFzaCAhPT0gd2luZG93LmxvY2F0aW9uLmhhc2gpIHsKICAgICAgICAgICAgICB2YXIgdXBkYXRlVVJMID0gb3B0cy51cGRhdGVVUkw7CiAgICAgICAgICAgICAgaWYgKGNhblVzZURPTSAmJiBjYW5Vc2VIaXN0b3J5ICYmIHVwZGF0ZVVSTCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5W3VwZGF0ZVVSTCA9PT0gInJlcGxhY2UiID8gInJlcGxhY2VTdGF0ZSIgOiAicHVzaFN0YXRlIl0obnVsbCwgIiIsIGhhc2gpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnVuYmluZChmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgIGN0eC5vcHRzID0gbnVsbDsKICAgICAgICAgICAgY3R4LiR0cmlnZ2VyID0gbnVsbDsKICAgICAgICAgICAgaWYgKGNhbmNlbCkgewogICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiY2FuY2VsIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5ob29rKG9wdHMsICJhZnRlciIsIHBvcywgJHRyaWdnZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiY29tcGxldGUiLCBjYW5jZWwpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuaG9vayA9IGZ1bmN0aW9uKG9wdGlvbnMsIHR5cGU1KSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2ExNDsKICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gb3B0aW9uc1t0eXBlNV07CiAgICAgICAgICAgIHZhciBjYWxsYmFja1Jlc3VsdDsKICAgICAgICAgICAgdmFyIG1ldGhvZFJlc3VsdDsKICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24yKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncy5jb25jYXQoW3RoaXNdKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWV0aG9kUmVzdWx0ID0gKF9hMTQgPSB0aGlzKVsib24iICsgKHR5cGU1WzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlNS5zbGljZSgxKSldLmFwcGx5KF9hMTQsIGFyZ3MpOwogICAgICAgICAgICByZXR1cm4gY2FsbGJhY2tSZXN1bHQgIT09IHZvaWQgMCA/IGNhbGxiYWNrUmVzdWx0IDogbWV0aG9kUmVzdWx0OwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGNsaWNrLCBzdG9wKSB7CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIG9wdHMgPSBfYTE0LmN0eC5vcHRzOwogICAgICAgICAgICBpZiAoJGVsKSB7CiAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7CiAgICAgICAgICAgICAgICBhZGRFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgYWRkRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oY2xpY2ssIHN0b3ApIHsKICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgb3B0cyA9IF9hMTQuY3R4Lm9wdHM7CiAgICAgICAgICAgIGlmICgkZWwpIHsKICAgICAgICAgICAgICBpZiAoY2xpY2spIHsKICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KCRlbCwgQ09OVEFJTkVSX0NMSUNLX0VWRU5ULCB0aGlzLmhhbmRsZUNsaWNrLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICByZW1vdmVFdmVudCgkZWwsIENPTlRBSU5FUl9TVE9QX0VWRU5ULCB0aGlzLmhhbmRsZVN0b3AsIG9wdHMgPyBvcHRzLmNhbmNlbGxhYmxlIDogdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnJhZiA9IHJhZjsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5jYWYgPSBjYWY7CiAgICAgICAgICByZXR1cm4gU3dlZXRTY3JvbGw0OwogICAgICAgIH0pKCkKICAgICAgKTsKICAgICAgcmV0dXJuIFN3ZWV0U2Nyb2xsMzsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zd2VldF9zY3JvbGwsIGxpazsKdmFyIGluaXRfZG9tdG9vbHNfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czE2KCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90czE3KCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czE4KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHMxOSgpOwogICAgaW5pdF9kaXN0X3RzMTEoKTsKICAgIGluaXRfZGlzdF90czIwKCk7CiAgICBpbml0X2Rpc3RfdHMxNCgpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZGlzdF90czEzKCk7CiAgICBpbml0X2xpa19vYmplY3RtYXAoKTsKICAgIGluaXRfbGlrX3N0cmluZ21hcCgpOwogICAgaW5pdF9saWtfZmFzdG1hcCgpOwogICAgaW5pdF9sZW5pcygpOwogICAgaW1wb3J0X3N3ZWV0X3Njcm9sbCA9IF9fdG9FU00ocmVxdWlyZV9zd2VldF9zY3JvbGwoKSwgMSk7CiAgICBsaWsgPSB7CiAgICAgIE9iamVjdE1hcDogT2JqZWN0TWFwMiwKICAgICAgU3RyaW5nbWFwOiBTdHJpbmdtYXAyLAogICAgICBGYXN0TWFwOiBGYXN0TWFwMgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMKdmFyIGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLCB7CiAgY3NzRm9yRGVza3RvcDogKCkgPT4gY3NzRm9yRGVza3RvcCwKICBjc3NGb3JOb3RlYm9vazogKCkgPT4gY3NzRm9yTm90ZWJvb2ssCiAgY3NzRm9yUGhhYmxldDogKCkgPT4gY3NzRm9yUGhhYmxldCwKICBjc3NGb3JQaG9uZTogKCkgPT4gY3NzRm9yUGhvbmUsCiAgY3NzRm9yVGFibGV0OiAoKSA9PiBjc3NGb3JUYWJsZXQsCiAgZGVza3RvcDogKCkgPT4gZGVza3RvcCwKICBub3RlYm9vazogKCkgPT4gbm90ZWJvb2ssCiAgcGhhYmxldDogKCkgPT4gcGhhYmxldCwKICBwaG9uZTogKCkgPT4gcGhvbmUsCiAgdGFibGV0OiAoKSA9PiB0YWJsZXQKfSk7CnZhciBkZXNrdG9wLCBub3RlYm9vaywgdGFibGV0LCBwaGFibGV0LCBwaG9uZSwgY3NzRm9yRGVza3RvcCwgY3NzRm9yTm90ZWJvb2ssIGNzc0ZvclRhYmxldCwgY3NzRm9yUGhhYmxldCwgY3NzRm9yUGhvbmU7CnZhciBpbml0X2RvbXRvb2xzX2Nzc19icmVha3BvaW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2xpdCgpOwogICAgZGVza3RvcCA9IDE2MDA7CiAgICBub3RlYm9vayA9IDEyNDA7CiAgICB0YWJsZXQgPSAxMDI0OwogICAgcGhhYmxldCA9IDYwMDsKICAgIHBob25lID0gNDAwOwogICAgY3NzRm9yRGVza3RvcCA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtaW4td2lkdGg6ICR7ZGVza3RvcH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtaW4td2lkdGg6ICR7ZGVza3RvcH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0Zvck5vdGVib29rID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtub3RlYm9va31weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JUYWJsZXQgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3RhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7dGFibGV0fXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogICAgY3NzRm9yUGhhYmxldCA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7cGhhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7cGhhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0ZvclBob25lID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtwaG9uZX1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcwp2YXIgU2Nyb2xsZXI7CnZhciBpbml0X2RvbXRvb2xzX2NsYXNzZXNfc2Nyb2xsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIFNjcm9sbGVyID0gY2xhc3MgewogICAgICBkb210b29sc0luc3RhbmNlOwogICAgICAvLyBBcnJheSB0byBzdG9yZSBzY3JvbGwgY2FsbGJhY2sgZnVuY3Rpb25zLgogICAgICBzY3JvbGxDYWxsYmFja3MgPSBbXTsKICAgICAgLy8gTGVuaXMgaW5zdGFuY2UgKGlmIGFjdGl2YXRlZCkgb3IgbnVsbC4KICAgICAgbGVuaXNJbnN0YW5jZSA9IG51bGw7CiAgICAgIC8vIEJvdW5kIGhhbmRsZXJzIHRvIGFsbG93IHJlbW92YWwgZnJvbSBldmVudCBsaXN0ZW5lcnMuCiAgICAgIGhhbmRsZU5hdGl2ZVNjcm9sbCA9IChldmVudCkgPT4gewogICAgICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpOwogICAgICB9OwogICAgICBoYW5kbGVMZW5pc1Njcm9sbCA9IChpbmZvKSA9PiB7CiAgICAgICAgdGhpcy5leGVjdXRlU2Nyb2xsQ2FsbGJhY2tzKCk7CiAgICAgIH07CiAgICAgIGNvbnN0cnVjdG9yKGRvbXRvb2xzSW5zdGFuY2VBcmcpIHsKICAgICAgICB0aGlzLmRvbXRvb2xzSW5zdGFuY2UgPSBkb210b29sc0luc3RhbmNlQXJnOwogICAgICAgIHRoaXMuYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgfQogICAgICBzd2VldFNjcm9sbGVyID0gbmV3IGltcG9ydF9zd2VldF9zY3JvbGwuZGVmYXVsdCh7fSk7CiAgICAgIC8qKgogICAgICAgKiBTY3JvbGxzIHRvIGEgZ2l2ZW4gZWxlbWVudCB3aXRoIG9wdGlvbnMuCiAgICAgICAqLwogICAgICBhc3luYyB0b0VsZW1lbnQoZWxlbWVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3dlZXRTY3JvbGxlci50b0VsZW1lbnQoZWxlbWVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihvcHRpb25zQXJnLmR1cmF0aW9uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRGV0ZWN0cyB3aGV0aGVyIG5hdGl2ZSBzbW9vdGggc2Nyb2xsaW5nIGlzIGVuYWJsZWQuCiAgICAgICAqLwogICAgICBhc3luYyBkZXRlY3ROYXRpdmVTbW9vdGhTY3JvbGwoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IHNhbXBsZVNpemUgPSAxMDA7CiAgICAgICAgY29uc3QgYWNjZXB0YWJsZURlbHRhRGlmZmVyZW5jZSA9IDM7CiAgICAgICAgY29uc3QgbWluaW11bVNtb290aFJhdGlvID0gMC43NTsKICAgICAgICBjb25zdCBldmVudERlbHRhcyA9IFtdOwogICAgICAgIGZ1bmN0aW9uIG9uV2hlZWwoZXZlbnQpIHsKICAgICAgICAgIGV2ZW50RGVsdGFzLnB1c2goZXZlbnQuZGVsdGFZKTsKICAgICAgICAgIGlmIChldmVudERlbHRhcy5sZW5ndGggPj0gc2FtcGxlU2l6ZSkgewogICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLCBvbldoZWVsKTsKICAgICAgICAgICAgYW5hbHl6ZUV2ZW50cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBhbmFseXplRXZlbnRzKCkgewogICAgICAgICAgY29uc3QgdG90YWxEaWZmcyA9IGV2ZW50RGVsdGFzLmxlbmd0aCAtIDE7CiAgICAgICAgICBsZXQgc21hbGxEaWZmQ291bnQgPSAwOwogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdG90YWxEaWZmczsgaTExKyspIHsKICAgICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGV2ZW50RGVsdGFzW2kxMSArIDFdIC0gZXZlbnREZWx0YXNbaTExXSk7CiAgICAgICAgICAgIGlmIChkaWZmIDw9IGFjY2VwdGFibGVEZWx0YURpZmZlcmVuY2UpIHsKICAgICAgICAgICAgICBzbWFsbERpZmZDb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBzbW9vdGhSYXRpbyA9IHNtYWxsRGlmZkNvdW50IC8gdG90YWxEaWZmczsKICAgICAgICAgIGlmIChzbW9vdGhSYXRpbyA+PSBtaW5pbXVtU21vb3RoUmF0aW8pIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlNtb290aCBzY3JvbGxpbmcgZGV0ZWN0ZWQuIik7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIE5PVCBkZXRlY3RlZC4iKTsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwgb25XaGVlbCk7CiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRW5hYmxlcyBMZW5pcyBzY3JvbGxpbmcuCiAgICAgICAqIElmIG9wdGlvbnNBcmcuZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsIGlzIHRydWUgYW5kIG5hdGl2ZSBzbW9vdGggc2Nyb2xsaW5nIGlzIGRldGVjdGVkLAogICAgICAgKiBMZW5pcyB3aWxsIGJlIGRlc3Ryb3llZCBpbW1lZGlhdGVseS4KICAgICAgICovCiAgICAgIGFzeW5jIGVuYWJsZUxlbmlzU2Nyb2xsKG9wdGlvbnNBcmcpIHsKICAgICAgICBjb25zdCBsZW5pcyA9IG5ldyBMZW5pcyh7CiAgICAgICAgICBhdXRvUmFmOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKG9wdGlvbnNBcmc/LmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCkgewogICAgICAgICAgaWYgKGF3YWl0IHRoaXMuZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkpIHsKICAgICAgICAgICAgbGVuaXMuZGVzdHJveSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IGxlbmlzOwogICAgICAgIHRoaXMuZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICB0aGlzLmF0dGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBsZW5pcy5kZXN0cm95LmJpbmQobGVuaXMpOwogICAgICAgIGxlbmlzLmRlc3Ryb3kgPSAoKSA9PiB7CiAgICAgICAgICBvcmlnaW5hbERlc3Ryb3koKTsKICAgICAgICAgIHRoaXMuZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpOwogICAgICAgICAgdGhpcy5hdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpOwogICAgICAgICAgdGhpcy5sZW5pc0luc3RhbmNlID0gbnVsbDsKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCBvbiBzY3JvbGwuCiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZWFjaCBzY3JvbGwgZXZlbnQuCiAgICAgICAqLwogICAgICBvblNjcm9sbChjYWxsYmFjaykgewogICAgICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFeGVjdXRlcyBhbGwgcmVnaXN0ZXJlZCBzY3JvbGwgY2FsbGJhY2tzIGNvbmN1cnJlbnRseS4KICAgICAgICovCiAgICAgIGV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKSB7CiAgICAgICAgdGhpcy5zY3JvbGxDYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBpbiBzY3JvbGwgY2FsbGJhY2s6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBdHRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCkgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGFjaGVzIHRoZSBuYXRpdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLgogICAgICAgKi8KICAgICAgZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKSB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuaGFuZGxlTmF0aXZlU2Nyb2xsKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgdGhlIExlbmlzIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGF0dGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKSB7CiAgICAgICAgaWYgKHRoaXMubGVuaXNJbnN0YW5jZSkgewogICAgICAgICAgdGhpcy5sZW5pc0luc3RhbmNlLm9uKCJzY3JvbGwiLCB0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBkZXRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCkgewogICAgICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vZmYoInNjcm9sbCIsIHRoaXMuaGFuZGxlTGVuaXNTY3JvbGwpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLnRoZW1lbWFuYWdlci5qcwp2YXIgVGhlbWVNYW5hZ2VyOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX3RoZW1lbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLnRoZW1lbWFuYWdlci5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgVGhlbWVNYW5hZ2VyID0gY2xhc3MgewogICAgICBkb210b29sc1JlZjsKICAgICAgZ29CcmlnaHRCb29sZWFuID0gZmFsc2U7CiAgICAgIHByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaCA9IHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpOwogICAgICB0aGVtZU9ic2VydmFibGUgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlJlcGxheVN1YmplY3QoMSk7CiAgICAgIGNvbnN0cnVjdG9yKGRvbXRvb2xzUmVmQXJnKSB7CiAgICAgICAgdGhpcy5kb210b29sc1JlZiA9IGRvbXRvb2xzUmVmQXJnOwogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2gubWF0Y2hlczsKICAgICAgICB0aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gZXZlbnRBcmcubWF0Y2hlczsKICAgICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgICAgYXN5bmMgZW5hYmxlQXV0b21hdGljR2xvYmFsVGhlbWVDaGFuZ2UoKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5zdHlsZSkgewogICAgICAgICAgdGhpcy50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKHsKICAgICAgICAgICAgbmV4dDogKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kID0gZ29CcmlnaHQgPyAiI2ZmZiIgOiAiIzAwMCI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB1cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpIHsKICAgICAgICB0aGlzLnRoZW1lT2JzZXJ2YWJsZS5uZXh0KHRoaXMuZ29CcmlnaHRCb29sZWFuKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0IHRoZSB0aGVtZSBvZiB0aGUgd2Vic2l0ZSB0byBicmlnaHQKICAgICAgICovCiAgICAgIGdvQnJpZ2h0KCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gdHJ1ZTsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gZGFyawogICAgICAgKi8KICAgICAgZ29EYXJrKCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gZmFsc2U7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzaW1wbHkgdG9nZ2xlIGJldHdlZW4gYnJpZ2h0IGFuZCBkYXJrCiAgICAgICAqLwogICAgICB0b2dnbGVEYXJrQnJpZ2h0KCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gIXRoaXMuZ29CcmlnaHRCb29sZWFuOwogICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzCnZhciBLZXksIEtleWJvYXJkOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX2tleWJvYXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMua2V5Ym9hcmQuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICAoZnVuY3Rpb24oS2V5MykgewogICAgICBLZXkzW0tleTNbIkJhY2tzcGFjZSJdID0gOF0gPSAiQmFja3NwYWNlIjsKICAgICAgS2V5M1tLZXkzWyJUYWIiXSA9IDldID0gIlRhYiI7CiAgICAgIEtleTNbS2V5M1siRW50ZXIiXSA9IDEzXSA9ICJFbnRlciI7CiAgICAgIEtleTNbS2V5M1siU2hpZnQiXSA9IDE2XSA9ICJTaGlmdCI7CiAgICAgIEtleTNbS2V5M1siQ3RybCJdID0gMTddID0gIkN0cmwiOwogICAgICBLZXkzW0tleTNbIkFsdCJdID0gMThdID0gIkFsdCI7CiAgICAgIEtleTNbS2V5M1siUGF1c2VCcmVhayJdID0gMTldID0gIlBhdXNlQnJlYWsiOwogICAgICBLZXkzW0tleTNbIkNhcHNMb2NrIl0gPSAyMF0gPSAiQ2Fwc0xvY2siOwogICAgICBLZXkzW0tleTNbIkVzY2FwZSJdID0gMjddID0gIkVzY2FwZSI7CiAgICAgIEtleTNbS2V5M1siU3BhY2UiXSA9IDMyXSA9ICJTcGFjZSI7CiAgICAgIEtleTNbS2V5M1siUGFnZVVwIl0gPSAzM10gPSAiUGFnZVVwIjsKICAgICAgS2V5M1tLZXkzWyJQYWdlRG93biJdID0gMzRdID0gIlBhZ2VEb3duIjsKICAgICAgS2V5M1tLZXkzWyJFbmQiXSA9IDM1XSA9ICJFbmQiOwogICAgICBLZXkzW0tleTNbIkhvbWUiXSA9IDM2XSA9ICJIb21lIjsKICAgICAgS2V5M1tLZXkzWyJMZWZ0QXJyb3ciXSA9IDM3XSA9ICJMZWZ0QXJyb3ciOwogICAgICBLZXkzW0tleTNbIlVwQXJyb3ciXSA9IDM4XSA9ICJVcEFycm93IjsKICAgICAgS2V5M1tLZXkzWyJSaWdodEFycm93Il0gPSAzOV0gPSAiUmlnaHRBcnJvdyI7CiAgICAgIEtleTNbS2V5M1siRG93bkFycm93Il0gPSA0MF0gPSAiRG93bkFycm93IjsKICAgICAgS2V5M1tLZXkzWyJJbnNlcnQiXSA9IDQ1XSA9ICJJbnNlcnQiOwogICAgICBLZXkzW0tleTNbIkRlbGV0ZSJdID0gNDZdID0gIkRlbGV0ZSI7CiAgICAgIEtleTNbS2V5M1siWmVybyJdID0gNDhdID0gIlplcm8iOwogICAgICBLZXkzW0tleTNbIkNsb3NlZFBhcmVuIl0gPSA0OF0gPSAiQ2xvc2VkUGFyZW4iOwogICAgICBLZXkzW0tleTNbIk9uZSJdID0gNDldID0gIk9uZSI7CiAgICAgIEtleTNbS2V5M1siRXhjbGFtYXRpb25NYXJrIl0gPSA0OV0gPSAiRXhjbGFtYXRpb25NYXJrIjsKICAgICAgS2V5M1tLZXkzWyJUd28iXSA9IDUwXSA9ICJUd28iOwogICAgICBLZXkzW0tleTNbIkF0U2lnbiJdID0gNTBdID0gIkF0U2lnbiI7CiAgICAgIEtleTNbS2V5M1siVGhyZWUiXSA9IDUxXSA9ICJUaHJlZSI7CiAgICAgIEtleTNbS2V5M1siUG91bmRTaWduIl0gPSA1MV0gPSAiUG91bmRTaWduIjsKICAgICAgS2V5M1tLZXkzWyJIYXNoIl0gPSA1MV0gPSAiSGFzaCI7CiAgICAgIEtleTNbS2V5M1siRm91ciJdID0gNTJdID0gIkZvdXIiOwogICAgICBLZXkzW0tleTNbIkRvbGxhclNpZ24iXSA9IDUyXSA9ICJEb2xsYXJTaWduIjsKICAgICAgS2V5M1tLZXkzWyJGaXZlIl0gPSA1M10gPSAiRml2ZSI7CiAgICAgIEtleTNbS2V5M1siUGVyY2VudFNpZ24iXSA9IDUzXSA9ICJQZXJjZW50U2lnbiI7CiAgICAgIEtleTNbS2V5M1siU2l4Il0gPSA1NF0gPSAiU2l4IjsKICAgICAgS2V5M1tLZXkzWyJDYXJldCJdID0gNTRdID0gIkNhcmV0IjsKICAgICAgS2V5M1tLZXkzWyJIYXQiXSA9IDU0XSA9ICJIYXQiOwogICAgICBLZXkzW0tleTNbIlNldmVuIl0gPSA1NV0gPSAiU2V2ZW4iOwogICAgICBLZXkzW0tleTNbIkFtcGVyc2FuZCJdID0gNTVdID0gIkFtcGVyc2FuZCI7CiAgICAgIEtleTNbS2V5M1siRWlnaHQiXSA9IDU2XSA9ICJFaWdodCI7CiAgICAgIEtleTNbS2V5M1siU3RhciJdID0gNTZdID0gIlN0YXIiOwogICAgICBLZXkzW0tleTNbIkFzdGVyaWsiXSA9IDU2XSA9ICJBc3RlcmlrIjsKICAgICAgS2V5M1tLZXkzWyJOaW5lIl0gPSA1N10gPSAiTmluZSI7CiAgICAgIEtleTNbS2V5M1siT3BlblBhcmVuIl0gPSA1N10gPSAiT3BlblBhcmVuIjsKICAgICAgS2V5M1tLZXkzWyJBIl0gPSA2NV0gPSAiQSI7CiAgICAgIEtleTNbS2V5M1siQiJdID0gNjZdID0gIkIiOwogICAgICBLZXkzW0tleTNbIkMiXSA9IDY3XSA9ICJDIjsKICAgICAgS2V5M1tLZXkzWyJEIl0gPSA2OF0gPSAiRCI7CiAgICAgIEtleTNbS2V5M1siRSJdID0gNjldID0gIkUiOwogICAgICBLZXkzW0tleTNbIkYiXSA9IDcwXSA9ICJGIjsKICAgICAgS2V5M1tLZXkzWyJHIl0gPSA3MV0gPSAiRyI7CiAgICAgIEtleTNbS2V5M1siSCJdID0gNzJdID0gIkgiOwogICAgICBLZXkzW0tleTNbIkkiXSA9IDczXSA9ICJJIjsKICAgICAgS2V5M1tLZXkzWyJKIl0gPSA3NF0gPSAiSiI7CiAgICAgIEtleTNbS2V5M1siSyJdID0gNzVdID0gIksiOwogICAgICBLZXkzW0tleTNbIkwiXSA9IDc2XSA9ICJMIjsKICAgICAgS2V5M1tLZXkzWyJNIl0gPSA3N10gPSAiTSI7CiAgICAgIEtleTNbS2V5M1siTiJdID0gNzhdID0gIk4iOwogICAgICBLZXkzW0tleTNbIk8iXSA9IDc5XSA9ICJPIjsKICAgICAgS2V5M1tLZXkzWyJQIl0gPSA4MF0gPSAiUCI7CiAgICAgIEtleTNbS2V5M1siUSJdID0gODFdID0gIlEiOwogICAgICBLZXkzW0tleTNbIlIiXSA9IDgyXSA9ICJSIjsKICAgICAgS2V5M1tLZXkzWyJTIl0gPSA4M10gPSAiUyI7CiAgICAgIEtleTNbS2V5M1siVCJdID0gODRdID0gIlQiOwogICAgICBLZXkzW0tleTNbIlUiXSA9IDg1XSA9ICJVIjsKICAgICAgS2V5M1tLZXkzWyJWIl0gPSA4Nl0gPSAiViI7CiAgICAgIEtleTNbS2V5M1siVyJdID0gODddID0gIlciOwogICAgICBLZXkzW0tleTNbIlgiXSA9IDg4XSA9ICJYIjsKICAgICAgS2V5M1tLZXkzWyJZIl0gPSA4OV0gPSAiWSI7CiAgICAgIEtleTNbS2V5M1siWiJdID0gOTBdID0gIloiOwogICAgICBLZXkzW0tleTNbIkxlZnRXaW5kb3dLZXkiXSA9IDkxXSA9ICJMZWZ0V2luZG93S2V5IjsKICAgICAgS2V5M1tLZXkzWyJSaWdodFdpbmRvd0tleSJdID0gOTJdID0gIlJpZ2h0V2luZG93S2V5IjsKICAgICAgS2V5M1tLZXkzWyJTZWxlY3RLZXkiXSA9IDkzXSA9ICJTZWxlY3RLZXkiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDAiXSA9IDk2XSA9ICJOdW1wYWQwIjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQxIl0gPSA5N10gPSAiTnVtcGFkMSI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkMiJdID0gOThdID0gIk51bXBhZDIiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDMiXSA9IDk5XSA9ICJOdW1wYWQzIjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQ0Il0gPSAxMDBdID0gIk51bXBhZDQiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDUiXSA9IDEwMV0gPSAiTnVtcGFkNSI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkNiJdID0gMTAyXSA9ICJOdW1wYWQ2IjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQ3Il0gPSAxMDNdID0gIk51bXBhZDciOwogICAgICBLZXkzW0tleTNbIk51bXBhZDgiXSA9IDEwNF0gPSAiTnVtcGFkOCI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkOSJdID0gMTA1XSA9ICJOdW1wYWQ5IjsKICAgICAgS2V5M1tLZXkzWyJNdWx0aXBseSJdID0gMTA2XSA9ICJNdWx0aXBseSI7CiAgICAgIEtleTNbS2V5M1siQWRkIl0gPSAxMDddID0gIkFkZCI7CiAgICAgIEtleTNbS2V5M1siU3VidHJhY3QiXSA9IDEwOV0gPSAiU3VidHJhY3QiOwogICAgICBLZXkzW0tleTNbIkRlY2ltYWxQb2ludCJdID0gMTEwXSA9ICJEZWNpbWFsUG9pbnQiOwogICAgICBLZXkzW0tleTNbIkRpdmlkZSJdID0gMTExXSA9ICJEaXZpZGUiOwogICAgICBLZXkzW0tleTNbIkYxIl0gPSAxMTJdID0gIkYxIjsKICAgICAgS2V5M1tLZXkzWyJGMiJdID0gMTEzXSA9ICJGMiI7CiAgICAgIEtleTNbS2V5M1siRjMiXSA9IDExNF0gPSAiRjMiOwogICAgICBLZXkzW0tleTNbIkY0Il0gPSAxMTVdID0gIkY0IjsKICAgICAgS2V5M1tLZXkzWyJGNSJdID0gMTE2XSA9ICJGNSI7CiAgICAgIEtleTNbS2V5M1siRjYiXSA9IDExN10gPSAiRjYiOwogICAgICBLZXkzW0tleTNbIkY3Il0gPSAxMThdID0gIkY3IjsKICAgICAgS2V5M1tLZXkzWyJGOCJdID0gMTE5XSA9ICJGOCI7CiAgICAgIEtleTNbS2V5M1siRjkiXSA9IDEyMF0gPSAiRjkiOwogICAgICBLZXkzW0tleTNbIkYxMCJdID0gMTIxXSA9ICJGMTAiOwogICAgICBLZXkzW0tleTNbIkYxMSJdID0gMTIyXSA9ICJGMTEiOwogICAgICBLZXkzW0tleTNbIkYxMiJdID0gMTIzXSA9ICJGMTIiOwogICAgICBLZXkzW0tleTNbIk51bUxvY2siXSA9IDE0NF0gPSAiTnVtTG9jayI7CiAgICAgIEtleTNbS2V5M1siU2Nyb2xsTG9jayJdID0gMTQ1XSA9ICJTY3JvbGxMb2NrIjsKICAgICAgS2V5M1tLZXkzWyJTZW1pQ29sb24iXSA9IDE4Nl0gPSAiU2VtaUNvbG9uIjsKICAgICAgS2V5M1tLZXkzWyJFcXVhbHMiXSA9IDE4N10gPSAiRXF1YWxzIjsKICAgICAgS2V5M1tLZXkzWyJDb21tYSJdID0gMTg4XSA9ICJDb21tYSI7CiAgICAgIEtleTNbS2V5M1siRGFzaCJdID0gMTg5XSA9ICJEYXNoIjsKICAgICAgS2V5M1tLZXkzWyJQZXJpb2QiXSA9IDE5MF0gPSAiUGVyaW9kIjsKICAgICAgS2V5M1tLZXkzWyJVbmRlclNjb3JlIl0gPSAxODldID0gIlVuZGVyU2NvcmUiOwogICAgICBLZXkzW0tleTNbIlBsdXNTaWduIl0gPSAxODddID0gIlBsdXNTaWduIjsKICAgICAgS2V5M1tLZXkzWyJGb3J3YXJkU2xhc2giXSA9IDE5MV0gPSAiRm9yd2FyZFNsYXNoIjsKICAgICAgS2V5M1tLZXkzWyJUaWxkZSJdID0gMTkyXSA9ICJUaWxkZSI7CiAgICAgIEtleTNbS2V5M1siR3JhdmVBY2NlbnQiXSA9IDE5Ml0gPSAiR3JhdmVBY2NlbnQiOwogICAgICBLZXkzW0tleTNbIk9wZW5CcmFja2V0Il0gPSAyMTldID0gIk9wZW5CcmFja2V0IjsKICAgICAgS2V5M1tLZXkzWyJDbG9zZWRCcmFja2V0Il0gPSAyMjFdID0gIkNsb3NlZEJyYWNrZXQiOwogICAgICBLZXkzW0tleTNbIlF1b3RlIl0gPSAyMjJdID0gIlF1b3RlIjsKICAgIH0pKEtleSB8fCAoS2V5ID0ge30pKTsKICAgIEtleWJvYXJkID0gY2xhc3MgewogICAgICBkb21Ob2RlOwogICAgICBtYXBDb21ib3NUb0hhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgcHJlc3NlZEtleXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICBjb25zdHJ1Y3Rvcihkb21Ob2RlKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlID0gZG9tTm9kZTsKICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nKCk7CiAgICAgIH0KICAgICAga2V5RW51bSA9IEtleTsKICAgICAgb24oa2V5czIpIHsKICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5yZWdpc3RlcktleXMoa2V5czIsIHN1YmplY3QpOwogICAgICAgIHJldHVybiBzdWJqZWN0OwogICAgICB9CiAgICAgIHRyaWdnZXJLZXlQcmVzcyhrZXlzQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXNBcmcpIHsKICAgICAgICAgIHRoaXMucHJlc3NlZEtleXMuYWRkKGtleTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKCk7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXNBcmcpIHsKICAgICAgICAgIHRoaXMucHJlc3NlZEtleXMuZGVsZXRlKGtleTIpOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGFydExpc3RlbmluZygpIHsKICAgICAgICB0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5RG93bik7CiAgICAgICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5oYW5kbGVLZXlVcCk7CiAgICAgIH0KICAgICAgc3RvcExpc3RlbmluZygpIHsKICAgICAgICB0aGlzLmRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5RG93bik7CiAgICAgICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5oYW5kbGVLZXlVcCk7CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7CiAgICAgICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmNsZWFyKCk7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5jbGVhcigpOwogICAgICB9CiAgICAgIGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmFkZChldmVudC5rZXlDb2RlKTsKICAgICAgICB0aGlzLmNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKGV2ZW50KTsKICAgICAgfTsKICAgICAgY2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMocGF5bG9hZEFyZykgewogICAgICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5mb3JFYWNoKChzdWJqZWN0QXJnLCBrZXlzQXJnKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5hcmVBbGxLZXlzUHJlc3NlZChrZXlzQXJnKSkgewogICAgICAgICAgICBzdWJqZWN0QXJnLm5leHQocGF5bG9hZEFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaGFuZGxlS2V5VXAgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShldmVudC5rZXlDb2RlKTsKICAgICAgfTsKICAgICAgYXJlQWxsS2V5c1ByZXNzZWQoa2V5c0FyZykgewogICAgICAgIGxldCByZXN1bHQgPSB0cnVlOwogICAgICAgIGtleXNBcmcuZm9yRWFjaCgoa2V5MikgPT4gewogICAgICAgICAgaWYgKCF0aGlzLnByZXNzZWRLZXlzLmhhcyhrZXkyKSkgewogICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJlZ2lzdGVyS2V5cyhrZXlzQXJnLCBzdWJqZWN0QXJnKSB7CiAgICAgICAgaWYgKCF0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuaGFzKGtleXNBcmcpKSB7CiAgICAgICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuc2V0KGtleXNBcmcsIHN1YmplY3RBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmdldChrZXlzQXJnKTsKICAgICAgICAgIHJldHVybiBzdWJqZWN0OwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmRvbXRvb2xzLmpzCnZhciBEb21Ub29sczsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmRvbXRvb2xzLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgaW5pdF9kb210b29sc19jc3NfYnJlYWtwb2ludHMoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19zY3JvbGxlcigpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc190aGVtZW1hbmFnZXIoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19rZXlib2FyZCgpOwogICAgRG9tVG9vbHMgPSBjbGFzcyBfRG9tVG9vbHMgewogICAgICAvLyA9PT09PT0KICAgICAgLy8gU1RBVElDCiAgICAgIC8vID09PT09PQogICAgICBzdGF0aWMgaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIHNldHVwcyBkb210b29scwogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIHNldHVwRG9tVG9vbHMob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgaWYgKCFvcHRpb25zQXJnLmlnbm9yZUdsb2JhbCAmJiBfRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFvcHRpb25zQXJnLmlnbm9yZUdsb2JhbCkgewogICAgICAgICAgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGxldCBkb21Ub29sc0luc3RhbmNlOwogICAgICAgICAgICBpZiAoIWdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzKSB7CiAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHMgPSBuZXcgX0RvbVRvb2xzKG9wdGlvbnNBcmcpOwogICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICAgICAgICBjb25zdCByZWFkeVN0YXRlQ2hhbmdlZEZ1bmMgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImludGVyYWN0aXZlIiB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZWxlbWVudHMuaGVhZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIik7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZWxlbWVudHMuYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2Uua2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmQoZG9jdW1lbnQuYm9keSk7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZG9tUmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJpbnRlcmFjdGl2ZSIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLCByZWFkeVN0YXRlQ2hhbmdlZEZ1bmMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVRvb2xzUmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCBkb21Ub29sc0luc3RhbmNlLmRvbVRvb2xzUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgcmV0dXJuIGRvbVRvb2xzSW5zdGFuY2U7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgcmV0dXJuIGF3YWl0IF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGRvbVRvb2xzSW5zdGFuY2UgPSBuZXcgX0RvbVRvb2xzKG9wdGlvbnNBcmcpOwogICAgICAgICAgcmV0dXJuIGRvbVRvb2xzSW5zdGFuY2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpZiB5b3UgY2FuLCB1c2UgdGhlIHN0YXRpYyBhc3lzbmMgLnNldHVwRG9tVG9vbHMoKSBmdW5jdGlvbiBpbnN0ZWFkIHNpbmNlIGl0IGlzIHNhZmVyIHRvIHVzZS4KICAgICAgICovCiAgICAgIHN0YXRpYyBnZXRHbG9iYWxEb21Ub29sc1N5bmMoKSB7CiAgICAgICAgY29uc3QgZ2xvYmFsRG9tVG9vbHMgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICBpZiAoIWdsb2JhbERvbVRvb2xzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSB0cmllZCB0byBhY2Nlc3MgZG9tdG9vbHMgc3luY2hyb25vdXNseSB0b28gZWFybHkiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzOwogICAgICB9CiAgICAgIC8vID09PT09PT09CiAgICAgIC8vIElOU1RBTkNFCiAgICAgIC8vID09PT09PT09CiAgICAgIC8vIGVsZW1lbnRzCiAgICAgIGVsZW1lbnRzID0gewogICAgICAgIGhlYWRFbGVtZW50OiBudWxsLAogICAgICAgIGJvZHlFbGVtZW50OiBudWxsCiAgICAgIH07CiAgICAgIHdlYnNldHVwID0gbmV3IFdlYlNldHVwKHsKICAgICAgICBtZXRhT2JqZWN0OiB7CiAgICAgICAgICB0aXRsZTogImxvYWRpbmcuLi4iCiAgICAgICAgfQogICAgICB9KTsKICAgICAgc21hcnRzdGF0ZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxOS5TbWFydHN0YXRlKCk7CiAgICAgIGRvbVRvb2xzU3RhdGVQYXJ0ID0gdGhpcy5zbWFydHN0YXRlLmdldFN0YXRlUGFydCgiZG9tdG9vbHMiLCB7CiAgICAgICAgdmlydHVhbFZpZXdwb3J0OiAibmF0aXZlIiwKICAgICAgICBqd3Q6IG51bGwKICAgICAgfSk7CiAgICAgIHJvdXRlciA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxOC5TbWFydFJvdXRlcih7CiAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb252ZW5pZW5jZSA9IHsKICAgICAgICB0eXBlZHJlcXVlc3Q6IGRpc3RfdHNfZXhwb3J0czE1LAogICAgICAgIHNtYXJ0ZGVsYXk6IGRpc3RfdHNfZXhwb3J0czMsCiAgICAgICAgc21hcnRqc29uOiBkaXN0X3RzX2V4cG9ydHMxMiwKICAgICAgICBzbWFydHVybDogZGlzdF90c19leHBvcnRzMjAKICAgICAgfTsKICAgICAgZGVlc0NvbW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czE2LkRlZXNDb21tcygpOwogICAgICBzY3JvbGxlciA9IG5ldyBTY3JvbGxlcih0aGlzKTsKICAgICAgdGhlbWVNYW5hZ2VyID0gbmV3IFRoZW1lTWFuYWdlcih0aGlzKTsKICAgICAga2V5Ym9hcmQgPSBudWxsOwogICAgICAvLyBJbml0aWFsaXplZCBhZnRlciBET00gcmVhZHkgdG8gYXZvaWQgYWNjZXNzaW5nIGRvY3VtZW50LmJvZHkgYmVmb3JlIGl0IGV4aXN0cwogICAgICBkb21Ub29sc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGRvbVJlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGdsb2JhbFN0eWxlc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgfQogICAgICBydW5PbmNlVHJhY2tlclN0cmluZ01hcCA9IG5ldyBsaWsuU3RyaW5nbWFwKCk7CiAgICAgIHJ1bk9uY2VSZXN1bHRNYXAgPSBuZXcgbGlrLkZhc3RNYXAoKTsKICAgICAgcnVuT25jZUVycm9yTWFwID0gbmV3IGxpay5GYXN0TWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBydW4gYSBmdW5jdGlvbiBvbmNlIGFuZCBhbHdheXMgZ2V0IHRoZSBQcm9taXNlIG9mIHRoZSBmaXJzdCBleGVjdXRpb24KICAgICAgICogQHBhcmFtIGlkZW50aWZpZXJBcmcgdGhlIGluZGVudGlmaWVyIGFyZyBpZGVudGlmaWVzIGZ1bmN0aW9ucy4gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllciBhcmUgY29uc2lkZXJlZCBlcXVhbAogICAgICAgKiBAcGFyYW0gZnVuY0FyZyB0aGUgYWN0dWFsIGZ1bmMgYXJnIHRvIHJ1bgogICAgICAgKi8KICAgICAgYXN5bmMgcnVuT25jZShpZGVudGlmaWVyQXJnLCBmdW5jQXJnKSB7CiAgICAgICAgY29uc3QgcnVubmluZ0lkID0gYCR7aWRlbnRpZmllckFyZ30rcnVubmluZ0NoZWNrYDsKICAgICAgICBpZiAoIXRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuY2hlY2tTdHJpbmcoaWRlbnRpZmllckFyZykpIHsKICAgICAgICAgIHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGlkZW50aWZpZXJBcmcpOwogICAgICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5hZGRTdHJpbmcocnVubmluZ0lkKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZ1bmNBcmcoKTsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmFkZFRvTWFwKGlkZW50aWZpZXJBcmcsIHJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VFcnJvck1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCBlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLnJlbW92ZVN0cmluZyhydW5uaW5nSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZSgoc3RyaW5nTWFwKSA9PiB7CiAgICAgICAgICByZXR1cm4gIXN0cmluZ01hcC5pbmNsdWRlcyhydW5uaW5nSWQpOwogICAgICAgIH0sICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5ydW5PbmNlRXJyb3JNYXAuZ2V0QnlLZXkoaWRlbnRpZmllckFyZyk7CiAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmdldEJ5S2V5KGlkZW50aWZpZXJBcmcpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIHNldFN0dWZmCiAgICAgIC8qKgogICAgICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXMKICAgICAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldAogICAgICAgKi8KICAgICAgYXN5bmMgc2V0R2xvYmFsU3R5bGVzKHN0eWxlc1RleHQpIHsKICAgICAgICBhd2FpdCB0aGlzLmRvbVJlYWR5LnByb21pc2U7CiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0eWxlc1RleHQpKTsKICAgICAgICB0aGlzLmVsZW1lbnRzLmhlYWRFbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyB0byBzZXQgZ2xvYmFsIHN0eWxlcwogICAgICAgKiBAcGFyYW0gc3R5bGVzVGV4dCB0aGUgY3NzIHRleHQgeW91IHdhbnQgdG8gc2V0CiAgICAgICAqLwogICAgICBhc3luYyBzZXRFeHRlcm5hbFNjcmlwdChzY3JpcHRMaW5rQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0TGlua0FyZzsKICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keTsKICAgICAgICBwYXJlbnROb2RlLmFwcGVuZChzY3JpcHQpOwogICAgICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgZXh0ZXJuYWwgY3NzIGZpbGVzCiAgICAgICAqIEBwYXJhbSBjc3NMaW5rQXJnIGEgdXJsIHRvIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQKICAgICAgICovCiAgICAgIGFzeW5jIHNldEV4dGVybmFsQ3NzKGNzc0xpbmtBcmcpIHsKICAgICAgICBjb25zdCBjc3NUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7CiAgICAgICAgY3NzVGFnLnJlbCA9ICJzdHlsZXNoZWV0IjsKICAgICAgICBjc3NUYWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKICAgICAgICBjc3NUYWcuaHJlZiA9IGNzc0xpbmtBcmc7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoY3NzVGFnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgb2Ygd2Vic2l0ZSBpbmZvcwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyB0aGUgd2Vic2l0ZSBpbmZvCiAgICAgICAqLwogICAgICBhc3luYyBzZXRXZWJzaXRlSW5mbyhvcHRpb25zQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5zZXR1cChvcHRpb25zQXJnKTsKICAgICAgICBhd2FpdCB0aGlzLndlYnNldHVwLnJlYWR5UHJvbWlzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcwp2YXIgc2Nyb2xsQmFyU3R5bGVzLCBnbG9iYWxCYXNlU3R5bGVzOwp2YXIgaW5pdF9kb210b29sc19jc3NfYmFzZXN0eWxlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzY3JvbGxCYXJTdHlsZXMgPSAoKCkgPT4gewogICAgICBjb25zdCByZXR1cm5TdHlsZXNPbGQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1hYyBPUyBYIikgPT09IC0xID8gaWBgLmNzc1RleHQgOiBgYDsKICAgICAgY29uc3QgcmV0dXJuU3R5bGVzID0gaWAKICAgIC8qIHdpZHRoICovCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgd2lkdGg6IDBweDsKICAgIH0KICAgIGJvZHkgewogICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICB9CiAgYC5jc3NUZXh0OwogICAgICByZXR1cm4gcmV0dXJuU3R5bGVzOwogICAgfSkoKTsKICAgIGdsb2JhbEJhc2VTdHlsZXMgPSBpYAogIC8qCiAgQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbWF0ZXJpYWxpY29ucy92NDIvZmxVaFJxNnR6WmNsUUVKLVZkZy1JdWlhRHNOY0loUTh0US53b2ZmMikKICAgICAgZm9ybWF0KCd3b2ZmMicpOwogIH0gKi8KCiAgLyogZ2xvYmFsIGJvZHkgc3R5bGVzICovCiAgYm9keSB7CiAgICBtYXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi8KICAke3Ioc2Nyb2xsQmFyU3R5bGVzKX0KYC5jc3NUZXh0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmVsZW1lbnRiYXNpYy5qcwp2YXIgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMsIHsKICBzZXR1cDogKCkgPT4gc2V0dXAsCiAgc3RhdGljU3R5bGVzOiAoKSA9PiBzdGF0aWNTdHlsZXMsCiAgc3R5bGVzOiAoKSA9PiBzdHlsZXMKfSk7CnZhciBzdGF0aWNTdHlsZXMsIHN0eWxlcywgc2V0dXA7CnZhciBpbml0X2RvbXRvb2xzX2VsZW1lbnRiYXNpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5lbGVtZW50YmFzaWMuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2Jhc2VzdHlsZXMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzdGF0aWNTdHlsZXMgPSBpYAogICogewogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIDpob3N0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogIH0KCiAgJHtyKHNjcm9sbEJhclN0eWxlcyl9CmA7CiAgICBzdHlsZXMgPSBiMmAKICA8c3R5bGU+CiAgICAqIHsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAke3Njcm9sbEJhclN0eWxlc30KICA8L3N0eWxlPgpgOwogICAgc2V0dXAgPSBhc3luYyAoZWxlbWVudEFyZywgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IGRvbVRvb2xzID0gYXdhaXQgRG9tVG9vbHMuc2V0dXBEb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgaWYgKGVsZW1lbnRBcmcpIHsKICAgICAgfQogICAgICBkb21Ub29scy5ydW5PbmNlKCJlbGVtZW50QmFzaWNTZXR1cCIsIGFzeW5jICgpID0+IHsKICAgICAgICBkb21Ub29scy5zZXRHbG9iYWxTdHlsZXMoZ2xvYmFsQmFzZVN0eWxlcyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9tVG9vbHM7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcwp2YXIgZG9tdG9vbHNfY3NzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfY3NzX2V4cG9ydHMsIHsKICBjc3NHcmlkQ29sdW1uczogKCkgPT4gY3NzR3JpZENvbHVtbnMKfSk7CnZhciBjc3NHcmlkQ29sdW1uczsKdmFyIGluaXRfZG9tdG9vbHNfY3NzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcyIoKSB7CiAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgbGV0IHJldHVyblN0cmluZyA9IGBgOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBhbW91bnRPZkNvbHVtbnNBcmc7IGkxMSsrKSB7CiAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcwp2YXIgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cywgewogIFN3ZWV0U2Nyb2xsOiAoKSA9PiBpbXBvcnRfc3dlZXRfc2Nyb2xsMi5kZWZhdWx0LAogIHNtYXJ0ZGVsYXk6ICgpID0+IGRpc3RfdHNfZXhwb3J0czMsCiAgc21hcnRtYXJrZG93bjogKCkgPT4gZGlzdF90c19leHBvcnRzMTcsCiAgc21hcnRwcm9taXNlOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMsCiAgc21hcnRyb3V0ZXI6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE4LAogIHNtYXJ0cng6ICgpID0+IGRpc3RfdHNfZXhwb3J0czIsCiAgc21hcnRzdGF0ZTogKCkgPT4gZGlzdF90c19leHBvcnRzMTksCiAgc21hcnRzdHJpbmc6ICgpID0+IGRpc3RfdHNfZXhwb3J0czExLAogIHNtYXJ0dXJsOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyMCwKICB0eXBlZHJlcXVlc3Q6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE1Cn0pOwp2YXIgaW1wb3J0X3N3ZWV0X3Njcm9sbDI7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbmV4cG9ydHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbXBvcnRfc3dlZXRfc2Nyb2xsMiA9IF9fdG9FU00ocmVxdWlyZV9zd2VldF9zY3JvbGwoKSwgMSk7CiAgICBpbml0X2Rpc3RfdHMxOSgpOwogICAgaW5pdF9kaXN0X3RzMTgoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMCgpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjUgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjUsIHsKICBEb21Ub29sczogKCkgPT4gRG9tVG9vbHMsCiAgVHlwZWRSZXF1ZXN0OiAoKSA9PiBUeXBlZFJlcXVlc3QsCiAgYnJlYWtwb2ludHM6ICgpID0+IGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLAogIGNzczogKCkgPT4gZG9tdG9vbHNfY3NzX2V4cG9ydHMsCiAgZWxlbWVudEJhc2ljOiAoKSA9PiBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cywKICBwbHVnaW5zOiAoKSA9PiBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMKfSk7CnZhciBpbml0X2Rpc3RfdHMyNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NvbG9ycygpOwogICAgaW5pdF9kb210b29sc19lbGVtZW50YmFzaWMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NzcygpOwogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2luZXhwb3J0cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzCnZhciBpc291bmlxdWUzLCBsaXQ7CnZhciBpbml0X3BsdWdpbnMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzIigpIHsKICAgIGlzb3VuaXF1ZTMgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X3Byb3BlcnR5MigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGxpdCA9IHsKICAgICAgY3NzOiBpLAogICAgICB1bnNhZmVDU1M6IHIsCiAgICAgIExpdEVsZW1lbnQ6IGk0LAogICAgICBwcm9wZXJ0eTogbjUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuY3NzbWFuYWdlci5qcwp2YXIgQ3NzTWFuYWdlcjsKdmFyIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmNzc21hbmFnZXIuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfcGx1Z2luczMoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBDc3NNYW5hZ2VyID0gY2xhc3MgX0Nzc01hbmFnZXIgewogICAgICAvLyBTVEFUSUMKICAgICAgc3RhdGljIGluc3RhbmNlID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBDc3NNYW5hZ2VyCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0U2luZ2xldG9uKCkgewogICAgICAgIGlmICghX0Nzc01hbmFnZXIuaW5zdGFuY2UpIHsKICAgICAgICAgIF9Dc3NNYW5hZ2VyLmluc3RhbmNlID0gbmV3IF9Dc3NNYW5hZ2VyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfQ3NzTWFuYWdlci5pbnN0YW5jZTsKICAgICAgfQogICAgICAvLyBJTlNUQU5DRQogICAgICBkb210b29sc1Byb21pc2UgPSBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGdvQnJpZ2h0ID0gZmFsc2U7CiAgICAgIGJkVmFyVHJpcGxldFN0b3JlID0gW107CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICBkb210b29sc0FyZy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAoZ29CcmlnaHRBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5nb0JyaWdodCA9IGdvQnJpZ2h0QXJnOwogICAgICAgICAgICBhd2FpdCBkb210b29sc0FyZy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgICAgICBmb3IgKGNvbnN0IGJkVHJpcGxldEFyZyBvZiB0aGlzLmJkVmFyVHJpcGxldFN0b3JlKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShiZFRyaXBsZXRBcmcuY3NzVmFyTmFtZSwgdGhpcy5nb0JyaWdodCA/IGJkVHJpcGxldEFyZy5icmlnaHRWYWx1ZSA6IGJkVHJpcGxldEFyZy5kYXJrVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBnZXQgZGVmYXVsdFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc3RhdGljU3R5bGVzOwogICAgICB9CiAgICAgIGNzc0ZvckRlc2t0b3AoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvckRlc2t0b3AoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0Zvck5vdGVib29rKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JOb3RlYm9vayhjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgY3NzRm9yVGFibGV0KGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JUYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBoYWJsZXQoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvclBoYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBob25lKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JQaG9uZShjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgYmRUaGVtZShicmlnaHRWYWx1ZUFyZywgZGFya1ZhbHVlQXJnKSB7CiAgICAgICAgbGV0IHJldHVybkNzc1ZhcjsKICAgICAgICBsZXQgZGVmYXVsdFZhbHVlOwogICAgICAgIGlmIChEb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKSkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbiA/IGJyaWdodFZhbHVlQXJnIDogZGFya1ZhbHVlQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkYXJrVmFsdWVBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGV4aXN0aW5nVHJpcGxldCA9IHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUuZmluZCgodHJpcGxldEFyZykgPT4gdHJpcGxldEFyZy5kYXJrVmFsdWUgPT09IGRhcmtWYWx1ZUFyZyAmJiB0cmlwbGV0QXJnLmJyaWdodFZhbHVlID09PSBicmlnaHRWYWx1ZUFyZyk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHJpcGxldCkgewogICAgICAgICAgcmV0dXJuQ3NzVmFyID0gZXhpc3RpbmdUcmlwbGV0LmNzc1Zhck5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld1RyaXBsZXQgPSB7CiAgICAgICAgICAgIGNzc1Zhck5hbWU6IGAtLSR7aXNvdW5pcXVlMy51bmkoKX1gLAogICAgICAgICAgICBicmlnaHRWYWx1ZTogYnJpZ2h0VmFsdWVBcmcsCiAgICAgICAgICAgIGRhcmtWYWx1ZTogZGFya1ZhbHVlQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5iZFZhclRyaXBsZXRTdG9yZS5wdXNoKG5ld1RyaXBsZXQpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UudGhlbihhc3luYyAoZG9tdG9vbHNBcmcpID0+IHsKICAgICAgICAgICAgYXdhaXQgZG9tdG9vbHNBcmcuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShuZXdUcmlwbGV0LmNzc1Zhck5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybkNzc1ZhciA9IG5ld1RyaXBsZXQuY3NzVmFyTmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpdC51bnNhZmVDU1MoYHZhcigke3JldHVybkNzc1Zhcn0sICR7ZGVmYXVsdFZhbHVlfSlgKTsKICAgICAgfQogICAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgICBsZXQgcmV0dXJuU3RyaW5nID0gYGA7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpMTErKykgewogICAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXQudW5zYWZlQ1NTKHJldHVyblN0cmluZyk7CiAgICAgIH07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcwp2YXIgYTMsIG83LCBzNCwgaTUsIGwzLCBuNywgdTMsIGM0LCAkMjsKdmFyIGluaXRfc3RhdGljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBhMyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCIiKSwgbzcgPSAodDkpID0+IHsKICAgICAgaWYgKHQ5Py5yID09PSBhMykgcmV0dXJuIHQ5Py5fJGxpdFN0YXRpYyQ7CiAgICB9LCBzNCA9ICh0OSkgPT4gKHsgXyRsaXRTdGF0aWMkOiB0OSwgcjogYTMgfSksIGk1ID0gKHQ5LCAuLi5yMTEpID0+ICh7IF8kbGl0U3RhdGljJDogcjExLnJlZHVjZSgocjEyLCBlMTEsIGE1KSA9PiByMTIgKyAoKHQxMCkgPT4gewogICAgICBpZiAodm9pZCAwICE9PSB0MTAuXyRsaXRTdGF0aWMkKSByZXR1cm4gdDEwLl8kbGl0U3RhdGljJDsKICAgICAgdGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7dDEwfS4gVXNlICd1bnNhZmVTdGF0aWMnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApOwogICAgfSkoZTExKSArIHQ5W2E1ICsgMV0sIHQ5WzBdKSwgcjogYTMgfSksIGwzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgbjcgPSAodDkpID0+IChyMTEsIC4uLmUxMSkgPT4gewogICAgICBjb25zdCBhNSA9IGUxMS5sZW5ndGg7CiAgICAgIGxldCBzOSwgaTExOwogICAgICBjb25zdCBuMTMgPSBbXSwgdTcgPSBbXTsKICAgICAgbGV0IGMxMSwgJDMgPSAwLCBmNyA9IGZhbHNlOwogICAgICBmb3IgKDsgJDMgPCBhNTsgKSB7CiAgICAgICAgZm9yIChjMTEgPSByMTFbJDNdOyAkMyA8IGE1ICYmIHZvaWQgMCAhPT0gKGkxMSA9IGUxMVskM10sIHM5ID0gbzcoaTExKSk7ICkgYzExICs9IHM5ICsgcjExWysrJDNdLCBmNyA9IHRydWU7CiAgICAgICAgJDMgIT09IGE1ICYmIHU3LnB1c2goaTExKSwgbjEzLnB1c2goYzExKSwgJDMrKzsKICAgICAgfQogICAgICBpZiAoJDMgPT09IGE1ICYmIG4xMy5wdXNoKHIxMVthNV0pLCBmNykgewogICAgICAgIGNvbnN0IHQxMCA9IG4xMy5qb2luKCIkJGxpdCQkIik7CiAgICAgICAgdm9pZCAwID09PSAocjExID0gbDMuZ2V0KHQxMCkpICYmIChuMTMucmF3ID0gbjEzLCBsMy5zZXQodDEwLCByMTEgPSBuMTMpKSwgZTExID0gdTc7CiAgICAgIH0KICAgICAgcmV0dXJuIHQ5KHIxMSwgLi4uZTExKTsKICAgIH0sIHUzID0gbjcoYjIpLCBjNCA9IG43KHcpLCAkMiA9IG43KFQpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvc3RhdGljLWh0bWwuanMKdmFyIGluaXRfc3RhdGljX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9zdGF0aWMtaHRtbC5qcyIoKSB7CiAgICBpbml0X3N0YXRpYygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcwp2YXIgdDMsIGU0LCBpNjsKdmFyIGluaXRfZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcyIoKSB7CiAgICB0MyA9IHsgQVRUUklCVVRFOiAxLCBDSElMRDogMiwgUFJPUEVSVFk6IDMsIEJPT0xFQU5fQVRUUklCVVRFOiA0LCBFVkVOVDogNSwgRUxFTUVOVDogNiB9LCBlNCA9ICh0OSkgPT4gKC4uLmUxMSkgPT4gKHsgXyRsaXREaXJlY3RpdmUkOiB0OSwgdmFsdWVzOiBlMTEgfSk7CiAgICBpNiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDkpIHsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgXyRBVCh0OSwgZTExLCBpMTEpIHsKICAgICAgICB0aGlzLl8kQ3QgPSB0OSwgdGhpcy5fJEFNID0gZTExLCB0aGlzLl8kQ2kgPSBpMTE7CiAgICAgIH0KICAgICAgXyRBUyh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHQ5LCBlMTEpOwogICAgICB9CiAgICAgIHVwZGF0ZSh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKC4uLmUxMSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgZTUsIG84Owp2YXIgaW5pdF91bnNhZmVfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBlNSA9IGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihpMTEpIHsKICAgICAgICBpZiAoc3VwZXIoaTExKSwgdGhpcy5pdCA9IEEsIGkxMS50eXBlICE9PSB0My5DSElMRCkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgYmluZGluZ3MiKTsKICAgICAgfQogICAgICByZW5kZXIocjExKSB7CiAgICAgICAgaWYgKHIxMSA9PT0gQSB8fCBudWxsID09IHIxMSkgcmV0dXJuIHRoaXMuX3QgPSB2b2lkIDAsIHRoaXMuaXQgPSByMTE7CiAgICAgICAgaWYgKHIxMSA9PT0gRSkgcmV0dXJuIHIxMTsKICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIHIxMSkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbGxlZCB3aXRoIGEgbm9uLXN0cmluZyB2YWx1ZSIpOwogICAgICAgIGlmIChyMTEgPT09IHRoaXMuaXQpIHJldHVybiB0aGlzLl90OwogICAgICAgIHRoaXMuaXQgPSByMTE7CiAgICAgICAgY29uc3QgczkgPSBbcjExXTsKICAgICAgICByZXR1cm4gczkucmF3ID0gczksIHRoaXMuX3QgPSB7IF8kbGl0VHlwZSQ6IHRoaXMuY29uc3RydWN0b3IucmVzdWx0VHlwZSwgc3RyaW5nczogczksIHZhbHVlczogW10gfTsKICAgICAgfQogICAgfTsKICAgIGU1LmRpcmVjdGl2ZU5hbWUgPSAidW5zYWZlSFRNTCIsIGU1LnJlc3VsdFR5cGUgPSAxOwogICAgbzggPSBlNChlNSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzCnZhciBpbml0X3Vuc2FmZV9odG1sMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMiKCkgewogICAgaW5pdF91bnNhZmVfaHRtbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcwp2YXIgdDQ7CnZhciBpbml0X2N1c3RvbV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcyIoKSB7CiAgICB0NCA9ICh0OSkgPT4gKGUxMSwgbzEzKSA9PiB7CiAgICAgIHZvaWQgMCAhPT0gbzEzID8gbzEzLmFkZEluaXRpYWxpemVyKCgpID0+IHsKICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUodDksIGUxMSk7CiAgICAgIH0pIDogY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQ5LCBlMTEpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMKdmFyIGluaXRfY3VzdG9tX2VsZW1lbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2N1c3RvbV9lbGVtZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3N0YXRlLmpzCmZ1bmN0aW9uIHI1KHIxMSkgewogIHJldHVybiBuNSh7IC4uLnIxMSwgc3RhdGU6IHRydWUsIGF0dHJpYnV0ZTogZmFsc2UgfSk7Cn0KdmFyIGluaXRfc3RhdGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanMKZnVuY3Rpb24gdDUodDkpIHsKICByZXR1cm4gKG4xMywgbzEzKSA9PiB7CiAgICBjb25zdCBjMTEgPSAiZnVuY3Rpb24iID09IHR5cGVvZiBuMTMgPyBuMTMgOiBuMTNbbzEzXTsKICAgIE9iamVjdC5hc3NpZ24oYzExLCB0OSk7CiAgfTsKfQp2YXIgaW5pdF9ldmVudF9vcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvYmFzZS5qcwp2YXIgZTY7CnZhciBpbml0X2Jhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanMiKCkgewogICAgZTYgPSAoZTExLCB0OSwgYzExKSA9PiAoYzExLmNvbmZpZ3VyYWJsZSA9IHRydWUsIGMxMS5lbnVtZXJhYmxlID0gdHJ1ZSwgUmVmbGVjdC5kZWNvcmF0ZSAmJiAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgdDksIGMxMSksIGMxMSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzCmZ1bmN0aW9uIGU3KGUxMSwgcjExKSB7CiAgcmV0dXJuIChuMTMsIHM5LCBpMTEpID0+IHsKICAgIGNvbnN0IG8xMyA9ICh0OSkgPT4gdDkucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihlMTEpID8/IG51bGw7CiAgICBpZiAocjExKSB7CiAgICAgIGNvbnN0IHsgZ2V0OiBlMTIsIHNldDogcjEyIH0gPSAib2JqZWN0IiA9PSB0eXBlb2YgczkgPyBuMTMgOiBpMTEgPz8gLyogQF9fUFVSRV9fICovICgoKSA9PiB7CiAgICAgICAgY29uc3QgdDkgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICAgICAgcmV0dXJuIHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbdDldOwogICAgICAgIH0sIHNldChlMTMpIHsKICAgICAgICAgIHRoaXNbdDldID0gZTEzOwogICAgICAgIH0gfTsKICAgICAgfSkoKTsKICAgICAgcmV0dXJuIGU2KG4xMywgczksIHsgZ2V0KCkgewogICAgICAgIGxldCB0OSA9IGUxMi5jYWxsKHRoaXMpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQ5ICYmICh0OSA9IG8xMyh0aGlzKSwgKG51bGwgIT09IHQ5IHx8IHRoaXMuaGFzVXBkYXRlZCkgJiYgcjEyLmNhbGwodGhpcywgdDkpKSwgdDk7CiAgICAgIH0gfSk7CiAgICB9CiAgICByZXR1cm4gZTYobjEzLCBzOSwgeyBnZXQoKSB7CiAgICAgIHJldHVybiBvMTModGhpcyk7CiAgICB9IH0pOwogIH07Cn0KdmFyIGluaXRfcXVlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanMKZnVuY3Rpb24gcjYocjExKSB7CiAgcmV0dXJuIChuMTMsIG8xMykgPT4gZTYobjEzLCBvMTMsIHsgZ2V0KCkgewogICAgcmV0dXJuICh0aGlzLnJlbmRlclJvb3QgPz8gKGU4ID8/PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpKS5xdWVyeVNlbGVjdG9yQWxsKHIxMSk7CiAgfSB9KTsKfQp2YXIgZTg7CnZhciBpbml0X3F1ZXJ5X2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qcwpmdW5jdGlvbiByNyhyMTEpIHsKICByZXR1cm4gKG4xMywgZTExKSA9PiBlNihuMTMsIGUxMSwgeyBhc3luYyBnZXQoKSB7CiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSwgdGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKHIxMSkgPz8gbnVsbDsKICB9IH0pOwp9CnZhciBpbml0X3F1ZXJ5X2FzeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanMKZnVuY3Rpb24gbzkobzEzKSB7CiAgcmV0dXJuIChlMTEsIG4xMykgPT4gewogICAgY29uc3QgeyBzbG90OiByMTEsIHNlbGVjdG9yOiBzOSB9ID0gbzEzID8/IHt9LCBjMTEgPSAic2xvdCIgKyAocjExID8gYFtuYW1lPSR7cjExfV1gIDogIjpub3QoW25hbWVdKSIpOwogICAgcmV0dXJuIGU2KGUxMSwgbjEzLCB7IGdldCgpIHsKICAgICAgY29uc3QgdDkgPSB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoYzExKSwgZTEyID0gdDk/LmFzc2lnbmVkRWxlbWVudHMobzEzKSA/PyBbXTsKICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gczkgPyBlMTIgOiBlMTIuZmlsdGVyKCh0MTApID0+IHQxMC5tYXRjaGVzKHM5KSk7CiAgICB9IH0pOwogIH07Cn0KdmFyIGluaXRfcXVlcnlfYXNzaWduZWRfZWxlbWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qcwpmdW5jdGlvbiBuOChuMTMpIHsKICByZXR1cm4gKG8xMywgcjExKSA9PiB7CiAgICBjb25zdCB7IHNsb3Q6IGUxMSB9ID0gbjEzID8/IHt9LCBzOSA9ICJzbG90IiArIChlMTEgPyBgW25hbWU9JHtlMTF9XWAgOiAiOm5vdChbbmFtZV0pIik7CiAgICByZXR1cm4gZTYobzEzLCByMTEsIHsgZ2V0KCkgewogICAgICBjb25zdCB0OSA9IHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihzOSk7CiAgICAgIHJldHVybiB0OT8uYXNzaWduZWROb2RlcyhuMTMpID8/IFtdOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5X2Fzc2lnbmVkX25vZGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMuanMKdmFyIGluaXRfZGVjb3JhdG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMuanMiKCkgewogICAgaW5pdF9jdXN0b21fZWxlbWVudCgpOwogICAgaW5pdF9wcm9wZXJ0eSgpOwogICAgaW5pdF9zdGF0ZTIoKTsKICAgIGluaXRfZXZlbnRfb3B0aW9ucygpOwogICAgaW5pdF9xdWVyeSgpOwogICAgaW5pdF9xdWVyeV9hbGwoKTsKICAgIGluaXRfcXVlcnlfYXN5bmMoKTsKICAgIGluaXRfcXVlcnlfYXNzaWduZWRfZWxlbWVudHMoKTsKICAgIGluaXRfcXVlcnlfYXNzaWduZWRfbm9kZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5kZWVzLWVsZW1lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTIsIF9fcnVuSW5pdGlhbGl6ZXJzMywgRGVlc0VsZW1lbnQ7CnZhciBpbml0X2NsYXNzZXNfZGVlc19lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmRlZXMtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMzKCk7CiAgICBfX2VzRGVjb3JhdGUyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0VsZW1lbnQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBsaXQuTGl0RWxlbWVudDsKICAgICAgbGV0IF9nb0JyaWdodF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2dvQnJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2dvQnJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZG9tdG9vbHNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kb210b29sc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kb210b29sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICByZXR1cm4gY2xhc3MgRGVlc0VsZW1lbnQgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2dvQnJpZ2h0X2RlY29yYXRvcnMgPSBbbGl0LnByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfZG9tdG9vbHNfZGVjb3JhdG9ycyA9IFtsaXQucHJvcGVydHkoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUyKHRoaXMsIG51bGwsIF9nb0JyaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnb0JyaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZ29CcmlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ29CcmlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5nb0JyaWdodCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ29CcmlnaHRfaW5pdGlhbGl6ZXJzLCBfZ29CcmlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMih0aGlzLCBudWxsLCBfZG9tdG9vbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZG9tdG9vbHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvbXRvb2xzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRvbXRvb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZG9tdG9vbHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RvbXRvb2xzX2luaXRpYWxpemVycywgX2RvbXRvb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczModGhpcywgX2dvQnJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IGdvQnJpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBnb0JyaWdodCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIGRvbXRvb2xzCiAgICAgICAgZG9tdG9vbHNQcm9taXNlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9nb0JyaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczModGhpcywgX2RvbXRvb2xzX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICBnZXQgZG9tdG9vbHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZG9tdG9vbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRvbXRvb2xzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZG9tdG9vbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgcnhTdWJzY3JpcHRpb25zID0gKF9fcnVuSW5pdGlhbGl6ZXJzMyh0aGlzLCBfZG9tdG9vbHNfZXh0cmFJbml0aWFsaXplcnMpLCBbXSk7CiAgICAgICAgdGhlbWVTdWJzY3JpcHRpb247CiAgICAgICAgZWxlbWVudERvbVJlYWR5RGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgICAgIGVsZW1lbnREb21SZWFkeSA9IHRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnID0ge30pIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZSA9IGRpc3RfdHNfZXhwb3J0czI1LmVsZW1lbnRCYXNpYy5zZXR1cCh0aGlzLCBvcHRpb25zQXJnKTsKICAgICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZG9tdG9vbHMgPSBkb210b29sc0FyZzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgdGhpcy50aGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKChnb0JyaWdodEFyZykgPT4gewogICAgICAgICAgICB0aGlzLmdvQnJpZ2h0ID0gZ29CcmlnaHRBcmc7CiAgICAgICAgICAgIGlmICh0aGlzLnRoZW1lQ2hhbmdlZCkgewogICAgICAgICAgICAgIHRoaXMudGhlbWVDaGFuZ2VkKGdvQnJpZ2h0QXJnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pOwogICAgICAgICAgZm9yIChjb25zdCBzdGFydHVwRnVuY3Rpb24gb2YgdGhpcy5zdGFydHVwRnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGF3YWl0IHN0YXJ0dXBGdW5jdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGVlc0VsZW1lbnRDb25uZWN0ZWQiKSk7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXJ0dXBGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihzdGFydHVwRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuc3RhcnR1cEZ1bmN0aW9ucy5wdXNoKHN0YXJ0dXBGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGdhcmJhZ2VGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlckdhcmJhZ2VGdW5jdGlvbihnYXJiYWdlRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGdhcmJhZ2VGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGdhcmJhZ2VGdW5jdGlvbiBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpIHsKICAgICAgICAgICAgYXdhaXQgZ2FyYmFnZUZ1bmN0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkZWVzRWxlbWVudERpc2Nvbm5lY3RlZCIpKTsKICAgICAgICB9CiAgICAgIH07CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzCnZhciB0NiwgaTcsIG45LCBlOSwgbDQsIGQ0LCBjNSwgZjQsIHI4LCBzNSwgdjMsIHU0LCBtMywgcDUsIE0yLCBoNCwgajI7CnZhciBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgICh7IEk6IHQ2IH0gPSBqKSwgaTcgPSAobzEzKSA9PiBvMTMsIG45ID0gKG8xMykgPT4gbnVsbCA9PT0gbzEzIHx8ICJvYmplY3QiICE9IHR5cGVvZiBvMTMgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgbzEzLCBlOSA9IHsgSFRNTDogMSwgU1ZHOiAyLCBNQVRITUw6IDMgfSwgbDQgPSAobzEzLCB0OSkgPT4gdm9pZCAwID09PSB0OSA/IHZvaWQgMCAhPT0gbzEzPy5fJGxpdFR5cGUkIDogbzEzPy5fJGxpdFR5cGUkID09PSB0OSwgZDQgPSAobzEzKSA9PiBudWxsICE9IG8xMz8uXyRsaXRUeXBlJD8uaCwgYzUgPSAobzEzKSA9PiB2b2lkIDAgIT09IG8xMz8uXyRsaXREaXJlY3RpdmUkLCBmNCA9IChvMTMpID0+IG8xMz8uXyRsaXREaXJlY3RpdmUkLCByOCA9IChvMTMpID0+IHZvaWQgMCA9PT0gbzEzLnN0cmluZ3MsIHM1ID0gKCkgPT4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksIHYzID0gKG8xMywgbjEzLCBlMTEpID0+IHsKICAgICAgY29uc3QgbDYgPSBvMTMuXyRBQS5wYXJlbnROb2RlLCBkNiA9IHZvaWQgMCA9PT0gbjEzID8gbzEzLl8kQUIgOiBuMTMuXyRBQTsKICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSB7CiAgICAgICAgY29uc3QgaTExID0gbDYuaW5zZXJ0QmVmb3JlKHM1KCksIGQ2KSwgbjE0ID0gbDYuaW5zZXJ0QmVmb3JlKHM1KCksIGQ2KTsKICAgICAgICBlMTEgPSBuZXcgdDYoaTExLCBuMTQsIG8xMywgbzEzLm9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHQ5ID0gZTExLl8kQUIubmV4dFNpYmxpbmcsIG4xNCA9IGUxMS5fJEFNLCBjMTEgPSBuMTQgIT09IG8xMzsKICAgICAgICBpZiAoYzExKSB7CiAgICAgICAgICBsZXQgdDEwOwogICAgICAgICAgZTExLl8kQVE/LihvMTMpLCBlMTEuXyRBTSA9IG8xMywgdm9pZCAwICE9PSBlMTEuXyRBUCAmJiAodDEwID0gbzEzLl8kQVUpICE9PSBuMTQuXyRBVSAmJiBlMTEuXyRBUCh0MTApOwogICAgICAgIH0KICAgICAgICBpZiAodDkgIT09IGQ2IHx8IGMxMSkgewogICAgICAgICAgbGV0IG8xNCA9IGUxMS5fJEFBOwogICAgICAgICAgZm9yICg7IG8xNCAhPT0gdDk7ICkgewogICAgICAgICAgICBjb25zdCB0MTAgPSBpNyhvMTQpLm5leHRTaWJsaW5nOwogICAgICAgICAgICBpNyhsNikuaW5zZXJ0QmVmb3JlKG8xNCwgZDYpLCBvMTQgPSB0MTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBlMTE7CiAgICB9LCB1NCA9IChvMTMsIHQ5LCBpMTEgPSBvMTMpID0+IChvMTMuXyRBSSh0OSwgaTExKSwgbzEzKSwgbTMgPSB7fSwgcDUgPSAobzEzLCB0OSA9IG0zKSA9PiBvMTMuXyRBSCA9IHQ5LCBNMiA9IChvMTMpID0+IG8xMy5fJEFILCBoNCA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKSwgbzEzLl8kQUEucmVtb3ZlKCk7CiAgICB9LCBqMiA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzCmZ1bmN0aW9uIGg1KGkxMSkgewogIHZvaWQgMCAhPT0gdGhpcy5fJEFOID8gKG8xMCh0aGlzKSwgdGhpcy5fJEFNID0gaTExLCByOSh0aGlzKSkgOiB0aGlzLl8kQU0gPSBpMTE7Cn0KZnVuY3Rpb24gbjEwKGkxMSwgdDkgPSBmYWxzZSwgZTExID0gMCkgewogIGNvbnN0IHIxMSA9IHRoaXMuXyRBSCwgaDkgPSB0aGlzLl8kQU47CiAgaWYgKHZvaWQgMCAhPT0gaDkgJiYgMCAhPT0gaDkuc2l6ZSkgaWYgKHQ5KSBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSBmb3IgKGxldCBpMTIgPSBlMTE7IGkxMiA8IHIxMS5sZW5ndGg7IGkxMisrKSBzNihyMTFbaTEyXSwgZmFsc2UpLCBvMTAocjExW2kxMl0pOwogIGVsc2UgbnVsbCAhPSByMTEgJiYgKHM2KHIxMSwgZmFsc2UpLCBvMTAocjExKSk7CiAgZWxzZSBzNih0aGlzLCBpMTEpOwp9CnZhciBzNiwgbzEwLCByOSwgYzYsIGY1Owp2YXIgaW5pdF9hc3luY19kaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgczYgPSAoaTExLCB0OSkgPT4gewogICAgICBjb25zdCBlMTEgPSBpMTEuXyRBTjsKICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgaTEyIG9mIGUxMSkgaTEyLl8kQU8/Lih0OSwgZmFsc2UpLCBzNihpMTIsIHQ5KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LCBvMTAgPSAoaTExKSA9PiB7CiAgICAgIGxldCB0OSwgZTExOwogICAgICBkbyB7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gKHQ5ID0gaTExLl8kQU0pKSBicmVhazsKICAgICAgICBlMTEgPSB0OS5fJEFOLCBlMTEuZGVsZXRlKGkxMSksIGkxMSA9IHQ5OwogICAgICB9IHdoaWxlICgwID09PSBlMTE/LnNpemUpOwogICAgfSwgcjkgPSAoaTExKSA9PiB7CiAgICAgIGZvciAobGV0IHQ5OyB0OSA9IGkxMS5fJEFNOyBpMTEgPSB0OSkgewogICAgICAgIGxldCBlMTEgPSB0OS5fJEFOOwogICAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgdDkuXyRBTiA9IGUxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgZWxzZSBpZiAoZTExLmhhcyhpMTEpKSBicmVhazsKICAgICAgICBlMTEuYWRkKGkxMSksIGM2KHQ5KTsKICAgICAgfQogICAgfTsKICAgIGM2ID0gKGkxMSkgPT4gewogICAgICBpMTEudHlwZSA9PSB0My5DSElMRCAmJiAoaTExLl8kQVAgPz89IG4xMCwgaTExLl8kQVEgPz89IGg1KTsKICAgIH07CiAgICBmNSA9IGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLl8kQU4gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgXyRBVChpMTEsIHQ5LCBlMTEpIHsKICAgICAgICBzdXBlci5fJEFUKGkxMSwgdDksIGUxMSksIHI5KHRoaXMpLCB0aGlzLmlzQ29ubmVjdGVkID0gaTExLl8kQVU7CiAgICAgIH0KICAgICAgXyRBTyhpMTEsIHQ5ID0gdHJ1ZSkgewogICAgICAgIGkxMSAhPT0gdGhpcy5pc0Nvbm5lY3RlZCAmJiAodGhpcy5pc0Nvbm5lY3RlZCA9IGkxMSwgaTExID8gdGhpcy5yZWNvbm5lY3RlZD8uKCkgOiB0aGlzLmRpc2Nvbm5lY3RlZD8uKCkpLCB0OSAmJiAoczYodGhpcywgaTExKSwgbzEwKHRoaXMpKTsKICAgICAgfQogICAgICBzZXRWYWx1ZSh0OSkgewogICAgICAgIGlmIChyOCh0aGlzLl8kQ3QpKSB0aGlzLl8kQ3QuXyRBSSh0OSwgdGhpcyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBjb25zdCBpMTEgPSBbLi4udGhpcy5fJEN0Ll8kQUhdOwogICAgICAgICAgaTExW3RoaXMuXyRDaV0gPSB0OSwgdGhpcy5fJEN0Ll8kQUkoaTExLCB0aGlzLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzCnZhciBpbml0X2FzeW5jX2RpcmVjdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9hc3luYy1kaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnJlc29sdmVkaXJlY3RpdmUuanMKdmFyIFJlc29sdmVEaXJlY3RpdmUsIHJlc29sdmUsIHJlc29sdmVFeGVjOwp2YXIgaW5pdF9jbGFzc2VzX3Jlc29sdmVkaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5yZXNvbHZlZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZTIoKTsKICAgIFJlc29sdmVEaXJlY3RpdmUgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgcHJvbWlzZTsKICAgICAgaGFzUHJvbWlzZVNldHRsZWQgPSBmYWxzZTsKICAgICAgcmVuZGVyKHByb21pc2UpIHsKICAgICAgICBpZiAodGhpcy5wcm9taXNlICE9PSBwcm9taXNlKSB7CiAgICAgICAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBoYW5kbGVQcm9taXNlKHByb21pc2UpIHsKICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gZmFsc2U7CiAgICAgICAgcHJvbWlzZS50aGVuKCh2YWx1ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnByb21pc2UgPT09IHByb21pc2UgJiYgIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZTIpOwogICAgICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnByb21pc2UgPT09IHByb21pc2UgJiYgIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShlcnJvcik7CiAgICAgICAgICAgIHRoaXMuaGFzUHJvbWlzZVNldHRsZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICBpZiAoIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZSh0aGlzLnByb21pc2UpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIHJlc29sdmUgPSBlNChSZXNvbHZlRGlyZWN0aXZlKTsKICAgIHJlc29sdmVFeGVjID0gKGZ1bmNBcmcpID0+IHsKICAgICAgcmV0dXJuIHJlc29sdmUoZnVuY0FyZygpKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmVkaXJlY3RpdmUuanMKdmFyIFN1YnNjcmliZURpcmVjdGl2ZSwgc3Vic2NyaWJlOwp2YXIgaW5pdF9jbGFzc2VzX3N1YnNjcmliZWRpcmVjdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUyKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBTdWJzY3JpYmVEaXJlY3RpdmUgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgb2JzZXJ2YWJsZTsKICAgICAgc3ViID0gbnVsbDsKICAgICAgcmVuZGVyKG9ic2VydmFibGUyKSB7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2YWJsZSAhPT0gb2JzZXJ2YWJsZTIpIHsKICAgICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTI7CiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICAgICAgICB0aGlzLnN1YnNjcmliZShvYnNlcnZhYmxlMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBFOwogICAgICB9CiAgICAgIHN1YnNjcmliZShvYnNlcnZhYmxlMikgewogICAgICAgIHRoaXMuc3ViID0gb2JzZXJ2YWJsZTIuc3Vic2NyaWJlKCh2NSkgPT4gewogICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2NSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3Vic2NyaWJlKHRoaXMub2JzZXJ2YWJsZSk7CiAgICAgIH0KICAgIH07CiAgICBzdWJzY3JpYmUgPSBlNChTdWJzY3JpYmVEaXJlY3RpdmUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLmpzCnZhciBTdWJzY3JpYmVXaXRoVGVtcGxhdGVEaXJlY3RpdmUsIHN1YnNjcmliZVdpdGhUZW1wbGF0ZTsKdmFyIGluaXRfY2xhc3Nlc19zdWJzY3JpYmV3aXRodGVtcGxhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmV3aXRodGVtcGxhdGUuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlMigpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIG9ic2VydmFibGU7CiAgICAgIHRlbXBsYXRlRm47CiAgICAgIHN1YiA9IG51bGw7CiAgICAgIHJlbmRlcihvYnNlcnZhYmxlMiwgdGVtcGxhdGVGbikgewogICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm9ic2VydmFibGUgIT09IG9ic2VydmFibGUyIHx8IHRoaXMudGVtcGxhdGVGbiAhPT0gdGVtcGxhdGVGbjsKICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBvYnNlcnZhYmxlMjsKICAgICAgICAgIHRoaXMudGVtcGxhdGVGbiA9IHRlbXBsYXRlRm47CiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICAgICAgICB0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBFOwogICAgICB9CiAgICAgIHN0YXJ0U3Vic2NyaXB0aW9uKCkgewogICAgICAgIHRoaXMuc3ViID0gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgodjUpID0+IHsKICAgICAgICAgIGNvbnN0IG91dCA9IHRoaXMudGVtcGxhdGVGbih2NSk7CiAgICAgICAgICB0aGlzLnNldFZhbHVlKG91dCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3RhcnRTdWJzY3JpcHRpb24oKTsKICAgICAgfQogICAgfTsKICAgIHN1YnNjcmliZVdpdGhUZW1wbGF0ZSA9IGU0KFN1YnNjcmliZVdpdGhUZW1wbGF0ZURpcmVjdGl2ZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanMKdmFyIHQ3LCBzNywgaTg7CnZhciBpbml0X3ByaXZhdGVfYXN5bmNfaGVscGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3ByaXZhdGUtYXN5bmMtaGVscGVycy5qcyIoKSB7CiAgICB0NyA9IGFzeW5jICh0OSwgczkpID0+IHsKICAgICAgZm9yIGF3YWl0IChjb25zdCBpMTEgb2YgdDkpIGlmIChmYWxzZSA9PT0gYXdhaXQgczkoaTExKSkgcmV0dXJuOwogICAgfTsKICAgIHM3ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3QoKSB7CiAgICAgICAgdGhpcy5HID0gdm9pZCAwOwogICAgICB9CiAgICAgIHJlY29ubmVjdCh0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRlcmVmKCkgewogICAgICAgIHJldHVybiB0aGlzLkc7CiAgICAgIH0KICAgIH07CiAgICBpOCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5ZID0gdm9pZCAwLCB0aGlzLlogPSB2b2lkIDA7CiAgICAgIH0KICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLlk7CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgdGhpcy5ZID8/PSBuZXcgUHJvbWlzZSgodDkpID0+IHRoaXMuWiA9IHQ5KTsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgdGhpcy5aPy4oKSwgdGhpcy5ZID0gdGhpcy5aID0gdm9pZCAwOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanMKdmFyIG4xMSwgaDYsIGM3LCBtNDsKdmFyIGluaXRfdW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnRpbC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZSgpOwogICAgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBuMTEgPSAodDkpID0+ICFuOSh0OSkgJiYgImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDkudGhlbiwgaDYgPSAxMDczNzQxODIzOwogICAgYzcgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEN3dCA9IGg2LCB0aGlzLl8kQ2J0ID0gW10sIHRoaXMuXyRDSyA9IG5ldyBzNyh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKC4uLnM5KSB7CiAgICAgICAgcmV0dXJuIHM5LmZpbmQoKHQ5KSA9PiAhbjExKHQ5KSkgPz8gRTsKICAgICAgfQogICAgICB1cGRhdGUoczksIGkxMSkgewogICAgICAgIGNvbnN0IGUxMSA9IHRoaXMuXyRDYnQ7CiAgICAgICAgbGV0IHIxMSA9IGUxMS5sZW5ndGg7CiAgICAgICAgdGhpcy5fJENidCA9IGkxMTsKICAgICAgICBjb25zdCBvMTMgPSB0aGlzLl8kQ0ssIGMxMSA9IHRoaXMuXyRDWDsKICAgICAgICB0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuZGlzY29ubmVjdGVkKCk7CiAgICAgICAgZm9yIChsZXQgdDkgPSAwOyB0OSA8IGkxMS5sZW5ndGggJiYgISh0OSA+IHRoaXMuXyRDd3QpOyB0OSsrKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMTFbdDldOwogICAgICAgICAgaWYgKCFuMTEoczEwKSkgcmV0dXJuIHRoaXMuXyRDd3QgPSB0OSwgczEwOwogICAgICAgICAgdDkgPCByMTEgJiYgczEwID09PSBlMTFbdDldIHx8ICh0aGlzLl8kQ3d0ID0gaDYsIHIxMSA9IDAsIFByb21pc2UucmVzb2x2ZShzMTApLnRoZW4oYXN5bmMgKHQxMCkgPT4gewogICAgICAgICAgICBmb3IgKDsgYzExLmdldCgpOyApIGF3YWl0IGMxMS5nZXQoKTsKICAgICAgICAgICAgY29uc3QgaTEyID0gbzEzLmRlcmVmKCk7CiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGkxMikgewogICAgICAgICAgICAgIGNvbnN0IGUxMiA9IGkxMi5fJENidC5pbmRleE9mKHMxMCk7CiAgICAgICAgICAgICAgZTEyID4gLTEgJiYgZTEyIDwgaTEyLl8kQ3d0ICYmIChpMTIuXyRDd3QgPSBlMTIsIGkxMi5zZXRWYWx1ZSh0MTApKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgbTQgPSBlNChjNyk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzCnZhciBpbml0X3VudGlsMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMiKCkgewogICAgaW5pdF91bnRpbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS5qcwp2YXIgbzExLCBoNzsKdmFyIGluaXRfYXN5bmNfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICAgIGluaXRfcHJpdmF0ZV9hc3luY19oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgbzExID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuXyRDSyA9IG5ldyBzNyh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKGkxMSwgczkpIHsKICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICB1cGRhdGUoaTExLCBbczksIHIxMV0pIHsKICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCB8fCB0aGlzLmRpc2Nvbm5lY3RlZCgpLCBzOSA9PT0gdGhpcy5fJENKKSByZXR1cm4gRTsKICAgICAgICB0aGlzLl8kQ0ogPSBzOTsKICAgICAgICBsZXQgbjEzID0gMDsKICAgICAgICBjb25zdCB7IF8kQ0s6IG8xMywgXyRDWDogaDkgfSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIHQ3KHM5LCBhc3luYyAodDkpID0+IHsKICAgICAgICAgIGZvciAoOyBoOS5nZXQoKTsgKSBhd2FpdCBoOS5nZXQoKTsKICAgICAgICAgIGNvbnN0IGkxMiA9IG8xMy5kZXJlZigpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaTEyKSB7CiAgICAgICAgICAgIGlmIChpMTIuXyRDSiAhPT0gczkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgdm9pZCAwICE9PSByMTEgJiYgKHQ5ID0gcjExKHQ5LCBuMTMpKSwgaTEyLmNvbW1pdFZhbHVlKHQ5LCBuMTMpLCBuMTMrKzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pLCBFOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLnNldFZhbHVlKHQ5KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgaDcgPSBlNChvMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzCnZhciBjODsKdmFyIGluaXRfYXN5bmNfYXBwZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzIigpIHsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2FzeW5jX3JlcGxhY2UoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGM4ID0gZTQoY2xhc3MgZXh0ZW5kcyBvMTEgewogICAgICBjb25zdHJ1Y3RvcihyMTEpIHsKICAgICAgICBpZiAoc3VwZXIocjExKSwgcjExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigiYXN5bmNBcHBlbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjaGlsZCBleHByZXNzaW9ucyIpOwogICAgICB9CiAgICAgIHVwZGF0ZShyMTEsIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLl8kQ3R0ID0gcjExLCBzdXBlci51cGRhdGUocjExLCBlMTEpOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHIxMSwgZTExKSB7CiAgICAgICAgMCA9PT0gZTExICYmIGoyKHRoaXMuXyRDdHQpOwogICAgICAgIGNvbnN0IHM5ID0gdjModGhpcy5fJEN0dCk7CiAgICAgICAgdTQoczksIHIxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanMKdmFyIGluaXRfYXN5bmNfYXBwZW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzIigpIHsKICAgIGluaXRfYXN5bmNfYXBwZW5kKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9rZXllZC5qcwp2YXIgaTk7CnZhciBpbml0X2tleWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGk5ID0gZTQoY2xhc3MgZXh0ZW5kcyBpNiB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMua2V5ID0gQTsKICAgICAgfQogICAgICByZW5kZXIocjExLCB0OSkgewogICAgICAgIHJldHVybiB0aGlzLmtleSA9IHIxMSwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHIxMSwgW3Q5LCBlMTFdKSB7CiAgICAgICAgcmV0dXJuIHQ5ICE9PSB0aGlzLmtleSAmJiAocDUocjExKSwgdGhpcy5rZXkgPSB0OSksIGUxMTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2tleWVkLmpzCnZhciBpbml0X2tleWVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMva2V5ZWQuanMiKCkgewogICAgaW5pdF9rZXllZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzCnZhciB1NSwgYzk7CnZhciBpbml0X3JlcGVhdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9yZXBlYXQuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIHU1ID0gKGUxMSwgczksIHQ5KSA9PiB7CiAgICAgIGNvbnN0IHIxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGZvciAobGV0IGw2ID0gczk7IGw2IDw9IHQ5OyBsNisrKSByMTEuc2V0KGUxMVtsNl0sIGw2KTsKICAgICAgcmV0dXJuIHIxMTsKICAgIH0sIGM5ID0gZTQoY2xhc3MgZXh0ZW5kcyBpNiB7CiAgICAgIGNvbnN0cnVjdG9yKGUxMSkgewogICAgICAgIGlmIChzdXBlcihlMTEpLCBlMTEudHlwZSAhPT0gdDMuQ0hJTEQpIHRocm93IEVycm9yKCJyZXBlYXQoKSBjYW4gb25seSBiZSB1c2VkIGluIHRleHQgZXhwcmVzc2lvbnMiKTsKICAgICAgfQogICAgICBkdChlMTEsIHM5LCB0OSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdm9pZCAwID09PSB0OSA/IHQ5ID0gczkgOiB2b2lkIDAgIT09IHM5ICYmIChyMTEgPSBzOSk7CiAgICAgICAgY29uc3QgbDYgPSBbXSwgbzEzID0gW107CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzMTAgb2YgZTExKSBsNltpMTFdID0gcjExID8gcjExKHMxMCwgaTExKSA6IGkxMSwgbzEzW2kxMV0gPSB0OShzMTAsIGkxMSksIGkxMSsrOwogICAgICAgIHJldHVybiB7IHZhbHVlczogbzEzLCBrZXlzOiBsNiB9OwogICAgICB9CiAgICAgIHJlbmRlcihlMTEsIHM5LCB0OSkgewogICAgICAgIHJldHVybiB0aGlzLmR0KGUxMSwgczksIHQ5KS52YWx1ZXM7CiAgICAgIH0KICAgICAgdXBkYXRlKHM5LCBbdDksIHIxMSwgYzExXSkgewogICAgICAgIGNvbnN0IGQ2ID0gTTIoczkpLCB7IHZhbHVlczogcDcsIGtleXM6IGE1IH0gPSB0aGlzLmR0KHQ5LCByMTEsIGMxMSk7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGQ2KSkgcmV0dXJuIHRoaXMudXQgPSBhNSwgcDc7CiAgICAgICAgY29uc3QgaDkgPSB0aGlzLnV0ID8/PSBbXSwgdjUgPSBbXTsKICAgICAgICBsZXQgbTYsIHk1LCB4MyA9IDAsIGo0ID0gZDYubGVuZ3RoIC0gMSwgazQgPSAwLCB3MyA9IHA3Lmxlbmd0aCAtIDE7CiAgICAgICAgZm9yICg7IHgzIDw9IGo0ICYmIGs0IDw9IHczOyApIGlmIChudWxsID09PSBkNlt4M10pIHgzKys7CiAgICAgICAgZWxzZSBpZiAobnVsbCA9PT0gZDZbajRdKSBqNC0tOwogICAgICAgIGVsc2UgaWYgKGg5W3gzXSA9PT0gYTVbazRdKSB2NVtrNF0gPSB1NChkNlt4M10sIHA3W2s0XSksIHgzKyssIGs0Kys7CiAgICAgICAgZWxzZSBpZiAoaDlbajRdID09PSBhNVt3M10pIHY1W3czXSA9IHU0KGQ2W2o0XSwgcDdbdzNdKSwgajQtLSwgdzMtLTsKICAgICAgICBlbHNlIGlmIChoOVt4M10gPT09IGE1W3czXSkgdjVbdzNdID0gdTQoZDZbeDNdLCBwN1t3M10pLCB2MyhzOSwgdjVbdzMgKyAxXSwgZDZbeDNdKSwgeDMrKywgdzMtLTsKICAgICAgICBlbHNlIGlmIChoOVtqNF0gPT09IGE1W2s0XSkgdjVbazRdID0gdTQoZDZbajRdLCBwN1trNF0pLCB2MyhzOSwgZDZbeDNdLCBkNltqNF0pLCBqNC0tLCBrNCsrOwogICAgICAgIGVsc2UgaWYgKHZvaWQgMCA9PT0gbTYgJiYgKG02ID0gdTUoYTUsIGs0LCB3MyksIHk1ID0gdTUoaDksIHgzLCBqNCkpLCBtNi5oYXMoaDlbeDNdKSkgaWYgKG02LmhhcyhoOVtqNF0pKSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB5NS5nZXQoYTVbazRdKSwgdDEwID0gdm9pZCAwICE9PSBlMTEgPyBkNltlMTFdIDogbnVsbDsKICAgICAgICAgIGlmIChudWxsID09PSB0MTApIHsKICAgICAgICAgICAgY29uc3QgZTEyID0gdjMoczksIGQ2W3gzXSk7CiAgICAgICAgICAgIHU0KGUxMiwgcDdbazRdKSwgdjVbazRdID0gZTEyOwogICAgICAgICAgfSBlbHNlIHY1W2s0XSA9IHU0KHQxMCwgcDdbazRdKSwgdjMoczksIGQ2W3gzXSwgdDEwKSwgZDZbZTExXSA9IG51bGw7CiAgICAgICAgICBrNCsrOwogICAgICAgIH0gZWxzZSBoNChkNltqNF0pLCBqNC0tOwogICAgICAgIGVsc2UgaDQoZDZbeDNdKSwgeDMrKzsKICAgICAgICBmb3IgKDsgazQgPD0gdzM7ICkgewogICAgICAgICAgY29uc3QgZTExID0gdjMoczksIHY1W3czICsgMV0pOwogICAgICAgICAgdTQoZTExLCBwN1trNF0pLCB2NVtrNCsrXSA9IGUxMTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IHgzIDw9IGo0OyApIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IGQ2W3gzKytdOwogICAgICAgICAgbnVsbCAhPT0gZTExICYmIGg0KGUxMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnV0ID0gYTUsIHA1KHM5LCB2NSksIEU7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9yZXBlYXQuanMKdmFyIGluaXRfcmVwZWF0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzIigpIHsKICAgIGluaXRfcmVwZWF0MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2luZGV4LmpzCnZhciBkaXJlY3RpdmVzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlyZWN0aXZlc19leHBvcnRzLCB7CiAgYXN5bmNBcHBlbmQ6ICgpID0+IGM4LAogIGtleWVkOiAoKSA9PiBpOSwKICByZXBlYXQ6ICgpID0+IGM5LAogIHJlc29sdmU6ICgpID0+IHJlc29sdmUsCiAgcmVzb2x2ZUV4ZWM6ICgpID0+IHJlc29sdmVFeGVjLAogIHN1YnNjcmliZTogKCkgPT4gc3Vic2NyaWJlLAogIHN1YnNjcmliZVdpdGhUZW1wbGF0ZTogKCkgPT4gc3Vic2NyaWJlV2l0aFRlbXBsYXRlLAogIHVudGlsOiAoKSA9PiBtNAp9KTsKdmFyIGluaXRfZGlyZWN0aXZlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcmVzb2x2ZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZXdpdGh0ZW1wbGF0ZSgpOwogICAgaW5pdF91bnRpbDIoKTsKICAgIGluaXRfYXN5bmNfYXBwZW5kMigpOwogICAgaW5pdF9rZXllZDIoKTsKICAgIGluaXRfcmVwZWF0MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjYgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjYsIHsKICBEZWVzRWxlbWVudDogKCkgPT4gRGVlc0VsZW1lbnQsCiAgY3NzOiAoKSA9PiBpLAogIGNzc01hbmFnZXI6ICgpID0+IGNzc01hbmFnZXIsCiAgY3VzdG9tRWxlbWVudDogKCkgPT4gdDQsCiAgZGlyZWN0aXZlczogKCkgPT4gZGlyZWN0aXZlc19leHBvcnRzLAogIGRvbXRvb2xzOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyNSwKICBodG1sOiAoKSA9PiBiMiwKICBwcm9wZXJ0eTogKCkgPT4gbjUsCiAgcXVlcnk6ICgpID0+IGU3LAogIHF1ZXJ5QWxsOiAoKSA9PiByNiwKICBxdWVyeUFzeW5jOiAoKSA9PiByNywKICByZW5kZXI6ICgpID0+IEQsCiAgc3RhdGU6ICgpID0+IHI1LAogIHN0YXRpYzogKCkgPT4gdTMsCiAgdW5zYWZlQ1NTOiAoKSA9PiByLAogIHVuc2FmZUhUTUw6ICgpID0+IG84LAogIHVuc2FmZVN0YXRpYzogKCkgPT4gczQKfSk7CnZhciBjc3NNYW5hZ2VyOwp2YXIgaW5pdF9kaXN0X3RzMjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyKCk7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9zdGF0aWNfaHRtbCgpOwogICAgaW5pdF91bnNhZmVfaHRtbDIoKTsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQyKCk7CiAgICBpbml0X2RlY29yYXRvcnMoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBpbml0X2NsYXNzZXNfZGVlc19lbGVtZW50KCk7CiAgICBpbml0X2RpcmVjdGl2ZXMoKTsKICAgIGNzc01hbmFnZXIgPSBDc3NNYW5hZ2VyLmdldFNpbmdsZXRvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUuanMKdmFyIHRoZW1lRGVmYXVsdHMsIHRoZW1lRGVmYXVsdFN0eWxlczsKdmFyIGluaXRfdGhlbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB0aGVtZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgdGhlbWVEZWZhdWx0cyA9IHsKICAgICAgY29sb3JzOiB7CiAgICAgICAgbGlnaHQ6IHsKICAgICAgICAgIGJnUHJpbWFyeTogIiNmZmZmZmYiLAogICAgICAgICAgYmdTZWNvbmRhcnk6ICIjZmFmYWZhIiwKICAgICAgICAgIGJnVGVydGlhcnk6ICIjZjRmNGY1IiwKICAgICAgICAgIHRleHRQcmltYXJ5OiAiIzA5MDkwYiIsCiAgICAgICAgICB0ZXh0U2Vjb25kYXJ5OiAiIzM3NDE1MSIsCiAgICAgICAgICB0ZXh0TXV0ZWQ6ICIjNzE3MTdhIiwKICAgICAgICAgIGJvcmRlckRlZmF1bHQ6ICIjZTVlN2ViIiwKICAgICAgICAgIGJvcmRlclN1YnRsZTogIiNmNGY0ZjUiLAogICAgICAgICAgYm9yZGVyU3Ryb25nOiAiI2QxZDVkYiIsCiAgICAgICAgICBhY2NlbnRQcmltYXJ5OiAiIzNiODJmNiIsCiAgICAgICAgICBhY2NlbnRTdWNjZXNzOiAiIzIyYzU1ZSIsCiAgICAgICAgICBhY2NlbnRXYXJuaW5nOiAiI2Y1OWUwYiIsCiAgICAgICAgICBhY2NlbnRFcnJvcjogIiNlZjQ0NDQiCiAgICAgICAgfSwKICAgICAgICBkYXJrOiB7CiAgICAgICAgICBiZ1ByaW1hcnk6ICIjMDkwOTBiIiwKICAgICAgICAgIGJnU2Vjb25kYXJ5OiAiIzBhMGEwYSIsCiAgICAgICAgICBiZ1RlcnRpYXJ5OiAiIzE4MTgxYiIsCiAgICAgICAgICB0ZXh0UHJpbWFyeTogIiNmYWZhZmEiLAogICAgICAgICAgdGV4dFNlY29uZGFyeTogIiNkNGQ0ZDgiLAogICAgICAgICAgdGV4dE11dGVkOiAiI2ExYTFhYSIsCiAgICAgICAgICBib3JkZXJEZWZhdWx0OiAiIzI3MjcyYSIsCiAgICAgICAgICBib3JkZXJTdWJ0bGU6ICIjMWExYTFhIiwKICAgICAgICAgIGJvcmRlclN0cm9uZzogIiMzZjNmNDYiLAogICAgICAgICAgYWNjZW50UHJpbWFyeTogIiMzYjgyZjYiLAogICAgICAgICAgYWNjZW50U3VjY2VzczogIiMyMmM1NWUiLAogICAgICAgICAgYWNjZW50V2FybmluZzogIiNmNTllMGIiLAogICAgICAgICAgYWNjZW50RXJyb3I6ICIjZWY0NDQ0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgc3BhY2luZzogewogICAgICAgIHhzOiAiNHB4IiwKICAgICAgICBzbTogIjhweCIsCiAgICAgICAgbWQ6ICIxMnB4IiwKICAgICAgICBsZzogIjE2cHgiLAogICAgICAgIHhsOiAiMjRweCIsCiAgICAgICAgIjJ4bCI6ICIzMnB4IiwKICAgICAgICAiM3hsIjogIjQ4cHgiCiAgICAgIH0sCiAgICAgIHJhZGl1czogewogICAgICAgIHhzOiAiMnB4IiwKICAgICAgICBzbTogIjRweCIsCiAgICAgICAgbWQ6ICI2cHgiLAogICAgICAgIGxnOiAiOHB4IiwKICAgICAgICB4bDogIjEycHgiLAogICAgICAgIGZ1bGw6ICI5OTlweCIKICAgICAgfSwKICAgICAgc2hhZG93czogewogICAgICAgIHhzOiAiMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSkiLAogICAgICAgIHNtOiAiMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSIsCiAgICAgICAgbWQ6ICIwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsCiAgICAgICAgbGc6ICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiCiAgICAgIH0sCiAgICAgIHRyYW5zaXRpb25zOiB7CiAgICAgICAgZmFzdDogIjAuMXMiLAogICAgICAgIGRlZmF1bHQ6ICIwLjE1cyIsCiAgICAgICAgc2xvdzogIjAuMnMiLAogICAgICAgIHNsb3dlcjogIjAuM3MiCiAgICAgIH0sCiAgICAgIGNvbnRyb2xIZWlnaHRzOiB7CiAgICAgICAgc206ICIzMnB4IiwKICAgICAgICBtZDogIjM2cHgiLAogICAgICAgIGxnOiAiNDBweCIsCiAgICAgICAgeGw6ICI0OHB4IgogICAgICB9CiAgICB9OwogICAgdGhlbWVEZWZhdWx0U3R5bGVzID0gaWAKICA6aG9zdCB7CiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTcGFjaW5nIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc3BhY2luZy14czogNHB4OwogICAgLS1kZWVzLXNwYWNpbmctc206IDhweDsKICAgIC0tZGVlcy1zcGFjaW5nLW1kOiAxMnB4OwogICAgLS1kZWVzLXNwYWNpbmctbGc6IDE2cHg7CiAgICAtLWRlZXMtc3BhY2luZy14bDogMjRweDsKICAgIC0tZGVlcy1zcGFjaW5nLTJ4bDogMzJweDsKICAgIC0tZGVlcy1zcGFjaW5nLTN4bDogNDhweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBCb3JkZXIgUmFkaXVzIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtcmFkaXVzLXhzOiAycHg7CiAgICAtLWRlZXMtcmFkaXVzLXNtOiA0cHg7CiAgICAtLWRlZXMtcmFkaXVzLW1kOiA2cHg7CiAgICAtLWRlZXMtcmFkaXVzLWxnOiA4cHg7CiAgICAtLWRlZXMtcmFkaXVzLXhsOiAxMnB4OwogICAgLS1kZWVzLXJhZGl1cy1mdWxsOiA5OTlweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTaGFkb3cgRWxldmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc2hhZG93LXhzOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgIC0tZGVlcy1zaGFkb3ctc206IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAtLWRlZXMtc2hhZG93LW1kOiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgIC0tZGVlcy1zaGFkb3ctbGc6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBUcmFuc2l0aW9uIER1cmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0OiAwLjFzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDogMC4xNXM7CiAgICAtLWRlZXMtdHJhbnNpdGlvbi1zbG93OiAwLjJzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyOiAwLjNzOwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIENvbnRyb2wgSGVpZ2h0IFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtc206IDMycHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbWQ6IDM2cHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbGc6IDQwcHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQteGw6IDQ4cHg7CiAgfQpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZvbnRhd2Vzb21lLXN2Zy1jb3JlQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzCmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIxMSwgYTUpIHsKICAobnVsbCA9PSBhNSB8fCBhNSA+IHIxMS5sZW5ndGgpICYmIChhNSA9IHIxMS5sZW5ndGgpOwogIGZvciAodmFyIGUxMSA9IDAsIG4xMyA9IEFycmF5KGE1KTsgZTExIDwgYTU7IGUxMSsrKSBuMTNbZTExXSA9IHIxMVtlMTFdOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIxMSkgewogIGlmIChBcnJheS5pc0FycmF5KHIxMSkpIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIxMSkgewogIGlmIChBcnJheS5pc0FycmF5KHIxMSkpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyMTEpOwp9CmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhNSwgbjEzKSB7CiAgaWYgKCEoYTUgaW5zdGFuY2VvZiBuMTMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKfQpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlMTEsIHIxMSkgewogIGZvciAodmFyIHQ5ID0gMDsgdDkgPCByMTEubGVuZ3RoOyB0OSsrKSB7CiAgICB2YXIgbzEzID0gcjExW3Q5XTsKICAgIG8xMy5lbnVtZXJhYmxlID0gbzEzLmVudW1lcmFibGUgfHwgZmFsc2UsIG8xMy5jb25maWd1cmFibGUgPSB0cnVlLCAidmFsdWUiIGluIG8xMyAmJiAobzEzLndyaXRhYmxlID0gdHJ1ZSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIF90b1Byb3BlcnR5S2V5KG8xMy5rZXkpLCBvMTMpOwogIH0KfQpmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZTExLCByMTEsIHQ5KSB7CiAgcmV0dXJuIHIxMSAmJiBfZGVmaW5lUHJvcGVydGllcyhlMTEucHJvdG90eXBlLCByMTEpLCB0OSAmJiBfZGVmaW5lUHJvcGVydGllcyhlMTEsIHQ5KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgInByb3RvdHlwZSIsIHsKICAgIHdyaXRhYmxlOiBmYWxzZQogIH0pLCBlMTE7Cn0KZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocjExLCBlMTEpIHsKICB2YXIgdDkgPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIHIxMVtTeW1ib2wuaXRlcmF0b3JdIHx8IHIxMVsiQEBpdGVyYXRvciJdOwogIGlmICghdDkpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHIxMSkgfHwgKHQ5ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSkpIHx8IGUxMSAmJiByMTEgJiYgIm51bWJlciIgPT0gdHlwZW9mIHIxMS5sZW5ndGgpIHsKICAgICAgdDkgJiYgKHIxMSA9IHQ5KTsKICAgICAgdmFyIG4xMyA9IDAsIEYyID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHJldHVybiB7CiAgICAgICAgczogRjIsCiAgICAgICAgbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbjEzID49IHIxMS5sZW5ndGggPyB7CiAgICAgICAgICAgIGRvbmU6IHRydWUKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZTogcjExW24xMysrXQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGU6IGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgdGhyb3cgcjEyOwogICAgICAgIH0sCiAgICAgICAgZjogRjIKICAgICAgfTsKICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKICB9CiAgdmFyIG8xMywgYTUgPSB0cnVlLCB1NyA9IGZhbHNlOwogIHJldHVybiB7CiAgICBzOiBmdW5jdGlvbigpIHsKICAgICAgdDkgPSB0OS5jYWxsKHIxMSk7CiAgICB9LAogICAgbjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciByMTIgPSB0OS5uZXh0KCk7CiAgICAgIHJldHVybiBhNSA9IHIxMi5kb25lLCByMTI7CiAgICB9LAogICAgZTogZnVuY3Rpb24ocjEyKSB7CiAgICAgIHU3ID0gdHJ1ZSwgbzEzID0gcjEyOwogICAgfSwKICAgIGY6IGZ1bmN0aW9uKCkgewogICAgICB0cnkgewogICAgICAgIGE1IHx8IG51bGwgPT0gdDkucmV0dXJuIHx8IHQ5LnJldHVybigpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGlmICh1NykgdGhyb3cgbzEzOwogICAgICB9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZTExLCByMTEsIHQ5KSB7CiAgcmV0dXJuIChyMTEgPSBfdG9Qcm9wZXJ0eUtleShyMTEpKSBpbiBlMTEgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCByMTEsIHsKICAgIHZhbHVlOiB0OSwKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICB3cml0YWJsZTogdHJ1ZQogIH0pIDogZTExW3IxMV0gPSB0OSwgZTExOwp9CmZ1bmN0aW9uIF9pbmhlcml0cyh0OSwgZTExKSB7CiAgaWYgKCJmdW5jdGlvbiIgIT0gdHlwZW9mIGUxMSAmJiBudWxsICE9PSBlMTEpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgdDkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlMTEgJiYgZTExLnByb3RvdHlwZSwgewogICAgY29uc3RydWN0b3I6IHsKICAgICAgdmFsdWU6IHQ5LAogICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICB9CiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0OSwgInByb3RvdHlwZSIsIHsKICAgIHdyaXRhYmxlOiBmYWxzZQogIH0pLCBlMTEgJiYgX3NldFByb3RvdHlwZU9mKHQ5LCBlMTEpOwp9CmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocjExKSB7CiAgaWYgKCJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHIxMVsiQEBpdGVyYXRvciJdKSByZXR1cm4gQXJyYXkuZnJvbShyMTEpOwp9CmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyMTEsIGw2KSB7CiAgdmFyIHQ5ID0gbnVsbCA9PSByMTEgPyBudWxsIDogInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCByMTFbIkBAaXRlcmF0b3IiXTsKICBpZiAobnVsbCAhPSB0OSkgewogICAgdmFyIGUxMSwgbjEzLCBpMTEsIHU3LCBhNSA9IFtdLCBmNyA9IHRydWUsIG8xMyA9IGZhbHNlOwogICAgdHJ5IHsKICAgICAgaWYgKGkxMSA9ICh0OSA9IHQ5LmNhbGwocjExKSkubmV4dCwgMCA9PT0gbDYpIHsKICAgICAgICBpZiAoT2JqZWN0KHQ5KSAhPT0gdDkpIHJldHVybjsKICAgICAgICBmNyA9IGZhbHNlOwogICAgICB9IGVsc2UgZm9yICg7ICEoZjcgPSAoZTExID0gaTExLmNhbGwodDkpKS5kb25lKSAmJiAoYTUucHVzaChlMTEudmFsdWUpLCBhNS5sZW5ndGggIT09IGw2KTsgZjcgPSB0cnVlKSA7CiAgICB9IGNhdGNoIChyMTIpIHsKICAgICAgbzEzID0gdHJ1ZSwgbjEzID0gcjEyOwogICAgfSBmaW5hbGx5IHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWY3ICYmIG51bGwgIT0gdDkucmV0dXJuICYmICh1NyA9IHQ5LnJldHVybigpLCBPYmplY3QodTcpICE9PSB1NykpIHJldHVybjsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAobzEzKSB0aHJvdyBuMTM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhNTsKICB9Cn0KZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpOwp9CmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKfQpmdW5jdGlvbiBvd25LZXlzMihlMTEsIHIxMSkgewogIHZhciB0OSA9IE9iamVjdC5rZXlzKGUxMSk7CiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgIHZhciBvMTMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUxMSk7CiAgICByMTEgJiYgKG8xMyA9IG8xMy5maWx0ZXIoZnVuY3Rpb24ocjEyKSB7CiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUxMSwgcjEyKS5lbnVtZXJhYmxlOwogICAgfSkpLCB0OS5wdXNoLmFwcGx5KHQ5LCBvMTMpOwogIH0KICByZXR1cm4gdDk7Cn0KZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZTExKSB7CiAgZm9yICh2YXIgcjExID0gMTsgcjExIDwgYXJndW1lbnRzLmxlbmd0aDsgcjExKyspIHsKICAgIHZhciB0OSA9IG51bGwgIT0gYXJndW1lbnRzW3IxMV0gPyBhcmd1bWVudHNbcjExXSA6IHt9OwogICAgcjExICUgMiA/IG93bktleXMyKE9iamVjdCh0OSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24ocjEyKSB7CiAgICAgIF9kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMiwgdDlbcjEyXSk7CiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZTExLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0OSkpIDogb3duS2V5czIoT2JqZWN0KHQ5KSkuZm9yRWFjaChmdW5jdGlvbihyMTIpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgcjEyLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQ5LCByMTIpKTsKICAgIH0pOwogIH0KICByZXR1cm4gZTExOwp9CmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0OSwgZTExKSB7CiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbih0MTAsIGUxMikgewogICAgcmV0dXJuIHQxMC5fX3Byb3RvX18gPSBlMTIsIHQxMDsKICB9LCBfc2V0UHJvdG90eXBlT2YodDksIGUxMSk7Cn0KZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkocjExLCBlMTEpIHsKICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIxMSkgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIxMSwgZTExKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExLCBlMTEpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsKfQpmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocjExKSB7CiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyMTEpIHx8IF9pdGVyYWJsZVRvQXJyYXkocjExKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsKfQpmdW5jdGlvbiBfdG9QcmltaXRpdmUodDksIHIxMSkgewogIGlmICgib2JqZWN0IiAhPSB0eXBlb2YgdDkgfHwgIXQ5KSByZXR1cm4gdDk7CiAgdmFyIGUxMSA9IHQ5W1N5bWJvbC50b1ByaW1pdGl2ZV07CiAgaWYgKHZvaWQgMCAhPT0gZTExKSB7CiAgICB2YXIgaTExID0gZTExLmNhbGwodDksIHIxMSB8fCAiZGVmYXVsdCIpOwogICAgaWYgKCJvYmplY3QiICE9IHR5cGVvZiBpMTEpIHJldHVybiBpMTE7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpOwogIH0KICByZXR1cm4gKCJzdHJpbmciID09PSByMTEgPyBTdHJpbmcgOiBOdW1iZXIpKHQ5KTsKfQpmdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0OSkgewogIHZhciBpMTEgPSBfdG9QcmltaXRpdmUodDksICJzdHJpbmciKTsKICByZXR1cm4gInN5bWJvbCIgPT0gdHlwZW9mIGkxMSA/IGkxMSA6IGkxMSArICIiOwp9CmZ1bmN0aW9uIF90eXBlb2YobzEzKSB7CiAgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsKICByZXR1cm4gX3R5cGVvZiA9ICJmdW5jdGlvbiIgPT0gdHlwZW9mIFN5bWJvbCAmJiAic3ltYm9sIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24obzE0KSB7CiAgICByZXR1cm4gdHlwZW9mIG8xNDsKICB9IDogZnVuY3Rpb24obzE0KSB7CiAgICByZXR1cm4gbzE0ICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvMTQuY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvMTQgIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvMTQ7CiAgfSwgX3R5cGVvZihvMTMpOwp9CmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEsIGE1KSB7CiAgaWYgKHIxMSkgewogICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiByMTEpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyMTEsIGE1KTsKICAgIHZhciB0OSA9IHt9LnRvU3RyaW5nLmNhbGwocjExKS5zbGljZSg4LCAtMSk7CiAgICByZXR1cm4gIk9iamVjdCIgPT09IHQ5ICYmIHIxMS5jb25zdHJ1Y3RvciAmJiAodDkgPSByMTEuY29uc3RydWN0b3IubmFtZSksICJNYXAiID09PSB0OSB8fCAiU2V0IiA9PT0gdDkgPyBBcnJheS5mcm9tKHIxMSkgOiAiQXJndW1lbnRzIiA9PT0gdDkgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodDkpID8gX2FycmF5TGlrZVRvQXJyYXkocjExLCBhNSkgOiB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIF93cmFwUmVnRXhwKCkgewogIF93cmFwUmVnRXhwID0gZnVuY3Rpb24oZTEyLCByMTIpIHsKICAgIHJldHVybiBuZXcgQmFiZWxSZWdFeHAoZTEyLCB2b2lkIDAsIHIxMik7CiAgfTsKICB2YXIgZTExID0gUmVnRXhwLnByb3RvdHlwZSwgcjExID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgZnVuY3Rpb24gQmFiZWxSZWdFeHAoZTEyLCB0OSwgcDcpIHsKICAgIHZhciBvMTMgPSBSZWdFeHAoZTEyLCB0OSk7CiAgICByZXR1cm4gcjExLnNldChvMTMsIHA3IHx8IHIxMS5nZXQoZTEyKSksIF9zZXRQcm90b3R5cGVPZihvMTMsIEJhYmVsUmVnRXhwLnByb3RvdHlwZSk7CiAgfQogIGZ1bmN0aW9uIGJ1aWxkR3JvdXBzKGUxMiwgdDkpIHsKICAgIHZhciBwNyA9IHIxMS5nZXQodDkpOwogICAgcmV0dXJuIE9iamVjdC5rZXlzKHA3KS5yZWR1Y2UoZnVuY3Rpb24ocjEyLCB0MTApIHsKICAgICAgdmFyIG8xMyA9IHA3W3QxMF07CiAgICAgIGlmICgibnVtYmVyIiA9PSB0eXBlb2YgbzEzKSByMTJbdDEwXSA9IGUxMltvMTNdOwogICAgICBlbHNlIHsKICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyB2b2lkIDAgPT09IGUxMltvMTNbaTExXV0gJiYgaTExICsgMSA8IG8xMy5sZW5ndGg7ICkgaTExKys7CiAgICAgICAgcjEyW3QxMF0gPSBlMTJbbzEzW2kxMV1dOwogICAgICB9CiAgICAgIHJldHVybiByMTI7CiAgICB9LCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7CiAgfQogIHJldHVybiBfaW5oZXJpdHMoQmFiZWxSZWdFeHAsIFJlZ0V4cCksIEJhYmVsUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24ocjEyKSB7CiAgICB2YXIgdDkgPSBlMTEuZXhlYy5jYWxsKHRoaXMsIHIxMik7CiAgICBpZiAodDkpIHsKICAgICAgdDkuZ3JvdXBzID0gYnVpbGRHcm91cHModDksIHRoaXMpOwogICAgICB2YXIgcDcgPSB0OS5pbmRpY2VzOwogICAgICBwNyAmJiAocDcuZ3JvdXBzID0gYnVpbGRHcm91cHMocDcsIHRoaXMpKTsKICAgIH0KICAgIHJldHVybiB0OTsKICB9LCBCYWJlbFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLnJlcGxhY2VdID0gZnVuY3Rpb24odDksIHA3KSB7CiAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIHA3KSB7CiAgICAgIHZhciBvMTMgPSByMTEuZ2V0KHRoaXMpOwogICAgICByZXR1cm4gZTExW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQ5LCBwNy5yZXBsYWNlKC9cJDwoW14+XSspKD58JCkvZywgZnVuY3Rpb24oZTEyLCByMTIsIHQxMCkgewogICAgICAgIGlmICgiIiA9PT0gdDEwKSByZXR1cm4gZTEyOwogICAgICAgIHZhciBwOCA9IG8xM1tyMTJdOwogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHA4KSA/ICIkIiArIHA4LmpvaW4oIiQiKSA6ICJudW1iZXIiID09IHR5cGVvZiBwOCA/ICIkIiArIHA4IDogIiI7CiAgICAgIH0pKTsKICAgIH0KICAgIGlmICgiZnVuY3Rpb24iID09IHR5cGVvZiBwNykgewogICAgICB2YXIgaTExID0gdGhpczsKICAgICAgcmV0dXJuIGUxMVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0OSwgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGUxMiA9IGFyZ3VtZW50czsKICAgICAgICByZXR1cm4gIm9iamVjdCIgIT0gdHlwZW9mIGUxMltlMTIubGVuZ3RoIC0gMV0gJiYgKGUxMiA9IFtdLnNsaWNlLmNhbGwoZTEyKSkucHVzaChidWlsZEdyb3VwcyhlMTIsIGkxMSkpLCBwNy5hcHBseSh0aGlzLCBlMTIpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBlMTFbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdDksIHA3KTsKICB9LCBfd3JhcFJlZ0V4cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikgewogIHJldHVybiBuZXcgUHJveHkob2JqLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIodGFyZ2V0LCBwcm9wKSB7CiAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldCA/IHRhcmdldFtwcm9wXSA6IHRhcmdldFtpMTBdOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIGdldEF0dHJDb25maWcoYXR0cikgewogIHZhciBlbGVtZW50NCA9IERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFsiICsgYXR0ciArICJdIik7CiAgaWYgKGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0QXR0cmlidXRlKGF0dHIpOwogIH0KfQpmdW5jdGlvbiBjb2VyY2UodmFsKSB7CiAgaWYgKHZhbCA9PT0gIiIpIHJldHVybiB0cnVlOwogIGlmICh2YWwgPT09ICJmYWxzZSIpIHJldHVybiBmYWxzZTsKICBpZiAodmFsID09PSAidHJ1ZSIpIHJldHVybiB0cnVlOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gb25DaGFuZ2UoY2IpIHsKICBfb25DaGFuZ2VDYi5wdXNoKGNiKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBfb25DaGFuZ2VDYi5zcGxpY2UoX29uQ2hhbmdlQ2IuaW5kZXhPZihjYiksIDEpOwogIH07Cn0KZnVuY3Rpb24gaW5zZXJ0Q3NzKGNzczEzKSB7CiAgaWYgKCFjc3MxMyB8fCAhSVNfRE9NKSB7CiAgICByZXR1cm47CiAgfQogIHZhciBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGUuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzMTM7CiAgdmFyIGhlYWRDaGlsZHJlbiA9IERPQ1VNRU5ULmhlYWQuY2hpbGROb2RlczsKICB2YXIgYmVmb3JlQ2hpbGQgPSBudWxsOwogIGZvciAodmFyIGkxMSA9IGhlYWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpMTEgPiAtMTsgaTExLS0pIHsKICAgIHZhciBjaGlsZCA9IGhlYWRDaGlsZHJlbltpMTFdOwogICAgdmFyIHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAiIikudG9VcHBlckNhc2UoKTsKICAgIGlmIChbIlNUWUxFIiwgIkxJTksiXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHsKICAgICAgYmVmb3JlQ2hpbGQgPSBjaGlsZDsKICAgIH0KICB9CiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTsKICByZXR1cm4gY3NzMTM7Cn0KZnVuY3Rpb24gbmV4dFVuaXF1ZUlkKCkgewogIHZhciBzaXplID0gMTI7CiAgdmFyIGlkID0gIiI7CiAgd2hpbGUgKHNpemUtLSA+IDApIHsKICAgIGlkICs9IGlkUG9vbFtNYXRoLnJhbmRvbSgpICogNjIgfCAwXTsKICB9CiAgcmV0dXJuIGlkOwp9CmZ1bmN0aW9uIHRvQXJyYXkyKG9iaikgewogIHZhciBhcnJheSA9IFtdOwogIGZvciAodmFyIGkxMSA9IChvYmogfHwgW10pLmxlbmd0aCA+Pj4gMDsgaTExLS07ICkgewogICAgYXJyYXlbaTExXSA9IG9ialtpMTFdOwogIH0KICByZXR1cm4gYXJyYXk7Cn0KZnVuY3Rpb24gY2xhc3NBcnJheShub2RlMikgewogIGlmIChub2RlMi5jbGFzc0xpc3QpIHsKICAgIHJldHVybiB0b0FycmF5Mihub2RlMi5jbGFzc0xpc3QpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gKG5vZGUyLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIikuc3BsaXQoIiAiKS5maWx0ZXIoZnVuY3Rpb24oaTExKSB7CiAgICAgIHJldHVybiBpMTE7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gIiIuY29uY2F0KHN0cikucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC8iL2csICImcXVvdDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKS5yZXBsYWNlKC8+L2csICImZ3Q7Iik7Cn0KZnVuY3Rpb24gam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcykgewogIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBhdHRyaWJ1dGVOYW1lKSB7CiAgICByZXR1cm4gYWNjICsgIiIuY29uY2F0KGF0dHJpYnV0ZU5hbWUsICc9IicpLmNvbmNhdChodG1sRXNjYXBlKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pLCAnIiAnKTsKICB9LCAiIikudHJpbSgpOwp9CmZ1bmN0aW9uIGpvaW5TdHlsZXMoc3R5bGVzMykgewogIHJldHVybiBPYmplY3Qua2V5cyhzdHlsZXMzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBzdHlsZU5hbWUpIHsKICAgIHJldHVybiBhY2MgKyAiIi5jb25jYXQoc3R5bGVOYW1lLCAiOiAiKS5jb25jYXQoc3R5bGVzM1tzdHlsZU5hbWVdLnRyaW0oKSwgIjsiKTsKICB9LCAiIik7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpIHsKICByZXR1cm4gdHJhbnNmb3JtMi5zaXplICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5zaXplIHx8IHRyYW5zZm9ybTIueCAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueCB8fCB0cmFuc2Zvcm0yLnkgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnkgfHwgdHJhbnNmb3JtMi5yb3RhdGUgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnJvdGF0ZSB8fCB0cmFuc2Zvcm0yLmZsaXBYIHx8IHRyYW5zZm9ybTIuZmxpcFk7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtRm9yU3ZnKF9yZWYyKSB7CiAgdmFyIHRyYW5zZm9ybTIgPSBfcmVmMi50cmFuc2Zvcm0sIGNvbnRhaW5lcldpZHRoID0gX3JlZjIuY29udGFpbmVyV2lkdGgsIGljb25XaWR0aCA9IF9yZWYyLmljb25XaWR0aDsKICB2YXIgb3V0ZXIgPSB7CiAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCAiIDI1NikiKQogIH07CiAgdmFyIGlubmVyVHJhbnNsYXRlID0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggKiAzMiwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAqIDMyLCAiKSAiKTsKICB2YXIgaW5uZXJTY2FsZSA9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFkgPyAtMSA6IDEpLCAiKSAiKTsKICB2YXIgaW5uZXJSb3RhdGUgPSAicm90YXRlKCIuY29uY2F0KHRyYW5zZm9ybTIucm90YXRlLCAiIDAgMCkiKTsKICB2YXIgaW5uZXIgPSB7CiAgICB0cmFuc2Zvcm06ICIiLmNvbmNhdChpbm5lclRyYW5zbGF0ZSwgIiAiKS5jb25jYXQoaW5uZXJTY2FsZSwgIiAiKS5jb25jYXQoaW5uZXJSb3RhdGUpCiAgfTsKICB2YXIgcGF0aDIgPSB7CiAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCAiIC0yNTYpIikKICB9OwogIHJldHVybiB7CiAgICBvdXRlciwKICAgIGlubmVyLAogICAgcGF0aDogcGF0aDIKICB9Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybUZvckNzcyhfcmVmMikgewogIHZhciB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLCB3aWR0aCA9IF9yZWYyJHdpZHRoID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkd2lkdGgsIF9yZWYyJGhlaWdodCA9IF9yZWYyLmhlaWdodCwgaGVpZ2h0ID0gX3JlZjIkaGVpZ2h0ID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkaGVpZ2h0LCBfcmVmMiRzdGFydENlbnRlcmVkID0gX3JlZjIuc3RhcnRDZW50ZXJlZCwgc3RhcnRDZW50ZXJlZCA9IF9yZWYyJHN0YXJ0Q2VudGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkc3RhcnRDZW50ZXJlZDsKICB2YXIgdmFsID0gIiI7CiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKCIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiAtIHdpZHRoIC8gMiwgImVtLCAiKS5jb25jYXQodHJhbnNmb3JtMi55IC8gZCQyIC0gaGVpZ2h0IC8gMiwgImVtKSAiKTsKICB9IGVsc2UgaWYgKHN0YXJ0Q2VudGVyZWQpIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKGNhbGMoLTUwJSArICIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiwgImVtKSwgY2FsYygtNTAlICsgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiwgImVtKSkgIik7CiAgfSBlbHNlIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKCIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiwgImVtLCAiKS5jb25jYXQodHJhbnNmb3JtMi55IC8gZCQyLCAiZW0pICIpOwogIH0KICB2YWwgKz0gInNjYWxlKCIuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIGQkMiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIGQkMiAqICh0cmFuc2Zvcm0yLmZsaXBZID8gLTEgOiAxKSwgIikgIik7CiAgdmFsICs9ICJyb3RhdGUoIi5jb25jYXQodHJhbnNmb3JtMi5yb3RhdGUsICJkZWcpICIpOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gY3NzKCkgewogIHZhciBkY3AgPSBERUZBVUxUX0NTU19QUkVGSVg7CiAgdmFyIGRyYyA9IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1M7CiAgdmFyIGZwID0gY29uZmlnMi5jc3NQcmVmaXg7CiAgdmFyIHJjID0gY29uZmlnMi5yZXBsYWNlbWVudENsYXNzOwogIHZhciBzOSA9IGJhc2VTdHlsZXM7CiAgaWYgKGZwICE9PSBkY3AgfHwgcmMgIT09IGRyYykgewogICAgdmFyIGRQYXR0ID0gbmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQoZGNwLCAiXFwtIiksICJnIik7CiAgICB2YXIgY3VzdG9tUHJvcFBhdHQgPSBuZXcgUmVnRXhwKCJcXC0tIi5jb25jYXQoZGNwLCAiXFwtIiksICJnIik7CiAgICB2YXIgclBhdHQgPSBuZXcgUmVnRXhwKCJcXC4iLmNvbmNhdChkcmMpLCAiZyIpOwogICAgczkgPSBzOS5yZXBsYWNlKGRQYXR0LCAiLiIuY29uY2F0KGZwLCAiLSIpKS5yZXBsYWNlKGN1c3RvbVByb3BQYXR0LCAiLS0iLmNvbmNhdChmcCwgIi0iKSkucmVwbGFjZShyUGF0dCwgIi4iLmNvbmNhdChyYykpOwogIH0KICByZXR1cm4gczk7Cn0KZnVuY3Rpb24gZW5zdXJlQ3NzKCkgewogIGlmIChjb25maWcyLmF1dG9BZGRDc3MgJiYgIV9jc3NJbnNlcnRlZCkgewogICAgaW5zZXJ0Q3NzKGNzcygpKTsKICAgIF9jc3NJbnNlcnRlZCA9IHRydWU7CiAgfQp9CmZ1bmN0aW9uIGRvbXJlYWR5KGZuKSB7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICBsb2FkZWQgPyBzZXRUaW1lb3V0KGZuLCAwKSA6IGZ1bmN0aW9ucy5wdXNoKGZuKTsKfQpmdW5jdGlvbiB0b0h0bWwyKGFic3RyYWN0Tm9kZXMpIHsKICB2YXIgdGFnID0gYWJzdHJhY3ROb2Rlcy50YWcsIF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9IGFic3RyYWN0Tm9kZXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9PT0gdm9pZCAwID8ge30gOiBfYWJzdHJhY3ROb2RlcyRhdHRyaWIsIF9hYnN0cmFjdE5vZGVzJGNoaWxkciA9IGFic3RyYWN0Tm9kZXMuY2hpbGRyZW4sIGNoaWxkcmVuMiA9IF9hYnN0cmFjdE5vZGVzJGNoaWxkciA9PT0gdm9pZCAwID8gW10gOiBfYWJzdHJhY3ROb2RlcyRjaGlsZHI7CiAgaWYgKHR5cGVvZiBhYnN0cmFjdE5vZGVzID09PSAic3RyaW5nIikgewogICAgcmV0dXJuIGh0bWxFc2NhcGUoYWJzdHJhY3ROb2Rlcyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAiPCIuY29uY2F0KHRhZywgIiAiKS5jb25jYXQoam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyksICI+IikuY29uY2F0KGNoaWxkcmVuMi5tYXAodG9IdG1sMikuam9pbigiIiksICI8LyIpLmNvbmNhdCh0YWcsICI+Iik7CiAgfQp9CmZ1bmN0aW9uIGljb25Gcm9tTWFwcGluZyhtYXBwaW5nLCBwcmVmaXg0LCBpY29uTmFtZSkgewogIGlmIChtYXBwaW5nICYmIG1hcHBpbmdbcHJlZml4NF0gJiYgbWFwcGluZ1twcmVmaXg0XVtpY29uTmFtZV0pIHsKICAgIHJldHVybiB7CiAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgaWNvbk5hbWUsCiAgICAgIGljb246IG1hcHBpbmdbcHJlZml4NF1baWNvbk5hbWVdCiAgICB9OwogIH0KfQpmdW5jdGlvbiB0b0hleCh1bmljb2RlKSB7CiAgaWYgKF90b0NvbnN1bWFibGVBcnJheSh1bmljb2RlKS5sZW5ndGggIT09IDEpIHJldHVybiBudWxsOwogIHJldHVybiB1bmljb2RlLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTsKfQpmdW5jdGlvbiBub3JtYWxpemVJY29ucyhpY29uczUpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoaWNvbnM1KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBpY29uTmFtZSkgewogICAgdmFyIGljb24zID0gaWNvbnM1W2ljb25OYW1lXTsKICAgIHZhciBleHBhbmRlZCA9ICEhaWNvbjMuaWNvbjsKICAgIGlmIChleHBhbmRlZCkgewogICAgICBhY2NbaWNvbjMuaWNvbk5hbWVdID0gaWNvbjMuaWNvbjsKICAgIH0gZWxzZSB7CiAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uMzsKICAgIH0KICAgIHJldHVybiBhY2M7CiAgfSwge30pOwp9CmZ1bmN0aW9uIGRlZmluZUljb25zKHByZWZpeDQsIGljb25zNSkgewogIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiB7fTsKICB2YXIgX3BhcmFtcyRza2lwSG9va3MgPSBwYXJhbXMyLnNraXBIb29rcywgc2tpcEhvb2tzID0gX3BhcmFtcyRza2lwSG9va3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwSG9va3M7CiAgdmFyIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVJY29ucyhpY29uczUpOwogIGlmICh0eXBlb2YgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2sgPT09ICJmdW5jdGlvbiIgJiYgIXNraXBIb29rcykgewogICAgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2socHJlZml4NCwgbm9ybWFsaXplSWNvbnMoaWNvbnM1KSk7CiAgfSBlbHNlIHsKICAgIG5hbWVzcGFjZS5zdHlsZXNbcHJlZml4NF0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXg0XSB8fCB7fSksIG5vcm1hbGl6ZWQpOwogIH0KICBpZiAocHJlZml4NCA9PT0gImZhcyIpIHsKICAgIGRlZmluZUljb25zKCJmYSIsIGljb25zNSk7CiAgfQp9CmZ1bmN0aW9uIGlzUmVzZXJ2ZWQobmFtZSkgewogIHJldHVybiB+UkVTRVJWRURfQ0xBU1NFUy5pbmRleE9mKG5hbWUpOwp9CmZ1bmN0aW9uIGdldEljb25OYW1lKGNzc1ByZWZpeCwgY2xzKSB7CiAgdmFyIHBhcnRzID0gY2xzLnNwbGl0KCItIik7CiAgdmFyIHByZWZpeDQgPSBwYXJ0c1swXTsKICB2YXIgaWNvbk5hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCItIik7CiAgaWYgKHByZWZpeDQgPT09IGNzc1ByZWZpeCAmJiBpY29uTmFtZSAhPT0gIiIgJiYgIWlzUmVzZXJ2ZWQoaWNvbk5hbWUpKSB7CiAgICByZXR1cm4gaWNvbk5hbWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpmdW5jdGlvbiBieVVuaWNvZGUocHJlZml4NCwgdW5pY29kZSkgewogIHJldHVybiAoX2J5VW5pY29kZVtwcmVmaXg0XSB8fCB7fSlbdW5pY29kZV07Cn0KZnVuY3Rpb24gYnlMaWdhdHVyZShwcmVmaXg0LCBsaWdhdHVyZSkgewogIHJldHVybiAoX2J5TGlnYXR1cmVbcHJlZml4NF0gfHwge30pW2xpZ2F0dXJlXTsKfQpmdW5jdGlvbiBieUFsaWFzKHByZWZpeDQsIGFsaWFzKSB7CiAgcmV0dXJuIChfYnlBbGlhc1twcmVmaXg0XSB8fCB7fSlbYWxpYXNdOwp9CmZ1bmN0aW9uIGJ5T2xkTmFtZShuYW1lKSB7CiAgcmV0dXJuIF9ieU9sZE5hbWVbbmFtZV0gfHwgewogICAgcHJlZml4OiBudWxsLAogICAgaWNvbk5hbWU6IG51bGwKICB9Owp9CmZ1bmN0aW9uIGJ5T2xkVW5pY29kZSh1bmljb2RlKSB7CiAgdmFyIG9sZFVuaWNvZGUgPSBfYnlPbGRVbmljb2RlW3VuaWNvZGVdOwogIHZhciBuZXdVbmljb2RlID0gYnlVbmljb2RlKCJmYXMiLCB1bmljb2RlKTsKICByZXR1cm4gb2xkVW5pY29kZSB8fCAobmV3VW5pY29kZSA/IHsKICAgIHByZWZpeDogImZhcyIsCiAgICBpY29uTmFtZTogbmV3VW5pY29kZQogIH0gOiBudWxsKSB8fCB7CiAgICBwcmVmaXg6IG51bGwsCiAgICBpY29uTmFtZTogbnVsbAogIH07Cn0KZnVuY3Rpb24gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpIHsKICByZXR1cm4gX2RlZmF1bHRVc2FibGVQcmVmaXg7Cn0KZnVuY3Rpb24gZ2V0RmFtaWx5SWQodmFsdWVzKSB7CiAgdmFyIGZhbWlseSA9IGkxMDsKICB2YXIgZmFtUHJvcHMgPSBGQU1JTFlfTkFNRVMucmVkdWNlKGZ1bmN0aW9uKGFjYywgZmFtaWx5SWQpIHsKICAgIGFjY1tmYW1pbHlJZF0gPSAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGZhbWlseUlkKTsKICAgIHJldHVybiBhY2M7CiAgfSwge30pOwogIHJ0LmZvckVhY2goZnVuY3Rpb24oZmFtaWx5SWQpIHsKICAgIGlmICh2YWx1ZXMuaW5jbHVkZXMoZmFtUHJvcHNbZmFtaWx5SWRdKSB8fCB2YWx1ZXMuc29tZShmdW5jdGlvbih2JCQxKSB7CiAgICAgIHJldHVybiBQUkVGSVhFU19GT1JfRkFNSUxZW2ZhbWlseUlkXS5pbmNsdWRlcyh2JCQxKTsKICAgIH0pKSB7CiAgICAgIGZhbWlseSA9IGZhbWlseUlkOwogICAgfQogIH0pOwogIHJldHVybiBmYW1pbHk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlT3JQcmVmaXgpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkZmFtaWx5ID0gcGFyYW1zMi5mYW1pbHksIGZhbWlseSA9IF9wYXJhbXMkZmFtaWx5ID09PSB2b2lkIDAgPyBpMTAgOiBfcGFyYW1zJGZhbWlseTsKICB2YXIgc3R5bGUgPSBQUkVGSVhfVE9fU1RZTEVbZmFtaWx5XVtzdHlsZU9yUHJlZml4XTsKICBpZiAoZmFtaWx5ID09PSB0OCAmJiAhc3R5bGVPclByZWZpeCkgewogICAgcmV0dXJuICJmYWQiOwogIH0KICB2YXIgcHJlZml4NCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTsKICB2YXIgZGVmaW5lZCA9IHN0eWxlT3JQcmVmaXggaW4gbmFtZXNwYWNlLnN0eWxlcyA/IHN0eWxlT3JQcmVmaXggOiBudWxsOwogIHZhciByZXN1bHQgPSBwcmVmaXg0IHx8IGRlZmluZWQgfHwgbnVsbDsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIG1vdmVOb25GYUNsYXNzZXNUb1Jlc3QoY2xhc3NOYW1lcykgewogIHZhciByZXN0ID0gW107CiAgdmFyIGljb25OYW1lID0gbnVsbDsKICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24oY2xzKSB7CiAgICB2YXIgcmVzdWx0ID0gZ2V0SWNvbk5hbWUoY29uZmlnMi5jc3NQcmVmaXgsIGNscyk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgIGljb25OYW1lID0gcmVzdWx0OwogICAgfSBlbHNlIGlmIChjbHMpIHsKICAgICAgcmVzdC5wdXNoKGNscyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lLAogICAgcmVzdAogIH07Cn0KZnVuY3Rpb24gc29ydGVkVW5pcXVlVmFsdWVzKGFycikgewogIHJldHVybiBhcnIuc29ydCgpLmZpbHRlcihmdW5jdGlvbih2YWx1ZTIsIGluZGV4MiwgYXJyMikgewogICAgcmV0dXJuIGFycjIuaW5kZXhPZih2YWx1ZTIpID09PSBpbmRleDI7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsSWNvbih2YWx1ZXMpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkc2tpcExvb2t1cHMgPSBwYXJhbXMyLnNraXBMb29rdXBzLCBza2lwTG9va3VwcyA9IF9wYXJhbXMkc2tpcExvb2t1cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwTG9va3VwczsKICB2YXIgZ2l2ZW5QcmVmaXggPSBudWxsOwogIHZhciBmYVN0eWxlT3JGYW1pbHlDbGFzc2VzID0gc29ydGVkVW5pcXVlVmFsdWVzKHZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICByZXR1cm4gX2ZhQ29tYmluZWRDbGFzc2VzLmluY2x1ZGVzKGNscyk7CiAgfSkpOwogIHZhciBub25TdHlsZU9yRmFtaWx5Q2xhc3NlcyA9IHNvcnRlZFVuaXF1ZVZhbHVlcyh2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgcmV0dXJuICFfZmFDb21iaW5lZENsYXNzZXMuaW5jbHVkZXMoY2xzKTsKICB9KSk7CiAgdmFyIGZhU3R5bGVzID0gZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICBnaXZlblByZWZpeCA9IGNsczsKICAgIHJldHVybiAhUS5pbmNsdWRlcyhjbHMpOwogIH0pOwogIHZhciBfZmFTdHlsZXMgPSBfc2xpY2VkVG9BcnJheShmYVN0eWxlcywgMSksIF9mYVN0eWxlcyQgPSBfZmFTdHlsZXNbMF0sIHN0eWxlRnJvbVZhbHVlcyA9IF9mYVN0eWxlcyQgPT09IHZvaWQgMCA/IG51bGwgOiBfZmFTdHlsZXMkOwogIHZhciBmYW1pbHkgPSBnZXRGYW1pbHlJZChmYVN0eWxlT3JGYW1pbHlDbGFzc2VzKTsKICB2YXIgY2Fub25pY2FsID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1vdmVOb25GYUNsYXNzZXNUb1Jlc3Qobm9uU3R5bGVPckZhbWlseUNsYXNzZXMpKSwge30sIHsKICAgIHByZWZpeDogZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlRnJvbVZhbHVlcywgewogICAgICBmYW1pbHkKICAgIH0pCiAgfSk7CiAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjYW5vbmljYWwpLCBnZXREZWZhdWx0Q2Fub25pY2FsUHJlZml4KHsKICAgIHZhbHVlcywKICAgIGZhbWlseSwKICAgIHN0eWxlczogc3R5bGVzMiwKICAgIGNvbmZpZzogY29uZmlnMiwKICAgIGNhbm9uaWNhbCwKICAgIGdpdmVuUHJlZml4CiAgfSkpLCBhcHBseVNoaW1BbmRBbGlhcyhza2lwTG9va3VwcywgZ2l2ZW5QcmVmaXgsIGNhbm9uaWNhbCkpOwp9CmZ1bmN0aW9uIGFwcGx5U2hpbUFuZEFsaWFzKHNraXBMb29rdXBzLCBnaXZlblByZWZpeCwgY2Fub25pY2FsKSB7CiAgdmFyIHByZWZpeDQgPSBjYW5vbmljYWwucHJlZml4LCBpY29uTmFtZSA9IGNhbm9uaWNhbC5pY29uTmFtZTsKICBpZiAoc2tpcExvb2t1cHMgfHwgIXByZWZpeDQgfHwgIWljb25OYW1lKSB7CiAgICByZXR1cm4gewogICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgIGljb25OYW1lCiAgICB9OwogIH0KICB2YXIgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAiZmEiID8gYnlPbGROYW1lKGljb25OYW1lKSA6IHt9OwogIHZhciBhbGlhc0ljb25OYW1lID0gYnlBbGlhcyhwcmVmaXg0LCBpY29uTmFtZSk7CiAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGFsaWFzSWNvbk5hbWUgfHwgaWNvbk5hbWU7CiAgcHJlZml4NCA9IHNoaW0ucHJlZml4IHx8IHByZWZpeDQ7CiAgaWYgKHByZWZpeDQgPT09ICJmYXIiICYmICFzdHlsZXMyWyJmYXIiXSAmJiBzdHlsZXMyWyJmYXMiXSAmJiAhY29uZmlnMi5hdXRvRmV0Y2hTdmcpIHsKICAgIHByZWZpeDQgPSAiZmFzIjsKICB9CiAgcmV0dXJuIHsKICAgIHByZWZpeDogcHJlZml4NCwKICAgIGljb25OYW1lCiAgfTsKfQpmdW5jdGlvbiBnZXREZWZhdWx0Q2Fub25pY2FsUHJlZml4KHByZWZpeE9wdGlvbnMpIHsKICB2YXIgdmFsdWVzID0gcHJlZml4T3B0aW9ucy52YWx1ZXMsIGZhbWlseSA9IHByZWZpeE9wdGlvbnMuZmFtaWx5LCBjYW5vbmljYWwgPSBwcmVmaXhPcHRpb25zLmNhbm9uaWNhbCwgX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QID0gcHJlZml4T3B0aW9ucy5naXZlblByZWZpeCwgZ2l2ZW5QcmVmaXggPSBfcHJlZml4T3B0aW9ucyRnaXZlblAgPT09IHZvaWQgMCA/ICIiIDogX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QLCBfcHJlZml4T3B0aW9ucyRzdHlsZXMgPSBwcmVmaXhPcHRpb25zLnN0eWxlcywgc3R5bGVzMyA9IF9wcmVmaXhPcHRpb25zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcHJlZml4T3B0aW9ucyRzdHlsZXMsIF9wcmVmaXhPcHRpb25zJGNvbmZpZyA9IHByZWZpeE9wdGlvbnMuY29uZmlnLCBjb25maWckJDEgPSBfcHJlZml4T3B0aW9ucyRjb25maWcgPT09IHZvaWQgMCA/IHt9IDogX3ByZWZpeE9wdGlvbnMkY29uZmlnOwogIHZhciBpc0R1b3RvbmVGYW1pbHkgPSBmYW1pbHkgPT09IHQ4OwogIHZhciB2YWx1ZXNIYXNEdW90b25lID0gdmFsdWVzLmluY2x1ZGVzKCJmYS1kdW90b25lIikgfHwgdmFsdWVzLmluY2x1ZGVzKCJmYWQiKTsKICB2YXIgZGVmYXVsdEZhbWlseUlzRHVvdG9uZSA9IGNvbmZpZyQkMS5mYW1pbHlEZWZhdWx0ID09PSAiZHVvdG9uZSI7CiAgdmFyIGNhbm9uaWNhbFByZWZpeElzRHVvdG9uZSA9IGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYWQiIHx8IGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYS1kdW90b25lIjsKICBpZiAoIWlzRHVvdG9uZUZhbWlseSAmJiAodmFsdWVzSGFzRHVvdG9uZSB8fCBkZWZhdWx0RmFtaWx5SXNEdW90b25lIHx8IGNhbm9uaWNhbFByZWZpeElzRHVvdG9uZSkpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSAiZmFkIjsKICB9CiAgaWYgKHZhbHVlcy5pbmNsdWRlcygiZmEtYnJhbmRzIikgfHwgdmFsdWVzLmluY2x1ZGVzKCJmYWIiKSkgewogICAgY2Fub25pY2FsLnByZWZpeCA9ICJmYWIiOwogIH0KICBpZiAoIWNhbm9uaWNhbC5wcmVmaXggJiYgbmV3Q2Fub25pY2FsRmFtaWxpZXMuaW5jbHVkZXMoZmFtaWx5KSkgewogICAgdmFyIHZhbGlkUHJlZml4ID0gT2JqZWN0LmtleXMoc3R5bGVzMykuZmluZChmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBuZXdDYW5vbmljYWxTdHlsZXMuaW5jbHVkZXMoa2V5Mik7CiAgICB9KTsKICAgIGlmICh2YWxpZFByZWZpeCB8fCBjb25maWckJDEuYXV0b0ZldGNoU3ZnKSB7CiAgICAgIHZhciBkZWZhdWx0UHJlZml4ID0gVXQuZ2V0KGZhbWlseSkuZGVmYXVsdFNob3J0UHJlZml4SWQ7CiAgICAgIGNhbm9uaWNhbC5wcmVmaXggPSBkZWZhdWx0UHJlZml4OwogICAgICBjYW5vbmljYWwuaWNvbk5hbWUgPSBieUFsaWFzKGNhbm9uaWNhbC5wcmVmaXgsIGNhbm9uaWNhbC5pY29uTmFtZSkgfHwgY2Fub25pY2FsLmljb25OYW1lOwogICAgfQogIH0KICBpZiAoY2Fub25pY2FsLnByZWZpeCA9PT0gImZhIiB8fCBnaXZlblByZWZpeCA9PT0gImZhIikgewogICAgY2Fub25pY2FsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB8fCAiZmFzIjsKICB9CiAgcmV0dXJuIGNhbm9uaWNhbDsKfQpmdW5jdGlvbiByZWdpc3RlclBsdWdpbnMobmV4dFBsdWdpbnMsIF9yZWYyKSB7CiAgdmFyIG9iaiA9IF9yZWYyLm1peG91dHNUbzsKICBfcGx1Z2lucyA9IG5leHRQbHVnaW5zOwogIF9ob29rcyA9IHt9OwogIE9iamVjdC5rZXlzKHByb3ZpZGVycykuZm9yRWFjaChmdW5jdGlvbihrNCkgewogICAgaWYgKGRlZmF1bHRQcm92aWRlcktleXMuaW5kZXhPZihrNCkgPT09IC0xKSB7CiAgICAgIGRlbGV0ZSBwcm92aWRlcnNbazRdOwogICAgfQogIH0pOwogIF9wbHVnaW5zLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7CiAgICB2YXIgbWl4b3V0OCA9IHBsdWdpbi5taXhvdXQgPyBwbHVnaW4ubWl4b3V0KCkgOiB7fTsKICAgIE9iamVjdC5rZXlzKG1peG91dDgpLmZvckVhY2goZnVuY3Rpb24odGspIHsKICAgICAgaWYgKHR5cGVvZiBtaXhvdXQ4W3RrXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG9ialt0a10gPSBtaXhvdXQ4W3RrXTsKICAgICAgfQogICAgICBpZiAoX3R5cGVvZihtaXhvdXQ4W3RrXSkgPT09ICJvYmplY3QiKSB7CiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0OFt0a10pLmZvckVhY2goZnVuY3Rpb24oc2spIHsKICAgICAgICAgIGlmICghb2JqW3RrXSkgewogICAgICAgICAgICBvYmpbdGtdID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBvYmpbdGtdW3NrXSA9IG1peG91dDhbdGtdW3NrXTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgICBpZiAocGx1Z2luLmhvb2tzKSB7CiAgICAgIHZhciBob29rczggPSBwbHVnaW4uaG9va3MoKTsKICAgICAgT2JqZWN0LmtleXMoaG9va3M4KS5mb3JFYWNoKGZ1bmN0aW9uKGhvb2spIHsKICAgICAgICBpZiAoIV9ob29rc1tob29rXSkgewogICAgICAgICAgX2hvb2tzW2hvb2tdID0gW107CiAgICAgICAgfQogICAgICAgIF9ob29rc1tob29rXS5wdXNoKGhvb2tzOFtob29rXSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHBsdWdpbi5wcm92aWRlcykgewogICAgICBwbHVnaW4ucHJvdmlkZXMocHJvdmlkZXJzKTsKICAgIH0KICB9KTsKICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIGNoYWluSG9va3MoaG9vaywgYWNjdW11bGF0b3IpIHsKICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTsKICB9CiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107CiAgaG9va0Zucy5mb3JFYWNoKGZ1bmN0aW9uKGhvb2tGbikgewogICAgYWNjdW11bGF0b3IgPSBob29rRm4uYXBwbHkobnVsbCwgW2FjY3VtdWxhdG9yXS5jb25jYXQoYXJncykpOwogIH0pOwogIHJldHVybiBhY2N1bXVsYXRvcjsKfQpmdW5jdGlvbiBjYWxsSG9va3MoaG9vaykgewogIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogIH0KICB2YXIgaG9va0ZucyA9IF9ob29rc1tob29rXSB8fCBbXTsKICBob29rRm5zLmZvckVhY2goZnVuY3Rpb24oaG9va0ZuKSB7CiAgICBob29rRm4uYXBwbHkobnVsbCwgYXJncyk7CiAgfSk7CiAgcmV0dXJuIHZvaWQgMDsKfQpmdW5jdGlvbiBjYWxsUHJvdmlkZWQoKSB7CiAgdmFyIGhvb2sgPSBhcmd1bWVudHNbMF07CiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogIHJldHVybiBwcm92aWRlcnNbaG9va10gPyBwcm92aWRlcnNbaG9va10uYXBwbHkobnVsbCwgYXJncykgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gZmluZEljb25EZWZpbml0aW9uKGljb25Mb29rdXApIHsKICBpZiAoaWNvbkxvb2t1cC5wcmVmaXggPT09ICJmYSIpIHsKICAgIGljb25Mb29rdXAucHJlZml4ID0gImZhcyI7CiAgfQogIHZhciBpY29uTmFtZSA9IGljb25Mb29rdXAuaWNvbk5hbWU7CiAgdmFyIHByZWZpeDQgPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgaWYgKCFpY29uTmFtZSkgcmV0dXJuOwogIGljb25OYW1lID0gYnlBbGlhcyhwcmVmaXg0LCBpY29uTmFtZSkgfHwgaWNvbk5hbWU7CiAgcmV0dXJuIGljb25Gcm9tTWFwcGluZyhsaWJyYXJ5LmRlZmluaXRpb25zLCBwcmVmaXg0LCBpY29uTmFtZSkgfHwgaWNvbkZyb21NYXBwaW5nKG5hbWVzcGFjZS5zdHlsZXMsIHByZWZpeDQsIGljb25OYW1lKTsKfQpmdW5jdGlvbiBkb21WYXJpYW50cyh2YWwsIGFic3RyYWN0Q3JlYXRvcikgewogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICJhYnN0cmFjdCIsIHsKICAgIGdldDogYWJzdHJhY3RDcmVhdG9yCiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgImh0bWwiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgIHJldHVybiB2YWwuYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgcmV0dXJuIHRvSHRtbDIoYTUpOwogICAgICB9KTsKICAgIH0KICB9KTsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAibm9kZSIsIHsKICAgIGdldDogZnVuY3Rpb24gZ2V0MigpIHsKICAgICAgaWYgKCFJU19ET00pIHJldHVybiB2b2lkIDA7CiAgICAgIHZhciBjb250YWluZXIgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHZhbC5odG1sOwogICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuOwogICAgfQogIH0pOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gYXNJY29uKF9yZWYyKSB7CiAgdmFyIGNoaWxkcmVuMiA9IF9yZWYyLmNoaWxkcmVuLCBtYWluID0gX3JlZjIubWFpbiwgbWFzayA9IF9yZWYyLm1hc2ssIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzLCBzdHlsZXMzID0gX3JlZjIuc3R5bGVzLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtOwogIGlmICh0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtMikgJiYgbWFpbi5mb3VuZCAmJiAhbWFzay5mb3VuZCkgewogICAgdmFyIHdpZHRoID0gbWFpbi53aWR0aCwgaGVpZ2h0ID0gbWFpbi5oZWlnaHQ7CiAgICB2YXIgb2Zmc2V0ID0gewogICAgICB4OiB3aWR0aCAvIGhlaWdodCAvIDIsCiAgICAgIHk6IDAuNQogICAgfTsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBqb2luU3R5bGVzKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdHlsZXMzKSwge30sIHsKICAgICAgInRyYW5zZm9ybS1vcmlnaW4iOiAiIi5jb25jYXQob2Zmc2V0LnggKyB0cmFuc2Zvcm0yLnggLyAxNiwgImVtICIpLmNvbmNhdChvZmZzZXQueSArIHRyYW5zZm9ybTIueSAvIDE2LCAiZW0iKQogICAgfSkpOwogIH0KICByZXR1cm4gW3sKICAgIHRhZzogInN2ZyIsCiAgICBhdHRyaWJ1dGVzLAogICAgY2hpbGRyZW46IGNoaWxkcmVuMgogIH1dOwp9CmZ1bmN0aW9uIGFzU3ltYm9sKF9yZWYyKSB7CiAgdmFyIHByZWZpeDQgPSBfcmVmMi5wcmVmaXgsIGljb25OYW1lID0gX3JlZjIuaWNvbk5hbWUsIGNoaWxkcmVuMiA9IF9yZWYyLmNoaWxkcmVuLCBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcywgc3ltYm9sID0gX3JlZjIuc3ltYm9sOwogIHZhciBpZCA9IHN5bWJvbCA9PT0gdHJ1ZSA/ICIiLmNvbmNhdChwcmVmaXg0LCAiLSIpLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoaWNvbk5hbWUpIDogc3ltYm9sOwogIHJldHVybiBbewogICAgdGFnOiAic3ZnIiwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgc3R5bGU6ICJkaXNwbGF5OiBub25lOyIKICAgIH0sCiAgICBjaGlsZHJlbjogW3sKICAgICAgdGFnOiAic3ltYm9sIiwKICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGF0dHJpYnV0ZXMpLCB7fSwgewogICAgICAgIGlkCiAgICAgIH0pLAogICAgICBjaGlsZHJlbjogY2hpbGRyZW4yCiAgICB9XQogIH1dOwp9CmZ1bmN0aW9uIGlzTGFiZWxlZChhdHRyaWJ1dGVzKSB7CiAgdmFyIGxhYmVscyA9IFsiYXJpYS1sYWJlbCIsICJhcmlhLWxhYmVsbGVkYnkiLCAidGl0bGUiLCAicm9sZSJdOwogIHJldHVybiBsYWJlbHMuc29tZShmdW5jdGlvbihsYWJlbCkgewogICAgcmV0dXJuIGxhYmVsIGluIGF0dHJpYnV0ZXM7CiAgfSk7Cn0KZnVuY3Rpb24gbWFrZUlubGluZVN2Z0Fic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgX3BhcmFtcyRpY29ucyA9IHBhcmFtczIuaWNvbnMsIG1haW4gPSBfcGFyYW1zJGljb25zLm1haW4sIG1hc2sgPSBfcGFyYW1zJGljb25zLm1hc2ssIHByZWZpeDQgPSBwYXJhbXMyLnByZWZpeCwgaWNvbk5hbWUgPSBwYXJhbXMyLmljb25OYW1lLCB0cmFuc2Zvcm0yID0gcGFyYW1zMi50cmFuc2Zvcm0sIHN5bWJvbCA9IHBhcmFtczIuc3ltYm9sLCBtYXNrSWQgPSBwYXJhbXMyLm1hc2tJZCwgZXh0cmEgPSBwYXJhbXMyLmV4dHJhLCBfcGFyYW1zJHdhdGNoYWJsZSA9IHBhcmFtczIud2F0Y2hhYmxlLCB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTsKICB2YXIgX3JlZjIgPSBtYXNrLmZvdW5kID8gbWFzayA6IG1haW4sIHdpZHRoID0gX3JlZjIud2lkdGgsIGhlaWdodCA9IF9yZWYyLmhlaWdodDsKICB2YXIgYXR0ckNsYXNzID0gW2NvbmZpZzIucmVwbGFjZW1lbnRDbGFzcywgaWNvbk5hbWUgPyAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGljb25OYW1lKSA6ICIiXS5maWx0ZXIoZnVuY3Rpb24oYzExKSB7CiAgICByZXR1cm4gZXh0cmEuY2xhc3Nlcy5pbmRleE9mKGMxMSkgPT09IC0xOwogIH0pLmZpbHRlcihmdW5jdGlvbihjMTEpIHsKICAgIHJldHVybiBjMTEgIT09ICIiIHx8ICEhYzExOwogIH0pLmNvbmNhdChleHRyYS5jbGFzc2VzKS5qb2luKCIgIik7CiAgdmFyIGNvbnRlbnQzID0gewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB7fSwgewogICAgICAiZGF0YS1wcmVmaXgiOiBwcmVmaXg0LAogICAgICAiZGF0YS1pY29uIjogaWNvbk5hbWUsCiAgICAgICJjbGFzcyI6IGF0dHJDbGFzcywKICAgICAgInJvbGUiOiBleHRyYS5hdHRyaWJ1dGVzLnJvbGUgfHwgImltZyIsCiAgICAgICJ2aWV3Qm94IjogIjAgMCAiLmNvbmNhdCh3aWR0aCwgIiAiKS5jb25jYXQoaGVpZ2h0KQogICAgfSkKICB9OwogIGlmICghaXNMYWJlbGVkKGV4dHJhLmF0dHJpYnV0ZXMpICYmICFleHRyYS5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdKSB7CiAgICBjb250ZW50My5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdID0gInRydWUiOwogIH0KICBpZiAod2F0Y2hhYmxlKSB7CiAgICBjb250ZW50My5hdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gIiI7CiAgfQogIHZhciBhcmdzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGNvbnRlbnQzKSwge30sIHsKICAgIHByZWZpeDogcHJlZml4NCwKICAgIGljb25OYW1lLAogICAgbWFpbiwKICAgIG1hc2ssCiAgICBtYXNrSWQsCiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICBzeW1ib2wsCiAgICBzdHlsZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5zdHlsZXMpCiAgfSk7CiAgdmFyIF9yZWYyMiA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgiZ2VuZXJhdGVBYnN0cmFjdE1hc2siLCBhcmdzKSB8fCB7CiAgICBjaGlsZHJlbjogW10sCiAgICBhdHRyaWJ1dGVzOiB7fQogIH0gOiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RJY29uIiwgYXJncykgfHwgewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczoge30KICB9LCBjaGlsZHJlbjIgPSBfcmVmMjIuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMjIuYXR0cmlidXRlczsKICBhcmdzLmNoaWxkcmVuID0gY2hpbGRyZW4yOwogIGFyZ3MuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAgaWYgKHN5bWJvbCkgewogICAgcmV0dXJuIGFzU3ltYm9sKGFyZ3MpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gYXNJY29uKGFyZ3MpOwogIH0KfQpmdW5jdGlvbiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgY29udGVudDMgPSBwYXJhbXMyLmNvbnRlbnQsIHdpZHRoID0gcGFyYW1zMi53aWR0aCwgaGVpZ2h0ID0gcGFyYW1zMi5oZWlnaHQsIHRyYW5zZm9ybTIgPSBwYXJhbXMyLnRyYW5zZm9ybSwgZXh0cmEgPSBwYXJhbXMyLmV4dHJhLCBfcGFyYW1zJHdhdGNoYWJsZTIgPSBwYXJhbXMyLndhdGNoYWJsZSwgd2F0Y2hhYmxlID0gX3BhcmFtcyR3YXRjaGFibGUyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkd2F0Y2hhYmxlMjsKICB2YXIgYXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgIGNsYXNzOiBleHRyYS5jbGFzc2VzLmpvaW4oIiAiKQogIH0pOwogIGlmICh3YXRjaGFibGUpIHsKICAgIGF0dHJpYnV0ZXNbREFUQV9GQV9JMlNWR10gPSAiIjsKICB9CiAgdmFyIHN0eWxlczMgPSBfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuc3R5bGVzKTsKICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpKSB7CiAgICBzdHlsZXMzWyJ0cmFuc2Zvcm0iXSA9IHRyYW5zZm9ybUZvckNzcyh7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgc3RhcnRDZW50ZXJlZDogdHJ1ZSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSk7CiAgICBzdHlsZXMzWyItd2Via2l0LXRyYW5zZm9ybSJdID0gc3R5bGVzM1sidHJhbnNmb3JtIl07CiAgfQogIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoc3R5bGVzMyk7CiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICB9CiAgdmFyIHZhbCA9IFtdOwogIHZhbC5wdXNoKHsKICAgIHRhZzogInNwYW4iLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBbY29udGVudDNdCiAgfSk7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBtYWtlTGF5ZXJzQ291bnRlckFic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgY29udGVudDMgPSBwYXJhbXMyLmNvbnRlbnQsIGV4dHJhID0gcGFyYW1zMi5leHRyYTsKICB2YXIgYXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgIGNsYXNzOiBleHRyYS5jbGFzc2VzLmpvaW4oIiAiKQogIH0pOwogIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoZXh0cmEuc3R5bGVzKTsKICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkgewogICAgYXR0cmlidXRlc1sic3R5bGUiXSA9IHN0eWxlU3RyaW5nOwogIH0KICB2YXIgdmFsID0gW107CiAgdmFsLnB1c2goewogICAgdGFnOiAic3BhbiIsCiAgICBhdHRyaWJ1dGVzLAogICAgY2hpbGRyZW46IFtjb250ZW50M10KICB9KTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGFzRm91bmRJY29uKGljb24zKSB7CiAgdmFyIHdpZHRoID0gaWNvbjNbMF07CiAgdmFyIGhlaWdodCA9IGljb24zWzFdOwogIHZhciBfaWNvbiRzbGljZSA9IGljb24zLnNsaWNlKDQpLCBfaWNvbiRzbGljZTIgPSBfc2xpY2VkVG9BcnJheShfaWNvbiRzbGljZSwgMSksIHZlY3RvckRhdGEgPSBfaWNvbiRzbGljZTJbMF07CiAgdmFyIGVsZW1lbnQ0ID0gbnVsbDsKICBpZiAoQXJyYXkuaXNBcnJheSh2ZWN0b3JEYXRhKSkgewogICAgZWxlbWVudDQgPSB7CiAgICAgIHRhZzogImciLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgY2xhc3M6ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLkdST1VQKQogICAgICB9LAogICAgICBjaGlsZHJlbjogW3sKICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjbGFzczogIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZKSwKICAgICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgZDogdmVjdG9yRGF0YVswXQogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIHRhZzogInBhdGgiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNsYXNzOiAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5QUklNQVJZKSwKICAgICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgZDogdmVjdG9yRGF0YVsxXQogICAgICAgIH0KICAgICAgfV0KICAgIH07CiAgfSBlbHNlIHsKICAgIGVsZW1lbnQ0ID0gewogICAgICB0YWc6ICJwYXRoIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgIGQ6IHZlY3RvckRhdGEKICAgICAgfQogICAgfTsKICB9CiAgcmV0dXJuIHsKICAgIGZvdW5kOiB0cnVlLAogICAgd2lkdGgsCiAgICBoZWlnaHQsCiAgICBpY29uOiBlbGVtZW50NAogIH07Cn0KZnVuY3Rpb24gbWF5YmVOb3RpZnlNaXNzaW5nKGljb25OYW1lLCBwcmVmaXg0KSB7CiAgaWYgKCFQUk9EVUNUSU9OICYmICFjb25maWcyLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0ljb24gd2l0aCBuYW1lICInLmNvbmNhdChpY29uTmFtZSwgJyIgYW5kIHByZWZpeCAiJykuY29uY2F0KHByZWZpeDQsICciIGlzIG1pc3NpbmcuJykpOwogIH0KfQpmdW5jdGlvbiBmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4NCkgewogIHZhciBnaXZlblByZWZpeCA9IHByZWZpeDQ7CiAgaWYgKHByZWZpeDQgPT09ICJmYSIgJiYgY29uZmlnMi5zdHlsZURlZmF1bHQgIT09IG51bGwpIHsKICAgIHByZWZpeDQgPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgfQogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICBpZiAoZ2l2ZW5QcmVmaXggPT09ICJmYSIpIHsKICAgICAgdmFyIHNoaW0gPSBieU9sZE5hbWUoaWNvbk5hbWUpIHx8IHt9OwogICAgICBpY29uTmFtZSA9IHNoaW0uaWNvbk5hbWUgfHwgaWNvbk5hbWU7CiAgICAgIHByZWZpeDQgPSBzaGltLnByZWZpeCB8fCBwcmVmaXg0OwogICAgfQogICAgaWYgKGljb25OYW1lICYmIHByZWZpeDQgJiYgc3R5bGVzJDFbcHJlZml4NF0gJiYgc3R5bGVzJDFbcHJlZml4NF1baWNvbk5hbWVdKSB7CiAgICAgIHZhciBpY29uMyA9IHN0eWxlcyQxW3ByZWZpeDRdW2ljb25OYW1lXTsKICAgICAgcmV0dXJuIHJlc29sdmUyKGFzRm91bmRJY29uKGljb24zKSk7CiAgICB9CiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeDQpOwogICAgcmVzb2x2ZTIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluKSwge30sIHsKICAgICAgaWNvbjogY29uZmlnMi5zaG93TWlzc2luZ0ljb25zICYmIGljb25OYW1lID8gY2FsbFByb3ZpZGVkKCJtaXNzaW5nSWNvbkFic3RyYWN0IikgfHwge30gOiB7fQogICAgfSkpOwogIH0pOwp9CmZ1bmN0aW9uIGlzV2F0Y2hlZChub2RlMikgewogIHZhciBpMnN2ZzIgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9GQV9JMlNWRykgOiBudWxsOwogIHJldHVybiB0eXBlb2YgaTJzdmcyID09PSAic3RyaW5nIjsKfQpmdW5jdGlvbiBoYXNQcmVmaXhBbmRJY29uKG5vZGUyKSB7CiAgdmFyIHByZWZpeDQgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpIDogbnVsbDsKICB2YXIgaWNvbjMgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSA6IG51bGw7CiAgcmV0dXJuIHByZWZpeDQgJiYgaWNvbjM7Cn0KZnVuY3Rpb24gaGFzQmVlblJlcGxhY2VkKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyICYmIG5vZGUyLmNsYXNzTGlzdCAmJiBub2RlMi5jbGFzc0xpc3QuY29udGFpbnMgJiYgbm9kZTIuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzcyk7Cn0KZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHsKICBpZiAoY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkgewogICAgcmV0dXJuIG11dGF0b3JzLnJlcGxhY2U7CiAgfQogIHZhciBtdXRhdG9yID0gbXV0YXRvcnNbY29uZmlnMi5hdXRvUmVwbGFjZVN2Z107CiAgcmV0dXJuIG11dGF0b3IgfHwgbXV0YXRvcnMucmVwbGFjZTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlModGFnKSB7CiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCB0YWcpOwp9CmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnKSB7CiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQodGFnKTsKfQpmdW5jdGlvbiBjb252ZXJ0U1ZHKGFic3RyYWN0T2JqKSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJGNlRm4gPSBwYXJhbXMyLmNlRm4sIGNlRm4gPSBfcGFyYW1zJGNlRm4gPT09IHZvaWQgMCA/IGFic3RyYWN0T2JqLnRhZyA9PT0gInN2ZyIgPyBjcmVhdGVFbGVtZW50TlMgOiBjcmVhdGVFbGVtZW50IDogX3BhcmFtcyRjZUZuOwogIGlmICh0eXBlb2YgYWJzdHJhY3RPYmogPT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopOwogIH0KICB2YXIgdGFnID0gY2VGbihhYnN0cmFjdE9iai50YWcpOwogIE9iamVjdC5rZXlzKGFic3RyYWN0T2JqLmF0dHJpYnV0ZXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgdGFnLnNldEF0dHJpYnV0ZShrZXkyLCBhYnN0cmFjdE9iai5hdHRyaWJ1dGVzW2tleTJdKTsKICB9KTsKICB2YXIgY2hpbGRyZW4yID0gYWJzdHJhY3RPYmouY2hpbGRyZW4gfHwgW107CiAgY2hpbGRyZW4yLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHsKICAgIHRhZy5hcHBlbmRDaGlsZChjb252ZXJ0U1ZHKGNoaWxkLCB7CiAgICAgIGNlRm4KICAgIH0pKTsKICB9KTsKICByZXR1cm4gdGFnOwp9CmZ1bmN0aW9uIG5vZGVBc0NvbW1lbnQobm9kZTIpIHsKICB2YXIgY29tbWVudDMgPSAiICIuY29uY2F0KG5vZGUyLm91dGVySFRNTCwgIiAiKTsKICBjb21tZW50MyA9ICIiLmNvbmNhdChjb21tZW50MywgIkZvbnQgQXdlc29tZSBmb250YXdlc29tZS5jb20gIik7CiAgcmV0dXJuIGNvbW1lbnQzOwp9CmZ1bmN0aW9uIHBlcmZvcm1PcGVyYXRpb25TeW5jKG9wKSB7CiAgb3AoKTsKfQpmdW5jdGlvbiBwZXJmb3JtKG11dGF0aW9ucywgY2FsbGJhY2spIHsKICB2YXIgY2FsbGJhY2tGdW5jdGlvbiA9IHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIiA/IGNhbGxiYWNrIDogbm9vcCQyOwogIGlmIChtdXRhdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgfSBlbHNlIHsKICAgIHZhciBmcmFtZSA9IHBlcmZvcm1PcGVyYXRpb25TeW5jOwogICAgaWYgKGNvbmZpZzIubXV0YXRlQXBwcm9hY2ggPT09IE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DKSB7CiAgICAgIGZyYW1lID0gV0lORE9XLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBwZXJmb3JtT3BlcmF0aW9uU3luYzsKICAgIH0KICAgIGZyYW1lKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbXV0YXRvciA9IGdldE11dGF0b3IoKTsKICAgICAgdmFyIG1hcmsyID0gcGVyZi5iZWdpbigibXV0YXRlIik7CiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7CiAgICAgIG1hcmsyKCk7CiAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgIH0pOwogIH0KfQpmdW5jdGlvbiBkaXNhYmxlT2JzZXJ2YXRpb24oKSB7CiAgZGlzYWJsZWQgPSB0cnVlOwp9CmZ1bmN0aW9uIGVuYWJsZU9ic2VydmF0aW9uKCkgewogIGRpc2FibGVkID0gZmFsc2U7Cn0KZnVuY3Rpb24gb2JzZXJ2ZShvcHRpb25zKSB7CiAgaWYgKCFNVVRBVElPTl9PQlNFUlZFUikgewogICAgcmV0dXJuOwogIH0KICBpZiAoIWNvbmZpZzIub2JzZXJ2ZU11dGF0aW9ucykgewogICAgcmV0dXJuOwogIH0KICB2YXIgX29wdGlvbnMkdHJlZUNhbGxiYWNrID0gb3B0aW9ucy50cmVlQ2FsbGJhY2ssIHRyZWVDYWxsYmFjayA9IF9vcHRpb25zJHRyZWVDYWxsYmFjayA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkdHJlZUNhbGxiYWNrLCBfb3B0aW9ucyRub2RlQ2FsbGJhY2sgPSBvcHRpb25zLm5vZGVDYWxsYmFjaywgbm9kZUNhbGxiYWNrID0gX29wdGlvbnMkbm9kZUNhbGxiYWNrID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRub2RlQ2FsbGJhY2ssIF9vcHRpb25zJHBzZXVkb0VsZW1lbiA9IG9wdGlvbnMucHNldWRvRWxlbWVudHNDYWxsYmFjaywgcHNldWRvRWxlbWVudHNDYWxsYmFjayA9IF9vcHRpb25zJHBzZXVkb0VsZW1lbiA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkcHNldWRvRWxlbWVuLCBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPSBvcHRpb25zLm9ic2VydmVNdXRhdGlvbnNSb290LCBvYnNlcnZlTXV0YXRpb25zUm9vdCA9IF9vcHRpb25zJG9ic2VydmVNdXRhdCA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfb3B0aW9ucyRvYnNlcnZlTXV0YXQ7CiAgbW8gPSBuZXcgTVVUQVRJT05fT0JTRVJWRVIoZnVuY3Rpb24ob2JqZWN0cykgewogICAgaWYgKGRpc2FibGVkKSByZXR1cm47CiAgICB2YXIgZGVmYXVsdFByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTsKICAgIHRvQXJyYXkyKG9iamVjdHMpLmZvckVhY2goZnVuY3Rpb24obXV0YXRpb25SZWNvcmQpIHsKICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJjaGlsZExpc3QiICYmIG11dGF0aW9uUmVjb3JkLmFkZGVkTm9kZXMubGVuZ3RoID4gMCAmJiAhaXNXYXRjaGVkKG11dGF0aW9uUmVjb3JkLmFkZGVkTm9kZXNbMF0pKSB7CiAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHMpIHsKICAgICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgdHJlZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7CiAgICAgIH0KICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJhdHRyaWJ1dGVzIiAmJiBtdXRhdGlvblJlY29yZC50YXJnZXQucGFyZW50Tm9kZSAmJiBjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7CiAgICAgICAgcHNldWRvRWxlbWVudHNDYWxsYmFjayhbbXV0YXRpb25SZWNvcmQudGFyZ2V0XSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJhdHRyaWJ1dGVzIiAmJiBpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQudGFyZ2V0KSAmJiB+QVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTi5pbmRleE9mKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT09ICJjbGFzcyIgJiYgaGFzUHJlZml4QW5kSWNvbihtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7CiAgICAgICAgICB2YXIgX2dldENhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKGNsYXNzQXJyYXkobXV0YXRpb25SZWNvcmQudGFyZ2V0KSksIHByZWZpeDQgPSBfZ2V0Q2Fub25pY2FsSWNvbi5wcmVmaXgsIGljb25OYW1lID0gX2dldENhbm9uaWNhbEljb24uaWNvbk5hbWU7CiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXg0IHx8IGRlZmF1bHRQcmVmaXgpOwogICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoaGFzQmVlblJlcGxhY2VkKG11dGF0aW9uUmVjb3JkLnRhcmdldCkpIHsKICAgICAgICAgIG5vZGVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICBtby5vYnNlcnZlKG9ic2VydmVNdXRhdGlvbnNSb290LCB7CiAgICBjaGlsZExpc3Q6IHRydWUsCiAgICBhdHRyaWJ1dGVzOiB0cnVlLAogICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSwKICAgIHN1YnRyZWU6IHRydWUKICB9KTsKfQpmdW5jdGlvbiBkaXNjb25uZWN0KCkgewogIGlmICghbW8pIHJldHVybjsKICBtby5kaXNjb25uZWN0KCk7Cn0KZnVuY3Rpb24gc3R5bGVQYXJzZXIobm9kZTIpIHsKICB2YXIgc3R5bGUgPSBub2RlMi5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CiAgdmFyIHZhbCA9IFtdOwogIGlmIChzdHlsZSkgewogICAgdmFsID0gc3R5bGUuc3BsaXQoIjsiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBzdHlsZTIpIHsKICAgICAgdmFyIHN0eWxlczMgPSBzdHlsZTIuc3BsaXQoIjoiKTsKICAgICAgdmFyIHByb3AgPSBzdHlsZXMzWzBdOwogICAgICB2YXIgdmFsdWUyID0gc3R5bGVzMy5zbGljZSgxKTsKICAgICAgaWYgKHByb3AgJiYgdmFsdWUyLmxlbmd0aCA+IDApIHsKICAgICAgICBhY2NbcHJvcF0gPSB2YWx1ZTIuam9pbigiOiIpLnRyaW0oKTsKICAgICAgfQogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogIH0KICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGNsYXNzUGFyc2VyKG5vZGUyKSB7CiAgdmFyIGV4aXN0aW5nUHJlZml4ID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLXByZWZpeCIpOwogIHZhciBleGlzdGluZ0ljb25OYW1lID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWljb24iKTsKICB2YXIgaW5uZXJUZXh0ID0gbm9kZTIuaW5uZXJUZXh0ICE9PSB2b2lkIDAgPyBub2RlMi5pbm5lclRleHQudHJpbSgpIDogIiI7CiAgdmFyIHZhbCA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShub2RlMikpOwogIGlmICghdmFsLnByZWZpeCkgewogICAgdmFsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTsKICB9CiAgaWYgKGV4aXN0aW5nUHJlZml4ICYmIGV4aXN0aW5nSWNvbk5hbWUpIHsKICAgIHZhbC5wcmVmaXggPSBleGlzdGluZ1ByZWZpeDsKICAgIHZhbC5pY29uTmFtZSA9IGV4aXN0aW5nSWNvbk5hbWU7CiAgfQogIGlmICh2YWwuaWNvbk5hbWUgJiYgdmFsLnByZWZpeCkgewogICAgcmV0dXJuIHZhbDsKICB9CiAgaWYgKHZhbC5wcmVmaXggJiYgaW5uZXJUZXh0Lmxlbmd0aCA+IDApIHsKICAgIHZhbC5pY29uTmFtZSA9IGJ5TGlnYXR1cmUodmFsLnByZWZpeCwgbm9kZTIuaW5uZXJUZXh0KSB8fCBieVVuaWNvZGUodmFsLnByZWZpeCwgdG9IZXgobm9kZTIuaW5uZXJUZXh0KSk7CiAgfQogIGlmICghdmFsLmljb25OYW1lICYmIGNvbmZpZzIuYXV0b0ZldGNoU3ZnICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgIHZhbC5pY29uTmFtZSA9IG5vZGUyLmZpcnN0Q2hpbGQuZGF0YTsKICB9CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUyKSB7CiAgdmFyIGV4dHJhQXR0cmlidXRlcyA9IHRvQXJyYXkyKG5vZGUyLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihhY2MsIGF0dHIpIHsKICAgIGlmIChhY2MubmFtZSAhPT0gImNsYXNzIiAmJiBhY2MubmFtZSAhPT0gInN0eWxlIikgewogICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKICByZXR1cm4gZXh0cmFBdHRyaWJ1dGVzOwp9CmZ1bmN0aW9uIGJsYW5rTWV0YSgpIHsKICByZXR1cm4gewogICAgaWNvbk5hbWU6IG51bGwsCiAgICBwcmVmaXg6IG51bGwsCiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLAogICAgc3ltYm9sOiBmYWxzZSwKICAgIG1hc2s6IHsKICAgICAgaWNvbk5hbWU6IG51bGwsCiAgICAgIHByZWZpeDogbnVsbCwKICAgICAgcmVzdDogW10KICAgIH0sCiAgICBtYXNrSWQ6IG51bGwsCiAgICBleHRyYTogewogICAgICBjbGFzc2VzOiBbXSwKICAgICAgc3R5bGVzOiB7fSwKICAgICAgYXR0cmlidXRlczoge30KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHBhcnNlTWV0YShub2RlMikgewogIHZhciBwYXJzZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHsKICAgIHN0eWxlUGFyc2VyOiB0cnVlCiAgfTsKICB2YXIgX2NsYXNzUGFyc2VyID0gY2xhc3NQYXJzZXIobm9kZTIpLCBpY29uTmFtZSA9IF9jbGFzc1BhcnNlci5pY29uTmFtZSwgcHJlZml4NCA9IF9jbGFzc1BhcnNlci5wcmVmaXgsIGV4dHJhQ2xhc3NlcyA9IF9jbGFzc1BhcnNlci5yZXN0OwogIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUyKTsKICB2YXIgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoInBhcnNlTm9kZUF0dHJpYnV0ZXMiLCB7fSwgbm9kZTIpOwogIHZhciBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUyKSA6IFtdOwogIHJldHVybiBfb2JqZWN0U3ByZWFkMih7CiAgICBpY29uTmFtZSwKICAgIHByZWZpeDogcHJlZml4NCwKICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sCiAgICBtYXNrOiB7CiAgICAgIGljb25OYW1lOiBudWxsLAogICAgICBwcmVmaXg6IG51bGwsCiAgICAgIHJlc3Q6IFtdCiAgICB9LAogICAgbWFza0lkOiBudWxsLAogICAgc3ltYm9sOiBmYWxzZSwKICAgIGV4dHJhOiB7CiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcywKICAgICAgc3R5bGVzOiBleHRyYVN0eWxlcywKICAgICAgYXR0cmlidXRlczogZXh0cmFBdHRyaWJ1dGVzCiAgICB9CiAgfSwgcGx1Z2luTWV0YSk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVNdXRhdGlvbihub2RlMikgewogIHZhciBub2RlTWV0YSA9IGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09ICJuZXN0IiA/IHBhcnNlTWV0YShub2RlMiwgewogICAgc3R5bGVQYXJzZXI6IGZhbHNlCiAgfSkgOiBwYXJzZU1ldGEobm9kZTIpOwogIGlmICh+bm9kZU1ldGEuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKExBWUVSU19URVhUX0NMQVNTTkFNRSkpIHsKICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlTGF5ZXJzVGV4dCIsIG5vZGUyLCBub2RlTWV0YSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbiIsIG5vZGUyLCBub2RlTWV0YSk7CiAgfQp9CmZ1bmN0aW9uIGdldEtub3duUHJlZml4ZXMoKSB7CiAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoWXQpLCBfdG9Db25zdW1hYmxlQXJyYXkoWnQkMSkpOwp9CmZ1bmN0aW9uIG9uVHJlZShyb290NikgewogIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICBpZiAoIUlTX0RPTSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIHZhciBodG1sQ2xhc3NMaXN0ID0gRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdDsKICB2YXIgaGNsQWRkID0gZnVuY3Rpb24gaGNsQWRkMihzdWZmaXgpIHsKICAgIHJldHVybiBodG1sQ2xhc3NMaXN0LmFkZCgiIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCAiLSIpLmNvbmNhdChzdWZmaXgpKTsKICB9OwogIHZhciBoY2xSZW1vdmUgPSBmdW5jdGlvbiBoY2xSZW1vdmUyKHN1ZmZpeCkgewogICAgcmV0dXJuIGh0bWxDbGFzc0xpc3QucmVtb3ZlKCIiLmNvbmNhdChIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MsICItIikuY29uY2F0KHN1ZmZpeCkpOwogIH07CiAgdmFyIHByZWZpeGVzID0gY29uZmlnMi5hdXRvRmV0Y2hTdmcgPyBnZXRLbm93blByZWZpeGVzKCkgOiBRLmNvbmNhdChPYmplY3Qua2V5cyhzdHlsZXMkMikpOwogIGlmICghcHJlZml4ZXMuaW5jbHVkZXMoImZhIikpIHsKICAgIHByZWZpeGVzLnB1c2goImZhIik7CiAgfQogIHZhciBwcmVmaXhlc0RvbVF1ZXJ5ID0gWyIuIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCAiOm5vdChbIikuY29uY2F0KERBVEFfRkFfSTJTVkcsICJdKSIpXS5jb25jYXQocHJlZml4ZXMubWFwKGZ1bmN0aW9uKHAkJDEpIHsKICAgIHJldHVybiAiLiIuY29uY2F0KHAkJDEsICI6bm90KFsiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgIl0pIik7CiAgfSkpLmpvaW4oIiwgIik7CiAgaWYgKHByZWZpeGVzRG9tUXVlcnkubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBjYW5kaWRhdGVzID0gW107CiAgdHJ5IHsKICAgIGNhbmRpZGF0ZXMgPSB0b0FycmF5Mihyb290Ni5xdWVyeVNlbGVjdG9yQWxsKHByZWZpeGVzRG9tUXVlcnkpKTsKICB9IGNhdGNoIChlJCQxKSB7CiAgfQogIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHsKICAgIGhjbEFkZCgicGVuZGluZyIpOwogICAgaGNsUmVtb3ZlKCJjb21wbGV0ZSIpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm9uVHJlZSIpOwogIHZhciBtdXRhdGlvbnMgPSBjYW5kaWRhdGVzLnJlZHVjZShmdW5jdGlvbihhY2MsIG5vZGUyKSB7CiAgICB0cnkgewogICAgICB2YXIgbXV0YXRpb24gPSBnZW5lcmF0ZU11dGF0aW9uKG5vZGUyKTsKICAgICAgaWYgKG11dGF0aW9uKSB7CiAgICAgICAgYWNjLnB1c2gobXV0YXRpb24pOwogICAgICB9CiAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgIGlmICghUFJPRFVDVElPTikgewogICAgICAgIGlmIChlJCQxLm5hbWUgPT09ICJNaXNzaW5nSWNvbiIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSQkMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgUHJvbWlzZS5hbGwobXV0YXRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc29sdmVkTXV0YXRpb25zKSB7CiAgICAgIHBlcmZvcm0ocmVzb2x2ZWRNdXRhdGlvbnMsIGZ1bmN0aW9uKCkgewogICAgICAgIGhjbEFkZCgiYWN0aXZlIik7CiAgICAgICAgaGNsQWRkKCJjb21wbGV0ZSIpOwogICAgICAgIGhjbFJlbW92ZSgicGVuZGluZyIpOwogICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpIGNhbGxiYWNrKCk7CiAgICAgICAgbWFyazIoKTsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9KTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUkJDEpIHsKICAgICAgbWFyazIoKTsKICAgICAgcmVqZWN0KGUkJDEpOwogICAgfSk7CiAgfSk7Cn0KZnVuY3Rpb24gb25Ob2RlKG5vZGUyKSB7CiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBudWxsOwogIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpLnRoZW4oZnVuY3Rpb24obXV0YXRpb24pIHsKICAgIGlmIChtdXRhdGlvbikgewogICAgICBwZXJmb3JtKFttdXRhdGlvbl0sIGNhbGxiYWNrKTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiByZXNvbHZlSWNvbnMobmV4dDIpIHsKICByZXR1cm4gZnVuY3Rpb24obWF5YmVJY29uRGVmaW5pdGlvbikgewogICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgdmFyIGljb25EZWZpbml0aW9uID0gKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pLmljb24gPyBtYXliZUljb25EZWZpbml0aW9uIDogZmluZEljb25EZWZpbml0aW9uKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pOwogICAgdmFyIG1hc2sgPSBwYXJhbXMyLm1hc2s7CiAgICBpZiAobWFzaykgewogICAgICBtYXNrID0gKG1hc2sgfHwge30pLmljb24gPyBtYXNrIDogZmluZEljb25EZWZpbml0aW9uKG1hc2sgfHwge30pOwogICAgfQogICAgcmV0dXJuIG5leHQyKGljb25EZWZpbml0aW9uLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFyYW1zMiksIHt9LCB7CiAgICAgIG1hc2sKICAgIH0pKTsKICB9Owp9CmZ1bmN0aW9uIGhleFZhbHVlRnJvbUNvbnRlbnQoY29udGVudDMpIHsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgcmV0dXJuIHRvSGV4KF90b0NvbnN1bWFibGVBcnJheShjbGVhbmVkKVswXSB8fCAiIik7Cn0KZnVuY3Rpb24gaXNTZWNvbmRhcnlMYXllcihzdHlsZXMzKSB7CiAgdmFyIGhhc1N0eWxpc3RpY1NldCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mZWF0dXJlLXNldHRpbmdzIikuaW5jbHVkZXMoInNzMDEiKTsKICB2YXIgY29udGVudDMgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgdmFyIGNvZGVQb2ludCA9IGNsZWFuZWQuY29kZVBvaW50QXQoMCk7CiAgdmFyIGlzUHJlcGVuZFRlbiA9IGNvZGVQb2ludCA+PSBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRVswXSAmJiBjb2RlUG9pbnQgPD0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMV07CiAgdmFyIGlzRG91YmxlZCA9IGNsZWFuZWQubGVuZ3RoID09PSAyID8gY2xlYW5lZFswXSA9PT0gY2xlYW5lZFsxXSA6IGZhbHNlOwogIHJldHVybiBpc1ByZXBlbmRUZW4gfHwgaXNEb3VibGVkIHx8IGhhc1N0eWxpc3RpY1NldDsKfQpmdW5jdGlvbiBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCkgewogIHZhciBmb250RmFtaWx5U2FuaXRpemVkID0gZm9udEZhbWlseS5yZXBsYWNlKC9eWyciXXxbJyJdJC9nLCAiIikudG9Mb3dlckNhc2UoKTsKICB2YXIgZm9udFdlaWdodEludGVnZXIgPSBwYXJzZUludChmb250V2VpZ2h0KTsKICB2YXIgZm9udFdlaWdodFNhbml0aXplZCA9IGlzTmFOKGZvbnRXZWlnaHRJbnRlZ2VyKSA/ICJub3JtYWwiIDogZm9udFdlaWdodEludGVnZXI7CiAgcmV0dXJuIChGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdIHx8IHt9KVtmb250V2VpZ2h0U2FuaXRpemVkXSB8fCBGT05UX0ZBTUlMWV9XRUlHSFRfRkFMTEJBQ0tbZm9udEZhbWlseVNhbml0aXplZF07Cn0KZnVuY3Rpb24gcmVwbGFjZUZvclBvc2l0aW9uKG5vZGUyLCBwb3NpdGlvbjMpIHsKICB2YXIgcGVuZGluZ0F0dHJpYnV0ZSA9ICIiLmNvbmNhdChEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcpLmNvbmNhdChwb3NpdGlvbjMucmVwbGFjZSgiOiIsICItIikpOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUpICE9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXNvbHZlMigpOwogICAgfQogICAgdmFyIGNoaWxkcmVuMiA9IHRvQXJyYXkyKG5vZGUyLmNoaWxkcmVuKTsKICAgIHZhciBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCA9IGNoaWxkcmVuMi5maWx0ZXIoZnVuY3Rpb24oYyQkMSkgewogICAgICByZXR1cm4gYyQkMS5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgPT09IHBvc2l0aW9uMzsKICAgIH0pWzBdOwogICAgdmFyIHN0eWxlczMgPSBXSU5ET1cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlMiwgcG9zaXRpb24zKTsKICAgIHZhciBmb250RmFtaWx5ID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LWZhbWlseSIpOwogICAgdmFyIGZvbnRGYW1pbHlNYXRjaCA9IGZvbnRGYW1pbHkubWF0Y2goRk9OVF9GQU1JTFlfUEFUVEVSTik7CiAgICB2YXIgZm9udFdlaWdodCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC13ZWlnaHQiKTsKICAgIHZhciBjb250ZW50MyA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpOwogICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50ICYmICFmb250RmFtaWx5TWF0Y2gpIHsKICAgICAgbm9kZTIucmVtb3ZlQ2hpbGQoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpOwogICAgICByZXR1cm4gcmVzb2x2ZTIoKTsKICAgIH0gZWxzZSBpZiAoZm9udEZhbWlseU1hdGNoICYmIGNvbnRlbnQzICE9PSAibm9uZSIgJiYgY29udGVudDMgIT09ICIiKSB7CiAgICAgIHZhciBfY29udGVudDIgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICAgICAgdmFyIHByZWZpeDQgPSBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCk7CiAgICAgIHZhciBoZXhWYWx1ZSA9IGhleFZhbHVlRnJvbUNvbnRlbnQoX2NvbnRlbnQyKTsKICAgICAgdmFyIGlzVjQgPSBmb250RmFtaWx5TWF0Y2hbMF0uc3RhcnRzV2l0aCgiRm9udEF3ZXNvbWUiKTsKICAgICAgdmFyIGlzU2Vjb25kYXJ5ID0gaXNTZWNvbmRhcnlMYXllcihzdHlsZXMzKTsKICAgICAgdmFyIGljb25OYW1lID0gYnlVbmljb2RlKHByZWZpeDQsIGhleFZhbHVlKTsKICAgICAgdmFyIGljb25JZGVudGlmaWVyID0gaWNvbk5hbWU7CiAgICAgIGlmIChpc1Y0KSB7CiAgICAgICAgdmFyIGljb25OYW1lNCA9IGJ5T2xkVW5pY29kZShoZXhWYWx1ZSk7CiAgICAgICAgaWYgKGljb25OYW1lNC5pY29uTmFtZSAmJiBpY29uTmFtZTQucHJlZml4KSB7CiAgICAgICAgICBpY29uTmFtZSA9IGljb25OYW1lNC5pY29uTmFtZTsKICAgICAgICAgIHByZWZpeDQgPSBpY29uTmFtZTQucHJlZml4OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaWNvbk5hbWUgJiYgIWlzU2Vjb25kYXJ5ICYmICghYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSAhPT0gcHJlZml4NCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSAhPT0gaWNvbklkZW50aWZpZXIpKSB7CiAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUsIGljb25JZGVudGlmaWVyKTsKICAgICAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgIG5vZGUyLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgdmFyIG1ldGEgPSBibGFua01ldGEoKTsKICAgICAgICB2YXIgZXh0cmEgPSBtZXRhLmV4dHJhOwogICAgICAgIGV4dHJhLmF0dHJpYnV0ZXNbREFUQV9GQV9QU0VVRE9fRUxFTUVOVF0gPSBwb3NpdGlvbjM7CiAgICAgICAgZmluZEljb24oaWNvbk5hbWUsIHByZWZpeDQpLnRoZW4oZnVuY3Rpb24obWFpbikgewogICAgICAgICAgdmFyIGFic3RyYWN0ID0gbWFrZUlubGluZVN2Z0Fic3RyYWN0KF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZXRhKSwge30sIHsKICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICBtYWluLAogICAgICAgICAgICAgIG1hc2s6IGVtcHR5Q2Fub25pY2FsSWNvbigpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWU6IGljb25JZGVudGlmaWVyLAogICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB2YXIgZWxlbWVudDQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInN2ZyIpOwogICAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gIjo6YmVmb3JlIikgewogICAgICAgICAgICBub2RlMi5pbnNlcnRCZWZvcmUoZWxlbWVudDQsIG5vZGUyLmZpcnN0Q2hpbGQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgICAgICAgfQogICAgICAgICAgZWxlbWVudDQub3V0ZXJIVE1MID0gYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGEkJDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRvSHRtbDIoYSQkMSk7CiAgICAgICAgICB9KS5qb2luKCJcbiIpOwogICAgICAgICAgbm9kZTIucmVtb3ZlQXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUpOwogICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICB9KS5jYXRjaChyZWplY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc29sdmUyKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc29sdmUyKCk7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gcmVwbGFjZTQobm9kZTIpIHsKICByZXR1cm4gUHJvbWlzZS5hbGwoW3JlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgIjo6YmVmb3JlIiksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgIjo6YWZ0ZXIiKV0pOwp9CmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmhlYWQgJiYgIX5UQUdOQU1FU19UT19TS0lQX0ZPUl9QU0VVRE9FTEVNRU5UUy5pbmRleE9mKG5vZGUyLnRhZ05hbWUudG9VcHBlckNhc2UoKSkgJiYgIW5vZGUyLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUyLnBhcmVudE5vZGUgfHwgbm9kZTIucGFyZW50Tm9kZS50YWdOYW1lICE9PSAic3ZnIik7Cn0KZnVuY3Rpb24gc2VhcmNoUHNldWRvRWxlbWVudHMocm9vdDYpIHsKICB2YXIgdXNlQXNOb2RlTGlzdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICB2YXIgbm9kZUxpc3Q7CiAgaWYgKHVzZUFzTm9kZUxpc3QpIHsKICAgIG5vZGVMaXN0ID0gcm9vdDY7CiAgfSBlbHNlIGlmIChjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4pIHsKICAgIG5vZGVMaXN0ID0gcm9vdDYucXVlcnlTZWxlY3RvckFsbCgiKiIpOwogIH0gZWxzZSB7CiAgICB2YXIgc2VsZWN0b3JTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihkb2N1bWVudC5zdHlsZVNoZWV0cyksIF9zdGVwMjsKICAgIHRyeSB7CiAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7ICkgewogICAgICAgIHZhciBzdHlsZXNoZWV0ID0gX3N0ZXAyLnZhbHVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHN0eWxlc2hlZXQuY3NzUnVsZXMpLCBfc3RlcDM7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOyApIHsKICAgICAgICAgICAgICB2YXIgcnVsZSA9IF9zdGVwMy52YWx1ZTsKICAgICAgICAgICAgICB2YXIgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VDU1NSdWxlRm9yUHNldWRvcyhydWxlLnNlbGVjdG9yVGV4dCk7CiAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvcjQgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihwYXJzZWRTZWxlY3RvcnMpLCBfc3RlcDQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yNC5zKCk7ICEoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uKCkpLmRvbmU7ICkgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBfc3RlcDQudmFsdWU7CiAgICAgICAgICAgICAgICAgIHNlbGVjdG9yU2V0LmFkZChzZWxlY3Rvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBfaXRlcmF0b3I0LmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5mKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5lKGVycik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBfaXRlcmF0b3IzLmYoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgICAgICBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogIi5jb25jYXQoc3R5bGVzaGVldC5ocmVmLCAiICgiKS5jb25jYXQoZSQkMS5tZXNzYWdlLCAnKVxuSWYgaXQgZGVjbGFyZXMgYW55IEZvbnQgQXdlc29tZSBDU1MgcHNldWRvLWVsZW1lbnRzLCB0aGV5IHdpbGwgbm90IGJlIHJlbmRlcmVkIGFzIFNWRyBpY29ucy4gQWRkIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHRvIHRoZSA8bGluaz4sIGVuYWJsZSBzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIGZvciBzbG93ZXIgYnV0IG1vcmUgdGhvcm91Z2ggRE9NIHBhcnNpbmcsIG9yIHN1cHByZXNzIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MgdG8gZmFsc2UuJykpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIF9pdGVyYXRvcjIuZShlcnIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICB9CiAgICBpZiAoIXNlbGVjdG9yU2V0LnNpemUpIHJldHVybjsKICAgIHZhciBjbGVhblNlbGVjdG9ycyA9IEFycmF5LmZyb20oc2VsZWN0b3JTZXQpLmpvaW4oIiwgIik7CiAgICB0cnkgewogICAgICBub2RlTGlzdCA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoY2xlYW5TZWxlY3RvcnMpOwogICAgfSBjYXRjaCAoX3VudXNlZCkgewogICAgfQogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgdmFyIG9wZXJhdGlvbnMgPSB0b0FycmF5Mihub2RlTGlzdCkuZmlsdGVyKHByb2Nlc3NhYmxlKS5tYXAocmVwbGFjZTQpOwogICAgdmFyIGVuZDMgPSBwZXJmLmJlZ2luKCJzZWFyY2hQc2V1ZG9FbGVtZW50cyIpOwogICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7CiAgICBQcm9taXNlLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBlbmQzKCk7CiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgIHJlc29sdmUyKCk7CiAgICB9KS5jYXRjaChmdW5jdGlvbigpIHsKICAgICAgZW5kMygpOwogICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICByZWplY3QoKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZpbGxCbGFjayhhYnN0cmFjdCkgewogIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogdHJ1ZTsKICBpZiAoYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsIHx8IGZvcmNlKSkgewogICAgYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsID0gImJsYWNrIjsKICB9CiAgcmV0dXJuIGFic3RyYWN0Owp9CmZ1bmN0aW9uIGRlR3JvdXAoYWJzdHJhY3QpIHsKICBpZiAoYWJzdHJhY3QudGFnID09PSAiZyIpIHsKICAgIHJldHVybiBhYnN0cmFjdC5jaGlsZHJlbjsKICB9IGVsc2UgewogICAgcmV0dXJuIFthYnN0cmFjdF07CiAgfQp9CnZhciBub29wMiwgX1dJTkRPVywgX0RPQ1VNRU5ULCBfTVVUQVRJT05fT0JTRVJWRVIsIF9QRVJGT1JNQU5DRSwgX3JlZiwgX3JlZiR1c2VyQWdlbnQsIHVzZXJBZ2VudCwgV0lORE9XLCBET0NVTUVOVCwgTVVUQVRJT05fT0JTRVJWRVIsIFBFUkZPUk1BTkNFLCBJU19CUk9XU0VSLCBJU19ET00sIElTX0lFLCBfZHQsIEUyLCBfMywgcSwgSDMsIFEsIGkxMCwgdDgsIGQ1LCBsNSwgZjYsIG4xMiwgaDgsIG8xMiwgdTYsIGczLCBzOCwgeTQsIG01LCBlMTAsIHA2LCBhNCwgdzIsIHgyLCBiNCwgYzEwLCBJMiwgRiwgdjQsIFM0LCBBMiwgUDMsIGozLCBCMiwgTjMsIGszLCBEMywgVDIsIEMyLCBXLCBLMiwgUjMsIHJ0LCBkdDIsIGd0LCBDdCwgVXQsIF90LCBZdCwgcXQsIEh0LCBMMiwgcjEwLCBVLCBKLCAkdCwgb2wsIGRsLCBmbCwgdWwsIF9tbCwgbCQxLCBmJDEsIG4kMSwgbyQxLCB1JDEsIHMkMSwgaCQxLCBnJDEsIHkkMSwgZSQxLCBtJDEsIHAkMSwgYSQxLCB3JDEsIGIkMSwgciQxLCBjJDEsIGkkMSwgeCQxLCBJJDEsIEYkMSwgdiQxLCBTJDEsIEEkMSwgUCQxLCBqJDEsIEIkMSwgTiQxLCBrJDEsIEQkMSwgQyQxLCBUJDEsIEwkMSwgVyQxLCBSJDEsIEskMSwgVSQxLCBKJDEsIG1sJDEsIEUkMSwgZCQxLCBfJDEsIE0kMSwgcnQkMSwgJHQkMSwgejIsIEh0JDEsIFkkMSwgWnQkMSwgRyQxLCBPJDEsIFYkMSwgJCQxLCB0bywgcm8sIE5BTUVTUEFDRV9JREVOVElGSUVSLCBVTklUU19JTl9HUklELCBERUZBVUxUX0NTU19QUkVGSVgsIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsIERBVEFfRkFfSTJTVkcsIERBVEFfRkFfUFNFVURPX0VMRU1FTlQsIERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORywgREFUQV9QUkVGSVgsIERBVEFfSUNPTiwgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCBNVVRBVElPTl9BUFBST0FDSF9BU1lOQywgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMsIFBTRVVET19FTEVNRU5UUywgUFJPRFVDVElPTiwgX1BSRUZJWF9UT19TVFlMRSwgUFJFRklYX1RPX1NUWUxFLCBfU1RZTEVfVE9fUFJFRklYLCBTVFlMRV9UT19QUkVGSVgsIF9QUkVGSVhfVE9fTE9OR19TVFlMRSwgUFJFRklYX1RPX0xPTkdfU1RZTEUsIF9MT05HX1NUWUxFX1RPX1BSRUZJWCwgTE9OR19TVFlMRV9UT19QUkVGSVgsIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOLCBMQVlFUlNfVEVYVF9DTEFTU05BTUUsIEZPTlRfRkFNSUxZX1BBVFRFUk4sIF9GT05UX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfV0VJR0hUX1RPX1BSRUZJWCwgQVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTiwgRFVPVE9ORV9DTEFTU0VTLCBSRVNFUlZFRF9DTEFTU0VTLCBpbml0aWFsLCBfZGVmYXVsdCwgX2NvbmZpZywgY29uZmlnMiwgX29uQ2hhbmdlQ2IsIGQkMiwgbWVhbmluZ2xlc3NUcmFuc2Zvcm0sIGlkUG9vbCwgYmFzZVN0eWxlcywgX2Nzc0luc2VydGVkLCBJbmplY3RDU1MsIHckMiwgbmFtZXNwYWNlLCBmdW5jdGlvbnMsIF9saXN0ZW5lciwgbG9hZGVkLCBiaW5kSW50ZXJuYWw0LCByZWR1Y2UzLCBNT05PLCBEVU8sIG1vZGVybk1hdGNoZXMsIGxlZ2FjeU1hdGNoZXMsIHN0eWxlczIsIHNoaW1zLCBGQU1JTFlfTkFNRVMsIFBSRUZJWEVTX0ZPUl9GQU1JTFksIF9kZWZhdWx0VXNhYmxlUHJlZml4LCBfYnlVbmljb2RlLCBfYnlMaWdhdHVyZSwgX2J5T2xkTmFtZSwgX2J5T2xkVW5pY29kZSwgX2J5QWxpYXMsIGJ1aWxkLCBlbXB0eUNhbm9uaWNhbEljb24sIF9mYUNvbWJpbmVkQ2xhc3NlcywgbmV3Q2Fub25pY2FsRmFtaWxpZXMsIG5ld0Nhbm9uaWNhbFN0eWxlcywgTGlicmFyeSwgX3BsdWdpbnMsIF9ob29rcywgcHJvdmlkZXJzLCBkZWZhdWx0UHJvdmlkZXJLZXlzLCBsaWJyYXJ5LCBub0F1dG8sIGRvbSwgcGFyc2U3LCBhcGksIGF1dG9SZXBsYWNlLCBzdHlsZXMkMSwgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4sIG5vb3AkMSwgcCQyLCBwcmVhbWJsZSwgYmVnaW4sIGVuZCwgcGVyZiwgbm9vcCQyLCBtdXRhdG9ycywgZGlzYWJsZWQsIG1vLCBzdHlsZXMkMiwgcmVuZGVyLCBSZXBsYWNlRWxlbWVudHMsIExheWVycywgTGF5ZXJzQ291bnRlciwgTGF5ZXJzVGV4dCwgQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSwgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9GQUxMQkFDSywgaGFzUHNldWRvRWxlbWVudCwgcGFyc2VDU1NSdWxlRm9yUHNldWRvcywgUHNldWRvRWxlbWVudHMsIF91bndhdGNoZWQsIE11dGF0aW9uT2JzZXJ2ZXIkMSwgcGFyc2VUcmFuc2Zvcm1TdHJpbmcsIFBvd2VyVHJhbnNmb3JtcywgQUxMX1NQQUNFLCBNYXNrcywgTWlzc2luZ0ljb25JbmRpY2F0b3IsIFN2Z1N5bWJvbHMsIHBsdWdpbnMsIG5vQXV0byQxLCBjb25maWckMSwgbGlicmFyeSQxLCBkb20kMSwgcGFyc2UkMSwgZmluZEljb25EZWZpbml0aW9uJDEsIHRvSHRtbCQxLCBpY29uMiwgbGF5ZXIsIHRleHQ4LCBjb3VudGVyLCBhdHRyczsKdmFyIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZm9udGF3ZXNvbWUtc3ZnLWNvcmVANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMiKCkgewogICAgbm9vcDIgPSBmdW5jdGlvbiBub29wMygpIHsKICAgIH07CiAgICBfV0lORE9XID0ge307CiAgICBfRE9DVU1FTlQgPSB7fTsKICAgIF9NVVRBVElPTl9PQlNFUlZFUiA9IG51bGw7CiAgICBfUEVSRk9STUFOQ0UgPSB7CiAgICAgIG1hcms6IG5vb3AyLAogICAgICBtZWFzdXJlOiBub29wMgogICAgfTsKICAgIHRyeSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgX1dJTkRPVyA9IHdpbmRvdzsKICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gInVuZGVmaW5lZCIpIF9ET0NVTUVOVCA9IGRvY3VtZW50OwogICAgICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICJ1bmRlZmluZWQiKSBfTVVUQVRJT05fT0JTRVJWRVIgPSBNdXRhdGlvbk9ic2VydmVyOwogICAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAidW5kZWZpbmVkIikgX1BFUkZPUk1BTkNFID0gcGVyZm9ybWFuY2U7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgIH0KICAgIF9yZWYgPSBfV0lORE9XLm5hdmlnYXRvciB8fCB7fSwgX3JlZiR1c2VyQWdlbnQgPSBfcmVmLnVzZXJBZ2VudCwgdXNlckFnZW50ID0gX3JlZiR1c2VyQWdlbnQgPT09IHZvaWQgMCA/ICIiIDogX3JlZiR1c2VyQWdlbnQ7CiAgICBXSU5ET1cgPSBfV0lORE9XOwogICAgRE9DVU1FTlQgPSBfRE9DVU1FTlQ7CiAgICBNVVRBVElPTl9PQlNFUlZFUiA9IF9NVVRBVElPTl9PQlNFUlZFUjsKICAgIFBFUkZPUk1BTkNFID0gX1BFUkZPUk1BTkNFOwogICAgSVNfQlJPV1NFUiA9ICEhV0lORE9XLmRvY3VtZW50OwogICAgSVNfRE9NID0gISFET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQgJiYgISFET0NVTUVOVC5oZWFkICYmIHR5cGVvZiBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBET0NVTUVOVC5jcmVhdGVFbGVtZW50ID09PSAiZnVuY3Rpb24iOwogICAgSVNfSUUgPSB+dXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSB8fCB+dXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQvIik7CiAgICBFMiA9IC9mYShrfGtkfHN8cnxsfHR8ZHxkcnxkbHxkdHxifHNscnxzbHByfHdzYnx0bHxuc3xuZHN8ZXN8anJ8amZyfGpkcnx1c2J8dWZzYnx1ZHNifGNyfHNzfHNyfHNsfHN0fHNkc3xzZHJ8c2RsfHNkdCk/W1wtXCBdLywgXzMgPSAvRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxXaGl0ZWJvYXJkKT8uKi9pOwogICAgcSA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhczogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iLAogICAgICAgIGZhYjogImJyYW5kcyIsCiAgICAgICAgImZhLWJyYW5kcyI6ICJicmFuZHMiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYWQ6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICAiZmEtZHVvdG9uZSI6ICJzb2xpZCIsCiAgICAgICAgZmFkcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhZGw6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYWR0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYXNzOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFzcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2w6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXN0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFzZHM6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYXNkcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2RsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFzZHQ6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzbHI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNscHI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXRsOiAibGlnaHQiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhd3NiOiAic2VtaWJvbGQiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFuczogInNvbGlkIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhbmRzOiAic29saWQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhZXM6ICJzb2xpZCIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWpyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFqZnI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhamRyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFjcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdXNiOiAic2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdWRzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJzZW1pYm9sZCIsCiAgICAgICAgZmF1ZnNiOiAic2VtaWJvbGQiCiAgICAgIH0KICAgIH0sIEgzID0gewogICAgICBHUk9VUDogImR1b3RvbmUtZ3JvdXAiLAogICAgICBTV0FQX09QQUNJVFk6ICJzd2FwLW9wYWNpdHkiLAogICAgICBQUklNQVJZOiAicHJpbWFyeSIsCiAgICAgIFNFQ09OREFSWTogInNlY29uZGFyeSIKICAgIH0sIFEgPSBbImZhLWNsYXNzaWMiLCAiZmEtZHVvdG9uZSIsICJmYS1zaGFycCIsICJmYS1zaGFycC1kdW90b25lIiwgImZhLXRodW1icHJpbnQiLCAiZmEtd2hpdGVib2FyZCIsICJmYS1ub3Rkb2ciLCAiZmEtbm90ZG9nLWR1byIsICJmYS1jaGlzZWwiLCAiZmEtZXRjaCIsICJmYS1qZWxseSIsICJmYS1qZWxseS1maWxsIiwgImZhLWplbGx5LWR1byIsICJmYS1zbGFiIiwgImZhLXNsYWItcHJlc3MiLCAiZmEtdXRpbGl0eSIsICJmYS11dGlsaXR5LWR1byIsICJmYS11dGlsaXR5LWZpbGwiXTsKICAgIGkxMCA9ICJjbGFzc2ljIiwgdDggPSAiZHVvdG9uZSIsIGQ1ID0gInNoYXJwIiwgbDUgPSAic2hhcnAtZHVvdG9uZSIsIGY2ID0gImNoaXNlbCIsIG4xMiA9ICJldGNoIiwgaDggPSAiamVsbHkiLCBvMTIgPSAiamVsbHktZHVvIiwgdTYgPSAiamVsbHktZmlsbCIsIGczID0gIm5vdGRvZyIsIHM4ID0gIm5vdGRvZy1kdW8iLCB5NCA9ICJzbGFiIiwgbTUgPSAic2xhYi1wcmVzcyIsIGUxMCA9ICJ0aHVtYnByaW50IiwgcDYgPSAidXRpbGl0eSIsIGE0ID0gInV0aWxpdHktZHVvIiwgdzIgPSAidXRpbGl0eS1maWxsIiwgeDIgPSAid2hpdGVib2FyZCIsIGI0ID0gIkNsYXNzaWMiLCBjMTAgPSAiRHVvdG9uZSIsIEkyID0gIlNoYXJwIiwgRiA9ICJTaGFycCBEdW90b25lIiwgdjQgPSAiQ2hpc2VsIiwgUzQgPSAiRXRjaCIsIEEyID0gIkplbGx5IiwgUDMgPSAiSmVsbHkgRHVvIiwgajMgPSAiSmVsbHkgRmlsbCIsIEIyID0gIk5vdGRvZyIsIE4zID0gIk5vdGRvZyBEdW8iLCBrMyA9ICJTbGFiIiwgRDMgPSAiU2xhYiBQcmVzcyIsIFQyID0gIlRodW1icHJpbnQiLCBDMiA9ICJVdGlsaXR5IiwgVyA9ICJVdGlsaXR5IER1byIsIEsyID0gIlV0aWxpdHkgRmlsbCIsIFIzID0gIldoaXRlYm9hcmQiLCBydCA9IFtpMTAsIHQ4LCBkNSwgbDUsIGY2LCBuMTIsIGg4LCBvMTIsIHU2LCBnMywgczgsIHk0LCBtNSwgZTEwLCBwNiwgYTQsIHcyLCB4Ml0sIGR0MiA9IChfZHQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kdCwgaTEwLCBiNCksIHQ4LCBjMTApLCBkNSwgSTIpLCBsNSwgRiksIGY2LCB2NCksIG4xMiwgUzQpLCBoOCwgQTIpLCBvMTIsIFAzKSwgdTYsIGozKSwgZzMsIEIyKSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZHQsIHM4LCBOMyksIHk0LCBrMyksIG01LCBEMyksIGUxMCwgVDIpLCBwNiwgQzIpLCBhNCwgVyksIHcyLCBLMiksIHgyLCBSMykpOwogICAgZ3QgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiLAogICAgICAgIDEwMDogImZhdCIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgIDkwMDogImZhZCIsCiAgICAgICAgNDAwOiAiZmFkciIsCiAgICAgICAgMzAwOiAiZmFkbCIsCiAgICAgICAgMTAwOiAiZmFkdCIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICA5MDA6ICJmYXNzIiwKICAgICAgICA0MDA6ICJmYXNyIiwKICAgICAgICAzMDA6ICJmYXNsIiwKICAgICAgICAxMDA6ICJmYXN0IgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICA5MDA6ICJmYXNkcyIsCiAgICAgICAgNDAwOiAiZmFzZHIiLAogICAgICAgIDMwMDogImZhc2RsIiwKICAgICAgICAxMDA6ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgIDQwMDogImZhc2xyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICA0MDA6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICA2MDA6ICJmYXdzYiIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIDMwMDogImZhdGwiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgIDkwMDogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIDkwMDogImZhbmRzIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgOTAwOiAiZmFlcyIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgNDAwOiAiZmFjciIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICA0MDA6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICA0MDA6ICJmYWpmciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICA0MDA6ICJmYWpkciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIDYwMDogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgNjAwOiAiZmF1ZHNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgIDYwMDogImZhdWZzYiIKICAgICAgfQogICAgfTsKICAgIEN0ID0gewogICAgICAiRm9udCBBd2Vzb21lIDcgRnJlZSI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFBybyI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiLAogICAgICAgIDEwMDogImZhdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEJyYW5kcyI6IHsKICAgICAgICA0MDA6ICJmYWIiLAogICAgICAgIG5vcm1hbDogImZhYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFkIiwKICAgICAgICA0MDA6ICJmYWRyIiwKICAgICAgICBub3JtYWw6ICJmYWRyIiwKICAgICAgICAzMDA6ICJmYWRsIiwKICAgICAgICAxMDA6ICJmYWR0IgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOiB7CiAgICAgICAgOTAwOiAiZmFzcyIsCiAgICAgICAgNDAwOiAiZmFzciIsCiAgICAgICAgbm9ybWFsOiAiZmFzciIsCiAgICAgICAgMzAwOiAiZmFzbCIsCiAgICAgICAgMTAwOiAiZmFzdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFzZHMiLAogICAgICAgIDQwMDogImZhc2RyIiwKICAgICAgICBub3JtYWw6ICJmYXNkciIsCiAgICAgICAgMzAwOiAiZmFzZGwiLAogICAgICAgIDEwMDogImZhc2R0IgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgSmVsbHkiOiB7CiAgICAgICAgNDAwOiAiZmFqciIsCiAgICAgICAgbm9ybWFsOiAiZmFqciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IEZpbGwiOiB7CiAgICAgICAgNDAwOiAiZmFqZnIiLAogICAgICAgIG5vcm1hbDogImZhamZyIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjogewogICAgICAgIDQwMDogImZhamRyIiwKICAgICAgICBub3JtYWw6ICJmYWpkciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNsYWIiOiB7CiAgICAgICAgNDAwOiAiZmFzbHIiLAogICAgICAgIG5vcm1hbDogImZhc2xyIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyI6IHsKICAgICAgICA0MDA6ICJmYXNscHIiLAogICAgICAgIG5vcm1hbDogImZhc2xwciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOiB7CiAgICAgICAgMzAwOiAiZmF0bCIsCiAgICAgICAgbm9ybWFsOiAiZmF0bCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI6IHsKICAgICAgICA5MDA6ICJmYW5zIiwKICAgICAgICBub3JtYWw6ICJmYW5zIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byI6IHsKICAgICAgICA5MDA6ICJmYW5kcyIsCiAgICAgICAgbm9ybWFsOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBFdGNoIjogewogICAgICAgIDkwMDogImZhZXMiLAogICAgICAgIG5vcm1hbDogImZhZXMiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOiB7CiAgICAgICAgNDAwOiAiZmFjciIsCiAgICAgICAgbm9ybWFsOiAiZmFjciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFdoaXRlYm9hcmQiOiB7CiAgICAgICAgNjAwOiAiZmF3c2IiLAogICAgICAgIG5vcm1hbDogImZhd3NiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSI6IHsKICAgICAgICA2MDA6ICJmYXVzYiIsCiAgICAgICAgbm9ybWFsOiAiZmF1c2IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6IHsKICAgICAgICA2MDA6ICJmYXVkc2IiLAogICAgICAgIG5vcm1hbDogImZhdWRzYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRmlsbCI6IHsKICAgICAgICA2MDA6ICJmYXVmc2IiLAogICAgICAgIG5vcm1hbDogImZhdWZzYiIKICAgICAgfQogICAgfTsKICAgIFV0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1siY2xhc3NpYyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIiwgImJyYW5kcyJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbImR1b3RvbmUiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFkIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNoYXJwIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc3MiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsic2hhcnAtZHVvdG9uZSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNkcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJjaGlzZWwiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFjciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJldGNoIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhZXMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJqZWxseSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbImplbGx5LWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpkciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJqZWxseS1maWxsIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhamZyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbIm5vdGRvZyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYW5zIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsibm90ZG9nLWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYW5kcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNsYWIiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzbHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsic2xhYi1wcmVzcyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNscHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsidGh1bWJwcmludCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXRsIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJsaWdodCIsCiAgICAgIHN0eWxlSWRzOiBbImxpZ2h0Il0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDMwMAogICAgfV0sIFsidXRpbGl0eSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dLCBbInV0aWxpdHktZHVvIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhdWRzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dLCBbInV0aWxpdHktZmlsbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVmc2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ3aGl0ZWJvYXJkIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhd3NiIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzZW1pYm9sZCIsCiAgICAgIHN0eWxlSWRzOiBbInNlbWlib2xkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDYwMAogICAgfV1dKSwgX3QgPSB7CiAgICAgIGNoaXNlbDogewogICAgICAgIHJlZ3VsYXI6ICJmYWNyIgogICAgICB9LAogICAgICBjbGFzc2ljOiB7CiAgICAgICAgYnJhbmRzOiAiZmFiIiwKICAgICAgICBsaWdodDogImZhbCIsCiAgICAgICAgcmVndWxhcjogImZhciIsCiAgICAgICAgc29saWQ6ICJmYXMiLAogICAgICAgIHRoaW46ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICBsaWdodDogImZhZGwiLAogICAgICAgIHJlZ3VsYXI6ICJmYWRyIiwKICAgICAgICBzb2xpZDogImZhZCIsCiAgICAgICAgdGhpbjogImZhZHQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICBzb2xpZDogImZhZXMiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgcmVndWxhcjogImZhanIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgcmVndWxhcjogImZhamRyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICByZWd1bGFyOiAiZmFqZnIiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgIHNvbGlkOiAiZmFucyIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgc29saWQ6ICJmYW5kcyIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICBsaWdodDogImZhc2wiLAogICAgICAgIHJlZ3VsYXI6ICJmYXNyIiwKICAgICAgICBzb2xpZDogImZhc3MiLAogICAgICAgIHRoaW46ICJmYXN0IgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICBsaWdodDogImZhc2RsIiwKICAgICAgICByZWd1bGFyOiAiZmFzZHIiLAogICAgICAgIHNvbGlkOiAiZmFzZHMiLAogICAgICAgIHRoaW46ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgIHJlZ3VsYXI6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgcmVndWxhcjogImZhc2xwciIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIGxpZ2h0OiAiZmF0bCIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIHNlbWlib2xkOiAiZmF1c2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICBzZW1pYm9sZDogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICBzZW1pYm9sZDogImZhdWZzYiIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgIHNlbWlib2xkOiAiZmF3c2IiCiAgICAgIH0KICAgIH07CiAgICBZdCA9IFsiZmFrIiwgImZhLWtpdCIsICJmYWtkIiwgImZhLWtpdC1kdW90b25lIl0sIHF0ID0gewogICAgICBraXQ6IHsKICAgICAgICBmYWs6ICJraXQiLAogICAgICAgICJmYS1raXQiOiAia2l0IgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgZmFrZDogImtpdC1kdW90b25lIiwKICAgICAgICAiZmEta2l0LWR1b3RvbmUiOiAia2l0LWR1b3RvbmUiCiAgICAgIH0KICAgIH0sIEh0ID0gWyJraXQiXTsKICAgIEwyID0gImtpdCIsIHIxMCA9ICJraXQtZHVvdG9uZSIsIFUgPSAiS2l0IiwgSiA9ICJLaXQgRHVvdG9uZSIsICR0ID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgTDIsIFUpLCByMTAsIEopOwogICAgb2wgPSB7CiAgICAgIGtpdDogewogICAgICAgICJmYS1raXQiOiAiZmFrIgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImZha2QiCiAgICAgIH0KICAgIH07CiAgICBkbCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSBLaXQiOiB7CiAgICAgICAgNDAwOiAiZmFrIiwKICAgICAgICBub3JtYWw6ICJmYWsiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgS2l0IER1b3RvbmUiOiB7CiAgICAgICAgNDAwOiAiZmFrZCIsCiAgICAgICAgbm9ybWFsOiAiZmFrZCIKICAgICAgfQogICAgfSwgZmwgPSB7CiAgICAgIGtpdDogewogICAgICAgIGZhazogImZhLWtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJmYS1raXQtZHVvdG9uZSIKICAgICAgfQogICAgfTsKICAgIHVsID0gewogICAgICBraXQ6IHsKICAgICAgICBraXQ6ICJmYWsiCiAgICAgIH0sCiAgICAgICJraXQtZHVvdG9uZSI6IHsKICAgICAgICAia2l0LWR1b3RvbmUiOiAiZmFrZCIKICAgICAgfQogICAgfTsKICAgIGwkMSA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBmJDEgPSBbImZhLWNsYXNzaWMiLCAiZmEtZHVvdG9uZSIsICJmYS1zaGFycCIsICJmYS1zaGFycC1kdW90b25lIiwgImZhLXRodW1icHJpbnQiLCAiZmEtd2hpdGVib2FyZCIsICJmYS1ub3Rkb2ciLCAiZmEtbm90ZG9nLWR1byIsICJmYS1jaGlzZWwiLCAiZmEtZXRjaCIsICJmYS1qZWxseSIsICJmYS1qZWxseS1maWxsIiwgImZhLWplbGx5LWR1byIsICJmYS1zbGFiIiwgImZhLXNsYWItcHJlc3MiLCAiZmEtdXRpbGl0eSIsICJmYS11dGlsaXR5LWR1byIsICJmYS11dGlsaXR5LWZpbGwiXTsKICAgIG4kMSA9ICJjbGFzc2ljIiwgbyQxID0gImR1b3RvbmUiLCB1JDEgPSAic2hhcnAiLCBzJDEgPSAic2hhcnAtZHVvdG9uZSIsIGgkMSA9ICJjaGlzZWwiLCBnJDEgPSAiZXRjaCIsIHkkMSA9ICJqZWxseSIsIGUkMSA9ICJqZWxseS1kdW8iLCBtJDEgPSAiamVsbHktZmlsbCIsIHAkMSA9ICJub3Rkb2ciLCBhJDEgPSAibm90ZG9nLWR1byIsIHckMSA9ICJzbGFiIiwgYiQxID0gInNsYWItcHJlc3MiLCByJDEgPSAidGh1bWJwcmludCIsIGMkMSA9ICJ1dGlsaXR5IiwgaSQxID0gInV0aWxpdHktZHVvIiwgeCQxID0gInV0aWxpdHktZmlsbCIsIEkkMSA9ICJ3aGl0ZWJvYXJkIiwgRiQxID0gIkNsYXNzaWMiLCB2JDEgPSAiRHVvdG9uZSIsIFMkMSA9ICJTaGFycCIsIEEkMSA9ICJTaGFycCBEdW90b25lIiwgUCQxID0gIkNoaXNlbCIsIGokMSA9ICJFdGNoIiwgQiQxID0gIkplbGx5IiwgTiQxID0gIkplbGx5IER1byIsIGskMSA9ICJKZWxseSBGaWxsIiwgRCQxID0gIk5vdGRvZyIsIEMkMSA9ICJOb3Rkb2cgRHVvIiwgVCQxID0gIlNsYWIiLCBMJDEgPSAiU2xhYiBQcmVzcyIsIFckMSA9ICJUaHVtYnByaW50IiwgUiQxID0gIlV0aWxpdHkiLCBLJDEgPSAiVXRpbGl0eSBEdW8iLCBVJDEgPSAiVXRpbGl0eSBGaWxsIiwgSiQxID0gIldoaXRlYm9hcmQiLCBtbCQxID0gKF9tbCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21sLCBuJDEsIEYkMSksIG8kMSwgdiQxKSwgdSQxLCBTJDEpLCBzJDEsIEEkMSksIGgkMSwgUCQxKSwgZyQxLCBqJDEpLCB5JDEsIEIkMSksIGUkMSwgTiQxKSwgbSQxLCBrJDEpLCBwJDEsIEQkMSksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21sLCBhJDEsIEMkMSksIHckMSwgVCQxKSwgYiQxLCBMJDEpLCByJDEsIFckMSksIGMkMSwgUiQxKSwgaSQxLCBLJDEpLCB4JDEsIFUkMSksIEkkMSwgSiQxKSk7CiAgICBFJDEgPSAia2l0IiwgZCQxID0gImtpdC1kdW90b25lIiwgXyQxID0gIktpdCIsIE0kMSA9ICJLaXQgRHVvdG9uZSIsIHJ0JDEgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBFJDEsIF8kMSksIGQkMSwgTSQxKTsKICAgICR0JDEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICAiZmEtYnJhbmRzIjogImZhYiIsCiAgICAgICAgImZhLWR1b3RvbmUiOiAiZmFkIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFsIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXIiLAogICAgICAgICJmYS1zb2xpZCI6ICJmYXMiLAogICAgICAgICJmYS10aGluIjogImZhdCIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhZHIiLAogICAgICAgICJmYS1saWdodCI6ICJmYWRsIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYWR0IgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgICJmYS1zb2xpZCI6ICJmYXNzIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNyIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFzbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhc2RzIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNkciIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhc2RsIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhc2xyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAiZmF3c2IiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICAiZmEtbGlnaHQiOiAiZmF0bCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgICJmYS1zb2xpZCI6ICJmYW5kcyIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgICJmYS1zb2xpZCI6ICJmYWVzIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhanIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhamZyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhamRyIgogICAgICB9LAogICAgICBjaGlzZWw6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWNyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAiZmF1ZnNiIgogICAgICB9CiAgICB9LCB6MiA9IHsKICAgICAgY2xhc3NpYzogWyJmYXMiLCAiZmFyIiwgImZhbCIsICJmYXQiLCAiZmFkIl0sCiAgICAgIGR1b3RvbmU6IFsiZmFkciIsICJmYWRsIiwgImZhZHQiXSwKICAgICAgc2hhcnA6IFsiZmFzcyIsICJmYXNyIiwgImZhc2wiLCAiZmFzdCJdLAogICAgICAic2hhcnAtZHVvdG9uZSI6IFsiZmFzZHMiLCAiZmFzZHIiLCAiZmFzZGwiLCAiZmFzZHQiXSwKICAgICAgc2xhYjogWyJmYXNsciJdLAogICAgICAic2xhYi1wcmVzcyI6IFsiZmFzbHByIl0sCiAgICAgIHdoaXRlYm9hcmQ6IFsiZmF3c2IiXSwKICAgICAgdGh1bWJwcmludDogWyJmYXRsIl0sCiAgICAgIG5vdGRvZzogWyJmYW5zIl0sCiAgICAgICJub3Rkb2ctZHVvIjogWyJmYW5kcyJdLAogICAgICBldGNoOiBbImZhZXMiXSwKICAgICAgamVsbHk6IFsiZmFqciJdLAogICAgICAiamVsbHktZmlsbCI6IFsiZmFqZnIiXSwKICAgICAgImplbGx5LWR1byI6IFsiZmFqZHIiXSwKICAgICAgY2hpc2VsOiBbImZhY3IiXSwKICAgICAgdXRpbGl0eTogWyJmYXVzYiJdLAogICAgICAidXRpbGl0eS1kdW8iOiBbImZhdWRzYiJdLAogICAgICAidXRpbGl0eS1maWxsIjogWyJmYXVmc2IiXQogICAgfSwgSHQkMSA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgIGZhYjogImZhLWJyYW5kcyIsCiAgICAgICAgZmFkOiAiZmEtZHVvdG9uZSIsCiAgICAgICAgZmFsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhczogImZhLXNvbGlkIiwKICAgICAgICBmYXQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgZmFkcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhZGw6ICJmYS1saWdodCIsCiAgICAgICAgZmFkdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgZmFzczogImZhLXNvbGlkIiwKICAgICAgICBmYXNyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFzbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXN0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgZmFzZHM6ICJmYS1zb2xpZCIsCiAgICAgICAgZmFzZHI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYXNkbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXNkdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICBmYXNscjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIGZhc2xwcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICBmYXdzYjogImZhLXNlbWlib2xkIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgZmF0bDogImZhLWxpZ2h0IgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICBmYW5zOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIGZhbmRzOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICBmYWVzOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgZmFqcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgIGZhamZyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICBmYWpkcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgIGZhY3I6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgZmF1c2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgIGZhdWRzYjogImZhLXNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgIGZhdWZzYjogImZhLXNlbWlib2xkIgogICAgICB9CiAgICB9LCBZJDEgPSBbImZhLXNvbGlkIiwgImZhLXJlZ3VsYXIiLCAiZmEtbGlnaHQiLCAiZmEtdGhpbiIsICJmYS1kdW90b25lIiwgImZhLWJyYW5kcyIsICJmYS1zZW1pYm9sZCJdLCBadCQxID0gWyJmYSIsICJmYXMiLCAiZmFyIiwgImZhbCIsICJmYXQiLCAiZmFkIiwgImZhZHIiLCAiZmFkbCIsICJmYWR0IiwgImZhYiIsICJmYXNzIiwgImZhc3IiLCAiZmFzbCIsICJmYXN0IiwgImZhc2RzIiwgImZhc2RyIiwgImZhc2RsIiwgImZhc2R0IiwgImZhc2xyIiwgImZhc2xwciIsICJmYXdzYiIsICJmYXRsIiwgImZhbnMiLCAiZmFuZHMiLCAiZmFlcyIsICJmYWpyIiwgImZhamZyIiwgImZhamRyIiwgImZhY3IiLCAiZmF1c2IiLCAiZmF1ZHNiIiwgImZhdWZzYiJdLmNvbmNhdChmJDEsIFkkMSksIEckMSA9IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIiwgImR1b3RvbmUiLCAiYnJhbmRzIiwgInNlbWlib2xkIl0sIE8kMSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0sIFYkMSA9IE8kMS5jb25jYXQoWzExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSksICQkMSA9IFsiYXciLCAiZnciLCAicHVsbC1sZWZ0IiwgInB1bGwtcmlnaHQiXSwgdG8gPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKHoyKSksIEckMSwgJCQxLCBbIjJ4cyIsICJ4cyIsICJzbSIsICJsZyIsICJ4bCIsICIyeGwiLCAiYmVhdCIsICJib3JkZXIiLCAiZmFkZSIsICJiZWF0LWZhZGUiLCAiYm91bmNlIiwgImZsaXAtYm90aCIsICJmbGlwLWhvcml6b250YWwiLCAiZmxpcC12ZXJ0aWNhbCIsICJmbGlwIiwgImludmVyc2UiLCAibGF5ZXJzIiwgImxheWVycy1ib3R0b20tbGVmdCIsICJsYXllcnMtYm90dG9tLXJpZ2h0IiwgImxheWVycy1jb3VudGVyIiwgImxheWVycy10ZXh0IiwgImxheWVycy10b3AtbGVmdCIsICJsYXllcnMtdG9wLXJpZ2h0IiwgImxpIiwgInB1bGwtZW5kIiwgInB1bGwtc3RhcnQiLCAicHVsc2UiLCAicm90YXRlLTE4MCIsICJyb3RhdGUtMjcwIiwgInJvdGF0ZS05MCIsICJyb3RhdGUtYnkiLCAic2hha2UiLCAic3Bpbi1wdWxzZSIsICJzcGluLXJldmVyc2UiLCAic3BpbiIsICJzdGFjay0xeCIsICJzdGFjay0yeCIsICJzdGFjayIsICJ1bCIsICJ3aWR0aC1hdXRvIiwgIndpZHRoLWZpeGVkIiwgbCQxLkdST1VQLCBsJDEuU1dBUF9PUEFDSVRZLCBsJDEuUFJJTUFSWSwgbCQxLlNFQ09OREFSWV0pLmNvbmNhdChPJDEubWFwKGZ1bmN0aW9uKHQ5KSB7CiAgICAgIHJldHVybiAiIi5jb25jYXQodDksICJ4Iik7CiAgICB9KSkuY29uY2F0KFYkMS5tYXAoZnVuY3Rpb24odDkpIHsKICAgICAgcmV0dXJuICJ3LSIuY29uY2F0KHQ5KTsKICAgIH0pKTsKICAgIHJvID0gewogICAgICAiRm9udCBBd2Vzb21lIDUgRnJlZSI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA1IFBybyI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBCcmFuZHMiOiB7CiAgICAgICAgNDAwOiAiZmFiIiwKICAgICAgICBub3JtYWw6ICJmYWIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBEdW90b25lIjogewogICAgICAgIDkwMDogImZhZCIKICAgICAgfQogICAgfTsKICAgIE5BTUVTUEFDRV9JREVOVElGSUVSID0gIl9fX0ZPTlRfQVdFU09NRV9fXyI7CiAgICBVTklUU19JTl9HUklEID0gMTY7CiAgICBERUZBVUxUX0NTU19QUkVGSVggPSAiZmEiOwogICAgREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUyA9ICJzdmctaW5saW5lLS1mYSI7CiAgICBEQVRBX0ZBX0kyU1ZHID0gImRhdGEtZmEtaTJzdmciOwogICAgREFUQV9GQV9QU0VVRE9fRUxFTUVOVCA9ICJkYXRhLWZhLXBzZXVkby1lbGVtZW50IjsKICAgIERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORyA9ICJkYXRhLWZhLXBzZXVkby1lbGVtZW50LXBlbmRpbmciOwogICAgREFUQV9QUkVGSVggPSAiZGF0YS1wcmVmaXgiOwogICAgREFUQV9JQ09OID0gImRhdGEtaWNvbiI7CiAgICBIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MgPSAiZm9udGF3ZXNvbWUtaTJzdmciOwogICAgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAiYXN5bmMiOwogICAgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMgPSBbIkhUTUwiLCAiSEVBRCIsICJTVFlMRSIsICJTQ1JJUFQiXTsKICAgIFBTRVVET19FTEVNRU5UUyA9IFsiOjpiZWZvcmUiLCAiOjphZnRlciIsICI6YmVmb3JlIiwgIjphZnRlciJdOwogICAgUFJPRFVDVElPTiA9IChmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gY2F0Y2ggKGUkJDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0pKCk7CiAgICBfUFJFRklYX1RPX1NUWUxFID0gX29iamVjdFNwcmVhZDIoe30sIHEpOwogICAgX1BSRUZJWF9UT19TVFlMRVtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgImZhLWR1b3RvbmUiOiAiZHVvdG9uZSIKICAgIH0pLCBxW2kxMF0pLCBxdFsia2l0Il0pLCBxdFsia2l0LWR1b3RvbmUiXSk7CiAgICBQUkVGSVhfVE9fU1RZTEUgPSBmYW1pbHlQcm94eShfUFJFRklYX1RPX1NUWUxFKTsKICAgIF9TVFlMRV9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgX3QpOwogICAgX1NUWUxFX1RPX1BSRUZJWFtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgZHVvdG9uZTogImZhZCIKICAgIH0pLCBfU1RZTEVfVE9fUFJFRklYW2kxMF0pLCB1bFsia2l0Il0pLCB1bFsia2l0LWR1b3RvbmUiXSk7CiAgICBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfU1RZTEVfVE9fUFJFRklYKTsKICAgIF9QUkVGSVhfVE9fTE9OR19TVFlMRSA9IF9vYmplY3RTcHJlYWQyKHt9LCBIdCQxKTsKICAgIF9QUkVGSVhfVE9fTE9OR19TVFlMRVtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9QUkVGSVhfVE9fTE9OR19TVFlMRVtpMTBdKSwgZmxbImtpdCJdKTsKICAgIFBSRUZJWF9UT19MT05HX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19MT05HX1NUWUxFKTsKICAgIF9MT05HX1NUWUxFX1RPX1BSRUZJWCA9IF9vYmplY3RTcHJlYWQyKHt9LCAkdCQxKTsKICAgIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgb2xbImtpdCJdKTsKICAgIExPTkdfU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0xPTkdfU1RZTEVfVE9fUFJFRklYKTsKICAgIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOID0gRTI7CiAgICBMQVlFUlNfVEVYVF9DTEFTU05BTUUgPSAiZmEtbGF5ZXJzLXRleHQiOwogICAgRk9OVF9GQU1JTFlfUEFUVEVSTiA9IF8zOwogICAgX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCA9IF9vYmplY3RTcHJlYWQyKHt9LCBndCk7CiAgICBGT05UX1dFSUdIVF9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfRk9OVF9XRUlHSFRfVE9fUFJFRklYKTsKICAgIEFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04gPSBbImNsYXNzIiwgImRhdGEtcHJlZml4IiwgImRhdGEtaWNvbiIsICJkYXRhLWZhLXRyYW5zZm9ybSIsICJkYXRhLWZhLW1hc2siXTsKICAgIERVT1RPTkVfQ0xBU1NFUyA9IEgzOwogICAgUkVTRVJWRURfQ0xBU1NFUyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoSHQpLCBfdG9Db25zdW1hYmxlQXJyYXkodG8pKTsKICAgIGluaXRpYWwgPSBXSU5ET1cuRm9udEF3ZXNvbWVDb25maWcgfHwge307CiAgICBpZiAoRE9DVU1FTlQgJiYgdHlwZW9mIERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgYXR0cnMgPSBbWyJkYXRhLWZhbWlseS1wcmVmaXgiLCAiZmFtaWx5UHJlZml4Il0sIFsiZGF0YS1jc3MtcHJlZml4IiwgImNzc1ByZWZpeCJdLCBbImRhdGEtZmFtaWx5LWRlZmF1bHQiLCAiZmFtaWx5RGVmYXVsdCJdLCBbImRhdGEtc3R5bGUtZGVmYXVsdCIsICJzdHlsZURlZmF1bHQiXSwgWyJkYXRhLXJlcGxhY2VtZW50LWNsYXNzIiwgInJlcGxhY2VtZW50Q2xhc3MiXSwgWyJkYXRhLWF1dG8tcmVwbGFjZS1zdmciLCAiYXV0b1JlcGxhY2VTdmciXSwgWyJkYXRhLWF1dG8tYWRkLWNzcyIsICJhdXRvQWRkQ3NzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MiXSwgWyJkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHMtZnVsbC1zY2FuIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4iXSwgWyJkYXRhLW9ic2VydmUtbXV0YXRpb25zIiwgIm9ic2VydmVNdXRhdGlvbnMiXSwgWyJkYXRhLW11dGF0ZS1hcHByb2FjaCIsICJtdXRhdGVBcHByb2FjaCJdLCBbImRhdGEta2VlcC1vcmlnaW5hbC1zb3VyY2UiLCAia2VlcE9yaWdpbmFsU291cmNlIl0sIFsiZGF0YS1tZWFzdXJlLXBlcmZvcm1hbmNlIiwgIm1lYXN1cmVQZXJmb3JtYW5jZSJdLCBbImRhdGEtc2hvdy1taXNzaW5nLWljb25zIiwgInNob3dNaXNzaW5nSWNvbnMiXV07CiAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICB2YXIgX3JlZjIyID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLCBhdHRyID0gX3JlZjIyWzBdLCBrZXkyID0gX3JlZjIyWzFdOwogICAgICAgIHZhciB2YWwgPSBjb2VyY2UoZ2V0QXR0ckNvbmZpZyhhdHRyKSk7CiAgICAgICAgaWYgKHZhbCAhPT0gdm9pZCAwICYmIHZhbCAhPT0gbnVsbCkgewogICAgICAgICAgaW5pdGlhbFtrZXkyXSA9IHZhbDsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgX2RlZmF1bHQgPSB7CiAgICAgIHN0eWxlRGVmYXVsdDogInNvbGlkIiwKICAgICAgZmFtaWx5RGVmYXVsdDogaTEwLAogICAgICBjc3NQcmVmaXg6IERFRkFVTFRfQ1NTX1BSRUZJWCwKICAgICAgcmVwbGFjZW1lbnRDbGFzczogREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUywKICAgICAgYXV0b1JlcGxhY2VTdmc6IHRydWUsCiAgICAgIGF1dG9BZGRDc3M6IHRydWUsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzOiBmYWxzZSwKICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nczogdHJ1ZSwKICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbjogZmFsc2UsCiAgICAgIG9ic2VydmVNdXRhdGlvbnM6IHRydWUsCiAgICAgIG11dGF0ZUFwcHJvYWNoOiAiYXN5bmMiLAogICAgICBrZWVwT3JpZ2luYWxTb3VyY2U6IHRydWUsCiAgICAgIG1lYXN1cmVQZXJmb3JtYW5jZTogZmFsc2UsCiAgICAgIHNob3dNaXNzaW5nSWNvbnM6IHRydWUKICAgIH07CiAgICBpZiAoaW5pdGlhbC5mYW1pbHlQcmVmaXgpIHsKICAgICAgaW5pdGlhbC5jc3NQcmVmaXggPSBpbml0aWFsLmZhbWlseVByZWZpeDsKICAgIH0KICAgIF9jb25maWcgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX2RlZmF1bHQpLCBpbml0aWFsKTsKICAgIGlmICghX2NvbmZpZy5hdXRvUmVwbGFjZVN2ZykgX2NvbmZpZy5vYnNlcnZlTXV0YXRpb25zID0gZmFsc2U7CiAgICBjb25maWcyID0ge307CiAgICBPYmplY3Qua2V5cyhfZGVmYXVsdCkuZm9yRWFjaChmdW5jdGlvbihrZXkyKSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcyLCBrZXkyLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldDModmFsKSB7CiAgICAgICAgICBfY29uZmlnW2tleTJdID0gdmFsOwogICAgICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbihjYikgewogICAgICAgICAgICByZXR1cm4gY2IoY29uZmlnMik7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0MigpIHsKICAgICAgICAgIHJldHVybiBfY29uZmlnW2tleTJdOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcyLCAiZmFtaWx5UHJlZml4IiwgewogICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldDIodmFsKSB7CiAgICAgICAgX2NvbmZpZy5jc3NQcmVmaXggPSB2YWw7CiAgICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbihjYikgewogICAgICAgICAgcmV0dXJuIGNiKGNvbmZpZzIpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICByZXR1cm4gX2NvbmZpZy5jc3NQcmVmaXg7CiAgICAgIH0KICAgIH0pOwogICAgV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnID0gY29uZmlnMjsKICAgIF9vbkNoYW5nZUNiID0gW107CiAgICBkJDIgPSBVTklUU19JTl9HUklEOwogICAgbWVhbmluZ2xlc3NUcmFuc2Zvcm0gPSB7CiAgICAgIHNpemU6IDE2LAogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICByb3RhdGU6IDAsCiAgICAgIGZsaXBYOiBmYWxzZSwKICAgICAgZmxpcFk6IGZhbHNlCiAgICB9OwogICAgaWRQb29sID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKICAgIGJhc2VTdHlsZXMgPSBgOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEZyZWUiOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBGcmVlIjsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFBybyI7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFBybyI7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBCcmFuZHMiOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNsYWIiOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOwogIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjsKICAtLWZhLWZvbnQtdGh1bWJwcmludC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCI7CiAgLS1mYS1mb250LW5vdGRvZy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIjsKICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byI7CiAgLS1mYS1mb250LWV0Y2gtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEV0Y2giOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBKZWxseSI7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCI7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgQ2hpc2VsIjsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSI7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsIjsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtdWwgewogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTsKICBwYWRkaW5nLWlubGluZS1zdGFydDogMDsKfQouZmEtdWwgPiBsaSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouZmEtbGkgewogIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsKfQoKLyogSGVhZHMgVXA6IEJvcmRlcmVkIEljb25zIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlIQogIC0gVGhpcyBmZWF0dXJlIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIEZvbnQgQXdlc29tZSAodjgpIQogIC0gWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgaW4gdGhpcyB2ZXJzaW9uICp2NyksIGJ1dCBpdCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gRm9udCBBd2Vzb21lIHY4LgoqLwovKiBOb3RlczoKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXdpZHRoID0gMS8xNiBieSBkZWZhdWx0ICh0byByZW5kZXIgYXMgfjFweCBiYXNlZCBvbiBhIDE2cHggZGVmYXVsdCBmb250LXNpemUpCiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci1wYWRkaW5nID0KICAqKiAzLzE2IGZvciB2ZXJ0aWNhbCBwYWRkaW5nICh0byBnaXZlIH4ycHggb2YgdmVydGljYWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbiBjb25zaWRlcmluZyBpdCdzIHZlcnRpY2FsIGFsaWdubWVudCkKICAqKiA0LzE2IGZvciBob3Jpem9udGFsIHBhZGRpbmcgKHRvIGdpdmUgfjRweCBvZiBob3Jpem9udGFsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24pCiovCi5mYS1ib3JkZXIgewogIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1ib3JkZXItcmFkaXVzLCAwLjFlbSk7CiAgYm9yZGVyLXN0eWxlOiB2YXIoLS1mYS1ib3JkZXItc3R5bGUsIHNvbGlkKTsKICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wNjI1ZW0pOwogIGJveC1zaXppbmc6IHZhcigtLWZhLWJvcmRlci1ib3gtc2l6aW5nLCBjb250ZW50LWJveCk7CiAgcGFkZGluZzogdmFyKC0tZmEtYm9yZGVyLXBhZGRpbmcsIDAuMTg3NWVtIDAuMjVlbSk7Cn0KCi5mYS1wdWxsLWxlZnQsCi5mYS1wdWxsLXN0YXJ0IHsKICBmbG9hdDogaW5saW5lLXN0YXJ0OwogIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtcHVsbC1yaWdodCwKLmZhLXB1bGwtZW5kIHsKICBmbG9hdDogaW5saW5lLWVuZDsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtYmVhdCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJvdW5jZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJvdW5jZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTsKfQoKLmZhLWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7Cn0KCi5mYS1mbGlwIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4gewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtc3Bpbi1yZXZlcnNlIHsKICAtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7Cn0KCi5mYS1wdWxzZSwKLmZhLXNwaW4tcHVsc2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtcHVsc2UsCiAgLmZhLXNoYWtlLAogIC5mYS1zcGluLAogIC5mYS1zcGluLXB1bHNlIHsKICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQgewogIDAlLCA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNDUlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJvdW5jZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KICAxMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDMwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgNTclIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTsKICB9CiAgNjQlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmFkZSB7CiAgNTAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0LWZhZGUgewogIDAlLCAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNTAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICA1MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7CiAgfQogIDQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTsKICB9CiAgOCUsIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpOwogIH0KICAxMiUsIDI4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxOGRlZyk7CiAgfQogIDE2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpOwogIH0KICAyMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjJkZWcpOwogIH0KICAzMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTsKICB9CiAgNDAlLCAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4gewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9Ci5mYS1yb3RhdGUtOTAgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmZhLXJvdGF0ZS0xODAgewogIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMjcwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwp9CgouZmEtZmxpcC1ob3Jpem9udGFsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTsKfQoKLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOwp9CgouZmEtZmxpcC1ib3RoLAouZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoLTEsIC0xKTsKfQoKLmZhLXJvdGF0ZS1ieSB7CiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7CiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtc2Vjb25kYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSwKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogYmxhY2s7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1pbnZlcnNlIHsKICBmaWxsOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLmZhLXN0YWNrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAyZW07CiAgbGluZS1oZWlnaHQ6IDJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMi41ZW07Cn0KCi5mYS1pbnZlcnNlIHsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwogIGhlaWdodDogMWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4IHsKICAtLWZhLXdpZHRoOiAyLjVlbTsKICBoZWlnaHQ6IDJlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9CgouZmEtc3RhY2stMXgsCi5mYS1zdGFjay0yeCB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiB2YXIoLS1mYS1zdGFjay16LWluZGV4LCBhdXRvKTsKfWA7CiAgICBfY3NzSW5zZXJ0ZWQgPSBmYWxzZTsKICAgIEluamVjdENTUyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbTogewogICAgICAgICAgICBjc3MsCiAgICAgICAgICAgIGluc2VydENzczogZW5zdXJlQ3NzCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmVET01FbGVtZW50Q3JlYXRpb246IGZ1bmN0aW9uIGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbigpIHsKICAgICAgICAgICAgZW5zdXJlQ3NzKCk7CiAgICAgICAgICB9LAogICAgICAgICAgYmVmb3JlSTJzdmc6IGZ1bmN0aW9uIGJlZm9yZUkyc3ZnKCkgewogICAgICAgICAgICBlbnN1cmVDc3MoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgdyQyID0gV0lORE9XIHx8IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdID0ge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc3R5bGVzKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcyA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLmhvb2tzKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLmhvb2tzID0ge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMpIHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMgPSBbXTsKICAgIG5hbWVzcGFjZSA9IHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl07CiAgICBmdW5jdGlvbnMgPSBbXTsKICAgIF9saXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkgewogICAgICBET0NVTUVOVC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgX2xpc3RlbmVyKTsKICAgICAgbG9hZGVkID0gMTsKICAgICAgZnVuY3Rpb25zLm1hcChmdW5jdGlvbihmbikgewogICAgICAgIHJldHVybiBmbigpOwogICAgICB9KTsKICAgIH07CiAgICBsb2FkZWQgPSBmYWxzZTsKICAgIGlmIChJU19ET00pIHsKICAgICAgbG9hZGVkID0gKERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IC9ebG9hZGVkfF5jLyA6IC9ebG9hZGVkfF5pfF5jLykudGVzdChET0NVTUVOVC5yZWFkeVN0YXRlKTsKICAgICAgaWYgKCFsb2FkZWQpIERPQ1VNRU5ULmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBfbGlzdGVuZXIpOwogICAgfQogICAgYmluZEludGVybmFsNCA9IGZ1bmN0aW9uIGJpbmRJbnRlcm5hbDQyKGZ1bmMsIHRoaXNDb250ZXh0KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihhNSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNDb250ZXh0LCBhNSwgYjUsIGMxMSwgZDYpOwogICAgICB9OwogICAgfTsKICAgIHJlZHVjZTMgPSBmdW5jdGlvbiBmYXN0UmVkdWNlT2JqZWN0KHN1YmplY3QsIGZuLCBpbml0aWFsVmFsdWUsIHRoaXNDb250ZXh0KSB7CiAgICAgIHZhciBrZXlzMiA9IE9iamVjdC5rZXlzKHN1YmplY3QpLCBsZW5ndGggPSBrZXlzMi5sZW5ndGgsIGl0ZXJhdG9yMiA9IHRoaXNDb250ZXh0ICE9PSB2b2lkIDAgPyBiaW5kSW50ZXJuYWw0KGZuLCB0aGlzQ29udGV4dCkgOiBmbiwgaTExLCBrZXkyLCByZXN1bHQ7CiAgICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgewogICAgICAgIGkxMSA9IDE7CiAgICAgICAgcmVzdWx0ID0gc3ViamVjdFtrZXlzMlswXV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaTExID0gMDsKICAgICAgICByZXN1bHQgPSBpbml0aWFsVmFsdWU7CiAgICAgIH0KICAgICAgZm9yICg7IGkxMSA8IGxlbmd0aDsgaTExKyspIHsKICAgICAgICBrZXkyID0ga2V5czJbaTExXTsKICAgICAgICByZXN1bHQgPSBpdGVyYXRvcjIocmVzdWx0LCBzdWJqZWN0W2tleTJdLCBrZXkyLCBzdWJqZWN0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE1PTk8gPSAxOwogICAgRFVPID0gMjsKICAgIG1vZGVybk1hdGNoZXMgPSBbW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi4qcGF0aC4qZD0iKFteIl0qKSIvLCB7CiAgICAgIGQyOiAyLAogICAgICBkMTogMwogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggb3BhY2l0eT0iKFteIl0qKSIuKmQ9IihbXiJdKikiLywgewogICAgICBkMjogMgogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIuKmQ9IihbXiJdKykiLywgewogICAgICBkMTogMQogICAgfSldXTsKICAgIGxlZ2FjeU1hdGNoZXMgPSBbW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi4qcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMjogMSwKICAgICAgZDI6IDIsCiAgICAgIGF0dHIxOiAzLAogICAgICBkMTogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi4qcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIxOiAxLAogICAgICBkMTogMiwKICAgICAgYXR0cjI6IDMsCiAgICAgIGQyOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjI6IDEsCiAgICAgIGQyOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8sIHsKICAgICAgZDI6IDEsCiAgICAgIGF0dHIyOiAyLAogICAgICBkMTogMywKICAgICAgYXR0cjE6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLywgewogICAgICBkMTogMSwKICAgICAgYXR0cjE6IDIsCiAgICAgIGQyOiAzLAogICAgICBhdHRyMjogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8sIHsKICAgICAgZDE6IDEsCiAgICAgIGF0dHIxOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIvLCB7CiAgICAgIGQyOiAxLAogICAgICBhdHRyMjogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKnBhdGggZD0iKFteIl0rKSIvLCB7CiAgICAgIGQxOiAxLAogICAgICBkMjogMgogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLywgewogICAgICBkMTogMQogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIHN0eWxlPSIoW14iXSspIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIxOiAxLAogICAgICBkMTogMgogICAgfSldXTsKICAgIHN0eWxlczIgPSBuYW1lc3BhY2Uuc3R5bGVzLCBzaGltcyA9IG5hbWVzcGFjZS5zaGltczsKICAgIEZBTUlMWV9OQU1FUyA9IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFKTsKICAgIFBSRUZJWEVTX0ZPUl9GQU1JTFkgPSBGQU1JTFlfTkFNRVMucmVkdWNlKGZ1bmN0aW9uKGFjYywgZmFtaWx5SWQpIHsKICAgICAgYWNjW2ZhbWlseUlkXSA9IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW2ZhbWlseUlkXSk7CiAgICAgIHJldHVybiBhY2M7CiAgICB9LCB7fSk7CiAgICBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IG51bGw7CiAgICBfYnlVbmljb2RlID0ge307CiAgICBfYnlMaWdhdHVyZSA9IHt9OwogICAgX2J5T2xkTmFtZSA9IHt9OwogICAgX2J5T2xkVW5pY29kZSA9IHt9OwogICAgX2J5QWxpYXMgPSB7fTsKICAgIGJ1aWxkID0gZnVuY3Rpb24gYnVpbGQyKCkgewogICAgICB2YXIgbG9va3VwID0gZnVuY3Rpb24gbG9va3VwMihyZWR1Y2VyKSB7CiAgICAgICAgcmV0dXJuIHJlZHVjZTMoc3R5bGVzMiwgZnVuY3Rpb24obyQkMSwgc3R5bGUsIHByZWZpeDQpIHsKICAgICAgICAgIG8kJDFbcHJlZml4NF0gPSByZWR1Y2UzKHN0eWxlLCByZWR1Y2VyLCB7fSk7CiAgICAgICAgICByZXR1cm4gbyQkMTsKICAgICAgICB9LCB7fSk7CiAgICAgIH07CiAgICAgIF9ieVVuaWNvZGUgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICBpZiAoaWNvbjNbM10pIHsKICAgICAgICAgIGFjY1tpY29uM1szXV0gPSBpY29uTmFtZTsKICAgICAgICB9CiAgICAgICAgaWYgKGljb24zWzJdKSB7CiAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdLmZpbHRlcihmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gIm51bWJlciI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICBhY2NbYWxpYXMudG9TdHJpbmcoMTYpXSA9IGljb25OYW1lOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0pOwogICAgICBfYnlMaWdhdHVyZSA9IGxvb2t1cChmdW5jdGlvbihhY2MsIGljb24zLCBpY29uTmFtZSkgewogICAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uTmFtZTsKICAgICAgICBpZiAoaWNvbjNbMl0pIHsKICAgICAgICAgIHZhciBhbGlhc2VzID0gaWNvbjNbMl0uZmlsdGVyKGZ1bmN0aW9uKGEkJDEpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhJCQxID09PSAic3RyaW5nIjsKICAgICAgICAgIH0pOwogICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgX2J5QWxpYXMgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdOwogICAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uTmFtZTsKICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgdmFyIGhhc1JlZ3VsYXIgPSAiZmFyIiBpbiBzdHlsZXMyIHx8IGNvbmZpZzIuYXV0b0ZldGNoU3ZnOwogICAgICB2YXIgc2hpbUxvb2t1cHMgPSByZWR1Y2UzKHNoaW1zLCBmdW5jdGlvbihhY2MsIHNoaW0pIHsKICAgICAgICB2YXIgbWF5YmVOYW1lTWF5YmVVbmljb2RlID0gc2hpbVswXTsKICAgICAgICB2YXIgcHJlZml4NCA9IHNoaW1bMV07CiAgICAgICAgdmFyIGljb25OYW1lID0gc2hpbVsyXTsKICAgICAgICBpZiAocHJlZml4NCA9PT0gImZhciIgJiYgIWhhc1JlZ3VsYXIpIHsKICAgICAgICAgIHByZWZpeDQgPSAiZmFzIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5hbWVNYXliZVVuaWNvZGUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBhY2MubmFtZXNbbWF5YmVOYW1lTWF5YmVVbmljb2RlXSA9IHsKICAgICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgICBpY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5hbWVNYXliZVVuaWNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBhY2MudW5pY29kZXNbbWF5YmVOYW1lTWF5YmVVbmljb2RlLnRvU3RyaW5nKDE2KV0gPSB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHsKICAgICAgICBuYW1lczoge30sCiAgICAgICAgdW5pY29kZXM6IHt9CiAgICAgIH0pOwogICAgICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7CiAgICAgIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlczsKICAgICAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnMi5zdHlsZURlZmF1bHQsIHsKICAgICAgICBmYW1pbHk6IGNvbmZpZzIuZmFtaWx5RGVmYXVsdAogICAgICB9KTsKICAgIH07CiAgICBvbkNoYW5nZShmdW5jdGlvbihjJCQxKSB7CiAgICAgIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGMkJDEuc3R5bGVEZWZhdWx0LCB7CiAgICAgICAgZmFtaWx5OiBjb25maWcyLmZhbWlseURlZmF1bHQKICAgICAgfSk7CiAgICB9KTsKICAgIGJ1aWxkKCk7CiAgICBlbXB0eUNhbm9uaWNhbEljb24gPSBmdW5jdGlvbiBlbXB0eUNhbm9uaWNhbEljb24yKCkgewogICAgICByZXR1cm4gewogICAgICAgIHByZWZpeDogbnVsbCwKICAgICAgICBpY29uTmFtZTogbnVsbCwKICAgICAgICByZXN0OiBbXQogICAgICB9OwogICAgfTsKICAgIF9mYUNvbWJpbmVkQ2xhc3NlcyA9IFp0JDEuY29uY2F0KFl0KTsKICAgIG5ld0Nhbm9uaWNhbEZhbWlsaWVzID0gcnQuZmlsdGVyKGZ1bmN0aW9uKGZhbWlseUlkKSB7CiAgICAgIHJldHVybiBmYW1pbHlJZCAhPT0gaTEwIHx8IGZhbWlseUlkICE9PSB0ODsKICAgIH0pOwogICAgbmV3Q2Fub25pY2FsU3R5bGVzID0gT2JqZWN0LmtleXMoSHQkMSkuZmlsdGVyKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgcmV0dXJuIGtleTIgIT09IGkxMDsKICAgIH0pLm1hcChmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhIdCQxW2tleTJdKTsKICAgIH0pLmZsYXQoKTsKICAgIExpYnJhcnkgPSAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBMaWJyYXJ5MygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlicmFyeTMpOwogICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgICAgfQogICAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKExpYnJhcnkzLCBbewogICAgICAgIGtleTogImFkZCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZDMoKSB7CiAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRlZmluaXRpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgICBkZWZpbml0aW9uc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhZGRpdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLCB7fSk7CiAgICAgICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSB8fCB7fSksIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGRlZmluZUljb25zKGtleTIsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIHZhciBsb25nUHJlZml4ID0gUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXVtrZXkyXTsKICAgICAgICAgICAgaWYgKGxvbmdQcmVmaXgpIGRlZmluZUljb25zKGxvbmdQcmVmaXgsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGJ1aWxkKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJyZXNldCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9OwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogIl9wdWxsRGVmaW5pdGlvbnMiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHVsbERlZmluaXRpb25zKGFkZGl0aW9ucywgZGVmaW5pdGlvbjMpIHsKICAgICAgICAgIHZhciBub3JtYWxpemVkID0gZGVmaW5pdGlvbjMucHJlZml4ICYmIGRlZmluaXRpb24zLmljb25OYW1lICYmIGRlZmluaXRpb24zLmljb24gPyB7CiAgICAgICAgICAgIDA6IGRlZmluaXRpb24zCiAgICAgICAgICB9IDogZGVmaW5pdGlvbjM7CiAgICAgICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5tYXAoZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICB2YXIgX25vcm1hbGl6ZWQka2V5ID0gbm9ybWFsaXplZFtrZXkyXSwgcHJlZml4NCA9IF9ub3JtYWxpemVkJGtleS5wcmVmaXgsIGljb25OYW1lID0gX25vcm1hbGl6ZWQka2V5Lmljb25OYW1lLCBpY29uMyA9IF9ub3JtYWxpemVkJGtleS5pY29uOwogICAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdOwogICAgICAgICAgICBpZiAoIWFkZGl0aW9uc1twcmVmaXg0XSkgYWRkaXRpb25zW3ByZWZpeDRdID0ge307CiAgICAgICAgICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXg0XVthbGlhc10gPSBpY29uMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZGRpdGlvbnNbcHJlZml4NF1baWNvbk5hbWVdID0gaWNvbjM7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBhZGRpdGlvbnM7CiAgICAgICAgfQogICAgICB9XSk7CiAgICB9KSgpOwogICAgX3BsdWdpbnMgPSBbXTsKICAgIF9ob29rcyA9IHt9OwogICAgcHJvdmlkZXJzID0ge307CiAgICBkZWZhdWx0UHJvdmlkZXJLZXlzID0gT2JqZWN0LmtleXMocHJvdmlkZXJzKTsKICAgIGxpYnJhcnkgPSBuZXcgTGlicmFyeSgpOwogICAgbm9BdXRvID0gZnVuY3Rpb24gbm9BdXRvMigpIHsKICAgICAgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9IGZhbHNlOwogICAgICBjb25maWcyLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTsKICAgICAgY2FsbEhvb2tzKCJub0F1dG8iKTsKICAgIH07CiAgICBkb20gPSB7CiAgICAgIGkyc3ZnOiBmdW5jdGlvbiBpMnN2ZygpIHsKICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgaWYgKElTX0RPTSkgewogICAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVJMnN2ZyIsIHBhcmFtczIpOwogICAgICAgICAgY2FsbFByb3ZpZGVkKCJwc2V1ZG9FbGVtZW50czJzdmciLCBwYXJhbXMyKTsKICAgICAgICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImkyc3ZnIiwgcGFyYW1zMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk9wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuIikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKCkgewogICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgICB2YXIgYXV0b1JlcGxhY2VTdmdSb290ID0gcGFyYW1zMi5hdXRvUmVwbGFjZVN2Z1Jvb3Q7CiAgICAgICAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IGZhbHNlKSB7CiAgICAgICAgICBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgY29uZmlnMi5vYnNlcnZlTXV0YXRpb25zID0gdHJ1ZTsKICAgICAgICBkb21yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgIGF1dG9SZXBsYWNlKHsKICAgICAgICAgICAgYXV0b1JlcGxhY2VTdmdSb290CiAgICAgICAgICB9KTsKICAgICAgICAgIGNhbGxIb29rcygid2F0Y2giLCBwYXJhbXMyKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHBhcnNlNyA9IHsKICAgICAgaWNvbjogZnVuY3Rpb24gaWNvbihfaWNvbikgewogICAgICAgIGlmIChfaWNvbiA9PT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChfdHlwZW9mKF9pY29uKSA9PT0gIm9iamVjdCIgJiYgX2ljb24ucHJlZml4ICYmIF9pY29uLmljb25OYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9pY29uLnByZWZpeCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMoX2ljb24ucHJlZml4LCBfaWNvbi5pY29uTmFtZSkgfHwgX2ljb24uaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9pY29uKSAmJiBfaWNvbi5sZW5ndGggPT09IDIpIHsKICAgICAgICAgIHZhciBpY29uTmFtZSA9IF9pY29uWzFdLmluZGV4T2YoImZhLSIpID09PSAwID8gX2ljb25bMV0uc2xpY2UoMykgOiBfaWNvblsxXTsKICAgICAgICAgIHZhciBwcmVmaXg0ID0gZ2V0Q2Fub25pY2FsUHJlZml4KF9pY29uWzBdKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIiAmJiAoX2ljb24uaW5kZXhPZigiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikpID4gLTEgfHwgX2ljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkgewogICAgICAgICAgdmFyIGNhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKF9pY29uLnNwbGl0KCIgIiksIHsKICAgICAgICAgICAgc2tpcExvb2t1cHM6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBjYW5vbmljYWxJY29uLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCksCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKGNhbm9uaWNhbEljb24ucHJlZml4LCBjYW5vbmljYWxJY29uLmljb25OYW1lKSB8fCBjYW5vbmljYWxJY29uLmljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFyIF9wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9wcmVmaXgsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKF9wcmVmaXgsIF9pY29uKSB8fCBfaWNvbgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBhcGkgPSB7CiAgICAgIG5vQXV0bywKICAgICAgY29uZmlnOiBjb25maWcyLAogICAgICBkb20sCiAgICAgIHBhcnNlOiBwYXJzZTcsCiAgICAgIGxpYnJhcnksCiAgICAgIGZpbmRJY29uRGVmaW5pdGlvbiwKICAgICAgdG9IdG1sOiB0b0h0bWwyCiAgICB9OwogICAgYXV0b1JlcGxhY2UgPSBmdW5jdGlvbiBhdXRvUmVwbGFjZTIoKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkYXV0b1JlcGxhY2VTdiA9IHBhcmFtczIuYXV0b1JlcGxhY2VTdmdSb290LCBhdXRvUmVwbGFjZVN2Z1Jvb3QgPSBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRhdXRvUmVwbGFjZVN2OwogICAgICBpZiAoKE9iamVjdC5rZXlzKG5hbWVzcGFjZS5zdHlsZXMpLmxlbmd0aCA+IDAgfHwgY29uZmlnMi5hdXRvRmV0Y2hTdmcpICYmIElTX0RPTSAmJiBjb25maWcyLmF1dG9SZXBsYWNlU3ZnKSBhcGkuZG9tLmkyc3ZnKHsKICAgICAgICBub2RlOiBhdXRvUmVwbGFjZVN2Z1Jvb3QKICAgICAgfSk7CiAgICB9OwogICAgc3R5bGVzJDEgPSBuYW1lc3BhY2Uuc3R5bGVzOwogICAgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7CiAgICAgIGZvdW5kOiBmYWxzZSwKICAgICAgd2lkdGg6IDUxMiwKICAgICAgaGVpZ2h0OiA1MTIKICAgIH07CiAgICBub29wJDEgPSBmdW5jdGlvbiBub29wNCgpIHsKICAgIH07CiAgICBwJDIgPSBjb25maWcyLm1lYXN1cmVQZXJmb3JtYW5jZSAmJiBQRVJGT1JNQU5DRSAmJiBQRVJGT1JNQU5DRS5tYXJrICYmIFBFUkZPUk1BTkNFLm1lYXN1cmUgPyBQRVJGT1JNQU5DRSA6IHsKICAgICAgbWFyazogbm9vcCQxLAogICAgICBtZWFzdXJlOiBub29wJDEKICAgIH07CiAgICBwcmVhbWJsZSA9ICdGQSAiNy4xLjAiJzsKICAgIGJlZ2luID0gZnVuY3Rpb24gYmVnaW4yKG5hbWUpIHsKICAgICAgcCQyLm1hcmsoIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lLCAiIGJlZ2lucyIpKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBlbmQobmFtZSk7CiAgICAgIH07CiAgICB9OwogICAgZW5kID0gZnVuY3Rpb24gZW5kMihuYW1lKSB7CiAgICAgIHAkMi5tYXJrKCIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgICBwJDIubWVhc3VyZSgiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUpLCAiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgYmVnaW5zIiksICIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgfTsKICAgIHBlcmYgPSB7CiAgICAgIGJlZ2luLAogICAgICBlbmQKICAgIH07CiAgICBub29wJDIgPSBmdW5jdGlvbiBub29wNSgpIHsKICAgIH07CiAgICBtdXRhdG9ycyA9IHsKICAgICAgcmVwbGFjZTogZnVuY3Rpb24gcmVwbGFjZTMobXV0YXRpb24pIHsKICAgICAgICB2YXIgbm9kZTIgPSBtdXRhdGlvblswXTsKICAgICAgICBpZiAobm9kZTIucGFyZW50Tm9kZSkgewogICAgICAgICAgbXV0YXRpb25bMV0uZm9yRWFjaChmdW5jdGlvbihhYnN0cmFjdCkgewogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb252ZXJ0U1ZHKGFic3RyYWN0KSwgbm9kZTIpOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZzIua2VlcE9yaWdpbmFsU291cmNlKSB7CiAgICAgICAgICAgIHZhciBjb21tZW50MyA9IERPQ1VNRU5ULmNyZWF0ZUNvbW1lbnQobm9kZUFzQ29tbWVudChub2RlMikpOwogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb21tZW50Mywgbm9kZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIucmVtb3ZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBuZXN0OiBmdW5jdGlvbiBuZXN0KG11dGF0aW9uKSB7CiAgICAgICAgdmFyIG5vZGUyID0gbXV0YXRpb25bMF07CiAgICAgICAgdmFyIGFic3RyYWN0ID0gbXV0YXRpb25bMV07CiAgICAgICAgaWYgKH5jbGFzc0FycmF5KG5vZGUyKS5pbmRleE9mKGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzcykpIHsKICAgICAgICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlKG11dGF0aW9uKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZvclN2ZyA9IG5ldyBSZWdFeHAoIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLS4qIikpOwogICAgICAgIGRlbGV0ZSBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmlkOwogICAgICAgIGlmIChhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzKSB7CiAgICAgICAgICB2YXIgc3BsaXRDbGFzc2VzID0gYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihhY2MsIGNscykgewogICAgICAgICAgICBpZiAoY2xzID09PSBjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MgfHwgY2xzLm1hdGNoKGZvclN2ZykpIHsKICAgICAgICAgICAgICBhY2MudG9TdmcucHVzaChjbHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFjYy50b05vZGUucHVzaChjbHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHRvTm9kZTogW10sCiAgICAgICAgICAgIHRvU3ZnOiBbXQogICAgICAgICAgfSk7CiAgICAgICAgICBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzID0gc3BsaXRDbGFzc2VzLnRvU3ZnLmpvaW4oIiAiKTsKICAgICAgICAgIGlmIChzcGxpdENsYXNzZXMudG9Ob2RlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBub2RlMi5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgc3BsaXRDbGFzc2VzLnRvTm9kZS5qb2luKCIgIikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbmV3SW5uZXJIVE1MID0gYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICByZXR1cm4gdG9IdG1sMihhNSk7CiAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoREFUQV9GQV9JMlNWRywgIiIpOwogICAgICAgIG5vZGUyLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDsKICAgICAgfQogICAgfTsKICAgIGRpc2FibGVkID0gZmFsc2U7CiAgICBtbyA9IG51bGw7CiAgICBzdHlsZXMkMiA9IG5hbWVzcGFjZS5zdHlsZXM7CiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIyKGljb25EZWZpbml0aW9uKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkdHJhbnNmb3JtID0gcGFyYW1zMi50cmFuc2Zvcm0sIHRyYW5zZm9ybTIgPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSwgX3BhcmFtcyRzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgc3ltYm9sID0gX3BhcmFtcyRzeW1ib2wgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRzeW1ib2wsIF9wYXJhbXMkbWFzayA9IHBhcmFtczIubWFzaywgbWFzayA9IF9wYXJhbXMkbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkbWFzaywgX3BhcmFtcyRtYXNrSWQgPSBwYXJhbXMyLm1hc2tJZCwgbWFza0lkID0gX3BhcmFtcyRtYXNrSWQgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJG1hc2tJZCwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICBpZiAoIWljb25EZWZpbml0aW9uKSByZXR1cm47CiAgICAgIHZhciBwcmVmaXg0ID0gaWNvbkRlZmluaXRpb24ucHJlZml4LCBpY29uTmFtZSA9IGljb25EZWZpbml0aW9uLmljb25OYW1lLCBpY29uMyA9IGljb25EZWZpbml0aW9uLmljb247CiAgICAgIHJldHVybiBkb21WYXJpYW50cyhfb2JqZWN0U3ByZWFkMih7CiAgICAgICAgdHlwZTogImljb24iCiAgICAgIH0sIGljb25EZWZpbml0aW9uKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7CiAgICAgICAgICBpY29uRGVmaW5pdGlvbiwKICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgIH0pOwogICAgICAgIHJldHVybiBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgbWFpbjogYXNGb3VuZEljb24oaWNvbjMpLAogICAgICAgICAgICBtYXNrOiBtYXNrID8gYXNGb3VuZEljb24obWFzay5pY29uKSA6IHsKICAgICAgICAgICAgICBmb3VuZDogZmFsc2UsCiAgICAgICAgICAgICAgd2lkdGg6IG51bGwsCiAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLAogICAgICAgICAgICAgIGljb246IHt9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICBzeW1ib2wsCiAgICAgICAgICBtYXNrSWQsCiAgICAgICAgICBleHRyYTogewogICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgIGNsYXNzZXMKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgUmVwbGFjZUVsZW1lbnRzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDIoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGljb246IHJlc29sdmVJY29ucyhyZW5kZXIpCiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzMigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikgewogICAgICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGUsIF9wYXJhbXMkY2FsbGJhY2sgPSBwYXJhbXMyLmNhbGxiYWNrLCBjYWxsYmFjayA9IF9wYXJhbXMkY2FsbGJhY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgfSA6IF9wYXJhbXMkY2FsbGJhY2s7CiAgICAgICAgICByZXR1cm4gb25UcmVlKG5vZGUyLCBjYWxsYmFjayk7CiAgICAgICAgfTsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgaWNvbk5hbWUgPSBub2RlTWV0YS5pY29uTmFtZSwgcHJlZml4NCA9IG5vZGVNZXRhLnByZWZpeCwgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgc3ltYm9sID0gbm9kZU1ldGEuc3ltYm9sLCBtYXNrID0gbm9kZU1ldGEubWFzaywgbWFza0lkID0gbm9kZU1ldGEubWFza0lkLCBleHRyYSA9IG5vZGVNZXRhLmV4dHJhOwogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KSwgbWFzay5pY29uTmFtZSA/IGZpbmRJY29uKG1hc2suaWNvbk5hbWUsIG1hc2sucHJlZml4KSA6IFByb21pc2UucmVzb2x2ZSh7CiAgICAgICAgICAgICAgZm91bmQ6IGZhbHNlLAogICAgICAgICAgICAgIHdpZHRoOiA1MTIsCiAgICAgICAgICAgICAgaGVpZ2h0OiA1MTIsCiAgICAgICAgICAgICAgaWNvbjoge30KICAgICAgICAgICAgfSldKS50aGVuKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgbWFpbiA9IF9yZWYyMlswXSwgbWFzazIgPSBfcmVmMjJbMV07CiAgICAgICAgICAgICAgcmVzb2x2ZTIoW25vZGUyLCBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICAgICAgbWFzazogbWFzazIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgICAgICAgICAgIHN5bWJvbCwKICAgICAgICAgICAgICAgIG1hc2tJZCwKICAgICAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICAgICAgfSldKTsKICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlQWJzdHJhY3RJY29uID0gZnVuY3Rpb24oX3JlZjMpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMy5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYzLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMy5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjMudHJhbnNmb3JtLCBzdHlsZXMzID0gX3JlZjMuc3R5bGVzOwogICAgICAgICAgdmFyIHN0eWxlU3RyaW5nID0gam9pblN0eWxlcyhzdHlsZXMzKTsKICAgICAgICAgIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBuZXh0Q2hpbGQ7CiAgICAgICAgICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpKSB7CiAgICAgICAgICAgIG5leHRDaGlsZCA9IGNhbGxQcm92aWRlZCgiZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nIiwgewogICAgICAgICAgICAgIG1haW4sCiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLAogICAgICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNoaWxkcmVuMi5wdXNoKG5leHRDaGlsZCB8fCBtYWluLmljb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMiwKICAgICAgICAgICAgYXR0cmlidXRlcwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgTGF5ZXJzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGxheWVyOiBmdW5jdGlvbiBsYXllcjIoYXNzZW1ibGVyKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtczIuY2xhc3NlcywgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImxheWVyIgogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGFzc2VtYmxlciwKICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBbXTsKICAgICAgICAgICAgICBhc3NlbWJsZXIoZnVuY3Rpb24oYXJncykgewogICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuMiA9IGNoaWxkcmVuMi5jb25jYXQoYTUuYWJzdHJhY3QpOwogICAgICAgICAgICAgICAgfSkgOiBjaGlsZHJlbjIgPSBjaGlsZHJlbjIuY29uY2F0KGFyZ3MuYWJzdHJhY3QpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdGFnOiAic3BhbiIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycyIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzZXMpKS5qb2luKCIgIikKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4yCiAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBMYXllcnNDb3VudGVyID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNvdW50ZXI6IGZ1bmN0aW9uIGNvdW50ZXIyKGNvbnRlbnQzKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkdGl0bGUgPSBwYXJhbXMyLnRpdGxlLCB0aXRsZSA9IF9wYXJhbXMkdGl0bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJHRpdGxlLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImNvdW50ZXIiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50My50b1N0cmluZygpLAogICAgICAgICAgICAgICAgdGl0bGUsCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLWNvdW50ZXIiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIExheWVyc1RleHQgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdGV4dDogZnVuY3Rpb24gdGV4dDkoY29udGVudDMpIHsKICAgICAgICAgICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgICAgICAgICB2YXIgX3BhcmFtcyR0cmFuc2Zvcm0gPSBwYXJhbXMyLnRyYW5zZm9ybSwgdHJhbnNmb3JtMiA9IF9wYXJhbXMkdHJhbnNmb3JtID09PSB2b2lkIDAgPyBtZWFuaW5nbGVzc1RyYW5zZm9ybSA6IF9wYXJhbXMkdHJhbnNmb3JtLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLXRleHQiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMihwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgZXh0cmEgPSBub2RlTWV0YS5leHRyYTsKICAgICAgICAgIHZhciB3aWR0aCA9IG51bGw7CiAgICAgICAgICB2YXIgaGVpZ2h0ID0gbnVsbDsKICAgICAgICAgIGlmIChJU19JRSkgewogICAgICAgICAgICB2YXIgY29tcHV0ZWRGb250U2l6ZSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobm9kZTIpLmZvbnRTaXplLCAxMCk7CiAgICAgICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgd2lkdGggPSBib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggLyBjb21wdXRlZEZvbnRTaXplOwogICAgICAgICAgICBoZWlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC8gY29tcHV0ZWRGb250U2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW25vZGUyLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHsKICAgICAgICAgICAgY29udGVudDogbm9kZTIuaW5uZXJIVE1MLAogICAgICAgICAgICB3aWR0aCwKICAgICAgICAgICAgaGVpZ2h0LAogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICB3YXRjaGFibGU6IHRydWUKICAgICAgICAgIH0pXSk7CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIENMRUFOX0NPTlRFTlRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoJyInLCAidWciKTsKICAgIFNFQ09OREFSWV9VTklDT0RFX1JBTkdFID0gWzExMDU5MjAsIDExMTIzMTldOwogICAgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgewogICAgICBGb250QXdlc29tZTogewogICAgICAgIG5vcm1hbDogImZhcyIsCiAgICAgICAgNDAwOiAiZmFzIgogICAgICB9CiAgICB9KSwgQ3QpLCBybyksIGRsKTsKICAgIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBPYmplY3Qua2V5cyhfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywga2V5MikgewogICAgICBhY2Nba2V5Mi50b0xvd2VyQ2FzZSgpXSA9IF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2tleTJdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLID0gT2JqZWN0LmtleXMoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywgZm9udEZhbWlseSkgewogICAgICB2YXIgd2VpZ2h0cyA9IEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVhbZm9udEZhbWlseV07CiAgICAgIGFjY1tmb250RmFtaWx5XSA9IHdlaWdodHNbOTAwXSB8fCBfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmVudHJpZXMod2VpZ2h0cykpWzBdWzFdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgaGFzUHNldWRvRWxlbWVudCA9IGZ1bmN0aW9uIGhhc1BzZXVkb0VsZW1lbnQyKHNlbGVjdG9yKSB7CiAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmIFBTRVVET19FTEVNRU5UUy5zb21lKGZ1bmN0aW9uKHBzZXVkb1NlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmluY2x1ZGVzKHBzZXVkb1NlbGVjdG9yKTsKICAgICAgfSk7CiAgICB9OwogICAgcGFyc2VDU1NSdWxlRm9yUHNldWRvcyA9IGZ1bmN0aW9uIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MyKHNlbGVjdG9yVGV4dCkgewogICAgICBpZiAoIXNlbGVjdG9yVGV4dCkgcmV0dXJuIFtdOwogICAgICB2YXIgc2VsZWN0b3JTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB2YXIgc2VsZWN0b3JzID0gc2VsZWN0b3JUZXh0LnNwbGl0KC8sKD8hW14oKV0qXCkpLykubWFwKGZ1bmN0aW9uKHMkJDEpIHsKICAgICAgICByZXR1cm4gcyQkMS50cmltKCk7CiAgICAgIH0pOwogICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMuZmxhdE1hcChmdW5jdGlvbihzZWxlY3RvcjIpIHsKICAgICAgICByZXR1cm4gc2VsZWN0b3IyLmluY2x1ZGVzKCIoIikgPyBzZWxlY3RvcjIgOiBzZWxlY3RvcjIuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocyQkMSkgewogICAgICAgICAgcmV0dXJuIHMkJDEudHJpbSgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHNlbGVjdG9ycyksIF9zdGVwOwogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7ICkgewogICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICBpZiAoaGFzUHNldWRvRWxlbWVudChzZWxlY3RvcikpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdG9yV2l0aG91dFBzZXVkbyA9IFBTRVVET19FTEVNRU5UUy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBwc2V1ZG9TZWxlY3RvcikgewogICAgICAgICAgICAgIHJldHVybiBhY2MucmVwbGFjZShwc2V1ZG9TZWxlY3RvciwgIiIpOwogICAgICAgICAgICB9LCBzZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChzZWxlY3RvcldpdGhvdXRQc2V1ZG8gIT09ICIiICYmIHNlbGVjdG9yV2l0aG91dFBzZXVkbyAhPT0gIioiKSB7CiAgICAgICAgICAgICAgc2VsZWN0b3JTZXQuYWRkKHNlbGVjdG9yV2l0aG91dFBzZXVkbyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgfQogICAgICByZXR1cm4gc2VsZWN0b3JTZXQ7CiAgICB9OwogICAgUHNldWRvRWxlbWVudHMgPSB7CiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6IGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MoYWNjdW11bGF0b3IpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IucHNldWRvRWxlbWVudHNDYWxsYmFjayA9IHNlYXJjaFBzZXVkb0VsZW1lbnRzOwogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMyhwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5wc2V1ZG9FbGVtZW50czJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGU7CiAgICAgICAgICBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50cyhub2RlMik7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIF91bndhdGNoZWQgPSBmYWxzZTsKICAgIE11dGF0aW9uT2JzZXJ2ZXIkMSA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkb206IHsKICAgICAgICAgICAgdW53YXRjaDogZnVuY3Rpb24gdW53YXRjaCgpIHsKICAgICAgICAgICAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgICAgICAgICBfdW53YXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKCkgewogICAgICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLCB7fSkpOwogICAgICAgICAgfSwKICAgICAgICAgIG5vQXV0bzogZnVuY3Rpb24gbm9BdXRvMygpIHsKICAgICAgICAgICAgZGlzY29ubmVjdCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHdhdGNoOiBmdW5jdGlvbiB3YXRjaDIocGFyYW1zMikgewogICAgICAgICAgICB2YXIgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBwYXJhbXMyLm9ic2VydmVNdXRhdGlvbnNSb290OwogICAgICAgICAgICBpZiAoX3Vud2F0Y2hlZCkgewogICAgICAgICAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2JzZXJ2ZShjaGFpbkhvb2tzKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIiwgewogICAgICAgICAgICAgICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgcGFyc2VUcmFuc2Zvcm1TdHJpbmcgPSBmdW5jdGlvbiBwYXJzZVRyYW5zZm9ybVN0cmluZzIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgIHZhciB0cmFuc2Zvcm0yID0gewogICAgICAgIHNpemU6IDE2LAogICAgICAgIHg6IDAsCiAgICAgICAgeTogMCwKICAgICAgICBmbGlwWDogZmFsc2UsCiAgICAgICAgZmxpcFk6IGZhbHNlLAogICAgICAgIHJvdGF0ZTogMAogICAgICB9OwogICAgICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBuMTMpIHsKICAgICAgICB2YXIgcGFydHMgPSBuMTMudG9Mb3dlckNhc2UoKS5zcGxpdCgiLSIpOwogICAgICAgIHZhciBmaXJzdDIgPSBwYXJ0c1swXTsKICAgICAgICB2YXIgcmVzdCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi0iKTsKICAgICAgICBpZiAoZmlyc3QyICYmIHJlc3QgPT09ICJoIikgewogICAgICAgICAgYWNjLmZsaXBYID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgfQogICAgICAgIGlmIChmaXJzdDIgJiYgcmVzdCA9PT0gInYiKSB7CiAgICAgICAgICBhY2MuZmxpcFkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICB9CiAgICAgICAgcmVzdCA9IHBhcnNlRmxvYXQocmVzdCk7CiAgICAgICAgaWYgKGlzTmFOKHJlc3QpKSB7CiAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGZpcnN0MikgewogICAgICAgICAgY2FzZSAiZ3JvdyI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInNocmluayI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgLSByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImxlZnQiOgogICAgICAgICAgICBhY2MueCA9IGFjYy54IC0gcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgICAgIGFjYy54ID0gYWNjLnggKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVwIjoKICAgICAgICAgICAgYWNjLnkgPSBhY2MueSAtIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiZG93biI6CiAgICAgICAgICAgIGFjYy55ID0gYWNjLnkgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInJvdGF0ZSI6CiAgICAgICAgICAgIGFjYy5yb3RhdGUgPSBhY2Mucm90YXRlICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHRyYW5zZm9ybTIpOwogICAgfTsKICAgIFBvd2VyVHJhbnNmb3JtcyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZTogewogICAgICAgICAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybTIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3M1KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyaW5nID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLXRyYW5zZm9ybSIpOwogICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgYWNjdW11bGF0b3IudHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHJhbnNmb3JtU3RyaW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNChwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5nZW5lcmF0ZUFic3RyYWN0VHJhbnNmb3JtR3JvdXBpbmcgPSBmdW5jdGlvbihfcmVmMikgewogICAgICAgICAgdmFyIG1haW4gPSBfcmVmMi5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgICAgICAgICB2YXIgb3V0ZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIDIsICIgMjU2KSIpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGlubmVyVHJhbnNsYXRlID0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggKiAzMiwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAqIDMyLCAiKSAiKTsKICAgICAgICAgIHZhciBpbm5lclNjYWxlID0gInNjYWxlKCIuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFggPyAtMSA6IDEpLCAiLCAiKS5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogICAgICAgICAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgICAgICAgICB2YXIgaW5uZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogIiIuY29uY2F0KGlubmVyVHJhbnNsYXRlLCAiICIpLmNvbmNhdChpbm5lclNjYWxlLCAiICIpLmNvbmNhdChpbm5lclJvdGF0ZSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgcGF0aDIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChpY29uV2lkdGggLyAyICogLTEsICIgLTI1NikiKQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBvcGVyYXRpb25zID0gewogICAgICAgICAgICBvdXRlciwKICAgICAgICAgICAgaW5uZXIsCiAgICAgICAgICAgIHBhdGg6IHBhdGgyCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIG9wZXJhdGlvbnMuaW5uZXIpLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiBtYWluLmljb24udGFnLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IG1haW4uaWNvbi5jaGlsZHJlbiwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluLmljb24uYXR0cmlidXRlcyksIG9wZXJhdGlvbnMucGF0aCkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9XQogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgQUxMX1NQQUNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB3aWR0aDogIjEwMCUiLAogICAgICBoZWlnaHQ6ICIxMDAlIgogICAgfTsKICAgIE1hc2tzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgbWFza0RhdGEgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzayIpOwogICAgICAgICAgICB2YXIgbWFzayA9ICFtYXNrRGF0YSA/IGVtcHR5Q2Fub25pY2FsSWNvbigpIDogZ2V0Q2Fub25pY2FsSWNvbihtYXNrRGF0YS5zcGxpdCgiICIpLm1hcChmdW5jdGlvbihpMTEpIHsKICAgICAgICAgICAgICByZXR1cm4gaTExLnRyaW0oKTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBpZiAoIW1hc2sucHJlZml4KSB7CiAgICAgICAgICAgICAgbWFzay5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWNjdW11bGF0b3IubWFzayA9IG1hc2s7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm1hc2tJZCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1tYXNrLWlkIik7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM1KHByb3ZpZGVyczIpIHsKICAgICAgICBwcm92aWRlcnMyLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMi5tYWluLCBtYXNrID0gX3JlZjIubWFzaywgZXhwbGljaXRNYXNrSWQgPSBfcmVmMi5tYXNrSWQsIHRyYW5zZm9ybTIgPSBfcmVmMi50cmFuc2Zvcm07CiAgICAgICAgICB2YXIgbWFpbldpZHRoID0gbWFpbi53aWR0aCwgbWFpblBhdGggPSBtYWluLmljb247CiAgICAgICAgICB2YXIgbWFza1dpZHRoID0gbWFzay53aWR0aCwgbWFza1BhdGggPSBtYXNrLmljb247CiAgICAgICAgICB2YXIgdHJhbnMgPSB0cmFuc2Zvcm1Gb3JTdmcoewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYXNrV2lkdGgsCiAgICAgICAgICAgIGljb25XaWR0aDogbWFpbldpZHRoCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBtYXNrUmVjdCA9IHsKICAgICAgICAgICAgdGFnOiAicmVjdCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTExfU1BBQ0UpLCB7fSwgewogICAgICAgICAgICAgIGZpbGw6ICJ3aGl0ZSIKICAgICAgICAgICAgfSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluID0gbWFpblBhdGguY2hpbGRyZW4gPyB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluUGF0aC5jaGlsZHJlbi5tYXAoZmlsbEJsYWNrKQogICAgICAgICAgfSA6IHt9OwogICAgICAgICAgdmFyIG1hc2tJbm5lckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLmlubmVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFtmaWxsQmxhY2soX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgIHRhZzogbWFpblBhdGgudGFnLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluUGF0aC5hdHRyaWJ1dGVzKSwgdHJhbnMucGF0aCkKICAgICAgICAgICAgfSwgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluKSldCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tPdXRlckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrSW5uZXJHcm91cF0KICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lkID0gIm1hc2stIi5jb25jYXQoZXhwbGljaXRNYXNrSWQgfHwgbmV4dFVuaXF1ZUlkKCkpOwogICAgICAgICAgdmFyIGNsaXBJZCA9ICJjbGlwLSIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTsKICAgICAgICAgIHZhciBtYXNrVGFnID0gewogICAgICAgICAgICB0YWc6ICJtYXNrIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7CiAgICAgICAgICAgICAgaWQ6IG1hc2tJZCwKICAgICAgICAgICAgICBtYXNrVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIsCiAgICAgICAgICAgICAgbWFza0NvbnRlbnRVbml0czogInVzZXJTcGFjZU9uVXNlIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrUmVjdCwgbWFza091dGVyR3JvdXBdCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGRlZnMgPSB7CiAgICAgICAgICAgIHRhZzogImRlZnMiLAogICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICB0YWc6ICJjbGlwUGF0aCIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgaWQ6IGNsaXBJZAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgY2hpbGRyZW46IGRlR3JvdXAobWFza1BhdGgpCiAgICAgICAgICAgIH0sIG1hc2tUYWddCiAgICAgICAgICB9OwogICAgICAgICAgY2hpbGRyZW4yLnB1c2goZGVmcywgewogICAgICAgICAgICB0YWc6ICJyZWN0IiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgICJmaWxsIjogImN1cnJlbnRDb2xvciIsCiAgICAgICAgICAgICAgImNsaXAtcGF0aCI6ICJ1cmwoIyIuY29uY2F0KGNsaXBJZCwgIikiKSwKICAgICAgICAgICAgICAibWFzayI6ICJ1cmwoIyIuY29uY2F0KG1hc2tJZCwgIikiKQogICAgICAgICAgICB9LCBBTExfU1BBQ0UpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIE1pc3NpbmdJY29uSW5kaWNhdG9yID0gewogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM2KHByb3ZpZGVyczIpIHsKICAgICAgICB2YXIgcmVkdWNlTW90aW9uID0gZmFsc2U7CiAgICAgICAgaWYgKFdJTkRPVy5tYXRjaE1lZGlhKSB7CiAgICAgICAgICByZWR1Y2VNb3Rpb24gPSBXSU5ET1cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzOwogICAgICAgIH0KICAgICAgICBwcm92aWRlcnMyLm1pc3NpbmdJY29uQWJzdHJhY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBnQ2hpbGRyZW4gPSBbXTsKICAgICAgICAgIHZhciBGSUxMID0gewogICAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIgogICAgICAgICAgfTsKICAgICAgICAgIHZhciBBTklNQVRJT05fQkFTRSA9IHsKICAgICAgICAgICAgYXR0cmlidXRlVHlwZTogIlhNTCIsCiAgICAgICAgICAgIHJlcGVhdENvdW50OiAiaW5kZWZpbml0ZSIsCiAgICAgICAgICAgIGR1cjogIjJzIgogICAgICAgICAgfTsKICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICBkOiAiTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40eiIKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIE9QQUNJVFlfQU5JTUFURSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTklNQVRJT05fQkFTRSksIHt9LCB7CiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJvcGFjaXR5IgogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgZG90ID0gewogICAgICAgICAgICB0YWc6ICJjaXJjbGUiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgY3g6ICIyNTYiLAogICAgICAgICAgICAgIGN5OiAiMzY0IiwKICAgICAgICAgICAgICByOiAiMjgiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjaGlsZHJlbjogW10KICAgICAgICAgIH07CiAgICAgICAgICBpZiAoIXJlZHVjZU1vdGlvbikgewogICAgICAgICAgICBkb3QuY2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFOSU1BVElPTl9CQVNFKSwge30sIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJyIiwKICAgICAgICAgICAgICAgIHZhbHVlczogIjI4OzE0OzI4OzI4OzE0OzI4OyIKICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MTsxOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBnQ2hpbGRyZW4ucHVzaChkb3QpOwogICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwgewogICAgICAgICAgICAgIG9wYWNpdHk6ICIxIiwKICAgICAgICAgICAgICBkOiAiTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyeiIKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNoaWxkcmVuOiByZWR1Y2VNb3Rpb24gPyBbXSA6IFt7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MDswOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfV0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHsKICAgICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgIHRhZzogInBhdGgiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6ICIwIiwKICAgICAgICAgICAgICAgIGQ6ICJNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6IgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHsKICAgICAgICAgICAgICAgICAgdmFsdWVzOiAiMDswOzE7MTswOzA7IgogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgY2xhc3M6ICJtaXNzaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGlsZHJlbjogZ0NoaWxkcmVuCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBTdmdTeW1ib2xzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgc3ltYm9sRGF0YSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1zeW1ib2wiKTsKICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbERhdGEgPT09IG51bGwgPyBmYWxzZSA6IHN5bWJvbERhdGEgPT09ICIiID8gdHJ1ZSA6IHN5bWJvbERhdGE7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yWyJzeW1ib2wiXSA9IHN5bWJvbDsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBwbHVnaW5zID0gW0luamVjdENTUywgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIFBzZXVkb0VsZW1lbnRzLCBNdXRhdGlvbk9ic2VydmVyJDEsIFBvd2VyVHJhbnNmb3JtcywgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzXTsKICAgIHJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5zLCB7CiAgICAgIG1peG91dHNUbzogYXBpCiAgICB9KTsKICAgIG5vQXV0byQxID0gYXBpLm5vQXV0bzsKICAgIGNvbmZpZyQxID0gYXBpLmNvbmZpZzsKICAgIGxpYnJhcnkkMSA9IGFwaS5saWJyYXJ5OwogICAgZG9tJDEgPSBhcGkuZG9tOwogICAgcGFyc2UkMSA9IGFwaS5wYXJzZTsKICAgIGZpbmRJY29uRGVmaW5pdGlvbiQxID0gYXBpLmZpbmRJY29uRGVmaW5pdGlvbjsKICAgIHRvSHRtbCQxID0gYXBpLnRvSHRtbDsKICAgIGljb24yID0gYXBpLmljb247CiAgICBsYXllciA9IGFwaS5sYXllcjsKICAgIHRleHQ4ID0gYXBpLnRleHQ7CiAgICBjb3VudGVyID0gYXBpLmNvdW50ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1icmFuZHMtc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1icmFuZHMtc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4LCBmYVNxdWFyZUdpdGh1YiwgZmFHaXRodWJTcXVhcmUsIGZhVGhpbmtQZWFrcywgZmFHb29nbGVEcml2ZSwgZmFBdXRvcHJlZml4ZXIsIGZhU3F1YXJlVmlhZGVvLCBmYVZpYWRlb1NxdWFyZSwgZmFDcGFuZWwsIGZhTWVuZGVsZXksIGZhRHJhZnQyZGlnaXRhbCwgZmFSZXBseWQsIGZhRW1waXJlLCBmYUFjY2Vzc2libGVJY29uLCBmYVF1b3JhLCBmYUNjSmNiLCBmYUZlZG9yYSwgZmFEdW9saW5nbywgZmFGaXJzdGRyYWZ0LCBmYUZyZWVic2QsIGZhT2R5c2VlLCBmYUdnQ2lyY2xlLCBmYUNsb3VkZmxhcmUsIGZhSGFja2VycmFuaywgZmFTa3lhdGxhcywgZmFEZXNrcHJvLCBmYVJlc29sdmluZywgZmFCbGFja2JlcnJ5LCBmYVN0cmlwZVMsIGZhU3F1YXJlQmVoYW5jZSwgZmFCZWhhbmNlU3F1YXJlLCBmYVNlcnZpY2VzdGFjaywgZmFSb2NrZXRjaGF0LCBmYVJlYmVsLCBmYVNxdWFyZVdlYkF3ZXNvbWUsIGZhTGlua3RyZWUsIGZhU2ltcGx5YnVpbHQsIGZhU3R1YmJlciwgZmFBcHBlciwgZmFHb29nbGVTY2hvbGFyLCBmYVlhcm4sIGZhU3RhY2tPdmVyZmxvdywgZmFCbHVldG9vdGgsIGZhQ3JlYXRpdmVDb21tb25zTmNKcCwgZmFSZWRkaXQsIGZhQ29ubmVjdGRldmVsb3AsIGZhUmVzZWFyY2hnYXRlLCBmYVNpZ25hbE1lc3NlbmdlciwgZmFYaW5nLCBmYVNxdWFyZUpzLCBmYUpzU3F1YXJlLCBmYUZvbnRpY29ucywgZmFVcHMsIGZhQW1hem9uUGF5LCBmYVBhbmRvcmEsIGZhT3BlbmlkLCBmYVZzY28sIGZhVWJ1bnR1LCBmYVZpYWNvaW4sIGZhWmhpaHUsIGZhWWFuZGV4LCBmYVBpeGl2LCBmYU9wZW5haSwgZmFTaXRoLCBmYU5mY0RpcmVjdGlvbmFsLCBmYUNyZWF0aXZlQ29tbW9uc0J5LCBmYVVtYnJhY28sIGZhSG9vbGksIGZhU3F1YXJlR2l0LCBmYUdpdFNxdWFyZSwgZmFPZG5va2xhc3NuaWtpLCBmYURydXBhbCwgZmFCbG9nZ2VyQiwgZmFJbnZpc2lvbiwgZmFGYWNlYm9va0YsIGZhQ2VudG9zLCBmYUNjQW1hem9uUGF5LCBmYUViYXksIGZhQ29udGFvLCBmYUVsbG8sIGZhU2lzdHJpeCwgZmFQZXJpc2NvcGUsIGZhRXhwZWRpdGVkc3NsLCBmYU5hcHN0ZXIsIGZhRGVsaWNpb3VzLCBmYUd1aWxkZWQsIGZhWGJveCwgZmFVbnRhcHBkLCBmYUdvb2dsZVBsdXNHLCBmYUdpdGh1YkFsdCwgZmFHZXRQb2NrZXQsIGZhR2xpZGUsIGZhQml0eSwgZmFXcGV4cGxvcmVyLCBmYU1lZ2Fwb3J0LCBmYU1kYiwgZmFQYWdlNCwgZmFUaGVSZWRZZXRpLCBmYUppcmEsIGZhRmVkZXgsIGZhRXZlcm5vdGUsIGZhVXNiLCBmYUFuZ3J5Y3JlYXRpdmUsIGZhTWl6dW5pLCBmYUl0Y2hJbywgZmFXaW5kb3dzLCBmYVN0dW1ibGV1cG9uLCBmYUdvb2dsZSwgZmFEaXNjb3JkLCBmYUhhY2tlck5ld3MsIGZhRWxldmVudHksIGZhMTF0eSwgZmFUZWFtc3BlYWssIGZhU3VwcGxlLCBmYVNxdWFyZVR3aXR0ZXIsIGZhVHdpdHRlclNxdWFyZSwgZmFGb250QXdlc29tZSwgZmFGb250QXdlc29tZUZsYWcsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCwgZmFXaXJzaW5kaGFuZHdlcmssIGZhV3NoLCBmYUNvbmZsdWVuY2UsIGZhRGlnZywgZmFUaHJlYWRzLCBmYVdwcmVzc3IsIGZhUmVuZGFjdCwgZmFZb2FzdCwgZmFOaW1ibHIsIGZhUGl4ZWxmZWQsIGZhWWFob28sIGZhQmx1ZXNreSwgZmFTY3JpYmQsIGZhQ3JlYXRpdmVDb21tb25zUGQsIGZhRWFybHliaXJkcywgZmFTcXVhcmVPZG5va2xhc3NuaWtpLCBmYU9kbm9rbGFzc25pa2lTcXVhcmUsIGZhTWFya2Rvd24sIGZhVHlwbzMsIGZhSm9vbWxhLCBmYVdlaXhpbiwgZmFHcnVudCwgZmFSb2Nrcm1zLCBmYVVuc3BsYXNoLCBmYVNxdWFyZUluc3RhZ3JhbSwgZmFJbnN0YWdyYW1TcXVhcmUsIGZhRmlyc3RPcmRlckFsdCwgZmFGdWxjcnVtLCBmYUJyYXZlUmV2ZXJzZSwgZmFBdmlhbmV4LCBmYU5zOCwgZmFTcXVhcmVQaW50ZXJlc3QsIGZhUGludGVyZXN0U3F1YXJlLCBmYUJsdWV0b290aEIsIGZhR3JpcGZpcmUsIGZhU3F1YXJlR29vZ2xlUGx1cywgZmFHb29nbGVQbHVzU3F1YXJlLCBmYUFwcFN0b3JlLCBmYVdpeCwgZmFJbnRlcmNvbSwgZmFSZWFjdGV1cm9wZSwgZmFXYXplLCBmYUNyZWF0aXZlQ29tbW9uc1JlbWl4LCBmYUJhbmRjYW1wLCBmYVNxdWFyZVdlYkF3ZXNvbWVTdHJva2UsIGZhVmltZW9WLCBmYVN0cmF2YSwgZmFVbmlyZWdpc3RyeSwgZmFDY0RpbmVyc0NsdWIsIGZhUGludGVyZXN0LCBmYUFsZ29saWEsIGZhU3RhY2twYXRoLCBmYU9jdG9wdXNEZXBsb3ksIGZhWWFtbWVyLCBmYU1vZHgsIGZhU3F1YXJlVGhyZWFkcywgZmFPbGRSZXB1YmxpYywgZmFTdXNlLCBmYUFwcFN0b3JlSW9zLCBmYVNxdWFyZURyaWJiYmxlLCBmYURyaWJiYmxlU3F1YXJlLCBmYVVpa2l0LCBmYVN1cGVycG93ZXJzLCBmYVlvdXR1YmUsIGZhRW1iZXIsIGZhQm9vdHN0cmFwLCBmYUl0dW5lcywgZmFTcXVhcmVYaW5nLCBmYVhpbmdTcXVhcmUsIGZhQ3NzM0FsdCwgZmFTcXVhcmVzcGFjZSwgZmFUcmVsbG8sIGZhVmlhZGVvLCBmYVNlYXJjaGVuZ2luLCBmYVBheXBhbCwgZmFTcXVhcmVCbHVlc2t5LCBmYURBbmREQmV5b25kLCBmYU1pY3Jvc29mdCwgZmFGbHksIGZhQ2NTdHJpcGUsIGZhV29yZHByZXNzU2ltcGxlLCBmYVNlbGxzeSwgZmFEYXNoY3ViZSwgZmFHaXR0ZXIsIGZhV29sZlBhY2tCYXR0YWxpb24sIGZhTGFzdGZtLCBmYVNob3B3YXJlLCBmYUJsb2dnZXIsIGZhRWRnZSwgZmFJb3hob3N0LCBmYVNjaGxpeCwgZmFEQW5kRCwgZmFWdWVqcywgZmFNZXRhLCBmYUNyZWF0aXZlQ29tbW9uc1NoYXJlLCBmYVN0dWRpb3ZpbmFyaSwgZmFCaXRidWNrZXQsIGZhVmssIGZhR2l0aHViLCBmYUNvZGllcGllLCBmYVBpZWRQaXBlciwgZmFSYXNwYmVycnlQaSwgZmFDc3MzLCBmYUh1YnNwb3QsIGZhQ21wbGlkLCBmYUR5YWxvZywgZmFFbGVtZW50b3IsIGZhRmlyc3RPcmRlciwgZmFEcmliYmJsZSwgZmFMaW5rZWRpbiwgZmFDY1BheXBhbCwgZmFEaGwsIGZhVGV4LCBmYVNob3BpZnksIGZhU3F1YXJlUmVkZGl0LCBmYVJlZGRpdFNxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNOYywgZmFHYWxhY3RpY1JlcHVibGljLCBmYUZhY2Vib29rLCBmYUdpdGxhYiwgZmFRcSwgZmFTdHJpcGUsIGZhRGFpbHltb3Rpb24sIGZhU3RlYW0sIGZhU25hcGNoYXQsIGZhU25hcGNoYXRHaG9zdCwgZmFHYWxhY3RpY1NlbmF0ZSwgZmFQaG9lbml4RnJhbWV3b3JrLCBmYUdpdCwgZmFPcHRpbk1vbnN0ZXIsIGZhSmVua2lucywgZmFTbGlkZXNoYXJlLCBmYVViZXIsIGZhRGlnaXRhbE9jZWFuLCBmYVNvdW5kY2xvdWQsIGZhU3F1YXJlRmlnbWEsIGZhQ3JlYXRpdmVDb21tb25zU2EsIGZhQ2hyb21lLCBmYVRyYWRlRmVkZXJhdGlvbiwgZmFWYWFkaW4sIGZhRGV2aWFudGFydCwgZmFNZWRpdW0sIGZhTWVkaXVtTSwgZmFPcGVuY2FydCwgZmFZQ29tYmluYXRvciwgZmFMaW5lLCBmYUFtaWxpYSwgZmFBc3ltbWV0cmlrLCBmYVBoYWJyaWNhdG9yLCBmYUJvdHMsIGZhVmluZSwgZmFNZWRydCwgZmFPc2ksIGZhR2csIGZhQnV5c2VsbGFkcywgZmFHb29nbGVQbHVzLCBmYVNjcmVlbnBhbCwgZmFCaXRjb2luLCBmYVN3aWZ0LCBmYUZpbGVzUGlud2hlZWwsIGZhTGFyYXZlbCwgZmFXcGZvcm1zLCBmYVNwZWFrZXJEZWNrLCBmYUZsaWNrciwgZmFDY1Zpc2EsIGZhVXB3b3JrLCBmYUtha2FvVGFsaywgZmFGbHV0dGVyLCBmYUJ1ZmZlciwgZmFHcmF0aXBheSwgZmFHb29nbGVQYXksIGZhQXBwbGUsIGZhVHVtYmxyLCBmYVBob2VuaXhTcXVhZHJvbiwgZmFDZW50ZXJjb2RlLCBmYURlYmlhbiwgZmFNYXN0b2RvbiwgZmFTa2V0Y2gsIGZhV2ViQXdlc29tZSwgZmFTYXNzLCBmYVNxdWFyZVdoYXRzYXBwLCBmYVdoYXRzYXBwU3F1YXJlLCBmYVNreXBlLCBmYUFuZ3VsYXIsIGZhT3BlbnN1c2UsIGZhRHJvcGJveCwgZmFEZWV6ZXIsIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmcsIGZhSmVkaU9yZGVyLCBmYVJQcm9qZWN0LCBmYUluc3RhbG9kLCBmYUNhbmFkaWFuTWFwbGVMZWFmLCBmYUV0aGVyZXVtLCBmYUhvdXp6LCBmYVZpYmVyLCBmYUtpY2tzdGFydGVyLCBmYVNxdWFyZUtpY2tzdGFydGVyLCBmYVNwb3RpZnksIGZhTGVhbnB1YiwgZmFKYXZhLCBmYU5mY1N5bWJvbCwgZmFXb2R1LCBmYVNxdWFyZVN0ZWFtLCBmYVN0ZWFtU3F1YXJlLCBmYUNyZWF0aXZlQ29tbW9uc05jRXUsIGZhTnBtLCBmYUNsb3Vkc2NhbGUsIGZhVGhlbWVjbywgZmFHb29nbGVQbGF5LCBmYUtvcnZ1ZSwgZmFXM2MsIGZhR3JhdiwgZmFBd3MsIGZhR2xpZGVHLCBmYUpzZmlkZGxlLCBmYUtleWJhc2UsIGZhTHVtb25Ecm9wLCBmYVdlZWJseSwgZmFEb2NrZXIsIGZhTWFnZW50bywgZmFHaXRBbHQsIGZhRmlyZWZveEJyb3dzZXIsIGZhQ2xvdWRzbWl0aCwgZmFXaXphcmRzT2ZUaGVDb2FzdCwgZmFDcmVhdGl2ZUNvbW1vbnNOZCwgZmFVc3BzLCBmYVNxdWFyZUxldHRlcmJveGQsIGZhTWFuZGFsb3JpYW4sIGZhU2xhY2ssIGZhU2xhY2tIYXNoLCBmYUFuZ2VsbGlzdCwgZmFBbmRyb2lkLCBmYU1lZXR1cCwgZmFGb250aWNvbnNGaSwgZmFQYWxmZWQsIGZhV3BiZWdpbm5lciwgZmFEaWFzcG9yYSwgZmFQcm9kdWN0SHVudCwgZmFTcXVhcmVVcHdvcmssIGZhQ3V0dGxlZmlzaCwgZmFNZWRhcHBzLCBmYVBpeCwgZmFTcXVhcmVUdW1ibHIsIGZhVHVtYmxyU3F1YXJlLCBmYVJlYWN0LCBmYUp4bCwgZmFTcXVhcmVMaW5rZWRpbiwgZmFDc3MsIGZhSGFzaG5vZGUsIGZhUmVkZGl0QWxpZW4sIGZhVGlrdG9rLCBmYVdvcmRwcmVzcywgZmFJZGVhbCwgZmFQaWVkUGlwZXJQcCwgZmFVc3N1bm5haCwgZmFGb3J0QXdlc29tZUFsdCwgZmFCdXJvbW9iZWxleHBlcnRlLCBmYUJpbGliaWxpLCBmYU5lb3MsIGZhRGV2LCBmYUhvdGphciwgZmFEb2NodWIsIGZhVmltZW8sIGZhTWF4Y2RuLCBmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlLCBmYUZvbnRBd2Vzb21lQWx0LCBmYVNwZWFrYXAsIGZhRmFudGFzeUZsaWdodEdhbWVzLCBmYUxpbnV4LCBmYUNvdHRvbkJ1cmVhdSwgZmFHb29nbGVXYWxsZXQsIGZhRm91cnNxdWFyZSwgZmFTaGlydHNpbmJ1bGssIGZhTWludGJpdCwgZmFTdGF5bGlua2VkLCBmYVdlYmZsb3csIGZhUmVucmVuLCBmYVJldiwgZmFLZXljZG4sIGZhSGlyZUFIZWxwZXIsIGZhU3F1YXJlSGFja2VyTmV3cywgZmFIYWNrZXJOZXdzU3F1YXJlLCBmYUNyZWF0aXZlQ29tbW9uc1BkQWx0LCBmYU9yY2lkLCBmYUJlaGFuY2UsIGZhTW9uZXJvLCBmYUZpZ21hLCBmYUluc3RhZ3JhbSwgZmFQZXJieXRlLCBmYVNxdWFyZVZpbWVvLCBmYVZpbWVvU3F1YXJlLCBmYVB1c2hlZCwgZmFNaXhjbG91ZCwgZmFZYW5kZXhJbnRlcm5hdGlvbmFsLCBmYUhpdmUsIGZhQ3JlYXRpdmVDb21tb25zWmVybywgZmFTcXVhcmVTbmFwY2hhdCwgZmFTbmFwY2hhdFNxdWFyZSwgZmFUaGVtZWlzbGUsIGZhRGFydExhbmcsIGZhRGVwbG95ZG9nLCBmYUZsaXBib2FyZCwgZmFCdXlOTGFyZ2UsIGZhV2F0Y2htYW5Nb25pdG9yaW5nLCBmYUhpcHMsIGZhQ2xvdWR2ZXJzaWZ5LCBmYUdvb2RyZWFkcywgZmFUaWRhbCwgZmFVbml0eSwgZmFUZW5jZW50V2VpYm8sIGZhRnJlZUNvZGVDYW1wLCBmYVhUd2l0dGVyLCBmYVN0aWNrZXJNdWxlLCBmYVR3aXRjaCwgZmFLaWNrc3RhcnRlckssIGZhQ3JpdGljYWxSb2xlLCBmYVN0ZWFtU3ltYm9sLCBmYU1haWxjaGltcCwgZmFMdW1vbiwgZmFOdXRyaXRpb25peCwgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZ1BsdXMsIGZhUmVkaGF0LCBmYVNxdWFyZVBpZWRQaXBlciwgZmFQaWVkUGlwZXJTcXVhcmUsIGZhV2hhdHNhcHAsIGZhSW1kYiwgZmFQeXRob24sIGZhQ2FzaEFwcCwgZmFQaW50ZXJlc3RQLCBmYVdobWNzLCBmYUpvZ2V0LCBmYVNxdWFyZVlvdXR1YmUsIGZhWW91dHViZVNxdWFyZSwgZmFBdGxhc3NpYW4sIGZhUGllZFBpcGVySGF0LCBmYUludGVybmV0RXhwbG9yZXIsIGZhQWlyYm5iLCBmYUpzLCBmYVF1aW5zY2FwZSwgZmFBZHZlcnNhbCwgZmFDcmVhdGl2ZUNvbW1vbnMsIGZhTm90aW9uLCBmYUNocm9tZWNhc3QsIGZhV2lraXBlZGlhVywgZmFTaXRyb3gsIGZhU3F1YXJlR2l0bGFiLCBmYUdpdGxhYlNxdWFyZSwgZmFTaG9lbGFjZSwgZmFTZWxsY2FzdCwgZmFNaXgsIGZhQ2NBcHBsZVBheSwgZmFCcmF2ZSwgZmFFdHN5LCBmYUJ0YywgZmFBZG4sIGZhU3F1YXJlWFR3aXR0ZXIsIGZhU3F1YXJlRm9udEF3ZXNvbWUsIGZhRm9ydW1iZWUsIGZhNDJHcm91cCwgZmFJbm5vc29mdCwgZmFTdHVtYmxldXBvbkNpcmNsZSwgZmFTeW1mb255LCBmYVNhbGVzZm9yY2UsIGZhU291cmNldHJlZSwgZmFMaW5rZWRpbkluLCBmYUh0bWw1LCBmYVJ1c3QsIGZhSG9ybmJpbGwsIGZhUGhwLCBmYURpc3F1cywgZmE1MDBweCwgZmFBZmZpbGlhdGV0aGVtZSwgZmFSZWRSaXZlciwgZmFUd2l0dGVyLCBmYUZvcnRBd2Vzb21lLCBmYU1peGVyLCBmYUx5ZnQsIGZhQXBwbGVQYXksIGZhQXJ0c3RhdGlvbiwgZmFOb2RlSnMsIGZhVW5jaGFydGVkLCBmYVBsYXlzdGF0aW9uLCBmYU1pY3JvYmxvZywgZmFHaXRrcmFrZW4sIGZhVGVsZWdyYW0sIGZhVGVsZWdyYW1QbGFuZSwgZmFJdHVuZXNOb3RlLCBmYUxlc3MsIGZhRmlyZWZveCwgZmFLYWdnbGUsIGZhRmFjZWJvb2tNZXNzZW5nZXIsIGZhQXVkaWJsZSwgZmFQYXRyZW9uLCBmYVZudiwgZmFQYWdlbGluZXMsIGZhQW1hem9uLCBmYUVudmlyYSwgZmFMaW5vZGUsIGZhQWNjdXNvZnQsIGZhRXJsYW5nLCBmYUNjRGlzY292ZXIsIGZhU2FmYXJpLCBmYVNwYWNlQXdlc29tZSwgZmFOb2RlLCBmYUNvZGVwZW4sIGZhUmF2ZWxyeSwgZmFBbGlwYXksIGZhQ2NBbWV4LCBmYVBpZWRQaXBlckFsdCwgZmFMZXR0ZXJib3hkLCBmYU9wZXJhLCBmYVdlaWJvLCBmYVJlYWRtZSwgZmFHb2xhbmcsIGZhU3RhY2tFeGNoYW5nZSwgZmFHdWxwLCBmYVllbHAsIGZhR29mb3JlLCBmYUF2aWF0bywgZmFQYWRsZXQsIGZhRWRnZUxlZ2FjeSwgZmFTcXVhcmVMYXN0Zm0sIGZhTGFzdGZtU3F1YXJlLCBmYUdvb2RyZWFkc0csIGZhQ2NNYXN0ZXJjYXJkLCBmYURpc2NvdXJzZSwgZmFCbGFja1RpZSwgZmFTcXVhcmVGYWNlYm9vaywgZmFGYWNlYm9va1NxdWFyZSwgZmFCYXR0bGVOZXQsIGZhQmltb2JqZWN0LCBpY29uczsKdmFyIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtYnJhbmRzLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4ID0gImZhYiI7CiAgICBmYVNxdWFyZUdpdGh1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ2l0aHViIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdpdGh1Yi1zcXVhcmUiXSwgImYwOTIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNjUuOCA0MDcuN2MwLTEuOCAwLTYgLjEtMTEuNiAuMS0xMS40IC4xLTI4LjggLjEtNDMuNyAwLTE1LjYtNS4yLTI1LjUtMTEuMy0zMC43IDM3LTQuMSA3Ni05LjIgNzYtNzMuMSAwLTE4LjItNi41LTI3LjMtMTcuMS0zOSAxLjctNC4zIDcuNC0yMi0xLjctNDUtMTMuOS00LjMtNDUuNyAxNy45LTQ1LjcgMTcuOS0yNi42LTcuNS01Ni42LTcuNS04My4yIDAgMCAwLTMxLjgtMjIuMi00NS43LTE3LjktOS4xIDIyLjktMy41IDQwLjYtMS43IDQ1LTEwLjYgMTEuNy0xNS42IDIwLjgtMTUuNiAzOSAwIDYzLjYgMzcuMyA2OSA3NC4zIDczLjEtNC44IDQuMy05LjEgMTEuNy0xMC42IDIyLjMtOS41IDQuMy0zMy44IDExLjctNDguMy0xMy45LTkuMS0xNS44LTI1LjUtMTcuMS0yNS41LTE3LjEtMTYuMi0uMi0xLjEgMTAuMi0xLjEgMTAuMiAxMC44IDUgMTguNCAyNC4yIDE4LjQgMjQuMiA5LjcgMjkuNyA1Ni4xIDE5LjcgNTYuMSAxOS43IDAgOSAuMSAyMS43IC4xIDMwLjYgMCA0LjggLjEgOC42IC4xIDEwIDAgNC4zLTMgOS41LTExLjUgOC02Ni0yMi4xLTExMi4yLTg0LjktMTEyLjItMTU4LjMgMC05MS44IDcwLjItMTYxLjUgMTYyLTE2MS41UzM4OCAxNjUuNiAzODggMjU3LjRjLjEgNzMuNC00NC43IDEzNi4zLTExMC43IDE1OC4zLTguNCAxLjUtMTEuNS0zLjctMTEuNS04em0tOTAuNS01NC44Yy0uMi0xLjUgMS4xLTIuOCAzLTMuMiAxLjktLjIgMy43IC42IDMuOSAxLjkgLjMgMS4zLTEgMi42LTMgMy0xLjkgLjQtMy43LS40LTMuOS0xLjd6bS05LjEgMy4yYy0yLjIgLjItMy43LS45LTMuNy0yLjQgMC0xLjMgMS41LTIuNCAzLjUtMi40IDEuOS0uMiAzLjcgLjkgMy43IDIuNCAwIDEuMy0xLjUgMi40LTMuNSAyLjR6bS0xNC4zLTIuMmMtMS45LS40LTMuMi0xLjktMi44LTMuMnMyLjQtMS45IDQuMS0xLjVjMiAuNiAzLjMgMi4xIDIuOCAzLjQtLjQgMS4zLTIuNCAxLjktNC4xIDEuM3ptLTEyLjUtNy4zYy0xLjUtMS4zLTEuOS0zLjItLjktNC4xIC45LTEuMSAyLjgtLjkgNC4zIC42IDEuMyAxLjMgMS44IDMuMyAuOSA0LjEtLjkgMS4xLTIuOCAuOS00LjMtLjZ6bS04LjUtMTBjLTEuMS0xLjUtMS4xLTMuMiAwLTMuOSAxLjEtLjkgMi44LS4yIDMuNyAxLjMgMS4xIDEuNSAxLjEgMy4zIDAgNC4xLS45IC42LTIuNiAwLTMuNy0xLjV6bS02LjMtOC44Yy0xLjEtMS4zLTEuMy0yLjgtLjQtMy41IC45LS45IDIuNC0uNCAzLjUgLjYgMS4xIDEuMyAxLjMgMi44IC40IDMuNS0uOSAuOS0yLjQgLjQtMy41LS42em0tNi02LjRjLTEuMy0uNi0xLjktMS43LTEuNS0yLjYgLjQtLjYgMS41LS45IDIuOC0uNCAxLjMgLjcgMS45IDEuOCAxLjUgMi42LS40IC45LTEuNyAxLjEtMi44IC40eiJdCiAgICB9OwogICAgZmFHaXRodWJTcXVhcmUgPSBmYVNxdWFyZUdpdGh1YjsKICAgIGZhVGhpbmtQZWFrcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGluay1wZWFrcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzMxIiwgIk00NjUuNCA0MDkuNGw4Ny4xLTE1MC4yLTMyLS4zLTU1LjEgOTUtMjA2LjItMzUzLjktMjM2LjIgNDA3LjQgMzIgLjMgMjA0LjItMzUyLjEgMjA2LjIgMzUzLjh6TTExMC4xIDM2NS4zbDMyLjEgMCAxMTcuNC0yMDIuNSAyMDMuNCAzNDkuMSAzMi41IC4xLTIzNS44LTQwNC42LTE0OS42IDI1Ny45eiJdCiAgICB9OwogICAgZmFHb29nbGVEcml2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtZHJpdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNhYSIsICJNMzM5IDMxNC45TDE3NS40IDMyIDMzNi42IDMyIDUwMC4yIDMxNC45IDMzOSAzMTQuOXpNMjAxLjUgMzM4LjVsLTgwLjYgMTQxLjUgMzEwLjUgMCA4MC42LTE0MS41LTMxMC41IDB6TTE1NC4xIDY3LjRMMCAzMzguNSA4MC42IDQ4MCAyMzcgMjA4LjggMTU0LjEgNjcuNHoiXQogICAgfTsKICAgIGZhQXV0b3ByZWZpeGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF1dG9wcmVmaXhlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFjIiwgIk0zMTguNCAxNmwtMTYxIDQ4MCA3Ny41IDAgMjUuNC04MS40IDExOS41IDAgMjUuMiA4MS40IDc3LjUgMC0xNjQuMS00ODB6TTI3OC4xIDM1Ny45bDQxLjItMTMwLjQgMS41IDAgNDAuOSAxMzAuNC04My42IDB6TTY0MCA0MDVMNjMwIDM3My42IDQ2Mi4xIDM1OCA0ODEuNSA0MTQuNSA2NDAgNDA1ek0xNzcuOSAzNThMMTAgMzczLjcgMCA0MDUgMTU4LjUgNDE0LjQgMTc3LjkgMzU4eiJdCiAgICB9OwogICAgZmFTcXVhcmVWaWFkZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpYWRlbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ2aWFkZW8tc3F1YXJlIl0sICJmMmFhIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTE4LjMgMzgxLjJjLTY4LTczLjYtMTkuOC0xOTYuMSA4MS4yLTE5Ni4xIDEzLjMgMCAyNi42IDIuMSAzOS4xIDYuNy00LjMgOC40LTcuMyAxNy42LTguNCAyNy4xLTkuNy00LjEtMjAuMi02LTMwLjctNi00OC44IDAtODQuNiA0MS43LTg0LjYgODguOSAwIDQzIDI4LjUgNzguNyA2OS41IDg1LjkgNjEuNS0yNCA3Mi45LTExNy42IDcyLjktMTc1IDAtNy4zIDAtMTQuOC0uNi0yMi4xLTExLjItMzIuOS0yNi42LTY0LjYtNDQuMi05NC41IDI3LjEgMTguMyA0MS45IDYyLjUgNDQuMiA5NC4xbDAgLjRjNy43IDIyLjUgMTEuOCA0Ni4yIDExLjggNzAgMCA1NC4xLTIxLjkgOTktNjguMyAxMjguMmwtMi40IC4yYzUwIDEgODYuMi0zOC42IDg2LjItODcuMiAwLTEyLjItMi4xLTI0LjMtNi45LTM1LjcgOS41LTEuOSAxOC41LTUuNiAyNi40LTEwLjUgMTUuMyAzNi42IDEyLjYgODcuMy0yMi44IDEyNS42LTQyLjQgNDYuMi0xMjAgNDYuNi0xNjIuNCAwek0yNzQuNiAyMTcuNmMyMS45LTEyIDQ5LjYtMzAuNyA2Mi4zLTUzIDEuNS0zIDQuMS04LjYgNC41LTEyLTEyLjUgMjcuOS00NC4yIDQ5LjgtNzMuOSA1Ni43LTQuNy03LjMtNy41LTE1LjUtNy41LTI0LjMgMC0xMC4zIDUuMi0yNC4xIDEyLjktMzEuNiA4LjMtNy45IDE4LTEwLjkgMjcuOS0xNC4xIDE2LTUuMSAzMi41LTEwLjMgNDQuNS0zNS45IDMyLjUgNDYuMiAxMy4xIDEzMC4zLTM2LjMgMTMwLjMtMTMuMyAwLTI1LjEtNy4xLTM0LjQtMTYuMXoiXQogICAgfTsKICAgIGZhVmlhZGVvU3F1YXJlID0gZmFTcXVhcmVWaWFkZW87CiAgICBmYUNwYW5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcGFuZWwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM4OCIsICJNMjEwLjMgMjIwLjJjLTUuNi0yNC44LTI2LjktNDEuMi01MS00MS4ybC0zNyAwYy03LjEgMC0xMi41IDQuNS0xNC4zIDEwLjlMNzMuMSAzMjAgOTcuOCAzMTkuOWM2LjggMCAxMi4zLTQuNSAxNC4yLTEwLjdsMjUuOC05NS43IDE5LjggMGM4LjQgMCAxNi4yIDUuNiAxOC4zIDE0LjggMi41IDEwLjktNS45IDIyLjYtMTguMyAyMi42bC0xMC4zIDBjLTcgMC0xMi41IDQuNi0xNC4zIDEwLjhsLTYuNCAyMy44IDMyIDBjMzcuMiAwIDU4LjMtMzYuMiA1MS43LTY1LjN6bS0xNTYuNSAyOGwxOC42IDBjNi45IDAgMTIuNC00LjQgMTQuMy0xMC45bDYuMi0yMy42LTQwIDBDMzAgMjEzLjcgOSAyMjcuOCAxLjcgMjU0LjgtNyAyODguNiAxOC41IDMyMCA1MiAzMjBsMTIuNCAwIDcuMS0yNi4xYzEuMi00LjQtMi4yLTguMy02LjQtOC4zbC0xMS4zIDBjLTI0LjcgMC0yNC45LTM3LjQgMC0zNy40em0yNDcuNS0zNC44bC03Ny45IDAtMy41IDEzLjRjLTIuNCA5LjYgNC41IDE4LjUgMTQuMiAxOC41bDU3LjUgMGM0IDAgMi40IDQuMyAyLjEgNS4zbC04LjYgMzEuOGMtLjQgMS40LS45IDUuMy01LjUgNS4zbC0zNC45IDBjLTUuMyAwLTUuMy03LjkgMC03LjlsMjEuNiAwYzYuOCAwIDEyLjMtNC42IDE0LjItMTAuOGwzLjUtMTMuMi00OC40IDBjLTM5LjIgMC00My42IDYzLjgtLjcgNjMuOGw1Ny41IC4yYzExLjIgMCAyMC42LTcuMiAyMy40LTE3LjhsMTQtNTEuOGM0LjgtMTkuMi05LjctMzYuOC0yOC41LTM2Ljh6TTYzMy4xIDE3OWwtMTguOSAwYy00LjkgMC05LjIgMy4yLTEwLjQgNy45TDU2OC4yIDMyMGMyMC43IDAgMzkuOC0xMy44IDQ0LjktMzQuNWwyNi41LTk4LjJjMS4yLTQuMy0yLTguMy02LjUtOC4zek0zOTYuOCAyMTMuN2wwIC4xLTQ4LjMgMC0yNi4yIDk4Yy0xLjIgNC40IDIuMiA4LjMgNi40IDguM2wxOC45IDBjNC44IDAgOS4yLTMgMTAuNC03LjhsMTcuMi02NCAxOS44IDBjMTIuNSAwIDIxLjQgMTEuOCAxOC4xIDIzLjRsLTEwLjYgNDBjLTEuMiA0LjMgMS45IDguMyA2LjQgOC4zbDE5LjEgMGM0LjYgMCA5LjEtMi45IDEwLjMtNy44bDguOC0zMy4xYzktMzMuMS0xNS45LTY1LjQtNTAuMy02NS40em05OC4zIDc0LjZjLTMuNiAwLTYtMy40LTUuMS02LjdsOC0zMGMuOS0zLjkgMy43LTYgNy44LTZsMzIuOSAwYzIuNiAwIDQuNiAyLjQgMy45IDUuMWwtLjcgMi42Yy0uNiAyLTEuOSAzLTMuOSAzbC0yMS42IDBjLTcgMC0xMi42IDQuNi0xNC4yIDEwLjhsLTMuNSAxMyA1My40IDBjMTAuNSAwIDIwLjMtNi42IDIzLjItMTcuNmwzLjItMTJjNC45LTE5LjEtOS4zLTM2LjgtMjguMy0zNi44bC00Ny4zIDBjLTE3LjkgMC0zMy44IDEyLTM4LjYgMjkuNmwtMTAuOCA0MGMtNSAxNy43IDguMyAzNi43IDI4LjMgMzYuN2w2Ni43IDBjNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDUuNy0yMS03My4zIDB6Il0KICAgIH07CiAgICBmYU1lbmRlbGV5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lbmRlbGV5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3YjMiLCAiTTYyNC42IDMyNS4yYy0xMi4zLTEyLjQtMjkuNy0xOS4yLTQ4LjQtMTcuMi00My4zLTEtNDkuNy0zNC45LTM3LjUtOTguOCAyMi44LTU3LjUtMTQuOS0xMzEuNS04Ny40LTEzMC44LTc3LjQgLjctODEuNyA4Mi0xMzAuOSA4Mi00OC4xIDAtNTQtODEuMy0xMzAuOS04Mi03Mi45LS44LTExMC4xIDczLjMtODcuNCAxMzAuOCAxMi4yIDYzLjkgNS44IDk3LjgtMzcuNSA5OC44LTIxLjItMi4zLTM3IDYuNS01MyAyMi41LTE5LjkgMTkuNy0xOS4zIDk0LjggNDIuNiAxMDIuNiA0Ny4xIDUuOSA4MS42LTQyLjkgNjEuMi04Ny44LTQ3LjMtMTAzLjcgMTg1LjktMTA2LjEgMTQ2LjUtOC4yLS4xIC4xLS4yIC4yLS4zIC40LTI2LjggNDIuOCA2LjggOTcuNCA1OC44IDk1LjIgNTIuMSAyLjEgODUuNC01Mi42IDU4LjgtOTUuMi0uMS0uMi0uMi0uMy0uMy0uNC0zOS40LTk3LjkgMTkzLjgtOTUuNSAxNDYuNSA4LjItNC42IDEwLTYuNyAyMS4zLTUuNyAzMyA0LjkgNTMuNCA2OC43IDc0LjEgMTA0LjkgMzUuMiAxNy44LTE0LjggMjMuMS02NS42IDAtODguM3pNMzIwLjcgMzA2LjFsLS42IDBjLTQzLjQgMC02Mi44LTM3LjUtNjIuOC02Mi44IDAtMzQuNyAyOC4yLTYyLjggNjIuOC02Mi44bC42IDBjMzQuNyAwIDYyLjggMjguMSA2Mi44IDYyLjggMCAyNS0xOS4yIDYyLjgtNjIuOCA2Mi44eiJdCiAgICB9OwogICAgZmFEcmFmdDJkaWdpdGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyYWZ0MmRpZ2l0YWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM5NiIsICJNNDk2IDM5OC4xbC0xNDQtODIuMiAwIDY0LjctOTEuMyAwYzMwLjgtMzUgODEuOC05NS45IDExMS44LTE0OS4zIDM1LjItNjIuNiAxNi4xLTEyMy40LTEyLjgtMTUzLjMtNC40LTQuNi02Mi4yLTYyLjktMTY2LTQxLjItNTkuMSAxMi40LTg5LjQgNDMuNC0xMDQuMyA2Ny4zLTEzLjEgMjAuOS0xNyAzOS44LTE4LjIgNDcuNy01LjUgMzMgMTkuNCA2Ny4xIDU2LjcgNjcuMSAzMS43IDAgNTcuMy0yNS43IDU3LjMtNTcuNCAwLTI3LjEtMTkuNy01Mi4xLTQ4LTU2LjggMS44LTcuMyAxNy43LTIxLjEgMjYuMy0yNC43IDQxLjEtMTcuMyA3OCA1LjIgODMuMyAzMy41IDguMyA0NC4zLTM3LjEgOTAuNC02OS43IDEyNy42LTc2LjYgODctMTQyLjggMTU1LjctMTYxLjEgMTc0LjhsMzM2LS4xIDAgNjQuMiAxNDQtODEuOXpNMzg1LjkgMzcxbDQ3LjEgMjcuMi00Ny4xIDI3LjIgMC01NC40ek0xMDUuNCAxNjEuNGEyMi40IDIyLjQgMCAxIDEgNDQuOCAwIDIyLjQgMjIuNCAwIDEgMSAtNDQuOCAwek05OC41IDM4MC41YzI1LjYtMjcuNCA5Ny43LTEwNC43IDE1MC44LTE2OS45IDM1LjEtNDMuMSA0MC4zLTgyLjQgMjguNC0xMTIuNy03LjQtMTguOC0xNy41LTMwLjItMjQuMy0zNS43IDQ1LjMgMi4xIDY4IDIzLjQgODIuMiAzOC4zIDAgMCA0Mi40IDQ4LjIgNS44IDExMy4zLTM3IDY1LjktMTEwLjkgMTQ3LjUtMTI4LjUgMTY2LjdsLTExNC40IDB6Il0KICAgIH07CiAgICBmYVJlcGx5ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlNiIsICJNMzIwIDQ4MGwtMTkyIDBDNTcuNiA0ODAgMCA0MjIuNCAwIDM1MkwwIDE2MEMwIDg5LjYgNTcuNiAzMiAxMjggMzJsMTkyIDBjNzAuNCAwIDEyOCA1Ny42IDEyOCAxMjhsMCAxOTJjMCA3MC40LTU3LjYgMTI4LTEyOCAxMjh6TTE5My40IDI3My4yYy02LjEtMi0xMS42LTMuMS0xNi40LTMuMS03LjIgMC0xMy41IDEuOS0xOC45IDUuNnMtOS42IDktMTIuOCAxNS44bC0xLjEgMC00LjItMTguMy0yOCAwIDAgMTM4LjkgMzYuMSAwIDAtODkuN2MxLjUtNS40IDQuNC05LjggOC43LTEzLjJzOS44LTUuMSAxNi4yLTUuMWM0LjYgMCA5LjggMSAxNS42IDMuMWw0LjgtMzR6TTMwOC42IDM3Ni42Yy0zLjIgMi40LTcuNyA0LjgtMTMuNyA3LjFzLTEyLjggMy41LTIwLjQgMy41Yy0xMi4yIDAtMjEuMS0zLTI2LjUtOC45LTUuNS01LjktOC41LTE0LjctOS0yNi40bDgzLjMgMGMuOS00LjggMS42LTkuNCAyLjEtMTMuOSAuNS00LjQgLjctOC42IC43LTEyLjUgMC0xMC43LTEuNi0xOS43LTQuNy0yNi45LTMuMi03LjItNy4zLTEzLTEyLjUtMTcuMi01LjItNC4zLTExLjEtNy4zLTE3LjgtOS4yLTYuNy0xLjgtMTMuNS0yLjgtMjAuNi0yLjgtMjEuMSAwLTM3LjUgNi4xLTQ5LjIgMTguM3MtMTcuNSAzMC41LTE3LjUgNTVjMCAyMi44IDUuMiA0MC43IDE1LjYgNTMuNyAxMC40IDEzLjEgMjYuOCAxOS42IDQ5LjIgMTkuNiAxMC43IDAgMjAuOS0xLjUgMzAuNC00LjZzMTcuMS02LjggMjIuNi0xMS4ybC0xMi0yMy42em0tMjEuOC03MC4zYzMuOCA1LjQgNS4zIDEzLjEgNC42IDIzLjFsLTUxLjcgMGMuOS05LjQgMy43LTE3IDguMi0yMi42czExLjUtOC41IDIxLTguNWM4LjItLjEgMTQuMSAyLjYgMTcuOSA4em03OS45IDIuNWM0LjEgMy45IDkuNCA1LjggMTYuMSA1LjggNyAwIDEyLjYtMS45IDE2LjctNS44czYuMS05LjEgNi4xLTE1LjYtMi0xMS42LTYuMS0xNS40LTkuNi01LjctMTYuNy01LjdjLTYuNyAwLTEyIDEuOS0xNi4xIDUuN3MtNi4xIDguOS02LjEgMTUuNCAyIDExLjcgNi4xIDE1LjZ6bTAgMTAwLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjRjMCA2LjYgMiAxMS43IDYuMSAxNS42eiJdCiAgICB9OwogICAgZmFFbXBpcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW1waXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDEiLCAiTTI5NS42IDU0LjJjLTEwLjgtMi4yLTIyLjEtMy4zLTMzLjUtMy42bDAtMTguMmM3OC4xIDIuMiAxNDYuMSA0NCAxODQuNiAxMDYuNmwtMTUuOCA5LjFjLTYuMS05LjctMTIuNy0xOC44LTIwLjItMjcuMWwtMTggMTUuNWMtMjYtMjkuNi02MS40LTUwLjctMTAxLjktNTguNGw0LjgtMjMuOXpNNjEuNCAzMjIuNGwyMy03LjdjLTYuNC0xOC4zLTEwLTM4LjItMTAtNTguN3MzLjMtNDAuNCA5LjctNTguN2wtMjIuNy03LjdjMy42LTEwLjggOC4zLTIxLjMgMTMuNi0zMWwtMTUuOC05LjFDNDIgMTgxIDMyLjEgMjE3LjUgMzIuMSAyNTZzMTAgNzUgMjcuMSAxMDYuNkw3NSAzNTMuNWMtNS4zLTEwLTkuNy0yMC4zLTEzLjYtMzEuMXpNMjIxLjEgNDM0Yy00MC40LTgtNzUuOC0yOS4xLTEwMS45LTU4LjdsLTE4IDE1LjhjLTcuNS04LjYtMTQuNC0xNy43LTIwLjItMjcuNGwtMTYgOS40YzM4LjUgNjIuMyAxMDYuOCAxMDQuMyAxODQuOSAxMDYuNmwwLTE4LjNjLTExLjMtLjMtMjIuNy0xLjctMzMuNS0zLjZsNC43LTIzLjh6TTEwMS4zIDEyMC45bDE4IDE1LjVjMjYtMjkuNiA2MS40LTUwLjcgMTAxLjktNTguNGwtNC43LTIzLjhjMTAuOC0yLjIgMjIuMS0zLjMgMzMuNS0zLjZsMC0xOC4yQzE3MS45IDM0LjYgMTAzLjkgNzYuNCA2NS40IDEzOWwxNS44IDkuMWM2LTkuNyAxMi42LTE4LjkgMjAuMS0yNy4yek00MTAuNyAzOTEuMWwtMTgtMTUuOGMtMjYgMjkuNi02MS40IDUwLjctMTAxLjkgNTguN2w0LjcgMjMuOGMtMTAuOCAxLjktMjIuMSAzLjMtMzMuNSAzLjZsMCAxOC4zYzc4LjEtMi4yIDE0Ni40LTQ0LjMgMTg0LjktMTA2LjZsLTE2LjEtOS40Yy01LjcgOS43LTEyLjYgMTguOC0yMC4xIDI3LjR6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQ4My44IDBhMjM1LjggMjM1LjggMCAxIDAgLTQ3MS42IDAgMjM1LjggMjM1LjggMCAxIDAgNDcxLjYgMHptLTM5LTEwNi42TDQzNyAxNTguNWM1LjMgOS43IDEwIDIwLjIgMTMuNiAzMWwtMjIuNyA3LjdjNi40IDE4LjMgOS43IDM4LjIgOS43IDU4LjdzLTMuNiA0MC40LTEwIDU4LjdsMjMgNy43Yy0zLjkgMTAuOC04LjMgMjEtMTMuNiAzMWwxNS44IDkuMUM0NzAgMzMxIDQ3OS45IDI5NC41IDQ3OS45IDI1NnMtOS45LTc1LTI3LjEtMTA2LjZ6bS0xODMgMTc3LjdjMTYuMy0zLjMgMzAuNC0xMS42IDQwLjctMjMuNWw1MS4yIDQ0LjhjMTEuOS0xMy42IDIxLjMtMjkuMyAyNy4xLTQ2LjhsLTY0LjItMjIuMWMyLjUtNy41IDMuOS0xNS4yIDMuOS0yMy41cy0xLjQtMTYuMS0zLjktMjMuNWw2NC41LTIyLjFjLTYuMS0xNy40LTE1LjUtMzMuMi0yNy40LTQ2LjhsLTUxLjIgNDQuOGMtMTAuMi0xMS45LTI0LjQtMjAuNS00MC43LTIzLjhsMTMuMy02Ni40Yy04LjYtMS45LTE3LjctMi44LTI3LjEtMi44cy0xOC41IC44LTI3LjEgMi44bDEzLjMgNjYuNGMtMTYuMyAzLjMtMzAuNCAxMS45LTQwLjcgMjMuOGwtNTEuMi00NC44Yy0xMS45IDEzLjYtMjEuMyAyOS4zLTI3LjQgNDYuOGw2NC41IDIyLjFjLTIuNSA3LjUtMy45IDE1LjItMy45IDIzLjVzMS40IDE2LjEgMy45IDIzLjVsLTY0LjIgMjIuMWM1LjggMTcuNCAxNS4yIDMzLjIgMjcuMSA0Ni44bDUxLjItNDQuOGMxMC4yIDExLjkgMjQuNCAyMC4yIDQwLjcgMjMuNWwtMTMuMyA2Ni43YzguNiAxLjcgMTcuNyAyLjggMjcuMSAyLjhzMTguNS0xLjEgMjcuMS0yLjhsLTEzLjMtNjYuN3oiXQogICAgfTsKICAgIGZhQWNjZXNzaWJsZUljb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWNjZXNzaWJsZS1pY29uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjIxMDddLCAiZjM2OCIsICJNNDIzLjkgMjU1LjhMNDExIDQxMy4xYy0zLjMgNDAuNy02My45IDM1LjEtNjAuNi00LjlsMTAtMTIyLjUtNDEuMSAyLjNjMTAuMSAyMC43IDE1LjggNDMuOSAxNS44IDY4LjUgMCA0MS4yLTE2LjEgNzguNy00Mi4zIDEwNi41bC0zOS4zLTM5LjNjNTcuOS02My43IDEzLjEtMTY3LjItNzQtMTY3LjItMjUuOSAwLTQ5LjUgOS45LTY3LjIgMjZMNzMgMjQzLjJjMjItMjAuNyA1MC4xLTM1LjEgODEuNC00MC4ybDc1LjMtODUuNy00Mi42LTI0LjgtNTEuNiA0NkMxMDUuNSAxNjUuMyA2NC45IDEyMCA5NSA5My4xbDY4LTYwLjdjOS44LTguOCAyNC4xLTEwLjIgMzUuNS0zLjYgMCAwIDEzOS4zIDgwLjkgMTM5LjUgODEuMSAxNi4yIDEwLjEgMjAuNyAzNiA2LjEgNTIuNmwtNTguNCA2Ni41IDEwNi4xLTUuOWMxOC41LTEuMSAzMy42IDE0LjQgMzIuMSAzMi43ek0zNTkgMTAxLjhBNTAuOSA1MC45IDAgMSAwIDM1OSAwIDUwLjkgNTAuOSAwIDEgMCAzNTkgMTAxLjh6TTE3OS42IDQ1Ni41Yy04MC42IDAtMTI3LjQtOTAuNi04Mi43LTE1Ni4xTDU3LjIgMjYwLjdDMzYuNCAyODcgMjQgMzIwLjMgMjQgMzU2LjQgMjQgNDg3LjEgMTc0LjcgNTU3LjggMjc1LjQgNDc4LjlsLTM5LjctMzkuN2MtMTYgMTAuOS0zNS4zIDE3LjMtNTYuMSAxNy4zeiJdCiAgICB9OwogICAgZmFRdW9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxdW9yYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmM0IiwgIk00NDAuNyAzODYuN2wtMjkuMyAwYy0xLjUgMTMuNS0xMC41IDMwLjgtMzMgMzAuOC0yMC41IDAtMzUuMy0xNC4yLTQ5LjUtMzUuOCA0NC4yLTM0LjIgNzQuNy04Ny41IDc0LjctMTUzIC4xLTExNy41LTk2LjYtMTk2LjctMTk4LjQtMTk2LjctOTkuNyAwLTE5Ny43IDc5LjctMTk3LjcgMTk2LjcgMCAxMzQuMSAxMzEuMyAyMjEuNiAyNDkgMTg5IDE5LjcgMzMuNiA0NS43IDYyLjMgOTUuMiA2Mi4zIDgxLjggMCA5MC44LTc1LjMgODktOTMuM3pNMjk3LjIgMzI5LjJjLTE5LjUtMjkuMi00My43LTUyLjItOTEuNS01Mi4yLTMwLjUgMC01NC4zIDEwLTY5IDIyLjhsMTIuMiAyNC4zYzYuMi0zIDEzLTQgMTkuOC00IDM1LjUgMCA1My43IDMwLjggNjkuMiA2MS4zLTEwIDMtMjAuNyA0LjItMzIuNyA0LjItNzUgMC0xMDcuNS01My0xMDcuNS0xNTYuNyAwLTEwNC40IDMyLjUtMTU3LjkgMTA3LjUtMTU3LjkgNzYuMiAwIDEwOC43IDUzLjUgMTA4LjcgMTU3LjcgLjEgNDEuOC01LjQgNzUuNi0xNi43IDEwMC41eiJdCiAgICB9OwogICAgZmFDY0pjYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1qY2IiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0YiIsICJNNDMxLjUgMjQ0LjNsMC0zMi4zYzQxLjIgMCAzOC41IC4yIDM4LjUgLjIgNy4zIDEuMyAxMy4zIDcuMyAxMy4zIDE2IDAgOC44LTYgMTQuNS0xMy4zIDE1LjgtMS4yIC40LTMuMyAuMy0zOC41IC4zem00Mi44IDIwLjJjLTIuOC0uNy0zLjMtLjUtNDIuOC0uNWwwIDM1YzM5LjYgMCA0MCAuMiA0Mi44LS41IDcuNS0xLjUgMTMuNS04IDEzLjUtMTcgMC04LjctNi0xNS41LTEzLjUtMTd6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE4MiAxOTIuM2wtNTcgMGMwIDY3LjEgMTAuNyAxMDkuNy0zNS44IDEwOS43LTE5LjUgMC0zOC44LTUuNy01Ny4yLTE0LjhsMCAyOGMzMCA4LjMgNjggOC4zIDY4IDguMyA5Ny45IDAgODItNDcuNyA4Mi0xMzEuMnptMTc4LjUgNC41Yy02My40LTE2LTE2NS0xNC45LTE2NSA1OS4zIDAgNzcuMSAxMDguMiA3My42IDE2NSA1OS4ybDAtMjguM0MzMTIuOSAzMTEuNyAyNTMgMzA5IDI1MyAyNTZzNTkuOC01NS42IDEwNy41LTMxLjJsMC0yOHpNNTQ0IDI4Ni41YzAtMTguNS0xNi41LTMwLjUtMzgtMzJsMC0uOGMxOS41LTIuNyAzMC4zLTE1LjUgMzAuMy0zMC4yIDAtMTktMTUuNy0zMC0zNy0zMSAwIDAgNi4zLS4zLTEyMC4zLS4zbDAgMTI3LjUgMTIyLjcgMGMyNC4zIC4xIDQyLjMtMTIuOSA0Mi4zLTMzLjJ6Il0KICAgIH07CiAgICBmYUZlZG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmZWRvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc5OCIsICJNMCAyNTUuOEMuMSAxMzIuMiAxMDAuMyAzMiAyMjQgMzJTNDQ4IDEzMi4zIDQ0OCAyNTYgMzQ3LjggNDc5LjkgMjI0LjEgNDgwTDUwLjkgNDgwQzIyLjggNDgwIC4xIDQ1Ny4zIDAgNDI5LjJsMCAwIDAtMTczLjQgMCAwem0zNDIuNi02My4xYzAtMzkuNy0zNS42LTY4LjUtNzMuMi02OC41LTM0LjkgMC02NS44IDI2LjMtNzAuMSA1OS45LS4yIDMuOC0uNCA1LS40IDguNS0uMSAyMS4xIDAgNDIuOC0uOCA2NC40IC45IDI2LjEgMSA1Mi4xIDAgNzYuNiAwIDI3LjEtMTkuNCA0NS41LTQ0LjcgNDUuNXMtNDUuOC0yMC4yLTQ1LjgtNDUuNWMuNS0yNy43IDIyLjYtNDUuMyA0OC41LTQ2LjFsLjIgMCAyNi4zLS4yIDAtMzcuMy0yNi4zIC4yYy00Ny4xLS40LTg0LjYgMzYuNS04NS45IDgzLjQgMCA0NS42IDM3LjUgODIuOSA4MyA4Mi45IDQzIDAgNzguNy0zMy42IDgyLjYtNzUuNmwuMi01My41IDMyLjYtLjNjMjUuMyAuMiAyNS0zNy44LS4yLTM3LjNsLTMyLjQgLjNjMC02LjQgLjEtMTIuOCAuMS0xOS4yIC4xLTEyLjcgLjEtMjUuNC0uMS0zOC4yIC4xLTE2LjUgMTUuOC0zMS4yIDMzLjItMzEuMiAxNy41IDAgMzUuOSA4LjcgMzUuOSAzMS4yIDAgMy4yLS4xIDUuMS0uMyA2LjMtMS45IDEwLjUgNS4yIDIwLjQgMTUuNyAyMS45IDEwLjYgMS41IDIwLjItNi4xIDIxLjItMTYuNiAuNi00LjIgLjctNy45IC43LTExLjZ6Il0KICAgIH07CiAgICBmYUR1b2xpbmdvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImR1b2xpbmdvIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4MTIiLCAiTTUwNC4zIDIzMC41YzEwLjQgODguNS00My40IDE3Mi4xLTEyOC4yIDE5OXMtMTc2LjYtMTAuMy0yMTguOS04OC43Yy03MiAzLTEzNy40LTM5LjgtMTYzLjItMTA1LjUtMi42LTYuNi0xLjktMTQgMS45LTE5LjlzMTAuMi05LjcgMTcuMi0xMC4xbDk2LjEtNi0yMy44LTc1LjljLTYuMy0yMC0yLjItNDEuOSAxMS01OC4zczMzLjctMjUgNTQuNS0yM2M1Mi4yIDUgODYuOCA0LjggMTA0LS42UzMwMCAxNi43IDMzOS0xNi45YzE1LjktMTMuNyAzNy43LTE4LjUgNTcuOC0xMi43czM2LjEgMjEuMyA0Mi40IDQxLjRMNDYyLjggODcgNTQzLjYgMzcuM2M2LTMuNyAxMy40LTQuMyAxOS45LTEuNnMxMS4zIDguMyAxMi45IDE1LjJjMTYuMiA2OC4yLTEyLjQgMTQwLjMtNzIuMSAxNzkuNXpNMjU4LjUgNDc1LjlsMCAwYzE1LjEgNy41IDIxLjUgMjUuOCAxNC4yIDQxcy0yNS40IDIxLjktNDAuNyAxNC45bC00My45LTIxYy0xNS4xLTcuNS0yMS41LTI1LjgtMTQuMi00MXMyNS40LTIxLjkgNDAuNy0xNC45bDQzLjggMjF6TTU2NC42IDM0NS43YzE0LjggOC40IDIwIDI3LjMgMTEuNiA0Mi4ybC0yMy45IDQyLjRjLTguNyAxNC4zLTI3LjEgMTkuMi00MS42IDEwLjlzLTE5LjktMjYuNi0xMi00MS40bDIzLjktNDIuNGM0LTcuMSAxMC43LTEyLjQgMTguNi0xNC42czE2LjMtMS4yIDIzLjQgMi45eiJdCiAgICB9OwogICAgZmFGaXJzdGRyYWZ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcnN0ZHJhZnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjNhMSIsICJNMzg0IDE5MmwtNjQgMCAwIDEyOC0xMjggMCAwIDEyOC0xOTIgMCAwLTI1LjYgMTY2LjQgMCAwLTEyOCAxMjggMCAwLTEyOCA4OS42IDAgMCAyNS42em0tMjUuNiAzOC40bDAgMTI4LTEyOCAwIDAgMTI4LTE2Ni40IDAgMCAyNS42IDE5MiAwIDAtMTI4IDEyOCAwIDAtMTUzLjYtMjUuNiAwem0yNS42IDE5MmwtODkuNiAwIDAgODkuNiAyNS42IDAgMC02NCA2NCAwIDAtMjUuNnpNMCAwbDAgMzg0IDEyOCAwIDAtMTI4IDEyOCAwIDAtMTI4IDEyOCAwIDAtMTI4LTM4NCAweiJdCiAgICB9OwogICAgZmFGcmVlYnNkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZyZWVic2QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNhNCIsICJNMzAzLjcgOTYuMmMxMS4xLTExLjEgMTE1LjUtNzcgMTM5LjItNTMuMiAyMy43IDIzLjctNDIuMSAxMjguMS01My4yIDEzOS4ycy0zOS40IC45LTYzLjEtMjIuOWMtMjMuOC0yMy43LTM0LjEtNTItMjIuOS02My4xek0xMDkuOSA2OC4xQzczLjYgNDcuNSAyMiAyNC42IDUuNiA0MS4xLTExIDU3LjcgMTIuNyAxMTAuNSAzMy41IDE0Ni44IDUyIDExNC42IDc4LjMgODcuNSAxMDkuOSA2OC4xek00MDYuNyAxNzRjMy4zIDExLjMgMi43IDIwLjctMi43IDI2LjEtMjAuMyAyMC4zLTg3LjUtMjctMTA5LjMtNzAuMS0xOC0zMi4zLTExLjEtNTMuNCAxNC45LTQ4LjcgNS43LTMuNiAxMi4zLTcuNiAxOS42LTExLjYtMjkuOC0xNS41LTYzLjYtMjQuMy05OS41LTI0LjMtMTE5LjEgMC0yMTUuNiA5Ni41LTIxNS42IDIxNS42IDAgMTE5IDk2LjUgMjE1LjYgMjE1LjYgMjE1LjZTNDQ1LjMgMzgwLjEgNDQ1LjMgMjYxYzAtMzguNC0xMC4xLTc0LjUtMjcuNy0xMDUuOC0zLjkgNy03LjYgMTMuMy0xMC45IDE4Ljh6Il0KICAgIH07CiAgICBmYU9keXNlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvZHlzZWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTVjNiIsICJNNDA2LjcgNDYzYy00Mi4zIDMwLjgtOTQuNCA0OS0xNTAuNyA0OS0xMTEuMSAwLTIwNS43LTcwLjgtMjQxLjEtMTY5LjggMi40IDEuNyA1LjkgMy42IDcuOSA0LjQgMTYuMyA3LjQgNDAuMS01LjQgNjIuOS0yOC43IDYuOS02LjkgMTQuNC0xMi40IDIyLjgtMTcuMyAxOC4zLTExLjkgMzcuNi0yMC44IDU4LjQtMjcuMiAwIDAgMjIuMyAzNC4yIDQzLjEgNzQuOHMtMjIuMyA1NC0yNy4yIDU0Yy0uMyAwLS44IDAtMS41LS4xLTExLS41LTcwLTMtNTYgNTEuMSAxNC45IDU3LjQgOTcuNSAzNi42IDEzOS42IDguOXMzMS43LTExOC4zIDMxLjctMTE4LjNjNDEuMS02LjQgNTQgMzcuMSA1Ny45IDU5LjQgLjggNC42IDEuMSA5LjkgMS40IDE1LjUgMS4xIDIxLjIgMi4zIDQ1LjYgMzUuMyA0Ni40IDUuMyAwIDEwLjYtLjggMTUuNS0ybDAtLjF6bS05NS4zLTIzLjdjLTItLjUtMy41LTIuNS0zLTUgMS0yLjUgMy0zLjUgNS0zczMuNSAzIDMgNS0yLjUgMy41LTUgM3ptLTIwNy05NS42YzEuNS0uNSAzLjUgMSA0IDMgMCAyLTEgNC0zIDQtMS41IC41LTMuNS0xLTQtMy0uNS0xLjUgMS0zLjUgMy00ek00NTEuOCA0MjFjMzcuNS00NC42IDYwLjItMTAyLjIgNjAuMi0xNjUgMC02Ny41LTI2LjEtMTI4LjktNjguOC0xNzQuNy0uMSAyMy41LTYuMSA0OC4yLTE2LjggNjkuMi0xMS45IDIwLjMtNDkgNTguOS02OS44IDc4LjctLjcgLjMtMS4xIC45LTEuNSAxLjQtLjIgLjItLjMgLjQtLjUgLjYtNSA2LjktNCAxNi44IDMgMjEuOCAyMS4zIDE1LjggNTYuNCA0NS42IDU5LjQgNzIuOCAzLjUgMzQuOSAyNy45IDc1LjYgMzQuMiA4Ni4yIC44IDEuMyAxLjMgMi4xIDEuNCAyLjQgMCAyLjItLjQgNC4zLS44IDYuNWwwIC4xek0zOTAuNyAyNTFjLS41IDMgMSA1LjkgNCA2LjRzNS45LTEgNi40LTQtMS01LjktNC02LjRjLTMtMS01LjkgMS02LjQgNHptNjEuNC02MC45bC0xMS40IDUuNC0zIDEyLjktNS40LTExLjQtMTIuOS0zIDExLjQtNS40IDMtMTIuOSA1LjQgMTEuNCAxMi45IDN6TTM5NS41IDQxLjNjLTE2LjIgOC4yLTIyLjEgMzIuOC0yOSA2MS40LS4zIDEuNC0uNyAyLjgtMSA0LjItOS41IDM4LjUtMzAuNiAzNy42LTQxLjcgMzcuMi0xLjEgMC0yLS4xLTIuOS0uMS01LjEgMC02LTQtOC45LTE3LjEtMi42LTEyLjEtNi45LTMyLTE3LjktNjMuNi0yMi43LTY1LjgtODIuNy00OS40LTEyOC4yLTIyLjItNTUuMyAzMy4xLTM0LjQgMTAxLjktMTkuOCAxNDkuNCAuNyAyLjIgMS40IDQuNCAyIDYuNi00IDQtMTMuOCA3LjUtMjYgMTEuOS0xMi4xIDQuMy0yNi42IDkuNS00MC4zIDE2LjktMzMuOSAxOC03MC4zIDQ5LTc5LjggNjIuNi0xLjMtMTAuNy0yLTIxLjUtMi0zMi41IDAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgNTEuNCAwIDk5LjQgMTUuMiAxMzkuNSA0MS4zek01OC45IDE4OS42Yy0xLjUtMi00LjUtMy02LjQtMS41cy0zIDQuNS0xLjUgNi40IDQuNSAzIDYuNCAxLjVjMi41LTEuNSAzLTQuNSAxLjUtNi40ek0zMjcuMyA2NC45YzItMS41IDUtLjUgNi40IDEuNSAxLjUgMi41IDEgNS40LTEuNSA2LjQtMiAxLjUtNSAuNS02LjQtMS41cy0uNS01IDEuNS02LjR6TTk1LjEgMTA1Yy0uNSAxLjUgLjUgMyAyIDMgMS41IC41IDMtLjUgMy0yIC41LTEuNS0uNS0zLTItM3MtMyAuNS0zIDJ6bTg0LjctLjVjLTMuNS00My4xIDM3LjEtNTQgMzcuMS01NCA0NC4xLTE1LjQgNTYgNS45IDY2LjQgMzcuNnMzIDQyLjYtMzguNiA1OC45LTYxLjktNC41LTY0LjktNDIuNmwwIC4xem04OS42IDE0LjlsMSAwYzIuNSAwIDUtMiA1LTUgMi02LjkgMS0xNC40LTItMjAuOC0xLjUtMi00LTMuNS02LjQtMi41LTMgMS00LjUgNC0zLjUgNi45IDIgNC41IDMgOS45IDEuNSAxNC45LS41IDMgMS41IDUuOSA0LjUgNi40bC0uMSAuMXptLTkuOS00MS42Yy0yIDAtNC0xLTUtM3MtMi0zLjUtMy01Yy0yLTItMi01LjQgMC03LjRzNS40LTIgNy40IDBjMiAyLjUgMy41IDUgNSA3LjRzLjUgNS45LTIuNSA3LjRjLS42IDAtMSAuMi0xLjMgLjMtLjIgLjEtLjQgLjItLjYgLjJsMCAuMXoiXQogICAgfTsKICAgIGZhR2dDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2ctY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjEiLCAiTTI1Ny41IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0yMDggMzgyLjhsLTEyNS43LTEyNS43IDEyNS43LTEyNS43IDM1LjIgMzUuNC0yNC4yIDI0LjItMTEuMS0xMS4xLTc3LjIgNzcuMiA3Ny4yIDc3LjIgMjYuNi0yNi42LTUzLjEtNTIuOSAyNC40LTI0LjQgNzcuMiA3Ny4yLTc1IDc1LjJ6bTk5LTIuMmwtMzUuMi0zNS4yIDI0LjEtMjQuNCAxMS4xIDExLjEgNzcuMi03Ny4yLTc3LjItNzcuMi0yNi41IDI2LjUgNTMuMSA1Mi45LTI0LjQgMjQuNC03Ny4yLTc3LjIgNzUtNzUgMTI1LjcgMTI1LjctMTI1LjcgMTI1LjZ6Il0KICAgIH07CiAgICBmYUNsb3VkZmxhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRmbGFyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDdkIiwgIk00MDcuOSAzMTkuOUwxNzcuMSAzMTdjLS43IDAtMS40LS4yLTItLjVzLTEuMi0uOC0xLjYtMS40Yy0uNC0uNi0uNy0xLjMtLjctMnMwLTEuNCAuMi0yLjFjLjQtMS4xIDEuMS0yLjEgMi4xLTIuOHMyLjEtMS4yIDMuMy0xLjJsMjMyLjktMi45YzI3LjYtMS4zIDU3LjUtMjMuNiA2OC01MC44bDEzLjMtMzQuNWMuNC0uOSAuNS0xLjkgLjUtMi45IDAtLjUtLjEtMS4xLS4yLTEuNi03LjQtMzIuMi0yNS02MS4xLTUwLjMtODIuM3MtNTYuNy0zMy43LTg5LjctMzUuNS02NS42IDcuMy05MyAyNS43LTQ4IDQ1LjMtNTguOCA3Ni41Yy0xMS4zLTguNS0yNC45LTEzLjMtMzktMTMuN3MtMjggMy41LTM5LjggMTEuNC0yMC44IDE5LjEtMjUuOSAzMi4zLTUuOSAyNy42LTIuNCA0MS4zYy01Mi4zIDEuNS05NC4yIDQ0LjEtOTQuMiA5Ni41IDAgNC43IC4zIDkuMyAxIDE0IC4yIDEuMSAuNyAyLjEgMS41IDIuOHMxLjkgMS4xIDIuOSAxLjFsNDI2LjEgLjFjMCAwIC4xIDAgLjEgMCAxLjIgMCAyLjMtLjQgMy4zLTEuMXMxLjYtMS43IDItMi45bDMuMy0xMS4zYzMuOS0xMy40IDIuNC0yNS44LTQuMS0zNC45LTYtOC40LTE2LjEtMTMuMy0yOC4yLTEzLjl6bTEwNS45LTk4LjhjLTIuMSAwLTQuMyAuMS02LjQgLjItLjggLjEtMS41IC4zLTIuMSAuOHMtMSAxLjEtMS4zIDEuOGwtOS4xIDMxLjJjLTMuOSAxMy40LTIuNCAyNS44IDQuMSAzNC45IDYgOC40IDE2LjEgMTMuMyAyOC4yIDEzLjlsNDkuMiAyLjljLjcgMCAxLjQgLjIgMiAuNXMxLjEgLjggMS41IDEuNGMuNCAuNiAuNyAxLjMgLjggMnMwIDEuNS0uMiAyLjFjLS40IDEuMS0xLjEgMi4xLTIuMSAyLjhzLTIuMSAxLjItMy4zIDEuMmwtNTEuMSAyLjljLTI3LjggMS4zLTU3LjcgMjMuNi02OC4xIDUwLjhsLTMuNyA5LjZjLS4yIC40LS4yIC44LS4yIDEuM3MuMiAuOCAuNCAxLjIgLjYgLjcgLjkgLjkgLjggLjMgMS4yIC4zYzAgMCAuMSAwIC4xIDBsMTc1LjkgMGMxIDAgMi0uMyAyLjgtLjlzMS40LTEuNSAxLjctMi40YzMuMS0xMS4xIDQuNy0yMi41IDQuNy0zNCAwLTY5LjMtNTYuNS0xMjUuNS0xMjYuMS0xMjUuNXoiXQogICAgfTsKICAgIGZhSGFja2VycmFuayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoYWNrZXJyYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1ZjciLCAiTTQ3Ny45IDEyOEM0NjMuNCAxMDMgMjg1LjUgMCAyNTYuNSAwcy0yMDYuOSAxMDIuOC0yMjEuMyAxMjgtMTQuNSAyMzAuOCAwIDI1NiAxOTIuNCAxMjggMjIxLjMgMTI4IDIwNi44LTEwMi45IDIyMS4zLTEyOCAxNC41LTIzMSAwLTI1NnpNMzE2LjUgNDE0LjJjLTQgMC00MC45LTM1LjgtMzgtMzguNyAuOS0uOSA2LjMtMS41IDE3LjUtMS44IDAtMjYuMiAuNi02OC42IC45LTg2LjMgMC0yLS40LTMuNC0uNC01LjhsLTc5LjkgMGMwIDcuMS0uNSAzNi4yIDEuNCA3Mi45IC4yIDQuNS0xLjYgNi01LjcgNS45LTEwLjEgMC0yMC4zLS4xLTMwLjQtLjEtNC4xIDAtNS45LTEuNS01LjctNi4xIC45LTMzLjQgMy04NC0uMi0yMTIuN2wwLTMuMmMtOS43LS40LTE2LjQtMS0xNy4zLTEuOC0yLjktMi45IDM0LjUtMzguNyAzOC41LTM4LjdzNDEuMiAzNS44IDM4LjMgMzguN2MtLjkgLjktNy45IDEuNS0xNi44IDEuOGwwIDMuMmMtMi40IDI1LjgtMiA3OS42LTIuNiAxMDUuNGw4MC4zIDBjMC00LjYgLjQtMzQuNy0xLjItODMuNi0uMS0zLjQgMS01LjIgNC4yLTUuMiAxMS4xLS4xIDIyLjItLjEgMzMuMi0uMSAzLjUgMCA0LjYgMS43IDQuNSA1LjQtMy43IDE5MS4zLS43IDE3Ny45LS43IDIxMC4zIDguOSAuNCAxNi44IDEgMTcuNyAxLjggMi45IDIuOS0zMy42IDM4LjctMzcuNiAzOC43bDAgMHoiXQogICAgfTsKICAgIGZhU2t5YXRsYXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2t5YXRsYXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIxNiIsICJNNjQwIDMyOS4zYzAgNjUuOS01Mi41IDExNC40LTExNy41IDExNC40LTE2NS45IDAtMTk2LjYtMjQ5LjctMzU5LjctMjQ5LjctMTQ2LjkgMC0xNDcuMSAyMTIuMiA1LjYgMjEyLjIgNDIuNSAwIDkwLjktMTcuOCAxMjUuMy00Mi41IDUuNi00LjEgMTYuOS0xNi4zIDIyLjgtMTYuM3MxMC45IDUgMTAuOSAxMC45YzAgNy44LTEzLjEgMTkuMS0xOC43IDI0LjEtNDAuOSAzNS42LTEwMC4zIDYxLjItMTU0LjcgNjEuMi04My40IC4xLTE1NC01OS0xNTQtMTQ0LjlTNjcuNSAxNDkuNiAxNTIuOCAxNDkuNmMxODUuMyAwIDIyMi41IDI0NS45IDM2MS45IDI0NS45IDk5LjkgMCA5NC44LTEzOS43IDMuNC0xMzkuNy0xNy41IDAtMzUgMTEuNi00Ni45IDExLjYtOC40IDAtMTUuOS03LjItMTUuOS0xNS42IDAtMTEuNiA1LjMtMjMuNyA1LjMtMzYuMyAwLTY2LjYtNTAuOS0xMTQuNy0xMTYuOS0xMTQuNy01My4xIDAtODAgMzYuOS04OC44IDM2LjktNi4yIDAtMTEuMi01LTExLjItMTEuMiAwLTUuNiA0LjEtMTAuMyA3LjgtMTQuNCAyNS4zLTI4LjggNjQuNy00My43IDEwMi44LTQzLjcgNzkuNCAwIDEzOS4xIDU4LjQgMTM5LjEgMTM3LjggMCA2LjktLjMgMTMuNy0xLjIgMjAuNiAxMS45LTMuMSAyNC4xLTQuNyAzNS45LTQuNyA2MC43IDAgMTExLjkgNDUuMyAxMTEuOSAxMDcuMnoiXQogICAgfTsKICAgIGZhRGVza3BybyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXNrcHJvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOGYiLCAiTTIyMiA1MTJsMzEuMS0zOC40YzEyLjMtLjIgMjUuNi0xLjQgMzYuNS02LjYgMzguOS0xOC42IDM4LjQtNjEuOSAzOC4zLTYzLjgtLjEtNS0uOC00LjQtMjguOS0zNy40bDc5LjEgMGMtLjIgNTAuMS03LjMgNjguNS0xMC4yIDc1LjctOS40IDIzLjctNDMuOSA2Mi44LTk1LjIgNjkuNC04LjcgMS4xLTMyLjggMS4yLTUwLjcgMS4xek00MjIuNCAzNDQuM2MzOC42IDAgNTguNS0xMy42IDczLjctMzAuOWwtMTc1LjUtLjMtMTcuNCAzMS4zIDExOS4yLS4xek0zNzguOCAxMjAuNGwwIDE2OC4zLTczLjUgMC0zMi43IDU1LjUtNi41IDBjLTUyLjMgMC01OC4xLTU2LjUtNTguMy01OC45LTEuMi0xMy4yLTIxLjMtMTEuNi0yMC4xIDEuOCAxLjQgMTUuOCA4LjggNDAgMjYuNCA1Ny4xbC05MSAwYy0yNS41IDAtMTEwLjgtMjYuOC0xMDctMTE0bDAtMjEzLjNjMC0xNiA5LjctMTYuNiAxNS0xNi44bDgyIDBjLjIgMCAuMyAuMSAuNSAuMSA0LjMtLjQgNTAuMS0yLjEgNTAuMSA0My43IDAgMTMuMyAyMC4yIDEzLjQgMjAuMiAwIDAtMTguMi01LjUtMzIuOC0xNS44LTQzLjdsODQuMiAwQzM2MS0uMiAzNzguOCA3OS42IDM3OC44IDEyMC40em0tMTMyLjUgNTZsNjQgMjkuM2MxMy4zLTQ1LjUtNDIuMi03MS43LTY0LTI5LjN6Il0KICAgIH07CiAgICBmYVJlc29sdmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNvbHZpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlNyIsICJNMjg5LjIgMjc4LjJjNDYtMTMuMyA0OS42LTIzLjUgNDQtNDMuNEwzMjIgMTk1LjVjLTYuMS0yMC45LTE4LjQtMjguMS03MS4xLTEyLjhsLTE4OC4yIDU0LjEgMjguNiA5OC42IDE5Ny45LTU3LjJ6TTI1Ni41IDhDMTM5LjQgOCA0MS4yIDg4LjcgMTUuMiAxOTcuNWwyMjEuOS02My45YzM0LjgtMTAuMiA1NC4yLTExLjcgNzkuMy04LjIgMzYuMyA2LjEgNTIuNyAyNSA2MS40IDU1LjJsMTAuNyAzNy44YzguMiAyOC4xIDEgNTAuNi0yMy41IDczLjYtMTkuNCAxNy40LTMxLjIgMjQuNS02MS40IDMzLjJsLTkyLjYgMjYuNiAyMjAuNCAyNy4xIDkuNyAzNC4yLTQ4LjEgMTMuMy0yODYuOC0zNy4zIDIzIDgwLjJDMTY2IDQ5MS4zIDIwOS41IDUwNCAyNTUuNSA1MDQgMzkyLjUgNTA0IDUwNCAzOTIuNiA1MDQgMjU1LjcgNTA1IDExOS40IDM5My41IDggMjU2LjUgOHpNNDYuMyAzODguNkw4IDI1Ni44YzAgNDguNSAxNC4zIDkzLjQgMzguMyAxMzEuOHoiXQogICAgfTsKICAgIGZhQmxhY2tiZXJyeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibGFja2JlcnJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzN2IiLCAiTTE2NiAxMTYuOWMwIDIzLjQtMTYuNCA0OS4xLTcyLjUgNDkuMWwtNzAuMSAwIDIxLTg4LjggNjcuOCAwYzQyLjEgMCA1My44IDIzLjMgNTMuOCAzOS43ek0yOTIuMiA3Ny4ybC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi40LTExLjYtMzkuNy01My43LTM5Ljd6TTg4LjggMjA4LjFsLTY3LjggMC0yMSA4OC44IDcwLjEgMGM1Ni4xIDAgNzIuNS0yMy40IDcyLjUtNDkuMSAwLTE2LjMtMTEuNy0zOS43LTUzLjgtMzkuN3ptMTgwLjEgMGwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My43LTM5Ljd6bTE4OS4zLTUzLjhsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIC4xLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3ptLTI4IDEzNy45bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yMy40IDcwLjEtNDkuMSAwLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3pNMjQwLjggMzQ2bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6Il0KICAgIH07CiAgICBmYVN0cmlwZVMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyaXBlLXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyYSIsICJNMTU1LjYgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43bDAtMTM0LjNjLTQ3LjMtMTguOS05NC41LTI2LjEtMTQxLjgtMjYuMS0xMTUuNyAwLTE5Mi44IDYwLjQtMTkyLjggMTYxLjQgMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41bDAgMTI4LjVjNDkuMyAyMS4zIDEwMi4zIDMyLjMgMTU2IDMyLjQgMTE4LjYgMCAyMDAuMy01MSAyMDAuMy0xNTMuNiAwLTE3MC4yLTIxOC0xMzkuNy0yMTgtMjAzLjl6Il0KICAgIH07CiAgICBmYVNxdWFyZUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJlaGFuY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYmVoYW5jZS1zcXVhcmUiXSwgImYxYjUiLCAiTTE1NS4zIDMxOC40YzE3LjIgMCAzMS4yLTYuMSAzMS4yLTI1LjQgMC0xOS43LTExLjctMjcuNC0zMC4zLTI3LjVsLTQ2IDAgMCA1Mi45IDQ1LjEgMHptLTUuNC0xMjkuNmwtMzkuNiAwIDAgNDQuOCA0Mi43IDBjMTUuMSAwIDI1LjgtNi42IDI1LjgtMjIuOSAwLTE3LjctMTMuNy0yMS45LTI4LjktMjEuOXptMTI5LjUgNzQuOGw2Mi4yIDBjLTEuNy0xOC41LTExLjMtMjkuNy0zMC41LTI5LjctMTguMyAwLTMwLjUgMTEuNC0zMS43IDI5Ljd6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0zNDkuNSAxODVsLTc3LjggMCAwLTE4LjkgNzcuOCAwIDAgMTguOXpNMTkzLjcgMjQzLjdjMjMuNiA2LjcgMzUgMjcuNSAzNSA1MS42IDAgMzktMzIuNyA1NS43LTY3LjYgNTUuOWwtOTMuMSAwIDAtMTkyIDkwLjUgMGMzMi45IDAgNjEuNCA5LjMgNjEuNCA0Ny41IDAgMTkuMy05IDI4LjgtMjYuMiAzN3ptMTE4LjctMzguNmM0My41IDAgNjcuNiAzNC4zIDY3LjYgNzUuNCAwIDEuNi0uMSAzLjMtLjIgNSAwIC44LS4xIDEuNS0uMSAyLjJsLTEwMC4yIDBjMCAyMi4yIDExLjcgMzUuMyAzNC4xIDM1LjMgMTEuNiAwIDI2LjUtNi4yIDMwLjItMTguMWwzMy43IDBjLTEwLjQgMzEuOS0zMS45IDQ2LjgtNjUuMSA0Ni44LTQzLjggMC03MS4xLTI5LjctNzEuMS03MyAwLTQxLjggMjguNy03My42IDcxLjEtNzMuNnoiXQogICAgfTsKICAgIGZhQmVoYW5jZVNxdWFyZSA9IGZhU3F1YXJlQmVoYW5jZTsKICAgIGZhU2VydmljZXN0YWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlcnZpY2VzdGFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2VjIiwgIk05NiAyMTZjODEuNyAxMC4yIDI3My43IDEwMi4zIDMwNCAyMzJMOCA0NDhjOTkuNS04LjEgMTg0LjUtMTM3IDg4LTIzMnpNMTI4IDY0YzMyLjMgMzUuNiA0Ny43IDgzLjkgNDYuNCAxMzMuNiA4Mi45IDMzLjcgMjA3LjMgMTIzLjcgMjMzLjYgMjUwLjRsOTYgMEM0NjMuMyAyMzEuOSAyMzAuOCA3OS41IDEyOCA2NHoiXQogICAgfTsKICAgIGZhUm9ja2V0Y2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXRjaGF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZTgiLCAiTTI4NC41IDIyNC44Yy02LjcgMC0xMy4zIDIuMS0xOC45IDUuOHMtOS45IDkuMS0xMi41IDE1LjQtMy4yIDEzLjEtMS45IDE5LjcgNC42IDEyLjcgOS40IDE3LjQgMTAuOSA4IDE3LjUgOS4zIDEzLjUgLjYgMTkuNy0yIDExLjUtNyAxNS4zLTEyLjYgNS43LTEyLjIgNS43LTE4LjljMC05LjEtMy43LTE3LjgtMTAuMS0yNC4ycy0xNS4xLTEwLTI0LjItOS45em0tMTEwLjQgMGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTEwbDAgMHptMjIwLjkgMGEzNC4xIDM0LjEgMCAxIDAgLjQgNjguMiAzNC4xIDM0LjEgMCAxIDAgLS40LTY4LjJ6bTE1My44LTU1LjNjLTE1LjUtMjQuMi0zNy4zLTQ1LjYtNjQuNy02My42LTUyLjktMzQuOC0xMjIuNC01NC0xOTUuNy01NC0yNC4yIDAtNDguMyAyLjEtNzIgNi40LTE0LjktMTQuMy0zMS41LTI2LjYtNDkuNS0zNi42LTY2LjgtMzMuMy0xMjUuNi0yMC45LTE1NS4zLTEwLjItMi4zIC44LTQuMyAyLjEtNS45IDMuOXMtMi43IDMuOS0zLjMgNi4yLS41IDQuNyAuMSA3LjEgMS44IDQuNCAzLjUgNi4xQzI3IDU2LjUgNjEuNiA5OS4zIDUzLjEgMTM4LjMgMjAgMTcyLjIgMiAyMTMgMiAyNTUuNiAyIDI5OSAyMCAzMzkuOCA1My4xIDM3My43IDYxLjYgNDEyLjcgMjcgNDU1LjYgNiA0NzcuMiA0LjMgNDc5IDMuMiA0ODEuMSAyLjUgNDgzLjRzLS43IDQuNy0uMSA3IDEuNyA0LjUgMy4zIDYuMiAzLjYgMy4xIDUuOSAzLjljMjkuNyAxMC43IDg4LjUgMjMuMSAxNTUuMy0xMC4yIDE4LTEwIDM0LjctMjIuMyA0OS41LTM2LjYgMjMuOCA0LjMgNDcuOSA2LjQgNzIgNi40IDczLjMgMCAxNDIuOC0xOS4yIDE5NS43LTU0IDI3LjQtMTggNDkuMS0zOS40IDY0LjctNjMuNiAxNy4zLTI2LjkgMjYuMS01NS45IDI2LjEtODYuMSAwLTMxLTguOC02MC0yNi4xLTg2LjlsMCAwek0yODUuNCA0MDkuOWMtMzAuMiAuMS02MC4zLTMuOC04OS40LTExLjVsLTIwLjEgMTkuNGMtMTEuMiAxMC43LTIzLjYgMjAtMzcuMSAyNy42LTE2LjQgOC4yLTM0LjIgMTMuMy01Mi41IDE0LjkgMS0xLjggMS45LTMuNiAyLjgtNS40IDIwLjItMzcuMSAyNS42LTcwLjUgMTYuMy0xMDAuMS0zMy0yNi01Mi44LTU5LjItNTIuOC05NS40IDAtODMuMSAxMDQuMy0xNTAuNSAyMzIuOC0xNTAuNXMyMzIuOSA2Ny40IDIzMi45IDE1MC41YzAgODMuMS0xMDQuMyAxNTAuNS0yMzIuOSAxNTAuNXoiXQogICAgfTsKICAgIGZhUmViZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmViZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFkMCIsICJNMjU2LjkgNTA0Yy0xMzkuMyAwLTI0Ny41LTExNi4yLTI0My4zLTI1NC4xIDIuOC03OS4yIDQzLjItMTUyLjIgMTE2LjUtMjAwLjQgLjMgMCAxLjktLjYgMS4xIC44LTUuOCA1LjUtMTExLjMgMTI5LjgtMTQuMSAyMjYuNCA0OS44IDQ5LjUgOTAgMi41IDkwIDIuNSAzOC41LTUwLjEtLjYtMTI1LjktLjYtMTI1LjktMTAtMjQuOS00NS43LTQwLjEtNDUuNy00MC4xbDI4LjgtMzEuOGMyNC40IDEwLjUgNDMuMiAzOC43IDQzLjIgMzguNyAuOC0yOS42LTIxLjktNjEuNC0yMS45LTYxLjRMMjU1LjUgOCAyOTkuOCA1OC4xYy0yMC41IDI4LjgtMjEuOSA2Mi42LTIxLjkgNjIuNiAxMy44LTIzIDQzLjUtMzkuMyA0My41LTM5LjNsMjguNSAzMS44Yy0yNy40IDguOS00NS40IDM5LjktNDUuNCAzOS45LTE1LjggMjguNS0yNy4xIDg5LjQgLjYgMTI3LjMgMzIuNCA0NC42IDg3LjctMi44IDg3LjctMi44IDEwMi43LTkxLjktMTAuNS0yMjUtMTAuNS0yMjUtNi4xLTUuNSAuOC0yLjggLjgtMi44IDUwLjEgMzYuNSAxMTQuNiA4NC40IDExNi4yIDIwNC44IDIgMTQ1LjYtOTkuOSAyNDkuNC0yNDIuNCAyNDkuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlV2ViQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2ViLWF3ZXNvbWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY4MyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjM1IDE3Ny42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il0KICAgIH07CiAgICBmYUxpbmt0cmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmt0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDgiLCAiTTMyIDE3My40bDEyNS44IDAtODkuNC04NS40IDQ5LjUtNTEgODUuMiA4Ny44IDAtMTI0LjggNzMuOSAwIDAgMTI0LjggODUuMi04Ny42IDQ5LjQgNTAuOC04OS40IDg1LjIgMTI1LjcgMCAwIDcwLjUtMTI2LjQgMCA5MCA4Ny42LTQ5LjMgNDkuOC0xMjIuMi0xMjMtMTIyLjIgMTIzLTQ5LjUtNDkuNiA5MC04Ny42LTEyNi40IDAgMC03MC41ek0yMDIuOSAzNDQuOGw3My45IDAgMCAxNjcuMi03My45IDAgMC0xNjcuMnoiXQogICAgfTsKICAgIGZhU2ltcGx5YnVpbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2ltcGx5YnVpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIxNSIsICJNNDgxLjYgNjRsLTEwNiAwQzM2MS4xIDY0IDM0OSA3NS44IDM0OSA5MC4zbDAgMzkuNi0xODUuMyAwIDAtMzkuNmMwLTE0LjUtMTItMjYuMy0yNi42LTI2LjNsLTEwNiAwQzE2LjUgNjQgNC43IDc1LjggNC43IDkwLjNsMCAzMzEuNGMwIDE0LjUgMTEuOCAyNi4zIDI2LjYgMjYuM2w0NTAuNCAwYzE0LjggMCAyNi42LTExLjggMjYuNi0yNi4zbDAtMzMxLjRjLS4yLTE0LjUtMTItMjYuMy0yNi43LTI2LjN6TTE1MC41IDIyMi43YTY2LjUgNjYuNSAwIDEgMSAtLjMgMTMzLjEgNjYuNSA2Ni41IDAgMSAxIC4zLTEzMy4xem0yMTEuOSAuMWE2Ni41IDY2LjUgMCAxIDEgLjMgMTMyLjkgNjYuNSA2Ni41IDAgMSAxIC0uMy0xMzIuOXoiXQogICAgfTsKICAgIGZhU3R1YmJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHViYmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1YzciLCAiTTEzNi41IDI5NC4ybDU4LjggMjIuOWM5LjEtMzYuOCAyNS40LTYxLjEgNTUtNjEuMSA0OS40IDAgNzEuNCA2My42IDE0Mi40IDYzLjYgMTUuNiAwIDM1LjktMi44IDU1LjMtMTMuM2wwIDYxLjdjMCA2MS44LTUwLjQgMTEyLTExMi4zIDExMkwwIDQ4MCA0MS44IDQyNCAwIDM2OCA0MS43IDMxMiAwIDI1Ni4xIDQxLjggMjAwLjEgMCAxNDQuMSA0MS44IDg4IDAgMzIgMzM1LjcgMzJDMzk3LjYgMzIgNDQ4IDgyLjMgNDQ4IDE0NC4xbDAgNTEuM2MtOS4yIDM2LjMtMjUuOSA2MC42LTU1IDYwLjYtNDkuNiAwLTcxLjYtNjMuNS0xNDIuNC02My41LTM1LjkgMC05NS4yIDE0LjYtMTE0LjEgMTAxLjZsMCAuMXoiXQogICAgfTsKICAgIGZhQXBwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM3MSIsICJNNDIuMSAyMzkuMWMyMi4yIDAgMjkgMi44IDMzLjUgMTQuNmwuOCAwIDAtMjIuOWMwLTExLjMtNC44LTE1LjQtMTcuOS0xNS40LTExLjMgMC0xNC40IDIuNS0xNS4xIDEyLjhsLTM4LjYgMGMuMy0xMy45IDEuNS0xOS4xIDUuOC0yNC40IDcuMy04LjggMTguOS0xMS44IDQ2LjEtMTEuOCAzMyAwIDQ3LjEgNSA1My45IDE4LjkgMiA0LjMgNCAxNS42IDQgMjMuN2wwIDc2LjMtMzguMyAwIDEuMy0xOS4xLTEgMGMtNS4zIDE1LjYtMTMuNiAyMC40LTM1LjUgMjAuNC0zMC4zIDAtNDEuMS0xMC4xLTQxLjEtMzcuMyAwLTI1LjIgMTIuMy0zNS44IDQyLjEtMzUuOHptMTcuMSA0OC4xYzEzLjEgMCAxNi45LTMgMTYuOS0xMy40IDAtOS4xLTQuMy0xMS42LTE5LjYtMTEuNi0xMy4xIDAtMTcuOSAzLTE3LjkgMTIuMS0uMSAxMC40IDMuNyAxMi45IDIwLjYgMTIuOXpNMTM3IDE5Mi4zbDM4LjMgMC0xLjUgMjAuNiAuOCAwYzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjIgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4ybC0uOCAwIDAgNzAuMy0zOS41IDAgMC0xNjl6TTIxNy45IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTU3LjktNjAuN2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4zIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5IC4xIDB6TTM1Ni43IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTUzLjgtMy44YzAtMjUuNCAzLjMtMzcuOCAxMi4zLTQ1LjggOC44LTguMSAyMi4yLTExLjMgNDUuMS0xMS4zIDQyLjggMCA1NS43IDEyLjggNTUuNyA1NS43bDAgMTEuMS03NS4zIDBjLS4zIDItLjMgNC0uMyA0LjggMCAxNi45IDQuNSAyMS45IDIwLjEgMjEuOSAxMy45IDAgMTcuOS0zIDE3LjktMTMuOWwzNy41IDAgMCAyLjNjMCA5LjgtMi41IDE4LjktNi44IDI0LjctNy4zIDkuOC0xOS42IDEzLjYtNDQuMyAxMy42LTI3LjUgMC00MS42LTMuMy01MC42LTEyLjMtOC41LTguNS0xMS4zLTIxLjMtMTEuMy01MC44em03Ni40LTExLjZjLS4zLTEuOC0uMy0zLjMtLjMtMy44IDAtMTIuMy0zLjMtMTQuNi0xOS42LTE0LjYtMTQuNCAwLTE3LjEgMy0xOC4xIDE1LjFsLS4zIDMuMyAzOC4zIDB6bTU1LjYtNDUuM2wzOC4zIDAtMS44IDE5LjkgLjcgMGM2LjgtMTQuOSAxNC40LTIwLjIgMjkuNy0yMC4yIDEwLjggMCAxOS4xIDMuMyAyMy40IDkuMyA1LjMgNy4zIDYuOCAxNC40IDYuOCAzNCAwIDEuNSAwIDUgLjIgOS4zbC0zNSAwYy4zLTEuOCAuMy0zLjMgLjMtNCAwLTE1LjQtMi0xOS40LTEwLjMtMTkuNC02LjMgMC0xMC44IDMuMy0xMy4xIDkuMy0xIDMtMSA0LjMtMSAxMi4zbDAgNjgtMzguMyAwIDAtMTE4LjUgLjEgMHoiXQogICAgfTsKICAgIGZhR29vZ2xlU2Nob2xhciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtc2Nob2xhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjNiIiwgIk0zOTAuOSAyOTguNXMwIC4xIC4xIC4xYzkuMiAxOS40IDE0LjQgNDEuMSAxNC40IDY0LS4xIDgyLjUtNjYuOSAxNDkuNC0xNDkuNCAxNDkuNFMxMDYuNyA0NDUuMSAxMDYuNyAzNjIuN2MwLTIyLjkgNS4yLTQ0LjYgMTQuNC02NCAxLjctMy42IDMuNi03LjIgNS42LTEwLjcgNC40LTcuNiA5LjQtMTQuNyAxNS0yMS4zIDI3LjQtMzIuNiA2OC41LTUzLjMgMTE0LjQtNTMuMyAzMy42IDAgNjQuNiAxMS4xIDg5LjYgMjkuOSA5LjEgNi45IDE3LjQgMTQuNyAyNC44IDIzLjUgNS42IDYuNiAxMC42IDEzLjggMTUgMjEuMyAyIDMuNCAzLjggNyA1LjUgMTAuNWwtLjEtLjF6bTI2LjQtMTguOGMtMzAuMS01OC40LTkxLTk4LjQtMTYxLjMtOTguNHMtMTMxLjIgNDAtMTYxLjMgOTguNGwtOTQuNy03NyAyNTYtMjAyLjcgMjU2IDIwMi43LTk0LjcgNzcuMSAwLS4xeiJdCiAgICB9OwogICAgZmFZYXJuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhcm4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlMyIsICJNNDAxLjkgMzQ1LjJjLTM5IDkuMy00OC40IDMyLjEtMTA0IDQ3LjQgMCAwLTIuNyA0LTEwLjQgNS44LTEzLjQgMy4zLTYzLjkgNi02OC41IDYuMS0xMi40IC4xLTE5LjktMy4yLTIyLTguMi02LjQtMTUuMyA5LjItMjIgOS4yLTIyLTguMS01LTktOS45LTkuOC04LjEtMi40IDUuOC0zLjYgMjAuMS0xMC4xIDI2LjUtOC44IDguOS0yNS41IDUuOS0zNS4zIC44LTEwLjgtNS43IC44LTE5LjIgLjgtMTkuMnMtNS44IDMuNC0xMC41LTMuNmMtNi05LjMtMTcuMS0zNy4zIDExLjUtNjItMS4zLTEwLjEtNC42LTUzLjcgNDAuNi04NS42IDAgMC0yMC42LTIyLjgtMTIuOS00My4zIDUtMTMuNCA3LTEzLjMgOC42LTEzLjkgNS43LTIuMiAxMS4zLTQuNiAxNS40LTkuMSAyMC42LTIyLjIgNDYuOC0xOCA0Ni44LTE4czEyLjQtMzcuOCAyMy45LTMwLjRjMy41IDIuMyAxNi4zIDMwLjYgMTYuMyAzMC42czEzLjYtNy45IDE1LjEtNWM4LjIgMTYgOS4yIDQ2LjUgNS42IDY1LjEtNi4xIDMwLjYtMjEuNCA0Ny4xLTI3LjYgNTcuNS0xLjQgMi40IDE2LjUgMTAgMjcuOCA0MS4zIDEwLjQgMjguNiAxLjEgNTIuNyAyLjggNTUuMyAuOCAxLjQgMTMuNyAuOCAzNi40LTEzLjIgMTIuOC03LjkgMjguMS0xNi45IDQ1LjQtMTcgMTYuNy0uNSAxNy42IDE5LjIgNC45IDIyLjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQxNi43IDc1LjJjLTEuNy0xMy42LTEzLjItMjMtMjgtMjIuOC0yMiAuMy00MC41IDExLjctNTIuOCAxOS4yLTQuOCAzLTguOSA1LjItMTIuNCA2LjggMy4xLTQ0LjUtMjIuNS03My4xLTI4LjctNzkuNCA3LjgtMTEuMyAxOC40LTI3LjggMjMuNC01My4yIDQuMy0yMS43IDMtNTUuNS02LjktNzQuNS0xLjYtMy4xLTcuNC0xMS4yLTIxLTcuNC05LjctMjAtMTMtMjIuMS0xNS42LTIzLjgtMS4xLS43LTIzLjYtMTYuNC00MS40IDI4LTEyLjIgLjktMzEuMyA1LjMtNDcuNSAyMi44LTIgMi4yLTUuOSAzLjgtMTAuMSA1LjRsLjEgMGMtOC40IDMtMTIuMyA5LjktMTYuOSAyMi4zLTYuNSAxNy40IC4yIDM0LjYgNi44IDQ1LjctMTcuOCAxNS45LTM3IDM5LjgtMzUuNyA4Mi41LTM0IDM2LTExLjggNzMtNS42IDc5LjYtMS42IDExLjEgMy43IDE5LjQgMTIgMjMuOCAxMi42IDYuNyAzMC4zIDkuNiA0My45IDIuOCA0LjkgNS4yIDEzLjggMTAuMSAzMCAxMC4xIDYuOCAwIDU4LTIuOSA3Mi42LTYuNSA2LjgtMS42IDExLjUtNC41IDE0LjYtNy4xIDkuOC0zLjEgMzYuOC0xMi4zIDYyLjItMjguNyAxOC0xMS43IDI0LjItMTQuMiAzNy42LTE3LjQgMTIuOS0zLjIgMjEtMTUuMSAxOS40LTI4LjJ6Il0KICAgIH07CiAgICBmYVN0YWNrT3ZlcmZsb3cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stb3ZlcmZsb3ciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2YyIsICJNMjkxIDMxMWwtMTk1LjctNDEuMy04LjIgMzkuMyAxOTUuNyA0MSA4LjItMzl6bTUxLTg3TDE4OC41IDk1LjcgMTYzIDEyNi41IDMxNi41IDI1NC44IDM0MiAyMjR6bS0zMS4yIDM5LjdMMTI5LjUgMTc5IDExMi44IDIxNS41IDI5NCAzMDAgMzEwLjggMjYzLjd6TTI2Mi4zIDMybC0zMiAyNCAxMTkuMyAxNjAuMyAzMi0yNC0xMTkuMy0xNjAuM3ptMjAuNSAzMjhsLTIwMCAwIDAgMzkuNyAyMDAgMCAwLTM5Ljd6bTM5LjcgODBsLTI3OS41IDAgMC0xMjAtNDAgMCAwIDE2MCAzNTkuNSAwIDAtMTYwLTQwIDAgMCAxMjB6Il0KICAgIH07CiAgICBmYUJsdWV0b290aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI5MyIsICJNMjYwLjYgMTcxLjFsLTQyLjkgNDIuOS0uMy04NiA0My4yIDQzLjF6TTIxNy40IDM5MC45bDQzLjEtNDMuMS00Mi45LTQyLjktLjIgODZ6TTM4NCAyNTkuNEMzODQgNDY1IDMxMi4xIDUxMiAxOTguOSA1MTJTMCA0NjUgMCAyNTkuNCA4My40IDAgMTk2LjYgMCAzODQgNTMuOSAzODQgMjU5LjR6bS0xNTguNSAwbDc5LjQtODguNi0xMjUuMS0xMzQuMyAwIDE3Ni45LTczLjgtNzMuOC0yNyAyNi45IDkyLjcgOTMtOTIuNyA5MyAyNi45IDI2LjkgNzMuOC03My44IDIuMyAxNzAgMTI3LjQtMTI3LjUtODMuOS04OC43eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtanAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuNCAxMTkuOCA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjIgNTA0IDI1NiA1MDQgMTE3LjIgMzk2LjUgOCAyNTUuNyA4em0uNiA0NTAuN2MtMTEyIDAtMjAzLjYtOTIuNS0yMDMuNi0yMDIuNyAwLTIxLjEgMy00MS4yIDktNjAuM2wxMjcgNTYuNS0yNy45IDAgMCAzOC42IDU4LjEgMCA1LjcgMTEuOCAwIDE4LjctNjMuOCAwIDAgMzguNyA2My44IDAgMCA1NiA2MS43IDAgMC01NiA2NC4yIDAgMC0zNS43IDgxIDM2LjFjLTEuNSAyLjItNTcuMSA5OC4zLTE3NS4yIDk4LjN6bTg3LjYtMTM3LjNsLTU3LjYgMCAwLTE4LjcgMi45LTUuNiA1NC43IDI0LjN6bTYuNS01MS40bDAtMTcuOC0zOC42IDAgNjMtMTE2LTY1LjggMC00My40IDk2LTIzLTEwLjItMzkuNi04NS43LTY1LjggMCAyNy4zIDUxLTgxLjktMzYuNWMyNy44LTQ0LjEgODIuNi05OC4xIDE3My43LTk4LjEgMTEyLjggMCAyMDMgOTAgMjAzIDIwMy40IDAgMjEtMi43IDQwLjYtNy45IDU5TDM1MC40IDI3MHoiXQogICAgfTsKICAgIGZhUmVkZGl0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWExIiwgIk0wIDI1NkMwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTYgMzk3LjQgNTEyIDI1NiA1MTJMMzcuMSA1MTJjLTEzLjcgMC0yMC41LTE2LjUtMTAuOS0yNi4yTDc1IDQzN0MyOC43IDM5MC43IDAgMzI2LjcgMCAyNTZ6TTM0OS42IDE1My42YzIzLjYgMCA0Mi43LTE5LjEgNDIuNy00Mi43cy0xOS4xLTQyLjctNDIuNy00Mi43Yy0yMC42IDAtMzcuOCAxNC42LTQxLjggMzQtMzQuNSAzLjctNjEuNCAzMy02MS40IDY4LjRsMCAuMmMtMzcuNSAxLjYtNzEuOCAxMi4zLTk5IDI5LjEtMTAuMS03LjgtMjIuOC0xMi41LTM2LjUtMTIuNS0zMyAwLTU5LjggMjYuOC01OS44IDU5LjggMCAyNCAxNC4xIDQ0LjYgMzQuNCA1NC4xIDIgNjkuNCA3Ny42IDEyNS4yIDE3MC42IDEyNS4yczE2OC43LTU1LjkgMTcwLjYtMTI1LjNjMjAuMi05LjYgMzQuMS0zMC4yIDM0LjEtNTQgMC0zMy0yNi44LTU5LjgtNTkuOC01OS44LTEzLjcgMC0yNi4zIDQuNi0zNi40IDEyLjQtMjcuNC0xNy02Mi4xLTI3LjctMTAwLTI5LjFsMC0uMmMwLTI1LjQgMTguOS00Ni41IDQzLjQtNDkuOSA0LjQgMTguOCAyMS4zIDMyLjggNDEuNSAzMi44bC4xIC4yek0xNzcuMSAyNDYuOWMxNi43IDAgMjkuNSAxNy42IDI4LjUgMzkuM3MtMTMuNSAyOS42LTMwLjMgMjkuNi0zMS40LTguOC0zMC40LTMwLjUgMTUuNC0zOC4zIDMyLjEtMzguM2wuMS0uMXptMTkwLjEgMzguM2MxIDIxLjctMTMuNyAzMC41LTMwLjQgMzAuNXMtMjkuMy03LjktMzAuMy0yOS42IDExLjgtMzkuMyAyOC41LTM5LjMgMzEuMiAxNi42IDMyLjEgMzguM2wuMSAuMXptLTQ4LjEgNTYuN2MtMTAuMyAyNC42LTM0LjYgNDEuOS02MyA0MS45cy01Mi43LTE3LjMtNjMtNDEuOWMtMS4yLTIuOSAuOC02LjIgMy45LTYuNSAxOC40LTEuOSAzOC4zLTIuOSA1OS4xLTIuOXM0MC43IDEgNTkuMSAyLjljMy4xIC4zIDUuMSAzLjYgMy45IDYuNXoiXQogICAgfTsKICAgIGZhQ29ubmVjdGRldmVsb3AgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29ubmVjdGRldmVsb3AiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwZSIsICJNNTUwLjggMjQxbC01MC4xLTg2LjhjMS4xLTIuMSAxLjktNC42IDEuOS03LjIgMC04LTYuNy0xNC43LTE0LjctMTVMNDMyLjQgMzYuMWMuNS0xLjYgMS4xLTMuMiAxLjEtNC44IDAtOC42LTctMTUuMy0xNS4zLTE1LjMtNC44IDAtOC44IDIuMS0xMS44IDUuNmwtMTA2LjYgMGMtMi43LTMuNS02LjctNS42LTExLjUtNS42cy04LjggMi4xLTExLjUgNS42bC0xMDYuMSAwYy0yLjktMy41LTctNS42LTExLjgtNS42LTguMyAwLTE1LjMgNi43LTE1LjMgMTUuMyAwIDEuNiAuNSAzLjUgMS4xIDQuOGwtNTYgOTcuMmMtNS40IDIuNC05LjEgNy41LTkuMSAxMy43IDAgLjUgLjMgMS4xIC4zIDEuNkwyNi42IDI0MC43Yy03LjIgMS4zLTEyLjYgNy41LTEyLjYgMTUgMCA3LjIgNS4xIDEzLjQgMTIuMSAxNWw1NS4yIDk1LjRjLS41IDEuNi0uOCAyLjktLjggNC44IDAgNy4yIDUuMSAxMy40IDEyLjEgMTQuN2w1MS43IDg5LjdjLS41IDEuNi0xLjEgMy41LTEuMSA1LjQgMCA4LjYgNyAxNS4zIDE1LjMgMTUuMyA0LjggMCA4LjgtMi4xIDExLjUtNS40bDEwNi45IDBjMi43IDMuMiA3IDUuNCAxMS41IDUuNHM4LjgtMi4xIDExLjUtNS40bDEwNy4xIDBjMi43IDIuOSA2LjcgNC44IDExIDQuOCA4LjYgMCAxNS4zLTcgMTUuMy0xNS4zIDAtMS42LS4zLTIuOS0uOC00LjNsNTEuNy05MC4zYzctMS4zIDEyLjEtNy41IDEyLjEtMTQuNyAwLTEuNi0uMy0zLjItLjgtNC44bDU0LjktOTUuNGM3LTEuMyAxMi4zLTcuNSAxMi4zLTE1IDAtNy4yLTUuMS0xMy40LTExLjgtMTQuN3ptLTM5NyAyMDkuN2wtNDMuNy03NS44IDQzLjcgMCAwIDc1Ljh6bTAtODMuOGwtNDMuNyAwYy0uMy0xLjEtLjgtMi4xLTEuMy0zLjJsNDUtNDcuNCAwIDUwLjZ6bTAtNjIuNGwtNTAuNCA1My4zYy0xLjMtLjUtMi43LTEuMy00LTEuNkw0My43IDI1OS44Yy41LTEuMyAuNS0yLjcgLjUtNHMwLTIuNC0uMy0zLjVsNTItOTBjMi43LS4zIDUuNC0xLjEgNy44LTIuN2w1MC4xIDUyIDAgOTIuOXptMC0xMDIuM0wxMDggMTU0LjhjMS4zLTIuMSAyLjEtNC44IDIuMS03LjggMC0uMy0uMy0uOC0uMy0xLjFsNDMuOS0xNS44IDAgNzIuMXptMC04MC42bC00My43IDE1LjggNDMuNy03NS41IDAgNTkuN3ptMzI2LjUgMzkuMWwuOCAxLjMtMzUuNCAxNjcuMS02My44LTY3LjIgOTgtMTAxLjUgLjMgLjN6TTI5Mi4xIDM1NS4xbDExLjUgMTEuOC0yMi44IDAgMTEuMy0xMS44em0tLjMtMTEuM2wtODMuMy04NS40IDc5LjYtODQuNCA4MyA4Ny42LTc5LjMgODIuMnptNS40IDUuOWw3OS4zLTgyLjIgNjcuNSA3MS4zLTUuOSAyOC4xLTEyNCAwLTE2LjktMTcuMXpNNDEwLjcgNDQuNGMxLjEgLjUgMi4xIDEuMSAzLjUgMS4zbDU3LjkgMTAwLjcgMCAuNWMwIDIuOSAuOCA1LjYgMi4xIDcuOGwtOTcuNSAxMDEuMi04My04Ny42IDExNy4xLTEyNHptLTkuMS0yLjFsLTExMy42IDEyMC4zLTU3LjEtNjAuMyAxNjYuMy02MCA0LjMgMHptLTEyMy41IDBjMi43IDIuNyA2LjIgNC4zIDEwLjIgNC4zczcuNS0xLjYgMTAuMi00LjNsNzUgMC0xNDguNCA1My42LTUwLjktNTMuNiAxMDMuOSAwek0xNjEuOSA0Ny45bDEuMS0yLjFjLjktLjIgMS44LS41IDIuNy0uOGw1MS4yIDUzLjgtNTQuOSAxOS44IDAtNzAuN3ptMCA3OS4zbDYwLjgtMjIgNTkuNyA2My4yLTc5LjYgODQuMS00MS00Mi4xIDAtODMuM3ptMCA5Mi43bDM2LjQgMzcuOC0zNi40IDM4LjMgMC03Ni4xem0wIDg3LjlsNDIuMS00NC41IDgyLjggODYtMTcuMSAxNy43LTEwNy43IDAgMC01OS4yem03IDE2Mi4xYy0xLjYtMS42LTMuNS0yLjctNS45LTMuNWwtMS4xLTEuNiAwLTg5LjcgOTkuOSAwLTkxLjYgOTQuOC0xLjMgMHptMTI5LjkgMGMtMi43LTIuNC02LjQtNC4zLTEwLjQtNC4zcy03LjggMS45LTEwLjQgNC4zbC05Ni40IDAgOTEuNi05NC44IDM4LjMgMCA5MS42IDk0LjgtMTA0LjIgMHptMTIwLTExLjhsLTQuMyA3LjVjLTEuMyAuMy0yLjQgLjgtMy41IDEuM2wtODkuMi05MS45IDExNC40IDAtMTcuNCA4M3ptMTIuOS0yMi4ybDEyLjktNjAuOCAyMiAwLTM0LjggNjAuOHptMzQuOC02OC44bC0yMC40IDAgNC42LTIxLjIgMTcuMSAxOC4yYy0uNSAuOC0xLjEgMS45LTEuMyAyLjl6bTY2LjItMTA3LjRsLTU1LjQgOTYuN2MtMS4zIC41LTIuNyAxLjEtNCAxLjlsLTIwLjYtMjIgMzQuNi0xNjMuOSA0NS44IDc5LjNjLS4zIDEuMy0uOCAyLjctLjggNC4zIDAgMS4zIC4zIDIuNCAuNSAzLjd6Il0KICAgIH07CiAgICBmYVJlc2VhcmNoZ2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNlYXJjaGdhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmOCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjYyLjIgMzY2LjRjLTYuNiAzLTMzLjIgNi01MC0xNC4yLTkuMi0xMC42LTI1LjMtMzMuMy00Mi4yLTYzLjYtOC45IDAtMTQuNyAwLTIxLjQtLjZsMCA0Ni40YzAgMjMuNSA2IDIxLjIgMjUuOCAyMy45bDAgOC4xYy02LjktLjMtMjMuMS0uOC0zNS42LS44LTEzLjEgMC0yNi4xIC42LTMzLjYgLjhsMC04LjFjMTUuNS0yLjkgMjItMS4zIDIyLTIzLjlsMC0xMDkuNGMwLTIyLjYtNi40LTIxLTIyLTIzLjlsMC04LjFjMjUuOCAxIDUzLjEtLjYgNzAuOS0uNiAzMS43IDAgNTUuOSAxNC40IDU1LjkgNDUuNiAwIDIxLjEtMTYuNyA0Mi4yLTM5LjIgNDcuNSAxMy42IDI0LjIgMzAgNDUuNiA0Mi4yIDU4LjkgNy4yIDcuOCAxNy4yIDE0LjcgMjcuMiAxNC43bDAgNy4zem0yMi45LTEzNWMtMjMuMyAwLTMyLjItMTUuNy0zMi4yLTMyLjJsMC0zMi4yYzAtMTIuMiA4LjgtMzAuNCAzNC0zMC40czMwLjQgMTcuOSAzMC40IDE3LjlsLTEwLjcgNy4ycy01LjUtMTIuNS0xOS43LTEyLjVjLTcuOSAwLTE5LjcgNy4zLTE5LjcgMTkuN2wwIDI2LjhjMCAxMy40IDYuNiAyMy4zIDE3LjkgMjMuMyAxNC4xIDAgMjEuNS0xMC45IDIxLjUtMjYuOGwtMTcuOSAwIDAtMTAuNyAzMC40IDBjMCAyMC41IDQuNyA0OS45LTM0IDQ5Ljl6TTE2OC42IDI3Ni4xYy05LjQgMC0xMy42LS4zLTIwLS44bDAtNjkuN2M2LjQtLjYgMTUtLjYgMjIuNS0uNiAyMy4zIDAgMzcuMiAxMi4yIDM3LjIgMzQuNSAwIDIxLjktMTUgMzYuNi0zOS43IDM2LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbE1lc3NlbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwtbWVzc2VuZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2NjMiLCAiTTI1NiAwYy0xMy4zIDAtMjYuMyAxLTM5LjEgM2wzLjcgMjMuN0MyMzIuMSAyNC45IDI0NCAyNCAyNTYgMjRzMjMuOSAuOSAzNS40IDIuN0wyOTUuMSAzQzI4Mi4zIDEgMjY5LjMgMCAyNTYgMHptNjAuOCA3LjNsLTUuNyAyMy4zYzIzLjQgNS43IDQ1LjQgMTQuOSA2NS40IDI3LjFsMTIuNS0yMC41Yy0yMi4xLTEzLjQtNDYuNC0yMy42LTcyLjItMjkuOXptNzYuNCA2MS42YzE5LjEgMTQgMzYgMzAuOSA1MC4xIDUwLjFsMTkuNC0xNC4yQzQ0NyA4My42IDQyOC40IDY1IDQwNy4zIDQ5LjVMMzkzLjEgNjguOHptODEuNyA1NC4ybC0yMC41IDEyLjVjMTIuMiAyMCAyMS40IDQyIDI3LjEgNjUuNGwyMy4zLTUuN2MtNi4zLTI1LjgtMTYuNS01MC4xLTI5LjktNzIuMnptMTAuNSA5Ny41YzEuOCAxMS41IDIuNyAyMy40IDIuNyAzNS40cy0uOSAyMy45LTIuNyAzNS40bDIzLjcgMy43YzEuOS0xMi43IDMtMjUuOCAzLTM5LjFzLTEtMjYuMy0zLTM5LjFsLTIzLjcgMy43em0tMzEgMTU1LjlsMjAuNSAxMi41YzEzLjQtMjIuMSAyMy42LTQ2LjQgMjkuOS03Mi4ybC0yMy4zLTUuN2MtNS43IDIzLjQtMTQuOSA0NS40LTI3LjEgNjUuNHptOC4yIDMwLjhsLTE5LjQtMTQuMmMtMTQgMTkuMS0zMC45IDM2LTUwLjEgNTAuMWwxNC4yIDE5LjRjMjEuMS0xNS41IDM5LjgtMzQuMSA1NS4yLTU1LjJ6bS04Ni4xIDQ3Yy0yMCAxMi4yLTQyIDIxLjQtNjUuNCAyNy4xbDUuNyAyMy4zYzI1LjgtNi4zIDUwLjEtMTYuNSA3Mi4yLTI5LjlsLTEyLjUtMjAuNXpNMjk1LjEgNTA5bC0zLjctMjMuN0MyNzkuOSA0ODcuMSAyNjggNDg4IDI1NiA0ODhzLTIzLjktLjktMzUuNC0yLjdMMjE2LjkgNTA5YzEyLjcgMS45IDI1LjggMyAzOS4xIDNzMjYuMy0xIDM5LjEtM3ptLTk0LjEtMjcuNmMtMTcuNi00LjMtMzQuNC0xMC42LTUwLjEtMTguNmwtNy44LTQtMzIuOCA3LjcgNS41IDIzLjQgMjQuMy01LjdjMTcuNCA4LjkgMzUuOSAxNS44IDU1LjMgMjAuNWw1LjctMjMuM3pNOTUuNCA0OTQuNkw5MCA0NzEuMyA0OC4zIDQ4MWMtMTAuNCAyLjQtMTkuNy02LjktMTcuMy0xNy4zbDkuNy00MS42LTIzLjQtNS41LTkuNyA0MS42QzEuMiA0ODYgMjYgNTEwLjggNTMuOCA1MDQuNGw0MS42LTkuN3ptLTUwLTkyLjlsNy43LTMyLjgtNC03LjhjLTgtMTUuNy0xNC4zLTMyLjUtMTguNi01MC4xTDcuMyAzMTYuN0MxMiAzMzYuMSAxOC45IDM1NC43IDI3LjcgMzcybC01LjcgMjQuMyAyMy40IDUuNXpNMyAyOTUuMWwyMy43LTMuN0MyNC45IDI3OS45IDI0IDI2OCAyNCAyNTZzLjktMjMuOSAyLjctMzUuNEwzIDIxNi45QzEgMjI5LjcgMCAyNDIuNyAwIDI1NnMxIDI2LjMgMyAzOS4xem0yNy42LTk0LjFjNS43LTIzLjQgMTQuOS00NS40IDI3LjEtNjUuNEwzNy4yIDEyMy4xYy0xMy40IDIyLjEtMjMuNiA0Ni40LTI5LjkgNzIuMmwyMy4zIDUuN3ptMTguOS05Ni4ybDE5LjQgMTQuMmMxNC0xOS4xIDMwLjktMzYgNTAuMS01MC4xTDEwNC43IDQ5LjVDODMuNiA2NSA2NSA4My42IDQ5LjUgMTA0Ljd6bTg2LjEtNDdjMjAtMTIuMiA0Mi0yMS40IDY1LjQtMjcuMUwxOTUuMiA3LjNjLTI1LjggNi4zLTUwLjEgMTYuNS03Mi4yIDI5LjlsMTIuNSAyMC41ek0yNTYgNDY0YzExNC45IDAgMjA4LTkzLjEgMjA4LTIwOFMzNzAuOSA0OCAyNTYgNDggNDggMTQxLjEgNDggMjU2YzAgMzYuNCA5LjQgNzAuNyAyNS44IDEwMC41IDEuNiAyLjkgMi4xIDYuMiAxLjQgOS40bC0yMS42IDkyLjUgOTIuNS0yMS42YzMuMi0uNyA2LjUtLjIgOS40IDEuNCAyOS44IDE2LjUgNjQgMjUuOCAxMDAuNSAyNS44eiJdCiAgICB9OwogICAgZmFYaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInhpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2OCIsICJNMTYyLjcgMjEwYy0xLjggMy4zLTI1LjIgNDQuNC03MC4xIDEyMy41LTQuOSA4LjMtMTAuOCAxMi41LTE3LjcgMTIuNUw5LjggMzQ2Yy03LjcgMC0xMi4xLTcuNS04LjUtMTQuNGw2OS0xMjEuM2MuMiAwIC4yLS4xIDAtLjNMMjYuNCAxMzQuNGMtNC4zLTcuOCAuMy0xNC4xIDguNS0xNC4xbDY1LjEgMGM3LjMgMCAxMy4zIDQuMSAxOCAxMi4yTDE2Mi43IDIxMHpNMzgyLjYgNDYuMWwtMTQ0IDI1MyAwIC4zIDkxLjYgMTY2LjZjMy45IDcuMSAuMiAxNC4xLTguNSAxNC4xbC02NS4yIDBjLTcuNiAwLTEzLjYtNC0xOC0xMi4yTDE0Ni4xIDI5OS40YzMuMy01LjggNTEuNS05MC44IDE0NC44LTI1NS4yIDQuNi04LjEgMTAuNC0xMi4yIDE3LjUtMTIuMmw2NS43IDBjOCAwIDEyLjMgNi43IDguNSAxNC4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsianMtc3F1YXJlIl0sICJmM2I5IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTgwLjkgNDQ0LjljLTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41TDE1MiAzODUuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVsMC0xNDMuMSA0Mi4xIDAgMCAxNDMuN2MwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNXptODUuOC00M0wzMDEgMzgyLjFjOSAxNC43IDIwLjggMjUuNiA0MS41IDI1LjYgMTcuNCAwIDI4LjYtOC43IDI4LjYtMjAuOCAwLTE0LjQtMTEuNC0xOS41LTMwLjctMjhsLTEwLjUtNC41Yy0zMC40LTEyLjktNTAuNS0yOS4yLTUwLjUtNjMuNSAwLTMxLjYgMjQuMS01NS42IDYxLjYtNTUuNiAyNi44IDAgNDYgOS4zIDU5LjggMzMuN0wzNjggMjkwYy03LjItMTIuOS0xNS0xOC0yNy4xLTE4LTEyLjMgMC0yMC4xIDcuOC0yMC4xIDE4IDAgMTIuNiA3LjggMTcuNyAyNS45IDI1LjZsMTAuNSA0LjVjMzUuOCAxNS4zIDU1LjkgMzEgNTUuOSA2Ni4yIDAgMzcuOC0yOS44IDU4LjYtNjkuNyA1OC42LTM5LjEgMC02NC40LTE4LjYtNzYuNy00M3oiXQogICAgfTsKICAgIGZhSnNTcXVhcmUgPSBmYVNxdWFyZUpzOwogICAgZmFGb250aWNvbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udGljb25zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyODAiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTE4NyAxNzIuOWMtMTguNCAwLTE5IDkuOS0xOSAyNy40bDAgMjMuM2MwIDIuNC0zLjUgNC40LS42IDQuNGw2Ny40IDAtMTEuMSAzNy4zLTU1LjcgMCAwIDExMi45YzAgNS44LTIgNi43IDMuMiA3LjNsNDMuNSA0LjEgMCAyNS4xLTEzMC43IDAgMC0yNS43IDIxLjMtMmM1LjItLjYgNi43LTIuMyA2LjctNy45bDAtMTExLjRjMC0yLjMtMi45LTIuMy01LjgtMi4zbC0yMi4yIDAgMC0zNy40IDI4IDAgMC0yMWMwLTQ5LjYgMjYuNS03MCA3Ny4zLTcwIDM0LjEgMCA2NC43IDguMiA2NC43IDUyLjhsLTUwLjcgNi4xYy4zLTE4LjctNC40LTIzLTE2LjMtMjN6bTc0LjMgMjQxLjhsMC0yNS4xIDIwLjQtMi42YzUuMi0uNiA3LjYtMS43IDcuNi03LjNsMC0xMDcuOWMwLTQuMS0yLjktNi43LTYuNy03LjlsLTI0LjItNi40IDYuNy0yOS41IDgwLjIgMCAwIDE1MS43YzAgNS44LTIuNiA2LjQgMi45IDcuM2wxNS43IDIuNiAwIDI1LjEtMTAyLjYgMHptODAuOC0yNTUuNWw5IDMzLjItNy4zIDcuMy0zMS4yLTE2LjYtMzEuMiAxNi42LTcuMy03LjMgOS0zMy4yLTIxLjgtMjQuMiAzLjUtOS42IDI3LjcgMCAxNS41LTI4IDkuMyAwIDE1LjUgMjggMjcuNyAwIDMuNSA5LjYtMjEuOSAyNC4yeiJdCiAgICB9OwogICAgZmFVcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXBzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3ZTAiLCAiTTEwMy4yIDMwM2MtNS4yIDMuNi0zMi42IDEzLjEtMzIuNi0xOWwwLTEwNC0zMi43IDAgMCAxMDIuNmMwIDc0LjkgODAuMiA1MS4xIDk3LjkgMzlsMC0xNDEuNi0zMi42IDAgMCAxMjN6TTQgNzQuOEw0IDI5NS43YzAgMTAzLjcgNzQuOSAxMzUuMiAxODcuNyAxODQuMSAxMTIuNC00OC45IDE4Ny43LTgwLjIgMTg3LjctMTg0LjFsMC0yMjAuOUMyNjMuMSAxMy4yIDk3LjYgMjUuMiA0IDc0Ljh6TTM2Mi4xIDI5NS43YzAgODYuNi01My4yIDExMy42LTE3MC40IDE2NS4zLTExNy41LTUxLjgtMTcwLjUtNzguNy0xNzAuNS0xNjUuM2wwLTEyNi40YzEwMi4zLTkzLjggMjMxLjYtMTAwIDM0MC45LTg5LjhsMCAyMTYuMnpNMTUyLjUgMTg4LjNsMCAyMTIuOCAzMi43IDAgMC02OC43YzI0LjQgNy4zIDcxLjctMi42IDcxLjctNzguNSAwLTk3LjQtODAuNy04MC45LTEwNC40LTY1LjZ6bTMyLjcgMTE3LjNsMC0xMDAuM2M4LjQtNC4yIDM4LjQtMTIuNyAzOC40IDQ5LjMgMCA2Ny45LTM2LjQgNTEuOC0zOC40IDUxem03OS4xLTg2LjRjLjEgNDcuMyA1MS42IDQyLjUgNTIuMiA3MC40IC42IDIzLjUtMzAuNCAyMy01MC44IDQuOWwwIDMwLjFjMzYuMiAyMS41IDgxLjkgOC4xIDgzLjItMzMuNSAxLjctNTEuNS01NC4xLTQ2LjYtNTMuNC03My4yIC42LTIwLjMgMzAuNi0yMC41IDQ4LjUtMi4ybDAtMjguNGMtMjguNS0yMi03OS45LTkuMi03OS43IDMxLjl6Il0KICAgIH07CiAgICBmYUFtYXpvblBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWF6b24tcGF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MmMiLCAiTTE0IDMyNS4zYzIuMy00LjIgNS4yLTQuOSA5LjctMi41IDEwLjQgNS42IDIwLjYgMTEuNCAzMS4yIDE2LjcgNDAuNiAyMC4yIDgzLjMgMzUuOCAxMjcuNCA0Ni4zIDIwLjggNSA0MS45IDkgNjMuMiAxMS44IDMxLjUgNC4yIDYzLjIgNiA5NSA1LjIgMTcuNC0uNCAzNC44LTEuOCA1Mi4xLTMuOCA1Ni4yLTYuNiAxMTEuMS0yMSAxNjMuMy00Mi44IDIuOS0xLjIgNS45LTIgOS4xLTEuMiA2LjcgMS44IDkgOSA0LjEgMTMuOS0zIDIuNy02LjIgNS4yLTkuNiA3LjQtMzAuNyAyMS4xLTY0LjIgMzYuNC05OS42IDQ3LjktMjQuNSA3LjktNDkuNiAxMy44LTc1LjEgMTcuNi0xNy42IDIuNy0zNS40IDQuMy01My4yIDQuOC0uOCAwLTEuNyAuMi0yLjUgLjNsLTIxLjEgMGMtLjgtLjEtMS43LS4yLTIuNS0uMy0zLjYtLjItNy4yLS4zLTEwLjctLjQtMTYuOS0uOC0zMy43LTIuNS01MC40LTUuMy0yNy40LTQuNS01NC4zLTExLjUtODAuNC0yMC45LTUzLjctMTkuNC0xMDMuMS00OC45LTE0NS42LTg3LTEuOC0xLjYtMy0zLjgtNC40LTUuN2wwLTJ6TTE3MiA2NS4xbC00LjMgLjZjLTEzLjggMS43LTI2LjggNi45LTM4IDE1LjEtMi40IDEuNy00LjYgMy41LTcuMSA1LjQtLjItLjQtLjMtLjktLjQtMS40LS40LTIuNy0uOC01LjUtMS4zLTguMi0uNy00LjYtMy02LjYtNy42LTYuNmwtMTEuNSAwYy02LjkgMC04LjIgMS4zLTguMiA4LjJsMCAyMDkuM2MwIDEgMCAyIC4xIDMgLjIgMyAyIDQuOSA0LjkgNSA3IC4xIDE0LjEgLjEgMjEuMSAwIDIuOSAwIDQuNy0yIDUtNSAuMS0xIC4xLTIgLjEtM2wwLTcyLjRjMS4xIC45IDEuNyAxLjQgMi4yIDEuOSAxNy45IDE0LjkgMzguNSAxOS44IDYxIDE1LjQgMjAuNC00IDM0LjYtMTYuNSA0My44LTM0LjkgNy0xMy45IDkuOS0yOC43IDEwLjMtNDQuMSAuNS0xNy4xLTEuMi0zMy45LTguMS00OS44LTguNS0xOS42LTIyLjYtMzIuNS00My45LTM2LjktMy4yLS43LTYuNS0xLTkuOC0xLjUtMi44LS4xLTUuNS0uMS04LjMtLjF6TTEyNC42IDEwN2MtLjEtLjcgLjEtMS4zIC40LTEuOXMuOC0xLjEgMS4zLTEuNGMxMy43LTkuNSAyOC44LTE0LjUgNDUuNi0xMy4yIDE0LjkgMS4xIDI3LjEgOC40IDMzLjUgMjUuOSAzLjkgMTAuNyA0LjkgMjEuOCA0LjkgMzMgMCAxMC40LS44IDIwLjYtNCAzMC42LTYuOCAyMS4zLTIyLjQgMjkuNC00Mi42IDI4LjUtMTQtLjYtMjYuMi02LTM3LjQtMTMuOS0uNi0uMy0xLS44LTEuMy0xLjRzLS40LTEuMi0uNC0xLjljLjEtMTQuMSAwLTI4LjEgMC00Mi4ycy4xLTI4IDAtNDIuMXpNMzMwLjMgNjUuMWMtMSAuMS0yIC4zLTIuOSAuNC05LjcgLjQtMTkuNCAxLjgtMjguOSA0LjEtNi4xIDEuNi0xMiAzLjgtMTcuOSA1LjgtMy42IDEuMi01LjQgMy44LTUuMyA3LjcgLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA0LjggMi4xIDYuMSA2LjggNC45IDcuOC0yIDE1LjYtNC4yIDIzLjUtNS43IDEyLjMtMi4zIDI0LjctMy4zIDM3LjItMS40IDYuNSAxIDEyLjYgMi45IDE2LjggOC40IDMuNyA0LjggNS4xIDEwLjUgNS4zIDE2LjQgLjMgOC4zIC4yIDE2LjYgLjMgMjQuOSAwIC41LS4xIC45LS4yIDEuNC0uNS0uMS0uOSAwLTEuMy0uMS0xMC41LTIuNi0yMS4yLTQuMi0zMi00LjktMTEuMy0uNi0yMi41IC4xLTMzLjMgMy45LTEyLjkgNC41LTIzLjMgMTIuMy0yOS40IDI0LjktNC43IDkuOC01LjQgMjAuMi0zLjkgMzAuNyAyIDE0IDkgMjQuOCAyMS40IDMxLjcgMTEuOSA2LjYgMjQuOCA3LjQgMzcuOSA1LjQgMTUuMS0yLjMgMjguNS04LjcgNDAuMy0xOC40IC41LS40IDEtLjggMS42LTEuMSAuNiAzLjggMS4xIDcuNCAxLjggMTEgLjYgMy4xIDIuNSA1LjEgNS40IDUuMiA1LjQgLjEgMTAuOSAuMSAxNi4zIDAgMS4zIDAgMi41LS41IDMuNC0xLjRzMS40LTIuMSAxLjUtMy4zYy4xLS45IC4xLTEuOSAuMS0yLjhsMC0xMDZjMC00LjMtLjMtOC42LS45LTEyLjktMS45LTEyLjktNy40LTIzLjUtMTktMzAuNC02LjctNC0xNC4xLTYtMjEuOC03LjEtMy42LS41LTcuMi0uOC0xMC44LTEuMy0zLjkgLjEtNy45IC4xLTExLjkgLjF6bTM1IDEyNy43YzAgLjYtLjEgMS4yLS4zIDEuN3MtLjcgMS0xLjIgMS4zYy0xMS4yIDguMS0yMy41IDEzLjUtMzcuNCAxNC45LTUuNyAuNi0xMS40IC40LTE2LjgtMS44LTMtMS4xLTUuNi0yLjktNy44LTUuMnMtMy43LTUuMS00LjYtOC4xYy0yLTYuMy0yLTEzLjEtLjEtMTkuNCAyLjUtOC4zIDguNC0xMyAxNi40LTE1LjYgOC0yLjQgMTYuNS0zLjIgMjQuOC0yLjIgOC40IC43IDE2LjYgMi4zIDI1IDMuNCAxLjYgLjIgMi4xIDEgMi4xIDIuNi0uMSA0LjggMCA5LjUgMCAxNC4zcy0uMiA5LjQtLjEgMTQuMXpNNjI1LjIgMzIyLjJjLTEtNS00LjgtNi45LTkuMS04LjMtNi44LTIuMS0xMy45LTMuNS0yMS0zLjktMTMuMS0xLjEtMjYuMy0uNS0zOS4yIDEuOS0xNC4zIDIuNy0yNy45IDcuMy00MCAxNS42LTEuNCAuOS0yLjcgMi4xLTMuNyAzLjUtLjQgLjYtLjYgMS4zLS43IDEuOXMwIDEuNCAuMiAyLjFjLjQgMS41IDIuMSAxLjkgMy42IDEuOCAuNyAwIDEuNSAwIDIuMi0uMSA3LjgtLjggMTUuNS0xLjcgMjMuMy0yLjUgMTEuNC0xLjEgMjIuOS0xLjggMzQuMy0uOSA0LjkgLjQgOS43IDEuMyAxNC40IDIuNyA1LjEgMS40IDcuNCA1LjIgNy42IDEwLjQgLjQgOC0xLjQgMTUuNy0zLjUgMjMuMy00LjEgMTUuNC0xMCAzMC4zLTE1LjggNDUuMS0uNCAxLS44IDItMSAzLS41IDIuOSAxLjIgNC44IDQuMSA0LjEgMS44LS40IDMuNC0xLjMgNC44LTIuNSA0LjUtNC4yIDguOC04LjcgMTIuNy0xMy40IDEyLjgtMTYuNCAyMC4zLTM1LjMgMjQuNy01NS42IC44LTMuNiAxLjQtNy4zIDIuMS0xMC45bDAtMTcuM3pNNDkzLjEgMTk5Yy0xMi45LTM1LjctMjUuOC03MS40LTM4LjctMTA3LjItMi01LjctNC4yLTExLjMtNi4zLTE2LjktMS4xLTIuOS0zLjItNC44LTYuNC00LjgtNy42LS4xLTE1LjItLjItMjIuOS0uMS0yLjUgMC0zLjcgMi0zLjIgNC41IC41IDIuMSAxLjEgNC4xIDEuOSA2LjEgMTkuNiA0OC41IDM5LjMgOTcgNTkuMSAxNDUuNSAxLjcgNC4xIDIuMSA3LjYgLjIgMTEuOC0zLjMgNy4zLTUuOSAxNS05LjMgMjIuMy0zIDYuNS04IDExLjQtMTUuMiAxMy4zLTUgMS4zLTEwLjIgMS43LTE1LjQgMS4xLTIuNS0uMi01LS44LTcuNS0xLTMuNC0uMi01LjEgMS4zLTUuMiA0LjgtLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA1LjUgMiA4IDcuNCA4LjkgNS42IDEuMSAxMS4yIDEuOCAxNi45IDIgMTcuMSAuNCAzMC43LTYuNSAzOS41LTIxLjQgMy41LTUuOSA2LjYtMTIgOS4yLTE4LjQgMjMuNy01OS44IDQ3LjItMTE5LjcgNzAuNi0xNzkuNiAuNy0xLjggMS4zLTMuNiAxLjYtNS41IC40LTIuOC0uOS00LjQtMy43LTQuNC02LjYtLjEtMTMuMyAwLTE5LjkgMC0xLjctLjEtMy40IC4zLTQuNyAxLjNzLTIuNCAyLjMtMyAzLjljLS41IDEuNC0xLjEgMi43LTEuNiA0LjFsLTM0LjggMTAwYy0yLjUgNy4yLTUuMSAxNC41LTcuNyAyMi4yLS40LTEuMS0uNi0xLjctLjktMi40eiJdCiAgICB9OwogICAgZmFQYW5kb3JhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhbmRvcmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTdkYSIsICJNMjAxLjMgMzJMMCAzMiAwIDQ4MCAxMjAuMiA0ODBjMTEuMiAwIDIwLjMtOS4xIDIwLjMtMjAuM2wwLTg2LjEgMzAuMSAwYzE0Ny4xIDAgMjA3LjMtODIuOSAyMDcuMy0xNzkuOSAwLTExOS43LTkwLjktMTYxLjgtMTc2LjUtMTYxLjh6Il0KICAgIH07CiAgICBmYU9wZW5pZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuaWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE5YiIsICJNMjcxLjUgNDMybC02OCAzMkM4OC41IDQ1My43IDAgMzkyLjUgMCAzMTguMiAwIDI0Ni43IDgyLjUgMTg3LjIgMTkxLjcgMTczLjlsMCA0M2MtNzEuNSAxMi41LTEyNCA1My0xMjQgMTAxLjMgMCA1MSA1OC41IDkzLjMgMTM1LjcgMTAzbDAtMzQwIDY4LTMzLjIgMCAzODQgLjEgMHpNNDQ4IDI5MWwtMTMxLjMtMjguNSAzNi44LTIwLjdjLTE5LjUtMTEuNS00My41LTIwLTcwLTI0LjhsMC00M2M0Ni4yIDUuNSA4Ny43IDE5LjUgMTIwLjMgMzkuM2wzNS0xOS44IDkuMiA5Ny41eiJdCiAgICB9OwogICAgZmFWc2NvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZzY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdkZCIsICJNMzU3LjYgMjU2YzAtMjcuMS0xMC42LTUyLjUtMjkuNy03MS43cy00NC42LTI5LjctNzEuNy0yOS43bC0uMSAwYy0yNy4xIDAtNTIuNiAxMC42LTcxLjcgMjkuN3MtMjkuNyA0NC42LTI5LjcgNzEuN2MwIDI3LjEgMTAuNiA1Mi41IDI5LjcgNzEuNyAxOS4yIDE5LjIgNDQuNiAyOS43IDcxLjcgMjkuN2wuMSAwYzI3LjEgMCA1Mi42LTEwLjYgNzEuNy0yOS43IDE5LjItMTkuMiAyOS43LTQ0LjYgMjkuNy03MS43ek0xNzYuMyA0ODIuMWMyMyA4LjEgNDcgMTIuNiA3MS42IDEzLjRsMC01OS4xYy0xNy4xLS43LTMzLjUtMy44LTQ5LTguOWwtMjIuNiA1NC42em0xMzctNTQuNmMtMTUuNSA1LjEtMzIgOC4yLTQ5IDguOWwwIDU5LjFjMjQuNi0uOCA0OC42LTUuMyA3MS42LTEzLjRsLTIyLjYtNTQuNnpNOTIuNSA0MzEuMmMyMC4yIDE4LjkgNDMuMyAzNCA2OC43IDQ1bDIyLjUtNTQuNWMtMTguMy03LjktMzUuMS0xOC44LTQ5LjgtMzEuOUw5Mi41IDQzMS4yem0yODUuOS00MS40Yy0xNC42IDEzLjItMzEuNCAyNC00OS44IDMxLjlsMjIuNSA1NC41YzI1LjQtMTEgNDguNC0yNi4xIDY4LjctNDVsLTQxLjQtNDEuNHpNMTQ1LjQgMzc4LjJjMTMuNiAxMi4xIDI5IDIxLjkgNDUuOCAyOSAxOCA3LjYgMzcuMSAxMiA1Ni43IDEyLjlsMC00Ni44Yy0yNi40LTEuOC01MC4zLTEyLjMtNjkuMS0yOC42bC0zMy40IDMzLjR6bTE4OC0zMy40Yy0xOC44IDE2LjMtNDIuNyAyNi44LTY5LjEgMjguNmwwIDQ2LjhjMTkuNi0uOSAzOC43LTUuMyA1Ni43LTEyLjkgMTYuOC03LjEgMzIuMi0xNi45IDQ1LjgtMjlsLTMzLjQtMzMuNHpNMzguNSAzNTYuNmMxMC43IDIzLjIgMjUgNDQuMyA0Mi41IDYzLjFsNDEuMy00MS4zYy0xMi40LTEzLjQtMjIuOS0yOC42LTMwLjktNDUuMkwzOC41IDM1Ni42em0zODIuNC0yMy41Yy04IDE2LjYtMTguNSAzMS45LTMwLjkgNDUuMmw0MS4zIDQxLjNjMTcuNS0xOC43IDMxLjgtMzkuOSA0Mi41LTYzLjFsLTUyLjktMjMuNXptLTMzMS02OWMxLjEgMTguOCA1LjQgMzcuMiAxMi44IDU0LjUgNy41IDE3LjggMTggMzQgMzEuMiA0OC4ybDMzLjUtMzMuNWMtMTYuNC0xOC44LTI2LjktNDIuOC0yOC43LTY5LjJsLTQ4LjggMHptMjgzLjcgMGMtMS44IDI2LjQtMTIuMyA1MC40LTI4LjcgNjkuMmwzMy41IDMzLjVjMTMuMS0xNC4yIDIzLjYtMzAuNCAzMS4yLTQ4LjIgNy4zLTE3LjQgMTEuNi0zNS43IDEyLjctNTQuNWwtNDguNyAwem0tMzU3LjEgMGMuOSAyNi43IDYuMSA1Mi43IDE1LjYgNzcuNUw4NSAzMTguMmMtNi40LTE3LTEwLjMtMzUuMS0xMS4zLTU0bC01Ny4xIDB6bTQyMi4xIDBjLTEgMTguOS01IDM3LjEtMTEuMyA1NGw1Mi44IDIzLjVjOS41LTI0LjggMTQuNy01MC44IDE1LjYtNzcuNWwtNTcuMSAwek0zMi4xIDE3MC40Yy05LjUgMjQuOC0xNC43IDUwLjgtMTUuNiA3Ny41bDU3LjEgMGMxLTE4LjkgNS0zNy4xIDExLjMtNTRMMzIuMSAxNzAuNHptMTAxLjctMjUuMmMtMTMuMSAxNC4yLTIzLjYgMzAuNC0zMS4yIDQ4LjItNy4zIDE3LjQtMTEuNiAzNS43LTEyLjggNTQuNWw0OC44IDBjMS44LTI2LjQgMTIuMy01MC40IDI4LjctNjkuMmwtMzMuNS0zMy41em0yMTEuMSAzMy41YzE2LjQgMTguOCAyNi45IDQyLjggMjguNyA2OS4ybDQ4LjcgMGMtMS4xLTE4LjgtNS40LTM3LjItMTIuNy01NC41LTcuNS0xNy44LTE4LTM0LTMxLjItNDguMmwtMzMuNSAzMy41em04Mi40IDE1LjJjNi40IDE3IDEwLjMgMzUuMSAxMS4zIDU0bDU3LjEgMGMtLjktMjYuNy02LjEtNTIuNy0xNS42LTc3LjVsLTUyLjggMjMuNXpNODEgOTIuM0M2My40IDExMSA0OS4yIDEzMi4yIDM4LjUgMTU1LjRsNTIuOSAyMy41YzgtMTYuNiAxOC41LTMxLjkgMzAuOS00NS4yTDgxIDkyLjN6bTMwOSA0MS4zYzEyLjQgMTMuNCAyMi45IDI4LjYgMzAuOSA0NS4ybDUyLjktMjMuNWMtMTAuNy0yMy4yLTI1LTQ0LjMtNDIuNS02My4xTDM5MCAxMzMuN3pNMjQ4IDkxLjhjLTE5LjYgLjktMzguNyA1LjMtNTYuNyAxMi45LTE2LjggNy4xLTMyLjIgMTYuOS00NS44IDI5bDMzLjQgMzMuNGMxOC44LTE2LjMgNDIuNy0yNi44IDY5LjEtMjguNmwwLTQ2Ljd6bTE2LjMgNDYuN2MyNi40IDEuOCA1MC4zIDEyLjMgNjkuMSAyOC42bDMzLjQtMzMuNGMtMTMuNi0xMi4xLTI5LTIxLjktNDUuOC0yOS0xOC03LjYtMzcuMS0xMi01Ni43LTEyLjlsMCA0Ni43ek0xNjEuMiAzNS44Yy0yNS40IDExLTQ4LjQgMjYuMS02OC43IDQ1bDQxLjQgNDEuNGMxNC43LTEzLjIgMzEuNC0yNCA0OS44LTMxLjlMMTYxLjIgMzUuOHpNMzI4LjYgOTAuM2MxOC4zIDcuOSAzNS4xIDE4LjggNDkuOCAzMS45bDQxLjQtNDEuNGMtMjAuMi0xOC45LTQzLjMtMzQtNjguNy00NUwzMjguNiA5MC4zek0yNDggMTYuNGMtMjQuNiAuOC00OC42IDUuMy03MS42IDEzLjRsMjIuNiA1NC42YzE1LjUtNS4xIDMyLTguMiA0OS04LjlsMC01OS4xem0xNi4zIDU5LjFjMTcuMSAuNyAzMy41IDMuOCA0OSA4LjlsMjIuNi01NC42Yy0yMy04LjEtNDctMTIuNi03MS42LTEzLjRsMCA1OS4xek01MTIuMiAyNjQuMmwtLjIgMEM1MDcuOCAzOTkgMzk5LjIgNTA3LjcgMjY0LjMgNTExLjlsMCAuMS0xNi4zIDAgMC0uMUMxMTMuMSA1MDcuNyA0LjUgMzk5IC4yIDI2NC4xbC0uMiAwIDAtMTYuMyAuMiAwQzQuNSAxMTMgMTEzLjEgNC4zIDI0OCAuMWwwLS4xIDE2LjMgMCAwIC4xQzM5OS4yIDQuMyA1MDcuOCAxMTMgNTEyIDI0Ny45bC4yIDAgMCAxNi4zeiJdCiAgICB9OwogICAgZmFVYnVudHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidWJ1bnR1IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3ZGYiLCAiTTQ2OS4yIDc1YzAtMjAuMS04LTM5LjMtMjIuMi01My41cy0zMy40LTIyLjItNTMuNS0yMi4yLTM5LjMgOC01My41IDIyLjItMjIuMiAzMy40LTIyLjIgNTMuNWMwIDIwLjEgOCAzOS4zIDIyLjEgNTMuNXMzMy40IDIyLjEgNTMuNSAyMi4xIDM5LjMtOCA1My41LTIyLjEgMjIuMS0zMy40IDIyLjEtNTMuNWwuMSAwem0tMzE1IDE2NS43YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNTcgMzQ2YzE4LjYgNDYuOSA1MSA4NyA5MyAxMTUuMXM5MS41IDQyLjYgMTQyIDQxLjdjLTE0LjctMTguNi0yMi45LTQxLjUtMjMuMi02NS4yLTYuOC0uOS0xMy4zLTIuMS0xOS41LTMuNC0yNi44LTUuNy01MS45LTE3LjMtNzMuNi0zNHMtMzkuMy0zOC4xLTUxLjctNjIuNWMtMjAuOSA5LjktNDQuNSAxMi44LTY3LjEgOC4ybC4xIC4xem0zOTUuMSA4OS44YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNDQ0IDM1MS42YzE4LjUgMTQuOCAzMS42IDM1LjIgMzcuMiA1OC4yIDMzLjMtNDEuMyA1Mi42LTkyLjIgNTQuOC0xNDUuMnMtMTIuNS0xMDUuNC00Mi4yLTE0OS40Yy04LjYgMjEuNS0yNCAzOS42LTQzLjggNTEuNiAxNS40IDI4LjYgMjIuOSA2MC44IDIxLjkgOTMuMnMtMTAuNyA2NC0yOCA5MS42bC4xIDB6TTEwMS4xIDEzNS40YzEyLjQgMi43IDI0LjMgNy41IDM1LjEgMTQuMyAxNi42LTI0LjIgMzguOS00NC4xIDY0LjgtNThTMjU1LjggNzAuNCAyODUuMiA3MGMuMi01LjkgLjktMTEuOSAyLTE3LjcgMy42LTE2LjcgMTEuMS0zMi4zIDIxLjgtNDUuNS00Ny43LTMuOC05NS40IDYtMTM3LjYgMjguNVM5NC4zIDkxLjcgNzAuOCAxMzMuNGMyLjctLjIgNS4zLS4zIDgtLjMgNy41IDAgMTUgLjggMjIuNCAyLjNsLS4xIDB6Il0KICAgIH07CiAgICBmYVZpYWNvaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmlhY29pbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjM3IiwgIk0zODQgMzJsLTY0IDAtODAuNyAxOTItOTQuNSAwLTgwLjgtMTkyLTY0IDAgNDggMTEyLTQ4IDAgMCA0OCA2OC41IDAgMTMuOCAzMi04Mi4zIDAgMCA0OCAxMDIuOCAwIDg5LjIgMjA4IDg5LjItMjA4IDEwMi44IDAgMC00OC04Mi4zIDAgMTMuOC0zMiA2OC41IDAgMC00OC00OCAwIDQ4LTExMnpNMTkyIDMzNmwtMjctNjQgNTQgMC0yNyA2NHoiXQogICAgfTsKICAgIGZhWmhpaHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiemhpaHUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjYzZiIsICJNMTcwLjUgMTQ4LjFsMCAyMTcuNSAyMy40IDAgNy43IDI2LjQgNDItMjYuNCA0OS41IDAgMC0yMTcuNS0xMjIuNyAwem05Ny44IDE5My45bC0yNy45IDAtMjcuOSAxNy41LTUuMS0xNy41LTExLjkgMCAwLTE3MC4zIDcyLjggMCAwIDE3MC4zek0xNDkuOCAyNDcuN2wtNTIuMyAwYzEuNy0yNy4xIDIuMi01MS42IDIuMi03My41bDUxLjIgMHMyLTIyLjYtOC42LTIyLjNsLTg4LjUgMGMzLjUtMTMuMSA3LjktMjYuNyAxMy4xLTQwLjcgMCAwLTI0LjEgMC0zMi4zIDIxLjYtMy40IDguOS0xMy4yIDQzLjEtMzAuNyA3OC4xIDUuOS0uNiAyNS40LTEuMiAzNi44LTIyLjIgMi4xLTUuOSAyLjUtNi43IDUuMS0xNC41bDI4LjkgMGMwIDEwLjUtMS4yIDY2LjktMS43IDczLjRsLTUyLjMgMGMtMTEuNyAwLTE1LjYgMjMuNi0xNS42IDIzLjZsNjUuNiAwYy00LjQgNDkuOS0yOCA5MS45LTcwLjggMTI1LjEgMjAuNSA1LjkgNDAuOS0uOSA1MS05LjkgMCAwIDIzLTIwLjkgMzUuNi02OS4zbDU0IDY0LjlzNy45LTI2LjktMS4yLTQwYy03LjYtOC45LTI4LjEtMzMuMS0zNi44LTQxLjhMODcuOSAzMTJjNC40LTE0IDctMjcuNiA3LjktNDAuN2w2MS42IDBzLS4xLTIzLjYtNy42LTIzLjZsMCAwem00MTItMS42YzIwLjgtMjUuNiA0NS01OC42IDQ1LTU4LjZzLTE4LjYtMTQuOC0yNy40LTQuMWMtNiA4LjItMzYuOCA0OC4yLTM2LjggNDguMmwxOS4yIDE0LjR6TTQxMS44IDE4N2MtOS04LjItMjUuOSAyLjEtMjUuOSAyLjFzMzkuNSA1NSA0MS4xIDU3LjRsMTkuNS0xMy43cy0yNS43LTM3LjYtMzQuNy00NS45bDAgMCAwIDB6TTY0MCAyNTguNGMtMTkuOCAwLTEzMC45IC45LTEzMS4xIC45bDAtMTAxYzQuOCAwIDEyLjQtLjQgMjIuOC0xLjIgNDAuOS0yLjQgNzAuMS00IDg3LjgtNC44IDAgMCAxMi4yLTI3LjItLjYtMzMuNC0zLjEtMS4yLTIzLjIgNC42LTIzLjIgNC42cy0xNjUuMiAxNi41LTIzMi40IDE4YzEuNiA4LjggNy42IDE3LjEgMTUuOCAxOS42IDEzLjMgMy41IDIyLjcgMS43IDQ5LjIgLjkgMjQuOC0xLjYgNDMuNy0yLjQgNTYuNS0yLjRsMCA5OS44LTEzMy41IDBzMi44IDIyLjMgMjUuNSAyMi45bDEwNy45IDAgMCA3MC45YzAgMTQtMTEuMiAyMi0yNC41IDIxLjEtMTQuMSAuMS0yNi4xLTEuMS00MS43LTEuOCAyIDQgNi4zIDE0LjQgMTkuMyAyMS44IDkuOSA0LjggMTYuMiA2LjYgMjYgNi42IDI5LjYgMCA0NS43LTE3LjMgNDQuOS00NS4zbDAtNzMuMyAxMjIuNCAwYzkuNyAwIDguNy0yMy44IDguNy0yMy44bDAgMHoiXQogICAgfTsKICAgIGZhWWFuZGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbmRleCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNDEzIiwgIk0xNTMuMSAzMTUuOEw2NS43IDUxMiAyIDUxMiA5OCAzMDIuMkM1Mi45IDI3OS4zIDIyLjggMjM3LjggMjIuOCAxNjEuMSAyMi43IDUzLjcgOTAuOCAwIDE3MS43IDBsODIuMyAwIDAgNTEyLTU1LjEgMCAwLTE5Ni4yLTQ1LjggMHpNMTk4LjkgNDYuNWwtMjkuNCAwYy00NC40IDAtODcuNCAyOS40LTg3LjQgMTE0LjYgMCA4Mi4zIDM5LjQgMTA4LjggODcuNCAxMDguOGwyOS40IDAgMC0yMjMuNHoiXQogICAgfTsKICAgIGZhUGl4aXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGl4aXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY0MCIsICJNOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05Nkw5NiAzMnptNzcuNyAyMTcuM2E2MC4xIDYwLjEgMCAxIDAgMTIwLjMgMCA2MC4xIDYwLjEgMCAxIDAgLTEyMC4zIDB6TTExOS4xIDM4Ny44Yy0uMy0uOC0uNS0xLjctLjUtMi42bDAtMjQ0LjNjMC0xLjggLjctMy42IDItNC45czMtMiA0LjktMmwxNi45IDBjMS4yIDAgMi4zIC4zIDMuMyAuOHMxLjkgMS4zIDIuNSAyLjNsMTQgMjEuOGMxOS43LTE1LjYgNDQuNS0yNSA3MS42LTI1IDYzLjYgMCAxMTUuMiA1MS42IDExNS4yIDExNS4yUzI5Ny41IDM2NC41IDIzMy44IDM2NC41Yy0yMiAwLTQyLjYtNi4yLTYwLjEtMTYuOWwwIDM3LjZjMCAuOS0uMiAxLjgtLjUgMi42cy0uOSAxLjYtMS41IDIuMi0xLjQgMS4xLTIuMiAxLjUtMS43IC41LTIuNiAuNWwtNDEuMyAwYy0uOSAwLTEuOC0uMi0yLjYtLjVzLTEuNi0uOS0yLjItMS41LTEuMS0xLjQtMS41LTIuMnoiXQogICAgfTsKICAgIGZhT3BlbmFpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wZW5haSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlN2NmIiwgIk0xOTYuNCAxODUuOGwwLTQ4LjZjMC00LjEgMS41LTcuMiA1LjEtOS4ybDk3LjgtNTYuM2MxMy4zLTcuNyAyOS4yLTExLjMgNDUuNi0xMS4zIDYxLjQgMCAxMDAuNCA0Ny42IDEwMC40IDk4LjMgMCAzLjYgMCA3LjctLjUgMTEuOEwzNDMuMyAxMTEuMWMtNi4xLTMuNi0xMi4zLTMuNi0xOC40IDBMMTk2LjQgMTg1Ljh6TTQyNC43IDM3NS4ybDAtMTE2LjJjMC03LjItMy4xLTEyLjMtOS4yLTE1LjlMMjg3IDE2OC40IDMyOSAxNDQuM2MzLjYtMiA2LjctMiAxMC4yIDBMNDM3IDIwMC43YzI4LjIgMTYuNCA0Ny4xIDUxLjIgNDcuMSA4NSAwIDM4LjktMjMgNzQuOC01OS40IDg5LjZsMCAwek0xNjYuMiAyNzIuOGwtNDItMjQuNmMtMy42LTItNS4xLTUuMS01LjEtOS4ybDAtMTEyLjZjMC01NC44IDQyLTk2LjMgOTguOC05Ni4zIDIxLjUgMCA0MS41IDcuMiA1OC40IDIwTDE3NS40IDEwOC41Yy02LjEgMy42LTkuMiA4LjctOS4yIDE1LjlsMCAxNDguNSAwIDB6bTkwLjQgNTIuMmwtNjAuMi0zMy44IDAtNzEuNyA2MC4yLTMzLjggNjAuMiAzMy44IDAgNzEuNy02MC4yIDMzLjh6bTM4LjcgMTU1LjdjLTIxLjUgMC00MS41LTcuMi01OC40LTIwbDEwMC45LTU4LjRjNi4xLTMuNiA5LjItOC43IDkuMi0xNS45bDAtMTQ4LjUgNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMmwwIDExMi42YzAgNTQuOC00Mi41IDk2LjMtOTkuMyA5Ni4zbDAgMHpNMTczLjggMzY2LjVMNzYuMSAzMTAuMmMtMjguMi0xNi40LTQ3LjEtNTEuMi00Ny4xLTg1IDAtMzkuNCAyMy42LTc0LjggNTkuOS04OS42bDAgMTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xIC41LTguMiAxLTEyLjNsMTAwLjkgNTguNGM2LjEgMy42IDEyLjMgMy42IDE4LjQgMGwxMjguNS03NC4yIDAgNDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM2wwIDB6bTEyNyA2MC45YzYyIDAgMTEzLjctNDQgMTI1LjQtMTAyLjQgNTcuMy0xNC45IDk0LjItNjguNiA5NC4yLTEyMy40IDAtMzUuOC0xNS40LTcwLjctNDMtOTUuNyAyLjYtMTAuOCA0LjEtMjEuNSA0LjEtMzIuMyAwLTczLjItNTkuNC0xMjgtMTI4LTEyOC0xMy44IDAtMjcuMSAyLTQwLjQgNi43LTIzLTIyLjUtNTQuOC0zNi45LTg5LjYtMzYuOS02MiAwLTExMy43IDQ0LTEyNS40IDEwMi40LTU3LjMgMTQuOC05NC4yIDY4LjYtOTQuMiAxMjMuNCAwIDM1LjggMTUuNCA3MC43IDQzIDk1LjctMi42IDEwLjgtNC4xIDIxLjUtNC4xIDMyLjMgMCA3My4yIDU5LjQgMTI4IDEyOCAxMjggMTMuOCAwIDI3LjEtMiA0MC40LTYuNyAyMyAyMi41IDU0LjggMzYuOSA4OS42IDM2Ljl6Il0KICAgIH07CiAgICBmYVNpdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2l0aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTEyIiwgIk0wIDMybDY5LjcgMTE4LjgtNTguOS0xMS41IDY5LjggOTFjLTMgMTctMyAzNC40IDAgNTEuNGwtNjkuOCA5MSA1OC45LTExLjUtNjkuNyAxMTguOCAxMTguOC02OS43LTExLjUgNTguOSA5MS02OS44YzE3IDMgMzQuNSAzIDUxLjUgMGw5MSA2OS44LTExLjUtNTguOSAxMTguNyA2OS43LTY5LjctMTE4LjggNTguOSAxMS41LTY5LjgtOTFjMy0xNyAzLTM0LjQgMC01MS40bDY5LjgtOTEtNTguOSAxMS41IDY5LjctMTE4LjgtMTE4LjcgNjkuNyAxMS41LTU4LjktOTEuMSA2OS45Yy04LjUtMS41LTE3LjEtMi4zLTI1LjctMi4zcy0xNy4yIC44LTI1LjcgMi4zTDEwNy4yIDQyLjggMTE4LjggMTAxLjcgMCAzMnpNMjI0IDM4MC4yYTEyNC4yIDEyNC4yIDAgMSAxIDAtMjQ4LjQgMTI0LjIgMTI0LjIgMCAxIDEgMCAyNDguNHptMC0yMTEuOGE4Ny42IDg3LjYgMCAxIDAgMCAxNzUuMSA4Ny42IDg3LjYgMCAxIDAgMC0xNzUuMXoiXQogICAgfTsKICAgIGZhTmZjRGlyZWN0aW9uYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmZjLWRpcmVjdGlvbmFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MzAiLCAiTTIxMS44IDQ4OC42YzEuNiAyLjUgMi4xIDUuNiAxLjQgOC41LS42IDIuOS0yLjQgNS41LTQuOSA3LjEtMi42IDEuNi01LjYgMi4xLTguNiAxLjUtNjEuNC0xMy45LTExNS42LTQ5LjktMTUyLjItMTAxLjJTLTUuNCAyOTAuMyAxLjYgMjI3LjdjNy02Mi43IDM2LjgtMTIwLjUgODMuNy0xNjIuNSA0Ni45LTQyIDEwNy43LTY1LjIgMTcwLjctNjUuMiAxLjUgMCAyLjEgLjMgNC4zIC45IDEuNCAuNiAxLjggMS40IDMuNyAyLjUgMS4xIDEuMSAxLjkgMi4zIDIuNSAzLjcgLjUgMS40IC44IDIuOCAuOCA0LjNsMCAxMDEgMjQuNS0yNS45YzEtMS4xIDIuMi0yIDMuNi0yLjYgMS4zLS42IDIuOC0uOSA0LjMtMSAxLjUtLjEgMi45IC4yIDQuMyAuN3MyLjcgMS4zIDMuOCAyLjRjMSAxIDEuOSAyLjIgMi41IDMuNiAuNiAxLjMgMSAyLjggMSA0LjNzLS4yIDMtLjcgNC4zYy0uNiAxLjQtMS40IDIuNi0yLjQgMy43bC00NCA0Ni42Yy0xLjEgMS4xLTIuMyAyLTMuNyAyLjYtMS41IC42LTMgLjktNS40IC45LS42IDAtMi4yLS4zLTMuNi0uOXMtMi43LTEuNS0zLjctMi42bC00NC4xLTQ2LjZjLTItMi4yLTMuMS01LjEtMy04LjEgMC0zIDEuMy02LjcgMy41LTcuOSAyLjItMi4xIDUuMS0zLjIgOC4xLTMuMSAzIC4xIDUuOCAxLjMgNy45IDMuNWwyNC41IDI2IDAtODkuNWMtNTYuNCAyLjgtMTA5LjggMjUuOC0xNTAuNSA2NS00MC42IDM5LjEtNjUuNyA5MS43LTcwLjYgMTQ3LjlTMzQuNCAzNDguMSA2Ny43IDM5My43YzMyLjQgNDUuNSA4MiA3Ny41IDEzNyA4OS45IDIuOSAuNyA1LjUgMi41IDcuMSA1ek0xNzEuNCAxMjYuMWMtLjggMS4zLTEuOSAyLjQtMy4xIDMuMi0yMC41IDEzLjktMzcuMiAzMi42LTQ4LjggNTQuNXMtMTcuNyA0Ni4zLTE3LjcgNzEuMSA2LjEgNDkuMiAxNy43IDcwLjJjMTEuNiAyMi44IDI4LjMgNDEuNSA0OC44IDU1LjQgMi41IDEuNyA0LjIgNC4zIDQuNyA3LjMgLjYgMi45LS45IDYtMS43IDguNC0xLjcgMi41LTUuMiA0LjItNy4zIDMuOS0yLjkgMS40LTYgLjgtOC40LS45LTIzLjYtMTYtNDIuOC0zNy41LTU2LjEtNjIuNy0xMy4zLTI1LjEtMjAuMy01My4xLTIwLjMtODEuNiAwLTI4LjQgNy01Ni41IDIwLjMtODEuNiAxMy4zLTI1LjIgMzIuNS00Ni43IDU2LjEtNjIuNyAxLjItLjggMi42LTEuNCA0LTEuOCAxLjUtLjMgMy0uMyA0LjUgMCAxLjQgLjIgMi44IC44IDQuMSAxLjZzMi4zIDEuOSAzLjIgMy4xYy44IDEuMiAxLjQgMi42IDEuNyA0LjFzLjMgMyAwIDQuNGMtLjMgMS41LS44IDIuOS0xLjcgNC4xek0zNDAuOSAzODMuNWMuOC0xLjIgMS45LTIuMyAyLjItMy4xbDAtLjFjMjEuMy0xNCAzOC0zMi43IDQ5LjYtNTQuNiAxMS41LTIxLjggMTcuNS00Ni4yIDE3LjUtNzAuOXMtNi00OS4xLTE3LjUtNzFjLTExLjYtMjIuNy0yOC4zLTQwLjUtNDkuNi01NC41LS4zLS44LTEuNC0xLjktMi4yLTMuMS0uOC0xLjMtMS40LTIuNy0xLjYtNC4xLTEuMi0xLjUtLjMtMyAwLTQuNCAuMy0xLjUgLjktMi45IDEuNy00LjEgLjktMS4yIDEuMS0yLjMgMy4yLTMuMSAxLjItLjggMi42LTEuMyA0LjEtMS42czIuOS0uMyA0LjQgMCAyLjggLjkgNC4xIDEuOGMyMy40IDE2IDQyLjcgMzcuNSA1NS45IDYyLjYgMTMuMyAyNS4xIDE5LjQgNTMuMSAxOS40IDgxLjUgMCAyOC41LTYuMSA1Ni41LTE5LjQgODEuNi0xMy4yIDI1LjEtMzIuNSA0Ni42LTU1LjkgNjIuNi0xLjMgLjktMi42IDEuNS00LjEgMS44cy0yLjkgLjMtNC40IDAtMi45LTEuNy00LjEtMS42Yy0yLjEtLjgtMi4zLTEuOS0zLjItMy4xLS44LTEuMi0xLjQtMi42LTEuNy00LjEtLjMtMS40LTEuMi0yLjkgMC00LjQgLjItMS40IC44LTIuOCAxLjYtNC4xek0zMTIuMyA2LjNjNTYuMiAxMi43IDEwNi40IDQ0IDE0Mi43IDg4LjcgMzAuNCAzNy42IDQ5LjYgODMgNTUuMyAxMzEgNS42IDQ4LTIuNCA5Ni43LTIzLjIgMTQwLjMtMjAuOSA0My42LTUzLjYgODAuNS05NC41IDEwNi4zLTQwLjkgMjUuNy04OC4yIDM5LjQtMTM2LjYgMzkuNC0xLjUgMC0yLjktLjMtNC4zLS45LTEuNC0uNS0yLjYtMS40LTMuNy0yLjQtMS45LTEuMS0xLjktMi4zLTIuNC0zLjctLjYtMS40LS45LTIuOC0uOS00LjNsMC05OS4yLTI0LjUgMjZjLTIuMSAyLjItNC45IDIuNi03LjkgMy42LTMgLjEtNS45LTEuMS04LjEtNC0yLjItMS4yLTMuNS00LTMuNS03LS4xLTMgMS01LjkgMy04LjFsNDQuMS00Ni42YzEuMy0yLjIgNS4xLTMuNCA3LjMtMy40IDQgMCA2LjkgMS4yIDkuMSAzLjRsNDQgNDYuNmMyLjEgMi4yIDMuMiA1LjEgMy4xIDguMXMtMS40IDUuOC0zLjUgN2MtMi4yIDIuOS01LjEgNC4xLTguMSA0LTMtMS01LjktMS40LTcuOS0zLjZsLTI0LjUtMjUuOSAwIDg3LjVjNTYuNC0yLjggMTA5LjgtMjUuOCAxNTAuNS02NSA0MC43LTQwIDY1LjgtOTEuNyA3MC43LTE0Ny45IDQuOC01Ny4xLTEwLjgtMTEyLjMtNDQuMS0xNTcuOS0zMy4zLTQ1LjYtODItNzcuNS0xMzctODkuOS0xLjUtLjMtMi44LS45LTQuMS0xLjgtMS4yLS45LTIuMi0xLjktMy0zLjItLjgtMS4yLTIuMi0yLjYtMS42LTQuMS0uMi0xLjUtLjItMyAuMS00LjQgLjQtMS40IDEtMi44IDEuOC00IC45LTEuMiAyLTIuMiAzLjItMyAxLjMtLjggMi43LTEuMyA0LjEtMS42IDEuNS0uMyAzLS4yIDQuNCAuMXptNDAuOCAyNDkuOGMwIDMxLjQtMTcuNSA2MS4xLTQ5LjMgODMuNS0yLjEgMS41LTQuOCAyLjMtNy40IDItMi43LS4yLTUuMi0xLjMtNy0zLjJsLTcwLjEtNjkuOGMtMi4yLTIuMS00LjItNS0zLjQtOCAwLTMgMS4yLTUuOSAzLjMtOCAyLjItMi4xIDUtMy4zIDgtMy4zczUuOSAxLjIgOCAzLjNsNjMuMSA2Mi44YzIwLjgtMTcuMSAzMi4yLTM3LjkgMzIuMi01OS4zIDAtMjMuOS0xNC4xLTQ3LTM5LjctNjUuMS0yLjUtMS43LTQuMS00LjMtNC42LTcuMy0uNS0yLjkgLjEtNiAxLjktOC40IDEuNy0yLjUgNC4zLTQuMSA3LjMtNC42IDIuOS0uNSA2IC4xIDguNCAxLjkgMzEuOCAyMi40IDQ5LjMgNTIuMSA0OS4zIDgzLjV6TTIxNi43IDM0MS41Yy0zIC41LTYtLjItOC41LTEuOS0zMS43LTIyLjQtNTAuMS01Mi4xLTUwLjEtODMuNXMxOC40LTYxLjEgNTAuMS04My41YzIuMi0xLjYgNC45LTIuMyA3LjUtMi4xIDIuNyAuMyA1LjEgMS40IDcgMy4zbDcwLjEgNjkuOGMyLjEgMi4xIDMuMyA1IDMuMyA4cy0yIDUuOC0zLjMgOGMtMi4xIDIuMS01IDMuMy03LjkgMy4zLTMgMC02LjgtMS4yLTgtMy4zbC02My4xLTYyLjljLTIwLjkgMTcuMy0zMi4yIDM4LTMyLjIgNTkuNCAwIDIzIDE0LjEgNDcgMzkuNyA2NSAyLjQgMS44IDQuMSA0LjQgNC42IDcuNCAuNSAyLjktLjIgNS45LTEuOSA4LjQtMS43IDIuNC00LjQgNC4xLTcuMyA0LjZ6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc0J5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtYnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlNyIsICJNMzIyLjkgMTk0LjRsMCAxMDEuNC0yOC4zIDAgMCAxMjAuNS03Ny4xIDAgMC0xMjAuNC0yOC4zIDAgMC0xMDEuNWMwLTQuNCAxLjYtOC4yIDQuNi0xMS4zIDMuMS0zLjEgNi45LTQuNyAxMS4zLTQuN2wxMDEuOSAwYzQuMSAwIDcuOCAxLjYgMTEuMSA0LjcgMy4xIDMuMiA0LjggNi45IDQuOCAxMS4zem0tMzIuNS02NC41YTM0LjUgMzQuNSAwIDEgMSAtNjkgLjggMzQuNSAzNC41IDAgMSAxIDY5LS44ek0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6Il0KICAgIH07CiAgICBmYVVtYnJhY28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW1icmFjbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmOGU4IiwgIk0yNTYuMyA4YTI0OCAyNDggMCAxIDAgLS43IDQ5NiAyNDggMjQ4IDAgMSAwIC43LTQ5NnptMTQ1IDI2NmMtLjggMjcuMS01LjQgNDguOC0xNCA2NXMtMjMuMSAyNy45LTQzLjUgMzVjLTIwLjQgNy4xLTQ4LjkgMTAuNi04NS40IDEwLjVsLTQuNiAwYy0zNi41IC4xLTY1LTMuMy04NS40LTEwLjVzLTM0LjktMTguOC00My41LTM1Yy04LjYtMTYuMi0xMy4yLTM3LjktMTQtNjUtLjctMTAuMi0uNy0yMC41IDAtMzAuNyAuNC0xNC43IDEuNi0yOS4zIDMuNi00My45IDEuOS0xMy40IDMuNi0yMi42IDUuNC0zMiAxLTQuOSAxLjMtNi40IDEuOC04LjQgLjMtMS4xIC45LTIuMSAxLjgtMi44czItMS4xIDMuMS0xLjFsLjcgMCAzMiA1YzEuMiAuMiAyLjIgLjggMyAxLjdzMS4yIDIuMSAxLjIgMy4zYzAgLjMgMCAuNSAwIC44bC0xLjcgOC44Yy0xLjYgOC44LTMuMiAyMC4xLTQuOCAzMy43LTEuNyAxNC0yLjUgMjguMS0yLjYgNDIuMi0uMiAyNyAyLjUgNDYuOSA4LjEgNTkuOCAyLjggNi40IDcuMiAxMiAxMi42IDE2LjRzMTEuOSA3LjQgMTguNyA4LjhjMTguOCA0IDM4LjEgNS43IDU3LjMgNS4xbDEwLjMgMGMxOS4yIC42IDM4LjUtMS4yIDU3LjMtNS4yIDYuOC0xLjQgMTMuMi00LjUgMTguNi04LjhzOS43LTEwIDEyLjUtMTYuNGM1LjctMTIuOSA4LjQtMzIuOSA4LjEtNTkuOC0uMS0xNC4xLTEtMjguMi0yLjYtNDIuMS0xLjctMTMuNi0zLjMtMjQuOC00LjktMzMuN2wtMS43LTguOGMwLS4zIDAtLjUgMC0uOCAwLTEuMiAuNC0yLjQgMS4yLTMuM3MxLjgtMS41IDMtMS43bDMyLTUgLjggMGMxLjEgMCAyLjIgLjQgMy4xIDEuMXMxLjUgMS43IDEuOCAyLjhjLjYgMiAuOCAzLjYgMS44IDguNCAxLjggOS42IDMuNSAxOC44IDUuNCAzMiAyIDE0LjYgMy4yIDI5LjIgMy42IDQzLjkgLjcgMTAuMiAuNyAyMC41IDAgMzAuN2wwIDB6Il0KICAgIH07CiAgICBmYUhvb2xpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvb2xpIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MjciLCAiTTE0NC41IDM1MmwzOC4zIC44Yy0xMy4yLTQuNi0yNi0xMC4yLTM4LjMtMTYuOGwwIDE2em01Ny43LTUuM2wwIDUuMy0xOS40IC44YzM2LjUgMTIuNSA2OS45IDE0LjIgOTQuNyA3LjItMTkuOSAuMi00NS44LTIuNi03NS4zLTEzLjN6TTYxMS4xIDIzMS41YzE1LjkgMCAyOC45LTEyLjkgMjguOS0yOC45cy0xMi45LTI0LjUtMjguOS0yNC41Yy0xNS45IDAtMjguOSA4LjYtMjguOSAyNC41czEyLjkgMjguOSAyOC45IDI4Ljl6TTU4Mi4xIDM1Mmw1Ny45IDAgMC0xMTAuNS01Ny45IDAgMCAxMTAuNXptLTczLjcgMGw1Ny45IDAgMC0xOTUuMy01Ny45IDI3LjMgMCAxNjh6bS0zMS0xMTkuNGMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjMtMS4xLTUwLjQgMTcuMWMtMTguMiAxOC4yLTE2LjggMzMuOS0xNi44IDUyLjZzLTEuNCAzNC4zIDE2LjggNTIuNSA1MC40IDE3LjEgNTAuNCAxNy4xIDMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuOC0zMy44IDE2LjgtNTIuNS0uMS0xOC44IDEuMy0zNC41LTE2LjgtNTIuNnptLTM5LjggNzEuOWMwIDMuNi0xLjggMTIuNS0xMC43IDEyLjVzLTEwLjctOC45LTEwLjctMTIuNWwwLTQwLjRjMC04LjcgNy4zLTEwLjkgMTAuNy0xMC45czEwLjcgMi4xIDEwLjcgMTAuOWwwIDQwLjR6TTMzMS40IDIzMi42Yy0xOC4yLTE4LjItNTAuNC0xNy4xLTUwLjQtMTcuMXMtMzIuMi0xLjEtNTAuNCAxNy4xYy0xLjkgMS45LTMuNyAzLjktNS4zIDYtMzguMi0yOS42LTcyLjUtNDYuNS0xMDIuMS02MS4xbDAtMjAuNy0yMi41IDEwLjZjLTU0LjQtMjIuMS04OS0xOC4yLTk3LjMgLjEgMCAwLTI0LjkgMzIuOCA2MS44IDExMC44bDAgNzMuNyA1Ny45IDAgMC0yOC42Yy02LjUtNC4yLTEzLTguNy0xOS40LTEzLjYtMTQuOC0xMS4yLTI3LjQtMjEuNi0zOC40LTMxLjRsMC0zMWMxMy4xIDE0LjcgMzAuNSAzMS40IDUzLjQgNTAuM2w0LjUgMy42IDAtMjkuOGMwLTYuOSAxLjctMTguMiAxMC44LTE4LjJzMTAuNiA2LjkgMTAuNiAxNWwwIDQ4LjdjMTggMTIuMiAzNy4zIDIyLjEgNTcuNyAyOS42bDAtOTMuOWMwLTE4LjctMTMuNC0zNy40LTQwLjYtMzcuNC0xNS44LS4xLTMwLjUgOC4yLTM4LjUgMjEuOWwwLTU0LjNjNDEuOSAyMC45IDgzLjkgNDYuNSA5OS45IDU4LjMtMTAuMiAxNC42LTkuMyAyOC4xLTkuMyA0My43IDAgMTguNy0xLjQgMzQuMyAxNi44IDUyLjVzNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjctMzMuOCAxNi43LTUyLjUgMC0xOC41IDEuNS0zNC4yLTE2LjctNTIuM3pNNjUuMiAxODRsMCA2My4zYy00OC43LTU0LjUtMzguOS03Ni0zNS4yLTc5LjEgMTMuNS0xMS40IDM3LjUtOCA2NC40IDIuMUw2NS4yIDE4NHpNMjkxLjcgMzA0LjVjMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40eiJdCiAgICB9OwogICAgZmFTcXVhcmVHaXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXQtc3F1YXJlIl0sICJmMWQyIiwgIk0xMjAuOCAzMzUuNWMtNS45LS40LTEyLjYtLjgtMjAuMi0xLjMtMy4zIDQuMS02LjYgOC40LTYuNiAxMy41IDAgMTguNSA2NS41IDE4LjUgNjUuNS0xLjUgMC04LjMtNy40LTguNy0zOC44LTEwLjdsLjEgMHptNy44LTExNy45Yy0zMi4zIDAtMzMuNyA0NC41LS43IDQ0LjUgMzIuNSAwIDMxLjctNDQuNSAuNy00NC41ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjQzLjkgMTcyLjJjLTE0LjUgMC0yMi45LTguNC0yMi45LTIyLjlzOC40LTIyLjMgMjIuOS0yMi4zYzE0LjcgMCAyMy4xIDcuOCAyMy4xIDIyLjNzLTguNCAyMi45LTIzLjEgMjIuOXpNMTQ5LjYgMTk1bDQ5LjUgMCAwIDIxLjYtMjMuNCAxLjhjNC42IDUuOCA5LjQgMTQgOS40IDI1LjcgMCA0OC43LTU3LjIgNDcuMi03NC4yIDQyLjRsLTguNCAxMy40YzUgLjMgOS44IC42IDE0LjMgLjggNTYuMyAzLjIgODAuNSA0LjYgODAuNSAzOC41IDAgMjkuMi0yNS43IDQ1LjctNjkuOSA0NS43LTQ2IDAtNjMuNS0xMS42LTYzLjUtMzEuNyAwLTExLjQgNS4xLTE3LjUgMTQtMjUuOS04LjQtMy41LTExLjItOS45LTExLjItMTYuOCAwLTkuNiA3LjQtMTYuMyAyMy0zMC42bC4yLS4yYy0xMi40LTYuMS0yMS44LTE5LjMtMjEuOC0zOC4xIDAtNTEuNiA1Ni42LTUzLjMgODEuNi00Ni44bC0uMSAuMnpNMjcwLjUgMzAzLjFsMTMgMS44IDAgMjAuMS03Mi40IDAgMC0yMC4xYzIuNy0uNCA1LS43IDYuOS0uOSA5LjktMS4yIDEwLjEtMS4zIDEwLjEtNmwwLTc0LjdjMC00LjQtLjktNC43LTEwLjEtNy44LTEuOS0uNy00LjItMS40LTYuOS0yLjRsMi44LTIwLjYgNTIuNiAwIDAgMTA1LjVjMCA0LjEgLjIgNC42IDQuMSA1LjFsLS4xIDB6bTEwNi42LTEwLjRMMzg0IDMxNWMtMTAuOSA1LjQtMjYuOSAxMC4yLTQxLjQgMTAuMi0zMC4yIDAtNDEuNy0xMi4yLTQxLjctNDAuOWwwLTY2LjZjMC0uOCAwLTEuNC0uMi0xLjgtLjgtMS4yLTQuMi0uNy0xOS42LS43bDAtMjIuNmMyMi4zLTIuNSAzMS4yLTEzLjcgMzQtNDEuNGwyNC4yIDBjMCAzMy4zLS42IDM4IC43IDM4LjYgLjMgLjEgLjcgMCAxLjMgMGwzNS44IDAgMCAyNS40LTM3LjggMCAwIDYxLjZjLS4yIDYuMy0uOSAzMC40IDM3LjkgMTUuOWwtLjEgMHoiXQogICAgfTsKICAgIGZhR2l0U3F1YXJlID0gZmFTcXVhcmVHaXQ7CiAgICBmYU9kbm9rbGFzc25pa2kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2Rub2tsYXNzbmlraSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMjYzIiwgIk0yNzUuMSAzMzRjLTI3LjQgMTcuNC02NS4xIDI0LjMtOTAgMjYuOWwyMC45IDIwLjYgNzYuMyA3Ni4zYzI3LjkgMjguNi0xNy41IDczLjMtNDUuNyA0NS43LTE5LjEtMTkuNC00Ny4xLTQ3LjQtNzYuMy03Ni42TDg0IDUwMy40Yy0yOC4yIDI3LjUtNzMuNi0xNy42LTQ1LjQtNDUuNyAxOS40LTE5LjQgNDcuMS00Ny40IDc2LjMtNzYuM2wyMC42LTIwLjZjLTI0LjYtMi42LTYyLjktOS4xLTkwLjYtMjYuOS0zMi42LTIxLTQ2LjktMzMuMy0zNC4zLTU5IDcuNC0xNC42IDI3LjctMjYuOSA1NC42LTUuNyAwIDAgMzYuMyAyOC45IDk0LjkgMjguOVMyNTUgMjY5LjIgMjU1IDI2OS4yYzI2LjktMjEuMSA0Ny4xLTguOSA1NC42IDUuNyAxMi40IDI1LjctMS45IDM4LTM0LjUgNTkuMXptMTQuNi0yMDQuN2ExMjkuNyAxMjkuNyAwIDEgMSAtMjU5LjQgLjQgMTI5LjcgMTI5LjcgMCAxIDEgMjU5LjQtLjR6bS0xOTMuNCAuNGE2My43IDYzLjcgMCAxIDAgMTI3LjQtLjQgNjMuNyA2My43IDAgMSAwIC0xMjcuNCAuNHoiXQogICAgfTsKICAgIGZhRHJ1cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRydXBhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWE5IiwgIk0yNzIuMyAxMDguMUMyMzYuNSA3Mi41IDIwMi41IDM4LjQgMTkyLjQgMCAxODIuNCAzOC40IDE0OC4xIDcyLjUgMTEyLjQgMTA4LjEgNTguOCAxNjEuNy0xLjkgMjIyLjQtMS45IDMxMy40LTQuMyA0MjAuNyA4MC44IDUwOS42IDE4OC4xIDUxMnMxOTYuMi04Mi44IDE5OC41LTE5MC4xYy4xLTIuOCAuMS01LjYgMC04LjUgMC05MS4xLTYwLjgtMTUxLjctMTE0LjMtMjA1LjN6TTk4IDMzMS4xYy01LjkgNy41LTExIDE1LjYtMTUuMiAyNC4yLS4zIC43LS44IDEuMy0xLjMgMS44cy0xLjIgLjgtMiAxbC0xLjcgMGMtNC4zIDAtOS4yLTguNS05LjItOC41LTEuMy0yLTIuNS00LjItMy43LTYuNGwtLjgtMS44Yy0xMS4yLTI1LjctMS41LTYyLjMtMS41LTYyLjMgNC44LTE3LjggMTIuNy0zNC43IDIzLjItNDkuOSA2LjQtOS42IDEzLjUtMTguOSAyMS0yNy43bDkuMiA5LjIgNDMuNSA0NC40Yy44IC45IDEuMyAyLjEgMS4zIDMuM3MtLjUgMi40LTEuMyAzLjNMMTE0LjEgMzEyLjMgOTggMzMxLjF6bTk2LjYgMTI3LjNjLTEyLjktLjEtMjUuNi0zLjktMzYuNC0xMXMtMTkuNC0xNy4xLTI0LjYtMjguOS03LTI0LjktNS0zNy43IDcuNi0yNC43IDE2LjItMzQuNGMxNC4yLTE2LjkgMzEuNS0zMy41IDUwLjMtNTUuMyAyMi4zIDIzLjggMzYuOSA0MC4xIDUxLjIgNTggMS4xIDEuNCAyLjEgMi45IDMgNC40IDcuOCAxMS4xIDEyIDI0LjQgMTIgMzggMCA4LjgtMS43IDE3LjQtNSAyNS41cy04LjIgMTUuNS0xNC40IDIxLjctMTMuNSAxMS4xLTIxLjYgMTQuNS0xNi43IDUuMS0yNS41IDUuMWwtLjIgMHpNMzIwLjcgMzUxLjZjLS40IDEuNC0xLjIgMi42LTIuMyAzLjZzLTIuNCAxLjYtMy44IDEuOGwtMS4zIDBjLTIuNi0uOS00LjktMi43LTYuMy01LjEtMTEuNi0xNy41LTI0LjktMzMuOS0zOS41LTQ5bC0xNy44LTE4LjQtNTkuMS02MS4zYy0xMi40LTExLjUtMjQuMi0yMy42LTM1LjQtMzYuMy0uMy0uNS0uNi0uOS0uOS0xLjQtMi0yLjgtMy42LTUuOS00LjctOS4ybDAtMS44Yy0uOC01LS40LTEwLjEgMS4yLTE1czQuNC05LjIgOC0xMi43YzExLjQtMTEuNCAyMy0yMyAzMy44LTM0LjkgMTIgMTMuMyAyNC44IDI2IDM3LjQgMzguNiAyNS44IDI0IDQ5LjEgNTAuNSA2OS42IDc5LjEgMTcuMyAyNC41IDI2LjcgNTMuOCAyNyA4My44LS4xIDEyLjktMi4yIDI1LjgtNiAzOC4yeiJdCiAgICB9OwogICAgZmFCbG9nZ2VyQiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibG9nZ2VyLWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3ZCIsICJNNDQ2LjYgMjIyLjdjLTEuOC04LTYuOC0xNS40LTEyLjUtMTguNS0xLjgtMS0xMy0yLjItMjUtMi43LTIwLjEtLjktMjIuMy0xLjMtMjguNy01LTEwLjEtNS45LTEyLjgtMTIuMy0xMi45LTI5LjUtLjEtMzMtMTMuOC02My43LTQwLjktOTEuMy0xOS4zLTE5LjctNDAuOS0zMy02NS41LTQwLjUtNS45LTEuOC0xOS4xLTIuNC02My4zLTIuOS02OS40LS44LTg0LjggLjYtMTA4LjQgMTAtNDMuNSAxNy4yLTc0LjcgNTMuOC04Ni4xIDEwMC42LTIuMSA4LjgtMi42IDIyLjktMy4xIDEwMy45LS42IDEwMS41IC4xIDExNi40IDYuNCAxMzYuNSAxNS42IDQ5LjYgNTkuOSA4Ni4zIDEwNC40IDk0LjMgMTQuOCAyLjcgMTk3LjMgMy4zIDIxNiAuOCAzMi41LTQuNCA1OC0xNy41IDgxLjktNDEuOSAxNy4zLTE3LjcgMjguMS0zNi44IDM1LjItNjIuMSA0LjktMTcuNiA0LjUtMTQyLjggMi41LTE1MS43ek0xMjQuNSAxNTkuMWM3LjgtNy45IDEwLTguMiA1OC44LTguMiA0My45IDAgNDUuNCAuMSA1MS44IDMuNCA5LjMgNC43IDEzLjQgMTEuMyAxMy40IDIxLjkgMCA5LjUtMy44IDE2LjItMTIuMyAyMS42LTQuNiAyLjktNy4zIDMuMS01MC4zIDMuMy0yNi41IC4yLTQ3LjctLjQtNTAuOC0xLjItMTYuNi00LjctMjIuOC0yOC41LTEwLjYtNDAuOHpNMzE2LjMgMzU4LjlsLTE0LjkgMi40LTc3LjUgLjljLTY4LjEgLjgtODcuMy0uNC05MC45LTItNy4xLTMuMS0xMy44LTExLjctMTQuOS0xOS40LTEuMS03LjMgMi42LTE3LjMgOC4yLTIyLjQgNy4xLTYuNCAxMC4yLTYuNiA5Ny4zLTYuNyA4OS42LS4xIDg5LjEtLjEgOTcuNiA3LjggMTIuMSAxMS4zIDkuNSAzMS4yLTQuOSAzOS40eiJdCiAgICB9OwogICAgZmFJbnZpc2lvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnZpc2lvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2IwIiwgIk00MDcuNCAzMkw0MC42IDMyQzE4LjIgMzIgMCA1MC4yIDAgNzIuNkwwIDQzOS40QzAgNDYxLjggMTguMiA0ODAgNDAuNiA0ODBsMzY2LjggMGMyMi40IDAgNDAuNi0xOC4yIDQwLjYtNDAuNmwwLTM2Ni44QzQ0OCA1MC4yIDQyOS44IDMyIDQwNy40IDMyek0xNzYuMSAxNDUuNmMuNCAyMy40LTIyLjQgMjcuMy0yNi42IDI3LjQtMTQuOSAwLTI3LjEtMTItMjcuMS0yNyAuMS0zNS4yIDUzLjEtMzUuNSA1My43LS40ek0zMzIuOCAzNzdjLTY1LjYgMC0zNC4xLTc0LTI1LTEwNi42IDE0LjEtNDYuNC00NS4yLTU5LTU5LjkgLjdsLTI1LjggMTAzLjMtNDUuMSAwIDguMS0zMi41Yy0zMS41IDUxLjgtOTQuNiA0NC40LTk0LjYtNC4zIC4xLTE0LjMgLjktMTQgMjMtMTA0LjFsLTMxLjggMCA5LjctMzUuNiA3Ni40IDBjLTMzLjYgMTMzLjctMzIuNiAxMjYuOS0zMi45IDEzOC4yIDAgMjAuOSA0MC45IDEzLjUgNTcuNC0yMy4ybDE5LjgtNzkuNC0zMi4zIDAgOS43LTM1LjYgNjguOCAwLTguOSA0MC41YzQwLjUtNzUuNSAxMjcuOS00Ny44IDEwMS44IDM4LTE0LjIgNTEuMS0xNC42IDUwLjctMTQuOSA1OC44IDAgMTUuNSAxNy41IDIyLjYgMzEuOC0xNi45TDM4NiAzMjVjLTEwLjUgMzYuNy0yOS40IDUyLTUzLjIgNTJ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rRiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlYm9vay1mIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzOWUiLCAiTTgwIDI5OS4zbDAgMjEyLjcgMTE2IDAgMC0yMTIuNyA4Ni41IDAgMTgtOTcuOC0xMDQuNSAwIDAtMzQuNmMwLTUxLjcgMjAuMy03MS41IDcyLjctNzEuNSAxNi4zIDAgMjkuNCAuNCAzNyAxLjJsMC04OC43QzI5MS40IDQgMjU2LjQgMCAyMzYuMiAwIDEyOS4zIDAgODAgNTAuNSA4MCAxNTkuNGwwIDQyLjEtNjYgMCAwIDk3LjggNjYgMHoiXQogICAgfTsKICAgIGZhQ2VudG9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNlbnRvcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg5IiwgIk0yODkuNiA5Ny41bDMxLjYgMzEuNy03Ni4zIDc2LjUgMC0xMDguMiA0NC43IDB6TTEyNy4yIDEyOS4ybDc2LjMgNzYuNSAwLTEwOC4yLTQ0LjcgMC0zMS42IDMxLjd6bTQxLjUtNDEuNmw0NC43IDAgMCAxMjcuOSAxMC44IDEwLjggMTAuOC0xMC44IDAtMTI3LjkgNDQuNyAwLTU1LjUtNTUuNi01NS41IDU1LjZ6bTI2LjIgMTY4LjFsLTEwLjgtMTAuOC0xMjguNiAwIDAtNDQuOC01NS41IDU1LjYgNTUuNSA1NS42IDAtNDQuOCAxMjguNiAwIDEwLjgtMTAuOHpNMjc0LjIgMjM1bDEwNy45IDAgMC00NC44LTMxLjYtMzEuNy03Ni4zIDc2LjV6bTE3My4zIDIwLjdsLTU1LjUtNTUuNiAwIDQ0LjgtMTI3LjcgMC0xMC44IDEwLjggMTAuOCAxMC44IDEyNy43IDAgMCA0NC44IDU1LjUtNTUuNnpNNjUuNCAxNzYuMmwzMi41LTMxLjcgOTAuMyA5MC41IDE1LjMgMCAwLTE1LjMtOTAuMy05MC41IDMxLjYtMzEuNy03OS40IDAgMCA3OC43ek0zODIuMSA5Ny41bC03OC41IDAgMzEuNiAzMS43LTkwLjMgOTAuNSAwIDE1LjMgMTUuMyAwIDkwLjMtOTAuNSAzMS42IDMxLjcgMC03OC43ek0yMDMuNSA0MTMuOWwwLTEwOC4xLTc2LjMgNzYuNSAzMS42IDMxLjcgNDQuNyAwIDAtLjF6TTY1LjQgMjM1bDEwOC44IDAtNzYuMy03Ni41LTMyLjUgMzEuNyAwIDQ0Ljh6TTM4Mi4xIDMzNS4ybC0zMS42IDMxLjctOTAuMy05MC41LTE1LjMgMCAwIDE1LjMgOTAuMyA5MC41LTMxLjYgMzEuNyA3OC41IDAgMC03OC43em0wLTU4LjhsLTEwNy45IDAgNzYuMyA3Ni41IDMxLjYtMzEuNyAwLTQ0Ljh6TTMyMS4yIDM4Mi4ybC03Ni4zLTc2LjUgMCAxMDguMSA0NC43IDAgMzEuNi0zMS42ek05Ny45IDM1Mi45bDc2LjMtNzYuNS0xMDguOCAwIDAgNDQuOCAzMi41IDMxLjd6bTE4MS44IDcwLjlsLTQ0LjcgMCAwLTEyNy45LTEwLjgtMTAuOC0xMC44IDEwLjggMCAxMjcuOS00NC43IDAgNTUuNSA1NS42IDU1LjUtNTUuNnpNMTEzLjIgMzgyLjJsOTAuMy05MC41IDAtMTUuMy0xNS4zIDAtOTAuMyA5MC41LTMyLjUtMzEuNyAwIDc4LjcgNzkuNCAwLTMxLjYtMzEuN3oiXQogICAgfTsKICAgIGZhQ2NBbWF6b25QYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1hem9uLXBheSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDJkIiwgIk0xMjQuNyAyMDEuOGMuMS0xMS44IDAtMjMuNSAwLTM1LjNsMC0zNS4zYzAtMS4zIC40LTIgMS40LTIuNyAxMS41LTggMjQuMS0xMi4xIDM4LjItMTEuMSAxMi41IC45IDIyLjcgNyAyOC4xIDIxLjcgMy4zIDguOSA0LjEgMTguMiA0LjEgMjcuNyAwIDguNy0uNyAxNy4zLTMuNCAyNS42LTUuNyAxNy44LTE4LjcgMjQuNy0zNS43IDIzLjktMTEuNy0uNS0yMS45LTUtMzEuNC0xMS43LS45LS44LTEuNC0xLjYtMS4zLTIuOHptMTU0LjkgMTQuNmM0LjYgMS44IDkuMyAyIDE0LjEgMS41IDExLjYtMS4yIDIxLjktNS43IDMxLjMtMTIuNSAuOS0uNiAxLjMtMS4zIDEuMy0yLjUtLjEtMy45IDAtNy45IDAtMTEuOCAwLTQtLjEtOCAwLTEyIDAtMS40LS40LTItMS44LTIuMi03LS45LTEzLjktMi4yLTIwLjktMi45LTctLjYtMTQtLjMtMjAuOCAxLjktNi43IDIuMi0xMS43IDYuMi0xMy43IDEzLjEtMS42IDUuNC0xLjYgMTAuOCAuMSAxNi4yIDEuNiA1LjUgNS4yIDkuMiAxMC40IDExLjJ6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM2OC41IDEwMy45Yy40IDEuNyAuOSAzLjQgMS42IDUuMSAxNi41IDQwLjYgMzIuOSA4MS4zIDQ5LjUgMTIxLjkgMS40IDMuNSAxLjcgNi40IC4yIDkuOS0yLjggNi4yLTQuOSAxMi42LTcuOCAxOC43LTIuNiA1LjUtNi43IDkuNS0xMi43IDExLjItNC4yIDEuMS04LjUgMS4zLTEyLjkgLjktMi4xLS4yLTQuMi0uNy02LjMtLjgtMi44LS4yLTQuMiAxLjEtNC4zIDQtLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjYgMS42IDYuNyA2LjIgNy41IDQuNyAuOCA5LjQgMS42IDE0LjIgMS43IDE0LjMgLjMgMjUuNy01LjQgMzMuMS0xNy45IDIuOS00LjkgNS42LTEwLjEgNy43LTE1LjQgMTkuOC01MC4xIDM5LjUtMTAwLjMgNTkuMi0xNTAuNSAuNi0xLjUgMS4xLTMgMS4zLTQuNiAuNC0yLjQtLjctMy42LTMuMS0zLjctNS42LS4xLTExLjEgMC0xNi43IDAtMy4xIDAtNS4zIDEuNC02LjQgNC4zLS40IDEuMS0uOSAyLjMtMS4zIDMuNGwtMjkuMSA4My43Yy0yLjEgNi4xLTQuMiAxMi4xLTYuNSAxOC42LS40LS45LS42LTEuNC0uOC0xLjktMTAuOC0yOS45LTIxLjYtNTkuOS0zMi40LTg5LjgtMS43LTQuNy0zLjUtOS41LTUuMy0xNC4yLS45LTIuNS0yLjctNC01LjQtNC02LjQtLjEtMTIuOC0uMi0xOS4yLS4xLTIuMiAwLTMuMyAxLjYtMi44IDMuN3pNMjQyLjQgMjA2YzEuNyAxMS43IDcuNiAyMC44IDE4IDI2LjYgOS45IDUuNSAyMC43IDYuMiAzMS43IDQuNiAxMi43LTEuOSAyMy45LTcuMyAzMy44LTE1LjUgLjQtLjMgLjgtLjYgMS40LTEgLjUgMy4yIC45IDYuMiAxLjUgOS4yIC41IDIuNiAyLjEgNC4zIDQuNSA0LjQgNC42IC4xIDkuMSAuMSAxMy43IDAgMi4zLS4xIDMuOC0xLjYgNC0zLjkgLjEtLjggLjEtMS42IC4xLTIuM2wwLTg4LjhjMC0zLjYtLjItNy4yLS43LTEwLjgtMS42LTEwLjgtNi4yLTE5LjctMTUuOS0yNS40LTUuNi0zLjMtMTEuOC01LTE4LjItNS45LTMtLjQtNi0uNy05LjEtMS4xbC0xMCAwYy0uOCAuMS0xLjYgLjMtMi41IC4zLTguMiAuNC0xNi4zIDEuNC0yNC4yIDMuNS01LjEgMS4zLTEwIDMuMi0xNSA0LjktMyAxLTQuNSAzLjItNC40IDYuNSAuMSAyLjgtLjEgNS42IDAgOC4zIC4xIDQuMSAxLjggNS4yIDUuNyA0LjEgNi41LTEuNyAxMy4xLTMuNSAxOS43LTQuOCAxMC4zLTEuOSAyMC43LTIuNyAzMS4xLTEuMiA1LjQgLjggMTAuNSAyLjQgMTQuMSA3IDMuMSA0IDQuMiA4LjggNC40IDEzLjcgLjMgNi45IC4yIDEzLjkgLjMgMjAuOCAwIC40LS4xIC43LS4yIDEuMi0uNCAwLS44IDAtMS4xLS4xLTguOC0yLjEtMTcuNy0zLjYtMjYuOC00LjEtOS41LS41LTE4LjkgLjEtMjcuOSAzLjItMTAuOCAzLjgtMTkuNSAxMC4zLTI0LjYgMjAuOC00LjEgOC4zLTQuNiAxNy0zLjQgMjUuOHpNOTguNyAxMDYuOWwwIDE3NS4zYzAgLjggMCAxLjcgLjEgMi41IC4yIDIuNSAxLjcgNC4xIDQuMSA0LjIgNS45IC4xIDExLjggLjEgMTcuNyAwIDIuNSAwIDQtMS43IDQuMS00LjEgLjEtLjggLjEtMS43IC4xLTIuNWwwLTYwLjdjLjkgLjcgMS40IDEuMiAxLjkgMS42IDE1IDEyLjUgMzIuMiAxNi42IDUxLjEgMTIuOSAxNy4xLTMuNCAyOC45LTEzLjkgMzYuNy0yOS4yIDUuOC0xMS42IDguMy0yNC4xIDguNy0zNyAuNS0xNC4zLTEtMjguNC02LjgtNDEuNy03LjEtMTYuNC0xOC45LTI3LjMtMzYuNy0zMC45LTIuNy0uNi01LjUtLjgtOC4yLTEuMmwtNyAwYy0xLjIgLjItMi40IC4zLTMuNiAuNS0xMS43IDEuNC0yMi4zIDUuOC0zMS44IDEyLjctMiAxLjQtMy45IDMtNS45IDQuNS0uMS0uNS0uMy0uOC0uNC0xLjItLjQtMi4zLS43LTQuNi0xLjEtNi45LS42LTMuOS0yLjUtNS41LTYuNC01LjZsLTkuNyAwYy01LjktLjEtNi45IDEtNi45IDYuOHpNNDkzLjYgMzM5Yy0yLjctLjctNS4xIDAtNy42IDEtNDMuOSAxOC40LTg5LjUgMzAuMi0xMzYuOCAzNS44LTE0LjUgMS43LTI5LjEgMi44LTQzLjcgMy4yLTI2LjYgLjctNTMuMi0uOC03OS42LTQuMy0xNy44LTIuNC0zNS41LTUuNy01My05LjktMzctOC45LTcyLjctMjEuNy0xMDYuNy0zOC44LTguOC00LjQtMTcuNC05LjMtMjYuMS0xNC0zLjgtMi4xLTYuMi0xLjUtOC4yIDIuMWwwIDEuN2MxLjIgMS42IDIuMiAzLjQgMy43IDQuOCAzNiAzMi4yIDc2LjYgNTYuNSAxMjIgNzIuOSAyMS45IDcuOSA0NC40IDEzLjcgNjcuMyAxNy41IDE0IDIuMyAyOCAzLjggNDIuMiA0LjUgMyAuMSA2IC4yIDkgLjQgLjcgMCAxLjQgLjIgMi4xIC4zbDE3LjcgMGMuNy0uMSAxLjQtLjMgMi4xLS4zIDE0LjktLjQgMjkuOC0xLjggNDQuNi00IDIxLjQtMy4yIDQyLjQtOC4xIDYyLjktMTQuNyAyOS42LTkuNiA1Ny43LTIyLjQgODMuNC00MC4xIDIuOC0xLjkgNS43LTMuOCA4LTYuMiA0LjMtNC40IDIuMy0xMC40LTMuMy0xMS45ek01NDQgMzExLjNjLS44LTQuMi00LTUuOC03LjYtNy01LjctMS45LTExLjYtMi44LTE3LjYtMy4zLTExLS45LTIyLS40LTMyLjggMS42LTEyIDIuMi0yMy40IDYuMS0zMy41IDEzLjEtMS4yIC44LTIuNCAxLjgtMy4xIDMtLjYgLjktLjcgMi4zLS41IDMuNCAuMyAxLjMgMS43IDEuNiAzIDEuNSAuNiAwIDEuMiAwIDEuOC0uMWwxOS41LTIuMWM5LjYtLjkgMTkuMi0xLjUgMjguOC0uOCA0LjEgLjMgOC4xIDEuMiAxMiAyLjIgNC4zIDEuMSA2LjIgNC40IDYuNCA4LjcgLjMgNi43LTEuMiAxMy4xLTIuOSAxOS41LTMuNSAxMi45LTguMyAyNS40LTEzLjMgMzcuOC0uMyAuOC0uNyAxLjctLjggMi41LS40IDIuNSAxIDQgMy40IDMuNSAxLjQtLjMgMy0xLjEgNC0yLjEgMy43LTMuNiA3LjUtNy4yIDEwLjYtMTEuMiAxMC43LTEzLjggMTctMjkuNiAyMC43LTQ2LjYgLjctMyAxLjItNi4xIDEuNy05LjEgLjItNC43IC4yLTkuNiAuMi0xNC41eiJdCiAgICB9OwogICAgZmFFYmF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImViYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRmNCIsICJNNjA2LjUgMTg5LjVsLTU0LjggMTA5LjktNTQuOS0xMDkuOS0zNy41IDAgMTAuOSAyMC42Yy0xMS41LTE5LTM1LjktMjYtNjMuMy0yNi0zMS44IDAtNjcuOSA4LjctNzEuNSA0My4xbDMzLjcgMGMxLjQtMTMuOCAxNS43LTIxLjggMzUtMjEuOCAyNiAwIDQxIDkuNiA0MSAzM2wwIDMuNGMtMTIuNyAwLTI4IC4xLTQxLjcgLjQtNDIuNCAuOS02OS42IDEwLTc2LjcgMzQuNCAxLTUuMiAxLjUtMTAuNiAxLjUtMTYuMiAwLTUyLjEtMzkuNy03Ni4yLTc1LjQtNzYuMi0yMS4zIDAtNDMgNS41LTU4LjcgMjQuMmwwLTgwLjYtMzIuMSAwIDAgMTY5LjVjMCAxMC4zLS42IDIyLjktMS4xIDMzLjFsMzEuNSAwYy43LTYuMyAxLjEtMTIuOSAxLjEtMTkuNSAxMy42IDE2LjYgMzUuNCAyNC45IDU4LjcgMjQuOSAzNi45IDAgNjQuOS0yMS45IDczLjMtNTQuMi0uNSAyLjgtLjcgNS44LS43IDkgMCAyNC4xIDIxLjEgNDUgNjAuNiA0NSAyNi42IDAgNDUuOC01LjcgNjEuOS0yNS41IDAgNi42IC4zIDEzLjMgMS4xIDIwLjJsMjkuOCAwYy0uNy04LjItMS0xNy41LTEtMjYuOGwwLTY1LjZjMC05LjMtMS43LTE3LjItNC44LTIzLjhsNjEuNSAxMTYuMS0yOC41IDU0LjEgMzUuOSAwIDk5LjItMTk0LjgtMzQgMHpNMjQ0LjIgMzEzLjhjLTI5LjYgMC01MC4yLTIxLjUtNTAuMi01My44IDAtMzIuNCAyMC42LTUzLjggNTAuMi01My44IDI5LjggMCA1MC4yIDIxLjQgNTAuMiA1My44IDAgMzIuMy0yMC40IDUzLjgtNTAuMiA1My44em0yMDAuOS00Ny4zYzAgMzAtMTcuOSA0OC40LTUxLjYgNDguNC0yNS4xIDAtMzUtMTMuNC0zNS0yNS44IDAtMTkuMSAxOC4xLTI0LjQgNDcuMi0yNS4zIDEzLjEtLjUgMjcuNi0uNiAzOS40LS42bDAgMy4zek0zMy4yIDI2OC4xbDEyOC44IDAgMC04LjVjMC01MS43LTMzLjEtNzUuNC03OC40LTc1LjQtNTYuOCAwLTgzIDMwLjgtODMgNzcuNiAwIDQyLjUgMjUuMyA3NCA4Mi41IDc0IDMxLjQgMCA2OC0xMS43IDc0LjQtNDYuMWwtMzMuMSAwYy0xMiAzNS44LTg3LjcgMzYuNy05MS4yLTIxLjZ6bTk1LTIxLjRsLTk0LjQgMGM2LjktNTYuNiA5Mi4xLTU0LjcgOTQuNCAweiJdCiAgICB9OwogICAgZmFDb250YW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29udGFvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNmQiLCAiTTQ1LjQgMzA1YzE0LjQgNjcuMSAyNi40IDEyOSA2OC4yIDE3NUwzNCA0ODBjLTE4LjcgMC0zNC0xNS4yLTM0LTM0TDAgNjZDMCA0Ny4zIDE1LjIgMzIgMzQgMzJsNTcuNyAwYy0xMy44IDEyLjYtMjYuMSAyNy4yLTM2LjkgNDMuNi00NS40IDcwLTI3IDE0Ni44LTkuNCAyMjkuNHpNNDc4IDMybC05MC4yIDBjMjEuNCAyMS40IDM5LjIgNDkuNSA1Mi43IDg0LjFMMzAzLjQgMTQ1LjRjLTE0LjktMjktMzcuOC01My4zLTgyLjYtNDMuOS0yNC42IDUuMy00MSAxOS4zLTQ4LjMgMzQuNi04LjggMTguNy0xMy4yIDM5LjggOC4yIDE0MC4zIDIxLjEgMTAwLjIgMzMuNyAxMTcuNyA0OS41IDEzMS4yIDEyLjkgMTEuMSAzMy40IDE3IDU4LjMgMTEuNyA0NC41LTkuNCA1NS43LTQwLjcgNTcuNC03My4ybDEzNy40LTI5LjZjMy4yIDcxLjUtMTguNyAxMjUuMi01Ny40IDE2My42bDUyLjEgMGMxOC43IDAgMzQtMTUuMiAzNC0zNEw1MTIgNjZjMC0xOC44LTE1LjItMzQtMzQtMzR6Il0KICAgIH07CiAgICBmYUVsbG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWxsbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWYxIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM5OS44IDI5My4yQzM4My4zIDM1OC41IDMyMy44IDQwNC44IDI1NiA0MDQuOFMxMjguNyAzNTguNSAxMTIuMiAyOTMuMmMtMS42LTcuNCAyLjUtMTUuNyA5LjktMTcuNHMxNS43IDIuNSAxNy40IDkuOWMxNCA1Mi45IDYyIDkwLjEgMTE2LjYgOTAuMXMxMDIuNS0zNy4yIDExNi42LTkwLjFjMS43LTcuNCA5LjktMTIuNCAxNy40LTkuOSA3LjQgMS43IDEyLjQgOS45IDkuOSAxNy40eiJdCiAgICB9OwogICAgZmFTaXN0cml4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpc3RyaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlZSIsICJNNDQ4IDQ0OUwzMDEuMiAzMDAuMmMyMC0yNy45IDMxLjktNjIuMiAzMS45LTk5LjIgMC05My4xLTc0LjctMTY4LjktMTY2LjUtMTY4LjktOTEuOS0uMS0xNjYuNiA3NS43LTE2Ni42IDE2OC44Uzc0LjcgMzY5LjggMTY2LjUgMzY5LjhjMzkuOCAwIDc2LjMtMTQuMiAxMDUtMzcuOUw0MTcuNSA0ODAgNDQ4IDQ0OXpNMTY2LjUgMzMwLjhjLTcwLjYgMC0xMjguMS01OC4zLTEyOC4xLTEyOS45Uzk1LjkgNzEgMTY2LjUgNzEgMjk0LjYgMTI5LjMgMjk0LjYgMjAwLjkgMjM3LjIgMzMwLjggMTY2LjUgMzMwLjh6Il0KICAgIH07CiAgICBmYVBlcmlzY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJpc2NvcGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNkYSIsICJNMzcwIDYzLjZjLTM4LjYtNDEtODkuNS02My42LTE0My40LTYzLjYtMTE0LjcgMC0yMDguMSA5Ni4yLTIwOC4xIDIxNC40IDAgNzUuMSA1Ny44IDE1OS44IDgyLjcgMTkyLjcgMzYuNiA0OC40IDkxLjQgMTA0LjkgMTI1LjQgMTA0LjkgNDEuNiAwIDExMi45LTk0LjIgMTIwLjktMTA1IDI0LjYtMzMuMSA4Mi0xMTguMyA4Mi0xOTIuNiAwLTU2LjUtMjEuMS0xMTAuMS01OS41LTE1MC44ek0yMjYuNiA0OTMuOWMtNDIuNSAwLTE5MC0xNjcuMy0xOTAtMjc5LjQgMC0xMDcuNCA4My45LTE5Ni4zIDE5MC0xOTYuMyAxMDAuOCAwIDE4NC43IDg5IDE4NC43IDE5Ni4zIC4xIDExMi4xLTE0Ny40IDI3OS40LTE4NC43IDI3OS40ek0zMzggMjA2LjhjMCA1OS4xLTUxLjEgMTA5LjctMTEwLjggMTA5LjctMTAwLjYgMC0xNTAuNy0xMDguMi05Mi45LTE4MS44bDAgLjRjMCAyNC41IDIwLjEgNDQuNCA0NC44IDQ0LjRzNDQuOC0xOS45IDQ0LjgtNDQuNGMwLTE4LjItMTEuMS0zMy44LTI2LjktNDAuNyA3Ni42LTE5LjIgMTQxIDM5LjMgMTQxIDExMi40eiJdCiAgICB9OwogICAgZmFFeHBlZGl0ZWRzc2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZXhwZWRpdGVkc3NsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyM2UiLCAiTTI1NiA0My40YTIxMi42IDIxMi42IDAgMSAwIDAgNDI1LjIgMjEyLjYgMjEyLjYgMCAxIDAgMC00MjUuMnpNMTU4LjYgMTc2LjNjMC01My43IDQzLjctOTcuNCA5Ny40LTk3LjRzOTcuNCA0My43IDk3LjQgOTcuNGwwIDI2LjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNmMwLTgyLjEtMTI0LTgyLjEtMTI0IDBsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjYgLjIgMHpNMzk3LjcgMzgwYzAgOS43LTggMTcuNy0xNy43IDE3LjdsLTI0OCAwYy05LjcgMC0xNy43LTgtMTcuNy0xNy43bDAtMTQxLjdjMC05LjcgOC0xNy43IDE3LjctMTcuN2wyNDggMGM5LjcgMCAxNy43IDggMTcuNyAxNy43bDAgMTQxLjd6bS0yNDgtMTM3LjNsMCAxMzIuOWMwIDIuNS0xLjkgNC40LTQuNCA0LjRsLTguOSAwYy0yLjUgMC00LjQtMS45LTQuNC00LjRsMC0xMzIuOWMwLTIuNSAxLjktNC40IDQuNC00LjRsOC45IDBjMi41IDAgNC40IDEuOSA0LjQgNC40em0xNDEuNyA0OC43YzAgMTMtNy4yIDI0LjQtMTcuNyAzMC40bDAgMzEuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0zMS42Yy0xMC41LTYuMS0xNy43LTE3LjQtMTcuNy0zMC40IDAtMTkuNyAxNS44LTM1LjQgMzUuNC0zNS40czM1LjUgMTUuOCAzNS41IDM1LjR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCAxNy43YTIzMC4zIDIzMC4zIDAgMSAxIDAgNDYwLjYgMjMwLjMgMjMwLjMgMCAxIDEgMC00NjAuNnoiXQogICAgfTsKICAgIGZhTmFwc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuYXBzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDIiLCAiTTMwNi4zIDM3My42Yy0xNC4yIDEzLjYtMzEuMyAyNC4xLTUwLjQgMzAuNS0xOS02LjQtMzYuMi0xNi45LTUwLjMtMzAuNWwxMDAuNyAwem00NC0xOTkuNmMyMC0xNi45IDQzLjYtMjkuMiA2OS42LTM2LjJsMCAxNjEuMmMwIDIxOS40LTMyOCAyMTcuNi0zMjggLjNsMC0xNjEuNmMyNS45IDYuOSA0OS42IDE5LjYgNjkuNSAzNi40IDU2LjgtNDAgMTMyLjUtMzkuOSAxODguOS0uMXpNMTQxLjUgMTE1LjVjNjQuNC02MCAxNjQuMy02MC4xIDIyOC45LS4yLTcuMSAzLjUtMTMuOSA3LjMtMjAuNiAxMS41LTU4LjctMzAuNS0xMjkuMi0zMC40LTE4Ny45IC4xLTYuMy00LTEzLjktOC4yLTIwLjQtMTEuNHpNNTEuOCA5My4ybDAgNjkuM2MtNTguNCAzNi41LTU4LjQgMTIxLjEgLjEgMTU4LjMgMjYuNCAyNDUuMSAzODEuNyAyNDAuMyA0MDcuNiAxLjVsLjMtMS43YzU4LjctMzYuMyA1OC45LTEyMS43IC4yLTE1OC4ybDAtNjkuMmMtMTcuMyAuNS0zNCAzLTUwLjEgNy40LTgyLTkxLjUtMjI1LjUtOTEuNS0zMDcuNSAuMS0xNi4zLTQuNC0zMy4xLTctNTAuNi03LjV6TTI2Ny4yIDM1MnMzNi0uMyA2MS4zLTEuNWMxMC4yLS41IDIxLjEtNCAyNS41LTYuNSAyNi4zLTE1LjEgMjUuNC0zOS4yIDI2LjItNDcuNC03OS41LS42LTk5LjktMy45LTExMyA1NS40ek0xMzEuNyAyOTYuN2MuOCA4LjItLjEgMzIuMyAyNi4yIDQ3LjQgNC40IDIuNSAxNS4yIDYgMjUuNSA2LjUgMjUuMyAxLjEgNjEuMyAxLjUgNjEuMyAxLjUtMTMuMi01OS40LTMzLjctNTYuMS0xMTMtNTUuNHpNMzAwLjggNDIwLjFjLTMuMi01LjMtNi45LTcuMy02LjktNy4zLTI0LjggNy4zLTUyLjIgNi45LTc1LjkgMCAwIDAtMi45IDEuNS02LjQgNi42LTIuOCA0LjEtMy43IDkuNi0zLjcgOS42IDI5LjEgMTcuNiA2Ny4xIDE3LjYgOTYuMiAwLS4xLS4xLS4zLTQtMy4zLTguOXoiXQogICAgfTsKICAgIGZhRGVsaWNpb3VzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlbGljaW91cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE1IiwgIk00NDYuNiA2OGMtLjQtMS41LS45LTMtMS40LTQuNS0uOS0yLjUtMi00LjgtMy4zLTcuMS0xLjQtMi40LTMtNC44LTQuNy02LjktMi4xLTIuNS00LjQtNC44LTYuOS02LjgtMS4xLS45LTIuMi0xLjctMy4zLTIuNS0xLjMtLjktMi42LTEuNy00LTIuNC0xLjgtMS0zLjYtMS44LTUuNS0yLjUtMS43LS43LTMuNS0xLjMtNS40LTEuNy0zLjgtMS03LjktMS41LTEyLTEuNWwtMzUyIDBDMjEuNiAzMiAuMSA1My41IC4xIDgwbDAgMzUyYzAgNC4xIC41IDguMiAxLjUgMTIgMiA3LjcgNS44IDE0LjYgMTEgMjAuMyAxIDEuMSAyLjEgMi4yIDMuMyAzLjMgNS43IDUuMiAxMi42IDkgMjAuMyAxMSAzLjggMSA3LjkgMS41IDEyIDEuNWwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1Mi4xYy0uMS00LjEtLjYtOC4yLTEuNi0xMnpNNDE2LjEgNDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC0xOTItMTkyIDAgMC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDE3NiAwIDAgMTkyIDE5MiAwIDAgMTc2eiJdCiAgICB9OwogICAgZmFHdWlsZGVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImd1aWxkZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3ZSIsICJNNDQzLjkgNjRMNSA2NGMwIDEwMy4zIDIyLjIgMTgwLjEgNDMuNCAyMjIuNCA2NC4xIDEyNy44IDE3NiAxNjEuNiAxNzcuMyAxNjEuNiA1NS43LTIwLjUgMTA0LjUtNTYuMyAxNDAuNi0xMDMuNSAyNS45LTMzLjkgNTMuMS04Ny4yIDY1LjktMTQ1LjhsLTI1OS45IDBjNC4xIDM2LjQgMjIuMiA2Ny45IDQ1LjEgODYuOWw4OC42IDBjLTE3IDI4LjItNDguMiA1NC40LTgwLjUgNjkuNS0zMS4yLTEzLjMtNjkuMS00Ni41LTk2LjUtOTguNC0yNi43LTUzLjgtMjcuMS0xMDUuOS0yNy4xLTEwNS45bDMzNi4xIDBjNC0yOC44IDUuOS01Ny45IDUuOS04Ni45eiJdCiAgICB9OwogICAgZmFYYm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInhib3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxMiIsICJNMzY5LjkgMzE4LjJjNDQuMyA1NC4zIDY0LjcgOTguOCA1NC40IDExOC43LTcuOSAxNS4xLTU2LjcgNDQuNi05Mi42IDU1LjktMjkuNiA5LjMtNjguNCAxMy4zLTEwMC40IDEwLjItMzguMi0zLjctNzYuOS0xNy40LTExMC4xLTM5LTI3LjktMTguMi0zNC4yLTI1LjctMzQuMi00MC42IDAtMjkuOSAzMi45LTgyLjMgODkuMi0xNDIuMSAzMi0zMy45IDc2LjUtNzMuNyA4MS40LTcyLjYgOS40IDIuMSA4NC4zIDc1LjEgMTEyLjMgMTA5LjV6TTE4OC42IDE0My44Yy0yOS43LTI2LjktNTguMS01My45LTg2LjQtNjMuNC0xNS4yLTUuMS0xNi4zLTQuOC0yOC43IDguMS0yOS4yIDMwLjQtNTMuNSA3OS43LTYwLjMgMTIyLjQtNS40IDM0LjItNi4xIDQzLjgtNC4yIDYwLjUgNS42IDUwLjUgMTcuMyA4NS40IDQwLjUgMTIwLjkgOS41IDE0LjYgMTIuMSAxNy4zIDkuMyA5LjktNC4yLTExLS4zLTM3LjUgOS41LTY0IDE0LjMtMzkgNTMuOS0xMTIuOSAxMjAuMy0xOTQuNHptMzExLjYgNjMuNWMtMTYuOS04MC02Ny41LTEzMC4zLTc0LjYtMTMwLjMtNy4zIDAtMjQuMiA2LjUtMzYgMTMuOS0yMy4zIDE0LjUtNDEgMzEuNC02NC4zIDUyLjggNDIuNCA1My4zIDEwMi4yIDEzOS40IDEyMi45IDIwMi4zIDYuOCAyMC43IDkuNyA0MS4xIDcuNCA1Mi4zLTEuNyA4LjUtMS43IDguNSAxLjQgNC42IDYuMS03LjcgMTkuOS0zMS4zIDI1LjQtNDMuNSA3LjQtMTYuMiAxNS00MC4yIDE4LjYtNTguNyA0LjMtMjIuNSAzLjktNzAuOC0uOC05My40ek0xNDEuMyA0M2M0Ny43LTIuNSAxMDkuNyAzNC41IDExNC4zIDM1LjQgLjcgLjEgMTAuNC00LjIgMjEuNi05LjcgNjMuOS0zMS4xIDk0LTI1LjggMTA3LjQtMjUuMi02My45LTM5LjMtMTUyLjctNTAtMjMzLjktMTEuNy0yMy40IDExLjEtMjQgMTEuOS05LjQgMTEuMnoiXQogICAgfTsKICAgIGZhVW50YXBwZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bnRhcHBkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MDUiLCAiTTQwMS41IDQ5LjlDMzIxLjcgMjEwIDMxNi45IDIwMi40IDMxMy42IDIyMy4xbC01LjIgMzIuOGMtMS45IDEyLTYuNiAyMy41LTEzLjcgMzMuNEwxNDUuOCA0OTcuMWMtNy42IDEwLjYtMjAuNCAxNi4yLTMzLjQgMTQuNi00MC4zLTUtNzcuOC0zMi4yLTk1LjMtNjguNS01LjctMTEuOC00LjUtMjUuOCAzLjEtMzYuNEwxNjkuMSAxOTguOWM3LjEtOS45IDE2LjQtMTggMjcuMi0yMy43bDI5LjMtMTUuNWMxOC41LTkuOCA5LjctMTEuOSAxMzUuNi0xMzguOSAxLTQuOCAxLTcuMyAzLjYtOCAzLS43IDYuNi0xIDYuMy00LjZsLS40LTQuNmMtLjItMS45IDEuMy0zLjYgMy4yLTMuNiA0LjUtLjEgMTMuMiAxLjIgMjUuNiAxMCAxMi4zIDguOSAxNi40IDE2LjggMTcuNyAyMS4xIC42IDEuOC0uNiAzLjctMi40IDQuMmwtNC41IDEuMWMtMy40IC45LTIuNSA0LjQtMi4zIDcuNCAuMSAyLjgtMi4zIDMuNi02LjUgNi4xek0yMzAuMyAzNi40YzMuNCAuOSAyLjUgNC40IDIuMyA3LjQtLjIgMi43IDIuMSAzLjUgNi40IDYgNy45IDE1LjkgMTUuMyAzMC41IDIyLjIgNDQgLjcgMS4zIDIuMyAxLjUgMy4zIC41IDExLjItMTIgMjQuNi0yNi4yIDQwLjUtNDIuNiAxLjMtMS40IDEuNC0zLjUgLjEtNC45LTgtOC4yLTE2LjUtMTYuOS0yNS42LTI2LjEtMS00LjctMS03LjMtMy42LTgtMy0uOC02LjYtMS02LjMtNC42IC4zLTMuMyAxLjQtOC4xLTIuOC04LjItNC41LS4xLTEzLjIgMS4xLTI1LjYgMTAtMTIuMyA4LjktMTYuNCAxNi44LTE3LjcgMjEuMS0xLjQgNC4yIDMuNiA0LjYgNi44IDUuNHpNNjIwLjIgNDA2LjdMNDcxLjQgMTk4LjhjLTEzLjItMTguNS0yNi42LTIzLjQtNTYuNC0zOS4xLTExLjItNS45LTE0LjItMTAuOS0zMC41LTI4LjktMS0xLjEtMi45LS45LTMuNiAuNS00Ni4zIDg4LjgtNDcuMSA4Mi44LTQ5IDk0LjgtMS43IDEwLjctMS4zIDIwIC4zIDI5LjggMS45IDEyIDYuNiAyMy41IDEzLjcgMzMuNEw0OTQuOCA0OTcuMmM3LjYgMTAuNiAyMC4yIDE2LjIgMzMuMSAxNC43IDQwLjMtNC45IDc4LTMyIDk1LjctNjguNiA1LjQtMTEuOSA0LjMtMjUuOS0zLjQtMzYuNnoiXQogICAgfTsKICAgIGZhR29vZ2xlUGx1c0cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsdXMtZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMGQ1IiwgIk0zODYuMyAyMjguNWMxLjggOS43IDMuMSAxOS40IDMuMSAzMiAwIDEwOS44LTczLjYgMTg3LjUtMTg0LjQgMTg3LjUtMTA2LjEgMC0xOTItODUuOS0xOTItMTkyUzk4LjkgNjQgMjA1IDY0YzUxLjkgMCA5NS4xIDE4LjkgMTI4LjYgNTAuM2wtNTIuMSA1MGMtMTQuMS0xMy42LTM5LTI5LjYtNzYuNS0yOS42LTY1LjUgMC0xMTguOSA1NC4yLTExOC45IDEyMS4zUzEzOS41IDM3Ny4zIDIwNSAzNzcuM2M3NiAwIDEwNC41LTU0LjcgMTA5LTgyLjhsLTEwOSAwIDAtNjYgMTgxLjMgMCAwIDB6bTE4NS40IDYuNGwwLTU1LjctNTYgMCAwIDU1LjctNTUuNyAwIDAgNTYgNTUuNyAwIDAgNTUuNyA1NiAwIDAtNTUuNyA1NS43IDAgMC01Ni01NS43IDB6Il0KICAgIH07CiAgICBmYUdpdGh1YkFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRodWItYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMTMiLCAiTTIwMi4xIDMyOC43YzAgMjAuOS0xMC45IDU1LjEtMzYuNyA1NS4xcy0zNi43LTM0LjItMzYuNy01NS4xIDEwLjktNTUuMSAzNi43LTU1LjEgMzYuNyAzNC4yIDM2LjcgNTUuMXpNNDk2IDI3OC4yYzAgMzEuOS0zLjIgNjUuNy0xNy41IDk1LTM3LjkgNzYuNi0xNDIuMSA3NC44LTIxNi43IDc0LjgtNzUuOCAwLTE4Ni4yIDIuNy0yMjUuNi03NC44LTE0LjYtMjktMjAuMi02My4xLTIwLjItOTUgMC00MS45IDEzLjktODEuNSA0MS41LTExMy42LTUuMi0xNS44LTcuNy0zMi40LTcuNy00OC44IDAtMjEuNSA0LjktMzIuMyAxNC42LTUxLjggNDUuMyAwIDc0LjMgOSAxMDguOCAzNiAyOS02LjkgNTguOC0xMCA4OC43LTEwIDI3IDAgNTQuMiAyLjkgODAuNCA5LjIgMzQtMjYuNyA2My0zNS4yIDEwNy44LTM1LjIgOS44IDE5LjUgMTQuNiAzMC4zIDE0LjYgNTEuOCAwIDE2LjQtMi42IDMyLjctNy43IDQ4LjIgMjcuNSAzMi40IDM5IDcyLjMgMzkgMTE0LjJ6bS02NC4zIDUwLjVjMC00My45LTI2LjctODIuNi03My41LTgyLjYtMTguOSAwLTM3IDMuNC01NiA2LTE0LjkgMi4zLTI5LjggMy4yLTQ1LjEgMy4yLTE1LjIgMC0zMC4xLS45LTQ1LjEtMy4yLTE4LjctMi42LTM3LTYtNTYtNi00Ni44IDAtNzMuNSAzOC43LTczLjUgODIuNiAwIDg3LjggODAuNCAxMDEuMyAxNTAuNCAxMDEuM2w0OC4yIDBjNzAuMyAwIDE1MC42LTEzLjQgMTUwLjYtMTAxLjN6bS04Mi42LTU1LjFjLTI1LjggMC0zNi43IDM0LjItMzYuNyA1NS4xczEwLjkgNTUuMSAzNi43IDU1LjEgMzYuNy0zNC4yIDM2LjctNTUuMS0xMC45LTU1LjEtMzYuNy01NS4xeiJdCiAgICB9OwogICAgZmFHZXRQb2NrZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2V0LXBvY2tldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjY1IiwgIk00MDcuNiA2NGwtMzY3IDBDMTguNSA2NCAwIDgyLjUgMCAxMDQuNkwwIDIzOS44QzAgMzY0LjUgOTkuNyA0NjQgMjI0LjIgNDY0IDM0OC4yIDQ2NCA0NDggMzY0LjUgNDQ4IDIzOS44bDAtMTM1LjJDNDQ4IDgyLjIgNDMwLjMgNjQgNDA3LjYgNjR6bS0xNjIgMjY4LjVjLTEyLjQgMTEuOC0zMS40IDExLjEtNDIuNCAwLTExMy43LTEwOC45LTExNC45LTEwNS4xLTExNC45LTEyMy4yIDAtMTYuOSAxMy44LTMwLjcgMzAuNy0zMC43IDE3IDAgMTYuMSAzLjggMTA1LjIgODkuMyA5MC42LTg2LjkgODguNi04OS4zIDEwNS41LTg5LjNzMzAuNyAxMy44IDMwLjcgMzAuN2MwIDE3LjgtMi45IDE1LjctMTE0LjggMTIzLjJ6Il0KICAgIH07CiAgICBmYUdsaWRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdsaWRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTUiLCAiTTI1Mi44IDE0OC42YzAgOC44LTEuNiAxNy43LTMuNCAyNi40LTUuOCAyNy44LTExLjYgNTUuOC0xNy4zIDgzLjYtMS40IDYuMy04LjMgNC45LTEzLjcgNC45LTIzLjggMC0zMC41LTI2LTMwLjUtNDUuNSAwLTI5LjMgMTEuMi02OC4xIDM4LjUtODMuMSA0LjMtMi41IDkuMi00LjIgMTQuMS00LjIgMTEuNCAwIDEyLjMgOC4zIDEyLjMgMTcuOXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzg0IDI2N2MwLTUuMS0yMC44LTM3LjctMjUuNS0zOS41LTIuMi0uOS03LjItMi4zLTkuNi0yLjMtMjMuMSAwLTM4LjcgMTAuNS01OC4yIDIxLjVsLS41LS41YzQuMy0yOS40IDE0LjYtNTcuMiAxNC42LTg3LjQgMC00NC42LTIzLjgtNjIuNy02Ny41LTYyLjctNzEuNyAwLTEwOCA3MC44LTEwOCAxMjMuNSAwIDU0LjcgMzIgODUgODYuMyA4NSA3LjUgMCA2LjktLjYgNi45IDIuMy0xMC41IDgwLjMtNTYuNSA4Mi45LTU2LjUgNTguOSAwLTI0LjQgMjgtMzYuNSAyOC4zLTM4LS4yLTcuNi0yOS4zLTE3LjItMzYuNy0xNy4yLTIxLjEgMC0zMi43IDMzLTMyLjcgNTAuNiAwIDMyLjMgMjAuNCA1NC43IDUzLjMgNTQuNyA0OC4yIDAgODMuNC00OS43IDk0LjMtOTEuNyA5LjQtMzcuNyA3LTM5LjQgMTIuMy00Mi4xIDIwLTEwLjEgMzUuOC0xNi44IDU4LjQtMTYuOCAxMS4xIDAgMTkgMi4zIDM2LjcgNS4yIDEuOCAuMSA0LjEtMS43IDQuMS0zLjV6Il0KICAgIH07CiAgICBmYUJpdHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYml0eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzdhIiwgIk04Ni41IDY3LjJjOTUuNC04OS4yIDI0Ni4xLTkxLjIgMzQzLjEgMy44IDE0LjMgMTQuMS02LjQgMzcuMS0yMi40IDIxLjUtODQuOC04Mi40LTIxNS44LTgwLjMtMjk4LjktMy4yLTE2LjMgMTUuMS0zNi41LTguMy0yMS44LTIyLjF6bTk4LjkgNDE4LjZjMTkuMyA1LjcgMjkuMy0yMy42IDcuOS0zMC0xMTIuMi0zMy45LTE3NS44LTE0OS43LTE0Ny41LTI2MSA1LTE5LjYtMjQuOS0yOC4xLTMwLjItNy4xLTMyLjEgMTI3LjQgNDEuMSAyNTkuOCAxNjkuOCAyOTguMXptMTQ4LjEtMmMxMjEuOS00MC4yIDE5Mi45LTE2Ni45IDE2NC40LTI5MS00LjUtMTkuNy0zNC45LTEzLjgtMzAgNy45IDI0LjIgMTA3LjctMzcuMSAyMTcuOS0xNDMuMiAyNTMuNC0yMS4yIDctMTAuNCAzNiA4LjggMjkuN3ptLTYyLjktNzlsLjItNzEuOGMwLTguMi02LjYtMTQuOC0xNC44LTE0LjhzLTE0LjggNi43LTE0LjggMTQuOGwtLjIgNzEuOGMwIDguMiA2LjYgMTQuOCAxNC44IDE0LjhzMTQuOC02LjYgMTQuOC0xNC44em03MS0yNjljMi4xIDkwLjkgNC43IDEzMS45LTg1LjUgMTMyLjUtOTIuNS0uNy04Ni45LTQ0LjMtODUuNS0xMzIuNSAwLTIxLjgtMzIuNS0xOS42LTMyLjUgMGwwIDcxLjZjMCA2OS4zIDYwLjcgOTAuOSAxMTggOTAuMSA1Ny4zIC44IDExOC0yMC44IDExOC05MC4xbDAtNzEuNmMwLTE5LjYtMzIuNS0yMS44LTMyLjUgMHoiXQogICAgfTsKICAgIGZhV3BleHBsb3JlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGV4cGxvcmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZGUiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTQ4MCAwYTIyNCAyMjQgMCAxIDAgLTQ0OCAwIDIyNCAyMjQgMCAxIDAgNDQ4IDB6TTE2MC45IDEyNC42bDg2LjkgMzcuMS0zNy4xIDg2LjktODYuOS0zNy4xIDM3LjEtODYuOXptMTEwIDE2OS4xbDQ2LjYgOTQtMTQuNiAwLTUwLTEwMC00OC45IDEwMC0xNCAwIDUxLjEtMTA2LjktMjIuMy05LjQgNi0xNCA2OC42IDI5LjEtNiAxNC4zLTE2LjUtNy4xek0yNTkuMSAxNzcuNGw2OC42IDI5LjQtMjkuNCA2OC4zLTY4LjMtMjkuMSAyOS4xLTY4LjZ6bTgwLjMgNDIuOWw1NC42IDIzLjEtMjMuNCA1NC4zLTU0LjMtMjMuMSAyMy4xLTU0LjN6Il0KICAgIH07CiAgICBmYU1lZ2Fwb3J0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZ2Fwb3J0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTMiLCAiTTIyMi41IDIwOS42bDAgNjYuMiAzMy41IDMzLjUgMzMuMy0zMy4zIDAtNjYuNC0zMy40LTMzLjQtMzMuNCAzMy40ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQwMS4xIDQyMi40bC0yNi4xIDE5LjItMjYtMTkuMiAwLTY1LjUtMzMuNC0zMy40LTMzLjQgMzMuNCAwIDY1LjUtMjYuMiAxOS4yLTI2LjEtMTkuMiAwLTY1LjUtMzMuNC0zMy40LTMzLjUgMzMuNCAwIDY1LjUtMjYuMSAxOS4yLTI2LjEtMTkuMiAwLTg3IDU5LjUtNTkuNSAwLTg3LjkgNTkuNS01OS41IDAtNzUuNiAyNi4xLTE5LjIgMjYuMSAxOS4yIDAgNzUuNiA1OS41IDU5LjUgMCA4Ny42IDU5LjcgNTkuNyAwIDg3LjEtLjEgMHoiXQogICAgfTsKICAgIGZhTWRiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1kYiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmOGNhIiwgIk0xNy40IDE2MC40bC0xMC40IDE5MS42IDQzLjkgMCA1LjYtNzkuOCAyNy45IDc5LjggNDQuNyAwIDI1LjUtNzcuNCA0LjggNzcuNCA0NS41IDAtMTIuOC0xOTEuNi00NS41IDAtNDAuNyAxMTcuMy00Mi4zLTExNy4zLTQ2LjMgMHptMjgxIDBsLTQ3LjkgMCAwIDE5MS42IDQ3LjkgMHM5NSAuOCA5NC4yLTk1LjhjLS44LTk0LjItOTQuMi05NS44LTk0LjItOTUuOGwwIDB6bS0xLjIgMTQ2LjVsMC0xMDIuMXM0NiA0LjMgNDYuOCA1MC42LTQ2LjggNTEuNS00Ni44IDUxLjVsMCAwem0yMzguMy03NC4yYzcuMi0xMS40IDEwLTI1IDgtMzguMy01LjMtMzUuOC01NS4xLTM0LjMtNTUuMS0zNC4zbC01MS45IDAgMCAxOTEuNiA0NS41IDBzODcgNC44IDg3LTYzLjhjMC00My4xLTMzLjUtNTUuMS0zMy41LTU1LjFsMCAwem0tNTEuOS0zMS45czEzLjYtMS42IDE2IDkuNmMxLjQgNi43LTQgMTItNCAxMmwtMTIgMCAwLTIxLjZ6bS0uMSAxMDkuNWwuMS0yNC45IDAtMTguMiAuMSAwczQxLjYtNC43IDQxLjIgMjIuNGMtLjMgMjUuNy00MS4zIDIwLjctNDEuMyAyMC43bDAgMHoiXQogICAgfTsKICAgIGZhUGFnZTQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFnZTQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkNyIsICJNMjU2IDUwNEMxMTkgNTA0IDggMzkzIDggMjU2UzExOSA4IDI1NiA4YzIwLjkgMCA0MS4zIDIuNiA2MC43IDcuNUw1MC4zIDM5MiAyNTYgMzkyIDI1NiA1MDR6bTAtMTQzLjZsMC0yMTMuNi0xNDkuNCAyMTMuNiAxNDkuNCAwek0zNTIgMzkybDAgOTIuN2M0NS43LTE5LjIgODQuNS01MS43IDExMS40LTkyLjdMMzUyIDM5MnptNTcuNC0xMzguMmwtMjEuMiA4LjQgMjEuMiA4LjMgMC0xNi43em0tMjAuMyA1NC41Yy02LjcgMC04IDYuMy04IDEyLjlsMCA3LjcgMTYuMiAwIDAtMTBjMC01LjktMi4zLTEwLjYtOC4yLTEwLjZ6TTUwNCAyNTZjMCAzNy4zLTguMiA3Mi43LTIzIDEwNC40bC0xMjkgMCAwLTMzMy4xQzQ0MS4zIDY0LjggNTA0IDE1My4xIDUwNCAyNTZ6TTM2OC40IDE0My42bDY4LjIgMCAwLTQ3LjYtMTMuOSAwIDAgMzIuNi0xMy45IDAgMC0yOS42LTEzLjkgMCAwIDI5LjYtMTIuNyAwIDAtMzIuNi0xMy45IDAgMCA0Ny42IC4xIDB6bTY4LjEgMTg1LjNsLTI2LjUgMCAwLTExYzAtMTUuNC01LjYtMjUuMi0yMC45LTI1LjItMTUuNCAwLTIwLjcgMTAuNi0yMC43IDI1LjlsMCAyNS4zIDY4LjIgMCAwLTE1LS4xIDB6bTAtMTAzbC02OC4yIDI5LjcgMCAxMi40IDY4LjIgMjkuNSAwLTE2LjYtMTQuNC01LjcgMC0yNi41IDE0LjQtNS45IDAtMTYuOXptLTQuOC02OC41bC0zNS42IDAgMCAyNi42IDEzLjkgMCAwLTEyLjIgMTEgMGM4LjYgMTUuOCAxLjMgMzUuMy0xOC42IDM1LjMtMjIuNSAwLTI4LjMtMjUuMy0xNS41LTM3LjdsLTExLjYtMTAuNmMtMTYuMiAxNy41LTEyLjIgNjMuOSAyNy4xIDYzLjkgMzQgMCA0NC43LTM1LjkgMjkuMy02NS4zeiJdCiAgICB9OwogICAgZmFUaGVSZWRZZXRpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZS1yZWQteWV0aSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjlkIiwgIk00ODguNyAyNDEuN2wyMC43IDcuMWMtOS42LTIzLjktMjMuOS0zNy0zMS43LTQ0LjhsNy4xLTE4LjJjLjIgMCAxMi4zLTI3LjgtMi41LTMwLjctLjYtMTEuMy02LjYtMjctMTguNC0yNy03LjYtMTAuNi0xNy43LTEyLjMtMzAuNy01LjktOS4xIDQuNC0xNy42IDEwLTI1LjMgMTYuNS01LjMtNi40LTMgLjQtMy0yOS44LTM3LjEtMjQuMy00NS40LTExLjctNzQuOCAzbC41IC41Yy0yMi03LjctNDUuMS0xMi4yLTY4LjQtMTMuMy01LjUtOC43LTE4LjYtMTkuMS0yNS4xLTI1LjFsMjQuOCA3LjFjLTUuNS01LjUtMjYuOC0xMi45LTM0LjItMTUuMiAxOC4yLTQuMSAyOS44LTIwLjggNDIuNS0zMy0zNC45LTEwLjEtNjcuOS01LjktOTcuOSAxMS44bDEyLTQ0LjItMS44LS41Yy0zMS42IDI0LjItMzMgNDEuOS0zMy43IDQ1LjUtLjktMi40LTYuMy0xOS42LTE1LjItMjctMy4zIDguMS0zLjUgMTcuMS0uNSAyNS4zIDMgOC40IDUuOSAxNC44IDguNCAxOC45LTE2LTMuMy0yOC4zLTQuOS00OS4yIDBsLTMuNyAwIDMzIDE0LjNjLTIwLjIgMTguOS0zNi4xIDQxLjktNDYuNyA2Ny40bC0xLjcgOC40IDEuNyAxLjcgNy42LTQuN2MtMy4zIDExLjYtNS4zIDE5LjQtNi42IDI1LjgtMTAuOSAxMi4yLTIwLjIgMjUuOC0yNy44IDQwLjMtMTUgMS0zMS44IDEwLjgtNDAuMyAxNC4zbDMgMy40IDI4LjggMWMtLjUgMS0uNyAyLjItMS4yIDMuMi03LjMgNi40LTM5LjggMzcuNy0zMyA4MC43bDIwLjItMjIuNGMuNSAxLjcgLjcgMy40IDEuMiA1LjIgMCAyNS41IC40IDg5LjYgNjQuOSAxNTAuNSA0My42IDQwIDk2IDYwLjIgMTU3LjUgNjAuMiAxMjEuNyAwIDIyMy04Ny4zIDIyMy0yMTEuNSA2LjgtOS43LTEuMiAzIDE2LjctMjUuMWwxMyAxNC4zIDIuNS0uNWMtMS44LTExLjctNC44LTIzLjEtOC45LTM0LjItMS41LTQuOC0zLjgtOS4zLTYuOC0xMy4zbDAgMHpNMzk4LjUgMTExLjJsLS41IDIxLjljNS41IDE4LjEgMTYuOSAxNy4yIDIyLjQgMTcuMmwtMy40LTQuNyAyMi40LTUuNGMtOSAuNS0xOCAuNS0yNyAwIDEyLjgtMi4xIDMzLjMtMjkgNDMtMTEuMyAzLjQgNy42IDYuNCAxNy4yIDkuMyAyNy44bDEuNy01LjljLTEuMy01LTEuOC0xMC4xLTEuNy0xNS4yIDUuNCAuNSA4LjggMy40IDkuMyAxMC4xIC41IDYuNCAxLjcgMTQuOCAzLjQgMjUuM2w0LjctMTEuM2M0LjYgMCA0LjUtMy42LTIuNSAyMC43LTIwLjktOC43LTM1LjEtOC40LTQ2LjUtOC40bDE4LjItMTZjLTI1LjMgOC4yLTMzIDEwLjgtNTQuOCAyMC45LTEuMS01LjQtNS0xMy41LTE2LTE5LjktMy4yIDMuOC0yLjggLjktLjcgMTQuOGwtMi41IDBjLTEuMi04LjItNC4xLTE2LTguNC0yMy4xbDQuMi0zLjRjOC40LTcuMSAxMS44LTE0LjMgMTAuNi0yMS45LS41LTYuNC01LjQtMTMuNS0xMy41LTIwLjcgNS42LTMuNCAxNS4yLS40IDI4LjMgOC41em0tMzkuNi0xMC4xYzIuNyAxLjkgMTEuNCA1LjQgMTguOSAxNy4yIDQuMiA4LjQgNCA5LjggMy40IDExLjEtLjUgMi40LS41IDQuMy0zIDcuMS0xLjcgMi41LTUuNCA0LjctMTEuOCA3LjYtNy42LTEzLTE2LjUtMjMuNi0yNy44LTMxLjJsMjAuMy0xMS44em0tMjY3LjQgNDJsMS4yLTEuN2MxLjItMi45IDQuMi03LjYgOS4zLTE1LjJsMi41LTMuNC0xMyAxMi4zIDUuNC00LjctMTAuMSA5LjMtNC4yIDEuMmMxMi4zLTI0LjEgMjMuMS00MS4zIDMyLjUtNTAuMiA5LjMtOS4zIDE2LTE2IDIwLjItMTkuNGwtNi40IDEuMmMtMTEuMy00LjItMTkuNC03LjEtMjQuOC04LjQgMi41LS41IDMuNy0uNSAzLjItLjUgMTAuMyAwIDE3LjUgLjUgMjAuOSAxLjIgNS4yIDEuNyAxMC42IDIuNSAxNiAyLjVsLjUtMS43LTguNC0zNS44IDEzLjUgMjljMi44LTQuNCA0LjgtOS4yIDUuOS0xNC4zIDEuNy02LjQgNS40LTEzIDEwLjEtMTkuNHM3LjYtMTAuNiA5LjMtMTEuM2MtMi42IDguMy00LjcgMTYuOC02LjQgMjUuM2wtMS43IDcuMS0uNSA0LjcgMi41IDIuNWMyMS45LTEzLjUgNDUuNS0xOS40IDcxLjMtMTguOWwyMS4xIC41Yy0xMS44IDEzLjUtMjcuOCAyMS45LTQ4LjUgMjQuOC03LjcgMS40LTE1LjYgMi40LTIzLjQgMi45bC0uMi0uNS0yLjUtMS4yYy00LjgtMS05LjctLjMtMTQgMi0yLjUtLjItNC45LS41LTcuMS0uN2wtMi41IDEuNyAuNSAxLjJjMiAuMiAzLjkgLjUgNi4yIC43bC0yIDMuNCAzLjQtLjUtMTAuNiAxMS4zYy00LjIgMy01LjQgNi40LTQuMiA5LjNsNS40LTMuNCAxLjIgMGM2LjEtOC4yIDE1LjItMTMuNiAyNS4zLTE1LjJsMC0zYzYuNCAuNSAxMyAxIDE5LjQgMS4yIDYuNCAwIDguNCAuNSA1LjQgMS4yIDcuMiA0IDE0LjEgOC42IDIwLjcgMTMuNSAxMy41IDEwLjEgMjMuNiAyMS45IDMwIDM1LjQgOC44IDE4LjIgMTMuNSAzNy4xIDEzLjUgNTYuNiAwIDkuNS0xIDE5LTMgMjguMy0zLjUgMTUuOS04LjkgMzEuMy0xNiA0NmwyLjUgLjVjMTguMi0xOS43IDQxLjktMTYgNDkuMi0xNmwtNi40IDUuOSAyMi40IDE3LjctMS43IDMwLjdjLTUuNC0xMi4zLTE2LjUtMjEuMS0zMy0yNy44IDE2LjUgMTQuOCAyMy42IDIxLjEgMjEuOSAyMC4yLTQuOC0yLjgtMy41LTEuOS0xMC44LTMuNyA0LjEgNC4xIDE3LjUgMTguOCAxOC4yIDIwLjdsLjIgLjItLjIgLjJjMCAxLjggMS42LTEuMi0xNCAyMi45LTc1LjItMTUuMy0xMDYuMy00Mi43LTE0MS4yLTYzLjJsMTEuOCAxLjJjLTExLjgtMTguNS0xNS42LTE3LjctMzguNC0yNi4xbDEwLjYtOC40Yy04LjgtMy0xOC4yLTMtMjguMyAuNWw3LjYtMTAuNi0xLjItMS43Yy0xNC45IDQuMy0xOS44IDkuMi0yMi42IDExLjMtMS4xLTUuNS0yLjgtMTIuNC0xMi4zLTI4LjhsLTEuMiAyNy0xMy4yLTVjMS41LTI1LjIgNS40LTUwLjUgMTMuMi03NC42ek0zNjggNDczLjFjLTQ5LjkgMjUtNTYuMSAyMi40LTU5IDIzLjktMjkuOC0xMS44LTUwLjktMzEuNy02My41LTU4LjhsMzAgMTYuNWMtOS44LTkuMy0xOC4zLTE2LjUtMzguNC00NC4zbDExLjggMjMuMS0xNy43LTcuNmMxNC4yIDIxLjEgMjMuNSA1MS43IDY2LjYgNzMuNS0xMjAuOCAyNC4yLTE5OS03Mi4xLTIwMC45LTc0LjMgMTEuMSA5LjIgMjIuOSAxNy41IDM1LjQgMjQuOCAzLjQgMS43IDcuMSAyLjUgMTAuMSAxLjJsLTE2LTIwLjdjOS4yIDQuMiA5LjUgNC41IDY5LjEgMjktNDIuNS0yMC43LTczLjgtNDAuOC05My4yLTYwLjItLjUgNi40LTEuMiAxMC4xLTEuMiAxMC4xIDguNyA3LjMgMTUuOCAxNi40IDIwLjcgMjYuNi0zOS0xOC45LTU3LjYtNDcuNi03MS4zLTgyLjYgNDkuOSA1NS4xIDExOC45IDM3LjUgMTIwLjUgMzcuMSAzNC44IDE2LjQgNjkuOSAyMy42IDExMy45IDEwLjYgMy4zIDAgMjAuMyAxNyAyNS4zIDM5LjFsNC4yLTMtMi41LTIzLjZjOSA5IDI0LjkgMjIuNiAzNC40IDEzLTE1LjYtNS4zLTIzLjUtOS41LTI5LjUtMzEuNyA0LjYgNC4yIDcuNiA5IDI3LjggMTVsMS4yLTEuMi0xMC41LTE0LjJjMTEuNy00LjgtMy41IDEgMzItMTAuOCA0LjMgMzQuMyA5IDQ5LjIgLjcgODkuNXpNNDgzLjMgMjU4LjdsLTIuNSAuNSAzIDkuM2MtMy41IDUuOS0yMy43IDQ0LjMtNzEuNiA3OS43LTM5LjUgMjkuOC03Ni42IDM5LjEtODAuOSA0MC4zbC03LjYtNy4xLTEuMiAzIDE0LjMgMTYtNy4xLTQuNyAzLjQgNC4yLTEuMiAwLTIxLjktMTMuNSA5LjMgMjYuNi0xOS0yNy45LTEuMiAyLjUgNy42IDI5Yy02LjEtOC4yLTIxLTMyLjYtNTYuOC0zOS42bDMyLjUgMjEuMmMtMzEuMiA0LjctNjMgMi41LTkzLjItNi40LTQuMi0xLjItOC45LTIuNS0xMy41LTQuMmwxLjItMy00NC44LTIyLjQgMjYuMSAyMi40Yy01Ny43IDkuMS0xMTMtMjUuNC0xMjYuNC04My40TDI5LjMgMjg0LjggNyAzMDcuMWMxOS41LTU3LjUgMjUuNi01Ny45IDUxLjQtNzAuMS05LjEtNS4zLTEuNi0zLjMtMzguNC05LjMgMTUuOC01LjggMzMtMTUuNCA3MyA1LjIgMS4yLS43IDIuNC0xLjMgMy43LTEuNyAuNi0zLjIgLjQtLjggMS0xMS44IDMuOSAxMCAzLjYgOC43IDMgOS4zbDEuNyAuNWMxMi43LTYuNSA4LjktNC41IDE3LTguOWwtNS40IDEzLjUgMjIuMy01LjgtOC40IDguNCAyLjUgMi41YzQuNS0xLjggMzAuMyAzLjQgNDAuOCAxNmwtMjMuNi0yLjVjMzkuNCAyMyA1MS41IDU0IDU1LjggNjkuNmwxLjctMS4yYy0yLjgtMjIuMy0xMi40LTMzLjktMTYtNDAuMSA0LjIgNSAzOS4yIDM0LjYgMTEwLjQgNDYtMTEuMy0uNS0yMy4xIDUuNC0zNC45IDE4LjlsNDYuNy0yMC4yLTkuMyAyMS45YzcuNi0xMC4xIDE0LjgtMjMuNiAyMS4yLTM5LjZsMC0uNSAxLjItMy0xLjIgMTZjMTMuNS00MS44IDI1LjMtNzguNSAzNS40LTEwOS43bDEzLjUtMjcuOCAwLTItNS40LTQuMiAxMC4xIDAgNS45IDQuMiAyLjUtMS4yLTMuNC0xNiAxMi4zIDE4LjkgNDEuOC0yMC4yLTE0LjggMTMgLjUgMi45IDE3LjctLjVjMTEuMSAuNCAyMi4xIDEuOCAzMyA0LjJsLTIzLjYgMi41LTEuMiAzIDI2LjYgMjMuMWM5LjkgOS45IDE4LjkgMjAuNiAyNyAzMi0xMS4yLTMuMy0xMC4zLTMuNC0yMS4yLTMuNGwxMi4zIDMyLjUtOC45LTEyLjh6bS02LjEtNzEuM2wtMy45IDEzLTE0LjMtMTEuOCAxOC4yLTEuMnptLTI1NC44IDcuMWMxLjcgMTAuNiA0LjcgMTcuNyA4LjggMjEuOS05LjMgNi42LTI3LjUgMTMuOS00Ni41IDE2bC41IDEuMmM4LjMgMS4zIDE2LjkgLjQgMjQuOC0yLjVsLTcuMSAxM2M0LjItMS43IDEwLjEtNy4xIDE3LjctMTQuOCAxMS45LTUuNSAxMi43LTUuMSAyMC4yLTE2LTEyLjctNi40LTE1LjctMTMuNy0xOC40LTE4Ljh6bTMuNy0xMDIuM2MtNi40LTMuNC0xMC42IDMtMTIuMyAxOC45czIuNSAyOS41IDExLjggMzkuNiAxOC4yIDEwLjYgMjYuMSAzIDMuNC0yMy42LTExLjMtNDcuN2MtMy41LTUuNy04LjQtMTAuNS0xNC4zLTEzLjhsMCAwem0tNC43IDQ2LjNjNS40IDIuMiAxMC41IDEuOSAxMi4zLTEwLjZsMC00LjctMS4yIC41Yy00LjMtMy4xLTIuNS00LjUtMS43LTYuMmwuNS0uNWMtLjktMS4yLTUtOC4xLTEyLjUgNC43LS41LTEzLjUgLjUtMjEuOSAzLTI0LjggMS4yLTIuNSA0LjctMS4yIDExLjMgNC4yIDYuNCA1LjQgMTEuMyAxNiAxNS4yIDMyLjUgNi41IDI4LTE5LjggMjYuMi0yNi45IDQuOXptLTQ1LTUuNWMxLjYgLjMgOS4zLTEuMSA5LjMtMTQuOGwtLjUgMGMtNS40LTEuMS0yLjItNS41LS43LTUuOS0xLjctMy0zLjQtNC4yLTUuNC00LjctOC4xIDAtMTEuNiAxMi43LTguMSAyMS4yIC41IDEuMSAxLjMgMiAyLjIgMi44czIgMS4yIDMuMiAxLjRsMCAwem00MC4xLTUwLjFsLTIuNSAuNSAuNSAzYzkuMS0uNSAxOC4xIDEuNSAyNi4xIDUuOS0yLjUtNS41LTEwLTE0LjMtMjguMy0xNC4zbC41IDIuNSAzLjcgMi40em0tNzEuOCA0OS40YzIxLjcgMTYuOCAxNi41IDIxLjQgNDYuNSAyMy42bC0yLjktNC43YzguNC03LjIgMTMuNy0xNy4zIDE0LjgtMjguMyAxLjctMTYtMS4yLTI5LjUtOC44LTQxLjNsMTMtNy42YzAtLjMgMC0uNi0uMS0uOXMtLjItLjYtLjQtLjhjLTIuMi0uOS00LjYtMS4yLTctLjlzLTQuNiAxLjItNi41IDIuNmMtMTIuNyA2LjctMjggMjAuOS0yOSAyMi40LTEuNyAxLjctMy40IDUuOS01LjQgMTMuNS0xLjkgNy43LTIuOSAxNS42LTIuOSAyMy42LTQuNy04LTEwLjUtNi40LTE5LjktNS45bDcuMSA3LjZjLTE2LjUgMC0yMy4zIDE1LjQtMjMuNiAxNiA2LjggMCA0LjYtNy42IDMwLTEyLjMtNC4zLTYuMy0zLjMtNS00LjktNi42em0xOC43LTE4LjdjMS4yLTcuNiAzLjQtMTMgNi40LTE3LjIgNS40LTYuNCAxMC42LTEwLjEgMTYtMTEuOCA0LjItMS43IDcuMSAxLjIgMTAuMSA5LjMgMi41IDguMiAzLjUgMTYuOCAzIDI1LjMtLjUgOS4zLTMuNCAxNy4yLTguNCAyMy4xLTIuOSAzLjQtNS40IDUuOS02LjQgNy42LTMuOCAuNC03LjYgLjItMTEuMy0uNWwtNy4xLTMuNC01LjQtNi40Yy44LTEwIDEuMy0xOC44IDMuMS0yNnptNDIgNTYuMWMtMzQuOCAxNC40LTM0LjcgMTQtMzYuMSAxNC4zLTIwLjggNC43LTE5LTI0LjQtMTguOS0yNC44bDUuOS0xLjItLjUtMi41Yy0yMC4yLTIuNi0zMSA0LjItMzIuNSA0LjkgLjUgLjUgMyAzLjQgNS45IDkuMyA0LjItNi40IDguOC0xMC4xIDE1LjItMTAuNi0xLjcgMTEuMi0xLjIgMjIuNyAxLjcgMzMuNyAuMSAuNSAyLjYgMTcuNCAyNy41IDI0LjEgMTEuMyAzIDI3IDEuMiA0OC45LTUuNGwtOS4yIC41Yy00LjItMTQuOC02LjQtMjQuOC01LjktMjkuNSAxMS4zLTguOCAyMS45LTExLjMgMzAuNy03LjZsMi41IDAtMTEuOC03LjYtNy4xIC41Yy01LjkgMS4yLTEyLjMgNC4yLTE5LjQgOC40bDMuMS02LjV6Il0KICAgIH07CiAgICBmYUppcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamlyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2IxIiwgIk00OTguNSAyNDEuN2MtNzIuOS03Mi43LTE2OS40LTE2OS45LTI0MS41LTI0MS43LTE2NS41IDE2NC45LTI0Mi41IDI0MS43LTI0Mi41IDI0MS43LTcuOSA3LjktNy45IDIwLjcgMCAyOC43IDEzMi44IDEzMi4zIDYxLjggNjEuNSAyNDIuNSAyNDEuNiAzNzkuNC0zNzggMTUuNy0xNi43IDI0MS41LTI0MS43IDgtNy45IDgtMjAuNyAwLTI4LjZ6TTI1NyAzMzEuN2wtNzYtNzUuNyA3Ni03NS43IDc2IDc1LjctNzYgNzUuN3oiXQogICAgfTsKICAgIGZhRmVkZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmVkZXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5NyIsICJNNTg2IDI4NC41bDUzLjMtNTkuOS02Mi40IDAtMjEuNyAyNC44LTIyLjUtMjQuOC0xMTguNyAwIDAtMTYgNTYuMSAwIDAtNDguMS0xNTEuMiAwIDAgNzUuNS0uNSAwYy05LjYtMTEtMjEuNS0xNC44LTM1LjQtMTQuOC0yOC40IDAtNDkuOCAxOS40LTU3LjMgNDQuOS0xOC01OS40LTk3LjQtNTcuNi0xMjEuOS0xNGwwLTI0LjItNTQuOCAwIDAtMjYuMiA2MCAwIDAtNDEuMS0xMDkgMCAwIDE4NC40IDQ5IDAgMC03Ny41IDQ4LjkgMGMtMS41IDUuNy0yLjMgMTEuOC0yLjMgMTguMiAwIDczLjEgMTAyLjYgOTEuNCAxMzAuMiAyMy43bC00MiAwYy0xNC43IDIwLjktNDUuOCA4LjktNDUuOC0xNC42bDg1LjUgMGMzLjcgMzAuNSAyNy40IDU2LjkgNjAuMSA1Ni45IDE0LjEgMCAyNy02LjkgMzQuOS0xOC42bC41IDAgMCAxMS45IDIxMi4yIDAgMjIuMS0yNSAyMi4zIDI1IDY0LjQgMC01NC02MC41ek0xMzkuMyAyNjcuOWM2LjEtMjYuMyA0MS43LTI1LjYgNDYuNSAwbC00Ni41IDB6bTE1My40IDQ4LjljLTM0LjYgMC0zNC02Mi44IDAtNjIuOCAzMi42IDAgMzQuNSA2Mi44IDAgNjIuOHptMTY3LjggMTkuMWwtOTQuNCAwIDAtMTY2LjUgOTUgMCAwIDMwLjItNTYuMSAwIDAgMzMuOSA1NS41IDAgMCAyOC4xLTU2LjEgMCAwIDQ0LjcgNTYuMSAwIDAgMjkuNnptLTQ1LjktMzkuOGwwLTI0LjQgNTYuMSAwIDAtNDQgNTAuNyA1Ny01MC43IDU3IDAtNDUuNi01Ni4xIDB6bTEzOC42IDEwLjNsLTI2LjEgMjkuNS0zOC4xIDAgNDUuNi01MS4yLTQ1LjYtNTEuMiAzOS43IDAgMjYuNiAyOS4zIDI1LjYtMjkuMyAzOC41IDAtNDUuNCA1MSA0NiA1MS40LTQwLjUgMC0yNi4zLTI5LjV6Il0KICAgIH07CiAgICBmYUV2ZXJub3RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV2ZXJub3RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY4MzkiLCAiTTEyMS4xIDEzMi4yYzEuNiAyMi4zLTE3LjYgMjEuNi0yMS42IDIxLjYtNjguOSAwLTczLjYtMS04My42IDMuMy0uNiAuMi0uNyAwLS40LS40TDEyNC4xIDQ2LjRjLjQtLjQgLjYtLjIgLjQgLjQtNC40IDEwLTMuNCAxNS4xLTMuNCA4NS40em03OSAzMDhjLTE0LjctMzcuMSAxMy03Ni45IDUyLjUtNzYuNiAxNy41IDAgMjIuNiAyMy4yIDcuOSAzMS40LTYuMiAzLjMtMjQuOSAxLjctMjUuMSAxOS4yIDAgMTcuMSAxOS43IDI1IDMxLjIgMjQuOSA2IDAgMTEuOS0xLjIgMTcuNS0zLjVzMTAuNi01LjcgMTQuOC05LjkgNy42LTkuMyA5LjktMTQuOCAzLjUtMTEuNSAzLjUtMTcuNWwwLS4xYzAtMTEuNi03LjgtNDcuMi00Ny41LTU1LjMtNy43LTEuNS02NS02LjMtNjguNC01MC41LTMuNyAxNi45LTE3LjQgNjMuNS00My4xIDY5LjEtOC43IDEuOS02OS43IDcuNi0xMTIuOS0zNi44IDAgMC0xOC42LTE1LjItMjguMi01OC0zLjQtMTUuNy05LjMtMzkuNy0xMS4xLTYyIDAtMTggMTEuMS0zMC40IDI1LjEtMzIuMiA4MSAwIDkwIDIuMyAxMDEtNy44IDkuOC05LjIgNy44LTE1LjUgNy44LTEwMi44IDEtOC4zIDcuOC0zMC44IDUzLjQtMjQuMSA2IC45IDMxLjkgNC4yIDM3LjUgMzAuNkwyOTAgNzQuOGMyMC40IDMuNyA3MC45IDcgODAuNiA1Ny45IDIyLjcgMTIxLjEgOC45IDIzOC41IDcuOCAyMzguNS0xNiAxMTQuNC0xMTEuMSAxMDguOS0xMTEuMSAxMDguOS0xOS0uMi01NC4yLTkuNC02Ny4zLTM5LjhsMCAwek0yODEgMjM1LjRjLTEgMS45LTIuMiA2IC45IDcgMTQuMSA0LjkgMzkuOCA2LjggNDUuOSA1LjUgMy4xLS4yIDMuMS00LjQgMi41LTYuNi0zLjUtMjEuOC00MC44LTI2LjUtNDkuMi01LjlsMCAweiJdCiAgICB9OwogICAgZmFVc2IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXNiIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyODciLCAiTTYzMy41IDI1NmMwIDMuMS0xLjcgNi4xLTQuNSA3LjVMNTM5LjkgMzE3Yy0xLjQgLjgtMi44IDEuNC00LjUgMS40LTEuNCAwLTMuMS0uMy00LjUtMS4xLTIuOC0xLjctNC41LTQuNS00LjUtNy44bDAtMzUuNi0yMzAuNyAwYzI1LjMgMzkuNiA0MC41IDEwNi45IDY5LjYgMTA2LjlsMjYuNyAwIDAtMjYuOGMwLTUgMy45LTguOSA4LjktOC45bDg5LjEgMGM1IDAgOC45IDMuOSA4LjkgOC45bDAgODkuMWMwIDUtMy45IDguOS04LjkgOC45bC04OS4xIDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi43LTI2LjcgMGMtNzUuNCAwLTgxLjEtMTQyLjUtMTI0LjctMTQyLjVsLTEwMC4zIDBjLTguMSAzMC42LTM1LjkgNTMuNS02OSA1My41LTM5LjMtLjEtNzEuMy0zMi4xLTcxLjMtNzEuNHMzMi03MS4zIDcxLjMtNzEuM2MzMy4xIDAgNjEgMjIuOCA2OSA1My41IDM5LjEgMCA0My45IDkuNSA3NC42LTYwLjQgNDAuMS04OS4xIDU4LjEtODIuMSAxMDguOS04Mi4xIDcuNS0yMC45IDI3LTM1LjYgNTAuNC0zNS42IDI5LjUgMCA1My41IDIzLjkgNTMuNSA1My41cy0yMy45IDUzLjUtNTMuNSA1My41Yy0yMy40IDAtNDIuOS0xNC44LTUwLjQtMzUuNmwtMjkuOCAwYy0yOS4xIDAtNDQuMyA2Ny40LTY5LjYgMTA2LjlsMzAyLjEgMCAwLTM1LjZjMC0zLjMgMS43LTYuMSA0LjUtNy44czYuNC0xLjQgOC45IC4zTDYyOSAyNDguOGMyLjggMS4xIDQuNSA0LjEgNC41IDcuMnoiXQogICAgfTsKICAgIGZhQW5ncnljcmVhdGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmdyeWNyZWF0aXZlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNmUiLCAiTTY0MCAyMzguMmwtMy4yIDI4LjItMzQuNSAyLjMtMiAxOC4xIDM0LjUtMi4zLTMuMiAyOC4yLTM0LjQgMi4yLTIuMyAyMC4xIDM0LjQtMi4yLTMgMjYuMS02NC43IDQuMSAxMi43LTExMy4yLTQ3LjMgMTE1LjQtMzEuOSAyLTIzLjgtMTE3LjggMzAuMy0yIDEzLjYgNzkuNCAzMS43LTgyLjQgOTMuMS02LjJ6TTQyNi44IDM3MS41bDI4LjMtMS44IDEyLjktMTIwLjEtMjguNCAxLjktMTIuOCAxMjB6TTE2MiAzODguMWwtMTkuNC0zNi0zLjUgMzcuNC0yOC4yIDEuNyAyLjctMjkuMWMtMTEgMTgtMzIgMzQuMy01Ni45IDM1LjgtMzIuOCAyLTU5LjctMjAuOS01Ni40LTU4LjIgMi42LTI5LjMgMjYuNy02Mi44IDY3LjUtNjUuNCAzNy43LTIuNCA0Ny42IDIzLjIgNTEuMyAyOC44bDIuOC0zMC44IDM4LjktMi41YzIwLjEtMS4zIDM4LjcgMy43IDQyLjUgMjMuN2wyLjYtMjYuNiA2NC44LTQuMi0yLjcgMjcuOS0zNi40IDIuNC0xLjcgMTcuOSAzNi40LTIuMy0yLjcgMjcuOS0zNi40IDIuMy0xLjkgMTkuOSAzNi4zLTIuMy0yLjEgMjAuOCA1NS0xMTcuMiAyMy44LTEuNiAzMi4xIDExMC42IDguOS04NS42LTIyLjMgMS40IDIuOS0yNy45IDc1LTQuOS0zIDI4LTI0LjMgMS42LTkuNyA5MS45LTU4IDMuNy00LjMtMTUuNi0zOS40IDIuNS04IDE2LjMtMTI2LjIgNy43em0tNDQuMy03MC4ybC0yNi40IDEuN2MtNi43LTEyLjQtMTQuNC0xNi42LTI2LjMtMTUuOC0xOSAxLjItMzMuMyAxNy41LTM0LjYgMzMuMy0xLjQgMTYgNy4zIDMyLjUgMjguNyAzMS4yIDEyLjgtLjggMjEuMy04LjYgMjguOS0xOC45bDI3LTEuNyAyLjctMjkuOHptNTYuMS03LjdjMS4yLTEyLjktNy42LTEzLjYtMjYuMS0xMi40TDE0NSAzMjYuM2MxNC4yLS45IDI3LjUtMi4xIDI4LjgtMTYuMXpNMTk0LjkgMzgxbDUuOC02MGMtNSAxMy41LTE0LjcgMjEuMS0yNy45IDI2LjZMMTk0LjkgMzgxem0xMzUuNC00NWwtNy45LTM3LjgtMTUuOCAzOS4zIDIzLjctMS41ek0xNjAuMiAyNjEuNGwtNC4zLTE3LjUtMzkuNiAyLjYtOC4xIDE4LjItMzEuOSAyLjEgNTctMTIxLjkgMjMuOS0xLjYgMzAuNyAxMDIgOS45LTEwNC43IDI3LTEuOCAzNy44IDYzLjYgNi41LTY2LjYgMjguNS0xLjktNCA0MS4yYzcuNC0xMy41IDIyLjktNDQuNyA2My42LTQ3LjUgNDAuNS0yLjggNTIuNCAyOS4zIDUzLjQgMzAuM2wzLjMtMzIgMzkuMy0yLjdjMTIuNy0uOSAyNy44IC4zIDM2LjMgOS43bC00LjQtMTEuOSAzMi4yLTIuMiAxMi45IDQzLjIgMjMtNDUuNyAzMS0yLjItNDMuNiA3OC40LTQuOCA0NC4zLTI4LjQgMS45IDQuOC00NC4zLTE1LjgtNDNjMSAyMi4zLTkuMiA0MC4xLTMyIDQ5LjZsMjUuMiAzOC44LTM2LjQgMi40LTE5LjItMzYuOC00IDM4LjMtMjguNCAxLjkgMy4zLTMxLjVjLTYuNyA5LjMtMTkuNyAzNS40LTU5LjYgMzgtMjYuMiAxLjctNDUuNi0xMC4zLTU1LjQtMzkuMmwtNCA0MC4zLTI1IDEuNi0zNy42LTYzLjMtNi4zIDY2LjItNTYuOCAzLjd6bTI3Ni42LTgyLjFjMTAuMi0uNyAxNy41LTIuMSAyMS42LTQuMyA0LjUtMi40IDctNi40IDcuNi0xMi4xIC42LTUuMy0uNi04LjgtMy40LTEwLjQtMy42LTIuMS0xMC42LTIuOC0yMi45LTJsLTIuOSAyOC44ek0zMjcuNyAyMTRjNS42IDUuOSAxMi43IDguNSAyMS4zIDcuOSA0LjctLjMgOS4xLTEuOCAxMy4zLTQuMSA1LjUtMyAxMC42LTggMTUuMS0xNC4zbC0zNC4yIDIuMyAyLjQtMjMuOSA2My4xLTQuMyAxLjItMTItMzEuMiAyLjFjLTQuMS0zLjctNy44LTYuNi0xMS4xLTguMS00LTEuNy04LjEtMi44LTEyLjItMi41LTggLjUtMTUuMyAzLjYtMjIgOS4yLTcuNyA2LjQtMTIgMTQuNS0xMi45IDI0LjQtMS4xIDkuNiAxLjQgMTcuMyA3LjIgMjMuM3ptLTIwMS4zIDguMmwyMy44LTEuNi04LjMtMzcuNi0xNS41IDM5LjJ6Il0KICAgIH07CiAgICBmYU1penVuaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXp1bmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0xNzYgMzU5LjljLTMxLjQgMTAuNi01OC44IDI3LjMtODAgNDguMkw5NiAxMzZjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDIyMy45ek0yOTYgMzUwYy0xMi45LTItMjYuMi0zLjEtMzkuOC0zLjEtMTMuOCAwLTI3LjIgMS4xLTQwLjIgMy4xbDAtMjE0YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMTR6bTEyMCA1Ny43Yy0yMS4yLTIwLjgtNDguNi0zNy40LTgwLTQ4TDMzNiAxMzZjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDI3MS43eiJdCiAgICB9OwogICAgZmFJdGNoSW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaXRjaC1pbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNhIiwgIk03MS45IDM0LjhDNTAuMiA0Ny43IDcuNCA5Ni44IDcgMTA5LjdsMCAyMS4zYzAgMjcuMSAyNS4zIDUwLjggNDguMiA1MC44IDI3LjYgMCA1MC41LTIyLjggNTAuNS01MCAwIDI3LjEgMjIuMiA1MCA0OS44IDUwczQ5LTIyLjggNDktNTBjMCAyNy4xIDIzLjYgNTAgNTEuMiA1MGwuNSAwYzI3LjYgMCA1MS4yLTIyLjggNTEuMi01MCAwIDI3LjEgMjEuNSA1MCA0OSA1MHM0OS44LTIyLjggNDkuOC01MGMwIDI3LjEgMjMgNTAgNTAuNSA1MCAyMyAwIDQ4LjMtMjMuOCA0OC4zLTUwLjhsMC0yMS4zYy0uNC0xMi45LTQzLjItNjIuMS02NC45LTc1LTY3LjQtMi4zLTExNC4yLTIuNy0xODQtMi43UzkxLjEgMzMuMSA3MS45IDM0Ljh6TTIwNC4yIDE2OS4yYy0yMiAzOC40LTc3LjkgMzguNy05OS44IC4yLTEzLjIgMjMuMS00My4yIDMyLjEtNTYgMjcuNy0zLjkgNDAuMi0xMy43IDIzNy4xIDE3LjcgMjY5LjIgODAgMTguNyAzMDIuMSAxOC4xIDM3OS44IDAgMzEuNi0zMi4zIDIxLjMtMjMyIDE3LjctMjY5LjItMTIuOSA0LjQtNDIuOS00LjYtNTYtMjcuNy0yMiAzOC41LTc3LjggMzguMS05OS44LS4yLTcuMSAxMi41LTIzIDI4LjktNTEuOCAyOC45LTEwLjQgLjMtMjAuOC0yLjItMjkuOS03LjNzLTE2LjctMTIuNi0yMS45LTIxLjZsMCAwem0tNDEuNiA1My44YzE2LjUgMCAzMS4xIDAgNDkuMiAxOS44IDI5LjMtMyA1OC45LTMgODguMiAwIDE4LjItMTkuNyAzMi44LTE5LjcgNDkuMi0xOS43IDUyLjMgMCA2NS4yIDc3LjUgODMuOSAxNDQuNCAxNy4zIDYyLjItNS41IDYzLjctMzQgNjMuNy00Mi4xLTEuNi02NS41LTMyLjItNjUuNS02Mi44LTM5LjMgNi40LTEwMS45IDguOC0xNTUuNiAwIDAgMzAuNi0yMy4zIDYxLjItNjUuNSA2Mi44LTI4LjQtLjEtNTEuMi0xLjYtMzMuOS02My43IDE4LjctNjcgMzEuNi0xNDQuNCA4My45LTE0NC40bDAtLjF6TTI1NiAyNzAuOHMtNDQuNCA0MC44LTUyLjQgNTUuMmwyOS0xLjIgMCAyNS4zYzAgMS41IDIxLjMgLjIgMjMuMyAuMiAxMS42IC41IDIzLjMgMSAyMy4zLS4ybDAtMjUuMyAyOSAxLjJjLTgtMTQuNS01Mi40LTU1LjItNTIuNC01NS4ybC4xIDB6Il0KICAgIH07CiAgICBmYVdpbmRvd3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2luZG93cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTdhIiwgIk0wIDkzLjdsMTgzLjYtMjUuMyAwIDE3Ny40LTE4My42IDAgMC0xNTIuMXpNMCA0MTguM2wxODMuNiAyNS4zIDAtMTc1LjItMTgzLjYgMCAwIDE0OS45em0yMDMuOCAyOGwyNDQuMiAzMy43IDAtMjExLjYtMjQ0LjIgMCAwIDE3Ny45em0wLTM4MC42bDAgMTgwLjEgMjQ0LjIgMCAwLTIxMy44LTI0NC4yIDMzLjd6Il0KICAgIH07CiAgICBmYVN0dW1ibGV1cG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0dW1ibGV1cG9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTQiLCAiTTUwMi45IDI2NmwwIDY5LjdjMCA2Mi4xLTUwLjMgMTEyLjQtMTEyLjQgMTEyLjQtNjEuOCAwLTExMi40LTQ5LjgtMTEyLjQtMTExLjNsMC03MC4yIDM0LjMgMTYgNTEuMS0xNS4yIDAgNzAuNmMwIDE0LjcgMTIgMjYuNSAyNi43IDI2LjVTNDE3IDM1Mi43IDQxNyAzMzhsMC03MiA4NS45IDB6TTI3OC4yIDIwNy44bDM0LjMgMTYgNTEuMS0xNS4yIDAtMzUuNmMwLTYwLjUtNTEuMS0xMDktMTEyLjEtMTA5LTYwLjggMC0xMTIuMSA0OC4yLTExMi4xIDEwOC4ybDAgMTYyLjRjMCAxNC45LTEyIDI2LjctMjYuNyAyNi43Uzg2IDM0OS41IDg2IDMzNC42bDAtNjguNi04NiAwIDAgNjkuN2MwIDYyIDUwLjMgMTEyLjMgMTEyLjQgMTEyLjMgNjEuNiAwIDExMi40LTQ5LjUgMTEyLjQtMTEwLjhsMC0xNjAuM2MwLTE0LjcgMTItMjYuNyAyNi43LTI2LjdzMjYuNyAxMiAyNi43IDI2LjdsMCAzMC45eiJdCiAgICB9OwogICAgZmFHb29nbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTAiLCAiTTUwMCAyNjEuOEM1MDAgNDAzLjMgNDAzLjEgNTA0IDI2MCA1MDQgMTIyLjggNTA0IDEyIDM5My4yIDEyIDI1NlMxMjIuOCA4IDI2MCA4YzY2LjggMCAxMjMgMjQuNSAxNjYuMyA2NC45bC02Ny41IDY0LjljLTg4LjMtODUuMi0yNTIuNS0yMS4yLTI1Mi41IDExOC4yIDAgODYuNSA2OS4xIDE1Ni42IDE1My43IDE1Ni42IDk4LjIgMCAxMzUtNzAuNCAxNDAuOC0xMDYuOWwtMTQwLjggMCAwLTg1LjMgMjM2LjEgMGMyLjMgMTIuNyAzLjkgMjQuOSAzLjkgNDEuNHoiXQogICAgfTsKICAgIGZhRGlzY29yZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNjb3JkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzOTIiLCAiTTQ5Mi41IDY5LjhjLS4yLS4zLS40LS42LS44LS43LTM4LjEtMTcuNS03OC40LTMwLTExOS43LTM3LjEtLjQtLjEtLjggMC0xLjEgLjFzLS42IC40LS44IC44Yy01LjUgOS45LTEwLjUgMjAuMi0xNC45IDMwLjYtNDQuNi02LjgtODkuOS02LjgtMTM0LjQgMC00LjUtMTAuNS05LjUtMjAuNy0xNS4xLTMwLjYtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4yLTEuMS0uMmMtNDEuMyA3LjEtODEuNiAxOS42LTExOS43IDM3LjEtLjMgLjEtLjYgLjQtLjggLjctNzYuMiAxMTMuOC05Ny4xIDIyNC45LTg2LjkgMzM0LjUgMCAuMyAuMSAuNSAuMiAuOHMuMyAuNCAuNSAuNmM0NC40IDMyLjkgOTQgNTggMTQ2LjggNzQuMiAuNCAuMSAuOCAuMSAxLjEgMHMuNy0uNCAuOS0uN2MxMS4zLTE1LjQgMjEuNC0zMS44IDMwLTQ4LjggLjEtLjIgLjItLjUgLjItLjhzMC0uNS0uMS0uOC0uMi0uNS0uNC0uNi0uNC0uMy0uNy0uNGMtMTUuOC02LjEtMzEuMi0xMy40LTQ1LjktMjEuOS0uMy0uMi0uNS0uNC0uNy0uNnMtLjMtLjYtLjMtLjkgMC0uNiAuMi0uOSAuMy0uNSAuNi0uN2MzLjEtMi4zIDYuMi00LjcgOS4xLTcuMSAuMy0uMiAuNi0uNCAuOS0uNHMuNyAwIDEgLjFjOTYuMiA0My45IDIwMC40IDQzLjkgMjk1LjUgMCAuMy0uMSAuNy0uMiAxLS4ycy43IC4yIC45IC40YzIuOSAyLjQgNiA0LjkgOS4xIDcuMiAuMiAuMiAuNCAuNCAuNiAuN3MuMiAuNiAuMiAuOS0uMSAuNi0uMyAuOS0uNCAuNS0uNiAuNmMtMTQuNyA4LjYtMzAgMTUuOS00NS45IDIxLjgtLjIgLjEtLjUgLjItLjcgLjRzLS4zIC40LS40IC43LS4xIC41LS4xIC44IC4xIC41IC4yIC44YzguOCAxNyAxOC44IDMzLjMgMzAgNDguOCAuMiAuMyAuNiAuNiAuOSAuN3MuOCAuMSAxLjEgMGM1Mi45LTE2LjIgMTAyLjYtNDEuMyAxNDcuMS03NC4yIC4yLS4yIC40LS40IC41LS42cy4yLS41IC4yLS44YzEyLjMtMTI2LjgtMjAuNS0yMzYuOS04Ni45LTMzNC41em0tMzAyIDI2Ny43Yy0yOSAwLTUyLjgtMjYuNi01Mi44LTU5LjJzMjMuNC01OS4yIDUyLjgtNTkuMmMyOS43IDAgNTMuMyAyNi44IDUyLjggNTkuMiAwIDMyLjctMjMuNCA1OS4yLTUyLjggNTkuMnptMTk1LjQgMGMtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjIgNTkuMi01Mi44IDU5LjJ6Il0KICAgIH07CiAgICBmYUhhY2tlck5ld3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFja2VyLW5ld3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFkNCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjEuMiAyMjkuMmwtLjIgMGMuMS0uMSAuMi0uMyAuMy0uNCAwIC4xIDAgLjMtLjEgLjR6bTIxOCA1My45bDAgMTAwLjktMzEuNCAwIDAtMTAyLjctNzkuOC0xNTMuMyAzNy4zIDBjNTIuNSA5OC4zIDQ5LjIgMTAxLjIgNTkuMyAxMjUuNiAxMi4zLTI3IDUuOC0yNC40IDYwLjYtMTI1LjZsMzQuOCAwLTgwLjggMTU1LjF6Il0KICAgIH07CiAgICBmYUVsZXZlbnR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsZXZlbnR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIjExdHkiXSwgImU3ZDYiLCAiTTYxNS4zIDE2OC41YzIuMyAwIDQuNiAuNyA2LjYgMi4yIDEuOSAxLjQgMy4xIDMuMyAzLjggNSAxLjQgMy4zIDEuOCA3LjMgMS44IDExLjMgMCAyLjItLjMgNC45LS43IDcuNmwwIC40LTUwLjkgMjY0LjkgMCAwYy00IDIyLjEtOC41IDM5LjQtMTMuNiA1MS43LTUgMTIuMS0xMC45IDIxLjYtMTguNiAyN2wwIDBjLTcuNSA1LjMtMTYuOSA3LjctMjcuNiA4bC0zIDBjLTE2IDAtMjkuMy00LjItMzYuOS0xNC44LS4xLS4xLS4xLS4xLS4yLS4yLS4xLS4yLS4zLS40LS41LS42bDAgMGMtMS44LTIuNC0yLjUtNS4yLTIuOS03LjQtLjUtMi44LS43LTYuMS0uNy05LjggMC03LjMgLjYtMTMuNSAyLjEtMTguMiAxLjQtNC40IDQuOC0xMC40IDEyLjItMTAuNGwxLjMgLjFjLjIgMCAuNCAuMSAuNSAuMSAuMyAuMSAuNiAuMSAuOCAuMiAuNiAuMSAxLjMgLjMgMi4yIC42bDcuNiAyLjIgLjEgMCA3LjYgMi4xYy45IC4yIDEuNyAuNCAyLjIgLjUgLjQgLjEgLjYgLjEgLjcgLjEgMCAwIC4xIDAgLjItLjEgLjEtLjEgLjQtLjIgLjgtLjYgLjktLjkgMi4yLTIuNiAzLjYtNS43IDIuNi01LjggNC4yLTE0LjcgNC4yLTI3LjQgMC0uNy0uMy0zLjQtMS4zLTguOS0uOS01LjEtMi4zLTEyLjItNC4yLTIxLjFsLTU2LTIzMi45LS4xLS40IDAtLjNjLS40LTIuNy0uNy01LjMtLjctNy4zIDAtMy43IC40LTcuNSAxLjctMTAuNiAuNy0xLjYgMS44LTMuNCAzLjUtNC45IDEuOS0xLjUgNC4yLTIuMyA2LjUtMi4zbDM0LjYgMGM0LjYgMCA4LjcgMS43IDExLjkgNWwxLjMgMS41YzEuMiAxLjYgMiAzLjQgMi43IDUuMiAuOSAyLjQgMS41IDUuMSAyIDguMWwzMC40IDE2MS4yIDIzLjgtMTYwYy44LTUuOCAyLjItMTEuNCA1LjEtMTUuMSAzLTMuOCA3LjItNS44IDEyLTUuOGwyNCAwek0zNzUuMSAzNC42YzIuNiAwIDUuMSAuNyA3LjQgMi4zIDIuMiAxLjUgMy43IDMuNiA0LjcgNS43IDEuOSA0IDIuNSA5LjEgMi41IDE0LjVsMCAxMTEuMmMwIC4xIDAgLjIgMCAuM2wzMi40IDBjMi41IDAgNSAuNiA3LjIgMi4xIDIuMiAxLjQgMy43IDMuNCA0LjggNS41IDIgMy45IDIuNiA4LjggMi42IDEzLjlsMCAxNS40YzAgNS0uNiA5LjgtMi42IDEzLjctMS4xIDItMi42IDQtNC44IDUuNC0yLjIgMS40LTQuNyAyLTcuMSAybC0zMi41IDAgMCAxNDUuOGMwIDEwLjggLjcgMTkuNSAyIDI2LjIgMS40IDYuOSAzLjEgMTAuOSA0LjcgMTIuOSAxLjIgMS41IDIuMiAyLjUgMy4xIDMuMmwyLjIgMS40IC4xIC4xIDIuOSAuOGMxLjIgLjIgMi42IC4zIDQuMyAuM2wyMC4zIDBjNC41IDAgOC45IDEuNyAxMS44IDUuOCAyLjYgMy42IDMuMyA4LjEgMy4zIDEyLjJsMCAxNy4yYzAgNC41LS44IDkuMy0zLjQgMTMuMS0zIDQuMi03LjUgNi0xMi4zIDZsMCAwLTI5LjEgLjFjLTggMC0xNS0uNi0yMS4yLTEuNy02LjctMS4zLTEzLjQtNC4xLTIwLjEtOC4xLTcuMi00LjQtMTMtMTAuMy0xNy41LTE3LjgtNC41LTcuNS03LjktMTcuNS0xMC41LTI5LjUtMi42LTEyLjItMy45LTI2LjYtMy45LTQzbDAtMTQ0LjktMTMuNCAwYy0yLjQgMC00LjktLjYtNy4xLTItMi4yLTEuNC0zLjctMy40LTQuOC01LjQtMi0zLjktMi42LTguNy0yLjYtMTMuN2wwLTE1LjRjMC01LjEgLjYtMTAgMi42LTEzLjkgMS4xLTIuMSAyLjYtNCA0LjgtNS41IDIuMi0xLjUgNC43LTIuMSA3LjItMi4xbDEzLjQgMCAwLS42IDUuMi0xMTEuMiAwLS4xIC4zLTMuOWMuNS0zLjggMS4zLTcuNCAyLjctMTAuMyAyLjEtNC4yIDYtNy45IDExLjgtNy45bDI4LjYgMHptLTI2OCAxMS43YzEuOCAuMyAzLjYgLjkgNS4zIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMyA4LjQgMi4zIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMSAwIDAtLjIgMC0uMyAwIDAgMC0uMiAwLS40IDBsMCAwYy0uMSAwLS4zIDAtLjQgMC0uMSAwLS4yIDAtLjIgMC0yLjIgLjEtNC41LS40LTYuNi0xLjctMi4zLTEuNC0zLjgtMy40LTQuNy01LjMtMS44LTMuNy0yLjMtOC40LTIuMy0xM2wwLTI3LjRjMC00LjQgLjctOC44IDIuNi0xMi40IDIuMS0zLjkgNS41LTYuNiA5LjgtNy42bDc1LjUtMTkuNWMxLjQtLjQgMi45LS41IDQuNC0uNWwxLjggLjF6bTE0My44LS41YzEuOCAuMyAzLjYgLjkgNS4yIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMiA4LjQgMi4yIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMiAwLS4zIDAtLjEgMC0uMiAwLS4zIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguMy0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguNyAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS40LTE5LjRjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xeiJdCiAgICB9OwogICAgZmExMXR5ID0gZmFFbGV2ZW50eTsKICAgIGZhVGVhbXNwZWFrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlYW1zcGVhayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGY5IiwgIk0xNTIuOCAzNy4yYy0zMi4yIDM4LjEtNTYuMSA4Mi42LTY5LjkgMTMwLjUgMCAuMi0uMSAuMy0uMSAuNS0zOS4zIDE2LjItNjYuOCA1NC44LTY2LjggOTkuOCAwIDU5LjYgNDguNCAxMDggMTA4IDEwOHMxMDgtNDguNCAxMDgtMTA4YzAtNTMuNS0zOC45LTk3LjktOTAtMTA2LjUgMTUuNy00MS44IDQwLjQtNzkuNiA3Mi4zLTExMC43IDEuOC0xLjYgNC0yLjYgNi4zLTMuMSAzNy4yLTExLjUgNzYuNy0xMy4zIDExNC44LTUuMiAxMTkuMyAyNS4xIDE5OC42IDEzOC4yIDE4MS43IDI1OC44LTguNCA2Mi42LTM4LjYgMTEyLjctODcuNyAxNTEuNC01MC4xIDM5LjctMTA3LjUgNTQuMy0xNzAuMiA1Mi4ybC0yNC0xYzEyLjQgMi44IDI1IDQuOSAzNy42IDYuMyA0MC43IDQuMiA4MS40IDIuMSAxMjAuMS0xMi41IDk0LTM1LjUgMTQ5LjMtMTAyLjMgMTYyLjktMjAyLjUgNC44LTUyLjYtNS44LTEwNS40LTMwLjgtMTUyLTcwLjQtMTMxLjktMjM0LjItMTgxLjYtMzY2LTExMS4yLTIuNCAxLjQtNC41IDMuMS02LjMgNS4ybC4xIDB6TTMwOS40IDQzMy45Yy0yLjEgMTEuNS00LjIgMjEuOS0xNC42IDMxLjMgNTMuMi0xIDEyMy4yLTI5LjIgMTYxLjgtOTcuMSAzOS43LTY5LjkgMzcuNi0xMzkuOS02LjMtMjA3LjgtMzYuNS01NS4zLTg5LjgtODIuNC0xNTYuNi04Ni42IDEuNSAyLjMgMy4yIDQuNCA1LjIgNi4zbDUuMiA2LjNjMjUuMSAzMS4zIDM3LjYgNjcuOSA0Mi44IDEwNy41IDIuMSAxNS43LTEgMzAuMy0xMy42IDQxLjgtNC4yIDMuMS01LjIgNi4zLTQuMiAxMC40bDcuMyAxNy43IDI5LjMgNTQuM2M1LjIgMTEuNSA0LjIgMTkuOC02LjMgMjguMi0zLjIgMi41LTYuNyA0LjYtMTAuNCA2LjNsLTE4LjggOC40IDMuMSAxMy42YzMuMSA2LjMgMSAxMi41LTMuMSAxNy43LTIuNSAyLjQtMy44IDUuOS0zLjEgOS40IDIuMSAxMS41LTIuMSAxOS44LTEyLjUgMjUuMS0yLjEgMS00LjIgNS4yLTUuMiA3LjNsMC0uMXptLTEzMy42LTMuMWMxNi43IDExLjUgMzQuNSAyMC45IDUzLjIgMjYuMSAyNCA1LjIgNDEuOC02LjMgNDQuOS0zMC4zIDEtOC40IDUuMi0xNC42IDEyLjUtMTcuNyA3LjMtNC4yIDguNC03LjMgMi4xLTEzLjZsLTkuNC04LjQgMTMuNi00LjJjNi4zLTIuMSA3LjMtNS4yIDUuMi0xMS41LTEuNC0zLTIuNC02LjItMy4xLTkuNC0zLjEtMTQuNi0yLjEtMTUuNyAxMS41LTE4LjggOC40LTMuMSAxNS43LTYuMyAyMS45LTEyLjUgMy4xLTIuMSAzLjEtNC4yIDEtOC40bC0xNi43LTMwLjNjLTEtMS45LTIuMS0zLjgtMy4xLTUuNy02LjQtMTEuNy0xMy0yMy42LTE1LjctMzcuMS0yLjEtOS40LTEtMTcuNyA4LjQtMjQgNS4yLTQuMiA4LjQtOS40IDguNC0xNi43LS40LTEwLjEtMS41LTIwLjMtMy4xLTMwLjMtNi4zLTM3LjYtMjMtNjguOS01MS4yLTk1LTUuMi00LjItOS40LTYuMy0xNi43LTQuMmwtMzUuNiAxMi43IDYgMy42YzYuMyAzLjcgMTIuMiA3LjMgMTcgMTIuMSAzMC4zIDI2LjEgNDEuOCA2MS42IDQ1LjkgMTAwLjIgMSA4LjQgMCAxNi43LTcuMyAyMS45LTguNCA1LjItMTAuNCAxMi41LTcuMyAyMC45IDQuOSAxMy4yIDEwLjQgMjYgMTYuNyAzOC42TDI5MS42IDMxOGMtNi4zIDguNC0xMy42IDExLjUtMjEuOSAxNC42LTEyLjUgMy4xLTE0LjYgNy4zLTEwLjQgMjAuOSAuNiAxLjUgMS40IDIuOCAyLjEgNC4yIDIuMSA1LjIgMSA4LjQtNC4yIDEwLjRsLTEyLjUgMy4xIDUuMiA0LjIgNC4yIDQuMmM0LjIgNS4yIDQuMiA4LjQtMi4xIDEwLjQtNy4zIDQuMi0xMS41IDkuNC0xMS41IDE3LjcgMCAxMi41LTcuMyAxOS44LTE4LjggMjQtMy44IDEtNy42IDEuNS0xMS41IDFsLTM0LjUtMi4xIC4xIC4yeiJdCiAgICB9OwogICAgZmFTdXBwbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3VwcGxlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZjkiLCAiTTY0MCAyNjIuNWMwIDY0LjEtMTA5IDExNi4xLTI0My41IDExNi4xLTI0LjggMC00OC42LTEuOC03MS4xLTUgNy43IC40IDE1LjUgLjYgMjMuNCAuNiAxMzQuNSAwIDI0My41LTU2LjkgMjQzLjUtMTI3LjEgMC0yOS40LTE5LjEtNTYuNC01MS4yLTc4IDYwIDIxLjEgOTguOSA1NS4xIDk4LjkgOTMuNHpNNDcuNyAyMjcuOWMtLjEtNzAuMiAxMDguOC0xMjcuMyAyNDMuMy0xMjcuNiA3LjkgMCAxNS42IC4yIDIzLjMgLjUtMjIuNS0zLjItNDYuMy00LjktNzEtNC45LTEzNC41IC40LTI0My40IDUyLjYtMjQzLjMgMTE2LjcgLjEgMzguMyAzOS4xIDcyLjMgOTkuMyA5My4zLTMyLjMtMjEuNS01MS41LTQ4LjYtNTEuNi03OHptNjAuMiAzOS45UzExOC40IDI4MSAxMzcuMiAyODFjMTcuOSAwIDI4LjQtMTEuNSAyOC40LTI1LjEgMC0yOC00MC4yLTI1LjEtNDAuMi0zOS43IDAtNS40IDUuMy05LjEgMTIuNS05LjEgNS43IDAgMTEuMyAyLjYgMTEuMyA2LjZsMCAzLjkgMTQuMiAwIDAtNy45YzAtMTIuMS0xNS40LTE2LjgtMjUuNC0xNi44LTE2LjUgMC0yOC41IDEwLjItMjguNSAyNC4xIDAgMjYuNiA0MC4yIDI1LjQgNDAuMiAzOS45IDAgNi42LTUuOCAxMC4xLTEyLjMgMTAuMS0xMS45IDAtMjAuNy0xMC4xLTIwLjctMTAuMWwtOC44IDEwLjl6bTEyMC44LTczLjZsMCA1NC40YzAgMTEuMy03LjEgMTcuOC0xNy44IDE3LjhzLTE3LjgtNi41LTE3LjgtMTcuN2wwLTU0LjUtMTUuOCAwIDAgNTVjMCAxOC45IDEzLjQgMzEuOSAzMy43IDMxLjkgMjAuMSAwIDMzLjQtMTMgMzMuNC0zMS45bDAtNTUtMTUuNyAwem0zNC40IDg1LjRsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjgtNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNS4xIDE0LjctMTQgMTQuN2wtMTIuNiAwem01NyA0M2wxNS44IDAgMC0yOS41IDE1LjUgMGMxNiAwIDI3LjItMTEuNSAyNy4yLTI4LjFzLTExLjItMjcuOC0yNy4yLTI3LjhsLTM5LjEgMCAwIDEzLjQgNy44IDAgMCA3MnptMTUuNy00M2wwLTI5LjEgMTIuOSAwYzguNyAwIDEzLjcgNS43IDEzLjcgMTQuNCAwIDguOS01IDE0LjctMTQgMTQuN2wtMTIuNiAwem01Ny4xIDM0LjhjMCA1LjggMi40IDguMiA4LjIgOC4ybDM3LjYgMGM1LjggMCA4LjItMi40IDguMi04LjJsMC0xMy0xNC4zIDAgMCA1LjJjMCAxLjctMSAyLjYtMi42IDIuNmwtMTguNiAwYy0xLjcgMC0yLjYtMS0yLjYtMi42bDAtNjEuMmMwLTUuNy0yLjQtOC4yLTguMi04LjJsLTE1LjQgMCAwIDEzLjQgNS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDYxLjItLjEgMHptNjMuNCAwYzAgNS44IDIuNCA4LjIgOC4yIDguMmwzOC43IDBjNS43IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE5LjcgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTIwLjMgMjcuNyAwIDAtMTMuNC0yNy43IDAgMC0yMi40IDE5LjIgMGMxLjcgMCAyLjYgMSAyLjYgMi42bDAgNS4yIDE0LjIgMCAwLTEzYzAtNS43LTIuNS04LjItOC4yLTguMmwtNTEuNiAwIDAgMTMuNCA3LjggMCAwIDYzLjkgLjEgMHptNTguOS03NmwwIDUuOSAxLjYgMCAwLTUuOSAyLjcgMCAwLTEuMi03IDAgMCAxLjIgMi43IDB6bTUuNy0xLjJsMCA3LjEgMS41IDAgMC01LjcgMi4zIDUuNyAxLjMgMCAyLjMtNS43IDAgNS43IDEuNSAwIDAtNy4xLTIuMyAwLTIuMSA1LjEtMi4xLTUuMS0yLjQgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdHdpdHRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0d2l0dGVyLXNxdWFyZSJdLCAiZjA4MSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzUxLjMgMTk5LjNjMCA4Ni43LTY2IDE4Ni42LTE4Ni42IDE4Ni42LTM3LjIgMC03MS43LTEwLjgtMTAwLjctMjkuNCA1LjMgLjYgMTAuNCAuOCAxNS44IC44IDMwLjcgMCA1OC45LTEwLjQgODEuNC0yOC0yOC44LS42LTUzLTE5LjUtNjEuMy00NS41IDEwLjEgMS41IDE5LjIgMS41IDI5LjYtMS4yLTMwLTYuMS01Mi41LTMyLjUtNTIuNS02NC40bDAtLjhjOC43IDQuOSAxOC45IDcuOSAyOS42IDguMy05LTYtMTYuNC0xNC4xLTIxLjUtMjMuNnMtNy44LTIwLjItNy43LTMxYzAtMTIuMiAzLjItMjMuNCA4LjktMzMuMSAzMi4zIDM5LjggODAuOCA2NS44IDEzNS4yIDY4LjYtOS4zLTQ0LjUgMjQtODAuNiA2NC04MC42IDE4LjkgMCAzNS45IDcuOSA0Ny45IDIwLjcgMTQuOC0yLjggMjktOC4zIDQxLjYtMTUuOC00LjkgMTUuMi0xNS4yIDI4LTI4LjggMzYuMSAxMy4yLTEuNCAyNi01LjEgMzcuOC0xMC4yLTguOSAxMy4xLTIwLjEgMjQuNy0zMi45IDM0IC4yIDIuOCAuMiA1LjcgLjIgOC41eiJdCiAgICB9OwogICAgZmFUd2l0dGVyU3F1YXJlID0gZmFTcXVhcmVUd2l0dGVyOwogICAgZmFGb250QXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDY0IDAgMC02NCAzNzMuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnoiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWVGbGFnID0gZmFGb250QXdlc29tZTsKICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCA9IGZhRm9udEF3ZXNvbWU7CiAgICBmYVdpcnNpbmRoYW5kd2VyayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXJzaW5kaGFuZHdlcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid3NoIl0sICJlMmQwIiwgIk0xOC45IDQ3OS44bDgzLjQgMCAwLTExMi04My40IDQ3IDAgNjV6bTMyOSAwbDgyLjQgMCAwLTY1LTgyLjQtNDcgMCAxMTJ6bTAtNDQ4bDAgMjE5LjgtMTIzLjYtNzIuNC0xMjEuNyA3Mi40IDAtMjE5LjgtODMuNyAwIDAgMzYwLjggMjA1LjQtMTIyLjMgMjA2IDEyMi4zIDAtMzYwLjgtODIuMyAweiJdCiAgICB9OwogICAgZmFXc2ggPSBmYVdpcnNpbmRoYW5kd2VyazsKICAgIGZhQ29uZmx1ZW5jZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb25mbHVlbmNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3OGQiLCAiTTIuOCA0MTIuMmMtNC41IDcuNi0yLjEgMTcuNSA1LjUgMjIuMmwxMDUuOSA2NS4yYzcuNyA0LjcgMTcuNyAyLjQgMjIuNC01LjMgMC0uMSAuMS0uMiAuMS0uMiA2Ny4xLTExMi4yIDgwLjUtOTUuOSAyODAuOS0uNyA4LjEgMy45IDE3LjggLjQgMjEuNy03LjcgLjEtLjEgLjEtLjMgLjItLjRsNTAuNC0xMTQuMWMzLjYtOC4xLS4xLTE3LjYtOC4xLTIxLjMtMjIuMi0xMC40LTY2LjItMzEuMi0xMDUuOS01MC4zLTI0Ny45LTEyMC42LTMzMC44IDQ1LjctMzczLjEgMTEyLjZ6TTUxMC4yIDEwMC4xYzQuNS03LjYgMi4xLTE3LjUtNS41LTIyLjJMMzk4LjkgMTIuOGMtNy41LTUtMTcuNi0zLjEtMjIuNiA0LjQtLjIgLjMtLjQgLjYtLjYgMS02Ny4zIDExMi42LTgxLjEgOTUuNi0yODAuNiAuOS04LjEtMy45LTE3LjgtLjQtMjEuNyA3LjctLjEgLjEtLjEgLjMtLjIgLjRMMjIuNyAxNDEuM2MtMy42IDguMSAuMSAxNy42IDguMSAyMS4zIDIyLjIgMTAuNCA2Ni4zIDMxLjIgMTA2IDUwLjQgMjQ4IDEyMCAzMzAuOC00NS40IDM3My40LTExMi45eiJdCiAgICB9OwogICAgZmFEaWdnID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpZ2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhNiIsICJNODEuNyAxNzIuM2wtODEuNyAwIDAgMTc0LjQgMTMyLjcgMCAwLTI1MC43LTUxIDAgMCA3Ni4zem0wIDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6TTM3OC45IDE3Mi4zbDAgMTc0LjQgODEuOCAwIDAgMjguNS04MS44IDAgMCA0MC44IDEzMy4xIDAgMC0yNDMuNy0xMzMuMSAwem04MS44IDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6bS0yMzUuNiA0MWw4Mi4xIDAgMCAyOC41LTgyLjEgMCAwIDQwLjggMTMzLjMgMCAwLTI0My43LTEzMy4zIDAgMCAxNzQuNHptNTEuMi0xMzMuM2wzMC44IDAgMCA5Mi4zLTMwLjggMCAwLTkyLjN6TTE1My4zIDk2bDUxLjMgMCAwIDUxLTUxLjMgMCAwLTUxem0wIDc2LjNsNTEuMyAwIDAgMTc0LjQtNTEuMyAwIDAtMTc0LjR6Il0KICAgIH07CiAgICBmYVRocmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE4IiwgIk0zMzEuNSAyMzUuN2MyLjIgLjkgNC4yIDEuOSA2LjMgMi44IDI5LjIgMTQuMSA1MC42IDM1LjIgNjEuOCA2MS40IDE1LjcgMzYuNSAxNy4yIDk1LjgtMzAuMyAxNDMuMi0zNi4yIDM2LjItODAuMyA1Mi41LTE0Mi42IDUzbC0uMyAwYy03MC4yLS41LTEyNC4xLTI0LjEtMTYwLjQtNzAuMi0zMi4zLTQxLTQ4LjktOTguMS00OS41LTE2OS42bDAtLjVDMTcgMTg0LjMgMzMuNiAxMjcuMiA2NS45IDg2LjIgMTAyLjIgNDAuMSAxNTYuMiAxNi41IDIyNi40IDE2bC4zIDBjNzAuMyAuNSAxMjQuOSAyNCAxNjIuMyA2OS45IDE4LjQgMjIuNyAzMiA1MCA0MC42IDgxLjdsLTQwLjQgMTAuOGMtNy4xLTI1LjgtMTcuOC00Ny44LTMyLjItNjUuNC0yOS4yLTM1LjgtNzMtNTQuMi0xMzAuNS01NC42LTU3IC41LTEwMC4xIDE4LjgtMTI4LjIgNTQuNC0yNi4yIDMzLjMtMzkuOCA4MS41LTQwLjMgMTQzLjIgLjUgNjEuNyAxNC4xIDEwOS45IDQwLjMgMTQzLjMgMjggMzUuNiA3MS4yIDUzLjkgMTI4LjIgNTQuNCA1MS40LS40IDg1LjQtMTIuNiAxMTMuNy00MC45IDMyLjMtMzIuMiAzMS43LTcxLjggMjEuNC05NS45LTYuMS0xNC4yLTE3LjEtMjYtMzEuOS0zNC45LTMuNyAyNi45LTExLjggNDguMy0yNC43IDY0LjgtMTcuMSAyMS44LTQxLjQgMzMuNi03Mi43IDM1LjMtMjMuNiAxLjMtNDYuMy00LjQtNjMuOS0xNi0yMC44LTEzLjgtMzMtMzQuOC0zNC4zLTU5LjMtMi41LTQ4LjMgMzUuNy04MyA5NS4yLTg2LjQgMjEuMS0xLjIgNDAuOS0uMyA1OS4yIDIuOC0yLjQtMTQuOC03LjMtMjYuNi0xNC42LTM1LjItMTAtMTEuNy0yNS42LTE3LjctNDYuMi0xNy44bC0uNyAwYy0xNi42IDAtMzkgNC42LTUzLjMgMjYuM2wtMzQuNC0yMy42YzE5LjItMjkuMSA1MC4zLTQ1LjEgODcuOC00NS4xbC44IDBjNjIuNiAuNCA5OS45IDM5LjUgMTAzLjcgMTA3LjdsLS4yIC4yIC4xIDB6bS0xNTYgNjguOGMxLjMgMjUuMSAyOC40IDM2LjggNTQuNiAzNS4zIDI1LjYtMS40IDU0LjYtMTEuNCA1OS41LTczLjItMTMuMi0yLjktMjcuOC00LjQtNDMuNC00LjQtNC44IDAtOS42IC4xLTE0LjQgLjQtNDIuOSAyLjQtNTcuMiAyMy4yLTU2LjIgNDEuOGwtLjEgLjF6Il0KICAgIH07CiAgICBmYVdwcmVzc3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3ByZXNzciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW5kYWN0Il0sICJmM2U0IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQyNy4zIDE2Ni42Yy0xNS4yIDM0LjUtMzAuNCA2OS00NS42IDEwMy41LTIuNCA1LjUtNi45IDguMi0xMyA4LjItMjMgMC00NiAuMS02OSAwLTUuMSAwLTguMiAxLjktMTAuMyA2LjctMTAuMiAyMy42LTIwLjYgNDctMzEgNzAuNS0xLjUgMy41LTQuMSA1LjMtNy45IDUuMy00NS45IDAtOTEuOSAwLTEzNy44IDAtMy4xIDAtNS42LTEuMS03LjctMy40LTExLjItMTIuMy0yMi41LTI0LjYtMzMuNy0zNi45LTIuNy0zLTIuOC02LjItMS4yLTkuNyA4LjctMTkuNSAxNy4zLTM5LjEgMjUuOS01OC43IDEyLjktMjkuNCAyNS45LTU4LjcgMzguNy04OC4xIDEuNy0zLjkgNC4zLTUuNyA4LjUtNS43IDE0LjIgLjEgMjguNSAwIDQyLjcgMCA2LjIgMCA5LjIgNC44IDYuNyAxMC42LTEzLjYgMzAuOC0yNy4yIDYxLjYtNDAuNyA5Mi4zLTUuNyAxMy0xMS40IDI2LTE3LjEgMzktMy45IDkgNy4xIDEyIDExIDUuNiAuMi0uNC0xLjQgNC4yIDMwLTY3LjcgMS40LTMuMSAzLjQtNC40IDYuOC00LjQgMTUuMiAuMSAzMC40IDAgNDUuNiAwIDUuNiAwIDcuOSAzLjYgNS43IDguNy04LjMgMTktMTYuNyAzNy45LTI1IDU2LjktNSAxMS40IDguMSAxMi41IDExLjMgNS4zIDAtLjEgMjcuOS02My4zIDMyLjItNzMuMiAyLTQuNiA1LjQtNi41IDEwLjMtNi41IDI2LjQgLjEgNTIuOSAwIDc5LjMgMCAxMi40IDAgMTMuOS0xMy42IDMuOS0xMy42LTI1LjMgMC01MC41IDAtNzUuOCAwLTYuMyAwLTcuOC0yLjUtNS4zLTguMyA1LjgtMTMuMSAxMS42LTI2LjEgMTcuMy0zOS4yIDEuNy00IDQuNS01LjggOC44LTUuOCAyMy4xIC4xIDI2IDAgMTMwLjggMCA2LjEgMCA4IDIuOCA1LjYgOC4zeiJdCiAgICB9OwogICAgZmFSZW5kYWN0ID0gZmFXcHJlc3NyOwogICAgZmFZb2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5b2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmIxIiwgIk05MS4zIDc2bDE4NiAwLTcgMTguOS0xNzkgMGMtMzkuNyAwLTcxLjkgMzEuNi03MS45IDcwLjNsMCAyMDUuNGMwIDM1LjQgMjQuOSA3MC4zIDg0IDcwLjNsMCAxOS4xLTEyLjEgMEM0MS4yIDQ2MCAwIDQxOS44IDAgMzcwLjVMMCAxNjUuMkMwIDExNS45IDQwLjcgNzYgOTEuMyA3NnpNMzIwLjQgMjBsNjYuNSAwYy0xNDMuOCAzNzguMS0xNDUuNyAzOTguOS0xODQuNyA0MzkuMy0yMC44IDIxLjYtNDkuMyAzMS43LTc4LjMgMzIuN2wwLTUxLjFjNDkuMi03LjcgNjQuNi00OS45IDY0LjYtNzUuMyAwLTIwLjEgLjYtMTIuNi04Mi4xLTIyMy4ybDYxLjQgMCA1MC40IDE1Ni42IDEwMi4yLTI3OXpNNDQ4IDE2MS41bDAgMjk4LjUtMjE0IDBjNi42LTkuNiAxMC43LTE2LjMgMTIuMS0xOS40bDE4Mi41IDAgMC0yNzkuMWMwLTMyLjUtMTcuMS01MS45LTQ4LjItNjIuOUwzODcuMSA4MWM0MS43IDEzLjYgNjAuOSA0My4xIDYwLjkgODAuNXoiXQogICAgfTsKICAgIGZhTmltYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5pbWJsciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWE4IiwgIk0yNDYuNiAzNTMuM2EyNyAyNyAwIDEgMSAwLTU0IDI3IDI3IDAgMSAxIDAgNTR6bS03OS40LTI3YTI3LjEgMjcuMSAwIDEgMSAtNTQuMyAwIDI3LjEgMjcuMSAwIDEgMSA1NC4zIDB6TTE5MS44IDE1OUMxNTcgMTU5IDg5LjQgMTc4LjggNTkuMiAyMjdMMTQgMCAxNCAzMzUuNUMxNCA0MzMuMSA5My42IDUxMiAxOTEuOCA1MTJTMzY5LjUgNDMzIDM2OS41IDMzNS41IDI5MC4xIDE1OSAxOTEuOCAxNTl6bTAgMzA4LjFjLTczLjMgMC0xMzIuNS01OC45LTEzMi41LTEzMS42czU5LjItMTMxLjYgMTMyLjUtMTMxLjYgMTMyLjUgNTguOSAxMzIuNSAxMzEuNS01OS4zIDEzMS42LTEzMi41IDEzMS42bDAgLjF6Il0KICAgIH07CiAgICBmYVBpeGVsZmVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeGVsZmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZGIiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjM1LjcgMzExLjlsNDcgMGM0NC4yIDAgODAuMS0zNC45IDgwLjEtNzhzLTM1LjktNzgtODAuMS03OGwtNjcuOCAwYy0yNS41IDAtNDYuMiAyMC4xLTQ2LjIgNDVsMCAxNzUuMSA2Ny02NC4xeiJdCiAgICB9OwogICAgZmFZYWhvbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YWhvbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTllIiwgIk0yMjMuOCAxNDEuMWwtNTYuNyAxNDMuMi01Ni0xNDMuMi05Ni4xIDAgMTA1LjggMjQ5LjEtMzguNiA4OS44IDk0LjIgMCAxNDAuOS0zMzguOS05My42IDB6TTMyOS4yIDI3Ni45YTU4LjIgNTguMiAwIDEgMCAwIDExNi40IDU4LjIgNTguMiAwIDEgMCAwLTExNi40ek0zOTQuNyAzMmwtOTMgMjIzLjUgMTA0LjggMCA5Mi42LTIyMy41LTEwNC40IDB6Il0KICAgIH07CiAgICBmYUJsdWVza3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmx1ZXNreSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNjcxIiwgIk00MDcuOCAyOTQuN2MtMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjN6TTI4OCAyMjcuMUMyNjEuOSAxNzYuNCAxOTAuOSA4MS45IDEyNC45IDM1LjMgNjEuNi05LjQgMzcuNS0xLjcgMjEuNiA1LjUgMy4zIDEzLjggMCA0MS45IDAgNTguNFM5LjEgMTk0IDE1IDIxMy45YzE5LjUgNjUuNyA4OS4xIDg3LjkgMTUzLjIgODAuNyAzLjMtLjUgNi42LS45IDEwLTEuNC0zLjMgLjUtNi42IDEtMTAgMS40LTkzLjkgMTQtMTc3LjMgNDguMi02Ny45IDE2OS45IDEyMC4zIDEyNC42IDE2NC44LTI2LjcgMTg3LjctMTAzLjQgMjIuOSA3Ni43IDQ5LjIgMjIyLjUgMTg1LjYgMTAzLjQgMTAyLjQtMTAzLjQgMjguMS0xNTYtNjUuOC0xNjkuOS0zLjMtLjQtNi43LS44LTEwLTEuMyAzLjQgLjQgNi43IC45IDEwIDEuMyA2NC4xIDcuMSAxMzMuNi0xNS4xIDE1My4yLTgwLjcgNS45LTE5LjkgMTUtMTM4LjkgMTUtMTU1LjVzLTMuMy00NC43LTIxLjYtNTIuOWMtMTUuOC03LjEtNDAtMTQuOS0xMDMuMiAyOS44LTY2LjEgNDYuNi0xMzcuMSAxNDEuMS0xNjMuMiAxOTEuOHoiXQogICAgfTsKICAgIGZhU2NyaWJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjcmliZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjhhIiwgIk00Mi42IDI1Mi43Yy0xNi4xLTE5LTI0LjctNDUuOS0yNC44LTc5LjkgMC0xMDAuNCA3NS4yLTE1My4xIDE2Ny4yLTE1My4xIDk4LjYtMS42IDE1Ni44IDQ5IDE4NC4zIDcwLjZsLTUwLjUgNzIuMS0zNy4zLTI0LjYgMjYuOS0zOC42Yy0zNi41LTI0LTc5LjQtMzYuNS0xMjMtMzUuOC01MC43LS44LTExMS43IDI3LjItMTExLjcgNzYuMiAwIDE4LjcgMTEuMiAyMC43IDI4LjYgMTUuNiAyMy4zLTUuMyA0MS45IC42IDU1LjggMTQgMjYuNCAyNC4zIDIzLjIgNjcuNi0uNyA5MS45LTI5LjIgMjkuNS04NS4yIDI3LjMtMTE0LjgtOC40em0zMTcuNyA1LjljLTE1LjUtMTguOC0zOC45LTI5LjQtNjMuMi0yOC42LTM4LjEtMi03MS4xIDI4LTcwLjUgNjcuMi0uNyAxNi44IDYgMzMgMTguNCA0NC4zIDE0LjEgMTMuOSAzMyAxOS43IDU2LjMgMTQuNCAxNy40LTUuMSAyOC42LTMuMSAyOC42IDE1LjYgMCA0LjMtLjUgOC41LTEuNCAxMi43LTE2LjcgNDAuOS01OS41IDY0LjQtMTIxLjQgNjQuNC01MS45IC4yLTEwMi40LTE2LjQtMTQ0LjEtNDcuM2wzMy43LTM5LjQtMzUuNi0yNy40LTYwLjggNzEuOCAxNS40IDEzLjhjNTIuNSA0Ni44IDEyMC40IDcyLjUgMTkwLjcgNzIuMiA1MS40IDAgOTQuNC0xMC41IDEzMy42LTQ0LjEgNTcuMS01MS40IDU0LjItMTQ5LjIgMjAuMy0xODkuNnoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zUGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1wZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgNDQ5LjVjLTEzOS4yIDAtMjM1LjgtMTM4LTE5MC4yLTI2Ny45bDc4LjggMzUuMWMtMi4xIDEwLjUtMy4zIDIxLjUtMy4zIDMyLjkgMCA5OSA3My45IDEyNi45IDEyMC40IDEyNi45IDIyLjkgMCA1My41LTYuNyA3OS40LTI5LjVMMzA1IDMxMS4xYy01LjUgNi4zLTE3LjYgMTYuNy0zNi4zIDE2LjctMzcuOCAwLTUzLjctMzkuOS01My45LTcxLjkgMjMwLjQgMTAyLjYgMjE2LjUgOTYuNSAyMTcuOSA5Ni44LTM0LjMgNjIuNC0xMDAuNiAxMDQuOC0xNzYuNyAxMDQuOHptMTk0LjItMTUwbC0yMjQtMTAwYzE4LjgtMzQgNTQuOS0zMC43IDc0LjctMTFsNDAuNC00MS42Yy0yNy4xLTIzLjMtNTgtMjcuNS03OC4xLTI3LjUtNDcuNCAwLTgwLjkgMjAuNS0xMDAuNyA1MS42TDg3LjYgMTQ1LjZjMzYuMS01NC45IDk4LjEtOTEuMiAxNjguNS05MS4yIDExMS4xIDAgMjAxLjUgOTAuNCAyMDEuNSAyMDEuNSAwIDE4LTIuNCAzNS40LTYuOCA1Mi0uMy0uMS0uNC0uMi0uNi0uNHoiXQogICAgfTsKICAgIGZhRWFybHliaXJkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlYXJseWJpcmRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOWEiLCAiTTMyOS4zIDQ3LjVjMS4yLTEzIDIxLjMtMTQgMzYuNi04LjcgLjkgLjMgMjYuMiA5LjcgMTkgMTUuMi0yNy45LTcuNC01Ni40IDE4LjItNTUuNi02LjV6bS0yMDEgNi45YzMwLjctOC4xIDYyIDIwIDYxLjEtNy4xLTEuMy0xNC4yLTIzLjQtMTUuMy00MC4yLTkuNi0xIC4zLTI4LjcgMTAuNS0yMC45IDE2Ljd6TTMzNS41IDE2MGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6bS0xNTkuNyAwYTE2IDE2IDAgMSAwIDAgMzIgMTYgMTYgMCAxIDAgMC0zMnpNNDk0LjMgMzIzLjJjLTkuOSAyNC00MC43IDExLTYzLjktMS4yLTEzLjUgNjkuMS01OC4xIDExMS40LTEyNi4zIDEyNC4yIC4zIC45LTItLjEgMjQgMSAzMy42IDEuNCA2My44LTMuMSA5Ny40LTgtMTkuOC0xMy44LTExLjQtMzcuMS05LjgtMzguMSAxLjQtLjkgMTQuNyAxLjcgMjEuNiAxMS41IDguNi0xMi41IDI4LjQtMTQuOCAzMC4yLTEzLjYgMS42IDEuMSA2LjYgMjAuOS02LjkgMzQuNiA0LjctLjkgOC4yLTEuNiA5LjgtMi4xIDIuNi0uOCAxNy43IDExLjMgMy4xIDEzLjMtMTQuMyAyLjMtMjIuNiA1LjEtNDcuMSAxMC44LTQ1LjkgMTAuNy04NS45IDExLjgtMTE3LjcgMTIuOGwxIDExLjZjMy44IDE4LjEtMjMuNCAyNC4zLTI3LjYgNi4yIC44IDE3LjktMjcuMSAyMS44LTI4LjQtMWwtLjUgNS4zYy0uNyAxOC40LTI4LjQgMTcuOS0yOC4zLS42LTcuNSAxMy41LTI4LjEgNi44LTI2LjQtOC41bDEuMi0xMi40Yy0zNi43IC45LTU5LjcgMy4xLTYxLjggMy4xLTIwLjkgMC0yMC45LTMxLjYgMC0zMS42IDIuNCAwIDI3LjcgMS4zIDYzLjIgMi44LTYxLjEtMTUuNS0xMDMuNy01NS0xMTQuOS0xMTguMi0yNSAxMi44LTU3LjUgMjYuOC02OC4yIC44LTEwLjUtMjUuNCAyMS41LTQyLjYgNjYuOC03My40IC43LTYuNiAxLjYtMTMuMyAyLjctMTkuOC0xNC40LTE5LjYtMTEuNi0zNi4zLTE2LjEtNjAuNC0xNi44IDIuNC0yMy4yLTkuMS0yMy42LTIzLjEgLjMtNy4zIDIuMS0xNC45IDIuNC0xNS40IDEuMS0xLjggMTAuMS0yIDEyLjctMi42IDYtMzEuNyA1MC42LTMzLjIgOTAuOS0zNC41IDE5LjctMjEuOCA0NS4yLTQxLjUgODAuOS00OC4zLTE1LjMtMTkuNC0zLjQtMzkuOS0yLjQtNDAuNCAxLjctLjggMjEuMiA0LjMgMjYuMyAyMy4yIDUuMi04LjggMTguMy0xMS40IDE5LjYtMTAuNyAxLjEgLjYgNi40IDE1LTQuOSAyNS45IDQwLjMgMy41IDcyLjIgMjQuNyA5NiA1MC43IDM2LjEgMS41IDcxLjggNS45IDc3LjEgMzQgMi43IC42IDExLjYgLjggMTIuNyAyLjYgLjMgLjUgMi4xIDguMSAyLjQgMTUuNC0uNSAxMy45LTYuOCAyNS40LTIzLjYgMjMuMS0zLjIgMTcuMy0yLjcgMzIuOS04LjcgNDcuNyAyLjQgMTEuNyA0IDIzLjggNC44IDM2LjQgMzcgMjUuNCA3MC4zIDQyLjUgNjAuMyA2Ni45ek0yMjMuNSAxNTkuOWMuOS00NC0zNy45LTQyLjItNzguNi00MC4zLTIxLjcgMS0zOC45IDEuOS00NS41IDEzLjktMTEuNCAyMC45IDUuOSA5Mi45IDIzLjIgMTAxLjIgOS44IDQuNyA3My40IDcuOSA4Ni4zLTcuMSA4LjItOS40IDE1LTQ5LjQgMTQuNi02Ny43em01MiA1OC4zYy00LjMtMTIuNC02LTMwLjEtMTUuMy0zMi43LTItLjUtOS0uNS0xMSAwLTEwIDIuOC0xMC44IDIyLjEtMTcgMzcuMiAxNS40IDAgMTkuMyA5LjcgMjMuNyA5LjcgNC4zIDAgNi4zLTExLjMgMTkuNi0xNC4yem0xMzUuNy04NC43Yy02LjYtMTIuMS0yNC44LTEyLjktNDYuNS0xMy45LTQwLjItMS45LTc4LjItMy44LTc3LjMgNDAuMy0uNSAxOC4zIDUgNTguMyAxMy4yIDY3LjggMTMgMTQuOSA3Ni42IDExLjggODYuMyA3LjEgMTUuOC03LjYgMzYuNS03OC45IDI0LjMtMTAxLjN6Il0KICAgIH07CiAgICBmYVNxdWFyZU9kbm9rbGFzc25pa2kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW9kbm9rbGFzc25pa2kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsib2Rub2tsYXNzbmlraS1zcXVhcmUiXSwgImYyNjQiLCAiTTIyNCAxMzcuMWMtNS40LS4zLTEwLjggLjYtMTUuOSAyLjRzLTkuNyA0LjgtMTMuNiA4LjUtNyA4LjItOS4yIDEzLjItMy4yIDEwLjMtMy4yIDE1LjcgMS4xIDEwLjggMy4yIDE1LjcgNS4zIDkuNSA5LjIgMTMuMiA4LjYgNi42IDEzLjYgOC41IDEwLjUgMi43IDE1LjkgMi40YzUuNCAuMyAxMC44LS42IDE1LjktMi40czkuNy00LjggMTMuNi04LjUgNy04LjIgOS4yLTEzLjIgMy4yLTEwLjMgMy4yLTE1LjctMS4xLTEwLjgtMy4yLTE1LjctNS4zLTkuNS05LjItMTMuMi04LjYtNi42LTEzLjYtOC41LTEwLjUtMi43LTE1LjktMi40ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDI1OGE4MSA4MSAwIDEgMSAwLTE2Mi4xIDgxIDgxIDAgMSAxIDAgMTYyLjF6bTU5LjMgNi4yYzE2LjgtMTMuMiAyOS41LTUuNSAzNC4xIDMuNiA3LjggMTYtMS4xIDIzLjctMjEuNSAzNy0xNy4xIDEwLjktNDAuNyAxNS4yLTU2LjIgMTYuOGwxMyAxMi45IDQ3LjcgNDcuN2MxNy40IDE3LjktMTEgNDUuOC0yOC42IDI4LjYtMTItMTIuMi0yOS41LTI5LjctNDcuNy00Ny45bC00Ny43IDQ3LjljLTE3LjcgMTcuMi00Ni0xMS0yOC40LTI4LjYgMy43LTMuNyA3LjktNy45IDEyLjUtMTIuNSAxMC40LTEwLjQgMjIuNi0yMi43IDM1LjItMzUuMmwxMi45LTEyLjljLTE1LjQtMS42LTM5LjMtNS43LTU2LjYtMTYuOC0yMC4zLTEzLjMtMjkuMy0yMC45LTIxLjQtMzcgNC42LTkuMSAxNy4zLTE2LjggMzQuMS0zLjYgMCAwIDIyLjcgMTggNTkuMyAxOHM1OS4zLTE4IDU5LjMtMTh6Il0KICAgIH07CiAgICBmYU9kbm9rbGFzc25pa2lTcXVhcmUgPSBmYVNxdWFyZU9kbm9rbGFzc25pa2k7CiAgICBmYU1hcmtkb3duID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hcmtkb3duIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2MGYiLCAiTTU5My44IDU5LjFsLTU0Ny42IDBDMjAuNyA1OS4xIDAgNzkuOCAwIDEwNS4yTDAgNDA2LjdjMCAyNS41IDIwLjcgNDYuMiA0Ni4yIDQ2LjJsNTQ3LjcgMGMyNS41IDAgNDYuMi0yMC43IDQ2LjEtNDYuMWwwLTMwMS42YzAtMjUuNC0yMC43LTQ2LjEtNDYuMi00Ni4xek0zMzguNSAzNjAuNmwtNjEuNSAwIDAtMTIwLTYxLjUgNzYuOS02MS41LTc2LjkgMCAxMjAtNjEuNyAwIDAtMjA5LjIgNjEuNSAwIDYxLjUgNzYuOSA2MS41LTc2LjkgNjEuNSAwIDAgMjA5LjIgLjIgMHptMTM1LjMgMy4xbC05Mi4zLTEwNy43IDYxLjUgMCAwLTEwNC42IDYxLjUgMCAwIDEwNC42IDYxLjUgMC05Mi4yIDEwNy43eiJdCiAgICB9OwogICAgZmFUeXBvMyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0eXBvMyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDJiIiwgIk0xNzguNyA3OC40YzAtMjQuNyA1LjQtMzIuNCAxMy45LTM5LjQtNjkuNSA4LjUtMTQ5LjMgMzQtMTc2LjMgNjYuNC01LjQgNy43LTkuMyAyMC44LTkuMyAzNy4xIDAgMTAzLjUgMTA2LjggMzM3LjUgMTg0LjEgMzM3LjUgMzYuMyAwIDk3LjMtNTkuNSAxNDYuNy0xMzktNyAyLjMtMTEuNiAyLjMtMTguNSAyLjMtNTcuMiAwLTE0MC42LTE5OC41LTE0MC42LTI2NC45ek0zMDEuNSAzMmMtMzAuMSAwLTQxLjcgNS40LTQxLjcgMzYuMyAwIDY2LjQgNTMuOCAxOTguNSAxMDEuNyAxOTguNSAyNi4zIDAgNzguOC05OS43IDc4LjgtMTgyLjMgMC00MC45LTY3LTUyLjUtMTM4LjgtNTIuNXoiXQogICAgfTsKICAgIGZhSm9vbWxhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpvb21sYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWFhIiwgIk0uNiA5Mi4xYzAtMzMuMyAyNi44LTYwLjEgNTkuOC02MC4xIDMwIDAgNTQuNSAyMS45IDU5LjIgNTAuMiAzMi42LTcuNiA2Ny4xIC42IDk2LjUgMzBsLTQ0LjMgNDQuM2MtMjAuNS0yMC41LTQyLjYtMTYuMy01NS40LTMuNS0xNC4zIDE0LjMtMTQuMyAzNy45IDAgNTIuMmw5OS41IDk5LjUtNDQgNDQuM2MtODcuNy04Ny4yLTQ5LjctNDkuNy05OS44LTk5LjctMjYuOC0yNi41LTM1LTY0LjgtMjQuOC05OC45LTI2LjktNS44LTQ2LjctMjkuNy00Ni43LTU4LjN6TTEzMC4xIDIwOC41bDQ0LjMgNDQuM2MxMC0xMCA4OS43LTg5LjcgOTkuNy05OS44IDE0LjMtMTQuMyAzNy42LTE0LjMgNTEuOSAwIDEyLjggMTIuOCAxNyAzNS0zLjUgNTUuNGw0NCA0NC4zYzMxLjItMzEuMiAzOC41LTY3LjYgMjguOS0xMDEuMiAyOS4yLTQuMSA1MS45LTI5LjIgNTEuOS01OS41IDAtMzMuMi0yNi44LTYwLjEtNTkuOC02MC4xLTMwLjMgMC01NS40IDIyLjUtNTkuNSA1MS42LTMzLjgtOS45LTcxLjctMS41LTk4LjMgMjUuMS0xOC4zIDE5LjEtNzEuMSA3MS41LTk5LjYgOTkuOXpNMzk2LjQgMzYwLjdjOC4yLTMyLjctLjktNjguNS0yNi4zLTkzLjktMTEuOC0xMi4yIDUgNC43LTk5LjUtOTkuN2wtNDQuMyA0NC4zIDk5LjcgOTkuN2MxNC4zIDE0LjMgMTQuMyAzNy42IDAgNTEuOS0xMi44IDEyLjgtMzUgMTctNTUuNC0zLjVsLTQ0IDQ0LjNjMjcuNiAzMC4yIDY4IDM4LjggMTAyLjcgMjggNS41IDI3LjQgMjkuNyA0OC4xIDU4LjkgNDguMSAzMyAwIDU5LjgtMjYuOCA1OS44LTYwLjEgMC0zMC4yLTIyLjUtNTUtNTEuNi01OS4xem0tODQuMy01My4xbC00NC00NC4zYy04NyA4Ni40LTUwLjQgNTAuNC05OS43IDk5LjgtMTQuMyAxNC4zLTM3LjYgMTQuMy01MS45IDAtMTMuMS0xMy40LTE2LjktMzUuMyAzLjItNTUuNGwtNDQtNDQuM2MtMzAuMiAzMC4yLTM4IDY1LjItMjkuNSA5OC4zLTI2LjcgNi00Ni4yIDI5LjktNDYuMiA1OC4yIDAgMzMuMyAyNi44IDYwLjEgNTkuOCA2MC4xIDI4LjYgMCA1Mi41LTE5LjggNTguNi00Ni43IDMyLjcgOC4yIDY4LjUtLjYgOTQuMi0yNiAzMi4xLTMyIDEyLjItMTIuNCA5OS41LTk5Ljd6Il0KICAgIH07CiAgICBmYVdlaXhpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWl4aW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFkNyIsICJNMzg1LjIgMTY3LjZjNi40IDAgMTIuNiAuMyAxOC44IDEuMS0xNi42LTc4LjQtMTAwLjctMTM2LjctMTk2LjMtMTM2LjctMTA3LjIgMC0xOTQuNyA3Mi44LTE5NC43IDE2NS40IDAgNTMuNCAyOS4zIDk3LjUgNzcuOSAxMzEuNmwtMTkuMyA1OC42IDY4LTM0LjFjMjQuNCA0LjggNDMuOCA5LjcgNjguMiA5LjcgNi4yIDAgMTIuMS0uMyAxOC4zLS44LTQtMTIuOS02LjItMjYuNi02LjItNDAuOC0uMS04NC45IDcyLjktMTU0IDE2NS4zLTE1NHpNMjgwLjcgMTE0LjdjMTQuNSAwIDI0LjIgOS43IDI0LjIgMjQuNCAwIDE0LjUtOS43IDI0LjItMjQuMiAyNC4yLTE0LjggMC0yOS4zLTkuNy0yOS4zLTI0LjIgLjEtMTQuNyAxNC42LTI0LjQgMjkuMy0yNC40ek0xNDQuMyAxNjMuM2MtMTQuNSAwLTI5LjMtOS43LTI5LjMtMjQuMiAwLTE0LjggMTQuOC0yNC40IDI5LjMtMjQuNCAxNC44IDAgMjQuNCA5LjcgMjQuNCAyNC40IDAgMTQuNi05LjYgMjQuMi0yNC40IDI0LjJ6TTU2MyAzMTkuNGMwLTc3LjktNzcuOS0xNDEuMy0xNjUuNC0xNDEuMy05Mi43IDAtMTY1LjQgNjMuNC0xNjUuNCAxNDEuM1MzMDUgNDYwLjcgMzk3LjYgNDYwLjdjMTkuMyAwIDM4LjktNS4xIDU4LjYtOS45bDUzLjQgMjkuMy0xNC44LTQ4LjZDNTM0IDQwMi4xIDU2MyAzNjMuMiA1NjMgMzE5LjR6TTM0My45IDI5NC45Yy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjggMCAyNC40IDkuNyAyNC40IDE5LjMgMCAxMC05LjcgMTkuNi0yNC40IDE5LjZ6bTEwNy4xIDBjLTkuNyAwLTE5LjMtOS43LTE5LjMtMTkuNiAwLTkuNyA5LjctMTkuMyAxOS4zLTE5LjMgMTQuNSAwIDI0LjQgOS43IDI0LjQgMTkuMyAuMSAxMC05LjkgMTkuNi0yNC40IDE5LjZ6Il0KICAgIH07CiAgICBmYUdydW50ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdydW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYWQiLCAiTTYxLjYgMTg5LjNjLTEuMSAxMCA1LjIgMTkuMSA1LjIgMTkuMSAuNy03LjUgMi4yLTEyLjggNC0xNi42IC40IDEwLjMgMy4yIDIzLjUgMTIuOCAzNC4xIDYuOSA3LjYgMzUuNiAyMy4zIDU0LjkgNi4xIDEgMi40IDIuMSA1LjMgMyA4LjUgMi45IDEwLjMtMi43IDI1LjMtMi43IDI1LjNzMTUuMS0xNy4xIDEzLjktMzIuNWMxMC44LS41IDIxLjQtOC40IDIxLjEtMTkuNSAwIDAtMTguOSAxMC40LTM1LjUtOC44LTkuNy0xMS4yLTQwLjktNDItODMuMS0zMS44IDQuMyAxIDguOSAyLjQgMTMuNSA0LjFsLS4xIDBjLTQuMiAyLTYuNSA3LjEtNyAxMnptMjguMy0xLjhjMTkuNSAxMSAzNy40IDI1LjcgNDQuOSAzNy01LjcgMy4zLTIxLjcgMTAuNC0zOC0xLjctMTAuMy03LjYtOS44LTI2LjItNi45LTM1LjN6TTIzMiAyMzMuM2MtMS4yIDE1LjUgMTMuOSAzMi41IDEzLjkgMzIuNXMtNS42LTE1LTIuNy0yNS4zYy45LTMuMiAyLTYgMy04LjUgMTkuMyAxNy4zIDQ4IDEuNSA1NC44LTYuMSA5LjYtMTAuNiAxMi4zLTIzLjggMTIuOC0zNC4xIDEuOCAzLjggMy40IDkuMSA0IDE2LjYgMCAwIDYuNC05LjEgNS4yLTE5LjEtLjYtNS0yLjktMTAtNy0xMS44bC0uMSAwYzQuNi0xLjggOS4yLTMuMiAxMy41LTQuMS00Mi4zLTEwLjItNzMuNCAyMC42LTgzLjEgMzEuOC0xNi43IDE5LjItMzUuNSA4LjgtMzUuNSA4LjgtLjIgMTAuOSAxMC40IDE4LjkgMjEuMiAxOS4zem02Mi43LTQ1LjhjMyA5LjEgMy40IDI3LjctNyAzNS40LTE2LjMgMTIuMS0zMi4yIDUtMzcuOSAxLjYgNy41LTExLjQgMjUuNC0yNiA0NC45LTM3em0tMTM0LjQgMjMxbC0yOS40IDBjLTUuNSAwLTguMiAxLjYtOS41IDIuOS0xLjkgMi0yLjIgNC43LS45IDguMSAzLjUgOS4xIDExLjQgMTYuNSAxMy43IDE4LjYgMy4xIDIuNyA3LjUgNC4zIDExLjggNC4zIDQuNCAwIDguMy0xLjcgMTEtNC42IDcuNS04LjIgMTEuOS0xNy4xIDEzLTE5LjggLjYtMS41IDEuMy00LjUtLjktNi44LTEuOC0xLjgtNC43LTIuNy04LjgtMi43ek0zNDkuNSAzMTcuM2MtMi40IDE3LjktMTMgMzMuOC0yNC42IDQzLjctMy4xLTIyLjctMy43LTU1LjUtMy43LTYyLjQgMC0xNC43IDkuNS0yNC41IDEyLjItMjYuMSAyLjUtMS41IDUuNC0zIDguMy00LjYgMTgtOS42IDQwLjQtMjEuNiA0MC40LTQzLjcgMC0xNi4yLTkuMy0yMy4yLTE1LjQtMjcuOC0uOC0uNi0xLjUtMS4xLTIuMi0xLjctMi4xLTEuNy0zLjctMy00LjMtNC40LTQuNC05LjgtMy42LTM0LjItMS43LTM3LjYgLjYtLjYgMTYuNy0yMC45IDExLjgtMzkuMi0yLTcuNC02LjktMTMuMy0xNC4xLTE3LTUuMy0yLjctMTEuOS00LjItMTkuNS00LjUtLjEtMi0uNS0zLjktLjktNS45LS42LTIuNi0xLjEtNS4zLS45LTguMSAuNC00LjcgLjgtOSAyLjItMTEuMyA4LjQtMTMuMyAyOC44LTE3LjYgMjktMTcuNmwxMi4zLTIuNC04LjEtOS41Yy0uMS0uMi0xNy4zLTE3LjUtNDYuMy0xNy41LTcuOSAwLTE2IDEuMy0yNC4xIDMuOS0yNC4yIDcuOC00Mi45IDMwLjUtNDkuNCAzOS4zLTMuMS0xLTYuMy0xLjktOS42LTIuNy00LjItMTUuOCA5LTM4LjUgOS0zOC41cy0xMy42LTMtMzMuNyAxNS4yYy0yLjYtNi41LTguMS0yMC41LTEuOC0zNy4yLTI5LjUgMTAuNC0zNi45IDI2LjMtMzkuMSA0MC43LTcuNi01LjQtNi43LTIzLjEtNy4yLTI3LjYtNy41IC45LTI5LjIgMjEuOS0yOC4yIDQ4LjMtMiAuNS0zLjkgMS4xLTUuOSAxLjctNi41LTguOC0yNS4xLTMxLjUtNDkuNC0zOS4zLTcuOS0yLjItMTYtMy41LTIzLjktMy41LTI5IDAtNDYuMSAxNy4zLTQ2LjMgMTcuNWwtOC4xIDkuNCAxMi4zIDIuNGMuMiAwIDIwLjYgNC4zIDI5IDE3LjYgMS40IDIuMiAxLjggNi42IDIuMiAxMS4zIC4yIDIuOC0uNCA1LjUtLjkgOC4xLS40IDEuOS0uOCAzLjktLjkgNS45LTcuNyAuMy0xNC4yIDEuOC0xOS41IDQuNS03LjIgMy43LTEyLjEgOS42LTE0LjEgMTctNSAxOC4yIDExLjIgMzguNSAxMS44IDM5LjIgMS45IDMuNCAyLjcgMjcuOC0xLjcgMzcuNi0uNiAxLjQtMi4yIDIuNy00LjMgNC40LS43IC41LTEuNCAxLjEtMi4yIDEuNy02LjEgNC42LTE1LjQgMTEuNy0xNS40IDI3LjggMCAyMi4xIDIyLjQgMzQuMSA0MC40IDQzLjcgMyAxLjYgNS44IDMuMSA4LjMgNC42IDIuNyAxLjYgMTIuMiAxMS40IDEyLjIgMjYuMSAwIDYuOS0uNiAzOS43LTMuNyA2Mi40LTExLjYtOS45LTIyLjItMjUuOS0yNC42LTQzLjggMCAwLTI5LjIgMjIuNi0yMC42IDcwLjggNS4yIDI5LjUgMjMuMiA0Ni4xIDQ3IDU0LjcgOC44IDE5LjEgMjkuNCA0NS43IDY3LjMgNDkuNiAxNC40IDExLjggMzQuNCAxOS41IDYzLjYgMTkuNWwuMiAwYzI5LjEgMCA0OS4xLTcuNyA2My42LTE5LjUgMzcuOS0zLjkgNTguNS0zMC41IDY3LjMtNDkuNiAyMy44LTguNyA0MS43LTI1LjIgNDctNTQuNyA4LjItNDguNC0yMS4xLTcwLjktMjEuMS03MC45ek0zMDYgMzcuN2M1LjYtMS44IDExLjYtMi43IDE3LjctMi43IDExIDAgMTkuOSAzIDI0LjcgNS0zLjEgMS40LTYuNCAzLjItOS43IDUuMy0yLjQtLjQtNS42LS44LTkuMi0uOC0xMC41IDAtMjAuNSAzLjEtMjguNyA4LjktMTIuMyA4LjctMTggMTYuOS0yMC43IDIyLjQtMi4yLTEuMy00LjUtMi41LTcuMS0zLjctMS42LS44LTMuMS0xLjUtNC43LTIuMiA2LjEtOS4xIDE5LjktMjYuNSAzNy43LTMyLjJ6bTIxIDE4LjJjLS44IDEtMS42IDIuMS0yLjMgMy4yLTMuMyA1LjItMy45IDExLjYtNC40IDE3LjgtLjUgNi40LTEuMSAxMi41LTQuNCAxNy00LjIgLjgtOC4xIDEuNy0xMS41IDIuNy0yLjMtMy4xLTUuNi03LTEwLjUtMTEuMiAxLjQtNC44IDUuNS0xNi4xIDEzLjUtMjIuNSA1LjYtNC4zIDEyLjItNi43IDE5LjYtN3pNNDUuOSA0NS4zYy0zLjMtMi4yLTYuNi00LTkuNy01LjMgNC44LTIgMTMuNy01IDI0LjctNSA2LjEgMCAxMiAuOSAxNy43IDIuNyAxNy44IDUuOCAzMS42IDIzLjIgMzcuNyAzMi4xLTEuNiAuNy0zLjIgMS40LTQuOCAyLjItMi41IDEuMi00LjkgMi41LTcuMSAzLjctMi42LTUuNC04LjMtMTMuNy0yMC43LTIyLjQtOC4zLTUuOC0xOC4yLTguOS0yOC44LTguOS0zLjQgLjEtNi42IC41LTkgLjl6TTkwLjYgODUuNGMtNC45IDQuMi04LjMgOC0xMC41IDExLjItMy40LS45LTcuMy0xLjktMTEuNS0yLjctMy4zLTQuNC0zLjgtMTAuNS00LjMtMTYuOS0uNS02LjItMS4xLTEyLjYtNC40LTE3LjgtLjctMS4xLTEuNS0yLjItMi4zLTMuMiA3LjQgLjMgMTQgMi42IDE5LjUgNyA4IDYuMyAxMi4xIDE3LjYgMTMuNSAyMi40ek01OC40IDI1OS45Yy0yLjctMS42LTUuNi0zLjEtOC40LTQuNi0xNC45LTgtMzAuMi0xNi4zLTMwLjItMzAuNSAwLTExLjEgNC4zLTE0LjYgOC45LTE4LjJsLjUtLjRjLjctLjYgMS40LTEuMiAyLjItMS44LS45IDcuMi0xLjkgMTMuMy0yLjcgMTQuOSAwIDAgMTIuMS0xNSAxNS43LTQ0LjMgMS40LTExLjUtMS4xLTM0LjMtNS4xLTQzIC4yIDQuOSAwIDkuOC0uMyAxNC40LS40LS44LS44LTEuNi0xLjMtMi4yLTMuMi00LTExLjgtMTcuNS05LjQtMjYuNiAuOS0zLjUgMy4xLTYgNi43LTcuOCAzLjgtMS45IDguOC0yLjkgMTUuMS0yLjkgMTIuMyAwIDI1LjkgMy43IDMyLjkgNiAyNS4xIDggNTUuNCAzMC45IDY0LjEgMzcuNyAuMiAuMiAuNCAuMyAuNCAuM2w1LjYgMy45LTMuNS01LjhjLS4yLS4zLTE5LjEtMzEuNC01My4yLTQ2LjUgMi0yLjkgNy40LTguMSAyMS42LTE1LjEgMjEuNC0xMC41IDQ2LjUtMTUuOCA3NC4zLTE1LjggMjcuOSAwIDUyLjkgNS4zIDc0LjMgMTUuOCAxNC4yIDYuOSAxOS42IDEyLjIgMjEuNiAxNS4xLTM0IDE1LjEtNTIuOSA0Ni4yLTUzLjEgNDYuNWwtMy41IDUuOCA1LjYtMy45cy4yLS4xIC40LS4zYzguNy02LjggMzktMjkuOCA2NC4xLTM3LjcgNy0yLjIgMjAuNi02IDMyLjktNiA2LjMgMCAxMS4zIDEgMTUuMSAyLjkgMy41IDEuOCA1LjcgNC40IDYuNyA3LjggMi41IDkuMS02LjEgMjIuNi05LjQgMjYuNi0uNSAuNi0uOSAxLjMtMS4zIDIuMi0uMy00LjYtLjUtOS41LS4zLTE0LjQtNCA4LjgtNi41IDMxLjUtNS4xIDQzIDMuNiAyOS4zIDE1LjcgNDQuMyAxNS43IDQ0LjMtLjgtMS42LTEuOC03LjctMi43LTE0LjkgLjcgLjYgMS41IDEuMiAyLjIgMS44bC41IC40YzQuNiAzLjcgOC45IDcuMSA4LjkgMTguMiAwIDE0LjItMTUuNCAyMi41LTMwLjIgMzAuNS0yLjkgMS41LTUuNyAzLjEtOC40IDQuNi04LjcgNS0xOCAxNi43LTE5LjEgMzQuMi0uOSAxNC42IC45IDQ5LjkgMy40IDc1LjktMTIuNCA0LjgtMjYuNyA2LjQtMzkuNyA2LjgtMi00LjEtMy45LTguNS01LjUtMTMuMS0uNy0yLTE5LjYtNTEuMS0yNi40LTYyLjIgNS41IDM5IDE3LjUgNzMuNyAyMy41IDg5LjYtMy41LS41LTcuMy0uNy0xMS43LS43bC0xMTcgMGMtNC40IDAtOC4zIC4zLTExLjcgLjcgNi0xNS45IDE4LjEtNTAuNiAyMy41LTg5LjYtNi44IDExLjItMjUuNyA2MC4zLTI2LjQgNjIuMi0xLjYgNC42LTMuNSA5LTUuNSAxMy4xLTEzLS40LTI3LjItMi0zOS43LTYuOCAyLjUtMjYgNC4zLTYxLjIgMy40LTc1LjktLjktMTcuNC0xMC4zLTI5LjItMTktMzQuMnpNMzUuMSA0MDQuNmMtMTIuMS0yMC04LjctNTQuMS0zLjctNTkuMSAxMC45IDM0LjQgNDcuMiA0NC4zIDc0LjQgNDUuNC0yLjcgNC4yLTUuMiA3LjYtNyAxMGwtMS40IDEuNGMtNy4yIDcuOC04LjYgMTguNS00LjEgMzEuOC0yMi43LS4xLTQ2LjMtOS44LTU4LjItMjkuNXptNDUuNyA0My41YzYgMS4xIDEyLjIgMS45IDE4LjYgMi40IDMuNSA4IDcuNCAxNS45IDEyLjMgMjMuMS0xNC40LTUuOS0yNC40LTE2LTMwLjktMjUuNXptMTExLjUgNTAuMWMtNjAuNi0uMS03OC4zLTQ1LjgtODQuOS02NC43LTMuNy0xMC41LTMuNC0xOC4yIC45LTIzLjEgMi45LTMuMyA5LjUtNy4yIDI0LjYtNy4ybDExOC44IDBjMTUuMSAwIDIxLjggMy45IDI0LjYgNy4yIDQuMiA0LjggNC41IDEyLjYgLjkgMjMuMS02LjYgMTguOC0yNC4zIDY0LjYtODQuOSA2NC43em04MC42LTI0LjZjNC45LTcuMiA4LjgtMTUuMSAxMi4zLTIzLjEgNi40LS41IDEyLjYtMS4zIDE4LjYtMi40LTYuNSA5LjUtMTYuNSAxOS42LTMwLjkgMjUuNXptNzYuNi02OWMtMTIgMTkuNy0zNS42IDI5LjMtNTguMSAyOS43IDQuNS0xMy4zIDMuMS0yNC4xLTQuMS0zMS44LS40LS41LS45LTEtMS40LTEuNS0xLjgtMi40LTQuMy01LjgtNy0xMCAyNy4yLTEuMiA2My41LTExIDc0LjQtNDUuNCA1IDUgOC40IDM5LjEtMy44IDU5ek0xOTIuMiAxODcuN2wuMiAwYzEyLjctLjEgMjcuMi0xNy44IDI3LjItMTcuOC05LjkgNi0xOC44IDguMS0yNy4zIDguMy04LjUtLjItMTcuNC0yLjMtMjcuMy04LjMgMCAwIDE0LjUgMTcuNiAyNy4yIDE3Ljh6bTYxLjcgMjMwLjdsLTI5LjQgMGMtNC4yIDAtNy4yIC45LTguOSAyLjctMi4yIDIuMy0xLjUgNS4yLS45IDYuNyAxIDIuNiA1LjUgMTEuMyAxMyAxOS4zIDIuNyAyLjkgNi42IDQuNSAxMSA0LjVzOC43LTEuNiAxMS44LTQuMmMyLjMtMiAxMC4yLTkuMiAxMy43LTE4LjEgMS4zLTMuMyAxLTYtLjktNy45LTEuMy0xLjMtNC0yLjktOS40LTN6Il0KICAgIH07CiAgICBmYVJvY2tybXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicm9ja3JtcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2U5IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMy40IDQyNy41bC05MCAwLTExMi0xMzEuM2MtMTcuOS0yMC40LTMuOS01Ni4xIDI2LjYtNTYuMWw3NS4zIDAtODQuNi05OS4zLTg0LjMgOTguOS05MCAwIDE0Ny4xLTE3Mi41YzE0LjQtMTguNCA0MS4zLTE3LjMgNTQuNSAwTDQxMy43IDI1Mi4zYzE5IDIyLjggMiA1Ny4yLTI3LjYgNTYuMS0uNiAwLTc0LjIgLjItNzQuMiAuMkw0MTMuNCA0MjcuNXoiXQogICAgfTsKICAgIGZhVW5zcGxhc2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5zcGxhc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YyIsICJNNDQ4IDIzMC4ybDAgMjQ5LjgtNDQ4IDAgMC0yNDkuOCAxNDEuMSAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45IDE0MS4xIDB6TTMwNi45IDMybC0xNjUuNyAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45eiJdCiAgICB9OwogICAgZmFTcXVhcmVJbnN0YWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJpbnN0YWdyYW0tc3F1YXJlIl0sICJlMDU1IiwgIk0xOTQuNCAyMTEuN2E1My4zIDUzLjMgMCAxIDAgNTkuMiA4OC42IDUzLjMgNTMuMyAwIDEgMCAtNTkuMi04OC42em0xNDIuMy02OC40Yy01LjItNS4yLTExLjUtOS4zLTE4LjQtMTItMTguMS03LjEtNTcuNi02LjgtODMuMS02LjUtNC4xIDAtNy45IC4xLTExLjIgLjFzLTcuMiAwLTExLjQtLjFjLTI1LjUtLjMtNjQuOC0uNy04Mi45IDYuNS02LjkgMi43LTEzLjEgNi44LTE4LjQgMTJzLTkuMyAxMS41LTEyIDE4LjRjLTcuMSAxOC4xLTYuNyA1Ny43LTYuNSA4My4yIDAgNC4xIC4xIDcuOSAuMSAxMS4xczAgNy0uMSAxMS4xYy0uMiAyNS41LS42IDY1LjEgNi41IDgzLjIgMi43IDYuOSA2LjggMTMuMSAxMiAxOC40czExLjUgOS4zIDE4LjQgMTJjMTguMSA3LjEgNTcuNiA2LjggODMuMSA2LjUgNC4xIDAgNy45LS4xIDExLjItLjFzNy4yIDAgMTEuNCAuMWMyNS41IC4zIDY0LjggLjcgODIuOS02LjUgNi45LTIuNyAxMy4xLTYuOCAxOC40LTEyczkuMy0xMS41IDEyLTE4LjRjNy4yLTE4IDYuOC01Ny40IDYuNS04MyAwLTQuMi0uMS04LjEtLjEtMTEuNHMwLTcuMSAuMS0xMS40Yy4zLTI1LjUgLjctNjQuOS02LjUtODMtMi43LTYuOS02LjgtMTMuMS0xMi0xOC40bDAgLjJ6bS02Ny4xIDQ0LjVjMTguMSAxMi4xIDMwLjYgMzAuOSAzNC45IDUyLjJzLS4yIDQzLjUtMTIuMyA2MS42Yy02IDktMTMuNyAxNi42LTIyLjYgMjIuNnMtMTkgMTAuMS0yOS42IDEyLjJjLTIxLjMgNC4yLTQzLjUtLjItNjEuNi0xMi4zcy0zMC42LTMwLjktMzQuOS01Mi4yIC4yLTQzLjUgMTIuMi02MS42IDMwLjktMzAuNiA1Mi4yLTM0LjkgNDMuNSAuMiA2MS42IDEyLjJsLjEgMHptMjkuMi0xLjNjLTMuMS0yLjEtNS42LTUuMS03LjEtOC42cy0xLjgtNy4zLTEuMS0xMS4xIDIuNi03LjEgNS4yLTkuOCA2LjEtNC41IDkuOC01LjIgNy42LS40IDExLjEgMS4xIDYuNSAzLjkgOC42IDcgMy4yIDYuOCAzLjIgMTAuNmMwIDIuNS0uNSA1LTEuNCA3LjNzLTIuNCA0LjQtNC4xIDYuMi0zLjkgMy4yLTYuMiA0LjItNC44IDEuNS03LjMgMS41Yy0zLjggMC03LjUtMS4xLTEwLjYtMy4ybC0uMSAwek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzU3IDM4OWMtMTguNyAxOC43LTQxLjQgMjQuNi02NyAyNS45LTI2LjQgMS41LTEwNS42IDEuNS0xMzIgMC0yNS42LTEuMy00OC4zLTcuMi02Ny0yNS45cy0yNC42LTQxLjQtMjUuOC02N2MtMS41LTI2LjQtMS41LTEwNS42IDAtMTMyIDEuMy0yNS42IDcuMS00OC4zIDI1LjgtNjdzNDEuNS0yNC42IDY3LTI1LjhjMjYuNC0xLjUgMTA1LjYtMS41IDEzMiAwIDI1LjYgMS4zIDQ4LjMgNy4xIDY3IDI1LjhzMjQuNiA0MS40IDI1LjggNjdjMS41IDI2LjMgMS41IDEwNS40IDAgMTMxLjktMS4zIDI1LjYtNy4xIDQ4LjMtMjUuOCA2N2wwIC4xeiJdCiAgICB9OwogICAgZmFJbnN0YWdyYW1TcXVhcmUgPSBmYVNxdWFyZUluc3RhZ3JhbTsKICAgIGZhRmlyc3RPcmRlckFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdC1vcmRlci1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwYSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDcuOGEyNDAuMiAyNDAuMiAwIDEgMSAwIDQ4MC40IDI0MC4yIDI0MC4yIDAgMSAxIDAtNDgwLjR6bTAgMjAuNWEyMTkuNyAyMTkuNyAwIDEgMCAwIDQzOS40IDIxOS43IDIxOS43IDAgMSAwIDAtNDM5LjR6bTAgOC4yYTIxMS41IDIxMS41IDAgMSAxIDAgNDIzIDIxMS41IDIxMS41IDAgMSAxIDAtNDIzem0xODYuMiAyNjBjLTQuNCAxNy4xLTExLjIgMzMuNS0yMC4xIDQ4LjdsLTc0LjEtMzUuOSA2MS41IDU0LjhjLTEwLjYgMTQuMS0yMy4yIDI2LjYtMzcuMiAzNy4zbC01NC44LTYxLjYgMzUuOSA3NC4zYy0xNS4yIDktMzEuNiAxNS44LTQ4LjYgMjAuMmwtMjcuMy03OC41IDQuOCA4Mi45Yy04LjYgMS4yLTE3LjQgMS44LTI2LjMgMS44cy0xNy43LS42LTI2LjMtMS44bDQuOC04Mi41LTI3LjIgNzhjLTE3LjEtNC41LTMzLjQtMTEuMy00OC43LTIwLjJsMzUuOS03NC4zLTU0LjkgNjEuNmMtMTQtMTAuNy0yNi42LTIzLjItMzcuMi0zNy4zbDYxLjYtNTQuOS03NC4zIDM1LjlDODAuNyAzMzggNzQgMzIxLjcgNjkuNSAzMDQuNmw3Ny44LTI3LjEtODIuMiA0LjhjLTEuMi04LjYtMS44LTE3LjMtMS44LTI2LjIgMC05IC42LTE3LjggMS44LTI2LjVsODIuNCA0LjgtNzcuOS0yNy4yYzQuNS0xNy4xIDExLjMtMzMuNSAyMC4yLTQ4LjdsNzQuMiAzNS45LTYxLjUtNTQuOWMxMC43LTE0IDIzLjItMjYuNiAzNy4zLTM3LjJsNTQuOCA2MS41LTM1LjgtNzQuMmMxNS4yLTguOSAzMS42LTE1LjcgNDguNi0yMC4xbDI2LjkgNzcuMi00LjctODEuNmM4LjYtMS4yIDE3LjQtMS44IDI2LjMtMS44czE3LjcgLjYgMjYuMyAxLjhsLTQuNyA4Mi4yIDI3LTc3LjhjMTcuMyA0LjUgMzMuNiAxMS40IDQ4LjYgMjAuMmwtMzUuOCA3NC4xIDU0LjctNjEuNWMxNC4xIDEwLjcgMjYuNiAyMy4yIDM3LjIgMzcuMmwtNjEuNCA1NC44IDc0LjEtMzUuOWM4LjkgMTUuMiAxNS43IDMxLjYgMjAuMiA0OC42bC03Ny44IDI3LjEgODIuMi00LjdjMS4yIDguNyAxLjggMTcuNSAxLjggMjYuNSAwIDguOS0uNiAxNy42LTEuOCAyNi4ybC04Mi4xLTQuNyA3Ny43IDI3LjF6Il0KICAgIH07CiAgICBmYUZ1bGNydW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZnVsY3J1bSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNTBiIiwgIk02My44IDE2NC4xTDI4LjQgMjA3LjctNyAxNjQuMSAyOC40IDEyMC42IDYzLjggMTY0LjF6TTExMi4yIDBsLTIwLjUgMTk4LjItNTEgNTcuOCA1MSA1Ny44IDIwLjUgMTk4LjIgMC0yMTEuMS00MS4xLTQ0LjkgNDEuMS00NC45IDAtMjExLjF6bTc5LjcgMTY0LjFsMzUuNCA0My42IDM1LjQtNDMuNi0zNS40LTQzLjUtMzUuNCA0My41em0tNDguNSA0N2w0MS4xIDQ0LjktNDEuMSA0NC45IDAgMjExLjEgMjAuNi0xOTguMiA1MS01Ny44LTUxLTU3LjgtMjAuNi0xOTguMiAwIDIxMS4xeiJdCiAgICB9OwogICAgZmFCcmF2ZVJldmVyc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnJhdmUtcmV2ZXJzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjNkIiwgIk0yOTguNSAwYzMgMCA1LjggMS4zIDcuOCAzLjZsMzguMSA0NGMuNS0uMSAxLS4yIDEuNS0uMyA5LjItMS42IDE4LjYtMi4yIDI3LjctMS4yIDExLjYgMS40IDIxLjUgNS40IDI4LjkgMTIuOSA3LjcgNy44IDE1LjQgMTUuOCAyMi42IDIzLjYgMi41IDIuNyA0LjkgNS4yIDYuOSA3LjQgLjcgLjggMS40IDEuNSAxLjkgMiAzLjQgMy43IDQuMiA4LjEgMi43IDExLjlsLTkuOCAyNC42IDEzLjEgMzguMWMuNyAyIC44IDQuMSAuMiA2LjItLjEgLjQtLjEgLjQtLjUgMi4xbC0xLjUgNS44Yy0xLjYgNi4zLTMuNSAxMy4zLTUuNCAyMC45LTUuNiAyMS42LTExLjIgNDMuMi0xNi40IDYzLjQtMTIuOSA0OS45LTIxLjQgODIuNy0yMy40IDkwLjktMTEuMSA0NC41LTE5LjkgNjAtNDguMyA4MC4zLTI0LjkgMTcuOC03Ni44IDUzLjYtODYuOCA2MC0xIC42LTIgMS4zLTMuNCAyLjMtLjUgLjQtMy4yIDIuMi0zLjkgMi43LTQuOSAzLjMtOC4zIDUuNS0xMi4xIDcuMy00LjcgMi4yLTkuMyAzLjUtMTMuOSAzLjVzLTkuMS0xLjItMTMuOS0zLjVjLTMuNy0xLjgtNy4yLTMuOS0xMi4xLTcuMy0uOC0uNS0zLjQtMi40LTMuOS0yLjctMS40LTEtMi41LTEuNy0zLjQtMi4zLTEwLTYuNC02MS45LTQyLjEtODYuOC02MC0yOC40LTIwLjQtMzcuMi0zNS44LTQ4LjMtODAuMy0yLTguMi0xMC41LTQxLTIzLjMtOTAuNS01LjMtMjAuNi0xMC45LTQyLjItMTYuNS02My44LTItNy42LTMuOC0xNC42LTUuNC0yMC45bC0xLjUtNS44LS41LTIuMWMtLjUtMi0uNC00LjIgLjItNi4ybDEzLjEtMzguMS05LjktMjQuNWMtMS41LTMuOC0uNy04LjIgMi0xMS4yIDEuMi0xLjMgMS44LTIgMi42LTIuOCAyLTIuMiA0LjQtNC43IDYuOS03LjQgNy4zLTcuNyAxNS0xNS43IDIyLjctMjMuNSA3LjQtNy41IDE3LjMtMTEuNiAyOC45LTEyLjkgOS4xLTEuMSAxOC41LS41IDI3LjcgMS4yIC41IC4xIDEgLjIgMS41IC4zbDM4LjEtNDRjMi0yLjQgNC44LTMuNyA3LjgtMy43bDE0OCAwem0tNC43IDIxLjFsLTEzOC42IDAtMzkuMSA0NS4xYy0yLjYgMy02LjcgNC4zLTEwLjYgMy4yLS4yLS4xLS43LS4yLTEuNS0uNC0xLjMtLjMtMi45LS42LTQuNS0uOS03LjQtMS4zLTE0LjktMS44LTIxLjctMS03LjMgLjktMTMgMy4yLTE2LjYgNi45LTcuNiA3LjctMTUuMiAxNS42LTIyLjMgMjMuMy0xLjcgMS44LTMuMyAzLjUtNC44IDUuMWw4LjggMjJjMSAyLjQgMSA1IC4yIDcuNUwyOS43IDE3MC42Yy40IDEuNCAuNSAxLjkgMS4yIDQuOCAxLjYgNi4zIDMuNSAxMy4zIDUuNCAyMC45IDUuNiAyMS42IDExLjIgNDMuMiAxNi40IDYzLjQgMTIuOSA1MCAyMS40IDgyLjggMjMuNCA5MSAxMC4xIDQwLjEgMTYuNCA1MS4zIDQwLjIgNjguMyAyNC42IDE3LjYgNzYuMyA1My4yIDg1LjkgNTkuMyAxLjIgLjggMi41IDEuNiA0IDIuNyAuNiAuNCAzLjIgMi4yIDMuOSAyLjcgNCAyLjggNi43IDQuNCA5LjIgNS42IDIuMiAxIDMuOSAxLjUgNS4xIDEuNXMyLjktLjUgNS4xLTEuNWMyLjUtMS4yIDUuMi0yLjggOS4yLTUuNiAuNy0uNSAzLjMtMi4zIDMuOS0yLjcgMS42LTEuMSAyLjgtMS45IDQtMi43IDkuNi02LjEgNjEuMy00MS43IDg1LjktNTkuMyAyMy44LTE3LjEgMzAuMi0yOC4yIDQwLjEtNjguMyAyLjEtOC4zIDEwLjUtNDEuMSAyMy4zLTkwLjcgNS4zLTIwLjYgMTAuOS00Mi4yIDE2LjUtNjMuOCAyLTcuNiAzLjgtMTQuNiA1LjQtMjAuOSAuNy0yLjkgLjktMy40IDEuMi00LjhsLTEzLjMtMzguOGMtLjgtMi40LS44LTUuMSAuMi03LjVsOC44LTIyYy0xLjUtMS42LTMuMS0zLjMtNC44LTUuMS03LjItNy42LTE0LjctMTUuNS0yMi4zLTIzLjMtMy43LTMuNy05LjMtNi0xNi42LTYuOS02LjgtLjgtMTQuNC0uMy0yMS43IDEtMS43IC4zLTMuMiAuNi00LjUgLjktLjggLjItMS4zIC4zLTEuNSAuNC0zLjggMS4xLTcuOS0uMi0xMC42LTMuMkwyOTMuOCAyMS4xek0yMjQuNSAzMTZjMi44IDAgMjAuOSA2LjUgMzUuNCAxNC4xczI1IDEzIDI4LjMgMTUuMiAxLjMgNi4yLTEuNyA4LjQtNDQuMSAzNC42LTQ4LjEgMzguMi05LjggOS41LTEzLjggOS41LTkuOC01LjktMTMuOC05LjUtNDUuMS0zNi00OC4xLTM4LjItNS4xLTYuMi0xLjctOC40IDEzLjktNy41IDI4LjMtMTUuMiAzMi41LTE0LjEgMzUuNC0xNC4xbC0uMiAwem0uMS0yMzAuN2MuNyAwIDguOCAuMiAyMC41IDQuMiAxMi4zIDQuMiAyNS43IDkuNCAzMS45IDkuNHM1MS45LTguOSA1MS45LTguOSA1NC4yIDY2LjcgNTQuMiA4MS02LjggMTgtMTMuNyAyNS40LTM2LjggMzkuOC00MC43IDQzLjktMTEuOSAxMC41LTcuMSAyMS44IDExLjcgMjUuOCAzLjkgNDAuNC0yMSAyNC40LTI5LjQgMjIuOC0yOC40LTEyLjItMzUuNy0xNy4xLTMwLjUtMjQuMy0zMC41LTMxLjggMjQtMjAuOCAyOC40LTIzLjkgMjQuNy0xNC44IDI1LjEtMTkuNCAuMy02LTUuNy0xNy40LTE2LjctMjYuNy0xNC45LTM2LjggMTkuMS0xNS40IDMxLjUtMjAuMiAzNi4yLTEzLjcgMzkuMi0xNS4xIDIuMi0yLjctNi44LTMuNi0zNC42LTQuMy00Ni4xLTEuMS0zMS4yIDguMi0zMi44IDEwLjktMyAyLjctMS40IDExLjggMTAuMSA1Mi44IDEwLjkgNjAuNiAyLjQgMTIuOS01LjggMTQuOC0yMi4xIDUuMi0yNi44IDUuMi0xOC42LTMuMy0yNi44LTUuMi02LjYtNy01LjgtMTQuOCA5LjMtNTEuNSAxMC45LTYwLjYgLjItOS4yLTEuNC0xMS44LTIxLjMtNy42LTMyLjgtMTAuOS0zNy4xIC4yLTQ2LjEgMS4xLTkuOCAyLjItNi44IDMuNiAyNi44IDEwLjQgMzkuMiAxNS4xIDI5LjcgMTAgMzEuNSAyMC4yLTkgMjUuNC0xNC45IDM2LjgtNi4xIDEyLjgtNS43IDE3LjQgMjAuNiAxNi40IDI1LjEgMTkuNCAyOC40IDE2LjQgMjguNCAyMy45LTIzLjIgMjctMzAuNSAzMS44LTI3LjIgMTUuNC0zNS43IDE3LjEtMjEuNy04LjItMjkuNC0yMi44LS44LTI5LjEgMy45LTQwLjQtMy4zLTE3LjctNy4xLTIxLjgtMzMuOC0zNi41LTQwLjctNDMuOS0xMy43LTExLjItMTMuNy0yNS40IDU0LjItODEgNTQuMi04MSA0NS44IDguOSA1MS45IDguOSAxOS41LTUuMiAzMS45LTkuNCAyMC42LTQuMiAyMC42LTQuMmwtLjMgMHoiXQogICAgfTsKICAgIGZhQXZpYW5leCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdmlhbmV4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNzQiLCAiTTQ1My4yIDMybC0zMTIgMEMxMDIuMyAzMiA2NSA2My4yIDU3LjkgMTAxLjdMMS4zIDQxMC4zQy01LjggNDQ4LjggMjAgNDgwIDU5IDQ4MGwzMTIgMGMzOC45IDAgNzYuMi0zMS4yIDgzLjMtNjkuN0w1MTEgMTAxLjhDNTE4IDYzLjIgNDkyLjIgMzIgNDUzLjIgMzJ6TTM5NSAzNzkuM2wtMzIgMTMuNS0xMTUuNC0xMTBjLTE0LjcgMTAtMjkuMiAxOS41LTQxLjcgMjcuMWwyMi4xIDY0LjItMTcuOSAxMi43LTQwLjYtNjEtNTIuNC00OC4xIDE1LjctMTUuNCA1OCAzMS4xYzkuMy0xMC41IDIwLjgtMjIuNiAzMi44LTM0LjlsLTIwLjUtMjkuNi02OC44LTk5LjggMTguOC0yOC45IDguOS00LjggMTAzLjEgMTEyLjQgNC45IDQuNWMxOS40LTE4LjggMzMuOC0zMi40IDMzLjgtMzIuNCA3LjctNi41IDIxLjUtMi45IDMwLjcgNy45IDkgMTAuNSAxMC42IDI0LjcgMi43IDMxLjMtMS44IDEuMy0xNS41IDExLjQtMzUuMyAyNS42bDQuNSA3LjMgOTQuOSAxMTkuNC02LjMgNy45eiJdCiAgICB9OwogICAgZmFOczggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibnM4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZDUiLCAiTTEwNC4zIDI2OS4ybDI2LjEgMCAwLTI2LjItMjYuMSAwIDAgMjYuMnpNMTU2LjggMjQzbC0uMS0yNi4yIDAtLjljLS4yLTEwLjQtNC40LTIwLjMtMTEuOS0yNy42cy0xNy41LTExLjMtMjcuOS0xMS4xLTIwLjMgNC40LTI3LjYgMTEuOC0xMS4zIDE3LjUtMTEuMiAyNy45bDAgLjIgMjYuNCAwIDAtLjJjLjEtMy40IDEuNS02LjYgMy45LTlzNS43LTMuNyA5LjEtMy43IDYuNyAxLjMgOS4xIDMuNyAzLjggNS42IDMuOSA5bDAgMjYuMiAyNi4zIDB6bTUyLjQgMjUuOGMwIDEyLTIuNCAyMy44LTYuOSAzNC45cy0xMS4zIDIxLjEtMTkuNyAyOS42LTE4LjUgMTUuMi0yOS42IDE5LjctMjIuOSA2LjktMzQuOSA2LjlsLS42IDBjLTI0LjIgMC00Ny4zLTkuNi02NC40LTI2LjdTMjYuMyAyOTMgMjYuMyAyNjguOGwtMjYuMyAwIDAgLjJjMCAxNS40IDMuMSAzMC43IDkgNDQuOXMxNC42IDI3LjIgMjUuNSAzOC4xIDIzLjkgMTkuNSAzOC4xIDI1LjQgMjkuNSA4LjkgNDQuOSA4LjlsLjggMGMxNS40IDAgMzAuNy0zIDQ0LjktOXMyNy4yLTE0LjYgMzguMS0yNS41IDE5LjUtMjMuOCAyNS40LTM4LjEgOC45LTI5LjUgOC45LTQ0LjlsMC0yNi0yNi4zIDAgMCAyNnptLTE1Ny4yIDBjLjEgMTcuMyA3IDMzLjkgMTkuMiA0Ni4xczI4LjggMTkuMSA0Ni4xIDE5LjEgMzMuOS02LjkgNDYuMS0xOS4xIDE5LjItMjguOCAxOS4yLTQ2LjFsLTI2LjMgMGMtLjIgMTAuMi00LjQgMjAtMTEuNyAyNy4ycy0xNy4xIDExLjItMjcuNCAxMS4yLTIwLjEtNC0yNy40LTExLjItMTEuNS0xNi45LTExLjctMjcuMmwwLTI2LTI2LjMgMCAwLTI2LjZjLjMtMTcuMyA3LjQtMzMuOCAxOS43LTQ1LjhzMjktMTguOCA0Ni4zLTE4LjYgMzMuOCA3LjIgNDUuOSAxOS41IDE4LjkgMjguOSAxOC45IDQ2LjJsMCAyNS4zIDI2LjMgMCAwLTI1LjNjMC0yNC4zLTkuNy00Ny43LTI2LjktNjQuOXMtNDAuNS0yNi45LTY0LjktMjYuOS00Ny43IDkuNy02NC45IDI2LjktMjYuOSA0MC41LTI2LjkgNjQuOWwwIDI1LjQgMjYuMyAwIDAgMjZ6bTQxOC40LTcxLjJjMTMuNyAwIDI0LjYgNi42IDMwLjEgMTguM2wuNyAxLjUgMjMuMi0xMS41LS42LTEuNGMtOC0xOS4zLTI4LjUtMzEuMy01My40LTMxLjMtMjMuMSAwLTQzLjYgMTEuNC01MSAyOC40LS4xIDI2LjktLjIgMjMuOSAwIDI0LjggNC43IDExIDE0LjYgMTkuNCAyOC43IDI0LjIgNi41IDIgMTMuMSAzLjMgMTkuOCA0IDUuNSAuNyAxMC42IDEuNCAxNS44IDMuMSA2LjQgMi4xIDEwLjUgNS4zIDEyLjggOS44bDAgOS45Yy0zLjcgNy41LTEzLjggMTIuMy0yNS44IDEyLjMtMTQuMyAwLTI2LTYuOS0zMS45LTE5bC0uNy0xLjUtMjMgMTEuNSAuNiAxLjRjNy45IDE5LjQgMjkuNiAzMiA1NS4zIDMyIDIzLjYgMCA0NC42LTExLjQgNTIuMy0yOC40bC4yLTI1LjktLjItLjdjLTQuOS0xMS0xNS4yLTE5LjYtMjguOS0yNC4yLTcuNy0yLjctMTQuMy0zLjYtMjAuNy00LjQtNS0uNS0xMC0xLjUtMTQuOC0yLjktNi4zLTEuOS0xMC40LTUuMS0xMi42LTkuNmwwLTguNGMzLjQtNy40IDEyLjktMTIuMSAyNC4yLTEyLjFsMCAwek0yODcuNiAzMTEuM2wyNi4xIDAgMC02OC40LTI2LjEgMCAwIDY4LjR6TTYzOS44IDI1OGMtMi45LTYuMy04LjMtMTItMTUuNC0xNi43IDUuNi0zLjggMTAuMS05LjEgMTMtMTUuM2wuMi0yNS4zLS4yLS43Yy03LjQtMTYtMjYuNy0yNi43LTQ4LjItMjYuN1M1NDguNSAxODQgNTQxLjEgMjAwbC0uMiAyNS4zIC4yIC43YzIuOSA2LjEgNy40IDExLjQgMTMgMTUuMy03LjIgNC43LTEyLjUgMTAuNS0xNS40IDE2LjdsLS4yIDI4LjkgLjIgLjdjNy42IDE2IDI3LjkgMjYuNyA1MC42IDI2LjdzNDMuMS0xMC43IDUwLjYtMjYuN2wuMi0yOC45LS4yLS43em0tNzMuMi01MC44YzMuNi02LjMgMTIuNi0xMC41IDIyLjYtMTAuNXMxOSA0LjIgMjIuNiAxMC41bDAgMTMuN2MtMy41IDYuMi0xMi42IDEwLjMtMjIuNiAxMC4zcy0xOS4xLTQuMi0yMi42LTEwLjNsMC0xMy43em00Ny4zIDcyLjJjLTMuOCA2LjYtMTMuMyAxMC45LTI0LjcgMTAuOS0xMS4xIDAtMjEtNC40LTI0LjctMTAuOWwwLTE2LjJjMy43LTYuMyAxMy41LTEwLjUgMjQuNy0xMC41IDExLjMgMCAyMC45IDQuMSAyNC43IDEwLjVsMCAxNi4yek0zNzYuNCAyNjZsLTU5LjgtODkuNy0yOSAwIDAgNDAuNiAyNi41IDAgMCAuNCA2Mi41IDk0LjEgMjUuNyAwIDAtMTM1LjEtMjUuOSAwIDAgODkuN3oiXQogICAgfTsKICAgIGZhU3F1YXJlUGludGVyZXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waW50ZXJlc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGludGVyZXN0LXNxdWFyZSJdLCAiZjBkMyIsICJNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNzIuNiAwLTIuMi0uOGMtNS40LTQ4LjEtMy4xLTU3LjUgMTUuNy0xMzQuNyAzLjktMTYgOC41LTM1IDEzLjktNTcuOSAwIDAtNy4zLTE0LjgtNy4zLTM2LjUgMC03MC43IDc1LjUtNzggNzUuNS0yNSAwIDEzLjUtNS40IDMxLjEtMTEuMiA0OS44LTMuMyAxMC42LTYuNiAyMS41LTkuMSAzMi01LjcgMjQuNSAxMi4zIDQ0LjQgMzYuNCA0NC40IDQzLjcgMCA3Ny4yLTQ2IDc3LjItMTEyLjQgMC01OC44LTQyLjMtOTkuOS0xMDIuNi05OS45LTY5LjkgMC0xMTAuOSA1Mi40LTExMC45IDEwNi42IDAgMjEuMSA4LjIgNDMuNyAxOC4zIDU2IDIgMi40IDIuMyA0LjUgMS43IDctMS4xIDQuNy0zLjEgMTIuOS00LjcgMTkuMi0xIDQtMS44IDcuMy0yLjEgOC42LTEuMSA0LjUtMy41IDUuNS04LjIgMy4zLTMwLjYtMTQuMy00OS44LTU5LjEtNDkuOC05NS4xIDAtNzcuNSA1Ni4yLTE0OC42IDE2Mi4yLTE0OC42IDg1LjIgMCAxNTEuNCA2MC43IDE1MS40IDE0MS44IDAgODQuNi01My4zIDE1Mi43LTEyNy40IDE1Mi43LTI0LjkgMC00OC4zLTEyLjktNTYuMy0yOC4yIDAgMC0xMi4zIDQ2LjktMTUuMyA1OC40LTUgMTkuMy0xNy42IDQyLjktMjcuNCA1OS4zTDM4NCA0ODBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdFNxdWFyZSA9IGZhU3F1YXJlUGludGVyZXN0OwogICAgZmFCbHVldG9vdGhCID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsdWV0b290aC1iIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYyOTQiLCAiTTE2NC45IDI2MEwyNTcuNSAxNTYuNyAxMTEuNiAwIDExMS42IDIwNi4zIDI1LjQgMTIwLjItNiAxNTEuNiAxMDIuMSAyNjAtNiAzNjguNCAyNS40IDM5OS44IDExMS42IDMxMy43IDExNC4zIDUxMiAyNjIuOCAzNjMuNCAxNjQuOSAyNjB6bTQwLjktMTAzbC01MCA1MC0uMy0xMDAuMyA1MC4zIDUwLjN6bS01MCAxNTZsNTAgNTAtNTAuMyA1MC4zIC4zLTEwMC4zeiJdCiAgICB9OwogICAgZmFHcmlwZmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncmlwZmlyZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2FjIiwgIk04MC41IDMwMS40YzAtNzMuOCAxMDUuMS0xMjIuNSAxMDUuMS0yMDMgMC00Ny4xLTM0LTg4LTM5LjEtOTAuNCAuNCAzLjMgLjYgNi43IC42IDEwIDAgOTIuMS0xNDcuMSAxNTMuOS0xNDcuMSAyNjguNiAwIDQ5LjggMzIuMiA3OS4yIDY2LjUgMTA4LjMgNjUuMSA0Ni43IDc4LjEgNzEuNCA3OC4xIDg2LjYgMCAxMC4xLTQuOCAxNy00LjggMjIuMyAxMy4xLTE2LjcgMTcuNC0zMS45IDE3LjUtNDYuNCAwLTI5LjYtMjEuNy01Ni4zLTQ0LjItODYuNS0xNi0yMi4zLTMyLjYtNDIuNi0zMi42LTY5LjV6bTIwNS4zLTM5Yy0xMi4xLTY2LjgtNzgtMTI0LjQtOTQuNy0xMzAuOWw0IDcuMmMyLjQgNS4xIDMuNCAxMC45IDMuNCAxNy4xIDAgNDQuNy01NC4yIDExMS4yLTU2LjYgMTE2LjctMi4yIDUuMS0zLjIgMTAuNS0zLjIgMTUuOCAwIDIwLjEgMTUuMiA0Mi4xIDE3LjkgNDIuMSAyLjQgMCA1Ni42LTU1LjQgNTguMS04Ny43IDYuNCAxMS43IDkuMSAyMi42IDkuMSAzMy40IDAgNDEuMi00MS44IDk2LjktNDEuOCA5Ni45IDAgMTEuNiAzMS45IDUzLjIgMzUuNSA1My4yIDEgMCAyLjItMS40IDMuMi0yLjQgMzcuOS0zOS4zIDY3LjMtODUgNjcuMy0xMzYuOCAwLTgtLjctMTYuMi0yLjItMjQuNnoiXQogICAgfTsKICAgIGZhU3F1YXJlR29vZ2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ29vZ2xlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ29vZ2xlLXBsdXMtc3F1YXJlIl0sICJmMGQ0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNNjQgMjU2YzAtNTUuMyA0NC43LTEwMCAxMDAtMTAwIDI3IDAgNDkuNSA5LjggNjcgMjYuMmwtMjcuMSAyNi4xYy03LjQtNy4xLTIwLjMtMTUuNC0zOS44LTE1LjQtMzQuMSAwLTYxLjkgMjguMi02MS45IDYzLjIgMCAzNC45IDI3LjggNjMuMiA2MS45IDYzLjIgMzkuNiAwIDU0LjQtMjguNSA1Ni44LTQzLjFsLTU2LjkgMCAwLTM0LjQgOTQuNCAwYzEgNSAxLjYgMTAuMSAxLjYgMTYuNiAwIDU3LjEtMzguMyA5Ny42LTk2IDk3LjYtNTUuMyAwLTEwMC00NC43LTEwMC0xMDB6bTI5MSAxOC4ybDAgMjktMjkuMiAwIDAtMjktMjkgMCAwLTI5LjIgMjkgMCAwLTI5IDI5LjIgMCAwIDI5IDI5IDAgMCAyOS4yLTI5IDB6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsdXNTcXVhcmUgPSBmYVNxdWFyZUdvb2dsZVBsdXM7CiAgICBmYUFwcFN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcC1zdG9yZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzZmIiwgIk0yNTUuOSAxMjAuOWw5LjEtMTUuN2M1LjYtOS44IDE4LjEtMTMuMSAyNy45LTcuNXMxMy4xIDE4LjEgNy41IDI3LjlsLTg3LjUgMTUxLjUgNjMuMyAwYzIwLjUgMCAzMiAyNC4xIDIzLjEgNDAuOGwtMTg1LjUgMGMtMTEuMyAwLTIwLjQtOS4xLTIwLjQtMjAuNHM5LjEtMjAuNCAyMC40LTIwLjRsNTIgMCA2Ni42LTExNS40LTIwLjgtMzYuMWMtNS42LTkuOC0yLjMtMjIuMiA3LjUtMjcuOSA5LjgtNS42IDIyLjItMi4zIDI3LjkgNy41bDguOSAxNS43em0tNzguNyAyMThsLTE5LjYgMzRjLTUuNiA5LjgtMTguMSAxMy4xLTI3LjkgNy41cy0xMy4xLTE4LjEtNy41LTI3LjlsMTQuNi0yNS4yYzE2LjQtNS4xIDI5LjgtMS4yIDQwLjQgMTEuNnptMTY4LjktNjEuN2w1My4xIDBjMTEuMyAwIDIwLjQgOS4xIDIwLjQgMjAuNFM0MTAuNSAzMTggMzk5LjIgMzE4bC0yOS41IDAgMTkuOSAzNC41YzUuNiA5LjggMi4zIDIyLjItNy41IDI3LjktOS44IDUuNi0yMi4yIDIuMy0yNy45LTcuNS0zMy41LTU4LjEtNTguNy0xMDEuNi03NS40LTEzMC42LTE3LjEtMjkuNS00LjktNTkuMSA3LjItNjkuMSAxMy40IDIzIDMzLjQgNTcuNyA2MC4xIDEwNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MCAyNTZhMjE2IDIxNiAwIDEgMSA0MzIgMCAyMTYgMjE2IDAgMSAxIC00MzIgMHoiXQogICAgfTsKICAgIGZhV2l4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpeCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWNmIiwgIk0zOTMuNCAxMzEuN2MwIDEzIDIuMSAzMi43LTI4LjcgNDMuOC05LjUgMy40LTE2IDkuNy0xNiA5LjcgMC0zMSA0LjctNDIuMiAxNy40LTQ4LjkgOS44LTUuMSAyNy4yLTQuNiAyNy4yLTQuNnpNMjc3LjYgMTY3LjJsLTM0LjIgMTMyLjctMjguNS0xMDguNmMtNy43LTMyLTIwLjgtNDguNS00OC40LTQ4LjUtMjcuNCAwLTQwLjcgMTYuMi00OC40IDQ4LjVMODkuNSAyOTkuOSA1NS4zIDE2Ny4yQzQ5LjcgMTQwLjUgMjMuOSAxMjkgMCAxMzJMNjUuNiAzNzkuOXMyMS42IDEuNiAzMi41LTRjMTQuMi03LjIgMjEtMTIuOCAyOS42LTQ2LjYgNy43LTMwLjEgMjkuMS0xMTguNCAzMS4xLTEyNC43IDQuOC0xNC45IDExLjEtMTMuOCAxNS40IDAgMiA2LjMgMjMuNSA5NC42IDMxLjEgMTI0LjcgOC42IDMzLjcgMTUuNCAzOS4zIDI5LjYgNDYuNiAxMC44IDUuNSAzMi41IDQgMzIuNSA0TDMzMi45IDEzMmMtMjQuNC0zLjEtNDkuOCA4LjktNTUuMyAzNS4zem0xMTUuOCA1LjJzLTQuMSA2LjMtMTMuNSAxMS42Yy02IDMuNC0xMS44IDUuNi0xOCA4LjYtMTUuMSA3LjMtMTMuMiAxMy45LTEzLjIgMzUuMmwwIDE1Mi4xczE2LjYgMi4xIDI3LjQtMy40YzEzLjktNy4xIDE3LjEtMTQgMTcuMy00NC44bDAtMTUwLjMgMCAwIDAtOXptMTYzLjQgODQuMUw2NDAgMTMyLjhzLTM1LjEtNi01Mi41IDkuOGMtMTMuMyAxMi4xLTI0LjQgMjkuNi01NC4yIDcyLjUtLjUgLjctNi4zIDEwLjUtMTMuMSAwLTI5LjMtNDIuMi00MC44LTYwLjMtNTQuMi03Mi41LTE3LjQtMTUuOC01Mi41LTkuOC01Mi41LTkuOGw4My4yIDEyMy43LTgzIDEyMy40czM2LjYgNC42IDU0LTExLjJjMTEuNS0xMC41IDE3LjYtMjAuNCA1Mi41LTcwLjcgNi44LTEwLjUgMTIuNi0uOCAxMy4xIDAgMjkuNCA0Mi40IDM5LjIgNTguMSA1My4xIDcwLjcgMTcuNCAxNS44IDUzLjMgMTEuMiA1My4zIDExLjJsLTgzLTEyMy40eiJdCiAgICB9OwogICAgZmFJbnRlcmNvbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnRlcmNvbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2FmIiwgIk0zOTIgMzJMNTYgMzJDMjUuMSAzMiAwIDU3LjEgMCA4OEwwIDQyNGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMzYgMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTMzNmMwLTMwLjktMjUuMS01Ni01Ni01NnpNMjgzLjcgMTE0LjFjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxOTkuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTE5OS41em0tNzQuNi03LjVjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAyMTYuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTIxNi41em0tNzQuNyA3LjVjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxOTkuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTE5OS41ek01OS43IDE0NGMwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDEzNC4zYzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTM0LjN6TTM4My4xIDM3MS44Yy03Mi44IDYzLTI0MS43IDY1LjQtMzE4LjEgMC0xNS0xMi44IDQuNC0zNS41IDE5LjQtMjIuNyA2NS45IDU1LjMgMjE2LjEgNTMuOSAyNzkuMyAwIDE0LjktMTIuOSAzNC4zIDkuOCAxOS40IDIyLjd6bTUuMi05My41YzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTM0LjNjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM3oiXQogICAgfTsKICAgIGZhUmVhY3RldXJvcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhY3RldXJvcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1ZCIsICJNMjUwLjcgMjExLjdsNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjEtMi4zLTYuOC0yLjMgNi44LTcuMiAuMSA1LjcgNC4zLTIgNi44em02My43IDBsNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjItLjEtMi4zLTYuOC0yLjMgNi44LTcuMiAuMSA1LjcgNC4zLTEuOSA2Ljh6bS05MS4zIDUwLjVsLTMuNCAwYy00LjggMC0zLjggNC0zLjggMTIuMSAwIDQuNy0yLjMgNi4xLTUuOCA2LjFzLTUuOC0xLjQtNS44LTYuMWwwLTM2LjZjMC00LjcgMi4zLTYuMSA1LjgtNi4xczUuOCAxLjQgNS44IDYuMWMwIDcuMi0uNyAxMC41IDMuOCAxMC41bDMuNCAwYzQuNy0uMSAzLjgtMy45IDMuOC0xMi4zIDAtOS45LTYuNy0xNC4xLTE2LjgtMTQuMWwtLjIgMGMtMTAuMSAwLTE2LjggNC4yLTE2LjggMTQuMWwwIDQwLjFjMCAxMC40IDYuNyAxNC4xIDE2LjggMTQuMWwuMiAwYzEwLjEgMCAxNi44LTMuOCAxNi44LTE0LjEgMC05LjkgMS4xLTEzLjgtMy44LTEzLjh6bS04MC43IDE3LjRsLTE0LjcgMCAwLTE5LjMgMTEuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTExLjQgMCAwLTE4LjMgMTQuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTIxLjcgMGMtMi40LS4xLTMuNyAxLjMtMy43IDMuOGwwIDU5LjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDIxLjkgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44em0tNDItMTguNWM0LjYtMiA3LjMtNiA3LjMtMTIuNGwwLTExLjljMC0xMC4xLTYuNy0xNC4xLTE2LjgtMTQuMWwtMTMuNCAwYy0yLjUgMC0zLjggMS4zLTMuOCAzLjhsMCA1OS4xYzAgMi41IDEuMyAzLjggMy44IDMuOGwzLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yMi45IDUuNiAwIDcuNCAyMy41Yy4yIDEgLjggMS44IDEuNiAyLjRzMS44IC45IDIuNyAuOGwzLjMgMGMyLjggMCA0LTEuOCAzLjItNC40bC04LjEtMjMuOXptLTMuOC0xNGMwIDQuOC0yLjUgNi4xLTYuMSA2LjFsLTUuOCAwIDAtMjAuOSA1LjggMGMzLjYgMCA2LjEgMS4zIDYuMSA2LjFsMCA4Ljd6TTE3Ni4xIDIyNmMtLjEtLjUtLjItMS0uNC0xLjRzLS42LS44LTEtMS4xLS44LS42LTEuMy0uNy0xLS4yLTEuNS0uMWwtNi45IDBjLS41IDAtMSAwLTEuNCAuMnMtLjkgLjQtMS4zIC43LS43IC43LS45IDEuMS0uNCAuOS0uNCAxLjRsLTExIDU5LjJjLS41IDIuNyAuOSA0LjEgMy40IDQuMWwzIDBjLjUgLjEgMSAwIDEuNS0uMnMuOS0uNCAxLjMtLjcgLjctLjcgLjktMS4yIC40LS45IC40LTEuNGwxLjgtMTEuMyAxMi4yIDAgMS44IDExLjNjMCAuNSAuMiAxIC40IDEuNHMuNSAuOSAuOSAxLjIgLjggLjYgMS4zIC43IDEgLjIgMS41IC4ybDMuNSAwYzIuNiAwIDMuOS0xLjQgMy40LTQuMUwxNzYuMSAyMjZ6bS0xMi4zIDM5LjNsNC43LTI5LjcgNC43IDI5LjctOS40IDB6bTg5LjMgMjAuMmwwLTUzLjIgNy41IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMjUuOCAwYy0yLjUgMC0zLjggMS4zLTMuOCAzLjhsMCAyLjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDcuMyAwIDAgNTMuMmMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMy40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAgMHptMjQ4LS44bC0xOS40IDAgMC0yNi43IDE2LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xNi4xIDAgMC0yNS44IDE5LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0yMi4yIDBjLS4zLS4xLS41LS4xLS44IDBzLS41IC4yLS43IC40LS4zIC40LS40IC43LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDIyLjUgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbDAgMHpNNDA4IDIyMS44bC0uOCAwYy0xMC4xIDAtMTUuMyA0LjctMTUuMyAxNC4xbDAgNDAuMWMwIDkuMyA1LjIgMTQuMSAxNS4zIDE0LjFsLjggMGMxMC4xIDAgMTUuMy00LjggMTUuMy0xNC4xbDAtNDAuMWMwLTkuNC01LjItMTQuMS0xNS4zLTE0LjFsMCAwem0xMC4yIDUyLjRjLS4xIDgtMyAxMS4xLTEwLjUgMTEuMXMtMTAuNS0zLjEtMTAuNS0xMS4xbDAtMzYuNmMwLTcuOSAzLTExLjEgMTAuNS0xMS4xczEwLjUgMy4yIDEwLjUgMTEuMWwwIDM2LjZ6bS00Ni41LTE0LjVjNi4xLTEuNiA5LjItNi4xIDkuMi0xMy4zbDAtOS43YzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMWwtMTMuNyAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDEuMiAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNi0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLTI2LjkgMTEuNiAwIDEwLjQgMjcuMmMuMiAuNSAuNSAuOSAuOSAxLjFzLjkgLjQgMS40IC40bDEuNSAwYzEuNCAwIDItMSAxLjUtMi4zbC0xMC42LTI3LjN6bS02LjQtMy45bC0xMC4yIDAgMC0yOC41IDEwLjIgMGM3LjUgMCAxMC41IDMuMSAxMC41IDExLjFsMCA2LjRjMCA3LjgtMyAxMS0xMC41IDExbDAgMHptODUuOS0zMy4xbC0xMy43IDBjLS4zLS4xLS41LS4xLS44IDBzLS41IC4yLS43IC40LS4zIC40LS40IC43LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDEuMiAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNi0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLTI2LjEgMTAuNiAwYzEwLjEgMCAxNS4zLTQuOCAxNS4zLTE0LjFsMC0xMC41YzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMXptMTAuMiAyMi44YzAgNy45LTMgMTEuMS0xMC41IDExLjFsLTEwLjIgMCAwLTI5LjIgMTAuMiAwYzcuNS0uMSAxMC41IDMuMSAxMC41IDExbDAgNy4xek0yNTkuNiAzMDhsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xek00ODcuMiAxNzEuOWMtMTEuNy00LjQtMjMuNS04LjEtMzUuNi0xMS4zIDE5LjYtNzggMTEuNi0xMzQuNy0yMi4zLTE1My45LTM0LjUtMTkuNC04NS45IDQuMy0xMzguMiA1NS4yIDMuNCAzLjMgNi44IDYuNyAxMC4yIDEwLjIgODIuNS04MCAxMTkuNi01My41IDEyMC45LTUyLjggMjIuNCAxMi43IDM2IDU1LjggMTUuNSAxMzcuOC0yNy44LTYuNC01Ni4xLTEwLjctODQuNi0xMy03MS45LTEwMC41LTE0MC42LTE0Mi4xLTE4Mi4yLTE0Mi4xLTMwLjggMC00My44IDIxLTQ3LjYgMjcuNy0xOC4xIDMyLTEzLjMgODQuMiAuMSAxMzMuOC03MC41IDIwLjMtMTIwLjcgNTQuMS0xMjAuMyA5NSAuNSA1OS42IDEwMy4yIDg3LjggMTIyLjEgOTIuOC0yMC41IDgxLjktMTAuMSAxMzUuNiAyMi4zIDE1My45IDI4IDE1LjggNzUuMSA2IDEzOC4yLTU1LjItMy40LTMuMy02LjgtNi43LTEwLjItMTAuMi04Mi41IDgwLTExOS43IDUzLjUtMTIwLjkgNTIuOC0yMi4zLTEyLjYtMzYtNTUuNi0xNS41LTEzNy45IDEyLjQgMi45IDQxLjggOS41IDg0LjYgMTMgNzEuOSAxMDAuNCAxNDAuNiAxNDIgMTgyLjEgMTQyIDMwLjggMCA0My44LTIxIDQ3LjYtMjcuNyAxOC0zMS45IDEzLjMtODQuMS0uMS0xMzMuOCAxNTIuMy00My44IDE1Ni4yLTEzMC4yIDMzLjktMTc2LjNsMCAwek0xMzYgMzYuOGMyLjktNS4xIDExLjktMjAuMyAzNC45LTIwLjMgMzYuOCAwIDk4LjggMzkuNiAxNjMuMyAxMjYuMi0zMS4zLTEuOC02Mi43LTEuNS05My45IC45IDEzLTE4LjMgMjcuMS0zNS44IDQyLjItNTIuNC0zLjQtMy41LTYuOC02LjktMTAuMi0xMC4yLTE4LjMgMjAuMi0zNS4zIDQxLjctNTAuNyA2NC4yLTI4LjUgMi43LTU2LjcgNy42LTg0LjQgMTQuNi0uMi0xLjQtMjQuMy04Mi4yLTEuMi0xMjNsMCAwek00NDAuOCA0NzUuMWMtMi45IDUuMS0xMS44IDIwLjMtMzQuOSAyMC4zLTM2LjcgMC05OC43LTM5LjQtMTYzLjMtMTI2LjIgMzEuMyAxLjggNjIuNyAxLjUgOTMuOS0uOS0xMyAxOC4zLTI3LjEgMzUuOC00Mi4yIDUyLjQgMy40IDMuNSA2LjggNi45IDEwLjIgMTAuMiAxOC40LTIwLjIgMzUuMy00MS43IDUwLjctNjQuMiA0Ny4zLTQuNyA4MC4zLTEzLjUgODQuNC0xNC42IDIyLjcgODQuNCA0LjUgMTE3IDEuMiAxMjN6bTkuMS0xMzguNmMtMy42LTExLjktNy43LTI0LjEtMTIuNC0zNi40LTIuMSAwLTQuMi0uNS02LjEtMS41cy0zLjUtMi40LTQuNi00LjJsLS4xIC4xYy0xLjYgMS41LTMuNCAyLjctNS40IDMuNiA1LjcgMTQuMyAxMC42IDI4LjQgMTQuNyA0Mi4yLTIzLjcgNi00Ny43IDEwLjMtNzIgMTMgMy41LTUuMyAxNy4yLTI2LjIgMzIuMi01NC4yLTIuMS0uOC00LjItMS45LTYtMy4yLTEuMSAxLjItMy42IDQuMi0xMC45IDQuMi02LjIgMTEuMi0xNy40IDMwLjktMzMuOSA1NS4yLTM3LjQgMy4zLTc1IDMuNi0xMTIuNCAxLTcuOS0xMS4yLTIxLjUtMzEuMS0zNi44LTU3LjgtMS0uNC0yLS45LTMtMS41LTEuOSAxLjYtMy45IDMuMi0xMi42IDMuMiA2LjMgMTEuMiAxNy41IDMwLjcgMzMuOCA1NC42LTI0LjMtMi4zLTQ4LjQtNi4yLTcyLjItMTEuNyAzLjktMTQgOC42LTI4LjMgMTQuMS00Mi45LTMuMiAwLTUuNCAuMi04LjQtMS0yLjIgLjgtNC42IDEuMS02LjkgMS00LjkgMTMuNC05LjEgMjYuNS0xMi43IDM5LjQtMTU5LjktNDIuNi0xNDAuMy0xMjMuNi0xLjUtMTY0IDMuNiAxMS45IDcuNyAyNC4xIDEyLjQgMzYuNCAxMC40IDAgMTIuOSAzLjQgMTQuNCA1LjMgLjctLjggMS40LTEuNiAyLjMtMi4yLTUuOC0xNC43LTEwLjktMjkuMi0xNS4yLTQzLjMgNy0xLjggMzIuNC04LjQgNzItMTMtMTUuOSAyNC4zLTI2LjcgNDMuOS0zMi44IDU1LjMgMy4xIDEuOCA1LjMgNC42IDYuNCA4IDIuNS0zLjcgNi4xLTYuNiAxMC4yLTguNCA2LjUtMTEuNyAxNy45LTMxLjkgMzQuOC01Ni45IDM3LjQtMy4zIDc1LTMuNiAxMTIuNC0xIDMxLjUgNDQuNiAyOC45IDQ4LjEgNDIuNSA2NC41IDIuNi0zLjUgNi4zLTYgMTAuNC03LjQtNi40LTExLjQtMTcuNi0zMS0zNC4zLTU1LjUgNDAuNCA0LjEgNjUgMTAgNzIuMiAxMS43LTQgMTQuNC04LjkgMjkuMi0xNC42IDQ0LjIgMi41IDEgNC44IDIuNCA2LjggNC4zbC4xIC4xYzEtMS41IDIuMy0yLjggMy44LTMuOHMzLjMtMS42IDUuMS0xLjhjNC45LTEzLjQgOS4yLTI2LjYgMTIuOC0zOS41IDExLjcgMy4xIDIzLjIgNi44IDM0LjUgMTEgMTA2LjEgMzkuOSA3NCA4Ny45IDcyLjYgOTAuNC0xOS44IDM1LjEtODAuMSA1NS4yLTEwNS43IDYyLjV6bS0xMTQuNC0xMTRsLTEuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS42IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNDkuOGMwIDcuOS0yLjYgMTEuMS0xMC4xIDExLjFzLTEwLjEtMy4xLTEwLjEtMTEuMWwwLTQ5LjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMS4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA1MS41YzAgOS42IDUgMTQuMSAxNS4xIDE0LjFsLjQgMGMxMC4xIDAgMTUuMS00LjYgMTUuMS0xNC4xbDAtNTEuNWMwLS4zLS4xLS41LS4yLS44cy0uMy0uNS0uNS0uNi0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMXpNMzIxLjggMzA4bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXptLTMxLjEgNy40bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXptNS4xLTMwLjhsLTE5LjQgMCAwLTI2LjcgMTYuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTE2LjEgMCAwLTI1LjggMTkuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTIyLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwyMi41IDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS42LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uNC0uNy0uNC0uNS0uMS0uOC0uMWwwIDB6bS03LjQtOTkuNGwtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xLTIuMy02Ljh6Il0KICAgIH07CiAgICBmYVdhemUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2F6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNmIiwgIk01MDIuNiAyMDEuN2MxNC41IDg1LjktMzAuOSAxNjcuOS0xMTMuMiAyMDguMSAxMyAzNC4xLTEyLjQgNzAuMi00OC4zIDcwLjItMTMuMiAwLTI2LTUuMS0zNS42LTE0LjJzLTE1LjMtMjEuNi0xNi0zNC44Yy02LjQgLjItNjQuMiAwLTc2LjMtLjYtLjMgNi44LTEuOSAxMy41LTQuNyAxOS42cy02LjkgMTEuNy0xMS45IDE2LjMtMTAuOCA4LjItMTcuMiAxMC41LTEzLjIgMy40LTE5LjkgMy4xYy0zMy45LTEuNC01OC0zNC44LTQ3LTY3LjktMzcuMi0xMy4xLTcyLjUtMzQuOS05OS42LTcwLjgtMTMtMTcuMy0uNS00MS44IDIwLjgtNDEuOCA0Ni4zIDAgMzIuMi01NC4yIDQzLjItMTEwLjMgMTguNC05My45IDExNi44LTE1Ny4xIDIxMS43LTE1Ny4xIDEwMi41IDAgMTk3LjIgNzAuNyAyMTQuMSAxNjkuN3pNMzczLjkgMzg4LjNjNDItMTkuMiA4MS4zLTU2LjcgOTYuMy0xMDIuMSA0MC41LTEyMy4xLTY0LjItMjI4LTE4MS43LTIyOC04My40IDAtMTcwLjMgNTUuNC0xODYuMSAxMzYtOS41IDQ4LjkgNSAxMzEuNC02OC43IDEzMS40IDI0LjkgMzMuMSA1OC4zIDUyLjYgOTMuNyA2NCAyNC43LTIxLjggNjMuOS0xNS41IDc5LjggMTQuMyAxNC4yIDEgNzkuMiAxLjIgODcuOSAuOCAzLjUtNi45IDguNS0xMi45IDE0LjctMTcuNXMxMy4yLTcuOSAyMC44LTkuNSAxNS40LTEuNCAyMi45IC40IDE0LjUgNS4zIDIwLjUgMTAuMnpNMjA1LjUgMTg3LjFjMC0zNC43IDUwLjgtMzQuNyA1MC44IDBzLTUwLjggMzQuNy01MC44IDB6bTExNi42IDBjMC0zNC43IDUwLjktMzQuNyA1MC45IDBzLTUwLjkgMzQuOC01MC45IDB6TTE5OS41IDI1Ny44Yy0zLjQtMTYuOSAyMi4yLTIyLjIgMjUuNi01LjJsLjEgLjNjNC4xIDIxLjQgMjkuOCA0NCA2NC4xIDQzLjEgMzUuNy0uOSA1OS4zLTIyLjIgNjQuMS00Mi44IDQuNS0xNi4xIDI4LjYtMTAuNCAyNS41IDYtNS4yIDIyLjItMzEuMiA2Mi05MS41IDYyLjktNDIuNiAwLTgwLjktMjcuOC04Ny45LTY0LjJsMCAweiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXJlbWl4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWUiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3pNNDE4LjEgMjYwLjRsNC45IDIuMiAwIDcwYy03LjIgMy42LTYzLjQgMjcuNS02Ny4zIDI4LjgtNi41LTEuOC0xMTMuNy00Ni44LTEzNy4zLTU2LjJsLTY0LjIgMjYuNi02My4zLTI3LjUgMC02My44IDU5LjMtMjQuOGMtLjctLjctLjQgNS0uNC03MC40bDY3LjMtMjkuNyAxNTEuOSA2Mi45IDAgNjEuNiA0OS4xIDIwLjN6bS03MC40IDgxLjVsMC00My44LS40IDAgMC0xLjgtMTEzLjgtNDYuNSAwIDQ1LjIgMTEzLjggNDYuOSAwLS40IC40IC40em03LjUtNTcuNmwzOS45LTE2LjQtMzYuOC0xNS41LTM5IDE2LjQgMzUuOSAxNS41em01Mi4zIDM4LjFsMC00My00NC4zIDE4LjYgMCA0My40IDQ0LjMtMTl6Il0KICAgIH07CiAgICBmYUJhbmRjYW1wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJhbmRjYW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZDUiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptNDguMiAzMjYuMWwtMTgxIDAgODQuNy0xNTYuMSAxODEgMC04NC43IDE1Ni4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS13ZWItYXdlc29tZS1zdHJva2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY4NCIsICJNNjQgNjRDNDYuMyA2NCAzMiA3OC4zIDMyIDk2bDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDY0ek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMjM1IDgxLjZsNTMgNDYuNCA1Mi4yLTEwLjRjLTIuNi0zLjktNC4yLTguNS00LjItMTMuNiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgMTMtMTAuMyAyMy42LTIzLjIgMjRMMzA0LjUgMzQ5LjFjLTUuMiAxMS41LTE2LjYgMTguOS0yOS4yIDE4LjlsLTEwMi42IDBjLTEyLjYgMC0yNC03LjQtMjkuMi0xOC45TDg3LjIgMjI0Yy0xMi45LS40LTIzLjItMTEtMjMuMi0yNCAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgNS0xLjUgOS43LTQuMiAxMy42TDE2MCAyMjQgMjEzLjEgMTc3LjZjLTguOS00LjEtMTUtMTMuMS0xNS0yMy42IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZjMCAxMC41LTYuMiAxOS41LTE1LjEgMjMuNnoiXQogICAgfTsKICAgIGZhVmltZW9WID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpbWVvLXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3ZCIsICJNNDQ3LjggMTUzLjZjLTIgNDMuNi0zMi40IDEwMy4zLTkxLjQgMTc5LjEtNjAuOSA3OS4yLTExMi40IDExOC44LTE1NC42IDExOC44LTI2LjEgMC00OC4yLTI0LjEtNjYuMy03Mi4zLTM1LjItMTI5LjItNTAuMi0yMDQuOS03OS4zLTIwNC45LTMuNCAwLTE1LjEgNy4xLTM1LjIgMjEuMUwwIDE2OC4yYzUxLjYtNDUuMyAxMDAuOS05NS43IDEzMS44LTk4LjUgMzQuOS0zLjQgNTYuMyAyMC41IDY0LjQgNzEuNSAyOC43IDE4MS41IDQxLjQgMjA4LjkgOTMuNiAxMjYuNyAxOC43LTI5LjYgMjguOC01Mi4xIDMwLjItNjcuNiA0LjgtNDUuOS0zNS44LTQyLjgtNjMuMy0zMSAyMi03Mi4xIDY0LjEtMTA3LjEgMTI2LjItMTA1LjEgNDUuOCAxLjIgNjcuNSAzMS4xIDY0LjkgODkuNHoiXQogICAgfTsKICAgIGZhU3RyYXZhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmF2YSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDI4IiwgIk0xNTguNCAwTDcgMjkyIDk2LjIgMjkyIDE1OC40IDE3NS45IDIyMC4xIDI5MiAzMDguNiAyOTIgMTU4LjQgMHpNMzA4LjYgMjkybC00My45IDg4LjItNDQuNi04OC4yLTY3LjYgMCAxMTIuMiAyMjAgMTExLjUtMjIwLTY3LjYgMHoiXQogICAgfTsKICAgIGZhVW5pcmVnaXN0cnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5pcmVnaXN0cnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQwNCIsICJNMTkyIDQ4MGMzOS41IDAgNzYuMi0xMS44IDEwNi44LTMyLjJsLTIxMy41IDBDMTE1LjggNDY4LjIgMTUyLjUgNDgwIDE5MiA0ODB6TTEwMi45IDI4Ni45bDAtMTIuNC0xMDIuOSAwIDAgMTIuNGMwIDIuNSAwIDUgLjEgNy40bDEwMy4xIDBjLS4yLTIuNC0uMy00LjktLjMtNy40em0yMC41IDU3bC0xMTQuOSAwYzIuNiA4LjUgNS44IDE2LjggOS42IDI0LjhsMTM4LjMgMGMtMTIuOS01LjctMjQuMS0xNC4yLTMzLTI0Ljh6bS0xNy43LTM0LjdsLTEwNC40IDBjLjkgNy42IDIuMiAxNSAzLjkgMjIuM2wxMDkuNyAwYy00LTYuOS03LjItMTQuNC05LjItMjIuM3ptLTIuOC02OS4zbC0xMDIuOSAwIDAgMTcuMyAxMDIuOSAwIDAtMTcuM3ptMC0xNzMuMmwtMTAyLjkgMCAwIDQuOSAxMDIuOSAwIDAtNC45em0wLTM0LjdsLTEwMi45IDAgMCAyLjUgMTAyLjkgMCAwLTIuNXptMCA2OS4zbC0xMDIuOSAwIDAgNy40IDEwMi45IDAgMC03LjR6bTAgMTA0bC0xMDIuOSAwIDAgMTQuOCAxMDIuOSAwIDAtMTQuOHptMC02OS4zbC0xMDIuOSAwIDAgOS45IDEwMi45IDAgMC05Ljl6bTAgMzQuNmwtMTAyLjkgMCAwIDEyLjQgMTAyLjkgMCAwLTEyLjR6TTI2OS4xIDMzMS41bDEwOS43IDBjMS44LTcuMyAzLjEtMTQuNyAzLjktMjIuM2wtMTA0LjQgMGMtMi4xIDcuOS01LjIgMTUuNC05LjIgMjIuM3ptMTItMTg1LjdsMTAyLjkgMCAwLTkuOC0xMDIuOSAwIDAgOS44em0wIDM3LjJsMTAyLjkgMCAwLTEyLjQtMTAyLjkgMCAwIDEyLjR6bTAtNzQuM2wxMDIuOSAwIDAtNy40LTEwMi45IDAgMCA3LjR6bTAtNzYuN2wwIDIuNSAxMDIuOSAwIDAtMi41LTEwMi45IDB6TTc4LjEgNDQyLjlsMjI3LjcgMGMxMS44LTguNyAyMi43LTE4LjYgMzIuMi0yOS43bC0yOTMuMSAwYzkuNiAxMSAyMS40IDIxIDMzLjIgMjkuN3ptMjAzLTM3MS4zbDEwMi45IDAgMC00LjktMTAyLjkgMCAwIDQuOXptMCAxNDguNWwxMDIuOSAwIDAtMTQuOC0xMDIuOSAwIDAgMTQuOHpNMzguOCA0MDUuN2wzMDUuMyAwYzYuNy04LjUgMTIuNi0xNy42IDE3LjgtMjcuMkwyMyAzNzguNWM1LjIgOS42IDkuMiAxOC43IDE1LjggMjcuMnptMTg4LjgtMzcuMWwxMzkuNCAwYzMuNy04IDUuOC0xNi4yIDguNS0yNC44bC0xMTUgMGMtOC44IDEwLjctMjAuMSAxOS4yLTMyLjkgMjQuOHptNTMuNS04MS43YzAgMi41LS4xIDUtLjQgNy40bDEwMy4xIDBjLjEtMi41IC4yLTQuOSAuMi03LjRsMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTI5LjdsMTAyLjkgMCAwLTE3LjMtMTAyLjkgMCAwIDE3LjN6Il0KICAgIH07CiAgICBmYUNjRGluZXJzQ2x1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1kaW5lcnMtY2x1YiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjRjIiwgIk0yMzkuNyA3OS45YTE3NS44IDE3NS44IDAgMSAwIDAgMzUxLjYgMTc1LjggMTc1LjggMCAxIDAgMC0zNTEuNnpNMTk5LjggMzU5LjVjLTQxLjctMTUuOS03MS40LTU2LjQtNzEuNC0xMDMuOHMyOS43LTg3LjkgNzEuNC0xMDQuMWwwIDIwNy45em03OS44IC4zbDAtMjA4LjJjNDEuNyAxNi4yIDcxLjQgNTYuNyA3MS40IDEwNC4xcy0yOS43IDg3LjktNzEuNCAxMDQuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTMyOS43IDQ0OGwtOTAuMyAwQzEzMy4yIDQ0OCA0NS42IDM2Mi41IDQ1LjYgMjU3LjggNDUuNiAxNDMuMiAxMzMuMiA2NCAyMzkuNCA2NGw5MC4zIDBjMTA1IDAgMjAwLjcgNzkuMiAyMDAuNyAxOTMuOCAwIDEwNC43LTk1LjcgMTkwLjItMjAwLjcgMTkwLjJ6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaW50ZXJlc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBkMiIsICJNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDgtMjUuNiAwLTUwLjItMy45LTczLjQtMTEuMSAxMC4xLTE2LjUgMjUuMi00My41IDMwLjgtNjUgMy0xMS42IDE1LjQtNTkgMTUuNC01OSA4LjEgMTUuNCAzMS43IDI4LjUgNTYuOCAyOC41IDc0LjggMCAxMjguNy02OC44IDEyOC43LTE1NC4zIDAtODEuOS02Ni45LTE0My4yLTE1Mi45LTE0My4yLTEwNyAwLTE2My45IDcxLjgtMTYzLjkgMTUwLjEgMCAzNi40IDE5LjQgODEuNyA1MC4zIDk2LjEgNC43IDIuMiA3LjIgMS4yIDguMy0zLjMgLjgtMy40IDUtMjAuMyA2LjktMjguMSAuNi0yLjUgLjMtNC43LTEuNy03LjEtMTAuMS0xMi41LTE4LjMtMzUuMy0xOC4zLTU2LjYgMC01NC43IDQxLjQtMTA3LjYgMTEyLTEwNy42IDYwLjkgMCAxMDMuNiA0MS41IDEwMy42IDEwMC45IDAgNjcuMS0zMy45IDExMy42LTc4IDExMy42LTI0LjMgMC00Mi42LTIwLjEtMzYuNy00NC44IDctMjkuNSAyMC41LTYxLjMgMjAuNS04Mi42IDAtMTktMTAuMi0zNC45LTMxLjQtMzQuOS0yNC45IDAtNDQuOSAyNS43LTQ0LjkgNjAuMiAwIDIyIDcuNCAzNi44IDcuNCAzNi44cy0yNC41IDEwMy44LTI5IDEyMy4yQzE2MS41IDQzNy4yIDE2My41IDQ2Ny40IDE2NS42IDQ4NyA3My40IDQ1MC45IDggMzYxLjEgOCAyNTYgOCAxMTkgMTE5IDggMjU2IDhTNTA0IDExOSA1MDQgMjU2eiJdCiAgICB9OwogICAgZmFBbGdvbGlhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFsZ29saWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YyIsICJNMjU2IDBjLTEzOS45IDAtMjU0IDExMi43LTI1NiAyNTIuMS0yIDE0MS41IDExMi45IDI1OC43IDI1NC41IDI1OS41IDQzLjcgLjMgODUuOS0xMC40IDEyMy4zLTMwLjcgMy42LTIgNC4yLTcgMS4xLTkuN2wtMjQtMjEuMmMtNC45LTQuMy0xMS44LTUuNS0xNy44LTMtMjYuMSAxMS4xLTU0LjUgMTYuOC04My43IDE2LjQtMTE0LjQtMS41LTIwNi45LTk2LjYtMjA1LjEtMjExIDEuOC0xMTIuOSA5NC4zLTIwNC4yIDIwNy43LTIwNC4ybDIwNy43IDAgMCAzNjktMTE3LjgtMTA0LjdjLTMuOC0zLjQtOS43LTIuNy0xMi43IDEuMy0xOC45IDI1LTQ5LjcgNDAuNi04My45IDM4LjItNDcuNS0zLjMtODUuOS00MS41LTg5LjUtODguOS00LjItNTYuNiA0MC42LTEwMy45IDk2LjMtMTAzLjkgNTAuNCAwIDkxLjkgMzguOCA5Ni4yIDg4IC40IDQuNCAyLjQgOC41IDUuNyAxMS40bDMwLjcgMjcuMmMzLjUgMy4xIDkgMS4yIDkuOS0zLjQgMi4yLTExLjggMy0yNC4yIDIuMS0zNi44LTQuOS03Mi02My4zLTEzMC0xMzUuNC0xMzQuNC04Mi43LTUuMS0xNTEuOCA1OS41LTE1NCAxNDAuNi0yLjEgNzguOSA2Mi42IDE0NyAxNDEuNiAxNDguNyAzMyAuNyA2My42LTkuNiA4OC4zLTI3LjZMNDk1IDUwOS40YzYuNiA1LjggMTcgMS4yIDE3LTcuN2wwLTQ5MmMwLTUuNC00LjQtOS43LTkuNy05LjdMMjU2IDB6Il0KICAgIH07CiAgICBmYVN0YWNrcGF0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGFja3BhdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0MiIsICJNMjQ0LjYgMjMyLjRjMCA4LjUtNC4zIDIwLjUtMjEuMyAyMC41bC0xOS42IDAgMC00MS41IDE5LjYgMGMxNy4xIDAgMjEuMyAxMi40IDIxLjMgMjF6TTQ0OCAzMmwwIDQ0OC00NDggMCAwLTQ0OCA0NDggMHpNMTUxLjMgMjg3LjhjMC0yMS4yLTEyLjEtMzQuNS00Ni43LTQ0LjgtMjAuNi03LjQtMjYtMTAuOS0yNi0xOC42czctMTQuNiAyMC40LTE0LjZjMTQuMSAwIDIwLjggOC40IDIwLjggMTguNGwzMC43IDAgLjItLjZjLjUtMTkuNi0xNS4xLTQxLjYtNTEuMS00MS42LTIzLjQgMC01Mi42IDEwLjgtNTIuNiAzOC4zIDAgMTkuNCA5LjIgMzEuMyA1MC43IDQ0LjQgMTcuMyA2LjIgMjEuOSAxMC40IDIxLjkgMTkuNSAwIDE1LjItMTkuMSAxNC4yLTE5LjUgMTQuMi0yMC40IDAtMjUuNy05LjEtMjUuNy0yMS45bC0zMC44IDAtLjIgLjZjLS43IDMxLjMgMjguNCA0NS4yIDU2LjYgNDUuMiAzMCAwIDUxLjEtMTMuNiA1MS4xLTM4LjN6bTEyNS40LTU1LjZjMC0yNS4zLTE4LjQtNDUuNS01My40LTQ1LjVsLTUxLjggMCAwIDEzOC4yIDMyLjIgMCAwLTQ3LjQgMTkuNiAwYzMwLjMgMCA1My40LTE2IDUzLjQtNDUuNHpNMjk3LjkgMzI1bDQ5LjEtMTM4LjItMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwek00MDQuNSAxODYuOGwtMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwIDQ5LjEtMTM4LjJ6Il0KICAgIH07CiAgICBmYU9jdG9wdXNEZXBsb3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2N0b3B1cy1kZXBsb3kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4MiIsICJNNDU1LjcgMzQ5LjJjLTQ1LjktMzkuMS0zNi43LTc3LjktMTYuMS0xMjguMSAzNS43LTg3LTIzLjUtMTg2LjktMTA5LjYtMjEyLjgtOTIuOS0yNy45LTE5NS43IDE2LTIzMC4zIDEwOC44LTguNyAyMy41LTEyLjUgNDguNS0xMSA3My41IDEuNyAyOS41IDE0LjcgNTMgMjQuMSA4MC4zIDE3LjIgNTAuMi0yOC4xIDkyLjctNjYuNyAxMTcuNi00Ni44IDMwLjItMzYuMyAzOS45LTguNCA0MS45IDIzLjQgMS43IDQ0LjUtNC41IDY1LjMtMTUgOS4yLTQuNiA0MC43LTE4LjkgNDUuMS0yOC42LTEyLjIgMjYuNi0zNyA3Mi43LTIxLjUgMTAyLjEgMTkuMSAzNi4yIDY3LjEtMzEuOCA3Ni43LTQ1LjggOC42LTEyLjYgNDMtODEuMyA2My42LTQ2LjkgMTguOSAzMS40IDguNiA3Ni40IDM1LjcgMTA0LjYgMzIuOSAzNC4yIDUxLjItMTguMyA1MS40LTQ0LjIgLjItMTYuNC02LjEtOTUuOSAyOS45LTU5LjkgMjEuNCAyMS40IDUyLjkgNzEuMiA4OC42IDY3IDM4LjctNC41LTIyLjEtNjgtMjguMy03OC43IDUuNCA0LjMgNTMuNyAzNC4xIDUzLjggOS41IC4xLTE4LjgtMzAuMS0zNC43LTQyLjUtNDUuM3oiXQogICAgfTsKICAgIGZhWWFtbWVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbW1lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODQwIiwgIk01MDAuNyAxNTkuNWMtLjQtMS44LTEuMi0zLjQtMi4zLTQuOHMtMi41LTIuNi00LjEtMy41Yy0zLjEtMS42LTYuNy0yLTEwLjEtMS4xbC0yNi40IDYuNiAwLS4yLTIyLjMgNS44LTEuMiAuMy0uNi0yLjJjLTE1LjUtNTguMy00NS0xMTEuOS04Ni4xLTE1Ni4yLTIuNi0yLjctNi4xLTQuMi05LjgtNC4zcy03LjMgMS4zLTEwIDMuOGwtMTAyLjkgMTAyLjctMTk5LjkgMGMtNi42IDAtMTIuOSAyLjYtMTcuNiA3LjNTMCAxMjQuOCAwIDEzMS40bDAgMjQ5QzAgMzg3IDIuNiAzOTMuMyA3LjMgMzk4czExIDcuMyAxNy42IDcuM0wyMjUgNDA1LjMgMzI4LjEgNTA4YzIuNiAyLjYgNiA0IDkuNyA0czcuMS0xLjQgOS43LTRjLjEtLjEgLjItLjMgLjQtLjQgMjkuMy0zMS41IDUyLjgtNjcuOCA2OS42LTEwNy40IDYuOS0xNi41IDEyLjctMzMuNSAxNy4zLTUwLjhsMCAwIDIwLjQgNS4zIDAtLjEgMjguMyA3LjNjLjkgLjIgMS43IC40IDIuNiAuNSAxLjQgLjIgMi44IC4yIDQuMS0uMSAyLjUtLjUgNC44LTEuNyA2LjctMy40czMuMi00IDMuOC02LjVjMTUuMi02My40IDE1LjItMTI5LjYgLjEtMTkzbDAgMHpNMzM3LjEgMjQuN2wwIDAgMCAwIDAgMHpNMjI2LjkgMTg5LjhsLTUyLjYgOTEuM2MtMSAxLjctMS41IDMuNy0xLjUgNS43bDAgNDYuMmMwIDUuOC0yLjMgMTEuNC02LjUgMTUuNnMtOS43IDYuNC0xNS42IDYuNGwtMy40IDBjLTUuOCAwLTExLjQtMi4zLTE1LjYtNi40cy02LjUtOS43LTYuNS0xNS42bDAtNDUuN2MwLTEuOS0uNS0zLjgtMS40LTUuNUw3Mi4zIDE4OS42Yy0xLjktMy40LTIuOC03LjEtMi44LTExczEuMS03LjYgMy0xMC45IDQuNy02LjEgOC4xLTggNy4xLTIuOSAxMS0yLjlsMy4zIDBjNCAwIDggMS4xIDExLjUgMy4yczYuMyA1LjEgOC4xIDguN2wzNi40IDcwLjMgMzcuNS03MC41YzEuOC0zLjUgNC42LTYuNCA3LjktOC40czcuMi0zLjIgMTEuMS0zLjIgNy44IC45IDExLjIgMi44IDYuMyA0LjcgOC4yIDguMWMyIDMuMyAzIDcuMSAzIDExcy0xIDcuNy0zIDExbDAgMHpNMzM3LjEgMjQuN2MzNS45IDQwLjYgNjEuOSA4OSA3NS44IDE0MS4zbC42IDItMTE0LjEgMjkuNiAwLTY2LjFjMC02LjYtMi43LTEyLjktNy4zLTE3LjZzLTExLTcuMy0xNy42LTcuM2wtMTkuNCAwIDgyLjEtODEuOHpNMzk3LjYgMzkybDAgMCAwIDBjLTE0LjcgMzQuOC0zNS4xIDY3LTYwLjIgOTUuMmwtODIuMi04MS45IDE5LjIgMGM2LjYgMCAxMi45LTIuNiAxNy42LTcuM3M3LjMtMTEgNy4zLTE3LjZsMC02Ni4yIDExNC42IDI5LjljLTQuNCAxNi4zLTkuOCAzMi4zLTE2LjMgNDcuOWwwIDB6bTg0LTUyLjRsMCAwLTUwLjYtMTMuMS0xMzEuNy0zNC4zIDAtNzIuNSAxMTkuNy0zMSA0LjUtMS4yYzI5LjktNy43IDQ5LjItMTIuOCA1OC4xLTE1LjEgMTIgNTUuMSAxMiAxMTIuMSAwIDE2Ny4yeiJdCiAgICB9OwogICAgZmFNb2R4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1vZHgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI4NSIsICJNMzU2IDI0MS44bDM2LjcgMjMuNyAwIDIxNC41LTEzMy04My44IDk2LjMtMTU0LjR6TTQ0MCA3NWwtMjEzLjcgMC0yMyAzNy44IDE1My41IDk2LjUgODMuMi0xMzQuM3pNMzUxIDIxNy44bC0yOTUuOC0xODUuOCAwIDIxNC41IDQ2IDI5IDI0OS44LTU3Ljd6TTk3IDI5NC4yTDggNDM3IDIyMS43IDQzNyAzNDYuNyAyMzYuNSA5NyAyOTQuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlVGhyZWFkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE5IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yOTQuMiAyNDQuM2MxOS41IDkuMyAzMy43IDIzLjUgNDEuMiA0MC45IDEwLjQgMjQuMyAxMS40IDYzLjktMjAuMiA5NS40LTI0LjIgMjQuMS01My41IDM1LTk1LjEgMzUuM2wtLjIgMGMtNDYuOC0uMy04Mi44LTE2LjEtMTA2LjktNDYuOC0yMS41LTI3LjMtMzIuNi02NS40LTMzLTExMy4xbDAtLjJjLjQtNDcuNyAxMS41LTg1LjcgMzMtMTEzLjEgMjQuMi0zMC43IDYwLjItNDYuNSAxMDYuOS00Ni44bC4yIDBjNDYuOSAuMyA4My4zIDE2IDEwOC4yIDQ2LjYgMTIuMyAxNS4xIDIxLjMgMzMuMyAyNyA1NC40bC0yNi45IDcuMmMtNC43LTE3LjItMTEuOS0zMS45LTIxLjQtNDMuNi0xOS40LTIzLjktNDguNy0zNi4xLTg3LTM2LjQtMzggLjMtNjYuOCAxMi41LTg1LjUgMzYuMi0xNy41IDIyLjMtMjYuNiA1NC40LTI2LjkgOTUuNSAuMyA0MS4xIDkuNCA3My4zIDI2LjkgOTUuNSAxOC43IDIzLjggNDcuNCAzNiA4NS41IDM2LjIgMzQuMy0uMyA1Ni45LTguNCA3NS44LTI3LjMgMjEuNS0yMS41IDIxLjEtNDcuOSAxNC4yLTY0LTQtOS40LTExLjQtMTcuMy0yMS4zLTIzLjMtMi40IDE4LTcuOSAzMi4yLTE2LjUgNDMuMi0xMS40IDE0LjUtMjcuNyAyMi40LTQ4LjQgMjMuNS0xNS43IC45LTMwLjgtMi45LTQyLjYtMTAuNy0xMy45LTkuMi0yMi0yMy4yLTIyLjktMzkuNS0xLjctMzIuMiAyMy44LTU1LjMgNjMuNS01Ny42IDE0LjEtLjggMjcuMy0uMiAzOS41IDEuOS0xLjYtOS45LTQuOS0xNy43LTkuOC0yMy40LTYuNy03LjgtMTcuMS0xMS44LTMwLjgtMTEuOWwtLjQgMGMtMTEgMC0yNiAzLjEtMzUuNiAxNy42bC0yMy0xNS44YzEyLjgtMTkuNCAzMy42LTMwLjEgNTguNS0zMC4xbC42IDBjNDEuOCAuMyA2Ni42IDI2LjMgNjkuMSA3MS44IDEuNCAuNiAyLjggMS4yIDQuMiAxLjlsLjEgLjV6bS03MS44IDY3LjVjMTctLjkgMzYuNC03LjYgMzkuNy00OC44LTguOC0xLjktMTguNi0yLjktMjktMi45LTMuMiAwLTYuNCAuMS05LjYgLjMtMjguNiAxLjYtMzguMSAxNS41LTM3LjQgMjcuOSAuOSAxNi43IDE5IDI0LjUgMzYuNCAyMy42bC0uMS0uMXoiXQogICAgfTsKICAgIGZhT2xkUmVwdWJsaWMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2xkLXJlcHVibGljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTAiLCAiTTI0My44IDEwLjJjNy41LS4zIDE1LS4zIDIyLjUtLjEgMy42IC4xIDcuMiAuNCAxMC44IC43IDQuOSAuMyA5LjggMSAxNC43IDEuNiAyLjkgLjQgNS44IDEgOC43IDEuNSA3LjkgMS4zIDE1LjcgMy4zIDIzLjQgNS40IDEyLjIgMy41IDI0LjIgNy45IDM1LjggMTMuMiAyNi42IDEyLjIgNTAuOSAyOS4yIDcxLjYgNDkuOSAyMCAyMC4xIDM2LjcgNDMuNSA0OC45IDY5LjIgMS4xIDIuNiAyLjQgNS4xIDMuNSA3LjcgMi44IDYuNCA1LjQgMTMgNy42IDE5LjYgNC4xIDEyLjMgNy4zIDI1IDkuNCAzNy44IC42IDMuMSAxIDYuMyAxLjQgOS41IC41IDMuOCAuOSA3LjcgMS4yIDExLjYgLjggOC4zIC44IDE2LjcgLjggMjUuMS0uMSA1LS4zIDkuOS0uNyAxNC45LS4yIDMuNC0uNSA2LjgtMSAxMC4xLS40IDIuNy0uNiA1LjUtMS4xIDguMi0uOSA1LjEtMS43IDEwLjMtMi45IDE1LjQtNC4xIDE4LjUtMTAuMyAzNi42LTE4LjUgNTMuNi0xNS44IDMyLjgtMzguOCA2Mi4yLTY3LjEgODUuMS0xNy4zIDE0LjEtMzYuNCAyNS45LTU2LjkgMzQuOS02LjIgMi43LTEyLjUgNS4zLTE4LjkgNy40LTMuNSAxLjItNyAyLjQtMTAuNiAzLjQtNi42IDEuOS0xMy4zIDMuNi0yMCA1LTQuNyAuOS05LjMgMS43LTE0IDIuNS01LjMgLjctMTAuNSAxLjQtMTUuOCAxLjctNi43IC43LTEzLjQgLjgtMjAuMSAuOC02LjggMC0xMy42LS4xLTIwLjQtLjgtMy4zLS4yLTYuNi0uNS05LjgtMS0yLjctLjQtNS41LS42LTguMi0xLjEtNC4xLS43LTguMi0xLjQtMTIuNC0yLjItNC4yLS45LTguNS0xLjktMTIuNy0zLTguNi0yLjItMTcuMS01LTI1LjQtOC4xLTEwLjUtNC4xLTIwLjgtOC43LTMwLjYtMTQuMi0yLjEtMS4yLTQuMy0yLjMtNi40LTMuNi0xMS4yLTYuNi0yMS45LTE0LjEtMzEuOS0yMi4zLTM0LjctMjguNC02MS40LTY2LjQtNzYuNC0xMDguNy0zLjEtOC43LTUuNy0xNy42LTcuOC0yNi43LTEuNS02LjItMi41LTEyLjQtMy42LTE4LjctLjQtMi4zLS42LTQuNy0xLTcuMS0uNi00LS44LTgtMS4yLTExLjktLjgtOS41LS43LTE5LS41LTI4LjUgLjEtMy41IC4zLTcgLjctMTAuNSAuMy0zLjIgLjUtNi40IC45LTkuNSAuNC0yLjggLjctNS42IDEuMi04LjQgLjctMy45IDEuMy03LjkgMi4xLTExLjggMy40LTE2LjUgOC41LTMyLjcgMTUuMy00OC4yIDEuMi0yLjkgMi42LTUuNyAzLjktOC42IDguMS0xNi43IDE3LjktMzIuNiAyOS41LTQ3LjEgMjAtMjUuNCA0NS4xLTQ2LjcgNzMuMy02Mi41IDcuNS00LjIgMTUuMi04IDIzLjEtMTEuNCAxNS44LTYuOSAzMi40LTEyIDQ5LjMtMTUuNCAzLjUtLjcgNy0xLjIgMTAuNi0xLjggMi42LS41IDUuMy0uNyA3LjktMS4xIDMuNS0uNSA3LjEtLjcgMTAuNi0xIDIuNS0uMiA0LjktLjQgNy40LS41em04LjYgMjQuNGMtOS4yIC4xLTE4LjQgMS0yNy42IDIuMi03LjMgMS4xLTE0LjUgMi42LTIxLjcgNC4zLTEzLjkgMy41LTI3LjUgOC4zLTQwLjUgMTQuNC0xMC41IDUtMjAuNiAxMC43LTMwLjIgMTcuMi00LjIgMi45LTguNCA1LjgtMTIuMyA5LTUuMSA0LTEwIDguMi0xNC43IDEyLjYtMi41IDIuMi00LjggNC43LTcuMiA3LjEtMjguMiAyOC44LTQ4LjQgNjUuNC01Ny41IDEwNC43LTIgOC40LTMuNSAxNy00LjQgMjUuNi0xLjEgOC45LTEuNCAxNy45LTEuNCAyNi44IC4xIDcuMSAuNCAxNC4zIDEuMiAyMS40IC42IDcuMSAxLjkgMTQuMiAzLjIgMjEuMiAxLjEgNC42IDIgOS4zIDMuMyAxMy45IDYuMyAyMy40IDE2LjUgNDUuNyAzMC4xIDY1LjggOC42IDEzIDE4LjggMjQuOSAzMCAzNS44IDE2LjMgMTUuOCAzNSAyOSA1NS4zIDM5LjIgNy4zIDMuNSAxNC43IDYuOSAyMi4zIDkuNiA1IDEuOCAxMC4xIDMuNiAxNS4yIDUgMTEuMyAzLjIgMjIuOCA1LjYgMzQuNCA3LjEgMi45IC4zIDUuOCAuNiA4LjcgLjkgMTMuOCAxLjEgMjcuNyAxIDQxLjUtLjQgNC40LS42IDguOS0xIDEzLjMtMS44IDMuNi0uNyA3LjMtMS4yIDEwLjktMi4xIDQuMS0xIDguMy0xLjkgMTIuNC0zLjEgMjYuNS03LjMgNTEuNi0xOS43IDczLjYtMzYuMiAxNS44LTExLjggMzAtMjUuOCA0Mi4xLTQxLjMgMy4zLTQgNi4yLTguMyA5LjEtMTIuNiAzLjQtNS4xIDYuNi0xMC4yIDkuNi0xNS41IDIuNC00LjQgNC43LTguOSA3LTEzLjQgNS43LTEyLjEgMTAuMy0yNC42IDEzLjgtMzcuNSAyLjYtMTAgNC43LTIwLjIgNS45LTMwLjQgMS44LTEzLjUgMS45LTI3LjEgMS4zLTQwLjctLjMtMy45LS43LTcuOC0xLTExLjctMi4yLTE5LjEtNi44LTM3LjktMTMuOC01NS44LTYtMTUuMS0xMy41LTI5LjYtMjIuNi00My4xLTEyLjctMTguOC0yOC4yLTM1LjctNDYtNDkuOC0yNS0yMC01NC41LTM0LjUtODUuNi00Mi4xLTcuOC0xLjktMTUuNy0zLjMtMjMuNi00LjQtMy45LS42LTcuOC0uOC0xMS44LTEuMi03LjQtLjYtMTQuOC0uNy0yMi4yLS42ek0xNDcuMyA4My41YzEzLjMtOC45IDI4LjEtMTUuNCA0My4zLTIwLjItMy4yIDEuOC02LjQgMy40LTkuNSA1LjMtMTEuMiA2LjctMjEuNSAxNC45LTMwLjQgMjQuNS02LjggNy40LTEyLjggMTUuNy0xNyAyNC45LTMuMyA2LjktNS42IDE0LjItNi45IDIxLjctLjkgNC44LTEuMyA5LjgtMS4yIDE0LjggLjEgMTMuNyA0LjQgMjcuMSAxMS4zIDM4LjggNS45IDEwLjIgMTMuNiAxOS4zIDIyLjQgMjcuMyA0LjkgNC40IDEwLjIgOC4xIDE1IDEyLjYgMi4zIDIuMiA0LjUgNC40IDYuNCA2LjkgMi42IDMuMyA0LjkgNyA2IDExLjEgLjkgMyAuNyA2LjIgLjcgOS4zIDAgNC4xIDAgOC4yIDAgMTIuMyAuMSAzLjUgMCA3LjEgLjEgMTAuNiAuMSAyLjQgMCA0LjggLjEgNy4xIC4yIDUuOCAuMSAxMS41IC4xIDE3LjMgLjEgMi45IDAgNS44IC4xIDguNyAwIDEuNiAuMSAzLjMgMCA0LjktLjkgLjEtMS44IC4yLTIuNyAuMi0xMSAwLTIxLjktMi42LTMyLTYuOS02LTIuNy0xMS44LTUuOS0xNy4xLTkuOC01LjgtNC4yLTExLjEtOS0xNS44LTE0LjMtNi41LTcuMi0xMi0xNS40LTE2LjYtMjMuOS0xLjEtMi0yLjItNC0zLjItNi4xLTEuMi0yLjYtMi42LTUuMS0zLjctNy44LTQtOS43LTYuNi0xOS45LTguMS0zMC4zLS41LTQuNC0xLjEtOC45LTEuMi0xMy4zLS43LTE1LjcgLjgtMzEuNiA0LjctNDYuOCAyLjEtOC4yIDQuOC0xNi4yIDguMy0yMy44IDYuMy0xNC4yIDE1LjMtMjcuMiAyNi4zLTM4LjIgNi4zLTYuMiAxMy4xLTExLjggMjAuNS0xNi43ek0zMjIuNyA2My40YzIuNyAuNyA1LjQgMS43IDguMSAyLjcgNi40IDIuMyAxMi43IDQuOCAxOC43IDggMTMuMSA2LjQgMjUuMyAxNC44IDM1LjggMjUgMTAuMiAxMCAxOC43IDIxLjYgMjUuMSAzNC4zIDEuMyAyLjcgMi42IDUuNSAzLjggOC4zIDYuMyAxNS4xIDEwIDMxLjMgMTEuMiA0Ny42IC40IDQuNSAuNCA5LjEgLjUgMTMuNiAuMSAxMS42LTEuNSAyMy4zLTQuMyAzNC41LTIgNy4zLTQuMyAxNC41LTcuOSAyMS4yLTMuMiA2LjYtNi43IDEzLjItMTAuOCAxOS4yLTYuOSAxMC41LTE1LjYgMTkuOS0yNS44IDI3LjItMTAuNSA3LjYtMjIuNiAxMy0zNS40IDE1LjQtMy41IC43LTcuMSAxLjEtMTAuNyAxLjItMS44IC4xLTMuNyAuMi01LjYtLjEtLjMtMi4xIDAtNC4zIDAtNi41IDAtMy43IC4xLTcuNCAuMS0xMS4yIC4yLTcgMC0xNC4xIC4yLTIxLjEgMC0yLjQgMC00LjggMC03LjEgLjItNS4xIDAtMTAuMSAuMS0xNS4yIC4xLTMtLjItNiAuNS05IC43LTIuNSAxLjgtNC45IDMuMS03LjEgNC41LTcuMyAxMS4xLTEzIDE3LjctMTguMyA1LjQtNC4yIDEwLjUtOC44IDE1LTEzLjggNy43LTguNCAxNC4yLTE3LjkgMTguOC0yOC4zIDIuNS01LjkgNC41LTEyLjEgNS41LTE4LjUgLjktNC40IDEuMS04LjggMS0xMy4zIDAtNy44LTEuNC0xNS42LTMuNi0yMy4yLTEuOC01LjctNC4zLTExLjItNy4xLTE2LjQtMy45LTYuOS04LjYtMTMuMy0xNC0xOS4yLTkuOS0xMC44LTIxLjgtMTkuOS0zNC42LTI3LjEtMS44LTEtMy44LTEuOC01LjYtM3pNMjIxLjkgMTIxLjljMS0xLjIgMi0yLjMgMy4xLTMuNC0uNiAuOS0xLjMgMS44LTIgMi43LTMuMSAzLjktNS41IDguMy03IDEzLjEtLjkgMy4zLTEuNyA2LjYtMS43IDEwLS4xIDIuNS0uMSA1LjEgLjMgNy42IDEuMSA3LjYgNC4zIDE0LjkgOC44IDIxLjEgMiAyLjcgNC4yIDUuMyA2LjkgNy4zIDEuNiAxLjMgMy41IDIuMSA1LjMgMyAzLjEgMS43IDYuMyAzLjIgOS4xIDUuNSAyLjcgMi4xIDQuNiA1LjMgNC40IDguOCAwIDczLjcgMCAxNDcuMyAwIDIyMSAwIDEuNC0uMSAyLjcgMCA0IC4xIDEuNSAuOCAyLjggMS41IDQuMSAuOSAxLjcgMS44IDMuMyAzLjIgNC42IC45IC44IDIgMS40IDMuMiAxLjIgMS41LS4yIDIuNy0xLjQgMy40LTIuNiAxLTEuNSAxLjctMy4yIDIuMy00LjkgLjgtMi4xIC40LTQuNCAuNS02LjYgLjEtNCAwLTguMSAuMS0xMi4xIDAtNS45IDAtMTEuOCAuMS0xNy43IC4xLTMuNiAwLTcuMiAuMS0xMC45IC4yLTQgMC04LjEgLjEtMTIuMSAwLTYgMC0xMiAuMS0xOCAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMS0zLjkgMC03LjkgLjEtMTEuOCAwLTYgMC0xMiAuMS0xOCAuMi0zLjkgMC03LjkgLjItMTEuOCAuMyAxLjQgLjEgMi45IC4yIDQuNCAuMiAzLjYgLjQgNy4yIC44IDEwLjggLjMgMy40IC40IDYuOSAuOSAxMC4zIC40IDMuMSAuNSA2LjIgMSA5LjMgLjYgNC4xIC45IDguMiAxLjUgMTIuMyAxLjUgOSAyLjggMTguMSA1LjEgMjcgMS4xIDQuOCAyLjQgOS42IDQgMTQuMyAyLjUgNy45IDUuNyAxNS43IDEwLjMgMjIuNiAxLjcgMi42IDMuOSA1IDYuMSA3LjIgLjMgLjIgLjYgLjUgLjkgLjcgLjYgLjMgMS4zLS4xIDEuNy0uNiAuNy0uOSAxLjItMS45IDEuNy0yLjkgNC4xLTcuOCA4LjItMTUuNiAxMi4zLTIzLjMgLjctMS4zIDEuNC0yLjYgMi42LTMuNiAxLjgtMS42IDMuOC0yLjcgNi0zLjYgMi45LTEuMiA1LjktMi4yIDktMi40IDYuNi0uNiAxMy4xIC43IDE5LjYgMS44IDMuNyAuNiA3LjQgMS4yIDExLjEgMS40IDMuNyAuMSA3LjUgLjEgMTEuMi0uMyA4LjYtLjkgMTctMyAyNC45LTYuMiA1LjMtMi4yIDEwLjUtNC44IDE1LjMtNy45IDExLjUtNy4yIDIxLjUtMTYuNiAzMC0yNyAxLjItMS40IDIuMi0yLjkgMy41LTQuMy0xLjIgMy4yLTIuNyA2LjQtNC4yIDkuNS0xLjMgMi45LTIuOCA1LjYtNC4zIDguNC01LjIgOS42LTExIDE4LjktMTcuOCAyNy41LTQgNS4yLTguNSAxMC4xLTEzLjMgMTQuNi02LjYgNi4xLTE0LjEgMTEuNC0yMi40IDE0LjgtOC4yIDMuNC0xNy4zIDQuNi0yNi4xIDMuMy0zLjYtLjYtNy0xLjctMTAuNC0yLjktMi44LTEtNS40LTIuNC04LTMuNy0zLjQtMS43LTYuNi0zLjgtOS43LTYuMSAyLjcgMy4xIDUuNyA1LjkgOC43IDguNiA0LjMgMy44IDguNyA3LjMgMTMuNiAxMC4yIDQgMi41IDguMyA0LjQgMTIuOCA1LjUgMS41IC40IDMgLjUgNC41IC42LTEuMyAxLjEtMi42IDItNCAzLTkuNiA2LjUtMjAgMTEuOS0zMC43IDE2LjQtMjAuOSA4LjctNDMuMiAxNC02NS43IDE1LjMtNC43IC4yLTkuMyAuNC0xNCAuNC01LS4xLTEwLS4xLTE0LjktLjctMTEuMi0uOC0yMi4zLTIuNy0zMy4yLTUuNC0xMC40LTIuNy0yMC42LTYuMS0zMC4zLTEwLjYtOC43LTMuOS0xNy4xLTguNC0yNS0xMy44LTEuOC0xLjMtMy43LTIuNS01LjQtNC4xIDYuNi0xLjIgMTMtMy40IDE5LTYuNSA1LjctMi45IDExLTYuNyAxNS42LTExLjEgMi4yLTIuMiA0LjMtNC42IDYuMi03LjEtMy40IDIuMS02LjkgNC4yLTEwLjYgNS44LTQuNCAyLjItOS4xIDMuOC0xMy44IDUtNS43IDEuNS0xMS43IDEuNy0xNy42IDEuMS04LjEtMS0xNS45LTQuMy0yMi41LTktNC4zLTIuOS04LjItNi40LTEyLTEwLjEtOS45LTEwLjItMTguMi0yMS44LTI1LjctMzMuOS0zLjktNi4zLTcuNS0xMi43LTExLjEtMTkuMi0xLTItMi4xLTQuMS0zLjItNi4xIDIuOCAyLjkgNS42IDYgOC40IDguOSAxOS4yIDE5LjIgMzcuNiAzMi4zIDUzLjcgMzUuNSAzLjEgLjcgNi4zIC41IDkuNSAuOCAyLjggLjMgNS42IC4yIDguMyAuMyA1IC4xIDEwLjEgMCAxNS4yLS4yIDMuNi0uMiA3LjMtLjcgMTAuOS0xLjEgMi4xLS4yIDQuMS0uNyA2LjEtMS4yIDMuOS0xIDguMS0xIDExLjggLjYgNC44IDEuOCA4LjQgNS42IDExLjQgOS43IDIuMiAzIDQuMSA2LjIgNS43IDkuNiAxLjIgMi40IDIuNSA0LjggMy42IDcuMyAxIDIuMiAyLjIgNC40IDMuNCA2LjUgLjcgMSAxLjQgMi4yIDIuNiAyLjYgMS4xLS44IDEuNy0xLjkgMi4zLTMgMi4xLTQuMiAzLjQtOC42IDQuOS0xMyAyLTYuNiAzLjgtMTMuMyA1LjItMjAgMi4yLTkuMyAzLjItMTguNyA0LjUtMjguMSAuNi00IC44LTggMS4zLTEyIC45LTEwLjYgMS45LTIxLjMgMi4yLTMxLjkgLjEtMS45IC4yLTMuNyAuMy01LjYgMC00LjMgLjItOC43IC4yLTEzIDAtMi40IDAtNC44IDAtNy4xIDAtNS4xLS4yLTEwLjEtLjItMTUuMi0uMi02LjYtLjctMTMuMi0xLjMtMTkuOC0uNy01LjktMS41LTExLjgtMy4xLTE3LjUtMi03LjctNS42LTE1LTkuOC0yMS44LTMuMi01LjEtNi44LTkuOS0xMS4xLTE0LTMuOS0zLjktOC42LTcuMS0xMy45LTguNC0xLjUtLjQtMy4xLS40LTQuNi0uNiAuMS0zIC43LTUuOSAxLjMtOC44IDEuNi03LjcgMy44LTE1LjMgNi44LTIyLjYgMS41LTQgMy40LTcuOSA1LjQtMTEuNyAzLjQtNi42IDcuNi0xMi44IDEyLjUtMTguNXptMzEuMyAxLjdjLjQtLjEgLjctLjEgMS4xLS4yIC4yIDEuOCAuMSAzLjYgLjEgNS40bDAgMzguMWMwIDEuNyAuMSAzLjUtLjIgNS4yLS40IDAtLjcgMC0xLjEgMC0uOS0zLjgtMS43LTcuNi0yLjYtMTEuMy0uNC0xLjUtLjYtMy4xLTEuMS00LjYtMS43LS4yLTMuNC0uMi01LjItLjItNS4xIDAtMTAuMSAwLTE1LjIgMC0xLjcgMC0zLjMgLjEtNSAwIDAtLjQtLjMtLjkgLjItMS4yIDEuMy0uNyAyLjctLjkgNC4xLTEuNCAzLjQtMS4xIDYuOS0yLjIgMTAuMy0zLjMgMS40LS41IDIuOS0uNyA0LjItMS41IDAtLjYgMC0xLjEgMC0xLjctMS4yLS42LTIuNS0uOS0zLjgtMS4zLTMuMS0xLTYuMy0yLTkuNC0zLTEuOC0uNi0zLjctMS01LjQtMS44IDAtLjQtLjEtLjctLjEtMS4xIDUuMS0uMiAxMC4yIC4xIDE1LjMtLjEgMy40LS4xIDYuNyAuMSAxMC4xLS4xIC4xLS40IC4zLS44IC40LTEuMiAxLjEtNC45IDIuMy05LjggMy40LTE0Ljd6bTYtLjJjLjQgMCAuNyAuMSAxLjEgLjIgMSAzLjggMS43IDcuOCAyLjcgMTEuNiAuNCAxLjQgLjYgMi45IDEgNC4zIDIuNSAuMiA1LjEgMCA3LjYgMCA1LjIgLjEgMTAuMyAuMSAxNS41IC4xIC44IDAgMS41IDAgMi4zIC4xIDAgLjQtLjEgLjctLjEgMS4xLTEuOCAuOC0zLjggMS4yLTUuNyAxLjktMy43IDEuMi03LjUgMi40LTExLjIgMy42LS42IC4yLTEuMSAuNC0xLjcgLjYtLjIgLjYtLjIgMS4xLS4xIDEuNyAuOSAuNSAxLjggLjggMi44IDEuMSA0LjkgMS41IDkuNyAzLjEgMTQuNiA0LjYgLjQgLjEgLjggLjMgMS4xIC41IC40IC4zIC4yIC44IC4yIDEuMi0xLjcgLjEtMy4zIDAtNSAwLTUuMiAwLTEwLjMgMC0xNS41IDAtMS42IDAtMy4yIDAtNC44IC4yLS41IDEuNy0uNyAzLjQtMS4yIDUuMS0uOSAzLjYtMS41IDcuMi0yLjUgMTAuOC0uNCAwLS43IDAtMS4xIC4xLS4zLTEuNy0uMi0zLjUtLjItNS4ybDAtMzguMWMwLTEuOC0uMS0zLjYgLjEtNS40em0tMTg2IDQ1YzEuMS0yLjIgMi4xLTQuNCAzLjQtNi41LTEuOCA3LjYtMi45IDE1LjMtMy42IDIzLS44IDcuNy0uOCAxNS41LS41IDIzLjIgMS4xIDE5LjkgNS41IDM5LjggMTQuMiA1Ny45IDMgNiA2LjQgMTEuOCAxMC41IDE3LjEgNi4xIDcuNSAxMi41IDE0LjggMTkuOCAyMS4xIDQuOCA0LjEgMTAgNy44IDE1LjUgMTAuOCAzLjMgMS43IDYuNSAzLjQgOS45IDQuNyA1IDIgMTAuMiAzLjYgMTUuNCA0LjkgMy44IDEgNy44IDEuNCAxMS41IDIuNyA1IDEuNiA5LjUgNC42IDEzIDguNCA0LjkgNS4yIDguMSAxMS45IDEwLjIgMTguNyAxIDIuOSAxLjYgNS45IDIuMiA4LjkgLjIgLjggLjIgMS41IC4yIDIuMy02LjUgMi44LTEzLjMgNS4xLTIwLjMgNi4yLTQuMSAuOC04LjMgMS0xMi41IDEuMS0xMC4yIC4yLTIwLjUtMS44LTMwLjEtNS4xLTMuNy0xLjQtNy41LTIuOS0xMS00LjctOC4xLTMuOC0xNS42LTguNy0yMi41LTE0LjUtMi45LTIuNi01LjgtNS4xLTguNC04LTkuMi05LjgtMTYuMy0yMS40LTIxLjgtMzMuNy0yLjQtNS41LTQuNi0xMS4yLTYuNC0xNy0xLjItMy45LTIuNC03LjktMy4zLTExLjktLjctMi45LTEuMi01LjktMS45LTguOS0uNS0yLjEtLjctNC4zLTEtNi41LS44LTUuNC0xLjMtMTAuOS0xLjMtMTYuNCAuMS02LjIgLjItMTIuNCAxLjEtMTguNSAuNC0yLjkgLjctNS43IDEuMi04LjYgMS01LjcgMi4xLTExLjQgMy43LTE2LjkgMy4xLTExLjYgNy41LTIzIDEyLjctMzMuOHptMzYzLjctNi40YzEuMSAxLjcgMS45IDMuNSAyLjggNS4zIDIuMSA0LjUgNC4yIDguOSA2IDEzLjUgNy42IDE4LjggMTIuMyAzOC44IDEzIDU5IDAgMS44IC4xIDMuNSAuMSA1LjMgLjEgOS42LTEuMyAxOS4xLTMuMiAyOC41LS43IDMuNi0xLjUgNy4yLTIuNiAxMC43LTQgMTQuNy0xMCAyOS0xOC40IDQxLjgtOC4yIDEyLjYtMTkgMjMuNS0zMS44IDMxLjQtNS43IDMuNi0xMS44IDYuNi0xOCA5LjItNS44IDIuMi0xMS43IDQtMTcuOCA1LjEtNi40IDEtMTIuOSAxLjUtMTkuNCAxLjItNy45LS41LTE1LjgtMi4xLTIzLjItNC44LTEuOS0uOC0zLjktMS41LTUuOC0yLjMtLjItMS41IC4yLTMgLjUtNC41IDEuMi01LjcgMy0xMS40IDUuNy0xNi42IDIuNC00LjUgNS41LTguNyA5LjUtMTEuOSAyLjQtMi4xIDUuMi0zLjYgOC4yLTQuOCAzLjYtMS41IDcuNS0yIDExLjItMi44IDcuMi0xLjcgMTQuNC0zLjkgMjEuMi03IDEwLjMtNC43IDE5LjctMTEuNCAyNy42LTE5LjUgMS42LTEuNiAzLjItMy4yIDQuNy00LjkgMy40LTMuOCA2LjctNy42IDkuOC0xMS41IDcuNS0xMC4xIDEyLjgtMjEuNiAxNi43LTMzLjUgMS42LTUuMyAzLjItMTAuNiA0LjItMTYuMSAuNi0yLjkgMS01LjggMS41LTguNyAuOS02LjEgMS42LTEyLjIgMS43LTE4LjQgLjEtNi42IC4xLTEzLjMtLjUtMTkuOS0uNy04LTEuOS0xNi0zLjctMjMuOHoiXQogICAgfTsKICAgIGZhU3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdXNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3ZDYiLCAiTTYwNC41IDIxMGExMC40IDEwLjQgMCAxIDEgLTExLjQtMTcuNCAxMC40IDEwLjQgMCAxIDEgMTEuNCAxNy40ek02MjEgMTg3LjJhMzguNSAzOC41IDAgMSAxIC03NSAxNy42IDM4LjUgMzguNSAwIDEgMSA3NS0xNy42ek00MzMuNyAzMzYuN2MzLjIgNC42IDUuOCA5IDcuMyAxMy40IDEgMy4xIDIuNCA3LjMgNS41IDguOSAuMiAuMSAuMyAuMiAuNSAuMiA1LjcgMi4xIDIwLjMgMS43IDIwLjMgMS43bDI2LjggMGMyLjMgMCAyMi40IDAgMjEuOS0yLjMtMi40LTEwLjgtMTQuOS0xMi43LTI0LjQtMTguMy04LjctNS4yLTE3LTExLjEtMjAuOC0yMS4zLTItNS4yLS44LTE3LjQgMi42LTIxLjggMi41LTMuMiA2LjEtNS4zIDEwLTYuMiA0LjMtLjkgOC44LS4xIDEzLjEgLjMgNS4zIC41IDEwLjYgMS41IDE1LjkgMi4yIDEwLjMgMS4zIDIwLjYgMS45IDMxIDEuNiAxNy4xLS41IDM0LjItMy4yIDUwLjQtOC43IDExLjMtMy44IDIyLjQtOC45IDMyLTE2LjEgMTAuOS04LjEgOC4xLTcuNC0zLTYuMi0xMy4zIDEuNC0yNi42IDEuNi0zOS45IC44LTEyLjQtLjctMjQuNy0yLjItMzUuOS03LjktOC44LTQuNi0xNi40LTkuMS0yMy40LTE2LjItMS0xLjEtMS43LTQuMiAuMi02LjIgMS45LTEuOSA1LjgtLjggNyAuMiAxMi4yIDEwLjIgMzAuNSAxOC42IDQ5LjMgMTkuNSAxMC4yIC41IDIwLjEgLjcgMzAuNCAuMyA1LjEtLjIgMTIuOC0uMiAxNy45LS4zIDIuNiAwIDkuOCAuNyAxMS4yLTIuMSAuNC0uOCAuNC0xLjggLjMtMi43LTEuNS00MC45LTQuNS04Ni45LTQ3LjMtMTA2LjUtMzEuOS0xNC42LTc5LjctMzcuMi05OS45LTQ2LjYtNC43LTIuMi0xMC4yIDEuMy0xMC4yIDYuNSAwIDEzLjYgLjcgMzMuMyAuNyA1MS4xLTkuNy05LjktMjYtMTYuMS0zOC40LTIxLjgtMTQuMS02LjUtMjguNy0xMi00My41LTE2LjYtMjkuOC05LjItNjAuNy0xNC45LTkxLjctMTgtMzUuMi0zLjUtNzEtMS44LTEwNS43IDUuMy01Ni45IDEyLjItMTEzLjEgMzkuNy0xNTUuNyA3OS44LTI2LjEgMjQuNi00Ni42IDU5LjctNDggOTUuMi0yIDUwLjMgMTIuMSA3Ny4zIDM4IDEwNS4yIDQxLjMgNDQuNCAxMzAuMiA1MC42IDE2Ni4yLTIgMTYuMi0yMy43IDE5LjctNTUuOCA4LTgyLTExLjgtMjYuMi0zOC44LTQ1LjEtNjcuNC00Ni0yMi4yLS43LTQ1LjkgMTAuNi01NC41IDMxLjEtNi41IDE1LjctMi44IDM1LjEgOSA0Ny4zIDQuNiA0LjggMTAuOSA4LjcgMTcuNyA3LjEgNC0uOSA3LjQtMy45IDgtOCAuOS02LTQuNC05LjktNy42LTE0LjUtNS44LTguMy00LjctMjAuOSAyLjctMjcuOSA2LjItNiAxNS4zLTcuOCAyMy45LTcuNyA4IDAgMTYuMiAxLjQgMjMuMSA1LjUgOS43IDUuNyAxNi4yIDE2LjIgMTguNCAyNy4yIDYuNyAzMy0yMC4yIDU5LjktNTYuNiA2Mi0xOC42IDEuMS0zNy42LTMuOC01Mi4xLTE1LjUtMzYuOS0yOS44LTQ1LjktOTAuMy0zLjgtMTIyLjcgNDAtMzAuNyA5MC40LTIyLjggMTIwLjItNi44IDIzLjggMTIuOCA0MS41IDMzLjYgNTUgNTYuNyA2LjcgMTEuNiAxMi41IDIzLjcgMTcuOCAzNi4xIDUuMSAxMS44IDkuOSAyMy44IDIwLjIgMzIuNSA2LjggNS44IDE1LjIgNS42IDI0LjEgNS42bDUwLjggMGM2LjkgMCA1LjItNC42IDIuMi03LjctNi43LTYuOS0xNi40LTguNC0yNS40LTEwLjktMjAuNS01LjYtMTguNC0zMi44LTEyLjctMzIuOCAxOC4zIDAgMTguOSAuNiAzNC45IC4zIDIzLjItLjMgMzAuMi0xLjcgNDguMyA1IDkuNyAzLjYgMTkgMTMuMSAyNS4xIDIxLjd6Il0KICAgIH07CiAgICBmYUFwcFN0b3JlSW9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcC1zdG9yZS1pb3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3MCIsICJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyNyAzODQuNWMtNS41IDkuNi0xNy44IDEyLjgtMjcuMyA3LjMtOS42LTUuNS0xMi44LTE3LjgtNy4zLTI3LjNsMTQuMy0yNC43YzE2LjEtNC45IDI5LjMtMS4xIDM5LjYgMTEuNEwxMjcgMzg0LjV6bTEzOC45LTUzLjlMODQgMzMwLjZjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUxIDAgNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNiA2Mi4xIDBjMjAuMiAwIDMxLjUgMjMuNyAyMi43IDQwem05OC4xIDBsLTI5IDAgMTkuNiAzMy45YzUuNSA5LjYgMi4yIDIxLjgtNy4zIDI3LjMtOS42IDUuNS0yMS44IDIuMi0yNy4zLTcuMy0zMi45LTU2LjktNTcuNS05OS43LTc0LTEyOC4xLTE2LjctMjktNC44LTU4IDcuMS02Ny44IDEzLjEgMjIuNyAzMi43IDU2LjcgNTguOSAxMDJsNTIgMGMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6Il0KICAgIH07CiAgICBmYVNxdWFyZURyaWJiYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1kcmliYmJsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJkcmliYmJsZS1zcXVhcmUiXSwgImYzOTciLCAiTTE2NS45IDEzMi41Yy0zOC4zIDE4LTY2LjggNTMuMy03NS43IDk1LjcgNi4xIC4xIDYyLjQgLjMgMTI2LjQtMTYuNy0yMi43LTQwLjItNDcuMS03NC4xLTUwLjctNzl6bTI2LjEtOS4xYzMuOCA1LjEgMjguNiAzOC45IDUxIDgwIDQ4LjYtMTguMyA2OS4xLTQ1LjkgNzEuNi00OS40LTMzLjYtMjkuOC03OS4zLTQxLjEtMTIyLjYtMzAuNnpNMjc3LjQgMzgyYy0yLTEyLTEwLTUzLjgtMjkuMi0xMDMuNi01NS4xIDE4LjgtOTMuOCA1Ni40LTEwOC4xIDg1LjYgNDAuNSAzMS42IDkzLjMgMzYuNyAxMzcuMyAxOHpNMjI3LjggMjMyLjZDMTU5LjYgMjUzIDkzLjQgMjUyLjIgODcuNCAyNTJsMCA0LjJjMCAzNS4xIDEzLjMgNjcuMSAzNS4xIDkxLjQgMjIuMi0zNy45IDY3LjEtNzcuOSAxMTYuNS05MS44LTMuNC03LjgtNy4yLTE1LjUtMTEuMS0yMy4ybC0uMSAwem03Mi41IDEzNi45YzMwLjctMjAuNyA1Mi41LTUzLjYgNTguNi05MS42LTQuNi0xLjUtNDIuMy0xMi43LTg1LjEtNS44IDE3LjkgNDkuMSAyNS4xIDg5LjEgMjYuNSA5Ny40em0tMzQuOC0xMTljNDUuNS01LjcgOTAuNyAzLjQgOTUuMiA0LjQtLjMtMzIuMy0xMS44LTYxLjktMzAuOS04NS4xLTIuOSAzLjktMjUuOCAzMy4yLTc2LjMgNTMuOSA0LjggOS44IDguMyAxNy44IDEyIDI2Ljh6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0yMjQgOTZhMTYwIDE2MCAwIDEgMSAwIDMyMCAxNjAgMTYwIDAgMSAxIDAtMzIweiJdCiAgICB9OwogICAgZmFEcmliYmJsZVNxdWFyZSA9IGZhU3F1YXJlRHJpYmJibGU7CiAgICBmYVVpa2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVpa2l0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDMiLCAiTTQ0My45IDEyOGwwIDI1Ni0yMjUuOSAxMjgtMjE4LTEyOCAwLTIxNC4zIDg3LjYgNDUuMSAwIDExNyAxMzMuNSA3NS41IDEzNS44LTc1LjUgMC0xNTEtMTAxLjEtNTcuNiA4Ny42LTUzLjEgMTAwLjUgNTcuOXpNMzA4LjYgNDkuMWwtODQuOC00OS4xLTg4LjYgNTQuOCA4NiA0Ny4zIDg3LjQtNTN6Il0KICAgIH07CiAgICBmYVN1cGVycG93ZXJzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cGVycG93ZXJzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyZGQiLCAiTTQ0OCAzMmMtODMuMyAxMS0xNjYuOCAyMi0yNTAgMzMtOTIgMTIuNS0xNjMuMyA4Ni43LTE2OSAxODAtMy4zIDU1LjUgMTggMTA5LjUgNTcuOCAxNDguMkwwIDQ4MGM4My4zLTExIDE2Ni41LTIyIDI0OS44LTMzIDkxLjgtMTIuNSAxNjMuMy04Ni44IDE2OC43LTE3OS44IDMuNS01NS41LTE4LTEwOS41LTU3LjctMTQ4LjJMNDQ4IDMyek0zNjguMyAyNjQuM2MtNC4yIDc5LjUtNzQgMTM5LjItMTUyLjggMTM0LjUtNzkuNS00LjctMTQwLjctNzEtMTM2LjMtMTUxIDQuNS03OS4yIDc0LjMtMTM5LjMgMTUzLTEzNC41IDc5LjMgNC43IDE0MC41IDcxIDEzNi4xIDE1MXoiXQogICAgfTsKICAgIGZhWW91dHViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5b3V0dWJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE4MDJdLCAiZjE2NyIsICJNNTQ5LjcgMTI0LjFDNTQzLjUgMTAwLjQgNTI0LjkgODEuOCA1MDEuNCA3NS41IDQ1OC45IDY0IDI4OC4xIDY0IDI4OC4xIDY0UzExNy4zIDY0IDc0LjcgNzUuNUM1MS4yIDgxLjggMzIuNyAxMDAuNCAyNi40IDEyNC4xIDE1IDE2NyAxNSAyNTYuNCAxNSAyNTYuNHMwIDg5LjQgMTEuNCAxMzIuM2M2LjMgMjMuNiAyNC44IDQxLjUgNDguMyA0Ny44IDQyLjYgMTEuNSAyMTMuNCAxMS41IDIxMy40IDExLjVzMTcwLjggMCAyMTMuNC0xMS41YzIzLjUtNi4zIDQyLTI0LjIgNDguMy00Ny44IDExLjQtNDIuOSAxMS40LTEzMi4zIDExLjQtMTMyLjNzMC04OS40LTExLjQtMTMyLjN6TTIzMi4yIDMzNy42bDAtMTYyLjQgMTQyLjcgODEuMi0xNDIuNyA4MS4yeiJdCiAgICB9OwogICAgZmFFbWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbWJlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDIzIiwgIk02MzkuOSAyNTQuNmMtMS4xLTEwLjctMTAuNy02LjgtMTAuNy02LjhzLTE1LjYgMTIuMS0yOS4zIDEwLjdjLTEzLjctMS4zLTkuNC0zMi05LjQtMzJzMy0yOC4xLTUuMS0zMC40Yy04LjEtMi40LTE4IDcuMy0xOCA3LjNzLTEyLjQgMTMuNy0xOC4zIDMxLjJsLTEuNiAuNXMxLjktMzAuNi0uMy0zNy42Yy0xLjYtMy41LTE2LjQtMy4yLTE4LjggM3MtMTQuMiA0OS4yLTE1IDY3LjJjMCAwLTIzLjEgMTkuNi00My4zIDIyLjhzLTI1LTkuNC0yNS05LjQgNTQuOC0xNS4zIDUyLjktNTkuMS00NC4yLTI3LjYtNDktMjRjLTQuNiAzLjUtMjkuNCAxOC40LTM2LjYgNTkuNy0uMiAxLjQtLjcgNy41LS43IDcuNXMtMjEuMiAxNC4yLTMzIDE4YzAgMCAzMy01NS42LTcuMy04MC45LTExLjQtNi44LTIxLjMtLjUtMjcuMiA1LjMgMTMuNi0xNy4zIDQ2LjQtNjQuMiAzNi45LTEwNS4yLTUuOC0yNC40LTE4LTI3LjEtMjkuMi0yMy4xLTE3IDYuNy0yMy41IDE2LjctMjMuNSAxNi43cy0yMiAzMi0yNy4xIDc5LjUtMTIuNiAxMDUuMS0xMi42IDEwNS4xLTEwLjUgMTAuMi0yMC4yIDEwLjctNS40LTI4LjctNS40LTI4LjcgNy41LTQ0LjYgNy01Mi4xLTEuMS0xMS42LTkuOS0xNC4yYy04LjktMi43LTE4LjUgOC42LTE4LjUgOC42cy0yNS41IDM4LjctMjcuNyA0NC42bC0xLjMgMi40LTEuMy0xLjZzMTgtNTIuNyAuOC01My41LTI4LjUgMTguOC0yOC41IDE4LjgtMTkuNiAzMi44LTIwLjQgMzYuNWwtMS4zLTEuNnM4LjEtMzguMiA2LjQtNDcuNmMtMS42LTkuNC0xMC41LTcuNS0xMC41LTcuNXMtMTEuMy0xLjMtMTQuMiA1LjktMTMuNyA1NS4zLTE1IDcwLjdjMCAwLTI4LjIgMjAuMi00Ni44IDIwLjQtMTguNSAuMy0xNi43LTExLjgtMTYuNy0xMS44czY4LTIzLjMgNDkuNC02OS4yYy04LjMtMTEuOC0xOC0xNS41LTMxLjctMTUuMy0xMy43IC4zLTMwLjMgOC42LTQxLjMgMzMuMy01LjMgMTEuOC02LjggMjMtNy44IDMxLjUgMCAwLTEyLjMgMi40LTE4LjgtMi45cy0xMCAwLTEwIDAtMTEuMiAxNC0uMSAxOC4zIDI4LjEgNi4xIDI4LjEgNi4xYzEuNiA3LjUgNi4yIDE5LjUgMTkuNiAyOS43IDIwLjIgMTUuMyA1OC44LTEuMyA1OC44LTEuM2wxNS45LTguOHMuNSAxNC42IDEyLjEgMTYuNyAxNi40IDEgMzYuNS00Ny45YzExLjgtMjUgMTIuNi0yMy42IDEyLjYtMjMuNmwxLjMtLjNzLTkuMSA0Ni44LTUuNiA1OS43QzE4Ny43IDMxOS40IDIwMyAzMTggMjAzIDMxOHM4LjMgMi40IDE1LTIxLjIgMTkuNi00OS45IDE5LjYtNDkuOWwxLjYgMHMtNS42IDQ4LjEgMyA2My43IDMwLjkgNS4zIDMwLjkgNS4zIDE1LjYtNy44IDE4LTEwLjJjMCAwIDE4LjUgMTUuOCA0NC42IDEyLjkgNTguMy0xMS41IDc5LjEtMjUuOSA3OS4xLTI1LjlzMTAgMjQuNCA0MS4xIDI2LjdjMzUuNSAyLjcgNTQuOC0xOC42IDU0LjgtMTguNnMtLjMgMTMuNSAxMi4xIDE4LjYgMjAuNy0yMi44IDIwLjctMjIuOGwyMC43LTU3LjIgMS45IDBzMS4xIDM3LjMgMjEuNSA0My4yIDQ3LTEzLjcgNDctMTMuNyA2LjQtMy41IDUuMy0xNC4zem0tNTc4IDUuM2MuOC0zMiAyMS44LTQ1LjkgMjktMzkgNy4zIDcgNC42IDIyLTkuMSAzMS40LTEzLjcgOS41LTE5LjkgNy42LTE5LjkgNy42ek0zMzQuNyAxMzYuMXMxOS4xLTQ5LjcgMjMuNi0yNS41LTQwIDk2LjItNDAgOTYuMmMuNS0xNi4yIDE2LjQtNzAuNyAxNi40LTcwLjd6bTIyLjggMTM4LjRjLTEyLjYgMzMtNDMuMyAxOS42LTQzLjMgMTkuNnMtMy41LTExLjggNi40LTQ0LjkgMzMuMy0yMC4yIDMzLjMtMjAuMiAxNi4yIDEyLjQgMy42IDQ1LjV6bTg0LjYtMTQuNnMtMy0xMC41IDguMS0zMC42YzExLTIwLjIgMTkuNi05LjEgMTkuNi05LjFzOS40IDEwLjItMS4zIDI1LjUtMjYuNCAxNC4yLTI2LjQgMTQuMnoiXQogICAgfTsKICAgIGZhQm9vdHN0cmFwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJvb3RzdHJhcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODM2IiwgIk0zMzMuNSAyMDEuNGMwLTIyLjEtMTUuNi0zNC4zLTQzLTM0LjNsLTUwLjQgMCAwIDcxLjIgNDIuNSAwYzMyLjgtLjEgNTAuOS0xMy4zIDUwLjktMzYuOXpNNTE3IDE4OC42Yy05LjUtMzAuOS0xMC45LTY4LjgtOS44LTk4LjEgMS4xLTMwLjUtMjIuNy01OC41LTU0LjctNTguNUwxMjMuNyAzMmMtMzIuMSAwLTU1LjggMjguMS01NC43IDU4LjUgMSAyOS4zLS4zIDY3LjItOS44IDk4LjEtOS42IDMxLTI1LjcgNTAuNi01Mi4yIDUzLjFsMCAyOC41YzI2LjQgMi41IDQyLjYgMjIuMSA1Mi4yIDUzLjEgOS41IDMwLjkgMTAuOSA2OC44IDkuOCA5OC4xLTEuMSAzMC41IDIyLjcgNTguNSA1NC43IDU4LjVsMzI4LjcgMGMzMi4xIDAgNTUuOC0yOC4xIDU0LjctNTguNS0xLTI5LjMgLjMtNjcuMiA5LjgtOTguMSA5LjYtMzEgMjUuNy01MC42IDUyLjEtNTMuMWwwLTI4LjVjLTI2LjMtMi41LTQyLjUtMjIuMS01Mi01My4xek0zMDAuMiAzNzUuMWwtOTcuOSAwIDAtMjM4LjMgOTcuNCAwYzQzLjMgMCA3MS43IDIzLjQgNzEuNyA1OS40IDAgMjUuMy0xOS4xIDQ3LjktNDMuNSA1MS44bDAgMS4zYzMzLjIgMy42IDU1LjUgMjYuNiA1NS41IDU4LjMgMCA0Mi4xLTMxLjMgNjcuNS04My4yIDY3LjV6bS0xMC0xMDguN2wtNTAuMSAwIDAgNzguNCA1Mi4zIDBjMzQuMiAwIDUyLjMtMTMuNyA1Mi4zLTM5LjUgMC0yNS43LTE4LjYtMzguOS01NC41LTM4Ljl6Il0KICAgIH07CiAgICBmYUl0dW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpdHVuZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiNCIsICJNMjIzLjYgODAuM2ExNzEuMyAxNzEuMyAwIDEgMCAuMiAzNDIuNSAxNzEuMyAxNzEuMyAwIDEgMCAtLjItMzQyLjV6bTc5LjQgMjQwYy0zLjIgMTMuNi0xMy41IDIxLjItMjcuMyAyMy44LTEyLjEgMi4yLTIyLjIgMi44LTMxLjktNS0xMS44LTEwLTEyLTI2LjQtMS40LTM2LjggOC40LTggMjAuMy05LjYgMzgtMTIuOCAzLS41IDUuNi0xLjIgNy43LTMuNyAzLjItMy42IDIuMi0yIDIuMi04MC44IDAtNS42LTIuNy03LjEtOC40LTYuMS00IC43LTkxLjkgMTcuMS05MS45IDE3LjEtNSAxLjEtNi43IDIuNi02LjcgOC4zIDAgMTE2LjEgLjUgMTEwLjgtMS4yIDExOC41LTIuMSA5LTcuNiAxNS44LTE0LjkgMTkuNi04LjMgNC42LTIzLjQgNi42LTMxLjQgNS4yLTIxLjQtNC0yOC45LTI4LjctMTQuNC00Mi45IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgNS01LjcgLjktMTI3IDIuNi0xMzMuNyAuNC0yLjYgMS41LTQuOCAzLjUtNi40IDIuMS0xLjcgNS44LTIuNyA2LjctMi43IDEwMS0xOSAxMTMuMy0yMS40IDExNS4xLTIxLjQgNS43LS40IDkgMyA5IDguNy0uMSAxNzAuNiAuNCAxNjEuNC0xIDE2Ny42ek0zNDUuMiAzMkwxMDIuOCAzMkM0NS45IDMyIDAgNzcuOSAwIDEzNC44TDAgMzc3LjJDMCA0MzQuMSA0NS45IDQ4MCAxMDIuOCA0ODBsMjQyLjQgMGM1NyAwIDEwMi44LTQ1LjkgMTAyLjgtMTAyLjhsMC0yNDIuNEM0NDggNzcuOSA0MDIuMSAzMiAzNDUuMiAzMnpNMjIzLjYgNTlhMTkyLjUgMTkyLjUgMCAxIDEgMCAzODUgMTkyLjUgMTkyLjUgMCAxIDEgMC0zODV6Il0KICAgIH07CiAgICBmYVNxdWFyZVhpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXhpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsieGluZy1zcXVhcmUiXSwgImYxNjkiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek05My44IDMyMC4yYy01LjUgMC04LjctNS4zLTYtMTAuM2w0OS4zLTg2LjdjLjEgMCAuMS0uMSAwLS4ybC0zMS40LTU0Yy0zLTUuNiAuMi0xMC4xIDYtMTAuMWw0Ni42IDBjNS4yIDAgOS41IDIuOSAxMi45IDguN2wzMS45IDU1LjNjLTEuMyAyLjMtMTggMzEuNy01MC4xIDg4LjItMy41IDYuMi03LjcgOS4xLTEyLjYgOS4xbC00Ni42IDB6bTE2My41LTMzLjRsMCAuMiA2NS41IDExOWMyLjggNS4xIC4xIDEwLjEtNiAxMC4xbC00Ni42IDBjLTUuNSAwLTkuNy0yLjktMTIuOS04LjdsLTY2LTEyMC4zYzEuOC0zLjIgMjIuOS00MC40IDYzLjMtMTExLjYgMTEuNy0yMC43IDI1LjEtNDQuMyA0MC4xLTcwLjggMy4zLTUuOCA3LjQtOC43IDEyLjUtOC43bDQ2LjkgMGM1LjctLjEgOC44IDQuNyA2IDEwTDI1Ny4zIDI4Ni44eiJdCiAgICB9OwogICAgZmFYaW5nU3F1YXJlID0gZmFTcXVhcmVYaW5nOwogICAgZmFDc3MzQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzczMtYWx0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzOGIiLCAiTTAgMzJMMzQuOSA0MjcuOCAxOTIgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyem0zMTMuMSA4MGwtNC44IDQ3LjMtMTE1LjMgNDkuMy0uMyAuMSAxMTEuNSAwLTEyLjggMTQ2LjYtOTguMiAyOC43LTk4LjgtMjkuMi02LjQtNzMuOSA0OC45IDAgMy4yIDM4LjMgNTIuNiAxMy4zIDU0LjctMTUuNCAzLjctNjEuNi0xNjYuMy0uNSAwLS4xLS4yIC4xLTMuNi00Ni4zIDExMi4xLTQ2LjcgNi41LTIuNy0xMjIuOSAwLTUuOC00Ny4zIDI0Mi4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZXNwYWNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZXNwYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmUiLCAiTTE4Ni4xIDM0My4zYy05LjcgOS43LTkuNyAyNS4zIDAgMzQuOXMyNS4zIDkuNiAzNC45IDBMMzc4LjMgMjIxLjFjMTkuMy0xOS4zIDUwLjYtMTkuMyA2OS45IDBzMTkuMyA1MC42IDAgNjkuOUwyOTQgNDQ1LjFjMTkuMyAxOS4zIDUwLjUgMTkuMyA2OS44IDBsMCAwIDExOS4zLTExOS4yYzM4LjYtMzguNiAzOC42LTEwMS4xIDAtMTM5LjctMzguNi0zOC42LTEwMS4yLTM4LjYtMTM5LjcgMEwxODYuMSAzNDMuM3pNNDMwLjcgMjM4LjVjLTkuNy05LjctMjUuMy05LjctMzQuOSAwTDIzOC41IDM5NS43Yy0xOS4zIDE5LjMtNTAuNSAxOS4zLTY5LjggMGwwIDBjLTkuNi05LjYtMjUuMy05LjctMzQuOSAwbDAgMGMtOS43IDkuNi05LjcgMjUuMyAwIDM0LjlsMCAwYzM4LjYgMzguNiAxMDEuMSAzOC42IDEzOS43IDBMNDMwLjcgMjczLjVjOS42LTkuNyA5LjYtMjUuMyAwLTM0Ljl6bS0yNjIgODcuM0wzMjUuOSAxNjguN2M5LjYtOS42IDkuNi0yNS4zIDAtMzQuOS05LjYtOS42LTI1LjMtOS42LTM0LjkgMEwxMzMuNyAyOTAuOWMtMTkuMyAxOS4zLTUwLjYgMTkuMy02OS45IDBsMCAwYy0xOS4zLTE5LjMtMTkuMy01MC41IDAtNjkuOGwwIDAgMTU0LjItMTU0LjJjLTE5LjMtMTkuMy01MC41LTE5LjMtNjkuOCAwbDAgMC0xMTkuMiAxMTkuM2MtMzguNiAzOC42LTM4LjYgMTAxLjEgMCAxMzkuNyAzOC42IDM4LjYgMTAxLjEgMzguNiAxMzkuNyAwek04MS4zIDI3My41YzkuNiA5LjYgMjUuMyA5LjYgMzQuOSAwTDI3My41IDExNi4zYzE5LjMtMTkuMyA1MC42LTE5LjMgNjkuOCAwbDAgMGM5LjcgOS42IDI1LjMgOS42IDM0LjkgMHM5LjYtMjUuMyAwLTM0LjljLTM4LjYtMzguNi0xMDEuMS0zOC42LTEzOS43IDBMODEuMyAyMzguNWMtOS42IDkuNi05LjYgMjUuMyAwIDM0LjlsMCAweiJdCiAgICB9OwogICAgZmFUcmVsbG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHJlbGxvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxODEiLCAiTTM5Mi4zIDMyTDU2LjEgMzJjLTMxIDAtNTYuMSAyNS4xLTU2LjEgNTYtLjEgMCAwLTQgMCAzMzYgMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2LjIgMGMzMC44LS4yIDU1LjctMjUuMiA1NS43LTU2bDAtMzM2Yy4xLTMwLjgtMjQuOC01NS44LTU1LjYtNTZ6TTE5NyAzNzEuM2MtLjIgMTQuNy0xMi4xIDI2LjYtMjYuOSAyNi42bC04Mi43IDBjLTE0LjggLjEtMjYuOS0xMS44LTI3LTI2LjZsMC0yNTQuMmMwLTE0LjggMTItMjYuOSAyNi45LTI2LjlsODIuOSAwYzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOWwwIDI1NC4yLS4xIDB6bTE5My4xLTExMmMwIDE0LjgtMTIgMjYuOS0yNi45IDI2LjlsLTgxIDBjLTE0LjggMC0yNi45LTEyLTI2LjktMjYuOWwwLTE0Mi4xYzAtMTQuOCAxMi0yNi45IDI2LjgtMjYuOWw4MS4xIDBjMTQuOCAwIDI2LjkgMTIgMjYuOSAyNi45bDAgMTQyLjF6Il0KICAgIH07CiAgICBmYVZpYWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFkZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJhOSIsICJNMjc2LjQgMTUwLjVsMCAuN2MtMTcuOS01Mi42LTQyLjYtMTAzLjQtNzAuOC0xNTEuMiA0My4zIDI5LjIgNjcgMTAwIDcwLjggMTUwLjV6bTMyLjcgMTIxLjdjNy42IDE4LjIgMTEgMzcuNSAxMSA1NyAwIDc3LjctNTcuOCAxNDEtMTM3LjggMTM5LjRsMy44LS4zYzc0LjItNDYuNyAxMDkuMy0xMTguNiAxMDkuMy0yMDUuMSAwLTM4LjEtNi41LTc1LjktMTguOS0xMTIgMSAxMS43IDEgMjMuNyAxIDM1LjQgMCA5MS44LTE4LjEgMjQxLjYtMTE2LjYgMjgwLTY1LjctMTEuNC0xMTEuMy02OC42LTExMS4zLTEzNy40IDAtNzUuNiA1Ny40LTE0Mi4zIDEzNS40LTE0Mi4zIDE2LjggMCAzMy43IDMuMSA0OS4xIDkuNiAxLjctMTUuMSA2LjUtMjkuOSAxMy40LTQzLjMtMTkuOS03LjItNDEuMi0xMC43LTYyLjUtMTAuNy0xNjEuNSAwLTIzOC43IDE5NS45LTEyOS45IDMxMy43IDY3LjkgNzQuNiAxOTIgNzMuOSAyNTkuOCAwIDU2LjYtNjEuMyA2MC45LTE0Mi40IDM2LjQtMjAxLTEyLjcgOC0yNy4xIDEzLjktNDIuMiAxN3pNNDE4LjMgMTEuN2MtMzEgNjYuNS04MS4zIDQ3LjItMTE1LjggODAuMS0xMi40IDEyLTIwLjYgMzQtMjAuNiA1MC41IDAgMTQuMSA0LjUgMjcuMSAxMiAzOC44IDQ3LjQtMTEgOTguMy00NiAxMTguMi05MC43LS43IDUuNS00LjggMTQuNC03LjIgMTkuMi0yMC4zIDM1LjctNjQuNiA2NS42LTk5LjcgODQuOSAxNC44IDE0LjQgMzMuNyAyNS44IDU1IDI1LjggNzkgMCAxMTAuMS0xMzQuNiA1OC4xLTIwOC42eiJdCiAgICB9OwogICAgZmFTZWFyY2hlbmdpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWFyY2hlbmdpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2ViIiwgIk0yMTQuNiAxMzAuM2wtNjcuMiAyOC4yIDAtMTE1LjMtNTQuNyAxOTAuMyA1NC43LTI0LjIgMCAxMzAuMyA2Ny4yLTIwOS4zek0xMzEuNCAzMy42bC0xLjMgNC43LTE1LjIgNTIuOUM3NC42IDEwNi43IDQ2IDE0NS44IDQ2IDE5MS41IDQ2IDI0My44IDgwLjMgMjg3LjQgMTI5LjQgMjk3bDAgNTMuNkM1MS41IDM0MC4xLTYgMjcyLjQtNiAxOTEuNi02IDExMS4xIDUzLjggNDQuNCAxMzEuNCAzMy42ek00NDIuOCA0ODAuOGMtMTEuMiAxMS4yLTIzLjEgMTIuMy0yOC42IDEwLjUtNS40LTEuOC0yNy4xLTE5LjktNjAuNC00NC40LTMzLjMtMjQuNi0zMy42LTM1LjctNDMtNTYuNy05LjQtMjAuOS0zMC40LTQyLjYtNTcuNS01Mi40bC05LjctMTQuN2MtMjQuNyAxNi45LTUzIDI2LjktODEuMyAyOC43bDIuMS02LjYgMTUuOS00OS41YzQ2LjUtMTEuOSA4MC45LTU0IDgwLjktMTA0LjIgMC01NC41LTM4LjQtMTAyLjEtOTYtMTA3LjFsMC01Mi4xYzgzLjIgNS4xIDE0OC44IDc0LjUgMTQ4LjggMTU5LjMgMCAzMy42LTExLjIgNjQuNy0yOSA5MC40bDE0LjYgOS42YzkuOCAyNy4xIDMxLjUgNDggNTIuNCA1Ny40czMyLjIgOS43IDU2LjggNDNjMjQuNiAzMy4yIDQyLjcgNTQuOSA0NC41IDYwLjNzLjcgMTcuMy0xMC41IDI4LjV6bS05LjktMTcuOWMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOCAzLjYgOCA4IDggOC0zLjYgOC04eiJdCiAgICB9OwogICAgZmFQYXlwYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGF5cGFsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxZWQiLCAiTTExMS45IDI5NS45Yy0zLjUgMTkuMi0xNy40IDEwOC43LTIxLjUgMTM0LS4zIDEuOC0xIDIuNS0zIDIuNWwtNzQuNiAwYy03LjYgMC0xMy4xLTYuNi0xMi4xLTEzLjlMNTkuMyA0Ni42YzEuNS05LjYgMTAuMS0xNi45IDIwLTE2LjkgMTUyLjMgMCAxNjUuMS0zLjcgMjA0IDExLjQgNjAuMSAyMy4zIDY1LjYgNzkuNSA0NCAxNDAuMy0yMS41IDYyLjYtNzIuNSA4OS41LTE0MC4xIDkwLjMtNDMuNCAuNy02OS41LTctNzUuMyAyNC4yek0zNTcuNiAxNTJjLTEuOC0xLjMtMi41LTEuOC0zIDEuMy0yIDExLjQtNS4xIDIyLjUtOC44IDMzLjYtMzkuOSAxMTMuOC0xNTAuNSAxMDMuOS0yMDQuNSAxMDMuOS02LjEgMC0xMC4xIDMuMy0xMC45IDkuNC0yMi42IDE0MC40LTI3LjEgMTY5LjctMjcuMSAxNjkuNy0xIDcuMSAzLjUgMTIuOSAxMC42IDEyLjlsNjMuNSAwYzguNiAwIDE1LjctNi4zIDE3LjQtMTQuOSAuNy01LjQtMS4xIDYuMSAxNC40LTkxLjMgNC42LTIyIDE0LjMtMTkuNyAyOS4zLTE5LjcgNzEgMCAxMjYuNC0yOC44IDE0Mi45LTExMi4zIDYuNS0zNC44IDQuNi03MS40LTIzLjgtOTIuNnoiXQogICAgfTsKICAgIGZhU3F1YXJlQmx1ZXNreSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtYmx1ZXNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNmEzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMjQgMjQ3LjRjMTQuNS0zMCA1NC04NS44IDkwLjctMTEzLjMgMjYuNS0xOS45IDY5LjMtMzUuMiA2OS4zIDEzLjcgMCA5LjgtNS42IDgyLjEtOC45IDkzLjgtMTEuNCA0MC44LTUzIDUxLjItOTAgNDQuOSA2NC43IDExIDgxLjIgNDcuNSA0NS42IDg0LTY3LjUgNjkuMy05Ny0xNy40LTEwNC42LTM5LjZsLS4zLS45Yy0uOS0yLjYtMS40LTQuMS0xLjgtNC4xcy0uOSAxLjUtMS44IDQuMWMtLjEgLjMtLjIgLjYtLjMgLjktNy42IDIyLjItMzcuMSAxMDguOC0xMDQuNiAzOS42LTM1LjUtMzYuNS0xOS4xLTczIDQ1LjYtODQtMzcgNi4zLTc4LjYtNC4xLTkwLTQ0LjktMy4zLTExLjctOC45LTg0LTguOS05My44IDAtNDguOSA0Mi45LTMzLjUgNjkuMy0xMy43IDM2LjcgMjcuNSA3Ni4yIDgzLjQgOTAuNyAxMTMuM3oiXQogICAgfTsKICAgIGZhREFuZERCZXlvbmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZC1hbmQtZC1iZXlvbmQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjZjYSIsICJNMzEzLjggMjQxLjVjMTMuOCAwIDIxLTEwLjEgMjQuOC0xNy45LTEtMS4xLTUtNC4yLTcuNC02LjYtMi40IDQuMy04LjIgMTAuNy0xMy45IDEwLjctMTAuMiAwLTE1LjQtMTQuNy0zLjItMjYuNi0uNS0uMi00LjMtMS44LTggMi40IDAtMyAxLTUuMSAyLjEtNi42LTMuNSAxLjMtOS44IDUuNi0xMS40IDcuOSAuMi01LjggMS42LTcuNSAuNi05bC0uMi0uMnMtOC41IDUuNi05LjMgMTQuN2MwIDAgMS4xLTEuNiAyLjEtMS45IC42LS4zIDEuMyAwIC42IDEuOS0uMiAuNi01LjggMTUuNyA1LjEgMjYtLjYtMS42LTEuOS03LjYgMi40LTEuOS0uMyAuMSA1LjggNy4xIDE1LjcgNy4xem01Mi40LTIxLjFjMC00LTQuOS00LjQtNS42LTQuNSAyIDMuOSAuOSA3LjUgLjIgOSAyLjUtLjQgNS40LTEuNiA1LjQtNC41em0xMC4zIDUuMmMwLTYuNC02LjItMTEuNC0xMy41LTEwLjcgOCAxLjMgNS42IDEzLjgtNSAxMS40IDMuNy0yLjYgMy4yLTkuOS0xLjMtMTIuNSAxLjQgNC4yLTMgOC4yLTcuNCA0LjYtMi40LTEuOS04LTYuNi0xMC42LTguNi0yLjQtMi4xLTUuNS0xLTYuNi0xLjgtMS4zLTEuMS0uNS0zLjgtMi4yLTUtMS42LS44LTMtLjMtNC44LTEtMS42LS42LTIuNy0xLjktMi42LTMuNS0yLjUgNC40IDMuNCA2LjMgNC41IDguNSAxIDEuOS0uOCA0LjggNCA4LjUgMTQuOCAxMS42IDkuMSA4IDEwLjQgMTguMSAuNiA0LjMgNC4yIDYuNyA2LjQgNy40LTIuMS0xLjktMi45LTYuNCAwLTkuMyAwIDEzLjkgMTkuMiAxMy4zIDIzLjEgNi40LTIuNCAxLjEtNy0uMi05LTEuOSA3LjcgMSAxNC4yLTQuMSAxNC42LTEwLjZ6bS0zOS40LTE4LjRjMiAuOCAxLjYgLjcgNi40IDQuNSAxMC4yLTI0LjUgMjEuNy0xNS43IDIyLTE1LjUgMi4yLTEuOSA5LjgtMy44IDEzLjgtMi43LTIuNC0yLjctNy41LTYuMi0xMy4zLTYuMi00LjcgMC03LjQgMi4yLTggMS4zLS44LTEuNCAzLjItMy40IDMuMi0zLjQtNS40IC4yLTkuNiA2LjctMTEuMiA1LjktMS4xLS41IDEuNC0zLjcgMS40LTMuNy01LjEgMi45LTkuMyA5LjEtMTAuMiAxMyA0LjYtNS44IDEzLjgtOS44IDE5LjctOS0xMC41IC41LTE5LjUgOS43LTIzLjggMTUuOHptMjQyLjUgNTEuOWMtMjAuNyAwLTQwIDEuMy01MC4zIDIuMWw3LjQgOC4yIDAgNzcuMi03LjQgOC4yYzEwLjQgLjggMzAuOSAyLjEgNTEuNiAyLjEgNDIuMSAwIDU5LjEtMjAuNyA1OS4xLTQ4LjkgMC0yOS4zLTIzLjItNDguOS02MC40LTQ4Ljl6bS0xNS4xIDc1LjZsMC01My4zYzMwLjEtMy4zIDQ2LjggMy44IDQ2LjggMjYuMyAwIDI1LjYtMjEuNCAzMC4yLTQ2LjggMjd6TTMwMS42IDE4MWMtMS0zLjQtLjItNi45IDEuMS05LjQgMSAzIDIuNiA2LjQgNy41IDktLjUtMi40LS4yLTUuNiAuNS04LTEuNC01LjQgMi4xLTkuOSA2LjQtOS45IDYuOSAwIDguNSA4LjggNC43IDE0LjQgMi4xIDMuMiA1LjUgNS42IDcuNyA3LjggMy4yLTMuNyA1LjUtOS41IDUuNS0xMy44IDAtOC4yLTUuNS0xNS45LTE2LjctMTYuNS0yMC0uOS0yMC4yIDE2LjYtMjAgMTguOSAuNSA1LjIgMy40IDcuOCAzLjMgNy41em0tLjQgNmMtLjUgMS44LTcgMy43LTEwLjIgNi45IDQuOC0xIDctLjIgNy44IDEuOCAuNSAxLjQtLjIgMy40LS41IDUuNiAxLjYtMS44IDctNS41IDExLTYuMi0xLS4zLTMuNC0uOC00LjMtLjggMi45LTMuNCA5LjMtNC41IDEyLjgtMy43LTIuMi0uMi02LjcgMS4xLTguNSAyLjYgMS42IC4zIDMgLjYgNC4zIDEuMS0yLjEgLjgtNC44IDMuNC01LjggNi4xIDctNSAxMy4xIDUuMiA3IDguMiAuOCAuMiAyLjcgMCAzLjUtLjUtLjMgMS4xLTEuOSAzLTMgMy40IDIuOSAwIDctMS45IDguMi00LjYgMCAwLTEuOCAuNi0yLjYtLjJzLjMtNC4zIC4zLTQuM2MtMi4zIDIuOS0zLjQtMS4zLTEuMy00LjItMS0uMy0zLjUtLjYtNC42LS41IDMuMi0xLjEgMTAuNC0xLjggMTEuMi0uMyAuNiAxLjEtMSAzLjQtMSAzLjQgNC0uNSA4LjMgMS4xIDYuNyA1LjEgMi45LTEuNCA1LjUtNS45IDQuOC0xMC40LS4zIDEtMS42IDIuNC0yLjkgMi43IC4yLTEuNC0xLTIuMi0xLjktMi42IDEuNy05LjYtMTQuNi0xNC4yLTE0LjEtMjMuOS0xIDEuMy0xLjggNS0uOCA3LjEgMi43IDMuMiA4LjcgNi43IDEwLjEgMTIuMi0yLjYtNi40LTE1LjEtMTEuNC0xNC42LTIwLjItMS42IDEuNi0yLjYgNy44LTEuMyAxMSAyLjQgMS40IDQuNSAzLjggNC44IDYuMS0yLjItNS4xLTExLjQtNi4xLTEzLjktMTIuMi0uNiAyLjItLjMgNSAxIDYuNyAwIDAtMi4yLS44LTctLjYgMS43IC42IDUuMSAzLjUgNC44IDUuMnptMjUuOSA3LjRjLTIuNyAwLTMuNS0yLjEtNC4yLTQuMyAzLjMgMS4zIDQuMiA0LjMgNC4yIDQuM3ptMzguOSAzLjdsLTEtLjZjLTEuMS0xLTIuOS0xLjQtNC43LTEuNC0yLjkgMC01LjggMS4zLTcuNSAzLjQtLjggLjgtMS40IDEuOC0yLjEgMi42bDAgMTUuN2MzLjUgMi42IDcuMS0yLjkgMy03LjIgMS41IC4zIDQuNiAyLjcgNS4xIDMuMiAwIDAgMi42LS41IDUtLjUgMi4xIDAgMy45IC4zIDUuNiAxLjFsMC0xOC40Yy0xLjEgLjUtMi4yIDEtMi43IDEuNGwtLjcgLjd6TTc5LjkgMzA1LjljMTcuMi00LjYgMTYuMi0xOCAxNi4yLTE5LjkgMC0yMC42LTI0LjEtMjUtMzctMjVsLTU2LjEgMCA4LjMgOC42IDAgMjkuNS0xMS4zIDAgMTEuNCAxNC42IDAgMzIuMy04LjQgOC42YzYxLjcgMCA3My44IDEuNSA4Ni40LTUuOSA2LjctNCA5LjktOS44IDkuOS0xNy42IDAtNS4xIDIuNi0xOC44LTE5LjQtMjUuMnpNMzguNiAyNzguNGMyMCAwIDI5LjYtLjggMjkuNiA5LjFsMCAzYzAgMTIuMS0xOSA4LjgtMjkuNiA4LjhsMC0yMC45em0wIDU5LjJsMC0yMi42YzEyLjIgMCAzMi43LTIuMyAzMi43IDguOGwwIDQuNSAuMiAwYzAgMTEuMi0xMi41IDkuMy0zMi45IDkuM3ptMTAxLjItMTkuM2wyMy4xIC4yIDAtLjIgMTQuMS0yMS4yLTM3LjIgMCAwLTE0LjkgNTIuNCAwLTE0LjEtMjEgMC0uMi03My41IC4yIDcuNCA4LjIgMCA3Ny4xLTcuNCA4LjIgODEuMiAwIDE0LjEtMjEuMi02MC4xIC4yIDAtMTUuNHptMjE0LjctNjAuMWMtNzMuOSAwLTc3LjUgOTkuMy0uMyA5OS4zIDc3LjkgMCA3NC4xLTk5LjMgLjMtOTkuM3ptLS4zIDc3LjVjLTM3LjQgMC0zNi45LTU1LjMgLjItNTUuMyAzNi44IC4xIDM4LjggNTUuMy0uMiA1NS4zem0tOTEuMy04LjNsNDQuMS02Ni4yLTQxLjcgMCA2LjEgNy4yLTIwLjUgMzcuMi0uMyAwLTIxLTM3LjIgNi40LTcuMi00NC45IDAgNDQuMSA2NS44IC4yIDE5LjQtNy43IDguMiA0Mi42IDAtNy4yLTguMi0uMi0xOXpNMjM0LjUgMTc2LjFjMS42IDEuMyAyLjkgMi40IDIuOSA2LjZsMCAzOC44YzAgNC4yLS44IDUuMy0yLjcgNi40LS4xIC4xLTcuNSA0LjUtNy45IDQuNmwzNS4xIDBjMTAgMCAxNy40LTEuNSAyNi04LjYtLjYtNSAuMi05LjUgLjgtMTIgMC0uMi0xLjggMS40LTIuNyAzLjUgMC01LjcgMS42LTE1LjQgOS42LTIwLjUtLjEgMC0zLjctLjgtOSAxLjEgMi0zLjEgMTAtNy45IDEwLjQtNy45LTguMi0yNi0zOC0yMi45LTMyLjItMjIuOS0zMC45IDAtMzIuNiAuMy0zOS45LTQgLjEgLjggLjUgOC4yIDkuNiAxNC45em0yMS41IDUuNWM0LjYgMCAyMy4xLTMuMyAyMy4xIDE3LjMgMCAyMC43LTE4LjQgMTcuMy0yMy4xIDE3LjNsMC0zNC42em0yMjguOSA3OS42bDcgOC4zIDAgNDIuNS0uMyAwYy01LjQtMTQuNC00Mi4zLTQxLjUtNDUuMi01MC45bC0zMS42IDAgNy40IDguNSAwIDc2LjktNy4yIDguMyAzOSAwLTcuNC04LjIgMC00Ny40IC4zIDBjMy43IDEwLjYgNDQuNSA0Mi45IDQ4LjUgNTUuNmwyMS4zIDAgMC04NS4yIDcuNC04LjMtMzkuMi0uMXpNMzc4LjIgMTY1LjFjLTMyLjIgMC0zMi44IC4yLTM5LjktNCAuMSAuNyAuNSA4LjMgOS42IDE0LjkgMy4xIDIgMi45IDQuMyAyLjkgOS41IDEuOC0xLjEgMy44LTIuMiA2LjEtMy0xLjEgMS4xLTIuNyAyLjctMy41IDQuNSAxLTEuMSA3LjUtNS4xIDE0LjYtMy41LTEuNiAuMy00IDEuMS02LjEgMi45IC4xIDAgMi4xLTEuMSA3LjUtLjNsMC00LjNjNC43IDAgMjMuMS0zLjQgMjMuMSAxNy4zIDAgMjAuNS0xOC41IDE3LjMtMTkuNyAxNy4zIDUuNyA0LjQgNS44IDEyIDIuMiAxNi4zbC4zIDBjMzMuNCAwIDM2LjctMjcuMyAzNi43LTM0IDAtMy44LTEuMS0zMi0zMy44LTMzLjZ6Il0KICAgIH07CiAgICBmYU1pY3Jvc29mdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3NvZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjYSIsICJNMCAzMmwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42em0yMzMuNCAwbDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6TTAgMjY1LjRsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnptMjMzLjQgMGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42eiJdCiAgICB9OwogICAgZmFGbHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmx5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MTciLCAiTTE2NS45IDQyNy44YzEyLjkgMTEuNyAzMy43IDMzLjMgMzMuMiA1MC43IDAgLjgtLjEgMS42LS4xIDIuNS0xLjggMTkuOC0xOC44IDMxLjEtMzkuMSAzMS0yNS0uMS0zOS45LTE2LjgtMzguNy0zNS44IDEtMTYuMiAyMC41LTM2LjcgMzIuNC00Ny42IDIuMy0yLjEgMi43LTIuNyA1LjYtMy42IDMuNCAwIDMuOSAuMyA2LjcgMi44ek0zMDAgNjcuM2MtMTYuMy0yNS43LTM4LjYtNDAuNi02My4zLTUyLjEtMjUuNS0xMC43LTU0LjYtMTUuNC03Ni42LTE1LjItNDQuMSAwLTcxLjIgMTMuMi04MS4xIDE3LjMtNTMuNiAyNy45LTg0LjQgNjkuOS04Mi45IDE0MS4zIDcuMSA4Mi4yIDk3IDE3NiAxNTUuOCAyMzMuOCAxLjcgMS42IDQuNSA0LjUgNi4yIDUuMWwzLjMgLjFjMi4xLS43IDEuOC0uNSAzLjUtMi4xIDUyLjMtNDkuMiAxNDAuNy0xNDUuOCAxNTUuOS0yMTUuNyA3LTM5LjIgMy4xLTcyLjUtMjAuOC0xMTIuNXpNMTU0LjkgMzUxLjljLTI4LTUxLjEtNjUuMi0xMzAuNy02OS4zLTE4OS0zLjQtNDcuNSAxMS40LTEzMS4yIDY5LjMtMTM2LjdsMCAzMjUuN3pNMjk2LjggMTgwYy0xNi40IDU2LjgtNzcuMyAxMjgtMTE4LjkgMTcwLjMgMjcuOC01MS45IDY1LjItMTMzLjMgNjcuMi0xOTEuOSAxLjYtNDUuOS05LjgtMTA1LjgtNDgtMTMxLjQgODguOCAxOC4zIDExNS41IDk4LjEgOTkuNyAxNTN6Il0KICAgIH07CiAgICBmYUNjU3RyaXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLXN0cmlwZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWY1IiwgIk00OTIuNCAyMjAuOGMtOC45IDAtMTguNyA2LjctMTguNyAyMi43bDM2LjcgMGMwLTE2LTkuMy0yMi43LTE4LTIyLjd6TTM3NSAyMjMuNGMtOC4yIDAtMTMuMyAyLjktMTcgN2wuMiA1Mi44YzMuNSAzLjcgOC41IDYuNyAxNi44IDYuNyAxMy4xIDAgMjEuOS0xNC4zIDIxLjktMzMuNCAwLTE4LjYtOS0zMy4yLTIxLjktMzMuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyMi4yIDI4MS4xYzAgMjUuNi0yMC4zIDQwLjEtNDkuOSA0MC4zLTEyLjIgMC0yNS42LTIuNC0zOC44LTguMWwwLTMzLjljMTIgNi40IDI3LjEgMTEuMyAzOC45IDExLjMgNy45IDAgMTMuNi0yLjEgMTMuNi04LjcgMC0xNy01NC0xMC42LTU0LTQ5LjkgMC0yNS4yIDE5LjItNDAuMiA0OC00MC4yIDExLjggMCAyMy41IDEuOCAzNS4zIDYuNWwwIDMzLjRjLTEwLjgtNS44LTI0LjUtOS4xLTM1LjMtOS4xLTcuNSAwLTEyLjEgMi4yLTEyLjEgNy43IDAgMTYgNTQuMyA4LjQgNTQuMyA1MC43ek0xOTEgMjI0LjVsLTI3IDAgMCA1MC41YzAgMjAuOSAyMi41IDE0LjQgMjcgMTIuNmwwIDI4LjljLTQuNyAyLjYtMTMuMyA0LjctMjQuOSA0LjctMjEuMSAwLTM2LjktMTUuNS0zNi45LTM2LjVsLjItMTEzLjkgMzQuNy03LjQgMCAzMC44IDI2LjkgMCAwIDMwLjN6bTc0IDIuNGMtNC41LTEuNS0xOC43LTMuNi0yNy4xIDcuNGwwIDg0LjQtMzUuNSAwIDAtMTI0LjUgMzAuNyAwIDIuMiAxMC41YzguMy0xNS4zIDI0LjktMTIuMiAyOS42LTEwLjVsLjEgMCAwIDMyLjd6bTQ0LjEgOTEuOGwtMzUuNyAwIDAtMTI0LjUgMzUuNyAwIDAgMTI0LjV6bTAtMTQyLjlsLTM1LjcgNy42IDAtMjguOSAzNS43LTcuNiAwIDI4Ljl6bTc0LjEgMTQ1LjVjLTEyLjQgMC0yMC01LjMtMjUuMS05bC0uMSA0MC4yLTM1LjUgNy41IDAtMTY1LjggMzEuMyAwIDEuOCA4LjhjNC45LTQuNSAxMy45LTExLjEgMjcuOC0xMS4xIDI0LjkgMCA0OC40IDIyLjUgNDguNCA2My44IDAgNDUuMS0yMy4yIDY1LjUtNDguNiA2NS42em0xNjAuNC01MS41bC02OS41IDBjMS42IDE2LjYgMTMuOCAyMS41IDI3LjYgMjEuNSAxNC4xIDAgMjUuMi0zIDM0LjktNy45bDAgMjguNmMtOS43IDUuMy0yMi40IDkuMi0zOS40IDkuMi0zNC42IDAtNTguOC0yMS43LTU4LjgtNjQuNSAwLTM2LjIgMjAuNS02NC45IDU0LjMtNjQuOSAzMy43IDAgNTEuMyAyOC43IDUxLjMgNjUuMSAwIDMuNS0uMyAxMC45LS40IDEyLjl6Il0KICAgIH07CiAgICBmYVdvcmRwcmVzc1NpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b3JkcHJlc3Mtc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MTEiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzMgMjU2YzAtMzIuMyA2LjktNjMgMTkuMy05MC43TDE1OC43IDQ1Ni43Qzg0LjMgNDIwLjUgMzMgMzQ0LjIgMzMgMjU2ek0yNTYgNDc5Yy0yMS45IDAtNDMtMy4yLTYzLTkuMWw2Ni45LTE5NC40IDY4LjUgMTg3LjhjLjUgMS4xIDEgMi4xIDEuNiAzLjEtMjMuMSA4LjEtNDggMTIuNi03NCAxMi42em0zMC43LTMyNy41YzEzLjQtLjcgMjUuNS0yLjEgMjUuNS0yLjEgMTItMS40IDEwLjYtMTkuMS0xLjQtMTguNCAwIDAtMzYuMSAyLjgtNTkuNCAyLjgtMjEuOSAwLTU4LjctMi44LTU4LjctMi44LTEyLS43LTEzLjQgMTcuNy0xLjQgMTguNCAwIDAgMTEuNCAxLjQgMjMuNCAyLjFsMzQuNyA5NS4yLTQ4LjggMTQ2LjMtODEuMi0yNDEuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTQuMiAwLTkuMS0uMS0xNC40LS4zIDM5LjktNjAuNSAxMDguNC0xMDAuNSAxODYuMy0xMDAuNSA1OCAwIDExMC45IDIyLjIgMTUwLjYgNTguNS0xLS4xLTEuOS0uMi0yLjktLjItMjEuOSAwLTM3LjQgMTkuMS0zNy40IDM5LjYgMCAxOC40IDEwLjYgMzMuOSAyMS45IDUyLjMgOC41IDE0LjggMTguNCAzMy45IDE4LjQgNjEuNSAwIDE5LjEtNy4zIDQxLjItMTcgNzIuMWwtMjIuMiA3NC4zLTgwLjctMjM5LjZ6bTgxLjQgMjk3LjJsNjguMS0xOTYuOWMxMi43LTMxLjggMTctNTcuMiAxNy03OS45IDAtOC4yLS41LTE1LjgtMS41LTIyLjkgMTcuNCAzMS44IDI3LjMgNjguMiAyNy4zIDEwNyAwIDgyLjMtNDQuNiAxNTQuMS0xMTAuOSAxOTIuN3oiXQogICAgfTsKICAgIGZhU2VsbHN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlbGxzeSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjEzIiwgIk01NDAgMjM3LjNjMy4xLTEyLjMgNC4zLTI0LjggNC4zLTM3LjQgMC05Mi41LTc1LjQtMTY3LjktMTY3LjktMTY3LjktNzcuMiAwLTE0NC42IDUzLTE2MyAxMjcuOC0xNS4zLTEzLjItMzQuOS0yMC41LTU1LjItMjAuNS00Ni4zIDAtODQgMzcuNy04NCA4NCAwIDcuNCAuOSAxNSAzLjEgMjIuNC00Mi45IDIwLjItNzAuOCA2My43LTcwLjggMTExLjIgMCA2OCA1NS41IDEyMy4yIDEyMy4yIDEyMy4ybDM4MS4yIDBjNjcuNyAwIDEyMy4yLTU1LjIgMTIzLjItMTIzLjIgMC01Ni40LTM4LjktMTA2LTk0LjEtMTE5LjV6TTIwMC4yIDQwMS42YzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTExMC45YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMTAuOXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTEzMS41YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMzEuNXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMxIDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xNjIuN2MwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMxIDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuM2wwIDE2Mi43em04NyAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTI4LjUgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTIyNC42YzAtOC42IDctMTUuNiAxNS4zLTE1LjZsMjguNSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjZsMCAyMjQuNnoiXQogICAgfTsKICAgIGZhRGFzaGN1YmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFzaGN1YmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxMCIsICJNMzI2LjkgMTA0bC0yMTYuMiAwYy01MS4xIDAtOTEuMiA0My4zLTkxLjIgOTMuNWwwIDIyOS41YzAgNTAuNSA0MC4xIDg1IDkxLjIgODVsMjI3LjIgMGM1MS4xIDAgOTEuMi0zNC41IDkxLjItODVsMC00MjctMTAyLjIgMTA0ek0xNTQuMiA0MTYuNWMtMTcuNyAwLTMyLjQtMTUuMS0zMi40LTMyLjhsMC0xNDIuOWMwLTE3LjcgMTQuNy0zMi41IDMyLjQtMzIuNWwxNDAuNyAwYzE3LjcgMCAzMiAxNC44IDMyIDMyLjVsMCAxMjMuNSA1MS4xIDUyLjMtMjIzLjggMCAwLS4xeiJdCiAgICB9OwogICAgZmFHaXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0dGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MjYiLCAiTTY2LjQgMzIyLjVsLTUwLjQgMCAwLTMyMi41IDUwLjQgMCAwIDMyMi41ek0xNjYuOSA3Ni4xbC01MC40IDAgMCA0MzUuOSA1MC40IDAgMC00MzUuOXptMTAwLjYgMGwtNTAuNCAwIDAgNDM1LjkgNTAuNCAwIDAtNDM1Ljl6TTM2OCA3NmwtNTAuNCAwIDAgMjQ3IDUwLjQgMCAwLTI0N3oiXQogICAgfTsKICAgIGZhV29sZlBhY2tCYXR0YWxpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29sZi1wYWNrLWJhdHRhbGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTE0IiwgIk0yMzYuMiA0NzEuNWwxMC42IDE1LjggNS4zLTEyLjMgNS4zIDcgMCAyOS45YzIxLjEtNy45IDIxLjEtNjYuOSAyNS41LTk3LjIgNC42LTMxLjktLjktOTIuOCA4MS40LTE0OS4xLTguOS0yMy42LTEyLTQ5LjQtMi42LTgwIDI3LjkgMy40IDUzLjkgMTAuNiA2My4zIDU0LjFsLTMwLjMgOC40YzExLjEgMjMgMTcgNDYuOCAxMy4yIDcyLjFsLTI3LjMtNy02LjIgMzMuNC0xOC41LTctOC44IDMzLjQtMTkuNC03IDI2LjQgMjEuMSA4LjgtMjguMiAyNC42IDUuMiA3LTM1LjYgMjYuNCAxNC41Yy4yLTIwIDctNTguMS04LjgtODQuNWwyNi40IDUuM2M0LTIyLjEtMi40LTM5LjItNy45LTU2LjdsMjIuNCA5LjdjLS40LTI1LjEtMjkuOS01Ni44LTYxLjYtNTguNS0yMC4yLTEuMS01Ni43LTI1LjItNTQuMS01MS45IDItMTkuOSAxNy40LTQyLjYgNDMuMS00OS43LTQ0IDM2LjUtOS43IDY3LjMgNS4zIDczLjUgNC40LTExLjQgMTcuNS02OS4xIDAtMTMwLjItNDAuNCAyMi45LTg5LjcgNjUuMS05My4yIDE0Ny44bC01OCAzOC43LTMuNSA5My4yIDEwNy4zLTU5LjggNyA3LTE3LjYgMy41LTQ0IDM4LjctMTUuOC01LjMtMjguMSA0OS4zLTMuNSAxMTkuNiAyMS4xIDE1LjgtMzIuNSAxNS44LTMyLjYtMTUuOCAyMS4xLTE1LjgtMy41LTExOS42LTI4LjItNDkuMy0xNS44IDUuMy00NC0zOC43LTE3LjYtMy41IDctNyAxMDcuMyA1OS44LTMuNS05My4zLTU4LjEtMzguN2MtMy41LTgyLjgtNTIuNy0xMjUtOTMuMi0xNDcuOS0xNy41IDYxLjEtNC40IDExOC44IDAgMTMwLjIgMTUtNi4yIDQ5LjMtMzcgNS4zLTczLjUgMjUuNyA3LjEgNDEuMSAyOS44IDQzLjEgNDkuNyAyLjYgMjYuNy0zMy45IDUwLjgtNTQuMSA1MS45LTMxLjcgMS43LTYxLjIgMzMuNC02MS42IDU4LjVsMjIuNC05LjdDMTMuNCAyMjQuNyA3IDI0MS44IDExIDI2My45bDI2LjQtNS4zYy0xNS44IDI2LjQtOS4xIDY0LjQtOC44IDg0LjRsMjYuNC0xNC41IDcgMzUuNiAyNC42LTUuMyA4LjggMjguMiAyNi40LTIxLjEtMTkuNCA3LTguOC0zMy40LTE4LjUgNy02LjItMzMuNC0yNy4zIDdDMzggMjk0LjggNDMuOCAyNzEgNTUgMjQ4bC0zMC4zLTguNGM5LjQtNDMuNSAzNS41LTUwLjggNjMuMy01NC4xIDkuNCAzMC42IDYuMiA1Ni41LTIuNiA4MC4xIDgyLjMgNTYuMyA3Ni44IDExNy4yIDgxLjQgMTQ5LjEgNC40IDMwLjMgNC40IDg5LjMgMjUuNSA5Ny4ybDAtMjkuOCA1LjMtNyA1LjMgMTIuMyAxMC42LTE1LjggMTEuNCAyMS4xIDExLjQtMjEuMSAwIDB6bTc5LjItOTVMMjk5LjUgMzY2YzcuNS00LjQgMTMuOC04LjQgMTkuNC0xMi4zLS42IDcuMi0uMyAxMy44LTMuNSAyMi44bDAgMHptMjguMi00OS4zYy0uNCAxMC45LS45IDIxLjctMS44IDMxLjctNy44LTEuOS0xNS42LTMuOC0yMS4xLTcgOC4yLTcuOSAxNS42LTE2LjMgMjIuOS0yNC43bDAgMHptMjQuNiA1LjNjMC0xMy40LTIuMS0yNC4yLTUuMy0zMy40LTUuNSA5LjUtMTEuNyAxOC42LTE4LjUgMjcuM2wyMy44IDYuMnptMy41LTgwLjljMTkuNCAxMi44IDI3LjggMzMuNyAyOS45IDU2LjMtMTIuMy00LjUtMjQuNi05LjMtMzctMTAuNiA1LjEtMTIgNi42LTI4LjEgNy00NS43bDAgMHptLTEuOC00NS43Yy44IDE0LjMgMS44IDI4LjggMS44IDQyLjIgMTkuMi04LjEgMjkuOC05LjcgNDQtMTQuMS0xMC42LTE5LTI3LjItMjUuNS00NS44LTI4LjJsMCAwek0xMzQuMiAzNzYuNUwxNTAgMzY2Yy03LjUtNC40LTEzLjgtOC40LTE5LjQtMTIuMyAuNiA3LjMgLjMgMTMuOSAzLjUgMjIuOWwwIDB6TTEwNiAzMjcuM2MuNCAxMC45IC45IDIxLjcgMS44IDMxLjcgNy44LTEuOSAxNS42LTMuOCAyMS4xLTctOC4yLTcuOS0xNS42LTE2LjMtMjIuOS0yNC43em0tMjQuNiA1LjNjMC0xMy40IDItMjQuMiA1LjMtMzMuNCA1LjUgOS41IDExLjcgMTguNiAxOC41IDI3LjNsLTIzLjggNi4yem0tMy41LTgwLjljLTE5LjQgMTIuOC0yNy44IDMzLjctMjkuOSA1Ni4zIDEyLjMtNC41IDI0LjYtOS4zIDM3LTEwLjYtNS0xMi02LjYtMjguMS03LTQ1LjdsLS4xIDB6bTEuOC00NS43Yy0uOCAxNC4zLTEuOCAyOC44LTEuOCA0Mi4yLTE5LjItOC4xLTI5LjgtOS43LTQ0LTE0LjEgMTAuNi0xOSAyNy4yLTI1LjUgNDUuOC0yOC4xeiJdCiAgICB9OwogICAgZmFMYXN0Zm0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGFzdGZtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMDIiLCAiTTIyNS44IDM2Ny4xbC0xOC44LTUxcy0zMC41IDM0LTc2LjIgMzRjLTQwLjUgMC02OS4yLTM1LjItNjkuMi05MS41IDAtNzIuMSAzNi40LTk3LjkgNzIuMS05Ny45IDY2LjUgMCA3NC44IDUzLjMgMTAwLjkgMTM0LjkgMTguOCA1Ni45IDU0IDEwMi42IDE1NS40IDEwMi42IDcyLjcgMCAxMjItMjIuMyAxMjItODAuOSAwLTcyLjktNjIuNy04MC42LTExNS05Mi4xLTI1LjgtNS45LTMzLjQtMTYuNC0zMy40LTM0IDAtMTkuOSAxNS44LTMxLjcgNDEuNi0zMS43IDI4LjIgMCA0My40IDEwLjYgNDUuNyAzNS44bDU4LjYtN2MtNC43LTUyLjgtNDEuMS03NC41LTEwMC45LTc0LjUtNTIuOCAwLTEwNC40IDE5LjktMTA0LjQgODMuOSAwIDM5LjkgMTkuNCA2NS4xIDY4IDc2LjggNDQuOSAxMC42IDc5LjggMTMuOCA3OS44IDQ1LjcgMCAyMS43LTIxLjEgMzAuNS02MSAzMC41LTU5LjIgMC04My45LTMxLjEtOTcuOS03My45LTMyLTk2LjgtNDMuNi0xNjMtMTYxLjMtMTYzLTg2LjEgMC0xMzEuOCA1NC41LTEzMS44IDE0Ny4yIDAgODkuMSA0NS43IDEzNy4yIDEyNy45IDEzNy4yIDY2LjIgMCA5Ny45LTMxLjEgOTcuOS0zMS4xeiJdCiAgICB9OwogICAgZmFTaG9wd2FyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wd2FyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWI1IiwgIk00MDMuNSA0NTUuNGMtNDIuNiAzMS43LTk0LjQgNDguNy0xNDcuNSA0OC42LTEzNy4yIDAtMjQ4LTExMS0yNDgtMjQ4IDAtMTM3LjIgMTExLTI0OCAyNDgtMjQ4IDYxLjItLjEgMTIwLjIgMjIuNiAxNjUuNyA2My41IC42IC41IC45IDEuMiAxLjEgMS45cy4xIDEuNS0uMyAyLjItLjggMS4zLTEuNSAxLjYtMS40IC41LTIuMiAuNGMtMTguOC0yLjUtMzcuNy0zLjctNTYuNy0zLjctMTI5LjQgMC0yMjIuNCA1My41LTIyMi40IDE1NS40IDAgMTA5IDkyLjEgMTQ1LjkgMTc2LjggMTc4LjcgMzMuNiAxMyA2NS40IDI1LjQgODcgNDEuNiAuNCAuMyAuOCAuOCAxLjEgMS4zcy40IDEgLjQgMS42LS4xIDEuMS0uNCAxLjYtLjYgLjktMS4xIDEuM2wtLjEgMHpNNTAzIDIzMy4xYy0uMS0uOS0uNS0xLjgtMS4zLTIuNC01MS44LTQzLTkzLjYtNjAuNS0xNDQuNS02MC41LTg0LjEgMC04MC4zIDUyLjItODAuMyA1My42IDAgNDIuNiA1Mi4xIDYyIDExMi4zIDg0LjUgMzEuMSAxMS42IDYzLjIgMjMuNiA5Mi43IDM5LjkgLjQgLjIgLjkgLjQgMS40IC40czEgMCAxLjUtLjIgLjktLjQgMS4zLS44IC42LS44IC44LTEuMmMxNC4xLTM2IDE5LjUtNzQuOCAxNi0xMTMuM3oiXQogICAgfTsKICAgIGZhQmxvZ2dlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibG9nZ2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2MiLCAiTTE2Mi40IDE5NmM0LjgtNC45IDYuMi01LjEgMzYuNC01LjEgMjcuMiAwIDI4LjEgLjEgMzIuMSAyLjEgNS44IDIuOSA4LjMgNyA4LjMgMTMuNiAwIDUuOS0yLjQgMTAtNy42IDEzLjQtMi44IDEuOC00LjUgMS45LTMxLjEgMi4xLTE2LjQgLjEtMjkuNS0uMi0zMS41LS44LTEwLjMtMi45LTE0LjEtMTcuNy02LjYtMjUuM3ptNjEuNCA5NC41Yy01My45IDAtNTUuOCAuMi02MC4yIDQuMS0zLjUgMy4xLTUuNyA5LjQtNS4xIDEzLjkgLjcgNC43IDQuOCAxMC4xIDkuMiAxMiAyLjIgMSAxNC4xIDEuNyA1Ni4zIDEuMmw0Ny45LS42IDkuMi0xLjVjOS01LjEgMTAuNS0xNy40IDMuMS0yNC40LTUuMy00LjctNS00LjctNjAuNC00Ljd6TTQ0Ny4yIDQyMC42Yy0zLjUgMjguNC0yMyA1MC40LTUxLjEgNTcuNS03LjIgMS44LTkuNyAxLjktMTcyLjkgMS44LTE1Ny44IDAtMTY1LjktLjEtMTcyLTEuOC04LjQtMi4yLTE1LjYtNS41LTIyLjMtMTAtNS42LTMuOC0xMy45LTExLjgtMTctMTYuNC0zLjgtNS42LTguMi0xNS4zLTEwLTIyUzAgNDIwLjMgMCAyNTYuM2MwLTE2My4xIDAtMTY2LjYgMS44LTE3My43IDYuMy0yNC43IDI1LjktNDMuNiA1MS4yLTQ5LjIgNy4zLTEuNiAzMzIuMS0xLjkgMzQwLS4zIDIxLjIgNC4zIDM3LjkgMTcuMSA0Ny42IDM2LjQgNy43IDE1LjMgNy0xLjUgNy4zIDE4MC42IC4yIDExNS44IDAgMTY0LjUtLjcgMTcwLjV6TTM2MS44IDIzNS40Yy0xLjEtNS00LjItOS42LTcuNy0xMS41LTEuMS0uNi04LTEuMy0xNS41LTEuNy0xMi40LS42LTEzLjgtLjgtMTcuOC0zLjEtNi4yLTMuNi03LjktNy42LTgtMTguMyAwLTIwLjQtOC41LTM5LjQtMjUuMy01Ni41LTEyLTEyLjItMjUuMy0yMC41LTQwLjYtMjUuMS0zLjYtMS4xLTExLjgtMS41LTM5LjItMS44LTQyLjktLjUtNTIuNSAuNC02Ny4xIDYuMi0yNyAxMC43LTQ2LjMgMzMuNC01My40IDYyLjQtMS4zIDUuNC0xLjYgMTQuMi0xLjkgNjQuMy0uNCA2Mi44IDAgNzIuMSA0IDg0LjUgOS43IDMwLjcgMzcuMSA1My40IDY0LjYgNTguNCA5LjIgMS43IDEyMi4yIDIuMSAxMzMuNyAuNSAyMC4xLTIuNyAzNS45LTEwLjggNTAuNy0yNS45IDEwLjctMTAuOSAxNy40LTIyLjggMjEuOC0zOC41IDMuMi0xMC45IDIuOS04OC40IDEuNy05My45eiJdCiAgICB9OwogICAgZmFFZGdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVkZ2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4MiIsICJNMTIwLjEgMzcuNGM0MS0yNS4yIDg3LjYtMzguMiAxMzQuOS0zNy40IDE2OCAwIDI1NyAxMjMuOCAyNTcgMjE5LjUtLjEgMzIuNy0xMyA2My45LTM1LjkgODcuMi0yMi45IDIzLjItNTQgMzYuNS04Ni43IDM3LTc1LjIgMC05MS41LTIzLjEtOTEuNS0zMiAwLTMuOCAxLjItNi4yIDQuOC05LjRsMS0xLjIgLjQtMS42YzEwLjUtMTEuNSAxNS45LTI2LjIgMTUuOS00MS42IDAtNzguNy04Mi4yLTE0Mi43LTE4NC0xNDIuNy0zNy41LS4zLTc0LjUgOC45LTEwNy41IDI2LjkgMjctNTcuNSA4Mi43LTk3LjYgOTEuMy0xMDMuOCAuOC0uNiAuMy0uOCAuMy0uOHptMTUuNiAzMTguMWMtMS40IDMwIDQuNiA2MCAxNi40IDg3LjIgMTMuNiAyNi40IDMyLjcgNTEgNTYuNSA2OS4zLTU5LjUtMTEuNS0xMTEuNS00My45LTE0OS40LTg5LjMtMzguMS00Ni40LTU5LjItMTA0LjMtNTkuMi0xNjQuOCAwLTUxLjIgNjIuNC05NC40IDEzNi05NC40IDM2LjYtLjYgNzIuNCAxMC45IDEwMS44IDMyLjdsLTMuNiAxLjJjLTUxLjUgMTcuNi05OC41IDkwLjctOTguNSAxNTguMXpNNDY5LjggNDAwbC0uNyAuMWMtMTEuOCAxOC44LTI1LjkgMzUuMS00Mi4yIDQ5LjUtMzAuOCAyOC02OC4xIDQ1LjUtMTA4LjggNDkuOS0xOC42IC4zLTM2LjgtMy4yLTUzLjgtMTEuNC0yNS42LTEwLjMtNDcuMS0zMC02MS42LTUzLTE0LjQtMjMuOS0yMS4xLTUxLjctMTktNzkuNi0uNi0yMC4xIDUuNC00MC4zIDE1LTU4LjIgMTMuOSAzMy4xIDM3LjUgNjEuMyA2Ny42IDgwLjhzNjUuNSAyOS41IDEwMS40IDI4LjZjMzEgLjMgNjIuMS02LjcgOTAuMi0yMC41bDEuOS0uOWMzLjktMi4zIDcuNy0zLjkgMTEuNiAwIDQuNSA0LjkgMS44IDkuMi0xLjIgMTQtLjIgLjItLjMgLjUtLjQgLjd6Il0KICAgIH07CiAgICBmYUlveGhvc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW94aG9zdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjA4IiwgIk02MTYgMTYwbC02Ny4zIDBDNTExLjIgNzAuNyA0MjIuOSA4IDMyMCA4IDE4MyA4IDcyIDExOSA3MiAyNTYgNzIgMjcyLjQgNzMuNiAyODguNSA3Ni43IDMwNEwyNCAzMDRjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDY3LjMgMGMzNy41IDg5LjMgMTI1LjggMTUyIDIyOC43IDE1MiAxMzcgMCAyNDgtMTExIDI0OC0yNDggMC0xNi40LTEuNi0zMi41LTQuNy00OGw1Mi43IDBjMTMuMyAwIDI0LTEwLjggMjQtMjQgMC0xMy4zLTEwLjctMjQtMjQtMjR6bS05NiA5NmMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDAtNzUuNyAwLTE0MS42LTQyLTE3NS41LTEwNEw0MjQgMzUyYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0bC0yOTguMiAwYy0zLjgtMTUuNC01LjgtMzEuNC01LjgtNDggMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwIDc1LjcgMCAxNDEuNiA0MiAxNzUuNSAxMDRMMjE2IDE2MGMtMTMuMyAwLTI0IDEwLjgtMjQgMjQgMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjk4LjIgMGMzLjggMTUuNCA1LjggMzEuNCA1LjggNDh6TTIxNiAyMzJsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAxMy4yLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEzLjIgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU2NobGl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjaGxpeCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2VhIiwgIk0zNTAuNSAxNTcuN2wtNTQuMi00Ni4xIDczLjQtMzkgNzguMyA0NC4yLTk3LjUgNDAuOXpNMTkyIDEyMi4xbDQ1LjctMjguMiAzNC43IDM0LjYtNTUuNCAyOS0yNS0zNS40em0tNjUuMSA2LjZsMzEuOS0yMi4xIDE3LjIgMjguNC0zNi43IDIyLjUtMTIuNC0yOC44em0tMjMuMyA4OC4ybC04LjgtMzQuOCAyOS42LTE4LjMgMTMuMSAzNS4zLTMzLjkgMTcuOHpNODIuNCAxMzMuMmwyMy45LTE4LjEgOC45IDI0LTI2LjcgMTguMy02LjEtMjQuMnpNNTkgMjA2LjVsLTMuNi0yOC40IDIyLjMtMTUuNSA2LjEgMjguNy0yNC44IDE1LjJ6TTI4LjQgMjIzLjFsMjAuOC0xMi44IDMuMyAzMy40LTIyLjkgMTItMS4yLTMyLjZ6TTEuNCAyNjhMMjAuNiAyNTcuOCAyMSAyOTYgMCAzMDQuOCAxLjQgMjY4em01OS4xIDU5LjNsLTI4LjMgOC4zLTEuNi00Ni44IDI1LjEtMTAuNyA0LjggNDkuMnpNOTkgMjYzLjJsLTMxLjEgMTMtNS4yLTQwLjggMjcuNC0xNC40IDguOSA0Mi4yek0xMjMuMiAzNzdsLTQxLjYgNS45LTguMS02My41IDM1LjItMTAuOCAxNC41IDY4LjR6bTI4LjUtMTM5LjlsMjEuMiA1Ny4xLTQ2LjIgMTMuNi0xMy43LTU0LjEgMzguNy0xNi42em04NS43IDIzMC41bC03MC45LTMuMy0yNC4zLTk1LjggNTUuMi04LjYgNDAgMTA3Ljd6TTE1Mi41IDE4Ny45bDQyLjItMjIuNCAyOCA0NS45LTUwLjggMjEuMy0xOS40LTQ0Ljh6bTQxIDk0LjlsNjEuMy0xOC43IDUyLjggODYuNi03OS44IDExLjMtMzQuMy03OS4yem01MS40LTg1LjZsNjcuMy0yOC44IDY1LjUgNjUuNC04OC42IDI2LjItNDQuMi02Mi44eiJdCiAgICB9OwogICAgZmFEQW5kRCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkLWFuZC1kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzOGQiLCAiTTgyLjkgOTguOWMtLjYtMTcuMiAyLTMzLjggMTIuNy00OC4yIC4zIDcuNCAxLjIgMTQuNSA0LjIgMjEuNiA1LjktMjcuNSAxOS43LTQ5LjMgNDIuMy02NS41LTEuOSA1LjktMy41IDExLjgtMyAxNy43IDguNy03LjQgMTguOC0xNy44IDQ0LjQtMjIuNyAxNC43LTIuOCAyOS43LTIgNDIuMSAxIDM4LjUgOS4zIDYxIDM0LjMgNjkuNyA3Mi4zIDUuMyAyMy4xIC43IDQ1LTguMyA2Ni40LTUuMiAxMi40LTEyIDI0LjQtMjAuNyAzNS4xLTItMS45LTMuOS0zLjgtNS44LTUuNi00Mi44LTQwLjgtMjYuOC0yNS4yLTM3LjQtMzcuNC0xLjEtMS4yLTEtMi4yLS4xLTMuNiA4LjMtMTMuNSAxMS44LTI4LjIgMTAtNDQtMS4xLTkuOC00LjMtMTguOS0xMS4zLTI2LjItMTQuNS0xNS4zLTM5LjItMTUtNTMuNSAuNi0xMS40IDEyLjUtMTQuMSAyNy40LTEwLjkgNDMuNiAuMiAxLjMgLjQgMi43IDAgMy45LTMuNCAxMy43LTQuNiAyNy42LTIuNSA0MS42IC4xIC41IC4xIDEuMSAuMSAxLjYgMCAuMy0uMSAuNS0uMiAxLjEtMjEuOC0xMS0zNi0yOC4zLTQzLjItNTIuMi04LjMgMTcuOC0xMS4xIDM1LjUtNi42IDU0LjEtMTUuNi0xNS4yLTIxLjMtMzQuMy0yMi01NS4yek01NTIuNSAyMjIuMWMtMTEuNi0xMS42LTI1LTIwLjQtNDAuMS0yNi42LTEyLjgtNS4yLTI2LTcuOS0zOS45LTcuMS0xMCAuNi0xOS42IDMuMS0yOSA2LjQtMi41IC45LTUuMSAxLjYtNy43IDIuMi00LjkgMS4yLTcuMy0zLjEtNC43LTYuOCAzLjItNC42IDMuNC00LjIgMTUtMTIgLjYtLjQgMS4yLS44IDIuMi0xLjVsLTIuNSAwYy0uNiAwLTEuMiAuMi0xLjkgLjMtMTkuMyAzLjMtMzAuNyAxNS41LTQ4LjkgMjkuNi0xMC40IDguMS0xMy44IDMuOC0xMi0uNSAxLjQtMy41IDMuMy02LjcgNS4xLTEwIDEtMS44IDIuMy0zLjQgMy41LTUuMS0uMi0uMi0uNS0uMy0uNy0uNS0yNyAxOC4zLTQ2LjcgNDIuNC01Ny43IDczLjMgLjMgLjMgLjcgLjYgMSAuOSAuMy0uNiAuNS0xLjIgLjktMS43IDEwLjQtMTIuMSAyMi44LTIxLjggMzYuNi0yOS44IDE4LjItMTAuNiAzNy41LTE4LjMgNTguNy0yMC4yIDQuMy0uNCA4LjctLjEgMTMuMS0uMS0xLjggLjctMy41IC45LTUuMyAxLjEtMTguNSAyLjQtMzUuNSA5LTUxLjUgMTguNS0zMC4yIDE3LjktNTQuNSA0Mi4yLTc1LjEgNzAuNC0uMyAuNC0uNCAuOS0uNyAxLjMgMTQuNSA1LjMgMjQgMTcuMyAzNi4xIDI1LjYgLjItLjEgLjMtLjIgLjQtLjRsMS4yLTIuN2MxMi4yLTI2LjkgMjctNTIuMyA0Ni43LTc0LjUgMTYuNy0xOC44IDM4LTI1LjMgNjIuNS0yMCA1LjkgMS4zIDExLjQgNC40IDE3LjIgNi44IDIuMy0xLjQgNS4xLTMuMiA4LTQuNyA4LjQtNC4zIDE3LjQtNyAyNi43LTkgMTQuNy0zLjEgMjkuNS00LjkgNDQuNS0xLjNsMC0uNWMtLjUtLjQtMS4yLS44LTEuNy0xLjR6TTMxNy4xIDM5Ny42Yy0zOS40LTMzLTIyLjgtMTkuNS00Mi43LTM1LjYtLjggLjkgMC0uMi0xLjkgMy0xMS4yIDE5LjEtMjUuNSAzNS4zLTQ0IDQ3LjYtMTAuMyA2LjgtMjEuNSAxMS44LTM0LjEgMTEuOC0yMS42IDAtMzguMi05LjUtNDkuNC0yNy44LTEyLTE5LjUtMTMuMy00MC43LTguMi02Mi42IDcuOC0zMy44IDMwLjEtNTUuMiAzOC42LTY0LjMtMTguNy02LjItMzMgMS43LTQ2LjQgMTMuOSAuOC0xMy45IDQuMy0yNi4yIDExLjgtMzcuMy0yNC4zIDEwLjYtNDUuOSAyNS02NC44IDQzLjktLjMtNS44IDUuNC00My43IDUuNi00NC43IC4zLTIuNy0uNi01LjMtMy03LjQtMjQuMiAyNC43LTQ0LjUgNTEuOC01Ni4xIDg0LjYgNy40LTUuOSAxNC45LTExLjQgMjMuNi0xNi4yLTguMyAyMi4zLTE5LjYgNTIuOC03LjggMTAxLjEgNC42IDE5IDExLjkgMzYuOCAyNC4xIDUyLjMgMi45IDMuNyA2LjMgNi45IDkuNSAxMC4zIC4yLS4yIC40LS4zIC42LS41LTEuNC03LTIuMi0xNC4xLTEuNS0yMS45IDIuMiAzLjIgMy45IDYgNS45IDguNiAxMi42IDE2IDI4LjcgMjcuNCA0Ny4yIDM1LjYgMjUgMTEuMyA1MS4xIDEzLjMgNzcuOSA4LjYgNTQuOS05LjcgOTAuNy00OC42IDExNi05OC44IDEtMS44IC42LTIuOS0uOS00LjJ6bTE3Mi00Ni40Yy05LjUtMy4xLTIyLjItNC4yLTI4LjctMi45IDkuOSA0IDE0LjEgNi42IDE4LjggMTIgMTIuNiAxNC40IDEwLjQgMzQuNy01LjQgNDUuNi0xMS43IDguMS0yNC45IDEwLjUtMzguOSA5LjEtMS4yLS4xLTIuMy0uNC0zLS42IDIuOC0zLjcgNi03IDguMS0xMC44IDkuNC0xNi44IDUuNC00Mi4xLTguNy01Ni4xLTIuMS0yLjEtNC42LTMuOS03LTUuOS0uMyAxLjMtLjEgMi4xIC4xIDIuOCA0LjIgMTYuNi04LjEgMzIuNC0yNC44IDMxLjgtNy42LS4zLTEzLjktMy44LTE5LjYtOC41LTE5LjUtMTYuMS0zOS4xLTMyLjEtNTguNS00OC4zLTUuOS00LjktMTIuNS04LjEtMjAuMS04LjctNC42LS40LTkuMy0uNi0xMy45LS45LTUuOS0uNC04LjgtMi44LTEwLjQtOC40LS45LTMuNC0xLjUtNi44LTIuMi0xMC4yLTEuNS04LjEtNi4yLTEzLTE0LjMtMTQuMi00LjQtLjctOC45LTEtMTMuMy0xLjUtMTMtMS40LTE5LjgtNy40LTIyLjYtMjAuMy01IDExLTEuNiAyMi40IDcuMyAyOS45IDQuNSAzLjggOS4zIDcuMyAxMy44IDExLjIgNC42IDMuOCA3LjQgOC43IDcuOSAxNC44IC40IDQuNyAuOCA5LjUgMS44IDE0LjEgMi4yIDEwLjYgOC45IDE4LjQgMTcgMjUuMSAxNi41IDEzLjcgMzMgMjcuMyA0OS41IDQxLjEgMTcuOSAxNSAxMy45IDMyLjggMTMgNTYtLjkgMjIuOSAxMi4yIDQyLjkgMzMuNSA1MS4yIDEgLjQgMiAuNiAzLjYgMS4xLTE1LjctMTguMi0xMC4xLTQ0LjEgLjctNTIuMyAuMyAyLjIgLjQgNC4zIC45IDYuNCA5LjQgNDQuMSA0NS40IDY0LjIgODUgNTYuOSAxNi0yLjkgMzAuNi04LjkgNDIuOS0xOS44IDItMS44IDMuNy00LjEgNS45LTYuNS0xOS4zIDQuNi0zNS44IC4xLTUwLjktMTAuNiAuNy0uMyAxLjMtLjMgMS45LS4zIDIxLjMgMS44IDQwLjYtMy40IDU3LTE3LjQgMTkuNS0xNi42IDI2LjYtNDIuOSAxNy40LTY2LTguMy0yMC4xLTIzLjYtMzIuMy00My44LTM4Ljl6TTk5LjggMTc5LjNjLTUuMy05LjItMTMuMi0xNS42LTIyLjEtMjEuMyAxMy43LS41IDI2LjYgLjIgMzkuNiAzLjctNy0xMi4yLTguNS0yNC43LTUtMzguNyA1LjMgMTEuOSAxMy43IDIwLjEgMjMuNiAyNi44IDE5LjcgMTMuMiAzNS43IDE5LjYgNDYuNyAzMC4yIDMuNCAzLjMgNi4zIDcuMSA5LjYgMTAuOS0uOC0yLjEtMS40LTQuMS0yLjItNi01LTEwLjYtMTMtMTguNi0yMi42LTI1LTEuOC0xLjItMi44LTIuNS0zLjQtNC41LTMuMy0xMi41LTMtMjUuMS0uNy0zNy42IDEtNS41IDIuOC0xMC45IDQuNS0xNi4zIC44LTIuNCAyLjMtNC42IDQtNi42IC42IDYuOSAwIDI1LjUgMTkuNiA0NiAxMC44IDExLjMgMjIuNCAyMS45IDMzLjkgMzIuNyA5IDguNSAxOC4zIDE2LjcgMjUuNSAyNi44IDEuMSAxLjYgMi4yIDMuMyAzLjggNC43LTUtMTMtMTQuMi0yNC4xLTI0LjItMzMuOC05LjYtOS4zLTE5LjQtMTguNC0yOS4yLTI3LjQtMy4zLTMtNC42LTYuNy01LjEtMTAuOS0xLjItMTAuNCAwLTIwLjYgNC4zLTMwLjIgLjUtMSAxLjEtMiAxLjktMy4zIC41IDQuMiAuNiA3LjkgMS40IDExLjYgNC44IDIzLjEgMjAuNCAzNi4zIDQ5LjMgNjMuNSAxMCA5LjQgMTkuMyAxOS4yIDI1LjYgMzEuNiA0LjggOS4zIDcuMyAxOSA1LjcgMjkuNi0uMSAuNiAuNSAxLjcgMS4xIDIgNi4yIDIuNiAxMCA2LjkgOS43IDE0LjMgNy43LTIuNiAxMi41LTggMTYuNC0xNC41IDQuMiAyMC4yLTkuMSA1MC4zLTI3LjIgNTguNyAuNC00LjUgNS0yMy40LTE2LjUtMjcuNy02LjgtMS4zLTEyLjgtMS4zLTIyLjktMi4xIDQuNy05IDEwLjQtMjAuNiAuNS0yMi40LTI0LjktNC42LTUyLjggMS45LTU3LjggNC42IDguMiAuNCAxNi4zIDEgMjMuNSAzLjMtMiA2LjUtNCAxMi43LTUuOCAxOC45LTEuOSA2LjUgMi4xIDE0LjYgOS4zIDkuNiAxLjItLjkgMi4zLTEuOSAzLjMtMi43LTMuMSAxNy45LTIuOSAxNS45LTIuOCAxOC4zIC4zIDEwLjIgOS41IDcuOCAxNS43IDcuMy0yLjUgMTEuOC0yOS41IDI3LjMtNDUuNCAyNS44IDctNC43IDEyLjctMTAuMyAxNS45LTE3LjktNi41IC44LTEyLjkgMS42LTE5LjIgMi40bC0uMy0uOWM0LjctMy40IDgtNy44IDEwLjItMTMuMSA4LjctMjEuMS0zLjYtMzgtMjUtMzkuOS05LjEtLjgtMTcuOCAuOC0yNS45IDUuNSA2LjItMTUuNiAxNy4yLTI2LjYgMzIuNi0zNC41LTE1LjItNC4zLTguOS0yLjctMjQuNi02LjMgMTQuNi05LjMgMzAuMi0xMy4yIDQ2LjUtMTQuNi01LjItMy4yLTQ4LjEtMy42LTcwLjIgMjAuOSA3LjkgMS40IDE1LjUgMi44IDIzLjIgNC4yLTIzLjggNy00NCAxOS43LTYyLjQgMzUuNiAxLjEtNC44IDIuNy05LjUgMy4zLTE0LjMgLjYtNC41IC44LTkuMiAuMS0xMy42LTEuNS05LjQtOC45LTE1LjEtMTkuNy0xNi4zLTcuOS0uOS0xNS42IC4xLTIzLjMgMS4zLS45IC4xLTEuNyAuMy0yLjkgMCAxNS44LTE0LjggMzYtMjEuNyA1My4xLTMzLjUgNi00LjUgNi44LTguMiAzLTE0Ljl6bTEyOC40IDI2LjhjMy4zIDE2IDEyLjYgMjUuNSAyMy44IDI0LjMtNC42LTExLjMtMTIuMS0xOS41LTIzLjgtMjQuM3oiXQogICAgfTsKICAgIGZhVnVlanMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidnVlanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQxZiIsICJNMzU2LjkgNjQuM2wtNzYuOSAwLTU2IDg4LjYtNDgtODguNi0xNzYgMCAyMjQgMzgzLjcgMjI0LTM4My43LTkxLjEgMHpNNTUuNyA5Ni4zbDUzLjggMCAxMTQuNSAxOTguMiAxMTQuNC0xOTguMiA1My44IDAtMTY4LjIgMjg4LjItMTY4LjMtMjg4LjJ6Il0KICAgIH07CiAgICBmYU1ldGEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWV0YSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNDliIiwgIk02NDAgMzE3LjljMCA5MS4zLTM5LjQgMTQ4LjUtMTEwLjMgMTQ4LjUtNjIuNiAwLTk1LjgtMzQuNi0xNTYuOS0xMzYuNmwtMzEuNC01Mi42Yy04LjMtMTIuNS0xNC41LTI0LjItMjEuMi0zNS0yMC4xIDMzLjgtNDcuMSA4My00Ny4xIDgzLTY3IDExNi42LTEwNC42IDE0MS4yLTE1Ni45IDE0MS4yLTcyLjggMC0xMTYuMi01Ny4zLTExNi4yLTE0NS45IDAtMTQzIDc5LjgtMjc4LjEgMTgzLjktMjc4LjEgNTAuMiAwIDkzLjggMjQuNyAxNDQuOCA4OS41IDM3LjEtNTAuMSA3OC4xLTg5LjUgMTMwLjYtODkuNSA5OS4xIDAgMTgwLjcgMTI1LjcgMTgwLjcgMjc1LjV6TTI4Ny40IDE5Mi4yYy00Mi45LTYyLjEtNzAuOS04MC41LTEwNC40LTgwLjUtNjEuOSAwLTExMy44IDEwNi4xLTExMy44IDIxMCAwIDQ4LjUgMTguNSA3NS43IDQ5LjYgNzUuNyAzMC4yIDAgNDktMTkgMTAzLjItMTAzLjggMCAwIDI0LjctMzkuMSA2NS40LTEwMS40ek01MzEuMiAzOTcuNGMzMi4yIDAgNDYuOS0yNy41IDQ2LjktNzQuOSAwLTEyNC4yLTU0LjMtMjI1LjQtMTIzLjItMjI1LjQtMzMuMiAwLTYxLjEgMjUuOS05NC45IDc4IDkuNCAxMy44IDE5LjEgMjkgMjkuMyA0NS40bDM3LjUgNjIuNGM1OC43IDk0LjEgNzMuNSAxMTQuNSAxMDQuNCAxMTQuNXoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYyIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwMSAxMzIuNGM3LjggMCAxMy43IDYuMSAxMy43IDEzLjdsMCAxODIuNWMwIDcuNy02LjEgMTMuNy0xMy43IDEzLjdsLTEzNS4xIDBjLTcuNyAwLTEzLjctNi0xMy43LTEzLjdsMC01NC01NCAwYy03LjggMC0xMy43LTYtMTMuNy0xMy43bDAtMTgyLjVjMC04LjIgNi42LTEyLjcgMTIuNC0xMy43bDEzNi40IDBjNy43IDAgMTMuNyA2IDEzLjcgMTMuN2wwIDU0IDU0IDB6TTE2Ny45IDMwMC4zbDQwLjcgMCAwLTEwMS40YzAtNy40IDUuOC0xMi42IDEyLTEzLjdsNTUuOCAwIDAtNDAuMy0xMDguNSAwIDAgMTU1LjR6bTE3Ni4yLTg4LjFsLTEwOC41IDAgMCAxNTUuNCAxMDguNSAwIDAtMTU1LjR6Il0KICAgIH07CiAgICBmYVN0dWRpb3ZpbmFyaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVkaW92aW5hcmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNmOCIsICJNNDgwLjcgMTg3LjdsNC4yIDI4IDAgMjgtMjUuMSA0NC4xLTM5LjggNzguNC01Ni4xIDY3LjUtNzkuMSAzNy44LTE3LjcgMjQuNS03LjcgMTItOS42IDRzMTcuMy02My42IDE5LjQtNjMuNiAyMC4zIC43IDIwLjMgLjdsNjYuNy0zOC42LTkyLjUgMjYuMS01NS45IDM2LjgtMjIuOCAyOC02LjYgMS40IDIwLjgtNzMuNiA2LjktNS41IDIwLjcgMTIuOSA4OC4zLTQ1LjIgNTYuOC01MS41IDE0LjgtNjguNC0xMjUuNCAyMy4zIDE1LjItMTguMi0xNzMuNC01My4zIDgxLjktMTAuNS0xNjYtMTIyLjkgMTE0LjkgMTguMS0xMDEuMy0xMDggMjUyLjkgMTI2LjYtMzEuNS0zOCAxMjQuNCA3NC40LTE0My4zLTk5IDE4LjcgMzguNC00OS42LTE4LjEtNDUuNS04NC4zIDE5NC42IDEyMi00Mi45LTU1LjggMTA4IDk2LjQgMTItOC45LTIxLTE2LjQgNC4yLTM3LjggMzcuOC0xMC40IDI5LjIgMjQuNyAxMS41IDQuMi03IDYuMiA4LjUgMTItMTMuMSA3LjQtMTAuMyAyMC4yIDEwLjUgMjMuOXoiXQogICAgfTsKICAgIGZhQml0YnVja2V0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdGJ1Y2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODEwXSwgImYxNzEiLCAiTTIyLjIgMzJjLTIuMSAwLTQuMiAuNC02LjEgMS4xcy0zLjcgMS45LTUuMiAzLjQtMi43IDMuMi0zLjUgNS4xLTEuMyA0LTEuMyA2LjFjMCAuOSAuMSAxLjkgLjIgMi44TDc0LjEgNDYyLjdjLjggNS4xIDMuNCA5LjcgNy4zIDEzczguOCA1LjIgMTQgNS4ybDMyNS43IDBjMy44IC4xIDcuNS0xLjMgMTAuNS0zLjdzNC45LTUuOSA1LjUtOS43TDUwNSA1MC43Yy43LTQuMi0uMy04LjQtMi44LTExLjlzLTYuMi01LjctMTAuNC02LjRjLS45LS4xLTEuOS0uMi0yLjgtLjJMMjIuMiAzMnpNMzA4LjEgMzI5LjhsLTEwNCAwLTI4LjEtMTQ3IDE1Ny4zIDAtMjUuMiAxNDd6Il0KICAgIH07CiAgICBmYVZrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxODkiLCAiTTMxLjUgNjMuNUMwIDk1IDAgMTQ1LjcgMCAyNDdMMCAyNjVDMCAzNjYuMyAwIDQxNyAzMS41IDQ0OC41UzExMy43IDQ4MCAyMTUgNDgwbDE3LjkgMGMxMDEuNCAwIDE1Mi4xIDAgMTgzLjUtMzEuNVM0NDggMzY2LjMgNDQ4IDI2NWwwLTE3LjljMC0xMDEuNCAwLTE1Mi4xLTMxLjUtMTgzLjVTMzM0LjMgMzIgMjMzIDMyTDIxNSAzMkMxMTMuNyAzMiA2MyAzMiAzMS41IDYzLjV6TTc1LjYgMTY4LjNsNTEuMSAwYzEuNyA4NS41IDM5LjQgMTIxLjcgNjkuMyAxMjkuMmwwLTEyOS4yIDQ4LjIgMCAwIDczLjdjMjkuNS0zLjIgNjAuNS0zNi44IDcwLjktNzMuN2w0OC4yIDBjLTMuOSAxOS4yLTExLjggMzcuMy0yMy4xIDUzLjNzLTI1LjcgMjkuNS00Mi41IDM5LjZjMTguNyA5LjMgMzUuMiAyMi40IDQ4LjQgMzguNXMyMi45IDM0LjkgMjguMyA1NWwtNTMgMGMtNC45LTE3LjUtMTQuOC0zMy4xLTI4LjYtNDVzLTMwLjctMTkuNC00OC43LTIxLjZsMCA2Ni42LTUuOCAwYy0xMDIuMSAwLTE2MC4zLTcwLTE2Mi44LTE4Ni41eiJdCiAgICB9OwogICAgZmFHaXRodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0aHViIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwOWIiLCAiTTE3My45IDM5Ny40YzAgMi0yLjMgMy42LTUuMiAzLjYtMy4zIC4zLTUuNi0xLjMtNS42LTMuNiAwLTIgMi4zLTMuNiA1LjItMy42IDMtLjMgNS42IDEuMyA1LjYgMy42em0tMzEuMS00LjVjLS43IDIgMS4zIDQuMyA0LjMgNC45IDIuNiAxIDUuNiAwIDYuMi0ycy0xLjMtNC4zLTQuMy01LjJjLTIuNi0uNy01LjUgLjMtNi4yIDIuM3ptNDQuMi0xLjdjLTIuOSAuNy00LjkgMi42LTQuNiA0LjkgLjMgMiAyLjkgMy4zIDUuOSAyLjYgMi45LS43IDQuOS0yLjYgNC42LTQuNi0uMy0xLjktMy0zLjItNS45LTIuOXpNMjUyLjggOGMtMTM4LjcgMC0yNDQuOCAxMDUuMy0yNDQuOCAyNDQgMCAxMTAuOSA2OS44IDIwNS44IDE2OS41IDIzOS4yIDEyLjggMi4zIDE3LjMtNS42IDE3LjMtMTIuMSAwLTYuMi0uMy00MC40LS4zLTYxLjQgMCAwLTcwIDE1LTg0LjctMjkuOCAwIDAtMTEuNC0yOS4xLTI3LjgtMzYuNiAwIDAtMjIuOS0xNS43IDEuNi0xNS40IDAgMCAyNC45IDIgMzguNiAyNS44IDIxLjkgMzguNiA1OC42IDI3LjUgNzIuOSAyMC45IDIuMy0xNiA4LjgtMjcuMSAxNi0zMy43LTU1LjktNi4yLTExMi4zLTE0LjMtMTEyLjMtMTEwLjUgMC0yNy41IDcuNi00MS4zIDIzLjYtNTguOS0yLjYtNi41LTExLjEtMzMuMyAyLjYtNjcuOSAyMC45LTYuNSA2OSAyNyA2OSAyNyAyMC01LjYgNDEuNS04LjUgNjIuOC04LjVzNDIuOCAyLjkgNjIuOCA4LjVjMCAwIDQ4LjEtMzMuNiA2OS0yNyAxMy43IDM0LjcgNS4yIDYxLjQgMi42IDY3LjkgMTYgMTcuNyAyNS44IDMxLjUgMjUuOCA1OC45IDAgOTYuNS01OC45IDEwNC4yLTExNC44IDExMC41IDkuMiA3LjkgMTcgMjIuOSAxNyA0Ni40IDAgMzMuNy0uMyA3NS40LS4zIDgzLjYgMCA2LjUgNC42IDE0LjQgMTcuMyAxMi4xIDEwMC0zMy4yIDE2Ny44LTEyOC4xIDE2Ny44LTIzOSAwLTEzOC43LTExMi41LTI0NC0yNTEuMi0yNDR6TTEwNS4yIDM1Mi45Yy0xLjMgMS0xIDMuMyAuNyA1LjIgMS42IDEuNiAzLjkgMi4zIDUuMiAxIDEuMy0xIDEtMy4zLS43LTUuMi0xLjYtMS42LTMuOS0yLjMtNS4yLTF6bS0xMC44LTguMWMtLjcgMS4zIC4zIDIuOSAyLjMgMy45IDEuNiAxIDMuNiAuNyA0LjMtLjcgLjctMS4zLS4zLTIuOS0yLjMtMy45LTItLjYtMy42LS4zLTQuMyAuN3ptMzIuNCAzNS42Yy0xLjYgMS4zLTEgNC4zIDEuMyA2LjIgMi4zIDIuMyA1LjIgMi42IDYuNSAxIDEuMy0xLjMgLjctNC4zLTEuMy02LjItMi4yLTIuMy01LjItMi42LTYuNS0xem0tMTEuNC0xNC43Yy0xLjYgMS0xLjYgMy42IDAgNS45czQuMyAzLjMgNS42IDIuM2MxLjYtMS4zIDEuNi0zLjkgMC02LjItMS40LTIuMy00LTMuMy01LjYtMnoiXQogICAgfTsKICAgIGZhQ29kaWVwaWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29kaWVwaWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4NCIsICJNNDQyLjUgMjAyLjljMzAuNyAwIDMzLjUgNTMuMS0uMyA1My4xbC0xMC44IDAgMCA0NC4zLTI2LjYgMCAwLTk3LjQgMzcuNyAwek00OTIgMzUyLjZDNDQ5LjkgNDQ0LjUgMzcwLjQgNTA0IDI2OCA1MDQgMTMxIDUwNCAyMCAzOTMgMjAgMjU2UzEzMSA4IDI2OCA4Yzk3LjQgMCAxNzIuOCA1My43IDIxOC4yIDEzOC40TDMwMC4yIDI1NS4yIDQ5MiAzNTIuNnptLTM4LjUgMTIuNWwtNjAuMy0zMC43Yy0yNy4xIDQ0LjMtNzAuNCA3MS40LTEyMi40IDcxLjQtODIuNSAwLTE0OS4yLTY2LjctMTQ5LjItMTQ4LjkgMC04Mi41IDY2LjctMTQ5LjIgMTQ5LjItMTQ5LjIgNDguNCAwIDg4LjkgMjMuNSAxMTYuOSA2My40bDU5LjUtMzQuNkM0MDYuNSA3My45IDM0Mi41IDM2LjUgMjY4IDM2LjUgMTQ2LjggMzYuNSA0OC41IDEzNC44IDQ4LjUgMjU2UzE0Ni44IDQ3NS41IDI2OCA0NzUuNWM3OC42IDAgMTQ2LjUtNDIuMSAxODUuNS0xMTAuNHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJhZSIsICJNNDQwLjIgMjMuMmMtMjYuNyA2LjgtNjguMSAyOC41LTExNC42IDY3LjUtMzAuOS0xNy41LTY1LjgtMjYuNy0xMDEuNC0yNi43LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4IDIwOC05My4xIDIwOC0yMDhjLjEtNTQuMS0yMS0xMDYuMS01OC43LTE0NC44LTYuNiA4LjUtMTIuMyAxNy43LTE3IDI3LjQgMjguOSAzMi4zIDQ0LjggNzQuMSA0NC45IDExNy40IDAgOTcuNy03OS40IDE3Ny4xLTE3Ny4xIDE3Ny4xLTMwLjggMC02MS04LjEtODcuNi0yMy40IDgyLjktMTA3LjMgMTUwLjgtMzcuOCAxODQuMy0yMjYuNiA1LjgtMzIuNiAyOC05NC4zIDEyNi4yLTE2MC4yIDguMS01LjQgMi40LTE4LjEtNy0xNS43ek0xMDkuMyA0MDYuNEM4OS44IDM4OS44IDc0LjIgMzY5LjIgNjMuNSAzNDZzLTE2LjMtNDguNS0xNi4zLTc0YzAtOTcuNyA3OS40LTE3Ny4xIDE3Ny4xLTE3Ny4xIDI2LjYgMCA1Mi44IDYuMSA3Ni42IDE3LjgtNjYgNjIuMS0xMjYuOSAxNTIuOS0xOTEuNiAyOTMuOHoiXQogICAgfTsKICAgIGZhUmFzcGJlcnJ5UGkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmFzcGJlcnJ5LXBpIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YmIiLCAiTTM5Mi41IDIzMi41bC0zLjctNi41Yy4xLTQ2LjQtMjEuNC02NS4zLTQ2LjUtNzkuNyA3LjYtMiAxNS40LTMuNiAxNy42LTEzLjIgMTMuMS0zLjMgMTUuOC05LjQgMTcuMS0xNS44IDMuNC0yLjMgMTQuOC04LjcgMTMuNi0xOS43IDYuNC00LjQgMTAtMTAuMSA4LjEtMTguMSA2LjktNy41IDguNy0xMy43IDUuOC0xOS40IDguMy0xMC4zIDQuNi0xNS42IDEuMS0yMC45IDYuMi0xMS4yIC43LTIzLjItMTYuNi0yMS4yLTYuOS0xMC4xLTIxLjktNy44LTI0LjItNy44LTIuNi0zLjItNi02LTE2LjUtNC43LTYuOC02LjEtMTQuNC01LTIyLjMtMi4xLTkuMy03LjMtMTUuNS0xLjQtMjIuNiAuOC0xMS4zLTMuNi0xMy45IDEuMy0xOS40IDMuNC0xMi4zLTIuNi0xNi4xIDMtMjIgOC45bC02LjktLjFjLTE4LjYgMTAuOC0yNy44IDMyLjgtMzEuMSA0NC4xLTMuMy0xMS4zLTEyLjUtMzMuMy0zMS4xLTQ0LjFsLTYuOSAuMWMtNS45LTUuOS05LjctMTEuNS0yMi04LjktNS42LTItOC4xLTctMTkuNC0zLjQtNC42LTEuNC04LjktNC40LTEzLjktNC4zLTIuNiAuMS01LjUgMS04LjcgMy41LTcuOS0zLTE1LjUtNC0yMi4zIDIuMS0xMC41LTEuMy0xNCAxLjQtMTYuNSA0LjctMi4zIDAtMTcuMy0yLjMtMjQuMiA3LjgtMTcuMy0yLTIyLjcgMTAtMTYuNSAyMS4yLTMuNSA1LjQtNy4yIDEwLjcgMS4xIDIwLjktMi45IDUuNy0xLjEgMTEuOSA1LjggMTkuNC0xLjggOCAxLjggMTMuNyA4LjEgMTguMS0xLjIgMTEgMTAuMiAxNy40IDEzLjYgMTkuNyAxLjMgNi40IDQgMTIuNCAxNy4xIDE1LjggMi4yIDkuNSAxMCAxMS4yIDE3LjYgMTMuMi0yNS4xIDE0LjQtNDYuNiAzMy4zLTQ2LjUgNzkuN2wtMy43IDYuNWMtMjguOCAxNy4yLTU0LjcgNzIuNy0xNC4yIDExNy43IDIuNiAxNC4xIDcuMSAyNC4yIDExIDM1LjQgNS45IDQ1LjIgNDQuNSA2Ni4zIDU0LjYgNjguOCAxNC45IDExLjIgMzAuOCAyMS44IDUyLjIgMjkuMiAyMC4zIDIwLjYgNDIuMyAyOC40IDY0LjMgMjguNGwxIDBjMjIuMSAwIDQ0LTcuOCA2NC4yLTI4LjQgMjEuNS03LjQgMzcuMy0xOCA1Mi4yLTI5LjIgMTAuMi0yLjUgNDguNy0yMy42IDU0LjYtNjguOCAzLjktMTEuMiA4LjQtMjEuMyAxMS0zNS40IDQwLjYtNDUuMSAxNC43LTEwMC41LTE0LTExNy43em0tMjIuMi04Yy0xLjUgMTguNy05OC45LTY1LjEtODIuMS02Ny45IDQ1LjctNy41IDgzLjYgMTkuMiA4Mi4xIDY3Ljl6bS00MyA5My4xYy0yNC41IDE1LjgtNTkuOCA1LjYtNzguOC0yMi44cy0xNC42LTY0LjIgOS45LTgwIDU5LjgtNS42IDc4LjggMjIuOCAxNC42IDY0LjItOS45IDgwek0yNTkuNCAyOS4zYy44IDQuMiAxLjggNi44IDIuOSA3LjYgNS40LTUuOCA5LjgtMTEuNyAxNi44LTE3LjMgMCAzLjMtMS43IDYuOCAyLjUgOS40IDMuNy01IDguOC05LjUgMTUuNS0xMy4zLTMuMiA1LjYtLjYgNy4zIDEuMiA5LjYgNS4xLTQuNCAxMC04LjggMTkuNC0xMi4zLTIuNiAzLjEtNi4yIDYuMi0yLjQgOS44IDUuMy0zLjMgMTAuNi02LjYgMjMuMS04LjktMi44IDMuMS04LjcgNi4zLTUuMSA5LjQgNi42LTIuNSAxNC00LjQgMjIuMS01LjQtMy45IDMuMi03LjEgNi4zLTMuOSA4LjggNy4xLTIuMiAxNi45LTUuMSAyNi40LTIuNmwtNiA2LjFjLS43IC44IDE0LjEgLjYgMjMuOSAuOC0zLjYgNS03LjIgOS43LTkuMyAxOC4yIDEgMSA1LjggLjQgMTAuNCAwLTQuNyA5LjktMTIuOCAxMi4zLTE0LjcgMTYuNiAyLjkgMi4yIDYuOCAxLjYgMTEuMiAuMS0zLjQgNi45LTEwLjQgMTEuNy0xNiAxNy4zIDEuNCAxIDMuOSAxLjYgOS43IC45LTUuMiA1LjUtMTEuNCAxMC41LTE4LjggMTUgMS4zIDEuNSA1LjggMS41IDEwIDEuNi02LjcgNi41LTE1LjMgOS45LTIzLjQgMTQuMiA0IDIuNyA2LjkgMi4xIDEwIDIuMS01LjcgNC43LTE1LjQgNy4xLTI0LjQgMTAgMS43IDIuNyAzLjQgMy40IDcuMSA0LjEtOS41IDUuMy0yMy4yIDIuOS0yNyA1LjYgLjkgMi43IDMuNiA0LjQgNi43IDUuOC0xNS40IC45LTU3LjMtLjYtNjUuNC0zMi4zIDE1LjctMTcuMyA0NC40LTM3LjUgOTMuNy02Mi42LTM4LjQgMTIuOC03MyAzMC0xMDIgNTMuNS0zNC4zLTE1LjktMTAuOC01NS45IDUuOC03MS44ek0yMjUgMTQzLjljMjQuMi0uMyA1NC4xIDE3LjggNTQgMzQuNy0uMSAxNS0yMSAyNy4xLTUzLjggMjYuOS0zMi4xLS40LTUzLjctMTUuMi01My42LTI5LjggMC0xMS45IDI2LjItMzIuNSA1My40LTMxLjh6TTEwMiAxMzEuMWMzLjctLjcgNS40LTEuNSA3LjEtNC4xLTktMi44LTE4LjctNS4zLTI0LjQtMTAgMy4xIDAgNiAuNyAxMC0yLjEtOC4xLTQuMy0xNi43LTcuNy0yMy40LTE0LjIgNC4yLS4xIDguNyAwIDEwLTEuNi03LjQtNC41LTEzLjYtOS41LTE4LjgtMTUgNS44IC43IDguMyAuMSA5LjctLjktNS42LTUuNi0xMi43LTEwLjQtMTYtMTcuMyA0LjMgMS41IDguMyAyIDExLjItLjEtMS45LTQuMi0xMC02LjctMTQuNy0xNi42IDQuNiAuNCA5LjQgMSAxMC40IDAtMi4xLTguNS01LjgtMTMuMy05LjMtMTguMiA5LjgtLjEgMjQuNiAwIDIzLjktLjhsLTYtNi4xYzkuNS0yLjUgMTkuMyAuNCAyNi40IDIuNiAzLjItMi41LS4xLTUuNi0zLjktOC44IDguMSAxLjEgMTUuNCAyLjkgMjIuMSA1LjQgMy41LTMuMS0yLjMtNi4zLTUuMS05LjQgMTIuNSAyLjMgMTcuOCA1LjYgMjMuMSA4LjkgMy44LTMuNiAuMi02LjctMi40LTkuOCA5LjQgMy40IDE0LjMgNy45IDE5LjQgMTIuMyAxLjctMi4zIDQuNC00IDEuMi05LjYgNi43IDMuOCAxMS44IDguMyAxNS41IDEzLjMgNC4xLTIuNiAyLjUtNi4yIDIuNS05LjQgNyA1LjYgMTEuNCAxMS41IDE2LjggMTcuMyAxLjEtLjggMi0zLjQgMi45LTcuNiAxNi42IDE1LjkgNDAuMSA1NS45IDYgNzEuOC0yOS0yMy41LTYzLjYtNDAuNy0xMDItNTMuNSA0OS4zIDI1IDc4IDQ1LjMgOTMuNyA2Mi42LTggMzEuOC01MCAzMy4yLTY1LjQgMzIuMyAzLjEtMS40IDUuOC0zLjIgNi43LTUuOC00LTIuOC0xNy42LS40LTI3LjItNS42em02MC4xIDI0LjFjMTYuOCAyLjgtODAuNiA4Ni41LTgyLjEgNjcuOS0xLjUtNDguNyAzNi41LTc1LjUgODIuMS02Ny45ek01OC43IDM0MmMtMjMuNy0xOC44LTMxLjMtNzMuNyAxMi42LTk4LjMgMjYuNS03IDkgMTA3LjgtMTIuNiA5OC4zem05MSA5OC4yYy0xMy4zIDcuOS00NS44IDQuNy02OC44LTI3LjktMTUuNS0yNy40LTEzLjUtNTUuMi0yLjYtNjMuNCAxNi4zLTkuOCA0MS41IDMuNCA2MC45IDI1LjYgMTYuOSAyMCAyNC42IDU1LjMgMTAuNSA2NS43ek0xMjMuMyAzMjAuNWMtMjQuNS0xNS44LTI4LjktNTEuNi05LjktODBzNTQuMy0zOC42IDc4LjgtMjIuOCAyOC45IDUxLjYgOS45IDgwYy0xOS4xIDI4LjQtNTQuNCAzOC42LTc4LjggMjIuOHpNMjI1LjUgNDk2Yy0yOS40IDEuMi01OC4yLTIzLjctNTcuOC0zMi4zLS40LTEyLjcgMzUuOC0yMi42IDU5LjMtMjIgMjMuNy0xIDU1LjYgNy41IDU1LjcgMTguOSAuNSAxMS0yOC44IDM1LjktNTcuMiAzNS40em01OC45LTEyNC45Yy4yIDI5LjctMjYuMiA1My44LTU4LjggNTRzLTU5LjItMjMuOC01OS40LTUzLjRsMC0uNmMtLjItMjkuNyAyNi4yLTUzLjggNTguOC01NHM1OS4yIDIzLjggNTkuNCA1My40bDAgLjZ6bTgyLjIgNDIuN2MtMjUuMyAzNC42LTU5LjYgMzUuOS03Mi4zIDI2LjMtMTMuMy0xMi40LTMuMi01MC45IDE1LjEtNzIgMjAuOS0yMy4zIDQzLjMtMzguNSA1OC45LTI2LjYgMTAuNSAxMC4zIDE2LjcgNDkuMS0xLjcgNzIuM3ptMjIuOS03My4yYy0yMS41IDkuNC0zOS0xMDUuMy0xMi42LTk4LjMgNDMuOSAyNC43IDM2LjMgNzkuNiAxMi42IDk4LjN6Il0KICAgIH07CiAgICBmYUNzczMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzMyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTNjIiwgIk00ODAgMzJsLTY0IDM2OC0yMjMuMyA4MC0xOTIuNy04MCAxOS42LTk0LjggODIgMC04IDQwLjYgMTE2LjQgNDQuNCAxMzQuMS00NC40IDE4LjgtOTcuMS0zMzMuNCAwIDE2LTgyIDMzMy43IDAgMTAuNS01Mi43LTMzMy40IDAgMTYuMy04MiA0MDcuNCAweiJdCiAgICB9OwogICAgZmFIdWJzcG90ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImh1YnNwb3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiMiIsICJNMjM1LjggMjExLjZjLTI1LjEgMjMuNy00MC44IDU3LjMtNDAuOCA5NC42IDAgMjkuMyA5LjcgNTYuMyAyNiA3OEwxNzEuNSA0MzRjLTQuNC0xLjYtOS4xLTIuNS0xNC0yLjUtMTAuOCAwLTIwLjkgNC4yLTI4LjUgMTEuOHMtMTEuOCAxNy44LTExLjggMjguNiA0LjIgMjAuOSAxMS44IDI4LjUgMTcuOCAxMS42IDI4LjUgMTEuNmMxMC44IDAgMjAuOS0zLjkgMjguNi0xMS42IDcuNi03LjYgMTEuOC0xNy44IDExLjgtMjguNSAwLTQuMi0uNi04LjItMS45LTEyLjFsNTAtNTAuMmMyMiAxNi45IDQ5LjQgMjYuOSA3OS4zIDI2LjkgNzEuOSAwIDEzMC01OC4zIDEzMC0xMzAuMiAwLTY1LjItNDcuNy0xMTkuMi0xMTAuMi0xMjguN2wwLTYxLjZjMTcuNS03LjQgMjguMi0yMy44IDI4LjItNDIuOSAwLTI2LjEtMjAuOS00Ny45LTQ3LTQ3LjlTMjc5LjYgNDcgMjc5LjYgNzMuMWMwIDE5LjEgMTAuNyAzNS41IDI4LjIgNDIuOWwwIDYxLjJjLTE1LjIgMi4xLTI5LjYgNi43LTQyLjcgMTMuNi0yNy42LTIwLjktMTE3LjUtODUuNy0xNjguOS0xMjQuOCAxLjItNC40IDItOSAyLTEzLjggMC0yOC44LTIzLjUtNTIuMi01Mi40LTUyLjItMjguOCAwLTUyLjIgMjMuNC01Mi4yIDUyLjIgMCAyOC45IDIzLjQgNTIuMyA1Mi4yIDUyLjMgOS44IDAgMTguOS0yLjkgMjYuOC03LjZMMjM1LjggMjExLjZ6bTg5LjUgMjUuNmE2OSA2OSAwIDEgMSAwIDEzOCA2OSA2OSAwIDEgMSAwLTEzOHoiXQogICAgfTsKICAgIGZhQ21wbGlkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNtcGxpZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMzYwIiwgIk0yMjYuMSAzODguMmMwLS43LS4yLTEuNS0uNi0yLjFzLTEtMS4xLTEuNy0xLjRjLS41LS4yLTEuMS0uNC0xLjYtLjRsLTE0OS42IDBjLTMuMSAwLTYuMi0uOC04LjktMi4ycy01LjEtMy41LTYuOS02LjEtMi45LTUuNS0zLjMtOC42IDAtNi4yIDEuMS05LjFMODEuNiAyNTUuN2MyLTcuMiA2LjItMTMuNSAxMi0xOC4yczEyLjktNy40IDIwLjQtNy44bDE0OC42IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuNC0xIC4zLTItLjEtMi45cy0xLjItMS42LTIuMS0yYy0uNC0uMi0uOS0uMy0xLjQtLjMtLjEgMC0uMSAwLS4yIDBsLTE0OC41IDBjLTIyLjIgMS4yLTQzLjQgOS4yLTYwLjggMjNzLTMwIDMyLjctMzYuMiA1NC4xTDMuNSAzNTguOGMtMy4yIDguNy00LjIgMTgtMyAyNy4xczQuNiAxNy45IDkuOSAyNS41IDEyLjMgMTMuOCAyMC41IDE4IDE3LjMgNi41IDI2LjUgNi42YzEgMCAxLjkgMCAyLjktLjFsMTQ4LjYgMGMxLjUtLjEgMi45LS43IDQtMS42czItMi4yIDIuNC0zLjZsMTAuNy00MS4xYy4yLS41IC4zLS45IC4zLTEuNHptODAuNS0zMDdjLjItLjQgLjMtLjkgLjMtMS40IDAtLjUtLjEtMS0uMy0xLjVzLS41LS45LS44LTEuMi0uOC0uNi0xLjItLjgtMS0uMy0xLjUtLjNsLTQxLjIgMGMtMS41IC4xLTIuOSAuNi00IDEuNnMtMiAyLjItMi40IDMuNmwtMjEuMyA4MC45IDUxLjEgMCAyMS40LTgwLjl6bS0xMjYuMyAyODdsNTEuMSAwIDMyLTEyMi42LTUxLjEgMC0zMiAxMjIuNnpNNTExLjkgNzkuN2MwLTEtLjUtMS45LTEuMi0yLjZzLTEuNy0xLjEtMi42LTEuMWMtLjEgMC0uMSAwLS4yIDBsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNC4xIDEuNXMtMiAyLjItMi41IDMuNkwzNjguOSA0MzAuNmMtLjIgLjQtLjMgLjktLjMgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjIgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNTExLjUgODEuMmMuMi0uNSAuMy0xIC4zLTEuNXpNMzI0LjYgMzg0LjVsLTQxIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjcgNDEuMWMtLjIgLjQtLjMgLjktLjMgMS40IDAgLjUgLjEgMSAuMyAxLjVzLjUgLjkgLjggMS4yIC44IC42IDEuMiAuOCAxIC4zIDEuNSAuM2MuMSAwIC4yIDAgLjMgMGw0MC45IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuMi0uNiAuMy0xLjIgLjMtMS44cy0uMy0xLjItLjYtMS43LS44LS45LTEuMy0xLjItMS4yLS40LTEuOC0uNGMtLjEgMC0uMiAwLS4zIDBsMCAwek02MzYgNzYuMWwtNDEgMGMtMS41IC4xLTIuOSAuNi00IDEuNXMtMiAyLjItMi40IDMuNkw0OTcuMSA0MzAuNmMtLjIgLjQtLjIgLjktLjIgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNjM5LjcgODEuMmMuMi0uNSAuMy0xIC4zLTEuNS0uMS0xLS41LTEuOS0xLjItMi41cy0xLjYtMS0yLjYtMWMtLjEgMC0uMSAwLS4yIDBsMC0uMXpNMzcxLjYgMjI1LjJsMTAuOC00MS4xYy4yLS40IC4yLS45IC4yLTEuNCAwLTEtLjQtMi0xLjEtMi43cy0xLjctMS4xLTIuNy0xLjFsLTQxLjMgMGMtMS41IC4xLTIuOSAuNy00IDEuNnMtMiAyLjItMi40IDMuNmwtMTAuOCA0MS4xYy0uMiAuNS0uMyAxLS4zIDEuNWwwIC4yYy4xIDEgLjUgMS44IDEuMiAyLjVzMS42IDEgMi42IDFjLjEgMCAuMiAwIC4zIDBsNDEuMSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNnoiXQogICAgfTsKICAgIGZhRHlhbG9nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImR5YWxvZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzk5IiwgIk0xNiAzMmwwIDExOS4yIDY0IDAgMC01NS4yIDEwNy4yIDBDMzAwLjYgOTYgMzY4IDE3Ni4yIDM2OCAyNTUuOSAzNjggMzMyIDMwOS40IDQxNiAxODcuMiA0MTZsLTE3MS4yIDAgMCA2NCAxNzEuMiAwQzM0Ny45IDQ4MCA0MzIgMzY3LjMgNDMyIDI1NS45IDQzMiAxOTcuMiA0MDkuOSAxNDIuNSAzNjkuNyAxMDEuNiAzMjQuOSA1NiAyNjEuNyAzMiAxODcuMiAzMkwxNiAzMnoiXQogICAgfTsKICAgIGZhRWxlbWVudG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsZW1lbnRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDMwIiwgIk0uNSAyNTZjMCAxNDEgMTEzLjYgMjU1IDI1NC42IDI1NSAxNDIgMCAyNTYtMTE0IDI1Ni0yNTUgMC0xNDAtMTE0LTI1My45LTI1Ni0yNTMuOS0xNDEgMC0yNTQuNiAxMTMuOS0yNTQuNiAyNTMuOXpNMTkyLjEgMTUwbDAgMjEzLTQzIDAgMC0yMTMgNDMgMHptNDIgMGwxMjggMCAwIDQzLTEyOCAwIDAtNDN6bTEyOCA4NWwwIDQzLTEyOCAwIDAtNDMgMTI4IDB6bS0xMjggODVsMTI4IDAgMCA0My0xMjggMCAwLTQzeiJdCiAgICB9OwogICAgZmFGaXJzdE9yZGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcnN0LW9yZGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYjAiLCAiTTEzLjMgMjI5LjJjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMjQuNCA5Ni42Yy03LjEgMC0xNC42IC42LTIxLjQgMS43bDMuNyA2Ny40LTIyLTY0Yy0xNC4zIDMuNy0yNy43IDkuNC00MCAxNi42bDI5LjQgNjEuNC00NS4xLTUwLjljLTExLjQgOC45LTIxLjcgMTkuMS0zMC42IDMwLjlsNTAuNiA0NS40LTYxLjEtMjkuN2MtNy4xIDEyLjMtMTIuOSAyNS43LTE2LjYgNDBsNjQuMyAyMi42LTY4LTRjLS45IDcuMS0xLjQgMTQuNi0xLjQgMjJzLjYgMTQuNiAxLjQgMjEuN2w2Ny43LTQtNjQgMjIuNmMzLjcgMTQuMyA5LjQgMjcuNyAxNi42IDQwLjNMMTQ5IDMwNi45IDk4LjEgMzUyYzguOSAxMS43IDE5LjEgMjIuMyAzMC45IDMwLjlsNDQuOS01MC45LTI5LjUgNjEuNGMxMi4zIDcuNCAyNS43IDEzLjEgNDAgMTYuOWwyMi4zLTY0LjYtNCA2OGM3LjEgMS4xIDE0LjYgMS43IDIxLjcgMS43IDcuNCAwIDE0LjYtLjYgMjEuNy0xLjdsLTQtNjguNiAyMi42IDY1LjFjMTQuMy00IDI3LjctOS40IDQwLTE2LjlsLTI5LjQtNjEuMyA0NC45IDUwLjljMTEuNy04LjkgMjItMTkuMSAzMC42LTMwLjlsLTUwLjYtNDUuMSA2MS4xIDI5LjRjNy4xLTEyLjMgMTIuOS0yNS43IDE2LjYtNDAuM2wtNjQtMjIuMyA2Ny40IDRjMS4xLTcuMSAxLjQtMTQuMyAxLjQtMjEuN3MtLjMtMTQuOS0xLjQtMjJsLTY3LjcgNCA2NC0yMi4zYy0zLjctMTQuMy05LjEtMjgtMTYuNi00MC4zbC02MC45IDI5LjcgNTAuNi00NS40Yy04LjktMTEuNy0xOS4xLTIyLTMwLjYtMzAuOWwtNDUuMSA1MC45IDI5LjQtNjEuMWMtMTIuMy03LjQtMjUuNy0xMy4xLTQwLTE2LjlsLTIyLjMgNjQuMyA0LTY3LjdjLTcuMS0xLjItMTQuMy0xLjctMjEuNy0xLjd6TTQ0My44IDEyOEw0NDMuOCAzODQgMjI0LjQgNTEyIDUgMzg0IDUgMTI4IDIyNC40IDAgNDQzLjggMTI4em0tMTcuMSAxMC4zbC0yMDIuMy0xMTcuNC0yMDIuMyAxMTcuNCAwIDIzNS4xIDIwMi4zIDExNy43IDIwMi4zLTExNy43IDAtMjM1LjF6TTIyNC40IDM3LjFsMTg3LjcgMTA5LjQgMCAyMTguOS0xODcuNyAxMDkuNS0xODcuNy0xMDkuNSAwLTIxOC44IDE4Ny43LTEwOS41em0wIDUwLjljLTkyLjMgMC0xNjYuOSA3NS4xLTE2Ni45IDE2OCAwIDkyLjYgNzQuNiAxNjcuNyAxNjYuOSAxNjcuNyA5MiAwIDE2Ni45LTc1LjEgMTY2LjktMTY3LjcgMC05Mi45LTc0LjktMTY4LTE2Ni45LTE2OHoiXQogICAgfTsKICAgIGZhRHJpYmJibGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHJpYmJibGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE3ZCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MjAgMTIyLjRjMjkuNSAzNiA0Ny40IDgyIDQ3LjggMTMyLTctMS41LTc3LTE1LjctMTQ3LjUtNi44LTUuOC0xNC0xMS4yLTI2LjQtMTguNi00MS42IDc4LjMtMzIgMTEzLjgtNzcuNSAxMTguMy04My41ek0zOTYuNCA5Ny45Yy0zLjggNS40LTM1LjcgNDguMy0xMTEgNzYuNS0zNC43LTYzLjgtNzMuMi0xMTYuMi03OS0xMjQgNjcuMi0xNi4yIDEzOCAxLjMgMTkwLjEgNDcuNXpNMTY1LjkgNjQuNmM1LjYgNy43IDQzLjQgNjAuMSA3OC41IDEyMi41LTk5LjEgMjYuMy0xODYuNCAyNS45LTE5NS44IDI1LjggMTMuNy02NS43IDU4LTEyMC40IDExNy4zLTE0OC4zek00NC4yIDI1Ni4zYzAtMi4yIDAtNC4zIC4xLTYuNSA5LjMgLjIgMTExLjkgMS41IDIxNy43LTMwLjEgNi4xIDExLjkgMTEuOSAyMy45IDE3LjIgMzUuOS03Ni42IDIxLjYtMTQ2LjIgODMuNS0xODAuNSAxNDIuMy0zMy44LTM3LjYtNTQuNS04Ny4yLTU0LjUtMTQxLjZ6TTEyNiA0MjMuNGMyMi4xLTQ1LjIgODIuMi0xMDMuNiAxNjcuNi0xMzIuOCAyOS43IDc3LjMgNDIgMTQyLjEgNDUuMiAxNjAuNi02OC4xIDI5LTE1MCAyMS4xLTIxMi44LTI3Ljl6bTI0OC40IDguNWMtMi4yLTEyLjktMTMuNC03NC45LTQxLjItMTUxIDY2LjQtMTAuNiAxMjQuNyA2LjggMTMxLjkgOS4xLTkuNCA1OC45LTQzLjMgMTA5LjgtOTAuOCAxNDJ6Il0KICAgIH07CiAgICBmYUxpbmtlZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmtlZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwOGMiLCAiTTQxNiAzMkwzMS45IDMyQzE0LjMgMzIgMCA0Ni41IDAgNjQuM0wwIDQ0Ny43QzAgNDY1LjUgMTQuMyA0ODAgMzEuOSA0ODBMNDE2IDQ4MGMxNy42IDAgMzItMTQuNSAzMi0zMi4zbDAtMzgzLjRDNDQ4IDQ2LjUgNDMzLjYgMzIgNDE2IDMyek0xMzUuNCA0MTZsLTY2LjQgMCAwLTIxMy44IDY2LjUgMCAwIDIxMy44LS4xIDB6TTEwMi4yIDk2YTM4LjUgMzguNSAwIDEgMSAwIDc3IDM4LjUgMzguNSAwIDEgMSAwLTc3ek0zODQuMyA0MTZsLTY2LjQgMCAwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjJ6Il0KICAgIH07CiAgICBmYUNjUGF5cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLXBheXBhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWY0IiwgIk0xODYuMyAyNTguMmMwIDEyLjItOS43IDIxLjUtMjIgMjEuNS05LjIgMC0xNi01LjItMTYtMTUgMC0xMi4yIDkuNS0yMiAyMS43LTIyIDkuMyAwIDE2LjMgNS43IDE2LjMgMTUuNXpNODAuNSAyMDkuN2wtNC43IDBjLTEuNSAwLTMgMS0zLjIgMi43bC00LjMgMjYuNyA4LjItLjNjMTEgMCAxOS41LTEuNSAyMS41LTE0LjIgMi4zLTEzLjQtNi4yLTE0LjktMTcuNS0xNC45em0yODQgMGwtNC41IDBjLTEuOCAwLTMgMS0zLjIgMi43bC00LjIgMjYuNyA4LS4zYzEzIDAgMjItMyAyMi0xOC0uMS0xMC42LTkuNi0xMS4xLTE4LjEtMTEuMXpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI4LjMgMjE1LjRjMC0yMS0xNi4yLTI4LTM0LjctMjhsLTQwIDBjLTIuNSAwLTUgMi01LjIgNC43TDMyIDI5NC4yYy0uMyAyIDEuMiA0IDMuMiA0bDE5IDBjMi43IDAgNS4yLTIuOSA1LjUtNS43bDQuNS0yNi42YzEtNy4yIDEzLjItNC43IDE4LTQuNyAyOC42IDAgNDYuMS0xNyA0Ni4xLTQ1Ljh6bTg0LjIgOC44bC0xOSAwYy0zLjggMC00IDUuNS00LjIgOC4yLTUuOC04LjUtMTQuMi0xMC0yMy43LTEwLTI0LjUgMC00My4yIDIxLjUtNDMuMiA0NS4yIDAgMTkuNSAxMi4yIDMyLjIgMzEuNyAzMi4yIDkgMCAyMC4yLTQuOSAyNi41LTExLjktLjUgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNGwxNy4yIDBjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXpNMjUzIDMyMi4xbDYzLjctOTIuNmMuNS0uNSAuNS0xIC41LTEuNyAwLTEuNy0xLjUtMy41LTMuMi0zLjVsLTE5LjIgMGMtMS43IDAtMy41IDEtNC41IDIuNWwtMjYuNSAzOS0xMS0zNy41Yy0uOC0yLjItMy00LTUuNS00bC0xOC43IDBjLTEuNyAwLTMuMiAxLjgtMy4yIDMuNSAwIDEuMiAxOS41IDU2LjggMjEuMiA2Mi4xLTIuNyAzLjgtMjAuNSAyOC42LTIwLjUgMzEuNiAwIDEuOCAxLjUgMy4yIDMuMiAzLjJsMTkuMiAwYzEuOC0uMSAzLjUtMS4xIDQuNS0yLjZ6TTQxMi4zIDIxNS40YzAtMjEtMTYuMi0yOC0zNC43LTI4bC0zOS43IDBjLTIuNyAwLTUuMiAyLTUuNSA0LjdsLTE2LjIgMTAyYy0uMiAyIDEuMyA0IDMuMiA0bDIwLjUgMGMyIDAgMy41LTEuNSA0LTMuMmw0LjUtMjljMS03LjIgMTMuMi00LjcgMTgtNC43IDI4LjQgMCA0NS45LTE3IDQ1LjktNDUuOHptODQuMiA4LjhsLTE5IDBjLTMuOCAwLTQgNS41LTQuMyA4LjItNS41LTguNS0xNC0xMC0yMy43LTEwLTI0LjUgMC00My4yIDIxLjUtNDMuMiA0NS4yIDAgMTkuNSAxMi4yIDMyLjIgMzEuNyAzMi4yIDkuMyAwIDIwLjUtNC45IDI2LjUtMTEuOS0uMyAxLjUtMSA0LjctMSA2LjIgMCAyLjMgMSA0IDMuMiA0bDE3LjMgMGMyLjcgMCA1LTIuOSA1LjUtNS43bDEwLjItNjQuM2MuMy0xLjktMS4yLTMuOS0zLjItMy45ek01NDQgMTkwLjljMC0yLTEuNS0zLjUtMy4yLTMuNWwtMTguNSAwYy0xLjUgMC0zIDEuMi0zLjIgMi43bC0xNi4yIDEwNC0uMyAuNWMwIDEuOCAxLjUgMy41IDMuNSAzLjVsMTYuNSAwYzIuNSAwIDUtMi45IDUuMi01LjdsMTYuMi0xMDEuMiAwLS4zem0tOTAgNTEuOGMtMTIuMiAwLTIxLjcgOS43LTIxLjcgMjIgMCA5LjcgNyAxNSAxNi4yIDE1IDEyIDAgMjEuNy05LjIgMjEuNy0yMS41IC4xLTkuOC02LjktMTUuNS0xNi4yLTE1LjV6Il0KICAgIH07CiAgICBmYURobCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaGwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5MCIsICJNMjM4IDMwMS4ybDU4LjcgMCAyMi4zLTMwLjItNTguNyAwLTIyLjMgMzAuMnpNMCAyODIuOWwwIDYuNCA4MS44IDAgNC43LTYuNC04Ni41IDB6TTE3Mi45IDI3MWMtOC43IDAtNi0zLjYtNC42LTUuNSAyLjgtMy44IDcuNi0xMC40IDEwLjQtMTQuMXMyLjgtNS45LTIuOC01LjlsLTUxIDAtNDEuMSA1NS44IDEwMC4xIDBjMzMuMSAwIDUxLjUtMjIuNSA1Ny4yLTMwLjNsLTY4LjIgMHptMzE3LjUtNi45bDM5LjMtNTMuNC02Mi4yIDAtMzkuMyA1My40IDYyLjIgMHpNOTUuMyAyNzFsLTk1LjMgMCAwIDYuNCA5MC42IDAgNC43LTYuNHptMTExLTI2LjZjLTIuOCAzLjgtNy41IDEwLjQtMTAuMyAxNC4yLTEuNCAyLTQuMSA1LjUgNC42IDUuNWw0NS42IDBzNy4zLTEwIDEzLjUtMTguNGM4LjQtMTEuNCAuNy0zNS0yOS4yLTM1bC0xMTcuOSAwLTIwLjQgMjcuOCAxMTEuNCAwYzUuNiAwIDUuNSAyLjIgMi43IDUuOXpNMCAzMDEuMmw3My4xIDAgNC43LTYuNC03Ny44IDAgMCA2LjR6bTMyMyAwbDU4LjcgMCAyMi4zLTMwLjItNTguNyAwYy0uMSAwLTIyLjMgMzAuMi0yMi4zIDMwLjJ6bTIyMiAuMWw5NSAwIDAtNi40LTkwLjMgMC00LjcgNi40ek01NjcuMyAyNzFsLTQuNyA2LjQgNzcuNCAwIDAtNi40LTcyLjcgMHptLTEzLjUgMTguM2w4Ni4yIDAgMC02LjQtODEuNSAwLTQuNyA2LjR6TTM4OS42IDIxMC43bC0yMi41IDMwLjYtMjYuMiAwIDIyLjUtMzAuNi01OC43IDAtMzkuMyA1My40IDE0My42IDAgMzkuMy01My40LTU4LjcgMHpNNDIzLjEgMjcxcy00LjMgNS45LTYuNCA4LjdjLTcuNCAxMC0uOSAyMS42IDIzLjIgMjEuNmw5NC4zIDAgMjIuMy0zMC4zLTEzMy40IDB6Il0KICAgIH07CiAgICBmYVRleCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTdmZiIsICJNNjIwLjggOTUuNGMtMzAuOCAuNC00Mi4xIDE2LjYtNDcuNyAyNC41bC0uMSAuMS01NS43IDgwLjUgODIuOCAxMjEuMWM3LjUgMTAuNiAxMS4zIDEyLjUgMzUuNCAxMi41bDAgOS4xYy05LjEtLjctMjgtLjctMzcuNy0uNy0xMi40IDAtMzAuOCAwLTQyLjkgLjdsMC05LjFjMTMuMi0uOCAxNi42LTcuMyAxNi42LTEwLjIgMC0xLjEgMC0yLjMtMy02LjRsLTY1LjUtOTYuMy02MC4yIDg3LjljLTEuOSAyLjctMy44IDUuNC0zLjggMTAuMiAwIDYuMSAzLjQgMTMuNiAxNSAxNC43bDAgOS4xYy05LjQtLjctMjcuMS0uNy0zNy4yLS43bC0yLjggMC0xMS43IDgyLjYtMTk1LjkgMCAwLTkuMWMyNi43IDAgMzAuOSAwIDMwLjktMTYuOWwwLTIwMy4yYzAtMTYuOS00LjMtMTYuOS0zMC45LTE2LjlsMC0xMC4zIDE5LjggMGMtNC44LTYxLjEtMTAuOC03MS43LTY4LTcxLjhsLTIwLjcgMGMtNi44IDEuNS02LjggNi4xLTYuOCAxNC40bDAgMjA1YzAgMTMuNiAxLjEgMTcuOCAzMi40IDE3LjhsMTAuNSAwIDAgOS4xLS40IDBjLTE3LjktLjMtMzYuNy0uNy01NC45LS43cy0zNi45IC4zLTU0LjggLjdsLS42IDAgMC05LjEgMTAuNyAwYzMxLjcgMCAzMi44LTQuMSAzMi44LTE3LjhsMC0yMDVjMC04LjcgMC0xMy4yLTcuMi0xNC4zbC0yMC44IDBjLTU4LjQgMC02My43IDEwLjktNjguNiA3My4zbC02LjggMCA2LjMtODMuMyAyMTcuNSAwIDYuMSA4MS44IDE2NC4xIDAgOSA4My4zLTYuOCAwYy01LjMtNDkuOC0xMi4xLTczLTcwLjMtNzNsLTUxLjUgMGMtMTUgMC0xNS44IDEuOS0xNS44IDE0LjZsMCA5My4zIDM1LjUgMGMzNS41IDAgMzguOS0xMi44IDM4LjktNDRsNiAwIDAgOTcuOS02IDBjMC0zMS44LTMuNC00NC44LTM4LjktNDQuOGwtMzUuNSAwIDAgMTA1LjJjMCAxMyAuNyAxNC44IDE1LjggMTQuOGw1Mi4yIDBjNjEuMSAwIDY5LjktMjUuOCA3Ny40LTczLjYtNy43IDAtMTYuMyAuMi0yMi4yIC43bDAtOS4xYzcuMiAwIDMxLjctLjQgNDcuOC0yMy44bDY1LjUtOTUuNy03Mi43LTEwNi43Yy04LjMtMTEuNy0xNS4xLTEyLjUtMzUuOC0xMi41bDAtOS4xYzkuMSAuNyAyNy45IC43IDM3LjcgLjcgMTIuNCAwIDMwLjggMCA0Mi45LS43bDAgOS4xYy0xMi41IC40LTE2LjYgNi44LTE2LjYgMTAuMiAwIDEuMSAuNCAyLjMgMyA2LjRsNTUuNyA4MS42IDQ5LjctNzIuMWMyLjctMy43IDQuNS02LjggNC41LTExLjMgMC02LjEtMy0xMy42LTE1LTE0LjhsMC05LjFjOS40IC43IDI0LjggLjcgMzcuMiAuNyA5IDAgMjMuMyAwIDMyLS43bDAgOS4xeiJdCiAgICB9OwogICAgZmFTaG9waWZ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNob3BpZnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA1NyIsICJNMzg4LjUgMTA0LjFjLS4yLTEuMS0uNy0yLjEtMS41LTIuOHMtMS44LTEuMi0yLjktMS4yYy0yIDAtMzcuMi0uOC0zNy4yLS44cy0yMS42LTIwLjgtMjkuNi0yOC44bDAgNDMyLjcgMTI1LjctMzEuMnMtNTQtMzY1LjUtNTQuNC0zNjcuOXpNMjg4LjkgNzAuNWMtMS45LTYuMS00LjMtMTEuOS03LjItMTcuNi0xMC40LTIwLTI2LTMwLjktNDQuNC0zMC45LTEuMyAwLTIuNyAuMS00IC40LS40LS44LTEuMi0xLjItMS42LTItOC04LjgtMTguNC0xMi44LTMwLjgtMTIuNC0yNCAuOC00OCAxOC02Ny4yIDQ4LjgtMTMuNiAyMS42LTI0IDQ4LjgtMjYuOCA3MC4xLTI3LjYgOC40LTQ2LjggMTQuNC00Ny4yIDE0LjgtMTQgNC40LTE0LjQgNC44LTE2IDE4LTEuMiAxMC0zOCAyOTEuOC0zOCAyOTEuOGwzMDIuNiA1Mi41IDAtNDM4LjNjLTEuNSAuMS0yLjkgLjItNC40IC40IDAgMC01LjYgMS42LTE0LjggNC40ek0yMzMuNiA4Ny43Yy0xNiA0LjgtMzMuNiAxMC40LTUwLjggMTUuNiA0LjgtMTguOCAxNC40LTM3LjYgMjUuNi01MCA0LjQtNC40IDEwLjQtOS42IDE3LjItMTIuOCA2LjggMTQuNCA4LjQgMzQgOCA0Ny4yek0yMDAuOCAyNC40YzUtLjIgMTAgMS4xIDE0LjQgMy42LTYuNCAzLjItMTIuOCA4LjQtMTguOCAxNC40LTE1LjIgMTYuNC0yNi44IDQyLTMxLjYgNjYuNS0xNC40IDQuNC0yOC44IDguOC00MiAxMi44IDguOC0zOC40IDQxLjItOTYuNCA3OC05Ny4yek0xNTQuNCAyNDQuNmMxLjYgMjUuNiA2OS4yIDMxLjIgNzMuMiA5MS43IDIuOCA0Ny42LTI1LjIgODAuMS02NS42IDgyLjUtNDguOCAzLjItNzUuNi0yNS42LTc1LjYtMjUuNmwxMC40LTQ0czI2LjggMjAuNCA0OC40IDE4LjhjMTQtLjggMTkuMi0xMi40IDE4LjgtMjAuNC0yLTMzLjYtNTcuMi0zMS42LTYwLjgtODYuOS0zLjItNDYuNCAyNy4yLTkzLjMgOTQuNS05Ny43IDI2LTEuNiAzOS4yIDQuOCAzOS4yIDQuOGwtMTUuMiA1Ny42cy0xNy4yLTgtMzcuNi02LjRjLTI5LjYgMi0zMCAyMC44LTI5LjYgMjUuNnpNMjQ5LjYgODIuOWMwLTEyLTEuNi0yOS4yLTcuMi00My42IDE4LjQgMy42IDI3LjIgMjQgMzEuMiAzNi40LTcuMiAyLTE1LjIgNC40LTI0IDcuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlUmVkZGl0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1yZWRkaXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicmVkZGl0LXNxdWFyZSJdLCAiZjFhMiIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyek0zMDUuOSAxNjYuNGMyMC42IDAgMzcuMy0xNi43IDM3LjMtMzcuM3MtMTYuNy0zNy4zLTM3LjMtMzcuM2MtMTggMC0zMy4xIDEyLjgtMzYuNiAyOS44LTMwLjIgMy4yLTUzLjggMjguOC01My44IDU5LjlsMCAuMmMtMzIuOCAxLjQtNjIuOCAxMC43LTg2LjYgMjUuNS04LjgtNi44LTE5LjktMTAuOS0zMi0xMC45LTI4LjkgMC01Mi4zIDIzLjQtNTIuMyA1Mi4zIDAgMjEgMTIuMyAzOSAzMC4xIDQ3LjQgMS43IDYwLjcgNjcuOSAxMDkuNiAxNDkuMyAxMDkuNnMxNDcuNi00OC45IDE0OS4zLTEwOS43YzE3LjctOC40IDI5LjktMjYuNCAyOS45LTQ3LjMgMC0yOC45LTIzLjQtNTIuMy01Mi4zLTUyLjMtMTIgMC0yMyA0LTMxLjkgMTAuOC0yNC0xNC45LTU0LjMtMjQuMi04Ny41LTI1LjRsMC0uMWMwLTIyLjIgMTYuNS00MC43IDM3LjktNDMuNyAzLjkgMTYuNSAxOC43IDI4LjcgMzYuMyAyOC43bC4yLS4yek0xNTUgMjQ4LjFjMTQuNiAwIDI1LjggMTUuNCAyNSAzNC40cy0xMS44IDI1LjktMjYuNSAyNS45LTI3LjUtNy43LTI2LjYtMjYuNyAxMy41LTMzLjUgMjguMS0zMy41bDAtLjF6bTE2Ni40IDMzLjVjLjkgMTktMTIgMjYuNy0yNi42IDI2LjdzLTI1LjYtNi45LTI2LjUtMjUuOSAxMC4zLTM0LjQgMjUtMzQuNCAyNy4zIDE0LjYgMjguMSAzMy41bDAgLjF6bS00Mi4xIDQ5LjZjLTkgMjEuNS0zMC4zIDM2LjctNTUuMSAzNi43cy00Ni4xLTE1LjEtNTUuMS0zNi43Yy0xLjEtMi42IC43LTUuNCAzLjQtNS43IDE2LjEtMS42IDMzLjUtMi41IDUxLjctMi41czM1LjYgLjkgNTEuNyAyLjVjMi43IC4zIDQuNSAzLjEgMy40IDUuN3oiXQogICAgfTsKICAgIGZhUmVkZGl0U3F1YXJlID0gZmFTcXVhcmVSZWRkaXQ7CiAgICBmYUNyZWF0aXZlQ29tbW9uc05jID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlOCIsICJNMjU1LjYgOEMzOTUuNCA4IDUwNCAxMTUuOSA1MDQgMjU2IDUwNCA0MDMuMiAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS4xIDUwNCA4IDM5My4yIDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4ek02My44IDE4OS4xYy03LjQgMjAuNC0xMS4xIDQyLjctMTEuMSA2Ni45IDAgMTEwLjkgOTIuMSAyMDIuNCAyMDMuNyAyMDIuNCAxMjIuNCAwIDE3Ny4yLTEwMS44IDE3OC41LTEwNC4xbC05My40LTQxLjZjLTcuNyAzNy4xLTQxLjIgNTMtNjguMiA1NS40bDAgMzguMS0yOC44IDAgMC0zOC4yYy0yNy41LS4zLTUyLjYtMTAuMi03NS4zLTI5LjdsMzQuMS0zNC41YzMxLjcgMjkuNCA4Ni40IDMxLjggODYuNC0yLjIgMC02LjItMi4yLTExLjItNi42LTE1LjEtMTQuMi02LTEuOC0uMS0yMTkuMy05Ny40ek0yNTYuNCA1Mi4zQzIxOCA1Mi4zIDE0NCA2MSA4NS45IDE0NS4zbDk0LjggNDIuNWMxMC0zMS4zIDQwLjQtNDIuOSA2My44LTQ0LjNsMC0zOC4xIDI4LjggMCAwIDM4LjFjMjIuNyAxLjIgNDMuNCA4LjkgNjIgMjNMMzAzIDE5OS43Yy00Mi43LTI5LjktODMuNS04LTcwIDExLjEgNTMuNCAyNC4xIDQzLjggMTkuOCA5MyA0MS42bDEyNy4xIDU2LjdjNC4xLTE3LjQgNi4yLTM1LjEgNi4yLTUzLjEgMC01Ny0xOS44LTEwNS01OS4zLTE0My45LTM5LjMtMzkuOS04Ny4yLTU5LjgtMTQzLjYtNTkuOHoiXQogICAgfTsKICAgIGZhR2FsYWN0aWNSZXB1YmxpYyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnYWxhY3RpYy1yZXB1YmxpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTBjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAxIDAgNDk2IDI0OCAyNDggMCAxIDEgMC00OTZ6bTAgMTYuNWEyMzEuNSAyMzEuNSAwIDEgMCAwIDQ2Mi45IDIzMS41IDIzMS41IDAgMSAwIDAtNDYyLjl6bTI3LjYgMjEuOGwwIDI0LjZjMzAuMyA0LjUgNTkgMTYuMyA4My42IDM0LjVsMTcuNC0xNy40Yy0yOC43LTIyLjEtNjMuMy0zNi45LTEwMS00MS44em0tNTUuNCAuMWMtMzcuNiA0LjktNzIuMiAxOS44LTEwMC45IDQxLjlsMTcuMyAxNy40IC4xIDBjMjQuMS0xNy44IDUyLjYtMzAuMSA4My41LTM0LjdsMC0yNC41em0xMi4yIDUwLjJsMCA4Mi45Yy0xMCAyLTE5LjQgNS45LTI3LjcgMTEuNGwtNTguNi01OC42LTIxLjkgMjEuOSA1OC43IDU4LjdjLTUuNSA4LjItOS40IDE3LjYtMTEuNSAyNy42bC04Mi45IDAgMCAzMSA4Mi45IDBjMiAxMCA2IDE5LjMgMTEuNSAyNy41bC01OC43IDU4LjcgMjEuOSAyMS45IDU4LjYtNTguNmM4LjQgNS42IDE3LjggOS41IDI3LjcgMTEuNWwwIDgyLjkgMzEgMCAwLTgyLjljMTAtMiAxOS40LTYuMSAyNy42LTExLjVsNTguNyA1OC43IDIxLjktMjEuOS01OC43LTU4LjdjNS41LTguMiA5LjUtMTcuNSAxMS41LTI3LjVsODIuOSAwIDAtMzEtODIuOSAwYy0yLTEwLTYtMTkuNC0xMS41LTI3LjZsNTguNy01OC43LTIxLjktMjEuOS01OC43IDU4LjdjLTguMi01LjUtMTcuNi05LjUtMjcuNi0xMS41bDAtODIuOS0zMSAwem0xODMuMiAzMC43bC0xNy40IDE3LjRjMTguMyAyNC42IDMwLjIgNTMuNCAzNC43IDgzLjdsMjQuNiAwYy01LTM3LjctMTkuOC03Mi4zLTQxLjktMTAxem0tMzM1LjYgLjFjLTIyLjEgMjguNy0zNi45IDYzLjMtNDEuOCAxMDAuOWwyNC42IDBjNC42LTMxIDE2LjgtNTkuNCAzNC42LTgzLjVMODguMiAxMjcuNHpNNDYuMyAyODMuN2M0LjkgMzcuNiAxOS43IDcyLjIgNDEuOCAxMDAuOWwxNy40LTE3LjRDODcuNyAzNDMuMSA3NS42IDMxNC42IDcxIDI4My43bC0yNC42IDAgMCAwem0zOTQuNyAwYy00LjYgMzEtMTYuOCA1OS41LTM0LjcgODMuNmwxNy40IDE3LjRjMjIuMS0yOC43IDM3LTYzLjMgNDEuOS0xMDFsLTI0LjYgMHpNMTQ0LjcgNDA2LjRsLTE3LjQgMTcuNGMyOC43IDIyLjEgNjMuMyAzNyAxMDEgNDEuOWwwLTI0LjZjLTMxLTQuNi01OS41LTE2LjgtODMuNi0zNC42em0yMjIuNSAwYy0yNC4xIDE3LjgtNTIuNiAzMC4xLTgzLjYgMzQuN2wwIDI0LjZjMzcuNy00LjkgNzIuMi0xOS44IDEwMS00MS44bC0xNy4zLTE3LjQtLjEgMHoiXQogICAgfTsKICAgIGZhRmFjZWJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MmUzXSwgImYwOWEiLCAiTTUxMiAyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3NiA4Mi43IDQ3Ni44IDE5NC4yIDUwNC41bDAtMTcwLjMtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE3NS45QzQxMy44IDQ5NC44IDUxMiAzODYuOSA1MTIgMjU2eiJdCiAgICB9OwogICAgZmFHaXRsYWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0bGFiIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOTYiLCAiTTUwNCAyMDQuNmwtLjctMS44LTY5LjctMTgxLjhjLTEuNC0zLjYtMy45LTYuNi03LjItOC42LTIuNC0xLjYtNS4xLTIuNS04LTIuOHMtNS43IC4xLTguNCAxLjEtNS4xIDIuNy03LjEgNC44Yy0xLjkgMi4xLTMuMyA0LjctNC4xIDcuNGwtNDcgMTQ0LTE5MC41IDAtNDcuMS0xNDRjLS44LTIuOC0yLjItNS4zLTQuMS03LjQtMi0yLjEtNC40LTMuNy03LjEtNC44LTIuNi0xLTUuNS0xLjQtOC40LTEuMXMtNS42IDEuMi04IDIuOGMtMy4yIDItNS44IDUuMS03LjIgOC42TDkuOCAyMDIuOCA5IDIwNC42Yy0xMCAyNi4yLTExLjMgNTUtMy41IDgyIDcuNyAyNi45IDI0IDUwLjcgNDYuNCA2Ny42bC4zIC4yIC42IC40IDEwNiA3OS41YzM4LjUgMjkuMSA2Ni43IDUwLjMgODQuNiA2My45IDMuNyAxLjkgOC4zIDQuMyAxMyA0LjNzOS4zLTIuNCAxMy00LjNjMTcuOS0xMy41IDQ2LjEtMzQuOSA4NC42LTYzLjlsMTA2LjctNzkuOSAuMy0uM2MyMi40LTE2LjkgMzguNy00MC42IDQ1LjYtNjcuNSA4LjYtMjcgNy40LTU1LjgtMi42LTgyeiJdCiAgICB9OwogICAgZmFRcSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxcSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWQ2IiwgIk00MzQuMSA0MjAuNGMtMTEuNSAxLjQtNDQuOS01Mi43LTQ0LjktNTIuNyAwIDMxLjMtMTYuMSA3Mi4yLTUxIDEwMS44IDE2LjggNS4yIDU0LjggMTkuMiA0NS44IDM0LjQtNy4zIDEyLjMtMTI1LjUgNy45LTE1OS42IDQtMzQuMSAzLjgtMTUyLjMgOC4zLTE1OS42LTQtOS0xNS4yIDI4LjktMjkuMiA0NS44LTM0LjQtMzQuOS0yOS41LTUxLjEtNzAuNC01MS4xLTEwMS44IDAgMC0zMy4zIDU0LjEtNDQuOSA1Mi43LTUuNC0uNi0xMi40LTI5LjYgOS4zLTk5LjcgMTAuMy0zMyAyMi02MC41IDQwLjEtMTA1LjgtMy4xLTExNi45IDQ1LjItMjE1IDE2MC4zLTIxNSAxMTMuNyAwIDE2My4yIDk2LjEgMTYwLjMgMjE1IDE4LjEgNDUuMiAyOS45IDcyLjkgNDAuMSAxMDUuOCAyMS44IDcwLjEgMTQuNyA5OS4xIDkuMyA5OS43eiJdCiAgICB9OwogICAgZmFTdHJpcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyaXBlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MjkiLCAiTTE2NSAxNDQuN2wtNDMuMyA5LjItLjIgMTQyLjRjMCAyNi4zIDE5LjggNDMuMyA0Ni4xIDQzLjMgMTQuNiAwIDI1LjMtMi43IDMxLjItNS45bDAtMzMuOGMtNS43IDIuMy0zMy43IDEwLjUtMzMuNy0xNS43bDAtNjMuMiAzMy43IDAgMC0zNy44LTMzLjcgMC0uMS0zOC41em04OS4xIDUxLjZsLTIuNy0xMy4xLTM4LjQgMCAwIDE1My4yIDQ0LjMgMCAwLTEwMy4xYzEwLjUtMTMuOCAyOC4yLTExLjEgMzMuOS05LjNsMC00MC44Yy02LTIuMS0yNi43LTYtMzcuMSAxMy4xek0zNDYuNCAxMjRsLTQ0LjYgOS41IDAgMzYuMiA0NC42LTkuNSAwLTM2LjJ6TTQ0LjkgMjI4LjNjMC02LjkgNS44LTkuNiAxNS4xLTkuNyAxMy41IDAgMzAuNyA0LjEgNDQuMiAxMS40bDAtNDEuOGMtMTQuNy01LjgtMjkuNC04LjEtNDQuMS04LjEtMzYgMC02MCAxOC44LTYwIDUwLjIgMCA0OS4yIDY3LjUgNDEuMiA2Ny41IDYyLjQgMCA4LjItNy4xIDEwLjktMTcgMTAuOS0xNC43IDAtMzMuNy02LjEtNDguNi0xNC4ybDAgNDBjMTYuNSA3LjEgMzMuMiAxMC4xIDQ4LjUgMTAuMSAzNi45IDAgNjIuMy0xNS44IDYyLjMtNDcuOCAwLTUyLjktNjcuOS00My40LTY3LjktNjMuNHpNNjQwIDI2MS42YzAtNDUuNS0yMi04MS40LTY0LjItODEuNHMtNjcuOSAzNS45LTY3LjkgODEuMWMwIDUzLjUgMzAuMyA3OC4yIDczLjUgNzguMiAyMS4yIDAgMzcuMS00LjggNDkuMi0xMS41bDAtMzMuNGMtMTIuMSA2LjEtMjYgOS44LTQzLjYgOS44LTE3LjMgMC0zMi41LTYuMS0zNC41LTI2LjlsODYuOSAwYy4yLTIuMyAuNi0xMS42IC42LTE1Ljl6bS04Ny45LTE2LjhjMC0yMCAxMi4zLTI4LjQgMjMuNC0yOC40IDEwLjkgMCAyMi41IDguNCAyMi41IDI4LjRsLTQ1LjkgMHpNNDM5LjIgMTgwLjJjLTE3LjQgMC0yOC42IDguMi0zNC44IDEzLjlsLTIuMy0xMS0zOS4xIDAgMCAyMDQuOCA0NC40LTkuNCAuMS01MC4yYzYuNCA0LjcgMTUuOSAxMS4yIDMxLjQgMTEuMiAzMS44IDAgNjAuOC0yMy4yIDYwLjgtNzkuNiAuMS01MS42LTI5LjMtNzkuNy02MC41LTc5Ljd6TTQyOC42IDMwMi43Yy0xMC40IDAtMTYuNi0zLjgtMjAuOS04LjRsLS4zLTY2YzQuNi01LjEgMTEtOC44IDIxLjItOC44IDE2LjIgMCAyNy40IDE4LjIgMjcuNCA0MS40IC4xIDIzLjktMTAuOSA0MS44LTI3LjQgNDEuOHpNMzAxLjkgMzM2LjRsNDQuNiAwIDAtMTUzLjItNDQuNiAwIDAgMTUzLjJ6Il0KICAgIH07CiAgICBmYURhaWx5bW90aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRhaWx5bW90aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNTIiLCAiTTI5OC45IDI2N2MtNy40LTQuMi0xNS44LTYuMy0yNC40LTYuMi0xMy4yIDAtMjQuNCA0LjQtMzMuNCAxMy4zcy0xMy42IDIwLTEzLjYgMzMuNGMwIDE0LjEgNC40IDI1LjYgMTMuMyAzNC42czIwIDEzLjQgMzMuNCAxMy40YzEzLjcgMCAyNS00LjYgMzQuMS0xMy44UzMyMiAzMjEuMSAzMjIgMzA3LjVjMC04LjItMi4xLTE2LjMtNi4xLTIzLjUtNC03LjEtOS44LTEzLTE3LTE3ek0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zNzQuNyA0MDUuM2wtNTMuMSAwIDAtMjMuOS0uNyAwYy0xMC41IDE3LjUtMjkuMSAyNi4yLTU1LjggMjYuMi0xOC40IDAtMzQuNy00LjQtNDguOS0xMy4xLTE0LjEtOC42LTI1LjUtMjEtMzIuOS0zNS44LTcuNy0xNS4xLTExLjYtMzIuMS0xMS42LTUwLjkgMC0xOC40IDMuOS0zNS4xIDExLjgtNTAuMiA3LjUtMTQuNyAxOC45LTI3LjEgMzIuOS0zNS44IDE0LjEtOC43IDMwLTEzLjEgNDcuNy0xMy4xIDEwLjItLjEgMjAuMiAxLjYgMjkuNyA1LjIgOC45IDMuNSAxNy4yIDkuMSAyNSAxN2wwLTc3LjkgNTUuOC0xMi4xIDAgMjY0LjR6Il0KICAgIH07CiAgICBmYVN0ZWFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0ZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjYiLCAiTTUwNCAyNTZjMCAxMzctMTExLjIgMjQ4LTI0OC40IDI0OC0xMTMuOCAwLTIwOS42LTc2LjMtMjM5LTE4MC40bDk1LjIgMzkuM2M2LjQgMzIuMSAzNC45IDU2LjQgNjguOSA1Ni40IDM5LjIgMCA3MS45LTMyLjQgNzAuMi03My41bDg0LjUtNjAuMmM1Mi4xIDEuMyA5NS44LTQwLjkgOTUuOC05My41IDAtNTEuNi00Mi05My41LTkzLjctOTMuNXMtOTMuNyA0Mi05My43IDkzLjVsMCAxLjItNTkuMiA4NS43Yy0xNS41LS45LTMwLjcgMy40LTQzLjUgMTIuMUw4IDIzNi4xQzE4LjIgMTA4LjQgMTI1LjEgOCAyNTUuNiA4IDM5Mi44IDggNTA0IDExOSA1MDQgMjU2ek0xNjMuNyAzODQuM2wtMzAuNS0xMi42YzUuNiAxMS42IDE1LjMgMjAuOCAyNy4yIDI1LjggMjYuOSAxMS4yIDU3LjgtMS42IDY5LTI4LjQgNS40LTEzIDUuNS0yNy4zIC4xLTQwLjNTMjE0IDMwNS42IDIwMSAzMDAuMmMtMTIuOS01LjQtMjYuNy01LjItMzguOS0uNmwzMS41IDEzYzE5LjggOC4yIDI5LjIgMzAuOSAyMC45IDUwLjctOC4zIDE5LjktMzEgMjkuMi01MC44IDIxek0zMzcuNSAxMjkuOGE2Mi4zIDYyLjMgMCAxIDEgMCAxMjQuNiA2Mi4zIDYyLjMgMCAxIDEgMC0xMjQuNnptLjEgMTA5YTQ2LjggNDYuOCAwIDEgMCAwLTkzLjYgNDYuOCA0Ni44IDAgMSAwIDAgOTMuNnoiXQogICAgfTsKICAgIGZhU25hcGNoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic25hcGNoYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEyNCwgInNuYXBjaGF0LWdob3N0Il0sICJmMmFiIiwgIk00OTcuMSAzNjYuNmMtMy40LTkuMi05LjgtMTQuMS0xNy4xLTE4LjItMS40LS44LTIuNi0xLjUtMy43LTEuOS0yLjItMS4xLTQuNC0yLjItNi42LTMuNC0yMi44LTEyLjEtNDAuNi0yNy4zLTUzLTQ1LjQtMy41LTUuMS02LjYtMTAuNS05LjEtMTYuMS0xLjEtMy0xLTQuNy0uMi02LjMgLjgtMS4yIDEuNy0yLjIgMi45LTMgMy45LTIuNiA4LTUuMiAxMC43LTcgNC45LTMuMiA4LjgtNS43IDExLjItNy40IDkuNC02LjUgMTUuOS0xMy41IDIwLTIxLjMgMi45LTUuNCA0LjUtMTEuMyA0LjktMTcuNHMtLjYtMTIuMi0yLjgtMTcuOGMtNi4yLTE2LjMtMjEuNi0yNi40LTQwLjMtMjYuNC0zLjkgMC03LjkgLjQtMTEuNyAxLjItMSAuMi0yLjEgLjUtMy4xIC43IC4yLTExLjItLjEtMjIuOS0xLjEtMzQuNS0zLjUtNDAuOC0xNy44LTYyLjEtMzIuNy03OS4yLTkuNS0xMC43LTIwLjctMTkuNy0zMy4yLTI2LjctMjIuNi0xMi45LTQ4LjItMTkuNC03Ni4xLTE5LjRzLTUzLjQgNi41LTc2IDE5LjRjLTEyLjUgNy0yMy43IDE2LjEtMzMuMyAyNi44LTE0LjkgMTctMjkuMiAzOC40LTMyLjcgNzkuMi0xIDExLjYtMS4yIDIzLjQtMS4xIDM0LjUtMS0uMy0yLS41LTMuMS0uNy0zLjktLjgtNy44LTEuMi0xMS43LTEuMi0xOC43IDAtMzQuMSAxMC4xLTQwLjMgMjYuNC0yLjIgNS43LTMuMiAxMS44LTIuOCAxNy44czIgMTIgNC45IDE3LjRjNC4xIDcuOCAxMC43IDE0LjcgMjAgMjEuMyAyLjUgMS43IDYuNCA0LjIgMTEuMiA3LjQgMi42IDEuNyA2LjUgNC4yIDEwLjMgNi43IDEuMyAuOSAyLjQgMiAzLjMgMy4zIC44IDEuNiAuOCAzLjQtLjQgNi42LTIuNSA1LjUtNS41IDEwLjgtOC45IDE1LjgtMTIuMSAxNy43LTI5LjQgMzIuNi01MS40IDQ0LjYtMTEuNyA2LjItMjMuOSAxMC4zLTI5IDI0LjMtMy45IDEwLjUtMS4zIDIyLjUgOC41IDMyLjYgMy42IDMuOCA3LjggNi45IDEyLjQgOS40IDkuNiA1LjMgMTkuOCA5LjMgMzAuMyAxMi4xIDIuMiAuNiA0LjMgMS41IDYuMSAyLjcgMy42IDMuMSAzLjEgNy45IDcuOCAxNC44IDIuNCAzLjYgNS40IDYuNyA5IDkuMSAxMCA2LjkgMjEuMyA3LjQgMzMuMiA3LjggMTAuOCAuNCAyMyAuOSAzNi45IDUuNSA1LjggMS45IDExLjggNS42IDE4LjcgOS45IDE2LjcgMTAuMyAzOS42IDI0LjMgNzcuOCAyNC4zczYxLjMtMTQuMSA3OC4xLTI0LjRjNi45LTQuMiAxMi45LTcuOSAxOC41LTkuOCAxMy45LTQuNiAyNi4yLTUuMSAzNi45LTUuNSAxMS45LS41IDIzLjItLjkgMzMuMi03LjggNC4yLTIuOSA3LjctNi43IDEwLjItMTEuMiAzLjQtNS44IDMuNC05LjkgNi42LTEyLjggMS44LTEuMiAzLjctMi4xIDUuOC0yLjYgMTAuNy0yLjggMjEtNi45IDMwLjgtMTIuMiA0LjktMi42IDkuMy02LjEgMTMtMTAuMmwuMS0uMmM5LjItOS45IDExLjUtMjEuNSA3LjgtMzEuOHptLTM0IDE4LjNjLTIwLjcgMTEuNS0zNC41IDEwLjItNDUuMyAxNy4xLTkuMSA1LjktMy43IDE4LjUtMTAuMyAyMy4xLTguMSA1LjYtMzIuMi0uNC02My4yIDkuOS0yNS42IDguNS00MiAzMi44LTg4IDMyLjhzLTYyLTI0LjMtODguMS0zMi45Yy0zMS0xMC4zLTU1LjEtNC4yLTYzLjItOS45LTYuNi00LjYtMS4yLTE3LjItMTAuMy0yMy4xLTEwLjctNi45LTI0LjUtNS43LTQ1LjMtMTcuMS0xMy4yLTcuMy01LjctMTEuOC0xLjMtMTMuOSA3NS4xLTM2LjQgODcuMS05Mi42IDg3LjctOTYuNyAuNi01IDEuNC05LTQuMi0xNC4xLTUuNC01LTI5LjItMTkuNy0zNS44LTI0LjMtMTAuOS03LjYtMTUuNy0xNS4zLTEyLjItMjQuNiAyLjUtNi41IDguNS04LjkgMTQuOS04LjkgMiAwIDQgLjIgNiAuNyAxMiAyLjYgMjMuNyA4LjYgMzAuNCAxMC4yIC44IC4yIDEuNiAuMyAyLjUgLjMgMy42IDAgNC45LTEuOCA0LjYtNS45LS44LTEzLjEtMi42LTM4LjctLjYtNjIuNiAyLjgtMzIuOSAxMy40LTQ5LjIgMjYtNjMuNiA2LjEtNi45IDM0LjUtMzcgODguOS0zN1MzMzkgNzQuMiAzNDUgODEuMWMxMi42IDE0LjQgMjMuMiAzMC43IDI2IDYzLjYgMi4xIDIzLjkgLjMgNDkuNS0uNiA2Mi42LS4zIDQuMyAxIDUuOSA0LjYgNS45IC44IDAgMS43LS4xIDIuNS0uMyA2LjctMS42IDE4LjQtNy42IDMwLjQtMTAuMiAyLS40IDQtLjcgNi0uNyA2LjQgMCAxMi40IDIuNSAxNC45IDguOSAzLjUgOS40LTEuMiAxNy0xMi4yIDI0LjYtNi42IDQuNi0zMC40IDE5LjMtMzUuOCAyNC4zLTUuNiA1LjEtNC44IDkuMS00LjIgMTQuMiAuNSA0LjIgMTIuNSA2MC40IDg3LjcgOTYuNyA0LjQgMi4yIDExLjkgNi43LTEuMyAxNC4xeiJdCiAgICB9OwogICAgZmFTbmFwY2hhdEdob3N0ID0gZmFTbmFwY2hhdDsKICAgIGZhR2FsYWN0aWNTZW5hdGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2FsYWN0aWMtc2VuYXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MGQiLCAiTTI0OS45IDMzLjVsMCAyNi4xYy0xMy42IDIwLjYtMjMuOSAxMDguNi0yNC41IDIxNS4zIDExLjctMTUuNiAxOS4xLTMzLjMgMTkuMS00OC4ybDAtMTYuOWMwLTUuMyAuOC0xMC41IDIuMi0xNS42IC42LTIuMSAxLjQtNC4xIDIuNi01LjhzMy40LTMuOCA2LjctMy44IDUuNCAyLjEgNi43IDMuOGMxLjIgMS44IDIgMy43IDIuNiA1LjggMS40IDUuMSAyLjIgMTAuMyAyLjIgMTUuNmwwIDE2LjljMCAxNC45IDcuNCAzMi42IDE5LjEgNDguMi0uNi0xMDYuOC0xMC45LTE5NC43LTI0LjUtMjE1LjNsMC0yNi4xLTEyLjMgMHpNMjIzLjUgMTgxLjNjLTkuNSAyLjEtMTguNyA1LjItMjcuNSA5LjEgOC45IDE2LjEgOS44IDMyLjYgMS43IDM3LjMtOCA0LjYtMjEuOC00LjItMzEuNC0xOS44LTExLjYgOC44LTIxLjkgMTkuMy0zMC42IDMxLjEgMTQuNyA5LjYgMjIuOSAyMi45IDE4LjMgMzAuNy00LjUgNy43LTIwIDcuMS0zNS41LTEtNS44IDEzLjItOS43IDI3LjUtMTEuNiA0Mi40IDkuNyAuMiAxOC43IDIuNCAyNi4yIDYgMTcuOC0uMyAzMi44LTIgNDAuNS00LjIgNS42LTI2LjQgMjMtNDguMiA0Ni4zLTU5LjUgLjctMjUuNiAxLjktNDkuNyAzLjUtNzIuMXptNjUgMGMxLjYgMjIuNCAyLjcgNDYuNSAzLjUgNzIuMSAyMy4zIDExLjMgNDAuOCAzMy4yIDQ2LjMgNTkuNSA3LjcgMi4zIDIyLjcgMy45IDQwLjUgNC4yIDcuNS0zLjcgMTYuNS01LjggMjYuMi02LTEuOS0xNC45LTUuOS0yOS4yLTExLjctNDIuNC0xNS40IDguMS0zMC45IDguNy0zNS41IDEtNC42LTcuNyAzLjYtMjEuMSAxOC4zLTMwLjctOC43LTExLjgtMTktMjIuMy0zMC42LTMxLjEtOS41IDE1LjYtMjMuNCAyNC40LTMxLjQgMTkuOC04LjEtNC42LTcuMi0yMS4yIDEuNy0zNy4zLTguOC0zLjktMTgtNy0yNy40LTkuMXpNMjU2IDE4OS45Yy0zLjIgMC01LjkgOC44LTYuMSAxOS45bDAgMCAwIDE2LjljMCA0MS40LTQ5IDk1LTkzLjUgOTUtNTIgMC0xMjIuOC0xLjQtMTU2LjQgMjkuMmwwIDIuNWM5LjQgMTcuMSAyMC42IDMzLjIgMzMuMiA0OCAxMi41LTIxLjEgNTEuNi00MSAxMDgtNDEuNCA0NS43IDEgNzkgMjAuMyA5MC44IDQwLjkgMCAwIDAgMCAwIC4xIDcuNyAyLjEgMTUuOCAzLjIgMjQgMy4yIDguMiAwIDE2LjQtMS4xIDI0LTMuMiAwIDAgMCAwIDAtLjEgMTEuNy0yMC41IDQ1LjEtMzkuOCA5MC44LTQwLjkgNTYuNCAuNCA5NS41IDIwLjMgMTA4IDQxLjQgMTIuNi0xNC44IDIzLjgtMzAuOSAzMy4yLTQ4bDAtMi41Yy0zMy42LTMwLjYtMTA0LjQtMjkuMi0xNTYuNC0yOS4yLTQ0LjUgMC05My41LTUzLjYtOTMuNS05NWwwLTE2LjktLjEgMGMtLjItMTEuMS0yLjktMTkuOS02LjEtMTkuOXptMCAxNzcuOWE0MC42IDQwLjYgMCAxIDEgMC04MS4zIDQwLjYgNDAuNiAwIDEgMSAwIDgxLjN6bTAtNzMuNmEzMyAzMyAwIDEgMCAwIDY1LjkgMzMgMzMgMCAxIDAgMC02NS45em0wIDU5LjhhMjYuOCAyNi44IDAgMSAxIDAtNTMuNiAyNi44IDI2LjggMCAxIDEgMCA1My42em0tMTE0LjggMTNjLTEwLjIgLjEtMjEuNiAuNC0zMC41IDEuNyAuNCA0LjQgMS41IDE4LjYgNy4xIDI5LjggOS4xLTIuNiAxOC40LTMuOSAyNy42LTMuOSA0MS4zIC45IDcxLjUgMzQuNCA3OC4zIDc0LjVsLjEgNC43YzEwLjQgMS45IDIxLjIgMi45IDMyLjIgMi45IDExIDAgMjEuOC0xIDMyLjItMi45bC4xLTQuN2M2LjgtNDAuMSAzNy03My41IDc4LjMtNzQuNSA5LjMgMCAxOC41IDEuMyAyNy42IDMuOSA1LjYtMTEuMSA2LjctMjUuMyA3LjEtMjkuOC04LjktMS4zLTIwLjMtMS42LTMwLjUtMS43LTE4LjggLjQtMzUuMiA0LjItNDguNiA5LjctMTIuNSAxNi0yOS4yIDMwLTQ5LjYgMzMuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjEgMC0uMiAuMS01LjIgMS4xLTEwLjYgMS42LTE2LjIgMS42LTUuNSAwLTEwLjktLjUtMTYuMi0xLjYtLjEgMC0uMSAwLS4yLS4xLS4xIDAtLjIgMC0uMyAwLTIwLjQtMy0zNy0xNy00OS42LTMzLjEtMTMuNC01LjUtMjkuOS05LjItNDguNi05Ljd6Il0KICAgIH07CiAgICBmYVBob2VuaXhGcmFtZXdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhvZW5peC1mcmFtZXdvcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjNkYyIsICJNMjEyLjkgMzQ0LjNjMy44LS4xIDIyLjgtMS40IDI1LjYtMi4yLTIuNC0yLjYtNDMuNi0xLTY4LTQ5LjYtNC4zLTguNi03LjUtMTcuNi02LjQtMjcuNiAyLjktMjUuNSAzMi45LTMwIDUyLTE4LjUgMzYgMjEuNiA2My4zIDkxLjMgMTEzLjcgOTcuNSAzNyA0LjUgODQuNi0xNyAxMDguMi00NS40LS42LS4xLS44LS4yLTEtLjEtLjQgLjEtLjggLjItMS4xIC4zLTMzLjMgMTIuMS05NC4zIDkuNy0xMzQuNy0xNC44LTM3LjYtMjIuOC01My4xLTU4LjctNTEuOC03NC42IDEuOC0yMS4zIDIyLjktMjMuMiAzNS45LTE5LjYgMTQuNCAzLjkgMjQuNCAxNy42IDM4LjkgMjcuNCAxNS42IDEwLjQgMzIuOSAxMy43IDUxLjMgMTAuMyAxNC45LTIuNyAzNC40LTEyLjMgMzYuNS0xNC41LTEuMS0uMS0xLjgtLjEtMi41LS4yLTYuMi0uNi0xMi40LS44LTE4LjUtMS43LTExMS4yLTE2LjUtMTI4LjktMTYzLjYtMjUyLjUtMTczLjEtNDQuMy0zLjQtOTkuNCA4LjEtMTM2LjMgMzUtLjggLjYtMS41IDEuMi0yLjIgMS44IC4xIC4yIC4xIC4zIC4yIC41IC44IDAgMS42LS4xIDIuNC0uMiA2LjMtMSAxMi41LS44IDE4LjcgLjMgMjMuOCA0LjMgNDcuNyAyMy4xIDU1LjkgNzYuNSA1LjMgMzQuMy0uNyA1MC44IDggODYuMSAxOSA3Ny4xIDkxIDEwNy42IDEyNy43IDEwNi40ek03NS4zIDY0LjljLS45LTEtLjktMS4yLTEuMy0yIDEyLjEtMi42IDI0LjItNC4xIDM2LjYtNC44LTEuMSAxNC43LTIyLjIgMjEuMy0zNS4zIDYuOHpNMjcyLjIgNDE1LjRjLTQyLjggMS4yLTkyLTI2LjctMTIzLjUtNjEuNC00LjYtNS0xNi44LTIwLjItMTguNi0yMy40bC40LS40YzYuNiA0LjEgMjUuNyAxOC42IDU0LjggMjcgMjQuMiA3IDQ4LjEgNi4zIDcxLjYtMy4zIDIyLjctOS4zIDQxLS41IDQzLjEgMi45LTE4LjUgMy44LTIwLjEgNC40LTI0IDcuOS01LjEgNC40LTQuNiAxMS43IDcgMTcuMiAyNi4yIDEyLjQgNjMtMi44IDk3LjIgMjUuNCAyLjQgMiA4LjEgNy44IDEwLjEgMTAuNy0uMSAuMi0uMyAuMy0uNCAuNS00LjgtMS41LTE2LjQtNy41LTQwLjItOS4zLTI0LjctMi00Ni4zIDUuMy03Ny41IDYuMnpNNDQ3IDE2My40YzE2LjQtNS4yIDQxLjMtMTMuNCA2Ni41LTMuMyAxNi4xIDYuNSAyNi4yIDE4LjcgMzIuMSAzNC42IDMuNSA5LjQgNS4xIDE5LjcgNS4xIDI4LjctLjIgMC0uNCAwLS42IC4xLS4yLS40LS40LS45LS41LTEuMy01LTIyLTI5LjktNDMuOC02Ny42LTI5LjktNTAuMiAxOC42LTEzMC40IDkuNy0xNzYuOS00OC0uNy0uOS0yLjQtMS43LTEuMy0zLjIgLjEtLjIgMi4xIC42IDMgMS4zIDE4LjEgMTMuNCAzOC4zIDIxLjkgNjAuMyAyNi4yIDMwLjUgNi4xIDU0LjYgMi45IDc5LjktNS4yek01NDkuNyAyODAuOWMtMzIuNCAuMi0zMy44IDUwLjEtMTAzLjYgNjQuNC0xOC4yIDMuNy0zOC43IDQuNi00NC45IDQuMmwwLS40YzIuOC0xLjUgMTQuNy0yLjYgMjkuNy0xNi42IDcuOS03LjMgMTUuMy0xNS4xIDIyLjgtMjIuOSAxOS41LTIwLjIgNDEuNC00Mi4yIDgxLjktMzkgMjMuMSAxLjggMjkuMyA4LjIgMzYuMSAxMi43IC4zIC4yIC40IC41IC43IC45LS41IDAtLjcgLjEtLjkgMC03LTIuNy0xNC4zLTMuMy0yMS44LTMuM3ptLTEyLjMtMjQuMWMtLjEgLjItLjEgLjQtLjIgLjYtMjguOS00LjQtNDgtNy45LTY4LjUgNC0xNyA5LjktMzEuNCAyMC41LTYyIDI0LjQtMjcuMSAzLjQtNDUuMSAyLjQtNjYuMS04LS4zLS4yLS42LS40LTEtLjYgMC0uMiAuMS0uMyAuMS0uNSAyNC45IDMuOCAzNi40IDUuMSA1NS41LTUuOCAyMi4zLTEyLjkgNDAuMS0yNi42IDcxLjMtMzEgMjkuNi00LjEgNTEuMyAyLjUgNzAuOSAxNi45ek0yNjguNiA5Ny4zYy0uNi0uNi0xLjEtMS4yLTIuMS0yLjMgNy42IDAgMjkuNy0xLjIgNTMuNCA4LjQgMTkuNyA4IDMyLjIgMjEgNTAuMiAzMi45IDExLjEgNy4zIDIzLjQgOS4zIDM2LjQgOC4xIDQuMy0uNCA4LjUtMS4yIDEyLjgtMS43IC40LS4xIC45IDAgMS41IC4zLS42IC40LTEuMiAuOS0xLjggMS4yLTguMSA0LTE2LjcgNi4zLTI1LjYgNy4xLTI2LjEgMi42LTUwLjMtMy43LTczLjQtMTUuNC0xOS4zLTkuOS0zNi40LTIyLjktNTEuNC0zOC42ek02NDAgMzM1LjdjLTMuNSAzLjEtMjIuNyAxMS42LTQyLjcgNS4zLTEyLjMtMy45LTE5LjUtMTQuOS0zMS42LTI0LjEtMTAtNy42LTIwLjktNy45LTI4LjEtOC40IC42LS44IC45LTEuMiAxLjItMS40IDE0LjgtOS4yIDMwLjUtMTIuMiA0Ny4zLTYuNSAxMi41IDQuMiAxOS4yIDEzLjUgMzAuNCAyNC4yIDEwLjggMTAuNCAyMSA5LjkgMjMuMSAxMC41IC4xLS4xIC4yIDAgLjQgLjR6bS0yMTIuNSAxMzdjMi4yIDEuMiAxLjYgMS41IDEuNSAyLTE4LjUtMS40LTMzLjktNy42LTQ2LjgtMjIuMi0yMS44LTI0LjctNDEuNy0yNy45LTQ4LjYtMjkuNyAuNS0uMiAuOC0uNCAxLjEtLjQgMTMuMSAuMSAyNi4xIC43IDM4LjkgMy45IDI1LjMgNi40IDM1IDI1LjQgNDEuNiAzNS4zIDMuMiA0LjggNy4zIDguMyAxMi4zIDExLjF6Il0KICAgIH07CiAgICBmYUdpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFkMyIsICJNMjE2LjMgMTU4LjRsLTc5LjMgMGMtNDAtMTAuNS0xMzAuNS03LjgtMTMwLjUgNzQuOCAwIDMwLjEgMTUgNTEuMiAzNSA2MS0yNS4xIDIzLTM3IDMzLjgtMzcgNDkuMiAwIDExIDQuNSAyMS4xIDE3LjkgMjYuOC0xNC4zIDEzLjQtMjIuNCAyMy4xLTIyLjQgNDEuNCAwIDMyLjEgMjggNTAuOCAxMDEuNiA1MC44IDcwLjggMCAxMTEuOC0yNi40IDExMS44LTczLjIgMC01OC43LTQ1LjItNTYuNS0xNTEuNi02M2wxMy40LTIxLjZjMjcuMyA3LjYgMTE4LjcgMTAgMTE4LjctNjcuOSAwLTE4LjctNy43LTMxLjctMTUtNDEuMWwzNy40LTIuOCAwLTM0LjV6TTE1Mi45IDQwMC4zYzAgMzIuMS0xMDQuOSAzMi4xLTEwNC45IDIuNCAwLTguMSA1LjMtMTUgMTAuNi0yMS41IDc3LjcgNS4zIDk0LjMgMy40IDk0LjMgMTkuMXpNMTAyLjEgMjY1LjdjLTUyLjggMC01MC41LTcxLjIgMS4yLTcxLjIgNDkuNSAwIDUwLjggNzEuMi0xLjIgNzEuMnpNMjM1LjQgMzY2LjJsMC0zMi4xYzI2LjctMy43IDI3LjItMiAyNy4yLTExbDAtMTE5LjVjMC04LjUtMi4xLTcuNC0yNy4yLTE2LjNsNC41LTMyLjkgODQuMiAwIDAgMTY4LjdjMCA2LjUgLjQgNy4zIDYuNSA4LjFsMjAuNyAyLjggMCAzMi4xLTExNS45IDB6bTUyLjUtMjQ0LjNjLTIzLjIgMC0zNi42LTEzLjQtMzYuNi0zNi42czEzLjQtMzUuOCAzNi42LTM1LjhjMjMuNiAwIDM3IDEyLjYgMzcgMzUuOHMtMTMuNCAzNi42LTM3IDM2LjZ6TTUxMiAzNTAuNWMtMTcuNSA4LjUtNDMuMSAxNi4zLTY2LjMgMTYuMy00OC40IDAtNjYuNy0xOS41LTY2LjctNjUuNWwwLTEwNi41YzAtNS40IDEtNC4xLTMxLjctNC4xbDAtMzYuMmMzNS44LTQuMSA1MC0yMiA1NC41LTY2LjNsMzguNiAwYzAgNjUuOC0xLjMgNjEuOCAzLjMgNjEuOGw1Ny4zIDAgMCA0MC42LTYwLjYgMCAwIDk3LjFjMCA2LjktNC45IDUxLjQgNjAuNiAyNi44bDExIDM1Ljh6Il0KICAgIH07CiAgICBmYU9wdGluTW9uc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcHRpbi1tb25zdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyM2MiLCAiTTU3Mi44IDQyMS40YzUuNi05LjUgNC43LTE1LjItNS40LTExLjYtMy00LjktNy05LjUtMTEuMS0xMy44IDIuOS05LjctLjctMTQuMi0xMC44LTkuMi00LjYtMy4yLTEwLjMtNi41LTE1LjktOS4yIDAtMTUuMS0xMS42LTExLjYtMTcuNi01LjctMTAuNC0xLjUtMTguNy0uMy0yNi44IDUuNyAuMy02LjUgLjMtMTMgLjMtMTkuNyAxMi42IDAgNDAuMi0xMSA0NS45LTM2LjIgMS40LTYuOCAxLjYtMTMuOC0uMy0yMS45LTMtMTMuNS0xNC4zLTIxLjMtMjUuMS0yNS43LS44LTUuOS03LjYtMTQuMy0xNC45LTE1LjlzLTEyLjQgNC45LTE0LjEgMTAuM2MtOC41IDAtMTkuMiAyLjgtMjEuMSA4LjQtNS40LS41LTExLjEtMS40LTE2LjgtMS45IDIuNy0xLjkgNS40LTMuNSA4LjQtNC42IDUuNC05LjIgMTQuNi0xMS40IDI1LjctMTEuNmwwLTIuOGMxOS41LS41IDQzLTUuOSA1My44LTE4LjEgMTIuNy0xMy44IDE0LjYtMzcuMyAxMi40LTU1LjEtMi40LTE3LjMtOS43LTM3LjYtMjQuNi00OC4xLTguNC01LjktMjEuNi0uOC0yMi43IDkuNS0yLjIgMTkuNiAxLjIgMzAtMzguNiAyNS4xLTEwLjMtMjMuOC0yNC42LTQ0LjYtNDIuNy02MC02OS42LTU5LjctMTY3LjctNTMuOC0yNDQuMi0zNy42IDE5LjcgNC42IDQxLjEgOC42IDU5LjcgMTYuNS0yNi4yIDIuNC01Mi43IDExLjMtNzYuMiAyMy4yLTMyLjggMTctNDQgMjkuOS01Ni43IDQyLjQgMTQuOS0yLjIgMjguOS01LjEgNDMuOC0zLjgtOS43IDUuNC0xOC40IDEyLjItMjYuNSAyMC0yNS44IC45LTIzLjgtNS4zLTI2LjItMjUuOS0xLjEtMTAuNS0xNC4zLTE1LjQtMjIuNy05LjctMjguMSAxOS45LTMzLjUgNzkuOS0xMi4yIDEwMy41IDEwLjggMTIuMiAzNS4xIDE3LjMgNTQuOSAxNy44LS4zIDEuMS0uMyAxLjktLjMgMi43IDEwLjggLjUgMTkuNSAyLjcgMjQuNiAxMS42IDMgMS4xIDUuNyAyLjcgOC4xIDQuNi01LjQgLjUtMTEuMSAxLjQtMTYuNSAxLjktMy4zLTYuNi0xMy43LTguMS0yMS4xLTguMS0xLjYtNS43LTYuNS0xMi4yLTE0LjEtMTAuMy02LjggMS45LTE0LjEgMTAtMTQuOSAxNS45LTIyLjUgOS41LTMwLjEgMjYuOC0yNS4xIDQ3LjYgNS4zIDI0LjggMzMgMzYuMiA0NS45IDM2LjJsMCAxOS43Yy02LjYtNS0xNC4zLTcuNS0yNi44LTUuNy01LjUtNS41LTE3LjMtMTAuMS0xNy4zIDUuNy01LjkgMi43LTExLjQgNS45LTE1LjkgOS4yLTkuOC00LjktMTMuNi0xLjctMTEuMSA5LjItNC4xIDQuMy03LjggOC42LTExLjEgMTMuOC0xMC4yLTMuNy0xMSAyLjItNS40IDExLjYtMS4xIDMuNS0xLjYgNy0xLjkgMTAuOC0uNSAzMS42IDQ0LjYgNjQgNzMuNSA2NS4xIDE3LjMgLjUgMzQuNi04LjQgNDMtMjMuNSAxMTMuMiA0LjkgMjI2LjcgNC4xIDM0MC4yIDAgOC4xIDE1LjEgMjUuNCAyNC4zIDQyLjcgMjMuNSAyOS4yLTEuMSA3NC4zLTMzLjUgNzMuNS02NS4xIC4yLTMuNy0uNy03LjItMS43LTEwLjd6TTQ5OSAxNjcuNGMxLjEtMyAyLjQtOC40IDIuNC0xNC42IDAtNS45IDYuOC04LjEgMTQuMS0uOCAxMS4xIDExLjYgMTQuOSA0MC41IDEzLjggNTEuMS00LjEtMTMuNi0xMy0yOS0zMC4zLTM1Ljd6bS00LjYgNi43YzE5LjUgNi4yIDI4LjYgMjcuNiAyOS43IDQ4LjktMS4xIDIuNy0zIDUuNC00LjkgNy42LTUuNyA1LjktMTUuNCAxMC0yNi4yIDEyLjIgNC4zLTIxLjMgLjMtNDcuMy0xMi43LTYzIDQuOS0uOCAxMC45LTIuNCAxNC4xLTUuN3ptLTI0LjEgNi44YzEzLjggMTEuOSAyMCAzOS4yIDE0LjEgNjMuNS00LjEgLjUtOC4xIC44LTExLjYgLjgtMS45LTIxLjktNi44LTQ0LTE0LjMtNjQuNiAzLjcgLjMgOC4xIC4zIDExLjggLjN6TTQ3LjcgMjAzYy0xLjEtMTAuNSAyLjQtMzkuNSAxMy44LTUxLjEgNy03LjMgMTQuMS01LjEgMTQuMSAuOCAwIDYuMiAxLjQgMTEuNiAyLjQgMTQuNi0xNy4zIDYuOC0yNi4yIDIyLjItMzAuMyAzNS43em05LjcgMjcuNmMtMS45LTIuMi0zLjUtNC45LTQuOS03LjYgMS40LTIxLjMgMTAuMy00Mi43IDI5LjctNDguOSAzLjIgMy4yIDkuMiA0LjkgMTQuMSA1LjctMTMgMTUuNy0xNyA0MS42LTEyLjcgNjMtMTAuOC0yLjItMjAuNS02LTI2LjItMTIuMnptNDcuOSAxNC42Yy00LjEgMC04LjEtLjMtMTIuNy0uOC00LjYtMTguNi0xLjktMzguOSA1LjQtNTNsMCAuMyAxMi4yLTUuMWM0LjktMS45IDkuNy0zLjggMTQuOS00LjktMTAuNyAxOS43LTE3LjQgNDEuMy0xOS44IDYzLjV6bTE4NC0xMC41YTc2LjEgNzYuMSAwIDEgMSAwLTE1Mi4yIDc2LjEgNzYuMSAwIDEgMSAwIDE1Mi4yem0xMTUuNiAyMi4xYy0uMyAxNy44LTcgNDguOS0yMyA1Ny0xMy4yIDYuNi02LjUtNy41LTE2LjUtNTguMSAxMy4zIC4zIDI2LjYgLjMgMzkuNSAxLjF6bS01NC0xLjZjLjggNC45IDMuOCA0MC4zLTEuNiA0MS45LTExLjYgMy41LTQwIDQuMy01MS4xLTEuMS00LjEtMy00LjYtMzUuOS00LjMtNDEuMWwwIC4zYzE4LjktLjMgMzguMS0uMyA1NyAwek0yNzguNSAzMDljLTEzIDMuNS00MS42IDQuMS01NC42LTEuNi02LjUtMi43LTMuOC00Mi40LTEuOS01MS42IDE5LjItLjUgMzguNC0uNSA1Ny44LS44bDAgLjNjMS4xIDguMyAzLjMgNTEuMi0xLjMgNTMuN3pNMTcyIDI1Ny45YzEyLjItLjggMjQuNi0xLjQgMzYuOC0xLjYtMi40IDE1LjQtMyA0My41LTQuOSA1Mi4yLTEuMSA2LjgtNC4zIDYuOC05LjcgNC4zLTIxLjktOS44LTI3LjYtMzUuMi0yMi4yLTU0Ljl6bS0zNS40IDMxLjNjNy44LTEuMSAxNS43LTEuOSAyMy41LTIuNyAxLjYgNi4yIDMuOCAxMS45IDcgMTcuNiAxMCAxNyA0NCAzNS43IDQ1LjEgNyA2LjIgMTQuOSA0MC44IDEyLjIgNTQuOSAxMC44IDE1LjctMS40IDIzLjgtMS40IDI2LjgtMTQuMyAxMi40IDQuMyAzMC44IDQuMSA0NCAzIDExLjMtLjggMjAuOC0uNSAyNC42LTguOSAxLjEgNS4xIDEuOSAxMS42IDQuNiAxNi44IDEwLjggMjEuMyAzNy4zIDEuNCA0Ni44LTMxLjYgOC42IC44IDE3LjYgMS45IDI2LjUgMi43LS40IDEuMy0zLjggNy4zIDcuMyAxMS42LTQ3LjYgNDctOTUuNyA4Ny44LTE2My4yIDEwNy02My4yLTIwLjgtMTEyLjEtNTkuNS0xNTUuOS0xMDYuNSA5LjYtMy40IDEwLjQtOC44IDgtMTIuNXpNMTE1IDQ2MS43Yy0zLjggMTcuOC0yMS45IDI5LjctMzkuNyAyOC45LTE5LjItLjgtNDYuNS0xNy01OS4yLTM2LjUtMi43LTMxLjEgNDMuOC02MS4zIDY2LjItNTQuNiAxNC45IDQuMyAyNy44IDMwLjggMzMuNSA1NCAwIDMtLjMgNS43LS44IDguMnptLTguNy02NmMtLjUtMTMuNS0uNS0yNy0uMy00MC41bC4zIDBjMi43LTEuNiA1LjctMy44IDcuOC02LjUgNi41LTEuNiAxMy01LjEgMTUuMS05LjIgMy4zLTcuMS03LTcuNS01LjQtMTIuNCAyLjctMS4xIDUuNy0yLjIgNy44LTMuNSAyOS4yIDI5LjIgNTguNiA1Ni41IDk3LjMgNzctMzYuOCAxMS4zLTcyLjQgMjcuNi0xMDUuOSA0Ny0xLjItMTguNi03LjctMzUuOS0xNi43LTUxLjl6bTMzNy42IDY0LjZjLTEwMyAzLjUtMjA2LjIgNC4xLTMwOS40IDAgMCAuMyAwIC4zLS4zIC4zbDAtLjMgLjMgMGMzNS4xLTIxLjYgNzIuMi0zOS4yIDExMi40LTUwLjggMTEuNiA1LjEgMjMgOS41IDM0LjkgMTMuMiAyLjIgLjggMi4yIC44IDQuMyAwIDE0LjMtNC4xIDI4LjQtOS4yIDQyLjItMTUuNCA0MS41IDExLjcgNzguOCAzMS43IDExNS42IDUzem0xMC41LTEyLjRjLTM1LjktMTkuNS03My0zNS45LTExMS45LTQ3LjYgMzguMS0yMCA3MS45LTQ3LjMgMTAzLjUtNzYuNyAyLjIgMS40IDQuNiAyLjQgNy42IDMuMiAwIC44IC4zIDEuOSAuNSAyLjQtNC42IDIuNy03LjggNi4yLTUuOSAxMC4zIDIuMiAzLjggOC42IDcuNiAxNS4xIDguOSAyLjQgMi43IDUuMSA1LjEgOC4xIDYuOCAwIDEzLjgtLjMgMjcuNi0uOCA0MS4zbC4zLS4zYy05LjMgMTUuOS0xNS41IDM3LTE2LjUgNTEuN3ptMTA1LjkgNi4yYy0xMi43IDE5LjUtNDAgMzUuNy01OS4yIDM2LjUtMTkuMyAuOS00MC41LTEzLjItNDAuNS0zNyA1LjctMjMuMiAxOC45LTQ5LjcgMzMuNS01NCAyMi43LTYuOSA2OS4yIDIzLjQgNjYuMiA1NC41ek0zNzMuMSA3NS4yYy0zLjgtNzIuMS0xMDAuOC03OS43LTEyNi0yMy41IDQ0LjYtMjQuMyA5MC4zLTE1LjcgMTI2IDIzLjV6TTc1IDQwNy4xYy0xNS43IDEuNi00OS41IDI1LjQtNDkuNSA0My4yIDAgMTEuNiAxNS43IDE5LjUgMzIuMiAxNC45IDEyLjItMy4yIDMxLjEtMTcuNiAzNS45LTI3LjMgNi0xMS42LTMuNy0zMi43LTE4LjYtMzAuOHpNMjkwLjkgMjMwLjljMjguNiAwIDUxLjktMjEuNiA1MS45LTQ4LjQgMC0zNi4xLTQwLjUtNTguMS03Mi4yLTQ0LjMgOS41IDMgMTYuNSAxMS42IDE2LjUgMjEuNiAwIDIzLjMtMzMuMyAzMi00Ni41IDExLjMtNy4zIDM0LjEgMTkuNCA1OS44IDUwLjMgNTkuOHpNNjguMiA0NzQuMWMuNSA2LjUgMTIuMiAxMi43IDIxLjYgOS41IDYuOC0yLjcgMTQuNi0xMC41IDE3LjMtMTYuMiAzLTctMS4xLTIwLTkuNy0xOC40LTguOSAxLjYtMjkuNyAxNi43LTI5LjIgMjUuMXptNDMzLjItNjdjLTE0LjktMS45LTI0LjYgMTkuMi0xOC45IDMwLjggNC45IDkuNyAyNC4xIDI0LjEgMzYuMiAyNy4zIDE2LjUgNC42IDMyLjItMy4yIDMyLjItMTQuOSAwLTE3LjgtMzMuOC00MS42LTQ5LjUtNDMuMnpNNDc5IDQ0OWMtOC40LTEuNi0xMi40IDExLjMtOS41IDE4LjQgMi40IDUuNyAxMC4zIDEzLjUgMTcuMyAxNi4yIDkuMiAzLjIgMjEuMS0zIDIxLjMtOS41IC45LTguNC0yMC4yLTIzLjUtMjkuMS0yNS4xeiJdCiAgICB9OwogICAgZmFKZW5raW5zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImplbmtpbnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiNiIsICJNNDU1LjQgNDI1Yy0xLjQtMTEuMi0xOS0yMy4xLTI4LjItMzEuOS01LjEtNS0yOS0yMy4xLTMwLjQtMjkuOS0xLjQtNi42IDkuNy0yMS41IDEzLjMtMjguOSA1LjEtMTAuNyA4LjgtMjMuNyAxMS4zLTMyLjYgMTguOC02Ni4xIDIwLjctMTU2LjktNi4yLTIxMS4yLTEwLjItMjAuNi0zOC42LTQ5LTU2LjQtNjIuNS00Mi0zMS43LTExOS42LTM1LjMtMTcwLjEtMTYuNi0xNC4xIDUuMi0yNy44IDkuOC00MC4xIDE3LjEtMzMuMSAxOS40LTY4LjMgMzIuNS03OC4xIDcxLjYtMjQuMiAxMC44LTMxLjUgNDEuOC0zMC4zIDc3LjggLjIgNyA0LjEgMTUuOCAyLjcgMjIuNC0uNyAzLjMtNS4yIDcuNi02LjEgOS44LTExLjYgMjcuNy0yLjMgNjQgMTEuMSA4My43IDguMSAxMS45IDIxLjUgMjIuNCAzOS4yIDI1LjIgLjcgMTAuNiAzLjMgMTkuNyA4LjIgMzAuNCAzLjEgNi44IDE0LjcgMTkgMTAuNCAyNy43LTIuMiA0LjQtMjEgMTMuOC0yNy4zIDE3LjYtMjEuMSAxMi41LTM2LjQgMjAuMy01NS45IDM0LjMtMTIuNiA5LTMyLjMgMTAuMi0yOS4yIDMxLjEgMi4xIDE0LjEgMTAuMSAzMS42IDE0LjcgNDUuOCAuNyAyIDEuNCA0LjEgMi4xIDZsNDIyIDBjNC45LTE1LjMgOS43LTMwLjkgMTQuNi00Ny4yIDMuNC0xMS40IDEwLjItMjcuOCA4LjctMzkuN3pNMTc0LjIgMzMuN2MxLjgtLjUgMy40IC43IDQuOSAyLjQtLjIgNS4yLTUuNCA1LjEtOC45IDYuOC01LjQgNi43LTEzLjQgOS44LTIwIDE3LjItNi44IDcuNS0xNC40IDI3LjctMjMuNCAzMC00LjUgMS4xLTkuNy0uOC0xMy42LS41LTEwLjQgLjctMTcuNyA2LTI4LjMgNy41IDEzLjYtMjkuOSA1Ni4xLTU0IDg5LjMtNjMuNHpNNjkuNCAxMjcuM2MxMy41LTE0LjkgMzIuMS0yNC4xIDU0LjgtMjUuOSAxMS43IDI5LjctOC40IDY1LS45IDk3LjYgMi4zIDkuOSAxMC4yIDI1LjQtMi40IDI1LjcgLjMtMjguMy0zNC44LTQ2LjMtNjEuMy0yOS42LTEuOC0yMS41LTQuOS01MS43IDkuOC02Ny44em0zNi43IDIwMC4yYy0xLTQuMS0yLjctMTIuOS0yLjMtMTUuMSAxLjYtOC43IDE3LjEtMTIuNSAxMS0yNC43LTExLjMtLjEtMTMuOCAxMC4yLTI0LjEgMTEuMy0yNi43IDIuNi00NS42LTM1LjQtNDQuNC01OC40IDEtMTkuNSAxNy42LTM4LjIgNDAuMS0zNS44IDE2IDEuOCAyMS40IDE5LjIgMjQuNSAzNC43IDkuMiAuNSAyMi41LS40IDI2LjktNy42LS42LTE3LjUtOC44LTMxLjYtOC4yLTQ3LjcgMS0zMC4zIDE3LjUtNTcuNiA0LjgtODcuNCAxMy42LTMwLjkgNTMuNS01NS4zIDgzLjEtNzAgMzYuNi0xOC4zIDk0LjktMy43IDEyOS4zIDE1LjggMTkuNyAxMS4xIDM0LjQgMzIuNyA0OC4zIDUwLjctMTkuNS01LjgtMzYuMSA0LjItMzMuMSAyMC4zIDE2LjMtMTQuOSA0NC4yLS4yIDUyLjUgMTYuNCA3LjkgMTUuOCA3LjggMzkuMyA5IDYyLjggMi45IDU3LTEwLjQgMTE1LjktMzkuMSAxNTcuMS03LjcgMTEtMTQuMSAyMy0yNC45IDMwLjYtMjYgMTguMi02NS40IDM0LjctOTkuMiAyMy40LTQ0LjctMTUtNjUtNDQuOC04OS41LTc4LjggLjcgMTguNyAxMy44IDM0LjEgMjYuOCA0OC40IDExLjMgMTIuNSAyNSAyNi42IDM5LjcgMzIuNC0xMi4zLTIuOS0zMS4xLTMuOC0zNi4yIDcuMi0yOC42LTEuOS01NS4xLTQuOC02OC43LTI0LjItMTAuNi0xNS40LTIxLjQtNDEuNC0yNi4zLTYxLjR6bTIyMiAxMjQuMWM0LjEtMyAxMS4xLTIuOSAxNy40LTMuNi01LjQtMi43LTEzLTMuNy0xOS4zLTIuMi0uMS00LjItMi02LjgtMy4yLTEwLjIgMTAuNi0zLjggMzUuNS0yOC41IDQ5LjYtMjAuMyA2LjcgMy45IDkuNSAyNi4yIDEwLjEgMzcgLjQgOS0uOCAxOC00LjUgMjIuOC0xOC44LS42LTM1LjgtMi44LTUwLjctNyAuOS02LjEtMS0xMi4xIC42LTE2LjV6bS0xNy4yLTIwYy0xNi44IC44LTI2LTEuMi0zOC4zLTEwLjggLjItLjggMS40LS41IDEuNS0xLjQgMTggOCA0MC44LTMuMyA1OS00LjktNy45IDUuMS0xNC42IDExLjYtMjIuMiAxNy4xem0tMTIuMSAzMy4yYy0xLjYtOS40LTMuNS0xMi0yLjgtMjAuMiAyNS0xNi42IDI5LjcgMjguNiAyLjggMjAuMnpNMTk0LjMgNDM4LjZjLTExLjYtLjctNDguMS0xNC0zOC41LTIzLjcgOS40IDYuNSAyNy41IDQuOSA0MS4zIDcuMyAuOCA0LjQtMi44IDEwLjItMi44IDE2LjR6TTI2IDQ5Ny4xYy00LjMtMTIuNy05LjItMjUuMS0xNC44LTM2LjkgMzAuOC0yMy44IDY1LjMtNDguOSAxMDIuMi02My41IDIuOC0xLjEgMjMuMiAyNS40IDI2LjIgMjcuNiAxNi41IDExLjcgMzcgMjEgNTYuMiAzMC4yIDEuMiA4LjggMy45IDIwLjIgOC43IDM1LjUgLjcgMi4zIDEuNCA0LjcgMi4yIDcuMmwtMTgwLjcgMCAwLS4xem0yNDAuNiA1LjdsLS44IDBjLjMtLjIgLjUtLjQgLjgtLjVsMCAuNXptNy41LTUuN2MyLjEtMS40IDQuMy0yLjggNi40LTQuMyAxLjEgMS40IDIuMiAyLjggMy4yIDQuM2wtOS42IDB6bTE1LjEtMjQuN2MtMTAuOCA3LjMtMjAuNiAxOC4zLTMzLjMgMjUuMi02IDMuMy0yNyAxMS43LTMzLjQgMTAuMi0zLjYtLjgtMy45LTUuMy01LjQtOS41LTMuMS05LTEwLjEtMjMuNC0xMC44LTM3LS44LTE3LjItMi41LTQ2IDE2LTQyLjQgMTQuOSAyLjkgMzIuMyA5LjcgNDMuOSAxNi4xIDcuMSAzLjkgMTEuMSA4LjYgMjEuOSA5LjUtLjEgMS40LS4xIDIuOC0uMiA0LjMtNS45IDMuOS0xNS4zIDMuOC0yMS44IDcuMSA5LjUgLjQgMTcgMi43IDIzLjUgNS45LS4xIDMuNC0uMyA3LS40IDEwLjZ6bTUzLjQgMjQuN2wtMTQgMGMtLjEtMy4yLTIuOC01LjgtNi4xLTUuOHMtNS45IDIuNi02LjEgNS44bC0xNy40IDBjLTIuOC00LjQtNS43LTguNi04LjktMTIuNSAyLjEtMi4yIDQtNC43IDYtNi45IDkgMy43IDE0LjgtNC45IDIxLjctNC4yIDcuOSAuOCAxNC4yIDExLjcgMjUuNCAxMWwtLjYgMTIuNnptOC43IDBjLjItNCAuNC03LjggLjYtMTEuNSAxNS42LTcuMyAyOSAxLjMgMzUuNyAxMS41bC0zNi4zIDB6bTgzLjQtMzdjLTIuMyAxMS4yLTUuOCAyNC05LjkgMzcuMS0uMi0uMS0uNC0uMS0uNi0uMWwtMjcuOSAwYy42LTEuMSAxLjItMi4yIDEuOS0zLjMtMi42LTYuMS05LTguNy0xMC45LTE1LjUgMTIuMS0yMi43IDYuNS05My40LTI0LjItNzguNSA0LjMtNi4zIDE1LjYtMTEuNSAyMC44LTE5LjMgMTMgMTAuNCAyMC44IDIwLjMgMzMuMiAzMS40IDYuOCA2IDIwIDEzLjMgMjEuNCAyMy4xIC44IDUuNS0yLjYgMTguOS0zLjggMjUuMXpNMTkwLjUgMTMwLjVjNS40LTE0LjkgMjcuMi0zNC43IDQ1LTMyIDcuNyAxLjIgMTggOC4yIDEyLjIgMTcuNy0zMC4yLTctNDUuMiAxMi42LTU0LjQgMzMuMS04LjEtMi00LjktMTMuMS0yLjgtMTguOHptMTg0LjEgNjMuMWM4LjItMy42IDIyLjQtLjcgMjkuNi01LjMtNC4yLTExLjUtMTAuMy0yMS40LTkuMy0zNy43IC41IDAgMSAwIDEuNCAuMSA2LjggMTQuMiAxMi43IDI5LjIgMjEuNCA0MS43LTUuNyAxMy41LTQzLjYgMjUuNC00My4xIDEuMnptLTk2LjggMi43Yy02LjgtMTAuOS0xOS0zMi41LTE0LjUtNDUuMyA2LjUgMTEuOSA4LjYgMjQuNCAxNy44IDMzLjMgNC4xIDQgMTIuMiA5IDguMiAyMC4yLS45IDIuNy03LjggOC42LTExLjcgOS43LTE0LjQgNC4zLTQ3LjkgLjktMzYuNi0xNy4xIDExLjkgLjcgMjcuOSA3LjggMzYuOC0uOHptMjcuMyA3MGMzLjggNi42IDEuNCAxOC43IDEyLjEgMjAuNiAyMC4yIDMuNCA0My42LTEyLjMgNTguMS0xNy44IDktMTUuMi0uOC0yMC43LTguOS0zMC41LTE2LjYtMjAtMzguOC00NC44LTM4LTc0LjcgNi43LTQuOSA3LjMgNy40IDguMiA5LjcgOC43IDIwLjMgMzAuNCA0Ni4yIDQ2LjMgNjMuNSAzLjkgNC4zIDEwLjMgOC40IDExIDExLjIgMi4xIDguMi01LjQgMTgtNC41IDIzLjUtMjEuNyAxMy45LTQ1LjggMjkuMS04MS40IDI1LjYtNy40LTYuNy0xMC4zLTIxLjQtMi45LTMxLjF6bS0yMDEuMy05LjJjLTYuOC0zLjktOC40LTIxLTE2LjQtMjEuNC0xMS40LS43LTkuMyAyMi4yLTkuMyAzNS41LTcuOC03LjEtOS4yLTI5LjEtMy41LTQwLjMtNi42LTMuMi05LjUgMy42LTEzLjEgNS45IDQuNy0zNC4xIDQ5LjgtMTUuOCA0Mi4zIDIwLjN6bTI5OS42IDI4LjhjLTEwLjEgMTkuMi0yNC40IDQwLjQtNTQgNDEtLjYtNi4yLTEuMS0xNS42IDAtMTkuNCAyMi43LTIuMiAzNi42LTEzLjcgNTQtMjEuNnpNMjYxLjUgMjk4LjNjMTguOSA5LjkgNTMuNiAxMSA3OS4zIDEwLjIgMS40IDUuNiAxLjMgMTIuNiAxLjQgMTkuNC0zMyAxLjgtNzItNi40LTgwLjctMjkuNnpNMzUzLjcgMzQ1Yy0xLjcgNC4zLTUuMyA5LjMtOS44IDExLjEtMTIuMSA0LjktNDUuNiA4LjctNjIuNC0uMy0xMC43LTUuNy0xNy41LTE4LjUtMjMuNC0yNi0yLjgtMy42LTE2LjktMTIuOS0uMi0xMi45IDEzLjEgMzIuNyA1OCAyOSA5NS44IDI4LjF6Il0KICAgIH07CiAgICBmYVNsaWRlc2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2xpZGVzaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWU3IiwgIk0xODcuOSAxNTMuN2MtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43czYxLjctMjYgNjEuNy01Ny43YzAtMzItMjcuNy01Ny43LTYxLjctNTcuN3ptMTQzLjQgMGMtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43IDM0LjMgMCA2MS43LTI2IDYxLjctNTcuNyAuMS0zMi0yNy40LTU3LjctNjEuNy01Ny43em0xNTYuNiA5MGwtNiA0LjMgMC0xOTguM2MwLTI3LjQtMjAuNi00OS43LTQ2LTQ5LjdMNzYuOCAwYy0yNS40IDAtNDYgMjIuMy00NiA0OS43bDAgMTk4LjNjLTItMS40LTQuMy0yLjktNi4zLTQuMy0xNS4xLTEwLjYtMjUuMSA0LTE2IDE3LjcgMTguMyAyMi42IDUzLjEgNTAuMyAxMDYuMyA3Mi01Ni4zIDE5MS43IDEzNy40IDIyMi4zIDEzNC4zIDEyNC4xIDAtLjcgLjMtNTYuNiAuMy05Ni42IDUuMSAxLjEgOS40IDIuMyAxMy43IDMuMSAwIDM5LjcgLjMgOTIuOCAuMyA5My41LTMuMSA5OC4zIDE5MC42IDY3LjcgMTM0LjMtMTI0IDUzLjEtMjEuNyA4OC00OS40IDEwNi4zLTcyIDkuMS0xMy44LS45LTI4LjMtMTYuMS0xNy44em0tMzAuNSAxOS4yYy02OC45IDM3LjQtMTI4LjMgMzEuMS0xNjAuNiAyOS43LTIzLjctLjktMzIuNiA5LjEtMzMuNyAyNC45LTEwLjMtNy43LTE4LjYtMTUuNS0yMC4zLTE3LjEtNS4xLTUuNC0xMy43LTgtMjcuMS03LjctMzEuNyAxLjEtODkuNyA3LjQtMTU3LjQtMjhsMC0xOTIuNGMwLTM0LjkgOC45LTQ1LjcgNDAuNi00NS43bDMxNy43IDBjMzAuMyAwIDQwLjkgMTIuOSA0MC45IDQ1LjdsMCAxOTAuNi0uMSAweiJdCiAgICB9OwogICAgZmFVYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInViZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwMiIsICJNNDE0LjEgMzJMMzMuOSAzMkMxNS4yIDMyIDAgNDcuMiAwIDY1LjlMMCA0NDZjMCAxOC44IDE1LjIgMzQgMzMuOSAzNEw0MTQgNDgwYzE4LjcgMCAzMy45LTE1LjIgMzMuOS0zMy45bDAtMzgwLjJDNDQ4IDQ3LjIgNDMyLjggMzIgNDE0LjEgMzJ6TTIzNy42IDM5MS4xQzE2MyAzOTguNiA5Ni40IDM0NC4yIDg4LjkgMjY5LjZsOTQuNCAwIDAgMjAuNGMwIDMuNyAzIDYuOCA2LjggNi44bDY3LjkgMGMzLjcgMCA2LjgtMyA2LjgtNi44bDAtNjcuOWMwLTMuNy0zLTYuOC02LjgtNi44bC02Ny45IDBjLTMuNyAwLTYuOCAzLTYuOCA2LjhsMCAyMC40LTk0LjQgMGM3LTY5LjQgNjUuNC0xMjIuMiAxMzUuMS0xMjIuMnMxMjguMSA1Mi44IDEzNS4xIDEyMi4yYzcuNSA3NC41LTQ2LjkgMTQxLjEtMTIxLjUgMTQ4LjZ6Il0KICAgIH07CiAgICBmYURpZ2l0YWxPY2VhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWdpdGFsLW9jZWFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOTEiLCAiTTg3IDQ4MS44bDczLjcgMCAwLTczLjYtNzMuNyAwIDAgNzMuNnpNMjUuNCAzNDYuNmwwIDYxLjYgNjEuNiAwIDAtNjEuNi02MS42IDB6TTQ5MS42IDE3Ni45QzQ2OC42IDEwMi43IDQwOS4yIDQzLjYgMzM1IDIwLjMgMTY0LjktMzIuOCA4IDkzLjcgOCAyNTUuOWw5NS44IDBjMC0xMDEuOCAxMDEtMTgwLjUgMjA4LjEtMTQxLjcgMzkuNyAxNC4zIDcxLjUgNDYuMSA4NS44IDg1LjcgMzkuMSAxMDctMzkuNyAyMDcuOC0xNDEuNCAyMDhsMCAuMy0uMyAwIDAgOTUuOGMxNjIuNiAwIDI4OC44LTE1Ni44IDIzNS42LTMyNy4xem0tMjM1LjMgMjMxbDAtOTUuMy05NS42IDAgMCA5NS42IDk1LjMgMCAwLS4zIC4zIDB6Il0KICAgIH07CiAgICBmYVNvdW5kY2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic291bmRjbG91ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMWJlIiwgIk02NDAuMiAyOTguNmMtMS4zIDIzLjEtMTEuNSA0NC44LTI4LjQgNjAuNXMtMzkuMiAyNC40LTYyLjMgMjQuMWwtMjE4IDBjLTQuOCAwLTkuNC0yLTEyLjgtNS40cy01LjMtOC01LjMtMTIuOGwwLTIzNC44Yy0uMi00IC45LTggMy4xLTExLjRzNS4zLTYuMSA5LTcuN2MwIDAgMjAuMS0xMy45IDYyLjMtMTMuOSAyNS44IDAgNTEuMSA2LjkgNzMuMyAyMC4xIDE3LjMgMTAuMiAzMi4zIDIzLjggNDQuMSA0MC4xczIwIDM0LjggMjQuMiA1NC40YzcuNS0yLjEgMTUuMy0zLjIgMjMuMS0zLjIgMTEuNy0uMSAyMy4zIDIuMiAzNC4yIDYuN3MyMC41IDExLjMgMjguNyAxOS43IDE0LjYgMTguMyAxOC45IDI5LjMgNi4zIDIyLjYgNS45IDM0LjN6bS0zNTQtMTUzLjVjLjEtMSAwLTItLjMtMi45cy0uOC0xLjgtMS41LTIuNi0xLjUtMS4zLTIuNC0xLjdjLTEuOC0uOC00LS44LTUuOCAwLS45IC40LTEuNyAxLTIuNCAxLjdzLTEuMiAxLjYtMS41IDIuNi0uNCAxLjktLjMgMi45Yy02IDc4LjktMTAuNiAxNTIuOSAwIDIzMS42IC4yIDEuNyAxIDMuMyAyLjMgNC41IDIuNiAyLjQgNi44IDIuNCA5LjQgMCAxLjMtMS4yIDIuMS0yLjggMi4zLTQuNSAxMS4zLTc5LjQgNi42LTE1MiAwLTIzMS42bC4yIDB6bS00NCAyNy4zYy0uMi0xLjgtMS4xLTMuNS0yLjQtNC43cy0zLjEtMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjIgMi45LTIuNCA0LjdjLTcuOSA2Ny45LTcuOSAxMzYuNSAwIDIwNC40IC4zIDEuOCAxLjIgMy40IDIuNSA0LjVzMy4xIDEuOCA0LjggMS44IDMuNS0uNiA0LjgtMS44IDIuMi0yLjggMi41LTQuNWM4LjgtNjcuOCA4LjgtMTM2LjUgLjEtMjA0LjRsLjEgMHptLTQ0LjMtNi45Yy0uMi0xLjgtMS0zLjQtMi4zLTQuNnMtMy0xLjgtNC44LTEuOC0zLjUgLjctNC44IDEuOC0yLjEgMi44LTIuMyA0LjZjLTYuNyA3Mi0xMC4yIDEzOS4zIDAgMjExLjEgMCAxLjkgLjcgMy43IDIuMSA1czMuMSAyLjEgNSAyLjEgMy43LS43IDUtMi4xIDIuMS0zLjEgMi4xLTVjMTAuNS03Mi44IDcuMy0xMzguMiAuMS0yMTEuMWwtLjEgMHptLTQ0IDIwLjZjMC0xLjktLjgtMy44LTIuMS01LjJzLTMuMi0yLjEtNS4yLTIuMS0zLjggLjgtNS4yIDIuMS0yLjEgMy4yLTIuMSA1LjJjLTguMSA2My4zLTguMSAxMjcuNSAwIDE5MC44IC4yIDEuOCAxIDMuNCAyLjQgNC42czMuMSAxLjkgNC44IDEuOSAzLjUtLjcgNC44LTEuOSAyLjItMi44IDIuNC00LjZjOC44LTYzLjMgOC45LTEyNy41IC4zLTE5MC44bC0uMSAwem0tNDQuNSA0Ny42YzAtMS45LS44LTMuOC0yLjEtNS4xcy0zLjItMi4xLTUuMS0yLjEtMy44IC44LTUuMSAyLjEtMi4xIDMuMi0yLjEgNS4xYy0xMC41IDQ5LjItNS41IDkzLjkgLjQgMTQzLjYgLjMgMS42IDEuMSAzLjEgMi4zIDQuMnMyLjggMS43IDQuNSAxLjcgMy4yLS42IDQuNS0xLjcgMi4xLTIuNSAyLjMtNC4yYzYuNi01MC40IDExLjYtOTQuMSAuNC0xNDMuNnptLTQ0LjEtNy41Yy0uMi0xLjgtMS4xLTMuNS0yLjQtNC44cy0zLjItMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjIgMi45LTIuNCA0LjhjLTkuMyA1MC4yLTYuMiA5NC40IC4zIDE0NC41IC43IDcuNiAxMy42IDcuNSAxNC40IDAgNy4yLTUwLjkgMTAuNS05My44IC4zLTE0NC41bC0uMiAwek0yMC43IDI1MC44Yy0uMi0xLjgtMS4xLTMuNS0yLjQtNC44cy0zLjItMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjMgMi45LTIuNCA0LjhjLTguNSAzMy43LTUuOSA2MS42IC42IDk1LjQgLjIgMS43IDEgMy4zIDIuMyA0LjRzMi45IDEuOCA0LjcgMS44IDMuNC0uNiA0LjctMS44IDIuMS0yLjcgMi4zLTQuNGM3LjUtMzQuNSAxMS4yLTYxLjggLjQtOTUuNGwtLjIgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlRmlnbWEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZpZ21hIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZTQiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTE3My43IDk2Yy0zMyAwLTU5LjggMjYuOC01OS44IDU5LjggMCAyMSAxMC44IDM5LjQgMjcuMiA1MC4xLTE2LjQgMTAuNy0yNy4yIDI5LjEtMjcuMiA1MC4xczEwLjggMzkuNSAyNy4yIDUwLjFjLTE2LjQgMTAuNy0yNy4yIDI5LjEtMjcuMiA1MC4xIDAgMzMuMSAyNy4xIDU5LjggNjAuMSA1OS44IDMzLjIgMCA2MC42LTI2LjkgNjAuNi02MC4zbDAtNTUuN2MxMC42IDkuOCAyNC44IDE1LjggNDAuNCAxNS44bDEuMSAwYzMzIDAgNTkuOC0yNi44IDU5LjgtNTkuOCAwLTIxLTEwLjgtMzkuNS0yNy4yLTUwLjEgMTYuNC0xMC43IDI3LjItMjkuMSAyNy4yLTUwLjEgMC0zMy0yNi44LTU5LjgtNTkuOC01OS44TDE3My43IDk2em00MS42IDIxOS44bDAgMzkuOWMwIDIyLjYtMTguNiA0MS00MS4zIDQxLTIyLjQgMC00MC43LTE4LjItNDAuNy00MC41IDAtMjIuMyAxOC4xLTQwLjQgNDAuMy00MC40bDQxLjcgMHptMC0xMDAuM2wwIDgwLjktNDEuNyAwYy0yMi4zLS4xLTQwLjMtMTguMi00MC4zLTQwLjUgMC0yMi4zIDE4LjEtNDAuNSA0MC41LTQwLjVsNDEuNiAwem02MC44IDBjMjIuMyAwIDQwLjUgMTguMSA0MC41IDQwLjVzLTE4LjEgNDAuNS00MC41IDQwLjVsLTEuMSAwYy0yMi4zIDAtNDAuNC0xOC4xLTQwLjQtNDAuNXMxOC4xLTQwLjUgNDAuNC00MC41bDEuMSAwem0tNjAuOC0xOS4zbC00MS42IDBjLTIyLjMgMC00MC41LTE4LjEtNDAuNS00MC40czE4LjEtNDAuNSA0MC41LTQwLjVsNDEuNiAwIDAgODAuOXptNjAuOC04MC45YzIyLjMgMCA0MC41IDE4LjEgNDAuNSA0MC41cy0xOC4xIDQwLjQtNDAuNSA0MC40bC00MS41IDAgMC04MC45IDQxLjUgMHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2EgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVmIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTE0NS43IDIyMWMxMy04My45IDgwLjUtOTUuNyAxMDguOS05NS43IDk5LjggMCAxMjcuNSA4Mi41IDEyNy41IDEzNC4yIDAgNjMuNi00MSAxMzIuOS0xMjguOSAxMzIuOS0zOC45IDAtOTkuMS0yMC0xMDkuNC05N2w2Mi41IDBjMS41IDMwLjEgMTkuNiA0NS4yIDU0LjUgNDUuMiAyMy4zIDAgNTgtMTguMiA1OC04Mi44IDAtODIuNS00OS4xLTgwLjYtNTYuNy04MC42LTMzLjEgMC01MS43IDE0LjYtNTUuOCA0My44bDE4LjIgMC00OS4yIDQ5LjItNDktNDkuMiAxOS40IDB6Il0KICAgIH07CiAgICBmYUNocm9tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaHJvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2OCIsICJNMCAyNTZjMC00Ni42IDEyLjUtOTAuNCAzNC4zLTEyOC45TDE0NC4xIDMxOC4zYzIxLjkgMzkuMiA2My44IDY1LjcgMTExLjkgNjUuNyAxNC4zIDAgMjcuMS0yLjMgNDAuOC02LjZMMjIwLjUgNTA5LjZDOTUuOSA0OTIuMyAwIDM4NS4zIDAgMjU2em0zNjUuMSA2NS42YzEyLjMtMTkuMiAxOC45LTQyLjUgMTguOS02NS42IDAtMzguMi0xNi44LTcyLjUtNDMuMy05NmwxNTIuNyAwYzEyIDI5LjYgMTguNiA2Mi4xIDE4LjYgOTYgMCAxNDEuNC0xMTQuNiAyNTUuMS0yNTYgMjU2TDM2NS4xIDMyMS42ek00NzcuOCAxMjhMMjU2IDEyOGMtNjIuOSAwLTExMy43IDQ0LjEtMTI1LjUgMTAyLjdMNTQuMiA5OC41QzEwMSAzOC41IDE3NCAwIDI1NiAwIDM1MC44IDAgNDMzLjUgNTEuNSA0NzcuOCAxMjh6TTM0NCAyNTZhODggODggMCAxIDEgLTE3NiAwIDg4IDg4IDAgMSAxIDE3NiAweiJdCiAgICB9OwogICAgZmFUcmFkZUZlZGVyYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHJhZGUtZmVkZXJhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTEzIiwgIk0yNTYgOC44YTI0Ny4yIDI0Ny4yIDAgMSAwIDAgNDk0LjQgMjQ3LjIgMjQ3LjIgMCAxIDAgMC00OTQuNHptMCAxMS42YTIzNS42IDIzNS42IDAgMSAxIDAgNDcxLjIgMjM1LjYgMjM1LjYgMCAxIDEgMC00NzEuMnpNNDExLjEgMTYzLjFsMC00Ni44LTE5My44IDAgMCA4MS43LTE1NS4xIDAgMzYuNyA0NiAxMTcuNyAwIDAgMTk2LjggNDguOCAwIDAtMTk1LjggODMuMyAwIDAtNDctODMuMyAwIDAtMzQuOCAxNDUuNyAwIDAtLjF6bS03My4zIDQ1LjFsMCAyMy45LTgyLjkgMCAwIDE5Ny40LTI2LjggMCAwLTE5Ny40LTEyMy44IDAtMjAuMS0yMy45IDE0My45IDAgMC04MC42IDE3MS44IDAgMCAyNC40LTE0NSAwIDAgNTYuMiA4Mi45IDB6bS0xNjEuMy02OWwtMTIuNC0yMC43IDIuMSAyMy44LTIzLjUgNS40IDIzLjMgNS40LTIuMSAyNCAxMi4zLTIwLjUgMjIuMiA5LjUtMTUuNy0xOC4xIDE1LjgtMTguMS0yMiA5LjN6bS0yOS42LTE5LjdsOS4zLTExLjUtMTIuNyA1LjktOC0xMi40IDEuNyAxMy45LTE0LjMgMy44IDEzLjcgMi43LS44IDE0LjcgNi44LTEyLjIgMTMuOCA1LjMtOS41LTEwLjJ6TTMxMi4zIDI2NC43bC0xMy4xIDUuNi03LjMtMTIuMiAxLjMgMTQuMi0xMy45IDMuMiAxMy45IDMuMi0xLjIgMTQuMiA3LjMtMTIuMiAxMy4xIDUuNS05LjQtMTAuNyA5LjMtMTAuOHptMTA2LjktNzcuMmwtMjAuOSA5LjEtMTItMTkuNiAyLjIgMjIuNy0yMi4zIDUuNCAyMi4yIDQuOS0xLjggMjIuOSAxMS41LTE5LjYgMjEuMiA4LjgtMTUuMS0xNyAxNS0xNy42ek0yNTYgMjkuOWEyMjYuMSAyMjYuMSAwIDEgMCAwIDQ1Mi4yIDIyNi4xIDIyNi4xIDAgMSAwIDAtNDUyLjJ6TTM1MC42IDE5NmwwIDUxLTgzLjMgMCAwIDE5NS43LTUyLjcgMCAwLTE5Ni44LTExNi43IDAtNDAtNDkuOSAxNTcuNCAwIDAtODEuNiAxOTcuOCAwIDAgNTAuNy0xNDUuNyAwIDAgMzAuOSA4My4yIDB6TTI1NiA0My4yYzYwLjMgMCAxMTQuOCAyNSAxNTMuNiA2NS4ybC0xOTkuMSAwIDAgODEuNi0xNTcuNCAwQzgxLjEgMTA0LjggMTYxLjQgNDMuMiAyNTYgNDMuMnptMCA0MjcuMWMtMTE3LjkgMC0yMTMuNi05NS42LTIxMy42LTIxMy41IDAtMjEuMiAzLjEtNDEuOCA4LjktNjEuMWw0My44IDU2LjMgMTE0LjcgMCAwIDE5Ni44IDY0LjYgMCAwLTE5NS44IDgzLjMgMCAwLTYyLjctODMuMiAwIDAtMTkuMiAxNDUuNiAwIDAtNTAuOGMzMC44IDM3IDQ5LjMgODQuNiA0OS4zIDEzNi41IC4xIDExNy45LTk1LjUgMjEzLjUtMjEzLjQgMjEzLjV6TTE4Ni44IDI3NWwtMTEtMjEuNCAxLjcgMjQuNS0yMy43IDMuOSAyMy44IDUuOS0zLjcgMjMuOCAxMy0yMC45IDIxLjUgMTAuOC0xNS44LTE4LjggMTYuOS0xNy4xLTIyLjcgOS4zeiJdCiAgICB9OwogICAgZmFWYWFkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmFhZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDgiLCAiTTIyNC41IDE0MC43QzIyNiAxMjMuMSAyMjkuNCA4OCAyNzQuMyA4OGw5OC42IDBjMjAuNyAwIDMyLjEtNy44IDMyLjEtMjEuNmwwLTEyLjNjMC0xMi4yIDkuMy0yMi4xIDIxLjUtMjIuMVM0NDggNDEuOSA0NDggNTQuMWwwIDM2LjVjMCA0Mi45LTIxLjUgNjItNjYuOCA2MmwtMTAwLjUgMGMtMzAuMSAwLTMzIDE0LjctMzMgMjcuMSAwIDEuMy0uMSAyLjUtLjIgMy43LS43IDEyLjMtMTAuOSAyMi4yLTIzLjQgMjIuMnMtMjIuNy05LjgtMjMuNC0yMi4yYy0uMS0xLjItLjItMi40LS4yLTMuNyAwLTEyLjMtMy0yNy4xLTMzLTI3LjFsLTEwMC43IDBDMjEuNSAxNTIuNiAwIDEzMy41IDAgOTAuNkwwIDU0LjFDMCA0MS45IDkuNCAzMiAyMS42IDMyczIxLjUgOS45IDIxLjUgMjIuMWwwIDEyLjNDNDMuMSA4MC4yIDU0LjUgODggNzUuMiA4OGw5OC42IDBjNDQuOCAwIDQ4LjMgMzUuMSA0OS44IDUyLjdsLjkgMHpNMjI0IDQ1NmMxMS41IDAgMjEuNC03IDI1LjctMTYuMyAxLjEtMS44IDk3LjEtMTY5LjYgOTguMi0xNzEuNCAxMS45LTE5LjYtMy4yLTQ0LjMtMjcuMi00NC4zLTEzLjkgMC0yMy4zIDYuNC0yOS44IDIwLjNMMjI0IDM2MiAxNTcuMSAyNDQuM2MtNi40LTEzLjktMTUuOS0yMC4zLTI5LjgtMjAuMy0yNCAwLTM5LjEgMjQuNi0yNy4yIDQ0LjMgMS4xIDEuOSA5Ny4xIDE2OS42IDk4LjIgMTcxLjQgNC4zIDkuMyAxNC4yIDE2LjMgMjUuNyAxNi4zeiJdCiAgICB9OwogICAgZmFEZXZpYW50YXJ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRldmlhbnRhcnQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjFiZCIsICJNMzIwIDkzLjJsLTk4LjIgMTc5LjEgNy40IDkuNSA5MC44IDAgMCAxMjcuNy0xNjAuOSAwLTEzLjUgOS4yLTQzLjcgODRjLS4zIDAtOC42IDguNi05LjIgOS4ybC05Mi43IDAgMC05My4yIDkzLjItMTc5LjQtNy40LTkuMi04NS44IDAgMC0xMjcuNiAxNTYgMCAxMy41LTkuMiA0My43LTg0Yy4zIDAgOC42LTguNiA5LjItOS4ybDk3LjYgMCAwIDkzLjF6Il0KICAgIH07CiAgICBmYU1lZGl1bSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWRpdW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjQwNywgIm1lZGl1bS1tIl0sICJmMjNhIiwgIk0zNjkuNCAzMmM0My40IDAgNzguNiAzNS4yIDc4LjYgNzguNmwwIDgzLjhjLTEuOS0uMS0zLjgtLjItNS43LS4ybC0uNCAwYy0xMCAwLTIyLjMgMi40LTMxLjEgNi44LTEwIDQuNi0xOC43IDExLjUtMjYgMjAuNi0xMS44IDE0LjYtMTguOSAzNC4zLTIwLjYgNTYuNC0uMSAuNy0uMSAxLjMtLjIgMnMtLjEgMS4yLS4xIDEuOWMtLjEgMS4yLS4xIDIuNC0uMSAzLjYgMCAxLjktLjEgMy44IDAgNS44IDEuMiA1MC4xIDI4LjIgOTAuMiA3Ni4zIDkwLjIgMi43IDAgNS4zLS4xIDcuOS0uNGwwIDIwLjRjMCA0My40LTM1LjIgNzguNi03OC42IDc4LjZMNzguNiA0ODBDMzUuMiA0ODAgMCA0NDQuOCAwIDQwMS40TDAgMTEwLjZDMCA2Ny4yIDM1LjIgMzIgNzguNiAzMmwyOTAuOCAwek04Mi4zIDEzOC45bC4zIC4xYzEzLjIgMyAxOS44IDcuNCAxOS44IDIzLjRsMCAxODcuMmMwIDE2LTYuNyAyMC40LTE5LjkgMjMuNGwtLjMgLjEgMCAyLjggNTIuOCAwIDAtMi44LS4zLS4xYy0xMy4yLTMtMTkuOS03LjQtMTkuOS0yMy40bDAtMTc2LjMgODYuMSAyMDIuNSA0LjkgMCA4OC42LTIwOC4yIDAgMTg2LjZjLTEuMSAxMi42LTcuOCAxNi41LTE5LjcgMTkuMmwtLjMgLjEgMCAyLjcgOTEuOSAwIDAtMi43LS4zLS4xYy0xMS45LTIuNy0xOC43LTYuNi0xOS45LTE5LjJsLS4xLTE5MS44IC4xIDBjMC0xNiA2LjctMjAuNCAxOS45LTIzLjRsLjMtLjEgMC0yLjctNzIuMiAwLTY3IDE1Ny40LTY3LTE1Ny40LTc3LjggMCAwIDIuN3pNNDQ4IDM0MC4zYy0yNS4xLTcuNC00My0zNS4xLTQxLjItNjcuOGwwIDAgNDEuMSAwIDAgNjcuOHptLTYuNC0xMzUuNmMyLjMgMCA0LjQgLjMgNi40IC45bDAgNTcuNC00MC4yIDBjMS41LTMzLjYgMTMuNi01Ny45IDMzLjgtNTguM3oiXQogICAgfTsKICAgIGZhTWVkaXVtTSA9IGZhTWVkaXVtOwogICAgZmFPcGVuY2FydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuY2FydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjNkIiwgIk0zMzEuOCA0NDAuNGE0NS44IDQ1LjggMCAxIDEgOTEuNSAuMyA0NS44IDQ1LjggMCAxIDEgLTkxLjUtLjN6TTE2OS40IDM5NC45YTQ1LjcgNDUuNyAwIDEgMCAuMyA5MS4zIDQ1LjcgNDUuNyAwIDEgMCAtLjMtOTEuM3ptMjkxLjctMjcwYy0zMDIuMiAwLTM3OS4yLTEyLjgtNDYxLjEtOTkuMiAzNC40IDUxLjcgNTMuMyAxNDguOSAzNzMuMSAxNDQuMiAzMzMuMy01IDEzMCA4Ni4xIDcwLjggMTg4LjkgMTg2LjctMTY2LjcgMzE5LjQtMjMzLjkgMTcuMi0yMzMuOXoiXQogICAgfTsKICAgIGZhWUNvbWJpbmF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieS1jb21iaW5hdG9yIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyM2IiLCAiTTQ0OCAzMmwwIDQ0OC00NDggMCAwLTQ0OCA0NDggMHpNMjM2IDI4Ny41bDc3LjUtMTQ1LjUtMzIuNyAwLTQ1LjggOTFjLTQuNyA5LjMtOSAxOC4zLTEyLjggMjYuOGwtMTIuMi0yNi44LTQ1LjItOTEtMzUgMCA3Ni43IDE0My44IDAgOTQuNSAyOS41IDAgMC05Mi44eiJdCiAgICB9OwogICAgZmFMaW5lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjMCIsICJNMzExIDE5Ni44bDAgODEuM2MwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTEuMyAwLTIuNC0uNy0zLTEuNUwyNTQgMjMwIDI1NCAyNzguMmMwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTIuMSAwLTMuNy0xLjYtMy43LTMuN2wwLTgxLjNjMC0yLjEgMS42LTMuNyAzLjctMy43bDEyLjkgMGMxLjEgMCAyLjQgLjYgMyAxLjZsMzcuMyA1MC4zIDAtNDguMmMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMTMgMGMyLjEtLjEgMy44IDEuNiAzLjggMy41bDAgLjF6bS05My43LTMuN2wtMTMgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMTMgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC04MS4zYzAtMS45LTEuNi0zLjctMy43LTMuN3ptLTMxLjQgNjguMWwtMzUuNiAwIDAtNjQuNGMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxIC4zIDEuOCAxIDIuNSAuNyAuNiAxLjUgMSAyLjUgMWw1Mi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjMC0xLjktMS42LTMuNy0zLjUtMy43bC4xIDB6bTE5My43LTY4LjFsLTUyLjMgMGMtMS45IDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDEuOSAxLjYgMy43IDMuNyAzLjdsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzLjFjMC0yLjEtMS42LTMuNy0zLjctMy43bC0zNS41IDAgMC0xMy42IDM1LjUgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNyAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjLS4xLTEuOS0xLjctMy43LTMuNy0zLjdsLjEgMHpNNTEyIDkzLjRsMCAzMjZjLS4xIDUxLjItNDIuMSA5Mi43LTkzLjQgOTIuNmwtMzI2IDBDNDEuNCA1MTEuOS0uMSA0NjkuOCAwIDQxOC42bDAtMzI2Qy4xIDQxLjQgNDIuMi0uMSA5My40IDBsMzI2IDBjNTEuMiAuMSA5Mi43IDQyLjEgOTIuNiA5My40ek00NDEuNiAyMzMuNWMwLTgzLjQtODMuNy0xNTEuMy0xODYuNC0xNTEuM1M2OC44IDE1MC4xIDY4LjggMjMzLjVjMCA3NC43IDY2LjMgMTM3LjQgMTU1LjkgMTQ5LjMgMjEuOCA0LjcgMTkuMyAxMi43IDE0LjQgNDIuMS0uOCA0LjctMy44IDE4LjQgMTYuMSAxMC4xczEwNy4zLTYzLjIgMTQ2LjUtMTA4LjJjMjctMjkuNyAzOS45LTU5LjggMzkuOS05My4xbDAtLjJ6Il0KICAgIH07CiAgICBmYUFtaWxpYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWlsaWEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM2ZCIsICJNMjQwLjIgMzJjLTYxLjkgMC0xMzEuNSAxNi45LTE4NC4yIDU1LjQtNS4xIDMuMS05LjEgOS4yLTcuMiAxOS40IDEuMSA1LjEgNS4xIDI3LjQgMTAuMiAzOS42IDQuMSAxMC4yIDE0LjIgMTAuMiAyMC4zIDYuMSAzMi41LTIyLjMgOTYuNS00Ny43IDE1Mi4zLTQ3LjcgNTcuOSAwIDU4LjkgMjguNCA1OC45IDczLjFsMCAzOC41QzIwMy4xIDIyNy43IDc4LjMgMjUxIDQ2LjggMjY0LjIgMTEuMyAyODAuNSAxNi40IDM1Ny43IDE2LjQgMzc2UzMxLjYgNDgwIDE0MS4zIDQ4MGM0Ny44IDAgMTEzLjctMjAuNyAxNTMuMy00Mi4xbDAgMjUuNGMwIDMgMi4xIDguMiA2LjEgOS4xIDMuMSAxIDUwLjcgMiA1OS45IDJzNjIuNSAuMyA2Ni41LS43YzQuMS0xIDUuMS02LjEgNS4xLTkuMWwwLTI5Ni42Yy0uMS04MC4zLTU3LjktMTM2LTE5Mi0xMzZ6bTUwLjIgMzQ4Yy0yMS40IDEzLjItNDguNyAyNC40LTc5LjEgMjQuNC01Mi44IDAtNTguOS0zMy41LTU5LTQ0LjcgMC0xMi4yLTMtNDIuNyAxOC4zLTUyLjkgMjQuMy0xMy4yIDc1LjEtMjkuNCAxMTkuOC0zMy41bDAgMTA2Ljd6Il0KICAgIH07CiAgICBmYUFzeW1tZXRyaWsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXN5bW1ldHJpayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzcyIiwgIk01MTcuNSAzMDkuMmMzOC44LTQwIDU4LjEtODAgNTguNS0xMTYuMSAuOC02NS41LTU5LjQtMTE4LjItMTY5LjQtMTM1LTEyOC43LTE5LjctMjg4LjUgMTUuNS00MDYuNiA4Mi40IDUyLTI2LjUgMTEwLjYtNDguMiAxNzAuNy01OC4yIDc0LjUtMjAuNSAxNTMtMjUuNCAyMjEuMy0xNC44IDE1Mi41IDIzLjggMTk2LjggMTI3LjUgOTguOCAyMzEuNy0xMC4yIDEwLjgtMjIgMjEuMS0zNSAzMC42TDMwNC45IDEwMy40IDExNC43IDM4OC45Yy02NS42LTI5LjQtNzYuNS05MC4yLTE5LjEtMTUxLjIgMjAuOC0yMi4yIDQ4LjMtNDEuOSA3OS41LTU4LjEgMjAtMTIuMiAzOS43LTIyLjYgNjItMzAuNy02NS4xIDIwLjMtMTIyLjcgNTIuOS0xNjEuNiA5Mi45LTI3LjcgMjguNi00MS40IDU3LjEtNDEuNyA4Mi45LS41IDM1LjEgMjMuNCA2NS4xIDY4LjQgODNsLTM0LjUgNTEuNyAxMDEuNiAwIDIyLTM0LjRjMjIuMiAxIDQ1LjMgMCA2OC42LTIuN2wtMjIuOCAzNy4xIDEzNS41IDAtMzIuNi01My4xYzE4LjYtNS4zIDM2LjktMTEuNSA1NC41LTE4LjdsNDUuOSA3MS44IDEwMS42IDAtNzMuNC0xMTAuNGMxOC41LTEyLjEgMzUtMjUuNSA0OC45LTM5Ljh6TTMyOS45IDM4OS43bC0yNS00MC42LTMyLjcgNTMuM2MtMjMuNCAzLjUtNDYuNyA1LjEtNjkuMiA0LjRsMTAxLjktMTU5LjMgNzguNyAxMjNjLTE3LjIgNy40LTM1LjMgMTMuOS01My43IDE5LjJ6Il0KICAgIH07CiAgICBmYVBoYWJyaWNhdG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBoYWJyaWNhdG9yIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZGIiLCAiTTMzMS4xIDI2Mi4xbC0uMS0xM3MyMS43LTE5LjggMjEuMS0yMS4ybC05LjUtMjBjLS42LTEuNC0yOS41LS41LTI5LjUtLjVsLTkuNC05LjNzLjItMjguNS0xLjItMjkuMWwtMjAuMS05LjJjLTEuNC0uNi0yMC43IDIxLTIwLjcgMjFsLTEzLjEtLjJzLTIwLjUtMjEuNC0yMS45LTIwLjhsLTIwIDguM2MtMS40IC41IC4yIDI4LjkgLjIgMjguOWwtOS4xIDkuMXMtMjkuMi0uOS0yOS43IC40TDE2MCAyMjYuM2MtLjYgMS40IDIxIDIxIDIxIDIxbC4xIDEyLjlTMTU5LjQgMjgwIDE2MCAyODEuNGw5LjUgMjBjLjYgMS40IDI5LjUgLjUgMjkuNSAuNWw5LjQgOS4zcy0uMiAzMS44IDEuMiAzMi4zbDIwLjEgOC4zYzEuNCAuNiAyMC43LTIzLjUgMjAuNy0yMy41bDEzLjEgLjJzMjAuNSAyMy44IDIxLjggMjMuM2wyMC03LjVjMS40LS42LS4yLTMyLjEtLjItMzIuMWw5LjEtOS4xczI5LjIgLjkgMjkuNy0uNWw4LjEtMTkuOGMuNy0xLjEtMjAuOS0yMC43LTIwLjktMjAuN3ptLTQ0LjktOC43Yy43IDE3LjEtMTIuOCAzMS42LTMwLjEgMzIuNHMtMzIuMS0xMi41LTMyLjgtMjkuNiAxMi44LTMxLjYgMzAuMS0zMi4zYzE3LjMtLjggMzIuMSAxMi41IDMyLjggMjkuNXptMjAxLjItMzcuOWwtOTctOTctLjEgLjFjLTc1LjEtNzMuMy0xOTUuNC03Mi44LTI2OS44IDEuNi01MC45IDUxLTI3LjggMjcuOS05NS43IDk1LjMtMjIuMyAyMi4zLTIyLjMgNTguNyAwIDgxIDY5LjkgNjkuNCA0Ni40IDQ2IDk3LjQgOTdsLjEtLjFjNzUuMSA3My4zIDE5NS40IDcyLjkgMjY5LjgtMS42IDUxLTUwLjkgMjcuOS0yNy45IDk1LjMtOTUuMyAyMi4zLTIyLjMgMjIuMy01OC43IDAtODF6TTM2My41IDE0OC4yYTE1Mi4zIDE1Mi4zIDAgMSAxIC0yMTUgMjE1LjYgMTUyLjMgMTUyLjMgMCAxIDEgMjE1LTIxNS42eiJdCiAgICB9OwogICAgZmFCb3RzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJvdHMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTM0MCIsICJNODYuMyAxOTcuOGMtOC0uMS0xNS45IDEuNy0yMy4xIDUuMXMtMTMuNSA4LjYtMTguNCAxNC45bDAtNjEuOWMwLTIuMi0uOS00LjMtMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yOC40IDBjLTIuMiAwLTQuMyAuOS01LjggMi40UzAgMTUzLjggMCAxNTZMMCAzMzMuNmMwIDEuMSAuMiAyLjEgLjYgMy4xczEgMS45IDEuOCAyLjcgMS43IDEuNCAyLjcgMS44IDIuMSAuNiAzLjEgLjZsMjguNCAwYzEuMSAwIDIuMS0uMiAzLjEtLjZzMS45LTEgMi43LTEuOCAxLjQtMS43IDEuOC0yLjcgLjYtMi4xIC42LTMuMWwwLTguMWMxMS42IDEzLjQgMjUuOSAxOS44IDQxLjYgMTkuOCAzNC42IDAgNjEuOS0yNi4yIDYxLjktNzMuOCAwLTQ1LjktMjctNzMuNi02MS45LTczLjZ6TTcxLjUgMzA1LjdjLTkuNiAwLTIxLjItNC45LTI2LjctMTIuNWwwLTQzYzUuNS03LjYgMTcuMi0xMi44IDI2LjctMTIuOCAxNy43IDAgMzEuMSAxMy4xIDMxLjEgMzQgMCAyMS4yLTEzLjQgMzQuMy0zMS4xIDM0LjN6bTE1Ni40LTU5YTE3LjQgMTcuNCAwIDEgMCAwIDM0LjggMTcuNCAxNy40IDAgMSAwIDAtMzQuOHptNDYuMS05MGwwLTQ0LjdjMi44LTEuMiA1LjItMy4zIDYuNi02czEuOS01LjggMS4zLTguOS0yLjItNS43LTQuNi03LjctNS40LTMtOC40LTMtNi4xIDEuMS04LjQgMy00IDQuNy00LjYgNy43LS4xIDYuMSAxLjMgOC45IDMuOCA0LjggNi42IDZsMCA0NC43Yy0yOCAxLjMtNTQuNCAxMy42LTczLjYgMzQuMXMtMjkuNSA0Ny43LTI4LjggNzUuOCAxMi4zIDU0LjcgMzIuNCA3NC4zIDQ3IDMwLjYgNzUuMSAzMC42IDU1LTExIDc1LjEtMzAuNiAzMS43LTQ2LjMgMzIuNC03NC4zLTkuNy01NS4zLTI4LjgtNzUuOC00NS41LTMyLjgtNzMuNi0zNC4xem04NiAxMDcuNGMwIDMwLjUtNDAuOCA1NS4zLTkxLjEgNTUuM3MtOTEuMS0yNC43LTkxLjEtNTUuMyA0MC44LTU1LjMgOTEuMS01NS4zIDkxLjEgMjQuNyA5MS4xIDU1LjNsMCAwem0tNTAuMiAxNy40YzMuNCAwIDYuOC0xIDkuNy0yLjlzNS4xLTQuNiA2LjQtNy44IDEuNy02LjcgMS0xMC4xLTIuMy02LjUtNC44LTguOS01LjUtNC4xLTguOS00LjgtNi45LS4zLTEwLjEgMS01LjkgMy41LTcuOCA2LjQtMi45IDYuMi0yLjkgOS43YzAgNC42IDEuOCA5IDUuMSAxMi4zczcuNyA1LjEgMTIuMyA1LjFsMCAwem0yNzAuOS0zMWMtMTQuOC0yLjYtMjIuNC0zLjgtMjIuNC05LjkgMC01LjUgNy4zLTkuOSAxNy43LTkuOSAxMi4yIC4xIDI0LjIgMy42IDM0LjUgMTAuMSAxLjggMS4yIDQgMS42IDYuMiAxLjFzNC0xLjcgNS4xLTMuNmMuMS0uMSAuMS0uMiAuMi0uM2w4LjYtMTQuOWMxLjEtMS45IDEuNC00LjEgLjgtNi4xcy0xLjktMy45LTMuNy01Yy0xNS43LTkuNC0zMy43LTE0LjMtNTItMTQuMS0zOSAwLTYwLjIgMjEuNS02MC4yIDQ2LjIgMCAzNi4zIDMzLjcgNDEuOSA1Ny42IDQ1LjYgMTMuNCAyLjMgMjQuMSA0LjQgMjQuMSAxMSAwIDYuNC01LjUgMTAuOC0xOC45IDEwLjgtMTMuNiAwLTMxLTYuMi00Mi42LTEzLjYtLjktLjYtMS45LTEtMy0xLjJzLTIuMS0uMi0zLjIgLjEtMi4xIC43LTIuOSAxLjMtMS42IDEuNC0yLjIgMi4zYzAgLjEtLjEgLjEtLjEgLjJsLTEwLjIgMTYuOWMtMS4xIDEuOC0xLjQgNC0xIDZzMS43IDMuOSAzLjUgNWMxNS4yIDEwLjMgMzcuNyAxNi43IDU5LjQgMTYuNyA0MC40IDAgNjQtMTkuOCA2NC00Ni41IDAtMzguMS0zNS41LTQzLjktNTkuMy00OC4zem0tOTUuOSA2MC44Yy0uNS0yLTEuOC0zLjctMy42LTQuOHMtMy45LTEuNS01LjktMS4xYy0xLjQgLjMtMi44IC40LTQuMiAuNC03LjggMC0xMi41LTYuMS0xMi41LTE0LjJsMC01MS4yIDIwLjMgMGMyLjIgMCA0LjItLjkgNS44LTIuNHMyLjQtMy42IDIuNC01LjhsMC0yMi43YzAtMi4yLS45LTQuMi0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTIwLjMgMCAwLTMwLjJjMC0yLjItLjktNC4yLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjguMiAwYy0yLjIgMC00LjIgLjktNS44IDIuNHMtMi40IDMuNi0yLjQgNS44bDAgMzAuMi0xNS4xIDBjLTEuMSAwLTIuMSAuMi0zLjEgLjZzLTEuOSAxLTIuNiAxLjgtMS40IDEuNy0xLjggMi42LS42IDItLjYgMy4xbDAgMjIuN2MwIDEuMSAuMiAyLjEgLjYgMy4xczEgMS45IDEuOCAyLjYgMS43IDEuNCAyLjYgMS44IDIgLjYgMy4xIC42bDE1LjEgMCAwIDYzLjdjMCAyNyAxNS40IDQxLjMgNDMuOSA0MS4zIDEyLjIgMCAyMS40LTIuMiAyNy42LTUuNCAxLjYtLjggMi45LTIuMiAzLjctMy45cy45LTMuNiAuNS01LjRsLTUtMTkuM3oiXQogICAgfTsKICAgIGZhVmluZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW5lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxY2EiLCAiTTM4NCAyNTQuN2wwIDUyLjFjLTE4LjQgNC4yLTM2LjkgNi4xLTUyLjEgNi4xLTM2LjkgNzcuNC0xMDMgMTQzLjgtMTI1LjEgMTU2LjItMTQgNy45LTI3LjEgOC40LTQyLjctLjgtMjcuMS0xNi4zLTEyOS45LTEwMC42LTE2NC4xLTM2NS42bDc0LjUgMGMxOC43IDE1OS4xIDY0LjUgMjQwLjcgMTE0LjggMzAxLjggMjcuOS0yNy45IDU0LjgtNjUuMSA3NS42LTEwNi45LTQ5LjgtMjUuMy04MC4xLTgwLjktODAuMS0xNDUuNiAwLTY1LjYgMzcuNy0xMTUuMSAxMDIuMi0xMTUuMSAxMTQuOSAwIDEwNi4yIDEyNy45IDgxLjYgMTgxLjUgMCAwLTQ2LjQgOS4yLTYzLjUtMjAuNSAzLjQtMTEuMyA4LjItMzAuOCA4LjItNDguNSAwLTMxLjMtMTEuMy00Ni42LTI4LjQtNDYuNi0xOC4yIDAtMzAuOCAxNy4xLTMwLjggNTAgLjEgNzkuMiA1OS40IDExOC43IDEyOS45IDEwMS45eiJdCiAgICB9OwogICAgZmFNZWRydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWRydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2M4IiwgIk0xMjkuNyAyNTZjMCAxMjEuOCA4My45IDIyMi44IDE5My41IDI0MS4xLTE4LjcgNC41LTM4LjIgNi45LTU4LjIgNi45LTEzNy42IDAtMjQ5LTExMS0yNDktMjQ4UzEyNy40IDggMjY0LjkgOGMyMC4xIDAgMzkuNiAyLjQgNTguMiA2LjktMTA5LjYgMTguMy0xOTMuNCAxMTkuMy0xOTMuNCAyNDEuMXpNNDI3LjEgMzU2LjNjLTc3LjcgNTUuNC0xNzkuNiA0Ny41LTI0MC40LTE0LjYgNS41IDE0LjEgMTIuNyAyNy43IDIxLjcgNDAuNSA2MS42IDg4LjIgMTgyLjQgMTA5LjMgMjY5LjcgNDdzMTA4LjEtMTg0LjMgNDYuNS0yNzIuNmMtOS0xMi45LTE5LjMtMjQuMy0zMC41LTM0LjIgMzcuNCA3OC44IDEwLjcgMTc4LjUtNjcgMjMzLjl6bS0yMTguOC0yNDRjLTEuNCAxLTIuNyAyLjEtNCAzLjEgNjQuMy0xNy44IDEzNS45IDQgMTc4LjkgNjAuNSAzNS43IDQ3IDQyLjkgMTA2LjYgMjQuNCAxNTggNTYuNy01Ni4yIDY3LjYtMTQyLjEgMjIuMy0yMDEuOC01MC02NS41LTE0OS4xLTc0LjQtMjIxLjYtMTkuOHpNMzEyIDIyNGMtNC40IDAtOC0zLjYtOC04bDAtNDBjMC00LjQtMy42LTgtOC04bC00OCAwYy00LjQgMC04IDMuNi04IDhsMCA0MGMwIDQuNC0zLjYgOC04IDhsLTQwIDBjLTQuNCAwLTggMy42LTggOGwwIDQ4YzAgNC40IDMuNiA4IDggOGw0MCAwYzQuNCAwIDggMy42IDggOGwwIDQwYzAgNC40IDMuNiA4IDggOGw0OCAwYzQuNCAwIDgtMy42IDgtOGwwLTQwYzAtNC40IDMuNi04IDgtOGw0MCAwYzQuNCAwIDgtMy42IDgtOGwwLTQ4YzAtNC40LTMuNi04LTgtOGwtNDAgMHoiXQogICAgfTsKICAgIGZhT3NpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9zaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDFhIiwgIk04IDI2Ni40YzIuMy0xMzUuOCA5Ny40LTIzMi40IDIxMy44LTI0OC4xIDEzOC44LTE4LjYgMjU1LjYgNzUuOCAyNzggMjAxLjEgMjEuMyAxMTguOC00NCAyMzAtMTUxLjYgMjc0LTkuMyAzLjgtMTQuNCAxLjctMTgtNy43LTE3LjgtNDYuMy0zNS42LTkyLjYtNTMuNC0xMzktMy4xLTguMS0xLTEzLjIgNy0xNi44IDI0LjItMTEgMzkuMy0yOS40IDQzLjMtNTUuOCAxLjUtOS43IDEtMTkuNi0xLjUtMjkuMXMtNi45LTE4LjQtMTIuOS0yNi4xLTEzLjYtMTQuMS0yMi4yLTE4LjgtMTguMS03LjUtMjcuOS04LjNjLTM5LTMuNC03MS44IDIzLjctNzcuNSA1OS43LTUuMiAzMyAxMS4xIDYzLjcgNDEuOSA3Ny43IDkuNiA0LjQgMTEuNSA4LjYgNy44IDE4LjQtMTcuOSA0Ni42LTM1LjggOTMuMi01My43IDEzOS45LTIuNiA2LjktOC4zIDkuMy0xNS41IDYuNS01Mi42LTIwLjMtMTAxLjQtNjEtMTMwLjgtMTE5LTI0LjktNDkuMi0yNS4yLTg3LjctMjYuOC0xMDguN3ptMjAuOS0xLjljLjQgNi42IC42IDE0LjMgMS4zIDIyLjEgNi4zIDcxLjkgNDkuNiAxNDMuNSAxMzEgMTgzLjEgMy4yIDEuNSA0LjQgLjggNS42LTIuMyAxNC45LTM5LjEgMjkuOS03OC4yIDQ1LTExNy4zIDEuMy0zLjMgLjYtNC44LTIuNC02LjctMzEuNi0xOS45LTQ3LjMtNDguNS00NS42LTg2IDEtMjEuNiA5LjMtNDAuNSAyMy44LTU2LjMgMzAtMzIuNyA3Ny0zOS44IDExNS41LTE3LjYgMTUuNiA5IDI4LjIgMjIuMyAzNi4yIDM4LjRzMTEuMiAzNC4yIDkgNTJjLTMuNiAzMC42LTE5LjMgNTMuOS00NS43IDY5LjgtMi43IDEuNi0zLjUgMi45LTIuMyA2IDE1LjIgMzkuMiAzMC4zIDc4LjQgNDUuMiAxMTcuNyAxLjIgMy4xIDIuNCAzLjggNS42IDIuMyAzNS41LTE2LjYgNjUuMi00MC4zIDg4LjEtNzIgMzQuOC00OC4yIDQ5LjEtMTAxLjkgNDIuMy0xNjEtMTMuNy0xMTcuNS0xMTkuNC0yMTQuOC0yNTUuNS0xOTgtMTA2LjEgMTMtMTk1LjMgMTAyLjUtMTk3LjEgMjI1Ljh6Il0KICAgIH07CiAgICBmYUdnID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjAiLCAiTTE3OS4yIDIzMC40bDEwMi40IDEwMi40LTEwMi40IDEwMi40LTE3OS4yLTE3OS4yIDE3OS4yLTE3OS4yIDQ0LjggNDQuOC0yNS42IDI1LjYtMTkuMi0xOS4yLTEyOCAxMjggMTI4IDEyOCA1MS41LTUxLjUtNzcuMS03Ni41IDI1LjYtMjUuNnpNMzMyLjggNzYuOGwtMTAyLjQgMTAyLjQgMTAyLjQgMTAyLjQgMjUuNi0yNS42LTc3LjEtNzYuNSA1MS41LTUxLjUgMTI4IDEyOC0xMjggMTI4LTE5LjItMTkuMi0yNS42IDI1LjYgNDQuOCA0NC44IDE3OS4yLTE3OS4yLTE3OS4yLTE3OS4yeiJdCiAgICB9OwogICAgZmFCdXlzZWxsYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1eXNlbGxhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIwZCIsICJNMjI0IDE1MC43bDQyLjkgMTYwLjctODUuOCAwIDQyLjktMTYwLjd6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM4Mi43IDQwNS4zbC05NC41LTI5OC43LTEyOC40IDAtOTQuNSAyOTguNyA5MC43IDAgMTExLjctOTEuNiAyNC4yIDkxLjYgOTAuOCAweiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyYjMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTg1LjMgMzgwYy0zMi45IDAtNjQuNC0xMy4xLTg3LjctMzYuM3MtMzYuMy01NC44LTM2LjMtODcuNyAxMy4xLTY0LjQgMzYuMy04Ny43IDU0LjgtMzYuMyA4Ny43LTM2LjNjMzEuMyAwIDYwLjEgMTEgODMgMzIuM2wtMzMuNiAzMi42Yy0xMy4yLTEyLjktMzEuMy0xOS4xLTQ5LjQtMTkuMS00Mi45IDAtNzcuMiAzNS41LTc3LjIgNzguMVMxNDIuMyAzMzQgMTg1LjMgMzM0YzMyLjYgMCA2NC45LTE5LjEgNzAuMS01My4zbC03MC4xIDAgMC00Mi42IDExNi45IDBjMS4zIDYuOCAxLjkgMTMuOCAxLjkgMjAuNyAwIDcwLjgtNDcuNSAxMjEuMi0xMTguOCAxMjEuMnpNNDE1LjUgMjczLjhsMCAzNS41LTM1LjUgMCAwLTM1LjUtMzUuNSAwIDAtMzUuNSAzNS41IDAgMC0zNS41IDM1LjUgMCAwIDM1LjUgMzUuMiAwIDAgMzUuNS0zNS4yIDB6Il0KICAgIH07CiAgICBmYVNjcmVlbnBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY3JlZW5wYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MCIsICJNMjc4LjYgMjIuNWEyMi41IDIyLjUgMCAxIDEgLTQ1IDAgMjIuNSAyMi41IDAgMSAxIDQ1IDB6TTE5OC43IDI1OWE1Ny40IDU3LjQgMCAxIDEgMTE0LjggMCA1Ny40IDU3LjQgMCAxIDEgLTExNC44IDB6bTEzOC42IDkxYzIyLjMtMTkuOSAzNi41LTQ3LjMgMzkuOS03N2wxMTkuNSAwYy0zLjUgNjEuNC0zMC40IDExOS4yLTc1LjIgMTYxLjQtNDQuNyA0Mi4yLTEwMy45IDY1LjgtMTY1LjQgNjUuOFMxMzUuNCA0NzYuNiA5MC43IDQzNC40QzQ1LjkgMzkyLjIgMTkuMSAzMzQuNCAxNS41IDI3M2wxMTkuNyAwYzMuNCAyOS43IDE3LjYgNTcuMSAzOS45IDc3czUxLjIgMzAuOSA4MS4xIDMwLjljMjkgMCA1OC43LTExIDgxLjEtMzAuOXpNMjguMyAxNDEuN2EyMi41IDIyLjUgMCAxIDEgNDUtMS40IDIyLjUgMjIuNSAwIDEgMSAtNDUgMS40em00NTUuNi0uN2EyMi40IDIyLjQgMCAxIDEgLTQ0LjkgMCAyMi40IDIyLjQgMCAxIDEgNDQuOSAwek0zMTggOTUuM2MtMTcuMyAxMy44LTM5LjIgMjIuOC02MS45IDIyLjhzLTQ0LjYtOS02MS45LTIyLjhjLTE3LjMtMTQuNy0yOC44LTM1LjEtMzIuNC01Ny41IDE1LjEtNi40IDMwLjgtMTEuMyA0Ni45LTE0LjUgMCAxMi42IDUgMjQuNiAxMy45IDMzLjVzMjAuOSAxMy45IDMzLjUgMTMuOSAyNC42LTUgMzMuNS0xMy45IDEzLjktMjAuOSAxMy45LTMzLjVjMTYuMSAzLjIgMzEuOCA4LjEgNDYuOSAxNC41LTMuNiAyMi40LTE1LjEgNDIuOC0zMi40IDU3LjV6TTgyLjkgMjMxYy0yMS40IDcuNi00NC43IDcuNC02NS45LS42IDItMTYuMyA1LjYtMzIuMyAxMC44LTQ3LjkgNS40IDMuMSAxMS4zIDUuMSAxNy41IDYgNi4yIC44IDEyLjQgLjQgMTguNS0xLjIgNi0xLjcgMTEuNi00LjQgMTYuNi04LjJzOS4xLTguNSAxMi4yLTEzLjkgNS4xLTExLjQgNi0xNy41Yy44LTYuMiAuNC0xMi41LTEuMi0xOC41cy00LjQtMTEuNi04LjItMTYuNmMtMy44LTQuOS04LjUtOS4xLTEzLjktMTIuMiAxMC44LTEyLjMgMjIuOS0yMy41IDM2LTMzLjMgMTcuNiAxNC4zIDI5LjUgMzQuNSAzMy42IDU2LjhzLjEgNDUuNC0xMS4yIDY1Yy0xMS40IDE5LjYtMjkuNCAzNC41LTUwLjcgNDIuMXptMzQ2LjQgLjFjLTIxLjMtNy42LTM5LjMtMjIuNi01MC43LTQyLjItMTEuMy0xOS42LTE1LjItNDIuNy0xMS4xLTY1IDQuMS0yMi4yIDE2LTQyLjQgMzMuNS01Ni43IDEzLjEgOS44IDI1LjIgMjEgMzYgMzMuMy0xMC43IDYuNC0xOC40IDE2LjctMjEuNSAyOC44LTMuMiAxMi0yLjMgMjQuOCA0LjggMzUuNiA2LjIgMTAuOCAxNi40IDE4LjcgMjguNCAyMnMyNC45IDEuNyAzNS43LTQuM2M1LjMgMTUuNSA4LjkgMzEuNiAxMC45IDQ3LjgtMjIuMSA4LjEtNDQuNiA4LjMtNjYgLjd6Il0KICAgIH07CiAgICBmYUJpdGNvaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYml0Y29pbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzc5IiwgIk04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNTQuMy0zNS4zYzQuOS0zMy0yMC4yLTUwLjctNTQuNi02Mi42bDExLjEtNDQuNy0yNy4yLTYuOC0xMC45IDQzLjVjLTcuMi0xLjgtMTQuNS0zLjUtMjEuOC01LjFsMTAuOS00My44LTI3LjItNi44LTExLjIgNDQuN2MtNS45LTEuMy0xMS43LTIuNy0xNy40LTQuMWwwLS4xLTM3LjUtOS40LTcuMiAyOS4xczIwLjIgNC42IDE5LjggNC45YzExIDIuOCAxMyAxMCAxMi43IDE1LjhsLTEyLjcgNTAuOWMuOCAuMiAxLjcgLjUgMi44IC45LS45LS4yLTEuOS0uNS0yLjktLjdsLTE3LjggNzEuM2MtMS4zIDMuMy00LjggOC40LTEyLjUgNi41IC4zIC40LTE5LjgtNC45LTE5LjgtNC45bC0xMy41IDMxLjEgMzUuNCA4LjhjNi42IDEuNyAxMyAzLjQgMTkuNCA1bC0xMS4zIDQ1LjIgMjcuMiA2LjggMTEuMi00NC43YzcuMiAyIDE0LjQgMy44IDIxLjcgNS42bC0xMS4xIDQ0LjUgMjcuMiA2LjggMTEuMy00NS4xYzQ2LjQgOC44IDgxLjMgNS4yIDk2LTM2LjcgMTEuOC0zMy44LS42LTUzLjMtMjUtNjYgMTcuOC00LjEgMzEuMi0xNS44IDM0LjctMzkuOXptLTYyLjIgODcuMmMtOC40IDMzLjgtNjUuMyAxNS41LTgzLjggMTAuOWwxNC45LTU5LjljMTguNCA0LjYgNzcuNiAxMy43IDY4LjggNDl6bTguNC04Ny43Yy03LjcgMzAuNy01NSAxNS4xLTcwLjQgMTEuM2wxMy41LTU0LjNjMTUuNCAzLjggNjQuOCAxMSA1Ni44IDQzeiJdCiAgICB9OwogICAgZmFTd2lmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzd2lmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmOGUxIiwgIk00NDggMTU2LjFjMC00LjUtLjEtOS0uMi0xMy41LS4xLTkuOS0xLTE5LjctMi42LTI5LjQtMS43LTkuNy00LjgtMTkuMi05LjItMjgtOS0xNy43LTIzLjQtMzIuMS00MS4yLTQxLjEtOC44LTQuNS0xOC4zLTcuNi0yOC05LjItOS43LTEuNi0xOS42LTIuNS0yOS40LTIuNi00LjUtLjEtOS0uMi0xMy41LS4yTDEyNC4xIDMyYy00LjUgMC05IC4xLTEzLjUgLjItMi40IC4xLTQuOSAuMi03LjQgLjMtNy40IC4zLTE0LjggMS4xLTIyLjEgMi4zLTcuMyAxLjMtMTQuNCAzLjMtMjEuMiA2LjEtMi4zIDEtNC42IDItNi44IDMuMS02LjYgMy40LTEyLjggNy41LTE4LjQgMTIuMy0xLjkgMS42LTMuNyAzLjMtNS40IDUtNyA3LTEyLjkgMTUtMTcuNCAyMy44LTQuNCA4LjgtNy42IDE4LjMtOS4yIDI4LTEuNiA5LjctMi40IDE5LjYtMi41IDI5LjQtLjEgNC41LS4yIDktLjIgMTMuNUwwIDM1NS45YzAgNC41IC4xIDkgLjIgMTMuNSAuMSA5LjkgMSAxOS43IDIuNiAyOS40IDEuNyA5LjcgNC44IDE5LjIgOS4yIDI4IDkgMTcuNyAyMy40IDMyLjEgNDEuMSA0MS4xIDguOCA0LjQgMTguMyA3LjUgMjggOS4yIDkuNyAxLjYgMTkuNiAyLjUgMjkuNCAyLjYgNC41IC4xIDkgLjIgMTMuNSAuMmwxOTkuOCAwYzQuNSAwIDktLjEgMTMuNS0uMiA5LjktLjEgMTkuNy0xIDI5LjQtMi42IDkuNy0xLjcgMTkuMi00LjggMjgtOS4yIDE3LjctOSAzMi4xLTIzLjQgNDEuMS00MS4yIDQuNC04LjggNy42LTE4LjMgOS4yLTI4IDEuNi05LjcgMi41LTE5LjYgMi42LTI5LjQgLjEtNC41IC4yLTkgLjItMTMuNWwwLTE4My44YzAtNS40IDAtMTAuNyAwLTE2em0tNjkuOSAyNDFjLTIwLTM4LjktNTcuMi0yOS4zLTc2LjMtMTkuNS0xLjcgMS0zLjUgMi01LjIgM2wtLjQgLjJjLTM5LjUgMjEtOTIuNSAyMi41LTE0NS44LS40LTQzLjQtMTguOC04MC4xLTUwLjMtMTA1LjMtOTAuNCAxMi4zIDkuMSAyNS40IDE2LjkgMzkuMiAyMy40IDU2LjQgMjYuNCAxMTMgMjQuNSAxNTMgMC01Ny00My44LTEwNC42LTEwMS0xNDEuMS0xNDcuMi03LTguMS0xMy4yLTE2LjgtMTguOC0yNS45IDQzLjcgNDAgMTEyLjcgOTAuMiAxMzcuNSAxMDQuMS01Mi42LTU1LjUtOTguOS0xMjMuOS05Ni43LTEyMS43IDgyLjggODMuNCAxNTkuMiAxMzAuNiAxNTkuMiAxMzAuNiAyLjkgMS42IDUgMi44IDYuNyA0IDEuNi00LjEgMy04LjIgNC4yLTEyLjUgMTMuMi00OC4zLTEuNy0xMDMuNi0zNS4zLTE0OS4yIDc2LjggNDYuMSAxMjIuMiAxMzMuNyAxMDMuNiAyMDcuOC0uNCAxLjctMSAzLjQtMS40IDUuMSAzOC41IDQ3LjQgMjggOTguMiAyMy4xIDg4LjZsMCAweiJdCiAgICB9OwogICAgZmFGaWxlc1BpbndoZWVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpbGVzLXBpbndoZWVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OWYiLCAiTTI1My41IDI0Ni40TDEzNy4yIDEzMC4yYy0uNi0uNi0xLTEuMy0xLjQtMnMtLjUtMS42LS41LTIuNCAuMi0xLjYgLjUtMi40IC44LTEuNCAxLjQtMkwyNTMuNiA1LjFjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAyMzIuNWMwIDEuMy0uMyAyLjUtMSAzLjZzLTEuNyAxLjktMi45IDIuNC0yLjUgLjYtMy43IC4zLTIuNC0uOS0zLjItMS45em00MC4zLTQuNGwwLTEzNC40YzAtLjggLjEtMS42IC41LTIuNHMuOC0xLjUgMS4zLTIuMSAxLjMtMS4xIDItMS40IDEuNi0uNSAyLjQtLjVsMTM0LjQgMGMxLjIgMCAyLjUgLjQgMy41IDEuMXMxLjggMS43IDIuMyAyLjggLjYgMi40IC4zIDMuNi0uOSAyLjMtMS43IDMuMkwzMDQuMyAyNDYuNGMtLjkgLjgtMiAxLjQtMy4yIDEuNnMtMi40IC4xLTMuNS0uNC0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy40bC4xIC4xem0zMC42IDM1Yy0xLjIgMC0yLjUtLjMtMy41LTFzLTEuOS0xLjYtMi40LTIuOC0uNi0yLjQtLjQtMy42IC44LTIuMyAxLjctMy4yTDQwNCAxODIuMmMuNi0uNiAxLjMtMSAyLTEuNHMxLjYtLjUgMi40LS41IDEuNiAuMiAyLjQgLjUgMS40IC44IDIgMS40bDg0LjQgODQuMmMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTY4LjUgMCAuMS0uMXptOTAuNyAxMzFsLTk1LjMtOTUuMmMtLjktLjktMS41LTItMS43LTMuMnMtLjEtMi41IC40LTMuNyAxLjMtMi4xIDIuNC0yLjggMi4zLTEgMy41LTFsOTUuMiAwYzEuNyAwIDMuMiAuNyA0LjQgMS44czEuOCAyLjggMS44IDQuNGwwIDk1LjNjMCAxLjItLjQgMi41LTEuMSAzLjVzLTEuNyAxLjgtMi44IDIuMy0yLjQgLjYtMy42IC4zLTIuMy0uOS0zLjItMS43ek0xNi44IDMwMi4xbDIxNi45IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjggMi4zLTEuNyAzLjJMMTI5LjcgNDIxLjJjLS42IC42LTEuMyAxLTIgMS40cy0xLjYgLjUtMi40IC41LTEuNi0uMi0yLjQtLjUtMS40LS44LTItMS40TDEyLjMgMzEyLjhjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjYgMS4zLTIuMSAyLjMtMi44IDIuMy0xIDMuNS0xbDAtLjF6TTI2NC4zIDQ2NS4zYzAgLjgtLjIgMS42LS41IDIuNHMtLjggMS41LTEuNCAyLTEuMyAxLTIgMS40LTEuNiAuNS0yLjQgLjVsLTEyOCAwYy0xLjIgMC0yLjUtLjQtMy41LTEuMXMtMS44LTEuNy0yLjMtMi44LS42LTIuNC0uMy0zLjYgLjgtMi4zIDEuNy0zLjJsMTI4LTEyOGMuOS0uOSAyLTEuNSAzLjItMS43czIuNS0uMSAzLjYgLjMgMi4xIDEuMyAyLjggMi4zIDEuMSAyLjIgMS4xIDMuNWwwIDEyOHptNDAtMTMyLjVsODIuOCA4Mi43Yy42IC42IDEgMS4zIDEuNCAycy41IDEuNiAuNSAyLjQtLjIgMS42LS41IDIuNC0uOCAxLjQtMS40IDJMMzA0LjMgNTA3Yy0uOSAuOS0yIDEuNS0zLjIgMS43cy0yLjUgLjEtMy42LS4zLTIuMS0xLjMtMi44LTIuMy0xLjEtMi4yLTEuMS0zLjVsMC0xNjUuNGMwLTEuMiAuNC0yLjUgMS4xLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uMyAyLjMgLjggMy4yIDEuN3pNNzkgMTIyLjRjMC0xLjIgLjMtMi41IDEtMy41czEuNy0xLjggMi44LTIuMyAyLjQtLjYgMy42LS40IDIuMyAuOCAzLjIgMS43TDIzOC4xIDI2Ni40Yy45IC45IDEuNSAyIDEuNyAzLjJzLjEgMi41LS4zIDMuNi0xLjMgMi4xLTIuMyAyLjgtMi4yIDEuMS0zLjUgMS4xbC0xNDguNCAwYy0xLjcgMC0zLjItLjctNC40LTEuOHMtMS44LTIuOC0xLjgtNC40bDAtMTQ4LjQtLjEtLjF6Il0KICAgIH07CiAgICBmYUxhcmF2ZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGFyYXZlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2JkIiwgIk01MDQuNiAxMTUuOGMtLjEtLjItLjItLjUtLjMtLjctLjEtLjQtLjMtLjgtLjUtMS4yLS4yLS4yLS4zLS41LS41LS43LS4yLS4zLS41LS42LS43LS45LS4yLS4yLS41LS40LS44LS42LS4zLS4yLS42LS41LS45LS43TDQwNC42IDU1LjVjLTEuMi0uNy0yLjYtMS4xLTQtMS4xcy0yLjggLjQtNCAxLjFMMzAwLjMgMTExYy0uMyAuMi0uNiAuNC0uOSAuNy0uMyAuMi0uNSAuNC0uOCAuNi0uMyAuMy0uNSAuNi0uNyAuOS0uMiAuMi0uNCAuNC0uNSAuNy0uMiAuNC0uNCAuOC0uNSAxLjItLjEgLjItLjIgLjQtLjMgLjctLjIgLjctLjMgMS40LS4zIDIuMWwwIDEwNS4yLTgwLjIgNDYuMiAwLTIwNS45YzAtLjctLjEtMS40LS4zLTIuMS0uMS0uMi0uMi0uNC0uMy0uNy0uMS0uNC0uMy0uOC0uNS0xLjItLjEtLjMtLjQtLjUtLjUtLjctLjItLjMtLjUtLjYtLjctLjktLjItLjItLjUtLjQtLjgtLjYtLjMtLjItLjYtLjUtLjktLjdMMTE1LjggMS4xYy0xLjItLjctMi42LTEuMS00LTEuMXMtMi44IC40LTQgMS4xTDExLjUgNTYuNWMtLjMgLjItLjYgLjQtLjkgLjctLjMgLjItLjUgLjQtLjggLjYtLjMgLjMtLjUgLjYtLjcgLjktLjIgLjMtLjQgLjUtLjYgLjctLjIgLjQtLjQgLjgtLjUgMS4yLS4xIC4yLS4yIC40LS4zIC43LS4yIC43LS4zIDEuNC0uMyAyLjFsMCAzMjkuN2MwIDEuNCAuNCAyLjggMS4xIDRzMS43IDIuMiAyLjkgMi45TDIwNCA1MTAuOWMuNCAuMiAuOSAuNCAxLjMgLjUgLjIgLjEgLjQgLjIgLjYgLjMgMS4zIC40IDIuOCAuNCA0LjEgMCAuMi0uMSAuNC0uMiAuNi0uMiAuNS0uMiAxLS4zIDEuNC0uNkw0MDQuNiA0MDAuMWMxLjItLjcgMi4yLTEuNyAyLjktMi45czEuMS0yLjYgMS4xLTRsMC0xMDUuMyA5Mi4yLTUzLjFjMS4yLS43IDIuMi0xLjcgMi45LTNzMS4xLTIuNiAxLjEtNGwwLTEwOS44YzAtLjctLjEtMS40LS4yLTIuMXpNMTExLjggMTcuM2w4MC4yIDQ2LjEtODAuMiA0Ni4yLTgwLjItNDYuMiA4MC4yLTQ2LjJ6bTg4LjIgNjBsMCAyMDEuM2MtMzMuMiAxOS4xLTU5LjkgMzQuNS04MC4yIDQ2LjJsMC0yMDEuM0MxNTMgMTA0LjQgMTc5LjcgODkgMjAwIDc3LjN6bTAgNDEyLjhMMjMuNSAzODguNSAyMy41IDc3LjNjMjAuMyAxMS43IDQ3LjEgMjcuMSA4MC4yIDQ2LjJsMCAyMTUuMmMwIC4zIC4xIC42IC4xIC45IDAgLjQgLjEgLjggLjIgMS4yIC4xIC4zIC4yIC42IC40IC45IC4xIC4zIC4zIC43IC40IDEgLjIgLjMgLjQgLjUgLjYgLjggLjIgLjMgLjQgLjYgLjcgLjggLjIgLjIgLjUgLjQgLjggLjYgLjMgLjIgLjYgLjUgLjkgLjdsOTIuMiA1Mi4yIC4xIDkyLjR6bTgtMTA2LjJMMTI4IDMzOC42YzU0LjctMzEuNSAxMTMuNS02NS4zIDE3Ni4zLTEwMS41bDgwLjEgNDYuMUMzNTUgMzAwIDI5Ni4yIDMzMy41IDIwOCAzODMuOXptMTg0LjUgNC42bC0xNzYuNSAxMDEuNiAwLTkyLjNDMzE3LjQgMzQwIDM3Ni4yIDMwNi40IDM5Mi41IDI5N2wwIDkxLjR6bTAtMTE5LjFjLTIwLjMtMTEuNi00Ny4xLTI3LTgwLjItNDYuMWwwLTkxLjRjMjAuMyAxMS43IDQ3LjEgMjcuMSA4MC4yIDQ2LjJsMCA5MS4zem04LTEwNS4zbC04MC4yLTQ2LjIgODAuMi00Ni4yIDgwLjIgNDYuMS04MC4yIDQ2LjJ6bTggMTA1LjNsMC05MS4zYzMzLjItMTkuMSA2MC0zNC41IDgwLjMtNDYuMmwwIDkxLjQtODAuMyA0Ni4yeiJdCiAgICB9OwogICAgZmFXcGZvcm1zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwZm9ybXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI5OCIsICJNNDQ4IDc1LjJsMCAzNjEuN2MwIDI0LjMtMTkgNDMuMi00My4yIDQzLjJsLTM2MS42IDBDMTkuMyA0ODAgMCA0NjEuNCAwIDQzNi44TDAgNzUuMkMwIDUxLjEgMTguOCAzMiA0My4yIDMybDM2MS43IDBjMjQgMCA0My4xIDE4LjggNDMuMSA0My4yek00MTAuNyA0MzYuOGwwLTM2MS42YzAtMy0yLjYtNS44LTUuOC01LjhsLTkuMyAwLTExMC4zIDc0LjYtNjEuMy00OS45LTYxLjIgNDkuOS0xMTAuMy03NC43LTkuMyAwYy0zLjIgMC01LjggMi44LTUuOCA1LjhsMCAzNjEuN2MwIDMgMi42IDUuOCA1LjggNS44bDM2MS43IDBjMy4yIC4xIDUuOC0yLjcgNS44LTUuOHpNMTUwLjIgMTg2bDAgMzctNzMuNSAwIDAtMzcgNzMuNSAwem0wIDc0LjRsMCAzNy4zLTczLjUgMCAwLTM3LjMgNzMuNSAwem0xMS4xLTE0Ny4zbDU0LTQzLjctMTE4LjUgMCA2NC41IDQzLjd6bTIxMCA3Mi45bDAgMzctMTk2IDAgMC0zNyAxOTYgMHptMCA3NC40bDAgMzcuMy0xOTYgMCAwLTM3LjMgMTk2IDB6TTI4Ni43IDExMy4xbDY0LjUtNDMuNy0xMTguNCAwIDUzLjkgNDMuN3pNMzcxLjMgMzM1bDAgMzcuMy05OS40IDAgMC0zNy4zIDk5LjQgMHoiXQogICAgfTsKICAgIGZhU3BlYWtlckRlY2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BlYWtlci1kZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2MiLCAiTTIxMy45IDI5NkwxMDAgMjk2Yy0yNi41IDAtNTItMTAuNS03MC43LTI5LjNTMCAyMjIuNSAwIDE5NiAxMC41IDE0NCAyOS4zIDEyNS4zIDczLjUgOTYgMTAwIDk2bDEzMi44IDBjMTAuNiAwIDIwLjggNC4yIDI4LjMgMTEuN3MxMS43IDE3LjcgMTEuNyAyOC4zLTQuMiAyMC44LTExLjcgMjguMy0xNy43IDExLjctMjguMyAxMS43TDk4IDE3NmMtMjYuNSAwLTI2LjQgNDAgMCA0MGwxMTMuOCAwYzI2LjUgMCA1MiAxMC41IDcwLjcgMjkuM3MyOS4zIDQ0LjIgMjkuMyA3MC43LTEwLjUgNTItMjkuMyA3MC43LTQ0LjIgMjkuMy03MC43IDI5LjNMNDAgNDE2Yy0xMC42IDAtMjAuOC00LjItMjguMy0xMS43UzAgMzg2LjYgMCAzNzYgNC4yIDM1NS4yIDExLjcgMzQ3LjcgMjkuNCAzMzYgNDAgMzM2bDE3My45IDBjMjYuNSAwIDI2LjUtNDAgMC00MHpNMjk4IDQxNmMxMy41LTkuMiAyNS0yMSAzMy44LTM0LjdzMTQuNy0yOS4yIDE3LjMtNDUuM2w2NC42IDBjMi42IDAgNS4yLS42IDcuNi0xLjZzNC42LTIuNSA2LjQtNC40IDMuMy00LjEgNC4yLTYuNSAxLjUtNSAxLjQtNy42bDAtMTIwYzAtMi42LS41LTUuMi0xLjQtNy42cy0yLjQtNC42LTQuMi02LjUtNC0zLjMtNi40LTQuNC01LTEuNi03LjYtMS42bC0xMTcuMiAwYzkuNy0xMS4xIDE1LTI1LjMgMTUtNDBzLTUuMy0yOC45LTE1LTQwbDEzNi45IDBjNDMuNCAwIDc4LjYgMzUuOCA3OC42IDgwbDAgMTYwYzAgNDQuMi0zNS4yIDgwLTc4LjYgODBMMjk4IDQxNnoiXQogICAgfTsKICAgIGZhRmxpY2tyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZsaWNrciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTZlIiwgIk00MDAgMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNMTQ0LjUgMTkyYTYzLjUgNjMuNSAwIDEgMSAwIDEyNyA2My41IDYzLjUgMCAxIDEgMC0xMjd6bTE1OSAwYTYzLjUgNjMuNSAwIDEgMSAwIDEyNyA2My41IDYzLjUgMCAxIDEgMC0xMjd6Il0KICAgIH07CiAgICBmYUNjVmlzYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy12aXNhIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjAiLCAiTTQ3MC4xIDIzMS4zczcuNiAzNy4yIDkuMyA0NWwtMzMuNCAwYzMuMy04LjkgMTYtNDMuNSAxNi00My41LS4yIC4zIDMuMy05LjEgNS4zLTE0LjlsMi44IDEzLjR6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE1Mi41IDMzMS4ybDYzLjItMTU1LjItNDIuNSAwLTM5LjMgMTA2LTQuMy0yMS41LTE0LTcxLjRjLTIuMy05LjktOS40LTEyLjctMTguMi0xMy4xbC02NC43IDAtLjcgMy4xYzE1LjggNCAyOS45IDkuOCA0Mi4yIDE3LjFsMzUuOCAxMzUgNDIuNSAwem05NC40IC4ybDI1LjItMTU1LjQtNDAuMiAwLTI1LjEgMTU1LjQgNDAuMSAwem0xMzkuOS01MC44Yy4yLTE3LjctMTAuNi0zMS4yLTMzLjctNDIuMy0xNC4xLTcuMS0yMi43LTExLjktMjIuNy0xOS4yIC4yLTYuNiA3LjMtMTMuNCAyMy4xLTEzLjQgMTMuMS0uMyAyMi43IDIuOCAyOS45IDUuOWwzLjYgMS43IDUuNS0zMy42Yy03LjktMy4xLTIwLjUtNi42LTM2LTYuNi0zOS43IDAtNjcuNiAyMS4yLTY3LjggNTEuNC0uMyAyMi4zIDIwIDM0LjcgMzUuMiA0Mi4yIDE1LjUgNy42IDIwLjggMTIuNiAyMC44IDE5LjMtLjIgMTAuNC0xMi42IDE1LjItMjQuMSAxNS4yLTE2IDAtMjQuNi0yLjUtMzcuNy04LjNsLTUuMy0yLjUtNS42IDM0LjljOS40IDQuMyAyNi44IDguMSA0NC44IDguMyA0Mi4yIC4xIDY5LjctMjAuOCA3MC01M3pNNTI4IDMzMS40bC0zMi40LTE1NS40LTMxLjEgMGMtOS42IDAtMTYuOSAyLjgtMjEgMTIuOWwtNTkuNyAxNDIuNSA0Mi4yIDBzNi45LTE5LjIgOC40LTIzLjNsNTEuNiAwYzEuMiA1LjUgNC44IDIzLjMgNC44IDIzLjNsMzcuMiAweiJdCiAgICB9OwogICAgZmFVcHdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXB3b3JrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NDEiLCAiTTQ5My45IDI5NS42Yy01MC4zIDAtODMuNS0zOC45LTkyLjgtNTMuOSAxMS45LTk1LjMgNDYuOC0xMjUuNCA5Mi44LTEyNS40IDQ1LjUgMCA4MC45IDM2LjQgODAuOSA4OS43cy0zNS40IDg5LjctODAuOSA4OS43bDAtLjF6bTAtMjM3LjhjLTgxLjkgMC0xMjcuOCA1My40LTE0MSAxMDguNC0xNC45LTI4LTI1LjktNjUuNS0zNC41LTEwMC4zbC0xMTMuMiAwIDAgMTQxYzAgNTEuMS0yMy4zIDg5LTY4LjggODlzLTcxLjYtMzcuOC03MS42LTg5bC41LTE0MS02NS4zIDAgMCAxNDFjMCA0MS4xIDEzLjMgNzguNCAzNy42IDEwNS4xIDI1IDI3LjUgNTkuMiA0MS44IDk4LjggNDEuOCA3OC44IDAgMTMzLjgtNjAuNCAxMzMuOC0xNDYuOWwwLTk0LjhjOC4yIDMxLjIgMjcuOCA5MS4xIDY1LjMgMTQzLjZsLTM1IDE5OS40IDY2LjQgMCAyMy4xLTE0MS4zYzcuNiA2LjMgMTUuNyAxMiAyNC4yIDE3IDIyLjIgMTQgNDcuNyAyMS45IDczLjkgMjIuOCAwIDAgNCAuMiA2LjEgLjIgODEuMiAwIDE0NS45LTYyLjkgMTQ1LjktMTQ3LjhTNTc1LjMgNTcuOSA0OTQuMSA1Ny45bC0uMi0uMXoiXQogICAgfTsKICAgIGZhS2FrYW9UYWxrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtha2FvLXRhbGsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTdkNyIsICJNMjg4IDIuNWMxNTkuMSAwIDI4OCAxMDEuNyAyODggMjI3LjEgMCAxMjUuNC0xMjguOSAyMjcuMS0yODggMjI3LjEtMTcuNSAwLTM0LjYtMS4yLTUxLjItMy42LTE2LjYgMTEuNy0xMTIuNiA3OS4xLTEyMS43IDgwLjQgMCAwLTMuNyAxLjQtNi45LS40cy0yLjYtNi43LTIuNi02LjdDMTA2LjYgNTE5LjggMTMwLjYgNDM3LjIgMTM1IDQyMS45IDUzLjkgMzgxLjggMCAzMTAuNiAwIDIyOS41IDAgMTA0LjEgMTI4LjkgMi41IDI4OCAyLjV6TTg2LjIgMTYxLjdjLTkgMC0xNi4zIDcuMy0xNi4zIDE2LjNzNy4zIDE2LjMgMTYuMyAxNi4zbDI1LjkgMCAwIDk4LjdjMCA4LjggNy41IDE1LjkgMTYuNiAxNS45czE2LjYtNy4xIDE2LjYtMTUuOWwwLTk4LjcgMjUuOSAwYzkgMCAxNi4zLTcuMyAxNi4zLTE2LjNzLTcuMy0xNi4zLTE2LjMtMTYuM2wtODUuMSAwem0xNDAuOCAwYy0xMC44IC4yLTE5LjMgOC40LTIyLjEgMTYuNEwxNjUuMiAyODIuN2MtNSAxNS43LS42IDIxLjUgMy45IDIzLjYgMy4yIDEuNSA2LjkgMi4zIDEwLjYgMi4zIDYuOSAwIDEyLjItMi44IDEzLjgtNy4zbDguMi0yMS42IDUwLjcgMCA4LjIgMjEuNWMxLjYgNC41IDYuOSA3LjMgMTMuOCA3LjMgMy43IDAgNy4zLS44IDEwLjYtMi4zIDQuNi0yLjEgOS03LjkgMy45LTIzLjZMMjQ5LjIgMTc4LjFjLTIuOC04LTExLjMtMTYuMi0yMi4yLTE2LjR6bTE4MC45IDBjLTkuMiAwLTE2LjYgNy41LTE2LjYgMTYuNmwwIDExMy43YzAgOS4yIDcuNSAxNi42IDE2LjYgMTYuNnMxNi42LTcuNSAxNi42LTE2LjZsMC0zNi4yIDUuOC01LjggMzguOSA1MS42YzMuMiA0LjIgOCA2LjYgMTMuMyA2LjYgMy42IDAgNy4xLTEuMSAxMC0zLjMgMy41LTIuNyA1LjgtNi42IDYuNC0xMXMtLjUtOC44LTMuMi0xMi4zbC00MC45LTU0LjIgMzcuOS0zNy44YzIuNi0yLjYgMy45LTYuMiAzLjctMTAuMS0uMi0zLjktMi03LjYtNC45LTEwLjUtMy4xLTMuMS03LjMtNC45LTExLjQtNC45LTMuNiAwLTYuOCAxLjMtOS4yIDMuN2wtNDYuMyA0Ni40IDAtMzUuN2MwLTkuMi03LjUtMTYuNi0xNi42LTE2LjZ6bS05MS4zIDBjLTkuMyAwLTE2LjkgNy41LTE2LjkgMTYuNmwwIDExMi44YzAgOC40IDcuMSAxNS4yIDE1LjkgMTUuM2w1My4zIDBjOC44IDAgMTUuOS02LjkgMTUuOS0xNS4zcy03LjItMTUuMi0xNS45LTE1LjJsLTM1LjMgMCAwLTk3LjZjMC05LjItNy42LTE2LjYtMTctMTYuNnptLTczIDg4LjZsLTMzLjIgMCAxNi42LTQ3LjEgMTYuNiA0Ny4xeiJdCiAgICB9OwogICAgZmFGbHV0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZsdXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY5NCIsICJNNDI5LjUgMjM2LjNMMjkxLjcgMzc0LjEgNDI5LjUgNTEyIDI3MiA1MTJjLTM2LjEtMzYuMS04Mi4xLTgyLjEtMTM3LjktMTM3LjlsMTM3LjktMTM3LjggMTU3LjUgMHpNMjcyIDBMMTYgMjU2IDk0LjggMzM0LjggNDI5LjUgMCAyNzIgMHoiXQogICAgfTsKICAgIGZhQnVmZmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1ZmZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODM3IiwgIk00MjguMiAzODAuN0wyMzEuNyA0NzguNWMtMi4zIDEtNC44IDEuNS03LjMgMS41cy01LS41LTcuMy0xLjVMMjAuNSAzODAuN2MtNC0yLTQtNS4zIDAtNy4zTDY3LjYgMzUwYzIuMy0xIDQuOC0xLjUgNy4zLTEuNXM1IC41IDcuMyAxLjVsMTM0LjggNjdjMi4zIDEgNC44IDEuNSA3LjMgMS41czUtLjUgNy4zLTEuNWwxMzQuOC02N2MyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDQ3LjEgMjMuNGM0IDIgNCA1LjIgMCA3LjJ6bTAtMTM2LjVsLTQ3LjEtMjMuNGMtMi4zLTEtNC44LTEuNS03LjMtMS41cy01IC41LTcuMyAxLjVMMjMxLjcgMjg3LjhjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDgyLjMgMjIwLjdjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIwLjUgMjQ0LjFjLTQgMi00IDUuMyAwIDcuM2wxOTYuNSA5Ny44YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTk2LjUtOTcuOGM0LTIgNC01LjMgMC03LjN6TTIwLjUgMTMwLjRMMjE3IDIyMC43YzQuNyAxLjkgMTAgMS45IDE0LjcgMGwxOTYuNS05MC4zYzQtMS45IDQtNC45IDAtNi43TDIzMS43IDMzLjRjLTQuNy0xLjktMTAtMS45LTE0LjcgMEwyMC41IDEyMy43Yy00IDEuOC00IDQuOSAwIDYuN3oiXQogICAgfTsKICAgIGZhR3JhdGlwYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JhdGlwYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4NCIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0zNzQuMyAyMzMuN0wyNTcuNyAzOTEuMyAxNDEuMyAyMzMuN2MtOS0xMi4zLTE5LjctNTIgMTQtNzQuMyAyOS0xOC43IDU2LjQtNC4zIDcwLjcgMTIuMyAxNi40IDE4LjUgNDguMSAxNy40IDYzLjcgMCAxNC4zLTE2LjYgNDEuNy0zMSA3MC4zLTEyLjMgMzQgMjIuMyAyMy4zIDYxLjkgMTQuMiA3NC4zeiJdCiAgICB9OwogICAgZmFHb29nbGVQYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDc5IiwgIk0xMDUuNyAyMTVsMCA0MS4yIDU3LjEgMGMtMS4yIDYuNi0zLjYgMTIuOS03LjIgMTguNXMtOC40IDEwLjQtMTMuOSAxNC4xYy05LjUgNi42LTIxLjcgMTAuMy0zNiAxMC4zLTI3LjYgMC01MC45LTE4LjktNTkuMy00NC4yLTQuNC0xMy4zLTQuNC0yNy43IDAtNDEgOC40LTI1LjUgMzEuNy00NC40IDU5LjMtNDQuNCA3LjUtLjEgMTQuOSAxLjIgMjEuOSA0czEzLjMgNi45IDE4LjYgMTIuMUwxNzYuNSAxNTVjLTE5LjEtMTguMS00NC40LTI4LjEtNzAuNy0yNy44LTE5LjcgLjEtMzguOSA1LjctNTUuNiAxNi4xcy0zMC4xIDI1LjMtMzguOCA0M0MzLjkgMjAxLjIgMCAyMTcuNyAwIDIzNC40czMuOSAzMy4yIDExLjMgNDguMWwwIC4yYzguNyAxNy43IDIyLjEgMzIuNSAzOC44IDQzczM1LjkgMTYgNTUuNiAxNmMyOC41IDAgNTIuNS05LjUgNzAtMjUuOSAyMC0xOC42IDMxLjQtNDYuMiAzMS40LTc4LjkgMC03LjMtLjYtMTQuNi0xLjgtMjEuOGwtOTkuNyAwem0zODkuNC00Yy0xMC4xLTkuNC0yMy45LTE0LjEtNDEuNC0xNC4xLTIyLjUgMC0zOS4zIDguMy01MC41IDI0LjlMNDI0LjEgMjM1YzcuNi0xMS4zIDE4LjEtMTcgMzEuMy0xNyA4LjQgMCAxNi41IDMuMiAyMi43IDguOCAzIDIuNiA1LjUgNS45IDcuMSA5LjZzMi41IDcuNiAyLjUgMTEuN2wwIDUuNWMtOS4xLTUuMS0yMC42LTcuOC0zNC42LTcuOC0xNi40IDAtMjkuNiAzLjktMzkuNSAxMS44cy0xNC44IDE4LjMtMTQuOCAzMS42Yy0uMiA1LjkgMSAxMS44IDMuNCAxNy4yczYgMTAuMiAxMC41IDE0LjFjOS4yIDguMyAyMSAxMi41IDM0LjggMTIuNSAxNi4zIDAgMjkuMi03LjMgMzktMjEuOWwxIDAgMCAxNy43IDIyLjYgMCAwLTc4LjdjLjEtMTYuNi00LjktMjkuNy0xNS0zOXptLTE5LjIgODkuM2MtMy41IDMuNS03LjYgNi4zLTEyLjIgOC4ycy05LjUgMi45LTE0LjQgMi45Yy02LjcgLjEtMTMuMS0yLjEtMTguMy02LjItMi40LTEuOC00LjQtNC4yLTUuNy02LjlzLTItNS43LTItOC43YzAtNyAzLjItMTIuOCA5LjUtMTcuNHMxNC41LTcgMjQuMS03YzEzLjItLjIgMjMuNSAyLjggMzAuOCA4LjggMCAxMC4xLTQgMTguOS0xMS43IDI2LjR6bS05My43LTE0MmMtNS4zLTUuMy0xMS42LTkuNS0xOC42LTEyLjNzLTE0LjQtNC4yLTIxLjktNGwtNjIuNyAwIDAgMTg2LjcgMjMuNiAwIDAtNzUuNiAzOSAwYzE2IDAgMjkuNS01LjQgNDAuNS0xNS45IC45LS45IDEuOC0xLjggMi42LTIuNyA5LjYtMTAuNSAxNC44LTI0LjQgMTQuMy0zOC42cy02LjYtMjcuNy0xNi45LTM3LjZsMCAwem0tMTYuNiA2Mi4yYy0zIDMuMi02LjYgNS43LTEwLjYgNy40cy04LjQgMi41LTEyLjcgMi4zbC0zOS42IDAgMC02NS4yIDM5LjYgMGM4LjUgMCAxNi42IDMuMyAyMi42IDkuMiA2LjEgNi4xIDkuNiAxNC4zIDkuOCAyM3MtMy4xIDE3LTkgMjMuM2wwIDB6TTYxNC4zIDIwMWwtMzYuNSA5MS43LS41IDAtMzcuNC05MS43LTI1LjcgMCA1MS44IDExOS42LTI5LjQgNjQuMyAyNC4zIDAgNzktMTgzLjktMjUuNyAweiJdCiAgICB9OwogICAgZmFBcHBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHBsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTc5IiwgIk0zMTkuMSAyNjguN2MtLjItMzYuNyAxNi40LTY0LjQgNTAtODQuOC0xOC44LTI2LjktNDcuMi00MS43LTg0LjctNDQuNi0zNS41LTIuOC03NC4zIDIwLjctODguNSAyMC43LTE1IDAtNDkuNC0xOS43LTc2LjQtMTkuNy01NS44IC45LTExNS4xIDQ0LjUtMTE1LjEgMTMzLjIgMCAyNi4yIDQuOCA1My4zIDE0LjQgODEuMiAxMi44IDM2LjcgNTkgMTI2LjcgMTA3LjIgMTI1LjIgMjUuMi0uNiA0My0xNy45IDc1LjgtMTcuOSAzMS44IDAgNDguMyAxNy45IDc2LjQgMTcuOSA0OC42LS43IDkwLjQtODIuNSAxMDIuNi0xMTkuMy02NS4yLTMwLjctNjEuNy05MC02MS43LTkxLjl6TTI2Mi41IDEwNC41YzI3LjMtMzIuNCAyNC44LTYxLjkgMjQtNzIuNS0yNC4xIDEuNC01MiAxNi40LTY3LjkgMzQuOS0xNy41IDE5LjgtMjcuOCA0NC4zLTI1LjYgNzEuOSAyNi4xIDIgNDkuOS0xMS40IDY5LjUtMzQuM3oiXQogICAgfTsKICAgIGZhVHVtYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInR1bWJsciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMTczIiwgIk0zMDkuOSA0ODAuM2MtMTMuNiAxNC41LTUwIDMxLjctOTcuNCAzMS43LTEyMC44IDAtMTQ3LTg4LjgtMTQ3LTE0MC42bDAtMTQ0LTQ3LjUgMGMtNS41IDAtMTAtNC41LTEwLTEwbDAtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMSAuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNsNzAuOSAwYzUuNSAwIDEwIDQuNSAxMCAxMGwwIDExNS4yIDgzIDBjNS41IDAgMTAgNC40IDEwIDkuOWwwIDgxLjdjMCA1LjUtNC41IDEwLTEwIDEwbC04My40IDAgMCAxMzMuMmMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUgLjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiXQogICAgfTsKICAgIGZhUGhvZW5peFNxdWFkcm9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBob2VuaXgtc3F1YWRyb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxMSIsICJNOTYgNjMuNGM0Ni41LTM2LjEgMTA1LjYtNTYuMSAxNjQuNS01NC42IDI5LjYtLjQgNTkuMSA1LjQgODYuOSAxNS4zLTI0LjEtNC42LTQ5LTYuMy03My40LTIuNS00Mi45IDUuMy04MyAyNy4yLTExMS44IDU5LjIgNS43LTEgMTAuOC0zLjcgMTYtNS45IDE4LjEtNy45IDM3LjUtMTMuMyA1Ny4yLTE0LjggMTkuNy0yLjEgMzkuNi0uNCA1OS4zIDEuOS0xNC40IDIuOC0yOS4xIDQuNi00MyA5LjYtMzQuNCAxMS4xLTY1LjMgMzMuMi04Ni4zIDYyLjYtMTMuOCAxOS43LTIzLjYgNDIuOS0yNC43IDY3LjEtLjQgMTYuNSA1LjIgMzQuOCAxOS44IDQ0IDExLjIgNi44IDI0LjYgOS4yIDM3LjUgNi43IDE1LjQtMi41IDMwLjEtOC42IDQzLjYtMTYuMyAxMS41LTYuOCAyMi43LTE0LjYgMzItMjQuMyAzLjgtMy4yIDIuNS04LjQgMi42LTEyLjgtMi4xLS4zLTQuNC0xLjEtNi4zIC4zLTExLjQgNi4zLTIzLjQgMTEuNC0zNS44IDE1LjQtMjAgNi4yLTQyLjIgOC41LTYyLjEgLjggMTIuOCAxLjcgMjYuMSAuMyAzNy43LTUuNCAyMC4yLTkuNyAzNi44LTI1LjIgNTQuNC0zOC44IDI3LjctMjEuMyA1Ny41LTM5LjkgODguOS01NS4zIDI1LjctMTIgNTIuOS0yMi44IDgxLjYtMjQuMS0xNS42IDEzLjctMzIuMSAyNi41LTQ2LjggNDEuNC0xNC41IDE0LTI3LjUgMjkuNS00MC4xIDQ1LjItMy41IDQuNi05IDYuOS0xMy42IDEwLjItMjIuNCAxNS00MC4zIDM1LjgtNTEuOSA2MC4xLTkuMyAxOS43LTE0LjUgNDEuOS0xMS44IDYzLjYgMS45IDEzLjcgOC43IDI3LjYgMjAuOSAzNC45IDEyLjkgOCAyOSA4LjEgNDMuNSA1LjEgMzIuOC03LjQgNjEuNC0yOC45IDgxLTU1LjggMjAuNC0yNy41IDMwLjUtNjIuMiAyOS4yLTk2LjMtLjUtNy41LTEuNi0xNS0xLjctMjIuNSA4IDE5LjUgMTQuOCAzOS43IDE2LjYgNjAuOCAyIDE0LjMgLjcgMjguOC0xLjYgNDIuOS0xLjkgMTEtNS43IDIxLjUtNy44IDMyLjQgMjAuNC0yMi45IDM0LTUwLjkgMzkuMy04MS4xIDUuNi0zNS41IC43LTcxLjktMTQuMi0xMDQuNiAyMC44IDMyIDMyLjMgNjkuNiAzNS43IDEwNy41IC41IDEyLjcgLjUgMjUuNSAwIDM4LjItMi44IDM0LjMtMTIuOSA2Ny42LTI5LjYgOTcuOC0yNi4xIDQ3LjMtNjggODUuNi0xMTcuMiAxMDgtNzguMyAzNi4yLTE3NC43IDMxLjMtMjQ4LTE0LjctMzktMjMuOC03MC42LTU4LTkxLjQtOTguNy0xNC43LTI4LjktMjMuMy02MC41LTI1LjQtOTIuOWwwLTMxLjNDMy45IDE3MiA0MC45IDEwNS44IDk2IDYzLjR6bTIyMiA4MC4zYzUuNS0uOSAxMC44LTIuNCAxNi00LjUgNS0xLjggOS4yLTUuOSAxMC4zLTExLjItOSA1LTE4IDkuOS0yNi4zIDE1Ljd6Il0KICAgIH07CiAgICBmYUNlbnRlcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2VudGVyY29kZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzgwIiwgIk0yMDEuOCAyNTQuOGE2NC4xIDY0LjEgMCAxIDEgMTI3LjQgMTMuOCA2NC4xIDY0LjEgMCAxIDEgLTEyNy40LTEzLjh6bTQxLjYgMjQ4LjlDOTYuNyA0OTYtOC4yIDM2NS41IDEwLjEgMjI0LjMgMjEuMyAxMzcuNyA3NS45IDY3LjQgMTQ5LjIgMzIuMyAzMTAuMi00NC44IDQ5OC45IDY5LjcgNTAzLjkgMjQ4LjkgNTA4IDM5NS45IDM4NS41IDUxMS4xIDI0My40IDUwMy43em0xNzkuOS0xODBjMjcuOS0xMTgtMTYwLjUtMjA1LjktMjM3LjItMjM0LjItNTcuNSA1Ni4zLTY5LjEgMTg4LjYtMzMuOCAzNDQuNCA2OC44IDE1LjggMTY5LjEtMjYuNCAyNzEtMTEwLjJ6Il0KICAgIH07CiAgICBmYURlYmlhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZWJpYW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYwYiIsICJNMzgwLjQgMjQ1LjZjMy03LjYgNS41LTE0IDUuMi0yNC40bC00LjMgOWM0LjQtMTMuMiA0LTI3LjEgMy42LTQwLjQtLjItNi0uMy0xMS44IDAtMTcuNGwtMS44LS41Yy0xLjUtNDUuMi00MC42LTkzLjEtNzUuMy0xMDkuNC0zMC0xMy44LTc2LjEtMTYuMi05Ny4zLTUuOCAxLjMtMS4xIDQuMi0yIDYuOC0yLjdsLjMtLjFjMy4zLTEgNi0xLjcgNC0yLjktMTkuMiAxLjktMjQuOSA1LjUtMzEuMSA5LjRsLS4xIDBjLTQuNiAyLjktOS41IDYtMjAuMyA4LjctMy41IDMuNCAxLjcgMiA1LjggLjlzNy4yLTEuOS0uMSAyLjRjLTMuNSAxLTYuNiAxLjMtOS42IDEuNmwtLjEgMGMtOC4zIC44LTE1LjggMS42LTMwLjcgMTcgLjggMS4zIDMuNC0uMiA1LjMtMS4zbC4xLS4xYzIuMy0xLjQgMy40LTItMS43IDQuNC0xOS4xLTIuNC02MC4zIDQzLjctNjkuMSA1OWw0LjYgLjhjLTMuMiA4LTYuOCAxNC44LTEwIDIwLjgtNC4zIDguMS03LjkgMTQuOS04LjcgMjEuMy0uMyA1LjEtMSAxMS0xLjcgMTcuMy0uMSAxLS4yIDItLjMgM2wtLjEgLjZjLTMgMjcuMy02LjcgNjAuOCAzLjkgNzNsLTEuMyAxM2MuNiAxLjIgMS4xIDIuMyAxLjYgMy41IC4yIC40IC40IC44IC41IDEuMSAxIDIuMSAyIDQuMiAzLjMgNi4ybC0zIC4yYzcgMjIuMSAxMC44IDIyLjUgMTUuMSAyMi45IDQuNCAuNCA5LjMgLjkgMTguNyAyNC4yLTIuNy0uOS01LjUtMS45LTkuNC03LjItLjUgNC4xIDUuOCAxNi4zIDEzLjEgMjUuOGwtMy4xIDMuNmMyLjEgMy43IDQuOCA2LjIgNy42IDguOCAxIC45IDIuMSAxLjkgMy4xIDIuOS0xMS45LTYuNSAzLjIgMTMuNyAxMS45IDI1LjIgLjggMS4xIDEuNSAyIDIuMiAyLjkgMS40IDEuOSAyLjUgMy40IDIuOSA0LjFsMi40LTQuMmMtLjMgNi4xIDQuMyAxMy45IDEzLjEgMjQuN2w3LjMtLjNjMyA2IDE0IDE2LjcgMjAuNyAxNy4ybC00LjQgNS44YzguMSAyLjYgMTAuMyA0LjMgMTIuNyA2LjIgMi42IDIuMSA1LjQgNC4zIDE2LjEgOC4xbC00LjItNy40YzMuNSAzIDYuMiA1LjkgOC44IDguN2wuMSAuMWM1LjIgNS42IDkuOSAxMC42IDE5LjcgMTUuMyAxMC43IDMuNyAxNi42IDQuNyAyMi43IDUuOCAuMyAwIC42IC4xIC45IC4xIDUuNCAuOCAxMS4yIDEuOCAyMC44IDQuNS0xLjEtLjEtMi4yLS4xLTMuMy0uMS0yLjMtLjEtNC43LS4xLTctLjEtMTQuNC0uMi0yOS4yLS40LTQyLjctNS4yLTk2LjYtMjUuNy0xODQuOS0xMzktMTc4LjQtMjU1LjYtLjYtOS45LS4zLTIwLjkgMC0zMC43IC40LTEzLjUgLjctMjQuOC0xLjYtMjguM2wxLTMuMWM1LjMtMTcuNCAxMS43LTM4LjIgMjMuOC02Mi44bC0uMS0uMiAwLS4xYy40IC40IDMuNCAzLjQgOC44LTUuOCAuOC0xLjggMS42LTMuNyAyLjQtNS42IC41LTEuMSAuOS0yLjIgMS40LTMuMiAyLjUtNi4xIDUuMS0xMi4zIDguNC0xNy45bDIuNi0uNmMxLjctMTAuMSAxNy0yMy44IDI5LjgtMzUuMmwxLjEtMWM1LjctNS4xIDEwLjctOS43IDEzLjYtMTMuMWwuNyA0LjRjMTctMTUuOSA0NC42LTI3LjUgNjUuNi0zNi40bC41LS4yYzQuOC0yIDkuMy0zLjkgMTMuMy01LjctMy40IDMuOCAyLjIgMi43IDEwIDEgNC44LTEgMTAuNC0yLjEgMTUuMy0yLjRsLTMuOSAyLjFjLTIuNyAxLjQtNS40IDIuOC04IDQuNiA4LjEtMiAxMS43LTEuNCAxNS43LS44bC4zIDBjMy41IC42IDcuMyAxLjIgMTQuNiAuMi01LjYgLjgtMTIuMyAzLTExLjIgMy44IDcuOSAuOSAxMi44LS4xIDE3LjItMWwuMiAwYzUuNS0xLjEgMTAuMy0yIDE5LjMgLjlsLTEtNC44YzcuMyAyLjYgMTIuNyA0LjMgMTcuNSA1LjhsLjUgLjFjMTAgMyAxNy42IDUuMyAzNC4yIDE0LjEgMy4yIC4yIDUuMy0uNSA3LjQtMS4ybC4xIDBjMy42LTEuMSA3LTIuMSAxNS4yIDEuMiAuMyAuNSAuNSAxIC43IDEuNCAuMSAuMiAuMiAuNSAuMyAuN2wwIC4xYzEgMi42IDEuOCA0LjYgMTQuNiAxMi4xIDEuNy0uNy0yLjctNC43LTYuNC04LjJsLS4xLS4xYy0uMi0uMS0uMy0uMy0uNS0uNCAzMi4yIDE3LjMgNjcuMyA1NC4xIDc4IDkzLjUtNi0xMS4xLTUuMi01LjUtNC4zIC41IC42IDQgMS4yIDguMS0uMiA3LjUgNC41IDEyLjEgOC4xIDI0LjUgMTAuNCAzNy40bC0uOC0yLjktLjEtLjNjLTMuMy0xMS45LTkuNi0zNC4zLTE5LjktNDkuMy0uNCA0LjMtMi44IDMuOS01LjIgMy41bC0uMSAwYy0zLjMtLjYtNi4yLTEuMS0xLjkgMTIuNiAyLjYgMy44IDMuMSAyLjQgMy41IDEuMSAuNS0xLjUgLjktMi43IDQuNyA1LjIgLjEgNC4xIDEgOC4yIDIuMSAxMi43bC4xIC42Yy4xIC4zIC4xIC41IC4yIC44bC4xIC42Yy42IDIuNiAxLjMgNS40IDEuOCA4LjQtMS4xLS4yLTIuMy0yLjItMy40LTQuMi0xLjQtMi40LTIuOC00LjctMy43LTMuMiAyLjQgMTEuNSA2LjUgMTcuNCA4IDE4LjMtLjMgLjYtLjYgLjctMS4xIC43LS44IDAtMS44IC4xLTEuOSA1LjMgLjcgMTMuNyAzLjMgMTIuNSA1LjMgMTEuNiAuNi0uMyAxLjItLjYgMS43LS40LS42IDIuNS0xLjYgNS4xLTIuNyA3LjktMi44IDcuMS02IDE1LjQtMy40IDI2LjEtLjgtMy0yLTYtMy4xLTguOWwtLjEtLjRjLS4yLS41LS40LTEtLjYtMS41LS4zLS44LS42LTEuNi0uOS0yLjMtLjYgNC40LS4zIDcuNy0uMSAxMC42bDAgLjdjLjQgNS4zIC43IDEwLTMgMTkuOSA0LjMtMTQuMiAzLjgtMjYuOS0uMi0yMC44IDEgMTAuOS0zLjcgMjAuNC04IDI4LjlsLS4xIC4yYy0zLjYgNy4xLTYuOCAxMy41LTUuOSAxOS4zbC01LjItNy4xYy03LjUgMTAuOS03IDEzLjMtNi41IDE1LjVsMCAuMWMuNSAxLjkgMSAzLjgtMy40IDEwLjggMS43LTIuOSAxLjMtMy42IDEtNC4yLS40LS44LS43LTEuNSAxLjctNS4xLTEuNiAuMS01LjUgMy45LTEwLjEgOC41LTMuOSAzLjktOC41IDguNC0xMi44IDExLjgtMzcuNSAzMC4xLTgyLjMgMzQtMTI1LjYgMTcuOCAuMi0xLS4yLTIuMS0zLjEtNC4xLTM2LjgtMjguMi01OC41LTUyLjEtNTAuOS0xMDcuNSAyLjEtMS42IDMuNi01LjggNS4zLTEwLjhsLjItLjQgLjEtLjMgMC0uMWMyLjktOC40IDYuNS0xOC44IDE0LjMtMjMuOCA3LjgtMTcuMyAzMS4zLTMzLjMgNTYuNC0zMy43IDI1LjYtMS40IDQ3LjIgMTMuNyA1OC4xIDI3LjktMTkuOC0xOC40LTUyLjEtMjQtNzkuNy0xMC40LTI4LjIgMTIuNy00NSA0My44LTQyLjUgNzQuNyAuMy0uNCAuNi0uNiAuOS0uOGwuMi0uMmMuNi0uNSAxLjEtLjkgMS40LTMuMy0uOSA2MC4yIDY0LjggMTA0LjMgMTEyLjEgODJsLjYgMS4zYzEyLjctMy41IDE1LjktNi41IDIwLjMtMTAuN2wuMS0uMWMyLjItMi4xIDQuNy00LjUgOC45LTcuMy0uMyAuNy0xLjMgMS43LTIuNCAyLjctMi4yIDIuMS00LjYgNC41LTEuNiA0LjYgNS0xLjMgMTguNS0xMy40IDI4LjUtMjIuMyAuNi0uNSAxLjItMSAxLjctMS41IDEuNS0xLjMgMi44LTIuNSA0LTMuNmwuMy0uM2MxLjktNC4yIDEuNi01LjYgMS4zLTdsMC0uMWMtLjQtMS42LS44LTMuMyAyLjQtOS42bDcuMy0zLjdjLjgtMi4xIDEuNS00LjEgMi4yLTYgLjItLjYgLjUtMS4yIC43LTEuOGwtLjQtLjItLjEtLjF6TTI0OCAzMzQuMWMtNi0zLTEzLjctOC45LTE0LjgtMTEuNGwtLjQgLjNjLS4zIC42LS41IDEuMy0uMiAyLjItMTIuMi01LjctMjMuNC0xNC4zLTMyLjYtMjQuOSA0LjkgNy4xIDEwLjEgMTQuMSAxNyAxOS41LTYuOS0yLjMtMTUuMS0xMS44LTIxLjYtMTkuM2wtLjEtLjFjLTQuMy01LTcuOS05LjEtOS43LTkuNSAxOS44IDM1LjUgODAuNSA2Mi4zIDExMi4zIDQ5LTE0LjcgLjUtMzMuNCAuMy00OS45LTUuOHptNzkuMy0xMTkuN2wtLjEtLjJjLS41LTEuNS0xLjEtMy4xLTEuNy0zLjQgMS40LTUuOCA1LjQtMTAuNyA0LjQgNC42LTEgMy44LTEuOCAxLjUtMi42LTF6bS00LjIgMjIuMmMtMS4zIDcuOS01IDE1LjUtMTAuMSAyMi41IC4yLTItMS4yLTIuNC0yLjYtMi44LTIuOS0uOC01LjktMS42IDUuNi0xNi4xLS41IDEuOS0yLjEgNC42LTMuNyA3LjNsLS4zIC40Yy0zLjYgNS45LTYuNyAxMSA0IDQuM2wxLTEuOGMyLjYtNC41IDUtOC44IDYtMTMuOGwuMSAwem0tNTUuNiAzMy45YzcuMSAuNiAxNC4xIC42IDIxLTEuMS0yLjUgMi40LTUuMiA0LjgtOC4zIDcuMi0xMS4xLTEuNy0yMS4yLTYtMTIuNy02LjF6bS05Mi42IDExLjZjMy42IDcuMSA2LjQgMTEuNSA5IDE1LjdsLjEgLjJjMi4zIDMuNyA0LjQgNy4xIDYuOCAxMS43LTUuMS00LjItOC43LTkuNS0xMi41LTE1bC0uMy0uNWMtMS40LTIuMS0yLjgtNC4yLTQuNC02LjJsMS4yLTUuOSAuMSAwem03LjUtOS42YzEuNiAzLjMgMy4yIDYuNCA1LjcgOS4xbDIuNiA3LjctMS4zLTIuMWMtMy4yLTUuMy02LjMtMTAuNi04LTE2LjdsMSAyem0yMzguOS00MS42Yy0yLjMgMTcuNC03LjcgMzQuNi0xNiA1MC4zIDcuNi0xNC45IDEyLjUtMzAuOSAxNC44LTQ3LjJsMS4yLTMuMXpNMzUuOCAxMTAuNmMuNCAuOCAxLjQgLjUgMi4zIC4zIDEuOS0uNSAzLjYtLjktLjEgNy42LS41IC4zLTEgLjctMS41IDEtMS40IC45LTIuOCAxLjktMy45IDMgMS45LTMuOCAzLjUtNy40IDMuMi0xMS45ek0yNS41IDE1Mi4zYy0uNyAzLjctMS41IDcuOS0zLjQgMTMuOSAuMi0xLjkgMC0zLjUtLjItNC45bDAtLjFjLS40LTMuNC0uNy02LjMgNC4zLTEyLjgtLjMgMS4yLS41IDIuNS0uNyAzLjhsMCAuMXoiXQogICAgfTsKICAgIGZhTWFzdG9kb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFzdG9kb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmNiIsICJNNDMzIDE3OS4xYzAtOTcuMi02My43LTEyNS43LTYzLjctMTI1LjctNjIuNS0yOC43LTIyOC42LTI4LjQtMjkwLjUgMCAwIDAtNjMuNyAyOC41LTYzLjcgMTI1LjcgMCAxMTUuNy02LjYgMjU5LjQgMTA1LjYgMjg5LjEgNDAuNSAxMC43IDc1LjMgMTMgMTAzLjMgMTEuNCA1MC44LTIuOCA3OS4zLTE4LjEgNzkuMy0xOC4xbC0xLjctMzYuOXMtMzYuMyAxMS40LTc3LjEgMTAuMWMtNDAuNC0xLjQtODMtNC40LTg5LjYtNTQtLjYtNC42LS45LTkuMy0uOS0xMy45IDg1LjYgMjAuOSAxNTguNyA5LjEgMTc4LjcgNi43IDU2LjEtNi43IDEwNS00MS4zIDExMS4yLTcyLjkgOS44LTQ5LjggOS0xMjEuNSA5LTEyMS41ek0zNTcuOSAzMDQuM2wtNDYuNiAwIDAtMTE0LjJjMC00OS43LTY0LTUxLjYtNjQgNi45bDAgNjIuNS00Ni4zIDAgMC02Mi41YzAtNTguNS02NC01Ni42LTY0LTYuOWwwIDExNC4yLTQ2LjcgMGMwLTEyMi4xLTUuMi0xNDcuOSAxOC40LTE3NSAyNS45LTI4LjkgNzkuOC0zMC44IDEwMy44IDYuMWwxMS42IDE5LjUgMTEuNi0xOS41YzI0LjEtMzcuMSA3OC4xLTM0LjggMTAzLjgtNi4xIDIzLjcgMjcuMyAxOC40IDUzIDE4LjQgMTc1bDAgMHoiXQogICAgfTsKICAgIGZhU2tldGNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNrZXRjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2M2IiwgIk0yNy44IDE2Mi4ybC0xOC41IDI0LjkgOTAuNSAwIDYuOS0xMzAuNy03OC45IDEwNS44ek0zOTYuNiA0NS43TDI2OCAzMiA0MDMuNyAxNzkuMiAzOTYuNiA0NS43ek0xMTIuNSAyMTguM2wtMTEuMi0yMi05MS4xIDAgMjI0LjkgMjYxLjctMTIyLjYtMjM5Ljd6bTItMzEuMmwyODQgMEMzNDAuNiAxMjQuMyAyOTMuMyA3Mi45IDI1Ni42IDMzTDExNC41IDE4Ny4xem0yOTcuMyA5LjFsLTEzMy45IDI2MS44IDIyNC44LTI2MS43LTkwLjkgMCAwLS4xek00MTUuNyA2OWwtOS40LTEyLjYgLjkgMTcuMyA2LjEgMTEzLjQgOTAuMyAwLTg3LjktMTE4LjF6TTExMy44IDkzLjVMMTA5LjIgMTc5LjEgMjQ1IDMyIDExNi40IDQ1LjcgMTEzLjggOTMuNXpNNDAxLjUgMTk2LjJsLTI5MCAwYzE4LjIgMzUuNiA2Ni42IDEzMC4yIDE0NS4xIDI4My44TDQwMS41IDE5Ni4yeiJdCiAgICB9OwogICAgZmFXZWJBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2ODIiLCAiTTM3Mi4yIDUyYzAgMjAuOS0xMi40IDM5LTMwLjIgNDcuMkw0NDggMTkyIDU1Mi40IDE3MS4xYy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDQgMCAxMTcuNSAyMS41IDk2IDQ4IDk2czQ4IDIxLjUgNDggNDhjMCAxMC4xLTMuMSAxOS40LTguNCAyNy4xTDE5MiAxOTIgMjk4LjEgOTkuMWMtMTcuNy04LjMtMzAtMjYuMy0zMC00Ny4xIDAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsLjEgMHoiXQogICAgfTsKICAgIGZhU2FzcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzYXNzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MWUiLCAiTTMwMS44IDM3OC45bDAgMHptMjQ5LjEtODdjLTIwLjEgMC00MCA0LjYtNTggMTMuNS01LjktMTEuOS0xMi0yMi4zLTEzLTMwLjEtMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOWMtMi4zIDYuMi00LjEgMTIuNi01LjMgMTkuMS0yLjMgMTEuNy0yNS44IDUzLjUtMzkuMSA3NS4zLTQuNC04LjUtOC4xLTE2LTguOS0yMi0xLjItOS4xLTIuNS0xNC41LTEuMS0yNS4zczcuNy0yNi4xIDcuNi0yNy4yLTEuNC02LjYtMTQuMy02LjctMjQgMi41LTI1LjMgNS45LTIuNyAxMS40LTUuMyAxOS4xLTMzLjkgNzcuMy00Mi4xIDk1LjRjLTQuMiA5LjItNy44IDE2LjYtMTAuNCAyMS42LS40IC44LS43IDEuMy0uOSAxLjcgLjMtLjUgLjUtMSAuNS0uOC0yLjIgNC4zLTMuNSA2LjctMy41IDYuN2wwIC4xYy0xLjcgMy4yLTMuNiA2LjEtNC41IDYuMS0uNiAwLTEuOS04LjQgLjMtMTkuOSA0LjctMjQuMiAxNS44LTYxLjggMTUuNy02My4xLS4xLS43IDIuMS03LjItNy4zLTEwLjctOS4xLTMuMy0xMi40IDIuMi0xMy4yIDIuMnMtMS40IDItMS40IDIgMTAuMS00Mi40LTE5LjQtNDIuNGMtMTguNCAwLTQ0IDIwLjItNTYuNiAzOC41LTcuOSA0LjMtMjUgMTMuNi00MyAyMy41LTYuOSAzLjgtMTQgNy43LTIwLjcgMTEuNC0uNS0uNS0uOS0xLTEuNC0xLjUtMzUuOC0zOC4yLTEwMS45LTY1LjItOTkuMS0xMTYuNSAxLTE4LjcgNy41LTY3LjggMTI3LjEtMTI3LjQgOTgtNDguOCAxNzYuMy0zNS40IDE4OS44LTUuNiAxOS40IDQyLjUtNDEuOSAxMjEuNi0xNDMuNyAxMzMtMzguOCA0LjMtNTkuMi0xMC43LTY0LjMtMTYuMy01LjMtNS45LTYuMS02LjItOC4xLTUuMS0zLjMgMS44LTEuMiA3IDAgMTAuMSAzIDcuOSAxNS41IDIxLjkgMzYuOCAyOC45IDE4LjcgNi4xIDY0LjIgOS41IDExOS4yLTExLjggNjEuOC0yMy44IDEwOS45LTkwLjEgOTUuOC0xNDUuNi0xNC40LTU2LjQtMTA3LjktNzQuOS0xOTYuMy00My41LTUyLjcgMTguNy0xMDkuNyA0OC4xLTE1MC43IDg2LjQtNDguNyA0NS42LTU2LjUgODUuMy01My4zIDEwMS45IDExLjQgNTguOSA5Mi42IDk3LjMgMTI1LjEgMTI1LjctMS42IC45LTMuMSAxLjctNC41IDIuNS0xNi4zIDguMS03OC4yIDQwLjUtOTMuNyA3NC43LTE3LjUgMzguOCAyLjkgNjYuNiAxNi4zIDcwLjQgNDEuOCAxMS42IDg0LjYtOS4zIDEwNy42LTQzLjZzMjAuMi03OS4xIDkuNi05OS41Yy0uMS0uMy0uMy0uNS0uNC0uOCA0LjItMi41IDguNS01IDEyLjgtNy41IDguMy00LjkgMTYuNC05LjQgMjMuNS0xMy4zLTQgMTAuOC02LjkgMjMuOC04LjQgNDIuNi0xLjggMjIgNy4zIDUwLjUgMTkuMSA2MS43IDUuMiA0LjkgMTEuNSA1IDE1LjQgNSAxMy44IDAgMjAtMTEuNCAyNi45LTI1IDguNS0xNi42IDE2LTM1LjkgMTYtMzUuOXMtOS40IDUyLjIgMTYuMyA1Mi4yYzkuNCAwIDE4LjgtMTIuMSAyMy0xOC4zbDAgLjFzLjItLjQgLjctMS4yYzEtMS41IDEuNS0yLjQgMS41LTIuNGwwLS4zYzMuOC02LjUgMTIuMS0yMS40IDI0LjYtNDYgMTYuMi0zMS44IDMxLjctNzEuNSAzMS43LTcxLjUgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjggOS41IDguNyAxOS45IDEzLjQgMzAtMy44IDUuMi02LjEgOC4yLTYuMSA4LjIgMCAuMSAwIC4xIC4xIC4yLTMgNC02LjQgOC4zLTkuOSAxMi41LTEyLjggMTUuMi0yOCAzMi42LTMwIDM3LjYtMi40IDUuOS0xLjggMTAuMyAyLjggMTMuNyAzLjQgMi42IDkuNCAzIDE1LjcgMi41IDExLjUtLjggMTkuNi0zLjYgMjMuNS01LjQgNy4yLTIuNiAxNC02LjEgMjAuMi0xMC42IDEyLjUtOS4yIDIwLjEtMjIuNCAxOS40LTM5LjgtLjQtOS42LTMuNS0xOS4yLTcuMy0yOC4yIDEuMS0xLjYgMi4zLTMuMyAzLjQtNSAxOS44LTI4LjkgMzUuMS02MC42IDM1LjEtNjAuNiAxLjUgOC43IDMuNiAxNy4zIDYuMiAyNS44IDIuNCA4LjEgNy4xIDE3IDExLjQgMjUuNy0xOC42IDE1LjEtMzAuMSAzMi42LTM0LjEgNDQuMS03LjQgMjEuMy0xLjYgMzAuOSA5LjMgMzMuMSA0LjkgMSAxMS45LTEuMyAxNy4xLTMuNSA3LjctMi42IDE1LTYuMyAyMS42LTExLjEgMTIuNS05LjIgMjQuNi0yMi4xIDIzLjgtMzkuNi0uMy03LjktMi41LTE1LjgtNS40LTIzLjQgMTUuNy02LjYgMzYuMS0xMC4yIDYyLjEtNy4yIDU1LjcgNi41IDY2LjYgNDEuMyA2NC41IDU1LjhzLTEzLjggMjIuNi0xNy43IDI1LTUuMSAzLjMtNC44IDUuMWMuNSAyLjYgMi4zIDIuNSA1LjYgMS45IDQuNi0uOCAyOS4yLTExLjggMzAuMy0zOC43IDEuNi0zNC0zMS4xLTcxLjQtODktNzEuMWwwIDB6TTEyMS44IDQzNi42Yy0xOC40IDIwLjEtNDQuMiAyNy43LTU1LjMgMjEuMy0xMS45LTYuOS03LjItMzYuNSAxNS41LTU3LjkgMTMuOC0xMyAzMS42LTI1IDQzLjQtMzIuNCAyLjctMS42IDYuNi00IDExLjQtNi45IC44LS41IDEuMi0uNyAxLjItLjcgLjktLjYgMS45LTEuMSAyLjktMS43IDguMyAzMC40IC4zIDU3LjItMTkuMSA3OC4zbDAgMHptMTM0LjQtOTEuNGMtNi40IDE1LjctMTkuOSA1NS43LTI4LjEgNTMuNi03LTEuOC0xMS4zLTMyLjMtMS40LTYyLjMgNS0xNS4xIDE1LjYtMzMuMSAyMS45LTQwLjEgMTAuMS0xMS4zIDIxLjItMTQuOSAyMy44LTEwLjQgMy41IDUuOS0xMi4yIDQ5LjQtMTYuMiA1OS4yem0xMTEgNTNjLTIuNyAxLjQtNS4yIDIuMy02LjQgMS42LS45LS41IDEuMS0yLjQgMS4xLTIuNHMxMy45LTE0LjkgMTkuNC0yMS43YzMuMi00IDYuOS04LjcgMTAuOS0xMy45IDAgLjUgLjEgMSAuMSAxLjYtLjEgMTcuOS0xNy4zIDMwLTI1LjEgMzQuOGwwIDB6bTg1LjYtMTkuNWMtMi0xLjQtMS43LTYuMSA1LTIwLjcgMi42LTUuNyA4LjYtMTUuMyAxOS0yNC41IDEuMiAzLjUgMS44IDcuMSAxLjkgMTAuOC0uMSAyMi41LTE2LjIgMzAuOS0yNS45IDM0LjRsMCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVXaGF0c2FwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2hhdHNhcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2hhdHNhcHAtc3F1YXJlIl0sICJmNDBjIiwgIk05Mi4xIDI1NC42YzAgMjQuOSA3IDQ5LjIgMjAuMiA3MC4xbDMuMSA1LTEzLjMgNDguNiA0OS45LTEzLjEgNC44IDIuOWMyMC4yIDEyIDQzLjQgMTguNCA2Ny4xIDE4LjRsLjEgMGM3Mi42IDAgMTMzLjMtNTkuMSAxMzMuMy0xMzEuOCAwLTM1LjItMTUuMi02OC4zLTQwLjEtOTMuMi0yNS0yNS01OC0zOC43LTkzLjItMzguNy03Mi43IDAtMTMxLjggNTkuMS0xMzEuOSAxMzEuOHpNMjc0LjggMzMwYy0xMi42IDEuOS0yMi40IC45LTQ3LjUtOS45LTM2LjgtMTUuOS02MS44LTUxLjUtNjYuOS01OC43LS40LS42LS43LS45LS44LTEuMS0yLTIuNi0xNi4yLTIxLjUtMTYuMi00MSAwLTE4LjQgOS0yNy45IDEzLjItMzIuMyAuMy0uMyAuNS0uNSAuNy0uOCAzLjYtNCA3LjktNSAxMC42LTUgMi42IDAgNS4zIDAgNy42IC4xbC44IDBjMi4zIDAgNS4yIDAgOC4xIDYuOCAxLjIgMi45IDMgNy4zIDQuOSAxMS44IDMuMyA4IDYuNyAxNi4zIDcuMyAxNy42IDEgMiAxLjcgNC4zIC4zIDYuOS0zLjQgNi44LTYuOSAxMC40LTkuMyAxMy0zLjEgMy4yLTQuNSA0LjctMi4zIDguNiAxNS4zIDI2LjMgMzAuNiAzNS40IDUzLjkgNDcuMSA0IDIgNi4zIDEuNyA4LjYtMSAyLjMtMi42IDkuOS0xMS42IDEyLjUtMTUuNSAyLjYtNCA1LjMtMy4zIDguOS0yczIzLjEgMTAuOSAyNy4xIDEyLjljLjggLjQgMS41IC43IDIuMSAxIDIuOCAxLjQgNC43IDIuMyA1LjUgMy42IC45IDEuOSAuOSA5LjktMi40IDE5LjEtMy4zIDkuMy0xOS4xIDE3LjctMjYuNyAxOC44ek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTQ4LjEgMzkzLjlMNjQgNDE2IDg2LjUgMzMzLjhjLTEzLjktMjQtMjEuMi01MS4zLTIxLjItNzkuMyAuMS04Ny40IDcxLjItMTU4LjUgMTU4LjYtMTU4LjUgNDIuNCAwIDgyLjIgMTYuNSAxMTIuMiA0Ni41IDI5LjkgMzAgNDcuOSA2OS44IDQ3LjkgMTEyLjIgMCA4Ny40LTcyLjcgMTU4LjUtMTYwLjEgMTU4LjUtMjYuNiAwLTUyLjctNi43LTc1LjgtMTkuM3oiXQogICAgfTsKICAgIGZhV2hhdHNhcHBTcXVhcmUgPSBmYVNxdWFyZVdoYXRzYXBwOwogICAgZmFTa3lwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJza3lwZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTdlIiwgIk00MjQuNyAyOTkuOGMyLjktMTQgNC43LTI4LjkgNC43LTQzLjggMC0xMTMuNS05MS45LTIwNS4zLTIwNS4zLTIwNS4zLTE0LjkgMC0yOS43IDEuNy00My44IDQuNy0xOS0xNC43LTQyLjYtMjMuNC02OC4zLTIzLjQtNjEuOCAwLTExMiA1MC4yLTExMiAxMTIgMCAyNS43IDguNyA0OS4zIDIzLjMgNjguMi0yLjkgMTQtNC43IDI4LjktNC43IDQzLjggMCAxMTMuNSA5MS45IDIwNS4zIDIwNS4zIDIwNS4zIDE0LjkgMCAyOS43LTEuNyA0My44LTQuNyAxOSAxNC42IDQyLjYgMjMuMyA2OC4yIDIzLjMgNjEuOCAwIDExMi01MC4yIDExMi0xMTIgLjEtMjUuNi04LjYtNDkuMi0yMy4yLTY4LjF6TTIzMC4xIDM5MS4zYy02NS42IDAtMTIwLjUtMjkuMi0xMjAuNS02NSAwLTE2IDktMzAuNiAyOS41LTMwLjYgMzEuMiAwIDM0LjEgNDQuOSA4OC4xIDQ0LjkgMjUuNyAwIDQyLjMtMTEuNCA0Mi4zLTI2LjMgMC0xOC43LTE2LTIxLjYtNDItMjgtNjIuNS0xNS40LTExNy44LTIyLTExNy44LTg3LjIgMC01OS4yIDU4LjYtODEuMSAxMDkuMS04MS4xIDU1LjEgMCAxMTAuOCAyMS45IDExMC44IDU1LjQgMCAxNi45LTExLjQgMzEuOC0zMC4zIDMxLjgtMjguMyAwLTI5LjItMzMuNS03NS0zMy41LTI1LjcgMC00MiA3LTQyIDIyLjUgMCAxOS44IDIwLjggMjEuOCA2OS4xIDMzIDQxLjQgOS4zIDkwLjcgMjYuOCA5MC43IDc3LjYgMCA1OS4xLTU3LjEgODYuNS0xMTIgODYuNXoiXQogICAgfTsKICAgIGZhQW5ndWxhciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmd1bGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MjAiLCAiTTE4NS43IDI2OC4xbDc2LjIgMC0zOC4xLTkxLjYtMzguMSA5MS42ek0yMjMuOCAzMkwxNiAxMDYuNCA0Ny44IDM4Mi4xIDIyMy44IDQ4MCAzOTkuOCAzODIuMSA0MzEuNiAxMDYuNCAyMjMuOCAzMnpNMzU0IDM3My44bC00OC42IDAtMjYuMi02NS40LTExMC42IDAtMjYuMiA2NS40LTQ4LjcgMCAxMzAuMS0yOTIuMyAxMzAuMiAyOTIuM3oiXQogICAgfTsKICAgIGZhT3BlbnN1c2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbnN1c2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTYyYiIsICJNNDcxLjEgMTAyLjdzLS4zIDE4LjMtLjMgMjAuM2MtOS4xLTMtNzQuNC0yNC4xLTEzNS43LTI2LjMtNTEuOS0xLjgtMTIyLjgtNC4zLTIyMyA1Ny4zLTE5LjQgMTIuNC03My45IDQ2LjEtOTkuNiAxMDkuNy01LjUgMTMuMy0xMi42IDQzLjMtNS41IDcxLjQgMy4zIDEyLjggOC45IDI0LjkgMTYuNSAzNS43IDE3LjQgMjUgNDYuNiA0MS42IDc4LjEgNDQuNCA0NC40IDMuOSA3OC4xLTE2IDkwLTUzLjMgOC4yLTI1LjggMC02My42LTMxLjUtODIuOS0yNS42LTE1LjctNTMuMy0xMi4xLTY5LjItMS42LTEzLjkgOS4yLTIxLjggMjMuNS0yMS42IDM5LjIgLjMgMjcuOCAyNC4zIDQyLjYgNDEuNSA0Mi42IDUuNCAwIDEwLjctLjkgMTUuOC0yLjcgNi41LTEuOCAxMy4zLTYuNSAxMy4zLTE0LjkgMC0xMi4xLTExLjYtMTQuOC0xNi44LTEzLjktMi45IC41LTQuNSAyLTExLjggMi40LTItLjItMTItMy4xLTEyLTE0bDAtLjFjLjItMTIuMyAxMy4yLTE4IDI1LjUtMTYuOSAzMi4zIDIuOCA0Ny43IDQwLjcgMjguNSA2NS43LTE4LjMgMjMuNy03Ni42IDIzLjItOTkuNy0yMC40LTI2LTQ5LjIgMTIuNy0xMTEuMiA4Ny05OC40IDMzLjIgNS43IDgzLjYgMzUuNSAxMDIuNCAxMDQuM2w0NS45IDBjLTUuNy0xNy42LTguOS02OC4zIDQyLjctNjguMyA1Ni43IDAgNjMuOSAzOS45IDc5LjggNjguM2w0OC42IDBjLTEyLjgtMTguMy0yMS43LTM4LjctMTguOS01NS44IDUuNi0zMy44IDM5LjctMTguNCA4Mi40LTE3LjQgNjYuNSAuNCAxMDIuMS0yNyAxMDMuMS0yOCAzLjctMy4xIDYuNS0xNS44IDctMTcuNyAxLjMtNS4xLTMuMi0yLjQtMy4yLTIuNC04LjcgNS4yLTMwLjUgMTUuMi01MC45IDE1LjYtMjUuMyAuNS03Ni4yLTI1LjQtODEuNi0yOC4yLS4zLS40IC4xIDEuMi0xMS0yNS41IDg4LjQgNTguMyAxMTguMyA0MC41IDE0NS4yIDIxLjcgLjgtLjYgNC4zLTIuOSAzLjYtNS43LTEzLjgtNDguMS0yMi40LTYyLjctMzQuNS02OS42LTM3LTIxLjYtMTI1LTM0LjctMTI5LjItMzUuMyAuMS0uMS0uOS0uMy0uOSAuN3ptNjAuNCA3Mi44YTM3LjYgMzcuNiAwIDEgMSA3NS4yIDIuNiAzNy42IDM3LjYgMCAxIDEgLTc1LjItMi42em0zOC42LTI1LjNjLTMuNi0uMy03LjEgLjEtMTAuNSAxLjJzLTYuNSAyLjktOS4yIDUuMy00LjggNS4zLTYuMyA4LjUtMi40IDYuNy0yLjUgMTAuMyAuNSA3LjEgMS44IDEwLjQgMy4zIDYuMyA1LjggOC45IDUuNSA0LjUgOC44IDUuOSA2LjkgMiAxMC40IDEuOWMzLjYgLjMgNy4xLS4xIDEwLjUtMS4yczYuNS0yLjkgOS4yLTUuMyA0LjgtNS4zIDYuMy04LjUgMi40LTYuNyAyLjUtMTAuMy0uNS03LjEtMS44LTEwLjQtMy4zLTYuMy01LjgtOC45LTUuNS00LjUtOC44LTUuOS02LjktMi0xMC40LTEuOXptNC4zIDI4LjhjLTE1LjQgMC0xNS40LTE1LjYgMC0xNS42czE1LjQgMTUuNiAwIDE1LjZ6Il0KICAgIH07CiAgICBmYURyb3Bib3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHJvcGJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTZiIiwgIk0yODguNCAxMTYuM2wtMTMyIDg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLjQtODUuMSAxMzIuMy04NC4zLTEzMi4zLTgzLjUgMTMyLjMtODQuMyAxMzIuMSA4NC4zek0xNTUuNiAzOTUuN2wxMzItODQuMyAxMzIgODQuMy0xMzIgODQuMy0xMzItODQuM3pNMjg4LjQgMjg0LjFsMTMyLTg0LjMtMTMyLTgzLjYgMTMxLjMtODQuMiAxMzIuMyA4NC4zLTEzMi4zIDg0LjMgMTMyLjMgODQuMi0xMzIuMyA4NC4zLTEzMS4zLTg1eiJdCiAgICB9OwogICAgZmFEZWV6ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVlemVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzciLCAiTTE0LjggMTAxLjFDNi42IDEwMS4xIDAgMTI3LjYgMCAxNjAuM3M2LjYgNTkuMiAxNC44IDU5LjIgMTQuOC0yNi41IDE0LjgtNTkuMi02LjYtNTkuMi0xNC44LTU5LjJ6TTQ0OC43IDQwLjljLTcuNyAwLTE0LjUgMTcuMS0xOS40IDQ0LjEtNy43LTQ2LjctMjAuMi03Ny0zNC4yLTc3LTE2LjggMC0zMS4xIDQyLjktMzggMTA1LjQtNi42LTQ1LjQtMTYuOC03NC4yLTI4LjMtNzQuMi0xNi4xIDAtMjkuNiA1Ni45LTM0LjcgMTM2LjItOS40LTQwLjgtMjMuMi02Ni4zLTM4LjMtNjYuM3MtMjguOCAyNS41LTM4LjMgNjYuM2MtNS4xLTc5LjMtMTguNi0xMzYuMi0zNC43LTEzNi4yLTExLjUgMC0yMS43IDI4LjgtMjguMyA3NC4yLTYuNi02Mi41LTIxLjItMTA1LjQtMzcuOC0xMDUuNC0xNCAwLTI2LjUgMzAuNC0zNC4yIDc3LTQuOC0yNy0xMS43LTQ0LjEtMTkuNC00NC4xLTE0LjMgMC0yNiA1OS4yLTI2IDEzMi4xUzQ5IDMwNS4yIDYzLjMgMzA1LjJjNS45IDAgMTEuNS05LjkgMTUuOC0yNi44IDYuOSA2MS43IDIxLjIgMTA0LjEgMzggMTA0LjEgMTMgMCAyNC41LTI1LjUgMzIuMS02NS42IDUuNCA3Ni4zIDE4LjYgMTMwLjQgMzQuMiAxMzAuNCA5LjcgMCAxOC42LTIxLjQgMjUuMy01Ni40IDcuOSA3Mi4yIDI2LjMgMTIyLjcgNDcuNyAxMjIuN3MzOS41LTUwLjUgNDcuNy0xMjIuN2M2LjYgMzUgMTUuNiA1Ni40IDI1LjMgNTYuNCAxNS42IDAgMjguOC01NC4xIDM0LjItMTMwLjQgNy43IDQwLjEgMTkuNCA2NS42IDMyLjEgNjUuNiAxNi42IDAgMzAuOS00Mi4zIDM4LTEwNC4xIDQuMyAxNi44IDkuNyAyNi44IDE1LjggMjYuOCAxNC4zIDAgMjYtNTkuMiAyNi0xMzIuMVM0NjMgNDAuOSA0NDguNyA0MC45em00OC41IDYwLjJjLTguMiAwLTE0LjggMjYuNS0xNC44IDU5LjJzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjAiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMy42IDUzLjJjMi44LS4zIDExLjUgMSAxMS41IDExLjVsNi42IDEwNy4yIDQuOS01OS4zYzAtNiA0LjctMTAuNiAxMC42LTEwLjZzMTAuNiA0LjcgMTAuNiAxMC42YzAgMi41LS41LTUuNyA1LjcgODEuNWw1LjgtNjQuMmMuMy0yLjkgMi45LTkuMyAxMC4yLTkuMyAzLjggMCA5LjkgMi4zIDEwLjYgOC45bDExLjUgOTYuNSA1LjMtMTIuOGMxLjgtNC40IDUuMi02LjYgMTAuMi02LjZsNTggMCAwIDIxLjMtNTAuOSAwLTE4LjIgNDQuM2MtMy45IDkuOS0xOS41IDkuMS0yMC44LTMuMWwtNC0zMS45LTcuNSA5Mi42Yy0uMyAzLTMgOS4zLTEwLjIgOS4zLTMgMC05LjgtMi4xLTEwLjYtOS4zIDAtMS45IC42IDUuOC02LjItNzcuOWwtNS4zIDcyLjJjLTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0yLjkgMC05LjgtMi0xMC42LTkuMyAwLTEuOSAuNSA2LjctNS44LTg3LjdMMjU1IDM4My45YzAgNi4zLTMuNiAxMi40LTEwLjYgMTIuNC01LjIgMC0xMC42LTQuMS0xMC42LTEyTDIyOCAyOTYuNmMtNS44IDkyLjUtNS4zIDg0LTUuMyA4NS45LTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLS43LS40LTEuMS0uNC0yLjZsLTYuMi04OC42LTQuOSA1Ni43Yy0uNyA2LjUtNi43IDkuMy0xMC42IDkuMy01LjggMC05LjYtNC4xLTEwLjYtOC45TDE1Ny43IDI3MmMtMiA0LTMuNSA4LjQtMTEuMSA4LjRsLTUxLjQgMCAwLTIxLjMgNDQuOCAwIDEzLjctMjcuOWM0LjQtOS45IDE4LjItNy4yIDE5LjkgMi43bDMuMSAyMC40IDguNC05Ny45YzAtNiA0LjgtMTAuNiAxMC42LTEwLjYgLjUgMCAxMC42LS4yIDEwLjYgMTIuNGw0LjkgNjkuMSA2LjYtOTIuNmMwLTEwLjEgOS41LTEwLjYgMTAuMi0xMC42IC42IDAgMTAuNiAuNyAxMC42IDEwLjZsNS4zIDgwLjYgNi4yLTk3LjljLjEtMS4xLS42LTEwLjMgOS45LTExLjV6Il0KICAgIH07CiAgICBmYUplZGlPcmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqZWRpLW9yZGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MGUiLCAiTTM5OC45IDM3My42Yzk1LjktMTIyLjEgMTcuMi0yMzMuMSAxNy4yLTIzMy4xIDQ1LjQgODUuOC00MS40IDE3MC41LTQxLjQgMTcwLjUgMTA1LTE3MS41LTYwLjUtMjcxLjUtNjAuNS0yNzEuNSA5Ni45IDcyLjctMTAuMSAxOTAuNy0xMC4xIDE5MC43IDg1LjggMTU4LjQtNjguNiAyMzAuMS02OC42IDIzMC4xcy0uNC0xNi45LTIuMi04NS43YzQuMyA0LjUgMzQuNSAzNi4yIDM0LjUgMzYuMmwtMjQuMi00Ny40IDYyLjYtOS4xLTYyLjYtOS4xIDIwLjItNTUuNS0zMS40IDQ1LjljLTIuMi04Ny43LTcuOC0zMDUuMS03LjktMzA2LjkgMCAxLTUuNiAyMTktNy45IDMwNi45bC0zMS40LTQ1LjkgMjAuMiA1NS41LTYyLjYgOS4xIDYyLjYgOS4xLTI0LjIgNDcuNCAzNC41LTM2LjJjLTEuOCA2OC44LTIuMiA4NS43LTIuMiA4NS43UzU5LjEgMzg4LjYgMTQ0LjkgMjMwLjJjMCAwLTEwNy0xMTguMS0xMC4xLTE5MC43IDAgMC0xNjUuNSA5OS45LTYwLjUgMjcxLjUgMCAwLTg2LjgtODQuOC00MS40LTE3MC41IDAgMC03OC43IDExMSAxNy4yIDIzMy4xIDAgMC0yNi4yLTE2LjEtNDkuNC03Ny43IDAgMCAxNi45IDE4My4zIDIyMiAxODUuN2w0LjEgMGMyMDUtMi40IDIyMi0xODUuNyAyMjItMTg1LjctMjMuNiA2MS41LTQ5LjkgNzcuNy00OS45IDc3Ljd6Il0KICAgIH07CiAgICBmYVJQcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInItcHJvamVjdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGY3IiwgIk01NzguNSAyMjYuNkM1NzguNSAxMTkuMSA0NDguNCAzMiAyODggMzJTLTIuNSAxMTkuMS0yLjUgMjI2LjZjMCA5NS44IDEwMy4zIDE3NS40IDIzOS40IDE5MS41bDAgNjEuOSA5OS4xIDAgMC02MS41YzI0LjMtMi43IDQ3LjYtNy40IDY5LjQtMTMuOWw0MC4xIDc1LjQgMTEyIDAtNjcuNC0xMTMuN2M1NC41LTM1LjQgODguNC04NC45IDg4LjQtMTM5Ljd6TTExMS43IDI0MS4xYzAtNzMuNSA5OC45LTEzMyAyMjAuOC0xMzNzMjExLjkgNDAuNyAyMTEuOSAxMzNjMCA1MC4xLTI2LjUgODUtNzAuMyAxMDYuNC0yLjQtMS42LTQuNy0yLjktNi40LTMuNy0xMC4yLTUuMi0yNy44LTEwLjUtMjcuOC0xMC41czg2LjYtNi40IDg2LjYtOTIuNy05MC42LTg3LjktOTAuNi04Ny45bC0xOTkgMCAwIDIwOC4zYy03NC4xLTIxLjUtMTI1LjItNjcuMS0xMjUuMi0xMTkuOXptMjI1LjEgMzguM2wwLTU1LjZjNTcuOCAwIDg3LjgtNi44IDg3LjggMjcuMyAwIDM2LjUtMzguMiAyOC4zLTg3LjggMjguM3ptLS45IDcyLjVsMjYuNiAwYzEwLjggMCAxOC45IDExLjcgMjQgMTkuMi0xNi4xIDEuOS0zMyAyLjgtNTAuNiAyLjlsMC0yMi4xeiJdCiAgICB9OwogICAgZmFJbnN0YWxvZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnN0YWxvZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDgxIiwgIk0xNTMuNiA0ODBsMjMzLjcgMCAxMTUuNC0yMDQuMi0yOTguMyA1Ny40LTUwLjggMTQ2Ljh6TTUwNSAyNDAuMUwzODcuNCAzMiAxNTUuOSAzMiAzNjAuNSAyNjcuOSA1MDUgMjQwLjF6TTEyNC42IDQ4LjhMNy41IDI1NiAxMjMuNSA0NjEuMiAyMjUuOSAxNjUuNiAxMjQuNiA0OC44eiJdCiAgICB9OwogICAgZmFDYW5hZGlhbk1hcGxlTGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYW5hZGlhbi1tYXBsZS1sZWFmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODUiLCAiTTM4My44IDM1MS43YzIuNS0yLjUgMTA1LjItOTIuNCAxMDUuMi05Mi40bC0xNy41LTcuNWMtMTAtNC45LTcuNC0xMS41LTUtMTcuNCAyLjQtNy42IDIwLjEtNjcuMyAyMC4xLTY3LjNzLTQ3LjcgMTAtNTcuNyAxMi41Yy03LjUgMi40LTEwLTIuNS0xMi41LTcuNXMtMTUtMzIuNC0xNS0zMi40LTUyLjYgNTkuOS01NS4xIDYyLjNjLTEwIDcuNS0yMC4xIDAtMTcuNi0xMCAwLTEwIDI3LjYtMTI5LjYgMjcuNi0xMjkuNnMtMzAuMSAxNy40LTQwLjEgMjIuNGMtNy41IDUtMTIuNiA1LTE3LjYtNS01LjEtNy41LTQyLjctNzkuOC00Mi43LTc5LjhzLTM3LjUgNzIuMy00Mi41IDc5LjhjLTUgMTAtMTAgMTAtMTcuNiA1LTEwLTUtNDAuMS0yMi40LTQwLjEtMjIuNFMxODMuMyAxODIgMTgzLjMgMTkyYzIuNSAxMC03LjUgMTcuNS0xNy42IDEwLTIuNS0yLjUtNTUuMS02Mi4zLTU1LjEtNjIuM3MtMTIuNSAyNy4zLTE1IDMyLjMtNSA5LjktMTIuNSA3LjVDNzMgMTc3IDI1LjQgMTY3IDI1LjQgMTY3UzQzIDIyNi43IDQ1LjUgMjM0LjNjMi40IDYgNSAxMi41LTUgMTcuNEwyMyAyNTkuM3MxMDIuNiA4OS45IDEwNS4yIDkyLjRjNS4xIDUgMTAgNy41IDUuMSAyMi41LTUuMSAxNS0xMC4xIDM1LjEtMTAuMSAzNS4xczk1LjItMjAuMSAxMDUuMy0yMi42YzguNy0uOSAxOC4zIDIuNSAxOC4zIDEyLjVTMjQxIDUxMiAyNDEgNTEybDMwIDBzLTUuOC0xMDIuNy01LjgtMTEyLjggOS41LTEzLjQgMTguNC0xMi41YzEwIDIuNSAxMDUuMiAyMi42IDEwNS4yIDIyLjZzLTUtMjAuMS0xMC0zNS4xIDAtMTcuNSA1LTIyLjV6Il0KICAgIH07CiAgICBmYUV0aGVyZXVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV0aGVyZXVtIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MmUiLCAiTTMxMS45IDI2MC44TDE2MCAzNTMuNiA4IDI2MC44IDE2MCAwIDMxMS45IDI2MC44ek0xNjAgMzgzLjRMOCAyOTAuNiAxNjAgNTEyIDMxMiAyOTAuNiAxNjAgMzgzLjR6Il0KICAgIH07CiAgICBmYUhvdXp6ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvdXp6IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2MiLCAiTTI3NiAzMzAuN2wtMTA0LjYgMCAwIDE0OS4zLTE1NC4zIDAgMC00NDggMTA5LjUgMCAwIDEwNC41IDMwNS4xIDg1LjYgMCAyNTcuOS0xNTUuNyAwIDAtMTQ5LjN6Il0KICAgIH07CiAgICBmYVZpYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDkiLCAiTTQ0NC4zIDQ5LjljLTEyLjctMTEuNy02NC4xLTQ5LTE3OC43LTQ5LjUgMCAwLTEzNS4xLTguMS0yMDAuOSA1Mi4zLTM2LjYgMzYuNi00OS41IDkwLjMtNTAuOSAxNTYuOHMtMy4xIDE5MS4xIDExNyAyMjQuOWwuMSAwLS4xIDUxLjZzLS44IDIwLjkgMTMgMjUuMWMxNi42IDUuMiAyNi40LTEwLjcgNDIuMy0yNy44IDguNy05LjQgMjAuNy0yMy4yIDI5LjgtMzMuNyA4Mi4yIDYuOSAxNDUuMy04LjkgMTUyLjUtMTEuMiAxNi42LTUuNCAxMTAuNS0xNy40IDEyNS43LTE0MiAxNS44LTEyOC42LTcuNi0yMDkuOC00OS44LTI0Ni41ek00NTguMiAyODdjLTEyLjkgMTA0LTg5IDExMC42LTEwMyAxMTUuMS02IDEuOS02MS41IDE1LjctMTMxLjIgMTEuMiAwIDAtNTIgNjIuNy02OC4yIDc5LTUuMyA1LjMtMTEuMSA0LjgtMTEtNS43IDAtNi45IC40LTg1LjcgLjQtODUuN2wwIDBDNDMuNCAzNzIuNyA0OS40IDI2Ni42IDUwLjUgMjExLjFzMTEuNi0xMDEgNDIuNi0xMzEuNmM1NS43LTUwLjUgMTcwLjQtNDMgMTcwLjQtNDMgOTYuOSAuNCAxNDMuMyAyOS42IDE1NC4xIDM5LjQgMzUuNyAzMC42IDUzLjkgMTAzLjggNDAuNiAyMTEuMXptLTEzOS04MC44Yy40IDguNi0xMi41IDkuMi0xMi45IC42LTEuMS0yMi0xMS40LTMyLjctMzIuNi0zMy45LTguNi0uNS03LjgtMTMuNCAuNy0xMi45IDI3LjkgMS41IDQzLjQgMTcuNSA0NC44IDQ2LjJ6bTIwLjMgMTEuM2MxLTQyLjQtMjUuNS03NS42LTc1LjgtNzkuMy04LjUtLjYtNy42LTEzLjUgLjktMTIuOSA1OCA0LjIgODguOSA0NC4xIDg3LjggOTIuNS0uMSA4LjYtMTMuMSA4LjItMTIuOS0uM3ptNDcgMTMuNGMuMSA4LjYtMTIuOSA4LjctMTIuOSAuMS0uNi04MS41LTU0LjktMTI1LjktMTIwLjgtMTI2LjQtOC41LS4xLTguNS0xMi45IDAtMTIuOSA3My43IC41IDEzMyA1MS40IDEzMy43IDEzOS4yek0zNzUuMiAzMjlsMCAuMmMtMTAuOCAxOS0zMSA0MC01MS44IDMzLjNsLS4yLS4zYy0yMS4xLTUuOS03MC44LTMxLjUtMTAyLjItNTYuNS0xNi4yLTEyLjgtMzEtMjcuOS00Mi40LTQyLjQtMTAuMy0xMi45LTIwLjctMjguMi0zMC44LTQ2LjYtMjEuMy0zOC41LTI2LTU1LjctMjYtNTUuNy02LjctMjAuOCAxNC4yLTQxIDMzLjMtNTEuOGwuMiAwYzkuMi00LjggMTgtMy4yIDIzLjkgMy45IDAgMCAxMi40IDE0LjggMTcuNyAyMi4xIDUgNi44IDExLjcgMTcuNyAxNS4yIDIzLjggNi4xIDEwLjkgMi4zIDIyLTMuNyAyNi42bC0xMiA5LjZjLTYuMSA0LjktNS4zIDE0LTUuMyAxNHMxNy44IDY3LjMgODQuMyA4NC4zYzAgMCA5LjEgLjggMTQtNS4zbDkuNi0xMmM0LjYtNiAxNS43LTkuOCAyNi42LTMuNyAxNC43IDguMyAzMy40IDIxLjIgNDUuOCAzMi45IDcgNS43IDguNiAxNC40IDMuOCAyMy42eiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJraWNrc3RhcnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzcXVhcmUta2lja3N0YXJ0ZXIiXSwgImYzYmIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyMC44IDIzM2wtMjMuMyAyMy4xIDIzLjMgMjIuOWMyNC4xIDIzLjkgMjQuMSA2MyAwIDg2LjlzLTYzLjQgMjMuOS04Ny42IDBsLTguNS04LjRjLTExLjMgMTYtMjkuNyAyNi41LTUwLjkgMjYuNS0zNC4xIDAtNjEuOS0yNy41LTYxLjktNjEuNGwwLTEzMy4yYzAtMzMuOCAyNy43LTYxLjQgNjEuOS02MS40IDIxLjEgMCAzOS42IDEwLjUgNTAuOSAyNi41bDguNS04LjRjMjQuMS0yMy45IDYzLjQtMjMuOSA4Ny42IDBzMjQuMSA2MyAwIDg2Ljl6Il0KICAgIH07CiAgICBmYVNxdWFyZUtpY2tzdGFydGVyID0gZmFLaWNrc3RhcnRlcjsKICAgIGZhU3BvdGlmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcG90aWZ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYmMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzU2LjcgMzcyLjljLTQuMiAwLTYuOC0xLjMtMTAuNy0zLjYtNjIuNC0zNy42LTEzNS0zOS4yLTIwNi43LTI0LjUtMy45IDEtOSAyLjYtMTEuOSAyLjYtOS43IDAtMTUuOC03LjctMTUuOC0xNS44IDAtMTAuMyA2LjEtMTUuMiAxMy42LTE2LjggODEuOS0xOC4xIDE2NS42LTE2LjUgMjM3IDI2LjIgNi4xIDMuOSA5LjcgNy40IDkuNyAxNi41cy03LjEgMTUuNC0xNS4yIDE1LjR6bTI2LjktNjUuNmMtNS4yIDAtOC43LTIuMy0xMi4zLTQuMi02Mi41LTM3LTE1NS43LTUxLjktMjM4LjYtMjkuNC00LjggMS4zLTcuNCAyLjYtMTEuOSAyLjYtMTAuNyAwLTE5LjQtOC43LTE5LjQtMTkuNHM1LjItMTcuOCAxNS41LTIwLjdjMjcuOC03LjggNTYuMi0xMy42IDk3LjgtMTMuNiA2NC45IDAgMTI3LjYgMTYuMSAxNzcgNDUuNSA4LjEgNC44IDExLjMgMTEgMTEuMyAxOS43LS4xIDEwLjgtOC41IDE5LjUtMTkuNCAxOS41em0zMS03Ni4yYy01LjIgMC04LjQtMS4zLTEyLjktMy45LTcxLjItNDIuNS0xOTguNS01Mi43LTI4MC45LTI5LjctMy42IDEtOC4xIDIuNi0xMi45IDIuNi0xMy4yIDAtMjMuMy0xMC4zLTIzLjMtMjMuNiAwLTEzLjYgOC40LTIxLjMgMTcuNC0yMy45IDM1LjItMTAuMyA3NC42LTE1LjIgMTE3LjUtMTUuMiA3MyAwIDE0OS41IDE1LjIgMjA1LjQgNDcuOCA3LjggNC41IDEyLjkgMTAuNyAxMi45IDIyLjYgMCAxMy42LTExIDIzLjMtMjMuMiAyMy4zeiJdCiAgICB9OwogICAgZmFMZWFucHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxlYW5wdWIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIxMiIsICJNMzg2LjYgMTExLjVsMTUuMSAyNDktMTEtLjNjLTM2LjItLjgtNzEuNiA4LjgtMTAyLjcgMjgtMzEtMTkuMi02Ni40LTI4LTEwMi43LTI4LTQ1LjYgMC04Mi4xIDEwLjctMTIzLjUgMjcuN0w5My4yIDEyOS42YzI4LjUtMTEuOCA2MS41LTE4LjEgOTIuMi0xOC4xIDQxLjIgMCA3My44IDEzLjIgMTAyLjcgNDIuNSAyNy43LTI4LjMgNTktNDEuNyA5OC41LTQyLjV6TTU2OS4yIDQ0OGMtMjUuNSAwLTQ3LjUtNS4yLTcwLjUtMTUuNi0zNC4zLTE1LjYtNzAtMjUtMTA3LjktMjUtMzkgMC03NC45IDEyLjktMTAyLjcgNDAuNi0yNy43LTI3LjctNjMuNy00MC42LTEwMi43LTQwLjYtMzcuOSAwLTczLjYgOS4zLTEwNy45IDI1LTIyLjIgOS45LTQ0LjcgMTUuNi02OS4yIDE1LjZMNyA0NDggNDkuNiA5OC45YzM5LjMtMjIuMiA4Ny0zNC45IDEzMi4zLTM0LjkgMzcuMSAwIDc1LjIgNy43IDEwNi4yIDI5LjEgMzEtMjEuNCA2OS4yLTI5LjEgMTA2LjItMjkuMSA0NS4zIDAgOTMgMTIuNiAxMzIuMyAzNC45TDU2OS4yIDQ0OHptLTQzLjQtNDQuN0w0OTEuOCAxMjNjLTMwLjctMTQtNjcuMi0yMS40LTEwMS0yMS40LTM4LjQgMC03NC40IDEyLjEtMTAyLjcgMzguNy0yOC4zLTI2LjYtNjQuMi0zOC43LTEwMi43LTM4LjctMzMuOCAwLTcwLjMgNy40LTEwMSAyMS40bC0zNCAyODAuMmM0Ny4yLTE5LjUgODIuOS0zMy41IDEzNS0zMy41IDM3LjYgMCA3MC44IDkuNiAxMDIuNyAyOS42IDMxLjgtMjAgNjUuMS0yOS42IDEwMi43LTI5LjYgNTIuMiAwIDg3LjggMTQgMTM1IDMzLjV6Il0KICAgIH07CiAgICBmYUphdmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamF2YSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNGU0IiwgIk0yNzcuOCAzMTIuOWM5LjgtNi43IDIzLjQtMTIuNSAyMy40LTEyLjVzLTM4LjcgNy03Ny4yIDEwLjJjLTQ3LjEgMy45LTk3LjcgNC43LTEyMy4xIDEuMy02MC4xLTggMzMtMzAuMSAzMy0zMC4xcy0zNi4xLTIuNC04MC42IDE5Yy01Mi41IDI1LjQgMTMwIDM3IDIyNC41IDEyLjF6bS04NS40LTMyLjFjLTE5LTQyLjctODMuMS04MC4yIDAtMTQ1LjggMTAzLjctODEuOCA1MC41LTEzNSA1MC41LTEzNSAyMS41IDg0LjUtNzUuNiAxMTAuMS0xMTAuNyAxNjIuNi0yMy45IDM1LjkgMTEuNyA3NC40IDYwLjIgMTE4LjJ6TTMwNyAxMDQuNmMuMSAwLTE3NS4yIDQzLjgtOTEuNSAxNDAuMiAyNC43IDI4LjQtNi41IDU0LTYuNSA1NHM2Mi43LTMyLjQgMzMuOS03Mi45QzIxNiAxODguMSAxOTUuNCAxNjkuMyAzMDcgMTA0LjZ6bS02LjEgMjcwLjVjLS41IDEtMS4yIDEuOC0yIDIuNiAxMjguMy0zMy43IDgxLjEtMTE4LjkgMTkuOC05Ny4zLTMuMyAxLjItNi4yIDMuNC04LjIgNi4zIDMuNi0xLjMgNy4zLTIuMyAxMS0zIDMxLTYuNSA3NS41IDQxLjUtMjAuNiA5MS40ek0zNDggNDM3LjRzMTQuNSAxMS45LTE1LjkgMjEuMmMtNTcuOSAxNy41LTI0MC44IDIyLjgtMjkxLjYgLjctMTguMy03LjkgMTYtMTkgMjYuOC0yMS4zIDExLjItMi40IDE3LjctMiAxNy43LTItMjAuMy0xNC4zLTEzMS4zIDI4LjEtNTYuNCA0MC4yIDIwNC4yIDMzLjIgMzcyLjQtMTQuOSAzMTkuNC0zOC44ek0xMjQuNSAzOTZjLTc4LjcgMjIgNDcuOSA2Ny40IDE0OC4xIDI0LjUtOS44LTMuOC0xOS4yLTguNC0yOC4yLTEzLjgtNDQuNyA4LjUtNjUuNCA5LjEtMTA2IDQuNS0zMy41LTMuOC0xMy45LTE1LjItMTMuOS0xNS4yem0xNzkuOCA5Ny4yYy03OC43IDE0LjgtMTc1LjggMTMuMS0yMzMuMyAzLjYgMC0uMSAxMS44IDkuNyA3Mi40IDEzLjYgOTIuMiA1LjkgMjMzLjgtMy4zIDIzNy4xLTQ2LjkgMCAwLTYuNCAxNi41LTc2LjIgMjkuN3pNMjYwLjcgMzUzYy01OS4yIDExLjQtOTMuNSAxMS4xLTEzNi44IDYuNi0zMy41LTMuNS0xMS42LTE5LjctMTEuNi0xOS43LTg2LjggMjguOCA0OC4yIDYxLjQgMTY5LjUgMjUuOS03LjgtMi44LTE1LTcuMS0yMS4xLTEyLjh6Il0KICAgIH07CiAgICBmYU5mY1N5bWJvbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuZmMtc3ltYm9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MzEiLCAiTTM2MC45IDMyLjRjNy43LTEuMyAxNS43IC41IDIxLjIgNSA4NC4xIDU4LjcgMTI5LjkgMTM2LjMgMTI5LjkgMjE3LjcgMCA4My4xLTQ1LjggMTYwLjgtMTI5LjkgMjE5LjUtNC44IDQtMTEuNyA1LjktMTguNiA1LjMtNy0uNi0xMy41LTMuNi0xOC40LTguNUwxNjEuNyAyODguN2MtNS42LTUuNS04LjctMTMtOS42LTIwLjkgMC03LjggNC0xNS4zIDkuNS0yMC45IDUuNi01LjUgMTMuMS04LjcgMjAuOS04LjcgNy45IDAgMTUuNCAzLjEgMjAuOSA4LjZMMzY4LjUgNDExLjJjNTQuNi00NC43IDg0LjMtOTkuMiA4NC4zLTE1Ni4xIDAtNjEuNi0zNi45LTEyMi4yLTEwMy45LTE2OS4zLTYuNC00LjUtMTAuOC0xMS40LTEyLjEtMTkuMS0xLjQtNy43IC40LTE1LjcgNS0yMi4xIDQuNS02LjQgMTEuNC0xMC44IDE5LjEtMTIuMXptLTIwNiA0NDcuMmMtNy43IDEuMy0xNS42LS41LTIyLjEtNS04My4xLTU4LjctMTI5LTEzNi40LTEyOS0yMTkuNSAwLTgxLjQgNDUuOC0xNTkgMTI5LTIxNy43IDUuNy00IDEyLjYtNS45IDE5LjYtNS4zIDYuOSAuNiAxMy40IDMuNiAxOC4zIDguNUwzNTQuMSAyMjMuM2M1LjYgNS41IDguNyAxMyA4LjcgMjAuOSAuMSA2LjktMyAxNS4zLTguNiAyMC45LTUuNSA1LjUtMTMgOC43LTIwLjkgOC43LTcuOCAwLTE2LjItMy4xLTIwLjktOC42TDE0Ny4zIDEwMC43Yy01NC42IDQ1LjItODQuMyA5OS4yLTg0LjMgMTU0LjQgMCA2My40IDM2LjkgMTI0IDEwMy4xIDE3MS4xIDcuMyA0LjYgMTEuNiAxMS40IDEzIDE5LjIgMS4zIDcuNy0uNSAxNS43LTUgMjIuMXMtMTEuNCAxMC43LTE5LjIgMTIuMXoiXQogICAgfTsKICAgIGZhV29kdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b2R1IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwODgiLCAiTTE3OC40IDMzOS43bC0zNy4zIDAtMjguOS0xMTYuMi0uNSAwLTI4LjUgMTE2LjItMzggMC00NS4yLTE3MC44IDM3LjUgMCAyNyAxMTYuMiAuNSAwIDI5LjctMTE2LjIgMzUuMiAwIDI5LjIgMTE3LjcgLjUgMCAyOC0xMTcuNyAzNi44IDAtNDUuOSAxNzAuOHptOTMtMTI3YzM5IDAgNjQuMSAyNS44IDY0LjEgNjUuMyAwIDM5LjItMjUuMSA2NS02NC4xIDY1LTM4LjcgMC02My45LTI1LjgtNjMuOS02NSAwLTM5LjUgMjUuMS02NS4zIDYzLjktNjUuM3ptMCAxMDQuOGMyMy4yIDAgMzAuMS0xOS45IDMwLjEtMzkuNSAwLTE5LjktNi45LTM5LjctMzAuMS0zOS43LTI3LjcgMC0yOS45IDE5LjktMjkuOSAzOS43IDAgMTkuNiA2LjkgMzkuNSAyOS45IDM5LjV6bTE2My43IDYuNWwtLjUgMGMtNy45IDEzLjQtMjEuOCAxOS4xLTM3LjUgMTkuMS0zNy4zIDAtNTUuNS0zMi01NS41LTY2LjIgMC0zMy4yIDE4LjQtNjQuMSA1NC44LTY0LjEgMTQuNiAwIDI4LjkgNi4yIDM2LjggMTguNGwuMiAwIDAtNjIuMiAzNCAwIDAgMTcwLjgtMzIuMyAwIDAtMTUuOHptLTI5LjctODUuNmMtMjIuMiAwLTI5LjkgMTkuMS0yOS45IDM5LjUgMCAxOS40IDguOCAzOS43IDI5LjkgMzkuNyAyMi41IDAgMjkuMi0xOS42IDI5LjItMzkuOSAwLTIwLjEtNy4yLTM5LjItMjkuMi0zOS4yek01OTMgMzM5LjdsLTMyLjMgMCAwLTE3LjItLjcgMGMtOC42IDEzLjktMjMuNCAyMC42LTM3LjggMjAuNi0zNi4xIDAtNDUuMi0yMC4zLTQ1LjItNTAuOWwwLTc2LjEgMzQgMCAwIDY5LjhjMCAyMC4zIDYgMzAuNCAyMS44IDMwLjQgMTguNCAwIDI2LjMtMTAuMyAyNi4zLTM1LjRsMC02NC44IDM0IDAgMCAxMjMuNnptOS41LTM2LjhsMzcuNSAwIDAgMzYuOC0zNy41IDAgMC0zNi44eiJdCiAgICB9OwogICAgZmFTcXVhcmVTdGVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc3RlYW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic3RlYW0tc3F1YXJlIl0sICJmMWI3IiwgIk0xNjUuNiAzMDkuMWMxOC42IDcuNyAyNy4zIDI4LjkgMTkuNiA0Ny40cy0yOSAyNy4yLTQ3LjYgMTkuNGwtMjguNS0xMS44YzUgMTAuNiAxMy44IDE5LjQgMjUuNCAyNC4yIDI1LjIgMTAuNSA1NC4xLTEuNCA2NC42LTI2LjUgNS4xLTEyLjEgNS4xLTI1LjUgLjEtMzcuNy01LjEtMTIuMS0xNC41LTIxLjYtMjYuNy0yNi43LTEyLjEtNS0yNS00LjgtMzYuNC0uNWwyOS41IDEyLjJ6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgMTQ0LjcgMTE2LjYgNDguMWMxMi04LjIgMjYuMi0xMi4xIDQwLjctMTEuM2w1NS40LTgwLjIgMC0xLjFjMC00OC4yIDM5LjMtODcuNSA4Ny42LTg3LjVzODcuNiAzOS4zIDg3LjYgODcuNWMwIDQ5LjItNDAuOSA4OC43LTg5LjYgODcuNWwtNzkgNTYuM2MxLjYgMzguNS0yOS4xIDY4LjgtNjUuNyA2OC44LTMxLjggMC01OC41LTIyLjctNjQuNS01Mi43TDAgMzE5LjIgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI0MS45IDE5Ni4yYTU4LjQgNTguNCAwIDEgMCAxMTYuOCAwIDU4LjQgNTguNCAwIDEgMCAtMTE2LjggMHptMTAyLjQtLjFhNDMuOSA0My45IDAgMSAxIC04Ny44IDAgNDMuOSA0My45IDAgMSAxIDg3LjggMHoiXQogICAgfTsKICAgIGZhU3RlYW1TcXVhcmUgPSBmYVNxdWFyZVN0ZWFtOwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtZXUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlOSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuMyAxMTkuNyA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE3IDM5Ni40IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMy4yIDMuNy00NS4yIDEwLjktNjZsNjUuNyAyOS4xLTQuNyAwIDAgMjkuNSAyMy4zIDBjMCA2LjItLjQgMy4yLS40IDE5LjVsLTIyLjggMCAwIDI5LjUgMjcgMGMxMS40IDY3IDY3LjIgMTAxLjMgMTI0LjYgMTAxLjMgMjYuNiAwIDUwLjYtNy45IDY0LjgtMTUuOGwtMTAtNDYuMWMtOC43IDQuNi0yOC4yIDEwLjgtNDcuMyAxMC44LTI4LjIgMC01OC4xLTEwLjktNjcuMy01MC4ybDkwLjMgMCAxMjguMyA1Ni44Yy0xLjUgMi4xLTU2LjIgMTA0LjMtMTc4LjggMTA0LjN6TTIzOS42IDI2OC4xbC0uNS0uNCAuOSAuNC0uNCAwem03Ny4yLTE5LjVsMy43IDAgMC0yOS41LTcwLjMgMC0yOC42LTEyLjZjMi41LTUuNSA1LjQtMTAuNSA4LjgtMTQuMyAxMi45LTE1LjggMzEuMS0yMi40IDUxLjEtMjIuNCAxOC4zIDAgMzUuMyA1LjQgNDYuMSAxMGwxMS42LTQ3LjNjLTE1LTYuNi0zNy0xMi40LTYyLjMtMTIuNC0zOSAwLTcyLjIgMTUuOC05NS45IDQyLjMtNS4zIDYuMS05LjggMTIuOS0xMy45IDIwLjFMODUuNSAxNDYuNGM2NC42LTk2LjggMTU3LjctOTMuNiAxNzAuNy05My42IDExMyAwIDIwMyA5MC4yIDIwMyAyMDMuNCAwIDE4LjctMi4xIDM2LjMtNi4zIDUyLjlMMzE2LjggMjQ4LjZ6Il0KICAgIH07CiAgICBmYU5wbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJucG0iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkNCIsICJNMjg4IDI4OGwtMzIgMCAwLTY0IDMyIDAgMCA2NHpNNTc2IDE2MGwwIDE5Mi0yODggMCAwIDMyLTEyOCAwIDAtMzItMTYwIDAgMC0xOTIgNTc2IDB6TTE2MCAxOTJsLTEyOCAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTEyOHptMTYwIDBsLTEyOCAwIDAgMTYwIDY0IDAgMC0zMiA2NCAwIDAtMTI4em0yMjQgMGwtMTkyIDAgMCAxMjggNjQgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYUNsb3Vkc2NhbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRzY2FsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzgzIiwgIk0zMTguMSAxNTRsLTkuNCA3LjZjLTIyLjUtMTkuMy01MS41LTMzLjYtODMuMy0zMy42LTcxLjYgMC0xMjkuNCA2MC44LTEyOS40IDEzMi4zIDAgNi42IC40IDEzLjEgMS40IDE5LjQtMi01NiA0MS44LTk3LjQgOTIuNi05Ny40IDI0LjIgMCA0Ni4yIDkuNCA2Mi42IDI0LjdsLTI1LjIgMjAuNGMtOC4zLS45LTE2LjggMS44LTIzLjEgOC4xLTExLjEgMTEtMTEuMSAyOC45IDAgNDAgMTEuMSAxMSAyOC45IDExIDQwIDAgNi4zLTYuMyA5LTE0LjkgOC4xLTIzLjFsNzUuMi04OC44YzYuMy02LjUtMy4zLTE1LjktOS41LTkuNnpNMjEzLjcgMjQ2LjVhMTQgMTQgMCAxIDEgMjAuNiAxOSAxNCAxNCAwIDEgMSAtMjAuNi0xOXpNMjI0IDMyYTIyNCAyMjQgMCAxIDAgMCA0NDggMjI0IDIyNCAwIDEgMCAwLTQ0OHptMCA2NGExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il0KICAgIH07CiAgICBmYVRoZW1lY28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhlbWVjbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWM2IiwgIk0yMDIuOSA4LjRjOS45LTUuNyAyNi01LjggMzYtLjJMNDMwIDExNS45YzEwIDUuNiAxOCAxOS40IDE4IDMwLjlMNDQ4IDM2NGMwIDExLjQtOC4xIDI1LjMtMTggMzFMMjM4LjggNTAzLjdjLTkuOSA1LjctMjYgNS42LTM1LjgtLjJMMTcuOSAzOTUuMUM4IDM4OS4zIDAgMzc1LjQgMCAzNjRMMCAxNDYuN2MwLTExLjQgOC0yNS40IDE3LjktMzEuMUwyMDIuOSA4LjR6TTEyNS41IDIwOC4zYy0xNS45IDAtMzEuOSAuMS00Ny44IC4xbDAgMTAxLjQgMTkuMSAwIDAtMjkuOCAyOC43IDBjNDkuNyAwIDQ5LjYtNzEuNyAwLTcxLjd6TTI2NS42IDMwOC42bC0zMC43LTM0LjZjMzctNy41IDM0LjgtNjUuMi0xMC45LTY1LjUtMTYuMSAwLTMyLjItLjEtNDguMy0uMWwwIDEwMS42IDE5LjEgMCAwLTMzLjkgMTguNCAwIDI5LjYgMzMuOSAyMi44IDAgMC0xLjN6bS00MS42LTgyLjNjMjMuMyAwIDIzLjMgMzIuNSAwIDMyLjVsLTI5LjEgMCAwLTMyLjUgMjkuMSAwem0tOTUuNi0xLjZjMjEuMiAwIDIxLjEgMzguOSAwIDM4LjlsLTMyLjMgMCAwLTM4LjggMzIuMyAwem0xOTIuNi0xOC4yYy02OC41IDAtNzEgMTA1LjggMCAxMDUuOCA2OS41IDAgNjkuNC0xMDUuOCAwLTEwNS44em0wIDE3LjRjNDQuMSAwIDQ0LjggNzAuOSAwIDcwLjlzLTQ0LjQtNzAuOSAwLTcwLjl6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNhYiIsICJNMjkzLjYgMjM0LjNMNzIuOSAxMyAzNTMuNyAxNzQuMiAyOTMuNiAyMzQuM3pNMTUuMyAwQzIuMyA2LjgtNi40IDE5LjItNi40IDM1LjNsMCA0NDEuM2MwIDE2LjEgOC43IDI4LjUgMjEuNyAzNS4zTDI3MS45IDI1NS45IDE1LjMgMHpNNDQwLjUgMjI1LjZsLTU4LjktMzQuMS02NS43IDY0LjUgNjUuNyA2NC41IDYwLjEtMzQuMWMxOC0xNC4zIDE4LTQ2LjUtMS4yLTYwLjh6TTcyLjkgNDk5TDM1My43IDMzNy44IDI5My42IDI3Ny43IDcyLjkgNDk5eiJdCiAgICB9OwogICAgZmFLb3J2dWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia29ydnVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MmYiLCAiTTM4Ny42IDM0bC0zMjcgMEMyNy45IDM0IDEuMSA2MC44IDEuMSA5My41bDAgMzI3LjFjMCAzMi42IDI2LjggNTkuNCA1OS41IDU5LjRsMzI3LjEgMGMzMyAwIDU5LjUtMjYuOCA1OS41LTU5LjVsMC0zMjdDNDQ3LjEgNjAuOCA0MjAuMyAzNCAzODcuNiAzNHpNODguMiAxMjAuOGw5NiAwIDAgMTE2IDYxLjgtMTE2IDExMC45IDAtODEuMiAxMzItMTg3LjUgMCAwLTEzMnpNMjUwIDM5Mi45bC02NS43LTExMy42IDAgMTEzLjYtOTYgMCAwLTEzMC44IDE5MS41IDAgODguNiAxMzAuOC0xMTguNCAweiJdCiAgICB9OwogICAgZmFXM2MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidzNjIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZGUiLCAiTTEwNS4yIDMwNS4zbDMwLjktMTA0LjdjNy45LTI2LjcgOC42LTQwLjYgLjItNjguOGwtMTAuMS0zMy45IDQ0LjEgMCA2MSAyMDcuNCA0NS43LTE1NS41YzEzLjMtNDUuMyAyMS4xLTUxLjkgNTkuNC01MS45bDEzMi44IDBjLTI0LjIgNDIuOS00OS4zIDg1LjItNzMuOSAxMjcuOSAyLjYgLjggNS4yIDEuOCA3LjcgMi44IDE3LjMgNy4xIDMyLjIgMTkuNCA0MiAzNS41IDExLjIgMTguNSAxNi44IDQwLjIgMTYuOCA2NS4yIDAgMzAuOC04LjIgNTYuOC0yNC42IDc3LjgtMTQuNSAxOC42LTM1IDI5LjUtNTguMiAzMS4yIDAgLjMtNS4yIC40LTUuOCAuNC0zOS43LS4xLTcwLjgtMzIuMS04My4xLTY4LjdsNDIuOSAwYzMuNSA1LjMgNi44IDEwLjcgMTEuMiAxNS41IDguMSA3LjMgMTguNSAxMC45IDI5LjMgMTEuMSAxMy4xIDAgMjMuMy05LjEgMjkuOS0xOS44IDguMS0xMy4yIDEyLjItMjkgMTIuMi00Ny41IDAtMTMuMS0xLjgtMjQuMy01LjMtMzMuNi0uOS0yLjMtMS45LTQuNS0zLTYuNi0xLjQtMi42LTIuOS01LjEtNC43LTcuNC0xMC4xLTEzLjItMjkuMy0xOS43LTQ3LjUtMTkuOGwtMjguMiAwIDcwLjMtMTIyLTM1LjYgMGMtNDMuMSAwLTM1LjktNS40LTUwLjQgNDMuM2wtNzUuNyAyNTUuMy00LjIgMC02My4xLTIxMS4xLTYzLjEgMjExLjEtNC4yIDAtMTAxLTM0MC43IDQ0LjIgMCA2MSAyMDcuNHpNNDY3IDMzNS43Yy4zIC42IDExLjMgMjAuMyAxOC4zIDMwLjMgNy4xIDEwLjEgMTkuOCAyMC45IDI0LjggMjQuNnMxOS4xIDEyLjUgMzQuMyAxMy45YzE1LjIgMS41IDIzLjMgLjIgMzguNy02LjYgMTUuNC02LjggMjcuOS0yMC40IDM0LjktMjguMSA2LjktNy42IDE3LjktMjcuMyAxOC4yLTI3LjdsMy4zIDE2LjhjMS43IDktMSAyMy43LTQuMSAzMC00LjMgOC42LTcuNiAxMy41LTE0IDIwLjMtNi4xIDYuNS0xNi43IDEzLjUtMjEuMyAxNi40LTQuNiAyLjktMjMuMSAxNS4xLTUwLjEgMTAuM3MtNDQuNy0yNS45LTUzLjktMzguMmMtOS44LTEzLjItMTYuNy0yOC4zLTE5LTMzLjItMy44LTguNC05LjktMjguMi0xMC4xLTI4Ljh6bTE2OS43LTIxOGMzLjMgMjAuMy0uMSAyOC43LTkuMSA0NmwtMTIuNyAyNC4yYy0uMy0uNi0xMC0yMC43LTI1LjktMzEuOS0xMy42LTkuNi0yMi41LTExLjctMzYuMy04LjgtMTcuOCAzLjctMzggMjUtNDYuOCA1MS4yLTEwLjUgMzEuNC0xMC43IDQ2LjYtMTEgNjAuNi0uNiAyMi40IDIuOSAzNS42IDIuOSAzNS42cy0xNS40LTI4LjUtMTUuMi03MC4xYy4xLTI5LjcgNC44LTU2LjcgMTguNS04My4zIDEyLjEtMjMuNCAzMC4xLTM3LjQgNDYuMS0zOS4xIDE2LjUtMS43IDI5LjYgNi4zIDM5LjcgMTQuOSAxMC42IDkgMjEuMyAyOC44IDIxLjMgMjguOGwyNC45LTQ5LjggMy42IDIxLjh6Il0KICAgIH07CiAgICBmYUdyYXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JhdiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ2IiwgIk0zMDIuNiAyMTAuNmM0LjUgNC41IDQuNSAxMi4zIDAgMTYuOGwtMTAgMTBjLTQuNSA0LjktMTIuMyA0LjktMTcuMSAwbC0xMC44LTEwLjhjLTQuNS00LjktNC41LTEyLjMgMC0xNy4xbDEwLTEwYzQuNS00LjUgMTIuMy00LjUgMTcuMSAwbDEwLjggMTEuMXptLTMxLjItMjAuM2E3LjcgNy43IDAgMSAwIC0xMC42LTExIDcuNyA3LjcgMCAxIDAgMTAuNiAxMXptLTI2LjggNS41YTcuNSA3LjUgMCAxIDAgMTAuNyAxMC41IDcuNSA3LjUgMCAxIDAgLTEwLjctMTAuNXpNMzE5LjQgMTgyYy0yMC41LTE0LjktMzQuOS00NC42LTEyLjMtNzAuMyAyMi4zLTI1LjcgNDItMTcuOCA2MS43IC44IDEyLjMgMTEuNyAzMC4yIDI1LjcgMTcuOCA0OS44LTEyLjkgMjQuMy00Ni42IDM0LjMtNjcuMiAxOS43em00OS4yLTQ1LjljLTkuMi0xMC4zLTI0LjEgNy4xLTE2IDE2LjYgNy42IDkuMyAzMy4xIDIuNSAxNi0xNi42ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00NDMuNyA0NGMyLjYtMTYuNi0yMC45LTE3LjEtMjYtMjYuNS0xNC0yNC45LTI4LjYtMzgtNTYuMy0zMS40IDEyLTguMyAyNC4zLTYuMyAyNC4zLTYuMyAuMy02LjYgMC0xMy40LTkuNy0yNS43IDQtMTIuOSAuMy0yMy4xIC4zLTIzLjEgMTYtOC45IDI3LjctMjUuMiAzMC00NC42IDMuNy0zMi0xOS40LTYxLjEtNTEuNC02NC44LTIyLjgtMi42LTQ1LjEgNy45LTU2LjEgMjYuNS0yMy45IDQxLjQgMS40IDczLjIgMjMuMSA4NC0xNC45LTEuNC0zNS40LTEyLjMtNDEuNC0zNS40LTYuOC0yNi41IDIuOS01MS40IDkuMi02My40IDAgMC00LjUtNi04LjMtOS4yIDAgMC0xNC4yIDAtMjUuNCA1LjUgMTIuMy0xNS43IDI2LTE0LjkgMjYtMTQuOSAwLTYuNi0uNi0xNS40LTMuNy0yMi4zLTUuNi0xMS40LTI0LjYtMTMuMy0zMi43IDIuOSAuMS0uMiAuMy0uNCAuNC0uNS01LjIgMTIuMy0xLjEgNTcuNyAxNy40IDkwLTIuNiAxLjQtOS40IDYuMy0xMy40IDEwLjMtMjIuMyAxMC01OCA2Mi4yLTU4IDYyLjItMjkuMSAxMS4xLTc5LjcgNTIuNS03Mi45IDgyLjMgLjMgMy4xIDEuNCA1LjcgMy4xIDcuNy0yLjkgMi4zLTUuNyA1LjItOC42IDguNi0xMi4zIDE0LjItNS41IDM2LjMgMTguMyAyNS4yIDE2LjMtNy40IDMwLjYtMjAuOSAzNy41LTMxLjQgMCAwLTUuNy01LjItMTYuOC00LjUgMjguNi02LjggMzUuNC05LjcgNDcuNy05LjQgOC4zIDQgOC4zLTM1LjQgOC4zLTM1LjQgMC0xNS4yLTIuMy0zMi0xMS41LTQyLjggMTIuOSAxMi42IDMwIDMzLjggMjguOSA2Mi42LS44IDE4LjktMTUuNyAyMy43LTE1LjcgMjMuNy05LjQgMTcuMS00NC42IDY4LTMxLjQgMTA5LjQgMCAwLTEwLTE1LjQtMTAuNS0yMi44LTE4IDIwLTQ4IDU0LTI1LjQgNjYuNiAyNy41IDE1LjIgMTEyLjMtOTEuNSAxMzAuMy0xNDYuOSAzNS43LTIxLjUgNTcuMi00OC44IDY2LTY3LjEgMjIuNyA0NC45IDk4LjQgOTcuNSAxMDQuNCA2MC45eiJdCiAgICB9OwogICAgZmFBd3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXdzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzUiLCAiTTE4MC40IDIwM2MtLjcgMjIuNiAxMC42IDMyLjcgMTAuOSAzOS0uMSAxLjMtLjYgMi41LTEuMyAzLjZzLTEuNyAyLTIuOCAyLjZsLTEyLjggOWMtMS43IDEuMi0zLjYgMS44LTUuNiAxLjktLjQgMC04LjIgMS44LTIwLjUtMjUuNi03LjUgOS40LTE3IDE2LjktMjcuOSAyMnMtMjIuNyA3LjctMzQuNyA3LjVjLTE2LjMgLjktNjAuNC05LjItNTguMS01Ni4yLTEuNi0zOC4zIDM0LjEtNjIuMSA3MC45LTYwIDcuMSAwIDIxLjYgLjQgNDcgNi4zbDAtMTUuNmMyLjctMjYuNS0xNC43LTQ3LTQ0LjgtNDMuOS0yLjQgMC0xOS40LS41LTQ1LjggMTAuMS03LjQgMy40LTguMyAyLjgtMTAuOCAyLjgtNy40IDAtNC40LTIxLjUtMi45LTI0LjIgNS4yLTYuNCAzNS45LTE4LjQgNjUuOS0xOC4yIDIwLjEtMS44IDQwLjEgNC40IDU1LjcgMTcuMyA2LjMgNy4xIDExLjIgMTUuNCAxNC4yIDI0LjRzNC4yIDE4LjUgMy41IDI4bDAgNjkuM3pNOTQgMjM1LjRjMzIuNC0uNSA0Ni4yLTIwIDQ5LjMtMzAuNSAyLjUtMTAuMSAyLjEtMTYuNCAyLjEtMjcuNC05LjctMi4zLTIzLjYtNC45LTM5LjYtNC45LTE1LjItMS4xLTQyLjggNS42LTQxLjcgMzIuMy0xLjIgMTYuOCAxMS4xIDMxLjQgMzAgMzAuNXptMTcwLjkgMjMuMWMtNy45IC43LTExLjUtNC45LTEyLjctMTAuNEwyMDIuNCA4My40Yy0xLTIuOC0xLjYtNS42LTEuOS04LjYtLjItMS4yIC4xLTIuNCAuOC0zLjRzMS44LTEuNiAzLTEuOGMuMiAwLTIuMSAwIDIyLjIgMCA4LjgtLjkgMTEuNiA2IDEyLjYgMTAuNEwyNzQuOSAyMjAuOCAzMDguMSA4MGMuNS0zLjIgMi45LTExLjEgMTIuOC0xMC4ybDE3LjIgMGMyLjItLjIgMTEuMS0uNSAxMi43IDEwLjRMMzg0LjEgMjIyLjcgNDIxIDgwLjFjLjUtMi4yIDIuNy0xMS40IDEyLjctMTAuNGwxOS43IDBjLjktLjEgNi4yLS44IDUuMyA4LjYtLjQgMS44IDMuNC0xMC43LTUyLjggMTY5LjktMS4xIDUuNS00LjggMTEuMS0xMi43IDEwLjRsLTE4LjcgMGMtMTAuOSAxLjItMTIuNS05LjctMTIuNy0xMC43bC0zMy4yLTEzNy4xLTMyLjggMTM3Yy0uMiAxLjEtMS43IDExLjktMTIuNyAxMC43bC0xOC4zIDAgMCAwem0yNzMuNSA1LjZjLTUuOSAwLTMzLjktLjMtNTcuNC0xMi4zLTIuMy0xLTQuMy0yLjYtNS43LTQuOHMtMi4xLTQuNi0yLjEtNy4xbDAtMTAuN2MwLTguNSA2LjItNi45IDguOC01LjkgMTAgNC4xIDE2LjUgNy4xIDI4LjggOS42IDM2LjcgNy41IDUyLjgtMi4zIDU2LjctNC41IDEzLjItNy44IDE0LjItMjUuNyA1LjMtMzQuOS0xMC41LTguOC0xNS41LTkuMS01My4xLTIxLTQuNi0xLjMtNDMuNy0xMy42LTQzLjgtNTIuNC0uNi0yOC4yIDI1LTU2LjIgNjkuNS01NiAxMi43IDAgNDYuNCA0LjEgNTUuNiAxNS42IDEuNCAyLjEgMiA0LjYgMS45IDdsMCAxMC4xYzAgNC40LTEuNiA2LjctNC45IDYuNy03LjctLjktMjEuNC0xMS4yLTQ5LjItMTAuOC02LjktLjQtMzkuOSAuOS0zOC40IDI1LS40IDE5IDI2LjYgMjYuMSAyOS43IDI2LjkgMzYuNSAxMSA0OC42IDEyLjggNjMuMSAyOS42IDE3LjEgMjIuMiA3LjkgNDguMyA0LjMgNTUuNC0xOS4xIDM3LjUtNjguNCAzNC40LTY5LjMgMzQuNHptNDAuMiAxMDQuOWMtNzAgNTEuNy0xNzEuNyA3OS4yLTI1OC41IDc5LjItMTE3LjEgLjgtMjMwLjMtNDIuMy0zMTcuMy0xMjAuNy02LjUtNS45LS44LTE0IDcuMi05LjUgOTYuNSA1NS4yIDIwNS43IDg0LjIgMzE2LjkgODQuMSA4My0uNCAxNjUuMS0xNy4zIDI0MS42LTQ5LjUgMTEuOC01IDIxLjggNy44IDEwLjEgMTYuNHptMjkuMi0zMy4zYy05LTExLjUtNTkuMy01LjQtODEuOC0yLjctNi44IC44LTcuOS01LjEtMS44LTkuNSA0MC4xLTI4LjIgMTA1LjktMjAuMSAxMTMuNC0xMC42IDcuNSA5LjUtMi4xIDc1LjQtMzkuNiAxMDYuOS01LjggNC45LTExLjMgMi4zLTguNy00LjEgOC40LTIxLjMgMjcuNC02OC41IDE4LjQtODB6Il0KICAgIH07CiAgICBmYUdsaWRlRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnbGlkZS1nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTYiLCAiTTQwNy4xIDIxMS4yYy0zLjUtMS40LTExLjYtMy44LTE1LjQtMy44LTM3LjEgMC02Mi4yIDE2LjgtOTMuNSAzNC41bC0uOS0uOWM3LTQ3LjMgMjMuNS05MS45IDIzLjUtMTQwLjQgMC03MS41LTM4LjItMTAwLjYtMTA4LjQtMTAwLjYtMTE1LjEgMC0xNzMuNCAxMTMuNy0xNzMuNCAxOTguNCAwIDg3LjkgNTEuMyAxMzYuNiAxMzguNiAxMzYuNiAxMiAwIDExLTEgMTEgMy44LTE2LjkgMTI4LjktOTAuOCAxMzMuMS05MC44IDk0LjYgMC0zOS4yIDQ1LTU4LjYgNDUuNS02MS0uMy0xMi4yLTQ3LTI3LjYtNTguOS0yNy42LTMzLjkgLjEtNTIuNCA1MS4yLTUyLjQgNzkuMyAwIDUxLjkgMzIuOCA4Ny45IDg1LjUgODcuOSA3Ny40IDAgMTM0LTc3LjggMTUxLjQtMTQ1LjQgMTUuMS02MC41IDExLjItNjMuMyAxOS43LTY3LjYgMzIuMi0xNi4yIDU3LjUtMjcgOTMuOC0yNyAxNy44IDAgMzAuNSAzLjcgNTguOSA4LjQgMi45IDAgNi43LTIuOSA2LjctNS44IDAtOC0zMy40LTYwLjUtNDAuOS02My40ek0yMzEuOCAxMjYuOGMtOS4zIDQ0LjctMTguNiA4OS42LTI3LjggMTM0LjMtMi4zIDEwLjItMTMuMyA3LjgtMjIgNy44LTM4LjMgMC00OS00MS44LTQ5LTczLjEgMC00NyAxOC0xMDkuMyA2MS44LTEzMy40IDctNC4xIDE0LjgtNi43IDIyLjYtNi43IDE4LjYgMCAyMCAxMy4zIDIwIDI4LjctLjEgMTQuMy0yLjcgMjguNS01LjYgNDIuNHoiXQogICAgfTsKICAgIGZhSnNmaWRkbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianNmaWRkbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjYyIsICJNNTExLjEgMjM3LjVjLTQuNy0yLjYtNS43LTUuNy02LjQtMTAuOC0yLjQtMTYuNS0zLjUtMzMuNi05LjEtNDkuMS0zNS45LTEwMC0xNTQtMTQzLjQtMjQ2LjgtOTEuNi0yNy40IDE1LjItNDkgMzYuNC02NS41IDYzLjktMy4yLTEuNS01LjUtMi43LTcuOC0zLjctMzAuMS0xMi40LTU5LTEwLjEtODUuMyA5LjItMjUuNSAxOC43LTM2LjQgNDQuNS0zMi43IDc2LjQgLjQgMy0yIDcuNi00LjUgOS41LTM5LjcgMzAtNTYgNzguMS00MS45IDEyNC42IDEzLjggNDUuNiA1Ny41IDc5LjggMTA1LjYgODEuNCAzMC4zIDEgNjAuNiAuNSA5MSAuNSA4NCAwIDE2OC4xIC41IDI1Mi4xLS41IDUyLjctLjYgOTYuMS0zNi45IDEwOC4yLTg3LjMgMTEuNS00OC4xLTExLjEtOTcuMy01Ni44LTEyMi42em0yMS4xIDE1Ni45Yy0xOC4yIDIyLjQtNDIuMyAzNS4zLTcxLjMgMzUuNy01Ni45IC44LTExMy44IC4yLTE3MC43IC4yIDAgLjctMTYzIC4yLTE2My43IC4yLTQzLjktLjMtNzYuNy0xOS44LTk1LjItNjAtMTguOS00MS4yLTQtOTAuOCAzNC4yLTExNi4xIDkuMi02LjEgMTIuNS0xMS42IDEwLjEtMjMuMS01LjUtMjYuNCA0LjUtNDggMjYuNC02MyAyMy0xNS43IDQ3LjQtMTYuMSA3Mi0zLjEgMTAuMyA1LjQgMTQuNiAxMS42IDIyLjItMi41IDE0LjItMjYuNCAzNC42LTQ2LjcgNjAuNy02MS4zIDk3LjUtNTQuNCAyMjguNCA3LjYgMjMwLjIgMTMyLjcgLjEgOC4yIDIuNCAxMi40IDkuOCAxNS45IDU3LjYgMjYuOCA3NC41IDk2LjEgMzUuMSAxNDQuNXptLTg3LjgtODAuNWMtNS44IDMxLjItMzQuNiA1NS4xLTY2LjcgNTUuMS0xNyAwLTMyLjEtNi41LTQ0LjEtMTcuNy0yNy43LTI1LjctNzEuMS03NS05NS45LTkzLjQtMjAuMS0xNC45LTQyLTEyLjMtNjAuMyAzLjgtNTAgNDQuMSAxNS45IDEyMS44IDY3LjEgNzcuMiA0LjUtNCA3LjgtOS41IDEyLjctMTIuOCA4LjItNS41IDIwLjgtLjkgMTMuMiAxMC42LTE3LjQgMjYuMy00OS4zIDM4LjItNzguOSAyOS4zLTI4LjktOC43LTQ4LjgtMzYtNDguNi03MC4yIDEuMi0yMi41IDEyLjQtNDMuMSAzNS40LTU2IDIyLjYtMTIuNiA0Ni40LTEzLjEgNjcgMi41IDUwLjggMzguNSA3NS42IDgxLjcgMTA3LjMgMTAxLjIgMjQuNiAxNS4xIDU0LjMgNy40IDY4LjgtMTcuNSAyOC44LTQ5LjItMzQuNi0xMDUtNzguOS02My41LTQgMy43LTYuOSA4LjktMTEuNCAxMS43LTExIDYuOC0xNy4zLTQuMS0xMi44LTEwLjQgMjAuNy0yOC42IDUwLjUtNDAuNCA4My4zLTI4LjIgMzEuNCAxMS43IDQ5LjEgNDQuNCA0Mi44IDc4LjJ6Il0KICAgIH07CiAgICBmYUtleWJhc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2V5YmFzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGY1IiwgIk0yODYuMiA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2ek0zOTguMSAyNzEuNGMtOS41LTE0LjYtMzkuNC01Mi40LTg3LjMtNzMuNy02LjEtMi43LTEyLjItNS4xLTE4LjQtNy4zIDQuMS05LjkgNi0yMC42IDUuOC0zMS40cy0yLjctMjEuMy03LjItMzEuMS0xMC45LTE4LjUtMTguOS0yNS43LTE3LjQtMTIuNi0yNy42LTE2Yy0xMi40LTQuMS0yMy4zLTYtMzIuNC01LjgtLjYtMi0xLjktMTEgOS40LTM1bC0yMi45LTEzLjUtNS41IDcuNmMtOC43IDEyLjEtMTYuOSAyMy42LTI0LjMgMzQuOS0yLjctLjYtNS41LTEuMS04LjMtMS4yLTQxLjUtMi40LTM5LTIuMy00MS4xLTIuMy01MC42IDAtNTAuOCA1Mi4xLTUwLjggNDUuOWwtMi40IDM2LjdjLTEuNiAyNyAxOS44IDUwLjIgNDcuNiA1MS44bDguOSAuNUMxMDYgMjE1LjUgOTAuNCAyMjcuNSA3Ni42IDI0MS40IDE0IDMwNC43IDE0IDM3NCAxNCA0MjkuOGwwIDMzLjYgMjMuMy0yOS44YzMuMSAxMy4xIDggMjUuOCAxNC42IDM3LjYgNS44IDEwLjEgMTQuOSA5LjQgMTkuNiA3LjMgNC4yLTEuOSAxMC02LjkgMy44LTIwLjEtOC0xNi44LTEzLjMtMzQuNy0xNS44LTUzLjFsNDYuOC01OS44LTI0LjcgNzQuMWM1OC4yLTQyLjQgMTU3LjQtNjEuOCAyMzYuMi0zOC42IDM0LjIgMTAuMSA2Ny40IC43IDg0LjctMjMuOCAuNy0xIDEuMi0yLjIgMS44LTMuMiAxLjggOS40IDIuNyAxOC45IDIuOCAyOC40IDAgMjMuMy0zLjcgNTIuOS0xNC45IDgxLjYtMi41IDYuNSAxLjggMTQuNSA4LjYgMTUuNyA3LjQgMS42IDE1LjMtMy4xIDE4LjQtMTEuMSA5LjYtMjUuNSAxNC42LTU0LjYgMTQuNi04Ni4yIDAtMzguNi0xMy03Ny41LTM1LjktMTEwLjl6TTE0Mi40IDEyOC42bC0xNS43LS45LTEuNCAyMS44IDEzLjEgLjhjLS42IDYuNS0uNSAxMy4xIC4zIDE5LjZsLTIyLjQtMS4zYy0xLjYtLjEtMy4yLS41LTQuNy0xLjFzLTIuOC0xLjYtMy45LTIuOC0xLjktMi42LTIuNS00LjEtLjgtMy4xLS43LTQuN0wxMDcgMTE5YzEtMTIuMiAxMy45LTExLjMgMTMuMy0xMS4zbDI5LjEgMS43Yy0yLjggNi4yLTUuMSAxMi42LTcgMTkuMnpNMjkwLjggMzAwLjhjLTIuMSAxLjYtNC44IDIuNC03LjUgMi4ycy01LjEtMS41LTYuOS0zLjVsLTkuNy0xMS41LTM0LjQgMjdjLTEuNiAxLjMtMy43IDEuOS01LjggMS43cy00LTEuMi01LjMtMi44bC0xNS44LTE4LjZjLTEuMi0xLjYtMS43LTMuNS0xLjUtNS40czEuMy0zLjcgMi44LTQuOWwzNC42LTI3LjItMTQuMS0xNi43LTE3LjEgMTMuNWMtMS42IDEuMi0zLjUgMS44LTUuNSAxLjZzLTMuOC0xLjEtNS4xLTIuNmMwIDAtMy43LTQuNC0zLjgtNC41LTEuMi0xLjYtMS43LTMuNS0xLjUtNS41czEuMy0zLjcgMi44LTQuOUwyMTQgMjI1LjJzLTE4LjUtMjItMTguNi0yMi4xYy0uOC0xLTEuMy0yLjEtMS43LTMuM3MtLjQtMi41LS4zLTMuNyAuNi0yLjQgMS4yLTMuNSAxLjUtMiAyLjUtMi44YzIuMS0xLjcgNC44LTIuNCA3LjQtMi4yczUuMSAxLjUgNi45IDMuNmw4MS4xIDk2LjNjLjggMSAxLjMgMi4xIDEuNyAzLjNzLjQgMi41IC4zIDMuNy0uNiAyLjUtMS4yIDMuNS0xLjUgMi4xLTIuNSAyLjh6TTE4Ny40IDQxOWExOCAxOCAwIDEgMCAwIDM2IDE4IDE4IDAgMSAwIDAtMzZ6Il0KICAgIH07CiAgICBmYUx1bW9uRHJvcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsdW1vbi1kcm9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZTMiLCAiTTQ4MCAzMmM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZMOTYgNDQ4Yy01MyAwLTk2LTQzLTk2LTk2TDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzg0IDB6TTMwMi40IDExNC43Yy05LjgtMTYuNC0yMC41LTE2LjQtMjkuNiAwbC02OC45IDExNGMtMTAuNyAxNS42LTE2LjQgMzIuOC0xNi40IDUyLjUgMCA1MC45IDQ0LjMgOTQuMyAxMDAuMSA5NC4zIDU1IDAgMTAwLjktNDMuNSAxMDAuOS05NC4zIDAtMTkuNy02LjYtMzcuOC0xNy4yLTUyLjVsLTY4LjktMTE0eiJdCiAgICB9OwogICAgZmFXZWVibHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VlYmx5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1Y2MiLCAiTTQyNS4xIDY1LjhjLTM5LjkgMC03My4zIDI1LjctODMuNyA2NC4zLTE4LjItNTguMS02NS41LTY0LjMtODUtNjQuMy0xOS44IDAtNjYuOCA2LjMtODUuMyA2NC4zLTEwLjQtMzguNi00My40LTY0LjMtODMuNy02NC4zLTQ5IDAtODcuNSAzMy45LTg3LjUgNzcuMiAwIDI5IDQuMiAzMy4zIDc3LjIgMjMzLjUgMjIuNCA2MC42IDY3LjggNjkuNCA5Mi43IDY5LjQgMzkuMiAwIDcwLTE5LjUgODUuOS01NCAxNS45IDM0LjggNDYuNyA1NC4zIDg1LjkgNTQuMyAyNSAwIDcwLjQtOS4xIDkyLjctNjkuNyA3Ni42LTIwOC42IDc3LjUtMjA1LjYgNzcuNS0yMjcuMiAuNi00OC4zLTM2LTgzLjUtODYuOS04My41em0yNi4zIDExNC44TDM4NS45IDM1Ny4xYy03LjkgMjEuNS0yMS4yIDM3LjItNDYuMiAzNy4yLTIzLjQgMC0zNy40LTEyLjQtNDQtMzMuOWwtMzkuMy0xMTcuNC0xIDAtMzkuMyAxMTcuNGMtNyAyMS41LTIwLjkgMzMuNi00NCAzMy42LTI1IDAtMzguMy0xNS43LTQ2LjItMzcuMkw2MC45IDE4MS42Yy01LjQtMTQuOC03LjktMjMuOS03LjktMzQuNSAwLTE2LjMgMTUuOC0yOS40IDM4LjMtMjkuNCAxOC43IDAgMzIgMTEuOCAzNi4xIDI5LjFsNDQgMTM5LjggMSAwIDQ0LjctMTM2LjhjNi0xOS43IDE2LjUtMzIuMSAzOS0zMi4xczMyLjkgMTIuMSAzOSAzMi4xbDQ0LjcgMTM2LjggMSAwIDQ0LTEzOS44YzQuMS0xNy4yIDE3LjQtMjkuMSAzNi4xLTI5LjEgMjIuMiAwIDM4LjMgMTMuMyAzOC4zIDM1LjctLjMgNy45LTQuMSAxNi03LjYgMjcuMnoiXQogICAgfTsKICAgIGZhRG9ja2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRvY2tlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzk1IiwgIk0zNDkuOSAyMzYuM2wtNjYuMSAwIDAtNTkuNCA2Ni4xIDAgMCA1OS40em0wLTIwNC4zbC02Ni4xIDAgMCA2MC43IDY2LjEgMCAwLTYwLjd6bTc4LjIgMTQ0LjhsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHpNMjcxLjggMTA0LjdsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXptNzguMSAwbC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6bTI3Ni44IDEwMGMtMTQuNC05LjctNDcuNi0xMy4yLTczLjEtOC40LTMuMy0yNC0xNi43LTQ0LjktNDEuMS02My43bC0xNC05LjMtOS4zIDE0Yy0xOC40IDI3LjgtMjMuNCA3My42LTMuNyAxMDMuOC04LjcgNC43LTI1LjggMTEuMS00OC40IDEwLjdsLTQzNC43IDBjLTguNyA1MC44IDUuOCAxMTYuOCA0NCAxNjIuMSAzNy4xIDQzLjkgOTIuNyA2Ni4yIDE2NS40IDY2LjIgMTU3LjQgMCAyNzMuOS03Mi41IDMyOC40LTIwNC4yIDIxLjQgLjQgNjcuNiAuMSA5MS4zLTQ1LjIgMS41LTIuNSA2LjYtMTMuMiA4LjUtMTcuMWwtMTMuMy04Ljl6TTExNS42IDE3Ni44bC02NiAwIDAgNTkuNCA2Ni4xIDAgMC01OS40LS4xIDB6bTc4LjEgMGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40em03OC4xIDBsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHptLTc4LjEtNzIuMWwtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xeiJdCiAgICB9OwogICAgZmFNYWdlbnRvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hZ2VudG8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjNCIsICJNNDQ1LjkgMTI3LjlsMCAyNTYuMS02My40IDM2LjUgMC0yNTUuOC0xNTguNS05MS42LTE1OC42IDkxLjYgLjQgMjU1LjktNjMuMy0zNi42IDAtMjU1LjkgMjIxLjktMTI4LjEgMjIxLjUgMTI3Ljl6TTI1NS44IDQyMC41bC0zMS42IDE4LjQtMzEuOC0xOC4yIDAtMjU2LTYzLjMgMzYuNiAuMSAyNTUuOSA5NC45IDU0LjkgOTUuMS01NC45IDAtMjU2LTYzLjQtMzYuNiAwIDI1NS45eiJdCiAgICB9OwogICAgZmFHaXRBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0LWFsdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODQxIiwgIk00MzkuNiAyMzYuMUwyNDQgNDAuNUMyMzguNiAzNSAyMzEuMiAzMiAyMjMuNiAzMnMtMTUgMy0yMC40IDguNGwtNDAuNyA0MC42IDUxLjUgNTEuNWMyNy4xLTkuMSA1Mi43IDE2LjggNDMuNCA0My43bDQ5LjcgNDkuN2MzNC4yLTExLjggNjEuMiAzMSAzNS41IDU2LjctMjYuNSAyNi41LTcwLjItMi45LTU2LTM3LjNsLTQ2LjMtNDYuMyAwIDEyMS45YzI1LjMgMTIuNSAyMi4zIDQxLjggOS4xIDU1LTYuNCA2LjQtMTUuMiAxMC4xLTI0LjMgMTAuMXMtMTcuOC0zLjYtMjQuMy0xMC4xYy0xNy42LTE3LjYtMTEuMS00Ni45IDExLjItNTZsMC0xMjNjLTIwLjgtOC41LTI0LjYtMzAuNy0xOC42LTQ1TDE0Mi42IDEwMSA4LjUgMjM1LjFDMyAyNDAuNiAwIDI0Ny45IDAgMjU1LjVzMyAxNSA4LjUgMjAuNEwyMDQuMSA0NzEuNmM1LjQgNS40IDEyLjcgOC40IDIwLjQgOC40czE1LTMgMjAuNC04LjRMNDM5LjYgMjc2LjljNS40LTUuNCA4LjQtMTIuOCA4LjQtMjAuNHMtMy0xNS04LjQtMjAuNHoiXQogICAgfTsKICAgIGZhRmlyZWZveEJyb3dzZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyZWZveC1icm93c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMDciLCAiTTEzMC4yIDEyNy41bDAgMHptMzUxLjQgNDUuNGMtMTAuNi0yNS41LTMyLjEtNTMtNDguOS02MS43IDEzLjcgMjYuOSAyMS43IDUzLjkgMjQuNyA3NCAwIC4xIDAgLjMgLjEgLjQtMjcuNi02OC44LTc0LjQtOTYuNS0xMTIuNi0xNTYuOC0xNS0yMy43LTEwLjktMjUuMi0xMy4xLTI0LjdsLS4xIC4xYy00Ni43IDI2LTc1LjMgNzguNC04Mi42IDEyMi43LTE2LjYgLjktMzIuOSA1LTQ3LjkgMTIuMS0xLjQgLjYtMi41IDEuNy0zLjEgM3MtLjkgMi44LS42IDQuM2MuMiAuOCAuNiAxLjYgMS4xIDIuM3MxLjIgMS4zIDEuOSAxLjcgMS42IC43IDIuNCAuOCAxLjcgMCAyLjUtLjNsLjUtLjJjMTUuNS03LjMgMzIuNC0xMS4yIDQ5LjUtMTEuMyA2Mi44LS42IDk3LjIgNDQgMTA3LjYgNjIuMy0xMy05LjItMzYuNC0xOC4yLTU4LjgtMTQuMyA4Ny43IDQzLjkgNjQuMiAxOTQuNS01Ny40IDE4OS4yLTU5LjUtMi42LTk3LjEtNTEtMTAwLjUtOTAuOCAwIDAgMTEuMi00MS45IDgwLjYtNDEuOSA3LjUgMCAyOC45LTIwLjkgMjkuMy0yNy0uMS0yLTQyLjUtMTguOS01OS4xLTM1LjItOC44LTguNy0xMy4xLTEyLjktMTYuOC0xNi4xLTItMS43LTQuMS0zLjMtNi4zLTQuOC01LjYtMTkuNS01LjgtNDAtLjctNTkuNi0yNS4xIDExLjQtNDQuNiAyOS40LTU4LjcgNDUuNGwtLjEgMGMtOS43LTEyLjItOS01Mi42LTguNC02MS4xLS4xLS41LTcuMiAzLjctOC4yIDQuMy04LjYgNi4xLTE2LjUgMTIuOS0yMy44IDIwLjQtMTYuMyAxNi42LTQ0LjEgNTAuMi01NS41IDEwMS4yLTQuNSAyMC40LTYuOCA0NC40LTYuOCA1Mi4zIDAgMTM0LjcgMTA5LjIgMjQzLjkgMjQzLjkgMjQzLjkgMTIwLjYgMCAyMjMtODcuMiAyNDAuNC0yMDIuNiAxMS42LTc2LjctMTQuNy0xMzEuMS0xNC43LTEzMnoiXQogICAgfTsKICAgIGZhQ2xvdWRzbWl0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZHNtaXRoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzODQiLCAiTTUxMiAyMjcuNkw1MTIgMjg0LjUgMjg0LjQgNTEyIDIyNy42IDUxMiAwIDI4NC40IDAgMjI3LjYgMjI3LjYgMCAyODQuNSAwIDUxMiAyMjcuNnptLTI1NiAxNjJjMTcuOCAuNSAzNS42LTIuNiA1Mi4yLTkuMXMzMS44LTE2LjIgNDQuNi0yOC43IDIzLTI3LjMgMjkuOS00My44IDEwLjUtMzQuMSAxMC41LTUyLTMuNi0zNS41LTEwLjUtNTItMTcuMS0zMS4zLTI5LjktNDMuOC0yOC0yMi4yLTQ0LjYtMjguNy0zNC40LTkuNi01Mi4yLTkuMWMtMTcuOC0uNS0zNS42IDIuNi01Mi4yIDkuMXMtMzEuOCAxNi4zLTQ0LjYgMjguNy0yMyAyNy4zLTI5LjkgNDMuOC0xMC41IDM0LjEtMTAuNSA1MiAzLjYgMzUuNSAxMC41IDUyIDE3LjEgMzEuMyAyOS45IDQzLjggMjggMjIuMiA0NC42IDI4LjcgMzQuNCA5LjYgNTIuMiA5LjF6Il0KICAgIH07CiAgICBmYVdpemFyZHNPZlRoZUNvYXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpemFyZHMtb2YtdGhlLWNvYXN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3MzAiLCAiTTIxOS4yIDM0NS43Yy0xLjkgMS40LTExLjEgOC40LS4zIDIzLjYgNC42IDYuNCAxNC4xIDEyLjggMjEuNyA2LjYgNi41LTQuOSA3LjQtMTIuOSAuMy0yMy01LjUtNy44LTE0LjMtMTIuOS0yMS43LTcuMXptMzM2LjggNzUuOWMtLjMgMS43LS42IDEuNyAuOCAwIDIuMS00LjIgNC4yLTEwLjIgNS0xOS45IDMuMS0zOC41LTQwLjMtNzEuNS0xMDEuMy03OC01NC43LTYtMTI0LjQgOS4yLTE4OC44IDYwLjVsLS4zIDEuNmMyLjYgNSA1IDEwLjcgMy40IDIxLjJsLjggLjNjNjMuOS01OC40IDEzMS4yLTc3LjIgMTg0LjQtNzMuOCA1OC40IDMuNyAxMDAgMzQgMTAwIDY4LjEgMCAxMC0yLjYgMTUuNy0zLjkgMjAuMnpNMzkyLjMgMjQwLjRjLjggNy4xIDQuMiAxMC4yIDkuMiAxMC41IDUuNSAuMyA5LjQtMi42IDEwLjUtNi42IC44LTMuNCAyLjEtMjkuOCAyLjEtMjkuOFM0MDIuOCAyMjEgMzk5LjEgMjI1Yy0zLjcgMy43LTcuMyA4LjQtNi44IDE1LjV6bS01MC0xNTEuMWMtMjA0LjUgMC0zMjkuMiAxMzcuNS0zNDEuNSAxNTEuOS0xIC41LTEuMyAuOCAuOCAxLjMgNjAuNSAxNi41IDE1NS44IDgxLjIgMTk2LjEgMjAyLjJsMSAuM2M1NS4yLTY5LjkgMTQwLjktMTI4LjEgMjM3LTEyOC4xIDgwLjkgMCAxMzAuMiA0Mi4yIDEzMC4yIDgwLjQgMCAxOC4zLTYuNiAzMy41LTIyLjMgNDYuMyAwIDEtLjIgLjggLjggLjggMTQuNy0xMC43IDI3LjUtMjguOCAyNy41LTQ4LjIgMC0yMi44LTEyLjEtMzguMi0xMi4xLTM4LjIgNy4xIDcuMSAxMC43IDE2LjIgMTAuNyAxNi4yIDUuOC00MC45IDI3LTYyLjMgMjctNjIuMy0yLjQtOS43LTYuOC0xNy44LTYuOC0xNy44IDcuNiA4LjEgMTQuNCAyNy41IDE0LjQgNDEuNCAwIDEwLjUtMy40IDIyLjgtMTIuNiAzMS45bC4zIC41YzguMS01IDE2LjUtMTYuOCAxNi41LTM4IDAtMTUuNy00LjctMjUuOS00LjctMjUuOSA1LjgtNS4yIDExLjMtOS4yIDE2LTExLjggLjggMy40IDIuMSA5LjcgMi40IDE0LjkgMCAxIC44IDEuOCAxIDAgLjgtNS44LS4zLTE2LjItLjMtMTYuNSA2LTMuMSA5LjctNC41IDkuNy00LjUtMTUuNy0xMTAuMy0xNDQtMTk2LjktMjkxLjItMTk2Ljl6TTI0MyAzNzguOWMtMTEuMSA5LTI0LjIgNC4xLTMwLjYtNC4yLTcuNC05LjYtNi44LTI0LjEgNC4yLTMyLjUgMTQuOC0xMS40IDI3LjEtLjUgMzEuMiA1LjUgLjMgLjQgMTIuMSAxNi42LTQuNyAzMS4yem0yLjEtMTM2LjRsOS40LTE3LjggMTEuOCA3MS0xMi42IDYtMjQuNi0yOC44IDE0LjEtMjYuNyAzLjcgNC40LTEuOC04LjF6bTE4LjYgMTE3LjZsLS4zLS4zYzItNC4xLTIuNS02LjYtMTcuNS0zMS43LTEuMy0yLjQtMy4xLTIuOS00LjQtMi42bC0uMy0uNWM3LjktNS44IDE1LjQtMTAuMiAyNS40LTE1LjdsLjUgLjNjMS4zIDEuOCAyLjEgMi45IDMuNCA0LjdsLS4zIC41Yy0xLS4zLTIuNC0uOC01LjIgLjMtMi4xIC44LTcuOSAzLjctMTIuMyA3LjZsMCAxLjNjMS42IDIuNCAzLjkgNi42IDUuOCA5LjdsLjMgMGMxMC02LjMgNy42LTQuNSAxMS41LTcuOWwuMyAwYy41IDEuOCAuNSAxLjggMS44IDUuNWwtLjMgLjNjLTMuMSAuNi00LjcgLjMtMTEuNSA1LjVsMCAuM2M5LjUgMTcgMTEgMTYuOCAxMi42IDE2bC4zIC4zYy0yLjMgMS42LTYuMyA0LjItOS43IDYuNnpNMzE5IDMyNy42Yy0zLjEgMS42LTYgMi45LTEwIDVsLS4zLS4zYzEuMy0yLjYgMS4yLTIuNy0xMS44LTMyLjVsLS4zLS4zYy0uMiAwLTguOSAzLjctMTAgNy4zbC0uNSAwLTEtNS44IC4zLS41YzcuMy00LjYgMjUuNS0xMS42IDI3LjgtMTIuNmwuNSAuMyAzLjEgNS0uMyAuNWMtMy41LTEuOC03LjQgLjgtMTIuMyAyLjZsMCAuM2MxMi4zIDMyIDEyLjcgMzAuNiAxNC43IDMwLjZsMCAuMnptNDQuOC0xNi41Yy00LjIgMS01LjIgMS4zLTkuNyAyLjlsLS4zLS4zIC41LTQuNWMtMS0zLjQtMy4xLTExLjUtMy43LTEzLjZsLS4zLS4zYy0zLjQgLjgtOC45IDIuNi0xMi44IDMuOWwtLjMgLjNjLjggMi42IDMuMSA5LjkgNC4yIDEzLjkgLjggMi40IDEuOCAyLjkgMi45IDMuMWwwIC41Yy0zLjcgMS03LjEgMi42LTEwLjIgMy45bC0uMy0uM2MxLTEuMyAxLTIuOSAuMy01LTEtMy4xLTguMS0yMy44LTkuMi0yNy4yLS41LTEuOC0xLjYtMy4xLTIuNi0zLjFsMC0uNWMzLjEtMSA2LTIuMSAxMC43LTMuNGwuMyAuMy0uMyA0LjdjMS4zIDMuOSAyLjQgNy42IDMuMSA5LjdsLjMgMGMzLjktMS4zIDkuNC0yLjkgMTIuOC0zLjlsLjMtLjMtMi42LTkuNGMtLjUtMS44LTEtMy40LTIuNi0zLjlsMC0uM2M0LjQtMSA3LjMtMS44IDEwLjctMi40bC4zIC4zYy0xIDEuMy0xIDIuOS0uNSA0LjQgMS42IDYuMyA0LjcgMjAuNCA2LjMgMjYuNSAuNSAyLjYgMS44IDMuNCAyLjYgMy45em0zMi4yLTYuOGwtLjMgLjNjLTQuNyAuNS0xNC4xIDIuNC0yMi41IDQuMmwtLjMtLjMgLjgtNC4yYy0xLjYtNy45LTMuNC0xOC42LTUtMjYuMi0uMy0xLjgtLjgtMi45LTIuNi0zLjdsLjgtLjVjOS4yLTEuNiAyMC4yLTIuNCAyNC45LTIuNmwuMyAuM2MuNSAyLjQgLjggMy4xIDEuNiA1LjVsLS4zIC4zYy0xLjEtMS4xLTMuMy0zLjItMTYuMi0uOGwtLjMgLjNjLjMgMS42IDEgNi42IDEuNiA5LjlsLjMgLjNjOS41LTEuNyA0LjgtLjEgMTAuNy0yLjRsLjMgMGMwIDEuNi0uMyAxLjgtLjMgNS4ybC0uMyAwYy00LjgtMS0yLjItLjktMTAuMiAwbC0uMyAuM2MuMyAyLjEgMS42IDkuNCAyLjEgMTIuNmwuMyAuM2MxLjIgLjQgMTQuMi0uNiAxNi4yLTQuN2wuMyAwYy0uNSAyLjQtMSA0LjItMS42IDZ6bTEwLjctNDQuNWMtNC41IDIuNC04LjEgMi45LTExIDIuOS0uMiAwLTExLjQgMS4xLTE3LjUtMTAtNi43LTEwLjgtMS0yNS4yIDUuNS0zMS43IDguOC04LjEgMjMuNC0xMC4xIDI4LjUtMTcgOC0xMC4zLTEzLTIyLjMtMjkuNi01LjhsLTIuNi0yLjkgNS4yLTE2LjJjMjUuNi0xLjYgNDUuMi0zIDUwIDE2LjIgLjggMy4xIDAgOS40LS4zIDEyLjEgMCAyLjYtMS44IDE4LjgtMi4xIDIzLS41IDQuMi0uOCAxOC4zLS44IDIwLjcgLjMgMi40IC41IDQuMiAxLjYgNS41IDEuNiAxLjggNS44IDEuOCA1LjggMS44bC0uOCA0LjdjLTExLjgtMS4xLTEwLjMtLjYtMjAuNC0xLTMuMi01LjEtMi4yLTMuMy00LjItNy45IDAgMC00LjIgMy45LTcuMyA1LjV6TTQ0My45IDI4MWMtNi40LTEwLjYtMTkuOC03LjItMjEuNyA1LjUtMi42IDE3LjEgMTQuMyAxOS44IDIwLjcgMTAuMmwuMyAuM2MtLjUgMS44LTEuOCA2LTEuOCA2LjNsLS41IC41Yy0xMC4zIDYuOS0yOC41LTIuNS0yNS43LTE4LjYgMS45LTEwLjkgMTQuNC0xOC45IDI4LjgtOS45bC4zIC41YzAgMS4xLS4zIDMuNC0uMyA1LjN6bTUuOC04Ny43bDAtNi42Yy43IDAgMTkuNiAzLjMgMjcuOCA3LjNsLTEuNiAxNy41czEwLjItOS40IDE1LjQtMTAuN2M1LjItMS42IDE0LjkgNy4zIDE0LjkgNy4zbC0xMS4zIDExLjNjLTEyLjEtNi40LTE5LjYtLjEtMjAuNyAuOC01LjMgMzguNy04LjYgNDIuMiA0LjQgNDYuMWwtLjUgNC43Yy0xNy42LTQuMy0xOC41LTQuNS0zNi45LTcuM2wuOC00LjdjNy4zIDAgNy41LTUuMyA3LjYtNi44IDAgMCA1LTUzLjIgNS01NS4zIDAtMi45LTUtMy43LTUtMy43em0xMSAxMTQuNGMtOC4xLTIuMS0xNC4xLTExLTEwLjctMjAuNyAzLjEtOS40IDEyLjMtMTIuMyAxOC45LTEwLjIgOS4yIDIuNiAxMi44IDExLjggMTAuNyAxOS40LTIuNiA4LjktOS40IDEzLjktMTguOSAxMS41em00Mi4yIDkuN2MtMi40LS41LTcuMS0yLjQtOC42LTIuOWwwLS4zIDEuNi0xLjhjLjYtOC4yIC42LTcuMyAuMy03LjYtNC44LTEuOC02LjctMi40LTcuMS0yLjQtMS4zIDEuOC0yLjkgNC41LTMuNyA1LjVsLS44IDMuNCAwIC4zYy0xLjMtLjMtMy45LTEuMy02LTEuNmwwLS4zIDIuNi0xLjhjMy40LTQuNyAxMC0xNC4xIDEzLjktMjAuMmwwLTIuMSAuNS0uM2MyLjEgLjggNS41IDIuMSA3LjYgMi45IC41IC41IC4yLTEuOS0xIDI1LjEtLjIgMS44IDAgMi42IC44IDMuOXptLTQuNy04OS44YzExLjMtMTguMyAzMC44LTE2LjIgMzQtMy40bDcuNi0yNi4yYzIuMy02LjItMi44LTkuOS00LjUtMTEuM2wxLjgtMy43YzEyLjIgMTAuNCAxNi40IDE0IDIyLjUgMjAuNC0yNS45IDczLjEtMzAuOCA4MC44LTI0LjYgODQuM2wtMS44IDQuNGMtNi40LTMuMy04LjktNC40LTE3LjgtOC42bDIuMS02LjhjLS4zLS4zLTMuOSAzLjktOS43IDMuNy0xOS4xLTEuMy0yMi45LTMxLjctOS43LTUyLjl6bTI5LjMgNzkuM2MwLTUuNy02LjMtNy45LTcuOS01LjItMS4zIDIuMSAxIDUgMi45IDguNCAxLjYgMi42IDIuNiA2LjMgMSA5LjQtMi42IDYuMy0xMi40IDUuMy0xNS40LS44IDAtLjctLjMgLjEgMS44LTQuN2wuOC0uM2MtLjYgNS43IDYuMSA5LjYgOC40IDUgMS0yLjEtLjUtNS41LTIuMS04LjQtMS42LTIuNi0zLjctNi4zLTEuOC05LjcgMi43LTUuMSAxMS4zLTQuNSAxNC43IDIuNGwwIC41LTIuNCAzLjR6bTIxLjIgMTMuNGMtMi0zLjMtLjktMi4xLTQuNS00LjdsLS4zIDBjLTIuNCA0LjItNS44IDEwLjUtOC42IDE2LjItMS4zIDIuNC0xIDMuNC0uOCAzLjlsLS4zIC4zLTUuOC00LjQgLjMtLjMgMi4xLTEuM2MzLjEtNS44IDYuNi0xMi4xIDkuMi0xN2wwLS4zYy0yLjYtMi0xLjItMS41LTYtMS44bDAtLjMgMy4xLTMuNCAuMyAwYzMuNyAyLjQgMTAgNi44IDEyLjMgOC45bC4zIC4zLTEuMyAzLjl6TTU3NS44IDI3NmwtMi45LTIuOWMuOC0yLjQgMS44LTUgMi4xLTcuNiAuNy05LjctMTEuNS0xMS44LTExLjUtNSAwIDUgNy45IDE5LjQgNy45IDI3LjggMCAxMC4yLTUuOCAxNS43LTEzLjkgMTYuNS04LjQgLjgtMjAuMi0xMC41LTIwLjItMTAuNWw1LTE0LjQgMi45IDIuMWMtMyAxNy44IDE3LjcgMjAuNCAxMy4zIDUuMi0xLjEtNC0xOC43LTM0LjIgMi4xLTM4LjIgMTMuNi0yLjQgMjMgMTYuNSAyMyAxNi41TDU3NS44IDI3NnptMzUuNi0xMC4yYy0xMS0zMC40LTYwLjUtMTI3LjUtMTkyLTEyOS42LTUzLjQtMS05NC4zIDE1LjQtMTMyLjggMzhsODUuNi05LjItOTEuNCAyMC43IDI1LjEgMTkuNi0zLjktMTYuNWM3LjUtMS43IDM5LjEtOC41IDY2LjgtOC45bC0yMi4zIDgwLjRjMTMuNi0uNyAxOS05IDE5LjYtMjIuOGw1LTEgLjMgMjYuN2MtMjIuNSAzLjItMzcuMyA2LjctNDkuNSA5LjlsMTMuMS00My4yLTYxLjUtMzYuNyAyLjQgOC4xIDEwLjIgNWM2LjMgMTguNiAxOS40IDU2LjYgMjAuNCA1OC43IDIgNC4zIDMuMiA1LjggMTIgNC41bDEuMSA1Yy0xNi4xIDQuOS0yMy43IDcuNi0zOSAxNC40bC0yLjQtNC43YzQuNC0yLjkgOC43LTMuOSA1LjUtMTIuOC0yMy43LTYyLjUtMjEuNS01OC4xLTIyLjgtNTkuNGwyLjQtNC40IDMzLjUgNjcuM2MtMy44LTExLjkgMS43IDEuNy0zMy03OC44bC00MS45IDg4LjUgNC43LTEzLjktMzUuOS00Mi4yIDI3LjggOTMuNS0xMS44IDguNGMtMTExLjktMTAxLjctMTA1LjgtOTguNC0xMTMuNy05OC43LTUuNS0uMy0xMy42IDUuNS0xMy42IDUuNWwtNS02YzMwLjYtMjMuNSAzMS42LTI0LjMgNTguNC00Mi43bDQuMiA3LjFzLTUuOCA0LjItNy45IDcuMWMtNS45IDkuMyAxLjcgMTMuMyA2MS44IDc1LjdsLTE4LjgtNTguOSAzOS44LTEwLjIgMjUuNyAzMC42IDQuNC0xMi4zLTUtMjQuNiAxMy4xLTMuNCAuNSAzLjEgMy43LTEwLjUtOTQuMyAyOS4zIDExLjMtNS0xMy42LTQyLjQgMTcuMy05LjIgMzAuMSAzNi4xIDI4LjUtMTMuMWMtMS40LTcuNS0yLjUtMTQuNS00LjctMTkuNmwxNy4zIDEzLjkgNC43LTIuMS01OS4yLTQyLjcgMjMuMSAxMS41YzE5LTYuMSAyNS4yLTcuNSAzMi4yLTkuN2wyLjYgMTFjLTEyLjYgMTIuNiAxLjQgMTYuOCA2LjUgMTkuNGwtMTMuNi02MSAxMiAyOC4zYzQuMi0xLjMgNy4zLTIuMSA3LjMtMi4xbDIuNiA4LjZzLTMuMSAxLTYuMyAyLjFsOC45IDIxIDMzLjgtNjUuNy0yMC43IDYxYzQyLjQtMjQuMSA4MS40LTM2LjcgMTMyLTM1LjkgNjcgMSAxNjcuMyA0MC44IDE5OS44IDEzOS44IC44IDIuMSAwIDIuNi0uOCAuM3ptLTQwOC0xMTMuNHMxLjgtLjUgNC4yLTEuM2w5LjQgNy42Yy0uNCAwLTMuNC0uMy0xMS4zIDIuNGwtMi40LTguNnptMTQzLjggMzguNWMtMS42LS42LTI2LjUtNC44LTMzLjMgMjAuN2wyMS43IDE3IDExLjUtMzcuN3pNMzE4LjQgNjcuMWMtNTguNCAwLTEwNi4xIDEyLTExNSAxNC40bDAgLjhjOC40IDIuMSAxNC40IDQuMiAyMS4yIDExLjhsMS42IC4zYzYuNi0xLjggNDktMTMuOSAxMTAuMi0xMy45IDE4MC4yIDAgMzAxLjcgMTE2LjggMzAxLjcgMjIzLjRsMCAxMGMwIDEuMyAuOCAyLjYgMS4xIC41IC41LTIuMSAuOC04LjYgLjgtMTkuNiAuMy04My44LTk2LjYtMjI3LjYtMzIxLjYtMjI3LjZ6TTUyOS41IDIzNi44YzEuMy01LjggMC0xMi4zLTcuMy0xMy4xLTkuNi0xLjEtMTYuMSAyMy44LTE3IDMzLjUtLjggNS41LTEuMyAxNC45IDYgMTQuOSA0LjcgMCA5LjctLjkgMTguMy0zNS40ek00NjggMjc5LjdjLTIuNi0uOC05LjQtLjgtMTIuNiAxMC41LTEuOCA2LjggLjUgMTMuNCA2IDE0LjcgMy43IDEuMSA4LjkgLjUgMTEuOC0xMC43IDIuNi05LjktMS44LTEzLjYtNS4yLTE0LjR6bTIzIDIxYzEuOCAuNSAzLjEgMSA1LjggMS44IDAtMS44IC41LTguNCAuOC0xMi4xLTEgMS4zLTUuNSA4LjEtNi42IDEwbDAgLjN6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc05kID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem05NCAxNDQuM2wwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHptMCA3OS44bDAgNDIuNS0xODAuMyAwIDAtNDIuNSAxODAuMyAweiJdCiAgICB9OwogICAgZmFVc3BzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzcHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlMSIsICJNNDI4LjMgMjQxLjdjMjUuOC00MS4zIDE1LjItNDguOC0xMS43LTQ4LjhsLTI3IDBjLS4xIDAtMS41LTEuNC0xMC45IDgtMTEuMiA1LjYtMzcuOSA2LjMtMzcuOSA4LjcgMCA0LjUgNzAuMy0zLjEgODguMSAwIDkuNSAxLjUtMS41IDIwLjQtNC40IDMyLS41IDQuNSAyLjQgMi4zIDMuOCAuMXpNMzE2LjIgMjY0LjNjNjQtMjEuMyA5Ny4zLTIzLjkgMTAyLTI2LjIgNC40LTIuOS00LjQtNi42LTI2LjItNS44LTUxLjcgMi4yLTEzNy42IDM3LjEtMTcyLjYgNTMuOWwtMzAuNy05My4zIDE5Ni42IDBjLTIuNy0yOC4yLTE1Mi45LTIyLjYtMzM3LjktMjIuNkwtNSA0MTUuOGMxOTYuNC05Ny4zIDI1OC45LTEzMC4zIDMyMS4yLTE1MS41ek02Mi43IDk2YzI1My4zIDUzLjcgMzMwIDY1LjcgMzMyLjEgODUuMiAzNi40IDAgNDUuOSAwIDUyLjQgNi42IDIxLjEgMTkuNy0xNC42IDY3LjctMTQuNiA2Ny43LTQuNCAyLjktNDA2LjQgMTYwLjItNDA2LjQgMTYwLjJMNDQ5LjMgNDE1LjcgNTE3IDk2IDYyLjcgOTZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUxldHRlcmJveGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxldHRlcmJveGQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYyZSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTA1LjEgMTg3QzY2LjQgMTg3IDM1IDIxOC4zIDM1IDI1N3MzMS40IDcwIDcwLjEgNzBjMjQuOCAwIDQ2LjUtMTIuOCA1OS0zMi4ybC41LS43LS40LS42Yy02LjUtMTAuNi0xMC4yLTIzLjEtMTAuMi0zNi41IDAtMTMuNiAzLjktMjYuMyAxMC42LTM3LjEtMTIuNC0xOS44LTM0LjQtMzIuOS01OS41LTMyLjl6TTIyNCAxODdjLTI0LjggMC00Ni41IDEyLjgtNTkgMzIuMmwtLjUgLjcgLjQgLjZjNi41IDEwLjYgMTAuMiAyMy4xIDEwLjIgMzYuNSAwIDEzLjYtMy45IDI2LjMtMTAuNiAzNy4xIDEyLjQgMTkuNyAzNC40IDMyLjkgNTkuNSAzMi45IDI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuNy0zNC40LTMyLjktNTkuNS0zMi45em0xMTguOSAwYy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjggMzQuNCAzMi45IDU5LjUgMzIuOSAzOC43IDAgNzAuMS0zMS4zIDcwLjEtNzBzLTMxLjQtNzAtNzAuMS03MHoiXQogICAgfTsKICAgIGZhTWFuZGFsb3JpYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFuZGFsb3JpYW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjUwZiIsICJNMjAwLjYgNTExLjljLTEtMy4zLTEuNy0xNS44LTEuNC0yNC42IC42LTE1LjkgMS0yNC43IDEuNC0yOC44IC42LTYuMiAyLjktMjAuNyAzLjMtMjEuNCAuNi0xIC40LTI3LjktLjItMzMuMS0uMy0yLjYtLjYtMTEuOS0uNy0yMC43LS4xLTE2LjUtLjUtMjAuMS0yLjctMjQuOC0xLjEtMi4zLTEuMi0zLjgtMS0xMS40IC4yLTQuMiAuMS04LjUtLjMtMTIuNy0yLTEzLTMuNS0yNy43LTMuMi0zMy45cy40LTcuMSAyLjEtOS43YzMuMS00LjcgNi41LTE0IDguNi0yMy4zIDIuMy05LjkgMy45LTE3LjIgNC42LTIwLjcgMS4xLTUuMSAyLjYtMTAuMSA0LjQtMTUuMSAyLjMtNi4yIDIuNS0xNS40IC40LTE1LjQtLjMgMC0xLjQgMS4yLTIuNCAyLjdzLTQuOCA0LjgtOC4zIDcuNGMtOC40IDYuMS0xMS43IDkuNC0xMi43IDEyLjZzLTEgNy4yLS4yIDcuOGMuMyAuMiAxLjMgMi40IDIuMSA0LjkgMS42IDUgMS45IDEwLjMgLjcgMTUuNC0uNCAxLjgtMSA1LjUtMS41IDguMnMtMSA2LjUtMS4zIDguMmMtLjIgMS41LS43IDMtMS41IDQuMy0xIDEtMS4xIC45LTIuMS0uNS0uNy0xLjUtMS4yLTMuMS0xLjQtNC43LS4yLTEuNy0xLjYtNy4xLTMuMS0xMS45LTMuMy0xMC45LTMuNS0xNi4yLTEtMjEgLjgtMS40IDEuNC0zIDEuNy00LjYgMC0yLjQtMi4yLTUuMy03LjQtOS45LTctNi4yLTguNi03LjktMTAuMi0xMS4zLTEuNy0zLjYtMy4xLTQuMS00LjUtMS41LTEuOCAzLTIuNiA5LjEtMyAyMmwtLjMgMTIuMiAyIDIuMmMzLjIgMy43IDEyLjEgMTYuNSAxMy44IDE5LjggMy40IDYuNyA0LjMgMTEuNyA0LjQgMjMuNnMxIDIyLjggMiAyNC43Yy40IC43IC41IDEuNCAuMyAxLjVzLjQgMi4xIDEuMyA0LjNjMSAyLjkgMS43IDUuOSAyLjEgOSAuNCAzLjUgLjkgNyAxLjcgMTAuNCAyLjIgOS42IDIuOCAxNC4xIDIuNCAyMC4xLS4yIDMuMy0uNSAxMS4xLS43IDE3LjMtMS4zIDQxLjgtMS44IDU4LTIgNjEuMi0uMSAyLS40IDExLjUtLjYgMjEuMS0uNCAxNi4zLTEuMyAyNy40LTIuNCAyOC42LS42IC43LTguMS00LjktMTIuNS05LjUtMy44LTMuOS00LTQuOC0yLjgtOS45IC43LTMgMi4zLTE4LjMgMy4zLTMyLjYgLjQtNC44IC44LTEwLjUgMS0xMi43IC44LTkuNCAxLjctMjAuMyAyLjYtMzQuOCAuNi04LjUgMS4zLTE2LjQgMS43LTE3LjdzLjktOS45IDEuMS0xOS4xbC40LTE2LjgtMi4zLTQuM2MtMS43LTMuMy00LjktNi45LTEzLjItMTUuMy02LTYuMS0xMS44LTEyLjMtMTIuOS0xMy44bC0yLTIuOCAuOC0xMC45YzEuMS0xNS43IDEuMS00OC42IDAtNTkuMWwtLjktOC43LTMuMy00LjVjLTUuOS04LjEtNS44LTcuNy02LjItMzMuMy0uMS02LjEtLjQtMTEuNS0uNi0xMi4xLS44LTEuOS0zLTIuNy04LjUtMy04LjktLjYtMTEtMS45LTIzLjgtMTQuNi02LjItNi0xMi4zLTEyLTEzLjgtMTMuMi0yLjgtMi40LTIuOC0yLS42LTkuNmwxLjQtNC42LTEuNy0zYy0uOC0xLjQtMS42LTIuOC0yLjYtNC4xLTEuMy0xLjUtNS41LTEwLjktNi0xMy41LS4yLS43LS4yLTEuNC0uMS0yLjFzLjUtMS4zIC45LTEuOGMyLjItMi45IDMuNC01LjcgNC41LTEwLjcgMi4zLTExLjIgNy43LTI2LjEgMTAuNi0yOS4yIDMuMi0zLjUgNy43LTEgOS40IDUgMS4zIDQuOCAxLjQgOS44IC4xIDE4LjYtLjUgMy43LS45IDcuNC0xIDExLjEgMCA0IC4yIDQuNyAyLjMgNy40IDMuMyA0LjQgNy43IDcuNCAxNS4yIDEwLjUgMS43IC43IDMuMyAxLjcgNC43IDIuOCAxMS4yIDEwLjcgMTguNiAxNi4yIDIyLjkgMTYuOSA1LjIgLjggOCA0LjUgMTAgMTMuNCAxLjMgNS43IDQgMTEuMSA1LjUgMTEuMSAxLjItLjIgMi4zLS43IDMuMy0xLjQgMi0xLjIgMi4yLTEuNyAyLjItNC4yLS4zLTYtLjktMTEuOS0yLTE3LjgtLjQtMS43LS44LTQuMS0uOS01LjRzLS42LTMuOC0xLTUuN2MtMi42LTExLjItMy42LTE1LjUtNC4xLTE2LTEuNi0yLTQuMS0xMC4yLTQuOS0xNS45LTEuNi0xMS4xLTQtMTQuMi0xMi45LTE3LjQtNC45LTEuOC05LjQtNC41LTEzLjMtNy45LTEuMi0xLTQtMy4yLTYuNC01LjFzLTQuNC0zLjUtNC42LTMuOGMtLjgtLjctMS43LTEuNC0yLjctMi02LjItNC4yLTguOC03LTExLjMtMTJsLTIuNC01Yy0uMS04LjctLjMtMTcuMy0uNC0yNmw2LjktNi42YzQtMy44IDguNS03LjQgMTAuNi04LjQgMy4zLTEuNyA0LjQtMS45IDExLjQtMiA4LjUtLjIgMTAuMSAwIDExLjcgMS42czEuNCA2LjQtLjMgOC41Yy0uNiAuNy0xLjEgMS41LTEuMyAyLjMgMCAuNi0yLjYgNC45LTUuNCA5LTEuMSAyLjItMS45IDQuNS0yLjQgNi44IDIwLjQgMTMuNCAyMS42IDMuOCAxNC4xIDI5bDExLjQgMi41YzMuMS04LjcgNi41LTE3LjMgOC42LTI2LjIgLjMtNy42LTEyLTQuMi0xNS40LTguNy0yLjMtNS45IDMuMS0xNC4yIDYuMS0xOS4yIDEuNi0yLjMgNi42LTQuNyA4LjgtNC4xIC45IC4yIDQuMi0uNCA3LjQtMS4zIDIuNS0uOCA1LTEuMyA3LjUtMS43IDItLjIgNC4xLS43IDYtMS4zIDMuNy0xLjEgNC41LTEuMiA2LjMtLjQgMS45IC42IDMuOCAxLjEgNS44IDEuNCAyLjEgLjMgNC4xIC45IDYgMS45IDEuNiAuOSAzLjMgMS43IDUgMi4yIDIuNSAuNyAzIC42IDctMS43TDIyNiA1LjQgMjM2LjcgNWMxMC40LS40IDEwLjgtLjUgMTUuMy0yLjdMMjU2LjUgMCAyNTkgMS40YzEuOCAxIDMuMSAyLjcgNC45IDYgMi40IDQuNSAyLjQgNC42IDEuNCA3LjQtLjkgMi40LS45IDMuMy0uMSA2LjQgLjUgMiAxLjIgNCAyLjEgNS45IC42IDEuMyAxLjEgMi42IDEuMyA0IC4zIDQuMyAwIDUuMy0yLjQgNi45LTIuMiAxLjUtNyA3LjktNyA5LjMtLjIgMS0uNiAyLTEuMSAzLTUgMTEuNS02LjggMTMuNi0xNC4zIDE3LTkuMiA0LjItMTIuMyA1LjItMTYuMiA1LjItMy4xIDAtNCAuMi00LjUgMS4zLTEuMiAxLjQtMi41IDIuNy00LjEgMy43LTEuOCAxLjItMy4zIDIuOS00LjQgNC44LS41IDEuMi0xLjQgMi4yLTIuNSAyLjktLjkgLjQtMS44IDEtMi41IDEuNy0yLjIgMS45LTQuNiAzLjctNyA1LjQtMy4zIDIuMy02LjkgNS03LjkgNi0uNyAuNy0xLjUgMS4zLTIuNCAxLjctLjggLjQtMS42IC45LTIuMSAxLjYtMS4zIDEuNC0xLjUgMi4xLTEuMSA0LjYgLjMgMiAuOCA0IDEuNCA1LjkgMS4zIDMuOCAxLjMgNy45IDAgMTAuNnMtLjkgNi43IDEuNCA5LjZjMiAyLjYgMi4yIDQuNiAuNyA4LjgtLjggMi45LTEuMSA1LjktMS4xIDguOSAwIDQuOSAuMiA2LjMgMS41IDguNHMxLjggMi41IDMuMiAyLjNjMi0uMiAyLjMtMS4xIDQuNy0xMi4xIDIuMi0xMCAzLjctMTEuOSAxMy44LTE3LjEgMi45LTEuNSA3LjUtNCAxMC01LjRzNi44LTMuNyA5LjQtNC45YzUuOS0yLjYgMTEuMi02LjYgMTUuMi0xMS43IDcuMS04LjggMTAtMTYuMiAxMi44LTMzLjMgLjQtMi44IDEuMy01LjQgMi45LTcuNyAxLjQtMi4yIDIuNC00LjcgMi45LTcuMyAxLTUuMyAyLjktOS4xIDUuNi0xMS41IDQuNy00LjIgNi0xLjEgNC42IDEwLjktLjUgMy45LTEuMSAxMC4zLTEuNCAxNC40bC0uNiA3LjRjMyAyLjcgNS45IDUuNSA4LjkgOC4ybC4xIDguNGMuMSA0LjYgLjUgOS41IC45IDEwLjlsLjggMi41LTYuNCA2LjNjLTguNSA4LjMtMTIuOSAxMy45LTE2LjggMjEuNi0xLjggMy41LTMuNyA3LjEtNC40IDgtMi4yIDMuMS02LjUgMTMtOC44IDIwLjNsLTIuMyA3LjItNyA2LjVjLTMuOCAzLjYtOCA3LjItOS4yIDguMi0zIDIuMy00LjMgNS4xLTQuMyAxMC0uMSAyLjUgLjQgNSAxLjYgNy4zIC44IDEuNiAxLjUgMy4yIDIuMSA0LjggLjMgMSAuOSAyIDEuNiAyLjkgMS40IDEuNiAxLjkgMTYuMSAuOCAyMy4yLS43IDQuNS0zLjYgMTItNC43IDEyLTEuOCAwLTQuMSA5LjMtNS4xIDIwLjctLjIgMi0uNiA1LjktMSA4LjdzLTEgMTAtMS40IDE2Yy0uOCAxMi4yLS4yIDE4LjggMiAyMy4yIDMuNCA2LjcgLjUgMTIuNy0xMSAyMi44bC00IDMuNSAuMSA1LjJjLjEgMyAuNCA2IDEuMSA4LjkgNC42IDE2IDQuNyAxNi45IDQuNCAzNy4xLS41IDI2LjQtLjMgNDAuMyAuNiA0NC4yIC41IDIuMyAuOSA0LjYgMS4xIDcgLjIgMiAuNyA1LjMgMS4xIDcuNCAuNSAyLjMgLjggMTEgLjggMjIuN2wwIDE5LjEtMS44IDIuNmMtMi43IDMuOS0xNS4xIDEzLjUtMTUuNSAxMi4zbC4xIDB6bTI5LjUtNDUuMWMtLjItLjMtLjMtNi45LS4zLTE0LjYgMC0xNC4xLS45LTI3LjUtMi4zLTM0LjQtLjQtMi0uOC05LjctLjktMTcuMS0uMi0xMS45LTEuNC0yNC40LTIuNi0yNi40LS43LTEuMS0zLTE3LjctMy0yMS4zIDAtNC4yIDEtNiA1LjMtOS4xczQuOS0zLjEgNS41LS43Yy4zIDEuMSAxLjQgNS42IDIuNiAxMCAzLjkgMTUuMSA0LjEgMTYuMyA0IDIxLjctLjEgNS44LS4xIDYuMS0xLjcgMTcuNy0xIDcuMS0xLjIgMTIuNC0xIDI4LjQgLjIgMTkuNC0uNiAzNS43LTIgNDEuMy0uNyAyLjgtMi44IDUuNS0zLjQgNC40bC0uMSAwem0tNzEtMzcuNmMtLjgtMy42LTEuMy03LjItMS43LTEwLjhzLTEtNy4yLTEuNy0xMC44Yy0uNS0yLjEtLjktNC4zLTEtNi41LS4zLTMuMi0uOS03LjUtMS4zLTkuNS0xLTQuOC0zLjMtMTkuNC0zLjQtMjEuMSAwLS43LS4zLTQtLjctNy40LS43LTYuMi0uOC0yNy43LS4yLTI4LjMgMS0xIDYuNiAyLjggMTEuMyA3LjRsNS4zIDUuMy0uNCA2LjVjLS4yIDMuNi0uNiAxMC4yLS44IDE0LjgtLjUgMTMuMy0uNyA4LjctMS42IDI4LjQtLjggMTcuNC0xLjkgMzEuMy0yLjYgMzItLjEgLjEtLjIgLjEtLjIgLjJzLS4yIDAtLjMgMC0uMiAwLS4zLS4xLS4xLS4xLS4yLS4ybDAgMHpNNzIgMTYyLjZjMjEuMSAxMi44IDE3LjggMTQuMiAyOC41IDE3LjcgMTMgNC4zIDE4LjkgNy4xIDIzLjIgMTYuOS00My43IDM2LjEtNjkgNTcuOS03Ni43IDcwLjktMzEgNTItNiAxMDEuNiA2Mi44IDg3LjItMTQuMiAyOS4yLTc4IDI4LjYtOTguNy00LjktMjQuNy00MC0yMi4xLTExOC4zIDYxLTE4Ny43bDAgMHptMjEwLjggMTc5YzU2LjcgNi45IDgyLjMtMzcuNyA0Ni41LTg5LjIgMCAwLTI2LjktMjkuMy02NC4zLTY4IDMtMTUuNSA5LjUtMzIuMSAzMC42LTUzLjggODkuMiA2My41IDkyIDE0MS42IDkyLjUgMTQ5LjQgNC4zIDcwLjYtNzguNyA5MS4yLTEwNS4zIDYxLjdsMCAweiJdCiAgICB9OwogICAgZmFTbGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzbGFjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyNDQ3LCAic2xhY2staGFzaCJdLCAiZjE5OCIsICJNOTQuMSAzMTUuMWMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMVMwIDM0MSAwIDMxNS4xIDIxLjIgMjY4IDQ3LjEgMjY4bDQ3LjEgMCAwIDQ3LjF6bTIzLjcgMGMwLTI1LjkgMjEuMi00Ny4xIDQ3LjEtNDcuMVMyMTIgMjg5LjIgMjEyIDMxNS4xbDAgMTE3LjhjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFzLTQ3LjEtMjEuMi00Ny4xLTQ3LjFsMC0xMTcuOHptNDcuMS0xODljLTI1LjkgMC00Ny4xLTIxLjItNDcuMS00Ny4xUzEzOSAzMiAxNjQuOSAzMiAyMTIgNTMuMiAyMTIgNzkuMWwwIDQ3LjEtNDcuMSAwem0wIDIzLjdjMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFTMTkwLjggMjQ0IDE2NC45IDI0NEw0Ny4xIDI0NEMyMS4yIDI0NCAwIDIyMi44IDAgMTk2LjlzMjEuMi00Ny4xIDQ3LjEtNDcuMWwxMTcuOCAwem0xODkgNDcuMWMwLTI1LjkgMjEuMi00Ny4xIDQ3LjEtNDcuMVM0NDggMTcxIDQ0OCAxOTYuOSA0MjYuOCAyNDQgNDAwLjkgMjQ0bC00Ny4xIDAgMC00Ny4xem0tMjMuNyAwYzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xUzIzNiAyMjIuOCAyMzYgMTk2LjlsMC0xMTcuOEMyMzYgNTMuMiAyNTcuMiAzMiAyODMuMSAzMnM0Ny4xIDIxLjIgNDcuMSA0Ny4xbDAgMTE3Ljh6bS00Ny4xIDE4OWMyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMVMzMDkgNDgwIDI4My4xIDQ4MCAyMzYgNDU4LjggMjM2IDQzMi45bDAtNDcuMSA0Ny4xIDB6bTAtMjMuN2MtMjUuOSAwLTQ3LjEtMjEuMi00Ny4xLTQ3LjFTMjU3LjIgMjY4IDI4My4xIDI2OGwxMTcuOCAwYzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xcy0yMS4yIDQ3LjEtNDcuMSA0Ny4xbC0xMTcuOCAweiJdCiAgICB9OwogICAgZmFTbGFja0hhc2ggPSBmYVNsYWNrOwogICAgZmFBbmdlbGxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5nZWxsaXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyMDkiLCAiTTMxNS42IDIxNS40YzExLjctMzIuNiA0NS40LTEyNi45IDQ1LjQtMTU3LjEgMC0yNi42LTE1LjctNDguOS00My43LTQ4LjktNDQuNiAwLTg0LjYgMTMxLjctOTcuMSAxNjMuMS05LjctMjguNS01NS4xLTE3Mi41LTk1LjEtMTcyLjUtMzEuMSAwLTQ1LjcgMjIuOS00NS43IDUxLjcgMCAzNS4zIDM0LjIgMTI2LjggNDYuNiAxNjItNi4zLTIuMy0xMy4xLTQuMy0yMC00LjMtMjMuNCAwLTQ4LjMgMjkuMS00OC4zIDUyLjYgMCA4LjkgNC45IDIxLjQgOCAyOS43LTM2LjkgMTAtNTEuMSAzNC42LTUxLjEgNzEuNy0uMSA3Mi4yIDY4LjMgMTQ4LjYgMTY0LjUgMTQ4LjYgMTE4IDAgMTkxLjQtODguNiAxOTEuNC0yMDIuOSAwLTQzLjEtNi45LTgyLTU0LjktOTMuN3pNMjgwLjIgMTA4YzQtMTIuMyAyMS4xLTY0LjMgMzcuMS02NC4zIDguNiAwIDEwLjkgOC45IDEwLjkgMTYgMCAxOS4xLTM4LjYgMTI0LjYtNDcuMSAxNDhsLTM0LTYgMzMuMS05My43ek0xMTAuOCA0OC4zYzAtMTEuOSAxNC41LTQ1LjcgNDYuMyA0Ny4xbDM0LjYgMTAwLjNjLTE1LjYtMS4zLTI3LjctMy0zNS40IDEuNC0xMC45LTI4LjgtNDUuNS0xMTkuNy00NS41LTE0OC44ek0xMDguNSAyNDRjMjkuMyAwIDY3LjEgOTQuNiA2Ny4xIDEwNy40IDAgNS4xLTQuOSAxMS40LTEwLjYgMTEuNC0yMC45IDAtNzYuOS03Ni45LTc2LjktOTcuNyAuMS03LjcgMTIuNy0yMS4xIDIwLjQtMjEuMXpNMjkyLjggNDMwLjNjLTI5LjEgMzItNjYuMyA0OC42LTEwOS43IDQ4LjYtNTkuNCAwLTEwNi4zLTMyLjYtMTI4LjktODguMy0xNy4xLTQzLjQgMy44LTY4LjMgMjAuNi02OC4zIDExLjQgMCA1NC4zIDYwLjMgNTQuMyA3My4xIDAgNC45LTcuNyA4LjMtMTEuNyA4LjMtMTYuMSAwLTIyLjQtMTUuNS01MS4xLTUxLjQtMjkuNyAyOS43IDIwLjUgODYuOSA1OC4zIDg2LjkgMjYuMSAwIDQzLjEtMjQuMiAzOC00MiAzLjcgMCA4LjMgLjMgMTEuNy0uNiAxLjEgMjcuMSA5LjEgNTkuNCA0MS43IDYxLjcgMC0uOSAyLTcuMSAyLTcuNCAwLTE3LjQtMTAuNi0zMi42LTEwLjYtNTAuMyAwLTI4LjMgMjEuNy01NS43IDQzLjctNzEuNyA4LTYgMTcuNy05LjcgMjcuMS0xMy4xIDkuNy0zLjcgMjAtOCAyNy40LTE1LjQtMS4xLTExLjItNS43LTIxLjEtMTYuOS0yMS4xLTI3LjcgMC0xMjAuNiA0LTEyMC42LTM5LjcgMC02LjcgLjEtMTMuMSAxNy40LTEzLjEgMzIuMyAwIDExNC4zIDggMTM4LjMgMjkuMSAxOC4xIDE2LjEgMjQuMyAxMTMuMi0zMSAxNzQuN3ptLTk4LjYtMTI2YzkuNyAzLjEgMTkuNyA0IDI5LjcgNi03LjQgNS40LTE0IDEyLTIwLjMgMTkuMS0yLjgtOC41LTYuMi0xNi44LTkuNC0yNS4xeiJdCiAgICB9OwogICAgZmFBbmRyb2lkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFuZHJvaWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE3YiIsICJNNDIwLjUgMjUzLjlhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tMjY1LjEgMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTI3My43LTk2LjVsNDcuOS04M2MuOC0xLjEgMS4zLTIuNCAxLjUtMy44cy4yLTIuNy0uMS00LjEtLjktMi42LTEuNy0zLjctMS44LTItMy0yLjctMi41LTEuMS0zLjktMS4zLTIuNyAwLTQgLjQtMi41IDEuMS0zLjYgMS45LTEuOSAyLTIuNSAzLjJsLTQ4LjUgODQuMWMtMzguOC0xNy40LTgwLjgtMjYuNC0xMjMuMy0yNi40cy04NC41IDktMTIzLjMgMjYuNEwxMTYuMiA2NC40Yy0uNi0xLjItMS41LTIuMy0yLjUtMy4ycy0yLjMtMS41LTMuNi0xLjktMi43LS41LTQtLjQtMi43IC42LTMuOSAxLjMtMi4yIDEuNi0zIDIuNy0xLjQgMi40LTEuNyAzLjctLjMgMi43LS4xIDQuMSAuOCAyLjYgMS41IDMuOGw0Ny45IDgzQzY0LjUgMjAyLjIgOC4yIDI4NS41IDAgMzg0bDU3NiAwYy04LjItOTguNS02NC41LTE4MS44LTE0Ni45LTIyNi42eiJdCiAgICB9OwogICAgZmFNZWV0dXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVldHVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZTAiLCAiTTEzMS4xIDQxNC4zYzEuMSA1LjctMi4zIDExLjEtOCAxMi4zLTUuNCAxLjEtMTAuOS0yLjMtMTItOC0xLjEtNS40IDIuMy0xMS4xIDcuNy0xMi4zczExLjEgMi4zIDEyLjMgOHptMTQzLjEgNzEuNGMtNi4zIDQuNi04IDEzLjQtMy43IDIwIDQuNiA2LjYgMTMuNCA4LjMgMjAgMy43IDYuMy00LjYgOC0xMy40IDMuNC0yMC00LjItNi41LTEzLjEtOC4zLTE5LjctMy43em0tODYtNDYyLjNhMTEuOCAxMS44IDAgMSAwIC00LjktMjMgMTEuOCAxMS44IDAgMSAwIDQuOSAyM3pNNjYuNSAyMjYuM2EyMi4yIDIyLjIgMCAxIDAgLTI0LjcgMzYuOSAyMi4yIDIyLjIgMCAxIDAgMjQuNy0zNi45em0yNzItMTcwLjlhMjIuMSAyMi4xIDAgMSAwIC0yMi40LTM4IDIyLjEgMjIuMSAwIDEgMCAyMi40IDM4em0tMTkxLjEgNThhMTYuOSAxNi45IDAgMSAwIC0xOC44LTI4IDE2LjkgMTYuOSAwIDEgMCAxOC44IDI4em0zNzIuMyAxNTZjLTcuNCAxLjctMTIuMyA5LjEtMTAuNiAxNi45IDEuNCA3LjQgOC45IDEyLjMgMTYuMyAxMC42IDcuNC0xLjQgMTIuMy04LjkgMTAuNi0xNi42LTEuNS03LjQtOC45LTEyLjMtMTYuMy0xMC45em0zOS43LTU2LjhhMTAuMSAxMC4xIDAgMSAwIC0xOS44IDQuMyAxMC4xIDEwLjEgMCAxIDAgMTkuOC00LjN6bS04MC4zLTczLjdhMTguOCAxOC44IDAgMSAwIDIwLjcgMzEuMyAxOC44IDE4LjggMCAxIDAgLTIwLjctMzEuM3ptLTYuMyAxMzkuNGMyNi4zIDQzLjEgMTUuMSAxMDAtMjYuMyAxMjkuMS0xNy40IDEyLjMtMzcuMSAxNy43LTU2LjkgMTcuMS0xMiA0Ny4xLTY5LjQgNjQuNi0xMDUuMSAzMi42LTEuMSAuOS0yLjYgMS43LTMuNyAyLjktMzkuMSAyNy4xLTkyLjMgMTcuNC0xMTkuNC0yMi4zLTkuNy0xNC4zLTE0LjYtMzAuNi0xNS4xLTQ2LjktNjUuNC0xMC45LTkwLTk0LTQxLjEtMTM5LjctMjguMy00Ni45IC42LTEwNy40IDUzLjQtMTE0LjkgMjUuMS02Ni4yIDEwNy42LTk3LjYgMTYzLjYtNTQuMiA2Ny40LTIyLjMgMTM2LjMgMjkuNCAxMzAuOSAxMDEuMSA0MS4xIDEyLjYgNTIuOCA2Ni45IDE5LjcgOTUuMnptLTcwIDc0LjNjLTMuMS0yMC42LTQwLjktNC42LTQzLjEtMjcuMS0zLjEtMzIgNDMuNy0xMDEuMSA0MC0xMjgtMy40LTI0LTE5LjQtMjkuMS0zMy40LTI5LjQtMTMuNC0uMy0xNi45IDItMjEuNCA0LjYtMi45IDEuNy02LjYgNC45LTExLjctLjMtNi4zLTYtMTEuMS0xMS43LTE5LjQtMTIuOS0xMi4zLTItMTcuNyAyLTI2LjYgOS43LTMuNCAyLjktMTIgMTIuOS0yMCA5LjEtMy40LTEuNy0xNS40LTcuNy0yNC0xMS40LTE2LjMtNy4xLTQwIDQuNi00OC42IDIwLTEyLjkgMjIuOS0zOCAxMTMuMS00MS43IDEyNS4xLTguNiAyNi42IDEwLjkgNDguNiAzNi45IDQ3LjEgMTEuMS0uNiAxOC4zLTQuNiAyNS40LTE3LjQgNC03LjQgNDEuNy0xMDcuNyA0NC42LTExMi42IDItMy40IDguOS04IDE0LjYtNS4xIDUuNyAzLjEgNi45IDkuNCA2IDE1LjEtMS4xIDkuNy0yOCA3MC45LTI4LjkgNzcuNy0zLjQgMjIuOSAyNi45IDI2LjYgMzguNiA0IDMuNy03LjEgNDUuNy05Mi42IDQ5LjQtOTguMyA0LjMtNi4zIDcuNC04LjMgMTEuNy04IDMuMSAwIDguMyAuOSA3LjEgMTAuOS0xLjQgOS40LTM1LjEgNzIuMy0zOC45IDg3LjctNC42IDIwLjYgNi42IDQxLjQgMjQuOSA1MC42IDExLjQgNS43IDYyLjUgMTUuNyA1OC41LTExLjF6bTUuNyA5Mi4zYTIzLjMgMjMuMyAwIDEgMCAyNi4yIDM4LjQgMjMuMyAyMy4zIDAgMSAwIC0yNi4yLTM4LjR6Il0KICAgIH07CiAgICBmYUZvbnRpY29uc0ZpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvbnRpY29ucy1maSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2EyIiwgIk0xMTQuNCAyMjRsOTIuNCAwLTE1LjIgNTEuMi03Ni40IDAgMCAxNTcuOGMwIDgtMi44IDkuMiA0LjQgMTBsNTkuNiA1LjYgMCAzNC40LTE3OS4yIDAgMC0zNS4yIDI5LjItMi44YzcuMi0uOCA5LjItMy4yIDkuMi0xMC44bDAtMTU1LjhjMC0zLjItNC0zLjItOC0zLjJsLTMwLjQgMCAwLTUxLjIgMzguNCAwIDAtMjguOGMwLTY4IDM2LjQtOTYgMTA2LTk2IDQ2LjggMCA4OC44IDExLjIgODguOCA3Mi40TDE2My42IDE4MGMuNC0yNS42LTYtMzEuNi0yMi40LTMxLjYtMjUuMiAwLTI2IDEzLjYtMjYgMzcuNmwwIDMyYzAgMy4yLTQuOCA2LS44IDZ6TTM4NCA0ODNsLTE0MC44IDAgMC0zNC40IDI4LTMuNmM3LjItLjggMTAuNC0yLjQgMTAuNC0xMGwwLTE0OGMwLTUuNi00LTkuMi05LjItMTAuOGwtMzMuMi04LjggOS4yLTQwLjQgMTEwIDAgMCAyMDhjMCA4LTMuNiA4LjggNCAxMGwyMS42IDMuNiAwIDM0LjR6TTM1NCAxMzUuOGwxMi40IDQ1LjYtMTAgMTAtNDIuOC0yMi44LTQyLjggMjIuOC0xMC0xMCAxMi40LTQ1LjYtMzAtMzYuNCA0LjgtMTAgMzggMCAyMS4yLTM4LjQgMTIuOCAwIDIxLjIgMzguNCAzOCAwIDQuOCAxMy4yLTMwIDMzLjJ6Il0KICAgIH07CiAgICBmYVBhbGZlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYWxmZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkOCIsICJNMzg0LjkgMTkzLjljMC00Ny40LTU1LjItNDQuMi05NS40LTI5LjgtMS4zIDM5LjQtMi41IDgwLjctMyAxMTkuOCAuNyAyLjggMi42IDYuMiAxNS4xIDYuMiAzNi44IDAgODMuNC00Mi44IDgzLjMtOTYuMnpNMTkwLjQgMjY2LjFjLjIgMCA2LjUtMi43IDExLjItMi43IDI2LjYgMCAyMC43IDQ0LjEtMTQuNCA0NC4xLTIxLjUgMC0zNy4xLTE4LjEtMzcuMS00MyAwLTQyIDQyLjktOTUuNiAxMDAuNy0xMjYuNSAxLTEyLjQgMy0yMiAxMC41LTI4LjIgMTEuMi05IDI2LjYtMy41IDI5LjUgMTEuMSA3Mi4yLTIyLjIgMTM1LjIgMSAxMzUuMiA3MiAwIDc3LjktNzkuMyAxNTIuNi0xNDAuMSAxMzguMi0uMSAzOS40IC45IDc0LjQgMi43IDEwMGwwIC4yYy4yIDMuNCAuNiAxMi41LTUuMyAxOS4xLTkuNiAxMC42LTMzLjQgMTAtMzYuNC0yMi4zLTQuMS00NC40IC4yLTIwNi4xIDEuNC0yNDIuNS0yMS41IDE1LTU4LjUgNTAuMy01OC41IDc1LjkgLjIgMi41IC40IDQgLjYgNC42ek04IDE4MS4xcy0uMSAzNy40IDM4LjQgMzcuNGwzMCAwIDIyLjQgMjE3LjJzMCA0NC4zIDQ0LjcgNDQuM2wyODguOSAwczQ0LjctLjQgNDQuNy00NC4zbDIyLjQtMjE3LjIgMzAgMHMzOC40IDEuMiAzOC40LTM3LjRjMCAwIC4xLTM3LjQtMzguNC0zNy40bC0zMC4xIDBjLTcuMy0yNS42LTMwLjItNzQuMy0xMTkuNC03NC4zbC0yOCAwIDAtMTkuMXMtMi43LTE4LjQtMjEuMS0xOC40bC04NS44IDBTMjI0IDMxLjkgMjI0IDUwLjNsMCAxOS4xLTI4LjEgMHMtMTA1IDQuMi0xMjAuNSA3NC4zbC0yOSAwUzggMTQyLjUgOCAxODEuMXoiXQogICAgfTsKICAgIGZhV3BiZWdpbm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGJlZ2lubmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOTciLCAiTTQ2My4yIDMyMi40YzU2LjIgNjQuMyA0LjIgMTU3LjYtOTEuOSAxNTcuNi0zOS42IDAtNzguOC0xNy43LTEwMC4xLTUwLTYuOSAuNC0yMi43IC40LTI5LjYgMC0yMS40IDMyLjQtNjAuNiA1MC0xMDAuMSA1MC05NS41IDAtMTQ4LjMtOTMtOTEuOS0xNTcuNi03OS4xLTEzMS45IDMxLjMtMjkwLjQgMjA2LjgtMjkwLjQgMTc1LjYgMCAyODUuOSAxNTguNiAyMDYuOCAyOTAuNHptLTMzOS42LTgzbDQxLjUgMCAwLTU4LjEtNDEuNSAwIDAgNTguMXptMjE3LjIgODYuMWwwLTIzLjhjLTYwLjUgMjAuOS0xMzIuNCA5LjItMTg3LjYtMzRsLjIgMjQuOWM1MS4xIDQ2LjQgMTMxLjcgNTcuOSAxODcuMyAzMi45ek0xOTAgMjM5LjRsMTY2LjEgMCAwLTU4LjEtMTY2LjEgMCAwIDU4LjF6Il0KICAgIH07CiAgICBmYURpYXNwb3JhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpYXNwb3JhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3OTEiLCAiTTIxOS43IDM1NC42Yy0xLjQgMC04OCAxMTkuOS04OC43IDExOS45UzQ0LjQgNDE0IDQ0IDQxMy4zIDEzMC42IDI4Ny41IDEzMC42IDI4NS44YzAtMi4yLTEyOS42LTQ0LTEzNy42LTQ3LjEtMS4zLS41IDMxLjQtMTAxLjggMzEuNy0xMDIuMSAuNi0uNyAxNDQuNCA0NyAxNDUuNSA0NyAuNCAwIC45LS42IDEtMS4zIC40LTIgMS0xNDguNiAxLjctMTQ5LjYgLjgtMS4yIDEwNC41LS43IDEwNS4xLS4zIDEuNSAxIDMuNSAxNTYuMSA2LjEgMTU2LjEgMS40IDAgMTM4LjctNDcgMTM5LjMtNDYuMyAuOCAuOSAzMS45IDEwMi4yIDMxLjUgMTAyLjYtLjkgLjktMTQwLjIgNDcuMS0xNDAuNiA0OC44LS4zIDEuNCA4Mi44IDEyMi4xIDgyLjUgMTIyLjlzLTg1LjUgNjMuNS04Ni4zIDYzLjVjLTEtLjItODktMTI1LjUtOTAuOS0xMjUuNWwwIDB6Il0KICAgIH07CiAgICBmYVByb2R1Y3RIdW50ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInByb2R1Y3QtaHVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjg4IiwgIk0zMjYuMyAyMTguOGMwIDIwLjUtMTYuNyAzNy4yLTM3LjIgMzcuMmwtNzAuMyAwIDAtNzQuNCA3MC4zIDBjMjAuNSAwIDM3LjIgMTYuNyAzNy4yIDM3LjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTM2Ny45LTM3LjJjMC00Ny45LTM4LjktODYuOC04Ni44LTg2LjhsLTExOS45IDAgMCAyNDggNDkuNiAwIDAtNzQuNCA3MC4zIDBjNDcuOSAwIDg2LjgtMzguOSA4Ni44LTg2Ljh6Il0KICAgIH07CiAgICBmYVNxdWFyZVVwd29yayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdXB3b3JrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2N2MiLCAiTTU2IDMybDMzNiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMzM2YzAgMzAuOS0yNS4xIDU2LTU2IDU2TDU2IDQ4MGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCA4OEMwIDU3LjEgMjUuMSAzMiA1NiAzMnpNMjcwLjkgMjc0LjJjNi42LTUyLjkgMjUuOS02OS41IDUxLjQtNjkuNSAyNS4zIDAgNDQuOSAyMC4yIDQ0LjkgNDkuN3MtMTkuNyA0OS43LTQ0LjkgNDkuN2MtMjcuOSAwLTQ2LjMtMjEuNS01MS40LTI5Ljl6bS0yNi43LTQxLjhjLTguMi0xNS41LTE0LjMtMzYuMy0xOS4yLTU1LjZsLTYyLjkgMCAwIDc4LjFjMCAyOC40LTEyLjkgNDkuNC0zOC4yIDQ5LjRTODQuMSAyODMuNCA4NC4xIDI1NWwuMy03OC4xLTM2LjIgMCAwIDc4LjFjMCAyMi44IDcuNCA0My41IDIwLjkgNTguMiAxMy45IDE1LjIgMzIuOCAyMy4yIDU0LjggMjMuMiA0My43IDAgNzQuMi0zMy41IDc0LjItODEuNWwwLTUyLjVjNC42IDE3LjMgMTUuNCA1MC41IDM2LjIgNzkuN2wtMTkuMyAxMTAuNSAzNi44IDAgMTIuOC03OC40YzQuMiAzLjUgOC43IDYuNiAxMy40IDkuNCAxMi4zIDcuOCAyNi40IDEyLjIgNDAuOSAxMi42bDMuNCAwYzQ1LjEgMCA4MC45LTM0LjkgODAuOS04MS45cy0zNS45LTgyLjItODAuOS04Mi4yYy00NS40IDAtNzAuOSAyOS43LTc4LjEgNjAuMWwwIC4yeiJdCiAgICB9OwogICAgZmFDdXR0bGVmaXNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImN1dHRsZWZpc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4YyIsICJNMzQ4IDMwNS41Yy0xNy41IDMxLjYtNTcuNCA1NC41LTk2IDU0LjUtNTYuNiAwLTEwNC00Ny40LTEwNC0xMDRzNDcuNC0xMDQgMTA0LTEwNGMzOC42IDAgNzguNSAyMi45IDk2IDU0LjUgMTMuNy01MC45IDQxLjctOTMuMyA4Ny0xMTcuOC00NS4zLTQ5LjYtMTEwLjUtODAuNy0xODMtODAuNy0xMzcgMC0yNDggMTExLTI0OCAyNDhTMTE1IDUwNCAyNTIgNTA0YzcyLjUgMCAxMzcuNy0zMS4xIDE4My04MC43LTQ1LjMtMjQuNS03My4zLTY2LjktODctMTE3Ljh6Il0KICAgIH07CiAgICBmYU1lZGFwcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkYXBwcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2M2IiwgIk0xMTguMyAyMzguNGMzLjUtMTIuNSA2LjktMzMuNiAxMy4yLTMzLjYgOC4zIDEuOCA5LjYgMjMuNCAxOC42IDM2LjYgNC42LTIzLjUgNS4zLTg1LjEgMTQuMS04Ni43IDktLjcgMTkuNyA2Ni41IDIyIDc3LjUgOS45IDQuMSA0OC45IDYuNiA0OC45IDYuNiAxLjkgNy4zLTI0IDcuNi00MCA3LjgtNC42IDE0LjgtNS40IDI3LjctMTEuNCAyOC00LjcgLjItOC4yLTI4LjgtMTcuNS00OS42bC05LjQgNjUuNWMtNC40IDEzLTE1LjUtMjIuNS0yMS45LTM5LjMtMy4zLS4xLTYyLjQtMS42LTQ3LjYtNy44bDMxLTV6TTIyOCA0NDhjMjEuMiAwIDIxLjItMzIgMC0zMkw5MiA0MTZjLTIxLjIgMC0yMS4yIDMyIDAgMzJsMTM2IDB6bS0yNCA2NGMyMS4yIDAgMjEuMi0zMiAwLTMybC04OCAwYy0yMS4yIDAtMjEuMiAzMiAwIDMybDg4IDB6bTM0LjItMTQxLjVjMy4yLTE4LjkgNS4yLTM2LjQgMTEuOS00OC44IDcuOS0xNC43IDE2LjEtMjguMSAyNC00MSAyNC42LTQwLjQgNDUuOS03NS4yIDQ1LjktMTI1LjUgMC04NS42LTcxLjgtMTU1LjItMTYwLTE1NS4yUzAgNjkuNiAwIDE1NS4yYzAgNTAuMiAyMS4zIDg1LjEgNDUuOSAxMjUuNSA3LjkgMTIuOSAxNiAyNi4zIDI0IDQxIDYuNyAxMi41IDguNyAyOS44IDExLjkgNDguOSAzLjUgMjEgMzYuMSAxNS43IDMyLjYtNS4xLTMuNi0yMS43LTUuNi00MC43LTE1LjMtNTguNi0zMi42LTYwLjQtNjYuMS05NS42LTY2LjEtMTUxLjcgMC02Ny45IDU3LTEyMy4yIDEyNy0xMjMuMlMyODcgODcuMyAyODcgMTU1LjJjMCA1Ni4xLTMzLjUgOTEuMy02Ni4xIDE1MS42LTkuNyAxOC0xMS43IDM3LjQtMTUuMyA1OC42LTMuNCAyMC42IDI5IDI2LjQgMzIuNiA1LjF6Il0KICAgIH07CiAgICBmYVBpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaXgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQzYSIsICJNMjQyLjQgMjkyLjVjNS40LTUuNCAxNC43LTUuNCAyMC4xIDBsNzcgNzdjMTQuMiAxNC4yIDMzLjEgMjIgNTMuMSAyMmwxNS4xIDAtOTcuMSA5Ny4xYy0zMC4zIDI5LjUtNzkuNSAyOS41LTEwOS44IDBsLTk3LjUtOTcuNCA5LjMgMGMyMCAwIDM4LjktNy44IDUzLjEtMjJsNzYuNy03Ni43em0yMC4xLTczLjZjLTYuNCA1LjUtMTQuNiA1LjYtMjAuMSAwbC03Ni43LTc2LjdjLTE0LjItMTUuMS0zMy4xLTIyLTUzLjEtMjJsLTkuMyAwIDk3LjQtOTcuNGMzMC40LTMwLjMgNzkuNi0zMC4zIDEwOS45IDBsOTcuMiA5Ny4xLTE1LjIgMGMtMjAgMC0zOC45IDcuOC01My4xIDIybC03NyA3N3pNMTEyLjYgMTQyLjdjMTMuOCAwIDI2LjUgNS42IDM3LjEgMTUuNGw3Ni43IDc2LjdjNy4yIDYuMyAxNi42IDEwLjggMjYuMSAxMC44IDkuNCAwIDE4LjgtNC41IDI2LTEwLjhsNzctNzdjOS44LTkuNyAyMy4zLTE1LjMgMzcuMS0xNS4zbDM3LjcgMCA1OC4zIDU4LjNjMzAuMyAzMC4zIDMwLjMgNzkuNSAwIDEwOS44bC01OC4zIDU4LjMtMzcuNyAwYy0xMy44IDAtMjcuMy01LjYtMzcuMS0xNS40bC03Ny03N2MtMTMuOS0xMy45LTM4LjItMTMuOS01Mi4xIC4xbC03Ni43IDc2LjZjLTEwLjYgOS44LTIzLjMgMTUuNC0zNy4xIDE1LjRsLTMxLjggMC01OC01OGMtMzAuMy0zMC4zLTMwLjMtNzkuNSAwLTEwOS44bDU4LTU4LjEgMzEuOCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVUdW1ibHIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXR1bWJsciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0dW1ibHItc3F1YXJlIl0sICJmMTc0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjU2LjggNDE2Yy03NS41IDAtOTEuOS01NS41LTkxLjktODcuOWwwLTkwLTI5LjcgMGMtMy40IDAtNi4yLTIuOC02LjItNi4ybDAtNDIuNWMwLTQuNSAyLjgtOC41IDcuMS0xMCAzOC44LTEzLjcgNTAuOS00Ny41IDUyLjctNzMuMiAuNS02LjkgNC4xLTEwLjIgMTAtMTAuMmw0NC4zIDBjMy40IDAgNi4yIDIuOCA2LjIgNi4ybDAgNzIgNTEuOSAwYzMuNCAwIDYuMiAyLjggNi4yIDYuMmwwIDUxLjFjMCAzLjQtMi44IDYuMi02LjIgNi4ybC01Mi4xIDAgMCA4My4zYzAgMjEuNCAxNC44IDMzLjUgNDIuNSAyMi40IDMtMS4yIDUuNi0yIDgtMS40IDIuMiAuNSAzLjYgMi4xIDQuNiA0LjlMMzE4IDM4Ny4xYzEgMy4yIDIgNi43LS4zIDkuMS04LjUgOS4xLTMxLjIgMTkuOC02MC45IDE5Ljh6Il0KICAgIH07CiAgICBmYVR1bWJsclNxdWFyZSA9IGZhU3F1YXJlVHVtYmxyOwogICAgZmFSZWFjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFjdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDFiIiwgIk00MTguMiAxNzcuMmMtNS40LTEuOC0xMC44LTMuNS0xNi4yLTUuMSAuOS0zLjcgMS43LTcuNCAyLjUtMTEuMSAxMi4zLTU5LjYgNC4yLTEwNy41LTIzLjEtMTIzLjMtMjYuMy0xNS4xLTY5LjIgLjYtMTEyLjYgMzguNC00LjMgMy43LTguNSA3LjYtMTIuNSAxMS41LTIuNy0yLjYtNS41LTUuMi04LjMtNy43LTQ1LjUtNDAuNC05MS4xLTU3LjQtMTE4LjQtNDEuNS0yNi4yIDE1LjItMzQgNjAuMy0yMyAxMTYuNyAxLjEgNS42IDIuMyAxMS4xIDMuNyAxNi43LTYuNCAxLjgtMTIuNyAzLjgtMTguNiA1LjktNTMuNCAxOC41LTkxLjcgNDcuNy05MS43IDc3LjkgMCAzMS4yIDQwLjggNjIuNSA5Ni4zIDgxLjUgNC41IDEuNSA5IDMgMTMuNiA0LjMtMS41IDYtMi44IDExLjktNCAxOC0xMC41IDU1LjUtMi4zIDk5LjUgMjMuOSAxMTQuNiAyNyAxNS42IDcyLjQtLjQgMTE2LjYtMzkuMSAzLjUtMy4xIDctNi4zIDEwLjUtOS43IDQuNCA0LjMgOSA4LjQgMTMuNiAxMi40IDQyLjggMzYuOCA4NS4xIDUxLjcgMTExLjIgMzYuNiAyNy0xNS42IDM1LjgtNjIuOSAyNC40LTEyMC41LS45LTQuNC0xLjktOC45LTMtMTMuNSAzLjItLjkgNi4zLTEuOSA5LjQtMi45IDU3LjctMTkuMSA5OS41LTUwIDk5LjUtODEuNyAwLTMwLjMtMzkuNC01OS43LTkzLjgtNzguNHpNMjgyLjkgOTIuM2MzNy4yLTMyLjQgNzEuOS00NS4xIDg3LjctMzYgMTYuOSA5LjcgMjMuNCA0OC45IDEyLjggMTAwLjQtLjcgMy40LTEuNCA2LjctMi4zIDEwLTIyLjItNS00NC43LTguNi02Ny4zLTEwLjYtMTMtMTguNi0yNy4yLTM2LjQtNDIuNi01My4xIDMuOS0zLjcgNy43LTcuMiAxMS43LTEwLjd6TTE2Ny4yIDMwNy41YzUuMSA4LjcgMTAuMyAxNy40IDE1LjggMjUuOS0xNS42LTEuNy0zMS4xLTQuMi00Ni40LTcuNSA0LjQtMTQuNCA5LjktMjkuMyAxNi4zLTQ0LjUgNC42IDguOCA5LjMgMTcuNSAxNC4zIDI2LjF6TTEzNi45IDE4Ny4yYzE0LjQtMy4yIDI5LjctNS44IDQ1LjYtNy44LTUuMyA4LjMtMTAuNSAxNi44LTE1LjQgMjUuNC00LjkgOC41LTkuNyAxNy4yLTE0LjIgMjYtNi4zLTE0LjktMTEuNi0yOS41LTE2LTQzLjZ6bTI3LjQgNjguOWM2LjYtMTMuOCAxMy44LTI3LjMgMjEuNC00MC42czE1LjgtMjYuMiAyNC40LTM4LjljMTUtMS4xIDMwLjMtMS43IDQ1LjktMS43czMxIC42IDQ1LjkgMS43YzguNSAxMi42IDE2LjYgMjUuNSAyNC4zIDM4LjdzMTQuOSAyNi43IDIxLjcgNDAuNGMtNi43IDEzLjgtMTMuOSAyNy40LTIxLjYgNDAuOC03LjYgMTMuMy0xNS43IDI2LjItMjQuMiAzOS0xNC45IDEuMS0zMC40IDEuNi00Ni4xIDEuNnMtMzAuOS0uNS00NS42LTEuNGMtOC43LTEyLjctMTYuOS0yNS43LTI0LjYtMzlzLTE0LjgtMjYuOC0yMS41LTQwLjZ6bTE4MC42IDUxLjJjNS4xLTguOCA5LjktMTcuNyAxNC42LTI2LjcgNi40IDE0LjUgMTIgMjkuMiAxNi45IDQ0LjMtMTUuNSAzLjUtMzEuMiA2LjItNDcgOCA1LjQtOC40IDEwLjUtMTcgMTUuNS0yNS42em0xNC40LTc2LjVjLTQuNy04LjgtOS41LTE3LjYtMTQuNS0yNi4yLTQuOS04LjUtMTAtMTYuOS0xNS4zLTI1LjIgMTYuMSAyIDMxLjUgNC43IDQ1LjkgOC00LjYgMTQuOC0xMCAyOS4yLTE2LjEgNDMuNHpNMjU2LjIgMTE4LjNjMTAuNSAxMS40IDIwLjQgMjMuNCAyOS42IDM1LjgtMTkuOC0uOS0zOS43LS45LTU5LjUgMCA5LjgtMTIuOSAxOS45LTI0LjkgMjkuOS0zNS44ek0xNDAuMiA1N2MxNi44LTkuOCA1NC4xIDQuMiA5My40IDM5IDIuNSAyLjIgNSA0LjYgNy42IDctMTUuNSAxNi43LTI5LjggMzQuNS00Mi45IDUzLjEtMjIuNiAyLTQ1IDUuNS02Ny4yIDEwLjQtMS4zLTUuMS0yLjQtMTAuMy0zLjUtMTUuNS05LjQtNDguNC0zLjItODQuOSAxMi42LTk0ek0xMTUuNyAzMjAuNmMtNC4yLTEuMi04LjMtMi41LTEyLjQtMy45LTIxLjMtNi43LTQ1LjUtMTcuMy02My0zMS4yLTEwLjEtNy0xNi45LTE3LjgtMTguOC0yOS45IDAtMTguMyAzMS42LTQxLjcgNzcuMi01Ny42IDUuNy0yIDExLjUtMy44IDE3LjMtNS41IDYuOCAyMS43IDE1IDQzIDI0LjUgNjMuNi05LjYgMjAuOS0xNy45IDQyLjUtMjQuOCA2NC41em0xMTYuNiA5OGMtMTYuNSAxNS4xLTM1LjYgMjcuMS01Ni40IDM1LjMtMTEuMSA1LjMtMjMuOSA1LjgtMzUuMyAxLjMtMTUuOS05LjItMjIuNS00NC41LTEzLjUtOTIgMS4xLTUuNiAyLjMtMTEuMiAzLjctMTYuNyAyMi40IDQuOCA0NSA4LjEgNjcuOSA5LjggMTMuMiAxOC43IDI3LjcgMzYuNiA0My4yIDUzLjQtMy4yIDMuMS02LjQgNi4xLTkuNiA4Ljl6bTI0LjUtMjQuM2MtMTAuMi0xMS0yMC40LTIzLjItMzAuMy0zNi4zIDkuNiAuNCAxOS41IC42IDI5LjUgLjYgMTAuMyAwIDIwLjQtLjIgMzAuNC0uNy05LjIgMTIuNy0xOS4xIDI0LjgtMjkuNiAzNi40em0xMzAuNyAzMGMtLjkgMTIuMi02LjkgMjMuNi0xNi41IDMxLjMtMTUuOSA5LjItNDkuOC0yLjgtODYuNC0zNC4yLTQuMi0zLjYtOC40LTcuNS0xMi43LTExLjUgMTUuMy0xNi45IDI5LjQtMzQuOCA0Mi4yLTUzLjYgMjIuOS0xLjkgNDUuNy01LjQgNjguMi0xMC41IDEgNC4xIDEuOSA4LjIgMi43IDEyLjIgNC45IDIxLjYgNS43IDQ0LjEgMi41IDY2LjN6bTE4LjItMTA3LjVjLTIuOCAuOS01LjYgMS44LTguNSAyLjYtNy0yMS44LTE1LjYtNDMuMS0yNS41LTYzLjggOS42LTIwLjQgMTcuNy00MS40IDI0LjUtNjIuOSA1LjIgMS41IDEwLjIgMy4xIDE1IDQuNyA0Ni42IDE2IDc5LjMgMzkuOCA3OS4zIDU4IDAgMTkuNi0zNC45IDQ0LjktODQuOCA2MS40ek0yNTYgMzAxLjhhNDUuOCA0NS44IDAgMSAwIDAtOTEuNiA0NS44IDQ1LjggMCAxIDAgMCA5MS42eiJdCiAgICB9OwogICAgZmFKeGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianhsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2N2IiLCAiTTQxMi4yIDMyTDM1LjggMzJDMTYgMzIgMCA0OCAwIDY3LjhMMCA0NDQuMkMwIDQ2NCAxNiA0ODAgMzUuOCA0ODBsMzc2LjQgMGMxOS44IDAgMzUuOC0xNiAzNS44LTM1LjhsMC0zNzYuNEM0NDggNDggNDMyIDMyIDQxMi4yIDMyek0zNzguNiAzMzMuN2MwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6bTAtMTEzLjljMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlTGlua2VkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxpbmtlZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTUgMTcwLjJsNjYuNSAwIDAgMjEzLjgtNjYuNSAwIDAtMjEzLjh6bTcxLjctNjcuN2EzOC41IDM4LjUgMCAxIDEgLTc3IDAgMzguNSAzOC41IDAgMSAxIDc3IDB6TTMxNy45IDQxNmwwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjItNjYuNCAweiJdCiAgICB9OwogICAgZmFDc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2YTIiLCAiTTM3Ni4zIDMyTDAgMzIgMCA0MDguM2MwIDE5IDcuNiAzNy4yIDIxIDUwLjdzMzEuNyAyMSA1MC43IDIxbDMwNC42IDBjMTkgMCAzNy4yLTcuNiA1MC43LTIxczIxLTMxLjcgMjEtNTAuN2wwLTMwNC42YzAtMTktNy42LTM3LjItMjEtNTAuN3MtMzEuNy0yMS01MC43LTIxek0zMzIuNCA0MzEuNGMtNy43LTguNS0xMS43LTIwLjctMTItMzYuNmwzMS4zIDBjLjIgMTQuMSA1LjEgMjEuMSAxNC44IDIxLjFjNC45IDAgOC40LTEuNiAxMC41LTQuN2MyLTMuMSAzLTggMy0xNC44YzAtNS40LTEuMy05LjktNC0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMzUxLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNSAxMi41YzcuNSA4LjQgMTEuNSAyMC4zIDExLjggMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQgMjcuNC0xMi4zIDM1LjdjLTguMiA4LjMtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTAxIDBjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNC00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTMuOS0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMjUwLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNCAxMi41YzcuNiA4LjQgMTEuNSAyMC4zIDExLjkgMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQuMSAyNy40LTEyLjMgMzUuN3MtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTA1LjYgMS4xYy04LjQtNy43LTEyLjUtMTkuMi0xMi41LTM0LjVsMC03NS40YzAtMTUuMiA0LjQtMjYuNyAxMy4yLTM0LjZjOC45LTcuOCAyMC43LTExLjggMzUuMi0xMS44YzE0LjEgMCAyNS4yIDQgMzMuNCAxMmM4LjMgOCAxMi41IDIwIDEyLjUgMzUuOWwwIDYtMzMuMSAwIDAtNS44YzAtNi4xLTEuMy0xMC43LTQtMTMuNmMtMS4xLTEuNS0yLjYtMi43LTQuMy0zLjVzLTMuNS0xLjItNS40LTEuMWMtNS40IDAtOS4yIDEuOC0xMS40IDUuNmMtMi4zIDUuMi0zLjMgMTAuOC0zIDE2LjRsMCA2NS41YzAgMTMuNyA0LjggMjAuNiAxNC40IDIwLjhjNC41IDAgNy45LTEuNiAxMC4yLTQuOGMyLjUtNC4xIDMuNy04LjggMy41LTEzLjZsMC00LjkgMzMuMSAwIDAgNS4xYzAgMTAuNi0yLjEgMTkuNS02LjIgMjYuNmMtNCA2LjktOS45IDEyLjUtMTcuMSAxNmMtNy43IDMuNy0xNi4xIDUuNS0yNC42IDUuM2MtMTQuMiAwLTI1LjUtMy45LTMzLjgtMTEuNnoiXQogICAgfTsKICAgIGZhSGFzaG5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFzaG5vZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ5OSIsICJNMzUuNyAxNzEuMWMtNDYuOSA0Ni00Ni45IDEyMi45IDAgMTY5LjhMMTcxLjYgNDc2LjhjNDYgNDYuOSAxMjIuOSA0Ni45IDE2OS44IDBMNDc3LjMgMzQwLjljNDYuOS00Ni45IDQ2LjktMTIzLjggMC0xNjkuOEwzNDEuNCAzNS4yYy00Ni45LTQ2LjktMTIzLjgtNDYuOS0xNjkuOCAwTDM1LjcgMTcxLjF6TTE5NiAxOTYuNWE4NC41IDg0LjUgMCAxIDEgMTIwIDExOSA4NC41IDg0LjUgMCAxIDEgLTEyMC0xMTl6Il0KICAgIH07CiAgICBmYVJlZGRpdEFsaWVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdC1hbGllbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjgxIiwgIk0zNzMgMTM4LjZjLTI1LjIgMC00Ni4zLTE3LjUtNTEuOS00MS0zMC42IDQuMy01NC4yIDMwLjctNTQuMiA2Mi40bDAgLjJjNDcuNCAxLjggOTAuNiAxNS4xIDEyNC45IDM2LjMgMTIuNi05LjcgMjguNC0xNS41IDQ1LjUtMTUuNSA0MS4zIDAgNzQuNyAzMy40IDc0LjcgNzQuNyAwIDI5LjgtMTcuNCA1NS41LTQyLjcgNjcuNS0yLjQgODYuOC05NyAxNTYuNi0yMTMuMiAxNTYuNlM0NS41IDQxMC4xIDQzIDMyMy40Yy0yNS40LTExLjktNDMtMzcuNy00My02Ny43IDAtNDEuMyAzMy40LTc0LjcgNzQuNy03NC43IDE3LjIgMCAzMyA1LjggNDUuNyAxNS42IDM0LTIxLjEgNzYuOC0zNC40IDEyMy43LTM2LjRsMC0uM2MwLTQ0LjMgMzMuNy04MC45IDc2LjgtODUuNSA0LjktMjQuMiAyNi4zLTQyLjQgNTIuMS00Mi40IDI5LjQgMCA1My4zIDIzLjkgNTMuMyA1My4zcy0yMy45IDUzLjMtNTMuMyA1My4zek0xNTcuNSAyNTUuM2MtMjAuOSAwLTM4LjkgMjAuOC00MC4yIDQ3LjlzMTcuMSAzOC4xIDM4IDM4LjEgMzYuNi05LjggMzcuOC0zNi45LTE0LjctNDkuMS0zNS43LTQ5LjFsLjEgMHpNMzk1IDMwMy4xYy0xLjItMjcuMS0xOS4yLTQ3LjktNDAuMi00Ny45cy0zNi45IDIyLTM1LjcgNDkuMSAxNi45IDM2LjkgMzcuOCAzNi45IDM5LjMtMTEgMzgtMzguMWwuMSAwem0tNjAuMSA3MC44YzEuNS0zLjYtMS03LjctNC45LTguMS0yMy0yLjMtNDcuOS0zLjYtNzMuOC0zLjZzLTUwLjggMS4zLTczLjggMy42Yy0zLjkgLjQtNi40IDQuNS00LjkgOC4xIDEyLjkgMzAuOCA0My4zIDUyLjQgNzguNyA1Mi40czY1LjgtMjEuNiA3OC43LTUyLjR6Il0KICAgIH07CiAgICBmYVRpa3RvayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWt0b2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YiIsICJNNDQ4LjUgMjA5LjljLTQ0IC4xLTg3LTEzLjYtMTIyLjgtMzkuMmwwIDE3OC43YzAgMzMuMS0xMC4xIDY1LjQtMjkgOTIuNnMtNDUuNiA0OC03Ni42IDU5LjYtNjQuOCAxMy41LTk2LjkgNS4zLTYwLjktMjUuOS04Mi43LTUwLjgtMzUuMy01Ni0zOS04OC45IDIuOS02Ni4xIDE4LjYtOTUuMiA0MC01Mi43IDY5LjYtNjcuNyA2Mi45LTIwLjUgOTUuNy0xNmwwIDg5LjljLTE1LTQuNy0zMS4xLTQuNi00NiAuNHMtMjcuOSAxNC42LTM3IDI3LjMtMTQgMjguMS0xMy45IDQzLjkgNS4yIDMxIDE0LjUgNDMuNyAyMi40IDIyLjEgMzcuNCAyNi45IDMxLjEgNC44IDQ2LS4xIDI4LTE0LjQgMzcuMi0yNy4xIDE0LjItMjguMSAxNC4yLTQzLjhsMC0zNDkuNCA4OCAwYy0uMSA3LjQgLjYgMTQuOSAxLjkgMjIuMiAzLjEgMTYuMyA5LjQgMzEuOSAxOC43IDQ1LjdzMjEuMyAyNS42IDM1LjIgMzQuNmMxOS45IDEzLjEgNDMuMiAyMC4xIDY3IDIwLjFsMCA4Ny40eiJdCiAgICB9OwogICAgZmFXb3JkcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29yZHByZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxOWEiLCAiTTYxLjcgMTY5LjRsMTAxLjUgMjc4Yy03MS0zNC40LTExOS45LTEwNy4yLTExOS45LTE5MS40IDAtMzAuOSA2LjYtNjAuMSAxOC40LTg2LjZ6bTMzNy45IDc1LjljMC0yNi4zLTkuNC00NC41LTE3LjUtNTguNy0xMC44LTE3LjUtMjAuOS0zMi40LTIwLjktNDkuOSAwLTE5LjYgMTQuOC0zNy44IDM1LjctMzcuOCAuOSAwIDEuOCAuMSAyLjggLjItMzcuOS0zNC43LTg4LjMtNTUuOS0xNDMuNy01NS45LTc0LjMgMC0xMzkuNyAzOC4xLTE3Ny44IDk1LjkgNSAuMiA5LjcgLjMgMTMuNyAuMyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ny41IDIzMC40IDQ2LjYtMTM5LjYtMzMuMS05MC44Yy0xMS41LS43LTIyLjMtMi0yMi4zLTItMTEuNS0uNy0xMC4xLTE4LjIgMS4zLTE3LjUgMCAwIDM1LjEgMi43IDU2IDIuNyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ni45IDIyOC43IDIxLjItNzAuOWM5LTI5LjQgMTYtNTAuNSAxNi02OC43ek0yNTkuNyAyNzQuNkwxOTUuOSA0NjAuMWMxOS4xIDUuNiAzOS4yIDguNyA2MC4xIDguNyAyNC44IDAgNDguNS00LjMgNzAuNi0xMi4xLS42LS45LTEuMS0xLjktMS41LTIuOUwyNTkuNyAyNzQuNnptMTgzLTEyMC43Yy45IDYuOCAxLjQgMTQgMS40IDIxLjkgMCAyMS42LTQgNDUuOC0xNi4yIDc2LjJsLTY1IDE4Ny45YzYzLjMtMzYuOSAxMDUuOC0xMDUuNCAxMDUuOC0xODMuOSAwLTM3LTkuNC03MS44LTI2LTEwMi4xek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODQuNiAwYTIzNi42IDIzNi42IDAgMSAwIC00NzMuMiAwIDIzNi42IDIzNi42IDAgMSAwIDQ3My4yIDB6Il0KICAgIH07CiAgICBmYUlkZWFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImlkZWFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMTMiLCAiTTkzLjggMTY1LjVhNDkuMSA0OS4xIDAgMSAwIDAgOTguMSA0OS4xIDQ5LjEgMCAxIDAgMC05OC4xek01NC4zIDQyNS44bDc4LjkgMCAwLTE0MC41LTc4LjkgMCAwIDE0MC41ek0yMDUuOCAyMTQuMmMwLTIwLTEwLTIyLjUtMTguNy0yMi41bC0xNCAwIDAgNDUuOCAxNCAwYzkuNyAwIDE4LjctMi44IDE4LjctMjMuM3ptMjAxLjcgNDZsMC05MS4zIDIyLjggMCAwIDY4LjYgMzMuNyAwQzQ1NC42IDExMy4xIDM1Ni44IDg2LjIgMjY3LjggODYuMmwtOTQuOCAwIDAgODIuOCAxNCAwYzI1LjYgMCA0MS41IDE3LjQgNDEuNSA0NS4zIDAgMjguOC0xNS41IDQ2LTQxLjUgNDZsLTE0IDAgMCAxNjUuNiA5NC44IDBjMTQ0LjYgMCAxOTQuOS02Ny4yIDE5Ni43LTE2NS42bC01Ny4xIDB6bS0xMDkuOCAwbC01Ni4yIDAgMC05MS4yIDU0LjQgMCAwIDIyLjctMzEuNyAwIDAgMTAuNiAzMCAwIDAgMjIuNy0zMCAwIDAgMTIuNSAzMy41IDAgMCAyMi43em03NC43IDBsLTUuMi0xNy43LTI5LjcgMC01LjIgMTcuNy0yMy43IDAgMjcuNS05MS4zIDMyLjMgMCAyNy41IDkxLjMtMjMuNyAwek0yNjcuOCAzMkwuMSAzMiAuMSA0ODAgMjY3LjggNDgwYzE2MS44IDAgMjUxLTc5LjcgMjUxLTIyNC41IDAtODMuNS0zMi42LTIyMy41LTI1MS0yMjMuNXptMCA0MjYuOWwtMjQ2LjYgMCAwLTQwNS45IDI0Ni42IDBjMTQyLjEgMCAyMjkuOSA2NC42IDIyOS45IDIwMi40IDAgMTM0LjEtODEgMjAzLjQtMjI5LjkgMjAzLjR6bTgzLjktMjY0LjlsLTcuNSAyNS44IDE2LjQgMC03LjUtMjUuOC0xLjQgMHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyUHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1wcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE3IiwgIk0yMDUuMyAxNzQuNmMwIDIxLjEtMTQuMiAzOC4xLTMxLjcgMzguMS03LjEgMC0xMi44LTEuMi0xNy4yLTMuN2wwLTY4YzQuNC0yLjcgMTAuMS00LjIgMTcuMi00LjIgMTcuNSAwIDMxLjcgMTYuOSAzMS43IDM3Ljh6bTUyLjYgNjdjLTcuMSAwLTEyLjggMS41LTE3LjIgNC4ybDAgNjhjNC40IDIuNSAxMC4xIDMuNyAxNy4yIDMuNyAxNy40IDAgMzEuNy0xNi45IDMxLjctMzcuOCAwLTIxLjEtMTQuMy0zOC4xLTMxLjctMzguMXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg1IDI1NS4xYzQxIDAgNzQuMi0zNS42IDc0LjItNzkuNlMyMjYgOTUuOSAxODUgOTUuOWMtMTIgMC0yNC4xIDMuMi0zNC42IDguOGwtNDUuNyAwIDAgMjA2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4xIDE4LjEgNC44IDI4LjUgNC44em0xNTguNCAyNS4zYzAtNDQtMzMuMi03OS42LTczLjktNzkuNi0zLjIgMC02LjQgLjItOS42IC43LTMuNyAxMi41LTEwLjEgMjMuOC0xOS4yIDMzLjQtMTMuOCAxNS0zMi4yIDIzLjgtNTEuOCAyNC44bDAgMTU2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4yIDE4LjIgNC43IDI4LjcgNC43IDQwLjggMCA3NC0zNS42IDc0LTc5LjZ6Il0KICAgIH07CiAgICBmYVVzc3VubmFoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzc3VubmFoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDciLCAiTTQ5Ni45IDI2OC4xYzAgNjMuOS0yNS40IDEyNS4yLTcwLjYgMTcwLjNTMzE5LjkgNTA5IDI1NiA1MDkgMTMwLjggNDgzLjUgODUuNyA0MzguNCAxNS4xIDMzMS45IDE1LjEgMjY4YzAtNjMuOSAyNS40LTEyNS4yIDcwLjYtMTcwLjRTMTkyLjIgMjcuMSAyNTYuMSAyNy4xIDM4MS4zIDUyLjQgNDI2LjUgOTcuNiA0OTcgMjA0LjEgNDk3IDI2OGwtLjEgLjF6TTM5LjUgMjY4Yy0uNiAyOC44IDQuNSA1Ny41IDE1LjEgODQuM3MyNi40IDUxLjIgNDYuNiA3MS44IDQ0LjIgMzcgNzAuOCA0OC4xIDU1LjEgMTYuOSA4My45IDE2LjkgNTcuNC01LjggODMuOS0xNi45IDUwLjYtMjcuNSA3MC44LTQ4LjEgMzYtNDUgNDYuNi03MS44IDE1LjctNTUuNSAxNS4xLTg0LjNjLjYtMjguOC00LjUtNTcuNS0xNS4xLTg0LjNzLTI2LjQtNTEuMi00Ni42LTcxLjgtNDQuMi0zNy03MC44LTQ4LjEtNTUuMS0xNi45LTgzLjktMTYuOS01Ny40IDUuOC04My45IDE2LjktNTAuNiAyNy41LTcwLjggNDguMS0zNiA0NS00Ni42IDcxLjgtMTUuNyA1NS41LTE1LjEgODQuM3ptMzg1LjkgNjMuM2MtMTIuNyAwLTIxLjYtMS45LTI2LjctNS45LTUuNS00LjMtOC4yLTEyLjMtOC4yLTIzLjhsMC05Ni41YzAtNi41LTUuMi0yMC4yLTE1LjctNDEuMiA3IDAgMTctOS4xIDMwLTI3LjJsMCAxNDcuOGMwIDExIDIuNCAxOS40IDcgMjUuMyAzLjcgNC43IDEwLjEgOC45IDE5IDEyLjYgMS4yIC40IDIuNiAuOSA0LjEgMS40IDIuOSAuOSA2LjMgMi4xIDEwLjMgMy41LTEuOCAyLjctOC4zIDQtMTkuOSA0bC4xIDB6bS0yMTkgMGMtMS4zIDIuNC0zLjYgNS41LTYuOCA5LjRsLTE4LjUgMjIuNWMtMS02LjEtNC0xMy05LjMtMjAuNnMtOS43LTExLjQtMTMuNC0xMS40bC04OS44IDBjMy4zLTUuMyA0LjktOC44IDQuOS0xMC44cy0uOC01LjMtMi40LTkuN2MtMS41LTQuNC0yLjQtOC41LTIuNC0xMi40IDAtNy40IDIuMS0xMy45IDYuMy0xOS4zbDIwLTI1LjYtNy4xLTE3LjcgMTYuMS0xOS44IDYuNyAxNi44IDgtMTAuM2MtMS44IDYuNC0yLjYgMTIuMy0yLjYgMTcuNyAwIDQuMiAyLjggMTMuMyA4LjMgMjcuM2wxNi4yIDQwLjcgMTcuNyAwYzIuOCAuNCA3LjcgNSAxNC42IDEzLjkgMS44IDIuNCA0LjMgNS44IDcuNyAxMC4yIDEuNCAxLjkgMi45IDMuOSA0LjYgNi4xIDEuMy0yLjMgMi00LjYgMi03LjEgMC0yLTEuMy02LjYtNC0xMy40TDE3OCAzMDQuMWMtNC0xMC42LTYuMS0xNy43LTYuMS0yMS4zIDAtNi4zIDEuOS0xMi4zIDUuOC0xNy45IC41LS42IDEtMS4zIDEuNS0xLjkgNC40LTUuNiA4LjgtMTEuMSAxMy4zLTE2LjUtMS4xIDQuNi0xLjcgOC43LTEuNyAxMiAwIDMuNyAxLjcgOS45IDUuMSAxOC44bDcuOSAyMC40YzEuOSA0LjcgMyA4LjIgMy43IDEwLjNsMjUuOSAwLS45LTIuNmMtMS40LTMuOS00LTctNy43LTkuM2wxNS42LTIwLjEgMTIuMyAzMiAxMy40IDAtNi4xLTE1LjhjLTEuNS0zLjktNC03LTcuNy05LjNsMTUuNy0yMC4xIDE3LjMgNDUuMiAxMy40IDAtMTEuNC0yOS40Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjYtMjAgMjIuNCA1OC43IDI2LjIgMGMxLjUgMCAzLTEuMSA0LjUtMy4xczIuMi00LjEgMi4yLTYuM2wwLTkzLjVjMC02LjUtNC41LTIwLjMtMTMuNy00MS4yIDUuNCAwIDE0LjEtOS4xIDI2LjItMjcuMmwwIDE2My41YzAgNy4yIC42IDEyIDEuNyAxNC42IDEuNiAzLjQgNS4zIDYuMiAxMS4xIDguMi0zLjkgNS42LTguNyA4LjUtMTQuNSA4LjVsLTE1NC44IDAtLjEtLjJ6bS05OC00NGMtMi43LTYuNy00LTExLjctNC0xNS0uNiAxLjItMi40IDMuNy01LjQgNy42LTEuNCAxLjktMi4yIDMuNy0yLjIgNS4zIDAgMi42IC44IDUuNyAyLjIgOS4zbDUuNiAxMy45YzUgMCA5IDAgMTEuOS0uMWwtOC4yLTIwLjkgLjEtLjF6bTEzLjUtNzIuNGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem0tMjcuNiAwYy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6bTg3IDI3LjVjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHoiXQogICAgfTsKICAgIGZhRm9ydEF3ZXNvbWVBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydC1hd2Vzb21lLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2EzIiwgIk0yMDggMjM3LjRsLTIyLjIgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgNTEuN2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMjIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTUxLjdjMC0yLjEtMS42LTMuNy0zLjctMy43em0xMTguMiAwbC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43Yy0uMS0yLjEtMS43LTMuNy0zLjctMy43em0xMzItMTI1LjFjLTIuMy0zLjItNC42LTYuNC03LjEtOS41LTkuOC0xMi41LTIwLjgtMjQtMzIuOC0zNC40LTQuNS0zLjktOS4xLTcuNi0xMy45LTExLjItMS42LTEuMi0zLjItMi4zLTQuOC0zLjUtMjcuNi0xOS42LTU5LjMtMzMuNy05My42LTQwLjctMTYuMi0zLjMtMzIuOS01LTUwLTVzLTMzLjkgMS43LTUwIDVjLTM0LjMgNy4xLTY2IDIxLjItOTMuMyA0MC44LTEuNiAxLjEtMy4yIDIuMy00LjggMy41LTQuOCAzLjYtOS40IDcuMy0xMy45IDExLjItMyAyLjYtNS45IDUuMy04LjggOHMtNS43IDUuNS04LjQgOC40Yy01LjUgNS43LTEwLjcgMTEuOC0xNS42IDE4LTIuNCAzLjEtNC44IDYuMy03LjEgOS41LTI4LjkgNDAuNi00NS44IDkwLjEtNDUuOCAxNDMuNiAwIDIgLjEgNCAuMSA2IC4xIC43IC4xIDEuMyAuMSAyIC4xIDEuMyAuMSAyLjcgLjIgNCAwIC44IC4xIDEuNSAuMSAyLjMgMCAxLjMgLjEgMi41IC4yIDMuNyAuMSAuOCAuMSAxLjYgLjIgMi40IC4xIDEuMSAuMiAyLjMgLjMgMy41IDAgLjggLjEgMS42IC4yIDIuNCAuMSAxLjIgLjMgMi40IC40IDMuNiAuMSAuOCAuMiAxLjUgLjMgMi4zIC4xIDEuMyAuMyAyLjYgLjUgMy45IC4xIC42IC4yIDEuMyAuMyAxLjlsLjkgNS43Yy4xIC42IC4yIDEuMSAuMyAxLjcgLjMgMS4zIC41IDIuNyAuOCA0IC4yIC44IC4zIDEuNiAuNSAyLjQgLjIgMSAuNSAyLjEgLjcgMy4yIC4yIC45IC40IDEuNyAuNiAyLjYgLjIgMSAuNCAyIC43IDMgLjIgLjkgLjUgMS44IC43IDIuNyAuMyAxIC41IDEuOSAuOCAyLjkgLjMgLjkgLjUgMS44IC44IDIuNyAuMiAuOSAuNSAxLjkgLjggMi44cy41IDEuOCAuOCAyLjdjLjMgMSAuNiAxLjkgLjkgMi44IC42IDEuNiAxLjEgMy4zIDEuNyA0LjkgLjQgMSAuNyAxLjkgMSAyLjggLjMgMSAuNyAyIDEuMSAzIC4zIC44IC42IDEuNSAuOSAyLjNsMS4yIDNjLjMgLjcgLjYgMS41IC45IDIuMiAuNCAxIC45IDIgMS4zIDNsLjkgMi4xYy41IDEgLjkgMiAxLjQgMyAuMyAuNyAuNiAxLjMgLjkgMiAuNSAxIDEgMi4xIDEuNSAzLjEgLjIgLjYgLjUgMS4xIC44IDEuNyAuNiAxLjEgMS4xIDIuMiAxLjcgMy4zIC4xIC4yIC4yIC4zIC4zIC41IDIuMiA0LjEgNC40IDguMiA2LjggMTIuMiAuMiAuNCAuNSAuOCAuNyAxLjIgLjcgMS4xIDEuMyAyLjIgMiAzLjMgLjMgLjUgLjYgLjkgLjkgMS40IC42IDEuMSAxLjMgMi4xIDIgMy4yIC4zIC41IC42IC45IC45IDEuNCAuNyAxLjEgMS40IDIuMSAyLjEgMy4yIC4yIC40IC41IC44IC44IDEuMiAuNyAxLjEgMS41IDIuMiAyLjMgMy4zIC4yIC4yIC4zIC41IC41IC43IDM3LjUgNTEuNyA5NC40IDg4LjUgMTYwIDk5LjQgLjkgLjEgMS43IC4zIDIuNiAuNCAxIC4yIDIuMSAuNCAzLjEgLjVzMS45IC4zIDIuOCAuNGMxIC4yIDIgLjMgMyAuNCAuOSAuMSAxLjkgLjIgMi45IC4zczEuOSAuMiAyLjkgLjMgMi4xIC4yIDMuMSAuM2MuOSAuMSAxLjggLjEgMi43IC4yIDEuMSAuMSAyLjMgLjEgMy40IC4yIC44IDAgMS43IC4xIDIuNSAuMSAxLjMgMCAyLjYgLjEgMy45IC4xIC43IC4xIDEuNCAuMSAyLjEgLjEgMiAuMSA0IC4xIDYgLjFzNC0uMSA2LS4xYy43IDAgMS40LS4xIDIuMS0uMSAxLjMgMCAyLjYgMCAzLjktLjEgLjggMCAxLjctLjEgMi41LS4xIDEuMS0uMSAyLjMtLjEgMy40LS4yIC45IDAgMS44LS4xIDIuNy0uMiAxLS4xIDIuMS0uMiAzLjEtLjNzMS45LS4yIDIuOS0uM2MuOS0uMSAxLjktLjIgMi45LS4zczItLjMgMy0uNCAxLjktLjMgMi44LS40YzEtLjIgMi4xLS4zIDMuMS0uNSAuOS0uMSAxLjctLjMgMi42LS40IDY1LjYtMTEgMTIyLjUtNDcuNyAxNjAuMS0xMDIuNCAuMi0uMiAuMy0uNSAuNS0uNyAuOC0xLjEgMS41LTIuMiAyLjMtMy4zIC4yLS40IC41LS44IC44LTEuMiAuNy0xLjEgMS40LTIuMSAyLjEtMy4yIC4zLS41IC42LS45IC45LTEuNCAuNi0xLjEgMS4zLTIuMSAyLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjctMS4xIDEuMy0yLjIgMi0zLjMgLjItLjQgLjUtLjggLjctMS4yIDIuNC00IDQuNi04LjEgNi44LTEyLjIgLjEtLjIgLjItLjMgLjMtLjUgLjYtMS4xIDEuMS0yLjIgMS43LTMuMyAuMi0uNiAuNS0xLjEgLjgtMS43IC41LTEgMS0yLjEgMS41LTMuMSAuMy0uNyAuNi0xLjMgLjktMiAuNS0xIDEtMiAxLjQtM2wuOS0yLjFjLjUtMSAuOS0yIDEuMy0zIC4zLS43IC42LTEuNSAuOS0yLjJsMS4yLTNjLjMtLjggLjYtMS41IC45LTIuMyAuNC0xIC43LTIgMS4xLTNzLjctMS45IDEtMi44Yy42LTEuNiAxLjItMy4zIDEuNy00LjkgLjMtMSAuNi0xLjkgLjktMi44cy41LTEuOCAuOC0yLjdjLjItLjkgLjUtMS45IC44LTIuOHMuNi0xLjggLjgtMi43Yy4zLTEgLjUtMS45IC44LTIuOSAuMi0uOSAuNS0xLjggLjctMi43IC4yLTEgLjUtMiAuNy0zIC4yLS45IC40LTEuNyAuNi0yLjYgLjItMSAuNS0yLjEgLjctMy4yIC4yLS44IC4zLTEuNiAuNS0yLjQgLjMtMS4zIC42LTIuNyAuOC00IC4xLS42IC4yLTEuMSAuMy0xLjdsLjktNS43Yy4xLS42IC4yLTEuMyAuMy0xLjkgLjEtMS4zIC4zLTIuNiAuNS0zLjkgLjEtLjggLjItMS41IC4zLTIuMyAuMS0xLjIgLjMtMi40IC40LTMuNiAwLS44IC4xLTEuNiAuMi0yLjQgLjEtMS4xIC4yLTIuMyAuMy0zLjUgLjEtLjggLjEtMS42IC4yLTIuNCAuMSAxLjcgLjEgLjUgLjItLjcgMC0uOCAuMS0xLjUgLjEtMi4zIC4xLTEuMyAuMi0yLjcgLjItNCAuMS0uNyAuMS0xLjMgLjEtMiAuMS0yIC4xLTQgLjEtNiAwLTUzLjUtMTYuOS0xMDMtNDUuOC0xNDMuN3pNNDQ4IDM3MS41Yy05LjQgMTUuNS0yMC42IDI5LjktMzMuNiA0Mi45LTIwLjYgMjAuNi00NC41IDM2LjctNzEuMiA0OC0xMy45IDUuOC0yOC4yIDEwLjMtNDIuOSAxMy4ybDAtNzUuOGMwLTU4LjYtODguNi01OC42LTg4LjYgMGwwIDc1LjhjLTE0LjctMi45LTI5LTcuMy00Mi45LTEzLjItMjYuNy0xMS4zLTUwLjYtMjcuNC03MS4yLTQ4LTEzLTEzLTI0LjItMjcuNC0zMy42LTQyLjlsMC03MS4zYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOCAyOS42IDAgMC0xNDRjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjEgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC00LjggNi41LTMuNyA5LjUtMy43bDAtOTAuMmMtNC40LTItNy40LTYuNy03LjQtMTEuNSAwLTE2LjggMjUuNC0xNi44IDI1LjQgMCAwIDQuOC0zIDkuNC03LjQgMTEuNWwwIDMuOWM2LjMtMS40IDEyLjctMi4zIDE5LjItMi4zIDkuNCAwIDE4LjQgMy41IDI2LjMgMy41IDcuMiAwIDE1LjItMy41IDE5LjQtMy41IDIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDQ4LjRjMCA1LjYtMTguNyA2LjUtMjIuNCA2LjUtOC42IDAtMTYuNi0zLjUtMjUuNC0zLjUtNyAwLTE0LjEgMS4yLTIwLjggMi44bDAgMzAuN2MzIDAgOS41LTEuMSA5LjUgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMTQ0IDI5LjUgMCAwLTI1LjhjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA3MS4zeiJdCiAgICB9OwogICAgZmFCdXJvbW9iZWxleHBlcnRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1cm9tb2JlbGV4cGVydGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3ZiIsICJNMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTE2MCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTMyMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMTkybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek00NDAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnpNMCAzNTJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il0KICAgIH07CiAgICBmYUJpbGliaWxpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpbGliaWxpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzZDkiLCAiTTQ4OC42IDEwNC4xYzE2LjcgMTguMSAyNC40IDM5LjcgMjMuMyA2NS43bDAgMjAyLjRjLS40IDI2LjQtOS4yIDQ4LjEtMjYuNSA2NS4xLTE3LjIgMTctMzkuMSAyNS45LTY1LjUgMjYuN0w5MiA0NjRjLTI2LjQtLjgtNDguMi05LjgtNjUuMy0yNy4yLTE3LjEtMTcuNC0yNi00MC4zLTI2LjctNjguNkwwIDE2OS44Yy44LTI2IDkuNy00Ny42IDI2LjctNjUuNyAxNy4xLTE2LjMgMzguOC0yNS4zIDY1LjMtMjYuMWwyOS40IDAtMjUuNC0yNS44Yy01LjctNS43LTguNi0xMy04LjYtMjEuOHMyLjktMTYuMSA4LjYtMjEuOCAxMy04LjYgMjEuOS04LjYgMTYuMSAyLjkgMjEuOSA4LjZsNzMuMyA2OS40IDg4IDAgNzQuNS02OS40QzM4MS43IDIuOSAzODkuMiAwIDM5OCAwczE2LjEgMi45IDIxLjkgOC42YzUuNyA1LjcgOC42IDEzIDguNiAyMS44cy0yLjkgMTYuMS04LjYgMjEuOEwzOTQuNiA3OCA0MjMuOSA3OGMyNi40IC44IDQ4IDkuOCA2NC43IDI2LjF6bS0zOC44IDY5LjdjLS40LTkuNi0zLjctMTcuNC0xMC43LTIzLjUtNS4yLTYuMS0xNC05LjQtMjIuNy05LjhsLTMyMC40IDBjLTkuNiAuNC0xNy40IDMuNy0yMy42IDkuOC02LjEgNi4xLTkuNCAxMy45LTkuOCAyMy41bDAgMTk0LjRjMCA5LjIgMy4zIDE3IDkuOCAyMy41czE0LjQgOS44IDIzLjYgOS44bDMyMC40IDBjOS4yIDAgMTctMy4zIDIzLjMtOS44czkuNy0xNC4zIDEwLjEtMjMuNWwwLTE5NC40ek0xODUuNSAyMTYuNWM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMi02LjIgNi4zLTE0IDkuNS0yMy42IDkuNXMtMTcuNS0zLjItMjMuNi05LjUtOS40LTE0LTkuOC0yMy4ybDAtMzMuM2MuNC05LjEgMy44LTE2LjkgMTAuMS0yMy4yczEzLjItOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEwem0xOTEuNSAwYzYuMyA2LjMgOS43IDE0LjEgMTAuMSAyMy4ybDAgMzMuM2MtLjQgOS4yLTMuNyAxNi45LTkuOCAyMy4ycy0xNCA5LjUtMjMuNiA5LjUtMTcuNC0zLjItMjMuNi05LjVjLTctNi4zLTkuNC0xNC05LjctMjMuMmwwLTMzLjNjLjMtOS4xIDMuNy0xNi45IDEwLTIzLjJzMTQuMS05LjYgMjMuMy0xMGM5LjIgLjQgMTcgMy43IDIzLjMgMTB6Il0KICAgIH07CiAgICBmYU5lb3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmVvcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNjEyIiwgIk0zODMuOCA1MTJsLTk1LjEgMC0xMDguMi0xNTQuNSAwIDkxLjEtODYuNCA2My40LTk3LjcgMCAwLTQ4Mi4yIDQwLjUtMjkuOCAxMDggMCAxMjMuNyAxNzYuMSAwLTExMi43IDg2LjQtNjMuNCA5Ny43IDAgMCA0NjEuNS02OC45IDUwLjV6TTcuMiAzNS4zbDAgNDYwLjcgNzItNTIuOSAwLTI0OS4xIDIxNS41IDMwNy42IDg0LjggMCA1Mi40LTM4LjItNzguMyAwLTMxNi4xLTQ1MC41LTMwLjIgMjIuM3pNODkuNyA1MDEuOWw4MC01OC44IDAtMTAxLTc5LjgtMTE0LjQgMCAyMjAuOS03Mi42IDUzLjMgNzIuMyAwIDAgMHpNNDkgMTAuOGwzMTAuNiA0NDIuNiA4Mi40IDAgMC00NDIuNi03OS44IDAgMCAzMTcuNi0yMjIuOS0zMTcuNi05MC4zIDB6TTI3OS40IDE5MS42bDcyIDEwMi44IDAtMjc4LjUtNzIgNTMgMCAxMjIuN3oiXQogICAgfTsKICAgIGZhRGV2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRldiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNmNjIiwgIk0xMjAuMSAyMDguM2MtMy45LTIuOS03LjgtNC4zLTExLjYtNC4zbC0xNy40IDAgMCAxMDQuNSAxNy40IDBjMy45IDAgNy44LTEuNCAxMS42LTQuM3M1LjgtNy4zIDUuOC0xMy4xbDAtNjkuN2MwLTUuOC0yLTEwLjItNS44LTEzLjF6TTQwNC4xIDMyTDQzLjkgMzJDMTkuNyAzMiAuMSA1MS42IDAgNzUuOEwwIDQzNi4yQy4xIDQ2MC40IDE5LjcgNDgwIDQzLjkgNDgwbDM2MC4yIDBjMjQuMiAwIDQzLjgtMTkuNiA0My45LTQzLjhsMC0zNjAuNEM0NDcuOSA1MS42IDQyOC4zIDMyIDQwNC4xIDMyek0xNTQuMiAyOTEuMmMwIDE4LjgtMTEuNiA0Ny4zLTQ4LjQgNDcuM2wtNDYuNCAwIDAtMTY1LjUgNDcuNCAwYzM1LjQgMCA0Ny40IDI4LjUgNDcuNCA0Ny4zbDAgNzAuOXptMTAwLjctODguN2wtNTMuMyAwIDAgMzguNCAzMi42IDAgMCAyOS42LTMyLjYgMCAwIDM4LjQgNTMuMyAwIDAgMjkuNi02Mi4yIDBjLTExLjIgLjMtMjAuNC04LjUtMjAuNy0xOS43bDAtMTI1LjFjLS4zLTExLjEgOC42LTIwLjQgMTkuNy0yMC43bDYzLjIgMCAwIDI5LjV6TTM1OC41IDMxNy44Yy0xMy4yIDMwLjctMzYuOCAyNC42LTQ3LjQgMGwtMzguNS0xNDQuOCAzMi42IDAgMjkuNyAxMTMuNyAyOS42LTExMy43IDMyLjYgMC0zOC41IDE0NC44eiJdCiAgICB9OwogICAgZmFIb3RqYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaG90amFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYjEiLCAiTTM2MS44IDBjMCAxMzEuNi04MC43IDE3Ni44LTE0MC4yIDIwOS40LS42IC4zLTEuMSAuNi0xLjYgLjktNTMuOCAzMC4yLTg4LjcgNDkuOC04OS42IDEyMmwtOTguMSAwYzAtMTMxLjUgODAuNy0xNzYuNyAxNDAuMi0yMDkuMyA1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OSAwek0zMDEuMyAzMDIuNmM1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OCAwYzAgMTMxLjYtODAuNyAxNzYuNy0xNDAuMiAyMDkuNC01NC44IDI5LjgtOTAuMyA1MC05MC4zIDEyM2wtOTggMGMwLTEzMS42IDgwLjctMTc2LjggMTQwLjItMjA5LjR6Il0KICAgIH07CiAgICBmYURvY2h1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkb2NodWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5NCIsICJNNDEzLjkgMTYwTDI3MiAxNjAgMjcyIDE5LjYgNDEzLjkgMTYwek0zMjAgMTkybDAgMTMwYzAgNjYuOC0zNi41IDEwMC4xLTExMy4zIDEwMC4xbC05NC43IDAgMC0zMzcuMyA5NC43IDBjMTIgMCAyMy4xIC44IDMzLjEgMi41bDAtODRDMjI4LjkgMS4xIDIxNy40IDAgMjA1LjIgMEwxNiAwIDE2IDUxMiAyMDUuMiA1MTJDMzQ1LjcgNTEyIDQxNiA0NDcuNCA0MTYgMzE4LjFsMC0xMjYuMS05NiAweiJdCiAgICB9OwogICAgZmFWaW1lbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW1lbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDBhIiwgIk00MDMuMiAzMkw0NC44IDMyQzIwLjEgMzIgMCA1Mi4xIDAgNzYuOEwwIDQzNS4yQzAgNDU5LjkgMjAuMSA0ODAgNDQuOCA0ODBsMzU4LjQgMGMyNC43IDAgNDQuOC0yMC4xIDQ0LjgtNDQuOGwwLTM1OC40QzQ0OCA1Mi4xIDQyNy45IDMyIDQwMy4yIDMyek0zNzcgMTgwLjhjLTEuNCAzMS41LTIzLjQgNzQuNy02NiAxMjkuNC00NCA1Ny4yLTgxLjMgODUuOC0xMTEuNyA4NS44LTE4LjkgMC0zNC44LTE3LjQtNDcuOS01Mi4zLTI1LjUtOTMuMy0zNi40LTE0OC01Ny40LTE0OC0yLjQgMC0xMC45IDUuMS0yNS40IDE1LjJMNTMuNCAxOTEuM2MzNy4zLTMyLjggNzIuOS02OS4yIDk1LjItNzEuMiAyNS4yLTIuNCA0MC43IDE0LjggNDYuNSA1MS43IDIwLjcgMTMxLjIgMjkuOSAxNTEgNjcuNiA5MS42IDEzLjUtMjEuNCAyMC44LTM3LjcgMjEuOC00OC45IDMuNS0zMy4yLTI1LjktMzAuOS00NS44LTIyLjQgMTUuOS01Mi4xIDQ2LjMtNzcuNCA5MS4yLTc2IDMzLjMgLjkgNDkgMjIuNSA0Ny4xIDY0Ljd6Il0KICAgIH07CiAgICBmYU1heGNkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXhjZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNiIsICJNNDYxLjEgNDQyLjdsLTk3LjQgMCA1MS45LTI0Mi43YzIuMy0xMC4yIC45LTE5LjUtNC40LTI1LjctNS02LjEtMTMuNy05LjYtMjQuMi05LjZsLTQ5LjMgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtODMuNCAwLTU5LjUgMjc4LTk3LjQgMCA1OS41LTI3OC00NC42LTk1LjQgMzcyLjEgMGMzOS40IDAgNzUuMyAxNi4zIDk4LjMgNDQuOSAyMy4zIDI4LjYgMzEuOCA2Ny40IDIzLjYgMTA1LjlMNDYxLjEgNDQyLjd6Il0KICAgIH07CiAgICBmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mb250LWF3ZXNvbWUtc3Ryb2tlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZvbnQtYXdlc29tZS1hbHQiXSwgImYzNWMiLCAiTTY0IDY0QzQ2LjMgNjQgMzIgNzguMyAzMiA5NmwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCA2NHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE1NCA1OGMwIDkuMy00LjggMTcuNC0xMi4xIDIybDE4OC45IDBjNy4zIDAgMTMuMiA1LjkgMTMuMiAxMy4yIDAgMS44LS40IDMuNy0xLjEgNS40TDMxMiAyNjQgMzQyLjkgMzMzLjRjLjggMS43IDEuMSAzLjUgMS4xIDUuNCAwIDcuMy01LjkgMTMuMi0xMy4yIDEzLjJsLTE4Ni44IDAgMCAzMi0zMiAwIDAtMjA5LjVjLTYuMS00LjgtMTAtMTIuMi0xMC0yMC41IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lQWx0ID0gZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZTsKICAgIGZhU3BlYWthcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGVha2FwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjMiLCAiTTY0LjQgMzkxLjhDLTE1IDMwMy42LTcuNiAxNjcuNCA4MS4xIDg3LjZzMjI0LjgtNzMgMzA0LjIgMTUuMiA3MiAyMjQuNC0xNi42IDMwNC4xYy0xOC43IDE2LjkgNjQgNDMuMSA0MiA1Mi4zLTgyLjEgMzQuMi0yNTMuOSAzNS0zNDYuMi02Ny41bDAgMHpNMjc3LjcgMTgwLjJsMzguNS00MC45Yy05LjYtOC45LTMyLTI2LjgtNzYuMi0yNy42LTUyLjMtLjktOTUuOSAyOC4zLTk2LjggODAtLjIgMTEuMyAuMyAzNi43IDI5LjQgNTQuOCAzNC41IDIxLjQgODYuNSAyMS41IDg2IDUyLjMtLjQgMjEuMy0yNi40IDI1LjgtMzguNiAyNS42LTMgMC0zMC4yLS41LTQ3LjYtMjQuNmwtNDAgNDIuNmMyOC4yIDI3IDU5IDMyLjYgODMuNSAzMyAxMC4yIC4yIDk2LjQgLjMgOTcuOC04MSAuMy0xNS44LTIuMS0zOS43LTI4LjktNTYuNi0zNC40LTIxLjYtODUtMTkuNC04NC40LTQ5LjcgLjQtMjMuMyAzMS0yNS40IDM3LjUtMjUuMyAuNCAwIDI2LjYgLjMgMzkuNiAxNy40bDAgMHoiXQogICAgfTsKICAgIGZhRmFudGFzeUZsaWdodEdhbWVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhbnRhc3ktZmxpZ2h0LWdhbWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZGMiLCAiTTI1NiAzMi45TDMyLjkgMjU2IDI1NiA0NzkuMSA0NzkuMSAyNTYgMjU2IDMyLjl6TTg4LjMgMjU1LjhjMi0yIDExLjktMTIuMyA5Ni41LTk3LjUgNDEuNC00MS44IDg2LjItNDMuOCAxMTkuOC0xOC43IDI0LjYgMTguNCA2Mi4xIDU4LjkgNjIuMSA1OSAuNyAuNyAxLjEgMi45IC42IDMuNC0xMS4zIDExLjgtMjIuNyAyMy41LTMzLjUgMzQuNy0zNC4yLTMyLjMtNDAuNS0zOC4yLTQ4LjUtNDQtMTcuOC0xMi43LTQxLjQtMTAuMS01NyA1LjEtMi4yIDIuMS0xLjggMy40IC4xIDUuNCAyLjkgMi45IDI4LjEgMjguMyAzNS4xIDM1LjgtMTEuOSAxMS42LTIzLjcgMjMtMzUuNyAzNC43LTEyLTEyLjUtMjQuNS0yNS41LTM2LjUtMzguMS0yMS40IDIxLjEtNDEuNyA0MS4xLTYxLjggNjFMODguMyAyNTUuOHpNMzIzLjIgMzU3LjRjLTM1LjUgMzUuNC03OC4xIDM4LjEtMTA3IDIwLjUtMjIuMS0xMy41LTM5LjQtMzIuMS03Mi45LTY2LjggMTItMTIuNCAyMy44LTI0LjQgMzUuNC0zNi4zIDMzIDMxLjkgMzcuMSAzNiA0NC43IDQyLjEgMTguNSAxNC43IDQyLjUgMTMuNyA1OS4zLTEuOCAzLjctMy40IDMuNy0zLjYgLjEtNy4yLTEwLjYtMTAuNy0yMS4yLTIxLjQtMzEuOC0zMi4yLTEuMy0xLjMtMy0yLjUtLjgtNC43IDEwLjgtMTAuNyAyMS41LTIxLjUgMzIuMi0zMi4zIC4zLS4zIC42LS40IDEuOS0xLjEgMTIuNCAxMi45IDI0LjkgMjUuOSAzNy4yIDM4LjggMjEtMjAuNyA0MS4yLTQwLjcgNjEuMy02MC40IDEzLjcgMTMuNCAyNy4xIDI2LjYgNDAuOSA0MC0yMC4yIDIwLjktODEuNyA4Mi43LTEwMC41IDEwMS41ek0yNTYgMEwwIDI1NiAyNTYgNTEyIDUxMiAyNTYgMjU2IDB6TTE2IDI1NkwyNTYgMTYgNDk2IDI1NiAyNTYgNDk2IDE2IDI1NnoiXQogICAgfTsKICAgIGZhTGludXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGludXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YyIsICJNMjIwLjkgMTIzLjNjMSAuNSAxLjggMS43IDMgMS43IDEuMSAwIDIuOC0uNCAyLjktMS41IC4yLTEuNC0xLjktMi4zLTMuMi0yLjktMS43LS43LTMuOS0xLTUuNS0uMS0uNCAuMi0uOCAuNy0uNiAxLjEgLjMgMS4zIDIuMyAxLjEgMy40IDEuN3pNMTk5IDEyNWMxLjIgMCAyLTEuMiAzLTEuNyAxLjEtLjYgMy4xLS40IDMuNS0xLjYgLjItLjQtLjItLjktLjYtMS4xLTEuNi0uOS0zLjgtLjYtNS41IC4xLTEuMyAuNi0zLjQgMS41LTMuMiAyLjkgLjEgMSAxLjggMS41IDIuOCAxLjR6TTQyMCA0MDMuOGMtMy42LTQtNS4zLTExLjYtNy4yLTE5LjctMS44LTguMS0zLjktMTYuOC0xMC41LTIyLjQtMS4zLTEuMS0yLjYtMi4xLTQtMi45LTEuMy0uOC0yLjctMS41LTQuMS0yIDkuMi0yNy4zIDUuNi01NC41LTMuNy03OS4xLTExLjQtMzAuMS0zMS4zLTU2LjQtNDYuNS03NC40LTE3LjEtMjEuNS0zMy43LTQxLjktMzMuNC03MiAuNS00NS45IDUuMS0xMzEuMi03NS44LTEzMS4zLTEwMi40LS4yLTc2LjggMTAzLjQtNzcuOSAxMzUuMi0xLjcgMjMuNC02LjQgNDEuOC0yMi41IDY0LjctMTguOSAyMi41LTQ1LjUgNTguOC01OC4xIDk2LjctNiAxNy45LTguOCAzNi4xLTYuMiA1My4zLTYuNSA1LjgtMTEuNCAxNC43LTE2LjYgMjAuMi00LjIgNC4zLTEwLjMgNS45LTE3IDguM3MtMTQgNi0xOC41IDE0LjVjLTIuMSAzLjktMi44IDguMS0yLjggMTIuNCAwIDMuOSAuNiA3LjkgMS4yIDExLjggMS4yIDguMSAyLjUgMTUuNyAuOCAyMC44LTUuMiAxNC40LTUuOSAyNC40LTIuMiAzMS43IDMuOCA3LjMgMTEuNCAxMC41IDIwLjEgMTIuMyAxNy4zIDMuNiA0MC44IDIuNyA1OS4zIDEyLjUgMTkuOCAxMC40IDM5LjkgMTQuMSA1NS45IDEwLjQgMTEuNi0yLjYgMjEuMS05LjYgMjUuOS0yMC4yIDEyLjUtLjEgMjYuMy01LjQgNDguMy02LjYgMTQuOS0xLjIgMzMuNiA1LjMgNTUuMSA0LjEgLjYgMi4zIDEuNCA0LjYgMi41IDYuN2wwIC4xYzguMyAxNi43IDIzLjggMjQuMyA0MC4zIDIzIDE2LjYtMS4zIDM0LjEtMTEgNDguMy0yNy45IDEzLjYtMTYuNCAzNi0yMy4yIDUwLjktMzIuMiA3LjQtNC41IDEzLjQtMTAuMSAxMy45LTE4LjMgLjQtOC4yLTQuNC0xNy4zLTE1LjUtMjkuN3pNMjIzLjggODcuM2M5LjgtMjIuMiAzNC4yLTIxLjggNDQtLjQgNi41IDE0LjIgMy42IDMwLjktNC4zIDQwLjQtMS42LS44LTUuOS0yLjYtMTIuNi00LjkgMS4xLTEuMiAzLjEtMi43IDMuOS00LjYgNC44LTExLjgtLjItMjctOS4xLTI3LjMtNy4zLS41LTEzLjkgMTAuOC0xMS44IDIzLTQuMS0yLTkuNC0zLjUtMTMtNC40LTEtNi45LS4zLTE0LjYgMi45LTIxLjh6TTE4My4xIDc1LjhjMTAuMSAwIDIwLjggMTQuMiAxOS4xIDMzLjUtMy41IDEtNy4xIDIuNS0xMC4yIDQuNiAxLjItOC45LTMuMy0yMC4xLTkuNi0xOS42LTguNCAuNy05LjggMjEuMi0xLjggMjguMSAxIC44IDEuOS0uMi01LjkgNS41LTE1LjYtMTQuNi0xMC41LTUyLjEgOC40LTUyLjF6bS0xMy42IDYwLjdjNi4yLTQuNiAxMy42LTEwIDE0LjEtMTAuNSA0LjctNC40IDEzLjUtMTQuMiAyNy45LTE0LjIgNy4xIDAgMTUuNiAyLjMgMjUuOSA4LjkgNi4zIDQuMSAxMS4zIDQuNCAyMi42IDkuMyA4LjQgMy41IDEzLjcgOS43IDEwLjUgMTguMi0yLjYgNy4xLTExIDE0LjQtMjIuNyAxOC4xLTExLjEgMy42LTE5LjggMTYtMzguMiAxNC45LTMuOS0uMi03LTEtOS42LTIuMS04LTMuNS0xMi4yLTEwLjQtMjAtMTUtOC42LTQuOC0xMy4yLTEwLjQtMTQuNy0xNS4zLTEuNC00LjkgMC05IDQuMi0xMi4zem0zLjMgMzM0Yy0yLjcgMzUuMS00My45IDM0LjQtNzUuMyAxOC0yOS45LTE1LjgtNjguNi02LjUtNzYuNS0yMS45LTIuNC00LjctMi40LTEyLjcgMi42LTI2LjRsMC0uMmMyLjQtNy42IC42LTE2LS42LTIzLjktMS4yLTcuOC0xLjgtMTUgLjktMjAgMy41LTYuNyA4LjUtOS4xIDE0LjgtMTEuMyAxMC4zLTMuNyAxMS44LTMuNCAxOS42LTkuOSA1LjUtNS43IDkuNS0xMi45IDE0LjMtMTggNS4xLTUuNSAxMC04LjEgMTcuNy02LjkgOC4xIDEuMiAxNS4xIDYuOCAyMS45IDE2bDE5LjYgMzUuNmM5LjUgMTkuOSA0My4xIDQ4LjQgNDEgNjguOXptLTEuNC0yNS45Yy00LjEtNi42LTkuNi0xMy42LTE0LjQtMTkuNiA3LjEgMCAxNC4yLTIuMiAxNi43LTguOSAyLjMtNi4yIDAtMTQuOS03LjQtMjQuOS0xMy41LTE4LjItMzguMy0zMi41LTM4LjMtMzIuNS0xMy41LTguNC0yMS4xLTE4LjctMjQuNi0yOS45cy0zLTIzLjMtLjMtMzUuMmM1LjItMjIuOSAxOC42LTQ1LjIgMjcuMi01OS4yIDIuMy0xLjcgLjggMy4yLTguNyAyMC44LTguNSAxNi4xLTI0LjQgNTMuMy0yLjYgODIuNCAuNi0yMC43IDUuNS00MS44IDEzLjgtNjEuNSAxMi0yNy40IDM3LjMtNzQuOSAzOS4zLTExMi43IDEuMSAuOCA0LjYgMy4yIDYuMiA0LjEgNC42IDIuNyA4LjEgNi43IDEyLjYgMTAuMyAxMi40IDEwIDI4LjUgOS4yIDQyLjQgMS4yIDYuMi0zLjUgMTEuMi03LjUgMTUuOS05IDkuOS0zLjEgMTcuOC04LjYgMjIuMy0xNSA3LjcgMzAuNCAyNS43IDc0LjMgMzcuMiA5NS43IDYuMSAxMS40IDE4LjMgMzUuNSAyMy42IDY0LjYgMy4zLS4xIDcgLjQgMTAuOSAxLjQgMTMuOC0zNS43LTExLjctNzQuMi0yMy4zLTg0LjktNC43LTQuNi00LjktNi42LTIuNi02LjUgMTIuNiAxMS4yIDI5LjIgMzMuNyAzNS4yIDU5IDIuOCAxMS42IDMuMyAyMy43IC40IDM1LjcgMTYuNCA2LjggMzUuOSAxNy45IDMwLjcgMzQuOC0yLjItLjEtMy4yIDAtNC4yIDAgMy4yLTEwLjEtMy45LTE3LjYtMjIuOC0yNi4xLTE5LjYtOC42LTM2LTguNi0zOC4zIDEyLjUtMTIuMSA0LjItMTguMyAxNC43LTIxLjQgMjcuMy0yLjggMTEuMi0zLjYgMjQuNy00LjQgMzkuOS0uNSA3LjctMy42IDE4LTYuOCAyOS0zMi4xIDIyLjktNzYuNyAzMi45LTExNC4zIDcuMnptMjU3LjQtMTEuNWMtLjkgMTYuOC00MS4yIDE5LjktNjMuMiA0Ni41LTEzLjIgMTUuNy0yOS40IDI0LjQtNDMuNiAyNS41cy0yNi41LTQuOC0zMy43LTE5LjNjLTQuNy0xMS4xLTIuNC0yMy4xIDEuMS0zNi4zIDMuNy0xNC4yIDkuMi0yOC44IDkuOS00MC42IC44LTE1LjIgMS43LTI4LjUgNC4yLTM4LjcgMi42LTEwLjMgNi42LTE3LjIgMTMuNy0yMS4xIC4zLS4yIC43LS4zIDEtLjUgLjggMTMuMiA3LjMgMjYuNiAxOC44IDI5LjUgMTIuNiAzLjMgMzAuNy03LjUgMzguNC0xNi4zIDktLjMgMTUuNy0uOSAyMi42IDUuMSA5LjkgOC41IDcuMSAzMC4zIDE3LjEgNDEuNiAxMC42IDExLjYgMTQgMTkuNSAxMy43IDI0LjZ6TTE3My40IDE0OC43YzIgMS45IDQuNyA0LjUgOCA3LjEgNi42IDUuMiAxNS44IDEwLjYgMjcuMyAxMC42IDExLjYgMCAyMi41LTUuOSAzMS44LTEwLjggNC45LTIuNiAxMC45LTcgMTQuOC0xMC40czUuOS02LjMgMy4xLTYuNi0yLjYgMi42LTYgNS4xYy00LjQgMy4yLTkuNyA3LjQtMTMuOSA5LjgtNy40IDQuMi0xOS41IDEwLjItMjkuOSAxMC4ycy0xOC43LTQuOC0yNC45LTkuN2MtMy4xLTIuNS01LjctNS03LjctNi45LTEuNS0xLjQtMS45LTQuNi00LjMtNC45LTEuNC0uMS0xLjggMy43IDEuNyA2LjV6Il0KICAgIH07CiAgICBmYUNvdHRvbkJ1cmVhdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb3R0b24tYnVyZWF1IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4OWUiLCAiTTQ3NC4zIDMzMC40QzQ1MC42IDQyMi4zIDM4MC4xIDQ3NSAyNzIuNCA0NzguOGwwLTQ5LjJjMC00OCAyNi40LTc0LjQgNzQuNC03NC40IDYyIDAgOTkuMi0zNy4yIDk5LjItOTkuMiAwLTYxLjQtMzYuNS05OC4zLTk3LjQtOTkuMS0zMy02OS4zLTE0Ni41LTY0LjctMTc3LjIgMC02MC45IC44LTk3LjQgMzcuNy05Ny40IDk5LjEgMCA2Mi4xIDM3LjMgOTkuNCA5OS40IDk5LjQgNDggMCA3NC42IDI2LjIgNzQuNiA3NC40bDAgNDkuMmMtMTM0LjQtNS0yMTEuMS04NS4xLTIxMS4xLTIyMyAwLTE0MS44IDgxLjQtMjIzLjIgMjIzLjItMjIzLjIgMTE0LjggMCAxODkuOCA1My4yIDIxNC43IDE0OC44bDI1LjMgMEM0NzMuOSA3MS41IDM4OC4yIDggMjU5LjggOCAxMDUgOCAxMiAxMDEuMiAxMiAyNTUuOCAxMiA0MTEuMSAxMDUuMiA1MDQuMyAyNTkuOCA1MDQgMzg4LjEgNTA0IDQ3My43IDQ0MC4yIDQ5OS41IDMzMC40bC0yNS4yIDB6TTM1NyAxODIuM2M0MS40IDMuNCA2NC4yIDI5IDY0LjIgNzMuNyAwIDQ4LTI2LjQgNzQuNC03NC40IDc0LjQtMjguNiAwLTQ5LjMtOS42LTYxLjYtMjcuMyA4My4xLTE2LjUgNzUuNi05OS43IDcxLjgtMTIwLjd6bS04MS43IDk3LjRjLTIuNS0xMC4zLTE2LjMtODcgNTYuMi05NyAyLjMgMTAuMSAxNi41IDg3LjEtNTYuMyA5N2wwIDB6TTI2MCAxMzJjMjguNiAwIDQ5IDkuNyA2MS40IDI3LjYtMjguNCA1LjUtNDkuNCAyMC42LTYxLjYgNDMuNC0xMi4yLTIyLjktMzMuMi0zOC02MS42LTQzLjQgMTIuNC0xNy43IDMzLjMtMjcuNCA2MS42LTI3LjRsLjItLjN6bS03MS41IDUwLjdjNzMuMiAxMC42IDU4LjkgODYuOCA1Ni41IDk3LTcyLjQtOS44LTU5LTg3LTU2LjItOTdsLS4yIDB6TTE3My4yIDMzMC40Yy00OCAwLTc0LjQtMjYuNC03NC40LTc0LjQgMC00NC40IDIyLjktNzAgNjQuMi03My43LTYuOCAzNy4yLTEuNCAxMDYuNSA3MS42IDEyMC43LTEyLjEgMTcuNi0zMi44IDI3LjMtNjEuMSAyNy4zbC0uMyAwem01My4yIDEyLjRjMTQuMy03LjYgMjYtMTkuMyAzMy42LTMzLjUgNy44IDE0LjUgMTkuMyAyNS41IDMzLjggMzMuNS0xNC40IDcuNi0yNi4xIDE5LjQtMzMuNiAzMy44LTgtMTQuNS0xOS4xLTI2LjItMzMuNi0zMy44bC0uMyAweiJdCiAgICB9OwogICAgZmFHb29nbGVXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXdhbGxldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWVlIiwgIk0xNTYuOCAxMjYuOGMzNy42IDYwLjYgNjQuMiAxMTMuMSA4NC4zIDE2Mi41LTguMyAzMy44LTE4LjggNjYuNS0zMS4zIDk4LjMtMTMuMi01Mi4zLTI2LjUtMTAxLjMtNTYtMTQ4LjUgNi41LTM2LjQgMi4zLTczLjYgMy0xMTIuM3pNMTA5LjMgMjAwbC05My4yIDBjLTYuNSAwLTEwLjUgNy41LTYuNSAxMi43IDQyLjIgNTQuMyA3MS43IDExNy44IDkxLjcgMTg3LjNsMTAzLjUgMGMtMTYuMi02OS43LTM4LjctMTMzLjctODIuNS0xOTMuNS0zLTQtOC02LjUtMTMtNi41em00Ny44LTg4YzY4LjUgMTA4IDEzMCAyMzQuNSAxMzguMiAzNjhMNDA5IDQ4MGMtMTItMTM4LTY4LjQtMjY1LTE0My4yLTM2OGwtMTA4LjcgMHpNNDA4LjkgNDMuNWMtMS44LTYuOC04LjItMTEuNS0xNS4yLTExLjVsLTg4LjMgMGMtNS4zIDAtOSA1LTcuOCAxMC4zIDEzLjIgNDYuNSAyMi4zIDk1LjUgMjYuNSAxNDYgNDguMiA4Ni4yIDc5LjcgMTc4LjMgOTAuNiAyNzAuOCAxNS44LTYwLjUgMjUuMy0xMzMuNSAyNS4zLTIwMyAwLTczLjYtMTIuMS0xNDUuMS0zMS4xLTIxMi42eiJdCiAgICB9OwogICAgZmFGb3Vyc3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvdXJzcXVhcmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE4MCIsICJNMzMxLjEgM0w1Ny45IDNDMjAuNCAzIDggMzEuMyA4IDQ5LjFMOCA0ODIuOWMwIDIwLjMgMTIuMSAyNy43IDE4LjIgMzAuMSA2LjIgMi41IDIyLjggNC42IDMyLjktNy4xIDEyOC45LTE0OS40IDEzMS4xLTE1MS45IDEzMS4xLTE1MS45IDMuMS0zLjQgMy40LTMuMSA2LjgtMy4xbDgzLjQgMGMzNS4xIDAgNDAuNi0yNS4yIDQ0LjMtMzkuN2w0OC42LTI0M0MzODEuOCAyNS44IDM3MS4xIDMgMzMxLjEgM3pNMzE0LjggNzYuOGwtMTEuNCA1OS43Yy0xLjIgNi41LTkuNSAxMy4yLTE2LjkgMTMuMmwtMTA2LjQgMGMtMTIgMC0yMC42IDguMy0yMC42IDIwLjNsMCAxM2MwIDEyIDguNiAyMC42IDIwLjYgMjAuNmw5MC40IDBjOC4zIDAgMTYuNiA5LjIgMTQuOCAxOC4yLTEuOCA4LjktMTAuNSA1My44LTExLjQgNTguOC0uOSA0LjktNi44IDEzLjUtMTYuOSAxMy41bC03My41IDBjLTEzLjUgMC0xNy4yIDEuOC0yNi41IDEyLjYgMCAwLTguOSAxMS40LTg5LjUgMTA4LjMtLjkgLjktMS44IC42LTEuOC0uM2wwLTMzOC44YzAtNy43IDYuOC0xNi42IDE2LjYtMTYuNmwyMTkgMGM4LjIgMCAxNS42IDcuNyAxMy41IDE3LjV6Il0KICAgIH07CiAgICBmYVNoaXJ0c2luYnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaGlydHNpbmJ1bGsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxNCIsICJNMTAwIDQxMC4zbDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0zOS40IDE3LjVsMzAuNiAxMy40IDQuNC05LjktMzAuNi0xMy40LTQuNCA5Ljl6bTE3Mi4xLTE0bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40ek0xNzkuMSA0NDVsMzAuMyAxMy43IDQuNC05LjktMzAuMy0xMy40LTQuNCA5LjZ6TTYwLjQgMzkyLjhsMzAuNiAxMy40IDQuNC05LjYtMzAuNi0xMy43LTQuNCA5Ljl6bTIxMS40IDM4LjVsNC40IDkuOSAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjR6bS0zOS4zIDE3LjVsNC40IDkuOSAzMC42LTEzLjctNC40LTkuNi0zMC42IDEzLjR6bTExOC40LTUyLjJsNC40IDkuNiAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjd6TTE3MCA0Ni42bC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bS00Ny4yIDBsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS00Ny4zIDBsLTMzLjIgMCAwIDEwLjUgMzMuMyAwLS4xLTEwLjV6bTE0MS41IDBsLTMzLjIgMCAwIDEwLjUgMzMuMiAwIDAtMTAuNXptOTQuNSAwbC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tOTQuNiAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTE0MS41IDBsLTMzLjMgMCAwIDEwLjUgMzMuMyAwIDAtMTAuNXpNNTIuOCAzNTEuMWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em03MC0yMTUuOWwtMzMuNiAwIDAgMTAuNSAzMy41IDAgLjEtMTAuNXptLTcwIDEwLjZsMjIuOCAwIDAtMTAuNS0zMy42IDAgMCAzMy41IDEwLjggMCAwLTIzek0yMjEuNyAzNzQuNGE5MS4zIDkxLjMgMCAxIDAgMC0xODIuNiA5MS4zIDkxLjMgMCAxIDAgMCAxODIuNnpNMTczLjUgMjYzLjNjMC0yNS40IDI5LjUtMzEuOCA0OS42LTMxLjggMTYuOSAwIDI5LjIgNS44IDQ0LjMgMTJsLTguOCAxNi45LS45IDBjLTYuNC05LjktMjQuOC0xMy4xLTM1LjYtMTMuMS05IDAtMjkuOCAxLjgtMjkuOCAxNC45IDAgMjEuNiA3OC41LTEwLjIgNzguNSAzNy45IDAgMjUuNC0zMS41IDMxLjItNTEgMzEuMi0xOC4xIDAtMzIuNC0yLjktNDcuMi0xMi4ybDktMTguNCAuOSAwYzYuMSAxMi4yIDIzLjYgMTQuOSAzNS45IDE0LjkgOC43IDAgMzIuNy0xLjIgMzIuNy0xNC4zIDAtMjYuMS03Ny42IDYuMy03Ny42LTM4ek01Mi44IDE3OC40bC0xMC44IDAgMCAzMy42IDEwLjggMCAwLTMzLjZ6TTM5NS4yIDM4NC42bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNNTIuOCAzMDcuOWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41ek0wIDMuN2wwIDQwNiAyMjEuNyA5OC42IDIyNi4zLTk4LjYgMC00MDYtNDQ4IDB6TTQxOC44IDM5MC44bC0xOTYuOCA4NS43LTE5Mi44LTg1LjcgMC0yNzAuMSAzODkuNyAwIDAgMjcwLjEtLjEgMHptMC0yOTkuM2wtMzg5LjYgMCAwLTU4LjYgMzg5LjcgMCAwIDU4LjYtLjEgMHpNNTIuOCAyMjEuNmwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em0wIDQzLjJsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMTcwIDEzNS4ybC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6TTM5NS4yIDI5OC4zbDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptMC00My4ybDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNMjE3IDEzNS4ybC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6TTM5NS4yIDIxMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAgMTI5LjVsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0tMTMxLTIwNi4zbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em04My43IDMzLjZsMTAuOCAwIDAtMzMuNS0zMy41IDAgMCAxMC41IDIyLjggMC0uMSAyM3ptLTM2LjQtMzMuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41eiJdCiAgICB9OwogICAgZmFNaW50Yml0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1pbnRiaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYyZiIsICJNNzMuMiA1MTJsMC03My4xIDI5Mi41IDAgMC03My4yIDczLjIgMCAwLTE0Ni4zIDczLjEgMCAwLTIxOS40LTIxOS40IDAgMCA3My4xLTE0Ni4zIDAgMCA3My4yLTczLjEgMCAwIDI5Mi42LTczLjIgMCAwIDczLjEgNzMuMiAwem03My4xLTIxOS40bDczLjIgMCAwIDczLjEtNzMuMiAwIDAtNzMuMXptNzMuMi03My4xbDczLjEgMCAwIDczLjEtNzMuMiAwIDAtNzMuMiAuMSAuMXptNzMuMSAwbDAtNzMuMiA3My4yIDAgMCA3My4xLTczLjIgMCAwIC4xek0zNjUuNyA3My4xbDczLjIgMCAwIDczLjItNzMuMiAwIDAtNzMuMnoiXQogICAgfTsKICAgIGZhU3RheWxpbmtlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGF5bGlua2VkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjUiLCAiTTM4Ni43IDI5Mi41bDIuNyAyLjctMTcwLTE2Ny4zYy0zLjUtMy41LTkuNy0zLjctMTMuOC0uNUwxNDguMyAxNzFjLTQuMiAzLjItNC42IDguNy0xLjEgMTIuMmw2OC4xIDY0LjNjMy42IDMuNSA5LjkgMy43IDE0IC41bC4xLS4xYzQuMS0zLjIgMTAuNC0zIDE0IC41bDg0IDgxLjNjMy42IDMuNSAzLjIgOS0uOSAxMi4ybC05My4yIDc0Yy00LjIgMy4zLTEwLjUgMy4xLTE0LjItLjRMNjcuMiAyNjhjLTMuNS0zLjUtOS43LTMuNy0xMy45LS41TDcuNSAzMDIuNGMtNC4yIDMuMi00LjcgOC43LTEuMiAxMi4yTDIxNSA1MTAuN3M3LjQgNi44IDE3LjMtLjhMNDMwLjMgMzQ2YzQtMy4yIDQuNC04LjcgLjctMTIuMmwtNDQuMy00MS4zem01NC41LTgzLjRMMjMwLjcgMi41Yy0xLjUtMS4yLTgtNS41LTE2LjMgMS4xTDcuNiAxNjUuN2MtNC4yIDMuMi00LjggOC43LTEuMiAxMi4ybDQyLjMgNDEuNyAxNzEuNyAxNjUuMWMzLjcgMy41IDEwLjEgMy43IDE0LjMgLjRsNTAuMi0zOC44LS4zLS4zIDcuNy02YzQuMi0zLjIgNC42LTguNyAuOS0xMi4ybC01Ny4xLTU0LjRjLTMuNi0zLjUtMTAtMy43LTE0LjItLjVsLS4xIC4xYy00LjIgMy4yLTEwLjUgMy4xLTE0LjItLjRMMTEzIDE4MC44Yy0zLjYtMy41LTMuMS04LjkgMS4xLTEyLjJsOTIuMi03MS41YzQuMS0zLjIgMTAuMy0zIDEzLjkgLjVsMTYwLjQgMTU5YzMuNyAzLjUgMTAgMy43IDE0LjEgLjVsNDUuOC0zNS44YzQuMS0zLjIgNC40LTguNyAuNy0xMi4yeiJdCiAgICB9OwogICAgZmFXZWJmbG93ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlYmZsb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY1YyIsICJNNjQwIDY0bC0yMDQuMiAzOTkuMi0xOTEuOCAwIDg1LjUtMTY1LjUtMy44IDBDMjU1LjEgMzg5LjMgMTQ5LjkgNDQ5LjUgMCA0NjMuMkwwIDMwMC4xczk1LjktNS43IDE1Mi4zLTY0LjlsLTE1Mi4zIDAgMC0xNzEuMiAxNzEuMSAwIDAgMTQwLjggMy44IDAgNzAtMTQwLjggMTI5LjQgMCAwIDEzOS45IDMuOCAwIDcyLjYtMTM5LjkgMTg5LjMgMHoiXQogICAgfTsKICAgIGZhUmVucmVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlbnJlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMThiIiwgIk0yMTQgMTY5LjFDMjE0IDI3OS41IDE1MyAzNzQuNSA2Ni40IDQxNi41IDMwIDM3My4yIDggMzE3LjcgOCAyNTYuNiA4IDEzMy45IDk3LjEgMzIuMiAyMTQgMTIuNWwwIDE1Ni42ek0yNTUgNTA0Yy00Mi45IDAtODMuMy0xMS0xMTguNS0zMC40IDU3LjItMzYuMSAxMDMuNC05MC43IDExOC41LTE1NC42IDE1LjUgNjMuOSA2MS43IDExOC41IDExOC44IDE1NC43LTM1LjEgMTkuMy03NS41IDMwLjMtMTE4LjggMzAuM3ptMTkwLjYtODcuNUMzNTkgMzc0LjUgMjk4IDI3OS42IDI5OCAxNjkuMWwwLTE1Ni42YzExNi45IDE5LjcgMjA2IDEyMS40IDIwNiAyNDQuMSAwIDYxLjEtMjIgMTE2LjYtNTguNCAxNTkuOXoiXQogICAgfTsKICAgIGZhUmV2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJldiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWIyIiwgIk0xNTguNyAyNzQuOWE2NS42IDY1LjYgMCAxIDEgMTMxLjIgMCA2NS42IDY1LjYgMCAxIDEgLTEzMS4yIDB6bTI3MC43LTUuMWwtLjEgMGMtLjctMjkuMy03LjctNTguMi0yMC41LTg0LjZzLTMxLjItNDkuNy01My44LTY4LjRMMzA5LjYgMTQzYzIyIDE0LjIgNDAuMSAzMy44IDUyLjcgNTYuOHMxOS4xIDQ4LjggMTkuMSA3NS4xYzAgODYuNi03MC41IDE1Ny4xLTE1Ny4xIDE1Ny4xUzY3LjIgMzYxLjUgNjcuMiAyNzQuOWMwLTgxLjkgNjMtMTQ5LjMgMTQzLTE1Ni40bDAgMzkuMSAxMDguOC02Mi44LTEwOC44LTYyLjggMCAzOC4zYy0xMDYuNyA3LjItMTkxIDk2LTE5MSAyMDQuNiAwIDExMS42IDg5LjEgMjAyLjMgMjAwLjEgMjA1bDAgLjEgMjEwLjIgMCAwLTIxMC4yeiJdCiAgICB9OwogICAgZmFLZXljZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2V5Y2RuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYmEiLCAiTTYzLjggNDA5LjNsNjAuNS01OWMzMi4xIDQyLjggNzEuMSA2NiAxMjYuNiA2Ny40IDMwLjUgLjcgNjAuMy03IDg2LjQtMjIuNCA1LjEgNS4zIDE4LjUgMTkuNSAyMC45IDIyLTMyLjIgMjAuNy02OS42IDMxLjEtMTA4LjEgMzAuMi00My4zLTEuMS04NC42LTE2LjctMTE3LjctNDQuNCAuMy0uNi0zOC4yIDM3LjUtMzguNiAzNy45IDkuNSAyOS44LTEzLjEgNjIuNC00Ni4zIDYyLjQtMjYuOC0uMS00Ny41LTIxLjctNDcuNS00OC41IDAtMzQuMyAzMy4xLTU2LjYgNjMuOC00NS42ek00MTguNyAxNTYuOWMxOS4xIDMxLjMgMjkuNiA2Ny40IDI4LjcgMTA0LTEuMSA0NC44LTE5IDg3LjUtNDguNiAxMjEgLjMgLjMgMjMuOCAyNS4yIDI0LjEgMjUuNSA5LjYtMS4zIDE5LjIgMiAyNS45IDkuMSAxMS4zIDEyIDEwLjkgMzAuOS0xLjEgNDIuNC0xMiAxMS4zLTMwLjkgMTAuOS00Mi40LTEuMS02LjctNy05LjQtMTYuOC03LjYtMjYuMy0yNC45LTI2LjYtNDQuNC00Ny4yLTQ0LjQtNDcuMiA0Mi43LTM0LjEgNjMuMy03OS42IDY0LjQtMTI0LjIgLjctMjguOS03LjItNTcuMi0yMS4xLTgyLjJsMjIuMS0yMXpNMTA0IDUzLjFjNi43IDcgOS40IDE2LjggNy42IDI2LjNsNDUuOSA0OC4xYy00LjcgMy44LTEzLjMgMTAuNC0yMi44IDIxLjMtMjUuNCAyOC41LTM5LjYgNjQuOC00MC43IDEwMi45LS43IDI4LjkgNi4xIDU3LjIgMjAgODIuNEw5MiAzNTUuNmMtMTkuMy0zMS42LTI4LjktNjcuNy0yNy44LTEwNC43IDEtNDQuNiAxOC4zLTg3LjYgNDcuNS0xMjEuMUw4Ni40IDEwMy40Yy05LjYgMS4zLTE5LjItMi0yNS45LTkuMS0xMS4zLTEyLTEwLjktMzAuOSAxLjEtNDIuNCAxMS45LTExLjIgMzAuNi0xMC45IDQyLjQgMS4yek00NjQuOSA4YzI2IDAgNDcuMSAyMi40IDQ3LjEgNDguM1M0OTAuOSAxMDQgNDY0LjkgMTA0Yy02LjMgLjEtMTQtMS4xLTE1LjktMS44bC02Mi45IDU5LjdjLTMyLjctNDMuNi03Ni43LTY1LjktMTI2LjktNjcuMi0zMC41LS43LTYwLjMgNi44LTg2LjIgMjIuNGwtMjEuMS0yMkMxODQuMSA3NC4zIDIyMS41IDY0IDI2MCA2NC45IDMwMy4zIDY2IDM0NC42IDgxLjYgMzc3LjcgMTA5LjVsNDEuMS0zOC42Yy0xLjUtNC43LTIuMi05LjYtMi4yLTE0LjUtLjEtMjYuNyAyMi4zLTQ4LjQgNDguMy00OC40ek0yNTYuNyAxMTMuNGM1LjUgMCAxMC45IC40IDE2LjQgMS4xIDc4LjEgOS44IDEzMy40IDgxLjEgMTIzLjggMTU5LjEtOS44IDc4LjEtODEuMSAxMzMuNC0xNTkuMSAxMjMuOC03OC4xLTkuOC0xMzMuNC04MS4xLTEyMy44LTE1OS4yIDkuMy03Mi40IDcwLjEtMTI0LjYgMTQyLjctMTI0Ljh6bS01OSAxMTkuNGMuNiAyMi43IDEyLjIgNDEuOCAzMi40IDUyLjJsLTExIDUxLjcgNzMuNyAwLTExLTUxLjdjMjAuMS0xMC45IDMyLjEtMjkgMzIuNC01Mi4yLS40LTMyLjgtMjUuOC01Ny41LTU4LjMtNTguMy0zMi4xIC44LTU3LjMgMjQuOC01OC4yIDU4LjN6Il0KICAgIH07CiAgICBmYUhpcmVBSGVscGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpcmUtYS1oZWxwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiMCIsICJNNDQzLjEgMEw3MS45IDBDNjcuOSAzNy4zIDM3LjQgNjcuOCAwIDcxLjdMMCA0NDMuMmMzNy40IDQuOSA2NiAzMi40IDcxLjkgNjguOGwzNzIuMiAwYzMtMzYuNCAzMi41LTY1LjggNjcuOS02OS44bDAtMzcwLjVDNDc1LjYgNjUuOCA0NDcgMzYuNCA0NDMuMSAwem0tMzcgNDA0LjljLTM2LjMgMC0xOC44LTItNTUuMS0yLTM1LjggMC0yMSAyLTU2LjEgMi01LjkgMC00LjktOC4yIDAtOS44IDIyLjgtNy42IDIyLjktMTAuMiAyNC42LTEyLjggMTAuNC0xNS42IDUuOS04MyA1LjktMTEzIDAtNS4zLTYuNC0xMi44LTEzLjgtMTIuOGwtMTExLjIgMGMtNy40IDAtMTMuOCA3LjUtMTMuOCAxMi44IDAgMzAtNC41IDk3LjQgNS45IDExMyAxLjcgMi41IDEuOCA1LjIgMjQuNiAxMi44IDQuOSAxLjYgNiA5LjggMCA5LjgtMzUuMSAwLTIwLjMtMi01Ni4xLTItMzYuMyAwLTE4LjggMi01NS4xIDItNy45IDAtNS44LTEwLjggMC0xMC44IDEwLjItMy40IDEzLjUtMy41IDIxLjctMTMuOCA3LjctMTIuOSA3LjktNDQuNCA3LjktMTI3LjhsMC0xMDEuMmMwLTIyLjItMTIuMi0yOC4zLTI4LjYtMzIuNC04LjgtMi4yLTQtMTEuOCAxLTExLjggMzYuNSAwIDIwLjYgMiA1Ny4xIDIgMzIuNyAwIDE2LjUtMiA0OS4yLTIgMy4zIDAgOC41IDguMyAxIDEwLjgtNC45IDEuNi0yNy42IDMuNy0yNy42IDM5LjMgMCA0NS42LS4yIDU1LjggMSA2OC44IDAgMS4zIDIuMyAxMi44IDEyLjggMTIuOGwxMDkuMiAwYzEwLjUgMCAxMi44LTExLjUgMTIuOC0xMi44IDEuMi0xMyAxLTIzLjIgMS02OC44IDAtMzUuNi0yMi43LTM3LjctMjcuNi0zOS4zLTcuNS0yLjUtMi4zLTEwLjggMS0xMC44IDMyLjcgMCAxNi41IDIgNDkuMiAyIDM2LjUgMCAyMC42LTIgNTcuMS0yIDQuOSAwIDkuOSA5LjYgMSAxMS44LTE2LjQgNC4xLTI4LjYgMTAuMy0yOC42IDMyLjRsMCAxMDEuMmMwIDgzLjQgLjEgMTE0LjkgNy45IDEyNy44IDguMiAxMC4yIDExLjQgMTAuNCAyMS43IDEzLjggNS44IDAgNy44IDEwLjggMCAxMC44eiJdCiAgICB9OwogICAgZmFTcXVhcmVIYWNrZXJOZXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1oYWNrZXItbmV3cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoYWNrZXItbmV3cy1zcXVhcmUiXSwgImYzYWYiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yMSAyMjkuMnMuMS0uMSAuMS0uMiAuMS0uMiAuMi0uMmMwIC4xIDAgLjMtLjEgLjRsLS4yIDB6TTIzOS4yIDM4NGwtMzEuNCAwIDAtMTAyLjctNzkuOC0xNTMuMyAzNy4zIDBjNDEuNSA3Ny43IDQ4LjEgOTUuOCA1NC4xIDExMiAxLjYgNC4zIDMuMSA4LjUgNS4yIDEzLjYgMy4yLTcgNS4xLTExLjkgNy4xLTE3LjMgNS45LTE1LjMgMTIuOC0zMy4yIDUzLjUtMTA4LjNsMzQuOCAwLTgwLjggMTU1LjEgMCAxMDAuOXoiXQogICAgfTsKICAgIGZhSGFja2VyTmV3c1NxdWFyZSA9IGZhU3F1YXJlSGFja2VyTmV3czsKICAgIGZhQ3JlYXRpdmVDb21tb25zUGRBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1wZC1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlZCIsICJNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYgOCAzOTQuNSAxMjEuNiA1MDQgMjU1LjYgNTA0IDM4NS41IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE4LjEgMzk3LjQgOCAyNTUuNiA4em0uOCA0NTAuOGMtMTEyLjUgMC0yMDMuNy05My0yMDMuNy0yMDIuOCAwLTEwNS40IDg1LjUtMjAzLjMgMjAzLjctMjAzLjMgMTEyLjYgMCAyMDIuOSA4OS41IDIwMi44IDIwMy4zIDAgMTIxLjctOTkuNiAyMDIuOC0yMDIuOCAyMDIuOHpNMzI0LjcgMTg2bC01My4yIDAgMCAxMzcuMiA1My4yIDBjMjEuNCAwIDcwLTUuMSA3MC02OC42IDAtNjMuNC00OC42LTY4LjYtNzAtNjguNnptLjggMTA4LjVsLTE5LjkgMCAwLTc5LjcgMTkuNC0uMWMzLjggMCAzNS0yLjEgMzUgMzkuOSAwIDI0LjYtMTAuNSAzOS45LTM0LjUgMzkuOXpNMjExLjcgMTg2bC02OC4yIDAgMCAxMzcuMyAzNC42IDAgMC00NC4zIDI3IDBjNTQuMSAwIDU3LjEtMzcuNSA1Ny4xLTQ2LjUgMC0zMS0xNi44LTQ2LjUtNTAuNS00Ni41em0tNC45IDY3LjNsLTI5LjIgMCAwLTQxLjYgMjguMyAwYzMwLjkgMCAyOC44IDQxLjYgLjkgNDEuNnoiXQogICAgfTsKICAgIGZhT3JjaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3JjaWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhkMiIsICJNMjk0LjcgMTg4LjJsLTQ1LjkgMCAwIDE1My44IDQ3LjUgMGM2Ny42IDAgODMuMS01MS4zIDgzLjEtNzYuOSAwLTQxLjYtMjYuNS03Ni45LTg0LjctNzYuOXpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0xNzUuMiAzNjguOGwtMjkuOCAwIDAtMjA3LjUgMjkuOCAwIDAgMjA3LjV6TTE2MC4zIDk4LjVhMTkuNiAxOS42IDAgMSAxIDAgMzkuMiAxOS42IDE5LjYgMCAxIDEgMC0zOS4yek0zMDAgMzY5bC04MSAwIDAtMjA3LjcgODAuNiAwYzc2LjcgMCAxMTAuNCA1NC44IDExMC40IDEwMy45IDAgNTMuMy00MS43IDEwMy45LTExMCAxMDMuOXoiXQogICAgfTsKICAgIGZhQmVoYW5jZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiZWhhbmNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxYjQiLCAiTTIzMiAyMzcuMmMzMS44LTE1LjIgNDguNC0zOC4yIDQ4LjQtNzQgMC03MC42LTUyLjYtODcuOC0xMTMuMy04Ny44bC0xNjcuMSAwIDAgMzU0LjQgMTcxLjggMGM2NC40IDAgMTI0LjktMzAuOSAxMjQuOS0xMDIuOSAwLTQ0LjUtMjEuMS03Ny40LTY0LjctODkuN3pNNzcuOSAxMzUuOWw3My4xIDBjMjguMSAwIDUzLjQgNy45IDUzLjQgNDAuNSAwIDMwLjEtMTkuNyA0Mi4yLTQ3LjUgNDIuMmwtNzkgMCAwLTgyLjd6bTgzLjMgMjMzLjdsLTgzLjMgMCAwLTk3LjYgODQuOSAwYzM0LjMgMCA1NiAxNC4zIDU2IDUwLjYgMCAzNS44LTI1LjkgNDctNTcuNiA0N3pNNTE5LjcgMTI4LjlsLTE0My43IDAgMC0zNC45IDE0My43IDAgMCAzNC45ek01NzYgMzA1LjJjMC03NS45LTQ0LjQtMTM5LjItMTI0LjktMTM5LjItNzguMiAwLTEzMS4zIDU4LjgtMTMxLjMgMTM1LjggMCA3OS45IDUwLjMgMTM0LjcgMTMxLjMgMTM0LjcgNjEuMyAwIDEwMS0yNy42IDEyMC4xLTg2LjNsLTYyLjIgMGMtNi43IDIxLjktMzQuMyAzMy41LTU1LjcgMzMuNS00MS4zIDAtNjMtMjQuMi02My02NS4zbDE4NS4xIDBjLjMtNC4yIC42LTguNyAuNi0xMy4yek0zOTAuNCAyNzRjMi4zLTMzLjcgMjQuNy01NC44IDU4LjUtNTQuOCAzNS40IDAgNTMuMiAyMC44IDU2LjIgNTQuOGwtMTE0LjcgMHoiXQogICAgfTsKICAgIGZhTW9uZXJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1vbmVybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2QwIiwgIk0zNjAgMzg0bDEwOC40IDBDNDI1IDQ1NS45IDM0Ni4xIDUwNCAyNTYgNTA0Uzg3IDQ1NS45IDQzLjYgMzg0bDEwOC40IDAgMC0xMjcuOCAxMDQgMTA0LjggMTA0LTEwNSAwIDEyOHpNOTYgMzM2bDAtMjA4IDE1OS40IDE1OS40IDE2MC42LTE1OS40IDAgMjA4IDc0LjggMGM4LjUtMjUuMSAxMy4yLTUyIDEzLjItODAgMC0xMzctMTExLTI0OC0yNDgtMjQ4UzggMTE5IDggMjU2YzAgMjggNC42IDU0LjkgMTMuMiA4MEw5NiAzMzZ6Il0KICAgIH07CiAgICBmYUZpZ21hID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpZ21hIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3OTkiLCAiTTE0IDk1LjhDMTQgNDIuOSA1Ni45IDAgMTA5LjggMEwyNzQuMiAwYzUyLjkgMCA5NS44IDQyLjkgOTUuOCA5NS44IDAgMzMuNS0xNy4yIDYzLTQzLjIgODAuMSAyNiAxNy4xIDQzLjIgNDYuNiA0My4yIDgwLjEgMCA1Mi45LTQyLjkgOTUuOC05NS44IDk1LjhsLTIuMSAwYy0yNC44IDAtNDcuNC05LjQtNjQuNC0yNC45bDAgODguM2MwIDUzLjYtNDQgOTYuOC05Ny40IDk2LjgtNTIuOCAwLTk2LjMtNDIuOC05Ni4zLTk1LjggMC0zMy41IDE3LjItNjMgNDMuMi04MC4xLTI2LTE3LjEtNDMuMi00Ni42LTQzLjItODAuMXMxNy4yLTYzIDQzLjItODAuMUMzMS4yIDE1OC44IDE0IDEyOS4zIDE0IDk1Ljh6bTE2Mi4zIDk1LjhsLTY2LjUgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjQgMCAzNS40IDI4LjYgNjQuMiA2NCA2NC40bDY2LjkgMCAwLTEyOC44ek0yMDcuNyAyNTZjMCAzNS42IDI4LjggNjQuNCA2NC40IDY0LjRsMi4xIDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTIuMSAwYy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHptLTk3LjkgOTUuOGwtLjQgMGMtMzUuNCAuMi02NCAyOS02NCA2NC40czI5LjIgNjQuNCA2NC45IDY0LjRjMzYuMyAwIDY2LTI5LjQgNjYtNjUuNWwwLTYzLjQtNjYuNSAwem0wLTMyMC40Yy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHMyOC44IDY0LjQgNjQuNCA2NC40bDY2LjUgMCAwLTEyOC44LTY2LjUgMHptOTcuOSAxMjguOGw2Ni41IDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTY2LjUgMCAwIDEyOC44eiJdCiAgICB9OwogICAgZmFJbnN0YWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxNmQiLCAiTTIyNC4zIDE0MWExMTUgMTE1IDAgMSAwIC0uNiAyMzAgMTE1IDExNSAwIDEgMCAuNi0yMzB6bS0uNiA0MC40YTc0LjYgNzQuNiAwIDEgMSAuNiAxNDkuMiA3NC42IDc0LjYgMCAxIDEgLS42LTE0OS4yem05My40LTQ1LjFhMjYuOCAyNi44IDAgMSAxIDUzLjYgMCAyNi44IDI2LjggMCAxIDEgLTUzLjYgMHptMTI5LjcgMjcuMmMtMS43LTM1LjktOS45LTY3LjctMzYuMi05My45LTI2LjItMjYuMi01OC0zNC40LTkzLjktMzYuMi0zNy0yLjEtMTQ3LjktMi4xLTE4NC45IDAtMzUuOCAxLjctNjcuNiA5LjktOTMuOSAzNi4xcy0zNC40IDU4LTM2LjIgOTMuOWMtMi4xIDM3LTIuMSAxNDcuOSAwIDE4NC45IDEuNyAzNS45IDkuOSA2Ny43IDM2LjIgOTMuOXM1OCAzNC40IDkzLjkgMzYuMmMzNyAyLjEgMTQ3LjkgMi4xIDE4NC45IDAgMzUuOS0xLjcgNjcuNy05LjkgOTMuOS0zNi4yIDI2LjItMjYuMiAzNC40LTU4IDM2LjItOTMuOSAyLjEtMzcgMi4xLTE0Ny44IDAtMTg0Ljh6TTM5OSAzODhjLTcuOCAxOS42LTIyLjkgMzQuNy00Mi42IDQyLjYtMjkuNSAxMS43LTk5LjUgOS0xMzIuMSA5cy0xMDIuNyAyLjYtMTMyLjEtOWMtMTkuNi03LjgtMzQuNy0yMi45LTQyLjYtNDIuNi0xMS43LTI5LjUtOS05OS41LTktMTMyLjFzLTIuNi0xMDIuNyA5LTEzMi4xYzcuOC0xOS42IDIyLjktMzQuNyA0Mi42LTQyLjYgMjkuNS0xMS43IDk5LjUtOSAxMzIuMS05czEwMi43LTIuNiAxMzIuMSA5YzE5LjYgNy44IDM0LjcgMjIuOSA0Mi42IDQyLjYgMTEuNyAyOS41IDkgOTkuNSA5IDEzMi4xczIuNyAxMDIuNy05IDEzMi4xeiJdCiAgICB9OwogICAgZmFQZXJieXRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBlcmJ5dGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4MyIsICJNMzA1LjMgMjg0LjZsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0xNDkuNCAxMjguN2wtNTguNyAwIDAgOTguNyA1OC43IDBjMTYuMyAwIDI5LTQuNiAzOC4yLTEzLjhzMTMuOC0yMS4yIDEzLjgtMzYuMWMwLTE0LjYtNC43LTI2LjMtMTQtMzUuM3MtMjItMTMuNS0zNy45LTEzLjV6TTM2Ni42IDMyTDgxLjQgMzJjLTIxLjYgMC00Mi4yIDguNi01Ny41IDIzLjlTMCA5MS44IDAgMTEzLjRMMCAzOTguNmMwIDIxLjYgOC42IDQyLjIgMjMuOSA1Ny41UzU5LjggNDgwIDgxLjQgNDgwbDI4NS4zIDBjMjEuNiAwIDQyLjItOC42IDU3LjUtMjMuOVM0NDggNDIwLjIgNDQ4IDM5OC42bDAtMjg1LjNjMC0yMS42LTguNi00Mi4yLTIzLjktNTcuNVMzODguMiAzMiAzNjYuNiAzMnptNjMuNiAzNjYuNmMwIDE2LjktNi43IDMzLTE4LjcgNDVzLTI4LjEgMTguNi00NSAxOC43bC0yODUuMyAwYy0xNi45IDAtMzMtNi43LTQ1LTE4LjdzLTE4LjYtMjguMS0xOC43LTQ1bDAtMjg1LjNjMC0xNi45IDYuNy0zMyAxOC43LTQ1czI4LjEtMTguNiA0NS0xOC43bDI4NS4zIDBjMTYuOSAwIDMzIDYuNyA0NSAxOC43czE4LjYgMjguMSAxOC43IDQ1bDAgMjg1LjN6bS0xMjUtMjY5LjlsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41eiJdCiAgICB9OwogICAgZmFTcXVhcmVWaW1lbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdmltZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidmltZW8tc3F1YXJlIl0sICJmMTk0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzE4LjUgMzA5LjVjLTQzLjUgNTYuNS04MC4zIDg0LjgtMTEwLjQgODQuOC0xOC43IDAtMzQuNC0xNy4yLTQ3LjMtNTEuNi0zLjgtMTMuOS03LjMtMjYuOS0xMC41LTM5LTE4LjItNjguMy0yOC42LTEwNy40LTQ2LjItMTA3LjQtMi40IDAtMTAuOCA1LTI1LjEgMTUuMUw2NCAxOTJjNy02LjEgMTMuOS0xMi40IDIwLjYtMTguNSAyOS4xLTI2LjMgNTUuNi01MC4zIDczLjUtNTEuOSAyNC45LTIuNCA0MC4yIDE0LjYgNDYgNTEuMSAyMC41IDEyOS42IDI5LjYgMTQ5LjIgNjYuOCA5MC41IDEzLjQtMjEuMiAyMC42LTM3LjIgMjEuNS00OC4zIDMuNC0zMi44LTI1LjYtMzAuNi00NS4yLTIyLjIgMTUuNy01MS41IDQ1LjgtNzYuNSA5MC4xLTc1LjEgMzIuOSAxIDQ4LjQgMjIuNCA0Ni41IDY0LTEuNCAzMS4xLTIzLjIgNzMuOC02NS4zIDEyNy45eiJdCiAgICB9OwogICAgZmFWaW1lb1NxdWFyZSA9IGZhU3F1YXJlVmltZW87CiAgICBmYVB1c2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwdXNoZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMSIsICJNNDE1LjEgMTExLjlsLTk4LjUtOSAxNC0zMy40YzEwLjQtMjMuNS0xMC44LTQwLjQtMjguNy0zN0wzMC42IDc2LjljLTE1LjEgMi43LTI2IDE4LjMtMjEuNCAzNi42TDExNC4zIDQ2MS44YzYuNSAyMS4zIDM2LjcgMjQuMiA0Ny43IDdMMTk3LjMgMzg4IDQzMi41IDE1Ni43YzE2LjQtMTYuOCA0LjMtNDIuOS0xNy40LTQ0Ljh6TTMwNS43IDUzLjZjNS4xLS43IDcuNSAyLjUgNS4yIDcuNGwtMTYuOCAzOS45LTE3Ny40LTE2LjMgMTg5LTMxek0zMC44IDEwNy45Yy0zLjEtNS4xIDEtMTAgNi4xLTkuMWwyNDguNyAyMi43LTk2LjkgMjMwLjctMTU3LjktMjQ0LjN6TTE0NC4xIDQ1Ni40Yy0yLjYgNC03LjkgMy4xLTkuNC0xLjJMNTEuNiAxNzkuNyAxNzkuMyAzNzcuM2MtNyAxNS0zNS4yIDc5LjEtMzUuMiA3OS4xek00MTYuOSAxNDEuOWwtMTk4LjcgMTk1LjQgODkuNy0yMTMuNyAxMDYuNCA5LjdjNCAxLjEgNS43IDUuMyAyLjYgOC42eiJdCiAgICB9OwogICAgZmFNaXhjbG91ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXhjbG91ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjg5IiwgIk0yMTMgMzQ2LjZsLTMzLjIgMCAwLTE1MS41IDYuMi0yMS42LTEwLjcgMC0zOC4xIDE3My4xLTYxIDAtMzguNC0xNzMuMS0xMC41IDAgNS45IDIxLjYgMCAxNTEuNS0zMy4yIDAgMC0xODEuNiA2NS43IDAgMzYuNiAxNzMuMSA4LjUgMCAzNi42LTE3My4xIDY1LjcgMCAwIDE4MS42em0zMzEuNS02M2wtODYgNjIuMSAwLTM4LjEgNzIuOS01MS44LTcyLjktNTEuOCAwLTM4LjEgODYgNjIuMyA5LjMgMCA4Ni4zLTYyLjMgMCAzOC4xLTczLjEgNTEuOCA3My4xIDUxLjggMCAzOC4xLTg2LjMtNjIuMS05LjMgMHpNNDMwLjIgMjcyLjNsLTE4MiAwIDAtMzMuMSAxODIgMCAwIDMzLjF6Il0KICAgIH07CiAgICBmYVlhbmRleEludGVybmF0aW9uYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieWFuZGV4LWludGVybmF0aW9uYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjQxNCIsICJNMTI5LjUgNTEybDAtMTY2LjEtMTExLTI5Ny45IDU1LjggMCA4MS44IDIyOS43IDk0LjEtMjc3LjcgNTEuMyAwLTEyMC43IDM0Ny44IDAgMTY0LjItNTEuMyAweiJdCiAgICB9OwogICAgZmFIaXZlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3ZiIsICJNMjYwLjQgMjU0LjlMMTMxLjUgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uMy0uOCAuMS0xLjEgLjMtLjYgLjUtLjggLjhMLjMgMjU0LjljLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjFMMTI5LjEgNDc4LjljLjIgLjMgLjUgLjYgLjggLjhzLjcgLjMgMS4xIC4zIC44LS4xIDEuMS0uMyAuNi0uNSAuOC0uOEwyNjAuNCAyNTcuMWMuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMXptMzkuMS0yNS43Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjggLjMtLjcgLjMtMS4xLS4xLS44LS4zLTEuMUwyNTkuMSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni41IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDI5OS40IDIyOS4yem0yMTIuMyAyNS43TDM4NC45IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjNsLTY2LjYgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44LS4zIC43LS4zIDEuMSAuMSAuOCAuMyAxLjFMNDQwLjcgMjU2IDMxNC41IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni42IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMNTExLjcgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6TTM2NiAyODQuOWwtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjhMMTg4LjggNDc2LjdjLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjEgLjUgLjYgLjggLjggLjcgLjMgMS4xIC4zbDY2LjUgMGMuNCAwIC44LS4xIDEuMS0uM3MuNi0uNSAuOC0uOEwzNjcuOSAyODguM2MuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMS0uNS0uNi0uOC0uOC0uNy0uMy0xLjEtLjN6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1plcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy16ZXJvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjMiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptLS40IDYwLjVjLTgxLjkgMC0xMDIuNSA3Ny4zLTEwMi41IDE0Mi44UzE3NC4xIDM5OC44IDI1NiAzOTguOCAzNTguNSAzMjEuNSAzNTguNSAyNTYgMzM3LjkgMTEzLjIgMjU2IDExMy4yem0wIDUzLjljMy4zIDAgNi40IC41IDkuMiAxLjIgNS45IDUuMSA4LjggMTIuMSAzLjEgMjEuOUwyMTMuOCAyOTAuNGMtMS43LTEyLjctMS45LTI1LjEtMS45LTM0LjQgMC0yOC44IDItODguOSA0NC4xLTg4Ljl6bTQwLjggNDYuMmMyLjkgMTUuNCAzLjMgMzEuNCAzLjMgNDIuNyAwIDI4LjktMiA4OC45LTQ0LjEgODguOS0xMy41IDAtMzIuNi03LjctMjAuMS0yNi40bDYwLjktMTA1LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVNuYXBjaGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1zbmFwY2hhdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzbmFwY2hhdC1zcXVhcmUiXSwgImYyYWQiLCAiTTM4NCAzMkw2NCAzMmMtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdTMCA3OSAwIDk2TDAgNDE2YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zUzQ3IDQ4MCA2NCA0ODBsMzIwIDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdTNDQ4IDQzMyA0NDggNDE2bDAtMzIwYzAtMTctNi43LTMzLjMtMTguNy00NS4zUzQwMSAzMiAzODQgMzJ6bS0zLjkgMzE5LjNsLS4xIC4xYy0yLjUgMi44LTUuNCA1LjEtOC43IDYuOC02LjUgMy42LTEzLjQgNi4zLTIwLjYgOC4yLTEuNCAuNC0yLjcgMS0zLjkgMS44LTIuMiAxLjktMi4xIDQuNi00LjQgOC42LTEuNyAzLTQgNS41LTYuOCA3LjUtNi43IDQuNi0xNC4yIDQuOS0yMi4yIDUuMi03LjIgLjMtMTUuNCAuNi0yNC43IDMuNy0zLjggMS4yLTcuOCAzLjctMTIuNCA2LjUtMTEuMyA2LjktMjYuNyAxNi40LTUyLjMgMTYuNHMtNDAuOS05LjQtNTIuMS0xNi4zYy00LjctMi45LTguNy01LjQtMTIuNS02LjYtOS4zLTMuMS0xNy41LTMuNC0yNC43LTMuNy04LS4zLTE1LjUtLjYtMjIuMi01LjItMi40LTEuNi00LjQtMy43LTYtNi4xLTMuMi00LjYtMi45LTcuOC01LjMtOS45LTEuMy0uOC0yLjYtMS41LTQuMS0xLjgtNy4xLTEuOS0xMy45LTQuNi0yMC4zLTguMS0zLjEtMS42LTUuOS0zLjgtOC4zLTYuMy02LjYtNi44LTguMy0xNC44LTUuNy0yMS44IDMuNC05LjMgMTEuNi0xMi4xIDE5LjQtMTYuMyAxNC44LTggMjYuMy0xOC4xIDM0LjQtMjkuOSAyLjMtMy4zIDQuMy02LjkgNi0xMC42IC44LTIuMiAuOC0zLjMgLjItNC40LS42LS45LTEuMy0xLjYtMi4yLTIuMi0yLjUtMS43LTUuMS0zLjQtNi45LTQuNS0zLjMtMi4xLTUuOS0zLjgtNy41LTUtNi4zLTQuNC0xMC42LTktMTMuNC0xNC4yLTEuOS0zLjYtMy03LjYtMy4zLTExLjZzLjQtOC4xIDEuOS0xMS45YzQuMS0xMC45IDE0LjUtMTcuNyAyNy0xNy43IDIuNiAwIDUuMyAuMyA3LjggLjggLjcgLjIgMS40IC4zIDIgLjUtLjEtNy40IC4xLTE1LjQgLjctMjMuMSAyLjQtMjcuMyAxMS45LTQxLjYgMjEuOS01MyA2LjQtNy4yIDEzLjktMTMuMiAyMi4zLTE3LjkgMTUuMS04LjYgMzIuMi0xMyA1MC45LTEzczM1LjggNC40IDUwLjkgMTNjOC4zIDQuNyAxNS45IDEwLjggMjIuMiAxNy45IDEwIDExLjQgMTkuNSAyNS43IDIxLjkgNTMgLjYgNy43IC45IDE1LjQgLjcgMjMuMSAuNy0uMiAxLjQtLjMgMi4xLS41IDIuNi0uNiA1LjItLjggNy44LS44IDEyLjUgMCAyMi44IDYuOCAyNyAxNy43IDEuNSAzLjggMi4xIDcuOSAxLjkgMTEuOXMtMS40IDgtMy4zIDExLjZjLTIuNyA1LjItNy4xIDkuOS0xMy40IDE0LjItMS43IDEuMi00LjMgMi45LTcuNSA1LTEuOCAxLjItNC41IDIuOS03LjIgNC43LS44IC41LTEuNCAxLjItMS45IDItLjUgMS0uNSAyLjIgLjIgNC4yIDEuNyAzLjggMy43IDcuNCA2LjEgMTAuOCA4LjMgMTIuMSAyMC4yIDIyLjMgMzUuNSAzMC40IDEuNSAuOCAzIDEuNSA0LjQgMi4zIC43IC4zIDEuNiAuOCAyLjUgMS4zIDQuOSAyLjcgOS4yIDYgMTEuNSAxMi4yIDIuNSA2LjkgMSAxNC43LTUuMiAyMS4zem0tMTYuNy0xOC41Yy01MC4zLTI0LjMtNTguMy02MS45LTU4LjctNjQuNy0uNC0zLjQtLjktNiAyLjgtOS41IDMuNi0zLjMgMTkuNS0xMy4yIDI0LTE2LjMgNy4zLTUuMSAxMC41LTEwLjIgOC4yLTE2LjUtMS43LTQuMy01LjctNi0xMC02LTEuMyAwLTIuNyAuMi00IC40LTggMS43LTE1LjggNS44LTIwLjQgNi45LS41IC4xLTEuMSAuMi0xLjcgLjItMi40IDAtMy4zLTEuMS0zLjEtNCAuNi04LjggMS44LTI1LjkgLjQtNDEuOS0xLjktMjItOS0zMi45LTE3LjQtNDIuNi00LjEtNC42LTIzLjEtMjQuNy01OS41LTI0LjdzLTU1LjQgMjAuMS01OS41IDI0LjhjLTguNCA5LjctMTUuNSAyMC42LTE3LjQgNDIuNi0xLjQgMTYtLjEgMzMuMSAuNCA0MS45IC4yIDIuOC0uNyA0LTMuMSA0LS42IDAtMS4xLS4xLTEuNy0uMi00LjUtMS4xLTEyLjMtNS4xLTIwLjMtNi45LTEuMy0uMy0yLjYtLjQtNC0uNC00LjMgMC04LjMgMS42LTEwIDYtMi40IDYuMyAuOCAxMS40IDguMiAxNi41IDQuNCAzLjEgMjAuNCAxMyAyNCAxNi4zIDMuNyAzLjQgMy4yIDYuMSAyLjggOS41LS40IDIuOC04LjQgNDAuNC01OC43IDY0LjctMi45IDEuNC04IDQuNCAuOSA5LjMgMTMuOSA3LjYgMjMuMSA2LjggMzAuMyAxMS40IDYuMSAzLjkgMi41IDEyLjQgNi45IDE1LjQgNS41IDMuOCAyMS42LS4zIDQyLjMgNi42IDE3LjQgNS43IDI4LjEgMjIgNTkgMjJzNDEuOC0xNi4zIDU4LjktMjJjMjAuOC02LjkgMzYuOS0yLjggNDIuMy02LjYgNC40LTMuMSAuOC0xMS41IDYuOS0xNS40IDcuMi00LjYgMTYuNC0zLjggMzAuMy0xMS41IDguOC00LjkgMy44LTcuOSAuOS05LjR6Il0KICAgIH07CiAgICBmYVNuYXBjaGF0U3F1YXJlID0gZmFTcXVhcmVTbmFwY2hhdDsKICAgIGZhVGhlbWVpc2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZW1laXNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmIyIiwgIk0yMDggODguM2MwLTEwIDYuMy0yMS43IDE3LjctMjEuNyAxMS4xIDAgMTcuNyAxMS43IDE3LjcgMjEuNyAwIDEwLjMtNi42IDIxLjctMTcuNyAyMS43LTExLjQgMC0xNy43LTExLjQtMTcuNy0yMS43em0zMDQgMTYwYzAgMzYtMTEuNCAxMDIuMy0zNi4zIDEyOS43LTIyLjkgMjQuOS04Ny40IDYxLjEtMTIwLjkgNzAuNmwtMS4xIC4zIDAgMzIuNmMwIDE2LjMtMTIuNiAzMC42LTI5LjEgMzAuNi0xMCAwLTE5LjQtNS43LTI0LjYtMTQuMy01LjQgOC42LTE0LjkgMTQuMy0yNC45IDE0LjNzLTE5LjQtNS43LTI0LjktMTQuM2MtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTEwLjMgMC0xOS40LTUuNy0yNC45LTE0LjMtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTE4LjkgMC0yOS40LTE1LjctMjkuNC0zMi45LTE2LjMgMTIuMy0zNS43IDE5LjQtNTYuNiAxOS40LTIyIDAtNDMuNC04LjMtNjAuMy0yMi45IDEwLjMtLjMgMjAuNi0yLjMgMzAuMy01LjctMjAuOS01LjctMzkuNC0xOC45LTUyLTM2LjMgMjEuNCA0LjYgNDYuMiAxLjcgNjcuMS0xMS4xLTIyLTIyLTU2LjYtNTguOS02OC42LTg3LjQtNS43LTEzLjQtNi45LTMxLjQtNi45LTQ1LjcgMC00OS43IDIwLjMtMTYwIDg2LjMtMTYwIDEwLjYgMCAxOC45IDQuOSAyMy4xIDE0LjkgMy43LTUuNCA3LjctMTAuNSAxMi0xNS40IDItMi42IDUuNy01LjQgNy4xLTguMyA4LTEyLjYgMTEuNy0yMS4xIDIxLjctMzQgMzIuMy00MS4xIDgxLjctNjkuNCAxMzQuOS02OS40IDYgMCAxMiAuMyAxNy43IDEuMSAxMC45LTExLjcgMjYtMTguMyA0MS43LTE4LjMgMTQuNiAwIDI5LjcgNiA0MCAxNi4zIC45IC45IDEuNCAyLjMgMS40IDMuNCAwIDMuNy0xMC4zIDEzLjQtMTIuOSAxNi4zIDQuMyAxLjQgMTUuNyA2LjkgMTUuNyAxMiAwIDIuOS0yLjkgNS4xLTQuNiA3LjEgMzEuNCAyNy43IDQ5LjQgNjcuMSA1Ni4zIDEwOCA0LjMtNS4xIDEwLjMtOC42IDE3LjEtOC42IDEwLjYgMCAyMC45IDcuMSAyOC42IDE0IDIwLjkgMTguNiAyNS43IDUzLjEgMjUuNyA3OS43ek0xODggODkuNGMwIDE4LjMgMTIuNiAzNy4xIDMyLjMgMzcuMXMzMi4zLTE4LjkgMzIuMy0zNy4xYzAtMTgtMTIuNi0zNi45LTMyLjMtMzYuOVMxODggNzEuNCAxODggODkuNHpNMjM3LjcgMTk0YzAtMTkuNyAzLjctMzkuMSA4LjYtNTguMy01MiA3OS41LTEzLjUgMTg0LjYgNjguOSAxODQuNiAyMS40IDAgNDIuNi03LjcgNjAtMjAgMi03LjQgMy43LTE0LjkgMy43LTIyLjYgMC0xNC4zLTYuMy0yMS40LTIwLjYtMjEuNC00LjYgMC05LjEgLjktMTMuNCAxLjctNjMuMyAxMi43LTEwNy4xIDMuNy0xMDcuMS02NHpNMTk2LjYgNDQ4LjljMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAgOS43LTIwIDIwLjlsMCAzMi42YzAgMTEuMSA4LjYgMjEuMSAyMCAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjEgMGMwLTExLjEtOC42LTIwLjktMjAtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLTEwIDIwLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjcgMGMwLTExLjEtOC45LTIwLjktMjAuMy0yMC45cy0yMC4zIDkuNy0yMC4zIDIwLjlsMCAzMi42YzAgMTEuMSA4LjkgMjEuMSAyMC4zIDIxLjFzMjAuMy0xMCAyMC4zLTIxLjFsMC0zMi42ek00MjEuNyAyODZjLTMwLjkgNTkuMS05MC4zIDEwMi42LTE1OC42IDEwMi42LTk2LjYgMC0xNjAuNi04NC42LTE2MC42LTE3Ni42IDAtMTYuOSAyLTMzLjQgNi00OS43LTIwIDMzLjctMjkuNyA3Mi42LTI5LjcgMTExLjQgMCA2MC4zIDI0LjkgMTIxLjcgNzEuNCAxNjAuOSA1LjEtOS43IDE0LjktMTYuMyAyNi0xNi4zIDEwIDAgMTkuNCA1LjcgMjQuNiAxNC4zIDUuNC04LjYgMTQuNi0xNC4zIDI0LjktMTQuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjktMTQuMyAyNC45LTE0LjNzMTkuNCA1LjcgMjQuOSAxNC4zYzUuMS04LjYgMTQuNi0xNC4zIDI0LjYtMTQuMyAxMC45IDAgMjAuOSA2LjYgMjUuNyAxNiA0My40LTM2LjMgNjguNi05MiA3MS40LTE0OC4zem0xMC42LTk5LjdjMC01My43LTM0LjYtMTA1LjctOTIuNi0xMDUuNy0zMC4zIDAtNTguNiAxNS4xLTc4LjkgMzYuOS0yMCA2Ni40LTI3LjQgMTM2LjYgNDEuNCAxMzYuNiAyOC44IDAgOTcuNC0yOC41IDg0LjMgMzYuOSAyOC45LTI2IDQ1LjctNjUuNyA0NS43LTEwNC42eiJdCiAgICB9OwogICAgZmFEYXJ0TGFuZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkYXJ0LWxhbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTY5MyIsICJNMzc4LjYgNzguOWMtMi44LS4xLTUuNi0uMi04LjUtLjJsLTI2NC4xIDAgMTQzLjItNzJjNy40LTQuNCAxOC44LTYuNyAzMC40LTYuNyAxMy41IDAgMjkuNCA5LjIgMzcgMTYuOGw2MiA2MiAwIC4xek0xMDcuMyA5Ni41bDI2Mi44IDBjMTYgMCAyNS40IDEuNCAzNS40IDkuM2wxMDYuNSAxMDYuNCAwIDIwOC44LTc5LjMgLjctMzI1LjQtMzI1LjJ6TTk2LjUgMzczbDAtMjYyLjIgMzIzLjggMzIzLjggLjcgNzcuNC0yMTIuMiAwLTk4LjEtOTguMkM5OS40IDQwMi41IDk2LjUgMzk4LjUgOTYuNSAzNzN6TTc4LjcgMTA1LjNsMCAyNjcuN2MwIDMuMyAuMSA2LjMgLjIgOS4xbC02Mi02MkM2LjUgMzA5LjMgMCAyOTQuMyAwIDI3OS42IDAgMjcyLjggMy45IDI2Mi4xIDYuNyAyNTZsNzItMTUwLjd6Il0KICAgIH07CiAgICBmYURlcGxveWRvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXBsb3lkb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM4ZSIsICJNMzgyLjIgMTM2bDUxLjcgMCAwIDIzOS42LTUxLjcgMCAwLTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlsMC0xMDMuOXpNMzE3LjUgMjk3LjhhMzMuMiAzMy4yIDAgMSAwIDY2LjQgMSAzMy4yIDMzLjIgMCAxIDAgLTY2LjQtMXpNMTg4LjUgMTM2bDUxLjcgMCAwIDIzOS42LTUxLjcgMCAwLTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlsMC0xMDMuOXpNMTIzLjggMjk3LjhhMzMuMiAzMy4yIDAgMSAwIDY2LjQgMSAzMy4yIDMzLjIgMCAxIDAgLTY2LjQtMXpNNDQ4IDk2YzE3LjUgMCAzMiAxNC40IDMyIDMybDAgMjU2YzAgMTcuNS0xNC40IDMyLTMyIDMyTDY0IDQxNmMtMTcuNSAwLTMyLTE0LjQtMzItMzJsMC0yNTZjMC0xNy41IDE0LjQtMzIgMzItMzJsMzg0IDB6bTAtMzJMNjQgNjRDMjguOCA2NCAwIDkyLjggMCAxMjhMMCAzODRjMCAzNS4yIDI4LjggNjQgNjQgNjRsMzg0IDBjMzUuMiAwIDY0LTI4LjggNjQtNjRsMC0yNTZjMC0zNS4yLTI4LjgtNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYUZsaXBib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbGlwYm9hcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQ0ZCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMzU4LjQgMjExLjJsLTg5LjYgMCAwIDg5LjYtODkuNiAwIDAgODkuNi04OS42IDAgMC0yNjguOCAyNjguOCAwIDAgODkuNnoiXQogICAgfTsKICAgIGZhQnV5TkxhcmdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1eS1uLWxhcmdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4YTYiLCAiTTI4OC4yIDMyQzEzMy41IDMyIDggMTMyLjMgOCAyNTZTMTMzLjUgNDgwIDI4OC4yIDQ4MCA1NjguNCAzNzkuNyA1NjguNCAyNTYgNDQyLjkgMzIgMjg4LjIgMzJ6TTIwMi44IDM4OS4ybC0xMzguNSAxLjQgNzcuMi0yOTAuNyAxMzMuNCAwYzYzLjIgMCA4NC45IDI4LjYgNzggNzIuOC0uNCAyLjMtLjkgNC42LTEuNSA2LjktNS42LTEuMy0xMS40LTEuOS0xNy4yLTEuOS00Mi4zIDAtNzYuNyAzMy45LTc2LjcgNzUuNyAwIDM3LjEgMjcuMSA2OCA2Mi45IDc0LjUtMTguMiAzNy4yLTU2LjIgNjAuOS0xMTcuNyA2MS41ek0zNTguMiAyMDcuMWwzMiAwLTIyLjIgOTAuMy0zNS40IDAtMTEuMi0zNS42LTcuOCAzNS42LTM3LjggMCAyNi42LTkwLjMgMzEuMyAwIDE1IDM2LjggOS40LTM2Ljh6TTUwNC4xIDM4OS4ybC0xOTcuMSAwIDE1LjgtNjEuMmMzLjggLjYgNy42IC44IDExLjUgLjggNDIuMyAwIDc2LjctMzMuOSA3Ni43LTc1LjYgMC0zMi42LTIxLTYwLjUtNTAuNC03MS4xbDIxLjMtODIuNCA5Mi41IDAtNTMgMjA1LjQgMTAzLjkgMC0yMS4yIDg0LjF6TTIxMS45IDI2OS40bC0yNC43IDAtMTMuOCA1Ni41IDI0LjcgMGMxNi4xIDAgMzIuMS0zLjIgMzcuOS0yNi42IDUuNi0yMi4zLTgtMjkuOC0yNC4xLTI5Ljh6TTIzMy4yIDE3MGwtMjEuMyAwLTExLjcgNDcuNyAyMS40IDBjMTggMCAzNS40LTE0LjYgMzkuMi0zMC4xIDQuNi0xOC45LTkuNS0xNy42LTI3LjYtMTcuNnoiXQogICAgfTsKICAgIGZhV2F0Y2htYW5Nb25pdG9yaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndhdGNobWFuLW1vbml0b3JpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4NyIsICJNMjU2IDE2YTI0MCAyNDAgMCAxIDAgMCA0ODAgMjQwIDI0MCAwIDEgMCAwLTQ4MHpNMTIxLjcgNDI5LjFjLTUxLjYtNDAuMi04NC45LTEwMi44LTg0LjktMTczLjEgMC0yMS43IDMuMi00My4zIDkuNi02NC4xbDEwMi45LTE3LjktLjEgMTEtMTMuOSAycy0uMSAxMi41LS4xIDE5LjVjMCAyIC40IDQgMS4yIDUuOHMyLjEgMy40IDMuNyA0LjZsOS41IDcuNC0yNy43IDIwNC45ek0yMjcuNCAxNDUuOWw4LjUtNy42czYuOS01LjQtLjEtOS4zYy03LjItNC0zOS41LTM0LjUtMzkuNS0zNC41LTUuMy01LjUtOC4zLTcuMy0xNS41IDAgMCAwLTMyLjMgMzAuNS0zOS41IDM0LjUtNy4xIDQtLjEgOS4zLS4xIDkuM2w4LjUgNy42IDAgNC40LTczLjUtMTkuMmMzOS42LTU2LjkgMTA1LjUtOTQuMyAxODAtOTQuMyAzMS4zIDAgNjIuMiA2LjcgOTAuNiAxOS42czUzLjggMzEuOCA3NC4zIDU1LjRsLTE5My41IDM3LjcgMC0zLjZ6bTM0LjEgMzI5LjNsLTMzLjktMjUwLjkgOS41LTcuNGMxLjYtMS4yIDIuOC0yLjggMy43LTQuNnMxLjMtMy44IDEuMi01LjhjMC03LS4xLTE5LjUtLjEtMTkuNWwtMTMuOS0yLS4xLTEwLjUgMjQxLjcgMzEuNGMzLjkgMTYuNCA1LjggMzMuMyA1LjggNTAuMSAwIDExOS4xLTk1LjQgMjE2LjItMjEzLjggMjE5LjF6Il0KICAgIH07CiAgICBmYUhpcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGlwcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDUyIiwgIk0yNTEuNiAxNTcuNmMwLTEuOS0uOS0yLjgtMi44LTIuOGwtNDAuOSAwYy0xLjYgMC0yLjcgMS40LTIuNyAyLjhsMCAyMDEuOGMwIDEuNCAxLjEgMi44IDIuNyAyLjhsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMjAxLjh6TTE1Ni41IDE2OGMtMTYuMS0xMS44LTM2LjMtMTcuOS02MC4zLTE4LTE4LjEtLjEtMzQuNiAzLjctNDkuOCAxMS40bDAtODEuMmMwLTEuOC0uOS0yLjctMi44LTIuN2wtNDAuOSAwQy45IDc3LjUgMCA3OC40IDAgODAuMkwwIDM1OS40YzAgMS45IC45IDIuOCAyLjcgMi44bDQxIDBjMS45IDAgMi44LS45IDIuOC0yLjhsMC0xMzYuMWMwLS44LTIuOC0yNyA0NS44LTI3IDQ4LjUgMCA0NS44IDI2LjEgNDUuOCAyN2wwIDEyMi42YzAgOSA3LjMgMTYuMyAxNi40IDE2LjNsMjcuMyAwYzEuOCAwIDIuNy0uOSAyLjctMi44bDAtMTM2LjFjMC0yMy40LTkuMy00MS44LTI4LTU1LjN6TTYzNC45IDI3OC4xYy02LjgtMTUuNy0xOC40LTI3LTM0LjktMzQuMWwtNTcuNi0yNS4zYy04LjYtMy42LTkuMi0xMS4yLTIuNi0xNi4xIDcuNC01LjUgNDQuMy0xMy45IDg0IDYuOCAxLjcgMSA0LS4zIDQtMi40bDAtNDQuN2MwLTEuMy0uNi0yLjEtMS45LTIuNi0xNy43LTYuNi0zNi4xLTkuOS01NS4xLTkuOS0yNi41IDAtNDUuMyA1LjgtNTguNSAxNS40LS41IC40LTI4LjQgMjAtMjIuNyA1My43IDMuNCAxOS42IDE1LjggMzQuMiAzNy4yIDQzLjZMNTgwLjQgMjg2YzExLjYgNS4xIDE1LjIgMTMuMyAxMi4yIDIxLjItMy43IDkuMS0xMy4yIDEzLjYtMzYuNSAxMy42LTI0LjMgMC00NC43LTguOS01OC40LTE5LjEtMi4xLTEuNC00LjQgLjItNC40IDIuM2wwIDM0LjRjMCAxMC40IDQuOSAxNy4zIDE0LjYgMjAuNyAxNS42IDUuNSAzMS42IDguMiA0OC4yIDguMiAxMi43IDAgMjUuOC0xLjIgMzYuMy00LjMgLjctLjMgMzYtOC45IDQ1LjYtNDUuOCAzLjUtMTMuNSAyLjQtMjYuNS0zLjEtMzkuMXpNMzc2LjIgMTQ5LjhjLTMxLjcgMC0xMDQuMiAyMC4xLTEwNC4yIDEwMy41bDAgMTgzLjVjMCAuOCAuNiAyLjcgMi43IDIuN2w0MC45IDBjMS45IDAgMi44LS45IDIuOC0yLjdsMC04OC44YzE2LjUgMTIuNyAzNS44IDE5LjEgNTcuNyAxOS4xIDYwLjUgMCAxMDguNy00OC41IDEwOC43LTEwOC43IC4xLTYwLjMtNDguMi0xMDguNi0xMDguNi0xMDguNnptMCA0Ni42YTYyLjIgNjIuMiAwIDEgMSAwIDEyNC4zIDYyLjIgNjIuMiAwIDEgMSAwLTEyNC4zek0yMjguMyA3Mi41Yy0xNS45IDAtMjguOCAxMi45LTI4LjkgMjguOSAwIDE1LjYgMTIuNyAyOC45IDI4LjkgMjguOXMyOC45LTEzLjEgMjguOS0yOC45YzAtMTYuMi0xMy0yOC45LTI4LjktMjguOXoiXQogICAgfTsKICAgIGZhQ2xvdWR2ZXJzaWZ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3VkdmVyc2lmeSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzg1IiwgIk0xNjAuNiAzMDRjOC4yIDY4LjUgNjcuNCAxMTUuNSAxNDYgMTExLjMgNTEuMiA0My4zIDEzNi44IDQ1LjggMTg2LjQtNS42IDY5LjIgMS4xIDExOC41LTQ0LjYgMTMxLjUtOTkuNSAxNC44LTYyLjUtMTguMi0xMzIuNS05Mi4xLTE1NS4xLTMzLTg4LjEtMTMxLjQtMTAxLjUtMTg2LjUtODUtNTcuMyAxNy4zLTg0LjMgNTMuMi05OS4zIDEwOS43LTcuOCAyLjctMjYuNSA4LjktNDUgMjQuMSAxMS43IDAgMTUuMiA4LjkgMTUuMiAxOS41bDAgMjAuNGMwIDEwLjctOC43IDE5LjUtMTkuNSAxOS41bC0yMC4yIDBjLTEwLjcgMC0xOS41LTYtMTkuNS0xNi43bDAtNi42LTQ2LjggMGMtMy44IDAtMTAuOCA0LjMtMTAuOCAxMS45bDAgNDAuNGMwIDYuNCA1LjMgMTEuOCAxMS43IDExLjhsNDguOSAwIDAtLjF6TTM4OCAzMTJjLTEwLjcgNDYuMyAyMS43IDcyLjQgNTUuMyA4Ni44LTEwNy4yIDMzLjgtMTcxLjYtNTAuOC0xMzUuMy0xMTAuOC0zMy4yIDIxLjYtMzMuNyA3MS4yLTI5LjIgOTIuOS0xNy45LTEyLjQtNTMuOC0zMi40LTU3LjQtNzkuOC0zLTM5LjkgMjEuNS03NS43IDU3LTkzLjkgMzAuNi0xNS44IDEwMy41LTguNSAxMzMuNiA0MC44LTE0LjEtNDgtNTMuOC03MC4xLTEwMS44LTc0LjggMzAuOS0zMC43IDY0LjQtNTAuMyAxMTQuMi00My43IDY5LjggOS4zIDEzMy4yIDgyLjggNjcuNyAxNTAuNSAzNS0xNi4zIDQ4LjctNTQuNCA0Ny41LTc2LjlsMTAuNSAxOS42YzExLjggMjIgMTUuMiA0Ny42IDkuNCA3Mi05LjIgMzktNDAuNiA2OC44LTc5LjcgNzYuNS0zMi4xIDYuMy04My4xLTUuMS05MS44LTU5LjJ6TTE0MCAyMDhsLTM5LjggMGMtOC45IDAtMTYuMi03LjMtMTYuMi0xNi4ybDAtMzkuNmMwLTguOSA3LjMtMTYuMiAxNi4yLTE2LjJsMzkuOCAwYzguOSAwIDE2LjIgNy4zIDE2LjIgMTYuMmwwIDM5LjZjMCA4LjktNy4zIDE2LjItMTYuMiAxNi4yek0yMi4xIDE2OGMtNS42IDAtMTAuMS00LjUtMTAuMS0xMC4xbDAtMjcuOGMwLTUuNiA0LjUtMTAuMSAxMC4xLTEwLjFsMjcuNyAwYzUuNSAwIDEwLjEgNC41IDEwLjEgMTAuMWwwIDI3LjhjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xbC0yNy43IDB6TTE4MCAxNDIuN2wwLTIxLjRjMC01LjEgNC4yLTkuMyA5LjMtOS4zbDIxLjQgMGM1LjEgMCA5LjMgNC4yIDkuMyA5LjNsMCAyMS40YzAgNS4xLTQuMiA5LjMtOS4zIDkuM2wtMjEuNCAwYy01LjEgMC05LjMtNC4yLTkuMy05LjN6TTY4IDIzNS41bDAgMjVjMCA2LjMtNS4xIDExLjUtMTEuNCAxMS41bC0yNS4yIDBjLTYuMyAwLTExLjQtNS4yLTExLjQtMTEuNWwwLTI1YzAtNi4zIDUuMS0xMS41IDExLjQtMTEuNWwyNS4xIDBjNi40IDAgMTEuNSA1LjIgMTEuNSAxMS41eiJdCiAgICB9OwogICAgZmFHb29kcmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZHJlYWRzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTgiLCAiTTI5OS45IDE5MS4yYzUuMSAzNy4zLTQuNyA3OS0zNS45IDEwMC43LTIyLjMgMTUuNS01Mi44IDE0LjEtNzAuOCA1LjctMzcuMS0xNy4zLTQ5LjUtNTguNi00Ni44LTk3LjIgNC4zLTYwLjkgNDAuOS04Ny45IDc1LjMtODcuNSA0Ni45LS4yIDcxLjggMzEuOCA3OC4yIDc4LjN6TTQ0OCA4OGwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6TTMzMCAzMTMuMnMtLjEtMzQtLjEtMjE3LjNsLTI5IDAgMCA0MC4zYy0uOCAuMy0xLjItLjUtMS42LTEuMi05LjYtMjAuNy0zNS45LTQ2LjMtNzYtNDYtNTEuOSAuNC04Ny4yIDMxLjItMTAwLjYgNzcuOC00LjMgMTQuOS01LjggMzAuMS01LjUgNDUuNiAxLjcgNzcuOSA0NS4xIDExNy44IDExMi40IDExNS4yIDI4LjktMS4xIDU0LjUtMTcgNjktNDUuMiAuNS0xIDEuMS0xLjkgMS43LTIuOSAuMiAuMSAuNCAuMSAuNiAuMiAuMyAzLjggLjIgMzAuNyAuMSAzNC41LS4yIDE0LjgtMiAyOS41LTcuMiA0My41LTcuOCAyMS0yMi4zIDM0LjctNDQuNSAzOS41LTE3LjggMy45LTM1LjYgMy44LTUzLjItMS4yLTIxLjUtNi4xLTM2LjUtMTktNDEuMS00MS44LS4zLTEuNi0xLjMtMS4zLTIuMy0xLjNsLTI2LjggMGMuOCAxMC42IDMuMiAyMC4zIDguNSAyOS4yIDI0LjIgNDAuNSA4Mi43IDQ4LjUgMTI4LjIgMzcuNCA0OS45LTEyLjMgNjcuMy01NC45IDY3LjQtMTA2LjN6Il0KICAgIH07CiAgICBmYVRpZGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRpZGFsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZGMiLCAiTTEwNy4yIDQ4bC0xLjMgMGMtMzIuMyAzMy4xLTY1LjQgNjUuNS05OCA5OC41LTIuNiAyLjgtNi4xIDUuMS03LjkgOC42IDM1LjYgMzUuNCA3MSA3MSAxMDYuNiAxMDYuNCAzNS40LTM1LjMgNzAuNy03MC44IDEwNi4xLTEwNi4xbDAtMS4zLTczLjItNzMuMkMxMjguOCA2OS44IDExNy4zIDU5LjYgMTA3LjIgNDh6bTIxMy41IDBsLTEuMyAwYy0zNC45IDM2LjEtNzEuNSA3MS0xMDYuMyAxMDcuMiAzNS45IDM1LjEgNzEgNzEgMTA2LjcgMTA2LjMgMzQuMy0zNC4xIDY4LjQtNjguNCAxMDIuNi0xMDIuNCAxLjUtMS41IDMuMy0yLjggNC4xLTQuOC0zNC42LTMzLjgtNjguNC02OC4yLTEwMi42LTEwMi4xLTEuMy0xLjMtMi4zLTIuNi0zLjMtNC4xem0yMTMuNSAwbC0xLjMgMGMtMTcuMiAxOC0zNS4xIDM1LjMtNTIuNiA1My0xNy45IDE3LjctMzUuNCAzNS43LTUzLjUgNTMuMyAuOCAyLjMgMyAzLjYgNC42IDUuNUw1MzMuMyAyNjEuNWMzNi4xLTM0LjkgNzAuOC03MS4yIDEwNi43LTEwNi4xLS41LTIuMi0yLjYtMy41LTQtNUw1NTUuOCA3MC4yYy03LjEtNy40LTE0LjktMTQuMi0yMS41LTIyLjJ6TTMxOS42IDI2MS43Yy0zNC45IDM1LjEtNzAgNzAtMTA0LjkgMTA0LjktLjMgLjctLjcgMS43LTEgMi4zIDI0IDIzLjcgNDcuNyA0Ny41IDcxLjUgNzEuMyAxMS44IDExLjMgMjIuOCAyMy41IDM0LjkgMzQuNCA4LjQtNy40IDE2LjQtMTYuNCAyNC43LTI0LjMgMjUuNS0yNS4zIDUxLTUxIDc2LjUtNzYuMyAxLjgtMi4yIDQuMy0zLjYgNS41LTYuMy0zNS40LTM0LjktNzAuNS03MC4yLTEwNS42LTEwNS40bC0xLjUtLjd6Il0KICAgIH07CiAgICBmYVVuaXR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuaXR5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNDkiLCAiTTI0My42IDkxLjZsODAuMSA0Ni44YzIuOSAxLjYgMyA2LjIgMCA3LjhsLTk1LjIgNTUuNmMtMi45IDEuNy02LjMgMS42LTkgMGwtOTUuMi01NS42Yy0yLjktMS42LTMtNi4zIDAtNy44bDgwLjEtNDYuOCAwLTkxLjYtMjA0LjQgMTE5LjQgMCAyMzguOCA3OC40LTQ1LjggMC05My42Yy0uMS0zLjMgMy44LTUuNyA2LjctMy45bDk1LjIgNTUuNmMyLjkgMS43IDQuNSA0LjcgNC41IDcuOGwwIDExMS4yYy4xIDMuMy0zLjggNS43LTYuNyAzLjlMOTggMzQ2LjggMTkuNiAzOTIuNiAyMjQgNTEyIDQyOC40IDM5Mi42IDM1MCAzNDYuOCAyNjkuOSAzOTMuNmMtMi44IDEuNy02LjgtLjUtNi43LTMuOWwwLTExMS4yYzAtMy4zIDEuOC02LjMgNC41LTcuOEwzNjIuOSAyMTVjMi44LTEuNyA2LjggLjUgNi43IDMuOWwwIDkzLjYgNzguNCA0NS44IDAtMjM4LjgtMjA0LjQtMTE5LjQgMCA5MS42eiJdCiAgICB9OwogICAgZmFUZW5jZW50V2VpYm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGVuY2VudC13ZWlibyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMWQ1IiwgIk00MC41IDQ5NS44YzEuNCAxOS45LTI3LjYgMjIuMi0yOS43IDIuOS0xMS42LTEyOS45IDMxLjEtMjM5LjUgMTAxLjQtMzEzLjItMTUuNi0zNCA5LjItNzcuMSA1MC42LTc3LjEgMzAuMyAwIDU1LjEgMjQuNiA1NS4xIDU1LjEgMCA0NC00OS41IDcwLjgtODYuOSA0NS4xLTY1LjcgNzEuMy0xMDEuNCAxNjkuOC05MC41IDI4Ny4yek0xNjAuMiAuMWMtMTI1LjkgMC0yMDQuMyAxMzQuMi0xNDguMyAyNDIuMyA4LjcgMTcuNCAzNS4zIDQuNSAyNi4zLTEzLjQtNDYuMy05Mi42IDIxLTE5OS4yIDEyMi0xOTkuMiA3NS40IDAgMTM2LjkgNjEuNCAxMzYuOSAxMzYuOSAwIDkwLjgtODYuOSAxNTMuOS0xNjcuNyAxMzMuMS0xOS4xLTQuMS0yNS42IDI0LjQtNi42IDI5LjEgMTEwLjcgMjMuMiAyMDQtNjAgMjA0LTE2Mi4zIDAtOTEuOS03NC42LTE2Ni41LTE2Ni42LTE2Ni41eiJdCiAgICB9OwogICAgZmFGcmVlQ29kZUNhbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZnJlZS1jb2RlLWNhbXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJjNSIsICJNOTcuNCA5Ni4yYzEwLjQtMTAuNiAxNi0xNy4xIDE2LTIxLjkgMC0yLjgtMS45LTUuNS0zLjgtNy40LTIuNC0xLjgtNS40LTIuOC04LjQtMi44LTguNSAwLTIwLjkgOC44LTM1LjggMjUuNy00MS41IDQ3LjMtNjIuNyA5My4xLTYxLjggMTYwLjZTMjEgMzY3LjMgNTcuNiA0MTIuMmMxOC44IDIzLjYgMzMuMiAzNS44IDQzLjUgMzUuOCAzLjItLjMgNi4xLTEuNiA4LjQtMy44IDEuOS0yLjggMy44LTUuNiAzLjgtOC40IDAtNS42LTMuOS0xMi4yLTEzLjItMjAuNi00NC41LTQyLjMtNjcuMy05Ny02Ny41LTE2NS0uMi02MS40IDIxLjYtMTEyLjQgNjQuOC0xNTR6TTIzOS42IDQyMC4xYy42IC40IC45IC42IC45IC42bC0uOS0uNnptOTMuOCAuNmwuMi0uMWMtLjIgLjEtLjMgLjItLjIgLjF6bTMuMS0xNTguMmMtMTYuMi00LjIgNTAuNC04Mi45LTY4LjEtMTc3LjIgMCAwIDE1LjUgNDkuNC02Mi44IDE1OS42LTc0LjMgMTA0LjQgMjMuNSAxNjguNyAzNCAxNzUuMi02LjctNC4zLTQ3LjQtMzUuNyA5LjYtMTI4LjYgMTEtMTguMyAyNS41LTM0LjkgNDMuNS03Mi4yIDAgMCAxNS45IDIyLjQgNy42IDcxLjEtMTIuNSA3My42IDUzLjggNTIuNSA1NC44IDUzLjUgMjIuOCAyNi44LTE3LjcgNzMuNS0yMS42IDc2LjYgNS41LTMuNyAxMTcuNy03OCAzMy0xODguMS02IDYtMTMuOCAzNC4yLTMwIDMwLjF6TTUxMSA4OS43Yy0xNC45LTE2LjktMjcuNC0yNS43LTM1LjktMjUuNy0zIC4xLTUuOSAxLjEtOC40IDIuOC0xLjkgMS45LTMuOCA0LjctMy44IDcuNCAwIDQuOCA1LjYgMTEuMyAxNiAyMS45IDQzLjIgNDEuNiA2NSA5Mi42IDY0LjggMTU0LjEtLjIgNjgtMjMgMTIyLjYtNjcuNSAxNjUtOS4zIDguNC0xMy4yIDE0LjktMTMuMiAyMC42IDAgMi43IDEuOSA1LjYgMy44IDguNCAyLjMgMi4yIDUuMiAzLjYgOC40IDMuOCAxMC4zIDAgMjQuNy0xMi4xIDQzLjUtMzUuOCAzNi42LTQ0LjkgNTMuMS05NC40IDU0LjEtMTYxLjlTNTUyLjUgMTM3IDUxMSA4OS43eiJdCiAgICB9OwogICAgZmFYVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4LXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxYiIsICJNMzU3LjIgNDhMNDI3LjggNDggMjczLjYgMjI0LjIgNDU1IDQ2NCAzMTMgNDY0IDIwMS43IDMxOC42IDc0LjUgNDY0IDMuOCA0NjQgMTY4LjcgMjc1LjUtNS4yIDQ4IDE0MC40IDQ4IDI0MC45IDE4MC45IDM1Ny4yIDQ4ek0zMzIuNCA0MjEuOGwzOS4xIDAtMjUyLjQtMzMzLjgtNDIgMCAyNTUuMyAzMzMuOHoiXQogICAgfTsKICAgIGZhU3RpY2tlck11bGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RpY2tlci1tdWxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZjciLCAiTTU2MS43IDE5OS42bDAgMHptLTYuMi03Ny40Yy03LjctMjIuMy01LjEtNy4yLTEzLjQtMzYuOS0xLjYtNi41LTMuNi0xNC41LTYuMi0yMC00LjQtOC43LTQuNi03LjUtNC42LTkuNSAwLTUuMyAzMC43LTQ1LjMgMTktNDYuOS01LjctLjYtMTIuMiAxMS42LTIwLjYgMTctOC42IDQuMi04IDUtMTAuMyA1LTIuNiAwLTUuNy0zLTYuMi01LTItNS43IDEuOS0yNS45LTMuNi0yNS45LTMuNiAwLTEyLjMgMjQuOC0xNyAyNS44LTUuMiAxLjMtMjcuOS0xMS40LTc1LjEgMTgtMjUuMyAxMy4yLTg2LjkgNjUuMi04NyA2NS4zLTYuNyA0LjctMjAgNC43LTM1LjUgMTYtNDQuNCAzMC4xLTEwOS42IDkuNC0xMTAuNyA5LTExMC42LTI2LjgtMTI4LTE1LjItMTU5IDExLjUtMjAuOCAxNy45LTIzLjcgMzYuNS0yNC4yIDM4LjktNC4yIDIwLjQgNS4yIDQ4LjMgNi43IDY0LjMgMS44IDE5LjMtMi43IDE3LjcgNy43IDk4LjMgLjUgMSA0LjEgMCA1LjEgMS41IDAgOC40LTMuOCAxMi4xLTQuMSAxMy0xLjUgNC41LTEuNSAxMC41IDAgMTYgMi4zIDguMiA4LjIgMzcuMiA4LjIgNDYuOSAwIDQxLjggLjQgNDQgMi42IDQ5LjQgMy45IDEwIDEyLjUgOS4xIDE3IDEyIDMuMSAzLjUtLjUgOC41IDEgMTIuNSAuNSAyIDMuNiA0IDYuMiA1IDkuMiAzLjYgMjcgLjMgMjkuOS0yLjUgMS42LTEuNSAuNS00LjUgMy4xLTUgNS4xIDAgMTAuOC0uNSAxNC40LTIuNSA1LjEtMi41IDQuMS02IDEuNS0xMC41LS40LS44LTctMTMuMy05LjgtMTYtMi4xLTItNS4xLTMtNy4yLTQuNS01LjgtNC45LTEwLjMtMTkuNC0xMC4zLTE5LjUtNC42LTE5LjQtMTAuMy00Ni4zLTQuMS02Ni44IDQuNi0xNy4yIDM5LjUtODcuNyAzOS42LTg3LjggNC4xLTYuNSAxNy0xMS41IDI3LjMtNyA2IDEuOSAxOS4zIDIyIDY1LjQgMzAuOSA0Ny45IDguNyA5Ny40LTIgMTEyLjItMiAyLjggMi0xLjkgMTMtLjUgMzguOSAwIDI2LjQtLjQgMTMuNy00LjEgMjkuOS0yLjIgOS43IDMuNCAyMy4yLTEuNSA0Ni45LTEuNCA5LjgtOS45IDMyLjctOC4yIDQzLjQgLjUgMSAxIDIgMS41IDMuNSAuNSA0LjUgMS41IDguNSA0LjYgMTAgNy4zIDMuNiAxMi0zLjUgOS44IDExLjUtLjcgMy4xLTIuNiAxMiAxLjUgMTUgNC40IDMuNyAzMC42IDMuNCAzNi41IC41IDIuNi0xLjUgMS42LTQuNSA2LjQtNy40IDEuOS0uOSAxMS4zLS40IDExLjMtNi41IC4zLTEuOC05LjItMTkuOS05LjMtMjAtMi42LTMuNS05LjItNC41LTExLjMtOC02LjktMTAuMS0xLjctNTIuNiAuNS01OS40IDMtMTEgNS42LTIyLjQgOC43LTMyLjQgMTEtNDIuNSAxMC4zLTUwLjYgMTYuNS02OC4zIC44LTEuOCA2LjQtMjMuMSAxMC4zLTI5LjkgOS4zLTE3IDIxLjctMzIuNCAzMy41LTQ3LjQgMTgtMjIuOSAzNC00Ni45IDUyLTY5LjggNi4xLTcgOC4yLTEzLjcgMTgtOCAxMC44IDUuNyAyMS42IDcgMzEuOSAxNyAxNC42IDEyLjggMTAuMiAxOC4yIDExLjggMjIuOSAxLjUgNSA3LjcgMTAuNSAxNC45IDkuNSAxMC40LTIgMTMtMi41IDEzLjQtMi41IDIuNi0uNSA1LjctNSA3LjItOCAzLjEtNS41IDcuMi05IDcuMi0xNi41IDAtNy43LS40LTIuOC0yMC42LTUyLjl6Il0KICAgIH07CiAgICBmYVR3aXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0d2l0Y2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFlOCIsICJNMzU5LjQgMTAzLjVsLTM4LjYgMCAwIDEwOS43IDM4LjYgMCAwLTEwOS43ek0yNTMuMiAxMDNsLTM4LjYgMCAwIDEwOS44IDM4LjYgMCAwLTEwOS44ek04OSAwbC05Ni41IDkxLjQgMCAzMjkuMiAxMTUuOCAwIDAgOTEuNCA5Ni41LTkxLjQgNzcuMyAwIDE3My44LTE2NC42IDAtMjU2LTM2Ni45IDB6TTQxNy4zIDIzNy44bC03Ny4yIDczLjEtNzcuMiAwLTY3LjYgNjQgMC02NC04Ni45IDAgMC0yNzQuMyAzMDguOSAwIDAgMjAxLjJ6Il0KICAgIH07CiAgICBmYUtpY2tzdGFydGVySyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJraWNrc3RhcnRlci1rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYmMiLCAiTTM1Ni43IDI1Ni4ybDQwLjgtNDAuNWM0Mi4yLTQxLjkgNDIuMi0xMTAuMyAwLTE1Mi4xcy0xMTEtNDEuOS0xNTMuMiAwTDIyOS4zIDc4LjRDMjA5LjYgNTAuMyAxNzcuMSAzMiAxNDAuMiAzMiA4MC41IDMyIDMyIDgwLjIgMzIgMTM5LjVsMCAyMzNjMCA1OS40IDQ4LjUgMTA3LjUgMTA4LjIgMTA3LjUgMzcuMSAwIDY5LjMtMTguMyA4OS00Ni40bDE0LjkgMTQuN2M0Mi4yIDQxLjkgMTExIDQxLjkgMTUzLjIgMHM0Mi4yLTExMC4zIDAtMTUyLjFsLTQwLjgtNDAgLjEgMHoiXQogICAgfTsKICAgIGZhQ3JpdGljYWxSb2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyaXRpY2FsLXJvbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjZjOSIsICJNMjI1LjggMGMuMyAuMiAyMTYuNiAxMjQuNSAyMTcuMSAxMjQuNyAzIDEuMiAzLjcgMy41IDMuNyA2LjYtLjEgODMuNC0uMSAxNjYuOSAwIDI1MC40IC4xIDEuMi0uMiAyLjQtLjggMy40cy0xLjUgMS45LTIuNiAyLjRjLTIxLjQgMTItMjA3LjkgMTE4LjMtMjE4LjkgMTI0LjZsLTMgMGMtNzkuMy00NS43LTIxOC4zLTEyNS40LTIxOC40LTEyNS41LS42LS4zLTEuMS0uNy0xLjQtMS4zcy0uNS0xLjItLjQtMS45YzAtLjkgMC0yMjUuOS0uMS0yNTMuMS0uMS0xIC4yLTIgLjctMi45czEuMy0xLjYgMi4yLTJDMjcuMiAxMTIuMSAyMTMuMiA2IDIyNC4xIDBsMS44IDB6TTIxNS40IDIwLjRsLS4yLS4yYy02NC43IDM2LjktMTI5LjUgNzMuNy0xOTQuMiAxMTAuNiAwIC4xIC4xIC4yIC4xIC40TDUyIDE0Mi45Yy03LjcgNi04LjMgNi0xMC42IDUuMS0uMSAwLTI0LjItOS4zLTI2LjgtMTBsMCAyMzAuNGMuOS0xLjQgNjQuMS0xMTAuOSA2NC4xLTExMSAxLjYtMi44IDMtMS45IDkuMS0xLjUgMS40IC4xIDEuNSAuMiAuOCAxLjQtNDEuMiA3MS4zLTM2LjQgNjMtNjcuNSAxMTYuOS0uOCAxLjQtLjYgMS4xIDEuMiAxLjFsMTg2LjUgMGMxLjQgMCAxLjctLjIgMS43LTEuNmwwLTguOWMwLTEuMyAyLjQtLjgtMTguNC0xLTcuNS0uMS0xNC4xLTMuMi0yMS40LTEyLjctNy40LTkuNy0xNC42LTE5LjQtMjEuOC0yOS4yLTIuMy0zLjEtMy40LTIuNC0xNi44LTIuNC0xLjggMC0xLjggMC0xLjggMS44IC4zIDI2LjIgLjIgMjUuMyAxIDMyLjcgLjUgNC40IDIuMiA0LjIgOS43IDQuOCAzLjEgLjMgMy45IDQuMSAuNSA0LjktMS42IC40LTMxLjYgLjUtMzMuNy0uMS0uNS0uMS0xLS41LTEuMy0uOXMtLjUtMS0uNC0xLjYgLjMtMS4xIC42LTEuNSAuOS0uNyAxLjQtLjhjMy4zLS44IDYuMiAuOCA2LjctNC40IDEuMy0xMy43IDEuMi05IDEuMS03OS40IDAtMTAuOC0uNC0xMi42LTUuNC0xMy42LTEuMi0uMi0zLjUtLjItNC43LS42LTIuOS0xLTItNC44IDEuOC00LjggMzMuNyAwIDQ2LjEtMS4xIDU2LjEgNC45IDcuNyA0LjYgMTIgMTEuNSAxMi41IDIwLjQgLjkgMTQuNi02LjUgMjIuMy0xNSAzMi42LS4yIC4xLS4zIC4zLS40IC41cy0uMSAuNC0uMSAuNiAwIC40IC4xIC42IC4yIC40IC40IC41YzIuNiAzLjIgNSA2LjYgNy43IDkuOCAyNy42IDMzLjIgMjQuMSAzMC41IDQxLjMgMzMuMSAuOSAuMSAxLS40IDEtMS4ybDAtMTFjMC0xIC4zLTEuNCAxLjQtMS4zIDcuOCAxLjIgMTUuOCAxLjEgMjMuNi0uMyAxLjEtLjEgMS41IC4yIDEuNSAxLjMgMCAuMSAuOSAyNi43IC45IDI2LjggMCAxLjUgLjcgMS42IDEuOSAxLjZsMTg2LjcgMGMtMjcuMi00Ny01NC4yLTk0LTgxLjItMTQwLjggMi4zLS43LS40IDAgNi43LTEuNCAyLS40IDIuMS0uNCAzLjEgMS40IDcuMyAxMi42IDc3LjMgMTM0IDc3LjQgMTM0LjFsMC0yMzAuNGMtMS43IC41LTEwMy4zIDM4LjctMTA1LjggMzkuNy0xLjEgLjQtMS41IC4yLTEuOS0uOS0uNi0xLjktMS4zLTMuOC0yLjEtNS42LS4zLS44LS4xLTEuMSAuNi0xLjQgLjEgMCA5NS41LTM1LjggMTAzLTM4LjgtNjUuNC0zNy42LTEzMC42LTc1LTE5Ni0xMTIuNmw4Ni44IDE1MC40LS4zIC4zYy05LjYtLjktMTAuNS0xLjYtMTEuOC0zLjktMS0xLjctNzMuNS0xMjcuNy04Mi0xNDIuMi05LjEgMTQuNy04My42IDE0Ni4yLTg1LjQgMTQ2LjMtMi45IC4yLTUuOSAuMS05LjIgLjEgMjguOC00OS44IDU3LjYtOTkuNSA4Ni4yLTE0OWwwIDB6bTUxLjkgMTI5LjljMS45LS4xIDMuNy0uNCA1LjUtLjggMS43LS4zIDIuNSAuMiAyLjYgMS45IDAgLjEgLjEgMTkuMS0uOSAyMC41cy0xLjkgMS4yLTIuNi0uMmMtNS05LjcgNi4yLTkuNy0zOS4xLTEyLS43IDAtMSAuMi0xIC45IDAgLjEgMy43IDEyMiAzLjcgMTIyLjEgMCAuOSAuNSAxLjIgMS4yIDEuNSAzIDEuMiA1LjkgMi41IDguNyA0IDcuMyA0LjMgMTEuNCAxMC44IDEyLjQgMTkuMyAxLjQgMTEuOC0yLjggMzUuOC0zMi4yIDM3LjEtMi44IC4xLTI4LjMgMS4xLTM0LjEtMjMuMy00LjctMTkuMyA4LjMtMzIuNyAxOS45LTM2LjQgLjYtLjEgMS4yLS40IDEuNS0uOXMuNS0xLjEgLjUtMS43Yy4xLTUuNiAzLTEwNy4xIDMuNy0xMjEuMyAwLTEuMS0uNi0xLjItMS40LTEuMS0zMi4zIC41LTM2LjctLjMtNDAuMiA4LjUtMi40IDYuMi00LjEgMS4zLTQgLjIgMS4xLTYgMi4yLTEyIDMuMy0xOCAuNC0yLjEgMS40LTIuNiAzLjQtMS45IDUuNiAyLjEgNi43IDEuNyAzNy4yIDEuOSAxLjcgMCAxLjgtLjEgMS44LTEuOCAuNy0yNy41IC42LTIyLjYgMS0yOS42IC4xLS42LS4xLTEuMi0uMy0xLjdzLS43LS45LTEuMy0xLjFjLTUuNi0yLjktOC44LTcuNi04LjktMTMuOS0uNC0xNC44IDE3LjctMjEuNyAyNy40LTExLjUgNi44IDcuMiA1LjggMTguOS0yLjUgMjQuMi0uOCAuNC0xLjQgMS4xLTEuOCAxLjhzLS42IDEuNi0uNCAyLjVjMCAuNi0uMS00LjMgMSAzMCAwIC45IC40IDEuMSAxLjIgMS4xIC4xIDAgMjMtLjEgMzQuNS0uNGwwLS4xek02OC4zIDE0MS43YzE5LjgtNC41IDMyLjctLjYgNTIuNSAxLjcgMi44IC4zIDMuNyAxLjIgMy42IDQtLjIgNS0xLjIgMjIuMy0xLjIgMjMuMSAwIC41LS4yIDEtLjUgMS40cy0uNyAuNy0xLjIgLjljLTQuMSAxLjctMy42LTQuNC00LTcuMy0zLjEtMjIuNC03My45LTMyLjctNzQuNiAyNS40LS4zIDIzLjkgMTcgNTMuNiA1NC4xIDUwLjkgMjcuMi0yIDE5LTIwLjIgMjQuOC0yMC41IC40LS4xIC45IDAgMS4zIC4xcy44IC40IDEuMSAuNyAuNSAuNyAuNiAxLjIgLjEgLjkgMCAxLjNjLTEuOCAxMC44LTMuNCAxOS0zLjQgMTkuMi0xLjUgOS4yLTg2LjcgMjIuMS05My40LTQyLjEtMi43LTI1LjggMTAuNC01My40IDQwLjMtNjAuMnptODAgODcuN2wtMTkuNSAwYy0uNiAwLTEuMi0uMS0xLjYtLjRzLS44LS44LTEtMS40YzIuNC0zLjggNS45IC45IDUuOS02LjEtLjEtMjUuOCAuMi0zOCAuMi00MC4xIDAtMy40LS41LTQuNi0zLjMtNC45LTctLjctMy4xLTMuNC0xLjEtMy40IDExLjgtLjEgMjIuNi0uMiAzMCAuNyA4LjggMS4xIDE2LjcgMTIuNiA3LjkgMjIuNi0yIDIuMi00IDQuNC02LjEgNi43IDEgMS4yIDYuOSA4LjggMTcuMyAxOS43IDIuNyAyLjggNi4yIDMuNSA5LjkgMy4xIC42IDAgMS4xLS4yIDEuNS0uNnMuNy0uOSAuNy0xLjVjLjMtMy40IC4zIDQuNyAuNC00MC42IDAtNS42LS4zLTYuNi0zLjItNi44LTQtLjQtNC0yLjMtLjctMy40bDE5LjEtLjFjLjMgMCA0LjUgLjUgMSAzLjQgMCAwLS4yIDAtLjIgMC0zLjYgLjMtMy45IDEtNCA0LjYtLjMgNDMuOSAuMSA0MC4yIC40IDQyLjggLjEgLjggLjMgMi4yIDUuMSAyLjEgMi41IDAgMy45IDMuNCAwIDMuNC0xMC40IC4xLTIwLjcgMC0zMS4xIC4xLTEwLjcgMC0xMy41LTYuMi0yNC4yLTIwLjgtMS42LTIuMi04LjMtMi40LTguMi0uNCAuOSAxNi41IDAgMTcuOCA0IDE3LjcgNC44LS4xIDQuNyAzLjYgLjggMy41bC4xIDB6bTI3NS0xMC4xYy0xLjIgNy4xIC4yIDEwLjQtNS4zIDEwLjMtNjEuNS0uNC00Ny44LS4yLTUwLjctLjMtMS4yLS4xLTIuNC0uNC0zLjYtLjctMi41LS42IDEuNS0xLjItLjQtNS42LTEuNC0zLjQtMi44LTYuOC00LjEtMTAuMi0uMS0uNC0uNC0uOC0uNy0xLjFzLS44LS40LTEuMy0uNGMtNC45LS4yLTkuNy0uMi0xNC42IC4xLS4zIDAtLjYgLjItLjkgLjNzLS41IC40LS43IC43Yy0xLjYgMy42LTMuMSA3LjMtNC41IDExLTEuMyAzLjIgNy45IDEuMyAxMi4yIDIuMiAzIC42IDQuNSAzLjcgLjcgMy43bC0yNi40IDBjLTIuOSAwLTMuMS0zLjItLjctMy4yIDEuMiAuMSAyLjQtLjIgMy41LS45czEuOS0xLjUgMi40LTIuNmMxLjUtMyAyLjgtNiA0LjEtOS4xIDE4LjItNDIuMSAxNy4xLTQwLjIgMTguNC00MS42IC4yLS4yIC40LS40IC43LS42cy42LS4yIC44LS4yIC42IC4xIC44IC4yIC41IC4zIC43IC42YzIuOSAzLjMgMTguNCA0NC43IDIzLjYgNTEuOSAyIDIuNyA1LjcgMiA2LjQgMiAzLjYgLjEgNC0xLjEgNC4xLTQuMyAuMS0xLjkgLjEgMS4yIC4xLTQxLjIgMC00LjUtMi40LTMuNy01LjYtNC4zLS4zIDAtMi42LS42LS4xLTMuMSAuMi0uMi0uOS0uMiAyMS43LS4yIDIuMyAwIDUuMyAyLjgtMS4yIDMuNC0uNCAwLS43IDAtMS4xIC4ycy0uNiAuMy0uOSAuNi0uNCAuNi0uNiAuOS0uMiAuNy0uMSAxLjFjLS4xIDEuNi0uMiAzOC45IC4zIDQxLjIgLjIgLjcgLjYgMS40IDEuMiAxLjhzMS4zIC43IDIuMSAuNmMxMy4zIC40IDE0LjkgLjQgMTYtMy40IDEuNy01LjggNC4xLTIuNSAzLjctLjJsMCAuMXpNMzE4LjYgMjgzLjZjLTQuMiAwLTQuNC0zLjQtLjYtMy40IDM1LjktLjIgMjguMSAuNCAzNy4yLS42IDEuNy0uMiAyLjQgLjIgMi4zIDEuOS0uMyAzLjQtLjYgNi44LTEgMTAuMi0uMiAyLjItMy4yIDIuNi0zLjQtLjItLjQtNS4zLTIuMi00LjUtMTUuNi01LjEtMS42LS4xLTEuNiAwLTEuNiAxLjVsMCAxNi4xYzAgMS43IDAgMS42IDEuNiAxLjUgMy4xLS4yIDEwLjMgLjMgMTUuNy0xLjUgLjUtLjIgMy4zLTEuOCAzLjEgMS44IDAgLjItLjggMTAuNC0xLjIgMTEuNC0uNSAxLjMtMS45IDEuNS0yLjYgLjMtMS4yLTIgMC01LjEtMy43LTUuMy0xNS40LS45LTEyLjktMi41LTEyLjkgNiAwIDEyLjMtLjggMTYuMSAzLjkgMTYuMiAxNi42IC41IDE0LjQgMCAxNi40LTUuNyAuOC0yLjQgMy41LTEuOCAzLjIgLjYtLjQgMy4yLS44IDYuNC0xLjIgOS42IDAgLjQtLjIgMi40LTQuNyAyLjQtMzcuMi0uMS0zNC41LS4yLTM1LjItLjMtMi43LS41LTIuMi0zIC4yLTMuNCAxLjEtLjIgNCAuNSA0LjItMi42IDIuNC01Ni4yLS4xLTUxLjMtMy45LTUxLjNsMCAwem0tLjQtMTA5LjVjMi41IC42IDMuMSAxLjggMyA0LjYtLjMgNS4zLS4zIDktLjYgOS43LS43IDIuMi0zLjEgMi4xLTMuMy0uMy0uNC00LjgtMy03LjgtNy42LTkuMS0yNi4zLTcuNy0zMi44IDE1LjUtMjcuMiAzMC4yIDUuOSAxNS40IDIyIDE1LjkgMjguOSAxMy44IDUuOS0xLjkgNS45LTYuNSA2LjktNy42IDEuMi0xLjMgMi4yLTEuOCAzLjEgMS4xIDAgLjEgLjYgMTEuOS02IDEyLjctMS42IC4yLTE5LjQgMy43LTMyLjctMy40LTIxLTExLjItMTYuNy0zNS41LTYuOS00NS4zIDE0LTE0LjEgMzkuOS03LjEgNDIuMy02LjVsMCAwek0yODkuOCAyODAuMWMzLjMgMCAzLjcgMyAuMiAzLjQtMi42IC4zLTUtLjQtNSA1LjUgMCAyLS4yIDI5IC40IDQxLjQgLjEgMi4zIDEuMiAzLjUgMy40IDMuNyAyMiAxLjIgMTUtMS43IDE4LjgtNi4zIDEuOC0yLjIgMi44IC44IDIuOCAxLjEgLjMgMTMuNi00IDEyLjQtNS4yIDEyLjRsLTM4LjItLjJjLTEuOS0uMi0yLjEtMy0uNC0zLjQgMi0uNSA0LjkgLjQgNS4xLTIuOCAxLTE1LjkgLjYtNDQuNiAuMy00Ny44LS4zLTMuOC0yLjgtMy4zLTUuNy0zLjctMi41LS40LTItMy4yIC4zLTMuMiAxLjQgMCAxOCAwIDIzLjEgMHptLTMxLjYtNTcuOGMuMSA0LjEgMi45IDMuNSA2IDMuNiAyLjYgLjEgMi41IDMuNC0uMSAzLjQtNi41IDAtMTMuNyAwLTIxLjYtLjEtMy44IDAtMy40LTMuNCAwLTMuNCA0LjUgMCAzLjIgMS42IDMuNC00NS41IDAtNS4xLTMuMy0zLjUtNC43LTQuMi0yLjYtMS4yLTEuNC0zLjEgLjQtMy4yIDEuMyAwIDIwLjItLjQgMjEuMiAuMnMxLjkgMS42LS40IDIuOWMtMSAuNS0zLjktLjMtNC4yIDIuNSAwIC4yLS44IDEuNi0uMSA0My44bDAgMHpNMjIxLjMgNDk2LjZjLjUgLjMgMSAuNSAxLjYgLjVzMS4xLS4yIDEuNi0uNWMxNy05LjggMTgyLTEwMy42IDE5Ny40LTExMi41LS4xLS40IDExLjMtLjItMTgxLjUtLjMtMS4yIDAtMS42IC40LTEuNSAxLjYgMCAuMSAxLjMgNDQuNSAxLjIgNTAuNC0uMSAyLjYtLjYgNS4yLTEuNCA3LjctLjYgMS44IC40LS41LTEzLjUgMzIuMi0uNyAxLjctMSAyLjItMi0uMS00LjItMTAuMy04LjMtMjAuNy0xMi42LTMxLTEuNS0zLjQtMi4yLTcuMS0yLTEwLjggLjItMi41IC44LTE2LjEgMS41LTQ4IDAtMS45IDAtMi0yLTJsLTE4MyAwYzIuNiAxLjYgMTc4LjMgMTAyLjYgMTk2IDExMi44bC4xIDB6TTEzMC40IDMwNy45YzAgMi40IC40IDIuOCAyLjggMyAxMS41IDEuMiAyMSAzLjcgMjUuNi03LjMgNi0xNC41IDIuNy0zNC40LTEyLjUtMzguOC0yLS42LTE2LTIuOC0xNS45IDEuNSAwIDggMCAxMS42IDAgNDEuNnptMTA1LjgtMTVjMCAyLjEgMS4xIDM4LjcgMS4xIDM5LjEgLjMgOS45LTI1LjYgNS44LTI1LjItMi42IC4xLTIgMS40LTM3LjQgMS4xLTM5LjQtMTQuMSA3LjQtMTQuNCA0MC4yIDYuNCA0OC44IDQgMS43IDguNCAxLjkgMTIuNSAuNnM3LjYtNCA5LjktNy43YzQuOS03LjggNi44LTI5LjUtNS40LTM5LS4xIC4xLS4yIC4xLS40IC4xbDAgMHptLTEyLjMtMTk4Yy05LjggMC05LjcgMTQuOC0uMSAxNC45czEwLjEtMTQuOSAuMS0xNC45bDAgMHpNMTQzLjcgMTk4LjZjMCAxLjggLjQgMi40IDIuMiAyLjYgMTMuNiAxLjQgMTIuNS0xMSAxMi4yLTEzLjQtMS43LTExLjItMTQuNC0xMC4yLTE0LjQtNy44IDAgNC41IDAgMTMuNyAwIDE4LjZ6TTM1NiAyMDVsLTYuMS0xNS44Yy0yLjIgNS41LTQuMiAxMC42LTYuMiAxNS44bDEyLjMgMHoiXQogICAgfTsKICAgIGZhU3RlYW1TeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RlYW0tc3ltYm9sIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjYiLCAiTTI3My41IDE3Ny41YTYxIDYxIDAgMSAxIDEyMiAwIDYxIDYxIDAgMSAxIC0xMjIgMHptMTc0LjUgLjJjMCA2My01MSAxMTMuOC0xMTMuNyAxMTMuOEwyMjUgMzcxLjNjLTQgNDMtNDAuNSA3Ni44LTg0LjUgNzYuOC00MC41IDAtNzQuNy0yOC44LTgzLTY3TDAgMzU4IDAgMjUwLjcgOTcuMiAyOTBjMTUuMS05LjIgMzIuMi0xMy4zIDUyLTExLjVsNzEtMTAxLjdDMjIwLjcgMTE0LjUgMjcxLjcgNjQgMzM0LjIgNjQgMzk3IDY0IDQ0OCAxMTUgNDQ4IDE3Ny43ek0yMDMgMzYzYzAtMzQuNy0yNy44LTYyLjUtNjIuNS02Mi41LTQuNSAwLTkgLjUtMTMuNSAxLjVsMjYgMTAuNWMyNS41IDEwLjIgMzggMzkgMjcuNyA2NC41LTEwLjIgMjUuNS0zOS4yIDM4LTY0LjcgMjcuNS0xMC4yLTQtMjAuNS04LjMtMzAuNy0xMi4yIDEwLjUgMTkuNyAzMS4yIDMzLjIgNTUuMiAzMy4yIDM0LjcgMCA2Mi41LTI3LjggNjIuNS02Mi41ek00MTAuNSAxNzcuN2E3Ni40IDc2LjQgMCAxIDAgLTE1Mi44IDAgNzYuNCA3Ni40IDAgMSAwIDE1Mi44IDB6Il0KICAgIH07CiAgICBmYU1haWxjaGltcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYWlsY2hpbXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU5ZSIsICJNMzMxIDI0My41YzMuMS0uNCA2LjItLjQgOS4zIDAgMS43LTMuOCAyLTEwLjQgLjUtMTcuNi0yLjItMTAuNy01LjMtMTcuMS0xMS41LTE2LjFzLTYuNSA4LjctNC4yIDE5LjRjMS4zIDYgMy41IDExLjEgNiAxNC4zbDAgMHpNMjc3LjQgMjUyYzQuNSAyIDcuMiAzLjMgOC4zIDIuMSAxLjktMS45LTMuNS05LjQtMTIuMS0xMy4xLTUtMi4xLTEwLjQtMi44LTE1LjgtMi4ycy0xMC41IDIuNy0xNC44IDUuOGMtMyAyLjItNS44IDUuMi01LjQgNy4xIC45IDMuNyAxMC0yLjcgMjIuNi0zLjUgNy0uNCAxMi44IDEuOCAxNy4zIDMuN2wwIDB6bS05IDUuMWMtOS4xIDEuNC0xNSA2LjUtMTMuNSAxMC4xIC45IC4zIDEuMiAuOCA1LjItLjggNi0yLjMgMTIuNC0yLjkgMTguNy0xLjkgMi45IC4zIDQuMyAuNSA0LjktLjUgMS41LTIuMi01LjctOC0xNS40LTYuOWwwIDB6bTU0LjIgMTcuMWMzLjQtNi45LTEwLjktMTMuOS0xNC4zLTdzMTAuOSAxMy45IDE0LjMgN2wwIDB6bTE1LjctMjAuNWMtNy43LS4xLTggMTUuOC0uMyAxNS45czgtMTUuOCAuMy0xNmwwIDB6TTExOS41IDMzMi43Yy0xLjMgLjMtNiAxLjUtOC41LTIuMy01LjItOCAxMS4xLTIwLjQgMy0zNS44LTkuMS0xNy41LTI3LjgtMTMuNS0zNS01LjUtOC43IDkuNi04LjcgMjMuNS01IDI0LjEgNC4zIC42IDQuMS02LjUgNy40LTExLjYgLjktMS40IDIuMS0yLjYgMy41LTMuNnMzLTEuNiA0LjYtMiAzLjQtLjQgNSAwIDMuMyAxIDQuNyAxLjljMTEuNiA3LjYgMS40IDE3LjggMi4zIDI4LjYgMS40IDE2LjcgMTguNCAxNi40IDIxLjYgOSAuMi0uNCAuMy0uOCAuMy0xLjJzLS4yLS44LS41LTEuMWMwIC45IC43LTEuMy0zLjQtLjRsMCAwem0yOTkuNy0xNy4xYy0zLjMtMTEuNy0yLjYtOS4yLTYuOC0yMC41IDIuNC0zLjcgMTUuMy0yNC0zLjEtNDMuMy0xMC40LTEwLjktMzMuOS0xNi41LTQxLjEtMTguNS0xLjUtMTEuNCA0LjYtNTguNy0yMS41LTgzIDIwLjgtMjEuNiAzMy44LTQ1LjMgMzMuNy02NS43LS4xLTM5LjItNDguMi01MS0xMDcuNC0yNi41bC0xMi41IDUuM2MtLjEgMC0yMi43LTIyLjMtMjMuMS0yMi42LTY3LjUtNTguOS0yNzguOCAxNzUuOS0yMTEuMyAyMzIuOWwxNC44IDEyLjVjLTQgMTAuNy01LjQgMjIuMi00LjEgMzMuNSAzLjQgMzMuNCAzNiA2MC40IDY3LjUgNjAuNCA1Ny43IDEzMy4xIDI2Ny45IDEzMy4zIDMyMi4zIDMgMS43LTQuNSA5LjEtMjQuNiA5LjEtNDIuNHMtMTAuMS0yNS4zLTE2LjUtMjUuM2wwIDB6bS0zMTYgNDguMmMtMjIuOC0uNi00Ny41LTIxLjEtNDkuOS00NS41LTYuMi02MS4zIDc0LjMtNzUuMyA4NC0xMi4zIDQuNSAyOS42LTQuNyA1OC41LTM0LjEgNTcuOGwwIDB6TTg0LjcgMjQ5LjZjLTE1LjIgMy0yOC41IDExLjUtMzYuNyAyMy41LTQuOS00LjEtMTQtMTItMTUuNi0xNS0xMy0yNC44IDE0LjItNzMgMzMuMy0xMDAuMiA0Ny4xLTY3LjIgMTIwLjktMTE4LjEgMTU1LTEwOC45IDUuNSAxLjYgMjMuOSAyMi45IDIzLjkgMjIuOXMtMzQuMSAxOC45LTY1LjggNDUuM0MxMzYuMiAxNTAgMTA0IDE5Ny43IDg0LjcgMjQ5LjZ6TTMyMy42IDM1MC43cy0zNS43IDUuMy02OS41LTcuMWM2LjItMjAuMiAyNyA2LjEgOTYuNC0xMy44IDE1LjMtNC40IDM1LjQtMTMgNTEtMjUuNCAzLjQgNy44IDUuOCAxNS45IDcuMSAyNC4zIDMuNy0uNyAxNC4yLS41IDExLjQgMTguMS0zLjMgMTkuOS0xMS43IDM2LTI1LjkgNTAuOC04LjkgOS42LTE5LjQgMTcuNS0zMS4yIDIzLjMtNi41IDMuNC0xMy4zIDYuMy0yMC4zIDguNi01My41IDE3LjUtMTA4LjMtMS43LTEyNi00My0xLjQtMy4xLTIuNi02LjQtMy42LTkuNy03LjUtMjcuMi0xLjEtNTkuOCAxOC44LTgwLjQgMS4yLTEuMyAyLjUtMi45IDIuNS00LjgtLjItMS43LS44LTMuMy0xLjktNC41LTctMTAuMS0zMS4yLTI3LjQtMjYuMy02MC44IDMuNS0yNCAyNC41LTQwLjkgNDQuMS0zOS45bDUgLjNjOC41IC41IDE1LjkgMS42IDIyLjkgMS45IDExLjcgLjUgMjIuMi0xLjIgMzQuNi0xMS42IDQuMi0zLjUgNy42LTYuNSAxMy4zLTcuNSAyLjMtLjYgNC43LS43IDctLjNzNC42IDEuMiA2LjYgMi41YzEwIDYuNiAxMS40IDIyLjcgMTEuOSAzNC41IC4zIDYuNyAxLjEgMjMgMS40IDI3LjYgLjYgMTAuNyAzLjQgMTIuMiA5LjEgMTQgMy4yIDEgNi4yIDEuOCAxMC41IDMuMSAxMy4yIDMuNyAyMSA3LjUgMjYgMTIuMyAyLjUgMi41IDQuMiA1LjggNC43IDkuMyAxLjYgMTEuNC04LjggMjUuNC0zNi4zIDM4LjItNDYuNyAyMS43LTkzLjcgMTQuNC0xMDAuNSAxMy43LTIwLjItMi43LTMxLjYgMjMuMy0xOS41IDQxLjEgMjIuNiAzMy40IDEyMi40IDIwIDE1MS40LTIxLjQgLjctMSAuMS0xLjYtLjctMS00MS44IDI4LjYtOTcuMSAzOC4yLTEyOC41IDI2LTQuOC0xLjgtMTQuNy02LjQtMTUuOS0xNi43IDQzLjYgMTMuNSA3MSAuNyA3MSAuN3MyLTIuOC0uNi0yLjV6TTE3MS43IDE1Ny41YzE2LjctMTkuNCAzNy40LTM2LjIgNTUuOC00NS42IC4xLS4xIC4zLS4xIC41LS4xcy4zIC4xIC40IC4yIC4yIC4zIC4yIC40IDAgLjMtLjEgLjVjLTEuNSAyLjctNC4zIDguMy01LjIgMTIuNyAwIC4xIDAgLjMgMCAuNHMuMiAuMyAuMyAuNCAuMyAuMSAuNCAuMSAuMyAwIC40LS4xYzExLjUtNy44IDMxLjUtMTYuMiA0OS0xNy4zIC4yIDAgLjMgMCAuNSAuMXMuMiAuMiAuMyAuNCAuMSAuMyAwIC41LS4xIC4zLS4zIC40Yy0yLjkgMi4yLTUuNSA0LjgtNy43IDcuNy0uMSAuMS0uMSAuMi0uMSAuNHMwIC4zIC4xIC40IC4yIC4yIC4zIC4zIC4yIC4xIC40IC4xYzEyLjMgLjEgMjkuNyA0LjQgNDEgMTAuNyAuOCAuNCAuMiAxLjktLjYgMS43LTY5LjUtMTUuOS0xMjMuMSAxOC41LTEzNC41IDI2LjgtLjIgLjEtLjMgLjEtLjUgLjFzLS4zLS4xLS41LS4yLS4yLS4zLS4yLS41IC4xLS40IC4yLS41bC0uMSAweiJdCiAgICB9OwogICAgZmFMdW1vbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsdW1vbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2UyIiwgIk00NTIuNSAyMjMuNWM5LjggMCAxNi41IDYuMyAxNi41IDE2LjZsMCAzMS44YzAgMTAuMy02LjYgMTYuNi0xNi42IDE2LjZsLTU2LjIgMGMtOS44IDAtMTYuNS02LjMtMTYuNS0xNi42bDAtMzEuOGMwLTEwLjMgNi43LTE2LjYgMTYuNS0xNi42bDU2LjMgMHptLTI1LjcgMTMuMWMtMS41LTIuNi0zLjItMi42LTQuNiAwbC0xMC43IDE3LjZjLTEuNyAyLjQtMi42IDUuMS0yLjYgOC4yIDAgNy45IDYuOSAxNC42IDE1LjYgMTQuNiA4LjUgMCAxNS42LTYuNyAxNS42LTE0LjYgMC0zLTEtNS44LTIuNy04LjJsLTEwLjctMTcuNnpNODUuOCAyMjMuOGMxIDAgMS41IC42IDEuNSAxLjVsMCA1MC4zIDY0LjYgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA5LjdjMCAuOS0uNiAxLjUtMS42IDEuNWwtNzguNCAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwem04OC4zIDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNDVjMCA0IDIgNS4yIDUuNyA1LjJsNDYuOSAwYzMuOCAwIDUuNy0xLjMgNS43LTUuMmwwLTQ1YzAtLjkgLjUtMS41IDEuNS0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDQ2YzAgMTAuNS01LjMgMTYuOC0xNy42IDE2LjhsLTU0IDBjLTEyLjMgMC0xNy42LTYuMy0xNy42LTE2LjhsMC00NmMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptMTA4LjIgMGMxIDAgMS42IC41IDIuMiAxLjRsMzAuNSA0Ni40IDEuNCAwIDMwLjUtNDYuNGMuNi0uOSAxLjItMS40IDIuMi0xLjRsMTggMGMxIDAgMS41IC42IDEuNSAxLjVsMCA2MS40YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNDMuOC0xLjEgMC0yOC43IDQzLjhjLS42IC45LTEuMyAxLjUtMi40IDEuNWwtMTAuNyAwYy0xIDAtMS43LS42LTIuMy0xLjVsLTI4LjctNDMuOC0xLjEgMCAwIDQzLjhjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTcuOSAwem0yMTQuNCAwYy45IDAgMS4zIC40IDIuMiAxLjFsNTIuNyA0Ni4zIDEuMyAwIDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgNjEuNGMwIC45LS42IDEuNS0xLjYgMS41bC0xNC40IDBjLTEgMC0xLjQtLjQtMi4zLTEuMWwtNTIuNi00Ni4zLTEuNCAwIDAgNDZjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTQuNCAwek0zMjAgMTE0LjFjODcuOSAwIDE2Ny43IDE1LjcgMjI1LjUgNDFsMi43IDEuMkM1ODcuMSAxNzMuOCA2NDAgMjA2LjUgNjQwIDI1NnMtNTIuOSA4Mi4yLTkxLjggOTkuNmwtMi43IDEuMmMtNTcuOCAyNS40LTEzNy42IDQxLTIyNS41IDQxLTc2LjIgMC0xNTUuMS0xMC41LTIyNS41LTQxLTM5LjYtMTcuNC05NC41LTUwLjMtOTQuNS0xMDAuOHM1NC45LTgzLjUgOTQuNS0xMDAuOGM3MC40LTMwLjUgMTQ5LjMtNDEgMjI1LjUtNDF6bS04OC45IDIyOWMyMC4zIDI5IDUyLjggNDkuNiA4OC45IDQ5LjYgMzYuMiAwIDY4LjctMjAuNiA4OS00OS43bC0xNzcuOSAuMXptLTk2LjEgMGM0My4zIDI5LjcgOTYuNyA0My41IDE0OC40IDQ4LTI0LjItOS4xLTQ0LjQtMjYuNy01OC42LTQ4LjFsLTg5LjkgMHptMjgwLjMtLjFjLTE0LjIgMjEuNC0zNC40IDM5LjEtNTguNiA0OC4xIDUxLjgtNC41IDEwNS4zLTE4LjMgMTQ4LjYtNDguMmwtOTAgMHptLTMzNy40IC4xYzQ0LjEgMjMuMSA5My43IDM1LjQgMTQyLjcgNDIuNi0zMy40LTguNi02Ni41LTIxLjktOTQuNC00Mi42bC00OC4zIDB6bTQzNi4yLS4yYy0yNy45IDIwLjgtNjEuMSAzNC4yLTk0LjYgNDIuOCA0Ny4zLTYuOSA4OS42LTE4LjUgMTIzLjktMzMuNmwxLjctLjhjNi4xLTIuNyAxMS45LTUuNSAxNy40LTguNGwtNDguNSAwek01MjAgMTczLjZjMTAuNyA4LjcgMTkuOCAxOC4xIDI3IDI4LjIgLjQgLjYgLjUgMS4zIC4xIDJzLTEgMS0xLjcgMWwtMS42IDBjLS42IDAtMS4yLS4zLTEuNS0uOC03LjktMTAuOS0xOC4yLTIxLjEtMzAuNi0zMC40bC05My41IDBjNS40IDguOCA5LjkgMTguNSAxMy40IDI4LjYgLjIgLjYgLjEgMS4yLS4yIDEuN3MtLjkgLjgtMS42IC44bC0xLjQgMGMtLjggMC0xLjUtLjUtMS44LTEuMy0zLjgtMTAuNy04LjctMjAuOC0xNC41LTI5LjlsLTE4NC4zIC4xYy01LjggOS4xLTEwLjcgMTkuMS0xNC40IDI5LjgtLjMgLjgtMSAxLjMtMS44IDEuM2wtMS40IDBjLS42IDAtMS4yLS4zLTEuNi0uOHMtLjUtMS4xLS4yLTEuN2MzLjUtMTAuMiA4LTE5LjcgMTMuNC0yOC42bC05My42IDBjLTEyLjMgOS4zLTIyLjYgMTkuNC0zMC40IDMwLjMtLjQgLjUtLjkgLjgtMS41IC44bC0xLjYgMGMtLjcgMC0xLjQtLjQtMS43LTFzLS4zLTEuNCAuMS0yYzcuNi0xMC41IDE2LjctMTkuOSAyNi44LTI4bC01MSAwYy0yOC45IDE2LjYtNjIgNDMuMy02My41IDc5LjdsNDQuNyAwYy41IDAgMSAuMiAxLjMgLjZzLjYgLjggLjYgMS4zbDAgMS4zYzAgMS4xLS45IDEuOS0xLjkgMS45bC00NC43IDBDNi44IDI5NSA0MCAzMjEuNyA2OSAzMzguM2w1MC45IDBjLTEwLjMtOC40LTE5LjEtMTcuNC0yNi4xLTI3bC0uOC0xLjFjLS40LS42LS41LTEuMy0uMS0yczEtMSAxLjctMWwxLjYgMCAuMiAwYy41IC4xIDEgLjMgMS4zIC44IDcuOSAxMC45IDE4LjEgMjEgMzAuNSAzMC4zbDkzLjYgMGMtNS4zLTguOC05LjgtMTguNC0xMy40LTI4LjUtLjItLjYtLjEtMS4yIC4yLTEuN3MuOS0uOCAxLjYtLjhsMS40IDAgLjIgMGMuNyAuMSAxLjQgLjYgMS43IDEuMyAzLjggMTAuNyA4LjYgMjAuNyAxNC40IDI5LjhsMTg0LjUtLjFjNS44LTkuMSAxMC42LTE5LjEgMTQuNC0yOS43bC4xLS4xYy4zLS43IDEtMS4xIDEuNy0xLjFsMS40IDBjLjYgMCAxLjIgLjMgMS42IC44cy41IDEuMiAuMiAxLjdjLTMuNSAxMC4xLTggMTkuNy0xMy4zIDI4LjVsOTMuNyAwYzEyLjMtOS4zIDIyLjUtMTkuNCAzMC4zLTMwLjJsLjEtLjJjLjQtLjQgLjktLjYgMS40LS42bDEuNiAwYy43IDAgMS40IC40IDEuNyAxcy4zIDEuNC0uMSAyYy03LjEgMTAtMTYuMSAxOS4zLTI2LjcgMjcuOWw1MS4xIDBjMjguOC0xNi42IDYxLjgtNDMuMyA2My40LTc5LjZsLTQ0LjcgMGMtMSAwLTEuOS0uOS0xLjktMS45bDAtMS4zYzAtMS4xIC45LTEuOSAxLjktMS45bDQ0LjcgMGMtMS42LTM2LjUtMzQuOS02My4zLTYzLjktNzkuOWwtNTAuOSAwek0yMjAuNSAxMjYuMmMtNDkuMSA3LjEtOTguNyAxOS41LTE0MyA0Mi43bDQ4LjQgMGMyNy45LTIwLjggNjEtMzQuMSA5NC41LTQyLjd6bTYyLjgtNS40Yy01MS44IDQuNS0xMDUuMiAxOC4zLTE0OC42IDQ4LjFsOTAgMGMxNC4yLTIxLjQgMzQuNC0zOSA1OC42LTQ4LjF6bTM2LjYtMS42Yy0zNi4yIDAtNjguNyAyMC42LTg5IDQ5LjdsMTc3LjktLjFjLTIwLjMtMjkuMS01Mi43LTQ5LjYtODguOS00OS42em0zNi42IDEuNmMyNC4yIDkuMSA0NC40IDI2LjYgNTguNSA0OGw4OS44IDBjLTQzLjMtMjkuNy05Ni42LTQzLjUtMTQ4LjMtNDh6bTYyLjggNS40YzMzLjQgOC41IDY2LjQgMjEuOSA5NC4zIDQyLjVsNDguMyAwYy00NC4xLTIzLjEtOTMuNi0zNS40LTE0Mi42LTQyLjV6Il0KICAgIH07CiAgICBmYU51dHJpdGlvbml4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm51dHJpdGlvbml4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZDYiLCAiTTExMiA4LjFTMjQ1LjQtLjEgMjMzIDExMi41YzAgMCAxOS4xLTc0LjkgMTAzLTQwLjYgMCAwLTE3LjcgNzQtODggNTYgMCAwIDE0LjYtNTQuNiA2Ni4xLTU2LjYgMCAwLTM5LjktMTAuMy04Mi4xIDQ4LjggMCAwLTE5LjgtOTQuNS05My42LTk5LjcgMCAwIDc1LjIgMTkuNCA3Ny42IDEwNy41IDAgLjEtMTA2LjQgNy0xMDQtMTE5Ljh6TTQyNCAzMjMuN2MwIDQ4LjUtOS43IDk1LjMtMzIgMTMyLjMtNDIuMiAzMC45LTEwNSA0OC0xNjggNDgtNjIuOSAwLTEyNS44LTE3LjEtMTY4LTQ4LTIyLjMtMzctMzItODMuOC0zMi0xMzIuMyAwLTQ4LjQgMTcuNy05NC43IDQwLTEzMS43IDQyLjItMzAuOSA5Ny4xLTQ4LjYgMTYwLTQ4LjYgNjMgMCAxMTcuOCAxNy42IDE2MCA0OC42IDIyLjMgMzcgNDAgODMuMyA0MCAxMzEuN3pNMTQ0IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTIxNiA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yODggNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMzYwIDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM4NCAyNTZjLTQuOC0yMi4zLTcuNC0zNi45LTE2LTU2LTM4LjgtMTkuOS05MC41LTMyLTE0NC0zMlMxMTguOCAxODAuMSA4MCAyMDBjLTguOCAxOS41LTExLjIgMzMuOS0xNiA1NiA0Mi4yLTcuOSA5OC43LTE0LjggMTYwLTE0LjhzMTE3LjggNi45IDE2MCAxNC44eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZ1BsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZy1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjEiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMTA3IDIwNS42Yy00LjcgMC05IDIuOC0xMC43IDcuMmwtNCA5LjUtMTEtOTIuOGMtMS43LTEzLjktMjItMTMuNC0yMy4xIC40bC00LjMgNTEuNC01LjItNjguOGMtMS4xLTE0LjMtMjIuMS0xNC4yLTIzLjIgMGwtMy41IDQ0LjktNS45LTk0LjNjLS45LTE0LjUtMjIuMy0xNC40LTIzLjIgMGwtNS4xIDgzLjctNC4zLTY2LjNjLS45LTE0LjQtMjIuMi0xNC40LTIzLjIgMGwtNS4zIDgwLjItNC4xLTU3Yy0xLjEtMTQuMy0yMi0xNC4zLTIzLjItLjJsLTcuNyA4OS44LTEuOC0xMi4yYy0xLjctMTEuNC0xNy4xLTEzLjYtMjItMy4zbC0xMy4yIDI3LjctNDMuOSAwIDAgMjMuMiA1MS4zIDBjNC40IDAgOC40LTIuNSAxMC40LTYuNGwxMC43IDczLjFjMiAxMy41IDIxLjkgMTMgMjMuMS0uN2wzLjgtNDMuNiA1LjcgNzguM2MxLjEgMTQuNCAyMi4zIDE0LjIgMjMuMi0uMWw0LjYtNzAuNCA0LjggNzMuM2MuOSAxNC40IDIyLjMgMTQuNCAyMy4yLS4xbDQuOS04MC41IDQuNSA3MS44Yy45IDE0LjMgMjIuMSAxNC41IDIzLjIgLjJsNC42LTU4LjYgNC45IDY0LjRjMS4xIDE0LjMgMjIgMTQuMiAyMy4xIC4xbDYuOC04MyAyLjcgMjIuM2MxLjQgMTEuOCAxNy43IDE0LjEgMjIuMyAzLjFsMTgtNDMuNCA1MC41IDAgMC0yMy4yLTU4LjQgLjN6bS03OCA1LjJsLTIxLjkgMCAwIDIxLjljMCA0LjEtMy4zIDcuNS03LjUgNy41LTQuMSAwLTcuNS0zLjMtNy41LTcuNWwwLTIxLjktMjEuOSAwYy00LjEgMC03LjUtMy4zLTcuNS03LjUgMC00LjEgMy40LTcuNSA3LjUtNy41bDIxLjkgMCAwLTIxLjljMC00LjEgMy40LTcuNSA3LjUtNy41czcuNSAzLjMgNy41IDcuNWwwIDIxLjkgMjEuOSAwYzQuMSAwIDcuNSAzLjMgNy41IDcuNSAwIDQuMS0zLjQgNy41LTcuNSA3LjV6Il0KICAgIH07CiAgICBmYVJlZGhhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRoYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdiYyIsICJNMzQxLjUgMjg1LjZjMzMuNyAwIDgyLjMtNi45IDgyLjMtNDcgLjItNi43IC45LTEuOC0yMC45LTk2LjItNC42LTE5LjEtOC43LTI3LjgtNDIuMy00NC42LTI2LjEtMTMuMy04Mi45LTM1LjQtOTkuNy0zNS40LTE1LjcgMC0yMC4yIDIwLjItMzguOSAyMC4yLTE4IDAtMzEuMy0xNS4xLTQ4LjEtMTUuMS0xNi4xIDAtMjYuNyAxMS0zNC44IDMzLjYtMjcuNSA3Ny42LTI2LjMgNzQuMy0yNi4xIDc4LjMgMCAyNC44IDk3LjYgMTA2LjEgMjI4LjUgMTA2LjF6TTQyOSAyNTQuOGM0LjcgMjIgNC43IDI0LjMgNC43IDI3LjIgMCAzNy43LTQyLjMgNTguNi05OCA1OC42LTEyNS43IC4xLTIzNS45LTczLjYtMjM1LjktMTIyLjMgMC02LjggMS40LTEzLjUgNC4xLTE5LjctNDUuMiAyLjMtMTAzLjggMTAuMy0xMDMuOCA2MiAwIDg0LjcgMjAwLjYgMTg5IDM1OS41IDE4OSAxMjEuOCAwIDE1Mi41LTU1LjEgMTUyLjUtOTguNiAwLTM0LjItMjkuNi03My04Mi45LTk2LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVBpZWRQaXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGllZC1waXBlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaWVkLXBpcGVyLXNxdWFyZSJdLCAiZTAxZSIsICJNMzIuMSA0MTlsLTMyIDYwLjIgLjgtMzI4Qy45IDg1LjMgNTQuMSAzMiAxMjAuMSAzMmwzMjcuMiAwQzM1NC4zIDYwLjkgMjU3LjQgMTI2LjIgMTkzLjQgMjAwLjYgMTIyLjggMjgyIDgyLjcgMzM4IDMyLjEgNDE5em00MTYtMzg3UzMwNS4zIDk4LjggMjYxLjcgMTk5LjFjLTIzLjIgNTMuNi0yOC45IDExOC4xLTcxIDE1OC42LTI4LjkgMjcuOC02OS44IDM4LjItMTA1LjMgNTYuMy0yMy4yIDEyLTY2LjQgNDAuNS04NC45IDY2bDMyOC40IDBjNjYgMCAxMTkuMy01My4zIDExOS4zLTExOS4yLS4xIDAtLjEtMzI4LjgtLjEtMzI4Ljh6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlclNxdWFyZSA9IGZhU3F1YXJlUGllZFBpcGVyOwogICAgZmFXaGF0c2FwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aGF0c2FwcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjMyIiwgIk0zODAuOSA5Ny4xYy00MS45LTQyLTk3LjctNjUuMS0xNTctNjUuMS0xMjIuNCAwLTIyMiA5OS42LTIyMiAyMjIgMCAzOS4xIDEwLjIgNzcuMyAyOS42IDExMUwwIDQ4MCAxMTcuNyA0NDkuMWMzMi40IDE3LjcgNjguOSAyNyAxMDYuMSAyN2wuMSAwYzEyMi4zIDAgMjI0LjEtOTkuNiAyMjQuMS0yMjIgMC01OS4zLTI1LjItMTE1LTY3LjEtMTU3em0tMTU3IDM0MS42Yy0zMy4yIDAtNjUuNy04LjktOTQtMjUuN2wtNi43LTQtNjkuOCAxOC4zIDE4LjYtNjguMS00LjQtN2MtMTguNS0yOS40LTI4LjItNjMuMy0yOC4yLTk4LjIgMC0xMDEuNyA4Mi44LTE4NC41IDE4NC42LTE4NC41IDQ5LjMgMCA5NS42IDE5LjIgMTMwLjQgNTQuMXM1Ni4yIDgxLjIgNTYuMSAxMzAuNWMwIDEwMS44LTg0LjkgMTg0LjYtMTg2LjYgMTg0LjZ6TTMyNS4xIDMwMC41Yy01LjUtMi44LTMyLjgtMTYuMi0zNy45LTE4LTUuMS0xLjktOC44LTIuOC0xMi41IDIuOHMtMTQuMyAxOC0xNy42IDIxLjhjLTMuMiAzLjctNi41IDQuMi0xMiAxLjQtMzIuNi0xNi4zLTU0LTI5LjEtNzUuNS02Ni01LjctOS44IDUuNy05LjEgMTYuMy0zMC4zIDEuOC0zLjcgLjktNi45LS41LTkuN3MtMTIuNS0zMC4xLTE3LjEtNDEuMmMtNC41LTEwLjgtOS4xLTkuMy0xMi41LTkuNS0zLjItLjItNi45LS4yLTEwLjYtLjJzLTkuNyAxLjQtMTQuOCA2LjljLTUuMSA1LjYtMTkuNCAxOS0xOS40IDQ2LjNzMTkuOSA1My43IDIyLjYgNTcuNGMyLjggMy43IDM5LjEgNTkuNyA5NC44IDgzLjggMzUuMiAxNS4yIDQ5IDE2LjUgNjYuNiAxMy45IDEwLjctMS42IDMyLjgtMTMuNCAzNy40LTI2LjRzNC42LTI0LjEgMy4yLTI2LjRjLTEuMy0yLjUtNS0zLjktMTAuNS02LjZ6Il0KICAgIH07CiAgICBmYUltZGIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW1kYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmQ4IiwgIk04OS41IDMyMy42bC0zNS42IDAgMC0xMzcuNCAzNS42IDAgMCAxMzcuNHptNjYuNi03My4xbDkuMS02NC4zIDQ2LjMgMCAwIDEzNy40LTMxIDAgMC05Mi43LTEzLjQgOTIuNy0yMS4zIDAtMTMtOTAuNy0uMSA5MC43LTMxLjIgMCAwLTEzNy40IDQ2LjEgMGMuNSA4LjMgMi44IDE4LjEgNC4zIDI5LjRsNC4yIDM0Ljl6bTY3LjYgNzMuMWwwLTEzNy40IDI2LjYgMGMxNyAwIDI3IC45IDMzIDIuNCA2LjEgMS43IDEwLjcgNC4yIDEzLjkgNy45IDMuMSAzLjMgNS4xIDYuNiA1LjggMTIgLjkgNC40IDEuNCAxMy4xIDEuNCAyNi4ybDAgNDguMmMwIDEyLjMtLjcgMjAuNS0xLjkgMjQuNy0xLjEgNC4xLTMuMSA3LjQtNiA5LjctMi44IDIuNC02LjQgNC4xLTEwLjcgNS00LjIgLjgtMTAuNiAxLjMtMTkuMSAxLjNsLTQzIDB6bTM1LjUtMTEzLjlsMCA4OS40YzUuMSAwIDguMy0xIDkuNC0yLjMgMS4xLTIgMS44LTcuNiAxLjgtMTYuN2wwLTUzLjNjMC02LjItLjEtMTAuMi0uNy0xMi0uMy0xLjgtMS4yLTMtMi42LTQuNy0xLjQgMC00LjEtLjQtNy45LS40em01Ny4zIDExMy45bDAtMTM3LjQgMzQuMSAwIDAgNDMuOWMyLjktMi40IDYuMS00LjkgOS41LTYuNiAzLjYtMS41IDguOC0yLjQgMTIuOC0yLjQgNC44IDAgOC45IC44IDEyLjMgMi4yIDMuNCAxLjUgNiAzLjUgOCA2LjIgMS43IDIuNiAyLjcgNS4zIDMuMSA3LjggLjQgMi42LS4yIDgtLjIgMTYuMmwwIDM4LjZjMCA4LjIgLjIgMTQuMy0uOCAxOC40LTEuMSA0LTMuOCA3LjYtNy44IDkuNi00LjEgMy45LTguOSA1LjMtMTQuNiA1LjMtNCAwLTkuMi0uOS0xMi43LTIuNS0zLjUtMS44LTYuNy00LjUtOS42LThsLTIuMSA4LjctMzIgMHptNDUuMS0yMC43Yy43LTEuOCAxLTYgMS0xMi41bDAtMzUuNGMwLTUuNi0uMy05LjUtMS4xLTExLjItLjctMS45LTMuNy0yLjctNS44LTIuNy0yIDAtMy40IC44LTQuMSAyLjMtLjYgMS41LTEgNS40LTEgMTEuNmwwIDM2LjRjMCA2LjEgLjQgMTAgMS4yIDExLjYgLjYgMS43IDIuMSAyLjUgNC4xIDIuNSAyLjIgMCA0LjItLjggNS43LTIuNnpNNDE4LjQgMzJjMTUuNyAxLjIgMjguNyAxNS4yIDI4LjcgMzEuOWwwIDM4NC4yYzAgMTYuNC0xMS45IDMwLjQtMjguMiAzMS0uMyAwLS41IC45LS44IC45TDI5LjkgNDgwYy0uMyAwLS42LS45LS44LS4xLTE1LjctMS40LTI3LjktMTMuOC0yOS0zMC4yTDAgNjEuOEMxLjEgNDUuOSAxMy44IDMzLjEgMzAuMyAzMS4xbDM4Ny40IDBjLjIgMCAuNSAuOSAuNyAuOXpNMzAuMyA0MS4zQzE5IDQyIDEwIDUxIDkuMyA2Mi40bDAgMzg3LjNjLjQgNS40IDIuNyAxMC41IDYuNCAxNC4zIDMuOCAzLjkgOC44IDYuMyAxNC4yIDYuN2wzODguMiAwYzExLjUtMSAyMC42LTExLjYgMjAuNi0yMi42bDAtMzg0LjJjMC01LjctMi4xLTExLjMtNi0xNS41cy05LjMtNi44LTE1LTcuMmwtMzg3LjQgMHoiXQogICAgfTsKICAgIGZhUHl0aG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInB5dGhvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2UyIiwgIk00MzkuOCAyMDAuNWMtNy43LTMwLjktMjIuMy01NC4yLTUzLjQtNTQuMmwtNDAuMSAwIDAgNDcuNGMwIDM2LjgtMzEuMiA2Ny44LTY2LjggNjcuOGwtMTA2LjggMGMtMjkuMiAwLTUzLjQgMjUtNTMuNCA1NC4zbDAgMTAxLjhjMCAyOSAyNS4yIDQ2IDUzLjQgNTQuMyAzMy44IDkuOSA2Ni4zIDExLjcgMTA2LjggMCAyNi45LTcuOCA1My40LTIzLjUgNTMuNC01NC4zbDAtNDAuNy0xMDYuNyAwIDAtMTMuNiAxNjAuMiAwYzMxLjEgMCA0Mi42LTIxLjcgNTMuNC01NC4yIDExLjItMzMuNSAxMC43LTY1LjcgMC0xMDguNnpNMjg2LjIgNDQ0LjdhMjAuNCAyMC40IDAgMSAxIDAtNDAuNyAyMC40IDIwLjQgMCAxIDEgMCA0MC43ek0xNjcuOCAyNDguMWwxMDYuOCAwYzI5LjcgMCA1My40LTI0LjUgNTMuNC01NC4zbDAtMTAxLjljMC0yOS0yNC40LTUwLjctNTMuNC01NS42LTM1LjgtNS45LTc0LjctNS42LTEwNi44IC4xLTQ1LjIgOC01My40IDI0LjctNTMuNCA1NS42bDAgNDAuNyAxMDYuOSAwIDAgMTMuNi0xNDcgMGMtMzEuMSAwLTU4LjMgMTguNy02Ni44IDU0LjItOS44IDQwLjctMTAuMiA2Ni4xIDAgMTA4LjYgNy42IDMxLjYgMjUuNyA1NC4yIDU2LjggNTQuMmwzNi43IDAgMC00OC44YzAtMzUuMyAzMC41LTY2LjQgNjYuOC02Ni40ek0xNjEuMiA2NC43YTIwLjQgMjAuNCAwIDEgMSAwIDQwLjggMjAuNCAyMC40IDAgMSAxIDAtNDAuOHoiXQogICAgfTsKICAgIGZhQ2FzaEFwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYXNoLWFwcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2Q0IiwgIk00NDAuMyA5Ni45Yy05LjQtMjYuNS0zMC4zLTQ3LjQtNTYuOC01Ny0yNC4xLTcuOS00Ni4zLTcuOS05MS42LTcuOUwxNTYgMzJjLTQ0LjggMC02Ny4yIDAtOTEuMyA3LjUtMjYuNSA5LjYtNDcuNCAzMC41LTU3IDU3LTcuNyAyNC4zLTcuNyA0Ni43LTcuNyA5MS43TDAgMzIzLjhjMCA0NS4yIDAgNjcuNCA3LjUgOTEuNSA5LjYgMjYuNSAzMC41IDQ3LjQgNTcgNTcgMjQuMyA3LjcgNDYuNyA3LjcgOTEuNiA3LjdsMTM1LjcgMGM0NSAwIDY3LjQgMCA5MS42LTcuNyAyNi41LTkuNiA0Ny40LTMwLjUgNTctNTcgNy43LTI0LjMgNy43LTQ2LjcgNy43LTkxLjVsMC0xMzUuNWMwLTQ1IDAtNjcuNC03LjctOTEuNXpNMzIzLjEgMTg1LjRsLTI1LjggMjEuMWMtMi4zIDEuOS01LjUgMS41LTcuMy0uOS0xMy4yLTE2LjItMzMuNy0yNS40LTU2LjEtMjUuNC0yNSAwLTQwLjYgMTAuOS00MC42IDI2LjItLjQgMTIuOCAxMS43IDE5LjYgNDkuMSAyNy43IDQ3LjIgMTAgNjguNyAyOS43IDY4LjcgNjIuNyAwIDQxLjQtMzMuNyA3MS45LTg2LjQgNzUuM2wtNS4xIDI0LjVjLS40IDIuMy0yLjYgNC4xLTUuMSA0LjFsLTQwLjYgMGMtMy40IDAtNS44LTMuMi01LjEtNi40bDYuNC0yNy4zYy0yNi03LjUtNDcuMi0yMi01OS4zLTM5LjctMS41LTIuMy0xLjEtNS4zIDEuMS03bDI4LjItMjJjMi4zLTEuOSA1LjgtMS4zIDcuNSAxLjEgMTQuOSAyMC45IDM4IDMzLjMgNjUuNyAzMy4zIDI1IDAgNDMuOC0xMi4yIDQzLjgtMjkuNyAwLTEzLjQtOS40LTE5LjYtNDEuMi0yNi4yLTU0LjItMTEuNy03NS44LTMxLjgtNzUuOC02NC45IDAtMzguNCAzMi4yLTY3LjIgODAuOS03MWw1LjMtMjUuNGMuNC0yLjMgMi42LTQuMSA1LjEtNC4xbDM5LjkgMGMzLjIgMCA1LjggMyA1LjEgNi4ybC02LjIgMjguNGMyMC45IDYuNCAzOCAxNy45IDQ4LjcgMzIuMiAxLjcgMi4xIDEuMyA1LjMtLjkgN3oiXQogICAgfTsKICAgIGZhUGludGVyZXN0UCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaW50ZXJlc3QtcCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjMxIiwgIk0yMDQgNi41Yy0xMDIuNiAwLTIwNCA2OC40LTIwNCAxNzkuMSAwIDcwLjQgMzkuNiAxMTAuNCA2My42IDExMC40IDkuOSAwIDE1LjYtMjcuNiAxNS42LTM1LjQgMC05LjMtMjMuNy0yOS4xLTIzLjctNjcuOCAwLTgwLjQgNjEuMi0xMzcuNCAxNDAuNC0xMzcuNCA2OC4xIDAgMTE4LjUgMzguNyAxMTguNSAxMDkuOCAwIDUzLjEtMjEuMyAxNTIuNy05MC4zIDE1Mi43LTI0LjkgMC00Ni4yLTE4LTQ2LjItNDMuOCAwLTM3LjggMjYuNC03NC40IDI2LjQtMTEzLjQgMC02Ni4yLTkzLjktNTQuMi05My45IDI1LjggMCAxNi44IDIuMSAzNS40IDkuNiA1MC43LTEzLjggNTkuNC00MiAxNDcuOS00MiAyMDkuMSAwIDE4LjkgMi43IDM3LjUgNC41IDU2LjQgMy40IDMuOCAxLjcgMy40IDYuOSAxLjUgNTAuNC02OSA0OC42LTgyLjUgNzEuNC0xNzIuOCAxMi4zIDIzLjQgNDQuMSAzNiA2OS4zIDM2IDEwNi4yIDAgMTUzLjktMTAzLjUgMTUzLjktMTk2LjggMC05OS4zLTg1LjgtMTY0LjEtMTgwLTE2NC4xeiJdCiAgICB9OwogICAgZmFXaG1jcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aG1jcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDBkIiwgIk00NDggMTYxbDAtMjEuMy0yOC41LTguOC0yLjItMTAuNCAyMC4xLTIwLjctMTAuNC0xOS40LTI5IDcuNS03LjItNy41IDcuNS0yOC4yLTE5LjEtMTEuNi0yMS4zIDIxLTEwLjctMy4yLTctMjYuNC0yMi42IDAtNi4yIDI2LjQtMTIuMSAzLjItMTkuNy0yMS0xOS40IDExIDguMSAyNy43LTguMSA4LjQtMjguNS03LjUtMTEgMTkuMSAyMC43IDIxLTIuOSAxMC40LTI4LjUgNy44LS4zIDIxLjcgMjguOCA3LjUgMi40IDEyLjEtMjAuMSAxOS45IDEwLjQgMTguNSAyOS42LTcuNSA3LjIgOC42LTguMSAyNi45IDE5LjkgMTEuNiAxOS40LTIwLjQgMTEuNiAyLjkgNi43IDI4LjUgMjIuNiAuMyA2LjctMjguOCAxMS42LTMuNSAyMC43IDIxLjYgMjAuNC0xMi4xLTguOC0yOCA3LjgtOC4xIDI4LjggOC44IDEwLjMtMjAuMS0yMC45LTE4LjggMi4yLTEyLjEgMjkuMS03ek0zMjguOCA5Mi42YTU2LjggNTYuOCAwIDEgMSAwIDExMy42IDU2LjggNTYuOCAwIDEgMSAwLTExMy42em03Mi4zIDEzMGw0Ni45IDE0LjUgMCAzOS45LTU1LjEgMTMuNC00LjEgMjIuNyAzOC45IDM1LjMtMTkuMiAzNy45LTU0LTE2LjctMTQuNiAxNS4yIDE2LjcgNTIuNS0zOC4zIDIyLjctMzguOS00MC41LTIxLjcgNi42LTEyLjYgNTQtNDIuNC0uNS0xMi42LTUzLjYtMjEuNy01LjYtMzYuNCAzOC40LTM3LjQtMjEuNyAxNS4yLTUwLjUtMTMuNy0xNi4xLTU1LjUgMTQuMS0xOS43LTM0LjggMzcuOS0zNy40LTQuOC0yMi44LTU0LTE0LjEgLjUtNDAuOSA1My41LTE0LjcgNS43LTE5LjctMzguOS0zOS40IDIwLjctMzUuOCA1My42IDE0LjEgMTUuMi0xNS43LTE1LjItNTIgMzYuNC0yMC43IDM2LjggMzkuNCAyMi43LTYuMSAxMS42LTUyIDQyLjQgMCAxMS42IDQ1LjktMjIuNi01LjktNi4zLTEuNy0zLjMgNS43LTExIDE5LjEtMy4zIDUuNiA0LjYgNC42IDE3LjIgMTcuNC0uMyAxLTIzLjggNi41LTYuMiAxLjdjMCAzLjItLjEgOS42LS4zIDE5LjMtNDcuNSAxMC40LTgzLjMgNTIuOC04My4zIDEwMy41IDAgNTguMyA0Ny4zIDEwNS43IDEwNS43IDEwNS43IDUwLjUgMCA5Mi43LTM1LjQgMTAzLjItODIuOCA5LjkgLjEgMTYuNiAuMiAyMC4xIC4zbDEuNi02LjcgNS42LTI0IDEuOS0uNiAxNy4xIDE3LjggNC43IDQuOSA1LjgtMy40IDIwLjQtMTIuMSA1LjgtMy41LTItNi41LTYuOC0yMS4yeiJdCiAgICB9OwogICAgZmFKb2dldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqb2dldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2I3IiwgIk0zODYuMSA0NUMzNDUuNiAxOS45IDMwMC42IDggMjU2LjIgOCAxNzMgOCA5MS44IDQ5LjkgNDQuOSAxMjUuOS0yNyAyNDIuNSA5LjMgMzk1LjIgMTI1LjkgNDY3LjFzMjY5LjMgMzUuNiAzNDEuMi04MC45QzUzOSAyNjkuNiA1MDIuNyAxMTYuOCAzODYuMSA0NXptNTEuOCAzMjMuMmMtNDAuNCA2NS41LTExMC40IDEwMS41LTE4MiAxMDEuNS02LjggMC0xMy42LS40LTIwLjQtMS05LTEzLjYtMTkuOS0zMy4zLTIzLjctNDIuNC01LjctMTMuNy0yNy4yLTQ1LjYgMzEuMi02Ny4xIDUxLjctMTkuMSAxNzYuNy0xNi41IDIwOC44LTE3LjYtNCA5LTguNiAxNy45LTEzLjkgMjYuNnpNMjM3LjEgMjgxLjljLTU1LjUtMS40LTgxLjctMjAuOC01OC41LTQ4LjJzNTEuMS00MC43IDY4LjktNTEuMmMxNy45LTEwLjUgMjcuMy0zMy43LTIzLjYtMjkuNy0xMjguNiA4LjctMTY3LjMgOTkuMy0xNzguMyAxNDAuMi04LjgtNDkuNy0uMS0xMDIuNyAyOC41LTE0OS4xIDYxLjktMTAwLjUgMTkzLjUtMTMxLjcgMjk0LTY5LjggNzQuOCA0Ni4xIDExMS4yIDEzMC45IDk5LjMgMjEyLjctMjQuOS0uNS0xNzkuMy0zLjYtMjMwLjMtNC45em0xODMuOC01NC44Yy0yMi43LTYtNTcgMTEuMy04Ni43IDI3LjItMjkuNyAxNS44LTMxLjEgOC4yLTMxLjEgOC4yczQwLjItMjguMSA1MC43LTM0LjUgMzEuOS0xNCAxMy40LTI0LjZjLTMuMi0xLjgtNi43LTIuNy0xMC40LTIuNy0xNy44IDAtNDEuNSAxOC43LTY3LjUgMzUuNi0zMS41IDIwLjUtNjUuMyAzMS4zLTY1LjMgMzEuM0wzOTMuNSAyNjYgNDQwIDI0Mi42czMuNi05LjUtMTkuMS0xNS41eiJdCiAgICB9OwogICAgZmFTcXVhcmVZb3V0dWJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS15b3V0dWJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3OTgsICJ5b3V0dWJlLXNxdWFyZSJdLCAiZjQzMSIsICJNMjgyIDI1Ni4ybC05NS4yLTU0LjEgMCAxMDguMiA5NS4yLTU0LjF6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0em0xNC40IDEzNi4xYzcuNiAyOC42IDcuNiA4OC4yIDcuNiA4OC4yczAgNTkuNi03LjYgODguMWMtNC4yIDE1LjgtMTYuNSAyNy43LTMyLjIgMzEuOS0yOC4zIDcuNy0xNDIuMiA3LjctMTQyLjIgNy43cy0xMTMuOSAwLTE0Mi4yLTcuNmMtMTUuNy00LjItMjgtMTYuMS0zMi4yLTMxLjktNy42LTI4LjYtNy42LTg4LjItNy42LTg4LjJzMC01OS43IDcuNi04OC4yYzQuMi0xNS44IDE2LjUtMjguMiAzMi4yLTMyLjQgMjguMy03LjcgMTQyLjItNy43IDE0Mi4yLTcuN3MxMTMuOSAwIDE0Mi4yIDcuN2MxNS43IDQuMiAyOCAxNi42IDMyLjIgMzIuNHoiXQogICAgfTsKICAgIGZhWW91dHViZVNxdWFyZSA9IGZhU3F1YXJlWW91dHViZTsKICAgIGZhQXRsYXNzaWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF0bGFzc2lhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzdiIiwgIk0xNTIuMiAyMzYuNGMtNy43LTguMi0xOS43LTcuNy0yNC44IDIuOEwxLjYgNDkwLjJjLTUgMTAgMi40IDIxLjcgMTMuNCAyMS43bDE3NSAwYzUuOCAuMSAxMS0zLjIgMTMuNC04LjQgMzcuOS03Ny44IDE1LjEtMTk2LjMtNTEuMi0yNjcuMXpNMjQ0LjQgOC4xYy0xMjIuMyAxOTMuNC04LjUgMzQ4LjYgNjUgNDk1LjUgMi41IDUuMSA3LjcgOC40IDEzLjQgOC40TDQ5NyA1MTJjMTEuMiAwIDE4LjQtMTEuOCAxMy40LTIxLjcgMCAwLTIzNC41LTQ3MC42LTI0MC40LTQ4Mi4zLTUuMy0xMC42LTE4LjgtMTAuOC0yNS42IC4xeiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJIYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1oYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRlNSIsICJNNjQwIDI0LjljLTgwLjggNTMuNi04OS40IDkyLjUtOTYuNCAxMDQuNC02LjcgMTIuMi0xMS43IDYwLjMtMjMuMyA4My42LTExLjcgMjMuNi01NC4yIDQyLjItNjYuMSA1MC0xMS43IDcuOC0yOC4zIDM4LjEtNDEuOSA2NC4yLTEwOC4xLTQuNC0xNjcuNCAzOC44LTI1OS4yIDkzLjYgMjkuNC05LjcgNDMuMy0xNi43IDQzLjMtMTYuNyA5NC4yLTM2IDEzOS4zLTY4LjMgMjgxLjEtNDkuMiAxLjEgMCAxLjkgLjYgMi44IC44IDMuOSAyLjIgNS4zIDYuOSAzLjEgMTAuOGwtNTMuOSA5NS44Yy0yLjUgNC43LTcuOCA3LjItMTMuMSA2LjEtMTI2LjgtMjMuOC0yMjYuOSAxNy4zLTMxOC45IDE4LjYtNzMuNCAxLjEtOTcuNS0zMy41LTk3LjUtMzUuMSAwLTEuMSAuNi0xLjcgMS43LTEuNyAwIDAgMzguMyAwIDEwMy4xLTE1LjMgNzMuNi0xNDAuMyAxMzkuMi0xODkuNCAyMTAuNi0xODkuNCAwIDAgNzEuNyAwIDkwLjYgNjEuOSAyMi44LTM5LjcgMjguMy00OS4yIDI4LjMtNDkuMiA1LjMtOS40IDM1LTc3LjIgODYuNC0xNDEuNCA1MS41LTY0IDkwLjQtNzkuOSAxMTkuMy05MS44eiJdCiAgICB9OwogICAgZmFJbnRlcm5ldEV4cGxvcmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImludGVybmV0LWV4cGxvcmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNmIiLCAiTTQ4My4xIDE1OS43YzEwLjktMjQuNiAyMS40LTYwLjQgMjEuNC04Ny45IDAtNzIuNy03OS42LTk4LjQtMjA5LjctMzguNi0xMDcuNi03LjItMjExLjIgNzMuNy0yMzcuMSAxODYuNSAzMC45LTM0LjkgNzguMy04Mi4zIDEyMi0xMDEuMi01NC4zIDQ4LjMtMTAwLjYgMTA5LjQtMTM1LjcgMTczLjItMjAuNyAzNy45LTQ0IDk5LjItNDQgMTQ1IDAgOTguNiA5Mi45IDg2LjUgMTgwLjMgNDIgMzEuNCAxNS40IDY2LjYgMTUuNiAxMDEuNyAxNS42IDk3LjEgMCAxODQuMi01NC4zIDIxNi44LTE0NmwtMTIwLjggMGMtNTIuNSA4OC42LTE5Ni44IDUzLTE5Ni44LTQ3LjRsMzI4LjggMGM2LjQtNDMuNi0xLjctOTUuNy0yNi45LTE0MS4yek02NC42IDM0Ni45QzgyLjMgMzk4IDExOC4zIDQ0Mi43IDE2NC44IDQ3MC4yIDc2LjEgNTE5LjEtOC40IDQ5OS4zIDY0LjYgMzQ2Ljl6TTE4MC41IDIzOGMyLTU1LjIgNTAuMy05NC45IDEwNC05NC45IDUzLjQgMCAxMDIgMzkuNyAxMDQgOTQuOWwtMjA4IDB6TTM2NS4xIDUwLjRjMjEuNC0xMC4zIDQ4LjYtMjIgNzIuNi0yMiAzMS40IDAgNTQuMyAyMS43IDU0LjMgNTMuNyAwIDIwLTcuNCA0OS0xNC42IDY3LjktMjYuMy00Mi4zLTY2LTgxLjYtMTEyLjMtOTkuNnoiXQogICAgfTsKICAgIGZhQWlyYm5iID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFpcmJuYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODM0IiwgIk0yMjQuNSAzNzMuMWMtMjUuMi0zMS43LTQwLjEtNTkuNC00NS04My4yLTIyLjUtODggMTEyLjYtODggOTAuMSAwLTUuNCAyNC4yLTIwLjMgNTItNDUgODMuMmwtLjEgMHptMTM4LjIgNzMuMmMtNDIuMSAxOC4zLTgzLjctMTAuOS0xMTkuMy01MC41IDEwMy45LTEzMC4xIDQ2LjEtMjAwLTE4LjgtMjAwLTU0LjkgMC04NS4yIDQ2LjUtNzMuMyAxMDAuNSA2LjkgMjkuMiAyNS4yIDYyLjQgNTQuNCA5OS41LTMyLjUgMzYtNjAuNSA1Mi43LTg1LjIgNTQuOS01MCA3LjQtODkuMS00MS4xLTcxLjMtOTEuMSAxNS4xLTM5LjIgMTExLjctMjMxLjIgMTE1LjktMjQxLjYgMTUuOC0zMC4xIDI1LjYtNTcuNCA1OS40LTU3LjQgMzIuMyAwIDQzLjQgMjUuOSA2MC40IDU5LjkgMzYgNzAuNiA4OS40IDE3Ny41IDExNC44IDIzOS4xIDEzLjIgMzMuMS0xLjQgNzEuMy0zNyA4Ni42em00Ny0xMzYuMWMtMTI4LjktMjc0LjMtMTM2LTI3OC4yLTE4NS4xLTI3OC4yLTQ1LjUgMC02NC45IDMxLjctODQuNyA3Mi44LTEwNi4yIDIxMi4zLTExNi40IDI0Mi40LTExNy4zIDI0NS0yNS4yIDY5LjMgMjYuNyAxMzAuMiA4OS42IDEzMC4yIDIxLjcgMCA2MC42LTYuMSAxMTIuNC02Mi40IDU4LjcgNjMuOCAxMDEuMyA2Mi40IDExMi40IDYyLjQgNjIuOSAuMSAxMTQuOS02MC45IDg5LjYtMTMwLjIgMC0zLjktMTYuOC0zOC45LTE2LjgtMzkuNmwwIDB6Il0KICAgIH07CiAgICBmYUpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjgiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTI0My44IDM4MS40YzAgNDMuNi0yNS42IDYzLjUtNjIuOSA2My41LTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41TDE1MiAzODUuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVsMC0xNDMuMSA0Mi4xIDAgMCAxNDMuN3ptOTkuNiA2My41Yy0zOS4xIDAtNjQuNC0xOC42LTc2LjctNDNMMzAxIDM4Mi4xYzkgMTQuNyAyMC44IDI1LjYgNDEuNSAyNS42IDE3LjQgMCAyOC42LTguNyAyOC42LTIwLjggMC0xNC40LTExLjQtMTkuNS0zMC43LTI4bC0xMC41LTQuNWMtMzAuNC0xMi45LTUwLjUtMjkuMi01MC41LTYzLjUgMC0zMS42IDI0LjEtNTUuNiA2MS42LTU1LjYgMjYuOCAwIDQ2IDkuMyA1OS44IDMzLjdMMzY4IDI5MGMtNy4yLTEyLjktMTUtMTgtMjcuMS0xOC0xMi4zIDAtMjAuMSA3LjgtMjAuMSAxOCAwIDEyLjYgNy44IDE3LjcgMjUuOSAyNS42bDEwLjUgNC41YzM1LjggMTUuMyA1NS45IDMxIDU1LjkgNjYuMiAwIDM3LjgtMjkuOCA1OC42LTY5LjcgNTguNnoiXQogICAgfTsKICAgIGZhUXVpbnNjYXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInF1aW5zY2FwZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDU5IiwgIk0zMTMuNyA0NzQuNmwtMSAwYy00MS45IDAtODIuMS0xNi43LTExMS44LTQ2LjNzLTQ2LjMtNjkuOS00Ni4zLTExMS44IDE2LjctODIuMSA0Ni4zLTExMS44IDY5LjktNDYuMyAxMTEuOC00Ni4zYzk0LjkgMCAxNjguMiA4My4xIDE1NyAxNzYuNiA0IDUuMSA4LjIgOS42IDExLjIgMTUuMyAxMy40LTMwLjMgMjAuMy02Mi40IDIwLjMtOTcuNyAwLTEzNS4xLTEwOS41LTI0NC42LTI0NC42LTI0NC42UzEyLjEgMTE3LjUgMTIuMSAyNTIuNiAxMjEuNiA0OTcuMiAyNTYuNiA0OTcuMmMyMy44IC4yIDQ3LjYtMy4yIDcwLjQtMTAuMS01LjItMy41LTguOS04LjEtMTMuMy0xMi41em03OC4zLTE2OWE5OS4yIDk5LjIgMCAxIDAgMCAxOTguNCA5OS4yIDk5LjIgMCAxIDAgMC0xOTguNHoiXQogICAgfTsKICAgIGZhQWR2ZXJzYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWR2ZXJzYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YSIsICJNNDgyLjEgMzJMMjguNyAzMkM1LjggMzIgMCAzNy45IDAgNjAuOUwwIDQ1MS4xQzAgNDc0LjQgNS44IDQ4MCAyOC43IDQ4MGw0NTMuNCAwYzI0LjQgMCAyOS45LTUuMiAyOS45LTI5LjdsMC0zODguMWMwLTI0LjYtNS40LTMwLjItMjkuOS0zMC4yek0xNzguNCAyMjAuM2MtMjcuNS0yMC4yLTcyLjEtOC43LTg0LjIgMjMuNC00LjMgMTEuMS05LjMgOS41LTE3LjUgOC4zLTkuNy0xLjUtMTcuMi0zLjItMjIuNS01LjUtMjguOC0xMS40IDguNi01NS4zIDI0LjktNjQuMyA0MS4xLTIxLjQgODMuNC0yMi4yIDEyNS4zLTQuOCA0MC45IDE2LjggMzQuNSA1OS4yIDM0LjUgMTI4LjUgMi43IDI1LjgtNC4zIDU4LjMgOS4zIDg4LjggMS45IDQuNCAuNCA3LjktMi43IDEwLjctOC40IDYuNy0zOS4zIDIuMi00Ni42LTcuNC0xLjktMi4yLTEuOC0zLjYtMy45LTYuMi0zLjYtMy45LTcuMy0yLjItMTEuOSAxLTU3LjQgMzYuNC0xNDAuMyAyMS40LTE0Ny00My4zLTMuMS0yOS4zIDEyLjQtNTcuMSAzOS42LTcxIDM4LjItMTkuNSAxMTIuMi0xMS44IDExNC0zMC45IDEuMS0xMC4yLTEuOS0yMC4xLTExLjMtMjcuM3ptMjg2LjcgMjIyYzAgMTUuMS0xMS4xIDkuOS0xNy44IDkuOWwtMzk0LjkgMGMtNy40IDAtMTguMiA0LjgtMTcuOC0xMC43IC40LTEzLjkgMTAuNS05LjEgMTcuMS05LjEgMTMyLjMtLjQgMjY0LjUtLjQgMzk2LjggMCA2LjggMCAxNi42LTQuNCAxNi42IDkuOXptMy44LTM0MC41bDAgMjkxYzAgNS43LS43IDEzLjktOC4xIDEzLjktMTIuNC0uNC0yNy41IDcuMS0zNi4xLTUuNi01LjgtOC43LTcuOC00LTEyLjQtMS4yLTUzLjQgMjkuNy0xMjguMSA3LjEtMTQ0LjQtODUuMi02LjEtMzMuNC0uNy02Ny4xIDE1LjctMTAwIDExLjgtMjMuOSA1Ni45LTc2LjEgMTM2LjEtMzAuNWwwLTcxYzAtMjYuMi0uMS0yNi4yIDI2LTI2LjIgMy4xIDAgNi42IC40IDkuNyAwIDEwLjEtLjggMTMuNiA0LjQgMTMuNiAxNC4zLS4xIC4yLS4xIC4zLS4xIC41ek00MTcuNCAzMzQuMWMtMTkuNSA0Ny42LTcyLjkgNDMuMy05MCA1LjItMTUuMS0zMy4zLTE1LjUtNjguMiAuNC0xMDEuNSAxNi4zLTM0LjEgNTkuNy0zNS43IDgxLjUtNC44IDIwLjYgMjguOCAxNC45IDg0LjYgOC4xIDEwMS4xek0xMjIuNiAzNjkuNGMtNy41LTEuMy0zMy0zLjMtMzMuNy0yNy44LS40LTEzLjkgNy44LTIzIDE5LjgtMjUuOCAyNC40LTUuOSA0OS4zLTkuOSA3My43LTE0LjcgOC45LTIgNy40IDQuNCA3LjggOS41IDEuNCAzMy0yNi4xIDU5LjItNjcuNiA1OC44eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjVlIiwgIk0yNTMuOCAyMTQuOWwtMzMuMiAxNy4zYy05LjQtMTkuNi0yNS4yLTE5LjktMjcuNS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNiA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNSAwIDI0LjYtNy4xIDMwLjYtMjEuM2wzMC42IDE1LjVjLTYuMiAxMS41LTI1LjcgMzktNjUuMSAzOS0yMi42IDAtNzQtMTAuMy03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjcgMTEuOSA2NiAzNS45em0xNDMgMGwtMzIuOCAxNy4zYy05LjUtMTkuOC0yNS43LTE5LjktMjcuOS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNSA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNCAwIDI0LjYtNy4xIDMwLjUtMjEuM2wzMSAxNS41Yy0yLjEgMy44LTIxLjQgMzktNjUuMSAzOS0yMi43IDAtNzQtOS45LTc0LTc3IDAtNTguNyA0My03Ny4xIDcyLjYtNzcuMSAzMC43IDAgNTIuNiAxMS45IDY1LjYgMzUuOXpNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYuMSA4IDM5NC41IDEyMS42IDUwNC4xIDI1NS42IDUwNC4xIDM4NS41IDUwNC4xIDUwNCA0MDMuMiA1MDQgMjU2LjEgNTA0IDExOC4yIDM5Ny40IDggMjU1LjYgOHptLjkgNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS40LTIwMy4zIDIwMy43LTIwMy4zIDExMi41IDAgMjAyLjggODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjcgMjAyLjgtMjAyLjggMjAyLjh6Il0KICAgIH07CiAgICBmYU5vdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub3Rpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdkOSIsICJNOTQuOSAxMDAuMmMxNC45IDEyLjEgMjAuNSAxMS4yIDQ4LjYgOS4zTDQwNy44IDkzLjZjNS42IDAgLjktNS42LS45LTYuNUwzNjIuOSA1NS40Yy04LjQtNi41LTE5LjYtMTQtNDEuMS0xMi4xTDY1LjkgNjEuOWMtOS4zIC45LTExLjIgNS42LTcuNSA5LjNsMzYuNCAyOC45em0xNS45IDYxLjZsMCAyNzguMWMwIDE0LjkgNy41IDIwLjUgMjQuMyAxOS42bDI5MC41LTE2LjhjMTYuOC0uOSAxOC43LTExLjIgMTguNy0yMy4zbDAtMjc2LjJjMC0xMi4xLTQuNy0xOC43LTE1LTE3LjdMMTI1LjcgMTQzLjFjLTExLjIgLjktMTQuOSA2LjUtMTQuOSAxOC43em0yODYuNyAxNC45YzEuOSA4LjQgMCAxNi44LTguNCAxNy44bC0xNCAyLjggMCAyMDUuM2MtMTIuMiA2LjUtMjMuNCAxMC4zLTMyLjcgMTAuMy0xNSAwLTE4LjctNC43LTI5LjktMTguN2wtOTEuNS0xNDMuNyAwIDEzOSAyOSA2LjVzMCAxNi44LTIzLjQgMTYuOGwtNjQuNCAzLjdjLTEuOS0zLjcgMC0xMy4xIDYuNS0xNC45bDE2LjgtNC43IDAtMTgzLjgtMjMuMy0xLjljLTEuOS04LjQgMi44LTIwLjUgMTUuOS0yMS41bDY5LjEtNC43IDk1LjMgMTQ1LjYgMC0xMjguOC0yNC4zLTIuOGMtMS45LTEwLjMgNS42LTE3LjcgMTQuOS0xOC43bDY0LjUtMy44ek00NC40IDM2LjdMMzEwLjYgMTcuMWMzMi43LTIuOCA0MS4xLS45IDYxLjYgMTRsODUgNTkuN2MxNCAxMC4zIDE4LjcgMTMuMSAxOC43IDI0LjNsMCAzMjcuNmMwIDIwLjUtNy41IDMyLjctMzMuNiAzNC41TDEzMy4yIDQ5NS44Yy0xOS42IC45LTI5LTEuOS0zOS4yLTE0LjlMMzEuNCAzOTkuN2MtMTEuMi0xNC45LTE1LjktMjYuMS0xNS45LTM5LjJsMC0yOTEuMmMwLTE2LjggNy41LTMwLjggMjguOS0zMi43eiJdCiAgICB9OwogICAgZmFDaHJvbWVjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNocm9tZWNhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzOCIsICJNNDQ4IDY0TDY0LjIgNjRjLTIzLjYgMC00Mi43IDE5LjEtNDIuNyA0Mi43bDAgNjMuOSA0Mi43IDAgMC02My45IDM4My44IDAgMCAyOTguNi0xNDkuMiAwIDAgNDIuNyAxNDkuNCAwYzIzLjYgMCA0Mi43LTE5LjEgNDIuNy00Mi43bDAtMjk4LjZDNDkwLjkgODMuMSA0NzEuNiA2NCA0NDggNjR6TTIxLjUgMzgzLjZsMCA2My45IDYzLjkgMGMwLTM1LjMtMjguNi02My45LTYzLjktNjMuOXptMC04NWwwIDQyLjRjNTguOSAwIDEwNi42IDQ4LjEgMTA2LjYgMTA3bDQyLjcgMGMuMS04Mi40LTY2LjktMTQ5LjMtMTQ5LjMtMTQ5LjR6TTIxMy42IDQ0OGw0Mi43IDBDMjU1LjggMzE4LjUgMTUxIDIxMy43IDIxLjUgMjEzLjRsMCA0Mi40YzEwNi0uMiAxOTIgODYuMiAxOTIuMSAxOTIuMnoiXQogICAgfTsKICAgIGZhV2lraXBlZGlhVyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aWtpcGVkaWEtdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjY2IiwgIk02NDAgNTEuMmwtLjMgMTIuMmMtMjguMSAuOC00NSAxNS44LTU1LjggNDAuMy0yNSA1Ny44LTEwMy4zIDI0MC0xNTUuMyAzNTguNmwtMTMuNiAwLTgxLjktMTkzLjFjLTMyLjUgNjMuNi02OC4zIDEzMC05OS4yIDE5My4xLS4zIC4zLTE1IDAtMTUtLjMtNDYuOS0xMDkuNy05Ni4xLTIxOC42LTE0My4xLTMyOC42LTExLjQtMjYuNy00OS40LTcwLTc1LjYtNjkuNyAwLTMuMS0uMy0xMC0uMy0xNC4ybDE2MS45IDAgMCAxMy45Yy0xOS4yIDEuMS01Mi44IDEzLjMtNDMuMyAzNC4yIDIxLjkgNDkuNyAxMDMuNiAyNDAuMyAxMjUuNiAyODguNiAxNS0yOS43IDU3LjgtMTA5LjIgNzUuMy0xNDIuOC0xMy45LTI4LjMtNTguNi0xMzMuOS03Mi44LTE2MC05LjctMTcuOC0zNi4xLTE5LjQtNTUuOC0xOS43bDAtMTMuOSAxNDIuNSAuMyAwIDEzLjFjLTE5LjQgLjYtMzguMSA3LjgtMjkuNCAyNi4xIDE4LjkgNDAgMzAuNiA2OC4xIDQ4LjEgMTA0LjcgNS42LTEwLjggMzQuNy02OS40IDQ4LjEtMTAwLjggOC45LTIwLjYtMy45LTI4LjYtMzguNi0yOS40IC4zLTMuNiAwLTEwLjMgLjMtMTMuNiA0NC40LS4zIDExMS4xLS4zIDEyMy4xLS42bDAgMTMuNkM0NjIuNCA2NCA0MzkuMSA3NiA0MjYuOCA5NC45TDM2Ny42IDIxNy43YzYuNCAxNi4xIDYzLjMgMTQyLjggNjkuMiAxNTYuN0w1NTkuMiA5MS44Yy04LjYtMjMuMS0zNi40LTI4LjEtNDcuMi0yOC4zbDAtMTMuOSAxMjcuOCAxLjEgLjIgLjV6Il0KICAgIH07CiAgICBmYVNpdHJveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaXRyb3giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTQ0YSIsICJNMjEyLjQgMGwwIDAgMjM1LjYgMCAwIDEyOC0zODQgMEM2NCA1Ny42IDE0MS44IC41IDIxMi40IDB6bTI0LjggMTkybDAgMGM2OS45IC41IDE0Ni43IDU3LjYgMTQ2LjcgMTI4bC0xNzMuMiAwIDAgMEMxNDAuOSAzMTkuNiA2NCAyNjIuNCA2NCAxOTJsMTczLjMgMHptLTEuNyAzMjBjNzAuNy0uNSAxNDguNC01Ny42IDE0OC40LTEyOGwtMzg0IDAgMCAxMjggMjM1LjYgMCAwIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUdpdGxhYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ2l0bGFiIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdpdGxhYi1zcXVhcmUiXSwgImU1YWUiLCAiTTAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnptMzM3LjUgMTIuNWw0NC42IDExNi40IC40IDEuMmM1LjYgMTYuOCA3LjIgMzUuMiAyLjMgNTIuNS01IDE3LjItMTUuNCAzMi40LTI5LjggNDMuM2wtLjIgLjEtNjguNCA1MS4yLTU0LjEgNDAuOWMtLjUgLjItMS4xIC41LTEuNyAuOC0yIDEtNC40IDItNi43IDItMyAwLTYuOC0xLjgtOC4zLTIuOGwtNTQuMi00MC45LTY3LjktNTAuOS0uNC0uMy0uMi0uMWMtMTQuMy0xMC44LTI0LjgtMjYtMjkuNy00My4zcy00LjItMzUuNyAyLjItNTIuNWwuNS0xLjIgNDQuNy0xMTYuNGMuOS0yLjMgMi41LTQuMyA0LjUtNS42IDEuNi0xIDMuNC0xLjYgNS4yLTEuOCAxLjMtLjcgMi4xLS40IDMuNCAuMSAuNiAuMiAxLjIgLjUgMiAuNyAxIC40IDEuNiAuOSAyLjQgMS41IC42IC40IDEuMiAxIDIuMSAxLjUgMS4yIDEuNCAyLjIgMyAyLjcgNC44bDI5LjIgOTIuMiAxMjIuOSAwIDMwLjItOTIuMmMuNS0xLjggMS40LTMuNCAyLjYtNC44czIuOC0yLjQgNC41LTMuMWMxLjctLjYgMy42LS45IDUuNC0uN3MzLjYgLjggNS4yIDEuOGMyIDEuMyAzLjcgMy4zIDQuNiA1LjZ6Il0KICAgIH07CiAgICBmYUdpdGxhYlNxdWFyZSA9IGZhU3F1YXJlR2l0bGFiOwogICAgZmFTaG9lbGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9lbGFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjBjIiwgIk00MDUuMiAzMzFjMi4yLTEuMSA0LjQtMi4zIDYuNS0zLjdsOC4zLTQuOGMxLjUtMS4xIDQuNC0zLjQgOC43LTYuN2wuNS0uNWMzLjQtMy40IDcuMi01IDExLjMtNC45IDEuOCAwIDMuOSAuNSA2LjQgMS41bDMxLTI3LjVjLjktLjcgMS43LTEuMyAyLjYtMS44bC4yIDBjMy4zLTEuOSA2LTEuOCA4LjIgLjQgMy45IDIuMSA0LjIgNS42IC45IDEwLjZMNDU3LjIgMzIyYy4yIC41IC40IDEgLjQgMS41IC41IDIuMiAuMyA0LjQtLjUgNi42LS43IDEuNS0xLjggMi45LTMuMSA0LjItMS40IDEuNC0yLjcgMi44LTQuMiA0LjJMNDMxIDM1Mi4yYy0xLjcgMS4yLTMuNCAyLjMtNS4xIDMuMy0yLjEgMS4zLTQuMyAyLjUtNi42IDMuNi0xIC40LTEuOSAuOS0yLjkgMS4zLTUuOSAyLjUtMTEuOSA0LjItMTguMiA1LTIuOSAyNC41LTExLjMgNDcuMS0yNS4xIDY3LjgtMTcuNSAyNS43LTQxLjQgNDUuNC03MS44IDU4LjgtMzAuMiAxMy41LTYzIDIwLjItOTguMiAyMC4yLTQ4LjYtLjUtODgtMTEuNC0xMTguMi0zMi44LTM1LjEtMjUtNTIuNi01Ny45LTUyLjYtOTkuMWwwLTUuNmMxLjItMjguMSA5LjUtNTQuNiAyNC44LTc5LjggMTUuMS0yNC45IDM3LjEtNDEuNyA2Ni4xLTUwLjUgMTQuOS00LjQgMjkuOS02LjYgNDUtNi42IDE1LjUgMCAzMS42IDIuOSA0OC4xIDguNnMzNS4yIDE1LjUgNTUuOSAyOS41bDU0LjEgMzYuM2MxNS4xIDkuOCAyOC44IDE2LjUgNDEuMiAyMC0yLjYtMjUuMS0xMS43LTQ2LjYtMjcuMy02NC41LTE1LjctMTguMS0zNS42LTMxLjMtNTkuOS0zOS43TDI1NyAyMjBjLTIxLjQtNy41LTM3LjMtMTQuOS00Ny43LTIyLjItMjguMi0xOS4xLTQzLjgtNDUuMi00Ny03OC41bC0uNS05LjhjMC0zMi4xIDEzLTU4LjkgMzktODAuNSAyMy0xOS4zIDUwLjYtMjkgODIuNS0yOSAyNCAwIDQ1LjYgNi45IDY0LjcgMjAuOCAxOS4yIDE0IDMwLjEgMzMuOCAzMi42IDU5LjRsLjUgMTBjMCAxOC42LTQuOCAzNC41LTE0LjQgNDcuNy05LjggMTMuMi0xOC41IDE5LjktMjYgMTkuOS0xLjYtLjEtMy4xLS4zLTQuNS0uNmwtMzQgMzJjLTUuNSAzLTkuMiAyLjUtMTEuMS0xLjYtMS45LTIuMi0xLjgtNC45IC41LTguMmwuMi0uMmMuNS0uNyAxLjItMS41IDItMi40bDMxLjYtMzBjLS40LTEuNS0uNi0zLjEtLjYtNC44IDAtNC4xIDEuNi03LjYgNC45LTEwLjQgMTMuOC0xMi40IDIwLjgtMjYuNyAyMC44LTQyLjggMC0xNi02LjEtMjkuNS0xOC4yLTQwLjRzLTI4LjctMTYuNS00OS43LTE2LjhjLTI2LjIgMC00Ny44IDcuOS02NC43IDIzLjdTMTkyLjYgODkuOSAxOTIuNiAxMTJjMCAxNy44IDYuOSAzMy45IDIwLjYgNDguMyAxMy42IDE0LjIgMzQuNiAyNS40IDYzIDMzLjUgMzkuOCAxMS41IDcwLjIgMzEgOTEuMyA1OC4zIDE4LjcgMjQuMiAyOS4xIDUxLjMgMzEuMyA4MS40IDIuMi0uNyA0LjMtMS41IDYuNS0yLjZsLS4xIC4xek0yOTQuNCAxNzguN2MwIDEuMSAuNiAxLjYgMS44IDEuNiAuMSAwIDkuNy04LjkgMjguOC0yNi42IDAtMi40LTUuMSAuOS0xNS4zIDEwLTEwLjIgOS4yLTE1LjMgMTQuMi0xNS4zIDE0LjlsMCAuMXptOCA2LjRjMC0xLS41LTEuNS0xLjUtMS41LTEuMSAwLTIuMSAuNS0yLjkgMS42LTEuOS0uMS0zLjMgLjEtNC4yIC43LS40IC4yLS41IC41LS41IC43IDAgLjcgLjUgMS4zIDEuNSAxLjZsMy4zIDBjMi45LTEuMSA0LjQtMi4yIDQuNC0zLjNsLS4xIC4yek0zMjUgMTY1LjJjMC0yLjgtMS42LTIuOC00LjkgMC0xLjYgMS41LTMuNiAzLjUtNiA2LjItLjggLjYtMi42IDIuMi01LjMgNC45LTIuOCAyLjktNC4yIDQuNy00LjIgNS4zbC4yIDEuM2MuNyAuMiAxLjIgLjQgMS41IC40IC4xIDAgMy4zLTIuOSA5LjUtOC43czkuMy04LjkgOS4zLTkuM2wtLjEtLjF6bTE1OS43IDEyMGwtMzAuNiAyN2MxLjggMSAzLjIgMi40IDQgNC4ybDMwLjItMjdjLjItMS4yIC4xLTIuMi0uNS0yLjktLjYtLjUtMS42LS45LTMuMS0xLjN6bS0xLjYtLjlsLS43LS43LTI3IDIxLjkgMS42IDIgMjYtMjMuMSAuMS0uMXpNMzY2LjkgMzYzLjljLTgtMi4xLTE1LjQtNC42LTIyLjItNy41LTE1LjMtNi4yLTM0LjMtMTctNTctMzIuNGwtMzcuNC0yNS4zYy0xNS44LTEwLjEtMzAuMi0xNy42LTQzLjItMjIuNi0xMy4xLTQuOS0yNi03LjMtMzguNi03LjNsLTUuNSAwYy0zMi4yIDEuNy01Ny4yIDEzLjgtNzUgMzYuMi0xNi42IDIwLjgtMjUgNDUuMy0yNSA3My42IDAgMzEuOCAxMi44IDU2LjcgMzguMiA3NC43IDI1LjQgMTguMSA2MC4yIDI3LjEgMTA0LjQgMjcuMSAzNC43IDAgNjQtNi4yIDg3LjgtMTguNiAyMy43LTEyLjQgNDIuMS0yOC44IDU1LjItNDkuMiA5LjgtMTUuNSAxNS45LTMxLjggMTguMi00OC44bC4xIC4xeiJdCiAgICB9OwogICAgZmFTZWxsY2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWxsY2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmRhIiwgIk0zNTMuNSAzMkw5NC44IDMyQzQyLjcgMzIgLjEgNzQuNiAuMSAxMjYuNmwwIDI1OC43Qy4xIDQzNy40IDQyLjcgNDgwIDk0LjggNDgwbDI1OC43IDBjNTIuMSAwIDk0LjctNDIuNiA5NC43LTk0LjZsMC0yNTguOGMwLTUyLTQyLjYtOTQuNi05NC43LTk0LjZ6bS01MCAzMTYuNGMtMjcuOSA0OC4yLTg5LjkgNjQuOS0xMzguMiAzNy4yLTIyLjkgMzkuOC01NC45IDguNi00Mi4zLTEzLjJsMTUuNy0yNy4yYzUuOS0xMC4zIDE5LjItMTMuOSAyOS41LTcuOSAxOC42IDEwLjgtLjEtLjEgMTguNSAxMC43IDI3LjYgMTUuOSA2My40IDYuMyA3OS40LTIxLjMgMTUuOS0yNy42IDYuMy02My40LTIxLjMtNzkuNC0xNy44LTEwLjItLjYtLjQtMTguNi0xMC42LTI0LjYtMTQuMi0zLjQtNTEuOSAyMS42LTM3LjUgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyA0OC40IDI4IDY1LjEgOTAuMyAzNy4yIDEzOC41em0yMS44LTIwOC44Yy0xNyAyOS41LTE2LjMgMjguOC0xOSAzMS41LTYuNSA2LjUtMTYuMyA4LjctMjYuNSAzLjYtMTguNi0xMC44IC4xIC4xLTE4LjUtMTAuNy0yNy42LTE1LjktNjMuNC02LjMtNzkuNCAyMS4zcy02LjMgNjMuNCAyMS4zIDc5LjRjMCAwIDE4LjUgMTAuNiAxOC42IDEwLjYgMjQuNiAxNC4yIDMuNCA1MS45LTIxLjYgMzcuNS0xOC42LTEwLjggLjEgLjEtMTguNS0xMC43LTQ4LjItMjcuOC02NC45LTkwLjEtMzcuMS0xMzguNCAyNy45LTQ4LjIgODkuOS02NC45IDEzOC4yLTM3LjJsNC44LTguNGMxNC4zLTI0LjkgNTItMy4zIDM3LjcgMjEuNXoiXQogICAgfTsKICAgIGZhTWl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1peCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2NiIiwgIk0wIDY0TDAgNDEyLjljMCA1Ni4yIDg4IDU4LjEgODggMGwwLTIzOC42YzcuOS01Mi45IDg4LTUwLjQgODggNi41bDAgMTc1LjNjMCA1Ny45IDk2IDU4IDk2IDBMMjcyIDI0MGM1LjMtNTQuNyA4OC01Mi41IDg4IDQuM2wwIDIzLjhjMCA1OS45IDg4IDU2LjYgODggMEw0NDggNjQgMCA2NHoiXQogICAgfTsKICAgIGZhQ2NBcHBsZVBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1hcHBsZS1wYXkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQxNiIsICJNMzAyLjIgMjE4LjRjMCAxNy4yLTEwLjUgMjcuMS0yOSAyNy4xbC0yNC4zIDAgMC01NC4yIDI0LjQgMGMxOC40IDAgMjguOSA5LjggMjguOSAyNy4xek0zNDkuNyAyODFjMCA4LjMgNy4yIDEzLjcgMTguNSAxMy43IDE0LjQgMCAyNS4yLTkuMSAyNS4yLTIxLjlsMC03LjctMjMuNSAxLjVjLTEzLjMgLjktMjAuMiA1LjgtMjAuMiAxNC40ek01NzYgNzlsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDc5Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDc5QzAgNTIuNSAyMS41IDMxIDQ4IDMxbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjcuOCAxOTcuMmM4LjQgLjcgMTYuOC00LjIgMjIuMS0xMC40IDUuMi02LjQgOC42LTE1IDcuNy0yMy43LTcuNCAuMy0xNi42IDQuOS0yMS45IDExLjMtNC44IDUuNS04LjkgMTQuNC03LjkgMjIuOHptNjAuNiA3NC41Yy0uMi0uMi0xOS42LTcuNi0xOS44LTMwLS4yLTE4LjcgMTUuMy0yNy43IDE2LTI4LjItOC44LTEzLTIyLjQtMTQuNC0yNy4xLTE0LjctMTIuMi0uNy0yMi42IDYuOS0yOC40IDYuOS01LjkgMC0xNC43LTYuNi0yNC4zLTYuNC0xMi41IC4yLTI0LjIgNy4zLTMwLjUgMTguNi0xMy4xIDIyLjYtMy40IDU2IDkuMyA3NC40IDYuMiA5LjEgMTMuNyAxOS4xIDIzLjUgMTguNyA5LjMtLjQgMTMtNiAyNC4yLTYgMTEuMyAwIDE0LjUgNiAyNC4zIDUuOSAxMC4yLS4yIDE2LjUtOS4xIDIyLjgtMTguMiA2LjktMTAuNCA5LjgtMjAuNCAxMC0yMXptMTM1LjQtNTMuNGMwLTI2LjYtMTguNS00NC44LTQ0LjktNDQuOGwtNTEuMiAwIDAgMTM2LjQgMjEuMiAwIDAtNDYuNiAyOS4zIDBjMjYuOCAwIDQ1LjYtMTguNCA0NS42LTQ1em05MCAyMy43YzAtMTkuNy0xNS44LTMyLjQtNDAtMzIuNC0yMi41IDAtMzkuMSAxMi45LTM5LjcgMzAuNWwxOS4xIDBjMS42LTguNCA5LjQtMTMuOSAyMC0xMy45IDEzIDAgMjAuMiA2IDIwLjIgMTcuMmwwIDcuNS0yNi40IDEuNmMtMjQuNiAxLjUtMzcuOSAxMS42LTM3LjkgMjkuMSAwIDE3LjcgMTMuNyAyOS40IDMzLjQgMjkuNCAxMy4zIDAgMjUuNi02LjcgMzEuMi0xNy40bC40IDAgMCAxNi40IDE5LjYgMCAwLTY4IC4xIDB6TTUxNiAyMTAuOWwtMjEuNSAwLTI0LjkgODAuNi0uNCAwLTI0LjktODAuNi0yMi4zIDAgMzUuOSA5OS4zLTEuOSA2Yy0zLjIgMTAuMi04LjUgMTQuMi0xNy45IDE0LjItMS43IDAtNC45LS4yLTYuMi0uM2wwIDE2LjRjMS4yIC40IDYuNSAuNSA4LjEgLjUgMjAuNyAwIDMwLjQtNy45IDM4LjktMzEuOEw1MTYgMjEwLjl6Il0KICAgIH07CiAgICBmYUJyYXZlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJyYXZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2M2MiLCAiTTE0NS42IDBsMTU3IDAgNDQuNyA1MC44czM5LjMtMTAuOSA1Ny44IDcuNiAzMy44IDM0LjkgMzMuOCAzNC45bC0xMiAyOS41IDE1LjMgNDMuN3MtNDQuOSAxNzAuMi01MC4xIDE5MWMtMTAuNCA0MC45LTE3LjQgNTYuOC00Ni45IDc3LjVzLTgyLjkgNTYuOC05MS42IDYyLjJjLTEuOSAxLjItMy45IDIuNS01LjkgMy45LTcuNSA1LjEtMTUuOCAxMC44LTIzLjUgMTAuOHMtMTYuMS01LjctMjMuNS0xMC44Yy0yLTEuNC00LTIuOC01LjktMy45LTguNy01LjUtNjIuMS00MS41LTkxLjYtNjIuMnMtMzYuNS0zNi42LTQ2LjktNzcuNWMtNS4zLTIwLjgtNTAuMS0xOTEtNTAuMS0xOTFMMjEuNSAxMjIuOCA5LjMgOTMuM3MxNS4zLTE2LjQgMzMuOC0zNC45IDU3LjgtNy42IDU3LjgtNy42TDE0NS42IDB6bTc4LjUgNDA3LjZjMy43IDAgOC45LTQuNyAxMy04LjQgLjYtLjUgMS4yLTEuMSAxLjctMS41IDQuMi0zLjcgNDcuOC0zNy41IDUxLTM5LjhzNS40LTYuNSAxLjktOC43Yy0yLjgtMS43LTEwLTUuNS0yMC4zLTEwLjgtMy0xLjYtNi4zLTMuMi05LjctNS0xNS40LTgtMzQuNS0xNC43LTM3LjUtMTQuN3MtMjIuMSA2LjgtMzcuNSAxNC43Yy0zLjUgMS44LTYuNyAzLjUtOS43IDUtMTAuMyA1LjMtMTcuNiA5LjEtMjAuMyAxMC44LTMuNiAyLjItMS40IDYuNCAxLjkgOC43czQ2LjggMzYuMSA1MSAzOS44Yy41IC41IDEuMSAxIDEuNyAxLjUgNC4xIDMuNyA5LjMgOC40IDEzIDguNGwtLjIgMHptMC0xNjUuN2M0LjcgMCAxNy42LTMgMjYuNC01bDItLjVjNy44LTEuOCA3LjMtNi4zIDYuNC0xMy0uMS0uOC0uMi0xLjYtLjMtMi40LS42LTYuMS01LjgtMzMuMS05LjEtNTAuMy0xLjEtNS44LTItMTAuNS0yLjQtMTIuOS0xLjUtOC4xLS42LTkuNCAuNy0xMS4zIC4yLS4zIC41LS43IC43LTEuMSAxLjQtMi4zIDE2LTYuMiAyNy45LTkuNSAyLjUtLjcgNC44LTEuMyA2LjktMS45IDEwLjYtMyAzMi40LS42IDQ0LjIgLjYgMS44IC4yIDMuNCAuNCA0LjcgLjUgOS42IC45IDEwLjQgMi4zIDcuMiAzLjgtMi4zIDEuMS0xNi4yIDYuMy0yOC43IDEwLjktNC43IDEuOC05LjIgMy41LTEyLjggNC44LTEuNSAuNS0zIDEuMS00LjUgMS43LTEyLjUgNC42LTI3LjIgMTAtMjguOSAxOS40LTEuNSA4LjMgNS4yIDE5LjkgMTEuMyAzMC4zIDEuNiAyLjggMy4yIDUuNSA0LjYgOC4xIDYuMyAxMS45IDYuNSAxMy4zIDYuMSAxOC4xLS40IDMuOS0xNC41IDEyLjctMjIuNCAxNy42LTEuOCAxLjEtMy4zIDIuMS00LjIgMi43LS44IC41LTIuMSAxLjQtMy44IDIuNC04LjYgNS4yLTI2LjMgMTYtMjYuMyAyMi41IDAgNy44IDI0LjYgMjguMSAzMi40IDMzLjJzMjguOSAxNi4xIDM3LjkgMTcuOCAyMy04LjUgMzEuMi0yMy44YzcuNy0xNC40IDEuNy0yOC41LTMuMi00MGwtLjktMi4yYy00LjUtMTAuNiAxLjktMTcgNi4yLTIxLjMgLjUtLjUgMS0xIDEuNC0xLjRsNDMtNDUuN2MxLjMtMS4zIDIuNS0yLjYgMy43LTMuOCA1LjgtNS43IDEwLjgtMTAuNSAxMC44LTIyLjggMC0xNC45LTU3LjUtODQuNS01Ny41LTg0LjVzLTQ4LjUgOS4zLTU1LjEgOS4zYy01LjIgMC0xNS4zLTMuNS0yNS44LTcuMS0yLjctLjktNS40LTEuOS04LTIuNy0xMy00LjMtMjEuOC00LjQtMjEuOC00LjRzLTguNyAwLTIxLjggNC40Yy0yLjcgLjktNS40IDEuOC04IDIuNy0xMC41IDMuNi0yMC42IDcuMS0yNS44IDcuMS02LjUgMC01NS4xLTkuMy01NS4xLTkuM3MtNTcuNSA2OS42LTU3LjUgODQuNWMwIDEyLjMgNC45IDE3LjEgMTAuOCAyMi44IDEuMiAxLjIgMi41IDIuNCAzLjcgMy44bDQzLjEgNDUuOGMuNCAuNSAuOSAuOSAxLjQgMS40IDQuMyA0LjMgMTAuNiAxMC43IDYuMiAyMS4zbC0uOSAyLjJjLTQuOSAxMS41LTExIDI1LjYtMy4yIDQwIDguMiAxNS4zIDIyLjIgMjUuNSAzMS4yIDIzLjhzMzAuMS0xMi43IDM3LjktMTcuOCAzMi40LTI1LjQgMzIuNC0zMy4yYzAtNi41LTE3LjctMTcuMy0yNi4zLTIyLjUtMS43LTEtMy4xLTEuOS0zLjgtMi40LS45LS42LTIuNC0xLjUtNC4yLTIuNy03LjktNC45LTIyLTEzLjctMjIuNC0xNy42LS40LTQuOC0uMy02LjIgNi4xLTE4LjEgMS4zLTIuNSAyLjktNS4zIDQuNi04LjEgNi0xMC40IDEyLjgtMjIgMTEuMy0zMC4zLTEuNy05LjQtMTYuNC0xNC44LTI4LjktMTkuNC0xLjYtLjYtMy4xLTEuMS00LjUtMS43LTMuNi0xLjQtOC4xLTMuMS0xMi44LTQuOGwtLjEgMGMtMTIuNS00LjctMjYuNC05LjktMjguNy0xMC45LTMuMi0xLjUtMi4zLTIuOCA3LjItMy44IDEuMy0uMSAyLjktLjMgNC43LS41IDExLjgtMS4zIDMzLjYtMy42IDQ0LjItLjYgMi4xIC42IDQuNCAxLjIgNi45IDEuOSAxMS45IDMuMiAyNi41IDcuMiAyNy45IDkuNSAuMiAuNCAuNSAuNyAuNyAxLjEgMS4zIDEuOSAyLjIgMy4yIC43IDExLjMtLjQgMi40LTEuMyA3LjEtMi40IDEyLjktMy4zIDE3LjItOC41IDQ0LjItOS4xIDUwLjMtLjEgLjgtLjIgMS43LS4zIDIuNC0uOCA2LjctMS40IDExLjIgNi40IDEzbDIgLjVjOC44IDIgMjEuOCA1IDI2LjQgNWwwLS4xeiJdCiAgICB9OwogICAgZmFFdHN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV0c3kiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJkNyIsICJNMzg0IDM0OGMtMS44IDEwLjctMTMuOCAxMTAtMTUuNSAxMzItMTE3LjktNC4zLTIxOS45LTQuNy0zNjguNSAwbDAtMjUuNWM0NS41LTguOSA2MC42LTggNjEtMzUuMiAxLjgtNzIuMyAzLjUtMjQ0LjEgMC0zMjItMS0yOC41LTEyLjEtMjYuOC02MS0zNkwwIDM1LjhjNzMuOSAyLjQgMjU1LjkgOC42IDM2My0zLjgtMy41IDM4LjItNy44IDEyNi41LTcuOCAxMjYuNWwtMjMuMiAwQzMyMC45IDExNS43IDMxMy4yIDY4IDI3Ny4zIDY4bC0xMzcgMGMtMTAuMiAwLTEwLjcgMy41LTEwLjcgOS44bDAgMTYzLjhjNTggLjUgODguNS0yLjUgODguNS0yLjUgMjkuOC0xIDI3LjYtOC41IDQwLjctNjUuM2wyNS44IDBjLTQuNCAxMDEuNC0zLjkgNjEuOC0xLjggMTYwLjNMMjU3IDMzNGMtOS4yLTQwLjEtOS4xLTYxLTM5LjUtNjEuNSAwIDAtMjEuNS0yLTg4LTJsMCAxMzljMCAyNiAxNC4zIDM4LjMgNDQuMyAzOC4zbDg5LjMgMGM2My42IDAgNjYuNi0yNSA5OC43LTk5LjhsMjIuMiAweiJdCiAgICB9OwogICAgZmFCdGMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnRjIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNWEiLCAiTTMxMC40IDI0Mi42YzI3LjctMTQuMiA0NS40LTM5LjQgNDEuMy04MS4zLTUuNC01Ny40LTUyLjUtNzYuNi0xMTQuOC04MS45bDAtNzkuNC00OC41IDAgMCA3Ny4yYy0xMi42IDAtMjUuNSAuMy0zOC40IC42bDAtNzcuOC00OC41IDAgMCA3OS40Yy0xNy44IC41LTM4LjYgLjMtOTcuNCAwbDAgNTEuN2MzOC4zLS43IDU4LjQtMy4xIDYzIDIxLjRsMCAyMTcuNGMtMi45IDE5LjUtMTguNSAxNi43LTUzLjMgMTYuMUw0IDQ0My43Yzg4LjUgMCA5Ny40IC4zIDk3LjQgLjNsMCA2OCA0OC41IDAgMC02Ny4xYzEzLjIgLjMgMjYuMiAuMyAzOC40IC4zbDAgNjYuNyA0OC41IDAgMC02OGM4MS4zLTQuNCAxMzUuNi0yNC45IDE0Mi45LTEwMS41IDUuNy02MS40LTIzLjMtODguOS02OS4zLTk5Ljl6TTE1MC44IDEzNC42YzI3LjQgMCAxMTMuMS04LjUgMTEzLjEgNDguNSAwIDU0LjUtODUuNyA0OC4yLTExMy4xIDQ4LjJsMC05Ni43em0wIDI1MS44bDAtMTA2LjVjMzIuOCAwIDEzMy4xLTkuMSAxMzMuMSA1My4zIDAgNjAuMi0xMDAuNCA1My4zLTEzMy4xIDUzLjN6Il0KICAgIH07CiAgICBmYUFkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE3MCIsICJNMjU2IDE2Ny41bDY0LjkgOTguOC0xMjkuOCAwIDY0LjktOTguOHpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzk2LjIgODIuN2wtMTQ4LjItMjIzLjItMTQ4LjIgMjIzLjIgMzAuNCAwIDMzLjYtNTEuNyAxNjguNiAwIDMzLjYgNTEuNyAzMC4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVhUd2l0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14LXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxYSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjk3LjEgODRsLTEwMy44IDExOC42IDEyMi4xIDE2MS40LTk1LjYgMC03NC44LTk3LjktODUuNyA5Ny45LTQ3LjUgMCAxMTEtMTI2LjktMTE3LjEtMTUzLjEgOTggMCA2Ny43IDg5LjUgNzguMi04OS41IDQ3LjUgMHpNMzIzLjMgMzY3LjZsLTE2OS45LTIyNC43LTI4LjMgMCAxNzEuOCAyMjQuNyAyNi40IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUZvbnRBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTVhZCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTAgMTIyYzAgOS4zLTQuOCAxNy40LTEyLjEgMjJsMTg4LjkgMGM3LjMgMCAxMy4yIDUuOSAxMy4yIDEzLjIgMCAxLjgtLjQgMy43LTEuMSA1LjRMMzEyIDI2NCAzNDIuOSAzMzMuNGMuNyAxLjcgMS4xIDMuNSAxLjEgNS40IDAgNy4zLTUuOSAxMy4yLTEzLjIgMTMuMmwtMTg2LjggMCAwIDMyLTMyIDAgMC0yMDkuNWMtNi4xLTQuOC0xMC0xMi4yLTEwLTIwLjUgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNnoiXQogICAgfTsKICAgIGZhRm9ydW1iZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydW1iZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxMSIsICJNNS44IDMwOS43QzIgMjkyLjcgMCAyNzUuNSAwIDI1OC4zIDAgMTM1IDk5LjggMzUgMjIzLjEgMzUgMjM5LjcgMzUgMjU2LjQgMzcgMjcyLjQgNDAuNSAxNDkgODcuNSA1MS45IDE4NiA1LjggMzA5Ljd6TTM5OC43IDEyMC41Yy0xMy43LTE3LjUtMjkuNy0zMi43LTQ3LjgtNDUuMy0xNDkuNiA0NC4zLTI2Ni4zIDE2Mi4xLTMwOS43IDMxMiAxMi41IDE4LjEgMjggMzUuNiA0NS4yIDQ5IDQzLjEtMTUxLjMgMTYxLjItMjcxLjcgMzEyLjMtMzE1Ljd6bTE1LjggMjUyLjdjMTUuMi0yNS4xIDI1LjQtNTMuNyAyOS41LTgyLjgtNzkuNCA0Mi45LTE0NSAxMTAuNi0xODcuNiAxOTAuMyAzMC00LjQgNTguOS0xNS4zIDg0LjYtMzEuMyAzNSAxMy4xIDcwLjkgMjQuMyAxMDcgMzMuNi05LjMtMzYuNS0yMC40LTc0LjUtMzMuNS0xMDkuOHptMjkuNy0xNDUuNWMtMi42LTE5LjUtNy45LTM4LjctMTUuOC01Ni44LTEzNy45IDQ1LjgtMjQ2LjQgMTU2LjYtMjkxLjMgMjk1LjEgMTguMSA3LjYgMzcgMTIuNSA1Ni42IDE1LjIgNDYuMy0xMTQuMSAxMzYuOC0yMDYuOCAyNTAuNS0yNTMuNXoiXQogICAgfTsKICAgIGZhNDJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICI0Mi1ncm91cCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJpbm5vc29mdCJdLCAiZTA4MCIsICJNMzIwIDk2bDAgMzIwYzIxIDAgNDEuOC00LjEgNjEuMi0xMi4yczM3LTE5LjggNTEuOS0zNC43IDI2LjYtMzIuNSAzNC43LTUxLjkgMTIuMi00MC4yIDEyLjItNjEuMi00LjEtNDEuOC0xMi4yLTYxLjItMTkuOC0zNy4xLTM0LjctNTEuOS0zMi41LTI2LjYtNTEuOS0zNC43LTQwLjItMTIuMi02MS4yLTEyLjJ6TTAgMjU2TDE2MCA0MTYgMzIwIDI1NiAxNjAgOTYgMCAyNTZ6bTQ4MCAwYzAgMjEgNC4xIDQxLjggMTIuMiA2MS4yczE5LjggMzcgMzQuNyA1MS45IDMyLjUgMjYuNiA1MS45IDM0LjcgNDAuMiAxMi4yIDYxLjIgMTIuMmwwLTMyMGMtNDIuNCAwLTgzLjEgMTYuOS0xMTMuMSA0Ni45UzQ4MCAyMTMuNiA0ODAgMjU2eiJdCiAgICB9OwogICAgZmFJbm5vc29mdCA9IGZhNDJHcm91cDsKICAgIGZhU3R1bWJsZXVwb25DaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1bWJsZXVwb24tY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTMiLCAiTTI2NCA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCAxNzcuNWMtOS44IDAtMTcuOCA4LTE3LjggMTcuOGwwIDEwNi45YzAgNDAuOS0zMy45IDczLjktNzQuOSA3My45LTQxLjQgMC03NC45LTMzLjUtNzQuOS03NC45bDAtNDYuNSA1Ny4zIDAgMCA0NS44YzAgMTAgOCAxNy44IDE3LjggMTcuOHMxNy44LTcuOSAxNy44LTE3LjhsMC0xMDguNGMwLTQwIDM0LjItNzIuMSA3NC43LTcyLjEgNDAuNyAwIDc0LjcgMzIuMyA3NC43IDcyLjZsMCAyMy43LTM0LjEgMTAuMS0yMi45LTEwLjcgMC0yMC42Yy4xLTkuNi03LjktMTcuNi0xNy43LTE3LjZ6TTQzMS42IDMwOS4xYzAgNDEuNC0zMy41IDc0LjktNzQuOSA3NC45LTQxLjIgMC03NC45LTMzLjItNzQuOS03NC4ybDAtNDYuOCAyMi45IDEwLjcgMzQuMS0xMC4xIDAgNDcuMWMwIDkuOCA4IDE3LjYgMTcuOCAxNy42czE3LjgtNy45IDE3LjgtMTcuNmwwLTQ4IDU3LjMgMGMtLjEgNDUuOS0uMSA0Ni40LS4xIDQ2LjR6Il0KICAgIH07CiAgICBmYVN5bWZvbnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3ltZm9ueSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNkIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM4OS43IDE1MS41Yy0xMS41IC40LTE5LjQtNi40LTE5LjgtMTYuOS0uMy05LjIgNi43LTEzLjQgNi41LTE4LjktLjItNi41LTEwLjItNi44LTEyLjktNi43LTM5LjggMS4zLTQ4LjYgNTctNTguOSAxMTMuOCAyMS40IDMuMiAzNi42LS43IDQ1LjEtNi4yIDEyLTcuNy0zLjMtMTUuNy0xLjQtMjQuNiA0LTE4LjIgMzIuNi0xOSAzMiA1LjMtLjQgMTcuOS0yNS45IDQxLjgtNzcuNiAzNS43LTEwLjggNTkuNS0xOC40IDExNS01OC4yIDE2MS43LTI5IDM0LjUtNTguNCAzOS44LTcxLjYgNDAuMy0yNC42IC45LTQxLTEyLjMtNDEuNi0yOS44LS42LTE3IDE0LjQtMjYuMyAyNC4zLTI2LjYgMjEuOS0uOCAzMC4xIDI1LjcgMTQuOSAzNC0xMi4xIDkuNyAuMSAxMi42IDIuMSAxMi42IDEwLjQtLjQgMTcuMy01LjUgMjIuMi05IDI0LTIwIDMzLjItNTQuOSA0NS40LTExOC4zIDguMi00OS43IDE3LTc4IDE4LjItODItMTYuOS0xMi43LTI3LjEtMjguNi00OS44LTM0LjctMTUuNi00LjItMjUuMS0uNi0zMS44IDcuOC03LjkgMTAtNS4zIDIzIDIuNCAzMC43bDEyLjYgMTRjMTUuNSAxNy45IDI0IDMxLjkgMjAuOCA1MC42LTUuMSAyOS45LTQwLjcgNTIuOS04Mi45IDM5LjktMzYtMTEuMS00Mi43LTM2LjYtMzguNC01MC42IDcuNS0yNC4yIDQyLjQtMTEuNyAzNC42IDEzLjYtMi44IDguNi00LjkgOC43LTYuMyAxMy4xLTQuNiAxNC44IDQxLjggMjguNCA1MS0xLjQgNC41LTE0LjUtNS4zLTIxLjctMjIuMi0zOS45LTI4LjUtMzEuNy0xNi02NS41IDIuOS03OS43IDUyLjgtMzkuNCAxMDAuNSAxNy41IDExMC42IDI1LjggMzcuMi0xMDkgMTAwLjUtMTA1LjUgMTAyLjQtMTA1LjUgMjUuMi0uOCA0NC4yIDEwLjYgNDQuOCAyOC42IC4yIDcuNy00LjIgMjIuNi0xOS41IDIzLjF6Il0KICAgIH07CiAgICBmYVNhbGVzZm9yY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2FsZXNmb3JjZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODNiIiwgIk0yNDkuNCAyNDUuNmwtMjYuNCAwYy43LTUuMiAzLjMtMTQuMSAxMy42LTE0LjEgNi44IDAgMTIgMy44IDEyLjcgMTQuMXpNMzg2IDIzMS44Yy0uNSAwLTE0LjEtMS44LTE0LjEgMjBzMTMuNiAyMCAxNC4xIDIwYzEzIDAgMTQuMS0xMy41IDE0LjEtMjAgMC0yMS44LTEzLjctMjAtMTQuMS0yMHpNMTQyLjggMjU1LjVjLTEuMSAuOS0yIDItMi41IDMuMnMtLjggMi43LS43IDRjMCA0LjggMi4xIDYuMSAzLjMgNyA0LjcgMy43IDE1LjEgMi4xIDIwLjkgMWwwLTE2LjljLTUuMy0xLjEtMTYuNy0yLTIwLjkgMS42ek02NDAuNSAyMzJjMCA4Ny42LTgwIDE1NC40LTE2NS40IDEzNi40LTE4LjQgMzMtNzAuNyA3MC44LTEzMi4yIDQxLjYtNDEuMiA5Ni0xNzcuOSA5Mi4yLTIxMy44LTUuMi0xMTkuNyAyMy45LTE3OC44LTEzOC40LTc1LjMtMTk5LjMtMzQuOC03OS40IDIyLjYtMTczLjYgMTE0LjMtMTczLjYgMTkuMSAwIDM3LjkgNC40IDU1IDEyLjlzMzIgMjAuNyA0My42IDM1LjhjMjAuNy0yMS40IDQ5LjQtMzQuOCA4MS4xLTM0LjggNDIuMyAwIDc5IDIzLjUgOTguOCA1OC42IDkyLjgtNDAuNyAxOTMuOCAyOC4yIDE5My44IDEyNy41ek0xMjAuOSAyNjMuOGMwLTExLjgtMTEuNy0xNS4yLTE3LjktMTcuMi01LjMtMi4xLTEzLjQtMy41LTEzLjQtOC45IDAtOS41IDE3LTYuNyAyNS4yLTIuMSAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy0xMi4zLTcuNi00MC43LTguNS00MC43IDEyLjcgMCAxMi41IDExLjUgMTUuNCAxNy45IDE3LjIgNC43IDEuNiAxMy4yIDMgMTMuMiA4LjcgMCA0LTMuNSA3LjEtOS4yIDcuMS02LjkgMC0xMy41LTIuMi0xOS02LjMtLjUtLjItMS40LS43LTEuNiAuN2wtMi40IDcuNWMtLjUgLjkgLjIgMS4yIC4yIDEuNCAxLjggMS40IDEwLjMgNi42IDIyLjggNi42IDEzLjIgMCAyMS40LTcuMSAyMS40LTE4LjFsMCAwem0zMi00Mi42Yy0xMC4xIDAtMTguNyAzLjItMjEuNCA1LjItLjEgLjEtLjIgLjItLjMgLjNzLS4xIC4yLS4xIC40IDAgLjMgMCAuNCAuMSAuMyAuMiAuNGwyLjYgNy4xYy4xIC4yIC4yIC41IC41IC42cy41IC4yIC43IC4xYy42IDAgNi44LTQgMTYuOS00IDQgMCA3LjEgLjcgOS4yIDIuNCAzLjYgMi44IDMuMSA4LjMgMy4xIDEwLjYtNC44LS4zLTE5LjEtMy40LTI5LjQgMy44LTIuMyAxLjYtNC4zIDMuOC01LjUgNi4zcy0xLjkgNS40LTEuOCA4LjJjMCA1LjkgMS41IDEwLjQgNi42IDE0LjQgMTIuMiA4LjIgMzYuMyAyIDM4LjEgMS40IDEuNi0uMyAzLjUtLjcgMy41LTEuOWwwLTMzLjljMC00LjYgLjMtMjEuNi0yMi44LTIxLjZsMCAuMXptNDYuNi0yMWMwLS4yIDAtLjMtLjEtLjVzLS4xLS4zLS4zLS40LS4yLS4yLS40LS4zLS4zLS4xLS41LS4xbC05LjggMGMtLjIgMC0uMyAwLS41IC4xcy0uMyAuMS0uNCAuMy0uMiAuMi0uMyAuNC0uMSAuMy0uMSAuNWwwIDc5YzAgLjIgMCAuMyAuMSAuNXMuMSAuMyAuMyAuNCAuMiAuMiAuNCAuMyAuMyAuMSAuNSAuMWw5LjkgMGMuMiAwIC4zIDAgLjUtLjFzLjMtLjEgLjQtLjMgLjItLjIgLjMtLjQgLjEtLjMgLjEtLjVsLS4xLTc5em01NS43IDI4LjljLTIuMS0yLjMtNi44LTcuNS0xNy42LTcuNS0zLjUgMC0xNC4yIC4yLTIwLjcgOC45LTYuNCA3LjYtNi42IDE4LjEtNi42IDIxLjQgMCAzLjEgLjIgMTQuMyA3LjEgMjEuMiAyLjYgMi45IDkuMSA4LjIgMjIuOCA4LjIgMTAuOCAwIDE2LjUtMi4zIDE4LjYtMy44IC41LS4yIC43LS43IC4yLTEuOWwtMi4zLTYuOGMtLjEtLjMtLjMtLjUtLjYtLjZzLS41LS4yLS44LS4xYy0yLjYgLjktNi4zIDIuOC0xNS4zIDIuOC0xNy40IDAtMTYuOC0xNC43LTE2LjktMTYuN2wzNy4yIDBjLjMgMCAuNS0uMSAuNy0uM3MuNC0uNCAuNC0uN2MtLjMgMCAyLjEtMTQuNy02LjEtMjQuMmwwIDB6bTM2LjcgNTIuN2MxMy4yIDAgMjEuNC03LjEgMjEuNC0xOC4xIDAtMTEuOC0xMS43LTE1LjItMTcuOS0xNy4yLTQuMS0xLjctMTMuNC0zLjQtMTMuNC04LjkgMC0zLjggMy4zLTYuNCA4LjUtNi40IDUuOCAuMSAxMS41IDEuNiAxNi43IDQuMiAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy03LjktNC45LTE2LjctNC45LTIwLjItNC45LTEyIDAtMjAuNSA3LjMtMjAuNSAxNy42IDAgMTIuNSAxMS41IDE1LjQgMTcuOSAxNy4yIDYuMSAyIDEzLjIgMy4zIDEzLjIgOC43IDAgNC0zLjUgNy4xLTkuMiA3LjEtNi45IDAtMTMuNS0yLjItMTktNi40LS4xLS4xLS4zLS4yLS41LS4ycy0uNCAwLS41IC4xLS4zIC4yLS40IC4zLS4yIC4zLS4yIC41bC0yLjMgNy41Yy0uNSAuOSAuMiAxLjIgLjIgMS40IDEuNyAxLjQgMTAuMyA2LjYgMjIuOCA2LjZsMCAwek0zNTcuNiAyMjRjMC0uNy0uMi0xLjItMS4yLTEuMmwtMTEuOCAwYzAtLjEgLjktOC45IDQuNS0xMi41IDQuMi00LjIgMTEuOC0xLjYgMTItMS42IDEuMiAuNSAxLjQgMCAxLjYtLjVsMi44LTcuOGMuNy0uOSAwLTEuMi0uMi0xLjQtNS4xLTItMTcuNC0yLjktMjQuNSA0LjItNS41IDUuNS03IDEzLjktOCAxOS41bC04LjUgMGMtLjMgMC0uNiAuMi0uOCAuNHMtLjMgLjUtLjQgLjhsLTEuNCA3LjhjMCAuNyAuMiAxLjIgMS4yIDEuMmw4LjIgMGMtOC41IDQ3LjktOC43IDUwLjItMTAuMyA1NS41LTEuMSAzLjYtMy4zIDYuOS01LjkgNy44LS4xIDAtMy45IDEuNy05LjYtLjIgMCAwLS45LS41LTEuNCAuNy0uMiAuNy0yLjYgNi44LTIuOCA3LjVzMCAxLjQgLjUgMS40YzUuMSAyIDEzIDEuOCAxNy45IDAgNi4zLTIuMyA5LjctNy45IDExLjUtMTIuOSAyLjgtNy43IDIuOC05LjggMTEuOC01OS43bDEyLjIgMGMuMyAwIC42LS4yIC44LS40cy4zLS41IC40LS44bDEuNC03Ljh6TTQxMSAyNDBjLS42LTEuNy01LjEtMTguMS0yNS4yLTE4LjEtMTUuMiAwLTIzIDEwLTI1LjIgMTguMS0xIDMtMy4yIDE0IDAgMjMuNSAuMSAuMyA0LjQgMTguMSAyNS4yIDE4LjEgMTUgMCAyMi45LTkuNiAyNS4yLTE4LjEgMy4yLTkuNiAxLTIwLjUgMC0yMy41em00NS40LTE2LjdjLTUtMS43LTE2LjYtMS45LTIyLjEgNS40bDAtNC41YzAtLjIgMC0uMy0uMS0uNXMtLjEtLjMtLjMtLjQtLjItLjItLjQtLjMtLjMtLjEtLjUtLjFsLTkuNCAwYy0uMiAwLS4zIDAtLjUgLjFzLS4zIC4xLS40IC4zLS4yIC4yLS4zIC40LS4xIC4zLS4xIC41bDAgNTUuM2MwIC4yIDAgLjMgLjEgLjVzLjEgLjMgLjMgLjQgLjIgLjIgLjQgLjMgLjMgLjEgLjUgLjFsOS42IDBjLjIgMCAuMyAwIC41LS4xcy4zLS4xIC40LS4zIC4yLS4yIC4zLS40IC4xLS4zIC4xLS41bDAtMjcuOGMwLTIuOSAuMS0xMS40IDQuNS0xNS4xIDQuOS00LjkgMTItMy40IDEzLjQtMy4xIC4zIDAgLjYtLjEgLjgtLjNzLjQtLjQgLjYtLjdjMS4yLTIuNiAyLjItNS4zIDMuMS04IC4xLS4zIC4xLS41IDAtLjhzLS4zLS41LS41LS42bDAgMHptNDYuOCA1NC4xbC0yLjEtNy4zYy0uNS0xLjItMS40LS43LTEuNC0uNy00LjIgMS44LTEwLjEgMS45LTExLjMgMS45LTQuNiAwLTE3LjItMS4xLTE3LjItMTkuOCAwLTYuMiAxLjgtMTkuOCAxNi41LTE5LjggMy45LS4xIDcuOCAuNSAxMS41IDEuNiAwIDAgLjkgLjUgMS4yLS43IC45LTIuNiAxLjYtNC41IDIuNi03LjUgLjItLjktLjUtMS4yLS43LTEuMi0xMS42LTMuOS0yMi4zLTIuNS0yNy44IDAtMS42IC43LTE2LjIgNi41LTE2LjIgMjcuNSAwIDIuOS0uNiAzMC4xIDI4LjkgMzAuMSA1LjMgMCAxMC42LTEgMTUuNS0yLjggLjItLjIgLjQtLjQgLjUtLjZzLjEtLjUgMC0uOGwwIDB6bTUzLjktMzkuNWMtLjgtMy01LjQtMTYuMi0yMi4zLTE2LjItMTYgMC0yMy41IDEwLjEtMjUuNiAxOC42LTEuMiAzLjgtMS43IDcuOC0xLjcgMTEuOCAwIDI1LjkgMTguOCAyOS40IDI5LjkgMjkuNCAxMC44IDAgMTYuNS0yLjMgMTguNi0zLjggLjUtLjIgLjctLjcgLjItMS45bC0yLjQtNi44Yy0uMS0uMy0uMy0uNS0uNi0uNnMtLjYtLjItLjgtLjFjLTIuNiAuOS02LjMgMi44LTE1LjMgMi44LTE3LjQgMC0xNi45LTE0LjctMTYuOS0xNi43bDM3LjIgMGMuMyAwIC41LS4xIC43LS4zcy40LS40IC40LS43Yy0uMiAwIC45LTcuMS0xLjQtMTUuNWwwIDB6bS0yMy4zLTYuNGMtMTAuMyAwLTEzIDktMTMuNiAxNC4xbDI2LjQgMGMtLjktMTEuOS03LjYtMTQuMS0xMi43LTE0LjFsMCAweiJdCiAgICB9OwogICAgZmFTb3VyY2V0cmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNvdXJjZXRyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdkMyIsICJNNDI3LjQgMjAzYzAtMTEyLjEtOTAuOS0yMDMtMjAzLTIwMy0xMTIuMS0uMi0yMDMgOTAuNi0yMDMuMiAyMDIuNi0uMSA0MyAxMy41IDg0LjggMzguNyAxMTkuNnM2MC45IDYwLjYgMTAxLjggNzMuOGwwIDEwMS43YzAgMy44IDEuNSA3LjQgNC4yIDEwLjFzNi4zIDQuMiAxMC4xIDQuMmw5Ni40IDBjMy44IDAgNy40LTEuNSAxMC4xLTQuMnM0LjItNi4zIDQuMi0xMC4xbDAtMTAxLjZjNDAuOC0xMy4yIDc2LjUtMzkgMTAxLjctNzMuN3MzOC45LTc2LjUgMzktMTE5LjR6bS0yNzEuNiAwYzAtOTAuOCAxMzcuMy05MC44IDEzNy4zIDAtLjEgODkuOS0xMzcuMyA5MS0xMzcuMyAweiJdCiAgICB9OwogICAgZmFMaW5rZWRpbkluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmtlZGluLWluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwZTEiLCAiTTEwMC4zIDQ0OGwtOTIuOSAwIDAtMjk5LjEgOTIuOSAwIDAgMjk5LjF6TTUzLjggMTA4LjFDMjQuMSAxMDguMSAwIDgzLjUgMCA1My44IDAgMzkuNSA1LjcgMjUuOSAxNS44IDE1LjhzMjMuOC0xNS44IDM4LTE1LjggMjcuOSA1LjcgMzggMTUuOCAxNS44IDIzLjggMTUuOCAzOGMwIDI5LjctMjQuMSA1NC4zLTUzLjggNTQuM3pNNDQ3LjkgNDQ4bC05Mi43IDAgMC0xNDUuNmMwLTM0LjctLjctNzkuMi00OC4zLTc5LjItNDguMyAwLTU1LjcgMzcuNy01NS43IDc2LjdsMCAxNDguMS05Mi44IDAgMC0yOTkuMSA4OS4xIDAgMCA0MC44IDEuMyAwYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM2wwIDE2NC4zLS4xIDB6Il0KICAgIH07CiAgICBmYUh0bWw1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImh0bWw1IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxM2IiLCAiTTAgMzJMMzQuOSA0MjcuOCAxOTEuNSA0ODAgMzQ5LjEgNDI3LjggMzg0IDMyIDAgMzJ6TTMwOC4yIDE1OS45bC0xODMuOCAwIDQuMSA0OS40IDE3NS42IDAtMTMuNiAxNDguNC05Ny45IDI3IDAgLjMtMS4xIDAtOTguNy0yNy4zLTYtNzUuOCA0Ny43IDAgMy41IDM4LjEgNTMuNSAxNC41IDUzLjctMTQuNSA2LTYyLjItMTY2LjkgMC0xMi44LTE0NS42IDI0MS4xIDAtNC40IDQ3Ljd6Il0KICAgIH07CiAgICBmYVJ1c3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicnVzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDdhIiwgIk01MDguNSAyNDkuOGwtMjEuOC0xMy41Yy0uMi0yLS4zLTMuOS0uNS01LjlsMTguNy0xNy41Yy45LS45IDEuNi0xLjkgMi0zLjFzLjUtMi41IC4yLTMuNy0uOC0yLjQtMS42LTMuMy0xLjgtMS43LTMtMi4xbC0yNC05Yy0uNS0xLjktMS4xLTMuOC0xLjctNS42bDE1LTIwLjhjLjctMSAxLjItMi4yIDEuMy0zLjRzMC0yLjUtLjUtMy43LTEuMi0yLjItMi4yLTIuOS0yLjEtMS4zLTMuNC0xLjVsLTI1LjQtNC4yYy0uOS0xLjctMS44LTMuNC0yLjctNS4ybDEwLjctMjMuNGMuNS0xLjEgLjctMi40IC42LTMuNnMtLjUtMi40LTEuMi0zLjUtMS42LTEuOS0yLjgtMi41LTIuNC0uOC0zLjYtLjhsLTI1LjggLjljLTEuMi0xLjUtMi40LTIuOS0zLjYtNC40TDQzOSA4MS44Yy4zLTEuMiAuMy0yLjUtLjEtMy43cy0xLTIuMy0xLjktMy4yLTItMS41LTMuMi0xLjktMi41LS40LTMuNy0uMUw0MDUgNzguOWMtMS40LTEuMi0yLjktMi40LTQuNC0zLjZsLjktMjUuOGMuMS0xLjMtLjItMi41LS44LTMuNnMtMS40LTIuMS0yLjUtMi44LTIuMi0xLjEtMy41LTEuMi0yLjUgLjEtMy43IC42TDM2Ny43IDUzLjJjLTEuNy0uOS0zLjQtMS44LTUuMS0yLjdsLTQuMi0yNS40Yy0uMi0xLjItLjctMi40LTEuNS0zLjRzLTEuOC0xLjctMi45LTIuMi0yLjQtLjctMy43LS41LTIuNCAuNi0zLjQgMS4zTDMyNiAzNS4zYy0xLjktLjYtMy44LTEuMS01LjYtMS43bC05LTI0Yy0uNC0xLjItMS4yLTIuMi0yLjEtM3MtMi4xLTEuNC0zLjMtMS42LTIuNS0uMi0zLjcgLjItMi4zIDEuMS0zLjEgMkwyODEuNiAyNS45Yy0yLS4yLTMuOS0uNC01LjktLjVMMjYyLjMgMy41Yy0uNy0xLjEtMS42LTEuOS0yLjctMi42cy0yLjMtLjktMy42LS45LTIuNSAuMy0zLjYgLjktMiAxLjUtMi43IDIuNkwyMzYuMiAyNS4zYy0yIC4yLTMuOSAuMy01LjkgLjZMMjEyLjkgNy4xYy0uOS0uOS0xLjktMS42LTMuMS0ycy0yLjUtLjUtMy43LS4yLTIuNCAuOC0zLjMgMS42LTEuNyAxLjgtMi4xIDNsLTkgMjRjLTEuOSAuNi0zLjggMS4xLTUuNyAxLjdsLTIwLjgtMTVjLTEtLjctMi4yLTEuMi0zLjQtMS4zcy0yLjUgMC0zLjcgLjUtMi4yIDEuMi0yLjkgMi4yLTEuMyAyLjEtMS41IDMuNGwtNC4yIDI1LjRjLTEuNyAuOS0zLjQgMS44LTUuMiAyLjdMMTIwLjkgNDIuNmMtMS4xLS41LTIuNC0uNy0zLjctLjZzLTIuNSAuNS0zLjUgMS4yLTEuOSAxLjctMi41IDIuOC0uOCAyLjQtLjggMy42bC45IDI1LjhjLTEuNSAxLjItMyAyLjQtNC40IDMuNkw4MS44IDczYy0xLjItLjMtMi41LS4zLTMuNyAuMXMtMi4zIDEtMy4yIDEuOS0xLjUgMi0xLjkgMy4yLS40IDIuNS0uMSAzLjdMNzguOSAxMDdjLTEuMiAxLjQtMi40IDIuOS0zLjYgNC40bC0yNS44LS45Yy0xLjMgMC0yLjUgLjItMy42IC44cy0yLjEgMS40LTIuOCAyLjQtMS4xIDIuMi0xLjIgMy41IC4xIDIuNSAuNiAzLjZsMTAuNyAyMy40Yy0uOSAxLjctMS44IDMuNC0yLjcgNS4ybC0yNS40IDQuMWMtMS4yIC4yLTIuNCAuNy0zLjQgMS41cy0xLjcgMS44LTIuMiAyLjktLjcgMi40LS41IDMuNyAuNiAyLjQgMS4zIDMuNGwxNSAyMC44Yy0uNiAxLjktMS4xIDMuOC0xLjcgNS43bC0yNCA5Yy0xLjIgLjQtMi4yIDEuMi0zIDIuMXMtMS40IDIuMS0xLjYgMy4zLS4yIDIuNSAuMiAzLjcgMS4xIDIuMyAyIDMuMWwxOC43IDE3LjVjLS4yIDItLjQgMy45LS42IDUuOUwzLjUgMjQ5LjhjLTEuMSAuNy0xLjkgMS42LTIuNiAyLjdzLS45IDIuMy0uOSAzLjYgLjMgMi41IC45IDMuNiAxLjUgMiAyLjYgMi43bDIxLjggMTMuNWMuMiAyIC4zIDMuOSAuNiA1LjlMNy4xIDI5OS4xYy0uOSAuOS0xLjYgMS45LTIgMy4xcy0uNSAyLjUtLjIgMy43IC44IDIuNCAxLjYgMy4zIDEuOCAxLjcgMyAyLjFsMjQgOWMuNiAxLjkgMS4xIDMuOCAxLjcgNS42bC0xNSAyMC44Yy0uNyAxLTEuMiAyLjItMS4zIDMuNHMwIDIuNSAuNSAzLjcgMS4yIDIuMiAyLjIgMi45IDIuMSAxLjMgMy40IDEuNWwyNS40IDQuMmMuOSAxLjcgMS44IDMuNCAyLjcgNS4xTDQyLjYgMzkxLjFjLS41IDEuMS0uNyAyLjQtLjYgMy42cy41IDIuNSAxLjIgMy41Yy43IDEuMSAxLjYgMS45IDIuNyAyLjVzMi40IC44IDMuNiAuOGwyNS44LS45YzEuMiAxLjUgMi40IDIuOSAzLjYgNC40TDczIDQzMC4yYy0uMyAxLjItLjMgMi41IC4xIDMuN3MxIDIuMyAxLjkgMy4yIDIgMS41IDMuMiAxLjkgMi41IC40IDMuNyAuMWwyNS4yLTUuOWMxLjUgMS4yIDIuOSAyLjQgNC40IDMuNmwtLjkgMjUuOGMwIDEuMyAuMiAyLjUgLjggMy42czEuNCAyLjEgMi41IDIuOCAyLjIgMS4xIDMuNSAxLjIgMi41LS4xIDMuNi0uNmwyMy40LTEwLjdjMS43IC45IDMuNCAxLjggNS4xIDIuN2w0LjIgMjUuNGMuMiAxLjIgLjcgMi40IDEuNSAzLjRzMS44IDEuOCAyLjkgMi4yIDIuNCAuNyAzLjcgLjUgMi40LS42IDMuNC0xLjNsMjAuOC0xNWMxLjkgLjYgMy44IDEuMSA1LjYgMS43bDkgMjRjLjQgMS4yIDEuMiAyLjIgMi4xIDNzMi4xIDEuNCAzLjMgMS42IDIuNSAuMiAzLjctLjIgMi4zLTEuMSAzLjEtMmwxNy41LTE4LjdjMiAuMiAzLjkgLjQgNS45IC42bDEzLjUgMjEuOGMuNyAxLjEgMS42IDEuOSAyLjcgMi42czIuMyAuOSAzLjYgLjkgMi41LS4zIDMuNi0uOSAyLTEuNSAyLjctMi42bDEzLjUtMjEuOGMyLS4yIDMuOS0uMyA1LjktLjZsMTcuNSAxOC43Yy45IC45IDEuOSAxLjYgMy4xIDJzMi41IC41IDMuNyAuMiAyLjQtLjggMy4zLTEuNiAxLjctMS44IDIuMS0zbDktMjRjMS45LS42IDMuOC0xLjEgNS42LTEuN2wyMC44IDE1YzEgLjcgMi4yIDEuMiAzLjQgMS4zczIuNSAwIDMuNy0uNSAyLjItMS4yIDIuOS0yLjIgMS4zLTIuMSAxLjUtMy40bDQuMi0yNS40YzEuNy0uOSAzLjQtMS44IDUuMS0yLjdsMjMuNCAxMC43YzEuMSAuNSAyLjQgLjcgMy42IC42czIuNC0uNSAzLjUtMS4yIDEuOS0xLjYgMi41LTIuOCAuOC0yLjQgLjgtMy42bC0uOS0yNS44YzEuNS0xLjIgMi45LTIuNCA0LjQtMy42bDI1LjIgNS45YzEuMiAuMyAyLjUgLjMgMy43LS4xczIuMy0xIDMuMi0xLjkgMS41LTIgMS45LTMuMiAuNC0yLjUgLjEtMy43TDQzMy4xIDQwNWMxLjItMS40IDIuNC0yLjkgMy42LTQuNGwyNS44IC45YzEuMyAuMSAyLjUtLjIgMy42LS44czIuMS0xLjQgMi44LTIuNWMuNy0xIDEuMS0yLjIgMS4yLTMuNXMtLjEtMi41LS42LTMuNmwtMTAuNy0yMy40Yy45LTEuNyAxLjgtMy40IDIuNy01LjFsMjUuNC00LjJjMS4yLS4yIDIuNC0uNyAzLjQtMS41czEuOC0xLjggMi4yLTIuOSAuNy0yLjQgLjUtMy43LS42LTIuNC0xLjMtMy40bC0xNS0yMC44Yy42LTEuOSAxLjEtMy44IDEuNy01LjZsMjQtOWMxLjItLjQgMi4yLTEuMiAzLTIuMXMxLjQtMi4xIDEuNi0zLjMgLjItMi41LS4yLTMuNy0xLjEtMi4zLTItMy4xbC0xOC43LTE3LjVjLjItMS45IC40LTMuOSAuNi01LjlsMjEuOC0xMy41YzEuMS0uNyAxLjktMS42IDIuNi0yLjdzLjktMi4zIC45LTMuNi0uMy0yLjUtLjktMy42LTEuNS0yLTIuNi0yLjdsMCAwem0tMTUxIDEyOS4xYy0zLjYtLjgtNy40LS4xLTEwLjUgMS45cy01LjMgNS4yLTYgOC44bC03LjYgMzUuN2MtMjQuNiAxMS4xLTUxLjMgMTYuOC03OC4zIDE2LjdzLTUzLjYtNi4xLTc4LjEtMTcuNGwtNy42LTM1LjdjLS40LTEuOC0xLjEtMy41LTIuMS01cy0yLjQtMi44LTMuOS0zLjgtMy4yLTEuNy01LTItMy42LS4zLTUuNCAuMWwtMzEuNSA2LjhjLTUuOC02LTExLjMtMTIuNS0xNi4zLTE5LjJsMTUzLjIgMGMxLjcgMCAyLjktLjMgMi45LTEuOWwwLTU0LjJjMC0xLjYtMS4yLTEuOS0yLjktMS45bC00NC44IDAgMC0zNC40IDQ4LjUgMGM0LjQgMCAyMy43IDEuMyAyOS44IDI1LjkgMS45IDcuNSA2LjIgMzIuMSA5LjEgNDAgMi45IDguOCAxNC42IDI2LjUgMjcuMSAyNi41bDc5IDBjLTUuMyA3LjEtMTEuMSAxMy44LTE3LjMgMjAuMWwtMzIuMS02Ljl6bTI1LjggMzQuNWMwIDMtLjkgNi0yLjYgOC41cy00IDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjgtOC44IDMuMS01LjIgNS42LTYuOSA1LjQtMi42IDguNS0yLjZsLjQgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwem0tMjI1LjYtLjdjMCAzLS45IDYtMi42IDguNXMtNC4xIDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjktOC44IDMuMS01LjIgNS42LTYuOCA1LjQtMi42IDguNS0yLjZsLjUgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwek02OS42IDIzNC4ybDMyLjgtMTQuNmMxLjctLjcgMy4yLTEuOCA0LjQtMy4xczIuMi0yLjkgMi45LTQuNiAxLTMuNSAuOS01LjMtLjUtMy42LTEuMi01LjNsLTYuOC0xNS4yIDI2LjYgMCAwIDExOS43LTUzLjYgMGMtNi42LTIzLjItOC43LTQ3LjYtNi4xLTcxLjZ6TTU4LjMgMTk4LjFjMC0yIC40LTQgMS4yLTUuOHMxLjktMy41IDMuMy00LjkgMy4xLTIuNSA0LjktMy4zIDMuOC0xLjIgNS44LTEuMmwuNSAwYzMgLjEgNS45IDEgOC4zIDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQuMS02IC4yLTguNy0uOS01LjEtMy4xLTYuOC01LjYtMi41LTUuNC0yLjUtOC40bDAgMHptMTU1LjIgMjQuNWwwLTM1LjMgNjMuMyAwYzMuMyAwIDIzLjEgMy44IDIzLjEgMTguNiAwIDEyLjMtMTUuMiAxNi43LTI3LjcgMTYuN2wtNTguNyAwek0zOTkgMzA2LjdjLTkuOCAxLjEtMjAuNi00LjEtMjItMTAuMS01LjgtMzIuNS0xNS40LTM5LjQtMzAuNi01MS40IDE4LjktMTIgMzguNS0yOS42IDM4LjUtNTMuMyAwLTI1LjUtMTcuNS00MS42LTI5LjQtNDkuNS0xNi44LTExLTM1LjMtMTMuMi00MC4zLTEzLjJsLTE5OC45IDBjMjcuNS0zMC43IDY0LjQtNTEuNSAxMDQuOS01OS4ybDIzLjUgMjQuNmMxLjMgMS4zIDIuOCAyLjQgNC40IDMuMXMzLjUgMS4xIDUuMyAxLjIgMy42LS4zIDUuMy0uOSAzLjItMS43IDQuNi0yLjlsMjYuMy0yNWMyNi44IDUgNTIuMSAxNS44IDc0LjMgMzEuNnM0MC42IDM2LjIgNTQuMSA1OS45bC0xOCA0MC42Yy0xLjUgMy40LTEuNSA3LjItLjIgMTAuNnMzLjkgNi4yIDcuMyA3LjdsMzQuNiAxNS4zYzEuMSAxMC44IDEuMiAyMS43IC40IDMyLjVsLTE5LjMgMGMtMS45IDAtMi43IDEuMy0yLjcgMy4xbDAgOC44YzAgMjAuOC0xMS43IDI1LjMtMjIgMjYuNXpNMjQwIDYwLjJjMC00IDEuNi03LjkgNC41LTEwLjdzNi43LTQuNSAxMC43LTQuNWwuNCAwYzMgLjEgNS45IDEgOC40IDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNHpNNDM2LjggMjE0Yy0yIDAtNC0uNC01LjgtMS4ycy0zLjUtMS45LTQuOS0zLjMtMi41LTMuMS0zLjMtNC45LTEuMi0zLjgtMS4yLTUuOCAuNC00IDEuMi01LjggMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjQgMGM0IC4xIDcuOSAxLjcgMTAuNyA0LjZzNC40IDYuOCA0LjMgMTAuOC0xLjcgNy45LTQuNiAxMC43LTYuOCA0LjQtMTAuOCA0LjN6Il0KICAgIH07CiAgICBmYUhvcm5iaWxsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvcm5iaWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1OTIiLCAiTTc2LjggMzcwLjNjMSA3LjgtLjQgMTUuOC00LjEgMjIuOHMtOS42IDEyLjYtMTYuNyAxNi4xLTE1LjEgNC43LTIyLjkgMy4zLTE1LTUuMS0yMC42LTEwLjctOS4yLTEyLjktMTAuNS0yMC43IDAtMTUuOCAzLjYtMjIuOSA5LjMtMTIuOCAxNi4zLTE2LjUgMTUtNSAyMi45LTMuOWMtNzguMy0xMTEuMyA1Mi0xOTAuNSA1Mi0xOTAuNS01LjkgNDMtOC4yIDkxLjItOC4yIDkxLjItNjcuMyA0MS41IC45IDY0LjEgMzkuOCA3Mi45IDkuOSAyNyAyNy44IDUwLjIgNTEuNCA2Ni43czUxLjYgMjUuMyA4MC4zIDI1LjNjMS45IDAgMy44LS4yIDUuNy0uM2wuMSAxOC45Yy05OS4yIDEuNC0xNTguNy0yOS4xLTE4OC45LTUxLjZ6bTEwOC0zMjcuN2MuOS03LjItLjItMTQuNi0zLjQtMjEuMi0zLTYuMi03LjYtMTEuNS0xMy40LTE1LjNzLTEyLjUtNS45LTE5LjQtNi4yLTEzLjggMS40LTE5LjggNC43LTExLjEgOC4zLTE0LjUgMTQuMy01LjIgMTIuOC01IDE5LjcgMi4yIDEzLjcgNS45IDE5LjUgOC45IDEwLjYgMTUuMSAxMy42IDEzLjEgNC40IDIwIDMuOWMtMjIuNiAyOS45LTUzLjggODkuNi01Mi40IDE5MGwyMS44LS4yYzAtLjktLjEtMS44LS4xLTIuNyAwLTI4IDguNC01NS4zIDI0LjEtNzguNXMzNy45LTQxLjIgNjMuOC01MS42YzgtMzcuNyAzMC43LTExNC4zIDczLjgtNDQuMyAwIDAgNDguMSAyLjQgOTEuMiA4LjIgMCAwLTc3LjgtMTI4LTE4Ny42LTU0LjFsMCAwek00ODkgMTc2LjhjNi4zLTMgMTEuNy03LjcgMTUuNS0xMy42czUuOS0xMi43IDYuMS0xOS44LTEuNi0xNC01LjItMjAtOC43LTExLTE0LjktMTQuMy0xMy4yLTQuOC0yMC4yLTQuNC0xMy44IDIuOC0xOS41IDYuOS0xMC4yIDkuNi0xMyAxNi4xLTMuNyAxMy42LTIuNyAyMC41Yy0zMS43LTIxLjktODkuOC00OS4xLTE4My40LTQ3LjdsLjEgMjIuNWMyLjctLjIgNS40LS40IDguMS0uNCAyOC4xIDAgNTUuNiA4LjUgNzguOSAyNC4zczQxLjIgMzguMyA1MS42IDY0LjVjMzkuMSA5IDEwNS4xIDMxLjYgMzguNSA3Mi41IDAgMC0yLjMgNDguMS04LjIgOTEuMiAwIDAgMTMzLjQtODEuMiA0OS0xOTQuNiA2LjYgLjYgMTMuMy0uNiAxOS4zLTMuNWwwIDB6TTM3NC40IDQzNi4yYzIxLjQtMzIuNSA0Ni40LTg5LjcgNDUuMS0xNzkuN2wtMTkuNSAuMWMuMSAyLjEgLjMgNC4xIC4zIDYuMiAwIDI4LjYtOC44IDU2LjUtMjUuMSA4MHMtMzkuNSA0MS40LTY2LjMgNTEuNGMtOC45IDM5LTMxLjQgMTA2LjctNzIuOCAzOS41IDAgMC00OC4xLTIuMy05MS4yLTguMiAwIDAgNzkuOSAxMzEuMyAxOTEuOSA1MSAuMyA0LjkgMS41IDkuNiAzLjYgMTQgMi45IDYuMSA3LjUgMTEuNCAxMy4xIDE1LjFzMTIuMiA2IDE5IDYuNCAxMy42LTEuMSAxOS42LTQuMiAxMS4xLTcuOCAxNC43LTEzLjYgNS42LTEyLjQgNS43LTE5LjItMS41LTEzLjUtNC44LTE5LjQtOC4yLTEwLjktMTQuMS0xNC4zLTEyLjYtNS4yLTE5LjQtNS4xbDAtLjF6Il0KICAgIH07CiAgICBmYVBocCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaHAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ1NyIsICJNMzIwIDEwNC41YzE3MS40IDAgMzAzLjIgNzIuMiAzMDMuMiAxNTEuNVM0OTEuMyA0MDcuNSAzMjAgNDA3LjVDMTQ4LjYgNDA3LjUgMTYuOCAzMzUuMyAxNi44IDI1NlMxNDguNyAxMDQuNSAzMjAgMTA0LjV6bTAtMTYuOEMxNDMuMyA4Ny43IDAgMTYzIDAgMjU2UzE0My4zIDQyNC4zIDMyMCA0MjQuMyA2NDAgMzQ5IDY0MCAyNTYgNDk2LjcgODcuNyAzMjAgODcuN3pNMjE4LjIgMjQyLjVjLTcuOSA0MC41LTM1LjggMzYuMy03MC4xIDM2LjNsMTMuNy03MC42YzM4IDAgNjMuOC00LjEgNTYuNCAzNC4zek05Ny40IDM1MC4zbDM2LjcgMCA4LjctNDQuOGM0MS4xIDAgNjYuNiAzIDkwLjItMTkuMSAyNi4xLTI0IDMyLjktNjYuNyAxNC4zLTg4LjEtOS43LTExLjItMjUuMy0xNi43LTQ2LjUtMTYuN2wtNzAuNyAwLTMyLjcgMTY4Ljd6TTI4My4xIDEzNi43bDM2LjUgMC04LjcgNDQuOGMzMS41IDAgNjAuNy0yLjMgNzQuOCAxMC43IDE0LjggMTMuNiA3LjcgMzEtOC4zIDExMy4xbC0zNyAwYzE1LjQtNzkuNCAxOC4zLTg2IDEyLjctOTItNS40LTUuOC0xNy43LTQuNi00Ny40LTQuNmwtMTguOCA5Ni42LTM2LjUgMCAzMi43LTE2OC42ek01MDUgMjQyLjVjLTggNDEuMS0zNi43IDM2LjMtNzAuMSAzNi4zbDEzLjctNzAuNmMzOC4yIDAgNjMuOC00LjEgNTYuNCAzNC4zek0zODQuMiAzNTAuM2wzNi44IDAgOC43LTQ0LjhjNDMuMiAwIDY3LjEgMi41IDkwLjItMTkuMSAyNi4xLTI0IDMyLjktNjYuNyAxNC4zLTg4LjEtOS43LTExLjItMjUuMy0xNi43LTQ2LjUtMTYuN2wtNzAuNyAwLTMyLjggMTY4Ljd6Il0KICAgIH07CiAgICBmYURpc3F1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNxdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTdkNSIsICJNMjkwLjIgNTEyYy02Mi42IDAtMTE5LjktMjIuOS0xNjQuMi02MC44TDE3IDQ2Ni4xIDU5LjEgMzYyLjJjLTE0LjctMzIuNC0yMi45LTY4LjMtMjIuOS0xMDYuMiAwLTE0MS40IDExMy43LTI1NiAyNTQtMjU2IDE0MC4zIDAgMjU0IDExNC42IDI1NCAyNTYgMCAxNDEuNC0xMTMuNyAyNTYtMjU0IDI1NnpNNDI4LjkgMjU1LjNsMC0uN0M0MjguOSAxODAuNyAzNzYuOCAxMjggMjg3IDEyOGwtOTcgMCAwIDI1NiA5NS42IDBjOTAuNSAwIDE0My40LTU0LjkgMTQzLjQtMTI4Ljd6TTI4OCAzMjEuMWwtMjguNCAwIDAtMTMwLjIgMjguNCAwYzQxLjcgMCA2OS4zIDIzLjggNjkuMyA2NC43bDAgLjdjMCA0MS4zLTI3LjcgNjQuNy02OS4zIDY0Ljd6Il0KICAgIH07CiAgICBmYTUwMHB4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIjUwMHB4IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyNmUiLCAiTTcxLjggMzQ0LjNjLTYuNS0xNC4yLTYuOS0xOC4zIDcuNC0yMy4xIDI1LjYtOCA4IDkuMiA0My4yIDQ5LjJsLjMgMCAwLTkzLjljMS4yLTUwLjIgNDQtOTIuMiA5Ny43LTkyLjIgNTMuOSAwIDk3LjcgNDMuNSA5Ny43IDk2LjggMCA2My40LTYwLjggMTEzLjItMTI4LjUgOTMuMy0xMC41LTQuMi0yLjEtMzEuNyA4LjUtMjguNiA1MyAwIDg5LjQtMTAuMSA4OS40LTY0LjQgMC02MS03Ny4xLTg5LjYtMTE2LjktNDQuNi0yMy41IDI2LjQtMTcuNiA0Mi4xLTE3LjYgMTU3LjYgNTAuNyAzMSAxMTguMyAyMiAxNjAuNC0yMC4xIDI0LjgtMjQuOCAzOC41LTU4IDM4LjUtOTMgMC0zNS4yLTEzLjgtNjguMi0zOC44LTkzLjMtMjQuOC0yNC44LTU3LjgtMzguNS05My4zLTM4LjVTMTUxIDE2My4zIDEyNi4zIDE4OGMtLjMgLjMtMTYgMTYuNS0yMS4yIDIzLjlsLS41IC42Yy0zLjMgNC43LTYuMyA5LjEtMjAuMSA2LjEtNi45LTEuNy0xNC4zLTUuOC0xNC4zLTExLjhMNzAuMiAyMGMwLTUgMy45LTEwLjUgMTAuNS0xMC41TDMyMiA5LjVjOC4zIDAgOC4zIDExLjYgOC4zIDE1LjEgMCAzLjkgMCAxNS4xLTguMyAxNS4xbC0yMjMuMiAwIDAgMTMyLjkgLjMgMGMxMDQuMi0xMDkuOCAyODIuOC0zNiAyODIuOCAxMDguOSAwIDE3OC4xLTI0NC44IDIyMC4zLTMxMC4xIDYyLjh6TTEzNS4xIDgzLjVjLS41IDQuMiA0LjYgMjQuNSAxNC42IDIwLjYgMTI0LjgtNDcuNSAyMDIuOCA0MC40IDIwOS40IDQwLjQgNC44IDAgMjIuOC0xNS4zIDE0LjMtMjIuOC05My4yLTg5LTIzNC41LTU3LTIzOC4zLTM4LjJ6TTM2MS41IDQxNC43Yy0xMTAgMTA5LjktMjk5IDYwLjgtMzMyLTEwNC4yIDAtMTIuMi0zMC40LTcuNC0yOC45IDMuMyAyNCAxNzMuNCAyNDYgMjU2LjkgMzgxLjYgMTIxLjMgNi45LTcuOC0xMi42LTI4LjQtMjAuNy0yMC40ek0xODIuMSAzMDYuNmMwIDQgNC4zIDcuMyA1LjUgOC41IDMgMyA2LjEgNC40IDguNSA0LjQgMy44IDAgMi42IC4yIDIyLjMtMTkuNSAxOS42IDE5LjMgMTkuMSAxOS41IDIyLjMgMTkuNSA1LjQgMCAxOC41LTEwLjQgMTAuNy0xOC4ybC0xNy4zLTE3LjMgMTguMi0xOC4yYzYuMy02LjgtMTAuMS0yMS44LTE2LjItMTUuN0wyMTguMiAyNjhjLTE4LjYtMTguOC0xOC40LTE5LjUtMjEuNS0xOS41LTUgMC0xOCAxMS43LTEyLjQgMTcuM0wyMDIuNSAyODRjLTE4LjEgMTcuOS0yMC40IDE5LjItMjAuNCAyMi42eiJdCiAgICB9OwogICAgZmFBZmZpbGlhdGV0aGVtZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhZmZpbGlhdGV0aGVtZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzZiIiwgIk0xNTkuNyAyMzcuNEMxMDguNCAzMDguMyA0My4xIDM0OC4yIDE0IDMyNi42LTE1LjIgMzA0LjkgMi44IDIzMCA1NC4yIDE1OS4xIDEwNS41IDg4LjIgMTcwLjggNDguMyAxOTkuOSA2OS45czExLjEgOTYuNi00MC4yIDE2Ny41em0zNTEuMi01Ny4zYy03My44IDEyMy40LTE5MS45IDE4Ny43LTI2NC41IDE0My42LTI1LTE1LjItNDEuMy00MS4yLTQ5LTczLjgtMzMuNiA2NC44LTkyLjggMTEzLjgtMTY0LjEgMTMzLjIgNDkuOCA1OS4zIDEyNC4xIDk2LjkgMjA3IDk2LjkgMTUwIDAgMjcxLjYtMTIzLjEgMjcxLjYtMjc0LjkgLjEtOC41LS4zLTE2LjgtMS0yNXoiXQogICAgfTsKICAgIGZhUmVkUml2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVkLXJpdmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTMiLCAiTTM1My4yIDMyTDk0LjggMzJDNDIuNCAzMiAwIDc0LjQgMCAxMjYuOEwwIDM4NS4yQzAgNDM3LjYgNDIuNCA0ODAgOTQuOCA0ODBsMjU4LjQgMGM1Mi40IDAgOTQuOC00Mi40IDk0LjgtOTQuOGwwLTI1OC40QzQ0OCA3NC40IDQwNS42IDMyIDM1My4yIDMyek0xNDQuOSAyMDAuOWwwIDU2LjNjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bDAtMTU0LjJjMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjlsMTU0LjIgMGMwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsLTU2LjMgMGMtMTIuMy0uNi0yNC42IDExLjYtMjQgMjR6bTE3Ni4zIDcybC01Ni4zIDBjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0bDAgNTYuM2MwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsMC0xNTQuMmMwLTEzLjIgMTAuNy0yMy45IDIzLjktMjMuOWwxNTQuMiAwYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOXoiXQogICAgfTsKICAgIGZhVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0d2l0dGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwOTkiLCAiTTQ1OS40IDE1MS43Yy4zIDQuNSAuMyA5LjEgLjMgMTMuNiAwIDEzOC43LTEwNS42IDI5OC42LTI5OC42IDI5OC42LTU5LjUgMC0xMTQuNy0xNy4yLTE2MS4xLTQ3LjEgOC40IDEgMTYuNiAxLjMgMjUuMyAxLjMgNDkuMSAwIDk0LjItMTYuNiAxMzAuMy00NC44LTQ2LjEtMS04NC44LTMxLjItOTguMS03Mi44IDYuNSAxIDEzIDEuNiAxOS44IDEuNiA5LjQgMCAxOC44LTEuMyAyNy42LTMuNi00OC4xLTkuNy04NC4xLTUyLTg0LjEtMTAzbDAtMS4zYzE0IDcuOCAzMC4yIDEyLjcgNDcuNCAxMy4zLTI4LjMtMTguOC00Ni44LTUxLTQ2LjgtODcuNCAwLTE5LjUgNS4yLTM3LjQgMTQuMy01MyA1MS43IDYzLjcgMTI5LjMgMTA1LjMgMjE2LjQgMTA5LjgtMS42LTcuOC0yLjYtMTUuOS0yLjYtMjQgMC01Ny44IDQ2LjgtMTA0LjkgMTA0LjktMTA0LjkgMzAuMiAwIDU3LjUgMTIuNyA3Ni43IDMzLjEgMjMuNy00LjUgNDYuNS0xMy4zIDY2LjYtMjUuMy03LjggMjQuNC0yNC40IDQ0LjgtNDYuMSA1Ny44IDIxLjEtMi4zIDQxLjYtOC4xIDYwLjQtMTYuMi0xNC4zIDIwLjgtMzIuMiAzOS4zLTUyLjYgNTQuM3oiXQogICAgfTsKICAgIGZhRm9ydEF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODYiLCAiTTQ4OS41IDI4Ny45bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0xNzguM2MwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTYtOC00LjYtMTEuNy00LjZsMC0zOGM4LjMtMiAxNy4xLTMuNCAyNS43LTMuNCAxMC45IDAgMjAuOSA0LjMgMzEuNCA0LjMgNC42IDAgMjcuNy0xLjEgMjcuNy04bDAtNjBjMC0yLjYtMi00LjYtNC42LTQuNi01LjEgMC0xNS4xIDQuMy0yNCA0LjMtOS43IDAtMjAuOS00LjMtMzIuNi00LjMtOCAwLTE2IDEuMS0yMy43IDIuOWwwLTQuOWM1LjQtMi42IDkuMS04LjMgOS4xLTE0LjMgMC0yMC43LTMxLjQtMjAuOC0zMS40IDAgMCA2IDMuNyAxMS43IDkuMSAxNC4zbDAgMTExLjdjLTMuNyAwLTExLjctMS40LTExLjcgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuMyAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMTc4LjMtMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMjE5LjUgMTgyLjkgMCAwLTk2YzAtNzIuNiAxMDkuNy03Mi42IDEwOS43IDBsMCA5NiAxODIuOSAwIDAtMjE5LjVjLjEtMi42LTEuOS00LjYtNC41LTQuNnptLTI4OC4xLTQuNWMwIDIuNi0yIDQuNi00LjYgNC42bC0yNy40IDBjLTIuNiAwLTQuNi0yLTQuNi00LjZsMC02NGMwLTIuNiAyLTQuNiA0LjYtNC42bDI3LjQgMGMyLjYgMCA0LjYgMiA0LjYgNC42bDAgNjR6bTE0Ni40IDBjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0eiJdCiAgICB9OwogICAgZmFNaXhlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXhlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDU2IiwgIk04Mi42IDc2LjFjLTMuOC01LjEtOC43LTkuNC0xNC4yLTEyLjVzLTExLjctNS4xLTE4LjEtNS43LTEyLjggLjEtMTguOCAyLjItMTEuNiA1LjMtMTYuMyA5LjZjLTE3LjYgMTYuMi0xOSA0My41LTQuOCA2Mi44bDkxLjggMTIzLTkyLjMgMTI0LjFjLTE0LjIgMTkuMy0xMy4xIDQ2LjYgNC43IDYyLjggNC43IDQuMyAxMC4zIDcuNiAxNi4zIDkuNnMxMi41IDIuOCAxOC44IDIuMiAxMi41LTIuNSAxOC4xLTUuNyAxMC40LTcuNCAxNC4yLTEyLjVMMjEwLjkgMjYyLjdjMS41LTIuMSAyLjMtNC42IDIuMy03LjFzLS44LTUtMi4zLTcuMUw4Mi42IDc2LjF6TTQzOC4yIDM3OS42bC05Mi4zLTEyNC4xIDkxLjgtMTIzYzE0LjItMTkuMiAxMi44LTQ2LjYtNC43LTYyLjgtNC43LTQuMy0xMC4zLTcuNi0xNi4zLTkuNnMtMTIuNS0yLjgtMTguOC0yLjItMTIuNSAyLjUtMTguMSA1LjctMTAuNCA3LjQtMTQuMiAxMi41bC0xMjggMTcyLjFjLTEuNSAyLjEtMi4zIDQuNi0yLjMgNy4xcy44IDUgMi4zIDcuMUwzNjYgNDM1LjljMy44IDUuMSA4LjcgOS40IDE0LjIgMTIuNXMxMS43IDUuMSAxOC4xIDUuNyAxMi44LS4xIDE4LjgtMi4yIDExLjYtNS4zIDE2LjMtOS42YzE3LjgtMTYuMiAxOS00My41IDQuNy02Mi44eiJdCiAgICB9OwogICAgZmFMeWZ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImx5ZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjMyIsICJNMCA4MS4xbDc3LjggMCAwIDIwOC43YzAgMzMuMSAxNSA1Mi44IDI3LjIgNjEtMTIuNyAxMS4xLTUxLjIgMjAuOS04MC4yLTIuOC0xNy0xNC0yNC44LTM3LjMtMjQuOC01OUwwIDgxLjF6TTQ4NS45IDI1NC42bDAtMjIgMjMuOCAwIDAtNzYuOC0yNi4xIDBjLTEwLjEtNDYuMy01MS4yLTgwLjctMTAwLjMtODAuNy01Ni42IDAtMTAyLjcgNDYtMTAyLjcgMTAyLjdsMCAxNzkuMmMxNiAyLjMgMzUuNC0uMyA1MS43LTE0IDE3LjEtMTQgMjQuOC0zNy4yIDI0LjgtNTlsMC02LjcgMzguOCAwIDAtNzYuOC0zOC44IDAgMC0yMy4zYzAtMzQuNiA1Mi4yLTM0LjYgNTIuMiAwbDAgNzcuMWMwIDU2LjYgNDYgMTAyLjcgMTAyLjcgMTAyLjdsMC03Ni41Yy0xNC41IDAtMjYuMS0xMS43LTI2LjEtMjUuOXptLTI5NC4zLTk5bDAgMTEzYzAgMTUuNC0yMy44IDE1LjQtMjMuOCAwbDAtMTEzLTc2LjggMCAwIDEzMi43YzAgMjMuOCA4IDU0IDQ1IDYzLjkgMzcgOS44IDU4LjItMTAuNiA1OC4yLTEwLjYtMi4xIDEzLjQtMTQuNSAyMy4zLTM0LjkgMjUuMy0xNS41IDEuNi0zNS4yLTMuNi00NS03LjhsMCA3MC4zYzI1LjEgNy41IDUxLjUgOS44IDc3LjYgNC43IDQ3LjEtOS4xIDc2LjgtNDguNCA3Ni44LTEwMC44bDAtMTc4LjItNzcuMSAwIDAgLjV6Il0KICAgIH07CiAgICBmYUFwcGxlUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcGxlLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDE1IiwgIk0xMTYuOSAxNTguNWMtNy41IDguOS0xOS41IDE1LjktMzEuNSAxNC45LTEuNS0xMiA0LjQtMjQuOCAxMS4zLTMyLjYgNy41LTkuMSAyMC42LTE1LjYgMzEuMy0xNi4xIDEuMiAxMi40LTMuNyAyNC43LTExLjEgMzMuOHptMTAuOSAxNy4yYy0xNy40LTEtMzIuMyA5LjktNDAuNSA5LjktOC40IDAtMjEtOS40LTM0LjgtOS4xLTE3LjkgLjMtMzQuNSAxMC40LTQzLjYgMjYuNS0xOC44IDMyLjMtNC45IDgwIDEzLjMgMTA2LjMgOC45IDEzIDE5LjUgMjcuMyAzMy41IDI2LjggMTMuMy0uNSAxOC41LTguNiAzNC41LTguNiAxNi4xIDAgMjAuOCA4LjYgMzQuOCA4LjQgMTQuNS0uMyAyMy42LTEzIDMyLjUtMjYgMTAuMS0xNC44IDE0LjMtMjkuMSAxNC41LTI5LjktLjMtLjMtMjgtMTAuOS0yOC4zLTQyLjktLjMtMjYuOCAyMS45LTM5LjUgMjIuOS00MC4zLTEyLjUtMTguNi0zMi0yMC42LTM4LjgtMjEuMXptMTAwLjQtMzYuMmwwIDE5NC45IDMwLjMgMCAwLTY2LjYgNDEuOSAwYzM4LjMgMCA2NS4xLTI2LjMgNjUuMS02NC4zcy0yNi40LTY0LTY0LjEtNjRsLTczLjIgMHpNMjU4LjUgMTY1bDM0LjkgMGMyNi4zIDAgNDEuMyAxNCA0MS4zIDM4LjZzLTE1IDM4LjgtNDEuNCAzOC44bC0zNC44IDAgMC03Ny40ek00MjAuNyAzMzUuOWMxOSAwIDM2LjYtOS42IDQ0LjYtMjQuOWwuNiAwIDAgMjMuNCAyOCAwIDAtOTdjMC0yOC4xLTIyLjUtNDYuMy01Ny4xLTQ2LjMtMzIuMSAwLTU1LjkgMTguNC01Ni44IDQzLjZsMjcuMyAwYzIuMy0xMiAxMy40LTE5LjkgMjguNi0xOS45IDE4LjUgMCAyOC45IDguNiAyOC45IDI0LjVsMCAxMC44LTM3LjggMi4zYy0zNS4xIDIuMS01NC4xIDE2LjUtNTQuMSA0MS41IC4xIDI1LjIgMTkuNyA0MiA0Ny44IDQyem04LjItMjMuMWMtMTYuMSAwLTI2LjQtNy44LTI2LjQtMTkuNiAwLTEyLjMgOS45LTE5LjQgMjguOC0yMC41bDMzLjYtMi4xIDAgMTFjMCAxOC4yLTE1LjUgMzEuMi0zNiAzMS4yem0xMDIuNSA3NC42YzI5LjUgMCA0My40LTExLjMgNTUuNS00NS40bDUzLjEtMTQ5LTMwLjggMC0zNS42IDExNS4xLS42IDAtMzUuNi0xMTUuMS0zMS42IDAgNTEuMiAxNDEuOS0yLjggOC42Yy00LjYgMTQuNi0xMi4xIDIwLjMtMjUuNSAyMC4zLTIuNCAwLTctLjMtOC45LS41bDAgMjMuNGMxLjggLjQgOS4zIC43IDExLjYgLjd6Il0KICAgIH07CiAgICBmYUFydHN0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXJ0c3RhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzdhIiwgIk0yLjEgMzc3LjRsNDMgNzQuM2M0LjMgOC41IDEwLjggMTUuNyAxOC45IDIwLjdzMTcuNCA3LjYgMjcgNy42bDI4NS40IDAtNTkuMi0xMDIuNi0zMTUuMSAwek01MDEuOSAzNTBMMzM1LjcgNTkuM2MtNC40LTguMi0xMC45LTE1LjEtMTguOS0yMFMyOTkuNyAzMiAyOTAuNCAzMmwtODguNCAwIDI1Ny4zIDQ0Ny42IDQwLjctNzAuNWMxLjktMy4yIDIxLTI5LjcgMi01OS4xek0yNzUuMiAzMDQuNWwtMTE1LjUtMjAwLTExNS41IDIwMCAyMzEgMHoiXQogICAgfTsKICAgIGZhTm9kZUpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5vZGUtanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNkMyIsICJNMjI0LjUgNTA4Yy02LjcgMC0xMy41LTEuOC0xOS40LTUuMmwtNjEuNy0zNi41Yy05LjItNS4yLTQuNy03LTEuNy04IDEyLjMtNC4zIDE0LjgtNS4yIDI3LjktMTIuNyAxLjQtLjggMy4yLS41IDQuNiAuNGw0Ny40IDI4LjFjMS43IDEgNC4xIDEgNS43IDBMNDEyIDM2Ny41YzEuNy0xIDIuOC0zIDIuOC01bDAtMjEzLjJjMC0yLjEtMS4xLTQtMi45LTUuMUwyMjcuMyAzNy43Yy0xLjctMS00LTEtNS43IDBMMzcuMSAxNDQuM2MtMS44IDEtMi45IDMtMi45IDUuMWwwIDIxMy4xYzAgMiAxLjEgNCAyLjkgNC45bDUwLjYgMjkuMmMyNy41IDEzLjcgNDQuMy0yLjQgNDQuMy0xOC43bDAtMjEwLjRjMC0zIDIuNC01LjMgNS40LTUuM2wyMy40IDBjMi45IDAgNS40IDIuMyA1LjQgNS4zbDAgMjEwLjVjMCAzNi42LTIwIDU3LjYtNTQuNyA1Ny42LTEwLjcgMC0xOS4xIDAtNDIuNS0xMS42TDIwLjYgMzk2LjFjLTEyLTYuOS0xOS40LTE5LjgtMTkuNC0zMy43bDAtMjEzLjFjMC0xMy44IDcuNC0yNi44IDE5LjQtMzMuN0wyMDUuMSA5YzExLjctNi42IDI3LjItNi42IDM4LjggMEw0MjguNiAxMTUuN2MxMiA2LjkgMTkuNCAxOS44IDE5LjQgMzMuN2wwIDIxMy4xYzAgMTMuOC03LjQgMjYuNy0xOS40IDMzLjdMMjQzLjkgNTAyLjhjLTUuOSAzLjQtMTIuNiA1LjItMTkuNCA1LjJ6TTM3My42IDI5Ny45YzAtMzkuOS0yNy01MC41LTgzLjctNTgtNTcuNC03LjYtNjMuMi0xMS41LTYzLjItMjQuOSAwLTExLjEgNC45LTI1LjkgNDcuNC0yNS45IDM3LjkgMCA1MS45IDguMiA1Ny43IDMzLjggLjUgMi40IDIuNyA0LjIgNS4yIDQuMmwyNCAwYzEuNSAwIDIuOS0uNiAzLjktMS43czEuNS0yLjYgMS40LTQuMWMtMy43LTQ0LjEtMzMtNjQuNi05Mi4yLTY0LjYtNTIuNyAwLTg0LjEgMjIuMi04NC4xIDU5LjUgMCA0MC40IDMxLjMgNTEuNiA4MS44IDU2LjYgNjAuNSA1LjkgNjUuMiAxNC44IDY1LjIgMjYuNyAwIDIwLjYtMTYuNiAyOS40LTU1LjUgMjkuNC00OC45IDAtNTkuNi0xMi4zLTYzLjItMzYuNi0uNC0yLjYtMi42LTQuNS01LjMtNC41bC0yMy45IDBjLTMgMC01LjMgMi40LTUuMyA1LjMgMCAzMS4xIDE2LjkgNjguMiA5Ny44IDY4LjIgNTguNC0uMSA5Mi0yMy4yIDkyLTYzLjR6Il0KICAgIH07CiAgICBmYVVuY2hhcnRlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bmNoYXJ0ZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NCIsICJNMTcxLjggMjMyLjhjMS4xIDAgMi4xLS4zIDMtLjlzMS42LTEuNCAyLTIuNGMyLjItOS44IDcuNC0xOC42IDE0LjktMjUuMyAxLjItLjggMS43LTIuNSAxLjctNC4xLS4xLS43LS4zLTEuMy0uNi0xLjlzLS45LTEuMS0xLjQtMS40TDc0LjUgMTI4LjUgMTQ5LjEgODVjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44YzAtMS43LS40LTMuNC0xLjMtNC45cy0yLjItMi43LTMuNy0zLjRMMTI2LjcgNTUuNmMtMS41LS44LTMuMS0xLjItNC44LTEuMnMtMy4zIC40LTQuOCAxLjJMMTcgMTEzLjZjLTEuNSAuOC0yLjcgMi0zLjYgMy41cy0xLjQgMy4xLTEuNCA0LjhMMTIgMjM3YzAgMS43IC40IDMuNCAxLjMgNC45czIuMiAyLjcgMy43IDMuNGwyMi40IDEyLjhjMS41IC45IDMuMiAxLjMgNSAxLjIgMi40IC4xIDQuOC0uOCA2LjYtMi41IDEuOC0xLjkgMi44LTQuNCAyLjktN2wwLTg1LjMgMTE1LjkgNjcuOWMuNiAuMyAxLjQgLjQgMi4xIC40ek0zMjMuNCAzNzcuN2MtMS43IC4xLTMuNCAuNS01IDEuMmwtNzQuNSA0My4xIDAtMTM0LjJjMC0yLjktMi45LTUuOC02LjItNC42LTkuNCAyLjgtMTkuNSAzLTI5IC40LS43LS4yLTEuNS0uMi0yLjItLjFzLTEuNCAuNC0yIC45LTEuMSAxLTEuNCAxLjctLjUgMS40LS41IDIuMWwwIDEzMy4zLTc0LjUtNDMuMWMtMS41LS45LTMuMi0xLjMtNS0xLjItMi41IDAtNC45IDEtNi43IDIuOHMtMi44IDQuMi0yLjggNi43bDAgMjYuMWMwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMTAwLjIgNTcuNmMxLjUgLjkgMy4yIDEuMyA1IDEuMiAxLjcgMCAzLjQtLjQgNS0xLjJsMTAwLjItNTcuNmMxLjUtLjggMi43LTIgMy42LTMuNXMxLjQtMy4xIDEuNC00LjhsMC0yNi4xYy0uOC00LjYtNS40LTkuMS0xMC40LTkuMXpNMjg2LjEgNzhhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em02My42LTEwLjFhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em02My4yIDgzLjdhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em0tNjMuMi05LjJhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em0tNjMuNiA4My4yYzQuNSAwIDktMS4zIDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjggOC44czIuOSA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwek0yMjQgMjYyYzQuNSAwIDktMS40IDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjcgOC44czIuOCA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwem0xODguOS04Mi40Yy00LjYgMC05IDEuMy0xMi44IDMuOXMtNi43IDYuMS04LjUgMTAuMy0yLjIgOC44LTEuMyAxMy4zIDMuMSA4LjYgNi4zIDExLjggNy4zIDUuNCAxMS44IDYuMyA5LjEgLjQgMTMuMy0xLjMgNy44LTQuNyAxMC4zLTguNSAzLjktOC4yIDMuOS0xMi44YzAtNi4xLTIuNC0xMS45LTYuNy0xNi4zcy0xMC4yLTYuNy0xNi4zLTYuN2wwIDB6bTAgNzIuM2MtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAweiJdCiAgICB9OwogICAgZmFQbGF5c3RhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwbGF5c3RhdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2RmIiwgIk01NzEgMzcyLjNjLTExLjMgMTQuMi0zOC44IDI0LjMtMzguOCAyNC4zbC0yMDUuMSA3My42IDAtNTQuMyAxNTAuOS01My44YzE3LjEtNi4xIDE5LjgtMTQuOCA1LjgtMTkuNC0xMy45LTQuNi0zOS4xLTMuMy01Ni4yIDIuOWwtMTAwLjUgMzUuNSAwLTU2LjRjMjMuMi03LjggNDcuMS0xMy42IDc1LjctMTYuOCA0MC45LTQuNSA5MC45IC42IDEzMC4yIDE1LjUgNDQuMiAxNCA0OS4yIDM0LjcgMzggNDguOXpNMzQ2LjYgMjc5LjhsMC0xMzljMC0xNi4zLTMtMzEuMy0xOC4zLTM1LjYtMTEuNy0zLjgtMTkgNy4xLTE5IDIzLjRsMCAzNDcuOS05My44LTI5LjggMC00MTQuN2MzOS45IDcuNCA5OCAyNC45IDEyOS4yIDM1LjQgNzkuNSAyNy4zIDEwNi40IDYxLjMgMTA2LjQgMTM3LjggMCA3NC41LTQ2IDEwMi44LTEwNC41IDc0LjZ6TTQzLjMgNDEwLjJjLTQ1LjQtMTIuOC01My0zOS41LTMyLjMtNTQuOCAxOS4xLTE0LjIgNTEuNy0yNC45IDUxLjctMjQuOWwxMzQuNS00Ny44IDAgNTQuNS05Ni44IDM0LjZjLTE3LjEgNi4xLTE5LjcgMTQuOC01LjggMTkuNHMzOS4xIDMuMyA1Ni4yLTIuOWw0Ni40LTE2LjkgMCA0OC44Yy01MS42IDkuMy0xMDEuNCA3LjMtMTUzLjktMTB6Il0KICAgIH07CiAgICBmYU1pY3JvYmxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb2Jsb2ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTAxYSIsICJNMzk5LjggMzYyLjJjMjkuNS0zNC43IDQ3LjEtNzguMyA0Ny4xLTEyNS44IDAtMTEzLTk5LjYtMjA0LjQtMjIyLjUtMjA0LjRTMiAxMjMuNSAyIDIzNi40IDEwMS42IDQ0MC45IDIyNC41IDQ0MC45YzI3IDAgNTMuOS00LjUgNzkuNC0xMy40IDEuNC0uNSAzLS41IDQuNS0uMXMyLjcgMS40IDMuNiAyLjZjMTguNiAyNS4xIDQ3LjYgNDIuNyA3OS45IDQ5LjkgMS4xIC4yIDIuMyAwIDMuMy0uNnMxLjctMS42IDEuOS0yLjhjLjEtLjYgLjEtMS4zIDAtMS45cy0uNC0xLjItLjgtMS43Yy0xMi4zLTE2LTE4LjctMzUuOC0xOC01NnM4LjQtMzkuNSAyMS43LTU0LjdsLS4yIC4xek0zMzAgMjEyLjRsLTU3LjMgNDMuNSAyMC44IDY4LjljLjQgMS4zIC40IDIuNy0uMSA0cy0xLjIgMi40LTIuMyAzLjItMi40IDEuMi0zLjggMS4yLTIuNy0uNC0zLjgtMS4ybC01OS4xLTQxLTU5LjEgNDEuMWMtMS4xIC44LTIuNCAxLjItMy44IDEuMnMtMi43LS40LTMuOC0xLjItMS45LTEuOS0yLjMtMy4yLS41LTIuNy0uMS00bDIwLjgtNjguOS01Ny4zLTQzLjVjLTEuMS0uOC0xLjktMS45LTIuMy0zLjJzLS40LTIuNyAwLTQgMS4yLTIuNCAyLjMtMy4yIDIuNC0xLjMgMy43LTEuM2w3MS45LTEuNSAyMy43LTY3LjljLjQtMS4zIDEuMy0yLjQgMi40LTMuMnMyLjQtMS4yIDMuOC0xLjIgMi43IC40IDMuOCAxLjIgMS45IDEuOSAyLjQgMy4ybDIzLjcgNjcuOSA3MS45IDEuNWMxLjQgMCAyLjcgLjQgMy44IDEuMnMxLjkgMS45IDIuMyAzLjIgLjQgMi43IDAgNC0xLjIgMi40LTIuMyAzLjNsMCAweiJdCiAgICB9OwogICAgZmFHaXRrcmFrZW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0a3Jha2VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzYTYiLCAiTTU1Ny43IDExOC4xYy0yLjMtNi4xLTkuMy05LjItMTUuMy02LjYtNS43IDIuNC04LjUgOC45LTYuMyAxNC42IDEwLjkgMjkgMTYuOSA2MC41IDE2LjkgOTMuMyAwIDEzNC42LTEwMC4zIDI0NS43LTIzMC4yIDI2Mi43bDAtMTIzLjdjNy45LTEuNSAxNS41LTMuNiAyMy02LjJsMCAxMDRjMTA2LjctMjUuOSAxODUuOS0xMjIuMSAxODUuOS0yMzYuOCAwLTkxLjgtNTAuOC0xNzEuOC0xMjUuOC0yMTMuMy01LjctMy4yLTEzLS45LTE1LjkgNS0yLjcgNS41LS42IDEyLjIgNC43IDE1LjEgNjcuOSAzNy42IDExMy45IDExMCAxMTMuOSAxOTMuMiAwIDkzLjMtNTcuOSAxNzMuMS0xMzkuOCAyMDUuNGwwLTkyLjJjMTQuMi00LjUgMjQuOS0xNy43IDI0LjktMzMuNSAwLTEzLjEtNi44LTI0LjQtMTcuMy0zMC41IDguMy03OS41IDQ0LjUtNTguNiA0NC41LTgzLjlsMC0xNC43YzAtMzgtODcuOS0xNjEuOC0xMjktMTY0LjctMi41LS4yLTUtLjItNy42IDAtNDEuMiAzLTEyOS4xIDEyNi43LTEyOS4xIDE2NC43bDAgMTQuOGMwIDI1LjMgMzYuMyA0LjMgNDQuNSA4My45LTEwLjYgNi4xLTE3LjMgMTcuNC0xNy4zIDMwLjUgMCAxNS44IDEwLjYgMjkgMjQuOCAzMy41bDAgOTIuMmMtODEuOS0zMi4yLTEzOS44LTExMi0xMzkuOC0yMDUuNCAwLTgzLjEgNDYtMTU1LjUgMTEzLjktMTkzLjIgNS40LTMgNy40LTkuNiA0LjctMTUuMS0yLjktNS45LTEwLjEtOC4yLTE1LjktNS03NSA0MS41LTEyNS44IDEyMS41LTEyNS44IDIxMy4zIDAgMTE0LjcgNzkuMiAyMTAuOCAxODUuOSAyMzYuOGwwLTEwNGM3LjYgMi41IDE1LjEgNC42IDIzIDYuMmwwIDEyMy43Yy0xMjkuOC0xNy0yMzAuMi0xMjguMS0yMzAuMi0yNjIuNyAwLTMyLjggNi02NC4zIDE2LjktOTMuMyAyLjItNS44LS42LTEyLjItNi4zLTE0LjYtNi0yLjYtMTMgLjQtMTUuMyA2LjYtMTEuOCAzMS41LTE4LjMgNjUuNi0xOC4zIDEwMS4zIDAgMTU1LjEgMTIyLjYgMjgxLjYgMjc2LjMgMjg3LjhsMC0xNDUuOWM2LjggLjQgMTUgLjUgMjMuNCAwbDAgMTQ1LjhjMTUzLjctNi4xIDI3Ni4zLTEzMi42IDI3Ni4zLTI4Ny43IDAtMzUuNy02LjUtNjkuOC0xOC4zLTEwMS40ek0zNTcuOSAzMjIuOWEyMy43IDIzLjcgMCAxIDEgMC00Ny40IDIzLjcgMjMuNyAwIDEgMSAwIDQ3LjR6TTIxOC4xIDI3NS40YTIzLjcgMjMuNyAwIDEgMSAwIDQ3LjQgMjMuNyAyMy43IDAgMSAxIDAtNDcuNHoiXQogICAgfTsKICAgIGZhVGVsZWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGVsZWdyYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjQ2MiwgInRlbGVncmFtLXBsYW5lIl0sICJmMmM2IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM3MSAxNzYuN2MtMy43IDM5LjItMTkuOSAxMzQuNC0yOC4xIDE3OC4zLTMuNSAxOC42LTEwLjMgMjQuOC0xNi45IDI1LjQtMTQuNCAxLjMtMjUuMy05LjUtMzkuMy0xOC43LTIxLjgtMTQuMy0zNC4yLTIzLjItNTUuMy0zNy4yLTI0LjUtMTYuMS04LjYtMjUgNS4zLTM5LjUgMy43LTMuOCA2Ny4xLTYxLjUgNjguMy02Ni43IC4yLS43IC4zLTMuMS0xLjItNC40cy0zLjYtLjgtNS4xLS41Yy0yLjIgLjUtMzcuMSAyMy41LTEwNC42IDY5LjEtOS45IDYuOC0xOC45IDEwLjEtMjYuOSA5LjktOC45LS4yLTI1LjktNS0zOC42LTkuMS0xNS41LTUtMjcuOS03LjctMjYuOC0xNi4zIC42LTQuNSA2LjctOSAxOC40LTEzLjcgNzIuMy0zMS41IDEyMC41LTUyLjMgMTQ0LjYtNjIuMyA2OC45LTI4LjYgODMuMi0zMy42IDkyLjUtMzMuOCAyLjEgMCA2LjYgLjUgOS42IDIuOSAyIDEuNyAzLjIgNC4xIDMuNSA2LjcgLjUgMy4yIC42IDYuNSAuNCA5Ljh6Il0KICAgIH07CiAgICBmYVRlbGVncmFtUGxhbmUgPSBmYVRlbGVncmFtOwogICAgZmFJdHVuZXNOb3RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0dW5lcy1ub3RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYjUiLCAiTTM4MS45IDM4OC4yYy02LjQgMjcuNC0yNy4yIDQyLjgtNTUuMSA0OC0yNC41IDQuNS00NC45IDUuNi02NC41LTEwLjItMjMuOS0yMC4xLTI0LjItNTMuNC0yLjctNzQuNCAxNy0xNi4yIDQwLjktMTkuNSA3Ni44LTI1LjggNi0xLjEgMTEuMi0yLjUgMTUuNi03LjQgNi40LTcuMiA0LjQtNC4xIDQuNC0xNjMuMiAwLTExLjItNS41LTE0LjMtMTctMTIuMy04LjIgMS40LTE4NS43IDM0LjYtMTg1LjcgMzQuNi0xMC4yIDIuMi0xMy40IDUuMi0xMy40IDE2LjcgMCAyMzQuNyAxLjEgMjIzLjktMi41IDIzOS41LTQuMiAxOC4yLTE1LjQgMzEuOS0zMC4yIDM5LjUtMTYuOCA5LjMtNDcuMiAxMy40LTYzLjQgMTAuNC00My4yLTguMS01OC40LTU4LTI5LjEtODYuNiAxNy0xNi4yIDQwLjktMTkuNSA3Ni44LTI1LjggNi0xLjEgMTEuMi0yLjUgMTUuNi03LjQgMTAuMS0xMS41IDEuOC0yNTYuNiA1LjItMjcwLjIgLjgtNS4yIDMtOS42IDcuMS0xMi45IDQuMi0zLjUgMTEuOC01LjUgMTMuNC01LjUgMjA0LTM4LjIgMjI4LjktNDMuMSAyMzIuNC00My4xIDExLjUtLjggMTguMSA2IDE4LjEgMTcuNiAuMiAzNDQuNSAxLjEgMzI2LTEuOCAzMzguNXoiXQogICAgfTsKICAgIGZhTGVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MWQiLCAiTTYxMy4yIDIxOWMwLTIwLjUgMy4yLTMyLjYgMy4yLTU0LjYgMC0zNC4yLTEyLjYtNDUuMi00MC41LTQ1LjJsLTIwLjUgMCAwIDI0LjIgNi4zIDBjMTQuMiAwIDE3LjMgNC43IDE3LjMgMjIuMSAwIDE2LjMtMS42IDMyLjYtMS42IDUxLjUgMCAyNC4yIDcuOSAzMy42IDIzLjYgMzcuM2wwIDEuNmMtMTUuOCAzLjctMjMuNiAxMy4xLTIzLjYgMzcuMyAwIDE4LjkgMS42IDM0LjIgMS42IDUxLjUgMCAxNy45LTMuNyAyMi42LTE3LjMgMjIuNmwwIC41LTYuMyAwIDAgMjUuMiAyMC41IDBjMjcuOCAwIDQwLjUtMTEgNDAuNS00NS4yIDAtMjIuNi0zLjItMzQuMi0zLjItNTQuNiAwLTExIDYuOC0yMi42IDI3LjMtMjMuNmwwLTI3LjNjLTIwLjUtLjctMjcuMy0xMi4zLTI3LjMtMjMuM3pNNTA3LjYgMjUxYy0xNS44LTYuMy0zMC41LTEwLTMwLjUtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjEgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxcy0yMi41LTQxLTQzLTQ3Ljh6TTE0OC43IDMxMC40Yy0zLjcgMC04LjQtMy4yLTguNC0xMy4xbDAtMTc4LjItNzQuNiAwYy0yOC40IDAtNDEgMTEtNDEgNDUuMiAwIDIyLjYgMy4yIDM1LjIgMy4yIDU0LjYgMCAxMS02LjggMjIuNi0yNy4zIDIzLjZsMCAyNy4zYzIwLjUgLjUgMjcuMyAxMi4xIDI3LjMgMjMuMSAwIDE5LjQtMy4yIDMxLTMuMiA1My42IDAgMzQuMiAxMi42IDQ1LjIgNDAuNSA0NS4ybDIwLjUgMCAwLTI0LjItNi4zIDBjLTEzLjEgMC0xNy4zLTUuMy0xNy4zLTIyLjZzMS42LTMyLjEgMS42LTUxLjVjMC0yNC4yLTcuOS0zMy42LTIzLjYtMzcuM2wwLTEuNmMxNS44LTMuNyAyMy42LTEzLjEgMjMuNi0zNy4zIDAtMTguOS0xLjYtMzQuMi0xLjYtNTEuNXMzLjctMjIuMSAxNy4zLTIyLjFsMTQuMSAwIDAgMTUwLjhjMCAzMi4xIDExIDUzLjEgNDMuMSA1My4xIDEwIDAgMTcuOS0xLjYgMjMuNi0zLjdsLTUuMy0zNC4yYy0zLjEgLjgtNC42IC44LTYuMiAuOHpNMzgwLjQgMjUxYy0xNi4zLTYuMy0zMS0xMC0zMS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNnMyMi4xIDQuNyAzMy42IDEzLjFsMjEtMjcuOGMtMTMuMS0xMC0zMS0yMC41LTU1LjItMjAuNS0zNS43IDAtNTkuOSAyMC41LTU5LjkgNDkuNCAwIDI1LjcgMjIuNiAzOC45IDQxLjUgNDYuMiAxNi4zIDYuMyAzMi4xIDExLjYgMzIuMSAyMi4xIDAgNy45LTYuMyAxMy4xLTIwLjUgMTMuMS0xMy4xIDAtMjYuMy01LjMtNDAuNS0xNi4zbC0yMC41IDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MSAuMS0yOC45LTIyLjUtNDEtNDMtNDcuOHptLTE1NS02OC44Yy0zOC40IDAtNzUuMSAzMi4xLTc0LjEgODIuNSAwIDUyIDM0LjIgODIuNSA3OS4zIDgyLjUgMTguOSAwIDM5LjktNi44IDU2LjItMTcuOUwyNzEgMzAxLjVjLTExLjYgNi44LTIyLjYgMTAtMzQuMiAxMC0yMSAwLTM3LjMtMTAtNDEuNS0zNC4ybDk1LjIgMGMuNS0zLjcgMS42LTExIDEuNi0xOS40IC42LTQyLjYtMjIuNi03NS43LTY2LjctNzUuN3ptLTMwIDY2LjJjMy4yLTIxIDE1LjgtMzEgMzAuNS0zMSAxOC45IDAgMjYuMyAxMy4xIDI2LjMgMzFsLTU2LjggMHoiXQogICAgfTsKICAgIGZhRmlyZWZveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlZm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjkiLCAiTTUwMy41IDI0MS41Yy0uMS0xLjYtLjItMy4xLS4yLTQuN2wwLS4xLS40LTQuNyAwLS4xYy0xLjMtMTMuOS0zLjctMjcuNy03LjMtNDEuMiAwLS4xIDAtLjEtLjEtLjJsLTEuMS00Yy0uMS0uMi0uMS0uNS0uMi0uNi0uNC0xLjItLjctMi41LTEuMS0zLjctLjEtLjItLjEtLjYtLjItLjgtLjQtMS4yLS43LTIuNC0xLjEtMy41LS4xLS40LS4yLS42LS40LTEtLjQtMS4yLS43LTIuMy0xLjItMy41bC0uNC0xLjFjLS40LTEuMS0uOC0yLjMtMS4yLTMuNC0uMS0uMy0uMi0uNy0uNC0xLS41LTEuMS0uOC0yLjMtMS4zLTMuNC0uMS0uMi0uMi0uNi0uNC0uOC0uNS0xLjItMS0yLjMtMS40LTMuNSAwLS4xLS4xLS4yLS4xLS40LTEuNi0zLjgtMy4yLTcuNy01LTExLjRsLS40LS43Yy0uNS0xLS44LTEuOC0xLjMtMi42LS4yLS41LS41LTEuMS0uNy0xLjYtLjQtLjgtLjgtMS42LTEuMi0yLjQtLjQtLjYtLjYtMS4yLTEtMS44cy0uOC0xLjQtMS4yLTIuM2MtLjQtLjYtLjctMS4zLTEuMS0xLjlzLS44LTEuNC0xLjItMi4yYy0uNC0uNy0uOC0xLjQtMS4yLTItLjQtLjctLjgtMS4zLTEuMi0ycy0uOC0xLjMtMS4yLTItLjgtMS4zLTEuMi0xLjktLjgtMS40LTEuMy0yLjJjLS40LS42LS44LTEuMi0xLjItMS44bC0xLjQtMi4xYy0uNC0uNi0uOC0xLjItMS4yLTEuOC0uNS0uNy0xLjEtMS42LTEuNi0yLjMtLjQtLjUtLjctMS4xLTEuMS0xLjZsLTEuOC0yLjVjLS40LS41LS42LS44LTEtMS4zLTEtMS4zLTEuOC0yLjUtMi44LTMuNy03LjItOS40LTE1LTE4LjMtMjMuNS0yNi42LTUuNy02LTExLjgtMTEuNS0xOC4zLTE2LjctNC0zLjUtOC4yLTYuNy0xMi41LTkuOC03LjctNS44LTE2LTEwLjgtMjQuNi0xNS4xLTIuNC0xLjMtNC44LTIuNS03LjItMy43LTE3LjctOC42LTM2LjMtMTUuMi01NS40LTE5LjYtMS45LS40LTMuOC0uOC01LjYtMS4ybC0uMSAwYy0xLS4xLTEuOC0uNC0yLjgtLjUtMTIuNS0yLjQtMjUuMi0zLjctMzgtNGwtMTAuNiAwYy0xNS4zIC4yLTMwLjUgMS45LTQ1LjUgNS0zMy42IDcuMS02My4yIDIxLjItODIuOSAzOS0xLjEgMS0xLjkgMS43LTIuNCAyLjJsLS41IC41IC4xIDBjMCAwIC4xIDAgLjEgMHMwLS4xIDAtLjFsLS4xIC4xYy4xLS4xIC4xLS4xIC4yLS4xIDE0LjYtOC44IDM0LjktMTYgNDkuNC0xOS42bDUuOS0xLjRjLjQtLjEgLjgtLjEgMS4yLS4yIDEuNy0uNCAzLjQtLjcgNS4yLTEuMSAuMiAwIC42LS4xIC44LS4xIDY0LjItMTEuNyAxMzIuNiA3LjUgMTgwLjIgNTMgMTAuMyA5LjggMTkuMyAyMC44IDI2LjkgMzIuOCAzMC40IDQ5LjIgMjcuNSAxMTEuMSAzLjggMTQ3LjYtMzQuNCA1My0xMTEuNCA3MS4zLTE1OSAyNC44LTE2LTE1LjUtMjUuMi0zNi43LTI1LjYtNTktLjItMTAuNyAyLTIxLjIgNi4yLTMxIDEuNy0zLjggMTMuMS0yNS43IDE4LjItMjQuNi0xMy4xLTIuOC0zNy41IDIuNi01NC43IDI4LjItMTUuNCAyMi45LTE0LjUgNTguMi01IDgzLjMtNi0xMi40LTEwLjEtMjUuNi0xMi4xLTM5LjItMTIuMi04Mi42IDQzLjMtMTUzIDk0LjMtMTcwLjUtMjcuNS0yNC05Ni41LTIyLjMtMTQ3LjcgMTUuNC0yOS45IDIyLTUxLjIgNTMuMi02Mi41IDkwLjQgMS43LTIwLjkgOS42LTUyLjEgMjUuOC04My45LTE3LjIgOC45LTM5IDM3LTQ5LjggNjIuOS0xNS42IDM3LjQtMjEgODIuMi0xNi4xIDEyNC44IC40IDMuMiAuNyA2LjQgMS4xIDkuNiAxOS45IDExNy4xIDEyMiAyMDYuNCAyNDQuOCAyMDYuNCAxMzcuMSAwIDI0OC4zLTExMS4yIDI0OC4zLTI0OC40LS4xLTQuNS0uMi05LjEtLjUtMTMuNXoiXQogICAgfTsKICAgIGZhS2FnZ2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImthZ2dsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNWZhIiwgIk0zMDQuMiA1MDEuNUwxNTguNCAzMjAuMyAyOTguMiAxODVjMi42LTIuNyAxLjctMTAuNS01LjMtMTAuNWwtNjkuMiAwYy0zLjUgMC03IDEuOC0xMC41IDUuM2wtMTMyLjMgMTMzLjcgMC0zMDZjMC01LTIuNS03LjUtNy41LTcuNUwyMS41IDBDMTYuNSAwIDE0IDIuNSAxNCA3LjVsMCA0OTdjMCA1IDIuNSA3LjUgNy41IDcuNWw1MS45IDBjNSAwIDcuNS0yLjUgNy41LTcuNWwwLTEwOSAzMC44LTI5LjMgMTEwLjUgMTQwLjZjMyAzLjUgNi41IDUuMyAxMC41IDUuM2w2Ni45IDBjMy41IDAgNS41LTEgNi0zbC0xLjQtNy42eiJdCiAgICB9OwogICAgZmFGYWNlYm9va01lc3NlbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlYm9vay1tZXNzZW5nZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM5ZiIsICJNMjU2LjYgOGMtMTQwIDAtMjQ4LjYgMTAyLjMtMjQ4LjYgMjQwLjYgMCA3Mi4zIDI5LjcgMTM0LjggNzguMSAxNzcuOSA4LjMgNy41IDYuNiAxMS45IDggNTguMiAuMSAzLjIgMSA2LjQgMi42IDkuMnMzLjkgNS4yIDYuNyA2LjkgNS45IDIuOCA5LjEgMyA2LjUtLjMgOS41LTEuNkMxNzQuOSA0NzkgMTc1LjYgNDc3LjIgMTg0LjYgNDc5LjYgMzM3LjggNTIxLjggNTA0IDQyMy43IDUwNCAyNDguNiA1MDQgMTEwLjMgMzk2LjYgOCAyNTYuNiA4ek00MDUuOCAxOTMuMWwtNzMgMTE1LjZjLTIuOCA0LjMtNi40IDguMS0xMC42IDExcy05LjEgNC44LTE0LjEgNS44LTEwLjMgLjgtMTUuMy0uNC05LjctMy40LTEzLjgtNi40bC01OC4xLTQzLjVjLTIuNi0xLjktNS44LTMtOS0zcy02LjQgMS4xLTkgM2wtNzguNCA1OS40Yy0xMC41IDcuOS0yNC4yLTQuNi0xNy4xLTE1LjdsNzMtMTE1LjZjMi44LTQuMyA2LjQtOC4xIDEwLjYtMTFzOS4xLTQuOCAxNC4xLTUuOCAxMC4zLS44IDE1LjMgLjQgOS43IDMuNCAxMy45IDYuNGw1OC4xIDQzLjVjMi42IDEuOSA1LjggMyA5IDNzNi40LTEuMSA5LTNsNzguNC01OS40YzEwLjQtOCAyNC4xIDQuNSAxNy4xIDE1LjZ6Il0KICAgIH07CiAgICBmYUF1ZGlibGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXVkaWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzczIiwgIk02NDAgMTk5LjlsMCA1NC0zMjAgMjAwLTMyMC0xOTkuOSAwLTU0IDMyMCAyMDAgMzIwLTIwMC4xem0tMTk0LjUgNzJsNDcuMS0yOS40Yy0zNy4yLTU1LjgtMTAwLjctOTIuNi0xNzIuNy05Mi42cy0xMzUuNSAzNi43LTE3Mi42IDkyLjRsLjMgMGMyLjUtMi4zIDUuMS00LjUgNy43LTYuNyA4OS43LTc0LjQgMjE5LjQtNTguMSAyOTAuMiAzNi4zek0yMjUuNCAyOTAuN2MxNi45LTExLjkgMzYuNS0xOC43IDU3LjQtMTguNyAzNC40IDAgNjUuMiAxOC40IDg2LjQgNDcuNmw0NS40LTI4LjRjLTIwLjktMjkuOS01NS42LTQ5LjUtOTQuOC00OS41LTM4LjkgMC03My40IDE5LjQtOTQuNCA0OXpNMTAzLjYgMTYxLjFDMjM1LjQgNTYuOCA0MjEuOCA4NC43IDUyMS4xIDIyMy4ybC43IDEgNDguOC0zMC40Yy01My41LTgxLjctMTQ1LjgtMTM1LjctMjUwLjctMTM1LjctMTAzLjUgMC0xOTYuNiA1My41LTI1MC41IDEzNS42IDkuOS0xMC41IDIyLjctMjMuNSAzNC4yLTMyLjZ6Il0KICAgIH07CiAgICBmYVBhdHJlb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGF0cmVvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2Q5IiwgIk00OTAgMTUzLjhjLS4xLTY1LjQtNTEtMTE5LTExMC43LTEzOC4zLTc0LjItMjQtMTcyLTIwLjUtMjQyLjkgMTIuOS04NS44IDQwLjUtMTEyLjggMTI5LjMtMTEzLjggMjE3LjgtLjggNzIuOCA2LjQgMjY0LjQgMTE0LjYgMjY1LjggODAuMyAxIDkyLjMtMTAyLjUgMTI5LjUtMTUyLjMgMjYuNC0zNS41IDYwLjUtNDUuNSAxMDIuNC01NS45IDcyLTE3LjggMTIxLjEtNzQuNyAxMjEtMTUwbC0uMSAweiJdCiAgICB9OwogICAgZmFWbnYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidm52IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MGIiLCAiTTEwNC45IDM1MmMtMzQuMSAwLTQ2LjQtMzAuNC00Ni40LTMwLjRMMi42IDIxMC4xUy03LjggMTkyIDEzIDE5MmwzMi44IDBjMTAuNCAwIDEzLjIgOC43IDE4LjggMTguMWwzNi43IDc0LjVzNS4yIDEzLjEgMjEuMSAxMy4xIDIxLjEtMTMuMSAyMS4xLTEzLjFsMzYuNy03NC41YzUuNi05LjUgOC40LTE4LjEgMTguOC0xOC4xbDMyLjggMGMyMC44IDAgMTAuNCAxOC4xIDEwLjQgMTguMUwxODYuNCAzMjEuNlMxNzQuMiAzNTIgMTQwIDM1MmwtMzUuMSAwem0zOTUgMGMtMzQuMSAwLTQ2LjQtMzAuNC00Ni40LTMwLjRMMzk3LjYgMjEwLjFTMzg3LjIgMTkyIDQwOCAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjgtNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi45IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMNTgxLjUgMzIxLjZTNTY5LjMgMzUyIDUzNS4xIDM1MmwtMzUuMiAwek0zMzcuNiAxOTJjMzQuMSAwIDQ2LjQgMzAuNCA0Ni40IDMwLjRsNTUuOSAxMTEuNVM0NTAuMyAzNTIgNDI5LjUgMzUybC0zMi44IDBjLTEwLjQgMC0xMy4yLTguNy0xOC44LTE4LjFsLTM2LjctNzQuNXMtNS4yLTEzLjEtMjEuMS0xMy4xLTIxLjEgMTMuMS0yMS4xIDEzLjFsLTM2LjcgNzQuNWMtNS42IDkuNC04LjQgMTguMS0xOC44IDE4LjFsLTMyLjkgMGMtMjAuOCAwLTEwLjQtMTguMS0xMC40LTE4LjFsNTUuOS0xMTEuNVMyNjguMyAxOTIgMzAyLjUgMTkybDM1LjEgMHoiXQogICAgfTsKICAgIGZhUGFnZWxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZ2VsaW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMThjIiwgIk0zODQuMSAzMTIuN2MtNTUuMSAxMzYuNy0xODcuMSA1NC0xODcuMSA1NC00MC41IDgxLjgtMTA3LjQgMTM0LjQtMTg0LjYgMTM0LjctMTYuMSAwLTE2LjYtMjQuNCAwLTI0LjQgNjQuNC0uMyAxMjAuNS00Mi43IDE1Ny4yLTExMC4xLTQxLjEgMTUuOS0xMTguNiAyNy45LTE2MS42LTgyLjIgMTA5LTQ0LjkgMTU5LjEgMTEuMiAxNzguMyA0NS41IDkuOS0yNC40IDE3LTUwLjkgMjEuNi03OS43IDAgMC0xMzkuNyAyMS45LTE0OS41LTk4LjEgMTE5LjEtNDcuOSAxNTIuNiA3Ni43IDE1Mi42IDc2LjcgMS42LTE2LjcgMy4zLTUyLjYgMy4zLTUzLjQgMCAwLTEwNi4zLTczLjctMzguMS0xNjUuMiAxMjQuNiA0MyA2MS40IDE2Mi40IDYxLjQgMTYyLjQgLjUgMS42IC41IDIzLjggMCAzMy40IDAgMCA0NS4yLTg5IDEzNi40LTU3LjUtNC4yIDEzNC0xNDEuOSAxMDYuNC0xNDEuOSAxMDYuNC00LjQgMjcuNC0xMS4yIDUzLjQtMjAgNzcuNSAwIDAgODMtOTEuOCAxNzItMjB6Il0KICAgIH07CiAgICBmYUFtYXpvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWF6b24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MCIsICJNMjU3LjcgMTYyLjdjLTQ4LjcgMS44LTE2OS41IDE1LjUtMTY5LjUgMTE3LjUgMCAxMDkuNSAxMzguMyAxMTQgMTgzLjUgNDMuMiA2LjUgMTAuMiAzNS40IDM3LjUgNDUuMyA0Ni44bDU2LjgtNTZzLTMyLjMtMjUuMy0zMi4zLTUyLjhsMC0xNDcuMUMzNDEuNSA4OSAzMTcgMzIgMjI5LjIgMzIgMTQxLjIgMzIgOTQuNSA4NyA5NC41IDEzNi4zbDczLjUgNi44YzE2LjMtNDkuNSA1NC4yLTQ5LjUgNTQuMi00OS41IDQwLjctLjEgMzUuNSAyOS44IDM1LjUgNjkuMXptMCA4Ni44YzAgODAtODQuMiA2OC04NC4yIDE3LjIgMC00Ny4yIDUwLjUtNTYuNyA4NC4yLTU3LjhsMCA0MC42ek0zOTMuNyA0MTNjLTcuNyAxMC03MCA2Ny0xNzQuNSA2N1MzNC43IDQwOC41IDEwLjIgMzc5Yy02LjgtNy43IDEtMTEuMyA1LjUtOC4zIDczLjMgNDQuNSAxODcuOCAxMTcuOCAzNzIuNSAzMC4zIDcuNS0zLjcgMTMuMyAyIDUuNSAxMnptMzkuOCAyLjJjLTYuNSAxNS44LTE2IDI2LjgtMjEuMiAzMS01LjUgNC41LTkuNSAyLjctNi41LTMuOHMxOS4zLTQ2LjUgMTIuNy01NWMtNi41LTguMy0zNy00LjMtNDgtMy4yLTEwLjggMS0xMyAyLTE0LS4zLTIuMy01LjcgMjEuNy0xNS41IDM3LjUtMTcuNSAxNS43LTEuOCA0MS0uOCA0NiA1LjcgMy43IDUuMSAwIDI3LjEtNi41IDQzLjF6Il0KICAgIH07CiAgICBmYUVudmlyYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbnZpcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI5OSIsICJNMCAzMmM0NzcuNiAwIDM2Ni42IDMxNy4zIDM2Ny4xIDM2Ni4zbDgwLjkgODEuNy0yNiAwLTcwLjQtNzEuMkMzMTIuNiA0MTMgMjI3LjIgNDQzLjMgMTM3LjIgMzcxLjggNDcgMzAwLjMgNTIgMjE0LjcgMCAzMnpNNzkuNyA3OGMtNDkuNy0yMy41LTUuMiA5LjItNS4yIDkuMiA0NS4yIDMxLjIgNjYgNzMuNyA5MC4yIDExOS45IDMxLjUgNjAuMiA3OSAxMzkuNyAxNDQuMiAxNjcuNyA2NSAyOCAzNC4yIDEyLjUgNi04LjUtMjguMi0yMS4yLTY4LjItODctOTEtMTMwLjItMzEuNy02MC02MS0xMTguNi0xNDQuMi0xNTguMXoiXQogICAgfTsKICAgIGZhTGlub2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbm9kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmI4IiwgIk0zNjYuMyAxODYuOWwtNTkuNSAzNi45LS44IDM2LjktMjkuMy0xOS4zLTM5LjQgMjQuM2MyLjIgNTUuMiAyLjUgNTkuMyAyLjUgNTkuNWwtOTcuMiA2NS40LTE1LjEtMTA0LjcgMTA4LjEtNjItNDAuMi0yNi03NS40IDM4LjUtMjEtMTQzLjMgMTI5LTQ5LjQtOTEuMy00My42LTEyNS43IDM5LjQgMjcuNyAxMzQuOSA0MS45IDMyLjctMzEuOCAxNS4xIDIwLjkgMTAxLjQgMjkuMyAyNy43LTIwLjkgMTIuNiAxNi44IDc4LjggNjYuMiA2OS42Yy0xMC44LTc0LjgtMTEuNy03OC42LTExLjctNzguOGw3Ny45LTU1LjNDMjQ0IDM2NS40IDI0Mi4zIDM2NyAyNDIuMyAzNjdsLjggMjQuMyAzMy41IDI4LjUtLjgtNzcuMSA0Ni45LTMzLjUgMjYuOC0xOC40LTIuNSAzNiAyNS4xIDE3LjYgNi43LTc0LjYgNTguNy00My42LTcxLjItMzkuNHoiXQogICAgfTsKICAgIGZhQWNjdXNvZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWNjdXNvZnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM2OSIsICJNMzIyLjEgMjUybDAtMS01MS4yLTY1LjhzLTEyIDEuNi0yNSAxNS4xYy05IDkuMy0yNDIuMSAyMzkuMS0yNDMuNCAyNDAuOS03IDEwIDEuNiA2LjggMTUuNyAxLjcgLjggMCAxMTQuNS0zNi42IDExNC41LTM2LjYgLjUtLjYtLjEtLjEgLjYtLjYtLjQtNS4xLS44LTI2LjItMS0yNy43LS42LTUuMiAyLjItNi45IDctOC45bDkyLjYtMzMuOGMuNi0uOCA4OC41LTgxLjcgOTAuMi04My4zek00ODIuMiAzNzIuMWMxMy4zIDE2LjEgMjAuNyAxMy4zIDMwLjggOS4zIDMuMi0xLjIgMTE1LjQtNDcuNiAxMTcuOC00OC45IDgtNC4zLTEuNy0xNi43LTcuMi0yMy40LTIuMS0yLjUtMjA1LjEtMjQ1LjYtMjA3LjItMjQ4LjMtOS43LTEyLjItMTQuMy0xMi45LTM4LjQtMTIuOC0xMC4yIDAtMTA2LjggLjUtMTE2LjUgLjYtMTkuMiAuMS0zMi45LS4zLTE5LjIgMTYuOSA3LjcgOS41IDIzNC4yIDI5OS43IDIzOS45IDMwNi42em0xNTIuNyAxLjZjLTIuMy0uMy0yNC42LTQuNy0zOC03LjIgMCAwLTExNSA1MC40LTExNy41IDUxLjYtMTYgNy4zLTI2LjktMy4yLTM2LjctMTQuNmwtNTcuMS03NGMtNS40LS45LTYwLjQtOS42LTY1LjMtOS4zLTMuMSAuMi05LjYgLjgtMTQuNCAyLjktNC45IDIuMS0xNDUuMiA1Mi44LTE1MC4yIDU0LjctNS4xIDItMTEuNCAzLjYtMTEuMSA3LjYgLjIgMi41IDIgMi42IDQuNiAzLjUgMi43IC44IDMwMC45IDY3LjYgMzA4IDY5LjEgMTUuNiAzLjMgMzguNSAxMC41IDUzLjYgMS43IDIuMS0xLjIgMTIzLjgtNzYuNCAxMjUuOC03Ny44IDUuNC00IDQuMy02LjgtMS43LTguMnoiXQogICAgfTsKICAgIGZhRXJsYW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVybGFuZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzlkIiwgIk04Ny4yIDUzLjVsLTg3LjIgMCAwIDQwNSAxMDAuNCAwYy00OS43LTUyLjYtNzguOC0xMjUuMy03OC43LTIxMi4xLS4xLTc2LjcgMjQtMTQyLjcgNjUuNS0xOTIuOXptMjM4LjIgOS43Yy00NS45IC4xLTg1LjEgMzMuNS04OS4yIDgzLjJsMTY5LjkgMGMtMS4xLTQ5LjctMzQuNS04My4xLTgwLjctODMuMnptMjMwLjctOS42bC4zIDAtLjEtLjEtLjIgLjF6bS4zIDBjMzEuNCA0Mi43IDQ4LjcgOTcuNSA0Ni4yIDE2Mi43IC41IDYgLjUgMTEuNyAwIDI0LjFsLTM3Mi40IDBjLS4yIDEwOS43IDM4LjkgMTk0LjkgMTM4LjYgMTk1LjMgNjguNS0uMyAxMTgtNTEgMTUxLjktMTA2LjFsOTYuNCA0OC4yYy0xNy40IDMwLjktMzYuNSA1Ny44LTU3LjkgODAuOGw4MC44IDAgMC00MDUtODMuNiAweiJdCiAgICB9OwogICAgZmFDY0Rpc2NvdmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWRpc2NvdmVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjIiLCAiTTUyMC40IDE5Ni4xYzAtNy45LTUuNS0xMi4xLTE1LjYtMTIuMWwtNC45IDAgMCAyNC45IDQuNyAwYzEwLjMgMCAxNS44LTQuNCAxNS44LTEyLjh6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00ODMuOSAxNzAuOWMyMi42IDAgNTIuOS00LjEgNTIuOSAyNC40IDAgMTIuNi02LjYgMjAuNy0xOC43IDIzLjJsMjUuOCAzNC40LTE5LjYgMC0yMi4yLTMyLjgtMi4yIDAgMCAzMi44LTE2IDAgMC04MnpNNDI4IDE3MWw0NS4zIDAgMCAxNC0yOS4zIDAgMCAxOC4yIDI4LjMgMCAwIDEzLjgtMjguMyAwIDAgMjIuMiAyOS4zIDAgMCAxMy44LTQ1LjMgMCAwLTgyem0tNjguNyAwbDIxLjkgNTUuMiAyMi4yLTU1LjIgMTcuNSAwLTM1LjUgODQuMi04LjYgMC0zNS04NC4yIDE3LjUgMHptLTU1LjkgODYuMmE0NC42IDQ0LjYgMCAxIDEgMC04OS4yIDQ0LjYgNDQuNiAwIDEgMSAwIDg5LjJ6bS00OS4zLTgzLjFsMCAxOWMtMjAuMS0yMC4xLTQ2LjgtNC43LTQ2LjggMTkgMCAyNSAyNy41IDM4LjUgNDYuOCAxOS4ybDAgMTljLTI5LjcgMTQuMy02My4zLTUuNy02My4zLTM4LjIgMC0zMS4yIDMzLjEtNTMgNjMuMy0zOHptLTk3LjIgNjYuM2MxMS40IDAgMjIuNC0xNS4zLTMuMy0yNC40LTE1LTUuNS0yMC4yLTExLjQtMjAuMi0yMi43IDAtMjMuMiAzMC42LTMxLjQgNDkuNy0xNC4zbC04LjQgMTAuOGMtMTAuNC0xMS42LTI0LjktNi4yLTI0LjkgMi41IDAgNC40IDIuNyA2LjkgMTIuMyAxMC4zIDE4LjIgNi42IDIzLjYgMTIuNSAyMy42IDI1LjYgMCAyOS41LTM4LjggMzcuNC01Ni42IDExLjNsMTAuMy05LjljMy43IDcuMSA5LjkgMTAuOCAxNy41IDEwLjh6TTU1LjQgMjUzbC0yMy40IDAgMC04MiAyMy40IDBjMjYuMSAwIDQ0LjEgMTcgNDQuMSA0MS4xIDAgMTguNS0xMy4yIDQwLjktNDQuMSA0MC45em02Ny41IDBsLTE2IDAgMC04MiAxNiAwIDAgODJ6TTU0NCA0MzNjMCA4LjItNi44IDE1LTE1IDE1bC00MDEgMGMxODkuNi0zNS42IDM4Mi43LTEzOS4yIDQxNi0xNjBsMCAxNDV6TTc0LjEgMTkxLjZjLTUuMi00LjktMTEuNi02LjYtMjEuOS02LjZsLTQuMiAwIDAgNTQuMiA0LjIgMGMxMC4zIDAgMTctMiAyMS45LTYuNCA1LjctNS4yIDguOS0xMi44IDguOS0yMC43cy0zLjItMTUuNS04LjktMjAuNXoiXQogICAgfTsKICAgIGZhU2FmYXJpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhZmFyaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY3IiwgIk0yNzQuNyAyNzQuN0wyMzcuMyAyMzcuMyAxNjYgMzQ2IDI3NC43IDI3NC43ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMS44IDE4Mi44bDE0LjgtNi4xYzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjggMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuMy0yLjYgMS43TDQxOCAxOTcuNmMtMiAuOC00LjIgLjgtNi4xIDBzLTMuNS0yLjQtNC4zLTQuMy0uOC00LjIgMC02LjEgMi40LTMuNSA0LjMtNC4zek0zMTQuNCA5NGw2LjEtMTQuOGMuOC0yIDIuNC0zLjUgNC4zLTQuM3M0LjItLjggNi4xIDAgMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMWwtNi4xIDE0LjhjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBjLTEtLjQtMS45LTEtMi42LTEuN3MtMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjF6TTI1NiA2MGMyLjEgMCA0LjIgLjggNS43IDIuM1MyNjQgNjUuOSAyNjQgNjhsMCAxNmMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43UzI1My45IDYwIDI1NiA2MHpNMTgxIDc0LjljMS0uNCAyLS42IDMuMS0uNnMyLjEgLjIgMy4xIC42IDEuOSAxIDIuNiAxLjcgMS4zIDEuNiAxLjcgMi42TDE5Ny42IDk0Yy40IDEgLjcgMiAuNyAzLjFzLS4yIDIuMS0uNiAzLjEtMSAxLjktMS43IDIuNi0xLjYgMS40LTIuNiAxLjgtMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS44LTEuMy0xLjctMS43LTIuN2wtNi4xLTE0LjhjLS44LTItLjgtNC4yIDAtNi4xczIuNC0zLjUgNC4zLTQuM3ptLTYzLjYgNDIuNWMxLjUtMS41IDMuNS0yLjMgNS43LTIuM3M0LjIgLjggNS43IDIuM0wxNDAgMTI4LjdjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNsLTExLjMtMTEuM2MtMS41LTEuNS0yLjMtMy41LTIuMy01LjZzLjgtNC4xIDIuMy01LjZsMCAwek02MCAyNTZjMC0yLjEgLjgtNC4yIDIuMy01LjdTNjUuOSAyNDggNjggMjQ4bDE2IDBjMi4xIDAgNC4yIC44IDUuNyAyLjNzMi4zIDMuNSAyLjMgNS43LS44IDQuMi0yLjMgNS43LTMuNSAyLjMtNS43IDIuM2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNTNjAgMjU4LjEgNjAgMjU2em00MC4yIDczLjJsLTE0LjggNi4xYy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjEgMS0xLjkgMS43LTIuNiAxLjYtMS4zIDIuNi0xLjdMOTQgMzE0LjRjMi0uOCA0LjItLjggNi4xIDBzMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMS0yLjQgMy41LTQuMyA0LjN6bTQuMy0xMzZjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjZsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuMyA0LjItLjggNi4xIDBsMTQuOCA2LjFjMiAuOCAzLjUgMi40IDQuMyA0LjNzLjggNC4yIDAgNi4xbDAgMHpNMTk3LjYgNDE4bC02LjEgMTQuOGMtLjQgMS0xIDEuOS0xLjcgMi42cy0xLjYgMS4zLTIuNiAxLjctMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xbDYuMS0xNC44Yy40LTEgMS0xLjkgMS43LTIuN3MxLjYtMS40IDIuNi0xLjggMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS44IDEuMyAxLjcgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjcgMy4xek0yNjQgNDQ0YzAgMi4xLS44IDQuMi0yLjMgNS43cy0zLjUgMi4zLTUuNyAyLjMtNC4yLS44LTUuNy0yLjMtMi4zLTMuNS0yLjMtNS43bDAtMTZjMC0yLjEgLjgtNC4yIDIuMy01LjdzMy41LTIuMyA1LjctMi4zIDQuMiAuOCA1LjcgMi4zIDIuMyAzLjUgMi4zIDUuN2wwIDE2em02Ny02LjljLTEgLjQtMiAuNi0zLjEgLjZzLTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjZMMzE0LjQgNDE4Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuM2w2LjEgMTQuOGMuOCAyIC44IDQuMiAwIDYuMXMtMi40IDMuNS00LjMgNC4zem02My42LTQyLjVjLTEuNSAxLjUtMy41IDIuMy01LjcgMi4zcy00LjItLjgtNS43LTIuM0wzNzIgMzgzLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42IDMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuM2wxMS4zIDExLjNjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42bDAgMHpNMjg2LjIgMjg2LjJMMTEwLjMgNDAxLjcgMjI1LjggMjI1LjggNDAxLjcgMTEwLjMgMjg2LjIgMjg2LjJ6TTQzNy4xIDMzMWMtLjggMi0yLjQgMy41LTQuMyA0LjNzLTQuMiAuOC02LjEgMGwtMTQuOC02LjFjLTItLjgtMy41LTIuNC00LjMtNC4zcy0uOC00LjIgMC02LjFjLjQtMSAxLTEuOSAxLjctMi42czEuNi0xLjMgMi42LTEuNyAyLS42IDMuMS0uNiAyLjEgLjIgMy4xIC42bDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMXptNi45LTY3bC0xNiAwYy0yLjEgMC00LjItLjgtNS43LTIuM3MtMi4zLTMuNS0yLjMtNS43IC44LTQuMiAyLjMtNS43IDMuNS0yLjMgNS43LTIuM2wxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjN6Il0KICAgIH07CiAgICBmYVNwYWNlQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGFjZS1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YWMiLCAiTTk2IDI1NmwzMiAwIDAgMjU2LTEyOCAwIDAtMTYwIDMyIDAgMC0zMiAzMiAwIDAtMzIgMzIgMCAwLTMyem00MTYgOTZsMCAxNjAtMTI4IDAgMC0yNTYgMzIgMCAwIDMyIDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMHpNMzIwIDY0bDMyIDAgMCAzODQtMzIgMCAwLTMyLTEyOCAwIDAgMzItMzIgMCAwLTM4NCAzMiAwIDAtMzIgMzIgMCAwLTMyIDY0IDAgMCAzMiAzMiAwIDAgMzJ6bS0zMiA2NGwtNjQgMCAwIDY0IDY0IDAgMC02NHoiXQogICAgfTsKICAgIGZhTm9kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub2RlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MTkiLCAiTTMxNi4zIDQ1MmMtMi4xIDAtNC4yLS42LTYuMS0xLjZMMjkxIDQzOWMtMi45LTEuNi0xLjUtMi4yLS41LTIuNSAzLjgtMS4zIDQuNi0xLjYgOC43LTQgLjQtLjIgMS0uMSAxLjQgLjFsMTQuOCA4LjhjLjUgLjMgMS4zIC4zIDEuOCAwTDM3NSA0MDhjLjUtLjMgLjktLjkgLjktMS42bDAtNjYuN2MwLS43LS4zLTEuMy0uOS0xLjZsLTU3LjgtMzMuM2MtLjUtLjMtMS4yLS4zLTEuOCAwbC01Ny44IDMzLjNjLS42IC4zLS45IDEtLjkgMS42bDAgNjYuN2MwIC42IC40IDEuMiAuOSAxLjVsMTUuOCA5LjFjOC42IDQuMyAxMy45LS44IDEzLjktNS44bDAtNjUuOWMwLS45IC43LTEuNyAxLjctMS43bDcuMyAwYy45IDAgMS43IC43IDEuNyAxLjdsMCA2NS45YzAgMTEuNS02LjIgMTgtMTcuMSAxOC0zLjMgMC02IDAtMTMuMy0zLjZsLTE1LjItOC43Yy0zLjctMi4yLTYuMS02LjItNi4xLTEwLjVsMC02Ni43YzAtNC4zIDIuMy04LjQgNi4xLTEwLjVsNTcuOC0zMy40YzMuNy0yLjEgOC41LTIuMSAxMi4xIDBsNTcuOCAzMy40YzMuNyAyLjIgNi4xIDYuMiA2LjEgMTAuNWwwIDY2LjdjMCA0LjMtMi4zIDguNC02LjEgMTAuNWwtNTcuOCAzMy40Yy0xLjcgMS4xLTMuOCAxLjctNiAxLjd6TTM2MyAzODYuMmMwLTEyLjUtOC40LTE1LjgtMjYuMi0xOC4yLTE4LTIuNC0xOS44LTMuNi0xOS44LTcuOCAwLTMuNSAxLjUtOC4xIDE0LjgtOC4xIDExLjkgMCAxNi4zIDIuNiAxOC4xIDEwLjYgLjIgLjggLjggMS4zIDEuNiAxLjNsNy41IDBjLjUgMCAuOS0uMiAxLjItLjUgLjMtLjQgLjUtLjggLjQtMS4zLTEuMi0xMy44LTEwLjMtMjAuMi0yOC44LTIwLjItMTYuNSAwLTI2LjMgNy0yNi4zIDE4LjYgMCAxMi43IDkuOCAxNi4xIDI1LjYgMTcuNyAxOC45IDEuOSAyMC40IDQuNiAyMC40IDguMyAwIDYuNS01LjIgOS4yLTE3LjQgOS4yLTE1LjMgMC0xOC43LTMuOC0xOS44LTExLjQtLjEtLjgtLjgtMS40LTEuNy0xLjRsLTcuNSAwYy0uOSAwLTEuNyAuNy0xLjcgMS43IDAgOS43IDUuMyAyMS4zIDMwLjYgMjEuMyAxOC41IDAgMjktNy4yIDI5LTE5Ljh6bTU0LjUtNTAuMWMwIDYuMS01IDExLjEtMTEuMSAxMS4xcy0xMS4xLTUtMTEuMS0xMS4xYzAtNi4zIDUuMi0xMS4xIDExLjEtMTEuMSA2LS4xIDExLjEgNC44IDExLjEgMTEuMXptLTEuOCAwYzAtNS4yLTQuMi05LjMtOS40LTkuMy01LjEgMC05LjMgNC4xLTkuMyA5LjNzNC4yIDkuNCA5LjMgOS40YzUuMi0uMSA5LjQtNC4zIDkuNC05LjR6bS00LjUgNi4ybC0yLjYgMGMtLjEtLjYtLjUtMy44LS41LTMuOS0uMi0uNy0uNC0xLjEtMS4zLTEuMWwtMi4yIDAgMCA1LTIuNCAwIDAtMTIuNSA0LjMgMGMxLjUgMCA0LjQgMCA0LjQgMy4zIDAgMi4zLTEuNSAyLjgtMi40IDMuMSAxLjcgLjEgMS44IDEuMiAyLjEgMi44IC4xIDEgLjMgMi43IC42IDMuM3ptLTIuOC04LjhjMC0xLjctMS4yLTEuNy0xLjgtMS43bC0yIDAgMCAzLjUgMS45IDBjMS42IDAgMS45LTEuMSAxLjktMS44ek0xMzcuMyAxOTFjMC0yLjctMS40LTUuMS0zLjctNi40TDcyLjMgMTQ5LjNjLTEtLjYtMi4yLS45LTMuNC0xbC0uNiAwYy0xLjIgMC0yLjMgLjQtMy40IDFMMy43IDE4NC42QzEuNCAxODUuOSAwIDE4OC40IDAgMTkxbC4xIDk1YzAgMS4zIC43IDIuNSAxLjggMy4yczIuNSAuNyAzLjcgMEw0MiAyNjguM2MyLjMtMS40IDMuNy0zLjggMy43LTYuNGwwLTQ0LjRjMC0yLjYgMS40LTUuMSAzLjctNi40bDE1LjUtOC45YzEuMi0uNyAyLjQtMSAzLjctMXMyLjYgLjMgMy43IDFsMTUuNSA4LjljMi4zIDEuMyAzLjcgMy44IDMuNyA2LjRsMCA0NC40YzAgMi42IDEuNCA1LjEgMy43IDYuNGwzNi40IDIwLjljMS4xIC43IDIuNiAuNyAzLjcgMCAxLjEtLjYgMS44LTEuOSAxLjgtMy4ybC4yLTk1ek00NzIuNSA4Ny4zbDAgMTc2LjRjMCAyLjYtMS40IDUuMS0zLjcgNi40bC02MS4zIDM1LjRjLTIuMyAxLjMtNS4xIDEuMy03LjQgMGwtNjEuMy0zNS40Yy0yLjMtMS4zLTMuNy0zLjgtMy43LTYuNGwwLTcwLjhjMC0yLjYgMS40LTUuMSAzLjctNi40bDYxLjMtMzUuNGMyLjMtMS4zIDUuMS0xLjMgNy40IDBsMTUuMyA4LjhjMS43IDEgMy45LS4zIDMuOS0yLjJsMC05NGMwLTIuOCAzLTQuNiA1LjUtMy4ybDM2LjUgMjAuNGMyLjMgMS4yIDMuOCAzLjcgMy44IDYuNHptLTQ2IDEyOC45YzAtLjctLjQtMS4zLS45LTEuNmwtMjEtMTIuMmMtLjYtLjMtMS4zLS4zLTEuOSAwbC0yMSAxMi4yYy0uNiAuMy0uOSAuOS0uOSAxLjZsMCAyNC4zYzAgLjcgLjQgMS4zIC45IDEuNmwyMSAxMi4xYy42IC4zIDEuMyAuMyAxLjggMGwyMS0xMi4xYy42LS4zIC45LS45IC45LTEuNmwwLTI0LjMgLjEgMHptMjA5LjgtLjdjMi4zLTEuMyAzLjctMy44IDMuNy02LjRsMC0xNy4xYzAtMi42LTEuNC01LjEtMy43LTYuNGwtNjAuOS0zNS40Yy0yLjMtMS4zLTUuMS0xLjMtNy40IDBsLTYxLjMgMzUuNGMtMi4zIDEuMy0zLjcgMy44LTMuNyA2LjRsMCA3MC44YzAgMi43IDEuNCA1LjEgMy43IDYuNGw2MC45IDM0LjdjMi4yIDEuMyA1IDEuMyA3LjMgMGwzNi44LTIwLjVjMi41LTEuNCAyLjUtNSAwLTYuNEw1NTAgMjQxLjZjLTEuMi0uNy0xLjktMS45LTEuOS0zLjJsMC0yMi4yYzAtMS4zIC43LTIuNSAxLjktMy4ybDE5LjItMTEuMWMxLjEtLjcgMi42LS43IDMuNyAwTDU5Mi4xIDIxM2MxLjEgLjcgMS45IDEuOSAxLjkgMy4ybDAgMTcuNGMwIDIuOCAzLjEgNC42IDUuNiAzLjJsMzYuNy0yMS4zek01NTkgMjE5Yy0uNCAuMy0uNyAuNy0uNyAxLjJsMCAxMy42YzAgLjUgLjMgMSAuNyAxLjJsMTEuOCA2LjhjLjQgLjMgMSAuMyAxLjQgMEw1ODQgMjM1Yy40LS4zIC43LS43IC43LTEuMmwwLTEzLjZjMC0uNS0uMy0xLS43LTEuMmwtMTEuOC02LjhjLS40LS4zLTEtLjMtMS40IDBMNTU5IDIxOXpNMzA0LjggMjYyLjVsMC03MC40YzAtMi42LTEuNi01LjEtMy45LTYuNGwtNjEuMS0zNS4yYy0yLjEtMS4yLTUtMS40LTcuNCAwbC02MS4xIDM1LjJjLTIuMyAxLjMtMy45IDMuNy0zLjkgNi40bDAgNzAuNGMwIDIuOCAxLjkgNS4yIDQgNi40bDYxLjIgMzUuMmMyLjQgMS40IDUuMiAxLjMgNy40IDBsNjEtMzUuMmMxLjgtMSAzLjEtMi43IDMuNi00LjcgLjEtLjUgLjItMS4xIC4yLTEuN3pNMjMwLjUgMTM3LjZsLS44IC41IDEuMSAwLS4zLS41em03Ni4yIDEzMC4ybC0uNC0uNyAwIC45IC40LS4yeiJdCiAgICB9OwogICAgZmFDb2RlcGVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvZGVwZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjYiIsICJNNTAyLjMgMTU5LjdsLTIzNC0xNTZjLTgtNC45LTE2LjUtNS0yNC42IDBsLTIzNCAxNTZjLTYgNC05LjcgMTEuMS05LjcgMTguM0wwIDMzNGMwIDcuMSAzLjcgMTQuMyA5LjcgMTguM2wyMzQgMTU2YzggNC45IDE2LjUgNSAyNC42IDBsMjM0LTE1NmM2LTQgOS43LTExLjEgOS43LTE4LjNsMC0xNTZjMC03LjEtMy43LTE0LjMtOS43LTE4LjN6TTI3OCA2My4xbDE3Mi4zIDExNC45LTc2LjkgNTEuNC05NS40LTYzLjcgMC0xMDIuNnptLTQ0IDBMMjM0IDE2NS43IDEzOC42IDIyOS40IDYxLjcgMTc4IDIzNCA2My4xek00NCAyMTkuMUw5OS4xIDI1NiA0NCAyOTIuOCA0NCAyMTkuMXpNMjM0IDQ0OC44TDYxLjcgMzM0IDEzOC42IDI4Mi42IDIzNCAzNDYuMyAyMzQgNDQ4Ljh6TTI1NiAzMDhsLTc3LjctNTIgNzcuNy01MiA3Ny43IDUyLTc3LjcgNTJ6bTIyIDE0MC45bDAtMTAyLjYgOTUuNC02My43IDc2LjkgNTEuNC0xNzIuMyAxMTQuOXptMTkwLTE1NmwtNTUuMS0zNi45IDU1LjEtMzYuOSAwIDczLjd6Il0KICAgIH07CiAgICBmYVJhdmVscnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmF2ZWxyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ5IiwgIk00OTguNiAyMzQuMmMtMS4yLTEwLjMtMS43LTIwLjgtMy43LTMxLTIuNS0xMi40LTUuNy0yNC42LTkuNi0zNi42LTYuOC0yMC45LTE3LjItNDAuMy0zMC45LTU3LjUtNS45LTcuNi0xMi4xLTE0LjgtMTguOC0yMS43LTE0LjEtMTQtMzAtMjYuMS00Ny4xLTM2LjEtMTcuOC0xMC42LTM2LjgtMTguOS01Ni43LTI0LjctMTEtMy4xLTIyLjMtNS40LTMzLjUtNy42LTYuOC0xLjMtMTMuNy0xLjctMjAuNi0yLjUtLjMgMC0uNi0uNC0uOS0uNi0xMC44IDAtMjEuNSAwLTMyLjMgMC0yLjQgLjQtNC44IC45LTcuMiAxLjItMTEuNiAxLjItMjMuMSAzLjYtMzQuMyA3LjEtMTMuOCA0LjEtMjcuMSA5LjYtMzkuOCAxNi40LTEzLjMgNy0yNi4xIDE1LjEtMzguMSAyNC4yLTYuMiA0LjYtMTIuMyA5LjQtMTggMTQuNS0xMC4yIDkuMi0yMC40IDE4LjQtMjkuOSAyOC4zLTEyLjggMTMuMy0yNC4xIDI4LjEtMzMuNiA0NC04LjYgMTQtMTUuNSAyOS0yMC41IDQ0LjYtNy4yIDIyLjctMTAuMyA0Ni42LTkuMiA3MC4zIC42IDEzLjUgMiAyNi45IDQuNCA0MC4yIDMuNCAxOC40IDkgMzYuMyAxNi43IDUzLjMgMTMuNiAyOS4yIDMyLjEgNTEuNSA1MC40IDY3LjkgMTIuOCAxMS42IDI2LjggMjEuOSA0MS44IDMwLjYgMTcuNyAxMC40IDM2LjQgMTguOSA1NS45IDI1LjMgMTMuMyA0LjMgMjYuOSA3LjYgNDAuNiA5LjggNi4xIDEgMTIuMyAxLjMgMTguNCAxLjkgLjQgLjEgLjggLjMgMS4yIC42bDMyLjMgMGMyLjUtLjQgNS0uOSA3LjUtMS4xIDE2LjMtMS4zIDMyLjEtNS4zIDQ3LjUtMTAuNyAxNy4yLTUuOSAzMy43LTEzLjkgNDktMjMuOCA5LjctNi40IDE5LjQtMTMuMSAyOC43LTIwLjEgNS44LTQuMyAxMS05LjUgMTYuMy0xNC41IDQtMy43IDcuOC03LjYgMTEuNS0xMS41IDEyLTEyLjcgMjIuNi0yNi42IDMxLjQtNDEuNiA5LjUtMTYgMTcuNC0zMi45IDIyLjMtNTAuOSAyLjktMTAuNCA0LjktMjEgNy0zMS43IDEtNS4zIDEuMy0xMC43IDEuOS0xNi4xIDAtLjMgLjQtLjYgLjYtLjlsMC0zNy4xYy0uMi0uNi0uNC0xLjItLjYtMS44em0tMTYxLjEtMS4ycy0xNi42LTMtMjguNS0zYy0yNy4yIDAtMzMuNiAxNC45LTMzLjYgMzdsMCA5My43LTczLjUgMCAwLTE5MC43IDczLjUgMCAwIDMxLjljOC45LTI2LjggMjYuOC0zNi4yIDYyLTM2LjJsMCA2Ny4zeiJdCiAgICB9OwogICAgZmFBbGlwYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWxpcGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2NDIiLCAiTTM3Ny43IDMyTDcwLjMgMzJDMzEuNCAzMiAwIDYzLjQgMCAxMDIuM0wwIDQwOS43QzAgNDQ4LjYgMzEuNCA0ODAgNzAuMyA0ODBsMzA3LjUgMGMzOC41IDAgNjkuOC0zMS4xIDcwLjMtNjkuNi00Ni0yNS42LTExMC42LTYwLjMtMTcxLjYtODguNC0zMi4xIDQ0LTg0LjEgODEtMTQ4LjYgODEtNzAuNiAwLTkzLjctNDUuMy05Ny03Ni40LTQtMzkgMTQuOS04MS41IDk5LjUtODEuNSAzNS40IDAgNzkuNCAxMC4yIDEyNy4xIDI1IDE2LjUtMzAuMSAyNi41LTYwLjMgMjYuNS02MC4zbC0xNzguMiAwIDAtMTYuNyA5Mi4xIDAgMC0zMS4yLTEwOS40IDAgMC0xOSAxMDkuNCAwIDAtNTAuNCA1MC45IDAgMCA1MC40IDEwOS40IDAgMCAxOS0xMDkuNCAwIDAgMzEuMiA4OC44IDBzLTE1LjIgNDYuNi0zOC4zIDkwLjljNDguOSAxNi43IDEwMCAzNiAxNDguNiA1Mi43bDAtMjM0LjRjLjItMzguNy0zMS4yLTcwLjMtNjkuOS03MC4zek00Ny4zIDMyM2MxIDIwLjIgMTAuMiA1My43IDY5LjkgNTMuNyA1Mi4xIDAgOTIuNi0zOS43IDExNy45LTcyLjktNDQuNi0xOC43LTg0LjUtMzEuNC0xMDkuNC0zMS40LTY3LjQgMC03OS40IDMzLjEtNzguNCA1MC42eiJdCiAgICB9OwogICAgZmFDY0FtZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1leCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYzIiwgIk0wIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEuMS02MS43IDAtMzEuOS0zNS4xLTMxLjkgMzUuMS0yMDMuNyAwIDAtMTYzLjgtNjUuOCAwIDgxLjctMTg0LjcgNzguNiAwIDI4LjEgNjMuMiAwLTYzLjIgOTcuMiAwIDE2LjkgNDcuNiAxNy00Ny42IDc1LjUgMCAwLTIuNGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyem00NDAuNC0yMS43bDQyLjItNDYuMyA0MiA0Ni4zIDUxLjQgMC02OC03Mi4xIDY4LTcyLjEtNTAuNiAwLTQyIDQ2LjctNDEuNS00Ni43LTUxLjQgMCA2Ny41IDcyLjUtNjcuNCA3MS42IDAtMzMuMS04MyAwIDAtMjIuMiA4MC45IDAgMC0zMi4zLTgwLjkgMCAwLTIyLjQgODMgMCAwLTMzLjEtMTIyIDAgMCAxNDMuMiAxNzEuOCAwem05Ni4zLTcybDM5LjMgNDEuOSAwLTgzLjMtMzkuMyA0MS40em0tMzYuMy05MmwzNi45LTEwMC42IDAgMTAwLjYgMzguNyAwIDAtMTQzLjMtNjAuMiAwLTMyLjIgODkuMy0zMS45LTg5LjMtNjEuMiAwIDAgMTQzLjEtNjMuMi0xNDMuMS01MS4yIDAtNjIuNCAxNDMuMyA0MyAwIDExLjktMjguNyA2NS45IDAgMTIgMjguNyA4Mi43IDAgMC0xMDAuMyAzNi44IDEwMC4zIDM0LjQgMHpNMjgyIDE4NS40bDE5LjUtNDYuOSAxOS40IDQ2LjktMzguOSAweiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1hbHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFhOCIsICJNMjQ0IDI0NmMtMy4yLTItNi4zLTIuOS0xMC4xLTIuOS02LjYgMC0xMi42IDMuMi0xOS4zIDMuN2wxLjcgNC45IDI3LjctNS43ek0zNzkuOSA0NDMuOWMtMTkgMC02NC4xIDkuNS03OS45IDE5LjhsNi45IDQ1LjFjMzUuNyA2LjEgNzAuMSAzLjYgMTA2LTkuOC00LjgtMTAtMjMuNS01NS4xLTMzLTU1LjF6TTM0MC44IDE3N2M2LjYgMi44IDExLjUgOS4yIDIyLjcgMjIuMSAyLTEuNCA3LjUtNS4yIDcuNS04LjYgMC00LjktMTEuOC0xMy4yLTEzLjItMjMgMTEuMi01LjcgMjUuMi02IDM3LjYtOC45IDY4LjEtMTYuNCAxMTYuMy01Mi45IDE0Ni44LTExNi43IDYuMS0xMi42IDExLjgtMjUuOCAxMi40LTM5LjlsLTIgMi42Yy0yOC40IDUwLTMzIDYzLjItODEuMyAxMDAtMzEuOSAyNC40LTY5LjIgNDAuMi0xMDYuNiA1NC42bC02LjMtLjMgMC0yMS44Yy0xOS42IDEuNi0xOS43LTE0LjYtMzEuNi0yMy0xOC43IDIwLjYtMzEuNiA0MC44LTU4LjkgNTEuMS0xMi43IDQuOC0xOS42IDEwLTI1LjkgMjEuOCAzNC45LTE2LjQgOTEuMi0xMy41IDk4LjgtMTB6TTU1NS41IDBsLS42IDEuMS0uMyAuOSAuNi0uNiAuMy0xLjR6TTQ5Ni4zIDM4Mi4xYy0zMy45LTU2LjktNzUuMy0xMTguNC0xNTAtMTE1LjVsLS4zLTZjLTEuMS0xMy41IDMyLjggMy4yIDM1LjEtMzFsLTE0LjQgNy4yYy0xOS44LTQ1LjctOC42LTU0LjMtNjUuNS01NC4zLTE0LjcgMC0yNi43IDEuNy00MS40IDQuNiAyLjkgMTguNiAyLjIgMzYuNy0xMC45IDUwLjNsMTkuNSA1LjVjLTEuNyAzLjItMi45IDYuMy0yLjkgOS44IDAgMjEgNDIuOCAyLjkgNDIuOCAzMy42IDAgMTguNC0zNi44IDYwLjEtNTQuOSA2MC4xLTggMC01My43LTUwLTUzLjQtNjAuMWwuMy00LjYgNTIuMy0xMS41YzEzLTIuNiAxMi4zLTIyLjctMi45LTIyLjctMy43IDAtNDMuMSA5LjItNDkuNCAxMC42LTItNS4yLTcuNS0xNC4xLTEzLjgtMTQuMS0zLjIgMC02LjMgMy4yLTkuNSA0LTkuMiAyLjYtMzEgMi45LTIxLjUgMjAuMUwxNS45IDI5OC41Yy01LjUgMS4xLTguOSA2LjMtOC45IDExLjggMCA2IDUuNSAxMC45IDExLjUgMTAuOSA4IDAgMTMxLjMtMjguNCAxNDcuNC0zMi4yIDIuNiAzLjIgNC42IDYuMyA3LjggOC42IDIwLjEgMTQuNCA1OS44IDg1LjkgNzYuNCA4NS45IDI0LjEgMCA1OC0yMi40IDcxLjMtNDEuOSAzLjItNC4zIDYuOS03LjUgMTIuNC02LjkgLjYgMTMuOC0zMS42IDM0LjItMzMgNDMuNy0xLjQgMTAuMi0xIDM1LjItLjMgNDEuMSAyNi43IDguMSA1Mi0zLjYgNzcuOS0yLjkgNC4zLTIxIDEwLjYtNDEuOSA5LjgtNjMuNWwtLjMtOS41Yy0xLjQtMzQuMi0xMC45LTM4LjUtMzQuOC01OC42LTEuMS0xLjEtMi42LTIuNi0zLjctNCAyLjItMS40IDEuMS0xIDQuNi0xLjcgODguNSAwIDU2LjMgMTgzLjYgMTExLjUgMjI5LjkgMzMuMS0xNSA3Mi41LTI3LjkgMTAzLjUtNDcuMi0yOS0yNS42LTUyLjYtNDUuNy03Mi43LTc5Ljl6TTMwMC4xIDQyOC4ybDAgMjcuMiAxMS44LTMuNC0yLjktMjMuOC04LjkgMHpNMjMxLjQgMjc3LjhsMjQuMSA2MS4yIDIxLTEzLjgtMzEuMy01MC45LTEzLjggMy41em04NC40IDE1NC45bDIgMTIuNGM5LTEuNSA1OC40LTYuNiA1OC40LTE0LjEgMC0xLjQtLjYtMy4yLS45LTQuNi0yNi44IDAtMzYuOSAzLjgtNTkuNSA2LjN6Il0KICAgIH07CiAgICBmYUxldHRlcmJveGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGV0dGVyYm94ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjJkIiwgIk01MjEuMyAxMjhDNTg2LjkgMTI4IDY0MCAxODEuMSA2NDAgMjQ2LjZTNTg2LjkgMzY1LjIgNTIxLjMgMzY1LjJjLTQyLjUgMC03OS43LTIyLjMtMTAwLjctNTUuOCAxMS40LTE4LjIgMTgtMzkuNyAxOC02Mi44cy02LjYtNDQuNi0xOC02Mi44bC44LTEuMmMyMC44LTMyLjMgNTYuOC01My45IDk3LjktNTQuNmwyIDB6TTMyMCAxMjhjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwem0tMjAxLjMgMGM0Mi41IDAgNzkuNyAyMi4zIDEwMC43IDU1LjgtMTEuNCAxOC4yLTE4IDM5LjctMTggNjIuOHM2LjYgNDQuNiAxOCA2Mi44bC0uOCAxLjJjLTIwLjggMzIuMy01Ni44IDUzLjktOTcuOSA1NC42bC0yIDBDNTMuMSAzNjUuMSAwIDMxMi4xIDAgMjQ2LjZTNTMuMSAxMjggMTE4LjcgMTI4eiJdCiAgICB9OwogICAgZmFPcGVyYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZhIiwgIk0zMjEuOSAzMi43Yy0xNzAuMiAwLTI1Mi42IDIyMy44LTE0Ny41IDM1NS4xIDM2LjUgNDUuNCA4OC42IDc1LjYgMTQ3LjUgNzUuNiAzNi4zIDAgNzAuMy0xMS4xIDk5LjQtMzAuNC00My44IDM5LjItMTAxLjkgNjMtMTY1LjMgNjMtMy45IDAtOCAwLTExLjktLjMtMTMxLjUtNi4xLTIzNi4xLTExNC42LTIzNi4xLTI0Ny43IDAtMTM3IDExMS0yNDggMjQ4LTI0OGwuOCAwYzYzLjEgLjMgMTIwLjcgMjQuMSAxNjQuNCA2My4xLTI5LTE5LjQtNjMuMS0zMC40LTk5LjMtMzAuNHpNNDIzLjcgNDMwLjRjLTQwLjkgMjQuNy05MC43IDIzLjYtMTMyLTUuOCA1Ni4yLTIwLjUgOTcuNy05MS42IDk3LjctMTc2LjYgMC04NC43LTQxLjItMTU1LjgtOTcuNC0xNzYuNiA0MS44LTI5LjIgOTEuMi0zMC4zIDEzMi45LTUgMTA1LjkgOTguNyAxMDUuNSAyNjUuNy0xLjIgMzY0eiJdCiAgICB9OwogICAgZmFXZWlibyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlibyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMThhIiwgIk00MDcgMTc3LjZjNy42LTI0LTEzLjQtNDYuOC0zNy40LTQxLjctMjIgNC44LTI4LjgtMjguMS03LjEtMzIuOCA1MC4xLTEwLjkgOTIuMyAzNy4xIDc2LjUgODQuOC02LjggMjEuMi0zOC44IDEwLjgtMzItMTAuM3pNMjE0LjggNDQ2LjdjLTEwNi4zIDAtMjE0LjgtNTEuNC0yMTQuOC0xMzYuMyAwLTQ0LjMgMjgtOTUuNCA3Ni4zLTE0My43IDk5LjctOTkuNyAyMDMuMi0xMDAuOSAxNzMuNi01LjctNCAxMy4xIDEyLjMgNS43IDEyLjMgNiA3OS41LTMzLjYgMTQwLjUtMTYuOCAxMTQgNTEuNC0zLjcgOS40IDEuMSAxMC45IDguMyAxMy4xIDEzNS43IDQyLjMgMzQuOCAyMTUuMi0xNjkuNyAyMTUuMnpNMzU4LjUgMzAwLjRjLTUuNC01NS43LTc4LjUtOTQtMTYzLjQtODUuNy04NC44IDguNi0xNDguOCA2MC4zLTE0My40IDExNnM3OC41IDk0IDE2My40IDg1LjdjODQuOC04LjYgMTQ4LjgtNjAuMyAxNDMuNC0xMTZ6TTM0Ny45IDM1LjFjLTI1LjkgNS42LTE2LjggNDMuNyA4LjMgMzguMyA3Mi4zLTE1LjIgMTM0LjggNTIuOCAxMTEuNyAxMjQtNy40IDI0LjIgMjkuMSAzNyAzNy40IDEyIDMxLjktOTkuOC01NS4xLTE5NS45LTE1Ny40LTE3NC4zem0tNzguNSAzMTFjLTE3LjEgMzguOC02Ni44IDYwLTEwOS4xIDQ2LjMtNDAuOC0xMy4xLTU4LTUzLjQtNDAuMy04OS43IDE3LjctMzUuNCA2My4xLTU1LjQgMTAzLjQtNDUuMSA0MiAxMC44IDYzLjEgNTAuMiA0NiA4OC41em0tODYuMy0zMGMtMTIuOS01LjQtMzAgLjMtMzggMTIuOS04LjMgMTIuOS00LjMgMjggOC42IDM0IDEzLjEgNiAzMC44IC4zIDM5LjEtMTIuOSA4LTEzLjEgMy43LTI4LjMtOS43LTM0em0zMi42LTEzLjRjLTUuMS0xLjctMTEuNCAuNi0xNC4zIDUuNC0yLjkgNS4xLTEuNCAxMC42IDMuNyAxMi45IDUuMSAyIDExLjctLjMgMTQuNi01LjQgMi44LTUuMiAxLjEtMTAuOS00LTEyLjl6Il0KICAgIH07CiAgICBmYVJlYWRtZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFkbWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkNSIsICJNNTI4LjMgNDYuNWwtMTM5LjggMGMtNDguMSAwLTg5LjkgMzMuMy0xMDAuNCA4MC4zLTEwLjYtNDctNTIuMy04MC4zLTEwMC40LTgwLjNMNDggNDYuNUMyMS41IDQ2LjUgMCA2OCAwIDk0LjVMMCAzNDAuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGw4OS43IDBjMTAyLjIgMCAxMzIuNyAyNC40IDE0Ny4zIDc1IC43IDIuOCA1LjIgMi44IDYgMCAxNC43LTUwLjYgNDUuMi03NSAxNDcuMy03NWw4OS43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNDUuN2MwLTI2LjQtMjEuMy00Ny45LTQ3LjctNDguMXpNMjQyIDMxMS45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHpNNTAxLjMgMzExLjhjMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjhjMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOC0uMSAweiJdCiAgICB9OwogICAgZmFHb2xhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29sYW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0MGYiLCAiTTQwMC4xIDE5NC44Yy0xMC45IDIuOC0xOS45IDQuMy0yOS4xIDcuNi03LjMgMS45LTE0LjcgMy45LTIzLjIgNi4xbC0uNiAuMWMtNC4yIDEuMi00LjYgMS4zLTguNS0zLjItNC43LTUuMy04LjEtOC43LTE0LjYtMTEuOS0xOS43LTkuNi0zOC43LTYuOC01Ni40IDQuNy0yMS4yIDEzLjctMzIuMSAzNC0zMS44IDU5LjIgLjMgMjUgMTcuNCA0NS41IDQxLjIgNDguOSAyMiAyLjggMzkuOC00LjYgNTMuOC0yMC41IDIuMS0yLjYgNC01LjMgNi4xLTguMyAuOC0xIDEuNS0yLjEgMi4zLTMuM2wtNjAuMSAwYy02LjUgMC04LjEtNC01LjktOS4zIDQtOS43IDExLjUtMjUuOSAxNS45LTM0IC45LTEuOCAzLjEtNS44IDYuOS01LjhsMTAxLjEgMGM0LjUtMTMuNCAxMS44LTI2LjkgMjEuNi0zOS43IDIyLjctMjkuOSA0OS4zLTQ1LjUgODcuMi01MiAzMS44LTUuNiA2MS43LTIuNSA4OC45IDE1LjkgMjQuNiAxNi44IDM5LjggMzkuNiA0My45IDY5LjUgNS4zIDQyLjEtNi45IDc2LjMtMzYuNyAxMDUuNi0xOS43IDIwLjktNDQuOSAzNC03My45IDM5LjktNS42IDEtMTEuMSAxLjUtMTYuNSAyLTIuOSAuMi01LjcgLjUtOC41IC44LTI4LjMtLjYtNTQuMi04LjctNzYtMjcuNC0xNS4zLTEzLjMtMjUuOS0yOS42LTMxLjEtNDguNS0zLjcgNy4zLTggMTQuNC0xNCAyMS4xLTIxLjYgMjkuNi01MC45IDQ4LTg3LjkgNTIuOS0zMC42IDQuMS01OC45LTEuOC04My45LTIwLjUtMjMtMTcuNS0zNi4xLTQwLjUtMzkuNS02OS4yLTQuMS0zNCA1LjktNjUuNCAyNi40LTkxLjMgMjIuMi0yOSA1MS41LTQ3LjQgODcuMy01My45IDI5LjMtNi4yIDU3LjMtMS45IDgyLjYgMTUuMyAxNi41IDEwLjkgMjguMyAyNS44IDM2LjEgNDMuOSAxLjkgMi44IC42IDQuNC0zLjEgNS4zek00OC4zIDIwMC40Yy0xLjMgMC0xLjYtLjYtLjktMS42bDYuNi04LjRjLjYtLjkgMi4yLTEuNSAzLjQtMS41bDExMS4zIDBjMS4yIDAgMS41IC45IC45IDEuOGwtNS4zIDguMWMtLjYgMS0yLjIgMS45LTMuMSAxLjlsLTExMi44LS4zek0xLjIgMjI5LjFjLTEuMiAwLTEuNi0uNy0uOS0xLjZsNi41LTguNGMuNi0uOSAyLjItMS42IDMuNC0xLjZsMTQyLjEgMGMxLjIgMCAxLjggMSAxLjUgMS45bC0yLjUgNy41Yy0uMyAxLjItMS41IDEuOS0yLjggMS45TDEuMiAyMjkuMXptNzQuNSAyNi44Yy0uNiAuOS0uMyAxLjggLjkgMS44bDY4IC4zYy45IDAgMi4yLS45IDIuMi0yLjFsLjYtNy41YzAtMS4zLS42LTIuMi0xLjktMi4ybC02Mi4zIDBjLTEuMiAwLTIuNSAuOS0zLjEgMS45bC00LjQgNy44em01MDEuNS0xOGMtLjItMi42LS4zLTQuOC0uNy03LTUuNi0zMC44LTM0LTQ4LjMtNjMuNi00MS40LTI5IDYuNS00Ny43IDI0LjktNTQuNSA1NC4yLTUuNiAyNC4zIDYuMiA0OC45IDI4LjYgNTguOSAxNy4yIDcuNSAzNC4zIDYuNiA1MC44LTEuOSAyNC42LTEzLjYgMzgtMzIuNyAzOS42LTU5LjUtLjEtMS4yLS4xLTIuMy0uMi0zLjN6Il0KICAgIH07CiAgICBmYVN0YWNrRXhjaGFuZ2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stZXhjaGFuZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE4ZCIsICJNMTguMSAzMzIuM2w0MTIuNyAwIDAgMjJjMCAzNy43LTI5LjMgNjgtNjUuMyA2OGwtMTkgMC04Ni44IDg5LjcgMC04OS43LTE3Ni4zIDBjLTM2IDAtNjUuMy0zMC4zLTY1LjMtNjhsMC0yMnptMC0yMy42bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6bTAtMTA5LjRsNDEyLjcgMCAwLTg1LTQxMi43IDAgMCA4NXpNMzY1LjQgMEw4My40IDBjLTM2IDAtNjUuMyAzMC4zLTY1LjMgNjcuN2wwIDIyLjMgNDEyLjcgMCAwLTIyLjNDNDMwLjcgMzAuMyA0MDEuNCAwIDM2NS40IDB6Il0KICAgIH07CiAgICBmYUd1bHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3VscCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmM2FlIiwgIk0yMTAgMzkxLjFsLTE0LjEgMjQuNi00LjYgODAuMmMwIDguOS0yOC4zIDE2LjEtNjMuMSAxNi4xcy02My4xLTcuMi02My4xLTE2LjFsLTUuOC03OS40LTE0LjktMjUuNGM0MS4yIDE3LjMgMTI2IDE2LjcgMTY1LjYgMHpNMTQgMTM3LjhMMjcuNiAyNjMuM2M1LjktMjAgMjAuOC00NyA0MC01NS4yIDYuMy0yLjcgMTIuNy0yLjcgMTguNyAuOSA1LjIgMyA5LjYgOS4zIDEwLjEgMTEuOCAxLjIgNi41LTIgOS4xLTQuNSA5LjEtMyAwLTUuMy00LjYtNi44LTcuMy00LjEtNy4zLTEwLjMtNy42LTE2LjktMi44LTYuOSA1LTEyLjkgMTMuNC0xNy4xIDIwLjctNS4xIDguOC05LjQgMTguNS0xMiAyOC4yLTEuNSA1LjYtMi45IDE0LjYtLjYgMTkuOSAxIDIuMiAyLjUgMy42IDQuOSAzLjYgNSAwIDEyLjMtNi42IDE1LjgtMTAuMSA0LjUtNC41IDEwLjMtMTEuNSAxMi41LTE2bDUuMi0xNS41YzIuNi02LjggOS45LTUuNiA5LjkgMCAwIDEwLjItMy43IDEzLjYtMTAgMzQuNy01LjggMTkuNS03LjYgMjUuOC03LjYgMjUuOC0uNyAyLjgtMy40IDcuNS02LjMgNy41LTEuMiAwLTIuMS0uNC0yLjYtMS4yLTEtMS40LS45LTUuMy0uOC02LjMgLjItMy4yIDYuMy0yMi4yIDcuMy0yNS4yLTIgMi4yLTQuMSA0LjQtNi40IDYuNi01LjQgNS4xLTE0LjEgMTEuOC0yMS41IDExLjgtMy40IDAtNS42LS45LTcuNy0yLjRsNy42IDc5LjZjMiA1IDM5LjIgMTcuMSA4OC4yIDE3LjEgNDkuMSAwIDg2LjMtMTIuMiA4OC4yLTE3LjFsMTAuOS05NC42Yy01LjcgNS4yLTEyLjMgMTEuNi0xOS42IDE0LjgtNS40IDIuMy0xNy40IDMuOC0xNy40LTUuNyAwLTUuMiA5LjEtMTQuOCAxNC40LTIxLjUgMS40LTEuNyA0LjctNS45IDQuNy04LjEgMC0yLjktNi0yLjItMTEuNyAyLjUtMy4yIDIuNy02LjIgNi4zLTguNyA5LjctNC4zIDYtNi42IDExLjItOC41IDE1LjUtNi4yIDE0LjItNC4xIDguNi05LjEgMjItNSAxMy4zLTQuMiAxMS44LTUuMiAxNC0uOSAxLjktMi4yIDMuNS00IDQuNS0xLjkgMS00LjUgLjktNi4xLS4zLS45LS42LTEuMy0xLjktMS4zLTMuNyAwLS45IC4xLTEuOCAuMy0yLjcgMS41LTYuMSA3LjgtMTguMSAxNS0zNC4zIDEuNi0zLjcgMS0yLjYgLjgtMi4zLTYuMiA2LTEwLjkgOC45LTE0LjQgMTAuNS01LjggMi42LTEzIDIuNi0xNC41LTQuMS0uMS0uNC0uMS0uOC0uMi0xLjItMTEuOCA5LjItMjQuMyAxMS43LTIwLTguMS00LjYgOC4yLTEyLjYgMTQuOS0yMi40IDE0LjktNC4xIDAtNy4xLTEuNC04LjYtNS4xLTIuMy01LjUgMS4zLTE0LjkgNC42LTIzLjggMS43LTQuNSA0LTkuOSA3LjEtMTYuMiAxLjYtMy40IDQuMi01LjQgNy42LTQuNSAuNiAuMiAxLjEgLjQgMS42IC43IDIuNiAxLjggMS42IDQuNSAuMyA3LjItMy44IDcuNS03LjEgMTMtOS4zIDIwLjgtLjkgMy4zLTIgOSAxLjUgOSAyLjQgMCA0LjctLjggNi45LTIuNCA0LjYtMy40IDguMy04LjUgMTEuMS0xMy41IDItMy42IDQuNC04LjMgNS42LTEyLjMgLjUtMS43IDEuMS0zLjMgMS44LTQuOCAxLjEtMi41IDIuNi01LjEgNS4yLTUuMSAxLjMgMCAyLjQgLjUgMy4yIDEuNSAxLjcgMi4yIDEuMyA0LjUgLjQgNi45LTIgNS42LTQuNyAxMC42LTYuOSAxNi43LTEuMyAzLjUtMi43IDgtMi43IDExLjcgMCAzLjQgMy43IDIuNiA2LjggMS4yIDIuNC0xLjEgNC44LTIuOCA2LjgtNC41IDEuMi00LjkgLjktMy44IDI2LjQtNjguMiAxLjMtMy4zIDMuNy00LjcgNi4xLTQuNyAxLjIgMCAyLjIgLjQgMy4yIDEuMSAxLjcgMS4zIDEuNyA0LjEgMSA2LjItLjcgMS45LS42IDEuMy00LjUgMTAuNS01LjIgMTIuMS04LjYgMjAuOC0xMy4yIDMxLjktMS45IDQuNi03LjcgMTguOS04LjcgMjIuMy0uNiAyLjItMS4zIDUuOCAxIDUuOCA1LjQgMCAxOS4zLTEzLjEgMjMuMS0xNyAuMi0uMyAuNS0uNCAuOS0uNiAuNi0xLjkgMS4yLTMuNyAxLjctNS41IDEuNC0zLjggMi43LTguMiA1LjMtMTEuMyAuOC0xIDEuNy0xLjYgMi43LTEuNiAyLjggMCA0LjIgMS4yIDQuMiA0IDAgMS4xLS43IDUuMS0xLjEgNi4yIDEuNC0xLjUgMi45LTMgNC41LTQuNSAxNS0xMy45IDI1LjctNi44IDI1LjcgLjIgMCA3LjQtOC45IDE3LjctMTMuOCAyMy40LTEuNiAxLjktNC45IDUuNC01IDYuNCAwIDEuMyAuOSAxLjggMi4yIDEuOCAyIDAgNi40LTMuNSA4LTQuNyA1LTMuOSAxMS44LTkuOSAxNi42LTE0LjFsMTQuOC0xMzYuOGMtMzAuNSAxNy4xLTE5Ny42IDE3LjItMjI4LjMgLjJ6bTIyOS43LTguNWMwIDIxLTIzMS4yIDIxLTIzMS4yIDAgMC04LjggNTEuOC0xNS45IDExNS42LTE1LjkgOSAwIDE3LjggLjEgMjYuMyAuNEwxNjcgNjUuMSAyMjguMyAuNmMxLjQtMS40IDUuOC0uMiA5LjkgMy41czYuNiA3LjkgNS4zIDkuM2wtLjEgLjEtNTcuMyA2MC41LTEwIDQwLjdjMzkuOSAyLjYgNjcuNiA4LjEgNjcuNiAxNC42em0tNjkuNCA0LjZjMC0uOC0uOS0xLjUtMi41LTIuMWwtLjIgLjhjMCAxLjMtNSAyLjQtMTEuMSAyLjRzLTExLjEtMS4xLTExLjEtMi40YzAtLjEgMC0uMiAuMS0uM2wuMi0uN2MtMS44IC42LTMgMS40LTMgMi4zIDAgMi4xIDYuMiAzLjcgMTMuNyAzLjcgNy43IC4xIDEzLjktMS42IDEzLjktMy43eiJdCiAgICB9OwogICAgZmFZZWxwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInllbHAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFlOSIsICJNNDIuOSAyNDAuM2w5OS42IDQ4LjZjMTkuMiA5LjQgMTYuMiAzNy41LTQuNSA0Mi43TDMwLjUgMzU4LjVjLTMuMiAuOC02LjQgLjktOS42IC4zcy02LjItMS44LTguOS0zLjctNC45LTQuMy02LjYtNy4xLTIuNy01LjktMy4xLTkuMmMtMy4zLTI4LjgtLjItNTcuOSA5LTg1LjMgMS0zLjEgMi43LTUuOSA0LjktOC4zczQuOS00LjIgNy45LTUuNSA2LjItMS44IDkuNS0xLjggNi40IC45IDkuMyAyLjN6bTQ0IDIzOS4zYzIzLjggMTYuMyA1MC45IDI3LjMgNzkuNCAzMi4xIDMuMiAuNiA2LjUgLjQgOS42LS40czYuMS0yLjMgOC42LTQuNCA0LjYtNC42IDYtNy41IDIuMy02LjEgMi40LTkuNGwzLjktMTEwLjhjLjctMjEuMy0yNS41LTMxLjktMzkuOC0xNi4xTDgyLjggNDQ1LjVjLTIuMiAyLjQtMy44IDUuMy00LjggOC40cy0xLjMgNi40LS45IDkuNiAxLjUgNi4zIDMuMSA5LjEgMy45IDUuMiA2LjYgN2wwIDB6TTIzMi4yIDM2OS43bDU4LjggOTRjMS43IDIuOCA0IDUuMSA2LjggNi45czUuOCAzIDkgMy41IDYuNSAuMyA5LjctLjUgNi4xLTIuNCA4LjYtNC40YzIyLjMtMTguNCA0MC4zLTQxLjUgNTIuNy02Ny42IDEuNC0yLjkgMi4xLTYuMSAyLjItOS40cy0uNi02LjUtMS45LTkuNC0zLjItNS43LTUuNi03LjgtNS4yLTMuOS04LjMtNC45TDI1OC43IDMzNS43Yy0yMC4zLTYuNS0zNy44IDE1LjgtMjYuNSAzMy45ek0zODAuNiAyMzcuNGMtMTEuNS0yNi41LTI4LjctNTAuMi01MC40LTY5LjMtMi40LTIuMS01LjMtMy43LTguNC00LjdzLTYuNC0xLjItOS42LS44LTYuMyAxLjUtOS4xIDMuMi01LjEgNC02LjkgNi43bC02MiA5MS45Yy0xMS45IDE3LjcgNC43IDQwLjYgMjUuMiAzNC43TDM2NiAyNjguNmMzLjEtLjkgNi0yLjUgOC41LTQuNnM0LjUtNC43IDUuOC03LjcgMi4xLTYuMiAyLjItOS40LS42LTYuNS0xLjktOS41bDAgMHpNNjIuMSAzMC4yYy0yLjggMS40LTUuNCAzLjMtNy40IDUuN3MtMy42IDUuMi00LjUgOC4yLTEuMiA2LjItLjkgOS4zIDEuMyA2LjEgMi45IDguOUwxNTYuMyAyNDIuNmMxMS43IDIwLjIgNDIuNiAxMS45IDQyLjYtMTEuNGwwLTIwOC4zYzAtMy4xLS42LTYuMy0xLjgtOS4ycy0zLjEtNS41LTUuNC03LjYtNS0zLjgtOC00LjgtNi4xLTEuNC05LjMtMS4yYy0zOSAzLjEtNzcgMTMuMy0xMTIuMyAzMC4xeiJdCiAgICB9OwogICAgZmFHb2ZvcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29mb3JlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTciLCAiTTM0OCAzMTkuOGwtMTMuMiAwIDAgMzQuN2MtMjQuNSAyMy4xLTU2LjMgMzUuOC04OS45IDM1LjgtNzMuMiAwLTEzMi40LTYwLjItMTMyLjQtMTM0LjQgMC03NC4xIDU5LjItMTM0LjQgMTMyLjQtMTM0LjQgMzUuMyAwIDY4LjYgMTQgOTMuNiAzOS40bDYyLjMtNjMuM2MtNDEuOC00Mi4zLTk3LjEtNjUuNi0xNTYuMS02NS42LTEyMi43IDAtMjIwLjcgMTAwLjYtMjIwLjcgMjI0IDAgMTIyLjUgOTcgMjI0IDIyMC43IDIyNCA2My4yIDAgMTI0LjUtMjYuMiAxNzEtODIuNS0yLTI3LjYtMTMuNC03Ny43LTY3LjctNzcuN3pNMzM1LjkgMjA3LjNsLTEwNi4zIDAgMCA4OSAxMTguNCAwYzMzLjUgMCA2MC41IDE1LjEgNzYgNDEuOGwwLTMwLjZjMC02NS4yLTQwLjQtMTAwLjItODguMS0xMDAuMnoiXQogICAgfTsKICAgIGZhQXZpYXRvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF2aWF0byIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDIxIiwgIk0xMDcuMiAyODMuNWwtMTktNDEuOC01Mi4xIDAtMTkgNDEuOC0xNy4xIDAgNjIuMi0xMzEuNCA2Mi4yIDEzMS40LTE3LjIgMHptLTQ1LTk4LjFsLTE5LjYgNDIuNSAzOS4yIDAtMTkuNi00Mi41ek0xNzQuOSAyODcuOGwtNjIuMi0xMzEuNCAxNy4xIDAgNDUuMSA5NiA0NS4xLTk2IDE3IDAtNjIuMSAxMzEuNHptODAuNi00LjNsMC0xMjcuMSAxNS41IDAgMCAxMjcuMS0xNS41IDB6TTQ2NC42IDE2Ny45bDAgMTE1LjYtMTcuMyAwIDAtMTE1LjYtNDEuMiAwIDAtMTEuNSA5OS42IDAgMCAxMS41LTQxLjEgMHpNNjQwIDIxOC44YzAgOS4yLTEuNyAxNy44LTUuMSAyNS44cy04LjIgMTUuMS0xNC4yIDIxLjEtMTMuMSAxMC44LTIxLjEgMTQuMi0xNi42IDUuMS0yNS44IDUuMS0xNy44LTEuNy0yNS44LTUuMS0xNS4xLTguMi0yMS4xLTE0LjItMTAuOC0xMy0xNC4yLTIxLjFjLTMuNC04LTUuMS0xNi42LTUuMS0yNS44czEuNy0xNy44IDUuMS0yNS44IDguMi0xNS4xIDE0LjItMjEuMSAxMy04LjQgMjEuMS0xMS45YzgtMy40IDE2LjYtNS4xIDI1LjgtNS4xczE3LjggMS43IDI1LjggNS4xIDE1LjEgNS44IDIxLjEgMTEuOWM2IDYgMTAuNyAxMy4xIDE0LjIgMjEuMSAzLjQgOCA1LjEgMTYuNiA1LjEgMjUuOHptLTE1LjUgMGMwLTcuMy0xLjMtMTQtMy45LTIwLjNzLTYuMi0xMS43LTEwLjgtMTYuMy0xMC04LjItMTYuMi0xMC45LTEyLjgtNC0xOS44LTQtMTMuNiAxLjMtMTkuOCA0LTExLjYgNi4zLTE2LjIgMTAuOS04LjIgMTAtMTAuOCAxNi4zLTMuOSAxMy4xLTMuOSAyMC4zYzAgNy4zIDEuMyAxNCAzLjkgMjAuM3M2LjIgMTEuNyAxMC44IDE2LjMgMTAgOC4yIDE2LjIgMTAuOSAxMi44IDQgMTkuOCA0IDEzLjYtMS4zIDE5LjgtNCAxMS42LTYuMyAxNi4yLTEwLjkgOC4yLTEwIDEwLjgtMTYuMyAzLjktMTMuMSAzLjktMjAuM3ptLTk0LjggOTYuN2wwLTYuMyA4OC45LTEwLTI0Mi45IDEzLjRjLjYtMi4yIDEuMS00LjYgMS40LTcuMiAuMy0yIC41LTQuMiAuNi02LjVsNjQuOC04LjEtNjQuOSAxLjljMC0uNC0uMS0uNy0uMS0xLjEtMi44LTE3LjItMjUuNS0yMy43LTI1LjUtMjMuN2wtMS4xLTI2LjMgMjMuOCAwIDE5IDQxLjggMTcuMSAwLTYyLjItMTMxLjQtNjIuMiAxMzEuNCAxNy4xIDAgMTktNDEuOCAyMy42IDAtMS4xIDI2LjRzLTIyLjcgNi41LTI1LjUgMjMuN2MtLjEgLjMtLjEgLjctLjEgMS4xbC02NC45LTEuOSA2NC44IDguMWMuMSAyLjMgLjMgNC40IC42IDYuNSAuMyAyLjYgLjggNSAxLjQgNy4ybC0yNDIuOS0xMy41IDg4LjkgMTAgMCA2LjNjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjMC02LjItNC42LTExLjMtMTAuNS0xMi4ybDAtNS44IDgwLjMgOSAwIDUuNGMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTQuOSAyOC40IDMuMiAwIDIzLjctNS45IDAgMCAxMy45IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy4yIDM4LjMgNC4zYzguMSAxMS40IDE5IDEzLjYgMTkgMTMuNmwtLjEgNi43LTUuMSAuMi0uMSAxMi4xIDQuMSAwIC4xLTUgNS4yIDAgLjEgNSA0LjEgMC0uMS0xMi4xLTUuMS0uMi0uMS02LjdzMTAuOS0yLjEgMTktMTMuNmwzOC4zLTQuMyAwIDIzLjItNS45IDAgMCAxMy44IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy43IDI4LjQtMy4yIDAgNC45Yy01LjcgMS4xLTkuOSA2LjItOS45IDEyLjEgMCA2LjggNS42IDEwLjIgMTIuNCAxMC4yczEyLjQtMy40IDEyLjQtMTAuMmMwLTYtNC4zLTExLTkuOS0xMi4xbDAtNS40IDgwLjMtOSAwIDUuOGMtNS45IC45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40czEyLjQtNS42IDEyLjQtMTIuNGMtLjItNi4zLTQuNy0xMS40LTEwLjctMTIuM3pNMzI4LjkgMjI3LjlsMTkuNi00Mi41IDE5LjYgNDIuNS0xNy45IDAtMS43LTQwLjMtMS43IDQwLjMtMTcuOSAweiJdCiAgICB9OwogICAgZmFQYWRsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFkbGV0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YTAiLCAiTTI5Ny45IDBsLjEgMGM3LjYgLjEgMTQuNCA0LjcgMTcuNSAxMS44bDEzMiAzMDguNSAuMy0uMSAuMiAuNC0yLjggMTAtNDIuOSAxNThjLTMuNyAxNi4yLTE5LjcgMjYuMy0zNS44IDIyLjZsLTY4LjQtMTUuNi02OC41IDE1LjZjLTE2LjEgMy43LTMyLjEtNi40LTM1LjgtMjIuNmwtNDIuOS0xNTgtMi43LTEwIC4xLS40IDEzMi4xLTMwOC40YzMtNyA5LjktMTEuNiAxNy41LTExLjh6TTE2MC4xIDMyMi4xbDEzMSAzOS4xIDYuOSAxMjIuNSA3LjktMTIxLjUgMTMwLjYtMzkuMyAuMi0uMS0xMzEgMjUuMS04LjYtMzIwLjItNS4yIDMyMC4yLTEzMS44LTI1Ljh6TTQyNiAyMjIuNmw5NC40LTQxIDczLjggMC0xNTcgMjQ3LjYgMzEuNi0xMDktNDIuOC05Ny42em0xNzEuNS00MS4ybDQxLjQgNzYuMmM0IDcuNS0zLjkgMTUuOS0xMS42IDEyLjJsLTQ3LjYtMjIuNyAxNy44LTY1Ljd6TTEyNy4zIDMxOC41TDE1OC43IDQzMCAxLjYgMTU0LjVjLTUuOS0xMC40IDUuNS0yMiAxNS45LTE2LjJsMTUxLjggODQuMi00Mi4xIDk2eiJdCiAgICB9OwogICAgZmFFZGdlTGVnYWN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVkZ2UtbGVnYWN5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNzgiLCAiTS02IDIyOC4ybC40LS41YzAgLjIgMCAuMy0uMSAuNWwtLjMgMHptNDYwLjYgMTUuNWMwLTQ0LTcuOC04NC41LTI4LjgtMTIyLjQtNDEtNzMuNC0xMTMuNi0xMTMuMy0xOTguNi0xMTMuMy0xMzkuOS0uMy0yMTguMyAxMDUuMi0yMzIuOCAyMTkuNyA0Mi40LTYxLjMgMTE3LjEtMTIxLjQgMjIwLjQtMTI1IDAgMCAxMDkuNyAwIDk5LjQgMTA1bC0xNzUuOCAwYzYuNC0zNy40IDE4LjUtNTkgMzQuMy03OC45LTc1IDM0LjktMTIxLjggOTYuMS0xMjAuOCAxODguMyAuOCA3MS41IDUwLjEgMTQ0LjggMTIwLjggMTcyIDgzLjQgMzEuOCAxOTIuOCA3LjIgMjQwLjEtMjEuM2wwLTEwNC40Yy04MC45IDU2LjUtMjcwLjkgNjAuOS0yNzIuMy02Ny42bDMxNC4xIDAgMC01Mi4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVMYXN0Zm0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxhc3RmbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJsYXN0Zm0tc3F1YXJlIl0sICJmMjAzIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEwLjcgMjgwLjhjLTEuOC01LjUtMy40LTEwLjgtNS0xNS45LTEyLjktNDEuOS0yMS02OC40LTU4LTY4LjQtMjIuNCAwLTQ1LjEgMTYuMS00NS4xIDYxLjIgMCAzNS4yIDE4IDU3LjIgNDMuMyA1Ny4yIDI4LjYgMCA0Ny42LTIxLjMgNDcuNi0yMS4zbDExLjcgMzEuOXMtMTkuOCAxOS40LTYxLjIgMTkuNGMtNTEuMyAwLTc5LjktMzAuMS03OS45LTg1LjggMC01Ny45IDI4LjYtOTIgODIuNS05MiA2Ny45IDAgNzkuMyAzNS4zIDk2LjQgODguNCAxLjQgNC40IDIuOSA4LjkgNC40IDEzLjUgOC44IDI2LjggMjQuMiA0Ni4yIDYxLjIgNDYuMiAyNC45IDAgMzguMS01LjUgMzguMS0xOS4xIDAtMTcuNS0xNi45LTIxLjItNDAtMjYuNC0zLjItLjctNi41LTEuNC05LjktMi4yLTMwLjQtNy4zLTQyLjUtMjMuMS00Mi41LTQ4IDAtNDAgMzIuMy01Mi40IDY1LjItNTIuNCAzNy40IDAgNjAuMSAxMy42IDYzIDQ2LjZsLTM2LjcgNC40Yy0xLjUtMTUuOC0xMS0yMi40LTI4LjYtMjIuNC0xNi4xIDAtMjYgNy4zLTI2IDE5LjggMCAxMSA0LjggMTcuNiAyMC45IDIxLjMgMi4yIC41IDQuNSAxIDYuNyAxLjQgMzEuMSA2LjUgNjUuMSAxMy43IDY1LjEgNTYuMSAuMSAzNi43LTMwLjcgNTAuNi03Ni4xIDUwLjYtNjMuNCAwLTg1LjQtMjguNi05Ny4xLTY0LjF6Il0KICAgIH07CiAgICBmYUxhc3RmbVNxdWFyZSA9IGZhU3F1YXJlTGFzdGZtOwogICAgZmFHb29kcmVhZHNHID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcy1nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzYTkiLCAiTTEwLjggNDAzLjNsMi44IDBjMTIuNyAwIDI1LjUgMCAzOC4yIC4xIDEuNiAwIDMuMS0uNCAzLjYgMi4xIDcuMSAzNC45IDMwIDU0LjYgNjIuOSA2My45IDI2LjkgNy42IDU0LjEgNy44IDgxLjMgMS44IDMzLjgtNy40IDU2LTI4LjMgNjgtNjAuNCA4LTIxLjUgMTAuNy00My44IDExLTY2LjUgLjEtNS44IC4zLTQ3LS4yLTUyLjhsLS45LS4zYy0uOCAxLjUtMS43IDIuOS0yLjUgNC40LTIyLjEgNDMuMS02MS4zIDY3LjQtMTA1LjQgNjkuMS0xMDMgNC0xNjkuNC01Ny0xNzItMTc2LjItLjUtMjMuNyAxLjgtNDYuOSA4LjMtNjkuNyAyMC42LTcxLjEgNzQuNi0xMTguMiAxNTMuOS0xMTguOCA2MS4zLS40IDEwMS41IDM4LjcgMTE2LjIgNzAuMyAuNSAxLjEgMS4zIDIuMyAyLjQgMS45bDAtNjEuNiA0NC4zIDBjMCAyODAuMyAuMSAzMzIuMiAuMSAzMzIuMi0uMSA3OC41LTI2LjcgMTQzLjctMTAzIDE2Mi4yLTY5LjUgMTYuOS0xNTkgNC44LTE5Ni01Ny4yLTgtMTMuNS0xMS44LTI4LjMtMTMtNDQuNXpNMTU3LjEgMzYuNWMtNTIuNS0uNS0xMDguNSA0MC43LTExNSAxMzMuOC00LjEgNTkgMTQuOCAxMjIuMiA3MS41IDE0OC42IDI3LjYgMTIuOSA3NC4zIDE1IDEwOC4zLTguNyA0Ny42LTMzLjIgNjIuNy05NyA1NC44LTE1NC05LjctNzEuMS00Ny44LTEyMC0xMTkuNi0xMTkuN3oiXQogICAgfTsKICAgIGZhQ2NNYXN0ZXJjYXJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLW1hc3RlcmNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMSIsICJNNDgyLjkgNDEwLjNjMCA2LjgtNC42IDExLjctMTEuMiAxMS43LTYuOCAwLTExLjItNS4yLTExLjItMTEuN3M0LjQtMTEuNyAxMS4yLTExLjdjNi42IDAgMTEuMiA1LjIgMTEuMiAxMS43ek0xNzIuMSAzOTguNmMtNy4xIDAtMTEuMiA1LjItMTEuMiAxMS43UzE2NSA0MjIgMTcyLjEgNDIyYzYuNSAwIDEwLjktNC45IDEwLjktMTEuNy0uMS02LjUtNC40LTExLjctMTAuOS0xMS43em0xMTcuNS0uM2MtNS40IDAtOC43IDMuNS05LjUgOC43bDE5LjEgMGMtLjktNS43LTQuNC04LjctOS42LTguN3ptMTA3LjggLjNjLTYuOCAwLTEwLjkgNS4yLTEwLjkgMTEuN3M0LjEgMTEuNyAxMC45IDExLjcgMTEuMi00LjkgMTEuMi0xMS43YzAtNi41LTQuNC0xMS43LTExLjItMTEuN3ptMTA1LjkgMjYuMWMwIC4zIC4zIC41IC4zIDEuMSAwIC4zLS4zIC41LS4zIDEuMS0uMyAuMy0uMyAuNS0uNSAuOC0uMyAuMy0uNSAuNS0xLjEgLjUtLjMgLjMtLjUgLjMtMS4xIC4zLS4zIDAtLjUgMC0xLjEtLjMtLjMgMC0uNS0uMy0uOC0uNS0uMy0uMy0uNS0uNS0uNS0uOC0uMy0uNS0uMy0uOC0uMy0xLjEgMC0uNSAwLS44IC4zLTEuMSAwLS41IC4zLS44IC41LTEuMSAuMy0uMyAuNS0uMyAuOC0uNSAuNS0uMyAuOC0uMyAxLjEtLjMgLjUgMCAuOCAwIDEuMSAuMyAuNSAuMyAuOCAuMyAxLjEgLjVzLjIgLjYgLjUgMS4xem0tMi4yIDEuNGMuNSAwIC41LS4zIC44LS4zIC4zLS4zIC4zLS41IC4zLS44czAtLjUtLjMtLjhjLS4zIDAtLjUtLjMtMS4xLS4zbC0xLjYgMCAwIDMuNSAuOCAwIDAtMS40IC4zIDAgMS4xIDEuNCAuOCAwLTEuMS0xLjN6TTU3NiA4MWwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODFjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODFDMCA1NC41IDIxLjUgMzMgNDggMzNsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTY0IDIyMC42YzAgNzYuNSA2Mi4xIDEzOC41IDEzOC41IDEzOC41IDI3LjIgMCA1My45LTguMiA3Ni41LTIzLjEtNzIuOS01OS4zLTcyLjQtMTcxLjIgMC0yMzAuNS0yMi42LTE1LTQ5LjMtMjMuMS03Ni41LTIzLjEtNzYuNC0uMS0xMzguNSA2Mi0xMzguNSAxMzguMnpNMjg4IDMyOS40YzcwLjUtNTUgNzAuMi0xNjIuMiAwLTIxNy41LTcwLjIgNTUuMy03MC41IDE2Mi42IDAgMjE3LjV6TTE0NS43IDQwNS43YzAtOC43LTUuNy0xNC40LTE0LjctMTQuNy00LjYgMC05LjUgMS40LTEyLjggNi41LTIuNC00LjEtNi41LTYuNS0xMi4yLTYuNS0zLjggMC03LjYgMS40LTEwLjYgNS40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMGMwLTE4LjktMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAuMiA4LjIgMzAuMmw3LjkgMGMwLTE4LjMtMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAgOC4yIDMwLjJsOC4yIDAgMC0yMy0uMiAwek0xOTAuNiAzOTJsLTcuOSAwIDAgNC40Yy0yLjctMy4zLTYuNS01LjQtMTEuNy01LjQtMTAuMyAwLTE4LjIgOC4yLTE4LjIgMTkuMyAwIDExLjIgNy45IDE5LjMgMTguMiAxOS4zIDUuMiAwIDktMS45IDExLjctNS40bDAgNC42IDcuOSAwIDAtMzYuOHptNDAuNSAyNS42YzAtMTUtMjIuOS04LjItMjIuOS0xNS4yIDAtNS43IDExLjktNC44IDE4LjUtMS4xbDMuMy02LjVjLTkuNC02LjEtMzAuMi02LTMwLjIgOC4yIDAgMTQuMyAyMi45IDguMyAyMi45IDE1IDAgNi4zLTEzLjUgNS44LTIwLjcgLjhsLTMuNSA2LjNjMTEuMiA3LjYgMzIuNiA2IDMyLjYtNy41em0zNS40IDkuM2wtMi4yLTYuOGMtMy44IDIuMS0xMi4yIDQuNC0xMi4yLTQuMWwwLTE2LjYgMTMuMSAwIDAtNy40LTEzLjEgMCAwLTExLjItOC4yIDAgMCAxMS4yLTcuNiAwIDAgNy4zIDcuNiAwIDAgMTYuN2MwIDE3LjYgMTcuMyAxNC40IDIyLjYgMTAuOXptMTMuMy0xMy40bDI3LjUgMGMwLTE2LjItNy40LTIyLjYtMTcuNC0yMi42LTEwLjYgMC0xOC4yIDcuOS0xOC4yIDE5LjMgMCAyMC41IDIyLjYgMjMuOSAzMy44IDE0LjJsLTMuOC02Yy03LjggNi40LTE5LjYgNS44LTIxLjktNC45ek0zMzguOSAzOTJjLTQuNi0yLTExLjYtMS44LTE1LjIgNC40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMCAwLTIwLjdjMC0xMS42IDkuNS0xMC4xIDEyLjgtOC40bDIuNC03LjZ6bTEwLjYgMTguM2MwLTExLjQgMTEuNi0xNS4xIDIwLjctOC40bDMuOC02LjVjLTExLjYtOS4xLTMyLjctNC4xLTMyLjcgMTUgMCAxOS44IDIyLjQgMjMuOCAzMi43IDE1bC0zLjgtNi41Yy05LjIgNi41LTIwLjcgMi42LTIwLjctOC42ek00MTYuMiAzOTJsLTguMiAwIDAgNC40Yy04LjMtMTEtMjkuOS00LjgtMjkuOSAxMy45IDAgMTkuMiAyMi40IDI0LjcgMjkuOSAxMy45bDAgNC42IDguMiAwIDAtMzYuOHptMzMuNyAwYy0yLjQtMS4yLTExLTIuOS0xNS4yIDQuNGwwLTQuNC03LjkgMCAwIDM2LjcgNy45IDAgMC0yMC43YzAtMTEgOS0xMC4zIDEyLjgtOC40bDIuNC03LjZ6bTQwLjMtMTQuOWwtNy45IDAgMCAxOS4zYy04LjItMTAuOS0yOS45LTUuMS0yOS45IDEzLjkgMCAxOS40IDIyLjUgMjQuNiAyOS45IDEzLjlsMCA0LjYgNy45IDAgMC01MS43em03LjYtNzUuMWwwIDQuNiAuOCAwIDAtNC42IDEuOSAwIDAtLjgtNC42IDAgMCAuOCAxLjkgMHptNi42IDEyMy44YzAtLjUgMC0xLjEtLjMtMS42LS4zLS4zLS41LS44LS44LTEuMXMtLjgtLjUtMS4xLS44Yy0uNSAwLTEuMS0uMy0xLjYtLjMtLjMgMC0uOCAuMy0xLjQgLjMtLjUgLjMtLjggLjUtMS4xIC44LS41IC4zLS44IC44LS44IDEuMS0uMyAuNS0uMyAxLjEtLjMgMS42IDAgLjMgMCAuOCAuMyAxLjQgMCAuMyAuMyAuOCAuOCAxLjEgLjMgLjMgLjUgLjUgMS4xIC44IC41IC4zIDEuMSAuMyAxLjQgLjMgLjUgMCAxLjEgMCAxLjYtLjMgLjMtLjMgLjgtLjUgMS4xLS44cy41LS44IC44LTEuMWMuMy0uNiAuMy0xLjEgLjMtMS40em0zLjItMTI0LjdsLTEuNCAwLTEuNiAzLjUtMS42LTMuNS0xLjQgMCAwIDUuNCAuOCAwIDAtNC4xIDEuNiAzLjUgMS4xIDAgMS40LTMuNSAwIDQuMSAxLjEgMCAwLTUuNHptNC40LTgwLjVjMC03Ni4yLTYyLjEtMTM4LjMtMTM4LjUtMTM4LjMtMjcuMiAwLTUzLjkgOC4yLTc2LjUgMjMuMSA3Mi4xIDU5LjMgNzMuMiAxNzEuNSAwIDIzMC41IDIyLjYgMTUgNDkuNSAyMy4xIDc2LjUgMjMuMSA3Ni40IC4xIDEzOC41LTYxLjkgMTM4LjUtMTM4LjR6Il0KICAgIH07CiAgICBmYURpc2NvdXJzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNjb3Vyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5MyIsICJNMjI1LjkgMzJDMTAzLjMgMzIgMCAxMzAuNSAwIDI1Mi4xIDAgMjU2IC4xIDQ4MCAuMSA0ODBsMjI1LjgtLjJDMzQ4LjYgNDc5LjggNDQ4IDM3Ny41IDQ0OCAyNTUuOVMzNDguNiAzMiAyMjUuOSAzMnpNMjI0IDM4NGMtMTkuNCAwLTM3LjktNC4zLTU0LjQtMTIuMUw4OC41IDM5MiAxMTEuNCAzMTdjLTkuOC0xOC4xLTE1LjQtMzguOS0xNS40LTYxIDAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjgtNTcuMyAxMjgtMTI4IDEyOHoiXQogICAgfTsKICAgIGZhQmxhY2tUaWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxhY2stdGllIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2UiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTMxNi41IDM1Ny4ybC05Mi41IDg4LjctOTIuNS04OC43IDY0LjUtMTg0LTY0LjUtODYuNiAxODQuOSAwLTY0LjQgODYuNiA2NC41IDE4NHoiXQogICAgfTsKICAgIGZhU3F1YXJlRmFjZWJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZhY2Vib29rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZhY2Vib29rLXNxdWFyZSJdLCAiZjA4MiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5OC4yIDAgMC0xNDUuOC01Mi44IDAgMC03OC4yIDUyLjggMCAwLTMzLjdjMC04Ny4xIDM5LjQtMTI3LjUgMTI1LTEyNy41IDE2LjIgMCA0NC4yIDMuMiA1NS43IDYuNGwwIDcwLjhjLTYtLjYtMTYuNS0xLTI5LjYtMS00MiAwLTU4LjIgMTUuOS01OC4yIDU3LjJsMCAyNy44IDgzLjYgMC0xNC40IDc4LjItNjkuMyAwIDAgMTQ1LjggMTI5IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rU3F1YXJlID0gZmFTcXVhcmVGYWNlYm9vazsKICAgIGZhQmF0dGxlTmV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJhdHRsZS1uZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzNSIsICJNNDQ4LjggMjI1LjZjMjYuOSAuMiAzNS42LTcuNCAzOC45LTEyLjQgMTIuNS0xNi4zLTcuMS00Ny42LTUyLjgtNzEuMyAxNy44LTMzLjYgMzAuMS02My43IDM2LjMtODUuMyAzLjQtMTEuOCAxLjEtMTkgLjUtMjAuMy0xLjcgMTAuNS0xNS44IDQ4LjUtNDguMiAxMDAtMjUtMTEuMi01Ni41LTIwLjEtOTMuOC0yMy44LTguOS0xNi45LTM0LjktNjMuOS02MC41LTg4LjktMTYuOC0xNi41LTMwLjMtMjIuNi00MC44LTIzLjVsMCAwYy0xMy44LTEuNi0yMi43IDUuOC0yNy40IDExLTE3LjIgMTguNS0yNC4zIDQ4LjktMjUgODQuMS03LjItMTIuMy0xNy4yLTI0LjYtMjguNS0yNS45bC0uMiAwYy0yMC43LTMuNS0zOC40IDI5LjItMzYgODEuMy0zOC40IDEuNC03MSA1LjgtOTMgMTEuMi05LjkgMi40LTE2LjIgNy4zLTE3LjggOS43IDEtLjQgMjIuNC05LjIgMTExLjYtOS4yIDUuMiA1MyAyOS44IDEwMS44IDI2IDkzLjItOS43IDE1LjQtMzguMiA2Mi40LTQ3LjMgOTcuNy01LjkgMjIuOS00LjQgMzcuNiAuMiA0Ny4xIDUuNiAxMi44IDE2LjQgMTYuNyAyMy4yIDE4LjMgMjUgNS43IDU1LjQtMy42IDg2LjctMjEuMS03LjUgMTIuOC0xMy45IDI4LjUtOS4xIDM5LjMgNy4zIDE5LjYgNDQuNSAxOC43IDg4LjQtOS40IDIwLjIgMzIuMiA0MC4xIDU3LjkgNTUuNyA3NC4xIDIuNiAyLjggNS41IDUuMiA4LjggNy4xIDUuMSAzLjIgOC42IDMuNCA4LjYgMy40LTguMi02LjctMzQtMzgtNjIuNS05MS44IDIyLjItMTYgNDUuNy0zOC45IDY3LjUtNjkuMyAxMjIuOCA0LjYgMTQzLjMtMjQuOCAxNDgtMzEuNiAxNC43LTE5LjkgMy40LTU3LjQtNTcuMy05My43ek0zNzEgMzMxLjhjMjMuOC0zNy43IDMwLjMtNjcuOCAyOS40LTkyLjMgMjcuOSAxNy42IDQ3LjIgMzcuNiA0OS4xIDU4LjggMS4xIDEyLjktOC4xIDI5LjEtNzguNSAzMy41ek0yMTcuMSAzODcuN2M5LjgtNi4yIDE5LjUtMTMuMSAyOS4yLTIwLjUgNi43IDEzLjMgMTMuNiAyNi4xIDIwLjYgMzguMi00MC42IDIxLjktNjguOCAxMi44LTQ5LjgtMTcuN3ptMjE1LTE3MS4zYy0xMC4zLTUuMy0yMS4yLTEwLjMtMzIuNC0xNSA3LjktMTIuMSAxNS41LTI0LjQgMjIuNy0zNi45IDM5LjEgMjQuMSA0NS45IDUzLjIgOS42IDUxLjl6TTI3OS40IDM5OGMtNS41LTExLjQtMTEtMjMuNS0xNi41LTM2LjQgNDMuMiAxLjMgNjIuNC0xOC43IDYzLjMtMjAuNCAwIC4xLTI1IDE1LjYtNjIuNSAxMi4yIDMwLjYtMjUuNiA1OS4xLTUzLjcgODUuMS04NCA4LjctMTAuMiAxNy0yMC42IDI0LjktMzEuMS0uNC0uMy0xLjUtMy0xNi41LTEyLTUxLjcgNjAuMy0xMDIuMyA5OC0xMzIuOCAxMTUuOS0yMC42LTExLjItNDAuOC0zMS44LTU1LjctNjEuNS0yMC0zOS45LTMwLTgyLjQtMzEuNi0xMTYuMSAxMi4zIC45IDI1LjMgMi4yIDM4LjggMy45LTIyLjMgMzYuOC0xNC40IDYzLTEzLjUgNjQuMiAwLS4xLTEtMjkuMiAyMC4xLTU5LjYgOSA1Mi41IDI0IDEwMy44IDQ0LjcgMTUyLjggLjktLjQgMS44IC45IDE4LjctOC4yLTI2LjMtNzQuNS0zMy44LTEzOC4yLTM0LTE3My40IDIwLTEyLjQgNDguMi0xOS44IDgxLjYtMTcuOCA0NC42IDIuNyA4Ni40IDE1LjIgMTE2LjMgMzAuNy03LjEgMTAuNC0xNC45IDIxLjMtMjMuMyAzMi41LTIwLjctMzcuNy00Ny4zLTQzLjktNDguOS00My43IC4xIDAgMjUuOSAxNC4xIDQxLjUgNDcuMi0zNy41LTEzLjgtNzYuMS0yNC40LTExNS4zLTMxLjctMTMuMS0yLjQtMjYuMi00LjQtMzkuNC02LS4xIC40LTEuOCAxLjgtMi4yIDIwLjMgNzcuOSAxNC41IDEzNi42IDM5LjkgMTY3LjIgNTcuMiAuNyAyMy42LTcgNTEuNi0yNS40IDc5LjYtMjQuNiAzNy4zLTU2LjQgNjcuMi04NC44IDg1LjR6bTI3LjQtMjg3Yy00NC42LTEuNy03My42IDcuNC05NC43IDIwLjcgMi01Mi4zIDIxLjMtNzYuNCAzOC4yLTc1LjMgMTYuOS00LjIgNTQuOSA1Mi4yIDU2LjUgNTQuNnptLTEzMC43IDMuMWMuNSAxMi4xIDEuNiAyNC42IDMuMiAzNy4zLTE0LjYtLjktMjguNy0xLjMtNDIuNC0xLjMtLjEgMy4yLS4xLTUxIDI0LjctNDkuNmwuMSAwYzUuOCAxLjEgMTAuNiA2LjkgMTQuNCAxMy42em0tMjguMSAxNjJjMjAuOCAzOS43IDQzLjMgNjAuNiA2NS4zIDcyLjMtNDYuOCAyNC44LTc3LjUgMjAtODQuOSA0LjUtLjItLjItMTEuMS0xNS4zIDE5LjctNzYuOGwwIDB6Il0KICAgIH07CiAgICBmYUJpbW9iamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaW1vYmplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3OCIsICJNNDE2IDMyTDMyIDMyQzE0LjQgMzIgMCA0Ni40IDAgNjRMMCA0NDhjMCAxNy42IDE0LjQgMzIgMzIgMzJsMzg0IDBjMTcuNiAwIDMyLTE0LjQgMzItMzJsMC0zODRjMC0xNy42LTE0LjQtMzItMzItMzJ6TTM1MiAyODkuNGMwIDQ5LjQtMTEuNCA4Mi42LTEwMy44IDgyLjZsLTE2LjkgMGMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhsLS45IDAgMCAzNC44LTY0IDAgMC0yMzIgNjQgMCAwIDc0LjcgMS4xIDBjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGwxNy4zIDBjOTIuNCAwIDEwMy44IDMzLjEgMTAzLjggODIuNWwwIDM1IC4xIDB6bS02NC0yOC45bDAgMjIuOWMwIDIxLjctMy40IDMzLjgtMzguNCAzMy44bC00NS4zIDBjLTI4LjkgMC00NC4xLTYuNS00NC4xLTM1LjdsMC0xOWMwLTI5LjMgMTUuMi0zNS43IDQ0LjEtMzUuN2w0NS4zIDBjMzUtLjIgMzguNCAxMiAzOC40IDMzLjd6Il0KICAgIH07CiAgICBpY29ucyA9IHsKICAgICAgZmFTcXVhcmVHaXRodWIsCiAgICAgIGZhR2l0aHViU3F1YXJlLAogICAgICBmYVRoaW5rUGVha3MsCiAgICAgIGZhR29vZ2xlRHJpdmUsCiAgICAgIGZhQXV0b3ByZWZpeGVyLAogICAgICBmYVNxdWFyZVZpYWRlbywKICAgICAgZmFWaWFkZW9TcXVhcmUsCiAgICAgIGZhQ3BhbmVsLAogICAgICBmYU1lbmRlbGV5LAogICAgICBmYURyYWZ0MmRpZ2l0YWwsCiAgICAgIGZhUmVwbHlkLAogICAgICBmYUVtcGlyZSwKICAgICAgZmFBY2Nlc3NpYmxlSWNvbiwKICAgICAgZmFRdW9yYSwKICAgICAgZmFDY0pjYiwKICAgICAgZmFGZWRvcmEsCiAgICAgIGZhRHVvbGluZ28sCiAgICAgIGZhRmlyc3RkcmFmdCwKICAgICAgZmFGcmVlYnNkLAogICAgICBmYU9keXNlZSwKICAgICAgZmFHZ0NpcmNsZSwKICAgICAgZmFDbG91ZGZsYXJlLAogICAgICBmYUhhY2tlcnJhbmssCiAgICAgIGZhU2t5YXRsYXMsCiAgICAgIGZhRGVza3BybywKICAgICAgZmFSZXNvbHZpbmcsCiAgICAgIGZhQmxhY2tiZXJyeSwKICAgICAgZmFTdHJpcGVTLAogICAgICBmYVNxdWFyZUJlaGFuY2UsCiAgICAgIGZhQmVoYW5jZVNxdWFyZSwKICAgICAgZmFTZXJ2aWNlc3RhY2ssCiAgICAgIGZhUm9ja2V0Y2hhdCwKICAgICAgZmFSZWJlbCwKICAgICAgZmFTcXVhcmVXZWJBd2Vzb21lLAogICAgICBmYUxpbmt0cmVlLAogICAgICBmYVNpbXBseWJ1aWx0LAogICAgICBmYVN0dWJiZXIsCiAgICAgIGZhQXBwZXIsCiAgICAgIGZhR29vZ2xlU2Nob2xhciwKICAgICAgZmFZYXJuLAogICAgICBmYVN0YWNrT3ZlcmZsb3csCiAgICAgIGZhQmx1ZXRvb3RoLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05jSnAsCiAgICAgIGZhUmVkZGl0LAogICAgICBmYUNvbm5lY3RkZXZlbG9wLAogICAgICBmYVJlc2VhcmNoZ2F0ZSwKICAgICAgZmFTaWduYWxNZXNzZW5nZXIsCiAgICAgIGZhWGluZywKICAgICAgZmFTcXVhcmVKcywKICAgICAgZmFKc1NxdWFyZSwKICAgICAgZmFGb250aWNvbnMsCiAgICAgIGZhVXBzLAogICAgICBmYUFtYXpvblBheSwKICAgICAgZmFQYW5kb3JhLAogICAgICBmYU9wZW5pZCwKICAgICAgZmFWc2NvLAogICAgICBmYVVidW50dSwKICAgICAgZmFWaWFjb2luLAogICAgICBmYVpoaWh1LAogICAgICBmYVlhbmRleCwKICAgICAgZmFQaXhpdiwKICAgICAgZmFPcGVuYWksCiAgICAgIGZhU2l0aCwKICAgICAgZmFOZmNEaXJlY3Rpb25hbCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSwKICAgICAgZmFVbWJyYWNvLAogICAgICBmYUhvb2xpLAogICAgICBmYVNxdWFyZUdpdCwKICAgICAgZmFHaXRTcXVhcmUsCiAgICAgIGZhT2Rub2tsYXNzbmlraSwKICAgICAgZmFEcnVwYWwsCiAgICAgIGZhQmxvZ2dlckIsCiAgICAgIGZhSW52aXNpb24sCiAgICAgIGZhRmFjZWJvb2tGLAogICAgICBmYUNlbnRvcywKICAgICAgZmFDY0FtYXpvblBheSwKICAgICAgZmFFYmF5LAogICAgICBmYUNvbnRhbywKICAgICAgZmFFbGxvLAogICAgICBmYVNpc3RyaXgsCiAgICAgIGZhUGVyaXNjb3BlLAogICAgICBmYUV4cGVkaXRlZHNzbCwKICAgICAgZmFOYXBzdGVyLAogICAgICBmYURlbGljaW91cywKICAgICAgZmFHdWlsZGVkLAogICAgICBmYVhib3gsCiAgICAgIGZhVW50YXBwZCwKICAgICAgZmFHb29nbGVQbHVzRywKICAgICAgZmFHaXRodWJBbHQsCiAgICAgIGZhR2V0UG9ja2V0LAogICAgICBmYUdsaWRlLAogICAgICBmYUJpdHksCiAgICAgIGZhV3BleHBsb3JlciwKICAgICAgZmFNZWdhcG9ydCwKICAgICAgZmFNZGIsCiAgICAgIGZhUGFnZTQsCiAgICAgIGZhVGhlUmVkWWV0aSwKICAgICAgZmFKaXJhLAogICAgICBmYUZlZGV4LAogICAgICBmYUV2ZXJub3RlLAogICAgICBmYVVzYiwKICAgICAgZmFBbmdyeWNyZWF0aXZlLAogICAgICBmYU1penVuaSwKICAgICAgZmFJdGNoSW8sCiAgICAgIGZhV2luZG93cywKICAgICAgZmFTdHVtYmxldXBvbiwKICAgICAgZmFHb29nbGUsCiAgICAgIGZhRGlzY29yZCwKICAgICAgZmFIYWNrZXJOZXdzLAogICAgICBmYUVsZXZlbnR5LAogICAgICBmYTExdHksCiAgICAgIGZhVGVhbXNwZWFrLAogICAgICBmYVN1cHBsZSwKICAgICAgZmFTcXVhcmVUd2l0dGVyLAogICAgICBmYVR3aXR0ZXJTcXVhcmUsCiAgICAgIGZhRm9udEF3ZXNvbWUsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwsCiAgICAgIGZhV2lyc2luZGhhbmR3ZXJrLAogICAgICBmYVdzaCwKICAgICAgZmFDb25mbHVlbmNlLAogICAgICBmYURpZ2csCiAgICAgIGZhVGhyZWFkcywKICAgICAgZmFXcHJlc3NyLAogICAgICBmYVJlbmRhY3QsCiAgICAgIGZhWW9hc3QsCiAgICAgIGZhTmltYmxyLAogICAgICBmYVBpeGVsZmVkLAogICAgICBmYVlhaG9vLAogICAgICBmYUJsdWVza3ksCiAgICAgIGZhU2NyaWJkLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1BkLAogICAgICBmYUVhcmx5YmlyZHMsCiAgICAgIGZhU3F1YXJlT2Rub2tsYXNzbmlraSwKICAgICAgZmFPZG5va2xhc3NuaWtpU3F1YXJlLAogICAgICBmYU1hcmtkb3duLAogICAgICBmYVR5cG8zLAogICAgICBmYUpvb21sYSwKICAgICAgZmFXZWl4aW4sCiAgICAgIGZhR3J1bnQsCiAgICAgIGZhUm9ja3JtcywKICAgICAgZmFVbnNwbGFzaCwKICAgICAgZmFTcXVhcmVJbnN0YWdyYW0sCiAgICAgIGZhSW5zdGFncmFtU3F1YXJlLAogICAgICBmYUZpcnN0T3JkZXJBbHQsCiAgICAgIGZhRnVsY3J1bSwKICAgICAgZmFCcmF2ZVJldmVyc2UsCiAgICAgIGZhQXZpYW5leCwKICAgICAgZmFOczgsCiAgICAgIGZhU3F1YXJlUGludGVyZXN0LAogICAgICBmYVBpbnRlcmVzdFNxdWFyZSwKICAgICAgZmFCbHVldG9vdGhCLAogICAgICBmYUdyaXBmaXJlLAogICAgICBmYVNxdWFyZUdvb2dsZVBsdXMsCiAgICAgIGZhR29vZ2xlUGx1c1NxdWFyZSwKICAgICAgZmFBcHBTdG9yZSwKICAgICAgZmFXaXgsCiAgICAgIGZhSW50ZXJjb20sCiAgICAgIGZhUmVhY3RldXJvcGUsCiAgICAgIGZhV2F6ZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCwKICAgICAgZmFCYW5kY2FtcCwKICAgICAgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlLAogICAgICBmYVZpbWVvViwKICAgICAgZmFTdHJhdmEsCiAgICAgIGZhVW5pcmVnaXN0cnksCiAgICAgIGZhQ2NEaW5lcnNDbHViLAogICAgICBmYVBpbnRlcmVzdCwKICAgICAgZmFBbGdvbGlhLAogICAgICBmYVN0YWNrcGF0aCwKICAgICAgZmFPY3RvcHVzRGVwbG95LAogICAgICBmYVlhbW1lciwKICAgICAgZmFNb2R4LAogICAgICBmYVNxdWFyZVRocmVhZHMsCiAgICAgIGZhT2xkUmVwdWJsaWMsCiAgICAgIGZhU3VzZSwKICAgICAgZmFBcHBTdG9yZUlvcywKICAgICAgZmFTcXVhcmVEcmliYmJsZSwKICAgICAgZmFEcmliYmJsZVNxdWFyZSwKICAgICAgZmFVaWtpdCwKICAgICAgZmFTdXBlcnBvd2VycywKICAgICAgZmFZb3V0dWJlLAogICAgICBmYUVtYmVyLAogICAgICBmYUJvb3RzdHJhcCwKICAgICAgZmFJdHVuZXMsCiAgICAgIGZhU3F1YXJlWGluZywKICAgICAgZmFYaW5nU3F1YXJlLAogICAgICBmYUNzczNBbHQsCiAgICAgIGZhU3F1YXJlc3BhY2UsCiAgICAgIGZhVHJlbGxvLAogICAgICBmYVZpYWRlbywKICAgICAgZmFTZWFyY2hlbmdpbiwKICAgICAgZmFQYXlwYWwsCiAgICAgIGZhU3F1YXJlQmx1ZXNreSwKICAgICAgZmFEQW5kREJleW9uZCwKICAgICAgZmFNaWNyb3NvZnQsCiAgICAgIGZhRmx5LAogICAgICBmYUNjU3RyaXBlLAogICAgICBmYVdvcmRwcmVzc1NpbXBsZSwKICAgICAgZmFTZWxsc3ksCiAgICAgIGZhRGFzaGN1YmUsCiAgICAgIGZhR2l0dGVyLAogICAgICBmYVdvbGZQYWNrQmF0dGFsaW9uLAogICAgICBmYUxhc3RmbSwKICAgICAgZmFTaG9wd2FyZSwKICAgICAgZmFCbG9nZ2VyLAogICAgICBmYUVkZ2UsCiAgICAgIGZhSW94aG9zdCwKICAgICAgZmFTY2hsaXgsCiAgICAgIGZhREFuZEQsCiAgICAgIGZhVnVlanMsCiAgICAgIGZhTWV0YSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSwKICAgICAgZmFTdHVkaW92aW5hcmksCiAgICAgIGZhQml0YnVja2V0LAogICAgICBmYVZrLAogICAgICBmYUdpdGh1YiwKICAgICAgZmFDb2RpZXBpZSwKICAgICAgZmFQaWVkUGlwZXIsCiAgICAgIGZhUmFzcGJlcnJ5UGksCiAgICAgIGZhQ3NzMywKICAgICAgZmFIdWJzcG90LAogICAgICBmYUNtcGxpZCwKICAgICAgZmFEeWFsb2csCiAgICAgIGZhRWxlbWVudG9yLAogICAgICBmYUZpcnN0T3JkZXIsCiAgICAgIGZhRHJpYmJibGUsCiAgICAgIGZhTGlua2VkaW4sCiAgICAgIGZhQ2NQYXlwYWwsCiAgICAgIGZhRGhsLAogICAgICBmYVRleCwKICAgICAgZmFTaG9waWZ5LAogICAgICBmYVNxdWFyZVJlZGRpdCwKICAgICAgZmFSZWRkaXRTcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmMsCiAgICAgIGZhR2FsYWN0aWNSZXB1YmxpYywKICAgICAgZmFGYWNlYm9vaywKICAgICAgZmFHaXRsYWIsCiAgICAgIGZhUXEsCiAgICAgIGZhU3RyaXBlLAogICAgICBmYURhaWx5bW90aW9uLAogICAgICBmYVN0ZWFtLAogICAgICBmYVNuYXBjaGF0LAogICAgICBmYVNuYXBjaGF0R2hvc3QsCiAgICAgIGZhR2FsYWN0aWNTZW5hdGUsCiAgICAgIGZhUGhvZW5peEZyYW1ld29yaywKICAgICAgZmFHaXQsCiAgICAgIGZhT3B0aW5Nb25zdGVyLAogICAgICBmYUplbmtpbnMsCiAgICAgIGZhU2xpZGVzaGFyZSwKICAgICAgZmFVYmVyLAogICAgICBmYURpZ2l0YWxPY2VhbiwKICAgICAgZmFTb3VuZGNsb3VkLAogICAgICBmYVNxdWFyZUZpZ21hLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhLAogICAgICBmYUNocm9tZSwKICAgICAgZmFUcmFkZUZlZGVyYXRpb24sCiAgICAgIGZhVmFhZGluLAogICAgICBmYURldmlhbnRhcnQsCiAgICAgIGZhTWVkaXVtLAogICAgICBmYU1lZGl1bU0sCiAgICAgIGZhT3BlbmNhcnQsCiAgICAgIGZhWUNvbWJpbmF0b3IsCiAgICAgIGZhTGluZSwKICAgICAgZmFBbWlsaWEsCiAgICAgIGZhQXN5bW1ldHJpaywKICAgICAgZmFQaGFicmljYXRvciwKICAgICAgZmFCb3RzLAogICAgICBmYVZpbmUsCiAgICAgIGZhTWVkcnQsCiAgICAgIGZhT3NpLAogICAgICBmYUdnLAogICAgICBmYUJ1eXNlbGxhZHMsCiAgICAgIGZhR29vZ2xlUGx1cywKICAgICAgZmFTY3JlZW5wYWwsCiAgICAgIGZhQml0Y29pbiwKICAgICAgZmFTd2lmdCwKICAgICAgZmFGaWxlc1BpbndoZWVsLAogICAgICBmYUxhcmF2ZWwsCiAgICAgIGZhV3Bmb3JtcywKICAgICAgZmFTcGVha2VyRGVjaywKICAgICAgZmFGbGlja3IsCiAgICAgIGZhQ2NWaXNhLAogICAgICBmYVVwd29yaywKICAgICAgZmFLYWthb1RhbGssCiAgICAgIGZhRmx1dHRlciwKICAgICAgZmFCdWZmZXIsCiAgICAgIGZhR3JhdGlwYXksCiAgICAgIGZhR29vZ2xlUGF5LAogICAgICBmYUFwcGxlLAogICAgICBmYVR1bWJsciwKICAgICAgZmFQaG9lbml4U3F1YWRyb24sCiAgICAgIGZhQ2VudGVyY29kZSwKICAgICAgZmFEZWJpYW4sCiAgICAgIGZhTWFzdG9kb24sCiAgICAgIGZhU2tldGNoLAogICAgICBmYVdlYkF3ZXNvbWUsCiAgICAgIGZhU2FzcywKICAgICAgZmFTcXVhcmVXaGF0c2FwcCwKICAgICAgZmFXaGF0c2FwcFNxdWFyZSwKICAgICAgZmFTa3lwZSwKICAgICAgZmFBbmd1bGFyLAogICAgICBmYU9wZW5zdXNlLAogICAgICBmYURyb3Bib3gsCiAgICAgIGZhRGVlemVyLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nLAogICAgICBmYUplZGlPcmRlciwKICAgICAgZmFSUHJvamVjdCwKICAgICAgZmFJbnN0YWxvZCwKICAgICAgZmFDYW5hZGlhbk1hcGxlTGVhZiwKICAgICAgZmFFdGhlcmV1bSwKICAgICAgZmFIb3V6eiwKICAgICAgZmFWaWJlciwKICAgICAgZmFLaWNrc3RhcnRlciwKICAgICAgZmFTcXVhcmVLaWNrc3RhcnRlciwKICAgICAgZmFTcG90aWZ5LAogICAgICBmYUxlYW5wdWIsCiAgICAgIGZhSmF2YSwKICAgICAgZmFOZmNTeW1ib2wsCiAgICAgIGZhV29kdSwKICAgICAgZmFTcXVhcmVTdGVhbSwKICAgICAgZmFTdGVhbVNxdWFyZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1LAogICAgICBmYU5wbSwKICAgICAgZmFDbG91ZHNjYWxlLAogICAgICBmYVRoZW1lY28sCiAgICAgIGZhR29vZ2xlUGxheSwKICAgICAgZmFLb3J2dWUsCiAgICAgIGZhVzNjLAogICAgICBmYUdyYXYsCiAgICAgIGZhQXdzLAogICAgICBmYUdsaWRlRywKICAgICAgZmFKc2ZpZGRsZSwKICAgICAgZmFLZXliYXNlLAogICAgICBmYUx1bW9uRHJvcCwKICAgICAgZmFXZWVibHksCiAgICAgIGZhRG9ja2VyLAogICAgICBmYU1hZ2VudG8sCiAgICAgIGZhR2l0QWx0LAogICAgICBmYUZpcmVmb3hCcm93c2VyLAogICAgICBmYUNsb3Vkc21pdGgsCiAgICAgIGZhV2l6YXJkc09mVGhlQ29hc3QsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmQsCiAgICAgIGZhVXNwcywKICAgICAgZmFTcXVhcmVMZXR0ZXJib3hkLAogICAgICBmYU1hbmRhbG9yaWFuLAogICAgICBmYVNsYWNrLAogICAgICBmYVNsYWNrSGFzaCwKICAgICAgZmFBbmdlbGxpc3QsCiAgICAgIGZhQW5kcm9pZCwKICAgICAgZmFNZWV0dXAsCiAgICAgIGZhRm9udGljb25zRmksCiAgICAgIGZhUGFsZmVkLAogICAgICBmYVdwYmVnaW5uZXIsCiAgICAgIGZhRGlhc3BvcmEsCiAgICAgIGZhUHJvZHVjdEh1bnQsCiAgICAgIGZhU3F1YXJlVXB3b3JrLAogICAgICBmYUN1dHRsZWZpc2gsCiAgICAgIGZhTWVkYXBwcywKICAgICAgZmFQaXgsCiAgICAgIGZhU3F1YXJlVHVtYmxyLAogICAgICBmYVR1bWJsclNxdWFyZSwKICAgICAgZmFSZWFjdCwKICAgICAgZmFKeGwsCiAgICAgIGZhU3F1YXJlTGlua2VkaW4sCiAgICAgIGZhQ3NzLAogICAgICBmYUhhc2hub2RlLAogICAgICBmYVJlZGRpdEFsaWVuLAogICAgICBmYVRpa3RvaywKICAgICAgZmFXb3JkcHJlc3MsCiAgICAgIGZhSWRlYWwsCiAgICAgIGZhUGllZFBpcGVyUHAsCiAgICAgIGZhVXNzdW5uYWgsCiAgICAgIGZhRm9ydEF3ZXNvbWVBbHQsCiAgICAgIGZhQnVyb21vYmVsZXhwZXJ0ZSwKICAgICAgZmFCaWxpYmlsaSwKICAgICAgZmFOZW9zLAogICAgICBmYURldiwKICAgICAgZmFIb3RqYXIsCiAgICAgIGZhRG9jaHViLAogICAgICBmYVZpbWVvLAogICAgICBmYU1heGNkbiwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSwKICAgICAgZmFGb250QXdlc29tZUFsdCwKICAgICAgZmFTcGVha2FwLAogICAgICBmYUZhbnRhc3lGbGlnaHRHYW1lcywKICAgICAgZmFMaW51eCwKICAgICAgZmFDb3R0b25CdXJlYXUsCiAgICAgIGZhR29vZ2xlV2FsbGV0LAogICAgICBmYUZvdXJzcXVhcmUsCiAgICAgIGZhU2hpcnRzaW5idWxrLAogICAgICBmYU1pbnRiaXQsCiAgICAgIGZhU3RheWxpbmtlZCwKICAgICAgZmFXZWJmbG93LAogICAgICBmYVJlbnJlbiwKICAgICAgZmFSZXYsCiAgICAgIGZhS2V5Y2RuLAogICAgICBmYUhpcmVBSGVscGVyLAogICAgICBmYVNxdWFyZUhhY2tlck5ld3MsCiAgICAgIGZhSGFja2VyTmV3c1NxdWFyZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCwKICAgICAgZmFPcmNpZCwKICAgICAgZmFCZWhhbmNlLAogICAgICBmYU1vbmVybywKICAgICAgZmFGaWdtYSwKICAgICAgZmFJbnN0YWdyYW0sCiAgICAgIGZhUGVyYnl0ZSwKICAgICAgZmFTcXVhcmVWaW1lbywKICAgICAgZmFWaW1lb1NxdWFyZSwKICAgICAgZmFQdXNoZWQsCiAgICAgIGZhTWl4Y2xvdWQsCiAgICAgIGZhWWFuZGV4SW50ZXJuYXRpb25hbCwKICAgICAgZmFIaXZlLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1plcm8sCiAgICAgIGZhU3F1YXJlU25hcGNoYXQsCiAgICAgIGZhU25hcGNoYXRTcXVhcmUsCiAgICAgIGZhVGhlbWVpc2xlLAogICAgICBmYURhcnRMYW5nLAogICAgICBmYURlcGxveWRvZywKICAgICAgZmFGbGlwYm9hcmQsCiAgICAgIGZhQnV5TkxhcmdlLAogICAgICBmYVdhdGNobWFuTW9uaXRvcmluZywKICAgICAgZmFIaXBzLAogICAgICBmYUNsb3VkdmVyc2lmeSwKICAgICAgZmFHb29kcmVhZHMsCiAgICAgIGZhVGlkYWwsCiAgICAgIGZhVW5pdHksCiAgICAgIGZhVGVuY2VudFdlaWJvLAogICAgICBmYUZyZWVDb2RlQ2FtcCwKICAgICAgZmFYVHdpdHRlciwKICAgICAgZmFTdGlja2VyTXVsZSwKICAgICAgZmFUd2l0Y2gsCiAgICAgIGZhS2lja3N0YXJ0ZXJLLAogICAgICBmYUNyaXRpY2FsUm9sZSwKICAgICAgZmFTdGVhbVN5bWJvbCwKICAgICAgZmFNYWlsY2hpbXAsCiAgICAgIGZhTHVtb24sCiAgICAgIGZhTnV0cml0aW9uaXgsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzLAogICAgICBmYVJlZGhhdCwKICAgICAgZmFTcXVhcmVQaWVkUGlwZXIsCiAgICAgIGZhUGllZFBpcGVyU3F1YXJlLAogICAgICBmYVdoYXRzYXBwLAogICAgICBmYUltZGIsCiAgICAgIGZhUHl0aG9uLAogICAgICBmYUNhc2hBcHAsCiAgICAgIGZhUGludGVyZXN0UCwKICAgICAgZmFXaG1jcywKICAgICAgZmFKb2dldCwKICAgICAgZmFTcXVhcmVZb3V0dWJlLAogICAgICBmYVlvdXR1YmVTcXVhcmUsCiAgICAgIGZhQXRsYXNzaWFuLAogICAgICBmYVBpZWRQaXBlckhhdCwKICAgICAgZmFJbnRlcm5ldEV4cGxvcmVyLAogICAgICBmYUFpcmJuYiwKICAgICAgZmFKcywKICAgICAgZmFRdWluc2NhcGUsCiAgICAgIGZhQWR2ZXJzYWwsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zLAogICAgICBmYU5vdGlvbiwKICAgICAgZmFDaHJvbWVjYXN0LAogICAgICBmYVdpa2lwZWRpYVcsCiAgICAgIGZhU2l0cm94LAogICAgICBmYVNxdWFyZUdpdGxhYiwKICAgICAgZmFHaXRsYWJTcXVhcmUsCiAgICAgIGZhU2hvZWxhY2UsCiAgICAgIGZhU2VsbGNhc3QsCiAgICAgIGZhTWl4LAogICAgICBmYUNjQXBwbGVQYXksCiAgICAgIGZhQnJhdmUsCiAgICAgIGZhRXRzeSwKICAgICAgZmFCdGMsCiAgICAgIGZhQWRuLAogICAgICBmYVNxdWFyZVhUd2l0dGVyLAogICAgICBmYVNxdWFyZUZvbnRBd2Vzb21lLAogICAgICBmYUZvcnVtYmVlLAogICAgICBmYTQyR3JvdXAsCiAgICAgIGZhSW5ub3NvZnQsCiAgICAgIGZhU3R1bWJsZXVwb25DaXJjbGUsCiAgICAgIGZhU3ltZm9ueSwKICAgICAgZmFTYWxlc2ZvcmNlLAogICAgICBmYVNvdXJjZXRyZWUsCiAgICAgIGZhTGlua2VkaW5JbiwKICAgICAgZmFIdG1sNSwKICAgICAgZmFSdXN0LAogICAgICBmYUhvcm5iaWxsLAogICAgICBmYVBocCwKICAgICAgZmFEaXNxdXMsCiAgICAgIGZhNTAwcHgsCiAgICAgIGZhQWZmaWxpYXRldGhlbWUsCiAgICAgIGZhUmVkUml2ZXIsCiAgICAgIGZhVHdpdHRlciwKICAgICAgZmFGb3J0QXdlc29tZSwKICAgICAgZmFNaXhlciwKICAgICAgZmFMeWZ0LAogICAgICBmYUFwcGxlUGF5LAogICAgICBmYUFydHN0YXRpb24sCiAgICAgIGZhTm9kZUpzLAogICAgICBmYVVuY2hhcnRlZCwKICAgICAgZmFQbGF5c3RhdGlvbiwKICAgICAgZmFNaWNyb2Jsb2csCiAgICAgIGZhR2l0a3Jha2VuLAogICAgICBmYVRlbGVncmFtLAogICAgICBmYVRlbGVncmFtUGxhbmUsCiAgICAgIGZhSXR1bmVzTm90ZSwKICAgICAgZmFMZXNzLAogICAgICBmYUZpcmVmb3gsCiAgICAgIGZhS2FnZ2xlLAogICAgICBmYUZhY2Vib29rTWVzc2VuZ2VyLAogICAgICBmYUF1ZGlibGUsCiAgICAgIGZhUGF0cmVvbiwKICAgICAgZmFWbnYsCiAgICAgIGZhUGFnZWxpbmVzLAogICAgICBmYUFtYXpvbiwKICAgICAgZmFFbnZpcmEsCiAgICAgIGZhTGlub2RlLAogICAgICBmYUFjY3Vzb2Z0LAogICAgICBmYUVybGFuZywKICAgICAgZmFDY0Rpc2NvdmVyLAogICAgICBmYVNhZmFyaSwKICAgICAgZmFTcGFjZUF3ZXNvbWUsCiAgICAgIGZhTm9kZSwKICAgICAgZmFDb2RlcGVuLAogICAgICBmYVJhdmVscnksCiAgICAgIGZhQWxpcGF5LAogICAgICBmYUNjQW1leCwKICAgICAgZmFQaWVkUGlwZXJBbHQsCiAgICAgIGZhTGV0dGVyYm94ZCwKICAgICAgZmFPcGVyYSwKICAgICAgZmFXZWlibywKICAgICAgZmFSZWFkbWUsCiAgICAgIGZhR29sYW5nLAogICAgICBmYVN0YWNrRXhjaGFuZ2UsCiAgICAgIGZhR3VscCwKICAgICAgZmFZZWxwLAogICAgICBmYUdvZm9yZSwKICAgICAgZmFBdmlhdG8sCiAgICAgIGZhUGFkbGV0LAogICAgICBmYUVkZ2VMZWdhY3ksCiAgICAgIGZhU3F1YXJlTGFzdGZtLAogICAgICBmYUxhc3RmbVNxdWFyZSwKICAgICAgZmFHb29kcmVhZHNHLAogICAgICBmYUNjTWFzdGVyY2FyZCwKICAgICAgZmFEaXNjb3Vyc2UsCiAgICAgIGZhQmxhY2tUaWUsCiAgICAgIGZhU3F1YXJlRmFjZWJvb2ssCiAgICAgIGZhRmFjZWJvb2tTcXVhcmUsCiAgICAgIGZhQmF0dGxlTmV0LAogICAgICBmYUJpbW9iamVjdAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXJlZ3VsYXItc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanMKdmFyIHByZWZpeDIsIGZhU3F1YXJlTWludXMsIGZhTWludXNTcXVhcmUsIGZhQ2FsZW5kYXJDaGVjaywgZmFGYWNlS2lzcywgZmFLaXNzLCBmYVBhc3RlLCBmYUZpbGVDbGlwYm9hcmQsIGZhSGFuZFBvaW50TGVmdCwgZmFGaWxlRXhjZWwsIGZhRW52ZWxvcGUsIGZhU3F1YXJlQ2FyZXREb3duLCBmYUNhcmV0U3F1YXJlRG93biwgZmFUcnVjaywgZmFCZWxsLCBmYU1lc3NhZ2UsIGZhQ29tbWVudEFsdCwgZmFGYWNlRGl6enksIGZhRGl6enksIGZhQ2FsZW5kYXJEYXlzLCBmYUNhbGVuZGFyQWx0LCBmYUhhbmRQb2ludFVwLCBmYUhhbmRMaXphcmQsIGZhU3F1YXJlRnVsbCwgZmFDaXJjbGVQYXVzZSwgZmFQYXVzZUNpcmNsZSwgZmFIYXJkRHJpdmUsIGZhSGRkLCBmYUZpbGVaaXBwZXIsIGZhRmlsZUFyY2hpdmUsIGZhRmxvcHB5RGlzaywgZmFTYXZlLCBmYUZhY2VHcmluVG9uZ3VlU3F1aW50LCBmYUdyaW5Ub25ndWVTcXVpbnQsIGZhQ2FtZXJhLCBmYUNhbWVyYUFsdCwgZmFGYWNlR3JpblN0YXJzLCBmYUdyaW5TdGFycywgZmFFeWUsIGZhRmFjZVNhZFRlYXIsIGZhU2FkVGVhciwgZmFTaGFyZUZyb21TcXVhcmUsIGZhU2hhcmVTcXVhcmUsIGZhTm90ZVN0aWNreSwgZmFTdGlja3lOb3RlLCBmYUhhbmRCYWNrRmlzdCwgZmFIYW5kUm9jaywgZmFDaGVzc1F1ZWVuLCBmYUZhY2VHcmluVGVhcnMsIGZhR3JpblRlYXJzLCBmYVBlblRvU3F1YXJlLCBmYUVkaXQsIGZhRmFjZUdyaW5CZWFtU3dlYXQsIGZhR3JpbkJlYW1Td2VhdCwgZmFDbG9jaywgZmFDbG9ja0ZvdXIsIGZhRmFjZUxhdWdoV2luaywgZmFMYXVnaFdpbmssIGZhUGFwZXJQbGFuZSwgZmFIZWFydCwgZmFGb250QXdlc29tZTIsIGZhRm9udEF3ZXNvbWVGbGFnMiwgZmFGb250QXdlc29tZUxvZ29GdWxsMiwgZmFDbG9uZSwgZmFGb2xkZXJPcGVuLCBmYVdpbmRvd01pbmltaXplLCBmYVN0YXJIYWxmLCBmYUFsYXJtQ2xvY2ssIGZhTmV3c3BhcGVyLCBmYUhvc3BpdGFsLCBmYUhvc3BpdGFsQWx0LCBmYUhvc3BpdGFsV2lkZSwgZmFDaXJjbGVTdG9wLCBmYVN0b3BDaXJjbGUsIGZhT2JqZWN0VW5ncm91cCwgZmFDb21tZW50LCBmYUNoZXNzUGF3biwgZmFDYWxlbmRhclBsdXMsIGZhQ2xpcGJvYXJkLCBmYVRodW1ic0Rvd24sIGZhSWRCYWRnZSwgZmFTcXVhcmVDaGVjaywgZmFDaGVja1NxdWFyZSwgZmFDaGVzc0Jpc2hvcCwgZmFFbnZlbG9wZU9wZW4sIGZhQ2lyY2xlWG1hcmssIGZhVGltZXNDaXJjbGUsIGZhWG1hcmtDaXJjbGUsIGZhU3F1YXJlQ2FyZXRVcCwgZmFDYXJldFNxdWFyZVVwLCBmYUZpbGVJbWFnZSwgZmFTcXVhcmVDYXJldFJpZ2h0LCBmYUNhcmV0U3F1YXJlUmlnaHQsIGZhU3VuLCBmYUltYWdlLCBmYUxpZ2h0YnVsYiwgZmFBZGRyZXNzQ2FyZCwgZmFDb250YWN0Q2FyZCwgZmFWY2FyZCwgZmFGYWNlTWVoLCBmYU1laCwgZmFNYXAsIGZhSGFuZFBvaW50RG93biwgZmFGYWNlTWVoQmxhbmssIGZhTWVoQmxhbmssIGZhRmFjZUdyaW5Ub25ndWUsIGZhR3JpblRvbmd1ZSwgZmFGdXRib2wsIGZhRnV0Ym9sQmFsbCwgZmFTb2NjZXJCYWxsLCBmYUZhY2VTdXJwcmlzZSwgZmFTdXJwcmlzZSwgZmFGb2xkZXIsIGZhRm9sZGVyQmxhbmssIGZhQ2xvdWQsIGZhQ2lyY2xlLCBmYUZhY2VHcmluU3F1aW50LCBmYUdyaW5TcXVpbnQsIGZhQ2lyY2xlVXNlciwgZmFVc2VyQ2lyY2xlLCBmYVJlY3RhbmdsZUxpc3QsIGZhTGlzdEFsdCwgZmFIYW5kLCBmYUhhbmRQYXBlciwgZmFUaHVtYnNVcCwgZmFCdWlsZGluZywgZmFDaGVzc1Jvb2ssIGZhQ2lyY2xlUXVlc3Rpb24sIGZhUXVlc3Rpb25DaXJjbGUsIGZhRmlsZSwgZmFGYWNlU2FkQ3J5LCBmYVNhZENyeSwgZmFDYWxlbmRhck1pbnVzLCBmYUZhY2VUaXJlZCwgZmFUaXJlZCwgZmFIYW5kUG9pbnRSaWdodCwgZmFDaXJjbGVVcCwgZmFBcnJvd0FsdENpcmNsZVVwLCBmYUhhbmRTY2lzc29ycywgZmFHZW0sIGZhUmVjdGFuZ2xlWG1hcmssIGZhUmVjdGFuZ2xlVGltZXMsIGZhVGltZXNSZWN0YW5nbGUsIGZhV2luZG93Q2xvc2UsIGZhVHJhc2hDYW4sIGZhVHJhc2hBbHQsIGZhTGlmZVJpbmcsIGZhQ29weXJpZ2h0LCBmYUNpcmNsZUxlZnQsIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LCBmYUNhbGVuZGFyLCBmYUZhY2VGcm93bk9wZW4sIGZhRnJvd25PcGVuLCBmYUNoYXJ0QmFyLCBmYUJhckNoYXJ0LCBmYUhvdXNlLCBmYUhvbWUsIGZhSG9tZUFsdCwgZmFIb21lTGdBbHQsIGZhRmFjZUZyb3duLCBmYUZyb3duLCBmYVVzZXIsIGZhVXNlckFsdCwgZmFVc2VyTGFyZ2UsIGZhU25vd2ZsYWtlLCBmYUJvb2ttYXJrLCBmYVNxdWFyZUNhcmV0TGVmdCwgZmFDYXJldFNxdWFyZUxlZnQsIGZhSGFuZHNoYWtlLCBmYUhhbmRzaGFrZUFsdCwgZmFIYW5kc2hha2VTaW1wbGUsIGZhRmFjZVNtaWxlV2luaywgZmFTbWlsZVdpbmssIGZhRmFjZUdyaW5TcXVpbnRUZWFycywgZmFHcmluU3F1aW50VGVhcnMsIGZhRmlsZUF1ZGlvLCBmYUNhbGVuZGFyWG1hcmssIGZhQ2FsZW5kYXJUaW1lcywgZmFDaXJjbGVEb3duLCBmYUFycm93QWx0Q2lyY2xlRG93biwgZmFGaWxlTGluZXMsIGZhRmlsZUFsdCwgZmFGaWxlVGV4dCwgZmFDb21tZW50cywgZmFDaXJjbGVDaGVjaywgZmFDaGVja0NpcmNsZSwgZmFNb29uLCBmYUNsb3NlZENhcHRpb25pbmcsIGZhSW1hZ2VzLCBmYUNpcmNsZVJpZ2h0LCBmYUFycm93QWx0Q2lyY2xlUmlnaHQsIGZhSWRDYXJkLCBmYURyaXZlcnNMaWNlbnNlLCBmYUNpcmNsZVBsYXksIGZhUGxheUNpcmNsZSwgZmFGYWNlTGF1Z2hCZWFtLCBmYUxhdWdoQmVhbSwgZmFBZGRyZXNzQm9vaywgZmFDb250YWN0Qm9vaywgZmFIb3VyZ2xhc3MsIGZhSG91cmdsYXNzRW1wdHksIGZhSGVhZHBob25lcywgZmFIZWFkcGhvbmVzQWx0LCBmYUhlYWRwaG9uZXNTaW1wbGUsIGZhRmlsZVBvd2VycG9pbnQsIGZhV2luZG93TWF4aW1pemUsIGZhQ29tbWVudERvdHMsIGZhQ29tbWVudGluZywgZmFGYWNlR3JpblRvbmd1ZVdpbmssIGZhR3JpblRvbmd1ZVdpbmssIGZhSG91cmdsYXNzSGFsZiwgZmFIb3VyZ2xhc3MyLCBmYUNyZWRpdENhcmQsIGZhQ3JlZGl0Q2FyZEFsdCwgZmFIYW5kU3BvY2ssIGZhQmVsbFNsYXNoLCBmYVN0YXIsIGZhRmxhZywgZmFMZW1vbiwgZmFXaW5kb3dSZXN0b3JlLCBmYUZhY2VHcmluSGVhcnRzLCBmYUdyaW5IZWFydHMsIGZhRmFjZUtpc3NCZWFtLCBmYUtpc3NCZWFtLCBmYUZpbGVQZGYsIGZhRmFjZUdyaW5XaWRlLCBmYUdyaW5BbHQsIGZhRmFjZUxhdWdoU3F1aW50LCBmYUxhdWdoU3F1aW50LCBmYUZhY2VLaXNzV2lua0hlYXJ0LCBmYUtpc3NXaW5rSGVhcnQsIGZhQ29weSwgZmFDaGVzc0tpbmcsIGZhU3F1YXJlUGx1cywgZmFQbHVzU3F1YXJlLCBmYUZpbGVDb2RlLCBmYUZhY2VHcmluV2luaywgZmFHcmluV2luaywgZmFNb25leUJpbGwxLCBmYU1vbmV5QmlsbEFsdCwgZmFFeWVTbGFzaCwgZmFGaWxlV29yZCwgZmFGYWNlQW5ncnksIGZhQW5ncnksIGZhQ2hlc3NLbmlnaHQsIGZhRmFjZUdyaW5CZWFtLCBmYUdyaW5CZWFtLCBmYUhhbmRQZWFjZSwgZmFDb21wYXNzLCBmYVNxdWFyZSwgZmFGYWNlR3JpbiwgZmFHcmluLCBmYUZhY2VTbWlsZSwgZmFTbWlsZSwgZmFGYWNlU21pbGVCZWFtLCBmYVNtaWxlQmVhbSwgZmFGb2xkZXJDbG9zZWQsIGZhS2V5Ym9hcmQsIGZhRmFjZVJvbGxpbmdFeWVzLCBmYU1laFJvbGxpbmdFeWVzLCBmYUZhY2VHcmltYWNlLCBmYUdyaW1hY2UsIGZhQ2lyY2xlRG90LCBmYURvdENpcmNsZSwgZmFPYmplY3RHcm91cCwgZmFGYWNlRmx1c2hlZCwgZmFGbHVzaGVkLCBmYVN0YXJIYWxmU3Ryb2tlLCBmYVN0YXJIYWxmQWx0LCBmYUZpbGVWaWRlbywgZmFGYWNlTGF1Z2gsIGZhTGF1Z2gsIGZhSGFuZFBvaW50ZXIsIGZhUmVnaXN0ZXJlZCwgaWNvbnMyOwp2YXIgaW5pdF9mcmVlX3JlZ3VsYXJfc3ZnX2ljb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtcmVndWxhci1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4Lm1qcyIoKSB7CiAgICBwcmVmaXgyID0gImZhciI7CiAgICBmYVNxdWFyZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCAibWludXMtc3F1YXJlIl0sICJmMTQ2IiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTM2IDIzMmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzU3F1YXJlID0gZmFTcXVhcmVNaW51czsKICAgIGZhQ2FsZW5kYXJDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjc0IiwgIk0zMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnptMjMwLjcgNjUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM3NC4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhRmFjZUtpc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM1LCAia2lzcyJdLCAiZjU5NiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tOTYtNDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhS2lzcyA9IGZhRmFjZUtpc3M7CiAgICBmYVBhc3RlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInBhc3RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpbGUtY2xpcGJvYXJkIl0sICJmMGVhIiwgIk02NCA0OGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTEyIDAgMC00OC0xMTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnptMTc2IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDEwNCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDUuNiAwYzguOC04LjYgMTktMTUuOCAzMC4yLTIxLjEgLjEtLjkgLjItMS45IC4yLTIuOXpNNDQ4IDQ2NGwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsMTAxLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0NjQgNDQ4YzAgOC44LTcuMiAxNi0xNiAxNnpNMjI0IDIyNGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6Il0KICAgIH07CiAgICBmYUZpbGVDbGlwYm9hcmQgPSBmYVBhc3RlOwogICAgZmFIYW5kUG9pbnRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE1IiwgIk02NCAxMjhsMTc3LjYgMGMtMSA1LjItMS42IDEwLjUtMS42IDE2bDAgMTYtMTc2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTIyNCAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwbDAgNDhjMCA1Mi41LTMzLjcgOTcuMS04MC43IDExMy40IC41LTMuMSAuNy02LjIgLjctOS40IDAtMjAtOS4yLTM3LjktMjMuNi00OS43IDQuOS05IDcuNi0xOS40IDcuNi0zMC4zIDAtMTUuMS01LjMtMjktMTQtNDAgOC44LTExIDE0LTI0LjkgMTQtNDBsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODB6bTMyLTgwbDAgMGMtMTggMC0zNC42IDYtNDggMTZMNjQgODBDMjguNyA4MCAwIDEwOC43IDAgMTQ0czI4LjcgNjQgNjQgNjRsODIgMGMtMS4zIDUuMS0yIDEwLjUtMiAxNiAwIDI1LjMgMTQuNyA0Ny4yIDM2IDU3LjYtMi42IDctNCAxNC41LTQgMjIuNCAwIDIwIDkuMiAzNy45IDIzLjYgNDkuNy00LjkgOS03LjYgMTkuNC03LjYgMzAuMyAwIDM1LjMgMjguNyA2NCA2NCA2NGw4OCAwYzkyLjggMCAxNjgtNzUuMiAxNjgtMTY4bDAtNDhjMC05Mi44LTc1LjItMTY4LTE2OC0xNjhsLTI0IDB6TTI1NiA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMHpNMjQwIDIyNGMwIDUuNSAuNyAxMC45IDIgMTZsLTM0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMzIgMCAwIDE2em0yNCA2NGw0MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI0IDB6Il0KICAgIH07CiAgICBmYUZpbGVFeGNlbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4Y2VsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzMiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTk5LjIgMjY1LjZjLTgtMTAuNi0yMy0xMi44LTMzLjYtNC44cy0xMi44IDIzLTQuOCAzMy42TDE2MiAzNDQgMTI0LjggMzkzLjZjLTggMTAuNi01LjggMjUuNiA0LjggMzMuNnMyNS42IDUuOCAzMy42LTQuOEwxOTIgMzg0IDIyMC44IDQyMi40YzggMTAuNiAyMyAxMi44IDMzLjYgNC44czEyLjgtMjMgNC44LTMzLjZMMjIyIDM0NCAyNTkuMiAyOTQuNGM4LTEwLjYgNS44LTI1LjYtNC44LTMzLjZzLTI1LjYtNS44LTMzLjYgNC44TDE5MiAzMDQgMTYzLjIgMjY1LjZ6Il0KICAgIH07CiAgICBmYUVudmVsb3BlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzg2LCA5OTkzLCA2MTQ0M10sICJmMGUwIiwgIk02MS40IDY0QzI3LjUgNjQgMCA5MS41IDAgMTI1LjQgMCAxMjYuMyAwIDEyNy4xIC4xIDEyOEwwIDEyOCAwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1Ni0uMSAwYzAtLjkgLjEtMS43IC4xLTIuNiAwLTMzLjktMjcuNS02MS40LTYxLjQtNjEuNEw2MS40IDY0ek00NjQgMTkyLjNMNDY0IDM4NGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xOTEuNyAxNTQuOCAxMTcuNGMzMS40IDIzLjkgNzQuOSAyMy45IDEwNi40IDBMNDY0IDE5Mi4zek00OCAxMjUuNEM0OCAxMTggNTQgMTEyIDYxLjQgMTEybDM4OS4yIDBjNy40IDAgMTMuNCA2IDEzLjQgMTMuNCAwIDQuMi0yIDguMi01LjMgMTAuN0wyODAuMiAyNzEuNWMtMTQuMyAxMC44LTM0LjEgMTAuOC00OC40IDBMNTMuMyAxMzYuMWMtMy4zLTIuNS01LjMtNi41LTUuMy0xMC43eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldERvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWRvd24iXSwgImYxNTAiLCAiTTM4NCA0MzJjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMHptNjQtMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlRG93biA9IGZhU3F1YXJlQ2FyZXREb3duOwogICAgZmFUcnVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2NiwgOTk1MV0sICJmMGQxIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzLjMgMGMxMC40LTM2LjkgNDQuNC02NCA4NC43LTY0czc0LjIgMjcuMSA4NC43IDY0bDEwMi42IDBjNC45LTE3LjQgMTUuMS0zMi43IDI4LjctNDMuOUwzNjggOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwem0zLjMgMzY4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyIDU1LjQgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2w0MC42IDQwLjZjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w1NzYgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zLjMgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTEwMi42IDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0ek00MTYgMjU2bDExMiAwIDAtMjMuNGMwLTQuMi0xLjctOC4zLTQuNy0xMS4zbC00MC42LTQwLjZjLTMtMy03LjEtNC43LTExLjMtNC43bC01NS40IDAgMCA4MHptMCA0OGwwIDMyLjRjMi42LS4yIDUuMy0uNCA4LS40IDQwLjMgMCA3NC4yIDI3LjEgODQuNyA2NGwzLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC04MC0xMTIgMHpNMTUyIDQ2NGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTI3MiAwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhQmVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc2LCA2MTYwMl0sICJmMGYzIiwgIk0yMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5LjdDMTE4LjYgNDUuMyA1NiAxMTUuNCA1NiAyMDBsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDUuMSAzNTkuMkMxLjggMzY1IDAgMzcxLjUgMCAzNzguMiAwIDM5OS4xIDE2LjkgNDE2IDM3LjggNDE2bDM3Mi40IDBjMjAuOSAwIDM3LjgtMTYuOSAzNy44LTM3LjggMC02LjctMS44LTEzLjMtNS4xLTE5TDQyMSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTM5Mi40IDM2OGwtMzM2LjkgMCAxMi45LTIyLjFDOTEuNyAzMDYgMTA0IDI2MC42IDEwNCAyMTQuNWwwLTE0LjVjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBzMTIwIDUzLjcgMTIwIDEyMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40TDM5Mi40IDM2OHpNMTU2LjEgNDY0YzkuOSAyOCAzNi42IDQ4IDY3LjkgNDhzNTgtMjAgNjcuOS00OGwtMTM1LjggMHoiXQogICAgfTsKICAgIGZhTWVzc2FnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtZXNzYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbW1lbnQtYWx0Il0sICJmMjdhIiwgIk0yMDMuNyA1MTIuOXMwIDAgMCAwbC0zNy44IDI2LjdjLTcuMyA1LjItMTYuOSA1LjgtMjQuOSAxLjdTMTI4IDUyOSAxMjggNTIwbDAtNzItMzIgMGMtNTMgMC05Ni00My05Ni05NkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDMyMCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5NmwtMTIwLjQgMC05MS45IDY0Ljl6bTY0LjMtMTA0LjFjOC4xLTUuNyAxNy44LTguOCAyNy43LTguOEw0MTYgNDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDgwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDIyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw1NiAwYzEwLjQgMCAxOS4zIDYuNiAyMi42IDE1LjkgLjkgMi41IDEuNCA1LjIgMS40IDguMWwwIDQ5LjdjMzIuNy0yMy4xIDYzLjMtNDQuNyA5MS45LTY0Ljl6Il0KICAgIH07CiAgICBmYUNvbW1lbnRBbHQgPSBmYU1lc3NhZ2U7CiAgICBmYUZhY2VEaXp6eSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWRpenp5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpenp5Il0sICJmNTY3IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTEzNC4xIDE1My45bDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwem0xOTIgMGwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHpNMjU2IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhRGl6enkgPSBmYUZhY2VEaXp6eTsKICAgIGZhQ2FsZW5kYXJEYXlzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLWRheXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FsZW5kYXItYWx0Il0sICJmMDczIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTM4NCA0MzJjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQtODggMCAwIDgwIDcyIDB6bTE2LTEyOGwwLTgwLTg4IDAgMCA4MCA4OCAwem0tMTM2IDBsMC04MC04MCAwIDAgODAgODAgMHptLTEyOCAwbDAtODAtODggMCAwIDgwIDg4IDB6TTQ4IDM1MmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw3MiAwIDAtODAtODggMHptMTM2IDBsMCA4MCA4MCAwIDAtODAtODAgMHpNMTIwIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAweiJdCiAgICB9OwogICAgZmFDYWxlbmRhckFsdCA9IGZhQ2FsZW5kYXJEYXlzOwogICAgZmFIYW5kUG9pbnRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc1N10sICJmMGE2IiwgIk02NCA2NGwwIDE3Ny42YzUuMi0xIDEwLjUtMS42IDE2LTEuNmwxNiAwIDAtMTc2YzAtOC44LTcuMi0xNi0xNi0xNlM2NCA1NS4yIDY0IDY0ek04MCAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjRjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjBsNDggMGM1Mi41IDAgOTcuMS0zMy43IDExMy40LTgwLjctMy4xIC41LTYuMiAuNy05LjQgLjctMjAgMC0zNy45LTkuMi00OS43LTIzLjYtOSA0LjktMTkuNCA3LjYtMzAuMyA3LjYtMTUuMSAwLTI5LTUuMy00MC0xNC0xMSA4LjgtMjQuOSAxNC00MCAxNGwtNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0MCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC04MCAwek0wIDMyMGwwIDBjMC0xOCA2LTM0LjYgMTYtNDhMMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMHM2NCAyOC43IDY0IDY0bDAgODJjNS4xLTEuMyAxMC41LTIgMTYtMiAyNS4zIDAgNDcuMiAxNC43IDU3LjYgMzYgNy0yLjYgMTQuNS00IDIyLjQtNCAyMCAwIDM3LjkgOS4yIDQ5LjcgMjMuNiA5LTQuOSAxOS40LTcuNiAzMC4zLTcuNiAzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDg4YzAgOTIuOC03NS4yIDE2OC0xNjggMTY4bC00OCAwQzc1LjIgNTEyIDAgNDM2LjggMCAzNDRsMC0yNHptMzM2LTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek0xNjAgMjQwYzUuNSAwIDEwLjkgLjcgMTYgMmwwLTM0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMzIgMTYgMHptNjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyNHoiXQogICAgfTsKICAgIGZhSGFuZExpemFyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWxpemFyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU4IiwgIk03MiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTY4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwYzQuNSAwIDguOSAxLjMgMTIuNyAzLjZsNjQgNDBjNyA0LjQgMTEuMyAxMi4xIDExLjMgMjAuNGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAuNy00Ni45LTI5LjMtMTQ1LjEgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmwxMDQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkw3MiAyMDhjLTM5LjggMC03Mi0zMi4yLTcyLTcyUzMyLjIgNjQgNzIgNjRsMjA5LjYgMGM0Ni43IDAgOTAuOSAyMS41IDExOS43IDU4LjNsNzguNCAxMDAuMWMyMC45IDI2LjcgMzIuMyA1OS43IDMyLjMgOTMuN0w1MTIgNDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA3LjljMC0yMy4yLTcuOC00NS44LTIyLjEtNjQuMUwzNjMuNSAxNTEuOWMtMTkuNy0yNS4yLTQ5LjktMzkuOS04MS45LTM5LjlMNzIgMTEyeiJdCiAgICB9OwogICAgZmFTcXVhcmVGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mdWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4OTk3LCAxMjg5OTgsIDEyODk5OSwgMTI5ZTMsIDEyOTAwMSwgMTI5MDAyLCAxMjkwMDMsIDExMDM1LCAxMTAzNl0sICJmNDVjIiwgIk00NDggNDhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVBhdXNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wYXVzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDkyLCAicGF1c2UtY2lyY2xlIl0sICJmMjhiIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHptMTEyIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHoiXQogICAgfTsKICAgIGZhUGF1c2VDaXJjbGUgPSBmYUNpcmNsZVBhdXNlOwogICAgZmFIYXJkRHJpdmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFyZC1kcml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQzNiwgImhkZCJdLCAiZjBhMCIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2MmM1LjEtMS4zIDEwLjUtMiAxNi0ybDMyMCAwYzUuNSAwIDEwLjkgLjcgMTYgMmwwLTE2MmMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTQ4IDMyMGwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMzA0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTAgMzIwTDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2em0yMTYgNDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhSGRkID0gZmFIYXJkRHJpdmU7CiAgICBmYUZpbGVaaXBwZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS16aXBwZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1hcmNoaXZlIl0sICJmMWM2IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTY0IDU2bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTE2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhRmlsZUFyY2hpdmUgPSBmYUZpbGVaaXBwZXI7CiAgICBmYUZsb3BweURpc2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmxvcHB5LWRpc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTAsIDEyODQyNiwgInNhdmUiXSwgImYwYzciLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0Mi43YzAtNC4yLTEuNy04LjMtNC43LTExLjNMMzIwIDg2LjYgMzIwIDE3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHptODAgMGwwIDgwIDEyOCAwIDAtODAtMTI4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjQyLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjhjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDMyMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYVNhdmUgPSBmYUZsb3BweURpc2s7CiAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQxLCAiZ3Jpbi10b25ndWUtc3F1aW50Il0sICJmNThhIiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA3NS45IDQwLjcgMTQyLjQgMTAxLjUgMTc4LjctMy42LTEwLjktNS41LTIyLjYtNS41LTM0LjdsMC0zNy41Yy0xMC4yLTEyLjYtMTguMy0yNi45LTIzLjgtNDIuNC00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTUuNSAxNS42LTEzLjYgMjkuOS0yMy44IDQyLjVsMCAzNy41YzAgMTIuMS0xLjkgMjMuOC01LjUgMzQuNyA2MC44LTM2LjMgMTAxLjUtMTAyLjcgMTAxLjUtMTc4Ljd6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTEyNS44LTc1LjdjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjFzMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zem0yNjMuNi0yMS4xYzQuNSA2LjggMy4xIDE1LjktMy4xIDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXpNMzIwIDQxNmwwLTM3LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCAzNy40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVTcXVpbnQgPSBmYUZhY2VHcmluVG9uZ3VlU3F1aW50OwogICAgZmFDYW1lcmEgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIyNTgsICJjYW1lcmEtYWx0Il0sICJmMDMwIiwgIk0xOTMuMSAzMmMtMTguNyAwLTM2LjIgOS40LTQ2LjYgMjQuOUwxMjAuNSA5NiA2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTU2LjUgMC0yNi0zOS4xQzM1NS4xIDQxLjQgMzM3LjYgMzIgMzE4LjkgMzJMMTkzLjEgMzJ6bS02LjcgNTEuNmMxLjUtMi4yIDQtMy42IDYuNy0zLjZsMTI1LjcgMGMyLjcgMCA1LjIgMS4zIDYuNyAzLjZsMzMuMiA0OS44YzQuNSA2LjcgMTEuOSAxMC43IDIwIDEwLjdsNjkuMyAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDY5LjMgMGM4IDAgMTUuNS00IDIwLTEwLjdsMzMuMi00OS44ek0yNTYgMzg0YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHpNMTkyIDI3MmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYUNhbWVyYUFsdCA9IGZhQ2FtZXJhOwogICAgZmFGYWNlR3JpblN0YXJzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1zdGFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMyMSwgImdyaW4tc3RhcnMiXSwgImY1ODciLCAiTTAgMjU2YzAtMjkuNiA1LTU3LjkgMTQuMi04NC40bDE3LjMgMTYuOS00LjYgMjdjLTQuMiAyNC40IDUuNiA0Ni4yIDIyIDU5LjkgOS44IDEwNS44IDk4LjggMTg4LjcgMjA3LjEgMTg4LjdzMTk3LjQtODIuOCAyMDcuMS0xODguNmMxNi40LTEzLjcgMjYuMS0zNS40IDIyLTU5LjlsLTQuNi0yNyAxNy4zLTE2LjljOS4yIDI2LjQgMTQuMiA1NC44IDE0LjIgODQuNCAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZ6TTI1NiA0OGMtMTUuMiAwLTMwIDEuNi00NC4zIDQuN0wyMDEuNCAzMS44QzE5NyAyMyAxOTEuMSAxNS44IDE4NC4yIDEwLjIgMjA3IDMuNiAyMzEuMSAwIDI1NiAwczQ5IDMuNiA3MS44IDEwLjJDMzIwLjkgMTUuOCAzMTUgMjMgMzEwLjYgMzEuOEwzMDAuMyA1Mi43QzI4NiA0OS42IDI3MS4yIDQ4IDI1NiA0OHpNMzcyLjIgMzAyLjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTM1My43IDUzLjFjNS45LTExLjkgMjIuOC0xMS45IDI4LjcgMGwyMy4zIDQ3LjIgNTIgNy42YzEzLjEgMS45IDE4LjQgMTggOC45IDI3LjNsLTM3LjcgMzYuNyA4LjkgNTEuOGMyLjIgMTMuMS0xMS41IDIzLTIzLjIgMTYuOUwzNjggMjE2IDMyMS41IDI0MC41Yy0xMS43IDYuMi0yNS41LTMuOC0yMy4yLTE2LjlsOC45LTUxLjgtMzcuNy0zNi43Yy05LjUtOS4zLTQuMy0yNS40IDguOS0yNy4zbDUyLTcuNiAyMy4zLTQ3LjJ6bS0xOTUuMyAwbDIzLjMgNDcuMiA1MiA3LjZjMTMuMSAxLjkgMTguNCAxOCA4LjkgMjcuM2wtMzcuNyAzNi43IDguOSA1MS44YzIuMiAxMy4xLTExLjUgMjMtMjMuMiAxNi45TDE0NCAyMTYgOTcuNSAyNDAuNWMtMTEuNyA2LjItMjUuNS0zLjgtMjMuMi0xNi45bDguOS01MS44LTM3LjctMzYuN2MtOS41LTkuMy00LjMtMjUuNCA4LjktMjcuM2w1Mi03LjYgMjMuMy00Ny4yYzUuOS0xMS45IDIyLjgtMTEuOSAyOC43IDB6Il0KICAgIH07CiAgICBmYUdyaW5TdGFycyA9IGZhRmFjZUdyaW5TdGFyczsKICAgIGZhRXllID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA2NV0sICJmMDZlIiwgIk0yODggODBDMjIyLjggODAgMTY5LjIgMTA5LjYgMTI4LjEgMTQ3LjcgODkuNiAxODMuNSA2MyAyMjYgNDkuNCAyNTYgNjMgMjg2IDg5LjYgMzI4LjUgMTI4LjEgMzY0LjMgMTY5LjIgNDAyLjQgMjIyLjggNDMyIDI4OCA0MzJzMTE4LjgtMjkuNiAxNTkuOS02Ny43QzQ4Ni40IDMyOC41IDUxMyAyODYgNTI2LjYgMjU2IDUxMyAyMjYgNDg2LjQgMTgzLjUgNDQ3LjkgMTQ3LjcgNDA2LjggMTA5LjYgMzUzLjIgODAgMjg4IDgwek05NS40IDExMi42QzE0Mi41IDY4LjggMjA3LjIgMzIgMjg4IDMyczE0NS41IDM2LjggMTkyLjYgODAuNmM0Ni44IDQzLjUgNzguMSA5NS40IDkzIDEzMS4xIDMuMyA3LjkgMy4zIDE2LjcgMCAyNC42LTE0LjkgMzUuNy00Ni4yIDg3LjctOTMgMTMxLjEtNDcuMSA0My43LTExMS44IDgwLjYtMTkyLjYgODAuNlMxNDIuNSA0NDMuMiA5NS40IDM5OS40Yy00Ni44LTQzLjUtNzguMS05NS40LTkzLTEzMS4xLTMuMy03LjktMy4zLTE2LjcgMC0yNC42IDE0LjktMzUuNyA0Ni4yLTg3LjcgOTMtMTMxLjF6TTI4OCAzMzZjNDQuMiAwIDgwLTM1LjggODAtODAgMC0yOS42LTE2LjEtNTUuNS00MC02OS4zLTEuNCA1OS43LTQ5LjYgMTA3LjktMTA5LjMgMTA5LjMgMTMuOCAyMy45IDM5LjcgNDAgNjkuMyA0MHptLTc5LjYtODguNGMyLjUgLjMgNSAuNCA3LjYgLjQgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yLjYtLjItNS4xLS40LTcuNi0zNy40IDMuOS02Ny4yIDMzLjctNzEuMSA3MS4xem00NS42LTExNWMxMC44LTMgMjIuMi00LjUgMzMuOS00LjUgOC44IDAgMTcuNSAuOSAyNS44IDIuNiAuMyAuMSAuNSAuMSAuOCAuMiA1Ny45IDEyLjIgMTAxLjQgNjMuNyAxMDEuNCAxMjUuMiAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOC02MS42IDAtMTEzLTQzLjUtMTI1LjItMTAxLjQtMS44LTguNi0yLjgtMTcuNS0yLjgtMjYuNiAwLTExIDEuNC0yMS44IDQtMzIgLjItLjcgLjMtMS4zIC41LTEuOSAxMS45LTQzLjQgNDYuMS03Ny42IDg5LjUtODkuNXoiXQogICAgfTsKICAgIGZhRmFjZVNhZFRlYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtdGVhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgInNhZC10ZWFyIl0sICJmNWI0IiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA0MS44IDEyLjMgODAuNyAzMy42IDExMy4zIDguMiA0NC43IDQ3LjMgNzguNiA5NC4zIDc4LjcgMjQuNyAxMC4zIDUxLjcgMTYgODAuMSAxNiAxMTQuOSAwIDIwOC05My4xIDIwOC0yMDh6TTI4OCAzNTJjLTUuNSAwLTEwLjkgLjYtMTYgMS44IDAtLjYgMC0xLjIgMC0xLjggMC0xNi4yLTQtMzEuNS0xMS4xLTQ0LjkgOC43LTIgMTcuOC0zLjEgMjcuMS0zLjEgNDAuMiAwIDc1LjcgMTkuOCA5Ny41IDUwIDcuNyAxMC44IDUuMyAyNS44LTUuNSAzMy41cy0yNS44IDUuMy0zMy41LTUuNWMtMTMuMS0xOC4yLTM0LjQtMzAtNTguNS0zMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4NS40IDI3Ni44YzYuNSA3LjggMTIuNiAxNi4xIDE4LjMgMjQuNiA5IDEzLjQgMjAuMyAzMC4yIDIwLjMgNDcuNCAwIDI4LjMtMjEuNSA1MS4yLTQ4IDUxLjJzLTQ4LTIyLjktNDgtNTEuMmMwLTE3LjIgMTEuMi0zNCAyMC4zLTQ3LjQgNS43LTguNSAxMS45LTE2LjcgMTguMy0yNC42IDIuNC0yLjkgNS43LTQuOCA5LjQtNC44czcgMS45IDkuNCA0Ljh6Il0KICAgIH07CiAgICBmYVNhZFRlYXIgPSBmYUZhY2VTYWRUZWFyOwogICAgZmFTaGFyZUZyb21TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgInNoYXJlLXNxdWFyZSJdLCAiZjE0ZCIsICJNNDI1LjUgN2MtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzODQuNSAxNC4zIDM4NC41IDI0bDAgNTYtNDggMGMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCA0Ni43IDIwLjcgODAuNCA0My42IDEwMy40IDguMSA4LjIgMTYuNSAxNC45IDI0LjMgMjAuNCA5LjIgNi41IDIxLjcgNS43IDMwLjEtMS45czEwLjItMjAgNC41LTI5LjhjLTMuNi02LjMtNi41LTE0LjktNi41LTI2LjcgMC0zNi4yIDI5LjMtNjUuNSA2NS41LTY1LjVsNDYuNSAwIDAgNTZjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDEzNi0xMzZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDI1LjUgN3ptNyA5N2wwLTIyLjEgNzguMSA3OC4xLTc4LjEgNzguMSAwLTIyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRMMzM4IDE5MmMtNTAuOSAwLTkzLjkgMzMuNS0xMDguMyA3OS42LTMuMy05LjQtNS4yLTE5LjgtNS4yLTMxLjYgMC02MS45IDUwLjEtMTEyIDExMi0xMTJsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHptLTMyMC04Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNCAweiJdCiAgICB9OwogICAgZmFTaGFyZVNxdWFyZSA9IGZhU2hhcmVGcm9tU3F1YXJlOwogICAgZmFOb3RlU3RpY2t5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm5vdGUtc3RpY2t5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjIwMjYsICJzdGlja3ktbm90ZSJdLCAiZjI0OSIsICJNMjQwIDQzMkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTc2LTg4IDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgODh6TTM4MC4xIDMyMEwyODggNDEyLjEgMjg4IDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw2OC4xIDB6TTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDI5LjMgMzM4LjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w0NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnoiXQogICAgfTsKICAgIGZhU3RpY2t5Tm90ZSA9IGZhTm90ZVN0aWNreTsKICAgIGZhSGFuZEJhY2tGaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtYmFjay1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhhbmQtcm9jayJdLCAiZjI1NSIsICJNOTYgNDAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgNDAwek03My4yIDM1Mmw2NC42IDAtNzkuNS04OC4zQzUxLjcgMjU2LjMgNDggMjQ2LjggNDggMjM2LjlMNDggMjA0YzAtMTYuMSAxMS45LTI5LjUgMjcuNC0zMS43IDExLjgtMS43IDIwLjYtMTEuOCAyMC42LTIzLjhMOTYgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjQgNy4yIDAgMTMuNiAzLjEgMTggOC4xIDQuNiA1LjIgMTEuMSA4LjEgMTggOC4xczEzLjQtMyAxOC04LjFjNC40LTUgMTAuOC04LjEgMTgtOC4xIDguNSAwIDE1LjkgNC40IDIwLjIgMTEuMSA2LjkgMTAuNyAyMC45IDE0LjIgMzIgOCAzLjUtMS45IDcuNC0zLjEgMTEuOC0zLjEgMTAuNiAwIDE5LjcgNi45IDIyLjggMTYuNiAzLjggMTEuNyAxNS45IDE4LjcgMjggMTYgMS43LS40IDMuNC0uNiA1LjItLjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA5Mi4yYzAgMTQuNC0zLjUgMjguNS0xMC4yIDQxLjJsLTUyLjIgOTguNiA1NC4zIDAgNDAuMy03Ni4yYzEwLjQtMTkuNiAxNS44LTQxLjUgMTUuOC02My42bDAtOTIuMmMwLTM4LjQtMzAuMS02OS44LTY4LjEtNzEuOS0xMi45LTE5LjMtMzQuOS0zMi4xLTU5LjktMzIuMS01LjcgMC0xMS4yIC43LTE2LjUgMS45LTEyLjctMTEuMS0yOS4zLTE3LjktNDcuNS0xNy45LTEzLjEgMC0yNS40IDMuNS0zNiA5LjYtMTAuNi02LjEtMjIuOS05LjYtMzYtOS42LTM5LjggMC03MiAzMi4yLTcyIDcybDAgNTguN0MxOS43IDE0MyAwIDE3MS4yIDAgMjA0bDAgMzIuOWMwIDIxLjcgOCA0Mi43IDIyLjYgNTguOUw3My4yIDM1MnoiXQogICAgfTsKICAgIGZhSGFuZFJvY2sgPSBmYUhhbmRCYWNrRmlzdDsKICAgIGZhQ2hlc3NRdWVlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1xdWVlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MTldLCAiZjQ0NSIsICJNMzI1LjMgOTAuOGM5LjEtNC44IDIwLjYtMy4zIDI4LjIgNC4zbDM5LjggMzkuOCAzLjcgMy4zYzkuMSA3LjEgMjAuOSAxMCAzMi40IDcuN2w0Ni40LTkuMyAzLjUtLjRjOC0uNCAxNS44IDMuMiAyMC42IDkuOCA1LjUgNy42IDYuMSAxNy42IDEuNiAyNS44bC0xMTIuNiAyMDIuNiA1MS41IDcwLjkgMS44IDIuN2M0IDYuNiA2LjIgMTQuMiA2LjIgMjIgMCAyMy4zLTE4LjkgNDIuMS00Mi4xIDQyLjFsLTI5OS44IDBjLTIxLjggMC0zOS44LTE2LjYtNDEuOS0zNy44bC0uMi00LjMgLjEtMy4zYy42LTcuNyAzLjQtMTUuMSA3LjktMjEuNGw1MS41LTcwLjktMTEyLjUtMjAyLjZjLTQuNS04LjItMy45LTE4LjMgMS42LTI1LjhzMTQuOS0xMS4yIDI0LjEtOS40bDQ2LjQgOS4zYzEzLjEgMi42IDI2LjctMS41IDM2LjEtMTAuOUwxNTkuNSA5NSAxNjMgOTIuMmM4LjYtNS44IDIwLjEtNS42IDI4LjUgMS4xbDQwIDMyIDIuOCAyLjFjMTQuNCA5LjYgMzMuNSA4LjkgNDcuMi0yLjFsNDAtMzIgMy44LTIuNXpNMTY0LjcgNDAwbC00Ni42IDY0IDI3Ni43IDAtNDYuNi02NC0xODMuNiAwek0zMTEuNSAxNjIuOGMtMzAuMSAyNC4xLTcyLjEgMjUuNi0xMDMuOCA0LjVsLTYuMi00LjUtMjMuMy0xOC42LTI0LjYgMjQuNmMtMTkuOCAxOS44LTQ3LjcgMjguOS03NS4xIDI0LjhsODguMSAxNTguNSAxNzkuOCAwIDg4LTE1OC41Yy0yNS43IDMuOC01MS43LTMuOS03MS4xLTIxbC00LTMuNy0yNC42LTI0LjYtMjMuMiAxOC42ek0yNTYuNSA3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVGVhcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRlYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCAiZ3Jpbi10ZWFycyJdLCAiZjU4OCIsICJNNTA0LjEgMzUzQzUxMi45IDM2Ny4yIDUyNS4zIDM3OSA1MzkuOCAzODcuMiA0OTUuMSA0NjIgNDEzLjQgNTEyIDMyMCA1MTJTMTQ0LjkgNDYyIDEwMC4yIDM4Ny4yYzE0LjYtOC4yIDI2LjktMjAgMzUuOC0zNC4zIDM0LjkgNjYgMTA0LjIgMTExIDE4NC4xIDExMXMxNDkuMi00NSAxODQuMS0xMTF6bTE2LjQtMTUyLjVDNDk2LjIgMTEyLjYgNDE1LjcgNDggMzIwIDQ4UzE0My44IDExMi42IDExOS41IDIwMC41Yy0xMC42LTQuOC0yMi43LTYuOC0zNS40LTVsLTEzLjQgMS45Qzk3LjIgODQuMyAxOTguOCAwIDMyMCAwUzU0Mi44IDg0LjMgNTY5LjMgMTk3LjRsLTEzLjQtMS45Yy0xMi43LTEuOC0yNC44IC4yLTM1LjQgNXpNNDU1LjggMzIwYy0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOHpNMjEyIDIwOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4em0xODgtMjhjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6TTY0MCAzMDAuNmMwIDI4LjQtMjMgNTEuNC01MS40IDUxLjQtMjUuNiAwLTQ3LjMtMTguOC01MC45LTQ0LjFMNTMxIDI2MS4xYy0xLjUtMTAuNiA3LjUtMTkuNiAxOC4xLTE4LjFsNDYuNyA2LjdjMjUuMyAzLjYgNDQuMSAyNS4zIDQ0LjEgNTAuOXptLTY0MCAwYzAtMjUuNiAxOC44LTQ3LjMgNDQuMS01MC45TDkwLjkgMjQzYzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDOTguNyAzMzMuMiA3NyAzNTIgNTEuNCAzNTIgMjMgMzUyIDAgMzI5IDAgMzAwLjZ6Il0KICAgIH07CiAgICBmYUdyaW5UZWFycyA9IGZhRmFjZUdyaW5UZWFyczsKICAgIGZhUGVuVG9TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicGVuLXRvLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJlZGl0Il0sICJmMDQ0IiwgIk00NDEgNTguOUw0NTMuMSA3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUw0MjQgMTM0LjEgMzc3LjkgODggNDA3IDU4LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6TTIwOS44IDI1Ni4yTDM0NCAxMjEuOSAzOTAuMSAxNjggMjU1LjggMzAyLjJjLTIuOSAyLjktNi41IDUtMTAuNCA2LjFsLTU4LjUgMTYuNyAxNi43LTU4LjVjMS4xLTMuOSAzLjItNy41IDYuMS0xMC40ek0zNzMuMSAyNUwxNzUuOCAyMjIuMmMtOC43IDguNy0xNSAxOS40LTE4LjMgMzEuMWwtMjguNiAxMDBjLTIuNCA4LjQtLjEgMTcuNCA2LjEgMjMuNnMxNS4yIDguNSAyMy42IDYuMWwxMDAtMjguNmMxMS44LTMuNCAyMi41LTkuNyAzMS4xLTE4LjNMNDg3IDEzOC45YzI4LjEtMjguMSAyOC4xLTczLjcgMC0xMDEuOEw0NzQuOSAyNUM0NDYuOC0zLjEgNDAxLjItMy4xIDM3My4xIDI1ek04OCA2NEMzOS40IDY0IDAgMTAzLjQgMCAxNTJMMCA0MjRjMCA0OC42IDM5LjQgODggODggODhsMjcyIDBjNDguNiAwIDg4LTM5LjQgODgtODhsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBMODggNDY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTI3MmMwLTIyLjEgMTcuOS00MCA0MC00MGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA2NHoiXQogICAgfTsKICAgIGZhRWRpdCA9IGZhUGVuVG9TcXVhcmU7CiAgICBmYUZhY2VHcmluQmVhbVN3ZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1iZWFtLXN3ZWF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTE3LCAiZ3Jpbi1iZWFtLXN3ZWF0Il0sICJmNTgzIiwgIk01MzAuMiAxNS45Yy04LjgtMTAuNy0xOC41LTIwLjktMjktMzAtMy0yLjYtNy40LTIuNi0xMC40IDAtMTAuNSA5LjEtMjAuMSAxOS4zLTI5IDMwLTE0LjcgMTcuOC0yOS44IDQwLjEtMjkuOCA2NC4xIDAgMzYuNCAyNy42IDY0IDY0IDY0czY0LTI3LjYgNjQtNjRjMC0yNC0xNS4yLTQ2LjMtMjkuOC02NC4xem0tMTMyIDguOUMzNjQuOCA4LjkgMzI3LjQgMCAyODggMCAxNDYuNiAwIDMyIDExNC42IDMyIDI1NlMxNDYuNiA1MTIgMjg4IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NmMwLTI0LjQtMy40LTQ4LTkuOC03MC40LTExLjkgNC4yLTI0LjcgNi40LTM4LjIgNi40LTMuNCAwLTYuOC0uMS0xMC4yLS40IDYuNiAyMC4zIDEwLjIgNDEuOSAxMC4yIDY0LjQgMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzgwIDM3MC45IDgwIDI1NiAxNzMuMSA0OCAyODggNDhjMzQuOCAwIDY3LjUgOC41IDk2LjMgMjMuNiAxLjQtMTcuNCA2LjktMzMuMSAxMy44LTQ2Ljh6TTQyMy44IDMyMGM0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggMTkuOCA1NS45IDczLjEgOTUuOSAxMzUuOCA5NS45IDYyLjcgMCAxMTYtNDAuMSAxMzUuOC05NnpNMTgwIDIwOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHptMTg4LTI4YzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW1Td2VhdCA9IGZhRmFjZUdyaW5CZWFtU3dlYXQ7CiAgICBmYUNsb2NrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzM5LCAiY2xvY2stZm91ciJdLCAiZjAxNyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yMzIgMTIwbDAgMTM2YzAgOCA0IDE1LjUgMTAuNyAyMGw5NiA2NGMxMSA3LjQgMjUuOSA0LjQgMzMuMy02LjdzNC40LTI1LjktNi43LTMzLjNMMjgwIDI0My4yIDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUNsb2NrRm91ciA9IGZhQ2xvY2s7CiAgICBmYUZhY2VMYXVnaFdpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXdpbmsiXSwgImY1OWMiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUxhdWdoV2luayA9IGZhRmFjZUxhdWdoV2luazsKICAgIGZhUGFwZXJQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJwYXBlci1wbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxOTEzXSwgImYxZDgiLCAiTTI5MC41IDI4Ny43TDQ5MS40IDg2LjkgMzU5IDQ1Ni4zIDI5MC41IDI4Ny43ek00NTcuNCA1M0wyNTYuNiAyNTMuOCA4OCAxODUuMyA0NTcuNCA1M3pNMzguMSAyMTYuOGwyMDUuOCA4My42IDgzLjYgMjA1LjhjNS4zIDEzLjEgMTguMSAyMS43IDMyLjMgMjEuNyAxNC43IDAgMjcuOC05LjIgMzIuOC0yMy4xTDU3MC42IDhjMy41LTkuOCAxLTIwLjYtNi4zLTI4cy0xOC4yLTkuOC0yOC02LjNMMzkuNCAxNTEuN2MtMTMuOSA1LTIzLjEgMTguMS0yMy4xIDMyLjggMCAxNC4yIDguNiAyNyAyMS43IDMyLjN6Il0KICAgIH07CiAgICBmYUhlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTUzLCAxMjgxNTQsIDEyODE1NSwgMTI4MTU2LCAxMjg0MjAsIDEyOTI5MywgMTI5Mjk0LCAxMjk1MDUsIDk4MjksIDEwMDg0LCA2MTU3OF0sICJmMDA0IiwgIk0zNzguOSA4MGMtMjcuMyAwLTUzIDEzLjEtNjkgMzUuMmwtMzQuNCA0Ny42Yy00LjUgNi4yLTExLjcgOS45LTE5LjQgOS45cy0xNC45LTMuNy0xOS40LTkuOWwtMzQuNC00Ny42Yy0xNi0yMi4xLTQxLjctMzUuMi02OS0zNS4yLTQ3IDAtODUuMSAzOC4xLTg1LjEgODUuMSAwIDQ5LjkgMzIgOTguNCA2OC4xIDE0Mi4zIDQxLjEgNTAgOTEuNCA5NCAxMjUuOSAxMjAuMyAzLjIgMi40IDcuOSA0LjIgMTQgNC4yczEwLjgtMS44IDE0LTQuMmMzNC41LTI2LjMgODQuOC03MC40IDEyNS45LTEyMC4zIDM2LjItNDMuOSA2OC4xLTkyLjQgNjguMS0xNDIuMyAwLTQ3LTM4LjEtODUuMS04NS4xLTg1LjF6TTI3MSA4Ny4xYzI1LTM0LjYgNjUuMi01NS4xIDEwNy45LTU1LjEgNzMuNSAwIDEzMy4xIDU5LjYgMTMzLjEgMTMzLjEgMCA2OC42LTQyLjkgMTI4LjktNzkuMSAxNzIuOC00NC4xIDUzLjYtOTcuMyAxMDAuMS0xMzMuOCAxMjcuOS0xMi4zIDkuNC0yNy41IDE0LjEtNDMuMSAxNC4xcy0zMC44LTQuNy00My4xLTE0LjFDMTc2LjQgNDM4IDEyMy4yIDM5MS41IDc5LjEgMzM4IDQyLjkgMjk0LjEgMCAyMzMuNyAwIDE2NS4xIDAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN3oiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWUyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNTAxLCA2MjY5NCwgImZvbnQtYXdlc29tZS1mbGFnIiwgImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwgImYyYjQiLCAiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNDggMCAwLTY0IDM4OS42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2ek04MCA0MDBsMC0yNTYgMzU2LjQgMC00OC4yIDEwOC41Yy01LjUgMTIuNC01LjUgMjYuNiAwIDM5TDQzNi40IDQwMCA4MCA0MDB6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lRmxhZzIgPSBmYUZvbnRBd2Vzb21lMjsKICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDIgPSBmYUZvbnRBd2Vzb21lMjsKICAgIGZhQ2xvbmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI0ZCIsICJNMjg4IDQ2NEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDgtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnpNMjI0IDMwNGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMHptLTY0LTE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNHoiXQogICAgfTsKICAgIGZhRm9sZGVyT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sICJmMDdjIiwgIk05Ny41IDQwMGw1MC0xNjAgMzc5LjQgMC01MCAxNjAtMzc5LjQgMHptMTkwLjcgNDhMNDc3IDQ0OGMyMSAwIDM5LjYtMTMuNiA0NS44LTMzLjdsNTAtMTYwYzkuNy0zMC45LTEzLjQtNjIuMy00NS44LTYyLjNsLTM3OS40IDBjLTIxIDAtMzkuNiAxMy42LTQ1LjggMzMuN0w4MC4yIDI5NC40IDgwLjIgOTZjMC04LjggNy4yLTE2IDE2LTE2bDEzOC43IDBjMy41IDAgNi44IDEuMSA5LjYgMy4yTDI4Mi45IDExMmMxMy44IDEwLjQgMzAuNyAxNiA0OCAxNmwxMTcuMyAwYzguOCAwIDE2IDcuMiAxNiAxNmw0OCAwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDMzMC45IDgwYy02LjkgMC0xMy43LTIuMi0xOS4yLTYuNEwyNzMuMyA0NC44QzI2Mi4yIDM2LjUgMjQ4LjggMzIgMjM0LjkgMzJMOTYuMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDB6Il0KICAgIH07CiAgICBmYVdpbmRvd01pbmltaXplID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1taW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ2OV0sICJmMmQxIiwgIk0wIDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFySGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sICJmMDg5IiwgIk0yODUuNy0xNS44YzEwLjggMi42IDE4LjQgMTIuMiAxOC40IDIzLjNsMCAzODcuMWMwIDktNS4xIDE3LjMtMTMuMSAyMS40TDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zTDE5My4xIDEyNS4zIDI1OC44LTMuM2M1LTkuOSAxNi4yLTE1IDI3LTEyLjR6TTI1Ni4xIDEwNy40TDIzMC4zIDE1OGMtMy41IDYuOC0xMCAxMS42LTE3LjYgMTIuOGwtMTI1LjUgMjAgODkuOCA4OS45YzUuNCA1LjQgNy45IDEzLjEgNi43IDIwLjdsLTE5LjggMTI1LjUgOTIuMi00Ni45IDAtMjcyLjZ6Il0KICAgIH07CiAgICBmYUFsYXJtQ2xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYWxhcm0tY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjAwXSwgImYzNGUiLCAiTTQwMi42IDUwLjJjLTUuNCAxLjctMTEuMyAxLjgtMTYuMi0uOS01LjgtMy4yLTExLjgtNi4yLTE3LjgtOC45LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMy44LTUuNS03LjgtMTAuOC0xMi0xNi0zLjUtNC40LTQuNS0xMC4yLTMuOC0xNS44IC4yLTEuOSAuNC0zLjkgLjQtNS45IDAtMjYuMS0yMS4yLTQ3LjItNDcuMi00Ny4yLTQuOSAwLTkuNyAuOC0xNC4yIDIuMnpNMzIuNSAxMzIuOWMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNi4xIDIuOC0xMiA1LjctMTcuOCA4LjktNC45IDIuNy0xMC45IDIuNi0xNi4yIC45LTQuNS0xLjQtOS4yLTIuMi0xNC4yLTIuMi0yNi4xIDAtNDcuMiAyMS4yLTQ3LjIgNDcuMiAwIDIgLjEgNCAuNCA1LjkgLjcgNS42LS4zIDExLjQtMy44IDE1LjgtNC4yIDUuMi04LjIgMTAuNS0xMiAxNnpNNDMyIDI4OGExNzYgMTc2IDAgMSAwIC0zNTIgMCAxNzYgMTc2IDAgMSAwIDM1MiAwek0zOTYuNSA0NjIuNUMzNTguMSA0OTMuNCAzMDkuMiA1MTIgMjU2IDUxMnMtMTAyLjEtMTguNi0xNDAuNS00OS41TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Mi41LTQyLjVDNTAuNiAzOTAuMSAzMiAzNDEuMiAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTMuMi0xOC42IDEwMi4xLTQ5LjUgMTQwLjVMNDczIDQ3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Mi41LTQyLjV6TTI4MCAxODRsMCA5NC4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy00LjUtNC41LTctMTAuNi03LTE3bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYU5ld3NwYXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJuZXdzcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDBdLCAiZjFlYSIsICJNMTY4IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDguNC0xLjQgMTYuNS00LjEgMjRMNDQwIDQzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxNjggODB6TTcyIDQ4MGMtMzkuOCAwLTcyLTMyLjItNzItNzJMMCAxMTJDMCA5OC43IDEwLjcgODggMjQgODhzMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDI3MiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMzA0YzAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDQ4MHpNMTkyIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6bTE1MiAyNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yMTYgMjU2bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA4MGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTczLCA2MjU4OSwgImhvc3BpdGFsLWFsdCIsICJob3NwaXRhbC13aWRlIl0sICJmMGY4IiwgIk0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE3NiAwek0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjcyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MC0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjcyYzAtOC44IDcuMi0xNiAxNi0xNmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNzJ6TTExMiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNOTYgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMyMCAwbDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2LTExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yNjQgMTA0bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMiAzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbEFsdCA9IGZhSG9zcGl0YWw7CiAgICBmYUhvc3BpdGFsV2lkZSA9IGZhSG9zcGl0YWw7CiAgICBmYUNpcmNsZVN0b3AgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXN0b3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5NCwgInN0b3AtY2lyY2xlIl0sICJmMjhkIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2MCAxOTJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNDggMTEybDAtOTYgOTYgMCAwIDk2LTk2IDB6Il0KICAgIH07CiAgICBmYVN0b3BDaXJjbGUgPSBmYUNpcmNsZVN0b3A7CiAgICBmYU9iamVjdFVuZ3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LXVuZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI0OCIsICJNNDguMiA2Ni44Yy0uMS0uOC0uMi0xLjctLjItMi41bDAtLjJjMC04LjggNy4yLTE2IDE2LTE2IC45IDAgMS45IC4xIDIuOCAuMiA3LjUgMS4zIDEzLjIgNy45IDEzLjIgMTUuOCAwIDguOC03LjIgMTYtMTYgMTYtNy45IDAtMTQuNS01LjctMTUuOC0xMy4yek0wIDY0YzAgMjYuOSAxNi41IDQ5LjkgNDAgNTkuM2wwIDEwNS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBMMTIzLjMgNDBDMTEzLjkgMTYuNSA5MC45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjR6bTM2OCAwYTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTMyNC43IDg4YzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMTA1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0yMDEuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTEwNS4zYzE2LTYuNSAyOC45LTE5LjMgMzUuMy0zNS4zbDIwMS4zIDB6TTM4NCAyNzJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyek04MCAyODhjMCA3LjktNS43IDE0LjUtMTMuMiAxNS44LS44IC4xLTEuNyAuMi0yLjUgLjJsLS4yIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLS45IC4xLTEuOSAuMi0yLjggMS4zLTcuNSA3LjktMTMuMiAxNS44LTEzLjIgOC44IDAgMTYgNy4yIDE2IDE2em00MzYuNy00MGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDEwNS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMjAxLjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yMC43LTQ4IDAgMCAyMC43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBsLTUyLjcgMCAwIDkuNmMxMC43IDEwLjkgMTkuMSAyMy45IDI0LjYgMzguNGwyOCAwem01OS4zLThhMTYgMTYgMCAxIDEgMC0zMiAxNiAxNiAwIDEgMSAwIDMyek0yNzEuOCA0NTAuN2ExNiAxNiAwIDEgMSAtMzEuNS01LjUgMTYgMTYgMCAxIDEgMzEuNSA1LjV6bTMwMS41IDEzYy03LjUtMS4zLTEzLjItNy45LTEzLjItMTUuOCAwLTguOCA3LjItMTYgMTYtMTYgNy45IDAgMTQuNSA1LjcgMTUuOCAxMy4ybDAgLjFjLjEgLjkgLjIgMS44IC4yIDIuNyAwIDguOC03LjIgMTYtMTYgMTYtLjkgMC0xLjktLjEtMi44LS4yeiJdCiAgICB9OwogICAgZmFDb21tZW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgImYwNzUiLCAiTTUxLjkgMzg0LjlDMTkuMyAzNDQuNiAwIDI5NC40IDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MCAzOTcuNCA0ODAgMjU2IDQ4MGMtMzYuNSAwLTcxLjItNy4yLTEwMi42LTIwTDM3IDUwOS45Yy0zLjcgMS42LTcuNSAyLjEtMTEuNSAyLjEtMTQuMSAwLTI1LjUtMTEuNC0yNS41LTI1LjUgMC00LjMgMS4xLTguNSAzLjEtMTIuMmw0OC44LTg5LjR6bTM3LjMtMzAuMmMxMi4yIDE1LjEgMTQuMSAzNi4xIDQuOCA1My4ybC0xOCAzMy4xIDU4LjUtMjUuMWMxMS44LTUuMSAyNS4yLTUuMiAzNy4xLS4zIDI1LjcgMTAuNSA1NC4yIDE2LjQgODQuMyAxNi40IDExNy44IDAgMjA4LTg4LjggMjA4LTE5MlMzNzMuOCA0OCAyNTYgNDggNDggMTM2LjggNDggMjQwYzAgNDIuOCAxNS4xIDgyLjQgNDEuMiAxMTQuN3oiXQogICAgfTsKICAgIGZhQ2hlc3NQYXduID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLXBhd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIzXSwgImY0NDMiLCAiTTE5Mi0zMmM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDI3LjYtOS4zIDUyLjktMjQuOSA3My4yIDkuOCAzIDE2LjkgMTIuMSAxNi45IDIyLjggMCAxMy4zLTEwLjcgMjQtMjQgMjRsLS42IDAgMjQuNiAxNjAgNTMuNiA2N2M2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNjMuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZsNTMuNi02NyAyNC42LTE2MC0uNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjggNy4xLTE5LjggMTYuOS0yMi44LTE1LjYtMjAuMy0yNC45LTQ1LjYtMjQuOS03My4yIDAtNjYuMyA1My43LTEyMCAxMjAtMTIwek0xMTUuOSA0MDBsLTUxLjIgNjQgMjU0LjcgMC01MS4yLTY0LTE1Mi4yIDB6bTM2LjItMTg0LjdsLTIxIDEzNi43IDEyMS45IDAtMjEtMTM2LjctMS4xLTcuMy03Ny42IDAtMS4xIDcuM3pNMTkyIDE2YTcyIDcyIDAgMSAwIDAgMTQ0IDcyIDcyIDAgMSAwIDAtMTQ0eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcxIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xMDQgNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ2xpcGJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODIwM10sICJmMzI4IiwgIk0yMzIgOTZsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMCA0OGMzNy4xIDAgNjcuNi0yOCA3MS42LTY0TDMyMCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzNTJjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNi40IDBjNCAzNiAzNC41IDY0IDcxLjYgNjRsODAgMHpNMjkxLjkgMzJDMjc5IDEyLjcgMjU3IDAgMjMyIDBMMTUyIDBjLTI1IDAtNDcgMTIuNy01OS45IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTI4LjEgMHoiXQogICAgfTsKICAgIGZhVGh1bWJzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3OCwgNjE1NzZdLCAiZjE2NSIsICJNMzYwIDMybDcuNCAuNGMzNSAzLjYgNjIuNSAzMi4yIDY0LjQgNjcuNyAxNy44IDExLjggMzAuMSAzMS40IDMyIDUzLjlsLjIgNmMwIDUuNy0uNyAxMS4yLTIgMTYuNSAxMC4yIDExLjUgMTYuOCAyNi4zIDE3LjggNDIuN2wuMiA0LjhjMCAxMy4yLTMuNiAyNS40LTkuOCAzNiA0LjkgOC40IDguMiAxNy45IDkuMyAyOGwuNCA4YzAgMzcuMy0yOC4zIDY3LjktNjQuNiA3MS42bC03LjQgLjQtMTA5LjcgMCAxNC4xIDMwIDMuMSA3LjZjMTIuNSAzNS43LTEuOCA3NS41LTM0LjIgOTVsLTcuMiAzLjljLTM3LjUgMTcuNi04MS43IDMuNi0xMDIuNi0zMS4ybC0uNi0uOS0yLjctNS0uNi0xLjItMzAuMS02NGMtOS40IDE3LjgtMjggMjkuOS00OS41IDI5LjlsLTMyIDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMTUyYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDMyIDBjMTIuNCAwIDIzLjkgNC4xIDMzLjIgMTEgMTMuMi0yMS40IDMyLTM5LjQgNTUtNTEuNmwxMi4yLTYuNSAuNy0uMyA2LjYtMy4yIC43LS4zIDcuMS0zYzE2LjctNi42IDM0LjUtOS45IDUyLjYtOS45TDM2MCAzMnpNMjU1LjkgODBjLTEyIDAtMjMuOSAyLjMtMzUuMSA2LjZsLTQuNyAyLTUuMyAyLjYgMCAwLTEyLjIgNi41Yy0yOS4yIDE1LjUtNDguMyA0NC45LTUwLjcgNzcuNmwtLjIgOCAwIDExMi45IC4xIDQuMWMuNSA4LjIgMi41IDE2LjIgNiAyMy43bDU2LjggMTIwLjkgMi4xIDMuOGM4LjQgMTMuNyAyNiAxOS4xIDQwLjggMTIuMmwyLjktMS42YzEzLTcuOCAxOC43LTIzLjcgMTMuNy0zOGwtMS4yLTMtMzAuMi02NC4yYy0zLjUtNy40LTIuOS0xNi4xIDEuNS0yMy4xczEyLTExLjEgMjAuMi0xMS4xbDE0Ny41IDAgMi40LS4xYzExLjMtMS4xIDIwLjMtMTAuMSAyMS40LTIxLjRsLjEtMi41YzAtNy4xLTMuMS0xMy41LTguMi0xOC01LjItNC42LTguMi0xMS4xLTguMi0xOHMzLTEzLjQgOC4yLTE4YzQuNC0zLjkgNy40LTkuMyA4LTE1LjNsLjItMi43YzAtOC40LTQuNC0xNS45LTExLjItMjAuMi0xMC43LTYuOS0xNC4yLTIwLjktOC0zMiAxLjUtMi42IDIuNS01LjYgMi45LTguNmwuMi0zLjJjMC0xMC42LTYuOS0xOS42LTE2LjYtMjIuOC0xMS43LTMuOC0xOC43LTE1LjktMTYtMjggLjItLjkgLjMtMS44IC40LTIuNmwuMi0yLjZjMC0xMi40LTkuNS0yMi42LTIxLjYtMjMuOEwzNjAgODAgMjU1LjkgODB6TTU2IDE0NGMtNC40IDAtOCAzLjYtOCA4bDAgMjI0YzAgNC40IDMuNiA4IDggOGwzMiAwYzQuNCAwIDgtMy42IDgtOGwwLTIyNGMwLTQuNC0zLjYtOC04LThsLTMyIDB6Il0KICAgIH07CiAgICBmYUlkQmFkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaWQtYmFkZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJjMSIsICJNMjU2IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zODRjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTE2MCAzMjBsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZMOTYgNDE2Yy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk3NDUsIDk5ODksIDYxNTEwLCAiY2hlY2stc3F1YXJlIl0sICJmMTRhIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwem0yMzAuNyA4OS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjExLjQgMzY2LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdCiAgICB9OwogICAgZmFDaGVja1NxdWFyZSA9IGZhU3F1YXJlQ2hlY2s7CiAgICBmYUNoZXNzQmlzaG9wID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLWJpc2hvcCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzk4MjFdLCAiZjQzYSIsICJNMjE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgODEuOCA5OC4xYzI0LjcgMjkuNiAzOC4yIDY3IDM4LjIgMTA1LjYgMCA0My43LTE3LjQgODUuNy00OC4zIDExNi42bC04LjYgOC42IDQ2LjUgNTguMmM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNDcuNCA1MTJDMjEuMiA1MTIgMCA0OTAuOCAwIDQ2NC42IDAgNDUzLjkgMy43IDQ0My40IDEwLjQgNDM1bDQ2LjUtNTguMi04LjYtOC42QzE3LjQgMzM3LjQgMCAyOTUuNCAwIDI1MS43IDAgMjEzLjEgMTMuNSAxNzUuOCAzOC4yIDE0Ni4xTDEyMCA0OCAxMDQgNDhDOTAuNyA0OCA4MCAzNy4zIDgwIDI0UzkwLjcgMCAxMDQgMEwyMTYgMHpNOTQuNCA0MDYuOGwtNDUuNyA1Ny4yIDIyMi43IDAtNDUuNy01Ny4xLTUuNS02LjktMTIwLjMgMC01LjUgNi44ek0xNTYuOSA3OC43TDc1LjEgMTc2LjhjLTE1LjMgMTguNC0yNC42IDQxLTI2LjcgNjQuN0w0OCAyNTEuN2MwIDMxIDEyLjMgNjAuNyAzNC4yIDgyLjdsMTcuNyAxNy43IDEyMC4yIDBjNi4yLTYuMiAxMi4xLTEyLjEgMTcuOC0xNy43IDIxLjktMjEuOSAzNC4yLTUxLjYgMzQuMi04Mi42bC0uNC0xMC4yYy0xLjUtMTctNi43LTMzLjMtMTUuMi00OEwyMDkgMjQxYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDUxLjgtNTEuOC02My43LTc2LjUtMy4xLTMuOC0zLjEgMy44eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZU9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgImYyYjYiLCAiTTUxMiA0MTZjMCAzNS4zLTI4LjUgNjQtNjMuOSA2NEw2NCA0ODBjLTM1LjQgMC02NC0yOC43LTY0LTY0TDAgMTY0Yy4xLTE1LjUgNy44LTMwIDIwLjUtMzguOEwyMDYtMi43YzMwLjEtMjAuNyA2OS44LTIwLjcgOTkuOSAwTDQ5MS41IDEyNS4yYzEyLjggOC44IDIwLjQgMjMuMyAyMC41IDM4LjhsMCAyNTJ6TTY0IDQzMmwzODQuMSAwYzguOCAwIDE1LjktNy4xIDE1LjktMTZsMC0xOTEuNy0xNTQuOCAxMTcuNGMtMzEuNCAyMy45LTc0LjkgMjMuOS0xMDYuNCAwTDQ4IDIyNC4zIDQ4IDQxNmMwIDguOSA3LjIgMTYgMTYgMTZ6TTQ2My42IDE2NC40TDI3OC43IDM2LjhjLTEzLjctOS40LTMxLjctOS40LTQ1LjQgMEw0OC40IDE2NC40IDIzMS44IDMwMy41YzE0LjMgMTAuOCAzNC4xIDEwLjggNDguNCAwTDQ2My42IDE2NC40eiJdCiAgICB9OwogICAgZmFDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMiwgInRpbWVzLWNpcmNsZSIsICJ4bWFyay1jaXJjbGUiXSwgImYwNTciLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhVGltZXNDaXJjbGUgPSBmYUNpcmNsZVhtYXJrOwogICAgZmFYbWFya0NpcmNsZSA9IGZhQ2lyY2xlWG1hcms7CiAgICBmYVNxdWFyZUNhcmV0VXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS11cCJdLCAiZjE1MSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIyNCA2NGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOVMzMzcuNSAzMjAgMzI4IDMyMGwtMjA4IDBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVVcCA9IGZhU3F1YXJlQ2FyZXRVcDsKICAgIGZhRmlsZUltYWdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtaW1hZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDNdLCAiZjFjNSIsICJNMTc2IDQ4TDY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zMTYuMSAxNjBMMjI0IDY3LjkgMjI0IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDE5Ny41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMjU5LjQgNDMybC0xMzQuOCAwYy0xNS44IDAtMjguNi0xMi44LTI4LjYtMjguNiAwLTYuNCAyLjEtMTIuNSA2LTE3LjZsNjcuNi04Ni45QzE3NSAyOTIgMTgzLjMgMjg4IDE5MiAyODhzMTcgNCAyMi40IDEwLjlMMjgyIDM4NS45YzMuOSA1IDYgMTEuMiA2IDE3LjYgMCAxNS44LTEyLjggMjguNi0yOC42IDI4LjZ6TTExMiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtcmlnaHQiXSwgImYxNTIiLCAiTTQwMCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwek0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0zMjAgMjU2YzAgNi43LTIuOCAxMy03LjcgMTcuNmwtMTEyIDEwNGMtNyA2LjUtMTcuMiA4LjItMjUuOSA0LjRTMTYwIDM2OS41IDE2MCAzNjBsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlUmlnaHQgPSBmYVNxdWFyZUNhcmV0UmlnaHQ7CiAgICBmYVN1biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI4XSwgImYxODUiLCAiTTIwMC42LTcuOWMtNi43LTQuNC0xNS4xLTUuMi0yMi41LTIuMlMxNjUuNC0uNSAxNjMuOSA3LjNMMTQzIDExMC42IDM5LjcgMTMxLjRjLTcuOCAxLjYtMTQuNCA3LTE3LjQgMTQuM3MtMi4yIDE1LjggMi4yIDIyLjVMODIuNyAyNTYgMjQuNSAzNDMuOGMtNC40IDYuNy01LjIgMTUuMS0yLjIgMjIuNXM5LjYgMTIuOCAxNy40IDE0LjNMMTQzIDQwMS40IDE2My45IDUwNC43YzEuNiA3LjggNyAxNC40IDE0LjMgMTcuNHMxNS44IDIuMiAyMi41LTIuMmw4Ny44LTU4LjIgODcuOCA1OC4yYzYuNyA0LjQgMTUuMSA1LjIgMjIuNSAyLjJzMTIuOC05LjYgMTQuMy0xNy40bDIwLjktMTAzLjIgMTAzLjItMjAuOWM3LjgtMS42IDE0LjQtNyAxNy40LTE0LjNzMi4yLTE1LjgtMi4yLTIyLjVsLTU4LjItODcuOCA1OC4yLTg3LjhjNC40LTYuNyA1LjItMTUuMSAyLjItMjIuNXMtOS42LTEyLjgtMTcuNC0xNC4zTDQzMy44IDExMC42IDQxMyA3LjNDNDExLjQtLjUgNDA2LTcgMzk4LjYtMTAuMXMtMTUuOC0yLjItMjIuNSAyLjJMMjg4LjQgNTAuMyAyMDAuNi03Ljl6TTE4Ni45IDEzNS43bDE3LTgzLjkgNzEuMyA0Ny4zYzggNS4zIDE4LjUgNS4zIDI2LjUgMGw3MS4zLTQ3LjMgMTcgODMuOWMxLjkgOS41IDkuMyAxNi44IDE4LjggMTguOGw4My45IDE3LTQ3LjMgNzEuM2MtNS4zIDgtNS4zIDE4LjUgMCAyNi41bDQ3LjMgNzEuMy04My45IDE3Yy05LjUgMS45LTE2LjkgOS4zLTE4LjggMTguOGwtMTcgODMuOS03MS4zLTQ3LjNjLTgtNS4zLTE4LjUtNS4zLTI2LjUgMGwtNzEuMyA0Ny4zLTE3LTgzLjljLTEuOS05LjUtOS4zLTE2LjktMTguOC0xOC44bC04My45LTE3IDQ3LjMtNzEuM2M1LjMtOCA1LjMtMTguNSAwLTI2LjVsLTQ3LjMtNzEuMyA4My45LTE3YzkuNS0xLjkgMTYuOC05LjMgMTguOC0xOC44ek0yMzkuNiAyNTZhNDguNCA0OC40IDAgMSAxIDk2LjggMCA0OC40IDQ4LjQgMCAxIDEgLTk2LjggMHptMTQ0LjggMGE5Ni40IDk2LjQgMCAxIDAgLTE5Mi44IDAgOTYuNCA5Ni40IDAgMSAwIDE5Mi44IDB6Il0KICAgIH07CiAgICBmYUltYWdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImltYWdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwM2UiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xMjggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMzYgNzJjOC41IDAgMTYuNCA0LjUgMjAuNyAxMS44bDgwIDEzNmM0LjQgNy40IDQuNCAxNi42IC4xIDI0LjFTMzUyLjYgMzg0IDM0NCAzODRsLTI0MCAwYy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDE3LjIgMjQuNiA0Ni41LTc5YzQuMy03LjMgMTIuMi0xMS44IDIwLjctMTEuOHoiXQogICAgfTsKICAgIGZhTGlnaHRidWxiID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxpZ2h0YnVsYiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2MV0sICJmMGViIiwgIk0yOTYuNSAyOTEuMUMzMjEgMjY1LjIgMzM2IDIzMC40IDMzNiAxOTIgMzM2IDExMi41IDI3MS41IDQ4IDE5MiA0OFM0OCAxMTIuNSA0OCAxOTJjMCAzOC40IDE1IDczLjIgMzkuNSA5OS4xIDIxLjMgMjIuNCA0NC45IDU0IDUzLjMgOTIuOWwxMDIuNCAwYzguNC0zOSAzMi03MC41IDUzLjMtOTIuOXptMzQuOCAzM0MzMDcuNyAzNDkgMjg4IDM3OS40IDI4OCA0MTMuN2wwIDE4LjNjMCA0NC4yLTM1LjggODAtODAgODBsLTMyIDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTguM0M5NiAzNzkuNCA3Ni4zIDM0OSA1Mi43IDMyNC4xIDIwIDI4OS43IDAgMjQzLjIgMCAxOTIgMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyYzAgNTEuMi0yMCA5Ny43LTUyLjcgMTMyLjF6TTE0NCAxODRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQweiJdCiAgICB9OwogICAgZmFBZGRyZXNzQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0MCwgImNvbnRhY3QtY2FyZCIsICJ2Y2FyZCJdLCAiZjJiYiIsICJNNTEyIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDQ0OCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDggMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0tMzIgNDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDB6TTM3NiAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAweiJdCiAgICB9OwogICAgZmFDb250YWN0Q2FyZCA9IGZhQWRkcmVzc0NhcmQ7CiAgICBmYVZjYXJkID0gZmFBZGRyZXNzQ2FyZDsKICAgIGZhRmFjZU1laCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLW1laCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyOCwgIm1laCJdLCAiZjExYSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE3NiAyNDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTg0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYU1laCA9IGZhRmFjZU1laDsKICAgIGZhTWFwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUwNiwgNjIwNzJdLCAiZjI3OSIsICJNNTEyIDQ4YzAtOC4zLTQuMy0xNi0xMS4zLTIwLjRzLTE1LjktNC44LTIzLjMtMS4xTDM1Mi41IDg4LjEgMTgwIDI5LjRjLTEzLjctNC43LTI4LjctMy44LTQxLjkgMi4zTDEzLjggOTAuM0M1LjQgOTQuMiAwIDEwMi43IDAgMTEyTDAgNDY0YzAgOC4yIDQuMiAxNS45IDExLjEgMjAuM3MxNS42IDQuOSAyMy4xIDEuNGwxMjcuMy01OS45IDE3MC43IDU2LjljMTMuNyA0LjYgMjguNSAzLjcgNDEuNi0yLjVsMTI0LjQtNTguNWM4LjQtNCAxMy44LTEyLjQgMTMuOC0yMS43bDAtMzUyek0xNDQgODIuMWwwIDI5OS05NiA0NS4yIDAtMjk5IDk2LTQ1LjJ6bTQ4IDMwMy4zbDAtMzAxLjEgMTI4IDQzLjUgMCAzMDAuMy0xMjgtNDIuN3pNMzY4IDEzNGw5Ni00Ny40IDAgMjk4LjItOTYgNDUuMiAwLTI5NnoiXQogICAgfTsKICAgIGZhSGFuZFBvaW50RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjBhNyIsICJNNjQgNDQ4bDAtMTc3LjZjNS4yIDEgMTAuNSAxLjYgMTYgMS42bDE2IDAgMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ6TTgwIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGw0OCAwYzUyLjUgMCA5Ny4xIDMzLjcgMTEzLjQgODAuNy0zLjEtLjUtNi4yLS43LTkuNC0uNy0yMCAwLTM3LjkgOS4yLTQ5LjcgMjMuNi05LTQuOS0xOS40LTcuNi0zMC4zLTcuNi0xNS4xIDAtMjkgNS4zLTQwIDE0LTExLTguOC0yNC45LTE0LTQwLTE0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTgwIDB6TTAgMTkybDAgMGMwIDE4IDYgMzQuNiAxNiA0OGwwIDIwOGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtODJjNS4xIDEuMyAxMC41IDIgMTYgMiAyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzYgNyAyLjYgMTQuNSA0IDIyLjQgNCAyMCAwIDM3LjktOS4yIDQ5LjctMjMuNiA5IDQuOSAxOS40IDcuNiAzMC4zIDcuNiAzNS4zIDAgNjQtMjguNyA2NC02NGwwLTg4QzM4NCA3NS4yIDMwOC44IDAgMjE2IDBMMTY4IDBDNzUuMiAwIDAgNzUuMiAwIDE2OGwwIDI0em0zMzYgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjR6TTE2MCAyNzJjNS41IDAgMTAuOS0uNyAxNi0ybDAgMzRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMiAxNiAwem02NC0yNGwwLTQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTI0eiJdCiAgICB9OwogICAgZmFGYWNlTWVoQmxhbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgtYmxhbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjYsICJtZWgtYmxhbmsiXSwgImY1YTQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6TTUxMiAyNTZhMjU2IDI1NiAwIDEgMSAtNTEyIDAgMjU2IDI1NiAwIDEgMSA1MTIgMHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFNZWhCbGFuayA9IGZhRmFjZU1laEJsYW5rOwogICAgZmFGYWNlR3JpblRvbmd1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCAiZ3Jpbi10b25ndWUiXSwgImY1ODkiLCAiTTQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4UzQ4IDE0MS4xIDQ4IDI1NmMwIDc0LjEgMzguOCAxMzkuMiA5Ny4xIDE3Ni0uNy01LjItMS4xLTEwLjYtMS4xLTE2bDAtNTMuNWMtMTAuMi0xMi42LTE4LjMtMjYuOS0yMy44LTQyLjQtNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC01LjUgMTUuNi0xMy42IDI5LjktMjMuOCA0Mi41bDAgNTMuNWMwIDUuNC0uNCAxMC44LTEuMSAxNiA1OC40LTM2LjggOTcuMS0xMDEuOSA5Ny4xLTE3NnptNDggMGMwIDExNi4zLTc3LjYgMjE0LjYtMTgzLjkgMjQ1LjctMTkuNSAxNi40LTQ0LjYgMjYuMy03Mi4xIDI2LjNzLTUyLjYtOS45LTcyLjEtMjYuM0M3Ny42IDQ3MC42IDAgMzcyLjMgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2IDIwOGwwLTM3LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCAzNy40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWUgPSBmYUZhY2VHcmluVG9uZ3VlOwogICAgZmFGdXRib2wgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZnV0Ym9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTkxNywgImZ1dGJvbC1iYWxsIiwgInNvY2Nlci1iYWxsIl0sICJmMWUzIiwgIk0zODcgMjI4LjNjLTQuNC0yLjgtNy42LTctOS4yLTExLjlzLTEuNC0xMC4yIC41LTE1TDQxMS42IDExOGMtMTkuOS0yMi40LTQ0LjYtNDAuNS03Mi40LTUyLjdsLTY5LjEgNTcuNmMtNCAzLjMtOSA1LjEtMTQuMSA1LjFzLTEwLjItMS44LTE0LjEtNS4xTDE3Mi44IDY1LjNjLTI3LjggMTIuMi01Mi41IDMwLjMtNzIuNCA1Mi43bDMzLjQgODMuNGMxLjkgNC44IDIuMSAxMC4xIC41IDE1cy00LjkgOS4xLTkuMiAxMS45TDQ5IDI3Ni4yYzMgMzAuOSAxMi43IDU5LjcgMjcuNiA4NS4ybDg5LjctNmM1LjItLjMgMTAuMyAxLjEgMTQuNSA0LjJzNy4yIDcuNCA4LjQgMTIuNWwyMiA4Ny4yYzE0LjQgMy4yIDI5LjQgNC44IDQ0LjggNC44czMwLjMtMS43IDQ0LjgtNC44bDIyLTg3LjJjMS4zLTUgNC4yLTkuNCA4LjQtMTIuNXM5LjMtNC41IDE0LjUtNC4ybDg5LjcgNmMxNS0yNS40IDI0LjctNTQuMyAyNy42LTg1LjFMMzg3IDIyOC4zek0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6bTYyIDIyMWM4LjQgNi4xIDExLjkgMTYuOSA4LjcgMjYuOGwtMTguMyA1Ni4zYy0zLjIgOS45LTEyLjQgMTYuNi0yMi44IDE2LjZsLTU5LjIgMGMtMTAuNCAwLTE5LjYtNi43LTIyLjgtMTYuNmwtMTguMy01Ni4zYy0zLjItOS45IC4zLTIwLjcgOC43LTI2LjhsNDcuOS0zNC44YzguNC02LjEgMTkuOC02LjEgMjguMiAwTDMxOCAyMjF6Il0KICAgIH07CiAgICBmYUZ1dGJvbEJhbGwgPSBmYUZ1dGJvbDsKICAgIGZhU29jY2VyQmFsbCA9IGZhRnV0Ym9sOwogICAgZmFGYWNlU3VycHJpc2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zdXJwcmlzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgInN1cnByaXNlIl0sICJmNWMyIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVN1cnByaXNlID0gZmFGYWNlU3VycHJpc2U7CiAgICBmYUZvbGRlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsICJmb2xkZXItYmxhbmsiXSwgImYwN2IiLCAiTTY0IDQwMGwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xNDkuMyAwYy0xNy4zIDAtMzQuMi01LjYtNDgtMTZMMjEyLjMgODMuMmMtMi44LTIuMS02LjEtMy4yLTkuNi0zLjJMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZ6bTM4NCA0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhRm9sZGVyQmxhbmsgPSBmYUZvbGRlcjsKICAgIGZhQ2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI5XSwgImYwYzIiLCAiTTgwIDE5MmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MCA0Ny4xIDAgODkuNCAyMC40IDExOC43IDUyLjcgMTAuNi0zLjEgMjEuOC00LjcgMzMuMy00LjcgNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAxMy4yLTIuMSAyNS45LTYuMSAzNy44IDQxLjYgMjEuMSA3MC4xIDY0LjMgNzAuMSAxMTQuMiAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzA0IDBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNTYuOCAzMi45LTEwNS45IDgwLjctMTI5LjQtLjQtNC44LS43LTkuNy0uNy0xNC42ek0yNDAgODBjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgOC40IC45IDE2LjYgMi43IDI0LjUgMi43IDEyLjEtNC4zIDI0LjMtMTYuMSAyOC4xLTM4LjcgMTIuNC02Ni42IDQ4LjctNjYuNiA5MS40IDAgNTMgNDMgOTYgOTYgOTZsMzA0IDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zNy40LTI1LjctNjguOS02MC41LTc3LjYtNy41LTEuOS0xMy42LTcuMi0xNi41LTE0LjNzLTIuMS0xNS4yIDItMjEuN2M3LTExLjEgMTEtMjQuMiAxMS0zOC4zIDAtMzkuOC0zMi4yLTcyLTcyLTcyLTExLjEgMC0yMS41IDIuNS0zMC44IDYuOS0xMC41IDUtMjMuMSAxLjctMjkuOC03LjgtMjAuMy0yOC42LTUzLjctNDcuMS05MS4zLTQ3LjF6Il0KICAgIH07CiAgICBmYUNpcmNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDgsIDEyODMwOSwgMTI4OTkyLCAxMjg5OTMsIDEyODk5NCwgMTI4OTk1LCAxMjg5OTYsIDk2NzksIDk4OTgsIDk4OTksIDExMDQ0LCA2MTcwOCwgNjE5MTVdLCAiZjExMSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE4LCAiZ3Jpbi1zcXVpbnQiXSwgImY1ODUiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnptLTI0OS42LTE0M2M0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50ID0gZmFGYWNlR3JpblNxdWludDsKICAgIGZhQ2lyY2xlVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCAidXNlci1jaXJjbGUiXSwgImYyYmQiLCAiTTQwNi41IDM5OS42QzM4Ny40IDM1Mi45IDM0MS41IDMyMCAyODggMzIwbC02NCAwYy01My41IDAtOTkuNCAzMi45LTExOC41IDc5LjYtMzUuNi0zNy4zLTU3LjUtODcuOS01Ny41LTE0My42IDAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4YzAgNTUuNy0yMS45IDEwNi4yLTU3LjUgMTQzLjZ6bS00MC4xIDMyLjdDMzM0LjQgNDUyLjQgMjk2LjYgNDY0IDI1NiA0NjRzLTc4LjQtMTEuNi0xMTAuNS0zMS43YzcuMy0zNi43IDM5LjctNjQuMyA3OC41LTY0LjNsNjQgMGMzOC44IDAgNzEuMiAyNy42IDc4LjUgNjQuM3pNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMjcyYTQwIDQwIDAgMSAxIDAtODAgNDAgNDAgMCAxIDEgMCA4MHptLTg4LTQwYTg4IDg4IDAgMSAwIDE3NiAwIDg4IDg4IDAgMSAwIC0xNzYgMHoiXQogICAgfTsKICAgIGZhVXNlckNpcmNsZSA9IGZhQ2lyY2xlVXNlcjsKICAgIGZhUmVjdGFuZ2xlTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtbGlzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWFsdCJdLCAiZjAyMiIsICJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNjAgMzIwYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTEwNC01NmwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgMTI4bDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTGlzdEFsdCA9IGZhUmVjdGFuZ2xlTGlzdDsKICAgIGZhSGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzA2LCA5OTk1LCAiaGFuZC1wYXBlciJdLCAiZjI1NiIsICJNMjU2LjUgMGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2LTctMi42LTE0LjUtNC0yMi40LTQtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxNjUuNS0yLjctMi43Yy0yNS0yNS02NS41LTI1LTkwLjUgMHMtMjUgNjUuNSAwIDkwLjVMMTA3IDQzN2M0OCA0OCAxMTMuMSA3NSAxODEgNzVsMTYuNSAwYzEuNSAwIDMtLjEgNC41LS40IDkxLjctNi4yIDE2NS03OS40IDE3MS4xLTE3MS4xIC4zLTEuNSAuNC0zIC40LTQuNWwwLTE3NmMwLTM1LjMtMjguNy02NC02NC02NC01LjUgMC0xMC45IC43LTE2IDJsMC0yYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2em0tMTYgOTYuMWwwLS4xIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNzIuOWMtLjEgLjYtLjEgMS4zLS4yIDEuOS0zLjQgNjkuNy01OS4zIDEyNS42LTEyOSAxMjktLjYgMC0xLjMgLjEtMS45IC4yTDI4OCA0NjRDMjMyLjkgNDY0IDE4MCA0NDIuMSAxNDEgNDAzLjFMNTMuMiAzMTUuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDQzLjcgNDMuN2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJsMC0yMjMuNGMwLTguOCA3LjItMTYgMTYtMTYgOC44IDAgMTYgNy4xIDE2IDE1LjlsMCAxMzYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM1Ljl6Il0KICAgIH07CiAgICBmYUhhbmRQYXBlciA9IGZhSGFuZDsKICAgIGZhVGh1bWJzVXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc3LCA2MTU3NV0sICJmMTY0IiwgIk0xNzEuNSAzOC44QzE5Mi4zIDQgMjM2LjUtMTAgMjc0IDcuNmw3LjIgMy44QzMxNiAzMi4zIDMzMCA3Ni41IDMxMi40IDExNGwwIDAtMTQuMSAzMCAxMDkuNyAwIDcuNCAuNGMzNi4zIDMuNyA2NC42IDM0LjQgNjQuNiA3MS42IDAgMTMuMi0zLjYgMjUuNC05LjggMzYgNi4xIDEwLjYgOS43IDIyLjggOS44IDM2IDAgMTguMy02LjkgMzQuOC0xOCA0Ny41IDEuMyA1LjMgMiAxMC44IDIgMTYuNSAwIDI1LjEtMTIuOSA0Ny0zMi4yIDU5LjktMS45IDM1LjUtMjkuNCA2NC4yLTY0LjQgNjcuN2wtNy40IC40LTEwNC4xIDBjLTE4IDAtMzUuOS0zLjQtNTIuNi05LjlsLTcuMS0zLS43LS4zLTYuNi0zLjItLjctLjMtMTIuMi02LjVjLTEyLjMtNi41LTIzLjMtMTQuNy0zMi45LTI0LjEtNC4xIDI2LjktMjcuMyA0Ny40LTU1LjMgNDcuNGwtMzIgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCAyMDBjMC0zMC45IDI1LjEtNTYgNTYtNTZsMzIgMGMxMC44IDAgMjAuOSAzLjEgMjkuNSA4LjVsNTAuMS0xMDYuNSAuNi0xLjIgMi43LTUgLjYtLjl6TTU2IDE5MmMtNC40IDAtOCAzLjYtOCA4bDAgMjI0YzAgNC40IDMuNiA4IDggOGwzMiAwYzQuNCAwIDgtMy42IDgtOGwwLTIyNGMwLTQuNC0zLjYtOC04LThsLTMyIDB6TTI1My42IDUxYy0xNC44LTYuOS0zMi4zLTEuNi00MC43IDEybC0yLjIgNC01Ni44IDEyMC45Yy0zLjUgNy41LTUuNSAxNS41LTYgMjMuN2wtLjEgNC4yIDAgMTEyLjkgLjIgNy45YzIuNCAzMi43IDIxLjQgNjIuMSA1MC43IDc3LjdsMTEuNSA2LjEgNi4zIDMuMWMxMi40IDUuNiAyNS44IDguNSAzOS40IDguNWwxMDQuMSAwIDIuNC0uMWMxMi4xLTEuMiAyMS42LTExLjUgMjEuNi0yMy45bC0uMi0yLjZjLS4xLS45LS4yLTEuNy0uNC0yLjYtMi43LTEyLjEgNC4zLTI0LjIgMTYtMjggOS43LTMuMSAxNi42LTEyLjIgMTYuNi0yMi44IDAtNC4zLTEuMS04LjItMy4xLTExLjgtNi4zLTExLjEtMi44LTI1LjIgOC0zMiA2LjgtNC4zIDExLjItMTEuOCAxMS4yLTIwLjIgMC03LjEtMy4xLTEzLjUtOC4yLTE4LTUuMi00LjYtOC4yLTExLjEtOC4yLTE4czMtMTMuNCA4LjItMThjNS4xLTQuNSA4LjItMTAuOSA4LjItMThsLS4xLTIuNGMtMS4xLTExLjMtMTAuMS0yMC4zLTIxLjQtMjEuNGwtMi40LS4xLTE0Ny41IDBjLTguMiAwLTE1LjgtNC4yLTIwLjItMTEuMS00LjQtNi45LTUtMTUuNy0xLjUtMjMuMUwyNjkgOTMuNmM3LTE1IDEuNC0zMi43LTEyLjUtNDFMMjUzLjYgNTF6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3OTcwLCA2MTY4N10sICJmMWFkIiwgIk02NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmw4MCAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwIDgwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzg0YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA0OHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em05NiA0OGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDaGVzc1Jvb2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mtcm9vayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjBdLCAiZjQ0NyIsICJNMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMzguN2MwIDEzLjgtNC41IDI3LjMtMTIuOCAzOC40bC0zNS4yIDQ2LjkgMCAxMTIgNDAuOCA2OC4xYzQuNyA3LjggNy4yIDE2LjcgNy4yIDI1LjggMCAyNy43LTIyLjQgNTAuMS01MC4xIDUwLjFMNTAuMSA1MTJjLTI3LjcgMC01MC4xLTIyLjQtNTAuMS01MC4xIDAtOS4xIDIuNS0xOCA3LjItMjUuOEw0OCAzNjggNDggMjU2IDEyLjggMjA5LjFDNC41IDE5OCAwIDE4NC41IDAgMTcwLjdMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDB6TTQ4LjMgNDYwLjhsLS4zIDEuMWMwIDEuMiAxIDIuMSAyLjEgMi4xbDI4My44IDBjMS4yIDAgMi4xLTEgMi4xLTIuMWwtLjMtMS4xLTM2LjUtNjAuOC0yMTQuNCAwLTM2LjUgNjAuOHpNNDggMTcwLjdjMCAyLjYgLjYgNS4xIDEuOCA3LjRsMS40IDIuMiAwIDAgMzUuMiA0Ni45IDkuNiAxMi44IDAgMTEyIDE5MiAwIDAtMTEyIDkuNi0xMi44IDM1LjItNDYuOSAwIDAgMS40LTIuMmMxLjItMi4zIDEuOC00LjggMS44LTcuNGwwLTEyMi43LTY0IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0LTY0IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0LTY0IDAgMCAxMjIuN3oiXQogICAgfTsKICAgIGZhQ2lyY2xlUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsICJxdWVzdGlvbi1jaXJjbGUiXSwgImYwNTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2LTgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgNDcuMi0zNiA2Ny4yLTU2IDc0LjVsMCAzLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LjFjMC0yMC41IDE0LjgtMzUuMiAzMC4xLTQwLjIgNi40LTIuMSAxMy4yLTUuNSAxOC4yLTEwLjMgNC4zLTQuMiA3LjctMTAgNy43LTE5LjYgMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAzNjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhUXVlc3Rpb25DaXJjbGUgPSBmYUNpcmNsZVF1ZXN0aW9uOwogICAgZmFGaWxlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxOTYsIDEyODQ1OSwgNjE0NjJdLCAiZjE1YiIsICJNMTc2IDQ4TDY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zMTYuMSAxNjBMMjI0IDY3LjkgMjI0IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDE5Ny41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhRmFjZVNhZENyeSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC1jcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTcsICJzYWQtY3J5Il0sICJmNWIzIiwgIk00MDAgNDA2LjFMNDAwIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE1Mi42Yy0yOC43IDE1LTYxLjQgMjMuNC05NiAyMy40cy02Ny4zLTguNS05Ni0yMy40TDE2MCAyODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTguMUM3Mi42IDM2OC4yIDQ4IDMxNSA0OCAyNTYgNDggMTQxLjEgMTQxLjEgNDggMjU2IDQ4czIwOCA5My4xIDIwOCAyMDhjMCA1OS0yNC42IDExMi4yLTY0IDE1MC4xek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhU2FkQ3J5ID0gZmFGYWNlU2FkQ3J5OwogICAgZmFDYWxlbmRhck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzIiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6bTMyIDEzNmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUZhY2VUaXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXRpcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU1LCAidGlyZWQiXSwgImY1YzgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LjUgNjQuM0MxOTYuMSAzMDIuMSAyMjMuOCAyODggMjU2IDI4OHM1OS45IDE0LjEgNzkuNSAzMi4zYzE5IDE3LjggMzIuNSA0MS43IDMyLjUgNjMuNyAwIDUuNC0yLjcgMTAuNC03LjIgMTMuNHMtMTAuMiAzLjQtMTUuMiAxLjNsLTE3LjItNy41Yy0yMi44LTEwLTQ3LjUtMTUuMS03Mi40LTE1LjFzLTQ5LjYgNS4yLTcyLjQgMTUuMWwtMTcuMiA3LjVjLTQuOSAyLjItMTAuNyAxLjctMTUuMi0xLjNzLTcuMi04LTcuMi0xMy40YzAtMjIgMTMuNS00NS45IDMyLjUtNjMuN3pNMTIyLjYgMTU5LjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhVGlyZWQgPSBmYUZhY2VUaXJlZDsKICAgIGZhSGFuZFBvaW50UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE0IiwgIk00NDggMTI4bC0xNzcuNiAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNmwwIDE2IDE3NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2ek0yMjQgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwwIDQ4YzAgNTIuNSAzMy43IDk3LjEgODAuNyAxMTMuNC0uNS0zLjEtLjctNi4yLS43LTkuNCAwLTIwIDkuMi0zNy45IDIzLjYtNDkuNy00LjktOS03LjYtMTkuNC03LjYtMzAuMyAwLTE1LjEgNS4zLTI5IDE0LTQwLTguOC0xMS0xNC0yNC45LTE0LTQwbDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MHpNMTkyIDY0bDAgMGMxOCAwIDM0LjYgNiA0OCAxNmwyMDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtODIgMGMxLjMgNS4xIDIgMTAuNSAyIDE2IDAgMjUuMy0xNC43IDQ3LjItMzYgNTcuNiAyLjYgNyA0IDE0LjUgNCAyMi40IDAgMjAtOS4yIDM3LjktMjMuNiA0OS43IDQuOSA5IDcuNiAxOS40IDcuNiAzMC4zIDAgMzUuMy0yOC43IDY0LTY0IDY0bC04OCAwQzc1LjIgNDQ4IDAgMzcyLjggMCAyODBsMC00OEMwIDEzOS4yIDc1LjIgNjQgMTY4IDY0bDI0IDB6bTY0IDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwem0xNi0xNzZjMCA1LjUtLjcgMTAuOS0yIDE2bDM0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMCAxNnptLTI0IDY0bC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVVwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY3LCAiYXJyb3ctYWx0LWNpcmNsZS11cCJdLCAiZjM1YiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMTA0IDEwNGMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45bDcyIDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEwNCA3MiAwYzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0xMDQtMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVVwID0gZmFDaXJjbGVVcDsKICAgIGZhSGFuZFNjaXNzb3JzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtc2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1NyIsICJNLjIgMjc2LjNjLTEuMi0zNS4zIDI2LjQtNjUgNjEuNy02Ni4ybDMuMy0uMS04LjItMS44QzIyLjUgMjAwLjUgLjcgMTY2LjMgOC4zIDEzMS44UzUwLjIgNzUuNSA4NC43IDgzLjJsMTczIDM4LjNjMi4zLTIuOSA0LjYtNS43IDcuMS04LjVsMTguNC0yMC4zQzI5OS45IDc0LjUgMzIzLjUgNjQgMzQ4LjMgNjRsMTAuMiAwYzU0LjEgMCAxMDQuMSAyOC43IDEzMS4zIDc1LjRsMS41IDIuNmMxMy42IDIzLjIgMjAuNyA0OS43IDIwLjcgNzYuNkw1MTIgMzQ0YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC0xMDQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yLjggLjItNS42IC41LTguMy0xOS40LTExLTMyLjUtMzEuOC0zMi41LTU1LjcgMC0uOCAwLTEuNiAwLTIuNEw2Ni40IDMzOGMtMzUuMyAxLjItNjUtMjYuNC02Ni4yLTYxLjd6bTYzLjQtMTguMmMtOC44IC4zLTE1LjcgNy43LTE1LjQgMTYuNnM3LjcgMTUuNyAxNi41IDE1LjRsMTYxLjUtNS42YzkuOC0uMyAxOC43IDUuMyAyMi43IDE0LjJzMi4yIDE5LjMtNC41IDI2LjRjLTIuOCAyLjktNC40IDYuNy00LjQgMTEgMCA4LjggNy4yIDE2IDE2IDE2IDkuMSAwIDE3LjQgNS4xIDIxLjUgMTMuM3MzLjIgMTcuOS0yLjMgMjUuMWMtMiAyLjctMy4yIDYtMy4yIDkuNiAwIDguOCA3LjIgMTYgMTYgMTZsMTA0IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0xMjUuNGMwLTE4LjQtNC45LTM2LjUtMTQuMi01Mi40bC0xLjUtMi42Yy0xOC42LTMyLTUyLjgtNTEuNi04OS44LTUxLjZsLTEwLjIgMGMtMTEuMyAwLTIyIDQuOC0yOS42IDEzLjFsMCAwLTE4LjQgMjAuM2MtLjYgLjYtMS4xIDEuMy0xLjcgMS45bDU3IDEzLjJjOC42IDIgMTQgMTAuNiAxMiAxOS4ycy0xMC42IDE0LTE5LjIgMTJMMjYyLjggMTcxLjggNzQuMyAxMzBjLTguNi0xLjktMTcuMiAzLjUtMTkuMSAxMi4yczMuNSAxNy4yIDEyLjIgMTkuMWwxODcuNSA0MS42YzEwLjIgMi4zIDE3LjggMTAuOSAxOC43IDIxLjRsLjEgMWMuNiA2LjYtMS41IDEzLjEtNS44IDE4LjFzLTEwLjYgNy45LTE3LjIgOC4yTDYzLjYgMjU4LjF6Il0KICAgIH07CiAgICBmYUdlbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJnZW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDJdLCAiZjNhNSIsICJNMTY4LjUgNzJsODcuNSA5MyA4Ny41LTkzLTE3NSAwek0zODMuOSA5OS4xbC03Mi4zIDc2LjkgMTI5IDAtNTYuNi03Ni45em01MCAxMjQuOUw3OC4xIDIyNCAyNTYgNDIwLjMgNDMzLjkgMjI0ek03MS41IDE3NmwxMjkgMC03Mi4zLTc2LjktNTYuNiA3Ni45em00MzQuMyA0MC4xbC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOGwyNDAgMGM3LjYgMCAxNC44IDMuNiAxOS4zIDkuOGwxMTIgMTUyYzYuOCA5LjIgNi4xIDIxLjktMS41IDMwLjR6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInJlY3RhbmdsZS14bWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTY0LCAicmVjdGFuZ2xlLXRpbWVzIiwgInRpbWVzLXJlY3RhbmdsZSIsICJ3aW5kb3ctY2xvc2UiXSwgImY0MTAiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMzM0LjEgNDkuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNDQuMSA0NC4xIDQ0LjEgNDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00NC4xLTQ0LjEtNDQuMSA0NC4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ0LjEtNDQuMS00NC4xLTQ0LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NC4xIDQ0LjEgNDQuMS00NC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVUaW1lcyA9IGZhUmVjdGFuZ2xlWG1hcms7CiAgICBmYVRpbWVzUmVjdGFuZ2xlID0gZmFSZWN0YW5nbGVYbWFyazsKICAgIGZhV2luZG93Q2xvc2UgPSBmYVJlY3RhbmdsZVhtYXJrOwogICAgZmFUcmFzaENhbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFzaC1jYW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTQ2MCwgInRyYXNoLWFsdCJdLCAiZjJlZCIsICJNMTY2LjItMTZjLTEzLjMgMC0yNS4zIDguMy0zMCAyMC44TDEyMCA0OCAyNCA0OEMxMC43IDQ4IDAgNTguNyAwIDcyUzEwLjcgOTYgMjQgOTZsNDAwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDAtMTYuMi00My4yQzMwNy4xLTcuNyAyOTUuMi0xNiAyODEuOC0xNkwxNjYuMi0xNnpNMzIgMTQ0bDAgMzA0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzA0LTQ4IDAgMCAzMDRjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzA0LTQ4IDB6bTE2MCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2em0xMTIgMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2eiJdCiAgICB9OwogICAgZmFUcmFzaEFsdCA9IGZhVHJhc2hDYW47CiAgICBmYUxpZmVSaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxpZmUtcmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWNkIiwgIk0zODUuMSA0MTkuMUMzNDkuNyA0NDcuMiAzMDQuOCA0NjQgMjU2IDQ2NHMtOTMuNy0xNi44LTEyOS4xLTQ0LjlsODAuNC04MC40YzE0LjMgOC40IDMxIDEzLjMgNDguOCAxMy4zczM0LjUtNC44IDQ4LjgtMTMuM2w4MC40IDgwLjR6bTY4LjEgLjJDNDg5LjkgMzc0LjkgNTEyIDMxOC4xIDUxMiAyNTZTNDg5LjkgMTM3LjEgNDUzLjIgOTIuN0w0NjUgODFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw0MTkuMyA1OC44QzM3NC45IDIyLjEgMzE4LjEgMCAyNTYgMFMxMzcuMSAyMi4xIDkyLjcgNTguOEw4MSA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTMzcuNyA3MS42IDQ3IDgxTDU4LjggOTIuN0MyMi4xIDEzNy4xIDAgMTkzLjkgMCAyNTZTMjIuMSAzNzQuOSA1OC44IDQxOS4zTDQ3IDQzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDExLjgtMTEuOEMxMzcuMSA0ODkuOSAxOTMuOSA1MTIgMjU2IDUxMnMxMTguOS0yMi4xIDE2My4zLTU4LjhMNDMxIDQ2NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjgtMTEuOHptLTM0LjEtMzQuMWwtODAuNC04MC40YzguNC0xNC4zIDEzLjMtMzEgMTMuMy00OC44cy00LjgtMzQuNS0xMy4zLTQ4LjhsODAuNC04MC40QzQ0Ny4yIDE2Mi4zIDQ2NCAyMDcuMiA0NjQgMjU2cy0xNi44IDkzLjctNDQuOSAxMjkuMXpNMzg1LjEgOTIuOWwtODAuNCA4MC40Yy0xNC4zLTguNC0zMS0xMy4zLTQ4LjgtMTMuM3MtMzQuNSA0LjgtNDguOCAxMy4zTDEyNi45IDkyLjlDMTYyLjMgNjQuOCAyMDcuMiA0OCAyNTYgNDhzOTMuNyAxNi44IDEyOS4xIDQ0Ljl6TTE3My4zIDMwNC44TDkyLjkgMzg1LjFDNjQuOCAzNDkuNyA0OCAzMDQuOCA0OCAyNTZzMTYuOC05My43IDQ0LjktMTI5LjFsODAuNCA4MC40Yy04LjQgMTQuMy0xMy4zIDMxLTEzLjMgNDguOHM0LjggMzQuNSAxMy4zIDQ4Ljh6TTIwOCAyNTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQ29weXJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvcHlyaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzE2OV0sICJmMWY5IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45Yy0yOC4xLTI4LjEtMjguMS03My43IDAtMTAxLjhzNzMuNy0yOC4xIDEwMS44IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy00Ni45LTQ2LjktMTIyLjgtNDYuOS0xNjkuNyAwcy00Ni45IDEyMi44IDAgMTY5LjcgMTIyLjggNDYuOSAxNjkuNyAwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCAiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sICJmMzU5IiwgIk00OCAyNTZhMjA4IDIwOCAwIDEgMSA0MTYgMCAyMDggMjA4IDAgMSAxIC00MTYgMHptNDY0IDBhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMTI0LjcgMjQ0LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDEwNCAxMDRjNC42IDQuNiAxMS41IDUuOSAxNy40IDMuNXM5LjktOC4zIDkuOS0xNC44bDAtNzIgMTA0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTA0IDAgMC03MmMwLTYuNS0zLjktMTIuMy05LjktMTQuOHMtMTIuOS0xLjEtMTcuNCAzLjVsLTEwNCAxMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlTGVmdDsKICAgIGZhQ2FsZW5kYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sICJmMTMzIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OCAzNTIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6TTQ4IDIyNGwwIDE5MmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTkyLTM1MiAweiJdCiAgICB9OwogICAgZmFGYWNlRnJvd25PcGVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24tb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgImZyb3duLW9wZW4iXSwgImY1N2EiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTgyLjQgMzgyLjVjLTEyLjQgNS4yLTI2LjUtNC4xLTIxLjEtMTYuNCAxNi0zNi42IDUyLjQtNjIuMSA5NC44LTYyLjFzNzguOCAyNS42IDk0LjggNjIuMWM1LjQgMTIuMy04LjcgMjEuNi0yMS4xIDE2LjQtMjIuNC05LjUtNDcuNC0xNC44LTczLjctMTQuOHMtNTEuMyA1LjMtNzMuNyAxNC44ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZyb3duT3BlbiA9IGZhRmFjZUZyb3duT3BlbjsKICAgIGZhQ2hhcnRCYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYmFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhci1jaGFydCJdLCAiZjA4MCIsICJNNDggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCA0Mi43IDAgNTZMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODAgNDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMkw0OCA1NnptMTA0IDcybDIwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE1MiA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXQogICAgfTsKICAgIGZhQmFyQ2hhcnQgPSBmYUNoYXJ0QmFyOwogICAgZmFIb3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2OCwgNjM0OTgsIDYzNTAwLCAiaG9tZSIsICJob21lLWFsdCIsICJob21lLWxnLWFsdCJdLCAiZjAxNSIsICJNMjQwIDYuMWM5LjEtOC4yIDIyLjktOC4yIDMyIDBsMjMyIDIwOGM5LjkgOC44IDEwLjcgMjQgMS44IDMzLjlzLTI0IDEwLjctMzMuOSAxLjhsLTgtNy4yIDAgMjA1LjNjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIwNS4zLTggNy4yYy05LjkgOC44LTI1IDgtMzMuOS0xLjhzLTgtMjUgMS44LTMzLjlMMjQwIDYuMXptMTYgNTAuMUw5NiAxOTkuNyA5NiA0NDhjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMC0xMDRjMC0zOS44IDMyLjItNzIgNzItNzJsNDggMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDEwNCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0OC4zLTE2MC0xNDMuNHpNMjA4IDQ2NGw5NiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNHoiXQogICAgfTsKICAgIGZhSG9tZSA9IGZhSG91c2U7CiAgICBmYUhvbWVBbHQgPSBmYUhvdXNlOwogICAgZmFIb21lTGdBbHQgPSBmYUhvdXNlOwogICAgZmFGYWNlRnJvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mcm93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3ODUsICJmcm93biJdLCAiZjExOSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0zMzQuNyAzODQuNkMzMTkuNyAzNjkgMjkzLjYgMzUyIDI1NiAzNTJzLTYzLjcgMTctNzguNyAzMi42Yy05LjIgOS42LTI0LjQgOS45LTMzLjkgLjdzLTkuOS0yNC40LS43LTMzLjljMjIuMS0yMyA2MC00Ny40IDExMy4zLTQ3LjRzOTEuMiAyNC40IDExMy4zIDQ3LjRjOS4yIDkuNiA4LjkgMjQuOC0uNyAzMy45cy0yNC44IDguOS0zMy45LS43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZyb3duID0gZmFGYWNlRnJvd247CiAgICBmYVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidXNlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODEwMCwgNjIxNDQsIDYyNDcwLCAidXNlci1hbHQiLCAidXNlci1sYXJnZSJdLCAiZjAwNyIsICJNMTQ0IDEyOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6bTIwOCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6TTQ4IDQ4MGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGw5NiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NmwtOTYgMEM3OC44IDMwNCAwIDM4Mi44IDAgNDgwbDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOHoiXQogICAgfTsKICAgIGZhVXNlckFsdCA9IGZhVXNlcjsKICAgIGZhVXNlckxhcmdlID0gZmFVc2VyOwogICAgZmFTbm93Zmxha2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic25vd2ZsYWtlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwNTIsIDEwMDU0XSwgImYyZGMiLCAiTTI4MC4xLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3OC4xLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU3IDU3IDAgNzYuNS02Ni4yLTM4LjItMjAuOS03Ny44Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4yIDk4IDk4LjcgMTEwLjhsOC40IDMxLjUtNjcuNi0zOUMyOCA5Ni42IDEzLjMgMTAwLjUgNi43IDExMlM0IDEzOC4yIDE1LjUgMTQ0LjhsNjcuNiAzOS0zMS41IDguNGMtMTIuOCAzLjQtMjAuNCAxNi42LTE3IDI5LjRzMTYuNiAyMC40IDI5LjQgMTdsNzcuOC0yMC45IDY2LjIgMzguMi02Ni4yIDM4LjItNzcuOC0yMC45Yy0xMi44LTMuNC0yNiA0LjItMjkuNCAxN3M0LjIgMjYgMTcgMjkuNGwzMS41IDguNC02Ny42IDM5QzQgMzczLjggLjEgMzg4LjUgNi43IDQwMHMyMS4zIDE1LjQgMzIuOCA4LjhsNjcuNi0zOS04LjQgMzEuNWMtMy40IDEyLjggNC4yIDI2IDE3IDI5LjRzMjYtNC4yIDI5LjQtMTdsMjAuOS03Ny44IDY2LjItMzguMiAwIDc2LjUtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwyMy0yMyAwIDc4LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTc4LjEgMjMgMjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01Ny01NyAwLTc2LjUgNjYuMiAzOC4yIDIwLjkgNzcuOGMzLjQgMTIuOCAxNi42IDIwLjQgMjkuNCAxN3MyMC40LTE2LjYgMTctMjkuNGwtOC40LTMxLjUgNjcuNiAzOWMxMS41IDYuNiAyNi4yIDIuNyAzMi44LTguOHMyLjctMjYuMi04LjgtMzIuOGwtNjcuNi0zOSAzMS41LTguNGMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTc3LjggMjAuOS02Ni4yLTM4LjIgNjYuMi0zOC4yIDc3LjggMjAuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTMxLjUtOC40IDY3LjYtMzljMTEuNS02LjYgMTUuNC0yMS4zIDguOC0zMi44cy0yMS4zLTE1LjQtMzIuOC04LjhsLTY3LjYgMzkgOC40LTMxLjVjMy40LTEyLjgtNC4yLTI2LTE3LTI5LjRzLTI2IDQuMi0yOS40IDE3bC0yMC45IDc3LjgtNjYuMiAzOC4yIDAtNzYuNSA1Ny01N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyMyAwLTc4LjF6Il0KICAgIH07CiAgICBmYUJvb2ttYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJvb2ttYXJrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc4LCA2MTU5MV0sICJmMDJlIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQxNy4xYzAgMjUuNi0yOC41IDQwLjgtNDkuOCAyNi42TDE5MiA0MTIuOCA0OS44IDUwNy43QzI4LjUgNTIxLjkgMCA1MDYuNiAwIDQ4MS4xTDAgNjR6TTY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODcuMiAxMTcuNC03OC4yYzE2LjEtMTAuNyAzNy4xLTEwLjcgNTMuMiAwTDMzNiA0NTEuMiAzMzYgNjRjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDQ4eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWxlZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWxlZnQiXSwgImYxOTEiLCAiTTQ4IDQxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwem0xNiA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODB6bTY0LTIyNGMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNFMyODggMTQyLjUgMjg4IDE1MmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVMZWZ0ID0gZmFTcXVhcmVDYXJldExlZnQ7CiAgICBmYUhhbmRzaGFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDksIDYyNjYyLCAiaGFuZHNoYWtlLWFsdCIsICJoYW5kc2hha2Utc2ltcGxlIl0sICJmMmI1IiwgIk01OTguMSA3NS40YzEwLjctNy44IDEzLjEtMjIuOCA1LjMtMzMuNXMtMjIuOC0xMy4xLTMzLjUtNS4zbC03NC41IDU0LjItOS45LTYuNkM0NjUuOCA3MSA0NDIuNiA2NCA0MTguOSA2NGwtNTkuMiAwLS40IDAtMTQzLjYgMGMtMjYuNyAwLTUyLjUgOC45LTczLjQgMjUuMUw3MC4xIDM2LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zcy01LjQgMjUuNyA1LjMgMzMuNWw4OCA2NGM5LjYgNi45IDIyLjcgNS45IDMxLjEtMi40bDMuOS0zLjljMTMuNS0xMy41IDMxLjgtMjEuMSA1MC45LTIxLjFsNDYuMyAwLTkxLjcgOTEuN2MtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsLjggLjhDMjE4IDMwOCAyOTQgMzA4IDM0MC45IDI2MS4xbDI3LjEtMjcuMSA5Ny44IDk3LjhjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTkuOCA5LjgtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMjggMjhjLTE3LjUgMTAuNC0zNy4yIDE2LjctNTcuNiAxOC41TDMxMyAzOTljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtMy44IDBjLTM2LjEgMC03MC43LTE0LjMtOTYuMi0zOS44TDY1IDI3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxNjAuMiA0NDIuMWMzNC41IDM0LjUgODEuMyA1My45IDEzMC4xIDUzLjlsNTEuOCAwIDEgMSAxLTEgNS43IDBjNDguOCAwIDk1LjYtMTkuNCAxMzAuMS01My45bDE5LjktMTkuOWMxLjItMS4yIDIuMy0yLjMgMy40LTMuNSAuNy0uNSAxLjMtMS4xIDEuOS0xLjdMNjA5IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01My44IDUzLjhjLTQuMi0xMi44LTExLjMtMjQuOS0yMS41LTM1LjFMMzg1IDE4M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTQ0LjEgNDQuMWMtMjYuNSAyNi41LTY4LjUgMjgtOTYuNyA0LjZsOTguNy05OC43YzEzLjQtMTMuNCAzMS42LTIxIDUwLjYtMjEuMWw4LjUgMCAuMiAwIDUwLjggMGMxNC4yIDAgMjguMSA0LjIgMzkuOSAxMi4xTDQ4Mi43IDE0MGM4LjQgNS42IDE5LjMgNS4zIDI3LjQtLjZsODgtNjR6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFsdCA9IGZhSGFuZHNoYWtlOwogICAgZmFIYW5kc2hha2VTaW1wbGUgPSBmYUhhbmRzaGFrZTsKICAgIGZhRmFjZVNtaWxlV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjEsICJzbWlsZS13aW5rIl0sICJmNGRhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYVNtaWxlV2luayA9IGZhRmFjZVNtaWxlV2luazsKICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzE1LCAiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwgImY1ODYiLCAiTTQwMy4xIDQwMy4xYzY3LjItNjcuMiA3OC44LTE2OC45IDM0LjktMjQ4bDM2LjctNS4yYzQuNS0uNiA4LjgtMS42IDEzLjEtMi44IDQ0LjYgOTQuOSAyNy43IDIxMS41LTUwLjcgMjkwcy0xOTUuMSA5NS4zLTI5MCA1MC43YzEuMi00LjIgMi4xLTguNiAyLjgtMTMuMWw1LjItMzYuN2M3OS4xIDQzLjkgMTgwLjggMzIuMyAyNDgtMzQuOXpNNzUgNzVjNzguNC03OC40IDE5NS4xLTk1LjMgMjkwLTUwLjctMS4yIDQuMi0yLjEgOC42LTIuOCAxMy4xbC01LjIgMzYuN2MtNzkuMS00My45LTE4MC44LTMyLjMtMjQ4IDM0LjlzLTc4LjggMTY4LjktMzQuOSAyNDhsLTM2LjcgNS4yYy00LjUgLjYtOC44IDEuNi0xMy4xIDIuOC00NC42LTk0LjktMjcuNy0yMTEuNSA1MC43LTI5MHpNMzcwLjkgMjA2LjVjNS44LTEwLjkgMjEuMS0xMi40IDI2LjQtMS4zIDI1LjYgNTMuNSAxNi4yIDExOS42LTI4LjIgMTYzLjktNDQuMyA0NC4zLTExMC4zIDUzLjctMTYzLjggMjguMi0xMS4xLTUuMy05LjYtMjAuNiAxLjMtMjYuNCAzMi0xNy4xIDY0LjItNDAuOCA5My44LTcwLjQgMjkuNy0yOS43IDUzLjQtNjEuOSA3MC41LTk0ek05My4zIDI4MS45Yy0xLjctOCAyLjktMTUuOSAxMC42LTE4LjRsODQuNi0yOGM1LjctMS45IDEyLjEtLjQgMTYuMyAzLjlzNS44IDEwLjYgMy45IDE2LjNsLTI4IDg0LjZjLTIuNiA3LjctMTAuNSAxMi4zLTE4LjQgMTAuNnMtMTMuNC05LTEyLjctMTcuMWwzLjktNDMuMS00My4xIDMuOWMtOC4xIC43LTE1LjUtNC43LTE3LjEtMTIuN3pNMjk0LjYgMTEwLjRsLTMuOSA0My4xIDQzLjEtMy45YzguMS0uNyAxNS41IDQuNyAxNy4xIDEyLjdzLTIuOSAxNS45LTEwLjYgMTguNGwtODQuNiAyOGMtNS43IDEuOS0xMi4xIC40LTE2LjMtMy45cy01LjgtMTAuNi0zLjktMTYuM2wyOC04NC42YzIuNi03LjcgMTAuNS0xMi4zIDE4LjQtMTAuNnMxMy40IDkgMTIuNyAxNy4xek01MTIgNTEuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0MjEuMSAxMDljLTEwLjYgMS41LTE5LjYtNy41LTE4LjEtMTguMWw2LjctNDYuN0M0MTMuMyAxOC44IDQzNSAwIDQ2MC42IDAgNDg5IDAgNTEyIDIzIDUxMiA1MS40ek00NC4xIDQwOS43TDkwLjkgNDAzYzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDOTguNyA0OTMuMiA3NyA1MTIgNTEuNCA1MTIgMjMgNTEyIDAgNDg5IDAgNDYwLjYgMCA0MzUgMTguOCA0MTMuMyA0NC4xIDQwOS43eiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50VGVhcnMgPSBmYUZhY2VHcmluU3F1aW50VGVhcnM7CiAgICBmYUZpbGVBdWRpbyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWF1ZGlvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzciLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTIyMS45IDI2Ny42Yy00LjcgMTAtLjMgMjEuOSA5LjcgMjYuNiAxOS4yIDguOSAzMi40IDI4LjMgMzIuNCA1MC44cy0xMy4yIDQxLjktMzIuNCA1MC44Yy0xMCA0LjctMTQuNCAxNi42LTkuNyAyNi42czE2LjYgMTQuNCAyNi42IDkuN0MyODEuMiA0MTYuOCAzMDQgMzgzLjYgMzA0IDM0NXMtMjIuOC03MS45LTU1LjYtODcuMWMtMTAtNC43LTIxLjktLjMtMjYuNiA5Ljd6TTEwNCAzMDVjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMCAyNy4yIDM0YzMgMy44IDcuNiA2IDEyLjUgNmwuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZsLS4zIDBjLTQuOSAwLTkuNSAyLjItMTIuNSA2bC0yNy4yIDM0LTE2IDB6TTIyMy4zIDM3M2M5LjktNS40IDE2LjctMTYgMTYuNy0yOC4xcy02LjctMjIuNy0xNi43LTI4LjFjLTcuOC00LjItMTUuMyAzLjMtMTUuMyAxMi4xbDAgMzJjMCA4LjggNy42IDE2LjMgMTUuMyAxMi4xeiJdCiAgICB9OwogICAgZmFDYWxlbmRhclhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXhtYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLXRpbWVzIl0sICJmMjczIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xNzEuOSA5Mi4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyVGltZXMgPSBmYUNhbGVuZGFyWG1hcms7CiAgICBmYUNpcmNsZURvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgImFycm93LWFsdC1jaXJjbGUtZG93biJdLCAiZjM1OCIsICJNMjU2IDQ2NGEyMDggMjA4IDAgMSAxIDAtNDE2IDIwOCAyMDggMCAxIDEgMCA0MTZ6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsMTA0LTEwNGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzM2Ni41IDI1NiAzNjAgMjU2bC03MiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNC03MiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsMTA0IDEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVEb3duID0gZmFDaXJjbGVEb3duOwogICAgZmFGaWxlTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgImZpbGUtYWx0IiwgImZpbGUtdGV4dCJdLCAiZjE1YyIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptNTYgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUZpbGVBbHQgPSBmYUZpbGVMaW5lczsKICAgIGZhRmlsZVRleHQgPSBmYUZpbGVMaW5lczsKICAgIGZhQ29tbWVudHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgImYwODYiLCAiTTc2LjIgMjU4LjdjNi4xLTE1LjIgNC0zMi42LTUuNi00NS45LTE0LjUtMjAuMS0yMi42LTQzLjctMjIuNi02OC44IDAtNjYuOCA2MC41LTEyOCAxNDQtMTI4czE0NCA2MS4yIDE0NCAxMjgtNjAuNSAxMjgtMTQ0IDEyOGMtMTUuOSAwLTMxLjEtMi4zLTQ1LjMtNi41LTEwLjMtMy4xLTIxLjQtMi41LTMxLjQgMS41bC01MC40IDIwLjIgMTEuNC0yOC41ek0wIDE0NGMwIDM1LjggMTEuNiA2OS4xIDMxLjcgOTYuOEwxLjkgMzE1LjJjLTEuMyAzLjItMS45IDYuNi0xLjkgMTAgMCAxNC44IDEyIDI2LjggMjYuOCAyNi44IDMuNCAwIDYuOC0uNyAxMC0xLjlsOTYuMy0zOC41YzE4LjYgNS41IDM4LjQgOC40IDU4LjkgOC40IDEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDR6TTM4NCA1MTJjMjAuNiAwIDQwLjMtMyA1OC45LTguNGw5Ni4zIDM4LjVjMy4yIDEuMyA2LjYgMS45IDEwIDEuOSAxNC44IDAgMjYuOC0xMiAyNi44LTI2LjggMC0zLjQtLjctNi44LTEuOS0xMGwtMjkuNy03NC40YzIwLTI3LjggMzEuNy02MS4xIDMxLjctOTYuOCAwLTgyLjQtNjEuNy0xNTEuNS0xNDUtMTcwLjctMS42IDE2LjMtNS4xIDMxLjktMTAuMSA0Ni45IDYzLjkgMTQuOCAxMDcuMiA2Ny4zIDEwNy4yIDEyMy45IDAgMjUuMS04LjEgNDguNy0yMi42IDY4LjgtOS42IDEzLjMtMTEuNyAzMC42LTUuNiA0NS45bDExLjQgMjguNS01MC40LTIwLjJjLTEwLTQtMjEuMS00LjUtMzEuNC0xLjUtMTQuMiA0LjItMjkuNCA2LjUtNDUuMyA2LjUtNzIuMiAwLTEyNy4xLTQ1LjctMTQwLjctMTAxLjItMTUuNiAzLjItMzEuNyA1LTQ4LjEgNS4yIDE2LjQgODEuOSA5NC43IDE0NCAxODguOCAxNDR6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMzLCAiY2hlY2stY2lyY2xlIl0sICJmMDU4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC00NjRhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2em03MC43IDEyMS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjQzLjQgMzY2LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdCiAgICB9OwogICAgZmFDaGVja0NpcmNsZSA9IGZhQ2lyY2xlQ2hlY2s7CiAgICBmYU1vb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibW9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2OSwgOTIxNF0sICJmMTg2IiwgIk0yMzkuMyA0OC43Yy0xMDcuMSA4LjUtMTkxLjMgOTguMS0xOTEuMyAyMDcuMyAwIDExNC45IDkzLjEgMjA4IDIwOCAyMDggMzMuMyAwIDY0LjctNy44IDkyLjYtMjEuNy0xMDMuNC0yMy40LTE4MC42LTExNS44LTE4MC42LTIyNi4zIDAtNjUuOCAyNy40LTEyNS4xIDcxLjMtMTY3LjN6TTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMTkuNCAwIDM4LjQgMi4yIDU2LjcgNi4zIDkuOSAyLjIgMTcuMyAxMC41IDE4LjUgMjAuNXMtNCAxOS44LTEzLjEgMjQuNGMtNjAuNiAzMC4yLTEwMi4xIDkyLjctMTAyLjEgMTY0LjggMCAxMDEuNiA4Mi40IDE4NCAxODQgMTg0IDUgMCA5LjktLjIgMTQuOC0uNiAxMC4xLS44IDE5LjYgNC44IDIzLjggMTQuMXMyIDIwLjEtNS4zIDI3LjFDMzg3LjMgNDg0LjggMzI0LjggNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6Il0KICAgIH07CiAgICBmYUNsb3NlZENhcHRpb25pbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvc2VkLWNhcHRpb25pbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIwYSIsICJNNDQ4IDExMmM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHpNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTg4IDE0NGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MGMwLTQuNCAzLjYtOCA4LTh6bTE2OCA4YzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MHoiXQogICAgfTsKICAgIGZhSW1hZ2VzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImltYWdlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzAyIiwgIk00ODAgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDB6TTE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDMyem04MCAxMTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTQwLjcgMy44Yy00LjMtNy4zLTEyLjItMTEuOC0yMC43LTExLjhzLTE2LjQgNC41LTIwLjcgMTEuOGwtNDYuNSA3OS0xNy4yLTI0LjZjLTQuNS02LjQtMTEuOC0xMC4yLTE5LjctMTAuMnMtMTUuMiAzLjgtMTkuNyAxMC4ybC01NiA4MGMtNS4xIDcuMy01LjggMTYuOS0xLjYgMjQuOFMxOTEuMSAzMjAgMjAwIDMyMGwyNDAgMGM4LjYgMCAxNi42LTQuNiAyMC44LTEyLjFzNC4yLTE2LjctLjEtMjQuMWwtODAtMTM2ek00OCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMzguNyAwIDE1MkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNjAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI5NnoiXQogICAgfTsKICAgIGZhQ2lyY2xlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MzgsICJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0Il0sICJmMzVhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6bTM4Ny4zIDExLjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTEwNC0xMDRjLTQuNi00LjYtMTEuNS01LjktMTcuNC0zLjVTMjU2IDE0NS41IDI1NiAxNTJsMCA3Mi0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDcyYzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDEwNC0xMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZVJpZ2h0OwogICAgZmFJZENhcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMTQ3LCAiZHJpdmVycy1saWNlbnNlIl0sICJmMmMyIiwgIk00OCA0MTZsMC0yNTYgNDgwIDAgMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODBsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA4IDMxMmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMzc2IDIwOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6Il0KICAgIH07CiAgICBmYURyaXZlcnNMaWNlbnNlID0gZmFJZENhcmQ7CiAgICBmYUNpcmNsZVBsYXkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2OSwgInBsYXktY2lyY2xlIl0sICJmMTQ0IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIxMi41IDE0Ny41Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjVTMTc2IDE1OS4zIDE3NiAxNjhsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODh6TTI5OCAyNTZsLTc0IDQ1LjIgMC05MC40IDc0IDQ1LjJ6Il0KICAgIH07CiAgICBmYVBsYXlDaXJjbGUgPSBmYUNpcmNsZVBsYXk7CiAgICBmYUZhY2VMYXVnaEJlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCAibGF1Z2gtYmVhbSJdLCAiZjU5YSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMTguMyA1OC4yYy00LjItMTMuNyA3LjEtMjYuMiAyMS40LTI2LjJsMjMyLjYgMGMxNC4zIDAgMjUuNiAxMi41IDIxLjQgMjYuMi0xOCA1OC45LTcyLjkgMTAxLjgtMTM3LjcgMTAxLjhTMTM2LjMgMzczLjEgMTE4LjMgMzE0LjJ6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFMYXVnaEJlYW0gPSBmYUZhY2VMYXVnaEJlYW07CiAgICBmYUFkZHJlc3NCb29rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImFkZHJlc3MtYm9vayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM4LCAiY29udGFjdC1ib29rIl0sICJmMmI5IiwgIk0zODQgNDhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw4MCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMjg4IDB6TTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjQwIDI0OGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptLTMyIDQwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwek01MTIgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6TTQ5NiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZ6bTE2IDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHoiXQogICAgfTsKICAgIGZhQ29udGFjdEJvb2sgPSBmYUFkZHJlc3NCb29rOwogICAgZmFIb3VyZ2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTIwMywgNjIwMzIsICJob3VyZ2xhc3MtZW1wdHkiXSwgImYyNTQiLCAiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsODEuNSA4MS41LTgxLjUgODEuNUM0OCAzNjYgMzIgNDA0LjcgMzIgNDQ1bDAgMTktOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtODEuNS04MS41IDgxLjUtODEuNUMzMzYgMTQ2IDM1MiAxMDcuMyAzNTIgNjdsMC0xOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzczLjMgMCAzNjAgMEwyNCAwek0xOTIgMjg5LjlsODEuNSA4MS41QzI5MyAzOTEgMzA0IDQxNy40IDMwNCA0NDVsMCAxOS0yMjQgMCAwLTE5YzAtMjcuNiAxMS01NCAzMC41LTczLjVMMTkyIDI4OS45em0wLTY3LjlsLTgxLjUtODEuNUM5MSAxMjEgODAgOTQuNiA4MCA2N2wwLTE5IDIyNCAwIDAgMTljMCAyNy42LTExIDU0LTMwLjUgNzMuNUwxOTIgMjIyLjF6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VtcHR5ID0gZmFIb3VyZ2xhc3M7CiAgICBmYUhlYWRwaG9uZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGVhZHBob25lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkxMSwgNjI4NjMsICJoZWFkcGhvbmVzLWFsdCIsICJoZWFkcGhvbmVzLXNpbXBsZSJdLCAiZjAyNSIsICJNNDggMjI0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA0NC44Yy0xNC4xLTguMi0zMC41LTEyLjgtNDgtMTIuOGwtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTYwQzQ0OCAxMDAuMyAzNDcuNyAwIDIyNCAwUzAgMTAwLjMgMCAyMjRMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwYy0xNy41IDAtMzMuOSA0LjctNDggMTIuOEw0OCAyMjR6bTAgMTI4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMCAxMjgtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zMnptMzUyIDBsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYgMCAwLTEyOCAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzQWx0ID0gZmFIZWFkcGhvbmVzOwogICAgZmFIZWFkcGhvbmVzU2ltcGxlID0gZmFIZWFkcGhvbmVzOwogICAgZmFGaWxlUG93ZXJwb2ludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBvd2VycG9pbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjNCIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptODggMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMjggMGMzNy42IDAgNjgtMzAuNCA2OC02OHMtMzAuNC02OC02OC02OGwtNTIgMHptNTIgODhsLTI4IDAgMC00MCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHoiXQogICAgfTsKICAgIGZhV2luZG93TWF4aW1pemUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1heGltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgImYyZDAiLCAiTTQ4IDIyNGwwIDE2MGMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTYwLTQxNiAwek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4eiJdCiAgICB9OwogICAgZmFDb21tZW50RG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzIsIDYyMDc1LCAiY29tbWVudGluZyJdLCAiZjRhZCIsICJNMCAyNDBjMCA1NC40IDE5LjMgMTA0LjYgNTEuOSAxNDQuOUwzLjEgNDc0LjNjLTIgMy43LTMuMSA3LjktMy4xIDEyLjIgMCAxNC4xIDExLjQgMjUuNSAyNS41IDI1LjUgNCAwIDcuOC0uNiAxMS41LTIuMUwxNTMuNCA0NjBjMzEuNCAxMi45IDY2LjEgMjAgMTAyLjYgMjAgMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDB6TTk0IDQwNy45YzkuMy0xNy4xIDcuNC0zOC4xLTQuOC01My4yLTI2LjEtMzIuMy00MS4yLTcxLjktNDEuMi0xMTQuNyAwLTEwMy4yIDkwLjItMTkyIDIwOC0xOTJzMjA4IDg4LjggMjA4IDE5Mi05MC4yIDE5Mi0yMDggMTkyYy0zMC4yIDAtNTguNy01LjktODQuMy0xNi40LTExLjktNC45LTI1LjMtNC44LTM3LjEgLjNMNzYgNDQwLjkgOTQgNDA3Ljl6TTE0NCAyNzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNDQtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptODAgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDb21tZW50aW5nID0gZmFDb21tZW50RG90czsKICAgIGZhRmFjZUdyaW5Ub25ndWVXaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MCwgImdyaW4tdG9uZ3VlLXdpbmsiXSwgImY1OGIiLCAiTTM2Ni45IDQzMmMuOC01LjIgMS4xLTEwLjYgMS4xLTE2bDAtNTMuNWMxMC4yLTEyLjYgMTguMy0yNi45IDIzLjgtNDIuNSA0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggNS41IDE1LjUgMTMuNiAyOS45IDIzLjggNDIuNGwwIDUzLjVjMCA1LjQgLjQgMTAuOCAxLjEgMTYtNTguNC0zNi44LTk3LjEtMTAxLjktOTcuMS0xNzYgMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4czIwOCA5My4xIDIwOCAyMDhjMCA3NC4xLTM4LjggMTM5LjItOTcuMSAxNzZ6bS0zOC44IDY5LjdDNDM0LjQgNDcwLjYgNTEyIDM3Mi4zIDUxMiAyNTYgNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3Mi4zIDc3LjYgNDcwLjYgMTgzLjkgNTAxLjcgMjAzLjQgNTE4LjEgMjI4LjUgNTI4IDI1NiA1MjhzNTIuNi05LjkgNzIuMS0yNi4zek0zMjAgMzc4LjZsMCAzNy40YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0bDAtMzcuNGMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmwyIDBjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOSAyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwIDIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjlsMiAwYzE0LjcgMCAyNi42IDExLjkgMjYuNiAyNi42ek0xMzIgMjMyYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwem0yMjguNC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVdpbmsgPSBmYUZhY2VHcmluVG9uZ3VlV2luazsKICAgIGZhSG91cmdsYXNzSGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MtaGFsZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJob3VyZ2xhc3MtMiJdLCAiZjI1MiIsICJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBMMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDE5YzAgNDAuMy0xNiA3OS00NC41IDEwNy41bC04MS41IDgxLjUgODEuNSA4MS41QzMzNiAzNjYgMzUyIDQwNC43IDM1MiA0NDVsMCAxOSA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTE5YzAtNDAuMyAxNi03OSA0NC41LTEwNy41bDgxLjUtODEuNS04MS41LTgxLjVDNDggMTQ2IDMyIDEwNy4zIDMyIDY3bDAtMTktOCAwQzEwLjcgNDggMCAzNy4zIDAgMjR6TTExMC41IDM3MS41Yy0zLjkgMy45LTcuNSA4LjEtMTAuNyAxMi41bDE4NC40IDBjLTMuMi00LjQtNi44LTguNi0xMC43LTEyLjVsLTgxLjUtODEuNS04MS41IDgxLjV6TTgwLjggNDMyYy0uNSA0LjMtLjggOC42LS44IDEzbDAgMTkgMjI0IDAgMC0xOWMwLTQuNC0uMy04LjctLjgtMTNMODAuOCA0MzJ6TTI1NC4xIDE2MGwtMTI0LjEgMCA2Mi4xIDYyLjEgNjIuMS02Mi4xem0zOS43LTQ4QzMwMC40IDk4LjEgMzA0IDgyLjcgMzA0IDY3bDAtMTktMjI0IDAgMCAxOWMwIDE1LjcgMy42IDMxLjEgMTAuMiA0NWwyMDMuNSAweiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3MyID0gZmFIb3VyZ2xhc3NIYWxmOwogICAgZmFDcmVkaXRDYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNyZWRpdC1jYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc5LCA2MjA4MywgImNyZWRpdC1jYXJkLWFsdCJdLCAiZjA5ZCIsICJNNDQ4IDExMmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMi00MTYgMCAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHptMTYgMTEybDAgMTYwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2MCA0MTYgMHpNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTgwIDM0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMTQ0IDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUNyZWRpdENhcmRBbHQgPSBmYUNyZWRpdENhcmQ7CiAgICBmYUhhbmRTcG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNwb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDA2XSwgImYyNTkiLCAiTTEzOC4zIDgwLjhjLTkuMi0zMy44IDEwLjUtNjguOCA0NC4zLTc4LjQgMzQtOS42IDY5LjQgMTAuMiA3OSA0NC4yTDI5MS45IDE1My43IDMwNS4xIDg0YzYuNi0zNC43IDQwLjEtNTcuNSA3NC44LTUwLjkgMzEuNCA2IDUzIDMzLjkgNTIgNjQuOSAxMC0yLjYgMjAuOC0yLjggMzEuNS0uMSAzNC4zIDguNiA1NS4xIDQzLjMgNDYuNiA3Ny42TDQ1NC43IDM5Ny4yQzQzNy44IDQ2NC43IDM3Ny4yIDUxMiAzMDcuNiA1MTJsLTMzLjcgMGMtNTYuOSAwLTExMi4yLTE5LTE1Ny4yLTUzLjlsLTkyLTcxLjZjLTI3LjktMjEuNy0zMi45LTYxLjktMTEuMi04OS44czYxLjktMzIuOSA4OS44LTExLjJsMTcgMTMuMi01MS44LTEzMS4yYy0xMy0zMi45IDMuMi03MC4xIDM2LTgzIDExLjEtNC40IDIyLjctNS40IDMzLjctMy43em03Ny4xLTIxLjJjLTIuNC04LjUtMTEuMi0xMy40LTE5LjctMTFzLTEzLjQgMTEuMi0xMSAxOS43bDU0LjggMTgyLjRjMy41IDEyLjMtMy4zIDI1LjItMTUuNCAyOS4zcy0yNS4zLTItMzAtMTMuOUwxNDIuOSAxMzguMWMtMy4yLTguMi0xMi41LTEyLjMtMjAuOC05cy0xMi4zIDEyLjUtOSAyMC44bDczLjMgMTg1LjZjMTIgMzAuMy0yMy43IDU3LTQ5LjQgMzdMNzMuOCAzMjMuNGMtNy01LjQtMTctNC4yLTIyLjUgMi44cy00LjIgMTcgMi44IDIyLjVsOTIgNzEuNmMzNi41IDI4LjQgODEuNCA0My44IDEyNy43IDQzLjhsMzMuNyAwYzQ3LjUgMCA4OS0zMi40IDEwMC41LTc4LjVsNTUuNC0yMjEuNmMyLjEtOC42LTMuMS0xNy4zLTExLjYtMTkuNHMtMTcuMyAzLjEtMTkuNCAxMS42bC0yNiAxMDRjLTIuOSAxMS43LTEzLjQgMTkuOS0yNS41IDE5LjktMTYuNSAwLTI4LjktMTUtMjUuOC0zMS4yTDM4My43IDk5YzEuNy04LjctNC0xNy4xLTEyLjctMTguN1MzNTQgODQuMyAzNTIuMyA5M0wzMjAuNSAyNjBjLTIuMiAxMS42LTEyLjQgMjAtMjQuMiAyMC0xMSAwLTIwLjctNy4zLTIzLjctMTcuOUwyMTUuNCA1OS42eiJdCiAgICB9OwogICAgZmFCZWxsU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYmVsbC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3NywgNjE5NDNdLCAiZjFmNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODcuOC04Ny44YzE3LjUtMy4zIDMwLjgtMTguNyAzMC44LTM3LjEgMC02LjctMS44LTEzLjMtNS4xLTE5TDQ4NSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA5LjdjLTQyLjIgNi03OS40IDI3LjgtMTA1LjQgNTkuMUw0MS0yNC45ek0xOTIuOCAxMjYuOUMyMTQuNyA5OC40IDI0OS4yIDgwIDI4OCA4MCAzNTQuMyA4MCA0MDggMTMzLjcgNDA4IDIwMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40bDEyLjkgMjIuMS0yMi42IDAtMjQxLjEtMjQxLjF6TTEzMi41IDM0NS45YzE5LjUtMzMuNCAzMS4zLTcwLjcgMzQuNi0xMDlsLTQ2LjctNDYuN2MtLjIgMy4zLS4zIDYuNi0uMyA5LjlsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDY5LjEgMzU5LjJjLTMuNCA1LjgtNS4xIDEyLjMtNS4xIDE5IDAgMjAuOSAxNi45IDM3LjggMzcuOCAzNy44bDI0NC40IDAtNDgtNDgtMTc4LjYgMCAxMi45LTIyLjF6TTIyMC4xIDQ2NGM5LjkgMjggMzYuNiA0OCA2Ny45IDQ4czU4LTIwIDY3LjktNDhsLTEzNS44IDB6Il0KICAgIH07CiAgICBmYVN0YXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3RhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDg4LCA2MTQ0Nl0sICJmMDA1IiwgIk0yODguMS0zMmM5IDAgMTcuMyA1LjEgMjEuNCAxMy4xTDM4MyAxMjUuMyA1NDIuOSAxNTAuN2M4LjkgMS40IDE2LjMgNy43IDE5LjEgMTYuM3MuNSAxOC01LjggMjQuNEw0NDEuNyAzMDUuOSA0NjcgNDY1LjhjMS40IDguOS0yLjMgMTcuOS05LjYgMjMuMnMtMTcgNi4xLTI1IDJMMjg4LjEgNDE3LjYgMTQzLjggNDkxYy04IDQuMS0xNy43IDMuMy0yNS0ycy0xMS0xNC4yLTkuNi0yMy4yTDEzNC40IDMwNS45IDIwIDE5MS40Yy02LjQtNi40LTguNi0xNS44LTUuOC0yNC40czEwLjEtMTQuOSAxOS4xLTE2LjNsMTU5LjktMjUuNCA3My42LTE0NC4yYzQuMS04IDEyLjQtMTMuMSAyMS40LTEzLjF6bTAgNzYuOEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDExMy4zLTU3LjZjNi44LTMuNSAxNC45LTMuNSAyMS44IDBsMTEzLjMgNTcuNi0xOS44LTEyNS41Yy0xLjItNy42IDEuMy0xNS4zIDYuNy0yMC43bDg5LjgtODkuOS0xMjUuNS0yMGMtNy42LTEuMi0xNC4xLTYtMTcuNi0xMi44TDI4OC4xIDQ0Ljh6Il0KICAgIH07CiAgICBmYUZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmxhZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk4OCwgNjE3MjVdLCAiZjAyNCIsICJNNDggMjRDNDggMTAuNyAzNy4zIDAgMjQgMFMwIDEwLjcgMCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAwIDgwLjMtMjAuMWM0MS4xLTEwLjMgODQuNi01LjUgMTIyLjUgMTMuNCA0NC4yIDIyLjEgOTUuNSAyNC44IDE0MS43IDcuNGwzNC43LTEzYzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjc5LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtOS42IDQuOGMtNDYuMyAyMy4yLTEwMC44IDIzLjItMTQ3LjEgMC0zNS4xLTE3LjYtNzUuNC0yMi0xMTMuNS0xMi41TDQ4IDUyIDQ4IDI0em0wIDc3LjVsOTYuNi0yNC4yYzI3LTYuNyA1NS41LTMuNiA4MC40IDguOCA1NC45IDI3LjQgMTE4LjcgMjkuNyAxNzUgNi44bDAgMjQxLjgtMjQuNCA5LjFjLTMzLjcgMTIuNi03MS4yIDEwLjctMTAzLjQtNS40LTQ4LjItMjQuMS0xMDMuMy0zMC4xLTE1NS42LTE3LjFsLTY4LjYgMTcuMiAwLTIzN3oiXQogICAgfTsKICAgIGZhTGVtb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibGVtb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MTldLCAiZjA5NCIsICJNMzY4IDgwYy0zLjIgMC02LjIgLjQtOC45IDEuMy0xOS4xIDUuNS00Ni4xIDEwLjctNzQuMyAzLjMtNTcuNC0xNC45LTEyNC42IDcuNC0xNzQuNyA1Ny41UzM3LjcgMjU5LjQgNTIuNiAzMTYuOGM3LjMgMjguMiAyLjIgNTUuMi0zLjMgNzQuMy0uOCAyLjgtMS4zIDUuOC0xLjMgOC45IDAgMTcuNyAxNC4zIDMyIDMyIDMyIDMuMiAwIDYuMi0uNCA4LjktMS4zIDE5LjEtNS41IDQ2LjEtMTAuNyA3NC4zLTMuMyA1Ny40IDE0LjkgMTI0LjYtNy40IDE3NC43LTU3LjVzNzIuNC0xMTcuMyA1Ny41LTE3NC43Yy03LjMtMjguMi0yLjItNTUuMiAzLjMtNzQuMyAuOC0yLjggMS4zLTUuOCAxLjMtOC45IDAtMTcuNy0xNC4zLTMyLTMyLTMyem0wLTQ4YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNy43LTEuMSAxNS4yLTMuMSAyMi4zLTQuNiAxNS44LTcuMSAzMi45LTMgNDguOSAyMC4xIDc3LjYtMTAuOSAxNjEuNS03MCAyMjAuN3MtMTQzLjEgOTAuMi0yMjAuNyA3MGMtMTYtNC4xLTMzLTEuNi00OC45IDMtNy4xIDItMTQuNiAzLjEtMjIuMyAzLjEtNDQuMiAwLTgwLTM1LjgtODAtODAgMC03LjcgMS4xLTE1LjIgMy4xLTIyLjMgNC42LTE1LjggNy4xLTMyLjkgMy00OC45LTIwLjEtNzcuNiAxMC45LTE2MS41IDcwLTIyMC43UzIxOS4zIDE4IDI5Ni44IDM4LjFjMTYgNC4xIDMzIDEuNiA0OC45LTMgNy4xLTIgMTQuNi0zLjEgMjIuMy0zLjF6TTI0Ni43IDE2N2MtNTIgMTUuMi05Ni41IDU5LjctMTExLjcgMTExLjctMy43IDEyLjctMTcuMSAyMC0yOS44IDE2LjNTODUuMiAyNzggODkgMjY1LjNjMTkuOC02Ny43IDc2LjYtMTI0LjUgMTQ0LjMtMTQ0LjMgMTIuNy0zLjcgMjYuMSAzLjYgMjkuOCAxNi4zcy0zLjYgMjYuMS0xNi4zIDI5Ljh6Il0KICAgIH07CiAgICBmYVdpbmRvd1Jlc3RvcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAid2luZG93LXJlc3RvcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJkMiIsICJNNTEyIDgwTDIyNCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYtNDggMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xOTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNjggMjg4bC0zMjAgMCAwIDEyOGMwIDguOCA3LjIgMTYgMTYgMTZsMjg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4ek02NCAxNjBsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5IZWFydHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWhlYXJ0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgImdyaW4taGVhcnRzIl0sICJmNTg0IiwgIk00NjQgMjU2YzAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM0OCAzNzAuOSA0OCAyNTZjMC0zLjUgLjEtNy4xIC4zLTEwLjYtMTQtMTMuOS0yOS43LTMzLjEtMzkuMy01Ni43LTUuOCAyMS40LTguOSA0NC04LjkgNjcuMyAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2UzUxMiAzOTcuNCA1MTIgMjU2YzAtMjMuMy0zLjEtNDUuOS04LjktNjcuMy05LjYgMjMuNy0yNS40IDQyLjgtMzkuMyA1Ni43IC4yIDMuNSAuMyA3IC4zIDEwLjZ6TTM2OCA1OC45YzExLjctNiAyNC41LTkuNiAzNy43LTEwLjYtNDIuMS0zMC40LTkzLjgtNDguMy0xNDkuNy00OC4zUzE0OC40IDE3LjkgMTA2LjMgNDguM2MxMy4yIDEgMjYgNC42IDM3LjcgMTAuNiAxMy44LTcuMSAyOS4zLTEwLjkgNDUuMS0xMC45bDIuOSAwYzguOSAwIDE3LjYgMS4yIDI1LjggMy41IDEyLjQtMi4zIDI1LjItMy41IDM4LjItMy41czI1LjggMS4yIDM4LjIgMy41YzguMi0yLjMgMTYuOS0zLjUgMjUuOC0zLjVsMi45IDBjMTUuOCAwIDMxLjMgMy44IDQ1LjEgMTAuOXptNC4yIDI0My40Yy0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCAxOS44IDU1LjkgNzMuMSA5NS45IDEzNS44IDk1LjkgNjIuNyAwIDExNi00MC4xIDEzNS44LTk2IDQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOHpNMzIyLjkgOTZMMzIwIDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMWMtOS41LTkuNS0yMi41LTE0LjktMzYtMTQuOXptLTE4OCAxNC45Yy05LjUtOS41LTIyLjUtMTQuOS0zNi0xNC45TDk2IDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMXoiXQogICAgfTsKICAgIGZhR3JpbkhlYXJ0cyA9IGZhRmFjZUdyaW5IZWFydHM7CiAgICBmYUZhY2VLaXNzQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNywgImtpc3MtYmVhbSJdLCAiZjU5NyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTY0LTkyYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhS2lzc0JlYW0gPSBmYUZhY2VLaXNzQmVhbTsKICAgIGZhRmlsZVBkZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBkZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWMxIiwgIk0yMDggNDhMOTYgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwIDQ4LTgwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjI5LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzOTcuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMTQ5LjUtNDggMCAwLTEyOC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zNDguMSAxNjBMMjU2IDY3LjkgMjU2IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTI0MCAzODBsMzIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MHMtMjYuOSA2MC02MCA2MGwtMTIgMCAwIDI4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDgwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMTIgMCAwIDQwIDEyIDB6bTk2LTgwbDMyIDBjMjguNyAwIDUyIDIzLjMgNTIgNTJsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MmwtMzIgMGMtMTEgMC0yMC05LTIwLTIwbDAtMTI4YzAtMTEgOS0yMCAyMC0yMHptMzIgMTI4YzYuNiAwIDEyLTUuNCAxMi0xMmwwLTY0YzAtNi42LTUuNC0xMi0xMi0xMmwtMTIgMCAwIDg4IDEyIDB6bTc2LTEwOGMwLTExIDktMjAgMjAtMjBsNDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCAyNCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtMjggMCAwIDQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaWRlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aWRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE1LCAiZ3Jpbi1hbHQiXSwgImY1ODEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMjI0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTk2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhR3JpbkFsdCA9IGZhRmFjZUdyaW5XaWRlOwogICAgZmFGYWNlTGF1Z2hTcXVpbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtc3F1aW50Il0sICJmNTliIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTEyNS4yIDc2LjRjLTYuNS0xNCA1LTI4LjQgMjAuNC0yOC40bDIyMC44IDBjMTUuNCAwIDI2LjggMTQuNCAyMC40IDI4LjQtMjIuOCA0OS40LTcyLjggODMuNi0xMzAuOCA4My42cy0xMDcuOS0zNC4yLTEzMC44LTgzLjZ6bS0yLjYtMTczLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhTGF1Z2hTcXVpbnQgPSBmYUZhY2VMYXVnaFNxdWludDsKICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzLXdpbmstaGVhcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg1MzYsICJraXNzLXdpbmstaGVhcnQiXSwgImY1OTgiLCAiTTM4NiA0MzkuNWMtMjkuMiAxNS42LTYyLjUgMjQuNS05OCAyNC41LTExNC45IDAtMjA4LTkzLjEtMjA4LTIwOFMxNzMuMiA0OCAyODggNDhjMTEzLjIgMCAyMDUuMiA5MC40IDIwNy45IDIwMi45IDE0LjMgMS41IDI4LjYgNiA0MS45IDEzLjcgMiAxLjIgNCAyLjQgNS45IDMuNyAuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNS44LTEyLjktMTItMjguNS0xNy4yLTQ1LjJ6TTI1NiAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtMTIuMy00LjYtMjMuNS0xMi4yLTMyIDcuNi04LjUgMTIuMi0xOS43IDEyLjItMzIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLTQ4LTQ4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTUyLTQ0bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHpNNTQyLjggMzUwYy0yLjItMTguMy0xMi45LTM0LjYtMjguOS00My44LTI4LjEtMTYuMi02My45LTYuNi04MC4xIDIxLjVsLTIuNyA0LjZjLTI0LjUgNDIuNSA3LjkgMTE3LjkgMjQuNCAxNTAuOCA1LjEgMTAuMSAxNS41IDE2LjEgMjYuOCAxNS41IDM2LjctMi4yIDExOC4yLTExLjcgMTQyLjgtNTQuMmwyLjctNC42YzE2LjItMjguMSA2LjYtNjMuOS0yMS41LTgwLjEtMTYtOS4yLTM1LjQtMTAuNC01Mi40LTMuMWwtOS44IDQuMi0xLjMtMTAuNnoiXQogICAgfTsKICAgIGZhS2lzc1dpbmtIZWFydCA9IGZhRmFjZUtpc3NXaW5rSGVhcnQ7CiAgICBmYUNvcHkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29weSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGM1IiwgIk0zODQgMzM2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzMuNSAwYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsNTguNSA1OC41YzMgMyA0LjcgNy4xIDQuNyAxMS4zTDQwMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2ek0xOTIgMzg0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzcwLjcgMTguN0MzNTguNyA2LjcgMzQyLjUgMCAzMjUuNSAwTDE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTQ4IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDAgMC00OC0xNiAweiJdCiAgICB9OwogICAgZmFDaGVzc0tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCAiZjQzZiIsICJNMjI0LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDgwIDE2MS44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzU3LjIgMzc0LjUgNDA1LjYgNDM1YzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw3OS40IDUxMmMtMjYuMiAwLTQ3LjQtMjEuMi00Ny40LTQ3LjQgMC0xMC44IDMuNy0yMS4yIDEwLjQtMjkuNkw5MC44IDM3NC41IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTYxLjggMCAwLTgwLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMzEuOCA0MDBsLTMuNiA0LjQtNDcuNiA1OS42IDI4Ni42IDAtNDcuNi01OS42LTMuNi00LjQtMTg0LjMgMHptMS4xLTQ4LjVsLjMgLjUgMTgxLjYgMCAuMy0uNSA3OC4zLTE0My41LTMzOC43IDAgNzguMyAxNDMuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxODQ2LCAicGx1cy1zcXVhcmUiXSwgImYwZmUiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c1NxdWFyZSA9IGZhU3F1YXJlUGx1czsKICAgIGZhRmlsZUNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jb2RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzkiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTE3MC4yIDI5NS42YzguNi0xMC4xIDcuNS0yNS4yLTIuNi0zMy44cy0yNS4yLTcuNS0zMy44IDIuNmwtNDggNTZjLTcuNyA5LTcuNyAyMi4yIDAgMzEuMmw0OCA1NmM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44bC0zNC42LTQwLjQgMzQuNi00MC40em04MC0zMS4yYy04LjYtMTAuMS0yMy44LTExLjItMzMuOC0yLjZzLTExLjIgMjMuOC0yLjYgMzMuOGwzNC42IDQwLjQtMzQuNiA0MC40Yy04LjYgMTAuMS03LjUgMjUuMiAyLjYgMzMuOHMyNS4yIDcuNSAzMy44LTIuNmw0OC01NmM3LjctOSA3LjctMjIuMiAwLTMxLjJsLTQ4LTU2eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbldpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ3Jpbi13aW5rIl0sICJmNThjIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhR3JpbldpbmsgPSBmYUZhY2VHcmluV2luazsKICAgIGZhTW9uZXlCaWxsMSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC1hbHQiXSwgImYzZDEiLCAiTTExMiAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMjg4IDBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC0xNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0bC0yODggMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMjU2IDE2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptLTE2IDQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxBbHQgPSBmYU1vbmV5QmlsbDE7CiAgICBmYUV5ZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImV5ZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcwIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTE3Ni45IDExMS4xYzMyLjEtMTguOSA2OS4yLTMxLjEgMTExLjEtMzEuMSA2NS4yIDAgMTE4LjggMjkuNiAxNTkuOSA2Ny43IDM4LjUgMzUuNyA2NS4xIDc4LjMgNzguNiAxMDguMy0xMy42IDMwLTQwLjIgNzIuNS03OC42IDEwOC4zLTMuMSAyLjgtNi4yIDUuNi05LjQgOC40TDM5My44IDMyOGMxNC0yMC41IDIyLjItNDUuMyAyMi4yLTcyIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4LTI2LjcgMC01MS41IDguMi03MiAyMi4ybC0zOS4xLTM5LjF6bTE4MiAxODJsLTEwOC0xMDhjMTEuMS01LjggMjMuNy05LjEgMzcuMS05LjEgNDQuMiAwIDgwIDM1LjggODAgODAgMCAxMy40LTMuMyAyNi05LjEgMzcuMXpNMTAzLjQgMTczLjJsLTM0LTM0Yy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNkwzNTIuMiA0MjJjLTIwIDYuNC00MS40IDEwLTY0LjIgMTAtNjUuMiAwLTExOC44LTI5LjYtMTU5LjktNjcuNy0zOC41LTM1LjctNjUuMS03OC4zLTc4LjYtMTA4LjMgMTAuNC0yMy4xIDI4LjYtNTMuNiA1NC04Mi44eiJdCiAgICB9OwogICAgZmFGaWxlV29yZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXdvcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjMiIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptNzEuMyAyNzQuMmMtMy4yLTEyLjktMTYuMi0yMC43LTI5LjEtMTcuNVM4NS41IDI3MyA4OC43IDI4NS44bDMyIDEyOGMyLjUgMTAuMiAxMS40IDE3LjUgMjEuOSAxOC4xczIwLjEtNS43IDIzLjgtMTUuNWwyNS41LTY4LjEgMjUuNSA2OC4xYzMuNyA5LjggMTMuMyAxNi4xIDIzLjggMTUuNXMxOS40LTcuOSAyMS45LTE4LjFsMzItMTI4YzMuMi0xMi45LTQuNi0yNS45LTE3LjUtMjkuMXMtMjUuOSA0LjYtMjkuMSAxNy41bC0xMy4zIDUzLjItMjAuOS01NS44QzIxMSAyNjIuMiAyMDIgMjU2IDE5MiAyNTZzLTE5IDYuMi0yMi41IDE1LjZsLTIwLjkgNTUuOC0xMy4zLTUzLjJ6Il0KICAgIH07CiAgICBmYUZhY2VBbmdyeSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWFuZ3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCAiYW5ncnkiXSwgImY1NTYiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0xNDRjMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTBzLTc1LjcgMTkuOC05Ny41IDUwYy03LjcgMTAuOC01LjMgMjUuOCA1LjUgMzMuNXMyNS44IDUuMyAzMy41LTUuNWMxMy4xLTE4LjIgMzQuNC0zMCA1OC41LTMwem0tODAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0uMyA5LjcgMy4yYzEwLjUgMy41IDIxLjgtMi4yIDI1LjMtMTIuNnMtMi4yLTIxLjgtMTIuNi0yNS4zbC05Ni0zMmMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi42czIuMiAyMS44IDEyLjYgMjUuM2wyOC45IDkuNmMtNC4xIDUuNC02LjYgMTIuMS02LjYgMTkuNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTkyLTMyYzAtNy4zLTIuNC0xNC02LjYtMTkuNGwyOC45LTkuNmMxMC41LTMuNSAxNi4xLTE0LjggMTIuNi0yNS4zcy0xNC44LTE2LjEtMjUuMy0xMi42bC05NiAzMmMtMTAuNSAzLjUtMTYuMSAxNC44LTEyLjYgMjUuM3MxNC44IDE2LjEgMjUuMyAxMi42bDkuNy0zLjIgMCAuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFBbmdyeSA9IGZhRmFjZUFuZ3J5OwogICAgZmFDaGVzc0tuaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1rbmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIyXSwgImY0NDEiLCAiTTIzMi0zMmMxMTAuNSAwIDIwMCA4OS41IDIwMCAyMDBsMCAxMjcuN2MwIDE4LjktNi4xIDM3LjEtMTcuMiA1Mi4ybC01LjEgNi4yLTM2LjMgNDAuNyAzMi4xIDQwLjJjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42bC0uMiA0LjhjLTIuNCAyMy45LTIyLjYgNDIuNS00Ny4xIDQyLjVsLTI4OS4yIDAtNC44LS4yYy0yMy45LTIuNC00Mi41LTIyLjYtNDIuNS00Ny4xIDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZsMzcuNi00NyAwLTI0LjNjMC0yNC4zIDEwLjEtNDcuNiAyNy44LTY0LjJsNjMuNS01OS41LTE3LjQgMC0uMiAuMmMtMjAuMyAyMC4zLTQ5LjYgMjguMi03Ny4xIDIxLjFsLTUuNS0xLjZjLTMwLjktMTAuMy01Mi4zLTM4LTU0LjktNzAuMWwtLjItNi40IDAtMS40YzAtMTkuNyA3LjEtMzguOCAxOS45LTUzLjhsNzYuMS04OC44IDAtNDcuMSAuMS0yLjVDMTEzLjQtMjIuNiAxMjMuNi0zMiAxMzYtMzJsOTYgMHpNODAuNyA0NjRsMjg2LjYgMC0zOC40LTQ4LTIwOS45IDAtMzguNCA0OHpNMTYwIDQ4YzAgNS43LTIuMSAxMS4zLTUuOCAxNS42TDcyLjMgMTU5LjFDNjcgMTY1LjQgNjQgMTczLjQgNjQgMTgxLjdsMCAxLjQgLjQgNS4yYzEuOSAxMS45IDEwLjMgMjEuOSAyMS45IDI1LjhsNC41IDEuMWMxMC41IDEuOSAyMS4zLTEuNCAyOS05bDcuMi03LjIgMy43LTNjMy45LTIuNiA4LjUtNCAxMy4zLTRsODggMGM5LjggMCAxOC43IDYgMjIuMyAxNS4yczEuMyAxOS42LTUuOSAyNi4zbC0xMDcuOCAxMDFjLTguMSA3LjYtMTIuNyAxOC4xLTEyLjcgMjkuMmwwIDQuMyAyMDUuMiAwIDQwLjctNDUuOCAyLjMtMi44YzUuMS02LjggNy44LTE1LjIgNy44LTIzLjdMMzg0IDE2OGMwLTgzLjktNjguMS0xNTItMTUyLTE1MmwtNzIgMCAwIDMyem0zMiA3MmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgImdyaW4tYmVhbSJdLCAiZjU4MiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW0gPSBmYUZhY2VHcmluQmVhbTsKICAgIGZhSGFuZFBlYWNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcGVhY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk2XSwgImYyNWIiLCAiTTIxOSAxLjRjLTM1LjItMy43LTY2LjYgMjEuOC03MC4zIDU3bC02LjQgNjAuNi0xNy40LTQ5LjRDMTEzLjIgMzYuMyA3Ni42IDE4LjggNDMuMyAzMC41Uy03LjYgNzguOCA0LjEgMTEyLjFMNTYuOSAyNjIuMkM0MS43IDI3Ni43IDMyLjIgMjk3LjMgMzIuMiAzMjBsMCAyNGMwIDkyLjggNzUuMiAxNjggMTY4IDE2OGw0OCAwYzkyLjggMCAxNjgtNzUuMiAxNjgtMTY4bDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2LS43IDAtMS41IDAtMi4yIDBsNS45LTU2LjNjMy43LTM1LjItMjEuOC02Ni42LTU3LTcwLjN6bS0uMiAxNTUuNGMtNi42IDEwLjEtMTAuNSAyMi4yLTEwLjUgMzUuMmwwIDQ4YzAgLjcgMCAxLjQgMCAyLTUuMS0xLjMtMTAuNS0yLTE2LTJsLTcuNCAwLTUuNC0xNS4zIDE3LTE2MS4zYy45LTguOCA4LjgtMTUuMiAxNy42LTE0LjJzMTUuMiA4LjggMTQuMiAxNy42bC05LjUgOTAuMXpNNzkuNiA4NS42bDU0LjMgMTU0LjQtMjEuNyAwYy00IDAtOCAuMy0xMS45IC45TDQ5LjQgOTYuMmMtMi45LTguMyAxLjUtMTcuNSA5LjgtMjAuNHMxNy41IDEuNSAyMC40IDkuOHpNMjU2LjIgMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4em0zOC40IDEwOGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDUuNSAwIDEwLjktLjcgMTYtMmwwIDEwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC00OCAwYy02Ni4zIDAtMTIwLTUzLjctMTIwLTEyMGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDgwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMGMzNS4zIDAgNjQtMjguNyA2NC02NCAwLS43IDAtMS40IDAtMiA1LjEgMS4zIDEwLjUgMiAxNiAyIDcuOSAwIDE1LjQtMS40IDIyLjQtNHptNzMuNi0yOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OHoiXQogICAgfTsKICAgIGZhQ29tcGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgImYxNGUiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzA2LjcgNjkuMUwxNjIuNCAzODAuNmMtMTkuNCA3LjUtMzguNS0xMS42LTMxLTMxbDU1LjUtMTQ0LjNjMy4zLTguNSA5LjktMTUuMSAxOC40LTE4LjRsMTQ0LjMtNTUuNWMxOS40LTcuNSAzOC41IDExLjYgMzEgMzFMMzI1LjEgMzA2LjdjLTMuMyA4LjUtOS45IDE1LjEtMTguNCAxOC40ek0yODggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sICJmMGM4IiwgIk0zODQgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3JpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxMiwgImdyaW4iXSwgImY1ODAiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmluID0gZmFGYWNlR3JpbjsKICAgIGZhRmFjZVNtaWxlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NzgsICJzbWlsZSJdLCAiZjExOCIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzcuMyA2My40QzE5Mi4zIDMzNSAyMTguNCAzNTIgMjU2IDM1MnM2My43LTE3IDc4LjctMzIuNmM5LjItOS42IDI0LjQtOS45IDMzLjktLjdzOS45IDI0LjQgLjcgMzMuOWMtMjIuMSAyMy02MCA0Ny40LTExMy4zIDQ3LjRzLTkxLjItMjQuNC0xMTMuMy00Ny40Yy05LjItOS42LTguOS0yNC44IC43LTMzLjlzMjQuOC04LjkgMzMuOSAuN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTbWlsZSA9IGZhRmFjZVNtaWxlOwogICAgZmFGYWNlU21pbGVCZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgInNtaWxlLWJlYW0iXSwgImY1YjgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFTbWlsZUJlYW0gPSBmYUZhY2VTbWlsZUJlYW07CiAgICBmYUZvbGRlckNsb3NlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItY2xvc2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxODUiLCAiTTQ0OCA0MDBMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNDQgNDE2IDAgMCAxNDRjMCA4LjgtNy4yIDE2LTE2IDE2em0xNi0yMDhsLTQxNiAwIDAtOTZjMC04LjggNy4yLTE2IDE2LTE2bDEzOC43IDBjMy41IDAgNi44IDEuMSA5LjYgMy4yTDI1MC43IDExMmMxMy44IDEwLjQgMzAuNyAxNiA0OCAxNkw0NDggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4ek02NCA0NDhsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjk4LjcgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI0MS4xIDQ0LjhDMjMwIDM2LjUgMjE2LjUgMzIgMjAyLjcgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhS2V5Ym9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAia2V5Ym9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ZTNdLCAiZjExYyIsICJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNzYgMzIwbDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMjI0IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptLTcyLTcyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUZhY2VSb2xsaW5nRXllcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXJvbGxpbmctZXllcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU4MCwgIm1laC1yb2xsaW5nLWV5ZXMiXSwgImY1YTUiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDM3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0xNjAgMjY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MCAwLTkuNSAzLjMtMTguMSA4LjgtMjUgMy4yIDE0LjMgMTYgMjUgMzEuMiAyNXMyOC0xMC43IDMxLjItMjVjNS41IDYuOCA4LjggMTUuNSA4LjggMjUgMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTAgNDBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTE5Mi00MGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYweiJdCiAgICB9OwogICAgZmFNZWhSb2xsaW5nRXllcyA9IGZhRmFjZVJvbGxpbmdFeWVzOwogICAgZmFGYWNlR3JpbWFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW1hY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTYsICJncmltYWNlIl0sICJmNTdmIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE1MiAzNTJjMCAxMS45IDguNiAyMS44IDIwIDIzLjdsMC00Ny4zYy0xMS40IDEuOS0yMCAxMS44LTIwIDIzLjd6bTg0IDI0bDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTY0IDBsMC00OC0yNCAwIDAgNDggMjQgMHptNDAtLjNjMTEuNC0xLjkgMjAtMTEuOCAyMC0yMy43cy04LjYtMjEuOC0yMC0yMy43bDAgNDcuM3pNMTc2IDI4OGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTYwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6bTAtMTEyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUdyaW1hY2UgPSBmYUZhY2VHcmltYWNlOwogICAgZmFDaXJjbGVEb3QgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI4MCwgImRvdC1jaXJjbGUiXSwgImYxOTIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTQ2NGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6bTAgMzA0YTk2IDk2IDAgMSAxIDAtMTkyIDk2IDk2IDAgMSAxIDAgMTkyeiJdCiAgICB9OwogICAgZmFEb3RDaXJjbGUgPSBmYUNpcmNsZURvdDsKICAgIGZhT2JqZWN0R3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LWdyb3VwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNDciLCAiTTQwIDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQ4IDU5LjNjMTYtNi41IDI4LjktMTkuMyAzNS4zLTM1LjNsMzI5LjMgMGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDI2NS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMzI5LjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yNjUuM3pNNTEyIDBjLTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MEwxMjMuMyA0MEMxMTMuOSAxNi41IDkwLjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDkwLjkgMTYuNSAxMTMuOSA0MCAxMjMuM2wwIDI2NS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDMyOS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTI2NS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NHpNNDg4IDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDQyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQyNCAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0xOTIgMTc2bDg4IDAgMCA1Ni04OCAwIDAtNTZ6bS04LTQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDcyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEwNCAwem03MiAxODRsMCAyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYzAgMTQuNi0zLjkgMjguMi0xMC43IDQwbDI2LjcgMCAwIDU2LTg4IDAgMC0xNi40Yy0yLjYgLjMtNS4zIC40LTggLjRsLTMyIDB6Il0KICAgIH07CiAgICBmYUZhY2VGbHVzaGVkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZmx1c2hlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU2MywgImZsdXNoZWQiXSwgImY1NzkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xNjAgMjQ4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjE2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTE5MiAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTI4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEyOCAwek0xNjAgMTc2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptMCAxMjhhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTE0NC04MGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0xMjggMGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6Il0KICAgIH07CiAgICBmYUZsdXNoZWQgPSBmYUZhY2VGbHVzaGVkOwogICAgZmFTdGFySGFsZlN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYtc3Ryb2tlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0YXItaGFsZi1hbHQiXSwgImY1YzAiLCAiTTMwOS41LTE4LjljLTQuMS04LTEyLjQtMTMuMS0yMS40LTEzLjFzLTE3LjMgNS4xLTIxLjQgMTMuMUwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI4OC4xIDQxNy42IDQzMi40IDQ5MWM4IDQuMSAxNy43IDMuMyAyNS0yczExLTE0LjIgOS42LTIzLjJMNDQxLjcgMzA1LjkgNTU2LjEgMTkxLjRjNi40LTYuNCA4LjYtMTUuOCA1LjgtMjQuNHMtMTAuMS0xNC45LTE5LjEtMTYuM0wzODMgMTI1LjMgMzA5LjUtMTguOXpNMjY0LjEgOTEuOGwwIDI4NC4xLTEwMC4xIDUwLjkgMTkuOC0xMjUuNWMxLjItNy42LTEuMy0xNS4zLTYuNy0yMC43bC04OS44LTg5LjkgMTI1LjUtMjBjNy42LTEuMiAxNC4xLTYgMTcuNi0xMi44bDMzLjgtNjYuMnptNDggMjg0LjFsMC0yODQuMSAzMy44IDY2LjJjMy41IDYuOCAxMCAxMS42IDE3LjYgMTIuOGwxMjUuNSAyMC04OS44IDg5LjljLTUuNCA1LjQtNy45IDEzLjEtNi43IDIwLjdsMTkuOCAxMjUuNS0xMDAuMS01MC45eiJdCiAgICB9OwogICAgZmFTdGFySGFsZkFsdCA9IGZhU3RhckhhbGZTdHJva2U7CiAgICBmYUZpbGVWaWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXZpZGVvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzgiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTgwIDI4OGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yNCAzNSAzNWMzLjIgMy4yIDcuNSA1IDEyIDUgOS40IDAgMTctNy42IDE3LTE3bDAtOTQuMWMwLTkuNC03LjYtMTctMTctMTctNC41IDAtOC44IDEuOC0xMiA1bC0zNSAzNSAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2giXSwgImY1OTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxhdWdoID0gZmFGYWNlTGF1Z2g7CiAgICBmYUhhbmRQb2ludGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjVhIiwgIk0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDEzNmMwIDEwLjMgNi42IDE5LjUgMTYuNCAyMi44czIwLjYtLjEgMjYuOC04LjNjMy0zLjkgNy42LTYuNCAxMi44LTYuNCA4LjggMCAxNiA3LjIgMTYgMTYgMCAxMC4zIDYuNiAxOS41IDE2LjQgMjIuOHMyMC42LS4xIDI2LjgtOC4zYzMtMy45IDcuNi02LjQgMTIuOC02LjQgNy44IDAgMTQuMyA1LjYgMTUuNyAxMyAxLjYgOC4yIDcuMyAxNS4xIDE1LjEgMThzMTYuNyAxLjYgMjMuMy0zLjZjMi43LTIuMSA2LjEtMy40IDkuOS0zLjQgOC44IDAgMTYgNy4yIDE2IDE2bDAgMTIwYzAgMzkuOC0zMi4yIDcyLTcyIDcybC0xMTYuNiAwYy0zNy40IDAtNzIuNC0xOC43LTkzLjItNDkuOUw1MC43IDMxMi45Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40TDExNiAzNTMuMmM1LjkgOC44IDE2LjggMTIuNyAyNi45IDkuN3MxNy0xMi40IDE3LTIzTDE2MCA2NHpNMTc2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTk3LjdDOTEuMiAyMzggNTUuNSAyMzIuOCAyOC41IDI1MC43LS45IDI3MC40LTguOSAzMTAuMSAxMC44IDMzOS41TDc4LjMgNDQwLjhjMjkuNyA0NC41IDc5LjYgNzEuMiAxMzMuMSA3MS4yTDMyOCA1MTJjNjYuMyAwIDEyMC01My43IDEyMC0xMjBsMC0xMjBjMC0zNS4zLTI4LjctNjQtNjQtNjQtNC41IDAtOC44IC41LTEzIDEuMy0xMS43LTE1LjQtMzAuMi0yNS4zLTUxLTI1LjMtNi45IDAtMTMuNSAxLjEtMTkuNyAzLjEtMTEuNi0xNi40LTMwLjctMjcuMS01Mi4zLTI3LjEtMi43IDAtNS40IC4yLTggLjVMMjQwIDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0em00OCAzMDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6bTQ4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2em04MCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnoiXQogICAgfTsKICAgIGZhUmVnaXN0ZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWdpc3RlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgImYyNWQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDE0NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2IDM0LjQgMCA0MSA2OC4zYzYuOCAxMS40IDIxLjYgMTUgMzIuOSA4LjJzMTUtMjEuNiA4LjItMzIuOWwtMzAuMi01MC4zYzI0LjYtMTEuNSA0MS42LTM2LjQgNDEuNi02NS4zIDAtMzkuOC0zMi4yLTcyLTcyLTcybC04MCAwem03MiA5NmwtNDggMCAwLTQ4IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMHoiXQogICAgfTsKICAgIGljb25zMiA9IHsKICAgICAgZmFTcXVhcmVNaW51cywKICAgICAgZmFNaW51c1NxdWFyZSwKICAgICAgZmFDYWxlbmRhckNoZWNrLAogICAgICBmYUZhY2VLaXNzLAogICAgICBmYUtpc3MsCiAgICAgIGZhUGFzdGUsCiAgICAgIGZhRmlsZUNsaXBib2FyZCwKICAgICAgZmFIYW5kUG9pbnRMZWZ0LAogICAgICBmYUZpbGVFeGNlbCwKICAgICAgZmFFbnZlbG9wZSwKICAgICAgZmFTcXVhcmVDYXJldERvd24sCiAgICAgIGZhQ2FyZXRTcXVhcmVEb3duLAogICAgICBmYVRydWNrLAogICAgICBmYUJlbGwsCiAgICAgIGZhTWVzc2FnZSwKICAgICAgZmFDb21tZW50QWx0LAogICAgICBmYUZhY2VEaXp6eSwKICAgICAgZmFEaXp6eSwKICAgICAgZmFDYWxlbmRhckRheXMsCiAgICAgIGZhQ2FsZW5kYXJBbHQsCiAgICAgIGZhSGFuZFBvaW50VXAsCiAgICAgIGZhSGFuZExpemFyZCwKICAgICAgZmFTcXVhcmVGdWxsLAogICAgICBmYUNpcmNsZVBhdXNlLAogICAgICBmYVBhdXNlQ2lyY2xlLAogICAgICBmYUhhcmREcml2ZSwKICAgICAgZmFIZGQsCiAgICAgIGZhRmlsZVppcHBlciwKICAgICAgZmFGaWxlQXJjaGl2ZSwKICAgICAgZmFGbG9wcHlEaXNrLAogICAgICBmYVNhdmUsCiAgICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsCiAgICAgIGZhR3JpblRvbmd1ZVNxdWludCwKICAgICAgZmFDYW1lcmEsCiAgICAgIGZhQ2FtZXJhQWx0LAogICAgICBmYUZhY2VHcmluU3RhcnMsCiAgICAgIGZhR3JpblN0YXJzLAogICAgICBmYUV5ZSwKICAgICAgZmFGYWNlU2FkVGVhciwKICAgICAgZmFTYWRUZWFyLAogICAgICBmYVNoYXJlRnJvbVNxdWFyZSwKICAgICAgZmFTaGFyZVNxdWFyZSwKICAgICAgZmFOb3RlU3RpY2t5LAogICAgICBmYVN0aWNreU5vdGUsCiAgICAgIGZhSGFuZEJhY2tGaXN0LAogICAgICBmYUhhbmRSb2NrLAogICAgICBmYUNoZXNzUXVlZW4sCiAgICAgIGZhRmFjZUdyaW5UZWFycywKICAgICAgZmFHcmluVGVhcnMsCiAgICAgIGZhUGVuVG9TcXVhcmUsCiAgICAgIGZhRWRpdCwKICAgICAgZmFGYWNlR3JpbkJlYW1Td2VhdCwKICAgICAgZmFHcmluQmVhbVN3ZWF0LAogICAgICBmYUNsb2NrLAogICAgICBmYUNsb2NrRm91ciwKICAgICAgZmFGYWNlTGF1Z2hXaW5rLAogICAgICBmYUxhdWdoV2luaywKICAgICAgZmFQYXBlclBsYW5lLAogICAgICBmYUhlYXJ0LAogICAgICBmYUZvbnRBd2Vzb21lOiBmYUZvbnRBd2Vzb21lMiwKICAgICAgZmFGb250QXdlc29tZUZsYWc6IGZhRm9udEF3ZXNvbWVGbGFnMiwKICAgICAgZmFGb250QXdlc29tZUxvZ29GdWxsOiBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwyLAogICAgICBmYUNsb25lLAogICAgICBmYUZvbGRlck9wZW4sCiAgICAgIGZhV2luZG93TWluaW1pemUsCiAgICAgIGZhU3RhckhhbGYsCiAgICAgIGZhQWxhcm1DbG9jaywKICAgICAgZmFOZXdzcGFwZXIsCiAgICAgIGZhSG9zcGl0YWwsCiAgICAgIGZhSG9zcGl0YWxBbHQsCiAgICAgIGZhSG9zcGl0YWxXaWRlLAogICAgICBmYUNpcmNsZVN0b3AsCiAgICAgIGZhU3RvcENpcmNsZSwKICAgICAgZmFPYmplY3RVbmdyb3VwLAogICAgICBmYUNvbW1lbnQsCiAgICAgIGZhQ2hlc3NQYXduLAogICAgICBmYUNhbGVuZGFyUGx1cywKICAgICAgZmFDbGlwYm9hcmQsCiAgICAgIGZhVGh1bWJzRG93biwKICAgICAgZmFJZEJhZGdlLAogICAgICBmYVNxdWFyZUNoZWNrLAogICAgICBmYUNoZWNrU3F1YXJlLAogICAgICBmYUNoZXNzQmlzaG9wLAogICAgICBmYUVudmVsb3BlT3BlbiwKICAgICAgZmFDaXJjbGVYbWFyaywKICAgICAgZmFUaW1lc0NpcmNsZSwKICAgICAgZmFYbWFya0NpcmNsZSwKICAgICAgZmFTcXVhcmVDYXJldFVwLAogICAgICBmYUNhcmV0U3F1YXJlVXAsCiAgICAgIGZhRmlsZUltYWdlLAogICAgICBmYVNxdWFyZUNhcmV0UmlnaHQsCiAgICAgIGZhQ2FyZXRTcXVhcmVSaWdodCwKICAgICAgZmFTdW4sCiAgICAgIGZhSW1hZ2UsCiAgICAgIGZhTGlnaHRidWxiLAogICAgICBmYUFkZHJlc3NDYXJkLAogICAgICBmYUNvbnRhY3RDYXJkLAogICAgICBmYVZjYXJkLAogICAgICBmYUZhY2VNZWgsCiAgICAgIGZhTWVoLAogICAgICBmYU1hcCwKICAgICAgZmFIYW5kUG9pbnREb3duLAogICAgICBmYUZhY2VNZWhCbGFuaywKICAgICAgZmFNZWhCbGFuaywKICAgICAgZmFGYWNlR3JpblRvbmd1ZSwKICAgICAgZmFHcmluVG9uZ3VlLAogICAgICBmYUZ1dGJvbCwKICAgICAgZmFGdXRib2xCYWxsLAogICAgICBmYVNvY2NlckJhbGwsCiAgICAgIGZhRmFjZVN1cnByaXNlLAogICAgICBmYVN1cnByaXNlLAogICAgICBmYUZvbGRlciwKICAgICAgZmFGb2xkZXJCbGFuaywKICAgICAgZmFDbG91ZCwKICAgICAgZmFDaXJjbGUsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnQsCiAgICAgIGZhR3JpblNxdWludCwKICAgICAgZmFDaXJjbGVVc2VyLAogICAgICBmYVVzZXJDaXJjbGUsCiAgICAgIGZhUmVjdGFuZ2xlTGlzdCwKICAgICAgZmFMaXN0QWx0LAogICAgICBmYUhhbmQsCiAgICAgIGZhSGFuZFBhcGVyLAogICAgICBmYVRodW1ic1VwLAogICAgICBmYUJ1aWxkaW5nLAogICAgICBmYUNoZXNzUm9vaywKICAgICAgZmFDaXJjbGVRdWVzdGlvbiwKICAgICAgZmFRdWVzdGlvbkNpcmNsZSwKICAgICAgZmFGaWxlLAogICAgICBmYUZhY2VTYWRDcnksCiAgICAgIGZhU2FkQ3J5LAogICAgICBmYUNhbGVuZGFyTWludXMsCiAgICAgIGZhRmFjZVRpcmVkLAogICAgICBmYVRpcmVkLAogICAgICBmYUhhbmRQb2ludFJpZ2h0LAogICAgICBmYUNpcmNsZVVwLAogICAgICBmYUFycm93QWx0Q2lyY2xlVXAsCiAgICAgIGZhSGFuZFNjaXNzb3JzLAogICAgICBmYUdlbSwKICAgICAgZmFSZWN0YW5nbGVYbWFyaywKICAgICAgZmFSZWN0YW5nbGVUaW1lcywKICAgICAgZmFUaW1lc1JlY3RhbmdsZSwKICAgICAgZmFXaW5kb3dDbG9zZSwKICAgICAgZmFUcmFzaENhbiwKICAgICAgZmFUcmFzaEFsdCwKICAgICAgZmFMaWZlUmluZywKICAgICAgZmFDb3B5cmlnaHQsCiAgICAgIGZhQ2lyY2xlTGVmdCwKICAgICAgZmFBcnJvd0FsdENpcmNsZUxlZnQsCiAgICAgIGZhQ2FsZW5kYXIsCiAgICAgIGZhRmFjZUZyb3duT3BlbiwKICAgICAgZmFGcm93bk9wZW4sCiAgICAgIGZhQ2hhcnRCYXIsCiAgICAgIGZhQmFyQ2hhcnQsCiAgICAgIGZhSG91c2UsCiAgICAgIGZhSG9tZSwKICAgICAgZmFIb21lQWx0LAogICAgICBmYUhvbWVMZ0FsdCwKICAgICAgZmFGYWNlRnJvd24sCiAgICAgIGZhRnJvd24sCiAgICAgIGZhVXNlciwKICAgICAgZmFVc2VyQWx0LAogICAgICBmYVVzZXJMYXJnZSwKICAgICAgZmFTbm93Zmxha2UsCiAgICAgIGZhQm9va21hcmssCiAgICAgIGZhU3F1YXJlQ2FyZXRMZWZ0LAogICAgICBmYUNhcmV0U3F1YXJlTGVmdCwKICAgICAgZmFIYW5kc2hha2UsCiAgICAgIGZhSGFuZHNoYWtlQWx0LAogICAgICBmYUhhbmRzaGFrZVNpbXBsZSwKICAgICAgZmFGYWNlU21pbGVXaW5rLAogICAgICBmYVNtaWxlV2luaywKICAgICAgZmFGYWNlR3JpblNxdWludFRlYXJzLAogICAgICBmYUdyaW5TcXVpbnRUZWFycywKICAgICAgZmFGaWxlQXVkaW8sCiAgICAgIGZhQ2FsZW5kYXJYbWFyaywKICAgICAgZmFDYWxlbmRhclRpbWVzLAogICAgICBmYUNpcmNsZURvd24sCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVEb3duLAogICAgICBmYUZpbGVMaW5lcywKICAgICAgZmFGaWxlQWx0LAogICAgICBmYUZpbGVUZXh0LAogICAgICBmYUNvbW1lbnRzLAogICAgICBmYUNpcmNsZUNoZWNrLAogICAgICBmYUNoZWNrQ2lyY2xlLAogICAgICBmYU1vb24sCiAgICAgIGZhQ2xvc2VkQ2FwdGlvbmluZywKICAgICAgZmFJbWFnZXMsCiAgICAgIGZhQ2lyY2xlUmlnaHQsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodCwKICAgICAgZmFJZENhcmQsCiAgICAgIGZhRHJpdmVyc0xpY2Vuc2UsCiAgICAgIGZhQ2lyY2xlUGxheSwKICAgICAgZmFQbGF5Q2lyY2xlLAogICAgICBmYUZhY2VMYXVnaEJlYW0sCiAgICAgIGZhTGF1Z2hCZWFtLAogICAgICBmYUFkZHJlc3NCb29rLAogICAgICBmYUNvbnRhY3RCb29rLAogICAgICBmYUhvdXJnbGFzcywKICAgICAgZmFIb3VyZ2xhc3NFbXB0eSwKICAgICAgZmFIZWFkcGhvbmVzLAogICAgICBmYUhlYWRwaG9uZXNBbHQsCiAgICAgIGZhSGVhZHBob25lc1NpbXBsZSwKICAgICAgZmFGaWxlUG93ZXJwb2ludCwKICAgICAgZmFXaW5kb3dNYXhpbWl6ZSwKICAgICAgZmFDb21tZW50RG90cywKICAgICAgZmFDb21tZW50aW5nLAogICAgICBmYUZhY2VHcmluVG9uZ3VlV2luaywKICAgICAgZmFHcmluVG9uZ3VlV2luaywKICAgICAgZmFIb3VyZ2xhc3NIYWxmLAogICAgICBmYUhvdXJnbGFzczIsCiAgICAgIGZhQ3JlZGl0Q2FyZCwKICAgICAgZmFDcmVkaXRDYXJkQWx0LAogICAgICBmYUhhbmRTcG9jaywKICAgICAgZmFCZWxsU2xhc2gsCiAgICAgIGZhU3RhciwKICAgICAgZmFGbGFnLAogICAgICBmYUxlbW9uLAogICAgICBmYVdpbmRvd1Jlc3RvcmUsCiAgICAgIGZhRmFjZUdyaW5IZWFydHMsCiAgICAgIGZhR3JpbkhlYXJ0cywKICAgICAgZmFGYWNlS2lzc0JlYW0sCiAgICAgIGZhS2lzc0JlYW0sCiAgICAgIGZhRmlsZVBkZiwKICAgICAgZmFGYWNlR3JpbldpZGUsCiAgICAgIGZhR3JpbkFsdCwKICAgICAgZmFGYWNlTGF1Z2hTcXVpbnQsCiAgICAgIGZhTGF1Z2hTcXVpbnQsCiAgICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQsCiAgICAgIGZhS2lzc1dpbmtIZWFydCwKICAgICAgZmFDb3B5LAogICAgICBmYUNoZXNzS2luZywKICAgICAgZmFTcXVhcmVQbHVzLAogICAgICBmYVBsdXNTcXVhcmUsCiAgICAgIGZhRmlsZUNvZGUsCiAgICAgIGZhRmFjZUdyaW5XaW5rLAogICAgICBmYUdyaW5XaW5rLAogICAgICBmYU1vbmV5QmlsbDEsCiAgICAgIGZhTW9uZXlCaWxsQWx0LAogICAgICBmYUV5ZVNsYXNoLAogICAgICBmYUZpbGVXb3JkLAogICAgICBmYUZhY2VBbmdyeSwKICAgICAgZmFBbmdyeSwKICAgICAgZmFDaGVzc0tuaWdodCwKICAgICAgZmFGYWNlR3JpbkJlYW0sCiAgICAgIGZhR3JpbkJlYW0sCiAgICAgIGZhSGFuZFBlYWNlLAogICAgICBmYUNvbXBhc3MsCiAgICAgIGZhU3F1YXJlLAogICAgICBmYUZhY2VHcmluLAogICAgICBmYUdyaW4sCiAgICAgIGZhRmFjZVNtaWxlLAogICAgICBmYVNtaWxlLAogICAgICBmYUZhY2VTbWlsZUJlYW0sCiAgICAgIGZhU21pbGVCZWFtLAogICAgICBmYUZvbGRlckNsb3NlZCwKICAgICAgZmFLZXlib2FyZCwKICAgICAgZmFGYWNlUm9sbGluZ0V5ZXMsCiAgICAgIGZhTWVoUm9sbGluZ0V5ZXMsCiAgICAgIGZhRmFjZUdyaW1hY2UsCiAgICAgIGZhR3JpbWFjZSwKICAgICAgZmFDaXJjbGVEb3QsCiAgICAgIGZhRG90Q2lyY2xlLAogICAgICBmYU9iamVjdEdyb3VwLAogICAgICBmYUZhY2VGbHVzaGVkLAogICAgICBmYUZsdXNoZWQsCiAgICAgIGZhU3RhckhhbGZTdHJva2UsCiAgICAgIGZhU3RhckhhbGZBbHQsCiAgICAgIGZhRmlsZVZpZGVvLAogICAgICBmYUZhY2VMYXVnaCwKICAgICAgZmFMYXVnaCwKICAgICAgZmFIYW5kUG9pbnRlciwKICAgICAgZmFSZWdpc3RlcmVkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtc29saWQtc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvaW5kZXgubWpzCnZhciBwcmVmaXgzLCBmYTAsIGZhMSwgZmEyLCBmYTMsIGZhNCwgZmE1LCBmYTYsIGZhNywgZmE4LCBmYTksIGZhRG9sbGFyU2lnbiwgZmFEb2xsYXIsIGZhVXNkLCBmYURvZywgZmFUcnVja01vdmluZywgZmFSb3RhdGUsIGZhU3luY0FsdCwgZmFTcXVhcmVNaW51czIsIGZhTWludXNTcXVhcmUyLCBmYUFsaWduSnVzdGlmeSwgZmFDYWxlbmRhckNoZWNrMiwgZmFGYWNlS2lzczIsIGZhS2lzczIsIGZhS2l0Y2hlblNldCwgZmFEbmEsIGZhQ2hpbGRSZWFjaGluZywgZmFQYXN0ZTIsIGZhRmlsZUNsaXBib2FyZDIsIGZhTWV0ZW9yLCBmYUdlYXJzLCBmYUNvZ3MsIGZhRmlsZUNpcmNsZVBsdXMsIGZhSWNpY2xlcywgZmFBcnJvd1RyZW5kVXAsIGZhSGV4YWdvbk5vZGVzQm9sdCwgZmFRdWVzdGlvbiwgZmFIYW5kc0JvdW5kLCBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLCBmYUZpbGVBcnJvd0Rvd24sIGZhRmlsZURvd25sb2FkLCBmYVBlcnNvbkJvb3RoLCBmYUxvY3VzdCwgZmFSaWdodExvbmcsIGZhTG9uZ0Fycm93QWx0UmlnaHQsIGZhVHJ1Y2tEcm9wbGV0LCBmYUhhbmRIb2xkaW5nTWVkaWNhbCwgZmFIYW5kUG9pbnRMZWZ0MiwgZmFDYWxjdWxhdG9yLCBmYU1pbnVzLCBmYVN1YnRyYWN0LCBmYUFycm93VXBaQSwgZmFTb3J0QWxwaGFVcEFsdCwgZmFNaWNyb3Bob25lU2xhc2gsIGZhU3F1YXJlUGVuLCBmYVBlblNxdWFyZSwgZmFQZW5jaWxTcXVhcmUsIGZhSGFuZEZpc3QsIGZhRmlzdFJhaXNlZCwgZmFDb21tZW50U21zLCBmYVNtcywgZmFTaW1DYXJkLCBmYVNjYWxlQmFsYW5jZWQsIGZhQmFsYW5jZVNjYWxlLCBmYUNhciwgZmFBdXRvbW9iaWxlLCBmYUNyb3BTaW1wbGUsIGZhQ3JvcEFsdCwgZmFNZWRhbCwgZmFTY3JvbGwsIGZhRmlsZUV4Y2VsMiwgZmFGaWx0ZXIsIGZhRHJ1bSwgZmFNYXBQaW4sIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwgZmFCYWxhbmNlU2NhbGVSaWdodCwgZmFBcnJvd3NUb0NpcmNsZSwgZmFFbnZlbG9wZTIsIGZhQmFieSwgZmFTcXVhcmVDYXJldERvd24yLCBmYUNhcmV0U3F1YXJlRG93bjIsIGZhVGVudCwgZmFBLCBmYVBhcmFjaHV0ZUJveCwgZmFDYXJ0QXJyb3dEb3duLCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNsb3VkQXJyb3dVcCwgZmFDbG91ZFVwbG9hZCwgZmFDbG91ZFVwbG9hZEFsdCwgZmFBdCwgZmFJbmRpYW5SdXBlZVNpZ24sIGZhSW5kaWFuUnVwZWUsIGZhSW5yLCBmYVRydWNrMiwgZmFDaGFsa2JvYXJkVXNlciwgZmFDaGFsa2JvYXJkVGVhY2hlciwgZmFVc2VyQ2hlY2ssIGZhVXNlck5pbmphLCBmYVBsYW50V2lsdCwgZmFXZWlnaHRTY2FsZSwgZmFXZWlnaHQsIGZhQ2FyZXRSaWdodCwgZmFGbG9yaW5TaWduLCBmYUJlbGwyLCBmYUxhcmlTaWduLCBmYU1pbGxTaWduLCBmYVBlcnNvblNub3dib2FyZGluZywgZmFTbm93Ym9hcmRpbmcsIGZhVHR5LCBmYVRlbGV0eXBlLCBmYVVzZXJzUmVjdGFuZ2xlLCBmYU1vYmlsZSwgZmFNb2JpbGVBbmRyb2lkLCBmYU1vYmlsZVBob25lLCBmYUFycm93c1R1cm5Ub0RvdHMsIGZhRXhjbGFtYXRpb24sIGZhQ2h1cmNoLCBmYVRvZ2dsZU9mZiwgZmFTaG9lUHJpbnRzLCBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbiwgZmFXYWxsZXQsIGZhTWVzc2FnZTIsIGZhQ29tbWVudEFsdDIsIGZhVHJvcGh5LCBmYUZhY2VEaXp6eTIsIGZhRGl6enkyLCBmYUJhY3RlcmlhLCBmYUVhckRlYWYsIGZhRGVhZiwgZmFEZWFmbmVzcywgZmFIYXJkT2ZIZWFyaW5nLCBmYVBlb3BsZUFycm93cywgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsIGZhSGFuZHNDbGFwcGluZywgZmFWaXJ1c0NvdmlkU2xhc2gsIGZhQ2FsZW5kYXJEYXlzMiwgZmFDYWxlbmRhckFsdDIsIGZhRGlhbW9uZFR1cm5SaWdodCwgZmFEaXJlY3Rpb25zLCBmYUhhbmRQb2ludFVwMiwgZmFCZXppZXJDdXJ2ZSwgZmFQZXJzb25IYWxmRHJlc3MsIGZhU3F1YXJlUG9sbEhvcml6b250YWwsIGZhUG9sbEgsIGZhU2Nob29sQ2lyY2xlWG1hcmssIGZhSGFuZExpemFyZDIsIGZhQ2hhbGtib2FyZCwgZmFCbGFja2JvYXJkLCBmYVVwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGlua0FsdCwgZmFTcXVhcmVGdWxsMiwgZmFDbG92ZXIsIGZhVGVldGhPcGVuLCBmYUJhcnNTdGFnZ2VyZWQsIGZhUmVvcmRlciwgZmFTdHJlYW0sIGZhV2FyZWhvdXNlLCBmYVN3YXRjaGJvb2ssIGZhQ2FtcGdyb3VuZCwgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCwgZmFHbGFzc2VzLCBmYUNpcmNsZVBhdXNlMiwgZmFQYXVzZUNpcmNsZTIsIGZhTWVtb3J5LCBmYUdpZnQsIGZhTW9uZXlCaWxsV2hlYXQsIGZhRHVuZ2VvbiwgZmFTdWl0Y2FzZU1lZGljYWwsIGZhTWVka2l0LCBmYVBlcnNvbkNhbmUsIGZhR2F1Z2UsIGZhRGFzaGJvYXJkLCBmYUdhdWdlTWVkLCBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLCBmYUVudmVsb3BlT3BlblRleHQsIGZhVG9vbGJveCwgZmFQb3dlck9mZiwgZmFTaWduYWwsIGZhU2lnbmFsNSwgZmFTaWduYWxQZXJmZWN0LCBmYUFycm93c1NwaW4sIGZhSm9pbnQsIGZhQnJhaWxsZSwgZmFCYXNrZXRTaG9wcGluZywgZmFTaG9wcGluZ0Jhc2tldCwgZmFCcmlkZ2UsIGZhUGxhbmVBcnJpdmFsLCBmYUNhc2hSZWdpc3RlciwgZmFSaW5nLCBmYVNoYXJlTm9kZXMsIGZhU2hhcmVBbHQsIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sIGZhQmlub2N1bGFycywgZmFLaXBTaWduLCBmYUhhcmREcml2ZTIsIGZhSGRkMiwgZmFSYW5raW5nU3RhciwgZmFVc2VyVGllLCBmYUVsbGlwc2lzLCBmYUVsbGlwc2lzSCwgZmFTdG9yZVNsYXNoLCBmYVBlcmNlbnQsIGZhUGVyY2VudGFnZSwgZmFGaWxlWmlwcGVyMiwgZmFGaWxlQXJjaGl2ZTIsIGZhRGlzcGxheSwgZmFJY29ucywgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCwgZmFSdWxlclZlcnRpY2FsLCBmYU1hcExvY2F0aW9uRG90LCBmYU1hcE1hcmtlZEFsdCwgZmFIZWFydENyYWNrLCBmYUhlYXJ0QnJva2VuLCBmYUNvdywgZmFSc3MsIGZhRmVlZCwgZmFNYWduaWZ5aW5nR2xhc3MsIGZhU2VhcmNoLCBmYUNsb3VkTW9vbiwgZmFCb3hlc1N0YWNrZWQsIGZhQm94ZXMsIGZhQm94ZXNBbHQsIGZhQ29kZUJyYW5jaCwgZmFCYW4sIGZhQ2FuY2VsLCBmYUp1Z0RldGVyZ2VudCwgZmFSZXBseSwgZmFNYWlsUmVwbHksIGZhU3VuUGxhbnRXaWx0LCBmYUJhY3Rlcml1bSwgZmFSZWNvcmRWaW55bCwgZmFGbG9wcHlEaXNrMiwgZmFTYXZlMiwgZmFUb2lsZXRzUG9ydGFibGUsIGZhTywgZmFQYWxldHRlLCBmYVVubG9jaywgZmFFYXJMaXN0ZW4sIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcywgZmFDb2RlUHVsbFJlcXVlc3QsIGZhS2V5LCBmYVNrdWxsLCBmYU1hcnNTdHJva2VVcCwgZmFNYXJzU3Ryb2tlViwgZmFGaXJlRmxhbWVTaW1wbGUsIGZhQnVybiwgZmFUcmVlLCBmYVNtb2csIGZhUywgZmFKZWRpLCBmYVBlcnNvbkhpa2luZywgZmFIaWtpbmcsIGZhQXJyb3dzVXBUb0xpbmUsIGZhTWFyc0RvdWJsZSwgZmFUaGVybW9tZXRlciwgZmFQYWludGJydXNoLCBmYVBhaW50QnJ1c2gsIGZhTmV1dGVyLCBmYVNxdWFyZVBob25lRmxpcCwgZmFQaG9uZVNxdWFyZUFsdCwgZmFGYWNlR3JpblRvbmd1ZVNxdWludDIsIGZhR3JpblRvbmd1ZVNxdWludDIsIGZhQ29tbWVudERvbGxhciwgZmFIaXBwbywgZmFCb3dsRm9vZCwgZmFTcXVhcmVWaXJ1cywgZmFDbG91ZFN1blJhaW4sIGZhQXJyb3dSaWdodExvbmcsIGZhTG9uZ0Fycm93UmlnaHQsIGZhQnVpbGRpbmdVbiwgZmFUZW1wZXJhdHVyZUxvdywgZmFEb29yT3BlbiwgZmFBbGlnbkxlZnQsIGZhQ2FtZXJhMiwgZmFDYW1lcmFBbHQyLCBmYVVzZXJzUmF5cywgZmFSYWluYm93LCBmYVNpdGVtYXAsIGZhRmFjZUdyaW5TdGFyczIsIGZhR3JpblN0YXJzMiwgZmFTb3J0VXAsIGZhU29ydEFzYywgZmFFeWUyLCBmYUNhcmV0TGVmdCwgZmFBcHBsZVdob2xlLCBmYUFwcGxlQWx0LCBmYVNjcm9sbFRvcmFoLCBmYVRvcmFoLCBmYUhvdXNlTG9jaywgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsIGZhVHJhc2gsIGZhRmFjZVNhZFRlYXIyLCBmYVNhZFRlYXIyLCBmYUZheCwgZmFQZXJzb25DaXJjbGVQbHVzLCBmYUhhbXNhLCBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLCBmYUNsaXBib2FyZENoZWNrLCBmYVNoYXJlRnJvbVNxdWFyZTIsIGZhU2hhcmVTcXVhcmUyLCBmYVJlY2VpcHQsIGZhRXF1YWxzLCBmYUNoZXZyb25VcCwgZmFWaXJ1c1NsYXNoLCBmYVNsYXNoLCBmYUV4cGFuZCwgZmFOb3RlU3RpY2t5MiwgZmFTdGlja3lOb3RlMiwgZmFUYWJsZUNvbHVtbnMsIGZhQ29sdW1ucywgZmFQZXJzb25TaGVsdGVyLCBmYUNpcmNsZU5vdGNoLCBmYVdhdGVyLCBmYURlbGV0ZUxlZnQsIGZhQmFja3NwYWNlLCBmYUJyb29tQmFsbCwgZmFRdWlkZGl0Y2gsIGZhUXVpZGRpdGNoQnJvb21CYWxsLCBmYUosIGZhU2h1dHRsZVNwYWNlLCBmYVNwYWNlU2h1dHRsZSwgZmFZaW5ZYW5nLCBmYVN0b3AsIGZhVHJvd2VsLCBmYUhhbmRCYWNrRmlzdDIsIGZhSGFuZFJvY2syLCBmYVRlbXBlcmF0dXJlSGlnaCwgZmFHcmVhdGVyVGhhbiwgZmFDcnV0Y2gsIGZhU2VwdGFnb24sIGZhSGVwdGFnb24sIGZhU3RyZWV0VmlldywgZmFXYXZlU3F1YXJlLCBmYUFuZ2xlTGVmdCwgZmFTY3Jld2RyaXZlciwgZmFUcmFjdG9yLCBmYUJyaWRnZUNpcmNsZVhtYXJrLCBmYVZpYWxzLCBmYVN0ZXRob3Njb3BlLCBmYVBvZGNhc3QsIGZhQXJyb3dVcFJpZ2h0RG90cywgZmFDaGVzc1F1ZWVuMiwgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiwgZmFFbGxpcHNpc1ZlcnRpY2FsLCBmYUVsbGlwc2lzViwgZmFIZWFydENpcmNsZUV4Y2xhbWF0aW9uLCBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sIGZhUGVyc29uQXJyb3dVcEZyb21MaW5lLCBmYU5vdEVxdWFsLCBmYVRyYWluVHJhbSwgZmFQbGFuZURlcGFydHVyZSwgZmFSaWdodFRvQnJhY2tldCwgZmFTaWduSW5BbHQsIGZhU2RDYXJkLCBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24sIGZhU2hla2VsU2lnbiwgZmFJbHMsIGZhU2hla2VsLCBmYVNoZXFlbCwgZmFTaGVxZWxTaWduLCBmYVJhZGlvLCBmYUhhbmREb3RzLCBmYUFsbGVyZ2llcywgZmFCb29rU2t1bGwsIGZhQm9va0RlYWQsIGZhVW5sb2NrS2V5aG9sZSwgZmFVbmxvY2tBbHQsIGZhRmlsZUFycm93VXAsIGZhRmlsZVVwbG9hZCwgZmFGYWNlR3JpblRlYXJzMiwgZmFHcmluVGVhcnMyLCBmYVBlblRvU3F1YXJlMiwgZmFFZGl0MiwgZmFFYXJ0aEV1cm9wZSwgZmFHbG9iZUV1cm9wZSwgZmFGYWNlR3JpbkJlYW1Td2VhdDIsIGZhR3JpbkJlYW1Td2VhdDIsIGZhQ2lyY2xlSGFsZlN0cm9rZSwgZmFBZGp1c3QsIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwgZmFUYWJsZUNlbGxzQ29sdW1uTG9jaywgZmFUcnVja0ZpZWxkVW4sIGZhQ2xvY2syLCBmYUNsb2NrRm91cjIsIGZhQm9vaywgZmFGYWNlTGF1Z2hXaW5rMiwgZmFMYXVnaFdpbmsyLCBmYUNsb3VkTWVhdGJhbGwsIGZhQ2hhcnRBcmVhLCBmYUFyZWFDaGFydCwgZmFSdXBpYWhTaWduLCBmYVRleHRXaWR0aCwgZmFTYXRlbGxpdGUsIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsIGZhU2VhcmNoTWludXMsIGZhUGVvcGxlR3JvdXAsIGZhU3F1YXJlQmluYXJ5LCBmYU1hc2tzVGhlYXRlciwgZmFUaGVhdGVyTWFza3MsIGZhQ2FydFBsdXMsIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhQXNsSW50ZXJwcmV0aW5nLCBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhVGFibGVDZWxsc1Jvd1VubG9jaywgZmFSb2NrZXQsIGZhU2hyaW1wLCBmYVRlbmdlU2lnbiwgZmFUZW5nZSwgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLCBmYUNsaW5pY01lZGljYWwsIGZhVXNlcnNTbGFzaCwgZmFQYXBlclBsYW5lMiwgZmFCb29rQXRsYXMsIGZhQXRsYXMsIGZhVGFibGUsIGZhSGVhcnQyLCBmYUNpcmNsZUNoZXZyb25VcCwgZmFDaGV2cm9uQ2lyY2xlVXAsIGZhQmF0dGVyeUhhbGYsIGZhQmF0dGVyeTMsIGZhRm9udEF3ZXNvbWUzLCBmYUZvbnRBd2Vzb21lRmxhZzMsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMsIGZhSGFuZGN1ZmZzLCBmYUhhdENvd2JveVNpZGUsIGZhSW5kdXN0cnksIGZhTGluZXNMZWFuaW5nLCBmYVBhc3Nwb3J0LCBmYUluZmluaXR5LCBmYUNsb25lMiwgZmFGb3J3YXJkLCBmYU0sIGZhUm9hZFNwaWtlcywgZmFNb3VudGFpbiwgZmFDaGVzcywgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMsIGZhVGVtcGVyYXR1cmUzLCBmYVRoZXJtb21ldGVyMywgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMsIGZhQiwgZmFTaGllbGRWaXJ1cywgZmFMaXRlY29pblNpZ24sIGZhRGljZUQ2LCBmYUdyaXBMaW5lc1ZlcnRpY2FsLCBmYUdvbGZCYWxsVGVlLCBmYUdvbGZCYWxsLCBmYUhleGFnb24sIGZhRm9sZGVyT3BlbjIsIGZhS2FhYmEsIGZhSGFuZEhvbGRpbmcsIGZhU2luZ2xlUXVvdGVSaWdodCwgZmFCb3R0bGVEcm9wbGV0LCBmYVdpbmRvd01pbmltaXplMiwgZmFDaGV2cm9uUmlnaHQsIGZhRWdnLCBmYUxhbmRtYXJrRG9tZSwgZmFMYW5kbWFya0FsdCwgZmFXb3JtLCBmYVVzZXJJbmp1cmVkLCBmYVN0cmlrZXRocm91Z2gsIGZhQmxvZywgZmFTdG9wd2F0Y2gyMCwgZmFUcnVja1BpY2t1cCwgZmFTZWVkbGluZywgZmFTcHJvdXQsIGZhVHJhbnNnZW5kZXIsIGZhVHJhbnNnZW5kZXJBbHQsIGZhU3RhckhhbGYyLCBmYVBob3RvRmlsbSwgZmFQaG90b1ZpZGVvLCBmYVB1bXBNZWRpY2FsLCBmYUZpcmUsIGZhTWFnbmlmeWluZ0dsYXNzUGx1cywgZmFTZWFyY2hQbHVzLCBmYUZsYXNrLCBmYUFsaWduUmlnaHQsIGZhQ2FibGVDYXIsIGZhVHJhbSwgZmFLaXRNZWRpY2FsLCBmYUZpcnN0QWlkLCBmYUdyaXBMaW5lcywgZmFCdXJnZXIsIGZhSGFtYnVyZ2VyLCBmYVNub3dtYW4sIGZhSG90ZWwsIGZhUHJpbnQsIGZhVm9sbGV5YmFsbCwgZmFWb2xsZXliYWxsQmFsbCwgZmFUcmFmZmljTGlnaHQsIGZhUGxhbmVDaXJjbGVDaGVjaywgZmFVc2VycywgZmFDZXJ0aWZpY2F0ZSwgZmFBbGFybUNsb2NrMiwgZmFIZWxpY29wdGVyU3ltYm9sLCBmYUhvdXNlQ2hpbW5leUNyYWNrLCBmYUhvdXNlRGFtYWdlLCBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsIGZhRGF0YWJhc2UsIGZhTmV3c3BhcGVyMiwgZmFDbG91ZFJhaW4sIGZhTWF4aW1pemUsIGZhRXhwYW5kQXJyb3dzQWx0LCBmYUxvY2F0aW9uQXJyb3csIGZhQ2l0eSwgZmFYUmF5LCBmYVVtYnJlbGxhQmVhY2gsIGZhQXJyb3dSaWdodFRvQnJhY2tldCwgZmFTaWduSW4sIGZhSGVhZHNldCwgZmFTcGxvdGNoLCBmYVVwTG9uZywgZmFMb25nQXJyb3dBbHRVcCwgZmFIZXhhZ29uTm9kZXMsIGZhSG9zcGl0YWwyLCBmYUhvc3BpdGFsQWx0MiwgZmFIb3NwaXRhbFdpZGUyLCBmYVBlcnNvbkhhcmFzc2luZywgZmFNb25leUJpbGxUcmVuZFVwLCBmYVBlblJ1bGVyLCBmYVBlbmNpbFJ1bGVyLCBmYVJlcGVhdCwgZmFCb25lLCBmYUZpcmVGbGFtZUN1cnZlZCwgZmFGaXJlQWx0LCBmYUJ1c1NpbXBsZSwgZmFCdXNBbHQsIGZhVmVudXNNYXJzLCBmYUJsZW5kZXIsIGZhVSwgZmFTaGFyZSwgZmFNYWlsRm9yd2FyZCwgZmFQaG9uZUZsaXAsIGZhUGhvbmVBbHQsIGZhVG9pbGV0UG9ydGFibGUsIGZhUGVyc29uUHJlZ25hbnQsIGZhTGVzc1RoYW4sIGZhU3VwZXJzY3JpcHQsIGZhQ2lyY2xlU3RvcDIsIGZhU3RvcENpcmNsZTIsIGZhQXJyb3dzVXBEb3duLCBmYUFycm93c1YsIGZhUG9vU3Rvcm0sIGZhUG9vQm9sdCwgZmFWaWRlb1NsYXNoLCBmYVNxdWFyZVhtYXJrLCBmYVRpbWVzU3F1YXJlLCBmYVhtYXJrU3F1YXJlLCBmYUhhbmRIb2xkaW5nRHJvcGxldCwgZmFIYW5kSG9sZGluZ1dhdGVyLCBmYVdvblNpZ24sIGZhS3J3LCBmYVdvbiwgZmFPYmplY3RVbmdyb3VwMiwgZmFDb21tZW50MiwgZmFIaWxsQXZhbGFuY2hlLCBmYUFycm93c1RvRXllLCBmYVNub3dwbG93LCBmYUNoYXJ0R2FudHQsIGZhVmlkZW8sIGZhVmlkZW9DYW1lcmEsIGZhQ2hlc3NQYXduMiwgZmFTeW5hZ29ndWUsIGZhQnVpbGRpbmdDaXJjbGVDaGVjaywgZmFDYWxlbmRhclBsdXMyLCBmYVdoZWVsY2hhaXJNb3ZlLCBmYVdoZWVsY2hhaXJBbHQsIGZhVXNlclNoaWVsZCwgZmFCb2xkLCBmYUhlYXJ0UHVsc2UsIGZhSGVhcnRiZWF0LCBmYVNxdWFyZVJvb3RWYXJpYWJsZSwgZmFTcXVhcmVSb290QWx0LCBmYUhhbmRzQnViYmxlcywgZmFIYW5kc1dhc2gsIGZhTWFya2VyLCBmYUNsaXBib2FyZDIsIGZhUGxhY2VPZldvcnNoaXAsIGZhQ2FubmFiaXMsIGZhUGVvcGxlUm9vZiwgZmFEaXNlYXNlLCBmYUJvb2tCaWJsZSwgZmFCaWJsZSwgZmFDaGVzc0JvYXJkLCBmYU1hcnMsIGZhTGFwdG9wLCBmYVVzZXJYbWFyaywgZmFVc2VyVGltZXMsIGZhRmxhZ1VzYSwgZmFIYW5kTWlkZGxlRmluZ2VyLCBmYU1vcnRhclBlc3RsZSwgZmFIZWFkU2lkZUNvdWdoLCBmYVBsYW5lTG9jaywgZmFCYXR0ZXJ5VGhyZWVRdWFydGVycywgZmFCYXR0ZXJ5NCwgZmFGcmFuY1NpZ24sIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLCBmYUZ1bm5lbERvbGxhciwgZmFDaGVlc2UsIGZhQ2lyY2xlSCwgZmFIb3NwaXRhbFN5bWJvbCwgZmFTY2hvb2wsIGZhRGljZUZpdmUsIGZhVG9ybmFkbywgZmFKZXRGaWdodGVyLCBmYUZpZ2h0ZXJKZXQsIGZhVGh1bWJzRG93bjIsIGZhQnJvb20sIGZhRmlsZUltcG9ydCwgZmFBcnJvd1JpZ2h0VG9GaWxlLCBmYVV0ZW5zaWxzLCBmYUN1dGxlcnksIGZhSWRCYWRnZTIsIGZhU3BpZGVyLCBmYU1vYmlsZVJldHJvLCBmYVNpZ25zUG9zdCwgZmFNYXBTaWducywgZmFHcm91cEFycm93c1JvdGF0ZSwgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCwgZmFGaWxsRHJpcCwgZmFTaGllbGRIZWFydCwgZmFQZXJzb25Ta2lpbmdOb3JkaWMsIGZhU2tpaW5nTm9yZGljLCBmYVNxdWFyZUNoZWNrMiwgZmFDaGVja1NxdWFyZTIsIGZhQmF0aCwgZmFCYXRodHViLCBmYUNoZXNzQmlzaG9wMiwgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsLCBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCwgZmFEcmF3UG9seWdvbiwgZmFWZWN0b3JQb2x5Z29uLCBmYUlDdXJzb3IsIGZhSGVhcnRDaXJjbGVQbHVzLCBmYVNoaWVsZERvZywgZmFHcmVhdGVyVGhhbkVxdWFsLCBmYUVudmVsb3BlT3BlbjIsIGZhTW91bmQsIGZhVm9pY2VtYWlsLCBmYVZlc3QsIGZhQXVkaW9EZXNjcmlwdGlvbiwgZmFXLCBmYUV5ZURyb3BwZXIsIGZhRXllRHJvcHBlckVtcHR5LCBmYUV5ZWRyb3BwZXIsIGZhQ2lyY2xlWG1hcmsyLCBmYVRpbWVzQ2lyY2xlMiwgZmFYbWFya0NpcmNsZTIsIGZhVHJhaWxlciwgZmFUdXJraXNoTGlyYVNpZ24sIGZhVHJ5LCBmYVR1cmtpc2hMaXJhLCBmYVZvbGNhbm8sIGZhV2FuZFNwYXJrbGVzLCBmYU1pY3JvcGhvbmUsIGZhQ3Jvd24sIGZhVGVudEFycm93VHVybkxlZnQsIGZhVHJ1Y2tGYXN0LCBmYVNoaXBwaW5nRmFzdCwgZmFVc2VyUGVuLCBmYVVzZXJFZGl0LCBmYVVzZXJDbG9jaywgZmFTaG93ZXIsIGZhU3F1YXJlQ2FyZXRVcDIsIGZhQ2FyZXRTcXVhcmVVcDIsIGZhTWFwTG9jYXRpb24sIGZhTWFwTWFya2VkLCBmYVBlbkZhbmN5LCBmYUV1cm9TaWduLCBmYUV1ciwgZmFFdXJvLCBmYUhvdXNlQ2lyY2xlWG1hcmssIGZhTGlyYVNpZ24sIGZhWWVuU2lnbiwgZmFDbnksIGZhSnB5LCBmYVJtYiwgZmFZZW4sIGZhQm94T3BlbiwgZmFUcnVja0ZpZWxkLCBmYUxvY2F0aW9uUGluTG9jaywgZmFQZXJzb25QcmF5aW5nLCBmYVByYXksIGZhQ2xpcGJvYXJkTGlzdCwgZmFTYWNrRG9sbGFyLCBmYU1vdW50YWluU3VuLCBmYUFycm93VXBXaWRlU2hvcnQsIGZhU29ydEFtb3VudFVwLCBmYVVzZXJzTGluZSwgZmFTdGFyT2ZEYXZpZCwgZmFOb3Rlc01lZGljYWwsIGZhQXVzdHJhbFNpZ24sIGZhQ2xpcGJvYXJkVXNlciwgZmFGaWxlSW1hZ2UyLCBmYVNxdWFyZUNhcmV0UmlnaHQyLCBmYUNhcmV0U3F1YXJlUmlnaHQyLCBmYVZpYWwsIGZhSGVsaWNvcHRlciwgZmFNaXR0ZW4sIGZhR2FzUHVtcCwgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLCBmYVBlcnNvblNrYXRpbmcsIGZhU2thdGluZywgZmFTdW4yLCBmYUJhc2ViYWxsLCBmYUJhc2ViYWxsQmFsbCwgZmFJbWFnZTIsIGZhTm90ZGVmLCBmYUJhc2tldGJhbGwsIGZhQmFza2V0YmFsbEJhbGwsIGZhUGVuY2lsLCBmYVBlbmNpbEFsdCwgZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdCwgZmFEaWNlU2l4LCBmYUFuZ2xlc0Rvd24sIGZhQW5nbGVEb3VibGVEb3duLCBmYVN5cmluZ2UsIGZhV2hlYXRBd24sIGZhV2hlYXRBbHQsIGZhUGxhbmVVcCwgZmFBbGlnbkNlbnRlciwgZmFIb2NrZXlQdWNrLCBmYUNpcmNsZUFycm93TGVmdCwgZmFBcnJvd0NpcmNsZUxlZnQsIGZhUGx1Z0NpcmNsZUJvbHQsIGZhUmVzdHJvb20sIGZhQW5jaG9yTG9jaywgZmFUaW1lbGluZSwgZmFMaWdodGJ1bGIyLCBmYUNpcmNsZUFycm93UmlnaHQsIGZhQXJyb3dDaXJjbGVSaWdodCwgZmFNYXJzQW5kVmVudXMsIGZhTmV0d29ya1dpcmVkLCBmYUJ1aWxkaW5nU2hpZWxkLCBmYUNvZGUsIGZhRmVhdGhlclBvaW50ZWQsIGZhRmVhdGhlckFsdCwgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sIGZhU2lnbmF0dXJlLCBmYUVhcnRoQW1lcmljYXMsIGZhRWFydGgsIGZhRWFydGhBbWVyaWNhLCBmYUdsb2JlQW1lcmljYXMsIGZhQ2Fycm90LCBmYVRlbXBlcmF0dXJlRnVsbCwgZmFUZW1wZXJhdHVyZTQsIGZhVGhlcm1vbWV0ZXI0LCBmYVRoZXJtb21ldGVyRnVsbCwgZmFUYWJsZUNlbGxzUm93TG9jaywgZmFCb2x0TGlnaHRuaW5nLCBmYUNsb3VkU2hvd2Vyc1dhdGVyLCBmYUFycm93VXBMb25nLCBmYUxvbmdBcnJvd1VwLCBmYUFkZHJlc3NDYXJkMiwgZmFDb250YWN0Q2FyZDIsIGZhVmNhcmQyLCBmYUFuZ2xlUmlnaHQsIGZhRmFjZU1laDIsIGZhTWVoMiwgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyLCBmYU1hcDIsIGZhVXNlclBsdXMsIGZhVmVudXMsIGZhRGlhZ3JhbVN1Y2Nlc3NvciwgZmFIZWFkU2lkZUNvdWdoU2xhc2gsIGZhRGlhZ3JhbVByb2plY3QsIGZhUHJvamVjdERpYWdyYW0sIGZhVGVybWluYWwsIGZhSG91c2VGaXJlLCBmYU1hc2ssIGZhSHVycmljYW5lLCBmYUVhcnRoQWZyaWNhLCBmYUdsb2JlQWZyaWNhLCBmYVRodW1idGFjaywgZmFUaHVtYlRhY2ssIGZhSGFuZFBvaW50RG93bjIsIGZhRmFjZU1laEJsYW5rMiwgZmFNZWhCbGFuazIsIGZhVGVtcGVyYXR1cmVFbXB0eSwgZmFUZW1wZXJhdHVyZTAsIGZhVGhlcm1vbWV0ZXIwLCBmYVRoZXJtb21ldGVyRW1wdHksIGZhQm9yZGVyTm9uZSwgZmFIaWdobGlnaHRlciwgZmFNb25leUJpbGxXYXZlLCBmYVRvaWxldFBhcGVyU2xhc2gsIGZhRmlsZVNoaWVsZCwgZmFUZXh0SGVpZ2h0LCBmYUZhY2VHcmluVG9uZ3VlMiwgZmFHcmluVG9uZ3VlMiwgZmFGaWxlU2lnbmF0dXJlLCBmYUJ1aWxkaW5nV2hlYXQsIGZhUGx1Z0NpcmNsZU1pbnVzLCBmYUZ1dGJvbDIsIGZhRnV0Ym9sQmFsbDIsIGZhU29jY2VyQmFsbDIsIGZhQ2lyY2xlUGx1cywgZmFQbHVzQ2lyY2xlLCBmYUJyYXppbGlhblJlYWxTaWduLCBmYVN0YXJBbmRDcmVzY2VudCwgZmFGYWNlU3VycHJpc2UyLCBmYVN1cnByaXNlMiwgZmFIb3NwaXRhbFVzZXIsIGZhQXJyb3dEb3duVXBMb2NrLCBmYUZvbGRlcjIsIGZhRm9sZGVyQmxhbmsyLCBmYUhvbGx5QmVycnksIGZhVmVudXNEb3VibGUsIGZhQ2xpcGJvYXJkUXVlc3Rpb24sIGZhSG90ZG9nLCBmYUFycm93VXBGcm9tQnJhY2tldCwgZmFNaWNyb3Njb3BlLCBmYUNsb3VkMiwgZmFCYXNlYmFsbEJhdEJhbGwsIGZhQ2FyUmVhciwgZmFDYXJBbHQsIGZhVGh1bWJ0YWNrU2xhc2gsIGZhVGh1bWJUYWNrU2xhc2gsIGZhUGx1c01pbnVzLCBmYUhvdXNlQ2lyY2xlQ2hlY2ssIGZhQ2FsZW5kYXJEYXksIGZhQ2lyY2xlMiwgZmFNb2JpbGVWaWJyYXRlLCBmYUZhY2VHcmluU3F1aW50MiwgZmFHcmluU3F1aW50MiwgZmFVc2Vyc0JldHdlZW5MaW5lcywgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyaywgZmFUYWJsZUxpc3QsIGZhVGhMaXN0LCBmYUZsYXNrVmlhbCwgZmFDaXJjbGVFeGNsYW1hdGlvbiwgZmFFeGNsYW1hdGlvbkNpcmNsZSwgZmFUYXhpLCBmYUNhYiwgZmFUZXh0U2xhc2gsIGZhUmVtb3ZlRm9ybWF0LCBmYVBlb3BsZVB1bGxpbmcsIGZhQmFja3dhcmQsIGZhQ2FyQnVyc3QsIGZhQ2FyQ3Jhc2gsIGZhTGluaywgZmFDaGFpbiwgZmFCYWNrd2FyZFN0ZXAsIGZhU3RlcEJhY2t3YXJkLCBmYVgsIGZhQ2lyY2xlVXNlcjIsIGZhVXNlckNpcmNsZTIsIGZhUmVjdGFuZ2xlTGlzdDIsIGZhTGlzdEFsdDIsIGZhSGFuZDIsIGZhSGFuZFBhcGVyMiwgZmFWYW5TaHV0dGxlLCBmYVNodXR0bGVWYW4sIGZhU3RhaXJzLCBmYUhvcnNlSGVhZCwgZmFWYXVsdCwgZmFEcnVtU3RlZWxwYW4sIGZhVGh1bWJzVXAyLCBmYVN0YW1wLCBmYU1lbm9yYWgsIGZhQ2hpbGRyZW4sIGZhQ2hhcnRMaW5lLCBmYUxpbmVDaGFydCwgZmFTcXVhcmVFbnZlbG9wZSwgZmFFbnZlbG9wZVNxdWFyZSwgZmFCYW5TbW9raW5nLCBmYVNtb2tpbmdCYW4sIGZhVHJ1Y2tGcm9udCwgZmFCdWlsZGluZzIsIGZhQnVsbHNleWUsIGZhQXJyb3dMZWZ0TG9uZywgZmFMb25nQXJyb3dMZWZ0LCBmYUNoZXNzUm9vazIsIGZhQmxlbmRlclBob25lLCBmYUFycm93VHVyblVwLCBmYUxldmVsVXAsIGZhQmljeWNsZSwgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUdlYXIsIGZhQ29nLCBmYU1hcnNBbmRWZW51c0J1cnN0LCBmYU90dGVyLCBmYUNpcmNsZUNoZXZyb25MZWZ0LCBmYUNoZXZyb25DaXJjbGVMZWZ0LCBmYUNpcmNsZVF1ZXN0aW9uMiwgZmFRdWVzdGlvbkNpcmNsZTIsIGZhV2Fsa2llVGFsa2llLCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFIb3VzZUNoaW1uZXksIGZhSG9tZUxnLCBmYVJpZ2h0RnJvbUJyYWNrZXQsIGZhU2lnbk91dEFsdCwgZmFGaWxlMiwgZmFQbGFuZVNsYXNoLCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYVBlcnNvbkZhbGxpbmcsIGZhVHVybkRvd24sIGZhTGV2ZWxEb3duQWx0LCBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIsIGZhRXhwYW5kQWx0LCBmYVVzZXJUYWcsIGZhSGFuZFNwYXJrbGVzLCBmYUFycm93c1RvRG90LCBmYUZhY2VTYWRDcnkyLCBmYVNhZENyeTIsIGZhRG9uZ1NpZ24sIGZhUGVvcGxlTGluZSwgZmFTcXVhcmVSc3MsIGZhUnNzU3F1YXJlLCBmYUNhbGVuZGFyTWludXMyLCBmYUNoYXJ0RGlhZ3JhbSwgZmFGYWNlVGlyZWQyLCBmYVRpcmVkMiwgZmFIYW5kUG9pbnRSaWdodDIsIGZhQXJyb3dVcCwgZmFDdWJlc1N0YWNrZWQsIGZhQ2hpbGRDb21iYXRhbnQsIGZhQ2hpbGRSaWZsZSwgZmFWZXN0UGF0Y2hlcywgZmFNYXJ0aW5pR2xhc3NFbXB0eSwgZmFHbGFzc01hcnRpbmksIGZhTWFnbmV0LCBmYVJvYWRCYXJyaWVyLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhU3F1YXJlUGVyc29uQ29uZmluZWQsIGZhUGxhdGVXaGVhdCwgZmFTaWduSGFuZ2luZywgZmFTaWduLCBmYUNhckJhdHRlcnksIGZhQmF0dGVyeUNhciwgZmFTaGlydCwgZmFUU2hpcnQsIGZhVHNoaXJ0LCBmYVBhcmFncmFwaCwgZmFFbnZlbG9wZXNCdWxrLCBmYU1haWxCdWxrLCBmYUd1aXRhciwgZmFTdWl0Y2FzZSwgZmFDaXJjbGVVcDIsIGZhQXJyb3dBbHRDaXJjbGVVcDIsIGZhRiwgZmFYbWFya3NMaW5lcywgZmFFYXJ0aE9jZWFuaWEsIGZhR2xvYmVPY2VhbmlhLCBmYUNvbW1lbnRTbGFzaCwgZmFQbGF5LCBmYVZpYWxDaXJjbGVDaGVjaywgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFDZWRpU2lnbiwgZmFQdXp6bGVQaWVjZSwgZmFIZWxtZXRVbiwgZmFHbGFzc1dhdGVyLCBmYUhlYXJ0Q2lyY2xlQm9sdCwgZmFQdW1wU29hcCwgZmFIYW5kU2Npc3NvcnMyLCBmYURvbGx5LCBmYURvbGx5Qm94LCBmYVBhcGVyY2xpcCwgZmFEZW1vY3JhdCwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUZlcnJ5LCBmYU1vc3F1aXRvLCBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCwgZmFMZWZ0UmlnaHQsIGZhQXJyb3dzQWx0SCwgZmFWaXJ1cywgZmFHZW0yLCBmYVRvaWxldCwgZmFTaW5nbGVRdW90ZUxlZnQsIGZhTW9uZXlCaWxscywgZmFUYWJsZXRCdXR0b24sIGZhUmVjdGFuZ2xlWG1hcmsyLCBmYVJlY3RhbmdsZVRpbWVzMiwgZmFUaW1lc1JlY3RhbmdsZTIsIGZhV2luZG93Q2xvc2UyLCBmYVdyZW5jaCwgZmFUcmFzaENhbjIsIGZhVHJhc2hBbHQyLCBmYVRhYmxlQ2VsbHMsIGZhVGgsIGZhUmliYm9uLCBmYUxhbmRtYXJrRmxhZywgZmFVcERvd25MZWZ0UmlnaHQsIGZhQXJyb3dzQWx0LCBmYUNhclNpZGUsIGZhVHJhc2hBcnJvd1VwLCBmYVRyYXNoUmVzdG9yZSwgZmFMaWZlUmluZzIsIGZhQ29weXJpZ2h0MiwgZmFGaWxlUHJlc2NyaXB0aW9uLCBmYUVyYXNlciwgZmFIb3VyZ2xhc3NTdGFydCwgZmFIb3VyZ2xhc3MxLCBmYUNpcmNsZUxlZnQyLCBmYUFycm93QWx0Q2lyY2xlTGVmdDIsIGZhQ3J1emVpcm9TaWduLCBmYVNtb2tpbmcsIGZhU3F1YXJlUG9sbFZlcnRpY2FsLCBmYVBvbGwsIGZhUGVyc29uQ2lyY2xlTWludXMsIGZhQmlvaGF6YXJkLCBmYUJlbGxDb25jaWVyZ2UsIGZhQ29uY2llcmdlQmVsbCwgZmFSdWxlckhvcml6b250YWwsIGZhSG9yc2UsIGZhQ2FsZW5kYXIyLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUl0YWxpYywgZmFLaGFuZGEsIGZhRmFjZUZyb3duT3BlbjIsIGZhRnJvd25PcGVuMiwgZmFDaGVjaywgZmFGaW5nZXJwcmludCwgZmFDaGFyZ2luZ1N0YXRpb24sIGZhVXNlckxvY2ssIGZhTW9iaWxlU2NyZWVuQnV0dG9uLCBmYU1vYmlsZUFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsIGZhQmxpbmQsIGZhRmlsZVdhdmVmb3JtLCBmYUZpbGVNZWRpY2FsQWx0LCBmYUhvdXNlQ3JhY2ssIGZhSGF0V2l6YXJkLCBmYVVzZXJEb2N0b3IsIGZhVXNlck1kLCBmYUNoYXJ0QmFyMiwgZmFCYXJDaGFydDIsIGZhU3ByYXlDYW5TcGFya2xlcywgZmFBaXJGcmVzaGVuZXIsIGZhQmFodFNpZ24sIGZhVGVtcGVyYXR1cmVBcnJvd1VwLCBmYVRlbXBlcmF0dXJlVXAsIGZhV2ViQXdlc29tZTIsIGZhTm9uQmluYXJ5LCBmYU4sIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93cywgZmFIb3VzZTIsIGZhSG9tZTIsIGZhSG9tZUFsdDIsIGZhSG9tZUxnQWx0MiwgZmFTcGlubmVyLCBmYUdhdmVsLCBmYUxlZ2FsLCBmYVRpY2tldFNpbXBsZSwgZmFUaWNrZXRBbHQsIGZhRG92ZSwgZmFUYXJwRHJvcGxldCwgZmFUcmVlQ2l0eSwgZmFUdXJuVXAsIGZhTGV2ZWxVcEFsdCwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhU2xpZGVycywgZmFTbGlkZXJzSCwgZmFNb3NxdWUsIGZhSCwgZmFJbmZvLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFBcnJvd1R1cm5Eb3duLCBmYUxldmVsRG93biwgZmFSb2FkLCBmYVNwaXJhbCwgZmFGYWNlRnJvd24yLCBmYUZyb3duMiwgZmFXaW5lR2xhc3NFbXB0eSwgZmFXaW5lR2xhc3NBbHQsIGZhQ2xhcHBlcmJvYXJkLCBmYUZvcndhcmRTdGVwLCBmYVN0ZXBGb3J3YXJkLCBmYVNxdWFyZVVwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LCBmYUJvb2tKb3VybmFsV2hpbGxzLCBmYUpvdXJuYWxXaGlsbHMsIGZhQ2hhbXBhZ25lR2xhc3NlcywgZmFHbGFzc0NoZWVycywgZmFEdW1wc3RlciwgZmFIZWFydENpcmNsZVhtYXJrLCBmYUNvbXB1dGVyLCBmYVdhbmRNYWdpYywgZmFNYWdpYywgZmFCcmFpbiwgZmFCcmllZmNhc2VNZWRpY2FsLCBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uLCBmYUNvZGVDb21taXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFQZXJzb25SYXlzLCBmYU1hbmF0U2lnbiwgZmFTb3J0LCBmYVVuc29ydGVkLCBmYUNpcmNsZVJhZGlhdGlvbiwgZmFSYWRpYXRpb25BbHQsIGZhTGFwdG9wQ29kZSwgZmFTaW5rLCBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVXNlcjIsIGZhVXNlckFsdDIsIGZhVXNlckxhcmdlMiwgZmFTbm93Zmxha2UyLCBmYVNrdWxsQ3Jvc3Nib25lcywgZmFQZXNvU2lnbiwgZmFXaW5lR2xhc3MsIGZhVGVtcGVyYXR1cmVIYWxmLCBmYVRlbXBlcmF0dXJlMiwgZmFUaGVybW9tZXRlcjIsIGZhVGhlcm1vbWV0ZXJIYWxmLCBmYVRpY2tldCwgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUFycm93c1R1cm5SaWdodCwgZmFDYW5keUNhbmUsIGZhV2hlZWxjaGFpciwgZmFTcGVsbENoZWNrLCBmYVZvbHVtZU9mZiwgZmFMdW5ncywgZmFCb29rbWFyazIsIGZhQmFyY29kZSwgZmFMaXN0T2wsIGZhTGlzdDEyLCBmYUxpc3ROdW1lcmljLCBmYUZpbGVDaXJjbGVYbWFyaywgZmFDdWJlLCBmYVRhcGUsIGZhQm9tYiwgZmFTY2FsZVVuYmFsYW5jZWQsIGZhQmFsYW5jZVNjYWxlTGVmdCwgZmFTcXVhcmVDYXJldExlZnQyLCBmYUNhcmV0U3F1YXJlTGVmdDIsIGZhUnVsZXIsIGZhSSwgZmFWb2x1bWVYbWFyaywgZmFWb2x1bWVNdXRlLCBmYVZvbHVtZVRpbWVzLCBmYUFyY2h3YXksIGZhUGVyc29uRGlnZ2luZywgZmFEaWdnaW5nLCBmYUdhdWdlSGlnaCwgZmFUYWNob21ldGVyQWx0LCBmYVRhY2hvbWV0ZXJBbHRGYXN0LCBmYUdlbmRlcmxlc3MsIGZhQ2xvdWRTdW4sIGZhQXJyb3dSaWdodCwgZmFIYW5kc2hha2UyLCBmYUhhbmRzaGFrZUFsdDIsIGZhSGFuZHNoYWtlU2ltcGxlMiwgZmFQZXJzb25Ta2lpbmcsIGZhU2tpaW5nLCBmYUJyaWRnZVdhdGVyLCBmYUJ1aWxkaW5nTmdvLCBmYUlnbG9vLCBmYUNpcmNsZURvbGxhclRvU2xvdCwgZmFEb25hdGUsIGZhWSwgZmFGYWNlU21pbGVXaW5rMiwgZmFTbWlsZVdpbmsyLCBmYURpY2VGb3VyLCBmYUZhY2VHcmluU3F1aW50VGVhcnMyLCBmYUdyaW5TcXVpbnRUZWFyczIsIGZhRmlsZUF1ZGlvMiwgZmFBcnJvd3NEb3duVG9MaW5lLCBmYUcsIGZhVmloYXJhLCBmYUZsYWdDaGVja2VyZWQsIGZhR2F1Z2VTaW1wbGUsIGZhR2F1Z2VTaW1wbGVNZWQsIGZhVGFjaG9tZXRlckF2ZXJhZ2UsIGZhUmlnaHRMZWZ0LCBmYUV4Y2hhbmdlQWx0LCBmYVBpbGxzLCBmYUV4cGxvc2lvbiwgZmFBcnJvd3NEb3duVG9QZW9wbGUsIGZhVXNlcnNWaWV3ZmluZGVyLCBmYUNhck9uLCBmYVNsZWlnaCwgZmFEdW1iYmVsbCwgZmFCYWJ5Q2FycmlhZ2UsIGZhQ2FycmlhZ2VCYWJ5LCBmYUtpd2lCaXJkLCBmYUNhbGVuZGFyWG1hcmsyLCBmYUNhbGVuZGFyVGltZXMyLCBmYUNpcmNsZURvd24yLCBmYUFycm93QWx0Q2lyY2xlRG93bjIsIGZhRmlsZU1lZGljYWwsIGZhWG1hcmssIGZhQ2xvc2UsIGZhTXVsdGlwbHksIGZhUmVtb3ZlLCBmYVRpbWVzLCBmYVNoYXBlcywgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSwgZmFEaWNlT25lLCBmYUxvY2tPcGVuLCBmYVBlcHBlckhvdCwgZmFEcm9wbGV0U2xhc2gsIGZhVGludFNsYXNoLCBmYURyb3BsZXQsIGZhVGludCwgZmFGaWxlTGluZXMyLCBmYUZpbGVBbHQyLCBmYUZpbGVUZXh0MiwgZmFDb21tZW50c0RvbGxhciwgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbiwgZmFTZWFyY2hMb2NhdGlvbiwgZmFGaWxlSW52b2ljZSwgZmFQZW50YWdvbiwgZmFSZXB1YmxpY2FuLCBmYVNob3AsIGZhU3RvcmVBbHQsIGZhRmlsbSwgZmFGaWxtQWx0LCBmYUZpbG1TaW1wbGUsIGZhQnVpbGRpbmdDaXJjbGVYbWFyaywgZmFDb21tZW50czIsIGZhVGFncywgZmFHdW4sIGZhQ2lyY2xlQ2hlY2syLCBmYUNoZWNrQ2lyY2xlMiwgZmFJZENhcmRDbGlwLCBmYUlkQ2FyZEFsdCwgZmFNb29uMiwgZmFPaWxXZWxsLCBmYVRhY2hvZ3JhcGhEaWdpdGFsLCBmYURpZ2l0YWxUYWNob2dyYXBoLCBmYVRhYmxldCwgZmFUYWJsZXRBbmRyb2lkLCBmYVJ1YmxlU2lnbiwgZmFSb3VibGUsIGZhUnViLCBmYVJ1YmxlLCBmYUNsb3NlZENhcHRpb25pbmcyLCBmYVBlbiwgZmFQbGFuZSwgZmFJbWFnZXMyLCBmYU1vYmlsZVNjcmVlbiwgZmFNb2JpbGVBbmRyb2lkQWx0LCBmYUd1YXJhbmlTaWduLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUNpcmNsZVJpZ2h0MiwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiwgZmFQaG9uZVZvbHVtZSwgZmFWb2x1bWVDb250cm9sUGhvbmUsIGZhQ3ViZXMsIGZhUGhvbmUsIGZhVG9yaWlHYXRlLCBmYUJhY29uLCBmYVBlcnNvbkZhbGxpbmdCdXJzdCwgZmFRdW90ZVJpZ2h0LCBmYVF1b3RlUmlnaHRBbHQsIGZhSG91c2VNZWRpY2FsRmxhZywgZmFQcmVzY3JpcHRpb24sIGZhRGljZVRocmVlLCBmYUJ1aWxkaW5nTG9jaywgZmFJZENhcmQyLCBmYURyaXZlcnNMaWNlbnNlMiwgZmFDaXJjbGVQbGF5MiwgZmFQbGF5Q2lyY2xlMiwgZmFGYWNlTGF1Z2hCZWFtMiwgZmFMYXVnaEJlYW0yLCBmYUxlYWYsIGZhSG91c2VDaGltbmV5VXNlciwgZmFSb3RhdGVSaWdodCwgZmFSZWRvQWx0LCBmYVJvdGF0ZUZvcndhcmQsIGZhVG9vdGgsIGZhSG91c2VDaGltbmV5V2luZG93LCBmYU1vdG9yY3ljbGUsIGZhQmFja3dhcmRGYXN0LCBmYUZhc3RCYWNrd2FyZCwgZmFBZGRyZXNzQm9vazIsIGZhQ29udGFjdEJvb2syLCBmYVNhaWxib2F0LCBmYUJvb2tCb29rbWFyaywgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFVbml2ZXJzYWxBY2Nlc3MsIGZhVG9pbGV0UGFwZXIsIGZhVG9pbGV0UGFwZXJBbHQsIGZhVG9pbGV0UGFwZXJCbGFuaywgZmFWckNhcmRib2FyZCwgZmFQaXp6YVNsaWNlLCBmYVNwcmF5Q2FuLCBmYVZvbHVtZUxvdywgZmFWb2x1bWVEb3duLCBmYUNyb3NzLCBmYVBlcnNvbiwgZmFNYWxlLCBmYUhvdXJnbGFzczMsIGZhSG91cmdsYXNzRW1wdHkyLCBmYUZpc2gsIGZhRHJ1bXN0aWNrQml0ZSwgZmFDaGFydFNpbXBsZSwgZmFBdG9tLCBmYVAsIGZhSmV0RmlnaHRlclVwLCBmYVBsdWdDaXJjbGVYbWFyaywgZmFTaGVldFBsYXN0aWMsIGZhViwgZmFMaXN0LCBmYUxpc3RTcXVhcmVzLCBmYVNvbGFyUGFuZWwsIGZhTGFuZE1pbmVPbiwgZmFIZWFkcGhvbmVzMiwgZmFIZWFkcGhvbmVzQWx0MiwgZmFIZWFkcGhvbmVzU2ltcGxlMiwgZmFCdXMsIGZhRmlsZVBvd2VycG9pbnQyLCBmYVF1b3RlTGVmdCwgZmFRdW90ZUxlZnRBbHQsIGZhQ2hldnJvbkRvd24sIGZhRWFydGhBc2lhLCBmYUdsb2JlQXNpYSwgZmFDZW50U2lnbiwgZmFTaGllbGRDYXQsIGZhU2Nob29sQ2lyY2xlQ2hlY2ssIGZhTWFydGluaUdsYXNzLCBmYUdsYXNzTWFydGluaUFsdCwgZmFQbHVnLCBmYVBhbm9yYW1hLCBmYUNsb2NrUm90YXRlTGVmdCwgZmFIaXN0b3J5LCBmYUphcldoZWF0LCBmYUNsb3VkQXJyb3dEb3duLCBmYUNsb3VkRG93bmxvYWQsIGZhQ2xvdWREb3dubG9hZEFsdCwgZmFUcnVja1JhbXBCb3gsIGZhVHJ1Y2tMb2FkaW5nLCBmYUFuZ2xlRG93biwgZmFQbHVnQ2lyY2xlQ2hlY2ssIGZhV2luZG93TWF4aW1pemUyLCBmYUhhbmRzSG9sZGluZ0NpcmNsZSwgZmFMb2NhdGlvblBpbiwgZmFNYXBNYXJrZXIsIGZhQm93bGluZ0JhbGwsIGZhQ2FydEZsYXRiZWQsIGZhRG9sbHlGbGF0YmVkLCBmYUhvdXNlVXNlciwgZmFIb21lVXNlciwgZmFHaG9zdCwgZmFDb21tZW50Tm9kZXMsIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLCBmYVBsdWdDaXJjbGVQbHVzLCBmYVBlcnNvblN3aW1taW5nLCBmYVN3aW1tZXIsIGZhQ29tbWVudERvdHMyLCBmYUNvbW1lbnRpbmcyLCBmYUNoYXJ0UGllLCBmYVBpZUNoYXJ0LCBmYUZyb2csIGZhV2luZUJvdHRsZSwgZmFJbmJveCwgZmFTcXVhcmVILCBmYUhTcXVhcmUsIGZhSG91c2VNZWRpY2FsLCBmYUNpcmNsZUNoZXZyb25SaWdodCwgZmFDaGV2cm9uQ2lyY2xlUmlnaHQsIGZhRmlsZUNzdiwgZmFIYXRDb3dib3ksIGZhRmFjZUdyaW5Ub25ndWVXaW5rMiwgZmFHcmluVG9uZ3VlV2luazIsIGZhTCwgZmFBcnJvd0Rvd25TaG9ydFdpZGUsIGZhU29ydEFtb3VudERlc2MsIGZhU29ydEFtb3VudERvd25BbHQsIGZhSG91cmdsYXNzSGFsZjIsIGZhSG91cmdsYXNzMjIsIGZhU3Bvb24sIGZhVXRlbnNpbFNwb29uLCBmYUNyZWRpdENhcmQyLCBmYUNyZWRpdENhcmRBbHQyLCBmYUZpbGVJbnZvaWNlRG9sbGFyLCBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmcsIGZhUGFzdGFmYXJpYW5pc20sIGZhTWFydGluaUdsYXNzQ2l0cnVzLCBmYUNvY2t0YWlsLCBmYUJ1bGxob3JuLCBmYUJveFRpc3N1ZSwgZmFNYXR0cmVzc1BpbGxvdywgZmFDaGV2cm9uTGVmdCwgZmFDbG91ZE1vb25SYWluLCBmYUFycm93RG93bjE5LCBmYVNvcnROdW1lcmljQXNjLCBmYVNvcnROdW1lcmljRG93biwgZmFIYW5kU3BvY2syLCBmYVdhbmRNYWdpY1NwYXJrbGVzLCBmYU1hZ2ljV2FuZFNwYXJrbGVzLCBmYUNvbW1lbnRNZWRpY2FsLCBmYUJlbGxTbGFzaDIsIGZhSGFuZHNoYWtlU2xhc2gsIGZhSGFuZHNoYWtlQWx0U2xhc2gsIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2gsIGZhQm90dGxlV2F0ZXIsIGZhRGljZUQyMCwgZmFBcnJvd0Rvd25aQSwgZmFTb3J0QWxwaGFEZXNjLCBmYVNvcnRBbHBoYURvd25BbHQsIGZhQnJ1c2gsIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LCBmYUFycm93VXBTaG9ydFdpZGUsIGZhU29ydEFtb3VudFVwQWx0LCBmYUdyaXBWZXJ0aWNhbCwgZmFHcmlkVmVydGljYWwsIGZhQ2FyVHVubmVsLCBmYUNoYXJ0Q29sdW1uLCBmYVRydWNrQXJyb3dSaWdodCwgZmFUdiwgZmFUZWxldmlzaW9uLCBmYVR2QWx0LCBmYVNlY3Rpb24sIGZhUGVhY2UsIGZhU3RhcjIsIGZhRmxhZzIsIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiwgZmFFeGNsYW1hdGlvblRyaWFuZ2xlLCBmYVdhcm5pbmcsIGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24sIGZhR3JhZHVhdGlvbkNhcCwgZmFNb3J0YXJCb2FyZCwgZmFTdG9yZSwgZmFVc2VyQXN0cm9uYXV0LCBmYUJ1aWxkaW5nRmxhZywgZmFNdWdTYXVjZXIsIGZhQ29mZmVlLCBmYUxlbW9uMiwgZmFDYXJhdmFuLCBmYVEsIGZhTG9jaywgZmFQYWludFJvbGxlciwgZmFWb2x1bWVIaWdoLCBmYVZvbHVtZVVwLCBmYUZvbGRlclBsdXMsIGZhTWVyY3VyeSwgZmFBbmNob3IsIGZhU3F1YXJlUGFya2luZywgZmFQYXJraW5nLCBmYUhhbnVraWFoLCBmYVJvdGF0ZUxlZnQsIGZhUm90YXRlQmFjaywgZmFSb3RhdGVCYWNrd2FyZCwgZmFVbmRvQWx0LCBmYUhlYWRpbmcsIGZhSGVhZGVyLCBmYUNyb3NzaGFpcnMsIGZhQ2lyY2xlTm9kZXMsIGZhV2luZG93UmVzdG9yZTIsIGZhUiwgZmFGaWx0ZXJDaXJjbGVYbWFyaywgZmFHb3B1cmFtLCBmYUhlYXJ0Q2lyY2xlTWludXMsIGZhU3Rhck9mTGlmZSwgZmFCdXNpbmVzc1RpbWUsIGZhQnJpZWZjYXNlQ2xvY2ssIGZhRmlyZUV4dGluZ3Vpc2hlciwgZmFBcnJvd0Rvd25Mb25nLCBmYUxvbmdBcnJvd0Rvd24sIGZhVXNlck1pbnVzLCBmYU1vbmV5Q2hlY2ssIGZhSG91c2VMYXB0b3AsIGZhTGFwdG9wSG91c2UsIGZhRG93bmxvYWQsIGZhQ291Y2gsIGZhUm9hZExvY2ssIGZhU2Npc3NvcnMsIGZhQ3V0LCBmYUJ1ZywgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQsIGZhU2lnbk91dCwgZmFIYW5kSG9sZGluZ0hhbmQsIGZhU3Ryb29wd2FmZWwsIGZhQ2hpbGQsIGZhSWNlQ3JlYW0sIGZhQ29tcHV0ZXJNb3VzZSwgZmFNb3VzZSwgZmFGYXVjZXQsIGZhQXdhcmQsIGZhUGVyc29uRHJvd25pbmcsIGZhQ2FtZXJhUm90YXRlLCBmYUZhY2VHcmluSGVhcnRzMiwgZmFHcmluSGVhcnRzMiwgZmFGaWxlRnJhZ21lbnQsIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwgZmFUb2dnbGVPbiwgZmFMdW5nc1ZpcnVzLCBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsIGZhVGFibGVUZW5uaXMsIGZhQm94ZXNQYWNraW5nLCBmYVBlcnNvbkNoYWxrYm9hcmQsIGZhRGljZVR3bywgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LCBmYUV4Y2hhbmdlLCBmYUZvb3RiYWxsLCBmYUZvb3RiYWxsQmFsbCwgZmFUcnVja01vbnN0ZXIsIGZhQXN0ZXJpc2ssIGZhQmF0dGVyeUZ1bGwsIGZhQmF0dGVyeSwgZmFCYXR0ZXJ5NSwgZmFDaGlsZERyZXNzLCBmYUZhY2VLaXNzQmVhbTIsIGZhS2lzc0JlYW0yLCBmYVRyYXNoQ2FuQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmVBbHQsIGZhRm9udCwgZmFCb3JlSG9sZSwgZmFWaXJ1c0NvdmlkLCBmYUZpbGVQZGYyLCBmYUxhbmd1YWdlLCBmYVNoaWVsZEhhbHZlZCwgZmFTaGllbGRBbHQsIGZhQ2FyZXRVcCwgZmFGaWxlUGVuLCBmYUZpbGVFZGl0LCBmYVBlcnNvbkJpa2luZywgZmFCaWtpbmcsIGZhQm9va09wZW5SZWFkZXIsIGZhQm9va1JlYWRlciwgZmFHbGFzc1dhdGVyRHJvcGxldCwgZmFUb3dlckJyb2FkY2FzdCwgZmFCcm9hZGNhc3RUb3dlciwgZmFNaW5pbWl6ZSwgZmFDb21wcmVzc0Fycm93c0FsdCwgZmFBcnJvd1JpZ2h0VG9DaXR5LCBmYUxhcHRvcE1lZGljYWwsIGZhQnJlYWRTbGljZSwgZmFHbG9iZSwgZmFGb2xkZXJNaW51cywgZmFNYXNrRmFjZSwgZmFCb25nLCBmYVJvYWRCcmlkZ2UsIGZhQXJyb3dVcDkxLCBmYVNvcnROdW1lcmljVXBBbHQsIGZhTW91bnRhaW5DaXR5LCBmYUFycm93RG93bjkxLCBmYVNvcnROdW1lcmljRGVzYywgZmFTb3J0TnVtZXJpY0Rvd25BbHQsIGZhRmFjZUdyaW5XaWRlMiwgZmFHcmluQWx0MiwgZmFQb29wLCBmYURoYXJtYWNoYWtyYSwgZmFCYXR0ZXJ5UXVhcnRlciwgZmFCYXR0ZXJ5MiwgZmFBbmtoLCBmYURpYW1vbmQsIGZhU3Vic2NyaXB0LCBmYVJ1cGVlU2lnbiwgZmFSdXBlZSwgZmFQZXJzb25SaWZsZSwgZmFELCBmYVNxdWFyZU5maSwgZmFUZWV0aCwgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsIGZhU2VhcmNoRG9sbGFyLCBmYUR1bXBzdGVyRmlyZSwgZmFVcGxvYWQsIGZhVXNlclNsYXNoLCBmYVVzZXJBbHRTbGFzaCwgZmFVc2VyTGFyZ2VTbGFzaCwgZmFBcnJvd0xlZnQsIGZhVmlhbFZpcnVzLCBmYUNoZWNrRG91YmxlLCBmYVBhdywgZmFIZWxtZXRTYWZldHksIGZhSGFyZEhhdCwgZmFIYXRIYXJkLCBmYUUsIGZhRmFjZUxhdWdoU3F1aW50MiwgZmFMYXVnaFNxdWludDIsIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIsIGZhQ29tcHJlc3NBbHQsIGZhR2lmdHMsIGZhQmVkLCBmYU1vbmV5QmlsbFRyYW5zZmVyLCBmYVBlcnNvblJ1bm5pbmcsIGZhUnVubmluZywgZmFDaXJjbGVDaGV2cm9uRG93biwgZmFDaGV2cm9uQ2lyY2xlRG93biwgZmFVc2VyTnVyc2UsIGZhRmFjZUtpc3NXaW5rSGVhcnQyLCBmYUtpc3NXaW5rSGVhcnQyLCBmYUZpbGwsIGZhTW9uZXlCaWxsMVdhdmUsIGZhTW9uZXlCaWxsV2F2ZUFsdCwgZmFMYW5kbWFyaywgZmFNdXNpYywgZmFCb29rTWVkaWNhbCwgZmFTaHVmZmxlLCBmYVJhbmRvbSwgZmFVbmRlcmxpbmUsIGZhQnVpbGRpbmdVc2VyLCBmYVJvYm90LCBmYVBsdXMsIGZhQWRkLCBmYUNvcHkyLCBmYUNoZXNzS2luZzIsIGZhSG91c2VGbG9vZFdhdGVyLCBmYUJpdGNvaW5TaWduLCBmYUJveCwgZmFTcXVhcmVQbHVzMiwgZmFQbHVzU3F1YXJlMiwgZmFBcnJvd3NMZWZ0UmlnaHQsIGZhQXJyb3dzSCwgZmFGYW4sIGZhQ3JvdywgZmFGaWxlQ2lyY2xlQ2hlY2ssIGZhTGlua1NsYXNoLCBmYUNoYWluQnJva2VuLCBmYUNoYWluU2xhc2gsIGZhVW5saW5rLCBmYUFycm93Um90YXRlUmlnaHQsIGZhQXJyb3dSaWdodFJvdGF0ZSwgZmFBcnJvd1JvdGF0ZUZvcndhcmQsIGZhUmVkbywgZmFQZW5DbGlwLCBmYVBlbkFsdCwgZmFEb29yQ2xvc2VkLCBmYUFycm93RG93bldpZGVTaG9ydCwgZmFTb3J0QW1vdW50QXNjLCBmYVNvcnRBbW91bnREb3duLCBmYUNhcmV0RG93biwgZmFLLCBmYUNoZWNrVG9TbG90LCBmYVZvdGVZZWEsIGZhRmlzaEZpbnMsIGZhQ29tcHJlc3MsIGZhQXJyb3dVcEFaLCBmYVNvcnRBbHBoYVVwLCBmYVVzZXJHcmFkdWF0ZSwgZmFGaWxlQ29kZTIsIGZhU29hcCwgZmFSZWN5Y2xlLCBmYUZhY2VHcmluV2luazIsIGZhR3JpbldpbmsyLCBmYVdhdGVyTGFkZGVyLCBmYUxhZGRlcldhdGVyLCBmYVN3aW1taW5nUG9vbCwgZmFUb3dlckNlbGwsIGZhQ29sb25TaWduLCBmYUxhcHRvcEZpbGUsIGZhQmFoYWksIGZhSGF5a2FsLCBmYU1vbmV5QmlsbDEyLCBmYU1vbmV5QmlsbEFsdDIsIGZhQ2xvdWRCb2x0LCBmYVRodW5kZXJzdG9ybSwgZmFFdGhlcm5ldCwgZmFIcnl2bmlhU2lnbiwgZmFIcnl2bmlhLCBmYUV5ZVNsYXNoMiwgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLCBmYUx1Z2dhZ2VDYXJ0LCBmYVJhZGlhdGlvbiwgZmFGaWxlV29yZDIsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFUZW50cywgZmFNdWdIb3QsIGZhQm9sdCwgZmFaYXAsIGZhSmFyLCBmYVRydWNrUGxhbmUsIGZhSGFuZEhvbGRpbmdIZWFydCwgZmFBcnJvd1JvdGF0ZUxlZnQsIGZhQXJyb3dMZWZ0Um90YXRlLCBmYUFycm93Um90YXRlQmFjaywgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLCBmYVVuZG8sIGZhRmFjZUFuZ3J5MiwgZmFBbmdyeTIsIGZhQnVyc3QsIGZhWiwgZmFCYW5kYWdlLCBmYUJhbmRBaWQsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFCdXNTaWRlLCBmYUJ1Z3MsIGZhQmVlck11Z0VtcHR5LCBmYUJlZXIsIGZhUGVyc29uQ2lyY2xlQ2hlY2ssIGZhU3RhcGxlciwgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywgZmFOYWlyYVNpZ24sIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFFeWVMb3dWaXNpb24sIGZhTG93VmlzaW9uLCBmYUNpcmNsZUFycm93VXAsIGZhQXJyb3dDaXJjbGVVcCwgZmFDYW1lcmFSZXRybywgZmFDYXBzdWxlcywgZmFQb28sIGZhRWxldmF0b3IsIGZhVGFnLCBmYUZpbGVDaXJjbGVNaW51cywgZmFEb3duTG9uZywgZmFMb25nQXJyb3dBbHREb3duLCBmYUNvbXBhY3REaXNjLCBmYVN1aXRjYXNlUm9sbGluZywgZmFCb29rUXVyYW4sIGZhUXVyYW4sIGZhUGhvbmVTbGFzaCwgZmFSb2FkQ2lyY2xlQ2hlY2ssIGZhU2hvcExvY2ssIGZhSW1hZ2VQb3J0cmFpdCwgZmFQb3J0cmFpdCwgZmFCcmlkZ2VMb2NrLCBmYUhhbW1lciwgZmFBcnJvd1VwMTksIGZhU29ydE51bWVyaWNVcCwgZmFDaGVzc0tuaWdodDIsIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCwgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGluaywgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsIGZhRmFjZUdyaW5CZWFtMiwgZmFHcmluQmVhbTIsIGZhUmVjdGFuZ2xlQWQsIGZhQWQsIGZhQm9va1RhbmFraCwgZmFUYW5ha2gsIGZhSG90VHViUGVyc29uLCBmYUhvdFR1YiwgZmFGaWxlSGFsZkRhc2hlZCwgZmFPdXRkZW50LCBmYURlZGVudCwgZmFIYW5kUGVhY2UyLCBmYUhlYWRTaWRlVmlydXMsIGZhQ29tcGFzczIsIGZhUGVuTmliLCBmYVRlbnRBcnJvd3NEb3duLCBmYUZvcndhcmRGYXN0LCBmYUZhc3RGb3J3YXJkLCBmYUNyb3AsIGZhV2hpc2tleUdsYXNzLCBmYUdsYXNzV2hpc2tleSwgZmFTcXVhcmUyLCBmYUZhY2VHcmluMiwgZmFHcmluMiwgZmFGaWxlQ29udHJhY3QsIGZhQW5nbGVVcCwgZmFGYWNlU21pbGUyLCBmYVNtaWxlMiwgZmFQZXJzb25EcmVzc0J1cnN0LCBmYURpdmlkZSwgZmFDb2RlRm9yaywgZmFIb3VzZUZsYWcsIGZhQnVpbGRpbmdDb2x1bW5zLCBmYUJhbmssIGZhSW5zdGl0dXRpb24sIGZhTXVzZXVtLCBmYVVuaXZlcnNpdHksIGZhUnVnLCBmYUNvZGVNZXJnZSwgZmFIb3VzZVRzdW5hbWksIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsIGZhVW1icmVsbGEsIGZhSGlsbFJvY2tzbGlkZSwgZmFVc2VyU2VjcmV0LCBmYVBhZ2VyLCBmYUJyaWVmY2FzZSwgZmFUcm93ZWxCcmlja3MsIGZhU29ja3MsIGZhVCwgZmFNaWNyb2NoaXAsIGZhVHJ1Y2tNZWRpY2FsLCBmYUFtYnVsYW5jZSwgZmFPbSwgZmFNb3NxdWl0b05ldCwgZmFQcmVzY3JpcHRpb25Cb3R0bGUsIGZhVXNlcnNHZWFyLCBmYVVzZXJzQ29nLCBmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbiwgZmFQYXVzZSwgZmFTdGFmZlNuYWtlLCBmYVJvZEFzY2xlcGl1cywgZmFSb2RTbmFrZSwgZmFTdGFmZkFlc2N1bGFwaXVzLCBmYVBpZ2d5QmFuaywgZmFNb251bWVudCwgZmFBbmdsZXNSaWdodCwgZmFBbmdsZURvdWJsZVJpZ2h0LCBmYURlc2t0b3AsIGZhRGVza3RvcEFsdCwgZmFQbGFuZUNpcmNsZVhtYXJrLCBmYVJldHdlZXQsIGZhVXNlckdlYXIsIGZhVXNlckNvZywgZmFCb3JkZXJBbGwsIGZhQ29pbnMsIGZhTWFyc1N0cm9rZSwgZmFIYW5kc2hha2VBbmdsZSwgZmFIYW5kc0hlbHBpbmcsIGZhQXJyb3dEb3duLCBmYUxvY2F0aW9uRG90LCBmYU1hcE1hcmtlckFsdCwgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ29va2llQml0ZSwgZmFTY3Jld2RyaXZlcldyZW5jaCwgZmFUb29scywgZmFJbmRlbnQsIGZhQmFycywgZmFOYXZpY29uLCBmYUhhbmRzUHJheWluZywgZmFQcmF5aW5nSGFuZHMsIGZhVmlydXNlcywgZmFTY2hvb2xGbGFnLCBmYVRyYWRlbWFyaywgZmFGaXJlQnVybmVyLCBmYUZhY2VTbWlsZUJlYW0yLCBmYVNtaWxlQmVhbTIsIGZhVGVudEFycm93TGVmdFJpZ2h0LCBmYVJvdXRlLCBmYUFuZ2xlc1VwLCBmYUFuZ2xlRG91YmxlVXAsIGZhQnVja2V0LCBmYUxlc3NUaGFuRXF1YWwsIGZhRm9sZGVyQ2xvc2VkMiwgZmFQZXJzb25UaHJvdWdoV2luZG93LCBmYVNjaG9vbExvY2ssIGZhUGVyc29uQnVyc3QsIGZhTGVmdExvbmcsIGZhTG9uZ0Fycm93QWx0TGVmdCwgZmFMb2NhdGlvbkNyb3NzaGFpcnMsIGZhTG9jYXRpb24sIGZhUGVyc29uRG90c0Zyb21MaW5lLCBmYURpYWdub3NlcywgZmFHYXVnZVNpbXBsZUhpZ2gsIGZhVGFjaG9tZXRlciwgZmFUYWNob21ldGVyRmFzdCwgZmFBbmdsZXNMZWZ0LCBmYUFuZ2xlRG91YmxlTGVmdCwgZmFVcERvd24sIGZhQXJyb3dzQWx0ViwgZmFCYXR0ZXJ5RW1wdHksIGZhQmF0dGVyeTAsIGZhS2V5Ym9hcmQyLCBmYUNvb2tpZSwgZmFTdG9wd2F0Y2gsIGZhRWplY3QsIGZhU2F0ZWxsaXRlRGlzaCwgZmFGYWNlUm9sbGluZ0V5ZXMyLCBmYU1laFJvbGxpbmdFeWVzMiwgZmFMaXN0Q2hlY2ssIGZhVGFza3MsIGZhU2Fja1htYXJrLCBmYUhhc2h0YWcsIGZhVHJhaW4sIGZhR2FtZXBhZCwgZmFGaWxlRXhwb3J0LCBmYUFycm93UmlnaHRGcm9tRmlsZSwgZmFGYWNlR3JpbWFjZTIsIGZhR3JpbWFjZTIsIGZhVHJhaW5TdWJ3YXksIGZhU3Vid2F5LCBmYUNpcmNsZURvdDIsIGZhRG90Q2lyY2xlMiwgZmFPYmplY3RHcm91cDIsIGZhU2hpcCwgZmFDLCBmYVNxdWFyZVBob25lLCBmYVBob25lU3F1YXJlLCBmYVJ1bGVyQ29tYmluZWQsIGZhQXJyb3dzUm90YXRlLCBmYVJlZnJlc2gsIGZhU3luYywgZmFQZXJzb25EcmVzcywgZmFGZW1hbGUsIGZhQm9va09wZW4sIGZhRm9sZGVyVHJlZSwgZmFCb3hBcmNoaXZlLCBmYUFyY2hpdmUsIGZhVGVudEFycm93RG93blRvTGluZSwgZmFRcmNvZGUsIGZhRHJhZ29uLCBmYUhvdXJnbGFzc0VuZCwgZmFIb3VyZ2xhc3MzMiwgZmFHcmlwLCBmYUdyaWRIb3Jpem9udGFsLCBmYUdyaXBIb3Jpem9udGFsLCBmYUJvcmRlclRvcExlZnQsIGZhQm9yZGVyU3R5bGUsIGZhTGlzdFVsLCBmYUxpc3REb3RzLCBmYVBlb3BsZVJvYmJlcnksIGZhTW9iaWxlQnV0dG9uLCBmYUFycm93RG93bkFaLCBmYVNvcnRBbHBoYUFzYywgZmFTb3J0QWxwaGFEb3duLCBmYU1vbmV5QmlsbCwgZmFDaXJjbGVNaW51cywgZmFNaW51c0NpcmNsZSwgZmFBcnJvd1BvaW50ZXIsIGZhTW91c2VQb2ludGVyLCBmYVNxdWFyZVNoYXJlTm9kZXMsIGZhU2hhcmVBbHRTcXVhcmUsIGZhVGFibGVDZWxsc0xhcmdlLCBmYVRoTGFyZ2UsIGZhQ2F0LCBmYUNhbGVuZGFyV2VlaywgZmFDb2RlQ29tcGFyZSwgZmFSb2FkQ2lyY2xlWG1hcmssIGZhUGFsbGV0LCBmYUNha2VDYW5kbGVzLCBmYUJpcnRoZGF5Q2FrZSwgZmFDYWtlLCBmYUJ1Z1NsYXNoLCBmYVRhcnAsIGZhRGlhZ3JhbVByZWRlY2Vzc29yLCBmYUZhY2VGbHVzaGVkMiwgZmFGbHVzaGVkMiwgZmFEaWFncmFtTmV4dCwgZmFBbmNob3JDaXJjbGVYbWFyaywgZmFQZXJzb25DaXJjbGVYbWFyaywgZmFTcGEsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUhlYXJ0Q2lyY2xlQ2hlY2ssIGZhTWFyc1N0cm9rZVJpZ2h0LCBmYU1hcnNTdHJva2VILCBmYVRvd2VyT2JzZXJ2YXRpb24sIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhRmF1Y2V0RHJpcCwgZmFDaXJjbGVJbmZvLCBmYUluZm9DaXJjbGUsIGZhRmVhdGhlciwgZmFCb3dsUmljZSwgZmFTdGFySGFsZlN0cm9rZTIsIGZhU3RhckhhbGZBbHQyLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFNYXNrVmVudGlsYXRvciwgZmFGaWxlVmlkZW8yLCBmYUFycm93VHJlbmREb3duLCBmYU9pbENhbiwgZmFQZW9wbGVDYXJyeUJveCwgZmFQZW9wbGVDYXJyeSwgZmFDaGFpciwgZmFXaW5kLCBmYUxheWVyR3JvdXAsIGZhSGVhZFNpZGVNYXNrLCBmYUhhbmRzLCBmYVNpZ25MYW5ndWFnZSwgZmFTaWduaW5nLCBmYVRhYmxldHMsIGZhV2VpZ2h0SGFuZ2luZywgZmFEaWNlLCBmYVNob3BTbGFzaCwgZmFTdG9yZUFsdFNsYXNoLCBmYVNvcnREb3duLCBmYVNvcnREZXNjLCBmYVBlc2V0YVNpZ24sIGZhVGFibGV0U2NyZWVuQnV0dG9uLCBmYVRhYmxldEFsdCwgZmFIYW5kSG9sZGluZ0RvbGxhciwgZmFIYW5kSG9sZGluZ1VzZCwgZmFTaGllbGQsIGZhU2hpZWxkQmxhbmssIGZhRmFjZUxhdWdoMiwgZmFMYXVnaDIsIGZhSGFuZHNIb2xkaW5nLCBmYUNhcnRTaG9wcGluZywgZmFTaG9wcGluZ0NhcnQsIGZhT2N0YWdvbiwgZmFIYW5kUG9pbnRlcjIsIGZhUmVnaXN0ZXJlZDIsIGZhSG91c2VTaWduYWwsIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiwgaWNvbnMzOwp2YXIgaW5pdF9mcmVlX3NvbGlkX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIoKSB7CiAgICBwcmVmaXgzID0gImZhcyI7CiAgICBmYTAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzMCIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwbDAgMTI4YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDA4LjQgMCAzMjBMMCAxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NmwwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6Il0KICAgIH07CiAgICBmYTEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICIzMSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDY0IDAgMCAzMjAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjMyIiwgIk00OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNzEgMGM2MC4yIDAgMTA5IDQ4LjggMTA5IDEwOSAwIDQzLjgtMjYuMiA4My4zLTY2LjQgMTAwLjRsLTEzOS4xIDU5QzExOSAzMTUuNCA5NiAzNTAuMiA5NiAzODguN2wwIDI3LjMgMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU5LjNjMC02NC4yIDM4LjQtMTIyLjIgOTcuNS0xNDcuM2wxMzkuMS01OWMxNi42LTcuMSAyNy40LTIzLjQgMjcuNC00MS40IDAtMjQuOS0yMC4yLTQ1LTQ1LTQ1TDgwIDk2QzYyLjMgOTYgNDggODEuNyA0OCA2NHoiXQogICAgfTsKICAgIGZhMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjMzIiwgIk04MCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDE2MCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4IDAgMzguMi0xNi44IDcyLjUtNDMuMyA5NiAyNi42IDIzLjUgNDMuMyA1Ny44IDQzLjMgOTYgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDgwIDI4OHoiXQogICAgfTsKICAgIGZhNCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjM0IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjI0LTE5MiAwIDAtMjI0eiJdCiAgICB9OwogICAgZmE1ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiMzUiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwIDAgMTEyIDEyMCAwYzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2UzI1OS4xIDQ4MCAxODQgNDgwTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNTIgMGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MkwzMiAyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6Il0KICAgIH07CiAgICBmYTYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzNiIsICJNMjU2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04OCAwYy00OC42IDAtODggMzkuNC04OCA4OGwwIDMyLjJjMjIuOS0xNS4zIDUwLjQtMjQuMiA4MC0yNC4ybDQ4IDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjg3LjUgNDgwIDIwOCA0ODBsLTQ4IDBDODAuNSA0ODAgMTYgNDE1LjUgMTYgMzM2bDAtMTUyQzE2IDEwMC4xIDg0LjEgMzIgMTY4IDMybDg4IDB6TTgwIDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHoiXQogICAgfTsKICAgIGZhNyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI3IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI1NiAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTIyNCAzODRjLTguOSAxNS4zLTI4LjUgMjAuNC00My44IDExLjVzLTIwLjQtMjguNS0xMS41LTQzLjhMMjMyLjMgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhOCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI4IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM4IiwgIk0zMDQgMTYwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC0zMiAwYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOCAwIDM0LjYgMTMuNyA2NiAzNiA4OS0zMS41IDIzLjMtNTIgNjAuOC01MiAxMDMgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsNjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQyLjItMjAuNS03OS43LTUyLTEwMyAyMi4zLTIzIDM2LTU0LjQgMzYtODl6TTE3Ni4xIDI4OGwxNS45IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRsNDguMSAwem0wLTY0TDE0NCAyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAzNS4zLTI4LjYgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYTkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiOSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzOSIsICJNMjA4IDMyMGMyOS42IDAgNTcuMS04LjkgODAtMjQuMmwwIDMyLjJjMCA0OC42LTM5LjQgODgtODggODhMOTYgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEwNCAwYzgzLjkgMCAxNTItNjguMSAxNTItMTUybDAtMTUyLjFDMzUxLjkgOTYuNCAyODcuNSAzMiAyMDggMzJsLTQ4IDBDODAuNSAzMiAxNiA5Ni41IDE2IDE3NlM4MC41IDMyMCAxNjAgMzIwbDQ4IDB6bTgwLTE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDggMGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MGw0OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgweiJdCiAgICB9OwogICAgZmFEb2xsYXJTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvbGxhci1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MTc4LCA2MTc4MSwgImRvbGxhciIsICJ1c2QiXSwgIjI0IiwgIk0xMzYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTExNC45IDBjLTI0LjkgMC00NS4xIDIwLjItNDUuMSA0NS4xIDAgMjIuNSAxNi41IDQxLjUgMzguNyA0NC43bDkxLjYgMTMuMWM1My44IDcuNyA5My43IDUzLjcgOTMuNyAxMDggMCA2MC4zLTQ4LjkgMTA5LjEtMTA5LjEgMTA5LjFsLTEwLjkgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtNzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMzAuOSAwYzI0LjkgMCA0NS4xLTIwLjIgNDUuMS00NS4xIDAtMjIuNS0xNi41LTQxLjUtMzguNy00NC43bC05MS42LTEzLjFDNTUuOSAyNzMuNSAxNiAyMjcuNCAxNiAxNzMuMSAxNiAxMTIuOSA2NC45IDY0IDEyNS4xIDY0bDEwLjkgMCAwLTQweiJdCiAgICB9OwogICAgZmFEb2xsYXIgPSBmYURvbGxhclNpZ247CiAgICBmYVVzZCA9IGZhRG9sbGFyU2lnbjsKICAgIGZhRG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAyMV0sICJmNmQzIiwgIk0zMiAxMTJjMTYuNiAwIDMwLjIgMTIuNiAzMS44IDI4LjdsLjMgNi42QzY1LjggMTYzLjQgNzkuNCAxNzYgOTYgMTc2bDE3OS4xIDAgMTQwLjkgNjAuNCAwIDI0My42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzMS4zQzI5NiAzNjEgMjY4LjggMzY4IDI0MCAzNjhzLTU2LTctODAtMTkuM0wxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0NS42Yy0zNy4zLTEzLjItNjQtNDguNi02NC05MC40IDAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTUuOC0zMmM3LjcgMCAxNC45IDMuNiAxOS42IDkuOEwzOTIgMCA0NDQuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDMyIDU1MiAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC02NCAwLTcgMjgtMTI0LjctNTMuNCAzMS42LTE0Ny4yQzMzNC4zLTIzLjkgMzQ0LjItMzIgMzU1LjgtMzJ6TTQ0OCA0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYVRydWNrTW92aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vdmluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGRmIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4IDI1LjIgMCA0OC0xMC42IDY0LTI3LjYgMTYgMTcgMzguOCAyNy42IDY0IDI3LjYgNDAuMyAwIDc0LjItMjcuMSA4NC43LTY0bDEzNC42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NCA0MyAwIDc4LjktMzAuOSA4Ni41LTcxLjcgMjAtMTAuOCAzMy41LTMyIDMzLjUtNTYuM2wwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDU3NiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ4MCAxOTJsNTAuNyAwIDQ1LjMgNDUuMyAwIDUwLjctOTYgMCAwLTk2ek04OCAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0zOTIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjE2IDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVJvdGF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjAsICJzeW5jLWFsdCJdLCAiZjJmMSIsICJNNDgwLjEgMTkybDcuOSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAuMiA0NzEgN0w0MTkuMyA1OC44QzM3NSAyMi4xIDMxOCAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjFDNzkuMiAxMzUuNSAxNTkuMyA2NCAyNTYgNjQgMzAwLjQgNjQgMzQxLjIgNzkgMzczLjcgMTA0LjNMMzI3IDE1MWMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMzMzQuMyAxOTIgMzQ0IDE5MmwxMzYuMSAwem0yOS40IDEwMC41YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNDQuNCAwLTg1LjItMTUtMTE3LjctNDAuM0wxODUgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIwIDE2OCAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA1MTEuOCA0MSA1MDVsNTEuOC01MS44QzEzNyA0ODkuOSAxOTQgNTEyIDI1NiA1MTIgMzg1IDUxMiA0OTEuNyA0MTYuNiA1MDkuNCAyOTIuNXoiXQogICAgfTsKICAgIGZhU3luY0FsdCA9IGZhUm90YXRlOwogICAgZmFTcXVhcmVNaW51czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3NjcsICJtaW51cy1zcXVhcmUiXSwgImYxNDYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcyIDIwMGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzU3F1YXJlMiA9IGZhU3F1YXJlTWludXMyOwogICAgZmFBbGlnbkp1c3RpZnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tanVzdGlmeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM5IiwgIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem0wIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQ0OCA0NDhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckNoZWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjc0IiwgIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTIyIDE2MS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMzEuMiAxMzcgMjc5LjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxOTUuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhRmFjZUtpc3MyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgImtpc3MiXSwgImY1OTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgMjg4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFLaXNzMiA9IGZhRmFjZUtpc3MyOwogICAgZmFLaXRjaGVuU2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpdGNoZW4tc2V0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWEiLCAiTTI0MCAxNDRhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4IDY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmw3MS44IDBjOC44LTkuOCAyMS42LTE2IDM1LjgtMTZsMTA0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTEwNCAwYy0xNC4yIDAtMjctNi4yLTM1LjgtMTZsLTcxLjggMHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5NiAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjg4IDQ2NGwwLTExMiAyMjQgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4ek00OCAzMjBsMTI4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE2IDBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMCAzMiAxNiAwek0yNCA0NjRsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFEbmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG5hIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTE2XSwgImY0NzEiLCAiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgNTcuOC0yNC40IDEwNC44LTU3LjQgMTQ0LjUtMjQuMSAyOC45LTUzLjggNTUuMS04My42IDc5LjUgMjkuOCAyNC41IDU5LjUgNTAuNiA4My42IDc5LjUgMzMgMzkuNiA1Ny40IDg2LjcgNTcuNCAxNDQuNSAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkw2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEMwIDQyMi4yIDI0LjQgMzc1LjIgNTcuNCAzMzUuNSA4MS41IDMwNi42IDExMS4yIDI4MC41IDE0MSAyNTYgMTExLjIgMjMxLjUgODEuNSAyMDUuNCA1Ny40IDE3Ni41IDI0LjQgMTM2LjggMCA4OS44IDAgMzIgMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMjU2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI4My41IDM4NGwtMTgyLjkgMGMtOC4yIDEwLjUtMTUuMSAyMS4xLTIwLjYgMzJsMjI0LjIgMGMtNS42LTEwLjktMTIuNS0yMS41LTIwLjYtMzJ6TTIzOCAzMzZjLTE0LjMtMTMtMjkuOC0yNS44LTQ2LTM5LTE2LjIgMTMuMS0zMS43IDI2LTQ2IDM5bDkyIDB6TTEwMC41IDEyOGwxODIuOSAwYzguMi0xMC41IDE1LjEtMjEuMSAyMC42LTMyTDc5LjkgOTZjNS42IDEwLjkgMTIuNSAyMS41IDIwLjYgMzJ6TTE0NiAxNzZjMTQuMyAxMyAyOS44IDI1LjggNDYgMzkgMTYuMi0xMy4xIDMxLjctMjYgNDYtMzlsLTkyIDB6Il0KICAgIH07CiAgICBmYUNoaWxkUmVhY2hpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGQtcmVhY2hpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTU5ZCIsICJNMjU2IDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMTUyLjkgMTY5LjNjLTIzLjctOC40LTQ0LjUtMjQuMy01OC44LTQ1LjhMNzQuNiA5NC4yQzY0LjggNzkuNSA0NSA3NS42IDMwLjMgODUuNFMxMS42IDExNSAyMS40IDEyOS44TDQwLjkgMTU5YzE4LjEgMjcuMSA0Mi44IDQ4LjQgNzEuMSA2Mi40TDExMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU4LjRjMjkuMS0xNC4yIDU0LjQtMzYuMiA3Mi43LTY0LjJsMTguMi0yNy45YzkuNi0xNC44IDUuNC0zNC42LTkuNC00NC4zcy0zNC42LTUuNS00NC4zIDkuNEwyOTEgMTIyLjRjLTIxLjggMzMuNC01OC45IDUzLjYtOTguOCA1My42LTEyLjYgMC0yNC45LTItMzYuNi01LjgtLjktLjMtMS44LS43LTIuNy0uOXoiXQogICAgfTsKICAgIGZhUGFzdGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhc3RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpbGUtY2xpcGJvYXJkIl0sICJmMGVhIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTIgMCAwLTIyNGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmw2NCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjQ4IDExMmwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTQwIDQ4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MHoiXQogICAgfTsKICAgIGZhRmlsZUNsaXBib2FyZDIgPSBmYVBhc3RlMjsKICAgIGZhTWV0ZW9yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1ldGVvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCAiZjc1MyIsICJNNDkzLjcgLjlsLTE5NC4yIDc0LjcgMi4zLTI5LjNjMS0xMi44LTEyLjgtMjEuNS0yNC0xNS4xTDEwMS4zIDEzMy40QzM4LjYgMTY5LjcgMCAyMzYuNiAwIDMwOSAwIDQyMS4xIDkwLjkgNTEyIDIwMyA1MTIgMjc1LjQgNTEyIDM0Mi4zIDQ3My40IDM3OC42IDQxMC43TDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuMyA3NC43LTE5NC4yYy42LTEuNSAuOS0zLjIgLjktNC44IDAtNy41LTYtMTMuNS0xMy41LTEzLjUtMS43IDAtMy4zIC4zLTQuOCAuOXpNMTkyIDE5MmExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTYgOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFHZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjb2dzIl0sICJmMDg1IiwgIk00MTUuOSAyMTAuNWMxMi4yLTMuMyAyNSAyLjUgMzAuNSAxMy44TDQ2NSAyNjEuOWMxMC4zIDEuNCAyMC40IDQuMiAyOS45IDguMWwzNS0yMy4zYzEwLjUtNyAyNC40LTUuNiAzMy4zIDMuM2wxOS4yIDE5LjJjOC45IDguOSAxMC4zIDIyLjkgMy4zIDMzLjNsLTIzLjMgMzQuOWMxLjkgNC43IDMuNiA5LjYgNSAxNC43IDEuNCA1LjEgMi4zIDEwLjEgMyAxNS4ybDM3LjcgMTguNmMxMS4zIDUuNiAxNy4xIDE4LjQgMTMuOCAzMC41bC03IDI2LjJjLTMuMyAxMi4xLTE0LjYgMjAuMy0yNy4yIDE5LjVsLTQyLTIuN2MtNi4zIDguMS0xMy42IDE1LjYtMjEuOSAyMmwyLjcgNDEuOWMuOCAxMi42LTcuNCAyNC0xOS41IDI3LjJsLTI2LjIgN2MtMTIuMiAzLjMtMjQuOS0yLjUtMzAuNS0xMy44bC0xOC42LTM3LjZjLTEwLjMtMS40LTIwLjQtNC4yLTI5LjktOC4xbC0zNSAyMy4zYy0xMC41IDctMjQuNCA1LjYtMzMuMy0zLjNsLTE5LjItMTkuMmMtOC45LTguOS0xMC4zLTIyLjgtMy4zLTMzLjNsMjMuMy0zNWMtMS45LTQuNy0zLjYtOS42LTUtMTQuN3MtMi4zLTEwLjItMy0xNS4ybC0zNy43LTE4LjZjLTExLjMtNS42LTE3LTE4LjQtMTMuOC0zMC41bDctMjYuMmMzLjMtMTIuMSAxNC42LTIwLjMgMjcuMi0xOS41bDQxLjkgMi43YzYuMy04LjEgMTMuNi0xNS42IDIxLjktMjJsLTIuNy00MS44Yy0uOC0xMi42IDcuNC0yNCAxOS41LTI3LjJsMjYuMi03ek00NDguNCAzNDBhNDQgNDQgMCAxIDAgLjEgODggNDQgNDQgMCAxIDAgLS4xLTg4ek0yMjQuOS00NS41bDI2LjIgN2MxMi4xIDMuMyAyMC4zIDE0LjcgMTkuNSAyNy4ybC0yLjcgNDEuOGM4LjMgNi40IDE1LjYgMTMuOCAyMS45IDIybDQyLTIuN2MxMi41LS44IDIzLjkgNy40IDI3LjIgMTkuNWw3IDI2LjJjMy4yIDEyLjEtMi41IDI0LjktMTMuOCAzMC41bC0zNy43IDE4LjZjLS43IDUuMS0xLjcgMTAuMi0zIDE1LjJzLTMuMSAxMC01IDE0LjdsMjMuMyAzNWM3IDEwLjUgNS42IDI0LjQtMy4zIDMzLjNMMzA3LjMgMjYyYy04LjkgOC45LTIyLjggMTAuMy0zMy4zIDMuM0wyMzkgMjQyYy05LjUgMy45LTE5LjYgNi43LTI5LjkgOC4xbC0xOC42IDM3LjZjLTUuNiAxMS4zLTE4LjQgMTctMzAuNSAxMy44bC0yNi4yLTdjLTEyLjItMy4zLTIwLjMtMTQuNy0xOS41LTI3LjJsMi43LTQxLjljLTguMy02LjQtMTUuNi0xMy44LTIxLjktMjJsLTQyIDIuN2MtMTIuNSAuOC0yMy45LTcuNC0yNy4yLTE5LjVsLTctMjYuMmMtMy4yLTEyLjEgMi41LTI0LjkgMTMuOC0zMC41bDM3LjctMTguNmMuNy01LjEgMS43LTEwLjEgMy0xNS4yIDEuNC01LjEgMy0xMCA1LTE0LjdMNTUuMSA0Ni41Yy03LTEwLjUtNS42LTI0LjQgMy4zLTMzLjNMNzcuNi02YzguOS04LjkgMjIuOC0xMC4zIDMzLjMtMy4zbDM1IDIzLjNjOS41LTMuOSAxOS42LTYuNyAyOS45LTguMWwxOC42LTM3LjZjNS42LTExLjMgMTguMy0xNyAzMC41LTEzLjh6TTE5Mi40IDg0YTQ0IDQ0IDAgMSAwIDAgODggNDQgNDQgMCAxIDAgMC04OHoiXQogICAgfTsKICAgIGZhQ29ncyA9IGZhR2VhcnM7CiAgICBmYUZpbGVDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs1ODYwNl0sICJlNDk0IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFJY2ljbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImljaWNsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhZCIsICJNNzUuOCAzMDQuOEwxIDM1LjdDLjMgMzMuMiAwIDMwLjcgMCAyOC4yIDAgMTIuNiAxMi42IDAgMjguMiAwTDQ4Mi40IDBjMTYuMyAwIDI5LjYgMTMuMiAyOS42IDI5LjYgMCAxLjYtLjEgMy4zLS40IDQuOUw0MzQuNiA0OTYuMWMtMS41IDkuMi05LjUgMTUuOS0xOC44IDE1LjktOS4yIDAtMTcuMS02LjYtMTguNy0xNS42TDMzNiAxNjAgMzA3LjIgMzAzLjljLTEuOSA5LjMtMTAuMSAxNi4xLTE5LjYgMTYuMS05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjctOS4zIDAtMTcuNS02LjItMjAtMTUuMnoiXQogICAgfTsKICAgIGZhQXJyb3dUcmVuZFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXRyZW5kLXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTgiLCAiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04Mi43LTE2OS40IDE2OS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjY5LjMgNTQuNiA0MDYuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMEwzMjAgMzA2LjcgNDY2LjcgMTYwIDM4NCAxNjB6Il0KICAgIH07CiAgICBmYUhleGFnb25Ob2Rlc0JvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbi1ub2Rlcy1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU2OWEiLCAiTTI0OCAxMDYuNmMxOC45LTkgMzItMjguMyAzMi01MC42YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2YzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTIuOCAxLjMtNS41IDIuOS04IDQuN2wtODAuMS00NS44YzEuNi0yMC44LTguNi00MS42LTI3LjktNTIuOEM1Ny4yIDk2IDIzIDEwNS4yIDcuNSAxMzJTMS4yIDE5MyAyOCAyMDguNWMxLjMgLjggMi42IDEuNSA0IDIuMWwwIDkwLjhjLTEuMyAuNi0yLjcgMS4zLTQgMi4xQzEuMiAzMTktOCAzNTMuMiA3LjUgMzgwUzU3LjIgNDE2IDg0IDQwMC41YzE5LjMtMTEuMSAyOS40LTMyIDI3LjgtNTIuOGw1MC41LTI4LjljLTExLjUtMTEuMi0xOS45LTI1LjYtMjMuOC00MS43TDg4IDMwNi4xYy0yLjYtMS44LTUuMi0zLjMtOC00LjdsMC05MC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLS4xIDEuNC0uMiAyLjgtLjIgNC4zYzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTE4LjkgOS0zMiAyOC4zLTMyIDUwLjZjMCAzMC45IDI1LjEgNTYgNTYgNTZjMzAuNyAwIDU1LjYtMjQuNyA1Ni01NS4yYy03LjUtMTIuOS0xMy41LTI2LjgtMTcuNi00MS41Yy00LjItNC05LjEtNy4zLTE0LjQtOS45bDAtOTguOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsMTAuNSA2YzUuNS0xNS4zIDEzLjEtMjkuNSAyMi40LTQyLjVsLTkuMS01LjJjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHpNNDQwLjUgMTMyQzQyNSAxMDUuMiAzOTAuOCA5NiAzNjQgMTExLjVjLTE5LjMgMTEuMS0yOS40IDMyLTI3LjggNTIuOGwtNTAuNiAyOC45YzExLjUgMTEuMiAxOS45IDI1LjYgMjMuOCA0MS43TDM2MCAyMDUuOWMuNCAuMyAuOCAuNiAxLjMgLjljMjEuNy05LjUgNDUuNi0xNC44IDcwLjgtMTQuOGMyIDAgNCAwIDUuOSAuMWMxMi4xLTE3LjMgMTMuOC00MC42IDIuNi02MC4xek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNDcuOS0yMjVjNC4zIDMuNyA1LjQgOS45IDIuNiAxNC45TDQ1Mi40IDM1NmwzNS42IDBjNS4yIDAgOS44IDMuMyAxMS40IDguMnMtLjEgMTAuMy00LjIgMTMuNGwtOTYgNzJjLTQuNSAzLjQtMTAuOCAzLjItMTUuMS0uNnMtNS40LTkuOS0yLjYtMTQuOUw0MTEuNiAzODAgMzc2IDM4MGMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnoiXQogICAgfTsKICAgIGZhUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVlc3Rpb24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDA2NywgMTAwNjgsIDYxNzM2XSwgIjNmIiwgIk02NCAxNjBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQyLjctMjcuOSA3OC45LTY2LjUgOTEuNC0yOC40IDkuMi02MS41IDM1LjMtNjEuNSA3Ni42bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0YzAtMS43IC42LTQuMSAzLjUtNy4zIDMtMy4zIDcuOS02LjUgMTMuNy04LjQgNjQuMy0yMC43IDExMC44LTgxIDExMC44LTE1Mi4zIDAtODguNC03MS42LTE2MC0xNjAtMTYwUzAgNzEuNiAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem05NiAzNTJjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDAtNDAgMTcuOS00MCA0MCAxNy45IDQwIDQwIDQweiJdCiAgICB9OwogICAgZmFIYW5kc0JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWJvdW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjkiLCAiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCAyMTMuOWMwIDE0LjIgNS4xIDI3LjkgMTQuMyAzOC43TDk5LjYgMzUyIDk2IDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzODQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMy42IDAgODUuMy05OS41YzkuMi0xMC44IDE0LjMtMjQuNSAxNC4zLTM4LjdMNTc2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyLjgtNjkuMyA5Mi40Yy01LjcgNy42LTE2LjEgOS42LTI0LjIgNC44LTkuNy01LjctMTIuMS0xOC43LTUuMS0yNy41TDQ0MSAxODBjMTAuOC0xMy41IDguOS0zMy4zLTQuNC00NC41cy0zMy05LjgtNDQuNSAzLjJsLTQ2LjcgNTIuNUMzMjkgMjA5LjcgMzIwIDIzMy40IDMyMCAyNTguMWwwIDkzLjktNjQgMCAwLTkzLjljMC0yNC42LTktNDguNC0yNS40LTY2LjhsLTQ2LjctNTIuNWMtMTEuNS0xMy0zMS4zLTE0LjQtNDQuNS0zLjJTMTI0LjIgMTY2LjQgMTM1IDE4MGwyNy42IDM0LjVjNyA4LjggNC43IDIxLjgtNS4xIDI3LjUtOC4xIDQuOC0xOC42IDIuNy0yNC4yLTQuOEw2NCAxNDQuOCA2NCAzMnptNjQgNDQ4bDAgMzIgMTI4IDAgMC0zMiA2NCAwIDAgMzIgMTI4IDAgMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDk2IDQzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAweiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1sdWdnYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NTQiLCAiTTI2NC4zIDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptLTggMTgxLjNsLTIyLjYgMjIuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzcuNWMwIDEyLjMtNyAyMy0xNy4yIDI4LjQtLjkgNC4yLTIuNCA4LjQtNC4zIDEyLjNsLTY5IDEzOC4xLS44LS40LTI3LjcgNTUuM2MtOS45IDE5LjgtMzMuOSAyNy44LTUzLjcgMTcuOUwxNC42IDUyMWMtMTkuOC05LjktMjcuOC0zMy45LTE3LjktNTMuN0w0Ny4zIDM2Ni4zYzkuOS0xOS44IDMzLjktMjcuOCA1My43LTE3LjlsMzAuNyAxNS4zIDI4LjMtNTYuNmMuMy0uNiAuNC0xLjIgLjQtMS44bDAtMTYuOWMwLS4yIDAtLjMgMC0uNWwwLTM3LjVjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlsMzUuMS0zNS4xYzIyLjgtMjIuOCA1My42LTM1LjYgODUuOC0zNS42IDM2LjkgMCA3MS44IDE2LjggOTQuOCA0NS42TDQyMi4xIDE4MGM2LjEgNy42IDE1LjMgMTIgMjUgMTJsMzMuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMy4yIDBjLTI5LjIgMC01Ni43LTEzLjMtNzUtMzZsLTMuOC00LjcgMCAxMTUuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNMNDQ4IDUwNy41YzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4yTDM3MiA0MjguNGMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtNjkuM3ptLjEgMTY1LjhjMi40IDIuMyA0LjggNC42IDcuNCA2LjhsNDYgMzkuNC0yLjIgNy42Yy00LjUgMTUuNy0xMi45IDMwLTI0LjQgNDEuNWwtNjguMyA2OC4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMzggNDIxLjFjMy44LTMuOCA2LjYtOC42IDguMS0xMy44TDI1Ni40IDM3MXoiXQogICAgfTsKICAgIGZhRmlsZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1kb3dubG9hZCJdLCAiZjU2ZCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE3NSA0NDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjMgMC04Ni4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODYuMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NHoiXQogICAgfTsKICAgIGZhRmlsZURvd25sb2FkID0gZmFGaWxlQXJyb3dEb3duOwogICAgZmFQZXJzb25Cb290aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYm9vdGgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1NiIsICJNNDAgMjRBNTYgNTYgMCAxIDEgMTUyIDI0IDU2IDU2IDAgMSAxIDQwIDI0em01MS4xIDg4YzIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM2IDguNCAxNS43IDEzLjQgMjYgMTMuNGwzMS4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzIwOS44IDM3My4zIDIyNCA0MDEuOCAyMjQgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDcwLjQgMzQ4LjhDNDYuMiAzMzAuNyAzMiAzMDIuMiAzMiAyNzJsMC0xMDAuOUMzMiAxMzguNSA1OC41IDExMiA5MS4xIDExMnpNMzIgNTEybDAtMTMyLjdjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMOTYgNDI4IDk2IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptNTQ0LTg4bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi0xNjggMGMtNy4xIDAtMTMuOC0zLjEtMTguNC04LjZzLTYuNS0xMi42LTUuMy0xOS42bDMwLjctMTc2LjctNjMuMS0xMzcuNiAwIDcyYy01LjItMS0xMC41LTEuNi0xNi0xLjZsLTMyIDAgMC0xMjBjMC0zMC45IDI1LjEtNTYgNTYtNTZMNTIwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzNjh6TTI4OCAzMzZjNS41IDAgMTAuOC0uNiAxNi0xLjZMMzA0IDUyMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE4NCAzMiAweiJdCiAgICB9OwogICAgZmFMb2N1c3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jdXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MjAiLCAiTTMyOCAzMmMxMzcgMCAyNDggMTExIDI0OCAyNDhsMCA0MC0uNCA4LjJDNTcxLjUgMzY4LjUgNTM3LjQgNDAwIDQ5NiA0MDBsLTEyLjMgMCAyNS4yIDQ0LjFjNi42IDExLjUgMi42IDI2LjItOC45IDMyLjhzLTI2LjIgMi42LTMyLjctOC45bC0zOC44LTY3LjktODAuNCAwLTQ4LjIgNjkuN2MtNy41IDEwLjktMjIuNSAxMy42LTMzLjQgNi4xcy0xMy42LTIyLjUtNi4xLTMzLjRsMjkuMy00Mi4zLTc0LjUgMC01MS43IDcwLjJjLTcuOSAxMC43LTIyLjkgMTIuOS0zMy42IDUuMXMtMTIuOS0yMi45LTUuMS0zMy42bDQwLjUtNTUtNDMtMTYuNC03OS4zIDEwMC41Yy04LjIgMTAuNC0yMy4zIDEyLjItMzMuNyA0cy0xMi4yLTIzLjMtNC0zMy43bDI0MC0zMDQgMi4xLTIuM2M1LjItNS4xIDEyLjUtNy41IDE5LjktNi42IDguNCAxLjEgMTUuNiA2LjUgMTguOSAxNC4zbDIxLjcgNTAuNyA0MC45LTU1LjUgMi4xLTIuNGM1LjEtNS4zIDEyLjUtOCAyMC03LjIgOC41IDEgMTUuOSA2LjUgMTkuMyAxNC40bDQxLjggOTcuNSA2NC4yIDBjMTAuMiAwIDIwIDIgMjkgNS41LTE2LjQtOTQtOTguMy0xNjUuNS0xOTctMTY1LjVsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMHpNNDg4IDI5NmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6TTQzLjUgMzMxLjFDMzYuMiAzMjEuNCAzMiAzMDkuNSAzMiAyOTYuOCAzMiAyNjUuNSA1Ny41IDI0MCA4OC45IDI0MGwyNy42IDAtNzIuOSA5MS4xek0yMjUuMSAyNDBsNDguMiAwIDEuNC0xLjktMTYuOS0zOS41LTMyLjcgNDEuNXptMTA3LjggMGw0Ni43IDAtMTcuMi00MC0yOS41IDQweiJdCiAgICB9OwogICAgZmFSaWdodExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LWFsdC1yaWdodCJdLCAiZjMwYiIsICJNNTY2LjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAzOTYuOSAzODQgMzg0bDAtNjQtMzM2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzM2IDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0ID0gZmFSaWdodExvbmc7CiAgICBmYVRydWNrRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1kcm9wbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OGMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIwOCAzMDRjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzMuMiAzNC41LTc4IDU1LjgtMTAyLjQgOC43LTEwIDIzLjgtMTAgMzIuNSAwIDIxLjIgMjQuNCA1NS44IDY5LjEgNTUuOCAxMDIuNCAwIDQ4LTMyLjIgNzItNzIgNzJ6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDVjIiwgIk0yNDAgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDU2IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTU2LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNTYgMCAwLTU2ek02Ni43IDM4NGw0Mi41LTQyLjVjMjQtMjQgNTYuNi0zNy41IDkwLjUtMzcuNUwzNTIgMzA0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMi42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjVzOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNC43IDB6Il0KICAgIH07CiAgICBmYUhhbmRQb2ludExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE1IiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmwyMDggMCAwLTY0LTIwOCAwek0xOTIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bS02NC02NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bTg4LTk2bC0uNiAwYzUuNCA5LjQgOC42IDIwLjMgOC42IDMyIDAgMTMuMi00IDI1LjQtMTAuOCAzNS42IDI0LjkgOC43IDQyLjggMzIuNSA0Mi44IDYwLjQgMCAxMS43LTMuMSAyMi42LTguNiAzMmw4LjYgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTYxLjdjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC0xMS42LTExLjZDNDI5LjUgNzcuNSAzOTYuOSA2NCAzNjMgNjRsLTI3IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTU2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnoiXQogICAgfTsKICAgIGZhQ2FsY3VsYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxjdWxhdG9yIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDI1XSwgImYxZWMiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTk2IDY0bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiAxNjhhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHptODAgMjRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjgtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNODggMzUyYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTI4LTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6bTgwIDI0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNjQgNDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDQ0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTIzMi0yNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIxMSwgODcyMiwgMTAxMzQsICJzdWJ0cmFjdCJdLCAiZjA2OCIsICJNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhU3VidHJhY3QgPSBmYU1pbnVzOwogICAgZmFBcnJvd1VwWkEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtei1hIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtYWxwaGEtdXAtYWx0Il0sICJmODgyIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTI4OCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSAyMjQgMzIwIDIyNGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjEgMzIgNDQ4IDMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQxMi42IDI3My43QzQwNy4yIDI2Mi44IDM5Ni4xIDI1NiAzODQgMjU2cy0yMy4yIDYuOC0yOC42IDE3LjdsLTgwIDE2MGMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTgwLTE2MHpNMzg0IDM1OS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40eiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFVcEFsdCA9IGZhQXJyb3dVcFpBOwogICAgZmFNaWNyb3Bob25lU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTMxIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQyNC43IDM1OC44QzQ1OC45IDMyNC4yIDQ4MCAyNzYuNiA0ODAgMjI0bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDM5LjMtMTUuNyA3NC45LTQxLjMgMTAwLjlMMzU2LjggMjkxQzM3My42IDI3My43IDM4NCAyNTAgMzg0IDIyNGwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMwLjItMTUxLTE1MXptMjk4LjMgNDM0bC00MS40LTQxLjRjLTMuMyAuMi02LjUgLjMtOS44IC4zLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0bDAtMTAuMi00My42LTQzLjZjLTIuOCAzLjktNC40IDguNy00LjQgMTMuOGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOS4zLTEuMiAxOC40LTMgMjcuMy01LjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBlbi1zcXVhcmUiLCAicGVuY2lsLXNxdWFyZSJdLCAiZjE0YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzI1LjggMTM5LjdsMTQuNCAxNC40YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yMy44IDIzLjgtNzEtNzEgMjMuOC0yMy44YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwek0xMTkuOSAyODlsOTEuNS05MS42IDcxIDcxLTkxLjYgOTEuNWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXoiXQogICAgfTsKICAgIGZhUGVuU3F1YXJlID0gZmFTcXVhcmVQZW47CiAgICBmYVBlbmNpbFNxdWFyZSA9IGZhU3F1YXJlUGVuOwogICAgZmFIYW5kRmlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWZpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5OTk0LCAiZmlzdC1yYWlzZWQiXSwgImY2ZGUiLCAiTTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTEyLTY0IDAgMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA4MC02NCAwIDAtODB6bTE5MiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2em05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgNTIuMy0yNS4xIDk4LjgtNjQgMTI4bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc4LjRjLTE3LjMtNy45LTMzLjItMTguOC00Ni45LTMyLjVMMzcuNSAzNTcuNUMxMy41IDMzMy41IDAgMzAwLjkgMCAyNjdsMC0yN2MwLTM1LjMgMjguNy02NCA2NC02NGw4OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJ6Il0KICAgIH07CiAgICBmYUZpc3RSYWlzZWQgPSBmYUhhbmRGaXN0OwogICAgZmFDb21tZW50U21zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtc21zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNtcyJdLCAiZjdjZCIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTE0MC44IDE3Mi44bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42czE4LjYtNDEuNiA0MS42LTQxLjZ6bTE4OC44IDQxLjZjMC0yMyAxOC42LTQxLjYgNDEuNi00MS42bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42em0tOTguMy0zMy44bDI0LjcgNDEuMSAyNC43LTQxLjFjMy43LTYuMiAxMS4xLTkuMSAxOC03LjJzMTEuNyA4LjIgMTEuNyAxNS40bDAgMTAyLjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00NC42LTguNyAxNC41Yy0yLjkgNC44LTguMSA3LjgtMTMuNyA3LjhzLTEwLjgtMy0xMy43LTcuOGwtOC43LTE0LjUgMCA0NC42YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTAyLjRjMC03LjIgNC44LTEzLjUgMTEuNy0xNS40czE0LjMgMSAxOCA3LjJ6Il0KICAgIH07CiAgICBmYVNtcyA9IGZhQ29tbWVudFNtczsKICAgIGZhU2ltQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaW0tY2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2M0IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyNTguNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDgwYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MCAxMjggMCAwLTcyLTk2IDB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtNzItODAgMCAwIDQwem0yNTYgMGwwLTQwLTEyOCAwIDAgNzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDAgMCA3MiA4MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYVNjYWxlQmFsYW5jZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NhbGUtYmFsYW5jZWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODc4LCAiYmFsYW5jZS1zY2FsZSJdLCAiZjI0ZSIsICJNMzg0IDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM5OC40IDk2Yy01LjIgMjUuOC0yMi45IDQ3LjEtNDYuNCA1Ny4zbDAgMjk0LjcgMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIzLjUtMTAuMy00MS4yLTMxLjYtNDYuNC01Ny4zTDEyOCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMGMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6bTU1LjYgMjg4TDU4NC40IDMyMCA1MTIgMTk1LjggNDM5LjYgMzIwek01MTIgNDE2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45ek0xMjYuOCAxOTUuOEw1NC40IDMyMCAxOTkuMyAzMjAgMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4LjlTMTEuNyAzODIgLjkgMzM3LjF6Il0KICAgIH07CiAgICBmYUJhbGFuY2VTY2FsZSA9IGZhU2NhbGVCYWxhbmNlZDsKICAgIGZhQ2FyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY2NCwgImF1dG9tb2JpbGUiXSwgImYxYjkiLCAiTTEzNS4yIDExNy40bC0yNi4xIDc0LjYgMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0zMjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDMwNGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBdXRvbW9iaWxlID0gZmFDYXI7CiAgICBmYUNyb3BTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcC1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY3JvcC1hbHQiXSwgImY1NjUiLCAiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTIwOCAwIDAtMzUyek0zODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDY0IDIwOCAwIDAgMzUyeiJdCiAgICB9OwogICAgZmFDcm9wQWx0ID0gZmFDcm9wU2ltcGxlOwogICAgZmFNZWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZWRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk0MV0sICJmNWEyIiwgIk0yMjQuMyAxMjhMMTM5LjctMTIuOWMtNi41LTEwLjgtMjAuMS0xNC43LTMxLjMtOS4xTDIxLjggMjEuM0M5LjkgMjcuMiA1LjEgNDEuNiAxMSA1My41TDgwLjYgMTkyLjZjLTMwLjEgMzMuOS00OC4zIDc4LjUtNDguMyAxMjcuNCAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTQ4LjktMTguMy05My41LTQ4LjMtMTI3LjRMNDM3LjYgNTMuNWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJMMzQwLjItMjIuMWMtMTEuMi01LjYtMjQuOS0xLjYtMzEuMyA5LjFMMjI0LjMgMTI4em0zMC44IDE0Mi41YzEuNCAyLjggNCA0LjcgNyA1LjFsNTAuMSA3LjNjNy43IDEuMSAxMC43IDEwLjUgNS4yIDE2bC0zNi4zIDM1LjRjLTIuMiAyLjItMy4yIDUuMi0yLjcgOC4zbDguNiA0OS45YzEuMyA3LjYtNi43IDEzLjUtMTMuNiA5LjlsLTQ0LjgtMjMuNmMtMi43LTEuNC02LTEuNC04LjcgMGwtNDQuOCAyMy42Yy02LjkgMy42LTE0LjktMi4yLTEzLjYtOS45bDguNi00OS45Yy41LTMtLjUtNi4xLTIuNy04LjNsLTM2LjMtMzUuNGMtNS42LTUuNC0yLjUtMTQuOCA1LjItMTZsNTAuMS03LjNjMy0uNCA1LjctMi40IDctNS4xbDIyLjQtNDUuNGMzLjQtNyAxMy4zLTcgMTYuOCAwbDIyLjQgNDUuNHoiXQogICAgfTsKICAgIGZhU2Nyb2xsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIyMF0sICJmNzBlIiwgIk0wIDExMkMwIDcwLjUgMzEuNiAzNi40IDcyIDMyLjRsMC0uNCAyODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTc2LTE3NiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDYwYzAgMjQuMy0xOS43IDQ0LTQ0IDQ0cy00NC0xOS43LTQ0LTQ0bDAtMjI4LTY0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDh6TTIzNi44IDQ4MGM3LjEtMTMuMSAxMS4yLTI4LjEgMTEuMi00NGwwLTYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDI0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCA0NC4yLTM1LjggODAtODAgODBsLTIyNy4yIDB6TTgwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRmlsZUV4Y2VsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4Y2VsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjQgMjY2LjdjLTcuNC0xMS0yMi4zLTE0LTMzLjMtNi43cy0xNCAyMi4zLTYuNyAzMy4zTDE2My4yIDM1MiAxMjQgNDEwLjdjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wyOC00MiAyOCA0MmM3LjQgMTEgMjIuMyAxNCAzMy4zIDYuN3MxNC0yMi4zIDYuNy0zMy4zTDIyMC44IDM1MiAyNjAgMjkzLjNjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zcy0yNS45LTQuNC0zMy4zIDYuN2wtMjggNDItMjgtNDJ6Il0KICAgIH07CiAgICBmYUZpbHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBiMCIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMzIwIDQ5Mi45IDMyMCA0ODBsMC0xNzguNyAxODIuNi0xODIuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6Il0KICAgIH07CiAgICBmYURydW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NV0sICJmNTY5IiwgIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NiAxMTQuNiA5NiAwIDEyOCAwIDIwOEwwIDM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdMNzIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMTkuNGMzMyA4LjkgNzEuMSAxNC41IDExMiAxNi4xTDIzMiAzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMy41YzQwLjktMS42IDc5LTcuMiAxMTItMTYuMUwzOTIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDIuN2M0NC42LTE5LjkgNzItNDcuNCA3Mi03OC43bDAtMTYwYzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjUgMzguOCAxNS4xIDQ0LjQgMzAuNiA0NC40IDQxLjMgMCAuOC0yLjcgMTcuMi00NiAzNS45LTM4LjkgMTYuOC05NiAyOC4xLTE2MiAyOC4xUzEzMi45IDI2MC43IDk0IDI0My45Yy00My4zLTE4LjctNDYtMzUuMS00Ni0zNS45IDAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjMgMzguMy0xNC45IDk1LjQtMjIuNyAxNjMuNi0yMi43IDE4IDAgMzUuMSAuNSA1MS40IDEuNnoiXQogICAgfTsKICAgIGZhTWFwUGluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1waW4iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjgyMDVdLCAiZjI3NiIsICJNMTkyIDI4NC40QzI1Ni4xIDI2OS45IDMwNCAyMTIuNSAzMDQgMTQ0IDMwNCA2NC41IDIzOS41IDAgMTYwIDBTMTYgNjQuNSAxNiAxNDRjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40TDEyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5NS42ek0xNjggOTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNCA0Ni42LTEwNCAxMDQtMTA0IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjYWxlLXVuYmFsYW5jZWQtZmxpcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYWxhbmNlLXNjYWxlLXJpZ2h0Il0sICJmNTE2IiwgIk0xMTguMiA2Mi40QzEwMS41IDU2LjggOTIuNCAzOC42IDk4IDIxLjlTMTIxLjctMy45IDEzOC41IDEuNmwxMTMgMzcuN2MxMy45LTIzLjUgMzkuNi0zOS4zIDY4LjktMzkuMyA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDMtLjIgNS45LS41IDguOGwxMjIuNiA0MC45YzE2LjggNS42IDI1LjggMjMuNyAyMC4yIDQwLjVzLTIzLjcgMjUuOC00MC41IDIwLjJMMzY2LjcgMTQ1LjJjLTQuNSAzLjItOS4zIDUuOS0xNC40IDguMmwwIDMyNi43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnpNMjAwLjggMjg4TDEyOC4zIDE2My44IDU1LjkgMjg4IDIwMC44IDI4OHptLTcyLjQgOTZjLTYyLjkgMC0xMTUuMi0zNC0xMjYtNzguOS0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4Ljl6bTM4Mi44LTkyLjJsLTcyLjQgMTI0LjIgMTQ0LjkgMC03Mi40LTEyNC4yem0xMjYgMTQxLjNDNjI2LjQgNDc4IDU3NC4xIDUxMiA1MTEuMiA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xeiJdCiAgICB9OwogICAgZmFCYWxhbmNlU2NhbGVSaWdodCA9IGZhU2NhbGVVbmJhbGFuY2VkRmxpcDsKICAgIGZhQXJyb3dzVG9DaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJkIiwgIk05LjQgOS40QzIxLjktMy4xIDQyLjEtMy4xIDU0LjYgOS40TDEyOCA4Mi43IDEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguNyAwLTczLjQtNzMuNEMtMy4xIDQyLjEtMy4xIDIxLjkgOS40IDkuNHpNMjAwIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTUwMi42IDU0LjZMNDI5LjMgMTI4IDQ0OCAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE4LjcgNzMuNC03My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS00NS4zIDQ0OEwzODQgNDI5LjMgMzg0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMCA3My40IDczLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6TTkuNCA0NTcuNEw4Mi43IDM4NCA2NCAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy03My40IDczLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFFbnZlbG9wZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODYsIDk5OTMsIDYxNDQzXSwgImYwZTAiLCAiTTQ4IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40bDIwOCAxNTZjMTcuMSAxMi44IDQwLjUgMTIuOCA1Ny42IDBsMjA4LTE1NmMxMi4xLTkuMSAxOS4yLTIzLjMgMTkuMi0zOC40IDAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDY0ek0wIDE5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE4OC0xOTguNCAxNDguOGMtMzQuMSAyNS42LTgxLjEgMjUuNi0xMTUuMiAwTDAgMTk2eiJdCiAgICB9OwogICAgZmFCYWJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhYnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjc3YyIsICJNMTIwIDg4YTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNNy43IDE0NC41YzEzLTE3LjkgMzgtMjEuOCA1NS45LTguOEw5OS44IDE2MmMyNi44IDE5LjUgNTkuMSAzMCA5Mi4yIDMwczY1LjQtMTAuNSA5Mi4yLTMwbDM2LjItMjYuNGMxNy45LTEzIDQyLjktOSA1NS45IDguOHM5IDQyLjktOC44IDU1LjlsLTM2LjIgMjYuNGMtMTMuNiA5LjktMjguMSAxOC4yLTQzLjMgMjVsMCAzNi4zLTE5MiAwIDAtMzYuM2MtMTUuMi02LjctMjkuNy0xNS4xLTQzLjMtMjVMMTYuNSAyMDAuM2MtMTcuOS0xMy0yMS44LTM4LTguOC01NS45ek05Ny41IDMyOS4zbDYwLjYgNTMtMjYgMzcuMiAyNC4zIDI0LjNjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTQ4LTQ4QzM4IDQzOC42IDM2LjEgNDE3IDQ3LjIgNDAxLjFsNTAuMi03MS44em0xMjguNSA1M2w2MC42LTUzIDUwLjIgNzEuOGMxMS4xIDE1LjkgOS4yIDM3LjUtNC41IDUxLjJsLTQ4IDQ4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyNC4zLTI0LjMtMjYtMzcuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXREb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtZG93biIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtZG93biJdLCAiZjE1MCIsICJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlRG93bjIgPSBmYVNxdWFyZUNhcmV0RG93bjI7CiAgICBmYVRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdkIiwgIk0yNi45IDIwNi45TDMuNyA0NDQuOUMxLjggNDYzLjcgMTYuNiA0ODAgMzUuNSA0ODBsMTcyLjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOWMwLTguMyA2LjctMTUgMTUtMTUgNS41IDAgMTAuNiAzIDEzLjIgNy45bDg2LjEgMTU5YzguNCAxNS41IDI0LjYgMjUuMSA0Mi4yIDI1LjFsNjQuMSAwYzE4LjkgMCAzMy43LTE2LjMgMzEuOC0zNS4xTDQ4NS42IDIwNy4xYy0xLjktMTkuNi0xMi44LTM3LjMtMjkuNS00Ny44TDI4MC45IDQ4LjNjLTE1LjctMTAtMzUuOC05LjktNTEuNSAuMUw1Ni4xIDE1OS4yYy0xNi41IDEwLjYtMjcuMyAyOC4yLTI5LjIgNDcuN3oiXQogICAgfTsKICAgIGZhQSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTddLCAiNDEiLCAiTTIyMS41IDUxLjdDMjE2LjYgMzkuOCAyMDQuOSAzMiAxOTIgMzJzLTI0LjYgNy44LTI5LjUgMTkuN2MtOTMuMyAyMjQtMTQ2LjcgMzUyLTE2MCAzODQtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMmwzMS44LTc2LjMgMTk3LjMgMCAzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhjLTEzLjMtMzItNjYuNy0xNjAtMTYwLTM4NHpNMjY0IDMyMGwtMTQ0IDAgNzItMTcyLjggNzIgMTcyLjh6Il0KICAgIH07CiAgICBmYVBhcmFjaHV0ZUJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXJhY2h1dGUtYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0Y2QiLCAiTTEyOCAyMjRDMTI4IDE1Mi4yIDE0NC4zIDg4LjQgMTY5LjUgNDMuNCAxOTUuMS0yLjQgMjI2LjYtMjQgMjU2LTI0czYwLjkgMjEuNiA4Ni41IDY3LjRDMzY3LjcgODguNCAzODQgMTUyLjIgMzg0IDIyNGwtMTA0IDAgMCA5NiA4IDBjOS4zIDAgMTguMSAyIDI2IDUuNWwxMTguNC0xMDEuNS0uNSAwYzAtNzguNC0xNy43LTE1MC42LTQ3LjYtMjA0LTYuMS0xMS0xMi45LTIxLjMtMjAuMy0zMC45IDg2LjUgMzUuOSAxNDcuOCAxMTUuMSAxNDcuOCAyMTguOSAwIDctMy4xIDEzLjctOC40IDE4LjJMMzQ3LjQgMzYwLjFjMyA3LjQgNC42IDE1LjQgNC42IDIzLjlsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTguNCAxLjYtMTYuNSA0LjYtMjMuOUw4LjQgMjI2LjJDMy4xIDIyMS43IDAgMjE1IDAgMjA4IDAgMTA0LjIgNjEuMyAyNC45IDE0Ny44LTEwLjkgMTQwLjUtMS40IDEzMy43IDkgMTI3LjYgMjAgOTcuNyA3My40IDgwIDE0NS42IDgwIDIyNGwtLjUgMCAxMTguNCAxMDEuNWM4LTMuNSAxNi44LTUuNSAyNi01LjVsOCAwIDAtOTYtMTA0IDB6Il0KICAgIH07CiAgICBmYUNhcnRBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTgiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiAxODcuMiAwIDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMSAxNzcuNCAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2EiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2xvdWRBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWFycm93LXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIzMzgsICJjbG91ZC11cGxvYWQiLCAiY2xvdWQtdXBsb2FkLWFsdCJdLCAiZjBlZSIsICJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zMDUgMTkxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFDbG91ZFVwbG9hZCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFDbG91ZFVwbG9hZEFsdCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFBdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxOTQ2XSwgIjQwIiwgIk0yNTYgNjRDMTUwIDY0IDY0IDE1MCA2NCAyNTZzODYgMTkyIDE5MiAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMCA1MTIgMTE0LjYgNTEyIDI1NmwwIDMyYzAgNTMtNDMgOTYtOTYgOTYtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjktMjIuOCAyMS01My4zIDMzLjktODYuOCAzMy45LTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhjMjcuOSAwIDUzLjcgOC45IDc0LjcgMjQuMSA1LjctNSAxMy4xLTguMSAyMS4zLTguMSAxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUluZGlhblJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRpYW4tcnVwZWUtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJpbmRpYW4tcnVwZWUiLCAiaW5yIl0sICJlMWJjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03Ni43IDBjMTcuNyAxOS44IDMwLjEgNDQuNiAzNC43IDcybDQyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQyIDBjLTEwLjQgNjIuMi02MC44IDExMC45LTEyMy44IDExOC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmw4MCAwYzM1LjggMCA2Ni4xLTIzLjUgNzYuMy01NkwyNCAyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTY0LjMgMGMtMTAuMi0zMi41LTQwLjUtNTYtNzYuMy01NkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFJbmRpYW5SdXBlZSA9IGZhSW5kaWFuUnVwZWVTaWduOwogICAgZmFJbnIgPSBmYUluZGlhblJ1cGVlU2lnbjsKICAgIGZhVHJ1Y2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgImYwZDEiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTU3LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTUxMiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0xOTIgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUNoYWxrYm9hcmRVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYWxrYm9hcmQtdXNlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjaGFsa2JvYXJkLXRlYWNoZXIiXSwgImY1MWMiLCAiTTEyOCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC05NiAwIDAtMTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYtMTI5LjEgMGMxMC45LTE4LjggMTcuMS00MC43IDE3LjEtNjQgMC03MC43LTU3LjMtMTI4LTEyOC0xMjgtNS40IDAtMTAuOCAuMy0xNiAxbDAtNDl6TTMzMyA0NDhjLTUuMS0yNC4yLTE2LjMtNDYuMS0zMi4xLTY0TDYwOCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTIxMSAwek02NCAyNzJhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0wIDQ4MGMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkVGVhY2hlciA9IGZhQ2hhbGtib2FyZFVzZXI7CiAgICBmYVVzZXJDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZmMiLCAiTTI4NiAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzggNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDB6TTU4NS43IDEwNS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVMNTIyLjEgMjc0LjljLTQuMiA1LjctMTAuNyA5LjQtMTcuNyA5LjhzLTE0LTIuMi0xOC45LTcuM2wtNDYuNC00OGMtOS4yLTkuNS05LTI0LjcgLjYtMzMuOSA5LjUtOS4yIDI0LjctOC45IDMzLjkgLjZsMjYuNSAyNy40IDg1LjYtMTE3Ljd6TTI1Ni4zIDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6Il0KICAgIH07CiAgICBmYVVzZXJOaW5qYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLW5pbmphIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5Mzk5XSwgImY1MDQiLCAiTTM1MiAxMjhjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNTcuMiAwLTEwNS42LTM3LjUtMTIyLTg5LjMtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjgtMTUuOCAxNS44LTM4LjggMjAuNy01My42IDIyLjEtOC4xIC44LTE0LjYtNS43LTEzLjgtMTMuOCAxLjQtMTQuNyA2LjMtMzcuOCAyMi4xLTUzLjYgNS44LTUuOCAxMi42LTEwLjEgMTkuNi0xMy40LTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNC0xNS44LTE1LjgtMjAuNy0zOC44LTIyLjEtNTMuNi0uOC04LjEgNS43LTE0LjYgMTMuOC0xMy44IDE0LjcgMS40IDM3LjggNi4zIDUzLjYgMjIuMSA0LjggNC44IDguNyAxMC40IDExLjcgMTYuMSAyMS4zLTQxLjIgNjQuMy02OS40IDExMy44LTY5LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjh6TTE0NCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDE2MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2em0tMS40IDIxMWw2NyA1MC4yYzguNSA2LjQgMjAuMyA2LjQgMjguOCAwbDY3LTUwLjJjNi41LTQuOSAxNS4yLTYuMiAyMi42LTIuOCA2MS40IDI4LjIgMTA0LjEgOTAuMiAxMDQuMSAxNjIuMSAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w0NS43IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC03MiA0Mi43LTEzNCAxMDQuMS0xNjIuMSA3LjQtMy40IDE2LjEtMi4xIDIyLjYgMi44eiJdCiAgICB9OwogICAgZmFQbGFudFdpbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbnQtd2lsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNWFhIiwgIk0zNDQtMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjBsMCA2LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM2MtNDAuNy0zNi44LTY2LTgzLjctNjYtMTExLjcgMC0zNS42IDE4LjctNjQuNyA0OC03Ni45bDAtNi4yYzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgNDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjk2YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgMzguMmMyOS4zIDEyLjIgNDggNDEuMyA0OCA3Ni45IDAgMjcuOS0yNS4zIDc0LjgtNjYgMTExLjctMy44IDMuNS04LjggNS4zLTE0IDUuM3MtMTAuMi0xLjgtMTQtNS4zQzI1LjMgNDA1LjkgMCAzNTkgMCAzMzEuMSAwIDI5NS40IDE4LjcgMjY2LjQgNDggMjU0LjJMNDggMjE2YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwIDIwLjIgMCAzOS4zIDUgNTYgMTMuOEwyMjQgODhjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6Il0KICAgIH07CiAgICBmYVdlaWdodFNjYWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlaWdodC1zY2FsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ3ZWlnaHQiXSwgImY0OTYiLCAiTTExNi42IDE5MmMtMy0xMC4xLTQuNi0yMC45LTQuNi0zMiAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMlMzMzYgOTguMSAzMzYgMTYwYzAgMTEuMS0xLjYgMjEuOS00LjYgMzJsLTcxIDAgMjQuNi00NC4zYzYuNC0xMS42IDIuMy0yNi4yLTkuMy0zMi42cy0yNi4yLTIuMy0zMi42IDkuM2wtMzcuNiA2Ny43LTg4LjggMHpNMTI4IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBDMjkzLjMgMTEuOSAyNjAgMCAyMjQgMHMtNjkuMyAxMS45LTk2IDMyeiJdCiAgICB9OwogICAgZmFXZWlnaHQgPSBmYVdlaWdodFNjYWxlOwogICAgZmFDYXJldFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmV0LXJpZ2h0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYwZGEiLCAiTTI0OS4zIDIzNS44YzEwLjIgMTIuNiA5LjUgMzEuMS0yLjIgNDIuOGwtMTI4IDEyOGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQuNSAzOTYuOSA2NC41IDM4NGwwLTI1NmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjggMi4yIDIuNHoiXQogICAgfTsKICAgIGZhRmxvcmluU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbG9yaW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTg0IiwgIk0zMTQuNyAzMmMtMzguOCAwLTczLjcgMjMuMy04OC42IDU5LjFMMTcwLjcgMjI0IDY0IDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4MCAwLTQ1LjEgMTA4LjNjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43TDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzNy4zIDBjMzguOCAwIDczLjctMjMuMyA4OC42LTU5LjFMMjEzLjMgMjg4IDMyMCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTgwIDAgNDUuMS0xMDguM2M1LTExLjkgMTYuNi0xOS43IDI5LjUtMTkuN0wzNTIgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3LjMgMHoiXQogICAgfTsKICAgIGZhQmVsbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCAiZjBmMyIsICJNMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMy4yQzExOSA1MCA2NCAxMTQuNiA2NCAxOTJsMCAyMS43YzAgNDguMS0xNi40IDk0LjgtNDYuNCAxMzIuNEw3LjggMzU4LjNDMi43IDM2NC42IDAgMzcyLjQgMCAzODAuNSAwIDQwMC4xIDE1LjkgNDE2IDM1LjUgNDE2bDM3Ni45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTkuOC0xMi4yQzQwMC40IDMwOC41IDM4NCAyNjEuOCAzODQgMjEzLjdsMC0yMS43YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44bDAtMy4yYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjIgNDY0YzcuMSAyNy42IDMyLjIgNDggNjIgNDhzNTQuOS0yMC40IDYyLTQ4bC0xMjQgMHoiXQogICAgfTsKICAgIGZhTGFyaVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFyaS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxYzgiLCAiTTE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDEuNWM3LjktMSAxNS45LTEuNSAyNC0xLjVzMTYuMSAuNSAyNCAxLjVMMjE2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA1NGM1OC45IDIzLjggMTAzLjIgNzYgMTE2LjIgMTM5LjcgMy41IDE3LjMtNy43IDM0LjItMjUgMzcuN3MtMzQuMi03LjctMzcuNy0yNWMtNi43LTMzLjItMjYuNC02MS44LTUzLjQtODAuMmwwIDgxLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDEuOGMtNy44LTEuNS0xNS44LTIuMi0yNC0yLjJzLTE2LjIgLjgtMjQgMi4yTDE2OCAyMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04MS44Yy0zMy44IDIzLTU2IDYxLjktNTYgMTA1LjggMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2LjkgMEMxOC41IDM1MCAwIDMwNS4yIDAgMjU2IDAgMTc1LjQgNDkuNiAxMDYuNCAxMjAgNzhsMC01NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWlsbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWlsbC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxZWQiLCAiTTI5Ny0yMi4yYzEyLjMgNSAxOC4yIDE5IDEzLjIgMzEuM2wtMjkgNzEuM0MzMzguOCA4NS4xIDM4NCAxMzMuMyAzODQgMTkybDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4LTYuNCAwLTEyLjUgMS4yLTE4IDMuNWwtMzAgNzMuOCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEuMi01Ny44IDE0Mi4yYy01IDEyLjMtMTkgMTguMi0zMS4zIDEzLjJzLTE4LjItMTktMTMuMi0zMS4zTDE2MCAyNTEuMyAxNjAgMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDE3LjcgMCA0MDBMMCAxMTJjMC0xNy43IDE0LjMtMzIgMzItMzIgMTAuOSAwIDIwLjUgNS40IDI2LjMgMTMuNyAxNi04LjcgMzQuMy0xMy43IDUzLjctMTMuNyAzMS4zIDAgNTkuNyAxMi45IDgwIDMzLjYgOS42LTkuOCAyMC45LTE3LjggMzMuNS0yMy41TDI2NS44LTljNS0xMi4zIDE5LTE4LjIgMzEuMy0xMy4yeiJdCiAgICB9OwogICAgZmFQZXJzb25Tbm93Ym9hcmRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNub3dib2FyZGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzkzOCwgInNub3dib2FyZGluZyJdLCAiZjdjZSIsICJNNDI0LjUgMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2Ni40IDQ1LjVjMTAuMi0xNC40IDMwLjItMTcuOSA0NC42LTcuN2wyNzIgMTkyYzE0LjQgMTAuMiAxNy45IDMwLjIgNy43IDQ0LjZzLTMwLjIgMTcuOS00NC42IDcuN2wtOTIuMi02NS4xLTYyLjIgNTMuMyAzMi4xIDI2LjdjMTguMiAxNS4yIDI4LjggMzcuNyAyOC44IDYxLjVsMCA4Ny44IDc3LjUgMTUuMmM2LjIgMS4yIDEyLjYgLjkgMTguNy0uOGw0MS4yLTExLjhjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtNDEuMiAxMS44Yy0xMy40IDMuOC0yNy40IDQuNC00MS4xIDEuOEw4Ny4xIDQ0My4zYy0xNy4yLTMuNC0zMy0xMS44LTQ1LjMtMjQuMUwxNS41IDM5M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDI2LjIgMjYuMmM1LjYgNS42IDEyLjggOS40IDIwLjYgMTFsNjQuMiAxMi42IDAtMTIzLjdjMC0yNy43IDEyLTU0IDMyLjgtNzIuMmw2OS02MC40LTg4LjItNjIuM0MxNTkuNiA4MCAxNTYuMiA2MCAxNjYuNCA0NS41em01OC4xIDM3NS43bDY0IDEyLjUgMC03NS4zYzAtNC43LTIuMS05LjMtNS44LTEyLjNsLTU4LjItNDguNSAwIDEyMy42eiJdCiAgICB9OwogICAgZmFTbm93Ym9hcmRpbmcgPSBmYVBlcnNvblNub3dib2FyZGluZzsKICAgIGZhVHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR0eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0ZWxldHlwZSJdLCAiZjFlNCIsICJNNDUwLjIgMjY2LjhjMTUuOCA2LjUgMzQuMSAuMyA0Mi42LTE0LjZsMi40LTQuMmMyNy45LTQ4LjkgMjMuNi0xMTguOC0zMS4zLTE1NC41LTEyNi04Mi0yODkuNi04Mi00MTUuNiAwLTU0LjkgMzUuNy01OS4zIDEwNS43LTMxLjMgMTU0LjVsMi40IDQuMmM4LjUgMTQuOSAyNi43IDIxLjEgNDIuNiAxNC42bDgxLjktMzMuN2MxMy45LTUuNyAyMi40LTE5LjkgMjAuOS0zNC45bC01LjEtNTFjNjIuNS0yMSAxMzAuOC0xOS45IDE5Mi42IDMuM2wtNC44IDQ3LjdjLTEuNSAxNSA3IDI5LjIgMjAuOSAzNC45bDgxLjkgMzMuN3pNMzIgMzUyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTk2IDBhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHpNNjQgNDE2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMzUyIDMyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTI1NiAzMjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em02NCAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0xMjggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVRlbGV0eXBlID0gZmFUdHk7CiAgICBmYVVzZXJzUmVjdGFuZ2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXJlY3RhbmdsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk0IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMjQgNzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTUyYzUzIDAgOTYgNDMgOTYgOTZsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjRjMC01MyA0My05NiA5Ni05NnptOTYtNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTY4IDI3Mi4zYy0xNS4yIDIyLjgtMjQgNTAuMi0yNCA3OS43bDAgMjRjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC00Ni44IDBDODkuNiA0MDAgODAgMzkwLjQgODAgMzc4LjdMODAgMzY4YzAtNTAuMyAzOC43LTkxLjYgODgtOTUuN3pNNDI3LjkgNDAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtMjRjMC0yOS41LTguOC01Ni45LTI0LTc5LjcgNDkuMyA0LjEgODggNDUuMyA4OCA5NS43bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC00Ni44IDB6TTk2IDE5MmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFNb2JpbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjQxLCAibW9iaWxlLWFuZHJvaWQiLCAibW9iaWxlLXBob25lIl0sICJmM2NlIiwgIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6bTcyIDQxNmw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNb2JpbGVBbmRyb2lkID0gZmFNb2JpbGU7CiAgICBmYU1vYmlsZVBob25lID0gZmFNb2JpbGU7CiAgICBmYUFycm93c1R1cm5Ub0RvdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXR1cm4tdG8tZG90cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMxIiwgIk0yNjUuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyODUuMyA2NCAzNTIgNjRjNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTY2LjcgMCAyNS40IDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w4MC04MHptLTgyLjcgMjcybDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTYyLjcgNDAwIDk2IDQwMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ4MS43IDAgNDY0bDAtMzJjMC01MyA0My05NiA5Ni05Nmw2Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwek0zMjAgMzY4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTYwYTY0IDY0IDAgMSAxIDAtMTI4IDY0IDY0IDAgMSAxIDAgMTI4eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleGNsYW1hdGlvbiIsCiAgICAgIGljb246IFsxMjgsIDUxMiwgWzEwMDY5LCAxMDA3MSwgNjE3MzhdLCAiMjEiLCAiTTY0IDQzMmMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MC00MC0xNy45LTQwLTQwYzAtMjIuMSAxNy45LTQwIDQwLTQwek02NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgLjYgMCAxLjEgMCAxLjdsLTE2IDMwNGMtLjkgMTctMTUgMzAuMy0zMiAzMC4zUzMzIDM3MC43IDMyIDM1My43TDE2IDQ5LjdjMC0uNiAwLTEuMSAwLTEuNyAwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhQ2h1cmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNodXJjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5NjJdLCAiZjUxZCIsICJNMjgwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjMyLTIxLjMgMjMyLThsMCAyNC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCA0OC05OC42IDY1LjhDMTIwIDE4Ni43IDExMiAyMDEuNiAxMTIgMjE3LjdsMCAzOC4zLTc5LjggNDUuNkMxMi4zIDMxMyAwIDMzNC4yIDAgMzU3LjFMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgNzQuNyAwIDg1LjQgMCAzMjAgMGw2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtOTAuOWMwLTIzLTEyLjMtNDQuMi0zMi4yLTU1LjZMNDAwIDI1NiA0MDAgMjE3LjdjMC0xNi04LTMxLTIxLjQtMzkuOWwtOTguNi02NS44IDAtNDggMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTI0ek0yNTYgMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODAtMTI4IDAgMC04MGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhVG9nZ2xlT2ZmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvZ2dsZS1vZmYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwNCIsICJNMzg0IDEyOGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFM0NTQuNyAzODQgMzg0IDM4NGwtMTkyIDBjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhsMTkyIDB6TTU3NiAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJMMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyek0xOTIgMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYweiJdCiAgICB9OwogICAgZmFTaG9lUHJpbnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob2UtcHJpbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1NGIiLCAiTTI5NiAxOTJjLTIxLjEtMTIuMS00Mi4zLTI0LjItNzItMjkuM2wwLTE0MC4zQzI1Ny43IDEzIDMxMS40IDAgMzUyIDAgNDQ4IDAgNTc2IDQ4IDU3NiAxMjhzLTExOS42IDk2LTE3NiA5NmMtNDggMC03Ni0xNi0xMDQtMzJ6TTEyOCAzMmw0OCAwIDAgMTI4LTQ4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6TTIzMiAzMjBjMjgtMTYgNTYtMzIgMTA0LTMyIDU2LjQgMCAxNzYgMTYgMTc2IDk2UzM4NCA1MTIgMjg4IDUxMmMtNDAuNSAwLTk0LjMtMTMtMTI4LTIyLjRsMC0xNDAuM2MyOS43LTUuMiA1MC45LTE3LjMgNzItMjkuNHpNNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDQ4IDAgMCAxMjgtNDggMHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVdhbGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YWxsZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1NSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw3MiAxMjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgMzJ6TTQxNiAyNTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFNZXNzYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXNzYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbW1lbnQtYWx0Il0sICJmMjdhIiwgIk0wIDM1MkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDMyMCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5NmwtMTIwIDBjLTUuMiAwLTEwLjIgMS43LTE0LjQgNC44TDE2Ni40IDUzOS4yYy00LjIgMy4xLTkuMiA0LjgtMTQuNCA0LjgtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC03Mi0zMiAwYy01MyAwLTk2LTQzLTk2LTk2eiJdCiAgICB9OwogICAgZmFDb21tZW50QWx0MiA9IGZhTWVzc2FnZTI7CiAgICBmYVRyb3BoeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm9waHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDJdLCAiZjA5MSIsICJNMTQ0LjMgMGwyMjQgMGMyNi41IDAgNDguMSAyMS44IDQ3LjEgNDguMi0uMiA1LjMtLjQgMTAuNi0uNyAxNS44bDQ5LjYgMGMyNi4xIDAgNDkuMSAyMS42IDQ3LjEgNDkuOC03LjUgMTAzLjctNjAuNSAxNjAuNy0xMTggMTkwLjUtMTUuOCA4LjItMzEuOSAxNC4zLTQ3LjIgMTguOC0yMC4yIDI4LjYtNDEuMiA0My43LTU3LjkgNTEuOGwwIDczLjEgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTczLjFjLTE2LTcuNy0zNS45LTIyLTU1LjMtNDguMy0xOC40LTQuOC0zOC40LTEyLjEtNTcuOS0yMy4xLTU0LjEtMzAuMy0xMDIuOS04Ny40LTEwOS45LTE4OS45LTEuOS0yOC4xIDIxLTQ5LjcgNDcuMS00OS43bDQ5LjYgMGMtLjMtNS4yLS41LTEwLjQtLjctMTUuOC0xLTI2LjUgMjAuNi00OC4yIDQ3LjEtNDguMnpNMTAxLjUgMTEybC01Mi40IDBjNi4yIDg0LjcgNDUuMSAxMjcuMSA4NS4yIDE0OS42LTE0LjQtMzcuMy0yNi4zLTg2LTMyLjgtMTQ5LjZ6TTM4MCAyNTYuOGM0MC41LTIzLjggNzcuMS02Ni4xIDgzLjMtMTQ0LjhMNDExIDExMmMtNi4yIDYwLjktMTcuNCAxMDguMi0zMSAxNDQuOHoiXQogICAgfTsKICAgIGZhRmFjZURpenp5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWRpenp5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpenp5Il0sICJmNTY3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMzA0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFEaXp6eTIgPSBmYUZhY2VEaXp6eTI7CiAgICBmYUJhY3RlcmlhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY3RlcmlhIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNTkiLCAiTTI1Ni0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDMxMSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMMzQ1IDE1MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUwyMTcgMjc5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDczIDMxM2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwzOSAxNjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xYzEwLTEwIDIwLTIwIDMwLjEtMzAuMUwxMDMgMTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMSAzMC4xLTMwLjEtNC4xLTQuMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlTMTkxLjYtMi4zIDIwMSA3bDYuMyA2LjNjNy44LTQuNiAxNi4yLTggMjQuOC0xMC4zbDAtMTFjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTEyOCAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0yNDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI5NiA0MGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDU2NyAxOTljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02LjMgNi4zYzQuNiA3LjggOCAxNi4yIDEwLjMgMjQuOGwxMSAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMSAwYy0yLjIgOC42LTUuNiAxNi45LTEwLjMgMjQuOEw2MDEgMzQzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjEtMzAuMSAzMC4xIDQuMSA0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMWMtMTAgMTAtMjAgMjAtMzAuMSAzMC4xTDQ3MyA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNi4zLTYuM2MtNy44IDQuNi0xNi4yIDgtMjQuOCAxMC4zbDAgMTFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMWMtOC42LTIuMi0xNi45LTUuNi0yNC44LTEwLjNMMzI5IDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwyOTUgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzU5IDI5N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ0OCAzODRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhRWFyRGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXItZGVhZiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkZWFmIiwgImRlYWZuZXNzIiwgImhhcmQtb2YtaGVhcmluZyJdLCAiZjJhNCIsICJNNTAyLjYgNTQuNmwtNDAgNDBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDQwLTQwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS0zMjAgMzIwbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTI0MCAxMjhjLTU3LjYgMC0xMDUuMSA0My42LTExMS4zIDk5LjUtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM2M5LjctODggODQuMy0xNTYuNSAxNzQuOS0xNTYuNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdsMCA2LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTItMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTYuMWMwLTMyLjkgMTcuNC01OS42IDM0LjQtNzggMTguNC0yMCAyOS42LTQ2LjYgMjkuNi03NS45IDAtNjEuOS01MC4xLTExMi0xMTItMTEyem0wIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFEZWFmID0gZmFFYXJEZWFmOwogICAgZmFEZWFmbmVzcyA9IGZhRWFyRGVhZjsKICAgIGZhSGFyZE9mSGVhcmluZyA9IGZhRWFyRGVhZjsKICAgIGZhUGVvcGxlQXJyb3dzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1hcnJvd3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGVvcGxlLWFycm93cy1sZWZ0LXJpZ2h0Il0sICJlMDY4IiwgIk0zMiA2NEE2NCA2NCAwIDEgMSAxNjAgNjQgNjQgNjQgMCAxIDEgMzIgNjR6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMy4yIDAgNi40IC4yIDkuNSAuN0w5My4xIDIwNS4xQzY1IDIzMy4yIDY1IDI3OC44IDkzLjEgMzA2LjlsNTYgNTZjMy40IDMuNCA3IDYuNCAxMC45IDlsMCA5Mi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyMC42QzEyLjkgMzMyLjQgMCAzMTEuNyAwIDI4OGwwLTY0ek0zNTIgNjRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem02Ni45IDE0MS4xbC00NC40LTQ0LjRjMy4xLS41IDYuMy0uNyA5LjUtLjdsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNEw0ODAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTkyLjFjMy45LTIuNiA3LjUtNS42IDEwLjktOWw1Ni01NmMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjh6TTMwMi44IDE3Ny44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggMzIxLjcgMjg4IDMxMmwwLTI0LTY0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgMTkwLjMgMjI0IDIwMGwwIDI0IDY0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6Il0KICAgIH07CiAgICBmYVBlb3BsZUFycm93c0xlZnRSaWdodCA9IGZhUGVvcGxlQXJyb3dzOwogICAgZmFIYW5kc0NsYXBwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWNsYXBwaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxYTgiLCAiTTM0NCA4bDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNFMzNDQtNS4zIDM0NCA4ek0yMjAgMTAuN2wzMiA0OGM3LjQgMTEgNC40IDI1LjktNi43IDMzLjNzLTI1LjkgNC40LTMzLjMtNi43bC0zMi00OGMtNy40LTExLTQuNC0yNS45IDYuNy0zMy4zUzIxMi42LS4zIDIyMCAxMC43ek0xMzUgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI5Mi43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNsMC0zOS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNTMuNmMwIDU3LjEtMzAgMTEwLTc4LjkgMTM5LjQtNjQgMzguNC0xNDUuOCAyOC4zLTE5OC41LTI0LjRMNyAzNjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1MyA1M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUwyMyAyNjVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw5MyA5M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUw1NSAxODVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMTcgMTE3YzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xbC05My05M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6TTQzMy4xIDQ4NC45Yy0yNC4yIDE0LjUtNTAuOSAyMi4xLTc3LjcgMjMuMSA0OC4xLTM5LjYgNzYuNi05OSA3Ni42LTE2Mi40bDAtOTguMWM4LjItLjEgMTYtNi40IDE2LTE2bDAtMzkuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTUzLjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40ek00NTMuMyA0YzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zbC0zMiA0OGMtNy40IDExLTIyLjMgMTQtMzMuMyA2LjdzLTE0LTIyLjMtNi43LTMzLjNsMzItNDhjNy40LTExIDIyLjMtMTQgMzMuMy02Ljd6Il0KICAgIH07CiAgICBmYVZpcnVzQ292aWRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1jb3ZpZC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGE5IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04My04MyAxMS40LTExLjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMTEuMyAxMS4zLTIzLjgtMjMuOGMxNy45LTIzLjUgMjkuOS01MS43IDM0LjEtODIuM2wzMy42IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0zMy42IDBjLTQuMi0zMC43LTE2LjMtNTguOC0zNC4xLTgyLjNsMjMuOC0yMy44IDExLjMgMTEuM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDQwLjcgNDYuN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxMS4zIDExLjMtMjMuOCAyMy44QzM3MC44IDk3LjkgMzQyLjcgODUuOCAzMTIgODEuNmwwLTMzLjYgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzNDEuMyAwIDMyOCAwTDI0OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDAgMCAzMy42Yy0zMC43IDQuMi01OC44IDE2LjMtODIuMyAzNC4xTDE1Ny45IDkyIDE2OS4yIDgwLjZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwxMjMuOSA1OC4xIDQxLTI0Ljl6TTExMy42IDIzMmwtMzMuNiAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMzMuNiAwYzQuMiAzMC43IDE2LjMgNTguOCAzNC4xIDgyLjNsLTIzLjggMjMuOC0xMS4zLTExLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYuNiA1Ni42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTEuMy0xMS4zIDIzLjgtMjMuOGMyMy41IDE3LjkgNTEuNyAyOS45IDgyLjMgMzQuMWwwIDMzLjYtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwIDAtMzMuNmMxMy40LTEuOCAyNi40LTUuMiAzOC43LTkuOUwxMjMuNSAxOTMuM2MtNC43IDEyLjMtOCAyNS4yLTkuOSAzOC43eiJdCiAgICB9OwogICAgZmFDYWxlbmRhckRheXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLWRheXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FsZW5kYXItYWx0Il0sICJmMDczIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI0MGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xMjggMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNjQgMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJBbHQyID0gZmFDYWxlbmRhckRheXMyOwogICAgZmFEaWFtb25kVHVyblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYW1vbmQtdHVybi1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXJlY3Rpb25zIl0sICJmNWViIiwgIk0yMTUgMTdMMTcgMjE1QzYuMSAyMjUuOSAwIDI0MC42IDAgMjU2czYuMSAzMC4xIDE3IDQxTDIxNSA0OTVjMTAuOSAxMC45IDI1LjYgMTcgNDEgMTdzMzAuMS02LjEgNDEtMTdMNDk1IDI5N2MxMC45LTEwLjkgMTctMjUuNiAxNy00MXMtNi4xLTMwLjEtMTctNDFMMjk3IDE3QzI4Ni4xIDYuMSAyNzEuNCAwIDI1NiAwcy0zMC4xIDYuMS00MSAxN3pNMzg1IDI1N2wtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDBjMC0zOS44IDMyLjItNzIgNzItNzJsNzguMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYURpcmVjdGlvbnMgPSBmYURpYW1vbmRUdXJuUmlnaHQ7CiAgICBmYUhhbmRQb2ludFVwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc1N10sICJmMGE2IiwgIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwUzk2IDE0LjMgOTYgMzJsMCAyMDgtNjQgMCAwLTIwOHpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDM3LjUgNDUzLjVDMTMuNSA0MjkuNSAwIDM5Ni45IDAgMzYzbDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdCiAgICB9OwogICAgZmFCZXppZXJDdXJ2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZXppZXItY3VydmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjU1YiIsICJNMjk2IDEzNmwwLTQ4IDQ4IDAgMCA0OC00OCAwek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNC0xMTguNCAwQzExMS4yIDYyLjcgODkuMyA0OCA2NCA0OCAyOC43IDQ4IDAgNzYuNyAwIDExMnMyOC43IDY0IDY0IDY0YzI1LjMgMCA0Ny4yLTE0LjcgNTcuNi0zNmw2Ni45IDBjLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwTDgwIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuMyAwYzUuOS02NyA0OC41LTEyMy40IDEwNy41LTE0OS4xIDguNiAxMi43IDIzLjIgMjEuMSAzOS44IDIxLjFsNjQgMGMxNi42IDAgMzEuMS04LjQgMzkuOC0yMS4xIDU5IDI1LjcgMTAxLjYgODIuMSAxMDcuNSAxNDkuMWwtMy4zIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00LjUgMGMtNS03NS00NS4xLTE0MC40LTEwNC0xODBsNjYuOSAwYzEwLjQgMjEuMyAzMi4zIDM2IDU3LjYgMzYgMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNmwtMTE4LjQgMCAwLTRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTg4IDM3Nmw0OCAwIDAgNDgtNDggMCAwLTQ4em00MTYgNDhsMC00OCA0OCAwIDAgNDgtNDggMHoiXQogICAgfTsKICAgIGZhUGVyc29uSGFsZkRyZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oYWxmLWRyZXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1NDgiLCAiTTE0My40LTMuOWM5LjctMTYuOCAyNy44LTI4LjEgNDguNi0yOC4xIDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMjUuNC0xNi45IDQ2LjgtNDAgNTMuN2wwIDBjLTUuMSAxLjUtMTAuNCAyLjMtMTYgMi4zLTMwLjkgMC01Ni0yNS4xLTU2LTU2bDAgMGMwLTEwLjEgMi43LTE5LjcgNy40LTI3Ljl6TTMxOC4zIDI5OS4xTDI3MiAyMzYuNyAyNzIgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwIDAtLjQgMC0yMzguNmMzNi4yIDQuNCA2OS4yIDIzLjQgOTEuMiA1M2w3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTE3NiAxMTNsMCAzOTljMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMjUuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw0My0xMjktNDguMyA2NS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyMi0yOS42IDU1LjEtNDguNiA5MS4yLTUzeiJdCiAgICB9OwogICAgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcG9sbC1ob3Jpem9udGFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBvbGwtaCJdLCAiZjY4MiIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI1NiAxNTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0em03MiA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjA4IDB6TTE5MiAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhUG9sbEggPSBmYVNxdWFyZVBvbGxIb3Jpem9udGFsOwogICAgZmFTY2hvb2xDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmQiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUhhbmRMaXphcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtbGl6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNTgiLCAiTTAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDIzOC41IDBjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44bDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTMuOC03OC4xLTUwLjItMTYxLjkgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw0OCAxNjBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYWxrYm9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmxhY2tib2FyZCJdLCAiZjUxYiIsICJNOTYgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDY0ek00ODAgMzg0bC02NCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTYwIDAgMC0yNTYgMzg0IDAgMCAyNTZ6Il0KICAgIH07CiAgICBmYUJsYWNrYm9hcmQgPSBmYUNoYWxrYm9hcmQ7CiAgICBmYVVwUmlnaHRGcm9tU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLXJpZ2h0LWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4dGVybmFsLWxpbmstYWx0Il0sICJmMzVkIiwgIk0yOTAuNCAxOS44QzI5NS40IDcuOCAzMDcuMSAwIDMyMCAwTDQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45TDQwMCAxNTcuMyAyNDYuNiAzMTAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMzU0LjcgMTEyIDI5Ny40IDU0LjZjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45ek0wIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGw4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA4MGMwIDQ0LjItMzUuOCA4MC04MCA4MEw4MCA1MTJjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgMTc2eiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtBbHQgPSBmYVVwUmlnaHRGcm9tU3F1YXJlOwogICAgZmFTcXVhcmVGdWxsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZnVsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOWUzLCAxMjkwMDEsIDEyOTAwMiwgMTI5MDAzLCAxMTAzNSwgMTEwMzZdLCAiZjQ1YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdCiAgICB9OwogICAgZmFDbG92ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxMzkiLCAiTTMxMC40IDE2QzM0Ni42IDE2IDM3NiA0NS40IDM3NiA4MS43bDAgNS4yYzAgMTEuMi0yLjcgMjIuMy03LjggMzIuMmwtMi4zIDQuMi0yMC4xIDMzLjVjLTEuMSAxLjktMS4yIDMuNC0xLjEgNC41IC4yIDEuMyAuOSAyLjcgMi4xIDMuOXMyLjYgMS45IDMuOSAyLjFjMS4xIC4yIDIuNiAuMSA0LjUtMS4xbDMzLjUtMjAuMSA0LjItMi4zYzEwLTUuMSAyMS03LjggMzIuMi03LjhsNS4yIDBjMzYuMiAwIDY1LjYgMjkuNCA2NS42IDY1LjcgMCAxNy40LTYuOSAzNC4xLTE5LjIgNDYuNGwtMS4zIDEuM2MtMy43IDMuNy0zLjcgOS42IDAgMTMuM2wxLjMgMS4zYzEyLjMgMTIuMyAxOS4yIDI5IDE5LjIgNDYuNCAwIDM2LjItMjkuNCA2NS42LTY1LjYgNjUuNmwtNS4yIDBjLTEyLjggMC0yNS41LTMuNS0zNi41LTEwLjFsLTMzLjUtMjAuMWMtMS45LTEuMS0zLjQtMS4yLTQuNS0xLjEtMS4zIC4yLTIuNyAuOS0zLjkgMi4xcy0xLjkgMi42LTIuMSAzLjljLS4yIDEuMS0uMSAyLjYgMS4xIDQuNWwyMC4xIDMzLjVjNi42IDExIDEwLjEgMjMuNiAxMC4xIDM2LjVsMCA1LjJjMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjYtMTcuNCAwLTM0LjEtNi45LTQ2LjQtMTkuMmwtMS4zLTEuM2MtMy43LTMuNy05LjYtMy43LTEzLjMgMGwtMS4zIDEuM2MtMTIuMyAxMi4zLTI5IDE5LjItNDYuNCAxOS4yLTM2LjIgMC02NS42LTI5LjQtNjUuNy02NS42bDAtNS4yYzAtMTIuOCAzLjUtMjUuNSAxMC4xLTM2LjVsMjAuMS0zMy41YzEuMS0xLjkgMS4yLTMuNCAxLjEtNC41LS4yLTEuMy0uOS0yLjctMi4xLTMuOXMtMi42LTEuOS0zLjktMi4xYy0uNS0uMS0xLjItLjEtMS45IDBsLTIuNSAxLTMzLjUgMjAuMWMtMTEgNi42LTIzLjYgMTAuMS0zNi41IDEwLjFsLTUuMiAwQzQ1LjQgMzc2IDE2IDM0Ni42IDE2IDMxMC40IDE2IDI5MyAyMi45IDI3Ni4zIDM1LjIgMjY0bDEuMy0xLjMgMS4yLTEuNWMyLjEtMy4xIDIuMS03LjIgMC0xMC4zbC0xLjItMS41LTEuMy0xLjNDMjIuOSAyMzUuOCAxNiAyMTkuMSAxNiAyMDEuNyAxNiAxNjUuNCA0NS40IDEzNiA4MS43IDEzNmw1LjIgMGMxMi44IDAgMjUuNSAzLjUgMzYuNSAxMC4xbDMzLjUgMjAuMSAyLjUgMWMuNyAuMSAxLjQgLjEgMS45IC4xIDEuMy0uMiAyLjctLjkgMy45LTIuMXMxLjktMi42IDIuMS0zLjljLjEtLjUgLjEtMS4yLS4xLTEuOWwtMS0yLjUtMjAuMS0zMy41Yy02LjYtMTEtMTAuMS0yMy42LTEwLjEtMzYuNWwwLTUuMmMwLTM2LjIgMjkuNC02NS43IDY1LjctNjUuNyAxNy40IDAgMzQuMSA2LjkgNDYuNCAxOS4ybDEuMyAxLjNjMy43IDMuNiA5LjYgMy43IDEzLjMgMGwxLjMtMS4zIDQuOC00LjRDMjgwLjUgMjEuMyAyOTUuMSAxNiAzMTAuNCAxNnoiXQogICAgfTsKICAgIGZhVGVldGhPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlZXRoLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyZiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDgwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTAgMjcyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzA0em04MC0xNjBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0em0xMjggMGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjR6TTgwIDExMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek00OCAzODRsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptMTQ0IDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTEyLTE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyeiJdCiAgICB9OwogICAgZmFCYXJzU3RhZ2dlcmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMtc3RhZ2dlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJlb3JkZXIiLCAic3RyZWFtIl0sICJmNTUwIiwgIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTY0IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhUmVvcmRlciA9IGZhQmFyc1N0YWdnZXJlZDsKICAgIGZhU3RyZWFtID0gZmFCYXJzU3RhZ2dlcmVkOwogICAgZmFXYXJlaG91c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FyZWhvdXNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0OTQiLCAiTTAgMTQyLjFMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM3LjljMC0yNy41LTE3LjYtNTItNDMuOC02MC43TDMwMy4yIDUuMWMtOS45LTMuMy0yMC41LTMuMy0zMC40IDBMNDMuOCA4MS40QzE3LjYgOTAuMSAwIDExNC42IDAgMTQyLjF6TTQ2NCAyNTZsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHpNMTEyIDQxNmwzNTIgMCAwLTY0LTM1MiAwIDAgNjR6bTM1MiAzMmwtMzUyIDAgMCA2NCAzNTIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFTd2F0Y2hib29rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN3YXRjaGJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVjMyIsICJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM2OGMwIDUzLTQzIDk2LTk2IDk2UzAgNDY5IDAgNDE2TDAgNDh6TTI0MCA0MDkuNmwwLTI3MS41IDQ4LjEtNDguMWMxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMGw2Ny45IDY3LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjQwIDQwOS42ek0yMDUuNSA1MTJsMTkyLTE5MiA2Ni42IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU4LjUgMHpNODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw4MCA2NHpNNjQgMjA4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTk2IDQ0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYUNhbXBncm91bmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtcGdyb3VuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5NzhdLCAiZjZiYiIsICJNMzQ0LjggNTIuM2MxMS4yLTEzLjcgOS4yLTMzLjgtNC41LTQ1cy0zMy44LTkuMi00NSA0LjVsLTM5LjIgNDgtMzkuMi00OEMyMDUuNi0xLjkgMTg1LjQtNCAxNzEuNyA3LjJzLTE1LjcgMzEuNC00LjUgNDVsNDcuNCA1OC0yMDIgMjQ2LjlDNC41IDM2Ny4xIDAgMzc5LjYgMCAzOTIuNkwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM5LjRjMC0xMi45LTQuNS0yNS41LTEyLjctMzUuNWwtMjAyLTI0Ni45IDQ3LjQtNTh6TTI1NiAyODhsMTEyIDEyOC0yMjQgMCAxMTItMTI4eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTUyIiwgIk0xMDQuNSAyNGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bS04IDE4MS4zTDczLjkgMjI3LjljLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM1LjEtMzUuMWMyMi44LTIyLjggNTMuNi0zNS42IDg1LjgtMzUuNiAzNi45IDAgNzEuOCAxNi44IDk0LjggNDUuNkwyNjIuMyAxODBjNi4xIDcuNiAxNS4zIDEyIDI1IDEybDMzLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzMuMiAwYy0yOS4yIDAtNTYuNy0xMy4zLTc1LTM2bC0zLjgtNC43IDAgMTE1LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhMMTMwIDM0Ny41Yy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6TTk2LjYgMzcxYzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVMNTUuMSA1MzQuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjguMy02OC4zYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEw5Ni42IDM3MXpNNTA1LjUgMzQ1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MnoiXQogICAgfTsKICAgIGZhR2xhc3NlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbGFzc2VzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MzAiLCAiTTE0My4zIDk2Yy0xNCAwLTI2LjUgOS4yLTMwLjYgMjIuNkw3MC40IDI1NiAyMjQgMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDY0IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTUzLjYgMC00Mi4zLTEzNy40QzQ1OS4yIDEwNS4yIDQ0Ni44IDk2IDQzMi43IDk2TDQwMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMi43IDBjNDIuMSAwIDc5LjQgMjcuNSA5MS44IDY3LjhsNDUuNCAxNDcuNWM0LjEgMTMuMiA2LjEgMjYuOSA2LjEgNDAuN2wwIDk2YzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0zMi02NCAwIDAgMzJjMCA1My00MyA5Ni05NiA5NmwtNjQgMGMtNTMgMC05Ni00My05Ni05NmwwLTk2YzAtMTMuOCAyLjEtMjcuNSA2LjEtNDAuN0w1MS41IDk5LjhDNjMuOSA1OS41IDEwMS4xIDMyIDE0My4zIDMyTDE3NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuNyAwek02NCAzMjBsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjQtMTI4IDB6bTQxNiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlUGF1c2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wYXVzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDkyLCAicGF1c2UtY2lyY2xlIl0sICJmMjhiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFQYXVzZUNpcmNsZTIgPSBmYUNpcmNsZVBhdXNlMjsKICAgIGZhTWVtb3J5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1lbW9yeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTM4IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDcuNEMwIDE0Mi4yIDQuNCAxNDggMTAuMSAxNTEuNyAyMy4zIDE2MC4zIDMyIDE3NS4xIDMyIDE5MnMtOC43IDMxLjctMjEuOSA0MC4zQzQuNCAyMzYgMCAyNDEuOCAwIDI0OC42bDAgNTUuNCA1MTIgMCAwLTU1LjRjMC02LjgtNC40LTEyLjYtMTAuMS0xNi4zLTEzLjItOC42LTIxLjktMjMuNC0yMS45LTQwLjNzOC43LTMxLjcgMjEuOS00MC4zYzUuNy0zLjcgMTAuMS05LjUgMTAuMS0xNi4zbDAtNy40YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek01MTIgNDE2bDAtNjQtNTEyIDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgODggMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0xNjAgMTYwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUdpZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2lmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg3M10sICJmMDZiIiwgIk0zMjEuNSA2OC44QzMyOS4xIDU1LjkgMzQyLjkgNDggMzU3LjggNDhsMi4yIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTczLjMgMCAzNC44LTU5LjJ6bS0xMzEgMGwzNC44IDU5LjItNzMuMyAwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwbDIuMiAwYzE0LjkgMCAyOC44IDcuOSAzNi4zIDIwLjh6bTg5LjYtMjQuM2wtMjQuMSA0MS0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwTDE1MiAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjQgMy41IDI4IDkuNiA0MEwzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDEuNiAwYzYuMS0xMiA5LjYtMjUuNiA5LjYtNDAgMC00OC42LTM5LjQtODgtODgtODhsLTIuMiAwYy0zMS45IDAtNjEuNSAxNi45LTc3LjcgNDQuNHpNNDgwIDI3MmwtMjAwIDAgMCAyMDggMTM2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDR6bS0yNDggMGwtMjAwIDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTM2IDAgMC0yMDh6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtd2hlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyYSIsICJNMTc2LTE2YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MCAwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDBsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiA0OEM0Mi43IDQ4IDMyIDM3LjMgMzIgMjRTNDIuNyAwIDU2IDB6TTI0IDcybDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDEyMEMxMC43IDEyMCAwIDEwOS4zIDAgOTZTMTAuNyA3MiAyNCA3MnptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDBjMC04LjggNy4yLTE2IDE2LTE2IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MHpNNDAwLTE2YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MCAwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zNTIgMTEyYzguOCAwIDE2IDcuMiAxNiAxNiAwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS05NiAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OGw0MTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0ek00OCA0MTZsMCA0OCA0OCAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek05NiAzMDRsLTQ4IDAgMCA0OGMyNi41IDAgNDgtMjEuNSA0OC00OHpNNDY0IDQxNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsNDggMCAwLTQ4ek00MTYgMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDAtNDgtNDggMHptLTk2IDgwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHoiXQogICAgfTsKICAgIGZhRHVuZ2VvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW5nZW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDkiLCAiTTM0Ny41IDE0NC44YzYuNSA1LjQgMTIuNSAxMS4zIDE4IDE3LjcgOC43IDEwLjIgMjMuNyAxNCAzNS4xIDYuOWw1NC4xLTMzLjhjMTEuMi03IDE0LjctMjEuNyA2LjktMzIuMi0xNS4zLTIwLjUtMzMuNS0zOC42LTU0LjEtNTMuOC0xMC40LTcuNi0yNC43LTQuMy0zMS44IDYuNGwtMzUuMSA1Mi42Yy03LjggMTEuNi0zLjggMjcuMyA3IDM2LjJ6TTMyNy44IDQxLjFjOC42LTEyLjkgMi45LTMwLjUtMTIuMi0zNC4xLTE5LjEtNC42LTM5LjEtNy01OS42LTdzLTQwLjQgMi40LTU5LjYgN2MtMTUuMSAzLjYtMjAuOCAyMS4yLTEyLjIgMzQuMWw0MCA2MGM1LjIgNy44IDE0LjUgMTEuNyAyMy45IDExLjIgNS4yLS4zIDEwLjYtLjMgMTUuOCAwIDkuNCAuNSAxOC43LTMuNCAyMy45LTExLjJsNDAtNjB6TTUwLjUgMTAzLjNjLTcuOSAxMC41LTQuMyAyNS4zIDYuOSAzMi4ybDU0LjEgMzMuOGMxMS40IDcuMSAyNi4zIDMuMyAzNS4xLTYuOSA1LjUtNi40IDExLjUtMTIuMyAxOC0xNy43IDEwLjgtOC45IDE0LjgtMjQuNiA3LTM2LjJMMTM2LjQgNTUuOWMtNy4xLTEwLjctMjEuNS0xNC0zMS44LTYuNC0yMC42IDE1LjEtMzguOCAzMy4zLTU0LjEgNTMuOHptNjIgMTQxLjFjLjgtOS45LTMuMy0xOS45LTExLjgtMjUuMUw0MSAxODJjLTEyLjktOC0yOS45LTIuMy0zMy42IDEyLjUtNC45IDE5LjctNy41IDQwLjMtNy41IDYxLjZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0zLjkgLjItNy44IC41LTExLjZ6bTI4Ny4xIDBjLjMgMy44IC41IDcuNyAuNSAxMS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjEuMi0yLjYtNDEuOC03LjUtNjEuNi0zLjYtMTQuNy0yMC43LTIwLjUtMzMuNi0xMi41bC01OS43IDM3LjNjLTguNCA1LjMtMTIuNiAxNS4yLTExLjggMjUuMXpNODggMzUybC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em00MDAgMGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0em0tODAgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnptMTYwIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnoiXQogICAgfTsKICAgIGZhU3VpdGNhc2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWVka2l0Il0sICJmMGZhIiwgIk0xOTIgNTZsMCA0MCAxMjggMCAwLTQwYzAtNC40LTMuNi04LTgtOEwyMDAgNDhjLTQuNCAwLTggMy42LTggOHptLTQ4IDhsMC04YzAtMzAuOSAyNS4xLTU2IDU2LTU2TDMxMiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDI0LTIyNCAwIDAtNDE2ek05NiAxNzZsMCAzMDQtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMCAwIDgwek00MTYgNDgwbDAtMzg0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyIDB6TTI0NCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM2LTM2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwzNiAwIDAgMzZjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzYgMzYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTM2IDAgMC0zNmMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYU1lZGtpdCA9IGZhU3VpdGNhc2VNZWRpY2FsOwogICAgZmFQZXJzb25DYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jYW5lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1M2MiLCAiTTIzMi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTQ0IDIzNi43TDk3LjcgMjk5LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzE0MiAxMzIgMTgxLjcgMTEyIDIyNCAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMzA0IDIzNi43IDMwNCA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNzUuM3pNMzkyIDM4NGMtNC40IDAtOCAzLjYtOCA4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMjhjMC00LjQtMy42LTgtOC04eiJdCiAgICB9OwogICAgZmFHYXVnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkYXNoYm9hcmQiLCAiZ2F1Z2UtbWVkIiwgInRhY2hvbWV0ZXItYWx0LWF2ZXJhZ2UiXSwgImY2MjQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bS0xNiA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYURhc2hib2FyZCA9IGZhR2F1Z2U7CiAgICBmYUdhdWdlTWVkID0gZmFHYXVnZTsKICAgIGZhVGFjaG9tZXRlckFsdEF2ZXJhZ2UgPSBmYUdhdWdlOwogICAgZmFFbnZlbG9wZU9wZW5UZXh0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLW9wZW4tdGV4dCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjU4IiwgIk0yODggMzMuOUw5Ni40IDE3NS44IDI1NC41IDI5M2M1LjMgMy45IDExLjIgNi45IDE3LjUgOC43TDI3MiA0NjRjMCA1LjUgLjUgMTAuOCAxLjMgMTZMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIzOS45YzAtMjAuMyA5LjYtMzkuNCAyNS45LTUxLjRMMjU0LjUtMjFjOS43LTcuMiAyMS40LTExIDMzLjUtMTFzMjMuOCAzLjkgMzMuNSAxMUw1MTguMSAxMjQuN2M3LjIgNS4zIDEzLjEgMTIgMTcuNCAxOS42LTIuNS0uMi01LS4zLTcuNS0uM0w0MzYuNiAxNDQgMjg4IDMzLjl6TTMyMCAyNDBjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIyNHptODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAweiJdCiAgICB9OwogICAgZmFUb29sYm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvb2xib3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MjBdLCAiZjU1MiIsICJNMTc2IDU2bDAgNDAgMTYwIDAgMC00MGMwLTQuNC0zLjYtOC04LThMMTg0IDQ4Yy00LjQgMC04IDMuNi04IDh6TTEyOCA5NmwwLTQwYzAtMzAuOSAyNS4xLTU2IDU2LTU2TDMyOCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDAgMjguMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFsNTEuOSA1MS45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45bDAgNzYuMS0xMzYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMTQ0IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTEzNiAwIDAtNzYuMWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDUxLjktNTEuOWM5LTkgMjEuMi0xNC4xIDMzLjktMTQuMUwxMjggOTZ6TTAgNDE2bDAtOTYgMTM2IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMTQ0IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMTM2IDAgMCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdCiAgICB9OwogICAgZmFQb3dlck9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwb3dlci1vZmYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjExXSwgImYwMTEiLCAiTTI4OCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzIyNC0xNy43IDIyNCAwbDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMMjg4IDB6TTE0Ni4zIDk4LjRjMTQuNS0xMC4xIDE4LTMwLjEgNy45LTQ0LjZzLTMwLjEtMTgtNDQuNi03LjlDNDMuNCA5Mi4xIDAgMTY5IDAgMjU2IDAgMzk3LjQgMTE0LjYgNTEyIDI1NiA1MTJTNTEyIDM5Ny40IDUxMiAyNTZjMC04Ny00My40LTE2My45LTEwOS43LTIxMC4xLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZjNDkuOCAzNC44IDgyLjMgOTIuNCA4Mi4zIDE1Ny42IDAgMTA2LTg2IDE5Mi0xOTIgMTkyUzY0IDM2MiA2NCAyNTZjMC02NS4yIDMyLjUtMTIyLjkgODIuMy0xNTcuNnoiXQogICAgfTsKICAgIGZhU2lnbmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0NiwgInNpZ25hbC01IiwgInNpZ25hbC1wZXJmZWN0Il0sICJmMDEyIiwgIk00ODggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMHpNMzYwIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDI0OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4ek0xNTIgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0ek00OCAzODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTaWduYWw1ID0gZmFTaWduYWw7CiAgICBmYVNpZ25hbFBlcmZlY3QgPSBmYVNpZ25hbDsKICAgIGZhQXJyb3dzU3BpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3Mtc3BpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJiIiwgIk00ODEuNyAyNDAuMWMtMTcuNi0xLjItMzIuOSAxMi0zNC4yIDI5LjctMy4zIDQ3LTIzLjYgODkuNC01NC44IDEyMUwzNjEgMzU5Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAzNjYuMyAzMjAgMzc2bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtMzUtMzVjNDEuNy00Mi4yIDY4LjktOTguOCA3My40LTE2MS44IDEuMi0xNy42LTEyLTMyLjktMjkuNy0zNC4yek0zOSA0MUw3NCA3NmMtNDEuNyA0Mi4yLTY4LjkgOTguOC03My40IDE2MS44LTEuMiAxNy42IDEyIDMyLjkgMjkuNyAzNC4yczMyLjktMTIgMzQuMi0yOS43YzMuMy00NyAyMy42LTg5LjQgNTQuOC0xMjFMMTUxIDE1M2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzE5MiAxNDUuNyAxOTIgMTM2bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDU2IDBDNDYuMyAwIDM3LjUgNS44IDMzLjggMTQuOFMzMi4yIDM0LjEgMzkgNDF6bTIwMS0xMC43Yy0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMiA0NyAzLjMgODkuNCAyMy42IDEyMSA1NC44TDM1OSAxNTFjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMzY2LjMgMTkyIDM3NiAxOTJsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzQ3Ny45IDMyLjIgNDcxIDM5TDQzNiA3NGMtNDIuMi00MS43LTk4LjgtNjguOS0xNjEuOC03My40LTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43ek00MSA0NzNsMzUtMzVjNDIuMiA0MS43IDk4LjggNjguOSAxNjEuOCA3My40IDE3LjYgMS4yIDMyLjktMTIgMzQuMi0yOS43cy0xMi0zMi45LTI5LjctMzQuMmMtNDctMy4zLTg5LjQtMjMuNi0xMjEtNTQuOEwxNTMgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTQ1LjcgMzIwIDEzNiAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ1NmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA0NzkuOCA0MSA0NzN6Il0KICAgIH07CiAgICBmYUpvaW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpvaW50IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1OTUiLCAiTTM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsMjEgMjFDNDY5IDE5MSA0ODAgMjE3LjQgNDgwIDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTljMC0xNC45LTUuOS0yOS4xLTE2LjQtMzkuNmwtMjEtMjFDMzU3LjEgMTQ2LjkgMzM2IDk2IDMzNiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0ek01NTIgMjg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE5YzAtNDAuMy0xNi03OS00NC41LTEwNy41bC0yMS0yMUM0NDMgOTcgNDMyIDcwLjYgNDMyIDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE5YzAgMTQuOSA1LjkgMjkuMSAxNi40IDM5LjZsMjEgMjFDNTU0LjkgMTQxLjEgNTc2IDE5MiA1NzYgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTI5Mi43IDMyMGM1LjYgMCAxMC43IDIuOSAxMy42IDcuNkwzOTQuNiA0NzFjMS4zIDIuMSAwIDQuOS0yLjQgNS4yLTE2LjEgMi41LTMyLjQgMy43LTQ4LjcgMy43bC0zOC4xIDBjLTUuNiAwLTEwLjctMi45LTEzLjYtNy42bC03OS0xMjguNGMtNi05LjggMC0yMi42IDExLjUtMjMuMyA2LjctLjQgMTMuNC0uNiAyMC4yLS42bDQ4LjMgMHpNNDU5LjMgNDY1LjljLTYuNCAxLTEyLjctMS45LTE2LjEtNy40TDM3NC4xIDM0Ni4xYy02LjctMTAuOSAxLjUtMjQuNyAxNC4yLTIyLjkgMS4zIC4yIDIuNiAuNCAzLjggLjZsMTM2LjQgMjFjMjcuMyA0LjIgNDcuNCAyNy43IDQ3LjQgNTUuM3MtMjAuMSA1MS4xLTQ3LjQgNTUuM2wtNjkuMiAxMC42ek0xMzguNyAzMzZjNi43LTEuNSAxMy42IDEuNCAxNy4yIDcuMmw2OC45IDExMmM2LjYgMTAuNy0xLjIgMjQuNC0xMy44IDIzLjEtMTMtMS40LTI1LjktMy41LTM4LjYtNi41TDMxLjIgNDM5LjJDMTIuOSA0MzUgMCA0MTguNyAwIDQwMHMxMi45LTM1IDMxLjItMzkuMkwxMzguNyAzMzZ6Il0KICAgIH07CiAgICBmYUJyYWlsbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhaWxsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMmExIiwgIk04MCAxNDRhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAgMTkyYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0LTEwLjcgMjQtMjQgMjR6bTAgNTZjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODAtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwem0yNDgtODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0em01NiAwYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwIDM1LjggODAgODAgODAgODAtMzUuOCA4MC04MHpNMzA0IDIzMmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAgMTA0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wLTE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhQmFza2V0U2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFza2V0LXNob3BwaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNob3BwaW5nLWJhc2tldCJdLCAiZjI5MSIsICJNMjg4IDBjNi42IDAgMTIuOSAyLjcgMTcuNCA3LjVsMTQ0IDE1MiAuNSAuNSA3OC4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxNC41LTkuNiAyNi43LTIyLjggMzAuN0w0OTEuMSA0MjkuOWMtNi41IDI5LjMtMzIuNSA1MC4xLTYyLjUgNTAuMWwtMjgxLjMgMGMtMzAgMC01Ni0yMC44LTYyLjUtNTAuMWwtNDYtMjA3LjJjLTEzLjItMy45LTIyLjgtMTYuMi0yMi44LTMwLjcgMC0xNy43IDE0LjMtMzIgMzItMzJsNzguMSAwIC41LS41IDE0NC0xNTJDMjc1LjEgMi43IDI4MS40IDAgMjg4IDB6bTAgNTguOUwxOTIuMiAxNjAgMzgzLjggMTYwIDI4OCA1OC45ek0yMDggMjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6bTgwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMjggMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMnoiXQogICAgfTsKICAgIGZhU2hvcHBpbmdCYXNrZXQgPSBmYUJhc2tldFNob3BwaW5nOwogICAgZmFCcmlkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzgiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NGMwLTM4LjggMjYuNC03Mi42IDY0LTgybDAtMTEyLTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHoiXQogICAgfTsKICAgIGZhUGxhbmVBcnJpdmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWFycml2YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3NDhdLCAiZjVhZiIsICJNMzg2LjYgMTkzLjFMMjY1LjkgMy43Yy00LjgtNy42LTEyLjYtMTIuOC0yMS40LTE0LjNsLTQzLjEtNy42Yy0xMC44LTEuOS0yMC4yIDcuMy0xOC42IDE4LjFsMjQgMTYxLjYtMTA1LTE4LjUtMzMuOC02MS44QzY0LjUgNzQuNyA1OC4yIDcwLjIgNTEuMSA2OUwzNCA2NmMtOS44LTEuNy0xOC44IDUuOS0xOC44IDE1LjhsLjYgMTA2LjNjLjIgMzAuOSAyMi40IDU3LjMgNTIuOSA2Mi43bDEzLjUgMi40IDAgMCA0MTcuNiA3My42YzMwLjUgNS40IDU5LjUtMTUgNjQuOS00NS40cy0xNS01OS41LTQ1LjQtNjQuOUwzODYuNiAxOTMuMXpNMjI0IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTEzMS4yLTE1LjNhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQ0OHoiXQogICAgfTsKICAgIGZhQ2FzaFJlZ2lzdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhc2gtcmVnaXN0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc4OCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NHMyOC43IDY0IDY0IDY0bDQ4IDAgMCAzMi01NyAwYy0zMS42IDAtNTguNSAyMy4xLTYzLjMgNTQuNEwxLjEgMzY0LjFDLjQgMzY4LjggMCAzNzMuNiAwIDM3OC40TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjkuNmMwLTQuOC0uNC05LjYtMS4xLTE0LjRMNDg4LjIgMjE0LjRDNDgzLjUgMTgzLjEgNDU2LjYgMTYwIDQyNSAxNjBsLTIxNyAwIDAtMzIgNDggMGMzNS4zIDAgNjQtMjguNyA2NC02NFMyOTEuMyAwIDI1NiAwTDk2IDB6bTAgNDhsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMOTYgODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTY0IDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0em00OC0xNjBhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjAtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMTYwIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTMyOCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMjU2IDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTQyNCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMzUyIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6Il0KICAgIH07CiAgICBmYVJpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzBiIiwgIk02NCAyMDhjMCA3LjggNC40IDE4LjcgMTcuMSAzMC4zIDQ1LjQtMjQuMiAxMDcuNy0zOC4zIDE3NC45LTM4LjNzMTI5LjUgMTQuMSAxNzQuOSAzOC4zYzEyLjgtMTEuNiAxNy4xLTIyLjUgMTcuMS0zMC4zIDAtMTIuMy0xMC44LTMyLTQ3LjktNTAuNi0zNS4yLTE3LjYtODYuMS0yOS40LTE0NC4xLTI5LjRzLTEwOC45IDExLjgtMTQ0LjEgMjkuNEM3NC44IDE3NiA2NCAxOTUuNyA2NCAyMDh6bTE5MiA0MGMtNDcgMC04OS4zIDcuNi0xMjIuOSAxOS43IDMzLjIgMTIuNCA3NS43IDIwLjMgMTIyLjkgMjAuM3M4OS43LTcuOCAxMjIuOS0yMC4zQzM0NS4zIDI1NS42IDMwMyAyNDggMjU2IDI0OHpNMCAyMDhDMCAxNTguNCAzOS40IDEyMi4yIDgzLjMgMTAwLjIgMTI5LjEgNzcuMyAxOTAuMyA2NCAyNTYgNjRzMTI2LjkgMTMuMyAxNzIuNyAzNi4yYzQzLjkgMjIgODMuMyA1OC4yIDgzLjMgMTA3LjhsMCA5NmMwIDQ5LjYtMzkuNCA4NS44LTgzLjMgMTA3LjgtNDUuOSAyMi45LTEwNyAzNi4yLTE3Mi43IDM2LjJTMTI5LjEgNDM0LjcgODMuMyA0MTEuOEMzOS40IDM4OS44IDAgMzUzLjYgMCAzMDRsMC05NnoiXQogICAgfTsKICAgIGZhU2hhcmVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFyZS1ub2RlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaGFyZS1hbHQiXSwgImYxZTAiLCAiTTM4NCAxOTJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTYtOTYgNDMtOTYgOTZjMCA1LjQgLjUgMTAuOCAxLjMgMTZMMTU5LjYgMTg0LjFjLTE2LjktMTUtMzkuMi0yNC4xLTYzLjYtMjQuMS01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzI0LjQgMCA0Ni42LTkuMSA2My42LTI0LjFMMjg5LjMgNDAwYy0uOSA1LjItMS4zIDEwLjUtMS4zIDE2IDAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTYtNDMtOTYtOTYtOTZjLTI0LjQgMC00Ni42IDkuMS02My42IDI0LjFMMTkwLjcgMjcyYy45LTUuMiAxLjMtMTAuNSAxLjMtMTZzLS41LTEwLjgtMS4zLTE2bDEyOS43LTcyLjFjMTYuOSAxNSAzOS4yIDI0LjEgNjMuNiAyNC4xeiJdCiAgICB9OwogICAgZmFTaGFyZUFsdCA9IGZhU2hhcmVOb2RlczsKICAgIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTNmIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCaW5vY3VsYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpbm9jdWxhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFlNSIsICJNMTI4IDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi05NiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDk2bDAgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC01OS4xYzAtMzQuNiA5LjQtNjguNiAyNy4yLTk4LjMgMTMuNy0yMi44IDIyLjUtNDguMiAyNS44LTc0LjZMNjAuNSAxNTZjMi0xNiAxNS42LTI4IDMxLjgtMjhsOTkuOCAwem0yMjcuOCAwYzE2LjEgMCAyOS44IDEyIDMxLjggMjhMNDU5IDIxNmMzLjMgMjYuNCAxMi4xIDUxLjggMjUuOCA3NC42IDE3LjggMjkuNyAyNy4yIDYzLjcgMjcuMiA5OC4zbDAgNTkuMWMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzIwIDk5LjggMHpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi05NiAwIDAtMzJ6bS0zMiA2NGwwIDE2MC02NCAwIDAtMTYwIDY0IDB6Il0KICAgIH07CiAgICBmYUtpcFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2lwLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFjNCIsICJNMzQwLjggODguM2MxMy40LTExLjUgMTUtMzEuNyAzLjUtNDUuMXMtMzEuNy0xNS00NS4xLTMuNUwxMjggMTg2LjQgMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNjgtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjIuNCAxNzEuMiAxNDYuN2MxMy40IDExLjUgMzMuNiA5LjkgNDUuMS0zLjVzOS45LTMzLjYtMy41LTQ1LjFMMTczLjIgMjgwIDM1MiAyODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTczLjIgMjMyIDM0MC44IDg4LjN6Il0KICAgIH07CiAgICBmYUhhcmREcml2ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFyZC1kcml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQzNiwgImhkZCJdLCAiZjBhMCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDI2MC4xQzE4LjEgMjQ3LjQgNDAuMiAyNDAgNjQgMjQwbDMyMCAwYzIzLjggMCA0NS45IDcuNCA2NCAyMC4xTDQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNDQ4IDM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NHpNMjI0IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFIZGQyID0gZmFIYXJkRHJpdmUyOwogICAgZmFSYW5raW5nU3RhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYW5raW5nLXN0YXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2MSIsICJNMzIxLjggNTQuMUwyOTguMiA2LjNjLTMuOS04LjMtMTYuMS04LjYtMjAuNCAwbC0yMy42IDQ3LjgtNTIuMyA3LjVjLTkuMyAxLjQtMTMuMyAxMi45LTYuNCAxOS44bDM4IDM3LTkgNTIuMWMtMS40IDkuMyA4LjIgMTYuNSAxNi44IDEyLjJsNDYuOS0yNC44IDQ2LjYgMjQuNGM4LjYgNC4zIDE4LjMtMi45IDE2LjgtMTIuMmwtOS01Mi4xIDM4LTM2LjZjNi44LTYuOCAyLjktMTguMy02LjQtMTkuOGwtNTIuMy03LjV6TTI1NiAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTQ4IDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTQxNiA0MzJsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFVc2VyVGllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItdGllIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MDgiLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQwem0tMzAuNSA1Nmw2MSAwYzkuNyAwIDE3LjUgNy44IDE3LjUgMTcuNSAwIDQuMi0xLjUgOC4yLTQuMiAxMS40bC0yNy40IDMyIDMxIDExNS4xIC42IDAgMzQuNi0xMzguNWMyLjItOC43IDExLjEtMTQgMTkuNS0xMC44IDYxLjkgMjMuNiAxMDUuOSA4My42IDEwNS45IDE1My44IDAgMTUuMS0xMi4zIDI3LjQtMjcuNCAyNy40TDQzLjQgNTEyYy0xNS4xIDAtMjcuNC0xMi4zLTI3LjQtMjcuNCAwLTcwLjIgNDQtMTMwLjIgMTA1LjktMTUzLjggOC40LTMuMiAxNy4zIDIuMSAxOS41IDEwLjhsMzQuNiAxMzguNSAuNiAwIDMxLTExNS4xLTI3LjQtMzJjLTIuNy0zLjItNC4yLTcuMi00LjItMTEuNCAwLTkuNyA3LjgtMTcuNSAxNy41LTE3LjV6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVsbGlwc2lzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImVsbGlwc2lzLWgiXSwgImYxNDEiLCAiTTAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTY4IDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yMjQtNTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzSCA9IGZhRWxsaXBzaXM7CiAgICBmYVN0b3JlU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA3MSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTguNi01OC42YzEuMS00IDEuNi04LjIgMS42LTEyLjVsMC0xNTEuMmMtMTIuNSA0LjYtMjYuMSA3LjItNDAuNSA3LjItOC4xIDAtMTUuOS0uOC0yMy41LTIuNGwwIDY2LjQtMzAuMiAwLTEzNy41LTEzNy41YzIuOS0zLjYgNS41LTcuNCA3LjYtMTEuNSAxMS42IDIyIDM0LjcgMzcgNjEuMyAzNyAyNi44IDAgNDkuOC0xNS4xIDYxLjQtMzcuMSAxMS40IDIyLjEgMzQuNSAzNy4xIDYwLjggMzcuMSA0NS42IDAgNzguNC00My43IDY1LjYtODcuNUw1MTMuOCA3Mi4zQzUwNi44IDQ4LjQgNDg0LjkgMzIgNDYwIDMyTDExNiAzMmMtNS41IDAtMTAuOCAuOC0xNS45IDIuM0w0MS0yNC45ek0xNTEuNSAyMjEuM0w0OC43IDExOC42IDM4LjkgMTUyLjVjLTEyLjggNDMuNyAyMCA4Ny41IDY1LjYgODcuNSAxOC4xIDAgMzQuNy03LjEgNDctMTguN3pNNDEwLjIgNDgwbC0xMjgtMTI4LTE1NC4yIDAgMC02Ni40Yy03LjYgMS42LTE1LjUgMi40LTIzLjUgMi40LTE0LjQgMC0yOC0yLjYtNDAuNS03LjJMNjQgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI5OC4yIDB6Il0KICAgIH07CiAgICBmYVBlcmNlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyY2VudCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMTAxLCA2Mjc4NSwgInBlcmNlbnRhZ2UiXSwgIjI1IiwgIk0xOTIgMTI4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNNDQ4IDM4NGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQzOC42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTM4NCAzODRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMzg0LTM4NHoiXQogICAgfTsKICAgIGZhUGVyY2VudGFnZSA9IGZhUGVyY2VudDsKICAgIGZhRmlsZVppcHBlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS16aXBwZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1hcmNoaXZlIl0sICJmMWM2IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNNjQgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA0OEM3NC43IDQ4IDY0IDU4LjcgNjQgNzJ6bTAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTY0IDcybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTE2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhRmlsZUFyY2hpdmUyID0gZmFGaWxlWmlwcGVyMjsKICAgIGZhRGlzcGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXNwbGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxNjMiLCAiTTQ0OCA5NmwwIDI1Ni0zODQgMCAwLTI1NiAzODQgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDQgMC0xNiA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwLTE2LTQ4IDE0NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFJY29ucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY29ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoZWFydC1tdXNpYy1jYW1lcmEtYm9sdCJdLCAiZjg2ZCIsICJNMTc0LjkgMjcyYzEwLjcgMCAyMC43IDUuMyAyNi42IDE0LjJsMTEuOCAxNy44IDI2LjcgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI2LjcgMCAxMS44LTE3LjhjNS45LTguOSAxNS45LTE0LjIgMjYuNi0xNC4ybDYxLjcgMHptMjc4LjYtMTJjNS42LTQuOSAxMy45LTUuMyAxOS45LS45czguMyAxMi40IDUuMyAxOS4zTDQ0MC4zIDM2OCA0OTYgMzY4YzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjMtMTIuNC01LjMtMTkuM2wzOC41LTg5LjctNTUuOCAwYy02LjcgMC0xMi42LTQuMS0xNS0xMC40cy0uNi0xMy4zIDQuNC0xNy43bDEyOC0xMTJ6TTE0NCAzNjBhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2ek00ODMuOCAuNGM2LjUtMS4xIDEzLjEgLjQgMTguNSA0LjQgNi4xIDQuNSA5LjcgMTEuNyA5LjcgMTkuMmwwIDE1Mi0uMyA0LjljLTMuMyAyNC4yLTMwLjUgNDMuMS02My43IDQzLjEtMzUuMyAwLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGM1LjUgMCAxMC45IC42IDE2IDEuNmwwLTQ5LjMtMTEyIDMzLjYgMCAxMTAuMi0uMyA0LjljLTMuMyAyNC4yLTMwLjUgNDMuMS02My43IDQzLjEtMzUuMyAwLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGM1LjUgMCAxMC45IC42IDE2IDEuNkwzMDQgNzJjMC0xMC42IDctMjAgMTcuMS0yM2wxNjAtNDggMi43LS42ek0xODguOSAwQzIyNiAwIDI1NiAzMCAyNTYgNjcuMWwwIDYuMWMwIDU2LjEtNzUuMiAxMTIuMS0xMTAuMyAxMzUuMy0xMC44IDcuMS0yNC42IDcuMS0zNS40IDAtMzUuMS0yMy4xLTExMC4zLTc5LjItMTEwLjMtMTM1LjNsMC02LjFDMCAzMCAzMCAwIDY3LjEgMCA4OC4yIDAgMTA4IDkuOSAxMjAuNyAyNi44bDcuMyA5LjggNy4zLTkuOEMxNDggOS45IDE2Ny44IDAgMTg4LjkgMHoiXQogICAgfTsKICAgIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQgPSBmYUljb25zOwogICAgZmFSdWxlclZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImY1NDgiLCAiTTAgMTZDMC0xMC41IDIxLjUtMzIgNDgtMzJsMTYwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyNC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCAyNGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1NDRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTZ6Il0KICAgIH07CiAgICBmYU1hcExvY2F0aW9uRG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1sb2NhdGlvbi1kb3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsibWFwLW1hcmtlZC1hbHQiXSwgImY1YTAiLCAiTTU3NiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEw0MTMuNSA3Ny41IDIzNC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM3MC44IDg4LjggNjQgOTkuOSA2NCAxMTJsMCAzNTJjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3My4zIDU3LjhjLTQuMy02LjQtOC41LTEzLjEtMTIuNi0xOS45LTExLTE4LjMtMjEuOS0zOS4zLTMwLTYxLjhsLTEwMS4yLTMzLjcgMC0yODQuNSAxMjggNDIuNyAwIDk5LjNjMzEtMzUuOCA3Ny01OC40IDEyOC01OC40IDIyLjYgMCA0NC4yIDQuNCA2NCAxMi41TDU3NiA0OHpNNTEyIDIyNGMtNjYuMyAwLTEyMCA1Mi44LTEyMCAxMTcuOSAwIDY4LjkgNjQuMSAxNTAuNCA5OC42IDE4OS4zIDExLjYgMTMgMzEuMyAxMyA0Mi45IDAgMzQuNS0zOC45IDk4LjYtMTIwLjQgOTguNi0xODkuMyAwLTY1LjEtNTMuNy0xMTcuOS0xMjAtMTE3Ljl6TTQ3MiAzNDRhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VkQWx0ID0gZmFNYXBMb2NhdGlvbkRvdDsKICAgIGZhSGVhcnRDcmFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jcmFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0OCwgImhlYXJ0LWJyb2tlbiJdLCAiZjdhOSIsICJNMTMzLjEgMzJjMTcuMyAwIDM0LjIgMy40IDQ5LjkgOS43bDU0LjggODUuMi03NS40IDc1LjRjLTEuNSAxLjUtMi40IDMuNi0yLjMgNS44czEgNC4yIDIuNiA1LjdsMTEyIDEwNGMyLjkgMi43IDcuNCAyLjkgMTAuNSAuM3MzLjgtNyAxLjctMTAuNGwtNjAuNC05OC4xIDkwLjctNzUuNmMyLjYtMi4xIDMuNS01LjcgMi40LTguOEwyOTYuNCA2MC42QzMxOS42IDQyLjMgMzQ4LjYgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTEyLjItMTM5LjkgMjQyLjUtMjEyLjkgMjk4LjItMTIuNCA5LjQtMjcuNiAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjYtNDMuMS0xNC4xQzEzOS45IDQxMC4yIDAgMjc5LjkgMCAxNjcuN2wwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMnoiXQogICAgfTsKICAgIGZhSGVhcnRCcm9rZW4gPSBmYUhlYXJ0Q3JhY2s7CiAgICBmYUNvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDRdLCAiZjZjOCIsICJNOTYgMjI0bDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04OC4yYzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xbDAgMjQuMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTYuOWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45bDAgMTYuOWMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjQuMmMxMS40LTQgMjIuMS05LjQgMzItMTYuMWwwIDg4LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MCAzMiAzMiAwIDQ5LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZMNTMwIDQyN2M4LjggMTMuMSAyMy41IDIxIDM5LjMgMjEgMjIuNSAwIDQxLjktMTUuOSA0Ni4zLTM4bDIwLjMtMTAxLjZjMi42LTEzLS4zLTI2LjUtOC0zNy4zbC0zLjktNS41IDAtODEuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0LjQtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0TDE0NCA2NEM3Ny43IDY0IDI0IDExNy43IDI0IDE4NGwwIDU0QzkuNCAyNDkuOCAwIDI2Ny44IDAgMjg4bDAgMTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40IDMxLjggMCA1Ny42LTI1LjggNTcuNi01Ny42TDcyIDE4NGMwLTI0LjMgMTIuMS00NS44IDMwLjUtNTguOS00LjIgMTAuOC02LjUgMjIuNi02LjUgMzQuOWwwIDY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMTc4LjcgMGMxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNiAwIDYtMi40IDExLjgtNi42IDE2bC0yMy40IDIzLjRDMzMyLjIgMjExLjggMzAyLjcgMjI0IDI3MiAyMjRzLTYwLjItMTIuMi04MS45LTMzLjlsLTIzLjQtMjMuNHoiXQogICAgfTsKICAgIGZhUnNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmZWVkIl0sICJmMDllIiwgIk0wIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyIDIyOS44IDAgNDE2IDE4Ni4yIDQxNiA0MTYgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDMzg0IDI1My42IDIyNi40IDk2IDMyIDk2IDE0LjMgOTYgMCA4MS43IDAgNjR6TTAgNDE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMzIgMTYwYzE1OS4xIDAgMjg4IDEyOC45IDI4OCAyODggMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNC0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFGZWVkID0gZmFSc3M7CiAgICBmYU1hZ25pZnlpbmdHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjY5LCAic2VhcmNoIl0sICJmMDAyIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4eiJdCiAgICB9OwogICAgZmFTZWFyY2ggPSBmYU1hZ25pZnlpbmdHbGFzczsKICAgIGZhQ2xvdWRNb29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1vb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjZjMyIsICJNNDgwIDBjMTQuNiAwIDI4LjggMS42IDQyLjUgNC43IDcuNCAxLjcgMTMgNy44IDEzLjkgMTUuNHMtMyAxNC45LTkuOCAxOC4zYy00NS40IDIyLjYtNzYuNiA2OS41LTc2LjYgMTIzLjYgMCA3Ni4yIDYxLjggMTM4IDEzOCAxMzggMy43IDAgNy40LS4xIDExLjEtLjQgNy42LS42IDE0LjcgMy42IDE3LjggMTAuNnMxLjUgMTUuMS0zLjkgMjAuNGMtMjYgMjUtNTkuMSA0Mi43LTk1LjkgNDkuOS0xMS4xLTI1LjMtMzAuMi00Ni4zLTU0LjEtNTkuOC03LjYtNjMuNC02MS42LTExMi42LTEyNy4xLTExMi42LTExLjIgMC0yMi4xIDEuNS0zMi41IDQuMi00LjgtNC4yLTkuOS04LjItMTUuMi0xMS44LS4xLTIuOC0uMi01LjYtLjItOC40IDAtMTA2IDg2LTE5MiAxOTItMTkyem0tLjEgNDMxLjljMCA0NC4yLTM1LjggODAtODAgODBsLTI3MS45IDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Ny42IDM0LjYtODcgODAtOTQuNi0uNC01Mi44IDQyLjktOTcuMyA5Ni05Ny4zIDM0LjkgMCA2NS40IDE4LjYgODIuMiA0Ni40IDEzLTkuMSAyOC44LTE0LjQgNDUuOC0xNC40IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS45LS42IDExLjctMS45IDE3LjIgMzcuNCA2LjcgNjUuOCAzOS40IDY1LjggNzguN3oiXQogICAgfTsKICAgIGZhQm94ZXNTdGFja2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveGVzLXN0YWNrZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjYyNSwgImJveGVzIiwgImJveGVzLWFsdCJdLCAiZjQ2OCIsICJNMjI0IDBsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgNS41LS43IDEwLjktMiAxNmwtMjUyIDBjLTEuMy01LjEtMi0xMC41LTItMTZsMC0xMjhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMHptOTYgNTEyYy0xMS4yIDAtMjEuOC0yLjktMzEtOCA5LjUtMTYuNSAxNS0zNS42IDE1LTU2bDAtMTI4YzAtMjAuNC01LjUtMzkuNS0xNS01NiA5LjItNS4xIDE5LjctOCAzMS04bDMyIDAgMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMjggMHpNMCAzMjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMCAwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMyMHoiXQogICAgfTsKICAgIGZhQm94ZXMgPSBmYUJveGVzU3RhY2tlZDsKICAgIGZhQm94ZXNBbHQgPSBmYUJveGVzU3RhY2tlZDsKICAgIGZhQ29kZUJyYW5jaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWJyYW5jaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTI2IiwgIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgNzAuNyAxNzYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTc2IDAgMCA3MC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBTMCA0NzYuMiAwIDQzMmMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtMjA1LjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMzIgMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek04MCA0NTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFCYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjgzLCAiY2FuY2VsIl0sICJmMDVlIiwgIk0zNjcuMiA0MTIuNUw5OS41IDE0NC44Yy0yMi40IDMxLjQtMzUuNSA2OS44LTM1LjUgMTExLjIgMCAxMDYgODYgMTkyIDE5MiAxOTIgNDEuNSAwIDc5LjktMTMuMSAxMTEuMi0zNS41em00NS4zLTQ1LjNjMjIuNC0zMS40IDM1LjUtNjkuOCAzNS41LTExMS4yIDAtMTA2LTg2LTE5Mi0xOTItMTkyLTQxLjUgMC03OS45IDEzLjEtMTExLjIgMzUuNUw0MTIuNSAzNjcuMnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhQ2FuY2VsID0gZmFCYW47CiAgICBmYUp1Z0RldGVyZ2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqdWctZGV0ZXJnZW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1MTkiLCAiTTk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggOTZDNzQuNyA5NiA2NCA4NS4zIDY0IDcyUzc0LjcgNDggODggNDhsOCAwIDAtMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDEyOCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyNTZ6bTI1NiAwbDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFSZXBseSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNzE0LCAibWFpbC1yZXBseSJdLCAiZjNlNSIsICJNMjA0LjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCAxMTIgMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtOTYgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45eiJdCiAgICB9OwogICAgZmFNYWlsUmVwbHkgPSBmYVJlcGx5OwogICAgZmFTdW5QbGFudFdpbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VuLXBsYW50LXdpbHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU3YSIsICJNMTYwIDBjLTUuNSAwLTEwLjYgMi44LTEzLjUgNy40bC0xLjEgMi4xLTI0LjggNTUuNC01Ni43LTIxLjdjLTUuOS0yLjItMTIuNS0uOC0xNyAzLjdTNDEgNTggNDMuMiA2My45bDIxLjcgNTYuNy01NS40IDI0LjhDMy43IDE0OCAwIDE1My43IDAgMTYwczMuNyAxMiA5LjUgMTQuNmw1NS40IDI0LjgtMjEuNyA1Ni43Yy0yLjIgNS45LS44IDEyLjUgMy43IDE3czExLjEgNS45IDE3IDMuN2w1Ni43LTIxLjcgMjQuOCA1NS40YzIuNiA1LjggOC4zIDkuNSAxNC42IDkuNXMxMi0zLjcgMTQuNi05LjVsMjQuOC01NS40IDU2LjggMjEuN2M1LjkgMi4yIDEyLjUgLjggMTctMy43czUuOS0xMS4xIDMuNy0xN2wtMjEuNy01Ni43IDU1LjQtMjQuOGM1LjgtMi42IDkuNS04LjMgOS41LTE0LjZzLTMuNy0xMi05LjUtMTQuNmwtNTUuNC0yNC44IDIxLjctNTYuNyAuNy0yLjJjMS4yLTUuMy0uNC0xMC45LTQuMy0xNC44cy05LjUtNS41LTE0LjgtNC4zbC0yLjIgLjctNTYuOCAyMS43LTI0LjgtNTUuNEMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgOTZhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTM3NiAxNmwwIDUzLjRjLTE0LjggNy43LTI0IDIzLjEtMjQgNDQuNiAwIDE2LjggMTYgNDQgMzcuNCA2Ny4yIDUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwIDIxLjQtMjMuMyAzNy40LTUwLjYgMzcuNC02Ny4yIDAtMjEuNS05LjItMzctMjQtNDQuNmwwLTUzLjRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCAyMi43Yy05LjgtNC4zLTIwLjYtNi43LTMyLTYuNy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIxLjRjLTE0LjggNy42LTI0IDIzLjEtMjQgNDQuNiAwIDE2LjggMTYgNDQgMzcuNCA2Ny4yIDUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwIDIxLjQtMjMuMyAzNy40LTUwLjYgMzcuNC02Ny4yIDAtMjEuNS05LjItMzctMjQtNDQuNmwwLTIxLjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3Ni00MjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTA0IDAgMC0yNzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhQmFjdGVyaXVtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY3Rlcml1bSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDVhIiwgIk00MDggMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMzYwIDIuNyAzNjAgMTZsMCAyMy40Yy0xMy45IDUuMy0yNi45IDEzLjUtMzguMiAyNC41TDMwNSA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjgtMzAuMSAzMC4xLTE2LjgtMTYuOGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjhjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUwxNzcgMTc1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOC0zMC4xIDMwLjEtMTYuOC0xNi44Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOGMtMTEgMTEuMy0xOS4yIDI0LjMtMjQuNSAzOC4yTDQ4IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNi4zIDBjMS4zIDE4LjMgNy4xIDM2LjQgMTcuNCA1Mi40TDcxIDQzOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEwLjYtMTAuNmMxNiAxMC4zIDM0LjEgMTYuMSA1Mi40IDE3LjRsMCAxNi4zYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMy40YzEzLjktNS4zIDI2LjktMTMuNSAzOC4yLTI0LjVMMjcxIDQ2NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOCAzMC4xLTMwLjEgMTYuOCAxNi44YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44YzEwLTEwIDIwLTIwIDMwLjEtMzAuMUwzOTkgMzM3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44IDMwLjEtMzAuMSAxNi44IDE2LjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjhjMTEtMTEuMyAxOS4yLTI0LjMgMjQuNS0zOC4ybDIzLjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYuMyAwYy0xLjMtMTguMy03LjEtMzYuNC0xNy40LTUyLjRMNTA1IDczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDYwLjQgNDkuN2MtMTYtMTAuMy0zNC4xLTE2LjEtNTIuNC0xNy40TDQwOCAxNnpNMTYwIDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0yNzIgMjQwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUmVjb3JkVmlueWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjb3JkLXZpbnlsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4ZDkiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMCAyNDBhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTExMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUZsb3BweURpc2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsb3BweS1kaXNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsICJzYXZlIl0sICJmMGM3IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQyLjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzUyIDUwLjdDMzQwIDM4LjcgMzIzLjcgMzIgMzA2LjcgMzJMNjQgMzJ6bTMyIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yMjQgMjg4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTYXZlMiA9IGZhRmxvcHB5RGlzazI7CiAgICBmYVRvaWxldHNQb3J0YWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXRzLXBvcnRhYmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODQiLCAiTTY0IDBsOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTIyNCAwIDAtMTZDMCAyOC43IDI4LjcgMCA2NCAwek0wIDEyOGwyMjQgMCAwIDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgtMTI4IDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTAxLjMgMCA0ODhMMCAxMjh6TTEyOCAyNDhsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNCAwIDAtOTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTM1MiAwbDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0yMjQgMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0yODggMTI4bDIyNCAwIDAgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjggMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zNjB6TTQxNiAyNDhsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNCAwIDAtOTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYU8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzExMV0sICI0ZiIsICJNMjI0IDk2YTE2MCAxNjAgMCAxIDAgMCAzMjAgMTYwIDE2MCAwIDEgMCAwLTMyMHpNNDQ4IDI1NmEyMjQgMjI0IDAgMSAxIC00NDggMCAyMjQgMjI0IDAgMSAxIDQ0OCAweiJdCiAgICB9OwogICAgZmFQYWxldHRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbGV0dGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MTJdLCAiZjUzZiIsICJNNTEyIDI1NmMwIC45IDAgMS44IDAgMi43LS40IDM2LjUtMzMuNiA2MS4zLTcwLjEgNjEuM0wzNDQgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDMuNCAuNCA2LjcgMSA5LjkgMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOSA2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MiAwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjItMy41IC4xLTcgLjItMTAuNiAuMi0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVVubG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmxvY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzVdLCAiZjA5YyIsICJNMTI4IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0IDMxLjcgMCA1OCAyMyA2My4xIDUzLjMgMi45IDE3LjQgMTkuNCAyOS4yIDM2LjkgMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi45QzMwOC4xIDE0LjEgMjU1LjUtMzIgMTkyLTMyIDEyMS4zLTMyIDY0IDI1LjMgNjQgOTZsMCA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE5MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYUVhckxpc3RlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXItbGlzdGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtcyJdLCAiZjJhMiIsICJNMzc5LjYgLjNjLTguOSAxLjItMTcuMiA2LjItMjIuNCAxNC4xLTYuOCAxMC40LTcgMjQuMS0uNCAzNC42IDUuNiA4LjkgMTUuNSAxMi43IDIzLjggMTguNSA3LjUgNS4yIDE3LjYgMTMuMiAyNy43IDI0LjIgMjAgMjEuNyAzOS41IDU0LjMgMzkuNSAxMDAuMyAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNjYtMjguNS0xMTMuNC01Ni41LTE0My43LTEzLjktMTUuMS0yNy44LTI2LjEtMzguMy0zMy4zLTExLTcuNi0yMy41LTE2LjYtMzcuNi0xNC43ek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnpNMCA0ODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYwLTk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNODYuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6TTI0MCAyMDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMgPSBmYUVhckxpc3RlbjsKICAgIGZhQ29kZVB1bGxSZXF1ZXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtcHVsbC1yZXF1ZXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxM2MiLCAiTTMyOCAyNGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTMjkzLjkgLjIgMjg3IDdMMjMxIDYzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NiA1NmM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyOCAxNDUuNyAzMjggMTM2bDAtMjQgMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIxNC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM0w0NDggMTQ0YzAtNTMtNDMtOTYtOTYtOTZsLTI0IDAgMC0yNHpNNzIgODBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNTYgNzMuM2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zIDAtNDQuMi0zNS44LTgwLTgwLTgwUzE2IDM1LjggMTYgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zYy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTIwNS4zek03MiA0MzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMzQ0LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhS2V5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtleSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI3M10sICJmMDg0IiwgIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdCiAgICB9OwogICAgZmFTa3VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJza3VsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODEyOF0sICJmNTRjIiwgIk00MTYgNDI3LjRjNTguNS00NCA5Ni0xMTEuNiA5Ni0xODcuNCAwLTEzMi41LTExNC42LTI0MC0yNTYtMjQwUzAgMTA3LjUgMCAyNDBjMCA3NS44IDM3LjUgMTQzLjQgOTYgMTg3LjRMOTYgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgNjQgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzYuNnpNOTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMjU2LTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODk2LCAibWFycy1zdHJva2UtdiJdLCAiZjIyYSIsICJNMTkyIDI1NmExMTIgMTEyIDAgMSAwIDAgMjI0IDExMiAxMTIgMCAxIDAgMC0yMjR6TTE2IDM2OGMwLTg2LjMgNjIuMS0xNTguMSAxNDQuMS0xNzMuMS0uMS0uOS0uMS0xLjktLjEtMi45bDAtMTYtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjEuNC0yOCAyMi40Yy0xMy44IDExLTMzLjkgOC44LTQ1LTVzLTguOC0zMy45IDUtNDVsODAtNjRjMTEuNy05LjMgMjguMy05LjMgNDAgMGw4MCA2NGMxMy44IDExIDE2IDMxLjIgNSA0NXMtMzEuMiAxNi00NSA1bC0yOC0yMi40IDAgNjEuNCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxIDAgMS45LS4xIDIuOSA4MiAxNSAxNDQuMSA4Ni44IDE0NC4xIDE3My4xIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzE2IDQ2NS4yIDE2IDM2OHoiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVYgPSBmYU1hcnNTdHJva2VVcDsKICAgIGZhRmlyZUZsYW1lU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZmxhbWUtc2ltcGxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImJ1cm4iXSwgImY0NmEiLCAiTTM3Mi41IDI1Ni41bC0uNy0xLjlDMzM3LjggMTYwLjggMjgyIDc2LjUgMjA5LjEgOC41bC0zLjMtM0MyMDIuMSAyIDE5Ny4xIDAgMTkyIDBzLTEwLjEgMi0xMy44IDUuNWwtMy4zIDNDMTAyIDc2LjUgNDYuMiAxNjAuOCAxMi4yIDI1NC42bC0uNyAxLjlDMy45IDI3Ny4zIDAgMjk5LjQgMCAzMjEuNiAwIDQyNi43IDg2LjggNTEyIDE5MiA1MTJzMTkyLTg1LjMgMTkyLTE5MC40YzAtMjIuMi0zLjktNDQuMi0xMS41LTY1LjF6bS05MC44IDQ5LjVjNC4xIDkuMyA2LjIgMTkuNCA2LjIgMjkuNSAwIDUzLTQzIDk2LjUtOTYgOTYuNXMtOTYtNDMuNS05Ni05Ni41YzAtMTAuMSAyLjEtMjAuMyA2LjItMjkuNWwxLjktNC4zYzE1LjgtMzUuNCAzNy45LTY3LjcgNjUuMy05NS4xbDguOS04LjljMy42LTMuNiA4LjUtNS42IDEzLjYtNS42czEwIDIgMTMuNiA1LjZsOC45IDguOWMyNy40IDI3LjQgNDkuNiA1OS43IDY1LjMgOTUuMWwxLjkgNC4zeiJdCiAgICB9OwogICAgZmFCdXJuID0gZmFGaXJlRmxhbWVTaW1wbGU7CiAgICBmYVRyZWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzc5NF0sICJmMWJiIiwgIk0yMjQtMzJjNyAwIDEzLjcgMy4xIDE4LjMgOC41bDEzNiAxNjBjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlMzNjkuNCAxNzYgMzYwIDE3NmwtMjQuOSAwIDc1LjIgODguNWM2LjEgNy4xIDcuNCAxNy4xIDMuNSAyNS42UzQwMS40IDMwNCAzOTIgMzA0bC0zOC41IDAgODguOCAxMDQuNWM2LjEgNy4xIDcuNCAxNy4xIDMuNSAyNS42UzQzMy40IDQ0OCA0MjQgNDQ4bC0xNjggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtMTY4IDBjLTkuNCAwLTE3LjktNS40LTIxLjgtMTMuOXMtMi42LTE4LjUgMy41LTI1LjZMOTQuNSAzMDQgNTYgMzA0Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDExMi45IDE3NiA4OCAxNzZjLTkuNCAwLTE3LjktNS40LTIxLjgtMTMuOXMtMi42LTE4LjUgMy41LTI1LjZsMTM2LTE2MEMyMTAuMy0yOC45IDIxNy0zMiAyMjQtMzJ6Il0KICAgIH07CiAgICBmYVNtb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic21vZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzVmIiwgIk0xNzYgMjg4Qzk2LjUgMjg4IDMyIDIyMy41IDMyIDE0NFM5Ni41IDAgMTc2IDBjMjcuMiAwIDUyLjYgNy41IDc0LjMgMjAuNiAyMC4xLTEzIDQ0LTIwLjYgNjkuNy0yMC42IDQ3LjQgMCA4OC43IDI1LjcgMTEwLjkgNjRsMS4xIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCA2MC4zLTQ3LjYgMTA5LjQtMTA3LjIgMTExLjktMjIuNiAyMC01Mi4zIDMyLjEtODQuOCAzMi4xLTMyLjUgMC02Mi4xLTEyLjEtODQuNy0zMkwxNzYgMjg4ek01MTIgMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0TDI0IDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHpNODggNDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTE3NiAwbDI4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTE1XSwgIjUzIiwgIk0wIDE1Ny41QzAgODguMiA1Ni4yIDMyIDEyNS41IDMyTDI3MiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwxMjUuNSA5NmMtMzQgMC02MS41IDI3LjUtNjEuNSA2MS41IDAgMzEgMjMuMSA1Ny4yIDUzLjkgNjFMMjEwLjEgMjMwQzI3Mi45IDIzNy45IDMyMCAyOTEuMiAzMjAgMzU0LjUgMzIwIDQyMy44IDI2My44IDQ4MCAxOTQuNSA0ODBMNDggNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE0Ni41IDBjMzQgMCA2MS41LTI3LjUgNjEuNS02MS41IDAtMzEtMjMuMS01Ny4yLTUzLjktNjFMMTA5LjkgMjgyQzQ3LjEgMjc0LjEgMCAyMjAuOCAwIDE1Ny41eiJdCiAgICB9OwogICAgZmFKZWRpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImplZGkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjY2OSIsICJNMjQ2IDMxNS43bC0yMS4yLTMxLjljLTIuMS0zLjItMS43LTcuNCAxLTEwLjFzNi45LTMuMSAxMC4xLTFsMjkuNSAxOS43YzIuMSAxLjQgNC45LS4xIDUtMi42TDI3OS43IDhjLjEtNC41IDMuOC04IDguMy04czguMSAzLjUgOC4zIDhsOS40IDI4MS45Yy4xIDIuNSAyLjkgMy45IDUgMi42bDI5LjUtMTkuN2MzLjItMi4xIDcuNC0xLjcgMTAuMSAxczMuMSA2LjkgMSAxMC4xTDMzMCAzMTUuN2MtMS4zIDEuOS0uMiA0LjUgMiA0LjlsMzcuNiA3LjVjMy43IC43IDYuNCA0IDYuNCA3LjhzLTIuNyA3LjEtNi40IDcuOEwzMzIgMzUxLjRjLTIuMiAuNC0zLjMgMy0yIDQuOWwyMS4yIDMxLjljMi4xIDMuMiAxLjcgNy40LTEgMTAuMXMtNi45IDMuMS0xMC4xIDFsLTI2LjMtMTcuNmMtMi4yLTEuNC01LjEgLjItNSAyLjhsMi4xIDYxLjVjNTkuOC0xMC44IDEwNS4xLTYzLjEgMTA1LjEtMTI2IDAtMzctMTUuNy03MC40LTQwLjgtOTMuNy03LTYuNS02LjUtMTguNiAxLTI0LjQgMzQtMjYuMyA1NS44LTY3LjUgNTUuOC0xMTMuOSAwLTE2LjgtMi45LTMzLTguMi00OC00LjYtMTMgMTAuMi0zMCAyMS40LTIyIDUzLjUgMzggOTIuNyA5NC44IDEwNy44IDE2MC43IC41IDIuMS0uMiA0LjMtMS43IDUuOWwtMjguNCAyOC40Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlsMjYgMGMzLjQgMCA2LjIgMi42IDYuMyA2IC4xIDMuMyAuMiA2LjYgLjIgMTAgMCAxNy41LTEuNyAzNC43LTQuOCA1MS4zLS4yIDEuMi0uOSAyLjQtMS43IDMuM2wtNDYuNSA0Ni41Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlsMTQuNiAwYzQuNiAwIDcuNyA0LjggNS43IDktNDQuNSA4OS41LTEzNi45IDE1MS0yNDMuNyAxNTFTODguOCA0NTAuNSA0NC4zIDM2MWMtMi4xLTQuMiAxLTkgNS43LTlsMTQuNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjIuNiAyOTQuNmMtLjktLjktMS41LTItMS43LTMuMy0zLjItMTYuNi00LjgtMzMuOC00LjgtNTEuMyAwLTMuMyAuMS02LjcgLjItMTAgLjEtMy40IDIuOS02IDYuMy02bDI2IDBjNS43IDAgOC42LTYuOSA0LjUtMTAuOUwyNC42IDE4NC42Yy0xLjUtMS41LTIuMi0zLjgtMS43LTUuOSAxNS4yLTY2IDU0LjMtMTIyLjggMTA3LjgtMTYwLjcgMTEuMy04IDI2IDguOSAyMS40IDIyLTUuMyAxNS04LjIgMzEuMi04LjIgNDggMCA0Ni4zIDIxLjkgODcuNSA1NS44IDExMy45IDcuNSA1LjggOCAxNy45IDEgMjQuNC0yNS4xIDIzLjQtNDAuOCA1Ni43LTQwLjggOTMuNyAwIDYyLjkgNDUuNCAxMTUuMiAxMDUuMSAxMjZsMi4xLTYxLjVjLjEtMi42LTIuOC00LjItNS0yLjhsLTI2LjMgMTcuNmMtMy4yIDIuMS03LjQgMS43LTEwLjEtMXMtMy4xLTYuOS0xLTEwLjFMMjQ2IDM1Ni4zYzEuMy0xLjkgLjItNC41LTItNC45bC0zNy42LTcuNWMtMy43LS43LTYuNC00LTYuNC03LjhzMi43LTcuMSA2LjQtNy44bDM3LjYtNy41YzIuMi0uNCAzLjMtMyAyLTQuOXoiXQogICAgfTsKICAgIGZhUGVyc29uSGlraW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oaWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaGlraW5nIl0sICJmNmVjIiwgIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTEyOCAxNzMuNmMwLTM0IDI3LjYtNjEuNiA2MS42LTYxLjYgMjAuMyAwIDM5LjcgOC4xIDU0IDIyLjRsNDguMiA0OC4yYzYgNiAxNC4xIDkuNCAyMi42IDkuNGwzNy41IDBjNS44IDAgMTEuMyAxLjYgMTYgNC4zbDAtNzYuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjY4LjNjLTQuNyAyLjctMTAuMiA0LjMtMTYgNC4zbC0zNy41IDBjLTI1LjUgMC00OS45LTEwLjEtNjcuOS0yOC4xbC02LjYtNi42IDAgMTA5LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC0xMDF6bS00LjggMjAzLjdjMi4zIDIuMyA0LjcgNC40IDcuMSA2LjVsNDQuOSAzOC41Yy0zLjYgOC40LTguNSAxNi4zLTE0LjQgMjMuNEw4OC42IDUzMi41Yy0xMS4zIDEzLjYtMzEuNSAxNS40LTQ1LjEgNC4xcy0xNS40LTMxLjUtNC4xLTQ1LjFsNzIuMy04Ni43YzIuNi0zLjEgNC41LTYuNiA1LjgtMTAuNGw1LjctMTcuMXpNMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjQgMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6Il0KICAgIH07CiAgICBmYUhpa2luZyA9IGZhUGVyc29uSGlraW5nOwogICAgZmFBcnJvd3NVcFRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtdG8tbGluZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMzIgMHptODYuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDY0IDIzNy4zIDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQyLjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHptMjU2IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il0KICAgIH07CiAgICBmYU1hcnNEb3VibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1kb3VibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODkxXSwgImYyMjciLCAiTTI4OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctOTUgOTVjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMwIDQwMS4yIDAgMzA0IDc4LjggMTI4IDE3NiAxMjhjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw5NS05NS01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNzYgNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHptMTYwIDY0Yy02LjggMC0xMy40LS40LTIwLTEuMSAyMy42LTE4LjkgNDMuMy00Mi41IDU3LjYtNjkuNCA0My4zLTE1LjUgNzQuNC01Ni45IDc0LjQtMTA1LjUgMC0yNS4yLTguMy00OC41LTIyLjQtNjcuMiA3LjEgMi4xIDE0LjYgMy4yIDIyLjQgMy4yIDE3IDAgMzIuNy01LjMgNDUuNy0xNC4zIDExLjcgMjMuNiAxOC4zIDUwLjIgMTguMyA3OC4zIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2ek01MjggMTU3LjNMNTI4IDMyYzAtMTEuNC0yLjQtMjIuMi02LjctMzJMNjA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFUaGVybW9tZXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aGVybW9tZXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkxIiwgIk05NiAzODIuMWwwLTg4LjhjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmwyMS43LTIxLjcgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA3LjgtNy44YzE5LjQtMTkuNCA0NS42LTMwLjIgNzMtMzAuMiA1NyAwIDEwMy4yIDQ2LjIgMTAzLjIgMTAzLjIgMCAyNy40LTEwLjkgNTMuNi0zMC4yIDczTDI1OC4zIDM5OS42Yy0xMC41IDEwLjUtMjQuNyAxNi40LTM5LjYgMTYuNGwtODguOCAwLTg5IDg5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMFMtMi4zIDQ4MC40IDcgNDcxbDg5LTg5eiJdCiAgICB9OwogICAgZmFQYWludGJydXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhaW50YnJ1c2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzOTYsICJwYWludC1icnVzaCJdLCAiZjFmYyIsICJNNDgwLjUgMTAuM0wyNTkuMSAxNThjLTI5LjEgMTkuNC00Ny42IDUwLjktNTAuNiA4NS4zIDYyLjMgMTIuOCAxMTEuNCA2MS45IDEyNC4zIDEyNC4zIDM0LjUtMyA2NS45LTIxLjUgODUuMy01MC42TDU2NS43IDk1LjVjNi43LTEwLjEgMTAuMy0yMS45IDEwLjMtMzQuMSAwLTMzLjktMjcuNS02MS40LTYxLjQtNjEuNC0xMi4xIDAtMjQgMy42LTM0LjEgMTAuM3pNMjg4IDQwMGMwLTYxLjktNTAuMS0xMTItMTEyLTExMlM2NCAzMzguMSA2NCA0MDBjMCAzLjkgLjIgNy44IC42IDExLjYgMS44IDE3LjUtMTAuMiAzNi40LTI3LjggMzYuNEwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTQ0IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJ6Il0KICAgIH07CiAgICBmYVBhaW50QnJ1c2ggPSBmYVBhaW50YnJ1c2g7CiAgICBmYU5ldXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXV0ZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5OTA2XSwgImYyMmMiLCAiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMSAwLTEuOS0uMS0yLjl6Il0KICAgIH07CiAgICBmYVNxdWFyZVBob25lRmxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGhvbmUtZmxpcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaG9uZS1zcXVhcmUtYWx0Il0sICJmODdiIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMzIgOTYuN2wyLjggLjhjMzIuMyA4LjggNTkuOSA0MC4xIDUxLjggNzguMi0xOC41IDg3LjUtODcuNCAxNTYuMy0xNzQuOSAxNzQuOS0zOC4xIDguMS02OS40LTE5LjUtNzguMi01MS44bC0uOC0yLjhjLTIuNy05LjggMi40LTIwLjEgMTEuOC0yNGw0OC43LTIwLjNjOC4zLTMuNCAxNy44LTEuMSAyMy41IDUuOWwxOS4zIDIzLjZjMzUuMS0xNy40IDYzLjQtNDYuNiA3OS42LTgyLjRsLTIyLjEtMThjLTYuOS01LjctOS4zLTE1LjItNS45LTIzLjVsMjAuMy00OC43YzMuOS05LjQgMTQuMi0xNC40IDI0LTExLjh6Il0KICAgIH07CiAgICBmYVBob25lU3F1YXJlQWx0ID0gZmFTcXVhcmVQaG9uZUZsaXA7CiAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MSwgImdyaW4tdG9uZ3VlLXNxdWludCJdLCAiZjU4YSIsICJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTEyNS44LTkxLjdjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjFzMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zem0yNjMuNi0yMS4xYzQuNSA2LjggMy4xIDE1LjktMy4xIDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXpNMzIwIDQ0OGwwLTQ1LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCA0NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVTcXVpbnQyID0gZmFGYWNlR3JpblRvbmd1ZVNxdWludDI7CiAgICBmYUNvbW1lbnREb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY1MSIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6bTQtMzUyYzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Yy0yNS4zLTQuMi00My45LTI2LjEtNDMuOS01MS44IDAtMjguOCAyMy4yLTUyLjIgNTItNTIuNWwwLTRjMC0xMSA5LTIwIDIwLTIweiJdCiAgICB9OwogICAgZmFIaXBwbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaXBwbyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQzNV0sICJmNmVkIiwgIk00MDcgNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTcuMiAxNy4yYzEuOS0uMSAzLjktLjIgNS44LS4ybDMyIDBjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMSAwIDEwLjIgNy40IDE4LjggMTYuNyAyMyAyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzMgMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYtNjQgMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTcuNmMtMTEuOC0yLjQtMjIuNy03LjQtMzItMTQuNC0xLjUtMS4xLTIuOS0yLjMtNC4zLTMuNS0xNy0xNC43LTI3LjctMzYuNC0yNy43LTYwLjUgMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA0NC43IDI2LjIgODMuMiA2NCAxMDEuMmwwIDEwLjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc2Yy0xOS44IDcuNy00MS40IDEyLTY0IDEycy00NC4yLTQuMy02NC0xMmwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExOC45LTE4LjEgNDAuN2MtNS40IDEyLjEtMTkuNiAxNy42LTMxLjcgMTIuMlMtMy4zIDM2Mi40IDIuMSAzNTAuM0wyNCAzMDAuOWM1LjMtMTEuOSA4LTI0LjcgOC0zNy43IDAtMTA3LjUgODUuMi0xOTUuMiAxOTEuOC0xOTkuMWwuMi0uMSA2NCAwYzQxLjcgMCA4My40IDEyLjEgMTE3LjIgMjUuNyAxLjctMS44IDMuNS0zLjYgNS4zLTUuMkw0MDcgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em03MyAxODVhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptODggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek00ODAgMTQ0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhQm93bEZvb2QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bC1mb29kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzYiLCAiTTAgMTc2YzAtMzUuMyAyOC43LTY0IDY0LTY0IC41IDAgMS4xIDAgMS42IDAgNy40LTM2LjUgMzkuNy02NCA3OC40LTY0IDE1IDAgMjkgNC4xIDQwLjkgMTEuMiAxMy4zLTI1LjcgNDAuMS00My4yIDcxLjEtNDMuMnM1Ny44IDE3LjYgNzEuMSA0My4yYzEyLTcuMSAyNi0xMS4yIDQwLjktMTEuMiAzOC43IDAgNzEgMjcuNSA3OC40IDY0IC41IDAgMS4xIDAgMS42IDAgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAxMS43LTMuMSAyMi42LTguNiAzMkw4LjYgMjA4QzMuMSAxOTguNiAwIDE4Ny43IDAgMTc2ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpcnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1NzgiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTE2MCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjR6TTE5MiAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFDbG91ZFN1blJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc3VuLXJhaW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc3ODJdLCAiZjc0MyIsICJNMzAzLjItMy4yYy0xLjEtNS4yLTQuNi05LjUtOS41LTExLjZzLTEwLjUtMS41LTE0LjkgMS40TDIwOCAzMy42IDEzNy4zLTEzLjNjLTQuNC0yLjktMTAtMy41LTE0LjktMS40cy04LjUgNi40LTkuNSAxMS42TDk2IDgwIDEyLjggOTYuOGMtNS4yIDEuMS05LjUgNC42LTExLjYgOS41cy0xLjUgMTAuNSAxLjQgMTQuOUw0OS42IDE5MiAyLjcgMjYyLjdjLTIuOSA0LjQtMy41IDEwLTEuNCAxNC45czYuNCA4LjUgMTEuNiA5LjVMOTYgMzA0IDExMi44IDM4Ny4yYzEuMSA1LjIgNC42IDkuNSA5LjUgMTEuNnMxMC41IDEuNSAxNC45LTEuNGw2Ny4zLTQ0LjZjLTE1LjgtMTkuNC0yNi00My41LTI4LjItNjkuOS0zNy41LTEzLjEtNjQuNC00OC43LTY0LjQtOTAuNyAwLTUzIDQzLTk2IDk2LTk2IDIxLjcgMCA0MS44IDcuMiA1Ny44IDE5LjQgMTUuNS0xNy42IDM2LjktMzAgNjEuMS0zNEwzMjAgODAgMzAzLjItMy4yek0yNDMgMTU5LjFjLTguOC05LjMtMjEuMi0xNS4xLTM1LTE1LjEtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAxNyA4LjkgMzIgMjIuMiA0MC41IDEwLjItMzEuNCAzMi4xLTU3LjQgNjAuNy03M2wuMS0uNHpNMzA0IDM1MmwxOTIgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTMzLjktMjEuMS02Mi45LTUwLjktNzQuNSAxLjktNi44IDIuOS0xNCAyLjktMjEuNSAwLTQ0LjItMzUuOC04MC04MC04MC0zMC44IDAtNTcuNSAxNy40LTcwLjkgNDIuOC05LjMtNi44LTIwLjctMTAuOC0zMy4xLTEwLjgtMzAuOSAwLTU2IDI1LjEtNTYgNTYgMCAzLjIgLjMgNi40IC44IDkuNC0zNi45IDcuMS02NC44IDM5LjYtNjQuOCA3OC42IDAgNDQuMiAzNS44IDgwIDgwIDgwem0tMTkgNDkuMWMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctcmlnaHQiXSwgImYxNzgiLCAiTTU2Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0NjYuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDQzNC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd1JpZ2h0ID0gZmFBcnJvd1JpZ2h0TG9uZzsKICAgIGZhQnVpbGRpbmdVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy11biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGQ5IiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjcyLTExMiAwYy0yMC45IDAtMzkuNSAxMC4xLTUxLjIgMjUuNi04LTYtMTgtOS42LTI4LjgtOS42LTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjQgNjQgMCAwIDQ4LTE0NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjcuNCAzODAuNWM5LTIuMSAxOC4zIDIuMiAyMi41IDEwLjVsMjYuMSA1Mi4yIDAtNDMuM2MwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDEyOGMwIDkuMy02LjQgMTcuMy0xNS40IDE5LjVzLTE4LjMtMi4yLTIyLjUtMTAuNUw0NTIgNDg0LjcgNDUyIDUyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC05LjMgNi40LTE3LjMgMTUuNC0xOS41ek0zMjQgNDAwbDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwbDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVMb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtbG93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NmIiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00NjQgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzUyIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHoiXQogICAgfTsKICAgIGZhRG9vck9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9vci1vcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MmIiLCAiTTI4OCA2NGw2NCAwIDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTk2IDAgMCAwLTE2MCAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDE2ek0xNjAgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUFsaWduTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMzYiLCAiTTI4OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhbWVyYTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIyNTgsICJjYW1lcmEtYWx0Il0sICJmMDMwIiwgIk0xNDkuMSA2NC44TDEzOC43IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNzQuNyAwLTEwLjQtMzEuMkMzNTYuNCA0NS4yIDMzOC4xIDMyIDMxNy40IDMyTDE5NC42IDMyYy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjh6TTI1NiAxOTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUNhbWVyYUFsdDIgPSBmYUNhbWVyYTI7CiAgICBmYVVzZXJzUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yYXlzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OTMiLCAiTTMxLTMzQzIxLjctMjMuNiAyMS43LTguNCAzMSAxTDg3IDU3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw2NS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTYwOS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNTE5IDIzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMNjA5IDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6TTY1IDU0NWw1Ni01NmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDMxIDUxMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwem01NDQgMGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTMyMCAyMDhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTAgMzJjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEybDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLThjMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTIxNi04MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTQ1MS4yIDI2MC40QzQ2OS40IDI4Ni4zIDQ4MCAzMTcuOSA0ODAgMzUybDAgOGMwIDguNC0xLjQgMTYuNS00LjEgMjRsNzguOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTMtNDMtOTYtOTYtOTYtMTAgMC0xOS43IDEuNS0yOC44IDQuNHptLTI2Mi40IDBjLTkuMS0yLjktMTguOC00LjQtMjguOC00LjQtNTMgMC05NiA0My05NiA5NmwwIDEwLjdjMCAxMS44IDkuNiAyMS4zIDIxLjMgMjEuM2w3OC44IDBjLTIuNy03LjUtNC4xLTE1LjYtNC4xLTI0bDAtOGMwLTM0LjEgMTAuNi02NS43IDI4LjgtOTEuNnpNMjE2IDE2MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6Il0KICAgIH07CiAgICBmYVJhaW5ib3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFpbmJvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzc1Ml0sICJmNzViIiwgIk0zMjAgOTZDMTc4LjYgOTYgNjQgMjEwLjYgNjQgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0MzMuNyAwIDQxNmwwLTY0QzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyUzY0MCAxNzUuMyA2NDAgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NEM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDExMmMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHpNMjg4IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVNpdGVtYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2l0ZW1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGU4IiwgIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04IDAgMCA2NCAxMjAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjAgMCAwIDgwIDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTgwLTEyMCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMzkuOCAzMi4yLTcyIDcyLTcybDEyMCAwIDAtNjQtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblN0YXJzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3RhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsICJncmluLXN0YXJzIl0sICJmNTg3IiwgIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTYgMC0yNC40LTMuNC00OC4xLTkuOC03MC41IDE4LjYtMzYuMS0yLjctODMuNi00Ni43LTkwLTQ2LjktNTguMy0xMTguOS05NS41LTE5OS41LTk1LjVTMTAzLjQgMzcuMyA1Ni41IDk1LjVjLTQ0IDYuNC02NS4zIDUzLjktNDYuNyA5MC02LjQgMjIuNC05LjggNDYtOS44IDcwLjUgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6bS0zMS42LTIzMWM1LjMtMTAuNyAyMC41LTEwLjcgMjUuOCAwbDIwLjkgNDIuNCA0Ni43IDYuOGMxMS44IDEuNyAxNi41IDE2LjIgOCAyNC41bC0zMy44IDMzIDggNDYuNmMyIDExLjctMTAuMyAyMC43LTIwLjkgMTUuMmwtNDEuOC0yMi00MS44IDIyYy0xMC41IDUuNS0yMi45LTMuNC0yMC45LTE1LjJsOC00Ni42LTMzLjgtMzNjLTguNS04LjMtMy44LTIyLjggOC0yNC41bDQ2LjctNi44IDIwLjktNDIuNHptLTE5OC4yIDBsMjAuOSA0Mi40IDQ2LjcgNi44YzExLjggMS43IDE2LjUgMTYuMiA4IDI0LjVsLTMzLjggMzMgOCA0Ni42YzIgMTEuNy0xMC4zIDIwLjctMjAuOSAxNS4ybC00MS44LTIyLTQxLjggMjJjLTEwLjUgNS41LTIyLjktMy40LTIwLjktMTUuMmw4LTQ2LjYtMzMuOC0zM2MtOC41LTguMy0zLjgtMjIuOCA4LTI0LjVsNDYuNy02LjggMjAuOS00Mi40YzUuMy0xMC43IDIwLjUtMTAuNyAyNS44IDB6Il0KICAgIH07CiAgICBmYUdyaW5TdGFyczIgPSBmYUZhY2VHcmluU3RhcnMyOwogICAgZmFTb3J0VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWFzYyJdLCAiZjBkZSIsICJNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0eiJdCiAgICB9OwogICAgZmFTb3J0QXNjID0gZmFTb3J0VXA7CiAgICBmYUV5ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgImYwNmUiLCAiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNi00Ni44IDQzLjUtNzguMSA5NS40LTkzIDEzMS4xLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNnMxNDUuNS0zNi44IDE5Mi42LTgwLjZjNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjZ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0LTExLjUgMC0yMi4zLTMtMzEuNy04LjQtMSAxMC45LS4xIDIyLjEgMi45IDMzLjIgMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMi4yLTQ1LjctNTUuNS03NC44LTEwMS4xLTcwLjggNS4zIDkuMyA4LjQgMjAuMSA4LjQgMzEuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmV0LWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjBkOSIsICJNNy43IDIzNS44Yy0xMC4zIDEyLjYtOS41IDMxLjEgMi4yIDQyLjhsMTI4IDEyOGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMjU2YzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC0xMjggMTI4LTIuMiAyLjR6Il0KICAgIH07CiAgICBmYUFwcGxlV2hvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUtd2hvbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MjIsIDEyNzgyMywgImFwcGxlLWFsdCJdLCAiZjVkMSIsICJNMjI0IDExMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODBsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYgMHpNMCAyODhjMC03Ni4zIDM1LjctMTYwIDExMi0xNjAgMjcuMyAwIDU5LjcgMTAuMyA4Mi43IDE5LjMgMTguOCA3LjMgMzkuOSA3LjMgNTguNyAwIDIyLjktOC45IDU1LjQtMTkuMyA4Mi43LTE5LjMgNzYuMyAwIDExMiA4My43IDExMiAxNjAgMCAxMjgtODAgMjI0LTE2MCAyMjQtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuMy04LjEtMi44LTE2LjktMi44LTI1IDAtMTMuNCA0LjctMzUgMTEuMy01MS41IDExLjMtODAgMC0xNjAtOTYtMTYwLTIyNHoiXQogICAgfTsKICAgIGZhQXBwbGVBbHQgPSBmYUFwcGxlV2hvbGU7CiAgICBmYVNjcm9sbFRvcmFoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbC10b3JhaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0b3JhaCJdLCAiZjZhMCIsICJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDAgNjguOSAwIDg2LjcgMTMuNCA5My4zIDMybDM4OS41IDBjNi42LTE4LjYgMjQuNC0zMiA0NS4zLTMyIDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4LTIwLjkgMC0zOC43LTEzLjQtNDUuMy0zMkw5My4zIDQ4MGMtNi42IDE4LjYtMjQuNCAzMi00NS4zIDMyLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6TTE3Ny45IDMwMWMtMS4yIDItMS45IDQuMi0xLjkgNi42IDAgNi45IDUuNiAxMi41IDEyLjUgMTIuNWw1Ni45IDAgMzAuNSA0OS4yYzIuNiA0LjIgNy4yIDYuOCAxMi4yIDYuOHM5LjYtMi42IDEyLjItNi44bDMwLjUtNDkuMiA1Ni45IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtMi4zLS42LTQuNi0xLjktNi42bC0yNy44LTQ1IDI3LjgtNDVjMS4yLTIgMS45LTQuMiAxLjktNi42IDAtNi45LTUuNi0xMi41LTEyLjUtMTIuNWwtNTYuOSAwLTMwLjUtNDkuMmMtMi42LTQuMi03LjItNi44LTEyLjItNi44cy05LjYgMi42LTEyLjIgNi44bC0zMC41IDQ5LjItNTYuOSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCAyLjMgLjYgNC42IDEuOSA2LjZsMjcuOCA0NS0yNy44IDQ1eiJdCiAgICB9OwogICAgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7CiAgICBmYUhvdXNlTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTAiLCAiTTUyOCAyMjQuMWM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODB6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTg1IDE3MS44QzQ0MC4yIDE5NSA0MDAgMjQ0LjggNDAwIDMwNGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNMjcyIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5NiAwIDAtODcuM2MwLTE2LjUgNy0zMS41IDE4LjQtNDIuMS04LjctOS0yMC45LTE0LjYtMzQuNC0xNC42bC0zMiAwem0yNTYtNDcuOWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWxlZnQtcmlnaHQtdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGJhIiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhMMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzkwLjYgMzQyLjZsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40LTEzMy41IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDEzMy41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHpNNTc2IDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2eiJdCiAgICB9OwogICAgZmFUcmFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFzaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWY4IiwgIk0xMzYuNyA1LjlMMTI4IDMyIDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMC04LjctMjYuMUMzMDYuOS03LjIgMjk0LjctMTYgMjgwLjktMTZMMTY3LjEtMTZjLTEzLjggMC0yNiA4LjgtMzAuNCAyMS45ek00MTYgMTQ0TDMyIDE0NCA1My4xIDQ2Ny4xQzU0LjcgNDkyLjQgNzUuNyA1MTIgMTAxIDUxMkwzNDcgNTEyYzI1LjMgMCA0Ni4zLTE5LjYgNDcuOS00NC45TDQxNiAxNDR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRUZWFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC10ZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ2LCAic2FkLXRlYXIiXSwgImY1YjQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI3MSA5OGM1LjUtMS4zIDExLjEtMiAxNy0yIDI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwLTEyLjUgMC0yNC42IDEuOS0zNS45IDUuNSA5LjggMTIuNyAxNi41IDI3LjkgMTguOSA0NC42ek0xNzYgMjQwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTkyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE4NS40IDI5Mi44Yy0yLjQtMi45LTUuNy00LjgtOS40LTQuOHMtNyAxLjktOS40IDQuOGMtNi41IDcuOC0xMi42IDE2LjEtMTguMyAyNC42LTkgMTMuNC0yMC4zIDMwLjItMjAuMyA0Ny40IDAgMjguMyAyMS41IDUxLjIgNDggNTEuMnM0OC0yMi45IDQ4LTUxLjJjMC0xNy4yLTExLjItMzQtMjAuMy00Ny40LTUuNy04LjUtMTEuOS0xNi43LTE4LjMtMjQuNnoiXQogICAgfTsKICAgIGZhU2FkVGVhcjIgPSBmYUZhY2VTYWRUZWFyMjsKICAgIGZhRmF4ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZheCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNCwgMTI4NDM5XSwgImYxYWMiLCAiTTE2MCA2NGwwIDgwIDY0IDAgMC04MCAxNDYuNyAwIDQ1LjMgNDUuMyAwIDM0LjcgNjQgMCAwLTM0LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNDE2IDE4LjdDNDA0IDYuNyAzODcuNyAwIDM3MC43IDBMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0ek0zMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDB6bTQ0OCA2NGwtMzIwIDAgMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAyODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zMzYgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzEyIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek00MjQgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNDAwIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFQZXJzb25DaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQxIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFIYW1zYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1zYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjY1IiwgIk0zNC42IDI4OEw4MCAyODhjOC44IDAgMTYtNy4yIDE2LTE2TDk2IDcyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxMzJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xNjRjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE2NGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTEzMmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjAwYzAgOC44IDcuMiAxNiAxNiAxNmw0NS40IDBjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjYgMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFTMTM2LjYgNDg2LjIgOTUuNCA0NDFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zIDAtMTkuMSAxNS41LTM0LjYgMzQuNi0zNC42ek0yNTYgMjg4Yy0zOC40IDAtNzYuOCAzNS44LTkwLjYgNTAuMi0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQyIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1jaGVjayIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDZjIiwgIk0yNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwem0yNi45IDIxMi42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM2wtODUuNiAxMTcuNy0yNi41LTI3LjRjLTkuMi05LjUtMjQuNC05LjgtMzMuOS0uNnMtOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMjg4LjIgMjQ2LjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6TTEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlRnJvbVNxdWFyZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgInNoYXJlLXNxdWFyZSJdLCAiZjE0ZCIsICJNMzg0LjUgMjRsMCA3Mi02NCAwYy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDkzLjQgODIuOCAxMzQuOCAxMDAuNiAxNDIuNiAyLjIgMSA0LjYgMS40IDcuMSAxLjRsMi41IDBjOS44IDAgMTcuOC04IDE3LjgtMTcuOCAwLTguMy01LjktMTUuNS0xMi44LTIwLjMtOC45LTYuMi0xOS4yLTE4LjItMTkuMi00MC41IDAtNDUgMzYuNS04MS41IDgxLjUtODEuNWwzMC41IDAgMCA3MmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsMTM2LTEzNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0MjUuNSA3Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzM4NC41IDE0LjMgMzg0LjUgMjR6bS0yNzIgNzJjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTI1NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDB6Il0KICAgIH07CiAgICBmYVNoYXJlU3F1YXJlMiA9IGZhU2hhcmVGcm9tU3F1YXJlMjsKICAgIGZhUmVjZWlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWNlaXB0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgImY1NDMiLCAiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMi03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42UzM4NCAxNC42IDM4NCAyNGwwIDQ2NGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNmwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMiA3LjctMzEuMiAwbC00MC40LTM0LjYtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4TDAgMjRDMCAxNC42IDUuNSA2LjEgMTQgMi4yek0xMDQgMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHpNODAgMzUyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il0KICAgIH07CiAgICBmYUVxdWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcXVhbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2Mjc2NF0sICIzZCIsICJNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDEyOHptMCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIweiJdCiAgICB9OwogICAgZmFDaGV2cm9uVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDc3IiwgIk0yMDEuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDIyNCAxNzMuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxOTItMTkyeiJdCiAgICB9OwogICAgZmFWaXJ1c1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzUiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg4LjYtODguNmMxLjctMTIuMS0yLTI0LjgtMTEuMy0zNC0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwYy0zMS4yIDMxLjItODQuNSA5LjEtODQuNS0zNSAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtOS4zLTkuMy0yMi0xMy0zNC0xMS4zTDQxLTI0Ljl6TTcyIDIxNmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtMjEuNCAxMi42LTM3LjYgMjkuMS00NS4xbC0yNDAtMjQwQzEwOS42IDIwMy40IDkzLjQgMjE2IDcyIDIxNnoiXQogICAgfTsKICAgIGZhU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjcxNSIsICJNNy0yNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEw1NjkgNTAzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5Qy0yLjMtLjQtMi4zLTE1LjYgNy0yNXoiXQogICAgfTsKICAgIGZhRXhwYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGFuZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDY1IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDMzNC4zIDAgMzUybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2eiJdCiAgICB9OwogICAgZmFOb3RlU3RpY2t5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3RlLXN0aWNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCAic3RpY2t5LW5vdGUiXSwgImYyNDkiLCAiTTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIxMy41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDMyMi43IDQ2MS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ4MHpNMzg5LjUgMzA0TDI5NiAzMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTMuNSAxMTcuNS0xMTcuNXoiXQogICAgfTsKICAgIGZhU3RpY2t5Tm90ZTIgPSBmYU5vdGVTdGlja3kyOwogICAgZmFUYWJsZUNvbHVtbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY29sdW1ucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjb2x1bW5zIl0sICJmMGRiIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgNjRsMCAyNTYgMTI4IDAgMC0yNTYtMTI4IDB6bTMyMCAwbC0xMjggMCAwIDI1NiAxMjggMCAwLTI1NnoiXQogICAgfTsKICAgIGZhQ29sdW1ucyA9IGZhVGFibGVDb2x1bW5zOwogICAgZmFQZXJzb25TaGVsdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zaGVsdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGYiLCAiTTI3MS45IDQuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhDNi4yIDEzNy45IDAgMTQ4LjUgMCAxNjBMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAxNzguNiAyNTYgNjguOSA0NDggMTc4LjYgNDQ4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTEuNS02LjItMjIuMS0xNi4xLTI3LjhsLTIyNC0xMjh6TTI1NiAyMDhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0tOCAxOTJsMTYgMCAwIDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzQuNSAyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zMy4yLTYxLjdDMzI5LjcgMjQ1LjEgMjk0LjQgMjI0IDI1NiAyMjRzLTczLjcgMjEuMS05MS45IDU0LjlsLTMzLjIgNjEuN2MtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMMjAwIDMxMy41IDIwMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg4eiJdCiAgICB9OwogICAgZmFDaXJjbGVOb3RjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbm90Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjZSIsICJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44LTc5LjMgMjMuNi0xMzcuMSA5Ny4xLTEzNy4xIDE4NC4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xLTE2LjktNS0yNi42LTIyLjktMjEuNS0zOS44czIyLjktMjYuNiAzOS44LTIxLjVDNDM0LjkgNDIuMSA1MTIgMTQwIDUxMiAyNTYgNTEyIDM5Ny40IDM5Ny40IDUxMiAyNTYgNTEyUzAgMzk3LjQgMCAyNTZjMC0xMTYgNzcuMS0yMTMuOSAxODIuOS0yNDUuNCAxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41eiJdCiAgICB9OwogICAgZmFXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzczIiwgIk00MTAuNiAxMjQuMWMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bTAgMTQ0YzIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS43LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgMTQ0YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS44LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhRGVsZXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZWxldGUtbGVmdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzkwMDMsICJiYWNrc3BhY2UiXSwgImY1NWEiLCAiTTU3NiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjA1LjMgNjRjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDkuNCAyMzMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42TDE2MCA0MjkuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43TDUxMiA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZ6TTI4NC4xIDE4OC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUJhY2tzcGFjZSA9IGZhRGVsZXRlTGVmdDsKICAgIGZhQnJvb21CYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyb29tLWJhbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicXVpZGRpdGNoIiwgInF1aWRkaXRjaC1icm9vbS1iYWxsIl0sICJmNDU4IiwgIk00OTYgNTQ0YTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwek0xMDYuOCAyNzcuMmMzMC42LTMwLjYgNzMuMS00NS45IDExNS44LTQyLjJMMzQxIDM1My4zYzMuNyA0Mi44LTExLjYgODUuMi00Mi4yIDExNS45LTI3LjQgMjcuNC02NC42IDQyLjgtMTAzLjMgNDIuOEwyMi4xIDUxMmMtMTIuMiAwLTIyLjEtOS45LTIyLjEtMjIuMSAwLTYuMyAyLjctMTIuMyA3LjMtMTYuNUwxMzMuNyAzNTkuN2M0LjItMy43LS40LTEwLjQtNS40LTcuOUw3Ny4yIDM3Ny40Yy02LjEgMy0xMy4yLTEuNC0xMy4yLTguMiAwLTMxLjUgMTIuNS02MS44IDM0LjgtODRsOC04em00MTctMjcwYzEyLjYtMTAuMyAzMS4xLTkuNSA0Mi44IDIuMnMxMi40IDMwLjIgMi4yIDQyLjhsLTIuMiAyLjQtMTkyIDE5MiAzNC44IDM0LjdjNC4yIDQuMiA2LjYgMTAgNi42IDE2IDAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42bC0yOS4xIDAtMTA4LjMtMTA4LjMgMC0yOS4xYzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42IDYgMCAxMS44IDIuNCAxNiA2LjZsMzQuOCAzNC43IDE5Mi0xOTIgMi40LTIuMnoiXQogICAgfTsKICAgIGZhUXVpZGRpdGNoID0gZmFCcm9vbUJhbGw7CiAgICBmYVF1aWRkaXRjaEJyb29tQmFsbCA9IGZhQnJvb21CYWxsOwogICAgZmFKID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImoiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDZdLCAiNGEiLCAiTTI4OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwbDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNodXR0bGVTcGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHV0dGxlLXNwYWNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNwYWNlLXNodXR0bGUiXSwgImYxOTciLCAiTTAgMzY4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTAgMGM0MC42IDAgODAuNC0xMSAxMTUuMi0zMS45bDEzMy41LTgwLjEtOTMuMyAwLTY0LjkgMzguOWMtMTQgOC40LTI4LjkgMTQuNy00NC41IDE5bDAtNjYuNGM5LjctNS42IDE3LjgtMTMuNyAyMy40LTIzLjRsMTk4LjggMGM2Ny4xIDAgMTI3LjgtMjAuNiAxNzAuMy03MC42IDQuNi01LjQgNC42LTEzLjMgMC0xOC44LTQyLjUtNTAuMS0xMDMuMi03MC42LTE3MC4zLTcwLjZsLTE5OC44IDBjLTUuNi05LjctMTMuNy0xNy44LTIzLjQtMjMuNGwwLTY2LjRjMTUuNiA0LjIgMzAuNiAxMC42IDQ0LjUgMTlsNjQuOSAzOC45IDkzLjMgMC0xMzMuNS04MC4xQzE3OC40IDQzIDEzOC42IDMyIDk4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCAzNjh6bTk2IDBsMCA2NC00OCAwIDAtNjQgNDggMHpNOTYgODBsMCA2NC00OCAwIDAtNjQgNDggMHpNNDE2IDIyNGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhU3BhY2VTaHV0dGxlID0gZmFTaHV0dGxlU3BhY2U7CiAgICBmYVlpbllhbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieWluLXlhbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgImY2YWQiLCAiTTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgMzUyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC00NDhjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTYtOTYgNDMtOTYgOTYgNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTIwOV0sICJmMDRkIiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYVRyb3dlbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm93ZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4OSIsICJNNDA3LjkgMTgxLjRMMjc3LjMgMzEyIDM0Mi42IDM3Ny40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlzLTExLjUtMjAuOC03LjktMzIuMmw4MC0yNTZjMy4zLTEwLjcgMTItMTguOSAyMi45LTIxLjVzMjIuNCAuNSAzMC4zIDguNEwyMzIgMjY2LjcgMzYyLjYgMTM2LjFjLTE0LjMtMTQuNi0xNC4yLTM4IC4zLTUyLjVsOTUuNC05NS40YzI2LjktMjYuOSA3MC41LTI2LjkgOTcuNSAwczI2LjkgNzAuNSAwIDk3LjVsLTk1LjQgOTUuNGMtMTQuNSAxNC41LTM3LjkgMTQuNi01Mi41IC4zeiJdCiAgICB9OwogICAgZmFIYW5kQmFja0Zpc3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtYmFjay1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhhbmQtcm9jayJdLCAiZjI1NSIsICJNNy40IDI1My42QzIuNiAyNDUuOSAwIDIzNy4xIDAgMjI4bDAtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDE3LjMgMCAzMi40IDkuMSA0MC45IDIyLjggNC4zLTIyLjEgMjMuOC0zOC44IDQ3LjEtMzguOCAyMy40IDAgNDIuOSAxNi44IDQ3LjEgMzguOSA3LjMtNC40IDE1LjgtNi45IDI0LjktNi45IDIyLjEgMCA0MC44IDE1IDQ2LjMgMzUuNCA1LjUtMi4yIDExLjQtMy40IDE3LjctMy40IDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMzkuNiA3OS4xYy0xMC44IDIxLjctMzMgMzUuNC01Ny4yIDM1LjRMOTYgMzUyYy0xNi41IDAtMzEuOC04LjQtNDAuNi0yMi40bC00OC03NnpNMzIgNDgwbDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFIYW5kUm9jazIgPSBmYUhhbmRCYWNrRmlzdDI7CiAgICBmYVRlbXBlcmF0dXJlSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NjkiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjE2IDk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjEyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il0KICAgIH07CiAgICBmYUdyZWF0ZXJUaGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyZWF0ZXItdGhhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNzY5XSwgIjNlIiwgIk0zNC45IDUwLjZjLTcuNCAxNi0uNCAzNS4xIDE1LjYgNDIuNUw0MDMuNiAyNTYgNTAuNiA0MTljLTE2IDcuNC0yMy4xIDI2LjQtMTUuNiA0Mi41czI2LjQgMjMgNDIuNSAxNS42bDQxNi0xOTJjMTEuMy01LjIgMTguNi0xNi42IDE4LjYtMjkuMXMtNy4zLTIzLjgtMTguNi0yOS4xTDc3LjQgMzVjLTE2LTcuNC0zNS4xLS40LTQyLjUgMTUuNnoiXQogICAgfTsKICAgIGZhQ3J1dGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNydXRjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2Y3IiwgIk0yOTcuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMS40LTEuNC0xNTguNiAxNTguNmMtMTggMTgtNDIuNCAyOC4xLTY3LjkgMjguMWwtNTkgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjQtNjEuNyA2MS43LTkyLjggOTIuOC05My4zIDkzLjMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYtMTYgMCAwIDc3LjMtNzcuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC01OWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOUwyOTguNyA1NiAyOTcuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pNMzQ0IDEwMS4zTDI2MS4zIDE4NCAzMjggMjUwLjcgNDEwLjcgMTY4IDM0NCAxMDEuM3ptLTEyOCAxMjhsLTMwLjYgMzAuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgNTMuNSA1My41IDBjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMMjgyLjcgMjk2IDIxNiAyMjkuM3oiXQogICAgfTsKICAgIGZhU2VwdGFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VwdGFnb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGVwdGFnb24iXSwgImU4MjAiLCAiTTI2Ny40LTMxLjVjMTUuOS01LjUgMzMuNS00LjYgNDguOCAyLjdsMTcyLjQgODMgNi4zIDMuNWMxNC4yIDkgMjQuNSAyMy4zIDI4LjMgMzkuOWw0Mi42IDE4Ni41IDEuMiA3LjJjMS42IDE0LjMtMS43IDI4LjgtOS40IDQxLjFsLTQuMiA1LjktMTE5LjMgMTQ5LjZjLTEyLjEgMTUuMi0zMC42IDI0LjEtNTAgMjQuMWwtMTkxLjMgMGMtMTkuNSAwLTM3LjktOC45LTUwLTI0LjFMMjMuNSAzMzguNGMtMTIuMS0xNS4yLTE2LjctMzUuMi0xMi4zLTU0LjJsNDIuNi0xODYuNSAyLTdjNS42LTE1LjkgMTcuMi0yOSAzMi42LTM2LjRsMTcyLjQtODMgNi43LTIuN3oiXQogICAgfTsKICAgIGZhSGVwdGFnb24gPSBmYVNlcHRhZ29uOwogICAgZmFTdHJlZXRWaWV3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cmVldC12aWV3IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMWQiLCAiTTI1NiAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMTYwbDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMS44IDAtMTEuMSA5OS41Yy0xLjggMTYuMi0xNS41IDI4LjUtMzEuOCAyOC41bC0zOC43IDBjLTE2LjMgMC0zMC0xMi4zLTMxLjgtMjguNWwtMTEuMS05OS41LTEuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MTIuNCA0MDAuMmMtMTYuMS00LjItMzQuOC03LjYtNTUuNC0xMC4ybDUuMy00Ny43YzIyLjcgMi45IDQzLjcgNi43IDYyLjEgMTEuNSAyMi40IDUuOCA0Mi42IDEzLjMgNTcuOCAyMy4zIDE0LjcgOS42IDI5LjggMjQuOSAyOS44IDQ3cy0xNS4xIDM3LjQtMjkuOCA0N2MtMTUuMiA5LjktMzUuNSAxNy41LTU3LjggMjMuMy00NS4xIDExLjctMTA1LjMgMTcuOC0xNjguNCAxNy44cy0xMjMuMy02LjEtMTY4LjQtMTcuOEM2NS4yIDQ4OC40IDQ1IDQ4MC45IDI5LjggNDcxIDE1LjEgNDYxLjQgMCA0NDYuMSAwIDQyNHMxNS4xLTM3LjQgMjkuOC00N2MxNS4yLTkuOSAzNS41LTE3LjUgNTcuOC0yMy4zIDE4LjUtNC44IDM5LjUtOC42IDYyLjEtMTEuNUwxNTUgMzkwYy0yMC42IDIuNi0zOS4zIDYuMS01NS40IDEwLjItNTYuNiAxNC42LTU2LjYgMzIuOSAwIDQ3LjUgMzkuOSAxMC4zIDk1LjggMTYuMiAxNTYuNCAxNi4yczExNi41LTUuOSAxNTYuNC0xNi4yYzU2LjYtMTQuNiA1Ni42LTMyLjkgMC00Ny41eiJdCiAgICB9OwogICAgZmFXYXZlU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhdmUtc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2UiLCAiTTY0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjg4IDk2IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjg4LTk2IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTEyOHoiXQogICAgfTsKICAgIGZhQW5nbGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFs4MjQ5XSwgImYxMDQiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdCiAgICB9OwogICAgZmFTY3Jld2RyaXZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3Jld2RyaXZlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY5MV0sICJmNTRhIiwgIk0zNTIuMSAxNDYuN2wwLTQ5LjZjMC0xMC43IDUuMy0yMC43IDE0LjItMjYuNkw0ODUuMi04LjdjNi4zLTQuMiAxNC44LTMuNCAyMC4yIDJsNDUuNCA0NS41YzUuNCA1LjQgNi4yIDEzLjggMiAyMC4yTDQ3My42IDE3Ny44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJsLTQ5LjYgMC05MC43IDkwLjdjMTUgMzMuMyA4LjkgNzMuOS0xOC41IDEwMS4zTDE2Mi4xIDUxMC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwzNC4xIDQ0OS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUwxNjAuMSAyNTZjMjcuNC0yNy40IDY3LjktMzMuNiAxMDEuMy0xOC41bDkwLjctOTAuN3oiXQogICAgfTsKICAgIGZhVHJhY3RvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFjdG9yIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY4XSwgImY3MjIiLCAiTTE2MCA5NmwwIDk2IDEzMy40IDAtNTcuNi05Ni03NS44IDB6TTk2IDIyM0w5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDcuOCAwYzIyLjUgMCA0My4zIDExLjggNTQuOSAzMS4xbDc3LjQgMTI4LjkgNjQgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDEuNWMwIDE0LjItNi4zIDI3LjgtMTcuMyAzNi45bC0zNSAyOS4yYzI2LjUgMTUuMiA0NC4zIDQzLjcgNDQuMyA3Ni40IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMTQuNCAzLjUtMjggOS42LTQwbC0xMDEuMiAwYy0zIDEzLjQtNy45IDI2LTE0LjQgMzcuNyA3LjcgOS40IDcuMiAyMy40LTEuNiAzMi4ybC0yMi42IDIyLjZjLTguOCA4LjgtMjIuNyA5LjMtMzIuMiAxLjYtOS4zIDUuMi0xOS4zIDkuMy0yOS44IDEyLjMtMS4yIDEyLjEtMTEuNCAyMS42LTIzLjkgMjEuNmwtMzIgMGMtMTIuNCAwLTIyLjctOS41LTIzLjktMjEuNi0xMC41LTMtMjAuNC03LjItMjkuOC0xMi4zLTkuNCA3LjctMjMuNCA3LjItMzIuMi0xLjZMMzUuNSA0NTMuOGMtOC44LTguOC05LjMtMjIuNy0xLjYtMzIuMi01LjItOS4zLTkuMy0xOS4zLTEyLjMtMjkuOC0xMi4xLTEuMi0yMS42LTExLjQtMjEuNi0yMy45bDAtMzJjMC0xMi40IDkuNS0yMi43IDIxLjYtMjMuOSAzLTEwLjUgNy4yLTIwLjQgMTIuMy0yOS44LTcuNy05LjQtNy4yLTIzLjQgMS42LTMyLjJsMjIuNi0yMi42YzguOC04LjggMjIuNy05LjMgMzIuMi0xLjYgMS45LTEgMy43LTIgNS43LTN6bTY0IDY1YTY0IDY0IDAgMSAwIDAgMTI4IDY0IDY0IDAgMSAwIDAtMTI4ek00NDAgNDI0YTQwIDQwIDAgMSAwIDgwIDAgNDAgNDAgMCAxIDAgLTgwIDB6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjYiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFWaWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkzIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMzUyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0zNTIgNjQgMCAwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQ5Ny43IDAgNDgwIDBMMzIgMHpNMTYwIDY0bDAgMTI4LTY0IDAgMC0xMjggNjQgMHptMjU2IDBsMCAxMjgtNjQgMCAwLTEyOCA2NCAweiJdCiAgICB9OwogICAgZmFTdGV0aG9zY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGV0aG9zY29wZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY1OF0sICJmMGYxIiwgIk0zMiA0OEMzMiAyMS41IDUzLjUgMCA4MCAwbDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyMzguMyAwIDI1NiAwbDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDRjMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAxOS4yYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC04NS41Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgODUuNWMwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNjAgNDY1LjIgMTYwIDM2OGwwLTE5LjJDODcgMzM0IDMyIDI2OS40IDMyIDE5MkwzMiA0OHpNNDgwIDIyNGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVBvZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9kY2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmNlIiwgIk0zMzYgMzU5LjhjMzkuMS0zMi4zIDY0LTgxLjEgNjQtMTM1LjggMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0QzQ4IDI3OC43IDcyLjkgMzI3LjUgMTEyIDM1OS44IDExMi40IDM3Ny40IDExNS4yIDQwMC4yIDExOC40IDQyMS42IDQ4IDM4My45IDAgMzA5LjUgMCAyMjQgMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgODUuNi00OCAxNTkuOS0xMTguNSAxOTcuNiAzLjMtMjEuNCA2LTQ0LjIgNi40LTYxLjh6bS0xNC01My40Yy04LjMtMTIuNi0xOS4yLTIxLjYtMzAuNC0yNy44LTIuMS0xLjEtNC4yLTIuMi02LjMtMy4yIDExLjctMTMuOSAxOC44LTMxLjkgMTguOC01MS41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMTkuNiA3LjEgMzcuNiAxOC44IDUxLjUtMi4xIDEtNC4yIDItNi4zIDMuMi0xMS4yIDYuMi0yMi4xIDE1LjItMzAuNCAyNy44LTE4LjgtMjIuMy0zMC4xLTUxLTMwLjEtODIuNCAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4YzAgMzEuNC0xMS4zIDYwLjItMzAuMSA4Mi40ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOCAwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOS01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOCAwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMTI4YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YjciLCAiTTk2IDMyQzc4LjMgMzIgNjQgNDYuMyA2NCA2NFM3OC4zIDk2IDk2IDk2TDExNC43IDk2IDkuNCAyMDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTQxLjMgMTYwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMzJ6TTQwMy44IDcwLjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNMjc5LjcgMTk0LjJhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYyLjItMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6TTE1Ni4yIDMxNy44YTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2MS42LTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNNzAuMSA0MDMuOGEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6Il0KICAgIH07CiAgICBmYUNoZXNzUXVlZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXF1ZWVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgxOV0sICJmNDQ1IiwgIk0yNTYgODBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01LjUgMTg1TDEyOCAzODQgNzEuOCA0NTQuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwzODQgMzg0IDUwNi41IDE4NWMzLjYtNS45IDUuNS0xMi43IDUuNS0xOS42bDAtLjZjMC0yMC4zLTE2LjUtMzYuOC0zNi44LTM2LjgtNy4zIDAtMTQuNCAyLjItMjAuNCA2LjJsLTE2LjkgMTEuM2MtMTIuNyA4LjUtMjkuNiA2LjgtNDAuNC00bC0zNC4xLTM0LjFDMzU2LjEgMTAwLjEgMzQ2LjIgOTYgMzM2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTMwLjEgMzAuMWMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTMwLjEtMzAuMUMxOTYuMSAxMDAuMSAxODYuMiA5NiAxNzYgOTZzLTIwLjEgNC4xLTI3LjMgMTEuM2wtMzQuMSAzNC4xYy0xMC44IDEwLjgtMjcuNyAxMi41LTQwLjQgNEw1Ny4zIDEzNC4yYy02LjEtNC0xMy4yLTYuMi0yMC40LTYuMi0yMC4zIDAtMzYuOCAxNi41LTM2LjggMzYuOGwwIC42YzAgNi45IDEuOSAxMy43IDUuNSAxOS42eiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWIiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxsaXBzaXMtdmVydGljYWwiLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsiZWxsaXBzaXMtdiJdLCAiZjE0MiIsICJNNjQgMTQ0YTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMSAxIDAgMTEyem0wIDIyNGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTExMmMwIDMwLjktMjUuMSA1Ni01NiA1NnMtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2IDU2IDI1LjEgNTYgNTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzViA9IGZhRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZSIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDMiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYXJyb3ctdXAtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzkiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0yMDggNDgwbDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTI4IDMyIDB6TTU2Ni42IDEwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0OTYgNzcuMyA0OTYgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ2LjctMjUuNCAyNS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w4MC04MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhTm90RXF1YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90LWVxdWFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1M2UiLCAiTTM3OC42IDgxLjhjOS44LTE0LjcgNS44LTM0LjYtOC45LTQ0LjRzLTM0LjYtNS44LTQ0LjQgOC45TDI3MC45IDEyOCAzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTk2LjIgMC04NS4zIDEyOC0xMTAuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY4LjIgMC0zMC44IDQ2LjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45TDE3Ny4xIDM4NCA0MTYgMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTYuMiAwIDg1LjMtMTI4IDExMC45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY4LjIgMCAzMC44LTQ2LjJ6Il0KICAgIH07CiAgICBmYVRyYWluVHJhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi10cmFtIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NjUwXSwgImU1YjQiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyMCAwIDAgNjQgNDAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTYwYzAgMzEuMi0xNC45IDU5LTM4IDc2LjVsNjQuMyA3NmM4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LjYtODguMWMtMy42IC40LTcuMyAuNi0xMS4xIC42bC0xMjggMGMtMy44IDAtNy41LS4yLTExLjEtLjZMNDIuMyA1MzUuNWMtOC42IDEwLjEtMjMuNyAxMS40LTMzLjggMi44cy0xMS40LTIzLjctMi44LTMzLjhsNjQuMy03NkM0Ni45IDQxMSAzMiAzODMuMiAzMiAzNTJsMC0xNjBjMC01MyA0My05NiA5Ni05Nmw0MCAwIDAtNjQtMTIwIDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTMuMyAwIDQwTDAgOHpNMTI4IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMHptMzIgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhUGxhbmVEZXBhcnR1cmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtZGVwYXJ0dXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ3XSwgImY1YjAiLCAiTTM3MiAxNDMuOUwxNzIuNyA0MC4yYy04LTQuMS0xNy4zLTQuOC0yNS43LTEuN2wtNDEuMSAxNWMtMTAuMyAzLjctMTMuOCAxNi40LTcuMSAyNUwyMDAuMyAyMDYuNCAxMDAuMSAyNDIuOCA0MCAyMDYuMmMtNi4yLTMuOC0xMy44LTQuNS0yMC43LTIuMUwzIDIxMC4xYy05LjQgMy40LTEzLjQgMTQuNS04LjMgMjMuMWw1My42IDkxLjhjMTUuNiAyNi43IDQ4LjEgMzguNCA3Ny4xIDI3LjhsMTIuOS00LjcgMCAwIDM5OC40LTE0NWMyOS4xLTEwLjYgNDQtNDIuNyAzMy41LTcxLjhzLTQyLjctNDQtNzEuOC0zMy41TDM3MiAxNDMuOXpNMzIuMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUxMiAweiJdCiAgICB9OwogICAgZmFSaWdodFRvQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC10by1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24taW4tYWx0Il0sICJmMmY2IiwgIk0zNDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIwMSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMxNjAgMTAyLjMgMTYwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDM0NSAyNzN6bTcgMTQzYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYVNpZ25JbkFsdCA9IGZhUmlnaHRUb0JyYWNrZXQ7CiAgICBmYVNkQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZC1jYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3YzIiLCAiTTM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxMjUuMyAwQzEwOC4zIDAgOTIgNi43IDgwIDE4LjdMMTguNyA4MEM2LjcgOTIgMCAxMDguMyAwIDEyNS4zTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0xNjAgODhsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGEiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDk2IDQ0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFTaGVrZWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoZWtlbC1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MiwgImlscyIsICJzaGVrZWwiLCAic2hlcWVsIiwgInNoZXFlbC1zaWduIl0sICJmMjBiIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMzIwIDQ4MGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDB6Il0KICAgIH07CiAgICBmYUlscyA9IGZhU2hla2VsU2lnbjsKICAgIGZhU2hla2VsID0gZmFTaGVrZWxTaWduOwogICAgZmFTaGVxZWwgPSBmYVNoZWtlbFNpZ247CiAgICBmYVNoZXFlbFNpZ24gPSBmYVNoZWtlbFNpZ247CiAgICBmYVJhZGlvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhZGlvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjUxXSwgImY4ZDciLCAiTTQ5NC44IDE1YzEyLjctMy43IDIwLTE3LjEgMTYuMy0yOS44UzQ5NC0zNC44IDQ4MS4zLTMxTDUxLjggOTQuOUM0Mi40IDk3LjYgMzMuOSAxMDIuMSAyNi42IDEwOCAxMC41IDExOS43IDAgMTM4LjYgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjE4LjUgOTYgNDk0LjggMTV6TTM2OCAyMDhhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTY0IDI0OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAyNzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmREb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhbGxlcmdpZXMiXSwgImY0NjEiLCAiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4ek0yMDAgMzUyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC01NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS04OCAyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUFsbGVyZ2llcyA9IGZhSGFuZERvdHM7CiAgICBmYUJvb2tTa3VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXNrdWxsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvb2stZGVhZCJdLCAiZjZiNyIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTI3MiAxNjMuMmwwIDEyLjhjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMi44Yy0xOS40LTExLjctMzItMzAuMy0zMi01MS4yIDAtMzUuMyAzNS44LTY0IDgwLTY0czgwIDI4LjcgODAgNjRjMCAyMC45LTEyLjYgMzkuNS0zMiA1MS4yek0yMDggMTEyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptNzQuMiA5NS43YzQuNiAxMC4xIC4xIDIxLjktOS45IDI2LjVsLTQ3LjkgMjEuOCA0Ny45IDIxLjhjMTAuMSA0LjYgMTQuNSAxNi40IDkuOSAyNi41cy0xNi40IDE0LjUtMjYuNSA5LjlMMjI0IDI5NCAxNDQuMyAzMzAuMmMtMTAuMSA0LjYtMjEuOSAuMS0yNi41LTkuOXMtLjEtMjEuOSA5LjktMjYuNWw0Ny45LTIxLjgtNDcuOS0yMS44Yy0xMC4xLTQuNi0xNC41LTE2LjQtOS45LTI2LjVzMTYuNC0xNC41IDI2LjUtOS45TDIyNCAyNTAgMzAzLjcgMjEzLjhjMTAuMS00LjYgMjEuOS0uMSAyNi41IDkuOXoiXQogICAgfTsKICAgIGZhQm9va0RlYWQgPSBmYUJvb2tTa3VsbDsKICAgIGZhVW5sb2NrS2V5aG9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmxvY2sta2V5aG9sZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJ1bmxvY2stYWx0Il0sICJmMTNlIiwgIk0xOTIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjQgMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGwwLTY0YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYzLjUgMCAxMTYuMSA0Ni4xIDEyNi4yIDEwNi43IDIuOSAxNy40LTguOCAzMy45LTI2LjMgMzYuOXMtMzMuOS04LjgtMzYuOS0yNi4zQzI1MCA1NS4xIDIyMy43IDMyIDE5MiAzMnptNDAgMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDB6Il0KICAgIH07CiAgICBmYVVubG9ja0FsdCA9IGZhVW5sb2NrS2V5aG9sZTsKICAgIGZhRmlsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hcnJvdy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLXVwbG9hZCJdLCAiZjU3NCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTIwOSAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC02NCA2NGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgODYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODYuMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFGaWxlVXBsb2FkID0gZmFGaWxlQXJyb3dVcDsKICAgIGZhRmFjZUdyaW5UZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRlYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCAiZ3Jpbi10ZWFycyJdLCAiZjU4OCIsICJNNTU0LjggMjAzLjRsMTYuMyAyLjNDNTQ3LjcgODguNCA0NDQuMiAwIDMyMCAwUzkyLjMgODguNCA2OC45IDIwNS43bDE2LjMtMi4zYzM3LTUuMyA2OC42IDI2LjQgNjMuNCA2My40bC02LjcgNDYuN2MtNC4xIDI5LTIxLjYgNTMuMi00NS44IDY2LjggNDMuNyA3OC41IDEyNy42IDEzMS43IDIyMy44IDEzMS43czE4MC4xLTUzLjEgMjIzLjgtMTMxLjdjLTI0LjEtMTMuNS00MS42LTM3LjgtNDUuOC02Ni44bC02LjctNDYuN2MtNS4zLTM3IDI2LjQtNjguNiA2My40LTYzLjR6TTQ3MC4zIDMyNi45QzQ0Ny45IDM4OC4yIDM4OS4xIDQzMiAzMjAgNDMyUzE5Mi4xIDM4OC4yIDE2OS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAtMjUuNi0xOC44LTQ3LjMtNDQuMS01MC45TDU0OS4xIDI0M2MtMTAuNi0xLjUtMTkuNiA3LjUtMTguMSAxOC4xbDYuNyA0Ni43YzMuNiAyNS4zIDI1LjMgNDQuMSA1MC45IDQ0LjEgMjguNCAwIDUxLjQtMjMgNTEuNC01MS40em0tNjQwIDBDMCAzMjkgMjMgMzUyIDUxLjQgMzUyIDc3IDM1MiA5OC43IDMzMy4yIDEwMi4zIDMwNy45bDYuNy00Ni43YzEuNS0xMC42LTcuNS0xOS42LTE4LjEtMTguMWwtNDYuNyA2LjdDMTguOCAyNTMuMyAwIDI3NSAwIDMwMC42eiJdCiAgICB9OwogICAgZmFHcmluVGVhcnMyID0gZmFGYWNlR3JpblRlYXJzMjsKICAgIGZhUGVuVG9TcXVhcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi10by1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZWRpdCJdLCAiZjA0NCIsICJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzY4IDQ2LjEgNDY1LjkgMTQ0IDQ5MC4zIDExOS42YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzMiAxNzcuOSAzMzQuMSA4MCAxNzIuNCAyNDEuN3pNOTYgNjRDNDMgNjQgMCAxMDcgMCAxNjBMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgNjR6Il0KICAgIH07CiAgICBmYUVkaXQyID0gZmFQZW5Ub1NxdWFyZTI7CiAgICBmYUVhcnRoRXVyb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLWV1cm9wZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJnbG9iZS1ldXJvcGUiXSwgImY3YTIiLCAiTTI1Ni4yIDQ4YzExNC44IC4xIDIwNy44IDkzLjIgMjA3LjggMjA4IDAgMjIuMS0zLjQgNDMuNC05LjggNjMuNC0yIC40LTQuMSAuNi02LjIgLjZsLTIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC01MC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2bC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2cy03LjIgMTYtMTYgMTZsLTI1LjQgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmw3MC4xLTcwLjFjMi4xLTIuMSAzLjMtNSAzLjMtOCAwLTYuMi01LjEtMTEuMy0xMS4zLTExLjNsLTE0LjEgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmwyMy4xLTIzLjFjLjgtLjggMS42LTEuNSAyLjUtMi4yek00MzguNCAzNTYuMWMtMzIuOCA1OS42LTkzLjkgMTAxLjQtMTY1LjIgMTA3LjItLjctMi4zLTEuMS00LjgtMS4xLTcuMyAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjYuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC02Ni43YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyOS4zIDI5LjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDUuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDE2IDE2YzQuMiA0LjIgMTAgNi42IDE2IDYuNiA0LjggMCA5LjMgMS41IDEzIDQuMXpNMjU2IDUxMmwyNi4yLTEuM2MtOC42IC45LTE3LjMgMS4zLTI2LjIgMS4zem0yNi4yLTEuM0M0MTEuMyA0OTcuNiA1MTIgMzg4LjYgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMGwwIDBDMTE0LjYgMCAwIDExNC42IDAgMjU2IDAgMzgzLjUgOTMuMiA0ODkuMyAyMTUuMyA1MDguOCAyMjguNSA1MTAuOSAyNDIuMSA1MTIgMjU2IDUxMnpNMTg3LjMgMTIzLjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhR2xvYmVFdXJvcGUgPSBmYUVhcnRoRXVyb3BlOwogICAgZmFGYWNlR3JpbkJlYW1Td2VhdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0tc3dlYXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg1MTcsICJncmluLWJlYW0tc3dlYXQiXSwgImY1ODMiLCAiTTU0Ni4yLS4xYzE0LjcgMTcuOCAyOS44IDQwLjEgMjkuOCA2NC4xIDAgMzYuNC0yNy42IDY0LTY0IDY0cy02NC0yNy42LTY0LTY0YzAtMjQgMTUuMi00Ni4zIDI5LjgtNjQuMSA4LjgtMTAuNyAxOC41LTIwLjggMjktMzAgMy0yLjYgNy40LTIuNiAxMC40IDAgMTAuNSA5LjEgMjAuMSAxOS4zIDI5IDMwek0yODggMGM0Mi41IDAgODIuNiAxMC40IDExNy44IDI4LjctMy42IDEwLjktNS44IDIyLjctNS44IDM1LjMgMCA2Mi45IDQ5LjEgMTEyIDExMiAxMTIgNi40IDAgMTIuNy0uNSAxOC44LTEuNSA4LjYgMjUuNiAxMy4yIDUzIDEzLjIgODEuNSAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzMyIDM5Ny40IDMyIDI1NiAxNDYuNiAwIDI4OCAwek00MTguNyAzMDguOUMzNzkuNSAzMjEuMSAzMzUuMSAzMjggMjg4IDMyOHMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDIyLjQgNjEuMyA4MS4zIDEwNS4xIDE1MC4zIDEwNS4xczEyNy45LTQzLjggMTUwLjMtMTA1LjFjNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xek0yMDggMTgwYzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHptMTMyIDI4YzAtMTUuNSAxMi41LTI4IDI4LTI4czI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04eiJdCiAgICB9OwogICAgZmFHcmluQmVhbVN3ZWF0MiA9IGZhRmFjZUdyaW5CZWFtU3dlYXQyOwogICAgZmFDaXJjbGVIYWxmU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk2ODAsICJhZGp1c3QiXSwgImYwNDIiLCAiTTQ0OCAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJsMCAzODRjMTA2IDAgMTkyLTg2IDE5Mi0xOTJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTsKICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktdG8tcGVyc29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGMiLCAiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44IDAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOWwxMTEuNCAwYzguOC0uMSAxNS45LTcuMiAxNS45LTE2TDIwMCAxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFsLTEyMi45IDBjLTEuNiA1LjctMi41IDExLjctMi41IDE3LjkgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxLjggMCAzLjUtLjEgNS4yLS40TDUzIDIwOC42QzQwLjEgMjIwLjMgMzIgMjM3LjIgMzIgMjU2em0xOTAuMiA0Mi41YzEuMS0zLjMgMS44LTYuOCAxLjgtMTAuNWwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTMyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZsMCAzMi04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDAgMCAzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMyAxMy41IDguMSAxOC4xbDY0IDU2LjRjNy4xIDYuMiAxNy4xIDcuOCAyNS43IDMuOVM0MDAgNDk3LjggNDAwIDQ4OC40bDAtMzIuNCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtMzJjMC05LjQtNS41LTE4LTE0LjEtMjEuOXMtMTguNi0yLjQtMjUuNyAzLjhsLTY0IDU2Yy01LjIgNC41LTguMiAxMS4xLTguMiAxOHoiXQogICAgfTsKICAgIGZhVGFibGVDZWxsc0NvbHVtbkxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtY29sdW1uLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3OCIsICJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgMzY4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFUcnVja0ZpZWxkVW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZmllbGQtdW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4ZSIsICJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMCA0OGMwIDIxLjEgMTMuNyAzOS4xIDMyLjYgNDUuNS0uNCAzLjQtLjYgNy0uNiAxMC41IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTQ0LjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsLjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yNC43IDAtMS43LTQuMi00My44LTEwNi4zYy0xMi4zLTMwLTQxLjYtNDkuNS03NC00OS41bC00MC40IDBDMzY0LjQgNDQuOSAzNDMuNyAzMiAzMjAgMzJMOTYgMzJ6TTM4NCAyMjRsMC05NiAzMS45IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlsMzUuNCA4Ni4xLTgyLjEgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTI4MCA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yNTYuNiAxMzIuOWwyNy40IDQxIDAtMjkuOWMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgOC44LTUuOCAxNi42LTE0LjIgMTkuMXMtMTcuNS0uNy0yMi40LThsLTI3LjQtNDEgMCAyOS45YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTk2YzAtOC44IDUuOC0xNi42IDE0LjItMTkuMXMxNy41IC43IDIyLjQgOHpNMTMyIDE0NGwwIDY0YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC02NGMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDY0YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il0KICAgIH07CiAgICBmYUNsb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzOSwgImNsb2NrLWZvdXIiXSwgImYwMTciLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDbG9ja0ZvdXIyID0gZmFDbG9jazI7CiAgICBmYUJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIxMl0sICJmMDJkIiwgIk0zODQgNTEyTDk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2QzAgNDMgNDMgMCA5NiAwTDQwMCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM2wwIDY2LjdjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6TTk2IDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwLTY0LTI1NiAwem0zMi0yMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQgNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hXaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtd2luayJdLCAiZjU5YyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGF1Z2hXaW5rMiA9IGZhRmFjZUxhdWdoV2luazI7CiAgICBmYUNsb3VkTWVhdGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtbWVhdGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjczYiIsICJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwyNi45IDBjMy41LTEyLjEgMTAuMS0yMy4zIDE5LjItMzIuNGwxLjQtMS40YzE1LTE1IDM1LjMtMjIuOSA1Ni4xLTIyLjIgMTQuMi0xNS4xIDM0LjItMjMuOSA1NS40LTIzLjlsMiAwYzIxLjEgMCA0MS4xIDguOCA1NS40IDIzLjkgMjAuOC0uNiA0MS4xIDcuMyA1Ni4xIDIyLjJsMS40IDEuNGM5LjIgOS4yIDE1LjcgMjAuNCAxOS4yIDMyLjRsMjYuOSAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE1Ni41IDQyNC4zYzkuNSA2LjMgMTQuMiAxNy43IDExLjkgMjguOC0xLjggOS4yIDEgMTguNyA3LjcgMjUuM2wxLjQgMS40YzYuNiA2LjYgMTYuMSA5LjUgMjUuMyA3LjcgMTEuMS0yLjIgMjIuNSAyLjUgMjguOCAxMS45IDUuMiA3LjggMTQgMTIuNSAyMy4zIDEyLjVsMiAwYzkuNCAwIDE4LjEtNC43IDIzLjMtMTIuNSA2LjMtOS41IDE3LjctMTQuMiAyOC44LTExLjkgOS4yIDEuOCAxOC43LTEgMjUuMy03LjdsMS40LTEuNGM2LjYtNi42IDkuNS0xNi4xIDcuNy0yNS4zLTIuMi0xMS4xIDIuNS0yMi41IDExLjktMjguOCA3LjgtNS4yIDEyLjUtMTQgMTIuNS0yMy4zbDAtMmMwLTkuNC00LjctMTguMS0xMi41LTIzLjMtOS41LTYuMy0xNC4yLTE3LjctMTEuOS0yOC44IDEuOC05LjItMS0xOC43LTcuNy0yNS4zbC0xLjQtMS40Yy02LjYtNi42LTE2LjEtOS41LTI1LjMtNy43LTExLjEgMi4yLTIyLjUtMi41LTI4LjgtMTEuOS01LjItNy44LTE0LTEyLjUtMjMuMy0xMi41bC0yIDBjLTkuNCAwLTE4LjEgNC43LTIzLjMgMTIuNS02LjMgOS41LTE3LjcgMTQuMi0yOC44IDExLjktOS4yLTEuOC0xOC43IDEtMjUuMyA3LjdsLTEuNCAxLjRjLTYuNiA2LjYtOS41IDE2LjEtNy43IDI1LjMgMi4yIDExLjEtMi41IDIyLjUtMTEuOSAyOC44LTcuOCA1LjItMTIuNSAxNC0xMi41IDIzLjNsMCAyYzAgOS40IDQuNyAxOC4xIDEyLjUgMjMuM3pNNDggNDQ4YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDE2IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFDaGFydEFyZWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYXJlYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcmVhLWNoYXJ0Il0sICJmMWZlIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0yNDAgOTZjNi43IDAgMTMuMSAyLjggMTcuNyA3LjhMMzI4LjggMTgxLjMgMzc1IDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0zMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMTJjMC02IDIuMy0xMS44IDYuMy0xNi4ybDg4LTk2YzQuNS01IDExLTcuOCAxNy43LTcuOHoiXQogICAgfTsKICAgIGZhQXJlYUNoYXJ0ID0gZmFDaGFydEFyZWE7CiAgICBmYVJ1cGlhaFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVwaWFoLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIzZCIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yNTYtMzJsODAgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NjEuOSA0NDggNDAwIDQ0OGwtNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA5NiA0OCAweiJdCiAgICB9OwogICAgZmFUZXh0V2lkdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC13aWR0aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM1IiwgIk00MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxMjggMCAwIDE2MC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMTYwIDEyOCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDB6bTc4LjYgNDA2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDIyOS41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMjI5LjUgMCA5LjQtOS40eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2F0ZWxsaXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgImY3YmYiLCAiTTE5OSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDg5LjQgODkuNCA1NS01NWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0OCA0OGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTUgNTUgODkuNCA4OS40YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC05NiA5NmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTg5LjQtODkuNC0xNS41IDE1LjVjMTEuNCAyNC42IDE3LjggNTIgMTcuOCA4MC45IDAgMzEuNy03LjcgNjEuNS0yMS4yIDg3LjgtNC43IDktMTYuNyAxMC4zLTIzLjggMy4xbC05Ni4zLTk2LjMtNjAgNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDYwLTYwLTk2LjMtOTYuM2MtNy4yLTcuMi01LjktMTkuMiAzLjEtMjMuOCAyNi4zLTEzLjYgNTYuMi0yMS4yIDg3LjgtMjEuMiAyOC45IDAgNTYuMyA2LjQgODAuOSAxNy44TDE5Mi40IDIyNi4zIDEwMyAxMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDE5OSA3em0xNyA1MC45bC02Mi4xIDYyLjEgNzIuNCA3Mi40IDYyLjEtNjIuMS03Mi40LTcyLjR6TTM5MiAzNTguMWw2Mi4xLTYyLjEtNzIuNC03Mi40LTYyLjEgNjIuMSA3Mi40IDcyLjR6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbWludXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLW1pbnVzIl0sICJmMDEwIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTEzNiAxODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFTZWFyY2hNaW51cyA9IGZhTWFnbmlmeWluZ0dsYXNzTWludXM7CiAgICBmYVBlb3BsZUdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMzIiwgIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptOTYgMzEyYzAgMjUtMTIuNyA0Ny0zMiA1OS45bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xQzE3Mi43IDM1OSAxNjAgMzM3IDE2MCAzMTJsMC00MGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNDB6TTk2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0xNiAyNDBsMCAzMmMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCA3NS4zYzAgMS4yIDAgMi41IC4xIDMuNy04LjUgNy42LTE5LjcgMTIuMy0zMi4xIDEyLjNsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNTYuNkMxMi45IDM2NC40IDAgMzQzLjcgMCAzMjBsMC0zMmMwLTUzIDQzLTk2IDk2LTk2IDEyLjcgMCAyNC44IDIuNSAzNS45IDYuOS0xMi42IDIxLjQtMTkuOSA0Ni40LTE5LjkgNzMuMXpNMzY4IDQ2NGwwLTc1LjNjMTkuOS0yMi41IDMyLTUyLjIgMzItODQuN2wwLTMyYzAtMjYuNy03LjMtNTEuNi0xOS45LTczLjEgMTEuMS00LjUgMjMuMi02LjkgMzUuOS02LjkgNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDU2LjZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTEyLjMgMC0yMy42LTQuNi0zMi4xLTEyLjMgMC0xLjIgLjEtMi41IC4xLTMuN3pNNDE2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdCiAgICB9OwogICAgZmFTcXVhcmVCaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJpbmFyeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjliIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTQ0IDRjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgNDhjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMzIgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTQ4YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0zMiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4em0xNDAtNDRjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHpNMTMyIDI5NmMwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIwem05NiAyNGwwIDQ4YzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDMyIDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC00OGMwLTI0LjMtMTkuNy00NC00NC00NGwtMzIgMGMtMjQuMyAwLTQ0IDE5LjctNDQgNDR6bTQ0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4YzAtMi4yIDEuOC00IDQtNHoiXQogICAgfTsKICAgIGZhTWFza3NUaGVhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hc2tzLXRoZWF0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MTcsICJ0aGVhdGVyLW1hc2tzIl0sICJmNjMwIiwgIk0tNSAxMThMMjMuNSAyNzkuN2MxNCA3OS41IDc2LjMgMTQxLjggMTU1LjggMTU1LjhsMTIuNyAyLjJjLTE2LjUtMjguNi0yNy4xLTYwLjctMzAuNi05NC41bC0yNC4xIDQuM2MtOS43IDEuNy0xOC44LTUuOC0xNi45LTE1LjUgNC44LTI0LjcgMTkuMS00Ni42IDM5LjctNjAuOWwwLTc0LjZjLTEuNCAuOC0zIDEuMy00LjcgMS42bC02MyAxMS4xYy04LjcgMS41LTE3LjMtNC40LTE1LjktMTMuMSAzLjEtMTkuNiAxOC40LTM2IDM5LjEtMzkuNyAxNy4yLTMgMzMuOSAzLjUgNDQuNiAxNS44bDAtMjIuN2MwLTIyLjUgNi45LTUyLjQgMzIuMy03My40IDI2LTIxLjUgNjcuNy00My45IDEyNC45LTU0LjItMzAuNS0xNi4zLTg2LjMtMzItMTYzLjgtMTguNC04MC4zIDE0LjItMTI4IDUwLjEtMTUwLjEgNzYuMS05IDEwLjUtMTAuOCAyNC45LTguNCAzOC41ek0yMDggMTM4LjdsMCAxNzQuOGMwIDgwLjcgNTAuNSAxNTIuOSAxMjYuNCAxODAuNEwzNjIuMSA1MDRjMTQuMSA1LjEgMjkuNiA1LjEgNDMuNyAwTDQzMy42IDQ5NEM1MDkuNSA0NjYuNCA1NjAgMzk0LjMgNTYwIDMxMy41bDAtMTc0LjhjMC02LjktMi4xLTEzLjgtNy0xOC42LTIyLjYtMjIuNS03OC4yLTU2LTE2OS01NnMtMTQ2LjQgMzMuNi0xNjkgNTZjLTQuOSA0LjktNyAxMS43LTcgMTguNnptNjYuMSAxODcuMWMtMS40LTcgNy0xMSAxMi43LTYuNiAyNi45IDIwLjYgNjAuNiAzMi45IDk3LjIgMzIuOXM3MC4yLTEyLjMgOTcuMi0zMi45YzUuNy00LjQgMTQuMS0uNCAxMi43IDYuNi0xMC4xIDUxLjQtNTUuNSA5MC4zLTEwOS45IDkwLjNzLTk5LjgtMzguOC0xMDkuOS05MC4zem0uNS0xMDEuNUMyODEuMiAyMDUuNSAyOTkgMTkyIDMyMCAxOTJzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN2wtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43ek00ODAgMjQwbC02NCAwYy04LjggMC0xNi4zLTcuNC0xMy40LTE1LjcgNi41LTE4LjggMjQuNC0zMi4zIDQ1LjQtMzIuM3MzOC45IDEzLjUgNDUuNCAzMi4zYzIuOSA4LjQtNC41IDE1LjctMTMuNCAxNS43eiJdCiAgICB9OwogICAgZmFUaGVhdGVyTWFza3MgPSBmYU1hc2tzVGhlYXRlcjsKICAgIGZhQ2FydFBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1wbHVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTciLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiA0MTIuNyAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0zMzYgNzguNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMy42LTMzLjYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy42IDAgMCAzMy42YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMy42IDMzLjYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzMuNiAwIDAtMzMuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtYXNsLWludGVycHJldGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJhbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyIsICJhc2wtaW50ZXJwcmV0aW5nIiwgImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nIl0sICJmMmEzIiwgIk0xNTYuNiA0Ni4zYzcuOS0xNS44IDEuNS0zNS0xNC4zLTQyLjlzLTM1LTEuNS00Mi45IDE0LjNMMTMuNSAxODkuNEM0LjYgMjA3LjIgMCAyMjYuOCAwIDI0Ni43TDAgMjU2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDgwIDAgMC0uM2MzNS4yLTIuNyA2NS40LTIyLjggODIuMS01MS43IDguOC0xNS4zIDMuNi0zNC45LTExLjctNDMuN3MtMzQuOS0zLjYtNDMuNyAxMS43Yy03IDEyLTE5LjkgMjAtMzQuNyAyMC0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwYzE0LjggMCAyNy43IDggMzQuNyAyMCA4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43czIwLjUtMjguNCAxMS43LTQzLjdjLTEyLjgtMjIuMS0zMy42LTM5LjEtNTguNC00Ny4xbDgwLjgtMjJjMTctNC42IDI3LjEtMjIuMiAyMi41LTM5LjNzLTIyLjItMjcuMS0zOS4zLTIyLjVsLTEwMC43IDI3LjUgODEuNi02OGMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xUzI0OS4xLTMuOSAyMzUuNSA3LjRsLTEwMS45IDg0LjkgMjMtNDZ6TTQ4My40IDQ2NS43Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsODUuOS0xNzEuN2M4LjktMTcuOCAxMy41LTM3LjQgMTMuNS01Ny4ybDAtOS4zYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC04MCAwIDAgLjNjLTM1LjIgMi43LTY1LjQgMjIuOC04Mi4xIDUxLjctOC45IDE1LjMtMy42IDM0LjkgMTEuNyA0My43czM0LjkgMy42IDQzLjctMTEuN2M3LTEyIDE5LjktMjAgMzQuNy0yMCAyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGMtMTQuOCAwLTI3LjctOC0zNC43LTIwLTguOS0xNS4zLTI4LjQtMjAuNS00My43LTExLjdzLTIwLjUgMjguNC0xMS43IDQzLjdjMTIuOCAyMi4xIDMzLjYgMzkuMSA1OC40IDQ3LjFsLTgwLjggMjJjLTE3LjEgNC42LTI3LjEgMjIuMi0yMi41IDM5LjNzMjIuMiAyNy4xIDM5LjMgMjIuNWwxMDAuNy0yNy41LTgxLjYgNjhjLTEzLjYgMTEuMy0xNS40IDMxLjUtNC4xIDQ1LjFzMzEuNSAxNS40IDQ1LjEgNC4xbDEwMS45LTg0LjktMjMgNDZ6Il0KICAgIH07CiAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LXVubG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjkxIiwgIk0yNTYgMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptMjU2LTc5Yy00Ni43IDUuOC04NS42IDM2LjgtMTAyLjcgNzlsLTI1LjMgMCAwIDkwLjhjLTEwLjEgMTUuMi0xNiAzMy40LTE2IDUzLjFsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDEyOCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDl6TTEyOCAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem00MzIgNDhjLS4xLTE3LjYtMTQuNC0zMS45LTMyLTMxLjktMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA0NC4yIDAgNzkuOSAzNS44IDgwIDc5LjlsLTQ4IDB6Il0KICAgIH07CiAgICBmYVJvY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNSIsICJNMTI4IDMyMEwyNC41IDMyMGMtMjQuOSAwLTQwLjItMjcuMS0yNy40LTQ4LjVMNTAgMTgzLjNDNTguNyAxNjguOCA3NC4zIDE2MCA5MS4yIDE2MGw5NSAwYzc2LjEtMTI4LjkgMTg5LjYtMTM1LjQgMjY1LjUtMTI0LjMgMTIuOCAxLjkgMjIuOCAxMS45IDI0LjYgMjQuNiAxMS4xIDc1LjkgNC42IDE4OS40LTEyNC4zIDI2NS41bDAgOTVjMCAxNi45LTguOCAzMi41LTIzLjMgNDEuMmwtODguMiA1Mi45Yy0yMS4zIDEyLjgtNDguNS0yLjYtNDguNS0yNy40TDE5MiAzODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLS4xIDB6TTQwMCAxNjBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2hyaW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNocmltcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTQyNF0sICJlNDQ4IiwgIk03MiAzMkMzMi4yIDMyIDAgNjQuMiAwIDEwNCAwIDE0MS45IDI5LjMgMTcyLjkgNjYuNCAxNzUuOCA3Ny42IDI1Ny4yIDE0Ny40IDMyMCAyMzIgMzIwbDU2IDAgMC0xOTItMjE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNzIgMzJ6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNzIgMCAwLTcyLjItNjQuMS0yMi40Yy0xMi41LTQuNC0yNi4yIDIuMi0zMC42IDE0LjdzMi4yIDI2LjIgMTQuNyAzMC42bDQuNSAxLjZDMjMzIDQzMy45IDIyNCA0NDMuOSAyMjQgNDU2em0xMjggMjMuM2MzNi40LTMuMyA2OS41LTE3LjYgOTYuMS0zOS42bC04Ni41LTM0LjZjLTMgMS44LTYuMiAzLjItOS42IDQuM2wwIDY5Ljl6TTQ3Mi42IDQxNWMyNC42LTMwLjMgMzkuNC02OC45IDM5LjQtMTExIDAtMTIuMy0xLjMtMjQuMy0zLjctMzUuOUwzODIuOCAzNTUuMWMuOCAzLjQgMS4yIDcgMS4yIDEwLjYgMCA0LjYtLjcgOS0xLjkgMTMuMUw0NzIuNiA0MTV6TTMzNiAxMjhsLTE2IDAgMCAxOTIgMTguMyAwYzkuOSAwIDE5LjEgMy4yIDI2LjYgOC41bDEzMy41LTkyLjRDNDcxLjggMTcyLjYgNDA5LjEgMTI4IDMzNiAxMjh6TTE2OCAxOTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhVGVuZ2VTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbmdlLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4Mzc2LCAidGVuZ2UiXSwgImY3ZDciLCAiTTAgNTZDMCA0Mi43IDEwLjcgMzIgMjQgMzJsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgODBDMTAuNyA4MCAwIDY5LjMgMCA1NnpNMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwIDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhVGVuZ2UgPSBmYVRlbmdlU2lnbjsKICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2xpbmljLW1lZGljYWwiXSwgImY3ZjIiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMjQgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFDbGluaWNNZWRpY2FsID0gZmFIb3VzZUNoaW1uZXlNZWRpY2FsOwogICAgZmFVc2Vyc1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXNsYXNoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzMiLCAiTTczLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzI5LjctLjMgMzkgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMS44IDIyNGM1Ni42LTEgMTAyLjItNDcuMiAxMDIuMi0xMDQgMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDQtNTYuOCAwLTEwMyA0NS42LTEwNCAxMDIuMkw3My0yNC45ek01MTIgMjg4Yy0xNy4yIDAtMzMuNyAzLjQtNDguNyA5LjZsMTcwIDE3MGM0LjItNS40IDYuNy0xMi4yIDYuNy0xOS42bDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjh6TTU5LjkgOTcuN2MtMjEuNSAxMi41LTM1LjkgMzUuNy0zNS45IDYyLjMgMCAzOS44IDMyLjIgNzIgNzIgNzIgMjYuNiAwIDQ5LjgtMTQuNCA2Mi4zLTM1LjlMNTkuOSA5Ny43ek0yNTAuMiAyODhDMTk2LjggMzEzLjkgMTYwIDM2OC43IDE2MCA0MzJsMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTAuMiAwLTE5Mi0xOTJ6TTEyOCAyODhDNTcuMyAyODggMCAzNDUuMyAwIDQxNmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDg2LjcgMGMtNC4zLTkuOC02LjctMjAuNi02LjctMzJsMC0xNmMwLTUzLjIgMjAtMTAxLjggNTIuOS0xMzguNi0xMS43LTMuNS0yNC4xLTUuNC0zNi45LTUuNHpNNjE2IDE2MGE3MiA3MiAwIDEgMCAtMTQ0IDAgNzIgNzIgMCAxIDAgMTQ0IDB6Il0KICAgIH07CiAgICBmYVBhcGVyUGxhbmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyLXBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE5MTNdLCAiZjFkOCIsICJNNTM2LjQtMjYuM2M5LjgtMy41IDIwLjYtMSAyOCA2LjNzOS44IDE4LjIgNi4zIDI4bC0xNzggNDk2LjljLTUgMTMuOS0xOC4xIDIzLjEtMzIuOCAyMy4xLTE0LjIgMC0yNy04LjYtMzIuMy0yMS43bC02NC4yLTE1OGMtNC41LTExLTIuNS0yMy42IDUuMi0zMi42bDk0LjUtMTEyLjRjNS4xLTYuMSA0LjctMTUtLjktMjAuNnMtMTQuNi02LTIwLjYtLjlMMjI5LjIgMjc2LjFjLTkuMSA3LjYtMjEuNiA5LjYtMzIuNiA1LjJMMzguMSAyMTYuOGMtMTMuMS01LjMtMjEuNy0xOC4xLTIxLjctMzIuMyAwLTE0LjcgOS4yLTI3LjggMjMuMS0zMi44bDQ5Ni45LTE3OHoiXQogICAgfTsKICAgIGZhQm9va0F0bGFzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYXRsYXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYXRsYXMiXSwgImY1NTgiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0zMTAuNiAyMDhMMjc5IDIwOGMtMS40IDIzLjEtNiA0NC4yLTEyLjYgNjEuMiAyMi43LTEyLjUgMzkuNC0zNC44IDQ0LjItNjEuMnptLTE3My4xIDBjNC44IDI2LjQgMjEuNSA0OC43IDQ0LjIgNjEuMi02LjctMTctMTEuMi0zOC0xMi42LTYxLjJsLTMxLjYgMHptNzYuNCA1NWM0LjUgOS42IDguMiAxMy44IDEwLjIgMTUuNSAyLTEuNyA1LjctNS44IDEwLjItMTUuNSA2LjItMTMuNCAxMS4xLTMyLjUgMTIuNy01NWwtNDUuOCAwYzEuNiAyMi41IDYuNSA0MS42IDEyLjcgNTV6bS0xMi43LTg3bDQ1LjggMGMtMS42LTIyLjUtNi41LTQxLjYtMTIuNy01NS00LjUtOS42LTguMi0xMy44LTEwLjItMTUuNS0yIDEuNy01LjcgNS44LTEwLjIgMTUuNS02LjIgMTMuNC0xMS4xIDMyLjUtMTIuNyA1NXptMTA5LjUgMGMtNC44LTI2LjQtMjEuNS00OC43LTQ0LjItNjEuMiA2LjcgMTcgMTEuMiAzOCAxMi42IDYxLjJsMzEuNiAwek0xNjkgMTc2YzEuNC0yMy4xIDYtNDQuMiAxMi42LTYxLjItMjIuNyAxMi41LTM5LjQgMzQuOC00NC4yIDYxLjJsMzEuNiAwek05NiAxOTJhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHoiXQogICAgfTsKICAgIGZhQXRsYXMgPSBmYUJvb2tBdGxhczsKICAgIGZhVGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjZSIsICJNMjU2IDE2MGwwIDk2IDEyOCAwIDAtOTYtMTI4IDB6bS02NCAwbC0xMjggMCAwIDk2IDEyOCAwIDAtOTZ6TTAgMzIwTDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2em0zODQgMGwtMTI4IDAgMCA5NiAxMjggMCAwLTk2ek0xOTIgNDE2bDAtOTYtMTI4IDAgMCA5NiAxMjggMHoiXQogICAgfTsKICAgIGZhSGVhcnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTUzLCAxMjgxNTQsIDEyODE1NSwgMTI4MTU2LCAxMjg0MjAsIDEyOTI5MywgMTI5Mjk0LCAxMjk1MDUsIDk4MjksIDEwMDg0LCA2MTU3OF0sICJmMDA0IiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTEyLjItMTM5LjkgMjQyLjUtMjEyLjkgMjk4LjItMTIuNCA5LjQtMjcuNiAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjYtNDMuMS0xNC4xQzEzOS45IDQxMC4yIDAgMjc5LjkgMCAxNjcuN2wwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hldnJvblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLXVwIl0sICJmMTM5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzc3IDI3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04Ny04Ny04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM3NyAyNzF6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVVcCA9IGZhQ2lyY2xlQ2hldnJvblVwOwogICAgZmFCYXR0ZXJ5SGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LWhhbGYiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYmF0dGVyeS0zIl0sICJmMjQyIiwgIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkzID0gZmFCYXR0ZXJ5SGFsZjsKICAgIGZhRm9udEF3ZXNvbWUzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNTAxLCA2MjY5NCwgImZvbnQtYXdlc29tZS1mbGFnIiwgImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwgImYyYjQiLCAiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNjQgMCAwLTY0IDM3My42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUZsYWczID0gZmFGb250QXdlc29tZTM7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwzID0gZmFGb250QXdlc29tZTM7CiAgICBmYUhhbmRjdWZmcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kY3VmZnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmOCIsICJNMzIwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMnpNMTkyIDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTUyIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2YzAgMSAuMSAxLjkgLjIgMi45LTc0LjcgMjYuMy0xMjguMiA5Ny41LTEyOC4yIDE4MS4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODMuNy01My41LTE1NC44LTEyOC4yLTE4MS4xIC4xLS45IC4yLTEuOSAuMi0yLjlsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMHpNNjQgMzIwYTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6bTQ0OCAwYzAgNjYuOS01MS4zIDEyMS44LTExNi42IDEyNy41LTE0LjMgMjIuOC0zMi40IDQzLjEtNTMuNCA1OS45IDEzLjUgMyAyNy42IDQuNiA0MiA0LjYgMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC04My43LTUzLjUtMTU0LjgtMTI4LjItMTgxLjEgLjEtLjkgLjItMS45IC4yLTIuOWwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMi4zIDAtMjIuNCA5LjItMjMuOCAyMS4xIDMwLjMgMTkuMiA1Ni4xIDQ1IDc1LjIgNzUuNCA2NS40IDUuOCAxMTYuNiA2MC42IDExNi42IDEyNy41ek0zODQgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFIYXRDb3dib3lTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC1jb3dib3ktc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGMxIiwgIk02NDAgMzg4LjNjMCAxNi45LTcuMSAzMi4yLTE4LjQgNDMuMWwtMzUtMjMuMy0yOTIuNy0xOTUuMWMtMzYuMS0yNC4xLTc4LjYtMzYuOS0xMjItMzYuOWwtMy45IDBjLTIuNyAwLTUuNCAwLTggLjFsMjIuMi0xMDBjNS43LTI1LjggMjguNi00NC4xIDU1LTQ0LjEgMTIuMiAwIDI0LjEgNCAzMy44IDExLjNsNC43IDMuNWMyNi4zIDE5LjcgNjIuNCAxOS43IDg4LjYgMGw0LjctMy41YzkuOC03LjMgMjEuNi0xMS4zIDMzLjgtMTEuMyAyNi40IDAgNDkuMyAxOC4zIDU1IDQ0LjFsMzMgMTQ4LjVDNTc0LjUgMjMyLjMgNjQwIDMwMi42IDY0MCAzODguM3pNMTcxLjkgMjI0YzMzLjkgMCA2Ny4xIDEwIDk1LjQgMjguOUw1NjAgNDQ4IDU2IDQ0OGMtMzAuOSAwLTU2LTI1LjEtNTYtNTYgMC05Mi44IDc1LjItMTY4IDE2OC0xNjhsMy45IDB6Il0KICAgIH07CiAgICBmYUluZHVzdHJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImluZHVzdHJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNzUiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNzkuOGMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMWwtMTU2LjYgODQuMyAwLTYzLjJjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMTI4IDIxNS40IDEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhTGluZXNMZWFuaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpbmVzLWxlYW5pbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTUxZSIsICJNMTkwLjQgNzQuMWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtMTI4IDM4NGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwxMjgtMzg0em03MC45LTQxLjdjLTE3LjQtMi45LTMzLjkgOC45LTM2LjggMjYuM2wtNjQgMzg0Yy0yLjkgMTcuNCA4LjkgMzMuOSAyNi4zIDM2LjhzMzMuOS04LjkgMzYuOC0yNi4zbDY0LTM4NGMyLjktMTcuNC04LjktMzMuOS0yNi4zLTM2Ljh6TTM1MiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhUGFzc3BvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFzc3BvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhYiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek05NiA0MDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMjc4LjYgMjA4Yy00LjggMjYuNC0yMS41IDQ4LjctNDQuMiA2MS4yIDYuNy0xNyAxMS4yLTM4IDEyLjYtNjEuMmwzMS42IDB6bS0xNzMuMSAwbDMxLjYgMGMxLjQgMjMuMSA2IDQ0LjIgMTIuNiA2MS4yLTIyLjctMTIuNS0zOS40LTM0LjgtNDQuMi02MS4yem03Ni40IDU1Yy02LjItMTMuNC0xMS4xLTMyLjUtMTIuNy01NWw0NS44IDBjLTEuNiAyMi41LTYuNSA0MS42LTEyLjcgNTUtNC41IDkuNi04LjIgMTMuOC0xMC4yIDE1LjUtMi0xLjctNS43LTUuOC0xMC4yLTE1LjV6bTAtMTQyYzQuNS05LjYgOC4yLTEzLjggMTAuMi0xNS41IDIgMS43IDUuNyA1LjggMTAuMiAxNS41IDYuMiAxMy40IDExLjEgMzIuNSAxMi43IDU1bC00NS44IDBjMS42LTIyLjUgNi41LTQxLjYgMTIuNy01NXptOTYuNyA1NUwyNDcgMTc2Yy0xLjQtMjMuMS02LTQ0LjItMTIuNi02MS4yIDIyLjcgMTIuNSAzOS40IDM0LjggNDQuMiA2MS4yek0xMzcgMTc2bC0zMS42IDBjNC44LTI2LjQgMjEuNS00OC43IDQ0LjItNjEuMi02LjcgMTctMTEuMiAzOC0xMi42IDYxLjJ6bTE4MyAxNmExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAweiJdCiAgICB9OwogICAgZmFJbmZpbml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmZpbml0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzg3MzQsIDk4NTRdLCAiZjUzNCIsICJNMCAyNTZjMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgNTAuNCAwIDk3LjggMjMuNyAxMjggNjRsMzIgNDIuNyAzMi00Mi43YzMwLjItNDAuMyA3Ny42LTY0IDEyOC02NCA4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFM1NjguNCA0MTYgNDgwIDQxNmMtNTAuNCAwLTk3LjgtMjMuNy0xMjgtNjRsLTMyLTQyLjctMzIgNDIuN2MtMzAuMiA0MC4zLTc3LjYgNjQtMTI4IDY0LTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwem0yODAgMGwtNDMuMi01Ny42Yy0xOC4xLTI0LjItNDYuNi0zOC40LTc2LjgtMzguNC01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzMwLjIgMCA1OC43LTE0LjIgNzYuOC0zOC40TDI4MCAyNTZ6bTgwIDBsNDMuMiA1Ny42YzE4LjEgMjQuMiA0Ni42IDM4LjQgNzYuOCAzOC40IDUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0zMC4yIDAtNTguNyAxNC4yLTc2LjggMzguNEwzNjAgMjU2eiJdCiAgICB9OwogICAgZmFDbG9uZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI0ZCIsICJNMjg4IDQ0OGwtMjI0IDAgMC0yMjQgNDggMCAwLTY0LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDgtNjQgMCAwIDQ4em0tNjQtOTZsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFGb3J3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvcndhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5MTkzXSwgImYwNGUiLCAiTTM3MS43IDQzLjFDMzYwLjEgMzIgMzQzIDI4LjkgMzI4LjMgMzUuMlMzMDQgNTYgMzA0IDcybDAgMTM2LjMtMTcyLjMtMTY1LjFDMTIwLjEgMzIgMTAzIDI4LjkgODguMyAzNS4yUzY0IDU2IDY0IDcybDAgMzY4YzAgMTYgOS42IDMwLjUgMjQuMyAzNi44czMxLjggMy4yIDQzLjQtNy45TDMwNCAzMDMuNyAzMDQgNDQwYzAgMTYgOS42IDMwLjUgMjQuMyAzNi44czMxLjggMy4yIDQzLjQtNy45bDE5Mi0xODRjNy45LTcuNSAxMi4zLTE4IDEyLjMtMjguOXMtNC41LTIxLjMtMTIuMy0yOC45bC0xOTItMTg0eiJdCiAgICB9OwogICAgZmFNID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDldLCAiNGQiLCAiTTIyLjcgMzMuNGMxMy41LTQuMSAyOC4xIDEuMSAzNS45IDEyLjlMMjI0IDI5NC4zIDM4OS40IDQ2LjNjNy44LTExLjcgMjIuNC0xNyAzNS45LTEyLjlTNDQ4IDQ5LjkgNDQ4IDY0bDAgMzg0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc4LjMtMTMzLjQgMjAwLjFjLTUuOSA4LjktMTUuOSAxNC4yLTI2LjYgMTQuMnMtMjAuNy01LjMtMjYuNi0xNC4yTDY0IDE2OS43IDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA0OS45IDkuMiAzNy41IDIyLjcgMzMuNHoiXQogICAgfTsKICAgIGZhUm9hZFNwaWtlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLXNwaWtlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY4IiwgIk02NCAxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUw2MDYuOCAzMDIuMmMxNC4yIDIxLjMtMS4xIDQ5LjgtMjYuNiA0OS44TDY0IDM1MiA2NCAxMTYuOHpNMzIgMzg0bDU3NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhTW91bnRhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTZdLCAiZjZmYyIsICJNMjU2LjUgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjUtNy4yIDEyLjEtMjAuMyAxOS41LTM0LjMgMTkuNWwtNDMyIDBjLTE0LjEgMC0yNy4xLTcuNC0zNC4zLTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMCAyLjktNC42QzIzMS43IDYuMiAyNDMuNiAwIDI1Ni41IDB6TTE3MC40IDI0OS45bDI2LjggMjYuOGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw0My4zLTQzLjNjNi02IDE0LjEtOS40IDIyLjYtOS40bDQyLjggMC03Mi4xLTEzMy41LTg2LjEgMTU5LjR6Il0KICAgIH07CiAgICBmYUNoZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MzkiLCAiTTE2OCA1NmwwIDQwLTc4LjEgMGMtMTQuMyAwLTI1LjkgMTEuNi0yNS45IDI1LjkgMCA0IC45IDggMi43IDExLjZsMzMuNCA2Ni44Yy0xMS40IDEuOC0yMC4yIDExLjctMjAuMiAyMy43IDAgMTMuMyAxMC43IDI0IDI0IDI0bDUuNiAwLTEzLjYgMTM2LTU2LjIgNzAuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjQ4LjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwyODggMzg0IDI3NC40IDI0OCAyODAgMjQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0IDAtMTEuOS04LjctMjEuOS0yMC4yLTIzLjdsMzMuNC02Ni44YzEuOC0zLjYgMi43LTcuNiAyLjctMTEuNiAwLTE0LjMtMTEuNi0yNS45LTI1LjktMjUuOWwtNzguMSAwIDAtNDAgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMyNDUuMyA4IDIzMiA4bC0xNiAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMTY4LTIxLjMgMTY4LThsMCAxNi0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDB6TTMyNS44IDI3OS42bDguNSA4NS41IDQ3LjQgNTkuMiA0LjIgNS43YzkuMiAxMy43IDE0LjEgMjkuOSAxNC4xIDQ2LjUgMCAxMi43LTIuOCAyNC44LTcuOSAzNS41bDgzLjEgMGMyMC4zIDAgMzYuOC0xNi41IDM2LjgtMzYuOCAwLTcuMy0yLjItMTQuNC02LjItMjAuNGwtMjUuOC0zOC43IDAtNjQgMTMuMy0xMy4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTEyIDE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE2LTMyIDAgMC0xNmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMjIuNC0xMC4yIDQyLjQtMjYuMiA1NS42eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtdGhyZWUtcXVhcnRlcnMiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtMyIsICJ0aGVybW9tZXRlci0zIiwgInRoZXJtb21ldGVyLXRocmVlLXF1YXJ0ZXJzIl0sICJmMmM4IiwgIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNMMTM2IDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTU2LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVyczsKICAgIGZhVGhlcm1vbWV0ZXIzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7CiAgICBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOwogICAgZmFCID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5OF0sICI0MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQ2LjUtMjQuOC04Ny4zLTYyLTEwOS43IDE4LjctMjIuMyAzMC01MSAzMC04Mi4zIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4TDMyIDMyek0xNjAgMjI0bC05NiAwIDAtMTI4IDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTY0IDI4OGwxMjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0xMjh6Il0KICAgIH07CiAgICBmYVNoaWVsZFZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC12aXJ1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDZjIiwgIk0yNTMuNCAyLjlDMjQ5LjIgMSAyNDQuNyAwIDI0MCAwcy05LjIgMS0xMy40IDIuOUwzOC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI1My40IDIuOXpNMjQwIDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjR6TTIwOCAyNjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFMaXRlY29pblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGl0ZWNvaW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWQzIiwgIk0xMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgNDYuMyA2NCA2NGwwIDE1Ny45LTM4LjYgMTFjLTEyLjcgMy42LTIwLjEgMTYuOS0xNi41IDI5LjdzMTYuOSAyMC4xIDI5LjcgMTYuNUw2NCAyNzEuOCA2NCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMTYyLjUgMTM0LjYtMzguNWMxMi43LTMuNiAyMC4xLTE2LjkgMTYuNS0yOS43cy0xNi45LTIwLjEtMjkuNy0xNi41TDEyOCAyMDMuNiAxMjggNjR6Il0KICAgIH07CiAgICBmYURpY2VENiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWQ2IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDEiLCAiTTIyNC40IDguM0MyNDQtMi44IDI2OC0yLjggMjg3LjYgOC4zbDE3NiA5OS43YzIwIDExLjQgMzIuNCAzMi42IDMyLjQgNTUuN2wwIDE5Ny40YzAgMjMtMTIuNCA0NC4zLTMyLjQgNTUuN2wtMTc2IDk5LjdjLTE5LjYgMTEuMS00My42IDExLjEtNjMuMSAwbC0xNzYtOTkuN0MyOC40IDQwNS41IDE2IDM4NC4yIDE2IDM2MS4ybDAtMTk3LjRjMC0yMyAxMi40LTQ0LjMgMzIuNC01NS43bDE3Ni05OS43ek0xMDIuNiAxNTUuNmMtOC44LTMuMS0xOC44IC4zLTIzLjggOC42cy0zLjIgMTguNyAzLjYgMjVsMy4yIDIuNCAxNTAuMiA5MC4yIDAgMTQ4LjdjMCAxMSA5IDIwIDIwIDIwIDExIDAgMjAtOSAyMC0yMGwwLTE0OC43IDE1MC4zLTkwLjJjOS41LTUuNyAxMi42LTE4IDYuOS0yNy40cy0xOC0xMi41LTI3LjQtNi45bC0xNDkuNyA4OS44LTE0OS43LTg5LjgtMy43LTEuN3oiXQogICAgfTsKICAgIGZhR3JpcExpbmVzVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcC1saW5lcy12ZXJ0aWNhbCIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJmN2E1IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDY0em0xMjggMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0eiJdCiAgICB9OwogICAgZmFHb2xmQmFsbFRlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnb2xmLWJhbGwtdGVlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImdvbGYtYmFsbCJdLCAiZjQ1MCIsICJNMjk4LjUgMzg0LjFjMTIuMSAxLjIgMjEuNSAxMS41IDIxLjUgMjMuOXMtOS40IDIyLjYtMjEuNSAyMy45bC0yLjUgLjEtODAgMCAwIDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODgtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMi40IDkuNC0yMi42IDIxLjUtMjMuOWwyLjUtLjEgMjA4IDAgMi41IC4xek0xOTIgMGMxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDU3LjQtMjUuMiAxMDguOC02NS4xIDE0NEw2NS4xIDMzNkMyNS4yIDMwMC44IDAgMjQ5LjQgMCAxOTIgMCA4NiA4NiAwIDE5MiAwem0zMiAyNDBjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnptNjQtNjRjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnptLTgwLTE2Yy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUdvbGZCYWxsID0gZmFHb2xmQmFsbFRlZTsKICAgIGZhSGV4YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZXhhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTEwNDNdLCAiZjMxMiIsICJNMzMuNSAyMjAuM2MtMTIuNyAyMi4yLTEyLjcgNDkuNCAwIDcxLjVsOTYuMiAxNjguMWMxMi44IDIyLjQgMzYuNyAzNi4yIDYyLjUgMzYuMmwxOTEuNiAwYzI1LjggMCA0OS43LTEzLjggNjIuNS0zNi4ybDk2LjItMTY4LjFjMTIuNy0yMi4yIDEyLjctNDkuNCAwLTcxLjVMNDQ2LjMgNTIuMkM0MzMuNSAyOS44IDQwOS42IDE2IDM4My44IDE2TDE5Mi4yIDE2Yy0yNS44IDAtNDkuNyAxMy44LTYyLjUgMzYuMkwzMy41IDIyMC4zeiJdCiAgICB9OwogICAgZmFGb2xkZXJPcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sICJmMDdjIiwgIk01NiAyMjUuNkwzMi40IDI5Ni4yIDMyLjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40bDExNy4zIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0zNjUuNCAwYy00MS4zIDAtNzggMjYuNC05MS4xIDY1LjZ6TTQ3Ny44IDQ0OEw5OSA0NDhjLTMyLjggMC01NS45LTMyLjEtNDUuNS02My4ybDQ4LTE0NEMxMDggMjIxLjIgMTI2LjQgMjA4IDE0NyAyMDhsMzc4LjggMGMzMi44IDAgNTUuOSAzMi4xIDQ1LjUgNjMuMmwtNDggMTQ0Yy02LjUgMTkuNi0yNC45IDMyLjgtNDUuNSAzMi44eiJdCiAgICB9OwogICAgZmFLYWFiYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrYWFiYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzMV0sICJmNjZiIiwgIk0yNTYgNTEuM0w5Mi44IDExMi40IDI0Ny41IDE3MS4xYzUuNSAyLjEgMTEuNSAyLjEgMTcgMEw0MTkuMiAxMTIuNCAyNTYgNTEuM3pNMCAxMjkuM2MwLTIwIDEyLjQtMzcuOSAzMS4xLTQ0LjlsMjA4LTc4YzEwLjktNC4xIDIyLjgtNC4xIDMzLjcgMGwyMDggNzhjMTguNyA3IDMxLjEgMjQuOSAzMS4xIDQ0LjlsMCAzNi0yNTMuMiA5NmMtMS44IC43LTMuOCAuNy01LjcgMGwtMjUzLjItOTYgMC0zNnptMCAxNDBsMC01Mi43IDIzNi4xIDg5LjZjMTIuOCA0LjkgMjYuOSA0LjkgMzkuNyAwbDIzNi4xLTg5LjYgMCA1Mi43LTEyOCA0OC42IDAgNTEuMyAxMjgtNDguNiAwIDYyLjJjMCAyMC0xMi40IDM3LjktMzEuMSA0NC45bC0yMDggNzhjLTEwLjkgNC4xLTIyLjggNC4xLTMzLjcgMGwtMjA4LTc4QzEyLjQgNDIwLjcgMCA0MDIuNyAwIDM4Mi43bDAtNjIuMiAxMjggNDguNiAwLTUxLjMtMTI4LTQ4LjZ6TTIzNi4xIDQxMC4xYzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGw2MC4xLTIyLjggMC01MS4zLTc3LjIgMjkuM2MtMS44IC43LTMuOCAuNy01LjcgMGwtNzcuMi0yOS4zIDAgNTEuMyA2MC4xIDIyLjh6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGJkIiwgIk02Ni43IDM4NGw0Mi41LTQyLjVjMjQtMjQgNTYuNi0zNy41IDkwLjUtMzcuNUwzNTIgMzA0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMi42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjVzOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNC43IDB6Il0KICAgIH07CiAgICBmYVNpbmdsZVF1b3RlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luZ2xlLXF1b3RlLXJpZ2h0IiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImU4MWMiLCAiTTY0IDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAweiJdCiAgICB9OwogICAgZmFCb3R0bGVEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvdHRsZS1kcm9wbGV0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU0YzQiLCAiTTgwIDBjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDEwMy4zYzY0LjkgMjAuNCAxMTIgODEgMTEyIDE1Mi43bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDU0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyODhjMC03MS42IDQ3LjEtMTMyLjMgMTEyLTE1Mi43TDExMiAzMkM5NC4zIDMyIDgwIDE3LjcgODAgMHptODAgNDE2YzM1LjMgMCA2NC0zMi40IDY0LTY0IDAtMjEuMi0yOC45LTY0LjUtNDcuOS05MC42LTguMS0xMS4xLTI0LjItMTEuMS0zMi4zIDAtMTkgMjYuMS00Ny45IDY5LjQtNDcuOSA5MC42IDAgMzEuNiAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFXaW5kb3dNaW5pbWl6ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDY5XSwgImYyZDEiLCAiTTAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUNoZXZyb25SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGV2cm9uLXJpZ2h0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMl0sICJmMDU0IiwgIk0zMTEuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQzLjIgMjU2IDczLjkgODYuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyeiJdCiAgICB9OwogICAgZmFFZ2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWdnIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5MzcwXSwgImY3ZmIiLCAiTTE5MiA0OTZDODYgNDk2IDAgMzk0IDAgMjg4IDAgMTc2IDY0IDE2IDE5MiAxNlMzODQgMTc2IDM4NCAyODhjMCAxMDYtODYgMjA4LTE5MiAyMDh6TTE1NC44IDEzNGM2LjUtNiA3LTE2LjEgMS0yMi42cy0xNi4xLTctMjIuNi0xYy0yMy45IDIxLjgtNDEuMSA1Mi43LTUyLjMgODQuMi0xMS4yIDMxLjYtMTYuOSA2NS4xLTE2LjkgOTMuNSAwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMjQuNSA1LTU0LjQgMTUuMS04Mi44IDEwLjEtMjguNSAyNS01NC4xIDQzLjctNzEuMnoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtEb21lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmRtYXJrLWRvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGFuZG1hcmstYWx0Il0sICJmNzUyIiwgIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAuOSAwIDEuOCAuMSAyLjYtODAuNSAxMy40LTE0NCA3Ni45LTE1Ny41IDE1Ny40TDY0IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDE2MC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNkw0NDggNDE2IDQ0OCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIuNyAwYy0xMy41LTgwLjQtNzctMTQzLjktMTU3LjUtMTU3LjQgLjEtLjkgLjEtMS43IC4xLTIuNiAwLTE3LjctMTQuMy0zMi0zMi0zMnptODAgMjU2bDY0IDAgMCAxNjAtNjQgMCAwLTE2MHpNMjI0IDQxNmwwLTE2MCA2NCAwIDAgMTYwLTY0IDB6TTExMiAyNTZsNjQgMCAwIDE2MC02NCAwIDAtMTYweiJdCiAgICB9OwogICAgZmFMYW5kbWFya0FsdCA9IGZhTGFuZG1hcmtEb21lOwogICAgZmFXb3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndvcm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU5OSIsICJNMjI0IDk2YzAtNTMgNDMtOTYgOTYtOTZsMzguNCAwQzQwNy45IDAgNDQ4IDQwLjEgNDQ4IDg5LjZMNDQ4IDM3NmMwIDc1LjEtNjAuOSAxMzYtMTM2IDEzNlMxNzYgNDUxLjEgMTc2IDM3NmwwLTgwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwbDAgMTY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4UzAgNDkwLjUgMCA0NjRMMCAyOTZjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZzMTM2IDYwLjkgMTM2IDEzNmwwIDgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0xODQtMzIgMGMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhVXNlckluanVyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1pbmp1cmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3MjgiLCAiTTI0Mi43IDgwTDMzNCA4MGMtMTAuNy0yNC42LTI5LjUtNDQuOS01Mi45LTU3LjZMMjQyLjcgODB6bS0uOS03MC43QzIzNiA4LjQgMjMwIDggMjI0IDggMTc0LjggOCAxMzIuNSAzNy42IDExNCA4MGw4MC42IDAgNDcuMS03MC43ek0yMjQgMjQ4YzY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbC0yNDAgMGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMHpNOTguNyAzNDEuOEM0OS4zIDM3MC4yIDE2IDQyMy41IDE2IDQ4NC42IDE2IDQ5OS43IDI4LjMgNTEyIDQzLjQgNTEybDE1MSAwLTk1LjgtMTcwLjJ6bTQ1LjEtMTcuN2w0Mi43IDc1LjkgODUuNSAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTEuNC0yLjQgMjIuMi02LjcgMzJsNTkuMiAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtOTAuOS03My43LTE2NC42LTE2NC42LTE2NC42bC04Ni45IDBjLTEyLjYgMC0yNC45IDEuNC0zNi43IDQuMXpNMjEzLjUgNDQ4bDM2IDY0IDIyLjUgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTguNSAweiJdCiAgICB9OwogICAgZmFTdHJpa2V0aHJvdWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cmlrZXRocm91Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBjYyIsICJNOTYgMTU3LjVDOTYgODguMiAxNTIuMiAzMiAyMjEuNSAzMkwzNjggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjIxLjUgOTZjLTM0IDAtNjEuNSAyNy41LTYxLjUgNjEuNSAwIDMxIDIzLjEgNTcuMiA1My45IDYxbDQ0LjEgNS41IDIyMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4My4xIDBDMTAzIDIwNC42IDk2IDE4MS44IDk2IDE1Ny41ek0zNDkuMiAzMzZsNjUuNSAwYy45IDYuMSAxLjQgMTIuMiAxLjQgMTguNSAwIDY5LjMtNTYuMiAxMjUuNS0xMjUuNSAxMjUuNUwxNDQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE0Ni41IDBjMzQgMCA2MS41LTI3LjUgNjEuNS02MS41IDAtNi40LTEtMTIuNy0yLjgtMTguNXoiXQogICAgfTsKICAgIGZhQmxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODEiLCAiTTIyNCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxNDUuOCAwIDI2NCAxMTguMiAyNjQgMjY0IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTE5LjMtOTYuNy0yMTYtMjE2LTIxNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNODAgOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OC0yMS41LTQ4LTQ4LTQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTYgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjU1LjUgNTEyIDE3NiA1MTIgMzIgNDQ3LjUgMzIgMzY4bDAtMjI0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0xNjggMGM5Mi44IDAgMTY4IDc1LjIgMTY4IDE2OCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdG9wd2F0Y2gyMCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wd2F0Y2gtMjAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA2ZiIsICJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0tNjAgMjQwYzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAzLjhjMCAxMS43LTMuMiAyMy4xLTkuMyAzM2wtNDMuOCA3MS4yIDMzLjEgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTU3LjggMGMtMTQuNSAwLTI2LjItMTEuNy0yNi4yLTI2LjIgMC00LjkgMS4zLTkuNiAzLjktMTMuOGw1Ni43LTkyLjFjMi4yLTMuNiAzLjQtNy44IDMuNC0xMi4xbDAtMy44YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMHptMTgwLTUyYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTI4LjcgMjMuMy01MiA1Mi01MnptLTEyIDUybDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyeiJdCiAgICB9OwogICAgZmFUcnVja1BpY2t1cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1waWNrdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3NjNdLCAiZjYzYyIsICJNMzYzLjggOTZsNTcuNiA5Ni0xMzMuNCAwIDAtOTYgNzUuOCAwek00OTYgMTkyTDQxOC42IDYzLjFDNDA3LjEgNDMuOCAzODYuMiAzMiAzNjMuOCAzMkwyNTYgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4LTE0NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyLjQgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTYwLjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMzIuNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTExMiAzOTJhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHptMzc2LTQwYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2VlZGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VlZGxpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3OTMsICJzcHJvdXQiXSwgImY0ZDgiLCAiTTUxMiAzMkM1MTIgMTQwLjEgNDM1LjQgMjMwLjMgMzMzLjYgMjUxLjQgMzI1LjcgMTkzLjMgMjk5LjYgMTQxIDI2MS4xIDEwMC41IDMwMS4yIDQwIDM2OS45IDAgNDQ4IDBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzMiAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBDMTAwLjMgMzIwIDAgMjE5LjcgMCA5NnoiXQogICAgfTsKICAgIGZhU3Byb3V0ID0gZmFTZWVkbGluZzsKICAgIGZhVHJhbnNnZW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhbnNnZW5kZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODk1LCAidHJhbnNnZW5kZXItYWx0Il0sICJmMjI1IiwgIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTcuOSAzMiAxMzYgNzAuMSAxNTEgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0xNSAxNSAxNC4yIDE0LjJjMjcuOS0yMy44IDY0LjItMzguMiAxMDMuOC0zOC4yIDM2LjcgMCA3MC42IDEyLjQgOTcuNiAzMy4yTDQ2Ni43IDMyIDQ0OCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC43LTg0LjQgODQuNGMxMyAyMy4xIDIwLjQgNDkuOSAyMC40IDc4LjMgMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAzNS4yIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM1LjJjLTczLTE0LjgtMTI4LTc5LjQtMTI4LTE1Ni44IDAtMzEuNCA5LTYwLjcgMjQuNy04NS40bC0xNi43LTE2LjctMTUgMTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTUtMTUtMzguMS0zOC4xIDAgMzAuMWMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDExMy43IDAgOTZMMCAwQzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDB6TTI4OCAzMzZhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYVRyYW5zZ2VuZGVyQWx0ID0gZmFUcmFuc2dlbmRlcjsKICAgIGZhU3RhckhhbGYyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxNzMxXSwgImYwODkiLCAiTTMwNC4xIDcuNmMwLTExLjEtNy42LTIwLjctMTguNC0yMy4zcy0yMS45IDIuNS0yNyAxMi40TDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjkxIDQxNi4xYzgtNC4xIDEzLjEtMTIuNCAxMy4xLTIxLjRsMC0zODcuMXoiXQogICAgfTsKICAgIGZhUGhvdG9GaWxtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob3RvLWZpbG0iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicGhvdG8tdmlkZW8iXSwgImY4N2MiLCAiTTE5MiA2NGMwLTM1LjMgMjguNy02NCA2NC02NEw1NzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjI0ek0zMjAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTU2LjUgMTEuNUM0NzIuMSAxMDAuNCA0NjQuNCA5NiA0NTYgOTZzLTE2LjEgNC40LTIwLjUgMTEuNWwtNTQgODguMy0xNy45LTI1LjZjLTQuNS02LjQtMTEuOC0xMC4yLTE5LjctMTAuMnMtMTUuMiAzLjgtMTkuNyAxMC4ybC01NiA4MGMtNS4xIDcuMy01LjggMTYuOS0xLjYgMjQuOFMyNzkuMSAyODggMjg4IDI4OGwyNTYgMGM4LjcgMCAxNi43LTQuNyAyMC45LTEyLjNzNC4xLTE2LjgtLjUtMjQuM2wtODgtMTQ0ek0xNDQgMTI4bDAgMTYwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEybDE5MiAwIDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwek01MiAxOTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHptMCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFQaG90b1ZpZGVvID0gZmFQaG90b0ZpbG07CiAgICBmYVB1bXBNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInB1bXAtbWVkaWNhbCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMDZhIiwgIk05NiAwbDAgODAgMTI4IDAgMC0yNCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDggMjk2IDhsLTcyIDAgMC04YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwQzExMC4zLTMyIDk2LTE3LjcgOTYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTY0IDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhRmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjkzXSwgImYwNmQiLCAiTTE2MC41LTI2LjRjOS4zLTcuOCAyMy03LjUgMzEuOSAuOSAxMi4zIDExLjYgMjMuMyAyNC40IDMzLjkgMzcuNCAxMy41IDE2LjUgMjkuNyAzOC4zIDQ1LjMgNjQuMiA1LjItNi44IDEwLTEyLjggMTQuMi0xNy45IDEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDcuOS05LjggMTcuNy0yMi4xIDMwLjgtMjIuMSAxMy40IDAgMjIuOCAxMS45IDMwLjggMjIuMSAxLjMgMS43IDIuNiAzLjMgMy45IDQuOCAxMC4zIDEyLjQgMjQgMzAuMyAzNy43IDUyLjQgMjcuMiA0My45IDU1LjYgMTA2LjQgNTUuNiAxNzYuNiAwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0UzAgNDExLjcgMCAyODhjMC05MS4xIDQxLjEtMTcwIDgwLjUtMjI1IDE5LjktMjcuNyAzOS43LTQ5LjkgNTQuNi02NS4xIDguMi04LjQgMTYuNS0xNi43IDI1LjUtMjQuMnpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMSA0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjQtNC41LTktMTYtOS42LTIyLjUtMmwtMjUuMiAyOS4zYy02LjYgNy42LTE4LjUgNy40LTI0LjctLjUtMTcuMy0yMi4xLTQ5LjEtNjIuNC02NS4zLTgzLTUuNC02LjktMTUuMi04LTIxLjUtMS45LTE4LjMgMTcuOC01MS41IDU2LjgtNTEuNSAxMDQuMyAwIDY4LjYgNTAuNiAxMDkuMiAxMTMuNyAxMDkuMnoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLXBsdXMiXSwgImYwMGUiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTZWFyY2hQbHVzID0gZmFNYWduaWZ5aW5nR2xhc3NQbHVzOwogICAgZmFGbGFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGMzIiwgIk0yODggMEwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMkwxMjggMjE1LjUgNy41IDQyNi4zQzIuNiA0MzUgMCA0NDQuNyAwIDQ1NC43IDAgNDg2LjQgMjUuNiA1MTIgNTcuMyA1MTJsMzMzLjQgMGMzMS42IDAgNTcuMy0yNS42IDU3LjMtNTcuMyAwLTEwLTIuNi0xOS44LTcuNS0yOC40TDMyMCAyMTUuNSAzMjAgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzM3LjcgMCAzMjAgMEwyODggMHpNMTkyIDIxNS41bDAtMTUxLjUgNjQgMCAwIDE1MS41YzAgMTEuMSAyLjkgMjIuMSA4LjQgMzEuOGw0MS42IDcyLjctMTY0IDAgNDEuNi03Mi43YzUuNS05LjcgOC40LTIwLjYgOC40LTMxLjh6Il0KICAgIH07CiAgICBmYUFsaWduUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzOCIsICJNNDQ4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDE5MiA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnptMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhQ2FibGVDYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FibGUtY2FyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjczLCA1NzU1MSwgInRyYW0iXSwgImY3ZGEiLCAiTTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCAyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM2IDAgMC05Ni4yLTE5My40IDU1LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wyMjQtNjQgMCAwIDIyNC02NGMxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0yMDYuNiA1OSAwIDEwOS45IDEzNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjB6bTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwIDAtOTYtNTYgMHptMTg0IDk2bDAtOTYtODAgMCAwIDk2IDgwIDB6bTQ4IDBsNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTU2IDAgMCA5NnoiXQogICAgfTsKICAgIGZhVHJhbSA9IGZhQ2FibGVDYXI7CiAgICBmYUtpdE1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2l0LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZmlyc3QtYWlkIl0sICJmNDc5IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNiAwIDAtMzg0LTE2IDB6bTY0IDBsMCAzODQgMjU2IDAgMC0zODQtMjU2IDB6TTQ0OCA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDAgMCAzODQgMTYgMHpNMjI0IDE4NGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhRmlyc3RBaWQgPSBmYUtpdE1lZGljYWw7CiAgICBmYUdyaXBMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmlwLWxpbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YTQiLCAiTTMyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAyODh6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MHoiXQogICAgfTsKICAgIGZhQnVyZ2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cmdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoYW1idXJnZXIiXSwgImY4MDUiLCAiTTQ4IDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDI4OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtOC44LTcuMi0xNi0xNi0xNkw0OCAzODR6TTMyIDIwMmMwIDEyLjIgOS45IDIyIDIyIDIyTDQ1OCAyMjRjMTIuMiAwIDIyLTkuOSAyMi0yMiAwLTE3LjItMi42LTM0LjQtMTAuOC00OS41LTIyLjItNDAuOC04Mi4zLTEyMC41LTIxMy4yLTEyMC41UzY1IDExMS42IDQyLjggMTUyLjVDMzQuNiAxNjcuNiAzMiAxODQuOCAzMiAyMDJ6TTAgMzA0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTI1NiA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTEyMCAxMjhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQ4LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhSGFtYnVyZ2VyID0gZmFCdXJnZXI7CiAgICBmYVNub3dtYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd21hbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk3MzEsIDk5MjRdLCAiZjdkMCIsICJNNDAzIDIxMS43YzMyLjItMjQuOSA1My02My45IDUzLTEwNy43IDAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE4NCAyOC45IDE4NCAxMDRjMCA0My45IDIwLjggODIuOSA1MyAxMDcuNy0zMi4yIDE2LjMtNTkgNDEuOC03Ni44IDczLjFMMTEyIDI2NC4yIDExMiAyMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOS42LTIyLjUtOS43Yy0xMi4yLTUuMi0yNi4zIC40LTMxLjUgMTIuNnMuNCAyNi4zIDEyLjYgMzEuNWMzNi4xIDE1LjUgNzUuOSAzMi41IDExOS40IDUxLjItMy45IDE0LjktNiAzMC42LTYgNDYuNyAwIDcwIDM5LjEgMTMwLjggOTYuNiAxNjEuOSA3LjkgNC4zIDE2LjkgNi4xIDI1LjkgNi4xbDEyMyAwYzkgMCAxOC0xLjggMjUuOS02LjEgNTcuNS0zMS4xIDk2LjYtOTIgOTYuNi0xNjEuOSAwLTE2LjItMi4xLTMxLjgtNi00Ni43IDQzLjUtMTguNyA4My40LTM1LjcgMTE5LjQtNTEuMiAxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42bC0yMi41IDkuNyAwLTE5LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MC4yLTQ4LjIgMjAuNmMtMTcuOS0zMS4zLTQ0LjYtNTYuOC03Ni44LTczLjF6TTI5NiA0MTZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQtMTIwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjQ4IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTM2OCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI5Mi4yIDE1OS4zYy0yLjctNC44LTQuMi0xMC4yLTQuMi0xNS43IDAtMTcuNSAxNC4yLTMxLjYgMzEuNi0zMS42bC44IDBjMTcuNSAwIDMxLjYgMTQuMiAzMS42IDMxLjYgMCA1LjUtMS40IDEwLjktNC4yIDE1LjdMMzI3IDE5NS44Yy0zLjEgNS40LTEwLjggNS40LTEzLjkgMGwtMjAuOS0zNi42eiJdCiAgICB9OwogICAgZmFIb3RlbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3RlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk3Nl0sICJmNTk0IiwgIk0xNiAyNEMxNiAxMC43IDI2LjcgMCA0MCAwTDQ3MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MTYgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDQwIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MTYtOCAwQzI2LjcgNDggMTYgMzcuMyAxNiAyNHptMjA4IDg4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTEyOCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem05NiAxMTJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMzUyIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTExMiAyMDhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMjQwLTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTI4OCAzODRsNDMuOCAwYzkuOSAwIDE3LjUtOSAxNC0xOC4yLTEzLjgtMzYuMS00OC44LTYxLjgtODkuNy02MS44cy03NS45IDI1LjctODkuNyA2MS44Yy0zLjUgOS4yIDQuMSAxOC4yIDE0IDE4LjJsNDMuOCAwIDAgODAgNjQgMCAwLTgweiJdCiAgICB9OwogICAgZmFQcmludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwcmludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQyNCwgMTI4NDM4LCA5MTEzXSwgImYwMmYiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM0MS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsNDIuNSA0Mi41YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNsMCAzNy41LTM4NCAwIDAtODB6TTAgMjU2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNMTI4IDQxNmwwIDMyIDI1NiAwIDAtOTYtMjU2IDAgMCA2NHpNNDU2IDI3MmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFWb2xsZXliYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbGxleWJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTIsICJ2b2xsZXliYWxsLWJhbGwiXSwgImY0NWYiLCAiTTUxMiAyNTguOWMtMjMuNCA4LTQ3LjggMTMuMS03Mi42IDE1LjEgNS45LTk4LjYtMzAuNy0xOTEuMS05NC45LTI1OC4zIDk3LjggMzYgMTY3LjUgMTMwIDE2Ny41IDI0MC4zIDAgMSAwIDEuOSAwIDIuOXptLTUuOSA1MmMtNS4yIDIzLjctMTMuNiA0Ni4yLTI0LjkgNjYuOS05NC43IDUyLjItMjE0IDUwLTMwOC40LTEzLjYgMjEuNy0zMS4zIDQ5LjgtNTguOSA4My44LTgwLjUgNzkuNSA0MS42IDE2OC41IDQ5LjEgMjQ5LjUgMjcuMXpNMjc5LjcgMjQxLjZjLTMuNy04OS43LTQxLjctMTcwLjUtMTAxLjMtMjI5LjcgMjIuMy03LjEgNDYtMTEuMiA3MC41LTExLjkgOTIuNSA1NS45IDE1MC4zIDE2MC4zIDE0Mi40IDI3My44LTM4LTMuMi03NS45LTEzLjctMTExLjYtMzIuM3pNMTMwLjUgMzIuOEMxNDkuMSA0OS4xIDE2NS44IDY3LjcgMTc5LjkgODguMiA5MS41IDEzMi4zIDI5LjcgMjEwLjMgMy43IDI5OS41IDEuMyAyODUuMyAwIDI3MC44IDAgMjU2IDAgMTYwLjIgNTIuNiA3Ni43IDEzMC41IDMyLjh6bTczLjQgOTdjMTYuMyAzNC41IDI2LjEgNzIuNiAyNy45IDExMi44LTc1LjggNDgtMTI2LjggMTIxLjMtMTQ4LjMgMjAyLjUtMTcuNi0xNi4xLTMzLTM0LjYtNDUuNS01NSAyLjEtMTA4LjEgNjMuNy0yMTAuNCAxNjUuOS0yNjAuM3pNMjU2IDUxMmMtNDcuNyAwLTkyLjMtMTMtMTMwLjUtMzUuNyA0LjgtMjQuMyAxMi42LTQ4IDIzLjItNzAuNCA4Mi40IDU0LjQgMTgwLjggNjguOSAyNzEgNDctNDQuNCAzNy0xMDEuNSA1OS4yLTE2My43IDU5LjJ6Il0KICAgIH07CiAgICBmYVZvbGxleWJhbGxCYWxsID0gZmFWb2xsZXliYWxsOwogICAgZmFUcmFmZmljTGlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhZmZpYy1saWdodCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyODY3OF0sICJmNjM3IiwgIk02NC0zMkMyOC43LTMyIDAtMy4zIDAgMzJMMCAzODRjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBzMTYwLTcxLjYgMTYwLTE2MGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NC0zMnptOTYgMzkyYzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2LTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NnptNTYtMTA0YTU2IDU2IDAgMSAxIC0xMTIgMCA1NiA1NiAwIDEgMSAxMTIgMHpNMTYwIDE1MmE1NiA1NiAwIDEgMSAwLTExMiA1NiA1NiAwIDEgMSAwIDExMnoiXQogICAgfTsKICAgIGZhUGxhbmVDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1NSIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVVzZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYwYzAiLCAiTTMyMCAxNmExMDQgMTA0IDAgMSAxIDAgMjA4IDEwNCAxMDQgMCAxIDEgMC0yMDh6TTk2IDg4YTcyIDcyIDAgMSAxIDAgMTQ0IDcyIDcyIDAgMSAxIDAtMTQ0ek0wIDQxNmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCAxMi44IDAgMjUuMiAxLjkgMzYuOSA1LjQtMzIuOSAzNi44LTUyLjkgODUuNC01Mi45IDEzOC42bDAgMTZjMCAxMS40IDIuNCAyMi4yIDYuNyAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJ6bTUyMS4zIDY0YzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtMTZjMC01My4yLTIwLTEwMS44LTUyLjktMTM4LjYgMTEuNy0zLjUgMjQuMS01LjQgMzYuOS01LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtODYuNyAwek00NzIgMTYwYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDQzMmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MHMxNjAgNzEuNiAxNjAgMTYwbDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdCiAgICB9OwogICAgZmFDZXJ0aWZpY2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZXJ0aWZpY2F0ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMGEzIiwgIk0yMzkuMi04Yy02LjEtNi4yLTE1LTguNy0yMy40LTYuNFMyMDAuOS01LjYgMTk4LjggMi44TDE4My41IDYzYy0xLjEgNC40LTUuNiA3LTkuOSA1LjdMMTEzLjggNTEuOWMtOC40LTIuNC0xNy40IDAtMjMuNSA2LjFzLTguNSAxNS4xLTYuMSAyMy41bDE2LjkgNTkuOGMxLjIgNC4zLTEuNCA4LjgtNS43IDkuOUwzNS4xIDE2Ni41Yy04LjQgMi4xLTE1IDguNy0xNy4zIDE3LjFzLjIgMTcuMyA2LjQgMjMuNGw0NC41IDQzLjNjMy4yIDMuMSAzLjIgOC4zIDAgMTEuNUwyNC4zIDMwNS4xYy02LjIgNi4xLTguNyAxNS02LjQgMjMuNHM4LjkgMTQuOSAxNy4zIDE3LjFsNjAuMiAxNS4zYzQuNCAxLjEgNyA1LjYgNS43IDkuOUw4NC4yIDQzMC41Yy0yLjQgOC40IDAgMTcuNCA2LjEgMjMuNXMxNS4xIDguNSAyMy41IDYuMWw1OS44LTE2LjljNC4zLTEuMiA4LjggMS40IDkuOSA1LjdsMTUuMyA2MC4yYzIuMSA4LjQgOC43IDE1IDE3LjEgMTcuM3MxNy4zLS4yIDIzLjQtNi40bDQzLjMtNDQuNWMzLjEtMy4yIDguMy0zLjIgMTEuNSAwTDMzNy4zIDUyMGM2LjEgNi4yIDE1IDguNyAyMy40IDYuNHMxNC45LTguOSAxNy4xLTE3LjNMMzkzLjEgNDQ5YzEuMS00LjQgNS42LTcgOS45LTUuN2w1OS44IDE2LjljOC40IDIuNCAxNy40IDAgMjMuNS02LjFzOC41LTE1LjEgNi4xLTIzLjVsLTE2LjktNTkuOGMtMS4yLTQuMyAxLjQtOC44IDUuNy05LjlsNjAuMi0xNS4zYzguNC0yLjEgMTUtOC43IDE3LjMtMTcuMXMtLjItMTcuNC02LjQtMjMuNGwtNDQuNS00My4zYy0zLjItMy4xLTMuMi04LjMgMC0xMS41bDQ0LjUtNDMuM2M2LjItNi4xIDguNy0xNSA2LjQtMjMuNHMtOC45LTE0LjktMTcuMy0xNy4xbC02MC4yLTE1LjNjLTQuNC0xLjEtNy01LjYtNS43LTkuOWwxNi45LTU5LjhjMi40LTguNCAwLTE3LjQtNi4xLTIzLjVzLTE1LjEtOC41LTIzLjUtNi4xTDQwMyA2OC44Yy00LjMgMS4yLTguOC0xLjQtOS45LTUuN0wzNzcuOCAyLjhjLTIuMS04LjQtOC43LTE1LTE3LjEtMTcuM3MtMTcuMyAuMi0yMy40IDYuNEwyOTQgMzYuNWMtMy4xIDMuMi04LjMgMy4yLTExLjUgMEwyMzkuMi04eiJdCiAgICB9OwogICAgZmFBbGFybUNsb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGFybS1jbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzkyMDBdLCAiZjM0ZSIsICJNNTA0LjQgMTMyLjVjLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMjcuOC00MC02Ni4xLTcyLjItMTExLTkyLjYtMTAuNC00LjctMTMuNy0xOC4zLTQuMS0yNC42IDE1LTkuOSAzMy0xNS43IDUyLjMtMTUuNyA1Mi42IDAgOTUuMiA0Mi42IDk1LjIgOTUuMiAwIDEzLjItMi43IDI1LjgtNy42IDM3LjN6bS00NzEuOSAuNGMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNDQuOCAyMC40LTgzLjEgNTIuNi0xMTEgOTIuNnpNMzkwLjIgNDY3LjRDMzUyLjggNDk1LjQgMzA2LjMgNTEyIDI1NiA1MTJzLTk2LjgtMTYuNi0xMzQuMS00NC42TDg2LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDM1LjItMzUuMkM0OC42IDM4NC44IDMyIDMzOC4zIDMyIDI4OCAzMiAxNjQuMyAxMzIuMyA2NCAyNTYgNjRTNDgwIDE2NC4zIDQ4MCAyODhjMCA1MC4zLTE2LjYgOTYuOC00NC42IDEzNC4ybDM1LjIgMzUuMmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzUuMi0zNS4yek0yODAgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00OS00OSAwLTk0LjF6Il0KICAgIH07CiAgICBmYUhlbGljb3B0ZXJTeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsaWNvcHRlci1zeW1ib2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUwMiIsICJNNDQ1LjQgMjI0bDY0LjcgMEM0OTUuNiAxMDguMiA0MDMuOCAxNi40IDI4OCAybDAgNjQuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS40IDIyNHpNNTEwIDI4OGwtNjQuNyAwQzQzMS45IDM2OC40IDM2OC40IDQzMS45IDI4OCA0NDUuM2wwIDY0LjdjMTE1LjgtMTQuNCAyMDcuNi0xMDYuMiAyMjItMjIyek0yIDI4OEMxNi40IDQwMy44IDEwOC4yIDQ5NS42IDIyNCA1MTBsMC02NC43QzE0My42IDQzMS45IDgwLjIgMzY4LjQgNjYuNyAyODhMMiAyODh6bTAtNjRsNjQuNyAwQzgwLjIgMTQzLjYgMTQzLjYgODAuMSAyMjQgNjYuN0wyMjQgMkMxMDguMiAxNi40IDE2LjQgMTA4LjIgMiAyMjR6bTIwNi02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgOTYgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC05NiAwIDAtNjR6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leUNyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXktY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaG91c2UtZGFtYWdlIl0sICJmNmYxIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTA1LjYgMC0zOC40LTY0IDgwLjgtNjcuM2M3LjgtNi41IDcuNi0xOC42LS40LTI0LjlMMjE4LjYgMjYzLjJjLTE0LjYtMTEuNS0zMy44IDctMjIuOCAyMkwyNTYgMzY4IDE3MC41IDQzOS4yYy02LjEgNS03LjUgMTMuOC0zLjUgMjAuNWwzMS4zIDUyLjItODYuNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6Il0KICAgIH07CiAgICBmYUhvdXNlRGFtYWdlID0gZmFIb3VzZUNoaW1uZXlDcmFjazsKICAgIGZhUGVyc29uTWlsaXRhcnlQb2ludGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktcG9pbnRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU0YSIsICJNMjE0LjkgMTQuMUMyMDIgMTUuMiAxOTIgMjYgMTkyIDM5IDE5MiA1Mi44IDIwMy4yIDY0IDIxNyA2NGwxNTEgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMC42QzM4NCA4IDM3NiAuNyAzNjYuNyAxLjRMMjE0LjkgMTQuMXpNMjA4IDExMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2TDIwOS42IDk2Yy0xIDUuMi0xLjYgMTAuNS0xLjYgMTZ6TTQwIDIyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwxNTIgMCAwIDg5LjQgMTYyLjgtMTYyLjhjLTEzLjMtNC4zLTI3LjMtNi41LTQxLjYtNi41TDQwIDIyNHptMzQ1LjcgMjAuOWwtMTcxLjEgMTcxLjEgMTY5LjQgMCAwLTQ2LjMgNTMuNiA5MC42YzExLjIgMTkgMzUuOCAyNS4zIDU0LjggMTQuMXMyNS4zLTM1LjggMTQuMS01NC44TDQzMC4zIDI5MC44Yy0xMS4yLTE5LTI2LjYtMzQuNS00NC42LTQ1Ljl6TTE5MiA0NDhsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyLTE5MiAweiJdCiAgICB9OwogICAgZmFEYXRhYmFzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkYXRhYmFzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWMwIiwgIk00NDggMjA1LjhjLTE0LjggOS44LTMxLjggMTcuNy00OS41IDI0LTQ3IDE2LjgtMTA4LjcgMjYuMi0xNzQuNSAyNi4yUzk2LjQgMjQ2LjUgNDkuNSAyMjkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCAyODhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC04Mi4yem0wLTc3LjhsMC00OEM0NDggMzUuOCAzNDcuNyAwIDIyNCAwUzAgMzUuOCAwIDgwbDAgNDhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODB6TTM5OC41IDM4OS44QzM1MS42IDQwNi41IDI4OS45IDQxNiAyMjQgNDE2Uzk2LjQgNDA2LjUgNDkuNSAzODkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCA0MzJjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC02Ni4yYy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNHoiXQogICAgfTsKICAgIGZhTmV3c3BhcGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXdzcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDBdLCAiZjFlYSIsICJNMCA0MTZMMCAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0TDk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTE2MCAxMjhsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0yNCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0MCAwem0tMjQtNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzYwIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAweiJdCiAgICB9OwogICAgZmFDbG91ZFJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtcmFpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc4MywgOTkyNl0sICJmNzNkIiwgIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDMyMHptMS42IDY4LjJjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2bDMwLjItNjguMnptMTUyIDBjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2bDMwLjItNjguMnptMTIxLjggNjguMmwzMC4yLTY4LjJjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2eiJdCiAgICB9OwogICAgZmFNYXhpbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXhpbWl6ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJleHBhbmQtYXJyb3dzLWFsdCJdLCAiZjMxZSIsICJNMTY4IDMyTDI0IDMyQzEwLjcgMzIgMCA0Mi43IDAgNTZMMCAyMDBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgMjIzLjggNDEgMjE3bDQwLTQwIDc5IDc5LTc5IDc5LTQwLTQwYy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzAgMzAyLjMgMCAzMTJMMCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC00MC00MCA3OS03OSA3OSA3OS00MCA0MGMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMyNzAuMyA0ODAgMjgwIDQ4MGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJzLTE5LjMtMS43LTI2LjIgNS4ybC00MCA0MC03OS03OSA3OS03OSA0MCA0MGM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzQ0OCAyMDkuNyA0NDggMjAwbDAtMTQ0YzAtMTMuMy0xMC43LTI0LTI0LTI0TDI4MCAzMmMtOS43IDAtMTguNSA1LjgtMjIuMiAxNC44UzI1Ni4yIDY2LjEgMjYzIDczbDQwIDQwLTc5IDc5LTc5LTc5IDQwLTQwYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIgMTY4IDMyeiJdCiAgICB9OwogICAgZmFFeHBhbmRBcnJvd3NBbHQgPSBmYU1heGltaXplOwogICAgZmFMb2NhdGlvbkFycm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2F0aW9uLWFycm93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMjQiLCAiTTQ3Ny45IDc1LjVjNC41LTExLjggMS43LTI1LjItNy4yLTM0LjFzLTIyLjMtMTEuOC0zNC4xLTcuMmwtNDE2IDE2MEM3LjkgMTk5LS4zIDIxMS4yIDAgMjI0LjdzOS4xIDI1LjQgMjEuOSAyOS42bDE3Ni44IDU4LjkgNTguOSAxNzYuOGM0LjMgMTIuOCAxNi4xIDIxLjYgMjkuNiAyMS45czI1LjctNy45IDMwLjYtMjAuNWwxNjAtNDE2eiJdCiAgICB9OwogICAgZmFDaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpdHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NjFdLCAiZjY0ZiIsICJNMzIwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzItNDggMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNjQgMCAwLTcyQzk2IDEwLjcgODUuMyAwIDcyIDBTNDggMTAuNyA0OCAyNGwwIDc0Yy0yNy42IDcuMS00OCAzMi4yLTQ4IDYyTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwIDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDMyMCAwem02NCAxMTJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnptLTE2IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6bTE2IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2em0xMTItMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMjU2IDMwNGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0yNDAgMTkyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTEyOCAzMDRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMTEyIDE5MmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAweiJdCiAgICB9OwogICAgZmFYUmF5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIngtcmF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0OTciLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6bTI4MCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMCAwIDQ4LTgwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMCAwIDQ4LTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtNDggODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMCAwLTQ4IDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDAgMC0xNnoiXQogICAgfTsKICAgIGZhVW1icmVsbGFCZWFjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bWJyZWxsYS1iZWFjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1OF0sICJmNWNhIiwgIk00OTcuNSAzNDEuMWMtNS45IDE2LjctMjUuMyAyMy00MS4xIDE1LjFsLTE3OC4yLTg5LjEtMS42IDMuMi04OC44IDE3Ny43IDI5Mi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDg0LjIgMCAxMDMuMi0yMDYuMyAxLjYtMy4yLTE2NS40LTgyLjdjLTE1LjgtNy45LTIyLjQtMjcuMy0xMi41LTQyIDQ1LjktNjguNiAxMjQuMS0xMTMuOCAyMTIuOS0xMTMuOCAxNDEuNCAwIDI1NiAxMTQuNiAyNTYgMjU2IDAgMjkuOC01LjEgNTguNS0xNC41IDg1LjF6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRUb0JyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtdG8tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWluIl0sICJmMDkwIiwgIk0zNTIgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptLTkuNCAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjQyLjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFTaWduSW4gPSBmYUFycm93UmlnaHRUb0JyYWNrZXQ7CiAgICBmYUhlYWRzZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZHNldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTkwIiwgIk0yMjQgNjRjLTc5IDAtMTQ0LjcgNTcuMy0xNTcuNyAxMzIuNyA5LjMtMyAxOS4zLTQuNyAyOS43LTQuN2wxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC02NEMwIDEwMC4zIDEwMC4zIDAgMjI0IDBTNDQ4IDEwMC4zIDQ0OCAyMjRsMCAxNjguMWMwIDY2LjMtNTMuOCAxMjAtMTIwLjEgMTIwbC04Ny45LS4xLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDAgNDAgMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTIwLjljLTE0LjEgOC4yLTMwLjUgMTIuOC00OCAxMi44bC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDBjMTAuNCAwIDIwLjMgMS42IDI5LjcgNC43LTEzLTc1LjMtNzguNi0xMzIuNy0xNTcuNy0xMzIuN3oiXQogICAgfTsKICAgIGZhU3Bsb3RjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGxvdGNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmMiLCAiTTIwOC41IDYyLjNsMjguMS0zNi45QzI0OC44IDkuNCAyNjcuOCAwIDI4OCAwIDMxNi41IDAgMzQxLjYgMTguNyAzNDkuOCA0NmwxNy44IDU5LjRjMTAuMyAzNC40IDM2LjEgNjIgNjkuOCA3NC42bDM5LjggMTQuOWMyMC45IDcuOSAzNC44IDI3LjkgMzQuOCA1MC4yIDAgMTYuOS03LjkgMzIuOC0yMS41IDQyLjlsLTY3LjMgNTAuNWMtMjQuMyAxOC4yLTM3LjIgNDcuOS0zMy44IDc4LjFsMi41IDIyLjdjNC4zIDM4LjctMjYgNzIuNi02NSA3Mi42LTE0LjggMC0yOS4zLTUuMS00MC45LTE0LjNsLTU1LjMtNDQuM2MtNC41LTMuNi05LjMtNi43LTE0LjUtOS4yLTE1LjgtNy45LTMzLjctMTAuNC01MS03LjNMODIuNCA0NTEuOWMtMzQuNiA2LjMtNjYuNC0yMC4zLTY2LjQtNTUuNCAwLTEzLjIgNC43LTI2IDEzLjEtMzYuMmwxMS4yLTEzLjRjMTQuNi0xNy40IDIyLjYtMzkuNCAyMi42LTYyLjEgMC0xOC44LTUuNS0zNy4yLTE1LjgtNTNMOC44IDE3My41QzMuMSAxNjQuNyAwIDE1NC40IDAgMTQzLjkgMCAxMTAuNSAzMC4xIDg1LjEgNjMgOTAuN2w1MS4zIDguN2MzNS45IDYuMSA3Mi4yLTguMiA5NC4yLTM3LjF6Il0KICAgIH07CiAgICBmYVVwTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctYWx0LXVwIl0sICJmMzBjIiwgIk0xMzcuNC0yMi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzAwLjkgMTYwIDI4OCAxNjBsLTY0IDAgMCAzMzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzM2LTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTE0LjUgOS40IDEwNS40bDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdFVwID0gZmFVcExvbmc7CiAgICBmYUhleGFnb25Ob2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZXhhZ29uLW5vZGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2OTkiLCAiTTI0OCAxMDYuNmMxOC45LTkgMzItMjguMyAzMi01MC42YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2YzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTIuOCAxLjMtNS41IDIuOS04IDQuN2wtODAuMS00NS44YzEuNi0yMC44LTguNi00MS42LTI3LjktNTIuOEM1Ny4yIDk2IDIzIDEwNS4yIDcuNSAxMzJTMS4yIDE5MyAyOCAyMDguNWMxLjMgLjggMi42IDEuNSA0IDIuMWwwIDkwLjhjLTEuMyAuNi0yLjcgMS4zLTQgMi4xQzEuMiAzMTktOCAzNTMuMiA3LjUgMzgwUzU3LjIgNDE2IDg0IDQwMC41YzE5LjMtMTEuMSAyOS40LTMyIDI3LjgtNTIuOGw1MC41LTI4LjljLTExLjUtMTEuMi0xOS45LTI1LjYtMjMuOC00MS43TDg4IDMwNi4xYy0yLjYtMS44LTUuMi0zLjMtOC00LjdsMC05MC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLS4xIDEuNC0uMiAyLjgtLjIgNC4zYzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTE4LjkgOS0zMiAyOC4zLTMyIDUwLjZjMCAzMC45IDI1LjEgNTYgNTYgNTZzNTYtMjUuMSA1Ni01NmMwLTIyLjMtMTMuMS00MS42LTMyLTUwLjZsMC05OC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLTEuNiAyMC44IDguNiA0MS42IDI3LjggNTIuOGMyNi44IDE1LjUgNjEgNi4zIDc2LjUtMjAuNXM2LjMtNjEtMjAuNS03Ni41Yy0xLjMtLjgtMi43LTEuNS00LTIuMWwwLTkwLjhjMS40LS42IDIuNy0xLjMgNC0yLjFjMjYuOC0xNS41IDM2LTQ5LjcgMjAuNS03Ni41UzM5MC44IDk2IDM2NCAxMTEuNWMtMTkuMyAxMS4xLTI5LjQgMzItMjcuOCA1Mi44bC01MC42IDI4LjljMTEuNSAxMS4yIDE5LjkgMjUuNiAyMy44IDQxLjdMMzYwIDIwNS45YzIuNiAxLjggNS4yIDMuMyA4IDQuN2wwIDkwLjhjLTIuOCAxLjMtNS41IDIuOS04IDQuNmwtODAuMS00NS44Yy4xLTEuNCAuMi0yLjggLjItNC4zYzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4Ljh6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3MywgNjI1ODksICJob3NwaXRhbC1hbHQiLCAiaG9zcGl0YWwtd2lkZSJdLCAiZjBmOCIsICJNMTI4IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjQgNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMC02NHpNMjcyIDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MCA5NiAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDB6TTEyOCAzNjhsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNMTEyIDI1NmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwek01MTIgMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNMjY0IDEwNGwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxBbHQyID0gZmFIb3NwaXRhbDI7CiAgICBmYUhvc3BpdGFsV2lkZTIgPSBmYUhvc3BpdGFsMjsKICAgIGZhUGVyc29uSGFyYXNzaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oYXJhc3NpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU0OSIsICJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOSA4OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDQuNyA0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43bC0zNS45IDBjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45ek00ODAgMjQwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAzNDRsMCA1OC43LTQxLjQtNDEuNGMtNy4zLTcuMy0xNy42LTEwLjYtMjcuOC05cy0xOC45IDguMS0yMy41IDE3LjNsLTQ4IDk2Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsMjguMS01Ni4zIDU0LjcgNTQuN2MxMi40IDEyLjQgMjkuMSAxOS4zIDQ2LjYgMTkuMyAzNi40IDAgNjUuOS0yOS41IDY1LjktNjUuOUw1NzYgMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2bDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLS44IDQ5LjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJzLS43IDE3LjUgNy4yIDIxLjVsNDggMjRjNy45IDQgMTcuNSAuNyAyMS41LTcuMnMuNy0xNy41LTcuMi0yMS41bC00OC0yNHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsVHJlbmRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXRyZW5kLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjkiLCAiTTQ4MCA4YzAtMTMuMy0xMC43LTI0LTI0LTI0TDM1NC4yLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQzLjkgMC0xMTEuMyAxMTEuMy05NS4xLTgxLjVjLTktNy43LTIyLjItNy43LTMxLjIgMGwtMTEyIDk2Yy0xMC4xIDguNi0xMS4yIDIzLjgtMi42IDMzLjhzMjMuOCAxMS4yIDMzLjggMi42bDk2LjQtODIuNiA5Ni40IDgyLjZjOS41IDguMiAyMy43IDcuNiAzMi42LTEuM2wxMjctMTI3IDAgNDMuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0TDQ4MCA4ek00OCAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnptNDcuMyA1NmMtMy40IDIwLjEtMTkuMiAzNi0zOS40IDM5LjQtNC40IC43LTgtMi45LTgtNy4zbDAtMzJjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOC4xIDMuNiA3LjMgOHptMCAxNDQuMWMuNyA0LjQtMi45IDgtNy4zIDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTMyYzAtNC40IDMuNi04LjEgOC03LjMgMjAuMSAzLjQgMzYgMTkuMiAzOS40IDM5LjR6TTQ1NiA0MTYuN2M0LjQtLjcgOCAyLjkgOCA3LjNsMCAzMmMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTguMS0zLjYtNy4zLTggMy40LTIwLjEgMTkuMi0zNiAzOS40LTM5LjR6TTQxNi43IDMxMmMtLjctNC40IDIuOS04IDcuMy04bDMyIDBjNC40IDAgOCAzLjYgOCA4bDAgMzJjMCA0LjQtMy42IDguMS04IDcuMy0yMC4xLTMuNC0zNi0xOS4yLTM5LjQtMzkuNHpNMTkyIDM4NGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYVBlblJ1bGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1ydWxlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwZW5jaWwtcnVsZXIiXSwgImY1YWUiLCAiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek01OC45IDMxNS4xTDI3NC4xIDEwMCA0MTIgMjM3LjkgMTk2LjkgNDUzLjFjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTExLjFjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4ycy04LjUtMTUuMS02LjItMjMuNEwzNi40IDM1My44YzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4Ljd6TTIyNS40IDgwLjhMODAuOCAyMjUuNCAxMS43IDE1Ni4zYy0xNS42LTE1LjYtMTUuNi00MC45IDAtNTYuNmw4OC04OGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMGw1LjkgNS45LTU2LjMgNTYuM2MtNy44IDcuOC03LjggMjAuNSAwIDI4LjNzMjAuNSA3LjggMjguMyAwbDU2LjMtNTYuMyAzNC45IDM0Ljl6TTQzMS4yIDI4Ni42bDM0LjkgMzQuOS01Ni4zIDU2LjNjLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zczIwLjUgNy44IDI4LjMgMGw1Ni4zLTU2LjMgNS45IDUuOWMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtODggODhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwbC02OS4xLTY5LjEgMTQ0LjYtMTQ0LjZ6Il0KICAgIH07CiAgICBmYVBlbmNpbFJ1bGVyID0gZmFQZW5SdWxlcjsKICAgIGZhUmVwZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcGVhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1N10sICJmMzYzIiwgIk00NzAuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM1MiAxOS4xIDM1MiAzMmwwIDMyLTE2MCAwQzg2IDY0IDAgMTUwIDAgMjU2IDAgMjczLjcgMTQuMyAyODggMzIgMjg4czMyLTE0LjMgMzItMzJjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsMTYwIDAgMCAzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0ek00MS40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOVMxNjAgNDkyLjkgMTYwIDQ4MGwwLTMyIDE2MCAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNjAgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHoiXQogICAgfTsKICAgIGZhQm9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib25lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDYwXSwgImY1ZDciLCAiTTE5Ny40IDE2MGMtMy45IDAtNy4yLTIuOC04LjEtNi42LTEwLjItNDIuMS00OC4xLTczLjQtOTMuMy03My40LTUzIDAtOTYgNDMtOTYgOTYgMCAyOS4xIDEyLjkgNTUuMSAzMy4zIDcyLjcgNC4zIDMuNyA0LjMgMTAuOCAwIDE0LjUtMjAuNCAxNy42LTMzLjMgNDMuNy0zMy4zIDcyLjcgMCA1MyA0MyA5NiA5NiA5NiA0NS4yIDAgODMuMS0zMS4zIDkzLjMtNzMuNCAuOS0zLjggNC4yLTYuNiA4LjEtNi42bDI0NS4xIDBjMy45IDAgNy4yIDIuOCA4LjEgNi42IDEwLjIgNDIuMSA0OC4xIDczLjQgOTMuMyA3My40IDUzIDAgOTYtNDMgOTYtOTYgMC0yOS4xLTEyLjktNTUuMS0zMy4zLTcyLjctNC4zLTMuNy00LjMtMTAuOCAwLTE0LjUgMjAuNC0xNy42IDMzLjMtNDMuNyAzMy4zLTcyLjcgMC01My00My05Ni05Ni05Ni00NS4yIDAtODMuMSAzMS4zLTkzLjMgNzMuNC0uOSAzLjgtNC4yIDYuNi04LjEgNi42bC0yNDUuMSAweiJdCiAgICB9OwogICAgZmFGaXJlRmxhbWVDdXJ2ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZS1mbGFtZS1jdXJ2ZWQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlyZS1hbHQiXSwgImY3ZTQiLCAiTTE1My42IDI5LjlsMTYtMjEuM0MxNzMuNiAzLjIgMTgwIDAgMTg2LjcgMCAxOTguNCAwIDIwOCA5LjYgMjA4IDIxLjNsMCAyMi4xYzAgMTMuMSA1LjQgMjUuNyAxNC45IDM0LjdMMzA3LjYgMTU5QzM1Ni40IDIwNS42IDM4NCAyNzAuMiAzODQgMzM3LjcgMzg0IDQzNCAzMDYgNTEyIDIwOS43IDUxMkwxOTIgNTEyQzg2IDUxMiAwIDQyNiAwIDMyMGwwLTMuOGMwLTQ4LjggMTkuNC05NS42IDUzLjktMTMwLjFsMy41LTMuNWM0LjItNC4yIDEwLTYuNiAxNi02LjYgMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjZMOTYgMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC0zLjljMC0xOC03LjItMzUuMy0xOS45LTQ4bC0zOC42LTM4LjZjLTI0LTI0LTM3LjUtNTYuNy0zNy41LTkwLjcgMC0yNy43IDktNTQuOCAyNS42LTc2Ljl6Il0KICAgIH07CiAgICBmYUZpcmVBbHQgPSBmYUZpcmVGbGFtZUN1cnZlZDsKICAgIGZhQnVzU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cy1zaW1wbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYnVzLWFsdCJdLCAiZjU1ZSIsICJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTk2IDMyMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI1NiAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQnVzQWx0ID0gZmFCdXNTaW1wbGU7CiAgICBmYVZlbnVzTWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZW51cy1tYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5Ml0sICJmMjI4IiwgIk00ODAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyUzQ2Mi4zIDAgNDgwIDBMNTMwLjcgMCA0NzQgNTYuN2MtMjYuMy0xNS43LTU3LjEtMjQuNy05MC0yNC43LTM1LjQgMC02OC40IDEwLjUtOTYgMjguNS0yNy42LTE4LTYwLjYtMjguNS05Ni0yOC41LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzIzLjMtNC4zIDQ0LjktMTMuMSA2NC0yNS42IDI3LjYgMTggNjAuNiAyOC41IDk2IDI4LjUgOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzYgMC00MS4xLTE0LjEtNzktMzcuOC0xMDlMNTc2IDQ1LjMgNTc2IDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMNDgwLTY0ek0zMzYgMzA5LjJjMjAuMi0yOC42IDMyLTYzLjUgMzItMTAxLjJzLTExLjgtNzIuNi0zMi0xMDEuMmMxNC42LTYuOSAzMC44LTEwLjggNDgtMTAuOCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NDUuOSAzMjAgMzg0IDMyMGMtMTcuMiAwLTMzLjUtMy45LTQ4LTEwLjh6TTI4OCAxNTAuM2MxMC4yIDE2LjkgMTYgMzYuNiAxNiA1Ny43cy01LjggNDAuOS0xNiA1Ny43Yy0xMC4yLTE2LjktMTYtMzYuNi0xNi01Ny43czUuOC00MC45IDE2LTU3Ljd6bS00OC00My41Yy0yMC4yIDI4LjYtMzIgNjMuNS0zMiAxMDEuMnMxMS44IDcyLjYgMzIgMTAxLjJjLTE0LjUgNi45LTMwLjggMTAuOC00OCAxMC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NmMxNy4yIDAgMzMuNSAzLjkgNDggMTAuOHoiXQogICAgfTsKICAgIGZhQmxlbmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibGVuZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTciLCAiTTAgNTZDMCAyNS4xIDI1LjEgMCA1NiAwTDQzNy42IDBjMjEuMyAwIDM2LjYgMjAuMyAzMC44IDQwLjhMNDU3LjEgODAgMzQ0IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk5LjQgMC0xOC4zIDY0LTgxLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny40IDAtMjcuNCA5Ni0yNTYgMC05LjEtOTYtNjIuOSAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDU2ek0xMTQuMyAxOTJMMTAwLjYgNDggNTYgNDhjLTQuNCAwLTggMy42LTggOGwwIDEyOGMwIDQuNCAzLjYgOCA4IDhsNTguMyAwek0xMzYgMzg0bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFVID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMTddLCAiNTUiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDEwNi04NiAxOTItMTkyIDE5MlMwIDM5NCAwIDI4OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFTaGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtYWlsLWZvcndhcmQiXSwgImYwNjQiLCAiTTMwNy44IDE4LjRjLTEyIDUtMTkuOCAxNi42LTE5LjggMjkuNmwwIDgwLTExMiAwYy05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDExMy4zIDgxLjUgMTYzLjkgMTAwLjIgMTc0LjEgMi41IDEuNCA1LjMgMS45IDguMSAxLjkgMTAuOSAwIDE5LjctOC45IDE5LjctMTkuNyAwLTcuNS00LjMtMTQuNC05LjgtMTkuNS05LjQtOC44LTIyLjItMjYuNC0yMi4yLTU2LjcgMC01MyA0My05NiA5Ni05Nmw5NiAwIDAgODBjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXoiXQogICAgfTsKICAgIGZhTWFpbEZvcndhcmQgPSBmYVNoYXJlOwogICAgZmFQaG9uZUZsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUtZmxpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM4MSwgInBob25lLWFsdCJdLCAiZjg3OSIsICJNMzUxLjggMjVjNy44LTE4LjggMjguNC0yOC45IDQ4LjEtMjMuNWw1LjUgMS41YzY0LjYgMTcuNiAxMTkuOCA4MC4yIDEwMy43IDE1Ni40LTM3LjEgMTc1LTE3NC44IDMxMi43LTM0OS44IDM0OS44LTc2LjMgMTYuMi0xMzguOC0zOS4xLTE1Ni40LTEwMy43bC0xLjUtNS41Yy01LjQtMTkuNyA0LjctNDAuMyAyMy41LTQ4LjFsOTcuMy00MC41YzE2LjUtNi45IDM1LjYtMi4xIDQ3IDExLjhsMzguNiA0Ny4yYzcwLjMtMzQuOSAxMjYuOC05My4zIDE1OS4zLTE2NC45bC00NC4xLTM2LjFjLTEzLjktMTEuMy0xOC42LTMwLjQtMTEuOC00N0wzNTEuOCAyNXoiXQogICAgfTsKICAgIGZhUGhvbmVBbHQgPSBmYVBob25lRmxpcDsKICAgIGZhVG9pbGV0UG9ydGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBvcnRhYmxlIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1ODMiLCAiTTAgNjRsMCAxNiAzMjAgMCAwLTE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0em0yNCA2NEwwIDEyOCAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAyMjQgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTM2MC0yOTYgMHptMjI0IDk2bDI0IDAgMCA5Ni0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQZXJzb25QcmVnbmFudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcHJlZ25hbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTMxZSIsICJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem04MCAzMjEuMmM4LjYtNC41IDE2LjgtMTAgMjQuMy0xNi41bDQtMy40YzIyLjYtMTkuNCAzNS43LTQ3LjcgMzUuNy03Ny42IDAtMzUuOS0xOC44LTY5LjEtNDkuNi04Ny42bC0zMC40LTE4LjIgMC0xLjhjMC00Ni41LTM3LjctODQuMS04NC4xLTg0LjEtMjguMSAwLTU0LjQgMTQuMS03MCAzNy41TDIxLjQgMjcwLjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45bDI5LTQzLjUtMzAuNSAxMTMuNWMtMi42IDkuNi0uNiAxOS45IDUuNSAyNy44Uzk0IDQxNiAxMDQgNDE2bDggMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMC44eiJdCiAgICB9OwogICAgZmFMZXNzVGhhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzLXRoYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2Mjc3NF0sICIzYyIsICJNNDc3LjEgNTAuNmM3LjQgMTYgLjQgMzUuMS0xNS42IDQyLjVMMTA4LjQgMjU2IDQ2MS40IDQxOWMxNiA3LjQgMjMgMjYuNCAxNS42IDQyLjVzLTI2LjQgMjMtNDIuNSAxNS42bC00MTYtMTkyQzcuMyAyNzkuOCAwIDI2OC41IDAgMjU2UzcuMyAyMzIuMiAxOC42IDIyN2w0MTYtMTkyYzE2LTcuNCAzNS4xLS40IDQyLjUgMTUuNnoiXQogICAgfTsKICAgIGZhU3VwZXJzY3JpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VwZXJzY3JpcHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyYiIsICJNNTQ0IDMyYzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40bC0zMiAxNkM0NDkuOSAyNy4zIDQ0My41IDQ2LjUgNDUxLjQgNjIuMyA0NTcgNzMuNSA0NjguMyA4MCA0ODAgODBsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4ek05NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZzMTQuMyAzMiAzMiAzMmwxNS4zIDAgODkuNiAxMjgtODkuNiAxMjgtMTUuMyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwyNDAgMzExLjggMzI1LjggNDM0LjRjNiA4LjYgMTUuOCAxMy42IDI2LjIgMTMuNmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNS4zIDAtODkuNi0xMjggODkuNi0xMjggMTUuMyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDI0MCAyMDAuMiAxNTQuMiA3Ny42QzE0OC4yIDY5LjEgMTM4LjQgNjQgMTI4IDY0TDk2IDY0eiJdCiAgICB9OwogICAgZmFDaXJjbGVTdG9wMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtc3RvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCAic3RvcC1jaXJjbGUiXSwgImYyOGQiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xOTIgMTYwbDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVN0b3BDaXJjbGUyID0gZmFDaXJjbGVTdG9wMjsKICAgIGZhQXJyb3dzVXBEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy11cC1kb3duIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbImFycm93cy12Il0sICJmMDdkIiwgIk0xNTAuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgNzcuMyA5NiA0MzQuNyA1NC42IDM5My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRzMTYuNi0zLjQgMjIuNi05LjRsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTQxLjQgNDEuNCAwLTM1Ny41IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXQogICAgfTsKICAgIGZhQXJyb3dzViA9IGZhQXJyb3dzVXBEb3duOwogICAgZmFQb29TdG9ybSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwb28tc3Rvcm0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicG9vLWJvbHQiXSwgImY3NWEiLCAiTTI2OC45LTMxLjhjLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS4zYzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjEgMCAyMS43LTguNSAzNy4yLTIxLjkgNDcuNi0xMy45IDEwLjgtMzQuMSAxNy01OC4xIDE3bC0yNCAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjggMy43IDI4LjggMTAuMiA0MS4xLTQyIDYuNi03NC4yIDQzLTc0LjIgODYuOSAwIDQ2LjYgMzYuMiA4NC43IDgxLjkgODcuOCAzLjEtMTIuNCA5LjktMjMuOCAxOS42LTMyLjVMMjQyLjcgMjI1YzEyLjItMTAuOSAyOC0xNyA0NC40LTE3IDQ0LjYgMCA3Ni41IDQzIDYzLjcgODUuN2wtMTIuNyA0Mi40YzI4LjggMS4yIDUyLjcgMjEuMSA1OS44IDQ3LjlsMjYuMiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4IDAtNDMuOS0zMi4xLTgwLjMtNzQuMi04Ni45IDYuNS0xMi4zIDEwLjItMjYuMiAxMC4yLTQxLjEgMC00OC42LTM5LjQtODgtODgtODhsLTkuNCAwYy45LTUuNCAxLjQtMTAuOSAxLjQtMTYuNiAwLTQ4LjctMzYuMS04OC45LTgzLjEtOTUuMnpNMTQ0LjYgNDE2bDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzQ2LjUgNDEyLjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDEzMy41IDM4Ny4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdCiAgICB9OwogICAgZmFQb29Cb2x0ID0gZmFQb29TdG9ybTsKICAgIGZhVmlkZW9TbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWRlby1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGUyIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNTMtMTUzIDAtMjIyLjJjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI5LjggNjQgNDEtMjQuOXpNMzIgMTI4bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzcuOCAwIDE1LjMtMS40IDIyLjItNEwzNiAxMDUuOGMtMi42IDYuOS00IDE0LjQtNCAyMi4yek00NjQgMzM2bDczLjUgNTguOGM0LjIgMy40IDkuNCA1LjIgMTQuOCA1LjIgMTMuMSAwIDIzLjctMTAuNiAyMy43LTIzLjdsMC0yNDAuNmMwLTEzLjEtMTAuNi0yMy43LTIzLjctMjMuNy01LjQgMC0xMC42IDEuOC0xNC44IDUuMkw0NjQgMTc2IDQ2NCAzMzZ6Il0KICAgIH07CiAgICBmYVNxdWFyZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDYyLCAidGltZXMtc3F1YXJlIiwgInhtYXJrLXNxdWFyZSJdLCAiZjJkMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFUaW1lc1NxdWFyZSA9IGZhU3F1YXJlWG1hcms7CiAgICBmYVhtYXJrU3F1YXJlID0gZmFTcXVhcmVYbWFyazsKICAgIGZhSGFuZEhvbGRpbmdEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1kcm9wbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhhbmQtaG9sZGluZy13YXRlciJdLCAiZjRjMSIsICJNMjc1LjUgNi42TDIwOS4yIDEwM0MxOTggMTE5LjMgMTkyIDEzOC42IDE5MiAxNTguM2wwIDEuN2MwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMS43YzAtMTkuOC02LTM5LTE3LjItNTUuM0wzMDAuNSA2LjZDMjk3LjcgMi41IDI5MyAwIDI4OCAwcy05LjcgMi41LTEyLjUgNi42ek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdXYXRlciA9IGZhSGFuZEhvbGRpbmdEcm9wbGV0OwogICAgZmFXb25TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndvbi1zaWduIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODM2MSwgImtydyIsICJ3b24iXSwgImYxNTkiLCAiTTYyLjQgNTMuOUM1Ni44IDM3LjEgMzguNyAyOC4xIDIxLjkgMzMuNlMtMy45IDU3LjQgMS43IDc0LjFMNTYuOSAyNDAgMzIgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwLjkgMCA1Ni43IDE3MC4xYzQuNSAxMy41IDE3LjQgMjIuNCAzMS42IDIxLjlzMjYuNC0xMC40IDI5LjgtMjQuMkwyMzMgMjg4IDI3OSAyODggMzIxIDQ1NS44YzMuNCAxMy44IDE1LjYgMjMuNyAyOS44IDI0LjJzMjcuMS04LjQgMzEuNi0yMS45TDQzOS4xIDI4OCA0ODAgMjg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNC45IDAgNTUuMy0xNjUuOWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtNjIgMTg2LjEtNTQuNiAwLTQ1LjktMTgzLjhDMjgzLjUgNDIgMjcwLjcgMzIgMjU2IDMycy0yNy41IDEwLTMxIDI0LjJMMTc5IDI0MCAxMjQuNCAyNDAgNjIuNCA1My45em03OCAyMzQuMWwyNi42IDAtMTEuNCA0NS42LTE1LjItNDUuNnpNMjQ1IDI0MGwxMS00NC4xIDExIDQ0LjEtMjIgMHptMTAwIDQ4bDI2LjYgMC0xNS4yIDQ1LjYtMTEuNC00NS42eiJdCiAgICB9OwogICAgZmFLcncgPSBmYVdvblNpZ247CiAgICBmYVdvbiA9IGZhV29uU2lnbjsKICAgIGZhT2JqZWN0VW5ncm91cDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LXVuZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI0OCIsICJNMzIgMTE5LjRDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDAgODcuNyAwIDEwOC40IDEyLjkgMTE5LjQgMzJsMjA5LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDExMy4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTExMy4xek0xMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40bDAgMTEzLjFjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjFjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNEwxMTkuNCA5NnpNNTQ0IDI3OS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRsLTI5LjIgMGMtNS4zLTE3LjctMTQuOC0zMy41LTI3LjQtNDYuNGwwLTE3LjYgNTYuNiAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTIwOS4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjQuNiA2NCAwIDAgMjQuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjA5LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0xMTMuMXoiXQogICAgfTsKICAgIGZhQ29tbWVudDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ4OSwgNjE2NjldLCAiZjA3NSIsICJNNTEyIDI0MGMwIDEzMi41LTExNC42IDI0MC0yNTYgMjQwLTM3LjEgMC03Mi4zLTcuNC0xMDQuMS0yMC43TDMzLjUgNTEwLjFjLTkuNCA0LTIwLjIgMS43LTI3LjEtNS44Uy0yIDQ4NS44IDIuOCA0NzYuOGw0OC44LTkyLjJDMTkuMiAzNDQuMyAwIDI5NC4zIDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MHoiXQogICAgfTsKICAgIGZhSGlsbEF2YWxhbmNoZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWxsLWF2YWxhbmNoZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTA3IiwgIk00NDAuMSA0MDEuOWMzNC4yIDIzLjEgODEuMSAxOS41IDExMS40LTEwLjggMzQuNC0zNC40IDM0LjQtOTAuMSAwLTEyNC41LTI3LjgtMjcuOC02OS41LTMzLjEtMTAyLjYtMTYtMTEuOCA2LjEtMTYuNCAyMC42LTEwLjMgMzIuM3MyMC42IDE2LjQgMzIuMyAxMC4zYzE1LjEtNy44IDM0LTUuMyA0Ni42IDcuMyAxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtODEuNy04MS43YzIyLjMtMTQuMiAzNy4xLTM5LjEgMzcuMS02Ny41IDAtMzMuOS0yMS4xLTYyLjktNTAuOS03NC41IDEuOS02LjggMi45LTE0IDIuOS0yMS41IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI3LjMgMC01MS41IDEzLjctNjUuOSAzNC42LTUuOC0yMC0yNC4yLTM0LjYtNDYuMS0zNC42LTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNCAuNSA3LjkgMS40IDExLjZMNDQwLjEgNDAxLjl6TTQ4MC40IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNjguNyA4N0M0My41IDYxLjggLjQgNzkuNyAuNCAxMTUuM0wuNCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMzE2LjcgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM0w2OC43IDg3eiJdCiAgICB9OwogICAgZmFBcnJvd3NUb0V5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdG8tZXllIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YmYiLCAiTTE3NiA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDM4LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzIxLjcgNTUuNiAzMSA2NWw2MyA2My0zOC4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTk2em0wIDQwMGwwLTk2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDM4LjEgMC02MyA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDYzLTYzIDAgMzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em0zMTIgMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0zOC4xIDYzIDYzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgMzguMSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0ek00NjQgNTZsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zOC4xIDAgNjMtNjNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNjMgNjMgMC0zOC4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0ek0zMjAgMTIwYy01Ny4zIDAtOTkuNCAzNC0xMjUuNiA2NC4zLTIwIDIzLjEtMzIuNCA0NS44LTM3LjYgNTYuMS0yLjUgNS00LjkgOS43LTQuOSAxNS42czIuMyAxMC42IDQuOSAxNS42YzUuMiAxMC4zIDE3LjYgMzMgMzcuNiA1Ni4xIDI2LjIgMzAuMyA2OC4yIDY0LjMgMTI1LjYgNjQuM3M5OS40LTM0IDEyNS42LTY0LjNjMjAtMjMuMSAzMi40LTQ1LjggMzcuNi01Ni4xIDIuNS01IDQuOS05LjcgNC45LTE1LjZzLTIuMy0xMC42LTQuOS0xNS42Yy01LjItMTAuMy0xNy42LTMzLTM3LjYtNTYuMS0yNi4yLTMwLjMtNjguMi02NC4zLTEyNS42LTY0LjN6TTI1NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFTbm93cGxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbm93cGxvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2QyIiwgIk0xMjggMTYwbDAtOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjk2LjQgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw4Ny42IDE3NS4xYzQuNCA4LjkgNi44IDE4LjcgNi44IDI4LjZsMCA1Ni45IDgwIDAgMC04MGMwLTQ4LjYgMzkuNC04OCA4OC04OCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAyMDhjMCAyMi4xIDE3LjkgNDAgNDAgNDAgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4bDAtODAtNjMgMGM5LjUgMTYuNSAxNSAzNS42IDE1IDU2IDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0yMjQgMGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTIgMC0zMC41IDEyLjItNTguMiAzMi03OC40TDY0IDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHptOTEuNyAzNC45bDQzLjYgMjkuMSAxMTMuMiAwLTgwLTE2MC0xMDQuNCAwIDAgMTA4LjggMjcuNyAyMi4xek00MTYgNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHptLTI4MCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTIxNi0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIzMiA0MDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhQ2hhcnRHYW50dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1nYW50dCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGU0IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNkw2NCA2NHptOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem02NCAxMTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwek0zODQgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYVZpZGVvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpZGVvIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZpZGVvLWNhbWVyYSJdLCAiZjAzZCIsICJNOTYgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDY0ek00NjQgMzM2bDczLjUgNTguOGM0LjIgMy40IDkuNCA1LjIgMTQuOCA1LjIgMTMuMSAwIDIzLjctMTAuNiAyMy43LTIzLjdsMC0yNDAuNmMwLTEzLjEtMTAuNi0yMy43LTIzLjctMjMuNy01LjQgMC0xMC42IDEuOC0xNC44IDUuMkw0NjQgMTc2IDQ2NCAzMzZ6Il0KICAgIH07CiAgICBmYVZpZGVvQ2FtZXJhID0gZmFWaWRlbzsKICAgIGZhQ2hlc3NQYXduMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1wYXduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyM10sICJmNDQzIiwgIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy04LjkgNTEuOS0yNCA3MiAxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDI2LjcgMTYwIDU2LjIgNzAuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw1MS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMODAgMzg0IDEwNi43IDIyNCA5NiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjLTE1LjEtMjAuMS0yNC00NS0yNC03MiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHoiXQogICAgfTsKICAgIGZhU3luYWdvZ3VlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN5bmFnb2d1ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMzM10sICJmNjliIiwgIk0xNiA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzItMTI4IDAgMC0zMnptMCAzNjhsMC0yODggMTI4IDAgMTI2LjItODQuMmMxMC43LTcuMiAyNC44LTcuMiAzNS41IDBsMTI2LjIgODQuMiAxMjggMCAwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0ek01NjAgMTEybC0xMjggMCAwLTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMnpNMjI0IDM4NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6bTY0LTE1MmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyUGx1czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcxIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFXaGVlbGNoYWlyTW92ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aGVlbGNoYWlyLW1vdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2hlZWxjaGFpci1hbHQiXSwgImUyY2UiLCAiTTMxMiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIwNS40IDEyNC4xYy02LjQtNS4yLTE1LjYtNC43LTIxLjQgMS4xbC0zMy40IDMzLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDEzOC44IDgwYzI5LTI5IDc1LjItMzEuNCAxMDctNS41bDgxLjMgNjZjMjEuNCAxNy40IDIzLjggNDkuMiA1LjIgNjkuNWwtNDEuOCA0NiA5OCAwYzMwLjMgMCA1MyAyNy43IDQ3LjEgNTcuNEw0MDcuNCA0NTQuM2MtMy41IDE3LjMtMjAuMyAyOC42LTM3LjcgMjUuMXMtMjguNi0yMC4zLTI1LjEtMzcuN0wzNjkgMzIwIDMxNi44IDMyMGMyLjEgMTAuMyAzLjIgMjEgMy4yIDMyIDAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTIgNzEuNiAxOTIgMTYwIDE5MmM2IDAgMTEuOSAuMyAxNy44IDFsNTAuNC01MC40LTIyLjctMTguNXpNMTYwIDQ0OGE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnoiXQogICAgfTsKICAgIGZhV2hlZWxjaGFpckFsdCA9IGZhV2hlZWxjaGFpck1vdmU7CiAgICBmYVVzZXJTaGllbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zaGllbGQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUwNSIsICJNMjI0IDI0OGExMjAgMTIwIDAgMSAwIDAtMjQwIDEyMCAxMjAgMCAxIDAgMCAyNDB6bS0yOS43IDU2Qzk1LjggMzA0IDE2IDM4My44IDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDI1MS41IDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtNy4zIDEtMTQuNSAyLjktMjEuM2wtNDguNiAwem0yNTEgMTg0LjVsLTEzLjMgNi4zIDAtMTg4LjEgOTYgMzIgMCAxOS42YzAgNTUuOC0zMi4yIDEwNi41LTgyLjcgMTMwLjN6TTQyMS45IDI1OS41bC0xMTIgMzcuM2MtMTMuMSA0LjQtMjEuOSAxNi42LTIxLjkgMzAuNGwwIDMxLjFjMCA3NC40IDQzIDE0Mi4xIDExMC4yIDE3My43bDE4LjUgOC43YzQuOCAyLjIgMTAgMy40IDE1LjIgMy40czEwLjUtMS4yIDE1LjItMy40bDE4LjUtOC43QzUzMyA1MDAuMyA1NzYgNDMyLjYgNTc2IDM1OC4ybDAtMzEuMWMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtMTEyLTM3LjNjLTYuNi0yLjItMTMuNy0yLjItMjAuMiAweiJdCiAgICB9OwogICAgZmFCb2xkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbGQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjAzMiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDMyIDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQ2LjUtMjQuOC04Ny4zLTYyLTEwOS43IDE4LjctMjIuMyAzMC01MSAzMC04Mi4zIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4TDMyIDMyek0yODggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0bC05NiAwIDAtMTI4IDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTEyOCA0MTZsMC0xMjggMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEyOCAweiJdCiAgICB9OwogICAgZmFIZWFydFB1bHNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LXB1bHNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhlYXJ0YmVhdCJdLCAiZjIxZSIsICJNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4eiJdCiAgICB9OwogICAgZmFIZWFydGJlYXQgPSBmYUhlYXJ0UHVsc2U7CiAgICBmYVNxdWFyZVJvb3RWYXJpYWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcm9vdC12YXJpYWJsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzcXVhcmUtcm9vdC1hbHQiXSwgImY2OTgiLCAiTTI4Mi42IDc4LjFjOC0yNy4zIDMzLTQ2LjEgNjEuNC00Ni4xbDIwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM0NCA5NiAyMzguNyA0NTdjLTMuNiAxMi4zLTE0LjEgMjEuMi0yNi44IDIyLjhzLTI1LjEtNC42LTMxLjUtMTUuNkw3Ny42IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDUuNiAwYzIyLjggMCA0My44IDEyLjEgNTUuMyAzMS44bDY1LjIgMTExLjggODQuNC0yODkuNXpNMzkzLjQgMjMzLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDEuNCA0MS40IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC00MS40IDQxLjQgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MS40LTQxLjQtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhU3F1YXJlUm9vdEFsdCA9IGZhU3F1YXJlUm9vdFZhcmlhYmxlOwogICAgZmFIYW5kc0J1YmJsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtYnViYmxlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoYW5kcy13YXNoIl0sICJlMDVlIiwgIk0zODQgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xMjggNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTAgMTYwbC4xIDcyLjZjMCA0NC44IDE3LjYgODcuMSA0Ny45IDExOC40IC4zLTc3IDQwLjEtMTQ4LjQgMTA1LjQtMTg5LjNsMS45LTEuMmMtMi41LTMuNy0yLjgtOC42LS40LTEyLjdsNjItMTA3LjRjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhTMTgyIDUgMTc1LjQgMTYuNWwtNjggMTE3LjggMCAwIDAgMC00My4zIDc1IDAtNDkuM2MwLTE3LjctMTQuNC0zMi0zMi0zMlMwIDE0Mi40IDAgMTYwem0yMTMuNi0zNS45YzE0LjEtOC44IDI5LjgtMTIuNyA0NS4yLTEyLjFsMzYuNS02My4zYzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNjcuMSAxMTYuMiAyNy0xNi45em04Ni41LTM1LjdsLTE2LjQgMjguNGMxNS4xIDUuNSAyOC42IDE1LjYgMzguMyAyOS43bDE5LjctMzQuMmM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMTIuNSAyMS43YzIgOC42IDIuNSAxNy41IDEuNyAyNi4xbDQuMyAwIDAgMCAzNC40IDAgMTMuNy0yMy44YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHpNMjgzLjEgMTc1Yy05LjQtMTUtMjkuMS0xOS41LTQ0LjEtMTAuMmwtNjAuMiAzNy42QzEyNy4zIDIzNC43IDk2IDI5MS4yIDk2IDM1MmwwIDhjMCA4LjkgLjggMTcuNiAyLjIgMjYuMSAzNS40IDguMiA2MS44IDQwIDYxLjggNzcuOSAwIDYuMy0uNyAxMi41LTIuMSAxOC40IDI1LjIgMTguNiA1Ni40IDI5LjYgOTAuMSAyOS42bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05MiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjQgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTU2IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEzNiAwIDAgMCAwIDAtOTMuMiAwIDQ2LjItMjguOWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXoiXQogICAgfTsKICAgIGZhSGFuZHNXYXNoID0gZmFIYW5kc0J1YmJsZXM7CiAgICBmYU1hcmtlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJrZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVhMSIsICJNNDA4LjggMGMtMjcuNCAwLTUzLjYgMTAuOS03MyAzMC4yTDMxOC4xIDQ4IDMwNSAzNC45Yy0yOC4xLTI4LjEtNzMuNy0yOC4xLTEwMS44IDBMMTAzIDEzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDIzNy4xIDY4LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjg0LjEgODEuOSAxODQgMTgyLjEgMzI5LjkgMzI4IDQ4MS44IDE3Ni4yYzE5LjQtMTkuNCAzMC4yLTQ1LjYgMzAuMi03MyAwLTU3LTQ2LjItMTAzLjItMTAzLjItMTAzLjJ6TTEwMi40IDI2My43Yy00OS45IDQ5LjktODMuMyAxMTQtOTUuNSAxODMuNUwuNCA0ODMuOEMtMSA0OTEuNiAxLjUgNDk5LjQgNyA1MDVzMTMuNCA4IDIxLjEgNi43bDM2LjctNi41YzY5LjUtMTIuMyAxMzMuNi00NS42IDE4My41LTk1LjVMMjk2IDM2MS45IDE1MC4xIDIxNiAxMDIuNCAyNjMuN3oiXQogICAgfTsKICAgIGZhQ2xpcGJvYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCAiZjMyOCIsICJNMzIwIDMybC04LjYgMEMzMDAuNCAxMi45IDI3OS43IDAgMjU2IDBMMTI4IDBDMTA0LjMgMCA4My42IDEyLjkgNzIuNiAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xMzYgMTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMHoiXQogICAgfTsKICAgIGZhUGxhY2VPZldvcnNoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhY2Utb2Ytd29yc2hpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjdmIiwgIk0xNjAgNzlsMCA4MS00NC44IDMzLjZDMTAzLjEgMjAyLjcgOTYgMjE2LjkgOTYgMjMybDAgNDAtNjAuNiAzMC4zQzEzLjcgMzEzLjIgMCAzMzUuMyAwIDM1OS42TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTg4LjRjMC0yNC4yLTEzLjctNDYuNC0zNS40LTU3LjJMNDE2IDI3MiA0MTYgMjMyYzAtMTUuMS03LjEtMjkuMy0xOS4yLTM4LjRMMzUyIDE2MCAzNTIgNzljMC05LjUtNC4yLTE4LjUtMTEuNS0yNC42TDI3MS40LTMuMmMtOC45LTcuNC0yMS44LTcuNC0zMC43IDBMMTcxLjUgNTQuNEMxNjQuMiA2MC41IDE2MCA2OS41IDE2MCA3OXptOTYgMjQxYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODAtMTI4IDAgMC04MGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhQ2FubmFiaXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FubmFiaXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1ZiIsICJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjEgMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOSA3LjMgMjYuNCAxMS44IDU1LjMgMTAuMyA4NCAxMS42LTguOSAyMy43LTE2LjcgMzUuOS0yMy43IDQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjUgNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuNy05LjEgMTUuOS0xOS45IDMxLjctMzIuNSA0Ni4zIDI3LjkgNi42IDUyLjUgMTcuMiA2Ny4zIDI1LjQgNS4xIDIuOCA4LjIgOC4yIDguMiAxNHMtMy4yIDExLjItOC4yIDE0Yy0xNS4yIDguNC00MC45IDE5LjUtNjkuOCAyNi4xLTIwLjIgNC42LTQyLjkgNy4yLTY1LjIgNC42bDguMyAzMy4yYzEuNSA2LjEtLjYgMTIuNS01LjUgMTYuNHMtMTEuNiA0LjYtMTcuMiAxLjhMMjgwIDQxNy4yIDI4MCA0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03MC44LTU4LjUgMjkuMWMtNS42IDIuOC0xMi4zIDIuMS0xNy4yLTEuOHMtNy0xMC4zLTUuNS0xNi40bDguMy0zMy4yYy0yMi4yIDIuNi00NSAwLTY1LjItNC42LTI4LjktNi42LTU0LjUtMTcuNi02OS44LTI2LjEtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRsNi4yLTMuM2MxNS03LjYgMzYuOC0xNi40IDYxLjEtMjIuMi0xMi41LTE0LjUtMjMuMy0zMC40LTMyLjQtNDYuMi0yMy40LTQwLjgtMzcuMS04NC00Mi43LTExMS43LTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41IDEyLjIgNi45IDI0LjMgMTQuOCAzNS44IDIzLjctMS40LTI4LjcgMy4xLTU3LjYgMTAuMy04NCAxMi41LTQ1LjMgMzMuNC04NS41IDQ5LjItMTA5bDEuMi0xLjZDMjQ2LjkgMiAyNTEuMyAwIDI1NiAweiJdCiAgICB9OwogICAgZmFQZW9wbGVSb29mID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1yb29mIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzciLCAiTTMwMi4zLTEyLjZjLTktNC41LTE5LjYtNC41LTI4LjYgMGwtMjU2IDEyOEMxLjkgMTIzLjMtNC41IDE0Mi41IDMuNCAxNTguM3MyNy4xIDIyLjIgNDIuOSAxNC4zTDI4OCA1MS44IDUyOS43IDE3Mi42YzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOWwtMjU2LTEyOHpNMjg4IDI3MmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptMCA0OGMtNTMgMC05NiA0My05NiA5NmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC01My00My05Ni05Ni05NnpNMTYwIDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0zNTIgMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xMTIgMzM2Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDMzLjFjMCAxNyAxMy44IDMwLjkgMzAuOSAzMC45bDg3LjggMGMtNC4zLTkuOC02LjctMjAuNi02LjctMzJsMC00OGMwLTE4LjQgMy41LTM2IDkuOC01Mi4yLTEyLjItNy41LTI2LjUtMTEuOC00MS44LTExLjh6TTQyNS40IDQ4MGw4Ny44IDBjMTcgMCAzMC45LTEzLjggMzAuOS0zMC45bDAtMzMuMWMwLTQ0LjItMzUuOC04MC04MC04MC0xNS4zIDAtMjkuNiA0LjMtNDEuOCAxMS44IDYuMyAxNi4yIDkuOCAzMy44IDkuOCA1Mi4ybDAgNDhjMCAxMS40LTIuNCAyMi4yLTYuNyAzMnoiXQogICAgfTsKICAgIGZhRGlzZWFzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXNlYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZmEiLCAiTTIzNi41IDI5LjRMMjI0IDQ4Yy0yMCAzMC01My42IDQ4LTg5LjcgNDhMNjggOTZjLTM3LjUgMC02Ny45IDMwLjQtNjcuOSA2Ny45IDAgMTggNy4yIDM1LjIgMTkuOSA0Ny45bDI3IDI3YzExIDExIDE3LjIgMjUuOSAxNy4yIDQxLjUgMCAxNS44LTYuNCAzMC45LTE3LjcgNDJMMzMuNCAzMzUuMWMtMTEuMSAxMC44LTE3LjMgMjUuNy0xNy4zIDQxLjIgMCAzNi44IDM0LjEgNjQuMiA3MC4xIDU2LjJsNjIuMy0xMy44YzcuNy0xLjcgMTUuNy0yLjYgMjMuNi0yLjYgMzIuOCAwIDY0LjIgMTQuNiA4NS4yIDM5LjhsMzAuNSAzNi42YzEwLjQgMTIuNCAyNS43IDE5LjYgNDEuOSAxOS42IDMwLjEgMCA1NC41LTI0LjQgNTQuNS01NC41bDAtNTEuMmMwLTQxLjQgMjUuNC03OC41IDY0LTkzLjVsMjIuMi04LjZjMjUuMi05LjggNDEuOC0zNC4xIDQxLjgtNjEuMSAwLTI2LjQtMTUuOS01MC4zLTQwLjMtNjAuNUw0MjkgMTY0LjhjLTMzLjItMTMuOS01Ny42LTQzLTY1LjUtNzguMWwtNy45LTM1LjJjLTYuOC0zMC4xLTMzLjUtNTEuNS02NC4zLTUxLjUtMjIgMC00Mi42IDExLTU0LjggMjkuNHpNMTYwIDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFCb29rQmlibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1iaWJsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJiaWJsZSJdLCAiZjY0NyIsICJNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiA1MTJ6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6TTE5MiA4MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTExMiA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFCaWJsZSA9IGZhQm9va0JpYmxlOwogICAgZmFDaGVzc0JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLWJvYXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0M2MiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDY0bDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NCA2NCAwIDAtNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwIDY0IDY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NC02NCAwIDAgNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMCAwLTY0LTY0IDAgMC02NCA2NCAwem02NCAxMjhsNjQgMCAwLTY0LTY0IDAgMCA2NHptMCA2NGwwLTY0LTY0IDAgMCA2NCA2NCAwem02NCAwbC02NCAwIDAgNjQgNjQgMCAwLTY0em0wIDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXQogICAgfTsKICAgIGZhTWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc5NF0sICJmMjIyIiwgIk0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTk1IDk1YzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMzIgNDAxLjIgMzIgMzA0IDExMC44IDEyOCAyMDggMTI4YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsOTUtOTUtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjA4IDQxNmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYUxhcHRvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgxODddLCAiZjEwOSIsICJNMTI4IDMyQzkyLjcgMzIgNjQgNjAuNyA2NCA5NmwwIDI0MCA2NCAwIDAtMjQwIDM4NCAwIDAgMjQwIDY0IDAgMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDMyek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMiAwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwbDQ4Ni40IDBjNDIuNCAwIDc2LjgtMzQuNCA3Ni44LTc2LjggMC0xMC42LTguNi0xOS4yLTE5LjItMTkuMkwxOS4yIDM4NHoiXQogICAgfTsKICAgIGZhVXNlclhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXIteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci10aW1lcyJdLCAiZjIzNSIsICJNMTM2LjQgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6bS04OCAzNTQuM2MwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDBjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzguMSA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43ek02MTIuMyAxMjQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFVc2VyVGltZXMgPSBmYVVzZXJYbWFyazsKICAgIGZhRmxhZ1VzYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnLXVzYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzRkIiwgIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMzYuMS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTIwLjMtOS00MS44LTE0LjctNjMuNi0xNi45bDAgMzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2Mi00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2MS45LTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM2wtNjMuNSAxMy42IDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDMzLjVjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgNDAwIDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwem04MCA5NmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptLTMyIDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTMyIDBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFIYW5kTWlkZGxlRmluZ2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtbWlkZGxlLWZpbmdlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQwNV0sICJmODA2IiwgIk0yMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAxNjQuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMi0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNTUuN2MtMiAxLjQtMy45IDMtNS44IDQuNUw1NSAyODQuOEM0MC40IDI5NyAzMiAzMTUgMzIgMzM0TDMyIDM3MmMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zbDUuNCA0LjVjMjguOCAyNCA2NSAzNy4xIDEwMi40IDM3LjFMMzA0IDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4LTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjMtMS45LTI0LjgtMjIuNi00NC4zLTQ3LjktNDQuMy0xMi4zIDAtMjMuNSA0LjYtMzIgMTIuMkwyNzIgNDBjMC0yMi4xLTE3LjktNDAtNDAtNDB6Il0KICAgIH07CiAgICBmYU1vcnRhclBlc3RsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3J0YXItcGVzdGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTciLCAiTTUwNC4zIDExLjFDNDkzLjMtMS42IDQ3NC41LTMuNyA0NjEgNi4yTDI1Mi4zIDE2MCAzOTcuMyAxNjAgNTAyLjYgNTQuNmMxMS44LTExLjggMTIuNi0zMC44IDEuNi00My41ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJjMCA4Mi41IDQzLjQgMTQ3LjcgMTIzLjkgMTc2LjItMTEuMSAxMy45LTE5LjQgMzAuMy0yMy45IDQ4LjEtNC40IDE3LjEgMTAuNCAzMS43IDI4LjEgMzEuN2wxOTIgMGMxNy43IDAgMzIuNC0xNC42IDI4LjEtMzEuNy00LjUtMTcuOC0xMi44LTM0LjEtMjMuOS00OC4xIDgwLjUtMjguNiAxMjMuOS05My43IDEyMy45LTE3Ni4yIDE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE5MnoiXQogICAgfTsKICAgIGZhSGVhZFNpZGVDb3VnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtY291Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2MSIsICJNOTYgNTEybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNmwxIDBjMjYgMCA0Ny0yMSA0Ny00NyAwLTExLTMuOS0yMS42LTEwLjktMzAuMUwyNzMuMyAyMDBDMjcxLjQgMTk3LjYgMjcwLjEgMTk0LjcgMjY5LjcgMTkxLjcgMjU0IDgzLjMgMTYwLjcgMCA0OCAwIDQwLjQgMCAzMi45IC40IDI1LjQgMS4xIDEwLjUgMi42IDAgMTUuOSAwIDMwLjlMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMHptMTYtMzIwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTYzLjEgMjM3LjJsLTQxLjUtMy41Yy0xMi4yLTEtMjEuNi0xMS4yLTIxLjYtMjMuNCAwLTEwLjggNy4zLTIwLjIgMTcuOC0yMi44bDQwLjQtMTAuMWMxOS4yLTQuOCAzNy44IDkuNyAzNy44IDI5LjUgMCAxNy44LTE1LjIgMzEuOC0zMi45IDMwLjN6TTQ4MCAzMTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0tNDAgMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTQ4MCA1MDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0tNDAtNzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhUGxhbmVMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1OCIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA4Mi4xIDc1LjJDNDA5LjcgMjQ4LjEgNDAwIDI3NC45IDQwMCAzMDRsMCAyNC40Yy03LjMgNi42LTEzLjYgMTQuMi0xOC43IDIyLjdsLTM3LjMtMTIuNCAwIDk5LjcgMjQgMTkuMiAwIDM4LjNjMCAxMy41IDIuOCAyNi40IDcuOCAzOC4xTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek01NjAgMzA0LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5VGhyZWVRdWFydGVycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktNCJdLCAiZjI0MSIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTIyNCAweiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5NCA9IGZhQmF0dGVyeVRocmVlUXVhcnRlcnM7CiAgICBmYUZyYW5jU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmcmFuYy1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUxOGYiLCAiTTgwIDMyQzYyLjMgMzIgNDggNDYuMyA0OCA2NGwwIDI1Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTY0IDE0NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNDQgMCAwLTk2IDE3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDMyeiJdCiAgICB9OwogICAgZmFGaWx0ZXJDaXJjbGVEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsdGVyLWNpcmNsZS1kb2xsYXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZnVubmVsLWRvbGxhciJdLCAiZjY2MiIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMi41IDIuNSA1LjMgNC41IDguMyA2LTIxLjItMzAuOS0zMy42LTY4LjMtMzMuNi0xMDguNiAwLTk5LjQgNzUuNS0xODEuMSAxNzIuMy0xOTFsOTAuNC05MC40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDY0IDQ4MCA2NEwzMiA2NHpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek00MTYgMzIwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ1LjggMGMtNS42IDAtMTAuMiA0LjYtMTAuMiAxMC4yIDAgNC45IDMuNSA5LjEgOC4zIDEwbDQ1IDguMmMyMCAzLjYgMzQuNiAyMS4xIDM0LjYgNDEuNSAwIDIzLjMtMTguOSA0Mi4yLTQyLjIgNDIuMmwtNS44IDAgMCA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDUzLjggMGM1LjYgMCAxMC4yLTQuNiAxMC4yLTEwLjIgMC00LjktMy41LTkuMS04LjMtMTBsLTQ1LTguMmMtMjAtMy42LTM0LjYtMjEuMS0zNC42LTQxLjUgMC0yMi42IDE3LjctNDEgNDAtNDIuMWwwLTguMXoiXQogICAgfTsKICAgIGZhRnVubmVsRG9sbGFyID0gZmFGaWx0ZXJDaXJjbGVEb2xsYXI7CiAgICBmYUNoZWVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVlc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlZiIsICJNNTEyIDI0MC4ybDAgMTUuOC01MTIgMGMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguNyAxMTUgMCAyMDguMiA5My4yIDIwOC4yIDIwOC4yem0wIDYzLjhsMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTExMiA1MTIgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlSCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk0MDUsICJob3NwaXRhbC1zeW1ib2wiXSwgImY0N2UiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem05Ni0zNDRsMCAxNzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NC05NiAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDk2IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbFN5bWJvbCA9IGZhQ2lyY2xlSDsKICAgIGZhU2Nob29sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3OV0sICJmNTQ5IiwgIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MnpNMjI0IDM3NmwwIDg4IDEyOCAwIDAtODhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwem0tMTEyIDhjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAzODRjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTI4OCAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6Il0KICAgIH07CiAgICBmYURpY2VGaXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NjBdLCAiZjUyMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek05NiAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0LTY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVRvcm5hZG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9ybmFkbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzc4Nl0sICJmNzZmIiwgIk0wIDMyTDAgNDUuNkMwIDYyLjcgMS43IDc5LjYgNSA5NmwzNTIuOCAwYzMuMi02LjkgNy41LTEzLjMgMTMtMTguOGwzOC42LTM4LjZjNC4yLTQuMiA2LjYtMTAgNi42LTE2IDAtMTIuNS0xMC4xLTIyLjYtMjIuNi0yMi42TDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyek0zNTUuNyAxNDRsLTMzNiAwYzEyLjQgMjkuNyAzMC4yIDU2LjggNTIuNyA4MGwzMzkuNiAwLTQ3LjItNjIuOWMtMy45LTUuMi03LTExLTkuMi0xNy4xek0yNDIuNiAzMzQuN2M4LjIgNC44IDE1LjggMTAuNyAyMi41IDE3LjNMNDQ1IDM1MmMyLTkuOCAzLTE5LjkgMy0zMC4xIDAtMTcuMS0yLjktMzQtOC42LTQ5LjlMMTM2IDI3MiAyNDIuNiAzMzQuN3pNMjk0LjMgNDAwYzUuMyAxNyA2LjUgMzUuMiAzLjYgNTNsLTUuOSAzNS43Yy0yIDEyLjIgNy40IDIzLjQgMTkuOCAyMy40IDUuMyAwIDEwLjQtMi4xIDE0LjItNS45bDc4LjItNzguMmM4LjUtOC41IDE1LjgtMTcuOCAyMS45LTI3LjlsLTEzMS44IDB6Il0KICAgIH07CiAgICBmYUpldEZpZ2h0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamV0LWZpZ2h0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZmlnaHRlci1qZXQiXSwgImYwZmIiLCAiTTQ5Ni4yIDIwNi44Yy0xMC43LTQuNS0yMi4yLTYuOC0zMy44LTYuOEwzNjIgMjAwIDI0OCA0OCAyOTYgNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgMCAyOTYgMEwxNTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4IDAgMCAxNTItNTQuNCAwLTUyLjgtNjZjLTMtMy44LTcuNi02LTEyLjUtNkwxNiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDg4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA4OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQuMyAwYzQuOSAwIDkuNS0yLjIgMTIuNS02bDUyLjgtNjYgNTQuNCAwIDAgMTUyLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAxMTQtMTUyIDEwMC40IDBjMTEuNiAwIDIzLjEtMi4zIDMzLjgtNi44bDY1LTI3LjFjOC45LTMuNyAxNC44LTEyLjUgMTQuOC0yMi4ycy01LjgtMTguNC0xNC44LTIyLjJsLTY1LTI3LjF6Il0KICAgIH07CiAgICBmYUZpZ2h0ZXJKZXQgPSBmYUpldEZpZ2h0ZXI7CiAgICBmYVRodW1ic0Rvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRodW1icy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc4LCA2MTU3Nl0sICJmMTY1IiwgIk0zODQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA2LjMtMS4zIDEyLjItMy40IDE3LjcgMjAuNCA1LjUgMzUuNCAyNC4xIDM1LjQgNDYuMyAwIDkuMS0yLjYgMTcuNi03IDI0LjkgMjIuMiA0LjIgMzkgMjMuNyAzOSA0Ny4xIDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwIDI4LjIgNzAuNGMyLjUgNi4zIDMuOCAxMy4xIDMuOCAxOS45bDAgNC4yYzAgMjcuMy0yMi4xIDQ5LjQtNDkuNCA0OS40LTE4LjcgMC0zNS44LTEwLjYtNDQuMi0yNy4zTDE3MC4xIDM1Ni4zYy02LjctMTMuMy0xMC4xLTI4LTEwLjEtNDIuOWwwLTE4Ni42YzAtMTkuNCA4LjktMzcuOCAyNC01MGwxMi4yLTkuN0MyMjQuNiA0NC40IDI1OS44IDMyIDI5Ni4xIDMyTDM4NCAzMnpNODAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ4IDB6Il0KICAgIH07CiAgICBmYUJyb29tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyb29tIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NTI5XSwgImY1MWEiLCAiTTU2Ni42IDU0LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE5MiAxOTItMzQuNy0zNC43Yy00LjItNC4yLTEwLTYuNi0xNi02LjYtMTIuNSAwLTIyLjYgMTAuMS0yMi42IDIyLjZsMCAyOS4xIDEwOC4zIDEwOC4zIDI5LjEgMGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNiAwLTYtMi40LTExLjgtNi42LTE2bC0zNC43LTM0LjcgMTkyLTE5MnpNMzQxLjEgMzUzLjRMMjIyLjYgMjM0LjljLTQyLjctMy43LTg1LjIgMTEuNy0xMTUuOCA0Mi4zbC04IDhjLTIyLjMgMjIuMy0zNC44IDUyLjUtMzQuOCA4NCAwIDYuOCA3LjEgMTEuMiAxMy4yIDguMmw1MS4xLTI1LjVjNS0yLjUgOS41IDQuMSA1LjQgNy45TDcuMyA0NzMuNEMyLjcgNDc3LjYgMCA0ODMuNiAwIDQ4OS45IDAgNTAyLjEgOS45IDUxMiAyMi4xIDUxMmwxNzMuMyAwYzM4LjggMCA3NS45LTE1LjQgMTAzLjQtNDIuOCAzMC42LTMwLjYgNDUuOS03My4xIDQyLjMtMTE1Ljh6Il0KICAgIH07CiAgICBmYUZpbGVJbXBvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbXBvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYXJyb3ctcmlnaHQtdG8tZmlsZSJdLCAiZjU2ZiIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTgyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xODIuMSAwIDAgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFRvRmlsZSA9IGZhRmlsZUltcG9ydDsKICAgIGZhVXRlbnNpbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXRlbnNpbHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjAsIDYxNjg1LCAiY3V0bGVyeSJdLCAiZjJlNyIsICJNNjMuOSAxNC40QzYzLjEgNi4yIDU2LjIgMCA0OCAwcy0xNS4xIDYuMi0xNiAxNC4zTDE3LjkgMTQ5LjdjLTEuMyA2LTEuOSAxMi4xLTEuOSAxOC4yIDAgNDUuOSAzNS4xIDgzLjYgODAgODcuN0w5NiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNC40YzQ0LjktNC4xIDgwLTQxLjggODAtODcuNyAwLTYuMS0uNi0xMi4yLTEuOS0xOC4yTDIyMy45IDE0LjNDMjIzLjEgNi4yIDIxNi4yIDAgMjA4IDBzLTE1LjEgNi4yLTE1LjkgMTQuNEwxNzguNSAxNDkuOWMtLjYgNS43LTUuNCAxMC4xLTExLjEgMTAuMS01LjggMC0xMC42LTQuNC0xMS4yLTEwLjJMMTQzLjkgMTQuNkMxNDMuMiA2LjMgMTM2LjMgMCAxMjggMHMtMTUuMiA2LjMtMTUuOSAxNC42TDk5LjggMTQ5LjhjLS41IDUuOC01LjQgMTAuMi0xMS4yIDEwLjItNS44IDAtMTAuNi00LjQtMTEuMS0xMC4xTDYzLjkgMTQuNHpNNDQ4IDBDNDMyIDAgMzIwIDMyIDMyMCAxNzZsMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFDdXRsZXJ5ID0gZmFVdGVuc2lsczsKICAgIGZhSWRCYWRnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtYmFkZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJjMSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHptOTYgMzUybDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNTIgNjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3BpZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaWRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM3NV0sICJmNzE3IiwgIk0zNjkuMy0zMWMxMS45LTMuNSAyNC40IDIuNyAyOSAxMy45bC44IDIuMyA0MCAxMzZjMi41IDguNCAuMSAxNy41LTYuMSAyMy43bC02NC4xIDY0LjEgNzYuNC0yMC44IDE5LjktNTkuOCAuOS0yLjNjNS0xMS4xIDE3LjctMTYuOCAyOS41LTEyLjkgMTEuOCAzLjkgMTguNSAxNi4xIDE1LjggMjhsLS43IDIuNC0yNCA3MmMtMi41IDcuNi04LjcgMTMuNC0xNi41IDE1LjZsLTkxLjEgMjQuOCA5MS4xIDI0LjhjNy43IDIuMSAxMy45IDggMTYuNSAxNS42bDI0IDcyIC43IDIuNGMyLjcgMTEuOS00LjEgMjQuMS0xNS44IDI4LTExLjggMy45LTI0LjUtMS44LTI5LjUtMTIuOWwtLjktMi4zLTE5LjktNTkuOC03Ni40LTIwLjggNjQuMSA2NC4xYzYuMSA2LjEgOC41IDE1LjEgNi4yIDIzLjRsLTQwIDE0NC0uOCAyLjNjLTQuNCAxMS4zLTE2LjggMTcuNy0yOC44IDE0LjQtMTItMy4zLTE5LjMtMTUuMi0xNy4yLTI3LjJsLjUtMi40IDM2LjItMTMwLjUtMzcuMi0zNy4yQzM1MSA0MDYgMzA4LjQgNDQ4IDI1NiA0NDhzLTk1LTQyLTk2LTk0LjFsLTM3IDM3IDM2IDEyMi4zIC42IDIuNGMyLjIgMTEuOS00LjkgMjMuOS0xNi44IDI3LjQtMTEuOSAzLjUtMjQuNC0yLjctMjktMTMuOWwtLjgtMi4zLTQwLTEzNmMtMi41LTguNC0uMS0xNy41IDYuMS0yMy44bDY0LjEtNjQuMS03Ni40IDIwLjgtMTkuOSA1OS44LS45IDIuM2MtNSAxMS4xLTE3LjcgMTYuOC0yOS41IDEyLjlzLTE4LjUtMTYuMS0xNS44LTI4bC43LTIuNCAyNC03MmMyLjUtNy42IDguNy0xMy40IDE2LjUtMTUuNmw5MS4xLTI0LjgtOTEuMS0yNC44Yy03LjctMi4xLTEzLjktOC0xNi41LTE1LjZsLTI0LTcyLS43LTIuNGMtMi43LTExLjkgNC4xLTI0LjEgMTUuOC0yOHMyNC41IDEuOCAyOS41IDEyLjlsLjkgMi4zIDE5LjkgNTkuOCA3Ni40IDIwLjgtNjQuMS02NC4xYy02LjItNi4yLTguNS0xNS4zLTYuMS0yMy43bDQwLTEzNiAuOC0yLjNjNC42LTExLjMgMTcuMS0xNy40IDI5LTEzLjkgMTEuOSAzLjUgMTkgMTUuNSAxNi44IDI3LjRsLS42IDIuNC0zNiAxMjIuMyA1MyA1M2MxLTQzLjMgMzYuNC03OC4xIDc5LjktNzguMXM3OC45IDM0LjggNzkuOSA3OC4ybDUzLjEtNTMuMS0zNi0xMjIuMy0uNi0yLjRjLTIuMi0xMiA0LjktMjMuOSAxNi44LTI3LjR6Il0KICAgIH07CiAgICBmYU1vYmlsZVJldHJvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1yZXRybyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTI3IiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6bTgwIDk2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem04IDE5MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHptNjQtNzJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0ek0xNjggNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXQogICAgfTsKICAgIGZhU2lnbnNQb3N0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25zLXBvc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFwLXNpZ25zIl0sICJmMjc3IiwgIk0yNTYuNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwIDAgNjQtMTUzLjQgMGMtNC4yIDAtOC4zIDEuNy0xMS4zIDQuN2wtNDggNDhjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQ4IDQ4YzMgMyA3LjEgNC43IDExLjMgNC43bDE1My40IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC02NCAxNTMuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsNDgtNDhjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4Yy0zLTMtNy4xLTQuNy0xMS4zLTQuN2wtMTUzLjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFNYXBTaWducyA9IGZhU2lnbnNQb3N0OwogICAgZmFHcm91cEFycm93c1JvdGF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncm91cC1hcnJvd3Mtcm90YXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZjYiLCAiTTM3LjYgMTIyLjNjLTExLjUgMTguNy0yMC42IDM5LTI3IDYwLjUtNSAxNi45IDQuNiAzNC44IDIxLjUgMzkuOHMzNC44LTQuNiAzOS44LTIxLjVjMTguNC02MS45IDY3LjMtMTEwLjggMTI5LjItMTI5LjIgMTYuOS01IDI2LjYtMjIuOSAyMS41LTM5LjhTMTk5LjggNS42IDE4Mi45IDEwLjZDMTYxLjQgMTcgMTQxLjEgMjYuMSAxMjIuMyAzNy42IDExMi4zIDE1LjQgODkuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0IDAgODkuOSAxNS40IDExMi4zIDM3LjYgMTIyLjN6bTQzNi43IDBjMjIuMi0xMCAzNy42LTMyLjQgMzcuNi01OC4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI1LjkgMC00OC4zIDE1LjQtNTguMyAzNy42LTE4LjctMTEuNS0zOS0yMC42LTYwLjUtMjctMTYuOS01LTM0LjggNC42LTM5LjggMjEuNXM0LjYgMzQuOCAyMS41IDM5LjhjNjEuOSAxOC40IDExMC44IDY3LjMgMTI5LjIgMTI5LjIgNSAxNi45IDIyLjkgMjYuNiAzOS44IDIxLjVzMjYuNi0yMi45IDIxLjUtMzkuOGMtNi40LTIxLjUtMTUuNS00MS44LTI3LTYwLjV6TTUxMiA0NDhjMC0yNS45LTE1LjQtNDguMy0zNy42LTU4LjMgMTEuNS0xOC43IDIwLjYtMzkgMjctNjAuNSA1LTE2LjktNC42LTM0LjgtMjEuNS0zOS44cy0zNC44IDQuNi0zOS44IDIxLjVjLTE4LjQgNjEuOS02Ny4zIDExMC44LTEyOS4yIDEyOS4yLTE2LjkgNS0yNi42IDIyLjktMjEuNSAzOS44czIyLjkgMjYuNiAzOS44IDIxLjVjMjEuNS02LjQgNDEuOC0xNS41IDYwLjUtMjcgMTAgMjIuMiAzMi40IDM3LjYgNTguMyAzNy42IDM1LjMgMCA2NC0yOC43IDY0LTY0ek0zNy42IDM4OS43Yy0yMi4yIDEwLTM3LjYgMzIuNC0zNy42IDU4LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjUuOSAwIDQ4LjMtMTUuNCA1OC4zLTM3LjYgMTguNyAxMS41IDM5IDIwLjYgNjAuNSAyNyAxNi45IDUgMzQuOC00LjYgMzkuOC0yMS41cy00LjYtMzQuOC0yMS41LTM5LjhjLTYxLjktMTguNC0xMTAuOC02Ny4zLTEyOS4yLTEyOS4yLTUtMTYuOS0yMi45LTI2LjYtMzkuOC0yMS41UzUuNiAzMTIuMiAxMC42IDMyOS4xYzYuNCAyMS41IDE1LjUgNDEuOCAyNyA2MC41ek0yNTYgMTkyYzE1LjYgMCAzMCA1LjYgNDEuMSAxNC45bC0xNS4zIDE1LjNjLTYuNiA2LjYtMS45IDE3LjggNy40IDE3LjhsNjAuNSAwYzUuNyAwIDEwLjQtNC43IDEwLjQtMTAuNGwwLTYwLjVjMC05LjMtMTEuMi0xMy45LTE3LjgtNy40bC0xMS4yIDExLjJjLTE5LjgtMTcuOS00Ni4yLTI4LjktNzUuMS0yOC45LTQzLjYgMC04MS4zIDI0LjktOTkuOCA2MS4xLTYgMTEuOC0xLjQgMjYuMyAxMC40IDMyLjNzMjYuMyAxLjQgMzIuMy0xMC40YzEwLjYtMjAuOCAzMi4yLTM0LjkgNTctMzQuOXptNTguNiA5My4xYy0xMC42IDIwLjgtMzIuMiAzNC45LTU3IDM0LjktMTUuNyAwLTMwLTUuNi00MS4xLTE0LjlsMTUuMy0xNS4zYzYuNi02LjYgMS45LTE3LjgtNy40LTE3LjhMMTY0IDI3MmMtNS43IDAtMTAuNCA0LjctMTAuNCAxMC40bDAgNjAuNWMwIDkuMyAxMS4yIDEzLjkgMTcuOCA3LjRsMTEuMi0xMS4yYzE5LjggMTcuOSA0Ni4yIDI4LjkgNzUuMSAyOC45IDQzLjYgMCA4MS4zLTI0LjkgOTkuOC02MS4xIDYtMTEuOCAxLjQtMjYuMy0xMC40LTMyLjNzLTI2LjMtMS40LTMyLjMgMTAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXNwbGl0LXVwLWFuZC1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YmMiLCAiTTM0Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw0MS40LTQxLjQgMCAxOTUuOWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xbC0xMTQuNyAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMzIwIDIyNCAzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYUZpbGxEcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGwtZHJpcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTc2IiwgIk0zMDkuNyA3MS42bC02NC40IDY0LjQgMzMuNCAzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0zMy40LTMzLjQtOTYuNCA5Ni40Yy0yLjkgMi45LTUuMSA2LjUtNi4zIDEwLjNsMzIxLjUgMCA1My43LTUzLjdjNC45LTQuOSA3LjYtMTEuNSA3LjYtMTguM3MtMi43LTEzLjUtNy42LTE4LjNMMzQ2LjMgNzEuNkMzNDEuNSA2Ni43IDMzNC45IDY0IDMyOCA2NHMtMTMuNSAyLjctMTguMyA3LjZ6TTU4LjMgMjMyLjRsOTYuNC05Ni40LTQ5LjQtNDkuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwyMDAgOTAuNyAyNjQuNCAyNi4zQzI4MS4zIDkuNSAzMDQuMSAwIDMyOCAwczQ2LjcgOS41IDYzLjYgMjYuM0w1MTcuNyAxNTIuNEM1MzQuNSAxNjkuMyA1NDQgMTkyLjEgNTQ0IDIxNnMtOS41IDQ2LjctMjYuMyA2My42TDMxMS42IDQ4NS43QzI5NC43IDUwMi41IDI3MS45IDUxMiAyNDggNTEycy00Ni43LTkuNS02My42LTI2LjNMNTguMyAzNTkuNkM0MS41IDM0Mi43IDMyIDMxOS45IDMyIDI5NnM5LjUtNDYuNyAyNi4zLTYzLjZ6TTUxMiA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjUuMiAzMi42LTc5LjYgNTEuMi0xMDguNyA2LTkuNCAxOS41LTkuNCAyNS41IDAgMTguNyAyOS4xIDUxLjIgODMuNSA1MS4yIDEwOC43IDAgMzUuMy0yOC43IDY0LTY0IDY0eiJdCiAgICB9OwogICAgZmFTaGllbGRIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtaGVhcnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3NCIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTI0OS42IDE4My41bDYuNCA4LjUgNi40LTguNWMxMS4xLTE0LjggMjguNS0yMy41IDQ2LjktMjMuNSAzMi40IDAgNTguNyAyNi4zIDU4LjcgNTguN2wwIDUuM2MwIDQ5LjEtNjUuOCA5OC4xLTk2LjUgMTE4LjMtOS41IDYuMi0yMS41IDYuMi0zMC45IDAtMzAuNy0yMC4yLTk2LjUtNjkuMy05Ni41LTExOC4zbDAtNS4zYzAtMzIuNCAyNi4zLTU4LjcgNTguNy01OC43IDE4LjUgMCAzNS45IDguNyA0Ni45IDIzLjV6Il0KICAgIH07CiAgICBmYVBlcnNvblNraWluZ05vcmRpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2tpaW5nLW5vcmRpYyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJza2lpbmctbm9yZGljIl0sICJmN2NhIiwgIk00MjQuOCAxNmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptOTkuOCAxOTMuN2M3LjYgMTUuMiAxLjkgMzMuNi0xMi42IDQybDAgMTgwLjMtMzIgMCAwLTE2NC4yLTEwLjEgNWMtMjcuNCAxMy43LTYwLjcgNi4xLTc5LjQtMTguMmwtMTkuNi0yNS41LTM5LjUgNjguOCAyNC44IDEyLjRjMjkuNSAxNC43IDQyLjkgNDkuNSAzMS4xIDgwLjJsLTI4LjIgNzMuNCAxNDkuNCAwYzcuOSAwIDE1LjYtMi4zIDIyLjItNi43bDcuOS01LjNjMTEtNy40IDI1LjktNC40IDMzLjMgNi43czQuNCAyNS45LTYuNyAzMy4zbC03LjkgNS4zQzU0MyA1MDYuOSA1MjYgNTEyIDUwOC42IDUxMmwtMTg5LjEgMGMtLjUgMC0xIDAtMS41IDBMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDg4IDBjMC04LjIgMy4xLTE2LjQgOS40LTIyLjZsNzQuMS03NC4xIDEwLjItMzUuOWMxMS4zIDE4LjMgMjcuNyAzMy44IDQ4LjQgNDQuMmw0LjggMi40LTEuOSA2LjhjLTMgMTAuNS04LjYgMjAtMTYuMyAyNy43bC01MS41IDUxLjUgMTAxLjMgMCAzNy4xLTk2LjQtNTUuNi0yNy44QzIzMC40IDMxOSAyMTUuMyAyNjcgMjM5LjMgMjI3LjFsMzcuNy02Mi43LTI3LjctNy43Yy05LTIuNS0xOC4xIDMuMi0yMCAxMi4zbC01LjkgMjkuM2MtMy4xIDE1LjYtMTcuMSAyNi4zLTMyLjUgMjUuN2wtMTMwIDIwOC0zNy43IDAgMTQwLjYtMjI1Yy0zLjQtNi4zLTQuNi0xMy44LTMuMS0yMS4zbDUuOS0yOS4zYzkuMS00NS42IDU1LjEtNzMuOCA5OS45LTYxLjRsMzIuNSA5YzQ2LjcgMTMgODggNDAuOCAxMTcuNiA3OS4zbDI0LjkgMzIuMyA0MC40LTIwLjJjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3oiXQogICAgfTsKICAgIGZhU2tpaW5nTm9yZGljID0gZmFQZXJzb25Ta2lpbmdOb3JkaWM7CiAgICBmYVNxdWFyZUNoZWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgImNoZWNrLXNxdWFyZSJdLCAiZjE0YSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzQyIDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMTUuMiAxMzcgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhQ2hlY2tTcXVhcmUyID0gZmFTcXVhcmVDaGVjazI7CiAgICBmYUJhdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcwNSwgImJhdGh0dWIiXSwgImYyY2QiLCAiTTk2IDc3LjNjMC03LjMgNS45LTEzLjMgMTMuMy0xMy4zIDMuNSAwIDYuOSAxLjQgOS40IDMuOWwxNC45IDE0LjljLTMuNiA5LjEtNS41IDE4LjktNS41IDI5LjIgMCAxOS45IDcuMiAzOCAxOS4yIDUyLTUuMyA5LjItNCAyMS4xIDMuOCAyOSA5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwyODkgODljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjktNy44LTcuOS0xOS44LTkuMS0yOS0zLjgtMTQtMTItMzIuMS0xOS4yLTUyLTE5LjItMTAuMyAwLTIwLjIgMi0yOS4yIDUuNUwxNjMuOSAyMi42QzE0OS40IDguMSAxMjkuNyAwIDEwOS4zIDAgNjYuNiAwIDMyIDM0LjYgMzIgNzcuM0wzMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA0OGMwIDI4LjQgMTIuNCA1NCAzMiA3MS42TDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYgMjU2IDAgMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDAuNGMxOS42LTE3LjYgMzItNDMuMSAzMi03MS42bDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMjU2IDk2IDc3LjN6Il0KICAgIH07CiAgICBmYUJhdGh0dWIgPSBmYUJhdGg7CiAgICBmYUNoZXNzQmlzaG9wMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1iaXNob3AiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5ODIxXSwgImY0M2EiLCAiTTY0IDM4NEw0OC4zIDM2OC4zQzE3LjQgMzM3LjQgMCAyOTUuNCAwIDI1MS43IDAgMjEzLjEgMTMuNSAxNzUuOCAzOC4yIDE0Ni4xTDEwNi43IDY0IDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMlM3OC4zIDAgOTYgMEwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDQ3LjYgNTcuMS04NS45IDg1LjljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4Mi4zLTgyLjNjMTguNyAyNy4zIDI4LjcgNTkuNyAyOC43IDkzIDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNkwyNTYgMzg0IDMxMi4yIDQ1NC4zYzUgNi4zIDcuOCAxNC4xIDcuOCAyMi4yIDAgMTkuNi0xNS45IDM1LjUtMzUuNSAzNS41TDM1LjUgNTEyYy0xOS42IDAtMzUuNS0xNS45LTM1LjUtMzUuNSAwLTguMSAyLjctMTUuOSA3LjgtMjIuMkw2NCAzODR6Il0KICAgIH07CiAgICBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uLWJvdHRsZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInByZXNjcmlwdGlvbi1ib3R0bGUtYWx0Il0sICJmNDg2IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6TTE2MCAyNDhsMCA0MC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDAgMCAwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQwIDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00MCAwIDAtNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCA9IGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbDsKICAgIGZhRHJhd1BvbHlnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJhdy1wb2x5Z29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNTgwNTUsICJ2ZWN0b3ItcG9seWdvbiJdLCAiZjVlZSIsICJNNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMjczLjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMzQtMjYuNSA2MS44LTYwIDYzLjlsLTIuMSAyLjktNzEuNSA5OS4xYzMuNiA4IDUuNiAxNi45IDUuNiAyNi4ycy0yIDE4LjItNS42IDI2LjJsMi4yIDMuMSA2OS4zIDk2IDIuMSAyLjljMzMuNSAyLjEgNjAgMjkuOSA2MCA2My45IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjczLjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNzMuMUMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMHpNMzk0LjIgNDEzLjRsLTY1LjUtOTAuNi0yLjItMy4xYy0yLjEgLjItNC4zIC4zLTYuNSAuMy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzIuMiAwIDQuNCAuMSA2LjUgLjNsNjcuNy05My43Yy0uNi0uOS0xLjEtMS43LTEuNi0yLjZMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyNzMuMSAwYy41LS45IDEuMS0xLjggMS42LTIuNnoiXQogICAgfTsKICAgIGZhVmVjdG9yUG9seWdvbiA9IGZhRHJhd1BvbHlnb247CiAgICBmYUlDdXJzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaS1jdXJzb3IiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjI0NiIsICJNLjEgMjkuM0MtMS40IDQ3IDExLjcgNjIuNCAyOS4zIDYzLjlsOCAuN0M3MC41IDY3LjMgOTYgOTUgOTYgMTI4LjNsMCA5NS43LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDk1LjdjMCAzMy4zLTI1LjUgNjEtNTguNyA2My44bC04IC43QzExLjcgNDQ5LjYtMS40IDQ2NSAuMSA0ODIuN1MxNyA1MTMuNCAzNC43IDUxMS45bDgtLjdjMzQuMS0yLjggNjQuMi0xOC45IDg1LjQtNDIuOSAyMS4yIDI0IDUxLjIgNDAgODUuNCA0Mi45bDggLjdjMTcuNiAxLjUgMzMuMS0xMS42IDM0LjUtMjkuMnMtMTEuNi0zMy4xLTI5LjItMzQuNWwtOC0uN0MxODUuNSA0NDQuNyAxNjAgNDE3IDE2MCAzODMuN2wwLTk1LjcgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTk1LjdjMC0zMy4zIDI1LjUtNjEgNTguNy02My44bDgtLjdjMTcuNi0xLjUgMzAuNy0xNi45IDI5LjItMzQuNVMyMzktMS40IDIyMS4zIC4xbC04IC43Yy0zNC4xIDIuOC02NC4yIDE4LjktODUuNCA0Mi45LTIxLjItMjQtNTEuMi00MC04NS40LTQyLjlsLTgtLjdDMTctMS40IDEuNiAxMS43IC4xIDI5LjN6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTAwIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek00MzIgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMTYgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4eiJdCiAgICB9OwogICAgZmFTaGllbGREb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWRvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTczIiwgIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwLjkgMjg2LjJjNC44IDEuMiA5LjkgMS44IDE1LjEgMS44IDM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjQgNDQuMiAwYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNy4yIDE0LjMgNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDggMCAwIDUwLjdjMCA3LjMtNS45IDEzLjMtMTMuMyAxMy4zLTEuOCAwLTMuNi0uNC01LjItMS4xbC05OC43LTQyLjNjLTYuNi0yLjgtMTAuOC05LjMtMTAuOC0xNi40IDAtMi44IC42LTUuNSAxLjktOGwxNS0zMHpNMTYwIDE2MGw0OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdCiAgICB9OwogICAgZmFHcmVhdGVyVGhhbkVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyZWF0ZXItdGhhbi1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTMyIiwgIk0yMS45IDk0LjRDNS4xIDg4LjgtMy45IDcwLjYgMS43IDUzLjlTMjUuNCAyOC4xIDQyLjEgMzMuNmwzODQgMTI4QzQzOS4yIDE2NiA0NDggMTc4LjIgNDQ4IDE5MnMtOC44IDI2LTIxLjkgMzAuNGwtMzg0IDEyOGMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNUwzMTQuOCAxOTIgMjEuOSA5NC40ek00MTYgNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVPcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzVdLCAiZjJiNiIsICJNNjQuNCAxNzUuOEwyNTYgMzMuOSA0NDcuNiAxNzUuOCAyODkuNSAyOTNjLTkuNyA3LjItMjEuNCAxMS0zMy41IDExcy0yMy44LTMuOS0zMy41LTExTDY0LjQgMTc1Ljh6TTI1Ni0zMmMtMTIuMSAwLTIzLjggMy45LTMzLjUgMTFMMjUuOSAxMjQuN0M5LjYgMTM2LjggMCAxNTUuOCAwIDE3Ni4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjM5LjljMC0yMC4zLTkuNi0zOS40LTI1LjktNTEuNEwyODkuNS0yMWMtOS43LTcuMi0yMS40LTExLTMzLjUtMTF6Il0KICAgIH07CiAgICBmYU1vdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MmQiLCAiTTExMi40IDE3OS4yQzE0MiAxMjcuNyAxOTYuOCA5NiAyNTYuMiA5NnMxMTQuMiAzMS43IDE0My45IDgzLjJMNTA4LjcgMzY4YzEyLjMgMjEuMy0zLjEgNDgtMjcuNyA0OEwzMS41IDQxNmMtMjQuNiAwLTQwLTI2LjYtMjcuNy00OEwxMTIuNCAxNzkuMnoiXQogICAgfTsKICAgIGZhVm9pY2VtYWlsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvaWNlbWFpbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODk3IiwgIk0xNDQgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0yNjMuOCAzMjBjMTUuMy0yMi45IDI0LjItNTAuNCAyNC4yLTgwIDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzAgMTYwLjUgMCAyNDAgNjQuNSAzODQgMTQ0IDM4NGwzNTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFM1NzUuNSA5NiA0OTYgOTYgMzUyIDE2MC41IDM1MiAyNDBjMCAyOS42IDguOSA1Ny4xIDI0LjIgODBsLTExMi41IDB6TTQ5NiAxNjBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6Il0KICAgIH07CiAgICBmYVZlc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDg1IiwgIk0yMDAgNDY0bDAtMTcwLjFjMC0zLjktLjUtNy44LTEuNC0xMS42TDE0NC40IDY1LjRDMTYyLjEgNzcuMiAxODguMiA4OCAyMjQgODhzNjEuOS0xMC44IDc5LjYtMjIuNkwyNDkuNCAyODIuM2MtMSAzLjgtMS40IDcuNy0xLjQgMTEuNkwyNDggNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkzLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNkwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuNSAwYy0uMyAwLS42IDAtMSAwLS42IDAtMS4yIDAtMS44IDAtMTguOCAwLTM0LjEgOS43LTQ0LjEgMTguOC05LjMgOC40LTI4LjUgMjEuMi02MS43IDIxLjJzLTUyLjQtMTIuOC02MS43LTIxLjJjLTEwLTkuMS0yNS4zLTE4LjgtNDQuMS0xOC44LS42IDAtMS4yIDAtMS44IDAtLjMgMC0uNiAwLTEgMEwxMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OGwwIDk3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTA0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6Il0KICAgIH07CiAgICBmYUF1ZGlvRGVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXVkaW8tZGVzY3JpcHRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5ZSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptOTYgOTZsMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0IDQ4IDAgMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHptNDggMzJsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMi00OCAwem0xNTItOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC00OGMwLTM5LjgtMzIuMi03Mi03Mi03MmwtNDggMHptNDggMTQ0bC0yNCAwIDAtOTYgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFXID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTldLCAiNTciLCAiTTIwLjggMzRjMTYuNS02LjIgMzUgMi4yIDQxLjIgMTguN0wxNzIuMiAzNDYuNyAyNTcuMyA1NWM0LTEzLjcgMTYuNS0yMyAzMC43LTIzczI2LjcgOS40IDMwLjcgMjNMNDAzLjggMzQ2LjcgNTE0IDUyLjhjNi4yLTE2LjUgMjQuNi0yNC45IDQxLjItMTguN1M1ODAuMiA1OC43IDU3NCA3NS4ybC0xNDQgMzg0Yy00LjggMTIuOS0xNy40IDIxLjMtMzEuMiAyMC43cy0yNS43LTkuOC0yOS41LTIzTDI4OCAxNzguMyAyMDYuNyA0NTdjLTMuOSAxMy4yLTE1LjggMjIuNS0yOS41IDIzcy0yNi4zLTcuOC0zMS4yLTIwLjdMMiA3NS4yQy00LjIgNTguNyA0LjIgNDAuMiAyMC44IDM0eiJdCiAgICB9OwogICAgZmFFeWVEcm9wcGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZS1kcm9wcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV5ZS1kcm9wcGVyLWVtcHR5IiwgImV5ZWRyb3BwZXIiXSwgImYxZmIiLCAiTTM0MS42IDI5LjJsLTEwMS42IDEwMS42LTkuNC05LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAxMDEuNi0xMDEuNmMzOS0zOSAzOS0xMDIuMiAwLTE0MS4xcy0xMDIuMi0zOS0xNDEuMSAwek01NS40IDMyMy4zYy0xNSAxNS0yMy40IDM1LjQtMjMuNCA1Ni42bDAgNDIuNC0yNi42IDM5LjljLTguNSAxMi43LTYuOCAyOS42IDQgNDAuNHMyNy43IDEyLjUgNDAuNCA0bDM5LjktMjYuNiA0Mi40IDBjMjEuMiAwIDQxLjYtOC40IDU2LjYtMjMuNGwxMDkuNC0xMDkuNC00NS4zLTQ1LjMtMTA5LjQgMTA5LjRjLTMgMy03LjEgNC43LTExLjMgNC43bC0zNi4xIDAgMC0zNi4xYzAtNC4yIDEuNy04LjMgNC43LTExLjNsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40eiJdCiAgICB9OwogICAgZmFFeWVEcm9wcGVyRW1wdHkgPSBmYUV5ZURyb3BwZXI7CiAgICBmYUV5ZWRyb3BwZXIgPSBmYUV5ZURyb3BwZXI7CiAgICBmYUNpcmNsZVhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMiwgInRpbWVzLWNpcmNsZSIsICJ4bWFyay1jaXJjbGUiXSwgImYwNTciLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFUaW1lc0NpcmNsZTIgPSBmYUNpcmNsZVhtYXJrMjsKICAgIGZhWG1hcmtDaXJjbGUyID0gZmFDaXJjbGVYbWFyazI7CiAgICBmYVRyYWlsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaWxlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDQxIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2em00MDggMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMzZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTc2LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0yNjQgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6Il0KICAgIH07CiAgICBmYVR1cmtpc2hMaXJhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJraXNoLWxpcmEtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0cnkiLCAidHVya2lzaC1saXJhIl0sICJlMmJiIiwgIk0xNjAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0My42IDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDQ2LjEgMTIxLjQtMzQuN2MxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0xMzQuNiAzOC41IDAgMTYyLjUgNzIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTEwNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE3Ni4yLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTQ2LjEtMjUuNCA3LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wzOC42LTExIDAtNjEuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVHJ5ID0gZmFUdXJraXNoTGlyYVNpZ247CiAgICBmYVR1cmtpc2hMaXJhID0gZmFUdXJraXNoTGlyYVNpZ247CiAgICBmYVZvbGNhbm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sY2FubyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NV0sICJmNzcwIiwgIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNSAxMS4yLTE4LjYgMzEuNi0zMSA1NC44LTMxczQzLjYgMTIuNCA1NC44IDMxYzExLjEtOS40IDI1LjUtMTUgNDEuMi0xNSAzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGMtMTQuNyAwLTI4LjMtNS0zOS4xLTEzLjNsLTMyIDQ4QzI3NS4zIDE4NyAyNjYgMTkyIDI1NiAxOTJzLTE5LjMtNS0yNC45LTEzLjNsLTMyLTQ4QzE4OC4zIDEzOSAxNzQuNyAxNDQgMTYwIDE0NHpNMTQ0IDM1Mmw0OC40LTI0LjJjMTAuMi01LjEgMjEuNi03LjggMzMtNy44IDE5LjYgMCAzOC40IDcuOCA1Mi4yIDIxLjZsMzIuNSAzMi41YzYuMyA2LjMgMTQuOSA5LjkgMjMuOCA5LjkgMTEuMyAwIDIxLjgtNS42IDI4LTE1bDkuNy0xNC42LTU5LTY2LjNjLTkuMS0xMC4yLTIyLjItMTYuMS0zNS45LTE2LjFsLTQxLjggMGMtMTMuNyAwLTI2LjggNS45LTM1LjkgMTYuMWwtNTkuOSA2Ny40IDQuNy0zLjV6bTE5LjQtOTUuOGMxOC4yLTIwLjUgNDQuMy0zMi4yIDcxLjgtMzIuMmw0MS44IDBjMjcuNCAwIDUzLjUgMTEuNyA3MS44IDMyLjJsMTUwLjIgMTY5YzguNSA5LjUgMTMuMiAyMS45IDEzLjIgMzQuNyAwIDI4LjgtMjMuNCA1Mi4yLTUyLjIgNTIuMkw1Mi4yIDUxMkMyMy40IDUxMiAwIDQ4OC42IDAgNDU5LjggMCA0NDcuMSA0LjcgNDM0LjcgMTMuMiA0MjUuMmwxNTAuMi0xNjl6Il0KICAgIH07CiAgICBmYVdhbmRTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3MmIiLCAiTTQ2NCA2LjFjOS41LTguNSAyNC04LjEgMzMgLjlsOCA4YzkgOSA5LjQgMjMuNSAuOSAzM2wtODUuOCA5NS45Yy0yLjYgMi45LTQuMSA2LjctNC4xIDEwLjdsMCAyMS40YzAgOC44LTcuMiAxNi0xNiAxNmwtMTUuOCAwYy00LjYgMC04LjkgMS45LTExLjkgNS4zTDEwMC43IDUwMC45Yy02LjMgNy4xLTE1LjMgMTEuMS0yNC44IDExLjEtOC44IDAtMTcuMy0zLjUtMjMuNS05LjhMOS43IDQ1OS43Yy02LjItNi4yLTkuNy0xNC43LTkuNy0yMy41IDAtOS41IDQtMTguNSAxMS4xLTI0LjhsMTExLjYtOTkuOGMzLjQtMyA1LjMtNy40IDUuMy0xMS45bDAtMjcuNmMwLTguOCA3LjItMTYgMTYtMTZsMzQuNiAwYzMuOSAwIDcuNy0xLjUgMTAuNy00LjFMNDY0IDYuMXpNNDMyIDI4OGMzLjYgMCA2LjcgMi40IDcuNyA1LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhsLTE0LjgtNTEuNy01MS43LTE0LjhjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01Ljh6TTg3LjcgNjkuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOEw1Ny41IDE2Ni41IDUuOCAxNTEuN2MtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHM2LjcgMi40IDcuNyA1Ljh6TTIwOCAwYzMuNyAwIDYuOSAyLjUgNy44IDYuMWw2LjggMjcuMyAyNy4zIDYuOGMzLjYgLjkgNi4xIDQuMSA2LjEgNy44cy0yLjUgNi45LTYuMSA3LjhsLTI3LjMgNi44LTYuOCAyNy4zYy0uOSAzLjYtNC4xIDYuMS03LjggNi4xcy02LjktMi41LTcuOC02LjFsLTYuOC0yNy4zLTI3LjMtNi44Yy0zLjYtLjktNi4xLTQuMS02LjEtNy44czIuNS02LjkgNi4xLTcuOGwyNy4zLTYuOCA2LjgtMjcuM2MuOS0zLjYgNC4xLTYuMSA3LjgtNi4xeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjEzMCIsICJNMTkyIDBDMTM5IDAgOTYgNDMgOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2ek00OCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxNzAuNyAwIDE4NGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNWwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggMzAzLjUgNDggMjI0bDAtNDB6Il0KICAgIH07CiAgICBmYUNyb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDgxXSwgImY1MjEiLCAiTTMxMyA4Ny4yYzkuMi03LjMgMTUtMTguNiAxNS0zMS4yIDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMTIuNiA1LjkgMjMuOSAxNSAzMS4yTDE5NC42IDE5NC44Yy0xMCAxNS43LTMxLjMgMTkuNi00Ni4yIDguNEw4OC45IDE1OC43YzQuNS02LjQgNy4xLTE0LjMgNy4xLTIyLjcgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCAyMS44IDE3LjUgMzkuNiAzOS4yIDQwTDg3LjggMzkzLjVjNC43IDMxLjMgMzEuNiA1NC41IDYzLjMgNTQuNWwyNzMuOCAwYzMxLjcgMCA1OC42LTIzLjIgNjMuMy01NC41TDUyMC44IDE3NmMyMS43LS40IDM5LjItMTguMiAzOS4yLTQwIDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgOC40IDIuNiAxNi4zIDcuMSAyMi43bC01OS40IDQ0LjZjLTE0LjkgMTEuMi0zNi4yIDcuMy00Ni4yLTguNEwzMTMgODcuMnoiXQogICAgfTsKICAgIGZhVGVudEFycm93VHVybkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudC1hcnJvdy10dXJuLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4MCIsICJNLS41IDExM2w3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMxLTMxIDM1MC4xIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjRjMC00OC42LTM5LjQtODgtODgtODhsLTM1MC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlTODAuOS0yLjMgNzEuNSA3TC0uNSA3OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXQogICAgfTsKICAgIGZhVHJ1Y2tGYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZhc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsic2hpcHBpbmctZmFzdCJdLCAiZjQ4YiIsICJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNjIxLjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNjQwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMy4zIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNDgtNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgMTQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFMxMC43IDk2IDI0IDk2bDQwIDB6TTU3NiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0yNTYgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVNoaXBwaW5nRmFzdCA9IGZhVHJ1Y2tGYXN0OwogICAgZmFVc2VyUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItZWRpdCJdLCAiZjRmZiIsICJNMjU2LjEgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZjLTk4LjUgMC0xNzguMyA3OS44LTE3OC4zIDE3OC4zIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDE5Ni41IDAgMTAuOS01NC41YzQuMy0yMS43IDE1LTQxLjYgMzAuNi01Ny4ybDY3LjMtNjcuM2MtMjgtMTguMy02MS40LTI4LjktOTcuNC0yOC45bC01OS40IDB6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXQogICAgfTsKICAgIGZhVXNlckVkaXQgPSBmYVVzZXJQZW47CiAgICBmYVVzZXJDbG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWNsb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ZmQiLCAiTTIyNCA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMTk0LjMgMzA0bDU5LjQgMGMzLjkgMCA3LjkgLjEgMTEuOCAuNC0xNi4yIDI4LjItMjUuNSA2MC44LTI1LjUgOTUuNiAwIDQxLjggMTMuNCA4MC41IDM2IDExMkw0NS43IDUxMkMyOS4zIDUxMiAxNiA0OTguNyAxNiA0ODIuMyAxNiAzODMuOCA5NS44IDMwNCAxOTQuMyAzMDR6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU2hvd2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3dlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcwM10sICJmMmNjIiwgIk02NCAxMzEuOWMwLTE5LjggMTYuMS0zNS45IDM1LjktMzUuOSA5LjUgMCAxOC42IDMuOCAyNS40IDEwLjVsMTYuMiAxNi4yYy0yMSAzOC45LTE3LjQgODcuNSAxMC45IDEyM0wxNTEgMjQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMzQ1IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xLjMgMS4zYy0zNS41LTI4LjMtODQuMS0zMS45LTEyMy0xMC45TDE3MC41IDYxLjNDMTUxLjggNDIuNSAxMjYuNCAzMiA5OS45IDMyIDQ0LjcgMzIgMCA3Ni43IDAgMTMxLjlMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMxNi4xek0yNTYgMzUyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyLTMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS11cCJdLCAiZjE1MSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDE2MGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOVMzMzcuNSAzMjAgMzI4IDMyMGwtMjA4IDBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVVcDIgPSBmYVNxdWFyZUNhcmV0VXAyOwogICAgZmFNYXBMb2NhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtbG9jYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsibWFwLW1hcmtlZCJdLCAiZjU5ZiIsICJNNTc2IDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDQxMy41IDc3LjUgMjM0LjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzcwLjggODguOCA2NCA5OS45IDY0IDExMmwwIDM1MmMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTczLjMgNTcuOGMtNC4zLTYuNC04LjUtMTMuMS0xMi42LTE5LjktMTEtMTguMy0yMS45LTM5LjMtMzAtNjEuOGwtMTAxLjItMzMuNyAwLTI4NC41IDEyOCA0Mi43IDAgOTkuM2MzMS0zNS44IDc3LTU4LjQgMTI4LTU4LjQgMjIuNiAwIDQ0LjIgNC40IDY0IDEyLjVMNTc2IDQ4ek0zOTIgMzQxLjljMCA2OC45IDY0LjEgMTUwLjQgOTguNiAxODkuMyAxMS42IDEzIDMxLjMgMTMgNDIuOSAwIDM0LjUtMzguOSA5OC42LTEyMC40IDk4LjYtMTg5LjMgMC02NS4xLTUzLjctMTE3LjktMTIwLTExNy45UzM5MiAyNzYuOCAzOTIgMzQxLjl6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlZCA9IGZhTWFwTG9jYXRpb247CiAgICBmYVBlbkZhbmN5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1mYW5jeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM5NSwgMTAwMDJdLCAiZjVhYyIsICJNMzczLjUgMjcuMWMxNS0xNy4yIDM2LjctMjcuMSA1OS42LTI3LjEgNDMuNiAwIDc5IDM1LjQgNzkgNzkgMCAyMi44LTkuOSA0NC42LTI3LjEgNTkuNkwyODMuNyAzMTMuOCAyNzMgMzAzIDIwOSAyMzkgMTk4LjIgMjI4LjMgMzczLjUgMjcuMXpNMTYxLjEgMjU5QzE2MiAyNjAgMTg4IDI4NiAyMzkgMzM3bDEzLjkgMTMuOS0xNy4xIDc0LjJjLTMuOSAxNy4xLTE2LjkgMzAuNy0zMy44IDM1LjRsLTE2OS44IDQ3LjUgOTIuMy05Mi4zYzEuMiAuMSAyLjMgLjIgMy41IC4yIDE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJjMCAxLjIgLjEgMi40IC4yIDMuNUwzLjkgNDc5LjggNTEuNSAzMTBjNC43LTE2LjkgMTguMy0yOS45IDM1LjQtMzMuOEwxNjEuMSAyNTl6Il0KICAgIH07CiAgICBmYUV1cm9TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV1cm8tc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjQsICJldXIiLCAiZXVybyJdLCAiZjE1MyIsICJNNzMuMyAxOTJDMTAwLjggOTkuNSAxODYuNSAzMiAyODggMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtNjUuNiAwLTEyMiAzOS41LTE0Ni43IDk2TDI3MiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0My4yIDBjLS41IDUuMy0uOCAxMC42LS44IDE2cy4zIDEwLjcgLjggMTZMMjcyIDI3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTMwLjcgMGMyNC43IDU2LjUgODEuMSA5NiAxNDYuNyA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xMDEuNSAwLTE4Ny4yLTY3LjUtMjE0LjctMTYwTDQwIDMyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNC42IDBjLS43LTEwLjUtLjctMjEuNSAwLTMyTDQwIDI0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwzMy4zIDB6Il0KICAgIH07CiAgICBmYUV1ciA9IGZhRXVyb1NpZ247CiAgICBmYUV1cm8gPSBmYUV1cm9TaWduOwogICAgZmFIb3VzZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBiIiwgIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMiA0Ny4yLTE3NS45IDExNC44LTUtMS44LTEwLjUtMi44LTE2LjEtMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkwLjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMiA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTU1NS4zIDM0MC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2LjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6Il0KICAgIH07CiAgICBmYUxpcmFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpcmEtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzgzNTZdLCAiZjE5NSIsICJNODQuOSAyNTZsLTI4LjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMS42IDBDNTMuMiAxMjQuNyAxMTYuOCA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTUzLjggMC05MC4xIDUyLjktNzMuNSAxMDJsMTYyLjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ1LjEgMGMyLjMgMTAuNiAzLjYgMjEuMyAzLjkgMzJsMTQxLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwxNTAgMzM2Yy00LjggMTguNi0xMi42IDM2LjUtMjMuNiA1Mi45bC0xOC4xIDI3LjEgMjEyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjcyIDBjLTExLjggMC0yMi42LTYuNS0yOC4yLTE2LjlzLTUtMjMgMS42LTMyLjlsNTEuMi03Ni44YzMuNy01LjYgNi45LTExLjQgOS40LTE3LjRsLTI2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzQuOCAwYy0uNS0xMC44LTIuNi0yMS42LTYuNC0zMnoiXQogICAgfTsKICAgIGZhWWVuU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ5ZW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzE2NSwgImNueSIsICJqcHkiLCAicm1iIiwgInllbiJdLCAiZjE1NyIsICJNNzQuOSA0Ni43Yy05LjYtMTQuOS0yOS40LTE5LjItNDQuMi05LjZTMTEuNSA2Ni40IDIxLjEgODEuM0wxNDMuNyAyNzIgODggMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCAzMi03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTMyIDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU1LjcgMCAxMjIuNi0xOTAuN2M5LjYtMTQuOSA1LjMtMzQuNy05LjYtNDQuMnMtMzQuNy01LjMtNDQuMiA5LjZMMTkyIDIyOC44IDc0LjkgNDYuN3oiXQogICAgfTsKICAgIGZhQ255ID0gZmFZZW5TaWduOwogICAgZmFKcHkgPSBmYVllblNpZ247CiAgICBmYVJtYiA9IGZhWWVuU2lnbjsKICAgIGZhWWVuID0gZmFZZW5TaWduOwogICAgZmFCb3hPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC1vcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0OWUiLCAiTTU2MC4zIDIzNy4yYzEwLjQgMTEuOCAyOC4zIDE0LjQgNDEuOCA1LjUgMTQuNy05LjggMTguNy0yOS43IDguOS00NC40bC00OC03MmMtMi44LTQuMi02LjYtNy43LTExLjEtMTAuMkwzNTEuNCA0LjdjLTE5LjMtMTAuNy00Mi44LTEwLjctNjIuMiAwTDg4LjggMTE2Yy01LjQgMy05LjcgNy40LTEyLjYgMTIuOEwyNy43IDIxOC43Yy0xMi42IDIzLjQtMy44IDUyLjUgMTkuNiA2NS4xbDMzIDE3LjcgMCA1My4zYzAgMjMgMTIuNCA0NC4zIDMyLjQgNTUuN2wxNzYgOTkuN2MxOS42IDExLjEgNDMuNSAxMS4xIDYzLjEgMGwxNzYtOTkuN2MyMC4xLTExLjQgMzIuNC0zMi42IDMyLjQtNTUuN2wwLTExNy41em0tMjQwLTkuOEwxNzAuMiAxNDQgMzIwLjMgNjAuNiA0NzAuNCAxNDQgMzIwLjMgMjI3LjR6bS00MS41IDUwLjJsLTIxLjMgNDYuMi0xNjUuOC04OC44IDI1LjQtNDcuMiAxNjEuNyA4OS44eiJdCiAgICB9OwogICAgZmFUcnVja0ZpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZpZWxkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGQiLCAiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDIyNCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmw0MC40IDBjMzIuNCAwIDYxLjYgMTkuNiA3NCA0OS41bDQzLjggMTA2LjMgMS43IDQuMiAyNC43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtLjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThsLTE0NC43IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMy42IC4yLTcuMSAuNi0xMC41LTE5LTYuNC0zMi42LTI0LjQtMzIuNi00NS41bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMC0zMnptMzUyIDMybDAgOTYgODIuMSAwLTM1LjQtODYuMWMtMi41LTYtOC4zLTkuOS0xNC44LTkuOUwzODQgMTI4ek0xOTIgMzkyYTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTI4MCA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUxvY2F0aW9uUGluTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1waW4tbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTFmIiwgIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwIDI5NC4xIDAgMzc3LjYgNzguMyAzODMuNiAxNzcgMzIwLjcgMTg1LjEgMjcyIDIzOC44IDI3MiAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgNzUuN2MtOS45IDExLjYtMTguOSAyMS43LTI2LjQgMjkuOC0xMS44IDEyLjgtMzEuNSAxMi44LTQzLjMgMC01MC4yLTU0LjUtMTcwLjQtMTk3LjUtMTcwLjQtMzE2Ljh6TTE5MiAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTI0MCA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMjg4IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhUGVyc29uUHJheWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcHJheWluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODcyMCwgInByYXkiXSwgImY2ODMiLCAiTTMyMCA2NGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTIwMC43IDI2NGwyMi45IDMxLjVjNi41IDguOSAxNi4zIDE0LjcgMjcuMiAxNi4xczIxLjktMS43IDMwLjQtOC43bDg4LTcyYzE3LjEtMTQgMTkuNi0zOS4yIDUuNi01Ni4zcy0zOS4yLTE5LjYtNTYuMy01LjZsLTU1LjIgNDUuMi0yNi4yLTM2Yy0xNS42LTIxLjUtNDAuNi0zNC4yLTY3LjItMzQuMi0zMC45IDAtNTkuMiAxNy4xLTczLjYgNDQuNEw0Ny44IDI4MC45Yy0yMC4yIDM4LjUtOS40IDg1LjkgMjUuNiAxMTEuOEwxMjYuNiA0MzIgNDAgNDMyYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDIwOCAwYzE3LjMgMCAzMi42LTExLjEgMzgtMjcuNXMtLjMtMzQuNC0xNC4yLTQ0LjdsLTExNi4xLTg1LjggNDUtOTB6Il0KICAgIH07CiAgICBmYVByYXkgPSBmYVBlcnNvblByYXlpbmc7CiAgICBmYUNsaXBib2FyZExpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkLWxpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ2ZCIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTEyOCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzIgMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0wIDEyOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek05NiA0MTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFTYWNrRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhY2stZG9sbGFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc2XSwgImY4MWQiLCAiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0yNjAgMjI0Yy0xMSAwLTIwIDktMjAgMjBsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMjE2IDM4NGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHoiXQogICAgfTsKICAgIGZhTW91bnRhaW5TdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4tc3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MmYiLCAiTTI1Ni41IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41LTcuMiAxMi4xLTIwLjMgMTkuNS0zNC4zIDE5LjVsLTQzMiAwYy0xNC4xIDAtMjcuMS03LjQtMzQuMy0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDAgMi45LTQuNkMyMzEuNyA2LjIgMjQzLjYgMCAyNTYuNSAwek0xNzAuNCAyNDkuOWwyNi44IDI2LjhjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNDMuMy00My4zYzYtNiAxNC4xLTkuNCAyMi42LTkuNGw0Mi44IDAtNzIuMS0xMzMuNS04Ni4xIDE1OS40ek00OTYuNSAxNjBhODAgODAgMCAxIDEgMC0xNjAgODAgODAgMCAxIDEgMCAxNjB6Il0KICAgIH07CiAgICBmYUFycm93VXBXaWRlU2hvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtd2lkZS1zaG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC11cCJdLCAiZjE2MSIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2ek0zMjAgNDgwbDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50VXAgPSBmYUFycm93VXBXaWRlU2hvcnQ7CiAgICBmYVVzZXJzTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTIiLCAiTTIyNCAxMjhhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0xNzYgMzM2YzAtNjEuOSA1MC4xLTExMiAxMTItMTEyczExMiA1MC4xIDExMiAxMTJsMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC04ek0zOTIgMTQ0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjcuMiAxMDAuNGM5LjEtMi45IDE4LjgtNC40IDI4LjgtNC40IDUzIDAgOTYgNDMgOTYgOTZsMCAxMC43YzAgMTEuOC05LjYgMjEuMy0yMS4zIDIxLjNsLTc4LjggMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLThjMC0zNC4xLTEwLjYtNjUuNy0yOC44LTkxLjZ6bS0yNjIuNCAwYy0xOC4yIDI2LTI4LjggNTcuNS0yOC44IDkxLjZsMCA4YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNzguOCAwQzQxLjYgMzY4IDMyIDM1OC40IDMyIDM0Ni43TDMyIDMzNmMwLTUzIDQzLTk2IDk2LTk2IDEwIDAgMTkuNyAxLjUgMjguOCA0LjR6TTcyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTAgNDQwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDQ2NGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVN0YXJPZkRhdmlkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItb2YtZGF2aWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDAxN10sICJmNjlhIiwgIk00MTUuOSAzMTEuOWwtMjcuOCA0OC4xIDU1LjcgMC0yNy44LTQ4LjF6TTM4My42IDI1NmwtNjAuMi0xMDQtMTM0LjggMC02MC4yIDEwNCA2MC4yIDEwNCAxMzQuOCAwIDYwLjItMTA0em02NC43IDBsNTguNCAxMDAuOWMzLjUgNiA1LjMgMTIuOCA1LjMgMTkuNyAwIDIxLjctMTcuNiAzOS40LTM5LjQgMzkuNGwtMTE3IDAtNjEuMyAxMDUuOEMyODYuNSA1MzUuNiAyNzEuOCA1NDQgMjU2IDU0NHMtMzAuNS04LjQtMzguNC0yMi4ybC02MS4zLTEwNS44LTExNyAwYy0yMS43IDAtMzkuNC0xNy42LTM5LjQtMzkuNCAwLTYuOSAxLjgtMTMuNyA1LjMtMTkuN0w2My43IDI1NiA1LjMgMTU1LjFDMS44IDE0OS4xIDAgMTQyLjMgMCAxMzUuNCAwIDExMy42IDE3LjYgOTYgMzkuNCA5NmwxMTcgMCA2MS4zLTEwNS44QzIyNS41LTIzLjYgMjQwLjItMzIgMjU2LTMyczMwLjUgOC40IDM4LjQgMjIuMmw2MS4zIDEwNS44IDExNyAwYzIxLjcgMCAzOS40IDE3LjYgMzkuNCAzOS40IDAgNi45LTEuOCAxMy43LTUuMyAxOS43TDQ0OC4zIDI1NnpNMzg4LjEgMTUybDI3LjggNDguMSAyNy44LTQ4LjEtNTUuNyAwek0yOTEgOTZsLTM1LTYwLjQtMzUgNjAuNCA3MCAwek0xMjMuOSAxNTJsLTU1LjcgMCAyNy44IDQ4LjEgMjcuOC00OC4xek05Ni4xIDMxMS45bC0yNy44IDQ4LjEgNTUuNyAwLTI3LjgtNDguMXpNMjIxIDQxNmwzNSA2MC40IDM1LTYwLjQtNzAgMHoiXQogICAgfTsKICAgIGZhTm90ZXNNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdGVzLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ4MSIsICJNOTYgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MS41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMjkwLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDBDMTI0LjcgMCA5NiAyOC43IDk2IDY0bDAgMjg4ek0yODggMTEybDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQ4LTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2ek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyOHoiXQogICAgfTsKICAgIGZhQXVzdHJhbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXVzdHJhbC1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwYTkiLCAiTTI2Ni41IDI0MGwtODUgMCA0Mi41LTEwNi40IDQyLjUgMTA2LjR6bTY4LjkgMEwyNjIuOSA1OC4zQzI1Ni41IDQyLjQgMjQxLjEgMzIgMjI0IDMycy0zMi41IDEwLjQtMzguOSAyNi4zTDExMi42IDI0MCAzMiAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjEuNCAwLTE5LjIgNDgtNDIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDIzLjEgMC0yMC44IDUyLjFjLTYuNiAxNi40IDEuNCAzNSAxNy45IDQxLjZzMzUtMS40IDQxLjYtMTcuOWwzMC4zLTc1LjkgMjAwIDAgMzAuMyA3NS45YzYuNiAxNi40IDI1LjIgMjQuNCA0MS42IDE3LjlzMjQuNC0yNS4yIDE3LjktNDEuNkwzOTIuOSAzODQgNDE2IDM4NGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDIuMyAwLTE5LjItNDggNjEuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MC42IDB6bS00OS43IDQ4bDE5LjIgNDgtMTYxLjYgMCAxOS4yLTQ4IDEyMy4zIDB6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZFVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkLXVzZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjdmMyIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAzNDRhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTk4LjMgNDEzYy0xMi45IDE1LjYgMi4yIDM1IDIyLjQgMzVsMTQyLjUgMGMyMC4yIDAgMzUuMy0xOS40IDIyLjQtMzUtMTQuNy0xNy43LTM2LjktMjktNjEuNy0yOWwtNjQgMGMtMjQuOCAwLTQ3IDExLjMtNjEuNyAyOXoiXQogICAgfTsKICAgIGZhRmlsZUltYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWltYWdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgImYxYzUiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTkyLjYgNDQ4bDE5OC44IDBjMTUuOCAwIDI4LjYtMTIuOCAyOC42LTI4LjYgMC03LjMtMi44LTE0LjQtNy45LTE5LjdMMjE1LjMgMjk3LjljLTYtNi4zLTE0LjQtOS45LTIzLjItOS45bC0uMyAwYy04LjggMC0xNy4xIDMuNi0yMy4yIDkuOUw3MS45IDM5OS43QzY2LjggNDA1IDY0IDQxMi4xIDY0IDQxOS40IDY0IDQzNS4yIDc2LjggNDQ4IDkyLjYgNDQ4eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldFJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXJpZ2h0Il0sICJmMTUyIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40UzE2MCAzNjkuNSAxNjAgMzYwbDAtMjA4YzAtOS41IDUuNy0xOC4yIDE0LjQtMjJzMTguOS0yLjEgMjUuOSA0LjRsMTEyIDEwNGM0LjkgNC41IDcuNyAxMC45IDcuNyAxNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVJpZ2h0MiA9IGZhU3F1YXJlQ2FyZXRSaWdodDI7CiAgICBmYVZpYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxNF0sICJmNDkyIiwgIk0zNDIuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDMwNi43IDY0IDI4LjEgMzQyLjZDMTAuMSAzNjAuNiAwIDM4NSAwIDQxMC41TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZsNS41IDBjMjUuNSAwIDQ5LjktMTAuMSA2Ny45LTI4LjFsMjc4LjYtMjc4LjYgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwek0yMDUuMyAyNTZsMTQ2LjctMTQ2LjcgNTAuNyA1MC43LTk2IDk2LTEwMS41IDB6Il0KICAgIH07CiAgICBmYUhlbGljb3B0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsaWNvcHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY0MV0sICJmNTMzIiwgIk0xNzYgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTUyIDAgMCA0OC0yMjAuOCAwLTMyLjgtMzkuNEM2OS45IDgzLjIgNjMuMSA4MCA1NiA4MEwyNCA4MEMxNS43IDgwIDggODQuMyAzLjYgOTEuNHMtNC44IDE1LjktMS4xIDIzLjRsNDggOTZDNTQuNiAyMTguOSA2Mi45IDIyNCA3MiAyMjRsMTA3LjggMCAxMDQgMTQzLjFjMTUuMSAyMC43IDM5LjEgMzIuOSA2NC43IDMyLjlsNzUuNSAwYzc1LjEgMCAxMzYtNjAuOSAxMzYtMTM2UzQ5OS4xIDEyOCA0MjQgMTI4bC00OCAwIDAtNDggMTUyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTc2IDMyek0zNzYgMTkybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJzLTMyLjIgNzItNzIgNzJsLTQ4IDAgMC0xNDR6TTU1MiA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgNC40LTMuNiA4LTggOGwtMjcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYU1pdHRlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaXR0ZW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiNSIsICJNMzUyIDM4NEw2NCAzODQgNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjMgMCA2Mi44IDYyLjggMCAxNDAuMyAwbDMuNCAwYzY2IDAgMTIzLjUgNDQuOSAxMzkuNSAxMDguOWwzMS40IDEyNS44IDE3LjYtMjAuMUMzNDQuOCAyMDAuMiAzNjIuOSAxOTIgMzgyIDE5MmwyLjggMGMzNC45IDAgNjMuMyAyOC4zIDYzLjMgNjMuMyAwIDE1LjktNiAzMS4yLTE2LjggNDIuOUwzNTIgMzg0ek0zMiA0NjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il0KICAgIH07CiAgICBmYUdhc1B1bXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2FzLXB1bXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTgxXSwgImY1MmYiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjU2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTIgOCAwYzQ4LjYgMCA4OCAzOS40IDg4IDg4bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE1NGMtMjcuNi03LjEtNDgtMzIuMi00OC02MmwwLTU5LjUtMjUuOC0yOC4zYy04LjktOS44LTguMi0yNSAxLjYtMzMuOXMyNS04LjIgMzMuOSAxLjZsNzEuNyA3OC44YzkuNCAxMC4zIDE0LjYgMjMuNyAxNC42IDM3LjdMNTEyIDM3NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnMtNzItMzIuMi03Mi03MmwwLTMyYzAtMjIuMS0xNy45LTQwLTQwLTQwbC04IDAgMCAxNjEuNGM5LjMgMy4zIDE2IDEyLjIgMTYgMjIuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTAuNSA2LjctMTkuMyAxNi0yMi42TDMyIDY0ek05NiA4MGwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZMMTEyIDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUVudmVsb3BlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZTgiLCAiTTY0IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OGw0MTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgxLjRjLTI0LjQtMTEuMi01MS40LTE3LjQtODAtMTcuNC04Ny43IDAtMTYxLjcgNTguOC0xODQuNyAxMzkuMi03LjEtMS4zLTE0LjEtNC4yLTIwLjEtOC44bC0yMDgtMTU2QzcxLjEgMTQxLjMgNjQgMTI3LjEgNjQgMTEyek0zMDQgMzY4YzAgMjguNiA2LjIgNTUuNiAxNy40IDgwTDEyOCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTg4IDE5OC40IDE0OC44YzEyLjYgOS40IDI2LjkgMTUuNCA0MS43IDE3LjkgMCAxLjgtLjEgMy41LS4xIDUuM3ptNDggMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhUGVyc29uU2thdGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2thdGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJza2F0aW5nIl0sICJmN2M1IiwgIk0zNjggNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMjggMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1MC4xIDBjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTYzLjkgNjMuOSA2OS44IDMxYzE3LjMgNy43IDI4LjUgMjQuOSAyOC41IDQzLjlsMCA4NS42YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNzUuMi04Mi40LTM2LjZjLTQxLTE4LjItNTEtNzItMTkuMy0xMDMuN2w0MC40LTQwLjQtOTguNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODkuNCAzNjEuNGw3NS45LTc1LjljNy43IDE5LjcgMjEuNiAzNy4zIDQxIDQ5LjZsLTcxLjYgNzEuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6bTM0Ni41IDg3LjFjOC42IDIuMSAxMy44IDEwLjggMTEuNiAxOS40bC0uNCAxLjdjLTYuMiAyNC45LTI4LjYgNDIuNC01NC4zIDQyLjRMMzA0IDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4OC44IDBjMTEgMCAyMC42LTcuNSAyMy4zLTE4LjJsLjQtMS43YzIuMS04LjYgMTAuOC0xMy44IDE5LjQtMTEuNnpNMTQzLjIgNDg2LjNsLTYuMiAzLjFjLTIxLjYgMTAuOC00Ny42IDYuNi02NC42LTEwLjVMMTIuNyA0MTkuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDU5LjYgNTkuNmM3LjMgNy4zIDE4LjUgOS4xIDI3LjcgNC41bDYuMi0zLjFjNy45LTQgMTcuNS0uNyAyMS41IDcuMnMuNyAxNy41LTcuMiAyMS41eiJdCiAgICB9OwogICAgZmFTa2F0aW5nID0gZmFQZXJzb25Ta2F0aW5nOwogICAgZmFTdW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3MjhdLCAiZjE4NSIsICJNMTc4LjItMTAuMWM3LjQtMy4xIDE1LjgtMi4yIDIyLjUgMi4ybDg3LjggNTguMiA4Ny44LTU4LjJjNi43LTQuNCAxNS4xLTUuMiAyMi41LTIuMlM0MTEuNC0uNSA0MTMgNy4zbDIwLjkgMTAzLjIgMTAzLjIgMjAuOWM3LjggMS42IDE0LjQgNyAxNy40IDE0LjNzMi4yIDE1LjgtMi4yIDIyLjVsLTU4LjIgODcuOCA1OC4yIDg3LjhjNC40IDYuNyA1LjIgMTUuMSAyLjIgMjIuNXMtOS42IDEyLjgtMTcuNCAxNC4zTDQzMy44IDQwMS40IDQxMyA1MDQuN2MtMS42IDcuOC03IDE0LjQtMTQuMyAxNy40cy0xNS44IDIuMi0yMi41LTIuMmwtODcuOC01OC4yLTg3LjggNTguMmMtNi43IDQuNC0xNS4xIDUuMi0yMi41IDIuMnMtMTIuOC05LjYtMTQuMy0xNy40TDE0MyA0MDEuNCAzOS43IDM4MC41Yy03LjgtMS42LTE0LjQtNy0xNy40LTE0LjNzLTIuMi0xNS44IDIuMi0yMi41TDgyLjcgMjU2IDI0LjUgMTY4LjJjLTQuNC02LjctNS4yLTE1LjEtMi4yLTIyLjVzOS42LTEyLjggMTcuNC0xNC4zTDE0MyAxMTAuNiAxNjMuOSA3LjNjMS42LTcuOCA3LTE0LjQgMTQuMy0xNy40ek0yMDcuNiAyNTZhODAuNCA4MC40IDAgMSAxIDE2MC44IDAgODAuNCA4MC40IDAgMSAxIC0xNjAuOCAwem0yMDguOCAwYTEyOC40IDEyOC40IDAgMSAwIC0yNTYuOCAwIDEyOC40IDEyOC40IDAgMSAwIDI1Ni44IDB6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzU4LCA5OTE4LCAiYmFzZWJhbGwtYmFsbCJdLCAiZjQzMyIsICJNMjMyLjQgMS4xYy0xMjIuMiAxMS40LTIxOS41IDEwOC43LTIzMC45IDIzMC45IDE2LjItLjEgMzItMS44IDQ3LjItNSAxMy0yLjcgMjUuNyA1LjUgMjguNCAxOC41cy01LjUgMjUuNy0xOC41IDI4LjRjLTE4LjQgMy45LTM3LjYgNi01Ny4xIDYuMSAxMS40IDEyMi4yIDEwOC43IDIxOS41IDIzMC45IDIzMC45IC4xLTE5LjUgMi4yLTM4LjcgNi4xLTU3LjEgMi43LTEzIDE1LjUtMjEuMyAyOC40LTE4LjVzMjEuMyAxNS41IDE4LjUgMjguNGMtMy4yIDE1LjItNC45IDMxLTUgNDcuMiAxMjIuMi0xMS40IDIxOS41LTEwOC43IDIzMC45LTIzMC45LTE2LjIgLjEtMzIgMS44LTQ3LjIgNS0xMyAyLjctMjUuNy01LjUtMjguNC0xOC41czUuNS0yNS43IDE4LjUtMjguNGMxOC40LTMuOSAzNy42LTYgNTcuMS02LjEtMTEuNC0xMjIuMi0xMDguNy0yMTkuNS0yMzAuOS0yMzAuOS0uMSAxOS41LTIuMiAzOC43LTYuMSA1Ny4xLTIuNyAxMy0xNS41IDIxLjMtMjguNCAxOC41cy0yMS4zLTE1LjUtMTguNS0yOC40YzMuMi0xNS4yIDQuOS0zMSA1LTQ3LjJ6bTIuOCAxNTEuNGMtMjEuNCAzMi45LTQ5LjUgNjAuOS04Mi4zIDgyLjMtMTEuMSA3LjItMjYgNC4xLTMzLjItN3MtNC4xLTI2IDctMzMuMmMyNy4yLTE3LjcgNTAuNS00MSA2OC4zLTY4LjMgNy4yLTExLjEgMjIuMS0xNC4zIDMzLjItN3MxNC4zIDIyLjEgNyAzMy4yek0zOTMuMSAyODQuMmM3LjIgMTEuMSA0LjEgMjYtNyAzMy4yLTI3LjIgMTcuNy01MC41IDQxLTY4LjMgNjguMy03LjIgMTEuMS0yMi4xIDE0LjMtMzMuMiA3cy0xNC4zLTIyLjEtNy0zMy4yYzIxLjQtMzIuOSA0OS41LTYwLjkgODIuMy04Mi4zIDExLjEtNy4yIDI2LTQuMSAzMy4yIDd6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsQmFsbCA9IGZhQmFzZWJhbGw7CiAgICBmYUltYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDNlIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA4MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI3MiAyMjRjOC40IDAgMTYuMSA0LjQgMjAuNSAxMS41bDg4IDE0NGM0LjUgNy40IDQuNyAxNi43IC41IDI0LjNTMzY4LjcgNDE2IDM2MCA0MTZMODggNDE2Yy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDI2LjQgMzcuOCA2MS40LTEwMC41YzQuNC03LjEgMTIuMS0xMS41IDIwLjUtMTEuNXoiXQogICAgfTsKICAgIGZhTm90ZGVmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdGRlZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWZlIiwgIk02NCAzOTAuM0wxNTMuNSAyNTYgNjQgMTIxLjcgNjQgMzkwLjN6TTEwMi41IDQ0OEwyODEuNSA0NDggMTkyIDMxMy43IDEwMi41IDQ0OHptMTI4LTE5MkwzMjAgMzkwLjMgMzIwIDEyMS43IDIzMC41IDI1NnpNMjgxLjUgNjRMMTAyLjUgNjQgMTkyIDE5OC4zIDI4MS41IDY0ek0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6Il0KICAgIH07CiAgICBmYUJhc2tldGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFza2V0YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkzNiwgImJhc2tldGJhbGwtYmFsbCJdLCAiZjQzNCIsICJNOTIuNyA1OC44bDc4LjQgNzguNGMxOC4yLTI1IDI4LjktNTUuOSAyOC45LTg5LjIgMC0xNC4xLTEuOS0yNy43LTUuNS00MC42LTM4IDkuNC03Mi42IDI3LjItMTAxLjggNTEuNHpNNTguOCA5Mi43Yy0yNC4yIDI5LjItNDIgNjMuOC01MS40IDEwMS44IDEyLjkgMy42IDI2LjUgNS41IDQwLjYgNS41IDMzLjMgMCA2NC4xLTEwLjcgODkuMi0yOC45TDU4LjggOTIuN3pNMjU2IDBjLTQuNiAwLTkuMiAuMS0xMy43IC40IDMuNyAxNS4zIDUuNyAzMS4yIDUuNyA0Ny42IDAgNDYuNi0xNS45IDg5LjQtNDIuNiAxMjMuNEwyNTYgMjIyLjEgNDE5LjMgNTguOEMzNzQuOSAyMi4xIDMxOC4xIDAgMjU2IDB6TTQ4IDI0OGMtMTYuNCAwLTMyLjQtMi00Ny42LTUuNy0uMiA0LjUtLjQgOS4xLS40IDEzLjcgMCA2Mi4xIDIyLjEgMTE4LjkgNTguOCAxNjMuM0wyMjIuMSAyNTYgMTcxLjQgMjA1LjRDMTM3LjQgMjMyLjEgOTQuNiAyNDggNDggMjQ4em00NjMuNiAyMS43Yy4yLTQuNSAuNC05LjEgLjQtMTMuNyAwLTYyLjEtMjIuMS0xMTguOS01OC44LTE2My4zTDI4OS45IDI1NiAzNDAuNiAzMDYuNmMzNC0yNi43IDc2LjktNDIuNiAxMjMuNC00Mi42IDE2LjQgMCAzMi40IDIgNDcuNiA1Ljd6bS03LjEgNDcuOGMtMTIuOS0zLjYtMjYuNS01LjUtNDAuNi01LjUtMzMuMyAwLTY0LjEgMTAuNy04OS4yIDI4LjlsNzguNCA3OC40YzI0LjItMjkuMiA0Mi02My44IDUxLjQtMTAxLjh6TTM0MC45IDM3NC44Yy0xOC4yIDI1LTI4LjkgNTUuOS0yOC45IDg5LjIgMCAxNC4xIDEuOSAyNy43IDUuNSA0MC42IDM4LTkuNCA3Mi42LTI3LjIgMTAxLjgtNTEuNGwtNzguNC03OC40em0tMzQuMy0zNC4zTDI1NiAyODkuOSA5Mi43IDQ1My4yYzQ0LjMgMzYuNyAxMDEuMiA1OC44IDE2My4zIDU4LjggNC42IDAgOS4yLS4xIDEzLjctLjQtMy43LTE1LjMtNS43LTMxLjItNS43LTQ3LjYgMC00Ni42IDE1LjktODkuNCA0Mi42LTEyMy40eiJdCiAgICB9OwogICAgZmFCYXNrZXRiYWxsQmFsbCA9IGZhQmFza2V0YmFsbDsKICAgIGZhUGVuY2lsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCAicGVuY2lsLWFsdCJdLCAiZjMwMyIsICJNMzYuNCAzNTMuMmM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43bDE4MS4yLTE4MS4yIDMzLjktMzMuOWMxNi42IDE2LjYgNTEuMyA1MS4zIDEwNCAxMDRsMzMuOSAzMy45LTMzLjkgMzMuOS0xODEuMiAxODEuMmMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTAuNmMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJTLTEuNCA0ODkuMyAuOSA0ODFMMzYuNCAzNTMuMnptNTUuNi0zLjdjLTQuNCA0LjctNy42IDEwLjQtOS4zIDE2LjZsLTI0LjEgODYuOSA4Ni45LTI0LjFjNi40LTEuOCAxMi4yLTUuMSAxNy05LjdMOTEuOSAzNDkuNXptMzU0LTE0Ni4xYy0xNi42LTE2LjYtNTEuMy01MS4zLTEwNC0xMDRMMzA4IDY1LjVDMzM0LjUgMzkgMzQ5LjQgMjQuMSAzNTIuOSAyMC42IDM2Ni40IDcgMzg0LjgtLjYgNDA0LS42UzQ0MS42IDcgNDU1LjEgMjAuNmwzNS43IDM1LjdDNTA0LjQgNjkuOSA1MTIgODguMyA1MTIgMTA3LjRzLTcuNiAzNy42LTIxLjIgNTEuMWMtMy41IDMuNS0xOC40IDE4LjQtNDQuOSA0NC45eiJdCiAgICB9OwogICAgZmFQZW5jaWxBbHQgPSBmYVBlbmNpbDsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTEiLCAiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNMzU5IDMzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAxMDIuMSAwYzEuMiAwIDIuNC0uMSAzLjUtLjMgNTYuMS0zLjkgMTAwLjUtNTAuNiAxMDAuNS0xMDcuNyAwLTU5LjYtNDguNC0xMDgtMTA4LTEwOGwtOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5MiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC05OC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNzIgNzJ6Il0KICAgIH07CiAgICBmYURpY2VTaXggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1zaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYxXSwgImY1MjYiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQW5nbGVzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtZG93biJdLCAiZjEwMyIsICJNMjE0LjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE5MiA0MDIuNyAzMjkuNCAyNjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwem0xNjAtMzUybC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgMjEwLjcgMzI5LjQgNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zeiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZURvd24gPSBmYUFuZ2xlc0Rvd247CiAgICBmYVN5cmluZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3lyaW5nZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODEzN10sICJmNDhlIiwgIk00OTcuNS0xN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS00Ni4xIDQ2LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNyA3LTc4LjEgNzguMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00MS00MS00Ni4xIDQ2LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtMzcuNyAzNy43Yy0xMC41IDEwLjUtMTYuNCAyNC43LTE2LjQgMzkuNmwwIDg4LjgtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1Ny01NyA4OC44IDBjMTQuOSAwIDI5LjEtNS45IDM5LjYtMTYuNGwyMjkuNy0yMjkuNyA3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyA0Ni4xLTQ2LjEgMTUgMTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXQogICAgfTsKICAgIGZhV2hlYXRBd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIndoZWF0LWFsdCJdLCAiZTJjZCIsICJNNzkuNyAyMzQuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwTDEzNC4xIDQ0NC4zIDQ5LjQgNTI5Yy05LjQgOS40LTI0LjUgOS40LTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xem0xMDQtMTA0YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMiA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsNDYuMSA0Ni4xYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk1LjIgMTVjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjJMNTI5LjIgNDkgNDE0LjcgMTYzLjRjNy43IDEgMTUuMiAzIDIyLjUgNS45TDQ5NS41IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMGwtOTQuOS05NC45Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xYzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsMzkgMzkgNTIuNy01Mi43YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4xbC0xLjcgMS44LTU4LjMgNTguM2MyLjggNy4xIDQuNyAxNC41IDUuNyAyMi4xTDQ5NS4yIDE1eiJdCiAgICB9OwogICAgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247CiAgICBmYVBsYW5lVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIyZCIsICJNMjAwIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyAxNzMuNiAxNTkuMmM2LjYgNi4xIDEwLjQgMTQuNiAxMC40IDIzLjZsMCA0My43YzAgMTAuOS0xMC43IDE4LjYtMjEuMSAxNS4ybC0xNjIuOS01NC4zIDAgOTkuNyA2NiA1Mi44YzMuOCAzIDYgNy42IDYgMTIuNWwwIDE5LjhjMCAxMC40LTkuOCAxOC0xOS45IDE1LjVMMjU2IDUxMiAxNDcuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0MyNi43IDM5Ni40IDE2IDM4OC43IDE2IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIwMCAxNTEuMyAyMDAgMjR6Il0KICAgIH07CiAgICBmYUFsaWduQ2VudGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLWNlbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM3IiwgIk0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhSG9ja2V5UHVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob2NrZXktcHVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDUzIiwgIk0yNTYgMjU2QzExNC42IDI1NiAwIDIxMyAwIDE2MHMxMTQuNi05NiAyNTYtOTYgMjU2IDQzIDI1NiA5Ni0xMTQuNiA5Ni0yNTYgOTZ6TTAgMzUyTDAgMjQyLjdjMTYuOSAxMi4zIDM3IDIyLjIgNTguMSAzMC4xIDUzIDE5LjkgMTIzIDMxLjIgMTk3LjkgMzEuMnMxNDQuOS0xMS4zIDE5Ny45LTMxLjJjMjEuMi03LjkgNDEuMi0xNy44IDU4LjEtMzAuMUw1MTIgMzUyYzAgNTMtMTE0LjYgOTYtMjU2IDk2UzAgNDA1IDAgMzUyeiJdCiAgICB9OwogICAgZmFDaXJjbGVBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLWxlZnQiXSwgImYwYTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMzUgMjM5bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzkgMzkgMTUwLjEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTUwLjEgMCAzOSAzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlQXJyb3dMZWZ0OwogICAgZmFQbHVnQ2lyY2xlQm9sdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWIiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNzcuNC03N2MtNS44LTQuMi0xMy44LTQtMTkuNCAuNWwtODAgNjRjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhTNDMzLjIgNDE2IDQ0MCA0MTZsMzIuOSAwLTE1LjkgNDIuNGMtMi41IDYuNy0uMiAxNC4zIDUuNiAxOC42czEzLjggNCAxOS40LS41bDgwLTY0YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhTNTU4LjggMzg0IDU1MiAzODRsLTMyLjkgMCAxNS45LTQyLjRjMi41LTYuNyAuMi0xNC4zLTUuNi0xOC42eiJdCiAgICB9OwogICAgZmFSZXN0cm9vbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXN0cm9vbSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2JkIiwgIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNTQuOGMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjQtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQ0LjQgMTU2LjkgODMuNiAxMjggMTI4IDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTEyLjQgMy45LTI1LjQtLjItMzMuNS05LjRMMjAwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ2NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDY0IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ0MCA0ODBsMC05Ni0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDktMjYuOWMtMy4yIDAtNi40LS41LTkuNS0xLjUtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjEtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFBbmNob3JMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWQiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAyOC4zIDAgNTUuNC01LjcgODAtMTUuOWwwLS4yIDAtNzIuMmMtMTQuNCA5LjYtMzAuNiAxNi43LTQ4IDIwLjdsMC0yNTcuOWMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTI3MiAzMDQuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2LjUgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFUaW1lbGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aW1lbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjljIiwgIk0xNjAgMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDAgMCA1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTU0LjcgMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC01NC43YzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDU0LjctMjU2IDAgMC01NC43eiJdCiAgICB9OwogICAgZmFMaWdodGJ1bGIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZ2h0YnVsYiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2MV0sICJmMGViIiwgIk0yOTIuOSAzODRjNy4zLTIyLjMgMjEuOS00Mi41IDM4LjQtNTkuOSAzMi43LTM0LjQgNTIuNy04MC45IDUyLjctMTMyLjEgMC0xMDYtODYtMTkyLTE5Mi0xOTJTMCA4NiAwIDE5MmMwIDUxLjIgMjAgOTcuNyA1Mi43IDEzMi4xIDE2LjUgMTcuNCAzMS4yIDM3LjYgMzguNCA1OS45bDIwMS43IDB6TTI4OCA0MzJsLTE5MiAwIDAgMTZjMCA0NC4yIDM1LjggODAgODAgODBsMzIgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTE2ek0xODQgMTEyYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLXJpZ2h0Il0sICJmMGE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNDEtMTU5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5LTE1MC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTUwLjEgMC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MHoiXQogICAgfTsKICAgIGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDsKICAgIGZhTWFyc0FuZFZlbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtYW5kLXZlbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg5M10sICJmMjI0IiwgIk0zNjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM0LjctNjMgNjNjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFsMCAzNC45IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM0LjljLTgxLjktMTUtMTQ0LTg2LjgtMTQ0LTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2IDM3IDAgNzEuNCAxMS40IDk5LjggMzFsNjMtNjMtMzQuNyAwek0zNTIgMjA4YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6Il0KICAgIH07CiAgICBmYU5ldHdvcmtXaXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXR3b3JrLXdpcmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmYiLCAiTTI0OCA4OGw4MCAwIDAgNDgtODAgMCAwLTQ4em0tOC01NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwIDAgMzItMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMCAwIDMyLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwIDAtMzIgMTkyIDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMzIgMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC05NiAwek00NDggMzc2bDggMCAwIDQ4LTgwIDAgMC00OCA3MiAwem0tMjU2IDBsOCAwIDAgNDgtODAgMCAwLTQ4IDcyIDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ4IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBjLTEyLjUtMTQuNy0yMy4yLTMwLjgtMzEuOC00OGwtODkuNSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMCAwLTI2LjdjMC0xOC4xIDYuMS0zNS4yIDE2LjYtNDguOC0uNC0xLjQtLjYtMi45LS42LTQuNWwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDEgODYuNy0yOC45YzMuMS0xIDYuMi0xLjggOS4zLTIuNUw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQ0NS4zIDQ4OC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMjEiLCAiTTM2MC44IDEuMmMtMTctNC45LTM0LjcgNS0zOS42IDIybC0xMjggNDQ4Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMTI4LTQ0OGM0LjktMTctNS0zNC43LTIyLTM5LjZ6bTY0LjYgMTM2LjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDczLjQgNzMuNC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHptLTI3NC43IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAxNTAuNiAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhRmVhdGhlclBvaW50ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlci1wb2ludGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZlYXRoZXItYWx0Il0sICJmNTZiIiwgIk00NzUuMyAuMWM5LjktLjggMTkuNiAzIDI2LjYgMTBzMTAuOCAxNi43IDEwIDI2LjZjLTQgNDkuMy0xNy40IDEyNi4yLTQ2LjMgMTk5LjctMS44IDQuNS01LjUgNy45LTEwLjIgOS4zTDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDM4LjYgMGMxMiAwIDE5LjcgMTIuOCAxMy41IDIzLjEtNCA2LjctOC4zIDEzLjItMTIuNyAxOS42LTIgMi45LTUgNS04LjQgNi4xTDMxMC41IDM2NmMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDE2IDBjMTQuNiAwIDIxIDE3LjQgOC44IDI1LjQtNjggNDUtMTM3LjcgNDMuMy0xODIuNCAzMS4zLTEyLjctMy40LTI0LTkuOS0zNC40LTE3LjlMNDggNDk2Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJsODAtODAgLjUgLjVjLjctMS4zIDEuNi0yLjUgMi43LTMuNkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw4OS43IDMyNi4yYy04LjkgOC45LTI0IDQuNC0yNS04LjItNC4zLTUzLjIgOS4zLTEyMy4xIDcyLjYtMTg2LjQgOTEuMS05MS4xIDI1NC4yLTEyNC43IDMzNy45LTEzMS41eiJdCiAgICB9OwogICAgZmFGZWF0aGVyQWx0ID0gZmFGZWF0aGVyUG9pbnRlZDsKICAgIGZhRmlsZUNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWYiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xMDBjLTExLjYgMC0yMS4zIDguMi0yMy41IDE5LjItMS44IDguNy0xMC4yIDE0LjMtMTguOSAxMi41cy0xNC4zLTEwLjItMTIuNS0xOC45YzUuMi0yNS42IDI3LjgtNDQuOCA1NC45LTQ0LjggMzAuOSAwIDU2IDI1LjEgNTYgNTYgMCAxOS44LTExLjcgMzcuOC0yOS44IDQ1LjlsLTEwLjQgNC42Yy0xLjIgNy43LTcuOCAxMy41LTE1LjggMTMuNS04LjggMC0xNi03LjItMTYtMTYgMC0xMS4yIDYuNi0yMS4zIDE2LjgtMjUuOWwxMi40LTUuNWM2LjYtMi45IDEwLjgtOS40IDEwLjgtMTYuNiAwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25hdHVyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWI3IiwgIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA3LjhjMCAyNy43LTIuNCA1NS4zLTcuMSA4Mi41bC04NC40IDI1LjNjLTQwLjYgMTIuMi02OC40IDQ5LjYtNjguNCA5MmwwIDMyLjQtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3Mi41IDBjNC4yIDM2IDM0LjggNjQgNzIgNjQgMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44UzQwNS43IDMyMCA0MTYgMzIwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04My42IDAgMTgtNTMuOWMzLjgtMTEuMyAuOS0yMy44LTcuNC0zMi40cy0yMC43LTExLjgtMzIuMi04LjRMMzE2LjQgMTk4LjFjMi40LTIwLjcgMy42LTQxLjQgMy42LTYyLjNsMC03LjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJ6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zLTQuNyAwLTguNS0zLjgtOC41LTguNWwwLTcxLjljMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNNjE2IDQxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjkyLjkgMGMtNi41IDE2LjMtMTMuNyAzMi4zLTIxLjYgNDhMNjE2IDQxNnoiXQogICAgfTsKICAgIGZhRWFydGhBbWVyaWNhcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hbWVyaWNhcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OCwgImVhcnRoIiwgImVhcnRoLWFtZXJpY2EiLCAiZ2xvYmUtYW1lcmljYXMiXSwgImY1N2QiLCAiTTU1LjcgMTk5LjdsMzAuOSAzMC45YzYgNiAxNC4xIDkuNCAyMi42IDkuNGwyMS41IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjkuMyAyOS4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDM3LjVjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsMTMuMyAxMy4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDE4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIuN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0NS4zLTQ1LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtMzQuN2MwLTE3LjctMTQuMy0zMi0zMi0zMmwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmwzNC43IDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMTkuNy0xOS43QzI0MiAxMzAgMjQwIDEyNS4xIDI0MCAxMjBzMi0xMCA1LjctMTMuN2wxNy4zLTE3LjNjNS44LTUuOCA5LjEtMTMuNyA5LjEtMjEuOSAwLTcuMi0yLjQtMTMuNy02LjQtMTguOS0zLjItLjEtNi40LS4yLTkuNi0uMi05NS40IDAtMTc1LjcgNjQuMi0yMDAuMyAxNTEuN3pNNDY0IDI1NmMwLTM0LjYtOC40LTY3LjItMjMuNC05NS44LTYuNCAuOS0xMi43IDMuOS0xNy45IDkuMWwtMTMuNCAxMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjEgMGMyLjUgMCA1LS4zIDcuMy0uOCAuNC01IC41LTEwLjEgLjUtMTUuMnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhRWFydGggPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUVhcnRoQW1lcmljYSA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhR2xvYmVBbWVyaWNhcyA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhQ2Fycm90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnJvdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM2NV0sICJmNzg3IiwgIk00NTMuMS0zNi43TDQ0MC45LTI0LjZjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMSAxNS42IDE1LjYgMzEuMiAzMS4yIDQ2LjkgNDYuOSAzMS4yIDMxLjIgODEuOSAzMS4yIDExMy4xIDBsMTIuMS0xMi4xYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42TDYwMC45IDg4LjZjLTMxLjItMzEuMi04MS45LTMxLjItMTEzLjEgMCAzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFMNDc1LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTMzMS42IDk2Yy00NS4yIDAtODcuMSAyMC40LTExNSA1NC4zTDI3My4zIDIwN2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE5MS42IDE5My4yIDY3LjIgNDY2LjhjLTUuNSAxMi4xLTIuOSAyNi40IDYuNSAzNS45czIzLjcgMTIgMzUuOSA2LjVsMTQxLjYtNjQuNC00My44LTQzLjhjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni41IDU2LjUgOTUuMy00My4zYzUzLjEtMjQuMSA4Ny4yLTc3LjEgODcuMi0xMzUuNSAwLTgyLjItNjYuNi0xNDguOC0xNDguOC0xNDguOHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWZ1bGwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtNCIsICJ0aGVybW9tZXRlci00IiwgInRoZXJtb21ldGVyLWZ1bGwiXSwgImYyYzciLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM0wxMzYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDIxMi43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmU0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7CiAgICBmYVRoZXJtb21ldGVyNCA9IGZhVGVtcGVyYXR1cmVGdWxsOwogICAgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDsKICAgIGZhVGFibGVDZWxsc1Jvd0xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3YSIsICJNMjU2IDI4OGwwLTY0IDE1My4zIDBjMTcuMS00Mi4yIDU2LTczLjIgMTAyLjctNzlsMC00OWMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0MS4zIDBjLS45LTUuMi0xLjMtMTAuNi0xLjMtMTYuMWwwLTQ3LjktMTEyIDAgMC02NCAxMTMuMyAwYzMuNy0yMiAxNC44LTQxLjQgMzAuNy01NS42bDAtOC40LTE0NCAwem0wLTE5MmwxOTIgMCAwIDY0LTE5MiAwIDAtNjR6TTU2MCAyNzIuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2IDM2OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhQm9sdExpZ2h0bmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib2x0LWxpZ2h0bmluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMGI3IiwgIk0wIDI1NkwyOC41IDI4YzItMTYgMTUuNi0yOCAzMS44LTI4TDIyOC45IDBjMTUgMCAyNy4xIDEyLjEgMjcuMSAyNy4xIDAgMy4yLS42IDYuNS0xLjcgOS41TDIwOCAxNjAgMzQ3LjMgMTYwYzIwLjIgMCAzNi43IDE2LjQgMzYuNyAzNi43IDAgNy40LTIuMiAxNC42LTYuNCAyMC43bC0xOTIuMiAyODFjLTUuOSA4LjYtMTUuNiAxMy43LTI1LjkgMTMuN2wtMi45IDBjLTE1LjcgMC0yOC41LTEyLjgtMjguNS0yOC41IDAtMi4zIC4zLTQuNiAuOS02LjlMMTc2IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDbG91ZFNob3dlcnNXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zaG93ZXJzLXdhdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTQiLCAiTTI3OS4yIDU1LjdDMjYzLjkgMjIuOCAyMzAuNiAwIDE5MiAwIDEzOSAwIDk2IDQzIDk2IDk2IDYwLjcgOTYgMzIgMTI0LjcgMzIgMTYwczI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRsLTEuNiAwYy03LjQtMzYuNS0zOS43LTY0LTc4LjQtNjQtMjIuMiAwLTQyLjMgOS4xLTU2LjggMjMuN3pNNDEwLjYgNDc2LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwek0xMDAuMSAzMDMuNmM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NEMyOSAzNjUgMzUuOCAzNzguNiA0OC40IDM4Mi44czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMTIgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0eiJdCiAgICB9OwogICAgZmFBcnJvd1VwTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctdXAiXSwgImYxNzYiLCAiTTE4Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCA3Ny4zIDEyOCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQzNC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dVcCA9IGZhQXJyb3dVcExvbmc7CiAgICBmYUFkZHJlc3NDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0MCwgImNvbnRhY3QtY2FyZCIsICJ2Y2FyZCJdLCAiZjJiYiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptODAgMjU2bDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNDAtNDhsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDk2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ29udGFjdENhcmQyID0gZmFBZGRyZXNzQ2FyZDI7CiAgICBmYVZjYXJkMiA9IGZhQWRkcmVzc0NhcmQyOwogICAgZmFBbmdsZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbODI1MF0sICJmMTA1IiwgIk0yNDcuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTc5LjIgMjU2IDQxLjkgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhRmFjZU1laDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsICJtZWgiXSwgImYxMWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE3NiAzMjBsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNZWgyID0gZmFGYWNlTWVoMjsKICAgIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1mcm9tLWdyb3VuZC13YXRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI1IiwgIk0zMDMgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OCA4OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00NyAwIDI3OC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjc4LjEtNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzAzIDd6TTI0MCAxOTJsMCAxNjMuMWMtMTAuNi0yLjItMjEuMy0zLjItMzItMy4xLTMyLjUgLjItNjQuOSAxMC43LTkyLjMgMzEuNC04LjggNi42LTE1LjkgMTAuOS0yMS43IDEzLjVsLS44IC40Yy0zLjcgMS43LTYuNCAyLjktOS44IC4zLTYtNC41LTEyLjYtOC0xOS4zLTEwLjRMNjQgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEyOCAwem0zMzYgNDhsMCAxNTUuMmMtMS4xIC44LTIuMiAxLjUtMy4zIDIuNC00LjEgMy4xLTguMyAuOC0xMi42LTEuNS0uNi0uMy0xLjItLjYtMS44LTEtNS4yLTIuNy0xMS4xLTYuNi0xOC0xMS43LTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTE1LjUgLjEtMzEgMi41LTQ2IDcuM2wwLTE2Ny4zIDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek00MDMuNCA0NzYuMUMzNzkuMSA0OTQuMyAzNTEuMSA1MTIgMzIwIDUxMnMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il0KICAgIH07CiAgICBmYU1hcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sICJmMjc5IiwgIk01MTIgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMMzQ5LjUgNzcuNSAxNzAuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNi44IDg4LjggMCA5OS45IDAgMTEyTDAgNDY0YzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzkuNCA1OS44YzguMSAyLjcgMTYuOCAyLjEgMjQuNC0xLjdsMTI4LTY0YzEwLjgtNS40IDE3LjctMTYuNSAxNy43LTI4LjZsMC0zNTJ6TTE5MiAzNzYuOWwwLTI4NC41IDEyOCA0Mi43IDAgMjg0LjUtMTI4LTQyLjd6Il0KICAgIH07CiAgICBmYVVzZXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjM0IiwgIk0xMzYgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6TTQ4IDQ4Mi4zQzQ4IDM4My44IDEyNy44IDMwNCAyMjYuMyAzMDRsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc3LjcgNTEyQzYxLjMgNTEyIDQ4IDQ5OC43IDQ4IDQ4Mi4zek01NDQgOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhVmVudXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVudXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzkyXSwgImYyMjEiLCAiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtNjRjMC0xIDAtMS45LS4xLTIuOXoiXQogICAgfTsKICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXN1Y2Nlc3NvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDdhIiwgIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgNDgwTDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xNjAgMTYwbDAtNjQtOTYgMCAwIDY0IDk2IDB6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlQ291Z2hTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtY291Z2gtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2MiIsICJNNTM1LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUzNy4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDI1LTI1IDAtNDQ3LjJjMC0xNSAxMC41LTI4LjMgMjUuNC0yOS44IDcuNC0uNyAxNC45LTEuMSAyMi42LTEuMSAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDIuMiAyLjYgMjI3LjUtMjI3LjV6TTEzMy44IDUxMkwyODggMzU3LjggMjg4IDQxNmMwIDUzLTQzIDk2LTk2IDk2bC01OC4yIDB6TTE3NiAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMzYgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tODggNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4LTI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYURpYWdyYW1Qcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYWdyYW0tcHJvamVjdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwcm9qZWN0LWRpYWdyYW0iXSwgImY1NDIiLCAiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDEyOCAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTEyOCAwIDAgMTZjMCA3LjMtMS43IDE0LjMtNC42IDIwLjVsNjguNiA5MS41IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTcuMyAxLjctMTQuMyA0LjYtMjAuNUwxMjggMjI0IDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHoiXQogICAgfTsKICAgIGZhUHJvamVjdERpYWdyYW0gPSBmYURpYWdyYW1Qcm9qZWN0OwogICAgZmFUZXJtaW5hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTIwIiwgIk05LjQgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTQ2LjcgMjU2IDkuNCAxMTguNnpNMjI0IDM4NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUhvdXNlRmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1maXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGMiLCAiTTQ0OCAxOTJjMTQuMSAuNCAyMy44IDExLjQgMzIuNyAyMS43IDIgMi4zIDQgNC42IDYgNi43bDE5IDE5LjkgMTIuMi0xMy44YzUuNC02LjEgMTMuMy04LjkgMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjIgMjYuMiA4OC4yIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4xIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjV6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTQ3LjUgMTM3Yy0xOS4yLTQuMy00MCAuNS01NS41IDE0LjQtMzYuNCAzMi42LTY3LjcgNjkuOC05MC4zIDEwNi40LTEwLjMgMTYuNi0xOS43IDM0LjktMjYuOCA1My43TDI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgNjQuNiAwYzcuMyAxNy4yIDE2LjggMzMuNCAyOC4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDg5LjMgMzQzLjdjLTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC43IDUxLjktNTQuNyA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0zNi41LTM3LTczLTU0LjctODguNHoiXQogICAgfTsKICAgIGZhTWFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmEiLCAiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGw4LjQgMGMyNC4yIDAgNDYuNC0xMy43IDU3LjItMzUuNGwyMy4yLTQ2LjNjNC40LTguOCAxMy4zLTE0LjMgMjMuMi0xNC4zczE4LjggNS41IDIzLjIgMTQuM2wyMy4yIDQ2LjNjMTAuOCAyMS43IDMzIDM1LjQgNTcuMiAzNS40bDguNCAwYzk2IDAgMTc2LTY0IDE3Ni0xNzZTNTEyIDY0IDI4OCA2NHpNOTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzIwLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFIdXJyaWNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaHVycmljYW5lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3NTEiLCAiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNiAxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlsMCA2My4zYzAgOC40IDYuNSAxNS4zIDE0LjcgMTYuNSAxMDAuMyAxNC45IDE3Ny4zIDEwMS4zIDE3Ny4zIDIwNS43IDAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNC05LjIgMS41LTE3LjEtNS45LTE3LjEtMTUuMmwwLTYzLjNDMTkyIDQyMS45IDE4NS41IDQxNSAxNzcuMyA0MTMuNyA3NyAzOTguOSAwIDMxMi40IDAgMjA4em0yODggNDhhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem0tOTYtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFFYXJ0aEFmcmljYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hZnJpY2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTcsICJnbG9iZS1hZnJpY2EiXSwgImY1N2MiLCAiTTQ0Ny42IDE3NWMtMzEuNi03NC42LTEwNS41LTEyNy0xOTEuNi0xMjctMjIuMSAwLTQzLjQgMy41LTYzLjQgOS44LS40IDItLjYgNC4xLS42IDYuMmwwIDczLjRjMCAxMi41IDEwLjEgMjIuNiAyMi42IDIyLjYgNiAwIDExLjgtMi40IDE2LTYuNmwxNi0xNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsNS41IDBjMjguNSAwIDQyLjggMzQuNSAyMi42IDU0LjYtNiA2LTE0LjEgOS40LTIyLjYgOS40bC02MS41IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC0yMS4zIDIxLjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDIuNyAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDI5LjMtMjkuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC0xOC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTZsMC0zNC43YzAtOC41LTMuNC0xNi42LTkuNC0yMi42bC0xNi0xNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQ1IDBjMTIuNCAwIDIyLjctNy4xIDI4LTE3ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFHbG9iZUFmcmljYSA9IGZhRWFydGhBZnJpY2E7CiAgICBmYVRodW1idGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDQsIDEyODM5MiwgInRodW1iLXRhY2siXSwgImYwOGQiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5LjUgMCAxMC4zIDEzNC4xYzM3LjEgMjEuMiA2NS44IDU2LjQgNzguMiA5OS43bDMuOCAxMy40YzIuOCA5LjcgLjggMjAtNS4yIDI4LjFTMzYyIDM1MiAzNTIgMzUyTDMyIDM1MmMtMTAgMC0xOS41LTQuNy0yNS41LTEyLjdzLTgtMTguNC01LjItMjguMUw1IDI5Ny44YzEyLjQtNDMuMyA0MS03OC41IDc4LjItOTkuN0w5My41IDY0IDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMTYwIDQwMGw2NCAwIDAgMTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2sgPSBmYVRodW1idGFjazsKICAgIGZhSGFuZFBvaW50RG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwYTciLCAiTTMyIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjA4LTY0IDAgMCAyMDh6TTIyNCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS02NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE2MC05NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NHptLTk2LTg4bDAgLjZjOS40LTUuNCAyMC4zLTguNiAzMi04LjYgMTMuMiAwIDI1LjQgNCAzNS42IDEwLjggOC43LTI0LjkgMzIuNS00Mi44IDYwLjQtNDIuOCAxMS43IDAgMjIuNiAzLjEgMzIgOC42bDAtOC42QzM4NCA3MS42IDMxMi40IDAgMjI0IDBMMTYyLjMgMEMxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5bDAgMjdjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGwtNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcyeiJdCiAgICB9OwogICAgZmFGYWNlTWVoQmxhbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoLWJsYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTY2LCAibWVoLWJsYW5rIl0sICJmNWE0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yMDgtNDhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTI4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhTWVoQmxhbmsyID0gZmFGYWNlTWVoQmxhbmsyOwogICAgZmFUZW1wZXJhdHVyZUVtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTAiLCAidGhlcm1vbWV0ZXItMCIsICJ0aGVybW9tZXRlci1lbXB0eSJdLCAiZjJjYiIsICJNNjQgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NCA5NnptOTYgMzM2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmUwID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFUaGVybW9tZXRlcjAgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYVRoZXJtb21ldGVyRW1wdHkgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYUJvcmRlck5vbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLW5vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg1MCIsICJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpNMTYwIDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMjg4IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0yODggMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMC0zODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTQxNiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQxNiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0eiJdCiAgICB9OwogICAgZmFIaWdobGlnaHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWdobGlnaHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTkxIiwgIk0zMTUgMzE1TDQ3My40IDk5LjkgNDQ0LjEgNzAuNiAyMjkgMjI5IDMxNSAzMTV6bS0xODcgNWwwIDAgMC03MS43YzAtMTUuMyA3LjItMjkuNiAxOS41LTM4LjZMNDIwLjYgOC40QzQyOCAyLjkgNDM3IDAgNDQ2LjIgMCA0NTcuNiAwIDQ2OC41IDQuNSA0NzYuNiAxMi42bDU0LjggNTQuOGM4LjEgOC4xIDEyLjYgMTkgMTIuNiAzMC41IDAgOS4yLTIuOSAxOC4yLTguNCAyNS42TDMzNC40IDM5Ni41Yy05IDEyLjMtMjMuNCAxOS41LTM4LjYgMTkuNWwtNzEuNyAwLTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTUwLjctNTAuN2MtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMMTI4IDMyMHpNNyA0NjYuM2w1MS43LTUxLjcgNzAuNiA3MC42LTE5LjcgMTkuN2MtNC41IDQuNS0xMC42IDctMTcgN0wyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNC43YzAtNi40IDIuNS0xMi41IDctMTd6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC13YXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1M2EiLCAiTTAgNDE5LjZMMCAxMDkuNWMwLTIzLjIgMjQuMS0zOC42IDQ2LjMtMzIgODcuNyAyNi4yIDE0OS43IDUuNSAyMTIuMS0xNS4zIDY0LjUtMjEuNSAxMjkuNC00My4xIDIyMy4zLTEzLjEgMTguNSA1LjkgMzAuMyAyMy44IDMwLjMgNDMuM2wwIDMxMC4xYzAgMjMuMi0yNC4xIDM4LjYtNDYuMiAzMi04Ny43LTI2LjItMTQ5LjgtNS41LTIxMi4xIDE1LjMtNjQuNSAyMS41LTEyOS40IDQzLjEtMjIzLjMgMTMuMS0xOC41LTUuOS0zMC4zLTIzLjgtMzAuMy00My4zek0zMzYgMjU2YzAtNTMtMzUuOC05Ni04MC05NnMtODAgNDMtODAgOTYgMzUuOCA5NiA4MCA5NiA4MC00MyA4MC05NnpNMTIwIDQxMy42YzQuNCAwIDcuOS0zLjggNy4yLTguMS00LjYtMjcuOC0yNy00OS41LTU1LjItNTMtNC40LS41LTggMy4xLTggNy41bDAgMzkuOWMwIDMuNiAyLjQgNi44IDYgNy43IDE3LjkgNC4yIDM0LjMgNi4xIDUwIDYuMXptMzE4LjUtNTEuMWM1IC44IDkuNS0zIDkuNS04bDAtNDIuNmMwLTQuNC0zLjYtOC4xLTgtNy41LTI1LjIgMy4xLTQ1LjkgMjAuOS01My4yIDQ0LjYtMS40IDQuNyAyLjMgOS4xIDcuMiA5LjIgMTQuMiAuNCAyOSAxLjcgNDQuNCA0LjN6TTQ0OCAxNTJsMC0zOS45YzAtMy42LTIuNS02LjgtNi03LjctMTcuOS00LjItMzQuMy02LjEtNTAtNi4xLTQuNCAwLTcuOSAzLjgtNy4yIDguMSA0LjYgMjcuOCAyNyA0OS41IDU1LjIgNTMgNC40IC41IDgtMy4xIDgtNy41ek0xMjUuMiAxNjIuOWMxLjQtNC43LTIuMy05LjEtNy4yLTkuMi0xNC4yLS40LTI5LTEuNy00NC40LTQuMy01LS44LTkuNSAzLTkuNSA4TDY0IDIwMGMwIDQuNCAzLjYgOC4xIDggNy41IDI1LjItMy4xIDQ1LjktMjAuOSA1My4yLTQ0LjZ6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBhcGVyLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzIiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk0LjUtOTQuNWM0MC4yLTIzIDY5LjUtOTYuOSA2OS41LTE4NC42IDAtMTA2LTQzLTE5Mi05Ni0xOTJzLTk2IDg2LTk2IDE5MmMwIDI0LjEgMi4yIDQ3LjIgNi4zIDY4LjRMMzA0IDIzOC4yIDMwNCAyMjRjMC01OC45IDExLjgtMTE0LjUgMzMuMi0xNTcuMiA1LjktMTEuNyAxMy4xLTIzLjcgMjEuOS0zNC44TDEyOCAzMmMtOC4zIDAtMTYuNCAyLjEtMjQuMSA2LjFsLTYzLTYzek0zMiAyMjRsMCAyNjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTYwIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0xMTQuMi0yNTYtMjU2QzM3LjkgMTQ4LjIgMzIgMTg0LjcgMzIgMjI0em00MTYgNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NC0xNC4zIDY0LTMyIDY0eiJdCiAgICB9OwogICAgZmFGaWxlU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2hpZWxkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjAxLjIgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC0zNC40IDIyLTY1IDU0LjctNzUuOWwxMTItMzcuM2MzLjEtMSA2LjItMS44IDkuMy0yLjVsMC0zOS4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2em04Ny44IDMxMi41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhVGV4dEhlaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXh0LWhlaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDM0IiwgIk00MCAzMkMxNy45IDMyIDAgNDkuOSAwIDcybDAgNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDY0IDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyMCA2NCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDMyek00MzguNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjQgMC0yMjkuNSA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjI5LjUtOS40LTkuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5Ub25ndWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzksICJncmluLXRvbmd1ZSJdLCAiZjU4OSIsICJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyNDBsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlMiA9IGZhRmFjZUdyaW5Ub25ndWUyOwogICAgZmFGaWxlU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2lnbmF0dXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NzMiLCAiTTY0LjEgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjc3LjYgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgOTcuNS0xMzIgMTMyLTQyLjEgMC0xNi4xLTUzLjZjLTQuNy0xNS43LTE5LjEtMjYuNC0zNS41LTI2LjQtMTEuMyAwLTIxLjkgNS4xLTI4LjkgMTMuOUwxMzMuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDMxLjUgMGMtLjkgMy4xLTEuNyA2LjMtMi4zIDkuNWwtMTAuOSA1NC41LTE0Ni4yIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5My41IDAtMTE3LjUtMTE3LjV6bTYwLjIgNDA4LjRjMi41LTEyLjQgOC42LTIzLjggMTcuNS0zMi43bDExOC45LTExOC45IDgwIDgwLTExOC45IDExOC45Yy04LjkgOC45LTIwLjMgMTUtMzIuNyAxNy41bC01OS42IDExLjljLS45IC4yLTEuOSAuMy0yLjkgLjMtOCAwLTE0LjYtNi41LTE0LjYtMTQuNiAwLTEgLjEtMS45IC4zLTIuOWwxMS45LTU5LjZ6bTI2Ny44LTEyM2wtMjguOCAyOC44LTgwLTgwIDI4LjgtMjguOGMyMi4xLTIyLjEgNTcuOS0yMi4xIDgwIDBzMjIuMSA1Ny45IDAgODB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctd2hlYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYiIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNDkuMyAwYy02LTE0LjgtOS4zLTMxLTkuMy00OCAwLTE3LjcgNy4yLTMzLjcgMTguOC00NS4zLTExLjktMTkuNC0xOC44LTQyLjMtMTguOC02Ni43IDAtMTcuNyA3LjItMzMuNyAxOC44LTQ1LjMtMTEuOS0xOS40LTE4LjgtNDIuMy0xOC44LTY2LjcgMC0yNS4yIDE0LjUtNDYuOSAzNS42LTU3LjQtMi40LTcuMS0zLjYtMTQuNy0zLjYtMjIuNmwwLTMyQzM2OCA5Ni43IDM4OCA3MC4xIDQxNS45IDYwLjEgNDEzLjkgMjYuNiAzODYgMCAzNTIgMEw5NiAwek0yMDggMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTM1MiAwbC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZ6bTE2IDEyOGMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwem0wIDExMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwek00OTYgNTI4YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZ6bS0xNi05NmM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwem0xNi0xMjhjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNTEyIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0em05NiA2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNDQwIDEwNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVlIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xMjggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYUZ1dGJvbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnV0Ym9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTkxNywgImZ1dGJvbC1iYWxsIiwgInNvY2Nlci1iYWxsIl0sICJmMWUzIiwgIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE0LjEtMzI1LjdjLTguNC02LjEtMTkuOC02LjEtMjguMiAwTDE5NCAyMjFjLTguNCA2LjEtMTEuOSAxNi45LTguNyAyNi44bDE4LjMgNTYuM2MzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZsNTkuMiAwYzEwLjQgMCAxOS42LTYuNyAyMi44LTE2LjZsMTguMy01Ni4zYzMuMi05LjktLjMtMjAuNy04LjctMjYuOGwtNDcuOS0zNC44eiJdCiAgICB9OwogICAgZmFGdXRib2xCYWxsMiA9IGZhRnV0Ym9sMjsKICAgIGZhU29jY2VyQmFsbDIgPSBmYUZ1dGJvbDI7CiAgICBmYUNpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGx1cy1jaXJjbGUiXSwgImYwNTUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzIgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c0NpcmNsZSA9IGZhQ2lyY2xlUGx1czsKICAgIGZhQnJhemlsaWFuUmVhbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhemlsaWFuLXJlYWwtc2lnbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDZjIiwgIk00MDAgMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC00OC45IDBjLTI2IDAtNDcuMSAyMS4xLTQ3LjEgNDcuMSAwIDIyLjUgMTUuOSA0MS44IDM3LjkgNDYuMmwzMi44IDYuNmM1MS45IDEwLjQgODkuMyA1NiA4OS4zIDEwOSAwIDUwLjYtMzMuOCA5My4zLTgwIDEwNi43bDAgMjAuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQuOSAwYzI2IDAgNDcuMS0yMS4xIDQ3LjEtNDcuMSAwLTIyLjUtMTUuOS00MS44LTM3LjktNDYuMmwtMzIuOC02LjZjLTUxLjktMTAuNC04OS4zLTU2LTg5LjMtMTA5IDAtNTAuNiAzMy44LTkzLjIgODAtMTA2LjdMMzY4IDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6Il0KICAgIH07CiAgICBmYVN0YXJBbmRDcmVzY2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWFuZC1jcmVzY2VudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzBdLCAiZjY5OSIsICJNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAzMyAwIDY0LjYgNi4zIDkzLjYgMTcuNyA3LjQgMi45IDExLjUgMTAuNyA5LjggMTguNHMtOC44IDEzLTE2LjcgMTIuNGMtNC44LS4zLTkuNy0uNS0xNC42LS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41IDcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6Il0KICAgIH07CiAgICBmYUZhY2VTdXJwcmlzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zdXJwcmlzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgInN1cnByaXNlIl0sICJmNWMyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVN1cnByaXNlMiA9IGZhRmFjZVN1cnByaXNlMjsKICAgIGZhSG9zcGl0YWxVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjgwZCIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0yNDggODhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6TTQxNiAzMDRhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUFycm93RG93blVwTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXVwLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRiMCIsICJNMjYyLjYgNDIyLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMjUuNCAyNS40IDAtMTE0LjctNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyNTYgMCAwLTExNC43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTI1LjQtMjUuNCAwIDk0LjhjLTI1LjMgMjAuMy00Mi44IDUwLjEtNDcgODMuOWwtMTQ1IDAgMCAxMTQuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMTkyIDMybDAgMTQ0LTY0IDAgMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDk2IDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhRm9sZGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsICJmb2xkZXItYmxhbmsiXSwgImYwN2IiLCAiTTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFGb2xkZXJCbGFuazIgPSBmYUZvbGRlcjI7CiAgICBmYUhvbGx5QmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9sbHktYmVycnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhYSIsICJNMjU2LjIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0yNzcgMzgzLjhjMSAuMSAyLjEgLjIgMy4yIC4yIDM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjIuN2MwIDE2LjQgMTYgMjcuOSAzMS42IDIyLjhsMTIuOC00LjNjMTgtNiAzNy4zLTYuNSA1NS42LTEuNWwxOS40IDUuM2MxNy45IDQuOSAzNC40LTExLjYgMjkuNS0yOS41TDQ5NS45IDQ1MmMtNS0xOC4zLTQuNC0zNy42IDEuNS01NS42bDQuMy0xMi44YzUuMi0xNS41LTYuNC0zMS42LTIyLjgtMzEuNi0zNC42IDAtNjIuNy0yOC4xLTYyLjctNjIuN2wwLTMyYzAtMTYuNC0xNi0yNy45LTMxLjYtMjIuOGwtMTIuOCA0LjNjLTE4IDYtMzcuMyA2LjUtNTUuNiAxLjVsLTI5LjYtOC4xYy0yLjktLjgtNS45LTEtOC43LS43IDQuMiA5LjcgNS44IDIwLjggMy43IDMyLjNsLTYuMyAzNC44Yy0xLjUgOC40LTEuNCAxNyAuNSAyNS4zbDUuMyAyMy45YzIuOCAxMi43IDEuMSAyNS4yLTQgMzUuOXpNMTI3LjggMjM0LjVjLTE1LjUtNS4yLTMxLjYgNi40LTMxLjYgMjIuOGwwIDMyYzAgMzQuNi0yOC4xIDYyLjctNjIuNyA2Mi43LTE2LjQgMC0yNy45IDE2LTIyLjggMzEuNkwxNSAzOTYuNGM2IDE4IDYuNSAzNy4zIDEuNSA1NS42bC01LjMgMTkuNEM2LjQgNDg5LjQgMjIuOCA1MDUuOCA0MC43IDUwMWwxOS40LTUuM2MxOC4zLTUgMzcuNi00LjUgNTUuNiAxLjVsMTIuOCA0LjNjMTUuNSA1LjIgMzEuNi02LjQgMzEuNi0yMi44bDAtMzJjMC0zNC42IDI4LjEtNjIuNyA2Mi43LTYyLjcgMTYuNCAwIDI3LjktMTYgMjIuOC0zMS42bC00LjMtMTIuOGMtNi0xOC02LjUtMzcuMy0xLjUtNTUuNmw1LjMtMTkuNGM0LjktMTcuOS0xMS42LTM0LjQtMjkuNS0yOS41bC0xOS40IDUuM2MtMTguMyA1LTM3LjYgNC40LTU1LjYtMS41bC0xMi44LTQuM3pNMzg0LjIgMTQ0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVZlbnVzRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzLWRvdWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTBdLCAiZjIyNiIsICJNMTkyIDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM2OCAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0LjEgMTczLjEgLjEgMSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS04Mi0xNS0xNDQuMS04Ni44LTE0NC4xLTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2UzM2OCA3OC44IDM2OCAxNzZ6TTM1Ny41IDMyN2MxNC40LTE1LjggMjYuNi0zMy43IDM2LjEtNTMuMSAxNi4xIDkgMzQuNyAxNC4xIDU0LjUgMTQuMSA2MS45IDAgMTEyLTUwLjEgMTEyLTExMlM1MDkuOSA2NCA0NDggNjRjLTE5LjggMC0zOC4zIDUuMS01NC41IDE0LjEtOS41LTE5LjQtMjEuNi0zNy4zLTM2LjEtNTMuMSAyNi40LTE1LjkgNTcuNC0yNSA5MC41LTI1IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIC45IC4xIDEuOSAuMSAyLjlsMCA2NCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NGMwLTEgMC0xLjkgLjEtMi45LTIxLjEtMy45LTQwLjktMTEuNS01OC42LTIyLjJ6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZFF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1xdWVzdGlvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNGUzIiwgIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDI0OGMxNi4xIDAgMjkuMiAxMy4xIDI5LjIgMjkuMiAwIDguNy0zLjEgMTMuOS02LjkgMTcuNy00LjUgNC40LTEwLjcgNy41LTE2LjggOS41LTE0LjkgNS0yOS41IDE5LjMtMjkuNSAzOS41IDAgMTMuMyAxMC43IDI0IDI0IDI0IDExLjUgMCAyMS4yLTguMSAyMy41LTE5IDE5LjItNy4xIDUzLjctMjYuMyA1My43LTcxLjggMC00Mi42LTM0LjYtNzcuMi03Ny4yLTc3LjJzLTc3LjIgMzQuNi03Ny4yIDc3LjJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE2LjEgMTMuMS0yOS4yIDI5LjItMjkuMnptMjggMTY4YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHoiXQogICAgfTsKICAgIGZhSG90ZG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdGRvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc4OV0sICJmODBmIiwgIk0yODggMGMtMjAuNSAwLTQwLjEgOC4xLTU0LjYgMjIuNkwyMi42IDIzMy40QzguMSAyNDcuOSAwIDI2Ny41IDAgMjg4IDAgMzAwLjIgMi45IDMxMi4xIDguMiAzMjIuN0wzMjIuNyA4LjJDMzEyLjEgMi45IDMwMC4yIDAgMjg4IDB6TTIyNCA1MTJjMjAuNSAwIDQwLjEtOC4xIDU0LjYtMjIuNkw0ODkuNCAyNzguNmMxNC41LTE0LjUgMjIuNi0zNC4xIDIyLjYtNTQuNiAwLTEyLjItMi45LTI0LjEtOC4yLTM0LjdMMTg5LjMgNTAzLjhjMTAuNyA1LjQgMjIuNiA4LjIgMzQuNyA4LjJ6TTQ1Ni42IDE2OC42YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTI4OCAyODhjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMXM4MS45IDMxLjIgMTEzLjEgMGwyODgtMjg4eiJdCiAgICB9OwogICAgZmFBcnJvd1VwRnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwOWEiLCAiTTI0Ni42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDEwOS4zIDE5MiAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4ek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFNaWNyb3Njb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3Jvc2NvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDBdLCAiZjYxMCIsICJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NCAzMiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzM5MC43IDQ0OCAzMjAgNDQ4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYuOSAwYzMwLjQtMzQgNDguOS03OC44IDQ4LjktMTI4IDAtMTA2LTg2LTE5Mi0xOTItMTkybC0zMiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6TTEyMCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFDbG91ZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI5XSwgImYwYzIiLCAiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0bDMwNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNTEuNi0zMC41LTk2LjEtNzQuNS0xMTYuMyA2LjctMTMuMSAxMC41LTI4IDEwLjUtNDMuNyAwLTUzLTQzLTk2LTk2LTk2LTE3LjcgMC0zNC4yIDQuOC00OC40IDEzLjEtMjQuMS00NS44LTcyLjItNzcuMS0xMjcuNi03Ny4xLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOCAuNyAxNS45IDEuOSAyMy41LTU2LjkgMTkuMi05Ny45IDczLjEtOTcuOSAxMzYuNXoiXQogICAgfTsKICAgIGZhQmFzZWJhbGxCYXRCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsLWJhdC1iYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0MzIiLCAiTTQ2NC4xIDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptOC40LTU3NmMxNS4xIDAgMjkuNyA1LjggNDAuNyAxNi4ybDQ3LjIgNDQuOGMxMi42IDEyIDE5LjEgMjkgMTcuNSA0Ni4zLTEuMiAxMy4zLTcgMjUuOC0xNi41IDM1LjJMMzYzLjEgMzA5Yy03LjMgNy4zLTE1LjcgMTMuNC0yNSAxOEwyMDYgMzkzYy05LjIgNC42LTE3LjcgMTAuNy0yNSAxOGwtOTIgOTIgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN2wtMS44LTEuNy00OC00OC0xLjctMS44Yy03LjctOS40LTcuMS0yMy4zIDEuNy0zMi4xczIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgOTItOTJjNy4zLTcuMyAxMy40LTE1LjcgMTgtMjVsNjYuMS0xMzIuMWM0LjYtOS4yIDEwLjctMTcuNyAxOC0yNUw0MzAuOC0xNC43QzQ0MS45LTI1LjggNDU2LjktMzIgNDcyLjUtMzJ6Il0KICAgIH07CiAgICBmYUNhclJlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLXJlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2FyLWFsdCJdLCAiZjVkZSIsICJNMTY1LjQgOTZsMTgxLjIgMGMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40bDI2LjEgNzQuNi0yOTMuOCAwIDI2LjEtNzQuNmM0LjUtMTIuOCAxNi42LTIxLjQgMzAuMi0yMS40em0tOTAuNiAuM0wzOS42IDE5Ni44QzE2LjQgMjA2LjQgMCAyMjkuMyAwIDI1NmwwIDk2YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwzMiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI1NiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQwLjZjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNGwwLTk2YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDk2LjNDNDIzLjcgNTcuOCAzODcuNCAzMiAzNDYuNiAzMkwxNjUuNCAzMmMtNDAuOCAwLTc3LjEgMjUuOC05MC42IDY0LjN6TTIwOCAyODhsOTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTk2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMjgwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zNjAtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ2FyQWx0ID0gZmFDYXJSZWFyOwogICAgZmFUaHVtYnRhY2tTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2stc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidGh1bWItdGFjay1zbGFzaCJdLCAiZTY4ZiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MTcuOCAzNTIgNDQ4IDM1MmMxMCAwIDE5LjUtNC43IDI1LjUtMTIuN3M4LTE4LjQgNS4yLTI4LjFMNDc1IDI5Ny44Yy0xMi40LTQzLjMtNDEtNzguNS03OC4yLTk5LjdMMzg2LjUgNjQgNDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMTYwIDBjLTcuNCAwLTE0LjEgMi41LTE5LjUgNi42TDE5MC4xIDU2LjMgMTg1LjMgMTE5LjQgNDEtMjQuOXpNMjgyLjIgMzUyTDE0OS43IDIxOS42Yy0yMi43IDIwLjUtMzkuOCA0Ny40LTQ4LjcgNzguM2wtMy44IDEzLjRjLTIuOCA5LjctLjggMjAgNS4yIDI4LjFTMTE4IDM1MiAxMjggMzUybDE1NC4yIDB6TTI1NiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMi02NCAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2tTbGFzaCA9IGZhVGh1bWJ0YWNrU2xhc2g7CiAgICBmYVBsdXNNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzLW1pbnVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0M2MiLCAiTTIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDEyOC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTEyOHpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhSG91c2VDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwOSIsICJNNDk2IDU0NGExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMjE3LjYgMjAyYy0xMC4yLTEuNy0yMC43LTIuNi0zMS4zLTIuNi03OC42IDAtMTQ2LjEgNDcuMi0xNzUuOCAxMTQuOC01LjEtMS44LTEwLjUtMi44LTE2LjItMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkxIDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjEgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek01NTMuNCAzMzkuMWMtNy4xLTUuMi0xNy4xLTMuNi0yMi4zIDMuNWwtNTMgNzIuOC0yNi43LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjdzOC45LTIuOCAxMS43LTYuNmw2NC04OGM1LjItNy4xIDMuNi0xNy4xLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckRheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgImYxMTEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYU1vYmlsZVZpYnJhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXZpYnJhdGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTgxNiIsICJNMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTM4NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMHpNMjQ4IDQxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek00OC44IDEzMy40YzkuNC03LjcgMjMuMy03LjEgMzIuMSAxLjcgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDI1LjQgMjUuNCAyLjkgMy4yYzYuMyA3LjcgOS44IDE3LjQgOS44IDI3LjQgMCAxMS41LTQuNiAyMi41LTEyLjcgMzAuNmwtMjUuNCAyNS40IDMxIDMxIDEuNyAxLjhjNy43IDkuNCA3LjEgMjMuMy0xLjcgMzIuMXMtMjIuNyA5LjMtMzIuMSAxLjdMNDcgMzc3IDEyLjcgMzQyLjZDNS42IDMzNS41IDEuMiAzMjYuMiAuMiAzMTYuM0wwIDMxMiAuMiAzMDcuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMMzguMSAyNTYgMTIuNyAyMzAuNkM1LjYgMjIzLjUgMS4yIDIxNC4yIC4yIDIwNC4zTDAgMjAwIC4yIDE5NS43YzEtOS45IDUuNC0xOS4yIDEyLjUtMjYuM0w0NyAxMzUgNDguOCAxMzMuNHpNNDk1IDEzNWM4LjgtOC44IDIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgMzQuMyAzNC4zYzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTI1LjQgMjUuNCAyNS40IDI1LjRjNy4xIDcuMSAxMS41IDE2LjQgMTIuNSAyNi4zbC4yIDQuMy0uMiA0LjNjLTEgOS45LTUuNCAxOS4yLTEyLjUgMjYuM2wtMzQuMyAzNC4zLTEuOCAxLjdjLTkuNCA3LjctMjMuMyA3LjEtMzIuMS0xLjdzLTkuMy0yMi43LTEuNy0zMi4xbDEuNy0xLjggMzEtMzEtMjUuNC0yNS40Yy04LjEtOC4xLTEyLjctMTkuMS0xMi43LTMwLjYgMC0xMCAzLjUtMTkuNyA5LjgtMjcuNGwyLjktMy4yIDI1LjQtMjUuNC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUZhY2VHcmluU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE4LCAiZ3Jpbi1zcXVpbnQiXSwgImY1ODUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTIyLjYgMTQzLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhR3JpblNxdWludDIgPSBmYUZhY2VHcmluU3F1aW50MjsKICAgIGZhVXNlcnNCZXR3ZWVuTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtYmV0d2Vlbi1saW5lcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTkxIiwgIk0yNCAxNmw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA2NEMxMC43IDY0IDAgNTMuMyAwIDQwUzEwLjcgMTYgMjQgMTZ6bTAgNDQ4bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMzkyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMEMxMzguNiAzMTguMyAxMjggMzQ5LjkgMTI4IDM4NGwwIDhjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC03OC44IDBDNDEuNiA0MTYgMzIgNDA2LjQgMzIgMzk0LjdMMzIgMzg0YzAtNTMgNDMtOTYgOTYtOTYgMTAgMCAxOS43IDEuNSAyOC44IDQuNHpNNzIgMTkyYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTUyLTE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDM4NGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHoiXQogICAgfTsKICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxMyIsICJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTIyLjYtMTQ0bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkw1MTguNiA0MDB6Il0KICAgIH07CiAgICBmYVRhYmxlTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZS1saXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoLWxpc3QiXSwgImYwMGIiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em02NCAwbDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6TTY0IDIyNGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHoiXQogICAgfTsKICAgIGZhVGhMaXN0ID0gZmFUYWJsZUxpc3Q7CiAgICBmYUZsYXNrVmlhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFzay12aWFsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZjMiLCAiTTE4NC42IDQxMS41Yy0zLjEgNy4zLTUuNCAxNC45LTYuOCAyMi42LTE0LjUgOC44LTMxLjUgMTMuOS00OS44IDEzLjktNTMgMC05Ni00My05Ni05NkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwTDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMjU1LjYtMzkuNCA5MS45ek05NiA2NGwwIDEyOCA2NCAwIDAtMTI4LTY0IDB6TTM1MiAwTDUxMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUzLjQgOTEuMyAyMTNjMi4zIDUuNCAzLjggMTEuMSA0LjQgMTdsLjMgLjYtLjMgMGMuMiAxLjggLjMgMy42IC4zIDUuNCAwIDMyLjMtMjYuMiA1OC42LTU4LjYgNTguNmwtMjY2LjkgMGMtMzIuMyAwLTU4LjYtMjYuMi01OC42LTU4LjYgMC0xLjggLjEtMy42IC4zLTUuNGwtLjMgMCAuMy0uNmMuNi01LjggMi4xLTExLjYgNC40LTE3TDMyMCAyMTcuNCAzMjAgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzMwMi4zIDAgMzIwIDBsMzIgMHpNNDUzLjIgMjQyLjZjLTMuNC04LTUuMi0xNi41LTUuMi0yNS4ybDAtMTUzLjQtNjQgMCAwIDE1My40YzAgOC43LTEuOCAxNy4yLTUuMiAyNS4ybC0zMy4yIDc3LjQgMTQwLjcgMC0zMy4yLTc3LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleGNsYW1hdGlvbi1jaXJjbGUiXSwgImYwNmEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il0KICAgIH07CiAgICBmYUV4Y2xhbWF0aW9uQ2lyY2xlID0gZmFDaXJjbGVFeGNsYW1hdGlvbjsKICAgIGZhVGF4aSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXhpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjYyLCAiY2FiIl0sICJmMWJhIiwgIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi04LjkgMGMtNDIgMC03OS4xIDI3LjMtOTEuNiA2Ny40bC0yMyA3My41QzE0LjUgMjE5LjEgMCAyNDMuOSAwIDI3MkwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMzIwIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTc2YzAtMjguMS0xNC41LTUyLjktMzYuNC02Ny4xbC0yMy03My41QzQ0MC4xIDkxLjMgNDAyLjkgNjQgMzYwLjkgNjRsLTguOSAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDB6TTE1MS4xIDEyOGwyMDkuOSAwYzE0IDAgMjYuNCA5LjEgMzAuNSAyMi41bDEzIDQxLjUtMjk2LjkgMCAxMy00MS41YzQuMi0xMy40IDE2LjUtMjIuNSAzMC41LTIyLjV6TTk2IDI3MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI4OCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFDYWIgPSBmYVRheGk7CiAgICBmYVRleHRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXh0LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInJlbW92ZS1mb3JtYXQiXSwgImY4N2QiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzIyLjcgMjU2LjkgMzY4LjIgOTYgNDcxIDk2IDQ2NSAxMjAuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMS00NC4xQzU0NS42IDYxLjMgNTIyLjcgMzIgNDkxLjUgMzJsLTMxOSAwYy0xOS44IDAtMzcuMyAxMi4xLTQ0LjUgMzAuMWwtODctODd6TTE4MC40IDExNC41bDQuNi0xOC41IDExNi43IDAtMzAuOCAxMDktOTAuNS05MC41ek0yNDEgMzEwLjhMMjExLjMgNDE2IDE2MCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQyLjIgMCAxNS4xLTUzLjMtNTEuOS01MS45eiJdCiAgICB9OwogICAgZmFSZW1vdmVGb3JtYXQgPSBmYVRleHRTbGFzaDsKICAgIGZhUGVvcGxlUHVsbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcHVsbGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM1IiwgIk04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzIgOS44IDAgMTguNS00LjQgMjQuNC0xMS4yTDgwLjQgNDg1LjNjMi45IDE3LjQgMTkuNCAyOS4yIDM2LjggMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi44bC0yMC41LTEyMi43IDE1LjcgMCAzMCAxMzQuOWMzLjggMTcuMyAyMC45IDI4LjEgMzguMiAyNC4zczI4LjEtMjAuOSAyNC4zLTM4LjJsLTU3LjMtMjU4IDExNi4zIDUzLjhjLjUgLjMgMS4xIC41IDEuNiAuNyA4LjYgMy42IDE4IDMuMSAyNS45LS43IDMuNC0xLjYgNi42LTMuOSA5LjMtNi43IDMuMS0zLjIgNS41LTcgNy4xLTExLjQgLjEtLjMgLjItLjcgLjMtMWwyLjUtNy41YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45bC0yMS40LTEwLjctMTUuMy0zNi44Yy0xNy4xLTQxLjEtNTcuMy02Ny45LTEwMS45LTY3LjktMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0yNC40IDEwLjktNDQuNiAyOS01OC4xIDUxLjZMMTU3LjMgMTM2LjlDMTQ0LjcgMTMxIDEzMC45IDEyOCAxMTcgMTI4bC01MyAwek00NjQgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0zNDkuNyAzMzUuNmwtMjUgNjIuNC01OS40IDU5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzcyLjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnoiXQogICAgfTsKICAgIGZhQmFja3dhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFja3dhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5MTk0XSwgImYwNGEiLCAiTTIwNC4zIDQzLjFDMjE1LjkgMzIgMjMzIDI4LjkgMjQ3LjcgMzUuMlMyNzIgNTYgMjcyIDcybDAgMTM2LjMgMTcyLjMtMTY1LjFDNDU1LjkgMzIgNDczIDI4LjkgNDg3LjcgMzUuMlM1MTIgNTYgNTEyIDcybDAgMzY4YzAgMTYtOS42IDMwLjUtMjQuMyAzNi44cy0zMS44IDMuMi00My40LTcuOUwyNzIgMzAzLjcgMjcyIDQ0MGMwIDE2LTkuNiAzMC41LTI0LjMgMzYuOHMtMzEuOCAzLjItNDMuNC03LjlsLTE5Mi0xODRDNC41IDI3Ny4zIDAgMjY2LjkgMCAyNTZzNC41LTIxLjMgMTIuMy0yOC45bDE5Mi0xODR6Il0KICAgIH07CiAgICBmYUNhckJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjYXItY3Jhc2giXSwgImY1ZTEiLCAiTTIzMiAxNi4xbDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0ek0zMiAxNjguMWw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0yODEuNSA3MC42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDI4MS41IDM2LjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em0tMTgxIDIxNWwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1Mi45IDE3NS40TDUwNSAyMTYuMmM2LjQgMS43IDExLjEgNy4zIDExLjggMTMuOWw3LjIgNzQtMjMxLjUtNjIgNDMuMi02MC41YzMuOS01LjQgMTAuNy03LjkgMTcuMi02LjJ6TTIyMy42IDIyOC41bC0yLjEgMi45Yy0yMS43IDUuNS0zOS45IDIyLjMtNDYuMSA0NS41LTQuMSAxNS41LTEyLjQgNDYuNC0yNC44IDkyLjdsLTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI3OC4yIDc0LjUtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjYgNC4xLTE1LjUgMTIuNC00Ni40IDI0LjgtOTIuN2w4LjMtMzAuOWM2LjItMjMuMi0xLjEtNDYuOC0xNy4yLTYyLjVsLS4zLTMuNi0xMC0xMDNjLTMuMi0zMy4yLTI2LjctNjAuOS01OC45LTY5LjVMMzY5LjUgMTEzLjZjLTMyLjItOC42LTY2LjQgMy42LTg1LjggMzAuOGwtNjAuMiA4NC4yem00OC43IDU3LjhhMzIgMzIgMCAxIDEgLTE2LjYgNjEuOCAzMiAzMiAwIDEgMSAxNi42LTYxLjh6bTIwOC4xIDg4LjlhMzIgMzIgMCAxIDEgNjEuOCAxNi42IDMyIDMyIDAgMSAxIC02MS44LTE2LjZ6Il0KICAgIH07CiAgICBmYUNhckNyYXNoID0gZmFDYXJCdXJzdDsKICAgIGZhTGluayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjc5LCAiY2hhaW4iXSwgImYwYzEiLCAiTTQxOS41IDk2Yy0xNi42IDAtMzIuNyA0LjUtNDYuOCAxMi43LTE1LjgtMTYtMzQuMi0yOS40LTU0LjUtMzkuNSAyOC4yLTI0IDY0LjEtMzcuMiAxMDEuMy0zNy4yIDg2LjQgMCAxNTYuNSA3MCAxNTYuNSAxNTYuNSAwIDQxLjUtMTYuNSA4MS4zLTQ1LjggMTEwLjZsLTcxLjEgNzEuMWMtMjkuMyAyOS4zLTY5LjEgNDUuOC0xMTAuNiA0NS44LTg2LjQgMC0xNTYuNS03MC0xNTYuNS0xNTYuNSAwLTEuNSAwLTMgLjEtNC41IC41LTE3LjcgMTUuMi0zMS42IDMyLjktMzEuMXMzMS42IDE1LjIgMzEuMSAzMi45YzAgLjkgMCAxLjggMCAyLjYgMCA1MS4xIDQxLjQgOTIuNSA5Mi41IDkyLjUgMjQuNSAwIDQ4LTkuNyA2NS40LTI3LjFsNzEuMS03MS4xYzE3LjMtMTcuMyAyNy4xLTQwLjkgMjcuMS02NS40IDAtNTEuMS00MS40LTkyLjUtOTIuNS05Mi41ek0yNzUuMiAxNzMuM2MtMS45LS44LTMuOC0xLjktNS41LTMuMS0xMi42LTYuNS0yNy0xMC4yLTQyLjEtMTAuMi0yNC41IDAtNDggOS43LTY1LjQgMjcuMUw5MS4xIDI1OC4yYy0xNy4zIDE3LjMtMjcuMSA0MC45LTI3LjEgNjUuNCAwIDUxLjEgNDEuNCA5Mi41IDkyLjUgOTIuNSAxNi41IDAgMzIuNi00LjQgNDYuNy0xMi42IDE1LjggMTYgMzQuMiAyOS40IDU0LjYgMzkuNS0yOC4yIDIzLjktNjQgMzcuMi0xMDEuMyAzNy4yLTg2LjQgMC0xNTYuNS03MC0xNTYuNS0xNTYuNSAwLTQxLjUgMTYuNS04MS4zIDQ1LjgtMTEwLjZsNzEuMS03MS4xYzI5LjMtMjkuMyA2OS4xLTQ1LjggMTEwLjYtNDUuOCA4Ni42IDAgMTU2LjUgNzAuNiAxNTYuNSAxNTYuOSAwIDEuMyAwIDIuNiAwIDMuOS0uNCAxNy43LTE1LjEgMzEuNi0zMi44IDMxLjJzLTMxLjYtMTUuMS0zMS4yLTMyLjhjMC0uOCAwLTEuNSAwLTIuMyAwLTMzLjctMTgtNjMuMy00NC44LTc5LjZ6Il0KICAgIH07CiAgICBmYUNoYWluID0gZmFMaW5rOwogICAgZmFCYWNrd2FyZFN0ZXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFja3dhcmQtc3RlcCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzdGVwLWJhY2t3YXJkIl0sICJmMDQ4IiwgIk0zNjMgMzYuOGMtMTIuOS03LTI4LjctNi4zLTQxIDEuOEw2NCAyMDguMSA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ0LjEgMjU4IDE2OS42YzEyLjMgOC4xIDI4IDguOCA0MSAxLjhzMjEtMjAuNSAyMS0zNS4ybDAtMzY4YzAtMTQuNy04LjEtMjguMi0yMS0zNS4yeiJdCiAgICB9OwogICAgZmFTdGVwQmFja3dhcmQgPSBmYUJhY2t3YXJkU3RlcDsKICAgIGZhWCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTIwXSwgIjU4IiwgIk0zNzYuNiA4NC41YzExLjMtMTMuNiA5LjUtMzMuOC00LjEtNDUuMXMtMzMuOC05LjUtNDUuMSA0LjFMMTkyIDIwNiA1Ni42IDQzLjVDNDUuMyAyOS45IDI1LjEgMjguMSAxMS41IDM5LjRTLTMuOSA3MC45IDcuNCA4NC41TDE1MC4zIDI1NiA3LjQgNDI3LjVjLTExLjMgMTMuNi05LjUgMzMuOCA0LjEgNDUuMXMzMy44IDkuNSA0NS4xLTQuMUwxOTIgMzA2IDMyNy40IDQ2OC41YzExLjMgMTMuNiAzMS41IDE1LjQgNDUuMSA0LjFzMTUuNC0zMS41IDQuMS00NS4xTDIzMy43IDI1NiAzNzYuNiA4NC41eiJdCiAgICB9OwogICAgZmFDaXJjbGVVc2VyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCAidXNlci1jaXJjbGUiXSwgImYyYmQiLCAiTTM5OSAzODQuMkMzNzYuOSAzNDUuOCAzMzUuNCAzMjAgMjg4IDMyMGwtNjQgMGMtNDcuNCAwLTg4LjkgMjUuOC0xMTEgNjQuMiAzNS4yIDM5LjIgODYuMiA2My44IDE0MyA2My44czEwNy44LTI0LjcgMTQzLTYzLjh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAxNmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHoiXQogICAgfTsKICAgIGZhVXNlckNpcmNsZTIgPSBmYUNpcmNsZVVzZXIyOwogICAgZmFSZWN0YW5nbGVMaXN0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtbGlzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWFsdCJdLCAiZjAyMiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTk2IDI1NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0xMjAtNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUxpc3RBbHQyID0gZmFSZWN0YW5nbGVMaXN0MjsKICAgIGZhSGFuZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMwNiwgOTk5NSwgImhhbmQtcGFwZXIiXSwgImYyNTYiLCAiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4eiJdCiAgICB9OwogICAgZmFIYW5kUGFwZXIyID0gZmFIYW5kMjsKICAgIGZhVmFuU2h1dHRsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2YW4tc2h1dHRsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NiwgInNodXR0bGUtdmFuIl0sICJmNWI2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDMzNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwuNCAwYzQgNDQuOSA0MS43IDgwIDg3LjYgODBzODMuNi0zNS4xIDg3LjYtODBsMTA0LjcgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwIDQ2LjEgMCA4My45LTM1LjQgODcuNy04MC41IDMxLjctMy44IDU2LjMtMzAuOCA1Ni4zLTYzLjVsMC0xMDEuM2MwLTEzLjgtNC41LTI3LjMtMTIuOC0zOC40bC04MC0xMDYuN0M0NzEuMSA3My41IDQ1Mi4xIDY0IDQzMiA2NEw2NCA2NHpNNTA0IDIyNGwtMTIwIDAgMC05NiA0OCAwIDcyIDk2ek02NCAyMjRsMC05NiA5NiAwIDAgOTYtOTYgMHptMTYwIDBsMC05NiA5NiAwIDAgOTYtOTYgMHpNMzkyIDM5MmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0xNTIgMzUyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2h1dHRsZVZhbiA9IGZhVmFuU2h1dHRsZTsKICAgIGZhU3RhaXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjg5IiwgIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2eiJdCiAgICB9OwogICAgZmFIb3JzZUhlYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9yc2UtaGVhZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2FiIiwgIk0wIDQ2NEwwIDMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVjMjEuNC03LjYgNDMuOCA4LjMgNDMuOCAzMC45IDAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41LTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFsLTMuNCAwYy0yNi4xIDAtNTAuOS0xMS42LTY3LjYtMzEuN2wtMzIuMy0zOC43Yy0xMS43IDQuMS0yNC4yIDYuNC0zNy4zIDYuNGwtLjEgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNS0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjItNC40LTcuNy0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjQgMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHpNMzI4IDIyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVZhdWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZhdWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyYzUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwyNTYgMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yNTYgMjU2YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNjQgMjU2YTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6bTM4NC00OGMwIDE3LjgtOS43IDMzLjMtMjQgNDEuNmwwIDc4LjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03OC40Yy0xNC4zLTguMy0yNC0yMy44LTI0LTQxLjYgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHoiXQogICAgfTsKICAgIGZhRHJ1bVN0ZWVscGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW0tc3RlZWxwYW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU2YSIsICJNMjg4IDMyYzE1OS4xIDAgMjg4IDQ4IDI4OCAxMjhsMCAxOTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MkwwIDE2MEMwIDgwIDEyOC45IDMyIDI4OCAzMnpNNTI4IDE2MGMwLTkuOS04LTI5LjktNTUtNDkuOC0xOC42LTcuOS00MC45LTE0LjQtNjYtMTkuNGwtMjcuOCA0My42Yy03LjMgMTEuNS0xMS4yIDI0LjgtMTEuMiAzOC40IDAgMTcuNSA2LjQgMzQuNCAxOC4xIDQ3LjVsOS44IDExYzI5LjgtNS4yIDU1LjktMTIuNSA3Ny4yLTIxLjUgNDcuMS0xOS45IDU1LTM5LjkgNTUtNDkuOHpNMzQ5LjIgMjM3LjNjLTgtMjYuMi0zMi40LTQ1LjMtNjEuMi00NS4zcy01My4zIDE5LjEtNjEuMiA0NS4zYzE5LjQgMS43IDM5LjkgMi43IDYxLjIgMi43czQxLjgtLjkgNjEuMi0yLjd6TTE2OSA5MC44Yy0yNS4yIDUtNDcuNCAxMS42LTY2IDE5LjQtNDcuMSAxOS45LTU1IDM5LjktNTUgNDkuOHM4IDI5LjkgNTUgNDkuOGMyMS4zIDkgNDcuNCAxNi4zIDc3LjIgMjEuNWw5LjgtMTFjMTEuNi0xMy4xIDE4LjEtMzAgMTguMS00Ny41IDAtMTMuNi0zLjktMjYuOS0xMS4yLTM4LjRMMTY5IDkwLjh6bTU2LjMtOGMtLjkgNC4zLTEuNCA4LjctMS40IDEzLjIgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTQuNS0uNS05LTEuNC0xMy4yLTE5LjgtMS44LTQwLjgtMi44LTYyLjYtMi44cy00Mi44IDEtNjIuNiAyLjh6Il0KICAgIH07CiAgICBmYVRodW1ic1VwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzcsIDYxNTc1XSwgImYxNjQiLCAiTTgwIDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsNDggMHpNMjcwLjYgMTZDMjk3LjkgMTYgMzIwIDM4LjEgMzIwIDY1LjRsMCA0LjJjMCA2LjgtMS4zIDEzLjYtMy44IDE5LjlMMjg4IDE2MCA0NDggMTYwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyMy40LTE2LjggNDIuOS0zOSA0Ny4xIDQuNCA3LjMgNyAxNS44IDcgMjQuOSAwIDIyLjItMTUgNDAuOC0zNS40IDQ2LjMgMi4yIDUuNSAzLjQgMTEuNSAzLjQgMTcuNyAwIDI2LjUtMjEuNSA0OC00OCA0OGwtODcuOSAwYy0zNi4zIDAtNzEuNi0xMi40LTk5LjktMzUuMUwxODQgNDM1LjJjLTE1LjItMTIuMS0yNC0zMC41LTI0LTUwbDAtMTg2LjZjMC0xNC45IDMuNS0yOS42IDEwLjEtNDIuOUwyMjYuMyA0My4zQzIzNC43IDI2LjYgMjUxLjggMTYgMjcwLjYgMTZ6Il0KICAgIH07CiAgICBmYVN0YW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmYiLCAiTTMxMiAyMDEuOGMwLTE3LjQgOS4yLTMzLjIgMTkuOS00NyAxMi42LTE2LjIgMjAuMS0zNi42IDIwLjEtNTguOCAwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDIyLjEgNy41IDQyLjUgMjAuMSA1OC44IDEwLjcgMTMuOCAxOS45IDI5LjYgMTkuOSA0NyAwIDI5LjktMjQuMyA1NC4yLTU0LjIgNTQuMkwxMTIgMjU2Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMzMuOCAwYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNTYgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwMCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDU2IDQ2NHoiXQogICAgfTsKICAgIGZhTWVub3JhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZW5vcmFoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2NzYiLCAiTTIwLjggNy40QzIyLjggMi45IDI3LjEgMCAzMiAwczkuMiAyLjkgMTEuMiA3LjRMNjEuMyA0OS43YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMUw2NCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDgxLjcgMCA2NGwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMjAuOCA3LjR6bTk2IDBDMTE4LjggMi45IDEyMy4xIDAgMTI4IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzk2IDgxLjcgOTYgNjRsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDExNi44IDcuNHptNzcuOCA0Mi40TDIxMi44IDcuNEMyMTQuOCAyLjkgMjE5LjEgMCAyMjQgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwzMDguOCA3LjR6bTc3LjggNDIuNEw0MDQuOCA3LjRDNDA2LjggMi45IDQxMS4xIDAgNDE2IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNNTAwLjggNy40QzUwMi44IDIuOSA1MDcuMSAwIDUxMiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMyIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTYwIDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMjhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDAgMCA2NCAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDAgMC02NC0xOTIgMGMtNTMgMC05Ni00My05Ni05NkwwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQ2hpbGRyZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGRyZW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRlMSIsICJNMTYwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTcyIDQ4MGwwLTgwLTE3LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFMODYuNyAyODUuNSA1OCAzMjMuM2MtMTAuNyAxNC4xLTMwLjggMTYuOC00NC44IDYuMlMtMy43IDI5OC43IDcgMjg0LjdMNjUuOSAyMDdjMjIuNC0yOS42IDU3LjUtNDcgOTQuNi00N3M3Mi4yIDE3LjQgOTQuNiA0N0wzMTQgMjg0LjdjMTAuNyAxNC4xIDcuOSAzNC4yLTYuMiA0NC44cy0zNC4yIDcuOS00NC44LTYuMmwtMjguNy0zNy44IDMxLjEgOTMuNGMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODAtMTYgMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek00ODAuNSAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0tOCAzODRsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OS41LTEyLjkgMjAuNWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwcy0xOS40LTI5LjItMTAtNDQuMWw1MS43LTgyLjFjMTcuNi0yNy45IDQ4LjMtNDQuOSA4MS4yLTQ0LjlsMTIuMyAwYzMzIDAgNjMuNyAxNi45IDgxLjIgNDQuOUw2MTkuNiAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBsLTEyLjktMjAuNSAwIDE3OS41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMHoiXQogICAgfTsKICAgIGZhQ2hhcnRMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGluZS1jaGFydCJdLCAiZjIwMSIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDAwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZMNjQgNjR6bTQwNi42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzIwIDIxMC43IDI2Mi42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNzMuNC03My40IDU3LjQgNTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMaW5lQ2hhcnQgPSBmYUNoYXJ0TGluZTsKICAgIGZhU3F1YXJlRW52ZWxvcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWVudmVsb3BlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImVudmVsb3BlLXNxdWFyZSJdLCAiZjE5OSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA5LjEgMjY3LjlMMTA4LjQgMjA3LjRjLTcuNy00LjYtMTIuNC0xMi45LTEyLjQtMjEuOSAwLTE0LjEgMTEuNC0yNS41IDI1LjUtMjUuNWwyMDQuOSAwYzE0LjEgMCAyNS41IDExLjQgMjUuNSAyNS41IDAgOS00LjcgMTcuMy0xMi40IDIxLjlMMjM4LjkgMjY3LjljLTQuNSAyLjctOS42IDQuMS0xNC45IDQuMXMtMTAuNC0xLjQtMTQuOS00LjF6TTM1MiAyMzcuM2wwIDgyLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgyLjcgOTYuNyA1OEMyMDIuMSAzMDEgMjEzIDMwNCAyMjQgMzA0czIxLjktMyAzMS4zLTguN2w5Ni43LTU4eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZVNxdWFyZSA9IGZhU3F1YXJlRW52ZWxvcGU7CiAgICBmYUJhblNtb2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuLXNtb2tpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2ODUsICJzbW9raW5nLWJhbiJdLCAiZjU0ZCIsICJNOTkuNSAxNDQuOGw3OS4yIDc5LjItNTAuNyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE0Ni43IDAgOTIuNSA5Mi41Yy0zMS40IDIyLjQtNjkuOCAzNS41LTExMS4yIDM1LjUtMTA2IDAtMTkyLTg2LTE5Mi0xOTIgMC00MS41IDEzLjEtNzkuOSAzNS41LTExMS4yek0zMzMuMyAyODhsLTMyLTMyIDgyLjcgMCAwIDMyLTUwLjcgMHptMzIgMzJsMTguNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMjY5LjMgMjI0IDE0NC44IDk5LjVjMzEuNC0yMi40IDY5LjgtMzUuNSAxMTEuMi0zNS41IDEwNiAwIDE5MiA4NiAxOTIgMTkyIDAgNDEuNS0xMy4xIDc5LjktMzUuNSAxMTEuMkwzNjUuMyAzMjB6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNzIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU21va2luZ0JhbiA9IGZhQmFuU21va2luZzsKICAgIGZhVHJ1Y2tGcm9udCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1mcm9udCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMmI3IiwgIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMmwyODggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI1NmMwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMTkyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OEMxMi42IDQxNy40IDAgMzk0LjIgMCAzNjhMMCAxMTJ6bTk2IDgwbDAgNjQgMjU2IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0zMiAxNjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjI0IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3OTcwLCA2MTY4N10sICJmMWFkIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCdWxsc2V5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWxsc2V5ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTQwIiwgIk00NDggMjU2YTE5MiAxOTIgMCAxIDAgLTM4NCAwIDE5MiAxOTIgMCAxIDAgMzg0IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiA4MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0yMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4ek0yMjQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUFycm93TGVmdExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctbGVmdC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctbGVmdCJdLCAiZjE3NyIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDU0NCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQzNC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dMZWZ0ID0gZmFBcnJvd0xlZnRMb25nOwogICAgZmFDaGVzc1Jvb2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXJvb2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIwXSwgImY0NDciLCAiTTAgMzJMMCAxMzMuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0w2NCAyMjQgNjQgMzg0IDcuOCA0NTQuM0MyLjcgNDYwLjYgMCA0NjguNCAwIDQ3Ni41IDAgNDk2LjEgMTUuOSA1MTIgMzUuNSA1MTJsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtNTYuMi03MC4zIDAtMTYwIDQ1LjMtNDUuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDM4NCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi00OCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyQzk2IDE0LjMgODEuNyAwIDY0IDBMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJ6Il0KICAgIH07CiAgICBmYUJsZW5kZXJQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibGVuZGVyLXBob25lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2YjYiLCAiTTE1MS40IDEzLjJjMTAuMiA1LjggMTQuNSAxOC40IDEwIDI5LjNMMTM4LjIgOTguOGMtMy45IDkuNi0xMy43IDE1LjQtMjQgMTQuNGwtMjAuMi0yQzc4LjcgMTUyLjkgNzggMTk4LjkgOTEuOSAyNDEuMWwyMi40LTIuMmMxMC4zLTEgMjAgNC44IDI0IDE0LjRsMjMuMiA1Ni4zYzQuNSAxMC45IC4yIDIzLjQtMTAgMjkuM2wtMi45IDEuNmMtMzMuNiAxOS4yLTgxLjcgMTYuMi0xMDYuMi0yMS42LTU2LjMtODYuNi01Ni4zLTE5OS4xIDAtMjg1LjcgMjQuNi0zNy43IDcyLjctNDAuNyAxMDYuMi0yMS42bDIuOSAxLjZ6TTIyNCAzMzZMMTkzLjcgMTcuNUMxOTIuOCA4LjEgMjAwLjIgMCAyMDkuNiAwbDMyNCAwYzIxLjMgMCAzNi42IDIwLjMgMzAuOCA0MC44TDU1My4xIDgwIDQ0MCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5OS40IDAtMTguMyA2NC04MS4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjcuNCAwLTI3LjQgOTYtMjU2IDB6bTggNDhsMjQwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQwIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTEyMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYUFycm93VHVyblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXR1cm4tdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibGV2ZWwtdXAiXSwgImYxNDgiLCAiTTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0zMDYuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDEwOS4zIDE2MCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDB6Il0KICAgIH07CiAgICBmYUxldmVsVXAgPSBmYUFycm93VHVyblVwOwogICAgZmFCaWN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpY3ljbGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2OTBdLCAiZjIwNiIsICJNMzMxLjcgNDMuM0MzMzYgMzYuMyAzNDMuNyAzMiAzNTIgMzJsMTA0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY1LjYgMCA3Mi4yIDE0OC40YzEwLjctMi45IDIxLjktNC40IDMzLjQtNC40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4LTEyOC01Ny4zLTEyOC0xMjhjMC00MiAyMC4yLTc5LjIgNTEuNC0xMDIuNmwtMjAuNC00MS45LTczLjUgMTQ3Yy0yLjMgNC44LTYuMyA4LjgtMTEuNCAxMS4yLS42IC4zLTEuMiAuNS0xLjggLjctMi45IDEuMS01LjkgMS42LTguOSAxLjVMMjcxIDM2OGMtNy45IDYzLjEtNjEuNyAxMTItMTI3IDExMi03MC43IDAtMTI4LTU3LjMtMTI4LTEyOFM3My4zIDIyNCAxNDQgMjI0YzEwLjggMCAyMS4yIDEuMyAzMS4yIDMuOGwyOC41LTU2LjktMTEuNS0yNi45LTQwLjIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzkuNiAwIDE4LjMgNS43IDIyLjEgMTQuNWwxNC4zIDMzLjUgMTIzLjcgMC0zNy43LTc3LjVjLTMuNi03LjQtMy4yLTE2LjIgMS4yLTIzLjJ6TTIyOC41IDIyOC43bC00NS42IDkxLjMgODQuOCAwLTM5LjEtOTEuM3pNMzA1LjcgMjg3bDQ3LjUtOTUtODguMiAwIDQwLjcgOTV6bTE2OC43IDc1LjVsLTI5LjctNjFjLTEyLjggMTMtMjAuNyAzMC44LTIwLjcgNTAuNSAwIDM5LjggMzIuMiA3MiA3MiA3MnM3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJjLTIuNyAwLTUuNSAuMi04LjEgLjVsMjkuNyA2MWM1LjggMTEuOSAuOCAyNi4zLTExLjEgMzIuMXMtMjYuMyAuOC0zMi4xLTExLjF6TTE0OS4yIDM2OGMtMjAuMiAwLTMzLjQtMjEuMy0yNC4zLTM5LjRsMjQuMi00OC41Yy0xLjctLjEtMy40LS4yLTUuMS0uMi0zOS44IDAtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyYzM0LjMgMCA2Mi45LTIzLjkgNzAuMi01NmwtNjUgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1kb3duIl0sICJmMGFiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjM5IDM3N2wtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzOSAzOSAwLTE1MC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNTAuMSAzOS0zOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhQXJyb3dDaXJjbGVEb3duID0gZmFDaXJjbGVBcnJvd0Rvd247CiAgICBmYUdlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4ODEsICJjb2ciXSwgImYwMTMiLCAiTTE5NS4xIDkuNUMxOTguMS01LjMgMjExLjItMTYgMjI2LjQtMTZsNTkuOCAwYzE1LjIgMCAyOC4zIDEwLjcgMzEuMyAyNS41TDMzMiA3OS41YzE0LjEgNiAyNy4zIDEzLjcgMzkuMyAyMi44bDY3LjgtMjIuNWMxNC40LTQuOCAzMC4yIDEuMiAzNy44IDE0LjRsMjkuOSA1MS44YzcuNiAxMy4yIDQuOSAyOS44LTYuNSAzOS45TDQ0NyAyMzMuM2MuOSA3LjQgMS4zIDE1IDEuMyAyMi43cy0uNSAxNS4zLTEuMyAyMi43bDUzLjQgNDcuNWMxMS40IDEwLjEgMTQgMjYuOCA2LjUgMzkuOWwtMjkuOSA1MS44Yy03LjYgMTMuMS0yMy40IDE5LjItMzcuOCAxNC40bC02Ny44LTIyLjVjLTEyLjEgOS4xLTI1LjMgMTYuNy0zOS4zIDIyLjhsLTE0LjQgNjkuOWMtMy4xIDE0LjktMTYuMiAyNS41LTMxLjMgMjUuNWwtNTkuOCAwYy0xNS4yIDAtMjguMy0xMC43LTMxLjMtMjUuNWwtMTQuNC02OS45Yy0xNC4xLTYtMjcuMi0xMy43LTM5LjMtMjIuOEw3My41IDQzMi4zYy0xNC40IDQuOC0zMC4yLTEuMi0zNy44LTE0LjRMNS44IDM2Ni4xYy03LjYtMTMuMi00LjktMjkuOCA2LjUtMzkuOWw1My40LTQ3LjVjLS45LTcuNC0xLjMtMTUtMS4zLTIyLjdzLjUtMTUuMyAxLjMtMjIuN0wxMi4zIDE4NS44Yy0xMS40LTEwLjEtMTQtMjYuOC02LjUtMzkuOUwzNS43IDk0LjFjNy42LTEzLjIgMjMuNC0xOS4yIDM3LjgtMTQuNGw2Ny44IDIyLjVjMTIuMS05LjEgMjUuMy0xNi43IDM5LjMtMjIuOEwxOTUuMSA5LjV6TTI1Ni4zIDMzNmE4MCA4MCAwIDEgMCAtLjYtMTYwIDgwIDgwIDAgMSAwIC42IDE2MHoiXQogICAgfTsKICAgIGZhQ29nID0gZmFHZWFyOwogICAgZmFNYXJzQW5kVmVudXNCdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLWFuZC12ZW51cy1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTIzIiwgIk00NjQtMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzQuNyAwLTYzIDYzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtMzctMTEuNC03MS40LTMxLTk5LjhsNjMtNjMgMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTJjMC0xNy43LTE0LjMtMzItMzItMzJMNDk2LTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzY4IDk2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNMTkwLjktMjEuOUMxODguNC0yOCAxODIuNi0zMiAxNzYtMzJzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzQtNzYuMi0yMy4xYy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNTMzMuOCA0Ni41IDM3IDUyLjJsMzkuNSA2OS4xLTY1LjYgNDUuMWMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMi01LjYgNzkuNGMtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNTIuMSAyNjhjLTUuMy0xOS4xLTguMS0zOS4yLTguMS02MCAwLTY1LjQgMjgtMTI0LjIgNzIuNi0xNjUuMUwxOTAuOS0yMS45eiJdCiAgICB9OwogICAgZmFPdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvdHRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQ0Nl0sICJmNzAwIiwgIk0xODEuNSAxOTcuMWwxMi45IDYuNGM1LjkgMyAxMi40IDQuNSAxOS4xIDQuNSAyMy41IDAgNDIuNi0xOS4xIDQyLjYtNDIuNmwwLTIxLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjEuNGMwIDIzLjUgMTkuMSA0Mi42IDQyLjYgNDIuNiA2LjYgMCAxMy4xLTEuNSAxOS4xLTQuNSA5LjMtNC43IDE2LjQtOC4yIDIxLjItMTAuNkwxMzUuMSAxODVjLTQuNS0zLTcuMS04LTcuMS0xMy4zbDAtMy43YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAzLjdjMCA1LjMtMi43IDEwLjMtNy4xIDEzLjNsLTExLjggNy45IDguNCA0LjJ6bS04LjYgNDkuNGwtMTIuOS02LjQtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42LTMuNiAwLTcuMS0uMi0xMC42LS42bDAgLjZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwxNjAgMCAwLTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNCA5LjQtNS40IDIwLjMtOC42IDMyLTguNmwwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDguOCAwIDE2IDcuMiAxNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05OS43YzAtNDguMi0zMC44LTkxLTc2LjYtMTA2LjNsLTguNS0yLjhjLTgtMi43LTEyLjYtMTEuMS0xMC40LTE5LjNzMTAuMy0xMy4yIDE4LjYtMTEuNmwxOS45IDRDNTc2IDg2LjEgNjQwIDE2NC4yIDY0MCAyNTQuOWwwIDEuMSAwIDBjMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNGwtMTYwLjYgMEMxMzIgNDgwIDMyIDM4MCAzMiAyNTYuNmwwLTM5LjhjLTEwLjEtMTQuNi0xNi0zMi4zLTE2LTUxLjRsMC0yMS40IDAtMS40QzYuNyAxMzkuMyAwIDEzMC41IDAgMTIwIDAgMTA2LjcgMTAuNyA5NiAyNCA5NmwyLjggMEM0NC44IDU4LjIgODMuMyAzMiAxMjggMzJsNjQgMGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0bDIuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTAuNS02LjcgMTkuMy0xNiAyMi42bDAgMS40IDAgMjEuNGMwIDEuNCAwIDIuOC0uMSA0LjMgMTItNi4yIDI1LjctOS42IDQwLjEtOS42bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDggNTYuNCAwYy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0bC0zMiAwYy00Mi4zIDAtNzguMi0yNy40LTkxLTY1LjMtNS4xIC45LTEwLjMgMS4zLTE1LjYgMS4zLTE0LjEgMC0yNy45LTMuMy00MC41LTkuNnpNOTYgMTI4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptMTEyIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZXZyb25MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtbGVmdCJdLCAiZjEzNyIsICJNNTEyIDI1NmEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0yNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODcgODcgODcgODdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxNjcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwyNzEgMTM1eiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlTGVmdCA9IGZhQ2lyY2xlQ2hldnJvbkxlZnQ7CiAgICBmYUNpcmNsZVF1ZXN0aW9uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcXVlc3Rpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEwOCwgInF1ZXN0aW9uLWNpcmNsZSJdLCAiZjA1OSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgNDcuMi0zNiA2Ny4yLTU2IDc0LjVsMCAzLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LjFjMC0yMC41IDE0LjgtMzUuMiAzMC4xLTQwLjIgNi40LTIuMSAxMy4yLTUuNSAxOC4yLTEwLjMgNC4zLTQuMiA3LjctMTAgNy43LTE5LjYgMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAzNjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhUXVlc3Rpb25DaXJjbGUyID0gZmFDaXJjbGVRdWVzdGlvbjI7CiAgICBmYVdhbGtpZVRhbGtpZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YWxraWUtdGFsa2llIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY4ZWYiLCAiTTg4LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDMyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwLjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTIwLjIgNDAuNGMtMy4zIDYuNy01LjEgMTQtNS4xIDIxLjVsMCA4NC43YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC04NC43YzAtNy41LTEuNy0xNC44LTUuMS0yMS41TDYuOCAzMDEuNUMyLjMgMjkyLjYgMCAyODIuOCAwIDI3Mi45TDAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDE2IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMzIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYVVzZXJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdyb3VwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTAxLCAidXNlci1mcmllbmRzIl0sICJmNTAwIiwgIk02NCAxMjhhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMCA0NjRjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZzMTc2IDc4LjggMTc2IDE3NmwwIDZjMCAyMy4yLTE4LjggNDItNDIgNDJMNDIgNTEyYy0yMy4yIDAtNDItMTguOC00Mi00MmwwLTZ6TTQzMiA2NGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMCAyNDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRsMCAyMi40YzAgMjMtMTguNiA0MS42LTQxLjYgNDEuNmwtMTQ0LjggMGM2LjYtMTIuNSAxMC40LTI2LjggMTAuNC00MmwwLTZjMC01MS41LTE3LjQtOTguOS00Ni41LTEzNi43IDIyLjYtMTQuNyA0OS42LTIzLjMgNzguNS0yMy4zeiJdCiAgICB9OwogICAgZmFVc2VyRnJpZW5kcyA9IGZhVXNlckdyb3VwOwogICAgZmFIb3VzZUNoaW1uZXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYzNDk5LCAiaG9tZS1sZyJdLCAiZTNhZiIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTI0MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgMTI4IDAgMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMHoiXQogICAgfTsKICAgIGZhSG9tZUxnID0gZmFIb3VzZUNoaW1uZXk7CiAgICBmYVJpZ2h0RnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24tb3V0LWFsdCJdLCAiZjJmNSIsICJNNTA1IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwzNjEgOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzIwIDEwMi4zIDMyMCAxMTJsMCA4MC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMTIgMCAwIDgwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMkw1MDUgMjczek0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6Il0KICAgIH07CiAgICBmYVNpZ25PdXRBbHQgPSBmYVJpZ2h0RnJvbUJyYWNrZXQ7CiAgICBmYUZpbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxOTYsIDEyODQ1OSwgNjE0NjJdLCAiZjE1YiIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXQogICAgfTsKICAgIGZhUGxhbmVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDY5IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xODMuNC0xODMuNCA3LjEtNy43IDEyNy4zIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZzLTI1LjEtNTYtNTYtNTZMMzkyLjcgMjAwIDIzMy41IDI2LjRDMjI3LjUgMTkuOCAyMTguOSAxNiAyMDkuOSAxNmwtNDMuNyAwYy0xMC45IDAtMTguNiAxMC43LTE1LjIgMjEuMUwxNzUuMSAxMDkuMiA0MS0yNC45ek0xMzAuMiAyMDBsLTI0LjYgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZsLTE5LjggMGMtMTAuNCAwLTE4IDkuOC0xNS41IDE5LjlMMzIgMjU2IDUgMzY0LjFDMi40IDM3NC4yIDEwLjEgMzg0IDIwLjUgMzg0bDE5LjggMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDk5LjcgMC01NC4zIDE2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjFsNDMuNyAwYzkgMCAxNy41LTMuOCAyMy42LTEwLjRMMzIwLjcgMzkwLjUgMTMwLjIgMjAweiJdCiAgICB9OwogICAgZmFDbG91ZFNob3dlcnNIZWF2eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zaG93ZXJzLWhlYXZ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NDAiLCAiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMi0xLjMtNi43LTEuOS0xMy43LTEuOS0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MCAxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS41LS42IDEwLjgtMS42IDE2IC41IDAgMS4xIDAgMS42IDAgNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgMzIwem02LjggNzkuNmwtMzIgOTZDNjYuNiA1MDguMiA1MyA1MTUgNDAuNCA1MTAuOFMyMSA0OTMgMjUuMiA0ODAuNGwzMi05NkM2MS40IDM3MS44IDc1IDM2NSA4Ny42IDM2OS4yUzEwNyAzODcgMTAyLjggMzk5LjZ6bTEyMCAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMxNDEgNDkzIDE0NS4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMjI3IDM4NyAyMjIuOCAzOTkuNnptMTEyIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzI1MyA0OTMgMjU3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlMzMzkgMzg3IDMzNC44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMzczIDQ5MyAzNzcuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzQ1OSAzODcgNDU0LjggMzk5LjZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkZhbGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWZhbGxpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU0NiIsICJNMzIwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNS40YzAgNDUtMjMuNiA4Ni42LTYyLjEgMTA5LjhsLTQuNiAyLjhDMTMxLjQgMTg0LjcgOTYgMjQ3LjEgOTYgMzE0LjZMOTYgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02OS40YzAtMTYuNyAzLjMtMzMgOS40LTQ4TDM1OS4yIDUwMC4yYzExLjEgMTMuNyAzMS4zIDE1LjggNDUgNC43czE1LjgtMzEuMyA0LjctNDVMMjk1LjIgMzIwIDQwMCAzMjAgNDM4LjQgMzcxLjJjMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOGwtNDMuMi01Ny42QzQzNy4zIDI2My4xIDQyMy4xIDI1NiA0MDggMjU2bC04OSAwLTYyLjktNzUuNWM0MC4zLTM2IDYzLjktODcuOSA2My45LTE0My4xbDAtNS40ek0xMDQgMTQ0YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFUdXJuRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJuLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMDU0OSwgImxldmVsLWRvd24tYWx0Il0sICJmM2JlIiwgIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDMyMCAzMjAgMzIwbC02NCAwIDAtMTYwQzI1NiA3MS42IDE4NC40IDAgOTYgMEwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMkwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjAtNjQgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTGV2ZWxEb3duQWx0ID0gZmFUdXJuRG93bjsKICAgIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4cGFuZC1hbHQiXSwgImY0MjQiLCAiTTM0NCAwTDQ4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzMzNC4zIDAgMzQ0IDB6TTE2OCA1MTJMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwwIDM0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzQuMSAzMjAuMiA0MSAzMjdsMzkgMzkgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTMTc3LjcgNTEyIDE2OCA1MTJ6Il0KICAgIH07CiAgICBmYUV4cGFuZEFsdCA9IGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjsKICAgIGZhVXNlclRhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXRhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTA3IiwgIk0yNTYuMSA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMjI2LjQgMzA0bDU5LjQgMGM2LjcgMCAxMy4yIC40IDE5LjcgMS4xLS45IDQuOS0xLjQgOS45LTEuNCAxNWwwIDkyLjFjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlsMzEuOSAzMS45LTI4Ni4zIDBjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtOTguNSA3OS44LTE3OC4zIDE3OC4zLTE3OC4zek0zNTIuMSA0MTIuMmwwLTkyLjFjMC0xNy43IDE0LjMtMzIgMzItMzJsOTIuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFsOTYgOTZjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTc2LjEgNzYuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBsLTk2LTk2Yy05LTktMTQuMS0yMS4yLTE0LjEtMzMuOXptMTA0LTQ0LjJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSGFuZFNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc3BhcmtsZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA1ZCIsICJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3OC4yYy0xOS4yIDUuNC0zNC43IDIwLjQtNDAuNCA0MC4zbC02LjUgMjIuNy0yMi43IDYuNWMtMjUuMiA3LjItNDIuNSAzMC4yLTQyLjUgNTYuNCAwIDIyLjEgMTIuNCA0MiAzMS40IDUxLjktMjcuNSAxNy44LTYwLjIgMjguMS05NS40IDI4LjFsLTE5LjIgMGMtNTkuNiAwLTExNi45LTIyLjktMTYwLTY0TDc2LjQgMzQxYy0xNi0xNS4yLTE2LjYtNDAuNi0xLjQtNTYuNnM0MC42LTE2LjYgNTYuNi0xLjRsNjAuNSA1Ny42YzAtMS41LS4xLTMuMS0uMS00LjZsMC0yNzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjA4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tNy4zIDMyNi42Yy0xLjEtMy45LTQuNy02LjYtOC43LTYuNnMtNy42IDIuNy04LjcgNi42bC03LjMgMjUuNC0yNS40IDcuM2MtMy45IDEuMS02LjYgNC43LTYuNiA4LjdzMi43IDcuNiA2LjYgOC43bDI1LjQgNy4zIDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNmw3LjMtMjUuNCAyNS40LTcuM2MzLjktMS4xIDYuNi00LjcgNi42LTguN3MtMi43LTcuNi02LjYtOC43bC0yNS40LTcuMy03LjMtMjUuNHpNMTA0IDEyMGw0OC4zIDEzLjhjNC42IDEuMyA3LjcgNS41IDcuNyAxMC4ycy0zLjEgOC45LTcuNyAxMC4yTDEwNCAxNjggOTAuMiAyMTYuM2MtMS4zIDQuNi01LjUgNy43LTEwLjIgNy43cy04LjktMy4xLTEwLjItNy43TDU2IDE2OCA3LjcgMTU0LjJDMy4xIDE1Mi45IDAgMTQ4LjcgMCAxNDRzMy4xLTguOSA3LjctMTAuMkw1NiAxMjAgNjkuOCA3MS43QzcxLjEgNjcuMSA3NS4zIDY0IDgwIDY0czguOSAzLjEgMTAuMiA3LjdMMTA0IDEyMHpNNTg0IDQwOGw0OC4zIDEzLjhjNC42IDEuMyA3LjcgNS41IDcuNyAxMC4ycy0zLjEgOC45LTcuNyAxMC4yTDU4NCA0NTYgNTcwLjIgNTA0LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2IDQ4Ny43IDQ0Mi4yYy00LjYtMS4zLTcuNy01LjUtNy43LTEwLjJzMy4xLTguOSA3LjctMTAuMkw1MzYgNDA4IDU0OS44IDM1OS43YzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6Il0KICAgIH07CiAgICBmYUFycm93c1RvRG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10by1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiZSIsICJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45UzE3OS4xIDY0IDE5MiA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2OS40IDM5My40bDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDY0IDY0YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDQ0OCAzMjAgNDQ4bC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOXpNMzIgMjI0bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQgMzMyLjkgNjQgMzIwbDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNDQ4IDE3OS4xIDQ0OCAxOTJsMCAzMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTY0LTY0ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRmFjZVNhZENyeTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtY3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU3LCAic2FkLWNyeSJdLCAiZjViMyIsICJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42TDE2MCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzEuN0M0NC40IDQyMS42IDAgMzQ0IDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDg4LTQ0LjQgMTY1LjYtMTEyIDIxMS43TDQwMCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOTcuNHpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhU2FkQ3J5MiA9IGZhRmFjZVNhZENyeTI7CiAgICBmYURvbmdTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvbmctc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTY5IiwgIk0yODgtMTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA3Mi4yYy0yMi45LTE1LjMtNTAuNC0yNC4yLTgwLTI0LjItNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRTOTYuNSA0MzIgMTc2IDQzMmMzMCAwIDU3LjgtOS4xIDgwLjgtMjQuOCAzLjMgMTQuMiAxNiAyNC44IDMxLjIgMjQuOCAxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMwNCA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTk2IDI4OGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTI0IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCA0NjR6Il0KICAgIH07CiAgICBmYVBlb3BsZUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzNCIsICJNMjg4IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTk2IDMxMmMwIDI1LTEyLjcgNDctMzIgNTkuOWwwIDQ0LjEtMTI4IDAgMC00NC4xQzIwNC43IDM1OSAxOTIgMzM3IDE5MiAzMTJsMC00MGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNDB6bTE2IDEwNGwwLTI3LjNjMTkuOS0yMi41IDMyLTUyLjIgMzItODQuN2wwLTMyYzAtMjYuNy03LjMtNTEuNi0xOS45LTczLjEgMTEuMS00LjUgMjMuMi02LjkgMzUuOS02LjkgNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDQwLjYtMTEyIDB6TTY0IDM3NS40QzQ0LjkgMzY0LjQgMzIgMzQzLjcgMzIgMzIwbDAtMzJjMC01MyA0My05NiA5Ni05NiAxMi43IDAgMjQuOCAyLjUgMzUuOSA2LjktMTIuNiAyMS40LTE5LjkgNDYuNC0xOS45IDczLjFsMCAzMmMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCAyNy4zLTExMiAwIDAtNDAuNnpNMTI4IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0zMjAgMGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMjQgNDY0bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3F1YXJlUnNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1yc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicnNzLXNxdWFyZSJdLCAiZjE0MyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTYgMTM2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDEzNyAwIDI0OCAxMTEgMjQ4IDI0OCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTExMC41LTg5LjUtMjAwLTIwMC0yMDAtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjQgODMuOSAwIDE1MiA2OC4xIDE1MiAxNTIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDQtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgMTIwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVJzc1NxdWFyZSA9IGZhU3F1YXJlUnNzOwogICAgZmFDYWxlbmRhck1pbnVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcyIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTI0IDI2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0RGlhZ3JhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1kaWFncmFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OTUiLCAiTTgwIDMyQzUzLjUgMzIgMzIgNTMuNSAzMiA4MHMyMS41IDQ4IDQ4IDQ4bDE1MiAwIDAgNDAtNDggNDgtNzIgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA2NC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw3MiAwIDQ4IDQ4IDAgNDAtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNDAgNDgtNDggNzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDY0LTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTY0YzAtMzkuOC0zMi4yLTcyLTcyLTcybC03MiAwLTQ4LTQ4IDAtNDAgMTUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMODAgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VUaXJlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS10aXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NSwgInRpcmVkIl0sICJmNWM4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY0LjcgMzI4LjdjMjItMjIgNTMuOS00MC43IDkxLjMtNDAuN3M2OS4zIDE4LjcgOTEuMyA0MC43YzExLjEgMTEuMSAyMC4xIDIzLjQgMjYuNCAzNS40IDYuMiAxMS43IDEwLjMgMjQuNCAxMC4zIDM1LjkgMCA1LjItMi42IDEwLjItNi45IDEzLjJzLTkuOCAzLjctMTQuNyAxLjhsLTIwLjUtNy43Yy0yNi45LTEwLjEtNTUuNS0xNS4zLTg0LjMtMTUuM2wtMy4yIDBjLTI4LjggMC01Ny4zIDUuMi04NC4zIDE1LjNMMTQ5LjYgNDE1Yy00LjkgMS44LTEwLjQgMS4yLTE0LjctMS44UzEyOCA0MDUuMiAxMjggNDAwYzAtMTEuNiA0LjItMjQuMiAxMC4zLTM1LjkgNi4zLTEyIDE1LjMtMjQuMyAyNi40LTM1LjR6TTEyMi42IDE1OS4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYVRpcmVkMiA9IGZhRmFjZVRpcmVkMjsKICAgIGZhSGFuZFBvaW50UmlnaHQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNCIsICJNNDgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMDggMCAwLTY0IDIwOCAwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bTY0LTY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTI4OCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMHptLTg4LTk2bC42IDBjLTUuNCA5LjQtOC42IDIwLjMtOC42IDMyIDAgMTMuMiA0IDI1LjQgMTAuOCAzNS42LTI0LjkgOC43LTQyLjggMzIuNS00Mi44IDYwLjQgMCAxMS43IDMuMSAyMi42IDguNiAzMmwtOC42IDBDNzEuNiA0NDggMCAzNzYuNCAwIDI4OGwwLTYxLjdjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xbDExLjYtMTEuNkM4Mi41IDc3LjUgMTE1LjEgNjQgMTQ5IDY0bDI3IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4OGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MGwwLTU2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNTZjMCAzOS44IDMyLjIgNzIgNzIgNzJ6Il0KICAgIH07CiAgICBmYUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4NTkzXSwgImYwNjIiLCAiTTIxNC42IDE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMTcuMyAxNjAgNDg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNzAuNyAxMDUuNCAxMDUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYweiJdCiAgICB9OwogICAgZmFDdWJlc1N0YWNrZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZXMtc3RhY2tlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU2IiwgIk0xOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0em0zMiAzNTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyMCAxOTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tMTgyLjYtMy45YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQ1LjMgNDUuM2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNDUuMyA0NS4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw5Mi4xIDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w0NS4zLTQ1LjN6TTMyIDM4NGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUNoaWxkQ29tYmF0YW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkLWNvbWJhdGFudCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJjaGlsZC1yaWZsZSJdLCAiZTRlMCIsICJNMTc2LjUgMTI4YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0tMTYgMzUybDAtOTYgMzIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTIuMiAyMC45IDMzLjJjOS40IDE1IDI5LjIgMTkuNCA0NC4xIDEwczE5LjQtMjkuMiAxMC00NC4xbC0zOS45LTYzLjNDMjY2LjggMTg0IDIyMy4zIDE2MCAxNzYuNSAxNjBTODYuMiAxODQgNjEuMyAyMjMuNkwyMS40IDI4N2MtOS40IDE1LTQuOSAzNC43IDEwIDQ0LjFzMzQuNyA0LjkgNDQuMS0xMGwyMC45LTMzLjIgMCAxOTIuMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek00NDguNSAwbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45bC0yMy05Mi4xIDQ0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtMjYuNyA1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJsMC04NC41YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNTYtMTYgNS4zIDAtMTA5LjNjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdsMC0xMTYuM2MwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNoaWxkUmlmbGUgPSBmYUNoaWxkQ29tYmF0YW50OwogICAgZmFWZXN0UGF0Y2hlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZXN0LXBhdGNoZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NiIsICJNMjAwIDI5My45TDIwMCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42TDY0IDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwbDMuNSAwYy4zIDAgLjYgMCAxIDAgLjYgMCAxLjIgMCAxLjggMCAxOC44IDAgMzQuMSA5LjcgNDQuMSAxOC44IDkuMyA4LjQgMjguNSAyMS4yIDYxLjcgMjEuMnM1Mi40LTEyLjggNjEuNy0yMS4yYzEwLTkuMSAyNS4zLTE4LjggNDQuMS0xOC44IC42IDAgMS4yIDAgMS44IDAgLjMgMCAuNiAwIDEgMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk3LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZsNDcuOSA3MS44YzUuMyA3LjkgOC4xIDE3LjEgOC4xIDI2LjZMNDQ4IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTcwLjFjMC0zLjkgLjUtNy44IDEuNC0xMS42TDMwMy42IDY1LjRDMjg1LjkgNzcuMiAyNTkuOCA4OCAyMjQgODhzLTYxLjktMTAuOC03OS42LTIyLjZsNTQuMiAyMTYuOGMxIDMuOCAxLjQgNy43IDEuNCAxMS42ek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNSAxMTEuNSAzMjAuNWM0LjcgNC43IDEyLjMgNC43IDE3IDBzNC43LTEyLjMgMC0xN0wxMTMgMjg4IDEyOC41IDI3Mi41YzQuNy00LjcgNC43LTEyLjMgMC0xN3MtMTIuMy00LjctMTcgMEw5NiAyNzEgODAuNSAyNTUuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwek0zMDQgMjgwbDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMCAwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYU1hcnRpbmlHbGFzc0VtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnRpbmktZ2xhc3MtZW1wdHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xhc3MtbWFydGluaSJdLCAiZjAwMCIsICJNMzIgMzJDMTkuMSAzMiA3LjQgMzkuOCAyLjQgNTEuOFMuMiA3Ny41IDkuNCA4Ni42bDIxNC42IDIxNC42IDAgMTQ2LjctNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTE0Ni43IDIxNC42LTIxNC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDMyIDQ4MCAzMkwzMiAzMnpNMjU2IDI0Mi43TDEwOS4zIDk2IDQwMi43IDk2IDI1NiAyNDIuN3oiXQogICAgfTsKICAgIGZhR2xhc3NNYXJ0aW5pID0gZmFNYXJ0aW5pR2xhc3NFbXB0eTsKICAgIGZhTWFnbmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25ldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTUyMl0sICJmMDc2IiwgIk0wIDE3NkwwIDI4OEMwIDQxMS43IDEwMC4zIDUxMiAyMjQgNTEyUzQ0OCA0MTEuNyA0NDggMjg4bDAtMTEyLTEyOCAwIDAgMTEyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTEyLTEyOCAwem0wLTQ4bDEyOCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDY0em0zMjAgMGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0eiJdCiAgICB9OwogICAgZmFSb2FkQmFycmllciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWJhcnJpZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDI2Ni4zIDE0OS4yIDk2IDY0IDk2IDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek00MDUuMiA5NmwtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjMgNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjN6TTM2Mi44IDI4OGw3NC4zIDAgNS40LTEwLjcgOTAuNi0xODEuMy03NC4zIDAtNS40IDEwLjctOTAuNiAxODEuM3pNMjAyLjggOTZsLTUuNCAxMC43LTkwLjYgMTgxLjMgNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwem0yODggMTkybDg1LjIgMCAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNy04NS4yIDE3MC4zeiJdCiAgICB9OwogICAgZmFDb21wYXNzRHJhZnRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcy1kcmFmdGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkcmFmdGluZy1jb21wYXNzIl0sICJmNTY4IiwgIk05OS4zIDI1Ni4xbDY5LjQtMTE5LjljLTUuNi0xMi4yLTguOC0yNS44LTguOC00MC4yIDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNC4zLTMuMSAyNy45LTguOCA0MC4ybDQ0LjQgNzYuN2MtMjMuMSAyNi01My43IDQ1LjEtODguNCA1My44TDI1NiAxOTEuOSAxODcuOSAzMDkuNWMyMS41IDYuOCA0NC4zIDEwLjUgNjguMSAxMC41IDcwLjcgMCAxMzMuOC0zMi43IDE3NC45LTg0IDExLjEtMTMuOCAzMS4yLTE2IDQ1LTVzMTYgMzEuMiA1IDQ1Yy01Mi43IDY1LjgtMTMzLjkgMTA4LTIyNC44IDEwOC0zNS40IDAtNjkuNC02LjQtMTAwLjctMTguMUw5OC43IDQ2My43Qzk0IDQ3MS44IDg3IDQ3OC40IDc4LjYgNDgyLjZMMjMuMiA1MTAuM2MtNSAyLjUtMTAuOSAyLjItMTUuNi0uN1MwIDUwMS41IDAgNDk2bDAtNTUuNGMwLTguNCAyLjItMTYuNyA2LjUtMjQuMWw2MC0xMDMuN2MtMTIuOC0xMS4yLTI0LjYtMjMuNS0zNS4zLTM2LjgtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjF6TTM4MS4xIDQwNy45YzMyLjUtMTMgNjIuNC0zMSA4OC45LTUyLjlsMzUuNiA2MS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFsMCA1NS40YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOWwtMzIuMy01NS44ek0yNTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRHJhZnRpbmdDb21wYXNzID0gZmFDb21wYXNzRHJhZnRpbmc7CiAgICBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wZXJzb24tY29uZmluZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU3NyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTYgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTgwIDEwNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTAyLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjktMTcuNSAwLTM0LjMtNi45LTQ2LjYtMTkuM2wtNTQuNy01NC43LTI4LjEgNTYuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWw0OC05NmM0LjYtOS4yIDEzLjMtMTUuNiAyMy41LTE3LjNzMjAuNSAxLjcgMjcuOCA5bDQxLjQgNDEuNCAwLTU4Ljd6Il0KICAgIH07CiAgICBmYVBsYXRlV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhdGUtd2hlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU1YSIsICJNMTc2IDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2LTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTZjMC04LjggNy4yLTE2IDE2LTE2ek01NiA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM0Mi43IDY0IDU2IDY0ek0yNCAxMzZsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgMTg0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0yNzIgNDhjMC04LjggNy4yLTE2IDE2LTE2IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2LTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTZ6TTQwMCAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTYwbDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zNTIgMTc2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA4LjggMCAxNiA3LjIgMTYgMTZ6TTMuNSAzNDcuNkMxLjYgMzMyLjkgMTMgMzIwIDI3LjggMzIwbDQ1Ni40IDBjMTQuOCAwIDI2LjIgMTIuOSAyNC40IDI3LjYtNi4zIDUwLjItNDQuNCA4OS40LTkyLjYgOTguNGwwIDJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTJjLTQ4LjItOS04Ni4zLTQ4LjItOTIuNS05OC40eiJdCiAgICB9OwogICAgZmFTaWduSGFuZ2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduLWhhbmdpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbiJdLCAiZjRkOSIsICJNOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNTIgMCAwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1Mi0zMiAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDMyIDAgMC0zMkM2NCAxNC4zIDc4LjMgMCA5NiAwek0yMDggMTc2bDI0MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNDAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNpZ24gPSBmYVNpZ25IYW5naW5nOwogICAgZmFDYXJCYXR0ZXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1iYXR0ZXJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhdHRlcnktY2FyIl0sICJmNWRmIiwgIk04MCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTYgMHpNMzkyIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJ6TTY0IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAyMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5Q2FyID0gZmFDYXJCYXR0ZXJ5OwogICAgZmFTaGlydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGlydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODA4NSwgInQtc2hpcnQiLCAidHNoaXJ0Il0sICJmNTUzIiwgIk0zMjAuMiAxMTJjNDQuMiAwIDgwLTM1LjggODAtODBsNTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYxNy42IDE2OS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC01MC43IDUwLjdjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQgMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNC00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDIyLjkgMjE0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDE0MS41IDUwLjdjMTItMTIgMjguMy0xOC43IDQ1LjMtMTguN2w1My41IDBjMCA0NC4yIDM1LjggODAgODAgODB6Il0KICAgIH07CiAgICBmYVRTaGlydCA9IGZhU2hpcnQ7CiAgICBmYVRzaGlydCA9IGZhU2hpcnQ7CiAgICBmYVBhcmFncmFwaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXJhZ3JhcGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxODJdLCAiZjFkZCIsICJNMTYwIDBMNDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00MTYtNDggMCAwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MC00OCAwQzcxLjYgMzIwIDAgMjQ4LjQgMCAxNjBTNzEuNiAwIDE2MCAweiJdCiAgICB9OwogICAgZmFFbnZlbG9wZXNCdWxrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3Blcy1idWxrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1haWwtYnVsayJdLCAiZjY3NCIsICJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCAxNjAgODAgMCAwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMjA4IDAgMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OEwxMTIgMHpNMjQwIDEyOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMiA4MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAxMTIgMTYwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xOTJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTI4OCAwem0yMDAgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00OCAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTAuNCAxNTYuNiA4Ni4yYzEuMSAuNiAyLjIgLjkgMy40IC45czIuNC0uMyAzLjQtLjlMMzIwIDMxNC40IDMyMCAzMDRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMjU2ek0zMjAgMzY5LjJMMTg2LjYgNDQyLjZjLTguMSA0LjUtMTcuMyA2LjgtMjYuNiA2LjhzLTE4LjQtMi40LTI2LjYtNi44TDAgMzY5LjIgMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NC44eiJdCiAgICB9OwogICAgZmFNYWlsQnVsayA9IGZhRW52ZWxvcGVzQnVsazsKICAgIGZhR3VpdGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImd1aXRhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2E2IiwgIk00NjUgN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMzgzIDU1Yy0yLjQgMi40LTQuMyA1LjMtNS41IDguNWwtMTUuNCA0MS03Ny41IDc3LjZjLTQ1LjEtMjkuNC05OS4zLTMwLjItMTMxIDEuNi0xMSAxMS0xOCAyNC42LTIxLjQgMzkuNi0zLjcgMTYuNi0xOS4xIDMwLjctMzYuMSAzMS42LTI1LjYgMS4zLTQ5LjMgMTAuNy02Ny4zIDI4LjYtNDQuOCA0NC44LTM2LjQgMTI1LjggMTguNyAxODAuOVMxODMuNiA1MjggMjI4LjQgNDgzLjJjMTcuOS0xNy45IDI3LjQtNDEuNyAyOC42LTY3LjMgLjktMTcgMTUtMzIuMyAzMS42LTM2LjEgMTUtMy40IDI4LjYtMTAuNSAzOS42LTIxLjQgMzEuOC0zMS44IDMxLTg1LjkgMS42LTEzMWw3Ny42LTc3LjYgNDEtMTUuNGMzLjItMS4yIDYuMS0zLjEgOC41LTUuNWw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NjUgN3pNMjA4IDI1NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYVN1aXRjYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIzXSwgImYwZjIiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MjQgMjI0IDAgMC00MjRjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjAwIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek00MTYgOTZsMCAzODQgMzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMzIgMHpNOTYgNDgwbDAtMzg0LTMyIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVVwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NywgImFycm93LWFsdC1jaXJjbGUtdXAiXSwgImYzNWIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zbDEwNCAxMDRjNC42IDQuNiA1LjkgMTEuNSAzLjUgMTcuNFMzNjYuNSAyNTYgMzYwIDI1NmwtNTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTU2IDBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45cy0xLjEtMTIuOSAzLjUtMTcuNGwxMDQtMTA0YzYuMi02LjIgMTYuNC02LjIgMjIuNiAweiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVVwMiA9IGZhQ2lyY2xlVXAyOwogICAgZmFGID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImYiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDJdLCAiNDYiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0xMjggMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYVhtYXJrc0xpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInhtYXJrcy1saW5lcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTlhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnpNNyAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTI2NSAxNjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1ek00NTUgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAweiJdCiAgICB9OwogICAgZmFFYXJ0aE9jZWFuaWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtb2NlYW5pYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJnbG9iZS1vY2VhbmlhIl0sICJlNDdiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDE1MC42YzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQxLjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNnpNNDMyIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDExLjMgMzc5LjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpNMjI0IDQzMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0tOTYtODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTguN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0OC00OGM0LjItNC4yIDEwLTYuNiAxNi02LjZsNi42IDBjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTYgNy4yLTE2IDE2LTE2bDYuNiAwYzYgMCAxMS44IDIuNCAxNiA2LjZsNDggNDhjNiA2IDkuNCAxNC4xIDkuNCAyMi42bDAgNTAuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtNTAuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTMuMy0xMy4zYy02LTYtMTQuMS05LjQtMjIuNi05LjRMMTI4IDM1MnoiXQogICAgfTsKICAgIGZhR2xvYmVPY2VhbmlhID0gZmFFYXJ0aE9jZWFuaWE7CiAgICBmYUNvbW1lbnRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0YjMiLCAiTTQxLTI1QzMxLjYtMzQuMyAxNi40LTM0LjMgNy0yNVMtMi4zLS40IDcgOUw1MzUgNTM3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNi05Ni42YzQ0LjQtNDMuMiA3MS42LTEwMS44IDcxLjYtMTY2LjUgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MC02MyAwLTEyMC44IDIxLjQtMTY1LjQgNTYuOEw0MS0yNXptMTkuNCAxNTVDNDIuMiAxNjMgMzIgMjAwLjMgMzIgMjM5LjkgMzIgMjk0LjIgNTEuMiAzNDQuMiA4My42IDM4NC40TDM0LjggNDc2LjdjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNVM1Ni4xIDUxNCA2NS41IDUxMGwxMTguNC01MC43YzMxLjggMTMuMyA2Ny4xIDIwLjcgMTA0LjEgMjAuNyAzNi40IDAgNzAuOS03LjEgMTAyLjMtMTkuOUw2MC4zIDEzMC4xeiJdCiAgICB9OwogICAgZmFQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjU0XSwgImYwNGIiLCAiTTkxLjIgMzYuOWMtMTIuNC02LjgtMjcuNC02LjUtMzkuNiAuN1MzMiA1Ny45IDMyIDcybDAgMzY4YzAgMTQuMSA3LjUgMjcuMiAxOS42IDM0LjRzMjcuMiA3LjUgMzkuNiAuN2wzMzYtMTg0YzEyLjgtNyAyMC44LTIwLjUgMjAuOC0zNS4xcy04LTI4LjEtMjAuOC0zNS4xbC0zMzYtMTg0eiJdCiAgICB9OwogICAgZmFWaWFsQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU5NiIsICJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MS40Yy02Ni4xIDMwLjMtMTEyIDk3LjEtMTEyIDE3NC42IDAgMzkuNyAxMiA3Ni42IDMyLjcgMTA3LjItMTAuMyAzLjEtMjEuMyA0LjgtMzIuNyA0LjgtNjEuOSAwLTExMi01MC4xLTExMi0xMTJMNjQgNjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyem05NiAzMmwwIDEyOCA5NiAwIDAtMTI4LTk2IDB6bTk2IDMzNmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhQnJpZGdlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGM5IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUNlZGlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNlZGktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMGRmIiwgIk0yMzIgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNi41Qzg4LjggNzMuOSAxNiAxNTYuNCAxNiAyNTZTODguOCA0MzguMSAxODQgNDUzLjVsMCAyNi41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNC42YzQ2LjgtMy43IDg5LjEtMjMuNiAxMjEuMy01My45IDEyLjktMTIuMSAxMy40LTMyLjQgMS4zLTQ1LjJzLTMyLjQtMTMuNC00NS4yLTEuM2MtMjAuNyAxOS42LTQ3LjYgMzIuNy03Ny4zIDM2LjJsMC0yNzAuMWMyOS44IDMuNSA1Ni42IDE2LjYgNzcuMyAzNi4yIDEyLjkgMTIuMSAzMy4xIDExLjUgNDUuMi0xLjNzMTEuNS0zMy4xLTEuMy00NS4yQzMyMS4xIDgwLjIgMjc4LjggNjAuMyAyMzIgNTYuNkwyMzIgMzJ6bS00OCA5MS44bDAgMjY0LjRDMTI0LjMgMzczLjggODAgMzIwLjEgODAgMjU2czQ0LjMtMTE3LjggMTA0LTEzMi4yeiJdCiAgICB9OwogICAgZmFQdXp6bGVQaWVjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdXp6bGUtcGllY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTNdLCAiZjEyZSIsICJNMjI0IDBjMzUuMyAwIDY0IDIxLjUgNjQgNDggMCAxMC40LTQuNCAyMC0xMiAyNy45LTYuNiA2LjktMTIgMTUuMy0xMiAyNC45IDAgMTUgMTIuMiAyNy4yIDI3LjIgMjcuMmw0NC44IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0NC44YzAgMTUgMTIuMiAyNy4yIDI3LjIgMjcuMiA5LjUgMCAxOC01LjQgMjQuOS0xMiA3LjktNy41IDE3LjUtMTIgMjcuOS0xMiAyNi41IDAgNDggMjguNyA0OCA2NHMtMjEuNSA2NC00OCA2NGMtMTAuNCAwLTIwLjEtNC40LTI3LjktMTItNi45LTYuNi0xNS4zLTEyLTI0LjktMTItMTUgMC0yNy4yIDEyLjItMjcuMiAyNy4yTDM4NCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTU2LjggMGMtMTIuOCAwLTIzLjItMTAuNC0yMy4yLTIzLjIgMC05LjIgNS44LTE3LjMgMTMuMi0yMi44IDExLjYtOC43IDE4LjgtMjAuNyAxOC44LTM0IDAtMjYuNS0yOC43LTQ4LTY0LTQ4cy02NCAyMS41LTY0IDQ4YzAgMTMuMyA3LjIgMjUuMyAxOC44IDM0IDcuNCA1LjUgMTMuMiAxMy41IDEzLjIgMjIuOCAwIDEyLjgtMTAuNCAyMy4yLTIzLjIgMjMuMkw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzQzLjJjMC0xMi44IDEwLjQtMjMuMiAyMy4yLTIzLjIgOS4yIDAgMTcuMyA1LjggMjIuOCAxMy4yIDguNyAxMS42IDIwLjcgMTguOCAzNCAxOC44IDI2LjUgMCA0OC0yOC43IDQ4LTY0cy0yMS41LTY0LTQ4LTY0Yy0xMy4zIDAtMjUuMyA3LjItMzQgMTguOC01LjUgNy40LTEzLjUgMTMuMi0yMi44IDEzLjItMTIuOCAwLTIzLjItMTAuNC0yMy4yLTIzLjJMMCAxNzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTA4LjggMGMxNSAwIDI3LjItMTIuMiAyNy4yLTI3LjIgMC05LjUtNS40LTE4LTEyLTI0LjktNy41LTcuOS0xMi0xNy41LTEyLTI3LjkgMC0yNi41IDI4LjctNDggNjQtNDh6Il0KICAgIH07CiAgICBmYUhlbG1ldFVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbG1ldC11biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTAzIiwgIk00NzkuNSAyMjRDNDcxLjIgOTguOSAzNjcuMiAwIDI0MCAwIDEwNy41IDAgMCAxMDcuNSAwIDI0MGwwIDU2LjNDMCAzNDQuOCAzOS4yIDM4NCA4Ny43IDM4NGwxMjcuMyAwIDEyOC42IDEyMS40YzQuNSA0LjIgMTAuNCA2LjYgMTYuNSA2LjZsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODYuNSAwLTEuNS0xLjUgMC0xNzQuNSAxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtLjUgMHpNMzIwIDQxNy4ybC03OC03My43IDMyLjQtNTUuNSA0NS42IDAgMCAxMjkuMnpNMjg1LjMgMTAzLjFsMzQuNyA1MiAwLTQzLjJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDk2YzAgNy4xLTQuNiAxMy4zLTExLjQgMTUuM3MtMTQtLjYtMTcuOS02LjRsLTM0LjctNTIgMCA0My4yYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40ek0xNjAgMTEybDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6Il0KICAgIH07CiAgICBmYUdsYXNzV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3Mtd2F0ZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTRmNCIsICJNMzIgMEMyMy4xIDAgMTQuNiAzLjcgOC42IDEwLjJTLS42IDI1LjQgLjEgMzQuM0wyOC45IDQzNy43YzMgNDEuOSAzNy44IDc0LjMgNzkuOCA3NC4zbDE2Ni42IDBjNDIgMCA3Ni44LTMyLjQgNzkuOC03NC4zTDM4My45IDM0LjNjLjYtOC45LTIuNC0xNy42LTguNS0yNC4xUzM2MC45IDAgMzUyIDBMMzIgMHpNNzMgMTU2LjVsLTYuNi05Mi41IDI1MS4zIDAtNi42IDkyLjUtMjQuMiAxMi4xYy0xOS40IDkuNy00Mi4yIDkuNy02MS42IDAtMjAuOS0xMC40LTQ1LjUtMTAuNC02Ni40IDAtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwTDczIDE1Ni41eiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLWJvbHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmYyIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNzcuNC03N2MtNS44LTQuMi0xMy44LTQtMTkuNCAuNWwtODAgNjRjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhTMzY5LjIgNDE2IDM3NiA0MTZsMzIuOSAwLTE1LjkgNDIuNGMtMi41IDYuNy0uMiAxNC4zIDUuNiAxOC42czEzLjggNCAxOS40LS41bDgwLTY0YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhTNDk0LjggMzg0IDQ4OCAzODRsLTMyLjkgMCAxNS45LTQyLjRjMi41LTYuNyAuMi0xNC4zLTUuNi0xOC42eiJdCiAgICB9OwogICAgZmFQdW1wU29hcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdW1wLXNvYXAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTA2YiIsICJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4ek0yMjQgMzQ0YzAgMzUuMy0yOC43IDU2LTY0IDU2cy02NC0yMC43LTY0LTU2YzAtMzIuNSAzNy04MC45IDUwLjktOTcuOSAzLjItMy45IDguMS02LjEgMTMuMS02LjFzOS45IDIuMiAxMy4xIDYuMUMxODcgMjYzLjEgMjI0IDMxMS41IDIyNCAzNDR6Il0KICAgIH07CiAgICBmYUhhbmRTY2lzc29yczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU3IiwgIk00MCAyMDhjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTgwLjIgMGMtNy42IDguNS0xMi4yIDE5LjctMTIuMiAzMiAwIDI1LjMgMTkuNSA0NiA0NC4zIDQ3LjktNy43IDguNS0xMi4zIDE5LjgtMTIuMyAzMi4xIDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xMTMuMWMwLTQwLjItMTYtNzguOC00NC40LTEwNy4zLTIyLjgtMjIuOC01My42LTM1LjYtODUuOC0zNS42TDMzNiA2NGMtMjEuMyAwLTM5LjMgMTMuOS00NS42IDMzLjFsNzQuNSAyMy43YzguNCAyLjcgMTMuMSAxMS43IDEwLjQgMjAuMXMtMTEuNyAxMy4xLTIwLjEgMTAuNGwtNjcuMS0yMS40IDAgLjEtMjA0LTY0LjFDNjIuOSA1OS4yIDQwLjUgNzAuOSAzMy45IDkyczUuMSA0My41IDI2LjIgNTAuMkwyNjkuNSAyMDggNDAgMjA4eiJdCiAgICB9OwogICAgZmFEb2xseSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2xseSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkb2xseS1ib3giXSwgImY0NzIiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsNzIuOSAwIDkyLjEgMjc2LjJjLTIyLjUgMTcuNi0zNyA0NS0zNyA3NS44IDAgNTMgNDMgOTYgOTYgOTYgNTIuNCAwIDk1LjEtNDIgOTYtOTQuM2wyMDIuMS02Ny40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJMMzMxLjggMzU3Yy0xNy4yLTIyLjEtNDMuOS0zNi41LTc0LTM3TDE2NS43IDQzLjhDMTU2LjkgMTcuNiAxMzIuNSAwIDEwNC45IDBMMzIgMHpNMjA4IDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0yODAuNSA4OS4zYy0yNS4yIDguMi0zOSAzNS4zLTMwLjggNjAuNWwzOS42IDEyMS43YzguMiAyNS4yIDM1LjMgMzkgNjAuNSAzMC44bDEyMS43LTM5LjZjMjUuMi04LjIgMzktMzUuMyAzMC44LTYwLjVMNDYyLjggODAuNWMtOC4yLTI1LjItMzUuMy0zOS02MC41LTMwLjhMMjgwLjUgODkuM3oiXQogICAgfTsKICAgIGZhRG9sbHlCb3ggPSBmYURvbGx5OwogICAgZmFQYXBlcmNsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFwZXJjbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjA2XSwgImYwYzYiLCAiTTIyNC42IDEyLjhjNTYuMi01Ni4yIDE0Ny40LTU2LjIgMjAzLjYgMHM1Ni4yIDE0Ny40IDAgMjAzLjZsLTE2NCAxNjRjLTM0LjQgMzQuNC05MC4xIDM0LjQtMTI0LjUgMHMtMzQuNC05MC4xIDAtMTI0LjVMMjkyLjUgMTAzLjNjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxODUgMzAxLjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxNjQtMTY0YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTE2NCAxNjRjLTUzLjEgNTMuMS01My4xIDEzOS4yIDAgMTkyLjNzMTM5LjIgNTMuMSAxOTIuMyAwTDQyOC4zIDI4NC4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMzQzLjQgNDU5LjZjLTc4LjEgNzguMS0yMDQuNyA3OC4xLTI4Mi44IDBzLTc4LjEtMjA0LjcgMC0yODIuOGwxNjQtMTY0eiJdCiAgICB9OwogICAgZmFEZW1vY3JhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZW1vY3JhdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzQ3IiwgIk02NCAzMmMwLTguOSAzLjgtMjAuOSA2LjItMjcuMyAxLTIuOCAzLjgtNC43IDYuOC00LjcgMS45IDAgMy44IC43IDUuMiAyLjFMMTI4IDQ1LjcgMTczLjggMi4xYzEuNC0xLjMgMy4yLTIuMSA1LjItMi4xIDMgMCA1LjggMS44IDYuOCA0LjcgMi40IDYuNSA2LjIgMTguNCA2LjIgMjcuMyAwIDI2LjUtMjEuOSA0Mi0yOS41IDQ2LjZsNzYuMiA3Mi42YzYgNS43IDEzLjkgOC44IDIyLjEgOC44bDIxOS4yIDAgMzIgMGM0MC4zIDAgNzguMiAxOSAxMDIuNCA1MS4ybDE5LjIgMjUuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40bC0xOS4yLTI1LjZjLTUuMy03LTExLjgtMTIuOC0xOS4yLTE3bDAgODcuNC0zNTIgMC00MC40LTk0LjNjLTMuOS05LjItMTUuMy0xMi42LTIzLjYtN2wtNDIuMSAyOGMtOS4xIDYuMS0xOS43IDkuMy0zMC43IDkuM2wtMiAwQzIzLjkgMjU2IDAgMjMyLjEgMCAyMDIuNyAwIDE5MC42IDQuMSAxNzguOSAxMS43IDE2OS40TDg3LjYgNzQuNkM3OC4xIDY3LjQgNjQgNTMuMiA2NCAzMnpNNTQ0IDM1MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xNjAgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOCAzNTIgMHpNMjU2IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0OC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0zNjggMjgwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQXJyb3dVcFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1hcnJvdy11cC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJleHRlcm5hbC1saW5rLXNxdWFyZSJdLCAiZjE0YyIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMjcyIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NC4xIDAtMTAzIDEwM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEwMy0xMDMgMCA1NC4xeiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtTcXVhcmUgPSBmYVNxdWFyZUFycm93VXBSaWdodDsKICAgIGZhRmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVycnkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRlYSIsICJNMjI0IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOC0uMSAwYy4xIC43IC4xIDEuMyAuMSAyIDAgMzAuMi03LjYgNTkuOC0yMiA4Ni4zbC0xMi43IDIzLjMtLjYgMWMtMjIuMy0xMS4zLTQ2LjUtMTYuOC03MC44LTE2LjctMzIuNSAuMi02NC45IDEwLjctOTIuNCAzMS40LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTIzLjYgLjItNDcuMSA1LjctNjguNyAxNi43bC0uNi0xLTEyLjctMjMuM2MtMTQuNC0yNi41LTIyLTU2LjItMjItODYuMyAwLS43IDAtMS40IC4xLTJsLS4xIDAgMC0xMjhjMC00NC4yIDM1LjgtODAgODAtODBsNDggMCAwLTMyek0xNjAgMjU2bDMyMCAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNmwtMjg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMnpNNDAzLjQgNDc2LjFDMzc5LjEgNDk0LjMgMzUxLjEgNTEyIDMyMCA1MTJzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNb3NxdWl0byA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3NxdWl0byIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTJiIiwgIk0xNzguNSA0OTUuMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zUzEzMy41IDQ4MCAxMzguOSA0NjlsMS4yLTIuMiAzNi4yLTU4IDAtNDEgLjMtNGMuNi0zLjkgMi4yLTcuNyA0LjYtMTAuOWwzOS4zLTUyLjItNjYuMiA1OS41Yy0xNyAxNS4zLTM5IDIzLjctNjEuOSAyMy44bC04LjEgMGMtNDYuNiAwLTg0LjQtMzcuOC04NC40LTg0LjQgMC00MyAzMi40LTc5LjIgNzUuMS04My45bDEzMC41LTE0LjUtNDQuOC0zOC4zLTIuNC0yLjRjLTUuMy02LTcuMy0xNC40LTUuMy0yMi4zbDEzLjMtNTMuNC0yNS45LTM4LjktMS4zLTIuMWMtNS44LTEwLjgtMi43LTI0LjYgNy40LTMxLjcgMTAuMS03LjEgMjMuNy01LjEgMzEuNCA0LjNsMS41IDIgMzIgNDggMS40IDIuMmMyLjggNS4zIDMuNSAxMS42IDIuMSAxNy42bC0xMi4zIDQ5LjIgNTMuMyA0NS43IDAtMjguOGMwLTExLjggNi41LTIyLjEgMTYtMjcuN2wwLTYwLjUgLjMtMy4zYzEuNS03LjMgOC0xMi43IDE1LjctMTIuN3MxNC4yIDUuNSAxNS43IDEyLjdsLjMgMy4yIDAgNjAuNWM5LjYgNS41IDE2IDE1LjggMTYgMjcuN2wwIDI4LjkgNTMuNC00NS44LTEyLjMtNDkuMmMtMS41LTUuOS0uNy0xMi4yIDIuMS0xNy42bDEuNC0yLjIgMzItNDggMS41LTJjNy43LTkuNCAyMS4zLTExLjUgMzEuNC00LjMgMTAuMSA3LjEgMTMuMSAyMC45IDcuNCAzMS43bC0xLjMgMi4xLTI1LjkgMzguOSAxMy4zIDUzLjRjMiA4LS4xIDE2LjMtNS4zIDIyLjNsLTIuNCAyLjQtNDQuNyAzOC4zIDEzMC41IDE0LjVjNDIuOCA0LjggNzUuMSA0MC45IDc1LjEgODMuOSAwIDQ2LjYtMzcuOCA4NC40LTg0LjQgODQuNGwtOC4xIDBjLTIyLjggMC00NC45LTguNS02MS45LTIzLjhsLTY2LjEtNTkuNSAzOS4yIDUyLjJjMi40IDMuMiA0IDcgNC42IDEwLjlsLjMgNCAwIDQxIDM2LjIgNTggMS4yIDIuMWM1LjQgMTEgMiAyNC43LTguMyAzMS41cy0yMy44IDQuNC0zMS4zLTUuM2wtMS40LTItNDAtNjQtMS42LTMuMWMtMS40LTMuMS0yLjEtNi42LTIuMS0xMC4xbDAtMzkuOC0zMi40LTQzLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzQuNi0zMi4zIDQzIDAgMzkuOGMwIDMuNS0uNyA2LjktMi4xIDEwLjFsLTEuNiAzLjEtNDAgNjQtMS40IDJ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkMSIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE0NC43Yy0zNS43IDIuOS02OC41IDE1LjYtOTYgMzUuNGwwLTRjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNCAwYy0xMy44IDE5LjItMjQuMSA0MS0zMC4xIDY0LjUtMS45LS40LTMuOS0uNS01LjktLjVsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgNzQuOSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0MC43LTY3LjNjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDI4LjcgMjguNy04OS40IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODkuNCAwLTI4LjcgMjguN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDU2LTU2YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC01Ni01NmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6Il0KICAgIH07CiAgICBmYUxlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODU5NiwgImFycm93cy1hbHQtaCJdLCAiZjMzNyIsICJNNTAyLjYgNDA2LjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzNTIgNDkyLjkgMzUyIDQ4MGwwLTY0LTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyMCAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3pNOS40IDE1MC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMTkuMSAxNjAgMzJsMCA2NCAzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZ6Il0KICAgIH07CiAgICBmYUFycm93c0FsdEggPSBmYUxlZnRSaWdodDsKICAgIGZhVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3NCIsICJNMjk2IDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgNDQuMS01My4zIDY2LjEtODQuNSAzNS0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMHMtMTUuNiA0MC45IDAgNTYuNmMzMS4yIDMxLjIgOS4xIDg0LjUtMzUgODQuNS0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwYzQ0LjEgMCA2Ni4xIDUzLjMgMzUgODQuNS0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNnM0MC45IDE1LjYgNTYuNiAwYzMxLjItMzEuMiA4NC41LTkuMSA4NC41IDM1IDAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBjMC00NC4xIDUzLjMtNjYuMSA4NC41LTM1IDE1LjYgMTUuNiA0MC45IDE1LjYgNTYuNiAwczE1LjYtNDAuOSAwLTU2LjZjLTMxLjItMzEuMi05LjEtODQuNSAzNS04NC41IDIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwYy00NC4xIDAtNjYuMS01My4zLTM1LTg0LjUgMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZzLTQwLjktMTUuNi01Ni42IDBDMzQ5LjMgMTA2LjEgMjk2IDg0LjEgMjk2IDQwek0xNjAgMjI0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2MCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdlbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgImYzYTUiLCAiTTExNi43IDMzLjhjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOGwyNDAgMGM3LjYgMCAxNC44IDMuNiAxOS4zIDkuOGwxMTIgMTUyYzYuOCA5LjIgNi4xIDIxLjktMS41IDMwLjRsLTIzMiAyNTZjLTQuNSA1LTExIDcuOS0xNy44IDcuOXMtMTMuMi0yLjktMTcuOC03LjlsLTIzMi0yNTZjLTcuNy04LjUtOC4zLTIxLjItMS41LTMwLjRsMTEyLTE1MnptMzguNSAzOS44Yy0zLjMgMi41LTQuMiA3LTIuMSAxMC41TDIxMC41IDE3OS44IDYzLjMgMTkyYy00LjEgLjMtNy4zIDMuOC03LjMgOHMzLjIgNy42IDcuMyA4bDE5MiAxNmMuNCAwIC45IDAgMS4zIDBsMTkyLTE2YzQuMS0uMyA3LjMtMy44IDcuMy04cy0zLjItNy42LTcuMy04bC0xNDcuMi0xMi4zIDU3LjQtOTUuNmMyLjEtMy41IDEuMi04LjEtMi4xLTEwLjVzLTcuOS0yLTEwLjcgMUwyNTYgMTcyLjIgMTY1LjkgNzQuNmMtMi44LTMtNy40LTMuNC0xMC43LTF6Il0KICAgIH07CiAgICBmYVRvaWxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg3MDFdLCAiZjdkOCIsICJNMjQgMEMxMC43IDAgMCAxMC43IDAgMjRTMTAuNyA0OCAyNCA0OGw4IDAgMCAxNDguOWMtMS45IDEuNC0zLjggMi45LTUuNiA0LjQtMTUuNSAxMy4yLTI2LjQgMzEuNi0yNi40IDU0LjYgMCA0Ni45IDE0LjMgODQuMSAzNyAxMTIuNSAxNC4yIDE3LjcgMzEuMSAzMS4zIDQ4LjUgNDEuOEw2NS42IDQ2OS45Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44Uzg1LjcgNTEyIDk2IDUxMmwyNTYgMGMxMC4zIDAgMTkuOS00LjkgMjYtMTMuM3M3LjctMTkuMSA0LjQtMjguOGwtMTkuOC01OS41YzE3LjQtMTAuNSAzNC4zLTI0LjEgNDguNS00MS44IDIyLjctMjguNCAzNy02NS41IDM3LTExMi41IDAtMjMuMS0xMC45LTQxLjUtMjYuNC01NC42LTEuOC0xLjUtMy43LTMtNS42LTQuNGwwLTE0OC45IDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFM0MzcuMyAwIDQyNCAwTDI0IDB6TTk2IDgwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTIyNCAyODhjLTg4LjQgMC0xNjAtMTQuMy0xNjAtMzJzNzEuNi0zMiAxNjAtMzIgMTYwIDE0LjMgMTYwIDMyLTcxLjYgMzItMTYwIDMyeiJdCiAgICB9OwogICAgZmFTaW5nbGVRdW90ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luZ2xlLXF1b3RlLWxlZnQiLAogICAgICBpY29uOiBbMTkyLCA1MTIsIFtdLCAiZTgxYiIsICJNMTI4IDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjE2QzAgMTQ5LjcgNTMuNyA5NiAxMjAgOTZsOCAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGxzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxZjMiLCAiTTE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzUyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDMyem0xNzYgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTE2MCAxNTJsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxMTJjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek01MDQgMTU5LjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTUxMiAyNjRsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek00OCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMzguNyAwIDE1MkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzOTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI2NHoiXQogICAgfTsKICAgIGZhVGFibGV0QnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxldC1idXR0b24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjEwYSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjI0IDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE2NCwgInJlY3RhbmdsZS10aW1lcyIsICJ0aW1lcy1yZWN0YW5nbGUiLCAid2luZG93LWNsb3NlIl0sICJmNDEwIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhUmVjdGFuZ2xlVGltZXMyID0gZmFSZWN0YW5nbGVYbWFyazI7CiAgICBmYVRpbWVzUmVjdGFuZ2xlMiA9IGZhUmVjdGFuZ2xlWG1hcmsyOwogICAgZmFXaW5kb3dDbG9zZTIgPSBmYVJlY3RhbmdsZVhtYXJrMjsKICAgIGZhV3JlbmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndyZW5jaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI5NV0sICJmMGFkIiwgIk01MDkuNCA5OC42YzcuNi03LjYgMjAuMy01LjcgMjQuMSA0LjMgNi44IDE3LjcgMTAuNSAzNyAxMC41IDU3LjEgMCA4OC40LTcxLjYgMTYwLTE2MCAxNjAtMTcuNSAwLTM0LjQtMi44LTUwLjItOEwxNDYuOSA0OTguOWMtMjguMSAyOC4xLTczLjcgMjguMS0xMDEuOCAwcy0yOC4xLTczLjcgMC0xMDEuOEwyMzIgMjEwLjJjLTUuMi0xNS44LTgtMzIuNi04LTUwLjIgMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgMjAuMSAwIDM5LjQgMy43IDU3LjEgMTAuNSAxMCAzLjggMTEuOCAxNi41IDQuMyAyNC4xbC04OC43IDg4LjdjLTMgMy00LjcgNy4xLTQuNyAxMS4zbDAgNDEuNGMwIDguOCA3LjIgMTYgMTYgMTZsNDEuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsODguNy04OC43eiJdCiAgICB9OwogICAgZmFUcmFzaENhbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsICJ0cmFzaC1hbHQiXSwgImYyZWQiLCAiTTEzNi43IDUuOUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptODggNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhVHJhc2hBbHQyID0gZmFUcmFzaENhbjI7CiAgICBmYVRhYmxlQ2VsbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgiXSwgImYwMGEiLCAiTTM4NCA5NmwwIDY0LTY0IDAgMC02NCA2NCAwem0wIDEyOGwwIDY0LTY0IDAgMC02NCA2NCAwem0wIDEyOGwwIDY0LTY0IDAgMC02NCA2NCAwek0yNTYgMjg4bC02NCAwIDAtNjQgNjQgMCAwIDY0em0tNjQgNjRsNjQgMCAwIDY0LTY0IDAgMC02NHptLTY0LTY0bC02NCAwIDAtNjQgNjQgMCAwIDY0ek02NCAzNTJsNjQgMCAwIDY0LTY0IDAgMC02NHptMC0xOTJsMC02NCA2NCAwIDAgNjQtNjQgMHptMTI4IDBsMC02NCA2NCAwIDAgNjQtNjQgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhVGggPSBmYVRhYmxlQ2VsbHM7CiAgICBmYVJpYmJvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWJib24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4OTVdLCAiZjRkNiIsICJNMjM1LjEgMGMzMy40IDAgNjQuNSAxNy40IDgxLjkgNDUuOSAxLjIgMiAxMyAyMS4zIDM1LjMgNTcuOCAyMS4xIDM0LjUgMTguMyA3OC41LTcgMTEwTDI3OC4zIDI5Ny43IDM2NC41IDQwNmM1LjUgNi45IDQuNCAxNi45LTIuNSAyMi41bC04MCA2NGMtNi45IDUuNS0xNyA0LjQtMjIuNS0yLjVMMzguNiAyMTMuOEMxMy4zIDE4Mi4zIDEwLjUgMTM4LjMgMzEuNiAxMDMuOCA1NCA2Ny4yIDY1LjcgNDcuOSA2NyA0NS45IDg0LjQgMTcuNCAxMTUuNCAwIDE0OC45IDBsODYuMyAwek0xOTIgMTg5LjJsNDguNi02MS4yLTk3LjMgMCA0OC42IDYxLjJ6TTc1IDMzNi4ybDg2LjIgMTA3LjgtMzYuOCA0NmMtNS41IDYuOS0xNS42IDgtMjIuNSAyLjVsLTgwLTY0Yy02LjktNS41LTgtMTUuNi0yLjUtMjIuNUw3NSAzMzYuMnoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmRtYXJrLWZsYWciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUxYyIsICJNMzUyLTMyTDI0MC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTQ0LTE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2IDAgMCAyMjQtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZsLTUxLjItMzguNCAwLTIyNCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMCAwLTY0IDgwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em00OCAyMjRsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAweiJdCiAgICB9OwogICAgZmFVcERvd25MZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtZG93bi1sZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93cy1hbHQiXSwgImYwYjIiLCAiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxNzkuMSAxMjggMTkyIDEyOGwzMiAwIDAgOTYtOTYgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTI4IDMzMi45IDEyOCAzMjBsMC0zMiA5NiAwIDAgOTYtMzIgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzg0IDMyMCAzODRsLTMyIDAgMC05NiA5NiAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM4NCAxNzkuMSAzODQgMTkybDAgMzItOTYgMCAwLTk2IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93c0FsdCA9IGZhVXBEb3duTGVmdFJpZ2h0OwogICAgZmFDYXJTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjYzXSwgImY1ZTQiLCAiTTE0NyAxMDYuN2wtMjkuOCA4NS4zIDEyMi45IDAgMC05Ni03Ny45IDBjLTYuOCAwLTEyLjkgNC4zLTE1LjEgMTAuN3pNNDguNiAxOTMuOUw4Ni41IDg1LjZDOTcuOCA1My41IDEyOC4xIDMyIDE2Mi4xIDMyTDM2MCAzMmMyNS4yIDAgNDguOSAxMS45IDY0IDMybDk2LjIgMTI4LjNDNTg3LjEgMTk2LjUgNjQwIDI1Mi4xIDY0MCAzMjBsMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTYuNCAwYy00IDQ0LjktNDEuNyA4MC04Ny42IDgwcy04My42LTM1LjEtODcuNi04MGwtMTQ0LjcgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLS40IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODBjMC0zMC4xIDIwLjctNTUuMyA0OC42LTYyLjF6TTQ0MCAxOTJsLTY3LjItODkuNmMtMy00LTcuOC02LjQtMTIuOC02LjRsLTcyIDAgMCA5NiAxNTIgMHpNMTUyIDQzMmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTM2MC00MGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdCiAgICB9OwogICAgZmFUcmFzaEFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtYXJyb3ctdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHJhc2gtcmVzdG9yZSJdLCAiZjgyOSIsICJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwLTIxLjEgMzIzLjFDMzkzLjMgNDkyLjQgMzcyLjMgNTEyIDM0NyA1MTJMMTAxIDUxMmMtMjUuMyAwLTQ2LjMtMTkuNi00Ny45LTQ0LjlMMzIgMTQ0em0yMDkgNzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC03MiA3MmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMxLTMxIDAgMTAyLjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMi4xIDMxIDMxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJ6Il0KICAgIH07CiAgICBmYVRyYXNoUmVzdG9yZSA9IGZhVHJhc2hBcnJvd1VwOwogICAgZmFMaWZlUmluZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlmZS1yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2QiLCAiTTM2Ny4yIDQxMi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4cy03OS45LTEzLjEtMTExLjItMzUuNWw1OC01OGMxNS44IDguNiAzNCAxMy41IDUzLjMgMTMuNXMzNy40LTQuOSA1My4zLTEzLjVsNTggNTh6bTkwLjcgLjhjMzMuOC00My40IDU0LTk4IDU0LTE1Ny4zUzQ5MS44IDE0Mi4xIDQ1OCA5OC43YzktMTIuNSA3LjktMzAuMS0zLjQtNDEuM1M0MjUuOCA0NSA0MTMuMyA1NEMzNjkuOSAyMC4yIDMxNS4zIDAgMjU2IDBTMTQyLjEgMjAuMiA5OC43IDU0Yy0xMi41LTktMzAuMS03LjktNDEuMyAzLjRTNDUgODYuMiA1NCA5OC43QzIwLjIgMTQyLjEgMCAxOTYuNyAwIDI1NlMyMC4yIDM2OS45IDU0IDQxMy4zYy05IDEyLjUtNy45IDMwLjEgMy40IDQxLjNTODYuMiA0NjcgOTguNyA0NThjNDMuNCAzMy44IDk4IDU0IDE1Ny4zIDU0czExMy45LTIwLjIgMTU3LjMtNTRjMTIuNSA5IDMwLjEgNy45IDQxLjMtMy40czEyLjQtMjguOCAzLjQtNDEuM3ptLTQ1LjUtNDYuMWwtNTgtNThjOC42LTE1LjggMTMuNS0zNCAxMy41LTUzLjNzLTQuOS0zNy40LTEzLjUtNTMuM2w1OC01OEM0MzQuOSAxNzYuMSA0NDggMjE0LjUgNDQ4IDI1NnMtMTMuMSA3OS45LTM1LjUgMTExLjJ6TTM2Ny4yIDk5LjVsLTU4IDU4Yy0xNS44LTguNi0zNC0xMy41LTUzLjMtMTMuNXMtMzcuNCA0LjktNTMuMyAxMy41bC01OC01OEMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NHM3OS45IDEzLjEgMTExLjIgMzUuNXpNMTU3LjUgMzA5LjNsLTU4IDU4Qzc3LjEgMzM1LjkgNjQgMjk3LjUgNjQgMjU2czEzLjEtNzkuOSAzNS41LTExMS4ybDU4IDU4Yy04LjYgMTUuOC0xMy41IDM0LTEzLjUgNTMuM3M0LjkgMzcuNCAxMy41IDUzLjN6TTIwOCAyNTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQ29weXJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5cmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNjldLCAiZjFmOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45YzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTQ2LjkgNDYuOS0xMjIuOCA0Ni45LTE2OS43IDBzLTQ2LjktMTIyLjggMC0xNjkuNyAxMjIuOC00Ni45IDE2OS43IDBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwcy0yOC4xIDczLjcgMCAxMDEuOHoiXQogICAgfTsKICAgIGZhRmlsZVByZXNjcmlwdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXByZXNjcmlwdGlvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTcyIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODggMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgMjIuNSAwIDU4LjQgNTUtMzMuNCAzMS42Yy05LjYgOS4xLTEwLjEgMjQuMy0uOSAzMy45czI0LjMgMTAuMSAzMy45IC45bDM1LjQtMzMuNSAzNS42IDMzLjVjOS43IDkuMSAyNC44IDguNiAzMy45LTFzOC42LTI0LjgtMS0zMy45bC0zMy42LTMxLjYgMzMuNi0zMS44YzkuNi05LjEgMTAuMS0yNC4zIC45LTMzLjlzLTI0LjMtMTAuMS0zMy45LS45bC0zNS43IDMzLjctNDAuOS0zOC41YzEyLjktMTEuNyAyMS4xLTI4LjYgMjEuMS00Ny41IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01NiAwem0zMiA4MGwtOCAwIDAtMzIgMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMjQgMHoiXQogICAgfTsKICAgIGZhRXJhc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVyYXNlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTJkIiwgIk0xNzguNSA0MTZsMTIzIDAgNjUuMy02NS4zLTE3My41LTE3My41LTEyNi43IDEyNi43IDExMiAxMTJ6TTIyNCA0ODBsLTQ1LjUgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMTcgMzQ1QzYuMSAzMzQuMSAwIDMxOS40IDAgMzA0czYuMS0zMC4xIDE3LTQxTDI2MyAxN0MyNzMuOSA2LjEgMjg4LjYgMCAzMDQgMHMzMC4xIDYuMSA0MSAxN0w1MjcgMTk5YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MWwtMTM1IDEzNSAxMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDB6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc1N0YXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1zdGFydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJob3VyZ2xhc3MtMSJdLCAiZjI1MSIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTI4OCA0MzdsMCAxMS0xOTIgMCAwLTExYzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDY3LjktNjcuOSA2Ny45IDY3LjljMTggMTggMjguMSA0Mi40IDI4LjEgNjcuOXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMSA9IGZhSG91cmdsYXNzU3RhcnQ7CiAgICBmYUNpcmNsZUxlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4NDAsICJhcnJvdy1hbHQtY2lyY2xlLWxlZnQiXSwgImYzNTkiLCAiTTUxMiAyNTZhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMTI0LjcgMjQ0LjdsMTA0LTEwNGM0LjYtNC42IDExLjUtNS45IDE3LjQtMy41czkuOSA4LjMgOS45IDE0LjhsMCA1NiA5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA1NmMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVsLTEwNC0xMDRjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZUxlZnQyID0gZmFDaXJjbGVMZWZ0MjsKICAgIGZhQ3J1emVpcm9TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNydXplaXJvLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTE1MiIsICJNMjQwIDk2Yy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MCAwIDcxLjYgNDcuMSAxMzIuMyAxMTIgMTUyLjdMMTkyIDI1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMi44IDAgMjMuMyAxMC4xIDI0IDIyLjcgMTUuNS05LjUgMzMuNS0xNC43IDUyLjMtMTQuN2wxMS44IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExLjggMGMtMTguOCAwLTM2LjEgMTAtNDUuNCAyNi4zLTQuNSA3LjktNi45IDE2LjgtNi45IDI1LjlsMCA3NS44YzQyLjUgMCA4MS4xLTE2LjYgMTA5LjgtNDMuNiAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMkMzNTMuNyA0NTYuOCAyOTkuNSA0ODAgMjQwIDQ4MCAxMTYuMyA0ODAgMTYgMzc5LjcgMTYgMjU2UzExNi4zIDMyIDI0MCAzMmM1OS41IDAgMTEzLjcgMjMuMiAxNTMuNyA2MS4xIDEyLjkgMTIuMSAxMy40IDMyLjQgMS4zIDQ1LjJzLTMyLjQgMTMuNC00NS4yIDEuM0MzMjEuMSAxMTIuNiAyODIuNSA5NiAyNDAgOTZ6Il0KICAgIH07CiAgICBmYVNtb2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic21va2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY4NF0sICJmNDhkIiwgIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0zMjAgNDQ4bDk2IDAgMC0zMi05NiAwIDAgMzJ6TTAgNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMyem01NzYtNDBsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhU3F1YXJlUG9sbFZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wb2xsLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBvbGwiXSwgImY2ODEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTU2IDE5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMTg0IDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4ek0yMjQgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjA4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQb2xsID0gZmFTcXVhcmVQb2xsVmVydGljYWw7CiAgICBmYVBlcnNvbkNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MCIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFCaW9oYXphcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmlvaGF6YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTc2M10sICJmNzgwIiwgIk0yNjAgMTIuNmMwLTguMy03LjYtMTQuNS0xNS41LTEyLjEtNjAuOSAxOC44LTEwNS4xIDc1LjgtMTA1LjEgMTQzLjEgMCAyNS4xIDYuMSA0OC43IDE3IDY5LjUtMjEgMS44LTQyIDguMi02MS41IDE5LjUtNTcuOSAzMy42LTg0LjggMTAwLjItNzAuOSAxNjIuNSAxLjkgOC40IDExLjQgMTIgMTguOSA3LjYgNS0yLjkgNy42LTguNiA3LjEtMTQuNC0uMy0zLjMtLjQtNi42LS40LTEwLjEgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgODguNC05NC41IDExMy42LTE0OC4yIDc1LjQtNC41LTMuMi0xMC41LTMuOS0xNS4zLTEuMS03IDQuMS04LjYgMTMuNi0yLjcgMTkuMSA0Ni42IDQzLjggMTE4IDUzLjkgMTc2LjEgMjAuMiAxNy45LTEwLjQgMzIuOC0yMy45IDQ0LjUtMzkuNCAxMS43IDE1LjYgMjYuNiAyOS4xIDQ0LjUgMzkuNCA1OC4xIDMzLjcgMTI5LjUgMjMuNiAxNzYuMS0yMC4yIDUuOS01LjUgNC4zLTE1LjEtMi43LTE5LjEtNC44LTIuOC0xMC44LTIuMS0xNS4zIDEuMS01My43IDM4LjItMTQ4LjIgMTMtMTQ4LjItNzUuNCAwLTEyMy41IDE4NC40LTEyMy41IDE4NC40IDAgMCAzLjQtLjEgNi44LS40IDEwLjEtLjUgNS44IDIuMSAxMS41IDcuMSAxNC40IDcuNCA0LjMgMTcgLjggMTguOS03LjYgMTMuOS02Mi4yLTEzLTEyOC45LTcwLjktMTYyLjUtMTkuNS0xMS4zLTQwLjQtMTcuNy02MS41LTE5LjUgMTAuOS0yMC44IDE3LTQ0LjQgMTctNjkuNSAwLTY3LjMtNDQuMi0xMjQuMy0xMDUuMS0xNDMuMS03LjktMi40LTE1LjUgMy44LTE1LjUgMTIuMSAwIDUuOSA0IDExIDkuNSAxMy4yIDgzLjQgMzMuNiA3MC44IDE3OC40LTM3LjggMTc4LjRTMTY3LjEgNTkuNCAyNTAuNSAyNS44YzUuNS0yLjIgOS41LTcuMyA5LjUtMTMuMnpNMjQ4LjQgMjg4YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTQzNSAzMTcuN2MtMTYuMiAwLTMxLjQgNS41LTQyLjEgMTUtMTAuMSA5LjEtMTguMSAyMy40LTE4LjEgNDUuNiAwIDIxLjEgNy4yIDM1IDE2LjUgNDQuMSAzMi4yLTI0LjYgNTUuNS02MC41IDYzLjktMTAxLjgtNi4zLTEuOS0xMy4yLTMtMjAuMi0zek0yMDIgMzc4LjNjMC0yMi4zLTgtMzYuNi0xOC4xLTQ1LjYtMTAuNy05LjYtMjUuOS0xNS00Mi4xLTE1LTcgMC0xMy45IDEtMjAuMiAzIDguNCA0MS4zIDMxLjYgNzcuMiA2My45IDEwMS44IDkuNC05LjEgMTYuNS0yMy4xIDE2LjUtNDQuMnptNDEuMi0yMjQuM2M5IDEwLjIgMjMuMiAxOC4yIDQ1LjIgMTguMnMzNi4yLTggNDUuMi0xOC4yYzYuNy03LjYgMTEuNS0xNy41IDEzLjYtMjguNC0xOC4zLTYuOC0zOC4yLTEwLjUtNTguOC0xMC41cy00MC41IDMuNy01OC44IDEwLjVjMi4yIDEwLjkgNi45IDIwLjggMTMuNiAyOC41eiJdCiAgICB9OwogICAgZmFCZWxsQ29uY2llcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwtY29uY2llcmdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzE4LCAiY29uY2llcmdlLWJlbGwiXSwgImY1NjIiLCAiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuM0MxMjQuOCAxNTYuNyA0MC4yIDI0My43IDMyLjYgMzUybDQ0Ni45IDBDNDcxLjggMjQzLjcgMzg3LjIgMTU2LjcgMjgwIDE0NS4zbDAtMzMuMyAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek0yNCA0MDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDAweiJdCiAgICB9OwogICAgZmFDb25jaWVyZ2VCZWxsID0gZmFCZWxsQ29uY2llcmdlOwogICAgZmFSdWxlckhvcml6b250YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItaG9yaXpvbnRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTQ3IiwgIk00OCAzODRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI0IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCA0OCAwIDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyIDQ4IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCA0OCAwIDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyIDQ4IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCAyNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDM4NHoiXQogICAgfTsKICAgIGZhSG9yc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9yc2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMTRdLCAiZjZmMCIsICJNNDQ4IDIzOC4xbDAtNzguMSAxNiAwIDkuOCAxOS42YzEyLjUgMjUuMSA0Mi4yIDM2LjQgNjguMyAyNiAyMC41LTguMiAzMy45LTI4IDMzLjktNTAuMUw1NzYgODBjMC0xOS4xLTguNC0zNi4zLTIxLjctNDhsNS43IDBjOC44IDAgMTYtNy4yIDE2LTE2UzU2OC44IDAgNTYwIDBMNDQ4IDBDMzc3LjMgMCAzMjAgNTcuMyAzMjAgMTI4bC0xNzEuMiAwQzExOC4xIDEyOCA5MS4yIDE0NC4zIDc2LjMgMTY4LjggMzMuMiAxNzQuNSAwIDIxMS40IDAgMjU2bDAgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2YzAtMTMuNCA2LjYtMjUuMiAxNi43LTMyLjUgMS42IDEzIDYuMyAyNS40IDEzLjYgMzYuNGwyOC4yIDQyLjRjOC4zIDEyLjQgNi40IDI4LjctMS4yIDQxLjYtMTYuNSAyOC0yMC42IDYyLjItMTAgOTMuOWwxNy41IDUyLjRjNC40IDEzLjEgMTYuNiAyMS45IDMwLjQgMjEuOWwzMy43IDBjMjEuOCAwIDM3LjMtMjEuNCAzMC40LTQyLjFsLTIwLjgtNjIuNWMtMi4xLTYuNC0uNS0xMy40IDQuMy0xOC4ybDEyLjctMTIuN2MxMy4yLTEzLjIgMjAuNi0zMS4xIDIwLjYtNDkuNyAwLTIuMy0uMS00LjYtLjMtNi45bDg0IDI0YzQuMSAxLjIgOC4yIDIuMSAxMi4zIDIuOEwzMjAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjQuM2MxOS4yLTE5LjIgMzEuNS00NS43IDMyLTc1LjdsMCAwIDAtMS45ek00OTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdCiAgICB9OwogICAgZmFDYWxlbmRhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sICJmMTMzIiwgIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJsMCAzMi0zMiAwQzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNDggNDQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NGwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzItMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMCAyMjRMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTItNDQ4IDB6Il0KICAgIH07CiAgICBmYUhhbmRzSG9sZGluZ0NoaWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmctY2hpbGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRmYSIsICJNMzIwLTMyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxNjAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjEgMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44LTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4ybDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAxMDRDMCA4MS45IDE3LjkgNjQgNDAgNjR6bTU2MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjIxLjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDQwMCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNzguOWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwYzcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMi0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOCA5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1NjAgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwek0zODQuNSAxNDlsLTE5LjgtMTYuNyAxMS4xIDg4LjhjMS42IDEzLjItNy43IDI1LjEtMjAuOCAyNi44cy0yNS4xLTcuNy0yNi44LTIwLjhsLTQuNC0zNS03LjYgMC00LjQgMzVjLTEuNiAxMy4yLTEzLjYgMjIuNS0yNi44IDIwLjhzLTIyLjUtMTMuNi0yMC44LTI2LjhsMTEuMS04OC44LTE5LjggMTYuN2MtMTAuMSA4LjYtMjUuMyA3LjMtMzMuOC0yLjhzLTcuMy0yNS4zIDIuOC0zMy44bDI3LjktMjMuNkMyNzEuMyA3Mi44IDI5NS4zIDY0IDMyMCA2NHM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44eiJdCiAgICB9OwogICAgZmFJdGFsaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaXRhbGljIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwMzMiLCAiTTEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNTguNyAwLTEzMy4zIDMyMCA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1OC43IDAgMTMzLjMtMzIwLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFLaGFuZGEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2hhbmRhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3Ml0sICJmNjZkIiwgIk0yNDAuNyA4YzguOS03LjQgMjEuOC03LjQgMzAuNyAwbDM3LjggMzEuNWM4LjcgNy4zIDExLjEgMTkuNiA2IDI5LjYtMS4yIDIuNC0yLjggNS41LTQuNiA5LjIgMzQuMiAxOS4yIDU3LjMgNTUuOCA1Ny4zIDk3LjhzLTIzLjEgNzguNi01Ny4zIDk3LjhjMS44IDMuNyAzLjMgNi44IDQuNiA5LjIgNS4xIDEwIDIuNyAyMi4zLTYgMjkuNmwtMzcuMiAzMSAwIDE5LjhjMjIuOS0xNS43IDQ4LjQtMzMuMyA3Ni43LTUyLjcgNDIuOC0yOS40IDY4LjQtNzggNjguNC0xMzBsMC0xMS4xYzAtMjMuOS03LjEtNDcuMy0yMC40LTY3LjItNS4xLTcuNy00LjYtMTcuOCAxLjctMjQuNiA2LjYtNy4xIDE3LjItOC4xIDI1LjItMi44IDI3LjUgMTguMSA4OS40IDY3LjUgODkuNCAxNDkuMSAwIDQ2LjUtMjAuMiA4OC42LTQxLjggMTIwLjQtMjEuNiAzMi00NS42IDU1LTU1LjMgNjMuOC03LjggNy4xLTE5IDcuOS0yNy42IDNsLTcwLjgtNDAuMy0zMi43IDIyLjUgNDUuNSAzMS4zYzEuOC0uNCAzLjctLjcgNS43LS43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMi4yIDAtMjIuMy05LjEtMjMuOC0yMWwtNDAuMi0yNy42IDAgMjguOWM5LjYgNS41IDE2IDE1LjkgMTYgMjcuNyAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTExLjggNi40LTIyLjIgMTYtMjcuN2wwLTI4LjEtNDAuMyAyNy43Yy0xLjggMTEuNC0xMS44IDIwLjEtMjMuNyAyMC4xLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMi4yIDAgNC40IC4zIDYuNSAuOWw0NS44LTMxLjUtMzIuNy0yMi41LTcwLjggNDAuM2MtOC43IDQuOS0xOS44IDQuMS0yNy42LTMtOS43LTguOC0zMy43LTMxLjktNTUuMy02My44LTIxLjUtMzEuOC00MS44LTczLjktNDEuOC0xMjAuNCAwLTgxLjcgNjEuOS0xMzEuMSA4OS40LTE0OS4xIDguMS01LjMgMTguNi00LjMgMjUuMiAyLjggNi40IDYuOSA2LjggMTcgMS43IDI0LjYtMTMuMyAxOS45LTIwLjQgNDMuMy0yMC40IDY3LjJsMCAxMS4xYzAgNTEuOSAyNS42IDEwMC42IDY4LjQgMTMwIDI4LjQgMTkuNiA1My43IDM2LjkgNzUuNiA1MmwwLTE5LjEtMzcuMi0zMWMtOC43LTcuMy0xMS4xLTE5LjYtNi0yOS42IDEuMi0yLjQgMi44LTUuNSA0LjYtOS4yLTM0LjItMTkuMi01Ny4zLTU1LjgtNTcuMy05Ny44czIzLjEtNzguNiA1Ny4zLTk3LjhjLTEuOC0zLjctMy4zLTYuOC00LjYtOS4yLTUuMS0xMC0yLjctMjIuMyA2LTI5LjZMMjQwLjcgOHpNMjIwLjMgMTIyLjljLTE3IDExLjUtMjguMiAzMS0yOC4yIDUzLjFzMTEuMiA0MS42IDI4LjIgNTMuMWM2LjgtMTkuMiAxMS44LTM4LjQgMTEuOC01My4xcy00LjktMzMuOS0xMS44LTUzLjF6bTcxLjUgMTA2LjJjMTctMTEuNSAyOC4yLTMxIDI4LjItNTMuMXMtMTEuMi00MS42LTI4LjItNTMuMWMtNi44IDE5LjItMTEuOCAzOC40LTExLjggNTMuMXM0LjkgMzMuOSAxMS44IDUzLjF6Il0KICAgIH07CiAgICBmYUZhY2VGcm93bk9wZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24tb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgImZyb3duLW9wZW4iXSwgImY1N2EiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHoiXQogICAgfTsKICAgIGZhRnJvd25PcGVuMiA9IGZhRmFjZUZyb3duT3BlbjI7CiAgICBmYUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwMDMsIDEwMDA0XSwgImYwMGMiLCAiTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6Il0KICAgIH07CiAgICBmYUZpbmdlcnByaW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbmdlcnByaW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NzciLCAiTTQ4IDI1NmMwLTExNC45IDkzLjEtMjA4IDIwOC0yMDggNjMuMSAwIDExOS42IDI4LjEgMTU3LjggNzIuNSA4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44QzQwMy4zIDM0LjYgMzMzLjcgMCAyNTYgMCAxMTQuNiAwIDAgMTE0LjYgMCAyNTZsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDB6bTQ1OC41LTUyLjljLTIuNy0xMy0xNS41LTIxLjMtMjguNC0xOC41cy0yMS4zIDE1LjUtMTguNSAyOC40YzIuOSAxMy45IDQuNSAyOC4zIDQuNSA0My4xbDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwYzAtMTguMS0xLjktMzUuOC01LjUtNTIuOXpNMjU2IDgwYy0xOSAwLTM3LjQgMy01NC41IDguNi0xNS4yIDUtMTguNyAyMy43LTguMyAzNS45IDcuMSA4LjMgMTguOCAxMC44IDI5LjQgNy45IDEwLjYtMi45IDIxLjgtNC40IDMzLjQtNC40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMjQuOWMwIDI1LjItMS41IDUwLjMtNC40IDc1LjMtMS43IDE0LjYgOS40IDI3LjggMjQuMiAyNy44IDExLjggMCAyMS45LTguNiAyMy4zLTIwLjMgMy4zLTI3LjQgNS01NSA1LTgyLjdsMC0yNC45YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2ek0xNTAuNyAxNDguN2MtOS4xLTEwLjYtMjUuMy0xMS40LTMzLjktLjQtMjMuMSAyOS44LTM2LjggNjcuMS0zNi44IDEwNy43bDAgMjQuOWMwIDI0LjItMi42IDQ4LjQtNy44IDcxLjktMy40IDE1LjYgNy45IDMxLjEgMjMuOSAzMS4xIDEwLjUgMCAxOS45LTcgMjIuMi0xNy4zIDYuNC0yOC4xIDkuNy01Ni44IDkuNy04NS44bDAtMjQuOWMwLTI3LjIgOC41LTUyLjQgMjIuOS03My4xIDcuMi0xMC40IDgtMjQuNi0uMi0zNC4yek0yNTYgMTYwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjQuOWMwIDM1LjktNC42IDcxLjUtMTMuOCAxMDYuMS0zLjggMTQuMyA2LjcgMjkgMjEuNSAyOSA5LjUgMCAxNy45LTYuMiAyMC40LTE1LjQgMTAuNS0zOSAxNS45LTc5LjIgMTUuOS0xMTkuN2wwLTI0LjljMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwwIDI0LjljMCAzNi4zLTMuNSA3Mi40LTEwLjQgMTA3LjktMi43IDEzLjkgNy43IDI3LjIgMjEuOCAyNy4yIDEwLjIgMCAxOS03IDIxLTE3IDcuNy0zOC44IDExLjYtNzguMyAxMS42LTExOC4xbDAtMjQuOWMwLTUzLTQzLTk2LTk2LTk2em0yNCA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0LjljMCA1OS45LTExIDExOS4zLTMyLjUgMTc1LjJsLTUuOSAxNS4zYy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhsNS45LTE1LjNDMjY3LjkgNDExLjkgMjgwIDM0Ni43IDI4MCAyODAuOWwwLTI0Ljl6Il0KICAgIH07CiAgICBmYUNoYXJnaW5nU3RhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFyZ2luZy1zdGF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1ZTciLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMjcuN2MtMzIuNS0xMC4yLTU2LTQwLjUtNTYtNzYuM2wwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDMyIDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDM1LjgtMjMuNSA2Ni4xLTU2IDc2LjNMNTIwIDM4MGMwIDM3LjYtMzAuNCA2OC02OCA2OHMtNjgtMzAuNC02OC02OGwwLTEyYzAtMTcuNy0xNC4zLTMyLTMyLTMybDAgMTI5LjRjOS4zIDMuMyAxNiAxMi4yIDE2IDIyLjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRMNzIgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjUgNi43LTE5LjMgMTYtMjIuNkw2NCA2NHptODIuNyAxMjUuN2wzOSAwLTIwLjkgNjYuOWMtMi40IDcuNiAzLjMgMTUuNCAxMS4zIDE1LjQgMi45IDAgNS42LTEgNy44LTIuOWw5NC42LTgyYzMuMS0yLjcgNC45LTYuNiA0LjktMTAuNyAwLTcuOC02LjMtMTQuMS0xNC4xLTE0LjFsLTM5IDAgMjAuOS02Ni45YzIuNC03LjYtMy4zLTE1LjQtMTEuMy0xNS40LTIuOSAwLTUuNiAxLTcuOCAyLjlsLTk0LjYgODJjLTMuMSAyLjctNC45IDYuNi00LjkgMTAuNyAwIDcuOCA2LjMgMTQuMSAxNC4xIDE0LjF6Il0KICAgIH07CiAgICBmYVVzZXJMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTAyIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTE5NC4zIDMwNGw1OS40IDBjMjkuNyAwIDU3LjcgNy4zIDgyLjMgMjAuMWwwIDQuM2MtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMNDUuNyA1MTJDMjkuMyA1MTIgMTYgNDk4LjcgMTYgNDgyLjMgMTYgMzgzLjggOTUuOCAzMDQgMTk0LjMgMzA0em0zMDEuNyAuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYU1vYmlsZVNjcmVlbkJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtc2NyZWVuLWJ1dHRvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtb2JpbGUtYWx0Il0sICJmM2NkIiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6bTY0IDBsMCAzMDQgMjI0IDAgMC0zMDQtMjI0IDB6TTE5MiA0NzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFNb2JpbGVBbHQgPSBmYU1vYmlsZVNjcmVlbkJ1dHRvbjsKICAgIGZhQW5jaG9yQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFhIiwgIk0zMjAgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNMjg4IDBjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zTDgwIDMwNy45YzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy13aXRoLWNhbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmxpbmQiXSwgImYyOWQiLCAiTTIyNC0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTYwIDIwNS4zbC0yMi42IDIyLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM0LjQtMzQuNGMyMy4yLTIzLjIgNTQuNi0zNi4yIDg3LjMtMzYuMiAzNi4xIDAgNzAuMyAxNS44IDkzLjggNDMuMWw2OC42IDgwYzExLjUgMTMuNCA5LjkgMzMuNi0zLjUgNDUuMXMtMzMuNiA5LjktNDUuMS0zLjVsLTU1LjctNjUgMCAxMTguNiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNsMTIuNiA4OC4xYzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4ybC0xMi42LTg4LjFjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6bS4xIDE2NS44YzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVsLTY4LjMgNjguM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjguMy02OC4zYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEwxNjAuMSAzNzF6bTIzMy41LTYyLjJjMTAuNi04IDI1LjYtNS44IDMzLjYgNC44bDE0NCAxOTJjOCAxMC42IDUuOCAyNS42LTQuOCAzMy42cy0yNS42IDUuOC0zMy42LTQuOGwtMTQ0LTE5MmMtOC0xMC42LTUuOC0yNS42IDQuOC0zMy42eiJdCiAgICB9OwogICAgZmFCbGluZCA9IGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lOwogICAgZmFGaWxlV2F2ZWZvcm0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13YXZlZm9ybSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLW1lZGljYWwtYWx0Il0sICJmNDc4IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTYgNjAuMyAwIDQ4LjggNjIuN2M1LjEgNi42IDEzLjMgMTAgMjEuNiA5LjFzMTUuNS02LjEgMTkuMS0xMy42bDQyLjktOTEuMiA5LjkgMTkuOGM0LjEgOC4xIDEyLjQgMTMuMyAyMS41IDEzLjNsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTcuMiAwLTI1LjQtNTAuN2MtNC4xLTguMi0xMi42LTEzLjQtMjEuOC0xMy4zcy0xNy41IDUuNS0yMS40IDEzLjhsLTQ3LjMgMTAwLjYtMzItNDEuMUM4Ni40IDMwNy40IDc5LjQgMzA0IDcyIDMwNEwwIDMwNCAwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6Il0KICAgIH07CiAgICBmYUZpbGVNZWRpY2FsQWx0ID0gZmFGaWxlV2F2ZWZvcm07CiAgICBmYUhvdXNlQ3JhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTNiMSIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGw4Ni40IDAtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI1NiAzNjggMTk1LjggMjg1LjJjLTEwLjktMTUgOC4yLTMzLjUgMjIuOC0yMmwxMTcuOSA5Mi42YzggNi4zIDguMiAxOC40IC40IDI0LjlMMjU2IDQ0OCAyOTQuNCA1MTIgNDAwIDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHoiXQogICAgfTsKICAgIGZhSGF0V2l6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC13aXphcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZlOCIsICJNNjQgNDAwbDg1LjctMjA4LjJjMTctNDEuMyA0Ny44LTc1LjMgODcuMi05Ni4zTDM4My44IDE3LjJjMTIuMy02LjYgMjYuNSA0LjcgMjMgMTguMkwzNjkuNiAxNzcuOGMtMS4xIDQuMS0xLjYgOC4zLTEuNiAxMi42IDAgNi4zIDEuMiAxMi42IDMuNiAxOC41bDc2LjQgMTkxLjEtMjA3LjEgMCAxMS44LTM1LjQgNDAuNC0xMy41YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ycy00LjQtMTMtMTAuOS0xNS4ybC00MC40LTEzLjUtMTMuNS00MC40QzIzNyAyNjAuNCAyMzAuOSAyNTYgMjI0IDI1NnMtMTMgNC40LTE1LjIgMTAuOWwtMTMuNSA0MC40LTQwLjQgMTMuNUMxNDguNCAzMjMgMTQ0IDMyOS4xIDE0NCAzMzZzNC40IDEzIDEwLjkgMTUuMmw0MC40IDEzLjUgMTEuOCAzNS40LTE0My4xIDB6TTI3OS42IDE0MS41Yy0xLjEtMy4zLTQuMS01LjUtNy42LTUuNXMtNi41IDIuMi03LjYgNS41bC02LjcgMjAuMi0yMC4yIDYuN2MtMy4zIDEuMS01LjUgNC4xLTUuNSA3LjZzMi4yIDYuNSA1LjUgNy42bDIwLjIgNi43IDYuNyAyMC4yYzEuMSAzLjMgNC4xIDUuNSA3LjYgNS41czYuNS0yLjIgNy42LTUuNWw2LjctMjAuMiAyMC4yLTYuN2MzLjMtMS4xIDUuNS00LjEgNS41LTcuNnMtMi4yLTYuNS01LjUtNy42bC0yMC4yLTYuNy02LjctMjAuMnpNMzIgNDQ4bDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVXNlckRvY3RvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWRvY3RvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ1c2VyLW1kIl0sICJmMGYwIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAwIDAgMjQwIDEyMCAxMjAgMCAxIDAgMC0yNDB6bTYwIDMxMi44Yy01LjQtLjUtMTEtLjgtMTYuNi0uOGwtODYuOSAwYy01LjYgMC0xMS4xIC4zLTE2LjYgLjhsMCA2Ny41YzE2LjUgNy42IDI4IDI0LjMgMjggNDMuNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTE5LjQgMTEuNS0zNi4xIDI4LTQzLjZsMC01OC40QzYxIDM1MyAxNiA0MTMuNiAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwzNjEuMSAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtNzEtNDUtMTMxLjUtMTA4LTE1NC42bDAgMzcuNGMyMy4zIDguMiA0MCAzMC41IDQwIDU2LjZsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTI2LjEgMTYuNy00OC4zIDQwLTU2LjZsMC00Ni42eiJdCiAgICB9OwogICAgZmFVc2VyTWQgPSBmYVVzZXJEb2N0b3I7CiAgICBmYUNoYXJ0QmFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1iYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYmFyLWNoYXJ0Il0sICJmMDgwIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA4MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTEybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQmFyQ2hhcnQyID0gZmFDaGFydEJhcjI7CiAgICBmYVNwcmF5Q2FuU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3ByYXktY2FuLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImFpci1mcmVzaGVuZXIiXSwgImY1ZDAiLCAiTTE2MCAzMmwwIDgwIDEyOCAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0wIDEyOGMtNTMgMC05NiA0My05NiA5NmwwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOGMwLTUzLTQzLTk2LTk2LTk2bC0xMjggMHptNjQgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQ0OCA0OGMwLTEuNC0xLTMtMi4yLTMuNkw0MTYgMzIgNDAzLjYgMi4yQzQwMyAxIDQwMS40IDAgNDAwIDBzLTMgMS0zLjYgMi4yTDM4NCAzMiAzNTQuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDM4NCA2NCAzOTYuNCA5My44QzM5NyA5NSAzOTguNiA5NiA0MDAgOTZzMy0xIDMuNi0yLjJMNDE2IDY0IDQ0NS44IDUxLjZDNDQ3IDUxIDQ0OCA0OS40IDQ0OCA0OHptNzYuNCA0NS44QzUyNSA5NSA1MjYuNiA5NiA1MjggOTZzMy0xIDMuNi0yLjJMNTQ0IDY0IDU3My44IDUxLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMzIgNTMxLjYgMi4yQzUzMSAxIDUyOS40IDAgNTI4IDBzLTMgMS0zLjYgMi4yTDUxMiAzMiA0ODIuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiA2NCA1MjQuNCA5My44em03LjIgMTAwLjRjLS42LTEuMi0yLjItMi4yLTMuNi0yLjJzLTMgMS0zLjYgMi4yTDUxMiAyMjQgNDgyLjIgMjM2LjRjLTEuMiAuNi0yLjIgMi4yLTIuMiAzLjYgMCAxLjQgMSAzIDIuMiAzLjZMNTEyIDI1NiA1MjQuNCAyODUuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDU0NCAyNTYgNTczLjggMjQzLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMjI0IDUzMS42IDE5NC4yek01MTIgMTQ0YzAtMS40LTEtMy0yLjItMy42TDQ4MCAxMjggNDY3LjYgOTguMkM0NjcgOTcgNDY1LjQgOTYgNDY0IDk2cy0zIDEtMy42IDIuMkw0NDggMTI4IDQxOC4yIDE0MC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDQ0OCAxNjAgNDYwLjQgMTg5LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw0ODAgMTYwIDUwOS44IDE0Ny42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6Il0KICAgIH07CiAgICBmYUFpckZyZXNoZW5lciA9IGZhU3ByYXlDYW5TcGFya2xlczsKICAgIGZhQmFodFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFodC1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwYWMiLCAiTTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwLTc0LjQgMEMxNi44IDY0IDAgODAuOCAwIDEwMS42TDAgNDA2LjNjMCAyMyAxOC43IDQxLjcgNDEuNyA0MS43bDcwLjMgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA0OCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyIDAtNDAuMS0yMS4xLTc1LjMtNTIuNy05NS4xIDEzLjEtMTguMyAyMC43LTQwLjcgMjAuNy02NC45IDAtNjEuOS01MC4xLTExMi0xMTItMTEybC0xNiAwIDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMjhsMCA5Ni00OCAwIDAtOTYgNDggMHptNDggOTZsMC05NiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwem0tNDggNjRsMCA5Ni00OCAwIDAtOTYgNDggMHptNDggOTZsMC05NiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC00OCAweiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtYXJyb3ctdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGVtcGVyYXR1cmUtdXAiXSwgImUwNDAiLCAiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yMTIuN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIxMi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTQzOS4xIDkuNGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOS40LTkuNCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTc4LjctOS40IDkuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjNi02IDE0LjEtOS40IDIyLjYtOS40czE2LjYgMy40IDIyLjYgOS40eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZVVwID0gZmFUZW1wZXJhdHVyZUFycm93VXA7CiAgICBmYVdlYkF3ZXNvbWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2ODIiLCAiTTM3Mi4yIDUyYzAgMjAuOS0xMi40IDM5LTMwLjIgNDcuMkw0NDggMTkyIDU1Mi40IDE3MS4xYy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDQgMCAxMTcuNSAyMS41IDk2IDQ4IDk2czQ4IDIxLjUgNDggNDhjMCAxMC4xLTMuMSAxOS40LTguNCAyNy4xTDE5MiAxOTIgMjk4LjEgOTkuMWMtMTcuNy04LjMtMzAtMjYuMy0zMC00Ny4xIDAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJ6Il0KICAgIH07CiAgICBmYU5vbkJpbmFyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub24tYmluYXJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU4MDciLCAiTTE5MiA1NDRjLTk3LjIgMC0xNzYtNzguOC0xNzYtMTc2IDAtODYuMyA2Mi4xLTE1OCAxNDQtMTczbDAtNDcuMi00OS43IDI0LjgtMyAxLjNjLTE1LjIgNS43LTMyLjUtLjgtMzkuOS0xNS43LTcuNC0xNC44LTIuMi0zMi42IDExLjUtNDEuM2wyLjgtMS42IDM4LjgtMTkuNC0zOC44LTE5LjRjLTE1LjgtNy45LTIyLjItMjcuMS0xNC4zLTQyLjkgNy40LTE0LjggMjQuOC0yMS40IDQwLTE1LjZsMyAxLjMgNDkuNyAyNC44IDAtNDQuMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDQuMiA0OS43LTI0LjggMy0xLjNjMTUuMi01LjggMzIuNSAuOCAzOS45IDE1LjZzMi4yIDMyLjctMTEuNSA0MS4zbC0yLjggMS42LTM4LjcgMTkuNCAzOC43IDE5LjNjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS03LjQgMTQuOC0yNC43IDIxLjQtMzkuOSAxNS42bC0zLTEuMy00OS43LTI0LjggMCA0Ny4yYzgxLjkgMTUuMSAxNDQgODYuOCAxNDQgMTczIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2em0wLTY0YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhTiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTEwXSwgIjRlIiwgIk0yMS4xIDMzLjljMTIuNy00LjYgMjYuOS0uNyAzNS41IDkuNkwzMjAgMzU5LjYgMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzODRjMCAxMy41LTguNCAyNS41LTIxLjEgMzAuMXMtMjYuOSAuNy0zNS41LTkuNkw2NCAxNTIuNCA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNTAuNSA4LjQgMzguNSAyMS4xIDMzLjl6Il0KICAgIH07CiAgICBmYUFycm93c1VwRG93bkxlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtZG93bi1sZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93cyJdLCAiZjA0NyIsICJNMjc4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDExNC43LTExNC43IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTE0LjcgMCAwIDExNC43LTkuNC05LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05LjQgOS40IDAtMTE0LjcgMTE0LjcgMC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0xMTQuNyAwIDAtMTE0LjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHoiXQogICAgfTsKICAgIGZhQXJyb3dzID0gZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQ7CiAgICBmYUhvdXNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2OCwgNjM0OTgsIDYzNTAwLCAiaG9tZSIsICJob21lLWFsdCIsICJob21lLWxnLWFsdCJdLCAiZjAxNSIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjQwIDMyMGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYtMTI4IDAgMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhSG9tZTIgPSBmYUhvdXNlMjsKICAgIGZhSG9tZUFsdDIgPSBmYUhvdXNlMjsKICAgIGZhSG9tZUxnQWx0MiA9IGZhSG91c2UyOwogICAgZmFTcGlubmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaW5uZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjExMCIsICJNMjA4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTAgNDE2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ4IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTM2OCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek03NSAzNjkuMUE0OCA0OCAwIDEgMSAxNDIuOSA0MzcgNDggNDggMCAxIDEgNzUgMzY5LjF6TTc1IDc1QTQ4IDQ4IDAgMSAxIDE0Mi45IDE0Mi45IDQ4IDQ4IDAgMSAxIDc1IDc1ek00MzcgMzY5LjFBNDggNDggMCAxIDEgMzY5LjEgNDM3IDQ4IDQ4IDAgMSAxIDQzNyAzNjkuMXoiXQogICAgfTsKICAgIGZhR2F2ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F2ZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibGVnYWwiXSwgImYwZTMiLCAiTTE2OS42IDE1My40bC0xOC43LTE4LjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDI2NS42LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzI5LjYtNi42YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDIxNC45IDE1My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHpNMjc2IDIxMS43bC0zMS40LTMxLjQgMTEyLTExMiAxMTkuNCAxMTkuNC0xMTIgMTEyLTMxLjQtMzEuNC0yMzIgMjMyYy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyMzItMjMyek0zOTAuOSAzNzQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMNTA1LjYgMjE0LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTguNyAxOC43YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDQ1NC45IDM5My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTguNy0xOC43eiJdCiAgICB9OwogICAgZmFMZWdhbCA9IGZhR2F2ZWw7CiAgICBmYVRpY2tldFNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aWNrZXQtc2ltcGxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRpY2tldC1hbHQiXSwgImYzZmYiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCA4LjgtNy40IDE1LjctMTUuNyAxOC42LTE4LjggNi41LTMyLjMgMjQuNC0zMi4zIDQ1LjRzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NEMwIDMxMS4yIDcuNCAzMDQuMyAxNS43IDMwMS40IDM0LjUgMjk0LjkgNDggMjc3IDQ4IDI1NnMtMTMuNS0zOC45LTMyLjMtNDUuNEM3LjQgMjA3LjcgMCAyMDAuOCAwIDE5MmwwLTY0eiJdCiAgICB9OwogICAgZmFUaWNrZXRBbHQgPSBmYVRpY2tldFNpbXBsZTsKICAgIGZhRG92ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3ZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzMwXSwgImY0YmEiLCAiTTQ5NiA2NGMxMy4yIDAgMjAuNyAxNS4xIDEyLjggMjUuNkw0ODAgMTI4IDQ4MCAzMDRjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRsLTExMiAwLTQ2LjMgNDYuM2MtMTAuNCAxMC40LTI2LjUgMTIuNC0zOS4xIDQuOEw0MS41IDQ0MC45Yy0xNy0xMC4yLTE1LTM1LjUgMy40LTQyLjlMMTYwIDM1MkMyMy44IDMxMS4xIDcuNSAxNjkuOCAyMiA5NS43IDI1LjYgNzcuOSA0NS4zIDcxLjQgNjEuMyA4MC4yTDMyMCAyMjQgMzIwIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MGw5NiAwem0tOTYgNTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4ek0xODIuNS05LjZjMTIuNC0xMy43IDMzLjMtOC45IDQyLjUgNy4xbDU2LjQgOTguM2MtNS44IDE0LjQtOS4yIDMwLjEtOS40IDQ2LjVMMTM4LjEgNjhjMTAuMS0zMS42IDI3LTU4LjQgNDQuNC03Ny42eiJdCiAgICB9OwogICAgZmFUYXJwRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXJwLWRyb3BsZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3YyIsICJNMjU2IDE2MGMzNS4zIDAgNjQtMjYuOSA2NC02MCAwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjUtNi4xLTcuNy0xNy41LTcuNy0yMy42IDAtMTguNSAyMy40LTUyLjIgNjkuNS01Mi4yIDkzLjUgMCAzMy4xIDI4LjcgNjAgNjQgNjB6TTM2OCA5NmMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMxNDQgMTU3LjkgMTQ0IDk2YzAtMTEuMSAxLjYtMjEuOSA0LjYtMzJMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0OTMuMyAzMjIuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg0LjYgMGMzIDEwLjEgNC42IDIwLjkgNC42IDMyem04NS41IDE3NkwzMzYgMzg5LjUgMzM2IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5My41IDB6TTk2IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVRyZWVDaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyZWUtY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTg3IiwgIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyMGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTUyOCAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0ODBsMC0xNjAtMTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODAgMC0yNi43IDEzLjEtNTAuMyAzMy4yLTY0LjktLjgtNC45LTEuMi0xMC0xLjItMTUuMSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVR1cm5VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJuLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDgsICJsZXZlbC11cC1hbHQiXSwgImYzYmYiLCAiTTE2OS40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDE5MiAzMjAgMTkybC02NCAwIDAgMTYwYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjAtNjQgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTGV2ZWxVcEFsdCA9IGZhVHVyblVwOwogICAgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtcXVhcnRlciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJ0ZW1wZXJhdHVyZS0xIiwgInRoZXJtb21ldGVyLTEiLCAidGhlcm1vbWV0ZXItcXVhcnRlciJdLCAiZjJjYSIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtMjguN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjguN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMSA9IGZhVGVtcGVyYXR1cmVRdWFydGVyOwogICAgZmFUaGVybW9tZXRlcjEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjsKICAgIGZhVGhlcm1vbWV0ZXJRdWFydGVyID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7CiAgICBmYVNsaWRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xpZGVycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzbGlkZXJzLWgiXSwgImYxZGUiLCAiTTMyIDY0QzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmw4Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhMNDgwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwyNjUuMyA2NEMyNTMgMzUuNyAyMjQuOCAxNiAxOTIgMTZzLTYxIDE5LjctNzMuMyA0OEwzMiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQ2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OGw1NC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU0LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHMtNjEgMTkuNy03My4zIDQ4TDMyIDIyNHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTQuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI0Ni43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAzODR6Il0KICAgIH07CiAgICBmYVNsaWRlcnNIID0gZmFTbGlkZXJzOwogICAgZmFNb3NxdWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9zcXVlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzMyXSwgImY2NzgiLCAiTTE3NC44IDIyNGwyMjYuNCAwYzQzLjUgMCA3OC44LTM1LjMgNzguOC03OC44IDAtMjUuNS0xMi4zLTQ5LjQtMzMuMS02NC4yTDI5Ny4zLTI1LjRjLTUuNi0zLjktMTMtMy45LTE4LjUgMEwxMjkuMSA4MUMxMDguMyA5NS44IDk2IDExOS43IDk2IDE0NS4yIDk2IDE4OC43IDEzMS4zIDIyNCAxNzQuOCAyMjR6TTUxMiA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC00NDggMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjA2LjMgMCAyMjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDB6TTI0MCAzODRjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwLTk2IDAgMC04MHoiXQogICAgfTsKICAgIGZhSCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA0XSwgIjQ4IiwgIk0zMjAgMjg4bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAtMjU2IDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAyNTYgMHoiXQogICAgfTsKICAgIGZhSW5mbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmZvIiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImYxMjkiLCAiTTQ4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTYgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTIyNC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY5NCwgIndhbGtpbmciXSwgImY1NTQiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTA1LjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDYwLjEgMTgyLjZDNDIuMSAyMDAuNiAzMiAyMjUgMzIgMjUwLjVMMzIgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42em0xMi40IDE3OS40Yy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw0MS40IDQ4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY4LjMtNjguM2MxMS41LTExLjUgMTkuOS0yNS44IDI0LjQtNDEuNWwyLjItNy42LTQ2LTM5LjRjLTIuNS0yLjItNS00LjQtNy40LTYuOGwtMTAuNCAzNi4yeiJdCiAgICB9OwogICAgZmFXYWxraW5nID0gZmFQZXJzb25XYWxraW5nOwogICAgZmFBcnJvd1R1cm5Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXR1cm4tZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJsZXZlbC1kb3duIl0sICJmMTQ5IiwgIk0zMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwbDk2IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMwNi43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxNjAgNDAyLjcgMTYwIDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDY0eiJdCiAgICB9OwogICAgZmFMZXZlbERvd24gPSBmYUFycm93VHVybkRvd247CiAgICBmYVJvYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODczOV0sICJmMDE4IiwgIk0yMjMuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwxLjQgNDIwLjVDLTYuMSA0NTAuNyAxNi44IDQ4MCA0OCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NCAxNzYuMSAwYzMxLjIgMCA1NC4xLTI5LjMgNDYuNi01OS41TDQyNi41IDgwLjZDNDE5LjQgNTIuMSAzOTMuOCAzMiAzNjQuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFTcGlyYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3BpcmFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4MGEiLCAiTTExNS41IDcuNGMxMy42LTExLjMgMzMuOC05LjUgNDUuMSA0LjFzOS41IDMzLjgtNC4xIDQ1LjFDMTAwLjIgMTAzLjUgNjQgMTc1LjIgNjQgMjU2IDY0IDM2MiAxNTAgNDQ4IDI1NiA0NDhzMTkyLTg2IDE5Mi0xOTJjMC03NS4xLTYwLjktMTM2LTEzNi0xMzZTMTc2IDE4MC45IDE3NiAyNTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTQ4LjYgMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzExMiAzMzUuNSAxMTIgMjU2YzAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMHMyMDAgODkuNSAyMDAgMjAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE1NS44IDQ1IDY2LjEgMTE1LjUgNy40eiJdCiAgICB9OwogICAgZmFGYWNlRnJvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzg1LCAiZnJvd24iXSwgImYxMTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem05MC42LTExMy45Yy0yMC40LTI4LTUzLjQtNDYuMS05MC42LTQ2LjFzLTcwLjIgMTguMS05MC42IDQ2LjFjLTcuOCAxMC43LTIyLjggMTMuMS0zMy41IDUuM3MtMTMuMS0yMi44LTUuMy0zMy41QzE1NS43IDMzMCAyMDIuOCAzMDQgMjU2IDMwNHMxMDAuMyAyNiAxMjkuNCA2NS45YzcuOCAxMC43IDUuNCAyNS43LTUuMyAzMy41cy0yNS43IDUuNC0zMy41LTUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93bjIgPSBmYUZhY2VGcm93bjI7CiAgICBmYVdpbmVHbGFzc0VtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtZ2xhc3MtZW1wdHkiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsid2luZS1nbGFzcy1hbHQiXSwgImY1Y2UiLCAiTTY0IDBDNDguNyAwIDM1LjYgMTAuOCAzMi42IDI1LjdMMy4yIDE3M0MxLjEgMTgzLjUgMCAxOTQuMiAwIDIwNWwwIDNjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCAxMTUuMi02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtMTE1LjJDMjY1IDM1MCAzMjAgMjg1LjQgMzIwIDIwOGwwLTNjMC0xMC43LTEuMS0yMS40LTMuMi0zMkwyODcuNCAyNS43QzI4NC40IDEwLjggMjcxLjMgMCAyNTYgMEw2NCAwem0xLjkgMTg1LjZMOTAuMiA2NCAyMjkuOCA2NCAyNTQuMSAxODUuNmMxLjMgNi40IDEuOSAxMi45IDEuOSAxOS40bDAgM2MwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTNjMC02LjUgLjYtMTMgMS45LTE5LjR6Il0KICAgIH07CiAgICBmYVdpbmVHbGFzc0FsdCA9IGZhV2luZUdsYXNzRW1wdHk7CiAgICBmYUNsYXBwZXJib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGFwcGVyYm9hcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTEzMSIsICJNNDQ4IDY0YzIgMCAzLjkgLjEgNS44IC4zbC05NS43IDk1LjcgNjcuOSAwIDcyLTcyYzguOCAxMSAxNCAyNC45IDE0IDQwbDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNzAuMSAwLTk2IDk2IDY3LjkgMCA5NS05NSAxLTEgOTIuMSAwLTk2IDk2IDY3LjkgMCA5NS05NSAxLTEgODYuMSAweiJdCiAgICB9OwogICAgZmFGb3J3YXJkU3RlcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkLXN0ZXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3RlcC1mb3J3YXJkIl0sICJmMDUxIiwgIk0yMSAzNi44YzEyLjktNyAyOC43LTYuMyA0MSAxLjhMMzIwIDIwOC4xIDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ0LjEtMjU4IDE2OS42Yy0xMi4zIDguMS0yOCA4LjgtNDEgMS44UzAgNDU0LjcgMCA0NDBMMCA3MkMwIDU3LjMgOC4xIDQzLjggMjEgMzYuOHoiXQogICAgfTsKICAgIGZhU3RlcEZvcndhcmQgPSBmYUZvcndhcmRTdGVwOwogICAgZmFTcXVhcmVVcFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS11cC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzg1OTksICJleHRlcm5hbC1saW5rLXNxdWFyZS1hbHQiXSwgImYzNjAiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTE2OCAxNjBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzUgMzUtNjcgNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDI0IDI0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY3LTY3IDM1IDM1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTMzIwIDMyMS43IDMyMCAzMTJsMC0xMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEyOCAweiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQgPSBmYVNxdWFyZVVwUmlnaHQ7CiAgICBmYUJvb2tKb3VybmFsV2hpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stam91cm5hbC13aGlsbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiam91cm5hbC13aGlsbHMiXSwgImY2NmEiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yNzQuMSA5OS4yYzIuNi0yLjYgNi43LTMuMSA5LjktMS4xIDMyLjEgMjAgNTMuNCA1NS42IDUzLjQgOTYuMiAwIDYyLjYtNTAuNyAxMTMuMy0xMTMuMyAxMTMuM1MxMTAuNyAyNTYuOSAxMTAuNyAxOTQuM2MwLTQwLjYgMjEuNC03Ni4yIDUzLjQtOTYuMiAzLjEtMiA3LjItMS41IDkuOSAxLjFzMy4xIDYuNyAxLjIgOS44Yy01LjIgOC42LTguMiAxOC43LTguMiAyOS41IDAgMTUuMSA1LjkgMjguOCAxNS41IDM5LjEgMi41IDIuNyAyLjkgNi43IC45IDkuNy00LjcgNy40LTcuNCAxNi4xLTcuNCAyNS41IDAgMjEuNiAxNC4zIDM5LjkgMzQgNDUuOWwxLTI0LjhjLTcuMS00LjQtMTEuOC0xMi4yLTExLjgtMjEuMSAwLTkuNiA1LjUtMTggMTMuNS0yMi4xbDMuMy04MS44Yy4yLTQuMyAzLjctNy43IDgtNy43czcuOCAzLjQgOCA3LjdsMy4zIDgxLjhjOCA0LjEgMTMuNSAxMi40IDEzLjUgMjIuMSAwIDguOS00LjcgMTYuNy0xMS44IDIxLjFsMSAyNC44YzE5LjYtNiAzMy45LTI0LjEgMzQtNDUuNmwwLS42Yy0uMS05LjMtMi43LTE3LjktNy40LTI1LjItMS45LTMuMS0xLjYtNy4xIC45LTkuNyA5LjYtMTAuMiAxNS41LTIzLjkgMTUuNS0zOS4xIDAtMTAuOC0zLTIwLjktOC4yLTI5LjUtMS45LTMuMi0xLjQtNy4yIDEuMi05Ljh6Il0KICAgIH07CiAgICBmYUpvdXJuYWxXaGlsbHMgPSBmYUJvb2tKb3VybmFsV2hpbGxzOwogICAgZmFDaGFtcGFnbmVHbGFzc2VzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYW1wYWduZS1nbGFzc2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzQ2LCAiZ2xhc3MtY2hlZXJzIl0sICJmNzlmIiwgIk0xNTUuNiAxNy4zQzE2MyAzIDE3OS45LTMuNiAxOTUgMS45bDEyNSA0NS42IDEyNS00NS42YzE1LjEtNS41IDMyIDEuMSAzOS40IDE1LjRsNzguOCAxNTIuOWMyOC44IDU1LjggMTAuMyAxMjIuMy0zOC41IDE1Ni42bDMxLjMgODYuMiA0MS0xNWMxNi42LTYgMzUgMi41IDQxIDE5LjFzLTIuNSAzNS0xOS4xIDQxYy00Ny40IDE3LjMtOTQuOCAzNC41LTE0Mi4yIDUxLjgtMTYuNiA2LjEtMzUtMi41LTQxLTE5LjFzMi41LTM1IDE5LjEtNDFsNDEtMTUtMzEuMy04Ni4yYy01OS40IDUuMi0xMTYuMi0zMy45LTEzMC05NS4ybC0xNC42LTY0LjctMTQuNiA2NC43Yy0xMy44IDYxLjMtNzAuNiAxMDAuNC0xMzAgOTUuMmwtMzEuMyA4Ni4yIDQxIDE1YzE2LjYgNi4xIDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMWMtNDcuNC0xNy4zLTk0LjgtMzQuNi0xNDIuMi01MS44LTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxUzI2LjMgMzkyIDQyLjkgMzk4bDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44IDg5LjIgMzIuNSAxMy4xLTU3LjktNzUuMS0yNy40em0yNDAuOSAwbC03NS4xIDI3LjQgMTMuMSA1Ny45IDg5LjItMzIuNS0yNy4yLTUyLjh6Il0KICAgIH07CiAgICBmYUdsYXNzQ2hlZXJzID0gZmFDaGFtcGFnbmVHbGFzc2VzOwogICAgZmFEdW1wc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW1wc3RlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzkzIiwgIk0xMzIuMyA2NEwxMDYuNyAxOTIgMjQgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkwyNi41IDgwLjRDMjkuOCA3MC42IDM5IDY0IDQ5LjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTMxMiA2NGw4Mi43IDAgMjUuNiAxMjgtMTA4LjMgMCAwLTEyOHptMTMxLjcgMGw4MyAwYzEwLjMgMCAxOS41IDYuNiAyMi44IDE2LjRsMjUuMyA3NS45Yy44IDIuNCAxLjIgNSAxLjIgNy42bDAgNC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0bC04Mi43IDAtMjUuNi0xMjh6TTI1LjcgMjQwbDUyNC43IDBjLS40IDIuMS0xMy4zIDczLjQtMzguOSAyMTMuNy0zIDE2LjMtMTcuOSAyNy42LTM0LjQgMjYuMVM0NDggNDY0LjYgNDQ4IDQ0OGwwLTE2LTMyMCAwIDAgMTZjMCAxNi42LTEyLjYgMzAuNC0yOS4xIDMxLjlTNjcuNSA0NzAgNjQuNSA0NTMuN0MzOSAzMTMuMyAyNiAyNDIuMSAyNS43IDI0MHoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwMSIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYUNvbXB1dGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXB1dGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZTUiLCAiTTM0OC44IDMyQzM0MC43IDQ2LjEgMzM2IDYyLjUgMzM2IDgwbDAgMTYtMjcyIDAgMCAyMjQgMjcyIDAgMCA2NC0yNzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyODQuOCAwek0zMzYgNDMyYzAgMTcuNSA0LjcgMzMuOSAxMi44IDQ4TDEyMCA0ODBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjE2IDB6TTQzMiAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MmMwLTI2LjUgMjEuNS00OCA0OC00OHptMjQgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem01NiAxNDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhV2FuZE1hZ2ljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbmQtbWFnaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFnaWMiXSwgImYwZDAiLCAiTTM5OC41IDEyLjJsLTg4LjIgODguMiAxMDEuMyAxMDEuMyA4OC4yLTg4LjJDNTA3LjYgMTA1LjYgNTEyIDk1IDUxMiA4NHMtNC40LTIxLjYtMTIuMi0yOS41TDQ1Ny41IDEyLjJDNDQ5LjYgNC40IDQzOSAwIDQyOCAwcy0yMS42IDQuNC0yOS41IDEyLjJ6TTI3Ni40IDEzNC4zTDEyLjIgMzk4LjVDNC40IDQwNi40IDAgNDE3IDAgNDI4czQuNCAyMS42IDEyLjIgMjkuNWw0Mi4zIDQyLjNDNjIuNCA1MDcuNiA3MyA1MTIgODQgNTEyczIxLjYtNC40IDI5LjUtMTIuMkwzNzcuNyAyMzUuNiAyNzYuNCAxMzQuM3oiXQogICAgfTsKICAgIGZhTWFnaWMgPSBmYVdhbmRNYWdpYzsKICAgIGZhQnJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MDRdLCAiZjVkYyIsICJNMTIwIDU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2bDI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTI5LjggMC01NC45LTIwLjQtNjItNDgtLjcgMC0xLjMgMC0yIDAtNDQuMiAwLTgwLTM1LjgtODAtODAgMC0xOCA2LTM0LjYgMTYtNDgtMTkuNC0xNC42LTMyLTM3LjgtMzItNjQgMC0zMC45IDE3LjYtNTcuOCA0My4yLTcxLjEtNy4xLTEyLTExLjItMjYtMTEuMi00MC45IDAtNDQuMiAzNS44LTgwIDgwLTgwbDAtMjR6bTI3MiAwbDAgMjRjNDQuMiAwIDgwIDM1LjggODAgODAgMCAxNS00LjEgMjktMTEuMiA0MC45IDI1LjcgMTMuMyA0My4yIDQwLjEgNDMuMiA3MS4xIDAgMjYuMi0xMi42IDQ5LjQtMzIgNjQgMTAgMTMuNCAxNiAzMCAxNiA0OCAwIDQ0LjItMzUuOCA4MC04MCA4MC0uNyAwLTEuMyAwLTIgMC03LjEgMjcuNi0zMi4yIDQ4LTYyIDQ4bC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2eiJdCiAgICB9OwogICAgZmFCcmllZmNhc2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWVmY2FzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0NjkiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnptODAgMTYwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTEyIiwgIk0zMDkuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzUwLjggMjcyIDY0IDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5NiAwYy0yMS4yLTI5LjUtMzQuMy02NS4zLTM1LjktMTA0TDI3MiA0MDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgMjAgMGMzNC45LTQ4LjUgOTEuNy04MCAxNTYtODAgMTAuNyAwIDIxLjEgLjkgMzEuMyAyLjVMMzA5LjggOC42ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ29kZUNvbW1pdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWNvbW1pdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzg2IiwgIk0yODggMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xNTYuOC00OEM0MzAgMzYxIDM2NS40IDQxNiAyODggNDE2UzE0NiAzNjEgMTMxLjIgMjg4TDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5OS4yIDBDMTQ2IDE1MSAyMTAuNiA5NiAyODggOTZzMTQyIDU1IDE1Ni44IDEyOGw5OS4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk5LjIgMHoiXQogICAgfTsKICAgIGZhUGVyc29uQnJlYXN0ZmVlZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYnJlYXN0ZmVlZGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTNhIiwgIk0yMjQgMGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNNDM2LjggMzgyLjhMMzczLjUgNDYyYy0xNi42IDIwLjctNDYuOCAyNC4xLTY3LjUgNy41LTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uNy0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOGwwLTM2LjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMwIC44IDAgMS42IC4xIDIuNGwxMDEuNCA1MC43YzIzLjcgMTEuOSAzMy4zIDQwLjcgMjEuNSA2NC40cy00MC43IDMzLjMtNjQuNCAyMS41TDI3LjIgNDI3LjNjLTEuMS0uNS0yLjItMS4xLTMuMy0xLjctNC45LTIuOC05LjItNi40LTEyLjYtMTAuNi00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40LTMuMy0xMi0xLjktMjUuMiA0LjgtMzYuNiAuNi0xLjEgMS4zLTIuMiAyLTMuMkw3NS42IDI1Ni4xYzI2LjctNDAuMSA3MS43LTY0LjEgMTE5LjgtNjQuMWw3NS4yIDBjNDYuNSAwIDkwLjEgMjIuNSAxMTcuMiA2MC4zbDUwLjcgNzAuOWMyLjIgMyA0IDYuMSA1LjUgOS40IDIuOSA2LjcgNC4zIDEzLjggNCAyMC44LS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAweiJdCiAgICB9OwogICAgZmFQZXJzb25SYXlzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1yYXlzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGQiLCAiTTMxMi41IDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdsNDYuMyA2Mi40YzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzMzOC41IDEzMiAyOTguOCAxMTIgMjU2LjUgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZsNDYuMy02Mi40IDAgMjc1LjNjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNy41IDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDgwIDgwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MS41IDdDMzIuMS0yLjMgMTYuOS0yLjMgNy41IDd6bTQ2NCAwbC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDB6TTcuNSA1MDVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtODAgODBjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em00NjQgMGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTgwLTgwYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDgwIDgweiJdCiAgICB9OwogICAgZmFNYW5hdFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFuYXQtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWQ1IiwgIk0xOTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDEuNUM3My4zIDEwOS4zIDAgMTkwLjEgMCAyODhMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTYyLjUgNDQuOC0xMTQuNSAxMDQtMTI1LjhMMTY4IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjkzLjhjNTkuMiAxMS4yIDEwNCA2My4zIDEwNCAxMjUuOGwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOTcuOS03My4zLTE3OC43LTE2OC0xOTAuNUwyMTYgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVNvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJ1bnNvcnRlZCJdLCAiZjBkYyIsICJNMi40IDIwNC4yYzUgMTIgMTYuNiAxOS44IDI5LjYgMTkuOGwzMjAgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0Ljl6bTAgMTAzLjVjLTUgMTItMi4yIDI1LjcgNi45IDM0LjlsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHoiXQogICAgfTsKICAgIGZhVW5zb3J0ZWQgPSBmYVNvcnQ7CiAgICBmYUNpcmNsZVJhZGlhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcmFkaWF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc2MiwgInJhZGlhdGlvbi1hbHQiXSwgImY3YmEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTgwIDBsNjQuMyAwYzguNyAwIDE1LjctNy4xIDE3LjMtMTUuNiA0LjQtMjQuNCAxOC4xLTQ1LjUgMzcuMi01OS43IDcuNC01LjUgMTAuNi0xNS42IDYtMjMuNmwtMzIuNS01Ni4zYy00LjMtNy41LTEzLjktMTAuMy0yMS4yLTUuNS00OC4yIDMxLjUtODEuMyA4NC4yLTg2LjMgMTQ0LjgtLjcgOC44IDYuNSAxNiAxNS4zIDE2em0xMzcuOSA4OS44Yy04LjUtMy43LTE4LjgtMS40LTIzLjUgNi42bC0zMSA1My44Yy00LjMgNy41LTEuOSAxNy4yIDUuOCAyMS4xIDI2LjEgMTMuMiA1NS41IDIwLjcgODYuOCAyMC43czYwLjctNy41IDg2LjgtMjAuN2M3LjctMy45IDEwLjEtMTMuNiA1LjgtMjEuMWwtMzEtNTMuOGMtNC42LTgtMTUtMTAuMy0yMy41LTYuNi0xMS43IDUtMjQuNSA3LjgtMzguMSA3LjhzLTI2LjQtMi44LTM4LjEtNy44ek0zNTAuNCAyNDAuNGMxLjYgOC42IDguNSAxNS42IDE3LjMgMTUuNmw2NC4zIDBjOC44IDAgMTYuMS03LjIgMTUuMy0xNi01LTYwLjYtMzguMS0xMTMuMi04Ni4zLTE0NC44LTcuMy00LjgtMTYuOC0yLTIxLjIgNS41TDMwNy4zIDE1N2MtNC42IDgtMS40IDE4LjEgNiAyMy42IDE5LjEgMTQuMiAzMi43IDM1LjQgMzcuMiA1OS43ek0yNTYgMzA1LjdhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFSYWRpYXRpb25BbHQgPSBmYUNpcmNsZVJhZGlhdGlvbjsKICAgIGZhTGFwdG9wQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtY29kZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWZjIiwgIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4MSAyMDlsLTMxIDMxIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6TTM5MyAxNzVsNDggNDhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYVNpbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDZkIiwgIk0yODggOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAxOTItNjQgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDAtNDBjMC00LjQgMy42LTggOC04bDU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgNDAtNjQgMCAwLTE5MnoiXQogICAgfTsKICAgIGZhQXJyb3dVcEZyb21XYXRlclB1bXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS13YXRlci1wdW1wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YjYiLCAiTTE0NCAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNzYtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA3OS42YzE3LjYtMiAzNiAyLjUgNTEuMyAxNCAzLjQgMi42IDYuMSAxLjQgOS44LS4zbC44LS40YzUuNy0yLjYgMTIuOS02LjkgMjEuNy0xMy41IDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuMy0zMS40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDEwLjctOC4xIDIyLjktMTIuNyAzNS4zLTE0LjFsMC03OS41YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC01NiAwIDAtMTQyLjEgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ5NyAzOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTg4IDg4Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgMCAxNDIuMS0xMzYgMCAwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwxNDQgMzJ6TTQ3NC42IDQ3Ni4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDgyLjMgMTcuNiA0OTAuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6Il0KICAgIH07CiAgICBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtbGluZXMtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWljcm9waG9uZS1hbHQtc2xhc2giXSwgImY1MzkiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNTEgMTUxIDAtMzAuMmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwzMjggODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy0xLjkgMjIuOS0xMS44IDQzLjQtMjYuOSA1OWwzMy45IDMzLjljMjUuNS0yNiA0MS4zLTYxLjYgNDEuMy0xMDAuOWwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDUyLjYtMjEuMSAxMDAuMi01NS4zIDEzNC44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0yOTcuOCAzNjcuN2w0MS40IDQxLjRjLTguOCAyLjQtMTcuOSA0LjMtMjcuMyA1LjRsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzE2OS4zIDQwMi43IDk2IDMyMS45IDk2IDIyNGwwLTQwYzAtNS4xIDEuNi05LjkgNC40LTEzLjhsNDMuNiA0My42IDAgMTAuMmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NCAzLjMgMCA2LjYtLjEgOS44LS4zeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lQWx0U2xhc2ggPSBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoOwogICAgZmFTZXJ2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VydmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMzMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODh6bTIxNiA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTU2IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYVVzZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxMDAsIDYyMTQ0LCA2MjQ3MCwgInVzZXItYWx0IiwgInVzZXItbGFyZ2UiXSwgImYwMDciLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtOTguNS03OS44LTE3OC4zLTE3OC4zLTE3OC4zbC01OS40IDB6Il0KICAgIH07CiAgICBmYVVzZXJBbHQyID0gZmFVc2VyMjsKICAgIGZhVXNlckxhcmdlMiA9IGZhVXNlcjI7CiAgICBmYVNub3dmbGFrZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd2ZsYWtlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwNTIsIDEwMDU0XSwgImYyZGMiLCAiTTI4OC4yIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2Mi4xLTE1LTE1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDQ5IDQ5IDAgNzAuNi02MS4yLTM1LjMtMTcuOS02Ni45Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4zIDk4IDk4LjcgMTEwLjhsNS41IDIwLjUtNTMuNy0zMUMzNS4yIDkxLjUgMTUuNiA5Ni43IDYuOCAxMTJzLTMuNiAzNC45IDExLjcgNDMuN2w1My43IDMxLTIwLjUgNS41Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w2Ni45LTE3LjkgNjEuMiAzNS4zLTYxLjIgMzUuMy02Ni45LTE3LjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDIwLjUgNS41LTUzLjcgMzFDMy4yIDM2NS4xLTIgMzg0LjcgNi44IDQwMHMyOC40IDIwLjYgNDMuNyAxMS43bDUzLjctMzEtNS41IDIwLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDE3LjktNjYuOSA2MS4yLTM1LjMgMCA3MC42LTQ5IDQ5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTUtMTUgMCA2Mi4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Mi4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC03MC42IDYxLjIgMzUuMyAxNy45IDY2LjljMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTUuNS0yMC41IDUzLjcgMzFjMTUuMyA4LjggMzQuOSAzLjYgNDMuNy0xMS43czMuNi0zNC45LTExLjctNDMuN2wtNTMuNy0zMSAyMC41LTUuNWMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTY2LjkgMTcuOS02MS4yLTM1LjMgNjEuMi0zNS4zIDY2LjkgMTcuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTIwLjUtNS41IDUzLjctMzFjMTUuMy04LjggMjAuNi0yOC40IDExLjctNDMuN3MtMjguNC0yMC41LTQzLjctMTEuN2wtNTMuNyAzMSA1LjUtMjAuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTE3LjkgNjYuOS02MS4yIDM1LjMgMC03MC42IDQ5LTQ5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTE1IDE1IDAtNjIuMXoiXQogICAgfTsKICAgIGZhU2t1bGxDcm9zc2JvbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNrdWxsLWNyb3NzYm9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNjksIDk3NjBdLCAiZjcxNCIsICJNMzg0IDE0NEMzODQgNjQuNSAzMTIuNCAwIDIyNCAwUzY0IDY0LjUgNjQgMTQ0YzAgNDcuMSAyNS4xIDg4LjkgNjQgMTE1LjJsMCAyOC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjguOGMzOC45LTI2LjMgNjQtNjguMSA2NC0xMTUuMnpNMTYwIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0NS41IDMzOS43Yy02LjgtMTYuMy0yNS41LTI0LTQxLjgtMTcuMkwyMjQgMzk3LjMgNDQuMyAzMjIuNWMtMTYuMy02LjgtMzUgLjktNDEuOCAxNy4ycy45IDM1IDE3LjIgNDEuOEwxNDAuOCA0MzIgMTkuNyA0ODIuNUMzLjQgNDg5LjMtNC4zIDUwOCAyLjUgNTI0LjNzMjUuNSAyNCA0MS44IDE3LjJMMjI0IDQ2Ni43IDQwMy43IDU0MS41YzE2LjMgNi44IDM1LS45IDQxLjgtMTcuMnMtLjktMzUtMTcuMi00MS44TDMwNy4yIDQzMiA0MjguMyAzODEuNWMxNi4zLTYuOCAyNC0yNS41IDE3LjItNDEuOHoiXQogICAgfTsKICAgIGZhUGVzb1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVzby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjIiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCA2NC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMi0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjNjUuNiAwIDEyMi0zOS41IDE0Ni43LTk2bDM3LjMgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOCAwYy41LTUuMyAuOC0xMC42IC44LTE2cy0uMy0xMC43LS44LTE2bDI0LjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzcuMyAwQzM2MiA3MS41IDMwNS42IDMyIDI0MCAzMkwxMTIgMzJ6bTE5OS42IDk2bC0xNjcuNiAwIDAtMzIgOTYgMGMyOC40IDAgNTQgMTIuNCA3MS42IDMyek0xNDQgMTc2bDE5MC43IDBjLjkgNS4yIDEuMyAxMC41IDEuMyAxNnMtLjUgMTAuOC0xLjMgMTZsLTE5MC43IDAgMC0zMnptMTY3LjYgODBjLTE3LjYgMTkuNi00My4xIDMyLTcxLjYgMzJsLTk2IDAgMC0zMiAxNjcuNiAweiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZS1nbGFzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyNzg2M10sICJmNGUzIiwgIk0zMi42IDI1LjdDMzUuNiAxMC44IDQ4LjcgMCA2NCAwTDI1NiAwYzE1LjMgMCAyOC40IDEwLjggMzEuNCAyNS43TDMxNi44IDE3M2MyLjEgMTAuNSAzLjIgMjEuMiAzLjIgMzJsMCAzYzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTE1LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNS4yQzU1IDM1MCAwIDI4NS40IDAgMjA4bDAtM2MwLTEwLjcgMS4xLTIxLjQgMy4yLTMyTDMyLjYgMjUuN3pNNzcuNCAxMjhsMTY1LjEgMC0xMi44LTY0LTEzOS41IDAtMTIuOCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWhhbGYiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjc3NzcsICJ0ZW1wZXJhdHVyZS0yIiwgInRoZXJtb21ldGVyLTIiLCAidGhlcm1vbWV0ZXItaGFsZiJdLCAiZjJjOSIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtOTIuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMiA9IGZhVGVtcGVyYXR1cmVIYWxmOwogICAgZmFUaGVybW9tZXRlcjIgPSBmYVRlbXBlcmF0dXJlSGFsZjsKICAgIGZhVGhlcm1vbWV0ZXJIYWxmID0gZmFUZW1wZXJhdHVyZUhhbGY7CiAgICBmYVRpY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aWNrZXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MDNdLCAiZjE0NSIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA2NEMwIDIwMC44IDcuNCAyMDcuNyAxNS43IDIxMC42IDM0LjUgMjE3LjEgNDggMjM1IDQ4IDI1NnMtMTMuNSAzOC45LTMyLjMgNDUuNEM3LjQgMzA0LjMgMCAzMTEuMiAwIDMyMGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC04LjgtNy40LTE1LjctMTUuNy0xOC42LTE4LjgtNi41LTMyLjMtMjQuNC0zMi4zLTQ1LjRzMTMuNS0zOC45IDMyLjMtNDUuNGM4LjMtMi45IDE1LjctOS44IDE1LjctMTguNmwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMzM2bDAtMTYwLTI1NiAwIDAgMTYwIDI1NiAwek0xMTIgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yODggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il0KICAgIH07CiAgICBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTk4IiwgIk00OTYgNTc2YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNODEgNTI5Yy05LjQgOS4zLTI0LjUgOS4zLTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOUw4MSA1Mjl6bTMwLjItMjk0LjRjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4zIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2wxMiAxMmMtLjggNy0xLjIgMTQuMi0xLjIgMjEuNCAwIDIwIDMgMzkuMyA4LjcgNTcuNC0zNi44IDIxLjgtODUgMTctMTE2LjYtMTQuN0wxNjUuNiA0NDQuMyA4MSA1MjlDNjkuNyA1MTcuNyA1OC40IDUwNi4zIDQ3IDQ5NWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xek00OTYgNDc2YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptMC0xNDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNiA4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6TTIxNS4yIDEzMC42YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDI0LjItNS45IDUwLjEtMi4xIDcxLjkgMTAuOC0zMi4yIDI0LjktNTYuMiA1OS44LTY3LjQgMTAwLjEtMy44LTIuOC03LjUtNi0xMS05LjVsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNTI2LjcgMTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDAgOC44IDguOCA5LjMgMjIuNyAxLjcgMzIuMUw1NjAuNiA0OSA0NDYuMiAxNjMuNGM3LjcgMSAxNS4zIDMgMjIuNSA1LjlMNTI3IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljMy4yIDMuMiA0LjcgNy40IDQuNyAxMS42LTE3LjctNS40LTM2LjUtOC4zLTU1LjktOC4zLTM0LjIgMC02Ni4zIDguOS05NC4xIDI0LjZsLTkyLjctOTIuN2MtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMUw0NjUgNDkgNDA2LjcgMTA3LjNjMi44IDcuMSA0LjcgMTQuNSA1LjggMjIuMUw1MjYuNyAxNXoiXQogICAgfTsKICAgIGZhQXJyb3dzVHVyblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0YzAiLCAiTTMxMy40LTYuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDEyOCAxMjggMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgMjQxLjcgMCAyMjRsMC0zMkMwIDEyMS4zIDU3LjMgNjQgMTI4IDY0bDIxMC43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptLTk2IDI1NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDM4NCA5NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFDYW5keUNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FuZHktY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg2IiwgIk00MjEuOCAzOS42QzQ1MiA4NS4yIDQ1Ni41IDE0Mi45IDQzNS4xIDE5MmwtMTY1LjQgMCA0MS40LTQxLjRjLjgtLjggMS41LTEuNiAyLjItMi40TDQyMS44IDM5LjZ6TTI2OCAxMDIuOWMtLjggLjctMS42IDEuNC0yLjQgMi4ybC0yOC4xIDI4LjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNUwxNzUgMTQuNkMyMjkuOS00MC4yIDMxNC41LTQ2LjcgMzc2LjUtNS42TDI2OCAxMDIuOXpNMTI1LjcgMzM2bDgwLTgwIDE4MSAwLTgyLjUgODIuNSAwLTIuNS0xNzguNSAwem0xMTcgNjRMMTQxLjQgNTAxLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNWwxMC43LTEwLjcgMTgxIDB6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlZWxjaGFpciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTkzIiwgIk0xMzYgNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTcuOSAxOTcuNmwxMi42IDYzYy0zOC42IDEyLjQtNjYuNSA0OC43LTY2LjUgOTEuNCAwIDUzIDQzIDk2IDk2IDk2IDM1LjYgMCA2Ni43LTE5LjQgODMuMy00OC4yIDIuMyAuMSA0LjYgLjIgNyAuMmw0LjEgMGMxIDAgMi4xIDAgMy4xIDBsNTUuMiAwYy0yMC40IDY0LjktODEgMTEyLTE1Mi43IDExMi04OC40IDAtMTYwLTcxLjYtMTYwLTE2MCAwLTczLjggNTAtMTM1LjkgMTE3LjktMTU0LjR6bTE0OC42LTI4LjFsMjMuNyAxMTguNSA2MC41IDBjMzMuMyAwIDYzLjIgMjAuNyA3NC45IDUxLjlsMjUuNSA2OCAxOC43LTYuMmMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNWwtNDggMTZjLTE2LjMgNS40LTM0LTMtNDAuMS0xOS4xbC0zNi4zLTk2LjljLTIuMy02LjItOC4zLTEwLjQtMTUtMTAuNGwtODYuMSAwYy0uNCAwLS44IDAtMS4zIDBsLTEzLjEgMGMtMzAuNSAwLTU2LjgtMjEuNS02Mi44LTUxLjRMMTY1LjMgMTg5LjdjLTYuNC0zMS45IDE4LTYxLjcgNTAuNi02MS43IDI0LjYgMCA0NS44IDE3LjQgNTAuNiA0MS41eiJdCiAgICB9OwogICAgZmFTcGVsbENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwZWxsLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4OTEiLCAiTTEyMCAzMmMtNDguNiAwLTg4IDM5LjQtODggODhsMCAxNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTY4YzAtNDguNi0zOS40LTg4LTg4LTg4bC0xNiAwem00MCAxMjhsLTY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDB6TTMwNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMGM0OC42IDAgODgtMzkuNCA4OC04OCAwLTIzLjYtOS4zLTQ1LTI0LjQtNjAuOCAxMC4zLTE0LjQgMTYuNC0zMi4xIDE2LjQtNTEuMiAwLTQ4LjYtMzkuNC04OC04OC04OGwtNjQgMHptNjQgMTEybC0zMiAwIDAtNDggMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMzM2IDI1NmwwLTQ4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDB6bTIzMyA4NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTEwNS43IDEzMi4xLTM4LjctMzguN2MtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi40IDYuNCAxNS4zIDkuOCAyNC40IDkuM3MxNy41LTQuOSAyMy4yLTEyTDU2OSAzNDB6Il0KICAgIH07CiAgICBmYVZvbHVtZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtb2ZmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwMjYiLCAiTTk2IDM1MmwtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw0OCAwIDEzNC4xLTExOS4yYzYuNC01LjcgMTQuNi04LjggMjMuMS04LjggMTkuMiAwIDM0LjggMTUuNiAzNC44IDM0LjhsMCAzNzguNGMwIDE5LjItMTUuNiAzNC44LTM0LjggMzQuOC04LjUgMC0xNi43LTMuMS0yMy4xLTguOEw5NiAzNTJ6Il0KICAgIH07CiAgICBmYUx1bmdzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImx1bmdzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NzI5XSwgImY2MDQiLCAiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0MS45LTMyIDE5LjIgMC0xMTYuN2MwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMjIgMCA0My43LTUuMSA2My40LTE1bDUtMi41YzM3LjQtMTguNyA2MS01Ni45IDYxLTk4LjhsMC0xMjggNjQtMzguNCA2NCAzOC40IDAgMTI4YzAgNDEuOCAyMy42IDgwLjEgNjEgOTguOGw1IDIuNWMxOS43IDkuOCA0MS40IDE1IDYzLjQgMTUgNTIuMiAwIDk0LjUtNDIuMyA5NC41LTk0LjVsMC02LjJjMC0xMTEuMS0zNi43LTIxOS0xMDQuNC0zMDdMNDI4LjkgNDguN2MtOC4xLTEwLjYtMjAuNy0xNi43LTM0LTE2LjctMjMuNyAwLTQyLjkgMTkuMi00Mi45IDQyLjlsMCAxMTguMi0zMi0xOS4yIDAtMTQxLjl6Il0KICAgIH07CiAgICBmYUJvb2ttYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rbWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCAiZjAyZSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0ODBjMCAxMS41IDYuMiAyMi4yIDE2LjIgMjcuOHMyMi4zIDUuNSAzMi4yLS40TDE5MiA0MjEuMyAzMzUuNSA1MDcuNGM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMzg0IDQ5MS41IDM4NCA0ODBsMC00MTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHoiXQogICAgfTsKICAgIGZhQmFyY29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMmEiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnptMjA4LThsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptLTk2IDBsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhTGlzdE9sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3Qtb2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC0xLTIiLCAibGlzdC1udW1lcmljIl0sICJmMGNiIiwgIk0wIDcyQzAgNTguOCAxMC43IDQ4IDI0IDQ4bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMDQgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtODAtMjQgMEMxMC43IDk2IDAgODUuMyAwIDcyek0zMC40IDMwMS4yQzQxLjggMjkyLjYgNTUuNyAyODggNzAgMjg4bDQuOSAwYzMzLjcgMCA2MS4xIDI3LjQgNjEuMSA2MS4xIDAgMTkuNi05LjQgMzcuOS0yNS4yIDQ5LjRsLTI0IDE3LjUgMzMuMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05MC43IDBDMTMuMSA0NjQgMCA0NTAuOSAwIDQzNC43IDAgNDI1LjMgNC41IDQxNi41IDEyLjEgNDExbDcwLjUtNTEuM2MzLjQtMi41IDUuNC02LjQgNS40LTEwLjYgMC03LjItNS45LTEzLjEtMTMuMS0xMy4xTDcwIDMzNmMtMy45IDAtNy43IDEuMy0xMC44IDMuNkwzOC40IDM1NS4yYy0xMC42IDgtMjUuNiA1LjgtMzMuNi00LjhTLTEgMzI0LjggOS42IDMxNi44bDIwLjgtMTUuNnpNMjI0IDY0bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDE2MGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUxpc3QxMiA9IGZhTGlzdE9sOwogICAgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sOwogICAgZmFGaWxlQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTVhMSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhQ3ViZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjdWJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjIiLCAiTTIyNC4zLTIuNWMxOS44LTExLjQgNDQuMi0xMS40IDY0IDBMNDY0LjIgOTljMTkuOCAxMS40IDMyIDMyLjYgMzIgNTUuNGwwIDIwM2MwIDIyLjktMTIuMiA0NC0zMiA1NS40TDI4OC4zIDUxNC41Yy0xOS44IDExLjQtNDQuMiAxMS40LTY0IDBMNDguNSA0MTNjLTE5LjgtMTEuNC0zMi0zMi42LTMyLTU1LjRsMC0yMDNjMC0yMi45IDEyLjItNDQgMzItNTUuNEwyMjQuMy0yLjV6bTIwNy44IDM2MGwwLTE2Ni4xLTE0My44IDgzIDAgMTY2LjEgMTQzLjgtODN6Il0KICAgIH07CiAgICBmYVRhcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFwZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGRiIiwgIk00MTIuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MCAwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0UzMyIDEzMi4zIDMyIDI1NiAxMzIuMyA0ODAgMjU2IDQ4MGwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTMxLjIgMHpNMjU2IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptNDggOTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhQm9tYiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib21iIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTYzXSwgImYxZTIiLCAiTTQ4MC0xNmM2LjkgMCAxMyA0LjQgMTUuMiAxMC45bDEzLjUgNDAuNCA0MC40IDEzLjVDNTU1LjYgNTEgNTYwIDU3LjEgNTYwIDY0cy00LjQgMTMtMTAuOSAxNS4ybC00MC40IDEzLjUtMTMuNSA0MC40QzQ5MyAxMzkuNiA0ODYuOSAxNDQgNDgwIDE0NHMtMTMtNC40LTE1LjItMTAuOWwtMTMuNS00MC40LTQwLjQtMTMuNUM0MDQuNCA3NyA0MDAgNzAuOSA0MDAgNjRzNC40LTEzIDEwLjktMTUuMmw0MC40LTEzLjUgMTMuNS00MC40QzQ2Ny0xMS42IDQ3My4xLTE2IDQ4MC0xNnpNMzIxLjQgOTcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTAuOSAxMC45YzcuOSAyMiAxMi4yIDQ1LjcgMTIuMiA3MC41IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFMzMiA0MTguOSAzMiAzMDQgMTI1LjEgOTYgMjQwIDk2YzI0LjcgMCA0OC41IDQuMyA3MC41IDEyLjNsMTAuOS0xMC45ek0xNDQgMzA0YzAtNTMgNDMtOTYgOTYtOTYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6Il0KICAgIH07CiAgICBmYVNjYWxlVW5iYWxhbmNlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2FsZS11bmJhbGFuY2VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhbGFuY2Utc2NhbGUtbGVmdCJdLCAiZjUxNSIsICJNNTE5LjggNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxNi4zLTMuOSA0OTkuNiAxLjZsLTExMyAzNy43Yy0xMy45LTIzLjUtMzkuNi0zOS4zLTY4LjktMzkuMy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDMgLjIgNS45IC41IDguOEwxMTUuNiAxMjkuNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDEzNS41LTQ1LjJjNC41IDMuMiA5LjMgNS45IDE0LjQgOC4ybDAgMzI2LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMjk0LjdjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM3LjMgMjg4bDcyLjQtMTI0LjIgNzIuNCAxMjQuMi0xNDQuOSAwem03Mi40IDk2YzYyLjkgMCAxMTUuMi0zNCAxMjYtNzguOSAyLjYtMTEtMS0yMi4zLTYuNy0zMi4xTDUzMy44IDEwOS44Yy01LTguNi0xNC4yLTEzLjgtMjQuMS0xMy44cy0xOS4xIDUuMy0yNC4xIDEzLjhMMzkwLjQgMjczLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjEgMTAuOCA0NC44IDYzLjEgNzguOSAxMjYgNzguOXpNMTI2LjggMjkxLjhsNzIuNCAxMjQuMi0xNDQuOSAwIDcyLjQtMTI0LjJ6TS45IDQzMy4xQzExLjcgNDc4IDY0IDUxMiAxMjYuOCA1MTJzMTE1LjItMzQgMTI2LTc4LjljMi42LTExLTEtMjIuMy02LjctMzIuMUwxNTAuOSAyMzcuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDcuNiA0MDEuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMXoiXQogICAgfTsKICAgIGZhQmFsYW5jZVNjYWxlTGVmdCA9IGZhU2NhbGVVbmJhbGFuY2VkOwogICAgZmFTcXVhcmVDYXJldExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1sZWZ0Il0sICJmMTkxIiwgIk0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2ek0xMjggMjU2YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40UzI4OCAxNDIuNSAyODggMTUybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZUxlZnQyID0gZmFTcXVhcmVDYXJldExlZnQyOwogICAgZmFSdWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWxlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIwN10sICJmNTQ1IiwgIk0yMDkuMSA1MTYuMmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjguMSA0MDMuMWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsMTctMTcgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDMzLjktMzMuOSA1MC45IDUwLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01MC45LTUwLjkgMzMuOS0zMy45IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMTctMTdjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBMNTQ4LjUgMTA4LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjA5LjEgNTE2LjJ6Il0KICAgIH07CiAgICBmYUkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwNV0sICI0OSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDk2IDAgMCAzMjAtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMCAwLTMyMCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFWb2x1bWVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm9sdW1lLW11dGUiLCAidm9sdW1lLXRpbWVzIl0sICJmNmE5IiwgIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzY3IDE3NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTQ3IDQ3LTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhVm9sdW1lTXV0ZSA9IGZhVm9sdW1lWG1hcms7CiAgICBmYVZvbHVtZVRpbWVzID0gZmFWb2x1bWVYbWFyazsKICAgIGZhQXJjaHdheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcmNod2F5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTciLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnptMCAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDAgMC0xMjhjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDEyOCAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI3Mi00NDggMCAwIDI3MnoiXQogICAgfTsKICAgIGZhUGVyc29uRGlnZ2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZGlnZ2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkaWdnaW5nIl0sICJmODVlIiwgIk0yMDggNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMC41IDE4MS4zYzUuOS0xMS45IDIwLjMtMTYuNyAzMi4yLTEwLjdsMjQuNiAxMi4zIDEyLjItMjAuNGMxOC45LTMxLjUgNTMuMi01MC41IDg5LjYtNTAuNSA0Ni4yIDAgODcuNyAzMC41IDEwMC41IDc1LjRsMzIuMiAxMTIuNyA5Mi45IDQ2LjQgMjUuOC00M2M1LjgtOS42IDE2LjItMTUuNSAyNy40LTE1LjVzMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTNTU1LjUgNTEyIDU0NCA1MTJsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4yTDM3MCAzODcuOCAyMS4zIDIxMy41Yy0xMS45LTUuOS0xNi43LTIwLjMtMTAuNy0zMi4yek05NC4zIDMwNy40bDExMiA1NmMxMC44IDUuNCAxNy43IDE2LjUgMTcuNyAyOC42bDAgODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OC4yLTYxLjMtMzAuNy0zNi4zIDEwOWMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMlMtMy45IDQ4Ni42IDEuNyA0NjkuOWw0OC0xNDRjMi45LTguOCA5LjUtMTUuOSAxOC4xLTE5LjRzMTguMy0zLjIgMjYuNiAuOXoiXQogICAgfTsKICAgIGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZzsKICAgIGZhR2F1Z2VIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdWdlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjQ2MSwgInRhY2hvbWV0ZXItYWx0IiwgInRhY2hvbWV0ZXItYWx0LWZhc3QiXSwgImY2MjUiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0yNTYgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMTYuMi02LTMxLjEtMTYtNDIuM2w2OS41LTEzOC45YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMnMtMjYuMy0xLjEtMzIuMiAxMC43TDI2MS4xIDI4OC4yYy0xLjctLjEtMy40LS4yLTUuMS0uMi0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFUYWNob21ldGVyQWx0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYVRhY2hvbWV0ZXJBbHRGYXN0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYUdlbmRlcmxlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VuZGVybGVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjJkIiwgIk0xOTIgMTI4YTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCAzMjBhMTkyIDE5MiAwIDEgMCAwLTM4NCAxOTIgMTkyIDAgMSAwIDAgMzg0eiJdCiAgICB9OwogICAgZmFDbG91ZFN1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5OTI1XSwgImY2YzQiLCAiTTQ1My42LTE0LjhjNC45IDIgOC41IDYuNCA5LjUgMTEuNkw0ODAgODAgNTYzLjIgOTYuOGM1LjIgMS4xIDkuNSA0LjYgMTEuNiA5LjVzMS41IDEwLjUtMS40IDE0LjlsLTQ2LjkgNzAuNyA0Ni45IDcwLjdjMi45IDQuNCAzLjUgMTAgMS40IDE0LjlzLTYuNCA4LjUtMTEuNiA5LjVMNTAxIDI5OS43Yy0xMS45LTguNy0yNS4xLTE1LjYtMzkuNC0yMC40LTIuNS0xMi43LTYuOC0yNC43LTEyLjctMzUuNyA5LjUtMTQuOSAxNS4xLTMyLjYgMTUuMS01MS43IDAtNTMtNDMtOTYtOTYtOTYtNDcuOSAwLTg3LjYgMzUuMS05NC44IDgwLjktMjYuNS0yMC4zLTU5LjUtMzIuNS05NS40LTMyLjlsLTE1LjEtMjIuN2MtMi45LTQuNC0zLjUtMTAtMS40LTE0LjlzNi40LTguNSAxMS42LTkuNUwyNTYgODAgMjcyLjgtMy4yYzEuMS01LjIgNC42LTkuNSA5LjUtMTEuNnMxMC41LTEuNSAxNC45IDEuNEwzNjggMzMuNiA0MzguNy0xMy4zYzQuNC0yLjkgMTAtMy41IDE0LjktMS40ek00MTYgMTkyYzAgMy44LS40IDcuNS0xLjMgMTEuMS0yMS43LTE3LTQ5LTI3LjEtNzguNy0yNy4xLTQuNiAwLTkuMSAuMi0xMy41IC43IDYuNC0xOSAyNC40LTMyLjcgNDUuNS0zMi43IDI2LjUgMCA0OCAyMS41IDQ4IDQ4ek05NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDUxMnoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTRdLCAiZjA2MSIsICJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYweiJdCiAgICB9OwogICAgZmFIYW5kc2hha2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTMwOSwgNjI2NjIsICJoYW5kc2hha2UtYWx0IiwgImhhbmRzaGFrZS1zaW1wbGUiXSwgImYyYjUiLCAiTTI2OC45IDg1LjJMMTUyLjMgMjE0LjhjLTQuNiA1LjEtNC40IDEzIC41IDE3LjkgMzAuNSAzMC41IDgwIDMwLjUgMTEwLjUgMGwzMS44LTMxLjhjNC4yLTQuMiA5LjUtNi41IDE0LjktNi45IDYuOC0uNiAxMy44IDEuNyAxOSA2LjlMNTA1LjYgMzc2IDU3NiAzMjAgNTc2IDMyIDQ2NCA5NiA0NDAuMiA4MC4xQzQyNC40IDY5LjYgNDA1LjkgNjQgMzg2LjkgNjRsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxODIuN0wyMjMuNCA2NCAxODMuOCA2NGMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMTEyIDk2IDAgMzIgMCAzMjAgMTU2LjQgNDUwLjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzE5LjEgMCAzNy44LTQuMyA1NC44LTEyLjNMMzU5IDQ0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMyIDMyIDE3LjUtMTcuNWM4LjktOC45IDExLjUtMjEuOCA3LjYtMzMuMWwtMTM3LjktMTM2LjgtMTQuOSAxNC45Yy00OS4zIDQ5LjMtMTI5LjEgNDkuMy0xNzguNCAwLTIzLTIzLTIzLjktNTkuOS0yLjItODR6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFsdDIgPSBmYUhhbmRzaGFrZTI7CiAgICBmYUhhbmRzaGFrZVNpbXBsZTIgPSBmYUhhbmRzaGFrZTI7CiAgICBmYVBlcnNvblNraWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2tpaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTk3NSwgInNraWluZyJdLCAiZjdjOSIsICJNNDE2IDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMi43IDMwMC45YzYuMS0xMS44IDIwLjYtMTYuMyAzMi40LTEwLjJsMTk3LjggMTAyLjcgNjIuMy04Ny4yLTgyLTkyLjJjLTExLTEyLjQtMTYuMi0yNy41LTE2LjItNDIuNGwxMTEuNiA1My40IDQyLjkgNDguMmMxNC45IDE2LjcgMTYuMiA0MS42IDMuMiA1OS44bC02NC40IDkwLjIgMTI4LjMgNjYuNmMxMy42IDcuMSAyOS44IDcuMiA0My42IC4zbDE1LjItNy42YzExLjktNS45IDI2LjMtMS4xIDMyLjIgMTAuN3MxLjEgMjYuMy0xMC43IDMyLjJsLTE1LjIgNy42Yy0yNy41IDEzLjctNTkuOSAxMy41LTg3LjItLjdMMTIuOSAzMzMuM0MxLjIgMzI3LjItMy40IDMxMi43IDIuNyAzMDAuOXpNMTAzIDQ5LjZsMTggOC43IDguNy0xNy40YzQtNy45IDEzLjYtMTEuMSAyMS41LTcuMnMxMS4xIDEzLjYgNy4yIDIxLjVsLTguNSAxNyA4NC44IDQxIC40LS4yIDc2LjEtMzMuOGMzMS4zLTEzLjkgNjcuOS0uNyA4My4yIDI5LjlsMjguOSA1Ny44IDY4LjcgMjcuNWMxNi40IDYuNiAyNC40IDI1LjIgMTcuOCA0MS42cy0yNS4yIDI0LjQtNDEuNiAxNy44TDM5My44IDIyNGMtMTAuOS00LjQtMTkuOC0xMi42LTI1LjEtMjMuMWwtMTEuNS0yMy4xYy0xNi40IDkuNC0yNS45IDE0LjgtMjguNSAxNi4zbC03LjYtMy43LTE4NS42LTg5LjYtOS4yIDE4LjNjLTQgNy45LTEzLjYgMTEuMS0yMS41IDcuMnMtMTEuMS0xMy42LTcuMi0yMS41bDktMTcuOS0xNy42LTguNUM4MS4xIDc0LjYgNzcuOCA2NSA4MS42IDU3Uzk1IDQ1LjcgMTAzIDQ5LjZ6Il0KICAgIH07CiAgICBmYVNraWluZyA9IGZhUGVyc29uU2tpaW5nOwogICAgZmFCcmlkZ2VXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2Utd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRjZSIsICJNNjQgNjRsNTEyIDAgMCAxMTJjLTM3LjYgOS40LTY0IDQzLjItNjQgODJsMCA3Ni40Yy0yMS05LjctNDMuNS0xNC41LTY2LTE0LjQtMTAgLjEtMjAuMSAxLjEtMzAgMy4xbDAtMzUuMWMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLjdjLTUuMy0uNS0xMC43LS44LTE2LS43LTI3LjcgLjItNTUuNCA3LjgtODAgMjNsMC04NWMwLTM4LjgtMjYuNC03Mi42LTY0LTgyTDY0IDY0ek00MDMuNCA0NDQuMUMzNzkuMSA0NjIuMyAzNTEuMSA0ODAgMzIwIDQ4MHMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nTmdvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLW5nbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ3IiwgIk0xMjggMEM5Mi43IDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0OCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDIwOCAwIDAtMjcyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMzA0IDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTUyMCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTgwYzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4MGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwem0tMTY4IDBsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtMjRjMC0xMS05LTIwLTIwLTIwbC04IDBjLTExIDAtMjAgOS0yMCAyMCAwIDYuNSAzLjEgMTIuNCA4IDE2bDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwyMC40IDBjMS45IDkuMSA5LjkgMTYgMTkuNiAxNiAxMSAwIDIwLTkgMjAtMjAgMC0xOS45LTE2LjEtMzYtMzYtMzZsLTI0IDBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0em0tOTAuMS0zMi45Yy00LjEtOC4zLTEzLjUtMTIuNy0yMi41LTEwLjVTMjIwIDM5MC43IDIyMCA0MDBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00My4zIDI2LjEgNTIuMmM0LjEgOC4zIDEzLjUgMTIuNyAyMi41IDEwLjVTMzI0IDUzNy4zIDMyNCA1MjhsMC0xMjhjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgNDMuMy0yNi4xLTUyLjJ6Il0KICAgIH07CiAgICBmYUlnbG9vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlnbG9vIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3YWUiLCAiTTMyMCAzMy44bDAgMTI2LjItMjcxLjUgMGM1MS43LTc3LjIgMTM5LjYtMTI4IDIzOS41LTEyOCAxMC44IDAgMjEuNSAuNiAzMiAxLjh6TTM2OCAxNjBsMC0xMTYuN2M2NiAxOSAxMjIuMiA2MSAxNTkuNSAxMTYuN0wzNjggMTYwek0yMi42IDIwOGw3My40IDAgMCAxMTItOTYgMGMwLTM5LjcgOC03Ny42IDIyLjYtMTEyek0xNzYgMzIwbC0zMiAwIDAtMTEyIDI4OCAwIDAgMTEyLTMyIDAgMCA0OCAxNzYgMCAwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02NCAxNzYgMCAwLTQ4em0zMDQgMGwwLTExMiA3My40IDBDNTY4IDI0Mi40IDU3NiAyODAuMyA1NzYgMzIwbC05NiAwek0yODggMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYUNpcmNsZURvbGxhclRvU2xvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZG9sbGFyLXRvLXNsb3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9uYXRlIl0sICJmNGI5IiwgIk05NiAyMjRhMTkyIDE5MiAwIDEgMSAzODQgMCAxOTIgMTkyIDAgMSAxIC0zODQgMHptMTc2LTkybDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDI0OCAyNzJjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6TTQ4IDM0NGwwIDEwNGMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFEb25hdGUgPSBmYUNpcmNsZURvbGxhclRvU2xvdDsKICAgIGZhWSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTIxXSwgIjU5IiwgIk01OCA0NS40QzQ3LjggMzEgMjcuOCAyNy43IDEzLjQgMzhTLTQuMyA2OC4yIDYgODIuNkwxNjAgMjk4LjMgMTYwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ5LjcgMTU0LTIxNS43YzEwLjMtMTQuNCA2LjktMzQuNC03LjQtNDQuNlMzMzYuMiAzMSAzMjYgNDUuNEwxOTIgMjMyLjkgNTggNDUuNHoiXQogICAgfTsKICAgIGZhRmFjZVNtaWxlV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTIxLCAic21pbGUtd2luayJdLCAiZjRkYSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTbWlsZVdpbmsyID0gZmFGYWNlU21pbGVXaW5rMjsKICAgIGZhRGljZUZvdXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1mb3VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1OV0sICJmNTI0IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zNTIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludFRlYXJzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5MzE1LCAiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwgImY1ODYiLCAiTTU2MCAzNS40YzAgMjUuNi0xOC44IDQ3LjMtNDQuMSA1MC45TDQ2OS4xIDkzYy0xMC42IDEuNS0xOS42LTcuNS0xOC4xLTE4LjFsNi43LTQ2LjdDNDYxLjMgMi44IDQ4My0xNiA1MDguNi0xNiA1MzctMTYgNTYwIDcgNTYwIDM1LjR6TTQwMy41IDY4LjFjLTYgNDIuMiAzMC4yIDc4LjQgNzIuNCA3Mi40bDM3LjgtNS40QzU2NS43IDIzMiA1NTAuOCAzNTUuMyA0NjkgNDM3cy0yMDUgOTYuNi0zMDEuOSA0NC43bDUuNC0zNy44YzYtNDIuMi0zMC4yLTc4LjQtNzIuNC03Mi40bC0zNy44IDUuNEMxMC4zIDI4MCAyNS4yIDE1Ni43IDEwNyA3NVMzMTItMjEuNyA0MDguOSAzMC4zbC01LjQgMzcuOHpNNDE3LjggMjAxYy0xOS4xIDM2LjQtNDUuNiA3Mi43LTc4LjkgMTA2cy02OS42IDU5LjgtMTA2IDc4LjljLTExLjEgNS44LTEyLjQgMjEuNC0xLjEgMjYuNiA1OS4yIDI3LjUgMTMxLjggMTYuOCAxODAuNi0zMnM1OS41LTEyMS40IDMyLTE4MC42Yy01LjMtMTEuMy0yMC44LTEwLTI2LjYgMS4xek0xMTMuOSAyNzAuNmMxLjcgOCA5IDEzLjQgMTcuMSAxMi43bDQzLjEtMy45LTMuOSA0My4xYy0uNyA4LjEgNC43IDE1LjUgMTIuNyAxNy4xczE1LjktMi45IDE4LjQtMTAuNmwyOC04NC42YzEuOS01LjcgLjQtMTIuMS0zLjktMTYuM3MtMTAuNi01LjgtMTYuMy0zLjlsLTg0LjYgMjhjLTcuNyAyLjYtMTIuMyAxMC41LTEwLjYgMTguNXpNMzE1LjIgOTkuMWMuNy04LjEtNC43LTE1LjUtMTIuNy0xNy4xcy0xNS45IDIuOS0xOC41IDEwLjZsLTI4IDg0LjZjLTEuOSA1LjctLjQgMTIuMSAzLjkgMTYuM3MxMC42IDUuOCAxNi4zIDMuOWw4NC42LTI4YzcuNy0yLjYgMTIuMy0xMC41IDEwLjYtMTguNHMtOS0xMy40LTE3LjEtMTIuN2wtNDMuMSAzLjkgMy45LTQzLjF6TTYwLjEgNDI1LjdsNDYuNy02LjdjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0MxMTQuNyA1MDkuMiA5MyA1MjggNjcuNCA1MjggMzkgNTI4IDE2IDUwNSAxNiA0NzYuNiAxNiA0NTEgMzQuOCA0MjkuMyA2MC4xIDQyNS43eiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50VGVhcnMyID0gZmFGYWNlR3JpblNxdWludFRlYXJzMjsKICAgIGZhRmlsZUF1ZGlvMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWF1ZGlvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzciLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41em01My44IDE4NS4yYy05LjEtNi4zLTIxLjUtNC4xLTI3LjggNXMtNC4xIDIxLjUgNSAyNy44YzIzLjkgMTYuNyAzOS40IDQ0LjMgMzkuNCA3NS41cy0xNS42IDU4LjktMzkuNCA3NS41Yy05LjEgNi4zLTExLjMgMTguOC01IDI3LjhzMTguOCAxMS4zIDI3LjggNWMzNC4xLTIzLjggNTYuNi02My41IDU2LjYtMTA4LjNTMjk2IDI2Ny41IDI2MS44IDI0My43ek04MCAzMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwIDI3LjIgMzRjMyAzLjggNy42IDYgMTIuNSA2bC4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtLjMgMGMtNC45IDAtOS41IDIuMi0xMi41IDZsLTI3LjIgMzQtMjQgMHptMTI4IDcyLjJjMCAxMC43IDEwLjUgMTguMiAxOC45IDExLjYgMTIuOS0xMC4zIDIxLjEtMjYuMSAyMS4xLTQzLjhzLTguMi0zMy41LTIxLjEtNDMuOGMtOC40LTYuNy0xOC45IC45LTE4LjkgMTEuNmwwIDY0LjV6Il0KICAgIH07CiAgICBmYUFycm93c0Rvd25Ub0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWRvd24tdG8tbGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI4IiwgIk0yMTQuNiAzMTAuNmwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAyNzQuNyA5NiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMjQyLjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0yNTYgMGwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5LjQgOS40IDAtMjQyLjdjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMnoiXQogICAgfTsKICAgIGZhRyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAzXSwgIjQ3IiwgIk0yMjQgOTZDMTM1LjYgOTYgNjQgMTY3LjYgNjQgMjU2czcxLjYgMTYwIDE2MCAxNjBjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhMMjU2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDQgMGMyNS44IDAgNDkuNiAyMS40IDQ3LjIgNTAuNi05LjUgMTE1LTEwNS44IDIwNS40LTIyMy4yIDIwNS40LTEyMy43IDAtMjI0LTEwMC4zLTIyNC0yMjRTMTAwLjMgMzIgMjI0IDMyYzU3LjQgMCAxMDkuNyAyMS42IDE0OS4zIDU3IDEzLjIgMTEuOCAxNC4zIDMyIDIuNSA0NS4ycy0zMiAxNC4zLTQ1LjIgMi41QzMwMi4zIDExMS40IDI2NSA5NiAyMjQgOTZ6Il0KICAgIH07CiAgICBmYVZpaGFyYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWhhcmEiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjZhNyIsICJNMjczLjYtMy4yYzguNS02LjQgMjAuMy02LjQgMjguOCAwTDQ0My4yIDEwMi40YzguMyA2LjIgMTguNCA5LjYgMjguOCA5LjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCA0OCA1OC43IDY0IDEzLjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDggMjQuNCAzMiAxNS42IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTEyOCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMi4xIDAgMTcuOS0zMiAwLTQ4LTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMy4zIDAgNTguNy02NCAwLTQ4LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTAuNCAwIDIwLjUtMy40IDI4LjgtOS42TDI3My42LTMuMnpNMTI4IDM2OGwzMjAgMCAwLTQ4LTMyMCAwIDAgNDh6TTM4NCAxNjBsLTE5MiAwIDAgNDggMTkyIDAgMC00OHoiXQogICAgfTsKICAgIGZhRmxhZ0NoZWNrZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnLWNoZWNrZXJlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkzN10sICJmMTFlIiwgIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMjc5LjdjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgMzg0IDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwek02NCAxODcuMWw2NC0xMy45IDAgNjUuNS02NCAxMy45IDAgNjUuNSA0OC44LTEyLjJjNS4xLTEuMyAxMC4xLTIuNCAxNS4yLTMuM2wwLTYzLjkgMzguOS04LjRjOC4zLTEuOCAxNi43LTIuNSAyNS4xLTIuMWwwLTY0YzEzLjYgLjQgMjcuMiAyLjYgNDAuNCA2LjRsMjMuNiA2LjkgMCA2Ni43LTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOGwwIDcxLjRjMjEuOCAxLjkgNDMuMyA2LjcgNjQgMTQuNGwwLTY5LjggMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40bDAtNjQuMmMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEyIDAtNjJjLTEzLTMuOC0yNS44LTguOC0zOC4yLTE1LTguMi00LjEtMTYuOS03LTI1LjgtOC44bDAgNzIuNGMtMTMtLjQtMjYgLjgtMzguNyAzLjZsLTI1LjMgNS41IDAtNzUuMi02NCAxNiAwIDczLjF6TTMyMCAzMzUuN2MxNi44IDEuNSAzMy45LS43IDUwLTYuOGwxNC01LjIgMC03MS43LTcuOSAxLjhjLTE4LjQgNC4zLTM3LjMgNS43LTU2LjEgNC41bDAgNzcuNHptNjQtMTQ5LjRsMC03MC44Yy0yMC45IDYuMS00Mi40IDkuMS02NCA5LjFsMCA2OS40YzEzLjkgMS40IDI4IC41IDQxLjctMi42bDIyLjMtNS4yeiJdCiAgICB9OwogICAgZmFHYXVnZVNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZS1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2F1Z2Utc2ltcGxlLW1lZCIsICJ0YWNob21ldGVyLWF2ZXJhZ2UiXSwgImY2MjkiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR2F1Z2VTaW1wbGVNZWQgPSBmYUdhdWdlU2ltcGxlOwogICAgZmFUYWNob21ldGVyQXZlcmFnZSA9IGZhR2F1Z2VTaW1wbGU7CiAgICBmYVJpZ2h0TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4Y2hhbmdlLWFsdCJdLCAiZjM2MiIsICJNNTAyLjYgMTUwLjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzNTIgMjM2LjkgMzUyIDIyNGwwLTY0LTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDMyMCAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzE2MCAyNzUuMSAxNjAgMjg4bDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02Ljl6Il0KICAgIH07CiAgICBmYUV4Y2hhbmdlQWx0ID0gZmFSaWdodExlZnQ7CiAgICBmYVBpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpbGxzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ODQiLCAiTTY0IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTEyLTk2IDAgMC0xMTJ6TTE3NiAzNjhjMC00OC43IDE4LjEtOTMuMiA0OC0xMjdsMC0xMjlDMjI0IDUwLjEgMTczLjkgMCAxMTIgMFMwIDUwLjEgMCAxMTJMMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTIgMzcuMyAwIDcwLjMtMTguMiA5MC43LTQ2LjMtMTctMjguNi0yNi43LTYyLTI2LjctOTcuN3ptNjQuNyA2Ny40YzQuNiA4LjcgMTYuMyA5LjcgMjMuMyAyLjdMNDM4LjEgMjY0YzctNyA2LTE4LjctMi43LTIzLjMtMjAuMS0xMC43LTQzLTE2LjctNjcuNC0xNi43LTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMjQuMyA2IDQ3LjMgMTYuNyA2Ny40ek0yOTcuOSA0NzJjLTcgNy02IDE4LjcgMi43IDIzLjMgMjAuMSAxMC43IDQzIDE2LjcgNjcuNCAxNi43IDc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0IDAtMjQuMy02LTQ3LjMtMTYuNy02Ny40LTQuNi04LjctMTYuMy05LjctMjMuMy0yLjdMMjk3LjkgNDcyeiJdCiAgICB9OwogICAgZmFFeHBsb3Npb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXhwbG9zaW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTkiLCAiTTI1Ni0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTYwYzEyLjQgMCAyMi43IDkuNCAyMy45IDIxLjdMMjkzLjQgMjkxLjYgNDY3LjYgMTEuM2M2LjctMTAuNyAyMC41LTE0LjUgMzEuNy04LjVzMTUuOCAxOS41IDEwLjYgMzFMMzcyLjggMzM4LjZjMi4yIDIuMyA0LjMgNC43IDYuMyA3LjFsOTcuMi01NC43YzEwLjUtNS45IDIzLjYtMy4xIDMwLjkgNi40czYuMyAyMy0yLjIgMzEuNWwtODcgODctNzEuNCAwYy0xMy4yLTM3LjMtNDguNy02NC05MC41LTY0cy03Ny40IDI2LjctOTAuNSA2NGwtNzkuNiAwLTc1LjUtNTIuM0MuNiAzNTctMi44IDM0NC4xIDIuNCAzMzMuNXMxNy40LTE1LjkgMjguNy0xMi40bDk3LjIgMzAuNGMzLTMuOSA2LjEtNy42IDkuNC0xMS4zTDc1LjQgMjM2LjNjLTYuMS0xMC4xLTMuOS0yMy4xIDUuMS0zMC43czIyLjItNy41IDMxLjEgLjFMMjE0IDI5My42YzEuNS0uNCAzLS44IDQuNS0xLjFsMTMuNi0xNDIuN2MxLjItMTIuMyAxMS41LTIxLjcgMjMuOS0yMS43ek0zMiA0NjRsNDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMHoiXQogICAgfTsKICAgIGZhQXJyb3dzRG93blRvUGVvcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1kb3duLXRvLXBlb3BsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI5IiwgIk0xMTMgMTUzYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxNSA4OUM1LjcgNzkuNiA1LjcgNjQuNCAxNSA1NVMzOS42IDQ1LjcgNDkgNTVMNzIgNzguMSA3Mi04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6bTMyMCAwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwzMzUgODljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMyAyMyAwLTg2LjFjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDg2LjEgMjMtMjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02NCA2NHpNMjU2IDE5MmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMCAxNjBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTUzIDQzLTk2IDk2LTk2ek0zMiAyODhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzUyIDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNODAgMzY4YzE1LjMgMCAyOS42IDQuMyA0MS44IDExLjgtNi4zIDE2LjItOS44IDMzLjgtOS44IDUyLjJsMCA0OGMwIDExLjQgMi40IDIyLjIgNi43IDMybC04Ny44IDBDMTMuOCA1MTIgMCA0OTguMiAwIDQ4MS4xTDAgNDQ4YzAtNDQuMiAzNS44LTgwIDgwLTgwek0zOTMuMyA1MTJjNC4zLTkuOCA2LjctMjAuNiA2LjctMzJsMC00OGMwLTE4LjQtMy41LTM2LTkuOC01Mi4yIDEyLjItNy41IDI2LjUtMTEuOCA0MS44LTExLjggNDQuMiAwIDgwIDM1LjggODAgODBsMCAzMy4xYzAgMTctMTMuOCAzMC45LTMwLjkgMzAuOWwtODcuOCAweiJdCiAgICB9OwogICAgZmFVc2Vyc1ZpZXdmaW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtdmlld2ZpbmRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk1IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTguOCA3LjItMTYgMTYtMTZsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMxNDkuMyAwIDEzNiAwTDY0IDB6TTQ0MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDQ0MCAwek00OCAzNzZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAzNjIuNyAwIDM3NmwwIDcyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTcyem01MjggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyYzAgOC44LTcuMiAxNi0xNiAxNmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNzJ6TTI4OCAyMTZhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTAgNDBjLTUzIDAtOTYgNDMtOTYgOTZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtNTMtNDMtOTYtOTYtOTZ6bTE5Mi02NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNjggMjcyLjNjLTQ5LjMgNC4xLTg4IDQ1LjMtODggOTUuN2wwIDEwLjdjMCAxMS44IDkuNiAyMS4zIDIxLjMgMjEuM2w0Ni44IDBjLTIuNy03LjUtNC4xLTE1LjYtNC4xLTI0bDAtMjRjMC0yOS41IDguOC01Ni45IDI0LTc5Ljd6TTQyNy45IDQwMGw0Ni44IDBjMTEuOCAwIDIxLjMtOS42IDIxLjMtMjEuM2wwLTEwLjdjMC01MC4zLTM4LjctOTEuNi04OC05NS43IDE1LjIgMjIuOCAyNCA1MC4yIDI0IDc5LjdsMCAyNGMwIDguNC0xLjQgMTYuNS00LjEgMjR6TTE5MiAxOTJhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhQ2FyT24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0ZGQiLCAiTTI0OC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIwMC0yMS4zIDIwMC04bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0ek0xNDUuMyAyMDhsMTU3LjUgMGM2LjcgMCAxMi42IDQuMSAxNSAxMC40bDI2LjEgNjkuNi0yMzkuNiAwIDI2LjEtNjkuNmMyLjMtNi4yIDguMy0xMC40IDE1LTEwLjR6TTM0IDI5Mi44bC0xLjMgMy40QzEzLjIgMzA3LjEgMCAzMjggMCAzNTJMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI4OCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTI0LTEzLjItNDQuOS0zMi44LTU1LjlsLTEuMy0zLjQtMzYuMy05Ni45Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOWwtMTU3LjUgMGMtMzMuMyAwLTYzLjIgMjAuNy03NC45IDUxLjlMMzQgMjkyLjh6TTk2IDMzNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTIyNCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek03IDdDLTIuMyAxNi40LTIuMyAzMS42IDcgNDFMNTUgODljOS40IDkuNCAyNC42IDkuNCAzMy45IDBTOTguMyA2NC40IDg5IDU1TDQxIDdDMzEuNi0yLjMgMTYuNC0yLjMgNyA3ek00MDcgN0wzNTkgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM0MTYuNC0yLjMgNDA3IDd6Il0KICAgIH07CiAgICBmYVNsZWlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbGVpZ2giLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdjYyIsICJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0UzQ2LjMgOTYgNjQgOTZsMCAxNjBjMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgNjkuNS03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDUwNCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTgwIDAgMC02NGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4LjkgMGMtNDguNSAwLTkyLjgtMjcuNC0xMTQuNS03MC44bC0yNS4yLTUwLjVDMjM3LjcgNTkuNCAxOTMuNCAzMiAxNDQuOSAzMkw2NCAzMnpNNDMyIDQxNmwtMjU2IDAgMC02NCAyNTYgMCAwIDY0eiJdCiAgICB9OwogICAgZmFEdW1iYmVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW1iYmVsbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDRiIiwgIk05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMiAyNTYgMCAwLTExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDAgMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTExMi0yNTYgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTE2LTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMC00OGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwIDAtMTZ6Il0KICAgIH07CiAgICBmYUJhYnlDYXJyaWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWJ5LWNhcnJpYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNhcnJpYWdlLWJhYnkiXSwgImY3N2QiLCAiTTY0IDIwOGwwIDgwYzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwwLTExMiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2LTMzNiAwem0uMi00OGwyMjMuOCAwIDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDIzMiAwQzE0MS45IDAgNjguNCA3MC45IDY0LjIgMTYwek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTI4OCAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUNhcnJpYWdlQmFieSA9IGZhQmFieUNhcnJpYWdlOwogICAgZmFLaXdpQmlyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXdpLWJpcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUzNSIsICJNMjkxLjIgMzg4LjRjMzEuMi0xOC44IDY0LjctMzYuNCAxMDEuMS0zNi40bDU1LjcgMGM0LjYgMCA5LjEtLjIgMTMuNi0uN2w4NS4zIDEyMS45YzQgNS43IDExLjMgOC4yIDE3LjkgNi4xUzU3NiA0NzEgNTc2IDQ2NGwwLTI0MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtNTUuNyAwQzM1NS45IDk2IDMyMi40IDc4LjQgMjkxLjIgNTkuNiAyNjIuMyA0Mi4xIDIyOC4zIDMyIDE5MiAzMiA4NiAzMiAwIDExOCAwIDIyNCAwIDI5NS4xIDM4LjYgMzU3LjEgOTYgMzkwLjNMOTYgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00NmMxNS4zIDMuOSAzMS40IDYgNDggNiA1LjQgMCAxMC43LS4yIDE2LS43bDAgNDAuN2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTAuOWMxMi40LTQuNCAyNC4yLTEwIDM1LjItMTYuN3pNNDQ4IDIwMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyWG1hcmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXhtYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLXRpbWVzIl0sICJmMjczIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI5MS45IDIyMC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyVGltZXMyID0gZmFDYWxlbmRhclhtYXJrMjsKICAgIGZhQ2lyY2xlRG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgImFycm93LWFsdC1jaXJjbGUtZG93biJdLCAiZjM1OCIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0yNDQuNyAzODcuM2wtMTA0LTEwNGMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHM4LjMtOS45IDE0LjgtOS45bDU2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgNTYgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtMTA0IDEwNGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDB6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlRG93bjIgPSBmYUNpcmNsZURvd24yOwogICAgZmFGaWxlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLW1lZGljYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ3NyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE2MCAyODBsMCA0MC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDAgMCAwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQwIDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00MCAwIDAtNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInhtYXJrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDczLCAxMDAwNSwgMTAwMDYsIDEwMDYwLCAyMTUsICJjbG9zZSIsICJtdWx0aXBseSIsICJyZW1vdmUiLCAidGltZXMiXSwgImYwMGQiLCAiTTU1LjEgNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTQ3LjIgMjU2IDkuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIuNSAzMDEuMyAzMjkuOSA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy44IDI1NiAzNzUuMSAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIuNSAyMTAuNyA1NS4xIDczLjR6Il0KICAgIH07CiAgICBmYUNsb3NlID0gZmFYbWFyazsKICAgIGZhTXVsdGlwbHkgPSBmYVhtYXJrOwogICAgZmFSZW1vdmUgPSBmYVhtYXJrOwogICAgZmFUaW1lcyA9IGZhWG1hcms7CiAgICBmYVNoYXBlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFwZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidHJpYW5nbGUtY2lyY2xlLXNxdWFyZSJdLCAiZjYxZiIsICJNMjU2IDBjMTEuMiAwIDIxLjcgNS45IDI3LjQgMTUuNWw5NiAxNjBjNS45IDkuOSA2LjEgMjIuMiAuNCAzMi4yUzM2My41IDIyNCAzNTIgMjI0bC0xOTIgMGMtMTEuNSAwLTIyLjItNi4yLTI3LjgtMTYuMnMtNS41LTIyLjMgLjQtMzIuMmw5Ni0xNjBDMjM0LjMgNS45IDI0NC44IDAgMjU2IDB6TTEyOCAyNzJhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0em0yMDAgMTZsMTEyIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTExMiAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTExMmMwLTIyLjEgMTcuOS00MCA0MC00MHoiXQogICAgfTsKICAgIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUgPSBmYVNoYXBlczsKICAgIGZhRGljZU9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLW9uZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTZdLCAiZjUyNSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxvY2tPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2stb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2MxIiwgIk0zODQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMmMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOFMzMjAgMjUuMyAzMjAgOTZsMCA2NC0xNjAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC02NHoiXQogICAgfTsKICAgIGZhUGVwcGVySG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcHBlci1ob3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc3OThdLCAiZjgxNiIsICJNNTQ1IDY1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDc4LjkgNjMuMkM0NTIuMyA0My42IDQxOS41IDMyIDM4NCAzMiAzNDguOSAzMiAzMTYuNSA0My4zIDI5MC4xIDYyLjQgMjc0LjEgNzQuMSAyODQuMiA5NiAzMDQgOTZsMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDE5LjggMjEuOSAyOS45IDMzLjYgMTMuOSAxOS4xLTI2LjQgMzAuNC01OC44IDMwLjQtOTMuOSAwLTM1LjUtMTEuNi02OC4zLTMxLjItOTQuOUw1NDUgNjV6TTI3MCAxMzUuNWwtMTU5LjYgMjI4QzEwMS4zIDM3Ni40IDg2LjcgMzg0IDcxIDM4NGwtNyAwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4bDI3LjEgMGM2NS43IDAgMTI5LjctMjAuMiAxODMuNS01Ny44TDQ0MC41IDMwNi4xQzQzNSAyOTUuOSA0MzIgMjg0LjIgNDMyIDI3MmwtNTYgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC01NmMtMTIuMiAwLTIzLjktMy0zNC04LjV6Il0KICAgIH07CiAgICBmYURyb3BsZXRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcm9wbGV0LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRpbnQtc2xhc2giXSwgImY1YzciLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDYzLjYgMzk3LjhjMTAuNS0yMy44IDE2LjQtNTAuMSAxNi40LTc3LjggMC05MS4yLTEzMC4yLTI3NC4xLTE2Ni42LTMyMy41LTUuOS04LTE1LjItMTIuNS0yNS4yLTEyLjVsLS40IDBjLTEwIDAtMTkuMyA0LjUtMjUuMiAxMi41LTE1LjYgMjEuMi00OC41IDY2LjktODAuOSAxMTkuNEw0MS0yNC45em05MiAyMjcuN2MtMjEuNiA0My44LTM3IDg1LjktMzcgMTE3LjIgMCAxMDYgODYgMTkyIDE5MiAxOTIgNDMuNCAwIDgzLjQtMTQuNCAxMTUuNS0zOC42TDEzMyAyMDIuOHoiXQogICAgfTsKICAgIGZhVGludFNsYXNoID0gZmFEcm9wbGV0U2xhc2g7CiAgICBmYURyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJvcGxldCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2NywgInRpbnQiXSwgImYwNDMiLCAiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwIDAgMjI4LjggMTMwLjIgNDUuOSAxNjYuNi0zLjUgMTcyLjUtMTEuNSAxODEuOC0xNiAxOTEuOC0xNmwuNCAwYzEwIDAgMTkuMyA0LjUgMjUuMiAxMi41IDM2LjQgNDkuNCAxNjYuNiAyMzIuMyAxNjYuNiAzMjMuNSAwIDEwNi04NiAxOTItMTkyIDE5MnpNMTEyIDMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDc1LjEgNjAuOSAxMzYgMTM2IDEzNiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDguNiAwLTg4LTM5LjQtODgtODh6Il0KICAgIH07CiAgICBmYVRpbnQgPSBmYURyb3BsZXQ7CiAgICBmYUZpbGVMaW5lczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgImZpbGUtYWx0IiwgImZpbGUtdGV4dCJdLCAiZjE1YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTEyMCAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhRmlsZUFsdDIgPSBmYUZpbGVMaW5lczI7CiAgICBmYUZpbGVUZXh0MiA9IGZhRmlsZUxpbmVzMjsKICAgIGZhQ29tbWVudHNEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMtZG9sbGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2NTMiLCAiTTE5MiAzMjBjMTA2IDAgMTkyLTc4LjggMTkyLTE3NlMyOTgtMzIgMTkyLTMyIDAgNDYuOCAwIDE0NGMwIDM5LjYgMTQuMyA3Ni4yIDM4LjQgMTA1LjZMMi44IDMxNi44Qy0yLjEgMzI2LjEtLjQgMzM3LjUgNyAzNDVzMTguOSA5LjIgMjguMiA0LjJMMTE2LjggMzA2YzIzLjEgOSA0OC41IDE0IDc1LjIgMTR6bTMuMiA0OGMxNi40IDgxLjkgOTQuNyAxNDQgMTg4LjggMTQ0IDI2LjcgMCA1Mi4xLTUgNzUuMi0xNGw4MS42IDQzLjJjOS4zIDQuOSAyMC43IDMuMiAyOC4yLTQuMnM5LjItMTguOSA0LjItMjguMmwtMzUuNi02Ny4yYzI0LjEtMjkuNCAzOC40LTY2IDM4LjQtMTA1LjYgMC04Mi40LTYxLjctMTUxLjUtMTQ1LTE3MC43LTExLjUgMTE1LjgtMTE1LjggMjAxLjItMjM1LjggMjAyLjd6TTE5NiAzMmMxMSAwIDIwIDkgMjAgMjBsMCA0IDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTQ3LjUgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgNi4xIDQuNCAxMS4zIDEwLjQgMTIuM2w0MS43IDdjMjUuMyA0LjIgNDMuOSAyNi4xIDQzLjkgNTEuOCAwIDI2LjEtMTkgNDcuNy00NCA1MS44bDAgNC43YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTQtMjQgMGMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBsNTUuNSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTYuMS00LjQtMTEuMy0xMC40LTEyLjNsLTQxLjctN2MtMjUuMy00LjItNDMuOS0yNi4xLTQzLjktNTEuOCAwLTI4LjggMjMuMi01Mi4yIDUyLTUyLjVsMC00YzAtMTEgOS0yMCAyMC0yMHoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1sb2NhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtbG9jYXRpb24iXSwgImY2ODkiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjg4IDE3NmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDQ4LjggNDYuNSAxMTEuNiA2OC42IDEzOC42IDYgNy4zIDE2LjggNy4zIDIyLjcgMCAyMi4xLTI3IDY4LjYtODkuOCA2OC42LTEzOC42em0tMTEyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU2VhcmNoTG9jYXRpb24gPSBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uOwogICAgZmFGaWxlSW52b2ljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWludm9pY2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNNjQgMzg0bDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04OCA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM3NC43IDY0IDg4IDY0em0wIDk2bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVBlbnRhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbnRhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3OTAiLCAiTTMxNi40LTMuMWMtMTYuOC0xMi4yLTM5LjYtMTIuMi01Ni40IDBMMzUuMyAxNjAuMmMtMTYuOCAxMi4yLTIzLjkgMzMuOS0xNy40IDUzLjdsODUuOCAyNjQuMWM2LjQgMTkuOCAyNC45IDMzLjIgNDUuNyAzMy4ybDI3Ny43IDBjMjAuOCAwIDM5LjItMTMuNCA0NS43LTMzLjJsODUuOC0yNjQuMWM2LjQtMTkuOC0uNi00MS40LTE3LjQtNTMuN0wzMTYuNC0zLjF6Il0KICAgIH07CiAgICBmYVJlcHVibGljYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwdWJsaWNhbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzVlIiwgIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMybDIyNCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjQtNTQ0IDAgMC02NHptMTUyLTMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTIzMiAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI4MCAxNjBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTI4IDI4OGw0MTYgMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwbDAtNDgtMzIgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0LTE5MiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDEyOCAweiJdCiAgICB9OwogICAgZmFTaG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3AiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3RvcmUtYWx0Il0sICJmNTRmIiwgIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1Ni44IDExMy43YzMuNiA3LjIgNS41IDE1LjEgNS41IDIzLjIgMCAyNy4zLTIxLjIgNDkuNy00OCA1MS42TDUxMiA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItOTYgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6Il0KICAgIH07CiAgICBmYVN0b3JlQWx0ID0gZmFTaG9wOwogICAgZmFGaWxtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbG0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MDIsIDYyMzY4LCAiZmlsbS1hbHQiLCAiZmlsbS1zaW1wbGUiXSwgImYwMDgiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek00OCAzNjhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDI0MGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0zMDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNDggMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTM1MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAweiJdCiAgICB9OwogICAgZmFGaWxtQWx0ID0gZmFGaWxtOwogICAgZmFGaWxtU2ltcGxlID0gZmFGaWxtOwogICAgZmFCdWlsZGluZ0NpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ0IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNDU0LjYgNDAweiJdCiAgICB9OwogICAgZmFDb21tZW50czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgImYwODYiLCAiTTM4NCAxNDRjMCA5Ny4yLTg2IDE3Ni0xOTIgMTc2LTI2LjcgMC01Mi4xLTUtNzUuMi0xNEwzNS4yIDM0OS4yYy05LjMgNC45LTIwLjcgMy4yLTI4LjItNC4ycy05LjItMTguOS00LjItMjguMmwzNS42LTY3LjJDMTQuMyAyMjAuMiAwIDE4My42IDAgMTQ0IDAgNDYuOCA4Ni0zMiAxOTItMzJTMzg0IDQ2LjggMzg0IDE0NHptMCAzNjhjLTk0LjEgMC0xNzIuNC02Mi4xLTE4OC44LTE0NCAxMjAtMS41IDIyNC4zLTg2LjkgMjM1LjgtMjAyLjcgODMuMyAxOS4yIDE0NSA4OC4zIDE0NSAxNzAuNyAwIDM5LjYtMTQuMyA3Ni4yLTM4LjQgMTA1LjZsMzUuNiA2Ny4yYzQuOSA5LjMgMy4yIDIwLjctNC4yIDI4LjJzLTE4LjkgOS4yLTI4LjIgNC4yTDQ1OS4yIDQ5OGMtMjMuMSA5LTQ4LjUgMTQtNzUuMiAxNHoiXQogICAgfTsKICAgIGZhVGFncyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWdzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwMmMiLCAiTTQwMS4yIDM5LjFMNTQ5LjQgMTg5LjRjMjcuNyAyOC4xIDI3LjcgNzMuMSAwIDEwMS4yTDM5MyA0NDguOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDUxNS4zIDI1Ni44YzkuMi05LjMgOS4yLTI0LjQgMC0zMy43TDM2NyA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMzIuMSAyMjkuNUwzMi4xIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMTQ0IDE0NGMyNSAyNSAyNSA2NS41IDAgOTAuNUwyODUuNCA0MTguN2MtMjUgMjUtNjUuNSAyNS05MC41IDBsLTE0NC0xNDRjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjN6bTE0NC04NS41YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYUd1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTE5YiIsICJNNTI4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOC00NDggMEMxNC4zIDY0IDAgNzguMyAwIDk2TDAgMjA4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwIDBjMjAuOCAwIDM2LjEgMTkuNiAzMSAzOS44TDMzIDQ0MC4yYy0yLjQgOS42LS4yIDE5LjcgNS44IDI3LjVTNTQuMSA0ODAgNjQgNDgwbDk2IDBjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUyIDMyMS40IDM1MmMyMy43IDAgNDQuOC0xNC45IDUyLjctMzcuMmwyNi43LTc0LjggMzEuMSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDIyLjYtMjIuNiA2Ni43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTh6TTMyMS40IDMwNGwtOTIuNSAwIDE2LTY0IDEwNSAwLTIxIDU4LjdjLTEuMSAzLjItNC4yIDUuMy03LjUgNS4zek04MCAxMjhsMzg0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgMTYwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzMsICJjaGVjay1jaXJjbGUiXSwgImYwNTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyek0zNzQgMTQ1LjdjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zTDIyMS4xIDMxNS4yIDE2OSAyNjMuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM1IDUgMTEuOCA3LjUgMTguOCA3czEzLjQtNC4xIDE3LjUtOS44TDM3OS4zIDE3OS4yYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdCiAgICB9OwogICAgZmFDaGVja0NpcmNsZTIgPSBmYUNpcmNsZUNoZWNrMjsKICAgIGZhSWRDYXJkQ2xpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZC1jYXJkLWNsaXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaWQtY2FyZC1hbHQiXSwgImY0N2YiLCAiTTI1Ni0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQtMTI4IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzJsMTEyIDAgMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyIDExMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMTc2IDQwMGMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHpNMjg4IDI4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXQogICAgfTsKICAgIGZhSWRDYXJkQWx0ID0gZmFJZENhcmRDbGlwOwogICAgZmFNb29uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzY5LCA5MjE0XSwgImYxODYiLCAiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMmM2OC44IDAgMTMxLjMtMjcuMiAxNzcuMy03MS40IDcuMy03IDkuNC0xNy45IDUuMy0yNy4xcy0xMy43LTE0LjktMjMuOC0xNC4xYy00LjkgLjQtOS44IC42LTE0LjggLjYtMTAxLjYgMC0xODQtODIuNC0xODQtMTg0IDAtNzIuMSA0MS41LTEzNC42IDEwMi4xLTE2NC44IDkuMS00LjUgMTQuMy0xNC4zIDEzLjEtMjQuNFMzMjIuNiA4LjUgMzEyLjcgNi4zQzI5NC40IDIuMiAyNzUuNCAwIDI1NiAweiJdCiAgICB9OwogICAgZmFPaWxXZWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9pbC13ZWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzIiLCAiTTUyOC4zIDYxLjNjLTExLjQtNDIuNy01NS4zLTY4LTk4LTU2LjZMNDE0LjkgOC44QzM5Ny44IDEzLjQgMzg3LjcgMzEgMzkyLjMgNDhsMjQuNSA5MS40LTEwOC4yIDI4LjEtNi4zLTE4LjFDMjk3LjcgMTM2LjYgMjg1LjYgMTI4IDI3MiAxMjhzLTI1LjcgOC42LTMwLjIgMjEuNGwtMTMuNiAzOS0xMzIuMiAzNC4zIDAtMzguNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI2NC0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMzcuMyAwLTYxLjQtMTc1LjQtNjIuMiAxNi4xIDIyLjEgNjMuMi02Ni42IDAgMTkuOS01Ni45LTc0LjYgMTkuMy00Ni43IDEzMy41LTQxLjMgMCAwLTE1OS4yIDMzNy40LTg3LjUgMjUuMiA5NGM0LjYgMTcuMSAyMi4xIDI3LjIgMzkuMiAyMi42bDE1LjUtNC4xYzQyLjctMTEuNCA2OC01NS4zIDU2LjYtOThMNTI4LjMgNjEuM3pNMjA1LjEgNDQ4bDE2LjgtNDggMTAwLjIgMCAxNi44IDQ4LTEzMy44IDB6Il0KICAgIH07CiAgICBmYVRhY2hvZ3JhcGhEaWdpdGFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhY2hvZ3JhcGgtZGlnaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkaWdpdGFsLXRhY2hvZ3JhcGgiXSwgImY1NjYiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTY0IDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04OCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMzUyem0yNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6TTQ5NiAxOTJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek04OCAzMTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xMDQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFEaWdpdGFsVGFjaG9ncmFwaCA9IGZhVGFjaG9ncmFwaERpZ2l0YWw7CiAgICBmYVRhYmxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFibGV0LWFuZHJvaWQiXSwgImYzZmIiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE4NCA0MDBsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhVGFibGV0QW5kcm9pZCA9IGZhVGFibGV0OwogICAgZmFSdWJsZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVibGUtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzODEsICJyb3VibGUiLCAicnViIiwgInJ1YmxlIl0sICJmMTU4IiwgIk0xMTIgMzJDOTQuMyAzMiA4MCA0Ni4zIDgwIDY0bDAgMjA4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDQ4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxNTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTUyIDAgMC00OCAxMTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFMzMzUuNSAzMiAyNTYgMzJMMTEyIDMyek0yNTYgMjU2bC0xMTIgMCAwLTE2MCAxMTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHoiXQogICAgfTsKICAgIGZhUm91YmxlID0gZmFSdWJsZVNpZ247CiAgICBmYVJ1YiA9IGZhUnVibGVTaWduOwogICAgZmFSdWJsZSA9IGZhUnVibGVTaWduOwogICAgZmFDbG9zZWRDYXB0aW9uaW5nMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9zZWQtY2FwdGlvbmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjBhIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0xNTIgODBsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODBjMC00LjQgMy42LTggOC04em0xNjggOGMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODB6Il0KICAgIH07CiAgICBmYVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzOTRdLCAiZjMwNCIsICJNMzUyLjkgMjEuMkwzMDggNjYuMSA0NDUuOSAyMDQgNDkwLjggMTU5LjFDNTA0LjQgMTQ1LjYgNTEyIDEyNy4yIDUxMiAxMDhzLTcuNi0zNy42LTIxLjItNTEuMUw0NTUuMSAyMS4yQzQ0MS42IDcuNiA0MjMuMiAwIDQwNCAwcy0zNy42IDcuNi01MS4xIDIxLjJ6TTI3NC4xIDEwMEw1OC45IDMxNS4xYy0xMC43IDEwLjctMTguNSAyNC4xLTIyLjYgMzguN0wuOSA0ODEuNmMtMi4zIDguMyAwIDE3LjMgNi4yIDIzLjRzMTUuMSA4LjUgMjMuNCA2LjJsMTI3LjgtMzUuNWMxNC42LTQuMSAyNy45LTExLjggMzguNy0yMi42TDQxMiAyMzcuOSAyNzQuMSAxMDB6Il0KICAgIH07CiAgICBmYVBsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzIiLCAiTTUyMCAyMDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZsLTEyNy4zIDAtMTU5LjIgMTczLjZjLTYuMSA2LjYtMTQuNiAxMC40LTIzLjYgMTAuNGwtNDMuNyAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw1NC4zLTE2Mi45LTk5LjcgMC01Mi44IDY2Yy0zIDMuOC03LjYgNi0xMi41IDZsLTE5LjggMGMtMTAuNCAwLTE4LTkuOC0xNS41LTE5LjlMMzIgMjU2IDUgMTQ3LjlDMi40IDEzNy44IDEwLjEgMTI4IDIwLjUgMTI4bDE5LjggMGM0LjkgMCA5LjUgMi4yIDEyLjUgNmw1Mi44IDY2IDk5LjcgMC01NC4zLTE2Mi45QzE0Ny42IDI2LjcgMTU1LjMgMTYgMTY2LjIgMTZsNDMuNyAwYzkgMCAxNy41IDMuOCAyMy42IDEwLjRMMzkyLjcgMjAwIDUyMCAyMDB6Il0KICAgIH07CiAgICBmYUltYWdlczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2VzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzMDIiLCAiTTk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZ6TTI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDguOCA3LjIgMTYgMTYgMTZsMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMTY4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTk2LjUgMTEuNWMtNC40LTcuMS0xMi4xLTExLjUtMjAuNS0xMS41cy0xNi4xIDQuNC0yMC41IDExLjVsLTU2LjMgOTIuMS0yNC41LTMwLjZjLTQuNi01LjctMTEuNC05LTE4LjctOXMtMTQuMiAzLjMtMTguNyA5bC02NCA4MGMtNS44IDcuMi02LjkgMTcuMS0yLjkgMjUuNFMxNzQuOCAzNTIgMTg0IDM1MmwyNzIgMGM4LjcgMCAxNi43LTQuNyAyMC45LTEyLjNzNC4xLTE2LjgtLjUtMjQuM2wtODgtMTQ0eiJdCiAgICB9OwogICAgZmFNb2JpbGVTY3JlZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXNjcmVlbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtb2JpbGUtYW5kcm9pZC1hbHQiXSwgImYzY2YiLCAiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHpNMTI4IDQ0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzA0IDY0bC0yMjQgMCAwIDMwNCAyMjQgMCAwLTMwNHoiXQogICAgfTsKICAgIGZhTW9iaWxlQW5kcm9pZEFsdCA9IGZhTW9iaWxlU2NyZWVuOwogICAgZmFHdWFyYW5pU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndWFyYW5pLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE5YSIsICJNMTkyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDEuNUM3My4zIDc3LjMgMCAxNTguMSAwIDI1NlM3My4zIDQzNC43IDE2OCA0NDYuNWwwIDQxLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQxLjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNSAwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTM2IDAgMC05My44YzI1LjMgNC44IDQ3LjkgMTcgNjUuNiAzNC4zIDEyLjYgMTIuNCAzMi45IDEyLjIgNDUuMy0uNHMxMi4yLTMyLjktLjUtNDUuM0MyOTcuMiA5MC4yIDI1OC44IDcwLjggMjE2IDY1LjVMMjE2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xNjggMTMwLjJsMCAyNTEuNUMxMDguOCAzNzAuNSA2NCAzMTguNSA2NCAyNTZzNDQuOC0xMTQuNSAxMDQtMTI1Ljh6bTQ4IDI1MS41bDAtOTMuOCAxMDAgMGMtMTIuMyA0Ny42LTUxLjIgODQuNS0xMDAgOTMuOHoiXQogICAgfTsKICAgIGZhQmFnU2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFnLXNob3BwaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInNob3BwaW5nLWJhZyJdLCAiZjI5MCIsICJNMTYwIDgwYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCA0OC0xMjggMCAwLTQ4em0tNDggNDhsLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMCAwLTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzExMiAxOC4xIDExMiA4MGwwIDQ4em0yNCA0OGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTE1MiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFTaG9wcGluZ0JhZyA9IGZhQmFnU2hvcHBpbmc7CiAgICBmYUNpcmNsZVJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTgzOCwgImFycm93LWFsdC1jaXJjbGUtcmlnaHQiXSwgImYzNWEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6bTM4Ny4zIDExLjNsLTEwNCAxMDRjLTQuNiA0LjYtMTEuNSA1LjktMTcuNCAzLjVTMjU2IDM2Ni41IDI1NiAzNjBsMC01Ni05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMC01NmMwLTYuNSAzLjktMTIuMyA5LjktMTQuOHMxMi45LTEuMSAxNy40IDMuNWwxMDQgMTA0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiA9IGZhQ2lyY2xlUmlnaHQyOwogICAgZmFQaG9uZVZvbHVtZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZS12b2x1bWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm9sdW1lLWNvbnRyb2wtcGhvbmUiXSwgImYyYTAiLCAiTTM0NC0zMmMxMjguMSAwIDIzMiAxMDMuOSAyMzIgMjMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTAxLjYtODIuNC0xODQtMTg0LTE4NC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTMyMCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OC0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMTQ0LjEgMS40YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzMyLjUgNzEuNiA4OSAxMzAgMTU5LjMgMTY0LjlMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNUM1MjMuNCA0NzAuMSA0NjAuOSA1MjUuMyAzODQuNiA1MDkuMiAyMDkuNiA0NzIuMSA3MS45IDMzNC40IDM0LjggMTU5LjQgMTguNyA4My4xIDczLjkgMjAuNiAxMzguNSAyLjlsNS41LTEuNXoiXQogICAgfTsKICAgIGZhVm9sdW1lQ29udHJvbFBob25lID0gZmFQaG9uZVZvbHVtZTsKICAgIGZhQ3ViZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFiMyIsICJNMjg0LTEuM2MtMTcuMy0xMC0zOC43LTEwLTU2IDBMMTQzLjggNDcuM2MtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCAxMDEuOS04OC4zIDUxYy0xNy4zIDEwLTI4IDI4LjUtMjggNDguNWwwIDk3LjNjMCAyMCAxMC43IDM4LjUgMjggNDguNWw4NC4zIDQ4LjZjMTcuMyAxMCAzOC43IDEwIDU2IDBsODguMy01MSA4OC4zIDUxYzE3LjMgMTAgMzguNyAxMCA1NiAwTDQ4NC41IDQ0M2MxNy4zLTEwIDI4LTI4LjUgMjgtNDguNWwwLTk3LjNjMC0yMC0xMC43LTM4LjUtMjgtNDguNWwtODguMy01MSAwLTEwMS45YzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVMMjg0LTEuM3pNMjMyIDI5Mi42bDAgMTA2LjUtODguMyA1MWMtMS4yIC43LTIuNiAxLjEtNCAxLjFsMC0xMDUuMyA5Mi4zLTUzLjN6bTIzMS40IC42Yy43IDEuMiAxLjEgMi42IDEuMSA0bDAgOTcuM2MwIDIuOS0xLjUgNS41LTQgNi45bC04NC4zIDQ4LjZjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTEuMi01Mi42ek0zNDguMyA5NS44bDAgMTAxLjktOTIuMyA1My4zIDAtMTA2LjUgOTEuMi01Mi42Yy43IDEuMiAxLjEgMi42IDEuMSA0eiJdCiAgICB9OwogICAgZmFQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyMiwgMTI4Mzc5XSwgImYwOTUiLCAiTTE2MC4yIDI1QzE1Mi4zIDYuMSAxMzEuNy0zLjkgMTEyLjEgMS40bC01LjUgMS41Yy02NC42IDE3LjYtMTE5LjggODAuMi0xMDMuNyAxNTYuNCAzNy4xIDE3NSAxNzQuOCAzMTIuNyAzNDkuOCAzNDkuOCA3Ni4zIDE2LjIgMTM4LjgtMzkuMSAxNTYuNC0xMDMuN2wxLjUtNS41YzUuNC0xOS43LTQuNy00MC4zLTIzLjUtNDguMWwtOTcuMy00MC41Yy0xNi41LTYuOS0zNS42LTIuMS00NyAxMS44bC0zOC42IDQ3LjJDMjMzLjkgMzM1LjQgMTc3LjMgMjc3IDE0NC44IDIwNS4zTDE4OSAxNjkuM2MxMy45LTExLjMgMTguNi0zMC40IDExLjgtNDdMMTYwLjIgMjV6Il0KICAgIH07CiAgICBmYVRvcmlpR2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b3JpaS1nYXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk2MV0sICJmNmExIiwgIk0wIDk2TDAgMjguNUMwIDIxLjYgNS42IDE2IDEyLjUgMTYgMTQuOCAxNiAxNyAxNi42IDE5IDE3LjhMNTggNDEuMkM4Mi45IDU2LjEgMTExLjMgNjQgMTQwLjMgNjRsMTY3LjQgMGMyOSAwIDU3LjUtNy45IDgyLjMtMjIuOGwzOS0yMy40YzEuOS0xLjIgNC4yLTEuOCA2LjQtMS44IDYuOSAwIDEyLjUgNS42IDEyLjUgMTIuNUw0NDggOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCA2NCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTE5MiAwIDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTY0QzI4LjcgMTYwIDAgMTMxLjMgMCA5NnpNMTI4IDIyNGw2NCAwIDAtNjQtNjQgMCAwIDY0em0xMjggMGw2NCAwIDAtNjQtNjQgMCAwIDY0eiJdCiAgICB9OwogICAgZmFCYWNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTM2M10sICJmN2U1IiwgIk01NTcgOTYuN2MxNC40IDE0LjQgMTIuNCAzOC40LTQuMyA1MC4ybC02NC42IDQ1LjdjLTQzLjcgMzAuOS03OS4yIDcxLjktMTAzLjQgMTE5LjZsLTI1LjMgNDkuOGMtMjUuMSA0OS4zLTYyLjEgOTEuNS0xMDcuOCAxMjIuNmwtNzQuMSA1MC42Yy0xMy4xIDguOS0zMC43IDcuMy00MS44LTMuOWwtNDQuOS00NC45IDg2LjUtNjYuNWM0Mi4zLTMyLjUgNzYuNy03NC4zIDEwMC42LTEyMmwyNC41LTQ5LjFjMjQuNS00OSA2MS44LTkwLjYgMTA3LjktMTIwLjJsMTA4LjctNjkuOSAzOCAzOHpNNDg0LjIgMjMuOUwzODQuMyA4OC4yYy01My40IDM0LjMtOTYuNSA4Mi40LTEyNC45IDEzOS4xbC0yNC41IDQ5LjFjLTIwLjYgNDEuMy01MC4zIDc3LjMtODYuOSAxMDUuNGwtOTEuNCA3MC4zLTM2LjktMzYuOWMtMTQuNC0xNC40LTEyLjQtMzguNCA0LjMtNTAuMmw2NC42LTQ1LjdjNDMuNy0zMC45IDc5LjItNzEuOSAxMDMuNC0xMTkuNmwyNS4zLTQ5LjhDMjQyLjMgMTAwLjggMjc5LjMgNTguNiAzMjUgMjcuNGw3NC4xLTUwLjZjMTMuMS04LjkgMzAuNi03LjMgNDEuOCAzLjlsNDMuMyA0My4zeiJdCiAgICB9OwogICAgZmFQZXJzb25GYWxsaW5nQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWZhbGxpbmctYnVyc3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU0NyIsICJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA1LjRjMCA1NS4yLTIzLjcgMTA3LTYzLjkgMTQzLjFsNjIuOSA3NS41IDg5IDBjMTUuMSAwIDI5LjMgNy4xIDM4LjQgMTkuMmw0My4yIDU3LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNEwzNjggMzIwIDI2My4yIDMyMCAzNzYuOCA0NTkuOGMxMS4xIDEzLjcgOS4xIDMzLjktNC43IDQ1cy0zMy45IDkuMS00NS00LjdMMTM3LjQgMjY2LjZjLTYuMSAxNS05LjQgMzEuMy05LjQgNDhsMCA2OS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjkuNGMwLTY3LjQgMzUuNC0xMjkuOSA5My4yLTE2NC42bDQuNi0yLjhDMjAwLjQgMTI0IDIyNCA4Mi40IDIyNCAzNy40bDAtNS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xNiA4OEE1NiA1NiAwIDEgMSAxMjggODggNTYgNTYgMCAxIDEgMTYgODh6bTM3Ni03LjljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDh6bTEwNCAxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMHptLTU0LjUtOTcuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhUXVvdGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJxdW90ZS1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgyMjEsICJxdW90ZS1yaWdodC1hbHQiXSwgImYxMGUiLCAiTTQ0OCAyOTZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNnptLTI1NiAwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZ6Il0KICAgIH07CiAgICBmYVF1b3RlUmlnaHRBbHQgPSBmYVF1b3RlUmlnaHQ7CiAgICBmYUhvdXNlTWVkaWNhbEZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1mbGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTQiLCAiTTQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjY3LjUgNTkuMUw0MDAgMTg2LjkgNDAwIDUwMy40Yy05LjQgNS40LTIwLjMgOC42LTMyIDguNmwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMEMxMi42IDMwNCAwIDI5MS40IDAgMjc1LjkgMCAyNjguMyAzLjEgMjYxIDguNiAyNTUuN0wyMTIuNSA1OS4xQzIxOS45IDUyIDIyOS43IDQ4IDI0MCA0OHMyMC4xIDQgMjcuNSAxMS4xek0yMDQuOCAyNTYuOGwwIDQ0LTQ0IDBjLTkuNyAwLTE3LjYgNy45LTE3LjYgMTcuNmwwIDM1LjJjMCA5LjcgNy45IDE3LjYgMTcuNiAxNy42bDQ0IDAgMCA0NGMwIDkuNyA3LjkgMTcuNiAxNy42IDE3LjZsMzUuMiAwYzkuNyAwIDE3LjYtNy45IDE3LjYtMTcuNmwwLTQ0IDQ0IDBjOS43IDAgMTcuNi03LjkgMTcuNi0xNy42bDAtMzUuMmMwLTkuNy03LjktMTcuNi0xNy42LTE3LjZsLTQ0IDAgMC00NGMwLTkuNy03LjktMTcuNi0xNy42LTE3LjZsLTM1LjIgMGMtOS43IDAtMTcuNiA3LjktMTcuNiAxNy42eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1YjEiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA1MC43IDAgMTI4IDEyOC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMzk3LjMgMzkzLjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMzMuMyAzNTIgNDM4LjYgMjQ2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjg4IDMwNi43IDIwMi4yIDIyMC45QzI1MS40IDIwOS4xIDI4OCAxNjQuOCAyODggMTEyIDI4OCA1MC4xIDIzNy45IDAgMTc2IDBMMzIgMHpNMTc2IDE2MGwtMTEyIDAgMC05NiAxMTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHoiXQogICAgfTsKICAgIGZhRGljZVRocmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtdGhyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU4XSwgImY1MjciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMTI4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyOCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDYiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguN2wwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE3NiAzODRsMCA4MCA4MCAwIDAtNjQuMWMwLTEzLjcgMS45LTI3IDUuNS0zOS42LTUuNy01LjItMTMuMi04LjMtMjEuNS04LjNsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zMDcgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTM1MiA4MC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhSWRDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZC1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDcsICJkcml2ZXJzLWxpY2Vuc2UiXSwgImYyYzIiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRMMCA5NnptMCA0OGw1NzYgMCAwIDI3MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTQ0ek0yNDcuMyA0MTZjMjAuMiAwIDM1LjMtMTkuNCAyMi40LTM1LTE0LjctMTcuNy0zNi45LTI5LTYxLjctMjlsLTY0IDBjLTI0LjggMC00NyAxMS4zLTYxLjcgMjktMTIuOSAxNS42IDIuMiAzNSAyMi40IDM1bDE0Mi41IDB6TTE3NiAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM2MCAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHoiXQogICAgfTsKICAgIGZhRHJpdmVyc0xpY2Vuc2UyID0gZmFJZENhcmQyOwogICAgZmFDaXJjbGVQbGF5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGxheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY5LCAicGxheS1jaXJjbGUiXSwgImYxNDQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODhjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNXoiXQogICAgfTsKICAgIGZhUGxheUNpcmNsZTIgPSBmYUNpcmNsZVBsYXkyOwogICAgZmFGYWNlTGF1Z2hCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTMsICJsYXVnaC1iZWFtIl0sICJmNTlhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNmwyNjUuNCAwYzE0LjIgMCAyNS40IDEyLjMgMjEuNyAyNi0xOC41IDY4LTgwLjYgMTE4LTE1NC40IDExOFMxMjAgMzgyIDEwMS42IDMxNHpNMTc2IDE2NGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUxhdWdoQmVhbTIgPSBmYUZhY2VMYXVnaEJlYW0yOwogICAgZmFMZWFmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlYWYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjA2YyIsICJNNDcxLjMgNi43QzQ3Ny43IC42IDQ4Ny0xLjYgNDk1LjYgMS4yIDUwNS40IDQuNSA1MTIgMTMuNyA1MTIgMjRsMCAxODYuOWMwIDEzMS4yLTEwOC4xIDIzNy4xLTIzOC44IDIzNy4xLTc3IDAtMTQzLjQtNDkuNS0xNjcuNS0xMTguNy0zNS40IDMwLjgtNTcuNyA3Ni4xLTU3LjcgMTI2LjcgMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA0NjkuMyAwIDQ1NkMwIDM4MS4xIDM4LjIgMzE1LjEgOTYuMSAyNzYuMyAxMzEuNCAyNTIuNyAxNzMuNSAyNDAgMjE2IDI0MGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0zOS43IDAtNzcuMyA4LjgtMTExIDI0LjUgMjMuMy03MCA4OS4yLTEyMC41IDE2Ny0xMjAuNSA2Ni40IDAgMTE1LjgtMjIuMSAxNDguNy00NCAxOS4yLTEyLjggMzUuNS0yOC4xIDUwLjctNDUuM3oiXQogICAgfTsKICAgIGZhSG91c2VDaGltbmV5VXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2NSIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTMxMiAyNTZhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek0xNDQgNDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgweiJdCiAgICB9OwogICAgZmFSb3RhdGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicmVkby1hbHQiLCAicm90YXRlLWZvcndhcmQiXSwgImYyZjkiLCAiTTQ4OCAxOTJsLTE0NCAwYy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQ2LjctNDYuN2MtNzUuMy01OC42LTE4NC4zLTUzLjMtMjUzLjUgMTUuOS03NSA3NS03NSAxOTYuNSAwIDI3MS41czE5Ni41IDc1IDI3MS41IDBjOC4yLTguMiAxNS41LTE2LjkgMjEuOS0yNi4xIDEwLjEtMTQuNSAzMC4xLTE4IDQ0LjYtNy45czE4IDMwLjEgNy45IDQ0LjZjLTguNSAxMi4yLTE4LjIgMjMuOC0yOS4xIDM0LjctMTAwIDEwMC0yNjIuMSAxMDAtMzYyIDBTLTI1IDE3NSA3NSA3NWM5NC4zLTk0LjMgMjQzLjctOTkuNiAzNDQuMy0xNi4yTDQ3MSA3YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTNTEyIDE0LjMgNTEyIDI0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFSZWRvQWx0ID0gZmFSb3RhdGVSaWdodDsKICAgIGZhUm90YXRlRm9yd2FyZCA9IGZhUm90YXRlUmlnaHQ7CiAgICBmYVRvb3RoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvb3RoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NDYzXSwgImY1YzkiLCAiTTE0NSA1LjdMMjI0IDMyIDMwMyA1LjdDMzE0LjMgMS45IDMyNiAwIDMzNy45IDAgMzk4LjcgMCA0NDggNDkuMyA0NDggMTEwLjFsMCA2OC41YzAgMjkuNC05LjUgNTguMS0yNy4yIDgxLjZsLTEuMSAxLjVjLTEyLjkgMTcuMi0yMS4zIDM3LjQtMjQuMyA1OC43TDM3My43IDQ3MS45Yy0zLjMgMjMtMjMgNDAuMS00Ni4yIDQwLjEtMjIuOCAwLTQyLjMtMTYuNS00Ni0zOUwyNjEuMyAzNTEuNmMtMy0xOC4yLTE4LjgtMzEuNi0zNy4zLTMxLjZzLTM0LjIgMTMuNC0zNy4zIDMxLjZMMTY2LjUgNDczYy0zLjggMjIuNS0yMy4yIDM5LTQ2IDM5LTIzLjIgMC00Mi45LTE3LjEtNDYuMi00MC4xTDUyLjYgMzIwLjVjLTMtMjEuMy0xMS40LTQxLjUtMjQuMy01OC43bC0xLjEtMS41QzkuNSAyMzYuNyAwIDIwOC4xIDAgMTc4LjdsMC02OC41QzAgNDkuMyA0OS4zIDAgMTEwLjEgMCAxMjIgMCAxMzMuNyAxLjkgMTQ1IDUuN3oiXQogICAgfTsKICAgIGZhSG91c2VDaGltbmV5V2luZG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXktd2luZG93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMGQiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMTYgMjI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXQogICAgfTsKICAgIGZhTW90b3JjeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3RvcmN5Y2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ5XSwgImYyMWMiLCAiTTI4MCAxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1Ni42IDAgMjIuNSA0OC43LTk1LjEgNzEuM2MtMzMuNC0yNS4xLTc1LTQwLTEyMC00MGwtNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwYzc4LjUgMCAxNDMuMiA1OS42IDE1MS4yIDEzNmwtMjUuNCAwYy0xMS4yLTU5LjItNjMuMy0xMDQtMTI1LjgtMTA0LTcwLjcgMC0xMjggNTcuMy0xMjggMTI4UzczLjMgNDgwIDE0NCA0ODBjNjIuNSAwIDExNC41LTQ0LjggMTI1LjgtMTA0bDUwLjIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTIyLjVjMC00NS4xIDI1LjctODUuNCA2NS41LTEwNy43bDEyLjEgMjYuMWMtMzIuNCAyMy4yLTUzLjUgNjEuMi01My41IDEwNC4xIDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjgtNTcuMy0xMjgtMTI4LTEyOGMtMTAuNyAwLTIxIDEuMy0zMC45IDMuOEw0MzMuOCAxNjAgNDg4IDE2MGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC01My4zIDBjLTYuOSAwLTEzLjcgMi4yLTE5LjIgNi40bC0xNy4xIDEyLjgtMjQuNi01My4zQzM2OS45IDIxLjQgMzYxLjQgMTYgMzUyIDE2bC03MiAwek00NDUuOCAzMDAuNGwyOC40IDYxLjZjNS42IDEyIDE5LjggMTcuMyAzMS44IDExLjdzMTcuMy0xOS44IDExLjctMzEuOGwtMjguNS02MS42YzIuMi0uMiA0LjQtLjMgNi43LS4zIDM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcyLTcyLTMyLjItNzItNzJjMC0yMC4yIDguMy0zOC41IDIxLjgtNTEuNnpNMTQ0IDQyNGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmMzMS4zIDAgNTggMjAgNjcuOSA0OEwxNDQgMzI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjkgMGMtOS45IDI4LTM2LjYgNDgtNjcuOSA0OHoiXQogICAgfTsKICAgIGZhQmFja3dhcmRGYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkLWZhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MTk4LCAiZmFzdC1iYWNrd2FyZCJdLCAiZjA0OSIsICJNNDkyLjIgNDc3LjZjLTEyIDUtMjUuNyAyLjItMzQuOS02LjlMMjg4IDMwMS4zIDI4OCA0NDhjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlMNjQgMzAxLjMgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMlM2NCA0Ni4zIDY0IDY0TDY0IDIxMC43IDIzMy40IDQxLjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMjg4IDUxLjEgMjg4IDY0bDAgMTQ2LjcgMTY5LjQtMTY5LjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNTEyIDUxLjEgNTEyIDY0bDAgMzg0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZ6Il0KICAgIH07CiAgICBmYUZhc3RCYWNrd2FyZCA9IGZhQmFja3dhcmRGYXN0OwogICAgZmFBZGRyZXNzQm9vazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1ib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzgsICJjb250YWN0LWJvb2siXSwgImYyYjkiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjA4IDI4OGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0em0wIDEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQ29udGFjdEJvb2syID0gZmFBZGRyZXNzQm9vazI7CiAgICBmYVNhaWxib2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhaWxib2F0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0NDUiLCAiTTI0MCAzNS45bDAgMzQ4LjEtMjI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDYxLjkgNTAuMSAxMTIgMTEyIDExMmwyODggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTguOC03LjItMTYtMTYtMTZsLTIwOCAwIDAtNDggMTYxLjcgMGMxMi45IDAgMjAuNS0xNC40IDEzLjItMjVMMjY5LjIgMjYuOWMtOC45LTEzLTI5LjItNi43LTI5LjIgOXpNMTkyIDMyMGwwLTE4NC4yYzAtMTYuMS0yMS0yMi4xLTI5LjYtOC41TDQ3LjMgMzExLjVjLTYuNyAxMC43IDEgMjQuNSAxMy42IDI0LjVMMTc2IDMzNmM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJvb2tCb29rbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWJvb2ttYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwYmIiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgMTY5LjRjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjYtNiAwLTExLjgtMi40LTE2LTYuNkwyNzIgMTQ0IDIzMC42IDE4NS40Yy00LjIgNC4yLTEwIDYuNi0xNiA2LjYtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjZMMTkyIDAgOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTIxIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTMwNSAyMjVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzg5NywgIm1pY3JvcGhvbmUtYWx0Il0sICJmM2M5IiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwyMzIgODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy00LjEgNDkuMy00NS4zIDg4LTk1LjcgODgtNTMgMC05Ni00My05Ni05Nkw5NiA5NnpNMjQgMTYwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDBjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDk3LjktNzMuMyAxNzguNy0xNjggMTkwLjVsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzczLjMgNDAyLjcgMCAzMjEuOSAwIDIyNGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lQWx0ID0gZmFNaWNyb3Bob25lTGluZXM7CiAgICBmYVJlcGx5QWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcGx5LWFsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWlsLXJlcGx5LWFsbCJdLCAiZjEyMiIsICJNMzMyLjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCA0OCAwYzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgMTEzLjMtODEuNSAxNjMuOS0xMDAuMiAxNzQuMS0yLjUgMS40LTUuMyAxLjktOC4xIDEuOS0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43IDAtNy41IDQuMy0xNC40IDkuOC0xOS41IDkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuNyAwLTUzLTQzLTk2LTk2LTk2bC0zMiAwIDAgODBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02Ljl6TTIwNS42IDIzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNTQuNiAyMDggMjA1LjYgMzU4LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxMCAyMzEuMmMtNi40LTYtMTAtMTQuNC0xMC0yMy4yczMuNi0xNy4yIDEwLTIzLjJMMTcxLjYgMjMuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhTWFpbFJlcGx5QWxsID0gZmFSZXBseUFsbDsKICAgIGZhVW5pdmVyc2FsQWNjZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVuaXZlcnNhbC1hY2Nlc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5YSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTYxLjUtODYuMWMtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVsMTEuOSA1LjFjMTcuMyA3LjQgMzUuMiAxMi45IDUzLjYgMTYuM2wwIDUwLjFjMCA0LjMtLjcgOC42LTIuMSAxMi42bC0yOC43IDg2LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjQuNC03My4yYzEuMy0zLjggNC44LTYuNCA4LjgtNi40czcuNiAyLjYgOC44IDYuNGwyNC40IDczLjJjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMlMzMzkgMzk3IDMzNC44IDM4NC40bC0yOC43LTg2LjFjLTEuNC00LjEtMi4xLTguMy0yLjEtMTIuNmwwLTUwLjFjMTguNC0zLjUgMzYuMy04LjkgNTMuNi0xNi4zbDExLjktNS4xYzEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZMMzM4LjcgMTc1Yy0yNi4xIDExLjItNTQuMiAxNy04Mi43IDE3cy01Ni41LTUuOC04Mi43LTE3bC0xMS45LTUuMXpNMjU2IDE2MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wYXBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUzMSwgNjMyNjMsICJ0b2lsZXQtcGFwZXItYWx0IiwgInRvaWxldC1wYXBlci1ibGFuayJdLCAiZjcxZSIsICJNMzI3LjEgMzJjLTguOCAxMS4xLTE2IDIzLjEtMjEuOSAzNC44LTIxLjQgNDIuNy0zMy4yIDk4LjQtMzMuMiAxNTcuMmwwIDI2NGMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA1NDRjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjI0QzAgMTE4IDQzIDMyIDk2IDMybDIzMS4xIDB6TTQxNiA0MTZjLTUzIDAtOTYtODYtOTYtMTkyczQzLTE5MiA5Ni0xOTIgOTYgODYgOTYgMTkyLTQzIDE5Mi05NiAxOTJ6bTAtMTI4YzE3LjcgMCAzMi0yOC43IDMyLTY0cy0xNC4zLTY0LTMyLTY0LTMyIDI4LjctMzIgNjQgMTQuMyA2NCAzMiA2NHoiXQogICAgfTsKICAgIGZhVG9pbGV0UGFwZXJBbHQgPSBmYVRvaWxldFBhcGVyOwogICAgZmFUb2lsZXRQYXBlckJsYW5rID0gZmFUb2lsZXRQYXBlcjsKICAgIGZhVnJDYXJkYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidnItY2FyZGJvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3MjkiLCAiTTUxMiA5Nkw2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTE3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2wzMy45LTMzLjljNy4yLTcuMiAxNy4xLTExLjMgMjcuMy0xMS4zczIwLjEgNC4xIDI3LjMgMTEuM2wzMy45IDMzLjljMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek04MCAyNDBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0zNTItNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVBpenphU2xpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGl6emEtc2xpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgxOCIsICJNMTY5LjcgLjljLTIyLjgtMS42LTQxLjkgMTQtNDcuNSAzNC43TDExMi41IDcyQzI5My4zIDcyLjMgNDM5LjcgMjE4LjcgNDQwIDM5OS41bDM2LjQtOS43YzIwLjgtNS41IDM2LjMtMjQuNyAzNC43LTQ3LjUtMTIuNi0xODIuOC0xNTguNi0zMjguOC0zNDEuNC0zNDEuNHptMjIyIDQxMS41Yy4yLTQuMSAuMy04LjIgLjMtMTIuNCAwLTE1NC42LTEyNS40LTI4MC0yODAtMjgwLTQuMSAwLTguMyAuMS0xMi40IC4zTC41IDQ5MS45Yy0xLjUgNS41IC4xIDExLjQgNC4xIDE1LjRzOS45IDUuNiAxNS40IDQuMWwzNzEuNi05OS4xek0xNzYgMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMTI4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTk2IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFTcHJheUNhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcHJheS1jYW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViZCIsICJNMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTEyOCAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI1NmMwLTUzIDQzLTk2IDk2LTk2bDEyOCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTIyNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIwOHptMjQwIDgwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMzIwIDY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0OCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNTEyIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMTI4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhVm9sdW1lTG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbHVtZS1sb3ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjQsICJ2b2x1bWUtZG93biJdLCAiZjAyNyIsICJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTM4MC42IDE4MS41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzYxLjEgMjI3LjYgMzY4IDI0MSAzNjggMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDAyLjEgMzEyLjkgNDE2IDI4Ni4xIDQxNiAyNTZzLTEzLjktNTYuOS0zNS41LTc0LjV6Il0KICAgIH07CiAgICBmYVZvbHVtZURvd24gPSBmYVZvbHVtZUxvdzsKICAgIGZhQ3Jvc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3Jvc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgzMjcsIDEwMDEzXSwgImY2NTQiLCAiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwLTgwIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsODAgMCAwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjA4IDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtODAgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDE3NiAweiJdCiAgICB9OwogICAgZmFQZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NDg1LCAibWFsZSJdLCAiZjE4MyIsICJNMjQ4IDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdsNDYuMyA2Mi40YzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzI3NCAxMzIgMjM0LjMgMTEyIDE5MiAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxMTIgMjM2LjcgMTEyIDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zeiJdCiAgICB9OwogICAgZmFNYWxlID0gZmFQZXJzb247CiAgICBmYUhvdXJnbGFzczMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTIwMywgNjIwMzIsICJob3VyZ2xhc3MtZW1wdHkiXSwgImYyNTQiLCAiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTFjMCA0Mi40LTE2LjkgODMuMS00Ni45IDExMy4xbC02Ny45IDY3LjkgNjcuOSA2Ny45YzMwIDMwIDQ2LjkgNzAuNyA0Ni45IDExMy4xbDAgMTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtMTFjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xbDY3LjktNjcuOS02Ny45LTY3LjlDNDguOSAxNTguMSAzMiAxMTcuNCAzMiA3NWwwLTExQzE0LjMgNjQgMCA0OS43IDAgMzJ6TTk2IDY0bDAgMTFjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlsNjcuOSA2Ny45IDY3LjktNjcuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45bDAtMTEtMTkyIDB6bTAgMzg0bDE5MiAwIDAtMTFjMC0yNS41LTEwLjEtNDkuOS0yOC4xLTY3LjlsLTY3LjktNjcuOS02Ny45IDY3LjljLTE4IDE4LTI4LjEgNDIuNC0yOC4xIDY3LjlsMCAxMXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW1wdHkyID0gZmFIb3VyZ2xhc3MzOwogICAgZmFGaXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMzFdLCAiZjU3OCIsICJNMTgwLjUgMTQxLjVDMjE5LjcgMTA4LjUgMjcyLjYgODAgMzM2IDgwczExNi4zIDI4LjUgMTU1LjUgNjEuNWMzOS4xIDMzIDY2LjkgNzIuNCA4MSA5OS44IDQuNyA5LjIgNC43IDIwLjEgMCAyOS4zLTE0LjEgMjcuNC00MS45IDY2LjgtODEgOTkuOC0zOS4yIDMzLjEtOTIgNjEuNS0xNTUuNSA2MS41cy0xMTYuMy0yOC41LTE1NS41LTYxLjVjLTE2LjItMTMuNy0zMC41LTI4LjUtNDIuNy00My4xTDQ4LjEgMzc5LjZjLTEyLjUgNy4zLTI4LjQgNS4zLTM4LjctNC45cy0xMi40LTI2LTUuMy0zOC42TDUwIDI1NiA0LjIgMTc1LjljLTcuMi0xMi42LTUtMjguNCA1LjMtMzguNnMyNi4xLTEyLjIgMzguNy00LjlsODkuNyA1Mi4zYzEyLjItMTQuNiAyNi41LTI5LjQgNDIuNy00My4xek00NDggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYURydW1zdGlja0JpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bXN0aWNrLWJpdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZkNyIsICJNMTYwIDI2NS4yYzAgOC41LTMuNCAxNi42LTkuNCAyMi42bC0yNi44IDI2LjhjLTEyLjMgMTIuMy0zMi41IDExLjQtNDkuNCA3LjItNC42LTEuMS05LjUtMS44LTE0LjUtMS44LTMzLjEgMC02MCAyNi45LTYwIDYwczI2LjkgNjAgNjAgNjBjNi4zIDAgMTIgNS43IDEyIDEyIDAgMzMuMSAyNi45IDYwIDYwIDYwczYwLTI2LjkgNjAtNjBjMC01LS42LTkuOC0xLjgtMTQuNS00LjItMTYuOS01LjItMzcuMSA3LjItNDkuNGwyNi44LTI2LjhjNi02IDE0LjEtOS40IDIyLjYtOS40bDg5LjIgMGM2LjMgMCAxMi40LS4zIDE4LjUtMSAxMS45LTEuMiAxNi40LTE1LjUgMTAuOC0yNi04LjUtMTUuOC0xMy4zLTMzLjgtMTMuMy01MyAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA4IDAgMTUuNyAuOCAyMy4yIDIuNCAxMS43IDIuNSAyNC4xLTUuOSAyMi0xNy42LTE0LjctODIuMy04Ni43LTE0NC44LTE3My4yLTE0NC44LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2bDAgODkuMnoiXQogICAgfTsKICAgIGZhQ2hhcnRTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0NzMiLCAiTTE5MiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MnpNMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzJ6TTQzMiA5NmwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI4OGMwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhQXRvbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdG9tIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg4M10sICJmNWQyIiwgIk0yMjQgMzk4LjhjLTExLjggNS4xLTIzLjQgOS43LTM0LjkgMTMuNSAxNi43IDMzLjggMzEgMzUuNyAzNC45IDM1LjdzMTguMS0xLjkgMzQuOS0zNS43Yy0xMS40LTMuOS0yMy4xLTguNC0zNC45LTEzLjV6TTQxNCAyNTZjMzMgNDUuMiA0NC4zIDkwLjkgMjMuNiAxMjgtMjAuMiAzNi4zLTYyLjUgNDkuMy0xMTUuMiA0My4yLTIyIDUyLjEtNTUuNyA4NC44LTk4LjQgODQuOHMtNzYuNC0zMi43LTk4LjQtODQuOEM3Mi45IDQzMy4zIDMwLjYgNDIwLjMgMTAuNCAzODQtMTAuMyAzNDYuOSAxIDMwMS4yIDM0IDI1NiAxIDIxMC44LTEwLjMgMTY1LjEgMTAuNCAxMjggMzAuNiA5MS43IDcyLjkgNzguNyAxMjUuNiA4NC44IDE0Ny42IDMyLjcgMTgxLjIgMCAyMjQgMHM3Ni40IDMyLjcgOTguNCA4NC44YzUyLjctNi4xIDk1IDYuOCAxMTUuMiA0My4yIDIwLjcgMzcuMSA5LjQgODIuOC0yMy42IDEyOHptLTY1LjggNjcuNGMtMS43IDE0LjItMy45IDI4LTYuNyA0MS4yIDMxLjggMS40IDM4LjYtOC43IDQwLjItMTEuNyAyLjMtNC4yIDctMTcuOS0xMS45LTQ4LjEtNi44IDYuMy0xNCAxMi41LTIxLjYgMTguNnptLTYuNy0xNzUuOWMyLjggMTMuMSA1IDI2LjkgNi43IDQxLjIgNy42IDYuMSAxNC44IDEyLjMgMjEuNiAxOC42IDE4LjktMzAuMiAxNC4yLTQ0IDExLjktNDguMS0xLjYtMi45LTguNC0xMy00MC4yLTExLjd6TTI1OC45IDk5LjdDMjQyLjEgNjUuOSAyMjcuOSA2NCAyMjQgNjRzLTE4LjEgMS45LTM0LjkgMzUuN2MxMS40IDMuOSAyMy4xIDguNCAzNC45IDEzLjUgMTEuOC01LjEgMjMuNC05LjcgMzQuOS0xMy41em0tMTU5IDg4LjljMS43LTE0LjMgMy45LTI4IDYuNy00MS4yLTMxLjgtMS40LTM4LjYgOC43LTQwLjIgMTEuNy0yLjMgNC4yLTcgMTcuOSAxMS45IDQ4LjEgNi44LTYuMyAxNC0xMi41IDIxLjYtMTguNnpNNzguMiAzMDQuOGMtMTguOSAzMC4yLTE0LjIgNDQtMTEuOSA0OC4xIDEuNiAyLjkgOC40IDEzIDQwLjIgMTEuNy0yLjgtMTMuMS01LTI2LjktNi43LTQxLjItNy42LTYuMS0xNC44LTEyLjMtMjEuNi0xOC42ek0zMDQgMjU2YTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHptLTgwLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTEyXSwgIjUwIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwUzI0OC40IDM1MiAxNjAgMzUybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0ek02NCAyODhsOTYgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmwtOTYgMCAwIDE5MnoiXQogICAgfTsKICAgIGZhSmV0RmlnaHRlclVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpldC1maWdodGVyLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MTgiLCAiTTIwNi44IDQ3LjhDMjAyLjMgNTguNSAyMDAgNzAgMjAwIDgxLjZsMCAxMDAuNC0xNTIgMTE0IDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAyMzQuNyAwIDI0OEwwIDM5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAxNTIgMCAwIDU0LjQtNjYgNTIuOGMtMy44IDMtNiA3LjYtNiAxMi41bDAgMjQuM2MwIDguOCA3LjIgMTYgMTYgMTZsODggMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA4OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0LjNjMC00LjktMi4yLTkuNS02LTEyLjVsLTY2LTUyLjggMC01NC40IDE1MiAwIDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTQ0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDgtMTUyLTExNCAwLTEwMC40YzAtMTEuNi0yLjMtMjMuMS02LjgtMzMuOGwtMjcuMS02NUMyNzQuNC0yNi4yIDI2NS43LTMyIDI1Ni0zMnMtMTguNCA1LjgtMjIuMiAxNC44bC0yNy4xIDY1eiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2MCIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXQogICAgfTsKICAgIGZhU2hlZXRQbGFzdGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoZWV0LXBsYXN0aWMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTU3MSIsICJNMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ5LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0wzNjUuMyAzODYuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OHptMjA4IDUuNWwwLTkzLjVjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwLTExNy41IDExNy41ek0xNTMgMTA1bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6bTk2IDMyTDEzNyAyNDljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjE1IDEwM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYVYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExOF0sICI1NiIsICJNMTkuNyAzNC41YzE2LjMtNi44IDM1IC45IDQxLjggMTcuMkwxOTIgMzY0LjggMzIyLjUgNTEuN2M2LjgtMTYuMyAyNS41LTI0IDQxLjgtMTcuMnMyNCAyNS41IDE3LjIgNDEuOGwtMTYwIDM4NGMtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdzLTI0LjYtNy44LTI5LjUtMTkuN0wyLjUgNzYuM2MtNi44LTE2LjMgLjktMzUgMTcuMi00MS44eiJdCiAgICB9OwogICAgZmFMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1zcXVhcmVzIl0sICJmMDNhIiwgIk00MCA0OEMyNi43IDQ4IDE2IDU4LjcgMTYgNzJsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRMNDAgNDh6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwek0xNiAyMzJsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek00MCAzNjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFMaXN0U3F1YXJlcyA9IGZhTGlzdDsKICAgIGZhU29sYXJQYW5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2xhci1wYW5lbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJhIiwgIk0xMjEuOCAzMmMtMzAgMC01NiAyMC44LTYyLjUgNTAuMUw5LjYgMzA2LjFDLjcgMzQ2LjEgMzEuMSAzODQgNzIgMzg0bDE4NC4xIDAgMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjQgMTg0LjEgMGM0MC45IDAgNzEuNC0zNy45IDYyLjUtNzcuOWwtNDkuOC0yMjRDNTEwLjQgNTIuOCA0ODQuNSAzMiA0NTQuNSAzMkwxMjEuOCAzMnpNMjQ1LjYgOTZsODUuMiAwIDcuMyA4OC05OS44IDAgNy4zLTg4em0tNTUuNSA4OGwtODcuOCAwIDE5LjYtODggNzUuNiAwLTcuMyA4OHpNOTEuNiAyMzJsOTQuNSAwLTcuMyA4OC0xMDYuNyAwIDE5LjYtODh6bTE0Mi42IDBsMTA3LjggMCA3LjMgODgtMTIyLjUgMCA3LjMtODh6bTE1NiAwbDk0LjUgMCAxOS42IDg4LTEwNi43IDAtNy4zLTg4ek00NzQgMTg0bC04Ny44IDAtNy4zLTg4IDc1LjYgMCAxOS42IDg4eiJdCiAgICB9OwogICAgZmFMYW5kTWluZU9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmQtbWluZS1vbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFiIiwgIk0zMTIgMGwwIDEyOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNEwyNjQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek0xNjAgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDgwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw4MCAwIDAtMzJ6TTEyIDExNC43YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43bDk2IDY0YzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zcy0yMi4zIDE0LTMzLjMgNi43bC05Ni02NGMtMTEtNy40LTE0LTIyLjMtNi43LTMzLjN6TTUzMC43IDEwOGMxMS03LjQgMjUuOS00LjQgMzMuMyA2LjdzNC40IDI1LjktNi43IDMzLjNsLTk2IDY0Yy0xMSA3LjQtMjUuOSA0LjQtMzMuMy02LjdzLTQuNC0yNS45IDYuNy0zMy4zbDk2LTY0eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkcGhvbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTExLCA2Mjg2MywgImhlYWRwaG9uZXMtYWx0IiwgImhlYWRwaG9uZXMtc2ltcGxlIl0sICJmMDI1IiwgIk02NCAyMjRjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDM3LjVjLTEwLTMuNS0yMC44LTUuNS0zMi01LjVsLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTE2MEM0NDggMTAwLjMgMzQ3LjcgMCAyMjQgMFMwIDEwMC4zIDAgMjI0TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMGMtMTEuMiAwLTIyIDEuOS0zMiA1LjVMNjQgMjI0eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzQWx0MiA9IGZhSGVhZHBob25lczI7CiAgICBmYUhlYWRwaG9uZXNTaW1wbGUyID0gZmFIZWFkcGhvbmVzMjsKICAgIGZhQnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODY1M10sICJmMjA3IiwgIk05NiAwQzQzIDAgMCA0MyAwIDk2TDAgMzg0YzAgMjkuOCAyMC40IDU0LjkgNDggNjJsMCAzNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMTkyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzRjMjcuNi03LjEgNDgtMzIuMiA0OC02MmwwLTI4OGMwLTUzLTQzLTk2LTk2LTk2TDk2IDB6TTY0IDE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDQgMCAwIDExMi0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OHptMTg0IDgwbDAtMTEyIDEwNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEwNCAwek05NiAzMjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yNTYgMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE1MiA3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhRmlsZVBvd2VycG9pbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtcG93ZXJwb2ludCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM0IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTUyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0IDI0IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJsLTQ4IDB6bTQ4IDk2bC0yNCAwIDAtNDggMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhUXVvdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInF1b3RlLWxlZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIwLCAicXVvdGUtbGVmdC1hbHQiXSwgImYxMGQiLCAiTTAgMjE2QzAgMTQ5LjcgNTMuNyA5NiAxMjAgOTZsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjE2em0yNTYgMGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMzZ6Il0KICAgIH07CiAgICBmYVF1b3RlTGVmdEFsdCA9IGZhUXVvdGVMZWZ0OwogICAgZmFDaGV2cm9uRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGV2cm9uLWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA3OCIsICJNMjAxLjQgNDA2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTkyLTE5MmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzM4LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MnoiXQogICAgfTsKICAgIGZhRWFydGhBc2lhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLWFzaWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTksICJnbG9iZS1hc2lhIl0sICJmNTdlIiwgIk01MCAyODQuOGM0LjIgMi4xIDkgMy4yIDE0IDMuMmw1MC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMTMuMyAxMy4zYzYgNiAxNC4xIDkuNCAyMi42IDkuNGwxOC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNC0xMC43IDI0LTI0bDAtNDIuN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmwxMy4zLTEzLjNjNi02IDkuNC0xNC4xIDkuNC0yMi42TDMwNCA1N2MwLTEuMi0uMS0yLjMtLjItMy41LTE1LjQtMy42LTMxLjQtNS41LTQ3LjgtNS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOCAwIDkuOCAuNyAxOS40IDIgMjguOHptNDAzLjMgMzcuM2MtMy4yLTEuNC02LjctMi4xLTEwLjUtMi4xTDQzMiAzMjBjLTguOCAwLTE2LTcuMi0xNi0xNnMtNy4yLTE2LTE2LTE2bC0zNC43IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC00NS4zIDQ1LjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDE4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTguNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40IDIuMiAyLjIgNC43IDQuMSA3LjMgNS41IDM5LjMtMjUuNCA2OS41LTYzLjYgODQuNi0xMDguOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTI4IDM2OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0yNzIgMjU2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2em00OC0xMTJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUdsb2JlQXNpYSA9IGZhRWFydGhBc2lhOwogICAgZmFDZW50U2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZW50LXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTNmNSIsICJNMjA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNS40YzQzLjYgNS4yIDgzIDI0LjUgMTEzLjMgNTMuMSAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTI0LjQtMjMtNTcuMi0zNy4xLTkzLjMtMzcuMS03NS4xIDAtMTM2IDYwLjktMTM2IDEzNnM2MC45IDEzNiAxMzYgMTM2YzM2LjIgMCA2OS0xNC4xIDkzLjMtMzcuMSAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMkMzMjMgNDMwLjEgMjgzLjYgNDQ5LjQgMjQwIDQ1NC42bDAgMjUuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI4Qzg0LjcgNDMzLjUgMTYgMzUyLjggMTYgMjU2Uzg0LjcgNzguNSAxNzYgNjBsMC0yOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhU2hpZWxkQ2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1jYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MiIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MCAxNTQuNGMwLTUuOCA0LjctMTAuNCAxMC40LTEwLjRsLjIgMGMzLjQgMCA2LjUgMS42IDguNSA0LjNsNDAgNTMuM2MzIDQgNy44IDYuNCAxMi44IDYuNGw0OCAwYzUgMCA5LjgtMi40IDEyLjgtNi40bDQwLTUzLjNjMi0yLjcgNS4yLTQuMyA4LjUtNC4zbC4yIDBjNS44IDAgMTAuNCA0LjcgMTAuNCAxMC40TDM1MiAyNzJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0xMTcuNnpNMjE2IDI4OGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTk2LTE2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il0KICAgIH07CiAgICBmYVNjaG9vbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2YiIsICJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhTWFydGluaUdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnRpbmktZ2xhc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjQsICJnbGFzcy1tYXJ0aW5pLWFsdCJdLCAiZjU3YiIsICJNMi40IDUxLjhDNy40IDM5LjggMTkuMSAzMiAzMiAzMmw0NDggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDI4OCAzMDEuMyAyODggNDQ4IDM1MiA0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xNDYuNy0yMTQuNi0yMTQuNkMuMiA3Ny41LTIuNSA2My43IDIuNCA1MS44ek0zNTQuNyAxNDRsNDgtNDgtMjkzLjUgMCA0OCA0OCAxOTcuNSAweiJdCiAgICB9OwogICAgZmFHbGFzc01hcnRpbmlBbHQgPSBmYU1hcnRpbmlHbGFzczsKICAgIGZhUGx1ZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjY4XSwgImYxZTYiLCAiTTEyOC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA2NGMwIDk1LjEtNjkuMiAxNzQuMS0xNjAgMTg5LjNsMCA2Ni43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxMDEuMiAzOTguMSAzMiAzMTkuMSAzMiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVBhbm9yYW1hID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbm9yYW1hIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUyMDkiLCAiTTQzLjkgNDhDMTkuNyA0OCAwIDY3LjcgMCA5MS45TDAgNDIwLjFjMCAyNC4zIDE5LjcgNDMuOSA0My45IDQzLjkgNS41IDAgMTAuNy0xIDE1LjctMi45IDEyLjktNC45IDEwMy40LTM3LjEgMjI4LjQtMzcuMXMyMTUuNSAzMi4zIDIyOC40IDM3LjFjNSAxLjkgMTAuMiAyLjkgMTUuNyAyLjkgMjQuMyAwIDQzLjktMTkuNyA0My45LTQzLjlsMC0zMjguMmMwLTI0LjMtMTkuNy00My45LTQzLjktNDMuOS01LjUgMC0xMC43IDEtMTUuNyAyLjktMTIuOSA0LjktMTAzLjQgMzcuMS0yMjguNCAzNy4xUzcyLjUgNTUuNyA1OS42IDUwLjlDNTQuNiA0OSA0OS40IDQ4IDQzLjkgNDh6TTcyIDE3NmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwem0yNjQuMS0xNmM3LjUgMCAxNC42IDMuNiAxOS4xIDkuNkw0NzkuNyAzMzYuMmM1LjkgNy45IDYuNCAxOC41IDEuMyAyNi45cy0xNC44IDEyLjgtMjQuNSAxMS4xYy00NS44LTcuOC0xMDMuMy0xNC4yLTE2OC40LTE0LjItNjUuNiAwLTEyMy40IDYuNS0xNjkuMyAxNC40LTkuOCAxLjctMTkuNy0yLjktMjQuNy0xMS41cy00LjMtMTkuNCAxLjktMjcuMkwxNjUuMyAyNDljNC42LTUuNyAxMS41LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwyNy41IDM0LjQgODYuNy0xMTMuOWM0LjYtNiAxMS43LTkuNSAxOS4yLTkuNXoiXQogICAgfTsKICAgIGZhQ2xvY2tSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb2NrLXJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhpc3RvcnkiXSwgImYxZGEiLCAiTTI4OCA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MlMzOTQgNDQ4IDI4OCA0NDhjLTY1LjIgMC0xMjIuOS0zMi41LTE1Ny42LTgyLjMtMTAuMS0xNC41LTMwLjEtMTgtNDQuNi03LjlzLTE4IDMwLjEtNy45IDQ0LjZDMTI0LjEgNDY4LjYgMjAxIDUxMiAyODggNTEyIDQyOS40IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NlM0MjkuNCAwIDI4OCAwQzIwMi4zIDAgMTI2LjUgNDIuMSA4MCAxMDYuN0w4MCA4MGMwLTE3LjctMTQuMy0zMi0zMi0zMlMxNiA2Mi4zIDE2IDgwbDAgMTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjYgMGMuNSAwIDEgMCAxLjUgMGw4NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zOC4zIDBDMTU0LjkgMTAyLjYgMjE3IDY0IDI4OCA2NHptMjQgODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDRjMCA2LjQgMi41IDEyLjUgNyAxN2w3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY1LTY1IDAtOTQuMXoiXQogICAgfTsKICAgIGZhSGlzdG9yeSA9IGZhQ2xvY2tSb3RhdGVMZWZ0OwogICAgZmFKYXJXaGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqYXItd2hlYXQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTUxNyIsICJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0xMTIgMzJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMTYwYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6bTQ4IDExNy43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjdsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMjU2Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN3pNMTEyIDM1MmwtNDIuMiAwYy0zLjIgMC01LjggMi42LTUuOCA1LjggMCAzMi4xIDI2IDU4LjIgNTguMiA1OC4ybDIxLjggMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMiAyMS44IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMzUyYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6Il0KICAgIH07CiAgICBmYUNsb3VkQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWFycm93LWRvd24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjMzNywgImNsb3VkLWRvd25sb2FkIiwgImNsb3VkLWRvd25sb2FkLWFsdCJdLCAiZjBlZCIsICJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zNzcgMzEzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhQ2xvdWREb3dubG9hZCA9IGZhQ2xvdWRBcnJvd0Rvd247CiAgICBmYUNsb3VkRG93bmxvYWRBbHQgPSBmYUNsb3VkQXJyb3dEb3duOwogICAgZmFUcnVja1JhbXBCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stcmFtcC1ib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidHJ1Y2stbG9hZGluZyJdLCAiZjRkZSIsICJNNDAwIDMyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI0OC4yLTI5Ny4yIDg5LjJDNS45IDQ1NC40LTMuNyA0NzIuMyAxLjQgNDg5LjJzMjIuOSAyNi41IDM5LjggMjEuNWwzMTUuNS05NC42IDQzLjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhsMC0zOTItMTc2IDB6TTUyOCA0MjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDAgMTcuOS00MCA0MC00MGMyMi4xIDAgMzkuOSAxNy45IDQwIDM5LjlsMCAuMXpNNTEuOSAxNDkuNUMxOC4xIDE1OS44LS45IDE5NS42IDkuNCAyMjkuNGwyOC4xIDkxLjhDNDcuOCAzNTUgODMuNiAzNzQgMTE3LjQgMzYzLjdsOTEuOC0yOC4xYzMzLjgtMTAuMyA1Mi44LTQ2LjEgNDIuNS03OS45bC0yOC4xLTkxLjhjLTEwLjMtMzMuOC00Ni4xLTUyLjgtNzkuOS00Mi41TDUxLjkgMTQ5LjV6Il0KICAgIH07CiAgICBmYVRydWNrTG9hZGluZyA9IGZhVHJ1Y2tSYW1wQm94OwogICAgZmFBbmdsZURvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGUtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzg5NjRdLCAiZjEwNyIsICJNMTY5LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMzA2LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWMiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhV2luZG93TWF4aW1pemUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1tYXhpbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MF0sICJmMmQwIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMjQgNjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFIYW5kc0hvbGRpbmdDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtaG9sZGluZy1jaXJjbGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRmYiIsICJNMzIwIDBhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2ek00MCA2NGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDE2MC4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDUxLjEgNTEuMWM4LjMgOC4zIDIxLjMgOS42IDMxIDMuMSAxMi45LTguNiAxNC43LTI2LjkgMy43LTM3LjgtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjJsMCAwIDI1LjMgMjUuM2MyMSAyMSAzMi44IDQ5LjUgMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjYuNyAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNUwwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyMjEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuMyAwIDBjNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4yLTExIDExLTkuMiAyOS4yIDMuNyAzNy44IDkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDU2MCAxMDRjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il0KICAgIH07CiAgICBmYUxvY2F0aW9uUGluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2F0aW9uLXBpbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtYXAtbWFya2VyIl0sICJmMDQxIiwgIk0xOTIgMEM4NiAwIDAgODQuNCAwIDE4OC42IDAgMzA3LjkgMTIwLjIgNDUwLjkgMTcwLjQgNTA1LjQgMTgyLjIgNTE4LjIgMjAxLjggNTE4LjIgMjEzLjYgNTA1LjQgMjYzLjggNDUwLjkgMzg0IDMwNy45IDM4NCAxODguNiAzODQgODQuNCAyOTggMCAxOTIgMHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VyID0gZmFMb2NhdGlvblBpbjsKICAgIGZhQm93bGluZ0JhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bGluZy1iYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MzYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0yMDggMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS02NC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUNhcnRGbGF0YmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtZmxhdGJlZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkb2xseS1mbGF0YmVkIl0sICJmNDc0IiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjg4YzAgMzkuOCAyOS4xIDcyLjggNjcuMSA3OS0yIDUuMy0zLjEgMTEtMy4xIDE3IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsMTk3LjUgMGMtMS44IDUtMi43IDEwLjQtMi43IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsMzQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00MDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjg4QzEyOCAzNS44IDkyLjIgMCA0OCAwTDMyIDB6TTIyNCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNzZjMCAyNi41IDIxLjUgNDggNDggNDhsMjQwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjI0IDY0eiJdCiAgICB9OwogICAgZmFEb2xseUZsYXRiZWQgPSBmYUNhcnRGbGF0YmVkOwogICAgZmFIb3VzZVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJob21lLXVzZXIiXSwgImUxYjAiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTIwMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNDQgNDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2eiJdCiAgICB9OwogICAgZmFIb21lVXNlciA9IGZhSG91c2VVc2VyOwogICAgZmFHaG9zdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnaG9zdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODEyM10sICJmNmUyIiwgIk00MC4xIDQ2Ny4xbC0xMS4yIDlDMjUuNyA0NzguNiAyMS44IDQ4MCAxNy44IDQ4MCA4IDQ4MCAwIDQ3MiAwIDQ2Mi4yTDAgMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MmwwIDI3MC4yYzAgOS44LTggMTcuOC0xNy44IDE3LjgtNCAwLTcuOS0xLjQtMTEuMS0zLjlsLTExLjItOWMtMTMuNC0xMC43LTMyLjgtOS00NC4xIDMuOUwyNjkuMyA1MDZjLTMuMyAzLjgtOC4yIDYtMTMuMyA2cy05LjktMi4yLTEzLjMtNmwtMjYuNi0zMC41Yy0xMi43LTE0LjYtMzUuNC0xNC42LTQ4LjIgMEwxNDEuMyA1MDZjLTMuMyAzLjgtOC4yIDYtMTMuMyA2cy05LjktMi4yLTEzLjMtNkw4NC4yIDQ3MWMtMTEuMy0xMi45LTMwLjctMTQuNi00NC4xLTMuOXpNMTYwIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUNvbW1lbnROb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LW5vZGVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2OTYiLCAiTTQ4MCAyMDhDNTAzLjcgMjA4IDUyNS42IDIxNS4zIDU0My43IDIyNy45IDUzNi45IDEwMC45IDQyNSAwIDI4OCAwIDE0Ni42IDAgMzIgMTA3LjUgMzIgMjQwIDMyIDI5NC4zIDUxLjIgMzQ0LjMgODMuNiAzODQuNUwzNC44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN2MyNy4yIDExLjQgNTYuOSAxOC40IDg4LjEgMjAuMiAuMS0xOC45IDQuOS0zOCAxNS01NS41IDE3LjEtMjkuNyA0NS44LTQ4LjUgNzctNTQuMmw5LjItMTZjLTMuNC0xMC43LTUuMi0yMi01LjItMzMuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnpNMzI4LjYgNDQ4Yy0xNy43IDMwLjYtNy4yIDY5LjcgMjMuNCA4Ny40czY5LjcgNy4yIDg3LjQtMjMuNGMxLjUtMi42IDIuOC01LjMgMy45LThsNzMuMyAwYzEuMSAyLjcgMi40IDUuNCAzLjkgOCAxNy43IDMwLjYgNTYuOCA0MS4xIDg3LjQgMjMuNHM0MS4xLTU2LjggMjMuNC04Ny40Yy0xMy40LTIzLjItMzkuMS0zNC44LTY0LTMxLjRsLTE3LjYtMzAuN2MtMTEgMTEuNy0yNSAyMC42LTQwLjYgMjUuNmwxNi41IDI4LjljLTMuOCA0LjgtNi44IDEwLTkgMTUuNmwtNzMuNCAwYy0yLjItNS42LTUuMy0xMC44LTktMTUuNmwzMy01Ny43YzQuMSAuOCA4LjQgMS4zIDEyLjggMS4zIDM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjRjMCAxMy40IDQuMSAyNS44IDExLjIgMzYuMWwtMzQuNiA2MC41Yy0yNS0zLjQtNTAuNiA4LjMtNjQgMzEuNHoiXQogICAgfTsKICAgIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1hcnJvdy1kb3duLXRvLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzOCIsICJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0zMTguMyAyOTkuMWwtNDYuMy02Mi40IDAgMjQzLjMgMjcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgwIDAgMC0yNDMuMy00Ni4zIDYyLjRjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTE3NiA0ODBsMzIgMCAwLTEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDEyOHpNNTY2LjYgMTY2LjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMNDMyIDE0Ni43IDQzMiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVmIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6Il0KICAgIH07CiAgICBmYVBlcnNvblN3aW1taW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zd2ltbWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzk0NiwgInN3aW1tZXIiXSwgImY1YzQiLCAiTTU1MiAxNTJhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek0yOTMuNCAxOTguMmwtODguNiA3My45YzEuMSAwIDIuMi0uMSAzLjMtLjEgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDIyLjEgMTYuNiAyOS4xIDE2LjYgNTEuMiAwIDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuNC0zMS40IDQuOCAwIDkuNyAuMiAxNC41IC42LTguMy0zMC0yNC4zLTU3LjctNDYuOC04MC4yLTE4LjQtMTguNC00MC42LTMyLjctNjUtNDEuOGwtNjguNi0yNS43Yy0yNy40LTEwLjMtNTgtNy41LTgzLjEgNy42bC01My41IDMyLjFjLTE1LjIgOS4xLTIwLjEgMjguNy0xMSA0My45czI4LjcgMjAuMSA0My45IDExTDIzMCAxODcuM2M4LjQtNSAxOC42LTUuOSAyNy43LTIuNWwzNS43IDEzLjR6bTExMCAxODEuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDM4Ni4zIDE3LjYgMzk0LjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45eiJdCiAgICB9OwogICAgZmFTd2ltbWVyID0gZmFQZXJzb25Td2ltbWluZzsKICAgIGZhQ29tbWVudERvdHMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3MiwgNjIwNzUsICJjb21tZW50aW5nIl0sICJmNGFkIiwgIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMTI4IDIwOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ29tbWVudGluZzIgPSBmYUNvbW1lbnREb3RzMjsKICAgIGZhQ2hhcnRQaWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtcGllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInBpZS1jaGFydCJdLCAiZjIwMCIsICJNNTEyLjQgMjQwbC0xNzYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzZjMC0xNy43IDE0LjQtMzIuMiAzMS45LTI5LjkgMTA3IDE0LjIgMTkxLjggOTkgMjA2IDIwNiAyLjMgMTcuNS0xMi4yIDMxLjktMjkuOSAzMS45ek0yMjIuNiAzNy4yYzE4LjEtMy44IDMzLjggMTEgMzMuOCAyOS41bDAgMTk3LjNjMCA1LjYgMiAxMSA1LjUgMTUuM0wzOTQgNDM4LjdjMTEuNyAxNC4xIDkuMiAzNS40LTYuOSA0NC4xLTM0LjEgMTguNi03My4yIDI5LjItMTE0LjcgMjkuMi0xMzIuNSAwLTI0MC0xMDcuNS0yNDAtMjQwIDAtMTE1LjUgODEuNS0yMTEuOSAxOTAuMi0yMzQuOHpNNDc3LjggMjg4bDY0IDBjMTguNSAwIDMzLjMgMTUuNyAyOS41IDMzLjgtMTAuMiA0OC40LTM1IDkxLjQtNjkuNiAxMjQuMi0xMi4zIDExLjctMzEuNiA5LjItNDIuNC0zLjlMMzc0LjkgMzQwLjRjLTE3LjMtMjAuOS0yLjQtNTIuNCAyNC42LTUyLjRsNzguMiAweiJdCiAgICB9OwogICAgZmFQaWVDaGFydCA9IGZhQ2hhcnRQaWU7CiAgICBmYUZyb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnJvZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTJlIiwgIk0zNjggMzJjNDEuNyAwIDc1LjkgMzEuOCA3OS43IDcyLjVsODUuNiAyNi4zYzI1LjQgNy44IDQyLjggMzEuMyA0Mi44IDU3LjkgMCAyMS44LTExLjcgNDEuOS0zMC43IDUyLjdsLTE0NC41IDgyLjEgOTIuNSA5Mi41IDUwLjcgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43LTQwLjYtNDAuNi0xMDYuMy00MC42LTE0Ni45LS4xTDEwMSAzMjQuNGMtNi40IDYuMS02LjcgMTYuMi0uNiAyMi42czE2LjIgNi42IDIyLjYgLjZsNzMuOC03MC4yIC4xLS4xIC4xLS4xYzMuNS0zLjUgNy4zLTYuNiAxMS4zLTkuMiAyNy45LTE4LjUgNjUuOS0xNS40IDkwLjUgOS4yIDI0LjcgMjQuNyAyNy43IDYyLjkgOSA5MC45LTIuNiAzLjgtNS42IDcuNS05IDEwLjlMMjYxLjggNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwQzI4LjcgNDgwIDAgNDUxLjMgMCA0MTYgMCAyNDkuNiAxMjcgMTEyLjkgMjg5LjMgOTcuNSAyOTYuMiA2MC4yIDMyOC44IDMyIDM2OCAzMnptMCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFXaW5lQm90dGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtYm90dGxlIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY3MmYiLCAiTTgwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxMS44LTYuNCAyMi4yLTE2IDI3LjdsMCAxNDUuNmM1Ni41IDI0LjcgOTYgODEuMSA5NiAxNDYuN2wwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1NzZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjg4YzAtNjUuNiAzOS41LTEyMiA5Ni0xNDYuN0w5Ni00LjNDODYuNC05LjggODAtMjAuMiA4MC0zMnpNOTYgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAyODh6Il0KICAgIH07CiAgICBmYUluYm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImluYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwMWMiLCAiTTkxLjggMzJDNTkuOSAzMiAzMi45IDU1LjQgMjguNCA4Ni45TC42IDI4MS4yYy0uNCAzLS42IDYtLjYgOS4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI1LjdjMC0zLS4yLTYuMS0uNi05LjFMNDgzLjYgODYuOUM0NzkuMSA1NS40IDQ1Mi4xIDMyIDQyMC4yIDMyTDkxLjggMzJ6bTAgNjRsMzI4LjUgMCAyNy40IDE5Mi01OS45IDBjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE0LjMgMjguNmMtNS40IDEwLjgtMTYuNSAxNy43LTI4LjYgMTcuN2wtMTIwLjQgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN2wtMTQuMy0yOC42Yy01LjQtMTAuOC0xNi41LTE3LjctMjguNi0xNy43TDY0LjMgMjg4IDkxLjggOTZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaC1zcXVhcmUiXSwgImYwZmQiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyMCAxNjhsMCAxNzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NC05NiAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDk2IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIU3F1YXJlID0gZmFTcXVhcmVIOwogICAgZmFIb3VzZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlM2IyIiwgIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yMjQgMjQ4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGV2cm9uUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtcmlnaHQiXSwgImYxMzgiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6TTI0MSAzNzdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODctODctODctODdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEwzNDUgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI0MSAzNzd6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVSaWdodCA9IGZhQ2lyY2xlQ2hldnJvblJpZ2h0OwogICAgZmFGaWxlQ3N2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY3N2IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZGQiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODAgMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwxNzYgMCAwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek0yNjQgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptMTM2IDBjLTI4LjcgMC01MiAyMy4zLTUyIDUyczIzLjMgNTIgNTIgNTJjNi42IDAgMTIgNS40IDEyIDEycy01LjQgMTItMTIgMTJsLTMyIDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJzLTIzLjMtNTItNTItNTJjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMjQgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI0IDB6bTk2IDBjLTExIDAtMjAgOS0yMCAyMGwwIDMxLjZjMCAzNS41IDEwLjUgNzAuMyAzMC4yIDk5LjhsNS4xIDcuN2MzLjcgNS42IDEwIDguOSAxNi42IDguOXMxMi45LTMuMyAxNi42LTguOWw1LjEtNy43YzE5LjctMjkuNiAzMC4yLTY0LjMgMzAuMi05OS44bDAtMzEuNmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMS42YzAgMTkuNi00LjEgMzguOS0xMiA1Ni43LTcuOS0xNy44LTEyLTM3LjEtMTItNTYuN2wwLTMxLjZjMC0xMS05LTIwLTIwLTIweiJdCiAgICB9OwogICAgZmFIYXRDb3dib3kgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGF0LWNvd2JveSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGMwIiwgIk0xODIuMiA3Ni4xTDEzMC44IDMwNy41QzE0NS41IDMyNC45IDE2Ny40IDMzNiAxOTIgMzM2bDI1NiAwYzI0LjYgMCA0Ni41LTExLjEgNjEuMi0yOC41TDQ1Ny44IDc2LjFjLTUuNy0yNS44LTI4LjYtNDQuMS01NS00NC4xLTEyLjIgMC0yNC4xIDQtMzMuOCAxMS4zbC00LjcgMy41Yy0yNi4zIDE5LjctNjIuNCAxOS43LTg4LjYgMEwyNzEgNDMuM2MtOS44LTcuMy0yMS42LTExLjMtMzMuOC0xMS4zLTI2LjQgMC00OS4zIDE4LjMtNTUgNDQuMXpNNjQgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjM4LjMgMCAyNTZDMCAzNjIgODYgNDQ4IDE5MiA0NDhsMjU2IDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTI1NiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5Ub25ndWVXaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDAsICJncmluLXRvbmd1ZS13aW5rIl0sICJmNThiIiwgIk0xNTIuMiA0OTAuMUM2Mi41IDQ1MC4yIDAgMzYwLjQgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgMTA0LjQtNjIuNSAxOTQuMi0xNTIuMiAyMzQuMSA1LjMtMTMgOC4yLTI3LjIgOC4yLTQyLjFsMC02MS43YzE2LjktMTYuNSAzMC4xLTM2LjcgMzguMy01OS4zIDQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMS0zOS4yIDEyLjItODMuNyAxOS4xLTEzMC43IDE5LjFzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSA4LjMgMjIuNiAyMS41IDQyLjggMzguMyA1OS4zbDAgNjEuN2MwIDE0LjkgMi45IDI5LjEgOC4yIDQyLjF6TTE1MiAyMTJsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xODQgNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTMyMCA0MDIuNmwwIDQ1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC00NS40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45IDIuOCAxMi42IDIwLjggMTIuNiAyMy42IDAgMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTMzNiAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlV2luazIgPSBmYUZhY2VHcmluVG9uZ3VlV2luazI7CiAgICBmYUwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwOF0sICI0YyIsICJNNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNTIgMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duU2hvcnRXaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tc2hvcnQtd2lkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC1kZXNjIiwgInNvcnQtYW1vdW50LWRvd24tYWx0Il0sICJmODg0IiwgIk0yNDYuNiAzNzQuNmwtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyMCAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudERlc2MgPSBmYUFycm93RG93blNob3J0V2lkZTsKICAgIGZhU29ydEFtb3VudERvd25BbHQgPSBmYUFycm93RG93blNob3J0V2lkZTsKICAgIGZhSG91cmdsYXNzSGFsZjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzLWhhbGYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTIiXSwgImYyNTIiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAxOS01LjYgMzcuNC0xNiA1M0wxMTIgMTI4Yy0xMC4zLTE1LjYtMTYtMzQtMTYtNTN6bTE2IDMwOWMzLjUtNS4zIDcuNi0xMC4zIDEyLjEtMTQuOWw2Ny45LTY3LjkgNjcuOSA2Ny45YzQuNiA0LjYgOC42IDkuNiAxMi4yIDE0LjlMMTEyIDM4NHoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMjIgPSBmYUhvdXJnbGFzc0hhbGYyOwogICAgZmFTcG9vbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcG9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM0OCwgNjE4NzMsICJ1dGVuc2lsLXNwb29uIl0sICJmMmU1IiwgIk0yNDUuOCAyMjAuOWMtMTQuNS0xNy42LTIxLjgtMzkuMi0yMS44LTYwLjggMC04MC4yIDk2LTE2MC4yIDE5Mi0xNjAuMiA1MyAwIDk2IDQzIDk2IDk2IDAgOTYtODAgMTkyLTE2MC4yIDE5Mi0yMS42IDAtNDMuMi03LjMtNjAuOC0yMS44TDU0LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0NS44IDIyMC45eiJdCiAgICB9OwogICAgZmFVdGVuc2lsU3Bvb24gPSBmYVNwb29uOwogICAgZmFDcmVkaXRDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcmVkaXQtY2FyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3OSwgNjIwODMsICJjcmVkaXQtY2FyZC1hbHQiXSwgImYwOWQiLCAiTTAgMTI4bDAgMzIgNTEyIDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOHptMCA4MEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3Ni01MTIgMHpNNjQgMzYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xNDQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQ3JlZGl0Q2FyZEFsdDIgPSBmYUNyZWRpdENhcmQyOwogICAgZmFGaWxlSW52b2ljZURvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWludm9pY2UtZG9sbGFyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NzEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek02NCA4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHptMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMTEyIDc2bDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDE1MiA0MDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3BhZ2hldHRpLW1vbnN0ZXItZmx5aW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInBhc3RhZmFyaWFuaXNtIl0sICJmNjdiIiwgIk0yMDggNjRhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMGMwIDE2LjItNiAzMS4xLTE2IDQyLjNsMTUuNiAzMS4yYzE4LjctNiAzOS45LTkuNSA2NC40LTkuNXM0NS44IDMuNSA2NC40IDkuNUw0MDAgMTA2LjNjLTEwLTExLjMtMTYtMjYuMS0xNi00Mi4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjQtMjguNyA2NC02NCA2NGMtMS43IDAtMy40LS4xLTUuMS0uMkw0MjcuOCAxNThjMjEuMSAxMy42IDM3LjcgMzAuMiA1MS40IDQ2LjQgNy4xIDguMyAxMy41IDE2LjYgMTkuMyAyNGwxLjQgMS44YzYuMyA4LjEgMTEuNiAxNC44IDE2LjcgMjAuNCAxMC43IDExLjcgMTYuMSAxMy40IDE5LjQgMTMuNCAyLjUgMCA0LjMtLjYgNy4xLTMuMyAzLjctMy41IDcuMS04LjggMTIuNS0xNy40bC42LS45YzQuNi03LjQgMTEtMTcuNiAxOS40LTI1LjcgOS43LTkuMyAyMi45LTE2LjcgNDAuNC0xNi43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yLjUgMC00LjMgLjYtNy4xIDMuMy0zLjcgMy41LTcuMSA4LjgtMTIuNSAxNy40bC0uNiAuOWMtNC42IDcuNC0xMSAxNy42LTE5LjQgMjUuNy05LjcgOS4zLTIyLjkgMTYuNy00MC40IDE2LjctMTguNSAwLTMyLjktOC41LTQ0LjMtMTguNi0zLjEgNC02LjYgOC4zLTEwLjUgMTIuNyAxLjQgNC4zIDIuOCA4LjUgNCAxMi41IC45IDMgMS44IDUuOCAyLjYgOC42IDMgOS44IDUuNSAxOC4yIDguNiAyNS45IDMuOSA5LjggNy40IDE1LjQgMTAuOCAxOC41IDIuNiAyLjQgNS45IDQuMyAxMi44IDQuMyA4LjcgMCAxNi45LTQuMiAzMy43LTEzLjIgMTUtOCAzNS43LTE4LjggNjIuMy0xOC44IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMy40IDAtMjQuNyA1LjItMzkuNyAxMy4yLTEgLjYtMi4xIDEuMS0zLjIgMS43LTEzLjEgNy4xLTMxLjYgMTcuMS01My4xIDE3LjEtMTguNCAwLTMzLjYtNi4xLTQ1LjUtMTcuMi0xMS4xLTEwLjMtMTcuOS0yMy43LTIyLjctMzYtMy42LTktNi43LTE5LjEtOS41LTI4LjUtMTYuNCAxMi4zLTM2LjEgMjMuNi01OC45IDMxLjMgMy42IDEwLjggOC40IDIzLjUgMTQuNCAzNi4yIDcuNSAxNS45IDE2LjIgMzAuNCAyNS44IDQwLjUgOS42IDEwLjIgMTcuNyAxMy43IDI0LjUgMTMuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjUuMiAwLTQ1LTEzLjUtNTkuNS0yOC44LTE0LjUtMTUuNC0yNS43LTM0LjktMzQuMi01My04LTE3LTE0LjEtMzMuOC0xOC4zLTQ2LjktNS4yIC40LTEwLjYgLjYtMTYgLjZzLTEwLjgtLjItMTYtLjZjLTQuMiAxMy0xMC4zIDI5LjktMTguMyA0Ni45LTguNSAxOC4xLTE5LjggMzcuNi0zNC4yIDUzLTE0LjQgMTUuMy0zNC4zIDI4LjgtNTkuNSAyOC44LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjNi44IDAgMTUtMy41IDI0LjUtMTMuNyA5LjUtMTAuMSAxOC4zLTI0LjYgMjUuOC00MC41IDUuOS0xMi42IDEwLjctMjUuNCAxNC40LTM2LjItMjIuOC03LjctNDIuNS0xOS01OC45LTMxLjMtMi45IDkuNC02IDE5LjUtOS41IDI4LjUtNC44IDEyLjItMTEuNiAyNS42LTIyLjcgMzYtMTEuOSAxMS4xLTI3LjEgMTcuMi00NS41IDE3LjItMTMuMSAwLTI0LjUtNC4xLTMzLjgtOC45LTcuOS00LTE1LjctOS4yLTIyLjEtMTMuNWwwIDAtMi40LTEuNmMtMTUuMy0xMC4yLTI1LjgtMTYtMzcuNy0xNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjEgMCA0OS42IDE0LjIgNjQuMyAyNGwyLjQgMS42YzYuOSA0LjYgMTIuMSA4LjEgMTcuMiAxMC43IDUuNSAyLjggOS4xIDMuNiAxMiAzLjYgNi44IDAgMTAuMi0xLjkgMTIuOC00LjMgMy40LTMuMiA3LTguOCAxMC44LTE4LjUgMy03LjcgNS42LTE2LjEgOC42LTI1LjkgLjgtMi43IDEuNy01LjYgMi42LTguNiAxLjItNCAyLjYtOC4yIDQtMTIuNS0zLjktNC41LTcuNC04LjgtMTAuNS0xMi43LTExLjQgMTAuMS0yNS45IDE4LjYtNDQuMyAxOC42LTE3LjUgMC0zMC43LTcuNC00MC40LTE2LjctOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjQtMi44LTIuNy00LjYtMy4zLTcuMS0zLjMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMxNy41IDAgMzAuNyA3LjQgNDAuNCAxNi43IDguNCA4LjEgMTQuOCAxOC4zIDE5LjQgMjUuN2wuNiAuOWM1LjQgOC42IDguOCAxMy45IDEyLjUgMTcuNCAyLjggMi43IDQuNiAzLjMgNy4xIDMuMyAzLjMgMCA4LjctMS43IDE5LjQtMTMuNCA1LjEtNS42IDEwLjQtMTIuMyAxNi43LTIwLjRsMS40LTEuOGM1LjgtNy40IDEyLjItMTUuNyAxOS4zLTI0IDEzLjgtMTYuMiAzMC4zLTMyLjggNTEuNC00Ni40bC0xNS4xLTMwLjJjLTEuNyAuMS0zLjQgLjItNS4xIC4yLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXQogICAgfTsKICAgIGZhUGFzdGFmYXJpYW5pc20gPSBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmc7CiAgICBmYU1hcnRpbmlHbGFzc0NpdHJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzLWNpdHJ1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjb2NrdGFpbCJdLCAiZjU2MSIsICJNNTc2IDgwYzAtNDQuMi0zNS44LTgwLTgwLTgwLTE4IDAtMzQuNiA2LTQ4IDE2bC04MSAwYzIzLjYtNDcuNCA3Mi41LTgwIDEyOS04MCA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NFM1NzUuNSAyMjQgNDk2IDIyNGMtNi41IDAtMTMtLjQtMTkuMy0xLjNsNjQtNzQuN2MxLjEtMS4zIDIuMi0yLjcgMy4zLTQuMSAxOS40LTE0LjYgMzItMzcuOCAzMi02NHpNNjYuOSA4Mi42QzcyLjIgNzEuMyA4My41IDY0IDk2IDY0bDM4NCAwYzEyLjUgMCAyMy44IDcuMyAyOS4xIDE4LjZzMy40IDI0LjctNC44IDM0LjJsLTE4NC4zIDIxNSAwIDExNi4yIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xMTYuMi0xODQuMy0yMTVjLTguMS05LjUtMTAtMjIuOC00LjgtMzQuMnpNMTY1LjYgMTI4TDI4OCAyNzAuOCA0MTAuNCAxMjggMTY1LjYgMTI4eiJdCiAgICB9OwogICAgZmFDb2NrdGFpbCA9IGZhTWFydGluaUdsYXNzQ2l0cnVzOwogICAgZmFCdWxsaG9ybiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWxsaG9ybiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNiwgMTI4MzYzXSwgImYwYTEiLCAiTTQ2MS4yIDE4LjlDNDcyLjcgMjQgNDgwIDM1LjQgNDgwIDQ4bDAgNDE2YzAgMTIuNi03LjMgMjQtMTguOCAyOS4xcy0yNC44IDMuMi0zNC4zLTUuMWwtNDYuNi00MC43Yy00My42LTM4LjEtOTguNy02MC4zLTE1Ni40LTYzbDAgOTUuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NkM1Ny4zIDM4NCAwIDMyNi43IDAgMjU2UzU3LjMgMTI4IDEyOCAxMjhsODQuNSAwYzYxLjgtLjIgMTIxLjQtMjIuNyAxNjcuOS02My4zbDQ2LjYtNDAuN2M5LjQtOC4zIDIyLjktMTAuMiAzNC4zLTUuMXpNMjI0IDMyMGwwIC4yYzcwLjMgMi43IDEzNy44IDI4LjUgMTkyIDczLjRsMC0yNzUuM2MtNTQuMiA0NC45LTEyMS43IDcwLjctMTkyIDczLjRMMjI0IDMyMHoiXQogICAgfTsKICAgIGZhQm94VGlzc3VlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC10aXNzdWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA1YiIsICJNMTAzLjkgMzJsMTYxIDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlsMTcuNCA1Mi4yYzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsNjAuNSAwYzIxLjggMCAzNy4zIDIxLjQgMzAuNCA0Mi4xTDM4NCAzMjAgMTI4IDMyMCA3Mi43IDcwLjlDNjguMiA1MSA4My40IDMyIDEwMy45IDMyek00OCAyNTZsMTYuNiAwIDE2LjUgNzQuNEM4NiAzNTIuNCAxMDUuNSAzNjggMTI4IDM2OGwyNTYgMGMyMC43IDAgMzktMTMuMiA0NS41LTMyLjhsMjYuNC03OS4yIDguMSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYU1hdHRyZXNzUGlsbG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hdHRyZXNzLXBpbGxvdyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTI1IiwgIk0yNTYgNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDAgMC0zODR6bTQ4IDM4NGwyMDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMjA4IDAgMCAzODR6TTY0IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE5MnoiXQogICAgfTsKICAgIGZhQ2hldnJvbkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1sZWZ0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMV0sICJmMDUzIiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyNDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyeiJdCiAgICB9OwogICAgZmFDbG91ZE1vb25SYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1vb24tcmFpbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzNjIiwgIk00NDggMGMtNjguNiAwLTEyNy4xIDQzLjEtMTQ5LjggMTAzLjggMTcuMSAxNC4xIDI5LjYgMzMuNSAzNC45IDU1LjggMzkuOSAyMS43IDY2LjkgNjMuOSA2Ni45IDExMi41IDAgMTMuNS0yLjEgMjYuNS01LjkgMzguNyAxNi45IDYgMzUgOS4zIDUzLjkgOS4zIDQzIDAgODIuMS0xNyAxMTAuOC00NC42IDQuNi00LjQgNS45LTExLjIgMy4zLTE3cy04LjYtOS4zLTE0LjktOC44Yy0zIC4yLTYuMSAuNC05LjIgLjQtNjMuNSAwLTExNS01MS41LTExNS0xMTUgMC00NS4xIDI2LTg0LjIgNjMuOC0xMDMgNS43LTIuOCA5LTguOSA4LjItMTUuMlM0ODkuNiA1LjMgNDgzLjQgMy45QzQ3MiAxLjQgNDYwLjIgMCA0NDggMHpNMjcyIDM1MmM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTM5LTI3LjktNzEuNS02NC44LTc4LjYgLjUtMy4xIC44LTYuMiAuOC05LjQgMC0zMC45LTI1LjEtNTYtNTYtNTYtMTIuNCAwLTIzLjkgNC0zMy4xIDEwLjgtMTMuNC0yNS41LTQwLjEtNDIuOC03MC45LTQyLjgtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA3LjQgMSAxNC42IDIuOSAyMS41LTI5LjggMTEuNi01MC45IDQwLjYtNTAuOSA3NC41IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE5MiAwek02OSA0MDEuMWMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4yTDE3LjIgNDgwLjRDMTMgNDkzIDE5LjggNTA2LjYgMzIuNCA1MTAuOHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd24xOSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLTEtOSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtYXNjIiwgInNvcnQtbnVtZXJpYy1kb3duIl0sICJmMTYyIiwgIk00MTguNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNmwwIDk2IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTUxLjYtNS45IDJjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVsNDgtMTZjOS44LTMuMyAyMC41LTEuNiAyOC44IDQuNHpNMzY1LjEgNDMwLjZsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAzMzZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTUwLjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2eiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY0FzYyA9IGZhQXJyb3dEb3duMTk7CiAgICBmYVNvcnROdW1lcmljRG93biA9IGZhQXJyb3dEb3duMTk7CiAgICBmYUhhbmRTcG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zcG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQwNl0sICJmMjU5IiwgIk0yMTQuOSAyMy43QzIxMC4zIDYuNiAxOTIuOC0zLjUgMTc1LjcgMS4xcy0yNy4yIDIyLjEtMjIuNiAzOS4yTDIwNiAyMzcuOGMyLjUgOS4yLTQuNSAxOC4yLTE0IDE4LjItNi40IDAtMTItNC4yLTEzLjktMTAuM0wxMzQuNiAxMDIuN2MtNS4xLTE2LjktMjMtMjYuNC0zOS45LTIxLjNzLTI2LjQgMjMtMjEuMyAzOS45bDYyLjggMjA2LjRjMi40IDcuOS03LjIgMTMuOC0xMy4yIDguMUw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRTLTMuNiAzMjUuNyAxMi40IDM0MUwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4xIDBjLjEgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWM1OC4zLTMuNSAxMDguNi00My4yIDEyNS4zLTk5LjdsODEuMi0yNzVjNS0xNi45LTQuNy0zNC43LTIxLjYtMzkuOHMtMzQuNyA0LjctMzkuOCAyMS42TDQxMS41IDI0Ny4xYy0xLjYgNS4zLTYuNCA4LjktMTIgOC45LTcuOSAwLTEzLjgtNy4zLTEyLjItMTUuMWwzNi0xNzAuM2MzLjctMTcuMy03LjQtMzQuMy0yNC43LTM3LjlzLTM0LjMgNy40LTM3LjkgMjQuN0wzMjMuMSAyMzUuMWMtMi42IDEyLjItMTMuMyAyMC45LTI1LjggMjAuOS0xMS45IDAtMjIuNC04LTI1LjQtMTkuNWwtNTctMjEyLjh6Il0KICAgIH07CiAgICBmYVdhbmRNYWdpY1NwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbmQtbWFnaWMtc3BhcmtsZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWFnaWMtd2FuZC1zcGFya2xlcyJdLCAiZTJjYSIsICJNMjYzLjQtMjdMMjc4LjIgOS44IDMxNSAyNC42YzMgMS4yIDUgNC4yIDUgNy40cy0yIDYuMi01IDcuNEwyNzguMiA1NC4yIDI2My40IDkxYy0xLjIgMy00LjIgNS03LjQgNXMtNi4yLTItNy40LTVMMjMzLjggNTQuMiAxOTcgMzkuNGMtMy0xLjItNS00LjItNS03LjRzMi02LjIgNS03LjRMMjMzLjggOS44IDI0OC42LTI3YzEuMi0zIDQuMi01IDcuNC01czYuMiAyIDcuNCA1ek0xMTAuNyA0MS43bDIxLjUgNTAuMSA1MC4xIDIxLjVjNS45IDIuNSA5LjcgOC4zIDkuNyAxNC43cy0zLjggMTIuMi05LjcgMTQuN2wtNTAuMSAyMS41LTIxLjUgNTAuMWMtMi41IDUuOS04LjMgOS43LTE0LjcgOS43cy0xMi4yLTMuOC0xNC43LTkuN0w1OS44IDE2NC4yIDkuNyAxNDIuN0MzLjggMTQwLjIgMCAxMzQuNCAwIDEyOHMzLjgtMTIuMiA5LjctMTQuN0w1OS44IDkxLjggODEuMyA0MS43QzgzLjggMzUuOCA4OS42IDMyIDk2IDMyczEyLjIgMy44IDE0LjcgOS43ek00NjQgMzA0YzYuNCAwIDEyLjIgMy44IDE0LjcgOS43bDIxLjUgNTAuMSA1MC4xIDIxLjVjNS45IDIuNSA5LjcgOC4zIDkuNyAxNC43cy0zLjggMTIuMi05LjcgMTQuN2wtNTAuMSAyMS41LTIxLjUgNTAuMWMtMi41IDUuOS04LjMgOS43LTE0LjcgOS43cy0xMi4yLTMuOC0xNC43LTkuN2wtMjEuNS01MC4xLTUwLjEtMjEuNWMtNS45LTIuNS05LjctOC4zLTkuNy0xNC43czMuOC0xMi4yIDkuNy0xNC43bDUwLjEtMjEuNSAyMS41LTUwLjFjMi41LTUuOSA4LjMtOS43IDE0LjctOS43ek00NjAgMGMxMSAwIDIxLjYgNC40IDI5LjUgMTIuMmw0Mi4zIDQyLjNDNTM5LjYgNjIuNCA1NDQgNzMgNTQ0IDg0cy00LjQgMjEuNi0xMi4yIDI5LjVsLTg4LjIgODguMi0xMDEuMy0xMDEuMyA4OC4yLTg4LjJDNDM4LjQgNC40IDQ0OSAwIDQ2MCAwek00NC4yIDM5OC41TDMwOC40IDEzNC4zIDQwOS43IDIzNS42IDE0NS41IDQ5OS44QzEzNy42IDUwNy42IDEyNyA1MTIgMTE2IDUxMnMtMjEuNi00LjQtMjkuNS0xMi4yTDQ0LjIgNDU3LjVDMzYuNCA0NDkuNiAzMiA0MzkgMzIgNDI4czQuNC0yMS42IDEyLjItMjkuNXoiXQogICAgfTsKICAgIGZhTWFnaWNXYW5kU3BhcmtsZXMgPSBmYVdhbmRNYWdpY1NwYXJrbGVzOwogICAgZmFDb21tZW50TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdmNSIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTIxNy42IDE1My42YzAtMTAuNiA4LjYtMTkuMiAxOS4yLTE5LjJsMzguNCAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjJsMCA0OCA0OCAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjJsMCAzOC40YzAgMTAuNi04LjYgMTkuMi0xOS4yIDE5LjJsLTQ4IDAgMCA0OGMwIDEwLjYtOC42IDE5LjItMTkuMiAxOS4ybC0zOC40IDBjLTEwLjYgMC0xOS4yLTguNi0xOS4yLTE5LjJsMC00OC00OCAwYy0xMC42IDAtMTkuMi04LjYtMTkuMi0xOS4ybDAtMzguNGMwLTEwLjYgOC42LTE5LjIgMTkuMi0xOS4ybDQ4IDAgMC00OHoiXQogICAgfTsKICAgIGZhQmVsbFNsYXNoMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sICJmMWY2IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04Ny41LTg3LjVjMTcuMi0yLjQgMzAuNS0xNy4zIDMwLjUtMzUuMiAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtOS44LTEyLjJDNDY0LjQgMzA4LjUgNDQ4IDI2MS44IDQ0OCAyMTMuN2wwLTIxLjdjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhsMC0zLjJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzLjJjLTM4LjYgNy44LTcyLjIgMjkuNi05NS4yIDU5LjdMNDEtMjQuOXptODcgMjM4LjVjMCA0OC4xLTE2LjQgOTQuOC00Ni40IDEzMi40bC05LjggMTIuMmMtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjM1LjMgMC0yMDYuOS0yMDYuOSAwIDQuNXpNMjg4IDUxMmMyOS44IDAgNTQuOS0yMC40IDYyLTQ4bC0xMjQgMGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2Utc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs1NzQzOSwgImhhbmRzaGFrZS1hbHQtc2xhc2giLCAiaGFuZHNoYWtlLXNpbXBsZS1zbGFzaCJdLCAiZTA2MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMjg4LTI4OCAxNC4yLTE0LjJjNC4yLTQuMiA5LjUtNi41IDE0LjktNi45IDYuOC0uNiAxMy44IDEuNyAxOSA2LjlMNTA1LjYgMzc2IDU3NiAzMjAgNTc2IDMyIDQ2NCA5NiA0NDAuMiA4MC4xQzQyNC40IDY5LjYgNDA1LjkgNjQgMzg2LjkgNjRsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xbC01NS44IDYyLjEtMzQtMzQgNDQuMy00OS4yLTM5LjcgMGMtMTUuMyAwLTMwLjEgMy42LTQzLjUgMTAuNEw0MS0yNC45ek0wIDY5LjhMMCAzMjAgMTU2LjQgNDUwLjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzIyLjIgMCA0My44LTUuOCA2Mi44LTE2LjRMMCA2OS44eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHRTbGFzaCA9IGZhSGFuZHNoYWtlU2xhc2g7CiAgICBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoID0gZmFIYW5kc2hha2VTbGFzaDsKICAgIGZhQm90dGxlV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm90dGxlLXdhdGVyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU0YzUiLCAiTTExMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwQzk0LjMgMzIgODAgMTcuNyA4MCAwczE0LjMtMzIgMzItMzJ6TTE2IDE0NGMwLTM1LjMgMjguNy02NCA2NC02NGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDI0LjEtMTMuMyA0NS4xLTMzIDU2IDE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTZzLTEzLjMgNDUuMS0zMyA1NmMxOS43IDEwLjkgMzMgMzEuOSAzMyA1NiAwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjQuMSAxMy4zLTQ1LjEgMzMtNTYtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnMxMy4zLTQ1LjEgMzMtNTZjLTE5LjctMTAuOS0zMy0zMS45LTMzLTU2eiJdCiAgICB9OwogICAgZmFEaWNlRDIwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZDIwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2Y2YiLCAiTTIyNC40LTguMmMxOS42LTExLjEgNDMuNi0xMS4xIDYzLjEgMGwxOTIgMTA4LjhjMjAgMTEuNCAzMi40IDMyLjYgMzIuNCA1NS43bDAgMjE1LjZjMCAyMy0xMi40IDQ0LjMtMzIuNCA1NS43bC0xOTIgMTA4LjhjLTE5LjYgMTEuMS00My42IDExLjEtNjMuMSAwTDMyLjQgNDI3LjVDMTIuNCA0MTYuMSAwIDM5NC44IDAgMzcxLjhMMCAxNTYuMmMwLTIzIDEyLjQtNDQuMyAzMi40LTU1LjdMMjI0LjQtOC4yem01MiA3My4yQzI2NyA0OS44IDI0NSA0OS44IDIzNS42IDY1bC03Ni42IDEyMy43LTg1LjQtNDYuMy0zLjgtMS42Yy04LjktMi43LTE4LjggMS4xLTIzLjQgOS42cy0yLjQgMTguOSA0LjcgMjQuOGwzLjMgMi4zIDgzLjQgNDUuMi03NC42IDEyMC42QzU1LjMgMzU2LjIgNjEgMzczIDc1IDM3OC40bDE2MSA2MS45IDAgMzkuN2MwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTM5LjcgMTYxLTYxLjljMTQtNS40IDE5LjctMjIuMiAxMS44LTM1bC03NC43LTEyMC42IDgzLjQtNDUuMmM5LjctNS4zIDEzLjMtMTcuNCA4LjEtMjcuMXMtMTcuNC0xMy4zLTI3LjEtOC4xTDM1MyAxODguNyAyNzYuNCA2NXptLTQ3IDMyOS45bC0xMjItNDYuOSA1NC41LTg4LjEgNjcuNSAxMzV6TTQwNC42IDM0OGwtMTIyIDQ2LjkgNjcuNS0xMzUgNTQuNSA4OC4xek0zMTkuMyAyMzJMMjU2IDM1OC42IDE5Mi43IDIzMiAzMTkuMyAyMzJ6TTMwOCAxOTJsLTEwNC4xIDAgNTItODQgNTIgODR6Il0KICAgIH07CiAgICBmYUFycm93RG93blpBID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tei1hIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtYWxwaGEtZGVzYyIsICJzb3J0LWFscGhhLWRvd24tYWx0Il0sICJmODgxIiwgIk0yMzAuNiAzOTAuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTI4OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDM5Ny4zIDE2MCA0NDggMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlMMzcwLjggOTYgMzIwIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDEyLjYgMjczLjdsODAgMTYwYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNsLTcuMi0xNC4zLTg4LjQgMC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWw4MC0xNjBjNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3MyMy4yIDYuOCAyOC42IDE3Ljd6TTM4NCAzNTkuNmwtMjAuMiA0MC40IDQwLjQgMC0yMC4yLTQwLjR6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYURlc2MgPSBmYUFycm93RG93blpBOwogICAgZmFTb3J0QWxwaGFEb3duQWx0ID0gZmFBcnJvd0Rvd25aQTsKICAgIGZhQnJ1c2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJ1c2giLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU1ZCIsICJNMTYyLjQgNmMtMS41LTMuNi01LTYtOC45LTZsLTE5IDBjLTMuOSAwLTcuNSAyLjQtOC45IDZMMTA0LjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEw2Ni40IDZjLTEuNS0zLjYtNS02LTguOS02TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4bDAgMjA4IDM4NCAwIDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDIzMC41IDBjLTMuOSAwLTcuNSAyLjQtOC45IDZMMjAwLjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEwxNjIuNCA2ek0wIDMwNGwwIDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDAgMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtNjQgNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTM4NCAwek0xOTIgNDY0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1kYXNoZWQtbGluZS1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTUzIiwgIk0xNjAgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTczLjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDI4LjEgMTgyLjZDMTAuMSAyMDAuNiAwIDIyNSAwIDI1MC41TDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42ek04NS44IDQwNy4zYy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw5LjQgNDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguMy02OC4zYzExLjUtMTEuNSAxOS45LTI1LjggMjQuNC00MS41bDIuMi03LjYtNDYtMzkuNGMtMi41LTIuMi01LTQuNC03LjQtNi44TDg1LjggNDA3LjN6TTQzMiA4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzM4NC01LjMgMzg0IDhsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6bTAgMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek00MDggMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek02MDkgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS0xMDIuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwMi4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhQXJyb3dVcFNob3J0V2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1zaG9ydC13aWRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNvcnQtYW1vdW50LXVwLWFsdCJdLCAiZjg4NSIsICJNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYVNvcnRBbW91bnRVcEFsdCA9IGZhQXJyb3dVcFNob3J0V2lkZTsKICAgIGZhR3JpcFZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAtdmVydGljYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsiZ3JpZC12ZXJ0aWNhbCJdLCAiZjU4ZSIsICJNMTI4IDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDBDMTcuOSAwIDAgMTcuOSAwIDQwTDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4em0wIDE5MmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTAgNDI0bDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHpNMzIwIDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwTDIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHpNMTkyIDIzMmwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MjRjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4eiJdCiAgICB9OwogICAgZmFHcmlkVmVydGljYWwgPSBmYUdyaXBWZXJ0aWNhbDsKICAgIGZhQ2FyVHVubmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci10dW5uZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkZSIsICJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQyLjggMGMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNGwwLTExMy4xYzAtMTMuNSAzLjEtMjYuOCA5LTM4LjlsMzkuNy04MC44YzkuNC0xOS4xIDI4LjktMzEuMyA1MC4yLTMxLjNMMzE3IDIyNGMyMS4zIDAgNDAuOCAxMi4xIDUwLjIgMzEuM0w0MDcgMzM2YzUuOSAxMi4xIDkgMjUuNCA5IDM4LjlMNDE2IDQ4OGMwIDkuNi00LjIgMTguMS0xMC44IDI0bDQyLjggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMHpNMzYyLjggNTEyYy02LjYtNS45LTEwLjgtMTQuNC0xMC44LTI0bDAtMjQtMTkyIDAgMCAyNGMwIDkuNi00LjIgMTguMS0xMC44IDI0bDIxMy43IDB6bS0xNzUtMjM1LjVsLTI5LjMgNTkuNSAxOTQuOSAwLTI5LjMtNTkuNWMtMS4zLTIuNy00LjEtNC41LTcuMi00LjVMMTk1IDI3MmMtMyAwLTUuOCAxLjctNy4yIDQuNXpNMTc2IDQyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTE4NC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFDaGFydENvbHVtbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1jb2x1bW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBlMyIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpNMTQ0IDIyNGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE0NC02NGwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem04MCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTUxMiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFUcnVja0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMzA1IDIyNWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTAyLjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMDIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYVR2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR2IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjM3MTcsICJ0ZWxldmlzaW9uIiwgInR2LWFsdCJdLCAiZjI2YyIsICJNNjQgOTZsMCAyNDAgNDQ4IDAgMC0yNDAtNDQ4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNjAgNDQ4bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVGVsZXZpc2lvbiA9IGZhVHY7CiAgICBmYVR2QWx0ID0gZmFUdjsKICAgIGZhU2VjdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZWN0aW9uIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImU0NDciLCAiTTExMCAwQzQ5LjIgMCAwIDQ5LjIgMCAxMTAgMCAxMzMuNyA3LjYgMTU1LjggMjAuNSAxNzQgNy42IDE5MiAwIDIxNC4xIDAgMjM4IDAgMjkxLjcgMzguOSAzMzcuNiA5MS45IDM0Ni40bDYxLjcgMTAuM2MyMi4yIDMuNyAzOC40IDIyLjkgMzguNCA0NS4zIDAgMjUuNC0yMC42IDQ2LTQ2IDQ2bC05OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk4IDBjNjAuNyAwIDExMC00OS4yIDExMC0xMTAgMC0yMy43LTcuNi00NS45LTIwLjUtNjQgMTIuOS0xOCAyMC41LTQwLjEgMjAuNS02NCAwLTUzLjgtMzguOS05OS42LTkxLjktMTA4LjVsLTYxLjctMTAuM0M4MC4yIDE1MS42IDY0IDEzMi40IDY0IDExMCA2NCA4NC42IDg0LjYgNjQgMTEwIDY0bDk4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJTMjI1LjcgMCAyMDggMEwxMTAgMHptNzQuNyAyOTkuMWMtNi41LTIuNC0xMy40LTQuMy0yMC41LTUuNWwtNjEuNy0xMC4zYy0yMi4yLTMuNy0zOC40LTIyLjktMzguNC00NS4zIDAtOS4yIDIuNy0xNy44IDcuNC0yNSA2LjUgMi40IDEzLjQgNC4zIDIwLjUgNS41bDYxLjcgMTAuM2MyMi4yIDMuNyAzOC40IDIyLjkgMzguNCA0NS4zIDAgOS4yLTIuNyAxNy44LTcuNCAyNXoiXQogICAgfTsKICAgIGZhUGVhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVhY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc0XSwgImY2N2MiLCAiTTIyNCA0NDUuM2wwLTEyMS44LTk0LjMgNzcuMWMyNi4xIDIyLjggNTguNSAzOC43IDk0LjMgNDQuN3pNODkuMiAzNTEuMUwyMjQgMjQwLjggMjI0IDY2LjdjLTkwLjggMTUuMi0xNjAgOTQuMi0xNjAgMTg5LjMgMCAzNC42IDkuMiA2Ny4xIDI1LjIgOTUuMXptMjkzLjEgNDkuNWwtOTQuMy03Ny4xIDAgMTIxLjhjMzUuNy02IDY4LjEtMjEuOSA5NC4zLTQ0Ljd6bTQwLjYtNDkuNWMxNi0yOCAyNS4yLTYwLjUgMjUuMi05NS4xIDAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM2wwIDE3NC4yIDEzNC44IDExMC4zek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFTdGFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTEwODgsIDYxNDQ2XSwgImYwMDUiLCAiTTMwOS41LTE4LjljLTQuMS04LTEyLjQtMTMuMS0yMS40LTEzLjFzLTE3LjMgNS4xLTIxLjQgMTMuMUwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI4OC4xIDQxNy42IDQzMi40IDQ5MWM4IDQuMSAxNy43IDMuMyAyNS0yczExLTE0LjIgOS42LTIzLjJMNDQxLjcgMzA1LjkgNTU2LjEgMTkxLjRjNi40LTYuNCA4LjYtMTUuOCA1LjgtMjQuNHMtMTAuMS0xNC45LTE5LjEtMTYuM0wzODMgMTI1LjMgMzA5LjUtMTguOXoiXQogICAgfTsKICAgIGZhRmxhZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk4OCwgNjE3MjVdLCAiZjAyNCIsICJNNjQgMzJDNjQgMTQuMyA0OS43IDAgMzIgMFMwIDE0LjMgMCAzMkwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIxLjYgNjIuNy0xOC44YzQxLjktMTIuNiA4Ny4xLTguNyAxMjYuMiAxMC45IDQyLjcgMjEuNCA5Mi41IDI0IDEzNy4yIDcuMmwzNy4xLTEzLjljMTIuNS00LjcgMjAuOC0xNi42IDIwLjgtMzBsMC0yNDcuN2MwLTIzLTI0LjItMzgtNDQuOC0yNy43bC0xMS44IDUuOWMtNDQuOSAyMi41LTk3LjggMjIuNS0xNDIuOCAwLTM2LjQtMTguMi03OC4zLTIxLjgtMTE3LjItMTAuMUw2NCA1NC40IDY0IDMyeiJdCiAgICB9OwogICAgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyaWFuZ2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg4OCwgImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwgIndhcm5pbmciXSwgImYwNzEiLCAiTTI1NiAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNVM0ODYuMSA0ODAgNDcyIDQ4MEw0MCA0ODBjLTE0LjEgMC0yNy4yLTcuNC0zNC40LTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMGM3LTEyLjkgMjAuNS0yMSAzNS4yLTIxem0wIDM1MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjUgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il0KICAgIH07CiAgICBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUgPSBmYVRyaWFuZ2xlRXhjbGFtYXRpb247CiAgICBmYVdhcm5pbmcgPSBmYVRyaWFuZ2xlRXhjbGFtYXRpb247CiAgICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2YyIsICJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhR3JhZHVhdGlvbkNhcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmFkdWF0aW9uLWNhcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzg5MSwgIm1vcnRhci1ib2FyZCJdLCAiZjE5ZCIsICJNNDggMTk1LjhsMjA5LjIgODYuMWM5LjggNCAyMC4yIDYuMSAzMC44IDYuMXMyMS0yLjEgMzAuOC02LjFsMjQyLjQtOTkuOGM5LTMuNyAxNC44LTEyLjQgMTQuOC0yMi4xcy01LjgtMTguNC0xNC44LTIyLjFMMzE4LjggMzguMUMzMDkgMzQuMSAyOTguNiAzMiAyODggMzJzLTIxIDIuMS0zMC44IDYuMUwxNC44IDEzNy45QzUuOCAxNDEuNiAwIDE1MC4zIDAgMTYwTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNjAuMnptNDggNzEuN0w5NiAzODRjMCA1MyA4NiA5NiAxOTIgOTZzMTkyLTQzIDE5Mi05NmwwLTExNi42LTE0Mi45IDU4LjljLTE1LjYgNi40LTMyLjIgOS43LTQ5LjEgOS43cy0zMy41LTMuMy00OS4xLTkuN0w5NiAyNjcuNHoiXQogICAgfTsKICAgIGZhTW9ydGFyQm9hcmQgPSBmYUdyYWR1YXRpb25DYXA7CiAgICBmYVN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NGUiLCAiTTMwLjcgNzIuM0MzNy42IDQ4LjQgNTkuNSAzMiA4NC40IDMybDM0NCAwYzI0LjkgMCA0Ni44IDE2LjQgNTMuOCA0MC4zbDIzLjQgODAuMmMxMi44IDQzLjctMjAuMSA4Ny41LTY1LjYgODcuNS0yNi4zIDAtNDkuNC0xNC45LTYwLjgtMzcuMS0xMS42IDIxLjktMzQuNiAzNy4xLTYxLjQgMzcuMS0yNi42IDAtNDkuNy0xNS02MS4zLTM3LTExLjYgMjItMzQuNyAzNy02MS4zIDM3LTI2LjggMC00OS44LTE1LjEtNjEuNC0zNy4xLTExLjQgMjIuMS0zNC41IDM3LjEtNjAuOCAzNy4xLTQ1LjYgMC03OC40LTQzLjctNjUuNi04Ny41TDMwLjcgNzIuM3pNOTYuNCAzNTJsMzIwIDAgMC02Ni40YzcuNiAxLjYgMTUuNSAyLjQgMjMuNSAyLjQgMTQuMyAwIDI4LTIuNiA0MC41LTcuMmwwIDE1MS4yYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zNTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNTEuMmMxMi41IDQuNiAyNi4xIDcuMiA0MC41IDcuMiA4LjEgMCAxNS45LS44IDIzLjUtMi40bDAgNjYuNHoiXQogICAgfTsKICAgIGZhVXNlckFzdHJvbmF1dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWFzdHJvbmF1dCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGZiIiwgIk0yMjQgMzM2Yzc0LjYgMCAxMzguNC00Ni40IDE2NC0xMTJsNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQgMEMzNjIuNCAzMC40IDI5OC42LTE2IDIyNC0xNlM4NS42IDMwLjQgNjAgOTZsLTQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0IDBjMjUuNiA2NS42IDg5LjQgMTEyIDE2NCAxMTJ6TTIwOCA4MGwzMiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0zMiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2ek0xNiA0ODQuNkMxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmw1Mi42IDAgMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4IDUyLjYgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTU5LjgtMzEuOS0xMTIuMi03OS42LTE0MS0zNi40IDI1LjUtODAuNiA0MC40LTEyOC40IDQwLjRzLTkyLTE0LjktMTI4LjQtNDAuNEM0Ny45IDM3Mi40IDE2IDQyNC44IDE2IDQ4NC42ek0xODMuMyAxNDEuNWMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTYtNi0yMS4yek0xNTIgNDg4bDAgMjQgNDggMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em0xMjAtMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMjQgNDggMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0ZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctZmxhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGQ1IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek00NjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI4OCAxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ5NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhTXVnU2F1Y2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm11Zy1zYXVjZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiY29mZmVlIl0sICJmMGY0IiwgIk02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNTIgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFM1MTguNyAyODggNDQ4IDI4OGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA2NHptNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0bDAgMTI4YzM1LjMgMCA2NC0yOC43IDY0LTY0ek02NCA0NDhsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDb2ZmZWUgPSBmYU11Z1NhdWNlcjsKICAgIGZhTGVtb24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlbW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgImYwOTQiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NC02LjYgMC0xMyAxLTE5IDIuOS0yMi41IDctNDguMSAxNC45LTcxIDktNzUuMi0xOS4xLTE1Ni40IDExLTIxMy43IDY4LjNTLTcuMiAyNTAuOCAxMS45IDMyNmM1LjggMjIuOS0yIDQ4LjQtOSA3MS0xLjkgNi0yLjkgMTIuNC0yLjkgMTkgMCAzNS4zIDI4LjcgNjQgNjQgNjQgNi42IDAgMTMtMSAxOS4xLTIuOSAyMi41LTcgNDguMS0xNC45IDcxLTkgNzUuMiAxOS4xIDE1Ni40LTExIDIxMy43LTY4LjNTNDU1LjIgMjYxLjIgNDM2LjEgMTg2Yy01LjgtMjIuOSAyLTQ4LjQgOS03MSAxLjktNiAyLjktMTIuNCAyLjktMTkuMXpNMjIyLjcgMTQzYy01MiAxNS4yLTk2LjUgNTkuNy0xMTEuNyAxMTEuNy0zLjcgMTIuNy0xNy4xIDIwLTI5LjggMTYuM1M2MS4yIDI1NCA2NSAyNDEuM2MxOS44LTY3LjcgNzYuNi0xMjQuNSAxNDQuMy0xNDQuMyAxMi43LTMuNyAyNi4xIDMuNiAyOS44IDE2LjNzLTMuNiAyNi4xLTE2LjMgMjkuOHoiXQogICAgfTsKICAgIGZhQ2FyYXZhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJhdmFuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4ZmYiLCAiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5Ni40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04TDk2IDQxNmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgOTZ6TTM1MiAzNTJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnpNMTYwIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6bTY0IDMzNmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzExM10sICI1MSIsICJNNjQgMjU2YzAgODguNCA3MS42IDE2MCAxNjAgMTYwIDI4LjkgMCA1Ni03LjcgNzkuNC0yMS4xbC03Mi04Ni40Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsNzAuOSA4NS4xYzIwLjQtMjYuOCAzMi41LTYwLjMgMzIuNS05Ni42IDAtODguNC03MS42LTE2MC0xNjAtMTYwUzY0IDE2Ny42IDY0IDI1NnpNMzQ0LjkgNDQ0LjZDMzEwIDQ2NyAyNjguNSA0ODAgMjI0IDQ4MCAxMDAuMyA0ODAgMCAzNzkuNyAwIDI1NlMxMDAuMyAzMiAyMjQgMzIgNDQ4IDEzMi4zIDQ0OCAyNTZjMCA1Ni4xLTIwLjYgMTA3LjQtNTQuNyAxNDYuN2w0Ny4zIDU2LjhjMTEuMyAxMy42IDkuNSAzMy44LTQuMSA0NS4xcy0zMy44IDkuNS00NS4xLTQuMWwtNDYuNi01NS45eiJdCiAgICB9OwogICAgZmFMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzRdLCAiZjAyMyIsICJNMTI4IDk2bDAgNjQgMTI4IDAgMC02NGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHpNNjQgMTYwbDAtNjRDNjQgMjUuMyAxMjEuMy0zMiAxOTItMzJTMzIwIDI1LjMgMzIwIDk2bDAgNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhUGFpbnRSb2xsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFpbnQtcm9sbGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YWEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDE2IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCA5NmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE4LjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtMTguN2MwLTQ0LjIgMzUuOC04MCA4MC04MGwxNjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdCiAgICB9OwogICAgZmFWb2x1bWVIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbHVtZS1oaWdoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjY2LCAidm9sdW1lLXVwIl0sICJmMDI4IiwgIk01MzMuNiAzMi41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDNTU3LjUgMTEzLjggNTkyIDE4MC44IDU5MiAyNTZzLTM0LjUgMTQyLjItODguNyAxODYuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM1OTguNSA0MjYuNyA2NDAgMzQ2LjIgNjQwIDI1NlM1OTguNSA4NS4yIDUzMy42IDMyLjV6TTQ3My4xIDEwN2MtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzQ3NS4zIDE3MC43IDQ5NiAyMTAuOSA0OTYgMjU2cy0yMC43IDg1LjMtNTMuMiAxMTEuOGMtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNWM0My4yLTM1LjIgNzAuOS04OC45IDcwLjktMTQ5cy0yNy43LTExMy44LTcwLjktMTQ5em0tNjAuNSA3NC41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzkzLjEgMjI3LjYgNDAwIDI0MSA0MDAgMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDM0LjEgMzEyLjkgNDQ4IDI4Ni4xIDQ0OCAyNTZzLTEzLjktNTYuOS0zNS40LTc0LjV6TTgwIDM1Mmw0OCAwIDEzNC4xIDExOS4yYzYuNCA1LjcgMTQuNiA4LjggMjMuMSA4LjggMTkuMiAwIDM0LjgtMTUuNiAzNC44LTM0LjhsMC0zNzguNGMwLTE5LjItMTUuNi0zNC44LTM0LjgtMzQuOC04LjUgMC0xNi43IDMuMS0yMy4xIDguOEwxMjggMTYwIDgwIDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHoiXQogICAgfTsKICAgIGZhVm9sdW1lVXAgPSBmYVZvbHVtZUhpZ2g7CiAgICBmYUZvbGRlclBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY1ZSIsICJNNTEyIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MHpNMjU2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFNZXJjdXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1lcmN1cnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzkxXSwgImYyMjMiLCAiTTExNy00QzEwNi0xNy44IDg1LjgtMjAgNzIuMS05cy0xNiAzMS4yLTUgNDVDNzQuOSA0NS43IDgzLjcgNTQuNSA5My41IDYyLjEgNDYuNyA5My43IDE2IDE0Ny4zIDE2IDIwOCAxNiAyOTQuMyA3OC4xIDM2Ni4xIDE2MCAzODEuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtNjAuNy0zMC43LTExNC4zLTc3LjUtMTQ1LjkgOS44LTcuNyAxOC43LTE2LjQgMjYuNC0yNi4xIDExLjEtMTMuOCA4LjgtMzMuOS01LTQ1UzI3OC0xNy44IDI2Ny00Yy0xNy42IDIyLTQ0LjcgMzYtNzUgMzZTMTM0LjcgMTggMTE3LTR6bTc1IDMyNGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJTMTMwLjEgOTYgMTkyIDk2IDMwNCAxNDYuMSAzMDQgMjA4YzAgNjEuOC01MC4xIDExMi0xMTEuOSAxMTJsLS4xIDB6Il0KICAgIH07CiAgICBmYUFuY2hvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3IiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODc1XSwgImYxM2QiLCAiTTI4OCA2NGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDI1Ny45YzYyLjktMTQuMyAxMTAuMi02OS43IDExMS45LTEzNi41bC0xNi4xIDE0LjFjLTEwIDguNy0yNS4xIDcuNy0zMy45LTIuM3MtNy43LTI1LjEgMi4zLTMzLjlsNjQtNTZjOS03LjkgMjIuNi03LjkgMzEuNiAwbDY0IDU2YzEwIDguNyAxMSAyMy45IDIuMyAzMy45cy0yMy45IDExLTMzLjkgMi4zTDQ5NiAzMDcuOUM0OTMuOSA0MjEgNDAxLjYgNTEyIDI4OCA1MTJTODIuMSA0MjEgODAgMzA3LjlMNjMuOCAzMjIuMWMtMTAgOC43LTI1LjEgNy43LTMzLjktMi4zcy03LjctMjUuMSAyLjMtMzMuOWw2NC01NmM5LTcuOSAyMi42LTcuOSAzMS42IDBsNjQgNTZjMTAgOC43IDExIDIzLjkgMi4zIDMzLjlzLTIzLjkgMTEtMzMuOSAyLjNsLTE2LjEtMTQuMWMxLjggNjYuOCA0OS4xIDEyMi4yIDExMS45IDEzNi41bDAtMjU3LjljLTM3LjMtMTMuMi02NC00OC43LTY0LTkwLjV6Il0KICAgIH07CiAgICBmYVNxdWFyZVBhcmtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBhcmtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjczNTksICJwYXJraW5nIl0sICJmNTQwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0xOTIgMjU2bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQ4IDAgMCA2NHptNDggNjRsLTQ4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4NGMwLTIyLjEgMTcuOS00MCA0MC00MGw3MiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2eiJdCiAgICB9OwogICAgZmFQYXJraW5nID0gZmFTcXVhcmVQYXJraW5nOwogICAgZmFIYW51a2lhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW51a2lhaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODMzNF0sICJmNmU2IiwgIk0zMTQuMiAzLjNjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6bS0yODggNDhDMjEuMSA2MC4xIDggODQuNiA4IDEwNCA4IDExNy4zIDE4LjcgMTI4IDMyIDEyOHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTg4IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMTAxLjEgNjAuMSA4OCA4NC42IDg4IDEwNHptODIuMi01Mi43Yy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek0yMTYgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0MyMjkuMSA2MC4xIDIxNiA4NC42IDIxNiAxMDR6TTM5NC4yIDUxLjNjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTQ0MCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzQ1My4xIDYwLjEgNDQwIDg0LjYgNDQwIDEwNHptODIuMi01Mi43Yy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek01ODQgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M1OTcuMSA2MC4xIDU4NCA4NC42IDU4NCAxMDR6TTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2LTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMTc0LjMgMCAxOTJsMCA5NmMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwIDAgNjQtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwIDAtNjQgMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwIDAtMTc2eiJdCiAgICB9OwogICAgZmFSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJvdGF0ZS1iYWNrIiwgInJvdGF0ZS1iYWNrd2FyZCIsICJ1bmRvLWFsdCJdLCAiZjJlYSIsICJNMjQgMTkybDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDYuNy00Ni43Yzc1LjMtNTguNiAxODQuMy01My4zIDI1My41IDE1LjkgNzUgNzUgNzUgMTk2LjUgMCAyNzEuNXMtMTk2LjUgNzUtMjcxLjUgMGMtMTAuMi0xMC4yLTE5LTIxLjMtMjYuNC0zMy05LjUtMTQuOS0yOS4zLTE5LjMtNDQuMi05LjhzLTE5LjMgMjkuMy05LjggNDQuMkM0OS43IDQwOC43IDYxLjQgNDIzLjUgNzUgNDM3IDE3NSA1MzcgMzM3IDUzNyA0MzcgNDM3UzUzNyAxNzUgNDM3IDc1QzM0Mi44LTE5LjMgMTkzLjMtMjQuNyA5Mi43IDU4LjhMNDEgN0MzNC4xIC4yIDIzLjgtMS45IDE0LjggMS44UzAgMTQuMyAwIDI0TDAgMTY4YzAgMTMuMyAxMC43IDI0IDI0IDI0eiJdCiAgICB9OwogICAgZmFSb3RhdGVCYWNrID0gZmFSb3RhdGVMZWZ0OwogICAgZmFSb3RhdGVCYWNrd2FyZCA9IGZhUm90YXRlTGVmdDsKICAgIGZhVW5kb0FsdCA9IGZhUm90YXRlTGVmdDsKICAgIGZhSGVhZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhlYWRlciJdLCAiZjFkYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMTEyIDIyNCAwIDAtMTEyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDMyMCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNDQtMjI0IDAgMCAxNDQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMzIwLTE2IDBDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhSGVhZGVyID0gZmFIZWFkaW5nOwogICAgZmFDcm9zc2hhaXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3NzaGFpcnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjA1YiIsICJNMjg4LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguM2M5OC4xIDE0IDE3NS43IDkxLjYgMTg5LjcgMTg5LjdsMTguMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC4zIDBjLTE0IDk4LjEtOTEuNiAxNzUuNy0xODkuNyAxODkuN2wwIDE4LjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC4zQzE1Ny45IDQ2My43IDgwLjMgMzg2LjEgNjYuMyAyODhMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjMgMEM4MC4zIDEyNS45IDE1Ny45IDQ4LjMgMjU2IDM0LjNMMjU2IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMzEuMiAyODhjMTIuNyA2Mi43IDYyLjEgMTEyLjEgMTI0LjggMTI0LjhsMC0xMi44YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMi44YzYyLjctMTIuNyAxMTIuMS02Mi4xIDEyNC44LTEyNC44TDQzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTIuOCAwQzQzMi4xIDE2MS4zIDM4Mi43IDExMS45IDMyMCA5OS4ybDAgMTIuOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyLjhDMTkzLjMgMTExLjkgMTQzLjkgMTYxLjMgMTMxLjIgMjI0bDEyLjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTIuOCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnoiXQogICAgfTsKICAgIGZhQ2lyY2xlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLW5vZGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTIiLCAiTTQxOC40IDE1Ny45YzM1LjMtOC4zIDYxLjYtNDAgNjEuNi03Ny45IDAtNDQuMi0zNS44LTgwLTgwLTgwLTQzLjQgMC03OC43IDM0LjUtODAgNzcuNUwxMzYuMiAxNTEuMUMxMjEuNyAxMzYuOCAxMDEuOSAxMjggODAgMTI4IDM1LjggMTI4IDAgMTYzLjggMCAyMDhzMzUuOCA4MCA4MCA4MGMxMi4yIDAgMjMuOC0yLjcgMzQuMS03LjZMMjU5LjcgNDA3LjhjLTIuNCA3LjYtMy43IDE1LjgtMy43IDI0LjIgMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTI3LjctMTQtNTIuMS0zNS40LTY2LjRsMzcuOC0yMDcuN3pNMTU2LjMgMjMyLjJjMi4yLTYuOSAzLjUtMTQuMiAzLjctMjEuN2wxODMuOC03My41YzMuNiAzLjUgNy40IDYuNyAxMS42IDkuNUwzMTcuNiAzNTQuMWMtNS41IDEuMy0xMC44IDMuMS0xNS44IDUuNUwxNTYuMyAyMzIuMnoiXQogICAgfTsKICAgIGZhV2luZG93UmVzdG9yZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZG93LXJlc3RvcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJkMiIsICJNNTEyIDk2TDE2MCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDggMCAwLTY0IDQ4IDAgMC0xOTJ6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjR6bTY0IDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYVIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExNF0sICI1MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDk1LjMgMCAxMDIuNCAxNDYuNGMxMC4xIDE0LjUgMzAuMSAxOCA0NC42IDcuOXMxOC0zMC4xIDcuOS00NC42TDIzMC4xIDMwOS41QzI4Mi44IDI4OC4xIDMyMCAyMzYuNCAzMjAgMTc2IDMyMCA5Ni41IDI1NS41IDMyIDE3NiAzMkwzMiAzMnpNMTc2IDI1NmwtMTEyIDAgMC0xNjAgMTEyIDBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6Il0KICAgIH07CiAgICBmYUZpbHRlckNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbHRlci1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTE3YiIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMi41IDIuNSA1LjMgNC41IDguMyA2LTIxLjItMzAuOS0zMy42LTY4LjMtMzMuNi0xMDguNiAwLTk5LjQgNzUuNS0xODEuMSAxNzIuMy0xOTFsOTAuNC05MC40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDY0IDQ4MCA2NEwzMiA2NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUdvcHVyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ29wdXJhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjY0IiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDggMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEzNmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC00OCAwIDAtMjI0LTMyIDAgMC0xMjgtNDggMCAwIDEyOCAzMiAwIDAgMjI0LTIyNCAwIDAtMjI0IDMyIDAgMC0xMjgtNDggMCAwIDEyOC0zMiAwIDAgMjI0LTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhMOTYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI1NiAyMDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMDggNDAwbDAgNjQgOTYgMCAwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek0yNTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzIgNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGZmIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFTdGFyT2ZMaWZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItb2YtbGlmZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjIxIiwgIk0yMDguNSAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQwLjkgMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43bC0xMjIgNzAuNCAxMjIgNzAuNGMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43bC0xNiAyNy43Yy04LjggMTUuMy0yOC40IDIwLjYtNDMuNyAxMS43bC0xMjItNzAuNCAwIDE0MC45YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE0MC45LTEyMiA3MC40Yy0xNS4zIDguOC0zNC45IDMuNi00My43LTExLjdsLTE2LTI3LjdjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN2wxMjItNzAuNC0xMjItNzAuNGMtMTUuMy04LjgtMjAuNS0yOC40LTExLjctNDMuN2wxNi0yNy43YzguOC0xNS4zIDI4LjQtMjAuNSA0My43LTExLjdsMTIyIDcwLjQgMC0xNDAuOXoiXQogICAgfTsKICAgIGZhQnVzaW5lc3NUaW1lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1c2luZXNzLXRpbWUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYnJpZWZjYXNlLWNsb2NrIl0sICJmNjRhIiwgIk0yNjQgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA5NiAzMDUgMGMzMy44LTI5LjkgNzguMy00OCAxMjctNDggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04MCAwIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjY0IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2em04MCAyOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtMTkyIDAgMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkzLjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMTYuNiAyLjEtMzIuNyA2LTQ4bC0yMiAwem0zNTIgNDhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHpNNDk2IDMyMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCAzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJyaWVmY2FzZUNsb2NrID0gZmFCdXNpbmVzc1RpbWU7CiAgICBmYUZpcmVFeHRpbmd1aXNoZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZS1leHRpbmd1aXNoZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTldLCAiZjEzNCIsICJNNTEyIDMyYzAtOS42LTQuMy0xOC43LTExLjctMjQuN1M0ODMuMS0xLjMgNDczLjcgLjZsLTE2MCAzMkMzMDEuNSAzNS4xIDI5MiA0NC4zIDI4OSA1NmwtNjUgMCAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI4LjRjLTU1LjMgMTIuMy0xMDEuMyA0OS41LTEyNS41IDk5LjEtNS44IDExLjktLjkgMjYuMyAxMS4xIDMyLjFzMjYuMyAuOSAzMi4xLTExLjFDNjIgMTQ2LjkgOTEuOCAxMjEuMSAxMjggMTEwbDAgMjguOGMtMzcuOCAxOC02NCA1Ni41LTY0IDEwMS4ybDAgMTI4IDIyNCAwIDAtMTI4YzAtNDQuNy0yNi4yLTgzLjItNjQtMTAxLjJsMC0zNC44IDY1IDBjMyAxMS43IDEyLjUgMjAuOSAyNC43IDIzLjRsMTYwIDMyYzkuNCAxLjkgMTkuMS0uNiAyNi42LTYuNlM1MTIgMTM3LjYgNTEyIDEyOGwwLTk2ek0yODggNDQ4bDAtMzItMjI0IDAgMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25Mb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWRvd24iXSwgImYxNzUiLCAiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDQzNC43IDE5MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzEyOC0xNy43IDEyOCAwbDAgNDM0LjctNzMuNC03My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dEb3duID0gZmFBcnJvd0Rvd25Mb25nOwogICAgZmFVc2VyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1taW51cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTAzIiwgIk0xMzYgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6TTQ4IDQ4Mi4zQzQ4IDM4My44IDEyNy44IDMwNCAyMjYuMyAzMDRsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc3LjcgNTEyQzYxLjMgNTEyIDQ4IDQ5OC43IDQ4IDQ4Mi4zek00NzIgMTY4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTW9uZXlDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTNjIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek05NiAzMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQtMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXQogICAgfTsKICAgIGZhSG91c2VMYXB0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbGFwdG9wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImxhcHRvcC1ob3VzZSJdLCAiZTA2NiIsICJNNDQ4IDI0MGwxOS45IDBjMTUuNSAwIDI4LjEtMTIuNiAyOC4xLTI4LjEgMC03LjYtMy4xLTE0LjktOC42LTIwLjJMMjgzLjUtNC45QzI3Ni4xLTEyIDI2Ni4zLTE2IDI1Ni0xNnMtMjAuMSA0LTI3LjUgMTEuMUwyNC42IDE5MS43QzE5LjEgMTk3IDE2IDIwNC4zIDE2IDIxMS45IDE2IDIyNy40IDI4LjYgMjQwIDQ0LjEgMjQwbDE5LjkgMCAwIDE0NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4NS43IDBjNy40LTYuNiAxNi40LTExLjQgMjYuMy0xNGwwLTEzMGMwLTUuNSAuNy0xMC45IDItMTZsLTEwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0IDE0NCAwek0zNTIgMzUybDE2MCAwIDAgMTI4LTE2MCAwIDAtMTI4em0tNjQtMzJsMCAxNjAtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI4OCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFMYXB0b3BIb3VzZSA9IGZhSG91c2VMYXB0b3A7CiAgICBmYURvd25sb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvd25sb2FkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMTkiLCAiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIxMC43LTQxLjQtNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjU2IDI0Mi43IDI1NiAzMnpNNjQgMzIwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ2LjkgMC01Ni42IDU2LjZjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMEwxMTAuOSAzMjAgNjQgMzIwem0zMDQgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFDb3VjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3VjaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGI4IiwgIk0xNDQgMjcyQzE0NCAyMjQuNyAxMDkuOCAxODUuNCA2NC44IDE3Ny41IDcyIDExMy42IDEyNi4yIDY0IDE5MiA2NGwyNTYgMGM2NS44IDAgMTIwIDQ5LjYgMTI3LjIgMTEzLjUtNDUgOC03OS4yIDQ3LjItNzkuMiA5NC41bDAgMzItMzUyIDAgMC0zMnpNMCAzODRMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDQ0OCAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdCiAgICB9OwogICAgZmFSb2FkTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2NyIsICJNMjU2IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDMzLjQgNDIwLjVDMjUuOSA0NTAuNyA0OC44IDQ4MCA4MCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyIDYuMSAwIDExLjggMS43IDE2LjcgNC43IDIuOC0yMy45IDE0LjMtNDUuMSAzMS40LTYwLjNsMC0yNC40YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYuMiAwIDEyLjQgLjQgMTguNCAxLjNMNDU4LjUgODAuNkM0NTEuNCA1Mi4xIDQyNS44IDMyIDM5Ni4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em02NCAxOTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiA4MC4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0zNTIgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFTY2lzc29ycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5ODQsIDk5ODYsIDk5ODgsICJjdXQiXSwgImYwYzQiLCAiTTE5MiAyNTZsLTM5LjUgMzkuNWMtMTIuNi00LjktMjYuMi03LjUtNDAuNS03LjUtNjEuOSAwLTExMiA1MC4xLTExMiAxMTJzNTAuMSAxMTIgMTEyIDExMiAxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42LTI4LjMtMjguMy03NC4xLTI4LjMtMTAyLjQgMEwyNTYgMTkyIDIxNi41IDE1Mi41YzQuOS0xMi42IDcuNS0yNi4yIDcuNS00MC41IDAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgNTAuMSAwIDExMiA1MC4xIDIyNCAxMTIgMjI0YzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2em05Ny45IDk3LjlMMzk2LjggNDYwLjhjMjguMyAyOC4zIDc0LjEgMjguMyAxMDIuNCAwIDcuMS03LjEgNy4xLTE4LjUgMC0yNS42bC0xNDUuMy0xNDUuMy02NCA2NHpNNjQgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQ4IDI0MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYUN1dCA9IGZhU2Npc3NvcnM7CiAgICBmYUJ1ZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE4OCIsICJNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRsLTEzNS4xIDBjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40bDAtMy42em0zNDUuNiAxMi44YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgMi42LS4xIDUuMy0uMiA3LjlsODMuNCA2Mi41YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40bC02My4xLTQ3LjNjLTIzLjIgNDQuMi02Ni41IDc2LjItMTE3LjcgODMuOUwzMTIgMjgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjMwLjJjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzIuNS0xMC40IDYuNS0yMC4yIDExLjgtMjkuMUw0NC44IDE1My42Yy0xNC4xLTEwLjYtMTctMzAuNy02LjQtNDQuOHMzMC43LTE3IDQ0LjgtNi40TDE5MiAxODRjMTIuMy01LjEgMjUuOC04IDQwLThsMTEyIDBjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1vdXQiXSwgImYwOGIiLCAiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYVNpZ25PdXQgPSBmYUFycm93UmlnaHRGcm9tQnJhY2tldDsKICAgIGZhSGFuZEhvbGRpbmdIYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oYW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjciLCAiTTQ2Ni44IDE4Ni41bDQyLjUtNDIuNSAzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMjMuNiAxNmMtMjkgMC01Ny4zIDkuMy04MC43IDI2LjVMMTYuMyAxMzUuOGMtMTcuOCAxMy4xLTIxLjYgMzguMS04LjUgNTUuOXMzOC4xIDIxLjYgNTUuOSA4LjVMMTgzLjQgMTEyIDI5NiAxMTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTUyLjIgMGMzMy45IDAgNjYuNS0xMy41IDkwLjUtMzcuNXptLTM1Ny41IDEzOUw2Ni43IDM2OCAzMiAzNjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MDAgMjgwIDQwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhU3Ryb29wd2FmZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Ryb29wd2FmZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1MSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzEyLjYgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjU2IDk3LjYgMjIyLjEgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzMy45IDMzLjktNDUuMyA0NS4zLTU2LjYtNTYuNmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw1Ni42IDU2LjYtNDUuMyA0NS4zLTMzLjktMzMuOWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSAzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zMy45IDMzLjktNDUuMy00NS4zIDU2LjYtNTYuNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC01Ni42IDU2LjYtNDUuMy00NS4zIDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpNMTQyLjkgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptNjcuOSA2Ny45bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3pNMjc4LjYgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptMjIuNi02Ny45bC00NS4zIDQ1LjMtNDUuMy00NS4zIDQ1LjMtNDUuMyA0NS4zIDQ1LjN6Il0KICAgIH07CiAgICBmYUNoaWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxYWUiLCAiTTk2IDY0QTY0IDY0IDAgMSAxIDIyNCA2NCA2NCA2NCAwIDEgMSA5NiA2NHptNDggMzIwbDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMODAgMjg3LjggNTkuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMFMtNC41IDMwMS45IDQuOSAyODdsMzkuOS02My4zQzY5LjcgMTg0IDExMy4yIDE2MCAxNjAgMTYwczkwLjMgMjQgMTE1LjIgNjMuNkwzMTUuMSAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBMMjQwIDI4Ny44IDI0MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAweiJdCiAgICB9OwogICAgZmFJY2VDcmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY2UtY3JlYW0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4NDhdLCAiZjgxMCIsICJNMzM1LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2IDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzQ4IDY0LjUgNDggMTQ0YzAgNS40IC4zIDEwLjcgLjkgMTZsLS45IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjg4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLS45IDB6TTY0IDMwNEwxNjkuMiA1MjkuNWM0LjEgOC44IDEzIDE0LjUgMjIuOCAxNC41czE4LjYtNS43IDIyLjgtMTQuNUwzMjAgMzA0IDY0IDMwNHoiXQogICAgfTsKICAgIGZhQ29tcHV0ZXJNb3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlci1tb3VzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQzMywgIm1vdXNlIl0sICJmOGNjIiwgIk0wIDE5MmwxNjggMCAwLTE5Mi04IDBDNzEuNiAwIDAgNzEuNiAwIDE2MGwwIDMyem0wIDQ4TDAgMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDY0IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC0xMTItMzg0IDB6bTM4NC00OGwwLTMyQzM4NCA3MS42IDMxMi40IDAgMjI0IDBsLTggMCAwIDE5MiAxNjggMHoiXQogICAgfTsKICAgIGZhTW91c2UgPSBmYUNvbXB1dGVyTW91c2U7CiAgICBmYUZhdWNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTAwNSIsICJNMTkyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDY0IDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyMi42IDIyLjYgMzIgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MCAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzLTE0LjMtMzItMzItMzJsLTM2LjEgMGMtMjAuMiAyOS01My45IDQ4LTkxLjkgNDhzLTcxLjctMTktOTEuOS00OEwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAyMi42LTIyLjZjNi02IDE0LjEtOS40IDIyLjYtOS40bDE4LjcgMCAwLTY0LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgNjQgOTYgNjRsOTYgMHoiXQogICAgfTsKICAgIGZhQXdhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXdhcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU1OSIsICJNMjQ1LjktMjUuOWMtMTMuNC04LjItMzAuMy04LjItNDMuNyAwLTI0LjQgMTQuOS0zOS41IDE4LjktNjguMSAxOC4zLTE1LjctLjQtMzAuMyA4LjEtMzcuOSAyMS45LTEzLjcgMjUuMS0yNC44IDM2LjItNDkuOSA0OS45LTEzLjggNy41LTIyLjIgMjIuMi0yMS45IDM3LjkgLjcgMjguNi0zLjQgNDMuNy0xOC4zIDY4LjEtOC4yIDEzLjQtOC4yIDMwLjMgMCA0My43IDE0LjkgMjQuNCAxOC45IDM5LjUgMTguMyA2OC4xLS40IDE1LjcgOC4xIDMwLjMgMjEuOSAzNy45IDIyLjEgMTIuMSAzMy4zIDIyLjEgNDUuMSA0MS41TDQyLjcgNDU4LjVjLTUuOSAxMS45LTEuMSAyNi4zIDEwLjcgMzIuMmw4NiA0M2MxMS41IDUuNyAyNS41IDEuNCAzMS43LTkuOGw1Mi44LTk1LjEgNTIuOCA5NS4xYzYuMiAxMS4yIDIwLjIgMTUuNiAzMS43IDkuOGw4Ni00M2MxMS45LTUuOSAxNi43LTIwLjMgMTAuNy0zMi4ybC00OC42LTk3LjJjMTEuNy0xOS40IDIzLTI5LjQgNDUuMS00MS41IDEzLjgtNy41IDIyLjItMjIuMiAyMS45LTM3LjktLjctMjguNiAzLjQtNDMuNyAxOC4zLTY4LjEgOC4yLTEzLjQgOC4yLTMwLjMgMC00My43LTE0LjktMjQuNC0xOC45LTM5LjUtMTguMy02OC4xIC40LTE1LjctOC4xLTMwLjMtMjEuOS0zNy45LTI1LjEtMTMuNy0zNi4yLTI0LjgtNDkuOS00OS45LTcuNS0xMy44LTIyLjItMjIuMi0zNy45LTIxLjktMjguNiAuNy00My43LTMuNC02OC4xLTE4LjN6TTIyNCA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGVyc29uRHJvd25pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyb3duaW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDUiLCAiTTI2NCA4OGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTEzMy45IDY1LjZjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ybDEwLjkgMzIuOGM5LjQgMjguMyAzMy4yIDQ5LjUgNjIuNSA1NS42IDUuNiAxLjIgMTEuMyAxLjggMTcuMSAxLjhsODggMGMxNy4yIDAgMzQuMy0yLjggNTAuNi04LjJsMTE0LjQtMzguMWMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNUw0MjMuNyAyMjguNWMtOC40IDIuOC0xNyA1LjEtMjUuNyA2LjlsLTI2LjUgODguM2MtNi4xIDMuNC0xMi4xIDcuMy0xNy45IDExLjctMjIuMSAxNi42LTI5LjEgMTYuNi01MS4yIDAtMjYuMi0xOS43LTU2LjktMzAuMi04Ny44LTMxLjNsMjAuMi02Ny4yYy01MS41LTEwLjctOTMuNS00OC4xLTExMC4yLTk4bC0xMC45LTMyLjhjLTUuNi0xNi44IDMuNS0zNC45IDIwLjItNDAuNXpNNDAzLjQgNDEyLjFDMzc5LjEgNDMwLjMgMzUxLjEgNDQ4IDMyMCA0NDhzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFDYW1lcmFSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGQ4IiwgIk0xMzguNyA5NmwxMC40LTMxLjJDMTU1LjYgNDUuMiAxNzMuOSAzMiAxOTQuNiAzMmwxMjIuOCAwYzIwLjcgMCAzOSAxMy4yIDQ1LjUgMzIuOEwzNzMuMyA5NiA0NDggOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGw3NC43IDB6TTk2IDMwNS45YzAgMy45IDEuNCA3LjcgNCAxMC42bDQ4IDU0YzYuNCA3LjIgMTcuNiA3LjIgMjMuOSAwbDQ4LTU0YzIuNi0yLjkgNC02LjcgNC0xMC42bDAtMS45YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMGMwLTM5LjggMzIuMi03MiA3Mi03MiA0LjQgMCA4LjcgLjQgMTIuOSAxLjJsMzQuOS0zOS4zYy0xNC42LTYuNC0zMC44LTkuOS00Ny44LTkuOS02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMS45em0xOTYtNDYuNWMtMi42IDIuOS00IDYuNy00IDEwLjZsMCAxLjljMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjMCAzOS44LTMyLjIgNzItNzIgNzItNC40IDAtOC43LS40LTEyLjktMS4ybC0zNC45IDM5LjNjMTQuNyA2LjQgMzAuOCA5LjkgNDcuOCA5LjkgNjYuMyAwIDEyMC01My43IDEyMC0xMjBsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xLjljMC0zLjktMS40LTcuNy00LTEwLjZsLTQ4LTU0Yy02LjQtNy4yLTE3LjYtNy4yLTIzLjkgMGwtNDggNTR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluSGVhcnRzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4taGVhcnRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI1LCAiZ3Jpbi1oZWFydHMiXSwgImY1ODQiLCAiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMgNS41LTEzLjUgOC45LTI4LjQgOC45LTQ0LjcgMC01My00My05Ni05Ni05NmwtMi45IDBjLTIuNSAwLTUgLjEtNy40IC4zLTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjLTIuNS0uMi00LjktLjMtNy40LS4zTDk2IDQ4Yy01MyAwLTk2IDQzLTk2IDk2IDAgMTYuMyAzLjUgMzEuMiA4LjkgNDQuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyMi45IDk2YzEzLjUgMCAyNi41IDUuNCAzNiAxNC45bDkuMSA5LjEgOS4xLTkuMWM5LjUtOS41IDIyLjUtMTQuOSAzNi0xNC45bDIuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNTMuNC02Ni45IDk1LjctODkgMTA4LjItNC40IDIuNS05LjYgMi41LTE0IDAtMjIuMS0xMi41LTg5LTU0LjgtODktMTA4LjIgMC0yNi41IDIxLjUtNDggNDgtNDhsMi45IDB6bS0xODggMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwYzEzLjUgMCAyNi41IDUuNCAzNiAxNC45eiJdCiAgICB9OwogICAgZmFHcmluSGVhcnRzMiA9IGZhRmFjZUdyaW5IZWFydHMyOwogICAgZmFGaWxlRnJhZ21lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1mcmFnbWVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNjk3IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI0MCAxMjggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOCAxMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2ek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAweiJdCiAgICB9OwogICAgZmFQZXJzb25NaWxpdGFyeVJpZmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1taWxpdGFyeS1yaWZsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTRiIiwgIk0xMjggMzljMC0xMyAxMC0yMy44IDIyLjktMjQuOUwzMDIuNyAxLjRDMzEyIC43IDMyMCA4IDMyMCAxNy40TDMyMCA0OGMwIDguOC03LjIgMTYtMTYgMTZMMTUzIDY0Yy0xMy44IDAtMjUtMTEuMi0yNS0yNXptMTcuNiA1N2wxNTYuOCAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNiAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTUuNSAuNi0xMC44IDEuNi0xNnptMjI4IDM2NC4zTDMyMCAzNjkuNyAzMjAgNDgwYzAgMS4zLS4xIDIuNS0uMiAzLjhMMTQ1LjUgMjM0LjljMTYuNi03LjEgMzQuNi0xMC45IDUzLjMtMTAuOWw1MC40IDBjMTUuOSAwIDMxLjMgMi44IDQ1LjggNy45TDM4OS45IDY3LjdjLTcuNy00LjQtMTAuMy0xNC4yLTUuOS0yMS45czE0LjItMTAuMyAyMS45LTUuOWwyNy43IDE2YzcuNyA0LjQgMTAuMyAxNC4yIDUuOSAyMS45bC01NS41IDk2LjEgMS42IC45YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdMMzYwLjcgMjgyYzIgMi44IDMuOSA1LjggNS43IDguOGw3Ni4xIDEyOC44YzExLjIgMTkgNC45IDQzLjUtMTQuMSA1NC44cy00My41IDQuOS01NC44LTE0LjF6TTI4OCA1MTJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExMC4zLTUzLjYgOTAuNmMtMTEuMiAxOS0zNS44IDI1LjMtNTQuOCAxNC4xUy01LjcgNDM4LjcgNS42IDQxOS43TDgxLjcgMjkwLjhjOS40LTE1LjggMjEuNy0yOS4zIDM2LTQwTDI5OS4xIDUxMGMtMy41IDEuMy03LjIgMi0xMS4xIDJ6TTI2NCAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFUb2dnbGVPbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwNSIsICJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyUzQ5MCA2NCAzODQgNjRMMTkyIDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUx1bmdzVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibHVuZ3MtdmlydXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2NyIsICJNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTUxLjNjOS42LTQuOCAyMC41LTcuNSAzMi03LjVzMjIuNCAyLjcgMzIgNy41TDMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDUwLjEgNDUxYzggMTguMyA4LjEgMzkuMiAuMiA1Ny41IDEwLjIgMi4zIDIwLjYgMy41IDMxLjIgMy41IDUyLjIgMCA5NC41LTQyLjMgOTQuNS05NC41bDAtNi4yYzAtMTExLjEtMzYuNy0yMTktMTA0LjQtMzA3TDQyOC45IDQ4LjdjLTguMS0xMC42LTIwLjctMTYuNy0zNC0xNi43LTIzLjcgMC00Mi45IDE5LjItNDIuOSA0Mi45bDAgMTM5LjljMS4yIDIuMiAyLjIgNC42IDMuMSA2LjkgMjYuNC0xMS42IDU4LjMtNi42IDc5LjkgMTVzMjYuNiA1My42IDE1IDc5LjlDNDc3IDMyNy4yIDQ5NiAzNTMuMyA0OTYgMzgzLjhzLTE5IDU2LjctNDUuOSA2Ny4xek0yMjAuOSAyMjEuOGMuOS0yLjQgMi00LjcgMy4xLTYuOWwwLTEzOC41YzAtMjQuNS0xOS45LTQ0LjQtNDQuNC00NC40LTEyLjUgMC0yNC40IDUuMy0zMi44IDE0LjVsLTI2LjQgMjlDNDIuOSAxNjAuOCAwIDI3MS44IDAgMzg3bDAgMzAuNWMwIDUyLjIgNDIuMyA5NC41IDk0LjUgOTQuNSAxMC41IDAgMjEtMS4yIDMxLjItMy41LTcuOS0xOC4zLTcuOC0zOS4zIC4yLTU3LjUtMjYuOS0xMC40LTQ1LjktMzYuNi00NS45LTY3LjFzMTktNTYuNyA0NS45LTY3LjFjLTExLjYtMjYuNC02LjYtNTguMyAxNS03OS45czUzLjYtMjYuNiA3OS45LTE1ek0xNTIgNDA4YzI4LjggMCA0My4yIDM0LjggMjIuOSA1NS4yLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMyMC40LTIwLjQgNTUuMi01LjkgNTUuMiAyMi45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yOC44IDM0LjgtNDMuMiA1NS4yLTIyLjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0yMC40LTIwLjQtNS45LTU1LjIgMjIuOS01NS4yIDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yOC44IDAtNDMuMi0zNC44LTIyLjktNTUuMiA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0yMC40IDIwLjQtNTUuMiA1LjktNTUuMi0yMi45IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMjguOC0zNC44IDQzLjItNTUuMiAyMi45LTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMjAuNCAyMC40IDUuOSA1NS4yLTIyLjkgNTUuMi0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0xMDQtODBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtdGVubmlzLXBhZGRsZS1iYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU1LCAicGluZy1wb25nLXBhZGRsZS1iYWxsIiwgInRhYmxlLXRlbm5pcyJdLCAiZjQ1ZCIsICJNOTcgMTI3bDY3LjQtNjcuNGMzOC4yLTM4LjIgOTAtNTkuNiAxNDQtNTkuNiAxMTIuNSAwIDIwMy43IDkxLjIgMjAzLjcgMjAzLjYgMCA0Ni40LTE1LjggOTEuMS00NC41IDEyNy0yMy42LTE2LjgtNTIuNC0yNi43LTgzLjUtMjYuNy0zMS4xIDAtNTkuOSA5LjktODMuNCAyNi42TDk3IDEyN3pNMjQwIDQ0OGMwIDkuNyAxIDE5LjEgMi44IDI4LjItMTkuOC01LjItMzgtMTUuNS01Mi43LTMwLjItMTIuMi0xMi4yLTMxLjktMTIuMi00NC4xIDBMOTYuNiA0OTUuNGMtMTAuNiAxMC42LTI1IDE2LjYtNDAgMTYuNi0zMS4yIDAtNTYuNi0yNS4zLTU2LjYtNTYuNiAwLTE1IDYtMjkuNCAxNi42LTQwbDQ5LjQtNDkuNGMxMi4yLTEyLjIgMTIuMi0zMS45IDAtNDQuMS0yMS43LTIxLjctMzMuOS01MS4yLTMzLjktODEuOSAwLTI5LjQgMTEuMS01Ny42IDMxLjEtNzlMMjY2LjYgMzY0LjZDMjQ5LjkgMzg4LjEgMjQwIDQxNi45IDI0MCA0NDh6bTE0NC05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGluZ1BvbmdQYWRkbGVCYWxsID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYVRhYmxlVGVubmlzID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYUJveGVzUGFja2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3hlcy1wYWNraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0YzciLCAiTTIwOCAwbDgwIDAgMCA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNTYgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA4LjggMGM4LjItMTQuMSAxMi44LTMwLjUgMTIuOC00OGwwLTE2MGMxMC0xMy40IDE2LTMwIDE2LTQ4bDAtMzJjMC00NC4yLTM1LjgtODAtODAtODBsLTE3NiAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTMyIDMzNmwzMjAgMCAwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTI4ek00OCAxOTJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNoYWxrYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNoYWxrYm9hcmQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZCIsICJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0xNzYgNTEybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNiAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTQ4IDE5MiAwIDAgMTkyLTE5MiAwIDAtMzItNjQgMCAwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDM2OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LTEyMi43IDBjLTQ1LjYgMC04OC41IDIxLjYtMTE1LjYgNTguMkwxNC4zIDI2MC45Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhRGljZVR3byA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLXR3byIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTddLCAiZjUyOCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTM1MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2NDQsICJleGNoYW5nZSJdLCAiZjBlYyIsICJNNTAyLjYgMTUwLjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MDIuNyAxNjAgMzIgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDM3MC43IDAtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zem0tMzk3LjMgMzUybC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxMDkuMyAzNTIgNDgwIDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzcwLjcgMCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYUV4Y2hhbmdlID0gZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OwogICAgZmFGb290YmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb290YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk0NCwgImZvb3RiYWxsLWJhbGwiXSwgImY0NGUiLCAiTTI2MS4xIDIyLjZjLTg5IDE4LTE1MC41IDYzLjQtMTkwIDEyMy45LTIzLjMgMzUuNi0zOC4xIDc1LjMtNDYuNyAxMTUuNUwyNTEuOSA0ODkuNGM4OS0xOCAxNTAuNS02My40IDE5MC4xLTEyMy45IDIzLjMtMzUuNiAzOC4xLTc1LjMgNDYuNy0xMTUuNUwyNjEuMSAyMi42em0yMzYgMTY4LjFjMy4yLTQyLjMgLjctODMuMy00LjgtMTE4LjctNC40LTI3LjgtMjYuOC00OC01My4xLTUxLjYtNDMtNS45LTgyLjItNy41LTExNy44LTUuNEw0OTcuMSAxOTAuNnpNMTkxLjcgNDk3LjFMMTUuOSAzMjEuNGMtMy4yIDQyLjMtLjcgODMuMyA0LjggMTE4LjcgNC40IDI3LjggMjYuOCA0OCA1My4xIDUxLjYgNDMgNS45IDgyLjIgNy41IDExNy44IDUuNHpNMjcxLjUgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhRm9vdGJhbGxCYWxsID0gZmFGb290YmFsbDsKICAgIGZhVHJ1Y2tNb25zdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vbnN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjYzYiIsICJNMzM2IDk2bDQ4IDY0LTEyOCAwIDAtNjQgODAgMHptMTI4IDY0TDM4Ny4yIDU3LjZDMzc1LjEgNDEuNSAzNTYuMSAzMiAzMzYgMzJMMjI0IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2LTE0NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMTguMSAxMC4xIDMzLjkgMjQuOSA0Mi4xLS41IDUuNyAxLjEgMTEuNiA0LjcgMTYuNC0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjMgMzEuM2wxMS4zIDExLjNjOC42IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjctOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjMtMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAyLjQtMy4yIDMuOS02LjggNC41LTEwLjVsMTE0LjIgMGMuNiAzLjcgMi4xIDcuMyA0LjUgMTAuNS0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjIgMzEuM2wxMS4zIDExLjNjOC41IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjgtOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjItMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAzLjYtNC44IDUuMi0xMC43IDQuNy0xNi40IDE0LjgtOC4yIDI0LjktMjMuOSAyNC45LTQyLjFsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNMTI4IDMzNmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTI3MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFBc3RlcmlzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhc3RlcmlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDMzLCA2MTU0NV0sICIyYSIsICJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjguNiAxNDQtODMuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdzMy42IDM0LjktMTEuNyA0My43TDI4OCAyNTYgNDMyIDMzOS4xYzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdzLTI4LjQgMjAuNi00My43IDExLjdMMjU2IDMxMS40IDI1NiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjguNi0xNDQgODMuMWMtMTUuMyA4LjgtMzQuOSAzLjYtNDMuNy0xMS43Uy43IDM0OCAxNiAzMzkuMUwxNjAgMjU2IDE2IDE3Mi45Qy43IDE2NC00LjUgMTQ0LjUgNC4zIDEyOS4xUzMyLjcgMTA4LjYgNDggMTE3LjRMMTkyIDIwMC42IDE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQmF0dGVyeUZ1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1mdWxsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjY3LCAiYmF0dGVyeSIsICJiYXR0ZXJ5LTUiXSwgImYyNDAiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDMwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0zMDQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeSA9IGZhQmF0dGVyeUZ1bGw7CiAgICBmYUJhdHRlcnk1ID0gZmFCYXR0ZXJ5RnVsbDsKICAgIGZhQ2hpbGREcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1kcmVzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTljIiwgIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjQgNjQgNjQgMCAxIDAgMjI0IDY0ek04OCA0MDBsMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTYgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNy44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC43IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMkw4Ni4yIDI4NS41IDU1IDM3OC45QzUxLjYgMzg5LjMgNTkuMyA0MDAgNzAuMiA0MDBMODggNDAweiJdCiAgICB9OwogICAgZmFGYWNlS2lzc0JlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCAia2lzcy1iZWFtIl0sICJmNTk3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhS2lzc0JlYW0yID0gZmFGYWNlS2lzc0JlYW0yOwogICAgZmFUcmFzaENhbkFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUtYWx0Il0sICJmODJhIiwgIk0xNjcuMS0xNmwxMTMuOSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45TDMyMCAzMiA0MTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgOC43LTI2LjFDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2ek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmVBbHQgPSBmYVRyYXNoQ2FuQXJyb3dVcDsKICAgIGZhRm9udCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb250IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwMzEiLCAiTTI4NS4xIDUwLjdDMjc5LjkgMzkuMyAyNjguNSAzMiAyNTYgMzJzLTIzLjkgNy4zLTI5LjEgMTguN0w1OS41IDQxNiA0OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNi4xIDAgMjItNDggMjA4LjMgMCAyMiA0OC02LjEgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDAtMTY3LjQtMzY1LjN6TTMzMC44IDMwNEwxODEuMiAzMDQgMjU2IDE0MC44IDMzMC44IDMwNHoiXQogICAgfTsKICAgIGZhQm9yZUhvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZS1ob2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzMiLCAiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDIzMi42Yy0xOS4xIDExLjEtMzIgMzEuNy0zMiA1NS40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0yMy43LTEyLjktNDQuNC0zMi01NS40TDI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMCAzODRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNDRjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDM4MS45IDE0NCAzMjBsMC0xNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLWNvdmlkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YTgiLCAiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMzMuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTEuMy0xMS4zLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM2wzMy42IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNi0zMy42IDBjLTQuMiAzMC43LTE2LjMgNTguOC0zNC4xIDgyLjNsMjMuOCAyMy44IDExLjMtMTEuM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU2LjYgNTYuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxMS4zLTExLjMtMjMuOC0yMy44Yy0yMy41IDE3LjktNTEuNyAyOS45LTgyLjMgMzQuMWwwIDMzLjYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMzMuNmMtMzAuNy00LjItNTguOC0xNi4zLTgyLjMtMzQuMWwtMjMuOCAyMy44IDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMS4zIDExLjMgMjMuOC0yMy44Qzk3LjkgMzM4LjggODUuOCAzMTAuNyA4MS42IDI4MGwtMzMuNiAwIDAgMTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCAzMDkuMyAwIDI5NmwwLTgwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNiAzMy42IDBjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTIgMTQ5LjcgMTE1LjdjMjMuNS0xNy45IDUxLjctMjkuOSA4Mi4zLTM0LjFsMC0zMy42LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zMiAyMDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGaWxlUGRmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBkZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWMxIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjQwIDM4MGMtMTEgMC0yMCA5LTIwIDIwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMjggMTIgMGMzMy4xIDAgNjAtMjYuOSA2MC02MHMtMjYuOS02MC02MC02MGwtMzIgMHptMzIgODBsLTEyIDAgMC00MCAxMiAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHptOTYtODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MmwwLTY0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0zMiAwem0yMCAxMjhsMC04OCAxMiAwYzYuNiAwIDEyIDUuNCAxMiAxMmwwIDY0YzAgNi42LTUuNCAxMi0xMiAxMmwtMTIgMHptODgtMTA4bDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI4IDAgMC0yNCAyOCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNDggMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFMYW5ndWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5ndWFnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWFiIiwgIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05LjYgMC04LjQgMjMuMWMtMTYuNCA0NS4yLTQxLjEgODYuNS03Mi4yIDEyMiAxNC4yIDguOCAyOSAxNi42IDQ0LjQgMjMuNWw1MC40IDIyLjQgNjIuMi0xNDBjNS4xLTExLjYgMTYuNi0xOSAyOS4yLTE5czI0LjEgNy40IDI5LjIgMTlsMTI4IDI4OGM3LjIgMTYuMi0uMSAzNS4xLTE2LjIgNDIuMnMtMzUuMS0uMS00Mi4yLTE2LjJsLTIwLTQ1LTE1Ny41IDAtMjAgNDVjLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsMzkuOC04OS41LTUwLjQtMjIuNGMtMjMtMTAuMi00NS0yMi40LTY1LjgtMzYuNC0yMS4zIDE3LjItNDQuNiAzMi4yLTY5LjUgNDQuN0w3OC4zIDM4MC42Yy0xNS44IDcuOS0zNSAxLjUtNDIuOS0xNC4zcy0xLjUtMzUgMTQuMy00Mi45bDM0LjUtMTcuM2MxNi4zLTguMiAzMS44LTE3LjcgNDYuNC0yOC4zLTEzLjgtMTIuNy0yNi44LTI2LjQtMzguOS00MC45TDgxLjYgMjI0LjdjLTExLjMtMTMuNi05LjUtMzMuOCA0LjEtNDUuMXMzMy44LTkuNSA0NS4xIDQuMWwxMC4yIDEyLjJjMTEuNSAxMy45IDI0LjEgMjYuOCAzNy40IDM4LjcgMjcuNS0zMC40IDQ5LjItNjYuMSA2My41LTEwNS40bC41LTEuMi0yMTAuMyAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDE2IDI3MC44TDM2NS43IDM4NCA0NjYuMyAzODQgNDE2IDI3MC44eiJdCiAgICB9OwogICAgZmFTaGllbGRIYWx2ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWhhbHZlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaGllbGQtYWx0Il0sICJmM2VkIiwgIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOGwwIDM3OC4xYzEzOC02Ni44IDE3NS4xLTIxNC44IDE3Ni0zMDMuNGwtMTc2LTc0LjYgMCAweiJdCiAgICB9OwogICAgZmFTaGllbGRBbHQgPSBmYVNoaWVsZEhhbHZlZDsKICAgIGZhQ2FyZXRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC11cCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMGQ4IiwgIk0xNDAuMyAxMzUuMmMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDEuNCAzMjAgMjg4LjUgMzIwbC0yNTYgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuNyAyNzQuNSA5LjkgMjY1LjRsMTI4LTEyOCAyLjQtMi4yeiJdCiAgICB9OwogICAgZmFGaWxlUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjIxLCAiZmlsZS1lZGl0Il0sICJmMzFjIiwgIk0xMjguMSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDYuMiAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmwxMzIuMi0xMzIuMiAwLTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzIyLjggMTguN0MzMTAuOCA2LjcgMjk0LjUgMCAyNzcuNiAwTDEyOC4xIDB6TTM4OS42IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTkzLjUgMTE3LjUgMTE3LjV6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXQogICAgfTsKICAgIGZhRmlsZUVkaXQgPSBmYUZpbGVQZW47CiAgICBmYVBlcnNvbkJpa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYmlraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjkyLCAiYmlraW5nIl0sICJmODRhIiwgIk0zNjggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI1NiAzMDUuMSAyNTYgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyNjMgMjMyLjkgMzIzLjMgMTg0LjQgMzY0IDIxN2M1LjcgNC41IDEyLjcgNyAyMCA3bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUyLjggMHpNMTEyIDUxMmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTM1MiAwYTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7CiAgICBmYUJvb2tPcGVuUmVhZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stb3Blbi1yZWFkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYm9vay1yZWFkZXIiXSwgImY1ZGEiLCAiTTI1NiAxNTJhODggODggMCAxIDAgMC0xNzYgODggODggMCAxIDAgMCAxNzZ6bTAgMjk4LjdsMC0xNDkuM2MxNi4zLTYuOCAzMi45LTEzLjcgNDkuNy0yMC43IDM5LTE2LjIgODAuOC0yNC42IDEyMy4xLTI0LjZsMTkuMiAwIDAgMTYwLTE5LjIgMGMtNTkuMSAwLTExNy43IDExLjctMTcyLjMgMzQuNWwtLjUgLjJ6TTI1NiAyMzJsLTI1LjEtMTAuNUMxODQuMSAyMDIgMTMzLjkgMTkyIDgzLjIgMTkyTDQ4IDE5MmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41bDEyLjggNS4zYzcuOSAzLjMgMTYuNyAzLjMgMjQuNiAwbDEyLjgtNS4zYzQ2LjgtMTkuNSA5Ny0yOS41IDE0Ny43LTI5LjVsMzUuMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41TDI1NiAyMzJ6Il0KICAgIH07CiAgICBmYUJvb2tSZWFkZXIgPSBmYUJvb2tPcGVuUmVhZGVyOwogICAgZmFHbGFzc1dhdGVyRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbGFzcy13YXRlci1kcm9wbGV0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjUiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTgzIDI5Ny41TDY2LjQgNjQgMzE3LjYgNjQgMzAxIDI5Ny41IDI4OCAzMDRjLTIwLjEgMTAuMS00My45IDEwLjEtNjQgMHMtNDMuOS0xMC4xLTY0IDAtNDMuOSAxMC4xLTY0IDBsLTEzLTYuNXpNMjU2IDE5NmMwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjUtNi4xLTcuNy0xNy41LTcuNy0yMy42IDAtMTguNSAyMy40LTUyLjIgNjkuNS01Mi4yIDkzLjUgMCAzMy4xIDI4LjcgNjAgNjQgNjBzNjQtMjYuOSA2NC02MHoiXQogICAgfTsKICAgIGZhVG93ZXJCcm9hZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItYnJvYWRjYXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJyb2FkY2FzdC10b3dlciJdLCAiZjUxOSIsICJNODcuOSAxMS41Yy0xMS4zLTYuOS0yNi4xLTMuMi0zMyA4LjEtMjQuOCA0MS0zOSA4OS4xLTM5IDE0MC40czE0LjIgOTkuNCAzOSAxNDAuNGM2LjkgMTEuMyAyMS42IDE1IDMzIDguMXMxNS0yMS42IDguMS0zM0M3NS43IDI0MS45IDY0IDIwMi4zIDY0IDE2MFM3NS43IDc4LjEgOTYuMSA0NC40YzYuOS0xMS4zIDMuMi0yNi4xLTguMS0zM3ptNDAwLjEgMGMtMTEuMyA2LjktMTUgMjEuNi04LjEgMzMgMjAuNCAzMy43IDMyLjEgNzMuMyAzMi4xIDExNS42cy0xMS43IDgxLjktMzIuMSAxMTUuNmMtNi45IDExLjMtMy4yIDI2LjEgOC4xIDMzczI2LjEgMy4yIDMzLTguMWMyNC44LTQxIDM5LTg5LjEgMzktMTQwLjRTNTQ1LjggNjAuNiA1MjEgMTkuNmMtNi45LTExLjMtMjEuNi0xNS0zMy04LjF6TTMyMCAyMTUuNGMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40IDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwyNTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNjQuNnpNMTgwLjIgOTFjNy4yLTExLjIgMy45LTI2LTcuMi0zMy4ycy0yNi0zLjktMzMuMiA3LjJjLTE3LjYgMjcuNC0yNy44IDYwLTI3LjggOTVzMTAuMiA2Ny42IDI3LjggOTVjNy4yIDExLjIgMjIgMTQuNCAzMy4yIDcuMnMxNC40LTIyIDcuMi0zMy4yYy0xMi44LTE5LjktMjAuMi00My42LTIwLjItNjlzNy40LTQ5LjEgMjAuMi02OXpNNDM2LjIgNjVjLTcuMi0xMS4yLTIyLTE0LjQtMzMuMi03LjJzLTE0LjQgMjItNy4yIDMzLjJjMTIuOCAxOS45IDIwLjIgNDMuNiAyMC4yIDY5cy03LjQgNDkuMS0yMC4yIDY5Yy03LjIgMTEuMi0zLjkgMjYgNy4yIDMzLjJzMjYgMy45IDMzLjItNy4yYzE3LjYtMjcuNCAyNy44LTYwIDI3LjgtOTVzLTEwLjItNjcuNi0yNy44LTk1eiJdCiAgICB9OwogICAgZmFCcm9hZGNhc3RUb3dlciA9IGZhVG93ZXJCcm9hZGNhc3Q7CiAgICBmYU1pbmltaXplID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbXByZXNzLWFycm93cy1hbHQiXSwgImY3OGMiLCAiTTQ1NiAyMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzIyLjEgMzIuMiAzMjkgMzlsNDAgNDAgNzMuNC03My40QzQ0NiAyIDQ1MC45IDAgNDU2IDBzMTAgMiAxMy43IDUuN2wzNi43IDM2LjdDNTEwIDQ2IDUxMiA1MC45IDUxMiA1NnMtMiAxMC01LjcgMTMuN0w0MzMgMTQzIDQ3MyAxODNjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMlM0NjUuNyAyMjQgNDU2IDIyNHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzMgMzI5IDQ3M2MtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggNDY1LjcgMjg4IDQ1NmwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNDQgMHptLTI1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTQwLTQwLTczLjQgNzMuNEM2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0Ni4zIDI4OCA1NiAyODhsMTQ0IDB6TTU2IDIyNGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44UzMyLjIgMTg5LjkgMzkgMTgzTDc5IDE0MyA1LjcgNjkuN0MyIDY2IDAgNjEuMSAwIDU2UzIgNDYgNS43IDQyLjNMNDIuMyA1LjdDNDYgMiA1MC45IDAgNTYgMFM2NiAyIDY5LjcgNS43TDE0MyA3OSAxODMgMzljNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgNDYuMyAyMjQgNTZsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRMNTYgMjI0eiJdCiAgICB9OwogICAgZmFDb21wcmVzc0Fycm93c0FsdCA9IGZhTWluaW1pemU7CiAgICBmYUFycm93UmlnaHRUb0NpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtdG8tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGIzIiwgIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwIDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek01MTIgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE1MyAxNjdsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFMYXB0b3BNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4MTIiLCAiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwLTY0IDAgMC0yNDAtMzg0IDAgMCAyNDAtNjQgMCAwLTI0MHpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRsNjAxLjYgMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yIDAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44TDc2LjggNDgwQzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQnJlYWRTbGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmVhZC1zbGljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2VjIiwgIk02NCA0MzJsMC0xNzZjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjE2LjUgNTEyLTIxNi41IDUxMiAwIDAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTc2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yODggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il0KICAgIH07CiAgICBmYUdsb2JlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsb2JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzYwXSwgImYwYWMiLCAiTTM1MS45IDI4MGwtMTkwLjkgMGMyLjkgNjQuNSAxNy4yIDEyMy45IDM3LjUgMTY3LjQgMTEuNCAyNC41IDIzLjcgNDEuOCAzNS4xIDUyLjQgMTEuMiAxMC41IDE4LjkgMTIuMiAyMi45IDEyLjJzMTEuNy0xLjcgMjIuOS0xMi4yYzExLjQtMTAuNiAyMy43LTI4IDM1LjEtNTIuNCAyMC4zLTQzLjUgMzQuNi0xMDIuOSAzNy41LTE2Ny40ek0xNjAuOSAyMzJsMTkwLjkgMEMzNDkgMTY3LjUgMzM0LjcgMTA4LjEgMzE0LjQgNjQuNiAzMDMgNDAuMiAyOTAuNyAyMi44IDI3OS4zIDEyLjIgMjY4LjEgMS43IDI2MC40IDAgMjU2LjQgMHMtMTEuNyAxLjctMjIuOSAxMi4yYy0xMS40IDEwLjYtMjMuNyAyOC0zNS4xIDUyLjQtMjAuMyA0My41LTM0LjYgMTAyLjktMzcuNSAxNjcuNHptLTQ4IDBDMTE2LjQgMTQ2LjQgMTM4LjUgNjYuOSAxNzAuOCAxNC43IDc4LjcgNDcuMyAxMC45IDEzMS4yIDEuNSAyMzJsMTExLjQgMHpNMS41IDI4MGM5LjQgMTAwLjggNzcuMiAxODQuNyAxNjkuMyAyMTcuMy0zMi4zLTUyLjItNTQuNC0xMzEuNy01Ny45LTIxNy4zTDEuNSAyODB6bTM5OC40IDBjLTMuNSA4NS42LTI1LjYgMTY1LjEtNTcuOSAyMTcuMyA5Mi4xLTMyLjcgMTU5LjktMTE2LjUgMTY5LjMtMjE3LjNsLTExMS40IDB6bTExMS40LTQ4QzUwMS45IDEzMS4yIDQzNC4xIDQ3LjMgMzQyIDE0LjcgMzc0LjMgNjYuOSAzOTYuNCAxNDYuNCAzOTkuOSAyMzJsMTExLjQgMHoiXQogICAgfTsKICAgIGZhRm9sZGVyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW1pbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NWQiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFNYXNrRmFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrLWZhY2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTFkNyIsICJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUw2NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNzguN2MwIDYyLjYgNDUuMiAxMTYgMTA3IDEyNi4zbDk3LjkgMTYuM2MzMyAyMiA3Mi42IDM0LjcgMTE1LjEgMzQuN3M4Mi4yLTEyLjggMTE1LjEtMzQuN0w1MzMgMzk2LjljNjEuNy0xMC4zIDEwNy02My43IDEwNy0xMjYuM2wwLTc4LjdjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg5LjIgMGMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFMMzk2LjQgODcuMUMzNzMuOCA3MiAzNDcuMiA2NCAzMjAgNjR6TTEzNS45IDMzNi45bC0xOC40LTMuMUM4Ni42IDMyOC43IDY0IDMwMiA2NCAyNzAuN2wwLTc4LjcgNDggMCAwIDQ4YzAgMzUgOC42IDY3LjkgMjMuOSA5Ni45em0zODYuNi0zLjFsLTE4LjQgMy4xQzUxOS40IDMwNy45IDUyOCAyNzUgNTI4IDI0MGwwLTQ4IDQ4IDAgMCA3OC43YzAgMzEuMy0yMi42IDU4LTUzLjUgNjMuMXpNMTkyIDIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em01NiA1NmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9uZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTVjIiwgIk00NDguNSAzODRjMCA0MS41LTEzLjEgNzkuOS0zNS41IDExMS4zLTcuOSAxMS4xLTIxLjIgMTYuNy0zNC44IDE2LjdsLTI0My4zIDBjLTEzLjcgMC0yNi45LTUuNi0zNC44LTE2LjctMjIuNC0zMS40LTM1LjUtNjkuOC0zNS41LTExMS4zIDAtNzEuMSAzOC42LTEzMy4xIDk2LTE2Ni4zbDAtMTUzLjdjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuN2MxNC4yIDguMiAyNy4yIDE4LjIgMzguOCAyOS42bDM5LjMtMzkuMy03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNiAxNiAzMiAzMiA0OCA0OCA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zYzE3LjMgMjguOSAyNy4zIDYyLjYgMjcuMyA5OC44ek0yODguNSA2NGwtNjQgMCAwIDE5MC42LTMyIDE4LjVjLTE5LjUgMTEuMy0zNS43IDI3LjUtNDYuOSA0Ni45bDIyMS44IDBjLTExLjItMTkuNC0yNy40LTM1LjYtNDYuOS00Ni45bC0zMi0xOC41IDAtMTkwLjZ6Il0KICAgIH07CiAgICBmYVJvYWRCcmlkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1icmlkZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2MyIsICJNMzIgMzJsMjA4IDAgMCA2NC0yNCAwIDAgNjQgMjQgMCAwIDEyOS4zYy00NS40IDcuNi04MCA0Ny4xLTgwIDk0LjdsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NGMwLTM4LjgtMjYuNC03Mi42LTY0LTgybDAtMTEyIDQwIDAgMC02NC04IDBDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMyek04OCA5NmwwIDY0IDgwIDAgMC02NC04MCAwek0zMzYgMzJsNzIgMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA3MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03MiAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi03MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MmMwLTI2LjUgMjEuNS00OCA0OC00OHptOTYgMTYwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhQXJyb3dVcDkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTktMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAtYWx0Il0sICJmODg3IiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTM2NS4xIDIwNi42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAxMTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDIuNyAxODJjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNVcEFsdCA9IGZhQXJyb3dVcDkxOwogICAgZmFNb3VudGFpbkNpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJlIiwgIk0yNTYuMyA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDggNDggMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03Ny44IDBjNC0xNS40IDIuNC0zMi42LTYuNy00OC4yTDM1NC42IDI1NiAzNjguMyAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy02LjEgMC0xMS40IDMuNC0xNC4xIDguNWwtNDIuNi03M2MtNi0xMC4yLTE0LjEtMTgtMjMuMy0yMy4zbDAtNTYuMnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYwIDk2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bS0yNzItNjQuN2wtNjUuMSAxMTEuNiAzMy4xIDMzLjEgNDgtNDggNDAuNCAwLTU2LjQtOTYuN3ptLTI3LjYtNDcuOWMxMi4zLTIxLjIgNDIuOS0yMS4yIDU1LjMgMEw0MjAuMyA0NjMuOWMxMi40IDIxLjMtMi45IDQ4LjEtMjcuNiA0OC4xTDU2IDUxMmMtMjQuNyAwLTQwLjEtMjYuOC0yNy42LTQ4LjFMMTk2LjcgMTc1LjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bjkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tOS0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtbnVtZXJpYy1kZXNjIiwgInNvcnQtbnVtZXJpYy1kb3duLWFsdCJdLCAiZjg4NiIsICJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0xMzQuNS0xODRsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAxMTJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptLTUuMyAxODJjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljRGVzYyA9IGZhQXJyb3dEb3duOTE7CiAgICBmYVNvcnROdW1lcmljRG93bkFsdCA9IGZhQXJyb3dEb3duOTE7CiAgICBmYUZhY2VHcmluV2lkZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTUsICJncmluLWFsdCJdLCAiZjU4MSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0yMDggMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0IDE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NHptMTI4IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhR3JpbkFsdDIgPSBmYUZhY2VHcmluV2lkZTI7CiAgICBmYVBvb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjE5IiwgIk0yNTQuNCA2LjZjMy41LTQuMyA5LTYuNSAxNC41LTUuNyA0Ni45IDYuMyA4My4xIDQ2LjUgODMuMSA5NS4xIDAgMTEuMi0xLjkgMjItNS41IDMybDUuNSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTkuMS04LjQgMzYuMy0yMS43IDQ4bDEzLjcgMGMzOS44IDAgNzIgMzIuMiA3MiA3MiAwIDIzLjItMTEgNDMuOC0yOCA1NyAzNC4xIDUuNyA2MCAzNS4zIDYwIDcxIDAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDUxMmMtMzkuOCAwLTcyLTMyLjItNzItNzIgMC0zNS43IDI1LjktNjUuMyA2MC03MS0xNy0xMy4yLTI4LTMzLjgtMjgtNTcgMC0zOS44IDMyLjItNzIgNzItNzJsMTMuNyAwYy0xMy4zLTExLjctMjEuNy0yOC45LTIxLjctNDggMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYuMiAwYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODAgMC05LjItMS41LTE3LjktNC4zLTI2LjEtMS44LTUuMi0uOC0xMS4xIDIuOC0xNS40eiJdCiAgICB9OwogICAgZmFEaGFybWFjaGFrcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGhhcm1hY2hha3JhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NF0sICJmNjU1IiwgIk0zMzcuOCAyMDUuN2w0OC42LTQyLjVjMTMuOCAxOS4zIDIzLjQgNDEuOSAyNy40IDY2LjJsLTY0LjQgNC4zYy0yLjQtMTAuMS02LjQtMTkuNS0xMS42LTI4em0xNDAuMSAxOS41Yy01LjMtMzguOC0yMC42LTc0LjUtNDMuMi0xMDQuM2wuOC0uN0M0NDkgMTA4LjQgNDQ5LjcgODcuNiA0MzcgNzVzLTMzLjQtMTItNDUuMiAxLjVsLS43IC44Yy0yOS44LTIyLjYtNjUuNS0zNy45LTEwNC4zLTQzLjJsLjEtMS4xYzEuMi0xNy45LTEzLTMzLTMwLjktMzNzLTMyLjEgMTUuMi0zMC45IDMzbC4xIDEuMWMtMzguOCA1LjMtNzQuNSAyMC42LTEwNC4zIDQzLjJsLS43LS44QzEwOC40IDYzIDg3LjYgNjIuMyA3NSA3NXMtMTIgMzMuNCAxLjUgNDUuMmwuOCAuN2MtMjIuNiAyOS44LTM3LjkgNjUuNS00My4yIDEwNC4zbC0xLjEtLjFjLTE3LjktMS4yLTMzIDEzLTMzIDMwLjlzMTUuMiAzMi4xIDMzIDMwLjlsMS4xLS4xYzUuMyAzOC44IDIwLjYgNzQuNSA0My4yIDEwNC4zbC0uOCAuN0M2MyA0MDMuNiA2Mi4zIDQyNC40IDc1IDQzN3MzMy40IDEyIDQ1LjItMS41bC43LS44YzI5LjggMjIuNiA2NS41IDM3LjkgMTA0LjMgNDMuMmwtLjEgMS4xYy0xLjIgMTcuOSAxMyAzMyAzMC45IDMzczMyLjEtMTUuMiAzMC45LTMzbC0uMS0xLjFjMzguOC01LjMgNzQuNS0yMC42IDEwNC4zLTQzLjJsLjcgLjhjMTEuOCAxMy41IDMyLjUgMTQuMiA0NS4yIDEuNXMxMi0zMy40LTEuNS00NS4ybC0uOC0uN2MyMi42LTI5LjggMzcuOS02NS41IDQzLjItMTA0LjNsMS4xIC4xYzE3LjkgMS4yIDMzLTEzIDMzLTMwLjlzLTE1LjItMzIuMS0zMy0zMC45bC0xLjEgLjF6TTE2My4yIDEyNS42YzE5LjMtMTMuOCA0MS45LTIzLjQgNjYuMi0yNy41bDQuMyA2NC40Yy0xMCAyLjQtMTkuNSA2LjQtMjggMTEuNmwtNDIuNS00OC42em0tNjUgMTAzLjhjNC4xLTI0LjQgMTMuNy00Ni45IDI3LjUtNjYuMmw0OC42IDQyLjVjLTUuMyA4LjUtOS4yIDE4LTExLjYgMjhsLTY0LjQtNC4zem0yNy41IDExOS40Yy0xMy44LTE5LjMtMjMuNC00MS45LTI3LjUtNjYuMmw2NC40LTQuM2MyLjQgMTAuMSA2LjQgMTkuNSAxMS42IDI4bC00OC42IDQyLjV6bTEwMy44IDY1Yy0yNC40LTQuMS00Ni45LTEzLjctNjYuMi0yNy40bDQyLjUtNDguNmM4LjUgNS4zIDE4IDkuMiAyOCAxMS42bC00LjMgNjQuNHptMTE5LjQtMjcuNGMtMTkuMyAxMy44LTQxLjkgMjMuNC02Ni4yIDI3LjRsLTQuMy02NC40YzEwLTIuNCAxOS41LTYuNCAyOC0xMS42bDQyLjUgNDguNnptNjUtMTAzLjhjLTQuMSAyNC40LTEzLjcgNDYuOS0yNy40IDY2LjJsLTQ4LjYtNDIuNWM1LjMtOC42IDkuMi0xOCAxMS42LTI4bDY0LjQgNC4zem0tNjUtMTU2LjlsLTQyLjUgNDguNmMtOC42LTUuMy0xOC05LjItMjgtMTEuNmw0LjMtNjQuNGMyNC40IDQuMSA0Ni45IDEzLjcgNjYuMiAyNy41ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmF0dGVyeVF1YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1xdWFydGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMiJdLCAiZjI0MyIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNjQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTIgPSBmYUJhdHRlcnlRdWFydGVyOwogICAgZmFBbmtoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFua2giLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5NzY1XSwgImY2NDQiLCAiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMS01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjctNS42LTQuOS0xMS41LTEwLjUtMTcuNC0xNi43LTI1LjktMjcuNS00Ni42LTYyLjYtNDYuNi0xMDQuMXpNMTYwIDBDODkuMyAwIDMyIDU3LjMgMzIgMTI4IDMyIDE4MC40IDUzLjUgMjIzLjUgNzguOCAyNTZMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Ni44IDBDMjY2LjUgMjIzLjUgMjg4IDE4MC40IDI4OCAxMjggMjg4IDU3LjMgMjMwLjcgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRGlhbW9uZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgzMF0sICJmMjE5IiwgIk0xNyAyMTVMMjE1IDE3QzIyNS45IDYuMSAyNDAuNiAwIDI1NiAwczMwLjEgNi4xIDQxIDE3TDQ5NSAyMTVjMTAuOSAxMC45IDE3IDI1LjYgMTcgNDFzLTYuMSAzMC4xLTE3IDQxTDI5NyA0OTVjLTEwLjkgMTAuOS0yNS42IDE3LTQxIDE3cy0zMC4xLTYuMS00MS0xN0wxNyAyOTdDNi4xIDI4Ni4xIDAgMjcxLjQgMCAyNTZzNi4xLTMwLjEgMTctNDF6Il0KICAgIH07CiAgICBmYVN1YnNjcmlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWJzY3JpcHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyYyIsICJNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHpNNTQ0IDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjkgNS42IDExLjIgMTYuOSAxNy43IDI4LjYgMTcuN2wwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6Il0KICAgIH07CiAgICBmYVJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydXBlZS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MCwgInJ1cGVlIl0sICJmMTU2IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6bTI4NS4xLTMybDM0LjkgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzQuOSAwYy03LjIgMC0xMy4xIDUuOS0xMy4xIDEzLjEgMCA1LjcgMy43IDEwLjcgOS4xIDEyLjVsNDkuNCAxNS45YzMxLjkgMTAuMyA1My41IDM5LjkgNTMuNSA3My40IDAgNDIuNi0zNC41IDc3LjEtNzcuMSA3Ny4xTDMyMCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTAuOSAwYzcuMiAwIDEzLjEtNS45IDEzLjEtMTMuMSAwLTUuNy0zLjctMTAuNy05LjEtMTIuNWwtNDkuNC0xNS45Yy0zMS45LTEwLjMtNTMuNS0zOS45LTUzLjUtNzMuNCAwLTQyLjYgMzQuNS03Ny4xIDc3LjEtNzcuMXoiXQogICAgfTsKICAgIGZhUnVwZWUgPSBmYVJ1cGVlU2lnbjsKICAgIGZhUGVyc29uUmlmbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJpZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGUiLCAiTTQxNiAwTDM4NCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45bC0yMy05Mi4xIDQ0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtMjYuNyA1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJsMC04NC41YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNTYtMTYgNS4zIDAtMTA5LjNjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdMNDMyIDE2YzAtOC44LTcuMi0xNi0xNi0xNnpNMjI0IDIwOEMxMTggMjA4IDMyIDI5NCAzMiA0MDBsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDhjMC0zMi41IDEyLjEtNjIuMSAzMi04NC43bDAgMTk2LjcgMTYwIDAgMC0yOTMuMWMtMjAtNy4xLTQxLjYtMTAuOS02NC0xMC45ek0yODAgODhhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdCiAgICB9OwogICAgZmFEID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMDBdLCAiNDQiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMTI4IDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNFMyODMuNyA0ODAgMTYwIDQ4MEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6TTY0IDk2bDAgMzIwIDk2IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBTMjQ4LjQgOTYgMTYwIDk2TDY0IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVOZmkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW5maSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTc2IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05MyAxNzIuM2wzNSA2MyAwLTUxLjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDEwLjktNy40IDIwLjUtMTggMjMuMnMtMjEuNy0yLTI3LTExLjZsLTM1LTYzIDAgNTEuNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEwLjkgNy40LTIwLjUgMTgtMjMuMnMyMS43IDIgMjcgMTEuNnpNMjA4IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwIDAgMzIgNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTQ0em0xOTIgMGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFUZWV0aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjJlIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTQ0IDIwOGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTI4IDBsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTgwIDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTMyMCAzMmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpNNDggMzM2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2em0xNDQgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0xMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAyNi41IDIxLjUgNDggNDggNDh6bTExMi0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtZG9sbGFyIl0sICJmNjg4IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIxMiA5NmMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDE2OCAyNTZjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYVNlYXJjaERvbGxhciA9IGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyOwogICAgZmFEdW1wc3RlckZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXItZmlyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzk0IiwgIk0xNjQuMyA2NEwxMzguNyAxOTIgNTYgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkw1OC41IDgwLjRDNjEuOCA3MC42IDcxIDY0IDgxLjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTM0NCA2NGw4Mi43IDAgMTYgODBjLTE0LjcgLjItMjkuMyA1LjUtNDAuOSAxNS45LTExLjUgMTAuMy0yMi41IDIxLTMyLjggMzIuMWwtMjQuOSAwIDAtMTI4ek05NiAyNDBsMjMzLjIgMGMtNi40IDguOC0xMi4zIDE3LjYtMTcuNyAyNi4zLTIxLjQgMzQuNy0zOS41IDc2LjEtMzkuNSAxMTUuOCAwIDE3LjEgMi4xIDMzLjggNiA0OS45bC0xMjAuNCAwIDEuOSAxMC4zYzMuMiAxNy40LTguNCAzNC0yNS44IDM3LjJzLTM0LTguNC0zNy4yLTI1LjhDNzEgMzEzLjMgNTggMjQyLjEgNTcuNyAyNDBMOTYgMjQwem01MTItNzJjMCAxMS03LjQgMjAuMy0xNy41IDIzLjEtLjktLjgtMS43LTEuNi0yLjYtMi40LTIxLjgtMjAtNTQuMy0yMS44LTc4LTUuNS00LjItNC4zLTguNS04LjUtMTIuOS0xMi42bC0yMS4zLTEwNi42IDgzIDBjMTAuMyAwIDE5LjUgNi42IDIyLjggMTYuNGwyNS4zIDc1LjljLjggMi40IDEuMiA1IDEuMiA3LjZsMCA0LjF6TTUwNS43IDI0MC4zTDUxOCAyMjYuNWM1LjQtNi4xIDEzLjMtOC44IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4xIDI2LjIgODguMSAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMiA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41czEzLjQgMy4yIDE4LjggNy41YzE0LjQgMTEuNCAzOC45IDQwLjcgMzguOSA0MC43ek01NDQgNDMyLjJjMC0zNi41LTM3LTczLTU0LjgtODguNC01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuOCA1MS45LTU0LjggODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFVcGxvYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXBsb2FkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwOTMiLCAiTTI1NiAxMDkuM0wyNTYgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEwLjctNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyNTYgMTA5LjN6TTIyNCA0MDBjNDQuMiAwIDgwLTM1LjggODAtODBsODAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwYzAgNDQuMiAzNS44IDgwIDgwIDgwem0xNDQgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFVc2VyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyNzE0LCAidXNlci1hbHQtc2xhc2giLCAidXNlci1sYXJnZS1zbGFzaCJdLCAiZjUwNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMTEuNSAyNDUuN2M1NS0xMC45IDk2LjUtNTkuNSA5Ni41LTExNy43IDAtNjYuMy01My43LTEyMC0xMjAtMTIwLTU4LjIgMC0xMDYuOCA0MS41LTExNy43IDk2LjVMNDEtMjQuOXpNMjM1LjYgMzA1LjRDMTQ3LjkgMzE2LjYgODAgMzkxLjUgODAgNDgyLjMgODAgNDk4LjcgOTMuMyA1MTIgMTA5LjcgNTEybDMzMi41IDAtMjA2LjYtMjA2LjZ6Il0KICAgIH07CiAgICBmYVVzZXJBbHRTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFVc2VyTGFyZ2VTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTJdLCAiZjA2MCIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgMTA1LjQtMTA1LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6Il0KICAgIH07CiAgICBmYVZpYWxWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFsLXZpcnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTciLCAiTTY0IDMyQzY0IDE0LjMgNzguMyAwIDk2IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTEuN2MtMTguNSAwLTM3IDctNTEuMSAyMS4xLTIxLjYgMjEuNi0yNi42IDUzLjYtMTUgNzkuOS0yNi45IDEwLjQtNDUuOSAzNi42LTQ1LjkgNjcuMXMxOSA1Ni43IDQ1LjkgNjcuMWMtNy4zIDE2LjUtOCAzNS4yLTIuMyA1Mi4yLTEzLjQgNS43LTI4LjIgOC44LTQzLjYgOC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwek0yODAgNDA4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjggMCA0My4yLTM0LjggMjIuOS01NS4yLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC40IDIwLjQgNTUuMiA1LjkgNTUuMi0yMi45IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAyOC44IDM0LjggNDMuMiA1NS4yIDIyLjkgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC40IDIwLjQtNS45IDU1LjIgMjIuOSA1NS4yIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yOC44IDAtNDMuMiAzNC44LTIyLjkgNTUuMiA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0yMC40LTIwLjQtNTUuMi01LjktNTUuMiAyMi45IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjguOC0zNC44LTQzLjItNTUuMi0yMi45LTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNC0yMC40IDUuOS01NS4yLTIyLjktNTUuMnptMTA0LTMyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2hlY2tEb3VibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stZG91YmxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NjAiLCAiTTI0OS45IDY2LjhjMTAuNC0xNC4zIDcuMi0zNC4zLTcuMS00NC43cy0zNC4zLTcuMi00NC43IDcuMWwtMTA2IDE0NS43LTM3LjUtMzcuNWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi42IDYuNiAxNS44IDEwIDI1LjEgOS4zczE3LjktNS41IDIzLjQtMTMuMWwxMjgtMTc2em0xMjggMTM2YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTE3MCAyMzMuNy02OS41LTY5LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTkyLTI2NHoiXQogICAgfTsKICAgIGZhUGF3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIwIiwgIk0yMzQuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNSAuMy04Ni4yIDMyLjYtOTYuOCA3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjMtMTQuMy03MC4xIDEwLjItODQuMSA1OS43IC45IDc4LjUgMzMuM3pNNjkuMiA0MDEuMkMxMjEuNiAyNTkuOSAyMTQuNyAyMjQgMjU2IDIyNHMxMzQuNCAzNS45IDE4Ni44IDE3Ny4yYzMuNiA5LjcgNS4yIDIwLjEgNS4yIDMwLjVsMCAxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjctMTEuNSAwLTIyLjktMS40LTM0LTQuMmwtODgtMjJjLTE1LjMtMy44LTMxLjMtMy44LTQ2LjYgMGwtODggMjJjLTExLjEgMi44LTIyLjUgNC4yLTM0IDQuMi0yNS44IDAtNDYuNy0yMC45LTQ2LjctNDYuN2wwLTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjMgMjkuMSA1MS43IDEwLjIgODQuMS01NCA0Ny4zLTc4LjUgMzMuM3pNMzEwLjEgMTg5LjdjLTMyLjMtMTAuNi00Ni45LTUzLjktMzIuNi05Ni44czUyLjEtNjkuMSA4NC40LTU4LjUgNDYuOSA1My45IDMyLjYgOTYuOC01Mi4xIDY5LjEtODQuNCA1OC41eiJdCiAgICB9OwogICAgZmFIZWxtZXRTYWZldHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsbWV0LXNhZmV0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXJkLWhhdCIsICJoYXQtaGFyZCJdLCAiZjgwNyIsICJNMzUyIDI2NGwwLTIwMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODUuOUM5MCAxMDkuOCAzMiAxOTEuOCAzMiAyODhsMCA2NCA1MTIgMCAwLTY0Yy0xLTk1LjItNTguNC0xNzcuNy0xNDQtMjA5LjhMNDAwIDI2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpNNDAgNDAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDQ5NiAwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwTDQwIDQwMHoiXQogICAgfTsKICAgIGZhSGFyZEhhdCA9IGZhSGVsbWV0U2FmZXR5OwogICAgZmFIYXRIYXJkID0gZmFIZWxtZXRTYWZldHk7CiAgICBmYUUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwMV0sICI0NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xMjggMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hTcXVpbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXNxdWludCJdLCAiZjU5YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwNy43IDMzMi4xQzEwMiAzMTggMTEzLjQgMzA0IDEyOC42IDMwNGwyNTQuOSAwYzE1LjIgMCAyNi42IDE0IDIwLjkgMjguMS0yMy44IDU4LjYtODEuMiA5OS45LTE0OC4zIDk5LjlzLTEyNC42LTQxLjMtMTQ4LjMtOTkuOXptMTUtMTg4LjhjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhTGF1Z2hTcXVpbnQyID0gZmFGYWNlTGF1Z2hTcXVpbnQyOwogICAgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21wcmVzcy1hbHQiXSwgImY0MjIiLCAiTTQzOS41IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDUwLjIgMjQwIDQ0MC41IDI0MGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N3pNNzIuNSAyNzJsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNDRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODctMzktMzljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNjIuOCAyNzIgNzIuNSAyNzJ6Il0KICAgIH07CiAgICBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjsKICAgIGZhR2lmdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2lmdHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5YyIsICJNMjAyLTMwLjZjMTIuNSA0LjQgMTkgMTguMSAxNC42IDMwLjZsLTguMiAyMy4xIDI1LjQtMTguNWMxMC43LTcuOCAyNS43LTUuNCAzMy41IDUuM3M1LjQgMjUuNy01LjMgMzMuNUwyMzMuOCA2NCAyNzIgNjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyLjFjLTU0LjcgMTAuNC05NiA1OC40LTk2IDExNmwwIDEuOWMwIDguOSAxIDE3LjUgMi44IDI1LjktMTEuOSAxNy44LTE4LjggMzkuMS0xOC44IDYyLjFsMCAxMjhjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwzOC4yIDAtMjguMy0yMC42QzQ3LjIgMzUuNiA0NC44IDIwLjYgNTIuNiA5LjlTNzUuNC0zLjIgODYuMSA0LjZsMjcuNCAyMC04LjMtMjVDMTAxLTEzIDEwNy44LTI2LjYgMTIwLjQtMzAuOHMyNi4yIDIuNiAzMC40IDE1LjJsOS45IDI5LjggMTAuNy0zMC4yYzQuNC0xMi41IDE4LjEtMTkgMzAuNi0xNC42ek00ODkuOSAyMDhjLTcuNSAwLTE0LjUgMy44LTE4LjYgMTAuMUw0NDYuOSAyNTYgNDg4IDI1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEuOWMwLTEyLjItOS45LTIyLjEtMjIuMS0yMi4xek0zODUuMSAyNTZsLTI0LjQtMzcuOWMtNC4xLTYuMy0xMS4xLTEwLjEtMTguNi0xMC4xLTEyLjIgMC0yMi4xIDkuOS0yMi4xIDIyLjFsMCAxLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDEuMSAwek0yODEuOSAyNjguNWMtNi4zLTEwLjctOS45LTIzLjItOS45LTM2LjVsMC0xLjljMC0zOC43IDMxLjQtNzAuMSA3MC4xLTcwLjEgMjMuOCAwIDQ2IDEyLjEgNTguOSAzMi4xbDE1IDIzLjIgMTUtMjMuMmMxMi45LTIwIDM1LjEtMzIuMSA1OC45LTMyLjEgMzguNyAwIDcwLjEgMzEuNCA3MC4xIDcwLjFsMCAxLjljMCAxMy4zLTMuNiAyNS44LTkuOSAzNi41IDE1LjcgMTEuNyAyNS45IDMwLjQgMjUuOSA1MS41bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC03MiAwIDAtMjA4LTQ4IDAgMCAyMDgtNzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMjhjMC0yMS4xIDEwLjItMzkuOCAyNS45LTUxLjV6Il0KICAgIH07CiAgICBmYUJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3MTZdLCAiZjIzNiIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjQgMjI0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTQ0OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem04MCAxNjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxUcmFuc2ZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXRyYW5zZmVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjgiLCAiTTMxIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMTAzLTFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSA2Ny43IDAgMCAwIDMzOC4zIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNzguMi01LjEtNS4xYy0yOC4xLTI4LjEtNzMuNy0yOC4xLTEwMS44IDAtMjcuMiAyNy4yLTI4LjEgNzAuNi0yLjggOTguOWw2Ny43IDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNDA2LjEgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzguMiA1LjEgNS4xYzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCAyNy4yLTI3LjIgMjguMS03MC42IDIuOC05OC45bC02Ny43IDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwzMSAxMDV6TTQxNiAyNTZhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem04OC02NC41YzQuNCAuNSA4LTMuMSA4LTcuNWwwLTQ4YzAtNC40LTMuNi04LTgtOGwtNDggMGMtNC40IDAtOC4xIDMuNi03LjUgOCAzLjYgMjkgMjYuNiA1MS45IDU1LjUgNTUuNXptLTM2OCAxMjljLTQuNC0uNS04IDMuMS04IDcuNWwwIDQ4YzAgNC40IDMuNiA4IDggOGw0OCAwYzQuNCAwIDguMS0zLjYgNy41LTgtMy42LTI5LTI2LjYtNTEuOS01NS41LTU1LjV6Il0KICAgIH07CiAgICBmYVBlcnNvblJ1bm5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJ1bm5pbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzksICJydW5uaW5nIl0sICJmNzBjIiwgIk0yNTYuNS0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTIzLjYgMTc2Yy0zLjMgMC02LjIgMi03LjQgNUw5NC4yIDIzNS45Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44cy0yNC40LTI1LjItMTcuOC00MS42bDIxLjktNTQuOUM2Ny43IDEyOS45IDk0LjEgMTEyIDEyMy42IDExMmw5Ny4zIDBjMjguNSAwIDU0LjggMTUuMSA2OS4xIDM5LjdsMzIuOCA1Ni4zIDYxLjYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjEuNiAwYy0yMi44IDAtNDMuOC0xMi4xLTU1LjMtMzEuOGwtMTAtMTcuMS0yMC43IDcwLjQgNzUuNCAyMi42YzI3LjcgOC4zIDQxLjggMzkgMzAuMSA2NS41TDI4NS43IDUwOWMtNy4yIDE2LjItMjYuMSAyMy40LTQyLjIgMTYuMnMtMjMuNC0yNi4xLTE2LjItNDIuMmw0OS4yLTExMC44LTk1LjktMjguOGMtMzIuNy05LjgtNTItNDMuNy00My43LTc2LjhsMjIuNy05MC42LTM1LjkgMHptLTggMTgxYzEzLjMgMTQuOSAzMC43IDI2LjMgNTEuMiAzMi40bDQuNyAxLjQtNi45IDE5LjNjLTUuOCAxNi4zLTE2IDMwLjgtMjkuMyA0MS44TDUyLjkgNTE5LjhjLTEzLjYgMTEuMi0zMy44IDkuMy00NS00LjNzLTkuMy0zMy44IDQuMy00NWw4Mi40LTY3LjljNC41LTMuNyA3LjgtOC41IDkuOC0xMy45TDExNS42IDM1N3oiXQogICAgfTsKICAgIGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZzsKICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS1kb3duIl0sICJmMTNhIiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTEzNSAyNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4NyA4NyA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMjczIDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTM1IDI0MXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZURvd24gPSBmYUNpcmNsZUNoZXZyb25Eb3duOwogICAgZmFVc2VyTnVyc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1udXJzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODJmIiwgIk05NiA0NC45YzAtMTIuNyA3LjUtMjQuMiAxOS4yLTI5LjNsOTYtNDJjOC4yLTMuNiAxNy41LTMuNiAyNS43IDBsOTYgNDJDMzQ0LjUgMjAuNyAzNTIgMzIuMiAzNTIgNDQuOWwwIDk5LjFjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhTOTYgMjE0LjcgOTYgMTQ0bDAtOTkuMXpNMzA0IDEyOGwtMTExLjYgMC0uNCAwLTQ4IDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwbDAtMTZ6TTIwOCAxNmwwIDE2LTE2IDBjLTQuNCAwLTggMy42LTggOGwwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwIDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTYgMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDAgMC0xNmMwLTQuNC0zLjYtOC04LThMMjE2IDhjLTQuNCAwLTggMy42LTggOHpNMTQyLjYgMzIzYy02LjUtNC45LTE1LjItNi4yLTIyLjYtMi44LTYxLjQgMjguMi0xMDQuMSA5MC4yLTEwNC4xIDE2Mi4xIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC03Mi00Mi43LTEzNC0xMDQuMS0xNjIuMS03LjQtMy40LTE2LjEtMi4xLTIyLjYgMi44bC02NyA1MC4yYy04LjUgNi40LTIwLjMgNi40LTI4LjggMGwtNjctNTAuMnoiXQogICAgfTsKICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy13aW5rLWhlYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTM2LCAia2lzcy13aW5rLWhlYXJ0Il0sICJmNTk4IiwgIk01NDMuNyAyNjguM2MuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNy42LTE3LjEtMTYuMS0zOC44LTIxLjgtNjEuNy03LjctMzAuNS0xNC4xLTc2LjIgOC4yLTExNC43bDIuNy00LjZjMjkuNS01MSA5NC43LTY4LjUgMTQ1LjctMzkgMiAxLjIgNCAyLjQgNS45IDMuN3pNMjQwIDMwNGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMDggMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTUyIDIwYy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdCiAgICB9OwogICAgZmFLaXNzV2lua0hlYXJ0MiA9IGZhRmFjZUtpc3NXaW5rSGVhcnQyOwogICAgZmFGaWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU3NSIsICJNMjk2IDY0YzYuOSAwIDEzLjUgMi43IDE4LjMgNy42TDQ0MC40IDE5Ny43YzQuOSA0LjkgNy42IDExLjUgNy42IDE4LjNzLTIuNyAxMy41LTcuNiAxOC4zTDM4Ni43IDI4OCA2NS4zIDI4OGMxLjMtMy45IDMuNC03LjQgNi4zLTEwLjNsOTYuNC05Ni40IDMzLjQgMzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNiAyNzcuNyA3MS42YzQuOS00LjkgMTEuNS03LjYgMTguMy03LjZ6TTEyMi43IDEzNkwyNi4zIDIzMi40QzkuNSAyNDkuMyAwIDI3Mi4xIDAgMjk2czkuNSA0Ni43IDI2LjMgNjMuNkwxNTIuNCA0ODUuN0MxNjkuMyA1MDIuNSAxOTIuMSA1MTIgMjE2IDUxMnM0Ni43LTkuNSA2My42LTI2LjNMNDg1LjcgMjc5LjZDNTAyLjUgMjYyLjcgNTEyIDIzOS45IDUxMiAyMTZzLTkuNS00Ni43LTI2LjMtNjMuNkwzNTkuNiAyNi4zQzM0Mi43IDkuNSAzMTkuOSAwIDI5NiAwcy00Ni43IDkuNS02My42IDI2LjNMMTY4IDkwLjcgMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2eiJdCiAgICB9OwogICAgZmFNb25leUJpbGwxV2F2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEtd2F2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1iaWxsLXdhdmUtYWx0Il0sICJmNTNiIiwgIk0wIDEwOS41TDAgNDE5LjZjMCAxOS40IDExLjggMzcuMyAzMC4zIDQzLjMgOTQgMzAgMTU4LjggOC40IDIyMy4zLTEzLjEgNjIuNC0yMC44IDEyNC40LTQxLjUgMjEyLjEtMTUuMyAyMi4yIDYuNiA0Ni4yLTguOCA0Ni4yLTMybDAtMzEwLjFjMC0xOS40LTExLjgtMzcuMy0zMC4zLTQzLjMtOTQtMzAtMTU4LjgtOC40LTIyMy4zIDEzLjEtNjIuNCAyMC44LTEyNC40IDQxLjUtMjEyLjEgMTUuMy0yMi4yLTYuNi00Ni4zIDguOC00Ni4zIDMyek0yNTYgMzY4Yy01MyAwLTk2LTUwLjEtOTYtMTEyczQzLTExMiA5Ni0xMTIgOTYgNTAuMSA5NiAxMTItNDMgMTEyLTk2IDExMnpNMTI3LjEgNDA1LjVjLjcgNC40LTIuOCA4LjEtNy4yIDguMS0xNS43IDAtMzIuMS0xLjgtNTAtNi4xLTMuNS0uOC02LTQtNi03LjdMNjQgMzYwYzAtNC40IDMuNi04LjEgOC03LjUgMjguMSAzLjUgNTAuNiAyNS4yIDU1LjIgNTN6TTQ0OCAzNTQuNmMwIDUtNC42IDguOC05LjUgOC0xNS40LTIuNS0zMC4yLTMuOS00NC40LTQuMy00LjktLjEtOC43LTQuNS03LjItOS4yIDcuMy0yMy43IDI4LTQxLjQgNTMuMi00NC42IDQuNC0uNSA4IDMuMSA4IDcuNWwwIDQyLjZ6bS04LTE5NS4xYy0yOC4xLTMuNS01MC42LTI1LjItNTUuMi01My0uNy00LjQgMi44LTguMSA3LjItOC4xIDE1LjcgMCAzMi4xIDEuOCA1MCA2LjEgMy41IC44IDYgNCA2IDcuN2wwIDM5LjljMCA0LjQtMy42IDguMS04IDcuNXptLTMyMi4xLTUuOGM0LjkgLjEgOC43IDQuNSA3LjIgOS4yLTcuMyAyMy43LTI4IDQxLjQtNTMuMiA0NC42LTQuNCAuNS04LTMuMS04LTcuNWwwLTQyLjZjMC01IDQuNi04LjggOS41LTggMTUuNCAyLjUgMzAuMiAzLjkgNDQuNCA0LjN6TTI0MCAxODhjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNDguNC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDQ4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDB6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmVBbHQgPSBmYU1vbmV5QmlsbDFXYXZlOwogICAgZmFMYW5kbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2M10sICJmNjZmIiwgIk0yMzguNyA1LjFjMTAuNS02LjggMjQuMS02LjggMzQuNiAwbDIyNCAxNDRjMTEuOSA3LjcgMTcuNCAyMi4zIDEzLjQgMzUuOXMtMTYuNSAyMy0zMC43IDIzbC0zMiAwIDAgMjA4IDUxLjIgMzguNGM4LjEgNiAxMi44IDE1LjUgMTIuOCAyNS42IDAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNmw1MS4yLTM4LjQgMCAwIDAtMjA4LTMyIDBjLTE0LjIgMC0yNi43LTkuNC0zMC43LTIzczEuNS0yOC4zIDEzLjQtMzUuOWwyMjQtMTQ0ek0zMzYgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHpNMjI0IDQxNmw2NCAwIDAtMjA4LTY0IDAgMCAyMDh6TTExMiAyMDhsMCAyMDggNjQgMCAwLTIwOC02NCAweiJdCiAgICB9OwogICAgZmFNdXNpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdXNpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkyNV0sICJmMDAxIiwgIk00NjggN2M3LjYgNi4xIDEyIDE1LjMgMTIgMjVsMCAzMDRjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42bDAtMTE2LjctMjI0IDQ5LjggMCAyMDYuM2MwIDQ0LjItNDMgODAtOTYgODBzLTk2LTM1LjgtOTYtODAgNDMtODAgOTYtODBjMTEuMiAwIDIyIDEuNiAzMiA0LjZMMTI4IDk2YzAtMTUgMTAuNC0yOCAyNS4xLTMxLjJsMjg4LTY0YzkuNS0yLjEgMTkuNCAuMiAyNyA2LjN6Il0KICAgIH07CiAgICBmYUJvb2tNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stbWVkaWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2U2IiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhU2h1ZmZsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHVmZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU2LCAicmFuZG9tIl0sICJmMDc0IiwgIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAyMDQuOSAzODQgMTkybDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOGwtMzIuNCA0My4yLTQwLTUzLjMgMjEuMi0yOC4zQzI5My4zIDExMC4yIDMyMS44IDk2IDM1MiA5NmwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTU0IDI5Nmw0MCA1My4zLTIxLjIgMjguM0MxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOEwxNTQgMjk2ek00MzguNiA0NzAuNmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzg0IDQ2MC45IDM4NCA0NDhsMC0zMi0zMiAwYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6Il0KICAgIH07CiAgICBmYVJhbmRvbSA9IGZhU2h1ZmZsZTsKICAgIGZhVW5kZXJsaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVuZGVybGluZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGNkIiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyUzExMy43IDY0IDk2IDY0bDAgMTYwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzI3MC4zIDAgMjg4IDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMzMiAzMTIuNCAzMiAyMjRMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMCA0ODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYSIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0zMzkgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTI0MCA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTM1MiA1MTJjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhUm9ib3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9ib3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDJdLCAiZjU0NCIsICJNMzUyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMjg4LTE3LjcgMjg4IDBsMCA2NC05NiAwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIyNGMwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAtNjR6TTE2MCAzNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTEyMCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjI0IDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTE0NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek02NCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCAyMDYuMyAwIDIyNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NnptNTQ0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAxMzMsIDYxNTQzLCAiYWRkIl0sICIyYiIsICJNMjU2IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTYweiJdCiAgICB9OwogICAgZmFBZGQgPSBmYVBsdXM7CiAgICBmYUNvcHkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjNSIsICJNMTkyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjAwLjZjMC0xNy40LTcuMS0zNC4xLTE5LjctNDYuMkwzNzAuNiAxNy44QzM1OC43IDYuNCAzNDIuOCAwIDMyNi4zIDBMMTkyIDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi02NCAwIDAgMTYtMTkyIDAgMC0yNTYgMTYgMCAwLTY0LTE2IDB6Il0KICAgIH07CiAgICBmYUNoZXNzS2luZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCAiZjQzZiIsICJNMjI0LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0IDE1My44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzUyIDM4NCA0MDguMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw2Ny41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMOTYgMzg0IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTUzLjggMCAwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFIb3VzZUZsb29kV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmxvb2Qtd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZSIsICJNNDk2IDIwOGw0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0wzNDggMTAuNUMzNDAuMyAzLjcgMzMwLjMgMCAzMjAgMHMtMjAuMyAzLjctMjggMTAuNUwxMjEuNCAxNTkuOGMtNiA1LjItOS40IDEyLjgtOS40IDIwLjcgMCAxNS4yIDEyLjMgMjcuNSAyNy41IDI3LjVsNC41IDAgMCA5NC40YzIwLjMtOS40IDQyLjEtMTQuMiA2NC0xNC40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAxNi45LS4xIDMzLjggMi42IDUwIDhsMC04OHptLTIyNC04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc0LjYgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0MTguMyAxNy42IDQyNi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA1MTQuMyAxNy42IDUyMi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQml0Y29pblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYml0Y29pbi1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwYjQiLCAiTTY0IDI0QzY0IDEwLjcgNzQuNyAwIDg4IDBzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDEuMWM1NC4zIDcuOCA5NiA1NC40IDk2IDExMC45IDAgMjQuMi03LjcgNDYuNi0yMC43IDY0LjkgMzEuNyAxOS44IDUyLjcgNTUgNTIuNyA5NS4xIDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0xNiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0zMiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0yMi4zIDBDMTguNyA0NDggMCA0MjkuMyAwIDQwNi4zTDAgMTAxLjZDMCA4MC44IDE2LjggNjQgMzcuNiA2NEw2NCA2NCA2NCAyNHptMCAyMDBsMTEyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTExMiAwIDAgOTZ6bTExMiA2NGwtMTEyIDAgMCA5NiAxNDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtMzIgMHoiXQogICAgfTsKICAgIGZhQm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIzMF0sICJmNDY2IiwgIk0zNjkuNCAxMjhsLTM0LjMtNDgtMjIyLjEgMC0zNC4zIDQ4IDI5MC43IDB6TTAgMTQ4LjVjMC0xMy4zIDQuMi0yNi4zIDExLjktMzcuMkw2MC45IDQyLjhDNzIuOSAyNiA5Mi4zIDE2IDExMi45IDE2bDIyMi4xIDBjMjAuNyAwIDQwLjEgMTAgNTIuMSAyNi44bDQ4LjkgNjguNWM3LjggMTAuOSAxMS45IDIzLjkgMTEuOSAzNy4yTDQ0OCA0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE0OC41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQbHVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxODQ2LCAicGx1cy1zcXVhcmUiXSwgImYwZmUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVzU3F1YXJlMiA9IGZhU3F1YXJlUGx1czI7CiAgICBmYUFycm93c0xlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvd3MtaCJdLCAiZjA3ZSIsICJNNDcwLjYgMzc0LjZsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w0MS40IDQxLjQtMzU3LjUgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNDEuNC00MS40IDM1Ny41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBcnJvd3NIID0gZmFBcnJvd3NMZWZ0UmlnaHQ7CiAgICBmYUZhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjg2MyIsICJNMTYwIDE0NGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxNTIuMmMxNS01LjMgMzEuMi04LjIgNDgtOC4yIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgOC44LTcuMiAxNi0xNiAxNmwtMTUyLjIgMGM1LjMgMTUgOC4yIDMxLjIgOC4yIDQ4IDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0LTguOCAwLTE2LTcuMi0xNi0xNmwwLTE1Mi4yYy0xNSA1LjMtMzEuMiA4LjItNDggOC4yLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtOC44IDcuMi0xNiAxNi0xNmwxNTIuMiAwYy01LjMtMTUtOC4yLTMxLjItOC4yLTQ4em05NiAxNDRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDcm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUyMCIsICJNNDU2LjUgMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzNi0zNTUuMiAyNjYuNEMtLjggNDAxLTMuNyA0MjEgNi45IDQzNS4yczMwLjYgMTcgNDQuOCA2LjRsNzYuOC01Ny42IDEzMS4zIDAgNDYuNiAxMTMuMSAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtMzkuMS05NC45IDQwLjkgMGMxLjEgMCAyLjIgMCAzLjIgMGw0Ni42IDExMy4yIDEgMi4yYzUuNyAxMC43IDE4LjggMTUuNSAzMC4zIDEwLjhzMTcuMy0xNy4zIDEzLjktMjlsLS44LTIuMy00Mi0xMDJDNDg1LjMgMzU0LjEgNTQ0LjUgMjgwIDU0NC41IDE5MmwwLTcyIDgwLjUtMjAuMWM4LjYtMi4xIDEzLjgtMTAuOCAxMS42LTE5LjQtNy4xLTI4LjUtMzIuNy00OC41LTYyLjEtNDguNWwtNTAuMSAwQzUwOC4yIDEyLjUgNDgzLjggMCA0NTYuNSAwem0wIDY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1YTAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUxpbmtTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImNoYWluLWJyb2tlbiIsICJjaGFpbi1zbGFzaCIsICJ1bmxpbmsiXSwgImYxMjciLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTEyMi0xMjJjNC4yLTMuNCA4LjMtNy4xIDEyLjEtMTAuOWw3MS4xLTcxLjFjMjkuMy0yOS4zIDQ1LjgtNjkuMSA0NS44LTExMC42IDAtODYuNC03MC0xNTYuNS0xNTYuNS0xNTYuNS0zNy4zIDAtNzMuMSAxMy4zLTEwMS4zIDM3LjIgMjAuMyAxMC4xIDM4LjcgMjMuNSA1NC41IDM5LjUgMTQuMS04LjMgMzAuMi0xMi43IDQ2LjgtMTIuNyA1MS4xIDAgOTIuNSA0MS40IDkyLjUgOTIuNSAwIDI0LjUtOS43IDQ4LTI3LjEgNjUuNGwtNzEuMSA3MS4xYy0zLjkgMy45LTguMSA3LjQtMTIuNiAxMC41bC00Ny41LTQ3LjVjMTYuNS0uOSAyOS43LTE0LjQgMzAuMi0zMS4xIDAtMS4zIDAtMi42IDAtMy45IDAtODYuMy02OS45LTE1Ni45LTE1Ni41LTE1Ni45LTE5LjIgMC0zNy45IDMuNS01NS41IDEwLjJMNDEtMjQuOXpNMjI1LjkgMTYwYy42IDAgMS4xIDAgMS43IDAgMTUuMSAwIDI5LjUgMy43IDQyLjEgMTAuMiAxLjggMS4yIDMuNiAyLjMgNS41IDMuMSAyNi44IDE2LjMgNDQuOCA0NS45IDQ0LjggNzkuNiAwIC40IDAgLjggMCAxLjJMMjI1LjkgMTYwek0zNDYuMiA0MTZMMTkyIDI2MS44YzEuMiA4NC42IDY5LjYgMTUyLjkgMTU0LjEgMTU0LjF6TTEzOS43IDIwOS41bC00NS4zLTQ1LjMtNDguNiA0OC42Yy0yOS4zIDI5LjMtNDUuOCA2OS4xLTQ1LjggMTEwLjYgMCA4Ni40IDcwIDE1Ni41IDE1Ni41IDE1Ni41IDM3LjIgMCA3My4xLTEzLjMgMTAxLjMtMzcuMi0yMC4zLTEwLjEtMzguOC0yMy41LTU0LjYtMzkuNS0xNCA4LjItMzAuMSAxMi42LTQ2LjcgMTIuNi01MS4xIDAtOTIuNS00MS40LTkyLjUtOTIuNSAwLTI0LjUgOS43LTQ4IDI3LjEtNjUuNGw0OC42LTQ4LjZ6Il0KICAgIH07CiAgICBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7CiAgICBmYUNoYWluU2xhc2ggPSBmYUxpbmtTbGFzaDsKICAgIGZhVW5saW5rID0gZmFMaW5rU2xhc2g7CiAgICBmYUFycm93Um90YXRlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcm90YXRlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNSwgImFycm93LXJpZ2h0LXJvdGF0ZSIsICJhcnJvdy1yb3RhdGUtZm9yd2FyZCIsICJyZWRvIl0sICJmMDFlIiwgIk00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3oiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFSZWRvID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFQZW5DbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1jbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlbi1hbHQiXSwgImYzMDUiLCAiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek0yNzQuMSAxMDBsMCAwIDEzNy45IDEzNy45LTIxNS4xIDIxNS4xYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMS4xYy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMnMtOC41LTE1LjEtNi4yLTIzLjRMMzYuNCAzNTMuOGM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43TDI0MC4xIDEzMy45IDIyMyAxMTYuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMODkgMjE3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE1NS4xIDgyLjljMjguMS0yOC4xIDczLjctMjguMSAxMDEuOCAwTDI3NC4xIDEwMHoiXQogICAgfTsKICAgIGZhUGVuQWx0ID0gZmFQZW5DbGlwOwogICAgZmFEb29yQ2xvc2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvb3ItY2xvc2VkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NjgyXSwgImY1MmEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDY0ek0zMjAgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duV2lkZVNob3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24td2lkZS1zaG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC1hc2MiLCAic29ydC1hbW91bnQtZG93biJdLCAiZjE2MCIsICJNMjQ2LjYgMzc0LjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIwIDk2eiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50QXNjID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYVNvcnRBbW91bnREb3duID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYUNhcmV0RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1kb3duIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwZDciLCAiTTE0MC4zIDM3Ni44YzEyLjYgMTAuMiAzMS4xIDkuNSA0Mi44LTIuMmwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMS40IDE5MiAyODguNSAxOTJsLTI1NiAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy43IDIzNy41IDkuOSAyNDYuNmwxMjggMTI4IDIuNCAyLjJ6Il0KICAgIH07CiAgICBmYUsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiayIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwN10sICI0YiIsICJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43QzE0My40IDE2Ny4yIDc2LjQgMjM2LjMgNjQgMjQ5TDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMDcgNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3oiXQogICAgfTsKICAgIGZhQ2hlY2tUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stdG8tc2xvdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2b3RlLXllYSJdLCAiZjc3MiIsICJNNTUyIDI4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDE2IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjU2IDB6bS0zNy4xIDg0LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zbC04NS42IDExNy43LTI2LjUtMjcuNGMtOS4yLTkuNS0yNC40LTkuOC0zMy45LS42LTkuNSA5LjItOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMzg0LjIgMTUwLjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYVZvdGVZZWEgPSBmYUNoZWNrVG9TbG90OwogICAgZmFGaXNoRmlucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXNoLWZpbnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmMiIsICJNMjc1LjIgMzguNGMtMTAuNi04LTI1LTguNS0zNi4zLTEuNVMyMjIgNTcuMyAyMjQuNiA3MC4zbDkuNyA0OC42Yy0xOS40IDktMzYuOSAxOS45LTUyLjQgMzEuNS0xNS4zIDExLjUtMjkgMjMuOS00MC43IDM2LjNMNDguMSAxMzIuNGMtMTIuNS03LjMtMjguNC01LjMtMzguNyA0LjlzLTEyLjQgMjYtNS4zIDM4LjZMNTAgMjU2IDQuMiAzMzYuMWMtNy4yIDEyLjYtNSAyOC40IDUuMyAzOC42czI2LjEgMTIuMiAzOC43IDQuOWw5My4xLTU0LjNjMTEuOCAxMi4zIDI1LjQgMjQuOCA0MC43IDM2LjMgMTUuNSAxMS42IDMzIDIyLjUgNTIuNCAzMS41bC05LjcgNDguNmMtMi42IDEzIDMuMSAyNi4zIDE0LjMgMzMuM3MyNS42IDYuNSAzNi4zLTEuNWw3Ny42LTU4LjJjNTQuOS00IDEwMS41LTI3IDEzNy4yLTUzLjggMzkuMi0yOS40IDY3LjItNjQuNyA4MS42LTg5LjUgNS44LTkuOSA1LjgtMjIuMiAwLTMyLjEtMTQuNC0yNC44LTQyLjUtNjAuMS04MS42LTg5LjUtMzUuOC0yNi44LTgyLjMtNDkuOC0xMzcuMi01My44TDI3NS4yIDM4LjR6TTM4NCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ29tcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcHJlc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA2NiIsICJNMTYwIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dVcEFaID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLXVwIl0sICJmMTVlIiwgIk00MTIuNiA0OS43QzQwNy4yIDM4LjggMzk2LjEgMzIgMzg0IDMycy0yMy4yIDYuOC0yOC42IDE3LjdjLTUwLjcgMTAxLjMtNzcuMyAxNTQuNy04MCAxNjAtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjljLTIuNy01LjMtMjkuMy01OC43LTgwLTE2MHpNMzg0IDEzNS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40ek0yODggMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDUwLjcgMC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzMwNy4xIDQ4MCAzMjAgNDgwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MC43IDAgNzMuNC03My40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ2MC45IDI4OCA0NDggMjg4bC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDI1LjQgMjUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC04MC04MHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhVXAgPSBmYUFycm93VXBBWjsKICAgIGZhVXNlckdyYWR1YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItZ3JhZHVhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUwMSIsICJNMjQxLjMtMTNjLTExLjQtMi4zLTIzLjEtMi4zLTM0LjUgMEwxOS4zIDI0LjVDOC4xIDI2LjcgMCAzNi42IDAgNDggMCA1OC4zIDYuNSA2Ny4zIDE2IDcwLjZMMTYgMTQ0IC4zIDIyMi42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjZsMzQuOSAwYzggMCAxNC42LTYuNSAxNC42LTE0LjYgMC0xLS4xLTEuOS0uMy0yLjlMNDggMTQ0IDQ4IDc3LjMgOTYgODYuOSA5NiAxNDRjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOGwwLTU3LjEgNzYuNy0xNS4zQzQzOS45IDY5LjMgNDQ4IDU5LjQgNDQ4IDQ4cy04LjEtMjEuMy0xOS4zLTIzLjVMMjQxLjMtMTN6TTIyNCAyMjRjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDE2MCAwYzAgNDQuMi0zNS44IDgwLTgwIDgwek0xMjAuMSAzMjAuMUM1OC43IDM0OC4zIDE2IDQxMC4zIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDE1NC4zIDAgMC0xNDYtNTcuNC00M2MtNi41LTQuOS0xNS4yLTYuMi0yMi42LTIuOHpNMjQ4IDUxMmwxNTQuMyAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtNzItNDIuNy0xMzQtMTA0LjEtMTYyLjEtNy40LTMuNC0xNi4xLTIuMS0yMi42IDIuOGwtNTcuNCA0MyAwIDE0NnoiXQogICAgfTsKICAgIGZhRmlsZUNvZGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29kZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM5IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTU0LjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTExMi0zMS4yYy04LjYtMTAuMS0yMy44LTExLjItMzMuOC0yLjZzLTExLjIgMjMuOC0yLjYgMzMuOGwzNC42IDQwLjQtMzQuNiA0MC40Yy04LjYgMTAuMS03LjUgMjUuMiAyLjYgMzMuOHMyNS4yIDcuNSAzMy44LTIuNmw0OC01NmM3LjctOSA3LjctMjIuMiAwLTMxLjJsLTQ4LTU2eiJdCiAgICB9OwogICAgZmFTb2FwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCAiZTA2ZSIsICJNMjA4LTMyYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMzIwIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0zNTIgMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAxNjBsMTEyIDBjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMMTYwIDIyNGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmwxOTIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMzUuMS0xOC45LTY1LjktNDctODIuNiAxOS0xOS44IDMwLjctNDYuNiAzMS03Ni4xIDQ1LjQgNy42IDgwIDQ3LjEgODAgOTQuN2wwIDEyOGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ4MGMtNTMgMC05Ni00My05Ni05NkwwIDI1NmMwLTUzIDQzLTk2IDk2LTk2em02NCAxMTJsMTkyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFSZWN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY3ljbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODQyLCA5ODUwLCA5ODUxXSwgImYxYjgiLCAiTTE1Mi4zIDYwQzE5OC41LTIwIDMxNC0yMCAzNjAuMiA2MGwzNy4zIDY0LjYgMjcuNy0xNmM4LjQtNC45IDE4LjktNC4yIDI2LjYgMS43czExLjEgMTUuOSA4LjYgMjUuM0w0MzYuOSAyMjNjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI3LjctMTYtMzcuMy02NC42Yy0yMS42LTM3LjMtNzUuNC0zNy4zLTk3IDBsLTUuMyA5LjFjLTguOCAxNS4zLTI4LjQgMjAuNS00My43IDExLjdTMTM4LjIgODQuNSAxNDcgNjkuMWw1LjMtOS4xek00NDkuNyAyNzkuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsNS4zIDkuMWM0Ni4yIDgwLTExLjUgMTgwLTEwMy45IDE4MGwtNzQuNiAwIDAgMzJjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDY0LTY0YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMmwwIDMyIDc0LjYgMGM0My4xIDAgNzAuMS00Ni43IDQ4LjUtODRsLTUuMy05LjFjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN3pNNTEgMjM1LjRsLTI3LjctMTZjLTguNC00LjktMTMuMS0xNC4zLTExLjgtMjMuOXM4LjItMTcuNSAxNy42LTIwTDExNi41IDE1MmMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN2wyMy40IDg3LjRjMi41IDkuNC0uOSAxOS4zLTguNiAyNS4zcy0xOC4yIDYuNi0yNi42IDEuN2wtMjcuNy0xNi0zNy4zIDY0LjZjLTIxLjYgMzcuMyA1LjQgODQgNDguNSA4NGwxMC42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjYgMEMyNS4zIDQ4MC0zMi40IDM4MCAxMy44IDMwMEw1MSAyMzUuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJncmluLXdpbmsiXSwgImY1OGMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMzI4IDE5NmMtMTEgMC0yMCA5LTIwIDIwcy05IDIwLTIwIDIwLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMHpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW5XaW5rMiA9IGZhRmFjZUdyaW5XaW5rMjsKICAgIGZhV2F0ZXJMYWRkZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2F0ZXItbGFkZGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImxhZGRlci13YXRlciIsICJzd2ltbWluZy1wb29sIl0sICJmNWM1IiwgIk0zNzQuNSA0MDUuN2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOCAyNS43LTQuOCAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTI0LjIgMTguMy01Mi4zIDM1LjktODMuNCAzNS45cy01OS4xLTE3LjctODMuMy0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC42LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjN6TTUxMS44IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOC0xNy41IDAtMzEuOCAxNC4yLTMxLjggMzEuOGwwIDIxMS44Yy0yMy4xLTUuMS00NC45LTQuNC02NC0uNGwwLTUxLjItMTkyIDAgMCA0OC43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0xNi4yIC4xLTMyLjQgMi43LTQ4IDhsMC0yMTYuMmMwLTUyLjkgNDIuOS05NS44IDk1LjctOTUuOCA0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjhsMCA5Ni4yIDE5MiAwIDAtOTYuMkM0MTYgNzQuOSA0NTguOSAzMiA1MTEuOCAzMnoiXQogICAgfTsKICAgIGZhTGFkZGVyV2F0ZXIgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFTd2ltbWluZ1Bvb2wgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFUb3dlckNlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItY2VsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTg1IiwgIk01OS42IDkuOEM0Ny4zIDQuOCAzMy4zIDEwLjcgMjguNCAyMyAxNS4yIDU1LjUgOCA5MC45IDggMTI4czcuMiA3Mi41IDIwLjQgMTA1YzUgMTIuMyAxOSAxOC4yIDMxLjMgMTMuMnMxOC4yLTE5IDEzLjItMzEuM0M2MiAxODguMiA1NiAxNTguOCA1NiAxMjhzNi02MC4yIDE2LjktODdjNS0xMi4zLTEtMjYuMy0xMy4yLTMxLjN6bTQ1Ni44IDBjLTEyLjMgNS0xOC4yIDE5LTEzLjIgMzEuMyAxMC45IDI2LjggMTYuOSA1Ni4yIDE2LjkgODdzLTYgNjAuMi0xNi45IDg3Yy01IDEyLjMgMSAyNi4zIDEzLjIgMzEuM3MyNi4zLTEgMzEuMy0xMy4yYzEzLjEtMzIuNSAyMC40LTY3LjkgMjAuNC0xMDVzLTcuMi03Mi41LTIwLjQtMTA1Yy01LTEyLjMtMTktMTguMi0zMS4zLTEzLjJ6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjIgMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOWwyMC42LTQ1LjIgMjIwLjYgMCAyMC42IDQ1LjJjNy4zIDE2LjEgMjYuMyAyMy4yIDQyLjQgMTUuOXMyMy4yLTI2LjMgMTUuOS00Mi40TDM0MC4xIDE2NS4yek0zNzYuNSA0MDBsLTE3NyAwIDIxLjgtNDggMTMzLjMgMCAyMS44IDQ4ek0yODggMjA1LjNsNDQuOCA5OC43LTg5LjcgMCA0NC44LTk4Ljd6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6Il0KICAgIH07CiAgICBmYUNvbG9uU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2xvbi1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxNDAiLCAiTTIxMy44IDguN2MxMi45IDMuMiAyMC43IDE2LjIgMTcuNSAyOS4xbC00LjYgMTguNWMxNS40IC44IDMwLjQgMy40IDQ0LjcgNy41bDkuNC0zNy42QzI4My45IDEzLjMgMjk3IDUuNSAzMDkuOCA4LjdTMzMwLjUgMjUgMzI3LjMgMzcuOEwzMTYgODIuOGMxMy41IDcuOCAyNiAxNy4xIDM3LjIgMjcuOCAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTMuMS0yLjktNi40LTUuOC05LjgtOC40TDIzOS4yIDM5MGMyNi45LTQuNiA1MS4xLTE3LjEgNzAuMS0zNS4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yYy0zNC4zIDMyLjMtODAgNTIuOC0xMzAuNSA1NC40bC03LjUgMjkuOWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNXMtMjAuNy0xNi4yLTE3LjUtMjkuMWw1LjYtMjIuNWMtMTUtMy4yLTI5LjQtOC00Mi45LTE0LjRsLTEyLjEgNDguNWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNVM2OS41IDQ4NyA3Mi43IDQ3NC4ybDE2LTYzLjlDNDQuMyAzNzMuNiAxNiAzMTguMSAxNiAyNTYgMTYgMTU5LjIgODQuOCA3OC40IDE3Ni4zIDYwbDguNC0zMy44QzE4Ny45IDEzLjMgMjAxIDUuNSAyMTMuOCA4Ljd6TTE1OCAxMzIuOWMtNDYuMSAyMS44LTc4IDY4LjctNzggMTIzLjEgMCAzMC41IDEwIDU4LjYgMjYuOSA4MS4zTDE1OCAxMzIuOXpNMTQ3LjQgMzczLjRjMTMgNy42IDI3LjMgMTMuMSA0Mi41IDE2LjFsNjUuOS0yNjMuNmMtMTIuNi0zLjgtMjUuOS01LjktMzkuOC01LjktMS44IDAtMy41IDAtNS4zIC4xTDE0Ny40IDM3My40eiJdCiAgICB9OwogICAgZmFMYXB0b3BGaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1maWxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWQiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDQxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDgtNjQgMCAwLTQ4LTI4OCAwIDAgMTkyIDExMiAwIDAgOTYtMTYzLjIgMEMzNC40IDM1MiAwIDMxNy42IDAgMjc1LjIgMCAyNjQuNiA4LjYgMjU2IDE5LjIgMjU2TDY0IDI1NiA2NCA2NHpNNTI5LjkgMjU3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNTQ0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjU2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDc2LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xIDIwIDIwIDQ3LjkgNDcuOSA4My45IDgzLjl6TTQxNiAyNzJjMCA4LjggNy4yIDE2IDE2IDE2bDYwLjEgMC03Ni4xLTc2LjEgMCA2MC4xeiJdCiAgICB9OwogICAgZmFCYWhhaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWhhaSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXlrYWwiXSwgImY2NjYiLCAiTTI4OC40LThjMTMuMiAwIDI1IDguMSAyOS44IDIwLjRsMzEuOSA4MiA3Ny4yLTQyLjNjMTEuNi02LjMgMjUuOC00LjkgMzUuOSAzLjVzMTQgMjIuMyA5LjcgMzQuOGwtMjguMiA4My4zIDg2LjMgMTcuMmMxMi45IDIuNiAyMyAxMi44IDI1LjMgMjUuOHMtMy42IDI2LjEtMTQuOSAzMi45bC03NS4yIDQ1LjcgNTUgNjguNmM4LjMgMTAuMyA5LjMgMjQuNiAyLjcgMzZzLTE5LjUgMTcuNi0zMi42IDE1LjZsLTg3LTEzLjMtMiA4OGMtLjMgMTMuMi04LjYgMjQuOC0yMSAyOS40cy0yNi4zIDEtMzUtOWwtNTgtNjYuMS01OCA2Ni4xYy04LjcgOS45LTIyLjYgMTMuNS0zNSA5cy0yMC44LTE2LjItMjEtMjkuNGwtMi04OC04NyAxMy4zYy0xMyAyLTI2LTQuMi0zMi42LTE1LjZzLTUuNS0yNS43IDIuNy0zNmw1NS02OC42LTc1LjItNDUuN2MtMTEuMy02LjgtMTcuMi0xOS45LTE0LjktMzIuOXMxMi4zLTIzLjIgMjUuMy0yNS44bDg2LjMtMTcuMi0yOC4yLTgzLjNjLTQuMi0xMi41LS40LTI2LjMgOS43LTM0LjhzMjQuNC05LjkgMzUuOS0zLjVsNzcuMSA0Mi4zIDMxLjktODJDMjYzLjMgLjEgMjc1LjItOCAyODguNC04em0wIDEyMC4yTDI3MyAxNTEuNmMtMy4zIDguNi0xMC4yIDE1LjMtMTguOSAxOC41cy0xOC4yIDIuNC0yNi4zLTJsLTM3LTIwLjMgMTMuNiA0MGMzIDguNyAyIDE4LjMtMi42IDI2LjNzLTEyLjQgMTMuNi0yMS41IDE1LjRsLTQxLjQgOC4zIDM2LjEgMjEuOWM3LjkgNC44IDEzLjMgMTIuNyAxNC45IDIxLjhzLS44IDE4LjQtNi41IDI1LjZsLTI2LjQgMzMgNDEuOC02LjRjOS4xLTEuNCAxOC40IDEuMiAyNS40IDcuMXMxMS4yIDE0LjYgMTEuNCAyMy44bC45IDQyLjIgMjcuOS0zMS44YzYuMS02LjkgMTQuOC0xMC45IDI0LjEtMTAuOXMxOCA0IDI0LjEgMTAuOWwyNy45IDMxLjggLjktNDIuMmMuMi05LjIgNC40LTE3LjkgMTEuNC0yMy44czE2LjMtOC41IDI1LjQtNy4xbDQxLjggNi40LTI2LjQtMzNjLTUuOC03LjItOC4yLTE2LjUtNi42LTI1LjZzNy0xNyAxNC45LTIxLjhsMzYuMS0yMS45LTQxLjQtOC4zYy05LTEuOC0xNi45LTcuNC0yMS41LTE1LjRzLTUuNS0xNy42LTIuNi0yNi4zbDEzLjYtNDAtMzcgMjAuM2MtOC4xIDQuNC0xNy43IDUuMi0yNi4zIDJzLTE1LjUtOS45LTE4LjktMTguNWwtMTUuMy0zOS40eiJdCiAgICB9OwogICAgZmFIYXlrYWwgPSBmYUJhaGFpOwogICAgZmFNb25leUJpbGwxMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC1hbHQiXSwgImYzZDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0xOTIgODBhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek02NCAxODRsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxNDRjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek00NDAgMTkxLjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTQ0OCAzMjhsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxBbHQyID0gZmFNb25leUJpbGwxMjsKICAgIGZhQ2xvdWRCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWJvbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODUsICJ0aHVuZGVyc3Rvcm0iXSwgImY3NmMiLCAiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMzguNiAwIDEyNC4xLTExMWMxMi4yLTEwLjkgMjgtMTcgNDQuNC0xNyA0NC42IDAgNzYuNSA0MyA2My43IDg1LjdMMzU0LjEgMzIwIDQxNiAzMjBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLS41IDAtMS4xIDAtMS42IDAgMS4xLTUuMiAxLjYtMTAuNSAxLjYtMTYgMC00NC4yLTM1LjgtODAtODAtODAtMjQuMyAwLTQ2LjEgMTAuOS02MC44IDI4LTE4LjctMzUuNy01Ni4xLTYwLTk5LjItNjAtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA3LjEgLjcgMTQuMSAxLjkgMjAuOC0zOC4zIDEyLjYtNjUuOSA0OC43LTY1LjkgOTEuMnpNMTYwLjYgNDAwbDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzYyLjUgMzk2LjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDE0OS41IDM3MS4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdCiAgICB9OwogICAgZmFUaHVuZGVyc3Rvcm0gPSBmYUNsb3VkQm9sdDsKICAgIGZhRXRoZXJuZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXRoZXJuZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc5NiIsICJNMCAyMjRMMCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFIcnl2bmlhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJocnl2bmlhLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4MzcyLCAiaHJ5dm5pYSJdLCAiZjZmMiIsICJNMzM2IDE0OS40QzMzNiA3NyAyNjguNSAyMy41IDE5OCA0MC4xTDkzLjIgNjQuOUM3NiA2OC45IDY1LjQgODYuMiA2OS40IDEwMy40czIxLjMgMjcuOSAzOC41IDIzLjhsMTA0LjgtMjQuN2MzMC4zLTcuMSA1OS4zIDE1LjggNTkuMyA0Ni45IDAgMTcuNi05LjYgMzMuOC0yNSA0Mi4zbC0uNyAuNC0yMjIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMi40IDBjNS41LTEzLjMgOC40LTI3LjggOC40LTQyLjZ6TTM2MCAyNzJMMjQgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzLjMgMGMtNi4xIDEzLjQtOS4zIDI4LjEtOS4zIDQzLjMgMCA2NC4xIDU2LjkgMTEzLjQgMTIwLjQgMTA0LjJsMTM3LjktMTkuOWMxNy41LTIuNSAyOS42LTE4LjcgMjcuMS0zNi4ycy0xOC44LTI5LjYtMzYuMi0yNy4xTDE1OS4yIDQwNC4yYy0yNC45IDMuNi00Ny4yLTE1LjctNDcuMi00MC45IDAtMTUuMSA4LjItMjguOSAyMS40LTM2LjJsMTMtNy4xIDIxMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUhyeXZuaWEgPSBmYUhyeXZuaWFTaWduOwogICAgZmFFeWVTbGFzaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6Il0KICAgIH07CiAgICBmYUNhcnRGbGF0YmVkU3VpdGNhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1mbGF0YmVkLXN1aXRjYXNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImx1Z2dhZ2UtY2FydCJdLCAiZjU5ZCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjcgMGMxLjggNSAyLjcgMTAuNCAyLjcgMTYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC01LjYgMS0xMSAyLjctMTZsLTE5Ny41IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNiAxLjEtMTEuNyAzLjEtMTctMzguMS02LjItNjcuMS0zOS4yLTY3LjEtNzlMNjQgODBjMC04LjgtNy4yLTE2LTE2LTE2TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJ6TTE3NiAxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMCAwLTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2bDY0IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAyNCAzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNDAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNDR6TTM4NCA5NmwwLTI0YzAtNC40LTMuNi04LTgtOGwtNjQgMGMtNC40IDAtOCAzLjYtOCA4bDAgMjQgODAgMHoiXQogICAgfTsKICAgIGZhTHVnZ2FnZUNhcnQgPSBmYUNhcnRGbGF0YmVkU3VpdGNhc2U7CiAgICBmYVJhZGlhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYWRpYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjdiOSIsICJNNDQ2LjIgMzQuNWMtMTQuMi0xMC4xLTMzLjUtNC42LTQyLjIgMTAuNUwzMzEuNiAxNzAuM2MzMS4zIDE1LjggNTIuOCA0OC4zIDUyLjggODUuN2wxNDQgMGMxNy43IDAgMzIuMi0xNC40IDMwLjEtMzEuOS05LjEtNzguMS01MS40LTE0Ni4xLTExMi4zLTE4OS42ek0xNzIuNyA0NC45QzE2NCAyOS44IDE0NC43IDI0LjMgMTMwLjUgMzQuNSA2OS42IDc3LjkgMjcuMyAxNDUuOSAxOC4yIDIyNC4xIDE2LjEgMjQxLjYgMzAuNyAyNTYgNDguMyAyNTZsMTQ0IDBjMC0zNy41IDIxLjUtNjkuOSA1Mi44LTg1LjdMMTcyLjcgNDQuOXptLTkuNCA0MTYuOGMtOC43IDE1LjEtMy44IDM0LjUgMTIgNDEuOCAzNC40IDE1LjcgNzIuNyAyNC41IDExMyAyNC41czc4LjYtOC44IDExMy0yNC41YzE1LjgtNy4yIDIwLjctMjYuNyAxMi00MS44TDM0MSAzMzYuM2MtMTUuMSA5LjktMzMuMiAxNS43LTUyLjYgMTUuN3MtMzcuNS01LjgtNTIuNi0xNS43TDE2My4zIDQ2MS43ek0yODguMyAzMDRhNDggNDggMCAxIDAgLS43LTk2IDQ4IDQ4IDAgMSAwIC43IDk2eiJdCiAgICB9OwogICAgZmFGaWxlV29yZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13b3JkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzIiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMzUuNCAyNzQuOGMtMi45LTEyLjktMTUuNy0yMS4xLTI4LjYtMTguMnMtMjEuMSAxNS43LTE4LjIgMjguNmwzMiAxNDRjMi4zIDEwLjUgMTEuNCAxOC4yIDIyLjIgMTguOHMyMC42LTYuMSAyNC0xNi40bDI1LjItNzUuNyAyNS4yIDc1LjdjMy40IDEwLjIgMTMuMiAxNi45IDI0IDE2LjRzMTkuOS04LjIgMjIuMi0xOC44bDMyLTE0NGMyLjktMTIuOS01LjMtMjUuOC0xOC4yLTI4LjZzLTI1LjggNS4zLTI4LjYgMTguMmwtMTMuMiA1OS40LTIwLjYtNjEuOGMtMy4zLTkuOC0xMi40LTE2LjQtMjIuOC0xNi40cy0xOS41IDYuNi0yMi44IDE2LjRsLTIwLjYgNjEuOC0xMy4yLTU5LjR6Il0KICAgIH07CiAgICBmYUJlZFB1bHNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlZC1wdWxzZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcm9jZWR1cmVzIl0sICJmNDg3IiwgIk01MzEuMi0yMi40TDU3MiAzMiA2MTYgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDBjLTcuNiAwLTE0LjctMy42LTE5LjItOS42bC0yNC4xLTMyLjEtNDcgOTkuOWMtMy43IDcuOC0xMS4zIDEzLjEtMTkuOSAxMy43cy0xNi45LTMuNC0yMS43LTEwLjZMMzg3LjIgODAgMzQ0IDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDU2IDBjOCAwIDE1LjUgNCAyMCAxMC43bDI0LjQgMzYuNiA0NS45LTk3LjVjMy42LTcuNiAxMC45LTEyLjggMTkuMy0xMy43czE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDkuNSAwIDI2LjYgMzkuOWMxNC40IDIxLjYgMzkuMyAzMy44IDY1LjIgMzEuOXM0OC44LTE3LjYgNTkuOC00MS4xTDUyNyAxMjkuMmM0NS45IDcuMiA4MSA0Ni45IDgxIDk0LjhsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCAyMjQgMjI0IDAgMC0xMjh6TTE0NCAxOTJhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFQcm9jZWR1cmVzID0gZmFCZWRQdWxzZTsKICAgIGZhVGVudHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4MiIsICJNNTM5LjkgMzUybC05NS42IDAtOC40LTY2LjFjLTIuOS0yMy4yLTE1LjktNDMuOS0zNS40LTU2LjhMMjUyLjIgMTMxLjVjLTE4LTExLjktMzkuNy0xNS43LTYwLjEtMTEuNSAyLjUtNC4zIDUuOS03LjkgMTAuMS0xMC43TDM1MC42IDExLjZjMTAuNy03IDI0LjUtNyAzNS4yIDBsMTQ4LjQgOTcuN2M3LjggNS4xIDEzIDEzLjQgMTQuMiAyMi43bDIzLjMgMTg0YzIuNCAxOS4xLTEyLjUgMzYtMzEuNyAzNnpNNC44IDQ3NmwyMy4zLTE4NGMxLjItOS4zIDYuMy0xNy42IDE0LjItMjIuN2wxNDguNC05Ny43YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTQ5LjcgMGMtMTEuMiAwLTIxLjUtNS44LTI3LjMtMTUuNGwtNzctMTI2LjdjLTEuNy0yLjgtNC44LTQuNi04LjEtNC42LTUuMyAwLTkuNSA0LjMtOS41IDkuNWwwIDEwNS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDM2LjUgNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il0KICAgIH07CiAgICBmYU11Z0hvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdWctaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTc0OV0sICJmN2I2IiwgIk0xNTItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzE4My41IDMxLjcgMTc2IDI0LjEgMTc2IDggMTc2LTUuMyAxNjUuMy0xNiAxNTItMTZ6TTk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMGM0MS44IDAgNzcuNC0yNi43IDkwLjUtNjRsNS41IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTNTE4LjcgMTkyIDQ0OCAxOTJMOTYgMTkyek00NDggMzg0bDAtMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek0yODggOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyNDAtNS4zIDI0MCA4YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzI5NS41IDMxLjcgMjg4IDI0LjEgMjg4IDh6Il0KICAgIH07CiAgICBmYUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4ODksICJ6YXAiXSwgImYwZTciLCAiTTMzOC44LTkuOWMxMS45IDguNiAxNi4zIDI0LjIgMTAuOSAzNy44TDI3MS4zIDIyNCA0MTYgMjI0YzEzLjUgMCAyNS41IDguNCAzMC4xIDIxLjFzLjcgMjYuOS05LjYgMzUuNWwtMjg4IDI0MGMtMTEuMyA5LjQtMjcuNCA5LjktMzkuMyAxLjNzLTE2LjMtMjQuMi0xMC45LTM3LjhMMTc2LjcgMjg4IDMyIDI4OGMtMTMuNSAwLTI1LjUtOC40LTMwLjEtMjEuMXMtLjctMjYuOSA5LjYtMzUuNWwyODgtMjQwYzExLjMtOS40IDI3LjQtOS45IDM5LjMtMS4zeiJdCiAgICB9OwogICAgZmFaYXAgPSBmYUJvbHQ7CiAgICBmYUphciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqYXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTUxNiIsICJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTkyeiJdCiAgICB9OwogICAgZmFUcnVja1BsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXBsYW5lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGYiLCAiTTE0NCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDI3LjNjMCA3LjEgLjkgMTQuMSAyLjcgMjAuN0wxOTIgNDgwIDgzLjkgNTA3QzczLjggNTA5LjYgNjQgNTAxLjkgNjQgNDkxLjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDc0LTU5LjIgMC01Ny42LTEyMi4xIDQ4LjhDMTEuNCAzOTUuNCAwIDM4Ny43IDAgMzc2LjRsMC00NGMwLTggMy0xNS42IDguMy0yMS41TDE0NCAxNjEuNiAxNDQgNDh6bTIyNCA4MGwxOTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2MGMwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xNjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjLTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0bDAtMTYwYzAtNDQuMiAzNS44LTgwIDgwLTgwem0wIDE3NmwxOTIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMnptMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTIxNi0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ0hlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oZWFydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGJlIiwgIk0yNzkuNiAzMUMyNjUuNSAxMS41IDI0Mi45IDAgMjE4LjkgMCAxNzcuNSAwIDE0NCAzMy41IDE0NCA3NC45bDAgMi40YzAgNjQuNCA4MiAxMzMuNCAxMjIuMiAxNjMuMyAxMyA5LjcgMzAuNSA5LjcgNDMuNSAwIDQwLjItMzAgMTIyLjItOTguOSAxMjIuMi0xNjMuM2wwLTIuNGMwLTQxLjQtMzMuNS03NC45LTc0LjktNzQuOS0yNCAwLTQ2LjYgMTEuNS02MC43IDMxTDI4OCA0Mi43IDI3OS42IDMxek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhQXJyb3dSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNCwgImFycm93LWxlZnQtcm90YXRlIiwgImFycm93LXJvdGF0ZS1iYWNrIiwgImFycm93LXJvdGF0ZS1iYWNrd2FyZCIsICJ1bmRvIl0sICJmMGUyIiwgIk0yNTYgNjRjLTU2LjggMC0xMDcuOSAyNC43LTE0My4xIDY0bDQ3LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMCA1NC43QzExMC45IDMzLjYgMTc5LjUgMCAyNTYgMCAzOTcuNCAwIDUxMiAxMTQuNiA1MTIgMjU2UzM5Ny40IDUxMiAyNTYgNTEyYy04NyAwLTE2My45LTQzLjQtMjEwLjEtMTA5LjctMTAuMS0xNC41LTYuNi0zNC40IDcuOS00NC42czM0LjQtNi42IDQ0LjYgNy45YzM0LjggNDkuOCA5Mi40IDgyLjMgMTU3LjYgODIuMyAxMDYgMCAxOTItODYgMTkyLTE5MlMzNjIgNjQgMjU2IDY0eiJdCiAgICB9OwogICAgZmFBcnJvd0xlZnRSb3RhdGUgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYUFycm93Um90YXRlQmFja3dhcmQgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhVW5kbyA9IGZhQXJyb3dSb3RhdGVMZWZ0OwogICAgZmFGYWNlQW5ncnkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtYW5ncnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDQsICJhbmdyeSJdLCAiZjU1NiIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMjU2IDM2OGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUFuZ3J5MiA9IGZhRmFjZUFuZ3J5MjsKICAgIGZhQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVyc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkYyIsICJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN1MtMi4zIDI4IDQuMiAzNy42bDExMiAxNjMuMy05OS42IDMyLjNDNi43IDIzNi40IDAgMjQ1LjYgMCAyNTZzNi43IDE5LjYgMTYuNiAyMi44bDEwMy4xIDMzLjQtNTIuOSAxMDAuNmMtNC45IDkuMy0zLjIgMjAuNyA0LjMgMjguMXMxOC44IDkuMiAyOC4xIDQuM2wxMDAuNi01Mi45IDMzLjQgMTAzLjFjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42czE5LjYtNi43IDIyLjgtMTYuNmwzMy40LTEwMy4xIDEwMC42IDUyLjljOS4zIDQuOSAyMC43IDMuMiAyOC4xLTQuM3M5LjItMTguOCA0LjMtMjguMWwtNTIuOS0xMDAuNiAxMDMuMS0zMy40YzkuOS0zLjIgMTYuNi0xMi40IDE2LjYtMjIuOHMtNi43LTE5LjYtMTYuNi0yMi44bC0xMDYuNS0zNC41IDI1LjctNzAuNGMzLjItOC44IDEtMTguNi01LjYtMjUuMnMtMTYuNC04LjgtMjUuMi01LjZsLTcwLjQgMjUuNy0zNC41LTEwNi41QzI3NS42IDYuNyAyNjYuNCAwIDI1NiAwcy0xOS42IDYuNy0yMi44IDE2LjZMMjAwLjkgMTE2LjIgMzcuNiA0LjJ6Il0KICAgIH07CiAgICBmYVogPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMl0sICI1YSIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzMjAgMGMxMi40IDAgMjMuNyA3LjIgMjkgMTguNHMzLjYgMjQuNS00LjQgMzQuMUwxMDAuMyA0MTYgMzUyIDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFCYW5kYWdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbmRhZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NTcsICJiYW5kLWFpZCJdLCAiZjQ2MiIsICJNNDY0IDQxNmw0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00OCAwIDAgMzIwek00MTYgOTZsLTI1NiAwIDAgMzIwIDI1NiAwIDAtMzIwek02NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTMyMC00OCAwek0yMTYgMjA4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIxNiAzMDRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhQmFuZEFpZCA9IGZhQmFuZGFnZTsKICAgIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1NiIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFCdXNTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cy1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU4MWQiLCAiTTQ4MCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC01LjYgMGMtMTMuMiAzNy4zLTQ4LjYgNjQtOTAuNCA2NHMtNzcuMy0yNi43LTkwLjQtNjRsLTEzOS4xIDBjLTEzLjIgMzcuMy00OC43IDY0LTkwLjQgNjRzLTc3LjItMjYuNy05MC40LTY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDQzIDQzIDAgOTYgMEw0ODAgMHpNMTYwIDM2OGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTMyMCAwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnptMC0zMDRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC01My00My05Ni05Ni05NnpNMjQ4IDIyNGwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMDQgMCAwIDE2MHpNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDAgMC0xNjAtMTA0IDB6Il0KICAgIH07CiAgICBmYUJ1Z3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQwIiwgIk00NDcuNSAxNzQuNmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43YzI2LjcgMTMuNSA0Ni4zIDM5LjEgNTEuNCA2OS42bDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMMjk2IDQzMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtMzItMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNS4zIDBjNS4xLTMwLjUgMjQuNy01Ni4xIDUxLjQtNjkuNmwtMjIuOS0yNi43Yy04LjYtMTAuMS03LjUtMjUuMiAyLjYtMzMuOHMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6bS0yNTYtMTkyYzguOC04LjQgMjIuNy04LjkgMzIuMi0uOHMxMSAyMS45IDQuMSAzMS45bC0xLjUgMS45LTIzIDI2LjdDMjMwIDU1LjkgMjQ5LjUgODEuNSAyNTQuNyAxMTJsMjUuMyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgMzIgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjUuMyAwYy03LjYgNDUuNC00Ny4xIDgwLTk0LjcgODBzLTg3LTM0LjYtOTQuNy04MEw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwQzcwLjUgODEuNSA5MCA1NS45IDExNi43IDQyLjRMOTMuOCAxNS42Qzg1LjIgNS42IDg2LjMtOS42IDk2LjQtMTguMnMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6Il0KICAgIH07CiAgICBmYUJlZXJNdWdFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWVyLW11Zy1lbXB0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJiZWVyIl0sICJmMGZjIiwgIk02NCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwyODggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMDguMmMwIDI0LjItMTMuNyA0Ni40LTM1LjQgNTcuMkw0NDggMzcxLjggNDQ4IDM4NGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA4MHpNNDQ4IDMwMC4ybDY0LTMyIDAtMTA4LjItNjQgMCAwIDE0MC4yek0xOTIgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHptODggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4eiJdCiAgICB9OwogICAgZmFCZWVyID0gZmFCZWVyTXVnRW1wdHk7CiAgICBmYVBlcnNvbkNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZSIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhU3RhcGxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFwbGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1YWYiLCAiTTY0MCAyOTkuM0w2NDAgNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMCAwLTQ4LTM1MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExNi42LTMwLjItNS40Yy0xOS42LTMuNS0zMy44LTIwLjUtMzMuOC00MC40IDAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNWMzMi44LTQzLjggODQuNC02OS42IDEzOS4xLTY5LjYgMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRsMC0xNi0zMjAtNTcuMSAwIDczLjEgMzIwIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTEiLCAiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFOYWlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmFpcmEtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMWY2IiwgIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0bDAgMTkyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ0IDg5LjUgMCAxMDcuOCAxNjEuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOVMzODQgNDYyLjEgMzg0IDQ0OGwwLTE0NCAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTkyLTU3LjUgMC0xMzkuOC0yMDkuN3pNMjk0LjUgMzA0bDI1LjUgMCAwIDM4LjMtMjUuNS0zOC4zek0xODUuNSAyNTZsLTU3LjUgMCAwLTg2LjMgNTcuNSA4Ni4zeiJdCiAgICB9OwogICAgZmFXaWZpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpZmkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsid2lmaS0zIiwgIndpZmktc3Ryb25nIl0sICJmMWViIiwgIk0yODggOTZjLTkwLjkgMC0xNzMuMiAzNi0yMzMuNyA5NC42LTEyLjcgMTIuMy0zMyAxMi00NS4yLS43cy0xMi0zMyAuNy00NS4yQzgxLjcgNzQuOSAxNzkuOSAzMiAyODggMzJTNDk0LjMgNzQuOSA1NjYuMyAxNDQuN2MxMi43IDEyLjMgMTMgMzIuNiAuNyA0NS4ycy0zMi42IDEzLTQ1LjIgLjdDNDYxLjIgMTMyIDM3OC45IDk2IDI4OCA5NnpNMjQwIDQzMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xNjggMzI2LjJjLTExLjcgMTMuMy0zMS45IDE0LjUtNDUuMiAyLjhzLTE0LjUtMzEuOS0yLjgtNDUuMkMxNjEgMjM3LjQgMjIxLjEgMjA4IDI4OCAyMDhzMTI3IDI5LjQgMTY4IDc1LjhjMTEuNyAxMy4zIDEwLjQgMzMuNS0yLjggNDUuMnMtMzMuNSAxMC40LTQ1LjItMi44QzM3OC42IDI5Mi45IDMzNS44IDI3MiAyODggMjcycy05MC42IDIwLjktMTIwIDU0LjJ6Il0KICAgIH07CiAgICBmYVdpZmkzID0gZmFXaWZpOwogICAgZmFXaWZpU3Ryb25nID0gZmFXaWZpOwogICAgZmFNb25leUNoZWNrRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWNoZWNrLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1jaGVjay1hbHQiXSwgImY1M2QiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek0yOTYgMjg4bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptLTI0LTg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTE0OCAxNDRjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdDOTQuNSAyNjggNzYgMjQ2LjEgNzYgMjIwLjUgNzYgMTkxLjcgOTkuMiAxNjguMyAxMjggMTY4bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2tBbHQgPSBmYU1vbmV5Q2hlY2tEb2xsYXI7CiAgICBmYUV5ZUxvd1Zpc2lvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleWUtbG93LXZpc2lvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb3ctdmlzaW9uIl0sICJmMmE4IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNODggMTU3LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMzI4LjIgNDY2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw4OCAxNTcuOXpNNDUuNyAyNTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxODEuOSA0NTUuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDUuNyAyNTEuM3oiXQogICAgfTsKICAgIGZhTG93VmlzaW9uID0gZmFFeWVMb3dWaXNpb247CiAgICBmYUNpcmNsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS11cCJdLCAiZjBhYSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE3LTM3N2w4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zOS0zOSAwIDE1MC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTUwLjEtMzkgMzljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODAtODBjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlVXAgPSBmYUNpcmNsZUFycm93VXA7CiAgICBmYUNhbWVyYVJldHJvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYS1yZXRybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0N10sICJmMDgzIiwgIk0wIDQxNmwwLTIwOCAxMzYuMiAwYzEzLjUtMjAuMiAzMi0zNi44IDUzLjctNDhMMCAxNjAgMCAxMjUuN2MwLTM1LjMgMjguNy02NCA2NC02NGwuMSAwQzY1LjMgNDUuMSA3OS4xIDMyIDk2IDMybDMyIDBjMTYuOSAwIDMwLjcgMTMuMSAzMS45IDI5LjdsMzIuMSAwIDUxLjItMjMuOGM4LjQtMy45IDE3LjYtNiAyNi45LTZMNDQ4IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjQtMTkwIDBjMjEuNyAxMS4yIDQwLjIgMjcuOCA1My43IDQ4bDEzNi4yIDAgMCAyMDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMjU2IDE5MmE5Ni4xIDk2LjEgMCAxIDAgMCAxOTIuMSA5Ni4xIDk2LjEgMCAxIDAgMC0xOTIuMXoiXQogICAgfTsKICAgIGZhQ2Fwc3VsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2Fwc3VsZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQ2YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTItOTYgMCAwLTExMnptLTY0IDBsMCAyODhjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmwwLTEwNS44IDExNi4zIDE2OS41YzM1LjUgNTEuNyAxMDUuMyA2NC4zIDE1NiAyOC4xczYzLTEwNy41IDI3LjUtMTU5LjJMNDI3LjMgMTQ1LjNjLTM1LjUtNTEuNy0xMDUuMy02NC4zLTE1Ni0yOC4xLTUuNiA0LTEwLjcgOC40LTE1LjMgMTMuMWwwLTE4LjNDMjU2IDUwLjEgMjA1LjkgMCAxNDQgMFMzMiA1MC4xIDMyIDExMnpNMjk2LjYgMjQwLjJjLTE2LTIzLjMtMTAtNTUuMyAxMS45LTcxIDIxLjItMTUuMSA1MC41LTEwLjMgNjYgMTIuMmw2NyA5Ny42LTc5LjkgNTUuOS02NS05NC44eiJdCiAgICB9OwogICAgZmFQb28gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTY5XSwgImYyZmUiLCAiTTI2OC45IC45Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuNGMyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgNDQuMS0zNS43IDc5LjktNzkuOCA4MEwxNjAgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NCAwIDE5LjEgOC40IDM2LjMgMjEuNyA0OEwxMDQgMjQwYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDIzLjIgMTEgNDMuOCAyOCA1Ny0zNC4xIDUuNy02MCAzNS4zLTYwIDcxIDAgMzkuOCAzMi4yIDcyIDcyIDcybDM2OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyIDAtMzUuNy0yNS45LTY1LjMtNjAtNzEgMTctMTMuMiAyOC0zMy44IDI4LTU3IDAtMzkuOC0zMi4yLTcyLTcyLTcybC0xMy43IDBjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01LjUgMGMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjQgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjctOC4yIDEwLjUtMzkuNSA0NS05My44IDQ1cy04NS42LTM0LjYtOTMuOC00NWMtMS41LTEuOS0yLjItNC4zLTIuMi02LjcgMC02LjggNS41LTEyLjMgMTIuMy0xMi4zbDE2Ny40IDBjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zeiJdCiAgICB9OwogICAgZmFFbGV2YXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2YXRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTZkIiwgIk0yOTIuNy00LjdsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFM0MzguNS0zMiA0MzItMzJMMzA0LTMyYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjR6bS0xNjAtMjIuNmwtNjQgNjRjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRTNzMuNSA2NCA4MCA2NGwxMjggMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtNjQtNjRjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHptOTYgOTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek04MCA0MDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0xOTIgMGMwLTI2LjUgMjEuNS00OCA0OC00OGw2NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6bTMyLTEyOGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFUYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTkxXSwgImYwMmIiLCAiTTMyLjUgOTZsMCAxNDkuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2wxOTIgMTkyYzI1IDI1IDY1LjUgMjUgOTAuNSAwTDQ4My4yIDMzMy4zYzI1LTI1IDI1LTY1LjUgMC05MC41bC0xOTItMTkyQzI3OS4yIDM4LjcgMjYzIDMyIDI0NiAzMkw5Ni41IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NHptMTEyIDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWQiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhRG93bkxvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG93bi1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctYWx0LWRvd24iXSwgImYzMDkiLCAiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzAwLjkgMzUyIDI4OCAzNTJsLTY0IDAgMC0zMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzM2LTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjIgMzk3LjUgOS40IDQwNi42bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdERvd24gPSBmYURvd25Mb25nOwogICAgZmFDb21wYWN0RGlzYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYWN0LWRpc2MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTEsIDEyODE5MiwgMTI4NDQwXSwgImY1MWYiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6bS01Ni0xNmMwLTMyLjQgMTYuMy02Ni42IDQyLjgtOTMuMlMyMDcuNiAxMDQgMjQwIDEwNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDcuOSAwLTkzLjcgMjMuNS0xMjcuMSA1Ni45UzU2IDE5Mi4xIDU2IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZVJvbGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VpdGNhc2Utcm9sbGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWMxIiwgIk0xNDQgMjRjMC00LjQgMy42LTggOC04bDgwIDBjNC40IDAgOCAzLjYgOCA4bDAgNzItOTYgMCAwLTcyek0zMjAgOTZsLTMyIDAgMC03MmMwLTMwLjktMjUuMS01Ni01Ni01NmwtODAgMEMxMjEuMS0zMiA5Ni02LjkgOTYgMjRsMCA3Mi0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODhjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTEyMCAyMDhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvb2tRdXJhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXF1cmFuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInF1cmFuIl0sICJmNjg3IiwgIk02NCA1MTJsMjg4IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMyMGMwLTUzLTQzLTk2LTk2LTk2TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzM2YzAgMjAuOSAxMy40IDM4LjcgMzIgNDUuM0wzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMHpNMzUyIDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDAgMC02NCAyNTYgMHpNMjczLjEgMTQ0LjRjMi41LTYuMSAxMS4yLTYuMSAxMy43IDBsMTAuMyAyNC44IDI2LjggMi4xYzYuNiAuNSA5LjIgOC43IDQuMiAxM0wzMDcuOCAyMDEuOSAzMTQgMjI4YzEuNSA2LjQtNS41IDExLjUtMTEuMSA4LjFsLTIyLjktMTQtMjIuOSAxNGMtNS42IDMuNC0xMi42LTEuNi0xMS4xLTguMWw2LjItMjYuMS0yMC40LTE3LjVjLTUtNC4zLTIuMy0xMi41IDQuMi0xM2wyNi44LTIuMSAxMC4zLTI0Ljh6TTEwMCAxOTJjMC02OC41IDU1LjUtMTI0IDEyNC0xMjQgMjMuOCAwIDQ2LjEgNi43IDY1IDE4LjQgNC44IDIuOSA2LjkgOC44IDUgMTQuMXMtNy4xIDguNi0xMi43IDhjLTMuMS0uMy02LjItLjUtOS40LS41LTQ2LjQgMC04NCAzNy42LTg0IDg0czM3LjYgODQgODQgODRjMy4yIDAgNi4zLS4yIDkuNC0uNSA1LjYtLjYgMTAuOCAyLjcgMTIuNyA4cy0uMyAxMS4yLTUgMTQuMWMtMTguOSAxMS43LTQxLjIgMTguNC02NSAxOC40LTY4LjUgMC0xMjQtNTUuNS0xMjQtMTI0eiJdCiAgICB9OwogICAgZmFRdXJhbiA9IGZhQm9va1F1cmFuOwogICAgZmFQaG9uZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZGQiLCAiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNDEuNSAzNjguNkM4OS4yIDMxMC41IDUxLjYgMjM4LjggMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzEyLjkgMjguNSAyOS42IDU0LjggNDkuNSA3OC41TDUzNS0yNC45em0tMTUwLjQgNTM0Yy02My0xMy40LTEyMS4zLTM5LjgtMTcxLjctNzYuM0wyOTcuOCAzNDhjMTIuMiA4LjIgMjUgMTUuNiAzOC4zIDIyLjJMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNWMtMTcuNiA2NC42LTgwLjIgMTE5LjgtMTU2LjQgMTAzLjd6Il0KICAgIH07CiAgICBmYVJvYWRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY0IiwgIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVNob3BMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3AtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGE1IiwgIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1NS42IDExMS4xYy04LjItMS42LTE2LjYtMi41LTI1LjItMi41LTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBsLTU3LjMgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhSW1hZ2VQb3J0cmFpdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZS1wb3J0cmFpdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJwb3J0cmFpdCJdLCAiZjNlMCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek04MCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTE5MiAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYVBvcnRyYWl0ID0gZmFJbWFnZVBvcnRyYWl0OwogICAgZmFCcmlkZ2VMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2MiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMCAwIDMyLjJjMTMuOCAuNiAyNy4yIDIuOCA0MCA2LjRsMCA1MC43Yy0xNC44LTYtMzEtOS4zLTQ4LTkuMy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLS40IC4zLS43IC42LTEuMSAxLTE3LjMtMjUtNDYuMi00MS4zLTc4LjktNDEuMy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjR6bTQyNCA2OC42bDAtMzYuNi04MCAwIDAgNjQgMTguOCAwYzE4LjItMTIuOCAzOC45LTIyLjIgNjEuMi0yNy40ek0yMTYgOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDBsLTgwIDAgMCA2NCA4MCAwIDAtNjR6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUhhbW1lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1tZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgyOTZdLCAiZjZlMyIsICJNMjQ2LjkgMTguM0wyNzEgMy44YzIxLjYtMTMgNDYuMy0xOS44IDcxLjUtMTkuOCAzNi44IDAgNzIuMiAxNC42IDk4LjIgNDAuN2w2My45IDYzLjljMTUgMTUgMjMuNCAzNS40IDIzLjQgNTYuNmwwIDMwLjkgMTkuNyAxOS43IDAgMGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHMxNS42IDQwLjkgMCA1Ni42bC02NCA2NGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZMNDY0IDI0MCA0MzMuMSAyNDBjLTIxLjIgMC00MS42LTguNC01Ni42LTIzLjRsLTQ5LjEtNDkuMWMtMTUtMTUtMjMuNC0zNS40LTIzLjQtNTYuNmwwLTEyLjdjMC0xMS4yLTUuOS0yMS43LTE1LjUtMjcuNGwtNDEuNi0yNWMtMTAuNC02LjItMTAuNC0yMS4yIDAtMjcuNHpNNTAuNyA0MDIuN2wyMjIuMS0yMjIuMSA5MC41IDkwLjUtMjIyLjEgMjIyLjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNXoiXQogICAgfTsKICAgIGZhQXJyb3dVcDE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTEtOSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAiXSwgImYxNjMiLCAiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNNDE4LjcgMzhjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMzY1LjEgNDMwLjZjLTkuNiAxNC44LTUuNCAzNC42IDkuNCA0NC4zczM0LjYgNS40IDQ0LjMtOS40bDQyLjEtNjQuOWMxMi40LTE5LjIgMTkuMS00MS42IDE5LjEtNjQuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDM2LjEgMjMuOSA2Ni43IDU2LjggNzYuNmwtMTEuNyAxOHpNMzc2IDMzNmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY1VwID0gZmFBcnJvd1VwMTk7CiAgICBmYUNoZXNzS25pZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1rbmlnaHQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIyXSwgImY0NDEiLCAiTTE5Mi0zMmMxMDYgMCAxOTIgODYgMTkyIDE5MmwwIDEzMy41YzAgMTctNi44IDMzLjItMTguNyA0NS4yTDMyMCAzODQgMzcwLjggNDM0LjdjOC41IDguNSAxMy4yIDIwIDEzLjIgMzIgMCAyNS0yMC4zIDQ1LjItNDUuMiA0NS4zTDQ1LjMgNTEyYy0yNSAwLTQ1LjItMjAuMy00NS4yLTQ1LjMgMC0xMiA0LjgtMjMuNSAxMy4yLTMyTDY0IDM4NCA2NCAzNDkuNGMwLTE4LjcgOC4yLTM2LjQgMjIuMy00OC42bDg5LjctNzYuOC00OCAwLTEyLjEgMTIuMWMtMTIuNyAxMi43LTMwIDE5LjktNDggMTkuOS0zNy41IDAtNjcuOS0zMC40LTY3LjktNjcuOWwwLTguN2MwLTIyLjggOC4yLTQ0LjkgMjMuMS02Mi4zTDk2IDMyIDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNMTYwIDcyYTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHoiXQogICAgfTsKICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1mbG9vZC13YXRlci1jaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZiIsICJNMjg4LjUgMTEyYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTE0MS4yIDQ0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNTYgNTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTU2IDU2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDI4LjctMjguNy04OS40IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODkuNCAwLTI4LjctMjguN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6TTMzNi41IDExMmMwIDcxLjEtMzguNiAxMzMuMS05NiAxNjYuM2wwIDEyLjhjMjIuMSA0LjUgNDMuNCAxMy45IDYyLjQgMjguMiAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDYtNC41IDEyLjYtOCAxOS4zLTEwLjRsMC0xMTUuMiA0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0w0NDQuNSAxMC41QzQzNi44IDMuNyA0MjYuOCAwIDQxNi41IDBzLTIwLjMgMy43LTI4IDEwLjVMMzI5LjkgNjEuOGM0LjMgMTYgNi42IDMyLjggNi42IDUwLjJ6bTMyIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc1LjEgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCAzOTEuOCAyNjYgMzczLjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCA0ODcuOCAyNjYgNDY5LjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rIl0sICJmMDhlIiwgIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4Mi43IDAtMjAxLjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDQ4IDEwOS4zIDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2TDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgOTZ6Il0KICAgIH07CiAgICBmYUV4dGVybmFsTGluayA9IGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tdXAtYWNyb3NzLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRhZiIsICJNMjY1LjQgMTA1LjRsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTQxLjQtNDEuNCAwIDExNC43IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgMTE0LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgNDAyLjcgOTYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTExNC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6TTQxNiAzMzZsMCAxNDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQgNjQgMHpNOTYgMTc2TDk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDQtNjQgMHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5CZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgImdyaW4tYmVhbSJdLCAiZjU4MiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW0yID0gZmFGYWNlR3JpbkJlYW0yOwogICAgZmFSZWN0YW5nbGVBZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYWQiXSwgImY2NDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMTg0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0LTcuMSAwLTEzLjUtMy4xLTE3LjktOC0xMC4yIDUuMS0yMS44IDgtMzQuMSA4LTQyIDAtNzYtMzQtNzYtNzZzMzQtNzYgNzYtNzZjOS45IDAgMTkuMyAxLjkgMjggNS4zbDAtMjEuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em0tNDggOTJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMTYwIDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIgNDggMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMHptMzIgOTZsLTQ4IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwNGMwLTM1LjMgMjguNy02NCA2NC02NGwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjR6Il0KICAgIH07CiAgICBmYUFkID0gZmFSZWN0YW5nbGVBZDsKICAgIGZhQm9va1RhbmFraCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXRhbmFraCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YW5ha2giXSwgImY4MjciLCAiTTM1MiA1MTJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjYuN0MxMy40IDM3NC43IDAgMzU2LjkgMCAzMzZMMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzUyIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyMGMwIDUzLTQzIDk2LTk2IDk2em0zMi05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjU2IDAgMCA2NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTEzLjkgMjI5Yy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yQzIzMy42IDY2LjYgMjI5IDY0IDIyNCA2NHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXQogICAgfTsKICAgIGZhVGFuYWtoID0gZmFCb29rVGFuYWtoOwogICAgZmFIb3RUdWJQZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG90LXR1Yi1wZXJzb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaG90LXR1YiJdLCAiZjU5MyIsICJNMjQwIDQwYzAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMjAzLjUgOTMuMSAxOTIgNjcuMiAxOTIgNDAgMTkyIDI2LjcgMjAyLjcgMTYgMjE2IDE2czI0IDEwLjcgMjQgMjR6TTAgMzM2bDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkuNyAwYzguMSAwIDE2LjIgMS42IDIzLjggNC42bDEzNy4xIDU0LjhjNy42IDMgMTUuNiA0LjYgMjMuOCA0LjZMMzg0IDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzM2em05Ni0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE1MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MHptMTA0LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzI4IDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMzE1LjUgOTMuMSAzMDQgNjcuMiAzMDQgNDAgMzA0IDI2LjcgMzE0LjcgMTYgMzI4IDE2ek02NCA0MGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhSG90VHViID0gZmFIb3RUdWJQZXJzb247CiAgICBmYUZpbGVIYWxmRGFzaGVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaGFsZi1kYXNoZWQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTY5OCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNTYgMzg0IDAgMC0xNDkuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNMCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHpNNjQgNTEybDAtNjQtNjQgMGMwIDM1LjMgMjguNyA2NCA2NCA2NHptMzIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwtNjQgMCAwIDY0em02NC0xNjBsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il0KICAgIH07CiAgICBmYU91dGRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib3V0ZGVudCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJkZWRlbnQiXSwgImYwM2IiLCAiTS40IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMEMxNC44IDk2IC40IDgxLjcgLjQgNjR6bTE5MiAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgOTZsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0uNCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNLjcgMjY4LjZjLTguMi02LjQtOC4yLTE4LjkgMC0yNS4zbDEwMS45LTc5LjNjMTAuNS04LjIgMjUuOC0uNyAyNS44IDEyLjZsMCAxNTguNmMwIDEzLjMtMTUuMyAyMC44LTI1LjggMTIuNkwuNyAyNjguNnoiXQogICAgfTsKICAgIGZhRGVkZW50ID0gZmFPdXRkZW50OwogICAgZmFIYW5kUGVhY2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcGVhY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk2XSwgImYyNWIiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02MS4zIDUxLjJMMTQzLjkgMjQwIDc0LjEgMjQwIDIuNyA3Ni44Qy00LjQgNjAuNiAzIDQxLjggMTkuMiAzNC43UzU0LjIgMzUgNjEuMyA1MS4yem0yNyAyMjEuM2wtLjItLjUgOTUuOSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDY5LjUgNDUzLjVDNDUuNSA0MjkuNSAzMiAzOTYuOSAzMiAzNjNsMC0yN2MwLTMyLjcgMjQuNi01OS43IDU2LjMtNjMuNXoiXQogICAgfTsKICAgIGZhSGVhZFNpZGVWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtdmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2NCIsICJNMzI5LjcgNDQ4Yy01LjEgMC05LjcgMy43LTkuNyA4LjhsMCA3LjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTYzLjZjMC0xMi42LTUuMS0yNC41LTEzLjEtMzQuMi0zMS44LTM4LjctNTAuOS04OC4yLTUwLjktMTQyLjIgMC0xMjMuNyAxMDAuMy0yMjQgMjI0LTIyNCAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDM1LjggNDIuOWM3IDguNCAxMC45IDE5LjEgMTAuOSAzMC4xIDAgMjUuOS0yMSA0Ny00NyA0N2wtMSAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzguMyAwek0yMjQgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMjIuOS0yNy43IDM0LjQtNDMuOSAxOC4yLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMTYuMiAxNi4yIDQuNyA0My45LTE4LjIgNDMuOS0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0YzIyLjkgMCAzNC40IDI3LjcgMTguMiA0My45LTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMxNi4yLTE2LjIgNDMuOS00LjcgNDMuOSAxOC4yIDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yMi45IDI3LjctMzQuNCA0My45LTE4LjIgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0xNi4yLTE2LjItNC43LTQzLjkgMTguMi00My45IDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yMi45IDAtMzQuNC0yNy43LTE4LjItNDMuOSA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0xNi4yIDE2LjItNDMuOSA0LjctNDMuOS0xOC4yIDAtMTMuMy0xMC43LTI0LTI0LTI0em0tMzIgODhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFDb21wYXNzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgImYxNGUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhUGVuTmliID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1uaWIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDAwMV0sICJmNWFkIiwgIk0zNjguNSAxOC4zbC01MC4xIDUwLjEgMTI1LjMgMTI1LjMgNTAuMS01MC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ0Ny43IDE4LjNjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwek0yNzkuMyA5Ny4ybC0uNSAuMS0xNDQuMSA0My4yYy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0yLjkgOC43LTEuOSAxOC4yIDIuNSAyNkwxNjEuNyAzMTYuNGMtMS4xLTQtMS42LTguMS0xLjYtMTIuNCAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDhjLTQuMyAwLTguNS0uNi0xMi40LTEuNkw0MC4zIDUwNS43YzcuOCA0LjQgMTcuMiA1LjQgMjYgMi41bDI2NC4zLTg4LjZjMTkuNy02LjYgMzUtMjIuNCA0MS00Mi4zbDQzLjItMTQ0LjEgLjEtLjUtMTM1LjUtMTM1LjV6Il0KICAgIH07CiAgICBmYVRlbnRBcnJvd3NEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3dzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4MSIsICJNMTg1LjUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnptMjQ4IDcybDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdCiAgICB9OwogICAgZmFGb3J3YXJkRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkLWZhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MTk3LCAiZmFzdC1mb3J3YXJkIl0sICJmMDUwIiwgIk0xOS44IDQ3Ny42YzEyIDUgMjUuNyAyLjIgMzQuOS02LjlMMjI0IDMwMS4zIDIyNCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOUw0NDggMzAxLjMgNDQ4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTQ2LjctMTY5LjQtMTY5LjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzIyNCA1MS4xIDIyNCA2NEwyMjQgMjEwLjcgNTQuNiA0MS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMwIDUxLjEgMCA2NEwwIDQ0OGMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42eiJdCiAgICB9OwogICAgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7CiAgICBmYUNyb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTI1IiwgIk00NDggMTA5LjNsNTQuNi01NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQwMi43IDY0IDE3NiA2NCAxNzYgMTI4IDMzOC43IDEyOCAxMjggMzM4LjcgMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMi0zMiAwQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwOCAwIDAtNjQtMTYyLjcgMCAyMTAuNy0yMTAuNyAwIDMwNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjc0Ljd6Il0KICAgIH07CiAgICBmYVdoaXNrZXlHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aGlza2V5LWdsYXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5MzQ3LCAiZ2xhc3Mtd2hpc2tleSJdLCAiZjdhMCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwxOTIgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnpNNjQgMjU2bDAtMTYwIDMyMCAwIDAgMTYwLTMyMCAweiJdCiAgICB9OwogICAgZmFHbGFzc1doaXNrZXkgPSBmYVdoaXNrZXlHbGFzczsKICAgIGZhU3F1YXJlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sICJmMGM4IiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsICJncmluIl0sICJmNTgwIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbjIgPSBmYUZhY2VHcmluMjsKICAgIGZhRmlsZUNvbnRyYWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29udHJhY3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU2YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNzAuMyAxNjBjLTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMNjkuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40eiJdCiAgICB9OwogICAgZmFBbmdsZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk2M10sICJmMTA2IiwgIk0xNjkuNCAxMzcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDE5MiAyMDUuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYweiJdCiAgICB9OwogICAgZmFGYWNlU21pbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NzgsICJzbWlsZSJdLCAiZjExOCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTbWlsZTIgPSBmYUZhY2VTbWlsZTI7CiAgICBmYVBlcnNvbkRyZXNzQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyZXNzLWJ1cnN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDQiLCAiTTIwOCA0MC4xYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNOCAxNDQuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptOTIuNSAxNDEuNGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMjQ2LjIgMzg0bDI1LjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAyNS44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTQzLTEyOSA0OC4zIDY1LjFjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDNDM0IDEzMiAzOTQuMyAxMTIgMzUyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ4LjMtNjUuMS00MyAxMjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMXoiXQogICAgfTsKICAgIGZhRGl2aWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpdmlkZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMTM1LCAyNDddLCAiZjUyOSIsICJNMjI0IDQ4YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjggNDA4YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHoiXQogICAgfTsKICAgIGZhQ29kZUZvcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1mb3JrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxM2IiLCAiTTgwIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIuN2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0zMiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNsMC03MC43LTMyIDBDOTguMSAyODggNDggMjM3LjkgNDggMTc2bDAtMjIuN0MxOS43IDE0MSAwIDExMi44IDAgODAgMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSG91c2VGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZCIsICJNNDcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSA1OS4xbDEwMC41IDk2LjkgMCAzNTYtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjI4LjUgNTkuMUMyMzUuOSA1MiAyNDUuNyA0OCAyNTYgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjMyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ29sdW1ucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jb2x1bW5zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhbmsiLCAiaW5zdGl0dXRpb24iLCAibXVzZXVtIiwgInVuaXZlcnNpdHkiXSwgImYxOWMiLCAiTTI3MS45IDIwLjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4Yy0xMi42IDcuMi0xOC44IDIyLTE1LjEgMzZTMTcuNSAyMDggMzIgMjA4bDMyIDAgMCAyMDggMCAwLTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMDggMzIgMGMxNC41IDAgMjcuMi05LjggMzAuOS0yMy44cy0yLjUtMjguOC0xNS4xLTM2bC0yMjQtMTI4ek00MDAgMjA4bDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHpNMjU2IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmFuayA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFJbnN0aXR1dGlvbiA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhVW5pdmVyc2l0eSA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFSdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjkiLCAiTTI0IDY0bDU2IDAgMCAzODQtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtMzItOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBDMTAuNyAxMTIgMCAxMDEuMyAwIDg4UzEwLjcgNjQgMjQgNjR6bTEwNCAwbDMyMCAwIDAgMzg0LTMyMCAwIDAtMzg0ek01NzYgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAzMiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwLTM4NCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFDb2RlTWVyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1tZXJnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzg3IiwgIk04MCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyLjQgOTcuMmMyOC0xMi40IDQ3LjYtNDAuNSA0Ny42LTczLjIgMC00NC4yLTM1LjgtODAtODAtODBTMCAzNS44IDAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zQzE5LjcgMzcxIDAgMzk5LjIgMCA0MzIgMCA0NzYuMiAzNS44IDUxMiA4MCA1MTJzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtODYuNmMyNi43IDIwLjEgNjAgMzIgOTYgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDggNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhMMjA4IDI0MGMtNDkuOSAwLTkxLTM4LjEtOTUuNi04Ni44ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zNDQgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlVHN1bmFtaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS10c3VuYW1pIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTUiLCAiTTI4OCAxNkMxNTUuNSAxNiA0OCAxMjMuNSA0OCAyNTZTMTU1LjUgNDk2IDI4OCA0OTZjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0xNC41IDEwLjktMzIuNCAxOS43LTQ5LjUgMjUuOC0xNi44IDYtMzQuOSAxMC4xLTQ5LjkgMTAuMWwtLjEgMEMxMjguOSA1NDMuOSAwIDQxNSAwIDI1NiAwIDk2LjkgMTI4LjktMzIgMjg4LTMyIDMwMS4zLTMyIDMxMi0yMS4zIDMxMi04cy0xMC43IDI0LTI0IDI0em00NC44IDE2Ni40bDk2LTcyYzExLjQtOC41IDI3LjEtOC41IDM4LjUgMGw5NS41IDcyYzggNiAxMi43IDE1LjUgMTIuNyAyNS41bC4zIDEyMS41Yy0yLjIgMS4zLTQuMyAyLjYtNi40IDQuMi00LjMgMy4xLTguNyAuOC0xMy4yLTEuNWwtMS4yLS42LS43LS4zYy01LjQtMi43LTExLjctNi42LTE4LjktMTEuNy0yOS41LTIxLjEtNjQuMy0zMS42LTk5LjEtMzEuNC0zNC4xIC4yLTY4LjEgMTAuNy05NyAzMS40LTcuOCA1LjYtMTMuOCA5LjMtMTkuMyAxMS4yTDMyMCAyMDhjMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNnptNTQuNiAyMjkuN2MtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjEtMTA2IDAtMTkyLTg2LTE5Mi0xOTJTMTgyIDY0IDI4OCA2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NGM3LjQgMCAxOS43LTIuMyAzMy43LTcuMyAxMy44LTQuOSAyNy4xLTExLjcgMzYuNy0xOC45IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNS40IDExLjYgMzUuMyAyMS4xIDU1IDI0LjQgMTkuNSAzLjMgMzcgLjQgNTEuMS0xMC4yIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjcuMyAyMC41LTU5LjIgMjQtODcuOSAxOS4yLTI4LjUtNC44LTU1LjQtMTgtNzUuOS0zMy40LTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWNoYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjIiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHptLTMxMiA4bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NmwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MCA2NGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhVW1icmVsbGEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW1icmVsbGEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBlOSIsICJNMjU2LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMmMxMjYuMyAxNS43IDIyNCAxMjMuNSAyMjQgMjU0IDAgMy44LS4xIDcuNS0uMiAxMS4zLS4zIDYuOS01IDEyLjgtMTEuNyAxNC43cy0xMy44LS43LTE3LjYtNi41Yy0xNC40LTIxLjQtMzguOC0zNS41LTY2LjUtMzUuNS0yOS4zIDAtNTQuOSAxNS43LTY4LjkgMzkuMy0yLjcgNC42LTcuNiA3LjYtMTMgNy44cy0xMC41LTIuMi0xMy43LTYuNWMtMTQuNi0xOS44LTM4LTMyLjYtNjQuNS0zMi42cy00OS45IDEyLjgtNjQuNSAzMi42Yy0zLjIgNC4zLTguMyA2LjgtMTMuNyA2LjVzLTEwLjItMy4yLTEzLTcuOGMtMTQtMjMuNi0zOS42LTM5LjMtNjguOS0zOS4zLTI3LjcgMC01Mi4xIDE0LjEtNjYuNSAzNS41LTMuOSA1LjctMTEgOC40LTE3LjYgNi41Uy41IDI3NC4yIC4yIDI2Ny4zQy4xIDI2My41IDAgMjU5LjggMCAyNTYgMCAxMjUuNSA5Ny43IDE3LjcgMjI0IDJsMC0yYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAzNjBsMCAxMDIuNmMwIDQ1LTM2LjUgODEuNC04MS40IDgxLjQtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjYgOS42IDAgMTcuNC03LjggMTcuNC0xNy40TDIyNCAzMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhSGlsbFJvY2tzbGlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWxsLXJvY2tzbGlkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTA4IiwgIk0yNTIuNCAxMDMuOGwyNyA0OGMyLjggNSA4LjIgOC4yIDEzLjkgOC4ybDUzLjMgMGM1LjggMCAxMS4xLTMuMSAxMy45LTguMmwyNy00OGMyLjctNC45IDIuNy0xMC44IDAtMTUuN2wtMjctNDhjLTIuOC01LTguMi04LjItMTMuOS04LjJsLTUzLjMgMGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNMMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMzE2LjcgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM0w2OC4zIDg3ek01MDQuMiA0MDMuNmM0LjkgMi43IDEwLjggMi43IDE1LjcgMGw0OC0yN2M1LTIuOCA4LjItOC4yIDguMi0xMy45bDAtNTMuM2MwLTUuOC0zLjEtMTEuMS04LjItMTMuOWwtNDgtMjdjLTQuOS0yLjctMTAuOC0yLjctMTUuNyAwbC00OCAyN2MtNSAyLjgtOC4yIDguMi04LjIgMTMuOWwwIDUzLjNjMCA1LjggMy4xIDExLjEgOC4yIDEzLjlsNDggMjd6TTE5MiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhVXNlclNlY3JldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXNlY3JldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODM3M10sICJmMjFiIiwgIk0xNzEtMTZjLTM2LjQgMC01Ny44IDU4LjMtNjguMyAxMTJMNzIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDMyYzAgMTcgMy4zIDMzLjIgOS4zIDQ4bC05LjMgMCAwIDAtMjAuNSAwYy0xNS4yIDAtMjcuNSAxMi4zLTI3LjUgMjcuNSAwIDMgLjUgNS45IDEuNCA4LjdsMjguOSA4Ni42QzQwLjIgMzc5LjYgMTYgNDI4LjEgMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTU0LjItMjQuMi0xMDIuNy02Mi4zLTEzNS40bDI4LjktODYuNmMuOS0yLjggMS40LTUuNyAxLjQtOC43IDAtMTUuMi0xMi4zLTI3LjUtMjcuNS0yNy41bC0yMC41IDAgMCAwLTkuMyAwYzYtMTQuOCA5LjMtMzEgOS4zLTQ4bDAtMzIgMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzAuNyAwYy0xMC40LTUzLjctMzEuOS0xMTItNjguMy0xMTItOS42IDAtMTkgMy45LTI3LjUgOC4yLTguMiA0LjEtMTguNCA3LjgtMjUuNSA3LjhzLTE3LjMtMy43LTI1LjUtNy44QzE5MC0xMi4xIDE4MC42LTE2IDE3MS0xNnptOTMuNyA0ODQuNGwtMjQuOC03MC45IDI3LjktMzIuNWMyLjctMy4yIDQuMi03LjIgNC4yLTExLjQgMC05LjctNy44LTE3LjUtMTcuNS0xNy41bC02MSAwYy05LjcgMC0xNy41IDcuOC0xNy41IDE3LjUgMCA0LjIgMS41IDguMiA0LjIgMTEuNGwyNy45IDMyLjUtMjQuOCA3MC45LTU3LTE4MC40IDM1LjcgMGMxOC40IDEwLjIgMzkuNSAxNiA2MiAxNnM0My42LTUuOCA2Mi0xNmwzNS43IDAtNTcgMTgwLjR6TTIyNCAyNTZjLTM0LjcgMC02NC4yLTIyLjEtNzUuMy01MyA1LjcgMy4yIDEyLjMgNSAxOS4zIDVsMTIuNCAwYzE2LjUgMCAzMS4xLTEwLjYgMzYuMy0yNi4yIDIuMy03IDEyLjItNyAxNC41IDAgNS4yIDE1LjYgMTkuOSAyNi4yIDM2LjMgMjYuMmwxMi40IDBjNyAwIDEzLjYtMS44IDE5LjMtNS0xMS4xIDMwLjktNDAuNiA1My03NS4zIDUzeiJdCiAgICB9OwogICAgZmFQYWdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sICJmODE1IiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTEyOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJyaWVmY2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxODhdLCAiZjBiMSIsICJNMjAwIDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwLTgwIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwbDAgOTYgNTEyIDAgMC05NmMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNTEyIDMwNGwtMTkyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTExMnoiXQogICAgfTsKICAgIGZhVHJvd2VsQnJpY2tzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyb3dlbC1icmlja3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4YSIsICJNMjI0IDMyYzAtMTEuNS02LjItMjIuMi0xNi4yLTI3LjhzLTIyLjMtNS41LTMyLjIgLjRsLTE2MCA5NkM1LjkgMTA2LjMgMCAxMTYuOCAwIDEyOHM1LjkgMjEuNyAxNS41IDI3LjRsMTYwIDk2YzkuOSA1LjkgMjIuMiA2LjEgMzIuMiAuNFMyMjQgMjM1LjUgMjI0IDIyNGwwLTY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNTYgMCAwLTY0em05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDB6TTAgNDE2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMjI0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTI1NiAweiJdCiAgICB9OwogICAgZmFTb2NrcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2NrcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxMF0sICJmNjk2IiwgIk0yNTIuOCAwTDE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDExMiAwIDAtMTZjMC0xNy41IDQuNy0zMy45IDEyLjgtNDh6TTEyOCAxMTJsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMTUuNCAwIDMwLjUtMy43IDQ0LTEwLjctMTcuNi0yMy45LTI4LTUzLjQtMjgtODUuMyAwLTQ1LjMgMjEuMy04OCA1Ny42LTExNS4ybDY0LTQ4YzQtMyA2LjQtNy44IDYuNC0xMi44bDAtMTI4LTExMiAwem0xNjAgMGwwIDEyOGMwIDIwLjEtOS41IDM5LjEtMjUuNiA1MS4ybC02NCA0OGMtMjQuMiAxOC4xLTM4LjQgNDYuNi0zOC40IDc2LjggMCA1MyA0MyA5NiA5NiA5NiAyMC44IDAgNDEtNi43IDU3LjYtMTkuMmwxMTUuMi04Ni40QzQ2MSAzODIuMiA0ODAgMzQ0LjMgNDgwIDMwNGwwLTE5Mi0xOTIgMHpNNDgwIDY0bDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYgMTkyIDB6Il0KICAgIH07CiAgICBmYVQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExNl0sICI1NCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDEyOCAwIDAgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYU1pY3JvY2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb2NoaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkYiIsICJNMTc2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA1NiAwIDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC01NiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMGMwLTM1LjMtMjguNy02NC02NC02NGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwek0xNjAgMTI4bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2IDQ4bDAgMTYwIDE2MCAwIDAtMTYwLTE2MCAweiJdCiAgICB9OwogICAgZmFUcnVja01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NywgImFtYnVsYW5jZSJdLCAiZjBmOSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTc2IDEzNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQW1idWxhbmNlID0gZmFUcnVja01lZGljYWw7CiAgICBmYU9tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9tIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzI5XSwgImY2NzkiLCAiTTM4OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGwxNiAxNmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtMTYgMTZjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC0xNi0xNmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZsMTYtMTZ6TTE3NiAxNjBjLTEwLjggMC0yMC44IDMuNi0yOC44IDkuNi0xNC4xIDEwLjYtMzQuMiA3LjgtNDQuOC02LjRzLTcuOC0zNC4yIDYuNC00NC44YzE4LjctMTQuMSA0Mi0yMi40IDY3LjItMjIuNCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMiAwIDE3LjItMy45IDMzLjUtMTAuOCA0OGw0OS43IDBjMTIuNyAwIDI0LjktNSAzMy45LTE0LjFsMjAuNy0yMC43YzE4LjctMTguNyA0NC4xLTI5LjMgNzAuNi0yOS4zIDU1LjIgMCA5OS45IDQ0LjcgOTkuOSA5OS45bDAgOTYuMWMwIDU1LjItNDQuOCAxMDAtMTAwIDEwMFMzNTIgNDQzLjIgMzUyIDM4OGwwLTRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDRjMCAxOS45IDE2LjEgMzYgMzYgMzZzMzYtMTYuMSAzNi0zNmwwLTk2LjFjMC0xOS44LTE2LjEtMzUuOS0zNS45LTM1LjktOS41IDAtMTguNiAzLjgtMjUuNCAxMC41bC0yMC43IDIwLjdjLTIxIDIxLTQ5LjQgMzIuOC03OS4xIDMyLjhsLTI2LjggMGMxMi42IDE5LjYgMTkuOSA0Mi44IDE5LjkgNjggMCA3NS4yLTY1IDEzMi0xNDAgMTMyUzQwIDQ2My4yIDQwIDM4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgMzUuMyAzMS43IDY4IDc2IDY4czc2LTMyLjcgNzYtNjgtMzEuNy02OC03Ni02OGwtMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4ek0zMzcuMSA2MC4xYy0xMS0xMy44LTMxLjEtMTYuMi00NS01LjJzLTE2LjIgMzEuMS01LjIgNDVDMzEyLjYgMTMyLjIgMzU0LjQgMTUyIDQwMCAxNTJzODcuNC0xOS44IDExMy4xLTUyLjFjMTEtMTMuOCA4LjctMzQtNS4yLTQ1cy0zNC04LjctNDUgNS4yQzQ1MC4zIDc2IDQyNy41IDg4IDQwMCA4OHMtNTAuMy0xMi02Mi45LTI3Ljl6Il0KICAgIH07CiAgICBmYU1vc3F1aXRvTmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1aXRvLW5ldCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJjIiwgIk01NzYgMzUyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDQ4IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCAxNi0uMSAyLjVDNTk4LjYgNTY2LjYgNTg4LjQgNTc2IDU3NiA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtNDggMCAwIDE2LS4xIDIuNUM1MDIuNiA1NjYuNiA0OTIuNCA1NzYgNDgwIDU3NnMtMjIuNi05LjQtMjMuOS0yMS41bC0uMS0yLjUgMC0xNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC00OC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgNDggMCAwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00MjkuOSAxNi4zYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCAzLjktLjQgNy43LS45IDExLjUtNy4zLTMuNS0xNS4zLTUuOC0yMy44LTYuN0w1NzYgMzA0Yy0xOC41IDAtMzUuMyA3LTQ4IDE4LjQtMTEtOS45LTI1LjEtMTYuNS00MC42LTE4LjFMNDgwIDMwNGMtMzAuMyAwLTU2LjEgMTguNy02Ni44IDQ1LjItMTIuNSA1LTIzLjIgMTMuNC0zMS4xIDI0bC0zMC4yLTQwLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE2LjYgMC0zMC4yLTEyLjYtMzEuOC0yOC43bC0uMi0zLjMgMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zLTEwLjMtNi44LTEzLjctMjAuNS04LjMtMzEuNWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC43LTM4LjMtMi40LTIuNGMtNS4yLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjItMi4xYy01LjctMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44IC4yLTMuMmMxLjEtMTAuNCA3LjItMTkuNCAxNS44LTI0LjRsMC02MC41IC4zLTMuMmMxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjggNy43IDAgMTQuMiA1LjUgMTUuNyAxMi44bC4zIDMuMiAwIDYwLjVjOC43IDUgMTQuOCAxNCAxNS44IDI0LjRsLjIgMy4yIDAgMjguOSA1My40LTQ1LjctMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMnpNNTA0IDQ4OGw0OCAwIDAtNDgtNDggMCAwIDQ4eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uLWJvdHRsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDg1IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVVzZXJzR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1nZWFyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXJzLWNvZyJdLCAiZjUwOSIsICJNMzIwIDIyNGExMDQgMTA0IDAgMSAwIDAtMjA4IDEwNCAxMDQgMCAxIDAgMCAyMDh6TTk2IDIzMmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHpNMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjQtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjh6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwek0xNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTU2LjggMGMtNy4xLTIxLjYtNi4zLTQ0LjQgMTAuNy02NC0xNC0xNi4yLTIwLjUtMzkuNy0xMS40LTYzLjMgNi42LTE3LjEgMTUuOS0zMy4xIDI3LjQtNDcuMyA1LjQtNi42IDExLjYtMTEuNyAxOC4zLTE1LjQtMjIuMS0xMS41LTQ3LjItMTgtNzMuOC0xOC04OC40IDAtMTYwIDcxLjYtMTYwIDE2MHptNDY0LjYtNDQuMWM2LjMtMy42IDkuNS0xMS4xIDYuOC0xOC00LjgtMTIuNC0xMS41LTI0LjEtMTkuOS0zNC40LTQuNi01LjctMTIuNy02LjctMTktMy0yMS44IDEyLjYtNDguNi0yLjgtNDguNi0yOC4xIDAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOS0xMi45LTItMjYuOC0yLTM5LjcgMC03LjIgMS4xLTEyLjEgNy42LTEyLjEgMTQuOSAwIDI1LjItMjYuOCA0MC43LTQ4LjYgMjguMS02LjMtMy42LTE0LjQtMi42LTE5IDMtOC40IDEwLjMtMTUuMSAyMi0xOS45IDM0LjQtMi42IDYuOCAuNSAxNC4zIDYuOCAxNy45IDIxLjkgMTIuNiAyMS45IDQzLjUgMCA1Ni4yLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjkgNC44IDEyLjQgMTEuNSAyNC4xIDE5LjkgMzQuNCA0LjYgNS43IDEyLjcgNi43IDE5IDMgMjEuOC0xMi42IDQ4LjYgMi45IDQ4LjYgMjguMSAwIDcuMyA0LjkgMTMuOCAxMi4xIDE0LjkgMTIuOSAyIDI2LjggMiAzOS43IDAgNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0LjkgMC0yNS4yIDI2LjgtNDAuNyA0OC42LTI4LjEgNi4zIDMuNiAxNC40IDIuNiAxOS0zIDguNC0xMC4zIDE1LjEtMjIgMTkuOS0zNC40IDIuNi02LjgtLjUtMTQuMy02LjgtMTcuOS0yMS45LTEyLjYtMjEuOS00My41IDAtNTYuMnpNNDcyIDQxNmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdCiAgICB9OwogICAgZmFVc2Vyc0NvZyA9IGZhVXNlcnNHZWFyOwogICAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2NSIsICJNMjg4IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjUgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OWMzNS4yLTM5LjkgODYuNy02NSAxNDQtNjUgOSAwIDE3LjggLjYgMjYuNSAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFQYXVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXVzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDhdLCAiZjA0YyIsICJNNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyem0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzNTJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHoiXQogICAgfTsKICAgIGZhU3RhZmZTbmFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFmZi1zbmFrZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJyb2QtYXNjbGVwaXVzIiwgInJvZC1zbmFrZSIsICJzdGFmZi1hZXNjdWxhcGl1cyJdLCAiZTU3OSIsICJNMTkyIDMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDY0IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTE2IDAgMC02NCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAgMTkyIDMyIDBjNTMgMCA5NiA0MyA5NiA5NiAwIDQ3LjYtMzQuNiA4Ny4xLTgwIDk0LjdsMC02N2M5LjYtNS41IDE2LTE1LjkgMTYtMjcuNyAwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTY0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Ny42IDM0LjYtODcuMSA4MC05NC43bDAgNjdjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43IDAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMC0xOTItNzIuNiAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMybC0xNiAwQzIxLjUgMTI4IDAgMTA2LjUgMCA4MFMyMS41IDMyIDQ4IDMybDE0NCAweiJdCiAgICB9OwogICAgZmFSb2RBc2NsZXBpdXMgPSBmYVN0YWZmU25ha2U7CiAgICBmYVJvZFNuYWtlID0gZmFTdGFmZlNuYWtlOwogICAgZmFTdGFmZkFlc2N1bGFwaXVzID0gZmFTdGFmZlNuYWtlOwogICAgZmFQaWdneUJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGlnZ3ktYmFuayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGQzIiwgIk0yODgtMzJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6TTQ4IDMwNGMwLTcwLjEgNDctMTMxLjQgMTE3LjEtMTY0LjkgMjUuMyA0MS4zIDcwLjkgNjguOSAxMjIuOSA2OC45IDU1LjcgMCAxMDQuMS0zMS43IDEyOC03OCAxNS44LTExLjMgMzUuMS0xOCA1Ni0xOGwxOS41IDBjMTAuNCAwIDE4IDkuOCAxNS41IDE5LjlsLTE3LjEgNjguM2M5LjkgMTIuNCAxOC4yIDI1LjcgMjQuNCAzOS44bDIxLjcgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTYuNSAyMi0zOC41IDM5LjYtNjQgNTAuN2wwIDI5LjNjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMzIDBjLTE0LjMgMC0yNi44LTkuNS0zMC44LTIzLjJsLTcuMS0yNC44LTgyLjMgMC03LjEgMjQuOEMyMzUuOCA1MDIuNSAyMjMuMyA1MTIgMjA5IDUxMmwtMzMgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yOS4zQzg3LjUgNDI2IDQ4IDM2OS42IDQ4IDMwNHptMzc2IDE2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhTW9udW1lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9udW1lbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhNiIsICJNMjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw5NSA0N2MtNC4xIDQuMS02LjUgOS40LTcgMTUuMUw1OC40IDQ0OCA0OCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjQgMC0yOS43LTM4NS44Yy0uNC01LjctMi45LTExLjEtNy0xNS4xTDIwOS0zM3pNMTI4IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQW5nbGVzUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGVzLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTg3LCAiYW5nbGUtZG91YmxlLXJpZ2h0Il0sICJmMTAxIiwgIk00MzkuMSAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzcxLjIgMjU2IDIzMy45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE3OS4yIDI1NiA0MS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZVJpZ2h0ID0gZmFBbmdsZXNSaWdodDsKICAgIGZhRGVza3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZXNrdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDIxLCA2MTcwNCwgImRlc2t0b3AtYWx0Il0sICJmMzkwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0NCAwLTE2IDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAtMTYtNDggMTQ0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDk2bDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYURlc2t0b3BBbHQgPSBmYURlc2t0b3A7CiAgICBmYVBsYW5lQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTciLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXQogICAgfTsKICAgIGZhUmV0d2VldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXR3ZWV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzkiLCAiTTExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDMyIDAgMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjI0IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6TTQ1Ny40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzU1Ni45IDM1MiA1NDQgMzUybC0zMiAwIDAtMjI0YzAtNTMtNDMtOTYtOTYtOTZMMjg4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0eiJdCiAgICB9OwogICAgZmFVc2VyR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdlYXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci1jb2ciXSwgImY0ZmUiLCAiTTI1Ni41IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNyAzMDRsNTkuNCAwIDEuNSAwYy0xMi45IDI2LjgtNy44IDU4LjIgMTEuNSA3OS41LTIwLjIgMjIuMy0yNC44IDU1LjgtOS40IDgzLjRsMjIuNSA0MC40Yy45IDEuNiAxLjkgMy4yIDIuOSA0LjdsLTIzNyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3ptMjA1LjktNTYuNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNi4xYzAgMTguOSAyNC4xIDMyLjggNDAuNSAyMy40bDUtMi45YzExLjYtNi43IDI2LjUtMi42IDMzIDkuMWwyMi40IDQwLjJjNi4yIDExLjIgMi42IDI1LjItOC4yIDMybC00LjcgMi45Yy0xNi4yIDEwLjEtMTYuMiAzOS45IDAgNTAuMWw0LjYgMi45YzEwLjggNi44IDE0LjUgMjAuOCA4LjMgMzJMNjA3IDQ4My44Yy02LjUgMTEuNy0yMS40IDE1LjktMzMgOS4xbC00LjktMi45Yy0xNi40LTkuNS00MC41IDQuNS00MC41IDIzLjRsMCA2LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNS45YzAtMTktMjQuMi0zMy00MC43LTIzLjVsLTQuOCAyLjhjLTExLjYgNi43LTI2LjQgMi42LTMzLTkuMWwtMjIuNi00MC40Yy02LjItMTEuMi0yLjYtMjUuMyA4LjMtMzIuMWw0LjQtMi43YzE2LjMtMTAuMSAxNi4zLTQwLjEgMC01MC4ybC00LjUtMi44Yy0xMC45LTYuOC0xNC41LTIwLjktOC4zLTMyLjFsMjIuNS00MC4zYzYuNS0xMS43IDIxLjQtMTUuOCAzMi45LTkuMWw0LjggMi44YzE2LjUgOS41IDQwLjctNC41IDQwLjctMjMuNWwwLTUuOXptOTkuOSAxMzYuMmE1MiA1MiAwIDEgMCAtMTA0IDAgNTIgNTIgMCAxIDAgMTA0IDB6Il0KICAgIH07CiAgICBmYVVzZXJDb2cgPSBmYVVzZXJHZWFyOwogICAgZmFCb3JkZXJBbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLWFsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODRjIiwgIk0zODQgOTZsMCAxMjgtMTI4IDAgMC0xMjggMTI4IDB6bTAgMTkybDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwek0xOTIgMjI0bC0xMjggMCAwLTEyOCAxMjggMCAwIDEyOHpNNjQgMjg4bDEyOCAwIDAgMTI4LTEyOCAwIDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFDb2lucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2lucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTFlIiwgIk0xMjggOTZsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwUzUxMiAzNS44IDUxMiA4MGwwIDE2YzAgMzAuNi00MS4zIDU3LjItMTAyIDcwLjctMi40LTIuOC00LjktNS41LTcuNC04LTE1LjUtMTUuMy0zNS41LTI2LjktNTYuNC0zNS41LTQxLjktMTcuNS05Ni41LTI3LjEtMTU0LjItMjcuMS0yMS45IDAtNDMuMyAxLjQtNjMuOCA0LjEtLjItMS4zLS4yLTIuNy0uMi00LjF6TTQzMiAzNTNsMC00Ni4yYzE1LjEtMy45IDI5LjMtOC41IDQyLjItMTMuOSAxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1em0wLTk2bDAtMzNjMC00LjUtLjQtOC44LTEtMTMgMTUuNS0zLjkgMzAtOC42IDQzLjItMTQuMnMyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1ek0wIDI0MGwwLTE2YzAtNDQuMiA4Ni04MCAxOTItODBzMTkyIDM1LjggMTkyIDgwbDAgMTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDI4NC4yIDAgMjQwem0zODQgOTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDM4MC4yIDAgMzM2bDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNHptMCA4MC42bDAgMTUuNGMwIDQ0LjItODYgODAtMTkyIDgwUzAgNDc2LjIgMCA0MzJsMC0xNS40YzExLjYgOC4xIDI0LjUgMTQuNyAzNy44IDIwLjMgNDEuOSAxNy41IDk2LjUgMjcuMSAxNTQuMiAyNy4xczExMi4zLTkuNyAxNTQuMi0yNy4xYzEzLjItNS41IDI2LjEtMTIuMiAzNy44LTIwLjN6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODk0XSwgImYyMjkiLCAiTTQxNi0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MC43IDAtNTguNyA1OC43LTE3LjQtMTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTcuNCAxNy40LTIzIDIzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDIzLTIzIDE3LjQgMTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ1My4zIDEzNiA1MTIgNzcuMyA1MTIgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNTc2IDBjMC0xNy43LTE0LjMtMzItMzItMzJMNDE2LTMyek0xMjggMzA0YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFuZ2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZS1hbmdsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kcy1oZWxwaW5nIl0sICJmNGM0IiwgIk0yNjguOSA1My4yTDE1Mi4zIDE4Mi44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM0NCA1NzYgMjg4IDU3NiAwIDQ2NCA2NCA0NDAuMiA0OC4xQzQyNC40IDM3LjYgNDA1LjkgMzIgMzg2LjkgMzJsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxNTAuN0wyMjMuNCAzMiAxODMuOCAzMmMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMCAxOTIgMCA1NDQgMTQ0IDQwOCAxNTYuNCA0MTguM2MyMyAxOS4yIDUyIDI5LjcgODEuOSAyOS43bDE1LjcgMC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0MSA0MSA5IDBjMTkuMSAwIDM3LjgtNC4zIDU0LjgtMTIuM0wzNTkgNDA5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzIgMzIgMTcuNS0xNy41YzguOS04LjkgMTEuNS0yMS44IDcuNi0zMy4xbC0xMzcuOS0xMzYuOC0xNC45IDE0LjljLTQ5LjMgNDkuMy0xMjkuMSA0OS4zLTE3OC40IDAtMjMtMjMtMjMuOS01OS45LTIuMi04NHoiXQogICAgfTsKICAgIGZhSGFuZHNIZWxwaW5nID0gZmFIYW5kc2hha2VBbmdsZTsKICAgIGZhQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4NTk1XSwgImYwNjMiLCAiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDQwMi43IDIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM3MC43LTEwNS40LTEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiJdCiAgICB9OwogICAgZmFMb2NhdGlvbkRvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1kb3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibWFwLW1hcmtlci1hbHQiXSwgImYzYzUiLCAiTTAgMTg4LjZDMCA4NC40IDg2IDAgMTkyIDBTMzg0IDg0LjQgMzg0IDE4OC42YzAgMTE5LjMtMTIwLjIgMjYyLjMtMTcwLjQgMzE2LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4eiJdCiAgICB9OwogICAgZmFNYXBNYXJrZXJBbHQgPSBmYUxvY2F0aW9uRG90OwogICAgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZCIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyMjhhMjAgMjAgMCAxIDAgMC00MCAyMCAyMCAwIDEgMCAwIDQwem0wLTE4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQ29va2llQml0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb29raWUtYml0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTY0IiwgIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjYtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45LS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMS01MS41LTguMi05Mi44LTQ3LjEtMTA0LjUtOTcuNC0xLjgtNy42LTgtMTMuNC0xNS43LTE0LjYtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU2NyZXdkcml2ZXJXcmVuY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NyZXdkcml2ZXItd3JlbmNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRvb2xzIl0sICJmN2Q5IiwgIk03MC44LTYuN2M1LjQtNS40IDEzLjgtNi4yIDIwLjItMkwyMDkuOSA3MC41YzguOSA1LjkgMTQuMiAxNS45IDE0LjIgMjYuNmwwIDQ5LjYgOTAuOCA5MC44YzMzLjMtMTUgNzMuOS04LjkgMTAxLjIgMTguNUw1NDIuMiAzODIuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNjAuMSA2MC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwyODguMSAzODRjLTI3LjQtMjcuNC0zMy41LTY3LjktMTguNS0xMDEuMmwtOTAuOC05MC44LTQ5LjYgMGMtMTAuNyAwLTIwLjctNS4zLTI2LjYtMTQuMkwyMy40IDU4LjljLTQuMi02LjMtMy40LTE0LjggMi0yMC4yTDcwLjgtNi43em0xNDUgMzAzLjVjLTYuMyAzNi45IDIuMyA3NS45IDI2LjIgMTA3LjJsLTk0LjkgOTVjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhsMTM1LjQtMTM1LjUgMzUuMiAzNS4xek0zODQuMSAwYzIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMUwzODguOCA5MS4zYy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDU2LjctNTYuN2M3LjYtNy41IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgNDMuMi0xNy4yIDgyLjMtNDUgMTExLjFsLTQ5LjEtNDkuMWMtMzMuMS0zMy03OC41LTQ1LjctMTIxLjEtMzguNGwtNTYuOC01Ni44IDAtMjkuNy0uMi01Yy0uOC0xMi40LTQuNC0yNC4zLTEwLjUtMzQuOSAyOS40LTM1IDczLjQtNTcuMiAxMjIuNy01Ny4zeiJdCiAgICB9OwogICAgZmFUb29scyA9IGZhU2NyZXdkcml2ZXJXcmVuY2g7CiAgICBmYUluZGVudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTI3LjggMjY4LjZMMjUuOCAzNDcuOUMxNS4zIDM1Ni4xIDAgMzQ4LjYgMCAzMzUuM0wwIDE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6Il0KICAgIH07CiAgICBmYUJhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFycyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJuYXZpY29uIl0sICJmMGM5IiwgIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFOYXZpY29uID0gZmFCYXJzOwogICAgZmFIYW5kc1ByYXlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtcHJheWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcmF5aW5nLWhhbmRzIl0sICJmNjg0IiwgIk0yMjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyLjYgODguMi0xMTkuN2MxMy4xLTE3LjggOS4zLTQyLjgtOC41LTU1LjlzLTQyLjgtOS4zLTU1LjkgOC41TDEwNi41IDE0Mi45Qzg5LjMgMTY2LjIgODAgMTk0LjUgODAgMjIzLjZsMCAxMTAuNy01OC4xIDE5LjRDOC44IDM1OCAwIDM3MC4yIDAgMzg0bDAgOTZjMCAxMCA0LjcgMTkuNSAxMi43IDI1LjVzMTguNCA4IDI4LjEgNS4ybDE1NC40LTQ0LjFjNTUtMTUuNyA5Mi44LTY1LjkgOTIuOC0xMjMuMUwyODggMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNzJ6bTE5MiAwbDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTkuNmMwIDU3LjIgMzcuOSAxMDcuNCA5Mi44IDEyMy4xbDE1NC40IDQ0LjFjOS43IDIuOCAyMCAuOCAyOC4xLTUuMlM2NDAgNDkwIDY0MCA0ODBsMC05NmMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtNTguMS0xOS40IDAtMTEwLjdjMC0yOS05LjMtNTcuMy0yNi41LTgwLjdMNDQwLjIgMTYuM0M0MjcuMS0xLjUgNDAyLjEtNS4zIDM4NC4zIDcuOHMtMjEuNiAzOC4xLTguNSA1NS45TDQ2NCAxODMuNCA0NjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQcmF5aW5nSGFuZHMgPSBmYUhhbmRzUHJheWluZzsKICAgIGZhVmlydXNlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1c2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzYiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMzAuNSAzNi45IDQ1LjggNTguNSAyNC4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTIxLjYgMjEuNi02LjMgNTguNSAyNC4yIDU4LjUgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTMwLjUgMC00NS44IDM2LjktMjQuMiA1OC41IDEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwYy0yMS42LTIxLjYtNTguNS02LjMtNTguNSAyNC4yIDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMzAuNS0zNi45LTQ1LjgtNTguNS0yNC4yLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zQzc3LjggMjYwLjkgNjIuNSAyMjQgMzIgMjI0IDE0LjMgMjI0IDAgMjA5LjcgMCAxOTJzMTQuMy0zMiAzMi0zMmMzMC41IDAgNDUuOC0zNi45IDI0LjItNTguNS0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwQzEyMy4xIDc3LjggMTYwIDYyLjUgMTYwIDMyIDE2MCAxNC4zIDE3NC4zIDAgMTkyIDB6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjggNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjQ4IDQwYzAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01MDQgMzg0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVNjaG9vbEZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWZsYWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2ZSIsICJNMjU2LThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNzIgMCAwIDE5LjIgMTI4IDc2LjggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI4LTc2LjggMC05MS4yek0yNDAgMzg0bDAgODAgOTYgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek0xMTIgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0tMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFUcmFkZW1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhZGVtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbODQ4Ml0sICJmMjVjIiwgIk0zNDYuNiAxMTAuMmMtNy44LTExLjctMjIuNC0xNy0zNS45LTEyLjlTMjg4IDExMy45IDI4OCAxMjhsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE1MC4zIDY5LjQgMTA0LjFjNS45IDguOSAxNS45IDE0LjIgMjYuNiAxNC4yczIwLjctNS4zIDI2LjYtMTQuMkw1NDQgMjMzLjcgNTQ0IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTQuMS05LjItMjYuNS0yMi43LTMwLjZzLTI4LjEgMS4xLTM1LjkgMTIuOUw0NDggMjYyLjMgMzQ2LjYgMTEwLjJ6TTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDY0IDAgMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDk2eiJdCiAgICB9OwogICAgZmFGaXJlQnVybmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtYnVybmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZjEiLCAiTTI4MS43IDQ4LjNMMjk0IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNMzIwIDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNOTIuOCAzMjBjMzcuNyA0OC4zIDk2LjEgODAgMTYzLjIgODAgNjYuNSAwIDEyNS4xLTMxLjcgMTYzLTgwbDQ1IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDQuOCAwek00NTYgNDAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZUJlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgInNtaWxlLWJlYW0iXSwgImY1YjgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFTbWlsZUJlYW0yID0gZmFGYWNlU21pbGVCZWFtMjsKICAgIGZhVGVudEFycm93TGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdmIiwgIk0tLjUgMTEzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw3Mi03MmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDMxMC4xIDAgNTQuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDAtLjEgMC0yNjIgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03Mi03MnpNMzcuMSA0NzZMNjAuMyAyOTIuNmMxLjItOS43IDYuOC0xOC4zIDE1LjEtMjMuM0wyMzguOCAxNzBjMTAuMi02LjIgMjIuOS02LjIgMzMuMS0uMWwxNjUuNSA5OS40YzguNCA1IDE0IDEzLjcgMTUuMyAyMy40TDQ3NS45IDQ3NmMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTcxLjkgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN0wyNzUuNCAzNTcuOWMtMS44LTMuNi01LjUtNS45LTkuNS01LjktNS45IDAtMTAuNiA0LjctMTAuNiAxMC42bDAgMTE3LjRjMCAxNy43LTE0LjMgMzItMzIgMzJMNjguOCA1MTJjLTE5LjMgMC0zNC4yLTE2LjktMzEuNy0zNnoiXQogICAgfTsKICAgIGZhUm91dGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm91dGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRkNyIsICJNNTEyIDk2YzAgNTAuMi01OS4xIDEyNS4xLTg0LjYgMTU1LTMuOCA0LjQtOS40IDYuMS0xNC41IDVMMzIwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0yNzYuNCAwYzguNy05LjkgMTkuMy0yMi42IDMwLTM2LjggNi4zLTguNCAxMi44LTE3LjYgMTktMjcuMkw0MTYgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2bDM5LjggMGMtMjEtMzEuNS0zOS44LTY3LjctMzkuOC05NiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2ek0xMTcuMSA0ODkuMWMtMy44IDQuMy03LjIgOC4xLTEwLjEgMTEuM2wtMS44IDItLjItLjJjLTYgNC42LTE0LjYgNC0yMC0xLjgtMjUuMi0yNy40LTg1LTk3LjktODUtMTQ4LjQgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDMwLTIxLjEgNjctNDMuNSA5Ny45LTEwLjcgMTQuNy0yMS43IDI4LTMwLjggMzguNWwtLjYgLjd6TTEyOCAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtdXAiXSwgImYxMDIiLCAiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwem0xNjAgMzUybC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMzAxLjMgMzI5LjQgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7CiAgICBmYUJ1Y2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWNrZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjZiIsICJNNDQzLjcgMjA4YzIuNyA0LjcgNC4zIDEwLjIgNC4zIDE2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC01LjEgMC0yMi40IDIxM2MtMi42IDI0LjQtMjMuMiA0My00Ny44IDQzbC0yMzMuNiAwYy0yNC42IDAtNDUuMi0xOC41LTQ3LjgtNDNMMzcuMSAyNTYgMzIgMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMiAwLTUuOCAxLjYtMTEuMyA0LjMtMTZsNDM5LjQgMHpNMjI0LTE2Yzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMzItNDggMCAwLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzItNDggMCAwLTMyQzgwIDQ4LjUgMTQ0LjUtMTYgMjI0LTE2eiJdCiAgICB9OwogICAgZmFMZXNzVGhhbkVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlc3MtdGhhbi1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTM3IiwgIk00MjYuMSA5NC40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJsLTM4NCAxMjhDOC44IDE2NiAwIDE3OC4yIDAgMTkyczguOCAyNiAyMS45IDMwLjRsMzg0IDEyOGMxNi44IDUuNiAzNC45LTMuNSA0MC41LTIwLjJzLTMuNS0zNC45LTIwLjItNDAuNUwxMzMuMiAxOTIgNDI2LjEgOTQuNHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnoiXQogICAgfTsKICAgIGZhRm9sZGVyQ2xvc2VkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItY2xvc2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxODUiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3NiA1MTIgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NHptNjQtMjg4TDAgMTYwIDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2eiJdCiAgICB9OwogICAgZmFQZXJzb25UaHJvdWdoV2luZG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi10aHJvdWdoLXdpbmRvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNWE5IiwgIk02NCA2NGwyMjQgMCAwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40LTYwLjUgMjQuMi0xMDAuMSA4Mi43LTEwMC4xIDE0Ny45bDAgNzMuOC02NCAwIDAtMzIwem0yODggMGwyMjQgMCAwIDMyMC02Ny43IDAtMy43LTQuNS03NS4yLTkwLjJjLTkuMS0xMC45LTIyLjYtMTcuMy0zNi45LTE3LjNsLTcxLjEgMC00MS02My4xYy0uMy0uNS0uNi0xLTEtMS40IDQ0LjctMjkgNzIuNS03OSA3Mi41LTEzMy42bDAtOS44em03MyAzMjBsLTI2LjYgMCA0Mi43IDY0IDE1MC45IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCA0MDBjMCAyNi41IDIxLjUgNDggNDggNDhsMjYwLjIgMCAzMy4yIDQ5LjhjOS44IDE0LjcgMjkuNyAxOC43IDQ0LjQgOC45czE4LjctMjkuNyA4LjktNDQuNGwtODQuMi0xMjYuMiA3NC42IDAgNDAgNDh6bS0xNTkuNSAwbC03My41IDAgMC03My44YzAtMTAuMiAxLjYtMjAuMSA0LjctMjkuNUwyNjUuNSAzODR6TTE5MiAxMjhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2Nob29sTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZmIiwgIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzMgMCA2MC4yIDI1IDYzLjYgNTcuMi0xNC43LTUuOS0zMC44LTkuMi00Ny42LTkuMi03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTMzMi4zIDM0MS41Yy02LTMuNS0xMi45LTUuNS0yMC4zLTUuNWwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA4OCA5NiAwIDAtNjQuMWMwLTIwLjggNC40LTQwLjUgMTIuMy01OC40ek0xMTIgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0yMjQtNDhhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01NjAgMzUybDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMHptLTExMiAyLjdsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjN6Il0KICAgIH07CiAgICBmYVBlcnNvbkJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTNiIiwgIk0yMDQgNDAuMWMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTQgMTQ0LjFjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTk2LjUgMjg1LjVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw5Ni41IDI4NS41ek02Mi42IDIuN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw2Mi42IDM2LjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek0zNTIuNC0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNNDc4LjcgMjk5LjFsLTQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyNS4yLTMzLjkgNjUtNTMuOSAxMDcuMi01My45czgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42eiJdCiAgICB9OwogICAgZmFMZWZ0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWZ0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtbGVmdCJdLCAiZjMwYSIsICJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzE5MiAxMTUuMSAxOTIgMTI4bDAgNjQgMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzM2IDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7CiAgICBmYUxvY2F0aW9uQ3Jvc3NoYWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1jcm9zc2hhaXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvY2F0aW9uIl0sICJmNjAxIiwgIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAyNTZhMTYwIDE2MCAwIDEgMCAzMjAgMCAxNjAgMTYwIDAgMSAwIC0zMjAgMHptMTYwLTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzOwogICAgZmFQZXJzb25Eb3RzRnJvbUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRvdHMtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpYWdub3NlcyJdLCAiZjQ3MCIsICJNMTg0IDcyYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDI5OS4zYy0xOS45IDIyLjYtMzIgNTIuMi0zMiA4NC43bDAgMzItNjQgMCAwLTMyYzAtMTA2IDg2LTE5MiAxOTItMTkyczE5MiA4NiAxOTIgMTkybDAgMzItNjQgMCAwLTMyYzAtMzIuNS0xMi4xLTYyLjEtMzItODQuN2wwIDExNi43LTE5MiAwIDAtMTE2Ljd6TTIzMiAzODRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OC0xMDRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjQgNDY0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNjQgMTg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYURpYWdub3NlcyA9IGZhUGVyc29uRG90c0Zyb21MaW5lOwogICAgZmFHYXVnZVNpbXBsZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTY2OCwgInRhY2hvbWV0ZXIiLCAidGFjaG9tZXRlci1mYXN0Il0sICJmNjJhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhVGFjaG9tZXRlciA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFUYWNob21ldGVyRmFzdCA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFBbmdsZXNMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTcxLCAiYW5nbGUtZG91YmxlLWxlZnQiXSwgImYxMDAiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwem0zNTItMTYwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjY5LjMgMjU2IDQwNi42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZUxlZnQgPSBmYUFuZ2xlc0xlZnQ7CiAgICBmYVVwRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODU5NywgMTEwMjEsICJhcnJvd3MtYWx0LXYiXSwgImYzMzgiLCAiTTQwNi42IDUwMi42bDk2LTk2YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDM1MiA0ODAgMzUybC02NCAwIDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzIwLTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwek0xNTAuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDY0IDAgMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyMCA2NCAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRWID0gZmFVcERvd247CiAgICBmYUJhdHRlcnlFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LWVtcHR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMCJdLCAiZjI0NCIsICJNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNmw0MTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yMjRjMC04LjgtNy4yLTE2LTE2LTE2bC00MTYgMHpNMzIgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwbC00MTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0yMjR6Il0KICAgIH07CiAgICBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7CiAgICBmYUtleWJvYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrZXlib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzllM10sICJmMTFjIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTYgNjRsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTE3NiAxMjhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDb29raWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29va2llIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgImY1NjMiLCAiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU3RvcHdhdGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3B3YXRjaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCAiZjJmMiIsICJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem04MCAxODRsMCAxMDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRWplY3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5MTY3XSwgImYwNTIiLCAiTTIyNCAzMmMxMy41IDAgMjYuMyA1LjYgMzUuNCAxNS42bDE3NiAxOTJjMTIuOSAxNCAxNi4yIDM0LjMgOC42IDUxLjhTNDE5IDMyMCA0MDAgMzIwTDQ4IDMyMGMtMTkgMC0zNi4zLTExLjItNDMuOS0yOC43cy00LjMtMzcuNyA4LjYtNTEuOGwxNzYtMTkyQzE5Ny43IDM3LjYgMjEwLjUgMzIgMjI0IDMyek0wIDQzMmMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGVEaXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhdGVsbGl0ZS1kaXNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI1XSwgImY3YzAiLCAiTTIzMiAwYzE1NC42IDAgMjgwIDEyNS40IDI4MCAyODAgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMjguMS0xMDMuOS0yMzItMjMyLTIzMi0xMy4zIDAtMjQtMTAuNy0yNC0yNFMyMTguNyAwIDIzMiAwek0yMDggMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0IDEwMS42IDAgMTg0IDgyLjQgMTg0IDE4NCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjYuNCAxNDIuN2M4LjgtMTcuOSAzMi40LTE5LjkgNDYuNS01LjhsMTI4LjUgMTI4LjUgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzIgMTI4LjUgMTI4LjVjMTQuMSAxNC4xIDEyIDM3LjYtNS44IDQ2LjUtMzQuMiAxNi45LTcyLjYgMjYuNC0xMTMuMyAyNi40LTE0MS40IDAtMjU2LTExNC42LTI1Ni0yNTYgMC00MC43IDkuNS03OS4yIDI2LjQtMTEzLjN6Il0KICAgIH07CiAgICBmYUZhY2VSb2xsaW5nRXllczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1yb2xsaW5nLWV5ZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1ODAsICJtZWgtcm9sbGluZy1leWVzIl0sICJmNWE1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDM1MmwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTMyLTEyOGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNHptMTI4IDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNCAwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhTWVoUm9sbGluZ0V5ZXMyID0gZmFGYWNlUm9sbGluZ0V5ZXMyOwogICAgZmFMaXN0Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdC1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0YXNrcyJdLCAiZjBhZSIsICJNMTMzLjggMzYuM2MxMC45IDcuNiAxMy41IDIyLjYgNS45IDMzLjRsLTU2IDgwYy00LjEgNS44LTEwLjUgOS41LTE3LjYgMTAuMVM1MiAxNTggNDcgMTUzTDcgMTEzQy0yLjMgMTAzLjYtMi4zIDg4LjQgNyA3OVMzMS42IDY5LjcgNDEgNzlsMTkuOCAxOS44IDM5LjYtNTYuNmM3LjYtMTAuOSAyMi42LTEzLjUgMzMuNC01Ljl6bTAgMTYwYzEwLjkgNy42IDEzLjUgMjIuNiA1LjkgMzMuNGwtNTYgODBjLTQuMSA1LjgtMTAuNSA5LjUtMTcuNiAxMC4xUzUyIDMxOCA0NyAzMTNMNyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxOS44IDE5LjggMzkuNi01Ni42YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXpNMjI0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE2MCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNjQgMzc2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhVGFza3MgPSBmYUxpc3RDaGVjazsKICAgIGZhU2Fja1htYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhY2steG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU2YSIsICJNMzI4IDExMmwtMTQ0IDAtMzcuMy03NC41Yy0xLjgtMy42LTIuNy03LjYtMi43LTExLjYgMC0xNC4zIDExLjYtMjUuOSAyNS45LTI1LjlMMzQyLjEgMGMxNC4zIDAgMjUuOSAxMS42IDI1LjkgMjUuOSAwIDQtLjkgOC0yLjcgMTEuNkwzMjggMTEyek0xNjkuNiAxNjBsMTcyLjggMCA0OC43IDQwLjZDNDU3LjYgMjU2IDQ5NiAzMzggNDk2IDQyNC41IDQ5NiA0NzIuOCA0NTYuOCA1MTIgNDA4LjUgNTEybC0zMDUuMSAwQzU1LjIgNTEyIDE2IDQ3Mi44IDE2IDQyNC41IDE2IDMzOCA1NC40IDI1NiAxMjAuOSAyMDAuNkwxNjkuNiAxNjB6TTMyMy45IDI4NC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUhhc2h0YWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFzaHRhZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk4XSwgIjIzIiwgIk0yMTQuNyAuN2MxNy4zIDMuNyAyOC4zIDIwLjcgMjQuNiAzOGwtMTkuMSA4OS4zIDEyNi41IDAgMjItMTAyLjdDMzcyLjQgOCAzODkuNC0zIDQwNi43IC43czI4LjMgMjAuNyAyNC42IDM4TDQxMi4yIDEyOCA0ODAgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjcuNCAxMjggNjcuOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOGwxOS4xLTg5LjMtMTI2LjUgMC0yMiAxMDIuN2MtMy43IDE3LjMtMjAuNyAyOC4zLTM4IDI0LjZzLTI4LjMtMjAuNy0yNC42LTM4TDk5LjggMzg0IDMyIDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjcuNC0xMjgtNjcuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgxLjYgMCAyMi0xMDIuN0MxODAuNCA4IDE5Ny40LTMgMjE0LjcgLjd6TTIwNi40IDE5MmwtMjcuNCAxMjggMTI2LjUgMCAyNy40LTEyOC0xMjYuNSAweiJdCiAgICB9OwogICAgZmFUcmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY0Nl0sICJmMjM4IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTkyIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUdhbWVwYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2FtZXBhZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMTFiIiwgIk00NDggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTNTU0IDQ0OCA0NDggNDQ4bC0yNTYgMEM4NiA0NDggMCAzNjIgMCAyNTZTODYgNjQgMTkyIDY0bDI1NiAwek0xOTIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0MCA5NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTY0LTk2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUV4cG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4cG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvdy1yaWdodC1mcm9tLWZpbGUiXSwgImY1NmUiLCAiTTk2LjUgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05NiA3OC4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtNzguMSAwIDAtMTMzLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkxLjIgMTguN0MyNzkuMiA2LjcgMjYzIDAgMjQ2IDBMOTYuNSAwek0zNTggMTc2bC05My41IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MC41IDU4LjUgMzU4IDE3NnpNMjI0LjUgMzI4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEwNCAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUgPSBmYUZpbGVFeHBvcnQ7CiAgICBmYUZhY2VHcmltYWNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW1hY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTYsICJncmltYWNlIl0sICJmNTdmIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNNDAwIDM1MmMwIDI1LjItMTkuNCA0NS44LTQ0IDQ3LjhsMC05NS43YzI0LjYgMiA0NCAyMi43IDQ0IDQ3Ljh6TTI3NiAzMDRsNDAgMCAwIDk2LTQwIDAgMC05NnptLTgwIDk2bDAtOTYgNDAgMCAwIDk2LTQwIDB6bS00MC05NS44bDAgOTUuN2MtMjQuNi0yLTQ0LTIyLjctNDQtNDcuOHMxOS40LTQ1LjggNDQtNDcuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmltYWNlMiA9IGZhRmFjZUdyaW1hY2UyOwogICAgZmFUcmFpblN1YndheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi1zdWJ3YXkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3Vid2F5Il0sICJmMjM5IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw3MiAwIDAtMTYwLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yMTYgMjU2bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNzIgMCAwIDE2MHpNOTYgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMjI0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVN1YndheSA9IGZhVHJhaW5TdWJ3YXk7CiAgICBmYUNpcmNsZURvdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI4MCwgImRvdC1jaXJjbGUiXSwgImYxOTIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhRG90Q2lyY2xlMiA9IGZhQ2lyY2xlRG90MjsKICAgIGZhT2JqZWN0R3JvdXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9iamVjdC1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjQ3IiwgIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwzMzcuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTMzNy4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjF6bTQ0OCAwYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xek0xNDQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTExMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yNTYgMzIwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhU2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGlwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Njc0XSwgImYyMWEiLCAiTTI3MiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2LTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMTA4LjgtMjEuNiA4LjZjLTE0LjggNS45LTIyLjUgMjIuNC0xNy40IDM3LjUgMTAuNCAzMS4zIDI2LjggNTkuMyA0Ny43IDgzLjEgMjAuMS05LjIgNDEuNy0xMy45IDYzLjMtMTQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40bDEuNiAxLjIgMC0yMTUtMTA0IDQxLjYgMC04My4yYzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4My4yLTEwNC00MS42IDAgMjE1IDEuNi0xLjJjMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMjIuMy0uMSA0NC42IDQuNSA2NS4zIDE0IDIwLjktMjMuNyAzNy4zLTUxLjggNDcuNy04My4xIDUtMTUuMi0yLjYtMzEuNi0xNy40LTM3LjVMNTEyIDI1Mi44IDUxMiAxNDRjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDAgMC0xNmMwLTI2LjUtMjEuNS00OC00OC00OEwyNzIgMHpNNDAzLjQgNDc2LjFjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0ODIuMyAxNy42IDQ5MC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTldLCAiNDMiLCAiTTMyOS4xIDE0Mi45Yy02Mi41LTYyLjUtMTU1LjgtNjIuNS0yMTguMyAwcy02Mi41IDE2My44IDAgMjI2LjMgMTU1LjggNjIuNSAyMTguMyAwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTg3LjUgODcuNS0yMjEuMyA4Ny41LTMwOC44IDBzLTg3LjUtMjI5LjMgMC0zMTYuOCAyMjEuMy04Ny41IDMwOC44IDBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVBob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waG9uZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaG9uZS1zcXVhcmUiXSwgImYwOTgiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTg4IDk2LjdjOS44LTIuNyAyMC4xIDIuNCAyNCAxMS44bDIwLjMgNDguN2MzLjQgOC4zIDEuMSAxNy44LTUuOSAyMy41bC0yMi4xIDE4YzE2LjIgMzUuOCA0NC41IDY1IDc5LjYgODIuNGwxOS4zLTIzLjZjNS43LTYuOSAxNS4yLTkuMyAyMy41LTUuOWw0OC43IDIwLjNjOS40IDMuOSAxNC40IDE0LjIgMTEuOCAyNGwtLjggMi44Yy04LjggMzIuMy00MC4xIDU5LjktNzguMiA1MS44LTg3LjUtMTguNS0xNTYuMy04Ny40LTE3NC45LTE3NC45LTguMS0zOC4xIDE5LjUtNjkuNCA1MS44LTc4LjJsMi44LS44eiJdCiAgICB9OwogICAgZmFQaG9uZVNxdWFyZSA9IGZhU3F1YXJlUGhvbmU7CiAgICBmYVJ1bGVyQ29tYmluZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItY29tYmluZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU0NiIsICJNMSA0NDEuN0M1LjUgNDYzLjUgMjQuOCA0ODAgNDggNDgwbDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTY0IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTY0LTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAzLjMgLjMgNi42IDEgOS43eiJdCiAgICB9OwogICAgZmFBcnJvd3NSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MiwgInJlZnJlc2giLCAic3luYyJdLCAiZjAyMSIsICJNNjUuOSAyMjguNWMxMy4zLTkzIDkzLjQtMTY0LjUgMTkwLjEtMTY0LjUgNTMgMCAxMDEgMjEuNSAxMzUuOCA1Ni4yIC4yIC4yIC40IC40IC42IC42bDcuNiA3LjItNDcuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNC0xMS4zLTEwLjdDMzkwLjUgMjguNiAzMjYuNSAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjF6bTQ0My41IDY0YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNTMgMC0xMDEtMjEuNS0xMzUuOC01Ni4yLS4yLS4yLS40LS40LS42LS42bC03LjYtNy4yIDQ3LjkgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMjBjLTguNSAwLTE2LjcgMy40LTIyLjcgOS41Uy0uMSAzNDMuNyAwIDM1Mi4zbDEgMTI3Yy4xIDE3LjcgMTQuNiAzMS45IDMyLjMgMzEuN1M2NS4yIDQ5Ni40IDY1IDQ3OC43bC0uNC01MS41IDEwLjcgMTAuMWM0Ni4zIDQ2LjEgMTEwLjIgNzQuNyAxODAuNyA3NC43IDEyOSAwIDIzNS43LTk1LjQgMjUzLjQtMjE5LjV6Il0KICAgIH07CiAgICBmYVJlZnJlc2ggPSBmYUFycm93c1JvdGF0ZTsKICAgIGZhU3luYyA9IGZhQXJyb3dzUm90YXRlOwogICAgZmFQZXJzb25EcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZHJlc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmVtYWxlIl0sICJmMTgyIiwgIk0xMzYgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTIgMzg0bC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMjcwIDIzNCAzMTMgMzYyLjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0yNS44IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOHoiXQogICAgfTsKICAgIGZhRmVtYWxlID0gZmFQZXJzb25EcmVzczsKICAgIGZhQm9va09wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjE0LCAxMjgzNjZdLCAiZjUxOCIsICJNMjU2IDE0MS4zbDAgMzA5LjMgLjUtLjJDMzExLjEgNDI3LjcgMzY5LjcgNDE2IDQyOC44IDQxNmwxOS4yIDAgMC0zMjAtMTkuMiAwYy00Mi4yIDAtODQuMSA4LjQtMTIzLjEgMjQuNi0xNi44IDctMzMuNCAxMy45LTQ5LjcgMjAuN3pNMjMwLjkgNjEuNUwyNTYgNzIgMjgxLjEgNjEuNUMzMjcuOSA0MiAzNzguMSAzMiA0MjguOCAzMkw0NjQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1LjIgMGMtNTAuNyAwLTEwMC45IDEwLTE0Ny43IDI5LjVsLTEyLjggNS4zYy03LjkgMy4zLTE2LjcgMy4zLTI0LjYgMGwtMTIuOC01LjNDMTg0LjEgNDkwIDEzMy45IDQ4MCA4My4yIDQ4MEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41eiJdCiAgICB9OwogICAgZmFGb2xkZXJUcmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci10cmVlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4MDIiLCAiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCAzOTJjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTg0IDAgMC00OC0xODQgMGMtNC40IDAtOC0zLjYtOC04bDAtMjMyIDE5MiAwIDAtNDgtMTkyIDAgMC04OHpNMzM2IDIyNGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDh6bTAgMjg4bDE5MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTguNi04LjZjLTktOS0yMS4yLTE0LjEtMzMuOS0xNC4xTDMzNiAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFCb3hBcmNoaXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC1hcmNoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFyY2hpdmUiXSwgImYxODciLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2TDAgNjR6TTMyIDE3Nmw0NDggMCAwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjQwem0xNTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFBcmNoaXZlID0gZmFCb3hBcmNoaXZlOwogICAgZmFUZW50QXJyb3dEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctZG93bi10by1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1N2UiLCAiTTE4NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMUMxMjAgMi43IDEwOS4zLTggOTYtOFM3MiAyLjcgNzIgMTZsMCAxMDIuMS0zMS0zMUMzMS42IDc3LjcgMTYuNCA3Ny43IDcgODdTLTIuMyAxMTEuNiA3IDEyMWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnpNMTU1LjggMjYwLjZMMTMyLjEgNDQ4IDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTIuOC0uNC01LjUtMS04TDU0OC4yIDI2MC43Yy0xLjItOS43LTYuOS0xOC40LTE1LjMtMjMuNEwzNjcuNCAxMzcuOWMtMTAuMi02LjEtMjIuOS02LjEtMzMuMSAuMUwxNzAuOSAyMzcuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zek00NDggNDQ4bC05Ny4xIDAgMC0xNDkuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOUw0NDggNDQ4eiJdCiAgICB9OwogICAgZmFRcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMjkiLCAiTTY0IDE2MGw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHpNNjQgNDE2bDY0IDAgMC02NC02NCAwIDAgNjR6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnpNMzIwIDk2bDAgNjQgNjQgMCAwLTY0LTY0IDB6TTMwNCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTI4OCAzNTJhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzJ6bTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptLTMyIDMyYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6Il0KICAgIH07CiAgICBmYURyYWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcmFnb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDldLCAiZjZkNSIsICJNMzUyIDEyNC41bC01MS45LTEzYy02LjUtMS42LTExLjMtNy4xLTEyLTEzLjhzMi44LTEzLjEgOC43LTE2LjFsNDAuOC0yMC40LTQzLjMtMzIuNWMtNS41LTQuMS03LjgtMTEuMy01LjYtMTcuOVMyOTcuMSAwIDMwNCAwTDQ2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40bDU3LjYgNzYuOGM2LjIgOC4zIDkuNiAxOC40IDkuNiAyOC44IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43bC0xMy4zLTEzLjMtMzIgMCAwIDIxLjVjMCAyNC44IDEyLjggNDcuOSAzMy44IDYxLjFsMTA2LjYgNjYuNmMzMi4xIDIwLjEgNTEuNiA1NS4yIDUxLjYgOTMuMSAwIDYwLjYtNDkuMSAxMDkuOC0xMDkuOCAxMDkuOEwzMi4zIDUxMmMtMy4zIDAtNi42LS40LTkuNi0xLjQtOS4yLTIuOC0xNi43LTkuNi0yMC40LTE4LjYtMS4zLTMuMy0yLjItNi45LTIuMy0xMC43LS4yLTMuNyAuMy03LjMgMS4zLTEwLjcgMi44LTkuMiA5LjYtMTYuNyAxOC42LTIwLjQgMy0xLjIgNi4yLTIgOS41LTIuMkw0MzMuMyA0MTJjOC4zLS43IDE0LjctNy43IDE0LjctMTYuMSAwLTQuMy0xLjctOC40LTQuNy0xMS40bC00NC40LTQ0LjRjLTMwLTMwLTQ2LjktNzAuNy00Ni45LTExMy4xbDAtMTAyLjV6TTUxMiA3Mi4zYzAtLjEgMC0uMiAwLS4zczAtLjIgMC0uM2wwIC42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3IDAgMjcuNWMwIDMyLjggOC40IDY0LjggMjQgOTNsLTIzMiAwYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlTLjEgMjMyLjggNS40IDIyOEwxMzAuOSAxMTYuNXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1lbmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4OTg3LCAiaG91cmdsYXNzLTMiXSwgImYyNTMiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlsLTY3LjkgNjcuOS02Ny45LTY3LjlDMTA2LjEgMTI0LjkgOTYgMTAwLjQgOTYgNzV6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczMyID0gZmFIb3VyZ2xhc3NFbmQ7CiAgICBmYUdyaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzU4MTE5LCAiZ3JpZC1ob3Jpem9udGFsIiwgImdyaXAtaG9yaXpvbnRhbCJdLCAiZjU4ZCIsICJNODggOTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek0yODAgMjI0bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMTkyIDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDE5MmwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6TTI4MCAyODhjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek04OCA0MTZsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQweiJdCiAgICB9OwogICAgZmFHcmlkSG9yaXpvbnRhbCA9IGZhR3JpcDsKICAgIGZhR3JpcEhvcml6b250YWwgPSBmYUdyaXA7CiAgICBmYUJvcmRlclRvcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLXRvcC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvcmRlci1zdHlsZSJdLCAiZjg1MyIsICJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4em0xMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMnptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTE2MCAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6TTM4NCAxOTJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMzIgMTYwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQm9yZGVyU3R5bGUgPSBmYUJvcmRlclRvcExlZnQ7CiAgICBmYUxpc3RVbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0LXVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtZG90cyJdLCAiZjBjYSIsICJNNDggMTQ0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTQ4IDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTk2IDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFMaXN0RG90cyA9IGZhTGlzdFVsOwogICAgZmFQZW9wbGVSb2JiZXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1yb2JiZXJ5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzYiLCAiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42TDMyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDUuN2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMCAuNiAwIDE5MS40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI3LjMgMTMgMjAuNWM1LjkgOS4yIDE2LjEgMTQuOSAyNyAxNC45bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwLjQgMC0zNy40LTU4LjlDMTU3LjYgMTQyIDEzMi4xIDEyOCAxMDQuNyAxMjhMNzIgMTI4eiJdCiAgICB9OwogICAgZmFNb2JpbGVCdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLWJ1dHRvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTBiIiwgIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6TTE5MiA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25BWiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLWFzYyIsICJzb3J0LWFscGhhLWRvd24iXSwgImYxNWQiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTgyLTM0MC45YzUwLjcgMTAxLjMgNzcuMyAxNTQuNyA4MCAxNjAgNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtNy4yLTE0LjMtODguNCAwLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45YzIuNy01LjMgMjkuMy01OC43IDgwLTE2MCA1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43czIzLjIgNi44IDI4LjYgMTcuN3pNMzg0IDEzNS42bC0yMC4yIDQwLjQgNDAuNCAwLTIwLjItNDAuNHpNMjg4IDMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDM5Ny4zIDQxNiA0NDggNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlsNzMuNC03My40LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYUFzYyA9IGZhQXJyb3dEb3duQVo7CiAgICBmYVNvcnRBbHBoYURvd24gPSBmYUFycm93RG93bkFaOwogICAgZmFNb25leUJpbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGQ2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0xOTIgMjRjMCA0LjQtMy42IDguMS04IDcuNS0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OHpNNjQgMzI4YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHptOC0xMzYuNWMtNC40IC41LTgtMy4xLTgtNy41bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNXptMzY4IDEyOWM0LjQtLjUgOCAzLjEgOCA3LjVsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjV6Il0KICAgIH07CiAgICBmYUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtaW51cy1jaXJjbGUiXSwgImYwNTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjggMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWludXNDaXJjbGUgPSBmYUNpcmNsZU1pbnVzOwogICAgZmFBcnJvd1BvaW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJtb3VzZS1wb2ludGVyIl0sICJmMjQ1IiwgIk03Ny4zIDIuNWM4LjEtNC4xIDE3LjktMy4yIDI1LjEgMi4zbDMyMCAyMzkuOWM4LjMgNi4yIDExLjYgMTcgOC40IDI2LjhzLTEyLjQgMTYuNC0yMi44IDE2LjRsLTE1Mi4zIDAgODguOSAxNzcuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC04OC45LTE3Ny43LTkxLjMgMTIxLjhjLTYuMiA4LjMtMTcgMTEuNi0yNi44IDguNFM2NCA0MzQuMyA2NCA0MjRMNjQgMjRjMC05LjEgNS4xLTE3LjQgMTMuMy0yMS41eiJdCiAgICB9OwogICAgZmFNb3VzZVBvaW50ZXIgPSBmYUFycm93UG9pbnRlcjsKICAgIGZhU3F1YXJlU2hhcmVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc2hhcmUtbm9kZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic2hhcmUtYWx0LXNxdWFyZSJdLCAiZjFlMSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzY4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NC0xNS40IDAtMjkuNS01LjQtNDAuNi0xNC41bC04NS4zIDQ2LjUgODUuMyA0Ni41YzExLTkuMSAyNS4yLTE0LjUgNDAuNi0xNC41IDM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjRjMC0yLjUgLjEtNC45IC40LTcuM0wxNTguNSAzMDBjLTExLjcgMTIuMy0yOC4yIDIwLTQ2LjUgMjAtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlQWx0U3F1YXJlID0gZmFTcXVhcmVTaGFyZU5vZGVzOwogICAgZmFUYWJsZUNlbGxzTGFyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtbGFyZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgtbGFyZ2UiXSwgImYwMDkiLCAiTTM4NCA5NmwtMTI4IDAgMCAxMjggMTI4IDAgMC0xMjh6bTY0IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjh6TTY0IDI4OGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHptMTI4LTY0bDAtMTI4LTEyOCAwIDAgMTI4IDEyOCAwem02NCA2NGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHoiXQogICAgfTsKICAgIGZhVGhMYXJnZSA9IGZhVGFibGVDZWxsc0xhcmdlOwogICAgZmFDYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2F0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDA4XSwgImY2YmUiLCAiTTY0IDk2YzUzIDAgOTYgNDMgOTYgOTZsMCA4NS44YzI5LjctNDQuNyA3Ny44LTc2LjIgMTMzLjQtODQgMjUuNiA2MCA4NS4yIDEwMi4xIDE1NC42IDEwMi4xIDEwLjkgMCAyMS42LTEuMSAzMi0zLjFMNDgwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0MC44LTEzNiAxMDguOCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNDQgMGMtNTMgMC05Ni00My05Ni05NmwwLTIyNGMwLTE2LjYtMTIuNi0zMC4yLTI4LjctMzEuOGwtNi42LS4zQzQ0LjYgMTU4LjIgMzIgMTQ0LjYgMzIgMTI4IDMyIDExMC4zIDQ2LjMgOTYgNjQgOTZ6TTUzMy44IDMuMkM1NDQuMi01LjUgNTYwIDEuOSA1NjAgMTUuNUw1NjAgMTI4YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzMzNiAxODkuOSAzMzYgMTI4bDAtMTEyLjVjMC0xMy42IDE1LjgtMjEgMjYuMi0xMi4zTDQxNiA0OCA0ODAgNDggNTMzLjggMy4yek00MDAgMTA4YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptOTYgMGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyV2VlayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci13ZWVrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ODQiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDB6Il0KICAgIH07CiAgICBmYUNvZGVDb21wYXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtY29tcGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTNhIiwgIk0xOTguOCAxLjhjOS0zLjcgMTkuMy0xLjcgMjYuMiA1LjJsNTYgNTZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTU2IDU2Yy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4yUzE4NCAxNDUuNyAxODQgMTM2bDAtMjQtMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMTQuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNMNjQgMTQ0YzAtNTMgNDMtOTYgOTYtOTZsMjQgMCAwLTI0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnpNMzkyIDgwYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6bS04IDczLjNjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zTDQ0OCAzNjhjMCA1My00MyA5Ni05NiA5NmwtMjQgMCAwIDI0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTU2LTU2Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw1Ni01NmM2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzMyOCAzNjYuMyAzMjggMzc2bDAgMjQgMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIxNC43ek03MiA0MzJhMjQgMjQgMCAxIDAgNDggMCAyNCAyNCAwIDEgMCAtNDggMHoiXQogICAgfTsKICAgIGZhUm9hZENpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjYiLCAiTTI4Ny45IDMybC03Ni4yIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjYgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OS4yYzM1LjItNDAgODYuNy02NS4yIDE0NC4yLTY1LjIgOSAwIDE3LjggLjYgMjYuNCAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjUgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFQYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFsbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ODIiLCAiTTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjQtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwem05NiA2NGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6bTE5MiAwbDEyOCAwIDAgNjQtMTI4IDAgMC02NHoiXQogICAgfTsKICAgIGZhQ2FrZUNhbmRsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FrZS1jYW5kbGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODc0LCAiYmlydGhkYXktY2FrZSIsICJjYWtlIl0sICJmMWZkIiwgIk04Ni40LTEwLjVMNjEuOCAzMS42QzU4IDM4LjEgNTYgNDUuNiA1NiA1My4yTDU2IDU2YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDIzMy42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41ek0zMTcuOCAzMS42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMzYxLjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjVMMzE3LjggMzEuNnpNMTI4IDE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjVDMjYuNyAyMjYuNiAwIDI2Mi4yIDAgMzA0bDAgMjAuOGMyMC45IDEuMyA0MS42IDcuMyA2MC4zIDE4bDcuMSA0LjFjMjYuMyAxNSA1OC45IDEzLjQgODMuNi00LjIgNDMuNy0zMS4yIDEwMi4zLTMxLjIgMTQ2IDAgMjQuNiAxNy42IDU3LjMgMTkuMyA4My42IDQuMmw3LjEtNC4xYzE4LjctMTAuNyAzOS4zLTE2LjcgNjAuMy0xOGwwLTIwLjhjMC00MS44LTI2LjctNzcuNC02NC05MC41bDAtNTMuNWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OHpNNDQ4IDM3M2MtMTIuNyAxLjItMjUuMSA1LTM2LjUgMTEuNWwtNy4xIDQuMWMtNDIuNiAyNC4zLTk1LjQgMjEuNy0xMzUuMy02LjgtMjctMTkuMy02My4yLTE5LjMtOTAuMiAwLTM5LjkgMjguNS05Mi43IDMxLjItMTM1LjMgNi44bC03LjEtNC4xQzI1LjEgMzc4IDEyLjcgMzc0LjEgMCAzNzNsMCA3NWMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTc1eiJdCiAgICB9OwogICAgZmFCaXJ0aGRheUNha2UgPSBmYUNha2VDYW5kbGVzOwogICAgZmFDYWtlID0gZmFDYWtlQ2FuZGxlczsKICAgIGZhQnVnU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVnLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0OTAiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyNDEuOCAxNzYgMzQ0IDE3NmMxNC4yIDAgMjcuNyAyLjggNDAgOGwxMDguOC04MS42YzE0LjEtMTAuNiAzNC4yLTcuNyA0NC44IDYuNHM3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgOS41LS44IDE4LjctMi40IDI3LjhMNTY5IDUwMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5LjFDLTIuMy0uMy0yLjMtMTUuNSA3LTI0Ljl6TTM5OC4yIDQ2OGMtMjMuMiAyMi4xLTUzIDM3LjItODYuMiA0Mi4ybDAtMTI4LjQgODYuMiA4Ni4yek0yNjQgMzMzLjhsMCAxNzYuNGMtNTEuMi03LjctOTQuNS0zOS43LTExNy43LTgzLjlMODMuMiA0NzMuNmMtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw4My40LTYyLjVjLS4xLTIuNi0uMi01LjItLjItNy45bDAtMzItOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5OC44IDBjMy4zLTEzLjkgOS4zLTI2LjcgMTcuNi0zNy44TDI2NCAzMzMuOHpNMzU1LjYgMTI4bC04Mi40IDAtNzIuMy03Mi4zQzIxNi4xIDIyLjggMjQ5LjQgMCAyODggMCAzNDEgMCAzODQgNDMgMzg0IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40eiJdCiAgICB9OwogICAgZmFUYXJwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhcnAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3YiIsICJNNDQ4IDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ5LjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNMMzg2LjcgNDI5LjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMHptNS41IDIwOEwzNjAgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6TTk2IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURpYWdyYW1QcmVkZWNlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXByZWRlY2Vzc29yIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzciLCAiTTI4OS4yIDEzNy45YzIuNS02IDguMy05LjkgMTQuOC05LjlsNDAgMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05OCAwYzEuMyA1LjEgMiAxMC41IDIgMTZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDI0IDQwIDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTY0IDY0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjR6TTM4NCAzNTJsLTMyMCAwIDAgNjQgMzIwIDAgMC02NHptNjQgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjR6Il0KICAgIH07CiAgICBmYUZhY2VGbHVzaGVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZsdXNoZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjMsICJmbHVzaGVkIl0sICJmNTc5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xNjggMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bS04LTk2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhRmx1c2hlZDIgPSBmYUZhY2VGbHVzaGVkMjsKICAgIGZhRGlhZ3JhbU5leHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1uZXh0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzYiLCAiTTM4NCAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDAgMCA2NC0zMiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMyOTQuNSAyODggMjg4IDI4OGwtMzIgMCAwLTY0IDEyOCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NGwtMzQgMGM1LjYgMjEuNy0uNSA0NS4xLTE2LjcgNjEuM2wtNjQgNjRjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC02NC02NEM5OC42IDMzMy4xIDkyLjQgMzA5LjcgOTggMjg4bC0zNCAweiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWMiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MyIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDQwMHoiXQogICAgfTsKICAgIGZhU3BhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJiIiwgIk0xNjkuNyAyMjcuNWMzNC4zIDE4LjcgNjQuNSA0NC4xIDg4LjggNzQuNSAxMS4xIDEzLjkgMjEgMjguOSAyOS40IDQ0LjggOC41LTE1LjkgMTguMy0zMC44IDI5LjQtNDQuOCAyNC4zLTMwLjUgNTQuNS01NS45IDg4LjgtNzQuNSA0MS43LTIyLjcgODkuNC0zNS41IDEzOS43LTM1LjVsOS45IDBjMTEuMSAwIDIwLjEgOSAyMC4xIDIwLjEgMCAxNDgtMTE5LjkgMjY3LjktMjY3LjkgMjY3LjlsLTQwLjIgMEMxMTkuOSA0ODAgMCAzNjAuMSAwIDIxMi4xIDAgMjAxIDkgMTkyIDIwLjEgMTkybDkuOSAwYzUwLjQgMCA5OC4xIDEyLjggMTM5LjcgMzUuNXpNMzAzLjkgMzhjMTYuOSAxNS45IDYxLjQgNjMuNCA4OSAxNDIuMy00MC4xIDIwLjItNzUuOCA0OC4yLTEwNC45IDgyLjEtMjkuMi0zMy45LTY0LjgtNjEuOC0xMDQuOS04Mi4xIDI3LjYtNzguOSA3Mi4yLTEyNi40IDg5LTE0Mi4zIDQuMy00LjEgMTAtNiAxNS45LTZzMTEuNiAyIDE1LjkgNnoiXQogICAgfTsKICAgIGZhQmFyc1Byb2dyZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMtcHJvZ3Jlc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFza3MtYWx0Il0sICJmODI4IiwgIk0yODggMTYwbDk2IDAgMC02NC05NiAwIDAgNjR6TTAgMTYwTDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAyMjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZ6TTE2MCA0MTZsMjI0IDAgMC02NC0yMjQgMCAwIDY0ek0wIDQxNmwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2eiJdCiAgICB9OwogICAgZmFUYXNrc0FsdCA9IGZhQmFyc1Byb2dyZXNzOwogICAgZmFIZWFydENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGZkIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UtcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODk3LCAibWFycy1zdHJva2UtaCJdLCAiZjIyYiIsICJNMzIwLjUgMjU2YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6TTIwOC41IDgwYzg2LjMgMCAxNTguMSA2Mi4xIDE3My4xIDE0NC4xIDEtLjEgMS45LS4xIDIuOS0uMWwxNiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDYxLjQgMC0yMi40LTI4Yy0xMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWw2NCA4MGM5LjMgMTEuNyA5LjMgMjguMyAwIDQwbC02NCA4MGMtMTEgMTMuOC0zMS4yIDE2LTQ1IDVzLTE2LTMxLjItNS00NWwyMi40LTI4LTYxLjQgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTYgMGMtMSAwLTEuOSAwLTIuOS0uMS0xNSA4Mi04Ni44IDE0NC4xLTE3My4xIDE0NC4xLTk3LjIgMC0xNzYtNzguOC0xNzYtMTc2czc4LjgtMTc2IDE3Ni0xNzZ6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2VIID0gZmFNYXJzU3Ryb2tlUmlnaHQ7CiAgICBmYVRvd2VyT2JzZXJ2YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItb2JzZXJ2YXRpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU4NiIsICJNMjA5LjcgMy40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxNjAgODBjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS01LjYgMTEuMi0xNi45IDE3LjctMjguNiAxNy43bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEzIDAgMzIgMTkyIDQ1IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1IDAgMzItMTkyLTEzIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjLTExLjcgMC0yMy02LjUtMjguNi0xNy43LTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlsMTYwLTgwek0zMTAuNyA0NDhsLTg2LjctNjEuOS04Ni43IDYxLjkgMTczLjQgMHptLTE1My0xOTJsLTMuNSAyMS4yIDY5LjkgNDkuOSA2OS45LTQ5LjktMy41LTIxLjItMTMyLjcgMHptLTEyLjMgNzMuOWwtMTAuMSA2MC42IDQ3LjUtMzMuOS0zNy40LTI2Ljd6bTExOS45IDI2LjdsNDcuNSAzMy45LTEwLjEtNjAuNi0zNy40IDI2Ljd6TTE1MiAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFTdGVybGluZ1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rlcmxpbmctc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzE2MywgImdicCIsICJwb3VuZC1zaWduIl0sICJmMTU0IiwgIk05MS4zIDI4OGwtMzQuOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxLjQgMEMzNy4zIDE0Ny4zIDEwNS4xIDQyIDIwNy42IDQybDguMiAwYzMzLjYgMCA2Ni4yIDExLjMgOTIuNSAzMi4ybDE2LjEgMTIuN2MxMy45IDExIDE2LjIgMzEuMSA1LjIgNDVzLTMxLjEgMTYuMi00NSA1LjJsLTE2LjEtMTIuN2MtMTUtMTEuOS0zMy42LTE4LjQtNTIuOC0xOC40bC04LjIgMGMtNTcuMyAwLTk0LjcgNTkuOS02OS43IDExMS40IDMuNiA3LjQgNi42IDE0LjkgOS4xIDIyLjZsMTQ5LjUgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQxLjIgMGMxIDM1LjMtOC43IDcwLjYtMjguOSAxMDAuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMxMy4xLTE5LjYgMTkuMi00Mi42IDE4LjItNjUuNHoiXQogICAgfTsKICAgIGZhR2JwID0gZmFTdGVybGluZ1NpZ247CiAgICBmYVBvdW5kU2lnbiA9IGZhU3RlcmxpbmdTaWduOwogICAgZmFGYXVjZXREcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhdWNldC1kcmlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg4XSwgImUwMDYiLCAiTTIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsOTYgMCAwIDY0LTE4LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTAwLjEgMGMyMC4yIDI5IDUzLjkgNDggOTEuOSA0OHM3MS43LTE5IDkxLjktNDhsMzYuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MGwtMzIgMC0yMi42LTIyLjZjLTYtNi0xNC4xLTkuNC0yMi42LTkuNGwtMTguNyAwIDAtNjQgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDM2LjggNDU1LjRsLTE4LjIgNDIuNGMtMS44IDQuMS0yLjcgOC42LTIuNyAxMy4xbDAgMS4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xLjJjMC00LjUtLjktOC45LTIuNy0xMy4xbC0xOC4yLTQyLjRjLTEuOS00LjUtNi4zLTcuNC0xMS4yLTcuNHMtOS4yIDIuOS0xMS4yIDcuNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlSW5mbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaW5mbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJpbmZvLWNpcmNsZSJdLCAiZjA1YSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjQtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhSW5mb0NpcmNsZSA9IGZhQ2lyY2xlSW5mbzsKICAgIGZhRmVhdGhlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmZWF0aGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NzE4XSwgImY1MmQiLCAiTTM1MiAwYzQxIDAgODAuMyAxNi4zIDEwOS4yIDQ1LjJsNS41IDUuNWMyOSAyOSA0NS4zIDY4LjMgNDUuMyAxMDkuMiAwIDI0LjEtNS43IDQ3LjYtMTYuMiA2OC44LTEuOSAzLjctNS4zIDYuNS05LjMgNy43TDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDMyLjIgMGMxNC4zIDAgMjEuNCAxNy4yIDExLjMgMjcuM2wtMjIuNCAyMi40Yy0xLjkgMS45LTQuMiAzLjItNi43IDRsLTgxIDI0LjNjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMiAxMy4yIDAgMTguOSAxNS43IDcuOCAyMi45LTQxLjEgMjYuNi04OS4zIDQxLjEtMTM5IDQxLjFsLTg2IDAtNDggNDhjLTguOCA4LjgtMjMuMiA4LjgtMzIgMHMtOC44LTIzLjIgMC0zMkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw3OS41IDMzNi41Yy01LjcgNS43LTE1LjUgMS43LTE1LjUtNi40IDAtNjcuOSAyNy0xMzMgNzUtMTgxTDI0Mi44IDQ1LjJDMjcxLjcgMTYuMyAzMTEgMCAzNTIgMHoiXQogICAgfTsKICAgIGZhQm93bFJpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bC1yaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyZWIiLCAiTTE3NiA0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMjQgNDhsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNTYgMTYwbDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTAgMjgzLjRDMCAyNjguMyAxMi4zIDI1NiAyNy40IDI1Nmw0NTcuMSAwYzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40IDAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhsLTIzMS41IDBjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40ek0yMjQgMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tOTYgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMTA0IDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTIxNiA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjk2IDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTEyMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMzkyIDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTI5NiAxNmwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFySGFsZlN0cm9rZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdGFyLWhhbGYtYWx0Il0sICJmNWMwIiwgIk0yODguMSAzNTMuNmMxMCAwIDE5LjkgMi4zIDI5IDdsNzQuNCAzNy45LTEzLTgyLjVjLTMuMi0yMC4yIDMuNS00MC43IDE3LjktNTUuMmw1OS01OS4xLTgyLjUtMTMuMWMtMjAuMi0zLjItMzcuNy0xNS45LTQ3LTM0LjFsLTM4LTc0LjQgMCAyNzMuNnpNNDU3LjQgNDg5Yy03LjMgNS4zLTE3IDYuMS0yNSAyTDI4OC4xIDQxNy42IDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zbDE1OS45LTI1LjQgNzMuNi0xNDQuMmM0LjEtOCAxMi40LTEzLjEgMjEuNC0xMy4xczE3LjMgNS4xIDIxLjQgMTMuMUwzODMgMTI1LjMgNTQyLjkgMTUwLjdjOC45IDEuNCAxNi4zIDcuNyAxOS4xIDE2LjNzLjUgMTgtNS44IDI0LjRMNDQxLjcgMzA1LjkgNDY3IDQ2NS44YzEuNCA4LjktMi4zIDE3LjktOS42IDIzLjJ6Il0KICAgIH07CiAgICBmYVN0YXJIYWxmQWx0MiA9IGZhU3RhckhhbGZTdHJva2UyOwogICAgZmFUZW1wZXJhdHVyZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRlbXBlcmF0dXJlLWRvd24iXSwgImUwM2YiLCAiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSAzMTAuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40cy0xNi42LTMuNC0yMi42LTkuNGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTE3OC43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzguNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZURvd24gPSBmYVRlbXBlcmF0dXJlQXJyb3dEb3duOwogICAgZmFNYXNrVmVudGlsYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrLXZlbnRpbGF0b3IiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyNCIsICJNMTUyLjIgMTkyYy0xNS40IDM4LjMtMjQuMiA3Ny4yLTI0LjIgMTA4LjggMCAxMy4zIDEuNSAyNi4yIDQuNCAzOC43bC0xNy0zLjRjLTI5LjktNi01MS40LTMyLjItNTEuNC02Mi44bDAtODEuMyA4OC4yIDB6bTMyLjktNjRMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgxLjNjMCA2MSA0My4xIDExMy41IDEwMi45IDEyNS41bDY2LjMgMTMuM2MxOC43IDIyLjEgNDIuOSA0MCA3MC44IDUxLjhsMC04Ny44Yy0xMC4xLTE0LjItMTYtMzEuMy0xNi00OS43IDAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNCA1Mi41IDAgOTYgODQuOSA5NiAxMzQuNCAwIDE4LjQtNS45IDM1LjQtMTYgNDkuNmwwIDg3LjdjMjcuNi0xMS44IDUxLjctMjkuNiA3MC40LTUxLjZsNjYuNy0xMy4zYzU5LjgtMTIgMTAyLjktNjQuNSAxMDIuOS0xMjUuNWwwLTgxLjNjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTEyMS41IDBjLTM0LjgtNTQuMi04Mi41LTk2LTEzNC41LTk2LTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0zMDIuNSA2NGw4OC40IDAgMCA4MS4zYzAgMzAuNS0yMS41IDU2LjgtNTEuNCA2Mi44bC0xNyAzLjRjMi45LTEyLjQgNC41LTI1LjQgNC41LTM4LjcgMC0zMS42LTguOS03MC41LTI0LjQtMTA4Ljh6TTI4OCAzMjBsMCAxOTIgNjQgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhRmlsZVZpZGVvMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXZpZGVvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzgiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek04MCAzMDRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUFycm93VHJlbmREb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXRyZW5kLWRvd24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA5NyIsICJNMzg0IDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgyLjctMTY5LjQtMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNDIuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDMyMCAyMDUuMyA0NjYuNyAzNTIgMzg0IDM1MnoiXQogICAgfTsKICAgIGZhT2lsQ2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9pbC1jYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjYxMyIsICJNMzIwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyLTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzAgMCAyMS4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI1OS4xIDBjMTguNCAwIDM1LjgtNy45IDQ4LTIxLjdMNjMzLjUgMTg3LjdjMTIuMy0xMy45LS4zLTM1LjQtMTguNC0zMS41TDQ0OCAxOTIgMzk3LjUgMTY2LjhjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhsLTgwLjkgMCAwLTMyIDMyIDB6TTk2IDIwOGwwIDg2LjEtNDgtMjEuMyAwLTY0LjggNDggMHoiXQogICAgfTsKICAgIGZhUGVvcGxlQ2FycnlCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLWNhcnJ5LWJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJwZW9wbGUtY2FycnkiXSwgImY0Y2UiLCAiTTY0LTMyQTU2IDU2IDAgMSAxIDY0IDgwIDU2IDU2IDAgMSAxIDY0LTMyek0wIDE3MS4xYzAtMzIuNiAyNi41LTU5LjEgNTkuMS01OS4xIDIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM1LjggOC4yIDE1LjEgMTMuMSAyNS4xIDEzLjRsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzEwLS4zIDE5LjMtNS4yIDI1LjEtMTMuNGw0OC43LTY4LjJjMTMuNi0xOS4xIDM1LjYtMzAuNCA1OS4xLTMwLjQgMzIuNiAwIDU5LjEgMjYuNSA1OS4xIDU5LjFMNTc2IDI3MmMwIDMwLjItMTQuMiA1OC43LTM4LjQgNzYuOGwtNzYuOCA1Ny42Yy04LjEgNi0xMi44IDE1LjUtMTIuOCAyNS42bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTMwLjIgMTQuMi01OC43IDM4LjQtNzYuOGw0MS42LTMxLjIgMC04MC4xLTIuOCAzLjljLTE4IDI1LjItNDcuMSA0MC4yLTc4LjEgNDAuMkwzNTIgMjg4Yy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTEyMC40IDBjLS42IDAtMS4zIDAtMS45LS4xLS42IDAtMS4zIC4xLTEuOSAuMWwtMzEuMSAwYy0zMSAwLTYwLjEtMTUtNzguMS00MC4ybC0yLjgtMy45IDAgODAuMSA0MS42IDMxLjJDMTc3LjggMzczLjMgMTkyIDQwMS44IDE5MiA0MzJsMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwYzAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMMzguNCAzNDguOEMxNC4yIDMzMC43IDAgMzAyLjIgMCAyNzJMMCAxNzEuMXpNMCAzNzkuM2MzLjEgMi43IDYuMyA1LjQgOS42IDcuOUw2NCA0MjggNjQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNTI5LjcgMCA1MTJMMCAzNzkuM3pNNTY4IDI0YTU2IDU2IDAgMSAxIC0xMTIgMCA1NiA1NiAwIDEgMSAxMTIgMHptOCA0ODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04NCA1NC40LTQwLjhjMy4zLTIuNSA2LjUtNS4xIDkuNi03LjlMNTc2IDUxMnoiXQogICAgfTsKICAgIGZhUGVvcGxlQ2FycnkgPSBmYVBlb3BsZUNhcnJ5Qm94OwogICAgZmFDaGFpciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFpciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTY4MV0sICJmNmMwIiwgIk0xNTIgMjU2bDAtMTgxLjhjLTI0LjUgMjAuNS00MCA1MS40LTQwIDg1LjhsMCA5NiA0MCAwem00OCAwbDQ4IDAgMC0yMDUuNGMtNy43LTEuNy0xNS44LTIuNi0yNC0yLjZzLTE2LjMgLjktMjQgMi42TDIwMCAyNTZ6TTI5NiA3NC4ybDAgMTgxLjggNDAgMCAwLTk2YzAtMzQuNC0xNS41LTY1LjItNDAtODUuOHpNMzIgMjU2bDMyIDAgMC05NkM2NCA3MS42IDEzNS42IDAgMjI0IDBTMzg0IDcxLjYgMzg0IDE2MGwwIDk2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMjU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFXaW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcyZSIsICJNMjg4IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMzIgMTEyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyOCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4UzQwOC42IDAgMzYwIDBMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMjggNTEybDQwIDBjNDguNiAwIDg4LTM5LjQgODgtODhzLTM5LjQtODgtODgtODhMMzIgMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFMYXllckdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxheWVyLWdyb3VwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1ZmQiLCAiTTIzMi41IDUuMmMxNC45LTYuOSAzMi4xLTYuOSA0NyAwbDIxOC42IDEwMWM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMTQ5LjhDNS40IDE0NS44IDAgMTM3LjMgMCAxMjhzNS40LTE3LjkgMTMuOS0yMS44TDIzMi41IDUuMnpNNDguMSAyMTguNGwxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSAyNzcuOEM1LjQgMjczLjggMCAyNjUuMyAwIDI1NnM1LjQtMTcuOSAxMy45LTIxLjhsMzQuMS0xNS44ek0xMy45IDM2Mi4ybDM0LjEtMTUuOCAxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSA0MDUuOEM1LjQgNDAxLjggMCAzOTMuMyAwIDM4NHM1LjQtMTcuOSAxMy45LTIxLjh6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlTWFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtbWFzayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDYzIiwgIk00NDUuOSAxOTNjLS4xLS40LS4yLS45LS4yLTEuMy0xNS43LTEwOC40LTEwOC45LTE5MS43LTIyMS43LTE5MS43LTg1IDAtMTU5IDQ3LjQtMTk2LjkgMTE3LjJMMjgzLjMgMjg4IDQ1NiAyODggNDQyLjkgMzM2IDMzNiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTguMiAwLTguNyAzMi04OS41IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAuNiAwYy02LjcgMTkuMS0yNC44IDMyLTQ1LjMgMzJMMjg4IDQ2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMDQuNS0yNDcuNS0xNjVDMyAxODIuMSAwIDIwMi43IDAgMjI0IDAgMjc4IDE5LjEgMzI3LjUgNTAuOSAzNjYuMiA1OC45IDM3NS45IDY0IDM4Ny44IDY0IDQwMC40TDY0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjcuMyAwIC43IDAgMTMxLjMgMGM0NC45IDAgODMuOC0zMS4xIDkzLjYtNzQuOWwzMy45LTE1MC4zYzMuMy0xNC40LS4zLTI5LjUtOS43LTQxTDQ0NS45IDE5M3pNMjg4IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFIYW5kcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWxhbmd1YWdlIiwgInNpZ25pbmciXSwgImYyYTciLCAiTTUxMiAxNjBsLS4xIDcyLjZjMCA0NC44LTE3LjYgODcuMS00Ny45IDExOC40LS4zLTc3LTQwLjEtMTQ4LjQtMTA1LjQtMTg5LjNsLTEuOS0xLjJjMi41LTMuNyAyLjgtOC42IC40LTEyLjdsLTYyLTEwNy40Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOFMzMzAgNSAzMzYuNiAxNi41bDY4IDExNy44IDAgMCAwIDAgNDMuMyA3NSAuMS00OS4zYzAtMTcuNyAxNC40LTMyIDMyLTMyczMyIDE0LjQgMzIgMzJ6TTI5OC40IDEyNC4yYy0xNC4xLTguOC0yOS44LTEyLjctNDUuMi0xMi4xTDIxNi43IDQ4LjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44bDY3LjEgMTE2LjItMjctMTYuOXpNMjExLjkgODguNWwxNi40IDI4LjRjLTE1LjEgNS41LTI4LjYgMTUuNi0zOC4zIDI5LjdsLTE5LjctMzQuMmMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4Ljh6bS00Ni40IDYzLjdsMTIuNSAyMS43Yy0yIDguNi0yLjUgMTcuNS0xLjcgMjYuMWwtNC4zIDAgMCAwLTM0LjQgMC0xMy43LTIzLjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44ek0yMjguOSAxNzVjOS40LTE1IDI5LjEtMTkuNSA0NC4xLTEwLjJsNjAuMiAzNy42QzM4NC43IDIzNC43IDQxNiAyOTEuMiA0MTYgMzUybDAgOGMwIDgzLjktNjguMSAxNTItMTUyIDE1Mkw4OCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTIgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiA0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTI0IDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMMjQgMzY4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1NiAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDU2IDI5NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMzYgMCAwIDAgMCAwIDkzLjIgMC00Ni4yLTI4LjljLTE1LTkuNC0xOS41LTI5LjEtMTAuMi00NC4xeiJdCiAgICB9OwogICAgZmFTaWduTGFuZ3VhZ2UgPSBmYUhhbmRzOwogICAgZmFTaWduaW5nID0gZmFIYW5kczsKICAgIGZhVGFibGV0cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0OTAiLCAiTTQ5NS4zIDc2LjZjLTQuNi04LjctMTYuMy05LjctMjMuMy0yLjdMMjk3LjkgMjQ4Yy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNHpNMjQwLjcgMjExLjRjNC42IDguNyAxNi4zIDkuNyAyMy4zIDIuN0w0MzguMSA0MGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMTQ0IDIyNEM3OS4yIDIyNCAyNC40IDI2Ni44IDYuMyAzMjUuNiAzLjQgMzM1LjEgMTEgMzQ0IDIwLjkgMzQ0bDI0Ni4yIDBjOS45IDAgMTcuNS04LjkgMTQuNi0xOC40LS45LTMtMS45LTUuOS0zLTguNy0zNy40LTE4LjEtNjgtNDgtODctODQuOC0xNC45LTUuMi0zMC45LTguMS00Ny42LTguMXpNMjgxLjcgNDEwLjRjMi45LTkuNS00LjctMTguNC0xNC42LTE4LjRMMjAuOSAzOTJDMTEgMzkyIDMuNCA0MDAuOSA2LjMgNDEwLjQgMjQuNCA0NjkuMiA3OS4yIDUxMiAxNDQgNTEyczExOS42LTQyLjggMTM3LjctMTAxLjZ6Il0KICAgIH07CiAgICBmYVdlaWdodEhhbmdpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2VpZ2h0LWhhbmdpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVjZCIsICJNMjI0IDk2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyMi41IDMyYzMuNS0xMCA1LjUtMjAuOCA1LjUtMzIgMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAxMS4yIDEuOSAyMiA1LjUgMzJsLTIxLjggMGMtMjguMyAwLTUzLjIgMTguNS02MS4zIDQ1LjZMMi40IDQ0MC4yQy44IDQ0NS40IDAgNDUwLjggMCA0NTYuMiAwIDQ4NyAyNSA1MTIgNTUuOCA1MTJsNDAwLjQgMGMzMC44IDAgNTUuOC0yNSA1NS44LTU1LjggMC01LjQtLjgtMTAuOC0yLjQtMTZsLTgwLTI2Ni41Yy04LjEtMjcuMS0zMy00NS42LTYxLjMtNDUuNmwtMjEuOCAweiJdCiAgICB9OwogICAgZmFEaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MjJdLCAiZjUyMiIsICJNMTQxLjQgMi4zQzEwMy04IDYzLjUgMTQuOCA1My4zIDUzLjJMMi41IDI0Mi43Qy03LjggMjgxLjEgMTUgMzIwLjYgNTMuNCAzMzAuOWwxODkuNSA1MC44YzM4LjQgMTAuMyA3Ny45LTEyLjUgODguMi01MC45bDUwLjgtMTg5LjVjMTAuMy0zOC40LTEyLjUtNzcuOS01MC45LTg4LjJMMTQxLjQgMi4zem0yMyAyMDUuN2EzMiAzMiAwIDEgMSA1NS40LTMyIDMyIDMyIDAgMSAxIC01NS40IDMyek03OS4yIDIyMC4zYTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bTE4NSA5Ni40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6bTktMjA4LjRhMzIgMzIgMCAxIDEgMzIgNTUuNCAzMiAzMiAwIDEgMSAtMzItNTUuNHptLTEyMSAxNC40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6TTQxOCAxOTJMMzc3LjQgMzQzLjJjLTE3LjIgNjQtODMgMTAyLTE0NyA4NC45bC0zOC4zLTEwLjMgMCAzMC4yYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDQxOCAxOTJ6Il0KICAgIH07CiAgICBmYVNob3BTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0b3JlLWFsdC1zbGFzaCJdLCAiZTA3MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC0xOTAuM2MyNi44LTEuOSA0OC0yNC4zIDQ4LTUxLjYgMC04LTEuOS0xNi01LjUtMjMuMkw0OTcuNyA2Ny40QzQ4Ni44IDQ1LjcgNDY0LjcgMzIgNDQwLjQgMzJMMTM1LjYgMzJjLTEwLjcgMC0yMSAyLjctMzAuMiA3LjZMNDEtMjQuOXpNMzIxLjggMjU2TDQ0OCAyNTYgNDQ4IDM4Mi4yIDMyMS44IDI1NnpNMzUyIDQyMS44bC02NC02NCAwIDEwLjJjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTEyIDU4LjIgMC0xMzQuOC0xMzQuOC0yOS45IDU5LjljLTMuNiA3LjItNS41IDE1LjEtNS41IDIzLjIgMCAyNy4zIDIxLjIgNDkuNyA0OCA1MS42TDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEwLjJ6Il0KICAgIH07CiAgICBmYVN0b3JlQWx0U2xhc2ggPSBmYVNob3BTbGFzaDsKICAgIGZhU29ydERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInNvcnQtZGVzYyJdLCAiZjBkZCIsICJNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4eiJdCiAgICB9OwogICAgZmFTb3J0RGVzYyA9IGZhU29ydERvd247CiAgICBmYVBlc2V0YVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVzZXRhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTIyMSIsICJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDEwNC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAyMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjODAuMiAwIDE0Ni42LTU5IDE1OC4yLTEzNmwyNS44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1LjggMEMzODYuNiA5MSAzMjAuMiAzMiAyNDAgMzJMMTEyIDMyek0zMzMgMTY4bC0xODkgMCAwLTcyIDk2IDBjNDQuNyAwIDgyLjMgMzAuNiA5MyA3MnpNMTQ0IDIxNmwxODkgMGMtMTAuNyA0MS40LTQ4LjIgNzItOTMgNzJsLTk2IDAgMC03MnoiXQogICAgfTsKICAgIGZhVGFibGV0U2NyZWVuQnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxldC1zY3JlZW4tYnV0dG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhYmxldC1hbHQiXSwgImYzZmEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMjU2IDQzMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgNjRsLTMyMCAwIDAgMjg4IDMyMCAwIDAtMjg4eiJdCiAgICB9OwogICAgZmFUYWJsZXRBbHQgPSBmYVRhYmxldFNjcmVlbkJ1dHRvbjsKICAgIGZhSGFuZEhvbGRpbmdEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kLWhvbGRpbmctdXNkIl0sICJmNGMwIiwgIk0yODgtMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTItMS44IDBjLTM2LjYgMC02Ni4yIDI5LjctNjYuMiA2Ni4yIDAgMzMuNCAyNC45IDYxLjYgNTggNjUuN2w2MSA3LjZjNS4xIC42IDkgNSA5IDEwLjIgMCA1LjctNC42IDEwLjItMTAuMiAxMC4yTDI0MCAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4czEyLjUgMjggMjggMjhsMjQgMCAwIDEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMiAxLjggMGMzNi42IDAgNjYuMi0yOS43IDY2LjItNjYuMiAwLTMzLjQtMjQuOS02MS42LTU4LTY1LjdsLTYxLTcuNmMtNS4xLS42LTktNS05LTEwLjIgMC01LjcgNC42LTEwLjIgMTAuMi0xMC4yTDMyOCA3NmMxNS41IDAgMjgtMTIuNSAyOC0yOHMtMTIuNS0yOC0yOC0yOGwtMTYgMCAwLTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdVc2QgPSBmYUhhbmRIb2xkaW5nRG9sbGFyOwogICAgZmFTaGllbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzM3LCAic2hpZWxkLWJsYW5rIl0sICJmMTMyIiwgIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6Il0KICAgIH07CiAgICBmYVNoaWVsZEJsYW5rID0gZmFTaGllbGQ7CiAgICBmYUZhY2VMYXVnaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaCJdLCAiZjU5OSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTGF1Z2gyID0gZmFGYWNlTGF1Z2gyOwogICAgZmFIYW5kc0hvbGRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtaG9sZGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGMyIiwgIk04MCAxMDRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCA4MS45IDAgMTA0TDAgMzI1LjVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTI4IDQ5My4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdsNjYuNyAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNzguOWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjUuMy0yNS4zIDAgMGMtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4yIDExIDExIDkuMiAyOS4yLTMuNyAzNy44LTkuNyA2LjUtMjIuNyA1LjItMzEtMy4xTDk4LjcgMzA5LjVjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjNMODAgMTA0em00ODAgMGwwIDE2MC4yYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01MS4xIDUxLjFjLTguMyA4LjMtMjEuMyA5LjYtMzEgMy4xLTEyLjktOC42LTE0LjctMjYuOS0zLjctMzcuOCA3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4ybDAgMC0yNS4zIDI1LjNjLTIxIDIxLTMyLjggNDkuNS0zMi44IDc5LjJsMCA3OC45YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY2LjcgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOUw2NDAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQweiJdCiAgICB9OwogICAgZmFDYXJ0U2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1zaG9wcGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODcyMiwgInNob3BwaW5nLWNhcnQiXSwgImYwN2EiLCAiTTI0LTE2QzEwLjctMTYgMC01LjMgMCA4UzEwLjcgMzIgMjQgMzJsNDUuMyAwYzMuOSAwIDcuMiAyLjggNy45IDYuNmw1Mi4xIDI4Ni4zYzYuMiAzNC4yIDM2IDU5LjEgNzAuOCA1OS4xTDQ1NiAzODRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1NS45IDBjLTExLjYgMC0yMS41LTguMy0yMy42LTE5LjdsLTUuMS0yOC4zIDMwMy42IDBjMzAuOCAwIDU3LjItMjEuOSA2Mi45LTUyLjJMNTY4LjkgNjkuOUM1NzIuNiA1MC4yIDU1Ny41IDMyIDUzNy40IDMybC00MTIuNyAwLS40LTJjLTQuOC0yNi42LTI4LTQ2LTU1LjEtNDZMMjQtMTZ6TTIwOCA1MTJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yMjQgMGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQ2FydCA9IGZhQ2FydFNob3BwaW5nOwogICAgZmFPY3RhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9jdGFnb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MjFdLCAiZjMwNiIsICJNMTg4LjYgLjFjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDE5LjIgMTQzQzcuMiAxNTUgLjUgMTcxLjIgLjUgMTg4LjJsMCAxMzUuNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0wxNDMuNCA0OTMuMmMxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDEzNS42IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjYgMzY5YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNsMC0xMzUuNmMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNjkuNSAxOC44Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDE4OC42IC4xeiJdCiAgICB9OwogICAgZmFIYW5kUG9pbnRlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNWEiLCAiTTEyOCA0MGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTQ4LjJjOC41LTcuNiAxOS43LTEyLjIgMzItMTIuMiAyMC42IDAgMzguMiAxMyA0NSAzMS4yIDguOC05LjMgMjEuMi0xNS4yIDM1LTE1LjIgMjUuMyAwIDQ2IDE5LjUgNDcuOSA0NC4zIDguNS03LjcgMTkuOC0xMi4zIDMyLjEtMTIuMyAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtODUuMyAwYy01IDAtOS45LS4zLTE0LjctMS01NS4zLTUuNi0xMDYuMi0zNC0xNDAtNzlMOCAzMzZjLTEzLjMtMTcuNy05LjctNDIuNyA4LTU2czQyLjctOS43IDU2IDhsNTYgNzQuNyAwLTMyMi43ek0yNDAgMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il0KICAgIH07CiAgICBmYVJlZ2lzdGVyZWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlZ2lzdGVyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNzRdLCAiZjI1ZCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwMCAxNDRsODAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MiAwIDI4LjktMTcgNTMuOC00MS42IDY1LjNsMzAuMiA1MC4zYzYuOCAxMS40IDMuMSAyNi4xLTguMiAzMi45cy0yNi4xIDMuMS0zMi45LTguMmwtNDEtNjguMy0zNC40IDAgMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptNzIgOTZsOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwIDAgNDggNDggMHoiXQogICAgfTsKICAgIGZhSG91c2VTaWduYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2Utc2lnbmFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwMTIiLCAiTTUxNS45IDI0MGwtMTkuOSAwIDAgMTQ0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMzcgMGMtMjQtOTEuNy05My41LTE2NS0xODMtMTk0LjNsMC0xMy43LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjc2LjUtNC45QzI4My45LTEyIDI5My43LTE2IDMwNC0xNnMyMC4xIDQgMjcuNSAxMS4xTDUzNS40IDE5MS43YzUuNSA1LjMgOC42IDEyLjYgOC42IDIwLjIgMCAxNS41LTEyLjYgMjguMS0yOC4xIDI4LjF6TTI4MCAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwek0yNCAyODhjMTI4LjEgMCAyMzIgMTAzLjkgMjMyIDIzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODQtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0wIDQwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OC0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW5nbGFkZXNoaS10YWthLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTJlNiIsICJNMzYgMzIuM0MxOC40IDMwLjEgMi40IDQyLjUgLjMgNjBTMTAuNSA5My42IDI4IDk1LjhsNy45IDFjMTYgMiAyOCAxNS42IDI4IDMxLjhsMCAzMS41LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDE3NmMwIDUzIDQzIDk2IDk2IDk2bDMyIDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTJsMC0zMmMwLTUzLTQzLTk2LTk2LTk2bC0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTMxLjVDMTI4IDgwLjEgOTIgMzkuMiA0My45IDMzLjJsLTcuOS0xeiJdCiAgICB9OwogICAgaWNvbnMzID0gewogICAgICBmYTAsCiAgICAgIGZhMSwKICAgICAgZmEyLAogICAgICBmYTMsCiAgICAgIGZhNCwKICAgICAgZmE1LAogICAgICBmYTYsCiAgICAgIGZhNywKICAgICAgZmE4LAogICAgICBmYTksCiAgICAgIGZhRG9sbGFyU2lnbiwKICAgICAgZmFEb2xsYXIsCiAgICAgIGZhVXNkLAogICAgICBmYURvZywKICAgICAgZmFUcnVja01vdmluZywKICAgICAgZmFSb3RhdGUsCiAgICAgIGZhU3luY0FsdCwKICAgICAgZmFTcXVhcmVNaW51czogZmFTcXVhcmVNaW51czIsCiAgICAgIGZhTWludXNTcXVhcmU6IGZhTWludXNTcXVhcmUyLAogICAgICBmYUFsaWduSnVzdGlmeSwKICAgICAgZmFDYWxlbmRhckNoZWNrOiBmYUNhbGVuZGFyQ2hlY2syLAogICAgICBmYUZhY2VLaXNzOiBmYUZhY2VLaXNzMiwKICAgICAgZmFLaXNzOiBmYUtpc3MyLAogICAgICBmYUtpdGNoZW5TZXQsCiAgICAgIGZhRG5hLAogICAgICBmYUNoaWxkUmVhY2hpbmcsCiAgICAgIGZhUGFzdGU6IGZhUGFzdGUyLAogICAgICBmYUZpbGVDbGlwYm9hcmQ6IGZhRmlsZUNsaXBib2FyZDIsCiAgICAgIGZhTWV0ZW9yLAogICAgICBmYUdlYXJzLAogICAgICBmYUNvZ3MsCiAgICAgIGZhRmlsZUNpcmNsZVBsdXMsCiAgICAgIGZhSWNpY2xlcywKICAgICAgZmFBcnJvd1RyZW5kVXAsCiAgICAgIGZhSGV4YWdvbk5vZGVzQm9sdCwKICAgICAgZmFRdWVzdGlvbiwKICAgICAgZmFIYW5kc0JvdW5kLAogICAgICBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLAogICAgICBmYUZpbGVBcnJvd0Rvd24sCiAgICAgIGZhRmlsZURvd25sb2FkLAogICAgICBmYVBlcnNvbkJvb3RoLAogICAgICBmYUxvY3VzdCwKICAgICAgZmFSaWdodExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0UmlnaHQsCiAgICAgIGZhVHJ1Y2tEcm9wbGV0LAogICAgICBmYUhhbmRIb2xkaW5nTWVkaWNhbCwKICAgICAgZmFIYW5kUG9pbnRMZWZ0OiBmYUhhbmRQb2ludExlZnQyLAogICAgICBmYUNhbGN1bGF0b3IsCiAgICAgIGZhTWludXMsCiAgICAgIGZhU3VidHJhY3QsCiAgICAgIGZhQXJyb3dVcFpBLAogICAgICBmYVNvcnRBbHBoYVVwQWx0LAogICAgICBmYU1pY3JvcGhvbmVTbGFzaCwKICAgICAgZmFTcXVhcmVQZW4sCiAgICAgIGZhUGVuU3F1YXJlLAogICAgICBmYVBlbmNpbFNxdWFyZSwKICAgICAgZmFIYW5kRmlzdCwKICAgICAgZmFGaXN0UmFpc2VkLAogICAgICBmYUNvbW1lbnRTbXMsCiAgICAgIGZhU21zLAogICAgICBmYVNpbUNhcmQsCiAgICAgIGZhU2NhbGVCYWxhbmNlZCwKICAgICAgZmFCYWxhbmNlU2NhbGUsCiAgICAgIGZhQ2FyLAogICAgICBmYUF1dG9tb2JpbGUsCiAgICAgIGZhQ3JvcFNpbXBsZSwKICAgICAgZmFDcm9wQWx0LAogICAgICBmYU1lZGFsLAogICAgICBmYVNjcm9sbCwKICAgICAgZmFGaWxlRXhjZWw6IGZhRmlsZUV4Y2VsMiwKICAgICAgZmFGaWx0ZXIsCiAgICAgIGZhRHJ1bSwKICAgICAgZmFNYXBQaW4sCiAgICAgIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwKICAgICAgZmFCYWxhbmNlU2NhbGVSaWdodCwKICAgICAgZmFBcnJvd3NUb0NpcmNsZSwKICAgICAgZmFFbnZlbG9wZTogZmFFbnZlbG9wZTIsCiAgICAgIGZhQmFieSwKICAgICAgZmFTcXVhcmVDYXJldERvd246IGZhU3F1YXJlQ2FyZXREb3duMiwKICAgICAgZmFDYXJldFNxdWFyZURvd246IGZhQ2FyZXRTcXVhcmVEb3duMiwKICAgICAgZmFUZW50LAogICAgICBmYUEsCiAgICAgIGZhUGFyYWNodXRlQm94LAogICAgICBmYUNhcnRBcnJvd0Rvd24sCiAgICAgIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQ2xvdWRBcnJvd1VwLAogICAgICBmYUNsb3VkVXBsb2FkLAogICAgICBmYUNsb3VkVXBsb2FkQWx0LAogICAgICBmYUF0LAogICAgICBmYUluZGlhblJ1cGVlU2lnbiwKICAgICAgZmFJbmRpYW5SdXBlZSwKICAgICAgZmFJbnIsCiAgICAgIGZhVHJ1Y2s6IGZhVHJ1Y2syLAogICAgICBmYUNoYWxrYm9hcmRVc2VyLAogICAgICBmYUNoYWxrYm9hcmRUZWFjaGVyLAogICAgICBmYVVzZXJDaGVjaywKICAgICAgZmFVc2VyTmluamEsCiAgICAgIGZhUGxhbnRXaWx0LAogICAgICBmYVdlaWdodFNjYWxlLAogICAgICBmYVdlaWdodCwKICAgICAgZmFDYXJldFJpZ2h0LAogICAgICBmYUZsb3JpblNpZ24sCiAgICAgIGZhQmVsbDogZmFCZWxsMiwKICAgICAgZmFMYXJpU2lnbiwKICAgICAgZmFNaWxsU2lnbiwKICAgICAgZmFQZXJzb25Tbm93Ym9hcmRpbmcsCiAgICAgIGZhU25vd2JvYXJkaW5nLAogICAgICBmYVR0eSwKICAgICAgZmFUZWxldHlwZSwKICAgICAgZmFVc2Vyc1JlY3RhbmdsZSwKICAgICAgZmFNb2JpbGUsCiAgICAgIGZhTW9iaWxlQW5kcm9pZCwKICAgICAgZmFNb2JpbGVQaG9uZSwKICAgICAgZmFBcnJvd3NUdXJuVG9Eb3RzLAogICAgICBmYUV4Y2xhbWF0aW9uLAogICAgICBmYUNodXJjaCwKICAgICAgZmFUb2dnbGVPZmYsCiAgICAgIGZhU2hvZVByaW50cywKICAgICAgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhV2FsbGV0LAogICAgICBmYU1lc3NhZ2U6IGZhTWVzc2FnZTIsCiAgICAgIGZhQ29tbWVudEFsdDogZmFDb21tZW50QWx0MiwKICAgICAgZmFUcm9waHksCiAgICAgIGZhRmFjZURpenp5OiBmYUZhY2VEaXp6eTIsCiAgICAgIGZhRGl6enk6IGZhRGl6enkyLAogICAgICBmYUJhY3RlcmlhLAogICAgICBmYUVhckRlYWYsCiAgICAgIGZhRGVhZiwKICAgICAgZmFEZWFmbmVzcywKICAgICAgZmFIYXJkT2ZIZWFyaW5nLAogICAgICBmYVBlb3BsZUFycm93cywKICAgICAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsCiAgICAgIGZhSGFuZHNDbGFwcGluZywKICAgICAgZmFWaXJ1c0NvdmlkU2xhc2gsCiAgICAgIGZhQ2FsZW5kYXJEYXlzOiBmYUNhbGVuZGFyRGF5czIsCiAgICAgIGZhQ2FsZW5kYXJBbHQ6IGZhQ2FsZW5kYXJBbHQyLAogICAgICBmYURpYW1vbmRUdXJuUmlnaHQsCiAgICAgIGZhRGlyZWN0aW9ucywKICAgICAgZmFIYW5kUG9pbnRVcDogZmFIYW5kUG9pbnRVcDIsCiAgICAgIGZhQmV6aWVyQ3VydmUsCiAgICAgIGZhUGVyc29uSGFsZkRyZXNzLAogICAgICBmYVNxdWFyZVBvbGxIb3Jpem9udGFsLAogICAgICBmYVBvbGxILAogICAgICBmYVNjaG9vbENpcmNsZVhtYXJrLAogICAgICBmYUhhbmRMaXphcmQ6IGZhSGFuZExpemFyZDIsCiAgICAgIGZhQ2hhbGtib2FyZCwKICAgICAgZmFCbGFja2JvYXJkLAogICAgICBmYVVwUmlnaHRGcm9tU3F1YXJlLAogICAgICBmYUV4dGVybmFsTGlua0FsdCwKICAgICAgZmFTcXVhcmVGdWxsOiBmYVNxdWFyZUZ1bGwyLAogICAgICBmYUNsb3ZlciwKICAgICAgZmFUZWV0aE9wZW4sCiAgICAgIGZhQmFyc1N0YWdnZXJlZCwKICAgICAgZmFSZW9yZGVyLAogICAgICBmYVN0cmVhbSwKICAgICAgZmFXYXJlaG91c2UsCiAgICAgIGZhU3dhdGNoYm9vaywKICAgICAgZmFDYW1wZ3JvdW5kLAogICAgICBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LAogICAgICBmYUdsYXNzZXMsCiAgICAgIGZhQ2lyY2xlUGF1c2U6IGZhQ2lyY2xlUGF1c2UyLAogICAgICBmYVBhdXNlQ2lyY2xlOiBmYVBhdXNlQ2lyY2xlMiwKICAgICAgZmFNZW1vcnksCiAgICAgIGZhR2lmdCwKICAgICAgZmFNb25leUJpbGxXaGVhdCwKICAgICAgZmFEdW5nZW9uLAogICAgICBmYVN1aXRjYXNlTWVkaWNhbCwKICAgICAgZmFNZWRraXQsCiAgICAgIGZhUGVyc29uQ2FuZSwKICAgICAgZmFHYXVnZSwKICAgICAgZmFEYXNoYm9hcmQsCiAgICAgIGZhR2F1Z2VNZWQsCiAgICAgIGZhVGFjaG9tZXRlckFsdEF2ZXJhZ2UsCiAgICAgIGZhRW52ZWxvcGVPcGVuVGV4dCwKICAgICAgZmFUb29sYm94LAogICAgICBmYVBvd2VyT2ZmLAogICAgICBmYVNpZ25hbCwKICAgICAgZmFTaWduYWw1LAogICAgICBmYVNpZ25hbFBlcmZlY3QsCiAgICAgIGZhQXJyb3dzU3BpbiwKICAgICAgZmFKb2ludCwKICAgICAgZmFCcmFpbGxlLAogICAgICBmYUJhc2tldFNob3BwaW5nLAogICAgICBmYVNob3BwaW5nQmFza2V0LAogICAgICBmYUJyaWRnZSwKICAgICAgZmFQbGFuZUFycml2YWwsCiAgICAgIGZhQ2FzaFJlZ2lzdGVyLAogICAgICBmYVJpbmcsCiAgICAgIGZhU2hhcmVOb2RlcywKICAgICAgZmFTaGFyZUFsdCwKICAgICAgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCaW5vY3VsYXJzLAogICAgICBmYUtpcFNpZ24sCiAgICAgIGZhSGFyZERyaXZlOiBmYUhhcmREcml2ZTIsCiAgICAgIGZhSGRkOiBmYUhkZDIsCiAgICAgIGZhUmFua2luZ1N0YXIsCiAgICAgIGZhVXNlclRpZSwKICAgICAgZmFFbGxpcHNpcywKICAgICAgZmFFbGxpcHNpc0gsCiAgICAgIGZhU3RvcmVTbGFzaCwKICAgICAgZmFQZXJjZW50LAogICAgICBmYVBlcmNlbnRhZ2UsCiAgICAgIGZhRmlsZVppcHBlcjogZmFGaWxlWmlwcGVyMiwKICAgICAgZmFGaWxlQXJjaGl2ZTogZmFGaWxlQXJjaGl2ZTIsCiAgICAgIGZhRGlzcGxheSwKICAgICAgZmFJY29ucywKICAgICAgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCwKICAgICAgZmFSdWxlclZlcnRpY2FsLAogICAgICBmYU1hcExvY2F0aW9uRG90LAogICAgICBmYU1hcE1hcmtlZEFsdCwKICAgICAgZmFIZWFydENyYWNrLAogICAgICBmYUhlYXJ0QnJva2VuLAogICAgICBmYUNvdywKICAgICAgZmFSc3MsCiAgICAgIGZhRmVlZCwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3MsCiAgICAgIGZhU2VhcmNoLAogICAgICBmYUNsb3VkTW9vbiwKICAgICAgZmFCb3hlc1N0YWNrZWQsCiAgICAgIGZhQm94ZXMsCiAgICAgIGZhQm94ZXNBbHQsCiAgICAgIGZhQ29kZUJyYW5jaCwKICAgICAgZmFCYW4sCiAgICAgIGZhQ2FuY2VsLAogICAgICBmYUp1Z0RldGVyZ2VudCwKICAgICAgZmFSZXBseSwKICAgICAgZmFNYWlsUmVwbHksCiAgICAgIGZhU3VuUGxhbnRXaWx0LAogICAgICBmYUJhY3Rlcml1bSwKICAgICAgZmFSZWNvcmRWaW55bCwKICAgICAgZmFGbG9wcHlEaXNrOiBmYUZsb3BweURpc2syLAogICAgICBmYVNhdmU6IGZhU2F2ZTIsCiAgICAgIGZhVG9pbGV0c1BvcnRhYmxlLAogICAgICBmYU8sCiAgICAgIGZhUGFsZXR0ZSwKICAgICAgZmFVbmxvY2ssCiAgICAgIGZhRWFyTGlzdGVuLAogICAgICBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMsCiAgICAgIGZhQ29kZVB1bGxSZXF1ZXN0LAogICAgICBmYUtleSwKICAgICAgZmFTa3VsbCwKICAgICAgZmFNYXJzU3Ryb2tlVXAsCiAgICAgIGZhTWFyc1N0cm9rZVYsCiAgICAgIGZhRmlyZUZsYW1lU2ltcGxlLAogICAgICBmYUJ1cm4sCiAgICAgIGZhVHJlZSwKICAgICAgZmFTbW9nLAogICAgICBmYVMsCiAgICAgIGZhSmVkaSwKICAgICAgZmFQZXJzb25IaWtpbmcsCiAgICAgIGZhSGlraW5nLAogICAgICBmYUFycm93c1VwVG9MaW5lLAogICAgICBmYU1hcnNEb3VibGUsCiAgICAgIGZhVGhlcm1vbWV0ZXIsCiAgICAgIGZhUGFpbnRicnVzaCwKICAgICAgZmFQYWludEJydXNoLAogICAgICBmYU5ldXRlciwKICAgICAgZmFTcXVhcmVQaG9uZUZsaXAsCiAgICAgIGZhUGhvbmVTcXVhcmVBbHQsCiAgICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyLAogICAgICBmYUdyaW5Ub25ndWVTcXVpbnQ6IGZhR3JpblRvbmd1ZVNxdWludDIsCiAgICAgIGZhQ29tbWVudERvbGxhciwKICAgICAgZmFIaXBwbywKICAgICAgZmFCb3dsRm9vZCwKICAgICAgZmFTcXVhcmVWaXJ1cywKICAgICAgZmFDbG91ZFN1blJhaW4sCiAgICAgIGZhQXJyb3dSaWdodExvbmcsCiAgICAgIGZhTG9uZ0Fycm93UmlnaHQsCiAgICAgIGZhQnVpbGRpbmdVbiwKICAgICAgZmFUZW1wZXJhdHVyZUxvdywKICAgICAgZmFEb29yT3BlbiwKICAgICAgZmFBbGlnbkxlZnQsCiAgICAgIGZhQ2FtZXJhOiBmYUNhbWVyYTIsCiAgICAgIGZhQ2FtZXJhQWx0OiBmYUNhbWVyYUFsdDIsCiAgICAgIGZhVXNlcnNSYXlzLAogICAgICBmYVJhaW5ib3csCiAgICAgIGZhU2l0ZW1hcCwKICAgICAgZmFGYWNlR3JpblN0YXJzOiBmYUZhY2VHcmluU3RhcnMyLAogICAgICBmYUdyaW5TdGFyczogZmFHcmluU3RhcnMyLAogICAgICBmYVNvcnRVcCwKICAgICAgZmFTb3J0QXNjLAogICAgICBmYUV5ZTogZmFFeWUyLAogICAgICBmYUNhcmV0TGVmdCwKICAgICAgZmFBcHBsZVdob2xlLAogICAgICBmYUFwcGxlQWx0LAogICAgICBmYVNjcm9sbFRvcmFoLAogICAgICBmYVRvcmFoLAogICAgICBmYUhvdXNlTG9jaywKICAgICAgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsCiAgICAgIGZhVHJhc2gsCiAgICAgIGZhRmFjZVNhZFRlYXI6IGZhRmFjZVNhZFRlYXIyLAogICAgICBmYVNhZFRlYXI6IGZhU2FkVGVhcjIsCiAgICAgIGZhRmF4LAogICAgICBmYVBlcnNvbkNpcmNsZVBsdXMsCiAgICAgIGZhSGFtc2EsCiAgICAgIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhQ2xpcGJvYXJkQ2hlY2ssCiAgICAgIGZhU2hhcmVGcm9tU3F1YXJlOiBmYVNoYXJlRnJvbVNxdWFyZTIsCiAgICAgIGZhU2hhcmVTcXVhcmU6IGZhU2hhcmVTcXVhcmUyLAogICAgICBmYVJlY2VpcHQsCiAgICAgIGZhRXF1YWxzLAogICAgICBmYUNoZXZyb25VcCwKICAgICAgZmFWaXJ1c1NsYXNoLAogICAgICBmYVNsYXNoLAogICAgICBmYUV4cGFuZCwKICAgICAgZmFOb3RlU3RpY2t5OiBmYU5vdGVTdGlja3kyLAogICAgICBmYVN0aWNreU5vdGU6IGZhU3RpY2t5Tm90ZTIsCiAgICAgIGZhVGFibGVDb2x1bW5zLAogICAgICBmYUNvbHVtbnMsCiAgICAgIGZhUGVyc29uU2hlbHRlciwKICAgICAgZmFDaXJjbGVOb3RjaCwKICAgICAgZmFXYXRlciwKICAgICAgZmFEZWxldGVMZWZ0LAogICAgICBmYUJhY2tzcGFjZSwKICAgICAgZmFCcm9vbUJhbGwsCiAgICAgIGZhUXVpZGRpdGNoLAogICAgICBmYVF1aWRkaXRjaEJyb29tQmFsbCwKICAgICAgZmFKLAogICAgICBmYVNodXR0bGVTcGFjZSwKICAgICAgZmFTcGFjZVNodXR0bGUsCiAgICAgIGZhWWluWWFuZywKICAgICAgZmFTdG9wLAogICAgICBmYVRyb3dlbCwKICAgICAgZmFIYW5kQmFja0Zpc3Q6IGZhSGFuZEJhY2tGaXN0MiwKICAgICAgZmFIYW5kUm9jazogZmFIYW5kUm9jazIsCiAgICAgIGZhVGVtcGVyYXR1cmVIaWdoLAogICAgICBmYUdyZWF0ZXJUaGFuLAogICAgICBmYUNydXRjaCwKICAgICAgZmFTZXB0YWdvbiwKICAgICAgZmFIZXB0YWdvbiwKICAgICAgZmFTdHJlZXRWaWV3LAogICAgICBmYVdhdmVTcXVhcmUsCiAgICAgIGZhQW5nbGVMZWZ0LAogICAgICBmYVNjcmV3ZHJpdmVyLAogICAgICBmYVRyYWN0b3IsCiAgICAgIGZhQnJpZGdlQ2lyY2xlWG1hcmssCiAgICAgIGZhVmlhbHMsCiAgICAgIGZhU3RldGhvc2NvcGUsCiAgICAgIGZhUG9kY2FzdCwKICAgICAgZmFBcnJvd1VwUmlnaHREb3RzLAogICAgICBmYUNoZXNzUXVlZW46IGZhQ2hlc3NRdWVlbjIsCiAgICAgIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRWxsaXBzaXNWZXJ0aWNhbCwKICAgICAgZmFFbGxpcHNpc1YsCiAgICAgIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwKICAgICAgZmFOb3RFcXVhbCwKICAgICAgZmFUcmFpblRyYW0sCiAgICAgIGZhUGxhbmVEZXBhcnR1cmUsCiAgICAgIGZhUmlnaHRUb0JyYWNrZXQsCiAgICAgIGZhU2lnbkluQWx0LAogICAgICBmYVNkQ2FyZCwKICAgICAgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVNoZWtlbFNpZ24sCiAgICAgIGZhSWxzLAogICAgICBmYVNoZWtlbCwKICAgICAgZmFTaGVxZWwsCiAgICAgIGZhU2hlcWVsU2lnbiwKICAgICAgZmFSYWRpbywKICAgICAgZmFIYW5kRG90cywKICAgICAgZmFBbGxlcmdpZXMsCiAgICAgIGZhQm9va1NrdWxsLAogICAgICBmYUJvb2tEZWFkLAogICAgICBmYVVubG9ja0tleWhvbGUsCiAgICAgIGZhVW5sb2NrQWx0LAogICAgICBmYUZpbGVBcnJvd1VwLAogICAgICBmYUZpbGVVcGxvYWQsCiAgICAgIGZhRmFjZUdyaW5UZWFyczogZmFGYWNlR3JpblRlYXJzMiwKICAgICAgZmFHcmluVGVhcnM6IGZhR3JpblRlYXJzMiwKICAgICAgZmFQZW5Ub1NxdWFyZTogZmFQZW5Ub1NxdWFyZTIsCiAgICAgIGZhRWRpdDogZmFFZGl0MiwKICAgICAgZmFFYXJ0aEV1cm9wZSwKICAgICAgZmFHbG9iZUV1cm9wZSwKICAgICAgZmFGYWNlR3JpbkJlYW1Td2VhdDogZmFGYWNlR3JpbkJlYW1Td2VhdDIsCiAgICAgIGZhR3JpbkJlYW1Td2VhdDogZmFHcmluQmVhbVN3ZWF0MiwKICAgICAgZmFDaXJjbGVIYWxmU3Ryb2tlLAogICAgICBmYUFkanVzdCwKICAgICAgZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uLAogICAgICBmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrLAogICAgICBmYVRydWNrRmllbGRVbiwKICAgICAgZmFDbG9jazogZmFDbG9jazIsCiAgICAgIGZhQ2xvY2tGb3VyOiBmYUNsb2NrRm91cjIsCiAgICAgIGZhQm9vaywKICAgICAgZmFGYWNlTGF1Z2hXaW5rOiBmYUZhY2VMYXVnaFdpbmsyLAogICAgICBmYUxhdWdoV2luazogZmFMYXVnaFdpbmsyLAogICAgICBmYUNsb3VkTWVhdGJhbGwsCiAgICAgIGZhQ2hhcnRBcmVhLAogICAgICBmYUFyZWFDaGFydCwKICAgICAgZmFSdXBpYWhTaWduLAogICAgICBmYVRleHRXaWR0aCwKICAgICAgZmFTYXRlbGxpdGUsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsCiAgICAgIGZhU2VhcmNoTWludXMsCiAgICAgIGZhUGVvcGxlR3JvdXAsCiAgICAgIGZhU3F1YXJlQmluYXJ5LAogICAgICBmYU1hc2tzVGhlYXRlciwKICAgICAgZmFUaGVhdGVyTWFza3MsCiAgICAgIGZhQ2FydFBsdXMsCiAgICAgIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsCiAgICAgIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsCiAgICAgIGZhQXNsSW50ZXJwcmV0aW5nLAogICAgICBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsCiAgICAgIGZhVGFibGVDZWxsc1Jvd1VubG9jaywKICAgICAgZmFSb2NrZXQsCiAgICAgIGZhU2hyaW1wLAogICAgICBmYVRlbmdlU2lnbiwKICAgICAgZmFUZW5nZSwKICAgICAgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLAogICAgICBmYUNsaW5pY01lZGljYWwsCiAgICAgIGZhVXNlcnNTbGFzaCwKICAgICAgZmFQYXBlclBsYW5lOiBmYVBhcGVyUGxhbmUyLAogICAgICBmYUJvb2tBdGxhcywKICAgICAgZmFBdGxhcywKICAgICAgZmFUYWJsZSwKICAgICAgZmFIZWFydDogZmFIZWFydDIsCiAgICAgIGZhQ2lyY2xlQ2hldnJvblVwLAogICAgICBmYUNoZXZyb25DaXJjbGVVcCwKICAgICAgZmFCYXR0ZXJ5SGFsZiwKICAgICAgZmFCYXR0ZXJ5MywKICAgICAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZTMsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnOiBmYUZvbnRBd2Vzb21lRmxhZzMsCiAgICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDogZmFGb250QXdlc29tZUxvZ29GdWxsMywKICAgICAgZmFIYW5kY3VmZnMsCiAgICAgIGZhSGF0Q293Ym95U2lkZSwKICAgICAgZmFJbmR1c3RyeSwKICAgICAgZmFMaW5lc0xlYW5pbmcsCiAgICAgIGZhUGFzc3BvcnQsCiAgICAgIGZhSW5maW5pdHksCiAgICAgIGZhQ2xvbmU6IGZhQ2xvbmUyLAogICAgICBmYUZvcndhcmQsCiAgICAgIGZhTSwKICAgICAgZmFSb2FkU3Bpa2VzLAogICAgICBmYU1vdW50YWluLAogICAgICBmYUNoZXNzLAogICAgICBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycywKICAgICAgZmFUZW1wZXJhdHVyZTMsCiAgICAgIGZhVGhlcm1vbWV0ZXIzLAogICAgICBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycywKICAgICAgZmFCLAogICAgICBmYVNoaWVsZFZpcnVzLAogICAgICBmYUxpdGVjb2luU2lnbiwKICAgICAgZmFEaWNlRDYsCiAgICAgIGZhR3JpcExpbmVzVmVydGljYWwsCiAgICAgIGZhR29sZkJhbGxUZWUsCiAgICAgIGZhR29sZkJhbGwsCiAgICAgIGZhSGV4YWdvbiwKICAgICAgZmFGb2xkZXJPcGVuOiBmYUZvbGRlck9wZW4yLAogICAgICBmYUthYWJhLAogICAgICBmYUhhbmRIb2xkaW5nLAogICAgICBmYVNpbmdsZVF1b3RlUmlnaHQsCiAgICAgIGZhQm90dGxlRHJvcGxldCwKICAgICAgZmFXaW5kb3dNaW5pbWl6ZTogZmFXaW5kb3dNaW5pbWl6ZTIsCiAgICAgIGZhQ2hldnJvblJpZ2h0LAogICAgICBmYUVnZywKICAgICAgZmFMYW5kbWFya0RvbWUsCiAgICAgIGZhTGFuZG1hcmtBbHQsCiAgICAgIGZhV29ybSwKICAgICAgZmFVc2VySW5qdXJlZCwKICAgICAgZmFTdHJpa2V0aHJvdWdoLAogICAgICBmYUJsb2csCiAgICAgIGZhU3RvcHdhdGNoMjAsCiAgICAgIGZhVHJ1Y2tQaWNrdXAsCiAgICAgIGZhU2VlZGxpbmcsCiAgICAgIGZhU3Byb3V0LAogICAgICBmYVRyYW5zZ2VuZGVyLAogICAgICBmYVRyYW5zZ2VuZGVyQWx0LAogICAgICBmYVN0YXJIYWxmOiBmYVN0YXJIYWxmMiwKICAgICAgZmFQaG90b0ZpbG0sCiAgICAgIGZhUGhvdG9WaWRlbywKICAgICAgZmFQdW1wTWVkaWNhbCwKICAgICAgZmFGaXJlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsCiAgICAgIGZhU2VhcmNoUGx1cywKICAgICAgZmFGbGFzaywKICAgICAgZmFBbGlnblJpZ2h0LAogICAgICBmYUNhYmxlQ2FyLAogICAgICBmYVRyYW0sCiAgICAgIGZhS2l0TWVkaWNhbCwKICAgICAgZmFGaXJzdEFpZCwKICAgICAgZmFHcmlwTGluZXMsCiAgICAgIGZhQnVyZ2VyLAogICAgICBmYUhhbWJ1cmdlciwKICAgICAgZmFTbm93bWFuLAogICAgICBmYUhvdGVsLAogICAgICBmYVByaW50LAogICAgICBmYVZvbGxleWJhbGwsCiAgICAgIGZhVm9sbGV5YmFsbEJhbGwsCiAgICAgIGZhVHJhZmZpY0xpZ2h0LAogICAgICBmYVBsYW5lQ2lyY2xlQ2hlY2ssCiAgICAgIGZhVXNlcnMsCiAgICAgIGZhQ2VydGlmaWNhdGUsCiAgICAgIGZhQWxhcm1DbG9jazogZmFBbGFybUNsb2NrMiwKICAgICAgZmFIZWxpY29wdGVyU3ltYm9sLAogICAgICBmYUhvdXNlQ2hpbW5leUNyYWNrLAogICAgICBmYUhvdXNlRGFtYWdlLAogICAgICBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsCiAgICAgIGZhRGF0YWJhc2UsCiAgICAgIGZhTmV3c3BhcGVyOiBmYU5ld3NwYXBlcjIsCiAgICAgIGZhQ2xvdWRSYWluLAogICAgICBmYU1heGltaXplLAogICAgICBmYUV4cGFuZEFycm93c0FsdCwKICAgICAgZmFMb2NhdGlvbkFycm93LAogICAgICBmYUNpdHksCiAgICAgIGZhWFJheSwKICAgICAgZmFVbWJyZWxsYUJlYWNoLAogICAgICBmYUFycm93UmlnaHRUb0JyYWNrZXQsCiAgICAgIGZhU2lnbkluLAogICAgICBmYUhlYWRzZXQsCiAgICAgIGZhU3Bsb3RjaCwKICAgICAgZmFVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0VXAsCiAgICAgIGZhSGV4YWdvbk5vZGVzLAogICAgICBmYUhvc3BpdGFsOiBmYUhvc3BpdGFsMiwKICAgICAgZmFIb3NwaXRhbEFsdDogZmFIb3NwaXRhbEFsdDIsCiAgICAgIGZhSG9zcGl0YWxXaWRlOiBmYUhvc3BpdGFsV2lkZTIsCiAgICAgIGZhUGVyc29uSGFyYXNzaW5nLAogICAgICBmYU1vbmV5QmlsbFRyZW5kVXAsCiAgICAgIGZhUGVuUnVsZXIsCiAgICAgIGZhUGVuY2lsUnVsZXIsCiAgICAgIGZhUmVwZWF0LAogICAgICBmYUJvbmUsCiAgICAgIGZhRmlyZUZsYW1lQ3VydmVkLAogICAgICBmYUZpcmVBbHQsCiAgICAgIGZhQnVzU2ltcGxlLAogICAgICBmYUJ1c0FsdCwKICAgICAgZmFWZW51c01hcnMsCiAgICAgIGZhQmxlbmRlciwKICAgICAgZmFVLAogICAgICBmYVNoYXJlLAogICAgICBmYU1haWxGb3J3YXJkLAogICAgICBmYVBob25lRmxpcCwKICAgICAgZmFQaG9uZUFsdCwKICAgICAgZmFUb2lsZXRQb3J0YWJsZSwKICAgICAgZmFQZXJzb25QcmVnbmFudCwKICAgICAgZmFMZXNzVGhhbiwKICAgICAgZmFTdXBlcnNjcmlwdCwKICAgICAgZmFDaXJjbGVTdG9wOiBmYUNpcmNsZVN0b3AyLAogICAgICBmYVN0b3BDaXJjbGU6IGZhU3RvcENpcmNsZTIsCiAgICAgIGZhQXJyb3dzVXBEb3duLAogICAgICBmYUFycm93c1YsCiAgICAgIGZhUG9vU3Rvcm0sCiAgICAgIGZhUG9vQm9sdCwKICAgICAgZmFWaWRlb1NsYXNoLAogICAgICBmYVNxdWFyZVhtYXJrLAogICAgICBmYVRpbWVzU3F1YXJlLAogICAgICBmYVhtYXJrU3F1YXJlLAogICAgICBmYUhhbmRIb2xkaW5nRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ1dhdGVyLAogICAgICBmYVdvblNpZ24sCiAgICAgIGZhS3J3LAogICAgICBmYVdvbiwKICAgICAgZmFPYmplY3RVbmdyb3VwOiBmYU9iamVjdFVuZ3JvdXAyLAogICAgICBmYUNvbW1lbnQ6IGZhQ29tbWVudDIsCiAgICAgIGZhSGlsbEF2YWxhbmNoZSwKICAgICAgZmFBcnJvd3NUb0V5ZSwKICAgICAgZmFTbm93cGxvdywKICAgICAgZmFDaGFydEdhbnR0LAogICAgICBmYVZpZGVvLAogICAgICBmYVZpZGVvQ2FtZXJhLAogICAgICBmYUNoZXNzUGF3bjogZmFDaGVzc1Bhd24yLAogICAgICBmYVN5bmFnb2d1ZSwKICAgICAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrLAogICAgICBmYUNhbGVuZGFyUGx1czogZmFDYWxlbmRhclBsdXMyLAogICAgICBmYVdoZWVsY2hhaXJNb3ZlLAogICAgICBmYVdoZWVsY2hhaXJBbHQsCiAgICAgIGZhVXNlclNoaWVsZCwKICAgICAgZmFCb2xkLAogICAgICBmYUhlYXJ0UHVsc2UsCiAgICAgIGZhSGVhcnRiZWF0LAogICAgICBmYVNxdWFyZVJvb3RWYXJpYWJsZSwKICAgICAgZmFTcXVhcmVSb290QWx0LAogICAgICBmYUhhbmRzQnViYmxlcywKICAgICAgZmFIYW5kc1dhc2gsCiAgICAgIGZhTWFya2VyLAogICAgICBmYUNsaXBib2FyZDogZmFDbGlwYm9hcmQyLAogICAgICBmYVBsYWNlT2ZXb3JzaGlwLAogICAgICBmYUNhbm5hYmlzLAogICAgICBmYVBlb3BsZVJvb2YsCiAgICAgIGZhRGlzZWFzZSwKICAgICAgZmFCb29rQmlibGUsCiAgICAgIGZhQmlibGUsCiAgICAgIGZhQ2hlc3NCb2FyZCwKICAgICAgZmFNYXJzLAogICAgICBmYUxhcHRvcCwKICAgICAgZmFVc2VyWG1hcmssCiAgICAgIGZhVXNlclRpbWVzLAogICAgICBmYUZsYWdVc2EsCiAgICAgIGZhSGFuZE1pZGRsZUZpbmdlciwKICAgICAgZmFNb3J0YXJQZXN0bGUsCiAgICAgIGZhSGVhZFNpZGVDb3VnaCwKICAgICAgZmFQbGFuZUxvY2ssCiAgICAgIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsCiAgICAgIGZhQmF0dGVyeTQsCiAgICAgIGZhRnJhbmNTaWduLAogICAgICBmYUZpbHRlckNpcmNsZURvbGxhciwKICAgICAgZmFGdW5uZWxEb2xsYXIsCiAgICAgIGZhQ2hlZXNlLAogICAgICBmYUNpcmNsZUgsCiAgICAgIGZhSG9zcGl0YWxTeW1ib2wsCiAgICAgIGZhU2Nob29sLAogICAgICBmYURpY2VGaXZlLAogICAgICBmYVRvcm5hZG8sCiAgICAgIGZhSmV0RmlnaHRlciwKICAgICAgZmFGaWdodGVySmV0LAogICAgICBmYVRodW1ic0Rvd246IGZhVGh1bWJzRG93bjIsCiAgICAgIGZhQnJvb20sCiAgICAgIGZhRmlsZUltcG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0VG9GaWxlLAogICAgICBmYVV0ZW5zaWxzLAogICAgICBmYUN1dGxlcnksCiAgICAgIGZhSWRCYWRnZTogZmFJZEJhZGdlMiwKICAgICAgZmFTcGlkZXIsCiAgICAgIGZhTW9iaWxlUmV0cm8sCiAgICAgIGZhU2lnbnNQb3N0LAogICAgICBmYU1hcFNpZ25zLAogICAgICBmYUdyb3VwQXJyb3dzUm90YXRlLAogICAgICBmYUFycm93c1NwbGl0VXBBbmRMZWZ0LAogICAgICBmYUZpbGxEcmlwLAogICAgICBmYVNoaWVsZEhlYXJ0LAogICAgICBmYVBlcnNvblNraWluZ05vcmRpYywKICAgICAgZmFTa2lpbmdOb3JkaWMsCiAgICAgIGZhU3F1YXJlQ2hlY2s6IGZhU3F1YXJlQ2hlY2syLAogICAgICBmYUNoZWNrU3F1YXJlOiBmYUNoZWNrU3F1YXJlMiwKICAgICAgZmFCYXRoLAogICAgICBmYUJhdGh0dWIsCiAgICAgIGZhQ2hlc3NCaXNob3A6IGZhQ2hlc3NCaXNob3AyLAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsCiAgICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LAogICAgICBmYURyYXdQb2x5Z29uLAogICAgICBmYVZlY3RvclBvbHlnb24sCiAgICAgIGZhSUN1cnNvciwKICAgICAgZmFIZWFydENpcmNsZVBsdXMsCiAgICAgIGZhU2hpZWxkRG9nLAogICAgICBmYUdyZWF0ZXJUaGFuRXF1YWwsCiAgICAgIGZhRW52ZWxvcGVPcGVuOiBmYUVudmVsb3BlT3BlbjIsCiAgICAgIGZhTW91bmQsCiAgICAgIGZhVm9pY2VtYWlsLAogICAgICBmYVZlc3QsCiAgICAgIGZhQXVkaW9EZXNjcmlwdGlvbiwKICAgICAgZmFXLAogICAgICBmYUV5ZURyb3BwZXIsCiAgICAgIGZhRXllRHJvcHBlckVtcHR5LAogICAgICBmYUV5ZWRyb3BwZXIsCiAgICAgIGZhQ2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmsyLAogICAgICBmYVRpbWVzQ2lyY2xlOiBmYVRpbWVzQ2lyY2xlMiwKICAgICAgZmFYbWFya0NpcmNsZTogZmFYbWFya0NpcmNsZTIsCiAgICAgIGZhVHJhaWxlciwKICAgICAgZmFUdXJraXNoTGlyYVNpZ24sCiAgICAgIGZhVHJ5LAogICAgICBmYVR1cmtpc2hMaXJhLAogICAgICBmYVZvbGNhbm8sCiAgICAgIGZhV2FuZFNwYXJrbGVzLAogICAgICBmYU1pY3JvcGhvbmUsCiAgICAgIGZhQ3Jvd24sCiAgICAgIGZhVGVudEFycm93VHVybkxlZnQsCiAgICAgIGZhVHJ1Y2tGYXN0LAogICAgICBmYVNoaXBwaW5nRmFzdCwKICAgICAgZmFVc2VyUGVuLAogICAgICBmYVVzZXJFZGl0LAogICAgICBmYVVzZXJDbG9jaywKICAgICAgZmFTaG93ZXIsCiAgICAgIGZhU3F1YXJlQ2FyZXRVcDogZmFTcXVhcmVDYXJldFVwMiwKICAgICAgZmFDYXJldFNxdWFyZVVwOiBmYUNhcmV0U3F1YXJlVXAyLAogICAgICBmYU1hcExvY2F0aW9uLAogICAgICBmYU1hcE1hcmtlZCwKICAgICAgZmFQZW5GYW5jeSwKICAgICAgZmFFdXJvU2lnbiwKICAgICAgZmFFdXIsCiAgICAgIGZhRXVybywKICAgICAgZmFIb3VzZUNpcmNsZVhtYXJrLAogICAgICBmYUxpcmFTaWduLAogICAgICBmYVllblNpZ24sCiAgICAgIGZhQ255LAogICAgICBmYUpweSwKICAgICAgZmFSbWIsCiAgICAgIGZhWWVuLAogICAgICBmYUJveE9wZW4sCiAgICAgIGZhVHJ1Y2tGaWVsZCwKICAgICAgZmFMb2NhdGlvblBpbkxvY2ssCiAgICAgIGZhUGVyc29uUHJheWluZywKICAgICAgZmFQcmF5LAogICAgICBmYUNsaXBib2FyZExpc3QsCiAgICAgIGZhU2Fja0RvbGxhciwKICAgICAgZmFNb3VudGFpblN1biwKICAgICAgZmFBcnJvd1VwV2lkZVNob3J0LAogICAgICBmYVNvcnRBbW91bnRVcCwKICAgICAgZmFVc2Vyc0xpbmUsCiAgICAgIGZhU3Rhck9mRGF2aWQsCiAgICAgIGZhTm90ZXNNZWRpY2FsLAogICAgICBmYUF1c3RyYWxTaWduLAogICAgICBmYUNsaXBib2FyZFVzZXIsCiAgICAgIGZhRmlsZUltYWdlOiBmYUZpbGVJbWFnZTIsCiAgICAgIGZhU3F1YXJlQ2FyZXRSaWdodDogZmFTcXVhcmVDYXJldFJpZ2h0MiwKICAgICAgZmFDYXJldFNxdWFyZVJpZ2h0OiBmYUNhcmV0U3F1YXJlUmlnaHQyLAogICAgICBmYVZpYWwsCiAgICAgIGZhSGVsaWNvcHRlciwKICAgICAgZmFNaXR0ZW4sCiAgICAgIGZhR2FzUHVtcCwKICAgICAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLAogICAgICBmYVBlcnNvblNrYXRpbmcsCiAgICAgIGZhU2thdGluZywKICAgICAgZmFTdW46IGZhU3VuMiwKICAgICAgZmFCYXNlYmFsbCwKICAgICAgZmFCYXNlYmFsbEJhbGwsCiAgICAgIGZhSW1hZ2U6IGZhSW1hZ2UyLAogICAgICBmYU5vdGRlZiwKICAgICAgZmFCYXNrZXRiYWxsLAogICAgICBmYUJhc2tldGJhbGxCYWxsLAogICAgICBmYVBlbmNpbCwKICAgICAgZmFQZW5jaWxBbHQsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsCiAgICAgIGZhRGljZVNpeCwKICAgICAgZmFBbmdsZXNEb3duLAogICAgICBmYUFuZ2xlRG91YmxlRG93biwKICAgICAgZmFTeXJpbmdlLAogICAgICBmYVdoZWF0QXduLAogICAgICBmYVdoZWF0QWx0LAogICAgICBmYVBsYW5lVXAsCiAgICAgIGZhQWxpZ25DZW50ZXIsCiAgICAgIGZhSG9ja2V5UHVjaywKICAgICAgZmFDaXJjbGVBcnJvd0xlZnQsCiAgICAgIGZhQXJyb3dDaXJjbGVMZWZ0LAogICAgICBmYVBsdWdDaXJjbGVCb2x0LAogICAgICBmYVJlc3Ryb29tLAogICAgICBmYUFuY2hvckxvY2ssCiAgICAgIGZhVGltZWxpbmUsCiAgICAgIGZhTGlnaHRidWxiOiBmYUxpZ2h0YnVsYjIsCiAgICAgIGZhQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd0NpcmNsZVJpZ2h0LAogICAgICBmYU1hcnNBbmRWZW51cywKICAgICAgZmFOZXR3b3JrV2lyZWQsCiAgICAgIGZhQnVpbGRpbmdTaGllbGQsCiAgICAgIGZhQ29kZSwKICAgICAgZmFGZWF0aGVyUG9pbnRlZCwKICAgICAgZmFGZWF0aGVyQWx0LAogICAgICBmYUZpbGVDaXJjbGVRdWVzdGlvbiwKICAgICAgZmFTaWduYXR1cmUsCiAgICAgIGZhRWFydGhBbWVyaWNhcywKICAgICAgZmFFYXJ0aCwKICAgICAgZmFFYXJ0aEFtZXJpY2EsCiAgICAgIGZhR2xvYmVBbWVyaWNhcywKICAgICAgZmFDYXJyb3QsCiAgICAgIGZhVGVtcGVyYXR1cmVGdWxsLAogICAgICBmYVRlbXBlcmF0dXJlNCwKICAgICAgZmFUaGVybW9tZXRlcjQsCiAgICAgIGZhVGhlcm1vbWV0ZXJGdWxsLAogICAgICBmYVRhYmxlQ2VsbHNSb3dMb2NrLAogICAgICBmYUJvbHRMaWdodG5pbmcsCiAgICAgIGZhQ2xvdWRTaG93ZXJzV2F0ZXIsCiAgICAgIGZhQXJyb3dVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93VXAsCiAgICAgIGZhQWRkcmVzc0NhcmQ6IGZhQWRkcmVzc0NhcmQyLAogICAgICBmYUNvbnRhY3RDYXJkOiBmYUNvbnRhY3RDYXJkMiwKICAgICAgZmFWY2FyZDogZmFWY2FyZDIsCiAgICAgIGZhQW5nbGVSaWdodCwKICAgICAgZmFGYWNlTWVoOiBmYUZhY2VNZWgyLAogICAgICBmYU1laDogZmFNZWgyLAogICAgICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsCiAgICAgIGZhTWFwOiBmYU1hcDIsCiAgICAgIGZhVXNlclBsdXMsCiAgICAgIGZhVmVudXMsCiAgICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciwKICAgICAgZmFIZWFkU2lkZUNvdWdoU2xhc2gsCiAgICAgIGZhRGlhZ3JhbVByb2plY3QsCiAgICAgIGZhUHJvamVjdERpYWdyYW0sCiAgICAgIGZhVGVybWluYWwsCiAgICAgIGZhSG91c2VGaXJlLAogICAgICBmYU1hc2ssCiAgICAgIGZhSHVycmljYW5lLAogICAgICBmYUVhcnRoQWZyaWNhLAogICAgICBmYUdsb2JlQWZyaWNhLAogICAgICBmYVRodW1idGFjaywKICAgICAgZmFUaHVtYlRhY2ssCiAgICAgIGZhSGFuZFBvaW50RG93bjogZmFIYW5kUG9pbnREb3duMiwKICAgICAgZmFGYWNlTWVoQmxhbms6IGZhRmFjZU1laEJsYW5rMiwKICAgICAgZmFNZWhCbGFuazogZmFNZWhCbGFuazIsCiAgICAgIGZhVGVtcGVyYXR1cmVFbXB0eSwKICAgICAgZmFUZW1wZXJhdHVyZTAsCiAgICAgIGZhVGhlcm1vbWV0ZXIwLAogICAgICBmYVRoZXJtb21ldGVyRW1wdHksCiAgICAgIGZhQm9yZGVyTm9uZSwKICAgICAgZmFIaWdobGlnaHRlciwKICAgICAgZmFNb25leUJpbGxXYXZlLAogICAgICBmYVRvaWxldFBhcGVyU2xhc2gsCiAgICAgIGZhRmlsZVNoaWVsZCwKICAgICAgZmFUZXh0SGVpZ2h0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlOiBmYUZhY2VHcmluVG9uZ3VlMiwKICAgICAgZmFHcmluVG9uZ3VlOiBmYUdyaW5Ub25ndWUyLAogICAgICBmYUZpbGVTaWduYXR1cmUsCiAgICAgIGZhQnVpbGRpbmdXaGVhdCwKICAgICAgZmFQbHVnQ2lyY2xlTWludXMsCiAgICAgIGZhRnV0Ym9sOiBmYUZ1dGJvbDIsCiAgICAgIGZhRnV0Ym9sQmFsbDogZmFGdXRib2xCYWxsMiwKICAgICAgZmFTb2NjZXJCYWxsOiBmYVNvY2NlckJhbGwyLAogICAgICBmYUNpcmNsZVBsdXMsCiAgICAgIGZhUGx1c0NpcmNsZSwKICAgICAgZmFCcmF6aWxpYW5SZWFsU2lnbiwKICAgICAgZmFTdGFyQW5kQ3Jlc2NlbnQsCiAgICAgIGZhRmFjZVN1cnByaXNlOiBmYUZhY2VTdXJwcmlzZTIsCiAgICAgIGZhU3VycHJpc2U6IGZhU3VycHJpc2UyLAogICAgICBmYUhvc3BpdGFsVXNlciwKICAgICAgZmFBcnJvd0Rvd25VcExvY2ssCiAgICAgIGZhRm9sZGVyOiBmYUZvbGRlcjIsCiAgICAgIGZhRm9sZGVyQmxhbms6IGZhRm9sZGVyQmxhbmsyLAogICAgICBmYUhvbGx5QmVycnksCiAgICAgIGZhVmVudXNEb3VibGUsCiAgICAgIGZhQ2xpcGJvYXJkUXVlc3Rpb24sCiAgICAgIGZhSG90ZG9nLAogICAgICBmYUFycm93VXBGcm9tQnJhY2tldCwKICAgICAgZmFNaWNyb3Njb3BlLAogICAgICBmYUNsb3VkOiBmYUNsb3VkMiwKICAgICAgZmFCYXNlYmFsbEJhdEJhbGwsCiAgICAgIGZhQ2FyUmVhciwKICAgICAgZmFDYXJBbHQsCiAgICAgIGZhVGh1bWJ0YWNrU2xhc2gsCiAgICAgIGZhVGh1bWJUYWNrU2xhc2gsCiAgICAgIGZhUGx1c01pbnVzLAogICAgICBmYUhvdXNlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2FsZW5kYXJEYXksCiAgICAgIGZhQ2lyY2xlOiBmYUNpcmNsZTIsCiAgICAgIGZhTW9iaWxlVmlicmF0ZSwKICAgICAgZmFGYWNlR3JpblNxdWludDogZmFGYWNlR3JpblNxdWludDIsCiAgICAgIGZhR3JpblNxdWludDogZmFHcmluU3F1aW50MiwKICAgICAgZmFVc2Vyc0JldHdlZW5MaW5lcywKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyaywKICAgICAgZmFUYWJsZUxpc3QsCiAgICAgIGZhVGhMaXN0LAogICAgICBmYUZsYXNrVmlhbCwKICAgICAgZmFDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFFeGNsYW1hdGlvbkNpcmNsZSwKICAgICAgZmFUYXhpLAogICAgICBmYUNhYiwKICAgICAgZmFUZXh0U2xhc2gsCiAgICAgIGZhUmVtb3ZlRm9ybWF0LAogICAgICBmYVBlb3BsZVB1bGxpbmcsCiAgICAgIGZhQmFja3dhcmQsCiAgICAgIGZhQ2FyQnVyc3QsCiAgICAgIGZhQ2FyQ3Jhc2gsCiAgICAgIGZhTGluaywKICAgICAgZmFDaGFpbiwKICAgICAgZmFCYWNrd2FyZFN0ZXAsCiAgICAgIGZhU3RlcEJhY2t3YXJkLAogICAgICBmYVgsCiAgICAgIGZhQ2lyY2xlVXNlcjogZmFDaXJjbGVVc2VyMiwKICAgICAgZmFVc2VyQ2lyY2xlOiBmYVVzZXJDaXJjbGUyLAogICAgICBmYVJlY3RhbmdsZUxpc3Q6IGZhUmVjdGFuZ2xlTGlzdDIsCiAgICAgIGZhTGlzdEFsdDogZmFMaXN0QWx0MiwKICAgICAgZmFIYW5kOiBmYUhhbmQyLAogICAgICBmYUhhbmRQYXBlcjogZmFIYW5kUGFwZXIyLAogICAgICBmYVZhblNodXR0bGUsCiAgICAgIGZhU2h1dHRsZVZhbiwKICAgICAgZmFTdGFpcnMsCiAgICAgIGZhSG9yc2VIZWFkLAogICAgICBmYVZhdWx0LAogICAgICBmYURydW1TdGVlbHBhbiwKICAgICAgZmFUaHVtYnNVcDogZmFUaHVtYnNVcDIsCiAgICAgIGZhU3RhbXAsCiAgICAgIGZhTWVub3JhaCwKICAgICAgZmFDaGlsZHJlbiwKICAgICAgZmFDaGFydExpbmUsCiAgICAgIGZhTGluZUNoYXJ0LAogICAgICBmYVNxdWFyZUVudmVsb3BlLAogICAgICBmYUVudmVsb3BlU3F1YXJlLAogICAgICBmYUJhblNtb2tpbmcsCiAgICAgIGZhU21va2luZ0JhbiwKICAgICAgZmFUcnVja0Zyb250LAogICAgICBmYUJ1aWxkaW5nOiBmYUJ1aWxkaW5nMiwKICAgICAgZmFCdWxsc2V5ZSwKICAgICAgZmFBcnJvd0xlZnRMb25nLAogICAgICBmYUxvbmdBcnJvd0xlZnQsCiAgICAgIGZhQ2hlc3NSb29rOiBmYUNoZXNzUm9vazIsCiAgICAgIGZhQmxlbmRlclBob25lLAogICAgICBmYUFycm93VHVyblVwLAogICAgICBmYUxldmVsVXAsCiAgICAgIGZhQmljeWNsZSwKICAgICAgZmFDaXJjbGVBcnJvd0Rvd24sCiAgICAgIGZhQXJyb3dDaXJjbGVEb3duLAogICAgICBmYUdlYXIsCiAgICAgIGZhQ29nLAogICAgICBmYU1hcnNBbmRWZW51c0J1cnN0LAogICAgICBmYU90dGVyLAogICAgICBmYUNpcmNsZUNoZXZyb25MZWZ0LAogICAgICBmYUNoZXZyb25DaXJjbGVMZWZ0LAogICAgICBmYUNpcmNsZVF1ZXN0aW9uOiBmYUNpcmNsZVF1ZXN0aW9uMiwKICAgICAgZmFRdWVzdGlvbkNpcmNsZTogZmFRdWVzdGlvbkNpcmNsZTIsCiAgICAgIGZhV2Fsa2llVGFsa2llLAogICAgICBmYVVzZXJHcm91cCwKICAgICAgZmFVc2VyRnJpZW5kcywKICAgICAgZmFIb3VzZUNoaW1uZXksCiAgICAgIGZhSG9tZUxnLAogICAgICBmYVJpZ2h0RnJvbUJyYWNrZXQsCiAgICAgIGZhU2lnbk91dEFsdCwKICAgICAgZmFGaWxlOiBmYUZpbGUyLAogICAgICBmYVBsYW5lU2xhc2gsCiAgICAgIGZhQ2xvdWRTaG93ZXJzSGVhdnksCiAgICAgIGZhUGVyc29uRmFsbGluZywKICAgICAgZmFUdXJuRG93biwKICAgICAgZmFMZXZlbERvd25BbHQsCiAgICAgIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciwKICAgICAgZmFFeHBhbmRBbHQsCiAgICAgIGZhVXNlclRhZywKICAgICAgZmFIYW5kU3BhcmtsZXMsCiAgICAgIGZhQXJyb3dzVG9Eb3QsCiAgICAgIGZhRmFjZVNhZENyeTogZmFGYWNlU2FkQ3J5MiwKICAgICAgZmFTYWRDcnk6IGZhU2FkQ3J5MiwKICAgICAgZmFEb25nU2lnbiwKICAgICAgZmFQZW9wbGVMaW5lLAogICAgICBmYVNxdWFyZVJzcywKICAgICAgZmFSc3NTcXVhcmUsCiAgICAgIGZhQ2FsZW5kYXJNaW51czogZmFDYWxlbmRhck1pbnVzMiwKICAgICAgZmFDaGFydERpYWdyYW0sCiAgICAgIGZhRmFjZVRpcmVkOiBmYUZhY2VUaXJlZDIsCiAgICAgIGZhVGlyZWQ6IGZhVGlyZWQyLAogICAgICBmYUhhbmRQb2ludFJpZ2h0OiBmYUhhbmRQb2ludFJpZ2h0MiwKICAgICAgZmFBcnJvd1VwLAogICAgICBmYUN1YmVzU3RhY2tlZCwKICAgICAgZmFDaGlsZENvbWJhdGFudCwKICAgICAgZmFDaGlsZFJpZmxlLAogICAgICBmYVZlc3RQYXRjaGVzLAogICAgICBmYU1hcnRpbmlHbGFzc0VtcHR5LAogICAgICBmYUdsYXNzTWFydGluaSwKICAgICAgZmFNYWduZXQsCiAgICAgIGZhUm9hZEJhcnJpZXIsCiAgICAgIGZhQ29tcGFzc0RyYWZ0aW5nLAogICAgICBmYURyYWZ0aW5nQ29tcGFzcywKICAgICAgZmFTcXVhcmVQZXJzb25Db25maW5lZCwKICAgICAgZmFQbGF0ZVdoZWF0LAogICAgICBmYVNpZ25IYW5naW5nLAogICAgICBmYVNpZ24sCiAgICAgIGZhQ2FyQmF0dGVyeSwKICAgICAgZmFCYXR0ZXJ5Q2FyLAogICAgICBmYVNoaXJ0LAogICAgICBmYVRTaGlydCwKICAgICAgZmFUc2hpcnQsCiAgICAgIGZhUGFyYWdyYXBoLAogICAgICBmYUVudmVsb3Blc0J1bGssCiAgICAgIGZhTWFpbEJ1bGssCiAgICAgIGZhR3VpdGFyLAogICAgICBmYVN1aXRjYXNlLAogICAgICBmYUNpcmNsZVVwOiBmYUNpcmNsZVVwMiwKICAgICAgZmFBcnJvd0FsdENpcmNsZVVwOiBmYUFycm93QWx0Q2lyY2xlVXAyLAogICAgICBmYUYsCiAgICAgIGZhWG1hcmtzTGluZXMsCiAgICAgIGZhRWFydGhPY2VhbmlhLAogICAgICBmYUdsb2JlT2NlYW5pYSwKICAgICAgZmFDb21tZW50U2xhc2gsCiAgICAgIGZhUGxheSwKICAgICAgZmFWaWFsQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQnJpZGdlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2VkaVNpZ24sCiAgICAgIGZhUHV6emxlUGllY2UsCiAgICAgIGZhSGVsbWV0VW4sCiAgICAgIGZhR2xhc3NXYXRlciwKICAgICAgZmFIZWFydENpcmNsZUJvbHQsCiAgICAgIGZhUHVtcFNvYXAsCiAgICAgIGZhSGFuZFNjaXNzb3JzOiBmYUhhbmRTY2lzc29yczIsCiAgICAgIGZhRG9sbHksCiAgICAgIGZhRG9sbHlCb3gsCiAgICAgIGZhUGFwZXJjbGlwLAogICAgICBmYURlbW9jcmF0LAogICAgICBmYVNxdWFyZUFycm93VXBSaWdodCwKICAgICAgZmFFeHRlcm5hbExpbmtTcXVhcmUsCiAgICAgIGZhRmVycnksCiAgICAgIGZhTW9zcXVpdG8sCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBmYUxlZnRSaWdodCwKICAgICAgZmFBcnJvd3NBbHRILAogICAgICBmYVZpcnVzLAogICAgICBmYUdlbTogZmFHZW0yLAogICAgICBmYVRvaWxldCwKICAgICAgZmFTaW5nbGVRdW90ZUxlZnQsCiAgICAgIGZhTW9uZXlCaWxscywKICAgICAgZmFUYWJsZXRCdXR0b24sCiAgICAgIGZhUmVjdGFuZ2xlWG1hcms6IGZhUmVjdGFuZ2xlWG1hcmsyLAogICAgICBmYVJlY3RhbmdsZVRpbWVzOiBmYVJlY3RhbmdsZVRpbWVzMiwKICAgICAgZmFUaW1lc1JlY3RhbmdsZTogZmFUaW1lc1JlY3RhbmdsZTIsCiAgICAgIGZhV2luZG93Q2xvc2U6IGZhV2luZG93Q2xvc2UyLAogICAgICBmYVdyZW5jaCwKICAgICAgZmFUcmFzaENhbjogZmFUcmFzaENhbjIsCiAgICAgIGZhVHJhc2hBbHQ6IGZhVHJhc2hBbHQyLAogICAgICBmYVRhYmxlQ2VsbHMsCiAgICAgIGZhVGgsCiAgICAgIGZhUmliYm9uLAogICAgICBmYUxhbmRtYXJrRmxhZywKICAgICAgZmFVcERvd25MZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzQWx0LAogICAgICBmYUNhclNpZGUsCiAgICAgIGZhVHJhc2hBcnJvd1VwLAogICAgICBmYVRyYXNoUmVzdG9yZSwKICAgICAgZmFMaWZlUmluZzogZmFMaWZlUmluZzIsCiAgICAgIGZhQ29weXJpZ2h0OiBmYUNvcHlyaWdodDIsCiAgICAgIGZhRmlsZVByZXNjcmlwdGlvbiwKICAgICAgZmFFcmFzZXIsCiAgICAgIGZhSG91cmdsYXNzU3RhcnQsCiAgICAgIGZhSG91cmdsYXNzMSwKICAgICAgZmFDaXJjbGVMZWZ0OiBmYUNpcmNsZUxlZnQyLAogICAgICBmYUFycm93QWx0Q2lyY2xlTGVmdDogZmFBcnJvd0FsdENpcmNsZUxlZnQyLAogICAgICBmYUNydXplaXJvU2lnbiwKICAgICAgZmFTbW9raW5nLAogICAgICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwKICAgICAgZmFQb2xsLAogICAgICBmYVBlcnNvbkNpcmNsZU1pbnVzLAogICAgICBmYUJpb2hhemFyZCwKICAgICAgZmFCZWxsQ29uY2llcmdlLAogICAgICBmYUNvbmNpZXJnZUJlbGwsCiAgICAgIGZhUnVsZXJIb3Jpem9udGFsLAogICAgICBmYUhvcnNlLAogICAgICBmYUNhbGVuZGFyOiBmYUNhbGVuZGFyMiwKICAgICAgZmFIYW5kc0hvbGRpbmdDaGlsZCwKICAgICAgZmFJdGFsaWMsCiAgICAgIGZhS2hhbmRhLAogICAgICBmYUZhY2VGcm93bk9wZW46IGZhRmFjZUZyb3duT3BlbjIsCiAgICAgIGZhRnJvd25PcGVuOiBmYUZyb3duT3BlbjIsCiAgICAgIGZhQ2hlY2ssCiAgICAgIGZhRmluZ2VycHJpbnQsCiAgICAgIGZhQ2hhcmdpbmdTdGF0aW9uLAogICAgICBmYVVzZXJMb2NrLAogICAgICBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwKICAgICAgZmFNb2JpbGVBbHQsCiAgICAgIGZhQW5jaG9yQ2lyY2xlQ2hlY2ssCiAgICAgIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLAogICAgICBmYUJsaW5kLAogICAgICBmYUZpbGVXYXZlZm9ybSwKICAgICAgZmFGaWxlTWVkaWNhbEFsdCwKICAgICAgZmFIb3VzZUNyYWNrLAogICAgICBmYUhhdFdpemFyZCwKICAgICAgZmFVc2VyRG9jdG9yLAogICAgICBmYVVzZXJNZCwKICAgICAgZmFDaGFydEJhcjogZmFDaGFydEJhcjIsCiAgICAgIGZhQmFyQ2hhcnQ6IGZhQmFyQ2hhcnQyLAogICAgICBmYVNwcmF5Q2FuU3BhcmtsZXMsCiAgICAgIGZhQWlyRnJlc2hlbmVyLAogICAgICBmYUJhaHRTaWduLAogICAgICBmYVRlbXBlcmF0dXJlQXJyb3dVcCwKICAgICAgZmFUZW1wZXJhdHVyZVVwLAogICAgICBmYVdlYkF3ZXNvbWU6IGZhV2ViQXdlc29tZTIsCiAgICAgIGZhTm9uQmluYXJ5LAogICAgICBmYU4sCiAgICAgIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LAogICAgICBmYUFycm93cywKICAgICAgZmFIb3VzZTogZmFIb3VzZTIsCiAgICAgIGZhSG9tZTogZmFIb21lMiwKICAgICAgZmFIb21lQWx0OiBmYUhvbWVBbHQyLAogICAgICBmYUhvbWVMZ0FsdDogZmFIb21lTGdBbHQyLAogICAgICBmYVNwaW5uZXIsCiAgICAgIGZhR2F2ZWwsCiAgICAgIGZhTGVnYWwsCiAgICAgIGZhVGlja2V0U2ltcGxlLAogICAgICBmYVRpY2tldEFsdCwKICAgICAgZmFEb3ZlLAogICAgICBmYVRhcnBEcm9wbGV0LAogICAgICBmYVRyZWVDaXR5LAogICAgICBmYVR1cm5VcCwKICAgICAgZmFMZXZlbFVwQWx0LAogICAgICBmYVRlbXBlcmF0dXJlUXVhcnRlciwKICAgICAgZmFUZW1wZXJhdHVyZTEsCiAgICAgIGZhVGhlcm1vbWV0ZXIxLAogICAgICBmYVRoZXJtb21ldGVyUXVhcnRlciwKICAgICAgZmFTbGlkZXJzLAogICAgICBmYVNsaWRlcnNILAogICAgICBmYU1vc3F1ZSwKICAgICAgZmFILAogICAgICBmYUluZm8sCiAgICAgIGZhUGVyc29uV2Fsa2luZywKICAgICAgZmFXYWxraW5nLAogICAgICBmYUFycm93VHVybkRvd24sCiAgICAgIGZhTGV2ZWxEb3duLAogICAgICBmYVJvYWQsCiAgICAgIGZhU3BpcmFsLAogICAgICBmYUZhY2VGcm93bjogZmFGYWNlRnJvd24yLAogICAgICBmYUZyb3duOiBmYUZyb3duMiwKICAgICAgZmFXaW5lR2xhc3NFbXB0eSwKICAgICAgZmFXaW5lR2xhc3NBbHQsCiAgICAgIGZhQ2xhcHBlcmJvYXJkLAogICAgICBmYUZvcndhcmRTdGVwLAogICAgICBmYVN0ZXBGb3J3YXJkLAogICAgICBmYVNxdWFyZVVwUmlnaHQsCiAgICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LAogICAgICBmYUJvb2tKb3VybmFsV2hpbGxzLAogICAgICBmYUpvdXJuYWxXaGlsbHMsCiAgICAgIGZhQ2hhbXBhZ25lR2xhc3NlcywKICAgICAgZmFHbGFzc0NoZWVycywKICAgICAgZmFEdW1wc3RlciwKICAgICAgZmFIZWFydENpcmNsZVhtYXJrLAogICAgICBmYUNvbXB1dGVyLAogICAgICBmYVdhbmRNYWdpYywKICAgICAgZmFNYWdpYywKICAgICAgZmFCcmFpbiwKICAgICAgZmFCcmllZmNhc2VNZWRpY2FsLAogICAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNvZGVDb21taXQsCiAgICAgIGZhUGVyc29uQnJlYXN0ZmVlZGluZywKICAgICAgZmFQZXJzb25SYXlzLAogICAgICBmYU1hbmF0U2lnbiwKICAgICAgZmFTb3J0LAogICAgICBmYVVuc29ydGVkLAogICAgICBmYUNpcmNsZVJhZGlhdGlvbiwKICAgICAgZmFSYWRpYXRpb25BbHQsCiAgICAgIGZhTGFwdG9wQ29kZSwKICAgICAgZmFTaW5rLAogICAgICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLAogICAgICBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLAogICAgICBmYU1pY3JvcGhvbmVBbHRTbGFzaCwKICAgICAgZmFTZXJ2ZXIsCiAgICAgIGZhVXNlcjogZmFVc2VyMiwKICAgICAgZmFVc2VyQWx0OiBmYVVzZXJBbHQyLAogICAgICBmYVVzZXJMYXJnZTogZmFVc2VyTGFyZ2UyLAogICAgICBmYVNub3dmbGFrZTogZmFTbm93Zmxha2UyLAogICAgICBmYVNrdWxsQ3Jvc3Nib25lcywKICAgICAgZmFQZXNvU2lnbiwKICAgICAgZmFXaW5lR2xhc3MsCiAgICAgIGZhVGVtcGVyYXR1cmVIYWxmLAogICAgICBmYVRlbXBlcmF0dXJlMiwKICAgICAgZmFUaGVybW9tZXRlcjIsCiAgICAgIGZhVGhlcm1vbWV0ZXJIYWxmLAogICAgICBmYVRpY2tldCwKICAgICAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUFycm93c1R1cm5SaWdodCwKICAgICAgZmFDYW5keUNhbmUsCiAgICAgIGZhV2hlZWxjaGFpciwKICAgICAgZmFTcGVsbENoZWNrLAogICAgICBmYVZvbHVtZU9mZiwKICAgICAgZmFMdW5ncywKICAgICAgZmFCb29rbWFyazogZmFCb29rbWFyazIsCiAgICAgIGZhQmFyY29kZSwKICAgICAgZmFMaXN0T2wsCiAgICAgIGZhTGlzdDEyLAogICAgICBmYUxpc3ROdW1lcmljLAogICAgICBmYUZpbGVDaXJjbGVYbWFyaywKICAgICAgZmFDdWJlLAogICAgICBmYVRhcGUsCiAgICAgIGZhQm9tYiwKICAgICAgZmFTY2FsZVVuYmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlTGVmdCwKICAgICAgZmFTcXVhcmVDYXJldExlZnQ6IGZhU3F1YXJlQ2FyZXRMZWZ0MiwKICAgICAgZmFDYXJldFNxdWFyZUxlZnQ6IGZhQ2FyZXRTcXVhcmVMZWZ0MiwKICAgICAgZmFSdWxlciwKICAgICAgZmFJLAogICAgICBmYVZvbHVtZVhtYXJrLAogICAgICBmYVZvbHVtZU11dGUsCiAgICAgIGZhVm9sdW1lVGltZXMsCiAgICAgIGZhQXJjaHdheSwKICAgICAgZmFQZXJzb25EaWdnaW5nLAogICAgICBmYURpZ2dpbmcsCiAgICAgIGZhR2F1Z2VIaWdoLAogICAgICBmYVRhY2hvbWV0ZXJBbHQsCiAgICAgIGZhVGFjaG9tZXRlckFsdEZhc3QsCiAgICAgIGZhR2VuZGVybGVzcywKICAgICAgZmFDbG91ZFN1biwKICAgICAgZmFBcnJvd1JpZ2h0LAogICAgICBmYUhhbmRzaGFrZTogZmFIYW5kc2hha2UyLAogICAgICBmYUhhbmRzaGFrZUFsdDogZmFIYW5kc2hha2VBbHQyLAogICAgICBmYUhhbmRzaGFrZVNpbXBsZTogZmFIYW5kc2hha2VTaW1wbGUyLAogICAgICBmYVBlcnNvblNraWluZywKICAgICAgZmFTa2lpbmcsCiAgICAgIGZhQnJpZGdlV2F0ZXIsCiAgICAgIGZhQnVpbGRpbmdOZ28sCiAgICAgIGZhSWdsb28sCiAgICAgIGZhQ2lyY2xlRG9sbGFyVG9TbG90LAogICAgICBmYURvbmF0ZSwKICAgICAgZmFZLAogICAgICBmYUZhY2VTbWlsZVdpbms6IGZhRmFjZVNtaWxlV2luazIsCiAgICAgIGZhU21pbGVXaW5rOiBmYVNtaWxlV2luazIsCiAgICAgIGZhRGljZUZvdXIsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczogZmFGYWNlR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFHcmluU3F1aW50VGVhcnM6IGZhR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFGaWxlQXVkaW86IGZhRmlsZUF1ZGlvMiwKICAgICAgZmFBcnJvd3NEb3duVG9MaW5lLAogICAgICBmYUcsCiAgICAgIGZhVmloYXJhLAogICAgICBmYUZsYWdDaGVja2VyZWQsCiAgICAgIGZhR2F1Z2VTaW1wbGUsCiAgICAgIGZhR2F1Z2VTaW1wbGVNZWQsCiAgICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UsCiAgICAgIGZhUmlnaHRMZWZ0LAogICAgICBmYUV4Y2hhbmdlQWx0LAogICAgICBmYVBpbGxzLAogICAgICBmYUV4cGxvc2lvbiwKICAgICAgZmFBcnJvd3NEb3duVG9QZW9wbGUsCiAgICAgIGZhVXNlcnNWaWV3ZmluZGVyLAogICAgICBmYUNhck9uLAogICAgICBmYVNsZWlnaCwKICAgICAgZmFEdW1iYmVsbCwKICAgICAgZmFCYWJ5Q2FycmlhZ2UsCiAgICAgIGZhQ2FycmlhZ2VCYWJ5LAogICAgICBmYUtpd2lCaXJkLAogICAgICBmYUNhbGVuZGFyWG1hcms6IGZhQ2FsZW5kYXJYbWFyazIsCiAgICAgIGZhQ2FsZW5kYXJUaW1lczogZmFDYWxlbmRhclRpbWVzMiwKICAgICAgZmFDaXJjbGVEb3duOiBmYUNpcmNsZURvd24yLAogICAgICBmYUFycm93QWx0Q2lyY2xlRG93bjogZmFBcnJvd0FsdENpcmNsZURvd24yLAogICAgICBmYUZpbGVNZWRpY2FsLAogICAgICBmYVhtYXJrLAogICAgICBmYUNsb3NlLAogICAgICBmYU11bHRpcGx5LAogICAgICBmYVJlbW92ZSwKICAgICAgZmFUaW1lcywKICAgICAgZmFTaGFwZXMsCiAgICAgIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsCiAgICAgIGZhRGljZU9uZSwKICAgICAgZmFMb2NrT3BlbiwKICAgICAgZmFQZXBwZXJIb3QsCiAgICAgIGZhRHJvcGxldFNsYXNoLAogICAgICBmYVRpbnRTbGFzaCwKICAgICAgZmFEcm9wbGV0LAogICAgICBmYVRpbnQsCiAgICAgIGZhRmlsZUxpbmVzOiBmYUZpbGVMaW5lczIsCiAgICAgIGZhRmlsZUFsdDogZmFGaWxlQWx0MiwKICAgICAgZmFGaWxlVGV4dDogZmFGaWxlVGV4dDIsCiAgICAgIGZhQ29tbWVudHNEb2xsYXIsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sCiAgICAgIGZhU2VhcmNoTG9jYXRpb24sCiAgICAgIGZhRmlsZUludm9pY2UsCiAgICAgIGZhUGVudGFnb24sCiAgICAgIGZhUmVwdWJsaWNhbiwKICAgICAgZmFTaG9wLAogICAgICBmYVN0b3JlQWx0LAogICAgICBmYUZpbG0sCiAgICAgIGZhRmlsbUFsdCwKICAgICAgZmFGaWxtU2ltcGxlLAogICAgICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssCiAgICAgIGZhQ29tbWVudHM6IGZhQ29tbWVudHMyLAogICAgICBmYVRhZ3MsCiAgICAgIGZhR3VuLAogICAgICBmYUNpcmNsZUNoZWNrOiBmYUNpcmNsZUNoZWNrMiwKICAgICAgZmFDaGVja0NpcmNsZTogZmFDaGVja0NpcmNsZTIsCiAgICAgIGZhSWRDYXJkQ2xpcCwKICAgICAgZmFJZENhcmRBbHQsCiAgICAgIGZhTW9vbjogZmFNb29uMiwKICAgICAgZmFPaWxXZWxsLAogICAgICBmYVRhY2hvZ3JhcGhEaWdpdGFsLAogICAgICBmYURpZ2l0YWxUYWNob2dyYXBoLAogICAgICBmYVRhYmxldCwKICAgICAgZmFUYWJsZXRBbmRyb2lkLAogICAgICBmYVJ1YmxlU2lnbiwKICAgICAgZmFSb3VibGUsCiAgICAgIGZhUnViLAogICAgICBmYVJ1YmxlLAogICAgICBmYUNsb3NlZENhcHRpb25pbmc6IGZhQ2xvc2VkQ2FwdGlvbmluZzIsCiAgICAgIGZhUGVuLAogICAgICBmYVBsYW5lLAogICAgICBmYUltYWdlczogZmFJbWFnZXMyLAogICAgICBmYU1vYmlsZVNjcmVlbiwKICAgICAgZmFNb2JpbGVBbmRyb2lkQWx0LAogICAgICBmYUd1YXJhbmlTaWduLAogICAgICBmYUJhZ1Nob3BwaW5nLAogICAgICBmYVNob3BwaW5nQmFnLAogICAgICBmYUNpcmNsZVJpZ2h0OiBmYUNpcmNsZVJpZ2h0MiwKICAgICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0OiBmYUFycm93QWx0Q2lyY2xlUmlnaHQyLAogICAgICBmYVBob25lVm9sdW1lLAogICAgICBmYVZvbHVtZUNvbnRyb2xQaG9uZSwKICAgICAgZmFDdWJlcywKICAgICAgZmFQaG9uZSwKICAgICAgZmFUb3JpaUdhdGUsCiAgICAgIGZhQmFjb24sCiAgICAgIGZhUGVyc29uRmFsbGluZ0J1cnN0LAogICAgICBmYVF1b3RlUmlnaHQsCiAgICAgIGZhUXVvdGVSaWdodEFsdCwKICAgICAgZmFIb3VzZU1lZGljYWxGbGFnLAogICAgICBmYVByZXNjcmlwdGlvbiwKICAgICAgZmFEaWNlVGhyZWUsCiAgICAgIGZhQnVpbGRpbmdMb2NrLAogICAgICBmYUlkQ2FyZDogZmFJZENhcmQyLAogICAgICBmYURyaXZlcnNMaWNlbnNlOiBmYURyaXZlcnNMaWNlbnNlMiwKICAgICAgZmFDaXJjbGVQbGF5OiBmYUNpcmNsZVBsYXkyLAogICAgICBmYVBsYXlDaXJjbGU6IGZhUGxheUNpcmNsZTIsCiAgICAgIGZhRmFjZUxhdWdoQmVhbTogZmFGYWNlTGF1Z2hCZWFtMiwKICAgICAgZmFMYXVnaEJlYW06IGZhTGF1Z2hCZWFtMiwKICAgICAgZmFMZWFmLAogICAgICBmYUhvdXNlQ2hpbW5leVVzZXIsCiAgICAgIGZhUm90YXRlUmlnaHQsCiAgICAgIGZhUmVkb0FsdCwKICAgICAgZmFSb3RhdGVGb3J3YXJkLAogICAgICBmYVRvb3RoLAogICAgICBmYUhvdXNlQ2hpbW5leVdpbmRvdywKICAgICAgZmFNb3RvcmN5Y2xlLAogICAgICBmYUJhY2t3YXJkRmFzdCwKICAgICAgZmFGYXN0QmFja3dhcmQsCiAgICAgIGZhQWRkcmVzc0Jvb2s6IGZhQWRkcmVzc0Jvb2syLAogICAgICBmYUNvbnRhY3RCb29rOiBmYUNvbnRhY3RCb29rMiwKICAgICAgZmFTYWlsYm9hdCwKICAgICAgZmFCb29rQm9va21hcmssCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwKICAgICAgZmFNaWNyb3Bob25lTGluZXMsCiAgICAgIGZhTWljcm9waG9uZUFsdCwKICAgICAgZmFSZXBseUFsbCwKICAgICAgZmFNYWlsUmVwbHlBbGwsCiAgICAgIGZhVW5pdmVyc2FsQWNjZXNzLAogICAgICBmYVRvaWxldFBhcGVyLAogICAgICBmYVRvaWxldFBhcGVyQWx0LAogICAgICBmYVRvaWxldFBhcGVyQmxhbmssCiAgICAgIGZhVnJDYXJkYm9hcmQsCiAgICAgIGZhUGl6emFTbGljZSwKICAgICAgZmFTcHJheUNhbiwKICAgICAgZmFWb2x1bWVMb3csCiAgICAgIGZhVm9sdW1lRG93biwKICAgICAgZmFDcm9zcywKICAgICAgZmFQZXJzb24sCiAgICAgIGZhTWFsZSwKICAgICAgZmFIb3VyZ2xhc3M6IGZhSG91cmdsYXNzMywKICAgICAgZmFIb3VyZ2xhc3NFbXB0eTogZmFIb3VyZ2xhc3NFbXB0eTIsCiAgICAgIGZhRmlzaCwKICAgICAgZmFEcnVtc3RpY2tCaXRlLAogICAgICBmYUNoYXJ0U2ltcGxlLAogICAgICBmYUF0b20sCiAgICAgIGZhUCwKICAgICAgZmFKZXRGaWdodGVyVXAsCiAgICAgIGZhUGx1Z0NpcmNsZVhtYXJrLAogICAgICBmYVNoZWV0UGxhc3RpYywKICAgICAgZmFWLAogICAgICBmYUxpc3QsCiAgICAgIGZhTGlzdFNxdWFyZXMsCiAgICAgIGZhU29sYXJQYW5lbCwKICAgICAgZmFMYW5kTWluZU9uLAogICAgICBmYUhlYWRwaG9uZXM6IGZhSGVhZHBob25lczIsCiAgICAgIGZhSGVhZHBob25lc0FsdDogZmFIZWFkcGhvbmVzQWx0MiwKICAgICAgZmFIZWFkcGhvbmVzU2ltcGxlOiBmYUhlYWRwaG9uZXNTaW1wbGUyLAogICAgICBmYUJ1cywKICAgICAgZmFGaWxlUG93ZXJwb2ludDogZmFGaWxlUG93ZXJwb2ludDIsCiAgICAgIGZhUXVvdGVMZWZ0LAogICAgICBmYVF1b3RlTGVmdEFsdCwKICAgICAgZmFDaGV2cm9uRG93biwKICAgICAgZmFFYXJ0aEFzaWEsCiAgICAgIGZhR2xvYmVBc2lhLAogICAgICBmYUNlbnRTaWduLAogICAgICBmYVNoaWVsZENhdCwKICAgICAgZmFTY2hvb2xDaXJjbGVDaGVjaywKICAgICAgZmFNYXJ0aW5pR2xhc3MsCiAgICAgIGZhR2xhc3NNYXJ0aW5pQWx0LAogICAgICBmYVBsdWcsCiAgICAgIGZhUGFub3JhbWEsCiAgICAgIGZhQ2xvY2tSb3RhdGVMZWZ0LAogICAgICBmYUhpc3RvcnksCiAgICAgIGZhSmFyV2hlYXQsCiAgICAgIGZhQ2xvdWRBcnJvd0Rvd24sCiAgICAgIGZhQ2xvdWREb3dubG9hZCwKICAgICAgZmFDbG91ZERvd25sb2FkQWx0LAogICAgICBmYVRydWNrUmFtcEJveCwKICAgICAgZmFUcnVja0xvYWRpbmcsCiAgICAgIGZhQW5nbGVEb3duLAogICAgICBmYVBsdWdDaXJjbGVDaGVjaywKICAgICAgZmFXaW5kb3dNYXhpbWl6ZTogZmFXaW5kb3dNYXhpbWl6ZTIsCiAgICAgIGZhSGFuZHNIb2xkaW5nQ2lyY2xlLAogICAgICBmYUxvY2F0aW9uUGluLAogICAgICBmYU1hcE1hcmtlciwKICAgICAgZmFCb3dsaW5nQmFsbCwKICAgICAgZmFDYXJ0RmxhdGJlZCwKICAgICAgZmFEb2xseUZsYXRiZWQsCiAgICAgIGZhSG91c2VVc2VyLAogICAgICBmYUhvbWVVc2VyLAogICAgICBmYUdob3N0LAogICAgICBmYUNvbW1lbnROb2RlcywKICAgICAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmUsCiAgICAgIGZhUGx1Z0NpcmNsZVBsdXMsCiAgICAgIGZhUGVyc29uU3dpbW1pbmcsCiAgICAgIGZhU3dpbW1lciwKICAgICAgZmFDb21tZW50RG90czogZmFDb21tZW50RG90czIsCiAgICAgIGZhQ29tbWVudGluZzogZmFDb21tZW50aW5nMiwKICAgICAgZmFDaGFydFBpZSwKICAgICAgZmFQaWVDaGFydCwKICAgICAgZmFGcm9nLAogICAgICBmYVdpbmVCb3R0bGUsCiAgICAgIGZhSW5ib3gsCiAgICAgIGZhU3F1YXJlSCwKICAgICAgZmFIU3F1YXJlLAogICAgICBmYUhvdXNlTWVkaWNhbCwKICAgICAgZmFDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LAogICAgICBmYUZpbGVDc3YsCiAgICAgIGZhSGF0Q293Ym95LAogICAgICBmYUZhY2VHcmluVG9uZ3VlV2luazogZmFGYWNlR3JpblRvbmd1ZVdpbmsyLAogICAgICBmYUdyaW5Ub25ndWVXaW5rOiBmYUdyaW5Ub25ndWVXaW5rMiwKICAgICAgZmFMLAogICAgICBmYUFycm93RG93blNob3J0V2lkZSwKICAgICAgZmFTb3J0QW1vdW50RGVzYywKICAgICAgZmFTb3J0QW1vdW50RG93bkFsdCwKICAgICAgZmFIb3VyZ2xhc3NIYWxmOiBmYUhvdXJnbGFzc0hhbGYyLAogICAgICBmYUhvdXJnbGFzczI6IGZhSG91cmdsYXNzMjIsCiAgICAgIGZhU3Bvb24sCiAgICAgIGZhVXRlbnNpbFNwb29uLAogICAgICBmYUNyZWRpdENhcmQ6IGZhQ3JlZGl0Q2FyZDIsCiAgICAgIGZhQ3JlZGl0Q2FyZEFsdDogZmFDcmVkaXRDYXJkQWx0MiwKICAgICAgZmFGaWxlSW52b2ljZURvbGxhciwKICAgICAgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLAogICAgICBmYVBhc3RhZmFyaWFuaXNtLAogICAgICBmYU1hcnRpbmlHbGFzc0NpdHJ1cywKICAgICAgZmFDb2NrdGFpbCwKICAgICAgZmFCdWxsaG9ybiwKICAgICAgZmFCb3hUaXNzdWUsCiAgICAgIGZhTWF0dHJlc3NQaWxsb3csCiAgICAgIGZhQ2hldnJvbkxlZnQsCiAgICAgIGZhQ2xvdWRNb29uUmFpbiwKICAgICAgZmFBcnJvd0Rvd24xOSwKICAgICAgZmFTb3J0TnVtZXJpY0FzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd24sCiAgICAgIGZhSGFuZFNwb2NrOiBmYUhhbmRTcG9jazIsCiAgICAgIGZhV2FuZE1hZ2ljU3BhcmtsZXMsCiAgICAgIGZhTWFnaWNXYW5kU3BhcmtsZXMsCiAgICAgIGZhQ29tbWVudE1lZGljYWwsCiAgICAgIGZhQmVsbFNsYXNoOiBmYUJlbGxTbGFzaDIsCiAgICAgIGZhSGFuZHNoYWtlU2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlQWx0U2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2gsCiAgICAgIGZhQm90dGxlV2F0ZXIsCiAgICAgIGZhRGljZUQyMCwKICAgICAgZmFBcnJvd0Rvd25aQSwKICAgICAgZmFTb3J0QWxwaGFEZXNjLAogICAgICBmYVNvcnRBbHBoYURvd25BbHQsCiAgICAgIGZhQnJ1c2gsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LAogICAgICBmYUFycm93VXBTaG9ydFdpZGUsCiAgICAgIGZhU29ydEFtb3VudFVwQWx0LAogICAgICBmYUdyaXBWZXJ0aWNhbCwKICAgICAgZmFHcmlkVmVydGljYWwsCiAgICAgIGZhQ2FyVHVubmVsLAogICAgICBmYUNoYXJ0Q29sdW1uLAogICAgICBmYVRydWNrQXJyb3dSaWdodCwKICAgICAgZmFUdiwKICAgICAgZmFUZWxldmlzaW9uLAogICAgICBmYVR2QWx0LAogICAgICBmYVNlY3Rpb24sCiAgICAgIGZhUGVhY2UsCiAgICAgIGZhU3RhcjogZmFTdGFyMiwKICAgICAgZmFGbGFnOiBmYUZsYWcyLAogICAgICBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRXhjbGFtYXRpb25UcmlhbmdsZSwKICAgICAgZmFXYXJuaW5nLAogICAgICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUdyYWR1YXRpb25DYXAsCiAgICAgIGZhTW9ydGFyQm9hcmQsCiAgICAgIGZhU3RvcmUsCiAgICAgIGZhVXNlckFzdHJvbmF1dCwKICAgICAgZmFCdWlsZGluZ0ZsYWcsCiAgICAgIGZhTXVnU2F1Y2VyLAogICAgICBmYUNvZmZlZSwKICAgICAgZmFMZW1vbjogZmFMZW1vbjIsCiAgICAgIGZhQ2FyYXZhbiwKICAgICAgZmFRLAogICAgICBmYUxvY2ssCiAgICAgIGZhUGFpbnRSb2xsZXIsCiAgICAgIGZhVm9sdW1lSGlnaCwKICAgICAgZmFWb2x1bWVVcCwKICAgICAgZmFGb2xkZXJQbHVzLAogICAgICBmYU1lcmN1cnksCiAgICAgIGZhQW5jaG9yLAogICAgICBmYVNxdWFyZVBhcmtpbmcsCiAgICAgIGZhUGFya2luZywKICAgICAgZmFIYW51a2lhaCwKICAgICAgZmFSb3RhdGVMZWZ0LAogICAgICBmYVJvdGF0ZUJhY2ssCiAgICAgIGZhUm90YXRlQmFja3dhcmQsCiAgICAgIGZhVW5kb0FsdCwKICAgICAgZmFIZWFkaW5nLAogICAgICBmYUhlYWRlciwKICAgICAgZmFDcm9zc2hhaXJzLAogICAgICBmYUNpcmNsZU5vZGVzLAogICAgICBmYVdpbmRvd1Jlc3RvcmU6IGZhV2luZG93UmVzdG9yZTIsCiAgICAgIGZhUiwKICAgICAgZmFGaWx0ZXJDaXJjbGVYbWFyaywKICAgICAgZmFHb3B1cmFtLAogICAgICBmYUhlYXJ0Q2lyY2xlTWludXMsCiAgICAgIGZhU3Rhck9mTGlmZSwKICAgICAgZmFCdXNpbmVzc1RpbWUsCiAgICAgIGZhQnJpZWZjYXNlQ2xvY2ssCiAgICAgIGZhRmlyZUV4dGluZ3Vpc2hlciwKICAgICAgZmFBcnJvd0Rvd25Mb25nLAogICAgICBmYUxvbmdBcnJvd0Rvd24sCiAgICAgIGZhVXNlck1pbnVzLAogICAgICBmYU1vbmV5Q2hlY2ssCiAgICAgIGZhSG91c2VMYXB0b3AsCiAgICAgIGZhTGFwdG9wSG91c2UsCiAgICAgIGZhRG93bmxvYWQsCiAgICAgIGZhQ291Y2gsCiAgICAgIGZhUm9hZExvY2ssCiAgICAgIGZhU2Npc3NvcnMsCiAgICAgIGZhQ3V0LAogICAgICBmYUJ1ZywKICAgICAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQsCiAgICAgIGZhU2lnbk91dCwKICAgICAgZmFIYW5kSG9sZGluZ0hhbmQsCiAgICAgIGZhU3Ryb29wd2FmZWwsCiAgICAgIGZhQ2hpbGQsCiAgICAgIGZhSWNlQ3JlYW0sCiAgICAgIGZhQ29tcHV0ZXJNb3VzZSwKICAgICAgZmFNb3VzZSwKICAgICAgZmFGYXVjZXQsCiAgICAgIGZhQXdhcmQsCiAgICAgIGZhUGVyc29uRHJvd25pbmcsCiAgICAgIGZhQ2FtZXJhUm90YXRlLAogICAgICBmYUZhY2VHcmluSGVhcnRzOiBmYUZhY2VHcmluSGVhcnRzMiwKICAgICAgZmFHcmluSGVhcnRzOiBmYUdyaW5IZWFydHMyLAogICAgICBmYUZpbGVGcmFnbWVudCwKICAgICAgZmFQZXJzb25NaWxpdGFyeVJpZmxlLAogICAgICBmYVRvZ2dsZU9uLAogICAgICBmYUx1bmdzVmlydXMsCiAgICAgIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLAogICAgICBmYVBpbmdQb25nUGFkZGxlQmFsbCwKICAgICAgZmFUYWJsZVRlbm5pcywKICAgICAgZmFCb3hlc1BhY2tpbmcsCiAgICAgIGZhUGVyc29uQ2hhbGtib2FyZCwKICAgICAgZmFEaWNlVHdvLAogICAgICBmYUFycm93UmlnaHRBcnJvd0xlZnQsCiAgICAgIGZhRXhjaGFuZ2UsCiAgICAgIGZhRm9vdGJhbGwsCiAgICAgIGZhRm9vdGJhbGxCYWxsLAogICAgICBmYVRydWNrTW9uc3RlciwKICAgICAgZmFBc3RlcmlzaywKICAgICAgZmFCYXR0ZXJ5RnVsbCwKICAgICAgZmFCYXR0ZXJ5LAogICAgICBmYUJhdHRlcnk1LAogICAgICBmYUNoaWxkRHJlc3MsCiAgICAgIGZhRmFjZUtpc3NCZWFtOiBmYUZhY2VLaXNzQmVhbTIsCiAgICAgIGZhS2lzc0JlYW06IGZhS2lzc0JlYW0yLAogICAgICBmYVRyYXNoQ2FuQXJyb3dVcCwKICAgICAgZmFUcmFzaFJlc3RvcmVBbHQsCiAgICAgIGZhRm9udCwKICAgICAgZmFCb3JlSG9sZSwKICAgICAgZmFWaXJ1c0NvdmlkLAogICAgICBmYUZpbGVQZGY6IGZhRmlsZVBkZjIsCiAgICAgIGZhTGFuZ3VhZ2UsCiAgICAgIGZhU2hpZWxkSGFsdmVkLAogICAgICBmYVNoaWVsZEFsdCwKICAgICAgZmFDYXJldFVwLAogICAgICBmYUZpbGVQZW4sCiAgICAgIGZhRmlsZUVkaXQsCiAgICAgIGZhUGVyc29uQmlraW5nLAogICAgICBmYUJpa2luZywKICAgICAgZmFCb29rT3BlblJlYWRlciwKICAgICAgZmFCb29rUmVhZGVyLAogICAgICBmYUdsYXNzV2F0ZXJEcm9wbGV0LAogICAgICBmYVRvd2VyQnJvYWRjYXN0LAogICAgICBmYUJyb2FkY2FzdFRvd2VyLAogICAgICBmYU1pbmltaXplLAogICAgICBmYUNvbXByZXNzQXJyb3dzQWx0LAogICAgICBmYUFycm93UmlnaHRUb0NpdHksCiAgICAgIGZhTGFwdG9wTWVkaWNhbCwKICAgICAgZmFCcmVhZFNsaWNlLAogICAgICBmYUdsb2JlLAogICAgICBmYUZvbGRlck1pbnVzLAogICAgICBmYU1hc2tGYWNlLAogICAgICBmYUJvbmcsCiAgICAgIGZhUm9hZEJyaWRnZSwKICAgICAgZmFBcnJvd1VwOTEsCiAgICAgIGZhU29ydE51bWVyaWNVcEFsdCwKICAgICAgZmFNb3VudGFpbkNpdHksCiAgICAgIGZhQXJyb3dEb3duOTEsCiAgICAgIGZhU29ydE51bWVyaWNEZXNjLAogICAgICBmYVNvcnROdW1lcmljRG93bkFsdCwKICAgICAgZmFGYWNlR3JpbldpZGU6IGZhRmFjZUdyaW5XaWRlMiwKICAgICAgZmFHcmluQWx0OiBmYUdyaW5BbHQyLAogICAgICBmYVBvb3AsCiAgICAgIGZhRGhhcm1hY2hha3JhLAogICAgICBmYUJhdHRlcnlRdWFydGVyLAogICAgICBmYUJhdHRlcnkyLAogICAgICBmYUFua2gsCiAgICAgIGZhRGlhbW9uZCwKICAgICAgZmFTdWJzY3JpcHQsCiAgICAgIGZhUnVwZWVTaWduLAogICAgICBmYVJ1cGVlLAogICAgICBmYVBlcnNvblJpZmxlLAogICAgICBmYUQsCiAgICAgIGZhU3F1YXJlTmZpLAogICAgICBmYVRlZXRoLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciwKICAgICAgZmFTZWFyY2hEb2xsYXIsCiAgICAgIGZhRHVtcHN0ZXJGaXJlLAogICAgICBmYVVwbG9hZCwKICAgICAgZmFVc2VyU2xhc2gsCiAgICAgIGZhVXNlckFsdFNsYXNoLAogICAgICBmYVVzZXJMYXJnZVNsYXNoLAogICAgICBmYUFycm93TGVmdCwKICAgICAgZmFWaWFsVmlydXMsCiAgICAgIGZhQ2hlY2tEb3VibGUsCiAgICAgIGZhUGF3LAogICAgICBmYUhlbG1ldFNhZmV0eSwKICAgICAgZmFIYXJkSGF0LAogICAgICBmYUhhdEhhcmQsCiAgICAgIGZhRSwKICAgICAgZmFGYWNlTGF1Z2hTcXVpbnQ6IGZhRmFjZUxhdWdoU3F1aW50MiwKICAgICAgZmFMYXVnaFNxdWludDogZmFMYXVnaFNxdWludDIsCiAgICAgIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIsCiAgICAgIGZhQ29tcHJlc3NBbHQsCiAgICAgIGZhR2lmdHMsCiAgICAgIGZhQmVkLAogICAgICBmYU1vbmV5QmlsbFRyYW5zZmVyLAogICAgICBmYVBlcnNvblJ1bm5pbmcsCiAgICAgIGZhUnVubmluZywKICAgICAgZmFDaXJjbGVDaGV2cm9uRG93biwKICAgICAgZmFDaGV2cm9uQ2lyY2xlRG93biwKICAgICAgZmFVc2VyTnVyc2UsCiAgICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQ6IGZhRmFjZUtpc3NXaW5rSGVhcnQyLAogICAgICBmYUtpc3NXaW5rSGVhcnQ6IGZhS2lzc1dpbmtIZWFydDIsCiAgICAgIGZhRmlsbCwKICAgICAgZmFNb25leUJpbGwxV2F2ZSwKICAgICAgZmFNb25leUJpbGxXYXZlQWx0LAogICAgICBmYUxhbmRtYXJrLAogICAgICBmYU11c2ljLAogICAgICBmYUJvb2tNZWRpY2FsLAogICAgICBmYVNodWZmbGUsCiAgICAgIGZhUmFuZG9tLAogICAgICBmYVVuZGVybGluZSwKICAgICAgZmFCdWlsZGluZ1VzZXIsCiAgICAgIGZhUm9ib3QsCiAgICAgIGZhUGx1cywKICAgICAgZmFBZGQsCiAgICAgIGZhQ29weTogZmFDb3B5MiwKICAgICAgZmFDaGVzc0tpbmc6IGZhQ2hlc3NLaW5nMiwKICAgICAgZmFIb3VzZUZsb29kV2F0ZXIsCiAgICAgIGZhQml0Y29pblNpZ24sCiAgICAgIGZhQm94LAogICAgICBmYVNxdWFyZVBsdXM6IGZhU3F1YXJlUGx1czIsCiAgICAgIGZhUGx1c1NxdWFyZTogZmFQbHVzU3F1YXJlMiwKICAgICAgZmFBcnJvd3NMZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzSCwKICAgICAgZmFGYW4sCiAgICAgIGZhQ3JvdywKICAgICAgZmFGaWxlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhTGlua1NsYXNoLAogICAgICBmYUNoYWluQnJva2VuLAogICAgICBmYUNoYWluU2xhc2gsCiAgICAgIGZhVW5saW5rLAogICAgICBmYUFycm93Um90YXRlUmlnaHQsCiAgICAgIGZhQXJyb3dSaWdodFJvdGF0ZSwKICAgICAgZmFBcnJvd1JvdGF0ZUZvcndhcmQsCiAgICAgIGZhUmVkbywKICAgICAgZmFQZW5DbGlwLAogICAgICBmYVBlbkFsdCwKICAgICAgZmFEb29yQ2xvc2VkLAogICAgICBmYUFycm93RG93bldpZGVTaG9ydCwKICAgICAgZmFTb3J0QW1vdW50QXNjLAogICAgICBmYVNvcnRBbW91bnREb3duLAogICAgICBmYUNhcmV0RG93biwKICAgICAgZmFLLAogICAgICBmYUNoZWNrVG9TbG90LAogICAgICBmYVZvdGVZZWEsCiAgICAgIGZhRmlzaEZpbnMsCiAgICAgIGZhQ29tcHJlc3MsCiAgICAgIGZhQXJyb3dVcEFaLAogICAgICBmYVNvcnRBbHBoYVVwLAogICAgICBmYVVzZXJHcmFkdWF0ZSwKICAgICAgZmFGaWxlQ29kZTogZmFGaWxlQ29kZTIsCiAgICAgIGZhU29hcCwKICAgICAgZmFSZWN5Y2xlLAogICAgICBmYUZhY2VHcmluV2luazogZmFGYWNlR3JpbldpbmsyLAogICAgICBmYUdyaW5XaW5rOiBmYUdyaW5XaW5rMiwKICAgICAgZmFXYXRlckxhZGRlciwKICAgICAgZmFMYWRkZXJXYXRlciwKICAgICAgZmFTd2ltbWluZ1Bvb2wsCiAgICAgIGZhVG93ZXJDZWxsLAogICAgICBmYUNvbG9uU2lnbiwKICAgICAgZmFMYXB0b3BGaWxlLAogICAgICBmYUJhaGFpLAogICAgICBmYUhheWthbCwKICAgICAgZmFNb25leUJpbGwxOiBmYU1vbmV5QmlsbDEyLAogICAgICBmYU1vbmV5QmlsbEFsdDogZmFNb25leUJpbGxBbHQyLAogICAgICBmYUNsb3VkQm9sdCwKICAgICAgZmFUaHVuZGVyc3Rvcm0sCiAgICAgIGZhRXRoZXJuZXQsCiAgICAgIGZhSHJ5dm5pYVNpZ24sCiAgICAgIGZhSHJ5dm5pYSwKICAgICAgZmFFeWVTbGFzaDogZmFFeWVTbGFzaDIsCiAgICAgIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwKICAgICAgZmFMdWdnYWdlQ2FydCwKICAgICAgZmFSYWRpYXRpb24sCiAgICAgIGZhRmlsZVdvcmQ6IGZhRmlsZVdvcmQyLAogICAgICBmYUJlZFB1bHNlLAogICAgICBmYVByb2NlZHVyZXMsCiAgICAgIGZhVGVudHMsCiAgICAgIGZhTXVnSG90LAogICAgICBmYUJvbHQsCiAgICAgIGZhWmFwLAogICAgICBmYUphciwKICAgICAgZmFUcnVja1BsYW5lLAogICAgICBmYUhhbmRIb2xkaW5nSGVhcnQsCiAgICAgIGZhQXJyb3dSb3RhdGVMZWZ0LAogICAgICBmYUFycm93TGVmdFJvdGF0ZSwKICAgICAgZmFBcnJvd1JvdGF0ZUJhY2ssCiAgICAgIGZhQXJyb3dSb3RhdGVCYWNrd2FyZCwKICAgICAgZmFVbmRvLAogICAgICBmYUZhY2VBbmdyeTogZmFGYWNlQW5ncnkyLAogICAgICBmYUFuZ3J5OiBmYUFuZ3J5MiwKICAgICAgZmFCdXJzdCwKICAgICAgZmFaLAogICAgICBmYUJhbmRhZ2UsCiAgICAgIGZhQmFuZEFpZCwKICAgICAgZmFQbGFuZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUJ1c1NpZGUsCiAgICAgIGZhQnVncywKICAgICAgZmFCZWVyTXVnRW1wdHksCiAgICAgIGZhQmVlciwKICAgICAgZmFQZXJzb25DaXJjbGVDaGVjaywKICAgICAgZmFTdGFwbGVyLAogICAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrLAogICAgICBmYU5haXJhU2lnbiwKICAgICAgZmFXaWZpLAogICAgICBmYVdpZmkzLAogICAgICBmYVdpZmlTdHJvbmcsCiAgICAgIGZhTW9uZXlDaGVja0RvbGxhciwKICAgICAgZmFNb25leUNoZWNrQWx0LAogICAgICBmYUV5ZUxvd1Zpc2lvbiwKICAgICAgZmFMb3dWaXNpb24sCiAgICAgIGZhQ2lyY2xlQXJyb3dVcCwKICAgICAgZmFBcnJvd0NpcmNsZVVwLAogICAgICBmYUNhbWVyYVJldHJvLAogICAgICBmYUNhcHN1bGVzLAogICAgICBmYVBvbywKICAgICAgZmFFbGV2YXRvciwKICAgICAgZmFUYWcsCiAgICAgIGZhRmlsZUNpcmNsZU1pbnVzLAogICAgICBmYURvd25Mb25nLAogICAgICBmYUxvbmdBcnJvd0FsdERvd24sCiAgICAgIGZhQ29tcGFjdERpc2MsCiAgICAgIGZhU3VpdGNhc2VSb2xsaW5nLAogICAgICBmYUJvb2tRdXJhbiwKICAgICAgZmFRdXJhbiwKICAgICAgZmFQaG9uZVNsYXNoLAogICAgICBmYVJvYWRDaXJjbGVDaGVjaywKICAgICAgZmFTaG9wTG9jaywKICAgICAgZmFJbWFnZVBvcnRyYWl0LAogICAgICBmYVBvcnRyYWl0LAogICAgICBmYUJyaWRnZUxvY2ssCiAgICAgIGZhSGFtbWVyLAogICAgICBmYUFycm93VXAxOSwKICAgICAgZmFTb3J0TnVtZXJpY1VwLAogICAgICBmYUNoZXNzS25pZ2h0OiBmYUNoZXNzS25pZ2h0MiwKICAgICAgZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBmYUFycm93VXBSaWdodEZyb21TcXVhcmUsCiAgICAgIGZhRXh0ZXJuYWxMaW5rLAogICAgICBmYUFycm93RG93blVwQWNyb3NzTGluZSwKICAgICAgZmFGYWNlR3JpbkJlYW06IGZhRmFjZUdyaW5CZWFtMiwKICAgICAgZmFHcmluQmVhbTogZmFHcmluQmVhbTIsCiAgICAgIGZhUmVjdGFuZ2xlQWQsCiAgICAgIGZhQWQsCiAgICAgIGZhQm9va1RhbmFraCwKICAgICAgZmFUYW5ha2gsCiAgICAgIGZhSG90VHViUGVyc29uLAogICAgICBmYUhvdFR1YiwKICAgICAgZmFGaWxlSGFsZkRhc2hlZCwKICAgICAgZmFPdXRkZW50LAogICAgICBmYURlZGVudCwKICAgICAgZmFIYW5kUGVhY2U6IGZhSGFuZFBlYWNlMiwKICAgICAgZmFIZWFkU2lkZVZpcnVzLAogICAgICBmYUNvbXBhc3M6IGZhQ29tcGFzczIsCiAgICAgIGZhUGVuTmliLAogICAgICBmYVRlbnRBcnJvd3NEb3duLAogICAgICBmYUZvcndhcmRGYXN0LAogICAgICBmYUZhc3RGb3J3YXJkLAogICAgICBmYUNyb3AsCiAgICAgIGZhV2hpc2tleUdsYXNzLAogICAgICBmYUdsYXNzV2hpc2tleSwKICAgICAgZmFTcXVhcmU6IGZhU3F1YXJlMiwKICAgICAgZmFGYWNlR3JpbjogZmFGYWNlR3JpbjIsCiAgICAgIGZhR3JpbjogZmFHcmluMiwKICAgICAgZmFGaWxlQ29udHJhY3QsCiAgICAgIGZhQW5nbGVVcCwKICAgICAgZmFGYWNlU21pbGU6IGZhRmFjZVNtaWxlMiwKICAgICAgZmFTbWlsZTogZmFTbWlsZTIsCiAgICAgIGZhUGVyc29uRHJlc3NCdXJzdCwKICAgICAgZmFEaXZpZGUsCiAgICAgIGZhQ29kZUZvcmssCiAgICAgIGZhSG91c2VGbGFnLAogICAgICBmYUJ1aWxkaW5nQ29sdW1ucywKICAgICAgZmFCYW5rLAogICAgICBmYUluc3RpdHV0aW9uLAogICAgICBmYU11c2V1bSwKICAgICAgZmFVbml2ZXJzaXR5LAogICAgICBmYVJ1ZywKICAgICAgZmFDb2RlTWVyZ2UsCiAgICAgIGZhSG91c2VUc3VuYW1pLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0LAogICAgICBmYVVtYnJlbGxhLAogICAgICBmYUhpbGxSb2Nrc2xpZGUsCiAgICAgIGZhVXNlclNlY3JldCwKICAgICAgZmFQYWdlciwKICAgICAgZmFCcmllZmNhc2UsCiAgICAgIGZhVHJvd2VsQnJpY2tzLAogICAgICBmYVNvY2tzLAogICAgICBmYVQsCiAgICAgIGZhTWljcm9jaGlwLAogICAgICBmYVRydWNrTWVkaWNhbCwKICAgICAgZmFBbWJ1bGFuY2UsCiAgICAgIGZhT20sCiAgICAgIGZhTW9zcXVpdG9OZXQsCiAgICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlLAogICAgICBmYVVzZXJzR2VhciwKICAgICAgZmFVc2Vyc0NvZywKICAgICAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhUGF1c2UsCiAgICAgIGZhU3RhZmZTbmFrZSwKICAgICAgZmFSb2RBc2NsZXBpdXMsCiAgICAgIGZhUm9kU25ha2UsCiAgICAgIGZhU3RhZmZBZXNjdWxhcGl1cywKICAgICAgZmFQaWdneUJhbmssCiAgICAgIGZhTW9udW1lbnQsCiAgICAgIGZhQW5nbGVzUmlnaHQsCiAgICAgIGZhQW5nbGVEb3VibGVSaWdodCwKICAgICAgZmFEZXNrdG9wLAogICAgICBmYURlc2t0b3BBbHQsCiAgICAgIGZhUGxhbmVDaXJjbGVYbWFyaywKICAgICAgZmFSZXR3ZWV0LAogICAgICBmYVVzZXJHZWFyLAogICAgICBmYVVzZXJDb2csCiAgICAgIGZhQm9yZGVyQWxsLAogICAgICBmYUNvaW5zLAogICAgICBmYU1hcnNTdHJva2UsCiAgICAgIGZhSGFuZHNoYWtlQW5nbGUsCiAgICAgIGZhSGFuZHNIZWxwaW5nLAogICAgICBmYUFycm93RG93biwKICAgICAgZmFMb2NhdGlvbkRvdCwKICAgICAgZmFNYXBNYXJrZXJBbHQsCiAgICAgIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNvb2tpZUJpdGUsCiAgICAgIGZhU2NyZXdkcml2ZXJXcmVuY2gsCiAgICAgIGZhVG9vbHMsCiAgICAgIGZhSW5kZW50LAogICAgICBmYUJhcnMsCiAgICAgIGZhTmF2aWNvbiwKICAgICAgZmFIYW5kc1ByYXlpbmcsCiAgICAgIGZhUHJheWluZ0hhbmRzLAogICAgICBmYVZpcnVzZXMsCiAgICAgIGZhU2Nob29sRmxhZywKICAgICAgZmFUcmFkZW1hcmssCiAgICAgIGZhRmlyZUJ1cm5lciwKICAgICAgZmFGYWNlU21pbGVCZWFtOiBmYUZhY2VTbWlsZUJlYW0yLAogICAgICBmYVNtaWxlQmVhbTogZmFTbWlsZUJlYW0yLAogICAgICBmYVRlbnRBcnJvd0xlZnRSaWdodCwKICAgICAgZmFSb3V0ZSwKICAgICAgZmFBbmdsZXNVcCwKICAgICAgZmFBbmdsZURvdWJsZVVwLAogICAgICBmYUJ1Y2tldCwKICAgICAgZmFMZXNzVGhhbkVxdWFsLAogICAgICBmYUZvbGRlckNsb3NlZDogZmFGb2xkZXJDbG9zZWQyLAogICAgICBmYVBlcnNvblRocm91Z2hXaW5kb3csCiAgICAgIGZhU2Nob29sTG9jaywKICAgICAgZmFQZXJzb25CdXJzdCwKICAgICAgZmFMZWZ0TG9uZywKICAgICAgZmFMb25nQXJyb3dBbHRMZWZ0LAogICAgICBmYUxvY2F0aW9uQ3Jvc3NoYWlycywKICAgICAgZmFMb2NhdGlvbiwKICAgICAgZmFQZXJzb25Eb3RzRnJvbUxpbmUsCiAgICAgIGZhRGlhZ25vc2VzLAogICAgICBmYUdhdWdlU2ltcGxlSGlnaCwKICAgICAgZmFUYWNob21ldGVyLAogICAgICBmYVRhY2hvbWV0ZXJGYXN0LAogICAgICBmYUFuZ2xlc0xlZnQsCiAgICAgIGZhQW5nbGVEb3VibGVMZWZ0LAogICAgICBmYVVwRG93biwKICAgICAgZmFBcnJvd3NBbHRWLAogICAgICBmYUJhdHRlcnlFbXB0eSwKICAgICAgZmFCYXR0ZXJ5MCwKICAgICAgZmFLZXlib2FyZDogZmFLZXlib2FyZDIsCiAgICAgIGZhQ29va2llLAogICAgICBmYVN0b3B3YXRjaCwKICAgICAgZmFFamVjdCwKICAgICAgZmFTYXRlbGxpdGVEaXNoLAogICAgICBmYUZhY2VSb2xsaW5nRXllczogZmFGYWNlUm9sbGluZ0V5ZXMyLAogICAgICBmYU1laFJvbGxpbmdFeWVzOiBmYU1laFJvbGxpbmdFeWVzMiwKICAgICAgZmFMaXN0Q2hlY2ssCiAgICAgIGZhVGFza3MsCiAgICAgIGZhU2Fja1htYXJrLAogICAgICBmYUhhc2h0YWcsCiAgICAgIGZhVHJhaW4sCiAgICAgIGZhR2FtZXBhZCwKICAgICAgZmFGaWxlRXhwb3J0LAogICAgICBmYUFycm93UmlnaHRGcm9tRmlsZSwKICAgICAgZmFGYWNlR3JpbWFjZTogZmFGYWNlR3JpbWFjZTIsCiAgICAgIGZhR3JpbWFjZTogZmFHcmltYWNlMiwKICAgICAgZmFUcmFpblN1YndheSwKICAgICAgZmFTdWJ3YXksCiAgICAgIGZhQ2lyY2xlRG90OiBmYUNpcmNsZURvdDIsCiAgICAgIGZhRG90Q2lyY2xlOiBmYURvdENpcmNsZTIsCiAgICAgIGZhT2JqZWN0R3JvdXA6IGZhT2JqZWN0R3JvdXAyLAogICAgICBmYVNoaXAsCiAgICAgIGZhQywKICAgICAgZmFTcXVhcmVQaG9uZSwKICAgICAgZmFQaG9uZVNxdWFyZSwKICAgICAgZmFSdWxlckNvbWJpbmVkLAogICAgICBmYUFycm93c1JvdGF0ZSwKICAgICAgZmFSZWZyZXNoLAogICAgICBmYVN5bmMsCiAgICAgIGZhUGVyc29uRHJlc3MsCiAgICAgIGZhRmVtYWxlLAogICAgICBmYUJvb2tPcGVuLAogICAgICBmYUZvbGRlclRyZWUsCiAgICAgIGZhQm94QXJjaGl2ZSwKICAgICAgZmFBcmNoaXZlLAogICAgICBmYVRlbnRBcnJvd0Rvd25Ub0xpbmUsCiAgICAgIGZhUXJjb2RlLAogICAgICBmYURyYWdvbiwKICAgICAgZmFIb3VyZ2xhc3NFbmQsCiAgICAgIGZhSG91cmdsYXNzMzogZmFIb3VyZ2xhc3MzMiwKICAgICAgZmFHcmlwLAogICAgICBmYUdyaWRIb3Jpem9udGFsLAogICAgICBmYUdyaXBIb3Jpem9udGFsLAogICAgICBmYUJvcmRlclRvcExlZnQsCiAgICAgIGZhQm9yZGVyU3R5bGUsCiAgICAgIGZhTGlzdFVsLAogICAgICBmYUxpc3REb3RzLAogICAgICBmYVBlb3BsZVJvYmJlcnksCiAgICAgIGZhTW9iaWxlQnV0dG9uLAogICAgICBmYUFycm93RG93bkFaLAogICAgICBmYVNvcnRBbHBoYUFzYywKICAgICAgZmFTb3J0QWxwaGFEb3duLAogICAgICBmYU1vbmV5QmlsbCwKICAgICAgZmFDaXJjbGVNaW51cywKICAgICAgZmFNaW51c0NpcmNsZSwKICAgICAgZmFBcnJvd1BvaW50ZXIsCiAgICAgIGZhTW91c2VQb2ludGVyLAogICAgICBmYVNxdWFyZVNoYXJlTm9kZXMsCiAgICAgIGZhU2hhcmVBbHRTcXVhcmUsCiAgICAgIGZhVGFibGVDZWxsc0xhcmdlLAogICAgICBmYVRoTGFyZ2UsCiAgICAgIGZhQ2F0LAogICAgICBmYUNhbGVuZGFyV2VlaywKICAgICAgZmFDb2RlQ29tcGFyZSwKICAgICAgZmFSb2FkQ2lyY2xlWG1hcmssCiAgICAgIGZhUGFsbGV0LAogICAgICBmYUNha2VDYW5kbGVzLAogICAgICBmYUJpcnRoZGF5Q2FrZSwKICAgICAgZmFDYWtlLAogICAgICBmYUJ1Z1NsYXNoLAogICAgICBmYVRhcnAsCiAgICAgIGZhRGlhZ3JhbVByZWRlY2Vzc29yLAogICAgICBmYUZhY2VGbHVzaGVkOiBmYUZhY2VGbHVzaGVkMiwKICAgICAgZmFGbHVzaGVkOiBmYUZsdXNoZWQyLAogICAgICBmYURpYWdyYW1OZXh0LAogICAgICBmYUFuY2hvckNpcmNsZVhtYXJrLAogICAgICBmYVBlcnNvbkNpcmNsZVhtYXJrLAogICAgICBmYVNwYSwKICAgICAgZmFCYXJzUHJvZ3Jlc3MsCiAgICAgIGZhVGFza3NBbHQsCiAgICAgIGZhSGVhcnRDaXJjbGVDaGVjaywKICAgICAgZmFNYXJzU3Ryb2tlUmlnaHQsCiAgICAgIGZhTWFyc1N0cm9rZUgsCiAgICAgIGZhVG93ZXJPYnNlcnZhdGlvbiwKICAgICAgZmFTdGVybGluZ1NpZ24sCiAgICAgIGZhR2JwLAogICAgICBmYVBvdW5kU2lnbiwKICAgICAgZmFGYXVjZXREcmlwLAogICAgICBmYUNpcmNsZUluZm8sCiAgICAgIGZhSW5mb0NpcmNsZSwKICAgICAgZmFGZWF0aGVyLAogICAgICBmYUJvd2xSaWNlLAogICAgICBmYVN0YXJIYWxmU3Ryb2tlOiBmYVN0YXJIYWxmU3Ryb2tlMiwKICAgICAgZmFTdGFySGFsZkFsdDogZmFTdGFySGFsZkFsdDIsCiAgICAgIGZhVGVtcGVyYXR1cmVBcnJvd0Rvd24sCiAgICAgIGZhVGVtcGVyYXR1cmVEb3duLAogICAgICBmYU1hc2tWZW50aWxhdG9yLAogICAgICBmYUZpbGVWaWRlbzogZmFGaWxlVmlkZW8yLAogICAgICBmYUFycm93VHJlbmREb3duLAogICAgICBmYU9pbENhbiwKICAgICAgZmFQZW9wbGVDYXJyeUJveCwKICAgICAgZmFQZW9wbGVDYXJyeSwKICAgICAgZmFDaGFpciwKICAgICAgZmFXaW5kLAogICAgICBmYUxheWVyR3JvdXAsCiAgICAgIGZhSGVhZFNpZGVNYXNrLAogICAgICBmYUhhbmRzLAogICAgICBmYVNpZ25MYW5ndWFnZSwKICAgICAgZmFTaWduaW5nLAogICAgICBmYVRhYmxldHMsCiAgICAgIGZhV2VpZ2h0SGFuZ2luZywKICAgICAgZmFEaWNlLAogICAgICBmYVNob3BTbGFzaCwKICAgICAgZmFTdG9yZUFsdFNsYXNoLAogICAgICBmYVNvcnREb3duLAogICAgICBmYVNvcnREZXNjLAogICAgICBmYVBlc2V0YVNpZ24sCiAgICAgIGZhVGFibGV0U2NyZWVuQnV0dG9uLAogICAgICBmYVRhYmxldEFsdCwKICAgICAgZmFIYW5kSG9sZGluZ0RvbGxhciwKICAgICAgZmFIYW5kSG9sZGluZ1VzZCwKICAgICAgZmFTaGllbGQsCiAgICAgIGZhU2hpZWxkQmxhbmssCiAgICAgIGZhRmFjZUxhdWdoOiBmYUZhY2VMYXVnaDIsCiAgICAgIGZhTGF1Z2g6IGZhTGF1Z2gyLAogICAgICBmYUhhbmRzSG9sZGluZywKICAgICAgZmFDYXJ0U2hvcHBpbmcsCiAgICAgIGZhU2hvcHBpbmdDYXJ0LAogICAgICBmYU9jdGFnb24sCiAgICAgIGZhSGFuZFBvaW50ZXI6IGZhSGFuZFBvaW50ZXIyLAogICAgICBmYVJlZ2lzdGVyZWQ6IGZhUmVnaXN0ZXJlZDIsCiAgICAgIGZhSG91c2VTaWduYWwsCiAgICAgIGZhQmFuZ2xhZGVzaGlUYWthU2lnbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMKdmFyIGRlZmF1bHRBdHRyaWJ1dGVzOwp2YXIgaW5pdF9kZWZhdWx0QXR0cmlidXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMiKCkgewogICAgZGVmYXVsdEF0dHJpYnV0ZXMgPSB7CiAgICAgIHhtbG5zOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLAogICAgICB3aWR0aDogMjQsCiAgICAgIGhlaWdodDogMjQsCiAgICAgIHZpZXdCb3g6ICIwIDAgMjQgMjQiLAogICAgICBmaWxsOiAibm9uZSIsCiAgICAgIHN0cm9rZTogImN1cnJlbnRDb2xvciIsCiAgICAgICJzdHJva2Utd2lkdGgiOiAyLAogICAgICAic3Ryb2tlLWxpbmVjYXAiOiAicm91bmQiLAogICAgICAic3Ryb2tlLWxpbmVqb2luIjogInJvdW5kIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vY3JlYXRlRWxlbWVudC5qcwp2YXIgY3JlYXRlU1ZHRWxlbWVudCwgY3JlYXRlRWxlbWVudDI7CnZhciBpbml0X2NyZWF0ZUVsZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2NyZWF0ZUVsZW1lbnQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0QXR0cmlidXRlcygpOwogICAgY3JlYXRlU1ZHRWxlbWVudCA9IChbdGFnLCBhdHRycywgY2hpbGRyZW4yXSkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCB0YWcpOwogICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgobmFtZSkgPT4gewogICAgICAgIGVsZW1lbnQ0LnNldEF0dHJpYnV0ZShuYW1lLCBTdHJpbmcoYXR0cnNbbmFtZV0pKTsKICAgICAgfSk7CiAgICAgIGlmIChjaGlsZHJlbjI/Lmxlbmd0aCkgewogICAgICAgIGNoaWxkcmVuMi5mb3JFYWNoKChjaGlsZCkgPT4gewogICAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gY3JlYXRlU1ZHRWxlbWVudChjaGlsZCk7CiAgICAgICAgICBlbGVtZW50NC5hcHBlbmRDaGlsZChjaGlsZEVsZW1lbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH07CiAgICBjcmVhdGVFbGVtZW50MiA9IChpY29uTm9kZSwgY3VzdG9tQXR0cnMgPSB7fSkgPT4gewogICAgICBjb25zdCB0YWcgPSAic3ZnIjsKICAgICAgY29uc3QgYXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY3VzdG9tQXR0cnMKICAgICAgfTsKICAgICAgcmV0dXJuIGNyZWF0ZVNWR0VsZW1lbnQoW3RhZywgYXR0cnMsIGljb25Ob2RlXSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9yZXBsYWNlRWxlbWVudC5qcwp2YXIgZ2V0QXR0cnMsIGdldENsYXNzTmFtZXMsIGNvbWJpbmVDbGFzc05hbWVzLCB0b1Bhc2NhbENhc2UsIHJlcGxhY2VFbGVtZW50Owp2YXIgaW5pdF9yZXBsYWNlRWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vcmVwbGFjZUVsZW1lbnQuanMiKCkgewogICAgaW5pdF9jcmVhdGVFbGVtZW50KCk7CiAgICBpbml0X2RlZmF1bHRBdHRyaWJ1dGVzKCk7CiAgICBnZXRBdHRycyA9IChlbGVtZW50NCkgPT4gQXJyYXkuZnJvbShlbGVtZW50NC5hdHRyaWJ1dGVzKS5yZWR1Y2UoKGF0dHJzLCBhdHRyKSA9PiB7CiAgICAgIGF0dHJzW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlOwogICAgICByZXR1cm4gYXR0cnM7CiAgICB9LCB7fSk7CiAgICBnZXRDbGFzc05hbWVzID0gKGF0dHJzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICJzdHJpbmciKSByZXR1cm4gYXR0cnM7CiAgICAgIGlmICghYXR0cnMgfHwgIWF0dHJzLmNsYXNzKSByZXR1cm4gIiI7CiAgICAgIGlmIChhdHRycy5jbGFzcyAmJiB0eXBlb2YgYXR0cnMuY2xhc3MgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzLnNwbGl0KCIgIik7CiAgICAgIH0KICAgICAgaWYgKGF0dHJzLmNsYXNzICYmIEFycmF5LmlzQXJyYXkoYXR0cnMuY2xhc3MpKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICBjb21iaW5lQ2xhc3NOYW1lcyA9IChhcnJheU9mQ2xhc3NuYW1lcykgPT4gewogICAgICBjb25zdCBjbGFzc05hbWVBcnJheSA9IGFycmF5T2ZDbGFzc25hbWVzLmZsYXRNYXAoZ2V0Q2xhc3NOYW1lcyk7CiAgICAgIHJldHVybiBjbGFzc05hbWVBcnJheS5tYXAoKGNsYXNzSXRlbSkgPT4gY2xhc3NJdGVtLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcigodmFsdWUyLCBpbmRleDIsIHNlbGYyKSA9PiBzZWxmMi5pbmRleE9mKHZhbHVlMikgPT09IGluZGV4Mikuam9pbigiICIpOwogICAgfTsKICAgIHRvUGFzY2FsQ2FzZSA9IChzdHJpbmczKSA9PiBzdHJpbmczLnJlcGxhY2UoLyhcdykoXHcqKShffC18XHMqKS9nLCAoZzAsIGcxLCBnMjIpID0+IGcxLnRvVXBwZXJDYXNlKCkgKyBnMjIudG9Mb3dlckNhc2UoKSk7CiAgICByZXBsYWNlRWxlbWVudCA9IChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNSwgYXR0cnMgfSkgPT4gewogICAgICBjb25zdCBpY29uTmFtZSA9IGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgIGlmIChpY29uTmFtZSA9PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IENvbXBvbmVudE5hbWUgPSB0b1Bhc2NhbENhc2UoaWNvbk5hbWUpOwogICAgICBjb25zdCBpY29uTm9kZSA9IGljb25zNVtDb21wb25lbnROYW1lXTsKICAgICAgaWYgKCFpY29uTm9kZSkgewogICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oCiAgICAgICAgICBgJHtlbGVtZW50NC5vdXRlckhUTUx9IGljb24gbmFtZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCBpY29ucyBvYmplY3QuYAogICAgICAgICk7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudEF0dHJzID0gZ2V0QXR0cnMoZWxlbWVudDQpOwogICAgICBjb25zdCBpY29uQXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgImRhdGEtbHVjaWRlIjogaWNvbk5hbWUsCiAgICAgICAgLi4uYXR0cnMsCiAgICAgICAgLi4uZWxlbWVudEF0dHJzCiAgICAgIH07CiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjb21iaW5lQ2xhc3NOYW1lcyhbImx1Y2lkZSIsIGBsdWNpZGUtJHtpY29uTmFtZX1gLCBlbGVtZW50QXR0cnMsIGF0dHJzXSk7CiAgICAgIGlmIChjbGFzc05hbWVzKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihpY29uQXR0cnMsIHsKICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQyKGljb25Ob2RlLCBpY29uQXR0cnMpOwogICAgICByZXR1cm4gZWxlbWVudDQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKHN2Z0VsZW1lbnQsIGVsZW1lbnQ0KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2EtYXJyb3ctZG93bi5qcwp2YXIgQUFycm93RG93bjsKdmFyIGluaXRfYV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LWRvd24uanMiKCkgewogICAgQUFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LXVwLmpzCnZhciBBQXJyb3dVcDsKdmFyIGluaXRfYV9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1hcnJvdy11cC5qcyIoKSB7CiAgICBBQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDExIDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWxhcmdlLXNtYWxsLmpzCnZhciBBTGFyZ2VTbWFsbDsKdmFyIGluaXRfYV9sYXJnZV9zbWFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1sYXJnZS1zbWFsbC5qcyIoKSB7CiAgICBBTGFyZ2VTbWFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE2IDIuNTM2LTcuMzI4YTEuMDIgMS4wMiAxIDAgMSAxLjkyOCAwTDIyIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjY5NyAxNGg1LjYwNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY2Nlc3NpYmlsaXR5LmpzCnZhciBBY2Nlc3NpYmlsaXR5Owp2YXIgaW5pdF9hY2Nlc3NpYmlsaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY2Nlc3NpYmlsaXR5LmpzIigpIHsKICAgIEFjY2Vzc2liaWxpdHkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICI0IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTkgMS03LTYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMy0zIDUuNSAzLTIuMzYgMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc2IDE3LjVhNSA1IDAgMCAwLTYuODgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjdGl2aXR5LmpzCnZhciBBY3Rpdml0eTsKdmFyIGluaXRfYWN0aXZpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjdGl2aXR5LmpzIigpIHsKICAgIEFjdGl2aXR5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fpci12ZW50LmpzCnZhciBBaXJWZW50Owp2YXIgaW5pdF9haXJfdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlyLXZlbnQuanMiKCkgewogICAgQWlyVmVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLWNoZWNrLmpzCnZhciBBbGFybUNsb2NrQ2hlY2s7CnZhciBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1jaGVjay5qcyIoKSB7CiAgICBBbGFybUNsb2NrQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMyAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlycGxheS5qcwp2YXIgQWlycGxheTsKdmFyIGluaXRfYWlycGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlycGxheS5qcyIoKSB7CiAgICBBaXJwbGF5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNSA1IDZIN1oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1taW51cy5qcwp2YXIgQWxhcm1DbG9ja01pbnVzOwp2YXIgaW5pdF9hbGFybV9jbG9ja19taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stbWludXMuanMiKCkgewogICAgQWxhcm1DbG9ja01pbnVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLW9mZi5qcwp2YXIgQWxhcm1DbG9ja09mZjsKdmFyIGluaXRfYWxhcm1fY2xvY2tfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1vZmYuanMiKCkgewogICAgQWxhcm1DbG9ja09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuODcgNi44N2E4IDggMCAxIDAgMTEuMjYgMTEuMjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOSAxNC4yNWE4IDggMCAwIDAtOS4xNS05LjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMTguNjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0IDIgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLXBsdXMuanMKdmFyIEFsYXJtQ2xvY2tQbHVzOwp2YXIgaW5pdF9hbGFybV9jbG9ja19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1wbHVzLmpzIigpIHsKICAgIEFsYXJtQ2xvY2tQbHVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2suanMKdmFyIEFsYXJtQ2xvY2s7CnZhciBpbml0X2FsYXJtX2Nsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay5qcyIoKSB7CiAgICBBbGFybUNsb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djRsMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1zbW9rZS5qcwp2YXIgQWxhcm1TbW9rZTsKdmFyIGluaXRfYWxhcm1fc21va2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLXNtb2tlLmpzIigpIHsKICAgIEFsYXJtU21va2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMWMwLTIuNSAyLTIuNSAyLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjFjMC0yLjUgMi0yLjUgMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDgtLjggM2ExLjI1IDEuMjUgMCAwIDEtMS4yIDFIN2ExLjI1IDEuMjUgMCAwIDEtMS4yLTFMNSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDNhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMWMwLTIuNSAyLTIuNSAyLTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGJ1bS5qcwp2YXIgQWxidW07CnZhciBpbml0X2FsYnVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGJ1bS5qcyIoKSB7CiAgICBBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTEgMyAxMSAxMSAxNCA4IDE3IDExIDE3IDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1jZW50ZXItaG9yaXpvbnRhbC5qcwp2YXIgQWxpZ25DZW50ZXJIb3Jpem9udGFsOwp2YXIgaW5pdF9hbGlnbl9jZW50ZXJfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLWhvcml6b250YWwuanMiKCkgewogICAgQWxpZ25DZW50ZXJIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnY0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNGEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2djFhMiAyIDAgMCAxLTIgMmgtMmEyIDIgMCAwIDEtMi0ydi0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhWN2MwLTEuMS45LTIgMi0yaDJhMiAyIDAgMCAxIDIgMnYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLXZlcnRpY2FsLmpzCnZhciBBbGlnbkNlbnRlclZlcnRpY2FsOwp2YXIgaW5pdF9hbGlnbl9jZW50ZXJfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWNlbnRlci12ZXJ0aWNhbC5qcyIoKSB7CiAgICBBbGlnbkNlbnRlclZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwSDRhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGg0YTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0yaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBIN2EyIDIgMCAwIDEtMi0ydi0yYzAtMS4xLjktMiAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGgxYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAyaC0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tZW5kLWhvcml6b250YWwuanMKdmFyIEFsaWduRW5kSG9yaXpvbnRhbDsKdmFyIGluaXRfYWxpZ25fZW5kX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC1ob3Jpem9udGFsLmpzIigpIHsKICAgIEFsaWduRW5kSG9yaXpvbnRhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjkiLCB4OiAiMTQiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMkgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tZW5kLXZlcnRpY2FsLmpzCnZhciBBbGlnbkVuZFZlcnRpY2FsOwp2YXIgaW5pdF9hbGlnbl9lbmRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBBbGlnbkVuZFZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNiIsIHg6ICI5IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyVjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtY2VudGVyLmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtY2VudGVyLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDdWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNVYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLXN0YXJ0LmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQ7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLXN0YXJ0LmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI0IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE0IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1jZW50ZXIuanMKdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1jZW50ZXIuanMiKCkgewogICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanMKdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlFbmQ7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanMiKCkgewogICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjEyIiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1zdGFydC5qcwp2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0Owp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1zdGFydC5qcyIoKSB7CiAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNiIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNiIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYXJvdW5kLmpzCnZhciBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDsKdmFyIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYXJvdW5kLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjkiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qcwp2YXIgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX3NwYWNlX2JldHdlZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qcyIoKSB7CiAgICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNSIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAydjIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tc3RhcnQtaG9yaXpvbnRhbC5qcwp2YXIgQWxpZ25TdGFydEhvcml6b250YWw7CnZhciBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LWhvcml6b250YWwuanMiKCkgewogICAgQWxpZ25TdGFydEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMkgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tc3RhcnQtdmVydGljYWwuanMKdmFyIEFsaWduU3RhcnRWZXJ0aWNhbDsKdmFyIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LXZlcnRpY2FsLmpzIigpIHsKICAgIEFsaWduU3RhcnRWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjkiLCBoZWlnaHQ6ICI2IiwgeDogIjYiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjYiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWNlbnRlci5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI7CnZhciBpbml0X2FsaWduX3ZlcnRpY2FsX2Rpc3RyaWJ1dGVfY2VudGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWNlbnRlci5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDdoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN0gyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIxNCIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWVuZC5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ7CnZhciBpbml0X2FsaWduX3ZlcnRpY2FsX2Rpc3RyaWJ1dGVfZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWVuZC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1zdGFydC5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydDsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1zdGFydC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktY2VudGVyLmpzCnZhciBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfanVzdGlmeV9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktY2VudGVyLmpzIigpIHsKICAgIEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQuanMKdmFyIEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOwp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQuanMiKCkgewogICAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LXN0YXJ0LmpzCnZhciBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0Owp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LXN0YXJ0LmpzIigpIHsKICAgIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMmgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLXNwYWNlLWFyb3VuZC5qcwp2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOwp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9hcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLXNwYWNlLWFyb3VuZC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI5Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi5qcwp2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfc3BhY2VfYmV0d2VlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgM2gyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtYnVsYW5jZS5qcwp2YXIgQW1idWxhbmNlOwp2YXIgaW5pdF9hbWJ1bGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtYnVsYW5jZS5qcyIoKSB7CiAgICBBbWJ1bGFuY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE4aDJhMSAxIDAgMCAwIDEtMXYtMy4yOGExIDEgMCAwIDAtLjY4NC0uOTQ4bC0xLjkyMy0uNjQxYTEgMSAwIDAgMS0uNTc4LS41MDJsLTEuNTM5LTMuMDc2QTEgMSAwIDAgMCAxNi4zODIgOEgxNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBlcnNhbmQuanMKdmFyIEFtcGVyc2FuZDsKdmFyIGluaXRfYW1wZXJzYW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBlcnNhbmQuanMiKCkgewogICAgQW1wZXJzYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNy41IDEyYTggOCAwIDAgMS04IDhBNC41IDQuNSAwIDAgMSA1IDE1LjVjMC02IDgtNCA4LTguNWEzIDMgMCAxIDAtNiAwYzAgMyAyLjUgOC41IDEyIDEzIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qcwp2YXIgQW1wZXJzYW5kczsKdmFyIGluaXRfYW1wZXJzYW5kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qcyIoKSB7CiAgICBBbXBlcnNhbmRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMCAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBob3JhLmpzCnZhciBBbXBob3JhOwp2YXIgaW5pdF9hbXBob3JhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBob3JhLmpzIigpIHsKICAgIEFtcGhvcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjUuNjMyYzAgLjQyNC0uMjcyLjc5NS0uNjUzLjk4MkE2IDYgMCAwIDAgNiAxNGMuMDA2IDQgMyA3IDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1SDhhMiAyIDAgMCAwIDAgNGguNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1LjYzMmMwIC40MjQuMjcyLjc5NS42NTIuOTgyQTYgNiAwIDAgMSAxOCAxNGMwIDQtMyA3LTUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA1aDJhMiAyIDAgMCAxIDAgNGgtLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanMKdmFyIEFuY2hvcjsKdmFyIGluaXRfYW5jaG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanMiKCkgewogICAgQW5jaG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMyAyLTFhOSA5IDAgMCAxLTE4IDBsMiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTFoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qcwp2YXIgQW5ncnk7CnZhciBpbml0X2FuZ3J5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qcyIoKSB7CiAgICBBbmdyeSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgOCAxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMi41LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5ub3llZC5qcwp2YXIgQW5ub3llZDsKdmFyIGluaXRfYW5ub3llZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5ub3llZC5qcyIoKSB7CiAgICBBbm5veWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudGVubmEuanMKdmFyIEFudGVubmE7CnZhciBpbml0X2FudGVubmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudGVubmEuanMiKCkgewogICAgQW50ZW5uYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTIgNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTIgNS0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMiA1LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEyIDUtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDdoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudmlsLmpzCnZhciBBbnZpbDsKdmFyIGluaXRfYW52aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudmlsLmpzIigpIHsKICAgIEFudmlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMEg2YTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNWExIDEgMCAwIDEgMS0xaDEzYTEgMSAwIDAgMSAxIDEgNyA3IDAgMCAxLTcgN0g4YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMyAzIDAgMCAxIDMtM2g4YTMgMyAwIDAgMSAzIDMgMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qcwp2YXIgQXBlcnR1cmU7CnZhciBpbml0X2FwZXJ0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qcyIoKSB7CiAgICBBcGVydHVyZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMxIDggNS43NCA5Ljk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjkgOGgxMS40OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjM4IDEyIDUuNzQtOS45NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY5IDE2IDMuOTUgNi4wNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4zMSAxNkgyLjgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjYyIDEyLTUuNzQgOS45NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcC13aW5kb3ctbWFjLmpzCnZhciBBcHBXaW5kb3dNYWM7CnZhciBpbml0X2FwcF93aW5kb3dfbWFjID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHAtd2luZG93LW1hYy5qcyIoKSB7CiAgICBBcHBXaW5kb3dNYWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXBwLXdpbmRvdy5qcwp2YXIgQXBwV2luZG93Owp2YXIgaW5pdF9hcHBfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHAtd2luZG93LmpzIigpIHsKICAgIEFwcFdpbmRvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHBsZS5qcwp2YXIgQXBwbGU7CnZhciBpbml0X2FwcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHBsZS5qcyIoKSB7CiAgICBBcHBsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNTI4VjNhMSAxIDAgMCAxIDEtMWgwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjIzNyAyMUExNSAxNSAwIDAgMCAyMiAxMWE2IDYgMCAwIDAtMTAtNC40NzJBNiA2IDAgMCAwIDIgMTFhMTUuMSAxNS4xIDAgMCAwIDMuNzYzIDEwIDMgMyAwIDAgMCAzLjY0OC42NDggNS41IDUuNSAwIDAgMSA1LjE3OCAwQTMgMyAwIDAgMCAxOC4yMzcgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcmNoaXZlLXJlc3RvcmUuanMKdmFyIEFyY2hpdmVSZXN0b3JlOwp2YXIgaW5pdF9hcmNoaXZlX3Jlc3RvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUtcmVzdG9yZS5qcyIoKSB7CiAgICBBcmNoaXZlUmVzdG9yZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4djExYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcmNoaXZlLXguanMKdmFyIEFyY2hpdmVYOwp2YXIgaW5pdF9hcmNoaXZlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUteC5qcyIoKSB7CiAgICBBcmNoaXZlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxNyA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyIDUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUuanMKdmFyIEFyY2hpdmU7CnZhciBpbml0X2FyY2hpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUuanMiKCkgewogICAgQXJjaGl2ZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcm1jaGFpci5qcwp2YXIgQXJtY2hhaXI7CnZhciBpbml0X2FybWNoYWlyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcm1jaGFpci5qcyIoKSB7CiAgICBBcm1jaGFpciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDlWNmEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTZhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjExYTIgMiAwIDAgMC00IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qcwp2YXIgQXJyb3dCaWdEb3duRGFzaDsKdmFyIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qcyIoKSB7CiAgICBBcnJvd0JpZ0Rvd25EYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA0aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctZG93bi5qcwp2YXIgQXJyb3dCaWdEb3duOwp2YXIgaW5pdF9hcnJvd19iaWdfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24uanMiKCkgewogICAgQXJyb3dCaWdEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC1kYXNoLmpzCnZhciBBcnJvd0JpZ0xlZnREYXNoOwp2YXIgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC1kYXNoLmpzIigpIHsKICAgIEFycm93QmlnTGVmdERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDl2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1sZWZ0LmpzCnZhciBBcnJvd0JpZ0xlZnQ7CnZhciBpbml0X2Fycm93X2JpZ19sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC5qcyIoKSB7CiAgICBBcnJvd0JpZ0xlZnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanMKdmFyIEFycm93QmlnUmlnaHREYXNoOwp2YXIgaW5pdF9hcnJvd19iaWdfcmlnaHRfZGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanMiKCkgewogICAgQXJyb3dCaWdSaWdodERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LmpzCnZhciBBcnJvd0JpZ1JpZ2h0Owp2YXIgaW5pdF9hcnJvd19iaWdfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1yaWdodC5qcyIoKSB7CiAgICBBcnJvd0JpZ1JpZ2h0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC1kYXNoLmpzCnZhciBBcnJvd0JpZ1VwRGFzaDsKdmFyIGluaXRfYXJyb3dfYmlnX3VwX2Rhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC1kYXNoLmpzIigpIHsKICAgIEFycm93QmlnVXBEYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAxM2ExIDEgMCAwIDAtMS0xSDUuMDYxYTEgMSAwIDAgMS0uNzUtMS44MTFsNi44MzYtNi44MzVhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDcgMGw2LjgzNSA2LjgzNWExIDEgMCAwIDEtLjc1IDEuODExSDE2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC5qcwp2YXIgQXJyb3dCaWdVcDsKdmFyIGluaXRfYXJyb3dfYmlnX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctdXAuanMiKCkgewogICAgQXJyb3dCaWdVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzCnZhciBBcnJvd0Rvd24wMTsKdmFyIGluaXRfYXJyb3dfZG93bl8wXzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzIigpIHsKICAgIEFycm93RG93bjAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdi02aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIwaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLTEtMC5qcwp2YXIgQXJyb3dEb3duMTA7CnZhciBpbml0X2Fycm93X2Rvd25fMV8wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLTEtMC5qcyIoKSB7CiAgICBBcnJvd0Rvd24xMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1hLXouanMKdmFyIEFycm93RG93bkFaOwp2YXIgaW5pdF9hcnJvd19kb3duX2FfeiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1hLXouanMiKCkgewogICAgQXJyb3dEb3duQVogPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aDVsLTUgNmg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1mcm9tLWxpbmUuanMKdmFyIEFycm93RG93bkZyb21MaW5lOwp2YXIgaW5pdF9hcnJvd19kb3duX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1mcm9tLWxpbmUuanMiKCkgewogICAgQXJyb3dEb3duRnJvbUxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzSDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE1IDYgNiA2LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLWxlZnQuanMKdmFyIEFycm93RG93bkxlZnQ7CnZhciBpbml0X2Fycm93X2Rvd25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIigpIHsKICAgIEFycm93RG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3IDcgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdIN1Y3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcwp2YXIgQXJyb3dEb3duUmlnaHQ7CnZhciBpbml0X2Fycm93X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tcmlnaHQuanMiKCkgewogICAgQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMEg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1kb3QuanMKdmFyIEFycm93RG93blRvRG90Owp2YXIgaW5pdF9hcnJvd19kb3duX3RvX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1kb3QuanMiKCkgewogICAgQXJyb3dEb3duVG9Eb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDktNyA3LTctNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qcwp2YXIgQXJyb3dEb3duTmFycm93V2lkZTsKdmFyIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qcyIoKSB7CiAgICBBcnJvd0Rvd25OYXJyb3dXaWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1saW5lLmpzCnZhciBBcnJvd0Rvd25Ub0xpbmU7CnZhciBpbml0X2Fycm93X2Rvd25fdG9fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1saW5lLmpzIigpIHsKICAgIEFycm93RG93blRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMSA2IDYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxSDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXVwLmpzCnZhciBBcnJvd0Rvd25VcDsKdmFyIGluaXRfYXJyb3dfZG93bl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi11cC5qcyIoKSB7CiAgICBBcnJvd0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzCnZhciBBcnJvd0Rvd25XaWRlTmFycm93Owp2YXIgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzIigpIHsKICAgIEFycm93RG93bldpZGVOYXJyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDRoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXotYS5qcwp2YXIgQXJyb3dEb3duWkE7CnZhciBpbml0X2Fycm93X2Rvd25fel9hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXotYS5qcyIoKSB7CiAgICBBcnJvd0Rvd25aQSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNGg1bC01IDZoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMHYtMy41YTIuNSAyLjUgMCAwIDEgNSAwVjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi5qcwp2YXIgQXJyb3dEb3duOwp2YXIgaW5pdF9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLmpzIigpIHsKICAgIEFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTItNyA3LTctNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtcmlnaHQuanMKdmFyIEFycm93TGVmdFJpZ2h0Owp2YXIgaW5pdF9hcnJvd19sZWZ0X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1sZWZ0LXJpZ2h0LmpzIigpIHsKICAgIEFycm93TGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzIDQgN2w0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3aDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIxIDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTdINCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzCnZhciBBcnJvd0xlZnRGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dfbGVmdF9mcm9tX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzIigpIHsKICAgIEFycm93TGVmdEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA2LTYgNiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOVY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzCnZhciBBcnJvd0xlZnRUb0xpbmU7CnZhciBpbml0X2Fycm93X2xlZnRfdG9fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzIigpIHsKICAgIEFycm93TGVmdFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTlWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyA2LTYgNiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQuanMKdmFyIEFycm93TGVmdDsKdmFyIGluaXRfYXJyb3dfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qcyIoKSB7CiAgICBBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS03LTcgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1mcm9tLWxpbmUuanMKdmFyIEFycm93UmlnaHRGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dfcmlnaHRfZnJvbV9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1mcm9tLWxpbmUuanMiKCkgewogICAgQXJyb3dSaWdodEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggNi02LTYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWxlZnQuanMKdmFyIEFycm93UmlnaHRMZWZ0Owp2YXIgaW5pdF9hcnJvd19yaWdodF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1sZWZ0LmpzIigpIHsKICAgIEFycm93UmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMyA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIxLTQtNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxN2gxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LXRvLWxpbmUuanMKdmFyIEFycm93UmlnaHRUb0xpbmU7CnZhciBpbml0X2Fycm93X3JpZ2h0X3RvX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LXRvLWxpbmUuanMiKCkgewogICAgQXJyb3dSaWdodFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1djE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctcmlnaHQuanMKdmFyIEFycm93UmlnaHQ7CnZhciBpbml0X2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC5qcyIoKSB7CiAgICBBcnJvd1JpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1IDcgNy03IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanMKdmFyIEFycm93VXAwMTsKdmFyIGluaXRfYXJyb3dfdXBfMF8xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanMiKCkgewogICAgQXJyb3dVcDAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjB2LTZoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjBoNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLTEtMC5qcwp2YXIgQXJyb3dVcDEwOwp2YXIgaW5pdF9hcnJvd191cF8xXzAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLTEtMC5qcyIoKSB7CiAgICBBcnJvd1VwMTAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtYS16LmpzCnZhciBBcnJvd1VwQVo7CnZhciBpbml0X2Fycm93X3VwX2FfeiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtYS16LmpzIigpIHsKICAgIEFycm93VXBBWiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwVjYuNWEyLjUgMi41IDAgMCAxIDUgMFYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGg1bC01IDZoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWRvd24uanMKdmFyIEFycm93VXBEb3duOwp2YXIgaW5pdF9hcnJvd191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1kb3duLmpzIigpIHsKICAgIEFycm93VXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTYtNCA0LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWZyb20tZG90LmpzCnZhciBBcnJvd1VwRnJvbURvdDsKdmFyIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWZyb20tZG90LmpzIigpIHsKICAgIEFycm93VXBGcm9tRG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5IDctNyA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1saW5lLmpzCnZhciBBcnJvd1VwRnJvbUxpbmU7CnZhciBpbml0X2Fycm93X3VwX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1saW5lLmpzIigpIHsKICAgIEFycm93VXBGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDktNi02LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1sZWZ0LmpzCnZhciBBcnJvd1VwTGVmdDsKdmFyIGluaXRfYXJyb3dfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtbGVmdC5qcyIoKSB7CiAgICBBcnJvd1VwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdWN2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNyA3IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1uYXJyb3ctd2lkZS5qcwp2YXIgQXJyb3dVcE5hcnJvd1dpZGU7CnZhciBpbml0X2Fycm93X3VwX25hcnJvd193aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1uYXJyb3ctd2lkZS5qcyIoKSB7CiAgICBBcnJvd1VwTmFycm93V2lkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE2aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1yaWdodC5qcwp2YXIgQXJyb3dVcFJpZ2h0Owp2YXIgaW5pdF9hcnJvd191cF9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtcmlnaHQuanMiKCkgewogICAgQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTcgMTcgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanMKdmFyIEFycm93VXBUb0xpbmU7CnZhciBpbml0X2Fycm93X3VwX3RvX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanMiKCkgewogICAgQXJyb3dVcFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2gxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMy02LTYtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qcwp2YXIgQXJyb3dVcFdpZGVOYXJyb3c7CnZhciBpbml0X2Fycm93X3VwX3dpZGVfbmFycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qcyIoKSB7CiAgICBBcnJvd1VwV2lkZU5hcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC16LWEuanMKdmFyIEFycm93VXBaQTsKdmFyIGluaXRfYXJyb3dfdXBfel9hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC16LWEuanMiKCkgewogICAgQXJyb3dVcFpBID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLmpzCnZhciBBcnJvd1VwOwp2YXIgaW5pdF9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAuanMiKCkgewogICAgQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTIgNy03IDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOVY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qcwp2YXIgQXJyb3dzVXBGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qcyIoKSB7CiAgICBBcnJvd3NVcEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hc3Rlcmlzay5qcwp2YXIgQXN0ZXJpc2s7CnZhciBpbml0X2FzdGVyaXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hc3Rlcmlzay5qcyIoKSB7CiAgICBBc3RlcmlzayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMTk2IDkgNi44MDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MDQgOSAxMC4zOTIgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0LXNpZ24uanMKdmFyIEF0U2lnbjsKdmFyIGluaXRfYXRfc2lnbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXQtc2lnbi5qcyIoKSB7CiAgICBBdFNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTQgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanMKdmFyIEF0b207CnZhciBpbml0X2F0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanMiKCkgewogICAgQXRvbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjcgMTUuN2M0LjUyLTQuNTQgNi41NC05Ljg3IDQuNS0xMS45LTIuMDMtMi4wNC03LjM2LS4wMi0xMS45IDQuNS00LjUyIDQuNTQtNi41NCA5Ljg3LTQuNSAxMS45IDIuMDMgMi4wNCA3LjM2LjAyIDExLjktNC41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F1ZGlvLWxpbmVzLmpzCnZhciBBdWRpb0xpbmVzOwp2YXIgaW5pdF9hdWRpb19saW5lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8tbGluZXMuanMiKCkgewogICAgQXVkaW9MaW5lcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXdhcmQuanMKdmFyIEF3YXJkOwp2YXIgaW5pdF9hd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXdhcmQuanMiKCkgewogICAgQXdhcmQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNS40NzcgMTIuODkgMS41MTUgOC41MjZhLjUuNSAwIDAgMS0uODEuNDdsLTMuNTgtMi42ODdhMSAxIDAgMCAwLTEuMTk3IDBsLTMuNTg2IDIuNjg2YS41LjUgMCAwIDEtLjgxLS40NjlsMS41MTQtOC41MjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8td2F2ZWZvcm0uanMKdmFyIEF1ZGlvV2F2ZWZvcm07CnZhciBpbml0X2F1ZGlvX3dhdmVmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hdWRpby13YXZlZm9ybS5qcyIoKSB7CiAgICBBdWRpb1dhdmVmb3JtID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxM2EyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAxIDQgMHYxM2EyIDIgMCAwIDAgNCAwVjRhMiAyIDAgMCAxIDQgMHYxM2EyIDIgMCAwIDAgNCAwdi00YTIgMiAwIDAgMSAyLTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanMKdmFyIEF4ZTsKdmFyIGluaXRfYXhlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanMiKCkgewogICAgQXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTItOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjVhLjUuNSAwIDAgMCAuNS41QTYuNSA2LjUgMCAwIDAgMjIgOS41YS41LjUgMCAwIDAtLjUtLjVoLTEuNjcyYTIgMiAwIDAgMS0xLjQxNC0uNTg2bC01LjA2Mi01LjA2MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDkuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsNS4wNjIgNS4wNjJBMiAyIDAgMCAxIDE1IDEzLjgyOHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGlzLTNkLmpzCnZhciBBeGlzM2Q7CnZhciBpbml0X2F4aXNfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F4aXMtM2QuanMiKCkgewogICAgQXhpczNkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSAxMC41IDE1IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE1YTEgMSAwIDAgMCAxIDFoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yOTMgMTkuNzA3IDYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAxLjUtMS41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qcwp2YXIgQmFieTsKdmFyIGluaXRfYmFieSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qcyIoKSB7CiAgICBCYWJ5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZjLjUuMyAxLjIuNSAyIC41czEuNS0uMiAyLS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS4zOCA2LjgxM0E5IDkgMCAwIDEgMjAuOCAxMC4yYTIgMiAwIDAgMSAwIDMuNiA5IDkgMCAwIDEtMTcuNiAwIDIgMiAwIDAgMSAwLTMuNkE5IDkgMCAwIDEgMTIgM2MyIDAgMy41IDEuMSAzLjUgMi41cy0uOSAyLjUtMiAyLjVjLS44IDAtMS41LS40LTEuNS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFja3BhY2suanMKdmFyIEJhY2twYWNrOwp2YXIgaW5pdF9iYWNrcGFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFja3BhY2suanMiKCkgewogICAgQmFja3BhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYTQgNCAwIDAgMSA0LTRoOGE0IDQgMCAwIDEgNCA0djEwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJ2LTZhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZWNGEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtYWxlcnQuanMKdmFyIEJhZGdlQWxlcnQ7CnZhciBpbml0X2JhZGdlX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1hbGVydC5qcyIoKSB7CiAgICBCYWRnZUFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWNlbnQuanMKdmFyIEJhZGdlQ2VudDsKdmFyIGluaXRfYmFkZ2VfY2VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2VudC5qcyIoKSB7CiAgICBCYWRnZUNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTBhNCA0IDAgMSAwIDAgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWNoZWNrLmpzCnZhciBCYWRnZUNoZWNrOwp2YXIgaW5pdF9iYWRnZV9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2hlY2suanMiKCkgewogICAgQmFkZ2VDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWRvbGxhci1zaWduLmpzCnZhciBCYWRnZURvbGxhclNpZ247CnZhciBpbml0X2JhZGdlX2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1kb2xsYXItc2lnbi5qcyIoKSB7CiAgICBCYWRnZURvbGxhclNpZ24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWV1cm8uanMKdmFyIEJhZGdlRXVybzsKdmFyIGluaXRfYmFkZ2VfZXVybyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtZXVyby5qcyIoKSB7CiAgICBCYWRnZUV1cm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOS40YTQgNCAwIDEgMCAwIDUuMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWluZGlhbi1ydXBlZS5qcwp2YXIgQmFkZ2VJbmRpYW5SdXBlZTsKdmFyIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmRpYW4tcnVwZWUuanMiKCkgewogICAgQmFkZ2VJbmRpYW5SdXBlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxNy01LTFoMWE0IDQgMCAwIDAgMC04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtaW5mby5qcwp2YXIgQmFkZ2VJbmZvOwp2YXIgaW5pdF9iYWRnZV9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmZvLmpzIigpIHsKICAgIEJhZGdlSW5mbyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTYiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMi4wMSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWphcGFuZXNlLXllbi5qcwp2YXIgQmFkZ2VKYXBhbmVzZVllbjsKdmFyIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1qYXBhbmVzZS15ZW4uanMiKCkgewogICAgQmFkZ2VKYXBhbmVzZVllbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzIDN2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMSAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTZoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLW1pbnVzLmpzCnZhciBCYWRnZU1pbnVzOwp2YXIgaW5pdF9iYWRnZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtbWludXMuanMiKCkgewogICAgQmFkZ2VNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wZXJjZW50LmpzCnZhciBCYWRnZVBlcmNlbnQ7CnZhciBpbml0X2JhZGdlX3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBlcmNlbnQuanMiKCkgewogICAgQmFkZ2VQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wbHVzLmpzCnZhciBCYWRnZVBsdXM7CnZhciBpbml0X2JhZGdlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBsdXMuanMiKCkgewogICAgQmFkZ2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcG91bmQtc3RlcmxpbmcuanMKdmFyIEJhZGdlUG91bmRTdGVybGluZzsKdmFyIGluaXRfYmFkZ2VfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIEJhZGdlUG91bmRTdGVybGluZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMi41IDIuNSAwIDAgMSA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcXVlc3Rpb24tbWFyay5qcwp2YXIgQmFkZ2VRdWVzdGlvbk1hcms7CnZhciBpbml0X2JhZGdlX3F1ZXN0aW9uX21hcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgQmFkZ2VRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE3IiwgeTI6ICIxNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXJ1c3NpYW4tcnVibGUuanMKdmFyIEJhZGdlUnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9iYWRnZV9ydXNzaWFuX3J1YmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1ydXNzaWFuLXJ1YmxlLmpzIigpIHsKICAgIEJhZGdlUnVzc2lhblJ1YmxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNWEyIDIgMCAxIDAgMC00aC0zdjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1zd2lzcy1mcmFuYy5qcwp2YXIgQmFkZ2VTd2lzc0ZyYW5jOwp2YXIgaW5pdF9iYWRnZV9zd2lzc19mcmFuYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2Utc3dpc3MtZnJhbmMuanMiKCkgewogICAgQmFkZ2VTd2lzc0ZyYW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTdWOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtdHVya2lzaC1saXJhLmpzCnZhciBCYWRnZVR1cmtpc2hMaXJhOwp2YXIgaW5pdF9iYWRnZV90dXJraXNoX2xpcmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXR1cmtpc2gtbGlyYS5qcyIoKSB7CiAgICBCYWRnZVR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3YxMGE1IDUgMCAwIDAgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDgtNiAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS14LmpzCnZhciBCYWRnZVg7CnZhciBpbml0X2JhZGdlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXguanMiKCkgewogICAgQmFkZ2VYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjkiLCB5MTogIjkiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjE1IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLmpzCnZhciBCYWRnZTsKdmFyIGluaXRfYmFkZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLmpzIigpIHsKICAgIEJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWdnYWdlLWNsYWltLmpzCnZhciBCYWdnYWdlQ2xhaW07CnZhciBpbml0X2JhZ2dhZ2VfY2xhaW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZ2dhZ2UtY2xhaW0uanMiKCkgewogICAgQmFnZ2FnZUNsYWltID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAwLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNFY0YTIgMiAwIDAgMC0yLTJoLTFhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjIwIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFsbG9vbi5qcwp2YXIgQmFsbG9vbjsKdmFyIGluaXRfYmFsbG9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFsbG9vbi5qcyIoKSB7CiAgICBCYWxsb29uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAxIDIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4YzAgNC0zLjUgOC02IDhzLTYtNC02LThhNiA2IDAgMCAxIDEyIDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW4uanMKdmFyIEJhbjsKdmFyIGluaXRfYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW4uanMiKCkgewogICAgQmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MjkgNC45MjkgMTkuMDcgMTkuMDcxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzCnZhciBCYW5hbmE7CnZhciBpbml0X2JhbmFuYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzIigpIHsKICAgIEJhbmFuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNjMy41LTIgOC0yIDEwIDJhNS41IDUuNSAwIDAgMSA4IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4xNSAxNy44OWM1LjUyLTEuNTIgOC42NS02Ljg5IDctMTJDMTEuNTUgNCAxMS41IDIgMTMgMmMzLjIyIDAgNSA1LjUgNSA4IDAgNi41LTQuMiAxMi0xMC40OSAxMkM1LjExIDIyIDIgMjIgMiAyMGMwLTEuNSAxLjE0LTEuNTUgMy4xNS0yLjExWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmRhZ2UuanMKdmFyIEJhbmRhZ2U7CnZhciBpbml0X2JhbmRhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmRhZ2UuanMiKCkgewogICAgQmFuZGFnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTAuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0LjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2djExLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2djEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUtYXJyb3ctZG93bi5qcwp2YXIgQmFua25vdGVBcnJvd0Rvd247CnZhciBpbml0X2Jhbmtub3RlX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLWFycm93LWRvd24uanMiKCkgewogICAgQmFua25vdGVBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS1hcnJvdy11cC5qcwp2YXIgQmFua25vdGVBcnJvd1VwOwp2YXIgaW5pdF9iYW5rbm90ZV9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUtYXJyb3ctdXAuanMiKCkgewogICAgQmFua25vdGVBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLXguanMKdmFyIEJhbmtub3RlWDsKdmFyIGluaXRfYmFua25vdGVfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUteC5qcyIoKSB7CiAgICBCYW5rbm90ZVggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUuanMKdmFyIEJhbmtub3RlOwp2YXIgaW5pdF9iYW5rbm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUuanMiKCkgewogICAgQmFua25vdGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanMKdmFyIEJhcmNvZGU7CnZhciBpbml0X2JhcmNvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanMiKCkgewogICAgQmFyY29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanMKdmFyIEJhcnJlbDsKdmFyIGluaXRfYmFycmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanMiKCkgewogICAgQmFycmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2E0MSA0MSAwIDAgMCAwIDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy44NCAxN2gxNi4zMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjg0IDdoMTYuMzIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qcwp2YXIgQmFzZWxpbmU7CnZhciBpbml0X2Jhc2VsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qcyIoKSB7CiAgICBCYXNlbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0aC5qcwp2YXIgQmF0aDsKdmFyIGluaXRfYmF0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0aC5qcyIoKSB7CiAgICBCYXRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNCA4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDUgNy42MjEgMy42MjFBMi4xMjEgMi4xMjEgMCAwIDAgNCA1djEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktY2hhcmdpbmcuanMKdmFyIEJhdHRlcnlDaGFyZ2luZzsKdmFyIGluaXRfYmF0dGVyeV9jaGFyZ2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1jaGFyZ2luZy5qcyIoKSB7CiAgICBCYXR0ZXJ5Q2hhcmdpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSA3LTMgNWg0bC0zIDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODU2IDZIMTZhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuOTM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMTQgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyLjkzNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktZnVsbC5qcwp2YXIgQmF0dGVyeUZ1bGw7CnZhciBpbml0X2JhdHRlcnlfZnVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1mdWxsLmpzIigpIHsKICAgIEJhdHRlcnlGdWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTB2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktbG93LmpzCnZhciBCYXR0ZXJ5TG93Owp2YXIgaW5pdF9iYXR0ZXJ5X2xvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1sb3cuanMiKCkgewogICAgQmF0dGVyeUxvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXBsdXMuanMKdmFyIEJhdHRlcnlQbHVzOwp2YXIgaW5pdF9iYXR0ZXJ5X3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktcGx1cy5qcyIoKSB7CiAgICBCYXR0ZXJ5UGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41NDMgNkgxNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy42MDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjA2IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy42MDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LW1lZGl1bS5qcwp2YXIgQmF0dGVyeU1lZGl1bTsKdmFyIGluaXRfYmF0dGVyeV9tZWRpdW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktbWVkaXVtLmpzIigpIHsKICAgIEJhdHRlcnlNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0di00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS13YXJuaW5nLmpzCnZhciBCYXR0ZXJ5V2FybmluZzsKdmFyIGluaXRfYmF0dGVyeV93YXJuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXdhcm5pbmcuanMiKCkgewogICAgQmF0dGVyeVdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanMKdmFyIEJhdHRlcnk7CnZhciBpbml0X2JhdHRlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanMiKCkgewogICAgQmF0dGVyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMiAxNCBMIDIyIDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVha2VyLmpzCnZhciBCZWFrZXI7CnZhciBpbml0X2JlYWtlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVha2VyLmpzIigpIHsKICAgIEJlYWtlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAzaDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM3YxNmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFuLW9mZi5qcwp2YXIgQmVhbk9mZjsKdmFyIGluaXRfYmVhbl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlYW4tb2ZmLmpzIigpIHsKICAgIEJlYW5PZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDljLS42NC42NC0xLjUyMS45NTQtMi40MDIgMS4xNjVBNiA2IDAgMCAwIDggMjJhMTMuOTYgMTMuOTYgMCAwIDAgOS45LTQuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC43NSA1LjA5M0E2IDYgMCAwIDEgMjIgOGMwIDIuNDExLS42MSA0LjY4LTEuNjgzIDYuNjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4zNDEgMTAuNjJhNCA0IDAgMCAwIDYuNDg3IDEuMjA4TTEwLjYyIDUuMzQxYTQuMDE1IDQuMDE1IDAgMCAxIDIuMDM5IDIuMDQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVhbi5qcwp2YXIgQmVhbjsKdmFyIGluaXRfYmVhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVhbi5qcyIoKSB7CiAgICBCZWFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMTY1IDYuNTk4QzkuOTU0IDcuNDc4IDkuNjQgOC4zNiA5IDljLS42NC42NC0xLjUyMS45NTQtMi40MDIgMS4xNjVBNiA2IDAgMCAwIDggMjJjNy43MzIgMCAxNC02LjI2OCAxNC0xNGE2IDYgMCAwIDAtMTEuODM1LTEuNDAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjM0MSAxMC42MmE0IDQgMCAxIDAgNS4yNzktNS4yOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC1kb3VibGUuanMKdmFyIEJlZERvdWJsZTsKdmFyIGluaXRfYmVkX2RvdWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLWRvdWJsZS5qcyIoKSB7CiAgICBCZWREb3VibGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwdi04YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWNmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC1zaW5nbGUuanMKdmFyIEJlZFNpbmdsZTsKdmFyIGluaXRfYmVkX3NpbmdsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLXNpbmdsZS5qcyIoKSB7CiAgICBCZWRTaW5nbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwdi04YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBWNmEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE4aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLmpzCnZhciBCZWQ7CnZhciBpbml0X2JlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLmpzIigpIHsKICAgIEJlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMThhMiAyIDAgMCAxIDIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOHY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlZi5qcwp2YXIgQmVlZjsKdmFyIGluaXRfYmVlZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlZi5qcyIoKSB7CiAgICBCZWVmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNCAxMy43QTYuNSA2LjUgMCAxIDAgNi4yOCA2LjZjLTEuMSAzLjEzLS43OCAzLjktMy4xOCA2LjA4QTMgMyAwIDAgMCA1IDE4YzQgMCA4LjQtMS44IDExLjQtNC4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4LjUgNiAyLjE5IDQuNWE2LjQ4IDYuNDggMCAwIDEtMi4yOSA3LjJDMTUuNCAyMC4yIDExIDIyIDcgMjJhMyAzIDAgMCAxLTIuNjgtMS42NkwyLjQgMTYuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyLjUiLCBjeTogIjguNSIsIHI6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVyLW9mZi5qcwp2YXIgQmVlck9mZjsKdmFyIGluaXRfYmVlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZXItb2ZmLmpzIigpIHsKICAgIEJlZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDExLjQ3VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTFoMWEzIDMgMCAwIDEgMi43NDUgNC4yMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOHYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUzNiA3LjUzNUM2Ljc2NiA3LjY0OSA2LjE1NCA4IDUuNSA4YTIuNSAyLjUgMCAwIDEtMS43NjgtNC4yNjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MjcgMy4yMDRDOS4zMDYgMi43NjcgOS44ODUgMiAxMSAyYzEuNTYgMCAyIDEuNSAzIDEuNXMxLjcyLS41IDIuNS0uNWExIDEgMCAxIDEgMCA1Yy0uNzggMC0xLjUtLjUtMi41LS41YTMuMTQ5IDMuMTQ5IDAgMCAwLS44NDIuMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNC42VjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlci5qcwp2YXIgQmVlcjsKdmFyIGluaXRfYmVlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlci5qcyIoKSB7CiAgICBCZWVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTFoMWEzIDMgMCAwIDEgMCA2aC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMnY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDcuNWMtMSAwLTEuNDQuNS0zIC41cy0yLS41LTMtLjUtMS43Mi41LTIuNS41YTIuNSAyLjUgMCAwIDEgMC01Yy43OCAwIDEuNTcuNSAyLjUuNVM5LjQ0IDIgMTEgMnMyIDEuNSAzIDEuNSAxLjcyLS41IDIuNS0uNWEyLjUgMi41IDAgMCAxIDAgNWMtLjc4IDAtMS41LS41LTIuNS0uNVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4djEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWRvdC5qcwp2YXIgQmVsbERvdDsKdmFyIGluaXRfYmVsbF9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZG90LmpzIigpIHsKICAgIEJlbGxEb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTE2IDIuMzE0QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjc0IDcuMzI3QTEgMSAwIDAgMCA0IDE3aDE2YTEgMSAwIDAgMCAuNzQtMS42NzMgOSA5IDAgMCAxLS41ODUtLjY2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWVsZWN0cmljLmpzCnZhciBCZWxsRWxlY3RyaWM7CnZhciBpbml0X2JlbGxfZWxlY3RyaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZWxlY3RyaWMuanMiKCkgewogICAgQmVsbEVsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNTE4IDE3LjM0N0E3IDcgMCAwIDEgMTQgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA0QTExIDExIDAgMCAxIDIwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxNiIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1taW51cy5qcwp2YXIgQmVsbE1pbnVzOwp2YXIgaW5pdF9iZWxsX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW1pbnVzLmpzIigpIHsKICAgIEJlbGxNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4aDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuMjQzIDMuNzU3QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQTkuNCA5LjQgMCAwIDEgMTguNjY3IDEyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1vZmYuanMKdmFyIEJlbGxPZmY7CnZhciBpbml0X2JlbGxfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW9mZi5qcyIoKSB7CiAgICBCZWxsT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3SDRhMSAxIDAgMCAxLS43NC0xLjY3M0M0LjU5IDEzLjk1NiA2IDEyLjQ5OSA2IDhhNiA2IDAgMCAxIC4yNTgtMS43NDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjY4IDMuMDFBNiA2IDAgMCAxIDE4IDhjMCAyLjY4Ny43NyA0LjY1MyAxLjcwNyA2LjA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1wbHVzLmpzCnZhciBCZWxsUGx1czsKdmFyIGluaXRfYmVsbF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXBsdXMuanMiKCkgewogICAgQmVsbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4wMDIgMTQuNDY0YTkgOSAwIDAgMCAuNzM4Ljg2M0ExIDEgMCAwIDEgMjAgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgOC43NS01LjMzMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtcmluZy5qcwp2YXIgQmVsbFJpbmc7CnZhciBpbml0X2JlbGxfcmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1yaW5nLmpzIigpIHsKICAgIEJlbGxSaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjMtLjgtNC4zLTItNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMkMyLjggMy43IDIgNS43IDIgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwuanMKdmFyIEJlbGw7CnZhciBpbml0X2JlbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwuanMiKCkgewogICAgQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLWVuZC5qcwp2YXIgQmV0d2Vlbkhvcml6b250YWxFbmQ7CnZhciBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4taG9yaXpvbnRhbC1lbmQuanMiKCkgewogICAgQmV0d2Vlbkhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZXR3ZWVuLWhvcml6b250YWwtc3RhcnQuanMKdmFyIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ7CnZhciBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLXN0YXJ0LmpzIigpIHsKICAgIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiOCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgOSAzIDMtMyAzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiNyIsIHg6ICI4IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1lbmQuanMKdmFyIEJldHdlZW5WZXJ0aWNhbEVuZDsKdmFyIGluaXRfYmV0d2Vlbl92ZXJ0aWNhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtZW5kLmpzIigpIHsKICAgIEJldHdlZW5WZXJ0aWNhbEVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTMgMyAzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMyIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1zdGFydC5qcwp2YXIgQmV0d2VlblZlcnRpY2FsU3RhcnQ7CnZhciBpbml0X2JldHdlZW5fdmVydGljYWxfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtc3RhcnQuanMiKCkgewogICAgQmV0d2VlblZlcnRpY2FsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzLTMtMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMTQiLCB5OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpY2Vwcy1mbGV4ZWQuanMKdmFyIEJpY2Vwc0ZsZXhlZDsKdmFyIGluaXRfYmljZXBzX2ZsZXhlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmljZXBzLWZsZXhlZC5qcyIoKSB7CiAgICBCaWNlcHNGbGV4ZWQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40MDkgMTMuMDE3QTUgNSAwIDAgMSAyMiAxNWMwIDMuODY2LTQgNy05IDctNC4wNzcgMC04LjE1My0uODItMTAuMzcxLTIuNDYyLS40MjYtLjMxNi0uNjMxLS44MzItLjYyLTEuMzYyQzIuMTE4IDEyLjcyMyAyLjYyNyAyIDEwIDJhMyAzIDAgMCAxIDMgMyAyIDIgMCAwIDEtMiAyYy0xLjEwNSAwLTEuNjQtLjQ0NC0yLTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRhNSA1IDAgMCAwLTcuNTg0IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS45NjQgNi44MjVDOC4wMTkgNy45NzcgOS41IDEzIDggMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzCnZhciBCaWtlOwp2YXIgaW5pdF9iaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzIigpIHsKICAgIEJpa2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNS41IiwgY3k6ICIxNy41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNVYxNGwtMy0zIDQtMyAyIDNoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpbmFyeS5qcwp2YXIgQmluYXJ5Owp2YXIgaW5pdF9iaW5hcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpbmFyeS5qcyIoKSB7CiAgICBCaW5hcnkgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGgydjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaW9oYXphcmQuanMKdmFyIEJpb2hhemFyZDsKdmFyIGluaXRfYmlvaGF6YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaW9oYXphcmQuanMiKCkgewogICAgQmlvaGF6YXJkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEuOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNyAzLjRjLS45IDIuNSAwIDUuMiAyLjIgNi43QzYuNSA5IDMuNyA5LjYgMiAxMS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguOSAxMC4xIDEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjMgMy40Yy45IDIuNSAwIDUuMi0yLjIgNi43IDIuNC0xLjIgNS4yLS42IDYuOSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMSAxMC4xLTEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMjAuOGMtMi42LS40LTQuNi0yLjYtNC43LTUuMy0uMiAyLjYtMi4xIDQuOC00LjcgNS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzLjl2MS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgNS40Yy0xLS4yLTItLjItMyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjRjLjctLjcgMS4yLTEuNiAxLjUtMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNSAxMy45Yy4zLjkuOCAxLjggMS41IDIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpbm9jdWxhcnMuanMKdmFyIEJpbm9jdWxhcnM7CnZhciBpbml0X2Jpbm9jdWxhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpbm9jdWxhcnMuanMiKCkgewogICAgQmlub2N1bGFycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDE2IEwgMiAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIxYTIgMiAwIDAgMS0yLTJ2LTMuODUxYzAtMS4zOSAyLTIuOTYyIDItNC44MjlWOGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYxMWEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlyZGhvdXNlLmpzCnZhciBCaXJkaG91c2U7CnZhciBpbml0X2JpcmRob3VzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlyZGhvdXNlLmpzIigpIHsKICAgIEJpcmRob3VzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTggMS45NTYtMTEuNDY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA3LjgyLTUuNjE1YTIgMiAwIDAgMSAyLjM2IDBMMjEgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4aDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTggNS4wNDQgNi41MzIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanMKdmFyIEJpcmQ7CnZhciBpbml0X2JpcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanMiKCkgewogICAgQmlyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNCAxOEgxMmE4IDggMCAwIDAgOC04VjdhNCA0IDAgMCAwLTcuMjgtMi4zTDIgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgNyAyIC41LTIgLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNy43NVYyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4YTYgNiAwIDAgMCAzLjg0LTEwLjYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYml0Y29pbi5qcwp2YXIgQml0Y29pbjsKdmFyIGluaXRfYml0Y29pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYml0Y29pbi5qcyIoKSB7CiAgICBCaXRjb2luID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNzY3IDE5LjA4OWM0LjkyNC44NjggNi4xNC02LjAyNSAxLjIxNi02Ljg5NG0tMS4yMTYgNi44OTRMNS44NiAxOC4wNDdtNS45MDggMS4wNDItLjM0NyAxLjk3bTEuNTYzLTguODY0YzQuOTI0Ljg2OSA2LjE0LTYuMDI1IDEuMjE1LTYuODkzbS0xLjIxNSA2Ljg5My0zLjk0LS42OTRtNS4xNTUtNi4yTDguMjkgNC4yNm01LjkwOCAxLjA0Mi4zNDgtMS45N003LjQ4IDIwLjM2NGwzLjEyNi0xNy43MjciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGVuZC5qcwp2YXIgQmxlbmQ7CnZhciBpbml0X2JsZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGVuZC5qcyIoKSB7CiAgICBCbGVuZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE1IiwgcjogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanMKdmFyIEJsaW5kczsKdmFyIGluaXRfYmxpbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanMiKCkgewogICAgQmxpbmRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzdjE0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jsb2Nrcy5qcwp2YXIgQmxvY2tzOwp2YXIgaW5pdF9ibG9ja3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jsb2Nrcy5qcyIoKSB7CiAgICBCbG9ja3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC1jb25uZWN0ZWQuanMKdmFyIEJsdWV0b290aENvbm5lY3RlZDsKdmFyIGluaXRfYmx1ZXRvb3RoX2Nvbm5lY3RlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLWNvbm5lY3RlZC5qcyIoKSB7CiAgICBCbHVldG9vdGhDb25uZWN0ZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLW9mZi5qcwp2YXIgQmx1ZXRvb3RoT2ZmOwp2YXIgaW5pdF9ibHVldG9vdGhfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtb2ZmLmpzIigpIHsKICAgIEJsdWV0b290aE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE3LTUgNVYxMmwtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDkuNSAxNyA3bC01LTV2NC41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLXNlYXJjaGluZy5qcwp2YXIgQmx1ZXRvb3RoU2VhcmNoaW5nOwp2YXIgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtc2VhcmNoaW5nLmpzIigpIHsKICAgIEJsdWV0b290aFNlYXJjaGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC5qcwp2YXIgQmx1ZXRvb3RoOwp2YXIgaW5pdF9ibHVldG9vdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC5qcyIoKSB7CiAgICBCbHVldG9vdGggPSBbWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzCnZhciBCb2xkOwp2YXIgaW5pdF9ib2xkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzIigpIHsKICAgIEJvbGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDlhNCA0IDAgMCAxIDAgOEg3YTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xaDdhNCA0IDAgMCAxIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbHQuanMKdmFyIEJvbHQ7CnZhciBpbml0X2JvbHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbHQuanMiKCkgewogICAgQm9sdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9tYi5qcwp2YXIgQm9tYjsKdmFyIGluaXRfYm9tYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9tYi5qcyIoKSB7CiAgICBCb21iID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTMiLCByOiAiOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE0LjM1IDQuNjUgMTYuMyAyLjdhMi40MSAyLjQxIDAgMCAxIDMuNCAwbDEuNiAxLjZhMi40IDIuNCAwIDAgMSAwIDMuNGwtMS45NSAxLjk1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyLTEuNSAxLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzCnZhciBCb25lOwp2YXIgaW5pdF9ib25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzIigpIHsKICAgIEJvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMGMuNy0uNyAxLjY5IDAgMi41IDBhMi41IDIuNSAwIDEgMCAwLTUgLjUuNSAwIDAgMS0uNS0uNSAyLjUgMi41IDAgMSAwLTUgMGMwIC44MS43IDEuOCAwIDIuNWwtNyA3Yy0uNy43LTEuNjkgMC0yLjUgMGEyLjUgMi41IDAgMCAwIDAgNWMuMjggMCAuNS4yMi41LjVhMi41IDIuNSAwIDEgMCA1IDBjMC0uODEtLjctMS44IDAtMi41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYS5qcwp2YXIgQm9va0E7CnZhciBpbml0X2Jvb2tfYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hLmpzIigpIHsKICAgIEJvb2tBID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEzIDQtNyA0IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDExaDUuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYWxlcnQuanMKdmFyIEJvb2tBbGVydDsKdmFyIGluaXRfYm9va19hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hbGVydC5qcyIoKSB7CiAgICBCb29rQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWF1ZGlvLmpzCnZhciBCb29rQXVkaW87CnZhciBpbml0X2Jvb2tfYXVkaW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYXVkaW8uanMiKCkgewogICAgQm9va0F1ZGlvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jaGVjay5qcwp2YXIgQm9va0NoZWNrOwp2YXIgaW5pdF9ib29rX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWNoZWNrLmpzIigpIHsKICAgIEJvb2tDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5LjUgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stY29weS5qcwp2YXIgQm9va0NvcHk7CnZhciBpbml0X2Jvb2tfY29weSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jb3B5LmpzIigpIHsKICAgIEJvb2tDb3B5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3YTIgMiAwIDAgMC0yIDJ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS44MDMgMThINWEyIDIgMCAwIDAgMCA0aDkuNWEuNS41IDAgMCAwIC41LS41VjIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNOSAxNVY0YTIgMiAwIDAgMSAyLTJoOS41YS41LjUgMCAwIDEgLjUuNXYxNGEuNS41IDAgMCAxLS41LjVIMTFhMiAyIDAgMCAxIDAtNGgxMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWRhc2hlZC5qcwp2YXIgQm9va0Rhc2hlZDsKdmFyIGluaXRfYm9va19kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stZGFzaGVkLmpzIigpIHsKICAgIEJvb2tEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2gxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJoMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjUgMjJIMTlhMSAxIDAgMCAwIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDJIMTlhMSAxIDAgMCAxIDEgMXYxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTR2M2gtMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDguNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwVjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjVWMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0LjVBMi41IDIuNSAwIDAgMSA2LjUgMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJINi41YTEgMSAwIDAgMSAwLTVIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stZG93bi5qcwp2YXIgQm9va0Rvd247CnZhciBpbml0X2Jvb2tfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1kb3duLmpzIigpIHsKICAgIEJvb2tEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMyAzIDMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2staGVhZHBob25lcy5qcwp2YXIgQm9va0hlYWRwaG9uZXM7CnZhciBpbml0X2Jvb2tfaGVhZHBob25lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFkcGhvbmVzLmpzIigpIHsKICAgIEJvb2tIZWFkcGhvbmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yYTQgNCAwIDAgMSA4IDB2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2staGVhcnQuanMKdmFyIEJvb2tIZWFydDsKdmFyIGluaXRfYm9va19oZWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFydC5qcyIoKSB7CiAgICBCb29rSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNjIgOS44QTIuMjUgMi4yNSAwIDEgMSAxMiA2LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWtleS5qcwp2YXIgQm9va0tleTsKdmFyIGluaXRfYm9va19rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2sta2V5LmpzIigpIHsKICAgIEJvb2tLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAzIDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAyLTQuNSA0LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNy44OThWMjFhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJoNy44NDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1pbWFnZS5qcwp2YXIgQm9va0ltYWdlOwp2YXIgaW5pdF9ib29rX2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWltYWdlLmpzIigpIHsKICAgIEJvb2tJbWFnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEzLjctMi4xLTIuMWEyIDIgMCAwIDAtMi44IDBMOS43IDE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1sb2NrLmpzCnZhciBCb29rTG9jazsKdmFyIGluaXRfYm9va19sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWxvY2suanMiKCkgewogICAgQm9va0xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjRhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1djZhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMiIsIHk6ICI2Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbWFya2VkLmpzCnZhciBCb29rTWFya2VkOwp2YXIgaW5pdF9ib29rX21hcmtlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1tYXJrZWQuanMiKCkgewogICAgQm9va01hcmtlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2OGwzLTMgMyAzVjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbWludXMuanMKdmFyIEJvb2tNaW51czsKdmFyIGluaXRfYm9va19taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1taW51cy5qcyIoKSB7CiAgICBCb29rTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stb3Blbi1jaGVjay5qcwp2YXIgQm9va09wZW5DaGVjazsKdmFyIGluaXRfYm9va19vcGVuX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4tY2hlY2suanMiKCkgewogICAgQm9va09wZW5DaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTIgMiAyIDQtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA2VjRhMSAxIDAgMCAwLTEtMWgtNWE0IDQgMCAwIDAtNCA0IDQgNCAwIDAgMC00LTRIM2ExIDEgMCAwIDAtMSAxdjEzYTEgMSAwIDAgMCAxIDFoNmEzIDMgMCAwIDEgMyAzIDMgMyAwIDAgMSAzLTNoNmExIDEgMCAwIDAgMS0xdi0xLjMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4tdGV4dC5qcwp2YXIgQm9va09wZW5UZXh0Owp2YXIgaW5pdF9ib29rX29wZW5fdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLXRleHQuanMiKCkgewogICAgQm9va09wZW5UZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE4YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDVhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEgNC00aDVhMSAxIDAgMCAxIDEgMXYxM2ExIDEgMCAwIDEtMSAxaC02YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwLTMtM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLmpzCnZhciBCb29rT3BlbjsKdmFyIGluaXRfYm9va19vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4uanMiKCkgewogICAgQm9va09wZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stcGx1cy5qcwp2YXIgQm9va1BsdXM7CnZhciBpbml0X2Jvb2tfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1wbHVzLmpzIigpIHsKICAgIEJvb2tQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1zZWFyY2guanMKdmFyIEJvb2tTZWFyY2g7CnZhciBpbml0X2Jvb2tfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXNlYXJjaC5qcyIoKSB7CiAgICBCb29rU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjJINS41YTEgMSAwIDAgMSAwLTVoNC41MDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjItMS44NzktMS44NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOS41di0xNUEyLjUgMi41IDAgMCAxIDUuNSAySDE4YTEgMSAwIDAgMSAxIDF2OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay10ZXh0LmpzCnZhciBCb29rVGV4dDsKdmFyIGluaXRfYm9va190ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXRleHQuanMiKCkgewogICAgQm9va1RleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXAuanMKdmFyIEJvb2tVcDsKdmFyIGluaXRfYm9va191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11cC5qcyIoKSB7CiAgICBCb29rVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay10eXBlLmpzCnZhciBCb29rVHlwZTsKdmFyIGluaXRfYm9va190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXR5cGUuanMiKCkgewogICAgQm9va1R5cGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjZIOHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVwLTIuanMKdmFyIEJvb2tVcDI7CnZhciBpbml0X2Jvb2tfdXBfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11cC0yLmpzIigpIHsKICAgIEJvb2tVcDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoMWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDUgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXNlci5qcwp2YXIgQm9va1VzZXI7CnZhciBpbml0X2Jvb2tfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11c2VyLmpzIigpIHsKICAgIEJvb2tVc2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTNhMyAzIDAgMSAwLTYgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2steC5qcwp2YXIgQm9va1g7CnZhciBpbml0X2Jvb2tfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay14LmpzIigpIHsKICAgIEJvb2tYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LTUgNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3IDUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2suanMKdmFyIEJvb2s7CnZhciBpbml0X2Jvb2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2suanMiKCkgewogICAgQm9vayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1jaGVjay5qcwp2YXIgQm9va21hcmtDaGVjazsKdmFyIGluaXRfYm9va21hcmtfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLWNoZWNrLmpzIigpIHsKICAgIEJvb2ttYXJrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1taW51cy5qcwp2YXIgQm9va21hcmtNaW51czsKdmFyIGluaXRfYm9va21hcmtfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLW1pbnVzLmpzIigpIHsKICAgIEJvb2ttYXJrTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjE2eiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmstcGx1cy5qcwp2YXIgQm9va21hcmtQbHVzOwp2YXIgaW5pdF9ib29rbWFya19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1wbHVzLmpzIigpIHsKICAgIEJvb2ttYXJrUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDIxLTctNC03IDRWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTZ6IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiNyIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjkiLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLXguanMKdmFyIEJvb2ttYXJrWDsKdmFyIGluaXRfYm9va21hcmtfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmsteC5qcyIoKSB7CiAgICBCb29rbWFya1ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDcuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay5qcwp2YXIgQm9va21hcms7CnZhciBpbml0X2Jvb2ttYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay5qcyIoKSB7CiAgICBCb29rbWFyayA9IFtbInBhdGgiLCB7IGQ6ICJtMTkgMjEtNy00LTcgNFY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxNnoiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vbS1ib3guanMKdmFyIEJvb21Cb3g7CnZhciBpbml0X2Jvb21fYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29tLWJveC5qcyIoKSB7CiAgICBCb29tQm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1tZXNzYWdlLXNxdWFyZS5qcwp2YXIgQm90TWVzc2FnZVNxdWFyZTsKdmFyIGluaXRfYm90X21lc3NhZ2Vfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3QtbWVzc2FnZS1zcXVhcmUuanMiKCkgewogICAgQm90TWVzc2FnZVNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTZhMiAyIDAgMCAxLTIgMkg4LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgNCAyMC4yODZWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTF2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1vZmYuanMKdmFyIEJvdE9mZjsKdmFyIGluaXRfYm90X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LW9mZi5qcyIoKSB7CiAgICBCb3RPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy42NyA4SDE4YTIgMiAwIDAgMSAyIDJ2NC4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMiAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4SDZhMiAyIDAgMCAwLTIgMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNDE0LS41ODYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjcgNEgxMnYyLjMzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LmpzCnZhciBCb3Q7CnZhciBpbml0X2JvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LmpzIigpIHsKICAgIEJvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWNEg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTIiLCB4OiAiNCIsIHk6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90dGxlLXdpbmUuanMKdmFyIEJvdHRsZVdpbmU7CnZhciBpbml0X2JvdHRsZV93aW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3R0bGUtd2luZS5qcyIoKSB7CiAgICBCb3R0bGVXaW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgM2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTYgNiAwIDAgMCAxLjIgMy42bC42LjhBNiA2IDAgMCAxIDE3IDEzdjhhMSAxIDAgMCAxLTEgMUg4YTEgMSAwIDAgMS0xLTF2LThhNiA2IDAgMCAxIDEuMi0zLjZsLjYtLjhBNiA2IDAgMCAwIDEwIDV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzaC00YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3ctYXJyb3cuanMKdmFyIEJvd0Fycm93Owp2YXIgaW5pdF9ib3dfYXJyb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvdy1hcnJvdy5qcyIoKSB7CiAgICBCb3dBcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjU3NSAxMS4wODJhMTMgMTMgMCAwIDEgMS4wNDggOS4wMjcgMS4xNyAxLjE3IDAgMCAxLTEuOTE0LjU5N0wxNCAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwIDMuMjkgNi4yOWExLjE3IDEuMTcgMCAwIDEgLjYtMS45MSAxMyAxMyAwIDAgMSA5LjAzIDEuMDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxNGExLjcgMS43IDAgMCAwLTEuMjA3LjVsLTIuNjQ2IDIuNjQ2QS41LjUgMCAwIDAgMy41IDE4SDVhMSAxIDAgMCAxIDEgMXYxLjVhLjUuNSAwIDAgMCAuODU0LjM1NEw5LjUgMTguMjA3QTEuNyAxLjcgMCAwIDAgMTAgMTd2LTJhMSAxIDAgMCAwLTEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MDcgMTQuMjkzIDIxIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3guanMKdmFyIEJveDsKdmFyIGluaXRfYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3guanMiKCkgewogICAgQm94ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuMyA3IDguNyA1IDguNy01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm94ZXMuanMKdmFyIEJveGVzOwp2YXIgaW5pdF9ib3hlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm94ZXMuanMiKCkgewogICAgQm94ZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk3IDEyLjkyQTIgMiAwIDAgMCAyIDE0LjYzdjMuMjRhMiAyIDAgMCAwIC45NyAxLjcxbDMgMS44YTIgMiAwIDAgMCAyLjA2IDBMMTIgMTl2LTUuNWwtNS0zLTQuMDMgMi40MloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNi41LTQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE2LjUgNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTYuNXY1LjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDEzLjVWMTlsMy45NyAyLjM4YTIgMiAwIDAgMCAyLjA2IDBsMy0xLjhhMiAyIDAgMCAwIC45Ny0xLjcxdi0zLjI0YTIgMiAwIDAgMC0uOTctMS43MUwxNyAxMC41bC01IDNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUtNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUgNC43NC0yLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjV2NS4xNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03Ljk3IDQuNDJBMiAyIDAgMCAwIDcgNi4xM3Y0LjM3bDUgMyA1LTNWNi4xM2EyIDIgMCAwIDAtLjk3LTEuNzFsLTMtMS44YTIgMiAwIDAgMC0yLjA2IDBsLTMgMS44WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4IDcuMjYgNS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMy41VjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFjZXMuanMKdmFyIEJyYWNlczsKdmFyIGluaXRfYnJhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFjZXMuanMiKCkgewogICAgQnJhY2VzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWgxYTIgMiAwIDAgMCAyLTJ2LTVjMC0xLjEuOS0yIDItMmEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAwLTItMmgtMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNrZXRzLmpzCnZhciBCcmFja2V0czsKdmFyIGluaXRfYnJhY2tldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNrZXRzLmpzIigpIHsKICAgIEJyYWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTEgMSAwIDAgMSAxIDF2MTZhMSAxIDAgMCAxLTEgMWgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxSDVhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLWNpcmN1aXQuanMKdmFyIEJyYWluQ2lyY3VpdDsKdmFyIGluaXRfYnJhaW5fY2lyY3VpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4tY2lyY3VpdC5qcyIoKSB7CiAgICBCcmFpbkNpcmN1aXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEyIDVhMyAzIDAgMSAwLTUuOTk3LjEyNSA0IDQgMCAwIDAtMi41MjYgNS43NyA0IDQgMCAwIDAgLjU1NiA2LjU4OEE0IDQgMCAxIDAgMTIgMThaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzYTQuNSA0LjUgMCAwIDAgMy00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMDAzIDUuMTI1QTMgMyAwIDAgMCA2LjQwMSA2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy40NzcgMTAuODk2YTQgNCAwIDAgMSAuNTg1LS4zOTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGE0IDQgMCAwIDEtMS45NjctLjUxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDZhMiAyIDAgMCAxIDIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjVhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMyIsIHI6ICIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIzIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjIxIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjgiLCByOiAiLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi1jb2cuanMKdmFyIEJyYWluQ29nOwp2YXIgaW5pdF9icmFpbl9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLWNvZy5qcyIoKSB7CiAgICBCcmFpbkNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxNC43NzItLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDkuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggMTQuNzcyLjM4Mi45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMxIDguMzA1LS4zODMuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMC44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjU5OCA2LjVBMyAzIDAgMSAwIDEyIDVhMyAzIDAgMCAwLTUuNjMtMS40NDYgMyAzIDAgMCAwLS4zNjggMS41NzEgNCA0IDAgMCAwLTIuNTI1IDUuNzcxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5OCA1LjEyNWE0IDQgMCAwIDEgMi41MjUgNS43NzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNTA1IDEwLjI5NGE0IDQgMCAwIDEtMS41IDcuNzA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNC4wMzIgMTcuNDgzQTQgNCAwIDAgMCAxMS40NjQgMjBjLjE4LS4zMTEuODkyLS4zMTEgMS4wNzIgMGE0IDQgMCAwIDAgNy40MzItMi41MTYiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxMC4yOTFBNCA0IDAgMCAwIDYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDIgNS4xMjVhMyAzIDAgMCAwIC40IDEuMzc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi5qcwp2YXIgQnJhaW47CnZhciBpbml0X2JyYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi5qcyIoKSB7CiAgICBCcmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTNhNC4xNyA0LjE3IDAgMCAxLTMtNCA0LjE3IDQuMTcgMCAwIDEtMyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjU5OCA2LjVBMyAzIDAgMSAwIDEyIDVhMyAzIDAgMSAwLTUuNTk4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy45OTcgNS4xMjVhNCA0IDAgMCAxIDIuNTI2IDUuNzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMThhNCA0IDAgMCAwIDItNy40NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOTY3IDE3LjQ4M0E0IDQgMCAxIDEgMTIgMThhNCA0IDAgMSAxLTcuOTY3LS41MTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGE0IDQgMCAwIDEtMi03LjQ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAwMyA1LjEyNWE0IDQgMCAwIDAtMi41MjYgNS43NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwtZmlyZS5qcwp2YXIgQnJpY2tXYWxsRmlyZTsKdmFyIGluaXRfYnJpY2tfd2FsbF9maXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLWZpcmUuanMiKCkgewogICAgQnJpY2tXYWxsRmlyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2Mi4xMDciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgOWMxIDMgMi41IDMuNSAzLjUgNC41QTUgNSAwIDAgMSAyMiAxN2E1IDUgMCAwIDEtMTAgMGMwLS4zIDAtLjYuMS0uOWEyIDIgMCAxIDAgMy4zLTJDMTMgMTEuNSAxNiA5IDE3IDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOC4yNzRWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDMuOTM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoNS4yNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDguMjI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwtc2hpZWxkLmpzCnZhciBCcmlja1dhbGxTaGllbGQ7CnZhciBpbml0X2JyaWNrX3dhbGxfc2hpZWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLXNoaWVsZC5qcyIoKSB7CiAgICBCcmlja1dhbGxTaGllbGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djEuMjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2NS40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5LjExOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNS43NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxNy41YzAgMi40OTktMS43NSAzLjc0OS0zLjgzIDQuNDc0YS41LjUgMCAwIDEtLjMzNS0uMDA1Yy0yLjA4NS0uNzItMy44MzUtMS45Ny0zLjgzNS00LjQ3VjE0YS41LjUgMCAwIDEgLjUtLjQ5OWMxIDAgMi4yNS0uNiAzLjEyLTEuMzZhLjYuNiAwIDAgMSAuNzYtLjAwMWMuODc1Ljc2NSAyLjEyIDEuMzYgMy4xMiAxLjM2YS41LjUgMCAwIDEgLjUuNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxMi4xNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM3Y2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpY2std2FsbC5qcwp2YXIgQnJpY2tXYWxsOwp2YXIgaW5pdF9icmlja193YWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLmpzIigpIHsKICAgIEJyaWNrV2FsbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtYnVzaW5lc3MuanMKdmFyIEJyaWVmY2FzZUJ1c2luZXNzOwp2YXIgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1idXNpbmVzcy5qcyIoKSB7CiAgICBCcmllZmNhc2VCdXNpbmVzcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNhMTguMTUgMTguMTUgMCAwIDEtMjAgMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1jb252ZXlvci1iZWx0LmpzCnZhciBCcmllZmNhc2VDb252ZXlvckJlbHQ7CnZhciBpbml0X2JyaWVmY2FzZV9jb252ZXlvcl9iZWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtY29udmV5b3ItYmVsdC5qcyIoKSB7CiAgICBCcmllZmNhc2VDb252ZXlvckJlbHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMEgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTAiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtbWVkaWNhbC5qcwp2YXIgQnJpZWZjYXNlTWVkaWNhbDsKdmFyIGluaXRfYnJpZWZjYXNlX21lZGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1tZWRpY2FsLmpzIigpIHsKICAgIEJyaWVmY2FzZU1lZGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDZWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnYxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS5qcwp2YXIgQnJpZWZjYXNlOwp2YXIgaW5pdF9icmllZmNhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS5qcyIoKSB7CiAgICBCcmllZmNhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMFY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaW5nLXRvLWZyb250LmpzCnZhciBCcmluZ1RvRnJvbnQ7CnZhciBpbml0X2JyaW5nX3RvX2Zyb250ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmluZy10by1mcm9udC5qcyIoKSB7CiAgICBCcmluZ1RvRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JydXNoLWNsZWFuaW5nLmpzCnZhciBCcnVzaENsZWFuaW5nOwp2YXIgaW5pdF9icnVzaF9jbGVhbmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2gtY2xlYW5pbmcuanMiKCkgewogICAgQnJ1c2hDbGVhbmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIyLTEtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxNGExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJoLTNhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC00IDB2NWExIDEgMCAwIDEtMSAxSDZhMiAyIDAgMCAwLTIgMnYxYTEgMSAwIDAgMCAxIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgMS00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2guanMKdmFyIEJydXNoOwp2YXIgaW5pdF9icnVzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2guanMiKCkgewogICAgQnJ1c2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDIxQTMuNSAzLjUgMCAxIDAgMyAxNy41YTIuNjIgMi42MiAwIDAgMS0uNzA4IDEuNzkyQTEgMSAwIDAgMCAzIDIxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2OSAxNy4wMzEgMjEuMzc4IDUuNjI0YTEgMSAwIDAgMC0zLjAwMi0zLjAwMkw2Ljk2NyAxNC4wMzEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWJibGVzLmpzCnZhciBCdWJibGVzOwp2YXIgaW5pdF9idWJibGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWJibGVzLmpzIigpIHsKICAgIEJ1YmJsZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjAwMSAxNS4wODVBMS41IDEuNSAwIDAgMSA5IDE2LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI4LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICIxNi41IiwgcjogIjUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiNC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1vZmYuanMKdmFyIEJ1Z09mZjsKdmFyIGluaXRfYnVnX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVnLW9mZi5qcyIoKSB7CiAgICBCdWdPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNy4xM1Y2YTMgMyAwIDAgMC01LjE0LTIuMUw4IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTIuMzRWMTFhNCA0IDAgMCAwLTQtNGgtMS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNoLTMuMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWE0IDQgMCAwIDEgMy44MS00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjcgNy43QTQgNCAwIDAgMCA2IDExdjNhNiA2IDAgMCAwIDExLjEzIDMuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWctcGxheS5qcwp2YXIgQnVnUGxheTsKdmFyIGluaXRfYnVnX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1wbGF5LmpzIigpIHsKICAgIEJ1Z1BsYXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOS42NTVBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDQtNGg0YTQgNCAwIDAgMSA0IDMuOTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDcuMTNWNmEzIDMgMCAxIDEgNiAwdjEuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWcuanMKdmFyIEJ1ZzsKdmFyIGluaXRfYnVnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWcuanMiKCkgewogICAgQnVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN2E0IDQgMCAwIDEgNCA0djNhNiA2IDAgMCAxLTEyIDB2LTNhNCA0IDAgMCAxIDQtNHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxYTQgNCAwIDAgMC0zLjgxLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDcuMTNWNmEzIDMgMCAxIDEgNiAwdjEuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy0yLmpzCnZhciBCdWlsZGluZzI7CnZhciBpbml0X2J1aWxkaW5nXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1aWxkaW5nLTIuanMiKCkgewogICAgQnVpbGRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qcwp2YXIgQnVpbGRpbmc7CnZhciBpbml0X2J1aWxkaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qcyIoKSB7CiAgICBCdWlsZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJ2LTNhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy1mcm9udC5qcwp2YXIgQnVzRnJvbnQ7CnZhciBpbml0X2J1c19mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLWZyb250LmpzIigpIHsKICAgIEJ1c0Zyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2IDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy0yLTEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxdi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLmpzCnZhciBCdXM7CnZhciBpbml0X2J1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLmpzIigpIHsKICAgIEJ1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDE5LjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggMThoM3MuNS0xLjcuOC0yLjhjLjEtLjQuMi0uOC4yLTEuMiAwLS40LS4xLS44LS4yLTEuMmwtMS40LTVDMjAuMSA2LjggMTkuMSA2IDE4IDZINGEyIDIgMCAwIDAtMiAydjEwaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FibGUtY2FyLmpzCnZhciBDYWJsZUNhcjsKdmFyIGluaXRfY2FibGVfY2FyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS1jYXIuanMiKCkgewogICAgQ2FibGVDYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMjAtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY2LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMCIsIHg6ICI0IiwgeTogIjEyIiwgcng6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTdoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS5qcwp2YXIgQ2FibGU7CnZhciBpbml0X2NhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS5qcyIoKSB7CiAgICBDYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5YTEgMSAwIDAgMS0xLTF2LTJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MmExIDEgMCAwIDEtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNFY2LjVhMSAxIDAgMCAwLTcgMHYxMWExIDEgMCAwIDEtNyAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhMiAyIDAgMCAxLTItMlY2YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWtlLXNsaWNlLmpzCnZhciBDYWtlU2xpY2U7CnZhciBpbml0X2Nha2Vfc2xpY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nha2Utc2xpY2UuanMiKCkgewogICAgQ2FrZVNsaWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTNIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN0gzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuMiA3LjktMy4zODggMi41QTIgMiAwIDAgMCAzIDEyLjAxVjIwYTEgMSAwIDAgMCAxIDFoMTZhMSAxIDAgMCAwIDEtMXYtOC42NTRjMC0yLTIuNDQtNi4wMjYtNi40NC04LjAyNmExIDEgMCAwIDAtMS4wODIuMDU3TDEwLjQgNS42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS5qcwp2YXIgQ2FrZTsKdmFyIGluaXRfY2FrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS5qcyIoKSB7CiAgICBDYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjF2LThhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2cy41LTEgMi0xIDIuNSAyIDQgMiAyLjUtMiA0LTIgMi41IDIgNCAyIDItMSAyLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzCnZhciBDYWxjdWxhdG9yOwp2YXIgaW5pdF9jYWxjdWxhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzIigpIHsKICAgIENhbGN1bGF0b3IgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiNiIsIHkyOiAiNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE0IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci0xLmpzCnZhciBDYWxlbmRhcjE7CnZhciBpbml0X2NhbGVuZGFyXzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLTEuanMiKCkgewogICAgQ2FsZW5kYXIxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItYXJyb3ctZG93bi5qcwp2YXIgQ2FsZW5kYXJBcnJvd0Rvd247CnZhciBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LWRvd24uanMiKCkgewogICAgQ2FsZW5kYXJBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjM1NFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LXVwLmpzCnZhciBDYWxlbmRhckFycm93VXA7CnZhciBpbml0X2NhbGVuZGFyX2Fycm93X3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1hcnJvdy11cC5qcyIoKSB7CiAgICBDYWxlbmRhckFycm93VXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS4zNDNWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLTIuanMKdmFyIENhbGVuZGFyQ2hlY2syOwp2YXIgaW5pdF9jYWxlbmRhcl9jaGVja18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jaGVjay0yLmpzIigpIHsKICAgIENhbGVuZGFyQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLmpzCnZhciBDYWxlbmRhckNoZWNrOwp2YXIgaW5pdF9jYWxlbmRhcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY2hlY2suanMiKCkgewogICAgQ2FsZW5kYXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNvZy5qcwp2YXIgQ2FsZW5kYXJDb2c7CnZhciBpbml0X2NhbGVuZGFyX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY29nLmpzIigpIHsKICAgIENhbGVuZGFyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE5LjE0OC0uOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNDcgMTQuMzA1LjM4Mi45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTAuNTkyVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNsb2NrLmpzCnZhciBDYWxlbmRhckNsb2NrOwp2YXIgaW5pdF9jYWxlbmRhcl9jbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY2xvY2suanMiKCkgewogICAgQ2FsZW5kYXJDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNy41VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1kYXlzLmpzCnZhciBDYWxlbmRhckRheXM7CnZhciBpbml0X2NhbGVuZGFyX2RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWRheXMuanMiKCkgewogICAgQ2FsZW5kYXJEYXlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItZm9sZC5qcwp2YXIgQ2FsZW5kYXJGb2xkOwp2YXIgaW5pdF9jYWxlbmRhcl9mb2xkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1mb2xkLmpzIigpIHsKICAgIENhbGVuZGFyRm9sZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjBhMiAyIDAgMCAwIDIgMmgxMGEyLjQgMi40IDAgMCAwIDEuNzA2LS43MDZsMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAyMSAxNlY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMnYtNWExIDEgMCAwIDEgMS0xaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1oZWFydC5qcwp2YXIgQ2FsZW5kYXJIZWFydDsKdmFyIGluaXRfY2FsZW5kYXJfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWhlYXJ0LmpzIigpIHsKICAgIENhbGVuZGFySGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4xMjcgMjJINWEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuMTI1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjYyIDE4LjhBMi4yNSAyLjI1IDAgMSAxIDE4IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy0yLmpzCnZhciBDYWxlbmRhck1pbnVzMjsKdmFyIGluaXRfY2FsZW5kYXJfbWludXNfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItbWludXMtMi5qcyIoKSB7CiAgICBDYWxlbmRhck1pbnVzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2aDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy5qcwp2YXIgQ2FsZW5kYXJNaW51czsKdmFyIGluaXRfY2FsZW5kYXJfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW1pbnVzLmpzIigpIHsKICAgIENhbGVuZGFyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1vZmYuanMKdmFyIENhbGVuZGFyT2ZmOwp2YXIgaW5pdF9jYWxlbmRhcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW9mZi5qcyIoKSB7CiAgICBDYWxlbmRhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiA0LjJBMiAyIDAgMCAwIDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAxLjgyLTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuNVY2YTIgMiAwIDAgMC0yLTJIOS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLTIuanMKdmFyIENhbGVuZGFyUGx1czI7CnZhciBpbml0X2NhbGVuZGFyX3BsdXNfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItcGx1cy0yLmpzIigpIHsKICAgIENhbGVuZGFyUGx1czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLmpzCnZhciBDYWxlbmRhclBsdXM7CnZhciBpbml0X2NhbGVuZGFyX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMuanMiKCkgewogICAgQ2FsZW5kYXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMi41OThWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItcmFuZ2UuanMKdmFyIENhbGVuZGFyUmFuZ2U7CnZhciBpbml0X2NhbGVuZGFyX3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1yYW5nZS5qcyIoKSB7CiAgICBDYWxlbmRhclJhbmdlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMThINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zZWFyY2guanMKdmFyIENhbGVuZGFyU2VhcmNoOwp2YXIgaW5pdF9jYWxlbmRhcl9zZWFyY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXNlYXJjaC5qcyIoKSB7CiAgICBDYWxlbmRhclNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS43NVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4yNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi0xLjg3NS0xLjg3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zeW5jLmpzCnZhciBDYWxlbmRhclN5bmM7CnZhciBpbml0X2NhbGVuZGFyX3N5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXN5bmMuanMiKCkgewogICAgQ2FsZW5kYXJTeW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTB2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDguNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXgtMi5qcwp2YXIgQ2FsZW5kYXJYMjsKdmFyIGluaXRfY2FsZW5kYXJfeF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LTIuanMiKCkgewogICAgQ2FsZW5kYXJYMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LmpzCnZhciBDYWxlbmRhclg7CnZhciBpbml0X2NhbGVuZGFyX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXguanMiKCkgewogICAgQ2FsZW5kYXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzCnZhciBDYWxlbmRhcjsKdmFyIGluaXRfY2FsZW5kYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzIigpIHsKICAgIENhbGVuZGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanMKdmFyIENhbGVuZGFyczsKdmFyIGluaXRfY2FsZW5kYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanMiKCkgewogICAgQ2FsZW5kYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjcyNiAyMS4wMUEyIDIgMCAwIDEgMTQgMjJINGEyIDIgMCAwIDEtMi0yVjEwYTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDhoMTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjMiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEtb2ZmLmpzCnZhciBDYW1lcmFPZmY7CnZhciBpbml0X2NhbWVyYV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbWVyYS1vZmYuanMiKCkgewogICAgQ2FtZXJhT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTY0IDE0LjU1OGEzIDMgMCAxIDEtNC4xMjItNC4xMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIC44MTktLjE3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY5NSA0LjAyNEEyIDIgMCAwIDEgMTAuMDA0IDRoMy45OTNhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2Ny4zNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEuanMKdmFyIENhbWVyYTsKdmFyIGluaXRfY2FtZXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEuanMiKCkgewogICAgQ2FtZXJhID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW5keS1jYW5lLmpzCnZhciBDYW5keUNhbmU7CnZhciBpbml0X2NhbmR5X2NhbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LWNhbmUuanMiKCkgewogICAgQ2FuZHlDYW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01LjcgMjFhMiAyIDAgMCAxLTMuNS0ybDguNi0xNGE2IDYgMCAwIDEgMTAuNCA2IDIgMiAwIDEgMS0zLjQ2NC0yIDIgMiAwIDEgMC0zLjQ2NC0yWiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNzUgNyAxNSAyLjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuOSA0LjggMTMgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjkgOS43IDIgNC40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOSAxNC43IDcgMTguOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LW9mZi5qcwp2YXIgQ2FuZHlPZmY7CnZhciBpbml0X2NhbmR5X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHktb2ZmLmpzIigpIHsKICAgIENhbmR5T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjgwMiA2LjE0NWE1IDUgMCAwIDEgNi4wNTMgNi4wNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xdjIuMjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgMTUuNTcxLS45NjQuOTY0YTUgNSAwIDAgMS03LjA3MSAwIDUgNSAwIDAgMSAwLTcuMDdsLjk2NC0uOTY1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE3djRhMSAxIDAgMCAxLTEuNzA3LjcwNyAyLjUgMi41IDAgMCAwLTIuMTUyLS43MTcgMSAxIDAgMCAxLTEuMTMxLTEuMTMxIDIuNSAyLjUgMCAwIDAtLjcxNy0yLjE1MkExIDEgMCAwIDEgMyAxNmg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHkuanMKdmFyIENhbmR5Owp2YXIgaW5pdF9jYW5keSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHkuanMiKCkgewogICAgQ2FuZHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djEwLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xVjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUzNiA3LjQ2NWE1IDUgMCAwIDAtNy4wNzIgMGwtMiAyYTUgNSAwIDAgMCAwIDcuMDcgNSA1IDAgMCAwIDcuMDcyIDBsMi0yYTUgNSAwIDAgMCAwLTcuMDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLW9mZi5qcwp2YXIgQ2FubmFiaXNPZmY7CnZhciBpbml0X2Nhbm5hYmlzX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMtb2ZmLmpzIigpIHsKICAgIENhbm5hYmlzT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTRjMS41IDEuNSAzLjUgMyA2IDMgMC0xLjUtLjUtMy41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45ODggOC4zMjdDMTMuOTAyIDYuMDU0IDEzLjM2NSAzLjgyIDEyIDJhOS4zIDkuMyAwIDAgMC0xLjQ0NSAyLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMzc1IDExLjcyNUMxOC44ODIgMTAuNTMgMjEgNy44NDEgMjEgNmMtMi4zMjQgMC01LjA4IDEuMjk2LTYuNjYyIDIuNjg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4wMjQgMTUuMzc4QTE1IDE1IDAgMCAwIDIyIDE1Yy0uNDI2LTEuMjc5LTIuNjctMi41NTctNC4yNS0yLjkwNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02Ljk5NSA2Ljk5MkM1LjcxNCA2LjQgNC4yOSA2IDMgNmMwIDIgMi41IDUgNCA2LTEuNSAwLTQuNSAxLjUtNSAzIDMuNSAxLjUgNiAxIDYgMS0xLjUgMS41LTIgMy41LTIgNSAyLjUgMCA0LjUtMS41IDYtMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLmpzCnZhciBDYW5uYWJpczsKdmFyIGluaXRfY2FubmFiaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLmpzIigpIHsKICAgIENhbm5hYmlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxMmMtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIDEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUgMCAwIDIuNS41IDYtMS0uNS0xLjUtMy41LTMtNS0zIDEuNS0xIDQtNCA0LTYtMi41IDAtNS41IDEuNS03IDMgMC0yLjUtLjUtNS0yLTctMS41IDItMiA0LjUtMiA3LTEuNS0xLjUtNC41LTMtNy0zIDAgMiAyLjUgNSA0IDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy1vZmYuanMKdmFyIENhcHRpb25zT2ZmOwp2YXIgaW5pdF9jYXB0aW9uc19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcHRpb25zLW9mZi5qcyIoKSB7CiAgICBDYXB0aW9uc09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgNUgxOWEyIDIgMCAwIDEgMiAydjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTlINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMuanMKdmFyIENhcHRpb25zOwp2YXIgaW5pdF9jYXB0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMuanMiKCkgewogICAgQ2FwdGlvbnMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiNSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aDRNMTUgMTVoMk03IDExaDJNMTMgMTFoNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci1mcm9udC5qcwp2YXIgQ2FyRnJvbnQ7CnZhciBpbml0X2Nhcl9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLWZyb250LmpzIigpIHsKICAgIENhckZyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNGguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXItdGF4aS1mcm9udC5qcwp2YXIgQ2FyVGF4aUZyb250Owp2YXIgaW5pdF9jYXJfdGF4aV9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLXRheGktZnJvbnQuanMiKCkgewogICAgQ2FyVGF4aUZyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiOCIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzCnZhciBDYXI7CnZhciBpbml0X2NhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzIigpIHsKICAgIENhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE3aDJjLjYgMCAxLS40IDEtMXYtM2MwLS45LS43LTEuNy0xLjUtMS45QzE4LjcgMTAuNiAxNiAxMCAxNiAxMHMtMS4zLTEuNC0yLjItMi4zYy0uNS0uNC0xLjEtLjctMS44LS43SDVjLS42IDAtMS4xLjQtMS40LjlsLTEuNCAyLjlBMy43IDMuNyAwIDAgMCAyIDEydjRjMCAuNi40IDEgMSAxaDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qcwp2YXIgQ2FyYXZhbjsKdmFyIGluaXRfY2FyYXZhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qcyIoKSB7CiAgICBDYXJhdmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTlWOWE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHY4YTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFhMSAxIDAgMCAxLTEgMUgxMHYtOWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcmQtc2ltLmpzCnZhciBDYXJkU2ltOwp2YXIgaW5pdF9jYXJkX3NpbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyZC1zaW0uanMiKCkgewogICAgQ2FyZFNpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4NmwzLjgyOCAzLjgyOEEyIDIgMCAwIDEgMjAgNy44MjhWMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjEwIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcnJvdC5qcwp2YXIgQ2Fycm90Owp2YXIgaW5pdF9jYXJyb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcnJvdC5qcyIoKSB7CiAgICBDYXJyb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjI3IDIxLjdzOS44Ny0zLjUgMTIuNzMtNi4zNmE0LjUgNC41IDAgMCAwLTYuMzYtNi4zN0M1Ljc3IDExLjg0IDIuMjcgMjEuNyAyLjI3IDIxLjd6TTguNjQgMTRsLTIuMDUtMi4wNE0xNS4zNCAxNWwtMi40Ni0yLjQ2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDlzLTEuMzMtMi0zLjUtMkMxNi44NiA3IDE1IDkgMTUgOXMxLjMzIDIgMy41IDJTMjIgOSAyMiA5eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAycy0yIDEuMzMtMiAzLjVTMTUgOSAxNSA5czItMS44NCAyLTMuNUMxNyAzLjMzIDE1IDIgMTUgMnoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLWxvd2VyLmpzCnZhciBDYXNlTG93ZXI7CnZhciBpbml0X2Nhc2VfbG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtbG93ZXIuanMiKCkgewogICAgQ2FzZUxvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZ2MTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNy41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiMTIuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLXNlbnNpdGl2ZS5qcwp2YXIgQ2FzZVNlbnNpdGl2ZTsKdmFyIGluaXRfY2FzZV9zZW5zaXRpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2Utc2Vuc2l0aXZlLmpzIigpIHsKICAgIENhc2VTZW5zaXRpdmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMzA0IDEzaDYuMzkyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguNSIsIGN5OiAiMTIuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLXVwcGVyLmpzCnZhciBDYXNlVXBwZXI7CnZhciBpbml0X2Nhc2VfdXBwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtdXBwZXIuanMiKCkgewogICAgQ2FzZVVwcGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNSAxMWg0LjVhMSAxIDAgMCAxIDAgNWgtNGEuNS41IDAgMCAxLS41LS41di05YS41LjUgMCAwIDEgLjUtLjVoM2ExIDEgMCAwIDEgMCA1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNzZXR0ZS10YXBlLmpzCnZhciBDYXNzZXR0ZVRhcGU7CnZhciBpbml0X2Nhc3NldHRlX3RhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3NldHRlLXRhcGUuanMiKCkgewogICAgQ2Fzc2V0dGVUYXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMjAgLjctMi45QTEuNCAxLjQgMCAwIDEgOC4xIDE2aDcuOGExLjQgMS40IDAgMCAxIDEuNCAxbC43IDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzCnZhciBDYXN0Owp2YXIgaW5pdF9jYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzIigpIHsKICAgIENhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTkgOSAwIDAgMSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNmE1IDUgMCAwIDEgNCA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIuMDEiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3RsZS5qcwp2YXIgQ2FzdGxlOwp2YXIgaW5pdF9jYXN0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3RsZS5qcyIoKSB7CiAgICBDYXN0bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi0zYTMgMyAwIDAgMC02IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNUg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDExSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOXYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM3Y4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzCnZhciBDYXQ7CnZhciBpbml0X2NhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzIigpIHsKICAgIENhdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVjLjY3IDAgMS4zNS4wOSAyIC4yNiAxLjc4LTIgNS4wMy0yLjg0IDYuNDItMi4yNiAxLjQuNTgtLjQyIDctLjQyIDcgLjU3IDEuMDcgMSAyLjI0IDEgMy40NEMyMSAxNy45IDE2Ljk3IDIxIDEyIDIxcy05LTMtOS03LjU2YzAtMS4yNS41LTIuNCAxLTMuNDQgMCAwLTEuODktNi40Mi0uNS03IDEuMzktLjU4IDQuNzIuMjMgNi41IDIuMjNBOS4wNCA5LjA0IDAgMCAxIDEyIDVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3bC0uNzUtLjc1WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NjdHYuanMKdmFyIENjdHY7CnZhciBpbml0X2NjdHYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NjdHYuanMiKCkgewogICAgQ2N0diA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYuNzUgMTJoMy42MzJhMSAxIDAgMCAxIC44OTQgMS40NDdsLTIuMDM0IDQuMDY5YTEgMSAwIDAgMS0xLjcwOC4xMzRsLTIuMTI0LTIuOTciIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjEwNiA5LjA1M2ExIDEgMCAwIDEgLjQ0NyAxLjM0MWwtMy4xMDYgNi4yMTFhMSAxIDAgMCAxLTEuMzQyLjQ0N0wzLjYxIDEyLjNhMi45MiAyLjkyIDAgMCAxLTEuMy0zLjkxTDMuNjkgNS42YTIuOTIgMi45MiAwIDAgMSAzLjkyLTEuM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOWgzLjc2YTIgMiAwIDAgMCAxLjgtMS4xTDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYXJlYS5qcwp2YXIgQ2hhcnRBcmVhOwp2YXIgaW5pdF9jaGFydF9hcmVhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1hcmVhLmpzIigpIHsKICAgIENoYXJ0QXJlYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTEuMjA3YS41LjUgMCAwIDEgLjE0Ni0uMzUzbDItMmEuNS41IDAgMCAxIC43MDggMGwzLjI5MiAzLjI5MmEuNS41IDAgMCAwIC43MDggMGw0LjI5Mi00LjI5MmEuNS41IDAgMCAxIC44NTQuMzUzVjE2YTEgMSAwIDAgMS0xIDFIOGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1iaWcuanMKdmFyIENoYXJ0QmFyQmlnOwp2YXIgaW5pdF9jaGFydF9iYXJfYmlnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItYmlnLmpzIigpIHsKICAgIENoYXJ0QmFyQmlnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjEzIiwgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNSIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWRlY3JlYXNpbmcuanMKdmFyIENoYXJ0QmFyRGVjcmVhc2luZzsKdmFyIGluaXRfY2hhcnRfYmFyX2RlY3JlYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1kZWNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0QmFyRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWluY3JlYXNpbmcuanMKdmFyIENoYXJ0QmFySW5jcmVhc2luZzsKdmFyIGluaXRfY2hhcnRfYmFyX2luY3JlYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1pbmNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0QmFySW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLXN0YWNrZWQuanMKdmFyIENoYXJ0QmFyU3RhY2tlZDsKdmFyIGluaXRfY2hhcnRfYmFyX3N0YWNrZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1zdGFja2VkLmpzIigpIHsKICAgIENoYXJ0QmFyU3RhY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIxMyIsIHdpZHRoOiAiOSIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjUiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci5qcwp2YXIgQ2hhcnRCYXI7CnZhciBpbml0X2NoYXJ0X2JhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLmpzIigpIHsKICAgIENoYXJ0QmFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jYW5kbGVzdGljay5qcwp2YXIgQ2hhcnRDYW5kbGVzdGljazsKdmFyIGluaXRfY2hhcnRfY2FuZGxlc3RpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNhbmRsZXN0aWNrLmpzIigpIHsKICAgIENoYXJ0Q2FuZGxlc3RpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDV2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjkiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHg6ICIxNSIsIHk6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tYmlnLmpzCnZhciBDaGFydENvbHVtbkJpZzsKdmFyIGluaXRfY2hhcnRfY29sdW1uX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWJpZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkJpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNSIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1kZWNyZWFzaW5nLmpzCnZhciBDaGFydENvbHVtbkRlY3JlYXNpbmc7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tZGVjcmVhc2luZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkRlY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3di0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdWNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzCnZhciBDaGFydENvbHVtbkluY3JlYXNpbmc7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4taW5jcmVhc2luZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1zdGFja2VkLmpzCnZhciBDaGFydENvbHVtblN0YWNrZWQ7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tc3RhY2tlZC5qcyIoKSB7CiAgICBDaGFydENvbHVtblN0YWNrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxM0g3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICI1Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjgiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI5Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLmpzCnZhciBDaGFydENvbHVtbjsKdmFyIGluaXRfY2hhcnRfY29sdW1uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4uanMiKCkgewogICAgQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWdhbnR0LmpzCnZhciBDaGFydEdhbnR0Owp2YXIgaW5pdF9jaGFydF9nYW50dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtZ2FudHQuanMiKCkgewogICAgQ2hhcnRHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWxpbmUuanMKdmFyIENoYXJ0TGluZTsKdmFyIGluaXRfY2hhcnRfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbGluZS5qcyIoKSB7CiAgICBDaGFydExpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA5LTUgNS00LTQtMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbmV0d29yay5qcwp2YXIgQ2hhcnROZXR3b3JrOwp2YXIgaW5pdF9jaGFydF9uZXR3b3JrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uZXR3b3JrLmpzIigpIHsKICAgIENoYXJ0TmV0d29yayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjExIDcuNjY0IDEuNzggMi42NzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMTYyIDEyLjc4OC0zLjMyNCAxLjQyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCA0LTYuMDYgMS41MTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxNSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4tZGVjcmVhc2luZy5qcwp2YXIgQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9kZWNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1kZWNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxdi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4taW5jcmVhc2luZy5qcwp2YXIgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1pbmNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMVYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanMKdmFyIENoYXJ0Tm9BeGVzQ29sdW1uOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanMiKCkgewogICAgQ2hhcnROb0F4ZXNDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29tYmluZWQuanMKdmFyIENoYXJ0Tm9BeGVzQ29tYmluZWQ7CnZhciBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29tYmluZWQuanMiKCkgewogICAgQ2hhcnROb0F4ZXNDb21iaW5lZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMHYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAzLTguNjQ2IDguNjQ2YS41LjUgMCAwIDEtLjcwOCAwTDkuMzU0IDguMzU0YS41LjUgMCAwIDAtLjcwNyAwTDIgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQuanMKdmFyIENoYXJ0Tm9BeGVzR2FudHQ7CnZhciBpbml0X2NoYXJ0X25vX2F4ZXNfZ2FudHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQuanMiKCkgewogICAgQ2hhcnROb0F4ZXNHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1waWUuanMKdmFyIENoYXJ0UGllOwp2YXIgaW5pdF9jaGFydF9waWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXBpZS5qcyIoKSB7CiAgICBDaGFydFBpZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEyYy41NTIgMCAxLjAwNS0uNDQ5Ljk1LS45OThhMTAgMTAgMCAwIDAtOC45NTMtOC45NTFjLS41NS0uMDU1LS45OTguMzk4LS45OTguOTV2OGExIDEgMCAwIDAgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zY2F0dGVyLmpzCnZhciBDaGFydFNjYXR0ZXI7CnZhciBpbml0X2NoYXJ0X3NjYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNjYXR0ZXIuanMiKCkgewogICAgQ2hhcnRTY2F0dGVyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI1LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTEuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTQuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zcGxpbmUuanMKdmFyIENoYXJ0U3BsaW5lOwp2YXIgaW5pdF9jaGFydF9zcGxpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNwbGluZS5qcyIoKSB7CiAgICBDaGFydFNwbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZjLjUtMiAxLjUtNyA0LTcgMiAwIDIgMyA0IDMgMi41IDAgNC41LTUgNS03IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2stY2hlY2suanMKdmFyIENoZWNrQ2hlY2s7CnZhciBpbml0X2NoZWNrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay1jaGVjay5qcyIoKSB7CiAgICBDaGVja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNiA3IDE3bC01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtNy41IDcuNUwxMyAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWNrLWxpbmUuanMKdmFyIENoZWNrTGluZTsKdmFyIGluaXRfY2hlY2tfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2stbGluZS5qcyIoKSB7CiAgICBDaGVja0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0TDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlMMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1TDQgMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qcwp2YXIgQ2hlY2s7CnZhciBpbml0X2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qcyIoKSB7CiAgICBDaGVjayA9IFtbInBhdGgiLCB7IGQ6ICJNMjAgNiA5IDE3bC01LTUiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlZi1oYXQuanMKdmFyIENoZWZIYXQ7CnZhciBpbml0X2NoZWZfaGF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVmLWhhdC5qcyIoKSB7CiAgICBDaGVmSGF0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgMjFhMSAxIDAgMCAwIDEtMXYtNS4zNWMwLS40NTcuMzE2LS44NDQuNzI3LTEuMDQxYTQgNCAwIDAgMC0yLjEzNC03LjU4OSA1IDUgMCAwIDAtOS4xODYgMCA0IDQgMCAwIDAtMi4xMzQgNy41ODhjLjQxMS4xOTguNzI3LjU4NS43MjcgMS4wNDFWMjBhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxN2gxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXJyeS5qcwp2YXIgQ2hlcnJ5Owp2YXIgaW5pdF9jaGVycnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXJyeS5qcyIoKSB7CiAgICBDaGVycnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2E1IDUgMCAwIDAgMTAgMGMwLTIuNzYtMi41LTUtNS0zLTIuNS0yLTUgLjI0LTUgM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGMzLjIyLTIuOTEgNC4yOS04Ljc1IDUtMTIgMS42NiAyLjM4IDQuOTQgOSA1IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDljLTQuMjkgMC03LjE0LTIuMzMtMTAtNyA1LjcxIDAgMTAgNC42NyAxMCA3WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWJpc2hvcC5qcwp2YXIgQ2hlc3NCaXNob3A7CnZhciBpbml0X2NoZXNzX2Jpc2hvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtYmlzaG9wLmpzIigpIHsKICAgIENoZXNzQmlzaG9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMThjMS41LS42MTUgMy0yLjQ2MSAzLTQuOTIzQzE4IDguNzY5IDE0LjUgNC40NjIgMTIgMiA5LjUgNC40NjIgNiA4Ljc3IDYgMTMuMDc3IDYgMTUuNTM5IDcuNSAxNy4zODUgOSAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA3LTIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1raW5nLmpzCnZhciBDaGVzc0tpbmc7CnZhciBpbml0X2NoZXNzX2tpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtpbmcuanMiKCkgewogICAgQ2hlc3NLaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ni44MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1rbmlnaHQuanMKdmFyIENoZXNzS25pZ2h0Owp2YXIgaW5pdF9jaGVzc19rbmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtuaWdodC5qcyIoKSB7CiAgICBDaGVzc0tuaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUgMThjMS0yIDIuNS01IDIuNS05YTcgNyAwIDAgMC03LTdINi42MzVhMSAxIDAgMCAwLS43NjggMS42NEw3IDVsLTIuMzIgNS44MDJhMiAyIDAgMCAwIC45NSAyLjUyNmwyLjg3IDEuNDU2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgMS40MjUtMS40MjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgOCAxLjUzLTEuNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MTMgMTIuMTg1IDcgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1wYXduLmpzCnZhciBDaGVzc1Bhd247CnZhciBpbml0X2NoZXNzX3Bhd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXBhd24uanMiKCkgewogICAgQ2hlc3NQYXduID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMCAxLjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTggMS41LTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtcXVlZW4uanMKdmFyIENoZXNzUXVlZW47CnZhciBpbml0X2NoZXNzX3F1ZWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1xdWVlbi5qcyIoKSB7CiAgICBDaGVzc1F1ZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDktMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDQgOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiNyIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1kb3duLmpzCnZhciBDaGV2cm9uRG93bjsKdmFyIGluaXRfY2hldnJvbl9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWRvd24uanMiKCkgewogICAgQ2hldnJvbkRvd24gPSBbWyJwYXRoIiwgeyBkOiAibTYgOSA2IDYgNi02IiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZmlyc3QuanMKdmFyIENoZXZyb25GaXJzdDsKdmFyIGluaXRfY2hldnJvbl9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1maXJzdC5qcyIoKSB7CiAgICBDaGV2cm9uRmlyc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC02LTYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNnYxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXJvb2suanMKdmFyIENoZXNzUm9vazsKdmFyIGluaXRfY2hlc3Nfcm9vayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3Mtcm9vay5qcyIoKSB7CiAgICBDaGVzc1Jvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2NWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDEtOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGFzdC5qcwp2YXIgQ2hldnJvbkxhc3Q7CnZhciBpbml0X2NoZXZyb25fbGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sYXN0LmpzIigpIHsKICAgIENoZXZyb25MYXN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZ2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWxlZnQuanMKdmFyIENoZXZyb25MZWZ0Owp2YXIgaW5pdF9jaGV2cm9uX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGVmdC5qcyIoKSB7CiAgICBDaGV2cm9uTGVmdCA9IFtbInBhdGgiLCB7IGQ6ICJtMTUgMTgtNi02IDYtNiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzCnZhciBDaGV2cm9uUmlnaHQ7CnZhciBpbml0X2NoZXZyb25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tcmlnaHQuanMiKCkgewogICAgQ2hldnJvblJpZ2h0ID0gW1sicGF0aCIsIHsgZDogIm05IDE4IDYtNi02LTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi11cC5qcwp2YXIgQ2hldnJvblVwOwp2YXIgaW5pdF9jaGV2cm9uX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLXVwLmpzIigpIHsKICAgIENoZXZyb25VcCA9IFtbInBhdGgiLCB7IGQ6ICJtMTggMTUtNi02LTYgNiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1kb3duLXVwLmpzCnZhciBDaGV2cm9uc0Rvd25VcDsKdmFyIGluaXRfY2hldnJvbnNfZG93bl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi11cC5qcyIoKSB7CiAgICBDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjAgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDQgNSA1IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWRvd24uanMKdmFyIENoZXZyb25zRG93bjsKdmFyIGluaXRfY2hldnJvbnNfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi5qcyIoKSB7CiAgICBDaGV2cm9uc0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDYgNSA1IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDEzIDUgNSA1LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LWVsbGlwc2lzLmpzCnZhciBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzOwp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0X2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LWVsbGlwc2lzLmpzIigpIHsKICAgIENoZXZyb25zTGVmdFJpZ2h0RWxsaXBzaXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgNSA1LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDctNSA1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWxlZnQtcmlnaHQuanMKdmFyIENoZXZyb25zTGVmdFJpZ2h0Owp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LmpzIigpIHsKICAgIENoZXZyb25zTGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyA1IDUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtbGVmdC5qcwp2YXIgQ2hldnJvbnNMZWZ0Owp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIigpIHsKICAgIENoZXZyb25zTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE3LTUtNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LWxlZnQuanMKdmFyIENoZXZyb25zUmlnaHRMZWZ0Owp2YXIgaW5pdF9jaGV2cm9uc19yaWdodF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC1sZWZ0LmpzIigpIHsKICAgIENoZXZyb25zUmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDUtNS01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC5qcwp2YXIgQ2hldnJvbnNSaWdodDsKdmFyIGluaXRfY2hldnJvbnNfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LmpzIigpIHsKICAgIENoZXZyb25zUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTcgNS01LTUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXVwLWRvd24uanMKdmFyIENoZXZyb25zVXBEb3duOwp2YXIgaW5pdF9jaGV2cm9uc191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC1kb3duLmpzIigpIHsKICAgIENoZXZyb25zVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNSA1IDUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgOSA1LTUgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtdXAuanMKdmFyIENoZXZyb25zVXA7CnZhciBpbml0X2NoZXZyb25zX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC5qcyIoKSB7CiAgICBDaGV2cm9uc1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEtNS01LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC01LTUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2h1cmNoLmpzCnZhciBDaHVyY2g7CnZhciBpbml0X2NodXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2h1cmNoLmpzIigpIHsKICAgIENodXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDloNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4IDkgMy41MiAyLjE0N2ExIDEgMCAwIDEgLjQ4Ljg1NFYxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNi45OTlhMSAxIDAgMCAxIC40OC0uODU0TDYgOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjdhMSAxIDAgMCAxIC4zNzYtLjc4Mmw1LTMuOTk5YTEgMSAwIDAgMSAxLjI0OS4wMDFsNSA0QTEgMSAwIDAgMSAxOCA3djE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLW9mZi5qcwp2YXIgQ2lnYXJldHRlT2ZmOwp2YXIgaW5pdF9jaWdhcmV0dGVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaWdhcmV0dGUtb2ZmLmpzIigpIHsKICAgIENpZ2FyZXR0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtLjUuODY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nocm9taXVtLmpzCnZhciBDaHJvbWl1bTsKdmFyIGluaXRfY2hyb21pdW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nocm9taXVtLmpzIigpIHsKICAgIENocm9taXVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuODggMjEuOTQgMTUuNDYgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMTcgOEgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjk1IDYuMDYgOC41NCAxNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLmpzCnZhciBDaWdhcmV0dGU7CnZhciBpbml0X2NpZ2FyZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLmpzIigpIHsKICAgIENpZ2FyZXR0ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hbGVydC5qcwp2YXIgQ2lyY2xlQWxlcnQ7CnZhciBpbml0X2NpcmNsZV9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFsZXJ0LmpzIigpIHsKICAgIENpcmNsZUFsZXJ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1kb3duLmpzCnZhciBDaXJjbGVBcnJvd0Rvd247CnZhciBpbml0X2NpcmNsZV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd0Rvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LWxlZnQuanMKdmFyIENpcmNsZUFycm93TGVmdDsKdmFyIGluaXRfY2lyY2xlX2Fycm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1sZWZ0LmpzIigpIHsKICAgIENpcmNsZUFycm93TGVmdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDgtNCA0IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLWxlZnQuanMKdmFyIENpcmNsZUFycm93T3V0RG93bkxlZnQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tbGVmdC5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd091dERvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmExMCAxMCAwIDEgMSAxMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJIMnYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfZG93bl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0RG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJhMTAgMTAgMCAxIDEgMTAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMTIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTZ2NmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtbGVmdC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC11cC1sZWZ0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0VXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC11cC1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0Owp2YXIgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LXVwLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0VXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyQTEwIDEwIDAgMSAxIDEyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyaDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dSaWdodDsKdmFyIGluaXRfY2lyY2xlX2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctcmlnaHQuanMiKCkgewogICAgQ2lyY2xlQXJyb3dSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE2IDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LXVwLmpzCnZhciBDaXJjbGVBcnJvd1VwOwp2YXIgaW5pdF9jaXJjbGVfYXJyb3dfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy11cC5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd1VwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTItNC00LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNlY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLmpzCnZhciBDaXJjbGVDaGVjazsKdmFyIGluaXRfY2lyY2xlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2suanMiKCkgewogICAgQ2lyY2xlQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2stYmlnLmpzCnZhciBDaXJjbGVDaGVja0JpZzsKdmFyIGluaXRfY2lyY2xlX2NoZWNrX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLWJpZy5qcyIoKSB7CiAgICBDaXJjbGVDaGVja0JpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgwMSAxMEExMCAxMCAwIDEgMSAxNyAzLjMzNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tZG93bi5qcwp2YXIgQ2lyY2xlQ2hldnJvbkRvd247CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWRvd24uanMiKCkgewogICAgQ2lyY2xlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tbGVmdC5qcwp2YXIgQ2lyY2xlQ2hldnJvbkxlZnQ7CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWxlZnQuanMiKCkgewogICAgQ2lyY2xlQ2hldnJvbkxlZnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNi00LTQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tcmlnaHQuanMKdmFyIENpcmNsZUNoZXZyb25SaWdodDsKdmFyIGluaXRfY2lyY2xlX2NoZXZyb25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXVwLmpzCnZhciBDaXJjbGVDaGV2cm9uVXA7CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi11cC5qcyIoKSB7CiAgICBDaXJjbGVDaGV2cm9uVXAgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE0IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZGFzaGVkLmpzCnZhciBDaXJjbGVEYXNoZWQ7CnZhciBpbml0X2NpcmNsZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kYXNoZWQuanMiKCkgewogICAgQ2lyY2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4MmExMCAxMCAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgxOGExMCAxMCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42MDkgMy43MjFhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNzkgMTcuNjA5YTEwIDEwIDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNzIxIDYuMzkxYTEwIDEwIDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzkxIDIwLjI3OWExMCAxMCAwIDAgMS0yLjY5LTIuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kaXZpZGUuanMKdmFyIENpcmNsZURpdmlkZTsKdmFyIGluaXRfY2lyY2xlX2RpdmlkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRpdmlkZS5qcyIoKSB7CiAgICBDaXJjbGVEaXZpZGUgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb2xsYXItc2lnbi5qcwp2YXIgQ2lyY2xlRG9sbGFyU2lnbjsKdmFyIGluaXRfY2lyY2xlX2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG9sbGFyLXNpZ24uanMiKCkgewogICAgQ2lyY2xlRG9sbGFyU2lnbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRvdC1kYXNoZWQuanMKdmFyIENpcmNsZURvdERhc2hlZDsKdmFyIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QtZGFzaGVkLmpzIigpIHsKICAgIENpcmNsZURvdERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xOGE5LjkzIDkuOTMgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNiAzLjcxYTkuOTUgOS45NSAwIDAgMSAyLjY5IDIuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MiAxMC4xYTkuOTMgOS45MyAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOSAxNy42YTkuOTUgOS45NSAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgyYTkuOTQgOS45NCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjQgMjAuMjlhOS45NSA5Ljk1IDAgMCAxLTIuNjktMi43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuMTggMTMuOWE5LjkzIDkuOTMgMCAwIDEgMC0zLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy43MSA2LjRhOS45NSA5Ljk1IDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG90LmpzCnZhciBDaXJjbGVEb3Q7CnZhciBpbml0X2NpcmNsZV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QuanMiKCkgewogICAgQ2lyY2xlRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1lbGxpcHNpcy5qcwp2YXIgQ2lyY2xlRWxsaXBzaXM7CnZhciBpbml0X2NpcmNsZV9lbGxpcHNpcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVsbGlwc2lzLmpzIigpIHsKICAgIENpcmNsZUVsbGlwc2lzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1lcXVhbC5qcwp2YXIgQ2lyY2xlRXF1YWw7CnZhciBpbml0X2NpcmNsZV9lcXVhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVxdWFsLmpzIigpIHsKICAgIENpcmNsZUVxdWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aDEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1hcnJvdy11cC5qcwp2YXIgQ2lyY2xlRmFkaW5nQXJyb3dVcDsKdmFyIGluaXRfY2lyY2xlX2ZhZGluZ19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1hcnJvdy11cC5qcyIoKSB7CiAgICBDaXJjbGVGYWRpbmdBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgOC44NzVhMTAgMTAgMCAwIDAtLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNjM2IDUuMjM1YTEwIDEwIDAgMCAxIC44OTEtLjg1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY0NCAyMS40MmExMCAxMCAwIDAgMCA3LjYzMS0uMzgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZmFkaW5nLXBsdXMuanMKdmFyIENpcmNsZUZhZGluZ1BsdXM7CnZhciBpbml0X2NpcmNsZV9mYWRpbmdfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1wbHVzLmpzIigpIHsKICAgIENpcmNsZUZhZGluZ1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMCAxIDcuMzggMTYuNzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWdhdWdlLmpzCnZhciBDaXJjbGVHYXVnZTsKdmFyIGluaXRfY2lyY2xlX2dhdWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZ2F1Z2UuanMiKCkgewogICAgQ2lyY2xlR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAxMC42IDE5IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtbWludXMuanMKdmFyIENpcmNsZU1pbnVzOwp2YXIgaW5pdF9jaXJjbGVfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1taW51cy5qcyIoKSB7CiAgICBDaXJjbGVNaW51cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1vZmYuanMKdmFyIENpcmNsZU9mZjsKdmFyIGluaXRfY2lyY2xlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW9mZi5qcyIoKSB7CiAgICBDaXJjbGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhcmtpbmctb2ZmLmpzCnZhciBDaXJjbGVQYXJraW5nT2ZmOwp2YXIgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLW9mZi5qcyIoKSB7CiAgICBDaXJjbGVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjU2IDdIMTNhMyAzIDAgMCAxIDIuOTg0IDMuMzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDcxIDE5LjA3MUExIDEgMCAwIDEgNC45MyA0LjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1NyAyLjY4N2ExMCAxMCAwIDAgMSAxMi45NTYgMTIuOTU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLmpzCnZhciBDaXJjbGVQYXJraW5nOwp2YXIgaW5pdF9jaXJjbGVfcGFya2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhcmtpbmcuanMiKCkgewogICAgQ2lyY2xlUGFya2luZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWN2g0YTMgMyAwIDAgMSAwIDZIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXVzZS5qcwp2YXIgQ2lyY2xlUGF1c2U7CnZhciBpbml0X2NpcmNsZV9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhdXNlLmpzIigpIHsKICAgIENpcmNsZVBhdXNlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjEwIiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiMTQiLCB5MTogIjE1IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBlcmNlbnQuanMKdmFyIENpcmNsZVBlcmNlbnQ7CnZhciBpbml0X2NpcmNsZV9wZXJjZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGVyY2VudC5qcyIoKSB7CiAgICBDaXJjbGVQZXJjZW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGlsZS5qcwp2YXIgQ2lyY2xlUGlsZTsKdmFyIGluaXRfY2lyY2xlX3BpbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1waWxlLmpzIigpIHsKICAgIENpcmNsZVBpbGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wbGF5LmpzCnZhciBDaXJjbGVQbGF5Owp2YXIgaW5pdF9jaXJjbGVfcGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsYXkuanMiKCkgewogICAgQ2lyY2xlUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOS4wMDNhMSAxIDAgMCAxIDEuNTE3LS44NTlsNC45OTcgMi45OTdhMSAxIDAgMCAxIDAgMS43MThsLTQuOTk3IDIuOTk3QTEgMSAwIDAgMSA5IDE0Ljk5NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcG91bmQtc3RlcmxpbmcuanMKdmFyIENpcmNsZVBvdW5kU3Rlcmxpbmc7CnZhciBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIENpcmNsZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMSAxIDAgMCAxIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsdXMuanMKdmFyIENpcmNsZVBsdXM7CnZhciBpbml0X2NpcmNsZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGx1cy5qcyIoKSB7CiAgICBDaXJjbGVQbHVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wb3dlci5qcwp2YXIgQ2lyY2xlUG93ZXI7CnZhciBpbml0X2NpcmNsZV9wb3dlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvd2VyLmpzIigpIHsKICAgIENpcmNsZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgQ2lyY2xlUXVlc3Rpb25NYXJrOwp2YXIgaW5pdF9jaXJjbGVfcXVlc3Rpb25fbWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgQ2lyY2xlUXVlc3Rpb25NYXJrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLTIuanMKdmFyIENpcmNsZVNsYXNoMjsKdmFyIGluaXRfY2lyY2xlX3NsYXNoXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC0yLmpzIigpIHsKICAgIENpcmNsZVNsYXNoMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC5qcwp2YXIgQ2lyY2xlU2xhc2g7CnZhciBpbml0X2NpcmNsZV9zbGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLmpzIigpIHsKICAgIENpcmNsZVNsYXNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjE1IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNtYWxsLmpzCnZhciBDaXJjbGVTbWFsbDsKdmFyIGluaXRfY2lyY2xlX3NtYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc21hbGwuanMiKCkgewogICAgQ2lyY2xlU21hbGwgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0YXIuanMKdmFyIENpcmNsZVN0YXI7CnZhciBpbml0X2NpcmNsZV9zdGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3Rhci5qcyIoKSB7CiAgICBDaXJjbGVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDUxIDcuNjE2YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY3bC0xLjE1Ni0xLjE1MmExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0b3AuanMKdmFyIENpcmNsZVN0b3A7CnZhciBpbml0X2NpcmNsZV9zdG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3RvcC5qcyIoKSB7CiAgICBDaXJjbGVTdG9wID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjkiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXVzZXItcm91bmQuanMKdmFyIENpcmNsZVVzZXJSb3VuZDsKdmFyIGluaXRfY2lyY2xlX3VzZXJfcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLXJvdW5kLmpzIigpIHsKICAgIENpcmNsZVVzZXJSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtdXNlci5qcwp2YXIgQ2lyY2xlVXNlcjsKdmFyIGluaXRfY2lyY2xlX3VzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLmpzIigpIHsKICAgIENpcmNsZVVzZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjAuNjYyVjE5YTIgMiAwIDAgMSAyLTJoNmEyIDIgMCAwIDEgMiAydjEuNjYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXguanMKdmFyIENpcmNsZVg7CnZhciBpbml0X2NpcmNsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUteC5qcyIoKSB7CiAgICBDaXJjbGVYID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qcwp2YXIgQ2lyY2xlOwp2YXIgaW5pdF9jaXJjbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qcyIoKSB7CiAgICBDaXJjbGUgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmN1aXQtYm9hcmQuanMKdmFyIENpcmN1aXRCb2FyZDsKdmFyIGluaXRfY2lyY3VpdF9ib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY3VpdC1ib2FyZC5qcyIoKSB7CiAgICBDaXJjdWl0Qm9hcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA5aDRhMiAyIDAgMCAwIDItMlYzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTRhMiAyIDAgMCAxIDItMmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanMKdmFyIENpdHJ1czsKdmFyIGluaXRfY2l0cnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanMiKCkgewogICAgQ2l0cnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMS42NiAxNy42N2ExLjA4IDEuMDggMCAwIDEtLjA0IDEuNkExMiAxMiAwIDAgMSA0LjczIDIuMzhhMS4xIDEuMSAwIDAgMSAxLjYxLS4wNHoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjY1IDE1LjY2QTggOCAwIDAgMSA4LjM1IDQuMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAtNS41IDUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNy44NVYxMEg2LjE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xhcHBlcmJvYXJkLmpzCnZhciBDbGFwcGVyYm9hcmQ7CnZhciBpbml0X2NsYXBwZXJib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xhcHBlcmJvYXJkLmpzIigpIHsKICAgIENsYXBwZXJib2FyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjIgNiAzIDExbC0uOS0yLjRjLS4zLTEuMS4zLTIuMiAxLjMtMi41bDEzLjUtNGMxLjEtLjMgMi4yLjMgMi41IDEuM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4yIDUuMyAzLjEgMy45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjQgMy40IDMuMSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoMTh2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMloiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2hlY2suanMKdmFyIENsaXBib2FyZENoZWNrOwp2YXIgaW5pdF9jbGlwYm9hcmRfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1jaGVjay5qcyIoKSB7CiAgICBDbGlwYm9hcmRDaGVjayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE0IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2xvY2suanMKdmFyIENsaXBib2FyZENsb2NrOwp2YXIgaW5pdF9jbGlwYm9hcmRfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1jbG9jay5qcyIoKSB7CiAgICBDbGlwYm9hcmRDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYuODMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWNvcHkuanMKdmFyIENsaXBib2FyZENvcHk7CnZhciBpbml0X2NsaXBib2FyZF9jb3B5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY29weS5qcyIoKSB7CiAgICBDbGlwYm9hcmRDb3B5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTRIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTAtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1saXN0LmpzCnZhciBDbGlwYm9hcmRMaXN0Owp2YXIgaW5pdF9jbGlwYm9hcmRfbGlzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWxpc3QuanMiKCkgewogICAgQ2xpcGJvYXJkTGlzdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtbWludXMuanMKdmFyIENsaXBib2FyZE1pbnVzOwp2YXIgaW5pdF9jbGlwYm9hcmRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1taW51cy5qcyIoKSB7CiAgICBDbGlwYm9hcmRNaW51cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGFzdGUuanMKdmFyIENsaXBib2FyZFBhc3RlOwp2YXIgaW5pdF9jbGlwYm9hcmRfcGFzdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wYXN0ZS5qcyIoKSB7CiAgICBDbGlwYm9hcmRQYXN0ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE0aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4IDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjc5My0xLjExMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGVuLWxpbmUuanMKdmFyIENsaXBib2FyZFBlbkxpbmU7CnZhciBpbml0X2NsaXBib2FyZF9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi1saW5lLmpzIigpIHsKICAgIENsaXBib2FyZFBlbkxpbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMS43MyAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGVuLmpzCnZhciBDbGlwYm9hcmRQZW47CnZhciBpbml0X2NsaXBib2FyZF9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wZW4uanMiKCkgewogICAgQ2xpcGJvYXJkUGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzLjVWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBsdXMuanMKdmFyIENsaXBib2FyZFBsdXM7CnZhciBpbml0X2NsaXBib2FyZF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGx1cy5qcyIoKSB7CiAgICBDbGlwYm9hcmRQbHVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3YtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC10eXBlLmpzCnZhciBDbGlwYm9hcmRUeXBlOwp2YXIgaW5pdF9jbGlwYm9hcmRfdHlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXR5cGUuanMiKCkgewogICAgQ2xpcGJvYXJkVHlwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydi0xaDZ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQteC5qcwp2YXIgQ2xpcGJvYXJkWDsKdmFyIGluaXRfY2xpcGJvYXJkX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC14LmpzIigpIHsKICAgIENsaXBib2FyZFggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTEtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNiA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLmpzCnZhciBDbGlwYm9hcmQ7CnZhciBpbml0X2NsaXBib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLmpzIigpIHsKICAgIENsaXBib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEuanMKdmFyIENsb2NrMTsKdmFyIGluaXRfY2xvY2tfMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMS5qcyIoKSB7CiAgICBDbG9jazEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMi00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTAuanMKdmFyIENsb2NrMTA7CnZhciBpbml0X2Nsb2NrXzEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMC5qcyIoKSB7CiAgICBDbG9jazEwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC00LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMS5qcwp2YXIgQ2xvY2sxMTsKdmFyIGluaXRfY2xvY2tfMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTExLmpzIigpIHsKICAgIENsb2NrMTEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsLTItNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEyLmpzCnZhciBDbG9jazEyOwp2YXIgaW5pdF9jbG9ja18xMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTIuanMiKCkgewogICAgQ2xvY2sxMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTIuanMKdmFyIENsb2NrMjsKdmFyIGluaXRfY2xvY2tfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMi5qcyIoKSB7CiAgICBDbG9jazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNC0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMy5qcwp2YXIgQ2xvY2szOwp2YXIgaW5pdF9jbG9ja18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0zLmpzIigpIHsKICAgIENsb2NrMyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNC5qcwp2YXIgQ2xvY2s0Owp2YXIgaW5pdF9jbG9ja180ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay00LmpzIigpIHsKICAgIENsb2NrNCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmw0IDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay01LmpzCnZhciBDbG9jazU7CnZhciBpbml0X2Nsb2NrXzUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTUuanMiKCkgewogICAgQ2xvY2s1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDIgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTYuanMKdmFyIENsb2NrNjsKdmFyIGluaXRfY2xvY2tfNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNi5qcyIoKSB7CiAgICBDbG9jazYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNy5qcwp2YXIgQ2xvY2s3Owp2YXIgaW5pdF9jbG9ja183ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay03LmpzIigpIHsKICAgIENsb2NrNyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtMiA0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOC5qcwp2YXIgQ2xvY2s4Owp2YXIgaW5pdF9jbG9ja184ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay04LmpzIigpIHsKICAgIENsb2NrOCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOS5qcwp2YXIgQ2xvY2s5Owp2YXIgaW5pdF9jbG9ja185ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay05LmpzIigpIHsKICAgIENsb2NrOSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nkg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYWxlcnQuanMKdmFyIENsb2NrQWxlcnQ7CnZhciBpbml0X2Nsb2NrX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hbGVydC5qcyIoKSB7CiAgICBDbG9ja0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yNSA4LjJBMTAgMTAgMCAxIDAgMTYgMjEuMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hcnJvdy1kb3duLmpzCnZhciBDbG9ja0Fycm93RG93bjsKdmFyIGluaXRfY2xvY2tfYXJyb3dfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctZG93bi5qcyIoKSB7CiAgICBDbG9ja0Fycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMzM3IDIxLjk5NGExMCAxMCAwIDEgMSA5LjU4OC04Ljc2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0djgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hcnJvdy11cC5qcwp2YXIgQ2xvY2tBcnJvd1VwOwp2YXIgaW5pdF9jbG9ja19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctdXAuanMiKCkgewogICAgQ2xvY2tBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDEuNTYuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stY2hlY2suanMKdmFyIENsb2NrQ2hlY2s7CnZhciBpbml0X2Nsb2NrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1jaGVjay5qcyIoKSB7CiAgICBDbG9ja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmExMCAxMCAwIDEgMC0xMSA5Ljk1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE2LTUuNSA1LjVMMTQgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1mYWRpbmcuanMKdmFyIENsb2NrRmFkaW5nOwp2YXIgaW5pdF9jbG9ja19mYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWZhZGluZy5qcyIoKSB7CiAgICBDbG9ja0ZhZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLXBsdXMuanMKdmFyIENsb2NrUGx1czsKdmFyIGluaXRfY2xvY2tfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stcGx1cy5qcyIoKSB7CiAgICBDbG9ja1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMy42NDQgMS44MjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjkyIDEzLjI2N2ExMCAxMCAwIDEgMC04LjY1MyA4LjY1MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzCnZhciBDbG9jazsKdmFyIGluaXRfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzIigpIHsKICAgIENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3NlZC1jYXB0aW9uLmpzCnZhciBDbG9zZWRDYXB0aW9uOwp2YXIgaW5pdF9jbG9zZWRfY2FwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvc2VkLWNhcHRpb24uanMiKCkgewogICAgQ2xvc2VkQ2FwdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuMTdhMyAzIDAgMSAwIDAgNS42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1hbGVydC5qcwp2YXIgQ2xvdWRBbGVydDsKdmFyIGluaXRfY2xvdWRfYWxlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWFsZXJ0LmpzIigpIHsKICAgIENsb3VkQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguNWExIDEgMCAwIDAgMC05aC0xLjc5QTcgNyAwIDEgMCA3IDE3LjcwOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWJhY2t1cC5qcwp2YXIgQ2xvdWRCYWNrdXA7CnZhciBpbml0X2Nsb3VkX2JhY2t1cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtYmFja3VwLmpzIigpIHsKICAgIENsb3VkQmFja3VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNSA4aC0xLjc5QTcgNyAwIDEgMCAzIDEzLjYwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTUgNSAwIDAgMCA5LTMgNC41IDQuNSAwIDAgMC00LjUtNC41IDQuODIgNC44MiAwIDAgMC0zLjQxIDEuNDFMNyAxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWNoZWNrLmpzCnZhciBDbG91ZENoZWNrOwp2YXIgaW5pdF9jbG91ZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY2hlY2suanMiKCkgewogICAgQ2xvdWRDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE1LTUuNSA1LjVMOSAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE3Ljc0M0E3IDcgMCAxIDEgMTUuNzEgMTBoMS43OWE0LjUgNC41IDAgMCAxIDEuNSA4Ljc0MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWNvZy5qcwp2YXIgQ2xvdWRDb2c7CnZhciBpbml0X2Nsb3VkX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY29nLmpzIigpIHsKICAgIENsb3VkQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE5Ljc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggMTQuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0OCAxOS43NzJhMyAzIDAgMSAwLTIuMjk2LTUuNTQ0bC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMgMjAuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDE1Ljg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTguMTQ4LjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yIDE1LjFhNyA3IDAgMSAxIDkuOTMtOS44NThBNyA3IDAgMCAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTUuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxOC4xNDgtLjkyMy4zODMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kb3dubG9hZC5qcwp2YXIgQ2xvdWREb3dubG9hZDsKdmFyIGluaXRfY2xvdWRfZG93bmxvYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRvd25sb2FkLmpzIigpIHsKICAgIENsb3VkRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4bC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMjEgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMzkzIDE1LjI2OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi40MzYgOC4yODQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kcml6emxlLmpzCnZhciBDbG91ZERyaXp6bGU7CnZhciBpbml0X2Nsb3VkX2RyaXp6bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRyaXp6bGUuanMiKCkgewogICAgQ2xvdWREcml6emxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1mb2cuanMKdmFyIENsb3VkRm9nOwp2YXIgaW5pdF9jbG91ZF9mb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWZvZy5qcyIoKSB7CiAgICBDbG91ZEZvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMUg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtaGFpbC5qcwp2YXIgQ2xvdWRIYWlsOwp2YXIgaW5pdF9jbG91ZF9oYWlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1oYWlsLmpzIigpIHsKICAgIENsb3VkSGFpbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbGlnaHRuaW5nLmpzCnZhciBDbG91ZExpZ2h0bmluZzsKdmFyIGluaXRfY2xvdWRfbGlnaHRuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1saWdodG5pbmcuanMiKCkgewogICAgQ2xvdWRMaWdodG5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2LjMyNkE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgLjUgOC45NzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTItMyA1aDRsLTMgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW1vb24tcmFpbi5qcwp2YXIgQ2xvdWRNb29uUmFpbjsKdmFyIGluaXRfY2xvdWRfbW9vbl9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1tb29uLXJhaW4uanMiKCkgewogICAgQ2xvdWRNb29uUmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOXYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi5qcwp2YXIgQ2xvdWRNb29uOwp2YXIgaW5pdF9jbG91ZF9tb29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1tb29uLmpzIigpIHsKICAgIENsb3VkTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2YTMgMyAwIDAgMSAwIDZIN2E1IDUgMCAxIDEgNC45LTZ6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NiAxNC41MTJhNiA2IDAgMCAwIDMuNDYxLTQuMTI3Yy4xNDgtLjYyNS0uNjU5LS45Ny0xLjI0OC0uNzE0YTQgNCAwIDAgMS01LjI1OS01LjI2Yy4yNTUtLjU4OS0uMDktMS4zOTUtLjcxNi0xLjI0OGE2IDYgMCAwIDAtNC41OTQgNS4zNiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4td2luZC5qcwp2YXIgQ2xvdWRSYWluV2luZDsKdmFyIGluaXRfY2xvdWRfcmFpbl93aW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLXdpbmQuanMiKCkgewogICAgQ2xvdWRSYWluV2luZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yIDIyIDMtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzLTMgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMy0zIDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1vZmYuanMKdmFyIENsb3VkT2ZmOwp2YXIgaW5pdF9jbG91ZF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW9mZi5qcyIoKSB7CiAgICBDbG91ZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01Ljc4MiA1Ljc4MkE3IDcgMCAwIDAgOSAxOWg4LjVhNC41IDQuNSAwIDAgMCAxLjMwNy0uMTkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjUzMiAxNi41QTQuNSA0LjUgMCAwIDAgMTcuNSAxMGgtMS43OUE3LjAwOCA3LjAwOCAwIDAgMCAxMCA1LjA3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtcmFpbi5qcwp2YXIgQ2xvdWRSYWluOwp2YXIgaW5pdF9jbG91ZF9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLmpzIigpIHsKICAgIENsb3VkUmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXNub3cuanMKdmFyIENsb3VkU25vdzsKdmFyIGluaXRfY2xvdWRfc25vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc25vdy5qcyIoKSB7CiAgICBDbG91ZFNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXN1bi1yYWluLmpzCnZhciBDbG91ZFN1blJhaW47CnZhciBpbml0X2Nsb3VkX3N1bl9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zdW4tcmFpbi5qcyIoKSB7CiAgICBDbG91ZFN1blJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjA3IDQuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1Ljk0NyAxMi42NWE0IDQgMCAwIDAtNS45MjUtNC4xMjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGE1IDUgMCAxIDEgOC45LTRIMTNhMyAzIDAgMCAxIDIgNS4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXN1bi5qcwp2YXIgQ2xvdWRTdW47CnZhciBpbml0X2Nsb3VkX3N1biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3VuLmpzIigpIHsKICAgIENsb3VkU3VuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3luYy5qcwp2YXIgQ2xvdWRTeW5jOwp2YXIgaW5pdF9jbG91ZF9zeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zeW5jLmpzIigpIHsKICAgIENsb3VkU3luYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNGgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC45OTYgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNDk1IDhoLTEuNzlhNyA3IDAgMSAwLTEyLjcwOSA1LjYwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXVwbG9hZC5qcwp2YXIgQ2xvdWRVcGxvYWQ7CnZhciBpbml0X2Nsb3VkX3VwbG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtdXBsb2FkLmpzIigpIHsKICAgIENsb3VkVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTcgNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLmpzCnZhciBDbG91ZDsKdmFyIGluaXRfY2xvdWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLmpzIigpIHsKICAgIENsb3VkID0gW1sicGF0aCIsIHsgZDogIk0xNy41IDE5SDlhNyA3IDAgMSAxIDYuNzEtOWgxLjc5YTQuNSA0LjUgMCAxIDEgMCA5WiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanMKdmFyIENsb3VkeTsKdmFyIGluaXRfY2xvdWR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanMiKCkgewogICAgQ2xvdWR5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAyMUg5YTcgNyAwIDEgMSA2LjcxLTloMS43OWE0LjUgNC41IDAgMSAxIDAgOVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBhMyAzIDAgMCAwLTMtM2gtMi4yMDdhNS41MDIgNS41MDIgMCAwIDAtMTAuNzAyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanMKdmFyIENsb3ZlcjsKdmFyIGluaXRfY2xvdmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanMiKCkgewogICAgQ2xvdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMTcgNy44MyAyIDIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMDIgMTJhMi44MjcgMi44MjcgMCAxIDEgMy44MS00LjE3QTIuODI3IDIuODI3IDAgMSAxIDEyIDQuMDJhMi44MjcgMi44MjcgMCAxIDEgNC4xNyAzLjgxQTIuODI3IDIuODI3IDAgMSAxIDE5Ljk4IDEyYTIuODI3IDIuODI3IDAgMSAxLTMuODEgNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiAxOS45OGEyLjgyNyAyLjgyNyAwIDEgMS00LjE3LTMuODFBMSAxIDAgMSAxIDQgMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy44MyA3LjgzIDguMzQgOC4zNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsdWIuanMKdmFyIENsdWI7CnZhciBpbml0X2NsdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsdWIuanMiKCkgewogICAgQ2x1YiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuMjggOS4wNWE1LjUgNS41IDAgMSAwLTEwLjU2IDBBNS41IDUuNSAwIDEgMCAxMiAxNy42NmE1LjUgNS41IDAgMSAwIDUuMjgtOC42WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNjZMMTIgMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlLXhtbC5qcwp2YXIgQ29kZVhtbDsKdmFyIGluaXRfY29kZV94bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGUteG1sLmpzIigpIHsKICAgIENvZGVYbWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNC01IDE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS5qcwp2YXIgQ29kZTsKdmFyIGluaXRfY29kZTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGUuanMiKCkgewogICAgQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE4IDYtNi02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2LTYgNiA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlcGVuLmpzCnZhciBDb2RlcGVuOwp2YXIgaW5pdF9jb2RlcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlcGVuLmpzIigpIHsKICAgIENvZGVwZW4gPSBbCiAgICAgIFsicG9seWdvbiIsIHsgcG9pbnRzOiAiMTIgMiAyMiA4LjUgMjIgMTUuNSAxMiAyMiAyIDE1LjUgMiA4LjUgMTIgMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxNS41IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgOC41IDEyIDE1LjUgMiA4LjUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyIDE1LjUgMTIgOC41IDIyIDE1LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICI4LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2Rlc2FuZGJveC5qcwp2YXIgQ29kZXNhbmRib3g7CnZhciBpbml0X2NvZGVzYW5kYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2Rlc2FuZGJveC5qcyIoKSB7CiAgICBDb2Rlc2FuZGJveCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjcuNSA0LjIxIDEyIDYuODEgMTYuNSA0LjIxIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiNy41IDE5Ljc5IDcuNSAxNC42IDMgMTIiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIuMDgiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzCnZhciBDb2ZmZWU7CnZhciBpbml0X2NvZmZlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzIigpIHsKICAgIENvZmZlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgOGExIDEgMCAwIDEgMSAxdjhhNCA0IDAgMCAxLTQgNEg3YTQgNCAwIDAgMS00LTRWOWExIDEgMCAwIDEgMS0xaDE0YTQgNCAwIDEgMSAwIDhoLTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2lucy5qcwp2YXIgQ29pbnM7CnZhciBpbml0X2NvaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2lucy5qcyIoKSB7CiAgICBDb2lucyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiOCIsIHI6ICI2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjA5IDEwLjM3QTYgNiAwIDEgMSAxMC4zNCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDZoMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjcxIDEzLjg4LjcuNzEtMi44MiAyLjgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29nLmpzCnZhciBDb2c7CnZhciBpbml0X2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29nLmpzIigpIHsKICAgIENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEwLjI3IDcgMy4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMy43My00IDYuOTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjAuNjYtMS0xLjczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMuMzQtMSAxLjczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC42NiAxNy0xLjczLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNjYgNy0xLjczIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zNCAxNyAxLjczLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zNCA3IDEuNzMgMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTIuanMKdmFyIENvbHVtbnMyOwp2YXIgaW5pdF9jb2x1bW5zXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtMi5qcyIoKSB7CiAgICBDb2x1bW5zMiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMtY29nLmpzCnZhciBDb2x1bW5zM0NvZzsKdmFyIGluaXRfY29sdW1uc18zX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLWNvZy5qcyIoKSB7CiAgICBDb2x1bW5zM0NvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zIDE5LjYgMS0uNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yIDE2LjktLjktLjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNiAyMS43LjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuOCAxNS4zLS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMSAxNS4yLjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNiAyMS43LS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyAxNi44IDEtLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNyAxOS40LS45LS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLmpzCnZhciBDb2x1bW5zMzsKdmFyIGluaXRfY29sdW1uc18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMuanMiKCkgewogICAgQ29sdW1uczMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtNC5qcwp2YXIgQ29sdW1uczQ7CnZhciBpbml0X2NvbHVtbnNfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy00LmpzIigpIHsKICAgIENvbHVtbnM0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21iaW5lLmpzCnZhciBDb21iaW5lOwp2YXIgaW5pdF9jb21iaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21iaW5lLmpzIigpIHsKICAgIENvbWJpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzYTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNSAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTNINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanMKdmFyIENvbW1hbmQ7CnZhciBpbml0X2NvbW1hbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanMiKCkgewogICAgQ29tbWFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZ2MTJhMyAzIDAgMSAwIDMtM0g2YTMgMyAwIDEgMCAzIDNWNmEzIDMgMCAxIDAtMyAzaDEyYTMgMyAwIDEgMC0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzCnZhciBDb21wYXNzOwp2YXIgaW5pdF9jb21wYXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzIigpIHsKICAgIENvbXBhc3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi4yNCA3Ljc2LTEuODA0IDUuNDExYTIgMiAwIDAgMS0xLjI2NSAxLjI2NUw3Ljc2IDE2LjI0bDEuODA0LTUuNDExYTIgMiAwIDAgMSAxLjI2NS0xLjI2NXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wb25lbnQuanMKdmFyIENvbXBvbmVudDsKdmFyIGluaXRfY29tcG9uZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wb25lbnQuanMiKCkgewogICAgQ29tcG9uZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuNTM2IDExLjI5M2ExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NiAyLjM3N2ExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3N2ExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMjk3IDExLjI5M2ExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3N2ExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3N2ExIDEgMCAwIDAgMC0xLjQxNEw2LjA4OCA4LjkxNmExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC45MTYgMTcuOTEyYTEgMSAwIDAgMCAwIDEuNDE1bDIuMzc3IDIuMzc2YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc2YTEgMSAwIDAgMCAwLTEuNDE1bC0yLjM3Ny0yLjM3NmExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC45MTYgNC42NzRhMSAxIDAgMCAwIDAgMS40MTRsMi4zNzcgMi4zNzZhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzZhMSAxIDAgMCAwIDAtMS40MTRsLTIuMzc3LTIuMzc3YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXB1dGVyLmpzCnZhciBDb21wdXRlcjsKdmFyIGluaXRfY29tcHV0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXB1dGVyLmpzIigpIHsKICAgIENvbXB1dGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI4IiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbmNpZXJnZS1iZWxsLmpzCnZhciBDb25jaWVyZ2VCZWxsOwp2YXIgaW5pdF9jb25jaWVyZ2VfYmVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uY2llcmdlLWJlbGwuanMiKCkgewogICAgQ29uY2llcmdlQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhMSAxIDAgMCAxLTEtMXYtMWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNmE4IDggMCAxIDAtMTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uZS5qcwp2YXIgQ29uZTsKdmFyIGluaXRfY29uZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uZS5qcyIoKSB7CiAgICBDb25lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuOSAxOC41NS04LTE1Ljk4YTEgMSAwIDAgMC0xLjggMGwtOCAxNS45OCIgfV0sCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByeDogIjkiLCByeTogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanMKdmFyIENvbnN0cnVjdGlvbjsKdmFyIGluaXRfY29uc3RydWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanMiKCkgewogICAgQ29uc3RydWN0aW9uID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQgMi4zIDYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDcuNyA3LjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDggOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhY3Qtcm91bmQuanMKdmFyIENvbnRhY3RSb3VuZDsKdmFyIGluaXRfY29udGFjdF9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC1yb3VuZC5qcyIoKSB7CiAgICBDb250YWN0Um91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250YWN0LmpzCnZhciBDb250YWN0Owp2YXIgaW5pdF9jb250YWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC5qcyIoKSB7CiAgICBDb250YWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJ2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMSIsIHI6ICIzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFpbmVyLmpzCnZhciBDb250YWluZXI7CnZhciBpbml0X2NvbnRhaW5lcjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhaW5lci5qcyIoKSB7CiAgICBDb250YWluZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA3LjdjMC0uNi0uNC0xLjItLjgtMS41bC02LjMtMy45YTEuNzIgMS43MiAwIDAgMC0xLjcgMGwtMTAuMyA2Yy0uNS4yLS45LjgtLjkgMS40djYuNmMwIC41LjQgMS4yLjggMS41bDYuMyAzLjlhMS43MiAxLjcyIDAgMCAwIDEuNyAwbDEwLjMtNmMuNS0uMy45LTEgLjktMS41WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMS45VjE0TDIuMSA5LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgMTEuOS02LjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTkuOHYtOC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVWOS40IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udHJhc3QuanMKdmFyIENvbnRyYXN0Owp2YXIgaW5pdF9jb250cmFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udHJhc3QuanMiKCkgewogICAgQ29udHJhc3QgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb29raWUuanMKdmFyIENvb2tpZTsKdmFyIGluaXRfY29va2llID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb29raWUuanMiKCkgewogICAgQ29va2llID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMCA0IDQgMCAwIDEtNS01IDQgNCAwIDAgMS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDguNXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTUuNXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0di4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvb2tpbmctcG90LmpzCnZhciBDb29raW5nUG90Owp2YXIgaW5pdF9jb29raW5nX3BvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2luZy1wb3QuanMiKCkgewogICAgQ29va2luZ1BvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJ2OGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDggMTYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04Ljg2IDYuNzgtLjQ1LTEuODFhMiAyIDAgMCAxIDEuNDUtMi40M2wxLjk0LS40OGEyIDIgMCAwIDEgMi40MyAxLjQ2bC40NSAxLjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LWNoZWNrLmpzCnZhciBDb3B5Q2hlY2s7CnZhciBpbml0X2NvcHlfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktY2hlY2suanMiKCkgewogICAgQ29weUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LW1pbnVzLmpzCnZhciBDb3B5TWludXM7CnZhciBpbml0X2NvcHlfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktbWludXMuanMiKCkgewogICAgQ29weU1pbnVzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS1wbHVzLmpzCnZhciBDb3B5UGx1czsKdmFyIGluaXRfY29weV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXBsdXMuanMiKCkgewogICAgQ29weVBsdXMgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXNsYXNoLmpzCnZhciBDb3B5U2xhc2g7CnZhciBpbml0X2NvcHlfc2xhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktc2xhc2guanMiKCkgewogICAgQ29weVNsYXNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxOCIsIHkyOiAiMTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS5qcwp2YXIgQ29weTsKdmFyIGluaXRfY29weSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS5qcyIoKSB7CiAgICBDb3B5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS14LmpzCnZhciBDb3B5WDsKdmFyIGluaXRfY29weV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXguanMiKCkgewogICAgQ29weVggPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5bGVmdC5qcwp2YXIgQ29weWxlZnQ7CnZhciBpbml0X2NvcHlsZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5bGVmdC5qcyIoKSB7CiAgICBDb3B5bGVmdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTcgMTQuODNhNCA0IDAgMSAwIDAtNS42NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHlyaWdodC5qcwp2YXIgQ29weXJpZ2h0Owp2YXIgaW5pdF9jb3B5cmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHlyaWdodC5qcyIoKSB7CiAgICBDb3B5cmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MyAxNC44M2E0IDQgMCAxIDEgMC01LjY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWRvd24tcmlnaHQuanMKdmFyIENvcm5lckRvd25SaWdodDsKdmFyIGluaXRfY29ybmVyX2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLXJpZ2h0LmpzIigpIHsKICAgIENvcm5lckRvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwIDUgNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djdhNCA0IDAgMCAwIDQgNGgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMKdmFyIENvcm5lckRvd25MZWZ0Owp2YXIgaW5pdF9jb3JuZXJfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1sZWZ0LmpzIigpIHsKICAgIENvcm5lckRvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwLTUgNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItbGVmdC1kb3duLmpzCnZhciBDb3JuZXJMZWZ0RG93bjsKdmFyIGluaXRfY29ybmVyX2xlZnRfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtZG93bi5qcyIoKSB7CiAgICBDb3JuZXJMZWZ0RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE1LTUgNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNGgtN2E0IDQgMCAwIDAtNCA0djEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtdXAuanMKdmFyIENvcm5lckxlZnRVcDsKdmFyIGluaXRfY29ybmVyX2xlZnRfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1sZWZ0LXVwLmpzIigpIHsKICAgIENvcm5lckxlZnRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDkgOSA0IDQgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItcmlnaHQtZG93bi5qcwp2YXIgQ29ybmVyUmlnaHREb3duOwp2YXIgaW5pdF9jb3JuZXJfcmlnaHRfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXJpZ2h0LWRvd24uanMiKCkgewogICAgQ29ybmVyUmlnaHREb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUgNSA1IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDRoN2E0IDQgMCAwIDEgNCA0djEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzCnZhciBDb3JuZXJSaWdodFVwOwp2YXIgaW5pdF9jb3JuZXJfcmlnaHRfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1yaWdodC11cC5qcyIoKSB7CiAgICBDb3JuZXJSaWdodFVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOSA1LTUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItdXAtbGVmdC5qcwp2YXIgQ29ybmVyVXBMZWZ0Owp2YXIgaW5pdF9jb3JuZXJfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiKCkgewogICAgQ29ybmVyVXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjB2LTdhNCA0IDAgMCAwLTQtNEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTQgNCA5bDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci11cC1yaWdodC5qcwp2YXIgQ29ybmVyVXBSaWdodDsKdmFyIGluaXRfY29ybmVyX3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiKCkgewogICAgQ29ybmVyVXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE0IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMHYtN2E0IDQgMCAwIDEgNC00aDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzCnZhciBDcHU7CnZhciBpbml0X2NwdSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzIigpIHsKICAgIENwdSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAydjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjQiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JlYXRpdmUtY29tbW9ucy5qcwp2YXIgQ3JlYXRpdmVDb21tb25zOwp2YXIgaW5pdF9jcmVhdGl2ZV9jb21tb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcmVhdGl2ZS1jb21tb25zLmpzIigpIHsKICAgIENyZWF0aXZlQ29tbW9ucyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuM2EyLjggMi44IDAgMCAwLTMuNSAxIDMuMSAzLjEgMCAwIDAgMCAzLjQgMi43IDIuNyAwIDAgMCAzLjUgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcmVkaXQtY2FyZC5qcwp2YXIgQ3JlZGl0Q2FyZDsKdmFyIGluaXRfY3JlZGl0X2NhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NyZWRpdC1jYXJkLmpzIigpIHsKICAgIENyZWRpdENhcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzCnZhciBDcm9pc3NhbnQ7CnZhciBpbml0X2Nyb2lzc2FudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzIigpIHsKICAgIENyb2lzc2FudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjIgMThINC43NzRhMS41IDEuNSAwIDAgMS0xLjM1Mi0uOTcgMTEgMTEgMCAwIDEgLjEzMi02LjQ4NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMC4yVjQuNzc0YTEuNSAxLjUgMCAwIDAtLjk3LTEuMzUyIDExIDExIDAgMCAwLTYuNDg2LjEzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA1YTQgMyAwIDAgMSA0IDMgMiAyIDAgMCAxLTIgMiAxMCAxMCAwIDAgMC01LjEzOSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMThhMyA0IDAgMCAwIDMgNCAyIDIgMCAwIDAgMi0yIDEwIDEwIDAgMCAxIDEuNDItNS4xNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjcwOSAyLjU1NGExMCAxMCAwIDAgMC02LjE1NSA2LjE1NSAxLjUgMS41IDAgMCAwIC42NzYgMS42MjZsOS44MDcgNS40MmEyIDIgMCAwIDAgMi43MTgtMi43MThsLTUuNDItOS44MDdhMS41IDEuNSAwIDAgMC0xLjYyNi0uNjc2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qcwp2YXIgQ3JvcDsKdmFyIGluaXRfY3JvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qcyIoKSB7CiAgICBDcm9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAydjE0YTIgMiAwIDAgMCAyIDJoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWOGEyIDIgMCAwIDAtMi0ySDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcm9zcy5qcwp2YXIgQ3Jvc3M7CnZhciBpbml0X2Nyb3NzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcm9zcy5qcyIoKSB7CiAgICBDcm9zcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgOWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmg0YTEgMSAwIDAgMSAxIDF2NGEyIDIgMCAwIDAgMiAyaDJhMiAyIDAgMCAwIDItMnYtNGExIDEgMCAwIDEgMS0xaDRhMiAyIDAgMCAwIDItMnYtMmEyIDIgMCAwIDAtMi0yaC00YTEgMSAwIDAgMS0xLTFWNGEyIDIgMCAwIDAtMi0yaC0yYTIgMiAwIDAgMC0yIDJ2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzaGFpci5qcwp2YXIgQ3Jvc3NoYWlyOwp2YXIgaW5pdF9jcm9zc2hhaXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzaGFpci5qcyIoKSB7CiAgICBDcm9zc2hhaXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI2IiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanMKdmFyIENyb3duOwp2YXIgaW5pdF9jcm93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanMiKCkgewogICAgQ3Jvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS41NjIgMy4yNjZhLjUuNSAwIDAgMSAuODc2IDBMMTUuMzkgOC44N2ExIDEgMCAwIDAgMS41MTYuMjk0TDIxLjE4MyA1LjVhLjUuNSAwIDAgMSAuNzk4LjUxOWwtMi44MzQgMTAuMjQ2YTEgMSAwIDAgMS0uOTU2LjczNEg1LjgxYTEgMSAwIDAgMS0uOTU3LS43MzRMMi4wMiA2LjAyYS41LjUgMCAwIDEgLjc5OC0uNTE5bDQuMjc2IDMuNjY0YTEgMSAwIDAgMCAxLjUxNi0uMjk0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Vib2lkLmpzCnZhciBDdWJvaWQ7CnZhciBpbml0X2N1Ym9pZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Vib2lkLmpzIigpIHsKICAgIEN1Ym9pZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjEyIDYuNC02LjA1LTQuMDZhMiAyIDAgMCAwLTIuMTctLjA1TDIuOTUgOC40MWEyIDIgMCAwIDAtLjk1IDEuN3Y1LjgyYTIgMiAwIDAgMCAuODggMS42Nmw2LjA1IDQuMDdhMiAyIDAgMCAwIDIuMTcuMDVsOS45NS02LjEyYTIgMiAwIDAgMCAuOTUtMS43VjguMDZhMiAyIDAgMCAwLS44OC0xLjY2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtOEwyLjI1IDkuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgMTEuNzctNi44NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N1cC1zb2RhLmpzCnZhciBDdXBTb2RhOwp2YXIgaW5pdF9jdXBfc29kYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3VwLXNvZGEuanMiKCkgewogICAgQ3VwU29kYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOCAxLjc1IDEyLjI4YTIgMiAwIDAgMCAyIDEuNzJoNC41NGEyIDIgMCAwIDAgMi0xLjcyTDE4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3IDYuNDcgMCAwIDAgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDggMS02aDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdXJyZW5jeS5qcwp2YXIgQ3VycmVuY3k7CnZhciBpbml0X2N1cnJlbmN5MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3VycmVuY3kuanMiKCkgewogICAgQ3VycmVuY3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE4IiwgeTE6ICIzIiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTgiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N5bGluZGVyLmpzCnZhciBDeWxpbmRlcjsKdmFyIGluaXRfY3lsaW5kZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N5bGluZGVyLmpzIigpIHsKICAgIEN5bGluZGVyID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0YTkgMyAwIDAgMCAxOCAwVjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanMKdmFyIERhbTsKdmFyIGluaXRfZGFtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanMiKCkgewogICAgRGFtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTEuMzFjMS4xNy41NiAxLjU0IDEuNjkgMy41IDEuNjkgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjc1IDE4Yy4zNS41IDEuNDUgMSAyLjc1IDEgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM2ExIDEgMCAwIDAtMSAxdjE2YTEgMSAwIDAgMCAxIDFoNGExIDEgMCAwIDAgMS0xTDEwIDRhMSAxIDAgMCAwLTEtMXoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS1iYWNrdXAuanMKdmFyIERhdGFiYXNlQmFja3VwOwp2YXIgaW5pdF9kYXRhYmFzZV9iYWNrdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RhdGFiYXNlLWJhY2t1cC5qcyIoKSB7CiAgICBEYXRhYmFzZUJhY2t1cCA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSAzIDAgMCAwIDUgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5LjNWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTRhOSAzIDAgMCAwIDYuNDcgMi44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjBhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMiAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RhdGFiYXNlLXphcC5qcwp2YXIgRGF0YWJhc2VaYXA7CnZhciBpbml0X2RhdGFiYXNlX3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UtemFwLmpzIigpIHsKICAgIERhdGFiYXNlWmFwID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1VjE5QTkgMyAwIDAgMCAxNSAyMS44NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJMMTggMTdIMjJMMTkgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMkE5IDMgMCAwIDAgMTQuNTkgMTQuODciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS5qcwp2YXIgRGF0YWJhc2U7CnZhciBpbml0X2RhdGFiYXNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UuanMiKCkgewogICAgRGF0YWJhc2UgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVWMTlBOSAzIDAgMCAwIDIxIDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMkE5IDMgMCAwIDAgMjEgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1sZWZ0LmpzCnZhciBEZWNpbWFsc0Fycm93TGVmdDsKdmFyIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVjaW1hbHMtYXJyb3ctbGVmdC5qcyIoKSB7CiAgICBEZWNpbWFsc0Fycm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDIxLTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThIMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMWguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1yaWdodC5qcwp2YXIgRGVjaW1hbHNBcnJvd1JpZ2h0Owp2YXIgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVjaW1hbHMtYXJyb3ctcmlnaHQuanMiKCkgewogICAgRGVjaW1hbHNBcnJvd1JpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMThoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjEgMy0zLTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWxldGUuanMKdmFyIERlbGV0ZTsKdmFyIGluaXRfZGVsZXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVsZXRlLmpzIigpIHsKICAgIERlbGV0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDVhMiAyIDAgMCAwLTEuMzQ0LjUxOWwtNi4zMjggNS43NGExIDEgMCAwIDAgMCAxLjQ4MWw2LjMyOCA1Ljc0MUEyIDIgMCAwIDAgMTAgMTloMTBhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDkgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDktNiA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVzc2VydC5qcwp2YXIgRGVzc2VydDsKdmFyIGluaXRfZGVzc2VydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVzc2VydC5qcyIoKSB7CiAgICBEZXNzZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMTYyIDMuMTY3QTEwIDEwIDAgMCAwIDIgMTNhMiAyIDAgMCAwIDQgMHYtMWEyIDIgMCAwIDEgNCAwdjRhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAwIDQtLjAwNiAxMCAxMCAwIDAgMC04LjE2MS05LjgyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MDQgMTQuODY5YTkgOSAwIDAgMS0xNy42MDggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qcwp2YXIgRGlhbWV0ZXI7CnZhciBpbml0X2RpYW1ldGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qcyIoKSB7CiAgICBEaWFtZXRlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40OCAzLjY2YTEwIDEwIDAgMCAxIDEzLjg2IDEzLjg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNDEgNi40MSAxMS4xOCAxMS4xOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjY2IDYuNDhhMTAgMTAgMCAwIDAgMTMuODYgMTMuODYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLW1pbnVzLmpzCnZhciBEaWFtb25kTWludXM7CnZhciBpbml0X2RpYW1vbmRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtbWludXMuanMiKCkgewogICAgRGlhbW9uZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wZXJjZW50LmpzCnZhciBEaWFtb25kUGVyY2VudDsKdmFyIGluaXRfZGlhbW9uZF9wZXJjZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBlcmNlbnQuanMiKCkgewogICAgRGlhbW9uZFBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjIgOS4yaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNyAxNC44aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtcGx1cy5qcwp2YXIgRGlhbW9uZFBsdXM7CnZhciBpbml0X2RpYW1vbmRfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wbHVzLmpzIigpIHsKICAgIERpYW1vbmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMS5qcwp2YXIgRGljZTE7CnZhciBpbml0X2RpY2VfMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0xLmpzIigpIHsKICAgIERpY2UxID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC5qcwp2YXIgRGlhbW9uZDsKdmFyIGluaXRfZGlhbW9uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC5qcyIoKSB7CiAgICBEaWFtb25kID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MWwtNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMC0zLjQxIDBaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0yLmpzCnZhciBEaWNlMjsKdmFyIGluaXRfZGljZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTIuanMiKCkgewogICAgRGljZTIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMy5qcwp2YXIgRGljZTM7CnZhciBpbml0X2RpY2VfMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0zLmpzIigpIHsKICAgIERpY2UzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS01LmpzCnZhciBEaWNlNTsKdmFyIGluaXRfZGljZV81ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTUuanMiKCkgewogICAgRGljZTUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTYuanMKdmFyIERpY2U2Owp2YXIgaW5pdF9kaWNlXzYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNi5qcyIoKSB7CiAgICBEaWNlNiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNC5qcwp2YXIgRGljZTQ7CnZhciBpbml0X2RpY2VfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS00LmpzIigpIHsKICAgIERpY2U0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlcy5qcwp2YXIgRGljZXM7CnZhciBpbml0X2RpY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlcy5qcyIoKSB7CiAgICBEaWNlcyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICIxMCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy45MiAxNCAzLjUtMy41YTIuMjQgMi4yNCAwIDAgMCAwLTNsLTUtNC45MmEyLjI0IDIuMjQgMCAwIDAtMyAwTDEwIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDloLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlmZi5qcwp2YXIgRGlmZjsKdmFyIGluaXRfZGlmZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlmZi5qcyIoKSB7CiAgICBEaWZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEwaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXNjLTIuanMKdmFyIERpc2MyOwp2YXIgaW5pdF9kaXNjXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtMi5qcyIoKSB7CiAgICBEaXNjMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0zLmpzCnZhciBEaXNjMzsKdmFyIGluaXRfZGlzY18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXNjLTMuanMiKCkgewogICAgRGlzYzMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYzAtMS43LjctMy4yIDEuOC00LjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtYWxidW0uanMKdmFyIERpc2NBbGJ1bTsKdmFyIGluaXRfZGlzY19hbGJ1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy1hbGJ1bS5qcyIoKSB7CiAgICBEaXNjQWxidW0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanMKdmFyIERpc2M7CnZhciBpbml0X2Rpc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanMiKCkgewogICAgRGlzYyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanMKdmFyIERpdmlkZTsKdmFyIGluaXRfZGl2aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanMiKCkgewogICAgRGl2aWRlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTgiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS1vZmYuanMKdmFyIERuYU9mZjsKdmFyIGluaXRfZG5hX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG5hLW9mZi5qcyIoKSB7CiAgICBEbmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA2LTIuODkxLTIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDkgLjg5MS44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4xMDkgMTQuMTA5IDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi41IDEyLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi44OTEgMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2NrLmpzCnZhciBEb2NrOwp2YXIgaW5pdF9kb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2NrLmpzIigpIHsKICAgIERvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qcwp2YXIgRG5hOwp2YXIgaW5pdF9kbmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qcyIoKSB7CiAgICBEbmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNiAxLjUgMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDgtMS41LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjc5OCAxLjk5OC0yLjUxOCAzLjk5NS0yLjgwNyA1Ljk5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi41IDEwLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDYtMi44OTEtMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNWM2LjY2Ny02IDEzLjMzMyAwIDIwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgOSAuODkxLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwOSAxNC4xMDkgNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjUgMTIuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCAyLjg5MSAyLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyYzEuNzk4LTEuOTk4IDIuNTE4LTMuOTk1IDIuODA3LTUuOTkzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9nLmpzCnZhciBEb2c7CnZhciBpbml0X2RvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9nLmpzIigpIHsKICAgIERvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjI1IDE2LjI1aDEuNUwxMiAxN3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC40MiAxMS4yNDdBMTMuMTUyIDEzLjE1MiAwIDAgMCA0IDE0LjU1NkM0IDE4LjcyOCA3LjU4MiAyMSAxMiAyMXM4LTIuMjcyIDgtNi40NDRhMTEuNzAyIDExLjcwMiAwIDAgMC0uNDkzLTMuMzA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC41IDguNWMtLjM4NCAxLjA1LTEuMDgzIDIuMDI4LTIuMzQ0IDIuNS0xLjkzMS43MjItMy41NzYtLjI5Ny0zLjY1Ni0xLS4xMTMtLjk5NCAxLjE3Ny02LjUzIDQtNyAxLjkyMy0uMzIxIDMuNjUxLjg0NSAzLjY1MSAyLjIzNUE3LjQ5NyA3LjQ5NyAwIDAgMSAxNCA1LjI3N2MwLTEuMzkgMS44NDQtMi41OTggMy43NjctMi4yNzcgMi44MjMuNDcgNC4xMTMgNi4wMDYgNCA3LS4wOC43MDMtMS43MjUgMS43MjItMy42NTYgMS0xLjI2MS0uNDcyLTEuODU1LTEuNDUtMi4yMzktMi41IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9sbGFyLXNpZ24uanMKdmFyIERvbGxhclNpZ247CnZhciBpbml0X2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2xsYXItc2lnbi5qcyIoKSB7CiAgICBEb2xsYXJTaWduID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb251dC5qcwp2YXIgRG9udXQ7CnZhciBpbml0X2RvbnV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb251dC5qcyIoKSB7CiAgICBEb251dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjUgMTBhMi41IDIuNSAwIDAgMS0yLjQtM0gxOGEyLjk1IDIuOTUgMCAwIDEtMi42LTQuNCAxMCAxMCAwIDEgMCA2LjMgNy4xYy0uMy4yLS44LjMtMS4yLjMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3ItY2xvc2VkLWxvY2tlZC5qcwp2YXIgRG9vckNsb3NlZExvY2tlZDsKdmFyIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC1sb2NrZWQuanMiKCkgewogICAgRG9vckNsb3NlZExvY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5VjZhMiAyIDAgMCAwLTItMkg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE3di0yYTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE3Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3ItY2xvc2VkLmpzCnZhciBEb29yQ2xvc2VkOwp2YXIgaW5pdF9kb29yX2Nsb3NlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9vci1jbG9zZWQuanMiKCkgewogICAgRG9vckNsb3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3QuanMKdmFyIERvdDsKdmFyIGluaXRfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3QuanMiKCkgewogICAgRG90ID0gW1siY2lyY2xlIiwgeyBjeDogIjEyLjEiLCBjeTogIjEyLjEiLCByOiAiMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLW9wZW4uanMKdmFyIERvb3JPcGVuOwp2YXIgaW5pdF9kb29yX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3Itb3Blbi5qcyIoKSB7CiAgICBEb29yT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwSDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNEg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwaC0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG93bmxvYWQuanMKdmFyIERvd25sb2FkOwp2YXIgaW5pdF9kb3dubG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG93bmxvYWQuanMiKCkgewogICAgRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMCA1IDUgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJhZnRpbmctY29tcGFzcy5qcwp2YXIgRHJhZnRpbmdDb21wYXNzOwp2YXIgaW5pdF9kcmFmdGluZ19jb21wYXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmFmdGluZy1jb21wYXNzLmpzIigpIHsKICAgIERyYWZ0aW5nQ29tcGFzcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjk5IDYuNzQgMS45MyAzLjQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEzNiAxMmExMCAxMCAwIDAgMS0xNC4yNzEgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS0yLjE2LTMuODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA4LjAyLTE0LjI2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzCnZhciBEcmFtYTsKdmFyIGluaXRfZHJhbWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzIigpIHsKICAgIERyYW1hID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAxMy4xaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA1YzAgOS00IDEyLTYgMTJzLTYtMy02LTEyYzAtMiAyLTMgNi0zczYgMSA2IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNCA5LjljLS44LjgtMiAuOC0yLjggMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDcuMUM5IDcuMiA3LjcgNy43IDYgOC42Yy0zLjUgMi00LjcgMy45LTMuNyA1LjYgNC41IDcuOCA5LjUgOC40IDExLjIgNy40LjktLjUgMS45LTIuMSAxLjktNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSAxNi41Yy4zLTEuMSAxLjQtMS43IDIuNC0xLjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmliYmJsZS5qcwp2YXIgRHJpYmJibGU7CnZhciBpbml0X2RyaWJiYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmliYmJsZS5qcyIoKSB7CiAgICBEcmliYmJsZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEzIDUuMDlDMTUuMjIgOS4xNCAxMCAxMC40NCAyLjI1IDEwLjk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjc1IDEyLjg0Yy02LjYyLTEuNDEtMTIuMTQgMS0xNi4zOCA2LjMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNTYgMi43NWM0LjM3IDYgNiA5LjQyIDggMTcuNzIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qcwp2YXIgRHJpbGw7CnZhciBpbml0X2RyaWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qcyIoKSB7CiAgICBEcmlsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4YTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDVhMyAzIDAgMCAxLTMtMyAxIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyAxMEg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDlhMSAxIDAgMCAxIDEgMXY2YTEgMSAwIDAgMS0xIDFsLS44MSAzLjI0MmExIDEgMCAwIDEtLjk3Ljc1OEg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRoM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0yIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCAyLTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9uZS5qcwp2YXIgRHJvbmU7CnZhciBpbml0X2Ryb25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9uZS5qcyIoKSB7CiAgICBEcm9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNC0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjYzNyAxNGE0IDQgMCAxIDEtNS40MzIgNS44NjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMCIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXQtb2ZmLmpzCnZhciBEcm9wbGV0T2ZmOwp2YXIgaW5pdF9kcm9wbGV0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC1vZmYuanMiKCkgewogICAgRHJvcGxldE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC5qcwp2YXIgRHJvcGxldDsKdmFyIGluaXRfZHJvcGxldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC5qcyIoKSB7CiAgICBEcm9wbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhNyA3IDAgMCAwIDctN2MwLTItMS0zLjktMy01LjVzLTMuNS00LTQtNi41Yy0uNSAyLjUtMiA0LjktNCA2LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgNyA3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXRzLmpzCnZhciBEcm9wbGV0czsKdmFyIGluaXRfZHJvcGxldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXRzLmpzIigpIHsKICAgIERyb3BsZXRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxNi4zYzIuMiAwIDQtMS44MyA0LTQuMDUgMC0xLjE2LS41Ny0yLjI2LTEuNzEtMy4xOVM3LjI5IDYuNzUgNyA1LjNjLS4yOSAxLjQ1LTEuMTQgMi44NC0yLjI5IDMuNzZTMyAxMS4xIDMgMTIuMjVjMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNTYgNi42QTEwLjk3IDEwLjk3IDAgMCAwIDE0IDMuMDJjLjUgMi41IDIgNC45IDQgNi41czMgMy41IDMgNS41YTYuOTggNi45OCAwIDAgMS0xMS45MSA0Ljk3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bS5qcwp2YXIgRHJ1bTsKdmFyIGluaXRfZHJ1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bS5qcyIoKSB7CiAgICBEcnVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyLTggOCIgfV0sCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHJ4OiAiMTAiLCByeTogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMy40djcuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzLjR2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOXY4YTEwIDUgMCAwIDAgMjAgMFY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzCnZhciBEcnVtc3RpY2s7CnZhciBpbml0X2RydW1zdGljayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzIigpIHsKICAgIERydW1zdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjI5IDEyLjcxLTIuNiAyLjZhMi41IDIuNSAwIDEgMC0xLjY1IDQuNjVBMi41IDIuNSAwIDEgMCA4LjcgMTguM2wyLjU5LTIuNTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kdW1iYmVsbC5qcwp2YXIgRHVtYmJlbGw7CnZhciBpbml0X2R1bWJiZWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kdW1iYmVsbC5qcyIoKSB7CiAgICBEdW1iYmVsbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjU5NiAxMi43NjhhMiAyIDAgMSAwIDIuODI5LTIuODI5bC0xLjc2OC0xLjc2N2EyIDIgMCAwIDAgMi44MjgtMi44MjlsLTIuODI4LTIuODI4YTIgMiAwIDAgMC0yLjgyOSAyLjgyOGwtMS43NjctMS43NjhhMiAyIDAgMSAwLTIuODI5IDIuODI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjUgMjEuNSAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjEgMy45IDEuNC0xLjQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4zNDMgMjEuNDg1YTIgMiAwIDEgMCAyLjgyOS0yLjgyOGwxLjc2NyAxLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTYuMzY0LTYuMzY0YTIgMiAwIDEgMC0yLjgyOSAyLjgyOWwxLjc2OCAxLjc2N2EyIDIgMCAwIDAtMi44MjggMi44Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNiAxNC40IDQuOC00LjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXItb2ZmLmpzCnZhciBFYXJPZmY7CnZhciBpbml0X2Vhcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Vhci1vZmYuanMiKCkgewogICAgRWFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC44IDMuMTVBNi41IDYuNSAwIDAgMSAxOSA4LjVjMCAxLjYzLS40NCAyLjgxLTEuMDkgMy43NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXIuanMKdmFyIEVhcjsKdmFyIGluaXRfZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXIuanMiKCkgewogICAgRWFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4LjVhNi41IDYuNSAwIDEgMSAxMyAwYzAgNi02IDYtNiAxMGEzLjUgMy41IDAgMSAxLTcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4LjVhMi41IDIuNSAwIDAgMC01IDB2MWEyIDIgMCAxIDEgMCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFydGgtbG9jay5qcwp2YXIgRWFydGhMb2NrOwp2YXIgaW5pdF9lYXJ0aF9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXJ0aC1sb2NrLmpzIigpIHsKICAgIEVhcnRoTG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zNFY1YTMgMyAwIDAgMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDEgMCA5LjU0IDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzCnZhciBFYXJ0aDsKdmFyIGluaXRfZWFydGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzIigpIHsKICAgIEVhcnRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNTQgMTVIMTdhMiAyIDAgMCAwLTIgMnY0LjU0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjM0VjVhMyAzIDAgMCAwIDMgM2EyIDIgMCAwIDEgMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMmMwLTEuMS45LTIgMi0yaDMuMTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIxLjk1VjE4YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAxLTItMnYtMWEyIDIgMCAwIDAtMi0ySDIuMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lY2xpcHNlLmpzCnZhciBFY2xpcHNlOwp2YXIgaW5pdF9lY2xpcHNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lY2xpcHNlLmpzIigpIHsKICAgIEVjbGlwc2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTcgNyAwIDEgMCAxMCAxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1mcmllZC5qcwp2YXIgRWdnRnJpZWQ7CnZhciBpbml0X2VnZ19mcmllZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWdnLWZyaWVkLmpzIigpIHsKICAgIEVnZ0ZyaWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2ctb2ZmLmpzCnZhciBFZ2dPZmY7CnZhciBpbml0X2VnZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1vZmYuanMiKCkgewogICAgRWdnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjM0N1YxNGMwLTYtNC0xMi04LTEyLTEuMDc4IDAtMi4xNTcuNDM2LTMuMTU3IDEuMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yMDYgNi4yMUM0Ljg3MSA4LjQgNCAxMS4yIDQgMTRhOCA4IDAgMCAwIDE0LjU2OCA0LjU2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy5qcwp2YXIgRWdnOwp2YXIgaW5pdF9lZ2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy5qcyIoKSB7CiAgICBFZ2cgPSBbWyJwYXRoIiwgeyBkOiAiTTEyIDJDOCAyIDQgOCA0IDE0YTggOCAwIDAgMCAxNiAwYzAtNi00LTEyLTgtMTIiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWxsaXBzaXMtdmVydGljYWwuanMKdmFyIEVsbGlwc2lzVmVydGljYWw7CnZhciBpbml0X2VsbGlwc2lzX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC5qcyIoKSB7CiAgICBFbGxpcHNpc1ZlcnRpY2FsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzCnZhciBFbGxpcHNpczsKdmFyIGluaXRfZWxsaXBzaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzIigpIHsKICAgIEVsbGlwc2lzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLWFwcHJveGltYXRlbHkuanMKdmFyIEVxdWFsQXBwcm94aW1hdGVseTsKdmFyIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtYXBwcm94aW1hdGVseS5qcyIoKSB7CiAgICBFcXVhbEFwcHJveGltYXRlbHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE1YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOWE2LjUgNi41IDAgMCAxIDcgMCA2LjUgNi41IDAgMCAwIDcgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLW5vdC5qcwp2YXIgRXF1YWxOb3Q7CnZhciBpbml0X2VxdWFsX25vdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtbm90LmpzIigpIHsKICAgIEVxdWFsTm90ID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiNSIsIHkxOiAiNSIsIHkyOiAiMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcmFzZXIuanMKdmFyIEVyYXNlcjsKdmFyIGluaXRfZXJhc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcmFzZXIuanMiKCkgewogICAgRXJhc2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMjFIOGEyIDIgMCAwIDEtMS40Mi0uNTg3bC0zLjk5NC0zLjk5OWEyIDIgMCAwIDEgMC0yLjgyOGwxMC0xMGEyIDIgMCAwIDEgMi44MjkgMGw1Ljk5OSA2YTIgMiAwIDAgMSAwIDIuODI4TDEyLjgzNCAyMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjA4MiAxMS4wOSA4LjgyOCA4LjgyOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzCnZhciBFcXVhbDsKdmFyIGluaXRfZXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzIigpIHsKICAgIEVxdWFsID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V0aGVybmV0LXBvcnQuanMKdmFyIEV0aGVybmV0UG9ydDsKdmFyIGluaXRfZXRoZXJuZXRfcG9ydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXRoZXJuZXQtcG9ydC5qcyIoKSB7CiAgICBFdGhlcm5ldFBvcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTE1IDIwIDMtM2gyYTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY5YTIgMiAwIDAgMCAyIDJoMmwzIDN6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanMKdmFyIEV1cm87CnZhciBpbml0X2V1cm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanMiKCkgewogICAgRXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTkgNmE3LjcgNy43IDAgMCAwLTUuMi0yQTcuOSA3LjkgMCAwIDAgNiAxMmMwIDQuNCAzLjUgOCA3LjggOCAyIDAgMy44LS44IDUuMi0yIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V2LWNoYXJnZXIuanMKdmFyIEV2Q2hhcmdlcjsKdmFyIGluaXRfZXZfY2hhcmdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXYtY2hhcmdlci5qcyIoKSB7CiAgICBFdkNoYXJnZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3aDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtMiAzaDNsLTIgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V4dGVybmFsLWxpbmsuanMKdmFyIEV4dGVybmFsTGluazsKdmFyIGluaXRfZXh0ZXJuYWxfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXh0ZXJuYWwtbGluay5qcyIoKSB7CiAgICBFeHRlcm5hbExpbmsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNCAyMSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leHBhbmQuanMKdmFyIEV4cGFuZDsKdmFyIGluaXRfZXhwYW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXhwYW5kLmpzIigpIHsKICAgIEV4cGFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWM2gtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2djVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDhWM2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOSAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtY2xvc2VkLmpzCnZhciBFeWVDbG9zZWQ7CnZhciBpbml0X2V5ZV9jbG9zZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1jbG9zZWQuanMiKCkgewogICAgRXllQ2xvc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTgtLjcyMi0zLjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGExMC42NDUgMTAuNjQ1IDAgMCAwIDIwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTUtMS43MjYtMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE1IDEuNzI2LTIuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxOCAuNzIyLTMuMjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtb2ZmLmpzCnZhciBFeWVPZmY7CnZhciBpbml0X2V5ZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1vZmYuanMiKCkgewogICAgRXllT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjA4NCAxNC4xNThhMyAzIDAgMCAxLTQuMjQyLTQuMjQyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjQ3OSAxNy40OTlhMTAuNzUgMTAuNzUgMCAwIDEtMTUuNDE3LTUuMTUxIDEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgNC40NDYtNS4xNDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzCnZhciBFeWU7CnZhciBpbml0X2V5ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzIigpIHsKICAgIEV5ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMDYyIDEyLjM0OGExIDEgMCAwIDEgMC0uNjk2IDEwLjc1IDEwLjc1IDAgMCAxIDE5Ljg3NiAwIDEgMSAwIDAgMSAwIC42OTYgMTAuNzUgMTAuNzUgMCAwIDEtMTkuODc2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY3RvcnkuanMKdmFyIEZhY3Rvcnk7CnZhciBpbml0X2ZhY3RvcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY3RvcnkuanMiKCkgewogICAgRmFjdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYWNlYm9vay5qcwp2YXIgRmFjZWJvb2s7CnZhciBpbml0X2ZhY2Vib29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYWNlYm9vay5qcyIoKSB7CiAgICBGYWNlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoLTNhNSA1IDAgMCAwLTUgNXYzSDd2NGgzdjhoNHYtOGgzbDEtNGgtNFY3YTEgMSAwIDAgMSAxLTFoM3oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYW4uanMKdmFyIEZhbjsKdmFyIGluaXRfZmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYW4uanMiKCkgewogICAgRmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuODI3IDE2LjM3OWE2LjA4MiA2LjA4MiAwIDAgMS04LjYxOC03LjAwMmw1LjQxMiAxLjQ1YTYuMDgyIDYuMDgyIDAgMCAxIDcuMDAyLTguNjE4bC0xLjQ1IDUuNDEyYTYuMDgyIDYuMDgyIDAgMCAxIDguNjE4IDcuMDAybC01LjQxMi0xLjQ1YTYuMDgyIDYuMDgyIDAgMCAxLTcuMDAyIDguNjE4bDEuNDUtNS40MTJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zhc3QtZm9yd2FyZC5qcwp2YXIgRmFzdEZvcndhcmQ7CnZhciBpbml0X2Zhc3RfZm9yd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFzdC1mb3J3YXJkLmpzIigpIHsKICAgIEZhc3RGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlYXRoZXIuanMKdmFyIEZlYXRoZXI7CnZhciBpbml0X2ZlYXRoZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlYXRoZXIuanMiKCkgewogICAgRmVhdGhlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDggMiAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDE1SDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZW5jZS5qcwp2YXIgRmVuY2U7CnZhciBpbml0X2ZlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZW5jZS5qcyIoKSB7CiAgICBGZW5jZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMyAyIDV2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMy0yIDJ2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMThoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAzLTIgMnYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVycmlzLXdoZWVsLmpzCnZhciBGZXJyaXNXaGVlbDsKdmFyIGluaXRfZmVycmlzX3doZWVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZXJyaXMtd2hlZWwuanMiKCkgewogICAgRmVycmlzV2hlZWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjggMTUtMy41IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyA3LTMuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOCA5IDMuMyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjcgMTctMy41LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTggMyA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOC43YTkgOSAwIDEgMC0xMiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanMKdmFyIEZpZ21hOwp2YXIgaW5pdF9maWdtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanMiKCkgewogICAgRmlnbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYXJjaGl2ZS5qcwp2YXIgRmlsZUFyY2hpdmU7CnZhciBpbml0X2ZpbGVfYXJjaGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1hcmNoaXZlLmpzIigpIHsKICAgIEZpbGVBcmNoaXZlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTEuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdWNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWF4aXMtM2QuanMKdmFyIEZpbGVBeGlzM2Q7CnZhciBpbml0X2ZpbGVfYXhpc18zZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1heGlzLTNkLmpzIigpIHsKICAgIEZpbGVBeGlzM2QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY4aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJhZGdlLmpzCnZhciBGaWxlQmFkZ2U7CnZhciBpbml0X2ZpbGVfYmFkZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYmFkZ2UuanMiKCkgewogICAgRmlsZUJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuNjkgMTYuNDc5IDEuMjkgNC44OGEuNS41IDAgMCAxLS42OTguNTkxbC0xLjg0My0uODQ5YTEgMSAwIDAgMC0uODc5LjAwMWwtMS44NDYuODVhLjUuNSAwIDAgMS0uNjkyLS41OTNsMS4yOS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTQiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYnJhY2VzLWNvcm5lci5qcwp2YXIgRmlsZUJyYWNlc0Nvcm5lcjsKdmFyIGluaXRfZmlsZV9icmFjZXNfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy1jb3JuZXIuanMiKCkgewogICAgRmlsZUJyYWNlc0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDIyaDRhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNGExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAxLTEgMSAxIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAwIDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJveC5qcwp2YXIgRmlsZUJveDsKdmFyIGluaXRfZmlsZV9ib3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYm94LmpzIigpIHsKICAgIEZpbGVCb3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC41IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My44IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNyAxNC4yIDcgMTdsLTQuNy0yLjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMy4xYTIgMiAwIDAgMC0uOTk5IDEuNzZ2My4yNGEyIDIgMCAwIDAgLjk2OSAxLjc4TDYgMjEuN2EyIDIgMCAwIDAgMi4wMy4wMUwxMSAxOS45YTIgMiAwIDAgMCAxLTEuNzZWMTQuOWEyIDIgMCAwIDAtLjk3LTEuNzhMOCAxMS4zYTIgMiAwIDAgMC0yLjAzLS4wMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN3Y1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1icmFjZXMuanMKdmFyIEZpbGVCcmFjZXM7CnZhciBpbml0X2ZpbGVfYnJhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy5qcyIoKSB7CiAgICBGaWxlQnJhY2VzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzCnZhciBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwp2YXIgaW5pdF9maWxlX2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzIigpIHsKICAgIEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOHYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtY29sdW1uLmpzCnZhciBGaWxlQ2hhcnRDb2x1bW47CnZhciBpbml0X2ZpbGVfY2hhcnRfY29sdW1uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi5qcyIoKSB7CiAgICBGaWxlQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOHYtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtbGluZS5qcwp2YXIgRmlsZUNoYXJ0TGluZTsKdmFyIGluaXRfZmlsZV9jaGFydF9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWxpbmUuanMiKCkgewogICAgRmlsZUNoYXJ0TGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMy0zLjUgMy41LTItMkw4IDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGFydC1waWUuanMKdmFyIEZpbGVDaGFydFBpZTsKdmFyIGluaXRfZmlsZV9jaGFydF9waWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtcGllLmpzIigpIHsKICAgIEZpbGVDaGFydFBpZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1Ljk0MSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuNTEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4wMTcgMTEuNTEyYTYgNiAwIDEgMCA4LjQ2NiA4LjQ3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDE2YTEgMSAwIDAgMS0xLTF2LTRjMC0uNTUyLjQ1LTEuMDA4Ljk5NS0uOTE3YTYgNiAwIDAgMSA0LjkyMiA0LjkyMmMuMDkxLjU0NC0uMzY1Ljk5NS0uOTE3Ljk5NXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLWNvcm5lci5qcwp2YXIgRmlsZUNoZWNrQ29ybmVyOwp2YXIgaW5pdF9maWxlX2NoZWNrX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay1jb3JuZXIuanMiKCkgewogICAgRmlsZUNoZWNrQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay5qcwp2YXIgRmlsZUNoZWNrOwp2YXIgaW5pdF9maWxlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLmpzIigpIHsKICAgIEZpbGVDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNsb2NrLmpzCnZhciBGaWxlQ2xvY2s7CnZhciBpbml0X2ZpbGVfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2xvY2suanMiKCkgewogICAgRmlsZUNsb2NrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMjJoMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjIuODUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUtY29ybmVyLmpzCnZhciBGaWxlQ29kZUNvcm5lcjsKdmFyIGluaXRfZmlsZV9jb2RlX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2RlLWNvcm5lci5qcyIoKSB7CiAgICBGaWxlQ29kZUNvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTIuMTVWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJoLTMuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE2LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2RlLmpzCnZhciBGaWxlQ29kZTsKdmFyIGluaXRfZmlsZV9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUuanMiKCkgewogICAgRmlsZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuNSA4IDE1bDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLjUgMiAyLjUtMiAyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZy5qcwp2YXIgRmlsZUNvZzsKdmFyIGluaXRfZmlsZV9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY29nLmpzIigpIHsKICAgIEZpbGVDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLS41ODYtMS40MTRsLTQtNEEyIDIgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Ni42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yMjggMTYuODUyLS45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNzczIDE2Ljg1Mi45MjItLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05Ljc3MyAxOS4xNDguOTIyLjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZmYuanMKdmFyIEZpbGVEaWZmOwp2YXIgaW5pdF9maWxlX2RpZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlmZi5qcyIoKSB7CiAgICBGaWxlRGlmZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN2g2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1kaWdpdC5qcwp2YXIgRmlsZURpZ2l0Owp2YXIgaW5pdF9maWxlX2RpZ2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZ2l0LmpzIigpIHsKICAgIEZpbGVEaWdpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1kb3duLmpzCnZhciBGaWxlRG93bjsKdmFyIGluaXRfZmlsZV9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRvd24uanMiKCkgewogICAgRmlsZURvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzIDMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1leGNsYW1hdGlvbi1wb2ludC5qcwp2YXIgRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CnZhciBpbml0X2ZpbGVfZXhjbGFtYXRpb25fcG9pbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZXhjbGFtYXRpb24tcG9pbnQuanMiKCkgewogICAgRmlsZUV4Y2xhbWF0aW9uUG9pbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWhlYWRwaG9uZS5qcwp2YXIgRmlsZUhlYWRwaG9uZTsKdmFyIGluaXRfZmlsZV9oZWFkcGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaGVhZHBob25lLmpzIigpIHsKICAgIEZpbGVIZWFkcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDYuODM1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0uMzQzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yIDE5YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDEtNCAwdi00YTYgNiAwIDAgMSAxMiAwdjRhMiAyIDAgMCAxLTQgMHYtMWEyIDIgMCAwIDEgNCAwIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaGVhcnQuanMKdmFyIEZpbGVIZWFydDsKdmFyIGluaXRfZmlsZV9oZWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1oZWFydC5qcyIoKSB7CiAgICBGaWxlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyAyMmg1YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2NyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgNyAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YTEgMSAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaW1hZ2UuanMKdmFyIEZpbGVJbWFnZTsKdmFyIGluaXRfZmlsZV9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbWFnZS5qcyIoKSB7CiAgICBGaWxlSW1hZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbnB1dC5qcwp2YXIgRmlsZUlucHV0Owp2YXIgaW5pdF9maWxlX2lucHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWlucHV0LmpzIigpIHsKICAgIEZpbGVJbnB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTFWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE4IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWtleS5qcwp2YXIgRmlsZUtleTsKdmFyIGluaXRfZmlsZV9rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUta2V5LmpzIigpIHsKICAgIEZpbGVLZXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC42NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjEwLjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTQtNC41ODYgNC41ODYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1sb2NrLmpzCnZhciBGaWxlTG9jazsKdmFyIGluaXRfZmlsZV9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWxvY2suanMiKCkgewogICAgRmlsZUxvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTd2LTJhMiAyIDAgMCAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLWNvcm5lci5qcwp2YXIgRmlsZU1pbnVzQ29ybmVyOwp2YXIgaW5pdF9maWxlX21pbnVzX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1taW51cy1jb3JuZXIuanMiKCkgewogICAgRmlsZU1pbnVzQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTRWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW11c2ljLmpzCnZhciBGaWxlTXVzaWM7CnZhciBpbml0X2ZpbGVfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbXVzaWMuanMiKCkgewogICAgRmlsZU11c2ljID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjB2LTdsMyAxLjQ3NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLmpzCnZhciBGaWxlTWludXM7CnZhciBpbml0X2ZpbGVfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMuanMiKCkgewogICAgRmlsZU1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtb3V0cHV0LmpzCnZhciBGaWxlT3V0cHV0Owp2YXIgaW5pdF9maWxlX291dHB1dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1vdXRwdXQuanMiKCkgewogICAgRmlsZU91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMS0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNy0zLTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBlbi1saW5lLmpzCnZhciBGaWxlUGVuTGluZTsKdmFyIGluaXRfZmlsZV9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wZW4tbGluZS5qcyIoKSB7CiAgICBGaWxlUGVuTGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4LjIyNiA1LjIyNi0yLjUyLTIuNTJBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LS4zNTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDEyLjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGVuLmpzCnZhciBGaWxlUGVuOwp2YXIgaW5pdF9maWxlX3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wZW4uanMiKCkgewogICAgRmlsZVBlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY1OSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjkuMzQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zNzggMTIuNjIyYTEgMSAwIDAgMSAzIDMuMDAzTDguMzYgMjAuNjM3YTIgMiAwIDAgMS0uODU0LjUwNmwtMi44NjcuODM3YS41LjUgMCAwIDEtLjYyLS42MmwuODM2LTIuODY5YTIgMiAwIDAgMSAuNTA2LS44NTN6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbGF5LmpzCnZhciBGaWxlUGxheTsKdmFyIGluaXRfZmlsZV9wbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsYXkuanMiKCkgewogICAgRmlsZVBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMDMzIDEzLjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZ2LTQuNzA0YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy5qcwp2YXIgRmlsZVBsdXM7CnZhciBpbml0X2ZpbGVfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbHVzLmpzIigpIHsKICAgIEZpbGVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgRmlsZVF1ZXN0aW9uTWFyazsKdmFyIGluaXRfZmlsZV9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgRmlsZVF1ZXN0aW9uTWFyayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSA5YTMgMyAwIDAgMSA1LjgyIDFjMCAyLTMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsdXMtY29ybmVyLmpzCnZhciBGaWxlUGx1c0Nvcm5lcjsKdmFyIGluaXRfZmlsZV9wbHVzX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbHVzLWNvcm5lci5qcyIoKSB7CiAgICBGaWxlUGx1c0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM1IDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NS4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2Nhbi5qcwp2YXIgRmlsZVNjYW47CnZhciBpbml0X2ZpbGVfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zY2FuLmpzIigpIHsKICAgIEZpbGVTY2FuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmg0LjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTRhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJhMiAyIDAgMCAwIDItMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2VhcmNoLWNvcm5lci5qcwp2YXIgRmlsZVNlYXJjaENvcm5lcjsKdmFyIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC1jb3JuZXIuanMiKCkgewogICAgRmlsZVNlYXJjaENvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg5IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYzLjI1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjItMi44OC0yLjg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE3IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC5qcwp2YXIgRmlsZVNlYXJjaDsKdmFyIGluaXRfZmlsZV9zZWFyY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2VhcmNoLmpzIigpIHsKICAgIEZpbGVTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxNC41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4zIDE2LjMgMTUgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNpZ25hbC5qcwp2YXIgRmlsZVNpZ25hbDsKdmFyIGluaXRfZmlsZV9zaWduYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2lnbmFsLmpzIigpIHsKICAgIEZpbGVTaWduYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNSAxMy41YTIuNSAyLjUgMCAwIDEgMCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyYTUgNSAwIDAgMSAwIDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNwcmVhZHNoZWV0LmpzCnZhciBGaWxlU3ByZWFkc2hlZXQ7CnZhciBpbml0X2ZpbGVfc3ByZWFkc2hlZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3ByZWFkc2hlZXQuanMiKCkgewogICAgRmlsZVNwcmVhZHNoZWV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN2gyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zbGlkZXJzLmpzCnZhciBGaWxlU2xpZGVyczsKdmFyIGluaXRfZmlsZV9zbGlkZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNsaWRlcnMuanMiKCkgewogICAgRmlsZVNsaWRlcnMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN2g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2djIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN0YWNrLmpzCnZhciBGaWxlU3RhY2s7CnZhciBpbml0X2ZpbGVfc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3RhY2suanMiKCkgewogICAgRmlsZVN0YWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjFhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTF2LThhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgNmEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMi0yQTIgMiAwIDAgMCAxNyAyaC0zYTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDZhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN5bWxpbmsuanMKdmFyIEZpbGVTeW1saW5rOwp2YXIgaW5pdF9maWxlX3N5bWxpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3ltbGluay5qcyIoKSB7CiAgICBGaWxlU3ltbGluayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTFWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoNyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE4IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRlcm1pbmFsLmpzCnZhciBGaWxlVGVybWluYWw7CnZhciBpbml0X2ZpbGVfdGVybWluYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdGVybWluYWwuanMiKCkgewogICAgRmlsZVRlcm1pbmFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTYgMi0yLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXh0LmpzCnZhciBGaWxlVGV4dDsKdmFyIGluaXRfZmlsZV90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRleHQuanMiKCkgewogICAgRmlsZVRleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdHlwZS1jb3JuZXIuanMKdmFyIEZpbGVUeXBlQ29ybmVyOwp2YXIgaW5pdF9maWxlX3R5cGVfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXR5cGUtY29ybmVyLmpzIigpIHsKICAgIEZpbGVUeXBlQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10eXBlLmpzCnZhciBGaWxlVHlwZTsKdmFyIGluaXRfZmlsZV90eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXR5cGUuanMiKCkgewogICAgRmlsZVR5cGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2LS41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIC41LjV2LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXVwLmpzCnZhciBGaWxlVXA7CnZhciBpbml0X2ZpbGVfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXAuanMiKCkgewogICAgRmlsZVVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUtMy0zLTMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXNlci5qcwp2YXIgRmlsZVVzZXI7CnZhciBpbml0X2ZpbGVfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS11c2VyLmpzIigpIHsKICAgIEZpbGVVc2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIyYTQgNCAwIDAgMC04IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdm9sdW1lLmpzCnZhciBGaWxlVm9sdW1lOwp2YXIgaW5pdF9maWxlX3ZvbHVtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS12b2x1bWUuanMiKCkgewogICAgRmlsZVZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTEuNTVWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJoLTEuOTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNWE1IDUgMCAwIDEgMCA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMTQuNTAyYS41LjUgMCAwIDAtLjgyNi0uMzgxbC0xLjg5MyAxLjYzMWExIDEgMCAwIDEtLjY1MS4yNDNIMy41YS41LjUgMCAwIDAtLjUuNTAxdjMuMDA2YS41LjUgMCAwIDAgLjUuNTAxaDEuMTI5YTEgMSAwIDAgMSAuNjUyLjI0M2wxLjg5MyAxLjYzM2EuNS41IDAgMCAwIC44MjYtLjM4eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdmlkZW8tY2FtZXJhLmpzCnZhciBGaWxlVmlkZW9DYW1lcmE7CnZhciBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXZpZGVvLWNhbWVyYS5qcyIoKSB7CiAgICBGaWxlVmlkZW9DYW1lcmEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3IiB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNiIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LWNvcm5lci5qcwp2YXIgRmlsZVhDb3JuZXI7CnZhciBpbml0X2ZpbGVfeF9jb3JuZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUteC1jb3JuZXIuanMiKCkgewogICAgRmlsZVhDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNyA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LmpzCnZhciBGaWxlWDsKdmFyIGluaXRfZmlsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXguanMiKCkgewogICAgRmlsZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMi41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTIuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLmpzCnZhciBGaWxlOwp2YXIgaW5pdF9maWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLmpzIigpIHsKICAgIEZpbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qcwp2YXIgRmlsZXM7CnZhciBpbml0X2ZpbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qcyIoKSB7CiAgICBGaWxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDEuNzMyLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxtLmpzCnZhciBGaWxtOwp2YXIgaW5pdF9maWxtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxtLmpzIigpIHsKICAgIEZpbG0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3LjVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTYuNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNy41aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTYuNWg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmluZ2VycHJpbnQtcGF0dGVybi5qcwp2YXIgRmluZ2VycHJpbnRQYXR0ZXJuOwp2YXIgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maW5nZXJwcmludC1wYXR0ZXJuLmpzIigpIHsKICAgIEZpbmdlcnByaW50UGF0dGVybiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwYTIgMiAwIDAgMC0yIDJjMCAxLjAyLS4xIDIuNTEtLjI2IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTMuMTJjMCAyLjM4IDAgNi4zOC0xIDguODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMjkgMjEuMDJjLjEyLS42LjQzLTIuMy41LTMuMDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmExMCAxMCAwIDAgMSAxOC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjggMTZjLjItMiAuMTMxLTUuMzU0IDAtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE5LjVDNS41IDE4IDYgMTUgNiAxMmE2IDYgMCAwIDEgLjM0LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NSAyMmMuMjEtLjY2LjQ1LTEuMzIuNTctMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDYuOGE2IDYgMCAwIDEgOSA1LjJ2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpcmUtZXh0aW5ndWlzaGVyLmpzCnZhciBGaXJlRXh0aW5ndWlzaGVyOwp2YXIgaW5pdF9maXJlX2V4dGluZ3Vpc2hlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlyZS1leHRpbmd1aXNoZXIuanMiKCkgewogICAgRmlyZUV4dGluZ3Vpc2hlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDYuNVYzYTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDNoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgM2E2IDYgMCAwIDAtNiA2djExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMGE0IDQgMCAwIDAtOCAwdjEwYTIgMiAwIDAgMCAyIDJoNGEyIDIgMCAwIDAgMi0yWiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtb2ZmLmpzCnZhciBGaXNoT2ZmOwp2YXIgaW5pdF9maXNoX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC1vZmYuanMiKCkgewogICAgRmlzaE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDEyLjQ3di4wM20wLS41di40N20tLjQ3NSA1LjA1NkE2Ljc0NCA2Ljc0NCAwIDAgMSAxNSAxOGMtMy41NiAwLTcuNTYtMi41My04LjUtNiAuMzQ4LTEuMjggMS4xMTQtMi40MzMgMi4xMjEtMy4zOG0zLjQ0NC0yLjA4OEE4LjgwMiA4LjgwMiAwIDAgMSAxNSA2YzMuNTYgMCA2LjA2IDIuNTQgNyA2LS4zMDkgMS4xNC0uNzg2IDIuMTc3LTEuNDEzIDMuMDU4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTAuNjdDNyA4IDUuNTggNS45NyAyLjczIDUuNWMtMSAxLjUtMSA1IC4yMyA2LjUtMS4yNCAxLjUtMS4yNCA1LS4yMyA2LjVDNS41OCAxOC4wMyA3IDE2IDcgMTMuMzNtNy40OC00LjM3MkE5Ljc3IDkuNzcgMCAwIDEgMTYgNi4wN20wIDExLjg2YTkuNzcgOS43NyAwIDAgMS0xLjcyOC0zLjYxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4TTguNTMgM2g1LjI3YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNE0yIDJsMjAgMjAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoLXN5bWJvbC5qcwp2YXIgRmlzaFN5bWJvbDsKdmFyIGluaXRfZmlzaF9zeW1ib2wgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtc3ltYm9sLmpzIigpIHsKICAgIEZpc2hTeW1ib2wgPSBbWyJwYXRoIiwgeyBkOiAiTTIgMTZzOS0xNSAyMC00QzExIDIzIDIgOCAyIDgiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qcwp2YXIgRmlzaDsKdmFyIGluaXRfZmlzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qcyIoKSB7CiAgICBGaXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDEyYy45NC0zLjQ2IDQuOTQtNiA4LjUtNiAzLjU2IDAgNi4wNiAyLjU0IDcgNi0uOTQgMy40Ny0zLjQ0IDYtNyA2cy03LjU2LTIuNTMtOC41LTZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEydi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3LjkzYTkuNzcgOS43NyAwIDAgMSAwLTExLjg2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTAuNjdDNyA4IDUuNTggNS45NyAyLjczIDUuNWMtMSAxLjUtMSA1IC4yMyA2LjUtMS4yNCAxLjUtMS4yNCA1LS4yMyA2LjVDNS41OCAxOC4wMyA3IDE2IDcgMTMuMzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNDYgNy4yNkMxMC4yIDUuODggOS4xNyA0LjI0IDggM2g1LjhhMiAyIDAgMCAxIDEuOTggMS42N2wuMjMgMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjAxIDE3LjkzLS4yMyAxLjRBMiAyIDAgMCAxIDEzLjggMjFIOS41YTUuOTYgNS45NiAwIDAgMCAxLjQ5LTMuOTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoaW5nLWhvb2suanMKdmFyIEZpc2hpbmdIb29rOwp2YXIgaW5pdF9maXNoaW5nX2hvb2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2hpbmctaG9vay5qcyIoKSB7CiAgICBGaXNoaW5nSG9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MTQgOC41ODYgMjIgNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy1vZmYuanMKdmFyIEZsYWdPZmY7CnZhciBpbml0X2ZsYWdfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLW9mZi5qcyIoKSB7CiAgICBGbGFnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1sZWZ0LmpzCnZhciBGbGFnVHJpYW5nbGVMZWZ0Owp2YXIgaW5pdF9mbGFnX3RyaWFuZ2xlX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctdHJpYW5nbGUtbGVmdC5qcyIoKSB7CiAgICBGbGFnVHJpYW5nbGVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWMi44YS44LjggMCAwIDAtMS4xNy0uNzFMNS40NSA3Ljc4YS44LjggMCAwIDAgMCAxLjQ0TDE4IDE1LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLXRyaWFuZ2xlLXJpZ2h0LmpzCnZhciBGbGFnVHJpYW5nbGVSaWdodDsKdmFyIGluaXRfZmxhZ190cmlhbmdsZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1yaWdodC5qcyIoKSB7CiAgICBGbGFnVHJpYW5nbGVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjJWMi44YS44LjggMCAwIDEgMS4xNy0uNzFsMTEuMzggNS42OWEuOC44IDAgMCAxIDAgMS40NEw2IDE1LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFtZS1raW5kbGluZy5qcwp2YXIgRmxhbWVLaW5kbGluZzsKdmFyIGluaXRfZmxhbWVfa2luZGxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLWtpbmRsaW5nLmpzIigpIHsKICAgIEZsYW1lS2luZGxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAyYzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDE3IDEwYTUgNSAwIDEgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkM4IDQuNSAxMSAyIDEyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjIgMTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE4IDE0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLmpzCnZhciBGbGFnOwp2YXIgaW5pdF9mbGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLmpzIigpIHsKICAgIEZsYWcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIyVjRhMSAxIDAgMCAxIC40LS44QTYgNiAwIDAgMSA4IDJjMyAwIDUgMiA3LjMzMyAycTIgMCAzLjA2Ny0uOEExIDEgMCAwIDEgMjAgNHYxMGExIDEgMCAwIDEtLjQuOEE2IDYgMCAwIDEgMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhbWUuanMKdmFyIEZsYW1lOwp2YXIgaW5pdF9mbGFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhbWUuanMiKCkgewogICAgRmxhbWUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAzcTEgNCA0IDYuNXQzIDUuNWExIDEgMCAwIDEtMTQgMCA1IDUgMCAwIDEgMS0zIDEgMSAwIDAgMCA1IDBjMC0yLTEuNS0zLTEuNS01cTAtMiAyLjUtNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNobGlnaHQtb2ZmLmpzCnZhciBGbGFzaGxpZ2h0T2ZmOwp2YXIgaW5pdF9mbGFzaGxpZ2h0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2hsaWdodC1vZmYuanMiKCkgewogICAgRmxhc2hsaWdodE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjY1MiA2SDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNiAxNnY0YTIgMiAwIDAgMS0yIDJoLTRhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjYiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjY0OSAySDE3YTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44YTQgNCAwIDAgMC0uNTUgMS4wMDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzCnZhciBGbGFzaGxpZ2h0Owp2YXIgaW5pdF9mbGFzaGxpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzIigpIHsKICAgIEZsYXNobGlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3YxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDJhMSAxIDAgMCAxIDEgMXY0YTMgMyAwIDAgMS0uNiAxLjhsLS42LjhBNCA0IDAgMCAwIDE2IDEydjhhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi04YTQgNCAwIDAgMC0uOC0yLjRsLS42LS44QTMgMyAwIDAgMSA2IDdWM2ExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzay1jb25pY2FsLW9mZi5qcwp2YXIgRmxhc2tDb25pY2FsT2ZmOwp2YXIgaW5pdF9mbGFza19jb25pY2FsX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC1vZmYuanMiKCkgewogICAgRmxhc2tDb25pY2FsT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjYuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTEuNzU1LTIuOTZsNS4yMjctOS41NjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVIMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLXJvdW5kLmpzCnZhciBGbGFza1JvdW5kOwp2YXIgaW5pdF9mbGFza19yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stcm91bmQuanMiKCkgewogICAgRmxhc2tSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2Ni4yOTJhNyA3IDAgMSAwIDQgMFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLWNvbmljYWwuanMKdmFyIEZsYXNrQ29uaWNhbDsKdmFyIGluaXRfZmxhc2tfY29uaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC5qcyIoKSB7CiAgICBGbGFza0NvbmljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAydjZhMiAyIDAgMCAwIC4yNDUuOTZsNS41MSAxMC4wOEEyIDIgMCAwIDEgMTggMjJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjUxLTEwLjA4QTIgMiAwIDAgMCAxMCA4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVoMTEuMDk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwuanMKdmFyIEZsaXBIb3Jpem9udGFsOwp2YXIgaW5pdF9mbGlwX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBGbGlwSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM0g1YTIgMiAwIDAgMC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoM2EyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwtMi5qcwp2YXIgRmxpcEhvcml6b250YWwyOwp2YXIgaW5pdF9mbGlwX2hvcml6b250YWxfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC1ob3Jpem9udGFsLTIuanMiKCkgewogICAgRmxpcEhvcml6b250YWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDUgNS01IDVWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA3LTUgNSA1IDVWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwtMi5qcwp2YXIgRmxpcFZlcnRpY2FsMjsKdmFyIGluaXRfZmxpcF92ZXJ0aWNhbF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLTIuanMiKCkgewogICAgRmxpcFZlcnRpY2FsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMtNSA1LTUtNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS01LTUtNSA1aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC12ZXJ0aWNhbC5qcwp2YXIgRmxpcFZlcnRpY2FsOwp2YXIgaW5pdF9mbGlwX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLmpzIigpIHsKICAgIEZsaXBWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbG93ZXItMi5qcwp2YXIgRmxvd2VyMjsKdmFyIGluaXRfZmxvd2VyXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci0yLmpzIigpIHsKICAgIEZsb3dlcjIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA1YTMgMyAwIDEgMSAzIDNtLTMtM2EzIDMgMCAxIDAtMyAzbTMtM3YxTTkgOGEzIDMgMCAxIDAgMyAzTTkgOGgxbTUgMGEzIDMgMCAxIDEtMyAzbTMtM2gtMW0tMiAzdi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmM0LjIgMCA3LTEuNjY3IDctNS00LjIgMC03IDEuNjY3LTcgNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJjLTQuMiAwLTctMS42NjctNy01IDQuMiAwIDcgMS42NjcgNyA1WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qcwp2YXIgRmxvd2VyOwp2YXIgaW5pdF9mbG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qcyIoKSB7CiAgICBGbG93ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE2LjVBNC41IDQuNSAwIDEgMSA3LjUgMTIgNC41IDQuNSAwIDEgMSAxMiA3LjVhNC41IDQuNSAwIDEgMSA0LjUgNC41IDQuNSA0LjUgMCAxIDEtNC41IDQuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3LjVWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDEySDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2LjVWMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA4IDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiA5Ljg4IDE2IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAxLjg4LTEuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMTQuMTIgMTYgMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2N1cy5qcwp2YXIgRm9jdXM7CnZhciBpbml0X2ZvY3VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2N1cy5qcyIoKSB7CiAgICBGb2N1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC1ob3Jpem9udGFsLmpzCnZhciBGb2xkSG9yaXpvbnRhbDsKdmFyIGluaXRfZm9sZF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkLWhvcml6b250YWwuanMiKCkgewogICAgRm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTUgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGQtdmVydGljYWwuanMKdmFyIEZvbGRWZXJ0aWNhbDsKdmFyIGluaXRfZm9sZF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBGb2xkVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTktMy0zLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1LTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItYXJjaGl2ZS5qcwp2YXIgRm9sZGVyQXJjaGl2ZTsKdmFyIGluaXRfZm9sZGVyX2FyY2hpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1hcmNoaXZlLmpzIigpIHsKICAgIEZvbGRlckFyY2hpdmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkgMTkuOEEyIDIgMCAwIDAgMjIgMThWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyaDUuMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxN3YtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jaGVjay5qcwp2YXIgRm9sZGVyQ2hlY2s7CnZhciBpbml0X2ZvbGRlcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNoZWNrLmpzIigpIHsKICAgIEZvbGRlckNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jbG9jay5qcwp2YXIgRm9sZGVyQ2xvY2s7CnZhciBpbml0X2ZvbGRlcl9jbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb2NrLmpzIigpIHsKICAgIEZvbGRlckNsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb3NlZC5qcwp2YXIgRm9sZGVyQ2xvc2VkOwp2YXIgaW5pdF9mb2xkZXJfY2xvc2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY2xvc2VkLmpzIigpIHsKICAgIEZvbGRlckNsb3NlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZGUuanMKdmFyIEZvbGRlckNvZGU7CnZhciBpbml0X2ZvbGRlcl9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY29kZS5qcyIoKSB7CiAgICBGb2xkZXJDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNSA4IDEzbDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZy5qcwp2YXIgRm9sZGVyQ29nOwp2YXIgaW5pdF9mb2xkZXJfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY29nLmpzIigpIHsKICAgIEZvbGRlckNvZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjMgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjk4YTIgMiAwIDAgMSAxLjY5LjlsLjY2IDEuMkEyIDIgMCAwIDAgMTIgNmg4YTIgMiAwIDAgMSAyIDJ2My4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWRvdC5qcwp2YXIgRm9sZGVyRG90Owp2YXIgaW5pdF9mb2xkZXJfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZG90LmpzIigpIHsKICAgIEZvbGRlckRvdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1kb3duLmpzCnZhciBGb2xkZXJEb3duOwp2YXIgaW5pdF9mb2xkZXJfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWRvd24uanMiKCkgewogICAgRm9sZGVyRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEzLTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LTIuanMKdmFyIEZvbGRlckdpdDI7CnZhciBpbml0X2ZvbGRlcl9naXRfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWdpdC0yLmpzIigpIHsKICAgIEZvbGRlckdpdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOWE1IDUgMCAwIDEtNS01djgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWdpdC5qcwp2YXIgRm9sZGVyR2l0Owp2YXIgaW5pdF9mb2xkZXJfZ2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LmpzIigpIHsKICAgIEZvbGRlckdpdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWhlYXJ0LmpzCnZhciBGb2xkZXJIZWFydDsKdmFyIGluaXRfZm9sZGVyX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaGVhcnQuanMiKCkgewogICAgRm9sZGVySGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC42MzggMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYzLjQxNyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSAxOCAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWlucHV0LmpzCnZhciBGb2xkZXJJbnB1dDsKdmFyIGluaXRfZm9sZGVyX2lucHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaW5wdXQuanMiKCkgewogICAgRm9sZGVySW5wdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNiAzLTMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWthbmJhbi5qcwp2YXIgRm9sZGVyS2FuYmFuOwp2YXIgaW5pdF9mb2xkZXJfa2FuYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIta2FuYmFuLmpzIigpIHsKICAgIEZvbGRlckthbmJhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1rZXkuanMKdmFyIEZvbGRlcktleTsKdmFyIGluaXRfZm9sZGVyX2tleSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWtleS5qcyIoKSB7CiAgICBGb2xkZXJLZXkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNC00LjUgNC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1IDEgMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1sb2NrLmpzCnZhciBGb2xkZXJMb2NrOwp2YXIgaW5pdF9mb2xkZXJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWxvY2suanMiKCkgewogICAgRm9sZGVyTG9jayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjE3Iiwgcng6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2Mi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE3di0yYTIgMiAwIDEgMC00IDB2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1taW51cy5qcwp2YXIgRm9sZGVyTWludXM7CnZhciBpbml0X2ZvbGRlcl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW1pbnVzLmpzIigpIHsKICAgIEZvbGRlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLWRvdC5qcwp2YXIgRm9sZGVyT3BlbkRvdDsKdmFyIGluaXRfZm9sZGVyX29wZW5fZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3Blbi1kb3QuanMiKCkgewogICAgRm9sZGVyT3BlbkRvdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS40NS0yLjlBMiAyIDAgMCAxIDkuMjQgMTBIMjBhMiAyIDAgMCAxIDEuOTQgMi41bC0xLjU1IDZhMiAyIDAgMCAxLTEuOTQgMS41SDRhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy45M2EyIDIgMCAwIDEgMS42Ni45bC44MiAxLjJhMiAyIDAgMCAwIDEuNjYuOUgxOGEyIDIgMCAwIDEgMiAydjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTUiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLmpzCnZhciBGb2xkZXJPcGVuOwp2YXIgaW5pdF9mb2xkZXJfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4uanMiKCkgewogICAgRm9sZGVyT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS41LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTQgNmEyIDIgMCAwIDEtMS45NSAxLjVINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMThhMiAyIDAgMCAxIDIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW91dHB1dC5qcwp2YXIgRm9sZGVyT3V0cHV0Owp2YXIgaW5pdF9mb2xkZXJfb3V0cHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3V0cHV0LmpzIigpIHsKICAgIEZvbGRlck91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgNy41VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0zIDMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXBlbi5qcwp2YXIgRm9sZGVyUGVuOwp2YXIgaW5pdF9mb2xkZXJfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcGVuLmpzIigpIHsKICAgIEZvbGRlclBlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTEuNVY1YTIgMiAwIDAgMSAyLTJoMy45Yy43IDAgMS4zLjMgMS43LjlsLjggMS4yYy40LjYgMSAuOSAxLjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTkuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4zNzggMTMuNjI2YTEgMSAwIDEgMC0zLjAwNC0zLjAwNGwtNS4wMSA1LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcGx1cy5qcwp2YXIgRm9sZGVyUGx1czsKdmFyIGluaXRfZm9sZGVyX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1wbHVzLmpzIigpIHsKICAgIEZvbGRlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcm9vdC5qcwp2YXIgRm9sZGVyUm9vdDsKdmFyIGluaXRfZm9sZGVyX3Jvb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1yb290LmpzIigpIHsKICAgIEZvbGRlclJvb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIwaDE2YTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjkzYTIgMiAwIDAgMS0xLjY2LS45bC0uODItMS4yQTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYzAgMS4xLjkgMiAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zZWFyY2gtMi5qcwp2YXIgRm9sZGVyU2VhcmNoMjsKdmFyIGluaXRfZm9sZGVyX3NlYXJjaF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLTIuanMiKCkgewogICAgRm9sZGVyU2VhcmNoMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTIuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjMgMTQuMyAxNSAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zZWFyY2guanMKdmFyIEZvbGRlclNlYXJjaDsKdmFyIGluaXRfZm9sZGVyX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXNlYXJjaC5qcyIoKSB7CiAgICBGb2xkZXJTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC43IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NC4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTEuOS0xLjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zeW1saW5rLmpzCnZhciBGb2xkZXJTeW1saW5rOwp2YXIgaW5pdF9mb2xkZXJfc3ltbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bWxpbmsuanMiKCkgewogICAgRm9sZGVyU3ltbGluayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS4zNVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmg3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zeW5jLmpzCnZhciBGb2xkZXJTeW5jOwp2YXIgaW5pdF9mb2xkZXJfc3luYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bmMuanMiKCkgewogICAgRm9sZGVyU3luYyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci10cmVlLmpzCnZhciBGb2xkZXJUcmVlOwp2YXIgaW5pdF9mb2xkZXJfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXRyZWUuanMiKCkgewogICAgRm9sZGVyVHJlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYTEgMSAwIDAgMCAxLTFWNmExIDEgMCAwIDAtMS0xaC0yLjVhMSAxIDAgMCAxLS44LS40bC0uOS0xLjJBMSAxIDAgMCAwIDE1IDNoLTJhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMWgtMi45YTEgMSAwIDAgMS0uODgtLjU1bC0uNDItLjg1YTEgMSAwIDAgMC0uOTItLjZIMTNhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWEyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjEzYTIgMiAwIDAgMCAyIDJoMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci11cC5qcwp2YXIgRm9sZGVyVXA7CnZhciBpbml0X2ZvbGRlcl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXVwLmpzIigpIHsKICAgIEZvbGRlclVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMyAzLTMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXguanMKdmFyIEZvbGRlclg7CnZhciBpbml0X2ZvbGRlcl94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIteC5qcyIoKSB7CiAgICBGb2xkZXJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxMC41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDEwLjUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLmpzCnZhciBGb2xkZXI7CnZhciBpbml0X2ZvbGRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLmpzIigpIHsKICAgIEZvbGRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlcnMuanMKdmFyIEZvbGRlcnM7CnZhciBpbml0X2ZvbGRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlcnMuanMiKCkgewogICAgRm9sZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDVhMiAyIDAgMCAxIDIgMnY3YTIgMiAwIDAgMS0yIDJIOWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgyLjVhMS41IDEuNSAwIDAgMSAxLjIuNmwuNi44YTEuNSAxLjUgMCAwIDAgMS4yLjZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC4yNjhhMiAyIDAgMCAwLTEgMS43MzhWMTlhMiAyIDAgMCAwIDIgMmgxMWEyIDIgMCAwIDAgMS43MzItMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvb3RwcmludHMuanMKdmFyIEZvb3RwcmludHM7CnZhciBpbml0X2Zvb3RwcmludHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvb3RwcmludHMuanMiKCkgewogICAgRm9vdHByaW50cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTZ2LTIuMzhDNCAxMS41IDIuOTcgMTAuNSAzIDhjLjAzLTIuNzIgMS40OS02IDQuNS02QzkuMzcgMiAxMCAzLjggMTAgNS41YzAgMy4xMS0yIDUuNjYtMiA4LjY4VjE2YTIgMiAwIDEgMS00IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwdi0yLjM4YzAtMi4xMiAxLjAzLTMuMTIgMS01LjYyLS4wMy0yLjcyLTEuNDktNi00LjUtNkMxNC42MyA2IDE0IDcuOCAxNCA5LjVjMCAzLjExIDIgNS42NiAyIDguNjhWMjBhMiAyIDAgMSAwIDQgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JrbGlmdC5qcwp2YXIgRm9ya2xpZnQ7CnZhciBpbml0X2ZvcmtsaWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JrbGlmdC5qcyIoKSB7CiAgICBGb3JrbGlmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEySDVhMiAyIDAgMCAwLTIgMnY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTMiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloM201LTE3djE3aDZNNiAxMlY3YzAtMS4xLjktMiAyLTJoM2w1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JtLmpzCnZhciBGb3JtOwp2YXIgaW5pdF9mb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JtLmpzIigpIHsKICAgIEZvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxOCIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3J3YXJkLmpzCnZhciBGb3J3YXJkOwp2YXIgaW5pdF9mb3J3YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3J3YXJkLmpzIigpIHsKICAgIEZvcndhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNyA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTh2LTJhNCA0IDAgMCAxIDQtNGgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lLmpzCnZhciBGcmFtZTsKdmFyIGluaXRfZnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lLmpzIigpIHsKICAgIEZyYW1lID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOCIsIHgyOiAiMTgiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJhbWVyLmpzCnZhciBGcmFtZXI7CnZhciBpbml0X2ZyYW1lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJhbWVyLmpzIigpIHsKICAgIEZyYW1lciA9IFtbInBhdGgiLCB7IGQ6ICJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwIDcgN3YtN20tNyAwaDciIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJvd24uanMKdmFyIEZyb3duOwp2YXIgaW5pdF9mcm93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJvd24uanMiKCkgewogICAgRnJvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdWVsLmpzCnZhciBGdWVsOwp2YXIgaW5pdF9mdWVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdWVsLmpzIigpIHsKICAgIEZ1ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVsbHNjcmVlbi5qcwp2YXIgRnVsbHNjcmVlbjsKdmFyIGluaXRfZnVsbHNjcmVlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVsbHNjcmVlbi5qcyIoKSB7CiAgICBGdWxsc2NyZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiOCIsIHg6ICI3IiwgeTogIjgiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdW5uZWwtcGx1cy5qcwp2YXIgRnVubmVsUGx1czsKdmFyIGluaXRfZnVubmVsX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC1wbHVzLmpzIigpIHsKICAgIEZ1bm5lbFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4zNTQgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0djZhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFsMS4yMTgtMS4zNDgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDN2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC14LmpzCnZhciBGdW5uZWxYOwp2YXIgaW5pdF9mdW5uZWxfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVubmVsLXguanMiKCkgewogICAgRnVubmVsWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjUzMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwuNDI3LS40NzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAzLjUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMy41LTUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC5qcwp2YXIgRnVubmVsOwp2YXIgaW5pdF9mdW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC5qcyIoKSB7CiAgICBGdW5uZWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMGExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MUwyMS43NCA0LjY3QTEgMSAwIDAgMCAyMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLWVuZC5qcwp2YXIgR2FsbGVyeUhvcml6b250YWxFbmQ7CnZhciBpbml0X2dhbGxlcnlfaG9yaXpvbnRhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC1lbmQuanMiKCkgewogICAgR2FsbGVyeUhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA1djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiMTAiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC5qcwp2YXIgR2FsbGVyeUhvcml6b250YWw7CnZhciBpbml0X2dhbGxlcnlfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLmpzIigpIHsKICAgIEdhbGxlcnlIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzdjE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiNiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXRodW1ibmFpbHMuanMKdmFyIEdhbGxlcnlUaHVtYm5haWxzOwp2YXIgaW5pdF9nYWxsZXJ5X3RodW1ibmFpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdGh1bWJuYWlscy5qcyIoKSB7CiAgICBHYWxsZXJ5VGh1bWJuYWlscyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC1lbmQuanMKdmFyIEdhbGxlcnlWZXJ0aWNhbEVuZDsKdmFyIGluaXRfZ2FsbGVyeV92ZXJ0aWNhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdmVydGljYWwtZW5kLmpzIigpIHsKICAgIEdhbGxlcnlWZXJ0aWNhbEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDZoMTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC5qcwp2YXIgR2FsbGVyeVZlcnRpY2FsOwp2YXIgaW5pdF9nYWxsZXJ5X3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXZlcnRpY2FsLmpzIigpIHsKICAgIEdhbGxlcnlWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMmgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FtZXBhZC0yLmpzCnZhciBHYW1lcGFkMjsKdmFyIGluaXRfZ2FtZXBhZF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLTIuanMiKCkgewogICAgR2FtZXBhZDIgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxMCIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjkiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjMyIDVINi42OGE0IDQgMCAwIDAtMy45NzggMy41OWMtLjAwNi4wNTItLjAxLjEwMS0uMDE3LjE1MkMyLjYwNCA5LjQxNiAyIDE0LjQ1NiAyIDE2YTMgMyAwIDAgMCAzIDNjMSAwIDEuNS0uNSAyLTFsMS40MTQtMS40MTRBMiAyIDAgMCAxIDkuODI4IDE2aDQuMzQ0YTIgMiAwIDAgMSAxLjQxNC41ODZMMTcgMThjLjUuNSAxIDEgMiAxYTMgMyAwIDAgMCAzLTNjMC0xLjU0NS0uNjA0LTYuNTg0LS42ODUtNy4yNTgtLjAwNy0uMDUtLjAxMS0uMS0uMDE3LS4xNTFBNCA0IDAgMCAwIDE3LjMyIDV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FtZXBhZC1kaXJlY3Rpb25hbC5qcwp2YXIgR2FtZXBhZERpcmVjdGlvbmFsOwp2YXIgaW5pdF9nYW1lcGFkX2RpcmVjdGlvbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLWRpcmVjdGlvbmFsLmpzIigpIHsKICAgIEdhbWVwYWREaXJlY3Rpb25hbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjE0NiAxNS44NTRhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDggMGwxLjU2IDEuNTZBMiAyIDAgMCAxIDE1IDE4LjgyOFYyMWExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF2LTIuMTcyYTIgMiAwIDAgMSAuNTg2LTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC44MjggMTVhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTEuNTYtMS41NmExLjIwNyAxLjIwNyAwIDAgMSAwLTEuNzA4bDEuNTYtMS41NkEyIDIgMCAwIDEgMTguODI4IDlIMjFhMSAxIDAgMCAxIDEgMXY0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNTg2IDE0LjQxNEEyIDIgMCAwIDEgNS4xNzIgMTVIM2ExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTFoMi4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwxLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAzYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0bC0xLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEtMS43MDggMGwtMS41Ni0xLjU2QTIgMiAwIDAgMSA5IDUuMTcyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQuanMKdmFyIEdhbWVwYWQ7CnZhciBpbml0X2dhbWVwYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQuanMiKCkgewogICAgR2FtZXBhZCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiMTAiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTMiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanMKdmFyIEdhdWdlOwp2YXIgaW5pdF9nYXVnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanMiKCkgewogICAgR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zNCAxOWExMCAxMCAwIDEgMSAxNy4zMiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F2ZWwuanMKdmFyIEdhdmVsOwp2YXIgaW5pdF9nYXZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F2ZWwuanMiKCkgewogICAgR2F2ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMy04LjM4MSA4LjM4YTEgMSAwIDAgMS0zLjAwMS0zbDguMzg0LTguMzgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDEwLjUtOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDcuNSA4IDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW0uanMKdmFyIEdlbTsKdmFyIGluaXRfZ2VtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW0uanMiKCkgewogICAgR2VtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAzIDggOWw0IDEzIDQtMTMtMi41LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMS42LjhsMyA0YTIgMiAwIDAgMSAuMDEzIDIuMzgybC03Ljk5IDEwLjk4NmEyIDIgMCAwIDEtMy4yNDcgMGwtNy45OS0xMC45ODZBMiAyIDAgMCAxIDIuNCA3LjhsMi45OTgtMy45OTdBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5aDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2VvcmdpYW4tbGFyaS5qcwp2YXIgR2VvcmdpYW5MYXJpOwp2YXIgaW5pdF9nZW9yZ2lhbl9sYXJpID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW9yZ2lhbi1sYXJpLmpzIigpIHsKICAgIEdlb3JnaWFuTGFyaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMjFhNy41IDcuNSAwIDEgMSA3LjM1LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJWMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dob3N0LmpzCnZhciBHaG9zdDsKdmFyIGluaXRfZ2hvc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dob3N0LmpzIigpIHsKICAgIEdob3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhOCA4IDAgMCAwLTggOHYxMmwzLTMgMi41IDIuNUwxMiAxOWwyLjUgMi41TDE3IDE5bDMgM1YxMGE4IDggMCAwIDAtOC04eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanMKdmFyIEdpZnQ7CnZhciBpbml0X2dpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanMiKCkgewogICAgR2lmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI4Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMnY3YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0ydi03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSA4YTIuNSAyLjUgMCAwIDEgMC01QTQuOCA4IDAgMCAxIDEyIDhhNC44IDggMCAwIDEgNC41LTUgMi41IDIuNSAwIDAgMSAwIDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLW1pbnVzLmpzCnZhciBHaXRCcmFuY2hNaW51czsKdmFyIGluaXRfZ2l0X2JyYW5jaF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC1taW51cy5qcyIoKSB7CiAgICBHaXRCcmFuY2hNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZhOSA5IDAgMCAwLTkgOVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLmpzCnZhciBHaXRCcmFuY2g7CnZhciBpbml0X2dpdF9icmFuY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1icmFuY2guanMiKCkgewogICAgR2l0QnJhbmNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiMyIsIHkyOiAiMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5YTkgOSAwIDAgMS05IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLXBsdXMuanMKdmFyIEdpdEJyYW5jaFBsdXM7CnZhciBpbml0X2dpdF9icmFuY2hfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC1wbHVzLmpzIigpIHsKICAgIEdpdEJyYW5jaFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOGgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtaG9yaXpvbnRhbC5qcwp2YXIgR2l0Q29tbWl0SG9yaXpvbnRhbDsKdmFyIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tbWl0LWhvcml6b250YWwuanMiKCkgewogICAgR2l0Q29tbWl0SG9yaXpvbnRhbCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiOSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbW1pdC12ZXJ0aWNhbC5qcwp2YXIgR2l0Q29tbWl0VmVydGljYWw7CnZhciBpbml0X2dpdF9jb21taXRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtdmVydGljYWwuanMiKCkgewogICAgR2l0Q29tbWl0VmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbXBhcmUtYXJyb3dzLmpzCnZhciBHaXRDb21wYXJlQXJyb3dzOwp2YXIgaW5pdF9naXRfY29tcGFyZV9hcnJvd3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21wYXJlLWFycm93cy5qcyIoKSB7CiAgICBHaXRDb21wYXJlQXJyb3dzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg3YTIgMiAwIDAgMS0yLTJWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS5qcwp2YXIgR2l0Q29tcGFyZTsKdmFyIGluaXRfZ2l0X2NvbXBhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21wYXJlLmpzIigpIHsKICAgIEdpdENvbXBhcmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDZoM2EyIDIgMCAwIDEgMiAydjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMThIOGEyIDIgMCAwIDEtMi0yVjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtZm9yay5qcwp2YXIgR2l0Rm9yazsKdmFyIGluaXRfZ2l0X2ZvcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1mb3JrLmpzIigpIHsKICAgIEdpdEZvcmsgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5djJjMCAuNi0uNCAxLTEgMUg3Yy0uNiAwLTEtLjQtMS0xVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1ncmFwaC5qcwp2YXIgR2l0R3JhcGg7CnZhciBpbml0X2dpdF9ncmFwaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWdyYXBoLmpzIigpIHsKICAgIEdpdEdyYXBoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtbWVyZ2UuanMKdmFyIEdpdE1lcmdlOwp2YXIgaW5pdF9naXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1tZXJnZS5qcyIoKSB7CiAgICBHaXRNZXJnZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMVY5YTkgOSAwIDAgMCA5IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWFycm93LmpzCnZhciBHaXRQdWxsUmVxdWVzdEFycm93Owp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Fycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWFycm93LmpzIigpIHsKICAgIEdpdFB1bGxSZXF1ZXN0QXJyb3cgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDl2MTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzCnZhciBHaXRQdWxsUmVxdWVzdENsb3NlZDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9jbG9zZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzIigpIHsKICAgIEdpdFB1bGxSZXF1ZXN0Q2xvc2VkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5djEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDktNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjVWMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY3JlYXRlLWFycm93LmpzCnZhciBHaXRQdWxsUmVxdWVzdENyZWF0ZUFycm93Owp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUtYXJyb3cuanMiKCkgewogICAgR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOXYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUuanMKdmFyIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlOwp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUuanMiKCkgewogICAgR2l0UHVsbFJlcXVlc3RDcmVhdGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdC5qcwp2YXIgR2l0UHVsbFJlcXVlc3REcmFmdDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9kcmFmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdC5qcyIoKSB7CiAgICBHaXRQdWxsUmVxdWVzdERyYWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTF2LTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzCnZhciBHaXRQdWxsUmVxdWVzdDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC5qcyIoKSB7CiAgICBHaXRQdWxsUmVxdWVzdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2NyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICI5IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGh1Yi5qcwp2YXIgR2l0aHViOwp2YXIgaW5pdF9naXRodWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGh1Yi5qcyIoKSB7CiAgICBHaXRodWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThjLTQuNTEgMi01LTItNy0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzCnZhciBHaXRsYWI7CnZhciBpbml0X2dpdGxhYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzIigpIHsKICAgIEdpdGxhYiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIyIDEzLjI5LTMuMzMtMTBhLjQyLjQyIDAgMCAwLS4xNC0uMTguMzguMzggMCAwIDAtLjIyLS4xMS4zOS4zOSAwIDAgMC0uMjMuMDcuNDIuNDIgMCAwIDAtLjE0LjE4bC0yLjI2IDYuNjdIOC4zMkw2LjEgMy4yNmEuNDIuNDIgMCAwIDAtLjEtLjE4LjM4LjM4IDAgMCAwLS4yNi0uMDguMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOEwyIDEzLjI5YS43NC43NCAwIDAgMCAuMjcuODNMMTIgMjFsOS42OS02Ljg4YS43MS43MSAwIDAgMCAuMzEtLjgzWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsYXNzLXdhdGVyLmpzCnZhciBHbGFzc1dhdGVyOwp2YXIgaW5pdF9nbGFzc193YXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Mtd2F0ZXIuanMiKCkgewogICAgR2xhc3NXYXRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuMTE2IDQuMTA0QTEgMSAwIDAgMSA2LjExIDNoMTEuNzhhMSAxIDAgMCAxIC45OTQgMS4xMDVMMTcuMTkgMjAuMjFBMiAyIDAgMCAxIDE1LjIgMjJIOC44YTIgMiAwIDAgMS0yLTEuNzl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJhNSA1IDAgMCAxIDYgMCA1IDUgMCAwIDAgNiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Nlcy5qcwp2YXIgR2xhc3NlczsKdmFyIGluaXRfZ2xhc3NlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Nlcy5qcyIoKSB7CiAgICBHbGFzc2VzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxNSIsIHI6ICI0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE1IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSAxMyA1IDdjLjctMS4zIDEuNC0yIDMtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41IDEzIDE5IDdjLS43LTEuMy0xLjUtMi0zLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS1sb2NrLmpzCnZhciBHbG9iZUxvY2s7CnZhciBpbml0X2dsb2JlX2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsb2JlLWxvY2suanMiKCkgewogICAgR2xvYmVMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNjg2IDE1QTE0LjUgMTQuNSAwIDAgMSAxMiAyMmExNC41IDE0LjUgMCAwIDEgMC0yMCAxMCAxMCAwIDEgMCA5LjU0MiAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA2VjRhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS5qcwp2YXIgR2xvYmU7CnZhciBpbml0X2dsb2JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS5qcyIoKSB7CiAgICBHbG9iZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dvYWwuanMKdmFyIEdvYWw7CnZhciBpbml0X2dvYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dvYWwuanMiKCkgewogICAgR29hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjJsOCA0LTggNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMDAyIDkuOTk3YTUgNSAwIDEgMCA4LjkgMi4wMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qcwp2YXIgR3B1Owp2YXIgaW5pdF9ncHUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qcyIoKSB7CiAgICBHcHUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDE4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDIuMjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN3YzYTEgMSAwIDAgMCAxIDFoNWExIDEgMCAwIDAgMS0xdi0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjExIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JhZHVhdGlvbi1jYXAuanMKdmFyIEdyYWR1YXRpb25DYXA7CnZhciBpbml0X2dyYWR1YXRpb25fY2FwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFkdWF0aW9uLWNhcC5qcyIoKSB7CiAgICBHcmFkdWF0aW9uQ2FwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuNDIgMTAuOTIyYTEgMSAwIDAgMC0uMDE5LTEuODM4TDEyLjgzIDUuMThhMiAyIDAgMCAwLTEuNjYgMEwyLjYgOS4wOGExIDEgMCAwIDAgMCAxLjgzMmw4LjU3IDMuOTA4YTIgMiAwIDAgMCAxLjY2IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMi41VjE2YTYgMyAwIDAgMCAxMiAwdi0zLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFwZS5qcwp2YXIgR3JhcGU7CnZhciBpbml0X2dyYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFwZS5qcyIoKSB7CiAgICBHcmFwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVWMmwtNS44OSA1Ljg5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYuNiIsIGN5OiAiMTUuODkiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguMTEiLCBjeTogIjcuNCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuMzUiLCBjeTogIjExLjY1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy45MSIsIGN5OiAiNS44NSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguMTUiLCBjeTogIjEwLjA5IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjU2IiwgY3k6ICIxMy4yIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC44IiwgY3k6ICIxNy40NCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLWNoZWNrLmpzCnZhciBHcmlkMngyQ2hlY2s7CnZhciBpbml0X2dyaWRfMngyX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1jaGVjay5qcyIoKSB7CiAgICBHcmlkMngyQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAzdjE3YTEgMSAwIDAgMS0xIDFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTEgMUgzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1wbHVzLmpzCnZhciBHcmlkMngyUGx1czsKdmFyIGluaXRfZ3JpZF8yeDJfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDItcGx1cy5qcyIoKSB7CiAgICBHcmlkMngyUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMnYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLXguanMKdmFyIEdyaWQyeDJYOwp2YXIgaW5pdF9ncmlkXzJ4Ml94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi14LmpzIigpIHsKICAgIEdyaWQyeDJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDIuanMKdmFyIEdyaWQyeDI7CnZhciBpbml0X2dyaWRfMngyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi5qcyIoKSB7CiAgICBHcmlkMngyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0zeDIuanMKdmFyIEdyaWQzeDI7CnZhciBpbml0X2dyaWRfM3gyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTN4Mi5qcyIoKSB7CiAgICBHcmlkM3gyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtM3gzLmpzCnZhciBHcmlkM3gzOwp2YXIgaW5pdF9ncmlkXzN4MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0zeDMuanMiKCkgewogICAgR3JpZDN4MyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC1ob3Jpem9udGFsLmpzCnZhciBHcmlwSG9yaXpvbnRhbDsKdmFyIGluaXRfZ3JpcF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlwLWhvcml6b250YWwuanMiKCkgewogICAgR3JpcEhvcml6b250YWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI5IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE1IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlwLXZlcnRpY2FsLmpzCnZhciBHcmlwVmVydGljYWw7CnZhciBpbml0X2dyaXBfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAtdmVydGljYWwuanMiKCkgewogICAgR3JpcFZlcnRpY2FsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxOSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC5qcwp2YXIgR3JpcDsKdmFyIGluaXRfZ3JpcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC5qcyIoKSB7CiAgICBHcmlwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE5IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qcwp2YXIgR3JvdXA7CnZhciBpbml0X2dyb3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qcyIoKSB7CiAgICBHcm91cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YzAtMS4xLjktMiAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJjMS4xIDAgMiAuOSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYzAgMS4xLS45IDItMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWMtMS4xIDAtMi0uOS0yLTJ2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjUiLCB4OiAiNyIsIHk6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjEwIiwgeTogIjEyIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtLmpzCnZhciBIYW07CnZhciBpbml0X2hhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtLmpzIigpIHsKICAgIEhhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMy4xNDQgMjEuMTQ0QTcuMjc0IDQuMzY1IDQ1IDAgMCAyLjg1NiAxMC44NTZhNy4yNzQgNC4zNjUgNDUgMCAwIDEwLjI4OCAxMC4yODgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjU2NSAxMC40MzUgMTguNiA4LjRhMi41MDEgMi41MDEgMCAxIDAgMS42NS00LjY1IDIuNSAyLjUgMCAxIDAtNC42NiAxLjY2bC0yLjAyNCAyLjAyNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTYuNS0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ndWl0YXIuanMKdmFyIEd1aXRhcjsKdmFyIGluaXRfZ3VpdGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ndWl0YXIuanMiKCkgewogICAgR3VpdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1idXJnZXIuanMKdmFyIEhhbWJ1cmdlcjsKdmFyIGluaXRfaGFtYnVyZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1idXJnZXIuanMiKCkgewogICAgSGFtYnVyZ2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZINGEyIDIgMCAxIDEgMC00aDE2YTIgMiAwIDEgMSAwIDRoLTQuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMmEyIDIgMCAwIDEtMi0yIDkgNyAwIDAgMSAxOCAwIDIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNmEyIDIgMCAwIDAtMiAyIDMgMyAwIDAgMCAzIDNoMTJhMyAzIDAgMCAwIDMtMyAyIDIgMCAwIDAtMi0ycTAgMCAwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi42NyAxMiA2LjEzIDQuNmEyIDIgMCAwIDAgMi44LS40bDMuMTUtNC4yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtbWVyLmpzCnZhciBIYW1tZXI7CnZhciBpbml0X2hhbW1lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtbWVyLmpzIigpIHsKICAgIEhhbW1lciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyLTkuMzczIDkuMzczYTEgMSAwIDAgMS0zLjAwMS0zTDEyIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTUgNC00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjUgMTEuNS0xLjkxNC0xLjkxNEEyIDIgMCAwIDEgMTkgOC4xNzJ2LS4zNDRhMiAyIDAgMCAwLS41ODYtMS40MTRsLTEuNjU3LTEuNjU3QTYgNiAwIDAgMCAxMi41MTYgM0g5bDEuMjQzIDEuMjQzQTYgNiAwIDAgMSAxMiA4LjQ4NVYxMGwyIDJoMS4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NkwxOC41IDE0LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWNvaW5zLmpzCnZhciBIYW5kQ29pbnM7CnZhciBpbml0X2hhbmRfY29pbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtY29pbnMuanMiKCkgewogICAgSGFuZENvaW5zID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNiA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjkiLCByOiAiMi45IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1maXN0LmpzCnZhciBIYW5kRmlzdDsKdmFyIGluaXRfaGFuZF9maXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWZpc3QuanMiKCkgewogICAgSGFuZEZpc3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4wMzUgMTcuMDEyYTMgMyAwIDAgMC0zLTNsLS4zMTEtLjAwMmEuNzIuNzIgMCAwIDEtLjUwNS0xLjIyOWwxLjE5NS0xLjE5NUEyIDIgMCAwIDEgMTAuODI4IDExSDEyYTIgMiAwIDAgMCAwLTRIOS4yNDNhMyAzIDAgMCAwLTIuMTIyLjg3OWwtMi43MDcgMi43MDdBNC44MyA0LjgzIDAgMCAwIDMgMTRhOCA4IDAgMCAwIDggOGgyYTggOCAwIDAgMCA4LThWN2EyIDIgMCAxIDAtNCAwdjJhMiAyIDAgMSAwIDQgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy44ODggOS42NjJBMiAyIDAgMCAwIDE3IDhWNUEyIDIgMCAxIDAgMTMgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDVBMiAyIDAgMSAwIDUgNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNEEyIDIgMCAxIDEgMTMgNFY3LjI2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtZ3JhYi5qcwp2YXIgSGFuZEdyYWI7CnZhciBpbml0X2hhbmRfZ3JhYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1ncmFiLmpzIigpIHsKICAgIEhhbmRHcmFiID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTEuNVY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBWOGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjlWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtNGE4IDggMCAwIDEtOC04IDIgMiAwIDEgMSA0IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlYXJ0LmpzCnZhciBIYW5kSGVhcnQ7CnZhciBpbml0X2hhbmRfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtaGVhcnQuanMiKCkgewogICAgSGFuZEhlYXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMmEyIDIgMCAwIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTQuNDUgMTMuMzkgNS4wNS00LjY5NEMyMC4xOTYgOCAyMSA2Ljg1IDIxIDUuNzVhMi43NSAyLjc1IDAgMCAwLTQuNzk3LTEuODM3LjI3Ni4yNzYgMCAwIDEtLjQwNiAwQTIuNzUgMi43NSAwIDAgMCAxMSA1Ljc1YzAgMS4yLjgwMiAyLjI0OCAxLjUgMi45NDZMMTYgMTEuOTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNSA2IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm03IDIwIDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTEgMSAwIDAgMC0yLjc1LTIuOTEiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1oZWxwaW5nLmpzCnZhciBIYW5kSGVscGluZzsKdmFyIGluaXRfaGFuZF9oZWxwaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlbHBpbmcuanMiKCkgewogICAgSGFuZEhlbHBpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgyYTIgMiAwIDEgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03IDE4IDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTIgMiAwIDAgMC0yLjc1LTIuOTFsLTQuMiAzLjkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxMyA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLW1ldGFsLmpzCnZhciBIYW5kTWV0YWw7CnZhciBpbml0X2hhbmRfbWV0YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtbWV0YWwuanMiKCkgewogICAgSGFuZE1ldGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTIuNVYxMGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExVjlhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwLjVWNWEyIDIgMCAxIDAtNCAwdjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAxNS0xLjc2LTEuNzZhMiAyIDAgMCAwLTIuODMgMi44MmwzLjYgMy42QzcuNSAyMS4xNCA5LjIgMjIgMTIgMjJoMmE4IDggMCAwIDAgOC04VjdhMiAyIDAgMSAwLTQgMHY1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1wbGF0dGVyLmpzCnZhciBIYW5kUGxhdHRlcjsKdmFyIGluaXRfaGFuZF9wbGF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLXBsYXR0ZXIuanMiKCkgewogICAgSGFuZFBsYXR0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzVjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTUuNCAxNy40IDMuMi0yLjhhMiAyIDAgMSAxIDIuOCAyLjlsLTMuNiAzLjNjLS43LjgtMS43IDEuMi0yLjggMS4yaC00Yy0xLjEgMC0yLjEtLjQtMi44LTEuMmwtMS4zMDItMS40NjRBMSAxIDAgMCAwIDYuMTUxIDE5SDUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgxMmEyIDIgMCAwIDEgMCA0aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMGE3IDcgMCAwIDEgMTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE0djZhMSAxIDAgMCAxLTEgMUgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC5qcwp2YXIgSGFuZDsKdmFyIGluaXRfaGFuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC5qcyIoKSB7CiAgICBIYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTFWNmEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBWNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMC41VjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGEyIDIgMCAxIDEgNCAwdjZhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZGJhZy5qcwp2YXIgSGFuZGJhZzsKdmFyIGluaXRfaGFuZGJhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZGJhZy5qcyIoKSB7CiAgICBIYW5kYmFnID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wNDggMTguNTY2QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjk1Mi0yLjQzNGwtMi05QTIgMiAwIDAgMCAxOCA4SDZhMiAyIDAgMCAwLTEuOTUyIDEuNTY2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExVjZhNCA0IDAgMCAxIDggMHY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzCnZhciBIYW5kc2hha2U7CnZhciBpbml0X2hhbmRzaGFrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzIigpIHsKICAgIEhhbmRzaGFrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE3IDIgMmExIDEgMCAxIDAgMy0zIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0IDE0IDIuNSAyLjVhMSAxIDAgMSAwIDMtM2wtMy44OC0zLjg4YTMgMyAwIDAgMC00LjI0IDBsLS44OC44OGExIDEgMCAxIDEtMy0zbDIuODEtMi44MWE1Ljc5IDUuNzkgMCAwIDEgNy4wNi0uODdsLjQ3LjI4YTIgMiAwIDAgMCAxLjQyLjI1TDIxIDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMyAxIDExaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMyAyIDE0bDYuNSA2LjVhMSAxIDAgMSAwIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDRoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUtZG93bmxvYWQuanMKdmFyIEhhcmREcml2ZURvd25sb2FkOwp2YXIgaW5pdF9oYXJkX2RyaXZlX2Rvd25sb2FkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWRyaXZlLWRvd25sb2FkLmpzIigpIHsKICAgIEhhcmREcml2ZURvd25sb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDYtNCA0LTQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWRyaXZlLXVwbG9hZC5qcwp2YXIgSGFyZERyaXZlVXBsb2FkOwp2YXIgaW5pdF9oYXJkX2RyaXZlX3VwbG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS11cGxvYWQuanMiKCkgewogICAgSGFyZERyaXZlVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgNi00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWhhdC5qcwp2YXIgSGFyZEhhdDsKdmFyIGluaXRfaGFyZF9oYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtaGF0LmpzIigpIHsKICAgIEhhcmRIYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMFY1YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmE2IDYgMCAwIDEgNiA2djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNXYtM2E2IDYgMCAwIDEgNi02IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFzaC5qcwp2YXIgSGFzaDsKdmFyIGluaXRfaGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFzaC5qcyIoKSB7CiAgICBIYXNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiOCIsIHkxOiAiMyIsIHkyOiAiMjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjE0IiwgeTE6ICIzIiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUuanMKdmFyIEhhcmREcml2ZTsKdmFyIGluaXRfaGFyZF9kcml2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS5qcyIoKSB7CiAgICBIYXJkRHJpdmUgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2LjAxIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjEwLjAxIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXQtZ2xhc3Nlcy5qcwp2YXIgSGF0R2xhc3NlczsKdmFyIGluaXRfaGF0X2dsYXNzZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhdC1nbGFzc2VzLmpzIigpIHsKICAgIEhhdEdsYXNzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGEyIDIgMCAwIDAtNCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhemUuanMKdmFyIEhhemU7CnZhciBpbml0X2hhemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhemUuanMiKCkgewogICAgSGF6ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMiA2LjIgMS40IDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy40IDcuNiAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjFIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2E0IDQgMCAwIDAtOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDVWMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGQuanMKdmFyIEhkOwp2YXIgaW5pdF9oZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGQuanMiKCkgewogICAgSGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTQuNWEuNS41IDAgMCAwIC41LjVoMWEyLjUgMi41IDAgMCAwIDIuNS0yLjV2LTFBMi41IDIuNSAwIDAgMCAxNS41IDloLTFhLjUuNSAwIDAgMC0uNS41eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1VjkiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZG1pLXBvcnQuanMKdmFyIEhkbWlQb3J0Owp2YXIgaW5pdF9oZG1pX3BvcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hkbWktcG9ydC5qcyIoKSB7CiAgICBIZG1pUG9ydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMjIgOWExIDEgMCAwIDAtMS0xSDNhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAxIDFoMWwyIDJoMTJsMi0yaDFhMSAxIDAgMCAwIDEtMVoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMmg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0xLmpzCnZhciBIZWFkaW5nMTsKdmFyIGluaXRfaGVhZGluZ18xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTEuanMiKCkgewogICAgSGVhZGluZzEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTIgMy0ydjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTMuanMKdmFyIEhlYWRpbmczOwp2YXIgaW5pdF9oZWFkaW5nXzMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctMy5qcyIoKSB7CiAgICBIZWFkaW5nMyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwLjVjMS43LTEgMy41IDAgMy41IDEuNWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3LjVjMiAxLjUgNCAuMyA0LTEuNWEyIDIgMCAwIDAtMi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0yLmpzCnZhciBIZWFkaW5nMjsKdmFyIGluaXRfaGVhZGluZ18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTIuanMiKCkgewogICAgSGVhZGluZzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTRjMC00IDQtMyA0LTYgMC0xLjUtMi0yLjUtNC0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy00LmpzCnZhciBIZWFkaW5nNDsKdmFyIGluaXRfaGVhZGluZ180ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTQuanMiKCkgewogICAgSGVhZGluZzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctNS5qcwp2YXIgSGVhZGluZzU7CnZhciBpbml0X2hlYWRpbmdfNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy01LmpzIigpIHsKICAgIEhlYWRpbmc1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzdi0zaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTcuN2MuNC4yLjguMyAxLjMuMyAxLjUgMCAyLjctMS4xIDIuNy0yLjVTMTkuOCAxMyAxOC4zIDEzSDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy02LmpzCnZhciBIZWFkaW5nNjsKdmFyIGluaXRfaGVhZGluZ182ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTYuanMiKCkgewogICAgSGVhZGluZzYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGMtMiAyLTMgMy41LTMgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmcuanMKdmFyIEhlYWRpbmc7CnZhciBpbml0X2hlYWRpbmczID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLmpzIigpIHsKICAgIEhlYWRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHBob25lLW9mZi5qcwp2YXIgSGVhZHBob25lT2ZmOwp2YXIgaW5pdF9oZWFkcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkcGhvbmUtb2ZmLmpzIigpIHsKICAgIEhlYWRwaG9uZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0aC0xLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEyOCAzLjQ3QTkgOSAwIDAgMSAyMSAxMnYzLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNDE0IDIwLjQxNEEyIDIgMCAwIDEgMTkgMjFoLTFhMiAyIDAgMCAxLTItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAyLjYzNi02LjM2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZXMuanMKdmFyIEhlYWRwaG9uZXM7CnZhciBpbml0X2hlYWRwaG9uZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZXMuanMiKCkgewogICAgSGVhZHBob25lcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTRoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTdhOSA5IDAgMCAxIDE4IDB2N2EyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qcwp2YXIgSGVhZHNldDsKdmFyIGluaXRfaGVhZHNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qcyIoKSB7CiAgICBIZWFkc2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNVptMCAwYTkgOSAwIDEgMSAxOCAwbTAgMHY1YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djJhNCA0IDAgMCAxLTQgNGgtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWNyYWNrLmpzCnZhciBIZWFydENyYWNrOwp2YXIgaW5pdF9oZWFydF9jcmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtY3JhY2suanMiKCkgewogICAgSGVhcnRDcmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSA1LjgyNGMtLjcwMi43OTItMS4xNSAxLjQ5Ni0xLjQxNSAyLjE2NmwyLjE1MyAyLjE1NmEuNS41IDAgMCAxIDAgLjcwN2wtMi4yOTMgMi4yOTNhLjUuNSAwIDAgMCAwIC43MDdMMTIgMTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuNTA4IDIwLjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ny42LjYgMCAwIDAgLjgxOC4wMDFBNS41IDUuNSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWhhbmRzaGFrZS5qcwp2YXIgSGVhcnRIYW5kc2hha2U7CnZhciBpbml0X2hlYXJ0X2hhbmRzaGFrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtaGFuZHNoYWtlLmpzIigpIHsKICAgIEhlYXJ0SGFuZHNoYWtlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1taW51cy5qcwp2YXIgSGVhcnRNaW51czsKdmFyIGluaXRfaGVhcnRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LW1pbnVzLmpzIigpIHsKICAgIEhlYXJ0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1vZmYuanMKdmFyIEhlYXJ0T2ZmOwp2YXIgaW5pdF9oZWFydF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LW9mZi5qcyIoKSB7CiAgICBIZWFydE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjUgNC44OTNhNS41IDUuNSAwIDAgMSAxLjA5MS45MzEuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAxLjg3Mi0xLjAwMiAzLjM1Ni0yLjE4NyA0LjY1NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi45NjcgMTYuOTY3LTMuNDU5IDMuMzQ2YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDIuNzQ3LTQuNzYxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LXBsdXMuanMKdmFyIEhlYXJ0UGx1czsKdmFyIGluaXRfaGVhcnRfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcGx1cy5qcyIoKSB7CiAgICBIZWFydFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NzkgMTkuMzc0LS45NzEuOTM5YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjIxOSAxLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LXB1bHNlLmpzCnZhciBIZWFydFB1bHNlOwp2YXIgaW5pdF9oZWFydF9wdWxzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcHVsc2UuanMiKCkgewogICAgSGVhcnRQdWxzZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4yMiAxM0g5LjVsLjUtMSAyIDQuNSAyLTcgMS41IDMuNWg1LjI3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhdGVyLmpzCnZhciBIZWF0ZXI7CnZhciBpbml0X2hlYXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhdGVyLmpzIigpIHsKICAgIEhlYXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhjMi0zLTItMyAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSA4YzItMy0yLTMgMC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjB2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LmpzCnZhciBIZWFydDsKdmFyIGluaXRfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LmpzIigpIHsKICAgIEhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanMKdmFyIEhlbGljb3B0ZXI7CnZhciBpbml0X2hlbGljb3B0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanMiKCkgewogICAgSGVsaWNvcHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y4YTIgMiAwIDAgMCAyIDJoNS44NjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzSDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzCnZhciBIZXhhZ29uOwp2YXIgaW5pdF9oZXhhZ29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzIigpIHsKICAgIEhleGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaWdobGlnaHRlci5qcwp2YXIgSGlnaGxpZ2h0ZXI7CnZhciBpbml0X2hpZ2hsaWdodGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaWdobGlnaHRlci5qcyIoKSB7CiAgICBIaWdobGlnaHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtNiA2djNoOWwzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTItNC42IDQuNmEyIDIgMCAwIDEtMi44IDBsLTUuMi01LjJhMiAyIDAgMCAxIDAtMi44TDE0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzCnZhciBIaXN0b3J5Owp2YXIgaW5pdF9oaXN0b3J5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzIigpIHsKICAgIEhpc3RvcnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djVsNCAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzCnZhciBIb3A7CnZhciBpbml0X2hvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzIigpIHsKICAgIEhvcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAuODIgMTYuMTJjMS42OS42IDMuOTEuNzkgNS4xOC44NS41NS4wMyAxLS40Mi45Ny0uOTctLjA2LTEuMjctLjI2LTMuNS0uODUtNS4xOCIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNSA2LjVjMS42NCAwIDUtLjM4IDYuNzEtMS4wNy41Mi0uMi41NS0uODIuMTItMS4xN0ExMCAxMCAwIDAgMCA0LjI2IDE4LjMzYy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg4Ljg4IDAgMCAwIC43My0uNzRjLjMtMi4xNC0uMTUtMy41LS42MS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTUuNjIgMTYuOTVjLjIuODUuNjIgMi43Ni41IDQuMjhhLjc3Ljc3IDAgMCAxLS45LjcgMTYuNjQgMTYuNjQgMCAwIDEtNC4wOC0xLjM2IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2LjEzIDIxLjA1YzEuNjUuNjMgMy42OC44NCA0Ljg3LjkxYS45LjkgMCAwIDAgLjk2LS45NiAxNy42OCAxNy42OCAwIDAgMC0uOS00Ljg3IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2Ljk0IDE1LjYyYy44Ni4yIDIuNzcuNjIgNC4yOS41YS43Ny43NyAwIDAgMCAuNy0uOSAxNi42NCAxNi42NCAwIDAgMC0xLjM2LTQuMDgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuOTkgNS41MmEyMC44MiAyMC44MiAwIDAgMSAzLjE1IDQuNS44LjggMCAwIDEtLjY4IDEuMTNjLTIuMzMuMi01LjMtLjMyLTguMjctMS41NyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MyA0LjkzIDMgM2EuNy43IDAgMCAxIDAtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjU4IDEyLjE4YzEuMjQgMi45OCAxLjc3IDUuOTUgMS41NyA4LjI4YS44LjggMCAwIDEtMS4xMy42OCAyMC44MiAyMC44MiAwIDAgMS00LjUtMy4xNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvcC1vZmYuanMKdmFyIEhvcE9mZjsKdmFyIGluaXRfaG9wX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLW9mZi5qcyIoKSB7CiAgICBIb3BPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC44MiAxNi4xMmMxLjY5LjYgMy45MS43OSA1LjE4Ljg1LjI4LjAxLjUzLS4wOS43LS4yNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjE0IDIwLjU3Yy41Mi4yNCAyLjQ0IDEuMTIgNC4wOCAxLjM3LjQ2LjA2Ljg2LS4yNS45LS43MS4xMi0xLjUyLS4zLTMuNDMtLjUtNC4yOCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMTMgMjEuMDVjMS42NS42MyAzLjY4Ljg0IDQuODcuOTFhLjkuOSAwIDAgMCAuNy0uMjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNy45OSA1LjUyYTIwLjgzIDIwLjgzIDAgMCAxIDMuMTUgNC41LjguOCAwIDAgMS0uNjggMS4xM2MtMS4xNy4xLTIuNS4wMi0zLjktLjI1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NyAxMS4xNGMuMjQuNTIgMS4xMiAyLjQ0IDEuMzcgNC4wOC4wNC4zLS4wOC41OS0uMzEuNzUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC45MyA0LjkzYTEwIDEwIDAgMCAwLS42NyAxMy40Yy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg1Ljg1IDAgMCAwIC40OC0uMjQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01LjUyIDE3Ljk5YzEuMDUuOTUgMi45MSAyLjQyIDQuNSAzLjE1YS44LjggMCAwIDAgMS4xMy0uNjhjLjItMi4zNC0uMzMtNS4zLTEuNTctOC4yOCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY4YTEwIDEwIDAgMCAxIDkuOTggMS41OGMuNDMuMzUuNC45Ni0uMTIgMS4xNy0xLjUuNi00LjMuOTgtNi4wNyAxLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzCnZhciBIb3NwaXRhbDsKdmFyIGluaXRfaG9zcGl0YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzIigpIHsKICAgIEhvc3BpdGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaDJhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanMKdmFyIEhvdGVsOwp2YXIgaW5pdF9ob3RlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanMiKCkgewogICAgSG90ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtNi41NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTUuNDNWMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTZhNSA1IDAgMCAwLTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXJnbGFzcy5qcwp2YXIgSG91cmdsYXNzOwp2YXIgaW5pdF9ob3VyZ2xhc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXJnbGFzcy5qcyIoKSB7CiAgICBIb3VyZ2xhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNC4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMMTIgMTJsLTQuNDE0IDQuNDE0QTIgMiAwIDAgMCA3IDE3LjgyOFYyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1oZWFydC5qcwp2YXIgSG91c2VIZWFydDsKdmFyIGluaXRfaG91c2VfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLWhlYXJ0LmpzIigpIHsKICAgIEhvdXNlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdWcuanMKdmFyIEhvdXNlUGx1ZzsKdmFyIGluaXRfaG91c2VfcGx1ZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UtcGx1Zy5qcyIoKSB7CiAgICBIb3VzZVBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMlY4Ljk2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMlY4Ljk2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMi0ydi0yYTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAyaC01YTIgMiAwIDAgMS0yLTJ2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1wbHVzLmpzCnZhciBIb3VzZVBsdXM7CnZhciBpbml0X2hvdXNlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdXMuanMiKCkgewogICAgSG91c2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMzUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzEtMS41M2w3LTZhMiAyIDAgMCAxIDIuNTggMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuOCAxMi40QTEgMSAwIDAgMCAxNCAxMmgtNGExIDEgMCAwIDAtMSAxdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2Utd2lmaS5qcwp2YXIgSG91c2VXaWZpOwp2YXIgaW5pdF9ob3VzZV93aWZpID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS13aWZpLmpzIigpIHsKICAgIEhvdXNlV2lmaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxMy44NjZhNCA0IDAgMCAxIDUgLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTAuNzU0YTggOCAwIDAgMSAxMCAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UuanMKdmFyIEhvdXNlOwp2YXIgaW5pdF9ob3VzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UuanMiKCkgewogICAgSG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWJvd2wuanMKdmFyIEljZUNyZWFtQm93bDsKdmFyIGluaXRfaWNlX2NyZWFtX2Jvd2wgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ljZS1jcmVhbS1ib3dsLmpzIigpIHsKICAgIEljZUNyZWFtQm93bCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTIgMTdjNSAwIDgtMi42OSA4LTZINGMwIDMuMzEgMyA2IDggNm0tNCA0aDhtLTQtM3YzTTUuMTQgMTFhMy41IDMuNSAwIDEgMSA2LjcxIDAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjUgNi41YTMuNSAzLjUgMCAxIDAtNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWNvbmUuanMKdmFyIEljZUNyZWFtQ29uZTsKdmFyIGluaXRfaWNlX2NyZWFtX2NvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ljZS1jcmVhbS1jb25lLmpzIigpIHsKICAgIEljZUNyZWFtQ29uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTEgNC4wOCAxMC4zNWExIDEgMCAwIDAgMS44NCAwTDE3IDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDdBNSA1IDAgMCAwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3YTIgMiAwIDAgMSAwIDRIN2EyIDIgMCAwIDEgMC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWQtY2FyZC1sYW55YXJkLmpzCnZhciBJZENhcmRMYW55YXJkOwp2YXIgaW5pdF9pZF9jYXJkX2xhbnlhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQtbGFueWFyZC5qcyIoKSB7CiAgICBJZENhcmRMYW55YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA4aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMSAyaDNhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44OTkgMjJBNSA1IDAgMCAwIDcuMSAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIgMyA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE1IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pZC1jYXJkLmpzCnZhciBJZENhcmQ7CnZhciBpbml0X2lkX2NhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQuanMiKCkgewogICAgSWRDYXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMTcgMTVhMyAzIDAgMCAxIDUuNjYgMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjExIiwgcjogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1kb3duLmpzCnZhciBJbWFnZURvd247CnZhciBpbml0X2ltYWdlX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLWRvd24uanMiKCkgewogICAgSW1hZ2VEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE5IDMgM3YtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDMtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLW1pbnVzLmpzCnZhciBJbWFnZU1pbnVzOwp2YXIgaW5pdF9pbWFnZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtbWludXMuanMiKCkgewogICAgSW1hZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIyIiwgeTE6ICI1IiwgeTI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1vZmYuanMKdmFyIEltYWdlT2ZmOwp2YXIgaW5pdF9pbWFnZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLW9mZi5qcyIoKSB7CiAgICBJbWFnZU9mZiA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC40MSAxMC40MWEyIDIgMCAxIDEtMi44My0yLjgzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEzLjUiLCB4MjogIjYiLCB5MTogIjEzLjUiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNTkgMy41OUExLjk5IDEuOTkgMCAwIDAgMyA1djE0YTIgMiAwIDAgMCAyIDJoMTRjLjU1IDAgMS4wNTItLjIyIDEuNDEtLjU5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1VjVhMiAyIDAgMCAwLTItMkg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtcGx1cy5qcwp2YXIgSW1hZ2VQbHVzOwp2YXIgaW5pdF9pbWFnZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbHVzLmpzIigpIHsKICAgIEltYWdlUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbGF5LmpzCnZhciBJbWFnZVBsYXk7CnZhciBpbml0X2ltYWdlX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXBsYXkuanMiKCkgewogICAgSW1hZ2VQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMi4xN1Y1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIxIDUtNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwLmpzCnZhciBJbWFnZVVwOwp2YXIgaW5pdF9pbWFnZV91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXAuanMiKCkgewogICAgSW1hZ2VVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjMgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjEwbC0zLjEtMy4xYTIgMiAwIDAgMC0yLjgxNC4wMTRMNiAyMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOS41IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwc2NhbGUuanMKdmFyIEltYWdlVXBzY2FsZTsKdmFyIGluaXRfaW1hZ2VfdXBzY2FsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXBzY2FsZS5qcyIoKSB7CiAgICBJbWFnZVVwc2NhbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMWgyYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjEgNC4xNDQtNC4xNDRhMS4yMSAxLjIxIDAgMCAxIDEuNzEyIDBMMTMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjExIiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjEwIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UuanMKdmFyIEltYWdlMjsKdmFyIGluaXRfaW1hZ2UzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS5qcyIoKSB7CiAgICBJbWFnZTIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxNS0zLjA4Ni0zLjA4NmEyIDIgMCAwIDAtMi44MjggMEw2IDIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzCnZhciBJbWFnZXM7CnZhciBpbml0X2ltYWdlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzIigpIHsKICAgIEltYWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiNyIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltcG9ydC5qcwp2YXIgSW1wb3J0Owp2YXIgaW5pdF9pbXBvcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltcG9ydC5qcyIoKSB7CiAgICBJbXBvcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTEgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVINGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmJveC5qcwp2YXIgSW5ib3g7CnZhciBpbml0X2luYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmJveC5qcyIoKSB7CiAgICBJbmJveCA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgMTIgMTYgMTIgMTQgMTUgMTAgMTUgOCAxMiAyIDEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZGlhbi1ydXBlZS5qcwp2YXIgSW5kaWFuUnVwZWU7CnZhciBpbml0X2luZGlhbl9ydXBlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5kaWFuLXJ1cGVlLmpzIigpIHsKICAgIEluZGlhblJ1cGVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDEzIDguNSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzYzYuNjY3IDAgNi42NjctMTAgMC0xMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZmluaXR5LmpzCnZhciBJbmZpbml0eTI7CnZhciBpbml0X2luZmluaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmZpbml0eS5qcyIoKSB7CiAgICBJbmZpbml0eTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2YzUgMCA3LTggMTItOGE0IDQgMCAwIDEgMCA4Yy01IDAtNy04LTEyLThhNCA0IDAgMSAwIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZm8uanMKdmFyIEluZm8yOwp2YXIgaW5pdF9pbmZvMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5mby5qcyIoKSB7CiAgICBJbmZvMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zcGVjdGlvbi1wYW5lbC5qcwp2YXIgSW5zcGVjdGlvblBhbmVsOwp2YXIgaW5pdF9pbnNwZWN0aW9uX3BhbmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbnNwZWN0aW9uLXBhbmVsLmpzIigpIHsKICAgIEluc3BlY3Rpb25QYW5lbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzCnZhciBJbnN0YWdyYW07CnZhciBpbml0X2luc3RhZ3JhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzIigpIHsKICAgIEluc3RhZ3JhbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMjAiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICI1Iiwgcnk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3oiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTcuNSIsIHgyOiAiMTcuNTEiLCB5MTogIjYuNSIsIHkyOiAiNi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzCnZhciBJdGFsaWM7CnZhciBpbml0X2l0YWxpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzIigpIHsKICAgIEl0YWxpYyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxMCIsIHkxOiAiNCIsIHkyOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiNSIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jY3cuanMKdmFyIEl0ZXJhdGlvbkNjdzsKdmFyIGluaXRfaXRlcmF0aW9uX2NjdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWNjdy5qcyIoKSB7CiAgICBJdGVyYXRpb25DY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwYTggOCAwIDEgMC04IDhoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jdy5qcwp2YXIgSXRlcmF0aW9uQ3c7CnZhciBpbml0X2l0ZXJhdGlvbl9jdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWN3LmpzIigpIHsKICAgIEl0ZXJhdGlvbkN3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGE4IDggMCAxIDEgOCA4SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyMi00LTQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvamFwYW5lc2UteWVuLmpzCnZhciBKYXBhbmVzZVllbjsKdmFyIGluaXRfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9qYXBhbmVzZS15ZW4uanMiKCkgewogICAgSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5LjVWMjFtMC0xMS41TDYgM202IDYuNUwxOCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMWgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzCnZhciBKb3lzdGljazsKdmFyIGluaXRfam95c3RpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzIigpIHsKICAgIEpveXN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTdhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTV2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVWOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rYW5iYW4uanMKdmFyIEthbmJhbjsKdmFyIGluaXRfa2FuYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rYW5iYW4uanMiKCkgewogICAgS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanMKdmFyIEtheWFrOwp2YXIgaW5pdF9rYXlhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanMiKCkgewogICAgS2F5YWsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2ExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAwIDItMnoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTcgMy42MWEuNDUuNDUgMCAwIDAtLjU4LS41OEMxMC4yIDYuNiA2LjYgMTAuMiAzLjAzIDIwLjM5YS40NS40NSAwIDAgMCAuNTguNThDMTMuOCAxNy40IDE3LjQgMTMuOCAyMC45NyAzLjYxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNzA3IDYuNzA3IDEwLjU4NiAxMC41ODYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1YTIgMiAwIDEgMC0yIDJoMWExIDEgMCAwIDAgMS0xeiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS1yb3VuZC5qcwp2YXIgS2V5Um91bmQ7CnZhciBpbml0X2tleV9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LXJvdW5kLmpzIigpIHsKICAgIEtleVJvdW5kID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTcuNDE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0YTYuNSA2LjUgMCAxIDAtNC00eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktc3F1YXJlLmpzCnZhciBLZXlTcXVhcmU7CnZhciBpbml0X2tleV9zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS1zcXVhcmUuanMiKCkgewogICAgS2V5U3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNCAyLjdhMi41IDIuNSAwIDAgMSAzLjQgMGw1LjUgNS41YTIuNSAyLjUgMCAwIDEgMCAzLjRsLTMuNyAzLjdhMi41IDIuNSAwIDAgMS0zLjQgMEw4LjcgOS44YTIuNSAyLjUgMCAwIDEgMC0zLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDcgMyAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTkuNCAxMC42LTYuODE0IDYuODE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LmpzCnZhciBLZXkyOwp2YXIgaW5pdF9rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS5qcyIoKSB7CiAgICBLZXkyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuNSA3LjUgMi4zIDIuM2ExIDEgMCAwIDAgMS40IDBsMi4xLTIuMWExIDEgMCAwIDAgMC0xLjRMMTkgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyLTkuNiA5LjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE1LjUiLCByOiAiNS41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQtbXVzaWMuanMKdmFyIEtleWJvYXJkTXVzaWM7CnZhciBpbml0X2tleWJvYXJkX211c2ljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1tdXNpYy5qcyIoKSB7CiAgICBLZXlib2FyZE11c2ljID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1vZmYuanMKdmFyIEtleWJvYXJkT2ZmOwp2YXIgaW5pdF9rZXlib2FyZF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleWJvYXJkLW9mZi5qcyIoKSB7CiAgICBLZXlib2FyZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMCA0IEEyIDIgMCAwIDEgMjIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjIgNiBMIDIyIDE2LjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA3IDE2IEwgMTYgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDkuNjkgNCBMIDIwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleWJvYXJkLmpzCnZhciBLZXlib2FyZDI7CnZhciBpbml0X2tleWJvYXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC5qcyIoKSB7CiAgICBLZXlib2FyZDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtY2VpbGluZy5qcwp2YXIgTGFtcENlaWxpbmc7CnZhciBpbml0X2xhbXBfY2VpbGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC1jZWlsaW5nLmpzIigpIHsKICAgIExhbXBDZWlsaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjgyOSAxNS45OThhMyAzIDAgMSAxLTUuNjU4IDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTIgMTQuNjA2QTEgMSAwIDAgMSAyMCAxNkg0YTEgMSAwIDAgMS0uOTItMS4zOTRsMy03QTEgMSAwIDAgMSA3IDdoMTBhMSAxIDAgMCAxIC45Mi42MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC1kZXNrLmpzCnZhciBMYW1wRGVzazsKdmFyIGluaXRfbGFtcF9kZXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWRlc2suanMiKCkgewogICAgTGFtcERlc2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4yOTMgMi4yOTNhMSAxIDAgMCAxIDEuNDE0IDBsMi41IDIuNSA1Ljk5NCAxLjIyN2ExIDEgMCAwIDEgLjUwNiAxLjY4N2wtNyA3YTEgMSAwIDAgMS0xLjY4Ny0uNTA2bC0xLjIyNy01Ljk5NC0yLjUtMi41YTEgMSAwIDAgMSAwLTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjA4NiA2LjUtNC43OTMgNC43OTNhMSAxIDAgMCAwLS4xOCAxLjE3TDcgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWZsb29yLmpzCnZhciBMYW1wRmxvb3I7CnZhciBpbml0X2xhbXBfZmxvb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZmxvb3IuanMiKCkgewogICAgTGFtcEZsb29yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuOTI5IDcuNjI5QTEgMSAwIDAgMSAxNyA5SDdhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSA5IDJoNmExIDEgMCAwIDEgLjkyOC42Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtd2FsbC1kb3duLmpzCnZhciBMYW1wV2FsbERvd247CnZhciBpbml0X2xhbXBfd2FsbF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtZG93bi5qcyIoKSB7CiAgICBMYW1wV2FsbERvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgMTguNjI5QTEgMSAwIDAgMSAxOSAyMEg5YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgMTEgMTNoNmExIDEgMCAwIDEgLjkyOC42Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM2EyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg1YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZoNGEyIDIgMCAwIDEgMiAydjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtdXAuanMKdmFyIExhbXBXYWxsVXA7CnZhciBpbml0X2xhbXBfd2FsbF91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC13YWxsLXVwLmpzIigpIHsKICAgIExhbXBXYWxsVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgOS42MjlBMSAxIDAgMCAxIDE5IDExSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSA0aDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDRhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanMKdmFyIExhbXA7CnZhciBpbml0X2xhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanMiKCkgewogICAgTGFtcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC4wNzcgMTAuNjE1QTEgMSAwIDAgMCA1IDEyaDE0YTEgMSAwIDAgMCAuOTIzLTEuMzg1bC0zLjA3Ny03LjM4NEEyIDIgMCAwIDAgMTUgMkg5YTIgMiAwIDAgMC0xLjg0NiAxLjIzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIwYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg5YTEgMSAwIDAgMS0xLTF6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFuZC1wbG90LmpzCnZhciBMYW5kUGxvdDsKdmFyIGluaXRfbGFuZF9wbG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kLXBsb3QuanMiKCkgewogICAgTGFuZFBsb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDYtMy02LTN2MTAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOCAxMS45OS01LjUgMy4xNGExIDEgMCAwIDAgMCAxLjc0bDguNSA0Ljg2YTIgMiAwIDAgMCAyIDBsOC41LTQuODZhMSAxIDAgMCAwIDAtMS43NEwxNiAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQ5IDEyLjg1IDExLjAyIDYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41MSAxMi44NSA2LjUgMTkuMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qcwp2YXIgTGFuZG1hcms7CnZhciBpbml0X2xhbmRtYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qcyIoKSB7CiAgICBMYW5kbWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4di03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEyIDIuMTk4YTIgMiAwIDAgMSAxLjc2LjAwNmw3Ljg2NiAzLjg0N2MuNDc2LjIzMy4zMS45NDktLjIyLjk0OUgzLjQ3NGMtLjUzIDAtLjY5NS0uNzE2LS4yMi0uOTQ5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTh2LTciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5ndWFnZXMuanMKdmFyIExhbmd1YWdlczsKdmFyIGluaXRfbGFuZ3VhZ2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5ndWFnZXMuanMiKCkgewogICAgTGFuZ3VhZ2VzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA4IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE0IDYtNiAyLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTUtMTAtNSAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwtY2hlY2suanMKdmFyIExhcHRvcE1pbmltYWxDaGVjazsKdmFyIGluaXRfbGFwdG9wX21pbmltYWxfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC1taW5pbWFsLWNoZWNrLmpzIigpIHsKICAgIExhcHRvcE1pbmltYWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwuanMKdmFyIExhcHRvcE1pbmltYWw7CnZhciBpbml0X2xhcHRvcF9taW5pbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXB0b3AtbWluaW1hbC5qcyIoKSB7CiAgICBMYXB0b3BNaW5pbWFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC5qcwp2YXIgTGFwdG9wOwp2YXIgaW5pdF9sYXB0b3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC5qcyIoKSB7CiAgICBMYXB0b3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMDU0IDE1Ljk4N0gzLjk0NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhc3NvLXNlbGVjdC5qcwp2YXIgTGFzc29TZWxlY3Q7CnZhciBpbml0X2xhc3NvX3NlbGVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFzc28tc2VsZWN0LmpzIigpIHsKICAgIExhc3NvU2VsZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMmE1IDUgMCAwIDEtMi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTYuOTNjLjk2LjQzIDEuOTYuNzQgMi45OS45MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMuMzQgMTRBNi44IDYuOCAwIDAgMSAyIDEwYzAtNC40MiA0LjQ4LTggMTAtOHMxMCAzLjU4IDEwIDhhNy4xOSA3LjE5IDAgMCAxLS4zMyAyIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNHoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMzMgMjJoLS4wOWEuMzUuMzUgMCAwIDEtLjI0LS4zMnYtMTBhLjM0LjM0IDAgMCAxIC4zMy0uMzRjLjA4IDAgLjE1LjAzLjIxLjA4bDcuMzQgNmEuMzMuMzMgMCAwIDEtLjIxLjU5aC00LjQ5bC0yLjU3IDMuODVhLjM1LjM1IDAgMCAxLS4yOC4xNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qcwp2YXIgTGFzc287CnZhciBpbml0X2xhc3NvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qcyIoKSB7CiAgICBMYXNzbyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy43MDQgMTQuNDY3QTEwIDggMCAwIDEgMiAxMGExMCA4IDAgMCAxIDIwIDAgMTAgOCAwIDAgMS0xMCA4IDEwIDggMCAwIDEtNS4xODEtMS4xNTgiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJhNSA1IDAgMCAxLTItMy45OTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF1Z2guanMKdmFyIExhdWdoOwp2YXIgaW5pdF9sYXVnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF1Z2guanMiKCkgewogICAgTGF1Z2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLTIuanMKdmFyIExheWVyczI7CnZhciBpbml0X2xheWVyc18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtMi5qcyIoKSB7CiAgICBMYXllcnMyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMCAxNC4yODUgMS41Ljg0NWExIDEgMCAwIDEgMCAxLjc0TDEzIDIxLjc0YTIgMiAwIDAgMS0yIDBsLTguNS00Ljg3YTEgMSAwIDAgMSAwLTEuNzRsMS41LS44NDUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMuanMKdmFyIExheWVyczM7CnZhciBpbml0X2xheWVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLmpzIigpIHsKICAgIExheWVyczMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi44MyAyLjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDYuMDhhMSAxIDAgMCAwIDAgMS44M2w4LjU4IDMuOTFhMiAyIDAgMCAwIDEuNjYgMGw4LjU4LTMuOWExIDEgMCAwIDAgMC0xLjgzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLXBsdXMuanMKdmFyIExheWVyc1BsdXM7CnZhciBpbml0X2xheWVyc19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtcGx1cy5qcyIoKSB7CiAgICBMYXllcnNQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDIuMTE2LS45NjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtZGFzaGJvYXJkLmpzCnZhciBMYXlvdXREYXNoYm9hcmQ7CnZhciBpbml0X2xheW91dF9kYXNoYm9hcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1kYXNoYm9hcmQuanMiKCkgewogICAgTGF5b3V0RGFzaGJvYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjkiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjkiLCB4OiAiMTQiLCB5OiAiMTIiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1ncmlkLmpzCnZhciBMYXlvdXRHcmlkOwp2YXIgaW5pdF9sYXlvdXRfZ3JpZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LWdyaWQuanMiKCkgewogICAgTGF5b3V0R3JpZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjE0IiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtbGlzdC5qcwp2YXIgTGF5b3V0TGlzdDsKdmFyIGluaXRfbGF5b3V0X2xpc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1saXN0LmpzIigpIHsKICAgIExheW91dExpc3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1wYW5lbC1sZWZ0LmpzCnZhciBMYXlvdXRQYW5lbExlZnQ7CnZhciBpbml0X2xheW91dF9wYW5lbF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtbGVmdC5qcyIoKSB7CiAgICBMYXlvdXRQYW5lbExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtdG9wLmpzCnZhciBMYXlvdXRQYW5lbFRvcDsKdmFyIGluaXRfbGF5b3V0X3BhbmVsX3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXBhbmVsLXRvcC5qcyIoKSB7CiAgICBMYXlvdXRQYW5lbFRvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC10ZW1wbGF0ZS5qcwp2YXIgTGF5b3V0VGVtcGxhdGU7CnZhciBpbml0X2xheW91dF90ZW1wbGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXRlbXBsYXRlLmpzIigpIHsKICAgIExheW91dFRlbXBsYXRlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI3IiwgeDogIjE2IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qcwp2YXIgTGVhZjsKdmFyIGluaXRfbGVhZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qcyIoKSB7CiAgICBMZWFmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMSAyMEE3IDcgMCAwIDEgOS44IDYuMUMxNS41IDUgMTcgNC40OCAxOSAyYzEgMiAyIDQuMTggMiA4IDAgNS41LTQuNzggMTAtMTAgMTBaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlYWZ5LWdyZWVuLmpzCnZhciBMZWFmeUdyZWVuOwp2YXIgaW5pdF9sZWFmeV9ncmVlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZnktZ3JlZW4uanMiKCkgewogICAgTGVhZnlHcmVlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjJjMS4yNS0uOTg3IDIuMjctMS45NzUgMy45LTIuMmE1LjU2IDUuNTYgMCAwIDEgMy44IDEuNSA0IDQgMCAwIDAgNi4xODctMi4zNTMgMy41IDMuNSAwIDAgMCAzLjY5LTUuMTE2QTMuNSAzLjUgMCAwIDAgMjAuOTUgOCAzLjUgMy41IDAgMSAwIDE2IDMuMDVhMy41IDMuNSAwIDAgMC01LjgzMSAxLjM3MyAzLjUgMy41IDAgMCAwLTUuMTE2IDMuNjkgNCA0IDAgMCAwLTIuMzQ4IDYuMTU1QzMuNDk5IDE1LjQyIDQuNDA5IDE2LjcxMiA0LjIgMTguMSAzLjkyNiAxOS43NDMgMy4wMTQgMjAuNzMyIDIgMjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNyA3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qcwp2YXIgTGVjdGVybjsKdmFyIGluaXRfbGVjdGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qcyIoKSB7CiAgICBMZWN0ZXJuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlYzYTEgMSAwIDAgMC0xLTFoLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjEyIiwgeDogIjgiLCB5OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWJyYXJ5LWJpZy5qcwp2YXIgTGlicmFyeUJpZzsKdmFyIGluaXRfbGlicmFyeV9iaWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnktYmlnLmpzIigpIHsKICAgIExpYnJhcnlCaWcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlicmFyeS5qcwp2YXIgTGlicmFyeTI7CnZhciBpbml0X2xpYnJhcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnkuanMiKCkgewogICAgTGlicmFyeTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2IDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlmZS1idW95LmpzCnZhciBMaWZlQnVveTsKdmFyIGluaXRfbGlmZV9idW95ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWZlLWJ1b3kuanMiKCkgewogICAgTGlmZUJ1b3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgNC4yNCA0LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjgzIDkuMTcgNC4yNC00LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjgzIDE0LjgzIDQuMjQgNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjE3IDE0LjgzLTQuMjQgNC4yNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnYXR1cmUuanMKdmFyIExpZ2F0dXJlOwp2YXIgaW5pdF9saWdhdHVyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnYXR1cmUuanMiKCkgewogICAgTGlnYXR1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmgydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBWOGE0IDQgMCAwIDEgNy40NjQtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2h0YnVsYi1vZmYuanMKdmFyIExpZ2h0YnVsYk9mZjsKdmFyIGluaXRfbGlnaHRidWxiX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnaHRidWxiLW9mZi5qcyIoKSB7CiAgICBMaWdodGJ1bGJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44IDExLjJjLjgtLjkgMS4yLTIgMS4yLTMuMmE2IDYgMCAwIDAtOS4zLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyA2LjNhNC42NyA0LjY3IDAgMCAwIDEuMiA1LjJjLjcuNyAxLjMgMS41IDEuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdodGJ1bGIuanMKdmFyIExpZ2h0YnVsYjsKdmFyIGluaXRfbGlnaHRidWxiID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdodGJ1bGIuanMiKCkgewogICAgTGlnaHRidWxiID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTRjLjItMSAuNy0xLjcgMS41LTIuNSAxLS45IDEuNS0yLjIgMS41LTMuNUE2IDYgMCAwIDAgNiA4YzAgMSAuMiAyLjIgMS41IDMuNS43LjcgMS4zIDEuNSAxLjUgMi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluZS1zcXVpZ2dsZS5qcwp2YXIgTGluZVNxdWlnZ2xlOwp2YXIgaW5pdF9saW5lX3NxdWlnZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5lLXNxdWlnZ2xlLmpzIigpIHsKICAgIExpbmVTcXVpZ2dsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjVjNS0yIDcgMi41IDMgNEMxLjUgMTAgMiAxNSA1IDE2YzUgMiA5LTEwIDE0LTdzLjUgMTMuNS00IDEyYy01LTIuNS41LTExIDYtMiIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTIuanMKdmFyIExpbmsyOwp2YXIgaW5pdF9saW5rXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmstMi5qcyIoKSB7CiAgICBMaW5rMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTItb2ZmLmpzCnZhciBMaW5rMk9mZjsKdmFyIGluaXRfbGlua18yX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay0yLW9mZi5qcyIoKSB7CiAgICBMaW5rMk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDdoMmE1IDUgMCAwIDEgNCA4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjEyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay5qcwp2YXIgTGluazsKdmFyIGluaXRfbGluazQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmsuanMiKCkgewogICAgTGluayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rZWRpbi5qcwp2YXIgTGlua2VkaW47CnZhciBpbml0X2xpbmtlZGluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rZWRpbi5qcyIoKSB7CiAgICBMaW5rZWRpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZWNrLmpzCnZhciBMaXN0Q2hlY2s7CnZhciBpbml0X2xpc3RfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hlY2suanMiKCkgewogICAgTGlzdENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGVja3MuanMKdmFyIExpc3RDaGVja3M7CnZhciBpbml0X2xpc3RfY2hlY2tzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZWNrcy5qcyIoKSB7CiAgICBMaXN0Q2hlY2tzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE3IDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZXZyb25zLWRvd24tdXAuanMKdmFyIExpc3RDaGV2cm9uc0Rvd25VcDsKdmFyIGluaXRfbGlzdF9jaGV2cm9uc19kb3duX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZXZyb25zLWRvd24tdXAuanMiKCkgewogICAgTGlzdENoZXZyb25zRG93blVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTkgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtdXAtZG93bi5qcwp2YXIgTGlzdENoZXZyb25zVXBEb3duOwp2YXIgaW5pdF9saXN0X2NoZXZyb25zX3VwX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtdXAtZG93bi5qcyIoKSB7CiAgICBMaXN0Q2hldnJvbnNVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDggMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNiAzIDMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jb2xsYXBzZS5qcwp2YXIgTGlzdENvbGxhcHNlOwp2YXIgaW5pdF9saXN0X2NvbGxhcHNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNvbGxhcHNlLmpzIigpIHsKICAgIExpc3RDb2xsYXBzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjAgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZW5kLmpzCnZhciBMaXN0RW5kOwp2YXIgaW5pdF9saXN0X2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1lbmQuanMiKCkgewogICAgTGlzdEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLXBsdXMuanMKdmFyIExpc3RGaWx0ZXJQbHVzOwp2YXIgaW5pdF9saXN0X2ZpbHRlcl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWZpbHRlci1wbHVzLmpzIigpIHsKICAgIExpc3RGaWx0ZXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA4VjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWZpbHRlci5qcwp2YXIgTGlzdEZpbHRlcjsKdmFyIGluaXRfbGlzdF9maWx0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLmpzIigpIHsKICAgIExpc3RGaWx0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDVoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1kZWNyZWFzZS5qcwp2YXIgTGlzdEluZGVudERlY3JlYXNlOwp2YXIgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1pbmRlbnQtZGVjcmVhc2UuanMiKCkgewogICAgTGlzdEluZGVudERlY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtaW5kZW50LWluY3JlYXNlLmpzCnZhciBMaXN0SW5kZW50SW5jcmVhc2U7CnZhciBpbml0X2xpc3RfaW5kZW50X2luY3JlYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1pbmNyZWFzZS5qcyIoKSB7CiAgICBMaXN0SW5kZW50SW5jcmVhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0IDQtNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1taW51cy5qcwp2YXIgTGlzdE1pbnVzOwp2YXIgaW5pdF9saXN0X21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW1pbnVzLmpzIigpIHsKICAgIExpc3RNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW11c2ljLmpzCnZhciBMaXN0TXVzaWM7CnZhciBpbml0X2xpc3RfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtbXVzaWMuanMiKCkgewogICAgTGlzdE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNlY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW9yZGVyZWQuanMKdmFyIExpc3RPcmRlcmVkOwp2YXIgaW5pdF9saXN0X29yZGVyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtb3JkZXJlZC5qcyIoKSB7CiAgICBMaXN0T3JkZXJlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0aDF2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjUgMjBIMy40YzAtMSAyLjYtMS45MjUgMi42LTMuNWExLjUgMS41IDAgMCAwLTIuNi0xLjAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1wbHVzLmpzCnZhciBMaXN0UGx1czsKdmFyIGluaXRfbGlzdF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXBsdXMuanMiKCkgewogICAgTGlzdFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtcmVzdGFydC5qcwp2YXIgTGlzdFJlc3RhcnQ7CnZhciBpbml0X2xpc3RfcmVzdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1yZXN0YXJ0LmpzIigpIHsKICAgIExpc3RSZXN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMSAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMHY0aDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXN0YXJ0LmpzCnZhciBMaXN0U3RhcnQ7CnZhciBpbml0X2xpc3Rfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtc3RhcnQuanMiKCkgewogICAgTGlzdFN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOVY3YTIgMiAwIDAgMC0yLTJoLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXRvZG8uanMKdmFyIExpc3RUb2RvOwp2YXIgaW5pdF9saXN0X3RvZG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdG9kby5qcyIoKSB7CiAgICBMaXN0VG9kbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNyAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdHJlZS5qcwp2YXIgTGlzdFRyZWU7CnZhciBpbml0X2xpc3RfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC10cmVlLmpzIigpIHsKICAgIExpc3RUcmVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTJhMiAyIDAgMCAwIDIgMmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC12aWRlby5qcwp2YXIgTGlzdFZpZGVvOwp2YXIgaW5pdF9saXN0X3ZpZGVvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXZpZGVvLmpzIigpIHsKICAgIExpc3RWaWRlbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QteC5qcwp2YXIgTGlzdFg7CnZhciBpbml0X2xpc3RfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC14LmpzIigpIHsKICAgIExpc3RYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDkuNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNSA5LjUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5qcwp2YXIgTG9hZGVyQ2lyY2xlOwp2YXIgaW5pdF9sb2FkZXJfY2lyY2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXItY2lyY2xlLmpzIigpIHsKICAgIExvYWRlckNpcmNsZSA9IFtbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC5qcwp2YXIgTGlzdDsKdmFyIGluaXRfbGlzdDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QuanMiKCkgewogICAgTGlzdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgxMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci1waW53aGVlbC5qcwp2YXIgTG9hZGVyUGlud2hlZWw7CnZhciBpbml0X2xvYWRlcl9waW53aGVlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9hZGVyLXBpbndoZWVsLmpzIigpIHsKICAgIExvYWRlclBpbndoZWVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJhMSAxIDAgMCAxLTEwIDAgMSAxIDAgMCAwLTEwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMC43YTEgMSAwIDEgMSA1LTguNyAxIDEgMCAxIDAgNS04LjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzLjNhMSAxIDAgMSAxIDUgOC42IDEgMSAwIDEgMCA1IDguNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qcwp2YXIgTG9hZGVyOwp2YXIgaW5pdF9sb2FkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qcyIoKSB7CiAgICBMb2FkZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMiA3LjggMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjIgMTYuMiAyLjkgMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDE5LjEgMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDQuOSAyLjkgMi45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jYXRlLWZpeGVkLmpzCnZhciBMb2NhdGVGaXhlZDsKdmFyIGluaXRfbG9jYXRlX2ZpeGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUtZml4ZWQuanMiKCkgewogICAgTG9jYXRlRml4ZWQgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICI1IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICI1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTkiLCB5MjogIjIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1vZmYuanMKdmFyIExvY2F0ZU9mZjsKdmFyIGluaXRfbG9jYXRlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jYXRlLW9mZi5qcyIoKSB7CiAgICBMb2NhdGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yNGE3IDcgMCAwIDAtOC4xMy04LjEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjA1IDcuMDVhNyA3IDAgMCAwIDkuOSA5LjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanMKdmFyIExvY2F0ZTsKdmFyIGluaXRfbG9jYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanMiKCkgewogICAgTG9jYXRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jay1rZXlob2xlLW9wZW4uanMKdmFyIExvY2tLZXlob2xlT3BlbjsKdmFyIGluaXRfbG9ja19rZXlob2xlX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS1vcGVuLmpzIigpIHsKICAgIExvY2tLZXlob2xlT3BlbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgOS4zMy0yLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLWtleWhvbGUuanMKdmFyIExvY2tLZXlob2xlOwp2YXIgaW5pdF9sb2NrX2tleWhvbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS5qcyIoKSB7CiAgICBMb2NrS2V5aG9sZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjEwIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jay1vcGVuLmpzCnZhciBMb2NrT3BlbjsKdmFyIGluaXRfbG9ja19vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLW9wZW4uanMiKCkgewogICAgTG9ja09wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjExIiwgeDogIjMiLCB5OiAiMTEiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanMKdmFyIExvY2s7CnZhciBpbml0X2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanMiKCkgewogICAgTG9jayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTEiLCB4OiAiMyIsIHk6ICIxMSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvZy1pbi5qcwp2YXIgTG9nSW47CnZhciBpbml0X2xvZ19pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9nLWluLmpzIigpIHsKICAgIExvZ0luID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctb3V0LmpzCnZhciBMb2dPdXQ7CnZhciBpbml0X2xvZ19vdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvZy1vdXQuanMiKCkgewogICAgTG9nT3V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qcwp2YXIgTG9nczsKdmFyIGluaXRfbG9ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qcyIoKSB7CiAgICBMb2dzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2xsaXBvcC5qcwp2YXIgTG9sbGlwb3A7CnZhciBpbml0X2xvbGxpcG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2xsaXBvcC5qcyIoKSB7CiAgICBMb2xsaXBvcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMWEyIDIgMCAwIDAgNCAwIDQgNCAwIDAgMC04IDAgNiA2IDAgMCAwIDEyIDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sdWdnYWdlLmpzCnZhciBMdWdnYWdlOwp2YXIgaW5pdF9sdWdnYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sdWdnYWdlLmpzIigpIHsKICAgIEx1Z2dhZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qcwp2YXIgTWFnbmV0Owp2YXIgaW5pdF9tYWduZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qcyIoKSB7CiAgICBNYWduZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4zNTIgMTAuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw2LjAyOS02LjAyOWExIDEgMCAxIDEgMyAzbC02LjAyOSA2LjAyOWExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNi4zNjUtNi4zNjdBMSAxIDAgMCAwIDguNzE2IDQuMjgyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1jaGVjay5qcwp2YXIgTWFpbENoZWNrOwp2YXIgaW5pdF9tYWlsX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLWNoZWNrLmpzIigpIHsKICAgIE1haWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtbWludXMuanMKdmFyIE1haWxNaW51czsKdmFyIGluaXRfbWFpbF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1taW51cy5qcyIoKSB7CiAgICBNYWlsTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLW9wZW4uanMKdmFyIE1haWxPcGVuOwp2YXIgaW5pdF9tYWlsX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtb3Blbi5qcyIoKSB7CiAgICBNYWlsT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1wbHVzLmpzCnZhciBNYWlsUGx1czsKdmFyIGluaXRfbWFpbF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXBsdXMuanMiKCkgewogICAgTWFpbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM1Y2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtcXVlc3Rpb24tbWFyay5qcwp2YXIgTWFpbFF1ZXN0aW9uTWFyazsKdmFyIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgTWFpbFF1ZXN0aW9uTWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNS4yOGMuMi0uNC41LS44LjktMWEyLjEgMi4xIDAgMCAxIDIuNi40Yy4zLjQuNS44LjUgMS4zIDAgMS4zLTIgMi0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJ2LjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1zZWFyY2guanMKdmFyIE1haWxTZWFyY2g7CnZhciBpbml0X21haWxfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXNlYXJjaC5qcyIoKSB7CiAgICBNYWlsU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTIuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2WiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuNS0xLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXdhcm5pbmcuanMKdmFyIE1haWxXYXJuaW5nOwp2YXIgaW5pdF9tYWlsX3dhcm5pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtd2FybmluZy5qcyIoKSB7CiAgICBNYWlsV2FybmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIydi4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwteC5qcwp2YXIgTWFpbFg7CnZhciBpbml0X21haWxfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC14LmpzIigpIHsKICAgIE1haWxYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTctNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC5qcwp2YXIgTWFpbDsKdmFyIGluaXRfbWFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC5qcyIoKSB7CiAgICBNYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk5MSA1LjcyN2EyIDIgMCAwIDEtMi4wMDkgMEwyIDciIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsYm94LmpzCnZhciBNYWlsYm94Owp2YXIgaW5pdF9tYWlsYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsYm94LmpzIigpIHsKICAgIE1haWxib3ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5LjVDMiA3IDQgNSA2LjUgNUgxOGMyLjIgMCA0IDEuOCA0IDR2OFoiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNSw5IDE4LDkgMTgsMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDVDOSA1IDExIDcgMTEgOS41VjE3YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNyIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbHMuanMKdmFyIE1haWxzOwp2YXIgaW5pdF9tYWlscyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbHMuanMiKCkgewogICAgTWFpbHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMS0xLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA1LjUtNi40MTkgNC4xNzlhMiAyIDAgMCAxLTIuMTYyIDBMNyA1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjMiLCB3aWR0aDogIjE1IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtbWludXMuanMKdmFyIE1hcE1pbnVzOwp2YXIgaW5pdF9tYXBfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1taW51cy5qcyIoKSB7CiAgICBNYXBNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTExIDE5LTEuMTA2LS41NTJhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDBsNC4yMTIgMi4xMDZhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTlWMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNS43NjRWMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2staW5zaWRlLmpzCnZhciBNYXBQaW5DaGVja0luc2lkZTsKdmFyIGluaXRfbWFwX3Bpbl9jaGVja19pbnNpZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2staW5zaWRlLmpzIigpIHsKICAgIE1hcFBpbkNoZWNrSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2suanMKdmFyIE1hcFBpbkNoZWNrOwp2YXIgaW5pdF9tYXBfcGluX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLWNoZWNrLmpzIigpIHsKICAgIE1hcFBpbkNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDMgMTIuOTM1Yy4zNTctLjk2Ny41Ny0xLjk1NS41Ny0yLjkzNWE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIuMTk3IDMyLjE5NyAwIDAgMCAuODEzLS43MjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1ob3VzZS5qcwp2YXIgTWFwUGluSG91c2U7CnZhciBpbml0X21hcF9waW5faG91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4taG91c2UuanMiKCkgewogICAgTWFwUGluSG91c2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMmExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAuNDQ1LS44MzJsMy0yYTEgMSAwIDAgMSAxLjExIDBsMyAyQTEgMSAwIDAgMSAyMiAxN3Y0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgLjYwMS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLWluc2lkZS5qcwp2YXIgTWFwUGluTWludXNJbnNpZGU7CnZhciBpbml0X21hcF9waW5fbWludXNfaW5zaWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLWluc2lkZS5qcyIoKSB7CiAgICBNYXBQaW5NaW51c0luc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLmpzCnZhciBNYXBQaW5NaW51czsKdmFyIGluaXRfbWFwX3Bpbl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1taW51cy5qcyIoKSB7CiAgICBNYXBQaW5NaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk3NyAxNEMxOS42IDEyLjcwMSAyMCAxMS4zNDMgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW9mZi5qcwp2YXIgTWFwUGluT2ZmOwp2YXIgaW5pdF9tYXBfcGluX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1vZmYuanMiKCkgewogICAgTWFwUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjA3MiAxNy4wNzJjLTEuNjM0IDIuMTctMy41MjcgMy45MTItNC40NzEgNC43MjdhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDEuNDMyLTQuNTY4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTMgOS4xM2EzIDMgMCAwIDAgMy43NCAzLjc0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wZW4uanMKdmFyIE1hcFBpblBlbjsKdmFyIGluaXRfbWFwX3Bpbl9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGVuLmpzIigpIHsKICAgIE1hcFBpblBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk3IDkuMzA0QTggOCAwIDAgMCAyIDEwYzAgNC42OSA0Ljg4NyA5LjU2MiA3LjAyMiAxMS40NjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzCnZhciBNYXBQaW5QbHVzSW5zaWRlOwp2YXIgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzIigpIHsKICAgIE1hcFBpblBsdXNJbnNpZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGx1cy5qcwp2YXIgTWFwUGluUGx1czsKdmFyIGluaXRfbWFwX3Bpbl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMuanMiKCkgewogICAgTWFwUGluUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjkxNCAxMS4xMDVBNy4yOTggNy4yOTggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTV2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC1pbnNpZGUuanMKdmFyIE1hcFBpblhJbnNpZGU7CnZhciBpbml0X21hcF9waW5feF9pbnNpZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC1pbnNpZGUuanMiKCkgewogICAgTWFwUGluWEluc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDcuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXguanMKdmFyIE1hcFBpblg7CnZhciBpbml0X21hcF9waW5feCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi14LmpzIigpIHsKICAgIE1hcFBpblggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS43NTIgMTEuOTAxQTcuNzggNy43OCAwIDAgMCAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMTkgMTkgMCAwIDAgLjA5LS4wNzciCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDE1LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMjAuNS01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLmpzCnZhciBNYXBQaW47CnZhciBpbml0X21hcF9waW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4uanMiKCkgewogICAgTWFwUGluID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGlubmVkLmpzCnZhciBNYXBQaW5uZWQ7CnZhciBpbml0X21hcF9waW5uZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW5uZWQuanMiKCkgewogICAgTWFwUGlubmVkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MTQgMTRoLTMuNzFhMSAxIDAgMCAwLS45NDguNjgzbC0yLjAwNCA2QTEgMSAwIDAgMCAzIDIyaDE4YTEgMSAwIDAgMCAuOTQ4LTEuMzE2bC0yLTZhMSAxIDAgMCAwLS45NDktLjY4NGgtMy43MTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGx1cy5qcwp2YXIgTWFwUGx1czsKdmFyIGluaXRfbWFwX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1wbHVzLmpzIigpIHsKICAgIE1hcFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC5qcwp2YXIgTWFwMjsKdmFyIGluaXRfbWFwMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLmpzIigpIHsKICAgIE1hcDIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4xMDYgNS41NTNhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTl2MTIuNzY0YTEgMSAwIDAgMS0uNTUzLjg5NGwtNC41NTMgMi4yNzdhMiAyIDAgMCAxLTEuNzg4IDBsLTQuMjEyLTIuMTA2YTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1Ljc2NHYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDMuMjM2djE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy1zdHJva2UuanMKdmFyIE1hcnNTdHJva2U7CnZhciBpbml0X21hcnNfc3Ryb2tlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJzLXN0cm9rZS5qcyIoKSB7CiAgICBNYXJzU3Ryb2tlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNiA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2g0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy03Ljc1IDcuNzUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxNSIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy5qcwp2YXIgTWFyczsKdmFyIGluaXRfbWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy5qcyIoKSB7CiAgICBNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2g1djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy02Ljc1IDYuNzUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTQiLCByOiAiNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnRpbmkuanMKdmFyIE1hcnRpbmk7CnZhciBpbml0X21hcnRpbmkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnRpbmkuanMiKCkgewogICAgTWFydGluaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAzLTcgOC03LThaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWF4aW1pemUtMi5qcwp2YXIgTWF4aW1pemUyOwp2YXIgaW5pdF9tYXhpbWl6ZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXhpbWl6ZS0yLmpzIigpIHsKICAgIE1heGltaXplMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFIM3YtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzCnZhciBNYXhpbWl6ZTsKdmFyIGluaXRfbWF4aW1pemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzIigpIHsKICAgIE1heGltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWNWEyIDIgMCAwIDAtMi0yaC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVnYXBob25lLW9mZi5qcwp2YXIgTWVnYXBob25lT2ZmOwp2YXIgaW5pdF9tZWdhcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWdhcGhvbmUtb2ZmLmpzIigpIHsKICAgIE1lZ2FwaG9uZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjYzNiA2QTEzIDEzIDAgMCAwIDE5LjQgMy4yIDEgMSAwIDAgMSAyMSA0djExLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4zNzggMTQuMzU3QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGExMiAxMiAwIDAgMCAyLjQgNy4yIDIgMiAwIDAgMCAzLjItMi40QTggOCAwIDAgMSAxMCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qcwp2YXIgTWVnYXBob25lOwp2YXIgaW5pdF9tZWdhcGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qcyIoKSB7CiAgICBNZWdhcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA2YTEzIDEzIDAgMCAwIDguNC0yLjhBMSAxIDAgMCAxIDIxIDR2MTJhMSAxIDAgMCAxLTEuNi44QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWRhbC5qcwp2YXIgTWVkYWw7CnZhciBpbml0X21lZGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWRhbC5qcyIoKSB7CiAgICBNZWRhbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcuMjEgMTUgMi42NiA3LjE0YTIgMiAwIDAgMSAuMTMtMi4yTDQuNCAyLjhBMiAyIDAgMCAxIDYgMmgxMmEyIDIgMCAwIDEgMS42LjhsMS42IDIuMTRhMiAyIDAgMCAxIC4xNCAyLjJMMTYuNzkgMTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTIgNS4xMiAyLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTIgNS44OC05LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTciLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtMmgtLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWguanMKdmFyIE1laDsKdmFyIGluaXRfbWVoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWguanMiKCkgewogICAgTWVoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lbW9yeS1zdGljay5qcwp2YXIgTWVtb3J5U3RpY2s7CnZhciBpbml0X21lbW9yeV9zdGljayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVtb3J5LXN0aWNrLmpzIigpIHsKICAgIE1lbW9yeVN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNSAxMUgyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lcmdlLmpzCnZhciBNZXJnZTsKdmFyIGluaXRfbWVyZ2U0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXJnZS5qcyIoKSB7CiAgICBNZXJnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAuM2E0IDQgMCAwIDEtMS4xNzIgMi44NzJMNCAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAyMi01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzCnZhciBNZW51Owp2YXIgaW5pdF9tZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzIigpIHsKICAgIE1lbnUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDVoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5aDE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtY29kZS5qcwp2YXIgTWVzc2FnZUNpcmNsZUNvZGU7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWNvZGUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUgMy0zLTMtMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWRhc2hlZC5qcwp2YXIgTWVzc2FnZUNpcmNsZURhc2hlZDsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1kYXNoZWQuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjA5IDMuNzJhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWhlYXJ0LmpzCnZhciBNZXNzYWdlQ2lyY2xlSGVhcnQ7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1oZWFydC5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDUuMDA0IDIuMjI0IDMgMyAwIDAgMS0uODMyIDIuMDgzbC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ1LS4wMDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtbW9yZS5qcwp2YXIgTWVzc2FnZUNpcmNsZU1vcmU7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW1vcmUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtb2ZmLmpzCnZhciBNZXNzYWdlQ2lyY2xlT2ZmOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW9mZi5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuOTMgNC45MjlhMTAgMTAgMCAwIDAtMS45MzggMTEuNDEyIDIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAwIDAgMTEuMzAyLTEuOTg5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzUgMi42OUExMCAxMCAwIDAgMSAyMS4zIDE1LjY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcGx1cy5qcwp2YXIgTWVzc2FnZUNpcmNsZVBsdXM7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXBsdXMuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZVBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcXVlc3Rpb24tbWFyay5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcmVwbHkuanMKdmFyIE1lc3NhZ2VDaXJjbGVSZXBseTsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXJlcGx5LmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg4YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXdhcm5pbmcuanMKdmFyIE1lc3NhZ2VDaXJjbGVXYXJuaW5nOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS13YXJuaW5nLmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVXYXJuaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXguanMKdmFyIE1lc3NhZ2VDaXJjbGVYOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS14LmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLmpzCnZhciBNZXNzYWdlQ2lyY2xlOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtY29kZS5qcwp2YXIgTWVzc2FnZVNxdWFyZUNvZGU7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWNvZGUuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOC0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kYXNoZWQuanMKdmFyIE1lc3NhZ2VTcXVhcmVEYXNoZWQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZGFzaGVkLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTd2NC4yODZhLjcxLjcxIDAgMCAwIDEuMjEyLjUwMmwyLjIwMi0yLjIwMkEyIDIgMCAwIDEgNi44MjggMTlIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDVhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZGlmZi5qcwp2YXIgTWVzc2FnZVNxdWFyZURpZmY7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2RpZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRpZmYuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZURpZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZG90LmpzCnZhciBNZXNzYWdlU3F1YXJlRG90Owp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRvdC5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNyAzSDRhMiAyIDAgMCAwLTIgMnYxNi4yODZhLjcxLjcxIDAgMCAwIDEuMjEyLjUwMmwyLjIwMi0yLjIwMkEyIDIgMCAwIDEgNi44MjggMTlIMjBhMiAyIDAgMCAwIDItMnYtNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWhlYXJ0LmpzCnZhciBNZXNzYWdlU3F1YXJlSGVhcnQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1oZWFydC5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy41IDkuNWMwIC42ODcuMjY1IDEuMzgzLjY5NyAxLjg0NGwzLjAwOSAzLjI2NGExLjE0IDEuMTQgMCAwIDAgLjQwNy4zMTQgMSAxIDAgMCAwIC43ODMtLjAwNCAxLjE0IDEuMTQgMCAwIDAgLjM5OC0uMzFsMy4wMDgtMy4yNjRBMi43NyAyLjc3IDAgMCAwIDE2LjUgOS41IDIuNSAyLjUgMCAwIDAgMTIgOGEyLjUgMi41IDAgMCAwLTQuNSAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1sb2NrLmpzCnZhciBNZXNzYWdlU3F1YXJlTG9jazsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtbG9jay5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlTG9jayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDguNVY1YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgxMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNXYtMmEyIDIgMCAwIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNSIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1tb3JlLmpzCnZhciBNZXNzYWdlU3F1YXJlTW9yZTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfbW9yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtbW9yZS5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlTW9yZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtb2ZmLmpzCnZhciBNZXNzYWdlU3F1YXJlT2ZmOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLW9mZi5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTlINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcuNyAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAxLjE4NC0xLjgyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NTYgM0gyMGEyIDIgMCAwIDEgMiAydjExLjM0NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXBsdXMuanMKdmFyIE1lc3NhZ2VTcXVhcmVQbHVzOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1wbHVzLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1xdW90ZS5qcwp2YXIgTWVzc2FnZVNxdWFyZVF1b3RlOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcXVvdGUuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVF1b3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTRhMiAyIDAgMCAwIDItMlY4aC0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0YTIgMiAwIDAgMCAyLTJWOEg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcmVwbHkuanMKdmFyIE1lc3NhZ2VTcXVhcmVSZXBseTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXJlcGx5LmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA4LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTR2LTFhMiAyIDAgMCAwLTItMkg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtc2hhcmUuanMKdmFyIE1lc3NhZ2VTcXVhcmVTaGFyZTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXNoYXJlLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVTaGFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDkgNi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtdGV4dC5qcwp2YXIgTWVzc2FnZVNxdWFyZVRleHQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXRleHQuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVRleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS13YXJuaW5nLmpzCnZhciBNZXNzYWdlU3F1YXJlV2FybmluZzsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtd2FybmluZy5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlV2FybmluZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUteC5qcwp2YXIgTWVzc2FnZVNxdWFyZVg7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXguanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA4LjUgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUuanMKdmFyIE1lc3NhZ2VTcXVhcmU7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZXMtc3F1YXJlLmpzCnZhciBNZXNzYWdlc1NxdWFyZTsKdmFyIGluaXRfbWVzc2FnZXNfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlcy1zcXVhcmUuanMiKCkgewogICAgTWVzc2FnZXNTcXVhcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAxMGEyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDE0LjI4NlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOWEyIDIgMCAwIDEgMiAydjEwLjI4NmEuNzEuNzEgMCAwIDEtMS4yMTIuNTAybC0yLjIwMi0yLjIwMkEyIDIgMCAwIDAgMTcuMTcyIDE5SDEwYTIgMiAwIDAgMS0yLTJ2LTEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMtb2ZmLmpzCnZhciBNaWNPZmY7CnZhciBpbml0X21pY19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy1vZmYuanMiKCkgewogICAgTWljT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjVhMyAzIDAgMCAwLTUuNjgtMS4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMtdm9jYWwuanMKdmFyIE1pY1ZvY2FsOwp2YXIgaW5pdF9taWNfdm9jYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy12b2NhbC5qcyIoKSB7CiAgICBNaWNWb2NhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjciLCByOiAiNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qcwp2YXIgTWljOwp2YXIgaW5pdF9taWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qcyIoKSB7CiAgICBNaWMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qcwp2YXIgTWljcm9jaGlwOwp2YXIgaW5pdF9taWNyb2NoaXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qcyIoKSB7CiAgICBNaWNyb2NoaXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDZoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiMiIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanMKdmFyIE1pY3Jvc2NvcGU7CnZhciBpbml0X21pY3Jvc2NvcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanMiKCkgewogICAgTWljcm9zY29wZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIyYTcgNyAwIDEgMCAwLTE0aC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyYTIgMiAwIDAgMS0yLTJWNmg2djRhMiAyIDAgMCAxLTIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNlYzYTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDAtMSAxdjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanMKdmFyIE1pY3Jvd2F2ZTsKdmFyIGluaXRfbWljcm93YXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanMiKCkgewogICAgTWljcm93YXZlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNSIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjciLCB4OiAiNiIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTl2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGVzdG9uZS5qcwp2YXIgTWlsZXN0b25lOwp2YXIgaW5pdF9taWxlc3RvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGVzdG9uZS5qcyIoKSB7CiAgICBNaWxlc3RvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGstb2ZmLmpzCnZhciBNaWxrT2ZmOwp2YXIgaW5pdF9taWxrX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay1vZmYuanMiKCkgewogICAgTWlsa09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYxLjM0M00xNSAydjIuNzg5YTQgNCAwIDAgMCAuNjcyIDIuMjE5bC42NTYuOTg0YTQgNCAwIDAgMSAuNjcyIDIuMjJ2MS4xMzFNNy44IDcuOGwtLjEyOC4xOTJBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi0zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay5qcwp2YXIgTWlsazsKdmFyIGluaXRfbWlsayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay5qcyIoKSB7CiAgICBNaWxrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAydjIuNzg5YTQgNCAwIDAgMS0uNjcyIDIuMjE5bC0uNjU2Ljk4NEE0IDQgMCAwIDAgNyAxMC4yMTJWMjBhMiAyIDAgMCAwIDIgMmg2YTIgMiAwIDAgMCAyLTJ2LTkuNzg5YTQgNCAwIDAgMC0uNjcyLTIuMjE5bC0uNjU2LS45ODRBNCA0IDAgMCAxIDE1IDQuNzg4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3MiA2LjQ3MiAwIDAgMSA1IDAgNi40NyA2LjQ3IDAgMCAwIDUgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLTIuanMKdmFyIE1pbmltaXplMjsKdmFyIGluaXRfbWluaW1pemVfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWluaW1pemUtMi5qcyIoKSB7CiAgICBNaW5pbWl6ZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBoLTZWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDctNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLmpzCnZhciBNaW5pbWl6ZTsKdmFyIGluaXRfbWluaW1pemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLmpzIigpIHsKICAgIE1pbmltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZoM2EyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWludXMuanMKdmFyIE1pbnVzOwp2YXIgaW5pdF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWludXMuanMiKCkgewogICAgTWludXMgPSBbWyJwYXRoIiwgeyBkOiAiTTUgMTJoMTQiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jaGVjay5qcwp2YXIgTW9uaXRvckNoZWNrOwp2YXIgaW5pdF9tb25pdG9yX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNoZWNrLmpzIigpIHsKICAgIE1vbml0b3JDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItY2xvdWQuanMKdmFyIE1vbml0b3JDbG91ZDsKdmFyIGluaXRfbW9uaXRvcl9jbG91ZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jbG91ZC5qcyIoKSB7CiAgICBNb25pdG9yQ2xvdWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxM2EzIDMgMCAxIDEgMi44My00SDE0YTIgMiAwIDAgMSAwIDR6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jb2cuanMKdmFyIE1vbml0b3JDb2c7CnZhciBpbml0X21vbml0b3JfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNvZy5qcyIoKSB7CiAgICBNb25pdG9yQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgNy41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggNC44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAzLjIyOC0uMzgzLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDguNzcyLS4zODMuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAzLjIyOC4zODMtLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyA5LjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDQuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiA3LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzdjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItZG90LmpzCnZhciBNb25pdG9yRG90Owp2YXIgaW5pdF9tb25pdG9yX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1kb3QuanMiKCkgewogICAgTW9uaXRvckRvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTIuMzA3VjE1YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg4LjY5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1kb3duLmpzCnZhciBNb25pdG9yRG93bjsKdmFyIGluaXRfbW9uaXRvcl9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWRvd24uanMiKCkgewogICAgTW9uaXRvckRvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwLTMgMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLW9mZi5qcwp2YXIgTW9uaXRvck9mZjsKdmFyIGluaXRfbW9uaXRvcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itb2ZmLmpzIigpIHsKICAgIE1vbml0b3JPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWMwLTEuNSAxLTIgMS0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE1VjVhMiAyIDAgMCAwLTItMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGF1c2UuanMKdmFyIE1vbml0b3JQYXVzZTsKdmFyIGluaXRfbW9uaXRvcl9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1wYXVzZS5qcyIoKSB7CiAgICBNb25pdG9yUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXBsYXkuanMKdmFyIE1vbml0b3JQbGF5Owp2YXIgaW5pdF9tb25pdG9yX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGxheS5qcyIoKSB7CiAgICBNb25pdG9yUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zbWFydHBob25lLmpzCnZhciBNb25pdG9yU21hcnRwaG9uZTsKdmFyIGluaXRfbW9uaXRvcl9zbWFydHBob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNtYXJ0cGhvbmUuanMiKCkgewogICAgTW9uaXRvclNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2N2EyIDIgMCAwIDAgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTl2LTMuOTYgMy4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5aDUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zcGVha2VyLmpzCnZhciBNb25pdG9yU3BlYWtlcjsKdmFyIGluaXRfbW9uaXRvcl9zcGVha2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNwZWFrZXIuanMiKCkgewogICAgTW9uaXRvclNwZWFrZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjUgMjBIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5aC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE2IiwgeDogIjEyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2SDRhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDJoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zdG9wLmpzCnZhciBNb25pdG9yU3RvcDsKdmFyIGluaXRfbW9uaXRvcl9zdG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXN0b3AuanMiKCkgewogICAgTW9uaXRvclN0b3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiNyIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXVwLmpzCnZhciBNb25pdG9yVXA7CnZhciBpbml0X21vbml0b3JfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItdXAuanMiKCkgewogICAgTW9uaXRvclVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXguanMKdmFyIE1vbml0b3JYOwp2YXIgaW5pdF9tb25pdG9yX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3IteC5qcyIoKSB7CiAgICBNb25pdG9yWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNS01IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci5qcwp2YXIgTW9uaXRvcjsKdmFyIGluaXRfbW9uaXRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci5qcyIoKSB7CiAgICBNb25pdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjIxIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE3IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vb24tc3Rhci5qcwp2YXIgTW9vblN0YXI7CnZhciBpbml0X21vb25fc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi1zdGFyLmpzIigpIHsKICAgIE1vb25TdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDN2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzCnZhciBNb3RvcmJpa2U7CnZhciBpbml0X21vdG9yYmlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzIigpIHsKICAgIE1vdG9yYmlrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0LTEtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDkgNiAyYTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMS45OSAxLjgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoM2ExIDEgMCAwIDAgMS0xIDYgNiAwIDAgMSA2LTYgMSAxIDAgMCAwIDEtMXYtLjc1QTUgNSAwIDAgMCAxNyA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE3IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qcwp2YXIgTW9vbjsKdmFyIGluaXRfbW9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qcyIoKSB7CiAgICBNb29uID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTg1IDEyLjQ4NmE5IDkgMCAxIDEtOS40NzMtOS40NzJjLjQwNS0uMDIyLjYxNy40Ni40MDIuODAzYTYgNiAwIDAgMCA4LjI2OCA4LjI2OGMuMzQ0LS4yMTUuODI1LS4wMDQuODAzLjQwMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdW50YWluLXNub3cuanMKdmFyIE1vdW50YWluU25vdzsKdmFyIGluaXRfbW91bnRhaW5fc25vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91bnRhaW4tc25vdy5qcyIoKSB7CiAgICBNb3VudGFpblNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDMgNCA4IDUtNSA1IDE1SDJMOCAzeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjE0IDE1LjA4YzIuNjItMS41NyA1LjI0LTEuNDMgNy44Ni40MiAyLjc0IDEuOTQgNS40OSAyIDguMjMuMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qcwp2YXIgTW91bnRhaW47CnZhciBpbml0X21vdW50YWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qcyIoKSB7CiAgICBNb3VudGFpbiA9IFtbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2Utb2ZmLmpzCnZhciBNb3VzZU9mZjsKdmFyIGluaXRfbW91c2Vfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1vZmYuanMiKCkgewogICAgTW91c2VPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2di4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguMjE4IDE4LjIxOEE3IDcgMCAwIDEgNSAxNVY5YTcgNyAwIDAgMSAuNzgyLTMuMjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzLjM0M1Y5QTcgNyAwIDAgMCA4LjU2IDIuOTAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanMKdmFyIE1vdXNlUG9pbnRlcjJPZmY7CnZhciBpbml0X21vdXNlX3BvaW50ZXJfMl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanMiKCkgewogICAgTW91c2VQb2ludGVyMk9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjU1IDguNDUgNS4xMzggMi4wODdhLjUuNSAwIDAgMS0uMDYzLjk0N2wtNi4xMjQgMS41OGEyIDIgMCAwIDAtMS40MzggMS40MzVsLTEuNTc5IDYuMTI2YS41LjUgMCAwIDEtLjk0Ny4wNjNMOC40NSAxNS41NTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAyIDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuODE2IDExLjUyOC0yLjc3OS02Ljg0YS40OTUuNDk1IDAgMCAxIC42NTEtLjY1MWw2Ljg0IDIuNzc5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci0yLmpzCnZhciBNb3VzZVBvaW50ZXIyOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi5qcyIoKSB7CiAgICBNb3VzZVBvaW50ZXIyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC4wMzcgNC42ODhhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDE2IDYuNWEuNS41IDAgMCAxLS4wNjMuOTQ3bC02LjEyNCAxLjU4YTIgMiAwIDAgMC0xLjQzOCAxLjQzNWwtMS41NzkgNi4xMjZhLjUuNSAwIDAgMS0uOTQ3LjA2M3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWJhbi5qcwp2YXIgTW91c2VQb2ludGVyQmFuOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyX2JhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci1iYW4uanMiKCkgewogICAgTW91c2VQb2ludGVyQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wMzQgMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDRMOC4yMDQgNy41NDVhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjYgMy40NDNhLjUuNSAwIDAgMS0uOTQ0LjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMS44IDExLjggOC40IDguNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItY2xpY2suanMKdmFyIE1vdXNlUG9pbnRlckNsaWNrOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWNsaWNrLmpzIigpIHsKICAgIE1vdXNlUG9pbnRlckNsaWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNC4xIDEyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNS4xIDgtMi45LS44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTItMS45IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy4yIDIuMiA4IDUuMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjAzNyA5LjY5YS40OTguNDk4IDAgMCAxIC42NTMtLjY1M2wxMSA0LjVhLjUuNSAwIDAgMS0uMDc0Ljk0OWwtNC4zNDkgMS4wNDFhMSAxIDAgMCAwLS43NC43MzlsLTEuMDQgNC4zNWEuNS41IDAgMCAxLS45NS4wNzR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci5qcwp2YXIgTW91c2VQb2ludGVyOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLmpzIigpIHsKICAgIE1vdXNlUG9pbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU4NiAxMi41ODYgMTkgMTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLmpzCnZhciBNb3VzZTsKdmFyIGluaXRfbW91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLmpzIigpIHsKICAgIE1vdXNlID0gWwogICAgICBbInJlY3QiLCB7IHg6ICI1IiwgeTogIjIiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCByeDogIjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS0zZC5qcwp2YXIgTW92ZTNkOwp2YXIgaW5pdF9tb3ZlXzNkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLTNkLmpzIigpIHsKICAgIE1vdmUzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM3YxNmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAzIDMtMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC0yLmpzCnZhciBNb3ZlRGlhZ29uYWwyOwp2YXIgaW5pdF9tb3ZlX2RpYWdvbmFsXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwtMi5qcyIoKSB7CiAgICBNb3ZlRGlhZ29uYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTN2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDUgMTQgMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRpYWdvbmFsLmpzCnZhciBNb3ZlRGlhZ29uYWw7CnZhciBpbml0X21vdmVfZGlhZ29uYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwuanMiKCkgewogICAgTW92ZURpYWdvbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlINXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1aDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA1IDUgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24tbGVmdC5qcwp2YXIgTW92ZURvd25MZWZ0Owp2YXIgaW5pdF9tb3ZlX2Rvd25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLWxlZnQuanMiKCkgewogICAgTW92ZURvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlINVYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA1TDUgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24tcmlnaHQuanMKdmFyIE1vdmVEb3duUmlnaHQ7CnZhciBpbml0X21vdmVfZG93bl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLXJpZ2h0LmpzIigpIHsKICAgIE1vdmVEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM1YxOUgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDVMMTkgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24uanMKdmFyIE1vdmVEb3duOwp2YXIgaW5pdF9tb3ZlX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi5qcyIoKSB7CiAgICBNb3ZlRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThMMTIgMjJMMTYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMlYyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtbGVmdC5qcwp2YXIgTW92ZUxlZnQ7CnZhciBpbml0X21vdmVfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1sZWZ0LmpzIigpIHsKICAgIE1vdmVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4TDIgMTJMNiAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEySDIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1ob3Jpem9udGFsLmpzCnZhciBNb3ZlSG9yaXpvbnRhbDsKdmFyIGluaXRfbW92ZV9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWhvcml6b250YWwuanMiKCkgewogICAgTW92ZUhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA4IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtcmlnaHQuanMKdmFyIE1vdmVSaWdodDsKdmFyIGluaXRfbW92ZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1yaWdodC5qcyIoKSB7CiAgICBNb3ZlUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4TDIyIDEyTDE4IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJIMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLWxlZnQuanMKdmFyIE1vdmVVcExlZnQ7CnZhciBpbml0X21vdmVfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC1sZWZ0LmpzIigpIHsKICAgIE1vdmVVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC1yaWdodC5qcwp2YXIgTW92ZVVwUmlnaHQ7CnZhciBpbml0X21vdmVfdXBfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtcmlnaHQuanMiKCkgewogICAgTW92ZVVwUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1SDE5VjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVMNSAxOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAuanMKdmFyIE1vdmVVcDsKdmFyIGluaXRfbW92ZV91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC5qcyIoKSB7CiAgICBNb3ZlVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZMMTIgMkwxNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXZlcnRpY2FsLmpzCnZhciBNb3ZlVmVydGljYWw7CnZhciBpbml0X21vdmVfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdmVydGljYWwuanMiKCkgewogICAgTW92ZVZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE4IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLmpzCnZhciBNb3ZlOwp2YXIgaW5pdF9tb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLmpzIigpIHsKICAgIE1vdmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5LTMgMy0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOSAzIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA1IDMtMyAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0yLmpzCnZhciBNdXNpYzI7CnZhciBpbml0X211c2ljXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTIuanMiKCkgewogICAgTXVzaWMyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxOCIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjJsNyA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtMy5qcwp2YXIgTXVzaWMzOwp2YXIgaW5pdF9tdXNpY18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0zLmpzIigpIHsKICAgIE11c2ljMyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTQuanMKdmFyIE11c2ljNDsKdmFyIGluaXRfbXVzaWNfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtNC5qcyIoKSB7CiAgICBNdXNpYzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4VjVsMTItMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDkgMTItMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLmpzCnZhciBNdXNpYzsKdmFyIGluaXRfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLmpzIigpIHsKICAgIE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLTItb2ZmLmpzCnZhciBOYXZpZ2F0aW9uMk9mZjsKdmFyIGluaXRfbmF2aWdhdGlvbl8yX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi0yLW9mZi5qcyIoKSB7CiAgICBOYXZpZ2F0aW9uMk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMzEgOS4zMSA1IDIxbDctNCA3IDQtMS4xNy0zLjE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUzIDguODggMTIgMmwtMS4xNyAzLjE3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24tMi5qcwp2YXIgTmF2aWdhdGlvbjI7CnZhciBpbml0X25hdmlnYXRpb25fMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi0yLmpzIigpIHsKICAgIE5hdmlnYXRpb24yID0gW1sicG9seWdvbiIsIHsgcG9pbnRzOiAiMTIgMiAxOSAyMSAxMiAxNyA1IDIxIDEyIDIiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi1vZmYuanMKdmFyIE5hdmlnYXRpb25PZmY7CnZhciBpbml0X25hdmlnYXRpb25fb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLW9mZi5qcyIoKSB7CiAgICBOYXZpZ2F0aW9uT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOC40MyA4LjQzIDMgMTFsOCAyIDIgOCAyLjU3LTUuNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMzkgMTEuNzMgMjIgMmwtOS43MyA0LjYxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanMKdmFyIE5hdmlnYXRpb247CnZhciBpbml0X25hdmlnYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanMiKCkgewogICAgTmF2aWdhdGlvbiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjMgMTEgMjIgMiAxMyAyMSAxMSAxMyAzIDExIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ld3NwYXBlci5qcwp2YXIgTmV3c3BhcGVyOwp2YXIgaW5pdF9uZXdzcGFwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ld3NwYXBlci5qcyIoKSB7CiAgICBOZXdzcGFwZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNGgtOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIyaDE2YTIgMiAwIDAgMCAyLTJWNGEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDEtNCAwdi05YTIgMiAwIDAgMSAyLTJoMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICIxMCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmV0d29yay5qcwp2YXIgTmV0d29yazsKdmFyIGluaXRfbmV0d29yazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ldHdvcmsuanMiKCkgewogICAgTmV0d29yayA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTYiLCB5OiAiMTYiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNiIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZ2LTNhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25mYy5qcwp2YXIgTmZjOwp2YXIgaW5pdF9uZmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25mYy5qcyIoKSB7CiAgICBOZmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguMzJhNy40MyA3LjQzIDAgMCAxIDAgNy4zNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi45MSA0LjFhMTUuOTEgMTUuOTEgMCAwIDEgLjAxIDE1LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMzcgMmEyMC4xNiAyMC4xNiAwIDAgMSAwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm9uLWJpbmFyeS5qcwp2YXIgTm9uQmluYXJ5Owp2YXIgaW5pdF9ub25fYmluYXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub24tYmluYXJ5LmpzIigpIHsKICAgIE5vbkJpbmFyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDQgNyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4IDctNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stcGVuLmpzCnZhciBOb3RlYm9va1BlbjsKdmFyIGluaXRfbm90ZWJvb2tfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay1wZW4uanMiKCkgewogICAgTm90ZWJvb2tQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy40IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCA1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stdGFicy5qcwp2YXIgTm90ZWJvb2tUYWJzOwp2YXIgaW5pdF9ub3RlYm9va190YWJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay10YWJzLmpzIigpIHsKICAgIE5vdGVib29rVGFicyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTdoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXRleHQuanMKdmFyIE5vdGVib29rVGV4dDsKdmFyIGluaXRfbm90ZWJvb2tfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stdGV4dC5qcyIoKSB7CiAgICBOb3RlYm9va1RleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgOGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxMkgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTZIMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay5qcwp2YXIgTm90ZWJvb2s7CnZhciBpbml0X25vdGVib29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay5qcyIoKSB7CiAgICBOb3RlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlcGFkLXRleHQtZGFzaGVkLmpzCnZhciBOb3RlcGFkVGV4dERhc2hlZDsKdmFyIGluaXRfbm90ZXBhZF90ZXh0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LWRhc2hlZC5qcyIoKSB7CiAgICBOb3RlcGFkVGV4dERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4djJhMiAyIDAgMCAxLTIgMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIySDZhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOFY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVwYWQtdGV4dC5qcwp2YXIgTm90ZXBhZFRleHQ7CnZhciBpbml0X25vdGVwYWRfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LmpzIigpIHsKICAgIE5vdGVwYWRUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE4IiwgeDogIjQiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL251dC1vZmYuanMKdmFyIE51dE9mZjsKdmFyIGluaXRfbnV0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LW9mZi5qcyIoKSB7CiAgICBOdXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0VjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSAxMHY0YTcuMDA0IDcuMDA0IDAgMCAwIDUuMjc3IDYuNzg3Yy40MTIuMTA0LjgwMi4yOTIgMS4xMDIuNTkyTDEyIDIybC42MjEtLjYyMWMuMy0uMy42OS0uNDg4IDEuMTAyLS41OTJhNy4wMSA3LjAxIDAgMCAwIDQuMTI1LTIuOTM5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjMuMzQzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDEyYy0xLjM0OS0uNTczLTEuOTA1LTEuMDA1LTIuNS0yLS41NDYuOTAyLTEuMDQ4IDEuMzUzLTIuNSAyLTEuMDE4LS42NDQtMS40Ni0xLjA4LTItMi0xLjAyOC43MS0xLjY5LjkxOC0zIDEgMS4wODEtMS4wNDggMS43NTctMi4wMyAyLTMgLjE5NC0uNzc2Ljg0LTEuNTUxIDEuNzktMi4yMW0xMS42NTQgNS45OTdjLjg4Ny0uNDU3IDEuMjgtLjg5MSAxLjU1Ni0xLjc4NyAxLjAzMi45MTYgMS42ODMgMS4xNTcgMyAxLTEuMjk3LTEuMDM2LTEuNzU4LTIuMDMtMi0zLS41LTItNC00LTgtNC0uNzQgMC0xLjQ2MS4wNjgtMi4xNS4xOTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LmpzCnZhciBOdXQ7CnZhciBpbml0X251dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LmpzIigpIHsKICAgIE51dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tYWxlcnQuanMKdmFyIE9jdGFnb25BbGVydDsKdmFyIGluaXRfb2N0YWdvbl9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1hbGVydC5qcyIoKSB7CiAgICBPY3RhZ29uQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjMxMiAyYTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2bC00LjY4OC00LjY4OEEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1taW51cy5qcwp2YXIgT2N0YWdvbk1pbnVzOwp2YXIgaW5pdF9vY3RhZ29uX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLW1pbnVzLmpzIigpIHsKICAgIE9jdGFnb25NaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tcGF1c2UuanMKdmFyIE9jdGFnb25QYXVzZTsKdmFyIGluaXRfb2N0YWdvbl9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1wYXVzZS5qcyIoKSB7CiAgICBPY3RhZ29uUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLXguanMKdmFyIE9jdGFnb25YOwp2YXIgaW5pdF9vY3RhZ29uX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24teC5qcyIoKSB7CiAgICBPY3RhZ29uWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLmpzCnZhciBPY3RhZ29uOwp2YXIgaW5pdF9vY3RhZ29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLmpzIigpIHsKICAgIE9jdGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjU4NiAxNi43MjZBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyaDYuNjI0YTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29tZWdhLmpzCnZhciBPbWVnYTsKdmFyIGluaXRfb21lZ2EgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29tZWdhLmpzIigpIHsKICAgIE9tZWdhID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMGg0LjVhLjUuNSAwIDAgMCAuNS0uNXYtLjI4MmEuNTIuNTIgMCAwIDAtLjI0Ny0uNDM3IDggOCAwIDEgMSA4LjQ5NC0uMDAxLjUyLjUyIDAgMCAwLS4yNDcuNDM4di4yODJhLjUuNSAwIDAgMCAuNS41SDIxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb3B0aW9uLmpzCnZhciBPcHRpb247CnZhciBpbml0X29wdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb3B0aW9uLmpzIigpIHsKICAgIE9wdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM2g2bDYgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcmJpdC5qcwp2YXIgT3JiaXQ7CnZhciBpbml0X29yYml0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcmJpdC5qcyIoKSB7CiAgICBPcmJpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjM0MSA2LjQ4NEExMCAxMCAwIDAgMSAxMC4yNjYgMjEuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42NTkgMTcuNTE2QTEwIDEwIDAgMCAxIDEzLjc0IDIuMTUyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yaWdhbWkuanMKdmFyIE9yaWdhbWk7CnZhciBpbml0X29yaWdhbWkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yaWdhbWkuanMiKCkgewogICAgT3JpZ2FtaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyVjRhMSAxIDAgMCAxIDEtMWg2LjI5N2ExIDEgMCAwIDEgLjY1MSAxLjc1OWwtNC42OTYgNC4wMjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMiAyMS03LjQxNC03LjQxNEEyIDIgMCAwIDEgNCAxMi4xNzJWNi40MTVhMS4wMDIgMS4wMDIgMCAwIDEgMS43MDctLjcwN0wyMCAyMC4wMDkiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyLjIxNCAzLjM4MSA4LjQxNCAxNC45NjZhMSAxIDAgMCAxLS4xNjcgMS4xOTlsLTEuMTY4IDEuMTYzYTEgMSAwIDAgMS0uNzA2LjI5MUg2LjM1MWExIDEgMCAwIDEtLjYyNS0uMjE5TDMuMjUgMTguOGExIDEgMCAwIDEgLjYzMS0xLjc4MWw0LjE2NS4wMjciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLTIuanMKdmFyIFBhY2thZ2UyOwp2YXIgaW5pdF9wYWNrYWdlXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtMi5qcyIoKSB7CiAgICBQYWNrYWdlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjA1NCA5LjAxM2gxNy44OTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLWNoZWNrLmpzCnZhciBQYWNrYWdlQ2hlY2s7CnZhciBpbml0X3BhY2thZ2VfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtY2hlY2suanMiKCkgewogICAgUGFja2FnZUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgMiAyIDQtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1taW51cy5qcwp2YXIgUGFja2FnZU1pbnVzOwp2YXIgaW5pdF9wYWNrYWdlX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLW1pbnVzLmpzIigpIHsKICAgIFBhY2thZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utb3Blbi5qcwp2YXIgUGFja2FnZU9wZW47CnZhciBpbml0X3BhY2thZ2Vfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1vcGVuLmpzIigpIHsKICAgIFBhY2thZ2VPcGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMTcgMi4yMWExLjY3IDEuNjcgMCAwIDEgMS42MyAwTDIxIDQuNTdhMS45MyAxLjkzIDAgMCAxIDAgMy4zNkw4LjgyIDE0Ljc5YTEuNjU1IDEuNjU1IDAgMCAxLTEuNjQgMEwzIDEyLjQzYTEuOTMgMS45MyAwIDAgMSAwLTMuMzZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzdjMuODdhMi4wNiAyLjA2IDAgMCAxLTEuMTEgMS44M2wtNiAzLjA4YTEuOTMgMS45MyAwIDAgMS0xLjc4IDBsLTYtMy4wOEEyLjA2IDIuMDYgMCAwIDEgNCAxNi44N1YxMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMi40M2ExLjkzIDEuOTMgMCAwIDAgMC0zLjM2TDguODMgMi4yYTEuNjQgMS42NCAwIDAgMC0xLjYzIDBMMyA0LjU3YTEuOTMgMS45MyAwIDAgMCAwIDMuMzZsMTIuMTggNi44NmExLjYzNiAxLjYzNiAwIDAgMCAxLjYzIDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1wbHVzLmpzCnZhciBQYWNrYWdlUGx1czsKdmFyIGluaXRfcGFja2FnZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLXBsdXMuanMiKCkgewogICAgUGFja2FnZVBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzdjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utc2VhcmNoLmpzCnZhciBQYWNrYWdlU2VhcmNoOwp2YXIgaW5pdF9wYWNrYWdlX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1zZWFyY2guanMiKCkgewogICAgUGFja2FnZVNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxNS41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNyAxNy4yNyAyMiAxOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UteC5qcwp2YXIgUGFja2FnZVg7CnZhciBpbml0X3BhY2thZ2VfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS14LmpzIigpIHsKICAgIFBhY2thZ2VYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMyA1IDVtLTUgMCA1LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzCnZhciBQYWNrYWdlOwp2YXIgaW5pdF9wYWNrYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzIigpIHsKICAgIFBhY2thZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAyMS43M2EyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMlYxMiIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LWJ1Y2tldC5qcwp2YXIgUGFpbnRCdWNrZXQ7CnZhciBpbml0X3BhaW50X2J1Y2tldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtYnVja2V0LmpzIigpIHsKICAgIFBhaW50QnVja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNyA2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOTkyIDEySDIuMDQxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE0NSAxOC4zOEEzLjM0IDMuMzQgMCAwIDEgMjAgMTYuNWEzLjMgMy4zIDAgMCAxLTEuMTQ1IDEuODhjLS41NzUuNDYtLjg1NSAxLjAyLS44NTUgMS41OTVBMiAyIDAgMCAwIDIwIDIyYTIgMiAwIDAgMCAyLTIuMDI1YzAtLjU4LS4yODUtMS4xMy0uODU1LTEuNTk1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTguNSA0LjUgMi4xNDgtMi4xNDhhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGw3LjI5NiA3LjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC03LjU5MiA3LjU5MmEzLjYxNSAzLjYxNSAwIDAgMS01LjExMiAwbC0zLjg4OC0zLjg4OGEzLjYxNSAzLjYxNSAwIDAgMSAwLTUuMTEyTDUuNjcgNy4zMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LXJvbGxlci5qcwp2YXIgUGFpbnRSb2xsZXI7CnZhciBpbml0X3BhaW50X3JvbGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtcm9sbGVyLmpzIigpIHsKICAgIFBhaW50Um9sbGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnYtMmEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCB4OiAiOCIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50YnJ1c2gtdmVydGljYWwuanMKdmFyIFBhaW50YnJ1c2hWZXJ0aWNhbDsKdmFyIGluaXRfcGFpbnRicnVzaF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBQYWludGJydXNoVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJhMSAxIDAgMCAxIDEgMXY5SDZWM2ExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDEyYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAwIDAgMiAyaDJhMSAxIDAgMCAxIDEgMXYyLjlhMiAyIDAgMSAwIDQgMFYxN2ExIDEgMCAwIDEgMS0xaDJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC5qcwp2YXIgUGFpbnRicnVzaDsKdmFyIGluaXRfcGFpbnRicnVzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC5qcyIoKSB7CiAgICBQYWludGJydXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNjIyIDE3Ljg5Ny0xMC42OC0yLjkxMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC4zNzYgMi42MjJhMSAxIDAgMSAxIDMuMDAyIDMuMDAyTDE3LjM2IDkuNjQzYS41LjUgMCAwIDAgMCAuNzA3bC45NDQuOTQ0YTIuNDEgMi40MSAwIDAgMSAwIDMuNDA4bC0uOTQ0Ljk0NGEuNS41IDAgMCAxLS43MDcgMEw4LjM1NCA3LjM0OGEuNS41IDAgMCAxIDAtLjcwN2wuOTQ0LS45NDRhMi40MSAyLjQxIDAgMCAxIDMuNDA4IDBsLjk0NC45NDRhLjUuNSAwIDAgMCAuNzA3IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOGMtMS44MDQgMi43MS0zLjk3IDMuNDYtNi41ODMgMy45NDhhLjUwNy41MDcgMCAwIDAtLjMwMi44MTlsNy4zMiA4Ljg4M2ExIDEgMCAwIDAgMS4xODUuMjA0QzEyLjczNSAyMC40MDUgMTYgMTYuNzkyIDE2IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFsZXR0ZS5qcwp2YXIgUGFsZXR0ZTsKdmFyIGluaXRfcGFsZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFsZXR0ZS5qcyIoKSB7CiAgICBQYWxldHRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy41IiwgY3k6ICI2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTAuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjUiLCBjeTogIjEyLjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanMKdmFyIFBhbmRhOwp2YXIgaW5pdF9wYW5kYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanMiKCkgewogICAgUGFuZGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNy4yNWgxLjVMMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC42OSA5LjY3YTQuNSA0LjUgMCAxIDAtNy4wNC01LjUgOC4zNSA4LjM1IDAgMCAwLTMuMyAwIDQuNSA0LjUgMCAxIDAtNy4wNCA1LjVDMi40OSAxMS4yIDIgMTIuODggMiAxNC41IDIgMTkuNDcgNi40OCAyMiAxMiAyMnMxMC0yLjUzIDEwLTcuNWMwLTEuNjItLjQ4LTMuMy0xLjMtNC44MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyLTIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1jbG9zZS5qcwp2YXIgUGFuZWxCb3R0b21DbG9zZTsKdmFyIGluaXRfcGFuZWxfYm90dG9tX2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tY2xvc2UuanMiKCkgewogICAgUGFuZWxCb3R0b21DbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOC0zIDMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLWRhc2hlZC5qcwp2YXIgUGFuZWxCb3R0b21EYXNoZWQ7CnZhciBpbml0X3BhbmVsX2JvdHRvbV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1kYXNoZWQuanMiKCkgewogICAgUGFuZWxCb3R0b21EYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1vcGVuLmpzCnZhciBQYW5lbEJvdHRvbU9wZW47CnZhciBpbml0X3BhbmVsX2JvdHRvbV9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tb3Blbi5qcyIoKSB7CiAgICBQYW5lbEJvdHRvbU9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS5qcwp2YXIgUGFuZWxCb3R0b207CnZhciBpbml0X3BhbmVsX2JvdHRvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLmpzIigpIHsKICAgIFBhbmVsQm90dG9tID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQtY2xvc2UuanMKdmFyIFBhbmVsTGVmdENsb3NlOwp2YXIgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWNsb3NlLmpzIigpIHsKICAgIFBhbmVsTGVmdENsb3NlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE1LTMtMyAzLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWRhc2hlZC5qcwp2YXIgUGFuZWxMZWZ0RGFzaGVkOwp2YXIgaW5pdF9wYW5lbF9sZWZ0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1kYXNoZWQuanMiKCkgewogICAgUGFuZWxMZWZ0RGFzaGVkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDl2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQtb3Blbi5qcwp2YXIgUGFuZWxMZWZ0T3BlbjsKdmFyIGluaXRfcGFuZWxfbGVmdF9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LW9wZW4uanMiKCkgewogICAgUGFuZWxMZWZ0T3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qcwp2YXIgUGFuZWxMZWZ0UmlnaHREYXNoZWQ7CnZhciBpbml0X3BhbmVsX2xlZnRfcmlnaHRfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qcyIoKSB7CiAgICBQYW5lbExlZnRSaWdodERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTV2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1VjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LmpzCnZhciBQYW5lbExlZnQ7CnZhciBpbml0X3BhbmVsX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQuanMiKCkgewogICAgUGFuZWxMZWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQtY2xvc2UuanMKdmFyIFBhbmVsUmlnaHRDbG9zZTsKdmFyIGluaXRfcGFuZWxfcmlnaHRfY2xvc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LWNsb3NlLmpzIigpIHsKICAgIFBhbmVsUmlnaHRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA5IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1kYXNoZWQuanMKdmFyIFBhbmVsUmlnaHREYXNoZWQ7CnZhciBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQtZGFzaGVkLmpzIigpIHsKICAgIFBhbmVsUmlnaHREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDl2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LW9wZW4uanMKdmFyIFBhbmVsUmlnaHRPcGVuOwp2YXIgaW5pdF9wYW5lbF9yaWdodF9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1vcGVuLmpzIigpIHsKICAgIFBhbmVsUmlnaHRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNS0zLTMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQuanMKdmFyIFBhbmVsUmlnaHQ7CnZhciBpbml0X3BhbmVsX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC5qcyIoKSB7CiAgICBQYW5lbFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzCnZhciBQYW5lbFRvcEJvdHRvbURhc2hlZDsKdmFyIGluaXRfcGFuZWxfdG9wX2JvdHRvbV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzIigpIHsKICAgIFBhbmVsVG9wQm90dG9tRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1jbG9zZS5qcwp2YXIgUGFuZWxUb3BDbG9zZTsKdmFyIGluaXRfcGFuZWxfdG9wX2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3AtY2xvc2UuanMiKCkgewogICAgUGFuZWxUb3BDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE2IDMtMyAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3AtZGFzaGVkLmpzCnZhciBQYW5lbFRvcERhc2hlZDsKdmFyIGluaXRfcGFuZWxfdG9wX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWRhc2hlZC5qcyIoKSB7CiAgICBQYW5lbFRvcERhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3Atb3Blbi5qcwp2YXIgUGFuZWxUb3BPcGVuOwp2YXIgaW5pdF9wYW5lbF90b3Bfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLW9wZW4uanMiKCkgewogICAgUGFuZWxUb3BPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE0LTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbHMtbGVmdC1ib3R0b20uanMKdmFyIFBhbmVsc0xlZnRCb3R0b207CnZhciBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLWxlZnQtYm90dG9tLmpzIigpIHsKICAgIFBhbmVsc0xlZnRCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC5qcwp2YXIgUGFuZWxUb3A7CnZhciBpbml0X3BhbmVsX3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLmpzIigpIHsKICAgIFBhbmVsVG9wID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXJpZ2h0LWJvdHRvbS5qcwp2YXIgUGFuZWxzUmlnaHRCb3R0b207CnZhciBpbml0X3BhbmVsc19yaWdodF9ib3R0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy1yaWdodC1ib3R0b20uanMiKCkgewogICAgUGFuZWxzUmlnaHRCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbHMtdG9wLWxlZnQuanMKdmFyIFBhbmVsc1RvcExlZnQ7CnZhciBpbml0X3BhbmVsc190b3BfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXRvcC1sZWZ0LmpzIigpIHsKICAgIFBhbmVsc1RvcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMVY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFwZXJjbGlwLmpzCnZhciBQYXBlcmNsaXA7CnZhciBpbml0X3BhcGVyY2xpcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFwZXJjbGlwLmpzIigpIHsKICAgIFBhcGVyY2xpcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2IDYtOC40MTQgOC41ODZhMiAyIDAgMCAwIDIuODI5IDIuODI5bDguNDE0LTguNTg2YTQgNCAwIDEgMC01LjY1Ny01LjY1N2wtOC4zNzkgOC41NTFhNiA2IDAgMSAwIDguNDg1IDguNDg1bDguMzc5LTguNTUxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFya2luZy1tZXRlci5qcwp2YXIgUGFya2luZ01ldGVyOwp2YXIgaW5pdF9wYXJraW5nX21ldGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJraW5nLW1ldGVyLmpzIigpIHsKICAgIFBhcmtpbmdNZXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjI4MiAxOWExIDEgMCAwIDAgLjk0OC0uNjhsMi4zNy02Ljk4OGE3IDcgMCAxIDAtMTMuMiAwbDIuMzcgNi45ODhhMSAxIDAgMCAwIC45NDguNjh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWEzIDMgMCAxIDEgNiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFyZW50aGVzZXMuanMKdmFyIFBhcmVudGhlc2VzOwp2YXIgaW5pdF9wYXJlbnRoZXNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFyZW50aGVzZXMuanMiKCkgewogICAgUGFyZW50aGVzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxcy00LTMtNC05IDQtOSA0LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3M0IDMgNCA5LTQgOS00IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJ0eS1wb3BwZXIuanMKdmFyIFBhcnR5UG9wcGVyOwp2YXIgaW5pdF9wYXJ0eV9wb3BwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcnR5LXBvcHBlci5qcyIoKSB7CiAgICBQYXJ0eVBvcHBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuOCAxMS4zIDIgMjJsMTAuNy0zLjc5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIyIDItMi4yNC43NWEyLjkgMi45IDAgMCAwLTEuOTYgMy4xMmMuMS44Ni0uNTcgMS42My0xLjQ1IDEuNjNoLS4zOGMtLjg2IDAtMS42LjYtMS43NiAxLjQ0TDE0IDEwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDEzLS44Mi0uMzNjLS44Ni0uMzQtMS44Mi4yLTEuOTggMS4xMWMtLjExLjctLjcyIDEuMjItMS40MyAxLjIySDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDIgLjMzLjgyYy4zNC44Ni0uMiAxLjgyLTEuMTEgMS45OEM5LjUyIDQuOSA5IDUuNTIgOSA2LjIzVjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTNjMS45MyAxLjkzIDIuODMgNC4xNyAyIDUtLjgzLjgzLTMuMDctLjA3LTUtMi0xLjkzLTEuOTMtMi44My00LjE3LTItNSAuODMtLjgzIDMuMDcuMDcgNSAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzCnZhciBQYXVzZTsKdmFyIGluaXRfcGF1c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzIigpIHsKICAgIFBhdXNlID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiMTgiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI1IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bhdy1wcmludC5qcwp2YXIgUGF3UHJpbnQ7CnZhciBpbml0X3Bhd19wcmludCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGF3LXByaW50LmpzIigpIHsKICAgIFBhd1ByaW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYy1jYXNlLmpzCnZhciBQY0Nhc2U7CnZhciBpbml0X3BjX2Nhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BjLWNhc2UuanMiKCkgewogICAgUGNDYXNlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1saW5lLmpzCnZhciBQZW5MaW5lOwp2YXIgaW5pdF9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLWxpbmUuanMiKCkgewogICAgUGVuTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1vZmYuanMKdmFyIFBlbk9mZjsKdmFyIGluaXRfcGVuX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLW9mZi5qcyIoKSB7CiAgICBQZW5PZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMCAxMC02LjE1NyA2LjE2MmEyIDIgMCAwIDAtLjUuODMzbC0xLjMyMiA0LjM2YS41LjUgMCAwIDAgLjYyMi42MjRsNC4zNTgtMS4zMjNhMiAyIDAgMCAwIC44My0uNUwxNCAxMy45ODIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuODI5IDcuMTcyIDQuMzU5LTQuMzQ2YTEgMSAwIDEgMSAzLjk4NiAzLjk4NmwtNC4zNTMgNC4zNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLXRvb2wuanMKdmFyIFBlblRvb2w7CnZhciBpbml0X3Blbl90b29sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4tdG9vbC5qcyIoKSB7CiAgICBQZW5Ub29sID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuNzA3IDIxLjI5M2ExIDEgMCAwIDEtMS40MTQgMGwtMS41ODYtMS41ODZhMSAxIDAgMCAxIDAtMS40MTRsNS41ODYtNS41ODZhMSAxIDAgMCAxIDEuNDE0IDBsMS41ODYgMS41ODZhMSAxIDAgMCAxIDAgMS40MTR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4IDEzLTEuMzc1LTYuODc0YTEgMSAwIDAgMC0uNzQ2LS43NzZMMy4yMzUgMi4wMjhhMSAxIDAgMCAwLTEuMjA3IDEuMjA3TDUuMzUgMTUuODc5YTEgMSAwIDAgMCAuNzc2Ljc0NkwxMyAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjMgMi4zIDcuMjg2IDcuMjg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4uanMKdmFyIFBlbjsKdmFyIGluaXRfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4uanMiKCkgewogICAgUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1saW5lLmpzCnZhciBQZW5jaWxMaW5lOwp2YXIgaW5pdF9wZW5jaWxfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLWxpbmUuanMiKCkgewogICAgUGVuY2lsTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1vZmYuanMKdmFyIFBlbmNpbE9mZjsKdmFyIGluaXRfcGVuY2lsX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLW9mZi5qcyIoKSB7CiAgICBQZW5jaWxPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMCAxMC02LjE1NyA2LjE2MmEyIDIgMCAwIDAtLjUuODMzbC0xLjMyMiA0LjM2YS41LjUgMCAwIDAgLjYyMi42MjRsNC4zNTgtMS4zMjNhMiAyIDAgMCAwIC44My0uNUwxNCAxMy45ODIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuODI5IDcuMTcyIDQuMzU5LTQuMzQ2YTEgMSAwIDEgMSAzLjk4NiAzLjk4NmwtNC4zNTMgNC4zNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLXJ1bGVyLmpzCnZhciBQZW5jaWxSdWxlcjsKdmFyIGluaXRfcGVuY2lsX3J1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW5jaWwtcnVsZXIuanMiKCkgewogICAgUGVuY2lsUnVsZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3IDguNyAyLjdhMi40MSAyLjQxIDAgMCAwLTMuNCAwTDIuNyA1LjNhMi40MSAyLjQxIDAgMCAwIDAgMy40TDcgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEgNC4zIDQuM2MuOTQuOTQuOTQgMi40NiAwIDMuNGwtMi42IDIuNmMtLjk0Ljk0LTIuNDYuOTQtMy40IDBMMTEgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC5qcwp2YXIgUGVuY2lsOwp2YXIgaW5pdF9wZW5jaWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC5qcyIoKSB7CiAgICBQZW5jaWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanMKdmFyIFBlbnRhZ29uOwp2YXIgaW5pdF9wZW50YWdvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanMiKCkgewogICAgUGVudGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC44MyAyLjM4YTIgMiAwIDAgMSAyLjM0IDBsOCA1Ljc0YTIgMiAwIDAgMSAuNzMgMi4yNWwtMy4wNCA5LjI2YTIgMiAwIDAgMS0xLjkgMS4zN0g3LjA0YTIgMiAwIDAgMS0xLjktMS4zN0wyLjEgMTAuMzdhMiAyIDAgMCAxIC43My0yLjI1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlcmNlbnQuanMKdmFyIFBlcmNlbnQ7CnZhciBpbml0X3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlcmNlbnQuanMiKCkgewogICAgUGVyY2VudCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICI1IiwgeTE6ICI1IiwgeTI6ICIxOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiNi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVyc29uLXN0YW5kaW5nLmpzCnZhciBQZXJzb25TdGFuZGluZzsKdmFyIGluaXRfcGVyc29uX3N0YW5kaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZXJzb24tc3RhbmRpbmcuanMiKCkgewogICAgUGVyc29uU3RhbmRpbmcgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMCAzLTYgMyA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOCA2IDIgNi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waGlsaXBwaW5lLXBlc28uanMKdmFyIFBoaWxpcHBpbmVQZXNvOwp2YXIgaW5pdF9waGlsaXBwaW5lX3Blc28gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BoaWxpcHBpbmUtcGVzby5qcyIoKSB7CiAgICBQaGlsaXBwaW5lUGVzbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExSDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFWNGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDAgMTJINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWZvcndhcmRlZC5qcwp2YXIgUGhvbmVGb3J3YXJkZWQ7CnZhciBpbml0X3Bob25lX2ZvcndhcmRlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtZm9yd2FyZGVkLmpzIigpIHsKICAgIFBob25lRm9yd2FyZGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWNhbGwuanMKdmFyIFBob25lQ2FsbDsKdmFyIGluaXRfcGhvbmVfY2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtY2FsbC5qcyIoKSB7CiAgICBQaG9uZUNhbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyYTkgOSAwIDAgMSA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmE1IDUgMCAwIDEgNSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtaW5jb21pbmcuanMKdmFyIFBob25lSW5jb21pbmc7CnZhciBpbml0X3Bob25lX2luY29taW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1pbmNvbWluZy5qcyIoKSB7CiAgICBQaG9uZUluY29taW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY2aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi02IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1taXNzZWQuanMKdmFyIFBob25lTWlzc2VkOwp2YXIgaW5pdF9waG9uZV9taXNzZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW1pc3NlZC5qcyIoKSB7CiAgICBQaG9uZU1pc3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb2ZmLmpzCnZhciBQaG9uZU9mZjsKdmFyIGluaXRfcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1vZmYuanMiKCkgewogICAgUGhvbmVPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDEzLjlhMTQgMTQgMCAwIDAgMy43MzIgMi42NjggMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyIDE4IDE4IDAgMCAxLTEyLjcyOC01LjI3MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC43NiAxMy41ODJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgLjI0NC40NzMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1vdXRnb2luZy5qcwp2YXIgUGhvbmVPdXRnb2luZzsKdmFyIGluaXRfcGhvbmVfb3V0Z29pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW91dGdvaW5nLmpzIigpIHsKICAgIFBob25lT3V0Z29pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA4IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4VjJoLTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qcwp2YXIgUGhvbmU7CnZhciBpbml0X3Bob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qcyIoKSB7CiAgICBQaG9uZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGkuanMKdmFyIFBpOwp2YXIgaW5pdF9waSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGkuanMiKCkgewogICAgUGkgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdjMC0xLjcgMS4zLTMgMy0zaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpYW5vLmpzCnZhciBQaWFubzsKdmFyIGluaXRfcGlhbm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpYW5vLmpzIigpIHsKICAgIFBpYW5vID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguNSA4Yy0xLjQgMC0yLjYtLjgtMy4yLTJBNi44NyA2Ljg3IDAgMCAwIDIgOXYxMWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTguNUMyMiA5LjYgMjAuNCA4IDE4LjUgOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTR2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY2theGUuanMKdmFyIFBpY2theGU7CnZhciBpbml0X3BpY2theGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY2theGUuanMiKCkgewogICAgUGlja2F4ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEzLTguMzgxIDguMzhhMSAxIDAgMCAxLTMuMDAxLTNMMTEgOS45OTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuOTczIDQuMDI3QTEzIDEzIDAgMCAwIDUuOTAyIDIuMzczYy0xLjM5OC4zNDItMS4wOTIgMi4xNTguMjc3IDIuNjAxYTE5LjkgMTkuOSAwIDAgMSA1LjgyMiAzLjAyNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi4wMDEgMTEuOTk5YTE5LjkgMTkuOSAwIDAgMSAzLjAyNCA1LjgyNGMuNDQ0IDEuMzY5IDIuMjYgMS42NzYgMi42MDMuMjc4QTEzIDEzIDAgMCAwIDIwIDguMDY5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM1MiAzLjM1MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwbC01LjI5NiA1LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNS4yOTYtNS4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMC0xLjcwNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUtMi5qcwp2YXIgUGljdHVyZUluUGljdHVyZTI7CnZhciBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUtMi5qcyIoKSB7CiAgICBQaWN0dXJlSW5QaWN0dXJlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGMwIDEuMS45IDIgMiAyaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI3IiwgeDogIjEyIiwgeTogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLmpzCnZhciBQaWN0dXJlSW5QaWN0dXJlOwp2YXIgaW5pdF9waWN0dXJlX2luX3BpY3R1cmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY3R1cmUtaW4tcGljdHVyZS5qcyIoKSB7CiAgICBQaWN0dXJlSW5QaWN0dXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg2VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA0IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMFY3YTIgMiAwIDAgMC0yLTJoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYyYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjEyIiwgeTogIjE0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWdneS1iYW5rLmpzCnZhciBQaWdneUJhbms7CnZhciBpbml0X3BpZ2d5X2JhbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpZ2d5LWJhbmsuanMiKCkgewogICAgUGlnZ3lCYW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTdoM3YyYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTMuMTYgMy4xNiAwIDAgMCAyLTJoMWExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFoLTFhNSA1IDAgMCAwLTItNFYzYTQgNCAwIDAgMC0zLjIgMS42bC0uMy40SDExYTYgNiAwIDAgMC02IDZ2MWE1IDUgMCAwIDAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDh2MWEyIDIgMCAwIDAgMiAyaDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LWxlZnQuanMKdmFyIFBpbGNyb3dMZWZ0Owp2YXIgaW5pdF9waWxjcm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctbGVmdC5qcyIoKSB7CiAgICBQaWxjcm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWgtM2EzIDMgMCAwIDEgMC02aDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggM3YxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOEgybDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIyLTQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctcmlnaHQuanMKdmFyIFBpbGNyb3dSaWdodDsKdmFyIGluaXRfcGlsY3Jvd19yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1yaWdodC5qcyIoKSB7CiAgICBQaWxjcm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDlIN2ExIDEgMCAwIDEgMC02aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3YxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNCA0IDRIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxOC00IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LmpzCnZhciBQaWxjcm93Owp2YXIgaW5pdF9waWxjcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LmpzIigpIHsKICAgIFBpbGNyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNEg5LjVhNC41IDQuNSAwIDAgMCAwIDlIMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLWJvdHRsZS5qcwp2YXIgUGlsbEJvdHRsZTsKdmFyIGluaXRfcGlsbF9ib3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGwtYm90dGxlLmpzIigpIHsKICAgIFBpbGxCb3R0bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWgtNGExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgN3YxM2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNSIsIHg6ICI0IiwgeTogIjIiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLmpzCnZhciBQaWxsOwp2YXIgaW5pdF9waWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLmpzIigpIHsKICAgIFBpbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMC41IDIwLjUgMTAtMTBhNC45NSA0Ljk1IDAgMSAwLTctN2wtMTAgMTBhNC45NSA0Ljk1IDAgMSAwIDcgN1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDguNSA3IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waW4tb2ZmLmpzCnZhciBQaW5PZmY7CnZhciBpbml0X3Bpbl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bpbi1vZmYuanMiKCkgewogICAgUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzCnZhciBQaW47CnZhciBpbml0X3BpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzIigpIHsKICAgIFBpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAxMC43NmEyIDIgMCAwIDEtMS4xMSAxLjc5bC0xLjc4LjlBMiAyIDAgMCAwIDUgMTUuMjRWMTZhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xdi0uNzZhMiAyIDAgMCAwLTEuMTEtMS43OWwtMS43OC0uOUEyIDIgMCAwIDEgMTUgMTAuNzZWN2ExIDEgMCAwIDEgMS0xIDIgMiAwIDAgMCAwLTRIOGEyIDIgMCAwIDAgMCA0IDEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qcwp2YXIgUGlwZXR0ZTsKdmFyIGluaXRfcGlwZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qcyIoKSB7CiAgICBQaXBldHRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgOS04LjQxNCA4LjQxNEEyIDIgMCAwIDAgMyAxOC44Mjh2MS4zNDRhMiAyIDAgMCAxLS41ODYgMS40MTRBMiAyIDAgMCAxIDMuODI4IDIxaDEuMzQ0YTIgMiAwIDAgMCAxLjQxNC0uNTg2TDE1IDEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDkgLjQuNGExIDEgMCAxIDEtMyAzbC0zLjgtMy44YTEgMSAwIDEgMSAzLTNsLjQuNCAzLjQtMy40YTEgMSAwIDEgMSAzIDN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgLjQxNC0uNDE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGl6emEuanMKdmFyIFBpenphOwp2YXIgaW5pdF9waXp6YSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGl6emEuanMiKCkgewogICAgUGl6emEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNC0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc3NSA1LjY1NGExNS42OCAxNS42OCAwIDAgMC0xMi4xMjEgMTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGxhbmUtbGFuZGluZy5qcwp2YXIgUGxhbmVMYW5kaW5nOwp2YXIgaW5pdF9wbGFuZV9sYW5kaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS1sYW5kaW5nLmpzIigpIHsKICAgIFBsYW5lTGFuZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy43NyAxMC43NyAyIDlsMi00LjUgMS4xLjU1Yy41NS4yOC45Ljg0LjkgMS40NXMuMzUgMS4xNy45IDEuNDVMOCA4LjVsMy02IDEuMDUuNTNhMiAyIDAgMCAxIDEuMDkgMS41MmwuNzIgNS40YTIgMiAwIDAgMCAxLjA5IDEuNTJsNC40IDIuMmMuNDIuMjIuNzguNTUgMS4wMS45NmwuNiAxLjAzYy40OS44OC0uMDYgMS45OC0xLjA2IDIuMWwtMS4xOC4xNWMtLjQ3LjA2LS45NS0uMDItMS4zNy0uMjRMNC4yOSAxMS4xNWEyIDIgMCAwIDEtLjUyLS4zOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS10YWtlb2ZmLmpzCnZhciBQbGFuZVRha2VvZmY7CnZhciBpbml0X3BsYW5lX3Rha2VvZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLXRha2VvZmYuanMiKCkgewogICAgUGxhbmVUYWtlb2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMmgyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjM2IDE3LjQgNCAxN2wtMi00IDEuMS0uNTVhMiAyIDAgMCAxIDEuOCAwbC4xNy4xYTIgMiAwIDAgMCAxLjggMEw4IDEyIDUgNmwuOS0uNDVhMiAyIDAgMCAxIDIuMDkuMmw0LjAyIDNhMiAyIDAgMCAwIDIuMS4ybDQuMTktMi4wNmEyLjQxIDIuNDEgMCAwIDEgMS43My0uMTdMMjEgN2ExLjQgMS40IDAgMCAxIC44NyAxLjk5bC0uMzguNzZjLS4yMy40Ni0uNi44NC0xLjA3IDEuMDhMNy41OCAxNy4yYTIgMiAwIDAgMS0xLjIyLjE4WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLmpzCnZhciBQbGFuZTsKdmFyIGluaXRfcGxhbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLmpzIigpIHsKICAgIFBsYW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuOCAxOS4yIDE2IDExbDMuNS0zLjVDMjEgNiAyMS41IDQgMjEgM2MtMS0uNS0zIDAtNC41IDEuNUwxMyA4IDQuOCA2LjJjLS41LS4xLS45LjEtMS4xLjVsLS4zLjVjLS4yLjUtLjEgMSAuMyAxLjNMOSAxMmwtMiAzSDRsLTEgMSAzIDIgMiAzIDEtMXYtM2wzLTIgMy41IDUuM2MuMy40LjguNSAxLjMuM2wuNS0uMmMuNC0uMy42LS43LjUtMS4yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanMKdmFyIFBsYXk7CnZhciBpbml0X3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanMiKCkgewogICAgUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWctMi5qcwp2YXIgUGx1ZzI7CnZhciBpbml0X3BsdWdfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy0yLmpzIigpIHsKICAgIFBsdWcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFWOGgxMnYzYTYgNiAwIDEgMS0xMiAwWiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWctemFwLmpzCnZhciBQbHVnWmFwOwp2YXIgaW5pdF9wbHVnX3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy16YXAuanMiKCkgewogICAgUGx1Z1phcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMy41IDEwIDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTYuNSAxMyAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAzLTQgNGg2bC00IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLmpzCnZhciBQbHVnOwp2YXIgaW5pdF9wbHVnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLmpzIigpIHsKICAgIFBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOGExIDEgMCAwIDEgMSAxdjRhNCA0IDAgMCAxLTQgNGgtNGE0IDQgMCAwIDEtNC00VjlhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA4VjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzCnZhciBQbHVzOwp2YXIgaW5pdF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzIigpIHsKICAgIFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQta25pZmUuanMKdmFyIFBvY2tldEtuaWZlOwp2YXIgaW5pdF9wb2NrZXRfa25pZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvY2tldC1rbmlmZS5qcyIoKSB7CiAgICBQb2NrZXRLbmlmZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYxYzAgMSAyIDEgMiAyUzMgNiAzIDdzMiAxIDIgMi0yIDEtMiAyIDIgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuODMgOC44M2E0IDQgMCAwIDAtNS42Ni01LjY2bC0xMiAxMmE0IDQgMCAxIDAgNS42NiA1LjY2WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMS42NlYyMmE0IDQgMCAwIDAgNC00VjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQuanMKdmFyIFBvY2tldDsKdmFyIGluaXRfcG9ja2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQuanMiKCkgewogICAgUG9ja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM2EyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTIwIDBWNWEyIDIgMCAwIDEgMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEwIDQgNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2RjYXN0LmpzCnZhciBQb2RjYXN0Owp2YXIgaW5pdF9wb2RjYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2RjYXN0LmpzIigpIHsKICAgIFBvZGNhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN2ExIDEgMCAxIDAtMiAwbC41IDQuNWEwLjUgMC41IDAgMCAwIDEgMHoiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2Ljg1IDE4LjU4YTkgOSAwIDEgMC05LjcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0YTUgNSAwIDEgMSA4IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByOiAiMSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLW9mZi5qcwp2YXIgUG9pbnRlck9mZjsKdmFyIGluaXRfcG9pbnRlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvaW50ZXItb2ZmLmpzIigpIHsKICAgIFBvaW50ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0LjVWNGEyIDIgMCAwIDAtMi40MS0xLjk1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDguNGEyIDIgMCAwIDAtMS4yNi0xLjI5NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS43IDE2LjJBOCA4IDAgMCAwIDIyIDE0di0zYTIgMiAwIDEgMC00IDB2LTFhMiAyIDAgMCAwLTMuNjMtMS4xNTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm03IDE1LTEuOC0xLjhhMiAyIDAgMCAwLTIuNzkgMi44Nkw2IDE5LjdhNy43NCA3Ljc0IDAgMCAwIDYgMi4zaDJhOCA4IDAgMCAwIDUuNjU3LTIuMzQzIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLmpzCnZhciBQb2ludGVyOwp2YXIgaW5pdF9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLmpzIigpIHsKICAgIFBvaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNGE4IDggMCAwIDEtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMFY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuNVY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wY29ybi5qcwp2YXIgUG9wY29ybjsKdmFyIGluaXRfcG9wY29ybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wY29ybi5qcyIoKSB7CiAgICBQb3Bjb3JuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjIgOSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIyIDEtMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wc2ljbGUuanMKdmFyIFBvcHNpY2xlOwp2YXIgaW5pdF9wb3BzaWNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wc2ljbGUuanMiKCkgewogICAgUG9wc2ljbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE4LjYgMTQuNGMuOC0uOC44LTIgMC0yLjhsLTguMS04LjFhNC45NSA0Ljk1IDAgMSAwLTcuMSA3LjFsOC4xIDguMWMuOS43IDIuMS43IDIuOS0uMVoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTUuNS01LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3VuZC1zdGVybGluZy5qcwp2YXIgUG91bmRTdGVybGluZzsKdmFyIGluaXRfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIFBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA3YzAtNS4zMzMtOC01LjMzMy04IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3dlci1vZmYuanMKdmFyIFBvd2VyT2ZmOwp2YXIgaW5pdF9wb3dlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLW9mZi5qcyIoKSB7CiAgICBQb3dlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjM2IDYuNjRBOSA5IDAgMCAxIDIwLjc3IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMTYgNi4xNmE5IDkgMCAxIDAgMTIuNjggMTIuNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLmpzCnZhciBQb3dlcjsKdmFyIGluaXRfcG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLmpzIigpIHsKICAgIFBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanMKdmFyIFByZXNlbnRhdGlvbjsKdmFyIGluaXRfcHJlc2VudGF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanMiKCkgewogICAgUHJlc2VudGF0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIxIDUtNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzCnZhciBQcmludGVyOwp2YXIgaW5pdF9wcmludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzIigpIHsKICAgIFByaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIxNCIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJpbnRlci1jaGVjay5qcwp2YXIgUHJpbnRlckNoZWNrOwp2YXIgaW5pdF9wcmludGVyX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLWNoZWNrLmpzIigpIHsKICAgIFByaW50ZXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJvamVjdG9yLmpzCnZhciBQcm9qZWN0b3I7CnZhciBpbml0X3Byb2plY3RvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJvamVjdG9yLmpzIigpIHsKICAgIFByb2plY3RvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNyAzIDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNyAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMyIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuODMgMTJIMjBhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi00YTIgMiAwIDAgMSAyLTJoMi4xNyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzCnZhciBQcm9wb3J0aW9uczsKdmFyIGluaXRfcHJvcG9ydGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzIigpIHsKICAgIFByb3BvcnRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMTNhMiAyIDAgMCAxIDIgMnY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzCnZhciBQdXp6bGU7CnZhciBpbml0X3B1enpsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzIigpIHsKICAgIFB1enpsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjM5IDQuMzlhMSAxIDAgMCAwIDEuNjgtLjQ3NCAyLjUgMi41IDAgMSAxIDMuMDE0IDMuMDE1IDEgMSAwIDAgMC0uNDc0IDEuNjhsMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMCAzLjQxNEwxOS42MSAxNS4zOWExIDEgMCAwIDEtMS42OC0uNDc0IDIuNSAyLjUgMCAxIDAtMy4wMTQgMy4wMTUgMSAxIDAgMCAxIC40NzQgMS42OGwtMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEtMy40MTQgMEw4LjYxIDE5LjYxYTEgMSAwIDAgMC0xLjY4LjQ3NCAyLjUgMi41IDAgMSAxLTMuMDE0LTMuMDE1IDEgMSAwIDAgMCAuNDc0LTEuNjhsLTEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAtMy40MTRMNC4zOSA4LjYxYTEgMSAwIDAgMSAxLjY4LjQ3NCAyLjUgMi41IDAgMSAwIDMuMDE0LTMuMDE1IDEgMSAwIDAgMS0uNDc0LTEuNjhsMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMy40MTQgMHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9weXJhbWlkLmpzCnZhciBQeXJhbWlkOwp2YXIgaW5pdF9weXJhbWlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9weXJhbWlkLmpzIigpIHsKICAgIFB5cmFtaWQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTYuODhhMSAxIDAgMCAxLS4zMi0xLjQzbDktMTMuMDJhMSAxIDAgMCAxIDEuNjQgMGw5IDEzLjAxYTEgMSAwIDAgMS0uMzIgMS40NGwtOC41MSA0Ljg2YTIgMiAwIDAgMS0xLjk4IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9xci1jb2RlLmpzCnZhciBRckNvZGU7CnZhciBpbml0X3FyX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3FyLWNvZGUuanMiKCkgewogICAgUXJDb2RlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1IiwgeDogIjE2IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNmgtM2EyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjF2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2M2EyIDIgMCAwIDEtMiAySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdi0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcXVvdGUuanMKdmFyIFF1b3RlOwp2YXIgaW5pdF9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcXVvdGUuanMiKCkgewogICAgUXVvdGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDNhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDIgMSAxIDAgMCAxIDEgMXYxYTIgMiAwIDAgMS0yIDIgMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDEgNiA2IDAgMCAwIDYtNlY1YTIgMiAwIDAgMC0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFiYml0LmpzCnZhciBSYWJiaXQ7CnZhciBpbml0X3JhYmJpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFiYml0LmpzIigpIHsKICAgIFJhYmJpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2YTMgMyAwIDAgMSAyLjI0IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDIxaC04YTQgNCAwIDAgMS00LTQgNyA3IDAgMCAxIDctN2guMkw5LjYgNi40YTEgMSAwIDEgMSAyLjgtMi44TDE1LjggN2guMmMzLjMgMCA2IDIuNyA2IDZ2MWEyIDIgMCAwIDEtMiAyaC0xYTMgMyAwIDAgMC0zIDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOC41NFY0YTIgMiAwIDEgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjYxMiAxMi41MjRhMyAzIDAgMSAwLTEuNiA0LjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRhci5qcwp2YXIgUmFkYXI7CnZhciBpbml0X3JhZGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRhci5qcyIoKSB7CiAgICBSYWRhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjA3IDQuOTNBMTAgMTAgMCAwIDAgNi45OSAzLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4yOSA5LjYyQTEwIDEwIDAgMSAwIDIxLjMxIDguMzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMjQgNy43NkE2IDYgMCAxIDAgOC4yMyAxNi42NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTkgMTEuNjZBNiA2IDAgMCAxIDE1Ljc3IDE2LjY3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNDEgMTAuNTkgNS42Ni01LjY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzCnZhciBSYWRpYXRpb247CnZhciBpbml0X3JhZGlhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzIigpIHsKICAgIFJhZGlhdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNS40NjQxYTQgNCAwIDAgMS00IDBMNy41Mjc4NiAxOS43NDU5NyBBIDEgMSAwIDAgMCA3Ljk5MzAzIDIxLjE2MjExIDEwIDEwIDAgMCAwIDE2LjAwNjk3IDIxLjE2MjExIDEgMSAwIDAgMCAxNi40NzIxNCAxOS43NDU5N3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTItMy40NjRsMi40NzItNC4yODJhMSAxIDAgMCAxIDEuNDYtLjMwNSAxMCAxMCAwIDAgMSA0LjAwNiA2Ljk0QTEgMSAwIDAgMSAyMSAxMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxMmE0IDQgMCAwIDEgMi0zLjQ2NEw3LjUyOCA0LjI1NGExIDEgMCAwIDAtMS40Ni0uMzA1IDEwIDEwIDAgMCAwLTQuMDA2IDYuOTRBMSAxIDAgMCAwIDMgMTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qcwp2YXIgUmFkaWNhbDsKdmFyIGluaXRfcmFkaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qcyIoKSB7CiAgICBSYWRpY2FsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMmgzLjI4YTEgMSAwIDAgMSAuOTQ4LjY4NGwyLjI5OCA3LjkzNGEuNS41IDAgMCAwIC45Ni0uMDQ0TDEzLjgyIDQuNzcxQTEgMSAwIDAgMSAxNC43OTIgNEgyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlvLXJlY2VpdmVyLmpzCnZhciBSYWRpb1JlY2VpdmVyOwp2YXIgaW5pdF9yYWRpb19yZWNlaXZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tcmVjZWl2ZXIuanMiKCkgewogICAgUmFkaW9SZWNlaXZlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tdG93ZXIuanMKdmFyIFJhZGlvVG93ZXI7CnZhciBpbml0X3JhZGlvX3Rvd2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpby10b3dlci5qcyIoKSB7CiAgICBSYWRpb1Rvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45IDE2LjFDMSAxMi4yIDEgNS44IDQuOSAxLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy44IDQuN2E2LjE0IDYuMTQgMCAwIDAtLjggNy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yIDQuOGMyIDIgMi4yNiA1LjExLjggNy40NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4xIDEuOWE5Ljk2IDkuOTYgMCAwIDEgMCAxNC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxOGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgNC0xMSA0IDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8uanMKdmFyIFJhZGlvOwp2YXIgaW5pdF9yYWRpbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8uanMiKCkgewogICAgUmFkaW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yNDcgNy43NjFhNiA2IDAgMCAxIDAgOC40NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDc1IDQuOTMzYTEwIDEwIDAgMCAxIDAgMTQuMTM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOTI1IDE5LjA2N2ExMCAxMCAwIDAgMSAwLTE0LjEzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03Ljc1MyAxNi4yMzlhNiA2IDAgMCAxIDAtOC40NzgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qcwp2YXIgUmFkaXVzOwp2YXIgaW5pdF9yYWRpdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qcyIoKSB7CiAgICBSYWRpdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zNCAxNy41MmExMCAxMCAwIDEgMC0yLjgyIDIuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40MSAxMy40MSA0LjE4IDQuMTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhaWwtc3ltYm9sLmpzCnZhciBSYWlsU3ltYm9sOwp2YXIgaW5pdF9yYWlsX3N5bWJvbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbC1zeW1ib2wuanMiKCkgewogICAgUmFpbFN5bWJvbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwLTUtNSA2LTYtNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qcwp2YXIgUmFpbmJvdzsKdmFyIGluaXRfcmFpbmJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qcyIoKSB7CiAgICBSYWluYm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMTAgMTAgMCAwIDAtMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE3YTYgNiAwIDAgMSAxMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3YTIgMiAwIDAgMSA0IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXQuanMKdmFyIFJhdDsKdmFyIGluaXRfcmF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXQuanMiKCkgewogICAgUmF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjIzNiAxOGEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA0Ljk4OGEzIDMgMCAxIDAtNS4yIDIuMDUyQTcgNyAwIDAgMCA0IDE0LjAxNSA0IDQgMCAwIDAgOCAxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzCnZhciBSYXRpbzsKdmFyIGluaXRfcmF0aW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzIigpIHsKICAgIFJhdGlvID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHg6ICI2IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWNlbnQuanMKdmFyIFJlY2VpcHRDZW50Owp2YXIgaW5pdF9yZWNlaXB0X2NlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtY2VudC5qcyIoKSB7CiAgICBSZWNlaXB0Q2VudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNi41djExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDkuNGE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWV1cm8uanMKdmFyIFJlY2VpcHRFdXJvOwp2YXIgaW5pdF9yZWNlaXB0X2V1cm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtZXVyby5qcyIoKSB7CiAgICBSZWNlaXB0RXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWluZGlhbi1ydXBlZS5qcwp2YXIgUmVjZWlwdEluZGlhblJ1cGVlOwp2YXIgaW5pdF9yZWNlaXB0X2luZGlhbl9ydXBlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1pbmRpYW4tcnVwZWUuanMiKCkgewogICAgUmVjZWlwdEluZGlhblJ1cGVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNy41IDggMTVoMWE0IDQgMCAwIDAgMC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtamFwYW5lc2UteWVuLmpzCnZhciBSZWNlaXB0SmFwYW5lc2VZZW47CnZhciBpbml0X3JlY2VpcHRfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWphcGFuZXNlLXllbi5qcyIoKSB7CiAgICBSZWNlaXB0SmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDEwIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDcgMyAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1wb3VuZC1zdGVybGluZy5qcwp2YXIgUmVjZWlwdFBvdW5kU3Rlcmxpbmc7CnZhciBpbml0X3JlY2VpcHRfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcG91bmQtc3RlcmxpbmcuanMiKCkgewogICAgUmVjZWlwdFBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN1Y5LjVhMi41IDIuNSAwIDAgMSA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN2g3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1ydXNzaWFuLXJ1YmxlLmpzCnZhciBSZWNlaXB0UnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcnVzc2lhbi1ydWJsZS5qcyIoKSB7CiAgICBSZWNlaXB0UnVzc2lhblJ1YmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWg1YTIgMiAwIDEgMCAwLTRoLTN2MTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXN3aXNzLWZyYW5jLmpzCnZhciBSZWNlaXB0U3dpc3NGcmFuYzsKdmFyIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1zd2lzcy1mcmFuYy5qcyIoKSB7CiAgICBSZWNlaXB0U3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDExaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10ZXh0LmpzCnZhciBSZWNlaXB0VGV4dDsKdmFyIGluaXRfcmVjZWlwdF90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXRleHQuanMiKCkgewogICAgUmVjZWlwdFRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxNkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgM2ExIDEgMCAwIDEgMS0xIDEuMyAxLjMgMCAwIDEgLjcuMmwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTM0LS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzMy42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNmExLjMgMS4zIDAgMCAxIDEuNCAwbC45MzQuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzMtLjZBMS4zIDEuMyAwIDAgMSAxOSAyYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMSAxLjMgMS4zIDAgMCAxLS43LS4ybC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzQuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTM0LS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLS43LjIgMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXR1cmtpc2gtbGlyYS5qcwp2YXIgUmVjZWlwdFR1cmtpc2hMaXJhOwp2YXIgaW5pdF9yZWNlaXB0X3R1cmtpc2hfbGlyYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10dXJraXNoLWxpcmEuanMiKCkgewogICAgUmVjZWlwdFR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA4LTYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC5qcwp2YXIgUmVjZWlwdDsKdmFyIGluaXRfcmVjZWlwdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC5qcyIoKSB7CiAgICBSZWNlaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNXYtMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtY2lyY2xlLmpzCnZhciBSZWN0YW5nbGVDaXJjbGU7CnZhciBpbml0X3JlY3RhbmdsZV9jaXJjbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1jaXJjbGUuanMiKCkgewogICAgUmVjdGFuZ2xlQ2lyY2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNkgzYTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICIxMiIsIHI6ICI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWVsbGlwc2lzLmpzCnZhciBSZWN0YW5nbGVFbGxpcHNpczsKdmFyIGluaXRfcmVjdGFuZ2xlX2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZWxsaXBzaXMuanMiKCkgewogICAgUmVjdGFuZ2xlRWxsaXBzaXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWdvZ2dsZXMuanMKdmFyIFJlY3RhbmdsZUdvZ2dsZXM7CnZhciBpbml0X3JlY3RhbmdsZV9nb2dnbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZ29nZ2xlcy5qcyIoKSB7CiAgICBSZWN0YW5nbGVHb2dnbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMS42LS44bC0xLjYtMi4xM2ExIDEgMCAwIDAtMS42IDBMOS42IDE3LjJBMiAyIDAgMCAxIDggMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtaG9yaXpvbnRhbC5qcwp2YXIgUmVjdGFuZ2xlSG9yaXpvbnRhbDsKdmFyIGluaXRfcmVjdGFuZ2xlX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1ob3Jpem9udGFsLmpzIigpIHsKICAgIFJlY3RhbmdsZUhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS12ZXJ0aWNhbC5qcwp2YXIgUmVjdGFuZ2xlVmVydGljYWw7CnZhciBpbml0X3JlY3RhbmdsZV92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLXZlcnRpY2FsLmpzIigpIHsKICAgIFJlY3RhbmdsZVZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHg6ICI2IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzCnZhciBSZWN5Y2xlOwp2YXIgaW5pdF9yZWN5Y2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzIigpIHsKICAgIFJlY3ljbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDQuODE1YTEuODMgMS44MyAwIDAgMS0xLjU3LS44ODEgMS43ODUgMS43ODUgMCAwIDEtLjAwNC0xLjc4NEw3LjE5NiA5LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTloOC4yMDNhMS44MyAxLjgzIDAgMCAwIDEuNTU2LS44OSAxLjc4NCAxLjc4NCAwIDAgMCAwLTEuNzc1bC0xLjIyNi0yLjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4yOTMgMTMuNTk2IDcuMTk2IDkuNSAzLjEgMTAuNTk4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTkuMzQ0IDUuODExIDEuMDkzLTEuODkyQTEuODMgMS44MyAwIDAgMSAxMS45ODUgM2ExLjc4NCAxLjc4NCAwIDAgMSAxLjU0Ni44ODhsMy45NDMgNi44NDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMzc4IDkuNjMzIDQuMDk2IDEuMDk4IDEuMDk3LTQuMDk2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby0yLmpzCnZhciBSZWRvMjsKdmFyIGluaXRfcmVkb18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLTIuanMiKCkgewogICAgUmVkbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNCA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlIOS41QTUuNSA1LjUgMCAwIDAgNCAxNC41QTUuNSA1LjUgMCAwIDAgOS41IDIwSDEzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby1kb3QuanMKdmFyIFJlZG9Eb3Q7CnZhciBpbml0X3JlZG9fZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLWRvdC5qcyIoKSB7CiAgICBSZWRvRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTciLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3djZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8uanMKdmFyIFJlZG87CnZhciBpbml0X3JlZG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8uanMiKCkgewogICAgUmVkbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDd2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE3YTkgOSAwIDAgMSA5LTkgOSA5IDAgMCAxIDYgMi4zbDMgMi43IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3ctZG90LmpzCnZhciBSZWZyZXNoQ2N3RG90Owp2YXIgaW5pdF9yZWZyZXNoX2Njd19kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY2N3LWRvdC5qcyIoKSB7CiAgICBSZWZyZXNoQ2N3RG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMCAwIDkgOSA5Ljc1IDkuNzUgMCAwIDAgNi43NC0yLjc0TDIxIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDV2NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3cuanMKdmFyIFJlZnJlc2hDY3c7CnZhciBpbml0X3JlZnJlc2hfY2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWNjdy5qcyIoKSB7CiAgICBSZWZyZXNoQ2N3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMCAwIDkgOSA5Ljc1IDkuNzUgMCAwIDAgNi43NC0yLjc0TDIxIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDV2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3ctb2ZmLmpzCnZhciBSZWZyZXNoQ3dPZmY7CnZhciBpbml0X3JlZnJlc2hfY3dfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWN3LW9mZi5qcyIoKSB7CiAgICBSZWZyZXNoQ3dPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4TDE4Ljc0IDUuNzRBOS43NSA5Ljc1IDAgMCAwIDEyIDNDMTEgMyAxMC4wMyAzLjE2IDkuMTMgMy40NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyQzMgOS41MSA0IDcuMjYgNS42NCA1LjY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgMi4yNiAyLjI2QTkuNzUgOS43NSAwIDAgMCAxMiAyMWMyLjQ5IDAgNC43NC0xIDYuMzYtMi42NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmMwIDEtLjE2IDEuOTctLjQ3IDIuODciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3Y1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3cuanMKdmFyIFJlZnJlc2hDdzsKdmFyIGluaXRfcmVmcmVzaF9jdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jdy5qcyIoKSB7CiAgICBSZWZyZXNoQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2NWgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJpZ2VyYXRvci5qcwp2YXIgUmVmcmlnZXJhdG9yOwp2YXIgaW5pdF9yZWZyaWdlcmF0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJpZ2VyYXRvci5qcyIoKSB7CiAgICBSZWZyaWdlcmF0b3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDZhNCA0IDAgMCAxIDQtNGg2YTQgNCAwIDAgMSA0IDR2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMGgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA3djYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qcwp2YXIgUmVnZXg7CnZhciBpbml0X3JlZ2V4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qcyIoKSB7CiAgICBSZWdleCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNjcgNS41IDguNjYgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi42NyAxMC41IDguNjYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTJ6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVtb3ZlLWZvcm1hdHRpbmcuanMKdmFyIFJlbW92ZUZvcm1hdHRpbmc7CnZhciBpbml0X3JlbW92ZV9mb3JtYXR0aW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZW1vdmUtZm9ybWF0dGluZy5qcyIoKSB7CiAgICBSZW1vdmVGb3JtYXR0aW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjRoMTZ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNCA4IDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS01IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMS5qcwp2YXIgUmVwZWF0MTsKdmFyIGluaXRfcmVwZWF0XzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC0xLmpzIigpIHsKICAgIFJlcGVhdDEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMGgxdjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMi5qcwp2YXIgUmVwZWF0MjsKdmFyIGluaXRfcmVwZWF0XzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC0yLmpzIigpIHsKICAgIFJlcGVhdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwZWF0LmpzCnZhciBSZXBlYXQ7CnZhciBpbml0X3JlcGVhdDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC5qcyIoKSB7CiAgICBSZXBlYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGxhY2UtYWxsLmpzCnZhciBSZXBsYWNlQWxsOwp2YXIgaW5pdF9yZXBsYWNlX2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS1hbGwuanMiKCkgewogICAgUmVwbGFjZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGExIDEgMCAwIDEtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qcwp2YXIgUmVwbGFjZTsKdmFyIGluaXRfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qcyIoKSB7CiAgICBSZXBsYWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwYTEgMSAwIDAgMS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNGExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDcgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIxNCIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBseS1hbGwuanMKdmFyIFJlcGx5QWxsOwp2YXIgaW5pdF9yZXBseV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LWFsbC5qcyIoKSB7CiAgICBSZXBseUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE3LTUtNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTh2LTJhNCA0IDAgMCAwLTQtNEg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzCnZhciBSZXBseTsKdmFyIGluaXRfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzIigpIHsKICAgIFJlcGx5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTJhNCA0IDAgMCAwLTQtNEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jld2luZC5qcwp2YXIgUmV3aW5kOwp2YXIgaW5pdF9yZXdpbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jld2luZC5qcyIoKSB7CiAgICBSZXdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2YTIgMiAwIDAgMC0zLjQxNC0xLjQxNGwtNiA2YTIgMiAwIDAgMCAwIDIuODI4bDYgNkEyIDIgMCAwIDAgMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDZhMiAyIDAgMCAwLTMuNDE0LTEuNDE0bC02IDZhMiAyIDAgMCAwIDAgMi44MjhsNiA2QTIgMiAwIDAgMCAyMiAxOHoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yaWJib24uanMKdmFyIFJpYmJvbjsKdmFyIGluaXRfcmliYm9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yaWJib24uanMiKCkgewogICAgUmliYm9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTEuMjJDMTEgOS45OTcgMTAgOSAxMCA4YTIgMiAwIDAgMSA0IDBjMCAxLS45OTggMi4wMDItMi4wMSAzLjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE4IDIuNTctMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjQzIDkuMDE2YTcgNyAwIDAgMSAxMS41MDctLjAwOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjM1IDE0LjUzIDEyIDExLjIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMzUgMTQuNTNDNy43MjggMTIuMjQ2IDYgMTAuMjIxIDYgN2E2IDUgMCAwIDEgMTIgMGMtLjAwNSAzLjIyLTEuNzc4IDUuMjM1LTMuNDMgNy41bDMuNTU3IDQuNTI3YTEgMSAwIDAgMS0uMjAzIDEuNDNsLTEuODk0IDEuMzZhMSAxIDAgMCAxLTEuMzg0LS4yMTVMMTIgMThsLTIuNjc5IDMuNTkzYTEgMSAwIDAgMS0xLjM5LjIxM2wtMS44NjUtMS4zNTNhMSAxIDAgMCAxLS4yMDMtMS40MjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzCnZhciBSb2NrZXQ7CnZhciBpbml0X3JvY2tldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzIigpIHsKICAgIFJvY2tldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuNSAxNi41Yy0xLjUgMS4yNi0yIDUtMiA1czMuNzQtLjUgNS0yYy43MS0uODQuNy0yLjEzLS4wOS0yLjkxYTIuMTggMi4xOCAwIDAgMC0yLjkxLS4wOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgMTUtMy0zYTIyIDIyIDAgMCAxIDItMy45NUExMi44OCAxMi44OCAwIDAgMSAyMiAyYzAgMi43Mi0uNzggNy41LTYgMTFhMjIuMzUgMjIuMzUgMCAwIDEtNCAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djVzMy4wMy0uNTUgNC0yYzEuMDgtMS42MiAwLTUgMC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2luZy1jaGFpci5qcwp2YXIgUm9ja2luZ0NoYWlyOwp2YXIgaW5pdF9yb2NraW5nX2NoYWlyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb2NraW5nLWNoYWlyLmpzIigpIHsKICAgIFJvY2tpbmdDaGFpciA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy41IDIgNi41IDEyLjUgMTggMTIuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjUiLCB4MjogIjUuNSIsIHkxOiAiMTIuNSIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE4LjUiLCB5MTogIjEyLjUiLCB5MjogIjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNzUgMThhMTMgMTMgMCAwIDAgMTguNSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9sbGVyLWNvYXN0ZXIuanMKdmFyIFJvbGxlckNvYXN0ZXI7CnZhciBpbml0X3JvbGxlcl9jb2FzdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb2xsZXItY29hc3Rlci5qcyIoKSB7CiAgICBSb2xsZXJDb2FzdGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOVY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5VjYuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOXYtNy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTlWOWE0IDQgMCAwIDEgNC00YzIgMCA0IDEuMzMgNiA0czQgNCA2IDRhNCA0IDAgMSAwLTMtNi42NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvc2UuanMKdmFyIFJvc2U7CnZhciBpbml0X3Jvc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvc2UuanMiKCkgewogICAgUm9zZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwaC0xYTQgNCAwIDEgMSA0LTR2LjUzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA2aDFhNCA0IDAgMCAxIDEuNDIgNy43NGwtMi4yOS44N2E2IDYgMCAwIDEtNS4zMzktMTAuNjhsMi4wNjktMS4zMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQuNSAxN2MyLjgtLjUgNC40IDAgNS41LjhzMS44IDIuMiAyLjMgMy43Yy0yIC40LTMuNS40LTQuOC0uMy0xLjItLjYtMi4zLTEuOS0zLTQuMiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43NyAxMkM0IDE1IDIgMjIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICI4IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtM2QuanMKdmFyIFJvdGF0ZTNkOwp2YXIgaW5pdF9yb3RhdGVfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS0zZC5qcyIoKSB7CiAgICBSb3RhdGUzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ2NiA3LjVDMTUuNjQzIDQuMjM3IDEzLjk1MiAyIDEyIDIgOS4yMzkgMiA3IDYuNDc3IDcgMTJzMi4yMzkgMTAgNSAxMGMuMzQyIDAgLjY3Ny0uMDY5IDEtLjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMTk0IDEzLjcwNyAzLjgxNCAxLjg2LTEuODYgMy44MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTUuNTdjLTEuODA0Ljg4NS00LjI3NCAxLjQzLTcgMS40My01LjUyMyAwLTEwLTIuMjM5LTEwLTVzNC40NzctNSAxMC01YzQuODM4IDAgOC44NzMgMS43MTggOS44IDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LWtleS5qcwp2YXIgUm90YXRlQ2N3S2V5Owp2YXIgaW5pdF9yb3RhdGVfY2N3X2tleSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1rZXkuanMiKCkgewogICAgUm90YXRlQ2N3S2V5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA5LjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgOC41LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NCA5Ljc0IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxNCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1zcXVhcmUuanMKdmFyIFJvdGF0ZUNjd1NxdWFyZTsKdmFyIGluaXRfcm90YXRlX2Njd19zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jY3ctc3F1YXJlLmpzIigpIHsKICAgIFJvdGF0ZUNjd1NxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy5qcwp2YXIgUm90YXRlQ2N3Owp2YXIgaW5pdF9yb3RhdGVfY2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LmpzIigpIHsKICAgIFJvdGF0ZUNjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LXNxdWFyZS5qcwp2YXIgUm90YXRlQ3dTcXVhcmU7CnZhciBpbml0X3JvdGF0ZV9jd19zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jdy1zcXVhcmUuanMiKCkgewogICAgUm90YXRlQ3dTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LmpzCnZhciBSb3RhdGVDdzsKdmFyIGluaXRfcm90YXRlX2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY3cuanMiKCkgewogICAgUm90YXRlQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAxIDEtOS05YzIuNTIgMCA0LjkzIDEgNi43NCAyLjc0TDIxIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3Y1aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUuanMKdmFyIFJvdXRlOwp2YXIgaW5pdF9yb3V0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUuanMiKCkgewogICAgUm91dGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE5IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOWg4LjVhMy41IDMuNSAwIDAgMCAwLTdoLTExYTMuNSAzLjUgMCAwIDEgMC03SDE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlLW9mZi5qcwp2YXIgUm91dGVPZmY7CnZhciBpbml0X3JvdXRlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUtb2ZmLmpzIigpIHsKICAgIFJvdXRlT2ZmID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMiA1LjJBMy41IDMuNTMgMCAwIDAgNi41IDEySDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1aC00LjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzCnZhciBSb3V0ZXI7CnZhciBpbml0X3JvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzIigpIHsKICAgIFJvdXRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMDEgMThINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4wMSAxOEgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljg0IDcuMTdhNCA0IDAgMCAwLTUuNjYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC42NiA0LjM0YTggOCAwIDAgMC0xMS4zMSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0yLmpzCnZhciBSb3dzMjsKdmFyIGluaXRfcm93c18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3dzLTIuanMiKCkgewogICAgUm93czIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0zLmpzCnZhciBSb3dzMzsKdmFyIGluaXRfcm93c18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3dzLTMuanMiKCkgewogICAgUm93czMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvd3MtNC5qcwp2YXIgUm93czQ7CnZhciBpbml0X3Jvd3NfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy00LmpzIigpIHsKICAgIFJvd3M0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNy41SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNi41SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yc3MuanMKdmFyIFJzczsKdmFyIGluaXRfcnNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yc3MuanMiKCkgewogICAgUnNzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMWE5IDkgMCAwIDEgOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNGExNiAxNiAwIDAgMSAxNiAxNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydWxlci1kaW1lbnNpb24tbGluZS5qcwp2YXIgUnVsZXJEaW1lbnNpb25MaW5lOwp2YXIgaW5pdF9ydWxlcl9kaW1lbnNpb25fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXItZGltZW5zaW9uLWxpbmUuanMiKCkgewogICAgUnVsZXJEaW1lbnNpb25MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxMiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXIuanMKdmFyIFJ1bGVyOwp2YXIgaW5pdF9ydWxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXIuanMiKCkgewogICAgUnVsZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zIDE1LjNhMi40IDIuNCAwIDAgMSAwIDMuNGwtMi42IDIuNmEyLjQgMi40IDAgMCAxLTMuNCAwTDIuNyA4LjdhMi40MSAyLjQxIDAgMCAxIDAtMy40bDIuNi0yLjZhMi40MSAyLjQxIDAgMCAxIDMuNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDEyLjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExLjUgOS41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgNi41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy41IDE1LjUgMi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVzc2lhbi1ydWJsZS5qcwp2YXIgUnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9ydXNzaWFuX3J1YmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydXNzaWFuLXJ1YmxlLmpzIigpIHsKICAgIFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFoOGE0IDQgMCAwIDAgMC04SDl2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNWg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FpbGJvYXQuanMKdmFyIFNhaWxib2F0Owp2YXIgaW5pdF9zYWlsYm9hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FpbGJvYXQuanMiKCkgewogICAgU2FpbGJvYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJhNCA0IDAgMCAxLTQtNCAxIDEgMCAwIDEgMS0xaDE2YTEgMSAwIDAgMSAxIDEgNCA0IDAgMCAxLTQgNHoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk05LjE1OSAyLjQ2YTEgMSAwIDAgMSAxLjUyMS0uMTkzbDkuOTc3IDguOThBMSAxIDAgMCAxIDIwIDEzSDRhMSAxIDAgMCAxLS44MjQtMS41Njd6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzCnZhciBTYWxhZDsKdmFyIGluaXRfc2FsYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzIigpIHsKICAgIFNhbGFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWE5IDkgMCAwIDAgOS05SDNhOSA5IDAgMCAwIDkgOVoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzggMTJhMi40IDIuNCAwIDAgMS0uNC00Ljc3IDIuNCAyLjQgMCAwIDEgMy4yLTIuNzcgMi40IDIuNCAwIDAgMSAzLjQ3LS42MyAyLjQgMi40IDAgMCAxIDMuMzcgMy4zNyAyLjQgMi40IDAgMCAxLTEuMSAzLjcgMi41MSAyLjUxIDAgMCAxIC4wMyAxLjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkgNy4yNUEzLjk5IDMuOTkgMCAwIDAgNCAxMGMwIC43My4yIDEuNDEuNTQgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbmR3aWNoLmpzCnZhciBTYW5kd2ljaDsKdmFyIGluaXRfc2FuZHdpY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbmR3aWNoLmpzIigpIHsKICAgIFNhbmR3aWNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTUuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjQiLCB4OiAiMiIsIHk6ICIxMSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdGVsbGl0ZS1kaXNoLmpzCnZhciBTYXRlbGxpdGVEaXNoOwp2YXIgaW5pdF9zYXRlbGxpdGVfZGlzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F0ZWxsaXRlLWRpc2guanMiKCkgewogICAgU2F0ZWxsaXRlRGlzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2E2IDYgMCAwIDAtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUuanMKdmFyIFNhdGVsbGl0ZTsKdmFyIGluaXRfc2F0ZWxsaXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUuanMiKCkgewogICAgU2F0ZWxsaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTMuNSA2LjUtMy4xNDgtMy4xNDhhMS4yMDUgMS4yMDUgMCAwIDAtMS43MDQgMEw2LjM1MiA1LjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0TDkuNSAxMC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjUgNy41IDE5IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTcuNSAxMC41IDMuMTQ4IDMuMTQ4YTEuMjA1IDEuMjA1IDAgMCAxIDAgMS43MDRsLTIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAxLTEuNzA0IDBMMTMuNSAxNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFhNiA2IDAgMCAwLTYtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDQuMjk2LTQuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAtMS43MDRsLTIuMjk2LTIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F1ZGktcml5YWwuanMKdmFyIFNhdWRpUml5YWw7CnZhciBpbml0X3NhdWRpX3JpeWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXVkaS1yaXlhbC5qcyIoKSB7CiAgICBTYXVkaVJpeWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTkuNS01LjUgMS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgNHYxMS4yMmExIDEgMCAwIDAgMS4yNDIuOTdMMjAgMTUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjk3OCAxOS4zNTEgNS41NDktMS4zNjNBMiAyIDAgMCAwIDEwIDE2VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTAgNCAxMy41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1hbGwuanMKdmFyIFNhdmVBbGw7CnZhciBpbml0X3NhdmVfYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLWFsbC5qcyIoKSB7CiAgICBTYXZlQWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYzYTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNmExIDEgMCAwIDAtMS0xaC02YTEgMSAwIDAgMC0xIDF2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMkg0YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE4YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDkuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZsMi44MjggMi44MjhBMiAyIDAgMCAxIDIyIDYuODI4VjE2YTIgMiAwIDAgMS0yLjAxIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1vZmYuanMKdmFyIFNhdmVPZmY7CnZhciBpbml0X3NhdmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLW9mZi5qcyIoKSB7CiAgICBTYXZlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNIOGExIDEgMCAwIDAtMSAxdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MSAyMC40MUEyIDIgMCAwIDEgMTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIC41OS0xLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTI5LjUgMTEuNXM1IDUgNCA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2g2LjJhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanMKdmFyIFNhdmU7CnZhciBpbml0X3NhdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanMiKCkgewogICAgU2F2ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjIgM2EyIDIgMCAwIDEgMS40LjZsMy44IDMuOGEyIDIgMCAwIDEgLjYgMS40VjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2NGExIDEgMCAwIDAgMSAxaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FsZS0zZC5qcwp2YXIgU2NhbGUzZDsKdmFyIGluaXRfc2NhbGVfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLTNkLmpzIigpIHsKICAgIFNjYWxlM2QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDd2MTFhMSAxIDAgMCAwIDEgMWgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjI5MyAxOC43MDcgMTEgMTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzCnZhciBTY2FsZTsKdmFyIGluaXRfc2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzIigpIHsKICAgIFNjYWxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxpbmcuanMKdmFyIFNjYWxpbmc7CnZhciBpbml0X3NjYWxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxpbmcuanMiKCkgewogICAgU2NhbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNUg5di01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDMgOSAxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZXllLmpzCnZhciBTY2FuRXllOwp2YXIgaW5pdF9zY2FuX2V5ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1leWUuanMiKCkgewogICAgU2NhbkV5ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tYmFyY29kZS5qcwp2YXIgU2NhbkJhcmNvZGU7CnZhciBpbml0X3NjYW5fYmFyY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1iYXJjb2RlLmpzIigpIHsKICAgIFNjYW5CYXJjb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDd2MTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWZhY2UuanMKdmFyIFNjYW5GYWNlOwp2YXIgaW5pdF9zY2FuX2ZhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZmFjZS5qcyIoKSB7CiAgICBTY2FuRmFjZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWhlYXJ0LmpzCnZhciBTY2FuSGVhcnQ7CnZhciBpbml0X3NjYW5faGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4taGVhcnQuanMiKCkgewogICAgU2NhbkhlYXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA0LjE3MiA0LjMwNmwtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NDkgMHoiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1saW5lLmpzCnZhciBTY2FuTGluZTsKdmFyIGluaXRfc2Nhbl9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWxpbmUuanMiKCkgewogICAgU2NhbkxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tcXItY29kZS5qcwp2YXIgU2NhblFyQ29kZTsKdmFyIGluaXRfc2Nhbl9xcl9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXFyLWNvZGUuanMiKCkgewogICAgU2NhblFyQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEydjRhMSAxIDAgMCAxLTEgMWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDhWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI3Iiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tc2VhcmNoLmpzCnZhciBTY2FuU2VhcmNoOwp2YXIgaW5pdF9zY2FuX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1zZWFyY2guanMiKCkgewogICAgU2NhblNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LTEuOS0xLjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXRleHQuanMKdmFyIFNjYW5UZXh0Owp2YXIgaW5pdF9zY2FuX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tdGV4dC5qcyIoKSB7CiAgICBTY2FuVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4uanMKdmFyIFNjYW47CnZhciBpbml0X3NjYW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLmpzIigpIHsKICAgIFNjYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2hvb2wuanMKdmFyIFNjaG9vbDsKdmFyIGluaXRfc2Nob29sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2hvb2wuanMiKCkgewogICAgU2Nob29sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDcuMTA2LTMuNzlhMiAyIDAgMCAxIDEuNzg4IDBMMjAgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDV2MTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Npc3NvcnMtbGluZS1kYXNoZWQuanMKdmFyIFNjaXNzb3JzTGluZURhc2hlZDsKdmFyIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaXNzb3JzLWxpbmUtZGFzaGVkLmpzIigpIHsKICAgIFNjaXNzb3JzTGluZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNDIgOS40MiA4IDEyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYtOC41OCA4LjU4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC44IDE0LjggMTQgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2lzc29ycy5qcwp2YXIgU2Npc3NvcnM7CnZhciBpbml0X3NjaXNzb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2lzc29ycy5qcyIoKSB7CiAgICBTY2lzc29ycyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTIgOC4xMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0IDguMTIgMTUuODgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjggMTQuOCAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njb290ZXIuanMKdmFyIFNjb290ZXI7CnZhciBpbml0X3Njb290ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njb290ZXIuanMiKCkgewogICAgU2Nvb3RlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRoLTMuNWwyIDExLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOTUgMTdoNS4xNDJjLjUyMyAwIC45NS0uNDA2IDEuMDYzLS45MTZhNi41IDYuNSAwIDAgMSA1LjM0NS01LjAwOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNC41IiwgY3k6ICIxNy41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjcmVlbi1zaGFyZS1vZmYuanMKdmFyIFNjcmVlblNoYXJlT2ZmOwp2YXIgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JlZW4tc2hhcmUtb2ZmLmpzIigpIHsKICAgIFNjcmVlblNoYXJlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDMtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NyZWVuLXNoYXJlLmpzCnZhciBTY3JlZW5TaGFyZTsKdmFyIGluaXRfc2NyZWVuX3NoYXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JlZW4tc2hhcmUuanMiKCkgewogICAgU2NyZWVuU2hhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgOCA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2g1djUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JvbGwtdGV4dC5qcwp2YXIgU2Nyb2xsVGV4dDsKdmFyIGluaXRfc2Nyb2xsX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC10ZXh0LmpzIigpIHsKICAgIFNjcm9sbFRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC5qcwp2YXIgU2Nyb2xsOwp2YXIgaW5pdF9zY3JvbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC5qcyIoKSB7CiAgICBTY3JvbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtYWxlcnQuanMKdmFyIFNlYXJjaEFsZXJ0Owp2YXIgaW5pdF9zZWFyY2hfYWxlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1hbGVydC5qcyIoKSB7CiAgICBTZWFyY2hBbGVydCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNvZGUuanMKdmFyIFNlYXJjaENvZGU7CnZhciBpbml0X3NlYXJjaF9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtY29kZS5qcyIoKSB7CiAgICBTZWFyY2hDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTMuNSAyLTIuNS0yLTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOC41IDcgMTFsMiAyLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1jaGVjay5qcwp2YXIgU2VhcmNoQ2hlY2s7CnZhciBpbml0X3NlYXJjaF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNoZWNrLmpzIigpIHsKICAgIFNlYXJjaENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMSAyIDIgNC00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1zbGFzaC5qcwp2YXIgU2VhcmNoU2xhc2g7CnZhciBpbml0X3NlYXJjaF9zbGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXNsYXNoLmpzIigpIHsKICAgIFNlYXJjaFNsYXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC14LmpzCnZhciBTZWFyY2hYOwp2YXIgaW5pdF9zZWFyY2hfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXguanMiKCkgewogICAgU2VhcmNoWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjUgOC41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgOC41IDUgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2guanMKdmFyIFNlYXJjaDsKdmFyIGluaXRfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2guanMiKCkgewogICAgU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zNC00LjM0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLWhvcml6b250YWwuanMKdmFyIFNlbmRIb3Jpem9udGFsOwp2YXIgaW5pdF9zZW5kX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBTZW5kSG9yaXpvbnRhbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNzE0IDMuMDQ4YS40OTguNDk4IDAgMCAwLS42ODMuNjI3bDIuODQzIDcuNjI3YTIgMiAwIDAgMSAwIDEuMzk2bC0yLjg0MiA3LjYyN2EuNDk4LjQ5OCAwIDAgMCAuNjgyLjYyN2wxOC04LjVhLjUuNSAwIDAgMCAwLS45MDR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWN0aW9uLmpzCnZhciBTZWN0aW9uOwp2YXIgaW5pdF9zZWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWN0aW9uLmpzIigpIHsKICAgIFNlY3Rpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtdG8tYmFjay5qcwp2YXIgU2VuZFRvQmFjazsKdmFyIGluaXRfc2VuZF90b19iYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLXRvLWJhY2suanMiKCkgewogICAgU2VuZFRvQmFjayA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMTQiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0djFhMiAyIDAgMCAwIDIgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDdoMWEyIDIgMCAwIDEgMiAydjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzCnZhciBTZW5kOwp2YXIgaW5pdF9zZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzIigpIHsKICAgIFNlbmQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC41MzYgMjEuNjg2YS41LjUgMCAwIDAgLjkzNy0uMDI0bDYuNS0xOWEuNDk2LjQ5NiAwIDAgMC0uNjM1LS42MzVsLTE5IDYuNWEuNS41IDAgMCAwLS4wMjQuOTM3bDcuOTMgMy4xOGEyIDIgMCAwIDEgMS4xMTIgMS4xMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuODU0IDIuMTQ3LTEwLjk0IDEwLjkzOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcGFyYXRvci1ob3Jpem9udGFsLmpzCnZhciBTZXBhcmF0b3JIb3Jpem9udGFsOwp2YXIgaW5pdF9zZXBhcmF0b3JfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLWhvcml6b250YWwuanMiKCkgewogICAgU2VwYXJhdG9ySG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcGFyYXRvci12ZXJ0aWNhbC5qcwp2YXIgU2VwYXJhdG9yVmVydGljYWw7CnZhciBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLXZlcnRpY2FsLmpzIigpIHsKICAgIFNlcGFyYXRvclZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOC00IDQgNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNvZy5qcwp2YXIgU2VydmVyQ29nOwp2YXIgaW5pdF9zZXJ2ZXJfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItY29nLmpzIigpIHsKICAgIFNlcnZlckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxNC43NzItLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMTQ4IDE0Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggOS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMgMTUuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTMuMTQ4LjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDEwSDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxNEg0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMmgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxMC44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEzLjE0OC0uOTIzLjM4MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1jcmFzaC5qcwp2YXIgU2VydmVyQ3Jhc2g7CnZhciBpbml0X3NlcnZlcl9jcmFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNyYXNoLmpzIigpIHsKICAgIFNlcnZlckNyYXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMEg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRINGEyIDIgMCAwIDAtMiAydjRhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi00YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyA2LTQgNmg2bC00IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItb2ZmLmpzCnZhciBTZXJ2ZXJPZmY7CnZhciBpbml0X3NlcnZlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1vZmYuanMiKCkgewogICAgU2VydmVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDEzYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDIuNSAyLjVDMiAyIDIgMi41IDIgNXYzYTIgMiAwIDAgMCAyIDJoNnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTd2LTFhMiAyIDAgMCAwLTItMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2LjVsMS0uNS41LjUtOC04SDR6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qcwp2YXIgU2VydmVyOwp2YXIgaW5pdF9zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qcyIoKSB7CiAgICBTZXJ2ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYuMDEiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MtMi5qcwp2YXIgU2V0dGluZ3MyOwp2YXIgaW5pdF9zZXR0aW5nc18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXR0aW5ncy0yLmpzIigpIHsKICAgIFNldHRpbmdzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE3SDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN2gtOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiNyIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MuanMKdmFyIFNldHRpbmdzOwp2YXIgaW5pdF9zZXR0aW5ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MuanMiKCkgewogICAgU2V0dGluZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcGVzLmpzCnZhciBTaGFwZXM7CnZhciBpbml0X3NoYXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcGVzLmpzIigpIHsKICAgIFNoYXBlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMyAxMGEuNy43IDAgMCAxLS42MjYtMS4wNzlMMTEuNCAzYS43LjcgMCAwIDEgMS4xOTgtLjA0M0wxNi4zIDguOWEuNy43IDAgMCAxLS41NzIgMS4xWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTcuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFyZS0yLmpzCnZhciBTaGFyZTI7CnZhciBpbml0X3NoYXJlXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLTIuanMiKCkgewogICAgU2hhcmUyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjguNTkiLCB4MjogIjE1LjQyIiwgeTE6ICIxMy41MSIsIHkyOiAiMTcuNDkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUuNDEiLCB4MjogIjguNTkiLCB5MTogIjYuNTEiLCB5MjogIjEwLjQ5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcmUuanMKdmFyIFNoYXJlOwp2YXIgaW5pdF9zaGFyZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLmpzIigpIHsKICAgIFNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzCnZhciBTaGVldDsKdmFyIGluaXRfc2hlZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzIigpIHsKICAgIFNoZWV0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiMjEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiMjEiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanMKdmFyIFNoZWxsOwp2YXIgaW5pdF9zaGVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanMiKCkgewogICAgU2hlbGwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxMWEyIDIgMCAxIDEtNCAwIDQgNCAwIDAgMSA4IDAgNiA2IDAgMCAxLTEyIDAgOCA4IDAgMCAxIDE2IDAgMTAgMTAgMCAxIDEtMjAgMCAxMS45MyAxMS45MyAwIDAgMSAyLjQyLTcuMjIgMiAyIDAgMSAxIDMuMTYgMi40NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1hbGVydC5qcwp2YXIgU2hpZWxkQWxlcnQ7CnZhciBpbml0X3NoaWVsZF9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWFsZXJ0LmpzIigpIHsKICAgIFNoaWVsZEFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1iYW4uanMKdmFyIFNoaWVsZEJhbjsKdmFyIGluaXRfc2hpZWxkX2JhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWJhbi5qcyIoKSB7CiAgICBTaGllbGRCYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjI0MyA1LjIxIDE0LjM5IDEyLjQ3MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1jaGVjay5qcwp2YXIgU2hpZWxkQ2hlY2s7CnZhciBpbml0X3NoaWVsZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWNoZWNrLmpzIigpIHsKICAgIFNoaWVsZENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWVsbGlwc2lzLmpzCnZhciBTaGllbGRFbGxpcHNpczsKdmFyIGluaXRfc2hpZWxkX2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtZWxsaXBzaXMuanMiKCkgewogICAgU2hpZWxkRWxsaXBzaXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWhhbGYuanMKdmFyIFNoaWVsZEhhbGY7CnZhciBpbml0X3NoaWVsZF9oYWxmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtaGFsZi5qcyIoKSB7CiAgICBTaGllbGRIYWxmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1taW51cy5qcwp2YXIgU2hpZWxkTWludXM7CnZhciBpbml0X3NoaWVsZF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW1pbnVzLmpzIigpIHsKICAgIFNoaWVsZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW9mZi5qcwp2YXIgU2hpZWxkT2ZmOwp2YXIgaW5pdF9zaGllbGRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtb2ZmLmpzIigpIHsKICAgIFNoaWVsZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDVhMSAxIDAgMCAwLTEgMXY3YzAgNSAzLjUgNy41IDcuNjcgOC45NGExIDEgMCAwIDAgLjY3LjAxYzIuMzUtLjgyIDQuNDgtMS45NyA1LjktMy43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjMwOSAzLjY1MkExMi4yNTIgMTIuMjUyIDAgMCAwIDExLjI0IDIuMjhhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxdjdhOS43ODQgOS43ODQgMCAwIDEtLjA4IDEuMjY0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXBsdXMuanMKdmFyIFNoaWVsZFBsdXM7CnZhciBpbml0X3NoaWVsZF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcGx1cy5qcyIoKSB7CiAgICBTaGllbGRQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1xdWVzdGlvbi1tYXJrLmpzCnZhciBTaGllbGRRdWVzdGlvbk1hcms7CnZhciBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcXVlc3Rpb24tbWFyay5qcyIoKSB7CiAgICBTaGllbGRRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC11c2VyLmpzCnZhciBTaGllbGRVc2VyOwp2YXIgaW5pdF9zaGllbGRfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXVzZXIuanMiKCkgewogICAgU2hpZWxkVXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQteC5qcwp2YXIgU2hpZWxkWDsKdmFyIGluaXRfc2hpZWxkX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC14LmpzIigpIHsKICAgIFNoaWVsZFggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanMKdmFyIFNoaWVsZDsKdmFyIGluaXRfc2hpZWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanMiKCkgewogICAgU2hpZWxkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGlwLXdoZWVsLmpzCnZhciBTaGlwV2hlZWw7CnZhciBpbml0X3NoaXBfd2hlZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAtd2hlZWwuanMiKCkgewogICAgU2hpcFdoZWVsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTUuMjMgNS4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDE5LTUuMjMtNS4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNC41VjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjIzIDEzLjc3IDUgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjMgMTAuMjMgNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAuanMKdmFyIFNoaXA7CnZhciBpbml0X3NoaXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAuanMiKCkgewogICAgU2hpcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwLjE4OVYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTNWN2EyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjM4IDIwQTExLjYgMTEuNiAwIDAgMCAyMSAxNGwtOC4xODgtMy42MzlhMiAyIDAgMCAwLTEuNjI0IDBMMyAxNGExMS42IDExLjYgMCAwIDAgMi44MSA3Ljc2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDFzMS4yIDEgMi41IDFjMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcnQuanMKdmFyIFNoaXJ0Owp2YXIgaW5pdF9zaGlydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcnQuanMiKCkgewogICAgU2hpcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4zOCAzLjQ2IDE2IDJhNCA0IDAgMCAxLTggMEwzLjYyIDMuNDZhMiAyIDAgMCAwLTEuMzQgMi4yM2wuNTggMy40N2ExIDEgMCAwIDAgLjk5Ljg0SDZ2MTBjMCAxLjEuOSAyIDIgMmg4YTIgMiAwIDAgMCAyLTJWMTBoMi4xNWExIDEgMCAwIDAgLjk5LS44NGwuNTgtMy40N2EyIDIgMCAwIDAtMS4zNC0yLjIzeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWJhZy5qcwp2YXIgU2hvcHBpbmdCYWc7CnZhciBpbml0X3Nob3BwaW5nX2JhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFnLmpzIigpIHsKICAgIFNob3BwaW5nQmFnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBhNCA0IDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwMyA2LjAzNGgxNy43OTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFza2V0LmpzCnZhciBTaG9wcGluZ0Jhc2tldDsKdmFyIGluaXRfc2hvcHBpbmdfYmFza2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG9wcGluZy1iYXNrZXQuanMiKCkgewogICAgU2hvcHBpbmdCYXNrZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMS0xIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTEtNC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTFoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy41IDExIDEuNiA3LjRhMiAyIDAgMCAwIDIgMS42aDkuOGEyIDIgMCAwIDAgMi0xLjZsMS43LTcuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgMTUuNWgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDExIDQtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDEgOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWNhcnQuanMKdmFyIFNob3BwaW5nQ2FydDsKdmFyIGluaXRfc2hvcHBpbmdfY2FydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctY2FydC5qcyIoKSB7CiAgICBTaG9wcGluZ0NhcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIxIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMjEiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIuMDUgMi4wNWgybDIuNjYgMTIuNDJhMiAyIDAgMCAwIDIgMS41OGg5Ljc4YTIgMiAwIDAgMCAxLjk1LTEuNTdsMS42NS03LjQzSDUuMTIiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvdmVsLmpzCnZhciBTaG92ZWw7CnZhciBpbml0X3Nob3ZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvdmVsLmpzIigpIHsKICAgIFNob3ZlbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjU2IDQuNTZhMS41IDEuNSAwIDAgMSAwIDIuMTIybC0uNDcuNDdhMyAzIDAgMCAxLTQuMjEyLS4wMyAzIDMgMCAwIDEgMC00LjI0M2wuNDQtLjQ0YTEuNSAxLjUgMCAwIDEgMi4xMjEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMmExIDEgMCAwIDEtMS0xdi0zLjU4NmExIDEgMCAwIDEgLjI5My0uNzA3bDMuMzU1LTMuMzU1YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsMy4yOTYgMy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtMy4zNTUgMy4zNTVhMSAxIDAgMCAxLS43MDcuMjkzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDcuODc5LTcuODc4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvd2VyLWhlYWQuanMKdmFyIFNob3dlckhlYWQ7CnZhciBpbml0X3Nob3dlcl9oZWFkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG93ZXItaGVhZC5qcyIoKSB7CiAgICBTaG93ZXJIZWFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA0IDIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA2LjVhNC45NSA0Ljk1IDAgMCAwLTcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1IDUgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3YuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTF2LjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanMKdmFyIFNocmVkZGVyOwp2YXIgaW5pdF9zaHJlZGRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanMiKCkgewogICAgU2hyZWRkZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTNWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJ2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTl2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjB2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwdi0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW1wLmpzCnZhciBTaHJpbXA7CnZhciBpbml0X3NocmltcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW1wLmpzIigpIHsKICAgIFNocmltcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMmMuNS0uNSAxLjEyLTEgMi41LTEtMS4zOCAwLTItLjUtMi41LTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMmEzLjI4IDMuMjggMCAwIDEtMy4yMjcgMS43OThsLTYuMTctLjU2MUEyLjM4NyAyLjM4NyAwIDEgMCA0LjM4NyA4SDE1LjVhMSAxIDAgMCAxIDAgMTMgMSAxIDAgMCAwIDAtNUgxMmE3IDcgMCAwIDEtNy03VjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGE4LjUgOC41IDAgMCAxIDAgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmMyIDAgNC41LTQgNC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW5rLmpzCnZhciBTaHJpbms7CnZhciBpbml0X3NocmluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW5rLmpzIigpIHsKICAgIFNocmluayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDYgNm0tNi02djQuOG0wLTQuOGg0LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOS44VjE1bTAgMEg0LjJNOSAxNWwtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDQuMlY5bTAgMGg0LjhNMTUgOWw2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA0LjJWOW0wIDBINC4yTTkgOSAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qcwp2YXIgU2hydWI7CnZhciBpbml0X3NocnViID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qcyIoKSB7CiAgICBTaHJ1YiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi01LjE3MmEyIDIgMCAwIDAtLjU4Ni0xLjQxNEw5LjUgMTMuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDE0LjUgMTIgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOC44QTYgNiAwIDAgMSAxMy44IDIwSDEwQTYuNSA2LjUgMCAwIDEgNyA4YTUgNSAwIDAgMSAxMCAweiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanMKdmFyIFNodWZmbGU7CnZhciBpbml0X3NodWZmbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanMiKCkgewogICAgU2h1ZmZsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMiA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoMS45NzNhNCA0IDAgMCAwIDMuMy0xLjdsNS40NTQtOC42YTQgNCAwIDAgMSAzLjMtMS43SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmgxLjk3MmE0IDQgMCAwIDEgMy42IDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNi4wNDFhNCA0IDAgMCAxLTMuMy0xLjhsLS4zNTktLjQ1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLWhpZ2guanMKdmFyIFNpZ25hbEhpZ2g7CnZhciBpbml0X3NpZ25hbF9oaWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtaGlnaC5qcyIoKSB7CiAgICBTaWduYWxIaWdoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbWEuanMKdmFyIFNpZ21hOwp2YXIgaW5pdF9zaWdtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbWEuanMiKCkgewogICAgU2lnbWEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtbG93LmpzCnZhciBTaWduYWxMb3c7CnZhciBpbml0X3NpZ25hbF9sb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1sb3cuanMiKCkgewogICAgU2lnbmFsTG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1tZWRpdW0uanMKdmFyIFNpZ25hbE1lZGl1bTsKdmFyIGluaXRfc2lnbmFsX21lZGl1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLW1lZGl1bS5qcyIoKSB7CiAgICBTaWduYWxNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLXplcm8uanMKdmFyIFNpZ25hbFplcm87CnZhciBpbml0X3NpZ25hbF96ZXJvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtemVyby5qcyIoKSB7CiAgICBTaWduYWxaZXJvID0gW1sicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwuanMKdmFyIFNpZ25hbDsKdmFyIGluaXRfc2lnbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwuanMiKCkgewogICAgU2lnbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYXR1cmUuanMKdmFyIFNpZ25hdHVyZTsKdmFyIGluaXRfc2lnbmF0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYXR1cmUuanMiKCkgewogICAgU2lnbmF0dXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEgMTctMi4xNTYtMS44NjhBLjUuNSAwIDAgMCAxOCAxNS41di41YTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMWMwLTIuNTQ1LTMuOTkxLTMuOTctOC41LTRhMSAxIDAgMCAwIDAgNWM0LjE1MyAwIDQuNzQ1LTExLjI5NSA1LjcwOC0xMy41YTIuNSAyLjUgMCAxIDEgMy4zMSAzLjI4NCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIxaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbnBvc3QtYmlnLmpzCnZhciBTaWducG9zdEJpZzsKdmFyIGluaXRfc2lnbnBvc3RfYmlnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC1iaWcuanMiKCkgewogICAgU2lnbnBvc3RCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5SDRMMiA3bDItMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVoNmwyIDItMiAyaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyVjRhMiAyIDAgMSAxIDQgMHYxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC5qcwp2YXIgU2lnbnBvc3Q7CnZhciBpbml0X3NpZ25wb3N0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC5qcyIoKSB7CiAgICBTaWducG9zdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDZhMiAyIDAgMCAxIDEuMzg3LjU2bDIuMzA3IDIuMjJhMSAxIDAgMCAxIDAgMS40NGwtMi4zMDcgMi4yMkEyIDIgMCAwIDEgMTggMTNINmEyIDIgMCAwIDEtMS4zODctLjU2bC0yLjMwNi0yLjIyYTEgMSAwIDAgMSAwLTEuNDRsMi4zMDYtMi4yMkEyIDIgMCAwIDEgNiA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpcmVuLmpzCnZhciBTaXJlbjsKdmFyIGluaXRfc2lyZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpcmVuLmpzIigpIHsKICAgIFNpcmVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOHYtNmE1IDUgMCAxIDEgMTAgMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAyeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjUgNC41IDE4IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkyOSA0LjkyOS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWJhY2suanMKdmFyIFNraXBCYWNrOwp2YXIgaW5pdF9za2lwX2JhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NraXAtYmFjay5qcyIoKSB7CiAgICBTa2lwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3Ljk3MSA0LjI4NUEyIDIgMCAwIDEgMjEgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwVjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qcwp2YXIgU2t1bGw7CnZhciBpbml0X3NrdWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qcyIoKSB7CiAgICBTa3VsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjUgMTctLjUtMS0uNSAxaDF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDIyYTEgMSAwIDAgMCAxLTF2LTFhMiAyIDAgMCAwIDEuNTYtMy4yNSA4IDggMCAxIDAtMTEuMTIgMEEyIDIgMCAwIDAgOCAyMHYxYTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2tpcC1mb3J3YXJkLmpzCnZhciBTa2lwRm9yd2FyZDsKdmFyIGluaXRfc2tpcF9mb3J3YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWZvcndhcmQuanMiKCkgewogICAgU2tpcEZvcndhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0djE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNi4wMjkgNC4yODVBMiAyIDAgMCAwIDMgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzCnZhciBTbGFjazsKdmFyIGluaXRfc2xhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzIigpIHsKICAgIFNsYWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMiIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDguNVYxMGgxLjVBMS41IDEuNSAwIDEgMCAxOSA4LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTUuNVYxNEgzLjVBMS41IDEuNSAwIDEgMCA1IDE1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMTQiLCB5OiAiMTMiLCByeDogIjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDE5SDE0djEuNWExLjUgMS41IDAgMSAwIDEuNS0xLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMiIsIHk6ICI4Iiwgcng6ICIxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDVIMTBWMy41QTEuNSAxLjUgMCAxIDAgOC41IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGFzaC5qcwp2YXIgU2xhc2g7CnZhciBpbml0X3NsYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGFzaC5qcyIoKSB7CiAgICBTbGFzaCA9IFtbInBhdGgiLCB7IGQ6ICJNMjIgMiAyIDIyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWNlLmpzCnZhciBTbGljZTsKdmFyIGluaXRfc2xpY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWNlLmpzIigpIHsKICAgIFNsaWNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTYuNTg2VjE5YTEgMSAwIDAgMS0xIDFIMkwxOC4zNyAzLjYzYTEgMSAwIDEgMSAzIDNsLTkuNjYzIDkuNjYzYTEgMSAwIDAgMS0xLjQxNCAwTDggMTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGlkZXJzLWhvcml6b250YWwuanMKdmFyIFNsaWRlcnNIb3Jpem9udGFsOwp2YXIgaW5pdF9zbGlkZXJzX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBTbGlkZXJzSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDN2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtdmVydGljYWwuanMKdmFyIFNsaWRlcnNWZXJ0aWNhbDsKdmFyIGluaXRfc2xpZGVyc192ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2xpZGVycy12ZXJ0aWNhbC5qcyIoKSB7CiAgICBTbGlkZXJzVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLWNoYXJnaW5nLmpzCnZhciBTbWFydHBob25lQ2hhcmdpbmc7CnZhciBpbml0X3NtYXJ0cGhvbmVfY2hhcmdpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtYXJ0cGhvbmUtY2hhcmdpbmcuanMiKCkgewogICAgU21hcnRwaG9uZUNoYXJnaW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjY3IDggMTAgMTJoNGwtMi42NjcgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtYXJ0cGhvbmUtbmZjLmpzCnZhciBTbWFydHBob25lTmZjOwp2YXIgaW5pdF9zbWFydHBob25lX25mYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS1uZmMuanMiKCkgewogICAgU21hcnRwaG9uZU5mYyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjYiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS45MSA0LjFhMTUuOTEgMTUuOTEgMCAwIDEgLjAxIDE1LjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzCnZhciBTbWFydHBob25lOwp2YXIgaW5pdF9zbWFydHBob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzIigpIHsKICAgIFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjIwIiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWlsZS1wbHVzLmpzCnZhciBTbWlsZVBsdXM7CnZhciBpbml0X3NtaWxlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLXBsdXMuanMiKCkgewogICAgU21pbGVQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDJ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzCnZhciBTbWlsZTsKdmFyIGluaXRfc21pbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzIigpIHsKICAgIFNtaWxlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NuYWlsLmpzCnZhciBTbmFpbDsKdmFyIGluaXRfc25haWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NuYWlsLmpzIigpIHsKICAgIFNuYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2E2IDYgMCAxIDAgMTIgMCA0IDQgMCAxIDAtOCAwIDIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDEyYzQuNCAwIDgtMy42IDgtOFY3YTIgMiAwIDEgMC00IDB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzIDE5LjEgNS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDMgMjAuOSA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanMKdmFyIFNub3dmbGFrZTsKdmFyIGluaXRfc25vd2ZsYWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanMiKCkgewogICAgU25vd2ZsYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMjAtMS4yNS0yLjVMNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0IDguNzUgNi41IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAxLjI1LTIuNUwxOCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA0IDEuMjUgMi41TDE4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjEtMy02aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMtMyA2IDEuNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNi41TDEwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTAtMS41IDIgMS41IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTYuNUwxNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc29hcC1kaXNwZW5zZXItZHJvcGxldC5qcwp2YXIgU29hcERpc3BlbnNlckRyb3BsZXQ7CnZhciBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvYXAtZGlzcGVuc2VyLWRyb3BsZXQuanMiKCkgewogICAgU29hcERpc3BlbnNlckRyb3BsZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAySDdhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS4yOSAxNC43NkE2LjY3IDYuNjcgMCAwIDEgMTcgMTFhNi42IDYuNiAwIDAgMS0yLjI5IDMuNzZjLTEuMTUuOTItMS43MSAyLjA0LTEuNzEgMy4xOSAwIDIuMjIgMS44IDQuMDUgNCA0LjA1czQtMS44MyA0LTQuMDVjMC0xLjE2LS41Ny0yLjI2LTEuNzEtMy4xOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjYwNyAyMUg2YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmg3VjdhMSAxIDAgMCAwLTEtMUg5YTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvZmEuanMKdmFyIFNvZmE7CnZhciBpbml0X3NvZmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvZmEuanMiKCkgewogICAgU29mYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWNmEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVYxMWEyIDIgMCAwIDAtNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zb2xhci1wYW5lbC5qcwp2YXIgU29sYXJQYW5lbDsKdmFyIGluaXRfc29sYXJfcGFuZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvbGFyLXBhbmVsLmpzIigpIHsKICAgIFNvbGFyUGFuZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMjggMTQtNC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTEuNTU4LTRINC41NTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuMjQ1IDE1LjA0QTIgMiAwIDAgMSA4IDE0aDEyYTEgMSAwIDAgMSAuODY0IDEuNTA1bC0zLjExIDUuNDU3QTIgMiAwIDAgMSAxNiAyMkg0YTEgMSAwIDAgMS0uODYzLTEuNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJhNCA0IDAgMCAxLTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjY2IDcuNjYgMS40MSAxLjQxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qcwp2YXIgU291cDsKdmFyIGluaXRfc291cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qcyIoKSB7CiAgICBTb3VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNSAxMiAyMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjI1IDNjLjI3LjEuOC41My43NSAxLjM2LS4wNi44My0uOTMgMS4yLTEgMi4wMi0uMDUuNzguMzQgMS4yNC43MyAxLjYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjI1IDNjLjI3LjEuOC41My43NCAxLjM2LS4wNS44My0uOTMgMS4yLS45OCAyLjAyLS4wNi43OC4zMyAxLjI0LjcyIDEuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNSAzYy4yNy4xLjguNTMuNzUgMS4zNi0uMDYuODMtLjkzIDEuMi0xIDIuMDItLjA1Ljc4LjM0IDEuMjQuNzQgMS42MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzCnZhciBTcGFjZTsKdmFyIGluaXRfc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzIigpIHsKICAgIFNwYWNlID0gW1sicGF0aCIsIHsgZDogIk0yMiAxN3YxYzAgLjUtLjUgMS0xIDFIM2MtLjUgMC0xLS41LTEtMXYtMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFkZS5qcwp2YXIgU3BhZGU7CnZhciBpbml0X3NwYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFkZS5qcyIoKSB7CiAgICBTcGFkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxNC40OTlhNS41IDUuNSAwIDAgMCA5LjU5MSAzLjY3NS42LjYgMCAwIDEgLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyMiAxNC41YzAtMi4yOS0xLjUtNC0zLTUuNWwtNS40OTItNS4zMTJhMiAyIDAgMCAwLTMtLjAyTDUgOC45OTljLTEuNSAxLjUtMyAzLjItMyA1LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzCnZhciBTcGFya2xlOwp2YXIgaW5pdF9zcGFya2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzIigpIHsKICAgIFNwYXJrbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMTcgMi44MTRhMSAxIDAgMCAxIDEuOTY2IDBsMS4wNTEgNS41NThhMiAyIDAgMCAwIDEuNTk0IDEuNTk0bDUuNTU4IDEuMDUxYTEgMSAwIDAgMSAwIDEuOTY2bC01LjU1OCAxLjA1MWEyIDIgMCAwIDAtMS41OTQgMS41OTRsLTEuMDUxIDUuNTU4YTEgMSAwIDAgMS0xLjk2NiAwbC0xLjA1MS01LjU1OGEyIDIgMCAwIDAtMS41OTQtMS41OTRsLTUuNTU4LTEuMDUxYTEgMSAwIDAgMSAwLTEuOTY2bDUuNTU4LTEuMDUxYTIgMiAwIDAgMCAxLjU5NC0xLjU5NHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlcy5qcwp2YXIgU3BhcmtsZXM7CnZhciBpbml0X3NwYXJrbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlcy5qcyIoKSB7CiAgICBTcGFya2xlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNGgtNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzCnZhciBTcGVha2VyOwp2YXIgaW5pdF9zcGVha2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzIigpIHsKICAgIFNwZWFrZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNCIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWVjaC5qcwp2YXIgU3BlZWNoOwp2YXIgaW5pdF9zcGVlY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWVjaC5qcyIoKSB7CiAgICBTcGVlY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjggMjB2LTQuMWwxLjkuMmEyLjMgMi4zIDAgMCAwIDIuMTY0LTIuMVY4LjNBNS4zNyA1LjM3IDAgMCAwIDIgOC4yNWMwIDIuOC42NTYgMy4wNTQgMSA0LjU1YTUuNzcgNS43NyAwIDAgMSAuMDI5IDIuNzU4TDIgMjAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOCAxNy44YTcuNSA3LjUgMCAwIDAgLjAwMy0xMC42MDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTVhMy41IDMuNSAwIDAgMC0uMDI1LTQuOTc1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2stMi5qcwp2YXIgU3BlbGxDaGVjazI7CnZhciBpbml0X3NwZWxsX2NoZWNrXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLTIuanMiKCkgewogICAgU3BlbGxDaGVjazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMWMxLjEgMCAxLjEtMSAyLjMtMXMxLjEgMSAyLjMgMWMxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLmpzCnZhciBTcGVsbENoZWNrOwp2YXIgaW5pdF9zcGVsbF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2suanMiKCkgewogICAgU3BlbGxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgNi0xMiA2IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaW5lLXBvaW50ZXIuanMKdmFyIFNwbGluZVBvaW50ZXI7CnZhciBpbml0X3NwbGluZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUtcG9pbnRlci5qcyIoKSB7CiAgICBTcGxpbmVQb2ludGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0ExMiAxMiAwIDAgMSAxNyA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanMKdmFyIFNwbGluZTsKdmFyIGluaXRfc3BsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanMiKCkgewogICAgU3BsaW5lID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE3QTEyIDEyIDAgMCAxIDE3IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qcwp2YXIgU3BsaXQ7CnZhciBpbml0X3NwbGl0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qcyIoKSB7CiAgICBTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM0gzdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTguM2E0IDQgMCAwIDAtMS4xNzItMi44NzJMMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDkgNi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Bvb2wuanMKdmFyIFNwb29sOwp2YXIgaW5pdF9zcG9vbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Bvb2wuanMiKCkgewogICAgU3Bvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMy40NCA0LjQ0MiAxNy4wODJBMiAyIDAgMCAwIDQuOTgyIDIxSDE5YTIgMiAwIDAgMCAuNTU4LTMuOTIxbC0xLjExNS0uMzJBMiAyIDAgMCAxIDE3IDE0LjgzN1Y3LjY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzCnZhciBTcG90bGlnaHQ7CnZhciBpbml0X3Nwb3RsaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzIigpIHsKICAgIFNwb3RsaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjI5NSAxOS41NjIgMTYgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTYgMy43NTggMi4wOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTIuNSAzLjAyNi0uNTk4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcuNjEgNi4zYTMgMyAwIDAgMC0zLjkyIDEuM2wtMS4zOCAyLjc5YTMgMyAwIDAgMCAxLjMgMy45MWw2Ljg5IDMuNTk3YTEgMSAwIDAgMCAxLjM0Mi0uNDQ3bDMuMTA2LTYuMjExYTEgMSAwIDAgMC0uNDQ3LTEuMzQxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDlWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwcmF5LWNhbi5qcwp2YXIgU3ByYXlDYW47CnZhciBpbml0X3NwcmF5X2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3ByYXktY2FuLmpzIigpIHsKICAgIFNwcmF5Q2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNCIsIHg6ICIxNSIsIHk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE0IDgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxOSA4LTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcHJvdXQuanMKdmFyIFNwcm91dDsKdmFyIGluaXRfc3Byb3V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcHJvdXQuanMiKCkgewogICAgU3Byb3V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgOS41MzZWN2E0IDQgMCAwIDEgNC00aDEuNWEuNS41IDAgMCAxIC41LjVWNWE0IDQgMCAwIDEtNCA0IDQgNCAwIDAgMC00IDRjMCAyIDEgMyAxIDVhNSA1IDAgMCAxLTEgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDlhNSA1IDAgMCAxIDggNCA1IDUgMCAwIDEtOC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYWN0aXZpdHkuanMKdmFyIFNxdWFyZUFjdGl2aXR5Owp2YXIgaW5pdF9zcXVhcmVfYWN0aXZpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hY3Rpdml0eS5qcyIoKSB7CiAgICBTcXVhcmVBY3Rpdml0eSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC0ybC0yIDUtMi0xMC0yIDVINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLWxlZnQuanMKdmFyIFNxdWFyZUFycm93RG93bkxlZnQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dEb3duTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2SDhWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzCnZhciBTcXVhcmVBcnJvd0Rvd25SaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzIigpIHsKICAgIFNxdWFyZUFycm93RG93blJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA4IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4djhIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLmpzCnZhciBTcXVhcmVBcnJvd0Rvd247CnZhciBpbml0X3NxdWFyZV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd0Rvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWxlZnQuanMKdmFyIFNxdWFyZUFycm93TGVmdDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1sZWZ0LmpzIigpIHsKICAgIFNxdWFyZUFycm93TGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDgtNCA0IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC1kb3duLWxlZnQuanMKdmFyIFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19vdXRfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LWRvd24tbGVmdC5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd091dERvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjFoNmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxSDN2LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LWRvd24tcmlnaHQuanMKdmFyIFNxdWFyZUFycm93T3V0RG93blJpZ2h0Owp2YXIgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY2aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1sZWZ0LmpzCnZhciBTcXVhcmVBcnJvd091dFVwTGVmdDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X291dF91cF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LXVwLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dPdXRVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzaDZhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDMgOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOVYzaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LXVwLXJpZ2h0LmpzCnZhciBTcXVhcmVBcnJvd091dFVwUmlnaHQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtdXAtcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1yaWdodC5qcwp2YXIgU3F1YXJlQXJyb3dSaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dSaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNiA0LTQtNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLWxlZnQuanMKdmFyIFNxdWFyZUFycm93VXBMZWZ0Owp2YXIgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNiA4IDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAtcmlnaHQuanMKdmFyIFNxdWFyZUFycm93VXBSaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAtcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDgtOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC5qcwp2YXIgU3F1YXJlQXJyb3dVcDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hc3Rlcmlzay5qcwp2YXIgU3F1YXJlQXN0ZXJpc2s7CnZhciBpbml0X3NxdWFyZV9hc3RlcmlzayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFzdGVyaXNrLmpzIigpIHsKICAgIFNxdWFyZUFzdGVyaXNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSAxNCA3LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDEwIDcgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1ib3R0b20tZGFzaGVkLXNjaXNzb3JzLmpzCnZhciBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczsKdmFyIGluaXRfc3F1YXJlX2JvdHRvbV9kYXNoZWRfc2Npc3NvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1ib3R0b20tZGFzaGVkLXNjaXNzb3JzLmpzIigpIHsKICAgIFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHkxOiAiMyIsIHgyOiAiMTkiLCB5MjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHkxOiAiNSIsIHgyOiAiMyIsIHkyOiAiMTkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB5MTogIjUiLCB4MjogIjIxIiwgeTI6ICIxOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeTE6ICIyMSIsIHgyOiAiMTAiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeTE6ICIyMSIsIHgyOiAiMTUiLCB5MjogIjIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAzIDUgQTIgMiAwIDAgMSA1IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDE5IDMgQTIgMiAwIDAgMSAyMSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA1IDIxIEEyIDIgMCAwIDEgMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjEgMTkgQTIgMiAwIDAgMSAxOSAyMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiOC41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICI5LjU2MDY2IiwgeDI6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTciLCB5MTogIjE3IiwgeDI6ICIxNC44MiIsIHkyOiAiMTQuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjE1LjUiLCByOiAiMS41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkuNTYwNjYiLCB5MTogIjE0LjQzOTM0IiwgeDI6ICIxNyIsIHkyOiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGFydC1nYW50dC5qcwp2YXIgU3F1YXJlQ2hhcnRHYW50dDsKdmFyIGluaXRfc3F1YXJlX2NoYXJ0X2dhbnR0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hhcnQtZ2FudHQuanMiKCkgewogICAgU3F1YXJlQ2hhcnRHYW50dCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNmg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLmpzCnZhciBTcXVhcmVDaGVjazsKdmFyIGluaXRfc3F1YXJlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2suanMiKCkgewogICAgU3F1YXJlQ2hlY2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2stYmlnLmpzCnZhciBTcXVhcmVDaGVja0JpZzsKdmFyIGluaXRfc3F1YXJlX2NoZWNrX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLWJpZy5qcyIoKSB7CiAgICBTcXVhcmVDaGVja0JpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwLjY1NlYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTIuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgMyAzTDIyIDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1kb3duLmpzCnZhciBTcXVhcmVDaGV2cm9uRG93bjsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tZG93bi5qcyIoKSB7CiAgICBTcXVhcmVDaGV2cm9uRG93biA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEwLTQgNC00LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1sZWZ0LmpzCnZhciBTcXVhcmVDaGV2cm9uTGVmdDsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tbGVmdC5qcyIoKSB7CiAgICBTcXVhcmVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1yaWdodC5qcwp2YXIgU3F1YXJlQ2hldnJvblJpZ2h0Owp2YXIgaW5pdF9zcXVhcmVfY2hldnJvbl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tcmlnaHQuanMiKCkgewogICAgU3F1YXJlQ2hldnJvblJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOCA0IDQtNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tdXAuanMKdmFyIFNxdWFyZUNoZXZyb25VcDsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLXVwLmpzIigpIHsKICAgIFNxdWFyZUNoZXZyb25VcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTQgNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jb2RlLmpzCnZhciBTcXVhcmVDb2RlOwp2YXIgaW5pdF9zcXVhcmVfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNvZGUuanMiKCkgewogICAgU3F1YXJlQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDktMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20tY29kZS5qcwp2YXIgU3F1YXJlRGFzaGVkQm90dG9tQ29kZTsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b21fY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20tY29kZS5qcyIoKSB7CiAgICBTcXVhcmVEYXNoZWRCb3R0b21Db2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41IDggMTJsMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5LjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20uanMKdmFyIFNxdWFyZURhc2hlZEJvdHRvbTsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtYm90dG9tLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZEJvdHRvbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1rYW5iYW4uanMKdmFyIFNxdWFyZURhc2hlZEthbmJhbjsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQta2FuYmFuLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZEthbmJhbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN3Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3djkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLW1vdXNlLXBvaW50ZXIuanMKdmFyIFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLW1vdXNlLXBvaW50ZXIuanMiKCkgewogICAgU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC5qcwp2YXIgU3F1YXJlRGFzaGVkVG9wU29saWQ7CnZhciBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC5qcyIoKSB7CiAgICBTcXVhcmVEYXNoZWRUb3BTb2xpZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC5qcwp2YXIgU3F1YXJlRGFzaGVkOwp2YXIgaW5pdF9zcXVhcmVfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNHYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRpdmlkZS5qcwp2YXIgU3F1YXJlRGl2aWRlOwp2YXIgaW5pdF9zcXVhcmVfZGl2aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGl2aWRlLmpzIigpIHsKICAgIFNxdWFyZURpdmlkZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRvdC5qcwp2YXIgU3F1YXJlRG90Owp2YXIgaW5pdF9zcXVhcmVfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZG90LmpzIigpIHsKICAgIFNxdWFyZURvdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZXF1YWwuanMKdmFyIFNxdWFyZUVxdWFsOwp2YXIgaW5pdF9zcXVhcmVfZXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1lcXVhbC5qcyIoKSB7CiAgICBTcXVhcmVFcXVhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1mdW5jdGlvbi5qcwp2YXIgU3F1YXJlRnVuY3Rpb247CnZhciBpbml0X3NxdWFyZV9mdW5jdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWZ1bmN0aW9uLmpzIigpIHsKICAgIFNxdWFyZUZ1bmN0aW9uID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN2MyIDAgMi44LTEgMi44LTIuOFYxMGMwLTIgMS0zLjMgMy4yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMS4yaDUuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1rYW5iYW4uanMKdmFyIFNxdWFyZUthbmJhbjsKdmFyIGluaXRfc3F1YXJlX2thbmJhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWthbmJhbi5qcyIoKSB7CiAgICBTcXVhcmVLYW5iYW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWxpYnJhcnkuanMKdmFyIFNxdWFyZUxpYnJhcnk7CnZhciBpbml0X3NxdWFyZV9saWJyYXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbGlicmFyeS5qcyIoKSB7CiAgICBTcXVhcmVMaWJyYXJ5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyAyIDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW0uanMKdmFyIFNxdWFyZU07CnZhciBpbml0X3NxdWFyZV9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbS5qcyIoKSB7CiAgICBTcXVhcmVNID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk04IDE2VjguNWEuNS41IDAgMCAxIC45LS4zbDIuNyAzLjU5OWEuNS41IDAgMCAwIC44IDBsMi43LTMuNmEuNS41IDAgMCAxIC45LjNWMTYiIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1lbnUuanMKdmFyIFNxdWFyZU1lbnU7CnZhciBpbml0X3NxdWFyZV9tZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbWVudS5qcyIoKSB7CiAgICBTcXVhcmVNZW51ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1taW51cy5qcwp2YXIgU3F1YXJlTWludXM7CnZhciBpbml0X3NxdWFyZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1pbnVzLmpzIigpIHsKICAgIFNxdWFyZU1pbnVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1vdXNlLXBvaW50ZXIuanMKdmFyIFNxdWFyZU1vdXNlUG9pbnRlcjsKdmFyIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1tb3VzZS1wb2ludGVyLmpzIigpIHsKICAgIFNxdWFyZU1vdXNlUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmctb2ZmLmpzCnZhciBTcXVhcmVQYXJraW5nT2ZmOwp2YXIgaW5pdF9zcXVhcmVfcGFya2luZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wYXJraW5nLW9mZi5qcyIoKSB7CiAgICBTcXVhcmVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN3YtMi4zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmcuanMKdmFyIFNxdWFyZVBhcmtpbmc7CnZhciBpbml0X3NxdWFyZV9wYXJraW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGFya2luZy5qcyIoKSB7CiAgICBTcXVhcmVQYXJraW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBlbi5qcwp2YXIgU3F1YXJlUGVuOwp2YXIgaW5pdF9zcXVhcmVfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVuLmpzIigpIHsKICAgIFNxdWFyZVBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC4zNzUgMi42MjVhMSAxIDAgMCAxIDMgM2wtOS4wMTMgOS4wMTRhMiAyIDAgMCAxLS44NTMuNTA1bC0yLjg3My44NGEuNS41IDAgMCAxLS42Mi0uNjJsLjg0LTIuODczYTIgMiAwIDAgMSAuNTA2LS44NTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhdXNlLmpzCnZhciBTcXVhcmVQYXVzZTsKdmFyIGluaXRfc3F1YXJlX3BhdXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGF1c2UuanMiKCkgewogICAgU3F1YXJlUGF1c2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiMTAiLCB5MTogIjE1IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeDI6ICIxNCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVyY2VudC5qcwp2YXIgU3F1YXJlUGVyY2VudDsKdmFyIGluaXRfc3F1YXJlX3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wZXJjZW50LmpzIigpIHsKICAgIFNxdWFyZVBlcmNlbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1waS5qcwp2YXIgU3F1YXJlUGk7CnZhciBpbml0X3NxdWFyZV9waSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpLmpzIigpIHsKICAgIFNxdWFyZVBpID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdhMiAyIDAgMCAxLTItMlY3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpbGNyb3cuanMKdmFyIFNxdWFyZVBpbGNyb3c7CnZhciBpbml0X3NxdWFyZV9waWxjcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGlsY3Jvdy5qcyIoKSB7CiAgICBTcXVhcmVQaWxjcm93ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJIOS41YTIuNSAyLjUgMCAwIDEgMC01SDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3YxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbGF5LmpzCnZhciBTcXVhcmVQbGF5Owp2YXIgaW5pdF9zcXVhcmVfcGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBsYXkuanMiKCkgewogICAgU3F1YXJlUGxheSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOS4wMDNhMSAxIDAgMCAxIDEuNTE3LS44NTlsNC45OTcgMi45OTdhMSAxIDAgMCAxIDAgMS43MThsLTQuOTk3IDIuOTk3QTEgMSAwIDAgMSA5IDE0Ljk5NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGx1cy5qcwp2YXIgU3F1YXJlUGx1czsKdmFyIGluaXRfc3F1YXJlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbHVzLmpzIigpIHsKICAgIFNxdWFyZVBsdXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBvd2VyLmpzCnZhciBTcXVhcmVQb3dlcjsKdmFyIGluaXRfc3F1YXJlX3Bvd2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcG93ZXIuanMiKCkgewogICAgU3F1YXJlUG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy45OTggOS4wMDNhNSA1IDAgMSAwIDgtLjAwNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yYWRpY2FsLmpzCnZhciBTcXVhcmVSYWRpY2FsOwp2YXIgaW5pdF9zcXVhcmVfcmFkaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXJhZGljYWwuanMiKCkgewogICAgU3F1YXJlUmFkaWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMmwyIDUgMi0xMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNjaXNzb3JzLmpzCnZhciBTcXVhcmVTY2lzc29yczsKdmFyIGluaXRfc3F1YXJlX3NjaXNzb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2Npc3NvcnMuanMiKCkgewogICAgU3F1YXJlU2Npc3NvcnMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiOC41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICI5LjU2MDY2IiwgeDI6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTciLCB5MTogIjE3IiwgeDI6ICIxNC44MiIsIHkyOiAiMTQuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjE1LjUiLCByOiAiMS41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkuNTYwNjYiLCB5MTogIjE0LjQzOTM0IiwgeDI6ICIxNyIsIHkyOiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yb3VuZC1jb3JuZXIuanMKdmFyIFNxdWFyZVJvdW5kQ29ybmVyOwp2YXIgaW5pdF9zcXVhcmVfcm91bmRfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcm91bmQtY29ybmVyLmpzIigpIHsKICAgIFNxdWFyZVJvdW5kQ29ybmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTFhOCA4IDAgMCAwLTgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNpZ21hLmpzCnZhciBTcXVhcmVTaWdtYTsKdmFyIGluaXRfc3F1YXJlX3NpZ21hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2lnbWEuanMiKCkgewogICAgU3F1YXJlU2lnbWEgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4LjlWN0g4bDQgNS00IDVoOHYtMS45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNsYXNoLmpzCnZhciBTcXVhcmVTbGFzaDsKdmFyIGluaXRfc3F1YXJlX3NsYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2xhc2guanMiKCkgewogICAgU3F1YXJlU2xhc2ggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtaG9yaXpvbnRhbC5qcwp2YXIgU3F1YXJlU3BsaXRIb3Jpem9udGFsOwp2YXIgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNwbGl0LWhvcml6b250YWwuanMiKCkgewogICAgU3F1YXJlU3BsaXRIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOUg1Yy0xIDAtMi0xLTItMlY3YzAtMSAxLTIgMi0yaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWgzYzEgMCAyIDEgMiAydjEwYzAgMS0xIDItMiAyaC0zIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiNCIsIHkyOiAiMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtdmVydGljYWwuanMKdmFyIFNxdWFyZVNwbGl0VmVydGljYWw7CnZhciBpbml0X3NxdWFyZV9zcGxpdF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNwbGl0LXZlcnRpY2FsLmpzIigpIHsKICAgIFNxdWFyZVNwbGl0VmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDhWNWMwLTEgMS0yIDItMmgxMGMxIDAgMiAxIDIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djNjMCAxLTEgMi0yIDJIN2MtMSAwLTItMS0yLTJ2LTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcXVhcmUuanMKdmFyIFNxdWFyZVNxdWFyZTsKdmFyIGluaXRfc3F1YXJlX3NxdWFyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNxdWFyZS5qcyIoKSB7CiAgICBTcXVhcmVTcXVhcmUgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3RhY2suanMKdmFyIFNxdWFyZVN0YWNrOwp2YXIgaW5pdF9zcXVhcmVfc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdGFjay5qcyIoKSB7CiAgICBTcXVhcmVTdGFjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmg0YzEuMSAwIDIgLjkgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2Yy0xLjEgMC0yLS45LTItMnYtNGMwLTEuMS45LTIgMi0yaDRjMS4xIDAgMiAuOSAyIDIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3Rhci5qcwp2YXIgU3F1YXJlU3RhcjsKdmFyIGluaXRfc3F1YXJlX3N0YXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdGFyLmpzIigpIHsKICAgIFNxdWFyZVN0YXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMzUgNy42OWExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2NmwtMS4xNTYtMS4xNTNhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdG9wLmpzCnZhciBTcXVhcmVTdG9wOwp2YXIgaW5pdF9zcXVhcmVfc3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXN0b3AuanMiKCkgewogICAgU3F1YXJlU3RvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICI5Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS10ZXJtaW5hbC5qcwp2YXIgU3F1YXJlVGVybWluYWw7CnZhciBpbml0X3NxdWFyZV90ZXJtaW5hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXRlcm1pbmFsLmpzIigpIHsKICAgIFNxdWFyZVRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMSAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtdXNlci1yb3VuZC5qcwp2YXIgU3F1YXJlVXNlclJvdW5kOwp2YXIgaW5pdF9zcXVhcmVfdXNlcl9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXItcm91bmQuanMiKCkgewogICAgU3F1YXJlVXNlclJvdW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjFhNiA2IDAgMCAwLTEyIDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByOiAiNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS11c2VyLmpzCnZhciBTcXVhcmVVc2VyOwp2YXIgaW5pdF9zcXVhcmVfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXIuanMiKCkgewogICAgU3F1YXJlVXNlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMXYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXguanMKdmFyIFNxdWFyZVg7CnZhciBpbml0X3NxdWFyZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUteC5qcyIoKSB7CiAgICBTcXVhcmVYID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS5qcwp2YXIgU3F1YXJlOwp2YXIgaW5pdF9zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS5qcyIoKSB7CiAgICBTcXVhcmUgPSBbWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtZXhjbHVkZS5qcwp2YXIgU3F1YXJlc0V4Y2x1ZGU7CnZhciBpbml0X3NxdWFyZXNfZXhjbHVkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1leGNsdWRlLmpzIigpIHsKICAgIFNxdWFyZXNFeGNsdWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJ2MmEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAwLTEgMXYzYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMlYxMGEyIDIgMCAwIDAtMi0yaDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAxLTEgMWgtNWEyIDIgMCAwIDAtMiAydjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLWludGVyc2VjdC5qcwp2YXIgU3F1YXJlc0ludGVyc2VjdDsKdmFyIGluaXRfc3F1YXJlc19pbnRlcnNlY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtaW50ZXJzZWN0LmpzIigpIHsKICAgIFNxdWFyZXNJbnRlcnNlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwVjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2YTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAxIDEgMXY1YTIgMiAwIDAgMS0yIDJIOWExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtc3VidHJhY3QuanMKdmFyIFNxdWFyZXNTdWJ0cmFjdDsKdmFyIGluaXRfc3F1YXJlc19zdWJ0cmFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1zdWJ0cmFjdC5qcyIoKSB7CiAgICBTcXVhcmVzU3VidHJhY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIyaC0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDRhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgzYTEgMSAwIDAgMCAxLTF2LTVhMiAyIDAgMCAxIDItMmg1YTEgMSAwIDAgMCAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwYTIgMiAwIDAgMS0yIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcmNsZS1kYXNoZWQuanMKdmFyIFNxdWlyY2xlRGFzaGVkOwp2YXIgaW5pdF9zcXVpcmNsZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlyY2xlLWRhc2hlZC5qcyIoKSB7CiAgICBTcXVpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43NzEgMjAuOTU2YTMzIDMzIDAgMCAxLTMuNTQxLjAwMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4xOCAxNy43NGMtLjUxIDEuMTUtMS4yOSAxLjkzLTIuNDM5IDIuNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk1NyAxMC4yM2EzMyAzMyAwIDAgMSAwIDMuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4wNDMgMTAuMjNhMzQgMzQgMCAwIDAgLjAwMSAzLjU0MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMy44MmMtMS4xNDkuNTEtMS45MyAxLjI5MS0yLjQ0IDIuNDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLXVuaXRlLmpzCnZhciBTcXVhcmVzVW5pdGU7CnZhciBpbml0X3NxdWFyZXNfdW5pdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtdW5pdGUuanMiKCkgewogICAgU3F1YXJlc1VuaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUuanMKdmFyIFNxdWlyY2xlOwp2YXIgaW5pdF9zcXVpcmNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUuanMiKCkgewogICAgU3F1aXJjbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzYzcuMiAwIDkgMS44IDkgOXMtMS44IDktOSA5LTktMS44LTktOSAxLjgtOSA5LTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcnJlbC5qcwp2YXIgU3F1aXJyZWw7CnZhciBpbml0X3NxdWlycmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcnJlbC5qcyIoKSB7CiAgICBTcXVpcnJlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qcwp2YXIgU3RhbXA7CnZhciBpbml0X3N0YW1wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qcyIoKSB7CiAgICBTdGFtcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzVjguNUMxNCA3IDE1IDcgMTUgNWEzIDMgMCAwIDAtNiAwYzAgMiAxIDIgMSAzLjVWMTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTUuNWEyLjUgMi41IDAgMCAwLTIuNS0yLjVoLTExQTIuNSAyLjUgMCAwIDAgNCAxNS41VjE3YTEgMSAwIDAgMCAxIDFoMTRhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXItb2ZmLmpzCnZhciBTdGFyT2ZmOwp2YXIgaW5pdF9zdGFyX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1vZmYuanMiKCkgewogICAgU3Rhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzQgOC4zNCAyIDkuMjdsNSA0Ljg3TDUuODIgMjEgMTIgMTcuNzcgMTguMTggMjFsLS41OS0zLjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjQyIDEyLjc2IDIyIDkuMjdsLTYuOTEtMUwxMiAybC0xLjQ0IDIuOTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1oYWxmLmpzCnZhciBTdGFySGFsZjsKdmFyIGluaXRfc3Rhcl9oYWxmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFyLWhhbGYuanMiKCkgewogICAgU3RhckhhbGYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxOC4zMzhhMi4xIDIuMSAwIDAgMC0uOTg3LjI0NEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIgMi4xMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIgMi4xMiAwIDAgMCAxLjU5Ny0xLjE2bDIuMzA5LTQuNjc5QS41My41MyAwIDAgMSAxMiAyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qcwp2YXIgU3RhcjsKdmFyIGluaXRfc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qcyIoKSB7CiAgICBTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNTI1IDIuMjk1YS41My41MyAwIDAgMSAuOTUgMGwyLjMxIDQuNjc5YTIuMTIzIDIuMTIzIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy43MzYgMy42MzhhMi4xMjMgMi4xMjMgMCAwIDAtLjYxMSAxLjg3OGwuODgyIDUuMTRhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIyIDIuMTIyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyMiAyLjEyMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIyIDIuMTIyIDAgMCAwIDEuNTk3LTEuMTZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RlcC1iYWNrLmpzCnZhciBTdGVwQmFjazsKdmFyIGluaXRfc3RlcF9iYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGVwLWJhY2suanMiKCkgewogICAgU3RlcEJhY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy45NzEgNC4yODVBMiAyIDAgMCAxIDE3IDZ2MTJhMiAyIDAgMCAxLTMuMDI5IDEuNzE1bC05Ljk5Ny01Ljk5OGEyIDIgMCAwIDEtLjAwMy0zLjQzMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjBWNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtZm9yd2FyZC5qcwp2YXIgU3RlcEZvcndhcmQ7CnZhciBpbml0X3N0ZXBfZm9yd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RlcC1mb3J3YXJkLmpzIigpIHsKICAgIFN0ZXBGb3J3YXJkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMC4wMjkgNC4yODVBMiAyIDAgMCAwIDcgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGV0aG9zY29wZS5qcwp2YXIgU3RldGhvc2NvcGU7CnZhciBpbml0X3N0ZXRob3Njb3BlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGV0aG9zY29wZS5qcyIoKSB7CiAgICBTdGV0aG9zY29wZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNINGEyIDIgMCAwIDAtMiAydjRhNiA2IDAgMCAwIDEyIDBWNWEyIDIgMCAwIDAtMi0yaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVhNiA2IDAgMCAwIDEyIDB2LTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNrZXIuanMKdmFyIFN0aWNrZXI7CnZhciBpbml0X3N0aWNrZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNrZXIuanMiKCkgewogICAgU3RpY2tlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDlhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE1IDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZzLjggMSAyIDFjMS4zIDAgMi0xIDItMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzCnZhciBTdG9uZTsKdmFyIGluaXRfc3RvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzIigpIHsKICAgIFN0b25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMjY0IDIuMjA1QTQgNCAwIDAgMCA2LjQyIDQuMjExbC00IDhhNCA0IDAgMCAwIDEuMzU5IDUuMTE3bDYgNGE0IDQgMCAwIDAgNC40MzggMGw2LTRhNCA0IDAgMCAwIDEuNTc2LTQuNTkybC0yLTZhNCA0IDAgMCAwLTIuNTMtMi41M3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuOTkgMjIgMTQgMTJsNy44MjIgMy4xODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTIgOC40NyAyLjMwMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNreS1ub3RlLmpzCnZhciBTdGlja3lOb3RlOwp2YXIgaW5pdF9zdGlja3lfbm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2t5LW5vdGUuanMiKCkgewogICAgU3RpY2t5Tm90ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDlhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE1IDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b3JlLmpzCnZhciBTdG9yZTsKdmFyIGluaXRfc3RvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b3JlLmpzIigpIHsKICAgIFN0b3JlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjF2LTVhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNzc0IDEwLjMxYTEuMTIgMS4xMiAwIDAgMC0xLjU0OSAwIDIuNSAyLjUgMCAwIDEtMy40NTEgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDggMCAyLjUgMi41IDAgMCAxLTMuNDUyIDAgMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjc3LTMuMjQ4bDIuODg5LTQuMTg0QTIgMiAwIDAgMSA3IDJoMTBhMiAyIDAgMCAxIDEuNjUzLjg3M2wyLjg5NSA0LjE5MmEyLjUgMi41IDAgMCAxLTMuNzc0IDMuMjQ0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTAuOTVWMTlhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04LjA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RyZXRjaC1ob3Jpem9udGFsLmpzCnZhciBTdHJldGNoSG9yaXpvbnRhbDsKdmFyIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLWhvcml6b250YWwuanMiKCkgewogICAgU3RyZXRjaEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNiIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RyZXRjaC12ZXJ0aWNhbC5qcwp2YXIgU3RyZXRjaFZlcnRpY2FsOwp2YXIgaW5pdF9zdHJldGNoX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLXZlcnRpY2FsLmpzIigpIHsKICAgIFN0cmV0Y2hWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjIwIiwgeDogIjE0IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzCnZhciBTdHJpa2V0aHJvdWdoOwp2YXIgaW5pdF9zdHJpa2V0aHJvdWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzIigpIHsKICAgIFN0cmlrZXRocm91Z2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmE0IDQgMCAwIDEgMCA4SDYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1YnNjcmlwdC5qcwp2YXIgU3Vic2NyaXB0Owp2YXIgaW5pdF9zdWJzY3JpcHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1YnNjcmlwdC5qcyIoKSB7CiAgICBTdWJzY3JpcHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDUgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDUtOCA4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDE5aC00YzAtMS41LjQ0LTIgMS41LTIuNVMyMCAxNS4zMyAyMCAxNGMwLS40Ny0uMTctLjkzLS40OC0xLjI5YTIuMTEgMi4xMSAwIDAgMC0yLjYyLS40NGMtLjQyLjI0LS43NC42Mi0uOSAxLjA3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLWRpbS5qcwp2YXIgU3VuRGltOwp2YXIgaW5pdF9zdW5fZGltID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tZGltLmpzIigpIHsKICAgIFN1bkRpbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42NTcgNi4zNDNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY1NyAxNy42NTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzQzIDE3LjY1N2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zNDMgNi4zNDNoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLW1lZGl1bS5qcwp2YXIgU3VuTWVkaXVtOwp2YXIgaW5pdF9zdW5fbWVkaXVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tbWVkaXVtLmpzIigpIHsKICAgIFN1bk1lZGl1bSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguMzY0IDUuNjM2LS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQzIDE3LjY1Ny0uNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjYzNiA1LjYzNi43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY1NyAxNy42NTcuNzA3LjcwNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1tb29uLmpzCnZhciBTdW5Nb29uOwp2YXIgaW5pdF9zdW5fbW9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLW1vb24uanMiKCkgewogICAgU3VuTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTEuMjU2IDEuMjU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tc25vdy5qcwp2YXIgU3VuU25vdzsKdmFyIGluaXRfc3VuX3Nub3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1zbm93LmpzIigpIHsKICAgIFN1blNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWEzIDMgMCAwIDAgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTYgMS41LTNIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEwLTEuNSAyIDEuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNjQgMTguMzYuNy0uNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjM0IDYuMzQtLjctLjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4uanMKdmFyIFN1bjsKdmFyIGluaXRfc3VuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4uanMiKCkgewogICAgU3VuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY2IDE3LjY2IDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjM0IDE3LjY2LTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnJpc2UuanMKdmFyIFN1bnJpc2U7CnZhciBpbml0X3N1bnJpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnJpc2UuanMiKCkgewogICAgU3VucmlzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDEwLjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyAxMC45My0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYgNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOGE0IDQgMCAwIDAtOCAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vuc2V0LmpzCnZhciBTdW5zZXQ7CnZhciBpbml0X3N1bnNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vuc2V0LmpzIigpIHsKICAgIFN1bnNldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyAxMC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgNi00IDQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4YTQgNCAwIDAgMC04IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdXBlcnNjcmlwdC5qcwp2YXIgU3VwZXJzY3JpcHQ7CnZhciBpbml0X3N1cGVyc2NyaXB0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdXBlcnNjcmlwdC5qcyIoKSB7CiAgICBTdXBlcnNjcmlwdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTkgOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE5LTgtOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMmgtNGMwLTEuNS40NDItMiAxLjUtMi41UzIwIDguMzM0IDIwIDcuMDAyYzAtLjQ3Mi0uMTctLjkzLS40ODQtMS4yOWEyLjEwNSAyLjEwNSAwIDAgMC0yLjYxNy0uNDM2Yy0uNDIuMjM5LS43MzguNjE0LS44OTkgMS4wNiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3YXRjaC1ib29rLmpzCnZhciBTd2F0Y2hCb29rOwp2YXIgaW5pdF9zd2F0Y2hfYm9vayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dhdGNoLWJvb2suanMiKCkgewogICAgU3dhdGNoQm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA3IDE3aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dpc3MtZnJhbmMuanMKdmFyIFN3aXNzRnJhbmM7CnZhciBpbml0X3N3aXNzX2ZyYW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd2lzcy1mcmFuYy5qcyIoKSB7CiAgICBTd2lzc0ZyYW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjFWM2g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZoOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjVoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3aXRjaC1jYW1lcmEuanMKdmFyIFN3aXRjaENhbWVyYTsKdmFyIGluaXRfc3dpdGNoX2NhbWVyYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dpdGNoLWNhbWVyYS5qcyIoKSB7CiAgICBTd2l0Y2hDYW1lcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOUg0YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg3YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIyLTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyIDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qcwp2YXIgU3dvcmQ7CnZhciBpbml0X3N3b3JkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qcyIoKSB7CiAgICBTd29yZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE5LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDIxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTcuNSAyMSA2VjNoLTNMNi41IDE0LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZHMuanMKdmFyIFN3b3JkczsKdmFyIGluaXRfc3dvcmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZHMuanMiKCkgewogICAgU3dvcmRzID0gWwogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNC41IDE3LjUgMyA2IDMgMyA2IDMgMTcuNSAxNC41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEzIiwgeDI6ICIxOSIsIHkxOiAiMTkiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIyMCIsIHkxOiAiMTYiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMSIsIHkxOiAiMjEiLCB5MjogIjE5IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTQuNSA2LjUgMTggMyAyMSAzIDIxIDYgMTcuNSA5LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiOSIsIHkxOiAiMTQiLCB5MjogIjE4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjciLCB4MjogIjQiLCB5MTogIjE3IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICI1IiwgeTE6ICIxOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zeXJpbmdlLmpzCnZhciBTeXJpbmdlOwp2YXIgaW5pdF9zeXJpbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zeXJpbmdlLmpzIigpIHsKICAgIFN5cmluZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyIDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA3IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5IDguNyAxOS4zYy0xIDEtMi41IDEtMy40IDBsLS42LS42Yy0xLTEtMS0yLjUgMC0zLjRMMTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5LTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA0IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLTIuanMKdmFyIFRhYmxlMjsKdmFyIGluaXRfdGFibGVfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtMi5qcyIoKSB7CiAgICBUYWJsZTIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLWNlbGxzLW1lcmdlLmpzCnZhciBUYWJsZUNlbGxzTWVyZ2U7CnZhciBpbml0X3RhYmxlX2NlbGxzX21lcmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1tZXJnZS5qcyIoKSB7CiAgICBUYWJsZUNlbGxzTWVyZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1zcGxpdC5qcwp2YXIgVGFibGVDZWxsc1NwbGl0Owp2YXIgaW5pdF90YWJsZV9jZWxsc19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY2VsbHMtc3BsaXQuanMiKCkgewogICAgVGFibGVDZWxsc1NwbGl0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLW9mLWNvbnRlbnRzLmpzCnZhciBUYWJsZU9mQ29udGVudHM7CnZhciBpbml0X3RhYmxlX29mX2NvbnRlbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1vZi1jb250ZW50cy5qcyIoKSB7CiAgICBUYWJsZU9mQ29udGVudHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jb2x1bW5zLXNwbGl0LmpzCnZhciBUYWJsZUNvbHVtbnNTcGxpdDsKdmFyIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY29sdW1ucy1zcGxpdC5qcyIoKSB7CiAgICBUYWJsZUNvbHVtbnNTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzaC0yYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtcHJvcGVydGllcy5qcwp2YXIgVGFibGVQcm9wZXJ0aWVzOwp2YXIgaW5pdF90YWJsZV9wcm9wZXJ0aWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1wcm9wZXJ0aWVzLmpzIigpIHsKICAgIFRhYmxlUHJvcGVydGllcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1yb3dzLXNwbGl0LmpzCnZhciBUYWJsZVJvd3NTcGxpdDsKdmFyIGluaXRfdGFibGVfcm93c19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtcm93cy1zcGxpdC5qcyIoKSB7CiAgICBUYWJsZVJvd3NTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjJ2LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMnYtNmEyIDIgMTM1IDAgMSAyLTJoMTRhMiAyIDQ1IDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2MmEyIDIgNDUgMCAwIDIgMmgxNGEyIDIgMTM1IDAgMCAyLTJWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLmpzCnZhciBUYWJsZTsKdmFyIGluaXRfdGFibGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS5qcyIoKSB7CiAgICBUYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXQtc21hcnRwaG9uZS5qcwp2YXIgVGFibGV0U21hcnRwaG9uZTsKdmFyIGluaXRfdGFibGV0X3NtYXJ0cGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC1zbWFydHBob25lLmpzIigpIHsKICAgIFRhYmxldFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDRhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjE2YTIgMiAwIDAgMS0yIDJoLTIuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qcwp2YXIgVGFibGV0Owp2YXIgaW5pdF90YWJsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qcyIoKSB7CiAgICBUYWJsZXQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanMKdmFyIFRhYmxldHM7CnZhciBpbml0X3RhYmxldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanMiKCkgewogICAgVGFibGV0cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiNyIsIHI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE3IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy40NiAxMC41NCA3LjA4LTcuMDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWcuanMKdmFyIFRhZzI7CnZhciBpbml0X3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFnLmpzIigpIHsKICAgIFRhZzIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41ODYgMi41ODZBMiAyIDAgMCAwIDExLjE3MiAySDRhMiAyIDAgMCAwLTIgMnY3LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw4LjcwNCA4LjcwNGEyLjQyNiAyLjQyNiAwIDAgMCAzLjQyIDBsNi41OC02LjU4YTIuNDI2IDIuNDI2IDAgMCAwIDAtMy40MnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzCnZhciBUYWdzOwp2YXIgaW5pdF90YWdzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzIigpIHsKICAgIFRhZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4xNzIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDYuNzEgNi43MWEyLjQgMi40IDAgMCAxIDAgMy40MDhsLTQuNTkyIDQuNTkyYTIuNCAyLjQgMCAwIDEtMy40MDggMGwtNi43MS02LjcxQTIgMiAwIDAgMSA2IDkuMTcyVjNhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3djYuMTcyYTIgMiAwIDAgMCAuNTg2IDEuNDE0bDYuNzEgNi43MWEyLjQgMi40IDAgMCAwIDMuMTkxLjE5MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwLjUiLCBjeTogIjYuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0xLmpzCnZhciBUYWxseTE7CnZhciBpbml0X3RhbGx5XzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTEuanMiKCkgewogICAgVGFsbHkxID0gW1sicGF0aCIsIHsgZDogIk00IDR2MTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktMi5qcwp2YXIgVGFsbHkyOwp2YXIgaW5pdF90YWxseV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0yLmpzIigpIHsKICAgIFRhbGx5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0zLmpzCnZhciBUYWxseTM7CnZhciBpbml0X3RhbGx5XzMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTMuanMiKCkgewogICAgVGFsbHkzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNC5qcwp2YXIgVGFsbHk0Owp2YXIgaW5pdF90YWxseV80ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS00LmpzIigpIHsKICAgIFRhbGx5NCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNS5qcwp2YXIgVGFsbHk1Owp2YXIgaW5pdF90YWxseV81ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS01LmpzIigpIHsKICAgIFRhbGx5NSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDYgMiAxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbmdlbnQuanMKdmFyIFRhbmdlbnQ7CnZhciBpbml0X3RhbmdlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbmdlbnQuanMiKCkgewogICAgVGFuZ2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41OSA1LjQxIDUuNDEgMTUuNTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YXJnZXQuanMKdmFyIFRhcmdldDsKdmFyIGluaXRfdGFyZ2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YXJnZXQuanMiKCkgewogICAgVGFyZ2V0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzCnZhciBUZWxlc2NvcGU7CnZhciBpbml0X3RlbGVzY29wZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzIigpIHsKICAgIFRlbGVzY29wZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEwLjA2NSAxMi40OTMtNi4xOCAxLjMxOGEuOTM0LjkzNCAwIDAgMS0xLjEwOC0uNzAybC0uNTM3LTIuMTVhMS4wNyAxLjA3IDAgMCAxIC42OTEtMS4yNjVsMTMuNTA0LTQuNDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTYgMTEuNzQ3IDQuMzMyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEtMy4xMDUtNi4yMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi40ODUgNS45NGEyIDIgMCAwIDEgMS40NTUtMi40MjVsMS4wOS0uMjcyYTEgMSAwIDAgMSAxLjIxMi43MjdsMS41MTUgNi4wNmExIDEgMCAwIDEtLjcyNyAxLjIxM2wtMS4wOS4yNzJhMiAyIDAgMCAxLTIuNDI1LTEuNDU1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE1OCA4LjYzMyAxLjExNCA0LjQ1NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIxIDMuMTA1LTYuMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQtdHJlZS5qcwp2YXIgVGVudFRyZWU7CnZhciBpbml0X3RlbnRfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC10cmVlLmpzIigpIHsKICAgIFRlbnRUcmVlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwIDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNEg3bC01IDhoMjBaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE0IDUgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQuanMKdmFyIFRlbnQ7CnZhciBpbml0X3RlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQuanMiKCkgewogICAgVGVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNSAyMSAxNCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjUgMjEgMTAgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDIxIDEyIDE1bC0zLjUgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlLWRpYWdvbmFsLmpzCnZhciBUZXN0VHViZURpYWdvbmFsOwp2YXIgaW5pdF90ZXN0X3R1YmVfZGlhZ29uYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS1kaWFnb25hbC5qcyIoKSB7CiAgICBUZXN0VHViZURpYWdvbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNyA2LjgyIDIxLjE4YTIuODMgMi44MyAwIDAgMS0zLjk5LS4wMWEyLjgzIDIuODMgMCAwIDEgMC00TDE3IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZINCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzCnZhciBUZXJtaW5hbDsKdmFyIGluaXRfdGVybWluYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzIigpIHsKICAgIFRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDYtNi02LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXN0LXR1YmUuanMKdmFyIFRlc3RUdWJlOwp2YXIgaW5pdF90ZXN0X3R1YmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS5qcyIoKSB7CiAgICBUZXN0VHViZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgMnYxNy41YzAgMS40LTEuMSAyLjUtMi41IDIuNWMtMS40IDAtMi41LTEuMS0yLjUtMi41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDE2aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlcy5qcwp2YXIgVGVzdFR1YmVzOwp2YXIgaW5pdF90ZXN0X3R1YmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXN0LXR1YmVzLmpzIigpIHsKICAgIFRlc3RUdWJlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNkg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1jZW50ZXIuanMKdmFyIFRleHRBbGlnbkNlbnRlcjsKdmFyIGluaXRfdGV4dF9hbGlnbl9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tY2VudGVyLmpzIigpIHsKICAgIFRleHRBbGlnbkNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMkg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE5SDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWVuZC5qcwp2YXIgVGV4dEFsaWduRW5kOwp2YXIgaW5pdF90ZXh0X2FsaWduX2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1lbmQuanMiKCkgewogICAgVGV4dEFsaWduRW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tanVzdGlmeS5qcwp2YXIgVGV4dEFsaWduSnVzdGlmeTsKdmFyIGluaXRfdGV4dF9hbGlnbl9qdXN0aWZ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWp1c3RpZnkuanMiKCkgewogICAgVGV4dEFsaWduSnVzdGlmeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLXN0YXJ0LmpzCnZhciBUZXh0QWxpZ25TdGFydDsKdmFyIGluaXRfdGV4dF9hbGlnbl9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1zdGFydC5qcyIoKSB7CiAgICBUZXh0QWxpZ25TdGFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci1pbnB1dC5qcwp2YXIgVGV4dEN1cnNvcklucHV0Owp2YXIgaW5pdF90ZXh0X2N1cnNvcl9pbnB1dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1jdXJzb3ItaW5wdXQuanMiKCkgewogICAgVGV4dEN1cnNvcklucHV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLTFhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEtMiAySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgOGg3YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZINGEyIDIgMCAwIDEtMi0ydi00YTIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDRoMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZ2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci5qcwp2YXIgVGV4dEN1cnNvcjsKdmFyIGluaXRfdGV4dF9jdXJzb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtY3Vyc29yLmpzIigpIHsKICAgIFRleHRDdXJzb3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMmgtMWE0IDQgMCAwIDEtNC00VjZhNCA0IDAgMCAxIDQtNGgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJoMWE0IDQgMCAwIDAgNC00di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxYTQgNCAwIDAgMSA0IDR2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtcXVvdGUuanMKdmFyIFRleHRRdW90ZTsKdmFyIGluaXRfdGV4dF9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1xdW90ZS5qcyIoKSB7CiAgICBUZXh0UXVvdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJ2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtaW5pdGlhbC5qcwp2YXIgVGV4dEluaXRpYWw7CnZhciBpbml0X3RleHRfaW5pdGlhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1pbml0aWFsLmpzIigpIHsKICAgIFRleHRJbml0aWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDEyIDMuNTUzLTcuNzI0YS41LjUgMCAwIDEgLjg5NCAwTDExIDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuOTIgMTBoNi4xNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtc2VhcmNoLmpzCnZhciBUZXh0U2VhcmNoOwp2YXIgaW5pdF90ZXh0X3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1zZWFyY2guanMiKCkgewogICAgVGV4dFNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTUiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxOS0xLjktMS45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1zZWxlY3QuanMKdmFyIFRleHRTZWxlY3Q7CnZhciBpbml0X3RleHRfc2VsZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXNlbGVjdC5qcyIoKSB7CiAgICBUZXh0U2VsZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVhdGVyLmpzCnZhciBUaGVhdGVyOwp2YXIgaW5pdF90aGVhdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVhdGVyLmpzIigpIHsKICAgIFRoZWF0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwczMtMyAzLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBzLTMtMy0zLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmMwIDQuNC0zLjYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmMwIDQuNCAzLjYgOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMHMyIDIgMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwcy0yIDItMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjJ2LTFhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtd3JhcC5qcwp2YXIgVGV4dFdyYXA7CnZhciBpbml0X3RleHRfd3JhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC13cmFwLmpzIigpIHsKICAgIFRleHRXcmFwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE0LjVhMSAxIDAgMCAxIDAgN0gxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXItc25vd2ZsYWtlLmpzCnZhciBUaGVybW9tZXRlclNub3dmbGFrZTsKdmFyIGluaXRfdGhlcm1vbWV0ZXJfc25vd2ZsYWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zbm93Zmxha2UuanMiKCkgewogICAgVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjU4NSAxNUgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYuNUwxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXItc3VuLmpzCnZhciBUaGVybW9tZXRlclN1bjsKdmFyIGluaXRfdGhlcm1vbWV0ZXJfc3VuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zdW4uanMiKCkgewogICAgVGhlcm1vbWV0ZXJTdW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOGE0IDQgMCAwIDAtMS42NDUgNy42NDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQgMTcuNjYtMS40MSAxLjQxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXIuanMKdmFyIFRoZXJtb21ldGVyOwp2YXIgaW5pdF90aGVybW9tZXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXIuanMiKCkgewogICAgVGhlcm1vbWV0ZXIgPSBbWyJwYXRoIiwgeyBkOiAiTTE0IDR2MTAuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDBaIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RodW1icy1kb3duLmpzCnZhciBUaHVtYnNEb3duOwp2YXIgaW5pdF90aHVtYnNfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLWRvd24uanMiKCkgewogICAgVGh1bWJzRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTguMTIgMTAgMTRINC4xN2EyIDIgMCAwIDEtMS45Mi0yLjU2bDIuMzMtOEEyIDIgMCAwIDEgNi41IDJIMjBhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuNzZhMiAyIDAgMCAwLTEuNzkgMS4xMUwxMiAyMmEzLjEzIDMuMTMgMCAwIDEtMy0zLjg4WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNFYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLXVwLmpzCnZhciBUaHVtYnNVcDsKdmFyIGluaXRfdGh1bWJzX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aHVtYnMtdXAuanMiKCkgewogICAgVGh1bWJzVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTB2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtY2hlY2suanMKdmFyIFRpY2tldENoZWNrOwp2YXIgaW5pdF90aWNrZXRfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1jaGVjay5qcyIoKSB7CiAgICBUaWNrZXRDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LW1pbnVzLmpzCnZhciBUaWNrZXRNaW51czsKdmFyIGluaXRfdGlja2V0X21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtbWludXMuanMiKCkgewogICAgVGlja2V0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wZXJjZW50LmpzCnZhciBUaWNrZXRQZXJjZW50Owp2YXIgaW5pdF90aWNrZXRfcGVyY2VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXBlcmNlbnQuanMiKCkgewogICAgVGlja2V0UGVyY2VudCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAxIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDEgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtcGx1cy5qcwp2YXIgVGlja2V0UGx1czsKdmFyIGluaXRfdGlja2V0X3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wbHVzLmpzIigpIHsKICAgIFRpY2tldFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtc2xhc2guanMKdmFyIFRpY2tldFNsYXNoOwp2YXIgaW5pdF90aWNrZXRfc2xhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1zbGFzaC5qcyIoKSB7CiAgICBUaWNrZXRTbGFzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDE0LjUgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXguanMKdmFyIFRpY2tldFg7CnZhciBpbml0X3RpY2tldF94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQteC5qcyIoKSB7CiAgICBUaWNrZXRYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTQuNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanMKdmFyIFRpY2tldDsKdmFyIGluaXRfdGlja2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanMiKCkgewogICAgVGlja2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTd2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMXYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy1wbGFuZS5qcwp2YXIgVGlja2V0c1BsYW5lOwp2YXIgaW5pdF90aWNrZXRzX3BsYW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXRzLXBsYW5lLmpzIigpIHsKICAgIFRpY2tldHNQbGFuZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTdoMS4yMjdhMiAyIDAgMCAwIDEuMzQ1LS41MkwxOCAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMy41IDMuNzUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI4Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qcwp2YXIgVGlja2V0czsKdmFyIGluaXRfdGlja2V0cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qcyIoKSB7CiAgICBUaWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4xNzMgOC4xOCAxMS01YTIgMiAwIDAgMSAyLjY0Ny45OTNMMTguNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiOCIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLXJlc2V0LmpzCnZhciBUaW1lclJlc2V0Owp2YXIgaW5pdF90aW1lcl9yZXNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXItcmVzZXQuanMiKCkgewogICAgVGltZXJSZXNldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzYTggOCAwIDAgMSA4LTcgOCA4IDAgMSAxLTUuMyAxNEw0IDE3LjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g0djUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aW1lci1vZmYuanMKdmFyIFRpbWVyT2ZmOwp2YXIgaW5pdF90aW1lcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLW9mZi5qcyIoKSB7CiAgICBUaW1lck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYgMTFhOCA4IDAgMCAwIDEuNyA4LjcgOCA4IDAgMCAwIDguNyAxLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy40IDcuNGE4IDggMCAwIDEgMTAuMyAxIDggOCAwIDAgMSAuOSAxMC4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLmpzCnZhciBUaW1lcjI7CnZhciBpbml0X3RpbWVyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXIuanMiKCkgewogICAgVGltZXIyID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjE0IiwgeTE6ICIyIiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxNSIsIHkxOiAiMTQiLCB5MjogIjExIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE0IiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtbGVmdC5qcwp2YXIgVG9nZ2xlTGVmdDsKdmFyIGluaXRfdG9nZ2xlX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1sZWZ0LmpzIigpIHsKICAgIFRvZ2dsZUxlZnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtcmlnaHQuanMKdmFyIFRvZ2dsZVJpZ2h0Owp2YXIgaW5pdF90b2dnbGVfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1yaWdodC5qcyIoKSB7CiAgICBUb2dnbGVSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2lsZXQuanMKdmFyIFRvaWxldDsKdmFyIGluaXRfdG9pbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2lsZXQuanMiKCkgewogICAgVG9pbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxMmgxM2ExIDEgMCAwIDEgMSAxIDUgNSAwIDAgMS01IDVoLS41OThhLjUuNSAwIDAgMC0uNDI0Ljc2NWwxLjU0NCAyLjQ3YS41LjUgMCAwIDEtLjQyNC43NjVINS40MDJhLjUuNSAwIDAgMS0uNDI0LS43NjVMNyAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4YTUgNSAwIDAgMS01LTVWNGEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAxIDIgMnY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbC1jYXNlLmpzCnZhciBUb29sQ2FzZTsKdmFyIGluaXRfdG9vbF9jYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b29sLWNhc2UuanMiKCkgewogICAgVG9vbENhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjgxNyAxMC45OTUtLjk3MS0xLjQ1IDEuMDM0LTEuMjMyYTIgMiAwIDAgMC0yLjAyNS0zLjIzOGwtMS44Mi4zNjRMOS45MSAzLjg4NWEyIDIgMCAwIDAtMy42MjUuNzQ4TDYuMTQxIDYuNTVsLTEuNzI1LjQyNmEyIDIgMCAwIDAtLjE5IDMuNzU2bC42NTcuMjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbGJveC5qcwp2YXIgVG9vbGJveDsKdmFyIGluaXRfdG9vbGJveCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbGJveC5qcyIoKSB7CiAgICBUb29sYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA2YTIgMiAwIDAgMSAxLjQxNC41ODZsNCA0QTIgMiAwIDAgMSAyMiAxMnY3YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQtNEEyIDIgMCAwIDEgOCA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzCnZhciBUb3JuYWRvOwp2YXIgaW5pdF90b3JuYWRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzIigpIHsKICAgIFRvcm5hZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvcnVzLmpzCnZhciBUb3J1czsKdmFyIGluaXRfdG9ydXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvcnVzLmpzIigpIHsKICAgIFRvcnVzID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcng6ICIzIiwgcnk6ICIyIiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICIxMi41Iiwgcng6ICIxMCIsIHJ5OiAiOC41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQtb2ZmLmpzCnZhciBUb3VjaHBhZE9mZjsKdmFyIGluaXRfdG91Y2hwYWRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC1vZmYuanMiKCkgewogICAgVG91Y2hwYWRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42NTYgMTRIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY1NiA0SDIwYTIgMiAwIDAgMSAyIDJ2MTAuMzQ0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQuanMKdmFyIFRvdWNocGFkOwp2YXIgaW5pdF90b3VjaHBhZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQuanMiKCkgewogICAgVG91Y2hwYWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG93ZXItY29udHJvbC5qcwp2YXIgVG93ZXJDb250cm9sOwp2YXIgaW5pdF90b3dlcl9jb250cm9sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3dlci1jb250cm9sLmpzIigpIHsKICAgIFRvd2VyQ29udHJvbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjIgMTIuMjcgMjAgNkg0bDEuOCA2LjI3YTEgMSAwIDAgMCAuOTUuNzNoMTAuNWExIDEgMCAwIDAgLjk2LS43M1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxM3Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIydi05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNiAxIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNi0xIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3ktYnJpY2suanMKdmFyIFRveUJyaWNrOwp2YXIgaW5pdF90b3lfYnJpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RveS1icmljay5qcyIoKSB7CiAgICBUb3lCcmljayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNWMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWNWMwLS42LS40LTEtMS0xaC0zYTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWZmaWMtY29uZS5qcwp2YXIgVHJhZmZpY0NvbmU7CnZhciBpbml0X3RyYWZmaWNfY29uZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhZmZpYy1jb25lLmpzIigpIHsKICAgIFRyYWZmaWNDb25lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMDUgMTAuOTY2YTUgMi41IDAgMCAxLTguMSAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2LjkyMyAxNC4wNDkgNC40OCAyLjA0YTEgMSAwIDAgMSAuMDAxIDEuODMxbC04LjU3NCAzLjlhMiAyIDAgMCAxLTEuNjYgMGwtOC41NzQtMy45MWExIDEgMCAwIDEgMC0xLjgzbDQuNDg0LTIuMDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOTQ5IDE0LjE0YTUgMi41IDAgMSAxLTkuOSAwTDEwLjA2MyAzLjVhMiAyIDAgMCAxIDMuODc0IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTk0IDYuNTdhNSAyLjUgMCAwIDAgNS42MSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhY3Rvci5qcwp2YXIgVHJhY3RvcjsKdmFyIGluaXRfdHJhY3RvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhY3Rvci5qcyIoKSB7CiAgICBUcmFjdG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTEgMTEgLjlhMSAxIDAgMCAxIC44IDEuMWwtLjY2NSA0LjE1OGExIDEgMCAwIDEtLjk4OC44NDJIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWExIDEgMCAwIDAtMSAxdjUuNTczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNGg4LjEyOWExIDEgMCAwIDEgLjk5Ljg2M0wxMyAxMS4yNDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMVY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTAuMVY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNSIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQtdHVubmVsLmpzCnZhciBUcmFpbkZyb250VHVubmVsOwp2YXIgaW5pdF90cmFpbl9mcm9udF90dW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LXR1bm5lbC5qcyIoKSB7CiAgICBUcmFpbkZyb250VHVubmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMlYxMmExMCAxMCAwIDEgMSAyMCAwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDYuOHYxLjRhMyAyLjggMCAxIDEtNiAwVjYuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5YTQgNCAwIDAgMS00LTR2LTNhNiA2IDAgMSAxIDEyIDB2M2E0IDQgMCAwIDEtNCA0WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOSAyIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFpbi1mcm9udC5qcwp2YXIgVHJhaW5Gcm9udDsKdmFyIGluaXRfdHJhaW5fZnJvbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LmpzIigpIHsKICAgIFRyYWluRnJvbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDMuMVY3YTQgNCAwIDAgMCA4IDBWMy4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5Yy0yLjggMC01LTIuMi01LTV2LTRhOCA4IDAgMCAxIDE2IDB2NGMwIDIuOC0yLjIgNS01IDVaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTktMiAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLXRyYWNrLmpzCnZhciBUcmFpblRyYWNrOwp2YXIgaW5pdF90cmFpbl90cmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tdHJhY2suanMiKCkgewogICAgVHJhaW5UcmFjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTcgMTcgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE0IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDExIDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDUgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjIgMjIgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYW0tZnJvbnQuanMKdmFyIFRyYW1Gcm9udDsKdmFyIGluaXRfdHJhbV9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbS1mcm9udC5qcyIoKSB7CiAgICBUcmFtRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyMi0yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbnNnZW5kZXIuanMKdmFyIFRyYW5zZ2VuZGVyOwp2YXIgaW5pdF90cmFuc2dlbmRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbnNnZW5kZXIuanMiKCkgewogICAgVHJhbnNnZW5kZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiA3LjE3IDcuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1LjM1NVYyaDMuMzU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNy4xNyA3LjE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNSA1IDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYXNoLTIuanMKdmFyIFRyYXNoMjsKdmFyIGluaXRfdHJhc2hfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2gtMi5qcyIoKSB7CiAgICBUcmFzaDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2guanMKdmFyIFRyYXNoOwp2YXIgaW5pdF90cmFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2guanMiKCkgewogICAgVHJhc2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA2aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLWRlY2lkdW91cy5qcwp2YXIgVHJlZURlY2lkdW91czsKdmFyIGluaXRfdHJlZV9kZWNpZHVvdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtZGVjaWR1b3VzLmpzIigpIHsKICAgIFRyZWVEZWNpZHVvdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE5YTQgNCAwIDAgMS0yLjI0LTcuMzJBMy41IDMuNSAwIDAgMSA5IDYuMDNWNmEzIDMgMCAxIDEgNiAwdi4wNGEzLjUgMy41IDAgMCAxIDMuMjQgNS42NUE0IDQgMCAwIDEgMTYgMTlaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLXBhbG0uanMKdmFyIFRyZWVQYWxtOwp2YXIgaW5pdF90cmVlX3BhbG0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGFsbS5qcyIoKSB7CiAgICBUcmVlUGFsbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDhjMC0yLjc2LTIuNDYtNS01LjUtNVMyIDUuMjQgMiA4aDJsMS0xIDEgMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDcuMTRBNS44MiA1LjgyIDAgMCAxIDE2LjUgNmMzLjA0IDAgNS41IDIuMjQgNS41IDVoLTNsLTEtMS0xIDFoLTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS44OSA5LjcxYy0yLjE1IDIuMTUtMi4zIDUuNDctLjM1IDcuNDNsNC4yNC00LjI1LjctLjcuNzEtLjcxIDIuMTItMi4xMmMtMS45NS0xLjk2LTUuMjctMS44LTcuNDIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTUuNWMuNSAyLjUtLjE3IDQuNS0xIDYuNWg0YzItNS41LS41LTEyLTEtMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLXBpbmUuanMKdmFyIFRyZWVQaW5lOwp2YXIgaW5pdF90cmVlX3BpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGluZS5qcyIoKSB7CiAgICBUcmVlUGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlcy5qcwp2YXIgVHJlZXM7CnZhciBpbml0X3RyZWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlcy5qcyIoKSB7CiAgICBUcmVlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwdi4yQTMgMyAwIDAgMSA4LjkgMTZINWEzIDMgMCAwIDEtMS01LjhWMTBhMyAzIDAgMCAxIDYgMFoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTloOC4zYTEgMSAwIDAgMCAuNy0xLjdMMTggMTRoLjNhMSAxIDAgMCAwIC43LTEuN0wxNiA5aC4yYTEgMSAwIDAgMCAuOC0xLjdMMTMgM2wtMS40IDEuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWxsby5qcwp2YXIgVHJlbGxvOwp2YXIgaW5pdF90cmVsbG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWxsby5qcyIoKSB7CiAgICBUcmVsbG8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIzIiwgaGVpZ2h0OiAiOSIsIHg6ICI3IiwgeTogIjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLWRvd24uanMKdmFyIFRyZW5kaW5nRG93bjsKdmFyIGluaXRfdHJlbmRpbmdfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctZG93bi5qcyIoKSB7CiAgICBUcmVuZGluZ0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2g2di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTguNS04LjUtNSA1TDIgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLXVwLWRvd24uanMKdmFyIFRyZW5kaW5nVXBEb3duOwp2YXIgaW5pdF90cmVuZGluZ191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy11cC1kb3duLmpzIigpIHsKICAgIFRyZW5kaW5nVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODI4IDE0LjgyOCAyMSAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtOSA5LTQtNC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctdXAuanMKdmFyIFRyZW5kaW5nVXA7CnZhciBpbml0X3RyZW5kaW5nX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy11cC5qcyIoKSB7CiAgICBUcmVuZGluZ1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04LjUgOC41LTUtNUwyIDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtYWxlcnQuanMKdmFyIFRyaWFuZ2xlQWxlcnQ7CnZhciBpbml0X3RyaWFuZ2xlX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1hbGVydC5qcyIoKSB7CiAgICBUcmlhbmdsZUFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLWRhc2hlZC5qcwp2YXIgVHJpYW5nbGVEYXNoZWQ7CnZhciBpbml0X3RyaWFuZ2xlX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtZGFzaGVkLmpzIigpIHsKICAgIFRyaWFuZ2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMTcgNC4xOTNhMiAyIDAgMCAxIDMuNjY2LjAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1Ljg3NCA3Ljc0MyAxIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4Ljg0OSAxMi45NTIgMSAxLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MjQgMTguMThhMiAyIDAgMCAxLTEuODM1IDIuODI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMDI0IDIxYTIgMiAwIDAgMS0xLjgzOS0yLjgzOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjEzNiAxMi45NTItMSAxLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC4xMDIgNy43NDMtMSAxLjczMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLXJpZ2h0LmpzCnZhciBUcmlhbmdsZVJpZ2h0Owp2YXIgaW5pdF90cmlhbmdsZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtcmlnaHQuanMiKCkgewogICAgVHJpYW5nbGVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4YTIgMiAwIDAgMS0yIDJIM2MtMS4xIDAtMS4zLS42LS40LTEuM0wyMC40IDQuM2MuOS0uNyAxLjYtLjQgMS42LjdaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUuanMKdmFyIFRyaWFuZ2xlOwp2YXIgaW5pdF90cmlhbmdsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUuanMiKCkgewogICAgVHJpYW5nbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43MyA0YTIgMiAwIDAgMC0zLjQ2IDBsLTggMTRBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuNzMtM1oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cm9waHkuanMKdmFyIFRyb3BoeTsKdmFyIGluaXRfdHJvcGh5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cm9waHkuanMiKCkgewogICAgVHJvcGh5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuNjZ2MS42MjZhMiAyIDAgMCAxLS45NzYgMS42OTZBNSA1IDAgMCAwIDcgMjEuOTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0LjY2djEuNjI2YTIgMiAwIDAgMCAuOTc2IDEuNjk2QTUgNSAwIDAgMSAxNyAyMS45NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWgxLjVhMSAxIDAgMCAwIDAtNUgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOWE2IDYgMCAwIDAgMTIgMFYzYTEgMSAwIDAgMC0xLTFIN2ExIDEgMCAwIDAtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDlINC41YTEgMSAwIDAgMSAwLTVINiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RydWNrLWVsZWN0cmljLmpzCnZhciBUcnVja0VsZWN0cmljOwp2YXIgaW5pdF90cnVja19lbGVjdHJpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJ1Y2stZWxlY3RyaWMuanMiKCkgewogICAgVHJ1Y2tFbGVjdHJpYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5VjdhMiAyIDAgMCAwLTItMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5SDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTloMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyTDE4LjMgOS4zOGExIDEgMCAwIDAtLjc4LS4zOEgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzdjVhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMyAyLjE1IDUuMTVhLjQ5NS40OTUgMCAwIDAgLjM1Ljg2aDIuMTVhLjQ3LjQ3IDAgMCAxIC4zNS44NkwzIDkuMDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qcwp2YXIgVHJ1Y2s7CnZhciBpbml0X3RydWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qcyIoKSB7CiAgICBUcnVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE4SDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjI0bC0zLjQ4LTQuMzVBMSAxIDAgMCAwIDE3LjUyIDhIMTQiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHVya2lzaC1saXJhLmpzCnZhciBUdXJraXNoTGlyYTsKdmFyIGluaXRfdHVya2lzaF9saXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJraXNoLWxpcmEuanMiKCkgewogICAgVHVya2lzaExpcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0IDUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LjUtMTAgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmE5IDkgMCAwIDEtOSA5VjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJudGFibGUuanMKdmFyIFR1cm50YWJsZTsKdmFyIGluaXRfdHVybnRhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJudGFibGUuanMiKCkgewogICAgVHVybnRhYmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2NGE4IDggMCAwIDEtMS4wNyA0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJ0bGUuanMKdmFyIFR1cnRsZTsKdmFyIGluaXRfdHVydGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJ0bGUuanMiKCkgewogICAgVHVydGxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgMTAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNhOCA4IDAgMSAwLTE2IDB2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtM2wyLTRoNFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC44MiA3LjkgOCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS4xOCA3LjkgMTIgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOTMgMTBIMjBhMiAyIDAgMCAxIDAgNEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYtbWluaW1hbC1wbGF5LmpzCnZhciBUdk1pbmltYWxQbGF5Owp2YXIgaW5pdF90dl9taW5pbWFsX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwtcGxheS5qcyIoKSB7CiAgICBUdk1pbmltYWxQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMDMzIDkuNDRhLjY0Ny42NDcgMCAwIDEgMCAxLjEybC00LjA2NSAyLjM1MmEuNjQ1LjY0NSAwIDAgMS0uOTY4LS41NlY3LjY0OGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwuanMKdmFyIFR2TWluaW1hbDsKdmFyIGluaXRfdHZfbWluaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYtbWluaW1hbC5qcyIoKSB7CiAgICBUdk1pbmltYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYuanMKdmFyIFR2Owp2YXIgaW5pdF90diA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYuanMiKCkgewogICAgVHYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyLTUgNS01LTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNSIsIHg6ICIyIiwgeTogIjciLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0Y2guanMKdmFyIFR3aXRjaDsKdmFyIGluaXRfdHdpdGNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0Y2guanMiKCkgewogICAgVHdpdGNoID0gW1sicGF0aCIsIHsgZDogIk0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3IiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanMKdmFyIFR3aXR0ZXI7CnZhciBpbml0X3R3aXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanMiKCkgewogICAgVHdpdHRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDRzLS43IDIuMS0yIDMuNGMxLjYgMTAtOS40IDE3LjMtMTggMTEuNiAyLjIuMSA0LjQtLjYgNi0yQzMgMTUuNS41IDkuNiAzIDVjMi4yIDIuNiA1LjYgNC4xIDkgNC0uOS00LjIgNC02LjYgNy0zLjggMS4xIDAgMy0xLjIgMy0xLjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHlwZS1vdXRsaW5lLmpzCnZhciBUeXBlT3V0bGluZTsKdmFyIGluaXRfdHlwZV9vdXRsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLW91dGxpbmUuanMiKCkgewogICAgVHlwZU91dGxpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNi41YS41LjUgMCAwIDAgLjUuNWguNWEyIDIgMCAwIDEgMCA0SDlhMiAyIDAgMCAxIDAtNGguNWEuNS41IDAgMCAwIC41LS41di05YS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDAgMC0uNS41VjhhMiAyIDAgMCAxLTQgMFY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS00IDB2LS41YS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDAgMC0uNS41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R5cGUuanMKdmFyIFR5cGU7CnZhciBpbml0X3R5cGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R5cGUuanMiKCkgewogICAgVHlwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjVhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEtb2ZmLmpzCnZhciBVbWJyZWxsYU9mZjsKdmFyIGluaXRfdW1icmVsbGFfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS1vZmYuanMiKCkgewogICAgVW1icmVsbGFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y3YTIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjY1NiAxM2gyLjMzNmExIDEgMCAwIDAgLjk3LTEuMjc0IDEwLjI4NCAxMC4yODQgMCAwIDAtMTIuMDctNy41MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS45NjEgNS45NTdhMTAuMjggMTAuMjggMCAwIDAtMy45MjIgNS43NjlBMSAxIDAgMCAwIDMgMTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS5qcwp2YXIgVW1icmVsbGE7CnZhciBpbml0X3VtYnJlbGxhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS5qcyIoKSB7CiAgICBVbWJyZWxsYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTkyIDEzYTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xOS45MjMgMEExIDEgMCAwIDAgMyAxM3oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanMKdmFyIFVuZGVybGluZTsKdmFyIGluaXRfdW5kZXJsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanMiKCkgewogICAgVW5kZXJsaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djZhNiA2IDAgMCAwIDEyIDBWNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI0IiwgeDI6ICIyMCIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby0yLmpzCnZhciBVbmRvMjsKdmFyIGluaXRfdW5kb18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLTIuanMiKCkgewogICAgVW5kbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0IDQgOWw1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41YTUuNSA1LjUgMCAwIDEtNS41IDUuNUgxMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZG8tZG90LmpzCnZhciBVbmRvRG90Owp2YXIgaW5pdF91bmRvX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby1kb3QuanMiKCkgewogICAgVW5kb0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC0xNS02LjdMMyAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLmpzCnZhciBVbmRvOwp2YXIgaW5pdF91bmRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLmpzIigpIHsKICAgIFVuZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC05LTkgOSA5IDAgMCAwLTYgMi4zTDMgMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtaG9yaXpvbnRhbC5qcwp2YXIgVW5mb2xkSG9yaXpvbnRhbDsKdmFyIGluaXRfdW5mb2xkX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZm9sZC1ob3Jpem9udGFsLmpzIigpIHsKICAgIFVuZm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5mb2xkLXZlcnRpY2FsLmpzCnZhciBVbmZvbGRWZXJ0aWNhbDsKdmFyIGluaXRfdW5mb2xkX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtdmVydGljYWwuanMiKCkgewogICAgVW5mb2xkVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTktMyAzLTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1LTMtMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmdyb3VwLmpzCnZhciBVbmdyb3VwOwp2YXIgaW5pdF91bmdyb3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmdyb3VwLmpzIigpIHsKICAgIFVuZ3JvdXAgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjYiLCB4OiAiMTEiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzCnZhciBVbml2ZXJzaXR5Owp2YXIgaW5pdF91bml2ZXJzaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzIigpIHsKICAgIFVuaXZlcnNpdHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA3YTEgMSAwIDAgMC0xLTFoLTJhMiAyIDAgMCAxLTEuMTQzLS4zNTlMMTMuMTQzIDIuMzZhMiAyIDAgMCAwLTIuMjg2LS4wMDFMNi4xNDMgNS42NEEyIDIgMCAwIDEgNSA2SDNhMSAxIDAgMCAwLTEgMXYxMmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmxpbmstMi5qcwp2YXIgVW5saW5rMjsKdmFyIGluaXRfdW5saW5rXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay0yLmpzIigpIHsKICAgIFVubGluazIgPSBbWyJwYXRoIiwgeyBkOiAiTTE1IDdoMmE1IDUgMCAwIDEgMCAxMGgtMm0tNiAwSDdBNSA1IDAgMCAxIDcgN2gyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay5qcwp2YXIgVW5saW5rOwp2YXIgaW5pdF91bmxpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay5qcyIoKSB7CiAgICBVbmxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOC44NCAxMi4yNSAxLjcyLTEuNzFoLS4wMmE1LjAwNCA1LjAwNCAwIDAgMC0uMTItNy4wNyA1LjAwNiA1LjAwNiAwIDAgMC02Ljk1IDBsLTEuNzIgMS43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjIiLCB5MjogIjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiMjIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VucGx1Zy5qcwp2YXIgVW5wbHVnOwp2YXIgaW5pdF91bnBsdWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VucGx1Zy5qcyIoKSB7CiAgICBVbnBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgMjAuM2EyLjQgMi40IDAgMCAwIDMuNCAwTDEyIDE4bC02LTYtMi4zIDIuM2EyLjQgMi40IDAgMCAwIDAgMy40WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTMuNSAxMCAxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDE2LjUgMTMgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgNiA2IDYgMi4zLTIuM2EyLjQgMi40IDAgMCAwIDAtMy40bC0yLjYtMi42YTIuNCAyLjQgMCAwIDAtMy40IDBaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNiLmpzCnZhciBVc2I7CnZhciBpbml0X3VzYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNiLmpzIigpIHsKICAgIFVzYiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjIwIiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC43IDE5LjMgMTkgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTMgMSAyIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMjYgNy42OCA1IDEybDIgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCA1IDIgMy41LTMuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMiAxLTEgMSAxLTEgMVoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanMKdmFyIFVwbG9hZDsKdmFyIGluaXRfdXBsb2FkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanMiKCkgewogICAgVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4LTUtNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItY2hlY2suanMKdmFyIFVzZXJDaGVjazsKdmFyIGluaXRfdXNlcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1jaGVjay5qcyIoKSB7CiAgICBVc2VyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMSAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWNvZy5qcwp2YXIgVXNlckNvZzsKdmFyIGluaXRfdXNlcl9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItY29nLmpzIigpIHsKICAgIFVzZXJDb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNUg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgMTYuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDEzLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDEyLjIyOC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDE3Ljc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTIuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDE4LjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDEzLjg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTUiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItbG9jay5qcwp2YXIgVXNlckxvY2s7CnZhciBpbml0X3VzZXJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1sb2NrLmpzIigpIHsKICAgIFVzZXJMb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTUuNVYxNGEyIDIgMCAwIDEgNCAwdjEuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMyIsIHk6ICIxNiIsIHJ4OiAiLjg5OSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItbWludXMuanMKdmFyIFVzZXJNaW51czsKdmFyIGluaXRfdXNlcl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1taW51cy5qcyIoKSB7CiAgICBVc2VyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNiIsIHkxOiAiMTEiLCB5MjogIjExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wZW4uanMKdmFyIFVzZXJQZW47CnZhciBpbml0X3VzZXJfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBlbi5qcyIoKSB7CiAgICBVc2VyUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNSAxNUg3YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wbHVzLmpzCnZhciBVc2VyUGx1czsKdmFyIGluaXRfdXNlcl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBsdXMuanMiKCkgewogICAgVXNlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxOSIsIHkxOiAiOCIsIHkyOiAiMTQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLWNoZWNrLmpzCnZhciBVc2VyUm91bmRDaGVjazsKdmFyIGluaXRfdXNlcl9yb3VuZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jaGVjay5qcyIoKSB7CiAgICBVc2VyUm91bmRDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEzLjI5Mi02IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jb2cuanMKdmFyIFVzZXJSb3VuZENvZzsKdmFyIGluaXRfdXNlcl9yb3VuZF9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtY29nLmpzIigpIHsKICAgIFVzZXJSb3VuZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtbWludXMuanMKdmFyIFVzZXJSb3VuZE1pbnVzOwp2YXIgaW5pdF91c2VyX3JvdW5kX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLW1pbnVzLmpzIigpIHsKICAgIFVzZXJSb3VuZE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wZW4uanMKdmFyIFVzZXJSb3VuZFBlbjsKdmFyIGluaXRfdXNlcl9yb3VuZF9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtcGVuLmpzIigpIHsKICAgIFVzZXJSb3VuZFBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjgyMS03LjQ4NyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wbHVzLmpzCnZhciBVc2VyUm91bmRQbHVzOwp2YXIgaW5pdF91c2VyX3JvdW5kX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtcGx1cy5qcyIoKSB7CiAgICBVc2VyUm91bmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXNlYXJjaC5qcwp2YXIgVXNlclJvdW5kU2VhcmNoOwp2YXIgaW5pdF91c2VyX3JvdW5kX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1zZWFyY2guanMiKCkgewogICAgVXNlclJvdW5kU2VhcmNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjQzNC03LjYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItMS45LTEuOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQuanMKdmFyIFVzZXJSb3VuZDsKdmFyIGluaXRfdXNlcl9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC5qcyIoKSB7CiAgICBVc2VyUm91bmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjFhOCA4IDAgMCAwLTE2IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXguanMKdmFyIFVzZXJSb3VuZFg7CnZhciBpbml0X3VzZXJfcm91bmRfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC14LmpzIigpIHsKICAgIFVzZXJSb3VuZFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMS44NzMtNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc2VhcmNoLmpzCnZhciBVc2VyU2VhcmNoOwp2YXIgaW5pdF91c2VyX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1zZWFyY2guanMiKCkgewogICAgVXNlclNlYXJjaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4zIDE1SDdhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE3IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMS45LTEuOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc3Rhci5qcwp2YXIgVXNlclN0YXI7CnZhciBpbml0X3VzZXJfc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1zdGFyLmpzIigpIHsKICAgIFVzZXJTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuMDUxIDEyLjYxNmExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2NmwtMS4xNTYtMS4xNTNhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1SDdhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIteC5qcwp2YXIgVXNlclg7CnZhciBpbml0X3VzZXJfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci14LmpzIigpIHsKICAgIFVzZXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNyIsIHgyOiAiMjIiLCB5MTogIjgiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNyIsIHkxOiAiOCIsIHkyOiAiMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLmpzCnZhciBVc2VyOwp2YXIgaW5pdF91c2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLmpzIigpIHsKICAgIFVzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXJzLXJvdW5kLmpzCnZhciBVc2Vyc1JvdW5kOwp2YXIgaW5pdF91c2Vyc19yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMtcm91bmQuanMiKCkgewogICAgVXNlcnNSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTggOCAwIDAgMC0xNiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGMwLTMuMzctMi02LjUtNC04YTUgNSAwIDAgMC0uNDUtOC4zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMuanMKdmFyIFVzZXJzOwp2YXIgaW5pdF91c2VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMuanMiKCkgewogICAgVXNlcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDMuMTI4YTQgNCAwIDAgMSAwIDcuNzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIxdi0yYTQgNCAwIDAgMC0zLTMuODciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91dGVuc2lscy1jcm9zc2VkLmpzCnZhciBVdGVuc2lsc0Nyb3NzZWQ7CnZhciBpbml0X3V0ZW5zaWxzX2Nyb3NzZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLWNyb3NzZWQuanMiKCkgewogICAgVXRlbnNpbHNDcm9zc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1IDMuMyAzLjNhNC4yIDQuMiAwIDAgMCAwIDZsNy4zIDcuM2MuNy43IDIgLjcgMi44IDBMMTUgMTVabTAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4xIDIxLjggNi40LTYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTcgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzCnZhciBVdGVuc2lsczsKdmFyIGluaXRfdXRlbnNpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzIigpIHsKICAgIFV0ZW5zaWxzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjdjMCAxLjEuOSAyIDIgMmg0YTIgMiAwIDAgMCAyLTJWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWMmE1IDUgMCAwIDAtNSA1djZjMCAxLjEuOSAyIDIgMmgzWm0wIDB2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Zhbi5qcwp2YXIgVmFuOwp2YXIgaW5pdF92YW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Zhbi5qcyIoKSB7CiAgICBWYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA2djVhMSAxIDAgMCAwIDEgMWg2LjEwMmExIDEgMCAwIDEgLjcxMi4yOThsLjg5OC45MWExIDEgMCAwIDEgLjI4OC43MDJWMTdhMSAxIDAgMCAxLTEgMWgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRpbGl0eS1wb2xlLmpzCnZhciBVdGlsaXR5UG9sZTsKdmFyIGluaXRfdXRpbGl0eV9wb2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91dGlsaXR5LXBvbGUuanMiKCkgewogICAgVXRpbGl0eVBvbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDUtNyA3LTctNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZhcmlhYmxlLmpzCnZhciBWYXJpYWJsZTsKdmFyIGluaXRfdmFyaWFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZhcmlhYmxlLmpzIigpIHsKICAgIFZhcmlhYmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMXMtNC0zLTQtOSA0LTkgNC05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNzNCAzIDQgOS00IDktNCA5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qcwp2YXIgVmF1bHQ7CnZhciBpbml0X3ZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qcyIoKSB7CiAgICBWYXVsdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA3LjkgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNCAxMC42IDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSAxNi4xIDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICIxNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40IDEzLjQgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVjdG9yLXNxdWFyZS5qcwp2YXIgVmVjdG9yU3F1YXJlOwp2YXIgaW5pdF92ZWN0b3Jfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZWN0b3Itc3F1YXJlLmpzIigpIHsKICAgIFZlY3RvclNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjUgN2EyNCAyNCAwIDAgMSAwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSA3YTI0IDI0IDAgMCAwIDAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOS41YTI0IDI0IDAgMCAwIDEwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0LjVhMjQgMjQgMCAwIDEgMTAgMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE3IiwgeTogIjE3Iiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE3IiwgeTogIjIiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjIiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVnYW4uanMKdmFyIFZlZ2FuOwp2YXIgaW5pdF92ZWdhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVnYW4uanMiKCkgewogICAgVmVnYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4cTYgMCA2LTYtNiAwLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJhMjYuNiAyNi42IDAgMCAxIDEwIDIwYy45LTYuODIgMS41LTkuNSA0LTE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVuZXRpYW4tbWFzay5qcwp2YXIgVmVuZXRpYW5NYXNrOwp2YXIgaW5pdF92ZW5ldGlhbl9tYXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW5ldGlhbi1tYXNrLmpzIigpIHsKICAgIFZlbmV0aWFuTWFzayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExYy0xLjUgMC0yLjUuNS0zIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCA2YTIgMiAwIDAgMC0yIDJ2NGE1IDUgMCAwIDAgNSA1IDggOCAwIDAgMSA1IDIgOCA4IDAgMCAxIDUtMiA1IDUgMCAwIDAgNS01VjhhMiAyIDAgMCAwLTItMmgtM2E4IDggMCAwIDAtNSAyIDggOCAwIDAgMC01LTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFjMS41IDAgMi41LjUgMyAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMuanMKdmFyIFZlbnVzOwp2YXIgaW5pdF92ZW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMuanMiKCkgewogICAgVmVudXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI5IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW51cy1hbmQtbWFycy5qcwp2YXIgVmVudXNBbmRNYXJzOwp2YXIgaW5pdF92ZW51c19hbmRfbWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMtYW5kLW1hcnMuanMiKCkgewogICAgVmVudXNBbmRNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItNS40NiA1LjQ2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLW9mZi5qcwp2YXIgVmlicmF0ZU9mZjsKdmFyIGluaXRfdmlicmF0ZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpYnJhdGUtb2ZmLmpzIigpIHsKICAgIFZpYnJhdGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDggMiAyLTIgMiAyIDItMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDgtMiAyIDIgMi0yIDIgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYxMGMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMC4zNFY2YzAtLjU1LS40NS0xLTEtMWgtNC4zNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzCnZhciBWaWJyYXRlOwp2YXIgaW5pdF92aWJyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzIigpIHsKICAgIFZpYnJhdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDggMiAyLTIgMiAyIDItMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDgtMiAyIDIgMi0yIDIgMiAyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjUiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlby1vZmYuanMKdmFyIFZpZGVvT2ZmOwp2YXIgaW5pdF92aWRlb19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLW9mZi5qcyIoKSB7CiAgICBWaWRlb09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLmpzCnZhciBWaWRlbzsKdmFyIGluaXRfdmlkZW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLmpzIigpIHsKICAgIFZpZGVvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9pY2VtYWlsLmpzCnZhciBWb2ljZW1haWw7CnZhciBpbml0X3ZvaWNlbWFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9pY2VtYWlsLmpzIigpIHsKICAgIFZvaWNlbWFpbCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjE4IiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanMKdmFyIFZpZGVvdGFwZTsKdmFyIGluaXRfdmlkZW90YXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanMiKCkgewogICAgVmlkZW90YXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4aDIwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTQiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZXcuanMKdmFyIFZpZXc7CnZhciBpbml0X3ZpZXcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZXcuanMiKCkgewogICAgVmlldyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgN1Y1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC45NDQgMTIuMzNhMSAxIDAgMCAwIDAtLjY2IDcuNSA3LjUgMCAwIDAtMTMuODg4IDAgMSAxIDAgMCAwIDAgLjY2IDcuNSA3LjUgMCAwIDAgMTMuODg4IDAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2xsZXliYWxsLmpzCnZhciBWb2xsZXliYWxsOwp2YXIgaW5pdF92b2xsZXliYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2xsZXliYWxsLmpzIigpIHsKICAgIFZvbGxleWJhbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4xIDcuMWExNi41NSAxNi41NSAwIDAgMSAxMC45IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJhMTIuNiAxMi42IDAgMCAxLTguNyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjggMTMuNmExNi41NSAxNi41NSAwIDAgMS05IDcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC43IDE3YTEyLjggMTIuOCAwIDAgMC04LjctNSAxMy4zIDEzLjMgMCAwIDEgMC0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgMy44YTE2LjU1IDE2LjU1IDAgMCAwIDEuOSAxMS41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTEuanMKdmFyIFZvbHVtZTE7CnZhciBpbml0X3ZvbHVtZV8xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtMS5qcyIoKSB7CiAgICBWb2x1bWUxID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgMCA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTIuanMKdmFyIFZvbHVtZTI7CnZhciBpbml0X3ZvbHVtZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtMi5qcyIoKSB7CiAgICBWb2x1bWUyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjM2NCAxOC4zNjRhOSA5IDAgMCAwIDAtMTIuNzI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLW9mZi5qcwp2YXIgVm9sdW1lT2ZmOwp2YXIgaW5pdF92b2x1bWVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtb2ZmLmpzIigpIHsKICAgIFZvbHVtZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIC45NSAyLjI5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4zNjQgNS42MzZhOSA5IDAgMCAxIDEuODg5IDkuOTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgNy0uNTg3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OFYxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjgyOCA0LjE3MkEuNjg2LjY4NiAwIDAgMSAxMSA0LjY1N3YuNjg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLXguanMKdmFyIFZvbHVtZVg7CnZhciBpbml0X3ZvbHVtZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUteC5qcyIoKSB7CiAgICBWb2x1bWVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMjIiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLmpzCnZhciBWb2x1bWU7CnZhciBpbml0X3ZvbHVtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLmpzIigpIHsKICAgIFZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm90ZS5qcwp2YXIgVm90ZTsKdmFyIGluaXRfdm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm90ZS5qcyIoKSB7CiAgICBWb3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgN2MwLTEuMS45LTIgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTJINVY3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOUgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LW1pbmltYWwuanMKdmFyIFdhbGxldE1pbmltYWw7CnZhciBpbml0X3dhbGxldF9taW5pbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQtbWluaW1hbC5qcyIoKSB7CiAgICBXYWxsZXRNaW5pbWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbGxldC1jYXJkcy5qcwp2YXIgV2FsbGV0Q2FyZHM7CnZhciBpbml0X3dhbGxldF9jYXJkcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LWNhcmRzLmpzIigpIHsKICAgIFdhbGxldENhcmRzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMgMTFoM2MuOCAwIDEuNi4zIDIuMS45bDEuMS45YzEuNiAxLjYgNC4xIDEuNiA1LjcgMGwxLjEtLjljLjUtLjUgMS4zLS45IDIuMS0uOUgyMSIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanMKdmFyIFdhbGxldDsKdmFyIGluaXRfd2FsbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanMiKCkgewogICAgV2FsbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGEyIDIgMCAwIDAgMiAyaDE1YTEgMSAwIDAgMCAxLTF2LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanMKdmFyIFdhbGxwYXBlcjsKdmFyIGluaXRfd2FsbHBhcGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanMiKCkgewogICAgV2FsbHBhcGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNyA2LjEtNi4xYTIgMiAwIDAgMSAyLjgxLjAxTDIyIDE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FuZC1zcGFya2xlcy5qcwp2YXIgV2FuZFNwYXJrbGVzOwp2YXIgaW5pdF93YW5kX3NwYXJrbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YW5kLXNwYXJrbGVzLmpzIigpIHsKICAgIFdhbmRTcGFya2xlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjY0IDMuNjQtMS4yOC0xLjI4YTEuMjEgMS4yMSAwIDAgMC0xLjcyIDBMMi4zNiAxOC42NGExLjIxIDEuMjEgMCAwIDAgMCAxLjcybDEuMjggMS4yOGExLjIgMS4yIDAgMCAwIDEuNzIgMEwyMS42NCA1LjM2YTEuMiAxLjIgMCAwIDAgMC0xLjcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDcgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOEgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDNIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbmQuanMKdmFyIFdhbmQ7CnZhciBpbml0X3dhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbmQuanMiKCkgewogICAgV2FuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOCAxMS44IDE5IDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjggNi4yIDE5IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA5LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMiA2LjIgMTEgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qcwp2YXIgV2FyZWhvdXNlOwp2YXIgaW5pdF93YXJlaG91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qcyIoKSB7CiAgICBXYXJlaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAxLjEzMi0xLjgwM2w3Ljk1LTMuOTc0YTIgMiAwIDAgMSAxLjgzNyAwbDcuOTQ4IDMuOTc0QTIgMiAwIDAgMSAyMiA4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXNoaW5nLW1hY2hpbmUuanMKdmFyIFdhc2hpbmdNYWNoaW5lOwp2YXIgaW5pdF93YXNoaW5nX21hY2hpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhc2hpbmctbWFjaGluZS5qcyIoKSB7CiAgICBXYXNoaW5nTWFjaGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMjAiLCB4OiAiMyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhMi41IDIuNSAwIDAgMCAwLTUgMi41IDIuNSAwIDAgMSAwLTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXRjaC5qcwp2YXIgV2F0Y2g7CnZhciBpbml0X3dhdGNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXRjaC5qcyIoKSB7CiAgICBXYXRjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4xMyA3LjY2LS44MS00LjA1YTIgMiAwIDAgMC0yLTEuNjFoLTIuNjhhMiAyIDAgMCAwLTIgMS42MWwtLjc4IDQuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy44OCAxNi4zNi44IDRhMiAyIDAgMCAwIDIgMS42MWgyLjcyYTIgMiAwIDAgMCAyLTEuNjFsLjgxLTQuMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWFycm93LWRvd24uanMKdmFyIFdhdmVzQXJyb3dEb3duOwp2YXIgaW5pdF93YXZlc19hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1hcnJvdy1kb3duLmpzIigpIHsKICAgIFdhdmVzQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBMMTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2TDEyIDEwTDggNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1QzIuNiAxNS41IDMuMiAxNiA0LjUgMTZDNyAxNiA3IDE0IDkuNSAxNEMxMi4xIDE0IDExLjkgMTYgMTQuNSAxNkMxNyAxNiAxNyAxNCAxOS41IDE0QzIwLjggMTQgMjEuNCAxNC41IDIyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1hcnJvdy11cC5qcwp2YXIgV2F2ZXNBcnJvd1VwOwp2YXIgaW5pdF93YXZlc19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtYXJyb3ctdXAuanMiKCkgewogICAgV2F2ZXNBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTVjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDIxYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1sYWRkZXIuanMKdmFyIFdhdmVzTGFkZGVyOwp2YXIgaW5pdF93YXZlc19sYWRkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWxhZGRlci5qcyIoKSB7CiAgICBXYXZlc0xhZGRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1YTIgMiAwIDAgMC0yIDJ2MTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy5qcwp2YXIgV2F2ZXM7CnZhciBpbml0X3dhdmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy5qcyIoKSB7CiAgICBXYXZlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMiA2Yy42LjUgMS4yIDEgMi41IDFDNyA3IDcgNSA5LjUgNWMyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDEyYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxOGMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F5cG9pbnRzLmpzCnZhciBXYXlwb2ludHM7CnZhciBpbml0X3dheXBvaW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F5cG9pbnRzLmpzIigpIHsKICAgIFdheXBvaW50cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuMiA2LjMtMy45IDMuOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQuNSIsIGN5OiAiMTIiLCByOiAiMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOS41IiwgY3k6ICIxMiIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuOCAxNy43IDMuOS0zLjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkuNSIsIHI6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanMKdmFyIFdlYmNhbTsKdmFyIGluaXRfd2ViY2FtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanMiKCkgewogICAgV2ViY2FtID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLW9mZi5qcwp2YXIgV2ViaG9va09mZjsKdmFyIGluaXRfd2ViaG9va19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlYmhvb2stb2ZmLmpzIigpIHsKICAgIFdlYmhvb2tPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN2gtNWMtMS4wOS0uMDItMS45NC45Mi0yLjUgMS45QTMgMyAwIDEgMSAyLjU3IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy40YTQgNCAwIDAgMSA2LjUyLjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTcgMy4xLTUuOGEyLjUgMi41IDAgMCAwIC4wNTctMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zIDIwLjNhNCA0IDAgMCAxLTIuMy43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjYgMTNhNCA0IDAgMCAxIDMuMzU3IDMuNDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDYgLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLmpzCnZhciBXZWJob29rOwp2YXIgaW5pdF93ZWJob29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLmpzIigpIHsKICAgIFdlYmhvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNi45OGgtNS45OWMtMS4xIDAtMS45NS45NC0yLjQ4IDEuOUE0IDQgMCAwIDEgMiAxN2MuMDEtLjcuMi0xLjQuNTctMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDMuMTMtNS43OGMuNTMtLjk3LjEtMi4xOC0uNS0zLjFhNCA0IDAgMSAxIDYuODktNC4wNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA2IDMuMTMgNS43M0MxNS42NiAxMi43IDE2LjkgMTMgMTggMTNhNCA0IDAgMCAxIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC10aWxkZS5qcwp2YXIgV2VpZ2h0VGlsZGU7CnZhciBpbml0X3dlaWdodF90aWxkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2VpZ2h0LXRpbGRlLmpzIigpIHsKICAgIFdlaWdodFRpbGRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC5qcwp2YXIgV2VpZ2h0Owp2YXIgaW5pdF93ZWlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC5qcyIoKSB7CiAgICBXZWlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA1IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDhaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hlYXQtb2ZmLmpzCnZhciBXaGVhdE9mZjsKdmFyIGluaXRfd2hlYXRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC1vZmYuanMiKCkgewogICAgV2hlYXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMS4xNyAxLjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzQgMTMuMDljLjI2LS4xNS41MS0uMzQuNzMtLjU2TDIxIDExbC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMC00LjYyLS4yOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qcwp2YXIgV2hlYXQ7CnZhciBpbml0X3doZWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qcyIoKSB7CiAgICBXaGVhdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjIgMTYgOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMuNDcgMTIuNTMgNSAxMWwxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMNSAxOWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03LjQ3IDguNTMgOSA3bDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw5IDE1bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjQ3IDQuNTMgMTMgM2wxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMMTMgMTFsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDJoMnYyYTQgNCAwIDAgMS00IDRoLTJWNmE0IDQgMCAwIDEgNC00WiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS40NyAxNy40NyAxMyAxOWwtMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEtNC45NCAwTDUgMTlsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS40NyAxMy40NyAxNyAxNWwtMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEtNC45NCAwTDkgMTVsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS40NyA5LjQ3IDIxIDExbC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMMTMgMTFsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dob2xlLXdvcmQuanMKdmFyIFdob2xlV29yZDsKdmFyIGluaXRfd2hvbGVfd29yZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hvbGUtd29yZC5qcyIoKSB7CiAgICBXaG9sZVdvcmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1jb2cuanMKdmFyIFdpZmlDb2c7CnZhciBpbml0X3dpZmlfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWNvZy5qcyIoKSB7CiAgICBXaWZpQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1sb3cuanMKdmFyIFdpZmlMb3c7CnZhciBpbml0X3dpZmlfbG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWxvdy5qcyIoKSB7CiAgICBXaWZpTG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktaGlnaC5qcwp2YXIgV2lmaUhpZ2g7CnZhciBpbml0X3dpZmlfaGlnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1oaWdoLmpzIigpIHsKICAgIFdpZmlIaWdoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1vZmYuanMKdmFyIFdpZmlPZmY7CnZhciBpbml0X3dpZmlfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLW9mZi5qcyIoKSB7CiAgICBXaWZpT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSA1LjE3LTIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTIuODU5YTEwIDEwIDAgMCAwLTIuMDA3LTEuNTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSA0LjE3Ny0yLjY0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4LjgyYTE1IDE1IDAgMCAwLTExLjI4OC0zLjc2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXBlbi5qcwp2YXIgV2lmaVBlbjsKdmFyIGluaXRfd2lmaV9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktcGVuLmpzIigpIHsKICAgIFdpZmlQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMi44NTlhMTAgMTAgMCAwIDEgMTAuNS0yLjIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSAzLTEuNDA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1zeW5jLmpzCnZhciBXaWZpU3luYzsKdmFyIGluaXRfd2lmaV9zeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXN5bmMuanMiKCkgewogICAgV2lmaVN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTQuMTA1aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTY1IDE4LjEwNWg0TDIwLjQzIDE5LjcxYTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45NjUgMjIuMTA1di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODZhMTAgMTAgMCAwIDEgMy0yLjAzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktemVyby5qcwp2YXIgV2lmaVplcm87CnZhciBpbml0X3dpZmlfemVybyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS16ZXJvLmpzIigpIHsKICAgIFdpZmlaZXJvID0gW1sicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS5qcwp2YXIgV2lmaTsKdmFyIGluaXRfd2lmaSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS5qcyIoKSB7CiAgICBXaWZpID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZC1hcnJvdy1kb3duLmpzCnZhciBXaW5kQXJyb3dEb3duOwp2YXIgaW5pdF93aW5kX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpbmQtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBXaW5kQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjggMjEuNkEyIDIgMCAxIDAgMTQgMThIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA2IDQgNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzCnZhciBXaW5kOwp2YXIgaW5pdF93aW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzIigpIHsKICAgIFdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSA4YTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZS1vZmYuanMKdmFyIFdpbmVPZmY7CnZhciBpbml0X3dpbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLW9mZi5qcyIoKSB7CiAgICBXaW5lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoM203IDBoLTEuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzCnZhciBXaW5lOwp2YXIgaW5pdF93aW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzIigpIHsKICAgIFdpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMCA1LTVjMC0yLS41LTQtMi04SDljLTEuNSA0LTIgNi0yIDhhNSA1IDAgMCAwIDUgNVoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JtLmpzCnZhciBXb3JtOwp2YXIgaW5pdF93b3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JtLmpzIigpIHsKICAgIFdvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi0xLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42MyAxOC44MSAyMiAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JrZmxvdy5qcwp2YXIgV29ya2Zsb3c7CnZhciBpbml0X3dvcmtmbG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JrZmxvdy5qcyIoKSB7CiAgICBXb3JrZmxvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExdjRhMiAyIDAgMCAwIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjEzIiwgeTogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzCnZhciBXcmVuY2g7CnZhciBpbml0X3dyZW5jaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzIigpIHsKICAgIFdyZW5jaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3guanMKdmFyIFg7CnZhciBpbml0X3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3guanMiKCkgewogICAgWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDYgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDYgMTIgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy95b3V0dWJlLmpzCnZhciBZb3V0dWJlOwp2YXIgaW5pdF95b3V0dWJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy95b3V0dWJlLmpzIigpIHsKICAgIFlvdXR1YmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTdhMjQuMTIgMjQuMTIgMCAwIDEgMC0xMCAyIDIgMCAwIDEgMS40LTEuNCA0OS41NiA0OS41NiAwIDAgMSAxNi4yIDBBMiAyIDAgMCAxIDIxLjUgN2EyNC4xMiAyNC4xMiAwIDAgMSAwIDEwIDIgMiAwIDAgMS0xLjQgMS40IDQ5LjU1IDQ5LjU1IDAgMCAxLTE2LjIgMEEyIDIgMCAwIDEgMi41IDE3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUtMy01LTN6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLW9mZi5qcwp2YXIgWmFwT2ZmOwp2YXIgaW5pdF96YXBfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96YXAtb2ZmLmpzIigpIHsKICAgIFphcE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUxMyA0Ljg1NiAxMy4xMiAyLjE3YS41LjUgMCAwIDEgLjg2LjQ2bC0xLjM3NyA0LjMxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42NTYgMTBIMjBhMSAxIDAgMCAxIC43OCAxLjYzbC0xLjcyIDEuNzczIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjI3MyAxNi4yNzMgMTAuODggMjEuODNhLjUuNSAwIDAgMS0uODYtLjQ2bDEuOTItNi4wMkExIDEgMCAwIDAgMTEgMTRINGExIDEgMCAwIDEtLjc4LTEuNjNsNC41MDctNC42NDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzCnZhciBaYXA7CnZhciBpbml0X3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzIigpIHsKICAgIFphcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTRhMSAxIDAgMCAxLS43OC0xLjYzbDkuOS0xMC4yYS41LjUgMCAwIDEgLjg2LjQ2bC0xLjkyIDYuMDJBMSAxIDAgMCAwIDEzIDEwaDdhMSAxIDAgMCAxIC43OCAxLjYzbC05LjkgMTAuMmEuNS41IDAgMCAxLS44Ni0uNDZsMS45Mi02LjAyQTEgMSAwIDAgMCAxMSAxNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96b29tLWluLmpzCnZhciBab29tSW47CnZhciBpbml0X3pvb21faW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20taW4uanMiKCkgewogICAgWm9vbUluID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTYuNjUiLCB5MTogIjIxIiwgeTI6ICIxNi42NSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMSIsIHgyOiAiMTEiLCB5MTogIjgiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96b29tLW91dC5qcwp2YXIgWm9vbU91dDsKdmFyIGluaXRfem9vbV9vdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20tb3V0LmpzIigpIHsKICAgIFpvb21PdXQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeDI6ICIxNi42NSIsIHkxOiAiMjEiLCB5MjogIjE2LjY1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29uc0FuZEFsaWFzZXMuanMKdmFyIGljb25zQW5kQWxpYXNlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGljb25zQW5kQWxpYXNlc19leHBvcnRzLCB7CiAgQUFycm93RG93bjogKCkgPT4gQUFycm93RG93biwKICBBQXJyb3dVcDogKCkgPT4gQUFycm93VXAsCiAgQUxhcmdlU21hbGw6ICgpID0+IEFMYXJnZVNtYWxsLAogIEFjY2Vzc2liaWxpdHk6ICgpID0+IEFjY2Vzc2liaWxpdHksCiAgQWN0aXZpdHk6ICgpID0+IEFjdGl2aXR5LAogIEFjdGl2aXR5U3F1YXJlOiAoKSA9PiBTcXVhcmVBY3Rpdml0eSwKICBBaXJWZW50OiAoKSA9PiBBaXJWZW50LAogIEFpcnBsYXk6ICgpID0+IEFpcnBsYXksCiAgQWxhcm1DaGVjazogKCkgPT4gQWxhcm1DbG9ja0NoZWNrLAogIEFsYXJtQ2xvY2s6ICgpID0+IEFsYXJtQ2xvY2ssCiAgQWxhcm1DbG9ja0NoZWNrOiAoKSA9PiBBbGFybUNsb2NrQ2hlY2ssCiAgQWxhcm1DbG9ja01pbnVzOiAoKSA9PiBBbGFybUNsb2NrTWludXMsCiAgQWxhcm1DbG9ja09mZjogKCkgPT4gQWxhcm1DbG9ja09mZiwKICBBbGFybUNsb2NrUGx1czogKCkgPT4gQWxhcm1DbG9ja1BsdXMsCiAgQWxhcm1NaW51czogKCkgPT4gQWxhcm1DbG9ja01pbnVzLAogIEFsYXJtUGx1czogKCkgPT4gQWxhcm1DbG9ja1BsdXMsCiAgQWxhcm1TbW9rZTogKCkgPT4gQWxhcm1TbW9rZSwKICBBbGJ1bTogKCkgPT4gQWxidW0sCiAgQWxlcnRDaXJjbGU6ICgpID0+IENpcmNsZUFsZXJ0LAogIEFsZXJ0T2N0YWdvbjogKCkgPT4gT2N0YWdvbkFsZXJ0LAogIEFsZXJ0VHJpYW5nbGU6ICgpID0+IFRyaWFuZ2xlQWxlcnQsCiAgQWxpZ25DZW50ZXI6ICgpID0+IFRleHRBbGlnbkNlbnRlciwKICBBbGlnbkNlbnRlckhvcml6b250YWw6ICgpID0+IEFsaWduQ2VudGVySG9yaXpvbnRhbCwKICBBbGlnbkNlbnRlclZlcnRpY2FsOiAoKSA9PiBBbGlnbkNlbnRlclZlcnRpY2FsLAogIEFsaWduRW5kSG9yaXpvbnRhbDogKCkgPT4gQWxpZ25FbmRIb3Jpem9udGFsLAogIEFsaWduRW5kVmVydGljYWw6ICgpID0+IEFsaWduRW5kVmVydGljYWwsCiAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlcjogKCkgPT4gQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciwKICBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kLAogIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0LAogIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI6ICgpID0+IEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXIsCiAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCwKICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQ6ICgpID0+IEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydCwKICBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsU3BhY2VBcm91bmQsCiAgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOiAoKSA9PiBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4sCiAgQWxpZ25KdXN0aWZ5OiAoKSA9PiBUZXh0QWxpZ25KdXN0aWZ5LAogIEFsaWduTGVmdDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgQWxpZ25SaWdodDogKCkgPT4gVGV4dEFsaWduRW5kLAogIEFsaWduU3RhcnRIb3Jpem9udGFsOiAoKSA9PiBBbGlnblN0YXJ0SG9yaXpvbnRhbCwKICBBbGlnblN0YXJ0VmVydGljYWw6ICgpID0+IEFsaWduU3RhcnRWZXJ0aWNhbCwKICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlcjogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXIsCiAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ6ICgpID0+IEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kLAogIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQ6ICgpID0+IEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQsCiAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXI6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyLAogIEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOiAoKSA9PiBBbGlnblZlcnRpY2FsSnVzdGlmeUVuZCwKICBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0OiAoKSA9PiBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0LAogIEFsaWduVmVydGljYWxTcGFjZUFyb3VuZDogKCkgPT4gQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kLAogIEFsaWduVmVydGljYWxTcGFjZUJldHdlZW46ICgpID0+IEFsaWduVmVydGljYWxTcGFjZUJldHdlZW4sCiAgQW1idWxhbmNlOiAoKSA9PiBBbWJ1bGFuY2UsCiAgQW1wZXJzYW5kOiAoKSA9PiBBbXBlcnNhbmQsCiAgQW1wZXJzYW5kczogKCkgPT4gQW1wZXJzYW5kcywKICBBbXBob3JhOiAoKSA9PiBBbXBob3JhLAogIEFuY2hvcjogKCkgPT4gQW5jaG9yLAogIEFuZ3J5OiAoKSA9PiBBbmdyeSwKICBBbm5veWVkOiAoKSA9PiBBbm5veWVkLAogIEFudGVubmE6ICgpID0+IEFudGVubmEsCiAgQW52aWw6ICgpID0+IEFudmlsLAogIEFwZXJ0dXJlOiAoKSA9PiBBcGVydHVyZSwKICBBcHBXaW5kb3c6ICgpID0+IEFwcFdpbmRvdywKICBBcHBXaW5kb3dNYWM6ICgpID0+IEFwcFdpbmRvd01hYywKICBBcHBsZTogKCkgPT4gQXBwbGUsCiAgQXJjaGl2ZTogKCkgPT4gQXJjaGl2ZSwKICBBcmNoaXZlUmVzdG9yZTogKCkgPT4gQXJjaGl2ZVJlc3RvcmUsCiAgQXJjaGl2ZVg6ICgpID0+IEFyY2hpdmVYLAogIEFyZWFDaGFydDogKCkgPT4gQ2hhcnRBcmVhLAogIEFybWNoYWlyOiAoKSA9PiBBcm1jaGFpciwKICBBcnJvd0JpZ0Rvd246ICgpID0+IEFycm93QmlnRG93biwKICBBcnJvd0JpZ0Rvd25EYXNoOiAoKSA9PiBBcnJvd0JpZ0Rvd25EYXNoLAogIEFycm93QmlnTGVmdDogKCkgPT4gQXJyb3dCaWdMZWZ0LAogIEFycm93QmlnTGVmdERhc2g6ICgpID0+IEFycm93QmlnTGVmdERhc2gsCiAgQXJyb3dCaWdSaWdodDogKCkgPT4gQXJyb3dCaWdSaWdodCwKICBBcnJvd0JpZ1JpZ2h0RGFzaDogKCkgPT4gQXJyb3dCaWdSaWdodERhc2gsCiAgQXJyb3dCaWdVcDogKCkgPT4gQXJyb3dCaWdVcCwKICBBcnJvd0JpZ1VwRGFzaDogKCkgPT4gQXJyb3dCaWdVcERhc2gsCiAgQXJyb3dEb3duOiAoKSA9PiBBcnJvd0Rvd24sCiAgQXJyb3dEb3duMDE6ICgpID0+IEFycm93RG93bjAxLAogIEFycm93RG93bjEwOiAoKSA9PiBBcnJvd0Rvd24xMCwKICBBcnJvd0Rvd25BWjogKCkgPT4gQXJyb3dEb3duQVosCiAgQXJyb3dEb3duQXo6ICgpID0+IEFycm93RG93bkFaLAogIEFycm93RG93bkNpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dEb3duLAogIEFycm93RG93bkZyb21MaW5lOiAoKSA9PiBBcnJvd0Rvd25Gcm9tTGluZSwKICBBcnJvd0Rvd25MZWZ0OiAoKSA9PiBBcnJvd0Rvd25MZWZ0LAogIEFycm93RG93bkxlZnRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25MZWZ0LAogIEFycm93RG93bkxlZnRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dERvd25MZWZ0LAogIEFycm93RG93bkxlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93bkxlZnQsCiAgQXJyb3dEb3duTmFycm93V2lkZTogKCkgPT4gQXJyb3dEb3duTmFycm93V2lkZSwKICBBcnJvd0Rvd25SaWdodDogKCkgPT4gQXJyb3dEb3duUmlnaHQsCiAgQXJyb3dEb3duUmlnaHRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25SaWdodCwKICBBcnJvd0Rvd25SaWdodEZyb21TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogIEFycm93RG93blJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd0Rvd25SaWdodCwKICBBcnJvd0Rvd25TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93biwKICBBcnJvd0Rvd25Ub0RvdDogKCkgPT4gQXJyb3dEb3duVG9Eb3QsCiAgQXJyb3dEb3duVG9MaW5lOiAoKSA9PiBBcnJvd0Rvd25Ub0xpbmUsCiAgQXJyb3dEb3duVXA6ICgpID0+IEFycm93RG93blVwLAogIEFycm93RG93bldpZGVOYXJyb3c6ICgpID0+IEFycm93RG93bldpZGVOYXJyb3csCiAgQXJyb3dEb3duWkE6ICgpID0+IEFycm93RG93blpBLAogIEFycm93RG93blphOiAoKSA9PiBBcnJvd0Rvd25aQSwKICBBcnJvd0xlZnQ6ICgpID0+IEFycm93TGVmdCwKICBBcnJvd0xlZnRDaXJjbGU6ICgpID0+IENpcmNsZUFycm93TGVmdCwKICBBcnJvd0xlZnRGcm9tTGluZTogKCkgPT4gQXJyb3dMZWZ0RnJvbUxpbmUsCiAgQXJyb3dMZWZ0UmlnaHQ6ICgpID0+IEFycm93TGVmdFJpZ2h0LAogIEFycm93TGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dMZWZ0LAogIEFycm93TGVmdFRvTGluZTogKCkgPT4gQXJyb3dMZWZ0VG9MaW5lLAogIEFycm93UmlnaHQ6ICgpID0+IEFycm93UmlnaHQsCiAgQXJyb3dSaWdodENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0RnJvbUxpbmU6ICgpID0+IEFycm93UmlnaHRGcm9tTGluZSwKICBBcnJvd1JpZ2h0TGVmdDogKCkgPT4gQXJyb3dSaWdodExlZnQsCiAgQXJyb3dSaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0VG9MaW5lOiAoKSA9PiBBcnJvd1JpZ2h0VG9MaW5lLAogIEFycm93VXA6ICgpID0+IEFycm93VXAsCiAgQXJyb3dVcDAxOiAoKSA9PiBBcnJvd1VwMDEsCiAgQXJyb3dVcDEwOiAoKSA9PiBBcnJvd1VwMTAsCiAgQXJyb3dVcEFaOiAoKSA9PiBBcnJvd1VwQVosCiAgQXJyb3dVcEF6OiAoKSA9PiBBcnJvd1VwQVosCiAgQXJyb3dVcENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dVcCwKICBBcnJvd1VwRG93bjogKCkgPT4gQXJyb3dVcERvd24sCiAgQXJyb3dVcEZyb21Eb3Q6ICgpID0+IEFycm93VXBGcm9tRG90LAogIEFycm93VXBGcm9tTGluZTogKCkgPT4gQXJyb3dVcEZyb21MaW5lLAogIEFycm93VXBMZWZ0OiAoKSA9PiBBcnJvd1VwTGVmdCwKICBBcnJvd1VwTGVmdEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0VXBMZWZ0LAogIEFycm93VXBMZWZ0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcExlZnQsCiAgQXJyb3dVcExlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93VXBMZWZ0LAogIEFycm93VXBOYXJyb3dXaWRlOiAoKSA9PiBBcnJvd1VwTmFycm93V2lkZSwKICBBcnJvd1VwUmlnaHQ6ICgpID0+IEFycm93VXBSaWdodCwKICBBcnJvd1VwUmlnaHRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogIEFycm93VXBSaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcFJpZ2h0LAogIEFycm93VXBTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93VXAsCiAgQXJyb3dVcFRvTGluZTogKCkgPT4gQXJyb3dVcFRvTGluZSwKICBBcnJvd1VwV2lkZU5hcnJvdzogKCkgPT4gQXJyb3dVcFdpZGVOYXJyb3csCiAgQXJyb3dVcFpBOiAoKSA9PiBBcnJvd1VwWkEsCiAgQXJyb3dVcFphOiAoKSA9PiBBcnJvd1VwWkEsCiAgQXJyb3dzVXBGcm9tTGluZTogKCkgPT4gQXJyb3dzVXBGcm9tTGluZSwKICBBc3RlcmlzazogKCkgPT4gQXN0ZXJpc2ssCiAgQXN0ZXJpc2tTcXVhcmU6ICgpID0+IFNxdWFyZUFzdGVyaXNrLAogIEF0U2lnbjogKCkgPT4gQXRTaWduLAogIEF0b206ICgpID0+IEF0b20sCiAgQXVkaW9MaW5lczogKCkgPT4gQXVkaW9MaW5lcywKICBBdWRpb1dhdmVmb3JtOiAoKSA9PiBBdWRpb1dhdmVmb3JtLAogIEF3YXJkOiAoKSA9PiBBd2FyZCwKICBBeGU6ICgpID0+IEF4ZSwKICBBeGlzM0Q6ICgpID0+IEF4aXMzZCwKICBBeGlzM2Q6ICgpID0+IEF4aXMzZCwKICBCYWJ5OiAoKSA9PiBCYWJ5LAogIEJhY2twYWNrOiAoKSA9PiBCYWNrcGFjaywKICBCYWRnZTogKCkgPT4gQmFkZ2UsCiAgQmFkZ2VBbGVydDogKCkgPT4gQmFkZ2VBbGVydCwKICBCYWRnZUNlbnQ6ICgpID0+IEJhZGdlQ2VudCwKICBCYWRnZUNoZWNrOiAoKSA9PiBCYWRnZUNoZWNrLAogIEJhZGdlRG9sbGFyU2lnbjogKCkgPT4gQmFkZ2VEb2xsYXJTaWduLAogIEJhZGdlRXVybzogKCkgPT4gQmFkZ2VFdXJvLAogIEJhZGdlSGVscDogKCkgPT4gQmFkZ2VRdWVzdGlvbk1hcmssCiAgQmFkZ2VJbmRpYW5SdXBlZTogKCkgPT4gQmFkZ2VJbmRpYW5SdXBlZSwKICBCYWRnZUluZm86ICgpID0+IEJhZGdlSW5mbywKICBCYWRnZUphcGFuZXNlWWVuOiAoKSA9PiBCYWRnZUphcGFuZXNlWWVuLAogIEJhZGdlTWludXM6ICgpID0+IEJhZGdlTWludXMsCiAgQmFkZ2VQZXJjZW50OiAoKSA9PiBCYWRnZVBlcmNlbnQsCiAgQmFkZ2VQbHVzOiAoKSA9PiBCYWRnZVBsdXMsCiAgQmFkZ2VQb3VuZFN0ZXJsaW5nOiAoKSA9PiBCYWRnZVBvdW5kU3RlcmxpbmcsCiAgQmFkZ2VRdWVzdGlvbk1hcms6ICgpID0+IEJhZGdlUXVlc3Rpb25NYXJrLAogIEJhZGdlUnVzc2lhblJ1YmxlOiAoKSA9PiBCYWRnZVJ1c3NpYW5SdWJsZSwKICBCYWRnZVN3aXNzRnJhbmM6ICgpID0+IEJhZGdlU3dpc3NGcmFuYywKICBCYWRnZVR1cmtpc2hMaXJhOiAoKSA9PiBCYWRnZVR1cmtpc2hMaXJhLAogIEJhZGdlWDogKCkgPT4gQmFkZ2VYLAogIEJhZ2dhZ2VDbGFpbTogKCkgPT4gQmFnZ2FnZUNsYWltLAogIEJhbGxvb246ICgpID0+IEJhbGxvb24sCiAgQmFuOiAoKSA9PiBCYW4sCiAgQmFuYW5hOiAoKSA9PiBCYW5hbmEsCiAgQmFuZGFnZTogKCkgPT4gQmFuZGFnZSwKICBCYW5rbm90ZTogKCkgPT4gQmFua25vdGUsCiAgQmFua25vdGVBcnJvd0Rvd246ICgpID0+IEJhbmtub3RlQXJyb3dEb3duLAogIEJhbmtub3RlQXJyb3dVcDogKCkgPT4gQmFua25vdGVBcnJvd1VwLAogIEJhbmtub3RlWDogKCkgPT4gQmFua25vdGVYLAogIEJhckNoYXJ0OiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgQmFyQ2hhcnQyOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbiwKICBCYXJDaGFydDM6ICgpID0+IENoYXJ0Q29sdW1uLAogIEJhckNoYXJ0NDogKCkgPT4gQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEJhckNoYXJ0QmlnOiAoKSA9PiBDaGFydENvbHVtbkJpZywKICBCYXJDaGFydEhvcml6b250YWw6ICgpID0+IENoYXJ0QmFyLAogIEJhckNoYXJ0SG9yaXpvbnRhbEJpZzogKCkgPT4gQ2hhcnRCYXJCaWcsCiAgQmFyY29kZTogKCkgPT4gQmFyY29kZSwKICBCYXJyZWw6ICgpID0+IEJhcnJlbCwKICBCYXNlbGluZTogKCkgPT4gQmFzZWxpbmUsCiAgQmF0aDogKCkgPT4gQmF0aCwKICBCYXR0ZXJ5OiAoKSA9PiBCYXR0ZXJ5LAogIEJhdHRlcnlDaGFyZ2luZzogKCkgPT4gQmF0dGVyeUNoYXJnaW5nLAogIEJhdHRlcnlGdWxsOiAoKSA9PiBCYXR0ZXJ5RnVsbCwKICBCYXR0ZXJ5TG93OiAoKSA9PiBCYXR0ZXJ5TG93LAogIEJhdHRlcnlNZWRpdW06ICgpID0+IEJhdHRlcnlNZWRpdW0sCiAgQmF0dGVyeVBsdXM6ICgpID0+IEJhdHRlcnlQbHVzLAogIEJhdHRlcnlXYXJuaW5nOiAoKSA9PiBCYXR0ZXJ5V2FybmluZywKICBCZWFrZXI6ICgpID0+IEJlYWtlciwKICBCZWFuOiAoKSA9PiBCZWFuLAogIEJlYW5PZmY6ICgpID0+IEJlYW5PZmYsCiAgQmVkOiAoKSA9PiBCZWQsCiAgQmVkRG91YmxlOiAoKSA9PiBCZWREb3VibGUsCiAgQmVkU2luZ2xlOiAoKSA9PiBCZWRTaW5nbGUsCiAgQmVlZjogKCkgPT4gQmVlZiwKICBCZWVyOiAoKSA9PiBCZWVyLAogIEJlZXJPZmY6ICgpID0+IEJlZXJPZmYsCiAgQmVsbDogKCkgPT4gQmVsbCwKICBCZWxsRG90OiAoKSA9PiBCZWxsRG90LAogIEJlbGxFbGVjdHJpYzogKCkgPT4gQmVsbEVsZWN0cmljLAogIEJlbGxNaW51czogKCkgPT4gQmVsbE1pbnVzLAogIEJlbGxPZmY6ICgpID0+IEJlbGxPZmYsCiAgQmVsbFBsdXM6ICgpID0+IEJlbGxQbHVzLAogIEJlbGxSaW5nOiAoKSA9PiBCZWxsUmluZywKICBCZXR3ZWVuSG9yaXpvbmFsRW5kOiAoKSA9PiBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICBCZXR3ZWVuSG9yaXpvbmFsU3RhcnQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQsCiAgQmV0d2Vlbkhvcml6b250YWxFbmQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsRW5kLAogIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQsCiAgQmV0d2VlblZlcnRpY2FsRW5kOiAoKSA9PiBCZXR3ZWVuVmVydGljYWxFbmQsCiAgQmV0d2VlblZlcnRpY2FsU3RhcnQ6ICgpID0+IEJldHdlZW5WZXJ0aWNhbFN0YXJ0LAogIEJpY2Vwc0ZsZXhlZDogKCkgPT4gQmljZXBzRmxleGVkLAogIEJpa2U6ICgpID0+IEJpa2UsCiAgQmluYXJ5OiAoKSA9PiBCaW5hcnksCiAgQmlub2N1bGFyczogKCkgPT4gQmlub2N1bGFycywKICBCaW9oYXphcmQ6ICgpID0+IEJpb2hhemFyZCwKICBCaXJkOiAoKSA9PiBCaXJkLAogIEJpcmRob3VzZTogKCkgPT4gQmlyZGhvdXNlLAogIEJpdGNvaW46ICgpID0+IEJpdGNvaW4sCiAgQmxlbmQ6ICgpID0+IEJsZW5kLAogIEJsaW5kczogKCkgPT4gQmxpbmRzLAogIEJsb2NrczogKCkgPT4gQmxvY2tzLAogIEJsdWV0b290aDogKCkgPT4gQmx1ZXRvb3RoLAogIEJsdWV0b290aENvbm5lY3RlZDogKCkgPT4gQmx1ZXRvb3RoQ29ubmVjdGVkLAogIEJsdWV0b290aE9mZjogKCkgPT4gQmx1ZXRvb3RoT2ZmLAogIEJsdWV0b290aFNlYXJjaGluZzogKCkgPT4gQmx1ZXRvb3RoU2VhcmNoaW5nLAogIEJvbGQ6ICgpID0+IEJvbGQsCiAgQm9sdDogKCkgPT4gQm9sdCwKICBCb21iOiAoKSA9PiBCb21iLAogIEJvbmU6ICgpID0+IEJvbmUsCiAgQm9vazogKCkgPT4gQm9vaywKICBCb29rQTogKCkgPT4gQm9va0EsCiAgQm9va0FsZXJ0OiAoKSA9PiBCb29rQWxlcnQsCiAgQm9va0F1ZGlvOiAoKSA9PiBCb29rQXVkaW8sCiAgQm9va0NoZWNrOiAoKSA9PiBCb29rQ2hlY2ssCiAgQm9va0NvcHk6ICgpID0+IEJvb2tDb3B5LAogIEJvb2tEYXNoZWQ6ICgpID0+IEJvb2tEYXNoZWQsCiAgQm9va0Rvd246ICgpID0+IEJvb2tEb3duLAogIEJvb2tIZWFkcGhvbmVzOiAoKSA9PiBCb29rSGVhZHBob25lcywKICBCb29rSGVhcnQ6ICgpID0+IEJvb2tIZWFydCwKICBCb29rSW1hZ2U6ICgpID0+IEJvb2tJbWFnZSwKICBCb29rS2V5OiAoKSA9PiBCb29rS2V5LAogIEJvb2tMb2NrOiAoKSA9PiBCb29rTG9jaywKICBCb29rTWFya2VkOiAoKSA9PiBCb29rTWFya2VkLAogIEJvb2tNaW51czogKCkgPT4gQm9va01pbnVzLAogIEJvb2tPcGVuOiAoKSA9PiBCb29rT3BlbiwKICBCb29rT3BlbkNoZWNrOiAoKSA9PiBCb29rT3BlbkNoZWNrLAogIEJvb2tPcGVuVGV4dDogKCkgPT4gQm9va09wZW5UZXh0LAogIEJvb2tQbHVzOiAoKSA9PiBCb29rUGx1cywKICBCb29rU2VhcmNoOiAoKSA9PiBCb29rU2VhcmNoLAogIEJvb2tUZW1wbGF0ZTogKCkgPT4gQm9va0Rhc2hlZCwKICBCb29rVGV4dDogKCkgPT4gQm9va1RleHQsCiAgQm9va1R5cGU6ICgpID0+IEJvb2tUeXBlLAogIEJvb2tVcDogKCkgPT4gQm9va1VwLAogIEJvb2tVcDI6ICgpID0+IEJvb2tVcDIsCiAgQm9va1VzZXI6ICgpID0+IEJvb2tVc2VyLAogIEJvb2tYOiAoKSA9PiBCb29rWCwKICBCb29rbWFyazogKCkgPT4gQm9va21hcmssCiAgQm9va21hcmtDaGVjazogKCkgPT4gQm9va21hcmtDaGVjaywKICBCb29rbWFya01pbnVzOiAoKSA9PiBCb29rbWFya01pbnVzLAogIEJvb2ttYXJrUGx1czogKCkgPT4gQm9va21hcmtQbHVzLAogIEJvb2ttYXJrWDogKCkgPT4gQm9va21hcmtYLAogIEJvb21Cb3g6ICgpID0+IEJvb21Cb3gsCiAgQm90OiAoKSA9PiBCb3QsCiAgQm90TWVzc2FnZVNxdWFyZTogKCkgPT4gQm90TWVzc2FnZVNxdWFyZSwKICBCb3RPZmY6ICgpID0+IEJvdE9mZiwKICBCb3R0bGVXaW5lOiAoKSA9PiBCb3R0bGVXaW5lLAogIEJvd0Fycm93OiAoKSA9PiBCb3dBcnJvdywKICBCb3g6ICgpID0+IEJveCwKICBCb3hTZWxlY3Q6ICgpID0+IFNxdWFyZURhc2hlZCwKICBCb3hlczogKCkgPT4gQm94ZXMsCiAgQnJhY2VzOiAoKSA9PiBCcmFjZXMsCiAgQnJhY2tldHM6ICgpID0+IEJyYWNrZXRzLAogIEJyYWluOiAoKSA9PiBCcmFpbiwKICBCcmFpbkNpcmN1aXQ6ICgpID0+IEJyYWluQ2lyY3VpdCwKICBCcmFpbkNvZzogKCkgPT4gQnJhaW5Db2csCiAgQnJpY2tXYWxsOiAoKSA9PiBCcmlja1dhbGwsCiAgQnJpY2tXYWxsRmlyZTogKCkgPT4gQnJpY2tXYWxsRmlyZSwKICBCcmlja1dhbGxTaGllbGQ6ICgpID0+IEJyaWNrV2FsbFNoaWVsZCwKICBCcmllZmNhc2U6ICgpID0+IEJyaWVmY2FzZSwKICBCcmllZmNhc2VCdXNpbmVzczogKCkgPT4gQnJpZWZjYXNlQnVzaW5lc3MsCiAgQnJpZWZjYXNlQ29udmV5b3JCZWx0OiAoKSA9PiBCcmllZmNhc2VDb252ZXlvckJlbHQsCiAgQnJpZWZjYXNlTWVkaWNhbDogKCkgPT4gQnJpZWZjYXNlTWVkaWNhbCwKICBCcmluZ1RvRnJvbnQ6ICgpID0+IEJyaW5nVG9Gcm9udCwKICBCcnVzaDogKCkgPT4gQnJ1c2gsCiAgQnJ1c2hDbGVhbmluZzogKCkgPT4gQnJ1c2hDbGVhbmluZywKICBCdWJibGVzOiAoKSA9PiBCdWJibGVzLAogIEJ1ZzogKCkgPT4gQnVnLAogIEJ1Z09mZjogKCkgPT4gQnVnT2ZmLAogIEJ1Z1BsYXk6ICgpID0+IEJ1Z1BsYXksCiAgQnVpbGRpbmc6ICgpID0+IEJ1aWxkaW5nLAogIEJ1aWxkaW5nMjogKCkgPT4gQnVpbGRpbmcyLAogIEJ1czogKCkgPT4gQnVzLAogIEJ1c0Zyb250OiAoKSA9PiBCdXNGcm9udCwKICBDYWJsZTogKCkgPT4gQ2FibGUsCiAgQ2FibGVDYXI6ICgpID0+IENhYmxlQ2FyLAogIENha2U6ICgpID0+IENha2UsCiAgQ2FrZVNsaWNlOiAoKSA9PiBDYWtlU2xpY2UsCiAgQ2FsY3VsYXRvcjogKCkgPT4gQ2FsY3VsYXRvciwKICBDYWxlbmRhcjogKCkgPT4gQ2FsZW5kYXIsCiAgQ2FsZW5kYXIxOiAoKSA9PiBDYWxlbmRhcjEsCiAgQ2FsZW5kYXJBcnJvd0Rvd246ICgpID0+IENhbGVuZGFyQXJyb3dEb3duLAogIENhbGVuZGFyQXJyb3dVcDogKCkgPT4gQ2FsZW5kYXJBcnJvd1VwLAogIENhbGVuZGFyQ2hlY2s6ICgpID0+IENhbGVuZGFyQ2hlY2ssCiAgQ2FsZW5kYXJDaGVjazI6ICgpID0+IENhbGVuZGFyQ2hlY2syLAogIENhbGVuZGFyQ2xvY2s6ICgpID0+IENhbGVuZGFyQ2xvY2ssCiAgQ2FsZW5kYXJDb2c6ICgpID0+IENhbGVuZGFyQ29nLAogIENhbGVuZGFyRGF5czogKCkgPT4gQ2FsZW5kYXJEYXlzLAogIENhbGVuZGFyRm9sZDogKCkgPT4gQ2FsZW5kYXJGb2xkLAogIENhbGVuZGFySGVhcnQ6ICgpID0+IENhbGVuZGFySGVhcnQsCiAgQ2FsZW5kYXJNaW51czogKCkgPT4gQ2FsZW5kYXJNaW51cywKICBDYWxlbmRhck1pbnVzMjogKCkgPT4gQ2FsZW5kYXJNaW51czIsCiAgQ2FsZW5kYXJPZmY6ICgpID0+IENhbGVuZGFyT2ZmLAogIENhbGVuZGFyUGx1czogKCkgPT4gQ2FsZW5kYXJQbHVzLAogIENhbGVuZGFyUGx1czI6ICgpID0+IENhbGVuZGFyUGx1czIsCiAgQ2FsZW5kYXJSYW5nZTogKCkgPT4gQ2FsZW5kYXJSYW5nZSwKICBDYWxlbmRhclNlYXJjaDogKCkgPT4gQ2FsZW5kYXJTZWFyY2gsCiAgQ2FsZW5kYXJTeW5jOiAoKSA9PiBDYWxlbmRhclN5bmMsCiAgQ2FsZW5kYXJYOiAoKSA9PiBDYWxlbmRhclgsCiAgQ2FsZW5kYXJYMjogKCkgPT4gQ2FsZW5kYXJYMiwKICBDYWxlbmRhcnM6ICgpID0+IENhbGVuZGFycywKICBDYW1lcmE6ICgpID0+IENhbWVyYSwKICBDYW1lcmFPZmY6ICgpID0+IENhbWVyYU9mZiwKICBDYW5kbGVzdGlja0NoYXJ0OiAoKSA9PiBDaGFydENhbmRsZXN0aWNrLAogIENhbmR5OiAoKSA9PiBDYW5keSwKICBDYW5keUNhbmU6ICgpID0+IENhbmR5Q2FuZSwKICBDYW5keU9mZjogKCkgPT4gQ2FuZHlPZmYsCiAgQ2FubmFiaXM6ICgpID0+IENhbm5hYmlzLAogIENhbm5hYmlzT2ZmOiAoKSA9PiBDYW5uYWJpc09mZiwKICBDYXB0aW9uczogKCkgPT4gQ2FwdGlvbnMsCiAgQ2FwdGlvbnNPZmY6ICgpID0+IENhcHRpb25zT2ZmLAogIENhcjogKCkgPT4gQ2FyLAogIENhckZyb250OiAoKSA9PiBDYXJGcm9udCwKICBDYXJUYXhpRnJvbnQ6ICgpID0+IENhclRheGlGcm9udCwKICBDYXJhdmFuOiAoKSA9PiBDYXJhdmFuLAogIENhcmRTaW06ICgpID0+IENhcmRTaW0sCiAgQ2Fycm90OiAoKSA9PiBDYXJyb3QsCiAgQ2FzZUxvd2VyOiAoKSA9PiBDYXNlTG93ZXIsCiAgQ2FzZVNlbnNpdGl2ZTogKCkgPT4gQ2FzZVNlbnNpdGl2ZSwKICBDYXNlVXBwZXI6ICgpID0+IENhc2VVcHBlciwKICBDYXNzZXR0ZVRhcGU6ICgpID0+IENhc3NldHRlVGFwZSwKICBDYXN0OiAoKSA9PiBDYXN0LAogIENhc3RsZTogKCkgPT4gQ2FzdGxlLAogIENhdDogKCkgPT4gQ2F0LAogIENjdHY6ICgpID0+IENjdHYsCiAgQ2hhcnRBcmVhOiAoKSA9PiBDaGFydEFyZWEsCiAgQ2hhcnRCYXI6ICgpID0+IENoYXJ0QmFyLAogIENoYXJ0QmFyQmlnOiAoKSA9PiBDaGFydEJhckJpZywKICBDaGFydEJhckRlY3JlYXNpbmc6ICgpID0+IENoYXJ0QmFyRGVjcmVhc2luZywKICBDaGFydEJhckluY3JlYXNpbmc6ICgpID0+IENoYXJ0QmFySW5jcmVhc2luZywKICBDaGFydEJhclN0YWNrZWQ6ICgpID0+IENoYXJ0QmFyU3RhY2tlZCwKICBDaGFydENhbmRsZXN0aWNrOiAoKSA9PiBDaGFydENhbmRsZXN0aWNrLAogIENoYXJ0Q29sdW1uOiAoKSA9PiBDaGFydENvbHVtbiwKICBDaGFydENvbHVtbkJpZzogKCkgPT4gQ2hhcnRDb2x1bW5CaWcsCiAgQ2hhcnRDb2x1bW5EZWNyZWFzaW5nOiAoKSA9PiBDaGFydENvbHVtbkRlY3JlYXNpbmcsCiAgQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgQ2hhcnRDb2x1bW5TdGFja2VkOiAoKSA9PiBDaGFydENvbHVtblN0YWNrZWQsCiAgQ2hhcnRHYW50dDogKCkgPT4gQ2hhcnRHYW50dCwKICBDaGFydExpbmU6ICgpID0+IENoYXJ0TGluZSwKICBDaGFydE5ldHdvcms6ICgpID0+IENoYXJ0TmV0d29yaywKICBDaGFydE5vQXhlc0NvbHVtbjogKCkgPT4gQ2hhcnROb0F4ZXNDb2x1bW4sCiAgQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmcsCiAgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgQ2hhcnROb0F4ZXNDb21iaW5lZDogKCkgPT4gQ2hhcnROb0F4ZXNDb21iaW5lZCwKICBDaGFydE5vQXhlc0dhbnR0OiAoKSA9PiBDaGFydE5vQXhlc0dhbnR0LAogIENoYXJ0UGllOiAoKSA9PiBDaGFydFBpZSwKICBDaGFydFNjYXR0ZXI6ICgpID0+IENoYXJ0U2NhdHRlciwKICBDaGFydFNwbGluZTogKCkgPT4gQ2hhcnRTcGxpbmUsCiAgQ2hlY2s6ICgpID0+IENoZWNrLAogIENoZWNrQ2hlY2s6ICgpID0+IENoZWNrQ2hlY2ssCiAgQ2hlY2tDaXJjbGU6ICgpID0+IENpcmNsZUNoZWNrQmlnLAogIENoZWNrQ2lyY2xlMjogKCkgPT4gQ2lyY2xlQ2hlY2ssCiAgQ2hlY2tMaW5lOiAoKSA9PiBDaGVja0xpbmUsCiAgQ2hlY2tTcXVhcmU6ICgpID0+IFNxdWFyZUNoZWNrQmlnLAogIENoZWNrU3F1YXJlMjogKCkgPT4gU3F1YXJlQ2hlY2ssCiAgQ2hlZkhhdDogKCkgPT4gQ2hlZkhhdCwKICBDaGVycnk6ICgpID0+IENoZXJyeSwKICBDaGVzc0Jpc2hvcDogKCkgPT4gQ2hlc3NCaXNob3AsCiAgQ2hlc3NLaW5nOiAoKSA9PiBDaGVzc0tpbmcsCiAgQ2hlc3NLbmlnaHQ6ICgpID0+IENoZXNzS25pZ2h0LAogIENoZXNzUGF3bjogKCkgPT4gQ2hlc3NQYXduLAogIENoZXNzUXVlZW46ICgpID0+IENoZXNzUXVlZW4sCiAgQ2hlc3NSb29rOiAoKSA9PiBDaGVzc1Jvb2ssCiAgQ2hldnJvbkRvd246ICgpID0+IENoZXZyb25Eb3duLAogIENoZXZyb25Eb3duQ2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uRG93biwKICBDaGV2cm9uRG93blNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvbkRvd24sCiAgQ2hldnJvbkZpcnN0OiAoKSA9PiBDaGV2cm9uRmlyc3QsCiAgQ2hldnJvbkxhc3Q6ICgpID0+IENoZXZyb25MYXN0LAogIENoZXZyb25MZWZ0OiAoKSA9PiBDaGV2cm9uTGVmdCwKICBDaGV2cm9uTGVmdENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvbkxlZnQsCiAgQ2hldnJvbkxlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUNoZXZyb25MZWZ0LAogIENoZXZyb25SaWdodDogKCkgPT4gQ2hldnJvblJpZ2h0LAogIENoZXZyb25SaWdodENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvblJpZ2h0LAogIENoZXZyb25SaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvblJpZ2h0LAogIENoZXZyb25VcDogKCkgPT4gQ2hldnJvblVwLAogIENoZXZyb25VcENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvblVwLAogIENoZXZyb25VcFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvblVwLAogIENoZXZyb25zRG93bjogKCkgPT4gQ2hldnJvbnNEb3duLAogIENoZXZyb25zRG93blVwOiAoKSA9PiBDaGV2cm9uc0Rvd25VcCwKICBDaGV2cm9uc0xlZnQ6ICgpID0+IENoZXZyb25zTGVmdCwKICBDaGV2cm9uc0xlZnRSaWdodDogKCkgPT4gQ2hldnJvbnNMZWZ0UmlnaHQsCiAgQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczogKCkgPT4gQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpcywKICBDaGV2cm9uc1JpZ2h0OiAoKSA9PiBDaGV2cm9uc1JpZ2h0LAogIENoZXZyb25zUmlnaHRMZWZ0OiAoKSA9PiBDaGV2cm9uc1JpZ2h0TGVmdCwKICBDaGV2cm9uc1VwOiAoKSA9PiBDaGV2cm9uc1VwLAogIENoZXZyb25zVXBEb3duOiAoKSA9PiBDaGV2cm9uc1VwRG93biwKICBDaHJvbWU6ICgpID0+IENocm9taXVtLAogIENocm9taXVtOiAoKSA9PiBDaHJvbWl1bSwKICBDaHVyY2g6ICgpID0+IENodXJjaCwKICBDaWdhcmV0dGU6ICgpID0+IENpZ2FyZXR0ZSwKICBDaWdhcmV0dGVPZmY6ICgpID0+IENpZ2FyZXR0ZU9mZiwKICBDaXJjbGU6ICgpID0+IENpcmNsZSwKICBDaXJjbGVBbGVydDogKCkgPT4gQ2lyY2xlQWxlcnQsCiAgQ2lyY2xlQXJyb3dEb3duOiAoKSA9PiBDaXJjbGVBcnJvd0Rvd24sCiAgQ2lyY2xlQXJyb3dMZWZ0OiAoKSA9PiBDaXJjbGVBcnJvd0xlZnQsCiAgQ2lyY2xlQXJyb3dPdXREb3duTGVmdDogKCkgPT4gQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICBDaXJjbGVBcnJvd091dERvd25SaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQsCiAgQ2lyY2xlQXJyb3dPdXRVcExlZnQ6ICgpID0+IENpcmNsZUFycm93T3V0VXBMZWZ0LAogIENpcmNsZUFycm93T3V0VXBSaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0LAogIENpcmNsZUFycm93UmlnaHQ6ICgpID0+IENpcmNsZUFycm93UmlnaHQsCiAgQ2lyY2xlQXJyb3dVcDogKCkgPT4gQ2lyY2xlQXJyb3dVcCwKICBDaXJjbGVDaGVjazogKCkgPT4gQ2lyY2xlQ2hlY2ssCiAgQ2lyY2xlQ2hlY2tCaWc6ICgpID0+IENpcmNsZUNoZWNrQmlnLAogIENpcmNsZUNoZXZyb25Eb3duOiAoKSA9PiBDaXJjbGVDaGV2cm9uRG93biwKICBDaXJjbGVDaGV2cm9uTGVmdDogKCkgPT4gQ2lyY2xlQ2hldnJvbkxlZnQsCiAgQ2lyY2xlQ2hldnJvblJpZ2h0OiAoKSA9PiBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgQ2lyY2xlQ2hldnJvblVwOiAoKSA9PiBDaXJjbGVDaGV2cm9uVXAsCiAgQ2lyY2xlRGFzaGVkOiAoKSA9PiBDaXJjbGVEYXNoZWQsCiAgQ2lyY2xlRGl2aWRlOiAoKSA9PiBDaXJjbGVEaXZpZGUsCiAgQ2lyY2xlRG9sbGFyU2lnbjogKCkgPT4gQ2lyY2xlRG9sbGFyU2lnbiwKICBDaXJjbGVEb3Q6ICgpID0+IENpcmNsZURvdCwKICBDaXJjbGVEb3REYXNoZWQ6ICgpID0+IENpcmNsZURvdERhc2hlZCwKICBDaXJjbGVFbGxpcHNpczogKCkgPT4gQ2lyY2xlRWxsaXBzaXMsCiAgQ2lyY2xlRXF1YWw6ICgpID0+IENpcmNsZUVxdWFsLAogIENpcmNsZUZhZGluZ0Fycm93VXA6ICgpID0+IENpcmNsZUZhZGluZ0Fycm93VXAsCiAgQ2lyY2xlRmFkaW5nUGx1czogKCkgPT4gQ2lyY2xlRmFkaW5nUGx1cywKICBDaXJjbGVHYXVnZTogKCkgPT4gQ2lyY2xlR2F1Z2UsCiAgQ2lyY2xlSGVscDogKCkgPT4gQ2lyY2xlUXVlc3Rpb25NYXJrLAogIENpcmNsZU1pbnVzOiAoKSA9PiBDaXJjbGVNaW51cywKICBDaXJjbGVPZmY6ICgpID0+IENpcmNsZU9mZiwKICBDaXJjbGVQYXJraW5nOiAoKSA9PiBDaXJjbGVQYXJraW5nLAogIENpcmNsZVBhcmtpbmdPZmY6ICgpID0+IENpcmNsZVBhcmtpbmdPZmYsCiAgQ2lyY2xlUGF1c2U6ICgpID0+IENpcmNsZVBhdXNlLAogIENpcmNsZVBlcmNlbnQ6ICgpID0+IENpcmNsZVBlcmNlbnQsCiAgQ2lyY2xlUGlsZTogKCkgPT4gQ2lyY2xlUGlsZSwKICBDaXJjbGVQbGF5OiAoKSA9PiBDaXJjbGVQbGF5LAogIENpcmNsZVBsdXM6ICgpID0+IENpcmNsZVBsdXMsCiAgQ2lyY2xlUG91bmRTdGVybGluZzogKCkgPT4gQ2lyY2xlUG91bmRTdGVybGluZywKICBDaXJjbGVQb3dlcjogKCkgPT4gQ2lyY2xlUG93ZXIsCiAgQ2lyY2xlUXVlc3Rpb25NYXJrOiAoKSA9PiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgQ2lyY2xlU2xhc2g6ICgpID0+IENpcmNsZVNsYXNoLAogIENpcmNsZVNsYXNoMjogKCkgPT4gQ2lyY2xlU2xhc2gyLAogIENpcmNsZVNsYXNoZWQ6ICgpID0+IENpcmNsZVNsYXNoMiwKICBDaXJjbGVTbWFsbDogKCkgPT4gQ2lyY2xlU21hbGwsCiAgQ2lyY2xlU3RhcjogKCkgPT4gQ2lyY2xlU3RhciwKICBDaXJjbGVTdG9wOiAoKSA9PiBDaXJjbGVTdG9wLAogIENpcmNsZVVzZXI6ICgpID0+IENpcmNsZVVzZXIsCiAgQ2lyY2xlVXNlclJvdW5kOiAoKSA9PiBDaXJjbGVVc2VyUm91bmQsCiAgQ2lyY2xlWDogKCkgPT4gQ2lyY2xlWCwKICBDaXJjdWl0Qm9hcmQ6ICgpID0+IENpcmN1aXRCb2FyZCwKICBDaXRydXM6ICgpID0+IENpdHJ1cywKICBDbGFwcGVyYm9hcmQ6ICgpID0+IENsYXBwZXJib2FyZCwKICBDbGlwYm9hcmQ6ICgpID0+IENsaXBib2FyZCwKICBDbGlwYm9hcmRDaGVjazogKCkgPT4gQ2xpcGJvYXJkQ2hlY2ssCiAgQ2xpcGJvYXJkQ2xvY2s6ICgpID0+IENsaXBib2FyZENsb2NrLAogIENsaXBib2FyZENvcHk6ICgpID0+IENsaXBib2FyZENvcHksCiAgQ2xpcGJvYXJkRWRpdDogKCkgPT4gQ2xpcGJvYXJkUGVuLAogIENsaXBib2FyZExpc3Q6ICgpID0+IENsaXBib2FyZExpc3QsCiAgQ2xpcGJvYXJkTWludXM6ICgpID0+IENsaXBib2FyZE1pbnVzLAogIENsaXBib2FyZFBhc3RlOiAoKSA9PiBDbGlwYm9hcmRQYXN0ZSwKICBDbGlwYm9hcmRQZW46ICgpID0+IENsaXBib2FyZFBlbiwKICBDbGlwYm9hcmRQZW5MaW5lOiAoKSA9PiBDbGlwYm9hcmRQZW5MaW5lLAogIENsaXBib2FyZFBsdXM6ICgpID0+IENsaXBib2FyZFBsdXMsCiAgQ2xpcGJvYXJkU2lnbmF0dXJlOiAoKSA9PiBDbGlwYm9hcmRQZW5MaW5lLAogIENsaXBib2FyZFR5cGU6ICgpID0+IENsaXBib2FyZFR5cGUsCiAgQ2xpcGJvYXJkWDogKCkgPT4gQ2xpcGJvYXJkWCwKICBDbG9jazogKCkgPT4gQ2xvY2ssCiAgQ2xvY2sxOiAoKSA9PiBDbG9jazEsCiAgQ2xvY2sxMDogKCkgPT4gQ2xvY2sxMCwKICBDbG9jazExOiAoKSA9PiBDbG9jazExLAogIENsb2NrMTI6ICgpID0+IENsb2NrMTIsCiAgQ2xvY2syOiAoKSA9PiBDbG9jazIsCiAgQ2xvY2szOiAoKSA9PiBDbG9jazMsCiAgQ2xvY2s0OiAoKSA9PiBDbG9jazQsCiAgQ2xvY2s1OiAoKSA9PiBDbG9jazUsCiAgQ2xvY2s2OiAoKSA9PiBDbG9jazYsCiAgQ2xvY2s3OiAoKSA9PiBDbG9jazcsCiAgQ2xvY2s4OiAoKSA9PiBDbG9jazgsCiAgQ2xvY2s5OiAoKSA9PiBDbG9jazksCiAgQ2xvY2tBbGVydDogKCkgPT4gQ2xvY2tBbGVydCwKICBDbG9ja0Fycm93RG93bjogKCkgPT4gQ2xvY2tBcnJvd0Rvd24sCiAgQ2xvY2tBcnJvd1VwOiAoKSA9PiBDbG9ja0Fycm93VXAsCiAgQ2xvY2tDaGVjazogKCkgPT4gQ2xvY2tDaGVjaywKICBDbG9ja0ZhZGluZzogKCkgPT4gQ2xvY2tGYWRpbmcsCiAgQ2xvY2tQbHVzOiAoKSA9PiBDbG9ja1BsdXMsCiAgQ2xvc2VkQ2FwdGlvbjogKCkgPT4gQ2xvc2VkQ2FwdGlvbiwKICBDbG91ZDogKCkgPT4gQ2xvdWQsCiAgQ2xvdWRBbGVydDogKCkgPT4gQ2xvdWRBbGVydCwKICBDbG91ZEJhY2t1cDogKCkgPT4gQ2xvdWRCYWNrdXAsCiAgQ2xvdWRDaGVjazogKCkgPT4gQ2xvdWRDaGVjaywKICBDbG91ZENvZzogKCkgPT4gQ2xvdWRDb2csCiAgQ2xvdWREb3dubG9hZDogKCkgPT4gQ2xvdWREb3dubG9hZCwKICBDbG91ZERyaXp6bGU6ICgpID0+IENsb3VkRHJpenpsZSwKICBDbG91ZEZvZzogKCkgPT4gQ2xvdWRGb2csCiAgQ2xvdWRIYWlsOiAoKSA9PiBDbG91ZEhhaWwsCiAgQ2xvdWRMaWdodG5pbmc6ICgpID0+IENsb3VkTGlnaHRuaW5nLAogIENsb3VkTW9vbjogKCkgPT4gQ2xvdWRNb29uLAogIENsb3VkTW9vblJhaW46ICgpID0+IENsb3VkTW9vblJhaW4sCiAgQ2xvdWRPZmY6ICgpID0+IENsb3VkT2ZmLAogIENsb3VkUmFpbjogKCkgPT4gQ2xvdWRSYWluLAogIENsb3VkUmFpbldpbmQ6ICgpID0+IENsb3VkUmFpbldpbmQsCiAgQ2xvdWRTbm93OiAoKSA9PiBDbG91ZFNub3csCiAgQ2xvdWRTdW46ICgpID0+IENsb3VkU3VuLAogIENsb3VkU3VuUmFpbjogKCkgPT4gQ2xvdWRTdW5SYWluLAogIENsb3VkU3luYzogKCkgPT4gQ2xvdWRTeW5jLAogIENsb3VkVXBsb2FkOiAoKSA9PiBDbG91ZFVwbG9hZCwKICBDbG91ZHk6ICgpID0+IENsb3VkeSwKICBDbG92ZXI6ICgpID0+IENsb3ZlciwKICBDbHViOiAoKSA9PiBDbHViLAogIENvZGU6ICgpID0+IENvZGUsCiAgQ29kZTI6ICgpID0+IENvZGVYbWwsCiAgQ29kZVNxdWFyZTogKCkgPT4gU3F1YXJlQ29kZSwKICBDb2RlWG1sOiAoKSA9PiBDb2RlWG1sLAogIENvZGVwZW46ICgpID0+IENvZGVwZW4sCiAgQ29kZXNhbmRib3g6ICgpID0+IENvZGVzYW5kYm94LAogIENvZmZlZTogKCkgPT4gQ29mZmVlLAogIENvZzogKCkgPT4gQ29nLAogIENvaW5zOiAoKSA9PiBDb2lucywKICBDb2x1bW5zOiAoKSA9PiBDb2x1bW5zMiwKICBDb2x1bW5zMjogKCkgPT4gQ29sdW1uczIsCiAgQ29sdW1uczM6ICgpID0+IENvbHVtbnMzLAogIENvbHVtbnMzQ29nOiAoKSA9PiBDb2x1bW5zM0NvZywKICBDb2x1bW5zNDogKCkgPT4gQ29sdW1uczQsCiAgQ29sdW1uc1NldHRpbmdzOiAoKSA9PiBDb2x1bW5zM0NvZywKICBDb21iaW5lOiAoKSA9PiBDb21iaW5lLAogIENvbW1hbmQ6ICgpID0+IENvbW1hbmQsCiAgQ29tcGFzczogKCkgPT4gQ29tcGFzcywKICBDb21wb25lbnQ6ICgpID0+IENvbXBvbmVudCwKICBDb21wdXRlcjogKCkgPT4gQ29tcHV0ZXIsCiAgQ29uY2llcmdlQmVsbDogKCkgPT4gQ29uY2llcmdlQmVsbCwKICBDb25lOiAoKSA9PiBDb25lLAogIENvbnN0cnVjdGlvbjogKCkgPT4gQ29uc3RydWN0aW9uLAogIENvbnRhY3Q6ICgpID0+IENvbnRhY3QsCiAgQ29udGFjdDI6ICgpID0+IENvbnRhY3RSb3VuZCwKICBDb250YWN0Um91bmQ6ICgpID0+IENvbnRhY3RSb3VuZCwKICBDb250YWluZXI6ICgpID0+IENvbnRhaW5lciwKICBDb250cmFzdDogKCkgPT4gQ29udHJhc3QsCiAgQ29va2llOiAoKSA9PiBDb29raWUsCiAgQ29va2luZ1BvdDogKCkgPT4gQ29va2luZ1BvdCwKICBDb3B5OiAoKSA9PiBDb3B5LAogIENvcHlDaGVjazogKCkgPT4gQ29weUNoZWNrLAogIENvcHlNaW51czogKCkgPT4gQ29weU1pbnVzLAogIENvcHlQbHVzOiAoKSA9PiBDb3B5UGx1cywKICBDb3B5U2xhc2g6ICgpID0+IENvcHlTbGFzaCwKICBDb3B5WDogKCkgPT4gQ29weVgsCiAgQ29weWxlZnQ6ICgpID0+IENvcHlsZWZ0LAogIENvcHlyaWdodDogKCkgPT4gQ29weXJpZ2h0LAogIENvcm5lckRvd25MZWZ0OiAoKSA9PiBDb3JuZXJEb3duTGVmdCwKICBDb3JuZXJEb3duUmlnaHQ6ICgpID0+IENvcm5lckRvd25SaWdodCwKICBDb3JuZXJMZWZ0RG93bjogKCkgPT4gQ29ybmVyTGVmdERvd24sCiAgQ29ybmVyTGVmdFVwOiAoKSA9PiBDb3JuZXJMZWZ0VXAsCiAgQ29ybmVyUmlnaHREb3duOiAoKSA9PiBDb3JuZXJSaWdodERvd24sCiAgQ29ybmVyUmlnaHRVcDogKCkgPT4gQ29ybmVyUmlnaHRVcCwKICBDb3JuZXJVcExlZnQ6ICgpID0+IENvcm5lclVwTGVmdCwKICBDb3JuZXJVcFJpZ2h0OiAoKSA9PiBDb3JuZXJVcFJpZ2h0LAogIENwdTogKCkgPT4gQ3B1LAogIENyZWF0aXZlQ29tbW9uczogKCkgPT4gQ3JlYXRpdmVDb21tb25zLAogIENyZWRpdENhcmQ6ICgpID0+IENyZWRpdENhcmQsCiAgQ3JvaXNzYW50OiAoKSA9PiBDcm9pc3NhbnQsCiAgQ3JvcDogKCkgPT4gQ3JvcCwKICBDcm9zczogKCkgPT4gQ3Jvc3MsCiAgQ3Jvc3NoYWlyOiAoKSA9PiBDcm9zc2hhaXIsCiAgQ3Jvd246ICgpID0+IENyb3duLAogIEN1Ym9pZDogKCkgPT4gQ3Vib2lkLAogIEN1cFNvZGE6ICgpID0+IEN1cFNvZGEsCiAgQ3VybHlCcmFjZXM6ICgpID0+IEJyYWNlcywKICBDdXJyZW5jeTogKCkgPT4gQ3VycmVuY3ksCiAgQ3lsaW5kZXI6ICgpID0+IEN5bGluZGVyLAogIERhbTogKCkgPT4gRGFtLAogIERhdGFiYXNlOiAoKSA9PiBEYXRhYmFzZSwKICBEYXRhYmFzZUJhY2t1cDogKCkgPT4gRGF0YWJhc2VCYWNrdXAsCiAgRGF0YWJhc2VaYXA6ICgpID0+IERhdGFiYXNlWmFwLAogIERlY2ltYWxzQXJyb3dMZWZ0OiAoKSA9PiBEZWNpbWFsc0Fycm93TGVmdCwKICBEZWNpbWFsc0Fycm93UmlnaHQ6ICgpID0+IERlY2ltYWxzQXJyb3dSaWdodCwKICBEZWxldGU6ICgpID0+IERlbGV0ZSwKICBEZXNzZXJ0OiAoKSA9PiBEZXNzZXJ0LAogIERpYW1ldGVyOiAoKSA9PiBEaWFtZXRlciwKICBEaWFtb25kOiAoKSA9PiBEaWFtb25kLAogIERpYW1vbmRNaW51czogKCkgPT4gRGlhbW9uZE1pbnVzLAogIERpYW1vbmRQZXJjZW50OiAoKSA9PiBEaWFtb25kUGVyY2VudCwKICBEaWFtb25kUGx1czogKCkgPT4gRGlhbW9uZFBsdXMsCiAgRGljZTE6ICgpID0+IERpY2UxLAogIERpY2UyOiAoKSA9PiBEaWNlMiwKICBEaWNlMzogKCkgPT4gRGljZTMsCiAgRGljZTQ6ICgpID0+IERpY2U0LAogIERpY2U1OiAoKSA9PiBEaWNlNSwKICBEaWNlNjogKCkgPT4gRGljZTYsCiAgRGljZXM6ICgpID0+IERpY2VzLAogIERpZmY6ICgpID0+IERpZmYsCiAgRGlzYzogKCkgPT4gRGlzYywKICBEaXNjMjogKCkgPT4gRGlzYzIsCiAgRGlzYzM6ICgpID0+IERpc2MzLAogIERpc2NBbGJ1bTogKCkgPT4gRGlzY0FsYnVtLAogIERpdmlkZTogKCkgPT4gRGl2aWRlLAogIERpdmlkZUNpcmNsZTogKCkgPT4gQ2lyY2xlRGl2aWRlLAogIERpdmlkZVNxdWFyZTogKCkgPT4gU3F1YXJlRGl2aWRlLAogIERuYTogKCkgPT4gRG5hLAogIERuYU9mZjogKCkgPT4gRG5hT2ZmLAogIERvY2s6ICgpID0+IERvY2ssCiAgRG9nOiAoKSA9PiBEb2csCiAgRG9sbGFyU2lnbjogKCkgPT4gRG9sbGFyU2lnbiwKICBEb251dDogKCkgPT4gRG9udXQsCiAgRG9vckNsb3NlZDogKCkgPT4gRG9vckNsb3NlZCwKICBEb29yQ2xvc2VkTG9ja2VkOiAoKSA9PiBEb29yQ2xvc2VkTG9ja2VkLAogIERvb3JPcGVuOiAoKSA9PiBEb29yT3BlbiwKICBEb3Q6ICgpID0+IERvdCwKICBEb3RTcXVhcmU6ICgpID0+IFNxdWFyZURvdCwKICBEb3dubG9hZDogKCkgPT4gRG93bmxvYWQsCiAgRG93bmxvYWRDbG91ZDogKCkgPT4gQ2xvdWREb3dubG9hZCwKICBEcmFmdGluZ0NvbXBhc3M6ICgpID0+IERyYWZ0aW5nQ29tcGFzcywKICBEcmFtYTogKCkgPT4gRHJhbWEsCiAgRHJpYmJibGU6ICgpID0+IERyaWJiYmxlLAogIERyaWxsOiAoKSA9PiBEcmlsbCwKICBEcm9uZTogKCkgPT4gRHJvbmUsCiAgRHJvcGxldDogKCkgPT4gRHJvcGxldCwKICBEcm9wbGV0T2ZmOiAoKSA9PiBEcm9wbGV0T2ZmLAogIERyb3BsZXRzOiAoKSA9PiBEcm9wbGV0cywKICBEcnVtOiAoKSA9PiBEcnVtLAogIERydW1zdGljazogKCkgPT4gRHJ1bXN0aWNrLAogIER1bWJiZWxsOiAoKSA9PiBEdW1iYmVsbCwKICBFYXI6ICgpID0+IEVhciwKICBFYXJPZmY6ICgpID0+IEVhck9mZiwKICBFYXJ0aDogKCkgPT4gRWFydGgsCiAgRWFydGhMb2NrOiAoKSA9PiBFYXJ0aExvY2ssCiAgRWNsaXBzZTogKCkgPT4gRWNsaXBzZSwKICBFZGl0OiAoKSA9PiBTcXVhcmVQZW4sCiAgRWRpdDI6ICgpID0+IFBlbiwKICBFZGl0MzogKCkgPT4gUGVuTGluZSwKICBFZ2c6ICgpID0+IEVnZywKICBFZ2dGcmllZDogKCkgPT4gRWdnRnJpZWQsCiAgRWdnT2ZmOiAoKSA9PiBFZ2dPZmYsCiAgRWxsaXBzaXM6ICgpID0+IEVsbGlwc2lzLAogIEVsbGlwc2lzVmVydGljYWw6ICgpID0+IEVsbGlwc2lzVmVydGljYWwsCiAgRXF1YWw6ICgpID0+IEVxdWFsLAogIEVxdWFsQXBwcm94aW1hdGVseTogKCkgPT4gRXF1YWxBcHByb3hpbWF0ZWx5LAogIEVxdWFsTm90OiAoKSA9PiBFcXVhbE5vdCwKICBFcXVhbFNxdWFyZTogKCkgPT4gU3F1YXJlRXF1YWwsCiAgRXJhc2VyOiAoKSA9PiBFcmFzZXIsCiAgRXRoZXJuZXRQb3J0OiAoKSA9PiBFdGhlcm5ldFBvcnQsCiAgRXVybzogKCkgPT4gRXVybywKICBFdkNoYXJnZXI6ICgpID0+IEV2Q2hhcmdlciwKICBFeHBhbmQ6ICgpID0+IEV4cGFuZCwKICBFeHRlcm5hbExpbms6ICgpID0+IEV4dGVybmFsTGluaywKICBFeWU6ICgpID0+IEV5ZSwKICBFeWVDbG9zZWQ6ICgpID0+IEV5ZUNsb3NlZCwKICBFeWVPZmY6ICgpID0+IEV5ZU9mZiwKICBGYWNlYm9vazogKCkgPT4gRmFjZWJvb2ssCiAgRmFjdG9yeTogKCkgPT4gRmFjdG9yeSwKICBGYW46ICgpID0+IEZhbiwKICBGYXN0Rm9yd2FyZDogKCkgPT4gRmFzdEZvcndhcmQsCiAgRmVhdGhlcjogKCkgPT4gRmVhdGhlciwKICBGZW5jZTogKCkgPT4gRmVuY2UsCiAgRmVycmlzV2hlZWw6ICgpID0+IEZlcnJpc1doZWVsLAogIEZpZ21hOiAoKSA9PiBGaWdtYSwKICBGaWxlOiAoKSA9PiBGaWxlLAogIEZpbGVBcmNoaXZlOiAoKSA9PiBGaWxlQXJjaGl2ZSwKICBGaWxlQXVkaW86ICgpID0+IEZpbGVIZWFkcGhvbmUsCiAgRmlsZUF1ZGlvMjogKCkgPT4gRmlsZUhlYWRwaG9uZSwKICBGaWxlQXhpczNEOiAoKSA9PiBGaWxlQXhpczNkLAogIEZpbGVBeGlzM2Q6ICgpID0+IEZpbGVBeGlzM2QsCiAgRmlsZUJhZGdlOiAoKSA9PiBGaWxlQmFkZ2UsCiAgRmlsZUJhZGdlMjogKCkgPT4gRmlsZUJhZGdlLAogIEZpbGVCYXJDaGFydDogKCkgPT4gRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBGaWxlQmFyQ2hhcnQyOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW4sCiAgRmlsZUJveDogKCkgPT4gRmlsZUJveCwKICBGaWxlQnJhY2VzOiAoKSA9PiBGaWxlQnJhY2VzLAogIEZpbGVCcmFjZXNDb3JuZXI6ICgpID0+IEZpbGVCcmFjZXNDb3JuZXIsCiAgRmlsZUNoYXJ0Q29sdW1uOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW4sCiAgRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZzogKCkgPT4gRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBGaWxlQ2hhcnRMaW5lOiAoKSA9PiBGaWxlQ2hhcnRMaW5lLAogIEZpbGVDaGFydFBpZTogKCkgPT4gRmlsZUNoYXJ0UGllLAogIEZpbGVDaGVjazogKCkgPT4gRmlsZUNoZWNrLAogIEZpbGVDaGVjazI6ICgpID0+IEZpbGVDaGVja0Nvcm5lciwKICBGaWxlQ2hlY2tDb3JuZXI6ICgpID0+IEZpbGVDaGVja0Nvcm5lciwKICBGaWxlQ2xvY2s6ICgpID0+IEZpbGVDbG9jaywKICBGaWxlQ29kZTogKCkgPT4gRmlsZUNvZGUsCiAgRmlsZUNvZGUyOiAoKSA9PiBGaWxlQ29kZUNvcm5lciwKICBGaWxlQ29kZUNvcm5lcjogKCkgPT4gRmlsZUNvZGVDb3JuZXIsCiAgRmlsZUNvZzogKCkgPT4gRmlsZUNvZywKICBGaWxlQ29nMjogKCkgPT4gRmlsZUNvZywKICBGaWxlRGlmZjogKCkgPT4gRmlsZURpZmYsCiAgRmlsZURpZ2l0OiAoKSA9PiBGaWxlRGlnaXQsCiAgRmlsZURvd246ICgpID0+IEZpbGVEb3duLAogIEZpbGVFZGl0OiAoKSA9PiBGaWxlUGVuLAogIEZpbGVFeGNsYW1hdGlvblBvaW50OiAoKSA9PiBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICBGaWxlSGVhZHBob25lOiAoKSA9PiBGaWxlSGVhZHBob25lLAogIEZpbGVIZWFydDogKCkgPT4gRmlsZUhlYXJ0LAogIEZpbGVJbWFnZTogKCkgPT4gRmlsZUltYWdlLAogIEZpbGVJbnB1dDogKCkgPT4gRmlsZUlucHV0LAogIEZpbGVKc29uOiAoKSA9PiBGaWxlQnJhY2VzLAogIEZpbGVKc29uMjogKCkgPT4gRmlsZUJyYWNlc0Nvcm5lciwKICBGaWxlS2V5OiAoKSA9PiBGaWxlS2V5LAogIEZpbGVLZXkyOiAoKSA9PiBGaWxlS2V5LAogIEZpbGVMaW5lQ2hhcnQ6ICgpID0+IEZpbGVDaGFydExpbmUsCiAgRmlsZUxvY2s6ICgpID0+IEZpbGVMb2NrLAogIEZpbGVMb2NrMjogKCkgPT4gRmlsZUxvY2ssCiAgRmlsZU1pbnVzOiAoKSA9PiBGaWxlTWludXMsCiAgRmlsZU1pbnVzMjogKCkgPT4gRmlsZU1pbnVzQ29ybmVyLAogIEZpbGVNaW51c0Nvcm5lcjogKCkgPT4gRmlsZU1pbnVzQ29ybmVyLAogIEZpbGVNdXNpYzogKCkgPT4gRmlsZU11c2ljLAogIEZpbGVPdXRwdXQ6ICgpID0+IEZpbGVPdXRwdXQsCiAgRmlsZVBlbjogKCkgPT4gRmlsZVBlbiwKICBGaWxlUGVuTGluZTogKCkgPT4gRmlsZVBlbkxpbmUsCiAgRmlsZVBpZUNoYXJ0OiAoKSA9PiBGaWxlQ2hhcnRQaWUsCiAgRmlsZVBsYXk6ICgpID0+IEZpbGVQbGF5LAogIEZpbGVQbHVzOiAoKSA9PiBGaWxlUGx1cywKICBGaWxlUGx1czI6ICgpID0+IEZpbGVQbHVzQ29ybmVyLAogIEZpbGVQbHVzQ29ybmVyOiAoKSA9PiBGaWxlUGx1c0Nvcm5lciwKICBGaWxlUXVlc3Rpb246ICgpID0+IEZpbGVRdWVzdGlvbk1hcmssCiAgRmlsZVF1ZXN0aW9uTWFyazogKCkgPT4gRmlsZVF1ZXN0aW9uTWFyaywKICBGaWxlU2NhbjogKCkgPT4gRmlsZVNjYW4sCiAgRmlsZVNlYXJjaDogKCkgPT4gRmlsZVNlYXJjaCwKICBGaWxlU2VhcmNoMjogKCkgPT4gRmlsZVNlYXJjaENvcm5lciwKICBGaWxlU2VhcmNoQ29ybmVyOiAoKSA9PiBGaWxlU2VhcmNoQ29ybmVyLAogIEZpbGVTaWduYWw6ICgpID0+IEZpbGVTaWduYWwsCiAgRmlsZVNpZ25hdHVyZTogKCkgPT4gRmlsZVBlbkxpbmUsCiAgRmlsZVNsaWRlcnM6ICgpID0+IEZpbGVTbGlkZXJzLAogIEZpbGVTcHJlYWRzaGVldDogKCkgPT4gRmlsZVNwcmVhZHNoZWV0LAogIEZpbGVTdGFjazogKCkgPT4gRmlsZVN0YWNrLAogIEZpbGVTeW1saW5rOiAoKSA9PiBGaWxlU3ltbGluaywKICBGaWxlVGVybWluYWw6ICgpID0+IEZpbGVUZXJtaW5hbCwKICBGaWxlVGV4dDogKCkgPT4gRmlsZVRleHQsCiAgRmlsZVR5cGU6ICgpID0+IEZpbGVUeXBlLAogIEZpbGVUeXBlMjogKCkgPT4gRmlsZVR5cGVDb3JuZXIsCiAgRmlsZVR5cGVDb3JuZXI6ICgpID0+IEZpbGVUeXBlQ29ybmVyLAogIEZpbGVVcDogKCkgPT4gRmlsZVVwLAogIEZpbGVVc2VyOiAoKSA9PiBGaWxlVXNlciwKICBGaWxlVmlkZW86ICgpID0+IEZpbGVQbGF5LAogIEZpbGVWaWRlbzI6ICgpID0+IEZpbGVWaWRlb0NhbWVyYSwKICBGaWxlVmlkZW9DYW1lcmE6ICgpID0+IEZpbGVWaWRlb0NhbWVyYSwKICBGaWxlVm9sdW1lOiAoKSA9PiBGaWxlVm9sdW1lLAogIEZpbGVWb2x1bWUyOiAoKSA9PiBGaWxlU2lnbmFsLAogIEZpbGVXYXJuaW5nOiAoKSA9PiBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICBGaWxlWDogKCkgPT4gRmlsZVgsCiAgRmlsZVgyOiAoKSA9PiBGaWxlWENvcm5lciwKICBGaWxlWENvcm5lcjogKCkgPT4gRmlsZVhDb3JuZXIsCiAgRmlsZXM6ICgpID0+IEZpbGVzLAogIEZpbG06ICgpID0+IEZpbG0sCiAgRmlsdGVyOiAoKSA9PiBGdW5uZWwsCiAgRmlsdGVyWDogKCkgPT4gRnVubmVsWCwKICBGaW5nZXJwcmludDogKCkgPT4gRmluZ2VycHJpbnRQYXR0ZXJuLAogIEZpbmdlcnByaW50UGF0dGVybjogKCkgPT4gRmluZ2VycHJpbnRQYXR0ZXJuLAogIEZpcmVFeHRpbmd1aXNoZXI6ICgpID0+IEZpcmVFeHRpbmd1aXNoZXIsCiAgRmlzaDogKCkgPT4gRmlzaCwKICBGaXNoT2ZmOiAoKSA9PiBGaXNoT2ZmLAogIEZpc2hTeW1ib2w6ICgpID0+IEZpc2hTeW1ib2wsCiAgRmlzaGluZ0hvb2s6ICgpID0+IEZpc2hpbmdIb29rLAogIEZsYWc6ICgpID0+IEZsYWcsCiAgRmxhZ09mZjogKCkgPT4gRmxhZ09mZiwKICBGbGFnVHJpYW5nbGVMZWZ0OiAoKSA9PiBGbGFnVHJpYW5nbGVMZWZ0LAogIEZsYWdUcmlhbmdsZVJpZ2h0OiAoKSA9PiBGbGFnVHJpYW5nbGVSaWdodCwKICBGbGFtZTogKCkgPT4gRmxhbWUsCiAgRmxhbWVLaW5kbGluZzogKCkgPT4gRmxhbWVLaW5kbGluZywKICBGbGFzaGxpZ2h0OiAoKSA9PiBGbGFzaGxpZ2h0LAogIEZsYXNobGlnaHRPZmY6ICgpID0+IEZsYXNobGlnaHRPZmYsCiAgRmxhc2tDb25pY2FsOiAoKSA9PiBGbGFza0NvbmljYWwsCiAgRmxhc2tDb25pY2FsT2ZmOiAoKSA9PiBGbGFza0NvbmljYWxPZmYsCiAgRmxhc2tSb3VuZDogKCkgPT4gRmxhc2tSb3VuZCwKICBGbGlwSG9yaXpvbnRhbDogKCkgPT4gRmxpcEhvcml6b250YWwsCiAgRmxpcEhvcml6b250YWwyOiAoKSA9PiBGbGlwSG9yaXpvbnRhbDIsCiAgRmxpcFZlcnRpY2FsOiAoKSA9PiBGbGlwVmVydGljYWwsCiAgRmxpcFZlcnRpY2FsMjogKCkgPT4gRmxpcFZlcnRpY2FsMiwKICBGbG93ZXI6ICgpID0+IEZsb3dlciwKICBGbG93ZXIyOiAoKSA9PiBGbG93ZXIyLAogIEZvY3VzOiAoKSA9PiBGb2N1cywKICBGb2xkSG9yaXpvbnRhbDogKCkgPT4gRm9sZEhvcml6b250YWwsCiAgRm9sZFZlcnRpY2FsOiAoKSA9PiBGb2xkVmVydGljYWwsCiAgRm9sZGVyOiAoKSA9PiBGb2xkZXIsCiAgRm9sZGVyQXJjaGl2ZTogKCkgPT4gRm9sZGVyQXJjaGl2ZSwKICBGb2xkZXJDaGVjazogKCkgPT4gRm9sZGVyQ2hlY2ssCiAgRm9sZGVyQ2xvY2s6ICgpID0+IEZvbGRlckNsb2NrLAogIEZvbGRlckNsb3NlZDogKCkgPT4gRm9sZGVyQ2xvc2VkLAogIEZvbGRlckNvZGU6ICgpID0+IEZvbGRlckNvZGUsCiAgRm9sZGVyQ29nOiAoKSA9PiBGb2xkZXJDb2csCiAgRm9sZGVyQ29nMjogKCkgPT4gRm9sZGVyQ29nLAogIEZvbGRlckRvdDogKCkgPT4gRm9sZGVyRG90LAogIEZvbGRlckRvd246ICgpID0+IEZvbGRlckRvd24sCiAgRm9sZGVyRWRpdDogKCkgPT4gRm9sZGVyUGVuLAogIEZvbGRlckdpdDogKCkgPT4gRm9sZGVyR2l0LAogIEZvbGRlckdpdDI6ICgpID0+IEZvbGRlckdpdDIsCiAgRm9sZGVySGVhcnQ6ICgpID0+IEZvbGRlckhlYXJ0LAogIEZvbGRlcklucHV0OiAoKSA9PiBGb2xkZXJJbnB1dCwKICBGb2xkZXJLYW5iYW46ICgpID0+IEZvbGRlckthbmJhbiwKICBGb2xkZXJLZXk6ICgpID0+IEZvbGRlcktleSwKICBGb2xkZXJMb2NrOiAoKSA9PiBGb2xkZXJMb2NrLAogIEZvbGRlck1pbnVzOiAoKSA9PiBGb2xkZXJNaW51cywKICBGb2xkZXJPcGVuOiAoKSA9PiBGb2xkZXJPcGVuLAogIEZvbGRlck9wZW5Eb3Q6ICgpID0+IEZvbGRlck9wZW5Eb3QsCiAgRm9sZGVyT3V0cHV0OiAoKSA9PiBGb2xkZXJPdXRwdXQsCiAgRm9sZGVyUGVuOiAoKSA9PiBGb2xkZXJQZW4sCiAgRm9sZGVyUGx1czogKCkgPT4gRm9sZGVyUGx1cywKICBGb2xkZXJSb290OiAoKSA9PiBGb2xkZXJSb290LAogIEZvbGRlclNlYXJjaDogKCkgPT4gRm9sZGVyU2VhcmNoLAogIEZvbGRlclNlYXJjaDI6ICgpID0+IEZvbGRlclNlYXJjaDIsCiAgRm9sZGVyU3ltbGluazogKCkgPT4gRm9sZGVyU3ltbGluaywKICBGb2xkZXJTeW5jOiAoKSA9PiBGb2xkZXJTeW5jLAogIEZvbGRlclRyZWU6ICgpID0+IEZvbGRlclRyZWUsCiAgRm9sZGVyVXA6ICgpID0+IEZvbGRlclVwLAogIEZvbGRlclg6ICgpID0+IEZvbGRlclgsCiAgRm9sZGVyczogKCkgPT4gRm9sZGVycywKICBGb290cHJpbnRzOiAoKSA9PiBGb290cHJpbnRzLAogIEZvcmtLbmlmZTogKCkgPT4gVXRlbnNpbHMsCiAgRm9ya0tuaWZlQ3Jvc3NlZDogKCkgPT4gVXRlbnNpbHNDcm9zc2VkLAogIEZvcmtsaWZ0OiAoKSA9PiBGb3JrbGlmdCwKICBGb3JtOiAoKSA9PiBGb3JtLAogIEZvcm1JbnB1dDogKCkgPT4gUmVjdGFuZ2xlRWxsaXBzaXMsCiAgRm9yd2FyZDogKCkgPT4gRm9yd2FyZCwKICBGcmFtZTogKCkgPT4gRnJhbWUsCiAgRnJhbWVyOiAoKSA9PiBGcmFtZXIsCiAgRnJvd246ICgpID0+IEZyb3duLAogIEZ1ZWw6ICgpID0+IEZ1ZWwsCiAgRnVsbHNjcmVlbjogKCkgPT4gRnVsbHNjcmVlbiwKICBGdW5jdGlvblNxdWFyZTogKCkgPT4gU3F1YXJlRnVuY3Rpb24sCiAgRnVubmVsOiAoKSA9PiBGdW5uZWwsCiAgRnVubmVsUGx1czogKCkgPT4gRnVubmVsUGx1cywKICBGdW5uZWxYOiAoKSA9PiBGdW5uZWxYLAogIEdhbGxlcnlIb3Jpem9udGFsOiAoKSA9PiBHYWxsZXJ5SG9yaXpvbnRhbCwKICBHYWxsZXJ5SG9yaXpvbnRhbEVuZDogKCkgPT4gR2FsbGVyeUhvcml6b250YWxFbmQsCiAgR2FsbGVyeVRodW1ibmFpbHM6ICgpID0+IEdhbGxlcnlUaHVtYm5haWxzLAogIEdhbGxlcnlWZXJ0aWNhbDogKCkgPT4gR2FsbGVyeVZlcnRpY2FsLAogIEdhbGxlcnlWZXJ0aWNhbEVuZDogKCkgPT4gR2FsbGVyeVZlcnRpY2FsRW5kLAogIEdhbWVwYWQ6ICgpID0+IEdhbWVwYWQsCiAgR2FtZXBhZDI6ICgpID0+IEdhbWVwYWQyLAogIEdhbWVwYWREaXJlY3Rpb25hbDogKCkgPT4gR2FtZXBhZERpcmVjdGlvbmFsLAogIEdhbnR0Q2hhcnQ6ICgpID0+IENoYXJ0Tm9BeGVzR2FudHQsCiAgR2FudHRDaGFydFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBHYXVnZTogKCkgPT4gR2F1Z2UsCiAgR2F1Z2VDaXJjbGU6ICgpID0+IENpcmNsZUdhdWdlLAogIEdhdmVsOiAoKSA9PiBHYXZlbCwKICBHZW06ICgpID0+IEdlbSwKICBHZW9yZ2lhbkxhcmk6ICgpID0+IEdlb3JnaWFuTGFyaSwKICBHaG9zdDogKCkgPT4gR2hvc3QsCiAgR2lmdDogKCkgPT4gR2lmdCwKICBHaXRCcmFuY2g6ICgpID0+IEdpdEJyYW5jaCwKICBHaXRCcmFuY2hNaW51czogKCkgPT4gR2l0QnJhbmNoTWludXMsCiAgR2l0QnJhbmNoUGx1czogKCkgPT4gR2l0QnJhbmNoUGx1cywKICBHaXRDb21taXQ6ICgpID0+IEdpdENvbW1pdEhvcml6b250YWwsCiAgR2l0Q29tbWl0SG9yaXpvbnRhbDogKCkgPT4gR2l0Q29tbWl0SG9yaXpvbnRhbCwKICBHaXRDb21taXRWZXJ0aWNhbDogKCkgPT4gR2l0Q29tbWl0VmVydGljYWwsCiAgR2l0Q29tcGFyZTogKCkgPT4gR2l0Q29tcGFyZSwKICBHaXRDb21wYXJlQXJyb3dzOiAoKSA9PiBHaXRDb21wYXJlQXJyb3dzLAogIEdpdEZvcms6ICgpID0+IEdpdEZvcmssCiAgR2l0R3JhcGg6ICgpID0+IEdpdEdyYXBoLAogIEdpdE1lcmdlOiAoKSA9PiBHaXRNZXJnZSwKICBHaXRQdWxsUmVxdWVzdDogKCkgPT4gR2l0UHVsbFJlcXVlc3QsCiAgR2l0UHVsbFJlcXVlc3RBcnJvdzogKCkgPT4gR2l0UHVsbFJlcXVlc3RBcnJvdywKICBHaXRQdWxsUmVxdWVzdENsb3NlZDogKCkgPT4gR2l0UHVsbFJlcXVlc3RDbG9zZWQsCiAgR2l0UHVsbFJlcXVlc3RDcmVhdGU6ICgpID0+IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlLAogIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c6ICgpID0+IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3csCiAgR2l0UHVsbFJlcXVlc3REcmFmdDogKCkgPT4gR2l0UHVsbFJlcXVlc3REcmFmdCwKICBHaXRodWI6ICgpID0+IEdpdGh1YiwKICBHaXRsYWI6ICgpID0+IEdpdGxhYiwKICBHbGFzc1dhdGVyOiAoKSA9PiBHbGFzc1dhdGVyLAogIEdsYXNzZXM6ICgpID0+IEdsYXNzZXMsCiAgR2xvYmU6ICgpID0+IEdsb2JlLAogIEdsb2JlMjogKCkgPT4gRWFydGgsCiAgR2xvYmVMb2NrOiAoKSA9PiBHbG9iZUxvY2ssCiAgR29hbDogKCkgPT4gR29hbCwKICBHcHU6ICgpID0+IEdwdSwKICBHcmFiOiAoKSA9PiBIYW5kR3JhYiwKICBHcmFkdWF0aW9uQ2FwOiAoKSA9PiBHcmFkdWF0aW9uQ2FwLAogIEdyYXBlOiAoKSA9PiBHcmFwZSwKICBHcmlkOiAoKSA9PiBHcmlkM3gzLAogIEdyaWQyWDI6ICgpID0+IEdyaWQyeDIsCiAgR3JpZDJYMkNoZWNrOiAoKSA9PiBHcmlkMngyQ2hlY2ssCiAgR3JpZDJYMlBsdXM6ICgpID0+IEdyaWQyeDJQbHVzLAogIEdyaWQyWDJYOiAoKSA9PiBHcmlkMngyWCwKICBHcmlkMngyOiAoKSA9PiBHcmlkMngyLAogIEdyaWQyeDJDaGVjazogKCkgPT4gR3JpZDJ4MkNoZWNrLAogIEdyaWQyeDJQbHVzOiAoKSA9PiBHcmlkMngyUGx1cywKICBHcmlkMngyWDogKCkgPT4gR3JpZDJ4MlgsCiAgR3JpZDNYMzogKCkgPT4gR3JpZDN4MywKICBHcmlkM3gyOiAoKSA9PiBHcmlkM3gyLAogIEdyaWQzeDM6ICgpID0+IEdyaWQzeDMsCiAgR3JpcDogKCkgPT4gR3JpcCwKICBHcmlwSG9yaXpvbnRhbDogKCkgPT4gR3JpcEhvcml6b250YWwsCiAgR3JpcFZlcnRpY2FsOiAoKSA9PiBHcmlwVmVydGljYWwsCiAgR3JvdXA6ICgpID0+IEdyb3VwLAogIEd1aXRhcjogKCkgPT4gR3VpdGFyLAogIEhhbTogKCkgPT4gSGFtLAogIEhhbWJ1cmdlcjogKCkgPT4gSGFtYnVyZ2VyLAogIEhhbW1lcjogKCkgPT4gSGFtbWVyLAogIEhhbmQ6ICgpID0+IEhhbmQsCiAgSGFuZENvaW5zOiAoKSA9PiBIYW5kQ29pbnMsCiAgSGFuZEZpc3Q6ICgpID0+IEhhbmRGaXN0LAogIEhhbmRHcmFiOiAoKSA9PiBIYW5kR3JhYiwKICBIYW5kSGVhcnQ6ICgpID0+IEhhbmRIZWFydCwKICBIYW5kSGVscGluZzogKCkgPT4gSGFuZEhlbHBpbmcsCiAgSGFuZE1ldGFsOiAoKSA9PiBIYW5kTWV0YWwsCiAgSGFuZFBsYXR0ZXI6ICgpID0+IEhhbmRQbGF0dGVyLAogIEhhbmRiYWc6ICgpID0+IEhhbmRiYWcsCiAgSGFuZHNoYWtlOiAoKSA9PiBIYW5kc2hha2UsCiAgSGFyZERyaXZlOiAoKSA9PiBIYXJkRHJpdmUsCiAgSGFyZERyaXZlRG93bmxvYWQ6ICgpID0+IEhhcmREcml2ZURvd25sb2FkLAogIEhhcmREcml2ZVVwbG9hZDogKCkgPT4gSGFyZERyaXZlVXBsb2FkLAogIEhhcmRIYXQ6ICgpID0+IEhhcmRIYXQsCiAgSGFzaDogKCkgPT4gSGFzaCwKICBIYXRHbGFzc2VzOiAoKSA9PiBIYXRHbGFzc2VzLAogIEhhemU6ICgpID0+IEhhemUsCiAgSGQ6ICgpID0+IEhkLAogIEhkbWlQb3J0OiAoKSA9PiBIZG1pUG9ydCwKICBIZWFkaW5nOiAoKSA9PiBIZWFkaW5nLAogIEhlYWRpbmcxOiAoKSA9PiBIZWFkaW5nMSwKICBIZWFkaW5nMjogKCkgPT4gSGVhZGluZzIsCiAgSGVhZGluZzM6ICgpID0+IEhlYWRpbmczLAogIEhlYWRpbmc0OiAoKSA9PiBIZWFkaW5nNCwKICBIZWFkaW5nNTogKCkgPT4gSGVhZGluZzUsCiAgSGVhZGluZzY6ICgpID0+IEhlYWRpbmc2LAogIEhlYWRwaG9uZU9mZjogKCkgPT4gSGVhZHBob25lT2ZmLAogIEhlYWRwaG9uZXM6ICgpID0+IEhlYWRwaG9uZXMsCiAgSGVhZHNldDogKCkgPT4gSGVhZHNldCwKICBIZWFydDogKCkgPT4gSGVhcnQsCiAgSGVhcnRDcmFjazogKCkgPT4gSGVhcnRDcmFjaywKICBIZWFydEhhbmRzaGFrZTogKCkgPT4gSGVhcnRIYW5kc2hha2UsCiAgSGVhcnRNaW51czogKCkgPT4gSGVhcnRNaW51cywKICBIZWFydE9mZjogKCkgPT4gSGVhcnRPZmYsCiAgSGVhcnRQbHVzOiAoKSA9PiBIZWFydFBsdXMsCiAgSGVhcnRQdWxzZTogKCkgPT4gSGVhcnRQdWxzZSwKICBIZWF0ZXI6ICgpID0+IEhlYXRlciwKICBIZWxpY29wdGVyOiAoKSA9PiBIZWxpY29wdGVyLAogIEhlbHBDaXJjbGU6ICgpID0+IENpcmNsZVF1ZXN0aW9uTWFyaywKICBIZWxwaW5nSGFuZDogKCkgPT4gSGFuZEhlbHBpbmcsCiAgSGV4YWdvbjogKCkgPT4gSGV4YWdvbiwKICBIaWdobGlnaHRlcjogKCkgPT4gSGlnaGxpZ2h0ZXIsCiAgSGlzdG9yeTogKCkgPT4gSGlzdG9yeSwKICBIb21lOiAoKSA9PiBIb3VzZSwKICBIb3A6ICgpID0+IEhvcCwKICBIb3BPZmY6ICgpID0+IEhvcE9mZiwKICBIb3NwaXRhbDogKCkgPT4gSG9zcGl0YWwsCiAgSG90ZWw6ICgpID0+IEhvdGVsLAogIEhvdXJnbGFzczogKCkgPT4gSG91cmdsYXNzLAogIEhvdXNlOiAoKSA9PiBIb3VzZSwKICBIb3VzZUhlYXJ0OiAoKSA9PiBIb3VzZUhlYXJ0LAogIEhvdXNlUGx1ZzogKCkgPT4gSG91c2VQbHVnLAogIEhvdXNlUGx1czogKCkgPT4gSG91c2VQbHVzLAogIEhvdXNlV2lmaTogKCkgPT4gSG91c2VXaWZpLAogIEljZUNyZWFtOiAoKSA9PiBJY2VDcmVhbUNvbmUsCiAgSWNlQ3JlYW0yOiAoKSA9PiBJY2VDcmVhbUJvd2wsCiAgSWNlQ3JlYW1Cb3dsOiAoKSA9PiBJY2VDcmVhbUJvd2wsCiAgSWNlQ3JlYW1Db25lOiAoKSA9PiBJY2VDcmVhbUNvbmUsCiAgSWRDYXJkOiAoKSA9PiBJZENhcmQsCiAgSWRDYXJkTGFueWFyZDogKCkgPT4gSWRDYXJkTGFueWFyZCwKICBJbWFnZTogKCkgPT4gSW1hZ2UyLAogIEltYWdlRG93bjogKCkgPT4gSW1hZ2VEb3duLAogIEltYWdlTWludXM6ICgpID0+IEltYWdlTWludXMsCiAgSW1hZ2VPZmY6ICgpID0+IEltYWdlT2ZmLAogIEltYWdlUGxheTogKCkgPT4gSW1hZ2VQbGF5LAogIEltYWdlUGx1czogKCkgPT4gSW1hZ2VQbHVzLAogIEltYWdlVXA6ICgpID0+IEltYWdlVXAsCiAgSW1hZ2VVcHNjYWxlOiAoKSA9PiBJbWFnZVVwc2NhbGUsCiAgSW1hZ2VzOiAoKSA9PiBJbWFnZXMsCiAgSW1wb3J0OiAoKSA9PiBJbXBvcnQsCiAgSW5ib3g6ICgpID0+IEluYm94LAogIEluZGVudDogKCkgPT4gTGlzdEluZGVudEluY3JlYXNlLAogIEluZGVudERlY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgSW5kZW50SW5jcmVhc2U6ICgpID0+IExpc3RJbmRlbnRJbmNyZWFzZSwKICBJbmRpYW5SdXBlZTogKCkgPT4gSW5kaWFuUnVwZWUsCiAgSW5maW5pdHk6ICgpID0+IEluZmluaXR5MiwKICBJbmZvOiAoKSA9PiBJbmZvMiwKICBJbnNwZWN0OiAoKSA9PiBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgSW5zcGVjdGlvblBhbmVsOiAoKSA9PiBJbnNwZWN0aW9uUGFuZWwsCiAgSW5zdGFncmFtOiAoKSA9PiBJbnN0YWdyYW0sCiAgSXRhbGljOiAoKSA9PiBJdGFsaWMsCiAgSXRlcmF0aW9uQ2N3OiAoKSA9PiBJdGVyYXRpb25DY3csCiAgSXRlcmF0aW9uQ3c6ICgpID0+IEl0ZXJhdGlvbkN3LAogIEphcGFuZXNlWWVuOiAoKSA9PiBKYXBhbmVzZVllbiwKICBKb3lzdGljazogKCkgPT4gSm95c3RpY2ssCiAgS2FuYmFuOiAoKSA9PiBLYW5iYW4sCiAgS2FuYmFuU3F1YXJlOiAoKSA9PiBTcXVhcmVLYW5iYW4sCiAgS2FuYmFuU3F1YXJlRGFzaGVkOiAoKSA9PiBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgS2F5YWs6ICgpID0+IEtheWFrLAogIEtleTogKCkgPT4gS2V5MiwKICBLZXlSb3VuZDogKCkgPT4gS2V5Um91bmQsCiAgS2V5U3F1YXJlOiAoKSA9PiBLZXlTcXVhcmUsCiAgS2V5Ym9hcmQ6ICgpID0+IEtleWJvYXJkMiwKICBLZXlib2FyZE11c2ljOiAoKSA9PiBLZXlib2FyZE11c2ljLAogIEtleWJvYXJkT2ZmOiAoKSA9PiBLZXlib2FyZE9mZiwKICBMYW1wOiAoKSA9PiBMYW1wLAogIExhbXBDZWlsaW5nOiAoKSA9PiBMYW1wQ2VpbGluZywKICBMYW1wRGVzazogKCkgPT4gTGFtcERlc2ssCiAgTGFtcEZsb29yOiAoKSA9PiBMYW1wRmxvb3IsCiAgTGFtcFdhbGxEb3duOiAoKSA9PiBMYW1wV2FsbERvd24sCiAgTGFtcFdhbGxVcDogKCkgPT4gTGFtcFdhbGxVcCwKICBMYW5kUGxvdDogKCkgPT4gTGFuZFBsb3QsCiAgTGFuZG1hcms6ICgpID0+IExhbmRtYXJrLAogIExhbmd1YWdlczogKCkgPT4gTGFuZ3VhZ2VzLAogIExhcHRvcDogKCkgPT4gTGFwdG9wLAogIExhcHRvcDI6ICgpID0+IExhcHRvcE1pbmltYWwsCiAgTGFwdG9wTWluaW1hbDogKCkgPT4gTGFwdG9wTWluaW1hbCwKICBMYXB0b3BNaW5pbWFsQ2hlY2s6ICgpID0+IExhcHRvcE1pbmltYWxDaGVjaywKICBMYXNzbzogKCkgPT4gTGFzc28sCiAgTGFzc29TZWxlY3Q6ICgpID0+IExhc3NvU2VsZWN0LAogIExhdWdoOiAoKSA9PiBMYXVnaCwKICBMYXllcnM6ICgpID0+IExheWVyczMsCiAgTGF5ZXJzMjogKCkgPT4gTGF5ZXJzMiwKICBMYXllcnMzOiAoKSA9PiBMYXllcnMzLAogIExheWVyc1BsdXM6ICgpID0+IExheWVyc1BsdXMsCiAgTGF5b3V0OiAoKSA9PiBQYW5lbHNUb3BMZWZ0LAogIExheW91dERhc2hib2FyZDogKCkgPT4gTGF5b3V0RGFzaGJvYXJkLAogIExheW91dEdyaWQ6ICgpID0+IExheW91dEdyaWQsCiAgTGF5b3V0TGlzdDogKCkgPT4gTGF5b3V0TGlzdCwKICBMYXlvdXRQYW5lbExlZnQ6ICgpID0+IExheW91dFBhbmVsTGVmdCwKICBMYXlvdXRQYW5lbFRvcDogKCkgPT4gTGF5b3V0UGFuZWxUb3AsCiAgTGF5b3V0VGVtcGxhdGU6ICgpID0+IExheW91dFRlbXBsYXRlLAogIExlYWY6ICgpID0+IExlYWYsCiAgTGVhZnlHcmVlbjogKCkgPT4gTGVhZnlHcmVlbiwKICBMZWN0ZXJuOiAoKSA9PiBMZWN0ZXJuLAogIExldHRlclRleHQ6ICgpID0+IFRleHRJbml0aWFsLAogIExpYnJhcnk6ICgpID0+IExpYnJhcnkyLAogIExpYnJhcnlCaWc6ICgpID0+IExpYnJhcnlCaWcsCiAgTGlicmFyeVNxdWFyZTogKCkgPT4gU3F1YXJlTGlicmFyeSwKICBMaWZlQnVveTogKCkgPT4gTGlmZUJ1b3ksCiAgTGlnYXR1cmU6ICgpID0+IExpZ2F0dXJlLAogIExpZ2h0YnVsYjogKCkgPT4gTGlnaHRidWxiLAogIExpZ2h0YnVsYk9mZjogKCkgPT4gTGlnaHRidWxiT2ZmLAogIExpbmVDaGFydDogKCkgPT4gQ2hhcnRMaW5lLAogIExpbmVTcXVpZ2dsZTogKCkgPT4gTGluZVNxdWlnZ2xlLAogIExpbms6ICgpID0+IExpbmssCiAgTGluazI6ICgpID0+IExpbmsyLAogIExpbmsyT2ZmOiAoKSA9PiBMaW5rMk9mZiwKICBMaW5rZWRpbjogKCkgPT4gTGlua2VkaW4sCiAgTGlzdDogKCkgPT4gTGlzdCwKICBMaXN0Q2hlY2s6ICgpID0+IExpc3RDaGVjaywKICBMaXN0Q2hlY2tzOiAoKSA9PiBMaXN0Q2hlY2tzLAogIExpc3RDaGV2cm9uc0Rvd25VcDogKCkgPT4gTGlzdENoZXZyb25zRG93blVwLAogIExpc3RDaGV2cm9uc1VwRG93bjogKCkgPT4gTGlzdENoZXZyb25zVXBEb3duLAogIExpc3RDb2xsYXBzZTogKCkgPT4gTGlzdENvbGxhcHNlLAogIExpc3RFbmQ6ICgpID0+IExpc3RFbmQsCiAgTGlzdEZpbHRlcjogKCkgPT4gTGlzdEZpbHRlciwKICBMaXN0RmlsdGVyUGx1czogKCkgPT4gTGlzdEZpbHRlclBsdXMsCiAgTGlzdEluZGVudERlY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgTGlzdEluZGVudEluY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgTGlzdE1pbnVzOiAoKSA9PiBMaXN0TWludXMsCiAgTGlzdE11c2ljOiAoKSA9PiBMaXN0TXVzaWMsCiAgTGlzdE9yZGVyZWQ6ICgpID0+IExpc3RPcmRlcmVkLAogIExpc3RQbHVzOiAoKSA9PiBMaXN0UGx1cywKICBMaXN0UmVzdGFydDogKCkgPT4gTGlzdFJlc3RhcnQsCiAgTGlzdFN0YXJ0OiAoKSA9PiBMaXN0U3RhcnQsCiAgTGlzdFRvZG86ICgpID0+IExpc3RUb2RvLAogIExpc3RUcmVlOiAoKSA9PiBMaXN0VHJlZSwKICBMaXN0VmlkZW86ICgpID0+IExpc3RWaWRlbywKICBMaXN0WDogKCkgPT4gTGlzdFgsCiAgTG9hZGVyOiAoKSA9PiBMb2FkZXIsCiAgTG9hZGVyMjogKCkgPT4gTG9hZGVyQ2lyY2xlLAogIExvYWRlckNpcmNsZTogKCkgPT4gTG9hZGVyQ2lyY2xlLAogIExvYWRlclBpbndoZWVsOiAoKSA9PiBMb2FkZXJQaW53aGVlbCwKICBMb2NhdGU6ICgpID0+IExvY2F0ZSwKICBMb2NhdGVGaXhlZDogKCkgPT4gTG9jYXRlRml4ZWQsCiAgTG9jYXRlT2ZmOiAoKSA9PiBMb2NhdGVPZmYsCiAgTG9jYXRpb25FZGl0OiAoKSA9PiBNYXBQaW5QZW4sCiAgTG9jazogKCkgPT4gTG9jaywKICBMb2NrS2V5aG9sZTogKCkgPT4gTG9ja0tleWhvbGUsCiAgTG9ja0tleWhvbGVPcGVuOiAoKSA9PiBMb2NrS2V5aG9sZU9wZW4sCiAgTG9ja09wZW46ICgpID0+IExvY2tPcGVuLAogIExvZ0luOiAoKSA9PiBMb2dJbiwKICBMb2dPdXQ6ICgpID0+IExvZ091dCwKICBMb2dzOiAoKSA9PiBMb2dzLAogIExvbGxpcG9wOiAoKSA9PiBMb2xsaXBvcCwKICBMdWdnYWdlOiAoKSA9PiBMdWdnYWdlLAogIE1TcXVhcmU6ICgpID0+IFNxdWFyZU0sCiAgTWFnbmV0OiAoKSA9PiBNYWduZXQsCiAgTWFpbDogKCkgPT4gTWFpbCwKICBNYWlsQ2hlY2s6ICgpID0+IE1haWxDaGVjaywKICBNYWlsTWludXM6ICgpID0+IE1haWxNaW51cywKICBNYWlsT3BlbjogKCkgPT4gTWFpbE9wZW4sCiAgTWFpbFBsdXM6ICgpID0+IE1haWxQbHVzLAogIE1haWxRdWVzdGlvbjogKCkgPT4gTWFpbFF1ZXN0aW9uTWFyaywKICBNYWlsUXVlc3Rpb25NYXJrOiAoKSA9PiBNYWlsUXVlc3Rpb25NYXJrLAogIE1haWxTZWFyY2g6ICgpID0+IE1haWxTZWFyY2gsCiAgTWFpbFdhcm5pbmc6ICgpID0+IE1haWxXYXJuaW5nLAogIE1haWxYOiAoKSA9PiBNYWlsWCwKICBNYWlsYm94OiAoKSA9PiBNYWlsYm94LAogIE1haWxzOiAoKSA9PiBNYWlscywKICBNYXA6ICgpID0+IE1hcDIsCiAgTWFwTWludXM6ICgpID0+IE1hcE1pbnVzLAogIE1hcFBpbjogKCkgPT4gTWFwUGluLAogIE1hcFBpbkNoZWNrOiAoKSA9PiBNYXBQaW5DaGVjaywKICBNYXBQaW5DaGVja0luc2lkZTogKCkgPT4gTWFwUGluQ2hlY2tJbnNpZGUsCiAgTWFwUGluSG91c2U6ICgpID0+IE1hcFBpbkhvdXNlLAogIE1hcFBpbk1pbnVzOiAoKSA9PiBNYXBQaW5NaW51cywKICBNYXBQaW5NaW51c0luc2lkZTogKCkgPT4gTWFwUGluTWludXNJbnNpZGUsCiAgTWFwUGluT2ZmOiAoKSA9PiBNYXBQaW5PZmYsCiAgTWFwUGluUGVuOiAoKSA9PiBNYXBQaW5QZW4sCiAgTWFwUGluUGx1czogKCkgPT4gTWFwUGluUGx1cywKICBNYXBQaW5QbHVzSW5zaWRlOiAoKSA9PiBNYXBQaW5QbHVzSW5zaWRlLAogIE1hcFBpblg6ICgpID0+IE1hcFBpblgsCiAgTWFwUGluWEluc2lkZTogKCkgPT4gTWFwUGluWEluc2lkZSwKICBNYXBQaW5uZWQ6ICgpID0+IE1hcFBpbm5lZCwKICBNYXBQbHVzOiAoKSA9PiBNYXBQbHVzLAogIE1hcnM6ICgpID0+IE1hcnMsCiAgTWFyc1N0cm9rZTogKCkgPT4gTWFyc1N0cm9rZSwKICBNYXJ0aW5pOiAoKSA9PiBNYXJ0aW5pLAogIE1heGltaXplOiAoKSA9PiBNYXhpbWl6ZSwKICBNYXhpbWl6ZTI6ICgpID0+IE1heGltaXplMiwKICBNZWRhbDogKCkgPT4gTWVkYWwsCiAgTWVnYXBob25lOiAoKSA9PiBNZWdhcGhvbmUsCiAgTWVnYXBob25lT2ZmOiAoKSA9PiBNZWdhcGhvbmVPZmYsCiAgTWVoOiAoKSA9PiBNZWgsCiAgTWVtb3J5U3RpY2s6ICgpID0+IE1lbW9yeVN0aWNrLAogIE1lbnU6ICgpID0+IE1lbnUsCiAgTWVudVNxdWFyZTogKCkgPT4gU3F1YXJlTWVudSwKICBNZXJnZTogKCkgPT4gTWVyZ2UsCiAgTWVzc2FnZUNpcmNsZTogKCkgPT4gTWVzc2FnZUNpcmNsZSwKICBNZXNzYWdlQ2lyY2xlQ29kZTogKCkgPT4gTWVzc2FnZUNpcmNsZUNvZGUsCiAgTWVzc2FnZUNpcmNsZURhc2hlZDogKCkgPT4gTWVzc2FnZUNpcmNsZURhc2hlZCwKICBNZXNzYWdlQ2lyY2xlSGVhcnQ6ICgpID0+IE1lc3NhZ2VDaXJjbGVIZWFydCwKICBNZXNzYWdlQ2lyY2xlTW9yZTogKCkgPT4gTWVzc2FnZUNpcmNsZU1vcmUsCiAgTWVzc2FnZUNpcmNsZU9mZjogKCkgPT4gTWVzc2FnZUNpcmNsZU9mZiwKICBNZXNzYWdlQ2lyY2xlUGx1czogKCkgPT4gTWVzc2FnZUNpcmNsZVBsdXMsCiAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uOiAoKSA9PiBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms6ICgpID0+IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgTWVzc2FnZUNpcmNsZVJlcGx5OiAoKSA9PiBNZXNzYWdlQ2lyY2xlUmVwbHksCiAgTWVzc2FnZUNpcmNsZVdhcm5pbmc6ICgpID0+IE1lc3NhZ2VDaXJjbGVXYXJuaW5nLAogIE1lc3NhZ2VDaXJjbGVYOiAoKSA9PiBNZXNzYWdlQ2lyY2xlWCwKICBNZXNzYWdlU3F1YXJlOiAoKSA9PiBNZXNzYWdlU3F1YXJlLAogIE1lc3NhZ2VTcXVhcmVDb2RlOiAoKSA9PiBNZXNzYWdlU3F1YXJlQ29kZSwKICBNZXNzYWdlU3F1YXJlRGFzaGVkOiAoKSA9PiBNZXNzYWdlU3F1YXJlRGFzaGVkLAogIE1lc3NhZ2VTcXVhcmVEaWZmOiAoKSA9PiBNZXNzYWdlU3F1YXJlRGlmZiwKICBNZXNzYWdlU3F1YXJlRG90OiAoKSA9PiBNZXNzYWdlU3F1YXJlRG90LAogIE1lc3NhZ2VTcXVhcmVIZWFydDogKCkgPT4gTWVzc2FnZVNxdWFyZUhlYXJ0LAogIE1lc3NhZ2VTcXVhcmVMb2NrOiAoKSA9PiBNZXNzYWdlU3F1YXJlTG9jaywKICBNZXNzYWdlU3F1YXJlTW9yZTogKCkgPT4gTWVzc2FnZVNxdWFyZU1vcmUsCiAgTWVzc2FnZVNxdWFyZU9mZjogKCkgPT4gTWVzc2FnZVNxdWFyZU9mZiwKICBNZXNzYWdlU3F1YXJlUGx1czogKCkgPT4gTWVzc2FnZVNxdWFyZVBsdXMsCiAgTWVzc2FnZVNxdWFyZVF1b3RlOiAoKSA9PiBNZXNzYWdlU3F1YXJlUXVvdGUsCiAgTWVzc2FnZVNxdWFyZVJlcGx5OiAoKSA9PiBNZXNzYWdlU3F1YXJlUmVwbHksCiAgTWVzc2FnZVNxdWFyZVNoYXJlOiAoKSA9PiBNZXNzYWdlU3F1YXJlU2hhcmUsCiAgTWVzc2FnZVNxdWFyZVRleHQ6ICgpID0+IE1lc3NhZ2VTcXVhcmVUZXh0LAogIE1lc3NhZ2VTcXVhcmVXYXJuaW5nOiAoKSA9PiBNZXNzYWdlU3F1YXJlV2FybmluZywKICBNZXNzYWdlU3F1YXJlWDogKCkgPT4gTWVzc2FnZVNxdWFyZVgsCiAgTWVzc2FnZXNTcXVhcmU6ICgpID0+IE1lc3NhZ2VzU3F1YXJlLAogIE1pYzogKCkgPT4gTWljLAogIE1pYzI6ICgpID0+IE1pY1ZvY2FsLAogIE1pY09mZjogKCkgPT4gTWljT2ZmLAogIE1pY1ZvY2FsOiAoKSA9PiBNaWNWb2NhbCwKICBNaWNyb2NoaXA6ICgpID0+IE1pY3JvY2hpcCwKICBNaWNyb3Njb3BlOiAoKSA9PiBNaWNyb3Njb3BlLAogIE1pY3Jvd2F2ZTogKCkgPT4gTWljcm93YXZlLAogIE1pbGVzdG9uZTogKCkgPT4gTWlsZXN0b25lLAogIE1pbGs6ICgpID0+IE1pbGssCiAgTWlsa09mZjogKCkgPT4gTWlsa09mZiwKICBNaW5pbWl6ZTogKCkgPT4gTWluaW1pemUsCiAgTWluaW1pemUyOiAoKSA9PiBNaW5pbWl6ZTIsCiAgTWludXM6ICgpID0+IE1pbnVzLAogIE1pbnVzQ2lyY2xlOiAoKSA9PiBDaXJjbGVNaW51cywKICBNaW51c1NxdWFyZTogKCkgPT4gU3F1YXJlTWludXMsCiAgTW9uaXRvcjogKCkgPT4gTW9uaXRvciwKICBNb25pdG9yQ2hlY2s6ICgpID0+IE1vbml0b3JDaGVjaywKICBNb25pdG9yQ2xvdWQ6ICgpID0+IE1vbml0b3JDbG91ZCwKICBNb25pdG9yQ29nOiAoKSA9PiBNb25pdG9yQ29nLAogIE1vbml0b3JEb3Q6ICgpID0+IE1vbml0b3JEb3QsCiAgTW9uaXRvckRvd246ICgpID0+IE1vbml0b3JEb3duLAogIE1vbml0b3JPZmY6ICgpID0+IE1vbml0b3JPZmYsCiAgTW9uaXRvclBhdXNlOiAoKSA9PiBNb25pdG9yUGF1c2UsCiAgTW9uaXRvclBsYXk6ICgpID0+IE1vbml0b3JQbGF5LAogIE1vbml0b3JTbWFydHBob25lOiAoKSA9PiBNb25pdG9yU21hcnRwaG9uZSwKICBNb25pdG9yU3BlYWtlcjogKCkgPT4gTW9uaXRvclNwZWFrZXIsCiAgTW9uaXRvclN0b3A6ICgpID0+IE1vbml0b3JTdG9wLAogIE1vbml0b3JVcDogKCkgPT4gTW9uaXRvclVwLAogIE1vbml0b3JYOiAoKSA9PiBNb25pdG9yWCwKICBNb29uOiAoKSA9PiBNb29uLAogIE1vb25TdGFyOiAoKSA9PiBNb29uU3RhciwKICBNb3JlSG9yaXpvbnRhbDogKCkgPT4gRWxsaXBzaXMsCiAgTW9yZVZlcnRpY2FsOiAoKSA9PiBFbGxpcHNpc1ZlcnRpY2FsLAogIE1vdG9yYmlrZTogKCkgPT4gTW90b3JiaWtlLAogIE1vdW50YWluOiAoKSA9PiBNb3VudGFpbiwKICBNb3VudGFpblNub3c6ICgpID0+IE1vdW50YWluU25vdywKICBNb3VzZTogKCkgPT4gTW91c2UsCiAgTW91c2VPZmY6ICgpID0+IE1vdXNlT2ZmLAogIE1vdXNlUG9pbnRlcjogKCkgPT4gTW91c2VQb2ludGVyLAogIE1vdXNlUG9pbnRlcjI6ICgpID0+IE1vdXNlUG9pbnRlcjIsCiAgTW91c2VQb2ludGVyMk9mZjogKCkgPT4gTW91c2VQb2ludGVyMk9mZiwKICBNb3VzZVBvaW50ZXJCYW46ICgpID0+IE1vdXNlUG9pbnRlckJhbiwKICBNb3VzZVBvaW50ZXJDbGljazogKCkgPT4gTW91c2VQb2ludGVyQ2xpY2ssCiAgTW91c2VQb2ludGVyU3F1YXJlRGFzaGVkOiAoKSA9PiBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgTW92ZTogKCkgPT4gTW92ZSwKICBNb3ZlM0Q6ICgpID0+IE1vdmUzZCwKICBNb3ZlM2Q6ICgpID0+IE1vdmUzZCwKICBNb3ZlRGlhZ29uYWw6ICgpID0+IE1vdmVEaWFnb25hbCwKICBNb3ZlRGlhZ29uYWwyOiAoKSA9PiBNb3ZlRGlhZ29uYWwyLAogIE1vdmVEb3duOiAoKSA9PiBNb3ZlRG93biwKICBNb3ZlRG93bkxlZnQ6ICgpID0+IE1vdmVEb3duTGVmdCwKICBNb3ZlRG93blJpZ2h0OiAoKSA9PiBNb3ZlRG93blJpZ2h0LAogIE1vdmVIb3Jpem9udGFsOiAoKSA9PiBNb3ZlSG9yaXpvbnRhbCwKICBNb3ZlTGVmdDogKCkgPT4gTW92ZUxlZnQsCiAgTW92ZVJpZ2h0OiAoKSA9PiBNb3ZlUmlnaHQsCiAgTW92ZVVwOiAoKSA9PiBNb3ZlVXAsCiAgTW92ZVVwTGVmdDogKCkgPT4gTW92ZVVwTGVmdCwKICBNb3ZlVXBSaWdodDogKCkgPT4gTW92ZVVwUmlnaHQsCiAgTW92ZVZlcnRpY2FsOiAoKSA9PiBNb3ZlVmVydGljYWwsCiAgTXVzaWM6ICgpID0+IE11c2ljLAogIE11c2ljMjogKCkgPT4gTXVzaWMyLAogIE11c2ljMzogKCkgPT4gTXVzaWMzLAogIE11c2ljNDogKCkgPT4gTXVzaWM0LAogIE5hdmlnYXRpb246ICgpID0+IE5hdmlnYXRpb24sCiAgTmF2aWdhdGlvbjI6ICgpID0+IE5hdmlnYXRpb24yLAogIE5hdmlnYXRpb24yT2ZmOiAoKSA9PiBOYXZpZ2F0aW9uMk9mZiwKICBOYXZpZ2F0aW9uT2ZmOiAoKSA9PiBOYXZpZ2F0aW9uT2ZmLAogIE5ldHdvcms6ICgpID0+IE5ldHdvcmssCiAgTmV3c3BhcGVyOiAoKSA9PiBOZXdzcGFwZXIsCiAgTmZjOiAoKSA9PiBOZmMsCiAgTm9uQmluYXJ5OiAoKSA9PiBOb25CaW5hcnksCiAgTm90ZWJvb2s6ICgpID0+IE5vdGVib29rLAogIE5vdGVib29rUGVuOiAoKSA9PiBOb3RlYm9va1BlbiwKICBOb3RlYm9va1RhYnM6ICgpID0+IE5vdGVib29rVGFicywKICBOb3RlYm9va1RleHQ6ICgpID0+IE5vdGVib29rVGV4dCwKICBOb3RlcGFkVGV4dDogKCkgPT4gTm90ZXBhZFRleHQsCiAgTm90ZXBhZFRleHREYXNoZWQ6ICgpID0+IE5vdGVwYWRUZXh0RGFzaGVkLAogIE51dDogKCkgPT4gTnV0LAogIE51dE9mZjogKCkgPT4gTnV0T2ZmLAogIE9jdGFnb246ICgpID0+IE9jdGFnb24sCiAgT2N0YWdvbkFsZXJ0OiAoKSA9PiBPY3RhZ29uQWxlcnQsCiAgT2N0YWdvbk1pbnVzOiAoKSA9PiBPY3RhZ29uTWludXMsCiAgT2N0YWdvblBhdXNlOiAoKSA9PiBPY3RhZ29uUGF1c2UsCiAgT2N0YWdvblg6ICgpID0+IE9jdGFnb25YLAogIE9tZWdhOiAoKSA9PiBPbWVnYSwKICBPcHRpb246ICgpID0+IE9wdGlvbiwKICBPcmJpdDogKCkgPT4gT3JiaXQsCiAgT3JpZ2FtaTogKCkgPT4gT3JpZ2FtaSwKICBPdXRkZW50OiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgUGFja2FnZTogKCkgPT4gUGFja2FnZSwKICBQYWNrYWdlMjogKCkgPT4gUGFja2FnZTIsCiAgUGFja2FnZUNoZWNrOiAoKSA9PiBQYWNrYWdlQ2hlY2ssCiAgUGFja2FnZU1pbnVzOiAoKSA9PiBQYWNrYWdlTWludXMsCiAgUGFja2FnZU9wZW46ICgpID0+IFBhY2thZ2VPcGVuLAogIFBhY2thZ2VQbHVzOiAoKSA9PiBQYWNrYWdlUGx1cywKICBQYWNrYWdlU2VhcmNoOiAoKSA9PiBQYWNrYWdlU2VhcmNoLAogIFBhY2thZ2VYOiAoKSA9PiBQYWNrYWdlWCwKICBQYWludEJ1Y2tldDogKCkgPT4gUGFpbnRCdWNrZXQsCiAgUGFpbnRSb2xsZXI6ICgpID0+IFBhaW50Um9sbGVyLAogIFBhaW50YnJ1c2g6ICgpID0+IFBhaW50YnJ1c2gsCiAgUGFpbnRicnVzaDI6ICgpID0+IFBhaW50YnJ1c2hWZXJ0aWNhbCwKICBQYWludGJydXNoVmVydGljYWw6ICgpID0+IFBhaW50YnJ1c2hWZXJ0aWNhbCwKICBQYWxldHRlOiAoKSA9PiBQYWxldHRlLAogIFBhbG10cmVlOiAoKSA9PiBUcmVlUGFsbSwKICBQYW5kYTogKCkgPT4gUGFuZGEsCiAgUGFuZWxCb3R0b206ICgpID0+IFBhbmVsQm90dG9tLAogIFBhbmVsQm90dG9tQ2xvc2U6ICgpID0+IFBhbmVsQm90dG9tQ2xvc2UsCiAgUGFuZWxCb3R0b21EYXNoZWQ6ICgpID0+IFBhbmVsQm90dG9tRGFzaGVkLAogIFBhbmVsQm90dG9tSW5hY3RpdmU6ICgpID0+IFBhbmVsQm90dG9tRGFzaGVkLAogIFBhbmVsQm90dG9tT3BlbjogKCkgPT4gUGFuZWxCb3R0b21PcGVuLAogIFBhbmVsTGVmdDogKCkgPT4gUGFuZWxMZWZ0LAogIFBhbmVsTGVmdENsb3NlOiAoKSA9PiBQYW5lbExlZnRDbG9zZSwKICBQYW5lbExlZnREYXNoZWQ6ICgpID0+IFBhbmVsTGVmdERhc2hlZCwKICBQYW5lbExlZnRJbmFjdGl2ZTogKCkgPT4gUGFuZWxMZWZ0RGFzaGVkLAogIFBhbmVsTGVmdE9wZW46ICgpID0+IFBhbmVsTGVmdE9wZW4sCiAgUGFuZWxMZWZ0UmlnaHREYXNoZWQ6ICgpID0+IFBhbmVsTGVmdFJpZ2h0RGFzaGVkLAogIFBhbmVsUmlnaHQ6ICgpID0+IFBhbmVsUmlnaHQsCiAgUGFuZWxSaWdodENsb3NlOiAoKSA9PiBQYW5lbFJpZ2h0Q2xvc2UsCiAgUGFuZWxSaWdodERhc2hlZDogKCkgPT4gUGFuZWxSaWdodERhc2hlZCwKICBQYW5lbFJpZ2h0SW5hY3RpdmU6ICgpID0+IFBhbmVsUmlnaHREYXNoZWQsCiAgUGFuZWxSaWdodE9wZW46ICgpID0+IFBhbmVsUmlnaHRPcGVuLAogIFBhbmVsVG9wOiAoKSA9PiBQYW5lbFRvcCwKICBQYW5lbFRvcEJvdHRvbURhc2hlZDogKCkgPT4gUGFuZWxUb3BCb3R0b21EYXNoZWQsCiAgUGFuZWxUb3BDbG9zZTogKCkgPT4gUGFuZWxUb3BDbG9zZSwKICBQYW5lbFRvcERhc2hlZDogKCkgPT4gUGFuZWxUb3BEYXNoZWQsCiAgUGFuZWxUb3BJbmFjdGl2ZTogKCkgPT4gUGFuZWxUb3BEYXNoZWQsCiAgUGFuZWxUb3BPcGVuOiAoKSA9PiBQYW5lbFRvcE9wZW4sCiAgUGFuZWxzTGVmdEJvdHRvbTogKCkgPT4gUGFuZWxzTGVmdEJvdHRvbSwKICBQYW5lbHNMZWZ0UmlnaHQ6ICgpID0+IENvbHVtbnMzLAogIFBhbmVsc1JpZ2h0Qm90dG9tOiAoKSA9PiBQYW5lbHNSaWdodEJvdHRvbSwKICBQYW5lbHNUb3BCb3R0b206ICgpID0+IFJvd3MzLAogIFBhbmVsc1RvcExlZnQ6ICgpID0+IFBhbmVsc1RvcExlZnQsCiAgUGFwZXJjbGlwOiAoKSA9PiBQYXBlcmNsaXAsCiAgUGFyZW50aGVzZXM6ICgpID0+IFBhcmVudGhlc2VzLAogIFBhcmtpbmdDaXJjbGU6ICgpID0+IENpcmNsZVBhcmtpbmcsCiAgUGFya2luZ0NpcmNsZU9mZjogKCkgPT4gQ2lyY2xlUGFya2luZ09mZiwKICBQYXJraW5nTWV0ZXI6ICgpID0+IFBhcmtpbmdNZXRlciwKICBQYXJraW5nU3F1YXJlOiAoKSA9PiBTcXVhcmVQYXJraW5nLAogIFBhcmtpbmdTcXVhcmVPZmY6ICgpID0+IFNxdWFyZVBhcmtpbmdPZmYsCiAgUGFydHlQb3BwZXI6ICgpID0+IFBhcnR5UG9wcGVyLAogIFBhdXNlOiAoKSA9PiBQYXVzZSwKICBQYXVzZUNpcmNsZTogKCkgPT4gQ2lyY2xlUGF1c2UsCiAgUGF1c2VPY3RhZ29uOiAoKSA9PiBPY3RhZ29uUGF1c2UsCiAgUGF3UHJpbnQ6ICgpID0+IFBhd1ByaW50LAogIFBjQ2FzZTogKCkgPT4gUGNDYXNlLAogIFBlbjogKCkgPT4gUGVuLAogIFBlbkJveDogKCkgPT4gU3F1YXJlUGVuLAogIFBlbkxpbmU6ICgpID0+IFBlbkxpbmUsCiAgUGVuT2ZmOiAoKSA9PiBQZW5PZmYsCiAgUGVuU3F1YXJlOiAoKSA9PiBTcXVhcmVQZW4sCiAgUGVuVG9vbDogKCkgPT4gUGVuVG9vbCwKICBQZW5jaWw6ICgpID0+IFBlbmNpbCwKICBQZW5jaWxMaW5lOiAoKSA9PiBQZW5jaWxMaW5lLAogIFBlbmNpbE9mZjogKCkgPT4gUGVuY2lsT2ZmLAogIFBlbmNpbFJ1bGVyOiAoKSA9PiBQZW5jaWxSdWxlciwKICBQZW50YWdvbjogKCkgPT4gUGVudGFnb24sCiAgUGVyY2VudDogKCkgPT4gUGVyY2VudCwKICBQZXJjZW50Q2lyY2xlOiAoKSA9PiBDaXJjbGVQZXJjZW50LAogIFBlcmNlbnREaWFtb25kOiAoKSA9PiBEaWFtb25kUGVyY2VudCwKICBQZXJjZW50U3F1YXJlOiAoKSA9PiBTcXVhcmVQZXJjZW50LAogIFBlcnNvblN0YW5kaW5nOiAoKSA9PiBQZXJzb25TdGFuZGluZywKICBQaGlsaXBwaW5lUGVzbzogKCkgPT4gUGhpbGlwcGluZVBlc28sCiAgUGhvbmU6ICgpID0+IFBob25lLAogIFBob25lQ2FsbDogKCkgPT4gUGhvbmVDYWxsLAogIFBob25lRm9yd2FyZGVkOiAoKSA9PiBQaG9uZUZvcndhcmRlZCwKICBQaG9uZUluY29taW5nOiAoKSA9PiBQaG9uZUluY29taW5nLAogIFBob25lTWlzc2VkOiAoKSA9PiBQaG9uZU1pc3NlZCwKICBQaG9uZU9mZjogKCkgPT4gUGhvbmVPZmYsCiAgUGhvbmVPdXRnb2luZzogKCkgPT4gUGhvbmVPdXRnb2luZywKICBQaTogKCkgPT4gUGksCiAgUGlTcXVhcmU6ICgpID0+IFNxdWFyZVBpLAogIFBpYW5vOiAoKSA9PiBQaWFubywKICBQaWNrYXhlOiAoKSA9PiBQaWNrYXhlLAogIFBpY3R1cmVJblBpY3R1cmU6ICgpID0+IFBpY3R1cmVJblBpY3R1cmUsCiAgUGljdHVyZUluUGljdHVyZTI6ICgpID0+IFBpY3R1cmVJblBpY3R1cmUyLAogIFBpZUNoYXJ0OiAoKSA9PiBDaGFydFBpZSwKICBQaWdneUJhbms6ICgpID0+IFBpZ2d5QmFuaywKICBQaWxjcm93OiAoKSA9PiBQaWxjcm93LAogIFBpbGNyb3dMZWZ0OiAoKSA9PiBQaWxjcm93TGVmdCwKICBQaWxjcm93UmlnaHQ6ICgpID0+IFBpbGNyb3dSaWdodCwKICBQaWxjcm93U3F1YXJlOiAoKSA9PiBTcXVhcmVQaWxjcm93LAogIFBpbGw6ICgpID0+IFBpbGwsCiAgUGlsbEJvdHRsZTogKCkgPT4gUGlsbEJvdHRsZSwKICBQaW46ICgpID0+IFBpbiwKICBQaW5PZmY6ICgpID0+IFBpbk9mZiwKICBQaXBldHRlOiAoKSA9PiBQaXBldHRlLAogIFBpenphOiAoKSA9PiBQaXp6YSwKICBQbGFuZTogKCkgPT4gUGxhbmUsCiAgUGxhbmVMYW5kaW5nOiAoKSA9PiBQbGFuZUxhbmRpbmcsCiAgUGxhbmVUYWtlb2ZmOiAoKSA9PiBQbGFuZVRha2VvZmYsCiAgUGxheTogKCkgPT4gUGxheSwKICBQbGF5Q2lyY2xlOiAoKSA9PiBDaXJjbGVQbGF5LAogIFBsYXlTcXVhcmU6ICgpID0+IFNxdWFyZVBsYXksCiAgUGx1ZzogKCkgPT4gUGx1ZywKICBQbHVnMjogKCkgPT4gUGx1ZzIsCiAgUGx1Z1phcDogKCkgPT4gUGx1Z1phcCwKICBQbHVnWmFwMjogKCkgPT4gUGx1Z1phcCwKICBQbHVzOiAoKSA9PiBQbHVzLAogIFBsdXNDaXJjbGU6ICgpID0+IENpcmNsZVBsdXMsCiAgUGx1c1NxdWFyZTogKCkgPT4gU3F1YXJlUGx1cywKICBQb2NrZXQ6ICgpID0+IFBvY2tldCwKICBQb2NrZXRLbmlmZTogKCkgPT4gUG9ja2V0S25pZmUsCiAgUG9kY2FzdDogKCkgPT4gUG9kY2FzdCwKICBQb2ludGVyOiAoKSA9PiBQb2ludGVyLAogIFBvaW50ZXJPZmY6ICgpID0+IFBvaW50ZXJPZmYsCiAgUG9wY29ybjogKCkgPT4gUG9wY29ybiwKICBQb3BzaWNsZTogKCkgPT4gUG9wc2ljbGUsCiAgUG91bmRTdGVybGluZzogKCkgPT4gUG91bmRTdGVybGluZywKICBQb3dlcjogKCkgPT4gUG93ZXIsCiAgUG93ZXJDaXJjbGU6ICgpID0+IENpcmNsZVBvd2VyLAogIFBvd2VyT2ZmOiAoKSA9PiBQb3dlck9mZiwKICBQb3dlclNxdWFyZTogKCkgPT4gU3F1YXJlUG93ZXIsCiAgUHJlc2VudGF0aW9uOiAoKSA9PiBQcmVzZW50YXRpb24sCiAgUHJpbnRlcjogKCkgPT4gUHJpbnRlciwKICBQcmludGVyQ2hlY2s6ICgpID0+IFByaW50ZXJDaGVjaywKICBQcm9qZWN0b3I6ICgpID0+IFByb2plY3RvciwKICBQcm9wb3J0aW9uczogKCkgPT4gUHJvcG9ydGlvbnMsCiAgUHV6emxlOiAoKSA9PiBQdXp6bGUsCiAgUHlyYW1pZDogKCkgPT4gUHlyYW1pZCwKICBRckNvZGU6ICgpID0+IFFyQ29kZSwKICBRdW90ZTogKCkgPT4gUXVvdGUsCiAgUmFiYml0OiAoKSA9PiBSYWJiaXQsCiAgUmFkYXI6ICgpID0+IFJhZGFyLAogIFJhZGlhdGlvbjogKCkgPT4gUmFkaWF0aW9uLAogIFJhZGljYWw6ICgpID0+IFJhZGljYWwsCiAgUmFkaW86ICgpID0+IFJhZGlvLAogIFJhZGlvUmVjZWl2ZXI6ICgpID0+IFJhZGlvUmVjZWl2ZXIsCiAgUmFkaW9Ub3dlcjogKCkgPT4gUmFkaW9Ub3dlciwKICBSYWRpdXM6ICgpID0+IFJhZGl1cywKICBSYWlsU3ltYm9sOiAoKSA9PiBSYWlsU3ltYm9sLAogIFJhaW5ib3c6ICgpID0+IFJhaW5ib3csCiAgUmF0OiAoKSA9PiBSYXQsCiAgUmF0aW86ICgpID0+IFJhdGlvLAogIFJlY2VpcHQ6ICgpID0+IFJlY2VpcHQsCiAgUmVjZWlwdENlbnQ6ICgpID0+IFJlY2VpcHRDZW50LAogIFJlY2VpcHRFdXJvOiAoKSA9PiBSZWNlaXB0RXVybywKICBSZWNlaXB0SW5kaWFuUnVwZWU6ICgpID0+IFJlY2VpcHRJbmRpYW5SdXBlZSwKICBSZWNlaXB0SmFwYW5lc2VZZW46ICgpID0+IFJlY2VpcHRKYXBhbmVzZVllbiwKICBSZWNlaXB0UG91bmRTdGVybGluZzogKCkgPT4gUmVjZWlwdFBvdW5kU3RlcmxpbmcsCiAgUmVjZWlwdFJ1c3NpYW5SdWJsZTogKCkgPT4gUmVjZWlwdFJ1c3NpYW5SdWJsZSwKICBSZWNlaXB0U3dpc3NGcmFuYzogKCkgPT4gUmVjZWlwdFN3aXNzRnJhbmMsCiAgUmVjZWlwdFRleHQ6ICgpID0+IFJlY2VpcHRUZXh0LAogIFJlY2VpcHRUdXJraXNoTGlyYTogKCkgPT4gUmVjZWlwdFR1cmtpc2hMaXJhLAogIFJlY3RhbmdsZUNpcmNsZTogKCkgPT4gUmVjdGFuZ2xlQ2lyY2xlLAogIFJlY3RhbmdsZUVsbGlwc2lzOiAoKSA9PiBSZWN0YW5nbGVFbGxpcHNpcywKICBSZWN0YW5nbGVHb2dnbGVzOiAoKSA9PiBSZWN0YW5nbGVHb2dnbGVzLAogIFJlY3RhbmdsZUhvcml6b250YWw6ICgpID0+IFJlY3RhbmdsZUhvcml6b250YWwsCiAgUmVjdGFuZ2xlVmVydGljYWw6ICgpID0+IFJlY3RhbmdsZVZlcnRpY2FsLAogIFJlY3ljbGU6ICgpID0+IFJlY3ljbGUsCiAgUmVkbzogKCkgPT4gUmVkbywKICBSZWRvMjogKCkgPT4gUmVkbzIsCiAgUmVkb0RvdDogKCkgPT4gUmVkb0RvdCwKICBSZWZyZXNoQ2N3OiAoKSA9PiBSZWZyZXNoQ2N3LAogIFJlZnJlc2hDY3dEb3Q6ICgpID0+IFJlZnJlc2hDY3dEb3QsCiAgUmVmcmVzaEN3OiAoKSA9PiBSZWZyZXNoQ3csCiAgUmVmcmVzaEN3T2ZmOiAoKSA9PiBSZWZyZXNoQ3dPZmYsCiAgUmVmcmlnZXJhdG9yOiAoKSA9PiBSZWZyaWdlcmF0b3IsCiAgUmVnZXg6ICgpID0+IFJlZ2V4LAogIFJlbW92ZUZvcm1hdHRpbmc6ICgpID0+IFJlbW92ZUZvcm1hdHRpbmcsCiAgUmVwZWF0OiAoKSA9PiBSZXBlYXQsCiAgUmVwZWF0MTogKCkgPT4gUmVwZWF0MSwKICBSZXBlYXQyOiAoKSA9PiBSZXBlYXQyLAogIFJlcGxhY2U6ICgpID0+IFJlcGxhY2UsCiAgUmVwbGFjZUFsbDogKCkgPT4gUmVwbGFjZUFsbCwKICBSZXBseTogKCkgPT4gUmVwbHksCiAgUmVwbHlBbGw6ICgpID0+IFJlcGx5QWxsLAogIFJld2luZDogKCkgPT4gUmV3aW5kLAogIFJpYmJvbjogKCkgPT4gUmliYm9uLAogIFJvY2tldDogKCkgPT4gUm9ja2V0LAogIFJvY2tpbmdDaGFpcjogKCkgPT4gUm9ja2luZ0NoYWlyLAogIFJvbGxlckNvYXN0ZXI6ICgpID0+IFJvbGxlckNvYXN0ZXIsCiAgUm9zZTogKCkgPT4gUm9zZSwKICBSb3RhdGUzRDogKCkgPT4gUm90YXRlM2QsCiAgUm90YXRlM2Q6ICgpID0+IFJvdGF0ZTNkLAogIFJvdGF0ZUNjdzogKCkgPT4gUm90YXRlQ2N3LAogIFJvdGF0ZUNjd0tleTogKCkgPT4gUm90YXRlQ2N3S2V5LAogIFJvdGF0ZUNjd1NxdWFyZTogKCkgPT4gUm90YXRlQ2N3U3F1YXJlLAogIFJvdGF0ZUN3OiAoKSA9PiBSb3RhdGVDdywKICBSb3RhdGVDd1NxdWFyZTogKCkgPT4gUm90YXRlQ3dTcXVhcmUsCiAgUm91dGU6ICgpID0+IFJvdXRlLAogIFJvdXRlT2ZmOiAoKSA9PiBSb3V0ZU9mZiwKICBSb3V0ZXI6ICgpID0+IFJvdXRlciwKICBSb3dzOiAoKSA9PiBSb3dzMiwKICBSb3dzMjogKCkgPT4gUm93czIsCiAgUm93czM6ICgpID0+IFJvd3MzLAogIFJvd3M0OiAoKSA9PiBSb3dzNCwKICBSc3M6ICgpID0+IFJzcywKICBSdWxlcjogKCkgPT4gUnVsZXIsCiAgUnVsZXJEaW1lbnNpb25MaW5lOiAoKSA9PiBSdWxlckRpbWVuc2lvbkxpbmUsCiAgUnVzc2lhblJ1YmxlOiAoKSA9PiBSdXNzaWFuUnVibGUsCiAgU2FpbGJvYXQ6ICgpID0+IFNhaWxib2F0LAogIFNhbGFkOiAoKSA9PiBTYWxhZCwKICBTYW5kd2ljaDogKCkgPT4gU2FuZHdpY2gsCiAgU2F0ZWxsaXRlOiAoKSA9PiBTYXRlbGxpdGUsCiAgU2F0ZWxsaXRlRGlzaDogKCkgPT4gU2F0ZWxsaXRlRGlzaCwKICBTYXVkaVJpeWFsOiAoKSA9PiBTYXVkaVJpeWFsLAogIFNhdmU6ICgpID0+IFNhdmUsCiAgU2F2ZUFsbDogKCkgPT4gU2F2ZUFsbCwKICBTYXZlT2ZmOiAoKSA9PiBTYXZlT2ZmLAogIFNjYWxlOiAoKSA9PiBTY2FsZSwKICBTY2FsZTNEOiAoKSA9PiBTY2FsZTNkLAogIFNjYWxlM2Q6ICgpID0+IFNjYWxlM2QsCiAgU2NhbGluZzogKCkgPT4gU2NhbGluZywKICBTY2FuOiAoKSA9PiBTY2FuLAogIFNjYW5CYXJjb2RlOiAoKSA9PiBTY2FuQmFyY29kZSwKICBTY2FuRXllOiAoKSA9PiBTY2FuRXllLAogIFNjYW5GYWNlOiAoKSA9PiBTY2FuRmFjZSwKICBTY2FuSGVhcnQ6ICgpID0+IFNjYW5IZWFydCwKICBTY2FuTGluZTogKCkgPT4gU2NhbkxpbmUsCiAgU2NhblFyQ29kZTogKCkgPT4gU2NhblFyQ29kZSwKICBTY2FuU2VhcmNoOiAoKSA9PiBTY2FuU2VhcmNoLAogIFNjYW5UZXh0OiAoKSA9PiBTY2FuVGV4dCwKICBTY2F0dGVyQ2hhcnQ6ICgpID0+IENoYXJ0U2NhdHRlciwKICBTY2hvb2w6ICgpID0+IFNjaG9vbCwKICBTY2hvb2wyOiAoKSA9PiBVbml2ZXJzaXR5LAogIFNjaXNzb3JzOiAoKSA9PiBTY2lzc29ycywKICBTY2lzc29yc0xpbmVEYXNoZWQ6ICgpID0+IFNjaXNzb3JzTGluZURhc2hlZCwKICBTY2lzc29yc1NxdWFyZTogKCkgPT4gU3F1YXJlU2Npc3NvcnMsCiAgU2Npc3NvcnNTcXVhcmVEYXNoZWRCb3R0b206ICgpID0+IFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzLAogIFNjb290ZXI6ICgpID0+IFNjb290ZXIsCiAgU2NyZWVuU2hhcmU6ICgpID0+IFNjcmVlblNoYXJlLAogIFNjcmVlblNoYXJlT2ZmOiAoKSA9PiBTY3JlZW5TaGFyZU9mZiwKICBTY3JvbGw6ICgpID0+IFNjcm9sbCwKICBTY3JvbGxUZXh0OiAoKSA9PiBTY3JvbGxUZXh0LAogIFNlYXJjaDogKCkgPT4gU2VhcmNoLAogIFNlYXJjaEFsZXJ0OiAoKSA9PiBTZWFyY2hBbGVydCwKICBTZWFyY2hDaGVjazogKCkgPT4gU2VhcmNoQ2hlY2ssCiAgU2VhcmNoQ29kZTogKCkgPT4gU2VhcmNoQ29kZSwKICBTZWFyY2hTbGFzaDogKCkgPT4gU2VhcmNoU2xhc2gsCiAgU2VhcmNoWDogKCkgPT4gU2VhcmNoWCwKICBTZWN0aW9uOiAoKSA9PiBTZWN0aW9uLAogIFNlbmQ6ICgpID0+IFNlbmQsCiAgU2VuZEhvcml6b25hbDogKCkgPT4gU2VuZEhvcml6b250YWwsCiAgU2VuZEhvcml6b250YWw6ICgpID0+IFNlbmRIb3Jpem9udGFsLAogIFNlbmRUb0JhY2s6ICgpID0+IFNlbmRUb0JhY2ssCiAgU2VwYXJhdG9ySG9yaXpvbnRhbDogKCkgPT4gU2VwYXJhdG9ySG9yaXpvbnRhbCwKICBTZXBhcmF0b3JWZXJ0aWNhbDogKCkgPT4gU2VwYXJhdG9yVmVydGljYWwsCiAgU2VydmVyOiAoKSA9PiBTZXJ2ZXIsCiAgU2VydmVyQ29nOiAoKSA9PiBTZXJ2ZXJDb2csCiAgU2VydmVyQ3Jhc2g6ICgpID0+IFNlcnZlckNyYXNoLAogIFNlcnZlck9mZjogKCkgPT4gU2VydmVyT2ZmLAogIFNldHRpbmdzOiAoKSA9PiBTZXR0aW5ncywKICBTZXR0aW5nczI6ICgpID0+IFNldHRpbmdzMiwKICBTaGFwZXM6ICgpID0+IFNoYXBlcywKICBTaGFyZTogKCkgPT4gU2hhcmUsCiAgU2hhcmUyOiAoKSA9PiBTaGFyZTIsCiAgU2hlZXQ6ICgpID0+IFNoZWV0LAogIFNoZWxsOiAoKSA9PiBTaGVsbCwKICBTaGllbGQ6ICgpID0+IFNoaWVsZCwKICBTaGllbGRBbGVydDogKCkgPT4gU2hpZWxkQWxlcnQsCiAgU2hpZWxkQmFuOiAoKSA9PiBTaGllbGRCYW4sCiAgU2hpZWxkQ2hlY2s6ICgpID0+IFNoaWVsZENoZWNrLAogIFNoaWVsZENsb3NlOiAoKSA9PiBTaGllbGRYLAogIFNoaWVsZEVsbGlwc2lzOiAoKSA9PiBTaGllbGRFbGxpcHNpcywKICBTaGllbGRIYWxmOiAoKSA9PiBTaGllbGRIYWxmLAogIFNoaWVsZE1pbnVzOiAoKSA9PiBTaGllbGRNaW51cywKICBTaGllbGRPZmY6ICgpID0+IFNoaWVsZE9mZiwKICBTaGllbGRQbHVzOiAoKSA9PiBTaGllbGRQbHVzLAogIFNoaWVsZFF1ZXN0aW9uOiAoKSA9PiBTaGllbGRRdWVzdGlvbk1hcmssCiAgU2hpZWxkUXVlc3Rpb25NYXJrOiAoKSA9PiBTaGllbGRRdWVzdGlvbk1hcmssCiAgU2hpZWxkVXNlcjogKCkgPT4gU2hpZWxkVXNlciwKICBTaGllbGRYOiAoKSA9PiBTaGllbGRYLAogIFNoaXA6ICgpID0+IFNoaXAsCiAgU2hpcFdoZWVsOiAoKSA9PiBTaGlwV2hlZWwsCiAgU2hpcnQ6ICgpID0+IFNoaXJ0LAogIFNob3BwaW5nQmFnOiAoKSA9PiBTaG9wcGluZ0JhZywKICBTaG9wcGluZ0Jhc2tldDogKCkgPT4gU2hvcHBpbmdCYXNrZXQsCiAgU2hvcHBpbmdDYXJ0OiAoKSA9PiBTaG9wcGluZ0NhcnQsCiAgU2hvdmVsOiAoKSA9PiBTaG92ZWwsCiAgU2hvd2VySGVhZDogKCkgPT4gU2hvd2VySGVhZCwKICBTaHJlZGRlcjogKCkgPT4gU2hyZWRkZXIsCiAgU2hyaW1wOiAoKSA9PiBTaHJpbXAsCiAgU2hyaW5rOiAoKSA9PiBTaHJpbmssCiAgU2hydWI6ICgpID0+IFNocnViLAogIFNodWZmbGU6ICgpID0+IFNodWZmbGUsCiAgU2lkZWJhcjogKCkgPT4gUGFuZWxMZWZ0LAogIFNpZGViYXJDbG9zZTogKCkgPT4gUGFuZWxMZWZ0Q2xvc2UsCiAgU2lkZWJhck9wZW46ICgpID0+IFBhbmVsTGVmdE9wZW4sCiAgU2lnbWE6ICgpID0+IFNpZ21hLAogIFNpZ21hU3F1YXJlOiAoKSA9PiBTcXVhcmVTaWdtYSwKICBTaWduYWw6ICgpID0+IFNpZ25hbCwKICBTaWduYWxIaWdoOiAoKSA9PiBTaWduYWxIaWdoLAogIFNpZ25hbExvdzogKCkgPT4gU2lnbmFsTG93LAogIFNpZ25hbE1lZGl1bTogKCkgPT4gU2lnbmFsTWVkaXVtLAogIFNpZ25hbFplcm86ICgpID0+IFNpZ25hbFplcm8sCiAgU2lnbmF0dXJlOiAoKSA9PiBTaWduYXR1cmUsCiAgU2lnbnBvc3Q6ICgpID0+IFNpZ25wb3N0LAogIFNpZ25wb3N0QmlnOiAoKSA9PiBTaWducG9zdEJpZywKICBTaXJlbjogKCkgPT4gU2lyZW4sCiAgU2tpcEJhY2s6ICgpID0+IFNraXBCYWNrLAogIFNraXBGb3J3YXJkOiAoKSA9PiBTa2lwRm9yd2FyZCwKICBTa3VsbDogKCkgPT4gU2t1bGwsCiAgU2xhY2s6ICgpID0+IFNsYWNrLAogIFNsYXNoOiAoKSA9PiBTbGFzaCwKICBTbGFzaFNxdWFyZTogKCkgPT4gU3F1YXJlU2xhc2gsCiAgU2xpY2U6ICgpID0+IFNsaWNlLAogIFNsaWRlcnM6ICgpID0+IFNsaWRlcnNWZXJ0aWNhbCwKICBTbGlkZXJzSG9yaXpvbnRhbDogKCkgPT4gU2xpZGVyc0hvcml6b250YWwsCiAgU2xpZGVyc1ZlcnRpY2FsOiAoKSA9PiBTbGlkZXJzVmVydGljYWwsCiAgU21hcnRwaG9uZTogKCkgPT4gU21hcnRwaG9uZSwKICBTbWFydHBob25lQ2hhcmdpbmc6ICgpID0+IFNtYXJ0cGhvbmVDaGFyZ2luZywKICBTbWFydHBob25lTmZjOiAoKSA9PiBTbWFydHBob25lTmZjLAogIFNtaWxlOiAoKSA9PiBTbWlsZSwKICBTbWlsZVBsdXM6ICgpID0+IFNtaWxlUGx1cywKICBTbmFpbDogKCkgPT4gU25haWwsCiAgU25vd2ZsYWtlOiAoKSA9PiBTbm93Zmxha2UsCiAgU29hcERpc3BlbnNlckRyb3BsZXQ6ICgpID0+IFNvYXBEaXNwZW5zZXJEcm9wbGV0LAogIFNvZmE6ICgpID0+IFNvZmEsCiAgU29sYXJQYW5lbDogKCkgPT4gU29sYXJQYW5lbCwKICBTb3J0QXNjOiAoKSA9PiBBcnJvd1VwTmFycm93V2lkZSwKICBTb3J0RGVzYzogKCkgPT4gQXJyb3dEb3duV2lkZU5hcnJvdywKICBTb3VwOiAoKSA9PiBTb3VwLAogIFNwYWNlOiAoKSA9PiBTcGFjZSwKICBTcGFkZTogKCkgPT4gU3BhZGUsCiAgU3BhcmtsZTogKCkgPT4gU3BhcmtsZSwKICBTcGFya2xlczogKCkgPT4gU3BhcmtsZXMsCiAgU3BlYWtlcjogKCkgPT4gU3BlYWtlciwKICBTcGVlY2g6ICgpID0+IFNwZWVjaCwKICBTcGVsbENoZWNrOiAoKSA9PiBTcGVsbENoZWNrLAogIFNwZWxsQ2hlY2syOiAoKSA9PiBTcGVsbENoZWNrMiwKICBTcGxpbmU6ICgpID0+IFNwbGluZSwKICBTcGxpbmVQb2ludGVyOiAoKSA9PiBTcGxpbmVQb2ludGVyLAogIFNwbGl0OiAoKSA9PiBTcGxpdCwKICBTcGxpdFNxdWFyZUhvcml6b250YWw6ICgpID0+IFNxdWFyZVNwbGl0SG9yaXpvbnRhbCwKICBTcGxpdFNxdWFyZVZlcnRpY2FsOiAoKSA9PiBTcXVhcmVTcGxpdFZlcnRpY2FsLAogIFNwb29sOiAoKSA9PiBTcG9vbCwKICBTcG90bGlnaHQ6ICgpID0+IFNwb3RsaWdodCwKICBTcHJheUNhbjogKCkgPT4gU3ByYXlDYW4sCiAgU3Byb3V0OiAoKSA9PiBTcHJvdXQsCiAgU3F1YXJlOiAoKSA9PiBTcXVhcmUsCiAgU3F1YXJlQWN0aXZpdHk6ICgpID0+IFNxdWFyZUFjdGl2aXR5LAogIFNxdWFyZUFycm93RG93bjogKCkgPT4gU3F1YXJlQXJyb3dEb3duLAogIFNxdWFyZUFycm93RG93bkxlZnQ6ICgpID0+IFNxdWFyZUFycm93RG93bkxlZnQsCiAgU3F1YXJlQXJyb3dEb3duUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93RG93blJpZ2h0LAogIFNxdWFyZUFycm93TGVmdDogKCkgPT4gU3F1YXJlQXJyb3dMZWZ0LAogIFNxdWFyZUFycm93T3V0RG93bkxlZnQ6ICgpID0+IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgU3F1YXJlQXJyb3dPdXREb3duUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogIFNxdWFyZUFycm93T3V0VXBMZWZ0OiAoKSA9PiBTcXVhcmVBcnJvd091dFVwTGVmdCwKICBTcXVhcmVBcnJvd091dFVwUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93T3V0VXBSaWdodCwKICBTcXVhcmVBcnJvd1JpZ2h0OiAoKSA9PiBTcXVhcmVBcnJvd1JpZ2h0LAogIFNxdWFyZUFycm93VXA6ICgpID0+IFNxdWFyZUFycm93VXAsCiAgU3F1YXJlQXJyb3dVcExlZnQ6ICgpID0+IFNxdWFyZUFycm93VXBMZWZ0LAogIFNxdWFyZUFycm93VXBSaWdodDogKCkgPT4gU3F1YXJlQXJyb3dVcFJpZ2h0LAogIFNxdWFyZUFzdGVyaXNrOiAoKSA9PiBTcXVhcmVBc3RlcmlzaywKICBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczogKCkgPT4gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgU3F1YXJlQ2hhcnRHYW50dDogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBTcXVhcmVDaGVjazogKCkgPT4gU3F1YXJlQ2hlY2ssCiAgU3F1YXJlQ2hlY2tCaWc6ICgpID0+IFNxdWFyZUNoZWNrQmlnLAogIFNxdWFyZUNoZXZyb25Eb3duOiAoKSA9PiBTcXVhcmVDaGV2cm9uRG93biwKICBTcXVhcmVDaGV2cm9uTGVmdDogKCkgPT4gU3F1YXJlQ2hldnJvbkxlZnQsCiAgU3F1YXJlQ2hldnJvblJpZ2h0OiAoKSA9PiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgU3F1YXJlQ2hldnJvblVwOiAoKSA9PiBTcXVhcmVDaGV2cm9uVXAsCiAgU3F1YXJlQ29kZTogKCkgPT4gU3F1YXJlQ29kZSwKICBTcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZCwKICBTcXVhcmVEYXNoZWRCb3R0b206ICgpID0+IFNxdWFyZURhc2hlZEJvdHRvbSwKICBTcXVhcmVEYXNoZWRCb3R0b21Db2RlOiAoKSA9PiBTcXVhcmVEYXNoZWRCb3R0b21Db2RlLAogIFNxdWFyZURhc2hlZEthbmJhbjogKCkgPT4gU3F1YXJlRGFzaGVkS2FuYmFuLAogIFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjogKCkgPT4gU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyLAogIFNxdWFyZURhc2hlZFRvcFNvbGlkOiAoKSA9PiBTcXVhcmVEYXNoZWRUb3BTb2xpZCwKICBTcXVhcmVEaXZpZGU6ICgpID0+IFNxdWFyZURpdmlkZSwKICBTcXVhcmVEb3Q6ICgpID0+IFNxdWFyZURvdCwKICBTcXVhcmVFcXVhbDogKCkgPT4gU3F1YXJlRXF1YWwsCiAgU3F1YXJlRnVuY3Rpb246ICgpID0+IFNxdWFyZUZ1bmN0aW9uLAogIFNxdWFyZUdhbnR0Q2hhcnQ6ICgpID0+IFNxdWFyZUNoYXJ0R2FudHQsCiAgU3F1YXJlS2FuYmFuOiAoKSA9PiBTcXVhcmVLYW5iYW4sCiAgU3F1YXJlTGlicmFyeTogKCkgPT4gU3F1YXJlTGlicmFyeSwKICBTcXVhcmVNOiAoKSA9PiBTcXVhcmVNLAogIFNxdWFyZU1lbnU6ICgpID0+IFNxdWFyZU1lbnUsCiAgU3F1YXJlTWludXM6ICgpID0+IFNxdWFyZU1pbnVzLAogIFNxdWFyZU1vdXNlUG9pbnRlcjogKCkgPT4gU3F1YXJlTW91c2VQb2ludGVyLAogIFNxdWFyZVBhcmtpbmc6ICgpID0+IFNxdWFyZVBhcmtpbmcsCiAgU3F1YXJlUGFya2luZ09mZjogKCkgPT4gU3F1YXJlUGFya2luZ09mZiwKICBTcXVhcmVQYXVzZTogKCkgPT4gU3F1YXJlUGF1c2UsCiAgU3F1YXJlUGVuOiAoKSA9PiBTcXVhcmVQZW4sCiAgU3F1YXJlUGVyY2VudDogKCkgPT4gU3F1YXJlUGVyY2VudCwKICBTcXVhcmVQaTogKCkgPT4gU3F1YXJlUGksCiAgU3F1YXJlUGlsY3JvdzogKCkgPT4gU3F1YXJlUGlsY3JvdywKICBTcXVhcmVQbGF5OiAoKSA9PiBTcXVhcmVQbGF5LAogIFNxdWFyZVBsdXM6ICgpID0+IFNxdWFyZVBsdXMsCiAgU3F1YXJlUG93ZXI6ICgpID0+IFNxdWFyZVBvd2VyLAogIFNxdWFyZVJhZGljYWw6ICgpID0+IFNxdWFyZVJhZGljYWwsCiAgU3F1YXJlUm91bmRDb3JuZXI6ICgpID0+IFNxdWFyZVJvdW5kQ29ybmVyLAogIFNxdWFyZVNjaXNzb3JzOiAoKSA9PiBTcXVhcmVTY2lzc29ycywKICBTcXVhcmVTaWdtYTogKCkgPT4gU3F1YXJlU2lnbWEsCiAgU3F1YXJlU2xhc2g6ICgpID0+IFNxdWFyZVNsYXNoLAogIFNxdWFyZVNwbGl0SG9yaXpvbnRhbDogKCkgPT4gU3F1YXJlU3BsaXRIb3Jpem9udGFsLAogIFNxdWFyZVNwbGl0VmVydGljYWw6ICgpID0+IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgU3F1YXJlU3F1YXJlOiAoKSA9PiBTcXVhcmVTcXVhcmUsCiAgU3F1YXJlU3RhY2s6ICgpID0+IFNxdWFyZVN0YWNrLAogIFNxdWFyZVN0YXI6ICgpID0+IFNxdWFyZVN0YXIsCiAgU3F1YXJlU3RvcDogKCkgPT4gU3F1YXJlU3RvcCwKICBTcXVhcmVUZXJtaW5hbDogKCkgPT4gU3F1YXJlVGVybWluYWwsCiAgU3F1YXJlVXNlcjogKCkgPT4gU3F1YXJlVXNlciwKICBTcXVhcmVVc2VyUm91bmQ6ICgpID0+IFNxdWFyZVVzZXJSb3VuZCwKICBTcXVhcmVYOiAoKSA9PiBTcXVhcmVYLAogIFNxdWFyZXNFeGNsdWRlOiAoKSA9PiBTcXVhcmVzRXhjbHVkZSwKICBTcXVhcmVzSW50ZXJzZWN0OiAoKSA9PiBTcXVhcmVzSW50ZXJzZWN0LAogIFNxdWFyZXNTdWJ0cmFjdDogKCkgPT4gU3F1YXJlc1N1YnRyYWN0LAogIFNxdWFyZXNVbml0ZTogKCkgPT4gU3F1YXJlc1VuaXRlLAogIFNxdWlyY2xlOiAoKSA9PiBTcXVpcmNsZSwKICBTcXVpcmNsZURhc2hlZDogKCkgPT4gU3F1aXJjbGVEYXNoZWQsCiAgU3F1aXJyZWw6ICgpID0+IFNxdWlycmVsLAogIFN0YW1wOiAoKSA9PiBTdGFtcCwKICBTdGFyOiAoKSA9PiBTdGFyLAogIFN0YXJIYWxmOiAoKSA9PiBTdGFySGFsZiwKICBTdGFyT2ZmOiAoKSA9PiBTdGFyT2ZmLAogIFN0YXJzOiAoKSA9PiBTcGFya2xlcywKICBTdGVwQmFjazogKCkgPT4gU3RlcEJhY2ssCiAgU3RlcEZvcndhcmQ6ICgpID0+IFN0ZXBGb3J3YXJkLAogIFN0ZXRob3Njb3BlOiAoKSA9PiBTdGV0aG9zY29wZSwKICBTdGlja2VyOiAoKSA9PiBTdGlja2VyLAogIFN0aWNreU5vdGU6ICgpID0+IFN0aWNreU5vdGUsCiAgU3RvbmU6ICgpID0+IFN0b25lLAogIFN0b3BDaXJjbGU6ICgpID0+IENpcmNsZVN0b3AsCiAgU3RvcmU6ICgpID0+IFN0b3JlLAogIFN0cmV0Y2hIb3Jpem9udGFsOiAoKSA9PiBTdHJldGNoSG9yaXpvbnRhbCwKICBTdHJldGNoVmVydGljYWw6ICgpID0+IFN0cmV0Y2hWZXJ0aWNhbCwKICBTdHJpa2V0aHJvdWdoOiAoKSA9PiBTdHJpa2V0aHJvdWdoLAogIFN1YnNjcmlwdDogKCkgPT4gU3Vic2NyaXB0LAogIFN1YnRpdGxlczogKCkgPT4gQ2FwdGlvbnMsCiAgU3VuOiAoKSA9PiBTdW4sCiAgU3VuRGltOiAoKSA9PiBTdW5EaW0sCiAgU3VuTWVkaXVtOiAoKSA9PiBTdW5NZWRpdW0sCiAgU3VuTW9vbjogKCkgPT4gU3VuTW9vbiwKICBTdW5Tbm93OiAoKSA9PiBTdW5Tbm93LAogIFN1bnJpc2U6ICgpID0+IFN1bnJpc2UsCiAgU3Vuc2V0OiAoKSA9PiBTdW5zZXQsCiAgU3VwZXJzY3JpcHQ6ICgpID0+IFN1cGVyc2NyaXB0LAogIFN3YXRjaEJvb2s6ICgpID0+IFN3YXRjaEJvb2ssCiAgU3dpc3NGcmFuYzogKCkgPT4gU3dpc3NGcmFuYywKICBTd2l0Y2hDYW1lcmE6ICgpID0+IFN3aXRjaENhbWVyYSwKICBTd29yZDogKCkgPT4gU3dvcmQsCiAgU3dvcmRzOiAoKSA9PiBTd29yZHMsCiAgU3lyaW5nZTogKCkgPT4gU3lyaW5nZSwKICBUYWJsZTogKCkgPT4gVGFibGUsCiAgVGFibGUyOiAoKSA9PiBUYWJsZTIsCiAgVGFibGVDZWxsc01lcmdlOiAoKSA9PiBUYWJsZUNlbGxzTWVyZ2UsCiAgVGFibGVDZWxsc1NwbGl0OiAoKSA9PiBUYWJsZUNlbGxzU3BsaXQsCiAgVGFibGVDb2x1bW5zU3BsaXQ6ICgpID0+IFRhYmxlQ29sdW1uc1NwbGl0LAogIFRhYmxlQ29uZmlnOiAoKSA9PiBDb2x1bW5zM0NvZywKICBUYWJsZU9mQ29udGVudHM6ICgpID0+IFRhYmxlT2ZDb250ZW50cywKICBUYWJsZVByb3BlcnRpZXM6ICgpID0+IFRhYmxlUHJvcGVydGllcywKICBUYWJsZVJvd3NTcGxpdDogKCkgPT4gVGFibGVSb3dzU3BsaXQsCiAgVGFibGV0OiAoKSA9PiBUYWJsZXQsCiAgVGFibGV0U21hcnRwaG9uZTogKCkgPT4gVGFibGV0U21hcnRwaG9uZSwKICBUYWJsZXRzOiAoKSA9PiBUYWJsZXRzLAogIFRhZzogKCkgPT4gVGFnMiwKICBUYWdzOiAoKSA9PiBUYWdzLAogIFRhbGx5MTogKCkgPT4gVGFsbHkxLAogIFRhbGx5MjogKCkgPT4gVGFsbHkyLAogIFRhbGx5MzogKCkgPT4gVGFsbHkzLAogIFRhbGx5NDogKCkgPT4gVGFsbHk0LAogIFRhbGx5NTogKCkgPT4gVGFsbHk1LAogIFRhbmdlbnQ6ICgpID0+IFRhbmdlbnQsCiAgVGFyZ2V0OiAoKSA9PiBUYXJnZXQsCiAgVGVsZXNjb3BlOiAoKSA9PiBUZWxlc2NvcGUsCiAgVGVudDogKCkgPT4gVGVudCwKICBUZW50VHJlZTogKCkgPT4gVGVudFRyZWUsCiAgVGVybWluYWw6ICgpID0+IFRlcm1pbmFsLAogIFRlcm1pbmFsU3F1YXJlOiAoKSA9PiBTcXVhcmVUZXJtaW5hbCwKICBUZXN0VHViZTogKCkgPT4gVGVzdFR1YmUsCiAgVGVzdFR1YmUyOiAoKSA9PiBUZXN0VHViZURpYWdvbmFsLAogIFRlc3RUdWJlRGlhZ29uYWw6ICgpID0+IFRlc3RUdWJlRGlhZ29uYWwsCiAgVGVzdFR1YmVzOiAoKSA9PiBUZXN0VHViZXMsCiAgVGV4dDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgVGV4dEFsaWduQ2VudGVyOiAoKSA9PiBUZXh0QWxpZ25DZW50ZXIsCiAgVGV4dEFsaWduRW5kOiAoKSA9PiBUZXh0QWxpZ25FbmQsCiAgVGV4dEFsaWduSnVzdGlmeTogKCkgPT4gVGV4dEFsaWduSnVzdGlmeSwKICBUZXh0QWxpZ25TdGFydDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgVGV4dEN1cnNvcjogKCkgPT4gVGV4dEN1cnNvciwKICBUZXh0Q3Vyc29ySW5wdXQ6ICgpID0+IFRleHRDdXJzb3JJbnB1dCwKICBUZXh0SW5pdGlhbDogKCkgPT4gVGV4dEluaXRpYWwsCiAgVGV4dFF1b3RlOiAoKSA9PiBUZXh0UXVvdGUsCiAgVGV4dFNlYXJjaDogKCkgPT4gVGV4dFNlYXJjaCwKICBUZXh0U2VsZWN0OiAoKSA9PiBUZXh0U2VsZWN0LAogIFRleHRTZWxlY3Rpb246ICgpID0+IFRleHRTZWxlY3QsCiAgVGV4dFdyYXA6ICgpID0+IFRleHRXcmFwLAogIFRoZWF0ZXI6ICgpID0+IFRoZWF0ZXIsCiAgVGhlcm1vbWV0ZXI6ICgpID0+IFRoZXJtb21ldGVyLAogIFRoZXJtb21ldGVyU25vd2ZsYWtlOiAoKSA9PiBUaGVybW9tZXRlclNub3dmbGFrZSwKICBUaGVybW9tZXRlclN1bjogKCkgPT4gVGhlcm1vbWV0ZXJTdW4sCiAgVGh1bWJzRG93bjogKCkgPT4gVGh1bWJzRG93biwKICBUaHVtYnNVcDogKCkgPT4gVGh1bWJzVXAsCiAgVGlja2V0OiAoKSA9PiBUaWNrZXQsCiAgVGlja2V0Q2hlY2s6ICgpID0+IFRpY2tldENoZWNrLAogIFRpY2tldE1pbnVzOiAoKSA9PiBUaWNrZXRNaW51cywKICBUaWNrZXRQZXJjZW50OiAoKSA9PiBUaWNrZXRQZXJjZW50LAogIFRpY2tldFBsdXM6ICgpID0+IFRpY2tldFBsdXMsCiAgVGlja2V0U2xhc2g6ICgpID0+IFRpY2tldFNsYXNoLAogIFRpY2tldFg6ICgpID0+IFRpY2tldFgsCiAgVGlja2V0czogKCkgPT4gVGlja2V0cywKICBUaWNrZXRzUGxhbmU6ICgpID0+IFRpY2tldHNQbGFuZSwKICBUaW1lcjogKCkgPT4gVGltZXIyLAogIFRpbWVyT2ZmOiAoKSA9PiBUaW1lck9mZiwKICBUaW1lclJlc2V0OiAoKSA9PiBUaW1lclJlc2V0LAogIFRvZ2dsZUxlZnQ6ICgpID0+IFRvZ2dsZUxlZnQsCiAgVG9nZ2xlUmlnaHQ6ICgpID0+IFRvZ2dsZVJpZ2h0LAogIFRvaWxldDogKCkgPT4gVG9pbGV0LAogIFRvb2xDYXNlOiAoKSA9PiBUb29sQ2FzZSwKICBUb29sYm94OiAoKSA9PiBUb29sYm94LAogIFRvcm5hZG86ICgpID0+IFRvcm5hZG8sCiAgVG9ydXM6ICgpID0+IFRvcnVzLAogIFRvdWNocGFkOiAoKSA9PiBUb3VjaHBhZCwKICBUb3VjaHBhZE9mZjogKCkgPT4gVG91Y2hwYWRPZmYsCiAgVG93ZXJDb250cm9sOiAoKSA9PiBUb3dlckNvbnRyb2wsCiAgVG95QnJpY2s6ICgpID0+IFRveUJyaWNrLAogIFRyYWN0b3I6ICgpID0+IFRyYWN0b3IsCiAgVHJhZmZpY0NvbmU6ICgpID0+IFRyYWZmaWNDb25lLAogIFRyYWluOiAoKSA9PiBUcmFtRnJvbnQsCiAgVHJhaW5Gcm9udDogKCkgPT4gVHJhaW5Gcm9udCwKICBUcmFpbkZyb250VHVubmVsOiAoKSA9PiBUcmFpbkZyb250VHVubmVsLAogIFRyYWluVHJhY2s6ICgpID0+IFRyYWluVHJhY2ssCiAgVHJhbUZyb250OiAoKSA9PiBUcmFtRnJvbnQsCiAgVHJhbnNnZW5kZXI6ICgpID0+IFRyYW5zZ2VuZGVyLAogIFRyYXNoOiAoKSA9PiBUcmFzaCwKICBUcmFzaDI6ICgpID0+IFRyYXNoMiwKICBUcmVlRGVjaWR1b3VzOiAoKSA9PiBUcmVlRGVjaWR1b3VzLAogIFRyZWVQYWxtOiAoKSA9PiBUcmVlUGFsbSwKICBUcmVlUGluZTogKCkgPT4gVHJlZVBpbmUsCiAgVHJlZXM6ICgpID0+IFRyZWVzLAogIFRyZWxsbzogKCkgPT4gVHJlbGxvLAogIFRyZW5kaW5nRG93bjogKCkgPT4gVHJlbmRpbmdEb3duLAogIFRyZW5kaW5nVXA6ICgpID0+IFRyZW5kaW5nVXAsCiAgVHJlbmRpbmdVcERvd246ICgpID0+IFRyZW5kaW5nVXBEb3duLAogIFRyaWFuZ2xlOiAoKSA9PiBUcmlhbmdsZSwKICBUcmlhbmdsZUFsZXJ0OiAoKSA9PiBUcmlhbmdsZUFsZXJ0LAogIFRyaWFuZ2xlRGFzaGVkOiAoKSA9PiBUcmlhbmdsZURhc2hlZCwKICBUcmlhbmdsZVJpZ2h0OiAoKSA9PiBUcmlhbmdsZVJpZ2h0LAogIFRyb3BoeTogKCkgPT4gVHJvcGh5LAogIFRydWNrOiAoKSA9PiBUcnVjaywKICBUcnVja0VsZWN0cmljOiAoKSA9PiBUcnVja0VsZWN0cmljLAogIFR1cmtpc2hMaXJhOiAoKSA9PiBUdXJraXNoTGlyYSwKICBUdXJudGFibGU6ICgpID0+IFR1cm50YWJsZSwKICBUdXJ0bGU6ICgpID0+IFR1cnRsZSwKICBUdjogKCkgPT4gVHYsCiAgVHYyOiAoKSA9PiBUdk1pbmltYWwsCiAgVHZNaW5pbWFsOiAoKSA9PiBUdk1pbmltYWwsCiAgVHZNaW5pbWFsUGxheTogKCkgPT4gVHZNaW5pbWFsUGxheSwKICBUd2l0Y2g6ICgpID0+IFR3aXRjaCwKICBUd2l0dGVyOiAoKSA9PiBUd2l0dGVyLAogIFR5cGU6ICgpID0+IFR5cGUsCiAgVHlwZU91dGxpbmU6ICgpID0+IFR5cGVPdXRsaW5lLAogIFVtYnJlbGxhOiAoKSA9PiBVbWJyZWxsYSwKICBVbWJyZWxsYU9mZjogKCkgPT4gVW1icmVsbGFPZmYsCiAgVW5kZXJsaW5lOiAoKSA9PiBVbmRlcmxpbmUsCiAgVW5kbzogKCkgPT4gVW5kbywKICBVbmRvMjogKCkgPT4gVW5kbzIsCiAgVW5kb0RvdDogKCkgPT4gVW5kb0RvdCwKICBVbmZvbGRIb3Jpem9udGFsOiAoKSA9PiBVbmZvbGRIb3Jpem9udGFsLAogIFVuZm9sZFZlcnRpY2FsOiAoKSA9PiBVbmZvbGRWZXJ0aWNhbCwKICBVbmdyb3VwOiAoKSA9PiBVbmdyb3VwLAogIFVuaXZlcnNpdHk6ICgpID0+IFVuaXZlcnNpdHksCiAgVW5saW5rOiAoKSA9PiBVbmxpbmssCiAgVW5saW5rMjogKCkgPT4gVW5saW5rMiwKICBVbmxvY2s6ICgpID0+IExvY2tPcGVuLAogIFVubG9ja0tleWhvbGU6ICgpID0+IExvY2tLZXlob2xlT3BlbiwKICBVbnBsdWc6ICgpID0+IFVucGx1ZywKICBVcGxvYWQ6ICgpID0+IFVwbG9hZCwKICBVcGxvYWRDbG91ZDogKCkgPT4gQ2xvdWRVcGxvYWQsCiAgVXNiOiAoKSA9PiBVc2IsCiAgVXNlcjogKCkgPT4gVXNlciwKICBVc2VyMjogKCkgPT4gVXNlclJvdW5kLAogIFVzZXJDaGVjazogKCkgPT4gVXNlckNoZWNrLAogIFVzZXJDaGVjazI6ICgpID0+IFVzZXJSb3VuZENoZWNrLAogIFVzZXJDaXJjbGU6ICgpID0+IENpcmNsZVVzZXIsCiAgVXNlckNpcmNsZTI6ICgpID0+IENpcmNsZVVzZXJSb3VuZCwKICBVc2VyQ29nOiAoKSA9PiBVc2VyQ29nLAogIFVzZXJDb2cyOiAoKSA9PiBVc2VyUm91bmRDb2csCiAgVXNlckxvY2s6ICgpID0+IFVzZXJMb2NrLAogIFVzZXJNaW51czogKCkgPT4gVXNlck1pbnVzLAogIFVzZXJNaW51czI6ICgpID0+IFVzZXJSb3VuZE1pbnVzLAogIFVzZXJQZW46ICgpID0+IFVzZXJQZW4sCiAgVXNlclBsdXM6ICgpID0+IFVzZXJQbHVzLAogIFVzZXJQbHVzMjogKCkgPT4gVXNlclJvdW5kUGx1cywKICBVc2VyUm91bmQ6ICgpID0+IFVzZXJSb3VuZCwKICBVc2VyUm91bmRDaGVjazogKCkgPT4gVXNlclJvdW5kQ2hlY2ssCiAgVXNlclJvdW5kQ29nOiAoKSA9PiBVc2VyUm91bmRDb2csCiAgVXNlclJvdW5kTWludXM6ICgpID0+IFVzZXJSb3VuZE1pbnVzLAogIFVzZXJSb3VuZFBlbjogKCkgPT4gVXNlclJvdW5kUGVuLAogIFVzZXJSb3VuZFBsdXM6ICgpID0+IFVzZXJSb3VuZFBsdXMsCiAgVXNlclJvdW5kU2VhcmNoOiAoKSA9PiBVc2VyUm91bmRTZWFyY2gsCiAgVXNlclJvdW5kWDogKCkgPT4gVXNlclJvdW5kWCwKICBVc2VyU2VhcmNoOiAoKSA9PiBVc2VyU2VhcmNoLAogIFVzZXJTcXVhcmU6ICgpID0+IFNxdWFyZVVzZXIsCiAgVXNlclNxdWFyZTI6ICgpID0+IFNxdWFyZVVzZXJSb3VuZCwKICBVc2VyU3RhcjogKCkgPT4gVXNlclN0YXIsCiAgVXNlclg6ICgpID0+IFVzZXJYLAogIFVzZXJYMjogKCkgPT4gVXNlclJvdW5kWCwKICBVc2VyczogKCkgPT4gVXNlcnMsCiAgVXNlcnMyOiAoKSA9PiBVc2Vyc1JvdW5kLAogIFVzZXJzUm91bmQ6ICgpID0+IFVzZXJzUm91bmQsCiAgVXRlbnNpbHM6ICgpID0+IFV0ZW5zaWxzLAogIFV0ZW5zaWxzQ3Jvc3NlZDogKCkgPT4gVXRlbnNpbHNDcm9zc2VkLAogIFV0aWxpdHlQb2xlOiAoKSA9PiBVdGlsaXR5UG9sZSwKICBWYW46ICgpID0+IFZhbiwKICBWYXJpYWJsZTogKCkgPT4gVmFyaWFibGUsCiAgVmF1bHQ6ICgpID0+IFZhdWx0LAogIFZlY3RvclNxdWFyZTogKCkgPT4gVmVjdG9yU3F1YXJlLAogIFZlZ2FuOiAoKSA9PiBWZWdhbiwKICBWZW5ldGlhbk1hc2s6ICgpID0+IFZlbmV0aWFuTWFzaywKICBWZW51czogKCkgPT4gVmVudXMsCiAgVmVudXNBbmRNYXJzOiAoKSA9PiBWZW51c0FuZE1hcnMsCiAgVmVyaWZpZWQ6ICgpID0+IEJhZGdlQ2hlY2ssCiAgVmlicmF0ZTogKCkgPT4gVmlicmF0ZSwKICBWaWJyYXRlT2ZmOiAoKSA9PiBWaWJyYXRlT2ZmLAogIFZpZGVvOiAoKSA9PiBWaWRlbywKICBWaWRlb09mZjogKCkgPT4gVmlkZW9PZmYsCiAgVmlkZW90YXBlOiAoKSA9PiBWaWRlb3RhcGUsCiAgVmlldzogKCkgPT4gVmlldywKICBWb2ljZW1haWw6ICgpID0+IFZvaWNlbWFpbCwKICBWb2xsZXliYWxsOiAoKSA9PiBWb2xsZXliYWxsLAogIFZvbHVtZTogKCkgPT4gVm9sdW1lLAogIFZvbHVtZTE6ICgpID0+IFZvbHVtZTEsCiAgVm9sdW1lMjogKCkgPT4gVm9sdW1lMiwKICBWb2x1bWVPZmY6ICgpID0+IFZvbHVtZU9mZiwKICBWb2x1bWVYOiAoKSA9PiBWb2x1bWVYLAogIFZvdGU6ICgpID0+IFZvdGUsCiAgV2FsbGV0OiAoKSA9PiBXYWxsZXQsCiAgV2FsbGV0MjogKCkgPT4gV2FsbGV0TWluaW1hbCwKICBXYWxsZXRDYXJkczogKCkgPT4gV2FsbGV0Q2FyZHMsCiAgV2FsbGV0TWluaW1hbDogKCkgPT4gV2FsbGV0TWluaW1hbCwKICBXYWxscGFwZXI6ICgpID0+IFdhbGxwYXBlciwKICBXYW5kOiAoKSA9PiBXYW5kLAogIFdhbmQyOiAoKSA9PiBXYW5kU3BhcmtsZXMsCiAgV2FuZFNwYXJrbGVzOiAoKSA9PiBXYW5kU3BhcmtsZXMsCiAgV2FyZWhvdXNlOiAoKSA9PiBXYXJlaG91c2UsCiAgV2FzaGluZ01hY2hpbmU6ICgpID0+IFdhc2hpbmdNYWNoaW5lLAogIFdhdGNoOiAoKSA9PiBXYXRjaCwKICBXYXZlczogKCkgPT4gV2F2ZXMsCiAgV2F2ZXNBcnJvd0Rvd246ICgpID0+IFdhdmVzQXJyb3dEb3duLAogIFdhdmVzQXJyb3dVcDogKCkgPT4gV2F2ZXNBcnJvd1VwLAogIFdhdmVzTGFkZGVyOiAoKSA9PiBXYXZlc0xhZGRlciwKICBXYXlwb2ludHM6ICgpID0+IFdheXBvaW50cywKICBXZWJjYW06ICgpID0+IFdlYmNhbSwKICBXZWJob29rOiAoKSA9PiBXZWJob29rLAogIFdlYmhvb2tPZmY6ICgpID0+IFdlYmhvb2tPZmYsCiAgV2VpZ2h0OiAoKSA9PiBXZWlnaHQsCiAgV2VpZ2h0VGlsZGU6ICgpID0+IFdlaWdodFRpbGRlLAogIFdoZWF0OiAoKSA9PiBXaGVhdCwKICBXaGVhdE9mZjogKCkgPT4gV2hlYXRPZmYsCiAgV2hvbGVXb3JkOiAoKSA9PiBXaG9sZVdvcmQsCiAgV2lmaTogKCkgPT4gV2lmaSwKICBXaWZpQ29nOiAoKSA9PiBXaWZpQ29nLAogIFdpZmlIaWdoOiAoKSA9PiBXaWZpSGlnaCwKICBXaWZpTG93OiAoKSA9PiBXaWZpTG93LAogIFdpZmlPZmY6ICgpID0+IFdpZmlPZmYsCiAgV2lmaVBlbjogKCkgPT4gV2lmaVBlbiwKICBXaWZpU3luYzogKCkgPT4gV2lmaVN5bmMsCiAgV2lmaVplcm86ICgpID0+IFdpZmlaZXJvLAogIFdpbmQ6ICgpID0+IFdpbmQsCiAgV2luZEFycm93RG93bjogKCkgPT4gV2luZEFycm93RG93biwKICBXaW5lOiAoKSA9PiBXaW5lLAogIFdpbmVPZmY6ICgpID0+IFdpbmVPZmYsCiAgV29ya2Zsb3c6ICgpID0+IFdvcmtmbG93LAogIFdvcm06ICgpID0+IFdvcm0sCiAgV3JhcFRleHQ6ICgpID0+IFRleHRXcmFwLAogIFdyZW5jaDogKCkgPT4gV3JlbmNoLAogIFg6ICgpID0+IFgsCiAgWENpcmNsZTogKCkgPT4gQ2lyY2xlWCwKICBYT2N0YWdvbjogKCkgPT4gT2N0YWdvblgsCiAgWFNxdWFyZTogKCkgPT4gU3F1YXJlWCwKICBZb3V0dWJlOiAoKSA9PiBZb3V0dWJlLAogIFphcDogKCkgPT4gWmFwLAogIFphcE9mZjogKCkgPT4gWmFwT2ZmLAogIFpvb21JbjogKCkgPT4gWm9vbUluLAogIFpvb21PdXQ6ICgpID0+IFpvb21PdXQKfSk7CnZhciBpbml0X2ljb25zQW5kQWxpYXNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnNBbmRBbGlhc2VzLmpzIigpIHsKICAgIGluaXRfYV9hcnJvd19kb3duKCk7CiAgICBpbml0X2FfYXJyb3dfdXAoKTsKICAgIGluaXRfYV9sYXJnZV9zbWFsbCgpOwogICAgaW5pdF9hY2Nlc3NpYmlsaXR5KCk7CiAgICBpbml0X2FjdGl2aXR5KCk7CiAgICBpbml0X2Fpcl92ZW50KCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrKCk7CiAgICBpbml0X2FpcnBsYXkoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfbWludXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfb2ZmKCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX3BsdXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2soKTsKICAgIGluaXRfYWxhcm1fc21va2UoKTsKICAgIGluaXRfYWxidW0oKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX3ZlcnRpY2FsKCk7CiAgICBpbml0X2FsaWduX2VuZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2FsaWduX2VuZF92ZXJ0aWNhbCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9lbmQoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2NlbnRlcigpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0KCk7CiAgICBpbml0X2FsaWduX3ZlcnRpY2FsX3NwYWNlX2Fyb3VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FtYnVsYW5jZSgpOwogICAgaW5pdF9hbXBlcnNhbmQoKTsKICAgIGluaXRfYW1wZXJzYW5kcygpOwogICAgaW5pdF9hbXBob3JhKCk7CiAgICBpbml0X2FuY2hvcigpOwogICAgaW5pdF9hbmdyeSgpOwogICAgaW5pdF9hbm5veWVkKCk7CiAgICBpbml0X2FudGVubmEoKTsKICAgIGluaXRfYW52aWwoKTsKICAgIGluaXRfYXBlcnR1cmUoKTsKICAgIGluaXRfYXBwX3dpbmRvd19tYWMoKTsKICAgIGluaXRfYXBwX3dpbmRvdygpOwogICAgaW5pdF9hcHBsZSgpOwogICAgaW5pdF9hcmNoaXZlX3Jlc3RvcmUoKTsKICAgIGluaXRfYXJjaGl2ZV94KCk7CiAgICBpbml0X2FyY2hpdmUoKTsKICAgIGluaXRfYXJtY2hhaXIoKTsKICAgIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfZG93bigpOwogICAgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19sZWZ0KCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXBfZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXAoKTsKICAgIGluaXRfYXJyb3dfZG93bl8wXzEoKTsKICAgIGluaXRfYXJyb3dfZG93bl8xXzAoKTsKICAgIGluaXRfYXJyb3dfZG93bl9hX3ooKTsKICAgIGluaXRfYXJyb3dfZG93bl9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfZG93bl90b19kb3QoKTsKICAgIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSgpOwogICAgaW5pdF9hcnJvd19kb3duX3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl91cCgpOwogICAgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93KCk7CiAgICBpbml0X2Fycm93X2Rvd25fel9hKCk7CiAgICBpbml0X2Fycm93X2Rvd24oKTsKICAgIGluaXRfYXJyb3dfbGVmdF9yaWdodCgpOwogICAgaW5pdF9hcnJvd19sZWZ0X2Zyb21fbGluZSgpOwogICAgaW5pdF9hcnJvd19sZWZ0X3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF90b19saW5lKCk7CiAgICBpbml0X2Fycm93X3JpZ2h0KCk7CiAgICBpbml0X2Fycm93X3VwXzBfMSgpOwogICAgaW5pdF9hcnJvd191cF8xXzAoKTsKICAgIGluaXRfYXJyb3dfdXBfYV96KCk7CiAgICBpbml0X2Fycm93X3VwX2Rvd24oKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QoKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9saW5lKCk7CiAgICBpbml0X2Fycm93X3VwX2xlZnQoKTsKICAgIGluaXRfYXJyb3dfdXBfbmFycm93X3dpZGUoKTsKICAgIGluaXRfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfdXBfdG9fbGluZSgpOwogICAgaW5pdF9hcnJvd191cF93aWRlX25hcnJvdygpOwogICAgaW5pdF9hcnJvd191cF96X2EoKTsKICAgIGluaXRfYXJyb3dfdXAoKTsKICAgIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSgpOwogICAgaW5pdF9hc3RlcmlzaygpOwogICAgaW5pdF9hdF9zaWduKCk7CiAgICBpbml0X2F0b20oKTsKICAgIGluaXRfYXVkaW9fbGluZXMoKTsKICAgIGluaXRfYXdhcmQoKTsKICAgIGluaXRfYXVkaW9fd2F2ZWZvcm0oKTsKICAgIGluaXRfYXhlKCk7CiAgICBpbml0X2F4aXNfM2QoKTsKICAgIGluaXRfYmFieSgpOwogICAgaW5pdF9iYWNrcGFjaygpOwogICAgaW5pdF9iYWRnZV9hbGVydCgpOwogICAgaW5pdF9iYWRnZV9jZW50KCk7CiAgICBpbml0X2JhZGdlX2NoZWNrKCk7CiAgICBpbml0X2JhZGdlX2RvbGxhcl9zaWduKCk7CiAgICBpbml0X2JhZGdlX2V1cm8oKTsKICAgIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlKCk7CiAgICBpbml0X2JhZGdlX2luZm8oKTsKICAgIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2JhZGdlX21pbnVzKCk7CiAgICBpbml0X2JhZGdlX3BlcmNlbnQoKTsKICAgIGluaXRfYmFkZ2VfcGx1cygpOwogICAgaW5pdF9iYWRnZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9iYWRnZV9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X2JhZGdlX3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfYmFkZ2Vfc3dpc3NfZnJhbmMoKTsKICAgIGluaXRfYmFkZ2VfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X2JhZGdlX3goKTsKICAgIGluaXRfYmFkZ2UoKTsKICAgIGluaXRfYmFnZ2FnZV9jbGFpbSgpOwogICAgaW5pdF9iYWxsb29uKCk7CiAgICBpbml0X2JhbigpOwogICAgaW5pdF9iYW5hbmEoKTsKICAgIGluaXRfYmFuZGFnZSgpOwogICAgaW5pdF9iYW5rbm90ZV9hcnJvd19kb3duKCk7CiAgICBpbml0X2Jhbmtub3RlX2Fycm93X3VwKCk7CiAgICBpbml0X2Jhbmtub3RlX3goKTsKICAgIGluaXRfYmFua25vdGUoKTsKICAgIGluaXRfYmFyY29kZSgpOwogICAgaW5pdF9iYXJyZWwoKTsKICAgIGluaXRfYmFzZWxpbmUoKTsKICAgIGluaXRfYmF0aCgpOwogICAgaW5pdF9iYXR0ZXJ5X2NoYXJnaW5nKCk7CiAgICBpbml0X2JhdHRlcnlfZnVsbCgpOwogICAgaW5pdF9iYXR0ZXJ5X2xvdygpOwogICAgaW5pdF9iYXR0ZXJ5X3BsdXMoKTsKICAgIGluaXRfYmF0dGVyeV9tZWRpdW0oKTsKICAgIGluaXRfYmF0dGVyeV93YXJuaW5nKCk7CiAgICBpbml0X2JhdHRlcnkoKTsKICAgIGluaXRfYmVha2VyKCk7CiAgICBpbml0X2JlYW5fb2ZmKCk7CiAgICBpbml0X2JlYW4oKTsKICAgIGluaXRfYmVkX2RvdWJsZSgpOwogICAgaW5pdF9iZWRfc2luZ2xlKCk7CiAgICBpbml0X2JlZCgpOwogICAgaW5pdF9iZWVmKCk7CiAgICBpbml0X2JlZXJfb2ZmKCk7CiAgICBpbml0X2JlZXIoKTsKICAgIGluaXRfYmVsbF9kb3QoKTsKICAgIGluaXRfYmVsbF9lbGVjdHJpYygpOwogICAgaW5pdF9iZWxsX21pbnVzKCk7CiAgICBpbml0X2JlbGxfb2ZmKCk7CiAgICBpbml0X2JlbGxfcGx1cygpOwogICAgaW5pdF9iZWxsX3JpbmcoKTsKICAgIGluaXRfYmVsbCgpOwogICAgaW5pdF9iZXR3ZWVuX2hvcml6b250YWxfZW5kKCk7CiAgICBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX2VuZCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX3N0YXJ0KCk7CiAgICBpbml0X2JpY2Vwc19mbGV4ZWQoKTsKICAgIGluaXRfYmlrZSgpOwogICAgaW5pdF9iaW5hcnkoKTsKICAgIGluaXRfYmlvaGF6YXJkKCk7CiAgICBpbml0X2Jpbm9jdWxhcnMoKTsKICAgIGluaXRfYmlyZGhvdXNlKCk7CiAgICBpbml0X2JpcmQoKTsKICAgIGluaXRfYml0Y29pbigpOwogICAgaW5pdF9ibGVuZCgpOwogICAgaW5pdF9ibGluZHMoKTsKICAgIGluaXRfYmxvY2tzKCk7CiAgICBpbml0X2JsdWV0b290aF9jb25uZWN0ZWQoKTsKICAgIGluaXRfYmx1ZXRvb3RoX29mZigpOwogICAgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nKCk7CiAgICBpbml0X2JsdWV0b290aCgpOwogICAgaW5pdF9ib2xkKCk7CiAgICBpbml0X2JvbHQoKTsKICAgIGluaXRfYm9tYigpOwogICAgaW5pdF9ib25lKCk7CiAgICBpbml0X2Jvb2tfYSgpOwogICAgaW5pdF9ib29rX2FsZXJ0KCk7CiAgICBpbml0X2Jvb2tfYXVkaW8oKTsKICAgIGluaXRfYm9va19jaGVjaygpOwogICAgaW5pdF9ib29rX2NvcHkoKTsKICAgIGluaXRfYm9va19kYXNoZWQoKTsKICAgIGluaXRfYm9va19kb3duKCk7CiAgICBpbml0X2Jvb2tfaGVhZHBob25lcygpOwogICAgaW5pdF9ib29rX2hlYXJ0KCk7CiAgICBpbml0X2Jvb2tfa2V5KCk7CiAgICBpbml0X2Jvb2tfaW1hZ2UoKTsKICAgIGluaXRfYm9va19sb2NrKCk7CiAgICBpbml0X2Jvb2tfbWFya2VkKCk7CiAgICBpbml0X2Jvb2tfbWludXMoKTsKICAgIGluaXRfYm9va19vcGVuX2NoZWNrKCk7CiAgICBpbml0X2Jvb2tfb3Blbl90ZXh0KCk7CiAgICBpbml0X2Jvb2tfb3BlbigpOwogICAgaW5pdF9ib29rX3BsdXMoKTsKICAgIGluaXRfYm9va19zZWFyY2goKTsKICAgIGluaXRfYm9va190ZXh0KCk7CiAgICBpbml0X2Jvb2tfdXAoKTsKICAgIGluaXRfYm9va190eXBlKCk7CiAgICBpbml0X2Jvb2tfdXBfMigpOwogICAgaW5pdF9ib29rX3VzZXIoKTsKICAgIGluaXRfYm9va194KCk7CiAgICBpbml0X2Jvb2soKTsKICAgIGluaXRfYm9va21hcmtfY2hlY2soKTsKICAgIGluaXRfYm9va21hcmtfbWludXMoKTsKICAgIGluaXRfYm9va21hcmtfcGx1cygpOwogICAgaW5pdF9ib29rbWFya194KCk7CiAgICBpbml0X2Jvb2ttYXJrKCk7CiAgICBpbml0X2Jvb21fYm94KCk7CiAgICBpbml0X2JvdF9tZXNzYWdlX3NxdWFyZSgpOwogICAgaW5pdF9ib3Rfb2ZmKCk7CiAgICBpbml0X2JvdCgpOwogICAgaW5pdF9ib3R0bGVfd2luZSgpOwogICAgaW5pdF9ib3dfYXJyb3coKTsKICAgIGluaXRfYm94KCk7CiAgICBpbml0X2JveGVzKCk7CiAgICBpbml0X2JyYWNlcygpOwogICAgaW5pdF9icmFja2V0cygpOwogICAgaW5pdF9icmFpbl9jaXJjdWl0KCk7CiAgICBpbml0X2JyYWluX2NvZygpOwogICAgaW5pdF9icmFpbigpOwogICAgaW5pdF9icmlja193YWxsX2ZpcmUoKTsKICAgIGluaXRfYnJpY2tfd2FsbF9zaGllbGQoKTsKICAgIGluaXRfYnJpY2tfd2FsbCgpOwogICAgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MoKTsKICAgIGluaXRfYnJpZWZjYXNlX2NvbnZleW9yX2JlbHQoKTsKICAgIGluaXRfYnJpZWZjYXNlX21lZGljYWwoKTsKICAgIGluaXRfYnJpZWZjYXNlKCk7CiAgICBpbml0X2JyaW5nX3RvX2Zyb250KCk7CiAgICBpbml0X2JydXNoX2NsZWFuaW5nKCk7CiAgICBpbml0X2JydXNoKCk7CiAgICBpbml0X2J1YmJsZXMoKTsKICAgIGluaXRfYnVnX29mZigpOwogICAgaW5pdF9idWdfcGxheSgpOwogICAgaW5pdF9idWcoKTsKICAgIGluaXRfYnVpbGRpbmdfMigpOwogICAgaW5pdF9idWlsZGluZygpOwogICAgaW5pdF9idXNfZnJvbnQoKTsKICAgIGluaXRfYnVzKCk7CiAgICBpbml0X2NhYmxlX2NhcigpOwogICAgaW5pdF9jYWJsZSgpOwogICAgaW5pdF9jYWtlX3NsaWNlKCk7CiAgICBpbml0X2Nha2UoKTsKICAgIGluaXRfY2FsY3VsYXRvcigpOwogICAgaW5pdF9jYWxlbmRhcl8xKCk7CiAgICBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2FsZW5kYXJfYXJyb3dfdXAoKTsKICAgIGluaXRfY2FsZW5kYXJfY2hlY2tfMigpOwogICAgaW5pdF9jYWxlbmRhcl9jaGVjaygpOwogICAgaW5pdF9jYWxlbmRhcl9jb2coKTsKICAgIGluaXRfY2FsZW5kYXJfY2xvY2soKTsKICAgIGluaXRfY2FsZW5kYXJfZGF5cygpOwogICAgaW5pdF9jYWxlbmRhcl9mb2xkKCk7CiAgICBpbml0X2NhbGVuZGFyX2hlYXJ0KCk7CiAgICBpbml0X2NhbGVuZGFyX21pbnVzXzIoKTsKICAgIGluaXRfY2FsZW5kYXJfbWludXMoKTsKICAgIGluaXRfY2FsZW5kYXJfb2ZmKCk7CiAgICBpbml0X2NhbGVuZGFyX3BsdXNfMigpOwogICAgaW5pdF9jYWxlbmRhcl9wbHVzKCk7CiAgICBpbml0X2NhbGVuZGFyX3JhbmdlKCk7CiAgICBpbml0X2NhbGVuZGFyX3NlYXJjaCgpOwogICAgaW5pdF9jYWxlbmRhcl9zeW5jKCk7CiAgICBpbml0X2NhbGVuZGFyX3hfMigpOwogICAgaW5pdF9jYWxlbmRhcl94KCk7CiAgICBpbml0X2NhbGVuZGFyKCk7CiAgICBpbml0X2NhbGVuZGFycygpOwogICAgaW5pdF9jYW1lcmFfb2ZmKCk7CiAgICBpbml0X2NhbWVyYSgpOwogICAgaW5pdF9jYW5keV9jYW5lKCk7CiAgICBpbml0X2NhbmR5X29mZigpOwogICAgaW5pdF9jYW5keSgpOwogICAgaW5pdF9jYW5uYWJpc19vZmYoKTsKICAgIGluaXRfY2FubmFiaXMoKTsKICAgIGluaXRfY2FwdGlvbnNfb2ZmKCk7CiAgICBpbml0X2NhcHRpb25zKCk7CiAgICBpbml0X2Nhcl9mcm9udCgpOwogICAgaW5pdF9jYXJfdGF4aV9mcm9udCgpOwogICAgaW5pdF9jYXIoKTsKICAgIGluaXRfY2FyYXZhbigpOwogICAgaW5pdF9jYXJkX3NpbSgpOwogICAgaW5pdF9jYXJyb3QoKTsKICAgIGluaXRfY2FzZV9sb3dlcigpOwogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZSgpOwogICAgaW5pdF9jYXNlX3VwcGVyKCk7CiAgICBpbml0X2Nhc3NldHRlX3RhcGUoKTsKICAgIGluaXRfY2FzdCgpOwogICAgaW5pdF9jYXN0bGUoKTsKICAgIGluaXRfY2F0KCk7CiAgICBpbml0X2NjdHYoKTsKICAgIGluaXRfY2hhcnRfYXJlYSgpOwogICAgaW5pdF9jaGFydF9iYXJfYmlnKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2JhcigpOwogICAgaW5pdF9jaGFydF9jYW5kbGVzdGljaygpOwogICAgaW5pdF9jaGFydF9jb2x1bW5fYmlnKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbigpOwogICAgaW5pdF9jaGFydF9nYW50dCgpOwogICAgaW5pdF9jaGFydF9saW5lKCk7CiAgICBpbml0X2NoYXJ0X25ldHdvcmsoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19jb2x1bW5fZGVjcmVhc2luZygpOwogICAgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29sdW1uKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19nYW50dCgpOwogICAgaW5pdF9jaGFydF9waWUoKTsKICAgIGluaXRfY2hhcnRfc2NhdHRlcigpOwogICAgaW5pdF9jaGFydF9zcGxpbmUoKTsKICAgIGluaXRfY2hlY2tfY2hlY2soKTsKICAgIGluaXRfY2hlY2tfbGluZSgpOwogICAgaW5pdF9jaGVjaygpOwogICAgaW5pdF9jaGVmX2hhdCgpOwogICAgaW5pdF9jaGVycnkoKTsKICAgIGluaXRfY2hlc3NfYmlzaG9wKCk7CiAgICBpbml0X2NoZXNzX2tpbmcoKTsKICAgIGluaXRfY2hlc3Nfa25pZ2h0KCk7CiAgICBpbml0X2NoZXNzX3Bhd24oKTsKICAgIGluaXRfY2hlc3NfcXVlZW4oKTsKICAgIGluaXRfY2hldnJvbl9kb3duKCk7CiAgICBpbml0X2NoZXZyb25fZmlyc3QoKTsKICAgIGluaXRfY2hlc3Nfcm9vaygpOwogICAgaW5pdF9jaGV2cm9uX2xhc3QoKTsKICAgIGluaXRfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NoZXZyb25fcmlnaHQoKTsKICAgIGluaXRfY2hldnJvbl91cCgpOwogICAgaW5pdF9jaGV2cm9uc19kb3duX3VwKCk7CiAgICBpbml0X2NoZXZyb25zX2Rvd24oKTsKICAgIGluaXRfY2hldnJvbnNfbGVmdF9yaWdodF9lbGxpcHNpcygpOwogICAgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0KCk7CiAgICBpbml0X2NoZXZyb25zX2xlZnQoKTsKICAgIGluaXRfY2hldnJvbnNfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9jaGV2cm9uc19yaWdodCgpOwogICAgaW5pdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2NoZXZyb25zX3VwKCk7CiAgICBpbml0X2NodXJjaCgpOwogICAgaW5pdF9jaWdhcmV0dGVfb2ZmKCk7CiAgICBpbml0X2Nocm9taXVtKCk7CiAgICBpbml0X2NpZ2FyZXR0ZSgpOwogICAgaW5pdF9jaXJjbGVfYWxlcnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2NoZWNrKCk7CiAgICBpbml0X2NpcmNsZV9jaGVja19iaWcoKTsKICAgIGluaXRfY2lyY2xlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9jaXJjbGVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X2NpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RpdmlkZSgpOwogICAgaW5pdF9jaXJjbGVfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RvdCgpOwogICAgaW5pdF9jaXJjbGVfZWxsaXBzaXMoKTsKICAgIGluaXRfY2lyY2xlX2VxdWFsKCk7CiAgICBpbml0X2NpcmNsZV9mYWRpbmdfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2ZhZGluZ19wbHVzKCk7CiAgICBpbml0X2NpcmNsZV9nYXVnZSgpOwogICAgaW5pdF9jaXJjbGVfbWludXMoKTsKICAgIGluaXRfY2lyY2xlX29mZigpOwogICAgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYoKTsKICAgIGluaXRfY2lyY2xlX3BhcmtpbmcoKTsKICAgIGluaXRfY2lyY2xlX3BhdXNlKCk7CiAgICBpbml0X2NpcmNsZV9wZXJjZW50KCk7CiAgICBpbml0X2NpcmNsZV9waWxlKCk7CiAgICBpbml0X2NpcmNsZV9wbGF5KCk7CiAgICBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9jaXJjbGVfcGx1cygpOwogICAgaW5pdF9jaXJjbGVfcG93ZXIoKTsKICAgIGluaXRfY2lyY2xlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoXzIoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoKCk7CiAgICBpbml0X2NpcmNsZV9zbWFsbCgpOwogICAgaW5pdF9jaXJjbGVfc3RhcigpOwogICAgaW5pdF9jaXJjbGVfc3RvcCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcl9yb3VuZCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcigpOwogICAgaW5pdF9jaXJjbGVfeCgpOwogICAgaW5pdF9jaXJjbGUoKTsKICAgIGluaXRfY2lyY3VpdF9ib2FyZCgpOwogICAgaW5pdF9jaXRydXMoKTsKICAgIGluaXRfY2xhcHBlcmJvYXJkKCk7CiAgICBpbml0X2NsaXBib2FyZF9jaGVjaygpOwogICAgaW5pdF9jbGlwYm9hcmRfY2xvY2soKTsKICAgIGluaXRfY2xpcGJvYXJkX2NvcHkoKTsKICAgIGluaXRfY2xpcGJvYXJkX2xpc3QoKTsKICAgIGluaXRfY2xpcGJvYXJkX21pbnVzKCk7CiAgICBpbml0X2NsaXBib2FyZF9wYXN0ZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfcGVuX2xpbmUoKTsKICAgIGluaXRfY2xpcGJvYXJkX3BlbigpOwogICAgaW5pdF9jbGlwYm9hcmRfcGx1cygpOwogICAgaW5pdF9jbGlwYm9hcmRfdHlwZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfeCgpOwogICAgaW5pdF9jbGlwYm9hcmQoKTsKICAgIGluaXRfY2xvY2tfMSgpOwogICAgaW5pdF9jbG9ja18xMCgpOwogICAgaW5pdF9jbG9ja18xMSgpOwogICAgaW5pdF9jbG9ja18xMigpOwogICAgaW5pdF9jbG9ja18yKCk7CiAgICBpbml0X2Nsb2NrXzMoKTsKICAgIGluaXRfY2xvY2tfNCgpOwogICAgaW5pdF9jbG9ja181KCk7CiAgICBpbml0X2Nsb2NrXzYoKTsKICAgIGluaXRfY2xvY2tfNygpOwogICAgaW5pdF9jbG9ja184KCk7CiAgICBpbml0X2Nsb2NrXzkoKTsKICAgIGluaXRfY2xvY2tfYWxlcnQoKTsKICAgIGluaXRfY2xvY2tfYXJyb3dfZG93bigpOwogICAgaW5pdF9jbG9ja19hcnJvd191cCgpOwogICAgaW5pdF9jbG9ja19jaGVjaygpOwogICAgaW5pdF9jbG9ja19mYWRpbmcoKTsKICAgIGluaXRfY2xvY2tfcGx1cygpOwogICAgaW5pdF9jbG9jaygpOwogICAgaW5pdF9jbG9zZWRfY2FwdGlvbigpOwogICAgaW5pdF9jbG91ZF9hbGVydCgpOwogICAgaW5pdF9jbG91ZF9iYWNrdXAoKTsKICAgIGluaXRfY2xvdWRfY2hlY2soKTsKICAgIGluaXRfY2xvdWRfY29nKCk7CiAgICBpbml0X2Nsb3VkX2Rvd25sb2FkKCk7CiAgICBpbml0X2Nsb3VkX2RyaXp6bGUoKTsKICAgIGluaXRfY2xvdWRfZm9nKCk7CiAgICBpbml0X2Nsb3VkX2hhaWwoKTsKICAgIGluaXRfY2xvdWRfbGlnaHRuaW5nKCk7CiAgICBpbml0X2Nsb3VkX21vb25fcmFpbigpOwogICAgaW5pdF9jbG91ZF9tb29uKCk7CiAgICBpbml0X2Nsb3VkX3JhaW5fd2luZCgpOwogICAgaW5pdF9jbG91ZF9vZmYoKTsKICAgIGluaXRfY2xvdWRfcmFpbigpOwogICAgaW5pdF9jbG91ZF9zbm93KCk7CiAgICBpbml0X2Nsb3VkX3N1bl9yYWluKCk7CiAgICBpbml0X2Nsb3VkX3N1bigpOwogICAgaW5pdF9jbG91ZF9zeW5jKCk7CiAgICBpbml0X2Nsb3VkX3VwbG9hZCgpOwogICAgaW5pdF9jbG91ZCgpOwogICAgaW5pdF9jbG91ZHkoKTsKICAgIGluaXRfY2xvdmVyKCk7CiAgICBpbml0X2NsdWIoKTsKICAgIGluaXRfY29kZV94bWwoKTsKICAgIGluaXRfY29kZTQoKTsKICAgIGluaXRfY29kZXBlbigpOwogICAgaW5pdF9jb2Rlc2FuZGJveCgpOwogICAgaW5pdF9jb2ZmZWUoKTsKICAgIGluaXRfY29pbnMoKTsKICAgIGluaXRfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMigpOwogICAgaW5pdF9jb2x1bW5zXzNfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMygpOwogICAgaW5pdF9jb2x1bW5zXzQoKTsKICAgIGluaXRfY29tYmluZSgpOwogICAgaW5pdF9jb21tYW5kKCk7CiAgICBpbml0X2NvbXBhc3MoKTsKICAgIGluaXRfY29tcG9uZW50KCk7CiAgICBpbml0X2NvbXB1dGVyKCk7CiAgICBpbml0X2NvbmNpZXJnZV9iZWxsKCk7CiAgICBpbml0X2NvbmUoKTsKICAgIGluaXRfY29uc3RydWN0aW9uKCk7CiAgICBpbml0X2NvbnRhY3Rfcm91bmQoKTsKICAgIGluaXRfY29udGFjdDIoKTsKICAgIGluaXRfY29udGFpbmVyMygpOwogICAgaW5pdF9jb250cmFzdCgpOwogICAgaW5pdF9jb29raWUoKTsKICAgIGluaXRfY29va2luZ19wb3QoKTsKICAgIGluaXRfY29weV9jaGVjaygpOwogICAgaW5pdF9jb3B5X21pbnVzKCk7CiAgICBpbml0X2NvcHlfcGx1cygpOwogICAgaW5pdF9jb3B5X3NsYXNoKCk7CiAgICBpbml0X2NvcHkoKTsKICAgIGluaXRfY29weV94KCk7CiAgICBpbml0X2NvcHlsZWZ0KCk7CiAgICBpbml0X2NvcHlyaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9yaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl9sZWZ0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX2xlZnRfdXAoKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X3VwKCk7CiAgICBpbml0X2Nvcm5lcl91cF9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl91cF9yaWdodCgpOwogICAgaW5pdF9jcHUoKTsKICAgIGluaXRfY3JlYXRpdmVfY29tbW9ucygpOwogICAgaW5pdF9jcmVkaXRfY2FyZCgpOwogICAgaW5pdF9jcm9pc3NhbnQoKTsKICAgIGluaXRfY3JvcCgpOwogICAgaW5pdF9jcm9zcygpOwogICAgaW5pdF9jcm9zc2hhaXIoKTsKICAgIGluaXRfY3Jvd24oKTsKICAgIGluaXRfY3Vib2lkKCk7CiAgICBpbml0X2N1cF9zb2RhKCk7CiAgICBpbml0X2N1cnJlbmN5MigpOwogICAgaW5pdF9jeWxpbmRlcigpOwogICAgaW5pdF9kYW0oKTsKICAgIGluaXRfZGF0YWJhc2VfYmFja3VwKCk7CiAgICBpbml0X2RhdGFiYXNlX3phcCgpOwogICAgaW5pdF9kYXRhYmFzZTIoKTsKICAgIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCgpOwogICAgaW5pdF9kZWxldGUyKCk7CiAgICBpbml0X2Rlc3NlcnQoKTsKICAgIGluaXRfZGlhbWV0ZXIoKTsKICAgIGluaXRfZGlhbW9uZF9taW51cygpOwogICAgaW5pdF9kaWFtb25kX3BlcmNlbnQoKTsKICAgIGluaXRfZGlhbW9uZF9wbHVzKCk7CiAgICBpbml0X2RpY2VfMSgpOwogICAgaW5pdF9kaWFtb25kKCk7CiAgICBpbml0X2RpY2VfMigpOwogICAgaW5pdF9kaWNlXzMoKTsKICAgIGluaXRfZGljZV81KCk7CiAgICBpbml0X2RpY2VfNigpOwogICAgaW5pdF9kaWNlXzQoKTsKICAgIGluaXRfZGljZXMoKTsKICAgIGluaXRfZGlmZigpOwogICAgaW5pdF9kaXNjXzIoKTsKICAgIGluaXRfZGlzY18zKCk7CiAgICBpbml0X2Rpc2NfYWxidW0oKTsKICAgIGluaXRfZGlzYygpOwogICAgaW5pdF9kaXZpZGUoKTsKICAgIGluaXRfZG5hX29mZigpOwogICAgaW5pdF9kb2NrKCk7CiAgICBpbml0X2RuYSgpOwogICAgaW5pdF9kb2coKTsKICAgIGluaXRfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfZG9udXQoKTsKICAgIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkKCk7CiAgICBpbml0X2Rvb3JfY2xvc2VkKCk7CiAgICBpbml0X2RvdCgpOwogICAgaW5pdF9kb29yX29wZW4oKTsKICAgIGluaXRfZG93bmxvYWQoKTsKICAgIGluaXRfZHJhZnRpbmdfY29tcGFzcygpOwogICAgaW5pdF9kcmFtYSgpOwogICAgaW5pdF9kcmliYmJsZSgpOwogICAgaW5pdF9kcmlsbCgpOwogICAgaW5pdF9kcm9uZSgpOwogICAgaW5pdF9kcm9wbGV0X29mZigpOwogICAgaW5pdF9kcm9wbGV0KCk7CiAgICBpbml0X2Ryb3BsZXRzKCk7CiAgICBpbml0X2RydW0oKTsKICAgIGluaXRfZHJ1bXN0aWNrKCk7CiAgICBpbml0X2R1bWJiZWxsKCk7CiAgICBpbml0X2Vhcl9vZmYoKTsKICAgIGluaXRfZWFyKCk7CiAgICBpbml0X2VhcnRoX2xvY2soKTsKICAgIGluaXRfZWFydGgoKTsKICAgIGluaXRfZWNsaXBzZSgpOwogICAgaW5pdF9lZ2dfZnJpZWQoKTsKICAgIGluaXRfZWdnX29mZigpOwogICAgaW5pdF9lZ2coKTsKICAgIGluaXRfZWxsaXBzaXNfdmVydGljYWwoKTsKICAgIGluaXRfZWxsaXBzaXMoKTsKICAgIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSgpOwogICAgaW5pdF9lcXVhbF9ub3QoKTsKICAgIGluaXRfZXJhc2VyKCk7CiAgICBpbml0X2VxdWFsKCk7CiAgICBpbml0X2V0aGVybmV0X3BvcnQoKTsKICAgIGluaXRfZXVybygpOwogICAgaW5pdF9ldl9jaGFyZ2VyKCk7CiAgICBpbml0X2V4dGVybmFsX2xpbmsoKTsKICAgIGluaXRfZXhwYW5kMigpOwogICAgaW5pdF9leWVfY2xvc2VkKCk7CiAgICBpbml0X2V5ZV9vZmYoKTsKICAgIGluaXRfZXllKCk7CiAgICBpbml0X2ZhY3RvcnkoKTsKICAgIGluaXRfZmFjZWJvb2soKTsKICAgIGluaXRfZmFuKCk7CiAgICBpbml0X2Zhc3RfZm9yd2FyZCgpOwogICAgaW5pdF9mZWF0aGVyKCk7CiAgICBpbml0X2ZlbmNlKCk7CiAgICBpbml0X2ZlcnJpc193aGVlbCgpOwogICAgaW5pdF9maWdtYSgpOwogICAgaW5pdF9maWxlX2FyY2hpdmUoKTsKICAgIGluaXRfZmlsZV9heGlzXzNkKCk7CiAgICBpbml0X2ZpbGVfYmFkZ2UoKTsKICAgIGluaXRfZmlsZV9icmFjZXNfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfYm94KCk7CiAgICBpbml0X2ZpbGVfYnJhY2VzKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfY29sdW1uX2luY3JlYXNpbmcoKTsKICAgIGluaXRfZmlsZV9jaGFydF9jb2x1bW4oKTsKICAgIGluaXRfZmlsZV9jaGFydF9saW5lKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfcGllKCk7CiAgICBpbml0X2ZpbGVfY2hlY2tfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY2hlY2soKTsKICAgIGluaXRfZmlsZV9jbG9jaygpOwogICAgaW5pdF9maWxlX2NvZGVfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY29kZSgpOwogICAgaW5pdF9maWxlX2NvZygpOwogICAgaW5pdF9maWxlX2RpZmYoKTsKICAgIGluaXRfZmlsZV9kaWdpdCgpOwogICAgaW5pdF9maWxlX2Rvd24oKTsKICAgIGluaXRfZmlsZV9leGNsYW1hdGlvbl9wb2ludCgpOwogICAgaW5pdF9maWxlX2hlYWRwaG9uZSgpOwogICAgaW5pdF9maWxlX2hlYXJ0KCk7CiAgICBpbml0X2ZpbGVfaW1hZ2UoKTsKICAgIGluaXRfZmlsZV9pbnB1dCgpOwogICAgaW5pdF9maWxlX2tleSgpOwogICAgaW5pdF9maWxlX2xvY2soKTsKICAgIGluaXRfZmlsZV9taW51c19jb3JuZXIoKTsKICAgIGluaXRfZmlsZV9tdXNpYygpOwogICAgaW5pdF9maWxlX21pbnVzKCk7CiAgICBpbml0X2ZpbGVfb3V0cHV0KCk7CiAgICBpbml0X2ZpbGVfcGVuX2xpbmUoKTsKICAgIGluaXRfZmlsZV9wZW4oKTsKICAgIGluaXRfZmlsZV9wbGF5KCk7CiAgICBpbml0X2ZpbGVfcGx1cygpOwogICAgaW5pdF9maWxlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfZmlsZV9wbHVzX2Nvcm5lcigpOwogICAgaW5pdF9maWxlX3NjYW4oKTsKICAgIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfc2VhcmNoKCk7CiAgICBpbml0X2ZpbGVfc2lnbmFsKCk7CiAgICBpbml0X2ZpbGVfc3ByZWFkc2hlZXQoKTsKICAgIGluaXRfZmlsZV9zbGlkZXJzKCk7CiAgICBpbml0X2ZpbGVfc3RhY2soKTsKICAgIGluaXRfZmlsZV9zeW1saW5rKCk7CiAgICBpbml0X2ZpbGVfdGVybWluYWwoKTsKICAgIGluaXRfZmlsZV90ZXh0KCk7CiAgICBpbml0X2ZpbGVfdHlwZV9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV90eXBlKCk7CiAgICBpbml0X2ZpbGVfdXAoKTsKICAgIGluaXRfZmlsZV91c2VyKCk7CiAgICBpbml0X2ZpbGVfdm9sdW1lKCk7CiAgICBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhKCk7CiAgICBpbml0X2ZpbGVfeF9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV94KCk7CiAgICBpbml0X2ZpbGUoKTsKICAgIGluaXRfZmlsZXMoKTsKICAgIGluaXRfZmlsbSgpOwogICAgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuKCk7CiAgICBpbml0X2ZpcmVfZXh0aW5ndWlzaGVyKCk7CiAgICBpbml0X2Zpc2hfb2ZmKCk7CiAgICBpbml0X2Zpc2hfc3ltYm9sKCk7CiAgICBpbml0X2Zpc2goKTsKICAgIGluaXRfZmlzaGluZ19ob29rKCk7CiAgICBpbml0X2ZsYWdfb2ZmKCk7CiAgICBpbml0X2ZsYWdfdHJpYW5nbGVfbGVmdCgpOwogICAgaW5pdF9mbGFnX3RyaWFuZ2xlX3JpZ2h0KCk7CiAgICBpbml0X2ZsYW1lX2tpbmRsaW5nKCk7CiAgICBpbml0X2ZsYWcoKTsKICAgIGluaXRfZmxhbWUoKTsKICAgIGluaXRfZmxhc2hsaWdodF9vZmYoKTsKICAgIGluaXRfZmxhc2hsaWdodCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsX29mZigpOwogICAgaW5pdF9mbGFza19yb3VuZCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsKCk7CiAgICBpbml0X2ZsaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9mbGlwX2hvcml6b250YWxfMigpOwogICAgaW5pdF9mbGlwX3ZlcnRpY2FsXzIoKTsKICAgIGluaXRfZmxpcF92ZXJ0aWNhbCgpOwogICAgaW5pdF9mbG93ZXJfMigpOwogICAgaW5pdF9mbG93ZXIoKTsKICAgIGluaXRfZm9jdXMoKTsKICAgIGluaXRfZm9sZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2ZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfZm9sZGVyX2FyY2hpdmUoKTsKICAgIGluaXRfZm9sZGVyX2NoZWNrKCk7CiAgICBpbml0X2ZvbGRlcl9jbG9jaygpOwogICAgaW5pdF9mb2xkZXJfY2xvc2VkKCk7CiAgICBpbml0X2ZvbGRlcl9jb2RlKCk7CiAgICBpbml0X2ZvbGRlcl9jb2coKTsKICAgIGluaXRfZm9sZGVyX2RvdCgpOwogICAgaW5pdF9mb2xkZXJfZG93bigpOwogICAgaW5pdF9mb2xkZXJfZ2l0XzIoKTsKICAgIGluaXRfZm9sZGVyX2dpdCgpOwogICAgaW5pdF9mb2xkZXJfaGVhcnQoKTsKICAgIGluaXRfZm9sZGVyX2lucHV0KCk7CiAgICBpbml0X2ZvbGRlcl9rYW5iYW4oKTsKICAgIGluaXRfZm9sZGVyX2tleSgpOwogICAgaW5pdF9mb2xkZXJfbG9jaygpOwogICAgaW5pdF9mb2xkZXJfbWludXMoKTsKICAgIGluaXRfZm9sZGVyX29wZW5fZG90KCk7CiAgICBpbml0X2ZvbGRlcl9vcGVuKCk7CiAgICBpbml0X2ZvbGRlcl9vdXRwdXQoKTsKICAgIGluaXRfZm9sZGVyX3BlbigpOwogICAgaW5pdF9mb2xkZXJfcGx1cygpOwogICAgaW5pdF9mb2xkZXJfcm9vdCgpOwogICAgaW5pdF9mb2xkZXJfc2VhcmNoXzIoKTsKICAgIGluaXRfZm9sZGVyX3NlYXJjaCgpOwogICAgaW5pdF9mb2xkZXJfc3ltbGluaygpOwogICAgaW5pdF9mb2xkZXJfc3luYygpOwogICAgaW5pdF9mb2xkZXJfdHJlZSgpOwogICAgaW5pdF9mb2xkZXJfdXAoKTsKICAgIGluaXRfZm9sZGVyX3goKTsKICAgIGluaXRfZm9sZGVyKCk7CiAgICBpbml0X2ZvbGRlcnMoKTsKICAgIGluaXRfZm9vdHByaW50cygpOwogICAgaW5pdF9mb3JrbGlmdCgpOwogICAgaW5pdF9mb3JtKCk7CiAgICBpbml0X2ZvcndhcmQoKTsKICAgIGluaXRfZnJhbWUoKTsKICAgIGluaXRfZnJhbWVyKCk7CiAgICBpbml0X2Zyb3duKCk7CiAgICBpbml0X2Z1ZWwoKTsKICAgIGluaXRfZnVsbHNjcmVlbigpOwogICAgaW5pdF9mdW5uZWxfcGx1cygpOwogICAgaW5pdF9mdW5uZWxfeCgpOwogICAgaW5pdF9mdW5uZWwoKTsKICAgIGluaXRfZ2FsbGVyeV9ob3Jpem9udGFsX2VuZCgpOwogICAgaW5pdF9nYWxsZXJ5X2hvcml6b250YWwoKTsKICAgIGluaXRfZ2FsbGVyeV90aHVtYm5haWxzKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWxfZW5kKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWwoKTsKICAgIGluaXRfZ2FtZXBhZF8yKCk7CiAgICBpbml0X2dhbWVwYWRfZGlyZWN0aW9uYWwoKTsKICAgIGluaXRfZ2FtZXBhZCgpOwogICAgaW5pdF9nYXVnZSgpOwogICAgaW5pdF9nYXZlbCgpOwogICAgaW5pdF9nZW0oKTsKICAgIGluaXRfZ2VvcmdpYW5fbGFyaSgpOwogICAgaW5pdF9naG9zdCgpOwogICAgaW5pdF9naWZ0KCk7CiAgICBpbml0X2dpdF9icmFuY2hfbWludXMoKTsKICAgIGluaXRfZ2l0X2JyYW5jaCgpOwogICAgaW5pdF9naXRfYnJhbmNoX3BsdXMoKTsKICAgIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2dpdF9jb21taXRfdmVydGljYWwoKTsKICAgIGluaXRfZ2l0X2NvbXBhcmVfYXJyb3dzKCk7CiAgICBpbml0X2dpdF9jb21wYXJlKCk7CiAgICBpbml0X2dpdF9mb3JrKCk7CiAgICBpbml0X2dpdF9ncmFwaCgpOwogICAgaW5pdF9naXRfbWVyZ2UoKTsKICAgIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Nsb3NlZCgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2RyYWZ0KCk7CiAgICBpbml0X2dpdF9wdWxsX3JlcXVlc3QoKTsKICAgIGluaXRfZ2l0aHViKCk7CiAgICBpbml0X2dpdGxhYigpOwogICAgaW5pdF9nbGFzc193YXRlcigpOwogICAgaW5pdF9nbGFzc2VzKCk7CiAgICBpbml0X2dsb2JlX2xvY2soKTsKICAgIGluaXRfZ2xvYmUoKTsKICAgIGluaXRfZ29hbCgpOwogICAgaW5pdF9ncHUoKTsKICAgIGluaXRfZ3JhZHVhdGlvbl9jYXAoKTsKICAgIGluaXRfZ3JhcGUoKTsKICAgIGluaXRfZ3JpZF8yeDJfY2hlY2soKTsKICAgIGluaXRfZ3JpZF8yeDJfcGx1cygpOwogICAgaW5pdF9ncmlkXzJ4Ml94KCk7CiAgICBpbml0X2dyaWRfMngyKCk7CiAgICBpbml0X2dyaWRfM3gyKCk7CiAgICBpbml0X2dyaWRfM3gzKCk7CiAgICBpbml0X2dyaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9ncmlwX3ZlcnRpY2FsKCk7CiAgICBpbml0X2dyaXAoKTsKICAgIGluaXRfZ3JvdXAoKTsKICAgIGluaXRfaGFtKCk7CiAgICBpbml0X2d1aXRhcigpOwogICAgaW5pdF9oYW1idXJnZXIoKTsKICAgIGluaXRfaGFtbWVyKCk7CiAgICBpbml0X2hhbmRfY29pbnMoKTsKICAgIGluaXRfaGFuZF9maXN0KCk7CiAgICBpbml0X2hhbmRfZ3JhYigpOwogICAgaW5pdF9oYW5kX2hlYXJ0KCk7CiAgICBpbml0X2hhbmRfaGVscGluZygpOwogICAgaW5pdF9oYW5kX21ldGFsKCk7CiAgICBpbml0X2hhbmRfcGxhdHRlcigpOwogICAgaW5pdF9oYW5kKCk7CiAgICBpbml0X2hhbmRiYWcoKTsKICAgIGluaXRfaGFuZHNoYWtlKCk7CiAgICBpbml0X2hhcmRfZHJpdmVfZG93bmxvYWQoKTsKICAgIGluaXRfaGFyZF9kcml2ZV91cGxvYWQoKTsKICAgIGluaXRfaGFyZF9oYXQoKTsKICAgIGluaXRfaGFzaCgpOwogICAgaW5pdF9oYXJkX2RyaXZlKCk7CiAgICBpbml0X2hhdF9nbGFzc2VzKCk7CiAgICBpbml0X2hhemUoKTsKICAgIGluaXRfaGQoKTsKICAgIGluaXRfaGRtaV9wb3J0KCk7CiAgICBpbml0X2hlYWRpbmdfMSgpOwogICAgaW5pdF9oZWFkaW5nXzMoKTsKICAgIGluaXRfaGVhZGluZ18yKCk7CiAgICBpbml0X2hlYWRpbmdfNCgpOwogICAgaW5pdF9oZWFkaW5nXzUoKTsKICAgIGluaXRfaGVhZGluZ182KCk7CiAgICBpbml0X2hlYWRpbmczKCk7CiAgICBpbml0X2hlYWRwaG9uZV9vZmYoKTsKICAgIGluaXRfaGVhZHBob25lcygpOwogICAgaW5pdF9oZWFkc2V0KCk7CiAgICBpbml0X2hlYXJ0X2NyYWNrKCk7CiAgICBpbml0X2hlYXJ0X2hhbmRzaGFrZSgpOwogICAgaW5pdF9oZWFydF9taW51cygpOwogICAgaW5pdF9oZWFydF9vZmYoKTsKICAgIGluaXRfaGVhcnRfcGx1cygpOwogICAgaW5pdF9oZWFydF9wdWxzZSgpOwogICAgaW5pdF9oZWF0ZXIoKTsKICAgIGluaXRfaGVhcnQoKTsKICAgIGluaXRfaGVsaWNvcHRlcigpOwogICAgaW5pdF9oZXhhZ29uKCk7CiAgICBpbml0X2hpZ2hsaWdodGVyKCk7CiAgICBpbml0X2hpc3RvcnkoKTsKICAgIGluaXRfaG9wKCk7CiAgICBpbml0X2hvcF9vZmYoKTsKICAgIGluaXRfaG9zcGl0YWwoKTsKICAgIGluaXRfaG90ZWwoKTsKICAgIGluaXRfaG91cmdsYXNzKCk7CiAgICBpbml0X2hvdXNlX2hlYXJ0KCk7CiAgICBpbml0X2hvdXNlX3BsdWcoKTsKICAgIGluaXRfaG91c2VfcGx1cygpOwogICAgaW5pdF9ob3VzZV93aWZpKCk7CiAgICBpbml0X2hvdXNlKCk7CiAgICBpbml0X2ljZV9jcmVhbV9ib3dsKCk7CiAgICBpbml0X2ljZV9jcmVhbV9jb25lKCk7CiAgICBpbml0X2lkX2NhcmRfbGFueWFyZCgpOwogICAgaW5pdF9pZF9jYXJkKCk7CiAgICBpbml0X2ltYWdlX2Rvd24oKTsKICAgIGluaXRfaW1hZ2VfbWludXMoKTsKICAgIGluaXRfaW1hZ2Vfb2ZmKCk7CiAgICBpbml0X2ltYWdlX3BsdXMoKTsKICAgIGluaXRfaW1hZ2VfcGxheSgpOwogICAgaW5pdF9pbWFnZV91cCgpOwogICAgaW5pdF9pbWFnZV91cHNjYWxlKCk7CiAgICBpbml0X2ltYWdlMygpOwogICAgaW5pdF9pbWFnZXMoKTsKICAgIGluaXRfaW1wb3J0KCk7CiAgICBpbml0X2luYm94KCk7CiAgICBpbml0X2luZGlhbl9ydXBlZSgpOwogICAgaW5pdF9pbmZpbml0eSgpOwogICAgaW5pdF9pbmZvMigpOwogICAgaW5pdF9pbnNwZWN0aW9uX3BhbmVsKCk7CiAgICBpbml0X2luc3RhZ3JhbSgpOwogICAgaW5pdF9pdGFsaWMoKTsKICAgIGluaXRfaXRlcmF0aW9uX2NjdygpOwogICAgaW5pdF9pdGVyYXRpb25fY3coKTsKICAgIGluaXRfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2pveXN0aWNrKCk7CiAgICBpbml0X2thbmJhbigpOwogICAgaW5pdF9rYXlhaygpOwogICAgaW5pdF9rZXlfcm91bmQoKTsKICAgIGluaXRfa2V5X3NxdWFyZSgpOwogICAgaW5pdF9rZXkoKTsKICAgIGluaXRfa2V5Ym9hcmRfbXVzaWMoKTsKICAgIGluaXRfa2V5Ym9hcmRfb2ZmKCk7CiAgICBpbml0X2tleWJvYXJkKCk7CiAgICBpbml0X2xhbXBfY2VpbGluZygpOwogICAgaW5pdF9sYW1wX2Rlc2soKTsKICAgIGluaXRfbGFtcF9mbG9vcigpOwogICAgaW5pdF9sYW1wX3dhbGxfZG93bigpOwogICAgaW5pdF9sYW1wX3dhbGxfdXAoKTsKICAgIGluaXRfbGFtcCgpOwogICAgaW5pdF9sYW5kX3Bsb3QoKTsKICAgIGluaXRfbGFuZG1hcmsoKTsKICAgIGluaXRfbGFuZ3VhZ2VzKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsX2NoZWNrKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsKCk7CiAgICBpbml0X2xhcHRvcCgpOwogICAgaW5pdF9sYXNzb19zZWxlY3QoKTsKICAgIGluaXRfbGFzc28oKTsKICAgIGluaXRfbGF1Z2goKTsKICAgIGluaXRfbGF5ZXJzXzIoKTsKICAgIGluaXRfbGF5ZXJzKCk7CiAgICBpbml0X2xheWVyc19wbHVzKCk7CiAgICBpbml0X2xheW91dF9kYXNoYm9hcmQoKTsKICAgIGluaXRfbGF5b3V0X2dyaWQoKTsKICAgIGluaXRfbGF5b3V0X2xpc3QoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX2xlZnQoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX3RvcCgpOwogICAgaW5pdF9sYXlvdXRfdGVtcGxhdGUoKTsKICAgIGluaXRfbGVhZigpOwogICAgaW5pdF9sZWFmeV9ncmVlbigpOwogICAgaW5pdF9sZWN0ZXJuKCk7CiAgICBpbml0X2xpYnJhcnlfYmlnKCk7CiAgICBpbml0X2xpYnJhcnkoKTsKICAgIGluaXRfbGlmZV9idW95KCk7CiAgICBpbml0X2xpZ2F0dXJlKCk7CiAgICBpbml0X2xpZ2h0YnVsYl9vZmYoKTsKICAgIGluaXRfbGlnaHRidWxiKCk7CiAgICBpbml0X2xpbmVfc3F1aWdnbGUoKTsKICAgIGluaXRfbGlua18yKCk7CiAgICBpbml0X2xpbmtfMl9vZmYoKTsKICAgIGluaXRfbGluazQoKTsKICAgIGluaXRfbGlua2VkaW4oKTsKICAgIGluaXRfbGlzdF9jaGVjaygpOwogICAgaW5pdF9saXN0X2NoZWNrcygpOwogICAgaW5pdF9saXN0X2NoZXZyb25zX2Rvd25fdXAoKTsKICAgIGluaXRfbGlzdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2xpc3RfY29sbGFwc2UoKTsKICAgIGluaXRfbGlzdF9lbmQoKTsKICAgIGluaXRfbGlzdF9maWx0ZXJfcGx1cygpOwogICAgaW5pdF9saXN0X2ZpbHRlcigpOwogICAgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSgpOwogICAgaW5pdF9saXN0X2luZGVudF9pbmNyZWFzZSgpOwogICAgaW5pdF9saXN0X21pbnVzKCk7CiAgICBpbml0X2xpc3RfbXVzaWMoKTsKICAgIGluaXRfbGlzdF9vcmRlcmVkKCk7CiAgICBpbml0X2xpc3RfcGx1cygpOwogICAgaW5pdF9saXN0X3Jlc3RhcnQoKTsKICAgIGluaXRfbGlzdF9zdGFydCgpOwogICAgaW5pdF9saXN0X3RvZG8oKTsKICAgIGluaXRfbGlzdF90cmVlKCk7CiAgICBpbml0X2xpc3RfdmlkZW8oKTsKICAgIGluaXRfbGlzdF94KCk7CiAgICBpbml0X2xvYWRlcl9jaXJjbGUoKTsKICAgIGluaXRfbGlzdDQoKTsKICAgIGluaXRfbG9hZGVyX3BpbndoZWVsKCk7CiAgICBpbml0X2xvYWRlcigpOwogICAgaW5pdF9sb2NhdGVfZml4ZWQoKTsKICAgIGluaXRfbG9jYXRlX29mZigpOwogICAgaW5pdF9sb2NhdGUoKTsKICAgIGluaXRfbG9ja19rZXlob2xlX29wZW4oKTsKICAgIGluaXRfbG9ja19rZXlob2xlKCk7CiAgICBpbml0X2xvY2tfb3BlbigpOwogICAgaW5pdF9sb2NrKCk7CiAgICBpbml0X2xvZ19pbigpOwogICAgaW5pdF9sb2dfb3V0KCk7CiAgICBpbml0X2xvZ3MoKTsKICAgIGluaXRfbG9sbGlwb3AoKTsKICAgIGluaXRfbHVnZ2FnZSgpOwogICAgaW5pdF9tYWduZXQoKTsKICAgIGluaXRfbWFpbF9jaGVjaygpOwogICAgaW5pdF9tYWlsX21pbnVzKCk7CiAgICBpbml0X21haWxfb3BlbigpOwogICAgaW5pdF9tYWlsX3BsdXMoKTsKICAgIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X21haWxfc2VhcmNoKCk7CiAgICBpbml0X21haWxfd2FybmluZygpOwogICAgaW5pdF9tYWlsX3goKTsKICAgIGluaXRfbWFpbCgpOwogICAgaW5pdF9tYWlsYm94KCk7CiAgICBpbml0X21haWxzKCk7CiAgICBpbml0X21hcF9taW51cygpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrX2luc2lkZSgpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrKCk7CiAgICBpbml0X21hcF9waW5faG91c2UoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51c19pbnNpZGUoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51cygpOwogICAgaW5pdF9tYXBfcGluX29mZigpOwogICAgaW5pdF9tYXBfcGluX3BlbigpOwogICAgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5fcGx1cygpOwogICAgaW5pdF9tYXBfcGluX3hfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5feCgpOwogICAgaW5pdF9tYXBfcGluKCk7CiAgICBpbml0X21hcF9waW5uZWQoKTsKICAgIGluaXRfbWFwX3BsdXMoKTsKICAgIGluaXRfbWFwMigpOwogICAgaW5pdF9tYXJzX3N0cm9rZSgpOwogICAgaW5pdF9tYXJzKCk7CiAgICBpbml0X21hcnRpbmkoKTsKICAgIGluaXRfbWF4aW1pemVfMigpOwogICAgaW5pdF9tYXhpbWl6ZSgpOwogICAgaW5pdF9tZWdhcGhvbmVfb2ZmKCk7CiAgICBpbml0X21lZ2FwaG9uZSgpOwogICAgaW5pdF9tZWRhbCgpOwogICAgaW5pdF9tZWgoKTsKICAgIGluaXRfbWVtb3J5X3N0aWNrKCk7CiAgICBpbml0X21lcmdlNCgpOwogICAgaW5pdF9tZW51KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfb2ZmKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyaygpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV9yZXBseSgpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3goKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGUoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfY29kZSgpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfZGlmZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfaGVhcnQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jaygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9tb3JlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX29mZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3F1b3RlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3JlcGx5KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3NoYXJlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV94KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlKCk7CiAgICBpbml0X21lc3NhZ2VzX3NxdWFyZSgpOwogICAgaW5pdF9taWNfb2ZmKCk7CiAgICBpbml0X21pY192b2NhbCgpOwogICAgaW5pdF9taWMoKTsKICAgIGluaXRfbWljcm9jaGlwKCk7CiAgICBpbml0X21pY3Jvc2NvcGUoKTsKICAgIGluaXRfbWljcm93YXZlKCk7CiAgICBpbml0X21pbGVzdG9uZSgpOwogICAgaW5pdF9taWxrX29mZigpOwogICAgaW5pdF9taWxrKCk7CiAgICBpbml0X21pbmltaXplXzIoKTsKICAgIGluaXRfbWluaW1pemUoKTsKICAgIGluaXRfbWludXMoKTsKICAgIGluaXRfbW9uaXRvcl9jaGVjaygpOwogICAgaW5pdF9tb25pdG9yX2Nsb3VkKCk7CiAgICBpbml0X21vbml0b3JfY29nKCk7CiAgICBpbml0X21vbml0b3JfZG90KCk7CiAgICBpbml0X21vbml0b3JfZG93bigpOwogICAgaW5pdF9tb25pdG9yX29mZigpOwogICAgaW5pdF9tb25pdG9yX3BhdXNlKCk7CiAgICBpbml0X21vbml0b3JfcGxheSgpOwogICAgaW5pdF9tb25pdG9yX3NtYXJ0cGhvbmUoKTsKICAgIGluaXRfbW9uaXRvcl9zcGVha2VyKCk7CiAgICBpbml0X21vbml0b3Jfc3RvcCgpOwogICAgaW5pdF9tb25pdG9yX3VwKCk7CiAgICBpbml0X21vbml0b3JfeCgpOwogICAgaW5pdF9tb25pdG9yKCk7CiAgICBpbml0X21vb25fc3RhcigpOwogICAgaW5pdF9tb3RvcmJpa2UoKTsKICAgIGluaXRfbW9vbigpOwogICAgaW5pdF9tb3VudGFpbl9zbm93KCk7CiAgICBpbml0X21vdW50YWluKCk7CiAgICBpbml0X21vdXNlX29mZigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyXzJfb2ZmKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXJfMigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2JhbigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfbW91c2UoKTsKICAgIGluaXRfbW92ZV8zZCgpOwogICAgaW5pdF9tb3ZlX2RpYWdvbmFsXzIoKTsKICAgIGluaXRfbW92ZV9kaWFnb25hbCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fbGVmdCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fcmlnaHQoKTsKICAgIGluaXRfbW92ZV9kb3duKCk7CiAgICBpbml0X21vdmVfbGVmdCgpOwogICAgaW5pdF9tb3ZlX2hvcml6b250YWwoKTsKICAgIGluaXRfbW92ZV9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwX2xlZnQoKTsKICAgIGluaXRfbW92ZV91cF9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwKCk7CiAgICBpbml0X21vdmVfdmVydGljYWwoKTsKICAgIGluaXRfbW92ZSgpOwogICAgaW5pdF9tdXNpY18yKCk7CiAgICBpbml0X211c2ljXzMoKTsKICAgIGluaXRfbXVzaWNfNCgpOwogICAgaW5pdF9tdXNpYygpOwogICAgaW5pdF9uYXZpZ2F0aW9uXzJfb2ZmKCk7CiAgICBpbml0X25hdmlnYXRpb25fMigpOwogICAgaW5pdF9uYXZpZ2F0aW9uX29mZigpOwogICAgaW5pdF9uYXZpZ2F0aW9uKCk7CiAgICBpbml0X25ld3NwYXBlcigpOwogICAgaW5pdF9uZXR3b3JrMigpOwogICAgaW5pdF9uZmMoKTsKICAgIGluaXRfbm9uX2JpbmFyeSgpOwogICAgaW5pdF9ub3RlYm9va19wZW4oKTsKICAgIGluaXRfbm90ZWJvb2tfdGFicygpOwogICAgaW5pdF9ub3RlYm9va190ZXh0KCk7CiAgICBpbml0X25vdGVib29rKCk7CiAgICBpbml0X25vdGVwYWRfdGV4dF9kYXNoZWQoKTsKICAgIGluaXRfbm90ZXBhZF90ZXh0KCk7CiAgICBpbml0X251dF9vZmYoKTsKICAgIGluaXRfbnV0KCk7CiAgICBpbml0X29jdGFnb25fYWxlcnQoKTsKICAgIGluaXRfb2N0YWdvbl9taW51cygpOwogICAgaW5pdF9vY3RhZ29uX3BhdXNlKCk7CiAgICBpbml0X29jdGFnb25feCgpOwogICAgaW5pdF9vY3RhZ29uKCk7CiAgICBpbml0X29tZWdhKCk7CiAgICBpbml0X29wdGlvbigpOwogICAgaW5pdF9vcmJpdCgpOwogICAgaW5pdF9vcmlnYW1pKCk7CiAgICBpbml0X3BhY2thZ2VfMigpOwogICAgaW5pdF9wYWNrYWdlX2NoZWNrKCk7CiAgICBpbml0X3BhY2thZ2VfbWludXMoKTsKICAgIGluaXRfcGFja2FnZV9vcGVuKCk7CiAgICBpbml0X3BhY2thZ2VfcGx1cygpOwogICAgaW5pdF9wYWNrYWdlX3NlYXJjaCgpOwogICAgaW5pdF9wYWNrYWdlX3goKTsKICAgIGluaXRfcGFja2FnZSgpOwogICAgaW5pdF9wYWludF9idWNrZXQoKTsKICAgIGluaXRfcGFpbnRfcm9sbGVyKCk7CiAgICBpbml0X3BhaW50YnJ1c2hfdmVydGljYWwoKTsKICAgIGluaXRfcGFpbnRicnVzaCgpOwogICAgaW5pdF9wYWxldHRlKCk7CiAgICBpbml0X3BhbmRhKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9vcGVuKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfb3BlbigpOwogICAgaW5pdF9wYW5lbF9sZWZ0X3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9sZWZ0KCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9yaWdodF9vcGVuKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0KCk7CiAgICBpbml0X3BhbmVsX3RvcF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF90b3BfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9vcGVuKCk7CiAgICBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF90b3AoKTsKICAgIGluaXRfcGFuZWxzX3JpZ2h0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbHNfdG9wX2xlZnQoKTsKICAgIGluaXRfcGFwZXJjbGlwKCk7CiAgICBpbml0X3BhcmtpbmdfbWV0ZXIoKTsKICAgIGluaXRfcGFyZW50aGVzZXMoKTsKICAgIGluaXRfcGFydHlfcG9wcGVyKCk7CiAgICBpbml0X3BhdXNlKCk7CiAgICBpbml0X3Bhd19wcmludCgpOwogICAgaW5pdF9wY19jYXNlKCk7CiAgICBpbml0X3Blbl9saW5lKCk7CiAgICBpbml0X3Blbl9vZmYoKTsKICAgIGluaXRfcGVuX3Rvb2woKTsKICAgIGluaXRfcGVuKCk7CiAgICBpbml0X3BlbmNpbF9saW5lKCk7CiAgICBpbml0X3BlbmNpbF9vZmYoKTsKICAgIGluaXRfcGVuY2lsX3J1bGVyKCk7CiAgICBpbml0X3BlbmNpbCgpOwogICAgaW5pdF9wZW50YWdvbigpOwogICAgaW5pdF9wZXJjZW50KCk7CiAgICBpbml0X3BlcnNvbl9zdGFuZGluZygpOwogICAgaW5pdF9waGlsaXBwaW5lX3Blc28oKTsKICAgIGluaXRfcGhvbmVfZm9yd2FyZGVkKCk7CiAgICBpbml0X3Bob25lX2NhbGwoKTsKICAgIGluaXRfcGhvbmVfaW5jb21pbmcoKTsKICAgIGluaXRfcGhvbmVfbWlzc2VkKCk7CiAgICBpbml0X3Bob25lX29mZigpOwogICAgaW5pdF9waG9uZV9vdXRnb2luZygpOwogICAgaW5pdF9waG9uZSgpOwogICAgaW5pdF9waSgpOwogICAgaW5pdF9waWFubygpOwogICAgaW5pdF9waWNrYXhlKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZSgpOwogICAgaW5pdF9waWdneV9iYW5rKCk7CiAgICBpbml0X3BpbGNyb3dfbGVmdCgpOwogICAgaW5pdF9waWxjcm93X3JpZ2h0KCk7CiAgICBpbml0X3BpbGNyb3coKTsKICAgIGluaXRfcGlsbF9ib3R0bGUoKTsKICAgIGluaXRfcGlsbCgpOwogICAgaW5pdF9waW5fb2ZmKCk7CiAgICBpbml0X3BpbigpOwogICAgaW5pdF9waXBldHRlKCk7CiAgICBpbml0X3BpenphKCk7CiAgICBpbml0X3BsYW5lX2xhbmRpbmcoKTsKICAgIGluaXRfcGxhbmVfdGFrZW9mZigpOwogICAgaW5pdF9wbGFuZSgpOwogICAgaW5pdF9wbGF5KCk7CiAgICBpbml0X3BsdWdfMigpOwogICAgaW5pdF9wbHVnX3phcCgpOwogICAgaW5pdF9wbHVnKCk7CiAgICBpbml0X3BsdXMoKTsKICAgIGluaXRfcG9ja2V0X2tuaWZlKCk7CiAgICBpbml0X3BvY2tldCgpOwogICAgaW5pdF9wb2RjYXN0KCk7CiAgICBpbml0X3BvaW50ZXJfb2ZmKCk7CiAgICBpbml0X3BvaW50ZXIoKTsKICAgIGluaXRfcG9wY29ybigpOwogICAgaW5pdF9wb3BzaWNsZSgpOwogICAgaW5pdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9wb3dlcl9vZmYoKTsKICAgIGluaXRfcG93ZXIoKTsKICAgIGluaXRfcHJlc2VudGF0aW9uKCk7CiAgICBpbml0X3ByaW50ZXIoKTsKICAgIGluaXRfcHJpbnRlcl9jaGVjaygpOwogICAgaW5pdF9wcm9qZWN0b3IoKTsKICAgIGluaXRfcHJvcG9ydGlvbnMoKTsKICAgIGluaXRfcHV6emxlKCk7CiAgICBpbml0X3B5cmFtaWQoKTsKICAgIGluaXRfcXJfY29kZSgpOwogICAgaW5pdF9xdW90ZSgpOwogICAgaW5pdF9yYWJiaXQoKTsKICAgIGluaXRfcmFkYXIoKTsKICAgIGluaXRfcmFkaWF0aW9uKCk7CiAgICBpbml0X3JhZGljYWwoKTsKICAgIGluaXRfcmFkaW9fcmVjZWl2ZXIoKTsKICAgIGluaXRfcmFkaW9fdG93ZXIoKTsKICAgIGluaXRfcmFkaW8oKTsKICAgIGluaXRfcmFkaXVzKCk7CiAgICBpbml0X3JhaWxfc3ltYm9sKCk7CiAgICBpbml0X3JhaW5ib3coKTsKICAgIGluaXRfcmF0KCk7CiAgICBpbml0X3JhdGlvKCk7CiAgICBpbml0X3JlY2VpcHRfY2VudCgpOwogICAgaW5pdF9yZWNlaXB0X2V1cm8oKTsKICAgIGluaXRfcmVjZWlwdF9pbmRpYW5fcnVwZWUoKTsKICAgIGluaXRfcmVjZWlwdF9qYXBhbmVzZV95ZW4oKTsKICAgIGluaXRfcmVjZWlwdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9yZWNlaXB0X3RleHQoKTsKICAgIGluaXRfcmVjZWlwdF90dXJraXNoX2xpcmEoKTsKICAgIGluaXRfcmVjZWlwdCgpOwogICAgaW5pdF9yZWN0YW5nbGVfY2lyY2xlKCk7CiAgICBpbml0X3JlY3RhbmdsZV9lbGxpcHNpcygpOwogICAgaW5pdF9yZWN0YW5nbGVfZ29nZ2xlcygpOwogICAgaW5pdF9yZWN0YW5nbGVfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9yZWN0YW5nbGVfdmVydGljYWwoKTsKICAgIGluaXRfcmVjeWNsZSgpOwogICAgaW5pdF9yZWRvXzIoKTsKICAgIGluaXRfcmVkb19kb3QoKTsKICAgIGluaXRfcmVkbygpOwogICAgaW5pdF9yZWZyZXNoX2Njd19kb3QoKTsKICAgIGluaXRfcmVmcmVzaF9jY3coKTsKICAgIGluaXRfcmVmcmVzaF9jd19vZmYoKTsKICAgIGluaXRfcmVmcmVzaF9jdygpOwogICAgaW5pdF9yZWZyaWdlcmF0b3IoKTsKICAgIGluaXRfcmVnZXgoKTsKICAgIGluaXRfcmVtb3ZlX2Zvcm1hdHRpbmcoKTsKICAgIGluaXRfcmVwZWF0XzEoKTsKICAgIGluaXRfcmVwZWF0XzIoKTsKICAgIGluaXRfcmVwZWF0NCgpOwogICAgaW5pdF9yZXBsYWNlX2FsbCgpOwogICAgaW5pdF9yZXBsYWNlKCk7CiAgICBpbml0X3JlcGx5X2FsbCgpOwogICAgaW5pdF9yZXBseSgpOwogICAgaW5pdF9yZXdpbmQoKTsKICAgIGluaXRfcmliYm9uKCk7CiAgICBpbml0X3JvY2tldCgpOwogICAgaW5pdF9yb2NraW5nX2NoYWlyKCk7CiAgICBpbml0X3JvbGxlcl9jb2FzdGVyKCk7CiAgICBpbml0X3Jvc2UoKTsKICAgIGluaXRfcm90YXRlXzNkKCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfa2V5KCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfc3F1YXJlKCk7CiAgICBpbml0X3JvdGF0ZV9jY3coKTsKICAgIGluaXRfcm90YXRlX2N3X3NxdWFyZSgpOwogICAgaW5pdF9yb3RhdGVfY3coKTsKICAgIGluaXRfcm91dGUoKTsKICAgIGluaXRfcm91dGVfb2ZmKCk7CiAgICBpbml0X3JvdXRlcigpOwogICAgaW5pdF9yb3dzXzIoKTsKICAgIGluaXRfcm93c18zKCk7CiAgICBpbml0X3Jvd3NfNCgpOwogICAgaW5pdF9yc3MoKTsKICAgIGluaXRfcnVsZXJfZGltZW5zaW9uX2xpbmUoKTsKICAgIGluaXRfcnVsZXIoKTsKICAgIGluaXRfcnVzc2lhbl9ydWJsZSgpOwogICAgaW5pdF9zYWlsYm9hdCgpOwogICAgaW5pdF9zYWxhZCgpOwogICAgaW5pdF9zYW5kd2ljaCgpOwogICAgaW5pdF9zYXRlbGxpdGVfZGlzaCgpOwogICAgaW5pdF9zYXRlbGxpdGUoKTsKICAgIGluaXRfc2F1ZGlfcml5YWwoKTsKICAgIGluaXRfc2F2ZV9hbGwoKTsKICAgIGluaXRfc2F2ZV9vZmYoKTsKICAgIGluaXRfc2F2ZSgpOwogICAgaW5pdF9zY2FsZV8zZCgpOwogICAgaW5pdF9zY2FsZSgpOwogICAgaW5pdF9zY2FsaW5nKCk7CiAgICBpbml0X3NjYW5fZXllKCk7CiAgICBpbml0X3NjYW5fYmFyY29kZSgpOwogICAgaW5pdF9zY2FuX2ZhY2UoKTsKICAgIGluaXRfc2Nhbl9oZWFydCgpOwogICAgaW5pdF9zY2FuX2xpbmUoKTsKICAgIGluaXRfc2Nhbl9xcl9jb2RlKCk7CiAgICBpbml0X3NjYW5fc2VhcmNoKCk7CiAgICBpbml0X3NjYW5fdGV4dCgpOwogICAgaW5pdF9zY2FuMigpOwogICAgaW5pdF9zY2hvb2woKTsKICAgIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQoKTsKICAgIGluaXRfc2Npc3NvcnMoKTsKICAgIGluaXRfc2Nvb3RlcigpOwogICAgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmKCk7CiAgICBpbml0X3NjcmVlbl9zaGFyZSgpOwogICAgaW5pdF9zY3JvbGxfdGV4dCgpOwogICAgaW5pdF9zY3JvbGwoKTsKICAgIGluaXRfc2VhcmNoX2FsZXJ0KCk7CiAgICBpbml0X3NlYXJjaF9jb2RlKCk7CiAgICBpbml0X3NlYXJjaF9jaGVjaygpOwogICAgaW5pdF9zZWFyY2hfc2xhc2goKTsKICAgIGluaXRfc2VhcmNoX3goKTsKICAgIGluaXRfc2VhcmNoKCk7CiAgICBpbml0X3NlbmRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zZWN0aW9uKCk7CiAgICBpbml0X3NlbmRfdG9fYmFjaygpOwogICAgaW5pdF9zZW5kKCk7CiAgICBpbml0X3NlcGFyYXRvcl9ob3Jpem9udGFsKCk7CiAgICBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCgpOwogICAgaW5pdF9zZXJ2ZXJfY29nKCk7CiAgICBpbml0X3NlcnZlcl9jcmFzaCgpOwogICAgaW5pdF9zZXJ2ZXJfb2ZmKCk7CiAgICBpbml0X3NlcnZlcigpOwogICAgaW5pdF9zZXR0aW5nc18yKCk7CiAgICBpbml0X3NldHRpbmdzKCk7CiAgICBpbml0X3NoYXBlcygpOwogICAgaW5pdF9zaGFyZV8yKCk7CiAgICBpbml0X3NoYXJlMigpOwogICAgaW5pdF9zaGVldCgpOwogICAgaW5pdF9zaGVsbCgpOwogICAgaW5pdF9zaGllbGRfYWxlcnQoKTsKICAgIGluaXRfc2hpZWxkX2JhbigpOwogICAgaW5pdF9zaGllbGRfY2hlY2soKTsKICAgIGluaXRfc2hpZWxkX2VsbGlwc2lzKCk7CiAgICBpbml0X3NoaWVsZF9oYWxmKCk7CiAgICBpbml0X3NoaWVsZF9taW51cygpOwogICAgaW5pdF9zaGllbGRfb2ZmKCk7CiAgICBpbml0X3NoaWVsZF9wbHVzKCk7CiAgICBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X3NoaWVsZF91c2VyKCk7CiAgICBpbml0X3NoaWVsZF94KCk7CiAgICBpbml0X3NoaWVsZCgpOwogICAgaW5pdF9zaGlwX3doZWVsKCk7CiAgICBpbml0X3NoaXAoKTsKICAgIGluaXRfc2hpcnQoKTsKICAgIGluaXRfc2hvcHBpbmdfYmFnKCk7CiAgICBpbml0X3Nob3BwaW5nX2Jhc2tldCgpOwogICAgaW5pdF9zaG9wcGluZ19jYXJ0KCk7CiAgICBpbml0X3Nob3ZlbCgpOwogICAgaW5pdF9zaG93ZXJfaGVhZCgpOwogICAgaW5pdF9zaHJlZGRlcigpOwogICAgaW5pdF9zaHJpbXAoKTsKICAgIGluaXRfc2hyaW5rKCk7CiAgICBpbml0X3NocnViKCk7CiAgICBpbml0X3NodWZmbGUoKTsKICAgIGluaXRfc2lnbmFsX2hpZ2goKTsKICAgIGluaXRfc2lnbWEoKTsKICAgIGluaXRfc2lnbmFsX2xvdygpOwogICAgaW5pdF9zaWduYWxfbWVkaXVtKCk7CiAgICBpbml0X3NpZ25hbF96ZXJvKCk7CiAgICBpbml0X3NpZ25hbCgpOwogICAgaW5pdF9zaWduYXR1cmUoKTsKICAgIGluaXRfc2lnbnBvc3RfYmlnKCk7CiAgICBpbml0X3NpZ25wb3N0KCk7CiAgICBpbml0X3NpcmVuKCk7CiAgICBpbml0X3NraXBfYmFjaygpOwogICAgaW5pdF9za3VsbCgpOwogICAgaW5pdF9za2lwX2ZvcndhcmQoKTsKICAgIGluaXRfc2xhY2soKTsKICAgIGluaXRfc2xhc2goKTsKICAgIGluaXRfc2xpY2UoKTsKICAgIGluaXRfc2xpZGVyc19ob3Jpem9udGFsKCk7CiAgICBpbml0X3NsaWRlcnNfdmVydGljYWwoKTsKICAgIGluaXRfc21hcnRwaG9uZV9jaGFyZ2luZygpOwogICAgaW5pdF9zbWFydHBob25lX25mYygpOwogICAgaW5pdF9zbWFydHBob25lKCk7CiAgICBpbml0X3NtaWxlX3BsdXMoKTsKICAgIGluaXRfc21pbGUoKTsKICAgIGluaXRfc25haWwoKTsKICAgIGluaXRfc25vd2ZsYWtlKCk7CiAgICBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQoKTsKICAgIGluaXRfc29mYSgpOwogICAgaW5pdF9zb2xhcl9wYW5lbCgpOwogICAgaW5pdF9zb3VwKCk7CiAgICBpbml0X3NwYWNlKCk7CiAgICBpbml0X3NwYWRlKCk7CiAgICBpbml0X3NwYXJrbGUoKTsKICAgIGluaXRfc3BhcmtsZXMoKTsKICAgIGluaXRfc3BlYWtlcigpOwogICAgaW5pdF9zcGVlY2goKTsKICAgIGluaXRfc3BlbGxfY2hlY2tfMigpOwogICAgaW5pdF9zcGVsbF9jaGVjaygpOwogICAgaW5pdF9zcGxpbmVfcG9pbnRlcigpOwogICAgaW5pdF9zcGxpbmUoKTsKICAgIGluaXRfc3BsaXQoKTsKICAgIGluaXRfc3Bvb2woKTsKICAgIGluaXRfc3BvdGxpZ2h0KCk7CiAgICBpbml0X3NwcmF5X2NhbigpOwogICAgaW5pdF9zcHJvdXQoKTsKICAgIGluaXRfc3F1YXJlX2FjdGl2aXR5KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X3VwKCk7CiAgICBpbml0X3NxdWFyZV9hc3RlcmlzaygpOwogICAgaW5pdF9zcXVhcmVfYm90dG9tX2Rhc2hlZF9zY2lzc29ycygpOwogICAgaW5pdF9zcXVhcmVfY2hhcnRfZ2FudHQoKTsKICAgIGluaXRfc3F1YXJlX2NoZWNrKCk7CiAgICBpbml0X3NxdWFyZV9jaGVja19iaWcoKTsKICAgIGluaXRfc3F1YXJlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9zcXVhcmVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X3NxdWFyZV9jb2RlKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfYm90dG9tX2NvZGUoKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlX2RpdmlkZSgpOwogICAgaW5pdF9zcXVhcmVfZG90KCk7CiAgICBpbml0X3NxdWFyZV9lcXVhbCgpOwogICAgaW5pdF9zcXVhcmVfZnVuY3Rpb24oKTsKICAgIGluaXRfc3F1YXJlX2thbmJhbigpOwogICAgaW5pdF9zcXVhcmVfbGlicmFyeSgpOwogICAgaW5pdF9zcXVhcmVfbSgpOwogICAgaW5pdF9zcXVhcmVfbWVudSgpOwogICAgaW5pdF9zcXVhcmVfbWludXMoKTsKICAgIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfc3F1YXJlX3Bhcmtpbmdfb2ZmKCk7CiAgICBpbml0X3NxdWFyZV9wYXJraW5nKCk7CiAgICBpbml0X3NxdWFyZV9wZW4oKTsKICAgIGluaXRfc3F1YXJlX3BhdXNlKCk7CiAgICBpbml0X3NxdWFyZV9wZXJjZW50KCk7CiAgICBpbml0X3NxdWFyZV9waSgpOwogICAgaW5pdF9zcXVhcmVfcGlsY3JvdygpOwogICAgaW5pdF9zcXVhcmVfcGxheSgpOwogICAgaW5pdF9zcXVhcmVfcGx1cygpOwogICAgaW5pdF9zcXVhcmVfcG93ZXIoKTsKICAgIGluaXRfc3F1YXJlX3JhZGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NjaXNzb3JzKCk7CiAgICBpbml0X3NxdWFyZV9yb3VuZF9jb3JuZXIoKTsKICAgIGluaXRfc3F1YXJlX3NpZ21hKCk7CiAgICBpbml0X3NxdWFyZV9zbGFzaCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfdmVydGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVfc3RhY2soKTsKICAgIGluaXRfc3F1YXJlX3N0YXIoKTsKICAgIGluaXRfc3F1YXJlX3N0b3AoKTsKICAgIGluaXRfc3F1YXJlX3Rlcm1pbmFsKCk7CiAgICBpbml0X3NxdWFyZV91c2VyX3JvdW5kKCk7CiAgICBpbml0X3NxdWFyZV91c2VyKCk7CiAgICBpbml0X3NxdWFyZV94KCk7CiAgICBpbml0X3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVzX2V4Y2x1ZGUoKTsKICAgIGluaXRfc3F1YXJlc19pbnRlcnNlY3QoKTsKICAgIGluaXRfc3F1YXJlc19zdWJ0cmFjdCgpOwogICAgaW5pdF9zcXVpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlc191bml0ZSgpOwogICAgaW5pdF9zcXVpcmNsZSgpOwogICAgaW5pdF9zcXVpcnJlbCgpOwogICAgaW5pdF9zdGFtcCgpOwogICAgaW5pdF9zdGFyX29mZigpOwogICAgaW5pdF9zdGFyX2hhbGYoKTsKICAgIGluaXRfc3RhcigpOwogICAgaW5pdF9zdGVwX2JhY2soKTsKICAgIGluaXRfc3RlcF9mb3J3YXJkKCk7CiAgICBpbml0X3N0ZXRob3Njb3BlKCk7CiAgICBpbml0X3N0aWNrZXIoKTsKICAgIGluaXRfc3RvbmUoKTsKICAgIGluaXRfc3RpY2t5X25vdGUoKTsKICAgIGluaXRfc3RvcmUoKTsKICAgIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsKCk7CiAgICBpbml0X3N0cmV0Y2hfdmVydGljYWwoKTsKICAgIGluaXRfc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9zdWJzY3JpcHQoKTsKICAgIGluaXRfc3VuX2RpbSgpOwogICAgaW5pdF9zdW5fbWVkaXVtKCk7CiAgICBpbml0X3N1bl9tb29uKCk7CiAgICBpbml0X3N1bl9zbm93KCk7CiAgICBpbml0X3N1bigpOwogICAgaW5pdF9zdW5yaXNlKCk7CiAgICBpbml0X3N1bnNldCgpOwogICAgaW5pdF9zdXBlcnNjcmlwdCgpOwogICAgaW5pdF9zd2F0Y2hfYm9vaygpOwogICAgaW5pdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9zd2l0Y2hfY2FtZXJhKCk7CiAgICBpbml0X3N3b3JkKCk7CiAgICBpbml0X3N3b3JkcygpOwogICAgaW5pdF9zeXJpbmdlKCk7CiAgICBpbml0X3RhYmxlXzIoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfbWVyZ2UoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfc3BsaXQoKTsKICAgIGluaXRfdGFibGVfb2ZfY29udGVudHMoKTsKICAgIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCgpOwogICAgaW5pdF90YWJsZV9wcm9wZXJ0aWVzKCk7CiAgICBpbml0X3RhYmxlX3Jvd3Nfc3BsaXQoKTsKICAgIGluaXRfdGFibGUyKCk7CiAgICBpbml0X3RhYmxldF9zbWFydHBob25lKCk7CiAgICBpbml0X3RhYmxldCgpOwogICAgaW5pdF90YWJsZXRzKCk7CiAgICBpbml0X3RhZygpOwogICAgaW5pdF90YWdzKCk7CiAgICBpbml0X3RhbGx5XzEoKTsKICAgIGluaXRfdGFsbHlfMigpOwogICAgaW5pdF90YWxseV8zKCk7CiAgICBpbml0X3RhbGx5XzQoKTsKICAgIGluaXRfdGFsbHlfNSgpOwogICAgaW5pdF90YW5nZW50KCk7CiAgICBpbml0X3RhcmdldCgpOwogICAgaW5pdF90ZWxlc2NvcGUoKTsKICAgIGluaXRfdGVudF90cmVlKCk7CiAgICBpbml0X3RlbnQoKTsKICAgIGluaXRfdGVzdF90dWJlX2RpYWdvbmFsKCk7CiAgICBpbml0X3Rlcm1pbmFsKCk7CiAgICBpbml0X3Rlc3RfdHViZSgpOwogICAgaW5pdF90ZXN0X3R1YmVzKCk7CiAgICBpbml0X3RleHRfYWxpZ25fY2VudGVyKCk7CiAgICBpbml0X3RleHRfYWxpZ25fZW5kKCk7CiAgICBpbml0X3RleHRfYWxpZ25fanVzdGlmeSgpOwogICAgaW5pdF90ZXh0X2FsaWduX3N0YXJ0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yX2lucHV0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yKCk7CiAgICBpbml0X3RleHRfcXVvdGUoKTsKICAgIGluaXRfdGV4dF9pbml0aWFsKCk7CiAgICBpbml0X3RleHRfc2VhcmNoKCk7CiAgICBpbml0X3RleHRfc2VsZWN0KCk7CiAgICBpbml0X3RoZWF0ZXIoKTsKICAgIGluaXRfdGV4dF93cmFwKCk7CiAgICBpbml0X3RoZXJtb21ldGVyX3Nub3dmbGFrZSgpOwogICAgaW5pdF90aGVybW9tZXRlcl9zdW4oKTsKICAgIGluaXRfdGhlcm1vbWV0ZXIoKTsKICAgIGluaXRfdGh1bWJzX2Rvd24oKTsKICAgIGluaXRfdGh1bWJzX3VwKCk7CiAgICBpbml0X3RpY2tldF9jaGVjaygpOwogICAgaW5pdF90aWNrZXRfbWludXMoKTsKICAgIGluaXRfdGlja2V0X3BlcmNlbnQoKTsKICAgIGluaXRfdGlja2V0X3BsdXMoKTsKICAgIGluaXRfdGlja2V0X3NsYXNoKCk7CiAgICBpbml0X3RpY2tldF94KCk7CiAgICBpbml0X3RpY2tldCgpOwogICAgaW5pdF90aWNrZXRzX3BsYW5lKCk7CiAgICBpbml0X3RpY2tldHMoKTsKICAgIGluaXRfdGltZXJfcmVzZXQoKTsKICAgIGluaXRfdGltZXJfb2ZmKCk7CiAgICBpbml0X3RpbWVyMigpOwogICAgaW5pdF90b2dnbGVfbGVmdCgpOwogICAgaW5pdF90b2dnbGVfcmlnaHQoKTsKICAgIGluaXRfdG9pbGV0KCk7CiAgICBpbml0X3Rvb2xfY2FzZSgpOwogICAgaW5pdF90b29sYm94KCk7CiAgICBpbml0X3Rvcm5hZG8oKTsKICAgIGluaXRfdG9ydXMoKTsKICAgIGluaXRfdG91Y2hwYWRfb2ZmKCk7CiAgICBpbml0X3RvdWNocGFkKCk7CiAgICBpbml0X3Rvd2VyX2NvbnRyb2woKTsKICAgIGluaXRfdG95X2JyaWNrKCk7CiAgICBpbml0X3RyYWZmaWNfY29uZSgpOwogICAgaW5pdF90cmFjdG9yKCk7CiAgICBpbml0X3RyYWluX2Zyb250X3R1bm5lbCgpOwogICAgaW5pdF90cmFpbl9mcm9udCgpOwogICAgaW5pdF90cmFpbl90cmFjaygpOwogICAgaW5pdF90cmFtX2Zyb250KCk7CiAgICBpbml0X3RyYW5zZ2VuZGVyKCk7CiAgICBpbml0X3RyYXNoXzIoKTsKICAgIGluaXRfdHJhc2goKTsKICAgIGluaXRfdHJlZV9kZWNpZHVvdXMoKTsKICAgIGluaXRfdHJlZV9wYWxtKCk7CiAgICBpbml0X3RyZWVfcGluZSgpOwogICAgaW5pdF90cmVlcygpOwogICAgaW5pdF90cmVsbG8oKTsKICAgIGluaXRfdHJlbmRpbmdfZG93bigpOwogICAgaW5pdF90cmVuZGluZ191cF9kb3duKCk7CiAgICBpbml0X3RyZW5kaW5nX3VwKCk7CiAgICBpbml0X3RyaWFuZ2xlX2FsZXJ0KCk7CiAgICBpbml0X3RyaWFuZ2xlX2Rhc2hlZCgpOwogICAgaW5pdF90cmlhbmdsZV9yaWdodCgpOwogICAgaW5pdF90cmlhbmdsZSgpOwogICAgaW5pdF90cm9waHkoKTsKICAgIGluaXRfdHJ1Y2tfZWxlY3RyaWMoKTsKICAgIGluaXRfdHJ1Y2soKTsKICAgIGluaXRfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X3R1cm50YWJsZSgpOwogICAgaW5pdF90dXJ0bGUoKTsKICAgIGluaXRfdHZfbWluaW1hbF9wbGF5KCk7CiAgICBpbml0X3R2X21pbmltYWwoKTsKICAgIGluaXRfdHYoKTsKICAgIGluaXRfdHdpdGNoKCk7CiAgICBpbml0X3R3aXR0ZXIoKTsKICAgIGluaXRfdHlwZV9vdXRsaW5lKCk7CiAgICBpbml0X3R5cGUoKTsKICAgIGluaXRfdW1icmVsbGFfb2ZmKCk7CiAgICBpbml0X3VtYnJlbGxhKCk7CiAgICBpbml0X3VuZGVybGluZSgpOwogICAgaW5pdF91bmRvXzIoKTsKICAgIGluaXRfdW5kb19kb3QoKTsKICAgIGluaXRfdW5kbygpOwogICAgaW5pdF91bmZvbGRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF91bmZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfdW5ncm91cCgpOwogICAgaW5pdF91bml2ZXJzaXR5KCk7CiAgICBpbml0X3VubGlua18yKCk7CiAgICBpbml0X3VubGluaygpOwogICAgaW5pdF91bnBsdWcoKTsKICAgIGluaXRfdXNiKCk7CiAgICBpbml0X3VwbG9hZCgpOwogICAgaW5pdF91c2VyX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfY29nKCk7CiAgICBpbml0X3VzZXJfbG9jaygpOwogICAgaW5pdF91c2VyX21pbnVzKCk7CiAgICBpbml0X3VzZXJfcGVuKCk7CiAgICBpbml0X3VzZXJfcGx1cygpOwogICAgaW5pdF91c2VyX3JvdW5kX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfcm91bmRfY29nKCk7CiAgICBpbml0X3VzZXJfcm91bmRfbWludXMoKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wZW4oKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wbHVzKCk7CiAgICBpbml0X3VzZXJfcm91bmRfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfcm91bmQoKTsKICAgIGluaXRfdXNlcl9yb3VuZF94KCk7CiAgICBpbml0X3VzZXJfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfc3RhcigpOwogICAgaW5pdF91c2VyX3goKTsKICAgIGluaXRfdXNlcigpOwogICAgaW5pdF91c2Vyc19yb3VuZCgpOwogICAgaW5pdF91c2VycygpOwogICAgaW5pdF91dGVuc2lsc19jcm9zc2VkKCk7CiAgICBpbml0X3V0ZW5zaWxzKCk7CiAgICBpbml0X3ZhbigpOwogICAgaW5pdF91dGlsaXR5X3BvbGUoKTsKICAgIGluaXRfdmFyaWFibGUoKTsKICAgIGluaXRfdmF1bHQoKTsKICAgIGluaXRfdmVjdG9yX3NxdWFyZSgpOwogICAgaW5pdF92ZWdhbigpOwogICAgaW5pdF92ZW5ldGlhbl9tYXNrKCk7CiAgICBpbml0X3ZlbnVzKCk7CiAgICBpbml0X3ZlbnVzX2FuZF9tYXJzKCk7CiAgICBpbml0X3ZpYnJhdGVfb2ZmKCk7CiAgICBpbml0X3ZpYnJhdGUoKTsKICAgIGluaXRfdmlkZW9fb2ZmKCk7CiAgICBpbml0X3ZpZGVvKCk7CiAgICBpbml0X3ZvaWNlbWFpbCgpOwogICAgaW5pdF92aWRlb3RhcGUoKTsKICAgIGluaXRfdmlldygpOwogICAgaW5pdF92b2xsZXliYWxsKCk7CiAgICBpbml0X3ZvbHVtZV8xKCk7CiAgICBpbml0X3ZvbHVtZV8yKCk7CiAgICBpbml0X3ZvbHVtZV9vZmYoKTsKICAgIGluaXRfdm9sdW1lX3goKTsKICAgIGluaXRfdm9sdW1lKCk7CiAgICBpbml0X3ZvdGUoKTsKICAgIGluaXRfd2FsbGV0X21pbmltYWwoKTsKICAgIGluaXRfd2FsbGV0X2NhcmRzKCk7CiAgICBpbml0X3dhbGxldCgpOwogICAgaW5pdF93YWxscGFwZXIoKTsKICAgIGluaXRfd2FuZF9zcGFya2xlcygpOwogICAgaW5pdF93YW5kKCk7CiAgICBpbml0X3dhcmVob3VzZSgpOwogICAgaW5pdF93YXNoaW5nX21hY2hpbmUoKTsKICAgIGluaXRfd2F0Y2goKTsKICAgIGluaXRfd2F2ZXNfYXJyb3dfZG93bigpOwogICAgaW5pdF93YXZlc19hcnJvd191cCgpOwogICAgaW5pdF93YXZlc19sYWRkZXIoKTsKICAgIGluaXRfd2F2ZXMoKTsKICAgIGluaXRfd2F5cG9pbnRzKCk7CiAgICBpbml0X3dlYmNhbSgpOwogICAgaW5pdF93ZWJob29rX29mZigpOwogICAgaW5pdF93ZWJob29rKCk7CiAgICBpbml0X3dlaWdodF90aWxkZSgpOwogICAgaW5pdF93ZWlnaHQoKTsKICAgIGluaXRfd2hlYXRfb2ZmKCk7CiAgICBpbml0X3doZWF0KCk7CiAgICBpbml0X3dob2xlX3dvcmQoKTsKICAgIGluaXRfd2lmaV9jb2coKTsKICAgIGluaXRfd2lmaV9sb3coKTsKICAgIGluaXRfd2lmaV9oaWdoKCk7CiAgICBpbml0X3dpZmlfb2ZmKCk7CiAgICBpbml0X3dpZmlfcGVuKCk7CiAgICBpbml0X3dpZmlfc3luYygpOwogICAgaW5pdF93aWZpX3plcm8oKTsKICAgIGluaXRfd2lmaSgpOwogICAgaW5pdF93aW5kX2Fycm93X2Rvd24oKTsKICAgIGluaXRfd2luZCgpOwogICAgaW5pdF93aW5lX29mZigpOwogICAgaW5pdF93aW5lKCk7CiAgICBpbml0X3dvcm0oKTsKICAgIGluaXRfd29ya2Zsb3coKTsKICAgIGluaXRfd3JlbmNoKCk7CiAgICBpbml0X3goKTsKICAgIGluaXRfeW91dHViZSgpOwogICAgaW5pdF96YXBfb2ZmKCk7CiAgICBpbml0X3phcCgpOwogICAgaW5pdF96b29tX2luKCk7CiAgICBpbml0X3pvb21fb3V0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2x1Y2lkZS5qcwp2YXIgbHVjaWRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobHVjaWRlX2V4cG9ydHMsIHsKICBBQXJyb3dEb3duOiAoKSA9PiBBQXJyb3dEb3duLAogIEFBcnJvd1VwOiAoKSA9PiBBQXJyb3dVcCwKICBBTGFyZ2VTbWFsbDogKCkgPT4gQUxhcmdlU21hbGwsCiAgQWNjZXNzaWJpbGl0eTogKCkgPT4gQWNjZXNzaWJpbGl0eSwKICBBY3Rpdml0eTogKCkgPT4gQWN0aXZpdHksCiAgQWN0aXZpdHlTcXVhcmU6ICgpID0+IFNxdWFyZUFjdGl2aXR5LAogIEFpclZlbnQ6ICgpID0+IEFpclZlbnQsCiAgQWlycGxheTogKCkgPT4gQWlycGxheSwKICBBbGFybUNoZWNrOiAoKSA9PiBBbGFybUNsb2NrQ2hlY2ssCiAgQWxhcm1DbG9jazogKCkgPT4gQWxhcm1DbG9jaywKICBBbGFybUNsb2NrQ2hlY2s6ICgpID0+IEFsYXJtQ2xvY2tDaGVjaywKICBBbGFybUNsb2NrTWludXM6ICgpID0+IEFsYXJtQ2xvY2tNaW51cywKICBBbGFybUNsb2NrT2ZmOiAoKSA9PiBBbGFybUNsb2NrT2ZmLAogIEFsYXJtQ2xvY2tQbHVzOiAoKSA9PiBBbGFybUNsb2NrUGx1cywKICBBbGFybU1pbnVzOiAoKSA9PiBBbGFybUNsb2NrTWludXMsCiAgQWxhcm1QbHVzOiAoKSA9PiBBbGFybUNsb2NrUGx1cywKICBBbGFybVNtb2tlOiAoKSA9PiBBbGFybVNtb2tlLAogIEFsYnVtOiAoKSA9PiBBbGJ1bSwKICBBbGVydENpcmNsZTogKCkgPT4gQ2lyY2xlQWxlcnQsCiAgQWxlcnRPY3RhZ29uOiAoKSA9PiBPY3RhZ29uQWxlcnQsCiAgQWxlcnRUcmlhbmdsZTogKCkgPT4gVHJpYW5nbGVBbGVydCwKICBBbGlnbkNlbnRlcjogKCkgPT4gVGV4dEFsaWduQ2VudGVyLAogIEFsaWduQ2VudGVySG9yaXpvbnRhbDogKCkgPT4gQWxpZ25DZW50ZXJIb3Jpem9udGFsLAogIEFsaWduQ2VudGVyVmVydGljYWw6ICgpID0+IEFsaWduQ2VudGVyVmVydGljYWwsCiAgQWxpZ25FbmRIb3Jpem9udGFsOiAoKSA9PiBBbGlnbkVuZEhvcml6b250YWwsCiAgQWxpZ25FbmRWZXJ0aWNhbDogKCkgPT4gQWxpZ25FbmRWZXJ0aWNhbCwKICBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyOiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyLAogIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ6ICgpID0+IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQsCiAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0OiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQsCiAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlcjogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciwKICBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kLAogIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0LAogIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCwKICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW46ICgpID0+IEFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbiwKICBBbGlnbkp1c3RpZnk6ICgpID0+IFRleHRBbGlnbkp1c3RpZnksCiAgQWxpZ25MZWZ0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBBbGlnblJpZ2h0OiAoKSA9PiBUZXh0QWxpZ25FbmQsCiAgQWxpZ25TdGFydEhvcml6b250YWw6ICgpID0+IEFsaWduU3RhcnRIb3Jpem9udGFsLAogIEFsaWduU3RhcnRWZXJ0aWNhbDogKCkgPT4gQWxpZ25TdGFydFZlcnRpY2FsLAogIEFsaWduVmVydGljYWxEaXN0cmlidXRlQ2VudGVyOiAoKSA9PiBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciwKICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZDogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQsCiAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydDogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydCwKICBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjogKCkgPT4gQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXIsCiAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQ6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5RW5kLAogIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQ6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQsCiAgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOiAoKSA9PiBBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQsCiAgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjogKCkgPT4gQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbiwKICBBbWJ1bGFuY2U6ICgpID0+IEFtYnVsYW5jZSwKICBBbXBlcnNhbmQ6ICgpID0+IEFtcGVyc2FuZCwKICBBbXBlcnNhbmRzOiAoKSA9PiBBbXBlcnNhbmRzLAogIEFtcGhvcmE6ICgpID0+IEFtcGhvcmEsCiAgQW5jaG9yOiAoKSA9PiBBbmNob3IsCiAgQW5ncnk6ICgpID0+IEFuZ3J5LAogIEFubm95ZWQ6ICgpID0+IEFubm95ZWQsCiAgQW50ZW5uYTogKCkgPT4gQW50ZW5uYSwKICBBbnZpbDogKCkgPT4gQW52aWwsCiAgQXBlcnR1cmU6ICgpID0+IEFwZXJ0dXJlLAogIEFwcFdpbmRvdzogKCkgPT4gQXBwV2luZG93LAogIEFwcFdpbmRvd01hYzogKCkgPT4gQXBwV2luZG93TWFjLAogIEFwcGxlOiAoKSA9PiBBcHBsZSwKICBBcmNoaXZlOiAoKSA9PiBBcmNoaXZlLAogIEFyY2hpdmVSZXN0b3JlOiAoKSA9PiBBcmNoaXZlUmVzdG9yZSwKICBBcmNoaXZlWDogKCkgPT4gQXJjaGl2ZVgsCiAgQXJlYUNoYXJ0OiAoKSA9PiBDaGFydEFyZWEsCiAgQXJtY2hhaXI6ICgpID0+IEFybWNoYWlyLAogIEFycm93QmlnRG93bjogKCkgPT4gQXJyb3dCaWdEb3duLAogIEFycm93QmlnRG93bkRhc2g6ICgpID0+IEFycm93QmlnRG93bkRhc2gsCiAgQXJyb3dCaWdMZWZ0OiAoKSA9PiBBcnJvd0JpZ0xlZnQsCiAgQXJyb3dCaWdMZWZ0RGFzaDogKCkgPT4gQXJyb3dCaWdMZWZ0RGFzaCwKICBBcnJvd0JpZ1JpZ2h0OiAoKSA9PiBBcnJvd0JpZ1JpZ2h0LAogIEFycm93QmlnUmlnaHREYXNoOiAoKSA9PiBBcnJvd0JpZ1JpZ2h0RGFzaCwKICBBcnJvd0JpZ1VwOiAoKSA9PiBBcnJvd0JpZ1VwLAogIEFycm93QmlnVXBEYXNoOiAoKSA9PiBBcnJvd0JpZ1VwRGFzaCwKICBBcnJvd0Rvd246ICgpID0+IEFycm93RG93biwKICBBcnJvd0Rvd24wMTogKCkgPT4gQXJyb3dEb3duMDEsCiAgQXJyb3dEb3duMTA6ICgpID0+IEFycm93RG93bjEwLAogIEFycm93RG93bkFaOiAoKSA9PiBBcnJvd0Rvd25BWiwKICBBcnJvd0Rvd25BejogKCkgPT4gQXJyb3dEb3duQVosCiAgQXJyb3dEb3duQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd0Rvd24sCiAgQXJyb3dEb3duRnJvbUxpbmU6ICgpID0+IEFycm93RG93bkZyb21MaW5lLAogIEFycm93RG93bkxlZnQ6ICgpID0+IEFycm93RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdEZyb21TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dEb3duTGVmdCwKICBBcnJvd0Rvd25OYXJyb3dXaWRlOiAoKSA9PiBBcnJvd0Rvd25OYXJyb3dXaWRlLAogIEFycm93RG93blJpZ2h0OiAoKSA9PiBBcnJvd0Rvd25SaWdodCwKICBBcnJvd0Rvd25SaWdodEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0RG93blJpZ2h0LAogIEFycm93RG93blJpZ2h0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgQXJyb3dEb3duUmlnaHRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93blJpZ2h0LAogIEFycm93RG93blNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dEb3duLAogIEFycm93RG93blRvRG90OiAoKSA9PiBBcnJvd0Rvd25Ub0RvdCwKICBBcnJvd0Rvd25Ub0xpbmU6ICgpID0+IEFycm93RG93blRvTGluZSwKICBBcnJvd0Rvd25VcDogKCkgPT4gQXJyb3dEb3duVXAsCiAgQXJyb3dEb3duV2lkZU5hcnJvdzogKCkgPT4gQXJyb3dEb3duV2lkZU5hcnJvdywKICBBcnJvd0Rvd25aQTogKCkgPT4gQXJyb3dEb3duWkEsCiAgQXJyb3dEb3duWmE6ICgpID0+IEFycm93RG93blpBLAogIEFycm93TGVmdDogKCkgPT4gQXJyb3dMZWZ0LAogIEFycm93TGVmdENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dMZWZ0LAogIEFycm93TGVmdEZyb21MaW5lOiAoKSA9PiBBcnJvd0xlZnRGcm9tTGluZSwKICBBcnJvd0xlZnRSaWdodDogKCkgPT4gQXJyb3dMZWZ0UmlnaHQsCiAgQXJyb3dMZWZ0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd0xlZnQsCiAgQXJyb3dMZWZ0VG9MaW5lOiAoKSA9PiBBcnJvd0xlZnRUb0xpbmUsCiAgQXJyb3dSaWdodDogKCkgPT4gQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0Q2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd1JpZ2h0LAogIEFycm93UmlnaHRGcm9tTGluZTogKCkgPT4gQXJyb3dSaWdodEZyb21MaW5lLAogIEFycm93UmlnaHRMZWZ0OiAoKSA9PiBBcnJvd1JpZ2h0TGVmdCwKICBBcnJvd1JpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd1JpZ2h0LAogIEFycm93UmlnaHRUb0xpbmU6ICgpID0+IEFycm93UmlnaHRUb0xpbmUsCiAgQXJyb3dVcDogKCkgPT4gQXJyb3dVcCwKICBBcnJvd1VwMDE6ICgpID0+IEFycm93VXAwMSwKICBBcnJvd1VwMTA6ICgpID0+IEFycm93VXAxMCwKICBBcnJvd1VwQVo6ICgpID0+IEFycm93VXBBWiwKICBBcnJvd1VwQXo6ICgpID0+IEFycm93VXBBWiwKICBBcnJvd1VwQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd1VwLAogIEFycm93VXBEb3duOiAoKSA9PiBBcnJvd1VwRG93biwKICBBcnJvd1VwRnJvbURvdDogKCkgPT4gQXJyb3dVcEZyb21Eb3QsCiAgQXJyb3dVcEZyb21MaW5lOiAoKSA9PiBBcnJvd1VwRnJvbUxpbmUsCiAgQXJyb3dVcExlZnQ6ICgpID0+IEFycm93VXBMZWZ0LAogIEFycm93VXBMZWZ0RnJvbUNpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcExlZnQsCiAgQXJyb3dVcExlZnRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dFVwTGVmdCwKICBBcnJvd1VwTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcExlZnQsCiAgQXJyb3dVcE5hcnJvd1dpZGU6ICgpID0+IEFycm93VXBOYXJyb3dXaWRlLAogIEFycm93VXBSaWdodDogKCkgPT4gQXJyb3dVcFJpZ2h0LAogIEFycm93VXBSaWdodEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0VXBSaWdodCwKICBBcnJvd1VwUmlnaHRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dFVwUmlnaHQsCiAgQXJyb3dVcFJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgQXJyb3dVcFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcCwKICBBcnJvd1VwVG9MaW5lOiAoKSA9PiBBcnJvd1VwVG9MaW5lLAogIEFycm93VXBXaWRlTmFycm93OiAoKSA9PiBBcnJvd1VwV2lkZU5hcnJvdywKICBBcnJvd1VwWkE6ICgpID0+IEFycm93VXBaQSwKICBBcnJvd1VwWmE6ICgpID0+IEFycm93VXBaQSwKICBBcnJvd3NVcEZyb21MaW5lOiAoKSA9PiBBcnJvd3NVcEZyb21MaW5lLAogIEFzdGVyaXNrOiAoKSA9PiBBc3RlcmlzaywKICBBc3Rlcmlza1NxdWFyZTogKCkgPT4gU3F1YXJlQXN0ZXJpc2ssCiAgQXRTaWduOiAoKSA9PiBBdFNpZ24sCiAgQXRvbTogKCkgPT4gQXRvbSwKICBBdWRpb0xpbmVzOiAoKSA9PiBBdWRpb0xpbmVzLAogIEF1ZGlvV2F2ZWZvcm06ICgpID0+IEF1ZGlvV2F2ZWZvcm0sCiAgQXdhcmQ6ICgpID0+IEF3YXJkLAogIEF4ZTogKCkgPT4gQXhlLAogIEF4aXMzRDogKCkgPT4gQXhpczNkLAogIEF4aXMzZDogKCkgPT4gQXhpczNkLAogIEJhYnk6ICgpID0+IEJhYnksCiAgQmFja3BhY2s6ICgpID0+IEJhY2twYWNrLAogIEJhZGdlOiAoKSA9PiBCYWRnZSwKICBCYWRnZUFsZXJ0OiAoKSA9PiBCYWRnZUFsZXJ0LAogIEJhZGdlQ2VudDogKCkgPT4gQmFkZ2VDZW50LAogIEJhZGdlQ2hlY2s6ICgpID0+IEJhZGdlQ2hlY2ssCiAgQmFkZ2VEb2xsYXJTaWduOiAoKSA9PiBCYWRnZURvbGxhclNpZ24sCiAgQmFkZ2VFdXJvOiAoKSA9PiBCYWRnZUV1cm8sCiAgQmFkZ2VIZWxwOiAoKSA9PiBCYWRnZVF1ZXN0aW9uTWFyaywKICBCYWRnZUluZGlhblJ1cGVlOiAoKSA9PiBCYWRnZUluZGlhblJ1cGVlLAogIEJhZGdlSW5mbzogKCkgPT4gQmFkZ2VJbmZvLAogIEJhZGdlSmFwYW5lc2VZZW46ICgpID0+IEJhZGdlSmFwYW5lc2VZZW4sCiAgQmFkZ2VNaW51czogKCkgPT4gQmFkZ2VNaW51cywKICBCYWRnZVBlcmNlbnQ6ICgpID0+IEJhZGdlUGVyY2VudCwKICBCYWRnZVBsdXM6ICgpID0+IEJhZGdlUGx1cywKICBCYWRnZVBvdW5kU3Rlcmxpbmc6ICgpID0+IEJhZGdlUG91bmRTdGVybGluZywKICBCYWRnZVF1ZXN0aW9uTWFyazogKCkgPT4gQmFkZ2VRdWVzdGlvbk1hcmssCiAgQmFkZ2VSdXNzaWFuUnVibGU6ICgpID0+IEJhZGdlUnVzc2lhblJ1YmxlLAogIEJhZGdlU3dpc3NGcmFuYzogKCkgPT4gQmFkZ2VTd2lzc0ZyYW5jLAogIEJhZGdlVHVya2lzaExpcmE6ICgpID0+IEJhZGdlVHVya2lzaExpcmEsCiAgQmFkZ2VYOiAoKSA9PiBCYWRnZVgsCiAgQmFnZ2FnZUNsYWltOiAoKSA9PiBCYWdnYWdlQ2xhaW0sCiAgQmFsbG9vbjogKCkgPT4gQmFsbG9vbiwKICBCYW46ICgpID0+IEJhbiwKICBCYW5hbmE6ICgpID0+IEJhbmFuYSwKICBCYW5kYWdlOiAoKSA9PiBCYW5kYWdlLAogIEJhbmtub3RlOiAoKSA9PiBCYW5rbm90ZSwKICBCYW5rbm90ZUFycm93RG93bjogKCkgPT4gQmFua25vdGVBcnJvd0Rvd24sCiAgQmFua25vdGVBcnJvd1VwOiAoKSA9PiBCYW5rbm90ZUFycm93VXAsCiAgQmFua25vdGVYOiAoKSA9PiBCYW5rbm90ZVgsCiAgQmFyQ2hhcnQ6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZywKICBCYXJDaGFydDI6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uLAogIEJhckNoYXJ0MzogKCkgPT4gQ2hhcnRDb2x1bW4sCiAgQmFyQ2hhcnQ0OiAoKSA9PiBDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgQmFyQ2hhcnRCaWc6ICgpID0+IENoYXJ0Q29sdW1uQmlnLAogIEJhckNoYXJ0SG9yaXpvbnRhbDogKCkgPT4gQ2hhcnRCYXIsCiAgQmFyQ2hhcnRIb3Jpem9udGFsQmlnOiAoKSA9PiBDaGFydEJhckJpZywKICBCYXJjb2RlOiAoKSA9PiBCYXJjb2RlLAogIEJhcnJlbDogKCkgPT4gQmFycmVsLAogIEJhc2VsaW5lOiAoKSA9PiBCYXNlbGluZSwKICBCYXRoOiAoKSA9PiBCYXRoLAogIEJhdHRlcnk6ICgpID0+IEJhdHRlcnksCiAgQmF0dGVyeUNoYXJnaW5nOiAoKSA9PiBCYXR0ZXJ5Q2hhcmdpbmcsCiAgQmF0dGVyeUZ1bGw6ICgpID0+IEJhdHRlcnlGdWxsLAogIEJhdHRlcnlMb3c6ICgpID0+IEJhdHRlcnlMb3csCiAgQmF0dGVyeU1lZGl1bTogKCkgPT4gQmF0dGVyeU1lZGl1bSwKICBCYXR0ZXJ5UGx1czogKCkgPT4gQmF0dGVyeVBsdXMsCiAgQmF0dGVyeVdhcm5pbmc6ICgpID0+IEJhdHRlcnlXYXJuaW5nLAogIEJlYWtlcjogKCkgPT4gQmVha2VyLAogIEJlYW46ICgpID0+IEJlYW4sCiAgQmVhbk9mZjogKCkgPT4gQmVhbk9mZiwKICBCZWQ6ICgpID0+IEJlZCwKICBCZWREb3VibGU6ICgpID0+IEJlZERvdWJsZSwKICBCZWRTaW5nbGU6ICgpID0+IEJlZFNpbmdsZSwKICBCZWVmOiAoKSA9PiBCZWVmLAogIEJlZXI6ICgpID0+IEJlZXIsCiAgQmVlck9mZjogKCkgPT4gQmVlck9mZiwKICBCZWxsOiAoKSA9PiBCZWxsLAogIEJlbGxEb3Q6ICgpID0+IEJlbGxEb3QsCiAgQmVsbEVsZWN0cmljOiAoKSA9PiBCZWxsRWxlY3RyaWMsCiAgQmVsbE1pbnVzOiAoKSA9PiBCZWxsTWludXMsCiAgQmVsbE9mZjogKCkgPT4gQmVsbE9mZiwKICBCZWxsUGx1czogKCkgPT4gQmVsbFBsdXMsCiAgQmVsbFJpbmc6ICgpID0+IEJlbGxSaW5nLAogIEJldHdlZW5Ib3Jpem9uYWxFbmQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsRW5kLAogIEJldHdlZW5Ib3Jpem9uYWxTdGFydDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICBCZXR3ZWVuSG9yaXpvbnRhbEVuZDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxFbmQsCiAgQmV0d2Vlbkhvcml6b250YWxTdGFydDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICBCZXR3ZWVuVmVydGljYWxFbmQ6ICgpID0+IEJldHdlZW5WZXJ0aWNhbEVuZCwKICBCZXR3ZWVuVmVydGljYWxTdGFydDogKCkgPT4gQmV0d2VlblZlcnRpY2FsU3RhcnQsCiAgQmljZXBzRmxleGVkOiAoKSA9PiBCaWNlcHNGbGV4ZWQsCiAgQmlrZTogKCkgPT4gQmlrZSwKICBCaW5hcnk6ICgpID0+IEJpbmFyeSwKICBCaW5vY3VsYXJzOiAoKSA9PiBCaW5vY3VsYXJzLAogIEJpb2hhemFyZDogKCkgPT4gQmlvaGF6YXJkLAogIEJpcmQ6ICgpID0+IEJpcmQsCiAgQmlyZGhvdXNlOiAoKSA9PiBCaXJkaG91c2UsCiAgQml0Y29pbjogKCkgPT4gQml0Y29pbiwKICBCbGVuZDogKCkgPT4gQmxlbmQsCiAgQmxpbmRzOiAoKSA9PiBCbGluZHMsCiAgQmxvY2tzOiAoKSA9PiBCbG9ja3MsCiAgQmx1ZXRvb3RoOiAoKSA9PiBCbHVldG9vdGgsCiAgQmx1ZXRvb3RoQ29ubmVjdGVkOiAoKSA9PiBCbHVldG9vdGhDb25uZWN0ZWQsCiAgQmx1ZXRvb3RoT2ZmOiAoKSA9PiBCbHVldG9vdGhPZmYsCiAgQmx1ZXRvb3RoU2VhcmNoaW5nOiAoKSA9PiBCbHVldG9vdGhTZWFyY2hpbmcsCiAgQm9sZDogKCkgPT4gQm9sZCwKICBCb2x0OiAoKSA9PiBCb2x0LAogIEJvbWI6ICgpID0+IEJvbWIsCiAgQm9uZTogKCkgPT4gQm9uZSwKICBCb29rOiAoKSA9PiBCb29rLAogIEJvb2tBOiAoKSA9PiBCb29rQSwKICBCb29rQWxlcnQ6ICgpID0+IEJvb2tBbGVydCwKICBCb29rQXVkaW86ICgpID0+IEJvb2tBdWRpbywKICBCb29rQ2hlY2s6ICgpID0+IEJvb2tDaGVjaywKICBCb29rQ29weTogKCkgPT4gQm9va0NvcHksCiAgQm9va0Rhc2hlZDogKCkgPT4gQm9va0Rhc2hlZCwKICBCb29rRG93bjogKCkgPT4gQm9va0Rvd24sCiAgQm9va0hlYWRwaG9uZXM6ICgpID0+IEJvb2tIZWFkcGhvbmVzLAogIEJvb2tIZWFydDogKCkgPT4gQm9va0hlYXJ0LAogIEJvb2tJbWFnZTogKCkgPT4gQm9va0ltYWdlLAogIEJvb2tLZXk6ICgpID0+IEJvb2tLZXksCiAgQm9va0xvY2s6ICgpID0+IEJvb2tMb2NrLAogIEJvb2tNYXJrZWQ6ICgpID0+IEJvb2tNYXJrZWQsCiAgQm9va01pbnVzOiAoKSA9PiBCb29rTWludXMsCiAgQm9va09wZW46ICgpID0+IEJvb2tPcGVuLAogIEJvb2tPcGVuQ2hlY2s6ICgpID0+IEJvb2tPcGVuQ2hlY2ssCiAgQm9va09wZW5UZXh0OiAoKSA9PiBCb29rT3BlblRleHQsCiAgQm9va1BsdXM6ICgpID0+IEJvb2tQbHVzLAogIEJvb2tTZWFyY2g6ICgpID0+IEJvb2tTZWFyY2gsCiAgQm9va1RlbXBsYXRlOiAoKSA9PiBCb29rRGFzaGVkLAogIEJvb2tUZXh0OiAoKSA9PiBCb29rVGV4dCwKICBCb29rVHlwZTogKCkgPT4gQm9va1R5cGUsCiAgQm9va1VwOiAoKSA9PiBCb29rVXAsCiAgQm9va1VwMjogKCkgPT4gQm9va1VwMiwKICBCb29rVXNlcjogKCkgPT4gQm9va1VzZXIsCiAgQm9va1g6ICgpID0+IEJvb2tYLAogIEJvb2ttYXJrOiAoKSA9PiBCb29rbWFyaywKICBCb29rbWFya0NoZWNrOiAoKSA9PiBCb29rbWFya0NoZWNrLAogIEJvb2ttYXJrTWludXM6ICgpID0+IEJvb2ttYXJrTWludXMsCiAgQm9va21hcmtQbHVzOiAoKSA9PiBCb29rbWFya1BsdXMsCiAgQm9va21hcmtYOiAoKSA9PiBCb29rbWFya1gsCiAgQm9vbUJveDogKCkgPT4gQm9vbUJveCwKICBCb3Q6ICgpID0+IEJvdCwKICBCb3RNZXNzYWdlU3F1YXJlOiAoKSA9PiBCb3RNZXNzYWdlU3F1YXJlLAogIEJvdE9mZjogKCkgPT4gQm90T2ZmLAogIEJvdHRsZVdpbmU6ICgpID0+IEJvdHRsZVdpbmUsCiAgQm93QXJyb3c6ICgpID0+IEJvd0Fycm93LAogIEJveDogKCkgPT4gQm94LAogIEJveFNlbGVjdDogKCkgPT4gU3F1YXJlRGFzaGVkLAogIEJveGVzOiAoKSA9PiBCb3hlcywKICBCcmFjZXM6ICgpID0+IEJyYWNlcywKICBCcmFja2V0czogKCkgPT4gQnJhY2tldHMsCiAgQnJhaW46ICgpID0+IEJyYWluLAogIEJyYWluQ2lyY3VpdDogKCkgPT4gQnJhaW5DaXJjdWl0LAogIEJyYWluQ29nOiAoKSA9PiBCcmFpbkNvZywKICBCcmlja1dhbGw6ICgpID0+IEJyaWNrV2FsbCwKICBCcmlja1dhbGxGaXJlOiAoKSA9PiBCcmlja1dhbGxGaXJlLAogIEJyaWNrV2FsbFNoaWVsZDogKCkgPT4gQnJpY2tXYWxsU2hpZWxkLAogIEJyaWVmY2FzZTogKCkgPT4gQnJpZWZjYXNlLAogIEJyaWVmY2FzZUJ1c2luZXNzOiAoKSA9PiBCcmllZmNhc2VCdXNpbmVzcywKICBCcmllZmNhc2VDb252ZXlvckJlbHQ6ICgpID0+IEJyaWVmY2FzZUNvbnZleW9yQmVsdCwKICBCcmllZmNhc2VNZWRpY2FsOiAoKSA9PiBCcmllZmNhc2VNZWRpY2FsLAogIEJyaW5nVG9Gcm9udDogKCkgPT4gQnJpbmdUb0Zyb250LAogIEJydXNoOiAoKSA9PiBCcnVzaCwKICBCcnVzaENsZWFuaW5nOiAoKSA9PiBCcnVzaENsZWFuaW5nLAogIEJ1YmJsZXM6ICgpID0+IEJ1YmJsZXMsCiAgQnVnOiAoKSA9PiBCdWcsCiAgQnVnT2ZmOiAoKSA9PiBCdWdPZmYsCiAgQnVnUGxheTogKCkgPT4gQnVnUGxheSwKICBCdWlsZGluZzogKCkgPT4gQnVpbGRpbmcsCiAgQnVpbGRpbmcyOiAoKSA9PiBCdWlsZGluZzIsCiAgQnVzOiAoKSA9PiBCdXMsCiAgQnVzRnJvbnQ6ICgpID0+IEJ1c0Zyb250LAogIENhYmxlOiAoKSA9PiBDYWJsZSwKICBDYWJsZUNhcjogKCkgPT4gQ2FibGVDYXIsCiAgQ2FrZTogKCkgPT4gQ2FrZSwKICBDYWtlU2xpY2U6ICgpID0+IENha2VTbGljZSwKICBDYWxjdWxhdG9yOiAoKSA9PiBDYWxjdWxhdG9yLAogIENhbGVuZGFyOiAoKSA9PiBDYWxlbmRhciwKICBDYWxlbmRhcjE6ICgpID0+IENhbGVuZGFyMSwKICBDYWxlbmRhckFycm93RG93bjogKCkgPT4gQ2FsZW5kYXJBcnJvd0Rvd24sCiAgQ2FsZW5kYXJBcnJvd1VwOiAoKSA9PiBDYWxlbmRhckFycm93VXAsCiAgQ2FsZW5kYXJDaGVjazogKCkgPT4gQ2FsZW5kYXJDaGVjaywKICBDYWxlbmRhckNoZWNrMjogKCkgPT4gQ2FsZW5kYXJDaGVjazIsCiAgQ2FsZW5kYXJDbG9jazogKCkgPT4gQ2FsZW5kYXJDbG9jaywKICBDYWxlbmRhckNvZzogKCkgPT4gQ2FsZW5kYXJDb2csCiAgQ2FsZW5kYXJEYXlzOiAoKSA9PiBDYWxlbmRhckRheXMsCiAgQ2FsZW5kYXJGb2xkOiAoKSA9PiBDYWxlbmRhckZvbGQsCiAgQ2FsZW5kYXJIZWFydDogKCkgPT4gQ2FsZW5kYXJIZWFydCwKICBDYWxlbmRhck1pbnVzOiAoKSA9PiBDYWxlbmRhck1pbnVzLAogIENhbGVuZGFyTWludXMyOiAoKSA9PiBDYWxlbmRhck1pbnVzMiwKICBDYWxlbmRhck9mZjogKCkgPT4gQ2FsZW5kYXJPZmYsCiAgQ2FsZW5kYXJQbHVzOiAoKSA9PiBDYWxlbmRhclBsdXMsCiAgQ2FsZW5kYXJQbHVzMjogKCkgPT4gQ2FsZW5kYXJQbHVzMiwKICBDYWxlbmRhclJhbmdlOiAoKSA9PiBDYWxlbmRhclJhbmdlLAogIENhbGVuZGFyU2VhcmNoOiAoKSA9PiBDYWxlbmRhclNlYXJjaCwKICBDYWxlbmRhclN5bmM6ICgpID0+IENhbGVuZGFyU3luYywKICBDYWxlbmRhclg6ICgpID0+IENhbGVuZGFyWCwKICBDYWxlbmRhclgyOiAoKSA9PiBDYWxlbmRhclgyLAogIENhbGVuZGFyczogKCkgPT4gQ2FsZW5kYXJzLAogIENhbWVyYTogKCkgPT4gQ2FtZXJhLAogIENhbWVyYU9mZjogKCkgPT4gQ2FtZXJhT2ZmLAogIENhbmRsZXN0aWNrQ2hhcnQ6ICgpID0+IENoYXJ0Q2FuZGxlc3RpY2ssCiAgQ2FuZHk6ICgpID0+IENhbmR5LAogIENhbmR5Q2FuZTogKCkgPT4gQ2FuZHlDYW5lLAogIENhbmR5T2ZmOiAoKSA9PiBDYW5keU9mZiwKICBDYW5uYWJpczogKCkgPT4gQ2FubmFiaXMsCiAgQ2FubmFiaXNPZmY6ICgpID0+IENhbm5hYmlzT2ZmLAogIENhcHRpb25zOiAoKSA9PiBDYXB0aW9ucywKICBDYXB0aW9uc09mZjogKCkgPT4gQ2FwdGlvbnNPZmYsCiAgQ2FyOiAoKSA9PiBDYXIsCiAgQ2FyRnJvbnQ6ICgpID0+IENhckZyb250LAogIENhclRheGlGcm9udDogKCkgPT4gQ2FyVGF4aUZyb250LAogIENhcmF2YW46ICgpID0+IENhcmF2YW4sCiAgQ2FyZFNpbTogKCkgPT4gQ2FyZFNpbSwKICBDYXJyb3Q6ICgpID0+IENhcnJvdCwKICBDYXNlTG93ZXI6ICgpID0+IENhc2VMb3dlciwKICBDYXNlU2Vuc2l0aXZlOiAoKSA9PiBDYXNlU2Vuc2l0aXZlLAogIENhc2VVcHBlcjogKCkgPT4gQ2FzZVVwcGVyLAogIENhc3NldHRlVGFwZTogKCkgPT4gQ2Fzc2V0dGVUYXBlLAogIENhc3Q6ICgpID0+IENhc3QsCiAgQ2FzdGxlOiAoKSA9PiBDYXN0bGUsCiAgQ2F0OiAoKSA9PiBDYXQsCiAgQ2N0djogKCkgPT4gQ2N0diwKICBDaGFydEFyZWE6ICgpID0+IENoYXJ0QXJlYSwKICBDaGFydEJhcjogKCkgPT4gQ2hhcnRCYXIsCiAgQ2hhcnRCYXJCaWc6ICgpID0+IENoYXJ0QmFyQmlnLAogIENoYXJ0QmFyRGVjcmVhc2luZzogKCkgPT4gQ2hhcnRCYXJEZWNyZWFzaW5nLAogIENoYXJ0QmFySW5jcmVhc2luZzogKCkgPT4gQ2hhcnRCYXJJbmNyZWFzaW5nLAogIENoYXJ0QmFyU3RhY2tlZDogKCkgPT4gQ2hhcnRCYXJTdGFja2VkLAogIENoYXJ0Q2FuZGxlc3RpY2s6ICgpID0+IENoYXJ0Q2FuZGxlc3RpY2ssCiAgQ2hhcnRDb2x1bW46ICgpID0+IENoYXJ0Q29sdW1uLAogIENoYXJ0Q29sdW1uQmlnOiAoKSA9PiBDaGFydENvbHVtbkJpZywKICBDaGFydENvbHVtbkRlY3JlYXNpbmc6ICgpID0+IENoYXJ0Q29sdW1uRGVjcmVhc2luZywKICBDaGFydENvbHVtbkluY3JlYXNpbmc6ICgpID0+IENoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBDaGFydENvbHVtblN0YWNrZWQ6ICgpID0+IENoYXJ0Q29sdW1uU3RhY2tlZCwKICBDaGFydEdhbnR0OiAoKSA9PiBDaGFydEdhbnR0LAogIENoYXJ0TGluZTogKCkgPT4gQ2hhcnRMaW5lLAogIENoYXJ0TmV0d29yazogKCkgPT4gQ2hhcnROZXR3b3JrLAogIENoYXJ0Tm9BeGVzQ29sdW1uOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbiwKICBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmc6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZywKICBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZywKICBDaGFydE5vQXhlc0NvbWJpbmVkOiAoKSA9PiBDaGFydE5vQXhlc0NvbWJpbmVkLAogIENoYXJ0Tm9BeGVzR2FudHQ6ICgpID0+IENoYXJ0Tm9BeGVzR2FudHQsCiAgQ2hhcnRQaWU6ICgpID0+IENoYXJ0UGllLAogIENoYXJ0U2NhdHRlcjogKCkgPT4gQ2hhcnRTY2F0dGVyLAogIENoYXJ0U3BsaW5lOiAoKSA9PiBDaGFydFNwbGluZSwKICBDaGVjazogKCkgPT4gQ2hlY2ssCiAgQ2hlY2tDaGVjazogKCkgPT4gQ2hlY2tDaGVjaywKICBDaGVja0NpcmNsZTogKCkgPT4gQ2lyY2xlQ2hlY2tCaWcsCiAgQ2hlY2tDaXJjbGUyOiAoKSA9PiBDaXJjbGVDaGVjaywKICBDaGVja0xpbmU6ICgpID0+IENoZWNrTGluZSwKICBDaGVja1NxdWFyZTogKCkgPT4gU3F1YXJlQ2hlY2tCaWcsCiAgQ2hlY2tTcXVhcmUyOiAoKSA9PiBTcXVhcmVDaGVjaywKICBDaGVmSGF0OiAoKSA9PiBDaGVmSGF0LAogIENoZXJyeTogKCkgPT4gQ2hlcnJ5LAogIENoZXNzQmlzaG9wOiAoKSA9PiBDaGVzc0Jpc2hvcCwKICBDaGVzc0tpbmc6ICgpID0+IENoZXNzS2luZywKICBDaGVzc0tuaWdodDogKCkgPT4gQ2hlc3NLbmlnaHQsCiAgQ2hlc3NQYXduOiAoKSA9PiBDaGVzc1Bhd24sCiAgQ2hlc3NRdWVlbjogKCkgPT4gQ2hlc3NRdWVlbiwKICBDaGVzc1Jvb2s6ICgpID0+IENoZXNzUm9vaywKICBDaGV2cm9uRG93bjogKCkgPT4gQ2hldnJvbkRvd24sCiAgQ2hldnJvbkRvd25DaXJjbGU6ICgpID0+IENpcmNsZUNoZXZyb25Eb3duLAogIENoZXZyb25Eb3duU3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uRG93biwKICBDaGV2cm9uRmlyc3Q6ICgpID0+IENoZXZyb25GaXJzdCwKICBDaGV2cm9uTGFzdDogKCkgPT4gQ2hldnJvbkxhc3QsCiAgQ2hldnJvbkxlZnQ6ICgpID0+IENoZXZyb25MZWZ0LAogIENoZXZyb25MZWZ0Q2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uTGVmdCwKICBDaGV2cm9uTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvbkxlZnQsCiAgQ2hldnJvblJpZ2h0OiAoKSA9PiBDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblJpZ2h0Q2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblVwOiAoKSA9PiBDaGV2cm9uVXAsCiAgQ2hldnJvblVwQ2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uVXAsCiAgQ2hldnJvblVwU3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uVXAsCiAgQ2hldnJvbnNEb3duOiAoKSA9PiBDaGV2cm9uc0Rvd24sCiAgQ2hldnJvbnNEb3duVXA6ICgpID0+IENoZXZyb25zRG93blVwLAogIENoZXZyb25zTGVmdDogKCkgPT4gQ2hldnJvbnNMZWZ0LAogIENoZXZyb25zTGVmdFJpZ2h0OiAoKSA9PiBDaGV2cm9uc0xlZnRSaWdodCwKICBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzOiAoKSA9PiBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzLAogIENoZXZyb25zUmlnaHQ6ICgpID0+IENoZXZyb25zUmlnaHQsCiAgQ2hldnJvbnNSaWdodExlZnQ6ICgpID0+IENoZXZyb25zUmlnaHRMZWZ0LAogIENoZXZyb25zVXA6ICgpID0+IENoZXZyb25zVXAsCiAgQ2hldnJvbnNVcERvd246ICgpID0+IENoZXZyb25zVXBEb3duLAogIENocm9tZTogKCkgPT4gQ2hyb21pdW0sCiAgQ2hyb21pdW06ICgpID0+IENocm9taXVtLAogIENodXJjaDogKCkgPT4gQ2h1cmNoLAogIENpZ2FyZXR0ZTogKCkgPT4gQ2lnYXJldHRlLAogIENpZ2FyZXR0ZU9mZjogKCkgPT4gQ2lnYXJldHRlT2ZmLAogIENpcmNsZTogKCkgPT4gQ2lyY2xlLAogIENpcmNsZUFsZXJ0OiAoKSA9PiBDaXJjbGVBbGVydCwKICBDaXJjbGVBcnJvd0Rvd246ICgpID0+IENpcmNsZUFycm93RG93biwKICBDaXJjbGVBcnJvd0xlZnQ6ICgpID0+IENpcmNsZUFycm93TGVmdCwKICBDaXJjbGVBcnJvd091dERvd25MZWZ0OiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25MZWZ0LAogIENpcmNsZUFycm93T3V0RG93blJpZ2h0OiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25SaWdodCwKICBDaXJjbGVBcnJvd091dFVwTGVmdDogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcExlZnQsCiAgQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0OiAoKSA9PiBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgQ2lyY2xlQXJyb3dSaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dSaWdodCwKICBDaXJjbGVBcnJvd1VwOiAoKSA9PiBDaXJjbGVBcnJvd1VwLAogIENpcmNsZUNoZWNrOiAoKSA9PiBDaXJjbGVDaGVjaywKICBDaXJjbGVDaGVja0JpZzogKCkgPT4gQ2lyY2xlQ2hlY2tCaWcsCiAgQ2lyY2xlQ2hldnJvbkRvd246ICgpID0+IENpcmNsZUNoZXZyb25Eb3duLAogIENpcmNsZUNoZXZyb25MZWZ0OiAoKSA9PiBDaXJjbGVDaGV2cm9uTGVmdCwKICBDaXJjbGVDaGV2cm9uUmlnaHQ6ICgpID0+IENpcmNsZUNoZXZyb25SaWdodCwKICBDaXJjbGVDaGV2cm9uVXA6ICgpID0+IENpcmNsZUNoZXZyb25VcCwKICBDaXJjbGVEYXNoZWQ6ICgpID0+IENpcmNsZURhc2hlZCwKICBDaXJjbGVEaXZpZGU6ICgpID0+IENpcmNsZURpdmlkZSwKICBDaXJjbGVEb2xsYXJTaWduOiAoKSA9PiBDaXJjbGVEb2xsYXJTaWduLAogIENpcmNsZURvdDogKCkgPT4gQ2lyY2xlRG90LAogIENpcmNsZURvdERhc2hlZDogKCkgPT4gQ2lyY2xlRG90RGFzaGVkLAogIENpcmNsZUVsbGlwc2lzOiAoKSA9PiBDaXJjbGVFbGxpcHNpcywKICBDaXJjbGVFcXVhbDogKCkgPT4gQ2lyY2xlRXF1YWwsCiAgQ2lyY2xlRmFkaW5nQXJyb3dVcDogKCkgPT4gQ2lyY2xlRmFkaW5nQXJyb3dVcCwKICBDaXJjbGVGYWRpbmdQbHVzOiAoKSA9PiBDaXJjbGVGYWRpbmdQbHVzLAogIENpcmNsZUdhdWdlOiAoKSA9PiBDaXJjbGVHYXVnZSwKICBDaXJjbGVIZWxwOiAoKSA9PiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgQ2lyY2xlTWludXM6ICgpID0+IENpcmNsZU1pbnVzLAogIENpcmNsZU9mZjogKCkgPT4gQ2lyY2xlT2ZmLAogIENpcmNsZVBhcmtpbmc6ICgpID0+IENpcmNsZVBhcmtpbmcsCiAgQ2lyY2xlUGFya2luZ09mZjogKCkgPT4gQ2lyY2xlUGFya2luZ09mZiwKICBDaXJjbGVQYXVzZTogKCkgPT4gQ2lyY2xlUGF1c2UsCiAgQ2lyY2xlUGVyY2VudDogKCkgPT4gQ2lyY2xlUGVyY2VudCwKICBDaXJjbGVQaWxlOiAoKSA9PiBDaXJjbGVQaWxlLAogIENpcmNsZVBsYXk6ICgpID0+IENpcmNsZVBsYXksCiAgQ2lyY2xlUGx1czogKCkgPT4gQ2lyY2xlUGx1cywKICBDaXJjbGVQb3VuZFN0ZXJsaW5nOiAoKSA9PiBDaXJjbGVQb3VuZFN0ZXJsaW5nLAogIENpcmNsZVBvd2VyOiAoKSA9PiBDaXJjbGVQb3dlciwKICBDaXJjbGVRdWVzdGlvbk1hcms6ICgpID0+IENpcmNsZVF1ZXN0aW9uTWFyaywKICBDaXJjbGVTbGFzaDogKCkgPT4gQ2lyY2xlU2xhc2gsCiAgQ2lyY2xlU2xhc2gyOiAoKSA9PiBDaXJjbGVTbGFzaDIsCiAgQ2lyY2xlU2xhc2hlZDogKCkgPT4gQ2lyY2xlU2xhc2gyLAogIENpcmNsZVNtYWxsOiAoKSA9PiBDaXJjbGVTbWFsbCwKICBDaXJjbGVTdGFyOiAoKSA9PiBDaXJjbGVTdGFyLAogIENpcmNsZVN0b3A6ICgpID0+IENpcmNsZVN0b3AsCiAgQ2lyY2xlVXNlcjogKCkgPT4gQ2lyY2xlVXNlciwKICBDaXJjbGVVc2VyUm91bmQ6ICgpID0+IENpcmNsZVVzZXJSb3VuZCwKICBDaXJjbGVYOiAoKSA9PiBDaXJjbGVYLAogIENpcmN1aXRCb2FyZDogKCkgPT4gQ2lyY3VpdEJvYXJkLAogIENpdHJ1czogKCkgPT4gQ2l0cnVzLAogIENsYXBwZXJib2FyZDogKCkgPT4gQ2xhcHBlcmJvYXJkLAogIENsaXBib2FyZDogKCkgPT4gQ2xpcGJvYXJkLAogIENsaXBib2FyZENoZWNrOiAoKSA9PiBDbGlwYm9hcmRDaGVjaywKICBDbGlwYm9hcmRDbG9jazogKCkgPT4gQ2xpcGJvYXJkQ2xvY2ssCiAgQ2xpcGJvYXJkQ29weTogKCkgPT4gQ2xpcGJvYXJkQ29weSwKICBDbGlwYm9hcmRFZGl0OiAoKSA9PiBDbGlwYm9hcmRQZW4sCiAgQ2xpcGJvYXJkTGlzdDogKCkgPT4gQ2xpcGJvYXJkTGlzdCwKICBDbGlwYm9hcmRNaW51czogKCkgPT4gQ2xpcGJvYXJkTWludXMsCiAgQ2xpcGJvYXJkUGFzdGU6ICgpID0+IENsaXBib2FyZFBhc3RlLAogIENsaXBib2FyZFBlbjogKCkgPT4gQ2xpcGJvYXJkUGVuLAogIENsaXBib2FyZFBlbkxpbmU6ICgpID0+IENsaXBib2FyZFBlbkxpbmUsCiAgQ2xpcGJvYXJkUGx1czogKCkgPT4gQ2xpcGJvYXJkUGx1cywKICBDbGlwYm9hcmRTaWduYXR1cmU6ICgpID0+IENsaXBib2FyZFBlbkxpbmUsCiAgQ2xpcGJvYXJkVHlwZTogKCkgPT4gQ2xpcGJvYXJkVHlwZSwKICBDbGlwYm9hcmRYOiAoKSA9PiBDbGlwYm9hcmRYLAogIENsb2NrOiAoKSA9PiBDbG9jaywKICBDbG9jazE6ICgpID0+IENsb2NrMSwKICBDbG9jazEwOiAoKSA9PiBDbG9jazEwLAogIENsb2NrMTE6ICgpID0+IENsb2NrMTEsCiAgQ2xvY2sxMjogKCkgPT4gQ2xvY2sxMiwKICBDbG9jazI6ICgpID0+IENsb2NrMiwKICBDbG9jazM6ICgpID0+IENsb2NrMywKICBDbG9jazQ6ICgpID0+IENsb2NrNCwKICBDbG9jazU6ICgpID0+IENsb2NrNSwKICBDbG9jazY6ICgpID0+IENsb2NrNiwKICBDbG9jazc6ICgpID0+IENsb2NrNywKICBDbG9jazg6ICgpID0+IENsb2NrOCwKICBDbG9jazk6ICgpID0+IENsb2NrOSwKICBDbG9ja0FsZXJ0OiAoKSA9PiBDbG9ja0FsZXJ0LAogIENsb2NrQXJyb3dEb3duOiAoKSA9PiBDbG9ja0Fycm93RG93biwKICBDbG9ja0Fycm93VXA6ICgpID0+IENsb2NrQXJyb3dVcCwKICBDbG9ja0NoZWNrOiAoKSA9PiBDbG9ja0NoZWNrLAogIENsb2NrRmFkaW5nOiAoKSA9PiBDbG9ja0ZhZGluZywKICBDbG9ja1BsdXM6ICgpID0+IENsb2NrUGx1cywKICBDbG9zZWRDYXB0aW9uOiAoKSA9PiBDbG9zZWRDYXB0aW9uLAogIENsb3VkOiAoKSA9PiBDbG91ZCwKICBDbG91ZEFsZXJ0OiAoKSA9PiBDbG91ZEFsZXJ0LAogIENsb3VkQmFja3VwOiAoKSA9PiBDbG91ZEJhY2t1cCwKICBDbG91ZENoZWNrOiAoKSA9PiBDbG91ZENoZWNrLAogIENsb3VkQ29nOiAoKSA9PiBDbG91ZENvZywKICBDbG91ZERvd25sb2FkOiAoKSA9PiBDbG91ZERvd25sb2FkLAogIENsb3VkRHJpenpsZTogKCkgPT4gQ2xvdWREcml6emxlLAogIENsb3VkRm9nOiAoKSA9PiBDbG91ZEZvZywKICBDbG91ZEhhaWw6ICgpID0+IENsb3VkSGFpbCwKICBDbG91ZExpZ2h0bmluZzogKCkgPT4gQ2xvdWRMaWdodG5pbmcsCiAgQ2xvdWRNb29uOiAoKSA9PiBDbG91ZE1vb24sCiAgQ2xvdWRNb29uUmFpbjogKCkgPT4gQ2xvdWRNb29uUmFpbiwKICBDbG91ZE9mZjogKCkgPT4gQ2xvdWRPZmYsCiAgQ2xvdWRSYWluOiAoKSA9PiBDbG91ZFJhaW4sCiAgQ2xvdWRSYWluV2luZDogKCkgPT4gQ2xvdWRSYWluV2luZCwKICBDbG91ZFNub3c6ICgpID0+IENsb3VkU25vdywKICBDbG91ZFN1bjogKCkgPT4gQ2xvdWRTdW4sCiAgQ2xvdWRTdW5SYWluOiAoKSA9PiBDbG91ZFN1blJhaW4sCiAgQ2xvdWRTeW5jOiAoKSA9PiBDbG91ZFN5bmMsCiAgQ2xvdWRVcGxvYWQ6ICgpID0+IENsb3VkVXBsb2FkLAogIENsb3VkeTogKCkgPT4gQ2xvdWR5LAogIENsb3ZlcjogKCkgPT4gQ2xvdmVyLAogIENsdWI6ICgpID0+IENsdWIsCiAgQ29kZTogKCkgPT4gQ29kZSwKICBDb2RlMjogKCkgPT4gQ29kZVhtbCwKICBDb2RlU3F1YXJlOiAoKSA9PiBTcXVhcmVDb2RlLAogIENvZGVYbWw6ICgpID0+IENvZGVYbWwsCiAgQ29kZXBlbjogKCkgPT4gQ29kZXBlbiwKICBDb2Rlc2FuZGJveDogKCkgPT4gQ29kZXNhbmRib3gsCiAgQ29mZmVlOiAoKSA9PiBDb2ZmZWUsCiAgQ29nOiAoKSA9PiBDb2csCiAgQ29pbnM6ICgpID0+IENvaW5zLAogIENvbHVtbnM6ICgpID0+IENvbHVtbnMyLAogIENvbHVtbnMyOiAoKSA9PiBDb2x1bW5zMiwKICBDb2x1bW5zMzogKCkgPT4gQ29sdW1uczMsCiAgQ29sdW1uczNDb2c6ICgpID0+IENvbHVtbnMzQ29nLAogIENvbHVtbnM0OiAoKSA9PiBDb2x1bW5zNCwKICBDb2x1bW5zU2V0dGluZ3M6ICgpID0+IENvbHVtbnMzQ29nLAogIENvbWJpbmU6ICgpID0+IENvbWJpbmUsCiAgQ29tbWFuZDogKCkgPT4gQ29tbWFuZCwKICBDb21wYXNzOiAoKSA9PiBDb21wYXNzLAogIENvbXBvbmVudDogKCkgPT4gQ29tcG9uZW50LAogIENvbXB1dGVyOiAoKSA9PiBDb21wdXRlciwKICBDb25jaWVyZ2VCZWxsOiAoKSA9PiBDb25jaWVyZ2VCZWxsLAogIENvbmU6ICgpID0+IENvbmUsCiAgQ29uc3RydWN0aW9uOiAoKSA9PiBDb25zdHJ1Y3Rpb24sCiAgQ29udGFjdDogKCkgPT4gQ29udGFjdCwKICBDb250YWN0MjogKCkgPT4gQ29udGFjdFJvdW5kLAogIENvbnRhY3RSb3VuZDogKCkgPT4gQ29udGFjdFJvdW5kLAogIENvbnRhaW5lcjogKCkgPT4gQ29udGFpbmVyLAogIENvbnRyYXN0OiAoKSA9PiBDb250cmFzdCwKICBDb29raWU6ICgpID0+IENvb2tpZSwKICBDb29raW5nUG90OiAoKSA9PiBDb29raW5nUG90LAogIENvcHk6ICgpID0+IENvcHksCiAgQ29weUNoZWNrOiAoKSA9PiBDb3B5Q2hlY2ssCiAgQ29weU1pbnVzOiAoKSA9PiBDb3B5TWludXMsCiAgQ29weVBsdXM6ICgpID0+IENvcHlQbHVzLAogIENvcHlTbGFzaDogKCkgPT4gQ29weVNsYXNoLAogIENvcHlYOiAoKSA9PiBDb3B5WCwKICBDb3B5bGVmdDogKCkgPT4gQ29weWxlZnQsCiAgQ29weXJpZ2h0OiAoKSA9PiBDb3B5cmlnaHQsCiAgQ29ybmVyRG93bkxlZnQ6ICgpID0+IENvcm5lckRvd25MZWZ0LAogIENvcm5lckRvd25SaWdodDogKCkgPT4gQ29ybmVyRG93blJpZ2h0LAogIENvcm5lckxlZnREb3duOiAoKSA9PiBDb3JuZXJMZWZ0RG93biwKICBDb3JuZXJMZWZ0VXA6ICgpID0+IENvcm5lckxlZnRVcCwKICBDb3JuZXJSaWdodERvd246ICgpID0+IENvcm5lclJpZ2h0RG93biwKICBDb3JuZXJSaWdodFVwOiAoKSA9PiBDb3JuZXJSaWdodFVwLAogIENvcm5lclVwTGVmdDogKCkgPT4gQ29ybmVyVXBMZWZ0LAogIENvcm5lclVwUmlnaHQ6ICgpID0+IENvcm5lclVwUmlnaHQsCiAgQ3B1OiAoKSA9PiBDcHUsCiAgQ3JlYXRpdmVDb21tb25zOiAoKSA9PiBDcmVhdGl2ZUNvbW1vbnMsCiAgQ3JlZGl0Q2FyZDogKCkgPT4gQ3JlZGl0Q2FyZCwKICBDcm9pc3NhbnQ6ICgpID0+IENyb2lzc2FudCwKICBDcm9wOiAoKSA9PiBDcm9wLAogIENyb3NzOiAoKSA9PiBDcm9zcywKICBDcm9zc2hhaXI6ICgpID0+IENyb3NzaGFpciwKICBDcm93bjogKCkgPT4gQ3Jvd24sCiAgQ3Vib2lkOiAoKSA9PiBDdWJvaWQsCiAgQ3VwU29kYTogKCkgPT4gQ3VwU29kYSwKICBDdXJseUJyYWNlczogKCkgPT4gQnJhY2VzLAogIEN1cnJlbmN5OiAoKSA9PiBDdXJyZW5jeSwKICBDeWxpbmRlcjogKCkgPT4gQ3lsaW5kZXIsCiAgRGFtOiAoKSA9PiBEYW0sCiAgRGF0YWJhc2U6ICgpID0+IERhdGFiYXNlLAogIERhdGFiYXNlQmFja3VwOiAoKSA9PiBEYXRhYmFzZUJhY2t1cCwKICBEYXRhYmFzZVphcDogKCkgPT4gRGF0YWJhc2VaYXAsCiAgRGVjaW1hbHNBcnJvd0xlZnQ6ICgpID0+IERlY2ltYWxzQXJyb3dMZWZ0LAogIERlY2ltYWxzQXJyb3dSaWdodDogKCkgPT4gRGVjaW1hbHNBcnJvd1JpZ2h0LAogIERlbGV0ZTogKCkgPT4gRGVsZXRlLAogIERlc3NlcnQ6ICgpID0+IERlc3NlcnQsCiAgRGlhbWV0ZXI6ICgpID0+IERpYW1ldGVyLAogIERpYW1vbmQ6ICgpID0+IERpYW1vbmQsCiAgRGlhbW9uZE1pbnVzOiAoKSA9PiBEaWFtb25kTWludXMsCiAgRGlhbW9uZFBlcmNlbnQ6ICgpID0+IERpYW1vbmRQZXJjZW50LAogIERpYW1vbmRQbHVzOiAoKSA9PiBEaWFtb25kUGx1cywKICBEaWNlMTogKCkgPT4gRGljZTEsCiAgRGljZTI6ICgpID0+IERpY2UyLAogIERpY2UzOiAoKSA9PiBEaWNlMywKICBEaWNlNDogKCkgPT4gRGljZTQsCiAgRGljZTU6ICgpID0+IERpY2U1LAogIERpY2U2OiAoKSA9PiBEaWNlNiwKICBEaWNlczogKCkgPT4gRGljZXMsCiAgRGlmZjogKCkgPT4gRGlmZiwKICBEaXNjOiAoKSA9PiBEaXNjLAogIERpc2MyOiAoKSA9PiBEaXNjMiwKICBEaXNjMzogKCkgPT4gRGlzYzMsCiAgRGlzY0FsYnVtOiAoKSA9PiBEaXNjQWxidW0sCiAgRGl2aWRlOiAoKSA9PiBEaXZpZGUsCiAgRGl2aWRlQ2lyY2xlOiAoKSA9PiBDaXJjbGVEaXZpZGUsCiAgRGl2aWRlU3F1YXJlOiAoKSA9PiBTcXVhcmVEaXZpZGUsCiAgRG5hOiAoKSA9PiBEbmEsCiAgRG5hT2ZmOiAoKSA9PiBEbmFPZmYsCiAgRG9jazogKCkgPT4gRG9jaywKICBEb2c6ICgpID0+IERvZywKICBEb2xsYXJTaWduOiAoKSA9PiBEb2xsYXJTaWduLAogIERvbnV0OiAoKSA9PiBEb251dCwKICBEb29yQ2xvc2VkOiAoKSA9PiBEb29yQ2xvc2VkLAogIERvb3JDbG9zZWRMb2NrZWQ6ICgpID0+IERvb3JDbG9zZWRMb2NrZWQsCiAgRG9vck9wZW46ICgpID0+IERvb3JPcGVuLAogIERvdDogKCkgPT4gRG90LAogIERvdFNxdWFyZTogKCkgPT4gU3F1YXJlRG90LAogIERvd25sb2FkOiAoKSA9PiBEb3dubG9hZCwKICBEb3dubG9hZENsb3VkOiAoKSA9PiBDbG91ZERvd25sb2FkLAogIERyYWZ0aW5nQ29tcGFzczogKCkgPT4gRHJhZnRpbmdDb21wYXNzLAogIERyYW1hOiAoKSA9PiBEcmFtYSwKICBEcmliYmJsZTogKCkgPT4gRHJpYmJibGUsCiAgRHJpbGw6ICgpID0+IERyaWxsLAogIERyb25lOiAoKSA9PiBEcm9uZSwKICBEcm9wbGV0OiAoKSA9PiBEcm9wbGV0LAogIERyb3BsZXRPZmY6ICgpID0+IERyb3BsZXRPZmYsCiAgRHJvcGxldHM6ICgpID0+IERyb3BsZXRzLAogIERydW06ICgpID0+IERydW0sCiAgRHJ1bXN0aWNrOiAoKSA9PiBEcnVtc3RpY2ssCiAgRHVtYmJlbGw6ICgpID0+IER1bWJiZWxsLAogIEVhcjogKCkgPT4gRWFyLAogIEVhck9mZjogKCkgPT4gRWFyT2ZmLAogIEVhcnRoOiAoKSA9PiBFYXJ0aCwKICBFYXJ0aExvY2s6ICgpID0+IEVhcnRoTG9jaywKICBFY2xpcHNlOiAoKSA9PiBFY2xpcHNlLAogIEVkaXQ6ICgpID0+IFNxdWFyZVBlbiwKICBFZGl0MjogKCkgPT4gUGVuLAogIEVkaXQzOiAoKSA9PiBQZW5MaW5lLAogIEVnZzogKCkgPT4gRWdnLAogIEVnZ0ZyaWVkOiAoKSA9PiBFZ2dGcmllZCwKICBFZ2dPZmY6ICgpID0+IEVnZ09mZiwKICBFbGxpcHNpczogKCkgPT4gRWxsaXBzaXMsCiAgRWxsaXBzaXNWZXJ0aWNhbDogKCkgPT4gRWxsaXBzaXNWZXJ0aWNhbCwKICBFcXVhbDogKCkgPT4gRXF1YWwsCiAgRXF1YWxBcHByb3hpbWF0ZWx5OiAoKSA9PiBFcXVhbEFwcHJveGltYXRlbHksCiAgRXF1YWxOb3Q6ICgpID0+IEVxdWFsTm90LAogIEVxdWFsU3F1YXJlOiAoKSA9PiBTcXVhcmVFcXVhbCwKICBFcmFzZXI6ICgpID0+IEVyYXNlciwKICBFdGhlcm5ldFBvcnQ6ICgpID0+IEV0aGVybmV0UG9ydCwKICBFdXJvOiAoKSA9PiBFdXJvLAogIEV2Q2hhcmdlcjogKCkgPT4gRXZDaGFyZ2VyLAogIEV4cGFuZDogKCkgPT4gRXhwYW5kLAogIEV4dGVybmFsTGluazogKCkgPT4gRXh0ZXJuYWxMaW5rLAogIEV5ZTogKCkgPT4gRXllLAogIEV5ZUNsb3NlZDogKCkgPT4gRXllQ2xvc2VkLAogIEV5ZU9mZjogKCkgPT4gRXllT2ZmLAogIEZhY2Vib29rOiAoKSA9PiBGYWNlYm9vaywKICBGYWN0b3J5OiAoKSA9PiBGYWN0b3J5LAogIEZhbjogKCkgPT4gRmFuLAogIEZhc3RGb3J3YXJkOiAoKSA9PiBGYXN0Rm9yd2FyZCwKICBGZWF0aGVyOiAoKSA9PiBGZWF0aGVyLAogIEZlbmNlOiAoKSA9PiBGZW5jZSwKICBGZXJyaXNXaGVlbDogKCkgPT4gRmVycmlzV2hlZWwsCiAgRmlnbWE6ICgpID0+IEZpZ21hLAogIEZpbGU6ICgpID0+IEZpbGUsCiAgRmlsZUFyY2hpdmU6ICgpID0+IEZpbGVBcmNoaXZlLAogIEZpbGVBdWRpbzogKCkgPT4gRmlsZUhlYWRwaG9uZSwKICBGaWxlQXVkaW8yOiAoKSA9PiBGaWxlSGVhZHBob25lLAogIEZpbGVBeGlzM0Q6ICgpID0+IEZpbGVBeGlzM2QsCiAgRmlsZUF4aXMzZDogKCkgPT4gRmlsZUF4aXMzZCwKICBGaWxlQmFkZ2U6ICgpID0+IEZpbGVCYWRnZSwKICBGaWxlQmFkZ2UyOiAoKSA9PiBGaWxlQmFkZ2UsCiAgRmlsZUJhckNoYXJ0OiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEZpbGVCYXJDaGFydDI6ICgpID0+IEZpbGVDaGFydENvbHVtbiwKICBGaWxlQm94OiAoKSA9PiBGaWxlQm94LAogIEZpbGVCcmFjZXM6ICgpID0+IEZpbGVCcmFjZXMsCiAgRmlsZUJyYWNlc0Nvcm5lcjogKCkgPT4gRmlsZUJyYWNlc0Nvcm5lciwKICBGaWxlQ2hhcnRDb2x1bW46ICgpID0+IEZpbGVDaGFydENvbHVtbiwKICBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEZpbGVDaGFydExpbmU6ICgpID0+IEZpbGVDaGFydExpbmUsCiAgRmlsZUNoYXJ0UGllOiAoKSA9PiBGaWxlQ2hhcnRQaWUsCiAgRmlsZUNoZWNrOiAoKSA9PiBGaWxlQ2hlY2ssCiAgRmlsZUNoZWNrMjogKCkgPT4gRmlsZUNoZWNrQ29ybmVyLAogIEZpbGVDaGVja0Nvcm5lcjogKCkgPT4gRmlsZUNoZWNrQ29ybmVyLAogIEZpbGVDbG9jazogKCkgPT4gRmlsZUNsb2NrLAogIEZpbGVDb2RlOiAoKSA9PiBGaWxlQ29kZSwKICBGaWxlQ29kZTI6ICgpID0+IEZpbGVDb2RlQ29ybmVyLAogIEZpbGVDb2RlQ29ybmVyOiAoKSA9PiBGaWxlQ29kZUNvcm5lciwKICBGaWxlQ29nOiAoKSA9PiBGaWxlQ29nLAogIEZpbGVDb2cyOiAoKSA9PiBGaWxlQ29nLAogIEZpbGVEaWZmOiAoKSA9PiBGaWxlRGlmZiwKICBGaWxlRGlnaXQ6ICgpID0+IEZpbGVEaWdpdCwKICBGaWxlRG93bjogKCkgPT4gRmlsZURvd24sCiAgRmlsZUVkaXQ6ICgpID0+IEZpbGVQZW4sCiAgRmlsZUV4Y2xhbWF0aW9uUG9pbnQ6ICgpID0+IEZpbGVFeGNsYW1hdGlvblBvaW50LAogIEZpbGVIZWFkcGhvbmU6ICgpID0+IEZpbGVIZWFkcGhvbmUsCiAgRmlsZUhlYXJ0OiAoKSA9PiBGaWxlSGVhcnQsCiAgRmlsZUltYWdlOiAoKSA9PiBGaWxlSW1hZ2UsCiAgRmlsZUlucHV0OiAoKSA9PiBGaWxlSW5wdXQsCiAgRmlsZUpzb246ICgpID0+IEZpbGVCcmFjZXMsCiAgRmlsZUpzb24yOiAoKSA9PiBGaWxlQnJhY2VzQ29ybmVyLAogIEZpbGVLZXk6ICgpID0+IEZpbGVLZXksCiAgRmlsZUtleTI6ICgpID0+IEZpbGVLZXksCiAgRmlsZUxpbmVDaGFydDogKCkgPT4gRmlsZUNoYXJ0TGluZSwKICBGaWxlTG9jazogKCkgPT4gRmlsZUxvY2ssCiAgRmlsZUxvY2syOiAoKSA9PiBGaWxlTG9jaywKICBGaWxlTWludXM6ICgpID0+IEZpbGVNaW51cywKICBGaWxlTWludXMyOiAoKSA9PiBGaWxlTWludXNDb3JuZXIsCiAgRmlsZU1pbnVzQ29ybmVyOiAoKSA9PiBGaWxlTWludXNDb3JuZXIsCiAgRmlsZU11c2ljOiAoKSA9PiBGaWxlTXVzaWMsCiAgRmlsZU91dHB1dDogKCkgPT4gRmlsZU91dHB1dCwKICBGaWxlUGVuOiAoKSA9PiBGaWxlUGVuLAogIEZpbGVQZW5MaW5lOiAoKSA9PiBGaWxlUGVuTGluZSwKICBGaWxlUGllQ2hhcnQ6ICgpID0+IEZpbGVDaGFydFBpZSwKICBGaWxlUGxheTogKCkgPT4gRmlsZVBsYXksCiAgRmlsZVBsdXM6ICgpID0+IEZpbGVQbHVzLAogIEZpbGVQbHVzMjogKCkgPT4gRmlsZVBsdXNDb3JuZXIsCiAgRmlsZVBsdXNDb3JuZXI6ICgpID0+IEZpbGVQbHVzQ29ybmVyLAogIEZpbGVRdWVzdGlvbjogKCkgPT4gRmlsZVF1ZXN0aW9uTWFyaywKICBGaWxlUXVlc3Rpb25NYXJrOiAoKSA9PiBGaWxlUXVlc3Rpb25NYXJrLAogIEZpbGVTY2FuOiAoKSA9PiBGaWxlU2NhbiwKICBGaWxlU2VhcmNoOiAoKSA9PiBGaWxlU2VhcmNoLAogIEZpbGVTZWFyY2gyOiAoKSA9PiBGaWxlU2VhcmNoQ29ybmVyLAogIEZpbGVTZWFyY2hDb3JuZXI6ICgpID0+IEZpbGVTZWFyY2hDb3JuZXIsCiAgRmlsZVNpZ25hbDogKCkgPT4gRmlsZVNpZ25hbCwKICBGaWxlU2lnbmF0dXJlOiAoKSA9PiBGaWxlUGVuTGluZSwKICBGaWxlU2xpZGVyczogKCkgPT4gRmlsZVNsaWRlcnMsCiAgRmlsZVNwcmVhZHNoZWV0OiAoKSA9PiBGaWxlU3ByZWFkc2hlZXQsCiAgRmlsZVN0YWNrOiAoKSA9PiBGaWxlU3RhY2ssCiAgRmlsZVN5bWxpbms6ICgpID0+IEZpbGVTeW1saW5rLAogIEZpbGVUZXJtaW5hbDogKCkgPT4gRmlsZVRlcm1pbmFsLAogIEZpbGVUZXh0OiAoKSA9PiBGaWxlVGV4dCwKICBGaWxlVHlwZTogKCkgPT4gRmlsZVR5cGUsCiAgRmlsZVR5cGUyOiAoKSA9PiBGaWxlVHlwZUNvcm5lciwKICBGaWxlVHlwZUNvcm5lcjogKCkgPT4gRmlsZVR5cGVDb3JuZXIsCiAgRmlsZVVwOiAoKSA9PiBGaWxlVXAsCiAgRmlsZVVzZXI6ICgpID0+IEZpbGVVc2VyLAogIEZpbGVWaWRlbzogKCkgPT4gRmlsZVBsYXksCiAgRmlsZVZpZGVvMjogKCkgPT4gRmlsZVZpZGVvQ2FtZXJhLAogIEZpbGVWaWRlb0NhbWVyYTogKCkgPT4gRmlsZVZpZGVvQ2FtZXJhLAogIEZpbGVWb2x1bWU6ICgpID0+IEZpbGVWb2x1bWUsCiAgRmlsZVZvbHVtZTI6ICgpID0+IEZpbGVTaWduYWwsCiAgRmlsZVdhcm5pbmc6ICgpID0+IEZpbGVFeGNsYW1hdGlvblBvaW50LAogIEZpbGVYOiAoKSA9PiBGaWxlWCwKICBGaWxlWDI6ICgpID0+IEZpbGVYQ29ybmVyLAogIEZpbGVYQ29ybmVyOiAoKSA9PiBGaWxlWENvcm5lciwKICBGaWxlczogKCkgPT4gRmlsZXMsCiAgRmlsbTogKCkgPT4gRmlsbSwKICBGaWx0ZXI6ICgpID0+IEZ1bm5lbCwKICBGaWx0ZXJYOiAoKSA9PiBGdW5uZWxYLAogIEZpbmdlcnByaW50OiAoKSA9PiBGaW5nZXJwcmludFBhdHRlcm4sCiAgRmluZ2VycHJpbnRQYXR0ZXJuOiAoKSA9PiBGaW5nZXJwcmludFBhdHRlcm4sCiAgRmlyZUV4dGluZ3Vpc2hlcjogKCkgPT4gRmlyZUV4dGluZ3Vpc2hlciwKICBGaXNoOiAoKSA9PiBGaXNoLAogIEZpc2hPZmY6ICgpID0+IEZpc2hPZmYsCiAgRmlzaFN5bWJvbDogKCkgPT4gRmlzaFN5bWJvbCwKICBGaXNoaW5nSG9vazogKCkgPT4gRmlzaGluZ0hvb2ssCiAgRmxhZzogKCkgPT4gRmxhZywKICBGbGFnT2ZmOiAoKSA9PiBGbGFnT2ZmLAogIEZsYWdUcmlhbmdsZUxlZnQ6ICgpID0+IEZsYWdUcmlhbmdsZUxlZnQsCiAgRmxhZ1RyaWFuZ2xlUmlnaHQ6ICgpID0+IEZsYWdUcmlhbmdsZVJpZ2h0LAogIEZsYW1lOiAoKSA9PiBGbGFtZSwKICBGbGFtZUtpbmRsaW5nOiAoKSA9PiBGbGFtZUtpbmRsaW5nLAogIEZsYXNobGlnaHQ6ICgpID0+IEZsYXNobGlnaHQsCiAgRmxhc2hsaWdodE9mZjogKCkgPT4gRmxhc2hsaWdodE9mZiwKICBGbGFza0NvbmljYWw6ICgpID0+IEZsYXNrQ29uaWNhbCwKICBGbGFza0NvbmljYWxPZmY6ICgpID0+IEZsYXNrQ29uaWNhbE9mZiwKICBGbGFza1JvdW5kOiAoKSA9PiBGbGFza1JvdW5kLAogIEZsaXBIb3Jpem9udGFsOiAoKSA9PiBGbGlwSG9yaXpvbnRhbCwKICBGbGlwSG9yaXpvbnRhbDI6ICgpID0+IEZsaXBIb3Jpem9udGFsMiwKICBGbGlwVmVydGljYWw6ICgpID0+IEZsaXBWZXJ0aWNhbCwKICBGbGlwVmVydGljYWwyOiAoKSA9PiBGbGlwVmVydGljYWwyLAogIEZsb3dlcjogKCkgPT4gRmxvd2VyLAogIEZsb3dlcjI6ICgpID0+IEZsb3dlcjIsCiAgRm9jdXM6ICgpID0+IEZvY3VzLAogIEZvbGRIb3Jpem9udGFsOiAoKSA9PiBGb2xkSG9yaXpvbnRhbCwKICBGb2xkVmVydGljYWw6ICgpID0+IEZvbGRWZXJ0aWNhbCwKICBGb2xkZXI6ICgpID0+IEZvbGRlciwKICBGb2xkZXJBcmNoaXZlOiAoKSA9PiBGb2xkZXJBcmNoaXZlLAogIEZvbGRlckNoZWNrOiAoKSA9PiBGb2xkZXJDaGVjaywKICBGb2xkZXJDbG9jazogKCkgPT4gRm9sZGVyQ2xvY2ssCiAgRm9sZGVyQ2xvc2VkOiAoKSA9PiBGb2xkZXJDbG9zZWQsCiAgRm9sZGVyQ29kZTogKCkgPT4gRm9sZGVyQ29kZSwKICBGb2xkZXJDb2c6ICgpID0+IEZvbGRlckNvZywKICBGb2xkZXJDb2cyOiAoKSA9PiBGb2xkZXJDb2csCiAgRm9sZGVyRG90OiAoKSA9PiBGb2xkZXJEb3QsCiAgRm9sZGVyRG93bjogKCkgPT4gRm9sZGVyRG93biwKICBGb2xkZXJFZGl0OiAoKSA9PiBGb2xkZXJQZW4sCiAgRm9sZGVyR2l0OiAoKSA9PiBGb2xkZXJHaXQsCiAgRm9sZGVyR2l0MjogKCkgPT4gRm9sZGVyR2l0MiwKICBGb2xkZXJIZWFydDogKCkgPT4gRm9sZGVySGVhcnQsCiAgRm9sZGVySW5wdXQ6ICgpID0+IEZvbGRlcklucHV0LAogIEZvbGRlckthbmJhbjogKCkgPT4gRm9sZGVyS2FuYmFuLAogIEZvbGRlcktleTogKCkgPT4gRm9sZGVyS2V5LAogIEZvbGRlckxvY2s6ICgpID0+IEZvbGRlckxvY2ssCiAgRm9sZGVyTWludXM6ICgpID0+IEZvbGRlck1pbnVzLAogIEZvbGRlck9wZW46ICgpID0+IEZvbGRlck9wZW4sCiAgRm9sZGVyT3BlbkRvdDogKCkgPT4gRm9sZGVyT3BlbkRvdCwKICBGb2xkZXJPdXRwdXQ6ICgpID0+IEZvbGRlck91dHB1dCwKICBGb2xkZXJQZW46ICgpID0+IEZvbGRlclBlbiwKICBGb2xkZXJQbHVzOiAoKSA9PiBGb2xkZXJQbHVzLAogIEZvbGRlclJvb3Q6ICgpID0+IEZvbGRlclJvb3QsCiAgRm9sZGVyU2VhcmNoOiAoKSA9PiBGb2xkZXJTZWFyY2gsCiAgRm9sZGVyU2VhcmNoMjogKCkgPT4gRm9sZGVyU2VhcmNoMiwKICBGb2xkZXJTeW1saW5rOiAoKSA9PiBGb2xkZXJTeW1saW5rLAogIEZvbGRlclN5bmM6ICgpID0+IEZvbGRlclN5bmMsCiAgRm9sZGVyVHJlZTogKCkgPT4gRm9sZGVyVHJlZSwKICBGb2xkZXJVcDogKCkgPT4gRm9sZGVyVXAsCiAgRm9sZGVyWDogKCkgPT4gRm9sZGVyWCwKICBGb2xkZXJzOiAoKSA9PiBGb2xkZXJzLAogIEZvb3RwcmludHM6ICgpID0+IEZvb3RwcmludHMsCiAgRm9ya0tuaWZlOiAoKSA9PiBVdGVuc2lscywKICBGb3JrS25pZmVDcm9zc2VkOiAoKSA9PiBVdGVuc2lsc0Nyb3NzZWQsCiAgRm9ya2xpZnQ6ICgpID0+IEZvcmtsaWZ0LAogIEZvcm06ICgpID0+IEZvcm0sCiAgRm9ybUlucHV0OiAoKSA9PiBSZWN0YW5nbGVFbGxpcHNpcywKICBGb3J3YXJkOiAoKSA9PiBGb3J3YXJkLAogIEZyYW1lOiAoKSA9PiBGcmFtZSwKICBGcmFtZXI6ICgpID0+IEZyYW1lciwKICBGcm93bjogKCkgPT4gRnJvd24sCiAgRnVlbDogKCkgPT4gRnVlbCwKICBGdWxsc2NyZWVuOiAoKSA9PiBGdWxsc2NyZWVuLAogIEZ1bmN0aW9uU3F1YXJlOiAoKSA9PiBTcXVhcmVGdW5jdGlvbiwKICBGdW5uZWw6ICgpID0+IEZ1bm5lbCwKICBGdW5uZWxQbHVzOiAoKSA9PiBGdW5uZWxQbHVzLAogIEZ1bm5lbFg6ICgpID0+IEZ1bm5lbFgsCiAgR2FsbGVyeUhvcml6b250YWw6ICgpID0+IEdhbGxlcnlIb3Jpem9udGFsLAogIEdhbGxlcnlIb3Jpem9udGFsRW5kOiAoKSA9PiBHYWxsZXJ5SG9yaXpvbnRhbEVuZCwKICBHYWxsZXJ5VGh1bWJuYWlsczogKCkgPT4gR2FsbGVyeVRodW1ibmFpbHMsCiAgR2FsbGVyeVZlcnRpY2FsOiAoKSA9PiBHYWxsZXJ5VmVydGljYWwsCiAgR2FsbGVyeVZlcnRpY2FsRW5kOiAoKSA9PiBHYWxsZXJ5VmVydGljYWxFbmQsCiAgR2FtZXBhZDogKCkgPT4gR2FtZXBhZCwKICBHYW1lcGFkMjogKCkgPT4gR2FtZXBhZDIsCiAgR2FtZXBhZERpcmVjdGlvbmFsOiAoKSA9PiBHYW1lcGFkRGlyZWN0aW9uYWwsCiAgR2FudHRDaGFydDogKCkgPT4gQ2hhcnROb0F4ZXNHYW50dCwKICBHYW50dENoYXJ0U3F1YXJlOiAoKSA9PiBTcXVhcmVDaGFydEdhbnR0LAogIEdhdWdlOiAoKSA9PiBHYXVnZSwKICBHYXVnZUNpcmNsZTogKCkgPT4gQ2lyY2xlR2F1Z2UsCiAgR2F2ZWw6ICgpID0+IEdhdmVsLAogIEdlbTogKCkgPT4gR2VtLAogIEdlb3JnaWFuTGFyaTogKCkgPT4gR2VvcmdpYW5MYXJpLAogIEdob3N0OiAoKSA9PiBHaG9zdCwKICBHaWZ0OiAoKSA9PiBHaWZ0LAogIEdpdEJyYW5jaDogKCkgPT4gR2l0QnJhbmNoLAogIEdpdEJyYW5jaE1pbnVzOiAoKSA9PiBHaXRCcmFuY2hNaW51cywKICBHaXRCcmFuY2hQbHVzOiAoKSA9PiBHaXRCcmFuY2hQbHVzLAogIEdpdENvbW1pdDogKCkgPT4gR2l0Q29tbWl0SG9yaXpvbnRhbCwKICBHaXRDb21taXRIb3Jpem9udGFsOiAoKSA9PiBHaXRDb21taXRIb3Jpem9udGFsLAogIEdpdENvbW1pdFZlcnRpY2FsOiAoKSA9PiBHaXRDb21taXRWZXJ0aWNhbCwKICBHaXRDb21wYXJlOiAoKSA9PiBHaXRDb21wYXJlLAogIEdpdENvbXBhcmVBcnJvd3M6ICgpID0+IEdpdENvbXBhcmVBcnJvd3MsCiAgR2l0Rm9yazogKCkgPT4gR2l0Rm9yaywKICBHaXRHcmFwaDogKCkgPT4gR2l0R3JhcGgsCiAgR2l0TWVyZ2U6ICgpID0+IEdpdE1lcmdlLAogIEdpdFB1bGxSZXF1ZXN0OiAoKSA9PiBHaXRQdWxsUmVxdWVzdCwKICBHaXRQdWxsUmVxdWVzdEFycm93OiAoKSA9PiBHaXRQdWxsUmVxdWVzdEFycm93LAogIEdpdFB1bGxSZXF1ZXN0Q2xvc2VkOiAoKSA9PiBHaXRQdWxsUmVxdWVzdENsb3NlZCwKICBHaXRQdWxsUmVxdWVzdENyZWF0ZTogKCkgPT4gR2l0UHVsbFJlcXVlc3RDcmVhdGUsCiAgR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdzogKCkgPT4gR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdywKICBHaXRQdWxsUmVxdWVzdERyYWZ0OiAoKSA9PiBHaXRQdWxsUmVxdWVzdERyYWZ0LAogIEdpdGh1YjogKCkgPT4gR2l0aHViLAogIEdpdGxhYjogKCkgPT4gR2l0bGFiLAogIEdsYXNzV2F0ZXI6ICgpID0+IEdsYXNzV2F0ZXIsCiAgR2xhc3NlczogKCkgPT4gR2xhc3NlcywKICBHbG9iZTogKCkgPT4gR2xvYmUsCiAgR2xvYmUyOiAoKSA9PiBFYXJ0aCwKICBHbG9iZUxvY2s6ICgpID0+IEdsb2JlTG9jaywKICBHb2FsOiAoKSA9PiBHb2FsLAogIEdwdTogKCkgPT4gR3B1LAogIEdyYWI6ICgpID0+IEhhbmRHcmFiLAogIEdyYWR1YXRpb25DYXA6ICgpID0+IEdyYWR1YXRpb25DYXAsCiAgR3JhcGU6ICgpID0+IEdyYXBlLAogIEdyaWQ6ICgpID0+IEdyaWQzeDMsCiAgR3JpZDJYMjogKCkgPT4gR3JpZDJ4MiwKICBHcmlkMlgyQ2hlY2s6ICgpID0+IEdyaWQyeDJDaGVjaywKICBHcmlkMlgyUGx1czogKCkgPT4gR3JpZDJ4MlBsdXMsCiAgR3JpZDJYMlg6ICgpID0+IEdyaWQyeDJYLAogIEdyaWQyeDI6ICgpID0+IEdyaWQyeDIsCiAgR3JpZDJ4MkNoZWNrOiAoKSA9PiBHcmlkMngyQ2hlY2ssCiAgR3JpZDJ4MlBsdXM6ICgpID0+IEdyaWQyeDJQbHVzLAogIEdyaWQyeDJYOiAoKSA9PiBHcmlkMngyWCwKICBHcmlkM1gzOiAoKSA9PiBHcmlkM3gzLAogIEdyaWQzeDI6ICgpID0+IEdyaWQzeDIsCiAgR3JpZDN4MzogKCkgPT4gR3JpZDN4MywKICBHcmlwOiAoKSA9PiBHcmlwLAogIEdyaXBIb3Jpem9udGFsOiAoKSA9PiBHcmlwSG9yaXpvbnRhbCwKICBHcmlwVmVydGljYWw6ICgpID0+IEdyaXBWZXJ0aWNhbCwKICBHcm91cDogKCkgPT4gR3JvdXAsCiAgR3VpdGFyOiAoKSA9PiBHdWl0YXIsCiAgSGFtOiAoKSA9PiBIYW0sCiAgSGFtYnVyZ2VyOiAoKSA9PiBIYW1idXJnZXIsCiAgSGFtbWVyOiAoKSA9PiBIYW1tZXIsCiAgSGFuZDogKCkgPT4gSGFuZCwKICBIYW5kQ29pbnM6ICgpID0+IEhhbmRDb2lucywKICBIYW5kRmlzdDogKCkgPT4gSGFuZEZpc3QsCiAgSGFuZEdyYWI6ICgpID0+IEhhbmRHcmFiLAogIEhhbmRIZWFydDogKCkgPT4gSGFuZEhlYXJ0LAogIEhhbmRIZWxwaW5nOiAoKSA9PiBIYW5kSGVscGluZywKICBIYW5kTWV0YWw6ICgpID0+IEhhbmRNZXRhbCwKICBIYW5kUGxhdHRlcjogKCkgPT4gSGFuZFBsYXR0ZXIsCiAgSGFuZGJhZzogKCkgPT4gSGFuZGJhZywKICBIYW5kc2hha2U6ICgpID0+IEhhbmRzaGFrZSwKICBIYXJkRHJpdmU6ICgpID0+IEhhcmREcml2ZSwKICBIYXJkRHJpdmVEb3dubG9hZDogKCkgPT4gSGFyZERyaXZlRG93bmxvYWQsCiAgSGFyZERyaXZlVXBsb2FkOiAoKSA9PiBIYXJkRHJpdmVVcGxvYWQsCiAgSGFyZEhhdDogKCkgPT4gSGFyZEhhdCwKICBIYXNoOiAoKSA9PiBIYXNoLAogIEhhdEdsYXNzZXM6ICgpID0+IEhhdEdsYXNzZXMsCiAgSGF6ZTogKCkgPT4gSGF6ZSwKICBIZDogKCkgPT4gSGQsCiAgSGRtaVBvcnQ6ICgpID0+IEhkbWlQb3J0LAogIEhlYWRpbmc6ICgpID0+IEhlYWRpbmcsCiAgSGVhZGluZzE6ICgpID0+IEhlYWRpbmcxLAogIEhlYWRpbmcyOiAoKSA9PiBIZWFkaW5nMiwKICBIZWFkaW5nMzogKCkgPT4gSGVhZGluZzMsCiAgSGVhZGluZzQ6ICgpID0+IEhlYWRpbmc0LAogIEhlYWRpbmc1OiAoKSA9PiBIZWFkaW5nNSwKICBIZWFkaW5nNjogKCkgPT4gSGVhZGluZzYsCiAgSGVhZHBob25lT2ZmOiAoKSA9PiBIZWFkcGhvbmVPZmYsCiAgSGVhZHBob25lczogKCkgPT4gSGVhZHBob25lcywKICBIZWFkc2V0OiAoKSA9PiBIZWFkc2V0LAogIEhlYXJ0OiAoKSA9PiBIZWFydCwKICBIZWFydENyYWNrOiAoKSA9PiBIZWFydENyYWNrLAogIEhlYXJ0SGFuZHNoYWtlOiAoKSA9PiBIZWFydEhhbmRzaGFrZSwKICBIZWFydE1pbnVzOiAoKSA9PiBIZWFydE1pbnVzLAogIEhlYXJ0T2ZmOiAoKSA9PiBIZWFydE9mZiwKICBIZWFydFBsdXM6ICgpID0+IEhlYXJ0UGx1cywKICBIZWFydFB1bHNlOiAoKSA9PiBIZWFydFB1bHNlLAogIEhlYXRlcjogKCkgPT4gSGVhdGVyLAogIEhlbGljb3B0ZXI6ICgpID0+IEhlbGljb3B0ZXIsCiAgSGVscENpcmNsZTogKCkgPT4gQ2lyY2xlUXVlc3Rpb25NYXJrLAogIEhlbHBpbmdIYW5kOiAoKSA9PiBIYW5kSGVscGluZywKICBIZXhhZ29uOiAoKSA9PiBIZXhhZ29uLAogIEhpZ2hsaWdodGVyOiAoKSA9PiBIaWdobGlnaHRlciwKICBIaXN0b3J5OiAoKSA9PiBIaXN0b3J5LAogIEhvbWU6ICgpID0+IEhvdXNlLAogIEhvcDogKCkgPT4gSG9wLAogIEhvcE9mZjogKCkgPT4gSG9wT2ZmLAogIEhvc3BpdGFsOiAoKSA9PiBIb3NwaXRhbCwKICBIb3RlbDogKCkgPT4gSG90ZWwsCiAgSG91cmdsYXNzOiAoKSA9PiBIb3VyZ2xhc3MsCiAgSG91c2U6ICgpID0+IEhvdXNlLAogIEhvdXNlSGVhcnQ6ICgpID0+IEhvdXNlSGVhcnQsCiAgSG91c2VQbHVnOiAoKSA9PiBIb3VzZVBsdWcsCiAgSG91c2VQbHVzOiAoKSA9PiBIb3VzZVBsdXMsCiAgSG91c2VXaWZpOiAoKSA9PiBIb3VzZVdpZmksCiAgSWNlQ3JlYW06ICgpID0+IEljZUNyZWFtQ29uZSwKICBJY2VDcmVhbTI6ICgpID0+IEljZUNyZWFtQm93bCwKICBJY2VDcmVhbUJvd2w6ICgpID0+IEljZUNyZWFtQm93bCwKICBJY2VDcmVhbUNvbmU6ICgpID0+IEljZUNyZWFtQ29uZSwKICBJZENhcmQ6ICgpID0+IElkQ2FyZCwKICBJZENhcmRMYW55YXJkOiAoKSA9PiBJZENhcmRMYW55YXJkLAogIEltYWdlOiAoKSA9PiBJbWFnZTIsCiAgSW1hZ2VEb3duOiAoKSA9PiBJbWFnZURvd24sCiAgSW1hZ2VNaW51czogKCkgPT4gSW1hZ2VNaW51cywKICBJbWFnZU9mZjogKCkgPT4gSW1hZ2VPZmYsCiAgSW1hZ2VQbGF5OiAoKSA9PiBJbWFnZVBsYXksCiAgSW1hZ2VQbHVzOiAoKSA9PiBJbWFnZVBsdXMsCiAgSW1hZ2VVcDogKCkgPT4gSW1hZ2VVcCwKICBJbWFnZVVwc2NhbGU6ICgpID0+IEltYWdlVXBzY2FsZSwKICBJbWFnZXM6ICgpID0+IEltYWdlcywKICBJbXBvcnQ6ICgpID0+IEltcG9ydCwKICBJbmJveDogKCkgPT4gSW5ib3gsCiAgSW5kZW50OiAoKSA9PiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgSW5kZW50RGVjcmVhc2U6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBJbmRlbnRJbmNyZWFzZTogKCkgPT4gTGlzdEluZGVudEluY3JlYXNlLAogIEluZGlhblJ1cGVlOiAoKSA9PiBJbmRpYW5SdXBlZSwKICBJbmZpbml0eTogKCkgPT4gSW5maW5pdHkyLAogIEluZm86ICgpID0+IEluZm8yLAogIEluc3BlY3Q6ICgpID0+IFNxdWFyZU1vdXNlUG9pbnRlciwKICBJbnNwZWN0aW9uUGFuZWw6ICgpID0+IEluc3BlY3Rpb25QYW5lbCwKICBJbnN0YWdyYW06ICgpID0+IEluc3RhZ3JhbSwKICBJdGFsaWM6ICgpID0+IEl0YWxpYywKICBJdGVyYXRpb25DY3c6ICgpID0+IEl0ZXJhdGlvbkNjdywKICBJdGVyYXRpb25DdzogKCkgPT4gSXRlcmF0aW9uQ3csCiAgSmFwYW5lc2VZZW46ICgpID0+IEphcGFuZXNlWWVuLAogIEpveXN0aWNrOiAoKSA9PiBKb3lzdGljaywKICBLYW5iYW46ICgpID0+IEthbmJhbiwKICBLYW5iYW5TcXVhcmU6ICgpID0+IFNxdWFyZUthbmJhbiwKICBLYW5iYW5TcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZEthbmJhbiwKICBLYXlhazogKCkgPT4gS2F5YWssCiAgS2V5OiAoKSA9PiBLZXkyLAogIEtleVJvdW5kOiAoKSA9PiBLZXlSb3VuZCwKICBLZXlTcXVhcmU6ICgpID0+IEtleVNxdWFyZSwKICBLZXlib2FyZDogKCkgPT4gS2V5Ym9hcmQyLAogIEtleWJvYXJkTXVzaWM6ICgpID0+IEtleWJvYXJkTXVzaWMsCiAgS2V5Ym9hcmRPZmY6ICgpID0+IEtleWJvYXJkT2ZmLAogIExhbXA6ICgpID0+IExhbXAsCiAgTGFtcENlaWxpbmc6ICgpID0+IExhbXBDZWlsaW5nLAogIExhbXBEZXNrOiAoKSA9PiBMYW1wRGVzaywKICBMYW1wRmxvb3I6ICgpID0+IExhbXBGbG9vciwKICBMYW1wV2FsbERvd246ICgpID0+IExhbXBXYWxsRG93biwKICBMYW1wV2FsbFVwOiAoKSA9PiBMYW1wV2FsbFVwLAogIExhbmRQbG90OiAoKSA9PiBMYW5kUGxvdCwKICBMYW5kbWFyazogKCkgPT4gTGFuZG1hcmssCiAgTGFuZ3VhZ2VzOiAoKSA9PiBMYW5ndWFnZXMsCiAgTGFwdG9wOiAoKSA9PiBMYXB0b3AsCiAgTGFwdG9wMjogKCkgPT4gTGFwdG9wTWluaW1hbCwKICBMYXB0b3BNaW5pbWFsOiAoKSA9PiBMYXB0b3BNaW5pbWFsLAogIExhcHRvcE1pbmltYWxDaGVjazogKCkgPT4gTGFwdG9wTWluaW1hbENoZWNrLAogIExhc3NvOiAoKSA9PiBMYXNzbywKICBMYXNzb1NlbGVjdDogKCkgPT4gTGFzc29TZWxlY3QsCiAgTGF1Z2g6ICgpID0+IExhdWdoLAogIExheWVyczogKCkgPT4gTGF5ZXJzMywKICBMYXllcnMyOiAoKSA9PiBMYXllcnMyLAogIExheWVyczM6ICgpID0+IExheWVyczMsCiAgTGF5ZXJzUGx1czogKCkgPT4gTGF5ZXJzUGx1cywKICBMYXlvdXQ6ICgpID0+IFBhbmVsc1RvcExlZnQsCiAgTGF5b3V0RGFzaGJvYXJkOiAoKSA9PiBMYXlvdXREYXNoYm9hcmQsCiAgTGF5b3V0R3JpZDogKCkgPT4gTGF5b3V0R3JpZCwKICBMYXlvdXRMaXN0OiAoKSA9PiBMYXlvdXRMaXN0LAogIExheW91dFBhbmVsTGVmdDogKCkgPT4gTGF5b3V0UGFuZWxMZWZ0LAogIExheW91dFBhbmVsVG9wOiAoKSA9PiBMYXlvdXRQYW5lbFRvcCwKICBMYXlvdXRUZW1wbGF0ZTogKCkgPT4gTGF5b3V0VGVtcGxhdGUsCiAgTGVhZjogKCkgPT4gTGVhZiwKICBMZWFmeUdyZWVuOiAoKSA9PiBMZWFmeUdyZWVuLAogIExlY3Rlcm46ICgpID0+IExlY3Rlcm4sCiAgTGV0dGVyVGV4dDogKCkgPT4gVGV4dEluaXRpYWwsCiAgTGlicmFyeTogKCkgPT4gTGlicmFyeTIsCiAgTGlicmFyeUJpZzogKCkgPT4gTGlicmFyeUJpZywKICBMaWJyYXJ5U3F1YXJlOiAoKSA9PiBTcXVhcmVMaWJyYXJ5LAogIExpZmVCdW95OiAoKSA9PiBMaWZlQnVveSwKICBMaWdhdHVyZTogKCkgPT4gTGlnYXR1cmUsCiAgTGlnaHRidWxiOiAoKSA9PiBMaWdodGJ1bGIsCiAgTGlnaHRidWxiT2ZmOiAoKSA9PiBMaWdodGJ1bGJPZmYsCiAgTGluZUNoYXJ0OiAoKSA9PiBDaGFydExpbmUsCiAgTGluZVNxdWlnZ2xlOiAoKSA9PiBMaW5lU3F1aWdnbGUsCiAgTGluazogKCkgPT4gTGluaywKICBMaW5rMjogKCkgPT4gTGluazIsCiAgTGluazJPZmY6ICgpID0+IExpbmsyT2ZmLAogIExpbmtlZGluOiAoKSA9PiBMaW5rZWRpbiwKICBMaXN0OiAoKSA9PiBMaXN0LAogIExpc3RDaGVjazogKCkgPT4gTGlzdENoZWNrLAogIExpc3RDaGVja3M6ICgpID0+IExpc3RDaGVja3MsCiAgTGlzdENoZXZyb25zRG93blVwOiAoKSA9PiBMaXN0Q2hldnJvbnNEb3duVXAsCiAgTGlzdENoZXZyb25zVXBEb3duOiAoKSA9PiBMaXN0Q2hldnJvbnNVcERvd24sCiAgTGlzdENvbGxhcHNlOiAoKSA9PiBMaXN0Q29sbGFwc2UsCiAgTGlzdEVuZDogKCkgPT4gTGlzdEVuZCwKICBMaXN0RmlsdGVyOiAoKSA9PiBMaXN0RmlsdGVyLAogIExpc3RGaWx0ZXJQbHVzOiAoKSA9PiBMaXN0RmlsdGVyUGx1cywKICBMaXN0SW5kZW50RGVjcmVhc2U6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBMaXN0SW5kZW50SW5jcmVhc2U6ICgpID0+IExpc3RJbmRlbnRJbmNyZWFzZSwKICBMaXN0TWludXM6ICgpID0+IExpc3RNaW51cywKICBMaXN0TXVzaWM6ICgpID0+IExpc3RNdXNpYywKICBMaXN0T3JkZXJlZDogKCkgPT4gTGlzdE9yZGVyZWQsCiAgTGlzdFBsdXM6ICgpID0+IExpc3RQbHVzLAogIExpc3RSZXN0YXJ0OiAoKSA9PiBMaXN0UmVzdGFydCwKICBMaXN0U3RhcnQ6ICgpID0+IExpc3RTdGFydCwKICBMaXN0VG9kbzogKCkgPT4gTGlzdFRvZG8sCiAgTGlzdFRyZWU6ICgpID0+IExpc3RUcmVlLAogIExpc3RWaWRlbzogKCkgPT4gTGlzdFZpZGVvLAogIExpc3RYOiAoKSA9PiBMaXN0WCwKICBMb2FkZXI6ICgpID0+IExvYWRlciwKICBMb2FkZXIyOiAoKSA9PiBMb2FkZXJDaXJjbGUsCiAgTG9hZGVyQ2lyY2xlOiAoKSA9PiBMb2FkZXJDaXJjbGUsCiAgTG9hZGVyUGlud2hlZWw6ICgpID0+IExvYWRlclBpbndoZWVsLAogIExvY2F0ZTogKCkgPT4gTG9jYXRlLAogIExvY2F0ZUZpeGVkOiAoKSA9PiBMb2NhdGVGaXhlZCwKICBMb2NhdGVPZmY6ICgpID0+IExvY2F0ZU9mZiwKICBMb2NhdGlvbkVkaXQ6ICgpID0+IE1hcFBpblBlbiwKICBMb2NrOiAoKSA9PiBMb2NrLAogIExvY2tLZXlob2xlOiAoKSA9PiBMb2NrS2V5aG9sZSwKICBMb2NrS2V5aG9sZU9wZW46ICgpID0+IExvY2tLZXlob2xlT3BlbiwKICBMb2NrT3BlbjogKCkgPT4gTG9ja09wZW4sCiAgTG9nSW46ICgpID0+IExvZ0luLAogIExvZ091dDogKCkgPT4gTG9nT3V0LAogIExvZ3M6ICgpID0+IExvZ3MsCiAgTG9sbGlwb3A6ICgpID0+IExvbGxpcG9wLAogIEx1Z2dhZ2U6ICgpID0+IEx1Z2dhZ2UsCiAgTVNxdWFyZTogKCkgPT4gU3F1YXJlTSwKICBNYWduZXQ6ICgpID0+IE1hZ25ldCwKICBNYWlsOiAoKSA9PiBNYWlsLAogIE1haWxDaGVjazogKCkgPT4gTWFpbENoZWNrLAogIE1haWxNaW51czogKCkgPT4gTWFpbE1pbnVzLAogIE1haWxPcGVuOiAoKSA9PiBNYWlsT3BlbiwKICBNYWlsUGx1czogKCkgPT4gTWFpbFBsdXMsCiAgTWFpbFF1ZXN0aW9uOiAoKSA9PiBNYWlsUXVlc3Rpb25NYXJrLAogIE1haWxRdWVzdGlvbk1hcms6ICgpID0+IE1haWxRdWVzdGlvbk1hcmssCiAgTWFpbFNlYXJjaDogKCkgPT4gTWFpbFNlYXJjaCwKICBNYWlsV2FybmluZzogKCkgPT4gTWFpbFdhcm5pbmcsCiAgTWFpbFg6ICgpID0+IE1haWxYLAogIE1haWxib3g6ICgpID0+IE1haWxib3gsCiAgTWFpbHM6ICgpID0+IE1haWxzLAogIE1hcDogKCkgPT4gTWFwMiwKICBNYXBNaW51czogKCkgPT4gTWFwTWludXMsCiAgTWFwUGluOiAoKSA9PiBNYXBQaW4sCiAgTWFwUGluQ2hlY2s6ICgpID0+IE1hcFBpbkNoZWNrLAogIE1hcFBpbkNoZWNrSW5zaWRlOiAoKSA9PiBNYXBQaW5DaGVja0luc2lkZSwKICBNYXBQaW5Ib3VzZTogKCkgPT4gTWFwUGluSG91c2UsCiAgTWFwUGluTWludXM6ICgpID0+IE1hcFBpbk1pbnVzLAogIE1hcFBpbk1pbnVzSW5zaWRlOiAoKSA9PiBNYXBQaW5NaW51c0luc2lkZSwKICBNYXBQaW5PZmY6ICgpID0+IE1hcFBpbk9mZiwKICBNYXBQaW5QZW46ICgpID0+IE1hcFBpblBlbiwKICBNYXBQaW5QbHVzOiAoKSA9PiBNYXBQaW5QbHVzLAogIE1hcFBpblBsdXNJbnNpZGU6ICgpID0+IE1hcFBpblBsdXNJbnNpZGUsCiAgTWFwUGluWDogKCkgPT4gTWFwUGluWCwKICBNYXBQaW5YSW5zaWRlOiAoKSA9PiBNYXBQaW5YSW5zaWRlLAogIE1hcFBpbm5lZDogKCkgPT4gTWFwUGlubmVkLAogIE1hcFBsdXM6ICgpID0+IE1hcFBsdXMsCiAgTWFyczogKCkgPT4gTWFycywKICBNYXJzU3Ryb2tlOiAoKSA9PiBNYXJzU3Ryb2tlLAogIE1hcnRpbmk6ICgpID0+IE1hcnRpbmksCiAgTWF4aW1pemU6ICgpID0+IE1heGltaXplLAogIE1heGltaXplMjogKCkgPT4gTWF4aW1pemUyLAogIE1lZGFsOiAoKSA9PiBNZWRhbCwKICBNZWdhcGhvbmU6ICgpID0+IE1lZ2FwaG9uZSwKICBNZWdhcGhvbmVPZmY6ICgpID0+IE1lZ2FwaG9uZU9mZiwKICBNZWg6ICgpID0+IE1laCwKICBNZW1vcnlTdGljazogKCkgPT4gTWVtb3J5U3RpY2ssCiAgTWVudTogKCkgPT4gTWVudSwKICBNZW51U3F1YXJlOiAoKSA9PiBTcXVhcmVNZW51LAogIE1lcmdlOiAoKSA9PiBNZXJnZSwKICBNZXNzYWdlQ2lyY2xlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlLAogIE1lc3NhZ2VDaXJjbGVDb2RlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlQ29kZSwKICBNZXNzYWdlQ2lyY2xlRGFzaGVkOiAoKSA9PiBNZXNzYWdlQ2lyY2xlRGFzaGVkLAogIE1lc3NhZ2VDaXJjbGVIZWFydDogKCkgPT4gTWVzc2FnZUNpcmNsZUhlYXJ0LAogIE1lc3NhZ2VDaXJjbGVNb3JlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlTW9yZSwKICBNZXNzYWdlQ2lyY2xlT2ZmOiAoKSA9PiBNZXNzYWdlQ2lyY2xlT2ZmLAogIE1lc3NhZ2VDaXJjbGVQbHVzOiAoKSA9PiBNZXNzYWdlQ2lyY2xlUGx1cywKICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb246ICgpID0+IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazogKCkgPT4gTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyaywKICBNZXNzYWdlQ2lyY2xlUmVwbHk6ICgpID0+IE1lc3NhZ2VDaXJjbGVSZXBseSwKICBNZXNzYWdlQ2lyY2xlV2FybmluZzogKCkgPT4gTWVzc2FnZUNpcmNsZVdhcm5pbmcsCiAgTWVzc2FnZUNpcmNsZVg6ICgpID0+IE1lc3NhZ2VDaXJjbGVYLAogIE1lc3NhZ2VTcXVhcmU6ICgpID0+IE1lc3NhZ2VTcXVhcmUsCiAgTWVzc2FnZVNxdWFyZUNvZGU6ICgpID0+IE1lc3NhZ2VTcXVhcmVDb2RlLAogIE1lc3NhZ2VTcXVhcmVEYXNoZWQ6ICgpID0+IE1lc3NhZ2VTcXVhcmVEYXNoZWQsCiAgTWVzc2FnZVNxdWFyZURpZmY6ICgpID0+IE1lc3NhZ2VTcXVhcmVEaWZmLAogIE1lc3NhZ2VTcXVhcmVEb3Q6ICgpID0+IE1lc3NhZ2VTcXVhcmVEb3QsCiAgTWVzc2FnZVNxdWFyZUhlYXJ0OiAoKSA9PiBNZXNzYWdlU3F1YXJlSGVhcnQsCiAgTWVzc2FnZVNxdWFyZUxvY2s6ICgpID0+IE1lc3NhZ2VTcXVhcmVMb2NrLAogIE1lc3NhZ2VTcXVhcmVNb3JlOiAoKSA9PiBNZXNzYWdlU3F1YXJlTW9yZSwKICBNZXNzYWdlU3F1YXJlT2ZmOiAoKSA9PiBNZXNzYWdlU3F1YXJlT2ZmLAogIE1lc3NhZ2VTcXVhcmVQbHVzOiAoKSA9PiBNZXNzYWdlU3F1YXJlUGx1cywKICBNZXNzYWdlU3F1YXJlUXVvdGU6ICgpID0+IE1lc3NhZ2VTcXVhcmVRdW90ZSwKICBNZXNzYWdlU3F1YXJlUmVwbHk6ICgpID0+IE1lc3NhZ2VTcXVhcmVSZXBseSwKICBNZXNzYWdlU3F1YXJlU2hhcmU6ICgpID0+IE1lc3NhZ2VTcXVhcmVTaGFyZSwKICBNZXNzYWdlU3F1YXJlVGV4dDogKCkgPT4gTWVzc2FnZVNxdWFyZVRleHQsCiAgTWVzc2FnZVNxdWFyZVdhcm5pbmc6ICgpID0+IE1lc3NhZ2VTcXVhcmVXYXJuaW5nLAogIE1lc3NhZ2VTcXVhcmVYOiAoKSA9PiBNZXNzYWdlU3F1YXJlWCwKICBNZXNzYWdlc1NxdWFyZTogKCkgPT4gTWVzc2FnZXNTcXVhcmUsCiAgTWljOiAoKSA9PiBNaWMsCiAgTWljMjogKCkgPT4gTWljVm9jYWwsCiAgTWljT2ZmOiAoKSA9PiBNaWNPZmYsCiAgTWljVm9jYWw6ICgpID0+IE1pY1ZvY2FsLAogIE1pY3JvY2hpcDogKCkgPT4gTWljcm9jaGlwLAogIE1pY3Jvc2NvcGU6ICgpID0+IE1pY3Jvc2NvcGUsCiAgTWljcm93YXZlOiAoKSA9PiBNaWNyb3dhdmUsCiAgTWlsZXN0b25lOiAoKSA9PiBNaWxlc3RvbmUsCiAgTWlsazogKCkgPT4gTWlsaywKICBNaWxrT2ZmOiAoKSA9PiBNaWxrT2ZmLAogIE1pbmltaXplOiAoKSA9PiBNaW5pbWl6ZSwKICBNaW5pbWl6ZTI6ICgpID0+IE1pbmltaXplMiwKICBNaW51czogKCkgPT4gTWludXMsCiAgTWludXNDaXJjbGU6ICgpID0+IENpcmNsZU1pbnVzLAogIE1pbnVzU3F1YXJlOiAoKSA9PiBTcXVhcmVNaW51cywKICBNb25pdG9yOiAoKSA9PiBNb25pdG9yLAogIE1vbml0b3JDaGVjazogKCkgPT4gTW9uaXRvckNoZWNrLAogIE1vbml0b3JDbG91ZDogKCkgPT4gTW9uaXRvckNsb3VkLAogIE1vbml0b3JDb2c6ICgpID0+IE1vbml0b3JDb2csCiAgTW9uaXRvckRvdDogKCkgPT4gTW9uaXRvckRvdCwKICBNb25pdG9yRG93bjogKCkgPT4gTW9uaXRvckRvd24sCiAgTW9uaXRvck9mZjogKCkgPT4gTW9uaXRvck9mZiwKICBNb25pdG9yUGF1c2U6ICgpID0+IE1vbml0b3JQYXVzZSwKICBNb25pdG9yUGxheTogKCkgPT4gTW9uaXRvclBsYXksCiAgTW9uaXRvclNtYXJ0cGhvbmU6ICgpID0+IE1vbml0b3JTbWFydHBob25lLAogIE1vbml0b3JTcGVha2VyOiAoKSA9PiBNb25pdG9yU3BlYWtlciwKICBNb25pdG9yU3RvcDogKCkgPT4gTW9uaXRvclN0b3AsCiAgTW9uaXRvclVwOiAoKSA9PiBNb25pdG9yVXAsCiAgTW9uaXRvclg6ICgpID0+IE1vbml0b3JYLAogIE1vb246ICgpID0+IE1vb24sCiAgTW9vblN0YXI6ICgpID0+IE1vb25TdGFyLAogIE1vcmVIb3Jpem9udGFsOiAoKSA9PiBFbGxpcHNpcywKICBNb3JlVmVydGljYWw6ICgpID0+IEVsbGlwc2lzVmVydGljYWwsCiAgTW90b3JiaWtlOiAoKSA9PiBNb3RvcmJpa2UsCiAgTW91bnRhaW46ICgpID0+IE1vdW50YWluLAogIE1vdW50YWluU25vdzogKCkgPT4gTW91bnRhaW5Tbm93LAogIE1vdXNlOiAoKSA9PiBNb3VzZSwKICBNb3VzZU9mZjogKCkgPT4gTW91c2VPZmYsCiAgTW91c2VQb2ludGVyOiAoKSA9PiBNb3VzZVBvaW50ZXIsCiAgTW91c2VQb2ludGVyMjogKCkgPT4gTW91c2VQb2ludGVyMiwKICBNb3VzZVBvaW50ZXIyT2ZmOiAoKSA9PiBNb3VzZVBvaW50ZXIyT2ZmLAogIE1vdXNlUG9pbnRlckJhbjogKCkgPT4gTW91c2VQb2ludGVyQmFuLAogIE1vdXNlUG9pbnRlckNsaWNrOiAoKSA9PiBNb3VzZVBvaW50ZXJDbGljaywKICBNb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciwKICBNb3ZlOiAoKSA9PiBNb3ZlLAogIE1vdmUzRDogKCkgPT4gTW92ZTNkLAogIE1vdmUzZDogKCkgPT4gTW92ZTNkLAogIE1vdmVEaWFnb25hbDogKCkgPT4gTW92ZURpYWdvbmFsLAogIE1vdmVEaWFnb25hbDI6ICgpID0+IE1vdmVEaWFnb25hbDIsCiAgTW92ZURvd246ICgpID0+IE1vdmVEb3duLAogIE1vdmVEb3duTGVmdDogKCkgPT4gTW92ZURvd25MZWZ0LAogIE1vdmVEb3duUmlnaHQ6ICgpID0+IE1vdmVEb3duUmlnaHQsCiAgTW92ZUhvcml6b250YWw6ICgpID0+IE1vdmVIb3Jpem9udGFsLAogIE1vdmVMZWZ0OiAoKSA9PiBNb3ZlTGVmdCwKICBNb3ZlUmlnaHQ6ICgpID0+IE1vdmVSaWdodCwKICBNb3ZlVXA6ICgpID0+IE1vdmVVcCwKICBNb3ZlVXBMZWZ0OiAoKSA9PiBNb3ZlVXBMZWZ0LAogIE1vdmVVcFJpZ2h0OiAoKSA9PiBNb3ZlVXBSaWdodCwKICBNb3ZlVmVydGljYWw6ICgpID0+IE1vdmVWZXJ0aWNhbCwKICBNdXNpYzogKCkgPT4gTXVzaWMsCiAgTXVzaWMyOiAoKSA9PiBNdXNpYzIsCiAgTXVzaWMzOiAoKSA9PiBNdXNpYzMsCiAgTXVzaWM0OiAoKSA9PiBNdXNpYzQsCiAgTmF2aWdhdGlvbjogKCkgPT4gTmF2aWdhdGlvbiwKICBOYXZpZ2F0aW9uMjogKCkgPT4gTmF2aWdhdGlvbjIsCiAgTmF2aWdhdGlvbjJPZmY6ICgpID0+IE5hdmlnYXRpb24yT2ZmLAogIE5hdmlnYXRpb25PZmY6ICgpID0+IE5hdmlnYXRpb25PZmYsCiAgTmV0d29yazogKCkgPT4gTmV0d29yaywKICBOZXdzcGFwZXI6ICgpID0+IE5ld3NwYXBlciwKICBOZmM6ICgpID0+IE5mYywKICBOb25CaW5hcnk6ICgpID0+IE5vbkJpbmFyeSwKICBOb3RlYm9vazogKCkgPT4gTm90ZWJvb2ssCiAgTm90ZWJvb2tQZW46ICgpID0+IE5vdGVib29rUGVuLAogIE5vdGVib29rVGFiczogKCkgPT4gTm90ZWJvb2tUYWJzLAogIE5vdGVib29rVGV4dDogKCkgPT4gTm90ZWJvb2tUZXh0LAogIE5vdGVwYWRUZXh0OiAoKSA9PiBOb3RlcGFkVGV4dCwKICBOb3RlcGFkVGV4dERhc2hlZDogKCkgPT4gTm90ZXBhZFRleHREYXNoZWQsCiAgTnV0OiAoKSA9PiBOdXQsCiAgTnV0T2ZmOiAoKSA9PiBOdXRPZmYsCiAgT2N0YWdvbjogKCkgPT4gT2N0YWdvbiwKICBPY3RhZ29uQWxlcnQ6ICgpID0+IE9jdGFnb25BbGVydCwKICBPY3RhZ29uTWludXM6ICgpID0+IE9jdGFnb25NaW51cywKICBPY3RhZ29uUGF1c2U6ICgpID0+IE9jdGFnb25QYXVzZSwKICBPY3RhZ29uWDogKCkgPT4gT2N0YWdvblgsCiAgT21lZ2E6ICgpID0+IE9tZWdhLAogIE9wdGlvbjogKCkgPT4gT3B0aW9uLAogIE9yYml0OiAoKSA9PiBPcmJpdCwKICBPcmlnYW1pOiAoKSA9PiBPcmlnYW1pLAogIE91dGRlbnQ6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBQYWNrYWdlOiAoKSA9PiBQYWNrYWdlLAogIFBhY2thZ2UyOiAoKSA9PiBQYWNrYWdlMiwKICBQYWNrYWdlQ2hlY2s6ICgpID0+IFBhY2thZ2VDaGVjaywKICBQYWNrYWdlTWludXM6ICgpID0+IFBhY2thZ2VNaW51cywKICBQYWNrYWdlT3BlbjogKCkgPT4gUGFja2FnZU9wZW4sCiAgUGFja2FnZVBsdXM6ICgpID0+IFBhY2thZ2VQbHVzLAogIFBhY2thZ2VTZWFyY2g6ICgpID0+IFBhY2thZ2VTZWFyY2gsCiAgUGFja2FnZVg6ICgpID0+IFBhY2thZ2VYLAogIFBhaW50QnVja2V0OiAoKSA9PiBQYWludEJ1Y2tldCwKICBQYWludFJvbGxlcjogKCkgPT4gUGFpbnRSb2xsZXIsCiAgUGFpbnRicnVzaDogKCkgPT4gUGFpbnRicnVzaCwKICBQYWludGJydXNoMjogKCkgPT4gUGFpbnRicnVzaFZlcnRpY2FsLAogIFBhaW50YnJ1c2hWZXJ0aWNhbDogKCkgPT4gUGFpbnRicnVzaFZlcnRpY2FsLAogIFBhbGV0dGU6ICgpID0+IFBhbGV0dGUsCiAgUGFsbXRyZWU6ICgpID0+IFRyZWVQYWxtLAogIFBhbmRhOiAoKSA9PiBQYW5kYSwKICBQYW5lbEJvdHRvbTogKCkgPT4gUGFuZWxCb3R0b20sCiAgUGFuZWxCb3R0b21DbG9zZTogKCkgPT4gUGFuZWxCb3R0b21DbG9zZSwKICBQYW5lbEJvdHRvbURhc2hlZDogKCkgPT4gUGFuZWxCb3R0b21EYXNoZWQsCiAgUGFuZWxCb3R0b21JbmFjdGl2ZTogKCkgPT4gUGFuZWxCb3R0b21EYXNoZWQsCiAgUGFuZWxCb3R0b21PcGVuOiAoKSA9PiBQYW5lbEJvdHRvbU9wZW4sCiAgUGFuZWxMZWZ0OiAoKSA9PiBQYW5lbExlZnQsCiAgUGFuZWxMZWZ0Q2xvc2U6ICgpID0+IFBhbmVsTGVmdENsb3NlLAogIFBhbmVsTGVmdERhc2hlZDogKCkgPT4gUGFuZWxMZWZ0RGFzaGVkLAogIFBhbmVsTGVmdEluYWN0aXZlOiAoKSA9PiBQYW5lbExlZnREYXNoZWQsCiAgUGFuZWxMZWZ0T3BlbjogKCkgPT4gUGFuZWxMZWZ0T3BlbiwKICBQYW5lbExlZnRSaWdodERhc2hlZDogKCkgPT4gUGFuZWxMZWZ0UmlnaHREYXNoZWQsCiAgUGFuZWxSaWdodDogKCkgPT4gUGFuZWxSaWdodCwKICBQYW5lbFJpZ2h0Q2xvc2U6ICgpID0+IFBhbmVsUmlnaHRDbG9zZSwKICBQYW5lbFJpZ2h0RGFzaGVkOiAoKSA9PiBQYW5lbFJpZ2h0RGFzaGVkLAogIFBhbmVsUmlnaHRJbmFjdGl2ZTogKCkgPT4gUGFuZWxSaWdodERhc2hlZCwKICBQYW5lbFJpZ2h0T3BlbjogKCkgPT4gUGFuZWxSaWdodE9wZW4sCiAgUGFuZWxUb3A6ICgpID0+IFBhbmVsVG9wLAogIFBhbmVsVG9wQm90dG9tRGFzaGVkOiAoKSA9PiBQYW5lbFRvcEJvdHRvbURhc2hlZCwKICBQYW5lbFRvcENsb3NlOiAoKSA9PiBQYW5lbFRvcENsb3NlLAogIFBhbmVsVG9wRGFzaGVkOiAoKSA9PiBQYW5lbFRvcERhc2hlZCwKICBQYW5lbFRvcEluYWN0aXZlOiAoKSA9PiBQYW5lbFRvcERhc2hlZCwKICBQYW5lbFRvcE9wZW46ICgpID0+IFBhbmVsVG9wT3BlbiwKICBQYW5lbHNMZWZ0Qm90dG9tOiAoKSA9PiBQYW5lbHNMZWZ0Qm90dG9tLAogIFBhbmVsc0xlZnRSaWdodDogKCkgPT4gQ29sdW1uczMsCiAgUGFuZWxzUmlnaHRCb3R0b206ICgpID0+IFBhbmVsc1JpZ2h0Qm90dG9tLAogIFBhbmVsc1RvcEJvdHRvbTogKCkgPT4gUm93czMsCiAgUGFuZWxzVG9wTGVmdDogKCkgPT4gUGFuZWxzVG9wTGVmdCwKICBQYXBlcmNsaXA6ICgpID0+IFBhcGVyY2xpcCwKICBQYXJlbnRoZXNlczogKCkgPT4gUGFyZW50aGVzZXMsCiAgUGFya2luZ0NpcmNsZTogKCkgPT4gQ2lyY2xlUGFya2luZywKICBQYXJraW5nQ2lyY2xlT2ZmOiAoKSA9PiBDaXJjbGVQYXJraW5nT2ZmLAogIFBhcmtpbmdNZXRlcjogKCkgPT4gUGFya2luZ01ldGVyLAogIFBhcmtpbmdTcXVhcmU6ICgpID0+IFNxdWFyZVBhcmtpbmcsCiAgUGFya2luZ1NxdWFyZU9mZjogKCkgPT4gU3F1YXJlUGFya2luZ09mZiwKICBQYXJ0eVBvcHBlcjogKCkgPT4gUGFydHlQb3BwZXIsCiAgUGF1c2U6ICgpID0+IFBhdXNlLAogIFBhdXNlQ2lyY2xlOiAoKSA9PiBDaXJjbGVQYXVzZSwKICBQYXVzZU9jdGFnb246ICgpID0+IE9jdGFnb25QYXVzZSwKICBQYXdQcmludDogKCkgPT4gUGF3UHJpbnQsCiAgUGNDYXNlOiAoKSA9PiBQY0Nhc2UsCiAgUGVuOiAoKSA9PiBQZW4sCiAgUGVuQm94OiAoKSA9PiBTcXVhcmVQZW4sCiAgUGVuTGluZTogKCkgPT4gUGVuTGluZSwKICBQZW5PZmY6ICgpID0+IFBlbk9mZiwKICBQZW5TcXVhcmU6ICgpID0+IFNxdWFyZVBlbiwKICBQZW5Ub29sOiAoKSA9PiBQZW5Ub29sLAogIFBlbmNpbDogKCkgPT4gUGVuY2lsLAogIFBlbmNpbExpbmU6ICgpID0+IFBlbmNpbExpbmUsCiAgUGVuY2lsT2ZmOiAoKSA9PiBQZW5jaWxPZmYsCiAgUGVuY2lsUnVsZXI6ICgpID0+IFBlbmNpbFJ1bGVyLAogIFBlbnRhZ29uOiAoKSA9PiBQZW50YWdvbiwKICBQZXJjZW50OiAoKSA9PiBQZXJjZW50LAogIFBlcmNlbnRDaXJjbGU6ICgpID0+IENpcmNsZVBlcmNlbnQsCiAgUGVyY2VudERpYW1vbmQ6ICgpID0+IERpYW1vbmRQZXJjZW50LAogIFBlcmNlbnRTcXVhcmU6ICgpID0+IFNxdWFyZVBlcmNlbnQsCiAgUGVyc29uU3RhbmRpbmc6ICgpID0+IFBlcnNvblN0YW5kaW5nLAogIFBoaWxpcHBpbmVQZXNvOiAoKSA9PiBQaGlsaXBwaW5lUGVzbywKICBQaG9uZTogKCkgPT4gUGhvbmUsCiAgUGhvbmVDYWxsOiAoKSA9PiBQaG9uZUNhbGwsCiAgUGhvbmVGb3J3YXJkZWQ6ICgpID0+IFBob25lRm9yd2FyZGVkLAogIFBob25lSW5jb21pbmc6ICgpID0+IFBob25lSW5jb21pbmcsCiAgUGhvbmVNaXNzZWQ6ICgpID0+IFBob25lTWlzc2VkLAogIFBob25lT2ZmOiAoKSA9PiBQaG9uZU9mZiwKICBQaG9uZU91dGdvaW5nOiAoKSA9PiBQaG9uZU91dGdvaW5nLAogIFBpOiAoKSA9PiBQaSwKICBQaVNxdWFyZTogKCkgPT4gU3F1YXJlUGksCiAgUGlhbm86ICgpID0+IFBpYW5vLAogIFBpY2theGU6ICgpID0+IFBpY2theGUsCiAgUGljdHVyZUluUGljdHVyZTogKCkgPT4gUGljdHVyZUluUGljdHVyZSwKICBQaWN0dXJlSW5QaWN0dXJlMjogKCkgPT4gUGljdHVyZUluUGljdHVyZTIsCiAgUGllQ2hhcnQ6ICgpID0+IENoYXJ0UGllLAogIFBpZ2d5QmFuazogKCkgPT4gUGlnZ3lCYW5rLAogIFBpbGNyb3c6ICgpID0+IFBpbGNyb3csCiAgUGlsY3Jvd0xlZnQ6ICgpID0+IFBpbGNyb3dMZWZ0LAogIFBpbGNyb3dSaWdodDogKCkgPT4gUGlsY3Jvd1JpZ2h0LAogIFBpbGNyb3dTcXVhcmU6ICgpID0+IFNxdWFyZVBpbGNyb3csCiAgUGlsbDogKCkgPT4gUGlsbCwKICBQaWxsQm90dGxlOiAoKSA9PiBQaWxsQm90dGxlLAogIFBpbjogKCkgPT4gUGluLAogIFBpbk9mZjogKCkgPT4gUGluT2ZmLAogIFBpcGV0dGU6ICgpID0+IFBpcGV0dGUsCiAgUGl6emE6ICgpID0+IFBpenphLAogIFBsYW5lOiAoKSA9PiBQbGFuZSwKICBQbGFuZUxhbmRpbmc6ICgpID0+IFBsYW5lTGFuZGluZywKICBQbGFuZVRha2VvZmY6ICgpID0+IFBsYW5lVGFrZW9mZiwKICBQbGF5OiAoKSA9PiBQbGF5LAogIFBsYXlDaXJjbGU6ICgpID0+IENpcmNsZVBsYXksCiAgUGxheVNxdWFyZTogKCkgPT4gU3F1YXJlUGxheSwKICBQbHVnOiAoKSA9PiBQbHVnLAogIFBsdWcyOiAoKSA9PiBQbHVnMiwKICBQbHVnWmFwOiAoKSA9PiBQbHVnWmFwLAogIFBsdWdaYXAyOiAoKSA9PiBQbHVnWmFwLAogIFBsdXM6ICgpID0+IFBsdXMsCiAgUGx1c0NpcmNsZTogKCkgPT4gQ2lyY2xlUGx1cywKICBQbHVzU3F1YXJlOiAoKSA9PiBTcXVhcmVQbHVzLAogIFBvY2tldDogKCkgPT4gUG9ja2V0LAogIFBvY2tldEtuaWZlOiAoKSA9PiBQb2NrZXRLbmlmZSwKICBQb2RjYXN0OiAoKSA9PiBQb2RjYXN0LAogIFBvaW50ZXI6ICgpID0+IFBvaW50ZXIsCiAgUG9pbnRlck9mZjogKCkgPT4gUG9pbnRlck9mZiwKICBQb3Bjb3JuOiAoKSA9PiBQb3Bjb3JuLAogIFBvcHNpY2xlOiAoKSA9PiBQb3BzaWNsZSwKICBQb3VuZFN0ZXJsaW5nOiAoKSA9PiBQb3VuZFN0ZXJsaW5nLAogIFBvd2VyOiAoKSA9PiBQb3dlciwKICBQb3dlckNpcmNsZTogKCkgPT4gQ2lyY2xlUG93ZXIsCiAgUG93ZXJPZmY6ICgpID0+IFBvd2VyT2ZmLAogIFBvd2VyU3F1YXJlOiAoKSA9PiBTcXVhcmVQb3dlciwKICBQcmVzZW50YXRpb246ICgpID0+IFByZXNlbnRhdGlvbiwKICBQcmludGVyOiAoKSA9PiBQcmludGVyLAogIFByaW50ZXJDaGVjazogKCkgPT4gUHJpbnRlckNoZWNrLAogIFByb2plY3RvcjogKCkgPT4gUHJvamVjdG9yLAogIFByb3BvcnRpb25zOiAoKSA9PiBQcm9wb3J0aW9ucywKICBQdXp6bGU6ICgpID0+IFB1enpsZSwKICBQeXJhbWlkOiAoKSA9PiBQeXJhbWlkLAogIFFyQ29kZTogKCkgPT4gUXJDb2RlLAogIFF1b3RlOiAoKSA9PiBRdW90ZSwKICBSYWJiaXQ6ICgpID0+IFJhYmJpdCwKICBSYWRhcjogKCkgPT4gUmFkYXIsCiAgUmFkaWF0aW9uOiAoKSA9PiBSYWRpYXRpb24sCiAgUmFkaWNhbDogKCkgPT4gUmFkaWNhbCwKICBSYWRpbzogKCkgPT4gUmFkaW8sCiAgUmFkaW9SZWNlaXZlcjogKCkgPT4gUmFkaW9SZWNlaXZlciwKICBSYWRpb1Rvd2VyOiAoKSA9PiBSYWRpb1Rvd2VyLAogIFJhZGl1czogKCkgPT4gUmFkaXVzLAogIFJhaWxTeW1ib2w6ICgpID0+IFJhaWxTeW1ib2wsCiAgUmFpbmJvdzogKCkgPT4gUmFpbmJvdywKICBSYXQ6ICgpID0+IFJhdCwKICBSYXRpbzogKCkgPT4gUmF0aW8sCiAgUmVjZWlwdDogKCkgPT4gUmVjZWlwdCwKICBSZWNlaXB0Q2VudDogKCkgPT4gUmVjZWlwdENlbnQsCiAgUmVjZWlwdEV1cm86ICgpID0+IFJlY2VpcHRFdXJvLAogIFJlY2VpcHRJbmRpYW5SdXBlZTogKCkgPT4gUmVjZWlwdEluZGlhblJ1cGVlLAogIFJlY2VpcHRKYXBhbmVzZVllbjogKCkgPT4gUmVjZWlwdEphcGFuZXNlWWVuLAogIFJlY2VpcHRQb3VuZFN0ZXJsaW5nOiAoKSA9PiBSZWNlaXB0UG91bmRTdGVybGluZywKICBSZWNlaXB0UnVzc2lhblJ1YmxlOiAoKSA9PiBSZWNlaXB0UnVzc2lhblJ1YmxlLAogIFJlY2VpcHRTd2lzc0ZyYW5jOiAoKSA9PiBSZWNlaXB0U3dpc3NGcmFuYywKICBSZWNlaXB0VGV4dDogKCkgPT4gUmVjZWlwdFRleHQsCiAgUmVjZWlwdFR1cmtpc2hMaXJhOiAoKSA9PiBSZWNlaXB0VHVya2lzaExpcmEsCiAgUmVjdGFuZ2xlQ2lyY2xlOiAoKSA9PiBSZWN0YW5nbGVDaXJjbGUsCiAgUmVjdGFuZ2xlRWxsaXBzaXM6ICgpID0+IFJlY3RhbmdsZUVsbGlwc2lzLAogIFJlY3RhbmdsZUdvZ2dsZXM6ICgpID0+IFJlY3RhbmdsZUdvZ2dsZXMsCiAgUmVjdGFuZ2xlSG9yaXpvbnRhbDogKCkgPT4gUmVjdGFuZ2xlSG9yaXpvbnRhbCwKICBSZWN0YW5nbGVWZXJ0aWNhbDogKCkgPT4gUmVjdGFuZ2xlVmVydGljYWwsCiAgUmVjeWNsZTogKCkgPT4gUmVjeWNsZSwKICBSZWRvOiAoKSA9PiBSZWRvLAogIFJlZG8yOiAoKSA9PiBSZWRvMiwKICBSZWRvRG90OiAoKSA9PiBSZWRvRG90LAogIFJlZnJlc2hDY3c6ICgpID0+IFJlZnJlc2hDY3csCiAgUmVmcmVzaENjd0RvdDogKCkgPT4gUmVmcmVzaENjd0RvdCwKICBSZWZyZXNoQ3c6ICgpID0+IFJlZnJlc2hDdywKICBSZWZyZXNoQ3dPZmY6ICgpID0+IFJlZnJlc2hDd09mZiwKICBSZWZyaWdlcmF0b3I6ICgpID0+IFJlZnJpZ2VyYXRvciwKICBSZWdleDogKCkgPT4gUmVnZXgsCiAgUmVtb3ZlRm9ybWF0dGluZzogKCkgPT4gUmVtb3ZlRm9ybWF0dGluZywKICBSZXBlYXQ6ICgpID0+IFJlcGVhdCwKICBSZXBlYXQxOiAoKSA9PiBSZXBlYXQxLAogIFJlcGVhdDI6ICgpID0+IFJlcGVhdDIsCiAgUmVwbGFjZTogKCkgPT4gUmVwbGFjZSwKICBSZXBsYWNlQWxsOiAoKSA9PiBSZXBsYWNlQWxsLAogIFJlcGx5OiAoKSA9PiBSZXBseSwKICBSZXBseUFsbDogKCkgPT4gUmVwbHlBbGwsCiAgUmV3aW5kOiAoKSA9PiBSZXdpbmQsCiAgUmliYm9uOiAoKSA9PiBSaWJib24sCiAgUm9ja2V0OiAoKSA9PiBSb2NrZXQsCiAgUm9ja2luZ0NoYWlyOiAoKSA9PiBSb2NraW5nQ2hhaXIsCiAgUm9sbGVyQ29hc3RlcjogKCkgPT4gUm9sbGVyQ29hc3RlciwKICBSb3NlOiAoKSA9PiBSb3NlLAogIFJvdGF0ZTNEOiAoKSA9PiBSb3RhdGUzZCwKICBSb3RhdGUzZDogKCkgPT4gUm90YXRlM2QsCiAgUm90YXRlQ2N3OiAoKSA9PiBSb3RhdGVDY3csCiAgUm90YXRlQ2N3S2V5OiAoKSA9PiBSb3RhdGVDY3dLZXksCiAgUm90YXRlQ2N3U3F1YXJlOiAoKSA9PiBSb3RhdGVDY3dTcXVhcmUsCiAgUm90YXRlQ3c6ICgpID0+IFJvdGF0ZUN3LAogIFJvdGF0ZUN3U3F1YXJlOiAoKSA9PiBSb3RhdGVDd1NxdWFyZSwKICBSb3V0ZTogKCkgPT4gUm91dGUsCiAgUm91dGVPZmY6ICgpID0+IFJvdXRlT2ZmLAogIFJvdXRlcjogKCkgPT4gUm91dGVyLAogIFJvd3M6ICgpID0+IFJvd3MyLAogIFJvd3MyOiAoKSA9PiBSb3dzMiwKICBSb3dzMzogKCkgPT4gUm93czMsCiAgUm93czQ6ICgpID0+IFJvd3M0LAogIFJzczogKCkgPT4gUnNzLAogIFJ1bGVyOiAoKSA9PiBSdWxlciwKICBSdWxlckRpbWVuc2lvbkxpbmU6ICgpID0+IFJ1bGVyRGltZW5zaW9uTGluZSwKICBSdXNzaWFuUnVibGU6ICgpID0+IFJ1c3NpYW5SdWJsZSwKICBTYWlsYm9hdDogKCkgPT4gU2FpbGJvYXQsCiAgU2FsYWQ6ICgpID0+IFNhbGFkLAogIFNhbmR3aWNoOiAoKSA9PiBTYW5kd2ljaCwKICBTYXRlbGxpdGU6ICgpID0+IFNhdGVsbGl0ZSwKICBTYXRlbGxpdGVEaXNoOiAoKSA9PiBTYXRlbGxpdGVEaXNoLAogIFNhdWRpUml5YWw6ICgpID0+IFNhdWRpUml5YWwsCiAgU2F2ZTogKCkgPT4gU2F2ZSwKICBTYXZlQWxsOiAoKSA9PiBTYXZlQWxsLAogIFNhdmVPZmY6ICgpID0+IFNhdmVPZmYsCiAgU2NhbGU6ICgpID0+IFNjYWxlLAogIFNjYWxlM0Q6ICgpID0+IFNjYWxlM2QsCiAgU2NhbGUzZDogKCkgPT4gU2NhbGUzZCwKICBTY2FsaW5nOiAoKSA9PiBTY2FsaW5nLAogIFNjYW46ICgpID0+IFNjYW4sCiAgU2NhbkJhcmNvZGU6ICgpID0+IFNjYW5CYXJjb2RlLAogIFNjYW5FeWU6ICgpID0+IFNjYW5FeWUsCiAgU2NhbkZhY2U6ICgpID0+IFNjYW5GYWNlLAogIFNjYW5IZWFydDogKCkgPT4gU2NhbkhlYXJ0LAogIFNjYW5MaW5lOiAoKSA9PiBTY2FuTGluZSwKICBTY2FuUXJDb2RlOiAoKSA9PiBTY2FuUXJDb2RlLAogIFNjYW5TZWFyY2g6ICgpID0+IFNjYW5TZWFyY2gsCiAgU2NhblRleHQ6ICgpID0+IFNjYW5UZXh0LAogIFNjYXR0ZXJDaGFydDogKCkgPT4gQ2hhcnRTY2F0dGVyLAogIFNjaG9vbDogKCkgPT4gU2Nob29sLAogIFNjaG9vbDI6ICgpID0+IFVuaXZlcnNpdHksCiAgU2Npc3NvcnM6ICgpID0+IFNjaXNzb3JzLAogIFNjaXNzb3JzTGluZURhc2hlZDogKCkgPT4gU2Npc3NvcnNMaW5lRGFzaGVkLAogIFNjaXNzb3JzU3F1YXJlOiAoKSA9PiBTcXVhcmVTY2lzc29ycywKICBTY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbTogKCkgPT4gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgU2Nvb3RlcjogKCkgPT4gU2Nvb3RlciwKICBTY3JlZW5TaGFyZTogKCkgPT4gU2NyZWVuU2hhcmUsCiAgU2NyZWVuU2hhcmVPZmY6ICgpID0+IFNjcmVlblNoYXJlT2ZmLAogIFNjcm9sbDogKCkgPT4gU2Nyb2xsLAogIFNjcm9sbFRleHQ6ICgpID0+IFNjcm9sbFRleHQsCiAgU2VhcmNoOiAoKSA9PiBTZWFyY2gsCiAgU2VhcmNoQWxlcnQ6ICgpID0+IFNlYXJjaEFsZXJ0LAogIFNlYXJjaENoZWNrOiAoKSA9PiBTZWFyY2hDaGVjaywKICBTZWFyY2hDb2RlOiAoKSA9PiBTZWFyY2hDb2RlLAogIFNlYXJjaFNsYXNoOiAoKSA9PiBTZWFyY2hTbGFzaCwKICBTZWFyY2hYOiAoKSA9PiBTZWFyY2hYLAogIFNlY3Rpb246ICgpID0+IFNlY3Rpb24sCiAgU2VuZDogKCkgPT4gU2VuZCwKICBTZW5kSG9yaXpvbmFsOiAoKSA9PiBTZW5kSG9yaXpvbnRhbCwKICBTZW5kSG9yaXpvbnRhbDogKCkgPT4gU2VuZEhvcml6b250YWwsCiAgU2VuZFRvQmFjazogKCkgPT4gU2VuZFRvQmFjaywKICBTZXBhcmF0b3JIb3Jpem9udGFsOiAoKSA9PiBTZXBhcmF0b3JIb3Jpem9udGFsLAogIFNlcGFyYXRvclZlcnRpY2FsOiAoKSA9PiBTZXBhcmF0b3JWZXJ0aWNhbCwKICBTZXJ2ZXI6ICgpID0+IFNlcnZlciwKICBTZXJ2ZXJDb2c6ICgpID0+IFNlcnZlckNvZywKICBTZXJ2ZXJDcmFzaDogKCkgPT4gU2VydmVyQ3Jhc2gsCiAgU2VydmVyT2ZmOiAoKSA9PiBTZXJ2ZXJPZmYsCiAgU2V0dGluZ3M6ICgpID0+IFNldHRpbmdzLAogIFNldHRpbmdzMjogKCkgPT4gU2V0dGluZ3MyLAogIFNoYXBlczogKCkgPT4gU2hhcGVzLAogIFNoYXJlOiAoKSA9PiBTaGFyZSwKICBTaGFyZTI6ICgpID0+IFNoYXJlMiwKICBTaGVldDogKCkgPT4gU2hlZXQsCiAgU2hlbGw6ICgpID0+IFNoZWxsLAogIFNoaWVsZDogKCkgPT4gU2hpZWxkLAogIFNoaWVsZEFsZXJ0OiAoKSA9PiBTaGllbGRBbGVydCwKICBTaGllbGRCYW46ICgpID0+IFNoaWVsZEJhbiwKICBTaGllbGRDaGVjazogKCkgPT4gU2hpZWxkQ2hlY2ssCiAgU2hpZWxkQ2xvc2U6ICgpID0+IFNoaWVsZFgsCiAgU2hpZWxkRWxsaXBzaXM6ICgpID0+IFNoaWVsZEVsbGlwc2lzLAogIFNoaWVsZEhhbGY6ICgpID0+IFNoaWVsZEhhbGYsCiAgU2hpZWxkTWludXM6ICgpID0+IFNoaWVsZE1pbnVzLAogIFNoaWVsZE9mZjogKCkgPT4gU2hpZWxkT2ZmLAogIFNoaWVsZFBsdXM6ICgpID0+IFNoaWVsZFBsdXMsCiAgU2hpZWxkUXVlc3Rpb246ICgpID0+IFNoaWVsZFF1ZXN0aW9uTWFyaywKICBTaGllbGRRdWVzdGlvbk1hcms6ICgpID0+IFNoaWVsZFF1ZXN0aW9uTWFyaywKICBTaGllbGRVc2VyOiAoKSA9PiBTaGllbGRVc2VyLAogIFNoaWVsZFg6ICgpID0+IFNoaWVsZFgsCiAgU2hpcDogKCkgPT4gU2hpcCwKICBTaGlwV2hlZWw6ICgpID0+IFNoaXBXaGVlbCwKICBTaGlydDogKCkgPT4gU2hpcnQsCiAgU2hvcHBpbmdCYWc6ICgpID0+IFNob3BwaW5nQmFnLAogIFNob3BwaW5nQmFza2V0OiAoKSA9PiBTaG9wcGluZ0Jhc2tldCwKICBTaG9wcGluZ0NhcnQ6ICgpID0+IFNob3BwaW5nQ2FydCwKICBTaG92ZWw6ICgpID0+IFNob3ZlbCwKICBTaG93ZXJIZWFkOiAoKSA9PiBTaG93ZXJIZWFkLAogIFNocmVkZGVyOiAoKSA9PiBTaHJlZGRlciwKICBTaHJpbXA6ICgpID0+IFNocmltcCwKICBTaHJpbms6ICgpID0+IFNocmluaywKICBTaHJ1YjogKCkgPT4gU2hydWIsCiAgU2h1ZmZsZTogKCkgPT4gU2h1ZmZsZSwKICBTaWRlYmFyOiAoKSA9PiBQYW5lbExlZnQsCiAgU2lkZWJhckNsb3NlOiAoKSA9PiBQYW5lbExlZnRDbG9zZSwKICBTaWRlYmFyT3BlbjogKCkgPT4gUGFuZWxMZWZ0T3BlbiwKICBTaWdtYTogKCkgPT4gU2lnbWEsCiAgU2lnbWFTcXVhcmU6ICgpID0+IFNxdWFyZVNpZ21hLAogIFNpZ25hbDogKCkgPT4gU2lnbmFsLAogIFNpZ25hbEhpZ2g6ICgpID0+IFNpZ25hbEhpZ2gsCiAgU2lnbmFsTG93OiAoKSA9PiBTaWduYWxMb3csCiAgU2lnbmFsTWVkaXVtOiAoKSA9PiBTaWduYWxNZWRpdW0sCiAgU2lnbmFsWmVybzogKCkgPT4gU2lnbmFsWmVybywKICBTaWduYXR1cmU6ICgpID0+IFNpZ25hdHVyZSwKICBTaWducG9zdDogKCkgPT4gU2lnbnBvc3QsCiAgU2lnbnBvc3RCaWc6ICgpID0+IFNpZ25wb3N0QmlnLAogIFNpcmVuOiAoKSA9PiBTaXJlbiwKICBTa2lwQmFjazogKCkgPT4gU2tpcEJhY2ssCiAgU2tpcEZvcndhcmQ6ICgpID0+IFNraXBGb3J3YXJkLAogIFNrdWxsOiAoKSA9PiBTa3VsbCwKICBTbGFjazogKCkgPT4gU2xhY2ssCiAgU2xhc2g6ICgpID0+IFNsYXNoLAogIFNsYXNoU3F1YXJlOiAoKSA9PiBTcXVhcmVTbGFzaCwKICBTbGljZTogKCkgPT4gU2xpY2UsCiAgU2xpZGVyczogKCkgPT4gU2xpZGVyc1ZlcnRpY2FsLAogIFNsaWRlcnNIb3Jpem9udGFsOiAoKSA9PiBTbGlkZXJzSG9yaXpvbnRhbCwKICBTbGlkZXJzVmVydGljYWw6ICgpID0+IFNsaWRlcnNWZXJ0aWNhbCwKICBTbWFydHBob25lOiAoKSA9PiBTbWFydHBob25lLAogIFNtYXJ0cGhvbmVDaGFyZ2luZzogKCkgPT4gU21hcnRwaG9uZUNoYXJnaW5nLAogIFNtYXJ0cGhvbmVOZmM6ICgpID0+IFNtYXJ0cGhvbmVOZmMsCiAgU21pbGU6ICgpID0+IFNtaWxlLAogIFNtaWxlUGx1czogKCkgPT4gU21pbGVQbHVzLAogIFNuYWlsOiAoKSA9PiBTbmFpbCwKICBTbm93Zmxha2U6ICgpID0+IFNub3dmbGFrZSwKICBTb2FwRGlzcGVuc2VyRHJvcGxldDogKCkgPT4gU29hcERpc3BlbnNlckRyb3BsZXQsCiAgU29mYTogKCkgPT4gU29mYSwKICBTb2xhclBhbmVsOiAoKSA9PiBTb2xhclBhbmVsLAogIFNvcnRBc2M6ICgpID0+IEFycm93VXBOYXJyb3dXaWRlLAogIFNvcnREZXNjOiAoKSA9PiBBcnJvd0Rvd25XaWRlTmFycm93LAogIFNvdXA6ICgpID0+IFNvdXAsCiAgU3BhY2U6ICgpID0+IFNwYWNlLAogIFNwYWRlOiAoKSA9PiBTcGFkZSwKICBTcGFya2xlOiAoKSA9PiBTcGFya2xlLAogIFNwYXJrbGVzOiAoKSA9PiBTcGFya2xlcywKICBTcGVha2VyOiAoKSA9PiBTcGVha2VyLAogIFNwZWVjaDogKCkgPT4gU3BlZWNoLAogIFNwZWxsQ2hlY2s6ICgpID0+IFNwZWxsQ2hlY2ssCiAgU3BlbGxDaGVjazI6ICgpID0+IFNwZWxsQ2hlY2syLAogIFNwbGluZTogKCkgPT4gU3BsaW5lLAogIFNwbGluZVBvaW50ZXI6ICgpID0+IFNwbGluZVBvaW50ZXIsCiAgU3BsaXQ6ICgpID0+IFNwbGl0LAogIFNwbGl0U3F1YXJlSG9yaXpvbnRhbDogKCkgPT4gU3F1YXJlU3BsaXRIb3Jpem9udGFsLAogIFNwbGl0U3F1YXJlVmVydGljYWw6ICgpID0+IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgU3Bvb2w6ICgpID0+IFNwb29sLAogIFNwb3RsaWdodDogKCkgPT4gU3BvdGxpZ2h0LAogIFNwcmF5Q2FuOiAoKSA9PiBTcHJheUNhbiwKICBTcHJvdXQ6ICgpID0+IFNwcm91dCwKICBTcXVhcmU6ICgpID0+IFNxdWFyZSwKICBTcXVhcmVBY3Rpdml0eTogKCkgPT4gU3F1YXJlQWN0aXZpdHksCiAgU3F1YXJlQXJyb3dEb3duOiAoKSA9PiBTcXVhcmVBcnJvd0Rvd24sCiAgU3F1YXJlQXJyb3dEb3duTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dEb3duTGVmdCwKICBTcXVhcmVBcnJvd0Rvd25SaWdodDogKCkgPT4gU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgU3F1YXJlQXJyb3dMZWZ0OiAoKSA9PiBTcXVhcmVBcnJvd0xlZnQsCiAgU3F1YXJlQXJyb3dPdXREb3duTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duTGVmdCwKICBTcXVhcmVBcnJvd091dERvd25SaWdodDogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgU3F1YXJlQXJyb3dPdXRVcExlZnQ6ICgpID0+IFNxdWFyZUFycm93T3V0VXBMZWZ0LAogIFNxdWFyZUFycm93T3V0VXBSaWdodDogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogIFNxdWFyZUFycm93UmlnaHQ6ICgpID0+IFNxdWFyZUFycm93UmlnaHQsCiAgU3F1YXJlQXJyb3dVcDogKCkgPT4gU3F1YXJlQXJyb3dVcCwKICBTcXVhcmVBcnJvd1VwTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dVcExlZnQsCiAgU3F1YXJlQXJyb3dVcFJpZ2h0OiAoKSA9PiBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgU3F1YXJlQXN0ZXJpc2s6ICgpID0+IFNxdWFyZUFzdGVyaXNrLAogIFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOiAoKSA9PiBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycywKICBTcXVhcmVDaGFydEdhbnR0OiAoKSA9PiBTcXVhcmVDaGFydEdhbnR0LAogIFNxdWFyZUNoZWNrOiAoKSA9PiBTcXVhcmVDaGVjaywKICBTcXVhcmVDaGVja0JpZzogKCkgPT4gU3F1YXJlQ2hlY2tCaWcsCiAgU3F1YXJlQ2hldnJvbkRvd246ICgpID0+IFNxdWFyZUNoZXZyb25Eb3duLAogIFNxdWFyZUNoZXZyb25MZWZ0OiAoKSA9PiBTcXVhcmVDaGV2cm9uTGVmdCwKICBTcXVhcmVDaGV2cm9uUmlnaHQ6ICgpID0+IFNxdWFyZUNoZXZyb25SaWdodCwKICBTcXVhcmVDaGV2cm9uVXA6ICgpID0+IFNxdWFyZUNoZXZyb25VcCwKICBTcXVhcmVDb2RlOiAoKSA9PiBTcXVhcmVDb2RlLAogIFNxdWFyZURhc2hlZDogKCkgPT4gU3F1YXJlRGFzaGVkLAogIFNxdWFyZURhc2hlZEJvdHRvbTogKCkgPT4gU3F1YXJlRGFzaGVkQm90dG9tLAogIFNxdWFyZURhc2hlZEJvdHRvbUNvZGU6ICgpID0+IFNxdWFyZURhc2hlZEJvdHRvbUNvZGUsCiAgU3F1YXJlRGFzaGVkS2FuYmFuOiAoKSA9PiBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyOiAoKSA9PiBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgU3F1YXJlRGFzaGVkVG9wU29saWQ6ICgpID0+IFNxdWFyZURhc2hlZFRvcFNvbGlkLAogIFNxdWFyZURpdmlkZTogKCkgPT4gU3F1YXJlRGl2aWRlLAogIFNxdWFyZURvdDogKCkgPT4gU3F1YXJlRG90LAogIFNxdWFyZUVxdWFsOiAoKSA9PiBTcXVhcmVFcXVhbCwKICBTcXVhcmVGdW5jdGlvbjogKCkgPT4gU3F1YXJlRnVuY3Rpb24sCiAgU3F1YXJlR2FudHRDaGFydDogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBTcXVhcmVLYW5iYW46ICgpID0+IFNxdWFyZUthbmJhbiwKICBTcXVhcmVMaWJyYXJ5OiAoKSA9PiBTcXVhcmVMaWJyYXJ5LAogIFNxdWFyZU06ICgpID0+IFNxdWFyZU0sCiAgU3F1YXJlTWVudTogKCkgPT4gU3F1YXJlTWVudSwKICBTcXVhcmVNaW51czogKCkgPT4gU3F1YXJlTWludXMsCiAgU3F1YXJlTW91c2VQb2ludGVyOiAoKSA9PiBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgU3F1YXJlUGFya2luZzogKCkgPT4gU3F1YXJlUGFya2luZywKICBTcXVhcmVQYXJraW5nT2ZmOiAoKSA9PiBTcXVhcmVQYXJraW5nT2ZmLAogIFNxdWFyZVBhdXNlOiAoKSA9PiBTcXVhcmVQYXVzZSwKICBTcXVhcmVQZW46ICgpID0+IFNxdWFyZVBlbiwKICBTcXVhcmVQZXJjZW50OiAoKSA9PiBTcXVhcmVQZXJjZW50LAogIFNxdWFyZVBpOiAoKSA9PiBTcXVhcmVQaSwKICBTcXVhcmVQaWxjcm93OiAoKSA9PiBTcXVhcmVQaWxjcm93LAogIFNxdWFyZVBsYXk6ICgpID0+IFNxdWFyZVBsYXksCiAgU3F1YXJlUGx1czogKCkgPT4gU3F1YXJlUGx1cywKICBTcXVhcmVQb3dlcjogKCkgPT4gU3F1YXJlUG93ZXIsCiAgU3F1YXJlUmFkaWNhbDogKCkgPT4gU3F1YXJlUmFkaWNhbCwKICBTcXVhcmVSb3VuZENvcm5lcjogKCkgPT4gU3F1YXJlUm91bmRDb3JuZXIsCiAgU3F1YXJlU2Npc3NvcnM6ICgpID0+IFNxdWFyZVNjaXNzb3JzLAogIFNxdWFyZVNpZ21hOiAoKSA9PiBTcXVhcmVTaWdtYSwKICBTcXVhcmVTbGFzaDogKCkgPT4gU3F1YXJlU2xhc2gsCiAgU3F1YXJlU3BsaXRIb3Jpem9udGFsOiAoKSA9PiBTcXVhcmVTcGxpdEhvcml6b250YWwsCiAgU3F1YXJlU3BsaXRWZXJ0aWNhbDogKCkgPT4gU3F1YXJlU3BsaXRWZXJ0aWNhbCwKICBTcXVhcmVTcXVhcmU6ICgpID0+IFNxdWFyZVNxdWFyZSwKICBTcXVhcmVTdGFjazogKCkgPT4gU3F1YXJlU3RhY2ssCiAgU3F1YXJlU3RhcjogKCkgPT4gU3F1YXJlU3RhciwKICBTcXVhcmVTdG9wOiAoKSA9PiBTcXVhcmVTdG9wLAogIFNxdWFyZVRlcm1pbmFsOiAoKSA9PiBTcXVhcmVUZXJtaW5hbCwKICBTcXVhcmVVc2VyOiAoKSA9PiBTcXVhcmVVc2VyLAogIFNxdWFyZVVzZXJSb3VuZDogKCkgPT4gU3F1YXJlVXNlclJvdW5kLAogIFNxdWFyZVg6ICgpID0+IFNxdWFyZVgsCiAgU3F1YXJlc0V4Y2x1ZGU6ICgpID0+IFNxdWFyZXNFeGNsdWRlLAogIFNxdWFyZXNJbnRlcnNlY3Q6ICgpID0+IFNxdWFyZXNJbnRlcnNlY3QsCiAgU3F1YXJlc1N1YnRyYWN0OiAoKSA9PiBTcXVhcmVzU3VidHJhY3QsCiAgU3F1YXJlc1VuaXRlOiAoKSA9PiBTcXVhcmVzVW5pdGUsCiAgU3F1aXJjbGU6ICgpID0+IFNxdWlyY2xlLAogIFNxdWlyY2xlRGFzaGVkOiAoKSA9PiBTcXVpcmNsZURhc2hlZCwKICBTcXVpcnJlbDogKCkgPT4gU3F1aXJyZWwsCiAgU3RhbXA6ICgpID0+IFN0YW1wLAogIFN0YXI6ICgpID0+IFN0YXIsCiAgU3RhckhhbGY6ICgpID0+IFN0YXJIYWxmLAogIFN0YXJPZmY6ICgpID0+IFN0YXJPZmYsCiAgU3RhcnM6ICgpID0+IFNwYXJrbGVzLAogIFN0ZXBCYWNrOiAoKSA9PiBTdGVwQmFjaywKICBTdGVwRm9yd2FyZDogKCkgPT4gU3RlcEZvcndhcmQsCiAgU3RldGhvc2NvcGU6ICgpID0+IFN0ZXRob3Njb3BlLAogIFN0aWNrZXI6ICgpID0+IFN0aWNrZXIsCiAgU3RpY2t5Tm90ZTogKCkgPT4gU3RpY2t5Tm90ZSwKICBTdG9uZTogKCkgPT4gU3RvbmUsCiAgU3RvcENpcmNsZTogKCkgPT4gQ2lyY2xlU3RvcCwKICBTdG9yZTogKCkgPT4gU3RvcmUsCiAgU3RyZXRjaEhvcml6b250YWw6ICgpID0+IFN0cmV0Y2hIb3Jpem9udGFsLAogIFN0cmV0Y2hWZXJ0aWNhbDogKCkgPT4gU3RyZXRjaFZlcnRpY2FsLAogIFN0cmlrZXRocm91Z2g6ICgpID0+IFN0cmlrZXRocm91Z2gsCiAgU3Vic2NyaXB0OiAoKSA9PiBTdWJzY3JpcHQsCiAgU3VidGl0bGVzOiAoKSA9PiBDYXB0aW9ucywKICBTdW46ICgpID0+IFN1biwKICBTdW5EaW06ICgpID0+IFN1bkRpbSwKICBTdW5NZWRpdW06ICgpID0+IFN1bk1lZGl1bSwKICBTdW5Nb29uOiAoKSA9PiBTdW5Nb29uLAogIFN1blNub3c6ICgpID0+IFN1blNub3csCiAgU3VucmlzZTogKCkgPT4gU3VucmlzZSwKICBTdW5zZXQ6ICgpID0+IFN1bnNldCwKICBTdXBlcnNjcmlwdDogKCkgPT4gU3VwZXJzY3JpcHQsCiAgU3dhdGNoQm9vazogKCkgPT4gU3dhdGNoQm9vaywKICBTd2lzc0ZyYW5jOiAoKSA9PiBTd2lzc0ZyYW5jLAogIFN3aXRjaENhbWVyYTogKCkgPT4gU3dpdGNoQ2FtZXJhLAogIFN3b3JkOiAoKSA9PiBTd29yZCwKICBTd29yZHM6ICgpID0+IFN3b3JkcywKICBTeXJpbmdlOiAoKSA9PiBTeXJpbmdlLAogIFRhYmxlOiAoKSA9PiBUYWJsZSwKICBUYWJsZTI6ICgpID0+IFRhYmxlMiwKICBUYWJsZUNlbGxzTWVyZ2U6ICgpID0+IFRhYmxlQ2VsbHNNZXJnZSwKICBUYWJsZUNlbGxzU3BsaXQ6ICgpID0+IFRhYmxlQ2VsbHNTcGxpdCwKICBUYWJsZUNvbHVtbnNTcGxpdDogKCkgPT4gVGFibGVDb2x1bW5zU3BsaXQsCiAgVGFibGVDb25maWc6ICgpID0+IENvbHVtbnMzQ29nLAogIFRhYmxlT2ZDb250ZW50czogKCkgPT4gVGFibGVPZkNvbnRlbnRzLAogIFRhYmxlUHJvcGVydGllczogKCkgPT4gVGFibGVQcm9wZXJ0aWVzLAogIFRhYmxlUm93c1NwbGl0OiAoKSA9PiBUYWJsZVJvd3NTcGxpdCwKICBUYWJsZXQ6ICgpID0+IFRhYmxldCwKICBUYWJsZXRTbWFydHBob25lOiAoKSA9PiBUYWJsZXRTbWFydHBob25lLAogIFRhYmxldHM6ICgpID0+IFRhYmxldHMsCiAgVGFnOiAoKSA9PiBUYWcyLAogIFRhZ3M6ICgpID0+IFRhZ3MsCiAgVGFsbHkxOiAoKSA9PiBUYWxseTEsCiAgVGFsbHkyOiAoKSA9PiBUYWxseTIsCiAgVGFsbHkzOiAoKSA9PiBUYWxseTMsCiAgVGFsbHk0OiAoKSA9PiBUYWxseTQsCiAgVGFsbHk1OiAoKSA9PiBUYWxseTUsCiAgVGFuZ2VudDogKCkgPT4gVGFuZ2VudCwKICBUYXJnZXQ6ICgpID0+IFRhcmdldCwKICBUZWxlc2NvcGU6ICgpID0+IFRlbGVzY29wZSwKICBUZW50OiAoKSA9PiBUZW50LAogIFRlbnRUcmVlOiAoKSA9PiBUZW50VHJlZSwKICBUZXJtaW5hbDogKCkgPT4gVGVybWluYWwsCiAgVGVybWluYWxTcXVhcmU6ICgpID0+IFNxdWFyZVRlcm1pbmFsLAogIFRlc3RUdWJlOiAoKSA9PiBUZXN0VHViZSwKICBUZXN0VHViZTI6ICgpID0+IFRlc3RUdWJlRGlhZ29uYWwsCiAgVGVzdFR1YmVEaWFnb25hbDogKCkgPT4gVGVzdFR1YmVEaWFnb25hbCwKICBUZXN0VHViZXM6ICgpID0+IFRlc3RUdWJlcywKICBUZXh0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBUZXh0QWxpZ25DZW50ZXI6ICgpID0+IFRleHRBbGlnbkNlbnRlciwKICBUZXh0QWxpZ25FbmQ6ICgpID0+IFRleHRBbGlnbkVuZCwKICBUZXh0QWxpZ25KdXN0aWZ5OiAoKSA9PiBUZXh0QWxpZ25KdXN0aWZ5LAogIFRleHRBbGlnblN0YXJ0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBUZXh0Q3Vyc29yOiAoKSA9PiBUZXh0Q3Vyc29yLAogIFRleHRDdXJzb3JJbnB1dDogKCkgPT4gVGV4dEN1cnNvcklucHV0LAogIFRleHRJbml0aWFsOiAoKSA9PiBUZXh0SW5pdGlhbCwKICBUZXh0UXVvdGU6ICgpID0+IFRleHRRdW90ZSwKICBUZXh0U2VhcmNoOiAoKSA9PiBUZXh0U2VhcmNoLAogIFRleHRTZWxlY3Q6ICgpID0+IFRleHRTZWxlY3QsCiAgVGV4dFNlbGVjdGlvbjogKCkgPT4gVGV4dFNlbGVjdCwKICBUZXh0V3JhcDogKCkgPT4gVGV4dFdyYXAsCiAgVGhlYXRlcjogKCkgPT4gVGhlYXRlciwKICBUaGVybW9tZXRlcjogKCkgPT4gVGhlcm1vbWV0ZXIsCiAgVGhlcm1vbWV0ZXJTbm93Zmxha2U6ICgpID0+IFRoZXJtb21ldGVyU25vd2ZsYWtlLAogIFRoZXJtb21ldGVyU3VuOiAoKSA9PiBUaGVybW9tZXRlclN1biwKICBUaHVtYnNEb3duOiAoKSA9PiBUaHVtYnNEb3duLAogIFRodW1ic1VwOiAoKSA9PiBUaHVtYnNVcCwKICBUaWNrZXQ6ICgpID0+IFRpY2tldCwKICBUaWNrZXRDaGVjazogKCkgPT4gVGlja2V0Q2hlY2ssCiAgVGlja2V0TWludXM6ICgpID0+IFRpY2tldE1pbnVzLAogIFRpY2tldFBlcmNlbnQ6ICgpID0+IFRpY2tldFBlcmNlbnQsCiAgVGlja2V0UGx1czogKCkgPT4gVGlja2V0UGx1cywKICBUaWNrZXRTbGFzaDogKCkgPT4gVGlja2V0U2xhc2gsCiAgVGlja2V0WDogKCkgPT4gVGlja2V0WCwKICBUaWNrZXRzOiAoKSA9PiBUaWNrZXRzLAogIFRpY2tldHNQbGFuZTogKCkgPT4gVGlja2V0c1BsYW5lLAogIFRpbWVyOiAoKSA9PiBUaW1lcjIsCiAgVGltZXJPZmY6ICgpID0+IFRpbWVyT2ZmLAogIFRpbWVyUmVzZXQ6ICgpID0+IFRpbWVyUmVzZXQsCiAgVG9nZ2xlTGVmdDogKCkgPT4gVG9nZ2xlTGVmdCwKICBUb2dnbGVSaWdodDogKCkgPT4gVG9nZ2xlUmlnaHQsCiAgVG9pbGV0OiAoKSA9PiBUb2lsZXQsCiAgVG9vbENhc2U6ICgpID0+IFRvb2xDYXNlLAogIFRvb2xib3g6ICgpID0+IFRvb2xib3gsCiAgVG9ybmFkbzogKCkgPT4gVG9ybmFkbywKICBUb3J1czogKCkgPT4gVG9ydXMsCiAgVG91Y2hwYWQ6ICgpID0+IFRvdWNocGFkLAogIFRvdWNocGFkT2ZmOiAoKSA9PiBUb3VjaHBhZE9mZiwKICBUb3dlckNvbnRyb2w6ICgpID0+IFRvd2VyQ29udHJvbCwKICBUb3lCcmljazogKCkgPT4gVG95QnJpY2ssCiAgVHJhY3RvcjogKCkgPT4gVHJhY3RvciwKICBUcmFmZmljQ29uZTogKCkgPT4gVHJhZmZpY0NvbmUsCiAgVHJhaW46ICgpID0+IFRyYW1Gcm9udCwKICBUcmFpbkZyb250OiAoKSA9PiBUcmFpbkZyb250LAogIFRyYWluRnJvbnRUdW5uZWw6ICgpID0+IFRyYWluRnJvbnRUdW5uZWwsCiAgVHJhaW5UcmFjazogKCkgPT4gVHJhaW5UcmFjaywKICBUcmFtRnJvbnQ6ICgpID0+IFRyYW1Gcm9udCwKICBUcmFuc2dlbmRlcjogKCkgPT4gVHJhbnNnZW5kZXIsCiAgVHJhc2g6ICgpID0+IFRyYXNoLAogIFRyYXNoMjogKCkgPT4gVHJhc2gyLAogIFRyZWVEZWNpZHVvdXM6ICgpID0+IFRyZWVEZWNpZHVvdXMsCiAgVHJlZVBhbG06ICgpID0+IFRyZWVQYWxtLAogIFRyZWVQaW5lOiAoKSA9PiBUcmVlUGluZSwKICBUcmVlczogKCkgPT4gVHJlZXMsCiAgVHJlbGxvOiAoKSA9PiBUcmVsbG8sCiAgVHJlbmRpbmdEb3duOiAoKSA9PiBUcmVuZGluZ0Rvd24sCiAgVHJlbmRpbmdVcDogKCkgPT4gVHJlbmRpbmdVcCwKICBUcmVuZGluZ1VwRG93bjogKCkgPT4gVHJlbmRpbmdVcERvd24sCiAgVHJpYW5nbGU6ICgpID0+IFRyaWFuZ2xlLAogIFRyaWFuZ2xlQWxlcnQ6ICgpID0+IFRyaWFuZ2xlQWxlcnQsCiAgVHJpYW5nbGVEYXNoZWQ6ICgpID0+IFRyaWFuZ2xlRGFzaGVkLAogIFRyaWFuZ2xlUmlnaHQ6ICgpID0+IFRyaWFuZ2xlUmlnaHQsCiAgVHJvcGh5OiAoKSA9PiBUcm9waHksCiAgVHJ1Y2s6ICgpID0+IFRydWNrLAogIFRydWNrRWxlY3RyaWM6ICgpID0+IFRydWNrRWxlY3RyaWMsCiAgVHVya2lzaExpcmE6ICgpID0+IFR1cmtpc2hMaXJhLAogIFR1cm50YWJsZTogKCkgPT4gVHVybnRhYmxlLAogIFR1cnRsZTogKCkgPT4gVHVydGxlLAogIFR2OiAoKSA9PiBUdiwKICBUdjI6ICgpID0+IFR2TWluaW1hbCwKICBUdk1pbmltYWw6ICgpID0+IFR2TWluaW1hbCwKICBUdk1pbmltYWxQbGF5OiAoKSA9PiBUdk1pbmltYWxQbGF5LAogIFR3aXRjaDogKCkgPT4gVHdpdGNoLAogIFR3aXR0ZXI6ICgpID0+IFR3aXR0ZXIsCiAgVHlwZTogKCkgPT4gVHlwZSwKICBUeXBlT3V0bGluZTogKCkgPT4gVHlwZU91dGxpbmUsCiAgVW1icmVsbGE6ICgpID0+IFVtYnJlbGxhLAogIFVtYnJlbGxhT2ZmOiAoKSA9PiBVbWJyZWxsYU9mZiwKICBVbmRlcmxpbmU6ICgpID0+IFVuZGVybGluZSwKICBVbmRvOiAoKSA9PiBVbmRvLAogIFVuZG8yOiAoKSA9PiBVbmRvMiwKICBVbmRvRG90OiAoKSA9PiBVbmRvRG90LAogIFVuZm9sZEhvcml6b250YWw6ICgpID0+IFVuZm9sZEhvcml6b250YWwsCiAgVW5mb2xkVmVydGljYWw6ICgpID0+IFVuZm9sZFZlcnRpY2FsLAogIFVuZ3JvdXA6ICgpID0+IFVuZ3JvdXAsCiAgVW5pdmVyc2l0eTogKCkgPT4gVW5pdmVyc2l0eSwKICBVbmxpbms6ICgpID0+IFVubGluaywKICBVbmxpbmsyOiAoKSA9PiBVbmxpbmsyLAogIFVubG9jazogKCkgPT4gTG9ja09wZW4sCiAgVW5sb2NrS2V5aG9sZTogKCkgPT4gTG9ja0tleWhvbGVPcGVuLAogIFVucGx1ZzogKCkgPT4gVW5wbHVnLAogIFVwbG9hZDogKCkgPT4gVXBsb2FkLAogIFVwbG9hZENsb3VkOiAoKSA9PiBDbG91ZFVwbG9hZCwKICBVc2I6ICgpID0+IFVzYiwKICBVc2VyOiAoKSA9PiBVc2VyLAogIFVzZXIyOiAoKSA9PiBVc2VyUm91bmQsCiAgVXNlckNoZWNrOiAoKSA9PiBVc2VyQ2hlY2ssCiAgVXNlckNoZWNrMjogKCkgPT4gVXNlclJvdW5kQ2hlY2ssCiAgVXNlckNpcmNsZTogKCkgPT4gQ2lyY2xlVXNlciwKICBVc2VyQ2lyY2xlMjogKCkgPT4gQ2lyY2xlVXNlclJvdW5kLAogIFVzZXJDb2c6ICgpID0+IFVzZXJDb2csCiAgVXNlckNvZzI6ICgpID0+IFVzZXJSb3VuZENvZywKICBVc2VyTG9jazogKCkgPT4gVXNlckxvY2ssCiAgVXNlck1pbnVzOiAoKSA9PiBVc2VyTWludXMsCiAgVXNlck1pbnVzMjogKCkgPT4gVXNlclJvdW5kTWludXMsCiAgVXNlclBlbjogKCkgPT4gVXNlclBlbiwKICBVc2VyUGx1czogKCkgPT4gVXNlclBsdXMsCiAgVXNlclBsdXMyOiAoKSA9PiBVc2VyUm91bmRQbHVzLAogIFVzZXJSb3VuZDogKCkgPT4gVXNlclJvdW5kLAogIFVzZXJSb3VuZENoZWNrOiAoKSA9PiBVc2VyUm91bmRDaGVjaywKICBVc2VyUm91bmRDb2c6ICgpID0+IFVzZXJSb3VuZENvZywKICBVc2VyUm91bmRNaW51czogKCkgPT4gVXNlclJvdW5kTWludXMsCiAgVXNlclJvdW5kUGVuOiAoKSA9PiBVc2VyUm91bmRQZW4sCiAgVXNlclJvdW5kUGx1czogKCkgPT4gVXNlclJvdW5kUGx1cywKICBVc2VyUm91bmRTZWFyY2g6ICgpID0+IFVzZXJSb3VuZFNlYXJjaCwKICBVc2VyUm91bmRYOiAoKSA9PiBVc2VyUm91bmRYLAogIFVzZXJTZWFyY2g6ICgpID0+IFVzZXJTZWFyY2gsCiAgVXNlclNxdWFyZTogKCkgPT4gU3F1YXJlVXNlciwKICBVc2VyU3F1YXJlMjogKCkgPT4gU3F1YXJlVXNlclJvdW5kLAogIFVzZXJTdGFyOiAoKSA9PiBVc2VyU3RhciwKICBVc2VyWDogKCkgPT4gVXNlclgsCiAgVXNlclgyOiAoKSA9PiBVc2VyUm91bmRYLAogIFVzZXJzOiAoKSA9PiBVc2VycywKICBVc2VyczI6ICgpID0+IFVzZXJzUm91bmQsCiAgVXNlcnNSb3VuZDogKCkgPT4gVXNlcnNSb3VuZCwKICBVdGVuc2lsczogKCkgPT4gVXRlbnNpbHMsCiAgVXRlbnNpbHNDcm9zc2VkOiAoKSA9PiBVdGVuc2lsc0Nyb3NzZWQsCiAgVXRpbGl0eVBvbGU6ICgpID0+IFV0aWxpdHlQb2xlLAogIFZhbjogKCkgPT4gVmFuLAogIFZhcmlhYmxlOiAoKSA9PiBWYXJpYWJsZSwKICBWYXVsdDogKCkgPT4gVmF1bHQsCiAgVmVjdG9yU3F1YXJlOiAoKSA9PiBWZWN0b3JTcXVhcmUsCiAgVmVnYW46ICgpID0+IFZlZ2FuLAogIFZlbmV0aWFuTWFzazogKCkgPT4gVmVuZXRpYW5NYXNrLAogIFZlbnVzOiAoKSA9PiBWZW51cywKICBWZW51c0FuZE1hcnM6ICgpID0+IFZlbnVzQW5kTWFycywKICBWZXJpZmllZDogKCkgPT4gQmFkZ2VDaGVjaywKICBWaWJyYXRlOiAoKSA9PiBWaWJyYXRlLAogIFZpYnJhdGVPZmY6ICgpID0+IFZpYnJhdGVPZmYsCiAgVmlkZW86ICgpID0+IFZpZGVvLAogIFZpZGVvT2ZmOiAoKSA9PiBWaWRlb09mZiwKICBWaWRlb3RhcGU6ICgpID0+IFZpZGVvdGFwZSwKICBWaWV3OiAoKSA9PiBWaWV3LAogIFZvaWNlbWFpbDogKCkgPT4gVm9pY2VtYWlsLAogIFZvbGxleWJhbGw6ICgpID0+IFZvbGxleWJhbGwsCiAgVm9sdW1lOiAoKSA9PiBWb2x1bWUsCiAgVm9sdW1lMTogKCkgPT4gVm9sdW1lMSwKICBWb2x1bWUyOiAoKSA9PiBWb2x1bWUyLAogIFZvbHVtZU9mZjogKCkgPT4gVm9sdW1lT2ZmLAogIFZvbHVtZVg6ICgpID0+IFZvbHVtZVgsCiAgVm90ZTogKCkgPT4gVm90ZSwKICBXYWxsZXQ6ICgpID0+IFdhbGxldCwKICBXYWxsZXQyOiAoKSA9PiBXYWxsZXRNaW5pbWFsLAogIFdhbGxldENhcmRzOiAoKSA9PiBXYWxsZXRDYXJkcywKICBXYWxsZXRNaW5pbWFsOiAoKSA9PiBXYWxsZXRNaW5pbWFsLAogIFdhbGxwYXBlcjogKCkgPT4gV2FsbHBhcGVyLAogIFdhbmQ6ICgpID0+IFdhbmQsCiAgV2FuZDI6ICgpID0+IFdhbmRTcGFya2xlcywKICBXYW5kU3BhcmtsZXM6ICgpID0+IFdhbmRTcGFya2xlcywKICBXYXJlaG91c2U6ICgpID0+IFdhcmVob3VzZSwKICBXYXNoaW5nTWFjaGluZTogKCkgPT4gV2FzaGluZ01hY2hpbmUsCiAgV2F0Y2g6ICgpID0+IFdhdGNoLAogIFdhdmVzOiAoKSA9PiBXYXZlcywKICBXYXZlc0Fycm93RG93bjogKCkgPT4gV2F2ZXNBcnJvd0Rvd24sCiAgV2F2ZXNBcnJvd1VwOiAoKSA9PiBXYXZlc0Fycm93VXAsCiAgV2F2ZXNMYWRkZXI6ICgpID0+IFdhdmVzTGFkZGVyLAogIFdheXBvaW50czogKCkgPT4gV2F5cG9pbnRzLAogIFdlYmNhbTogKCkgPT4gV2ViY2FtLAogIFdlYmhvb2s6ICgpID0+IFdlYmhvb2ssCiAgV2ViaG9va09mZjogKCkgPT4gV2ViaG9va09mZiwKICBXZWlnaHQ6ICgpID0+IFdlaWdodCwKICBXZWlnaHRUaWxkZTogKCkgPT4gV2VpZ2h0VGlsZGUsCiAgV2hlYXQ6ICgpID0+IFdoZWF0LAogIFdoZWF0T2ZmOiAoKSA9PiBXaGVhdE9mZiwKICBXaG9sZVdvcmQ6ICgpID0+IFdob2xlV29yZCwKICBXaWZpOiAoKSA9PiBXaWZpLAogIFdpZmlDb2c6ICgpID0+IFdpZmlDb2csCiAgV2lmaUhpZ2g6ICgpID0+IFdpZmlIaWdoLAogIFdpZmlMb3c6ICgpID0+IFdpZmlMb3csCiAgV2lmaU9mZjogKCkgPT4gV2lmaU9mZiwKICBXaWZpUGVuOiAoKSA9PiBXaWZpUGVuLAogIFdpZmlTeW5jOiAoKSA9PiBXaWZpU3luYywKICBXaWZpWmVybzogKCkgPT4gV2lmaVplcm8sCiAgV2luZDogKCkgPT4gV2luZCwKICBXaW5kQXJyb3dEb3duOiAoKSA9PiBXaW5kQXJyb3dEb3duLAogIFdpbmU6ICgpID0+IFdpbmUsCiAgV2luZU9mZjogKCkgPT4gV2luZU9mZiwKICBXb3JrZmxvdzogKCkgPT4gV29ya2Zsb3csCiAgV29ybTogKCkgPT4gV29ybSwKICBXcmFwVGV4dDogKCkgPT4gVGV4dFdyYXAsCiAgV3JlbmNoOiAoKSA9PiBXcmVuY2gsCiAgWDogKCkgPT4gWCwKICBYQ2lyY2xlOiAoKSA9PiBDaXJjbGVYLAogIFhPY3RhZ29uOiAoKSA9PiBPY3RhZ29uWCwKICBYU3F1YXJlOiAoKSA9PiBTcXVhcmVYLAogIFlvdXR1YmU6ICgpID0+IFlvdXR1YmUsCiAgWmFwOiAoKSA9PiBaYXAsCiAgWmFwT2ZmOiAoKSA9PiBaYXBPZmYsCiAgWm9vbUluOiAoKSA9PiBab29tSW4sCiAgWm9vbU91dDogKCkgPT4gWm9vbU91dCwKICBjcmVhdGVFbGVtZW50OiAoKSA9PiBjcmVhdGVFbGVtZW50MiwKICBjcmVhdGVJY29uczogKCkgPT4gY3JlYXRlSWNvbnMsCiAgaWNvbnM6ICgpID0+IGljb25zQW5kQWxpYXNlc19leHBvcnRzCn0pOwp2YXIgY3JlYXRlSWNvbnM7CnZhciBpbml0X2x1Y2lkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vbHVjaWRlLmpzIigpIHsKICAgIGluaXRfcmVwbGFjZUVsZW1lbnQoKTsKICAgIGluaXRfaWNvbnNBbmRBbGlhc2VzKCk7CiAgICBpbml0X2NyZWF0ZUVsZW1lbnQoKTsKICAgIGluaXRfYV9hcnJvd19kb3duKCk7CiAgICBpbml0X2FfYXJyb3dfdXAoKTsKICAgIGluaXRfYV9sYXJnZV9zbWFsbCgpOwogICAgaW5pdF9hY2Nlc3NpYmlsaXR5KCk7CiAgICBpbml0X2FjdGl2aXR5KCk7CiAgICBpbml0X2Fpcl92ZW50KCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrKCk7CiAgICBpbml0X2FpcnBsYXkoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfbWludXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfb2ZmKCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX3BsdXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2soKTsKICAgIGluaXRfYWxhcm1fc21va2UoKTsKICAgIGluaXRfYWxidW0oKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX3ZlcnRpY2FsKCk7CiAgICBpbml0X2FsaWduX2VuZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2FsaWduX2VuZF92ZXJ0aWNhbCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9lbmQoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2NlbnRlcigpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0KCk7CiAgICBpbml0X2FsaWduX3ZlcnRpY2FsX3NwYWNlX2Fyb3VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FtYnVsYW5jZSgpOwogICAgaW5pdF9hbXBlcnNhbmQoKTsKICAgIGluaXRfYW1wZXJzYW5kcygpOwogICAgaW5pdF9hbXBob3JhKCk7CiAgICBpbml0X2FuY2hvcigpOwogICAgaW5pdF9hbmdyeSgpOwogICAgaW5pdF9hbm5veWVkKCk7CiAgICBpbml0X2FudGVubmEoKTsKICAgIGluaXRfYW52aWwoKTsKICAgIGluaXRfYXBlcnR1cmUoKTsKICAgIGluaXRfYXBwX3dpbmRvd19tYWMoKTsKICAgIGluaXRfYXBwX3dpbmRvdygpOwogICAgaW5pdF9hcHBsZSgpOwogICAgaW5pdF9hcmNoaXZlX3Jlc3RvcmUoKTsKICAgIGluaXRfYXJjaGl2ZV94KCk7CiAgICBpbml0X2FyY2hpdmUoKTsKICAgIGluaXRfYXJtY2hhaXIoKTsKICAgIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfZG93bigpOwogICAgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19sZWZ0KCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXBfZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXAoKTsKICAgIGluaXRfYXJyb3dfZG93bl8wXzEoKTsKICAgIGluaXRfYXJyb3dfZG93bl8xXzAoKTsKICAgIGluaXRfYXJyb3dfZG93bl9hX3ooKTsKICAgIGluaXRfYXJyb3dfZG93bl9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfZG93bl90b19kb3QoKTsKICAgIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSgpOwogICAgaW5pdF9hcnJvd19kb3duX3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl91cCgpOwogICAgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93KCk7CiAgICBpbml0X2Fycm93X2Rvd25fel9hKCk7CiAgICBpbml0X2Fycm93X2Rvd24oKTsKICAgIGluaXRfYXJyb3dfbGVmdF9yaWdodCgpOwogICAgaW5pdF9hcnJvd19sZWZ0X2Zyb21fbGluZSgpOwogICAgaW5pdF9hcnJvd19sZWZ0X3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF90b19saW5lKCk7CiAgICBpbml0X2Fycm93X3JpZ2h0KCk7CiAgICBpbml0X2Fycm93X3VwXzBfMSgpOwogICAgaW5pdF9hcnJvd191cF8xXzAoKTsKICAgIGluaXRfYXJyb3dfdXBfYV96KCk7CiAgICBpbml0X2Fycm93X3VwX2Rvd24oKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QoKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9saW5lKCk7CiAgICBpbml0X2Fycm93X3VwX2xlZnQoKTsKICAgIGluaXRfYXJyb3dfdXBfbmFycm93X3dpZGUoKTsKICAgIGluaXRfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfdXBfdG9fbGluZSgpOwogICAgaW5pdF9hcnJvd191cF93aWRlX25hcnJvdygpOwogICAgaW5pdF9hcnJvd191cF96X2EoKTsKICAgIGluaXRfYXJyb3dfdXAoKTsKICAgIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSgpOwogICAgaW5pdF9hc3RlcmlzaygpOwogICAgaW5pdF9hdF9zaWduKCk7CiAgICBpbml0X2F0b20oKTsKICAgIGluaXRfYXVkaW9fbGluZXMoKTsKICAgIGluaXRfYXdhcmQoKTsKICAgIGluaXRfYXVkaW9fd2F2ZWZvcm0oKTsKICAgIGluaXRfYXhlKCk7CiAgICBpbml0X2F4aXNfM2QoKTsKICAgIGluaXRfYmFieSgpOwogICAgaW5pdF9iYWNrcGFjaygpOwogICAgaW5pdF9iYWRnZV9hbGVydCgpOwogICAgaW5pdF9iYWRnZV9jZW50KCk7CiAgICBpbml0X2JhZGdlX2NoZWNrKCk7CiAgICBpbml0X2JhZGdlX2RvbGxhcl9zaWduKCk7CiAgICBpbml0X2JhZGdlX2V1cm8oKTsKICAgIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlKCk7CiAgICBpbml0X2JhZGdlX2luZm8oKTsKICAgIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2JhZGdlX21pbnVzKCk7CiAgICBpbml0X2JhZGdlX3BlcmNlbnQoKTsKICAgIGluaXRfYmFkZ2VfcGx1cygpOwogICAgaW5pdF9iYWRnZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9iYWRnZV9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X2JhZGdlX3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfYmFkZ2Vfc3dpc3NfZnJhbmMoKTsKICAgIGluaXRfYmFkZ2VfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X2JhZGdlX3goKTsKICAgIGluaXRfYmFkZ2UoKTsKICAgIGluaXRfYmFnZ2FnZV9jbGFpbSgpOwogICAgaW5pdF9iYWxsb29uKCk7CiAgICBpbml0X2JhbigpOwogICAgaW5pdF9iYW5hbmEoKTsKICAgIGluaXRfYmFuZGFnZSgpOwogICAgaW5pdF9iYW5rbm90ZV9hcnJvd19kb3duKCk7CiAgICBpbml0X2Jhbmtub3RlX2Fycm93X3VwKCk7CiAgICBpbml0X2Jhbmtub3RlX3goKTsKICAgIGluaXRfYmFua25vdGUoKTsKICAgIGluaXRfYmFyY29kZSgpOwogICAgaW5pdF9iYXJyZWwoKTsKICAgIGluaXRfYmFzZWxpbmUoKTsKICAgIGluaXRfYmF0aCgpOwogICAgaW5pdF9iYXR0ZXJ5X2NoYXJnaW5nKCk7CiAgICBpbml0X2JhdHRlcnlfZnVsbCgpOwogICAgaW5pdF9iYXR0ZXJ5X2xvdygpOwogICAgaW5pdF9iYXR0ZXJ5X3BsdXMoKTsKICAgIGluaXRfYmF0dGVyeV9tZWRpdW0oKTsKICAgIGluaXRfYmF0dGVyeV93YXJuaW5nKCk7CiAgICBpbml0X2JhdHRlcnkoKTsKICAgIGluaXRfYmVha2VyKCk7CiAgICBpbml0X2JlYW5fb2ZmKCk7CiAgICBpbml0X2JlYW4oKTsKICAgIGluaXRfYmVkX2RvdWJsZSgpOwogICAgaW5pdF9iZWRfc2luZ2xlKCk7CiAgICBpbml0X2JlZCgpOwogICAgaW5pdF9iZWVmKCk7CiAgICBpbml0X2JlZXJfb2ZmKCk7CiAgICBpbml0X2JlZXIoKTsKICAgIGluaXRfYmVsbF9kb3QoKTsKICAgIGluaXRfYmVsbF9lbGVjdHJpYygpOwogICAgaW5pdF9iZWxsX21pbnVzKCk7CiAgICBpbml0X2JlbGxfb2ZmKCk7CiAgICBpbml0X2JlbGxfcGx1cygpOwogICAgaW5pdF9iZWxsX3JpbmcoKTsKICAgIGluaXRfYmVsbCgpOwogICAgaW5pdF9iZXR3ZWVuX2hvcml6b250YWxfZW5kKCk7CiAgICBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX2VuZCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX3N0YXJ0KCk7CiAgICBpbml0X2JpY2Vwc19mbGV4ZWQoKTsKICAgIGluaXRfYmlrZSgpOwogICAgaW5pdF9iaW5hcnkoKTsKICAgIGluaXRfYmlvaGF6YXJkKCk7CiAgICBpbml0X2Jpbm9jdWxhcnMoKTsKICAgIGluaXRfYmlyZGhvdXNlKCk7CiAgICBpbml0X2JpcmQoKTsKICAgIGluaXRfYml0Y29pbigpOwogICAgaW5pdF9ibGVuZCgpOwogICAgaW5pdF9ibGluZHMoKTsKICAgIGluaXRfYmxvY2tzKCk7CiAgICBpbml0X2JsdWV0b290aF9jb25uZWN0ZWQoKTsKICAgIGluaXRfYmx1ZXRvb3RoX29mZigpOwogICAgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nKCk7CiAgICBpbml0X2JsdWV0b290aCgpOwogICAgaW5pdF9ib2xkKCk7CiAgICBpbml0X2JvbHQoKTsKICAgIGluaXRfYm9tYigpOwogICAgaW5pdF9ib25lKCk7CiAgICBpbml0X2Jvb2tfYSgpOwogICAgaW5pdF9ib29rX2FsZXJ0KCk7CiAgICBpbml0X2Jvb2tfYXVkaW8oKTsKICAgIGluaXRfYm9va19jaGVjaygpOwogICAgaW5pdF9ib29rX2NvcHkoKTsKICAgIGluaXRfYm9va19kYXNoZWQoKTsKICAgIGluaXRfYm9va19kb3duKCk7CiAgICBpbml0X2Jvb2tfaGVhZHBob25lcygpOwogICAgaW5pdF9ib29rX2hlYXJ0KCk7CiAgICBpbml0X2Jvb2tfa2V5KCk7CiAgICBpbml0X2Jvb2tfaW1hZ2UoKTsKICAgIGluaXRfYm9va19sb2NrKCk7CiAgICBpbml0X2Jvb2tfbWFya2VkKCk7CiAgICBpbml0X2Jvb2tfbWludXMoKTsKICAgIGluaXRfYm9va19vcGVuX2NoZWNrKCk7CiAgICBpbml0X2Jvb2tfb3Blbl90ZXh0KCk7CiAgICBpbml0X2Jvb2tfb3BlbigpOwogICAgaW5pdF9ib29rX3BsdXMoKTsKICAgIGluaXRfYm9va19zZWFyY2goKTsKICAgIGluaXRfYm9va190ZXh0KCk7CiAgICBpbml0X2Jvb2tfdXAoKTsKICAgIGluaXRfYm9va190eXBlKCk7CiAgICBpbml0X2Jvb2tfdXBfMigpOwogICAgaW5pdF9ib29rX3VzZXIoKTsKICAgIGluaXRfYm9va194KCk7CiAgICBpbml0X2Jvb2soKTsKICAgIGluaXRfYm9va21hcmtfY2hlY2soKTsKICAgIGluaXRfYm9va21hcmtfbWludXMoKTsKICAgIGluaXRfYm9va21hcmtfcGx1cygpOwogICAgaW5pdF9ib29rbWFya194KCk7CiAgICBpbml0X2Jvb2ttYXJrKCk7CiAgICBpbml0X2Jvb21fYm94KCk7CiAgICBpbml0X2JvdF9tZXNzYWdlX3NxdWFyZSgpOwogICAgaW5pdF9ib3Rfb2ZmKCk7CiAgICBpbml0X2JvdCgpOwogICAgaW5pdF9ib3R0bGVfd2luZSgpOwogICAgaW5pdF9ib3dfYXJyb3coKTsKICAgIGluaXRfYm94KCk7CiAgICBpbml0X2JveGVzKCk7CiAgICBpbml0X2JyYWNlcygpOwogICAgaW5pdF9icmFja2V0cygpOwogICAgaW5pdF9icmFpbl9jaXJjdWl0KCk7CiAgICBpbml0X2JyYWluX2NvZygpOwogICAgaW5pdF9icmFpbigpOwogICAgaW5pdF9icmlja193YWxsX2ZpcmUoKTsKICAgIGluaXRfYnJpY2tfd2FsbF9zaGllbGQoKTsKICAgIGluaXRfYnJpY2tfd2FsbCgpOwogICAgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MoKTsKICAgIGluaXRfYnJpZWZjYXNlX2NvbnZleW9yX2JlbHQoKTsKICAgIGluaXRfYnJpZWZjYXNlX21lZGljYWwoKTsKICAgIGluaXRfYnJpZWZjYXNlKCk7CiAgICBpbml0X2JyaW5nX3RvX2Zyb250KCk7CiAgICBpbml0X2JydXNoX2NsZWFuaW5nKCk7CiAgICBpbml0X2JydXNoKCk7CiAgICBpbml0X2J1YmJsZXMoKTsKICAgIGluaXRfYnVnX29mZigpOwogICAgaW5pdF9idWdfcGxheSgpOwogICAgaW5pdF9idWcoKTsKICAgIGluaXRfYnVpbGRpbmdfMigpOwogICAgaW5pdF9idWlsZGluZygpOwogICAgaW5pdF9idXNfZnJvbnQoKTsKICAgIGluaXRfYnVzKCk7CiAgICBpbml0X2NhYmxlX2NhcigpOwogICAgaW5pdF9jYWJsZSgpOwogICAgaW5pdF9jYWtlX3NsaWNlKCk7CiAgICBpbml0X2Nha2UoKTsKICAgIGluaXRfY2FsY3VsYXRvcigpOwogICAgaW5pdF9jYWxlbmRhcl8xKCk7CiAgICBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2FsZW5kYXJfYXJyb3dfdXAoKTsKICAgIGluaXRfY2FsZW5kYXJfY2hlY2tfMigpOwogICAgaW5pdF9jYWxlbmRhcl9jaGVjaygpOwogICAgaW5pdF9jYWxlbmRhcl9jb2coKTsKICAgIGluaXRfY2FsZW5kYXJfY2xvY2soKTsKICAgIGluaXRfY2FsZW5kYXJfZGF5cygpOwogICAgaW5pdF9jYWxlbmRhcl9mb2xkKCk7CiAgICBpbml0X2NhbGVuZGFyX2hlYXJ0KCk7CiAgICBpbml0X2NhbGVuZGFyX21pbnVzXzIoKTsKICAgIGluaXRfY2FsZW5kYXJfbWludXMoKTsKICAgIGluaXRfY2FsZW5kYXJfb2ZmKCk7CiAgICBpbml0X2NhbGVuZGFyX3BsdXNfMigpOwogICAgaW5pdF9jYWxlbmRhcl9wbHVzKCk7CiAgICBpbml0X2NhbGVuZGFyX3JhbmdlKCk7CiAgICBpbml0X2NhbGVuZGFyX3NlYXJjaCgpOwogICAgaW5pdF9jYWxlbmRhcl9zeW5jKCk7CiAgICBpbml0X2NhbGVuZGFyX3hfMigpOwogICAgaW5pdF9jYWxlbmRhcl94KCk7CiAgICBpbml0X2NhbGVuZGFyKCk7CiAgICBpbml0X2NhbGVuZGFycygpOwogICAgaW5pdF9jYW1lcmFfb2ZmKCk7CiAgICBpbml0X2NhbWVyYSgpOwogICAgaW5pdF9jYW5keV9jYW5lKCk7CiAgICBpbml0X2NhbmR5X29mZigpOwogICAgaW5pdF9jYW5keSgpOwogICAgaW5pdF9jYW5uYWJpc19vZmYoKTsKICAgIGluaXRfY2FubmFiaXMoKTsKICAgIGluaXRfY2FwdGlvbnNfb2ZmKCk7CiAgICBpbml0X2NhcHRpb25zKCk7CiAgICBpbml0X2Nhcl9mcm9udCgpOwogICAgaW5pdF9jYXJfdGF4aV9mcm9udCgpOwogICAgaW5pdF9jYXIoKTsKICAgIGluaXRfY2FyYXZhbigpOwogICAgaW5pdF9jYXJkX3NpbSgpOwogICAgaW5pdF9jYXJyb3QoKTsKICAgIGluaXRfY2FzZV9sb3dlcigpOwogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZSgpOwogICAgaW5pdF9jYXNlX3VwcGVyKCk7CiAgICBpbml0X2Nhc3NldHRlX3RhcGUoKTsKICAgIGluaXRfY2FzdCgpOwogICAgaW5pdF9jYXN0bGUoKTsKICAgIGluaXRfY2F0KCk7CiAgICBpbml0X2NjdHYoKTsKICAgIGluaXRfY2hhcnRfYXJlYSgpOwogICAgaW5pdF9jaGFydF9iYXJfYmlnKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2JhcigpOwogICAgaW5pdF9jaGFydF9jYW5kbGVzdGljaygpOwogICAgaW5pdF9jaGFydF9jb2x1bW5fYmlnKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbigpOwogICAgaW5pdF9jaGFydF9nYW50dCgpOwogICAgaW5pdF9jaGFydF9saW5lKCk7CiAgICBpbml0X2NoYXJ0X25ldHdvcmsoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19jb2x1bW5fZGVjcmVhc2luZygpOwogICAgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29sdW1uKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19nYW50dCgpOwogICAgaW5pdF9jaGFydF9waWUoKTsKICAgIGluaXRfY2hhcnRfc2NhdHRlcigpOwogICAgaW5pdF9jaGFydF9zcGxpbmUoKTsKICAgIGluaXRfY2hlY2tfY2hlY2soKTsKICAgIGluaXRfY2hlY2tfbGluZSgpOwogICAgaW5pdF9jaGVjaygpOwogICAgaW5pdF9jaGVmX2hhdCgpOwogICAgaW5pdF9jaGVycnkoKTsKICAgIGluaXRfY2hlc3NfYmlzaG9wKCk7CiAgICBpbml0X2NoZXNzX2tpbmcoKTsKICAgIGluaXRfY2hlc3Nfa25pZ2h0KCk7CiAgICBpbml0X2NoZXNzX3Bhd24oKTsKICAgIGluaXRfY2hlc3NfcXVlZW4oKTsKICAgIGluaXRfY2hldnJvbl9kb3duKCk7CiAgICBpbml0X2NoZXZyb25fZmlyc3QoKTsKICAgIGluaXRfY2hlc3Nfcm9vaygpOwogICAgaW5pdF9jaGV2cm9uX2xhc3QoKTsKICAgIGluaXRfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NoZXZyb25fcmlnaHQoKTsKICAgIGluaXRfY2hldnJvbl91cCgpOwogICAgaW5pdF9jaGV2cm9uc19kb3duX3VwKCk7CiAgICBpbml0X2NoZXZyb25zX2Rvd24oKTsKICAgIGluaXRfY2hldnJvbnNfbGVmdF9yaWdodF9lbGxpcHNpcygpOwogICAgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0KCk7CiAgICBpbml0X2NoZXZyb25zX2xlZnQoKTsKICAgIGluaXRfY2hldnJvbnNfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9jaGV2cm9uc19yaWdodCgpOwogICAgaW5pdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2NoZXZyb25zX3VwKCk7CiAgICBpbml0X2NodXJjaCgpOwogICAgaW5pdF9jaWdhcmV0dGVfb2ZmKCk7CiAgICBpbml0X2Nocm9taXVtKCk7CiAgICBpbml0X2NpZ2FyZXR0ZSgpOwogICAgaW5pdF9jaXJjbGVfYWxlcnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2NoZWNrKCk7CiAgICBpbml0X2NpcmNsZV9jaGVja19iaWcoKTsKICAgIGluaXRfY2lyY2xlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9jaXJjbGVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X2NpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RpdmlkZSgpOwogICAgaW5pdF9jaXJjbGVfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RvdCgpOwogICAgaW5pdF9jaXJjbGVfZWxsaXBzaXMoKTsKICAgIGluaXRfY2lyY2xlX2VxdWFsKCk7CiAgICBpbml0X2NpcmNsZV9mYWRpbmdfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2ZhZGluZ19wbHVzKCk7CiAgICBpbml0X2NpcmNsZV9nYXVnZSgpOwogICAgaW5pdF9jaXJjbGVfbWludXMoKTsKICAgIGluaXRfY2lyY2xlX29mZigpOwogICAgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYoKTsKICAgIGluaXRfY2lyY2xlX3BhcmtpbmcoKTsKICAgIGluaXRfY2lyY2xlX3BhdXNlKCk7CiAgICBpbml0X2NpcmNsZV9wZXJjZW50KCk7CiAgICBpbml0X2NpcmNsZV9waWxlKCk7CiAgICBpbml0X2NpcmNsZV9wbGF5KCk7CiAgICBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9jaXJjbGVfcGx1cygpOwogICAgaW5pdF9jaXJjbGVfcG93ZXIoKTsKICAgIGluaXRfY2lyY2xlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoXzIoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoKCk7CiAgICBpbml0X2NpcmNsZV9zbWFsbCgpOwogICAgaW5pdF9jaXJjbGVfc3RhcigpOwogICAgaW5pdF9jaXJjbGVfc3RvcCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcl9yb3VuZCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcigpOwogICAgaW5pdF9jaXJjbGVfeCgpOwogICAgaW5pdF9jaXJjbGUoKTsKICAgIGluaXRfY2lyY3VpdF9ib2FyZCgpOwogICAgaW5pdF9jaXRydXMoKTsKICAgIGluaXRfY2xhcHBlcmJvYXJkKCk7CiAgICBpbml0X2NsaXBib2FyZF9jaGVjaygpOwogICAgaW5pdF9jbGlwYm9hcmRfY2xvY2soKTsKICAgIGluaXRfY2xpcGJvYXJkX2NvcHkoKTsKICAgIGluaXRfY2xpcGJvYXJkX2xpc3QoKTsKICAgIGluaXRfY2xpcGJvYXJkX21pbnVzKCk7CiAgICBpbml0X2NsaXBib2FyZF9wYXN0ZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfcGVuX2xpbmUoKTsKICAgIGluaXRfY2xpcGJvYXJkX3BlbigpOwogICAgaW5pdF9jbGlwYm9hcmRfcGx1cygpOwogICAgaW5pdF9jbGlwYm9hcmRfdHlwZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfeCgpOwogICAgaW5pdF9jbGlwYm9hcmQoKTsKICAgIGluaXRfY2xvY2tfMSgpOwogICAgaW5pdF9jbG9ja18xMCgpOwogICAgaW5pdF9jbG9ja18xMSgpOwogICAgaW5pdF9jbG9ja18xMigpOwogICAgaW5pdF9jbG9ja18yKCk7CiAgICBpbml0X2Nsb2NrXzMoKTsKICAgIGluaXRfY2xvY2tfNCgpOwogICAgaW5pdF9jbG9ja181KCk7CiAgICBpbml0X2Nsb2NrXzYoKTsKICAgIGluaXRfY2xvY2tfNygpOwogICAgaW5pdF9jbG9ja184KCk7CiAgICBpbml0X2Nsb2NrXzkoKTsKICAgIGluaXRfY2xvY2tfYWxlcnQoKTsKICAgIGluaXRfY2xvY2tfYXJyb3dfZG93bigpOwogICAgaW5pdF9jbG9ja19hcnJvd191cCgpOwogICAgaW5pdF9jbG9ja19jaGVjaygpOwogICAgaW5pdF9jbG9ja19mYWRpbmcoKTsKICAgIGluaXRfY2xvY2tfcGx1cygpOwogICAgaW5pdF9jbG9jaygpOwogICAgaW5pdF9jbG9zZWRfY2FwdGlvbigpOwogICAgaW5pdF9jbG91ZF9hbGVydCgpOwogICAgaW5pdF9jbG91ZF9iYWNrdXAoKTsKICAgIGluaXRfY2xvdWRfY2hlY2soKTsKICAgIGluaXRfY2xvdWRfY29nKCk7CiAgICBpbml0X2Nsb3VkX2Rvd25sb2FkKCk7CiAgICBpbml0X2Nsb3VkX2RyaXp6bGUoKTsKICAgIGluaXRfY2xvdWRfZm9nKCk7CiAgICBpbml0X2Nsb3VkX2hhaWwoKTsKICAgIGluaXRfY2xvdWRfbGlnaHRuaW5nKCk7CiAgICBpbml0X2Nsb3VkX21vb25fcmFpbigpOwogICAgaW5pdF9jbG91ZF9tb29uKCk7CiAgICBpbml0X2Nsb3VkX3JhaW5fd2luZCgpOwogICAgaW5pdF9jbG91ZF9vZmYoKTsKICAgIGluaXRfY2xvdWRfcmFpbigpOwogICAgaW5pdF9jbG91ZF9zbm93KCk7CiAgICBpbml0X2Nsb3VkX3N1bl9yYWluKCk7CiAgICBpbml0X2Nsb3VkX3N1bigpOwogICAgaW5pdF9jbG91ZF9zeW5jKCk7CiAgICBpbml0X2Nsb3VkX3VwbG9hZCgpOwogICAgaW5pdF9jbG91ZCgpOwogICAgaW5pdF9jbG91ZHkoKTsKICAgIGluaXRfY2xvdmVyKCk7CiAgICBpbml0X2NsdWIoKTsKICAgIGluaXRfY29kZV94bWwoKTsKICAgIGluaXRfY29kZTQoKTsKICAgIGluaXRfY29kZXBlbigpOwogICAgaW5pdF9jb2Rlc2FuZGJveCgpOwogICAgaW5pdF9jb2ZmZWUoKTsKICAgIGluaXRfY29pbnMoKTsKICAgIGluaXRfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMigpOwogICAgaW5pdF9jb2x1bW5zXzNfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMygpOwogICAgaW5pdF9jb2x1bW5zXzQoKTsKICAgIGluaXRfY29tYmluZSgpOwogICAgaW5pdF9jb21tYW5kKCk7CiAgICBpbml0X2NvbXBhc3MoKTsKICAgIGluaXRfY29tcG9uZW50KCk7CiAgICBpbml0X2NvbXB1dGVyKCk7CiAgICBpbml0X2NvbmNpZXJnZV9iZWxsKCk7CiAgICBpbml0X2NvbmUoKTsKICAgIGluaXRfY29uc3RydWN0aW9uKCk7CiAgICBpbml0X2NvbnRhY3Rfcm91bmQoKTsKICAgIGluaXRfY29udGFjdDIoKTsKICAgIGluaXRfY29udGFpbmVyMygpOwogICAgaW5pdF9jb250cmFzdCgpOwogICAgaW5pdF9jb29raWUoKTsKICAgIGluaXRfY29va2luZ19wb3QoKTsKICAgIGluaXRfY29weV9jaGVjaygpOwogICAgaW5pdF9jb3B5X21pbnVzKCk7CiAgICBpbml0X2NvcHlfcGx1cygpOwogICAgaW5pdF9jb3B5X3NsYXNoKCk7CiAgICBpbml0X2NvcHkoKTsKICAgIGluaXRfY29weV94KCk7CiAgICBpbml0X2NvcHlsZWZ0KCk7CiAgICBpbml0X2NvcHlyaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9yaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl9sZWZ0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX2xlZnRfdXAoKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X3VwKCk7CiAgICBpbml0X2Nvcm5lcl91cF9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl91cF9yaWdodCgpOwogICAgaW5pdF9jcHUoKTsKICAgIGluaXRfY3JlYXRpdmVfY29tbW9ucygpOwogICAgaW5pdF9jcmVkaXRfY2FyZCgpOwogICAgaW5pdF9jcm9pc3NhbnQoKTsKICAgIGluaXRfY3JvcCgpOwogICAgaW5pdF9jcm9zcygpOwogICAgaW5pdF9jcm9zc2hhaXIoKTsKICAgIGluaXRfY3Jvd24oKTsKICAgIGluaXRfY3Vib2lkKCk7CiAgICBpbml0X2N1cF9zb2RhKCk7CiAgICBpbml0X2N1cnJlbmN5MigpOwogICAgaW5pdF9jeWxpbmRlcigpOwogICAgaW5pdF9kYW0oKTsKICAgIGluaXRfZGF0YWJhc2VfYmFja3VwKCk7CiAgICBpbml0X2RhdGFiYXNlX3phcCgpOwogICAgaW5pdF9kYXRhYmFzZTIoKTsKICAgIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCgpOwogICAgaW5pdF9kZWxldGUyKCk7CiAgICBpbml0X2Rlc3NlcnQoKTsKICAgIGluaXRfZGlhbWV0ZXIoKTsKICAgIGluaXRfZGlhbW9uZF9taW51cygpOwogICAgaW5pdF9kaWFtb25kX3BlcmNlbnQoKTsKICAgIGluaXRfZGlhbW9uZF9wbHVzKCk7CiAgICBpbml0X2RpY2VfMSgpOwogICAgaW5pdF9kaWFtb25kKCk7CiAgICBpbml0X2RpY2VfMigpOwogICAgaW5pdF9kaWNlXzMoKTsKICAgIGluaXRfZGljZV81KCk7CiAgICBpbml0X2RpY2VfNigpOwogICAgaW5pdF9kaWNlXzQoKTsKICAgIGluaXRfZGljZXMoKTsKICAgIGluaXRfZGlmZigpOwogICAgaW5pdF9kaXNjXzIoKTsKICAgIGluaXRfZGlzY18zKCk7CiAgICBpbml0X2Rpc2NfYWxidW0oKTsKICAgIGluaXRfZGlzYygpOwogICAgaW5pdF9kaXZpZGUoKTsKICAgIGluaXRfZG5hX29mZigpOwogICAgaW5pdF9kb2NrKCk7CiAgICBpbml0X2RuYSgpOwogICAgaW5pdF9kb2coKTsKICAgIGluaXRfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfZG9udXQoKTsKICAgIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkKCk7CiAgICBpbml0X2Rvb3JfY2xvc2VkKCk7CiAgICBpbml0X2RvdCgpOwogICAgaW5pdF9kb29yX29wZW4oKTsKICAgIGluaXRfZG93bmxvYWQoKTsKICAgIGluaXRfZHJhZnRpbmdfY29tcGFzcygpOwogICAgaW5pdF9kcmFtYSgpOwogICAgaW5pdF9kcmliYmJsZSgpOwogICAgaW5pdF9kcmlsbCgpOwogICAgaW5pdF9kcm9uZSgpOwogICAgaW5pdF9kcm9wbGV0X29mZigpOwogICAgaW5pdF9kcm9wbGV0KCk7CiAgICBpbml0X2Ryb3BsZXRzKCk7CiAgICBpbml0X2RydW0oKTsKICAgIGluaXRfZHJ1bXN0aWNrKCk7CiAgICBpbml0X2R1bWJiZWxsKCk7CiAgICBpbml0X2Vhcl9vZmYoKTsKICAgIGluaXRfZWFyKCk7CiAgICBpbml0X2VhcnRoX2xvY2soKTsKICAgIGluaXRfZWFydGgoKTsKICAgIGluaXRfZWNsaXBzZSgpOwogICAgaW5pdF9lZ2dfZnJpZWQoKTsKICAgIGluaXRfZWdnX29mZigpOwogICAgaW5pdF9lZ2coKTsKICAgIGluaXRfZWxsaXBzaXNfdmVydGljYWwoKTsKICAgIGluaXRfZWxsaXBzaXMoKTsKICAgIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSgpOwogICAgaW5pdF9lcXVhbF9ub3QoKTsKICAgIGluaXRfZXJhc2VyKCk7CiAgICBpbml0X2VxdWFsKCk7CiAgICBpbml0X2V0aGVybmV0X3BvcnQoKTsKICAgIGluaXRfZXVybygpOwogICAgaW5pdF9ldl9jaGFyZ2VyKCk7CiAgICBpbml0X2V4dGVybmFsX2xpbmsoKTsKICAgIGluaXRfZXhwYW5kMigpOwogICAgaW5pdF9leWVfY2xvc2VkKCk7CiAgICBpbml0X2V5ZV9vZmYoKTsKICAgIGluaXRfZXllKCk7CiAgICBpbml0X2ZhY3RvcnkoKTsKICAgIGluaXRfZmFjZWJvb2soKTsKICAgIGluaXRfZmFuKCk7CiAgICBpbml0X2Zhc3RfZm9yd2FyZCgpOwogICAgaW5pdF9mZWF0aGVyKCk7CiAgICBpbml0X2ZlbmNlKCk7CiAgICBpbml0X2ZlcnJpc193aGVlbCgpOwogICAgaW5pdF9maWdtYSgpOwogICAgaW5pdF9maWxlX2FyY2hpdmUoKTsKICAgIGluaXRfZmlsZV9heGlzXzNkKCk7CiAgICBpbml0X2ZpbGVfYmFkZ2UoKTsKICAgIGluaXRfZmlsZV9icmFjZXNfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfYm94KCk7CiAgICBpbml0X2ZpbGVfYnJhY2VzKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfY29sdW1uX2luY3JlYXNpbmcoKTsKICAgIGluaXRfZmlsZV9jaGFydF9jb2x1bW4oKTsKICAgIGluaXRfZmlsZV9jaGFydF9saW5lKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfcGllKCk7CiAgICBpbml0X2ZpbGVfY2hlY2tfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY2hlY2soKTsKICAgIGluaXRfZmlsZV9jbG9jaygpOwogICAgaW5pdF9maWxlX2NvZGVfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY29kZSgpOwogICAgaW5pdF9maWxlX2NvZygpOwogICAgaW5pdF9maWxlX2RpZmYoKTsKICAgIGluaXRfZmlsZV9kaWdpdCgpOwogICAgaW5pdF9maWxlX2Rvd24oKTsKICAgIGluaXRfZmlsZV9leGNsYW1hdGlvbl9wb2ludCgpOwogICAgaW5pdF9maWxlX2hlYWRwaG9uZSgpOwogICAgaW5pdF9maWxlX2hlYXJ0KCk7CiAgICBpbml0X2ZpbGVfaW1hZ2UoKTsKICAgIGluaXRfZmlsZV9pbnB1dCgpOwogICAgaW5pdF9maWxlX2tleSgpOwogICAgaW5pdF9maWxlX2xvY2soKTsKICAgIGluaXRfZmlsZV9taW51c19jb3JuZXIoKTsKICAgIGluaXRfZmlsZV9tdXNpYygpOwogICAgaW5pdF9maWxlX21pbnVzKCk7CiAgICBpbml0X2ZpbGVfb3V0cHV0KCk7CiAgICBpbml0X2ZpbGVfcGVuX2xpbmUoKTsKICAgIGluaXRfZmlsZV9wZW4oKTsKICAgIGluaXRfZmlsZV9wbGF5KCk7CiAgICBpbml0X2ZpbGVfcGx1cygpOwogICAgaW5pdF9maWxlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfZmlsZV9wbHVzX2Nvcm5lcigpOwogICAgaW5pdF9maWxlX3NjYW4oKTsKICAgIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfc2VhcmNoKCk7CiAgICBpbml0X2ZpbGVfc2lnbmFsKCk7CiAgICBpbml0X2ZpbGVfc3ByZWFkc2hlZXQoKTsKICAgIGluaXRfZmlsZV9zbGlkZXJzKCk7CiAgICBpbml0X2ZpbGVfc3RhY2soKTsKICAgIGluaXRfZmlsZV9zeW1saW5rKCk7CiAgICBpbml0X2ZpbGVfdGVybWluYWwoKTsKICAgIGluaXRfZmlsZV90ZXh0KCk7CiAgICBpbml0X2ZpbGVfdHlwZV9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV90eXBlKCk7CiAgICBpbml0X2ZpbGVfdXAoKTsKICAgIGluaXRfZmlsZV91c2VyKCk7CiAgICBpbml0X2ZpbGVfdm9sdW1lKCk7CiAgICBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhKCk7CiAgICBpbml0X2ZpbGVfeF9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV94KCk7CiAgICBpbml0X2ZpbGUoKTsKICAgIGluaXRfZmlsZXMoKTsKICAgIGluaXRfZmlsbSgpOwogICAgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuKCk7CiAgICBpbml0X2ZpcmVfZXh0aW5ndWlzaGVyKCk7CiAgICBpbml0X2Zpc2hfb2ZmKCk7CiAgICBpbml0X2Zpc2hfc3ltYm9sKCk7CiAgICBpbml0X2Zpc2goKTsKICAgIGluaXRfZmlzaGluZ19ob29rKCk7CiAgICBpbml0X2ZsYWdfb2ZmKCk7CiAgICBpbml0X2ZsYWdfdHJpYW5nbGVfbGVmdCgpOwogICAgaW5pdF9mbGFnX3RyaWFuZ2xlX3JpZ2h0KCk7CiAgICBpbml0X2ZsYW1lX2tpbmRsaW5nKCk7CiAgICBpbml0X2ZsYWcoKTsKICAgIGluaXRfZmxhbWUoKTsKICAgIGluaXRfZmxhc2hsaWdodF9vZmYoKTsKICAgIGluaXRfZmxhc2hsaWdodCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsX29mZigpOwogICAgaW5pdF9mbGFza19yb3VuZCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsKCk7CiAgICBpbml0X2ZsaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9mbGlwX2hvcml6b250YWxfMigpOwogICAgaW5pdF9mbGlwX3ZlcnRpY2FsXzIoKTsKICAgIGluaXRfZmxpcF92ZXJ0aWNhbCgpOwogICAgaW5pdF9mbG93ZXJfMigpOwogICAgaW5pdF9mbG93ZXIoKTsKICAgIGluaXRfZm9jdXMoKTsKICAgIGluaXRfZm9sZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2ZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfZm9sZGVyX2FyY2hpdmUoKTsKICAgIGluaXRfZm9sZGVyX2NoZWNrKCk7CiAgICBpbml0X2ZvbGRlcl9jbG9jaygpOwogICAgaW5pdF9mb2xkZXJfY2xvc2VkKCk7CiAgICBpbml0X2ZvbGRlcl9jb2RlKCk7CiAgICBpbml0X2ZvbGRlcl9jb2coKTsKICAgIGluaXRfZm9sZGVyX2RvdCgpOwogICAgaW5pdF9mb2xkZXJfZG93bigpOwogICAgaW5pdF9mb2xkZXJfZ2l0XzIoKTsKICAgIGluaXRfZm9sZGVyX2dpdCgpOwogICAgaW5pdF9mb2xkZXJfaGVhcnQoKTsKICAgIGluaXRfZm9sZGVyX2lucHV0KCk7CiAgICBpbml0X2ZvbGRlcl9rYW5iYW4oKTsKICAgIGluaXRfZm9sZGVyX2tleSgpOwogICAgaW5pdF9mb2xkZXJfbG9jaygpOwogICAgaW5pdF9mb2xkZXJfbWludXMoKTsKICAgIGluaXRfZm9sZGVyX29wZW5fZG90KCk7CiAgICBpbml0X2ZvbGRlcl9vcGVuKCk7CiAgICBpbml0X2ZvbGRlcl9vdXRwdXQoKTsKICAgIGluaXRfZm9sZGVyX3BlbigpOwogICAgaW5pdF9mb2xkZXJfcGx1cygpOwogICAgaW5pdF9mb2xkZXJfcm9vdCgpOwogICAgaW5pdF9mb2xkZXJfc2VhcmNoXzIoKTsKICAgIGluaXRfZm9sZGVyX3NlYXJjaCgpOwogICAgaW5pdF9mb2xkZXJfc3ltbGluaygpOwogICAgaW5pdF9mb2xkZXJfc3luYygpOwogICAgaW5pdF9mb2xkZXJfdHJlZSgpOwogICAgaW5pdF9mb2xkZXJfdXAoKTsKICAgIGluaXRfZm9sZGVyX3goKTsKICAgIGluaXRfZm9sZGVyKCk7CiAgICBpbml0X2ZvbGRlcnMoKTsKICAgIGluaXRfZm9vdHByaW50cygpOwogICAgaW5pdF9mb3JrbGlmdCgpOwogICAgaW5pdF9mb3JtKCk7CiAgICBpbml0X2ZvcndhcmQoKTsKICAgIGluaXRfZnJhbWUoKTsKICAgIGluaXRfZnJhbWVyKCk7CiAgICBpbml0X2Zyb3duKCk7CiAgICBpbml0X2Z1ZWwoKTsKICAgIGluaXRfZnVsbHNjcmVlbigpOwogICAgaW5pdF9mdW5uZWxfcGx1cygpOwogICAgaW5pdF9mdW5uZWxfeCgpOwogICAgaW5pdF9mdW5uZWwoKTsKICAgIGluaXRfZ2FsbGVyeV9ob3Jpem9udGFsX2VuZCgpOwogICAgaW5pdF9nYWxsZXJ5X2hvcml6b250YWwoKTsKICAgIGluaXRfZ2FsbGVyeV90aHVtYm5haWxzKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWxfZW5kKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWwoKTsKICAgIGluaXRfZ2FtZXBhZF8yKCk7CiAgICBpbml0X2dhbWVwYWRfZGlyZWN0aW9uYWwoKTsKICAgIGluaXRfZ2FtZXBhZCgpOwogICAgaW5pdF9nYXVnZSgpOwogICAgaW5pdF9nYXZlbCgpOwogICAgaW5pdF9nZW0oKTsKICAgIGluaXRfZ2VvcmdpYW5fbGFyaSgpOwogICAgaW5pdF9naG9zdCgpOwogICAgaW5pdF9naWZ0KCk7CiAgICBpbml0X2dpdF9icmFuY2hfbWludXMoKTsKICAgIGluaXRfZ2l0X2JyYW5jaCgpOwogICAgaW5pdF9naXRfYnJhbmNoX3BsdXMoKTsKICAgIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2dpdF9jb21taXRfdmVydGljYWwoKTsKICAgIGluaXRfZ2l0X2NvbXBhcmVfYXJyb3dzKCk7CiAgICBpbml0X2dpdF9jb21wYXJlKCk7CiAgICBpbml0X2dpdF9mb3JrKCk7CiAgICBpbml0X2dpdF9ncmFwaCgpOwogICAgaW5pdF9naXRfbWVyZ2UoKTsKICAgIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Nsb3NlZCgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2RyYWZ0KCk7CiAgICBpbml0X2dpdF9wdWxsX3JlcXVlc3QoKTsKICAgIGluaXRfZ2l0aHViKCk7CiAgICBpbml0X2dpdGxhYigpOwogICAgaW5pdF9nbGFzc193YXRlcigpOwogICAgaW5pdF9nbGFzc2VzKCk7CiAgICBpbml0X2dsb2JlX2xvY2soKTsKICAgIGluaXRfZ2xvYmUoKTsKICAgIGluaXRfZ29hbCgpOwogICAgaW5pdF9ncHUoKTsKICAgIGluaXRfZ3JhZHVhdGlvbl9jYXAoKTsKICAgIGluaXRfZ3JhcGUoKTsKICAgIGluaXRfZ3JpZF8yeDJfY2hlY2soKTsKICAgIGluaXRfZ3JpZF8yeDJfcGx1cygpOwogICAgaW5pdF9ncmlkXzJ4Ml94KCk7CiAgICBpbml0X2dyaWRfMngyKCk7CiAgICBpbml0X2dyaWRfM3gyKCk7CiAgICBpbml0X2dyaWRfM3gzKCk7CiAgICBpbml0X2dyaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9ncmlwX3ZlcnRpY2FsKCk7CiAgICBpbml0X2dyaXAoKTsKICAgIGluaXRfZ3JvdXAoKTsKICAgIGluaXRfaGFtKCk7CiAgICBpbml0X2d1aXRhcigpOwogICAgaW5pdF9oYW1idXJnZXIoKTsKICAgIGluaXRfaGFtbWVyKCk7CiAgICBpbml0X2hhbmRfY29pbnMoKTsKICAgIGluaXRfaGFuZF9maXN0KCk7CiAgICBpbml0X2hhbmRfZ3JhYigpOwogICAgaW5pdF9oYW5kX2hlYXJ0KCk7CiAgICBpbml0X2hhbmRfaGVscGluZygpOwogICAgaW5pdF9oYW5kX21ldGFsKCk7CiAgICBpbml0X2hhbmRfcGxhdHRlcigpOwogICAgaW5pdF9oYW5kKCk7CiAgICBpbml0X2hhbmRiYWcoKTsKICAgIGluaXRfaGFuZHNoYWtlKCk7CiAgICBpbml0X2hhcmRfZHJpdmVfZG93bmxvYWQoKTsKICAgIGluaXRfaGFyZF9kcml2ZV91cGxvYWQoKTsKICAgIGluaXRfaGFyZF9oYXQoKTsKICAgIGluaXRfaGFzaCgpOwogICAgaW5pdF9oYXJkX2RyaXZlKCk7CiAgICBpbml0X2hhdF9nbGFzc2VzKCk7CiAgICBpbml0X2hhemUoKTsKICAgIGluaXRfaGQoKTsKICAgIGluaXRfaGRtaV9wb3J0KCk7CiAgICBpbml0X2hlYWRpbmdfMSgpOwogICAgaW5pdF9oZWFkaW5nXzMoKTsKICAgIGluaXRfaGVhZGluZ18yKCk7CiAgICBpbml0X2hlYWRpbmdfNCgpOwogICAgaW5pdF9oZWFkaW5nXzUoKTsKICAgIGluaXRfaGVhZGluZ182KCk7CiAgICBpbml0X2hlYWRpbmczKCk7CiAgICBpbml0X2hlYWRwaG9uZV9vZmYoKTsKICAgIGluaXRfaGVhZHBob25lcygpOwogICAgaW5pdF9oZWFkc2V0KCk7CiAgICBpbml0X2hlYXJ0X2NyYWNrKCk7CiAgICBpbml0X2hlYXJ0X2hhbmRzaGFrZSgpOwogICAgaW5pdF9oZWFydF9taW51cygpOwogICAgaW5pdF9oZWFydF9vZmYoKTsKICAgIGluaXRfaGVhcnRfcGx1cygpOwogICAgaW5pdF9oZWFydF9wdWxzZSgpOwogICAgaW5pdF9oZWF0ZXIoKTsKICAgIGluaXRfaGVhcnQoKTsKICAgIGluaXRfaGVsaWNvcHRlcigpOwogICAgaW5pdF9oZXhhZ29uKCk7CiAgICBpbml0X2hpZ2hsaWdodGVyKCk7CiAgICBpbml0X2hpc3RvcnkoKTsKICAgIGluaXRfaG9wKCk7CiAgICBpbml0X2hvcF9vZmYoKTsKICAgIGluaXRfaG9zcGl0YWwoKTsKICAgIGluaXRfaG90ZWwoKTsKICAgIGluaXRfaG91cmdsYXNzKCk7CiAgICBpbml0X2hvdXNlX2hlYXJ0KCk7CiAgICBpbml0X2hvdXNlX3BsdWcoKTsKICAgIGluaXRfaG91c2VfcGx1cygpOwogICAgaW5pdF9ob3VzZV93aWZpKCk7CiAgICBpbml0X2hvdXNlKCk7CiAgICBpbml0X2ljZV9jcmVhbV9ib3dsKCk7CiAgICBpbml0X2ljZV9jcmVhbV9jb25lKCk7CiAgICBpbml0X2lkX2NhcmRfbGFueWFyZCgpOwogICAgaW5pdF9pZF9jYXJkKCk7CiAgICBpbml0X2ltYWdlX2Rvd24oKTsKICAgIGluaXRfaW1hZ2VfbWludXMoKTsKICAgIGluaXRfaW1hZ2Vfb2ZmKCk7CiAgICBpbml0X2ltYWdlX3BsdXMoKTsKICAgIGluaXRfaW1hZ2VfcGxheSgpOwogICAgaW5pdF9pbWFnZV91cCgpOwogICAgaW5pdF9pbWFnZV91cHNjYWxlKCk7CiAgICBpbml0X2ltYWdlMygpOwogICAgaW5pdF9pbWFnZXMoKTsKICAgIGluaXRfaW1wb3J0KCk7CiAgICBpbml0X2luYm94KCk7CiAgICBpbml0X2luZGlhbl9ydXBlZSgpOwogICAgaW5pdF9pbmZpbml0eSgpOwogICAgaW5pdF9pbmZvMigpOwogICAgaW5pdF9pbnNwZWN0aW9uX3BhbmVsKCk7CiAgICBpbml0X2luc3RhZ3JhbSgpOwogICAgaW5pdF9pdGFsaWMoKTsKICAgIGluaXRfaXRlcmF0aW9uX2NjdygpOwogICAgaW5pdF9pdGVyYXRpb25fY3coKTsKICAgIGluaXRfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2pveXN0aWNrKCk7CiAgICBpbml0X2thbmJhbigpOwogICAgaW5pdF9rYXlhaygpOwogICAgaW5pdF9rZXlfcm91bmQoKTsKICAgIGluaXRfa2V5X3NxdWFyZSgpOwogICAgaW5pdF9rZXkoKTsKICAgIGluaXRfa2V5Ym9hcmRfbXVzaWMoKTsKICAgIGluaXRfa2V5Ym9hcmRfb2ZmKCk7CiAgICBpbml0X2tleWJvYXJkKCk7CiAgICBpbml0X2xhbXBfY2VpbGluZygpOwogICAgaW5pdF9sYW1wX2Rlc2soKTsKICAgIGluaXRfbGFtcF9mbG9vcigpOwogICAgaW5pdF9sYW1wX3dhbGxfZG93bigpOwogICAgaW5pdF9sYW1wX3dhbGxfdXAoKTsKICAgIGluaXRfbGFtcCgpOwogICAgaW5pdF9sYW5kX3Bsb3QoKTsKICAgIGluaXRfbGFuZG1hcmsoKTsKICAgIGluaXRfbGFuZ3VhZ2VzKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsX2NoZWNrKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsKCk7CiAgICBpbml0X2xhcHRvcCgpOwogICAgaW5pdF9sYXNzb19zZWxlY3QoKTsKICAgIGluaXRfbGFzc28oKTsKICAgIGluaXRfbGF1Z2goKTsKICAgIGluaXRfbGF5ZXJzXzIoKTsKICAgIGluaXRfbGF5ZXJzKCk7CiAgICBpbml0X2xheWVyc19wbHVzKCk7CiAgICBpbml0X2xheW91dF9kYXNoYm9hcmQoKTsKICAgIGluaXRfbGF5b3V0X2dyaWQoKTsKICAgIGluaXRfbGF5b3V0X2xpc3QoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX2xlZnQoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX3RvcCgpOwogICAgaW5pdF9sYXlvdXRfdGVtcGxhdGUoKTsKICAgIGluaXRfbGVhZigpOwogICAgaW5pdF9sZWFmeV9ncmVlbigpOwogICAgaW5pdF9sZWN0ZXJuKCk7CiAgICBpbml0X2xpYnJhcnlfYmlnKCk7CiAgICBpbml0X2xpYnJhcnkoKTsKICAgIGluaXRfbGlmZV9idW95KCk7CiAgICBpbml0X2xpZ2F0dXJlKCk7CiAgICBpbml0X2xpZ2h0YnVsYl9vZmYoKTsKICAgIGluaXRfbGlnaHRidWxiKCk7CiAgICBpbml0X2xpbmVfc3F1aWdnbGUoKTsKICAgIGluaXRfbGlua18yKCk7CiAgICBpbml0X2xpbmtfMl9vZmYoKTsKICAgIGluaXRfbGluazQoKTsKICAgIGluaXRfbGlua2VkaW4oKTsKICAgIGluaXRfbGlzdF9jaGVjaygpOwogICAgaW5pdF9saXN0X2NoZWNrcygpOwogICAgaW5pdF9saXN0X2NoZXZyb25zX2Rvd25fdXAoKTsKICAgIGluaXRfbGlzdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2xpc3RfY29sbGFwc2UoKTsKICAgIGluaXRfbGlzdF9lbmQoKTsKICAgIGluaXRfbGlzdF9maWx0ZXJfcGx1cygpOwogICAgaW5pdF9saXN0X2ZpbHRlcigpOwogICAgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSgpOwogICAgaW5pdF9saXN0X2luZGVudF9pbmNyZWFzZSgpOwogICAgaW5pdF9saXN0X21pbnVzKCk7CiAgICBpbml0X2xpc3RfbXVzaWMoKTsKICAgIGluaXRfbGlzdF9vcmRlcmVkKCk7CiAgICBpbml0X2xpc3RfcGx1cygpOwogICAgaW5pdF9saXN0X3Jlc3RhcnQoKTsKICAgIGluaXRfbGlzdF9zdGFydCgpOwogICAgaW5pdF9saXN0X3RvZG8oKTsKICAgIGluaXRfbGlzdF90cmVlKCk7CiAgICBpbml0X2xpc3RfdmlkZW8oKTsKICAgIGluaXRfbGlzdF94KCk7CiAgICBpbml0X2xvYWRlcl9jaXJjbGUoKTsKICAgIGluaXRfbGlzdDQoKTsKICAgIGluaXRfbG9hZGVyX3BpbndoZWVsKCk7CiAgICBpbml0X2xvYWRlcigpOwogICAgaW5pdF9sb2NhdGVfZml4ZWQoKTsKICAgIGluaXRfbG9jYXRlX29mZigpOwogICAgaW5pdF9sb2NhdGUoKTsKICAgIGluaXRfbG9ja19rZXlob2xlX29wZW4oKTsKICAgIGluaXRfbG9ja19rZXlob2xlKCk7CiAgICBpbml0X2xvY2tfb3BlbigpOwogICAgaW5pdF9sb2NrKCk7CiAgICBpbml0X2xvZ19pbigpOwogICAgaW5pdF9sb2dfb3V0KCk7CiAgICBpbml0X2xvZ3MoKTsKICAgIGluaXRfbG9sbGlwb3AoKTsKICAgIGluaXRfbHVnZ2FnZSgpOwogICAgaW5pdF9tYWduZXQoKTsKICAgIGluaXRfbWFpbF9jaGVjaygpOwogICAgaW5pdF9tYWlsX21pbnVzKCk7CiAgICBpbml0X21haWxfb3BlbigpOwogICAgaW5pdF9tYWlsX3BsdXMoKTsKICAgIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X21haWxfc2VhcmNoKCk7CiAgICBpbml0X21haWxfd2FybmluZygpOwogICAgaW5pdF9tYWlsX3goKTsKICAgIGluaXRfbWFpbCgpOwogICAgaW5pdF9tYWlsYm94KCk7CiAgICBpbml0X21haWxzKCk7CiAgICBpbml0X21hcF9taW51cygpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrX2luc2lkZSgpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrKCk7CiAgICBpbml0X21hcF9waW5faG91c2UoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51c19pbnNpZGUoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51cygpOwogICAgaW5pdF9tYXBfcGluX29mZigpOwogICAgaW5pdF9tYXBfcGluX3BlbigpOwogICAgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5fcGx1cygpOwogICAgaW5pdF9tYXBfcGluX3hfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5feCgpOwogICAgaW5pdF9tYXBfcGluKCk7CiAgICBpbml0X21hcF9waW5uZWQoKTsKICAgIGluaXRfbWFwX3BsdXMoKTsKICAgIGluaXRfbWFwMigpOwogICAgaW5pdF9tYXJzX3N0cm9rZSgpOwogICAgaW5pdF9tYXJzKCk7CiAgICBpbml0X21hcnRpbmkoKTsKICAgIGluaXRfbWF4aW1pemVfMigpOwogICAgaW5pdF9tYXhpbWl6ZSgpOwogICAgaW5pdF9tZWdhcGhvbmVfb2ZmKCk7CiAgICBpbml0X21lZ2FwaG9uZSgpOwogICAgaW5pdF9tZWRhbCgpOwogICAgaW5pdF9tZWgoKTsKICAgIGluaXRfbWVtb3J5X3N0aWNrKCk7CiAgICBpbml0X21lcmdlNCgpOwogICAgaW5pdF9tZW51KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfb2ZmKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyaygpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV9yZXBseSgpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3goKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGUoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfY29kZSgpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfZGlmZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfaGVhcnQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jaygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9tb3JlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX29mZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3F1b3RlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3JlcGx5KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3NoYXJlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV94KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlKCk7CiAgICBpbml0X21lc3NhZ2VzX3NxdWFyZSgpOwogICAgaW5pdF9taWNfb2ZmKCk7CiAgICBpbml0X21pY192b2NhbCgpOwogICAgaW5pdF9taWMoKTsKICAgIGluaXRfbWljcm9jaGlwKCk7CiAgICBpbml0X21pY3Jvc2NvcGUoKTsKICAgIGluaXRfbWljcm93YXZlKCk7CiAgICBpbml0X21pbGVzdG9uZSgpOwogICAgaW5pdF9taWxrX29mZigpOwogICAgaW5pdF9taWxrKCk7CiAgICBpbml0X21pbmltaXplXzIoKTsKICAgIGluaXRfbWluaW1pemUoKTsKICAgIGluaXRfbWludXMoKTsKICAgIGluaXRfbW9uaXRvcl9jaGVjaygpOwogICAgaW5pdF9tb25pdG9yX2Nsb3VkKCk7CiAgICBpbml0X21vbml0b3JfY29nKCk7CiAgICBpbml0X21vbml0b3JfZG90KCk7CiAgICBpbml0X21vbml0b3JfZG93bigpOwogICAgaW5pdF9tb25pdG9yX29mZigpOwogICAgaW5pdF9tb25pdG9yX3BhdXNlKCk7CiAgICBpbml0X21vbml0b3JfcGxheSgpOwogICAgaW5pdF9tb25pdG9yX3NtYXJ0cGhvbmUoKTsKICAgIGluaXRfbW9uaXRvcl9zcGVha2VyKCk7CiAgICBpbml0X21vbml0b3Jfc3RvcCgpOwogICAgaW5pdF9tb25pdG9yX3VwKCk7CiAgICBpbml0X21vbml0b3JfeCgpOwogICAgaW5pdF9tb25pdG9yKCk7CiAgICBpbml0X21vb25fc3RhcigpOwogICAgaW5pdF9tb3RvcmJpa2UoKTsKICAgIGluaXRfbW9vbigpOwogICAgaW5pdF9tb3VudGFpbl9zbm93KCk7CiAgICBpbml0X21vdW50YWluKCk7CiAgICBpbml0X21vdXNlX29mZigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyXzJfb2ZmKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXJfMigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2JhbigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfbW91c2UoKTsKICAgIGluaXRfbW92ZV8zZCgpOwogICAgaW5pdF9tb3ZlX2RpYWdvbmFsXzIoKTsKICAgIGluaXRfbW92ZV9kaWFnb25hbCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fbGVmdCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fcmlnaHQoKTsKICAgIGluaXRfbW92ZV9kb3duKCk7CiAgICBpbml0X21vdmVfbGVmdCgpOwogICAgaW5pdF9tb3ZlX2hvcml6b250YWwoKTsKICAgIGluaXRfbW92ZV9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwX2xlZnQoKTsKICAgIGluaXRfbW92ZV91cF9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwKCk7CiAgICBpbml0X21vdmVfdmVydGljYWwoKTsKICAgIGluaXRfbW92ZSgpOwogICAgaW5pdF9tdXNpY18yKCk7CiAgICBpbml0X211c2ljXzMoKTsKICAgIGluaXRfbXVzaWNfNCgpOwogICAgaW5pdF9tdXNpYygpOwogICAgaW5pdF9uYXZpZ2F0aW9uXzJfb2ZmKCk7CiAgICBpbml0X25hdmlnYXRpb25fMigpOwogICAgaW5pdF9uYXZpZ2F0aW9uX29mZigpOwogICAgaW5pdF9uYXZpZ2F0aW9uKCk7CiAgICBpbml0X25ld3NwYXBlcigpOwogICAgaW5pdF9uZXR3b3JrMigpOwogICAgaW5pdF9uZmMoKTsKICAgIGluaXRfbm9uX2JpbmFyeSgpOwogICAgaW5pdF9ub3RlYm9va19wZW4oKTsKICAgIGluaXRfbm90ZWJvb2tfdGFicygpOwogICAgaW5pdF9ub3RlYm9va190ZXh0KCk7CiAgICBpbml0X25vdGVib29rKCk7CiAgICBpbml0X25vdGVwYWRfdGV4dF9kYXNoZWQoKTsKICAgIGluaXRfbm90ZXBhZF90ZXh0KCk7CiAgICBpbml0X251dF9vZmYoKTsKICAgIGluaXRfbnV0KCk7CiAgICBpbml0X29jdGFnb25fYWxlcnQoKTsKICAgIGluaXRfb2N0YWdvbl9taW51cygpOwogICAgaW5pdF9vY3RhZ29uX3BhdXNlKCk7CiAgICBpbml0X29jdGFnb25feCgpOwogICAgaW5pdF9vY3RhZ29uKCk7CiAgICBpbml0X29tZWdhKCk7CiAgICBpbml0X29wdGlvbigpOwogICAgaW5pdF9vcmJpdCgpOwogICAgaW5pdF9vcmlnYW1pKCk7CiAgICBpbml0X3BhY2thZ2VfMigpOwogICAgaW5pdF9wYWNrYWdlX2NoZWNrKCk7CiAgICBpbml0X3BhY2thZ2VfbWludXMoKTsKICAgIGluaXRfcGFja2FnZV9vcGVuKCk7CiAgICBpbml0X3BhY2thZ2VfcGx1cygpOwogICAgaW5pdF9wYWNrYWdlX3NlYXJjaCgpOwogICAgaW5pdF9wYWNrYWdlX3goKTsKICAgIGluaXRfcGFja2FnZSgpOwogICAgaW5pdF9wYWludF9idWNrZXQoKTsKICAgIGluaXRfcGFpbnRfcm9sbGVyKCk7CiAgICBpbml0X3BhaW50YnJ1c2hfdmVydGljYWwoKTsKICAgIGluaXRfcGFpbnRicnVzaCgpOwogICAgaW5pdF9wYWxldHRlKCk7CiAgICBpbml0X3BhbmRhKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9vcGVuKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfb3BlbigpOwogICAgaW5pdF9wYW5lbF9sZWZ0X3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9sZWZ0KCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9yaWdodF9vcGVuKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0KCk7CiAgICBpbml0X3BhbmVsX3RvcF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF90b3BfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9vcGVuKCk7CiAgICBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF90b3AoKTsKICAgIGluaXRfcGFuZWxzX3JpZ2h0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbHNfdG9wX2xlZnQoKTsKICAgIGluaXRfcGFwZXJjbGlwKCk7CiAgICBpbml0X3BhcmtpbmdfbWV0ZXIoKTsKICAgIGluaXRfcGFyZW50aGVzZXMoKTsKICAgIGluaXRfcGFydHlfcG9wcGVyKCk7CiAgICBpbml0X3BhdXNlKCk7CiAgICBpbml0X3Bhd19wcmludCgpOwogICAgaW5pdF9wY19jYXNlKCk7CiAgICBpbml0X3Blbl9saW5lKCk7CiAgICBpbml0X3Blbl9vZmYoKTsKICAgIGluaXRfcGVuX3Rvb2woKTsKICAgIGluaXRfcGVuKCk7CiAgICBpbml0X3BlbmNpbF9saW5lKCk7CiAgICBpbml0X3BlbmNpbF9vZmYoKTsKICAgIGluaXRfcGVuY2lsX3J1bGVyKCk7CiAgICBpbml0X3BlbmNpbCgpOwogICAgaW5pdF9wZW50YWdvbigpOwogICAgaW5pdF9wZXJjZW50KCk7CiAgICBpbml0X3BlcnNvbl9zdGFuZGluZygpOwogICAgaW5pdF9waGlsaXBwaW5lX3Blc28oKTsKICAgIGluaXRfcGhvbmVfZm9yd2FyZGVkKCk7CiAgICBpbml0X3Bob25lX2NhbGwoKTsKICAgIGluaXRfcGhvbmVfaW5jb21pbmcoKTsKICAgIGluaXRfcGhvbmVfbWlzc2VkKCk7CiAgICBpbml0X3Bob25lX29mZigpOwogICAgaW5pdF9waG9uZV9vdXRnb2luZygpOwogICAgaW5pdF9waG9uZSgpOwogICAgaW5pdF9waSgpOwogICAgaW5pdF9waWFubygpOwogICAgaW5pdF9waWNrYXhlKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZSgpOwogICAgaW5pdF9waWdneV9iYW5rKCk7CiAgICBpbml0X3BpbGNyb3dfbGVmdCgpOwogICAgaW5pdF9waWxjcm93X3JpZ2h0KCk7CiAgICBpbml0X3BpbGNyb3coKTsKICAgIGluaXRfcGlsbF9ib3R0bGUoKTsKICAgIGluaXRfcGlsbCgpOwogICAgaW5pdF9waW5fb2ZmKCk7CiAgICBpbml0X3BpbigpOwogICAgaW5pdF9waXBldHRlKCk7CiAgICBpbml0X3BpenphKCk7CiAgICBpbml0X3BsYW5lX2xhbmRpbmcoKTsKICAgIGluaXRfcGxhbmVfdGFrZW9mZigpOwogICAgaW5pdF9wbGFuZSgpOwogICAgaW5pdF9wbGF5KCk7CiAgICBpbml0X3BsdWdfMigpOwogICAgaW5pdF9wbHVnX3phcCgpOwogICAgaW5pdF9wbHVnKCk7CiAgICBpbml0X3BsdXMoKTsKICAgIGluaXRfcG9ja2V0X2tuaWZlKCk7CiAgICBpbml0X3BvY2tldCgpOwogICAgaW5pdF9wb2RjYXN0KCk7CiAgICBpbml0X3BvaW50ZXJfb2ZmKCk7CiAgICBpbml0X3BvaW50ZXIoKTsKICAgIGluaXRfcG9wY29ybigpOwogICAgaW5pdF9wb3BzaWNsZSgpOwogICAgaW5pdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9wb3dlcl9vZmYoKTsKICAgIGluaXRfcG93ZXIoKTsKICAgIGluaXRfcHJlc2VudGF0aW9uKCk7CiAgICBpbml0X3ByaW50ZXIoKTsKICAgIGluaXRfcHJpbnRlcl9jaGVjaygpOwogICAgaW5pdF9wcm9qZWN0b3IoKTsKICAgIGluaXRfcHJvcG9ydGlvbnMoKTsKICAgIGluaXRfcHV6emxlKCk7CiAgICBpbml0X3B5cmFtaWQoKTsKICAgIGluaXRfcXJfY29kZSgpOwogICAgaW5pdF9xdW90ZSgpOwogICAgaW5pdF9yYWJiaXQoKTsKICAgIGluaXRfcmFkYXIoKTsKICAgIGluaXRfcmFkaWF0aW9uKCk7CiAgICBpbml0X3JhZGljYWwoKTsKICAgIGluaXRfcmFkaW9fcmVjZWl2ZXIoKTsKICAgIGluaXRfcmFkaW9fdG93ZXIoKTsKICAgIGluaXRfcmFkaW8oKTsKICAgIGluaXRfcmFkaXVzKCk7CiAgICBpbml0X3JhaWxfc3ltYm9sKCk7CiAgICBpbml0X3JhaW5ib3coKTsKICAgIGluaXRfcmF0KCk7CiAgICBpbml0X3JhdGlvKCk7CiAgICBpbml0X3JlY2VpcHRfY2VudCgpOwogICAgaW5pdF9yZWNlaXB0X2V1cm8oKTsKICAgIGluaXRfcmVjZWlwdF9pbmRpYW5fcnVwZWUoKTsKICAgIGluaXRfcmVjZWlwdF9qYXBhbmVzZV95ZW4oKTsKICAgIGluaXRfcmVjZWlwdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9yZWNlaXB0X3RleHQoKTsKICAgIGluaXRfcmVjZWlwdF90dXJraXNoX2xpcmEoKTsKICAgIGluaXRfcmVjZWlwdCgpOwogICAgaW5pdF9yZWN0YW5nbGVfY2lyY2xlKCk7CiAgICBpbml0X3JlY3RhbmdsZV9lbGxpcHNpcygpOwogICAgaW5pdF9yZWN0YW5nbGVfZ29nZ2xlcygpOwogICAgaW5pdF9yZWN0YW5nbGVfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9yZWN0YW5nbGVfdmVydGljYWwoKTsKICAgIGluaXRfcmVjeWNsZSgpOwogICAgaW5pdF9yZWRvXzIoKTsKICAgIGluaXRfcmVkb19kb3QoKTsKICAgIGluaXRfcmVkbygpOwogICAgaW5pdF9yZWZyZXNoX2Njd19kb3QoKTsKICAgIGluaXRfcmVmcmVzaF9jY3coKTsKICAgIGluaXRfcmVmcmVzaF9jd19vZmYoKTsKICAgIGluaXRfcmVmcmVzaF9jdygpOwogICAgaW5pdF9yZWZyaWdlcmF0b3IoKTsKICAgIGluaXRfcmVnZXgoKTsKICAgIGluaXRfcmVtb3ZlX2Zvcm1hdHRpbmcoKTsKICAgIGluaXRfcmVwZWF0XzEoKTsKICAgIGluaXRfcmVwZWF0XzIoKTsKICAgIGluaXRfcmVwZWF0NCgpOwogICAgaW5pdF9yZXBsYWNlX2FsbCgpOwogICAgaW5pdF9yZXBsYWNlKCk7CiAgICBpbml0X3JlcGx5X2FsbCgpOwogICAgaW5pdF9yZXBseSgpOwogICAgaW5pdF9yZXdpbmQoKTsKICAgIGluaXRfcmliYm9uKCk7CiAgICBpbml0X3JvY2tldCgpOwogICAgaW5pdF9yb2NraW5nX2NoYWlyKCk7CiAgICBpbml0X3JvbGxlcl9jb2FzdGVyKCk7CiAgICBpbml0X3Jvc2UoKTsKICAgIGluaXRfcm90YXRlXzNkKCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfa2V5KCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfc3F1YXJlKCk7CiAgICBpbml0X3JvdGF0ZV9jY3coKTsKICAgIGluaXRfcm90YXRlX2N3X3NxdWFyZSgpOwogICAgaW5pdF9yb3RhdGVfY3coKTsKICAgIGluaXRfcm91dGUoKTsKICAgIGluaXRfcm91dGVfb2ZmKCk7CiAgICBpbml0X3JvdXRlcigpOwogICAgaW5pdF9yb3dzXzIoKTsKICAgIGluaXRfcm93c18zKCk7CiAgICBpbml0X3Jvd3NfNCgpOwogICAgaW5pdF9yc3MoKTsKICAgIGluaXRfcnVsZXJfZGltZW5zaW9uX2xpbmUoKTsKICAgIGluaXRfcnVsZXIoKTsKICAgIGluaXRfcnVzc2lhbl9ydWJsZSgpOwogICAgaW5pdF9zYWlsYm9hdCgpOwogICAgaW5pdF9zYWxhZCgpOwogICAgaW5pdF9zYW5kd2ljaCgpOwogICAgaW5pdF9zYXRlbGxpdGVfZGlzaCgpOwogICAgaW5pdF9zYXRlbGxpdGUoKTsKICAgIGluaXRfc2F1ZGlfcml5YWwoKTsKICAgIGluaXRfc2F2ZV9hbGwoKTsKICAgIGluaXRfc2F2ZV9vZmYoKTsKICAgIGluaXRfc2F2ZSgpOwogICAgaW5pdF9zY2FsZV8zZCgpOwogICAgaW5pdF9zY2FsZSgpOwogICAgaW5pdF9zY2FsaW5nKCk7CiAgICBpbml0X3NjYW5fZXllKCk7CiAgICBpbml0X3NjYW5fYmFyY29kZSgpOwogICAgaW5pdF9zY2FuX2ZhY2UoKTsKICAgIGluaXRfc2Nhbl9oZWFydCgpOwogICAgaW5pdF9zY2FuX2xpbmUoKTsKICAgIGluaXRfc2Nhbl9xcl9jb2RlKCk7CiAgICBpbml0X3NjYW5fc2VhcmNoKCk7CiAgICBpbml0X3NjYW5fdGV4dCgpOwogICAgaW5pdF9zY2FuMigpOwogICAgaW5pdF9zY2hvb2woKTsKICAgIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQoKTsKICAgIGluaXRfc2Npc3NvcnMoKTsKICAgIGluaXRfc2Nvb3RlcigpOwogICAgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmKCk7CiAgICBpbml0X3NjcmVlbl9zaGFyZSgpOwogICAgaW5pdF9zY3JvbGxfdGV4dCgpOwogICAgaW5pdF9zY3JvbGwoKTsKICAgIGluaXRfc2VhcmNoX2FsZXJ0KCk7CiAgICBpbml0X3NlYXJjaF9jb2RlKCk7CiAgICBpbml0X3NlYXJjaF9jaGVjaygpOwogICAgaW5pdF9zZWFyY2hfc2xhc2goKTsKICAgIGluaXRfc2VhcmNoX3goKTsKICAgIGluaXRfc2VhcmNoKCk7CiAgICBpbml0X3NlbmRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zZWN0aW9uKCk7CiAgICBpbml0X3NlbmRfdG9fYmFjaygpOwogICAgaW5pdF9zZW5kKCk7CiAgICBpbml0X3NlcGFyYXRvcl9ob3Jpem9udGFsKCk7CiAgICBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCgpOwogICAgaW5pdF9zZXJ2ZXJfY29nKCk7CiAgICBpbml0X3NlcnZlcl9jcmFzaCgpOwogICAgaW5pdF9zZXJ2ZXJfb2ZmKCk7CiAgICBpbml0X3NlcnZlcigpOwogICAgaW5pdF9zZXR0aW5nc18yKCk7CiAgICBpbml0X3NldHRpbmdzKCk7CiAgICBpbml0X3NoYXBlcygpOwogICAgaW5pdF9zaGFyZV8yKCk7CiAgICBpbml0X3NoYXJlMigpOwogICAgaW5pdF9zaGVldCgpOwogICAgaW5pdF9zaGVsbCgpOwogICAgaW5pdF9zaGllbGRfYWxlcnQoKTsKICAgIGluaXRfc2hpZWxkX2JhbigpOwogICAgaW5pdF9zaGllbGRfY2hlY2soKTsKICAgIGluaXRfc2hpZWxkX2VsbGlwc2lzKCk7CiAgICBpbml0X3NoaWVsZF9oYWxmKCk7CiAgICBpbml0X3NoaWVsZF9taW51cygpOwogICAgaW5pdF9zaGllbGRfb2ZmKCk7CiAgICBpbml0X3NoaWVsZF9wbHVzKCk7CiAgICBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X3NoaWVsZF91c2VyKCk7CiAgICBpbml0X3NoaWVsZF94KCk7CiAgICBpbml0X3NoaWVsZCgpOwogICAgaW5pdF9zaGlwX3doZWVsKCk7CiAgICBpbml0X3NoaXAoKTsKICAgIGluaXRfc2hpcnQoKTsKICAgIGluaXRfc2hvcHBpbmdfYmFnKCk7CiAgICBpbml0X3Nob3BwaW5nX2Jhc2tldCgpOwogICAgaW5pdF9zaG9wcGluZ19jYXJ0KCk7CiAgICBpbml0X3Nob3ZlbCgpOwogICAgaW5pdF9zaG93ZXJfaGVhZCgpOwogICAgaW5pdF9zaHJlZGRlcigpOwogICAgaW5pdF9zaHJpbXAoKTsKICAgIGluaXRfc2hyaW5rKCk7CiAgICBpbml0X3NocnViKCk7CiAgICBpbml0X3NodWZmbGUoKTsKICAgIGluaXRfc2lnbmFsX2hpZ2goKTsKICAgIGluaXRfc2lnbWEoKTsKICAgIGluaXRfc2lnbmFsX2xvdygpOwogICAgaW5pdF9zaWduYWxfbWVkaXVtKCk7CiAgICBpbml0X3NpZ25hbF96ZXJvKCk7CiAgICBpbml0X3NpZ25hbCgpOwogICAgaW5pdF9zaWduYXR1cmUoKTsKICAgIGluaXRfc2lnbnBvc3RfYmlnKCk7CiAgICBpbml0X3NpZ25wb3N0KCk7CiAgICBpbml0X3NpcmVuKCk7CiAgICBpbml0X3NraXBfYmFjaygpOwogICAgaW5pdF9za3VsbCgpOwogICAgaW5pdF9za2lwX2ZvcndhcmQoKTsKICAgIGluaXRfc2xhY2soKTsKICAgIGluaXRfc2xhc2goKTsKICAgIGluaXRfc2xpY2UoKTsKICAgIGluaXRfc2xpZGVyc19ob3Jpem9udGFsKCk7CiAgICBpbml0X3NsaWRlcnNfdmVydGljYWwoKTsKICAgIGluaXRfc21hcnRwaG9uZV9jaGFyZ2luZygpOwogICAgaW5pdF9zbWFydHBob25lX25mYygpOwogICAgaW5pdF9zbWFydHBob25lKCk7CiAgICBpbml0X3NtaWxlX3BsdXMoKTsKICAgIGluaXRfc21pbGUoKTsKICAgIGluaXRfc25haWwoKTsKICAgIGluaXRfc25vd2ZsYWtlKCk7CiAgICBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQoKTsKICAgIGluaXRfc29mYSgpOwogICAgaW5pdF9zb2xhcl9wYW5lbCgpOwogICAgaW5pdF9zb3VwKCk7CiAgICBpbml0X3NwYWNlKCk7CiAgICBpbml0X3NwYWRlKCk7CiAgICBpbml0X3NwYXJrbGUoKTsKICAgIGluaXRfc3BhcmtsZXMoKTsKICAgIGluaXRfc3BlYWtlcigpOwogICAgaW5pdF9zcGVlY2goKTsKICAgIGluaXRfc3BlbGxfY2hlY2tfMigpOwogICAgaW5pdF9zcGVsbF9jaGVjaygpOwogICAgaW5pdF9zcGxpbmVfcG9pbnRlcigpOwogICAgaW5pdF9zcGxpbmUoKTsKICAgIGluaXRfc3BsaXQoKTsKICAgIGluaXRfc3Bvb2woKTsKICAgIGluaXRfc3BvdGxpZ2h0KCk7CiAgICBpbml0X3NwcmF5X2NhbigpOwogICAgaW5pdF9zcHJvdXQoKTsKICAgIGluaXRfc3F1YXJlX2FjdGl2aXR5KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X3VwKCk7CiAgICBpbml0X3NxdWFyZV9hc3RlcmlzaygpOwogICAgaW5pdF9zcXVhcmVfYm90dG9tX2Rhc2hlZF9zY2lzc29ycygpOwogICAgaW5pdF9zcXVhcmVfY2hhcnRfZ2FudHQoKTsKICAgIGluaXRfc3F1YXJlX2NoZWNrKCk7CiAgICBpbml0X3NxdWFyZV9jaGVja19iaWcoKTsKICAgIGluaXRfc3F1YXJlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9zcXVhcmVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X3NxdWFyZV9jb2RlKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfYm90dG9tX2NvZGUoKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlX2RpdmlkZSgpOwogICAgaW5pdF9zcXVhcmVfZG90KCk7CiAgICBpbml0X3NxdWFyZV9lcXVhbCgpOwogICAgaW5pdF9zcXVhcmVfZnVuY3Rpb24oKTsKICAgIGluaXRfc3F1YXJlX2thbmJhbigpOwogICAgaW5pdF9zcXVhcmVfbGlicmFyeSgpOwogICAgaW5pdF9zcXVhcmVfbSgpOwogICAgaW5pdF9zcXVhcmVfbWVudSgpOwogICAgaW5pdF9zcXVhcmVfbWludXMoKTsKICAgIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfc3F1YXJlX3Bhcmtpbmdfb2ZmKCk7CiAgICBpbml0X3NxdWFyZV9wYXJraW5nKCk7CiAgICBpbml0X3NxdWFyZV9wZW4oKTsKICAgIGluaXRfc3F1YXJlX3BhdXNlKCk7CiAgICBpbml0X3NxdWFyZV9wZXJjZW50KCk7CiAgICBpbml0X3NxdWFyZV9waSgpOwogICAgaW5pdF9zcXVhcmVfcGlsY3JvdygpOwogICAgaW5pdF9zcXVhcmVfcGxheSgpOwogICAgaW5pdF9zcXVhcmVfcGx1cygpOwogICAgaW5pdF9zcXVhcmVfcG93ZXIoKTsKICAgIGluaXRfc3F1YXJlX3JhZGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NjaXNzb3JzKCk7CiAgICBpbml0X3NxdWFyZV9yb3VuZF9jb3JuZXIoKTsKICAgIGluaXRfc3F1YXJlX3NpZ21hKCk7CiAgICBpbml0X3NxdWFyZV9zbGFzaCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfdmVydGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVfc3RhY2soKTsKICAgIGluaXRfc3F1YXJlX3N0YXIoKTsKICAgIGluaXRfc3F1YXJlX3N0b3AoKTsKICAgIGluaXRfc3F1YXJlX3Rlcm1pbmFsKCk7CiAgICBpbml0X3NxdWFyZV91c2VyX3JvdW5kKCk7CiAgICBpbml0X3NxdWFyZV91c2VyKCk7CiAgICBpbml0X3NxdWFyZV94KCk7CiAgICBpbml0X3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVzX2V4Y2x1ZGUoKTsKICAgIGluaXRfc3F1YXJlc19pbnRlcnNlY3QoKTsKICAgIGluaXRfc3F1YXJlc19zdWJ0cmFjdCgpOwogICAgaW5pdF9zcXVpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlc191bml0ZSgpOwogICAgaW5pdF9zcXVpcmNsZSgpOwogICAgaW5pdF9zcXVpcnJlbCgpOwogICAgaW5pdF9zdGFtcCgpOwogICAgaW5pdF9zdGFyX29mZigpOwogICAgaW5pdF9zdGFyX2hhbGYoKTsKICAgIGluaXRfc3RhcigpOwogICAgaW5pdF9zdGVwX2JhY2soKTsKICAgIGluaXRfc3RlcF9mb3J3YXJkKCk7CiAgICBpbml0X3N0ZXRob3Njb3BlKCk7CiAgICBpbml0X3N0aWNrZXIoKTsKICAgIGluaXRfc3RvbmUoKTsKICAgIGluaXRfc3RpY2t5X25vdGUoKTsKICAgIGluaXRfc3RvcmUoKTsKICAgIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsKCk7CiAgICBpbml0X3N0cmV0Y2hfdmVydGljYWwoKTsKICAgIGluaXRfc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9zdWJzY3JpcHQoKTsKICAgIGluaXRfc3VuX2RpbSgpOwogICAgaW5pdF9zdW5fbWVkaXVtKCk7CiAgICBpbml0X3N1bl9tb29uKCk7CiAgICBpbml0X3N1bl9zbm93KCk7CiAgICBpbml0X3N1bigpOwogICAgaW5pdF9zdW5yaXNlKCk7CiAgICBpbml0X3N1bnNldCgpOwogICAgaW5pdF9zdXBlcnNjcmlwdCgpOwogICAgaW5pdF9zd2F0Y2hfYm9vaygpOwogICAgaW5pdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9zd2l0Y2hfY2FtZXJhKCk7CiAgICBpbml0X3N3b3JkKCk7CiAgICBpbml0X3N3b3JkcygpOwogICAgaW5pdF9zeXJpbmdlKCk7CiAgICBpbml0X3RhYmxlXzIoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfbWVyZ2UoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfc3BsaXQoKTsKICAgIGluaXRfdGFibGVfb2ZfY29udGVudHMoKTsKICAgIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCgpOwogICAgaW5pdF90YWJsZV9wcm9wZXJ0aWVzKCk7CiAgICBpbml0X3RhYmxlX3Jvd3Nfc3BsaXQoKTsKICAgIGluaXRfdGFibGUyKCk7CiAgICBpbml0X3RhYmxldF9zbWFydHBob25lKCk7CiAgICBpbml0X3RhYmxldCgpOwogICAgaW5pdF90YWJsZXRzKCk7CiAgICBpbml0X3RhZygpOwogICAgaW5pdF90YWdzKCk7CiAgICBpbml0X3RhbGx5XzEoKTsKICAgIGluaXRfdGFsbHlfMigpOwogICAgaW5pdF90YWxseV8zKCk7CiAgICBpbml0X3RhbGx5XzQoKTsKICAgIGluaXRfdGFsbHlfNSgpOwogICAgaW5pdF90YW5nZW50KCk7CiAgICBpbml0X3RhcmdldCgpOwogICAgaW5pdF90ZWxlc2NvcGUoKTsKICAgIGluaXRfdGVudF90cmVlKCk7CiAgICBpbml0X3RlbnQoKTsKICAgIGluaXRfdGVzdF90dWJlX2RpYWdvbmFsKCk7CiAgICBpbml0X3Rlcm1pbmFsKCk7CiAgICBpbml0X3Rlc3RfdHViZSgpOwogICAgaW5pdF90ZXN0X3R1YmVzKCk7CiAgICBpbml0X3RleHRfYWxpZ25fY2VudGVyKCk7CiAgICBpbml0X3RleHRfYWxpZ25fZW5kKCk7CiAgICBpbml0X3RleHRfYWxpZ25fanVzdGlmeSgpOwogICAgaW5pdF90ZXh0X2FsaWduX3N0YXJ0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yX2lucHV0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yKCk7CiAgICBpbml0X3RleHRfcXVvdGUoKTsKICAgIGluaXRfdGV4dF9pbml0aWFsKCk7CiAgICBpbml0X3RleHRfc2VhcmNoKCk7CiAgICBpbml0X3RleHRfc2VsZWN0KCk7CiAgICBpbml0X3RoZWF0ZXIoKTsKICAgIGluaXRfdGV4dF93cmFwKCk7CiAgICBpbml0X3RoZXJtb21ldGVyX3Nub3dmbGFrZSgpOwogICAgaW5pdF90aGVybW9tZXRlcl9zdW4oKTsKICAgIGluaXRfdGhlcm1vbWV0ZXIoKTsKICAgIGluaXRfdGh1bWJzX2Rvd24oKTsKICAgIGluaXRfdGh1bWJzX3VwKCk7CiAgICBpbml0X3RpY2tldF9jaGVjaygpOwogICAgaW5pdF90aWNrZXRfbWludXMoKTsKICAgIGluaXRfdGlja2V0X3BlcmNlbnQoKTsKICAgIGluaXRfdGlja2V0X3BsdXMoKTsKICAgIGluaXRfdGlja2V0X3NsYXNoKCk7CiAgICBpbml0X3RpY2tldF94KCk7CiAgICBpbml0X3RpY2tldCgpOwogICAgaW5pdF90aWNrZXRzX3BsYW5lKCk7CiAgICBpbml0X3RpY2tldHMoKTsKICAgIGluaXRfdGltZXJfcmVzZXQoKTsKICAgIGluaXRfdGltZXJfb2ZmKCk7CiAgICBpbml0X3RpbWVyMigpOwogICAgaW5pdF90b2dnbGVfbGVmdCgpOwogICAgaW5pdF90b2dnbGVfcmlnaHQoKTsKICAgIGluaXRfdG9pbGV0KCk7CiAgICBpbml0X3Rvb2xfY2FzZSgpOwogICAgaW5pdF90b29sYm94KCk7CiAgICBpbml0X3Rvcm5hZG8oKTsKICAgIGluaXRfdG9ydXMoKTsKICAgIGluaXRfdG91Y2hwYWRfb2ZmKCk7CiAgICBpbml0X3RvdWNocGFkKCk7CiAgICBpbml0X3Rvd2VyX2NvbnRyb2woKTsKICAgIGluaXRfdG95X2JyaWNrKCk7CiAgICBpbml0X3RyYWZmaWNfY29uZSgpOwogICAgaW5pdF90cmFjdG9yKCk7CiAgICBpbml0X3RyYWluX2Zyb250X3R1bm5lbCgpOwogICAgaW5pdF90cmFpbl9mcm9udCgpOwogICAgaW5pdF90cmFpbl90cmFjaygpOwogICAgaW5pdF90cmFtX2Zyb250KCk7CiAgICBpbml0X3RyYW5zZ2VuZGVyKCk7CiAgICBpbml0X3RyYXNoXzIoKTsKICAgIGluaXRfdHJhc2goKTsKICAgIGluaXRfdHJlZV9kZWNpZHVvdXMoKTsKICAgIGluaXRfdHJlZV9wYWxtKCk7CiAgICBpbml0X3RyZWVfcGluZSgpOwogICAgaW5pdF90cmVlcygpOwogICAgaW5pdF90cmVsbG8oKTsKICAgIGluaXRfdHJlbmRpbmdfZG93bigpOwogICAgaW5pdF90cmVuZGluZ191cF9kb3duKCk7CiAgICBpbml0X3RyZW5kaW5nX3VwKCk7CiAgICBpbml0X3RyaWFuZ2xlX2FsZXJ0KCk7CiAgICBpbml0X3RyaWFuZ2xlX2Rhc2hlZCgpOwogICAgaW5pdF90cmlhbmdsZV9yaWdodCgpOwogICAgaW5pdF90cmlhbmdsZSgpOwogICAgaW5pdF90cm9waHkoKTsKICAgIGluaXRfdHJ1Y2tfZWxlY3RyaWMoKTsKICAgIGluaXRfdHJ1Y2soKTsKICAgIGluaXRfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X3R1cm50YWJsZSgpOwogICAgaW5pdF90dXJ0bGUoKTsKICAgIGluaXRfdHZfbWluaW1hbF9wbGF5KCk7CiAgICBpbml0X3R2X21pbmltYWwoKTsKICAgIGluaXRfdHYoKTsKICAgIGluaXRfdHdpdGNoKCk7CiAgICBpbml0X3R3aXR0ZXIoKTsKICAgIGluaXRfdHlwZV9vdXRsaW5lKCk7CiAgICBpbml0X3R5cGUoKTsKICAgIGluaXRfdW1icmVsbGFfb2ZmKCk7CiAgICBpbml0X3VtYnJlbGxhKCk7CiAgICBpbml0X3VuZGVybGluZSgpOwogICAgaW5pdF91bmRvXzIoKTsKICAgIGluaXRfdW5kb19kb3QoKTsKICAgIGluaXRfdW5kbygpOwogICAgaW5pdF91bmZvbGRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF91bmZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfdW5ncm91cCgpOwogICAgaW5pdF91bml2ZXJzaXR5KCk7CiAgICBpbml0X3VubGlua18yKCk7CiAgICBpbml0X3VubGluaygpOwogICAgaW5pdF91bnBsdWcoKTsKICAgIGluaXRfdXNiKCk7CiAgICBpbml0X3VwbG9hZCgpOwogICAgaW5pdF91c2VyX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfY29nKCk7CiAgICBpbml0X3VzZXJfbG9jaygpOwogICAgaW5pdF91c2VyX21pbnVzKCk7CiAgICBpbml0X3VzZXJfcGVuKCk7CiAgICBpbml0X3VzZXJfcGx1cygpOwogICAgaW5pdF91c2VyX3JvdW5kX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfcm91bmRfY29nKCk7CiAgICBpbml0X3VzZXJfcm91bmRfbWludXMoKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wZW4oKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wbHVzKCk7CiAgICBpbml0X3VzZXJfcm91bmRfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfcm91bmQoKTsKICAgIGluaXRfdXNlcl9yb3VuZF94KCk7CiAgICBpbml0X3VzZXJfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfc3RhcigpOwogICAgaW5pdF91c2VyX3goKTsKICAgIGluaXRfdXNlcigpOwogICAgaW5pdF91c2Vyc19yb3VuZCgpOwogICAgaW5pdF91c2VycygpOwogICAgaW5pdF91dGVuc2lsc19jcm9zc2VkKCk7CiAgICBpbml0X3V0ZW5zaWxzKCk7CiAgICBpbml0X3ZhbigpOwogICAgaW5pdF91dGlsaXR5X3BvbGUoKTsKICAgIGluaXRfdmFyaWFibGUoKTsKICAgIGluaXRfdmF1bHQoKTsKICAgIGluaXRfdmVjdG9yX3NxdWFyZSgpOwogICAgaW5pdF92ZWdhbigpOwogICAgaW5pdF92ZW5ldGlhbl9tYXNrKCk7CiAgICBpbml0X3ZlbnVzKCk7CiAgICBpbml0X3ZlbnVzX2FuZF9tYXJzKCk7CiAgICBpbml0X3ZpYnJhdGVfb2ZmKCk7CiAgICBpbml0X3ZpYnJhdGUoKTsKICAgIGluaXRfdmlkZW9fb2ZmKCk7CiAgICBpbml0X3ZpZGVvKCk7CiAgICBpbml0X3ZvaWNlbWFpbCgpOwogICAgaW5pdF92aWRlb3RhcGUoKTsKICAgIGluaXRfdmlldygpOwogICAgaW5pdF92b2xsZXliYWxsKCk7CiAgICBpbml0X3ZvbHVtZV8xKCk7CiAgICBpbml0X3ZvbHVtZV8yKCk7CiAgICBpbml0X3ZvbHVtZV9vZmYoKTsKICAgIGluaXRfdm9sdW1lX3goKTsKICAgIGluaXRfdm9sdW1lKCk7CiAgICBpbml0X3ZvdGUoKTsKICAgIGluaXRfd2FsbGV0X21pbmltYWwoKTsKICAgIGluaXRfd2FsbGV0X2NhcmRzKCk7CiAgICBpbml0X3dhbGxldCgpOwogICAgaW5pdF93YWxscGFwZXIoKTsKICAgIGluaXRfd2FuZF9zcGFya2xlcygpOwogICAgaW5pdF93YW5kKCk7CiAgICBpbml0X3dhcmVob3VzZSgpOwogICAgaW5pdF93YXNoaW5nX21hY2hpbmUoKTsKICAgIGluaXRfd2F0Y2goKTsKICAgIGluaXRfd2F2ZXNfYXJyb3dfZG93bigpOwogICAgaW5pdF93YXZlc19hcnJvd191cCgpOwogICAgaW5pdF93YXZlc19sYWRkZXIoKTsKICAgIGluaXRfd2F2ZXMoKTsKICAgIGluaXRfd2F5cG9pbnRzKCk7CiAgICBpbml0X3dlYmNhbSgpOwogICAgaW5pdF93ZWJob29rX29mZigpOwogICAgaW5pdF93ZWJob29rKCk7CiAgICBpbml0X3dlaWdodF90aWxkZSgpOwogICAgaW5pdF93ZWlnaHQoKTsKICAgIGluaXRfd2hlYXRfb2ZmKCk7CiAgICBpbml0X3doZWF0KCk7CiAgICBpbml0X3dob2xlX3dvcmQoKTsKICAgIGluaXRfd2lmaV9jb2coKTsKICAgIGluaXRfd2lmaV9sb3coKTsKICAgIGluaXRfd2lmaV9oaWdoKCk7CiAgICBpbml0X3dpZmlfb2ZmKCk7CiAgICBpbml0X3dpZmlfcGVuKCk7CiAgICBpbml0X3dpZmlfc3luYygpOwogICAgaW5pdF93aWZpX3plcm8oKTsKICAgIGluaXRfd2lmaSgpOwogICAgaW5pdF93aW5kX2Fycm93X2Rvd24oKTsKICAgIGluaXRfd2luZCgpOwogICAgaW5pdF93aW5lX29mZigpOwogICAgaW5pdF93aW5lKCk7CiAgICBpbml0X3dvcm0oKTsKICAgIGluaXRfd29ya2Zsb3coKTsKICAgIGluaXRfd3JlbmNoKCk7CiAgICBpbml0X3goKTsKICAgIGluaXRfeW91dHViZSgpOwogICAgaW5pdF96YXBfb2ZmKCk7CiAgICBpbml0X3phcCgpOwogICAgaW5pdF96b29tX2luKCk7CiAgICBpbml0X3pvb21fb3V0KCk7CiAgICBjcmVhdGVJY29ucyA9ICh7CiAgICAgIGljb25zOiBpY29uczUgPSB7fSwKICAgICAgbmFtZUF0dHIgPSAiZGF0YS1sdWNpZGUiLAogICAgICBhdHRycyA9IHt9LAogICAgICByb290OiByb290NiA9IGRvY3VtZW50LAogICAgICBpblRlbXBsYXRlcwogICAgfSA9IHt9KSA9PiB7CiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhpY29uczUpLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICJQbGVhc2UgcHJvdmlkZSBhbiBpY29ucyBvYmplY3QuXG5JZiB5b3Ugd2FudCB0byB1c2UgYWxsIHRoZSBpY29ucyB5b3UgY2FuIGltcG9ydCBpdCBsaWtlOlxuIGBpbXBvcnQgeyBjcmVhdGVJY29ucywgaWNvbnMgfSBmcm9tICdsdWNpZGUnO1xubHVjaWRlLmNyZWF0ZUljb25zKHtpY29uc30pO2AiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHJvb3Q2ID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiYGNyZWF0ZUljb25zKClgIG9ubHkgd29ya3MgaW4gYSBicm93c2VyIGVudmlyb25tZW50LiIpOwogICAgICB9CiAgICAgIGNvbnN0IGVsZW1lbnRzVG9SZXBsYWNlID0gQXJyYXkuZnJvbShyb290Ni5xdWVyeVNlbGVjdG9yQWxsKGBbJHtuYW1lQXR0cn1dYCkpOwogICAgICBlbGVtZW50c1RvUmVwbGFjZS5mb3JFYWNoKChlbGVtZW50NCkgPT4gcmVwbGFjZUVsZW1lbnQoZWxlbWVudDQsIHsgbmFtZUF0dHIsIGljb25zOiBpY29uczUsIGF0dHJzIH0pKTsKICAgICAgaWYgKGluVGVtcGxhdGVzKSB7CiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gQXJyYXkuZnJvbShyb290Ni5xdWVyeVNlbGVjdG9yQWxsKCJ0ZW1wbGF0ZSIpKTsKICAgICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgKICAgICAgICAgICh0ZW1wbGF0ZSkgPT4gY3JlYXRlSWNvbnMoewogICAgICAgICAgICBpY29uczogaWNvbnM1LAogICAgICAgICAgICBuYW1lQXR0ciwKICAgICAgICAgICAgYXR0cnMsCiAgICAgICAgICAgIHJvb3Q6IHRlbXBsYXRlLmNvbnRlbnQsCiAgICAgICAgICAgIGluVGVtcGxhdGVzCiAgICAgICAgICB9KQogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKG5hbWVBdHRyID09PSAiZGF0YS1sdWNpZGUiKSB7CiAgICAgICAgY29uc3QgZGVwcmVjYXRlZEVsZW1lbnRzID0gcm9vdDYucXVlcnlTZWxlY3RvckFsbCgiW2ljb24tbmFtZV0iKTsKICAgICAgICBpZiAoZGVwcmVjYXRlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAgICAgIltMdWNpZGVdIFNvbWUgaWNvbnMgd2VyZSBmb3VuZCB3aXRoIHRoZSBub3cgZGVwcmVjYXRlZCBpY29uLW5hbWUgYXR0cmlidXRlLiBUaGVzZSB3aWxsIHN0aWxsIGJlIHJlcGxhY2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHdpbGwgbm8gbG9uZ2VyIGJlIHN1cHBvcnRlZCBpbiB2MS4wIGFuZCB5b3Ugc2hvdWxkIHN3aXRjaCB0byBkYXRhLWx1Y2lkZSIKICAgICAgICAgICk7CiAgICAgICAgICBBcnJheS5mcm9tKGRlcHJlY2F0ZWRFbGVtZW50cykuZm9yRWFjaCgKICAgICAgICAgICAgKGVsZW1lbnQ0KSA9PiByZXBsYWNlRWxlbWVudChlbGVtZW50NCwgeyBuYW1lQXR0cjogImljb24tbmFtZSIsIGljb25zOiBpY29uczUsIGF0dHJzIH0pCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmRlbW8uanMKdmFyIGRlbW9GdW5jMjsKdmFyIGluaXRfZGVlc19pY29uX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9sdWNpZGUoKTsKICAgIGRlbW9GdW5jMiA9ICgpID0+IHsKICAgICAgY29uc3QgZmFJY29uczMgPSBPYmplY3Qua2V5cyhpY29uczQuZmEpOwogICAgICBjb25zb2xlLmxvZygiRmlyc3QgZmV3IEx1Y2lkZSBrZXlzOiIsIE9iamVjdC5rZXlzKGx1Y2lkZV9leHBvcnRzKS5zbGljZSgwLCA1KSk7CiAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdCA9IE9iamVjdC5rZXlzKGx1Y2lkZV9leHBvcnRzKS5maWx0ZXIoKGtleTIpID0+IHsKICAgICAgICBjb25zdCBpc1VwcGVyY2FzZUZpcnN0ID0ga2V5MlswXSA9PT0ga2V5MlswXS50b1VwcGVyQ2FzZSgpICYmIGtleTJbMF0gIT09IGtleTJbMF0udG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBpc0Z1bmN0aW9uMiA9IHR5cGVvZiBsdWNpZGVfZXhwb3J0c1trZXkyXSA9PT0gImZ1bmN0aW9uIjsKICAgICAgICBjb25zdCBub3RVdGlsaXR5ID0gIVsiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJY29ucyIsICJkZWZhdWx0Il0uaW5jbHVkZXMoa2V5Mik7CiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24yICYmIGlzVXBwZXJjYXNlRmlyc3QgJiYgbm90VXRpbGl0eTsKICAgICAgfSkubWFwKChwYXNjYWxOYW1lKSA9PiB7CiAgICAgICAgcmV0dXJuIHBhc2NhbE5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwYXNjYWxOYW1lLnNsaWNlKDEpOwogICAgICB9KTsKICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gTHVjaWRlIGljb25zYCk7CiAgICAgIGlmIChsdWNpZGVJY29uc0xpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgY29uc29sZS5sb2coIlRyeWluZyBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBmaW5kIEx1Y2lkZSBpY29ucyIpOwogICAgICAgIGlmIChpY29uc0FuZEFsaWFzZXNfZXhwb3J0cykgewogICAgICAgICAgY29uc3QgaWNvblNvdXJjZSA9IGljb25zQW5kQWxpYXNlc19leHBvcnRzIHx8IHt9OwogICAgICAgICAgbHVjaWRlSWNvbnNMaXN0LnB1c2goLi4uT2JqZWN0LmtleXMoaWNvblNvdXJjZSkpOwogICAgICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnMgdmlhIGFsdGVybmF0aXZlIG1ldGhvZGApOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb3B5QWxsSWNvbk5hbWVzID0gKCkgPT4gewogICAgICAgIGNvbnN0IGZhSWNvbnNMaXN0ID0gZmFJY29uczMubWFwKChuYW1lKSA9PiBgZmE6JHtuYW1lfWApOwogICAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdFByZWZpeGVkID0gbHVjaWRlSWNvbnNMaXN0Lm1hcCgobmFtZSkgPT4gYGx1Y2lkZToke25hbWV9YCk7CiAgICAgICAgY29uc3QgYWxsSWNvbnMgPSBbLi4uZmFJY29uc0xpc3QsIC4uLmx1Y2lkZUljb25zTGlzdFByZWZpeGVkXTsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYWxsSWNvbnMuam9pbigiXG4iKTsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnV0dG9uLnRleHRDb250ZW50OwogICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gYFx1MjcxMyBDb3BpZWQgJHthbGxJY29ucy5sZW5ndGh9IGljb24gbmFtZXMhYDsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICB9LCAyZTMpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBjb25zdCBzZWFyY2hJY29ucyA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICAgICAgY29uc3QgZGVtb0NvbnRhaW5lciA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZGVtb0NvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBkZW1vQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyIik7CiAgICAgICAgY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIpID0+IHsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgiZGF0YS1uYW1lIik7CiAgICAgICAgICBpZiAoc2VhcmNoVGVybSA9PT0gIiIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAgICAgfSBlbHNlIGlmIChpY29uTmFtZSAmJiBpY29uTmFtZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZGVtb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuc2VjdGlvbi1jb250YWluZXIiKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7CiAgICAgICAgICBjb25zdCB2aXNpYmxlSWNvbnMgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyOm5vdCguaGlkZGVuKSIpLmxlbmd0aDsKICAgICAgICAgIGNvbnN0IGNvdW50RWxlbWVudCA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmljb24tY291bnQiKTsKICAgICAgICAgIGlmIChjb3VudEVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgdG90YWxJY29uc0NvdW50ID0gc2VjdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoImZhLXNlY3Rpb24iKSA/IGZhSWNvbnMzLmxlbmd0aCA6IGx1Y2lkZUljb25zTGlzdC5sZW5ndGg7CiAgICAgICAgICAgIGNvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHZpc2libGVJY29ucyA9PT0gdG90YWxJY29uc0NvdW50ID8gYCR7dG90YWxJY29uc0NvdW50fSBpY29uc2AgOiBgJHt2aXNpYmxlSWNvbnN9IG9mICR7dG90YWxJY29uc0NvdW50fSBpY29uc2A7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IGNvcHlJY29uTmFtZSA9IChpY29uTmFtZVRvQ29weSwgdHlwZTUpID0+IHsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYCR7dHlwZTV9OiR7aWNvbk5hbWVUb0NvcHl9YDsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICAgIGNvbnN0IHRvb2x0aXAgPSBjdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRvb2x0aXAiKTsKICAgICAgICAgIGlmICh0b29sdGlwKSB7CiAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ2xpY2sgdG8gY29weSI7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHJldHVybiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGJhY2tncm91bmQ6ICMxMTExMTE7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMzBweDsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5zZWFyY2gtY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTBweDsKICAgIH0KICAgIAogICAgI2ljb25TZWFyY2ggewogICAgICBmbGV4OiAxOwogICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgfQogICAgCiAgICAjaWNvblNlYXJjaDpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIGJvcmRlci1jb2xvcjogI2U0MDAyYjsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbiB7CiAgICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAjYzQwMDFiOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQogICAgCiAgICBkZWVzLWljb24gewogICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgIH0KCiAgICAuaWNvbkNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDIwcHggMTZweCAwcHggMTZweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzMzMzsKICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yczsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICAKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICAgIH0KCiAgICAuaWNvbk5hbWUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6ICNjY2M7CiAgICAgIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIG1hcmdpbi1yaWdodDogLTE2cHg7CiAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICBtYXgtd2lkdGg6IDEyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzMzMzOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CiAgICAKICAgIC5hcGktbm90ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICNlNDAwMmI7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNDAwMmI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjgsIDAsIDQzLCAwLjEpOwogICAgfQogICAgCiAgICAuaWNvbi1jb3VudCB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICM4ODg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgfQogICAgCiAgICAuaWNvbnMtZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgfQogICAgCiAgICAuY29weS10b29sdGlwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICBjb2xvcjogd2hpdGU7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgdG9wOiAtMzBweDsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIAogICAgLmljb25Db250YWluZXI6aG92ZXIgLmNvcHktdG9vbHRpcCB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLmljb25Db250YWluZXI6aG92ZXIgZGVlcy1pY29uIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogICAgfQogICAgCiAgICAuaGlkZGVuIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtb0NvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtY29udGFpbmVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpY29uU2VhcmNoIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGljb25zLi4uIiBAaW5wdXQ9JHtzZWFyY2hJY29uc30+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYWxsLWJ1dHRvbiIgQGNsaWNrPSR7Y29weUFsbEljb25OYW1lc30+8J+TiyBDb3B5IEFsbCBJY29uIE5hbWVzPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iYXBpLW5vdGUiPgogICAgICBOZXcgQVBJOiBVc2UgPGNvZGU+aWNvbj0iZmE6aWNvbk5hbWUiPC9jb2RlPiBvciA8Y29kZT5pY29uPSJsdWNpZGU6aWNvbk5hbWUiPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmljb25GQTwvY29kZT4uIAogICAgICBDbGljayBhbnkgaWNvbiB0byBjb3B5IGl0cyBuZXcgZm9ybWF0IHRvIGNsaXBib2FyZC4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBmYS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgRm9udEF3ZXNvbWUgSWNvbnMKICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1jb3VudCI+JHtmYUljb25zMy5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHtmYUljb25zMy5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGZhOiR7aWNvbk5hbWV9YDsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbkNvbnRhaW5lciBmYS1pY29uIiBkYXRhLW5hbWU9JHtpY29uTmFtZS50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKSA9PiBjb3B5SWNvbk5hbWUoaWNvbk5hbWUsICJmYSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+ZmE6JHtpY29uTmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3B5LXRvb2x0aXAiPkNsaWNrIHRvIGNvcHk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tY29udGFpbmVyIGx1Y2lkZS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgTHVjaWRlIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnM8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpY29ucy1ncmlkIj4KICAgICAgICAke2x1Y2lkZUljb25zTGlzdC5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgbHVjaWRlLWljb24iIGRhdGEtbmFtZT0ke2ljb25OYW1lLnRvTG93ZXJDYXNlKCl9IEBjbGljaz0keygpID0+IGNvcHlJY29uTmFtZShpY29uTmFtZSwgImx1Y2lkZSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+bHVjaWRlOiR7aWNvbk5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10b29sdGlwIj5DbGljayB0byBjb3B5PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmpzCmZ1bmN0aW9uIGxpbWl0Q2FjaGVTaXplKCkgewogIGlmIChpY29uQ2FjaGUuc2l6ZSA+IE1BWF9DQUNIRV9TSVpFKSB7CiAgICBjb25zdCBrZXlzVG9EZWxldGUgPSBBcnJheS5mcm9tKGljb25DYWNoZS5rZXlzKCkpLnNsaWNlKDAsIE1BWF9DQUNIRV9TSVpFIC8gNSk7CiAgICBrZXlzVG9EZWxldGUuZm9yRWFjaCgoa2V5MikgPT4gaWNvbkNhY2hlLmRlbGV0ZShrZXkyKSk7CiAgfQp9CnZhciBfX2VzRGVjb3JhdGU0LCBfX3J1bkluaXRpYWxpemVyczUsIGZhSWNvbnMyLCBpY29uczQsIGljb25DYWNoZSwgTUFYX0NBQ0hFX1NJWkUsIERlZXNJY29uOwp2YXIgaW5pdF9kZWVzX2ljb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUoKTsKICAgIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zKCk7CiAgICBpbml0X2ZyZWVfcmVndWxhcl9zdmdfaWNvbnMoKTsKICAgIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMoKTsKICAgIGluaXRfZGVlc19pY29uX2RlbW8oKTsKICAgIGluaXRfbHVjaWRlKCk7CiAgICBpbml0X2x1Y2lkZSgpOwogICAgX19lc0RlY29yYXRlNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIGZhSWNvbnMyID0gewogICAgICAvLyBub3JtYWwKICAgICAgYXJyb3dSaWdodDogZmFBcnJvd1JpZ2h0LAogICAgICBhcnJvd1VwUmlnaHRGcm9tU3F1YXJlOiBmYUFycm93VXBSaWdodEZyb21TcXVhcmUsCiAgICAgIGJlbGw6IGZhQmVsbDIsCiAgICAgIGJ1ZzogZmFCdWcsCiAgICAgIGJ1aWxkaW5nOiBmYUJ1aWxkaW5nMiwKICAgICAgY2FyZXRMZWZ0OiBmYUNhcmV0TGVmdCwKICAgICAgY2FyZXRSaWdodDogZmFDYXJldFJpZ2h0LAogICAgICBjaGVjazogZmFDaGVjaywKICAgICAgY2lyY2xlSW5mbzogZmFDaXJjbGVJbmZvLAogICAgICBjaXJjbGVDaGVjazogZmFDaXJjbGVDaGVjaywKICAgICAgY2lyY2xlQ2hlY2tTb2xpZDogZmFDaXJjbGVDaGVjazIsCiAgICAgIGNpcmNsZVhtYXJrOiBmYUNpcmNsZVhtYXJrLAogICAgICBjaXJjbGVYbWFya1NvbGlkOiBmYUNpcmNsZVhtYXJrMiwKICAgICAgY2xvY2tSb3RhdGVMZWZ0OiBmYUNsb2NrUm90YXRlTGVmdCwKICAgICAgY29weTogZmFDb3B5LAogICAgICBjb3B5U29saWQ6IGZhQ29weTIsCiAgICAgIGRlc2t0b3A6IGZhRGVza3RvcCwKICAgICAgZXllOiBmYUV5ZTIsCiAgICAgIGV5ZVNsYXNoOiBmYUV5ZVNsYXNoMiwKICAgICAgZmlsZUludm9pY2U6IGZhRmlsZUludm9pY2UsCiAgICAgIGZpbGVJbnZvaWNlRG9sbGVyOiBmYUZpbGVJbnZvaWNlRG9sbGFyLAogICAgICBnZWFyOiBmYUdlYXIsCiAgICAgIGdyaXA6IGZhR3JpcCwKICAgICAgbWFnbmlmeWluZ0dsYXNzOiBmYU1hZ25pZnlpbmdHbGFzcywKICAgICAgbWVzc2FnZTogZmFNZXNzYWdlLAogICAgICBtZXNzYWdlU29saWQ6IGZhTWVzc2FnZTIsCiAgICAgIG1vbmV5Q2hlY2tEb2xsYXI6IGZhTW9uZXlDaGVja0RvbGxhciwKICAgICAgbXVnSG90OiBmYU11Z0hvdCwKICAgICAgbWludXM6IGZhTWludXMsCiAgICAgIG5ldHdvcmtXaXJlZDogZmFOZXR3b3JrV2lyZWQsCiAgICAgIHBhcGVyY2xpcDogZmFQYXBlcmNsaXAsCiAgICAgIHBhc3RlOiBmYVBhc3RlLAogICAgICBwYXN0ZVNvbGlkOiBmYVBhc3RlMiwKICAgICAgcGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUyLAogICAgICBwbHVzOiBmYVBsdXMsCiAgICAgIHJlY2VpcHQ6IGZhUmVjZWlwdCwKICAgICAgcnNzOiBmYVJzcywKICAgICAgc2hhcmU6IGZhU2hhcmUsCiAgICAgIHN1bjogZmFTdW4sCiAgICAgIHN1blNvbGlkOiBmYVN1bjIsCiAgICAgIHRlcm1pbmFsOiBmYVRlcm1pbmFsLAogICAgICB0cmFzaDogZmFUcmFzaCwKICAgICAgdHJhc2hTb2xpZDogZmFUcmFzaCwKICAgICAgdHJhc2hDYW46IGZhVHJhc2hDYW4sCiAgICAgIHRyYXNoQ2FuU29saWQ6IGZhVHJhc2hDYW4yLAogICAgICB1c2VyczogZmFVc2VycywKICAgICAgd2FsbGV0OiBmYVdhbGxldCwKICAgICAgeG1hcms6IGZhWG1hcmssCiAgICAgIC8vIGJyYW5kcwogICAgICBmYWNlYm9vazogZmFGYWNlYm9vaywKICAgICAgZ29vZ2xlOiBmYUdvb2dsZSwKICAgICAgaW5zdGFncmFtOiBmYUluc3RhZ3JhbSwKICAgICAgbGlua2VkaW46IGZhTGlua2VkaW4sCiAgICAgIG1lZGl1bTogZmFNZWRpdW0sCiAgICAgIHNsYWNrOiBmYVNsYWNrSGFzaCwKICAgICAgdGlrdG9rOiBmYVRpa3RvaywKICAgICAgdHdpdHRlcjogZmFUd2l0dGVyCiAgICB9OwogICAgaWNvbnM0ID0gewogICAgICBmYTogZmFJY29uczIKICAgIH07CiAgICBpY29uQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7CiAgICBEZWVzSWNvbiA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWljb24iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2ljb25GQV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25GQV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvblNpemVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pY29uU2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uU2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbG9yX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29sb3JfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N0cm9rZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSWNvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9pY29uRkFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgY29udmVydGVyOiB7CiAgICAgICAgICAgICAgLy8gQ29udmVydCBhdHRyaWJ1dGUgc3RyaW5nIHRvIHByb3BlcnR5IChmb3IgcmVmbGVjdGVkIGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyLAogICAgICAgICAgICAgIC8vIENvbnZlcnQgcHJvcGVydHkgdG8gYXR0cmlidXRlIChmb3IgcmVmbGVjdGlvbikKICAgICAgICAgICAgICB0b0F0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pY29uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIGNvbnZlcnRlcjogewogICAgICAgICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMiwKICAgICAgICAgICAgICB0b0F0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pY29uU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9jb2xvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25GQV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpY29uRkEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImljb25GQSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uRkEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pY29uRkEgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25GQV9pbml0aWFsaXplcnMsIF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfaWNvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmljb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uX2luaXRpYWxpemVycywgX2ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfaWNvblNpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImljb25TaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmljb25TaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvblNpemUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25TaXplX2luaXRpYWxpemVycywgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2NvbG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2xvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbG9yID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xvcl9pbml0aWFsaXplcnMsIF9jb2xvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdHJva2VXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3Ryb2tlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3Ryb2tlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zdHJva2VXaWR0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3Ryb2tlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSWNvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI7CiAgICAgICAgI2ljb25GQV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uRkFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgICAgIC8qKgogICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYGljb25gIHByb3BlcnR5IGluc3RlYWQgd2l0aCBmb3JtYXQgImZhOmljb25OYW1lIiBvciAibHVjaWRlOmljb25OYW1lIgogICAgICAgICAqLwogICAgICAgIGdldCBpY29uRkEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbkZBX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uRkEodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uRkFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25GQV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBwcmVmZXJyZWQgaWNvbiBwcm9wZXJ0eS4gVXNlIGZvcm1hdCAiZmE6aWNvbk5hbWUiIG9yICJsdWNpZGU6aWNvbk5hbWUiCiAgICAgICAgICogRXhhbXBsZXM6ICJmYTpjaGVjayIsICJsdWNpZGU6bWVudSIKICAgICAgICAgKi8KICAgICAgICBnZXQgaWNvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaWNvblNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25TaXplX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGljb25TaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uU2l6ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb2xvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvblNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2NvbG9yX2luaXRpYWxpemVycywgImN1cnJlbnRDb2xvciIpKTsKICAgICAgICBnZXQgY29sb3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbG9yKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29sb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9jb2xvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfc3Ryb2tlV2lkdGhfaW5pdGlhbGl6ZXJzLCAyKSk7CiAgICAgICAgZ2V0IHN0cm9rZVdpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzdHJva2VXaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEZvciB0cmFja2luZyB3aGVuIHdlIG5lZWQgdG8gcmUtcmVuZGVyCiAgICAgICAgbGFzdEljb24gPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9zdHJva2VXaWR0aF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGxhc3RJY29uU2l6ZSA9IG51bGw7CiAgICAgICAgbGFzdENvbG9yID0gbnVsbDsKICAgICAgICBsYXN0U3Ryb2tlV2lkdGggPSBudWxsOwogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldHMgdGhlIGVmZmVjdGl2ZSBpY29uIHZhbHVlLCBzdXBwb3J0aW5nIGJvdGggdGhlIG5ldyBgaWNvbmAgcHJvcGVydHkKICAgICAgICAgKiBhbmQgdGhlIGxlZ2FjeSBgaWNvbkZBYCBwcm9wZXJ0eSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAgICAgICAgKiBQcmVmZXJzIGBpY29uYCBpZiBib3RoIGFyZSBzZXQuCiAgICAgICAgICovCiAgICAgICAgZ2V0RWZmZWN0aXZlSWNvbigpIHsKICAgICAgICAgIGlmICh0aGlzLmljb24pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmljb25GQSkgewogICAgICAgICAgICBpZiAodGhpcy5pY29uRkEuc3RhcnRzV2l0aCgibHVjaWRlOiIpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbkZBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBgZmE6JHt0aGlzLmljb25GQX1gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFBhcnNlcyBhbiBpY29uIHN0cmluZyBpbnRvIGl0cyB0eXBlIGFuZCBuYW1lIHBhcnRzCiAgICAgICAgICogQHBhcmFtIGljb25TdHIgVGhlIGljb24gc3RyaW5nIGluIGZvcm1hdCAidHlwZTpuYW1lIgogICAgICAgICAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHR5cGUgYW5kIG5hbWUgcHJvcGVydGllcwogICAgICAgICAqLwogICAgICAgIHBhcnNlSWNvblN0cmluZyhpY29uU3RyKSB7CiAgICAgICAgICBjb25zdCBsb3dlclN0ciA9IGljb25TdHIudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChsb3dlclN0ci5zdGFydHNXaXRoKCJmYToiKSkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJmYSIsCiAgICAgICAgICAgICAgbmFtZTogaWNvblN0ci5zdWJzdHJpbmcoMykKICAgICAgICAgICAgICAvLyBSZW1vdmUgJ2ZhOicgcHJlZml4CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyU3RyLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJsdWNpZGUiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIuc3Vic3RyaW5nKDcpCiAgICAgICAgICAgICAgLy8gUmVtb3ZlICdsdWNpZGU6JyBwcmVmaXgKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdHlwZTogImx1Y2lkZSIsCiAgICAgICAgICAgICAgbmFtZTogaWNvblN0cgogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZW5kZXJMdWNpZGVJY29uKGljb25OYW1lKSB7CiAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IGBsdWNpZGU6JHtpY29uTmFtZX06JHt0aGlzLmljb25TaXplfToke3RoaXMuY29sb3J9OiR7dGhpcy5zdHJva2VXaWR0aH1gOwogICAgICAgICAgaWYgKGljb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7CiAgICAgICAgICAgIHJldHVybiBpY29uQ2FjaGUuZ2V0KGNhY2hlS2V5KSB8fCAiIjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHBhc2NhbENhc2VOYW1lID0gaWNvbk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpY29uTmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgaWYgKCFsdWNpZGVfZXhwb3J0c1twYXNjYWxDYXNlTmFtZV0pIHsKICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEx1Y2lkZSBpY29uICcke3Bhc2NhbENhc2VOYW1lfScgbm90IGZvdW5kIGluIGx1Y2lkZUljb25zIG9iamVjdGApOwogICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzdmdFbGVtZW50ID0gY3JlYXRlRWxlbWVudDIobHVjaWRlX2V4cG9ydHNbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ZnRWxlbWVudC5vdXRlckhUTUw7CiAgICAgICAgICAgIGljb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7CiAgICAgICAgICAgIGxpbWl0Q2FjaGVTaXplKCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtpY29uTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iJHt0aGlzLmljb25TaXplfSIgaGVpZ2h0PSIke3RoaXMuaWNvblNpemV9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHt0aGlzLmNvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3RoaXMuc3Ryb2tlV2lkdGh9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LXNpemU9IjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGZpbGw9IiR7dGhpcy5jb2xvcn0iPiR7aWNvbk5hbWV9PC90ZXh0PgogICAgICA8L3N2Zz5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogSW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgKi8KICAgICAgI2ljb25Db250YWluZXIgc3ZnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogSGVscHMgd2l0aCBhbmltYXRpb25zICovCiAgICAgICAgY29udGFpbjogc3RyaWN0OyAvKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gKi8KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5pY29uU2l6ZSkgewogICAgICAgICAgICB0aGlzLmljb25TaXplID0gcGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVJY29uID0gdGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7CiAgICAgICAgICBpZiAodGhpcy5sYXN0SWNvbiA9PT0gZWZmZWN0aXZlSWNvbiAmJiB0aGlzLmxhc3RJY29uU2l6ZSA9PT0gdGhpcy5pY29uU2l6ZSAmJiB0aGlzLmxhc3RDb2xvciA9PT0gdGhpcy5jb2xvciAmJiB0aGlzLmxhc3RTdHJva2VXaWR0aCA9PT0gdGhpcy5zdHJva2VXaWR0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gZWZmZWN0aXZlSWNvbjsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gdGhpcy5pY29uU2l6ZTsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gdGhpcy5jb2xvcjsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiI2ljb25Db250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyIHx8ICFlZmZlY3RpdmVJY29uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB7IHR5cGU6IHR5cGU1LCBuYW1lIH0gPSB0aGlzLnBhcnNlSWNvblN0cmluZyhlZmZlY3RpdmVJY29uKTsKICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAibHVjaWRlIikgewogICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIGlmIChsdWNpZGVfZXhwb3J0c1twYXNjYWxDYXNlTmFtZV0pIHsKICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQyKGx1Y2lkZV9leHBvcnRzW3Bhc2NhbENhc2VOYW1lXSwgewogICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLAogICAgICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaWNvblNpemUsCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuc3Ryb2tlV2lkdGgKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHN2Z0VsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIGVsZW1lbnQgZm9yICR7cGFzY2FsQ2FzZU5hbWV9YCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlbmRlcmluZyBMdWNpZGUgaWNvbjpgLCBlcnJvcik7CiAgICAgICAgICAgICAgICBjb25zdCBpY29uSHRtbCA9IHRoaXMucmVuZGVyTHVjaWRlSWNvbihuYW1lKTsKICAgICAgICAgICAgICAgIGlmIChpY29uSHRtbCkgewogICAgICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaWNvbkh0bWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGZhSWNvbiA9IGljb25zNC5mYVtuYW1lXTsKICAgICAgICAgICAgICBpZiAoZmFJY29uKSB7CiAgICAgICAgICAgICAgICBjb25zdCBpY29uSHRtbCA9IGljb24yKGZhSWNvbikuaHRtbFswXTsKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBpY29uSHRtbDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGb250QXdlc29tZSBpY29uIG5vdCBmb3VuZDogJHtuYW1lfWApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgdXBkYXRpbmcgaWNvbiAke2VmZmVjdGl2ZUljb259OmAsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQ2xlYW4gdXAgcmVzb3VyY2VzIHdoZW4gZWxlbWVudCBpcyByZW1vdmVkCiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5sYXN0SWNvbiA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RJY29uU2l6ZSA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RDb2xvciA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RTdHJva2VXaWR0aCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJY29uMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL3ZlcnNpb25zLmpzCnZhciBDRE5fVkVSU0lPTlMsIENETl9CQVNFOwp2YXIgaW5pdF92ZXJzaW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy92ZXJzaW9ucy5qcyIoKSB7CiAgICBDRE5fVkVSU0lPTlMgPSB7CiAgICAgIHh0ZXJtOiAiNS4zLjAiLAogICAgICB4dGVybUFkZG9uRml0OiAiMC44LjAiLAogICAgICB4dGVybUFkZG9uU2VhcmNoOiAiMC4xMy4wIiwKICAgICAgaGlnaGxpZ2h0SnM6ICIxMS4xMS4xIiwKICAgICAgYXBleGNoYXJ0czogIjUuMy42IiwKICAgICAgdGlwdGFwOiAiMi4yMy4wIiwKICAgICAgZm9udGF3ZXNvbWU6ICI3LjEuMCIKICAgIH07CiAgICBDRE5fQkFTRSA9ICJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy9EZWVzU2VydmljZUxpYkxvYWRlci5qcwp2YXIgRGVlc1NlcnZpY2VMaWJMb2FkZXI7CnZhciBpbml0X0RlZXNTZXJ2aWNlTGliTG9hZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL0RlZXNTZXJ2aWNlTGliTG9hZGVyLmpzIigpIHsKICAgIGluaXRfdmVyc2lvbnMoKTsKICAgIERlZXNTZXJ2aWNlTGliTG9hZGVyID0gY2xhc3MgX0RlZXNTZXJ2aWNlTGliTG9hZGVyIHsKICAgICAgc3RhdGljIGluc3RhbmNlOwogICAgICAvLyBDYWNoZWQgbGlicmFyeSByZWZlcmVuY2VzCiAgICAgIHh0ZXJtTGliID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkxpYiA9IG51bGw7CiAgICAgIHh0ZXJtU2VhcmNoQWRkb25MaWIgPSBudWxsOwogICAgICBoaWdobGlnaHRKc0xpYiA9IG51bGw7CiAgICAgIGFwZXhDaGFydHNMaWIgPSBudWxsOwogICAgICB0aXB0YXBMaWIgPSBudWxsOwogICAgICAvLyBMb2FkaW5nIHByb21pc2VzIHRvIHByZXZlbnQgZHVwbGljYXRlIGNvbmN1cnJlbnQgbG9hZHMKICAgICAgeHRlcm1Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICBhcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICB0aXB0YXBMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBEZWVzU2VydmljZUxpYkxvYWRlcgogICAgICAgKi8KICAgICAgc3RhdGljIGdldEluc3RhbmNlKCkgewogICAgICAgIGlmICghX0RlZXNTZXJ2aWNlTGliTG9hZGVyLmluc3RhbmNlKSB7CiAgICAgICAgICBfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2UgPSBuZXcgX0RlZXNTZXJ2aWNlTGliTG9hZGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgeHRlcm0gdGVybWluYWwgZW11bGF0b3IgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8geHRlcm0gbW9kdWxlIHdpdGggVGVybWluYWwgY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybSgpIHsKICAgICAgICBpZiAodGhpcy54dGVybUxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm1AJHtDRE5fVkVSU0lPTlMueHRlcm19Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgYXdhaXQgdGhpcy5pbmplY3RYdGVybVN0eWxlcygpOwogICAgICAgICAgdGhpcy54dGVybUxpYiA9IHsKICAgICAgICAgICAgVGVybWluYWw6IG1vZHVsZS5UZXJtaW5hbAogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybS1hZGRvbi1maXQgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gRml0QWRkb24gY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybUZpdEFkZG9uKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtRml0QWRkb25MaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm0tYWRkb24tZml0QCR7Q0ROX1ZFUlNJT05TLnh0ZXJtQWRkb25GaXR9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uTGliID0gewogICAgICAgICAgICBGaXRBZGRvbjogbW9kdWxlLkZpdEFkZG9uCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybS1hZGRvbi1zZWFyY2ggZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gU2VhcmNoQWRkb24gY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybVNlYXJjaEFkZG9uKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm0tYWRkb24tc2VhcmNoQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtQWRkb25TZWFyY2h9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy54dGVybVNlYXJjaEFkZG9uTGliID0gewogICAgICAgICAgICBTZWFyY2hBZGRvbjogbW9kdWxlLlNlYXJjaEFkZG9uCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5qZWN0IHh0ZXJtIENTUyBzdHlsZXMgaW50byB0aGUgZG9jdW1lbnQgaGVhZAogICAgICAgKi8KICAgICAgYXN5bmMgaW5qZWN0WHRlcm1TdHlsZXMoKSB7CiAgICAgICAgY29uc3Qgc3R5bGVJZCA9ICJ4dGVybS1jZG4tc3R5bGVzIjsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNzc1VybCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgc3R5bGUuaWQgPSBzdHlsZUlkOwogICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzVGV4dDsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBoaWdobGlnaHQuanMgc3ludGF4IGhpZ2hsaWdodGVyIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhpZ2hsaWdodC5qcyBBUEkKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRIaWdobGlnaHRKcygpIHsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRKc0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0vaGlnaGxpZ2h0LmpzQCR7Q0ROX1ZFUlNJT05TLmhpZ2hsaWdodEpzfS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMaWIgPSBtb2R1bGUuZGVmYXVsdDsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBBcGV4Q2hhcnRzIGNoYXJ0aW5nIGxpYnJhcnkgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gQXBleENoYXJ0cyBjb25zdHJ1Y3RvcgogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZEFwZXhDaGFydHMoKSB7CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS9hcGV4Y2hhcnRzQCR7Q0ROX1ZFUlNJT05TLmFwZXhjaGFydHN9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy5hcGV4Q2hhcnRzTGliID0gbW9kdWxlLmRlZmF1bHQ7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIFRpcHRhcCByaWNoIHRleHQgZWRpdG9yIGFuZCBleHRlbnNpb25zIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIFRpcHRhcCBidW5kbGUgd2l0aCBFZGl0b3IgYW5kIGV4dGVuc2lvbnMKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRUaXB0YXAoKSB7CiAgICAgICAgaWYgKHRoaXMudGlwdGFwTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2ZXJzaW9uMiA9IENETl9WRVJTSU9OUy50aXB0YXA7CiAgICAgICAgICBjb25zdCBbY29yZU1vZHVsZSwgc3RhcnRlcktpdE1vZHVsZSwgdW5kZXJsaW5lTW9kdWxlLCB0ZXh0QWxpZ25Nb2R1bGUsIGxpbmtNb2R1bGUsIHR5cG9ncmFwaHlNb2R1bGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvY29yZUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvc3RhcnRlci1raXRAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmVAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi10ZXh0LWFsaWduQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9leHRlbnNpb24tbGlua0Ake3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXR5cG9ncmFwaHlAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKQogICAgICAgICAgXSk7CiAgICAgICAgICB0aGlzLnRpcHRhcExpYiA9IHsKICAgICAgICAgICAgRWRpdG9yOiBjb3JlTW9kdWxlLkVkaXRvciwKICAgICAgICAgICAgU3RhcnRlcktpdDogc3RhcnRlcktpdE1vZHVsZS5kZWZhdWx0IHx8IHN0YXJ0ZXJLaXRNb2R1bGUuU3RhcnRlcktpdCwKICAgICAgICAgICAgVW5kZXJsaW5lOiB1bmRlcmxpbmVNb2R1bGUuZGVmYXVsdCB8fCB1bmRlcmxpbmVNb2R1bGUuVW5kZXJsaW5lLAogICAgICAgICAgICBUZXh0QWxpZ246IHRleHRBbGlnbk1vZHVsZS5kZWZhdWx0IHx8IHRleHRBbGlnbk1vZHVsZS5UZXh0QWxpZ24sCiAgICAgICAgICAgIExpbms6IGxpbmtNb2R1bGUuZGVmYXVsdCB8fCBsaW5rTW9kdWxlLkxpbmssCiAgICAgICAgICAgIFR5cG9ncmFwaHk6IHR5cG9ncmFwaHlNb2R1bGUuZGVmYXVsdCB8fCB0eXBvZ3JhcGh5TW9kdWxlLlR5cG9ncmFwaHkKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHJlbG9hZCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gcGFyYWxsZWwKICAgICAgICogVXNlZnVsIGZvciB3YXJtaW5nIHRoZSBjYWNoZSBiZWZvcmUgY29tcG9uZW50cyBhcmUgcmVuZGVyZWQKICAgICAgICovCiAgICAgIGFzeW5jIHByZWxvYWRBbGwoKSB7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgdGhpcy5sb2FkWHRlcm0oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtRml0QWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtU2VhcmNoQWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZEhpZ2hsaWdodEpzKCksCiAgICAgICAgICB0aGlzLmxvYWRBcGV4Q2hhcnRzKCksCiAgICAgICAgICB0aGlzLmxvYWRUaXB0YXAoKQogICAgICAgIF0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIHNwZWNpZmljIGxpYnJhcnkgaXMgYWxyZWFkeSBsb2FkZWQKICAgICAgICovCiAgICAgIGlzTG9hZGVkKGxpYnJhcnkyKSB7CiAgICAgICAgc3dpdGNoIChsaWJyYXJ5MikgewogICAgICAgICAgY2FzZSAieHRlcm0iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgInh0ZXJtRml0QWRkb24iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAieHRlcm1TZWFyY2hBZGRvbiI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJoaWdobGlnaHRKcyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAiYXBleENoYXJ0cyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJ0aXB0YXAiOgogICAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWIgIT09IG51bGw7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzCnZhciBpbml0X3NlcnZpY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfRGVlc1NlcnZpY2VMaWJMb2FkZXIoKTsKICAgIGluaXRfdmVyc2lvbnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9JRXhlY3V0aW9uRW52aXJvbm1lbnQuanMKdmFyIGluaXRfSUV4ZWN1dGlvbkVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL0lFeGVjdXRpb25FbnZpcm9ubWVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMKdmFyIGluaXRfaW50ZXJmYWNlczMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9JRXhlY3V0aW9uRW52aXJvbm1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcwp2YXIgREVGQVVMVF9FRElUT1JfT1JJR0lOLCBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFLCBTRUFSQ0hfUEFSQU1fRVJST1IsIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiwgQlJPQURDQVNUX0NIQU5ORUxfTkFNRSwgU1RPUkFHRV9UT0tFTlNfTkFNRSwgU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUsIFNUT1JBR0VfUE9QVVBfTkFNRTsKdmFyIGluaXRfY29uc3RhbnRzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcyIoKSB7CiAgICBERUZBVUxUX0VESVRPUl9PUklHSU4gPSAiaHR0cHM6Ly9zdGFja2JsaXR6LmNvbSI7CiAgICBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFID0gImNvZGUiOwogICAgU0VBUkNIX1BBUkFNX0VSUk9SID0gImVycm9yIjsKICAgIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiA9ICJlcnJvcl9kZXNjcmlwdGlvbiI7CiAgICBCUk9BRENBU1RfQ0hBTk5FTF9OQU1FID0gIl9fd2NfYXBpX2JjX18iOwogICAgU1RPUkFHRV9UT0tFTlNfTkFNRSA9ICJfX3djX2FwaV90b2tlbnNfXyI7CiAgICBTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSA9ICJfX3djX2FwaV92ZXJpZmllcl9fIjsKICAgIFNUT1JBR0VfUE9QVVBfTkFNRSA9ICJfX3djX2FwaV9wb3B1cF9fIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMKdmFyIFR5cGVkRXZlbnRUYXJnZXQ7CnZhciBpbml0X1R5cGVkRXZlbnRUYXJnZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9UeXBlZEV2ZW50VGFyZ2V0LmpzIigpIHsKICAgIFR5cGVkRXZlbnRUYXJnZXQgPSBjbGFzcyB7CiAgICAgIF9idXMgPSBuZXcgRXZlbnRUYXJnZXQoKTsKICAgICAgbGlzdGVuKGxpc3RlbmVyMikgewogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRMaXN0ZW5lcihldmVudCkgewogICAgICAgICAgbGlzdGVuZXIyKGV2ZW50LmRhdGEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9idXMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHdyYXBwZWRMaXN0ZW5lcik7CiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuX2J1cy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgd3JhcHBlZExpc3RlbmVyKTsKICAgICAgfQogICAgICBmaXJlRXZlbnQoZGF0YSkgewogICAgICAgIHRoaXMuX2J1cy5kaXNwYXRjaEV2ZW50KG5ldyBNZXNzYWdlRXZlbnQoIm1lc3NhZ2UiLCB7IGRhdGEgfSkpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvdG9rZW5zLmpzCmZ1bmN0aW9uIGNsZWFyVG9rZW5zSW5TdG9yYWdlKCkgewogIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUpOwp9CmZ1bmN0aW9uIGFkZEFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVyKGxpc3RlbmVyMikgewogIHJldHVybiBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMubGlzdGVuKGxpc3RlbmVyMik7Cn0KZnVuY3Rpb24gcmVhZFRva2Vuc0Zyb21TdG9yYWdlKCkgewogIGNvbnN0IHNlcmlhbGl6ZWRUb2tlbnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX1RPS0VOU19OQU1FKTsKICBpZiAoIXNlcmlhbGl6ZWRUb2tlbnMpIHsKICAgIHJldHVybiBudWxsOwogIH0KICB0cnkgewogICAgcmV0dXJuIEpTT04ucGFyc2Uoc2VyaWFsaXplZFRva2Vucyk7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gcGVyc2lzdFRva2Vuc0luU3RvcmFnZSh0b2tlbnMpIHsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX1RPS0VOU19OQU1FLCBKU09OLnN0cmluZ2lmeSh0b2tlbnMpKTsKfQpmdW5jdGlvbiBnZXRFeHBpcmVzRnJvbVRva2VuUmVzcG9uc2UoeyBjcmVhdGVkX2F0LCBleHBpcmVzX2luIH0pIHsKICByZXR1cm4gKGNyZWF0ZWRfYXQgKyBleHBpcmVzX2luKSAqIDFlMzsKfQpmdW5jdGlvbiBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuKSB7CiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gIm9iamVjdCIgfHwgIXRva2VuKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKTsKICB9CiAgaWYgKHR5cGVvZiB0b2tlbi5hY2Nlc3NfdG9rZW4gIT09ICJzdHJpbmciIHx8IHR5cGVvZiB0b2tlbi5yZWZyZXNoX3Rva2VuICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgdG9rZW4uY3JlYXRlZF9hdCAhPT0gIm51bWJlciIgfHwgdHlwZW9mIHRva2VuLmV4cGlyZXNfaW4gIT09ICJudW1iZXIiKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKTsKICB9Cn0KZnVuY3Rpb24gd2FpdChtcykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIG1zKSk7Cn0KZnVuY3Rpb24gZmlyZUFjY2Vzc1Rva2VuQ2hhbmdlZChhY2Nlc3NUb2tlbikgewogIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycy5maXJlRXZlbnQoYWNjZXNzVG9rZW4pOwp9CnZhciBJR05PUkVEX0VSUk9SLCBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMsIFRva2VuczsKdmFyIGluaXRfdG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvdG9rZW5zLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgaW5pdF9UeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBJR05PUkVEX0VSUk9SID0gbmV3IEVycm9yKCk7CiAgICBJR05PUkVEX0VSUk9SLnN0YWNrID0gIiI7CiAgICBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgVG9rZW5zID0gY2xhc3MgX1Rva2VucyB7CiAgICAgIG9yaWdpbjsKICAgICAgcmVmcmVzaDsKICAgICAgYWNjZXNzOwogICAgICBleHBpcmVzOwogICAgICBfcmV2b2tlZCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgY29uc3RydWN0b3Iob3JpZ2luLCByZWZyZXNoLCBhY2Nlc3MsIGV4cGlyZXMpIHsKICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjsKICAgICAgICB0aGlzLnJlZnJlc2ggPSByZWZyZXNoOwogICAgICAgIHRoaXMuYWNjZXNzID0gYWNjZXNzOwogICAgICAgIHRoaXMuZXhwaXJlcyA9IGV4cGlyZXM7CiAgICAgIH0KICAgICAgYXN5bmMgYWN0aXZhdGUob25GYWlsZWRSZWZyZXNoKSB7CiAgICAgICAgaWYgKHRoaXMuX3Jldm9rZWQuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVG9rZW4gcmV2b2tlZCIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5leHBpcmVzIDwgRGF0ZS5ub3coKSkgewogICAgICAgICAgaWYgKCFhd2FpdCB0aGlzLl9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLl9zeW5jKCk7CiAgICAgICAgdGhpcy5fc3RhcnRSZWZyZXNoVG9rZW5zTG9vcChvbkZhaWxlZFJlZnJlc2gpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGFzeW5jIHJldm9rZShjbGllbnRJZCwgaWdub3JlUmV2b2tlRXJyb3IpIHsKICAgICAgICB0aGlzLl9yZXZva2VkLmFib3J0KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5vcmlnaW59L29hdXRoL3Jldm9rZWAsIHsKICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRva2VuOiB0aGlzLnJlZnJlc2gsIHRva2VuX3R5cGVfaGludDogInJlZnJlc2hfdG9rZW4iLCBjbGllbnRfaWQ6IGNsaWVudElkIH0pLAogICAgICAgICAgICBtb2RlOiAiY29ycyIKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2dvdXRgKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgaWYgKCFpZ25vcmVSZXZva2VFcnJvcikgewogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbVN0b3JhZ2UoKSB7CiAgICAgICAgY29uc3Qgc2F2ZWRUb2tlbnMgPSByZWFkVG9rZW5zRnJvbVN0b3JhZ2UoKTsKICAgICAgICBpZiAoIXNhdmVkVG9rZW5zKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBfVG9rZW5zKHNhdmVkVG9rZW5zLm9yaWdpbiwgc2F2ZWRUb2tlbnMucmVmcmVzaCwgc2F2ZWRUb2tlbnMuYWNjZXNzLCBzYXZlZFRva2Vucy5leHBpcmVzKTsKICAgICAgfQogICAgICBzdGF0aWMgYXN5bmMgZnJvbUF1dGhDb2RlKHsgZWRpdG9yT3JpZ2luOiBlZGl0b3JPcmlnaW4yLCBjbGllbnRJZCwgY29kZVZlcmlmaWVyLCBhdXRoQ29kZSwgcmVkaXJlY3RVcmkgfSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7ZWRpdG9yT3JpZ2luMn0vb2F1dGgvdG9rZW5gLCB7CiAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7CiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsCiAgICAgICAgICAgIGNvZGU6IGF1dGhDb2RlLAogICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsCiAgICAgICAgICAgIGdyYW50X3R5cGU6ICJhdXRob3JpemF0aW9uX2NvZGUiLAogICAgICAgICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpCiAgICAgICAgICB9KSwKICAgICAgICAgIG1vZGU6ICJjb3JzIgogICAgICAgIH0pOwogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRva2VuOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuOiBhY2Nlc3MsIHJlZnJlc2hfdG9rZW46IHJlZnJlc2ggfSA9IHRva2VuUmVzcG9uc2U7CiAgICAgICAgY29uc3QgZXhwaXJlcyA9IGdldEV4cGlyZXNGcm9tVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICByZXR1cm4gbmV3IF9Ub2tlbnMoZWRpdG9yT3JpZ2luMiwgcmVmcmVzaCwgYWNjZXNzLCBleHBpcmVzKTsKICAgICAgfQogICAgICBhc3luYyBfZmV0Y2hOZXdBY2Nlc3NUb2tlbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvdG9rZW5gLCB7CiAgICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoewogICAgICAgICAgICAgIGdyYW50X3R5cGU6ICJyZWZyZXNoX3Rva2VuIiwKICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2gKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgICAgICAgc2lnbmFsOiB0aGlzLl9yZXZva2VkLnNpZ25hbAogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIHRocm93IElHTk9SRURfRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgYXNzZXJ0VG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuOiBhY2Nlc3MsIHJlZnJlc2hfdG9rZW46IHJlZnJlc2ggfSA9IHRva2VuUmVzcG9uc2U7CiAgICAgICAgICBjb25zdCBleHBpcmVzID0gZ2V0RXhwaXJlc0Zyb21Ub2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7CiAgICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzOwogICAgICAgICAgdGhpcy5yZWZyZXNoID0gcmVmcmVzaDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX3N5bmMoKSB7CiAgICAgICAgcGVyc2lzdFRva2Vuc0luU3RvcmFnZSh0aGlzKTsKICAgICAgICBmaXJlQWNjZXNzVG9rZW5DaGFuZ2VkKHRoaXMuYWNjZXNzKTsKICAgICAgfQogICAgICBhc3luYyBfc3RhcnRSZWZyZXNoVG9rZW5zTG9vcChvbkZhaWxlZFJlZnJlc2gpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgY29uc3QgZXhwaXJlc0luID0gdGhpcy5leHBpcmVzIC0gRGF0ZS5ub3coKSAtIDFlMzsKICAgICAgICAgIGF3YWl0IHdhaXQoTWF0aC5tYXgoZXhwaXJlc0luLCAxZTMpKTsKICAgICAgICAgIGlmICh0aGlzLl9yZXZva2VkLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5fZmV0Y2hOZXdBY2Nlc3NUb2tlbigpKSB7CiAgICAgICAgICAgIG9uRmFpbGVkUmVmcmVzaCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9zeW5jKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvaWZyYW1lLXVybC5qcwp2YXIgcGFyYW1zLCBlZGl0b3JPcmlnaW4sIGlmcmFtZVNldHRpbmdzOwp2YXIgaW5pdF9pZnJhbWVfdXJsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvaWZyYW1lLXVybC5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czMoKTsKICAgIHBhcmFtcyA9IHt9OwogICAgZWRpdG9yT3JpZ2luID0gbnVsbDsKICAgIGlmcmFtZVNldHRpbmdzID0gewogICAgICBnZXQgZWRpdG9yT3JpZ2luKCkgewogICAgICAgIGlmIChlZGl0b3JPcmlnaW4gPT0gbnVsbCkgewogICAgICAgICAgZWRpdG9yT3JpZ2luID0gbmV3IFVSTChnbG9iYWxUaGlzLldFQkNPTlRBSU5FUl9BUElfSUZSQU1FX1VSTCA/PyBERUZBVUxUX0VESVRPUl9PUklHSU4pLm9yaWdpbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVkaXRvck9yaWdpbjsKICAgICAgfSwKICAgICAgc2V0IGVkaXRvck9yaWdpbihuZXdPcmlnaW4pIHsKICAgICAgICBlZGl0b3JPcmlnaW4gPSBuZXcgVVJMKG5ld09yaWdpbikub3JpZ2luOwogICAgICB9LAogICAgICBzZXRRdWVyeVBhcmFtKGtleTIsIHZhbHVlMikgewogICAgICAgIHBhcmFtc1trZXkyXSA9IHZhbHVlMjsKICAgICAgfSwKICAgICAgZ2V0IHVybCgpIHsKICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMuZWRpdG9yT3JpZ2luKTsKICAgICAgICB1cmwucGF0aG5hbWUgPSAiL2hlYWRsZXNzIjsKICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIGluIHBhcmFtcykgewogICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQocGFyYW0sIHBhcmFtc1twYXJhbV0pOwogICAgICAgIH0KICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgidmVyc2lvbiIsICIxLjYuMSIpOwogICAgICAgIHJldHVybiB1cmw7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9jb2RlLmpzCmFzeW5jIGZ1bmN0aW9uIFMyNTYoaW5wdXQpIHsKICBjb25zdCBhc2NpaSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShpbnB1dCk7CiAgY29uc3Qgc2hhMjU2ID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLCBhc2NpaSkpOwogIHJldHVybiBidG9hKHNoYTI1Ni5yZWR1Y2UoKGJpbmFyeSwgYnl0ZSkgPT4gYmluYXJ5ICsgU3RyaW5nLmZyb21Db2RlUG9pbnQoYnl0ZSksICIiKSkucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0rJC8sICIiKTsKfQpmdW5jdGlvbiBuZXdDb2RlVmVyaWZpZXIoKSB7CiAgY29uc3QgcmFuZG9tID0gbmV3IFVpbnQ4QXJyYXkoOTYpOwogIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tKTsKICBsZXQgY29kZVZlcmlmaWVyID0gIiI7CiAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgMzI7ICsraTExKSB7CiAgICBjb2RlVmVyaWZpZXIgKz0gbmV4dEZvdXJDaGFycyhyYW5kb21bMyAqIGkxMSArIDBdLCByYW5kb21bMyAqIGkxMSArIDFdLCByYW5kb21bMyAqIGkxMSArIDJdKTsKICB9CiAgcmV0dXJuIGNvZGVWZXJpZmllcjsKfQpmdW5jdGlvbiBuZXh0Rm91ckNoYXJzKGJ5dGUxLCBieXRlMiwgYnl0ZTMpIHsKICBjb25zdCBjaGFyMSA9IGJ5dGUxID4+IDI7CiAgY29uc3QgY2hhcjIgPSAoYnl0ZTEgJiAzKSA8PCA0IHwgYnl0ZTIgPj4gNDsKICBjb25zdCBjaGFyMyA9IGJ5dGUyICYgMTUgfCAoYnl0ZTMgJiAxOTIpID4+IDI7CiAgY29uc3QgY2hhcjQgPSBieXRlMyAmIDYzOwogIHJldHVybiBbY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjRdLm1hcCh1bnJlc2VydmVkQ2hhcmFjdGVycykuam9pbigiIik7Cn0KZnVuY3Rpb24gdW5yZXNlcnZlZENoYXJhY3RlcnMoY29kZTQpIHsKICBsZXQgb2Zmc2V0OwogIGlmIChjb2RlNCA8IDI2KSB7CiAgICBvZmZzZXQgPSBjb2RlNCArIDY1OwogIH0gZWxzZSBpZiAoY29kZTQgPCA1MikgewogICAgb2Zmc2V0ID0gY29kZTQgLSAyNiArIDk3OwogIH0gZWxzZSBpZiAoY29kZTQgPCA2MikgewogICAgb2Zmc2V0ID0gY29kZTQgLSA1MiArIDQ4OwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSBjb2RlNCA9PT0gNjIgPyAzMCA6IDQ1OwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvZmZzZXQpOwp9CnZhciBpbml0X2NvZGU1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9yZXNldC1wcm9taXNlLmpzCmZ1bmN0aW9uIHJlc2V0dGFibGVQcm9taXNlKCkgewogIGxldCByZXNvbHZlMjsKICBsZXQgcHJvbWlzZTsKICBmdW5jdGlvbiByZXNldCgpIHsKICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUpID0+IHJlc29sdmUyID0gX3Jlc29sdmUpOwogIH0KICByZXNldCgpOwogIHJldHVybiB7CiAgICBnZXQgcHJvbWlzZSgpIHsKICAgICAgcmV0dXJuIHByb21pc2U7CiAgICB9LAogICAgcmVzb2x2ZSh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHJlc29sdmUyKHZhbHVlMik7CiAgICB9LAogICAgcmVzZXQKICB9Owp9CnZhciBpbml0X3Jlc2V0X3Byb21pc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9yZXNldC1wcm9taXNlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2F1dGgtc3RhdGUuanMKZnVuY3Rpb24gYnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlMikgewogIGlmICghYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwpIHsKICAgIHJldHVybjsKICB9CiAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZTIpOwogIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX1BPUFVQX05BTUUpID09PSAidHJ1ZSIgJiYgbWVzc2FnZTIudHlwZSAhPT0gImF1dGgtbG9nb3V0IikgewogICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9QT1BVUF9OQU1FKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICB3aW5kb3cuY2xvc2UoKTsKICAgIH0pOwogIH0KfQpmdW5jdGlvbiBvbkZhaWxlZFRva2VuUmVmcmVzaCgpIHsKICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWxvZ291dCIgfSk7Cn0KZnVuY3Rpb24gZGVmYXVsdFJlZGlyZWN0VXJpKCkgewogIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjsKfQphc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpIHsKICBjb25zdCBjb2RlVmVyaWZpZXIgPSBuZXdDb2RlVmVyaWZpZXIoKTsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSwgY29kZVZlcmlmaWVyKTsKICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gYXdhaXQgUzI1Nihjb2RlVmVyaWZpZXIpOwogIGNvbnN0IHVybCA9IG5ldyBVUkwoIi9vYXV0aC9hdXRob3JpemUiLCBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luKTsKICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gdXJsOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCAiY29kZSIpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoImNsaWVudF9pZCIsIGF1dGhTdGF0ZS5jbGllbnRJZCk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVkaXJlY3RfdXJpIiwgZGVmYXVsdFJlZGlyZWN0VXJpKCkpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIiwgYXV0aFN0YXRlLm9hdXRoU2NvcGUpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlIiwgY29kZUNoYWxsZW5nZSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwgIlMyNTYiKTsKICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7Cn0KZnVuY3Rpb24gYXNzZXJ0QXV0aFRva2Vucyh0b2tlbnMpIHsKICBpZiAoIXRva2VucykgewogICAgdGhyb3cgbmV3IEVycm9yKCJPb3BzISBUb2tlbnMgaXMgbm90IGRlZmluZWQgd2hlbiBpdCBhbHdheXMgc2hvdWxkIGJlLiIpOwogIH0KfQp2YXIgYXV0aFN0YXRlLCBhdXRoRmFpbGVkTGlzdGVuZXJzLCBsb2dnZWRPdXRMaXN0ZW5lcnMsIGF1dGg7CnZhciBpbml0X2F1dGhfc3RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9hdXRoLXN0YXRlLmpzIigpIHsKICAgIGluaXRfdG9rZW5zKCk7CiAgICBpbml0X2NvbnN0YW50czMoKTsKICAgIGluaXRfaWZyYW1lX3VybCgpOwogICAgaW5pdF9jb2RlNSgpOwogICAgaW5pdF9yZXNldF9wcm9taXNlKCk7CiAgICBpbml0X1R5cGVkRXZlbnRUYXJnZXQoKTsKICAgIGF1dGhTdGF0ZSA9IHsKICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAogICAgICBib290Q2FsbGVkOiBmYWxzZSwKICAgICAgYXV0aENvbXBsZXRlOiByZXNldHRhYmxlUHJvbWlzZSgpLAogICAgICBjbGllbnRJZDogIiIsCiAgICAgIG9hdXRoU2NvcGU6ICIiLAogICAgICBicm9hZGNhc3RDaGFubmVsOiBudWxsLAogICAgICBnZXQgZWRpdG9yT3JpZ2luKCkgewogICAgICAgIHJldHVybiBpZnJhbWVTZXR0aW5ncy5lZGl0b3JPcmlnaW47CiAgICAgIH0sCiAgICAgIHRva2VuczogbnVsbAogICAgfTsKICAgIGF1dGhGYWlsZWRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgbG9nZ2VkT3V0TGlzdGVuZXJzID0gbmV3IFR5cGVkRXZlbnRUYXJnZXQoKTsKICAgIGF1dGggPSB7CiAgICAgIGluaXQoeyBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjIsIGNsaWVudElkLCBzY29wZSB9KSB7CiAgICAgICAgaWYgKGF1dGhTdGF0ZS5pbml0aWFsaXplZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbml0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIik7CiAgICAgICAgfQogICAgICAgIGxldCBlbnRlcnByaXNlID0gdHJ1ZTsKICAgICAgICBpZiAoZW50ZXJwcmlzZSAmJiBhdXRoU3RhdGUuYm9vdENhbGxlZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgYXV0aC5pbml0YCBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgYFdlYkNvbnRhaW5lci5ib290YCIpOwogICAgICAgIH0KICAgICAgICBhdXRoU3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBUb2tlbnMuZnJvbVN0b3JhZ2UoKTsKICAgICAgICBhdXRoU3RhdGUuY2xpZW50SWQgPSBjbGllbnRJZDsKICAgICAgICBhdXRoU3RhdGUub2F1dGhTY29wZSA9IHNjb3BlOwogICAgICAgIGF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoQlJPQURDQVNUX0NIQU5ORUxfTkFNRSk7CiAgICAgICAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIiwgY2xpZW50SWQpOwogICAgICAgIGlmIChlZGl0b3JPcmlnaW4yKSB7CiAgICAgICAgICBpZnJhbWVTZXR0aW5ncy5lZGl0b3JPcmlnaW4gPSBuZXcgVVJMKGVkaXRvck9yaWdpbjIpLm9yaWdpbjsKICAgICAgICB9CiAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmxpc3RlbigoKSA9PiBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc2V0KCkpOwogICAgICAgIGF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbkNoYW5uZWxNZXNzYWdlKTsKICAgICAgICBhc3luYyBmdW5jdGlvbiBvbkNoYW5uZWxNZXNzYWdlKGV2ZW50KSB7CiAgICAgICAgICBjb25zdCB0eXBlZEV2ZW50ID0gZXZlbnQuZGF0YTsKICAgICAgICAgIGlmICh0eXBlZEV2ZW50LnR5cGUgPT09ICJhdXRoLWNvbXBsZXRlIikgewogICAgICAgICAgICBhdXRoU3RhdGUudG9rZW5zID0gVG9rZW5zLmZyb21TdG9yYWdlKCk7CiAgICAgICAgICAgIGF3YWl0IGF1dGhTdGF0ZS50b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtZmFpbGVkIikgewogICAgICAgICAgICBhdXRoRmFpbGVkTGlzdGVuZXJzLmZpcmVFdmVudCh0eXBlZEV2ZW50KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtbG9nb3V0IikgewogICAgICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGF1dGhTdGF0ZS50b2tlbnMpIHsKICAgICAgICAgIGNvbnN0IHRva2VucyA9IGF1dGhTdGF0ZS50b2tlbnM7CiAgICAgICAgICBpZiAodG9rZW5zLm9yaWdpbiA9PT0gYXV0aFN0YXRlLmVkaXRvck9yaWdpbikgewogICAgICAgICAgICAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgaWYgKGF1dGhTdGF0ZS50b2tlbnMgIT09IHRva2VucykgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzb2x2ZSgpOwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJhdXRob3JpemVkIiB9OwogICAgICAgICAgfQogICAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBsb2NhdGlvblVSTCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSBsb2NhdGlvblVSTDsKICAgICAgICBjb25zdCB1cGRhdGVVUkwgPSAoKSA9PiB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBsb2NhdGlvblVSTCk7CiAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXMoU0VBUkNIX1BBUkFNX0VSUk9SKSkgewogICAgICAgICAgY29uc3QgZXJyb3IgPSBzZWFyY2hQYXJhbXMuZ2V0KFNFQVJDSF9QQVJBTV9FUlJPUik7CiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OKTsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0VSUk9SKTsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OKTsKICAgICAgICAgIHVwZGF0ZVVSTCgpOwogICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWZhaWxlZCIsIGVycm9yLCBkZXNjcmlwdGlvbiB9KTsKICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGgtZmFpbGVkIiwgZXJyb3IsIGRlc2NyaXB0aW9uIH07CiAgICAgICAgfQogICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzKFNFQVJDSF9QQVJBTV9BVVRIX0NPREUpKSB7CiAgICAgICAgICBjb25zdCBhdXRoQ29kZSA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSk7CiAgICAgICAgICBjb25zdCBlZGl0b3JPcmlnaW4zID0gYXV0aFN0YXRlLmVkaXRvck9yaWdpbjsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSk7CiAgICAgICAgICB1cGRhdGVVUkwoKTsKICAgICAgICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FKTsKICAgICAgICAgIGlmICghY29kZVZlcmlmaWVyKSB7CiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogIm5lZWQtYXV0aCIgfTsKICAgICAgICAgIH0KICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FKTsKICAgICAgICAgIFRva2Vucy5mcm9tQXV0aENvZGUoewogICAgICAgICAgICBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjMsCiAgICAgICAgICAgIGNsaWVudElkOiBhdXRoU3RhdGUuY2xpZW50SWQsCiAgICAgICAgICAgIGF1dGhDb2RlLAogICAgICAgICAgICBjb2RlVmVyaWZpZXIsCiAgICAgICAgICAgIHJlZGlyZWN0VXJpOiBkZWZhdWx0UmVkaXJlY3RVcmkoKQogICAgICAgICAgfSkudGhlbihhc3luYyAodG9rZW5zKSA9PiB7CiAgICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSB0b2tlbnM7CiAgICAgICAgICAgIGFzc2VydEF1dGhUb2tlbnMoYXV0aFN0YXRlLnRva2Vucyk7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhdXRoU3RhdGUudG9rZW5zLmFjdGl2YXRlKG9uRmFpbGVkVG9rZW5SZWZyZXNoKTsKICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1jb21wbGV0ZSIgfSk7CiAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWxvZ291dCIgfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGhvcml6ZWQiIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHN0YXR1czogIm5lZWQtYXV0aCIgfTsKICAgICAgfSwKICAgICAgYXN5bmMgc3RhcnRBdXRoRmxvdyh7IHBvcHVwIH0gPSB7fSkgewogICAgICAgIGlmICghYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImF1dGguaW5pdCBtdXN0IGJlIGNhbGxlZCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBpZiAocG9wdXApIHsKICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfUE9QVVBfTkFNRSwgInRydWUiKTsKICAgICAgICAgIGNvbnN0IGhlaWdodCA9IDUwMDsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gNjIwOwogICAgICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5MZWZ0ICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjsKICAgICAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5Ub3AgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7CiAgICAgICAgICB3aW5kb3cub3Blbihhd2FpdCBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpLCAiX2JsYW5rIiwgYHBvcHVwLHdpZHRoPSR7d2lkdGh9LGhlaWdodD0ke2hlaWdodH0sbGVmdD0ke2xlZnR9LHRvcD0ke3RvcH1gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhd2FpdCBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYXN5bmMgbG9nb3V0KHsgaWdub3JlUmV2b2tlRXJyb3IgfSA9IHt9KSB7CiAgICAgICAgYXdhaXQgYXV0aFN0YXRlLnRva2Vucz8ucmV2b2tlKGF1dGhTdGF0ZS5jbGllbnRJZCwgaWdub3JlUmV2b2tlRXJyb3IgPz8gZmFsc2UpOwogICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKICAgICAgfSwKICAgICAgbG9nZ2VkSW4oKSB7CiAgICAgICAgcmV0dXJuIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucHJvbWlzZTsKICAgICAgfSwKICAgICAgb24oZXZlbnQsIGxpc3RlbmVyMikgewogICAgICAgIHN3aXRjaCAoZXZlbnQpIHsKICAgICAgICAgIGNhc2UgImF1dGgtZmFpbGVkIjogewogICAgICAgICAgICByZXR1cm4gYXV0aEZhaWxlZExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgImxvZ2dlZC1vdXQiOiB7CiAgICAgICAgICAgIHJldHVybiBsb2dnZWRPdXRMaXN0ZW5lcnMubGlzdGVuKGxpc3RlbmVyMik7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdHlwZSAnJHtldmVudH0nLmApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ByZXZpZXctbWVzc2FnZS10eXBlcy5qcwp2YXIgUHJldmlld01lc3NhZ2VUeXBlOwp2YXIgaW5pdF9wcmV2aWV3X21lc3NhZ2VfdHlwZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9wcmV2aWV3LW1lc3NhZ2UtdHlwZXMuanMiKCkgewogICAgKGZ1bmN0aW9uKFByZXZpZXdNZXNzYWdlVHlwZTIpIHsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiVW5jYXVnaHRFeGNlcHRpb24iXSA9ICJQUkVWSUVXX1VOQ0FVR0hUX0VYQ0VQVElPTiI7CiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZTJbIlVuaGFuZGxlZFJlamVjdGlvbiJdID0gIlBSRVZJRVdfVU5IQU5ETEVEX1JFSkVDVElPTiI7CiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZTJbIkNvbnNvbGVFcnJvciJdID0gIlBSRVZJRVdfQ09OU09MRV9FUlJPUiI7CiAgICB9KShQcmV2aWV3TWVzc2FnZVR5cGUgfHwgKFByZXZpZXdNZXNzYWdlVHlwZSA9IHt9KSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC92ZW5kb3IvaW5kZXguanMKZnVuY3Rpb24gZXhwb3NlKG9iaiwgZXAgPSBzZWxmKSB7CiAgZXAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGNhbGxiYWNrKGV2KSB7CiAgICBpZiAoIWV2IHx8ICFldi5kYXRhKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsgaWQsIHR5cGU6IHR5cGU1LCBwYXRoOiBwYXRoMiB9ID0gT2JqZWN0LmFzc2lnbih7IHBhdGg6IFtdIH0sIGV2LmRhdGEpOwogICAgY29uc3QgYXJndW1lbnRMaXN0ID0gKGV2LmRhdGEuYXJndW1lbnRMaXN0IHx8IFtdKS5tYXAoZnJvbVdpcmVWYWx1ZSk7CiAgICBsZXQgcmV0dXJuVmFsdWU7CiAgICB0cnkgewogICAgICBjb25zdCBwYXJlbnQgPSBwYXRoMi5zbGljZSgwLCAtMSkucmVkdWNlKChvYmoyLCBwcm9wKSA9PiBvYmoyW3Byb3BdLCBvYmopOwogICAgICBjb25zdCByYXdWYWx1ZSA9IHBhdGgyLnJlZHVjZSgob2JqMiwgcHJvcCkgPT4gb2JqMltwcm9wXSwgb2JqKTsKICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByYXdWYWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHsKICAgICAgICAgICAgcGFyZW50W3BhdGgyLnNsaWNlKC0xKVswXV0gPSBmcm9tV2lyZVZhbHVlKGV2LmRhdGEudmFsdWUpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmF3VmFsdWUuYXBwbHkocGFyZW50LCBhcmd1bWVudExpc3QpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgewogICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBuZXcgcmF3VmFsdWUoLi4uYXJndW1lbnRMaXN0KTsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBwcm94eSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgewogICAgICAgICAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CiAgICAgICAgICAgIGV4cG9zZShvYmosIHBvcnQyKTsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0cmFuc2Zlcihwb3J0MSwgW3BvcnQxXSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gY2F0Y2ggKHZhbHVlMikgewogICAgICByZXR1cm5WYWx1ZSA9IHsgdmFsdWU6IHZhbHVlMiwgW3Rocm93TWFya2VyXTogMCB9OwogICAgfQogICAgUHJvbWlzZS5yZXNvbHZlKHJldHVyblZhbHVlKS5jYXRjaCgodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIFt0aHJvd01hcmtlcl06IDAgfTsKICAgIH0pLnRoZW4oKHJldHVyblZhbHVlMikgPT4gewogICAgICBjb25zdCBbd2lyZVZhbHVlLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJldHVyblZhbHVlMik7CiAgICAgIGVwLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgd2lyZVZhbHVlKSwgeyBpZCB9KSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIGlmICh0eXBlNSA9PT0gNSkgewogICAgICAgIGVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBjYWxsYmFjayk7CiAgICAgICAgY2xvc2VFbmRQb2ludChlcCk7CiAgICAgIH0KICAgIH0pOwogIH0pOwogIGlmIChlcC5zdGFydCkgewogICAgZXAuc3RhcnQoKTsKICB9Cn0KZnVuY3Rpb24gaXNNZXNzYWdlUG9ydChlbmRwb2ludCkgewogIHJldHVybiBlbmRwb2ludC5jb25zdHJ1Y3Rvci5uYW1lID09PSAiTWVzc2FnZVBvcnQiOwp9CmZ1bmN0aW9uIGNsb3NlRW5kUG9pbnQoZW5kcG9pbnQpIHsKICBpZiAoaXNNZXNzYWdlUG9ydChlbmRwb2ludCkpCiAgICBlbmRwb2ludC5jbG9zZSgpOwp9CmZ1bmN0aW9uIHdyYXA0KGVwLCB0YXJnZXQpIHsKICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFtdLCB0YXJnZXQpOwp9CmZ1bmN0aW9uIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUmVsZWFzZWQpIHsKICBpZiAoaXNSZWxlYXNlZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlUHJveHkoZXAsIHBhdGgyID0gW10sIHRhcmdldCA9IGZ1bmN0aW9uKCkgewp9KSB7CiAgbGV0IGlzUHJveHlSZWxlYXNlZCA9IGZhbHNlOwogIGNvbnN0IHByb3h5MiA9IG5ldyBQcm94eSh0YXJnZXQsIHsKICAgIGdldChfdGFyZ2V0LCBwcm9wKSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGlmIChwcm9wID09PSByZWxlYXNlUHJveHkpIHsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICAgICAgdHlwZTogNSwKICAgICAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSkKICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjbG9zZUVuZFBvaW50KGVwKTsKICAgICAgICAgICAgaXNQcm94eVJlbGVhc2VkID0gdHJ1ZTsKICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgIH0KICAgICAgaWYgKHByb3AgPT09ICJ0aGVuIikgewogICAgICAgIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiB7IHRoZW46ICgpID0+IHByb3h5MiB9OwogICAgICAgIH0KICAgICAgICBjb25zdCByMTEgPSByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgICB0eXBlOiAwLAogICAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSkKICAgICAgICB9KS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgICAgIHJldHVybiByMTEudGhlbi5iaW5kKHIxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBbLi4ucGF0aDIsIHByb3BdKTsKICAgIH0sCiAgICBzZXQoX3RhcmdldCwgcHJvcCwgcmF3VmFsdWUpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgW3ZhbHVlMiwgdHJhbnNmZXJhYmxlc10gPSB0b1dpcmVWYWx1ZShyYXdWYWx1ZSk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMSwKICAgICAgICBwYXRoOiBbLi4ucGF0aDIsIHByb3BdLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpLAogICAgICAgIHZhbHVlOiB2YWx1ZTIKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0sCiAgICBhcHBseShfdGFyZ2V0LCBfdGhpc0FyZywgcmF3QXJndW1lbnRMaXN0KSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGNvbnN0IGxhc3QzID0gcGF0aDJbcGF0aDIubGVuZ3RoIC0gMV07CiAgICAgIGlmIChsYXN0MyA9PT0gY3JlYXRlRW5kcG9pbnQpIHsKICAgICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgICAgdHlwZTogNAogICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICAgIH0KICAgICAgaWYgKGxhc3QzID09PSAiYmluZCIpIHsKICAgICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIHBhdGgyLnNsaWNlKDAsIC0xKSk7CiAgICAgIH0KICAgICAgY29uc3QgW2FyZ3VtZW50TGlzdCwgdHJhbnNmZXJhYmxlc10gPSBwcm9jZXNzQXJndW1lbnRzKHJhd0FyZ3VtZW50TGlzdCk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMiwKICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKSwKICAgICAgICBhcmd1bWVudExpc3QKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0sCiAgICBjb25zdHJ1Y3QoX3RhcmdldCwgcmF3QXJndW1lbnRMaXN0KSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpOwogICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgIHR5cGU6IDMsCiAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSksCiAgICAgICAgYXJndW1lbnRMaXN0CiAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHByb3h5MjsKfQpmdW5jdGlvbiBteUZsYXQoYXJyKSB7CiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycik7Cn0KZnVuY3Rpb24gcHJvY2Vzc0FyZ3VtZW50cyhhcmd1bWVudExpc3QpIHsKICBjb25zdCBwcm9jZXNzZWQgPSBhcmd1bWVudExpc3QubWFwKHRvV2lyZVZhbHVlKTsKICByZXR1cm4gW3Byb2Nlc3NlZC5tYXAoKHY1KSA9PiB2NVswXSksIG15RmxhdChwcm9jZXNzZWQubWFwKCh2NSkgPT4gdjVbMV0pKV07Cn0KZnVuY3Rpb24gdHJhbnNmZXIob2JqLCB0cmFuc2ZlcnMpIHsKICB0cmFuc2ZlckNhY2hlLnNldChvYmosIHRyYW5zZmVycyk7CiAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBwcm94eShvYmopIHsKICByZXR1cm4gT2JqZWN0LmFzc2lnbihvYmosIHsgW3Byb3h5TWFya2VyXTogdHJ1ZSB9KTsKfQpmdW5jdGlvbiB3aW5kb3dFbmRwb2ludCh3MywgY29udGV4dDIgPSBzZWxmLCB0YXJnZXRPcmlnaW4gPSAiKiIpIHsKICByZXR1cm4gewogICAgcG9zdE1lc3NhZ2U6IChtc2csIHRyYW5zZmVyYWJsZXMpID0+IHczLnBvc3RNZXNzYWdlKG1zZywgdGFyZ2V0T3JpZ2luLCB0cmFuc2ZlcmFibGVzKSwKICAgIGFkZEV2ZW50TGlzdGVuZXI6IGNvbnRleHQyLmFkZEV2ZW50TGlzdGVuZXIuYmluZChjb250ZXh0MiksCiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBjb250ZXh0Mi5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoY29udGV4dDIpCiAgfTsKfQpmdW5jdGlvbiB0b1dpcmVWYWx1ZSh2YWx1ZTIpIHsKICBmb3IgKGNvbnN0IFtuYW1lLCBoYW5kbGVyMl0gb2YgdHJhbnNmZXJIYW5kbGVycykgewogICAgaWYgKGhhbmRsZXIyLmNhbkhhbmRsZSh2YWx1ZTIpKSB7CiAgICAgIGNvbnN0IFtzZXJpYWxpemVkVmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gaGFuZGxlcjIuc2VyaWFsaXplKHZhbHVlMik7CiAgICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgdHlwZTogMywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplZFZhbHVlCiAgICAgICAgfSwKICAgICAgICB0cmFuc2ZlcmFibGVzCiAgICAgIF07CiAgICB9CiAgfQogIHJldHVybiBbCiAgICB7CiAgICAgIHR5cGU6IDAsCiAgICAgIHZhbHVlOiB2YWx1ZTIKICAgIH0sCiAgICB0cmFuc2ZlckNhY2hlLmdldCh2YWx1ZTIpIHx8IFtdCiAgXTsKfQpmdW5jdGlvbiBmcm9tV2lyZVZhbHVlKHZhbHVlMikgewogIHN3aXRjaCAodmFsdWUyLnR5cGUpIHsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHRyYW5zZmVySGFuZGxlcnMuZ2V0KHZhbHVlMi5uYW1lKS5kZXNlcmlhbGl6ZSh2YWx1ZTIudmFsdWUpOwogICAgY2FzZSAwOgogICAgICByZXR1cm4gdmFsdWUyLnZhbHVlOwogIH0KfQpmdW5jdGlvbiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCBtc2csIHRyYW5zZmVycykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVVVUlEKCk7CiAgICBlcC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24gbDYoZXYpIHsKICAgICAgaWYgKCFldi5kYXRhIHx8ICFldi5kYXRhLmlkIHx8IGV2LmRhdGEuaWQgIT09IGlkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBsNik7CiAgICAgIHJlc29sdmUyKGV2LmRhdGEpOwogICAgfSk7CiAgICBpZiAoZXAuc3RhcnQpIHsKICAgICAgZXAuc3RhcnQoKTsKICAgIH0KICAgIGVwLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oeyBpZCB9LCBtc2cpLCB0cmFuc2ZlcnMpOwogIH0pOwp9CmZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHsKICByZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKTsKfQp2YXIgX19kZWZQcm9wMiwgX19leHBvcnQyLCBjb21saW5rX2V4cG9ydHMsIHByb3h5TWFya2VyLCBjcmVhdGVFbmRwb2ludCwgcmVsZWFzZVByb3h5LCB0aHJvd01hcmtlciwgaXNPYmplY3QyLCBwcm94eVRyYW5zZmVySGFuZGxlciwgdGhyb3dUcmFuc2ZlckhhbmRsZXIsIHRyYW5zZmVySGFuZGxlcnMsIHRyYW5zZmVyQ2FjaGU7CnZhciBpbml0X3ZlbmRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ZlbmRvci9pbmRleC5qcyIoKSB7CiAgICBfX2RlZlByb3AyID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgX19leHBvcnQyID0gKHRhcmdldCwgYWxsMykgPT4gewogICAgICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICAgICAgX19kZWZQcm9wMih0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGwzW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogICAgfTsKICAgIGNvbWxpbmtfZXhwb3J0cyA9IHt9OwogICAgX19leHBvcnQyKGNvbWxpbmtfZXhwb3J0cywgewogICAgICBjcmVhdGVFbmRwb2ludDogKCkgPT4gY3JlYXRlRW5kcG9pbnQsCiAgICAgIGV4cG9zZTogKCkgPT4gZXhwb3NlLAogICAgICBwcm94eTogKCkgPT4gcHJveHksCiAgICAgIHByb3h5TWFya2VyOiAoKSA9PiBwcm94eU1hcmtlciwKICAgICAgcmVsZWFzZVByb3h5OiAoKSA9PiByZWxlYXNlUHJveHksCiAgICAgIHRyYW5zZmVyOiAoKSA9PiB0cmFuc2ZlciwKICAgICAgdHJhbnNmZXJIYW5kbGVyczogKCkgPT4gdHJhbnNmZXJIYW5kbGVycywKICAgICAgd2luZG93RW5kcG9pbnQ6ICgpID0+IHdpbmRvd0VuZHBvaW50LAogICAgICB3cmFwOiAoKSA9PiB3cmFwNAogICAgfSk7CiAgICBwcm94eU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIkNvbWxpbmsucHJveHkiKTsKICAgIGNyZWF0ZUVuZHBvaW50ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpOwogICAgcmVsZWFzZVByb3h5ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKTsKICAgIHRocm93TWFya2VyID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay50aHJvd24iKTsKICAgIGlzT2JqZWN0MiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJvYmplY3QiICYmIHZhbCAhPT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAiZnVuY3Rpb24iOwogICAgcHJveHlUcmFuc2ZlckhhbmRsZXIgPSB7CiAgICAgIGNhbkhhbmRsZTogKHZhbCkgPT4gaXNPYmplY3QyKHZhbCkgJiYgdmFsW3Byb3h5TWFya2VyXSwKICAgICAgc2VyaWFsaXplKG9iaikgewogICAgICAgIGNvbnN0IHsgcG9ydDEsIHBvcnQyIH0gPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKICAgICAgICBleHBvc2Uob2JqLCBwb3J0MSk7CiAgICAgICAgcmV0dXJuIFtwb3J0MiwgW3BvcnQyXV07CiAgICAgIH0sCiAgICAgIGRlc2VyaWFsaXplKHBvcnQpIHsKICAgICAgICBwb3J0LnN0YXJ0KCk7CiAgICAgICAgcmV0dXJuIHdyYXA0KHBvcnQpOwogICAgICB9CiAgICB9OwogICAgdGhyb3dUcmFuc2ZlckhhbmRsZXIgPSB7CiAgICAgIGNhbkhhbmRsZTogKHZhbHVlMikgPT4gaXNPYmplY3QyKHZhbHVlMikgJiYgdGhyb3dNYXJrZXIgaW4gdmFsdWUyLAogICAgICBzZXJpYWxpemUoeyB2YWx1ZTogdmFsdWUyIH0pIHsKICAgICAgICBsZXQgc2VyaWFsaXplZDsKICAgICAgICBpZiAodmFsdWUyIGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7CiAgICAgICAgICAgIGlzRXJyb3I6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB7CiAgICAgICAgICAgICAgbWVzc2FnZTogdmFsdWUyLm1lc3NhZ2UsCiAgICAgICAgICAgICAgbmFtZTogdmFsdWUyLm5hbWUsCiAgICAgICAgICAgICAgc3RhY2s6IHZhbHVlMi5zdGFjawogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXJpYWxpemVkID0geyBpc0Vycm9yOiBmYWxzZSwgdmFsdWU6IHZhbHVlMiB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gW3NlcmlhbGl6ZWQsIFtdXTsKICAgICAgfSwKICAgICAgZGVzZXJpYWxpemUoc2VyaWFsaXplZCkgewogICAgICAgIGlmIChzZXJpYWxpemVkLmlzRXJyb3IpIHsKICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHNlcmlhbGl6ZWQudmFsdWUubWVzc2FnZSksIHNlcmlhbGl6ZWQudmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBzZXJpYWxpemVkLnZhbHVlOwogICAgICB9CiAgICB9OwogICAgdHJhbnNmZXJIYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFsKICAgICAgWyJwcm94eSIsIHByb3h5VHJhbnNmZXJIYW5kbGVyXSwKICAgICAgWyJ0aHJvdyIsIHRocm93VHJhbnNmZXJIYW5kbGVyXQogICAgXSk7CiAgICB0cmFuc2ZlckNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9yZWxvYWQtcHJldmlldy5qcwp2YXIgaW5pdF9yZWxvYWRfcHJldmlldyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL3JlbG9hZC1wcmV2aWV3LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2lzLXByZXZpZXctbWVzc2FnZS5qcwpmdW5jdGlvbiBpc1ByZXZpZXdNZXNzYWdlKGRhdGEpIHsKICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoISgidHlwZSIgaW4gZGF0YSkgfHwgIVBSRVZJRVdfTUVTU0FHRV9UWVBFUy5pbmNsdWRlcyhkYXRhLnR5cGUpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CnZhciBQUkVWSUVXX01FU1NBR0VfVFlQRVM7CnZhciBpbml0X2lzX3ByZXZpZXdfbWVzc2FnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2lzLXByZXZpZXctbWVzc2FnZS5qcyIoKSB7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgUFJFVklFV19NRVNTQUdFX1RZUEVTID0gWwogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUuQ29uc29sZUVycm9yLAogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUuVW5jYXVnaHRFeGNlcHRpb24sCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5VbmhhbmRsZWRSZWplY3Rpb24KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy5qcwp2YXIgaW5pdF91dGlsczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy5qcyIoKSB7CiAgICBpbml0X3JlbG9hZF9wcmV2aWV3KCk7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgaW5pdF9pc19wcmV2aWV3X21lc3NhZ2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL251bGwtcHJvdG90eXBlLmpzCmZ1bmN0aW9uIG51bGxQcm90b3R5cGUoc291cmNlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgaWYgKCFzb3VyY2UpIHsKICAgIHJldHVybiBwcm90b3R5cGU7CiAgfQogIHJldHVybiBPYmplY3QuYXNzaWduKHByb3RvdHlwZSwgc291cmNlKTsKfQp2YXIgaW5pdF9udWxsX3Byb3RvdHlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL251bGwtcHJvdG90eXBlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2ZpbGUtc3lzdGVtLmpzCmZ1bmN0aW9uIHRvSW50ZXJuYWxGaWxlU3lzdGVtVHJlZSh0cmVlKSB7CiAgY29uc3QgbmV3VHJlZSA9IHsgZDoge30gfTsKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModHJlZSkpIHsKICAgIGNvbnN0IGVudHJ5ID0gdHJlZVtuYW1lXTsKICAgIGlmICgiZmlsZSIgaW4gZW50cnkpIHsKICAgICAgaWYgKCJzeW1saW5rIiBpbiBlbnRyeS5maWxlKSB7CiAgICAgICAgbmV3VHJlZS5kW25hbWVdID0geyBmOiB7IGw6IGVudHJ5LmZpbGUuc3ltbGluayB9IH07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgY29udGVudHMgPSBlbnRyeS5maWxlLmNvbnRlbnRzOwogICAgICBjb25zdCBzdHJpbmdDb250ZW50cyA9IHR5cGVvZiBjb250ZW50cyA9PT0gInN0cmluZyIgPyBjb250ZW50cyA6IGJpbmFyeURlY29kZXIuZGVjb2RlKGNvbnRlbnRzKTsKICAgICAgY29uc3QgYmluYXJ5ID0gdHlwZW9mIGNvbnRlbnRzID09PSAic3RyaW5nIiA/IHt9IDogeyBiOiB0cnVlIH07CiAgICAgIG5ld1RyZWUuZFtuYW1lXSA9IHsgZjogeyBjOiBzdHJpbmdDb250ZW50cywgLi4uYmluYXJ5IH0gfTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBuZXdFbnRyeSA9IHRvSW50ZXJuYWxGaWxlU3lzdGVtVHJlZShlbnRyeS5kaXJlY3RvcnkpOwogICAgbmV3VHJlZS5kW25hbWVdID0gbmV3RW50cnk7CiAgfQogIHJldHVybiBuZXdUcmVlOwp9CmZ1bmN0aW9uIHRvRXh0ZXJuYWxGaWxlU3lzdGVtVHJlZSh0cmVlKSB7CiAgY29uc3QgbmV3VHJlZSA9IG51bGxQcm90b3R5cGUoKTsKICBpZiAoImYiIGluIHRyZWUpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGV4cG9ydCBhIHNpbmdsZSBmaWxlIGluIHRoZSBKU09OIGZvcm1hdC4iKTsKICB9CiAgaWYgKCJkIiBpbiB0cmVlKSB7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModHJlZS5kKSkgewogICAgICBjb25zdCBlbnRyeSA9IHRyZWUuZFtuYW1lXTsKICAgICAgaWYgKCJkIiBpbiBlbnRyeSkgewogICAgICAgIG5ld1RyZWVbbmFtZV0gPSBudWxsUHJvdG90eXBlKHsKICAgICAgICAgIGRpcmVjdG9yeTogdG9FeHRlcm5hbEZpbGVTeXN0ZW1UcmVlKGVudHJ5KQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKCJmIiBpbiBlbnRyeSkgewogICAgICAgIGlmICgiYyIgaW4gZW50cnkuZikgewogICAgICAgICAgbmV3VHJlZVtuYW1lXSA9IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICBmaWxlOiBudWxsUHJvdG90eXBlKHsKICAgICAgICAgICAgICBjb250ZW50czogZW50cnkuZi5iID8gZnJvbUJpbmFyeVN0cmluZyhlbnRyeS5mLmMpIDogZW50cnkuZi5jCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKCJsIiBpbiBlbnRyeS5mKSB7CiAgICAgICAgICBuZXdUcmVlW25hbWVdID0gbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgIGZpbGU6IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICAgIHN5bWxpbms6IGVudHJ5LmYubAogICAgICAgICAgICB9KQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBuZXdUcmVlOwp9CmZ1bmN0aW9uIGZyb21CaW5hcnlTdHJpbmcoczkpIHsKICBjb25zdCBlbmNvZGVkID0gbmV3IFVpbnQ4QXJyYXkoczkubGVuZ3RoKTsKICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBzOS5sZW5ndGg7IGkxMSsrKSB7CiAgICBlbmNvZGVkW2kxMV0gPSBzOVtpMTFdLmNoYXJDb2RlQXQoMCk7CiAgfQogIHJldHVybiBlbmNvZGVkOwp9CnZhciBiaW5hcnlEZWNvZGVyOwp2YXIgaW5pdF9maWxlX3N5c3RlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2ZpbGUtc3lzdGVtLmpzIigpIHsKICAgIGluaXRfbnVsbF9wcm90b3R5cGUoKTsKICAgIGJpbmFyeURlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoImxhdGluMSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMKZnVuY3Rpb24gY29uZmlndXJlQVBJS2V5KGtleTIpIHsKICBpZiAoYXV0aFN0YXRlLmJvb3RDYWxsZWQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiYGNvbmZpZ3VyZUFQSUtleWAgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGBXZWJDb250YWluZXIuYm9vdGAiKTsKICB9CiAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIiwga2V5Mik7Cn0KYXN5bmMgZnVuY3Rpb24gdW5zeW5jaHJvbml6ZWRCb290KG9wdGlvbnMpIHsKICBjb25zdCB7IHNlcnZlclByb21pc2UgfSA9IHNlcnZlckZhY3Rvcnkob3B0aW9ucyk7CiAgY29uc3Qgc2VydmVyID0gYXdhaXQgc2VydmVyUHJvbWlzZTsKICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHNlcnZlci5idWlsZCh7CiAgICBob3N0OiB3aW5kb3cubG9jYXRpb24uaG9zdCwKICAgIHZlcnNpb246ICIxLjYuMSIsCiAgICB3b3JrZGlyTmFtZTogb3B0aW9ucy53b3JrZGlyTmFtZSwKICAgIGZvcndhcmRQcmV2aWV3RXJyb3JzOiBvcHRpb25zLmZvcndhcmRQcmV2aWV3RXJyb3JzCiAgfSk7CiAgY29uc3QgW2ZzLCBwcmV2aWV3U2NyaXB0LCBydW50aW1lSW5mb10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICBpbnN0YW5jZS5mcygpLAogICAgaW5zdGFuY2UucHJldmlld1NjcmlwdCgpLAogICAgaW5zdGFuY2UucnVudGltZUluZm8oKQogIF0pOwogIHJldHVybiBuZXcgV2ViQ29udGFpbmVyKGluc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgcnVudGltZUluZm8pOwp9CmZ1bmN0aW9uIGJpbmFyeUxpc3RlbmVyKGxpc3RlbmVyMikgewogIGlmIChsaXN0ZW5lcjIgPT0gbnVsbCkgewogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgbGlzdGVuZXIyKGRlY29kZXIuZGVjb2RlKGRhdGEpKTsKICAgIH0gZWxzZSBpZiAoZGF0YSA9PSBudWxsKSB7CiAgICAgIGxpc3RlbmVyMihudWxsKTsKICAgIH0KICB9Owp9CmZ1bmN0aW9uIHByb3h5TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgaWYgKGxpc3RlbmVyMiA9PSBudWxsKSB7CiAgICByZXR1cm4gdm9pZCAwOwogIH0KICByZXR1cm4gY29tbGlua19leHBvcnRzLnByb3h5KGxpc3RlbmVyMik7Cn0KZnVuY3Rpb24gc2VydmVyRmFjdG9yeShvcHRpb25zKSB7CiAgaWYgKGNhY2hlZFNlcnZlclByb21pc2UgIT0gbnVsbCkgewogICAgaWYgKG9wdGlvbnMuY29lcCAhPT0gY2FjaGVkQm9vdE9wdGlvbnMuY29lcCkgewogICAgICBjb25zb2xlLndhcm4oYEF0dGVtcHRpbmcgdG8gYm9vdCBXZWJDb250YWluZXIgd2l0aCAnY29lcDogJHtvcHRpb25zLmNvZXB9J2ApOwogICAgICBjb25zb2xlLndhcm4oYEZpcnN0IGJvb3QgaGFkICdjb2VwOiAke2NhY2hlZEJvb3RPcHRpb25zLmNvZXB9JywgbmV3IHNldHRpbmdzIHdpbGwgbm90IHRha2UgZWZmZWN0IWApOwogICAgfQogICAgcmV0dXJuIHsgc2VydmVyUHJvbWlzZTogY2FjaGVkU2VydmVyUHJvbWlzZSB9OwogIH0KICBpZiAob3B0aW9ucy5jb2VwKSB7CiAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjb2VwIiwgb3B0aW9ucy5jb2VwKTsKICB9CiAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudGFsTm9kZSkgewogICAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiZXhwZXJpbWVudGFsX25vZGUiLCAiMSIpOwogIH0KICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBpZnJhbWUuc2V0QXR0cmlidXRlKCJhbGxvdyIsICJjcm9zcy1vcmlnaW4taXNvbGF0ZWQiKTsKICBjb25zdCB1cmwgPSBpZnJhbWVTZXR0aW5ncy51cmw7CiAgaWZyYW1lLnNyYyA9IHVybC50b1N0cmluZygpOwogIGNvbnN0IHsgb3JpZ2luIH0gPSB1cmw7CiAgY2FjaGVkQm9vdE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjYWNoZWRTZXJ2ZXJQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICBjb25zdCBvbk1lc3NhZ2U1ID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IG9yaWdpbikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50OwogICAgICBpZiAoZGF0YS50eXBlID09PSAiaW5pdCIpIHsKICAgICAgICByZXNvbHZlMihjb21saW5rX2V4cG9ydHMud3JhcChldmVudC5wb3J0c1swXSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZGF0YS50eXBlID09PSAid2FybmluZyIpIHsKICAgICAgICBjb25zb2xlW2RhdGEubGV2ZWxdLmNhbGwoY29uc29sZSwgZGF0YS5tZXNzYWdlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH07CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZTUpOwogIH0pOwogIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGlmcmFtZSwgbnVsbCk7CiAgcmV0dXJuIHsgc2VydmVyUHJvbWlzZTogY2FjaGVkU2VydmVyUHJvbWlzZSB9Owp9CmZ1bmN0aW9uIGlzU3RyaW5nQXJyYXkobGlzdDUpIHsKICByZXR1cm4gdHlwZW9mIGxpc3Q1WzBdID09PSAic3RyaW5nIjsKfQpmdW5jdGlvbiBpc1R5cGVkQXJyYXlDb2xsZWN0aW9uKGxpc3Q1KSB7CiAgcmV0dXJuIGxpc3Q1WzBdIGluc3RhbmNlb2YgVWludDhBcnJheTsKfQpmdW5jdGlvbiBzdHJlYW1XaXRoUHVzaCgpIHsKICBsZXQgY29udHJvbGxlciA9IG51bGw7CiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgIHN0YXJ0KGNvbnRyb2xsZXJfKSB7CiAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyXzsKICAgIH0KICB9KTsKICBjb25zdCBwdXNoMiA9IChpdGVtKSA9PiB7CiAgICBpZiAoaXRlbSAhPSBudWxsKSB7CiAgICAgIGNvbnRyb2xsZXI/LmVucXVldWUoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBjb250cm9sbGVyPy5jbG9zZSgpOwogICAgICBjb250cm9sbGVyID0gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiB7IHN0cmVhbSwgcHVzaDogcHVzaDIgfTsKfQpmdW5jdGlvbiBzeW5jU3Vic2NyaXB0aW9uKGxpc3RlbmVyMikgewogIGxldCBzdG9wcGVkID0gZmFsc2U7CiAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gewogIH07CiAgY29uc3Qgd3JhcHBlZCA9ICgoLi4uYXJncykgPT4gewogICAgaWYgKHN0b3BwZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGlzdGVuZXIyKC4uLmFyZ3MpOwogIH0pOwogIHJldHVybiB7CiAgICBzdWJzY3JpYmUocHJvbWlzZSkgewogICAgICBwcm9taXNlLnRoZW4oKHVuc3Vic2NyaWJlXykgPT4gewogICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgIGlmIChzdG9wcGVkKSB7CiAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgc3RvcHBlZCA9IHRydWU7CiAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgfTsKICAgIH0sCiAgICBsaXN0ZW5lcjogd3JhcHBlZAogIH07Cn0KdmFyIGF1dGgyLCBib290UHJvbWlzZSwgY2FjaGVkU2VydmVyUHJvbWlzZSwgY2FjaGVkQm9vdE9wdGlvbnMsIGRlY29kZXIsIGVuY29kZXIsIFdlYkNvbnRhaW5lciwgRElSX0VOVFJZX1RZUEVfRklMRSwgRElSX0VOVFJZX1RZUEVfRElSLCBEaXJFbnRJbXBsLCBGU1dhdGNoZXIsIFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsLCBGaWxlU3lzdGVtQVBJQ2xpZW50Owp2YXIgaW5pdF9kaXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMiKCkgewogICAgaW5pdF9hdXRoX3N0YXRlKCk7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgaW5pdF92ZW5kb3IoKTsKICAgIGluaXRfYXV0aF9zdGF0ZSgpOwogICAgaW5pdF90b2tlbnMoKTsKICAgIGluaXRfaWZyYW1lX3VybCgpOwogICAgaW5pdF91dGlsczIoKTsKICAgIGluaXRfZmlsZV9zeXN0ZW0oKTsKICAgIGluaXRfdXRpbHMyKCk7CiAgICBhdXRoMiA9IGF1dGg7CiAgICBib290UHJvbWlzZSA9IG51bGw7CiAgICBjYWNoZWRTZXJ2ZXJQcm9taXNlID0gbnVsbDsKICAgIGNhY2hlZEJvb3RPcHRpb25zID0ge307CiAgICBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgICBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICBXZWJDb250YWluZXIgPSBjbGFzcyBfV2ViQ29udGFpbmVyIHsKICAgICAgX2luc3RhbmNlOwogICAgICBfcnVudGltZUluZm87CiAgICAgIC8qKgogICAgICAgKiBHaXZlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0uCiAgICAgICAqLwogICAgICBmczsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX2luc3RhbmNlID0gbnVsbDsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX3RlYXJkb3duUHJvbWlzZSA9IG51bGw7CiAgICAgIF90b3JuRG93biA9IGZhbHNlOwogICAgICBfdW5zdWJzY3JpYmVGcm9tVG9rZW5DaGFuZ2VkTGlzdGVuZXIgPSAoKSA9PiB7CiAgICAgIH07CiAgICAgIC8qKiBAaW50ZXJuYWwgKi8KICAgICAgY29uc3RydWN0b3IoX2luc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgX3J1bnRpbWVJbmZvKSB7CiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBfaW5zdGFuY2U7CiAgICAgICAgdGhpcy5fcnVudGltZUluZm8gPSBfcnVudGltZUluZm87CiAgICAgICAgdGhpcy5mcyA9IG5ldyBGaWxlU3lzdGVtQVBJQ2xpZW50KGZzKTsKICAgICAgICBpZiAoYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lciA9IGFkZEFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVyKChhY2Nlc3NUb2tlbikgPT4gewogICAgICAgICAgICB0aGlzLl9pbnN0YW5jZS5zZXRDcmVkZW50aWFscyh7IGFjY2Vzc1Rva2VuLCBlZGl0b3JPcmlnaW46IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4gfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucHJvbWlzZTsKICAgICAgICAgICAgaWYgKHRoaXMuX3Rvcm5Eb3duKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFzc2VydEF1dGhUb2tlbnMoYXV0aFN0YXRlLnRva2Vucyk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHsKICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYXV0aFN0YXRlLnRva2Vucy5hY2Nlc3MsCiAgICAgICAgICAgICAgZWRpdG9yT3JpZ2luOiBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkoKS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgc3Bhd24oY29tbWFuZCwgb3B0aW9uc09yQXJncywgb3B0aW9ucykgewogICAgICAgIGxldCBhcmdzID0gW107CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uc09yQXJncykpIHsKICAgICAgICAgIGFyZ3MgPSBvcHRpb25zT3JBcmdzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yQXJnczsKICAgICAgICB9CiAgICAgICAgbGV0IG91dHB1dCA9IHZvaWQgMDsKICAgICAgICBsZXQgb3V0cHV0U3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7CiAgICAgICAgaWYgKG9wdGlvbnM/Lm91dHB1dCAhPT0gZmFsc2UpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmVhbVdpdGhQdXNoKCk7CiAgICAgICAgICBvdXRwdXQgPSByZXN1bHQucHVzaDsKICAgICAgICAgIG91dHB1dFN0cmVhbSA9IHJlc3VsdC5zdHJlYW07CiAgICAgICAgfQogICAgICAgIGxldCBzdGRvdXQgPSB2b2lkIDA7CiAgICAgICAgbGV0IHN0ZG91dFN0cmVhbTsKICAgICAgICBsZXQgc3RkZXJyID0gdm9pZCAwOwogICAgICAgIGxldCBzdGRlcnJTdHJlYW07CiAgICAgICAgY29uc3Qgd3JhcHBlZE91dHB1dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIob3V0cHV0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZG91dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3Rkb3V0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZGVyciA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3RkZXJyKSk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5ydW4oewogICAgICAgICAgY29tbWFuZCwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBjd2Q6IG9wdGlvbnM/LmN3ZCwKICAgICAgICAgIGVudjogb3B0aW9ucz8uZW52LAogICAgICAgICAgdGVybWluYWw6IG9wdGlvbnM/LnRlcm1pbmFsCiAgICAgICAgfSwgd3JhcHBlZFN0ZG91dCwgd3JhcHBlZFN0ZGVyciwgd3JhcHBlZE91dHB1dCk7CiAgICAgICAgcmV0dXJuIG5ldyBXZWJDb250YWluZXJQcm9jZXNzSW1wbChwcm9jZXNzNCwgb3V0cHV0U3RyZWFtLCBzdGRvdXRTdHJlYW0sIHN0ZGVyclN0cmVhbSk7CiAgICAgIH0KICAgICAgYXN5bmMgZXhwb3J0KHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2VyaWFsaXplT3B0aW9ucyA9IHsKICAgICAgICAgIGZvcm1hdDogb3B0aW9ucz8uZm9ybWF0ID8/ICJqc29uIiwKICAgICAgICAgIGluY2x1ZGVzOiBvcHRpb25zPy5pbmNsdWRlcywKICAgICAgICAgIGV4Y2x1ZGVzOiBvcHRpb25zPy5leGNsdWRlcywKICAgICAgICAgIGV4dGVybmFsOiB0cnVlCiAgICAgICAgfTsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXJpYWxpemUocGF0aDIsIHNlcmlhbGl6ZU9wdGlvbnMpOwogICAgICAgIGlmIChzZXJpYWxpemVPcHRpb25zLmZvcm1hdCA9PT0gImpzb24iKSB7CiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShyZXN1bHQpKTsKICAgICAgICAgIHJldHVybiB0b0V4dGVybmFsRmlsZVN5c3RlbVRyZWUoZGF0YSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgb24oZXZlbnQsIGxpc3RlbmVyMikgewogICAgICAgIGlmIChldmVudCA9PT0gInByZXZpZXctbWVzc2FnZSIpIHsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0ZW5lcjI7CiAgICAgICAgICBsaXN0ZW5lcjIgPSAoKG1lc3NhZ2UyKSA9PiB7CiAgICAgICAgICAgIGlmIChpc1ByZXZpZXdNZXNzYWdlKG1lc3NhZ2UyKSkgewogICAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIobWVzc2FnZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyBsaXN0ZW5lcjogd3JhcHBlZCwgc3Vic2NyaWJlOiBzdWJzY3JpYmUyIH0gPSBzeW5jU3Vic2NyaXB0aW9uKGxpc3RlbmVyMik7CiAgICAgICAgcmV0dXJuIHN1YnNjcmliZTIodGhpcy5faW5zdGFuY2Uub24oZXZlbnQsIGNvbWxpbmtfZXhwb3J0cy5wcm94eSh3cmFwcGVkKSkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBNb3VudHMgYSB0cmVlIG9mIGZpbGVzIGludG8gdGhlIGZpbGVzeXN0ZW0uIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHRyZWUgb2JqZWN0ICh7QGxpbmsgRmlsZVN5c3RlbVRyZWV9KQogICAgICAgKiBvciBhcyBhIGJpbmFyeSBzbmFwc2hvdCBnZW5lcmF0ZWQgYnkgW2BAd2ViY29udGFpbmVyL3NuYXBzaG90YF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHdlYmNvbnRhaW5lci9zbmFwc2hvdCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzbmFwc2hvdE9yVHJlZSAtIEEgdHJlZSBvZiBmaWxlcywgb3IgYSBiaW5hcnkgc25hcHNob3QuIE5vdGUgdGhhdCBiaW5hcnkgcGF5bG9hZHMgd2lsbCBiZSB0cmFuc2ZlcnJlZC4KICAgICAgICogQHBhcmFtIG9wdGlvbnMubW91bnRQb2ludCAtIFNwZWNpZmllcyBhIG5lc3RlZCBwYXRoIHdoZXJlIHRoZSB0cmVlIHNob3VsZCBiZSBtb3VudGVkLgogICAgICAgKi8KICAgICAgbW91bnQoc25hcHNob3RPclRyZWUsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBwYXlsb2FkID0gc25hcHNob3RPclRyZWUgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gc25hcHNob3RPclRyZWUgOiBzbmFwc2hvdE9yVHJlZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoc25hcHNob3RPclRyZWUpIDogZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKHNuYXBzaG90T3JUcmVlKSkpOwogICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5sb2FkRmlsZXMoY29tbGlua19leHBvcnRzLnRyYW5zZmVyKHBheWxvYWQsIFtwYXlsb2FkLmJ1ZmZlcl0pLCB7CiAgICAgICAgICBtb3VudFBvaW50czogb3B0aW9ucz8ubW91bnRQb2ludAogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgYSBjdXN0b20gc2NyaXB0IHRvIGJlIGluamVjdGVkIGludG8gYWxsIHByZXZpZXdzLiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBldmVyeQogICAgICAgKiBmdXR1cmUgcGFnZSByZWxvYWQgd2lsbCBjb250YWluIHRoZSBwcm92aWRlZCBzY3JpcHQgdGFnIG9uIGFsbCBIVE1MIHJlc3BvbnNlcy4KICAgICAgICoKICAgICAgICogTm90ZToKICAgICAgICoKICAgICAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCBldmVyeSBwcmV2aWV3IHJlbG9hZGVkIF9hZnRlcl8gd2lsbCBoYXZlIHRoZSBuZXcgc2NyaXB0LgogICAgICAgKiBFeGlzdGluZyBwcmV2aWV3IGhhdmUgdG8gYmUgZXhwbGljaXRlbHkgcmVsb2FkZWQuCiAgICAgICAqCiAgICAgICAqIFRvIHJlbG9hZCBhIHByZXZpZXcgeW91IGNhbiB1c2UgYHJlbG9hZFByZXZpZXdgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gc2NyaXB0U3JjIFNvdXJjZSBmb3IgdGhlIHNjcmlwdCB0YWcuCiAgICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gZGVmaW5lIHdoaWNoIHR5cGUgb2Ygc2NyaXB0IHRoaXMgaXMuCiAgICAgICAqLwogICAgICBzZXRQcmV2aWV3U2NyaXB0KHNjcmlwdFNyYywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5zZXRQcmV2aWV3U2NyaXB0KHNjcmlwdFNyYywgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBgUEFUSGAgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHByb2Nlc3NlcyBzdGFydGVkIHRocm91Z2gge0BsaW5rIHNwYXdufS4KICAgICAgICovCiAgICAgIGdldCBwYXRoKCkgewogICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5wYXRoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIHtAbGluayBGaWxlU3lzdGVtQVBJfSkuCiAgICAgICAqLwogICAgICBnZXQgd29ya2RpcigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUluZm8uY3dkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXN0cm95cyB0aGUgV2ViQ29udGFpbmVyIGluc3RhbmNlLCB0dXJuaW5nIGl0IHVudXNhYmxlLCBhbmQgcmVsZWFzZXMgaXRzIHJlc291cmNlcy4gQWZ0ZXIgdGhpcywKICAgICAgICogYSBuZXcgV2ViQ29udGFpbmVyIGluc3RhbmNlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHtAbGluayBXZWJDb250YWluZXIuYm9vdCB8IGBib290YH0uCiAgICAgICAqCiAgICAgICAqIEFsbCBlbnRpdGllcyBkZXJpdmVkIGZyb20gdGhpcyBpbnN0YW5jZSAoZS5nLiBwcm9jZXNzZXMsIHRoZSBmaWxlIHN5c3RlbSwgZXRjLikgYWxzbyBiZWNvbWUgdW51c2FibGUKICAgICAgICogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC4KICAgICAgICovCiAgICAgIHRlYXJkb3duKCkgewogICAgICAgIGlmICh0aGlzLl90b3JuRG93bikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXIgYWxyZWFkeSB0b3JuIGRvd24iKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fdG9ybkRvd24gPSB0cnVlOwogICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyKCk7CiAgICAgICAgY29uc3QgdGVhcmRvd25GbiA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuZnMuX3RlYXJkb3duKCk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luc3RhbmNlLnRlYXJkb3duKCk7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVtjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgICAgICBpZiAoX1dlYkNvbnRhaW5lci5faW5zdGFuY2UgPT09IHRoaXMpIHsKICAgICAgICAgICAgICBfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIF9XZWJDb250YWluZXIuX3RlYXJkb3duUHJvbWlzZSA9IHRlYXJkb3duRm4oKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQm9vdHMgYSBXZWJDb250YWluZXIuIE9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgV2ViQ29udGFpbmVyIGNhbiBiZSBib290ZWQgY29uY3VycmVudGx5CiAgICAgICAqIChzZWUge0BsaW5rIFdlYkNvbnRhaW5lci50ZWFyZG93biB8IGB0ZWFyZG93bmB9KS4KICAgICAgICoKICAgICAgICogQm9vdGluZyBXZWJDb250YWluZXIgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KICAgICAgICovCiAgICAgIHN0YXRpYyBhc3luYyBib290KG9wdGlvbnMgPSB7fSkgewogICAgICAgIGF3YWl0IHRoaXMuX3RlYXJkb3duUHJvbWlzZTsKICAgICAgICBfV2ViQ29udGFpbmVyLl90ZWFyZG93blByb21pc2UgPSBudWxsOwogICAgICAgIGNvbnN0IHsgd29ya2Rpck5hbWUgfSA9IG9wdGlvbnM7CiAgICAgICAgaWYgKHdpbmRvdy5jcm9zc09yaWdpbklzb2xhdGVkICYmIG9wdGlvbnMuY29lcCA9PT0gIm5vbmUiKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oYEEgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSBoZWFkZXIgaXMgcmVxdWlyZWQgaW4gY3Jvc3Mgb3JpZ2luIGlzb2xhdGVkIGVudmlyb25tZW50cy4KU2V0IHRoZSAnY29lcCcgb3B0aW9uIHRvICdyZXF1aXJlLWNvcnAnLmApOwogICAgICAgIH0KICAgICAgICBpZiAod29ya2Rpck5hbWU/LmluY2x1ZGVzKCIvIikgfHwgd29ya2Rpck5hbWUgPT09ICIuLiIgfHwgd29ya2Rpck5hbWUgPT09ICIuIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ3b3JrZGlyTmFtZSBzaG91bGQgYmUgYSB2YWxpZCBmb2xkZXIgbmFtZSIpOwogICAgICAgIH0KICAgICAgICBhdXRoU3RhdGUuYm9vdENhbGxlZCA9IHRydWU7CiAgICAgICAgd2hpbGUgKGJvb3RQcm9taXNlKSB7CiAgICAgICAgICBhd2FpdCBib290UHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXIuX2luc3RhbmNlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk9ubHkgYSBzaW5nbGUgV2ViQ29udGFpbmVyIGluc3RhbmNlIGNhbiBiZSBib290ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaW5zdGFuY2VQcm9taXNlID0gdW5zeW5jaHJvbml6ZWRCb290KG9wdGlvbnMpOwogICAgICAgIGJvb3RQcm9taXNlID0gaW5zdGFuY2VQcm9taXNlLmNhdGNoKCgpID0+IHsKICAgICAgICB9KTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBpbnN0YW5jZVByb21pc2U7CiAgICAgICAgICBfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9IGluc3RhbmNlOwogICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgRElSX0VOVFJZX1RZUEVfRklMRSA9IDE7CiAgICBESVJfRU5UUllfVFlQRV9ESVIgPSAyOwogICAgRGlyRW50SW1wbCA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgX3R5cGU7CiAgICAgIGNvbnN0cnVjdG9yKG5hbWUsIF90eXBlKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICB0aGlzLl90eXBlID0gX3R5cGU7CiAgICAgIH0KICAgICAgaXNGaWxlKCkgewogICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBESVJfRU5UUllfVFlQRV9GSUxFOwogICAgICB9CiAgICAgIGlzRGlyZWN0b3J5KCkgewogICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBESVJfRU5UUllfVFlQRV9ESVI7CiAgICAgIH0KICAgIH07CiAgICBGU1dhdGNoZXIgPSBjbGFzcyB7CiAgICAgIF9hcGlDbGllbnQ7CiAgICAgIF9wYXRoOwogICAgICBfb3B0aW9uczsKICAgICAgX2xpc3RlbmVyOwogICAgICBfd3JhcHBlZExpc3RlbmVyOwogICAgICBfd2F0Y2hlcjsKICAgICAgX2Nsb3NlZCA9IGZhbHNlOwogICAgICBjb25zdHJ1Y3RvcihfYXBpQ2xpZW50LCBfcGF0aCwgX29wdGlvbnMsIF9saXN0ZW5lcjIpIHsKICAgICAgICB0aGlzLl9hcGlDbGllbnQgPSBfYXBpQ2xpZW50OwogICAgICAgIHRoaXMuX3BhdGggPSBfcGF0aDsKICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7CiAgICAgICAgdGhpcy5fbGlzdGVuZXIgPSBfbGlzdGVuZXIyOwogICAgICAgIHRoaXMuX2FwaUNsaWVudC5fd2F0Y2hlcnMuYWRkKHRoaXMpOwogICAgICAgIHRoaXMuX3dyYXBwZWRMaXN0ZW5lciA9IChldmVudCwgZmlsZW5hbWUpID0+IHsKICAgICAgICAgIGlmICh0aGlzLl9saXN0ZW5lciAmJiAhdGhpcy5fY2xvc2VkKSB7CiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyKGV2ZW50LCBmaWxlbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9hcGlDbGllbnQuX2ZzLndhdGNoKHRoaXMuX3BhdGgsIHRoaXMuX29wdGlvbnMsIHByb3h5TGlzdGVuZXIodGhpcy5fd3JhcHBlZExpc3RlbmVyKSkudGhlbigoX3dhdGNoZXIpID0+IHsKICAgICAgICAgIHRoaXMuX3dhdGNoZXIgPSBfd2F0Y2hlcjsKICAgICAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RlYXJkb3duKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICB9CiAgICAgIGFzeW5jIGNsb3NlKCkgewogICAgICAgIGlmICghdGhpcy5fY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlOwogICAgICAgICAgdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5kZWxldGUodGhpcyk7CiAgICAgICAgICBhd2FpdCB0aGlzLl90ZWFyZG93bigpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQGludGVybmFsCiAgICAgICAqLwogICAgICBhc3luYyBfdGVhcmRvd24oKSB7CiAgICAgICAgYXdhaXQgdGhpcy5fd2F0Y2hlcj8uY2xvc2UoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICAgIHRoaXMuX3dhdGNoZXI/Lltjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgV2ViQ29udGFpbmVyUHJvY2Vzc0ltcGwgPSBjbGFzcyB7CiAgICAgIG91dHB1dDsKICAgICAgaW5wdXQ7CiAgICAgIGV4aXQ7CiAgICAgIF9wcm9jZXNzOwogICAgICBzdGRvdXQ7CiAgICAgIHN0ZGVycjsKICAgICAgY29uc3RydWN0b3IocHJvY2VzczQsIG91dHB1dCwgc3Rkb3V0LCBzdGRlcnIpIHsKICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDsKICAgICAgICB0aGlzLl9wcm9jZXNzID0gcHJvY2VzczQ7CiAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICB3cml0ZTogKGRhdGEpID0+IHsKICAgICAgICAgICAgdGhpcy5fZ2V0UHJvY2VzcygpPy53cml0ZShkYXRhKS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuZXhpdCA9IHRoaXMuX29uRXhpdCgpOwogICAgICAgIHRoaXMuc3Rkb3V0ID0gc3Rkb3V0OwogICAgICAgIHRoaXMuc3RkZXJyID0gc3RkZXJyOwogICAgICB9CiAgICAgIGtpbGwoKSB7CiAgICAgICAgdGhpcy5fcHJvY2Vzcz8ua2lsbCgpOwogICAgICB9CiAgICAgIHJlc2l6ZShkaW1lbnNpb25zKSB7CiAgICAgICAgdGhpcy5fZ2V0UHJvY2VzcygpPy5yZXNpemUoZGltZW5zaW9ucyk7CiAgICAgIH0KICAgICAgYXN5bmMgX29uRXhpdCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3Byb2Nlc3Mub25FeGl0OwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0aGlzLl9wcm9jZXNzPy5bY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfZ2V0UHJvY2VzcygpIHsKICAgICAgICBpZiAodGhpcy5fcHJvY2VzcyA9PSBudWxsKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oIlRoaXMgcHJvY2VzcyBhbHJlYWR5IGV4aXRlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2VzczsKICAgICAgfQogICAgfTsKICAgIEZpbGVTeXN0ZW1BUElDbGllbnQgPSBjbGFzcyB7CiAgICAgIF9mczsKICAgICAgX3dhdGNoZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW10pOwogICAgICBjb25zdHJ1Y3RvcihmcykgewogICAgICAgIHRoaXMuX2ZzID0gZnM7CiAgICAgIH0KICAgICAgcm0oLi4uYXJncykgewogICAgICAgIHJldHVybiB0aGlzLl9mcy5ybSguLi5hcmdzKTsKICAgICAgfQogICAgICBhc3luYyByZWFkRmlsZShwYXRoMiwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZnMucmVhZEZpbGUocGF0aDIsIGVuY29kaW5nKTsKICAgICAgfQogICAgICBhc3luYyByZW5hbWUob2xkUGF0aCwgbmV3UGF0aCkgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5yZW5hbWUob2xkUGF0aCwgbmV3UGF0aCk7CiAgICAgIH0KICAgICAgYXN5bmMgd3JpdGVGaWxlKHBhdGgyLCBkYXRhLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gZGF0YS5idWZmZXIuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpOwogICAgICAgICAgZGF0YSA9IGNvbWxpbmtfZXhwb3J0cy50cmFuc2ZlcihuZXcgVWludDhBcnJheShidWZmZXIyKSwgW2J1ZmZlcjJdKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5fZnMud3JpdGVGaWxlKHBhdGgyLCBkYXRhLCBvcHRpb25zKTsKICAgICAgfQogICAgICBhc3luYyByZWFkZGlyKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZnMucmVhZGRpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgICAgaWYgKGlzU3RyaW5nQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVHlwZWRBcnJheUNvbGxlY3Rpb24ocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgY29uc3QgZW50cmllcyA9IHJlc3VsdC5tYXAoKGVudHJ5KSA9PiBuZXcgRGlyRW50SW1wbChlbnRyeS5uYW1lLCBlbnRyeVsiU3ltYm9sKHR5cGUpIl0pKTsKICAgICAgICByZXR1cm4gZW50cmllczsKICAgICAgfQogICAgICBhc3luYyBta2RpcihwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5ta2RpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIG9wdGlvbnMsIGxpc3RlbmVyMikgewogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbGlzdGVuZXIyID0gb3B0aW9uczsKICAgICAgICAgIG9wdGlvbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEZTV2F0Y2hlcih0aGlzLCBwYXRoMiwgb3B0aW9ucywgbGlzdGVuZXIyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQGludGVybmFsCiAgICAgICAqLwogICAgICBhc3luYyBfdGVhcmRvd24oKSB7CiAgICAgICAgdGhpcy5fZnNbY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5fd2F0Y2hlcnNdLm1hcCgod2F0Y2hlcikgPT4gd2F0Y2hlci5jbG9zZSgpKSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9XZWJDb250YWluZXJFbnZpcm9ubWVudC5qcwp2YXIgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQ7CnZhciBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9lbnZpcm9ubWVudHMvV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuanMiKCkgewogICAgaW5pdF9kaXN0KCk7CiAgICBXZWJDb250YWluZXJFbnZpcm9ubWVudCA9IGNsYXNzIF9XZWJDb250YWluZXJFbnZpcm9ubWVudCB7CiAgICAgIC8vIFN0YXRpYyBzaGFyZWQgc3RhdGUgLSBXZWJDb250YWluZXIgb25seSBhbGxvd3MgT05FIGJvb3QgcGVyIHBhZ2UKICAgICAgc3RhdGljIHNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgIHN0YXRpYyBib290UHJvbWlzZSA9IG51bGw7CiAgICAgIF9yZWFkeSA9IGZhbHNlOwogICAgICB0eXBlID0gIndlYmNvbnRhaW5lciI7CiAgICAgIGdldCByZWFkeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHk7CiAgICAgIH0KICAgICAgZ2V0IGNvbnRhaW5lcigpIHsKICAgICAgICByZXR1cm4gX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcjsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gTGlmZWN5Y2xlID09PT09PT09PT09PQogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLl9yZWFkeSAmJiBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZTsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIpIHsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyIHJlcXVpcmVzIFNoYXJlZEFycmF5QnVmZmVyIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSB5b3VyIHNlcnZlciBzZW5kcyB0aGVzZSBoZWFkZXJzOlxuICBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeTogc2FtZS1vcmlnaW5cbiAgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeTogcmVxdWlyZS1jb3JwIik7CiAgICAgICAgfQogICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IFdlYkNvbnRhaW5lci5ib290KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIgPSBhd2FpdCBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2U7CiAgICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgICBpZiAoX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcikgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lci50ZWFyZG93bigpOwogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UgPSBudWxsOwogICAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyA9PT09PT09PT09PT0KICAgICAgYXN5bmMgcmVhZEZpbGUocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyLCAidXRmLTgiKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGNvbnRlbnRzKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLndyaXRlRmlsZShwYXRoMiwgY29udGVudHMsICJ1dGYtOCIpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWREaXIocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRkaXIocGF0aDIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTsKICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgdHlwZTogZW50cnkuaXNEaXJlY3RvcnkoKSA/ICJkaXJlY3RvcnkiIDogImZpbGUiLAogICAgICAgICAgbmFtZTogZW50cnkubmFtZSwKICAgICAgICAgIHBhdGg6IHBhdGgyID09PSAiLyIgPyBgLyR7ZW50cnkubmFtZX1gIDogYCR7cGF0aDJ9LyR7ZW50cnkubmFtZX1gCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGFzeW5jIG1rZGlyKHBhdGgyKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLm1rZGlyKHBhdGgyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfQogICAgICBhc3luYyBybShwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5ybShwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9KTsKICAgICAgfQogICAgICBhc3luYyBleGlzdHMocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZGRpcihwYXRoMik7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIGNhbGxiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGNvbnN0IHdhdGNoZXIgPSB0aGlzLmNvbnRhaW5lci5mcy53YXRjaChwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9LCBjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHN0b3A6ICgpID0+IHdhdGNoZXIuY2xvc2UoKQogICAgICAgIH07CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByb2Nlc3MgRXhlY3V0aW9uID09PT09PT09PT09PQogICAgICBhc3luYyBzcGF3bihjb21tYW5kLCBhcmdzID0gW10pIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmNvbnRhaW5lci5zcGF3bihjb21tYW5kLCBhcmdzKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgb3V0cHV0OiBwcm9jZXNzNC5vdXRwdXQsCiAgICAgICAgICBpbnB1dDogcHJvY2VzczQuaW5wdXQsCiAgICAgICAgICBleGl0OiBwcm9jZXNzNC5leGl0LAogICAgICAgICAga2lsbDogKCkgPT4gcHJvY2VzczQua2lsbCgpCiAgICAgICAgfTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gV2ViQ29udGFpbmVyLXNwZWNpZmljIG1ldGhvZHMgPT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiBNb3VudCBmaWxlcyBpbnRvIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uCiAgICAgICAqIFRoaXMgaXMgYSBXZWJDb250YWluZXItc3BlY2lmaWMgb3BlcmF0aW9uLgogICAgICAgKiBAcGFyYW0gZmlsZXMgLSBGaWxlIHRyZWUgc3RydWN0dXJlIHRvIG1vdW50CiAgICAgICAqLwogICAgICBhc3luYyBtb3VudChmaWxlcykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5tb3VudChmaWxlcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBXZWJDb250YWluZXIgaW5zdGFuY2UuCiAgICAgICAqIFVzZSBzcGFyaW5nbHkgLSBwcmVmZXIgdGhlIGludGVyZmFjZSBtZXRob2RzLgogICAgICAgKi8KICAgICAgZ2V0Q29udGFpbmVyKCkgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByaXZhdGUgSGVscGVycyA9PT09PT09PT09PT0KICAgICAgZW5zdXJlUmVhZHkoKSB7CiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeSB8fCAhdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyRW52aXJvbm1lbnQgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcwp2YXIgaW5pdF9lbnZpcm9ubWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzCnZhciBpbml0X2dyb3VwX3J1bnRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzIigpIHsKICAgIGluaXRfaW50ZXJmYWNlczMoKTsKICAgIGluaXRfZW52aXJvbm1lbnRzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvZGVlcy1hY3Rpb25iYXIuanMKdmFyIF9fZXNEZWNvcmF0ZTUwLCBfX3J1bkluaXRpYWxpemVyczUxLCBEZWVzQWN0aW9uYmFyOwp2YXIgaW5pdF9kZWVzX2FjdGlvbmJhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWFjdGlvbmJhci9kZWVzLWFjdGlvbmJhci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIF9fZXNEZWNvcmF0ZTUwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBY3Rpb25iYXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hY3Rpb25iYXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2N1cnJlbnRCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50QmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGltZVJlbWFpbmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzVmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBY3Rpb25iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY3VycmVudEJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3RpbWVSZW1haW5pbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wcm9ncmVzc1BlcmNlbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUwKHRoaXMsIG51bGwsIF9jdXJyZW50QmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRCYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRCYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmN1cnJlbnRCYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBfY3VycmVudEJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfdGltZVJlbWFpbmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aW1lUmVtYWluaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lUmVtYWluaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbWVSZW1haW5pbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50aW1lUmVtYWluaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgX3RpbWVSZW1haW5pbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX3Byb2dyZXNzUGVyY2VudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcm9ncmVzc1BlcmNlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2dyZXNzUGVyY2VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9ncmVzc1BlcmNlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wcm9ncmVzc1BlcmNlbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Byb2dyZXNzUGVyY2VudF9pbml0aWFsaXplcnMsIF9wcm9ncmVzc1BlcmNlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX2lzVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc1Zpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FjdGlvbmJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBnZXRBY3Rpb25iYXIgPSAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBidXR0b24uY2xvc2VzdCgiLmRlbW8tY29udGFpbmVyIik7CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3Qgc2hvd0FjdGlvbkJhciA9IGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYWN0aW9uYmFyID0gZ2V0QWN0aW9uYmFyKGUxMSk7CiAgICAgICAgICAgIGlmICghYWN0aW9uYmFyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uYmFyLnNob3coewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJGaWxlIGNoYW5nZWQgZXh0ZXJuYWxseS4gUmVsb2FkPyIsCiAgICAgICAgICAgICAgdHlwZTogIndhcm5pbmciLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsCiAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgeyBpZDogInJlbG9hZCIsIGxhYmVsOiAiUmVsb2FkIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImlnbm9yZSIsIGxhYmVsOiAiSWdub3JlIiB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiA1ZTMsIGRlZmF1bHRBY3Rpb25JZDogInJlbG9hZCIgfSwKICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc29sZS5sb2coIkFjdGlvbiBiYXIgcmVzdWx0OiIsIHJlc3VsdCk7CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3Qgc2hvd0Vycm9yQmFyID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb25iYXIgPSBnZXRBY3Rpb25iYXIoZTExKTsKICAgICAgICAgICAgaWYgKCFhY3Rpb25iYXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb25iYXIuc2hvdyh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIlByb2Nlc3MgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEiLAogICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTp4Q2lyY2xlIiwKICAgICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgICB7IGlkOiAicmV0cnkiLCBsYWJlbDogIlJldHJ5IiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImRpc21pc3MiLCBsYWJlbDogIkRpc21pc3MiIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRpbWVvdXQ6IHsgZHVyYXRpb246IDFlNCwgZGVmYXVsdEFjdGlvbklkOiAiZGlzbWlzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc29sZS5sb2coIkVycm9yIGJhciByZXN1bHQ6IiwgcmVzdWx0KTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93UXVlc3Rpb25CYXIgPSBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbmJhciA9IGdldEFjdGlvbmJhcihlMTEpOwogICAgICAgICAgICBpZiAoIWFjdGlvbmJhcikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbmJhci5zaG93KHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiU2F2ZSBjaGFuZ2VzIGJlZm9yZSBjbG9zaW5nPyIsCiAgICAgICAgICAgICAgdHlwZTogInF1ZXN0aW9uIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmhlbHBDaXJjbGUiLAogICAgICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgICAgIHsgaWQ6ICJzYXZlIiwgbGFiZWw6ICJTYXZlIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImRpc2NhcmQiLCBsYWJlbDogIkRpc2NhcmQiIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiY2FuY2VsIiwgbGFiZWw6ICJDYW5jZWwiIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUXVlc3Rpb24gYmFyIHJlc3VsdDoiLCByZXN1bHQpOwogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgICAgLmRlbW8tY29udGVudCB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGVudCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd0FjdGlvbkJhcn0+V2FybmluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd0Vycm9yQmFyfT5FcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd1F1ZXN0aW9uQmFyfT5RdWVzdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9OwogICAgICAgIC8vIFF1ZXVlIG9mIHBlbmRpbmcgYWN0aW9uIGJhcnMKICAgICAgICBxdWV1ZSA9IFtdOwogICAgICAgICNjdXJyZW50QmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF9jdXJyZW50QmFyX2luaXRpYWxpemVycywgbnVsbCk7CiAgICAgICAgLy8gQ3VycmVudCBhY3RpdmUgYmFyIHN0YXRlCiAgICAgICAgZ2V0IGN1cnJlbnRCYXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudEJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VycmVudEJhcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRCYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RpbWVSZW1haW5pbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF9jdXJyZW50QmFyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfdGltZVJlbWFpbmluZ19pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgdGltZVJlbWFpbmluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aW1lUmVtYWluaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0aW1lUmVtYWluaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGltZVJlbWFpbmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcHJvZ3Jlc3NQZXJjZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfdGltZVJlbWFpbmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX3Byb2dyZXNzUGVyY2VudF9pbml0aWFsaXplcnMsIDEwMCkpOwogICAgICAgIGdldCBwcm9ncmVzc1BlcmNlbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcHJvZ3Jlc3NQZXJjZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwcm9ncmVzc1BlcmNlbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBUaW1lb3V0IGhhbmRsaW5nCiAgICAgICAgdGltZW91dEludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGN1cnJlbnRSZXNvbHZlID0gbnVsbDsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYWN0aW9uYmFyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDAuMnMgZWFzZS1vdXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoLnZpc2libGUpIC5hY3Rpb25iYXItaXRlbSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25iYXItY29udGVudCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyIHsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAxOCUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNTAlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzIGxpbmVhcjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDUwJSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAubWVzc2FnZS1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLmluZm8gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLmVycm9yIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLnF1ZXN0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCAiaHNsKDI3MCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4NSUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmFjdGlvbnMtc2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDMwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNlY29uZGFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkyJSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwgImhzbCgyMTAgMTAwJSA1NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmc6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQwJSkiLCAiaHNsKDM4IDkyJSA0NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3I6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsICJoc2woMCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5xdWVzdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCAiaHNsKDI3MCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5xdWVzdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDQ1JSkiLCAiaHNsKDI3MCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmNvdW50ZG93biB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmRpc21pc3MtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAyMiUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3MCUpIil9OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBiYXIgPSB0aGlzLmN1cnJlbnRCYXI7CiAgICAgICAgICBjb25zdCB0eXBlNSA9IGJhcj8udHlwZSB8fCAiaW5mbyI7CiAgICAgICAgICBjb25zdCBoYXNUaW1lb3V0ID0gYmFyPy50aW1lb3V0ICYmIHRoaXMudGltZVJlbWFpbmluZyA+IDA7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1pdGVtIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25iYXItY29udGVudCI+CiAgICAgICAgICAke2JhciA/IGIyYAogICAgICAgICAgICAke2hhc1RpbWVvdXQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZ3Jlc3MtYmFyLWZpbGwgJHt0eXBlNX0iCiAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnByb2dyZXNzUGVyY2VudH0lIgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2Utc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke2Jhci5pY29uID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibWVzc2FnZS1pY29uICR7dHlwZTV9IgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7YmFyLmljb259CiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE2IgogICAgICAgICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVzc2FnZS10ZXh0Ij4ke2Jhci5tZXNzYWdlfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgJHtiYXIuYWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gdGhpcy5yZW5kZXJBY3Rpb25CdXR0b24oYWN0aW9uLCBiYXIsIGhhc1RpbWVvdXQpKX0KICAgICAgICAgICAgICAgICR7YmFyLmRpc21pc3NpYmxlID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzbWlzcy1idXR0b24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVEaXNtaXNzKCl9CiAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkRpc21pc3MiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckFjdGlvbkJ1dHRvbihhY3Rpb24sIGJhciwgaGFzVGltZW91dCkgewogICAgICAgICAgY29uc3QgaXNQcmltYXJ5ID0gYWN0aW9uLnByaW1hcnk7CiAgICAgICAgICBjb25zdCB0eXBlNSA9IGJhci50eXBlIHx8ICJpbmZvIjsKICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdEFjdGlvbiA9IGJhci50aW1lb3V0Py5kZWZhdWx0QWN0aW9uSWQgPT09IGFjdGlvbi5pZDsKICAgICAgICAgIGNvbnN0IHNob3dDb3VudGRvd24gPSBoYXNUaW1lb3V0ICYmIGlzRGVmYXVsdEFjdGlvbjsKICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwodGhpcy50aW1lUmVtYWluaW5nIC8gMWUzKTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGJ1dHRvbgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7aXNQcmltYXJ5ID8gYHByaW1hcnkgJHt0eXBlNX1gIDogInNlY29uZGFyeSJ9IgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbi5pZCwgZmFsc2UpfQogICAgICA+CiAgICAgICAgJHthY3Rpb24uaWNvbiA/IGIyYAogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29ufSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3Bhbj4ke2FjdGlvbi5sYWJlbH08L3NwYW4+CiAgICAgICAgJHtzaG93Q291bnRkb3duID8gYjJgCiAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRkb3duIj4oJHtzZWNvbmRzfXMpPC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgPC9idXR0b24+CiAgICBgOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIFNob3cgYW4gYWN0aW9uIGJhciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLgogICAgICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbiBhY3Rpb24gaXMgdGFrZW4uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICAgIHRoaXMucXVldWUucHVzaCh7IG9wdGlvbnMsIHJlc29sdmU6IHJlc29sdmUyIH0pOwogICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEJhcikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBEaXNtaXNzIHRoZSBjdXJyZW50IGFjdGlvbiBiYXIgd2l0aG91dCB0cmlnZ2VyaW5nIGFueSBhY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZGlzbWlzcygpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlRGlzbWlzcygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDbGVhciBhbGwgcGVuZGluZyBhY3Rpb24gYmFycyBpbiB0aGUgcXVldWUuCiAgICAgICAgICovCiAgICAgICAgY2xlYXJRdWV1ZSgpIHsKICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnF1ZXVlKSB7CiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZSh7IGFjdGlvbklkOiAiZGlzbWlzc2VkIiwgdGltZWRPdXQ6IGZhbHNlIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5xdWV1ZSA9IFtdOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFByaXZhdGUgTWV0aG9kcyA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogSGlkZSB0aGUgY3VycmVudCBhY3Rpb25iYXIgd2l0aCBhbmltYXRpb24uCiAgICAgICAgICogUmVtb3ZlcyB2aXNpYmxlIGNsYXNzIGZpcnN0IHRvIHRyaWdnZXIgQ1NTIHRyYW5zaXRpb24sIHRoZW4gY2xlYXJzIGNvbnRlbnQgYWZ0ZXIgYW5pbWF0aW9uLgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGhpZGVDdXJyZW50QmFyKCkgewogICAgICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJ2aXNpYmxlIik7CiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAyMjApKTsKICAgICAgICAgIHRoaXMuY3VycmVudEJhciA9IG51bGw7CiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgcHJvY2Vzc1F1ZXVlKCkgewogICAgICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuaGlkZUN1cnJlbnRCYXIoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucXVldWUuc2hpZnQoKTsKICAgICAgICAgIHRoaXMuY3VycmVudEJhciA9IGl0ZW0ub3B0aW9uczsKICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdmUgPSBpdGVtLnJlc29sdmU7CiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChpdGVtLm9wdGlvbnMudGltZW91dCkgewogICAgICAgICAgICB0aGlzLnN0YXJ0VGltZW91dChpdGVtLm9wdGlvbnMudGltZW91dC5kdXJhdGlvbiwgaXRlbS5vcHRpb25zLnRpbWVvdXQuZGVmYXVsdEFjdGlvbklkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhcnRUaW1lb3V0KGR1cmF0aW9uLCBkZWZhdWx0QWN0aW9uSWQpIHsKICAgICAgICAgIHRoaXMudGltZVJlbWFpbmluZyA9IGR1cmF0aW9uOwogICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSAxMDA7CiAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgdXBkYXRlSW50ZXJ2YWwgPSA1MDsKICAgICAgICAgIHRoaXMudGltZW91dEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgdGhpcy50aW1lUmVtYWluaW5nID0gTWF0aC5tYXgoMCwgZHVyYXRpb24gLSBlbGFwc2VkKTsKICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSB0aGlzLnRpbWVSZW1haW5pbmcgLyBkdXJhdGlvbiAqIDEwMDsKICAgICAgICAgICAgaWYgKHRoaXMudGltZVJlbWFpbmluZyA8PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpOwogICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKGRlZmF1bHRBY3Rpb25JZCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHVwZGF0ZUludGVydmFsKTsKICAgICAgICB9CiAgICAgICAgY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKSB7CiAgICAgICAgICBpZiAodGhpcy50aW1lb3V0SW50ZXJ2YWwpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJbnRlcnZhbCk7CiAgICAgICAgICAgIHRoaXMudGltZW91dEludGVydmFsID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQWN0aW9uKGFjdGlvbklkLCB0aW1lZE91dCkgewogICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpOwogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFJlc29sdmUpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x2ZSh7IGFjdGlvbklkLCB0aW1lZE91dCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZURpc21pc3MoKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbigiZGlzbWlzc2VkIiwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQWN0aW9uYmFyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzCnZhciBUZXJtaW5hbFRhYk1hbmFnZXI7CnZhciBpbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzIigpIHsKICAgIFRlcm1pbmFsVGFiTWFuYWdlciA9IGNsYXNzIHsKICAgICAgdGFicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRhYkNvdW50ZXIgPSAwOwogICAgICB4dGVybUJ1bmRsZSA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25CdW5kbGUgPSBudWxsOwogICAgICAvKioKICAgICAgICogSW5pdGlhbGl6ZSB0aGUgbWFuYWdlciB3aXRoIGxvYWRlZCB4dGVybSBtb2R1bGVzLgogICAgICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGFicy4KICAgICAgICovCiAgICAgIHNldFh0ZXJtTW9kdWxlcyh4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGUpIHsKICAgICAgICB0aGlzLnh0ZXJtQnVuZGxlID0geHRlcm1CdW5kbGU7CiAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlID0gZml0QWRkb25CdW5kbGU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdlbmVyYXRlIHVuaXF1ZSB0YWIgSUQKICAgICAgICovCiAgICAgIGdlbmVyYXRlVGFiSWQoKSB7CiAgICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgICAgcmV0dXJuIGB0ZXJtaW5hbC0ke3RoaXMudGFiQ291bnRlcn0tJHtEYXRlLm5vdygpfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBkZWZhdWx0IGxhYmVsIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdExhYmVsKHR5cGU1LCBtZXRhZGF0YSkgewogICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgIGNhc2UgInNoZWxsIjoKICAgICAgICAgICAgcmV0dXJuICJiYXNoIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YT8uc2NyaXB0TmFtZSB8fCAic2NyaXB0IjsKICAgICAgICAgIGNhc2UgInBhY2thZ2UtdXBkYXRlIjoKICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhPy5wYWNrYWdlTmFtZSA/IGB1cGRhdGUgJHttZXRhZGF0YS5wYWNrYWdlTmFtZX1gIDogInVwZGF0ZSI7CiAgICAgICAgICBjYXNlICJjdXN0b20iOgogICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE/LmNvbW1hbmQgfHwgInByb2Nlc3MiOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICJ0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgZGVmYXVsdCBpY29uIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdEljb24odHlwZTUpIHsKICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICBjYXNlICJzaGVsbCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnRlcm1pbmFsIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBsYXkiOwogICAgICAgICAgY2FzZSAicGFja2FnZS11cGRhdGUiOgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpwYWNrYWdlQ2hlY2siOwogICAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6Y29kZSI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTp0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGVybWluYWwgdGhlbWUgY29uZmlndXJhdGlvbgogICAgICAgKi8KICAgICAgZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCkgewogICAgICAgIGlmIChpc0JyaWdodCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvcjogIiMzMzMzMzMiLAogICAgICAgICAgICBjdXJzb3JBY2NlbnQ6ICIjZmZmZmZmIiwKICAgICAgICAgICAgc2VsZWN0aW9uOiAicmdiYSgwLCAwLCAwLCAwLjIpIiwKICAgICAgICAgICAgYmxhY2s6ICIjMDAwMDAwIiwKICAgICAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgICAgIGdyZWVuOiAiIzAwYmMwMCIsCiAgICAgICAgICAgIHllbGxvdzogIiM5NDk4MDAiLAogICAgICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgICAgIG1hZ2VudGE6ICIjYmMwNWJjIiwKICAgICAgICAgICAgY3lhbjogIiMwNTk4YmMiLAogICAgICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgICAgICBicmlnaHRCbGFjazogIiM2NjY2NjYiLAogICAgICAgICAgICBicmlnaHRSZWQ6ICIjY2QzMTMxIiwKICAgICAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2I1YmEwMCIsCiAgICAgICAgICAgIGJyaWdodEJsdWU6ICIjMDQ1MWE1IiwKICAgICAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgICAgICBicmlnaHRDeWFuOiAiIzA1OThiYyIsCiAgICAgICAgICAgIGJyaWdodFdoaXRlOiAiI2E1YTVhNSIKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICIjMDAwMDAwIiwKICAgICAgICAgICAgZm9yZWdyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBjdXJzb3I6ICIjZmZmZmZmIiwKICAgICAgICAgICAgY3Vyc29yQWNjZW50OiAiIzAwMDAwMCIsCiAgICAgICAgICAgIHNlbGVjdGlvbjogInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBuZXcgdGFiIGluc3RhbmNlCiAgICAgICAqLwogICAgICBjcmVhdGVUYWIob3B0aW9ucywgaXNCcmlnaHQpIHsKICAgICAgICBpZiAoIXRoaXMueHRlcm1CdW5kbGUgfHwgIXRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXJtaW5hbFRhYk1hbmFnZXI6IHh0ZXJtIG1vZHVsZXMgbm90IGluaXRpYWxpemVkLiBDYWxsIHNldFh0ZXJtTW9kdWxlcygpIGZpcnN0LiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVUYWJJZCgpOwogICAgICAgIGNvbnN0IHR5cGU1ID0gb3B0aW9ucy50eXBlOwogICAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IHRoaXMueHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgICAgY29udmVydEVvbDogdHJ1ZSwKICAgICAgICAgIGN1cnNvckJsaW5rOiB0cnVlLAogICAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCksCiAgICAgICAgICBmb250RmFtaWx5OiAnTWVubG8sIE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJywKICAgICAgICAgIGZvbnRTaXplOiAxMywKICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuMgogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGZpdEFkZG9uID0gbmV3IHRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZS5GaXRBZGRvbigpOwogICAgICAgIHRlcm1pbmFsLmxvYWRBZGRvbihmaXRBZGRvbik7CiAgICAgICAgY29uc3QgdGFiMiA9IHsKICAgICAgICAgIGlkLAogICAgICAgICAgbGFiZWw6IG9wdGlvbnMubGFiZWwgfHwgdGhpcy5nZXREZWZhdWx0TGFiZWwodHlwZTUsIG9wdGlvbnMubWV0YWRhdGEpLAogICAgICAgICAgaWNvbk5hbWU6IG9wdGlvbnMuaWNvbk5hbWUgfHwgdGhpcy5nZXREZWZhdWx0SWNvbih0eXBlNSksCiAgICAgICAgICB0eXBlOiB0eXBlNSwKICAgICAgICAgIGNsb3NlYWJsZTogb3B0aW9ucy5jbG9zZWFibGUgPz8gdHlwZTUgIT09ICJzaGVsbCIsCiAgICAgICAgICB0ZXJtaW5hbCwKICAgICAgICAgIGZpdEFkZG9uLAogICAgICAgICAgcHJvY2VzczogbnVsbCwKICAgICAgICAgIGlucHV0V3JpdGVyOiBudWxsLAogICAgICAgICAgZXhpdGVkOiBmYWxzZSwKICAgICAgICAgIGV4aXRDb2RlOiBudWxsLAogICAgICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLAogICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEKICAgICAgICB9OwogICAgICAgIHRoaXMudGFicy5zZXQoaWQsIHRhYjIpOwogICAgICAgIHJldHVybiB0YWIyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGFiIGJ5IElECiAgICAgICAqLwogICAgICBnZXRUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmdldChpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBhbGwgdGFicyBhcyBhcnJheSAob3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lKQogICAgICAgKi8KICAgICAgZ2V0QWxsVGFicygpIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYnMudmFsdWVzKCkpLnNvcnQoKGE1LCBiNSkgPT4gYTUuY3JlYXRlZEF0IC0gYjUuY3JlYXRlZEF0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBudW1iZXIgb2YgdGFicwogICAgICAgKi8KICAgICAgZ2V0VGFiQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudGFicy5zaXplOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiB0YWIgZXhpc3RzCiAgICAgICAqLwogICAgICBoYXNUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmhhcyhpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsb3NlIGFuZCBjbGVhbnVwIGEgdGFiCiAgICAgICAqLwogICAgICBjbG9zZVRhYihpZCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHRhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRhYjIucHJvY2Vzcy5raWxsKCk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8ga2lsbCBwcm9jZXNzOiIsIGUxMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGRpc3Bvc2UgdGVybWluYWw6IiwgZTExKTsKICAgICAgICB9CiAgICAgICAgdGhpcy50YWJzLmRlbGV0ZShpZCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbmFtZSBhIHRhYgogICAgICAgKi8KICAgICAgcmVuYW1lVGFiKGlkLCBuZXdMYWJlbCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdGFiMi5sYWJlbCA9IG5ld0xhYmVsOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGUgdGFiIHByb2Nlc3Mgc3RhdGUgdG8gZXhpdGVkCiAgICAgICAqLwogICAgICBtYXJrVGFiRXhpdGVkKGlkLCBleGl0Q29kZSkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGFiMi5leGl0ZWQgPSB0cnVlOwogICAgICAgIHRhYjIuZXhpdENvZGUgPSBleGl0Q29kZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHByb2Nlc3MgZm9yIGEgdGFiCiAgICAgICAqLwogICAgICBzZXRUYWJQcm9jZXNzKGlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpIHsKICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJzLmdldChpZCk7CiAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRhYjIucHJvY2VzcyA9IHByb2Nlc3M0OwogICAgICAgIHRhYjIuaW5wdXRXcml0ZXIgPSBpbnB1dFdyaXRlcjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVXBkYXRlIHRoZW1lIGZvciBhbGwgdGVybWluYWxzCiAgICAgICAqLwogICAgICB1cGRhdGVBbGxUaGVtZXMoaXNCcmlnaHQpIHsKICAgICAgICBjb25zdCB0aGVtZSA9IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCk7CiAgICAgICAgZm9yIChjb25zdCB0YWIyIG9mIHRoaXMudGFicy52YWx1ZXMoKSkgewogICAgICAgICAgdGFiMi50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhlbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEaXNwb3NlIGFsbCB0YWJzIGFuZCBjbGVhbnVwCiAgICAgICAqLwogICAgICBkaXNwb3NlQWxsKCkgewogICAgICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLnRhYnMpIHsKICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaWQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRhYnMuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcwp2YXIgZGVlc193b3Jrc3BhY2VfdGVybWluYWxfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzLCB7CiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOiAoKSA9PiBEZWVzV29ya3NwYWNlVGVybWluYWwKfSk7CnZhciBfX2VzRGVjb3JhdGU1MSwgX19ydW5Jbml0aWFsaXplcnM1MiwgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZ3JvdXBfcnVudGltZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19hY3Rpb25iYXIoKTsKICAgIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIoKTsKICAgIGluaXRfc2VydmljZXMoKTsKICAgIF9fZXNEZWNvcmF0ZTUxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNXb3Jrc3BhY2VUZXJtaW5hbCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFiQmFyV2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VGFiQmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlVGFiSWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfdGFiQmFyV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfdGFic19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2FjdGl2ZVRhYklkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9zZXR1cENvbW1hbmRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2V0dXBDb21tYW5kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2V0dXBDb21tYW5kLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBfc2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbnZpcm9ubWVudFZhcmlhYmxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW52aXJvbm1lbnRWYXJpYWJsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW52aXJvbm1lbnRWYXJpYWJsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfaW5pdGlhbGl6ZXJzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3RhYkJhcldpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkJhcldpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJCYXJXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJCYXJXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYkJhcldpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VGFiQmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFiQmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dUYWJCYXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VGFiQmFyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VGFiQmFyX2luaXRpYWxpemVycywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGFic19pbml0aWFsaXplcnMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9hY3RpdmVUYWJJZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVUYWJJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlVGFiSWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlVGFiSWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmVUYWJJZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlVGFiSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVudjIgPSBuZXcgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7ZW52Mn0+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD5gOwogICAgICAgIH07CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgcmVzaXplT2JzZXJ2ZXI7CiAgICAgICAgdGFiTWFuYWdlcjsKICAgICAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAocmVxdWlyZWQpLgogICAgICAgICAqIFVzZSBXZWJDb250YWluZXJFbnZpcm9ubWVudCBmb3IgYnJvd3Nlci1iYXNlZCBleGVjdXRpb24uCiAgICAgICAgICovCiAgICAgICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHNldHVwQ29tbWFuZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgLyoqCiAgICAgICAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgc2hlbGwKICAgICAgICAgKi8KICAgICAgICBnZXQgZW52aXJvbm1lbnRWYXJpYWJsZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVudmlyb25tZW50VmFyaWFibGVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIDE2MCkpOwogICAgICAgIC8qKgogICAgICAgICAqIFdpZHRoIG9mIHRoZSB0YWIgYmFyIGluIHBpeGVscwogICAgICAgICAqLwogICAgICAgIGdldCB0YWJCYXJXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFiQmFyV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2hvd1RhYkJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICAvKioKICAgICAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHRhYiBiYXIKICAgICAgICAgKi8KICAgICAgICBnZXQgc2hvd1RhYkJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93VGFiQmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICAvLyBUYWIgc3RhdGUKICAgICAgICBnZXQgdGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGFjdGl2ZVRhYklkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3RpdmVUYWJJZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRoZW1lIHN1YnNjcmlwdGlvbiBmb3IgZHluYW1pYyB0aGVtZSB1cGRhdGVzCiAgICAgICAgdGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGlzQnJpZ2h0ID0gZmFsc2U7CiAgICAgICAgLy8gQWN0aW9uYmFyIHJlZmVyZW5jZSBmb3IgdGVybWluYWwtY29udGV4dCBub3RpZmljYXRpb25zCiAgICAgICAgdGVybWluYWxBY3Rpb25iYXIgPSBudWxsOwogICAgICAgIC8qKgogICAgICAgICAqIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyByZWFkeS4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZXhlY3V0aW9uRW52aXJvbm1lbnQgZGlyZWN0bHkKICAgICAgICAgKi8KICAgICAgICBlbnZpcm9ubWVudERlZmVycmVkID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuRGVmZXJyZWQoKTsKICAgICAgICBlbnZpcm9ubWVudFByb21pc2UgPSB0aGlzLmVudmlyb25tZW50RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIgPSBuZXcgVGVybWluYWxUYWJNYW5hZ2VyKCk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgICNhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgZGVlcy1hY3Rpb25iYXIgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUYWIgYmFyIG9uIHRoZSByaWdodCBzaWRlICovCiAgICAgIC50YWItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudGFiLWJhci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItYmFyLXRpdGxlIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC50YWItYmFyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uIHsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBoZWlnaHQ6IDIycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAudGFiLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyNSUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDk1JSkiLCAiaHNsKDIxMCAzMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0MCUpIiwgImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiLmV4aXRlZCB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAudGFiLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLWljb24ucnVubmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA0MCUpIiwgImhzbCgxNDIgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuZXhpdC1iYWRnZSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDFweCA1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA5MCUpIiwgImhzbCgxNDIgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDkzJSkiLCAiaHNsKDAgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZSB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLyogeHRlcm0uanMgc3R5bGVzICovCiAgICAgIC54dGVybSB7CiAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYScgMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybS5mb2N1cywKICAgICAgLnh0ZXJtOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogLTU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZmZmZmZmIil9OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3LmFjdGl2ZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC54dGVybSB7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMgewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWFjY2Vzc2liaWxpdHksCiAgICAgIC54dGVybSAueHRlcm0tbWVzc2FnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC54dGVybSAubGl2ZS1yZWdpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWRpbSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAueHRlcm0tdW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWJJZCA/IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgOiBudWxsOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgIDwhLS0gTWFpbiB0ZXJtaW5hbCBhcmVhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiPgogICAgICAgICAgJHthY3RpdmVUYWIgPyBiMmAKICAgICAgICAgICAgPGRpdiBpZD0iYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp0ZXJtaW5hbCJ9IGljb25TaXplPSIzMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4+Tm8gdGVybWluYWwgb3Blbjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVydGljYWwgdGFiIGJhciBvbiB0aGUgcmlnaHQgLS0+CiAgICAgICAgJHt0aGlzLnNob3dUYWJCYXIgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnRhYkJhcldpZHRofXB4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1oZWFkZXIiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItYmFyLXRpdGxlIj5UZXJtaW5hbHM8L3NwYW4+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1hY3Rpb25zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1hY3Rpb24iIEBjbGljaz0ke3RoaXMuaGFuZGxlQWRkVGFifSB0aXRsZT0iTmV3IFRlcm1pbmFsIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGx1cyJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItbGlzdCI+CiAgICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InRlcm1pbmFsLXRhYiAke3RhYjIuaWQgPT09IHRoaXMuYWN0aXZlVGFiSWQgPyAiYWN0aXZlIiA6ICIifSAke3RhYjIuZXhpdGVkID8gImV4aXRlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAuaWNvbj0ke3RhYjIuaWNvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWItaWNvbiAke3RhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQgPyAicnVubmluZyIgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1sYWJlbCI+JHt0YWIyLmxhYmVsfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgJHt0YWIyLmV4aXRlZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJleGl0LWJhZGdlICR7dGFiMi5leGl0Q29kZSA9PT0gMCA/ICJzdWNjZXNzIiA6ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICR7dGFiMi5leGl0Q29kZX0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0YWIyLmNsb3NlYWJsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0keyhlMTEpID0+IHRoaXMuaGFuZGxlVGFiQ2xvc2UoZTExLCB0YWIyLmlkKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICB0aGlzLmlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgICAgdGhpcy5pc0JyaWdodCA9IGdvQnJpZ2h0OwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIudXBkYXRlQWxsVGhlbWVzKGdvQnJpZ2h0KTsKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgIGNvbnN0IFt4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpCiAgICAgICAgICBdKTsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5zZXRYdGVybU1vZHVsZXMoeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlKTsKICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2hlbGxUYWIoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24pIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuZGlzcG9zZUFsbCgpOwogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBUYWIgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgaGFuZGxlQWRkVGFiKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVUYWJDbG9zZShlMTEsIHRhYklkKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB0aGlzLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoVG9UYWIodGFiSWQpIHsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwcmV2aW91c1RhYklkID0gdGhpcy5hY3RpdmVUYWJJZDsKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYklkKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLmF0dGFjaFRlcm1pbmFsVG9Db250YWluZXIodGFiMik7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zd2l0Y2hlZCIsIHsKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICAgIGRldGFpbDogeyB0YWJJZCwgcHJldmlvdXNUYWJJZCB9CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBkZXRhY2hBY3RpdmVUZXJtaW5hbCgpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhdHRhY2hUZXJtaW5hbFRvQ29udGFpbmVyKHRhYjIpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgIHRhYjIudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgIHRhYjIudGVybWluYWwuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlUmVzaXplKCkgewogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCk7CiAgICAgICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFByb2Nlc3MgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsIGNvbW1hbmQsIGFyZ3MgPSBbXSkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx4MUJbMzFtIik7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx1Mjc0QyBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlLlxyXG4iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlswbSIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJJbml0aWFsaXppbmcgZW52aXJvbm1lbnQuLi5cclxuIik7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnNwYXduKGNvbW1hbmQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBpbnB1dFdyaXRlciA9IHByb2Nlc3M0LmlucHV0LmdldFdyaXRlcigpOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLm9uRGF0YSgoZGF0YSkgPT4gewogICAgICAgICAgICAgIGlucHV0V3JpdGVyLndyaXRlKGRhdGEpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLnNldFRhYlByb2Nlc3ModGFiMi5pZCwgcHJvY2VzczQsIGlucHV0V3JpdGVyKTsKICAgICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgICAgcHJvY2VzczQuZXhpdC50aGVuKChleGl0Q29kZSkgPT4gewogICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvY2Vzc0V4aXQodGFiMi5pZCwgZXhpdENvZGUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx4MUJbMzFtIik7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoYFx1Mjc0QyBGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczogJHtlcnJvcn1ccgpgKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlswbSIpOwogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczoiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZVByb2Nlc3NFeGl0KHRhYklkLCBleGl0Q29kZSkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIubWFya1RhYkV4aXRlZCh0YWJJZCwgZXhpdENvZGUpOwogICAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBleGl0Q29kZSA9PT0gMCA/ICJcclxuXHgxQlszMm1bUHJvY2VzcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XVx4MUJbMG1cclxuIiA6IGBccgpceDFCWzMxbVtQcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtleGl0Q29kZX1dXHgxQlswbVxyCmA7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKG1lc3NhZ2UyKTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9jZXNzLWNvbXBsZXRlIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkLCBleGl0Q29kZSB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICBpZiAodGFiMi5jbG9zZWFibGUpIHsKICAgICAgICAgICAgdGhpcy5zaG93RXhpdGVkVGFiQWN0aW9uYmFyKHRhYklkLCB0YWIyLmxhYmVsLCBleGl0Q29kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNob3cgYWN0aW9uYmFyIG9mZmVyaW5nIHRvIGNsb3NlIGFuIGV4aXRlZCB0YWIKICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93RXhpdGVkVGFiQWN0aW9uYmFyKHRhYklkLCB0YWJMYWJlbCwgZXhpdENvZGUpIHsKICAgICAgICAgIGNvbnN0IGlzU3VjY2VzcyA9IGV4aXRDb2RlID09PSAwOwogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93QWN0aW9uYmFyKHsKICAgICAgICAgICAgbWVzc2FnZTogaXNTdWNjZXNzID8gYCIke3RhYkxhYmVsfSIgY29tcGxldGVkLiBDbG9zZSB0YWI/YCA6IGAiJHt0YWJMYWJlbH0iIGV4aXRlZCAoY29kZSAke2V4aXRDb2RlfSkuIENsb3NlIHRhYj9gLAogICAgICAgICAgICB0eXBlOiBpc1N1Y2Nlc3MgPyAiaW5mbyIgOiAid2FybmluZyIsCiAgICAgICAgICAgIGljb246IGlzU3VjY2VzcyA/ICJsdWNpZGU6Y2hlY2tDaXJjbGUiIDogImx1Y2lkZTphbGVydFRyaWFuZ2xlIiwKICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgIHsgaWQ6ICJjbG9zZSIsIGxhYmVsOiAiQ2xvc2UgVGFiIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgIHsgaWQ6ICJrZWVwIiwgbGFiZWw6ICJLZWVwIE9wZW4iIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgdGltZW91dDogeyBkdXJhdGlvbjogMWU0LCBkZWZhdWx0QWN0aW9uSWQ6ICJjbG9zZSIgfSwKICAgICAgICAgICAgZGlzbWlzc2libGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHJlc3VsdC5hY3Rpb25JZCA9PT0gImNsb3NlIikgewogICAgICAgICAgICB0aGlzLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBQdWJsaWMgQVBJID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGUgYSBuZXcgc2hlbGwgdGFiCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgY3JlYXRlU2hlbGxUYWIobGFiZWwpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKHsKICAgICAgICAgICAgdHlwZTogInNoZWxsIiwKICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IGBiYXNoICR7dGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCkgKyAxfWAsCiAgICAgICAgICAgIGNsb3NlYWJsZTogdGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCkgPiAwCiAgICAgICAgICAgIC8vIEZpcnN0IHRhYiBub3QgY2xvc2VhYmxlCiAgICAgICAgICB9LCB0aGlzLmlzQnJpZ2h0KTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYjIuaWQpOwogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IHRoaXMuc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsICJqc2giKTsKICAgICAgICAgIGlmICh0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSA9PT0gMSAmJiB0aGlzLnNldHVwQ29tbWFuZCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JQcm9tcHQodGFiMi50ZXJtaW5hbCwgIn4vIik7CiAgICAgICAgICAgIGlmICh0YWIyLmlucHV0V3JpdGVyKSB7CiAgICAgICAgICAgICAgdGFiMi5pbnB1dFdyaXRlci53cml0ZSh0aGlzLnNldHVwQ29tbWFuZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkOiB0YWIyLmlkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0YWIyLmlkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGUgYSB0ZXJtaW5hbCB0YWIgZm9yIHJ1bm5pbmcgYSBwcm9jZXNzCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgY3JlYXRlUHJvY2Vzc1RhYihvcHRpb25zKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmNyZWF0ZVRhYihvcHRpb25zLCB0aGlzLmlzQnJpZ2h0KTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICBpZiAob3B0aW9ucy5zd2l0Y2hUb1RhYiAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5zd2l0Y2hUb1RhYih0YWIyLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICBpZiAob3B0aW9ucy5jb21tYW5kKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsIG9wdGlvbnMuY29tbWFuZCwgb3B0aW9ucy5hcmdzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkOiB0YWIyLmlkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0YWIyLmlkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiCiAgICAgICAgICovCiAgICAgICAgZ2V0QWN0aXZlVGFiKCkgewogICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZVRhYklkKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIHJldHVybiB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRoaXMuYWN0aXZlVGFiSWQpIHx8IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhbGwgdGFicwogICAgICAgICAqLwogICAgICAgIGdldFRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU3dpdGNoIHRvIGEgc3BlY2lmaWMgdGFiIGJ5IElECiAgICAgICAgICovCiAgICAgICAgc2VsZWN0VGFiKHRhYklkKSB7CiAgICAgICAgICBpZiAoIXRoaXMudGFiTWFuYWdlci5oYXNUYWIodGFiSWQpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYklkKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDbG9zZSBhIHRhYiBieSBJRAogICAgICAgICAqLwogICAgICAgIGNsb3NlVGFiKHRhYklkKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIgfHwgIXRhYjIuY2xvc2VhYmxlKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAodGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbFRhYnMuZmluZEluZGV4KCh0OSkgPT4gdDkuaWQgPT09IHRhYklkKTsKICAgICAgICAgICAgY29uc3QgbmV4dFRhYiA9IGFsbFRhYnNbY3VycmVudEluZGV4ICsgMV0gfHwgYWxsVGFic1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgICAgICAgaWYgKG5leHRUYWIpIHsKICAgICAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKG5leHRUYWIuaWQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBudWxsOwogICAgICAgICAgICAgIHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2VkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBXcml0ZSBkYXRhIHRvIGEgdGFiJ3MgdGVybWluYWwKICAgICAgICAgKi8KICAgICAgICB3cml0ZVRvVGFiKHRhYklkLCBkYXRhKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoZGF0YSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2VuZCBpbnB1dCB0byBhIHRhYidzIHByb2Nlc3MgKGlmIGludGVyYWN0aXZlKQogICAgICAgICAqLwogICAgICAgIHNlbmRJbnB1dFRvVGFiKHRhYklkLCBkYXRhKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIgfHwgIXRhYjIuaW5wdXRXcml0ZXIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRhYjIuaW5wdXRXcml0ZXIud3JpdGUoZGF0YSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhbiBhY3Rpb25iYXIgbm90aWZpY2F0aW9uIGluIHRoZSB0ZXJtaW5hbCBwYW5lbCBjb250ZXh0LgogICAgICAgICAqIFVzZSB0aGlzIGZvciB0ZXJtaW5hbC1yZWxhdGVkIGRlY2lzaW9ucyAoZS5nLiwgcmV0cnkgZmFpbGVkIHByb2Nlc3MsIGtpbGwgcHJvY2VzcywgZXRjLikKICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93QWN0aW9uYmFyKG9wdGlvbnMpIHsKICAgICAgICAgIGlmICghdGhpcy50ZXJtaW5hbEFjdGlvbmJhcikgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsQWN0aW9uYmFyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLWFjdGlvbmJhciIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMudGVybWluYWxBY3Rpb25iYXI/LnNob3cob3B0aW9ucyk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gVXRpbGl0eSBNZXRob2RzID09PT09PT09PT0KICAgICAgICBhc3luYyB3YWl0Rm9yUHJvbXB0KHRlcm0sIHByb21wdCkgewogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgICBjb25zdCBjaGVja1Byb21wdCA9ICgpID0+IHsKICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IHRlcm0uYnVmZmVyLmFjdGl2ZTsKICAgICAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBsaW5lcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXMuZ2V0TGluZShpMTEpOwogICAgICAgICAgICAgICAgaWYgKGxpbmUgJiYgbGluZS50cmFuc2xhdGVUb1N0cmluZygpLmluY2x1ZGVzKHByb21wdCkpIHsKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUHJvbXB0LCAxMDApOwogICAgICAgICAgICB9OwogICAgICAgICAgICBjaGVja1Byb21wdCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHNldEVudmlyb25tZW50VmFyaWFibGVzKGVudkFyZykgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZXhlY3V0aW9uIGVudmlyb25tZW50IGF2YWlsYWJsZSIpOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGVudkZpbGUgPSAiIjsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBlbnZBcmcpIHsKICAgICAgICAgICAgZW52RmlsZSArPSBgZXhwb3J0ICR7a2V5Mn09IiR7ZW52QXJnW2tleTJdfSIKYDsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKCIvc291cmNlLmVudiIsIGVudkZpbGUpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgZXhlY3V0aW9uIGVudmlyb25tZW50LgogICAgICAgICAqLwogICAgICAgIGdldEV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIHRzX3dlYi9wbHVnaW5zLnRzCnZhciBwbHVnaW5zX2V4cG9ydHM1ID0ge307Cl9fZXhwb3J0KHBsdWdpbnNfZXhwb3J0czUsIHsKICBEZWVzRWxlbWVudDogKCkgPT4gRGVlc0VsZW1lbnQyLAogIGNzczogKCkgPT4gY3NzMiwKICBjc3NNYW5hZ2VyOiAoKSA9PiBjc3NNYW5hZ2VyMiwKICBjdXN0b21FbGVtZW50OiAoKSA9PiBjdXN0b21FbGVtZW50LAogIGRlZXNDYXRhbG9nOiAoKSA9PiBkaXN0X3RzX3dlYl9leHBvcnRzMiwKICBkZWVzRWxlbWVudDogKCkgPT4gZGlzdF90c19leHBvcnRzMjYsCiAgaHRtbDogKCkgPT4gaHRtbDcsCiAgcHJvcGVydHk6ICgpID0+IHByb3BlcnR5LAogIHN0YXRlOiAoKSA9PiBzdGF0ZSwKICB0eXBlZHJlcXVlc3Q6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE1Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9pbmRleC5qcwp2YXIgZGlzdF90c193ZWJfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0czIsIHsKICBDYW52YXNQb29sOiAoKSA9PiBDYW52YXNQb29sLAogIERlZXNBY3Rpb25iYXI6ICgpID0+IERlZXNBY3Rpb25iYXIsCiAgRGVlc0FwcHVpOiAoKSA9PiBEZWVzQXBwdWksCiAgRGVlc0FwcHVpQWN0aXZpdHlsb2c6ICgpID0+IERlZXNBcHB1aUFjdGl2aXR5bG9nLAogIERlZXNBcHB1aUJhcjogKCkgPT4gRGVlc0FwcHVpQmFyLAogIERlZXNBcHB1aUJvdHRvbWJhcjogKCkgPT4gRGVlc0FwcHVpQm90dG9tYmFyLAogIERlZXNBcHB1aU1haW5jb250ZW50OiAoKSA9PiBEZWVzQXBwdWlNYWluY29udGVudCwKICBEZWVzQXBwdWlNYWlubWVudTogKCkgPT4gRGVlc0FwcHVpTWFpbm1lbnUsCiAgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duOiAoKSA9PiBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24sCiAgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTogKCkgPT4gRGVlc0FwcHVpU2Vjb25kYXJ5bWVudSwKICBEZWVzQXBwdWlUYWJzOiAoKSA9PiBEZWVzQXBwdWlUYWJzLAogIERlZXNCYWRnZTogKCkgPT4gRGVlc0JhZGdlLAogIERlZXNCdXR0b246ICgpID0+IERlZXNCdXR0b24sCiAgRGVlc0J1dHRvbkV4aXQ6ICgpID0+IERlZXNCdXR0b25FeGl0LAogIERlZXNCdXR0b25Hcm91cDogKCkgPT4gRGVlc0J1dHRvbkdyb3VwLAogIERlZXNDaGFydEFyZWE6ICgpID0+IERlZXNDaGFydEFyZWEsCiAgRGVlc0NoYXJ0TG9nOiAoKSA9PiBEZWVzQ2hhcnRMb2csCiAgRGVlc0NoaXBzOiAoKSA9PiBEZWVzQ2hpcHMsCiAgRGVlc0NvbnRleHRtZW51OiAoKSA9PiBEZWVzQ29udGV4dG1lbnUsCiAgRGVlc0Rhc2hib2FyZGdyaWQ6ICgpID0+IERlZXNEYXNoYm9hcmRncmlkLAogIERlZXNEYXRhdmlld0NvZGVib3g6ICgpID0+IERlZXNEYXRhdmlld0NvZGVib3gsCiAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0OiAoKSA9PiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QsCiAgRGVlc0Zvcm06ICgpID0+IERlZXNGb3JtLAogIERlZXNGb3JtU3VibWl0OiAoKSA9PiBEZWVzRm9ybVN1Ym1pdCwKICBEZWVzRm9ybWF0dGluZ01lbnU6ICgpID0+IERlZXNGb3JtYXR0aW5nTWVudSwKICBEZWVzSGVhZGluZzogKCkgPT4gRGVlc0hlYWRpbmcsCiAgRGVlc0hpbnQ6ICgpID0+IERlZXNIaW50LAogIERlZXNJY29uOiAoKSA9PiBEZWVzSWNvbiwKICBEZWVzSW5wdXRCYXNlOiAoKSA9PiBEZWVzSW5wdXRCYXNlLAogIERlZXNJbnB1dENoZWNrYm94OiAoKSA9PiBEZWVzSW5wdXRDaGVja2JveCwKICBEZWVzSW5wdXRDb2RlOiAoKSA9PiBEZWVzSW5wdXRDb2RlLAogIERlZXNJbnB1dERhdGVwaWNrZXI6ICgpID0+IERlZXNJbnB1dERhdGVwaWNrZXIsCiAgRGVlc0lucHV0RHJvcGRvd246ICgpID0+IERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQ6ICgpID0+IERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbjogKCkgPT4gRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRMaXN0OiAoKSA9PiBEZWVzSW5wdXRMaXN0LAogIERlZXNJbnB1dE11bHRpdG9nZ2xlOiAoKSA9PiBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZTogKCkgPT4gRGVlc0lucHV0UGhvbmUsCiAgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmU6ICgpID0+IERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlLAogIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3I6ICgpID0+IERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IsCiAgRGVlc0lucHV0UmFkaW9ncm91cDogKCkgPT4gRGVlc0lucHV0UmFkaW9ncm91cCwKICBEZWVzSW5wdXRSaWNodGV4dDogKCkgPT4gRGVlc0lucHV0UmljaHRleHQsCiAgRGVlc0lucHV0VGFnczogKCkgPT4gRGVlc0lucHV0VGFncywKICBEZWVzSW5wdXRUZXh0OiAoKSA9PiBEZWVzSW5wdXRUZXh0LAogIERlZXNJbnB1dFRvZ2dsZTogKCkgPT4gRGVlc0lucHV0VG9nZ2xlLAogIERlZXNJbnB1dFR5cGVsaXN0OiAoKSA9PiBEZWVzSW5wdXRUeXBlbGlzdCwKICBEZWVzSW5wdXRXeXNpd3lnOiAoKSA9PiBEZWVzSW5wdXRXeXNpd3lnLAogIERlZXNMYWJlbDogKCkgPT4gRGVlc0xhYmVsLAogIERlZXNNb2JpbGVuYXZpZ2F0aW9uOiAoKSA9PiBEZWVzTW9iaWxlbmF2aWdhdGlvbiwKICBEZWVzTW9kYWw6ICgpID0+IERlZXNNb2RhbCwKICBEZWVzUGFnaW5hdGlvbjogKCkgPT4gRGVlc1BhZ2luYXRpb24sCiAgRGVlc1BhbmVsOiAoKSA9PiBEZWVzUGFuZWwsCiAgRGVlc1BkZjogKCkgPT4gRGVlc1BkZiwKICBEZWVzUGRmUHJldmlldzogKCkgPT4gRGVlc1BkZlByZXZpZXcsCiAgRGVlc1BkZlZpZXdlcjogKCkgPT4gRGVlc1BkZlZpZXdlciwKICBEZWVzUHJvZ3Jlc3NiYXI6ICgpID0+IERlZXNQcm9ncmVzc2JhciwKICBEZWVzU2VhcmNoYmFyOiAoKSA9PiBEZWVzU2VhcmNoYmFyLAogIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkOiAoKSA9PiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCwKICBEZWVzU2ltcGxlQXBwRGFzaDogKCkgPT4gRGVlc1NpbXBsZUFwcERhc2gsCiAgRGVlc1NpbXBsZUxvZ2luOiAoKSA9PiBEZWVzU2ltcGxlTG9naW4sCiAgRGVlc1NsYXNoTWVudTogKCkgPT4gRGVlc1NsYXNoTWVudSwKICBEZWVzU3BlZWNoYnViYmxlOiAoKSA9PiBEZWVzU3BlZWNoYnViYmxlLAogIERlZXNTcGlubmVyOiAoKSA9PiBEZWVzU3Bpbm5lciwKICBEZWVzU3RhdHNHcmlkOiAoKSA9PiBEZWVzU3RhdHNHcmlkLAogIERlZXNTdGVwcGVyOiAoKSA9PiBEZWVzU3RlcHBlciwKICBEZWVzVGFibGU6ICgpID0+IERlZXNUYWJsZSwKICBEZWVzVGhlbWU6ICgpID0+IERlZXNUaGVtZSwKICBEZWVzVG9hc3Q6ICgpID0+IERlZXNUb2FzdCwKICBEZWVzVXBkYXRlcjogKCkgPT4gRGVlc1VwZGF0ZXIsCiAgRGVlc1dpbmRvd0NvbnRyb2xzOiAoKSA9PiBEZWVzV2luZG93Q29udHJvbHMsCiAgRGVlc1dpbmRvd0xheWVyOiAoKSA9PiBEZWVzV2luZG93TGF5ZXIsCiAgRGVlc1dvcmtzcGFjZTogKCkgPT4gRGVlc1dvcmtzcGFjZSwKICBEZWVzV29ya3NwYWNlQm90dG9tYmFyOiAoKSA9PiBEZWVzV29ya3NwYWNlQm90dG9tYmFyLAogIERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yOiAoKSA9PiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciwKICBEZWVzV29ya3NwYWNlRmlsZXRyZWU6ICgpID0+IERlZXNXb3Jrc3BhY2VGaWxldHJlZSwKICBEZWVzV29ya3NwYWNlTWFya2Rvd246ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93biwKICBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQ6ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldCwKICBEZWVzV29ya3NwYWNlTW9uYWNvOiAoKSA9PiBEZWVzV29ya3NwYWNlTW9uYWNvLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogKCkgPT4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXc6ICgpID0+IERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcsCiAgRGVlc1d5c2l3eWdCbG9jazogKCkgPT4gRGVlc1d5c2l3eWdCbG9jaywKICBQUk9HUkFNTUlOR19MQU5HVUFHRVM6ICgpID0+IFBST0dSQU1NSU5HX0xBTkdVQUdFUywKICBQZGZNYW5hZ2VyOiAoKSA9PiBQZGZNYW5hZ2VyLAogIFBlcmZvcm1hbmNlTW9uaXRvcjogKCkgPT4gUGVyZm9ybWFuY2VNb25pdG9yLAogIFRlcm1pbmFsVGFiTWFuYWdlcjogKCkgPT4gVGVybWluYWxUYWJNYW5hZ2VyLAogIFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyOiAoKSA9PiBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciwKICBWaWV3UmVnaXN0cnk6ICgpID0+IFZpZXdSZWdpc3RyeSwKICBXZWJDb250YWluZXJFbnZpcm9ubWVudDogKCkgPT4gV2ViQ29udGFpbmVyRW52aXJvbm1lbnQsCiAgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9uczogKCkgPT4gV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucywKICBXeXNpd3lnQmxvY2tzOiAoKSA9PiBXeXNpd3lnQmxvY2tzLAogIFd5c2l3eWdDb252ZXJ0ZXJzOiAoKSA9PiBXeXNpd3lnQ29udmVydGVycywKICBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyOiAoKSA9PiBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyLAogIFd5c2l3eWdGb3JtYXR0aW5nOiAoKSA9PiBXeXNpd3lnRm9ybWF0dGluZywKICBXeXNpd3lnSGlzdG9yeTogKCkgPT4gV3lzaXd5Z0hpc3RvcnksCiAgV3lzaXd5Z0lucHV0SGFuZGxlcjogKCkgPT4gV3lzaXd5Z0lucHV0SGFuZGxlciwKICBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyOiAoKSA9PiBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyLAogIFd5c2l3eWdNb2RhbE1hbmFnZXI6ICgpID0+IFd5c2l3eWdNb2RhbE1hbmFnZXIsCiAgV3lzaXd5Z1NlbGVjdGlvbjogKCkgPT4gV3lzaXd5Z1NlbGVjdGlvbiwKICBXeXNpd3lnU2hvcnRjdXRzOiAoKSA9PiBXeXNpd3lnU2hvcnRjdXRzLAogIFpJbmRleFJlZ2lzdHJ5OiAoKSA9PiBaSW5kZXhSZWdpc3RyeSwKICBjb2xvcnM6ICgpID0+IGNvbG9yc19leHBvcnRzLAogIGNvbW1pdGluZm86ICgpID0+IGNvbW1pdGluZm8sCiAgY29tcG9uZW50WkluZGV4OiAoKSA9PiBjb21wb25lbnRaSW5kZXgsCiAgZGVib3VuY2U6ICgpID0+IGRlYm91bmNlMywKICBmb3JtYXRGaWxlU2l6ZTogKCkgPT4gZm9ybWF0RmlsZVNpemUsCiAgZ2V0WkluZGV4OiAoKSA9PiBnZXRaSW5kZXgsCiAgaWNvbnM6ICgpID0+IGljb25zNCwKICBpc0luVmlld3BvcnQ6ICgpID0+IGlzSW5WaWV3cG9ydCwKICByZWdpc3RlckFsbEJsb2NrSGFuZGxlcnM6ICgpID0+IHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycywKICB0aGVtZURlZmF1bHRTdHlsZXM6ICgpID0+IHRoZW1lRGVmYXVsdFN0eWxlcywKICB0aGVtZURlZmF1bHRzOiAoKSA9PiB0aGVtZURlZmF1bHRzLAogIHRocm90dGxlOiAoKSA9PiB0aHJvdHRsZTIsCiAgd3lzaXd5Z1N0eWxlczogKCkgPT4gd3lzaXd5Z1N0eWxlcywKICB6SW5kZXhMYXllcnM6ICgpID0+IHpJbmRleExheWVycywKICB6SW5kZXhSZWdpc3RyeTogKCkgPT4gekluZGV4UmVnaXN0cnkKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwemluZGV4LmpzCnZhciB6SW5kZXhMYXllcnMgPSB7CiAgLy8gQmFzZSBsYXllcjogUmVndWxhciBjb250ZW50CiAgYmFzZTogewogICAgY29udGVudDogImF1dG8iLAogICAgaW5wdXRFbGVtZW50czogMQogIH0sCiAgLy8gRml4ZWQgVUkgZWxlbWVudHMKICBmaXhlZDogewogICAgYXBwQmFyOiAxMCwKICAgIHNpZGVNZW51OiAxMCwKICAgIG1vYmlsZU5hdjogMjUwCiAgfSwKICAvLyBPdmVybGF5IGJhY2tkcm9wcyAoc2VtaS10cmFuc3BhcmVudCBiYWNrZ3JvdW5kcykKICBiYWNrZHJvcDogewogICAgZHJvcGRvd246IDE5OTksCiAgICAvLyBCZWxvdyBtb2RhbHMgYnV0IGFib3ZlIGZpeGVkIGVsZW1lbnRzCiAgICBtb2RhbDogMjk5OSwKICAgIC8vIEJlbG93IGRyb3Bkb3ducyBvbiBtb2RhbHMKICAgIGNvbnRleHRNZW51OiAzOTk5CiAgICAvLyBCZWxvdyBjcml0aWNhbCBvdmVybGF5cwogIH0sCiAgLy8gSW50ZXJhY3RpdmUgb3ZlcmxheXMKICBvdmVybGF5OiB7CiAgICBkcm9wZG93bjogMmUzLAogICAgLy8gRHJvcGRvd25zIGFuZCBzZWxlY3QgbWVudXMKICAgIG1vZGFsOiAzZTMsCiAgICAvLyBNb2RhbCBkaWFsb2dzCiAgICBjb250ZXh0TWVudTogNGUzLAogICAgLy8gQ29udGV4dCBtZW51cyBhbmQgdG9vbHRpcHMKICAgIHRvYXN0OiA1ZTMKICAgIC8vIFRvYXN0IG5vdGlmaWNhdGlvbnMgKGhpZ2hlc3QgcHJpb3JpdHkpCiAgfSwKICAvLyBTcGVjaWFsIGNhc2VzIGZvciBuZXN0ZWQgZWxlbWVudHMKICBtb2RhbERyb3Bkb3duOiAzNTAwLAogIC8vIERyb3Bkb3ducyBpbnNpZGUgbW9kYWxzCiAgd3lzaXd5Z01lbnVzOiA0NTAwCiAgLy8gRWRpdG9yIGZvcm1hdHRpbmcgbWVudXMKfTsKZnVuY3Rpb24gZ2V0WkluZGV4KGNhdGVnb3J5LCBzdWJjYXRlZ29yeSkgewogIGNvbnN0IGNhdGVnb3J5T2JqID0gekluZGV4TGF5ZXJzW2NhdGVnb3J5XTsKICBpZiAodHlwZW9mIGNhdGVnb3J5T2JqID09PSAib2JqZWN0IiAmJiBzdWJjYXRlZ29yeSkgewogICAgcmV0dXJuIGNhdGVnb3J5T2JqW3N1YmNhdGVnb3J5XSB8fCAiYXV0byI7CiAgfQogIHJldHVybiB0eXBlb2YgY2F0ZWdvcnlPYmogPT09ICJudW1iZXIiID8gY2F0ZWdvcnlPYmogOiAiYXV0byI7Cn0KdmFyIGNvbXBvbmVudFpJbmRleCA9IHsKICAiZGVlcy1tb2RhbCI6IHpJbmRleExheWVycy5vdmVybGF5Lm1vZGFsLAogICJkZWVzLXdpbmRvd2xheWVyIjogekluZGV4TGF5ZXJzLm92ZXJsYXkuZHJvcGRvd24sCiAgImRlZXMtY29udGV4dG1lbnUiOiB6SW5kZXhMYXllcnMub3ZlcmxheS5jb250ZXh0TWVudSwKICAiZGVlcy10b2FzdCI6IHpJbmRleExheWVycy5vdmVybGF5LnRvYXN0LAogICJkZWVzLWFwcHVpLW1haW5tZW51IjogekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhciwKICAiZGVlcy1tb2JpbGVuYXZpZ2F0aW9uIjogekluZGV4TGF5ZXJzLmZpeGVkLm1vYmlsZU5hdiwKICAiZGVlcy1zbGFzaC1tZW51IjogekluZGV4TGF5ZXJzLnd5c2l3eWdNZW51cywKICAiZGVlcy1mb3JtYXR0aW5nLW1lbnUiOiB6SW5kZXhMYXllcnMud3lzaXd5Z01lbnVzCn07CnZhciBaSW5kZXhSZWdpc3RyeSA9IGNsYXNzIF9aSW5kZXhSZWdpc3RyeSB7CiAgc3RhdGljIGluc3RhbmNlOwogIGFjdGl2ZUVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBlbGVtZW50WkluZGV4TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgY3VycmVudFpJbmRleCA9IDFlMzsKICAvLyBTdGFydGluZyB6LWluZGV4CiAgY29uc3RydWN0b3IoKSB7CiAgfQogIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgIGlmICghX1pJbmRleFJlZ2lzdHJ5Lmluc3RhbmNlKSB7CiAgICAgIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZSA9IG5ldyBfWkluZGV4UmVnaXN0cnkoKTsKICAgIH0KICAgIHJldHVybiBfWkluZGV4UmVnaXN0cnkuaW5zdGFuY2U7CiAgfQogIC8qKgogICAqIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgei1pbmRleAogICAqIEByZXR1cm5zIFRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICovCiAgZ2V0TmV4dFpJbmRleCgpIHsKICAgIHRoaXMuY3VycmVudFpJbmRleCArPSAxMDsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRaSW5kZXg7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgei1pbmRleCByZWdpc3RyeQogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudCB0byByZWdpc3RlcgogICAqIEBwYXJhbSB6SW5kZXggLSBUaGUgei1pbmRleCBhc3NpZ25lZCB0byB0aGlzIGVsZW1lbnQKICAgKi8KICByZWdpc3RlcihlbGVtZW50NCwgekluZGV4KSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmFkZChlbGVtZW50NCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuc2V0KGVsZW1lbnQ0LCB6SW5kZXgpOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGFuIGVsZW1lbnQgZnJvbSB0aGUgei1pbmRleCByZWdpc3RyeQogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudCB0byB1bnJlZ2lzdGVyCiAgICovCiAgdW5yZWdpc3RlcihlbGVtZW50NCkgewogICAgdGhpcy5hY3RpdmVFbGVtZW50cy5kZWxldGUoZWxlbWVudDQpOwogICAgdGhpcy5lbGVtZW50WkluZGV4TWFwLmRlbGV0ZShlbGVtZW50NCk7CiAgICBpZiAodGhpcy5hY3RpdmVFbGVtZW50cy5zaXplID09PSAwKSB7CiAgICAgIHRoaXMuY3VycmVudFpJbmRleCA9IDFlMzsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0IHRoZSB6LWluZGV4IGZvciBhIHNwZWNpZmljIGVsZW1lbnQKICAgKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBIVE1MIGVsZW1lbnQKICAgKiBAcmV0dXJucyBUaGUgei1pbmRleCBvciB1bmRlZmluZWQgaWYgbm90IHJlZ2lzdGVyZWQKICAgKi8KICBnZXRFbGVtZW50WkluZGV4KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChlbGVtZW50NCk7CiAgfQogIC8qKgogICAqIEdldCBjb3VudCBvZiBhY3RpdmUgZWxlbWVudHMKICAgKiBAcmV0dXJucyBOdW1iZXIgb2YgYWN0aXZlIGVsZW1lbnRzCiAgICovCiAgZ2V0QWN0aXZlQ291bnQoKSB7CiAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50cy5zaXplOwogIH0KICAvKioKICAgKiBHZXQgdGhlIGN1cnJlbnQgaGlnaGVzdCB6LWluZGV4CiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgei1pbmRleCB2YWx1ZQogICAqLwogIGdldEN1cnJlbnRaSW5kZXgoKSB7CiAgICByZXR1cm4gdGhpcy5jdXJyZW50WkluZGV4OwogIH0KICAvKioKICAgKiBDbGVhciBhbGwgcmVnaXN0cmF0aW9ucyAodXNlZnVsIGZvciB0ZXN0aW5nKQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5hY3RpdmVFbGVtZW50cy5jbGVhcigpOwogICAgdGhpcy5lbGVtZW50WkluZGV4TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB0aGlzLmN1cnJlbnRaSW5kZXggPSAxZTM7CiAgfQogIC8qKgogICAqIEdldCBhbGwgYWN0aXZlIGVsZW1lbnRzIGluIHotaW5kZXggb3JkZXIKICAgKiBAcmV0dXJucyBBcnJheSBvZiBlbGVtZW50cyBzb3J0ZWQgYnkgei1pbmRleAogICAqLwogIGdldEFjdGl2ZUVsZW1lbnRzSW5PcmRlcigpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuYWN0aXZlRWxlbWVudHMpLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICBjb25zdCBhWiA9IHRoaXMuZWxlbWVudFpJbmRleE1hcC5nZXQoYTUpIHx8IDA7CiAgICAgIGNvbnN0IGJaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChiNSkgfHwgMDsKICAgICAgcmV0dXJuIGFaIC0gYlo7CiAgICB9KTsKICB9Cn07CnZhciB6SW5kZXhSZWdpc3RyeSA9IFpJbmRleFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyNywgewogIGJ1c2luZXNzOiAoKSA9PiBidXNpbmVzc19leHBvcnRzMiwKICBjb2RlOiAoKSA9PiBjb2RlX2V4cG9ydHMyLAogIGNvbnRhaW5lcjogKCkgPT4gY29udGFpbmVyX2V4cG9ydHMyLAogIGNvbnRlbnQ6ICgpID0+IGNvbnRlbnRfZXhwb3J0czIsCiAgZGF0YWJhc2U6ICgpID0+IGRhdGFiYXNlX2V4cG9ydHMyLAogIGRlc2NyaXB0b3JzOiAoKSA9PiBkZXNjcmlwdG9yc19leHBvcnRzLAogIGZpbmFuY2U6ICgpID0+IGZpbmFuY2VfZXhwb3J0czIsCiAgZ2VuZXJhbDogKCkgPT4gZ2VuZXJhbF9leHBvcnRzMiwKICBuZXR3b3JrOiAoKSA9PiBuZXR3b3JrX2V4cG9ydHMyLAogIHNhYXM6ICgpID0+IHNhYXNfZXhwb3J0czIsCiAgc3RvcmFnZTogKCkgPT4gc3RvcmFnZV9leHBvcnRzMiwKICB3ZWJzaXRlOiAoKSA9PiB3ZWJzaXRlX2V4cG9ydHMyCn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcwp2YXIgYnVzaW5lc3NfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvaW5kZXguanMKdmFyIGRhdGFiYXNlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMKdmFyIGZpbmFuY2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9pbmRleC5qcwp2YXIgY29kZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMKdmFyIGNvbnRhaW5lcl9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kZXNjcmlwdG9ycy9pbmRleC5qcwp2YXIgZGVzY3JpcHRvcnNfZXhwb3J0cyA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzCnZhciBjb250ZW50X2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvaW5kZXguanMKdmFyIGdlbmVyYWxfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcwp2YXIgbmV0d29ya19leHBvcnRzMiA9IHt9OwpfX2V4cG9ydChuZXR3b3JrX2V4cG9ydHMyLCB7CiAgSUNuYW1lRGVzY3JpcHRvcjogKCkgPT4gSUNuYW1lRGVzY3JpcHRvcjIKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY25hbWUuanMKdmFyIElDbmFtZURlc2NyaXB0b3IyID0gY2xhc3Mgewp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzCnZhciBzYWFzX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMKdmFyIHN0b3JhZ2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9pbmRleC5qcwp2YXIgd2Vic2l0ZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMHBsdWdpbnMuanMKaW5pdF9kaXN0X3RzKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYyA9ICgpID0+IGIyYAo8c3R5bGU+CiAgLndpdGhNYXJnaW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDIwcHg7CiAgfQogIC5kZW1vLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMjBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICB9CiAgLmRlbW8tYXJlYSB7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgfQogIC5kZW1vLWFyZWE6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKICB9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJCYXNpYyBDb250ZXh0IE1lbnUgd2l0aCBOZXN0ZWQgU3VibWVudXMiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkZpbGUiLAogICAgICBpY29uTmFtZTogImZpbGVUZXh0IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJOZXciLCBpY29uTmFtZTogImZpbGVQbHVzIiwgc2hvcnRjdXQ6ICJDbWQrTiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuIiwgaWNvbk5hbWU6ICJmb2xkZXJPcGVuIiwgc2hvcnRjdXQ6ICJDbWQrTyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiU2F2ZSIsIGljb25OYW1lOiAic2F2ZSIsIHNob3J0Y3V0OiAiQ21kK1MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJFeHBvcnQgYXMgUERGIiwgaWNvbk5hbWU6ICJkb3dubG9hZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkV4cG9ydCBQREYiKSB9LAogICAgICAgIHsgbmFtZTogIkV4cG9ydCBhcyBIVE1MIiwgaWNvbk5hbWU6ICJjb2RlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhwb3J0IEhUTUwiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgaWNvbk5hbWU6ICJlZGl0MyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiQ3V0IiwgaWNvbk5hbWU6ICJzY2lzc29ycyIsIHNob3J0Y3V0OiAiQ21kK1giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgIHsgbmFtZTogIkNvcHkiLCBpY29uTmFtZTogImNvcHkiLCBzaG9ydGN1dDogIkNtZCtDIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29weSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBpY29uTmFtZTogImNsaXBib2FyZCIsIHNob3J0Y3V0OiAiQ21kK1YiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRmluZCIsIGljb25OYW1lOiAic2VhcmNoIiwgc2hvcnRjdXQ6ICJDbWQrRiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZpbmQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlcGxhY2UiLCBpY29uTmFtZTogInJlcGVhdCIsIHNob3J0Y3V0OiAiQ21kK0giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXBsYWNlIikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVmlldyIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJab29tIEluIiwgaWNvbk5hbWU6ICJ6b29tSW4iLCBzaG9ydGN1dDogIkNtZCsrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBpbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBPdXQiLCBpY29uTmFtZTogInpvb21PdXQiLCBzaG9ydGN1dDogIkNtZCstIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBvdXQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlc2V0IFpvb20iLCBpY29uTmFtZTogIm1heGltaXplMiIsIHNob3J0Y3V0OiAiQ21kKzAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXNldCB6b29tIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGdWxsIFNjcmVlbiIsIGljb25OYW1lOiAibWF4aW1pemUiLCBzaG9ydGN1dDogIkYxMSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZ1bGwgc2NyZWVuIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgIGljb25OYW1lOiAic2V0dGluZ3MiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpCiAgICB9LAogICAgewogICAgICBuYW1lOiAiSGVscCIsCiAgICAgIGljb25OYW1lOiAiaGVscENpcmNsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKSB9LAogICAgICAgIHsgbmFtZTogIktleWJvYXJkIFNob3J0Y3V0cyIsIGljb25OYW1lOiAia2V5Ym9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkFib3V0IiwgaWNvbk5hbWU6ICJpbmZvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWJvdXQiKSB9CiAgICAgIF0KICAgIH0KICBdKTsKfX0+CiAgICAgIDxoMz5SaWdodC1jbGljayBhbnl3aGVyZSBpbiB0aGlzIGFyZWE8L2gzPgogICAgICA8cD5BIGNvbnRleHQgbWVudSB3aXRoIG5lc3RlZCBzdWJtZW51cyB3aWxsIGFwcGVhcjwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJDb21wb25lbnQtU3BlY2lmaWMgQ29udGV4dCBNZW51Ij4KICAgIDxkZWVzLWJ1dHRvbiBzdHlsZT0ibWFyZ2luOiAyMHB4OyIgQGNvbnRleHRtZW51PSR7KGV2ZW50QXJnKSA9PiB7CiAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50QXJnLCBbCiAgICB7CiAgICAgIG5hbWU6ICJCdXR0b24gQWN0aW9ucyIsCiAgICAgIGljb25OYW1lOiAibW91c2VQb2ludGVyIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJDbGljayIsIGljb25OYW1lOiAibW91c2UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDbGljayBhY3Rpb24iKSB9LAogICAgICAgIHsgbmFtZTogIkRvdWJsZSBDbGljayIsIGljb25OYW1lOiAiemFwIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG91YmxlIGNsaWNrIikgfSwKICAgICAgICB7IG5hbWU6ICJMb25nIFByZXNzIiwgaWNvbk5hbWU6ICJjbG9jayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkxvbmcgcHJlc3MiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJCdXR0b24gU3RhdGUiLAogICAgICBpY29uTmFtZTogInRvZ2dsZUxlZnQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIkVuYWJsZSIsIGljb25OYW1lOiAiY2hlY2tDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFbmFibGUiKSB9LAogICAgICAgIHsgbmFtZTogIkRpc2FibGUiLCBpY29uTmFtZTogInhDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJEaXNhYmxlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaG93IiwgaWNvbk5hbWU6ICJleWUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG93IikgfSwKICAgICAgICB7IG5hbWU6ICJIaWRlIiwgaWNvbk5hbWU6ICJleWVPZmYiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIaWRlIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNhYmxlZCBBY3Rpb24iLAogICAgICBpY29uTmFtZTogImJhbiIsCiAgICAgIGRpc2FibGVkOiB0cnVlLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUaGlzIHNob3VsZCBub3QgcnVuIikKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJQcm9wZXJ0aWVzIiwKICAgICAgaWNvbk5hbWU6ICJzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkJ1dHRvbiBwcm9wZXJ0aWVzIikKICAgIH0KICBdKTsKfX0+UmlnaHQtY2xpY2sgb24gdGhpcyBidXR0b248L2RlZXMtYnV0dG9uPgogIDwvZGVlcy1wYW5lbD4KCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iQWR2YW5jZWQgQ29udGV4dCBNZW51IEV4YW1wbGUiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkZvcm1hdCIsCiAgICAgIGljb25OYW1lOiAidHlwZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiQm9sZCIsIGljb25OYW1lOiAiYm9sZCIsIHNob3J0Y3V0OiAiQ21kK0IiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJCb2xkIikgfSwKICAgICAgICB7IG5hbWU6ICJJdGFsaWMiLCBpY29uTmFtZTogIml0YWxpYyIsIHNob3J0Y3V0OiAiQ21kK0kiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJJdGFsaWMiKSB9LAogICAgICAgIHsgbmFtZTogIlVuZGVybGluZSIsIGljb25OYW1lOiAidW5kZXJsaW5lIiwgc2hvcnRjdXQ6ICJDbWQrVSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVuZGVybGluZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRm9udCBTaXplIiwgaWNvbk5hbWU6ICJ0eXBlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRm9udCBzaXplIG1lbnUiKSB9LAogICAgICAgIHsgbmFtZTogIkZvbnQgQ29sb3IiLCBpY29uTmFtZTogInBhbGV0dGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGb250IGNvbG9yIG1lbnUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJUcmFuc2Zvcm0iLAogICAgICBpY29uTmFtZTogInNodWZmbGUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlRvIFVwcGVyY2FzZSIsIGljb25OYW1lOiAiYXJyb3dVcCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVwcGVyY2FzZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiVG8gTG93ZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd0Rvd24iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJMb3dlcmNhc2UiKSB9LAogICAgICAgIHsgbmFtZTogIkNhcGl0YWxpemUiLCBpY29uTmFtZTogInR5cGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDYXBpdGFsaXplIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRlbGV0ZSIpCiAgICB9CiAgXSk7Cn19PgogICAgICA8aDM+QWR2YW5jZWQgTmVzdGVkIE1lbnUgRXhhbXBsZTwvaDM+CiAgICAgIDxwPlRoaXMgc2hvd3MgZGVlcGx5IG5lc3RlZCBzdWJtZW51cyBhbmQgdmFyaW91cyBmb3JtYXR0aW5nIG9wdGlvbnM8L3A+CiAgICA8L2Rpdj4KICA8L2RlZXMtcGFuZWw+CiAgCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iU3RhdGljIENvbnRleHQgTWVudSAoQWx3YXlzIFZpc2libGUpIj4KICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgIGNsYXNzPSJ3aXRoTWFyZ2luIgogICAgICAubWVudUl0ZW1zPSR7WwogIHsKICAgIG5hbWU6ICJQcm9qZWN0IiwKICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgfSwKICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICBzdWJtZW51OiBbCiAgICAgIHsgbmFtZTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrTiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBwcm9qZWN0IikgfSwKICAgICAgeyBuYW1lOiAiT3BlbiBQcm9qZWN0IiwgaWNvbk5hbWU6ICJmb2xkZXJPcGVuIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrTyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcHJvamVjdCIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJSZWNlbnQgUHJvamVjdHMiLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEFscGhhIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBBbHBoYSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUHJvamVjdCBCZXRhIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBCZXRhIikgfSwKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEdhbW1hIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBHYW1tYSIpIH0KICAgICAgXSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiVG9vbHMiLAogICAgaWNvbk5hbWU6ICJ0b29sIiwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgfSwKICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICBzdWJtZW51OiBbCiAgICAgIHsgbmFtZTogIlRlcm1pbmFsIiwgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsIHNob3J0Y3V0OiAiQ21kK1QiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUZXJtaW5hbCIpIH0sCiAgICAgIHsgbmFtZTogIkNvbnNvbGUiLCBpY29uTmFtZTogIm1vbml0b3IiLCBzaG9ydGN1dDogIkNtZCtLIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29uc29sZSIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJFeHRlbnNpb25zIiwgaWNvbk5hbWU6ICJwYWNrYWdlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXh0ZW5zaW9ucyIpIH0KICAgIF0KICB9LAogIHsgZGl2aWRlcjogdHJ1ZSB9LAogIHsKICAgIG5hbWU6ICJQcmVmZXJlbmNlcyIsCiAgICBpY29uTmFtZTogInNsaWRlcnMiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJlZmVyZW5jZXMiKQogIH0KXX0KICAgID48L2RlZXMtY29udGV4dG1lbnU+CiAgPC9kZWVzLXBhbmVsPgo8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy13aW5kb3dsYXllci9kZWVzLXdpbmRvd2xheWVyLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBfX2VzRGVjb3JhdGUzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV2luZG93TGF5ZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdpbmRvd2xheWVyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3B0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfb3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9iYWNrZHJvcFpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfdmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dpbmRvd0xheWVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jb250ZW50WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9iYWNrZHJvcFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJiYWNrZHJvcFpJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYmFja2Ryb3BaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYmFja2Ryb3BaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJhY2tkcm9wWkluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycywgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfY29udGVudFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMsIF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXaW5kb3dMYXllcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdpbmRvd2xheWVyPjwvZGVlcy13aW5kb3dsYXllcj5gOwogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9uc0FyZykgewogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gZGlzdF90c19leHBvcnRzMjUuRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCk7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gbmV3IERlZXNXaW5kb3dMYXllcjIoKTsKICAgICAgd2luZG93TGF5ZXIub3B0aW9ucyA9IHsKICAgICAgICAuLi53aW5kb3dMYXllci5vcHRpb25zLAogICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgfTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQod2luZG93TGF5ZXIpOwogICAgICBhd2FpdCBkb210b29sc0luc3RhbmNlLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHdpbmRvd0xheWVyLnNob3coKTsKICAgICAgcmV0dXJuIHdpbmRvd0xheWVyOwogICAgfQogICAgI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIHsKICAgICAgYmx1cjogZmFsc2UKICAgIH0pOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JhY2tkcm9wWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9iYWNrZHJvcFpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IGJhY2tkcm9wWkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBiYWNrZHJvcFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9iYWNrZHJvcFpJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMsIDEwMDEpKTsKICAgIGdldCBjb250ZW50WkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRaSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmlzaWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZGlzdF90c19leHBvcnRzMjUuZWxlbWVudEJhc2ljLnNldHVwKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHtkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc3R5bGVzfQogICAgICA8c3R5bGU+CiAgICAgICAgLndpbmRvd092ZXJsYXkgewogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wKTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYnJpZ2h0bmVzcygxKSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMHB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5iYWNrZHJvcFpJbmRleH07CiAgICAgICAgfQogICAgICAgIC5zbG90Q29udGVudCB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5jb250ZW50WkluZGV4fTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2xvdENvbnRlbnQgPiAqIHsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudmlzaWJsZSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJyaWdodG5lc3MoMC45KSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMnB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLmRpc3BhdGNoQ2xpY2tlZH0gY2xhc3M9IndpbmRvd092ZXJsYXkgJHt0aGlzLnZpc2libGUgPyAidmlzaWJsZSIgOiBudWxsfSI+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90Q29udGVudCI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgIH0sIDEwMCk7CiAgICB9CiAgICBkaXNwYXRjaENsaWNrZWQoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiKSk7CiAgICB9CiAgICB0b2dnbGVWaXNpYmlsaXR5KCkgewogICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlOwogICAgfQogICAgZ2V0Q29udGVudFpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuY29udGVudFpJbmRleDsKICAgIH0KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIHRoaXMuYmFja2Ryb3BaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuY29udGVudFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgekluZGV4UmVnaXN0cnkucmVnaXN0ZXIodGhpcywgdGhpcy5iYWNrZHJvcFpJbmRleCk7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IHRoaXMuaGlkZSgpOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwMCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXaW5kb3dMYXllcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWNvbnRleHRtZW51L2RlZXMtY29udGV4dG1lbnUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NvbnRleHRtZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1jb250ZXh0bWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX21lbnVJdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNDb250ZXh0bWVudTcgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9tZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU1KHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ29udGV4dG1lbnU3ID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM7CiAgICAvLyBTVEFUSUMKICAgIC8vIFRoaXMgd2lsbCBzdG9yZSBhbGwgdGhlIGFjY3VtdWxhdGVkIG1lbnUgaXRlbXMKICAgIHN0YXRpYyBjb250ZXh0TWVudURlYWN0aXZhdGVkID0gZmFsc2U7CiAgICBzdGF0aWMgYWNjdW11bGF0ZWRNZW51SXRlbXMgPSBbXTsKICAgIC8vIEFkZCBhIGdsb2JhbCBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudQogICAgc3RhdGljIGluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpIHsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCAoZXZlbnQpID0+IHsKICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcyA9IFtdOwogICAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50NCBvZiBwYXRoMikgewogICAgICAgICAgaWYgKGVsZW1lbnQ0LmdldENvbnRleHRNZW51SXRlbXMpIHsKICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBlbGVtZW50NC5nZXRDb250ZXh0TWVudUl0ZW1zKCk7CiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKERlZXNDb250ZXh0bWVudTcuYWNjdW11bGF0ZWRNZW51SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5wdXNoKC4uLml0ZW1zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBEZWVzQ29udGV4dG1lbnU3Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zKTsKICAgICAgfSk7CiAgICB9CiAgICAvLyBhbGxvd3Mgb3BlbmluZyBvZiBhIGNvbnRleHRtZW51IHdpdGggb3B0aW9ucwogICAgc3RhdGljIGFzeW5jIG9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50QXJnLCBtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVEZWFjdGl2YXRlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgY29udGV4dE1lbnUgPSBuZXcgRGVlc0NvbnRleHRtZW51NygpOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyh6SW5kZXhMYXllcnMub3ZlcmxheS5jb250ZXh0TWVudSk7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnRyYW5zZm9ybSA9ICJzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KSI7CiAgICAgIGNvbnRleHRNZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtc0FyZzsKICAgICAgY29udGV4dE1lbnUud2luZG93TGF5ZXIgPSBhd2FpdCBEZWVzV2luZG93TGF5ZXIuY3JlYXRlQW5kU2hvdygpOwogICAgICBjb250ZXh0TWVudS53aW5kb3dMYXllci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jIChldmVudCkgPT4gewogICAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwogICAgICAgIGNvbnN0IGlzQ29udGV4dE1lbnUgPSBjbGlja2VkRWxlbWVudC5jbG9zZXN0KCJkZWVzLWNvbnRleHRtZW51Iik7CiAgICAgICAgaWYgKCFpc0NvbnRleHRNZW51KSB7CiAgICAgICAgICBhd2FpdCBjb250ZXh0TWVudS5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGV4dE1lbnUpOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29uc3QgcmVjdCA9IGNvbnRleHRNZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgIGxldCB0b3AgPSBldmVudEFyZy5jbGllbnRZOwogICAgICBsZXQgbGVmdCA9IGV2ZW50QXJnLmNsaWVudFg7CiAgICAgIGlmIChsZWZ0ICsgcmVjdC53aWR0aCA+IHdpbmRvd1dpZHRoKSB7CiAgICAgICAgbGVmdCA9IHdpbmRvd1dpZHRoIC0gcmVjdC53aWR0aCAtIDEwOwogICAgICB9CiAgICAgIGlmICh0b3AgKyByZWN0LmhlaWdodCA+IHdpbmRvd0hlaWdodCkgewogICAgICAgIHRvcCA9IHdpbmRvd0hlaWdodCAtIHJlY3QuaGVpZ2h0IC0gMTA7CiAgICAgIH0KICAgICAgaWYgKGxlZnQgPCAxMCkKICAgICAgICBsZWZ0ID0gMTA7CiAgICAgIGlmICh0b3AgPCAxMCkKICAgICAgICB0b3AgPSAxMDsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudG9wID0gYCR7dG9wfXB4YDsKICAgICAgY29udGV4dE1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAidG9wIGxlZnQiOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29udGV4dE1lbnUuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDEpIHRyYW5zbGF0ZVkoMCkiOwogICAgfQogICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB3aW5kb3dMYXllciA9IF9fcnVuSW5pdGlhbGl6ZXJzNih0aGlzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN1Ym1lbnUgPSBudWxsOwogICAgc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgcGFyZW50TWVudSA9IG51bGw7CiAgICBpc0Rlc3Ryb3lpbmcgPSBmYWxzZTsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLnRhYkluZGV4ID0gMDsKICAgIH0KICAgIC8qKgogICAgICogU1RBVElDIFNUWUxFUwogICAgICovCiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjY2NjIil9OwogICAgICB9CgogICAgICAubWVudWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWVudWl0ZW0uaGFzLXN1Ym1lbnU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAn4oC6JzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAubWVudWl0ZW06YWN0aXZlOm5vdCguaGFzLXN1Ym1lbnUpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWVudWl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudWl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudWl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtLXNob3J0Y3V0IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKG1lbnVJdGVtQXJnKSA9PiB7CiAgICAgICAgaWYgKCJkaXZpZGVyIiBpbiBtZW51SXRlbUFyZyAmJiBtZW51SXRlbUFyZy5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICBjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtQXJnOwogICAgICAgIGNvbnN0IGhhc1N1Ym1lbnUgPSBtZW51SXRlbS5zdWJtZW51ICYmIG1lbnVJdGVtLnN1Ym1lbnUubGVuZ3RoID4gMDsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9Im1lbnVpdGVtICR7bWVudUl0ZW0uZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzU3VibWVudSA/ICJoYXMtc3VibWVudSIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0keygpID0+ICFtZW51SXRlbS5kaXNhYmxlZCAmJiAhaGFzU3VibWVudSAmJiB0aGlzLmhhbmRsZUNsaWNrKG1lbnVJdGVtKX0KICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGFuZGxlTWVudUl0ZW1Ib3ZlcihtZW51SXRlbSwgaGFzU3VibWVudSl9CiAgICAgICAgICAgICAgQG1vdXNlbGVhdmU9JHsoKSA9PiB0aGlzLmhhbmRsZU1lbnVJdGVtTGVhdmUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7bWVudUl0ZW0uaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7bWVudUl0ZW0uaWNvbk5hbWV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPiR7bWVudUl0ZW0ubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgJHttZW51SXRlbS5zaG9ydGN1dCAmJiAhaGFzU3VibWVudSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXNob3J0Y3V0Ij4ke21lbnVJdGVtLnNob3J0Y3V0fTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDsKICAgICAgfSl9CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5sZW5ndGggPT09IDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVudWl0ZW0iIEBjbGljaz0keygpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmNvbnRleHRNZW51RGVhY3RpdmF0ZWQgPSB0cnVlOwogICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICB9fT4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSJsdWNpZGU6eCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPkFsbG93IG5hdGl2ZSBjb250ZXh0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmZvY3VzKCk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5ZG93bik7CiAgICB9CiAgICBoYW5kbGVLZXlkb3duID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbTpub3QoLmRpc2FibGVkKSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gbWVudUl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5tYXRjaGVzKCI6aG92ZXIiKSk7CiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxIDwgbWVudUl0ZW1zLmxlbmd0aCA/IGN1cnJlbnRJbmRleCArIDEgOiAwOwogICAgICAgICAgbWVudUl0ZW1zW25leHRJbmRleF0uZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IHByZXZJbmRleCA9IGN1cnJlbnRJbmRleCAtIDEgPj0gMCA/IGN1cnJlbnRJbmRleCAtIDEgOiBtZW51SXRlbXMubGVuZ3RoIC0gMTsKICAgICAgICAgIG1lbnVJdGVtc1twcmV2SW5kZXhdLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgICAgICAgIG1lbnVJdGVtc1tjdXJyZW50SW5kZXhdLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH07CiAgICBhc3luYyBoYW5kbGVDbGljayhtZW51SXRlbSkgewogICAgICBtZW51SXRlbS5hY3Rpb24oKTsKICAgICAgYXdhaXQgdGhpcy5kZXN0cm95QWxsKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KSB7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHsKICAgICAgICBhd2FpdCB0aGlzLmhpZGVTdWJtZW51KCk7CiAgICAgIH0KICAgICAgaWYgKGhhc1N1Ym1lbnUgJiYgbWVudUl0ZW0uc3VibWVudSkgewogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuc2hvd1N1Ym1lbnUobWVudUl0ZW0pOwogICAgICAgIH0sIDIwMCk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZU1lbnVJdGVtTGVhdmUoKSB7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICB9CiAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdWJtZW51ICYmICF0aGlzLnN1Ym1lbnUubWF0Y2hlcygiOmhvdmVyIikpIHsKICAgICAgICAgIHRoaXMuaGlkZVN1Ym1lbnUoKTsKICAgICAgICB9CiAgICAgIH0sIDMwMCk7CiAgICB9CiAgICBhc3luYyBzaG93U3VibWVudShtZW51SXRlbSkgewogICAgICBpZiAoIW1lbnVJdGVtLnN1Ym1lbnUgfHwgbWVudUl0ZW0uc3VibWVudS5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW0iKSk7CiAgICAgIGNvbnN0IG1lbnVJdGVtRWxlbWVudCA9IG1lbnVJdGVtcy5maW5kKChlbCkgPT4gZWwucXVlcnlTZWxlY3RvcigiLm1lbnVpdGVtLXRleHQiKT8udGV4dENvbnRlbnQgPT09IG1lbnVJdGVtLm5hbWUpOwogICAgICBpZiAoIW1lbnVJdGVtRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuc3VibWVudSA9IG5ldyBEZWVzQ29udGV4dG1lbnU3KCk7CiAgICAgIHRoaXMuc3VibWVudS5tZW51SXRlbXMgPSBtZW51SXRlbS5zdWJtZW51OwogICAgICB0aGlzLnN1Ym1lbnUucGFyZW50TWVudSA9IHRoaXM7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS56SW5kZXggPSBTdHJpbmcocGFyc2VJbnQodGhpcy5zdHlsZS56SW5kZXgpICsgMSk7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5zdWJtZW51KTsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IGl0ZW1SZWN0ID0gbWVudUl0ZW1FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtZW51UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHN1Ym1lbnVSZWN0ID0gdGhpcy5zdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICBsZXQgbGVmdCA9IG1lbnVSZWN0LnJpZ2h0IC0gNDsKICAgICAgbGV0IHRvcCA9IGl0ZW1SZWN0LnRvcDsKICAgICAgaWYgKGxlZnQgKyBzdWJtZW51UmVjdC53aWR0aCA+IHdpbmRvd1dpZHRoIC0gMTApIHsKICAgICAgICBsZWZ0ID0gbWVudVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoICsgNDsKICAgICAgfQogICAgICBpZiAodG9wICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTApIHsKICAgICAgICB0b3AgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzdWJtZW51UmVjdC5oZWlnaHQgLSAxMDsKICAgICAgfQogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudG9wID0gYCR7dG9wfXB4YDsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDEpIjsKICAgICAgdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KTsKICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc3VibWVudS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgIHRoaXMuaGFuZGxlTWVudUl0ZW1MZWF2ZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGhpZGVTdWJtZW51KCkgewogICAgICBpZiAoIXRoaXMuc3VibWVudSkKICAgICAgICByZXR1cm47CiAgICAgIGF3YWl0IHRoaXMuc3VibWVudS5kZXN0cm95KCk7CiAgICAgIHRoaXMuc3VibWVudSA9IG51bGw7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICBpZiAodGhpcy5pc0Rlc3Ryb3lpbmcpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0Rlc3Ryb3lpbmcgPSB0cnVlOwogICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KTsKICAgICAgICB0aGlzLnN1Ym1lbnVUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5zdWJtZW51KSB7CiAgICAgICAgYXdhaXQgdGhpcy5zdWJtZW51LmRlc3Ryb3koKTsKICAgICAgICB0aGlzLnN1Ym1lbnUgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLndpbmRvd0xheWVyICYmICF0aGlzLnBhcmVudE1lbnUpIHsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB0aGlzLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTAwKTsKICAgICAgaWYgKHRoaXMucGFyZW50RWxlbWVudCkgewogICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBEZXN0cm95cyB0aGlzIG1lbnUgYW5kIGFsbCBwYXJlbnQgbWVudXMgaW4gdGhlIGNoYWluCiAgICAgKi8KICAgIGFzeW5jIGRlc3Ryb3lBbGwoKSB7CiAgICAgIGxldCByb290TWVudSA9IHRoaXM7CiAgICAgIHdoaWxlIChyb290TWVudS5wYXJlbnRNZW51KSB7CiAgICAgICAgcm9vdE1lbnUgPSByb290TWVudS5wYXJlbnRNZW51OwogICAgICB9CiAgICAgIGF3YWl0IHJvb3RNZW51LmRlc3Ryb3koKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0NvbnRleHRtZW51NyA9IF9jbGFzc1RoaXM7Cn0pKCk7CkRlZXNDb250ZXh0bWVudS5pbml0aWFsaXplR2xvYmFsTGlzdGVuZXIoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLXdjY3Rvb2xzQDMuNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLXdjY3Rvb2xzL2Rpc3RfdHNfZGVtb3Rvb2xzL2RlbW90b29scy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlNiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RlbW9XcmFwcGVyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1kZW1vd3JhcHBlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEZW1vV3JhcHBlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTYodGhpcywgbnVsbCwgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ1bkFmdGVyUmVuZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydW5BZnRlclJlbmRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ydW5BZnRlclJlbmRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnVuQWZ0ZXJSZW5kZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RlbW9XcmFwcGVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHJ1bkFmdGVyUmVuZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydW5BZnRlclJlbmRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDUwKSk7CiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBpbiBydW5BZnRlclJlbmRlcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3KHRoaXMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNEZW1vV3JhcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzMgPSAoKSA9PiB7CiAgY29uc3QgYWN0aXZpdHlMb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIik7CiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBhY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgeyB0eXBlOiAibG9naW4iLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAibG9nZ2VkIGluIGZyb20gQ2hyb21lIG9uIG1hY09TIiB9LAogICAgICB7IHR5cGU6ICJjcmVhdGUiLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAnY3JlYXRlZCBhIG5ldyBwcm9qZWN0ICJGcm9udGVuZCBBcHAiJyB9LAogICAgICB7IHR5cGU6ICJ1cGRhdGUiLCB1c2VyOiAiSmFuZSBTbWl0aCIsIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIiB9LAogICAgICB7IHR5cGU6ICJ2aWV3IiwgdXNlcjogIkpvaG4gRG9lIiwgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIiB9LAogICAgICB7IHR5cGU6ICJkZWxldGUiLCB1c2VyOiAiQWRtaW4iLCBtZXNzYWdlOiAicmVtb3ZlZCBkZXByZWNhdGVkIGVuZHBvaW50IiB9LAogICAgICB7IHR5cGU6ICJjdXN0b20iLCB1c2VyOiAiU3lzdGVtIiwgbWVzc2FnZTogInNjaGVkdWxlZCBiYWNrdXAgY29tcGxldGVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiIH0sCiAgICAgIHsgdHlwZTogImxvZ291dCIsIHVzZXI6ICJBbGljZSBCcm93biIsIG1lc3NhZ2U6ICJsb2dnZWQgb3V0IiB9LAogICAgICB7IHR5cGU6ICJjcmVhdGUiLCB1c2VyOiAiSmFuZSBTbWl0aCIsIG1lc3NhZ2U6ICJjcmVhdGVkIGludm9pY2UgIzEyMzQiIH0KICAgIF0pOwogICAgYWN0aXZpdHlMb2cuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJBY3Rpdml0eSBsb2cgdXBkYXRlZDoiLCBlbnRyaWVzLmxlbmd0aCwgImVudHJpZXMiKTsKICAgIH0pOwogIH0sIDEwMCk7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMDkwOTBiIil9OwogICAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICAke2FjdGl2aXR5TG9nfQogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQXBwdWlBY3Rpdml0eWxvZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9lbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9lbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoUXVlcnlfZGVjb3JhdG9yczsKICBsZXQgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2RlY29yYXRvcnM7CiAgbGV0IF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUFjdGl2aXR5bG9nMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudHJpZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9maWx0ZXJDcml0ZXJpYV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9lbnRyaWVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVudHJpZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVudHJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50cmllcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZW50cmllcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbnRyaWVzX2luaXRpYWxpemVycywgX2VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNyh0aGlzLCBudWxsLCBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyQ3JpdGVyaWEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbHRlckNyaXRlcmlhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlckNyaXRlcmlhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJDcml0ZXJpYSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMsIF9maWx0ZXJDcml0ZXJpYV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlBY3Rpdml0eWxvZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQXBwIFVJIjsKICAgICNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2VudHJpZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgZW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWFyY2hRdWVyeSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoUXVlcnkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyQ3JpdGVyaWFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4KHRoaXMsIF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMsIHt9KSk7CiAgICBnZXQgZmlsdGVyQ3JpdGVyaWEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlckNyaXRlcmlhKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gUnhKUyBTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzCiAgICBlbnRyaWVzJCA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpKTsKICAgIC8vIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGFsaWduZWQgd2l0aCBzZWNvbmRhcnkgbWVudSAqLwogICAgICAgIC0tYWN0aXZpdHlsb2ctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM1MjUyNTIiLCAiI2EzYTNhMyIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctYm9yZGVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1hY2NlbnQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzg3MTZjIiwgIiNiNWE5OWEiKX07CgogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyIHdpdGggc3RyZWFtaW5nIGluZGljYXRvciAqLwogICAgICAudG9wYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgLmhlYWRpbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLmxpdmUtaW5kaWNhdG9yIC5kb3QgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyMmM1NWUiLCAiIzIyYzU1ZSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBwdWxzZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwdWxzZSB7CiAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjU7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgfQogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBjb250YWluZXIgKi8KICAgICAgLmFjdGl2aXR5Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0OHB4OwogICAgICAgIGJvdHRvbTogNDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzMzMzMzMyIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ0IiwgIiMzMzMzMzMiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2EzYTNhMyIsICIjNTI1MjUyIil9OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCAxNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC8qIERhdGUgc2VwYXJhdG9yIC0gd2FybSB0YXVwZSBzdHlsaW5nICovCiAgICAgIC5kYXRlLXNlcGFyYXRvciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxMnB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctYWNjZW50KTsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgZW50cnkgLSBtb2Rlcm4gc3RhY2tlZCBsYXlvdXQgKi8KICAgICAgLmFjdGl2aXR5ZW50cnkgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBtYXJnaW46IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuYWN0aXZpdHllbnRyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctaG92ZXIpOwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ2luIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNCwgMTk3LCA5NCwgMC4wOCkiLCAicmdiYSgzNCwgMTk3LCA5NCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTZhMzRhIiwgIiM0YWRlODAiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ291dCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMDgpIiwgInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi52aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDgpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzYwYTVmYSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNjgsIDg1LCAyNDcsIDAuMDgpIiwgInJnYmEoMTY4LCA4NSwgMjQ3LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5MzMzZWEiLCAiI2MwODRmYyIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24udXBkYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTEsIDE0NiwgNjAsIDAuMDgpIiwgInJnYmEoMjUxLCAxNDYsIDYwLCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlYTU4MGMiLCAiI2ZiOTIzYyIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4wOCkiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmN1c3RvbSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTAwLCAxMTYsIDEzOSwgMC4wOCkiLCAicmdiYSgxMDAsIDExNiwgMTM5LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM0NzU1NjkiLCAiIzk0YTNiOCIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdXNlciB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1zZXBhcmF0b3IgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICB9CgogICAgICAudGltZXN0YW1wIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktbWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAvKiBTZWFyY2ggYm94IC0gcmVmaW5lZCBzdHlsaW5nICovCiAgICAgIC5zZWFyY2hib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dCB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMykiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4IDAgMzRweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlcjpoYXMoaW5wdXQ6Zm9jdXMpIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vIFJFTkRFUgogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcygpOwogICAgICBjb25zdCBncm91cGVkRW50cmllcyA9IHRoaXMuZ3JvdXBFbnRyaWVzQnlEYXRlKGZpbHRlcmVkRW50cmllcyk7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHtkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zdHlsZXN9CiAgICAgIDxzdHlsZT48L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+QWN0aXZpdHkgTG9nPC9kaXY+CiAgICAgICAgICAke2ZpbHRlcmVkRW50cmllcy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0ibGl2ZS1pbmRpY2F0b3IiPjxzcGFuIGNsYXNzPSJkb3QiPjwvc3Bhbj5MaXZlPC9kaXY+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Q29udGFpbmVyIj4KICAgICAgICAgICR7ZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBhY3Rpdml0eSBlbnRyaWVzPC9kaXY+YCA6IGdyb3VwZWRFbnRyaWVzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLXNlcGFyYXRvciI+JHtncm91cC5sYWJlbH08L2Rpdj4KICAgICAgICAgICAgICAgICAgJHtncm91cC5lbnRyaWVzLm1hcCgoZW50cnkpID0+IHRoaXMucmVuZGVyQWN0aXZpdHlFbnRyeShlbnRyeSkpfQogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0ic2VhcmNoLWljb24iIC5pY29uPSR7Imx1Y2lkZTpzZWFyY2gifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIGFjdGl2aXRpZXMsIHVzZXJzLi4uIgogICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuc2VhcmNoUXVlcnl9CiAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVTZWFyY2hJbnB1dH0KICAgICAgICAgICAgLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJBY3Rpdml0eUVudHJ5KGVudHJ5KSB7CiAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUodGltZXN0YW1wMik7CiAgICAgIGNvbnN0IGljb25OYW1lID0gZW50cnkuaWNvbk5hbWUgfHwgdGhpcy5nZXRJY29uRm9yVHlwZShlbnRyeS50eXBlKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImFjdGl2aXR5ZW50cnkiCiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIGVudHJ5KX0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWljb24gJHtlbnRyeS50eXBlfSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7aWNvbk5hbWV9PjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktaGVhZGVyIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LXVzZXIiPiR7ZW50cnkudXNlcn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1zZXBhcmF0b3IiPsK3PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZXN0YW1wIj4ke3RpbWVTdHJ9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1tZXNzYWdlIj4ke2VudHJ5Lm1lc3NhZ2V9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIEFQSSBNRVRIT0RTCiAgICBhZGQoZW50cnkpIHsKICAgICAgY29uc3QgbmV3RW50cnkgPSB7CiAgICAgICAgLi4uZW50cnksCiAgICAgICAgaWQ6IGVudHJ5LmlkIHx8IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgIHRpbWVzdGFtcDogZW50cnkudGltZXN0YW1wIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpCiAgICAgIH07CiAgICAgIHRoaXMuZW50cmllcyA9IFtuZXdFbnRyeSwgLi4udGhpcy5lbnRyaWVzXTsKICAgICAgdGhpcy5lbnRyaWVzJC5uZXh0KHRoaXMuZW50cmllcyk7CiAgICB9CiAgICBhZGRNYW55KGVudHJpZXMpIHsKICAgICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAuLi5lbnRyeSwKICAgICAgICBpZDogZW50cnkuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCksCiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkKICAgICAgfSkpOwogICAgICB0aGlzLmVudHJpZXMgPSBbLi4ubmV3RW50cmllcy5yZXZlcnNlKCksIC4uLnRoaXMuZW50cmllc107CiAgICAgIHRoaXMuZW50cmllcyQubmV4dCh0aGlzLmVudHJpZXMpOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuZW50cmllcyA9IFtdOwogICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgIH0KICAgIGdldEVudHJpZXMoKSB7CiAgICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTsKICAgIH0KICAgIGZpbHRlcihjcml0ZXJpYSkgewogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICBpZiAoY3JpdGVyaWEudXNlciAmJiBlbnRyeS51c2VyICE9PSBjcml0ZXJpYS51c2VyKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChjcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IGNyaXRlcmlhLnR5cGUpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0pOwogICAgfQogICAgc2VhcmNoKHF1ZXJ5KSB7CiAgICAgIGNvbnN0IGxvd2VyUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSB8fCBlbnRyeS51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpOwogICAgfQogICAgLy8gUFJJVkFURSBIRUxQRVJTCiAgICBnZW5lcmF0ZUlkKCkgewogICAgICByZXR1cm4gYGFjdGl2aXR5LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDsKICAgIH0KICAgIGdldEZpbHRlcmVkRW50cmllcygpIHsKICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZW50cmllczsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICBjb25zdCBsb3dlclF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkgfHwgZW50cnkudXNlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyUXVlcnkpKTsKICAgICAgfQogICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyIHx8IHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKGVudHJ5KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyICYmIGVudHJ5LnVzZXIgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaWYgKHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSAmJiBlbnRyeS50eXBlICE9PSB0aGlzLmZpbHRlckNyaXRlcmlhLnR5cGUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBncm91cEVudHJpZXNCeURhdGUoZW50cmllcykgewogICAgICBjb25zdCBncm91cHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgbGFiZWw7CiAgICAgICAgaWYgKHRoaXMuaXNTYW1lRGF5KGRhdGUsIHRvZGF5KSkgewogICAgICAgICAgbGFiZWwgPSAiVG9kYXkiOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NhbWVEYXkoZGF0ZSwgeWVzdGVyZGF5KSkgewogICAgICAgICAgbGFiZWwgPSAiWWVzdGVyZGF5IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGFiZWwgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLCB7CiAgICAgICAgICAgIG1vbnRoOiAic2hvcnQiLAogICAgICAgICAgICBkYXk6ICJudW1lcmljIiwKICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0b2RheS5nZXRGdWxsWWVhcigpID8gIm51bWVyaWMiIDogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFncm91cHMuaGFzKGxhYmVsKSkgewogICAgICAgICAgZ3JvdXBzLnNldChsYWJlbCwgW10pOwogICAgICAgIH0KICAgICAgICBncm91cHMuZ2V0KGxhYmVsKS5wdXNoKGVudHJ5KTsKICAgICAgfQogICAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMuZW50cmllcygpKS5tYXAoKFtsYWJlbCwgZW50cmllczJdKSA9PiAoewogICAgICAgIGxhYmVsLAogICAgICAgIGVudHJpZXM6IGVudHJpZXMyCiAgICAgIH0pKTsKICAgIH0KICAgIGlzU2FtZURheShkYXRlMSwgZGF0ZTIpIHsKICAgICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiYgZGF0ZTEuZ2V0TW9udGgoKSA9PT0gZGF0ZTIuZ2V0TW9udGgoKSAmJiBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKTsKICAgIH0KICAgIGZvcm1hdFRpbWUoZGF0ZSkgewogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlCiAgICAgIH0pOwogICAgfQogICAgZ2V0SWNvbkZvclR5cGUodHlwZTUpIHsKICAgICAgY29uc3QgaWNvbnM1ID0gewogICAgICAgIGxvZ2luOiAibHVjaWRlOmxvZ0luIiwKICAgICAgICBsb2dvdXQ6ICJsdWNpZGU6bG9nT3V0IiwKICAgICAgICB2aWV3OiAibHVjaWRlOmV5ZSIsCiAgICAgICAgY3JlYXRlOiAibHVjaWRlOnBsdXMiLAogICAgICAgIHVwZGF0ZTogImx1Y2lkZTplZGl0IiwKICAgICAgICBkZWxldGU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBjdXN0b206ICJsdWNpZGU6YWN0aXZpdHkiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uczVbdHlwZTVdIHx8IGljb25zNS5jdXN0b207CiAgICB9CiAgICBoYW5kbGVTZWFyY2hJbnB1dChlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGUxMSwgZW50cnkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBhY3Rpdml0eSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHtlbnRyeS51c2VyfSAke2VudHJ5Lm1lc3NhZ2V9YCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRmlsdGVyIGJ5IHVzZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dXNlciIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHsgdXNlcjogZW50cnkudXNlciB9OwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbHRlciBieSB0eXBlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHsgdHlwZTogZW50cnkudHlwZSB9OwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkNsZWFyIGZpbHRlcnMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6eCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHt9OwogICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQgPSAoKSA9PiB7CiAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRmlsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJOZXcgRmlsZSIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGUtcGx1cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuLi4uIiwgc2hvcnRjdXQ6ICJDbWQrTyIsIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuIFJlY2VudCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgIHsgbmFtZTogInByb2plY3QtYWxwaGEudHMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAxIikgfSwKICAgICAgICAgIHsgbmFtZTogImNvbmZpZy5qc29uIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiByZWNlbnQgMiIpIH0sCiAgICAgICAgICB7IG5hbWU6ICJyZWFkbWUubWQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAzIikgfQogICAgICAgIF0gfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTYXZlIiwgc2hvcnRjdXQ6ICJDbWQrUyIsIGljb25OYW1lOiAic2F2ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNhdmUiKSB9LAogICAgICAgIHsgbmFtZTogIlNhdmUgQXMuLi4iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtTIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSBhcyIpLCBkaXNhYmxlZDogdHJ1ZSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkV4aXQiLCBzaG9ydGN1dDogIkNtZCtRIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhpdCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkVkaXQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICB7IG5hbWU6ICJSZWRvIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrWiIsIGljb25OYW1lOiAicmVkbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlZG8iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICB7IG5hbWU6ICJDb3B5Iiwgc2hvcnRjdXQ6ICJDbWQrQyIsIGljb25OYW1lOiAiY29weSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNvcHkiKSB9LAogICAgICAgIHsgbmFtZTogIlBhc3RlIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUGFzdGUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkZpbmQiLCBzaG9ydGN1dDogIkNtZCtGIiwgaWNvbk5hbWU6ICJzZWFyY2giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGaW5kIikgfSwKICAgICAgICB7IG5hbWU6ICJSZXBsYWNlIiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBGdWxsc2NyZWVuIiwgc2hvcnRjdXQ6ICJGMTEiLCBpY29uTmFtZTogImV4cGFuZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZ1bGxzY3JlZW4iKSB9LAogICAgICAgIHsgbmFtZTogIlpvb20gSW4iLCBzaG9ydGN1dDogIkNtZCsrIiwgaWNvbk5hbWU6ICJ6b29tLWluIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBpbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBPdXQiLCBzaG9ydGN1dDogIkNtZCstIiwgaWNvbk5hbWU6ICJ6b29tLW91dCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlpvb20gb3V0IikgfSwKICAgICAgICB7IG5hbWU6ICJSZXNldCBab29tIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBTaWRlYmFyIiwgc2hvcnRjdXQ6ICJDbWQrQiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBzaWRlYmFyIikgfSwKICAgICAgICB7IG5hbWU6ICJUb2dnbGUgVGVybWluYWwiLCBzaG9ydGN1dDogIkNtZCtKIiwgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSB0ZXJtaW5hbCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkhlbHAiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKSB9LAogICAgICAgIHsgbmFtZTogIlJlbGVhc2UgTm90ZXMiLCBpY29uTmFtZTogImZpbGUtdGV4dCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlbGVhc2Ugbm90ZXMiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlJlcG9ydCBJc3N1ZSIsIGljb25OYW1lOiAiYnVnIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0IGlzc3VlIikgfSwKICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICBdCiAgICB9CiAgXTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3QgYXBwYmFyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIik7CiAgICBjb25zdCBzdGF0dXNCdXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIuc3RhdHVzLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgc3RhdHVzQnV0dG9uc1swXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJvbmxpbmUiIH07CiAgICB9KTsKICAgIHN0YXR1c0J1dHRvbnNbMV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci51c2VyID0geyAuLi5hcHBiYXIudXNlciwgc3RhdHVzOiAiYnVzeSIgfTsKICAgIH0pOwogICAgc3RhdHVzQnV0dG9uc1syXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJhd2F5IiB9OwogICAgfSk7CiAgICBzdGF0dXNCdXR0b25zWzNdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogIm9mZmxpbmUiIH07CiAgICB9KTsKICAgIGNvbnN0IHdpbmRvd0NvbnRyb2xzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIud2luZG93LWNvbnRyb2xzLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgd2luZG93Q29udHJvbHNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5zaG93V2luZG93Q29udHJvbHMgPSAhYXBwYmFyLnNob3dXaW5kb3dDb250cm9sczsKICAgIH0pOwogICAgY29uc3QgYnJlYWRjcnVtYkJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi5icmVhZGNydW1iLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgYnJlYWRjcnVtYkJ1dHRvbnNbMF0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5icmVhZGNydW1icyA9ICJIb21lID4gRG9jdW1lbnRzID4gUHJvamVjdHMgPiBNeUFwcCA+IHNyYyA+IGluZGV4LnRzIjsKICAgIH0pOwogICAgYnJlYWRjcnVtYkJ1dHRvbnNbMV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5icmVhZGNydW1icyA9ICJEYXNoYm9hcmQiOwogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRyb2xzIHsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCBsYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIGlkPSJhcHBiYXIiCiAgICAgICAgLm1lbnVJdGVtcz0ke21lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHsiUHJvamVjdCA+IHNyYyA+IGNvbXBvbmVudHMgPiBBcHBCYXIudHMifQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7IiA+ICJ9CiAgICAgICAgLnNob3dXaW5kb3dDb250cm9scz0ke3RydWV9CiAgICAgICAgLnNob3dTZWFyY2g9JHt0cnVlfQogICAgICAgIC50aGVtZT0keyJkYXJrIn0KICAgICAgICAudXNlcj0ke3sKICAgIG5hbWU6ICJKb2huIERvZSIsCiAgICBzdGF0dXM6ICJvbmxpbmUiCiAgfX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTWVudSBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsLml0ZW0pfQogICAgICAgIEBicmVhZGNydW1iLW5hdmlnYXRlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkJyZWFkY3J1bWIgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgICBAc2VhcmNoLWNsaWNrPSR7KCkgPT4gY29uc29sZS5sb2coIlNlYXJjaCBjbGlja2VkIil9CiAgICAgICAgQHVzZXItbWVudS1vcGVuPSR7KCkgPT4gY29uc29sZS5sb2coIlVzZXIgbWVudSBjbGlja2VkIil9CiAgICAgID48L2RlZXMtYXBwdWktYXBwYmFyPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGgyPkFwcCBCYXIgRGVtbzwvaDI+CiAgICAgICAgPHA+VGhpcyBkZW1vIHNob3dzIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhlIGFwcCBiYXIgY29tcG9uZW50OjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+RHluYW1pYyBtZW51IGl0ZW1zIHdpdGggaWNvbnMsIHNob3J0Y3V0cywgYW5kIHN1Ym1lbnVzPC9saT4KICAgICAgICAgIDxsaT5CcmVhZGNydW1iIG5hdmlnYXRpb248L2xpPgogICAgICAgICAgPGxpPlVzZXIgYWNjb3VudCBzZWN0aW9uIHdpdGggc3RhdHVzIGluZGljYXRvcjwvbGk+CiAgICAgICAgICA8bGk+U2VhcmNoIGljb248L2xpPgogICAgICAgICAgPGxpPldpbmRvdyBjb250cm9scyAocGxhdGZvcm0tc3BlY2lmaWMpPC9saT4KICAgICAgICAgIDxsaT5EYXJrL2xpZ2h0IHRoZW1lIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPktleWJvYXJkIG5hdmlnYXRpb24gKFRhYiwgRW50ZXIsIEVzY2FwZSk8L2xpPgogICAgICAgICAgPGxpPkN1c3RvbSBldmVudHMgZm9yIGFsbCBpbnRlcmFjdGlvbnM8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPlRoZW1lPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0idGhlbWUtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhcms8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TGlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5Vc2VyIFN0YXR1czwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9InN0YXR1cy10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+T25saW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkJ1c3k8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QXdheTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PZmZsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+V2luZG93IENvbnRyb2xzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0id2luZG93LWNvbnRyb2xzLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Ub2dnbGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5CcmVhZGNydW1iczwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9ImJyZWFkY3J1bWItdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkxvbmcgUGF0aDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TaG9ydCBQYXRoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGFwcHVpQXBwYmFyU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgdGhlbWluZyAqLwogICAgICAgIC0tYXBwYmFyLWhlaWdodDogNDBweDsKICAgICAgICAtLWFwcGJhci1mb250LXNpemU6IDEycHg7CiAgICAgICAgCiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogdmFyKC0tYXBwYmFyLWhlaWdodCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1hcHBiYXItZm9udC1zaXplKTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bzsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbmFsOiBTdHlsZSBmb3IgbWVudSBpdGVtcyB3aXRoIGljb25zIChub3QgdHlwaWNhbGx5IHVzZWQgZm9yIHRvcC1sZXZlbCBpdGVtcykgKi8KICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDEwIiwgIiNmZmZmZmYyMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAyMCIsICIjZmZmZmZmMzAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwODAiLCAiI2ZmZmZmZjgwIil9OwogICAgICB9CgoKICAgICAgLyogRHJvcGRvd24gc3R5bGVzICovCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwgIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24ub3BlbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW06aG92ZXIsCiAgICAgIC5kcm9wZG93bi1pdGVtLmZvY3VzZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAuZHJvcGRvd24tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbSAuc2hvcnRjdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC8qIEJyZWFkY3J1bWJzICovCiAgICAgIC5icmVhZGNydW1icyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1pdGVtIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1zZXBhcmF0b3IgewogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBBY2NvdW50IHNlY3Rpb24gKi8KICAgICAgLmFjY291bnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm86aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMjAiLCAiI2ZmZmZmZjMwIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogLTJweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub25saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNGNhZjUwOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub2ZmbGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzc1NzU3NTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmJ1c3kgewogICAgICAgIGJhY2tncm91bmQ6ICNmNDQzMzY7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5hd2F5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBsb2cgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuYWN0aXZpdHktdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDYwIiwgIiNmZmZmZmY2MCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMTUiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1iYWRnZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjNTI1MjUyIil9OwogICAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci90ZW1wbGF0ZS5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmVuZGVyQXBwdWlBcHBiYXIgPSAoY29tcG9uZW50KSA9PiB7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVzIj4KICAgICAgICAgICR7Y29tcG9uZW50LnNob3dXaW5kb3dDb250cm9scyA/IGIyYDxkZWVzLXdpbmRvd2NvbnRyb2xzPjwvZGVlcy13aW5kb3djb250cm9scz5gIDogIiJ9CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJNZW51SXRlbXMoKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJicmVhZGNydW1icyI+CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJCcmVhZGNydW1icygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjY291bnQiPgogICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyQWNjb3VudFNlY3Rpb24oKX0KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy13aW5kb3djb250cm9scy9kZWVzLXdpbmRvd2NvbnRyb2xzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXaW5kb3dDb250cm9scyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd2luZG93Y29udHJvbHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dpbmRvd0NvbnRyb2xzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOCh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV2luZG93Q29udHJvbHMyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13aW5kb3djb250cm9scz48L2RlZXMtd2luZG93Y29udHJvbHM+YDsKICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibWFjIik7CiAgICAvLyBJbnN0YW5jZQogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IHBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYgewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyMjIyOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LmNsb3NlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1ZjU3OwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdi50b0RvY2sgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmJkMmU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2Lm1pbk1heCB7CiAgICAgICAgYmFja2dyb3VuZDogIzI3YzkzZjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzMzMzMzMzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMudHlwZSA9PT0gIm1hYyIgJiYgdGhpcy5wb3NpdGlvbiA9PT0gImxlZnQiIHx8ICh0aGlzLnR5cGUgPT09ICJsaW51eCIgfHwgdGhpcy50eXBlID09PSAid2luZG93cyIpICYmIHRoaXMucG9zaXRpb24gPT09ICJyaWdodCIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0id2luZG93Q29udHJvbHMiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b0RvY2siPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1pbk1heCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IGIyYGB9CiAgICBgOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOSh0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV2luZG93Q29udHJvbHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bi9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bi5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF91c2VyX2RlY29yYXRvcnM7CiAgbGV0IF91c2VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdXNlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNPcGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdXNlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX21lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX3Bvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF91c2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91c2VyX2luaXRpYWxpemVycywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX2lzT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc09wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc09wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5faW5pdGlhbGl6ZXJzLCBfaXNPcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24KICAgICAgLnVzZXI9JHt7CiAgICAgIG5hbWU6ICJKb2huIERvZSIsCiAgICAgIGVtYWlsOiAiam9obi5kb2VAZXhhbXBsZS5jb20iLAogICAgICBhdmF0YXI6ICJodHRwczovL3JhbmRvbXVzZXIubWUvYXBpL3BvcnRyYWl0cy9tZW4vMS5qcGciLAogICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICB9fQogICAgICAubWVudUl0ZW1zPSR7WwogICAgICB7IG5hbWU6ICJQcm9maWxlIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgIHsgbmFtZTogIkFjY291bnQiLCBpY29uTmFtZTogInNldHRpbmdzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWNjb3VudCIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJIZWxwICYgU3VwcG9ydCIsIGljb25OYW1lOiAiaGVscENpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkhlbHAiKSB9LAogICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrSyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICBdfQogICAgICAuaXNPcGVuPSR7dHJ1ZX0KICAgID48L2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfdXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICBnZXQgdXNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB1c2VyKHZhbHVlMikgewogICAgICB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9pc09wZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3Blbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNPcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AtcmlnaHQiKSk7CiAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwgIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLm92ZXJsYXkuZHJvcGRvd259OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICA6aG9zdChbaXNvcGVuXSkgLmRyb3Bkb3duIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQogICAgICAKICAgICAgLmJhY2tkcm9wIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBQb3NpdGlvbiB2YXJpYW50cyAqLwogICAgICAuZHJvcGRvd24udG9wLXJpZ2h0IHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24udG9wLWxlZnQgewogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLmJvdHRvbS1yaWdodCB7CiAgICAgICAgYm90dG9tOiAxMDAlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLmJvdHRvbS1sZWZ0IHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFVzZXIgc2VjdGlvbiAqLwogICAgICAudXNlci1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICB9CgogICAgICAudXNlci1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9ubGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzRjYWY1MDsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9mZmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM3NTc1NzU7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5idXN5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjQ0MzM2OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYXdheSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgfQoKICAgICAgLnVzZXItZGV0YWlscyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC51c2VyLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnVzZXItZW1haWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAvKiBNZW51IHNlY3Rpb24gKi8KICAgICAgLm1lbnUtc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjY2NjIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51LXNob3J0Y3V0IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KCiAgICAgIC8qIEJhY2tkcm9wIGZvciBtb2JpbGUgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmJhY2tkcm9wIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmJhY2tkcm9wLmRyb3Bkb3dufTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2lzb3Blbl0pIC5iYWNrZHJvcCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kcm9wZG93biB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMC45NSk7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMnB4KTsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2lzb3Blbl0pIC5kcm9wZG93biB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxKTsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYmFja2Ryb3AiIEBjbGljaz0keygpID0+IHRoaXMuY2xvc2UoKX0+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duICR7dGhpcy5wb3NpdGlvbn0iPgogICAgICAgICR7dGhpcy51c2VyID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItYXZhdGFyIj4KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhciA/IGIyYDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gIDogdGhpcy5nZXRJbml0aWFscyh0aGlzLnVzZXIubmFtZSl9CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5zdGF0dXMgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItbmFtZSI+JHt0aGlzLnVzZXIubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLmVtYWlsID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItZW1haWwiPiR7dGhpcy51c2VyLmVtYWlsfTwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMucmVuZGVyTWVudUl0ZW0oaXRlbSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNZW51SXRlbShpdGVtKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gOwogICAgICB9CiAgICAgIGNvbnN0IG1lbnVJdGVtID0gaXRlbTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51LWl0ZW0iIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlTWVudUNsaWNrKG1lbnVJdGVtKX0+CiAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1pdGVtLXRleHQiPiR7bWVudUl0ZW0ubmFtZX08L3NwYW4+CiAgICAgICAgJHttZW51SXRlbS5zaG9ydGN1dCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnUtc2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5pdGlhbHMobmFtZSkgewogICAgICByZXR1cm4gbmFtZS5zcGxpdCgiICIpLm1hcCgocGFydCkgPT4gcGFydFswXSkuam9pbigiIikudG9VcHBlckNhc2UoKS5zbGljZSgwLCAyKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZU1lbnVDbGljayhpdGVtKSB7CiAgICAgIGF3YWl0IGl0ZW0uYWN0aW9uKCk7CiAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIG9wZW4oKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTsKICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwogICAgfQogICAgdG9nZ2xlKCkgewogICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjsKICAgIH0KICAgIC8vIEhhbmRsZSBjbGlja3Mgb3V0c2lkZSB0aGUgZHJvcGRvd24KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmhhbmRsZU91dHNpZGVDbGljayA9IHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spOwogICAgfQogICAgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5jb250YWlucyhldmVudC50YXJnZXQpKSB7CiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMucGFyZW50RWxlbWVudDsKICAgICAgICBpZiAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxMCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUJhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYXBwYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnM7CiAgbGV0IF9icmVhZGNydW1ic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3VzZXJfZGVjb3JhdG9yczsKICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NlYXJjaF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZU1lbnVfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZU1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVNZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3BlbkRyb3Bkb3duc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlCYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9icmVhZGNydW1ic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdXNlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX3Byb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Nob3dTZWFyY2hfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9hY3RpdmVNZW51X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9mb2N1c2VkSXRlbV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9icmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJicmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5icmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5icmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX3Nob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF91c2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91c2VyX2luaXRpYWxpemVycywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfcHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9wcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfc2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0FjdGl2aXR5TG9nVG9nZ2xlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93QWN0aXZpdHlMb2dUb2dnbGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0FjdGl2aXR5TG9nVG9nZ2xlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycywgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2aXR5TG9nQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nQ291bnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZpdHlMb2dDb3VudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5TG9nQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfYWN0aXZpdHlMb2dBY3RpdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dBY3RpdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nQWN0aXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjdGl2aXR5TG9nQWN0aXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0FjdGl2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ0FjdGl2ZV9pbml0aWFsaXplcnMsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3RpdmVNZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZU1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZU1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlTWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlTWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVNZW51X2luaXRpYWxpemVycywgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfb3BlbkRyb3Bkb3duc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvcGVuRHJvcGRvd25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRHJvcGRvd25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9wZW5Ecm9wZG93bnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm9wZW5Ecm9wZG93bnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkRyb3Bkb3duc19pbml0aWFsaXplcnMsIF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2ZvY3VzZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZvY3VzZWRJdGVtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmb2N1c2VkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5mb2N1c2VkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZm9jdXNlZEl0ZW0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmb2N1c2VkRHJvcGRvd25JdGVtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmb2N1c2VkRHJvcGRvd25JdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvY3VzZWREcm9wZG93bkl0ZW0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZvY3VzZWREcm9wZG93bkl0ZW0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZm9jdXNlZERyb3Bkb3duSXRlbV9pbml0aWFsaXplcnMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Byb2ZpbGVEcm9wZG93bk9wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzUHJvZmlsZURyb3Bkb3duT3BlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Byb2ZpbGVEcm9wZG93bk9wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlCYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UgUFJPUEVSVElFUwogICAgZ2V0IG1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9icmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9icmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNicmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfc2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfdXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfcHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgcHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNwcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93QWN0aXZpdHlMb2dUb2dnbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93U2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIEFjdGl2aXR5IGxvZyB0b2dnbGUKICAgIGdldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93QWN0aXZpdHlMb2dUb2dnbGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGFjdGl2aXR5TG9nQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhY3Rpdml0eUxvZ0FjdGl2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dBY3RpdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZlTWVudV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQWN0aXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZlTWVudV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIC8vIFNUQVRFCiAgICBnZXQgYWN0aXZlTWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2ZU1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVNZW51KHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVNZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbkRyb3Bkb3duc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgZ2V0IG9wZW5Ecm9wZG93bnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3BlbkRyb3Bkb3ducyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZvY3VzZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfb3BlbkRyb3Bkb3duc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGZvY3VzZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmb2N1c2VkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBmb2N1c2VkRHJvcGRvd25JdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jZm9jdXNlZERyb3Bkb3duSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvY3VzZWREcm9wZG93bkl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZvY3VzZWREcm9wZG93bkl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Byb2ZpbGVEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2ZpbGVEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGFwcHVpQXBwYmFyU3R5bGVzOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckFwcHVpQXBwYmFyKHRoaXMpOwogICAgfQogICAgcmVuZGVyTWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKChpdGVtLCBpbmRleDIpID0+IHRoaXMucmVuZGVyTWVudUl0ZW0oaXRlbSwgYG1lbnUtJHtpbmRleDJ9YCkpfQogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVJdGVtKGl0ZW0sIGl0ZW1JZCkgewogICAgICBpZiAoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkOwogICAgICBjb25zdCBoYXNTdWJtZW51ID0gbWVudUl0ZW0uc3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51Lmxlbmd0aCA+IDA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSAke2lzQWN0aXZlID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7bWVudUl0ZW0uZGlzYWJsZWR9CiAgICAgICAgdGFiaW5kZXg9IiR7bWVudUl0ZW0uZGlzYWJsZWQgPyAtMSA6IDB9IgogICAgICAgIGRhdGEtaXRlbS1pZD0iJHtpdGVtSWR9IgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlTWVudUNsaWNrKG1lbnVJdGVtLCBpdGVtSWQpfQogICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVNZW51S2V5ZG93bihlMTEsIG1lbnVJdGVtLCBpdGVtSWQpfQogICAgICAgIHJvbGU9Im1lbnVpdGVtIgogICAgICAgIGFyaWEtaGFzcG9wdXA9IiR7aGFzU3VibWVudX0iCiAgICAgICAgYXJpYS1leHBhbmRlZD0iJHtpc0FjdGl2ZX0iCiAgICAgID4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAke21lbnVJdGVtLm5hbWV9CiAgICAgICAgJHtoYXNTdWJtZW51ID8gdGhpcy5yZW5kZXJEcm9wZG93bihtZW51SXRlbS5zdWJtZW51LCBpdGVtSWQsIGlzQWN0aXZlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJEcm9wZG93bihpdGVtcywgcGFyZW50SWQsIGlzT3BlbikgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImRyb3Bkb3duICR7aXNPcGVuID8gIm9wZW4iIDogIiJ9IiAKICAgICAgICBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9CiAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZURyb3Bkb3duS2V5ZG93bihlMTEsIGl0ZW1zLCBwYXJlbnRJZCl9CiAgICAgICAgdGFiaW5kZXg9IiR7aXNPcGVuID8gMCA6IC0xfSIKICAgICAgICByb2xlPSJtZW51IgogICAgICA+CiAgICAgICAgJHtpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJEcm9wZG93bkl0ZW0oaXRlbSwgYCR7cGFyZW50SWR9LSR7aW5kZXgyfWApKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRHJvcGRvd25JdGVtKGl0ZW0sIGl0ZW1JZCkgewogICAgICBpZiAoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICBjb25zdCBpdGVtSW5kZXggPSBwYXJzZUludChpdGVtSWQuc3BsaXQoIi0iKS5wb3AoKSB8fCAiMCIpOwogICAgICBjb25zdCBpc0ZvY3VzZWQgPSB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPT09IGl0ZW1JbmRleDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWl0ZW0gJHtpc0ZvY3VzZWQgPyAiZm9jdXNlZCIgOiAiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7bWVudUl0ZW0uZGlzYWJsZWR9CiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhtZW51SXRlbSl9CiAgICAgICAgQG1vdXNlZW50ZXI9JHsoKSA9PiB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBpdGVtSW5kZXh9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgdGFiaW5kZXg9IiR7bWVudUl0ZW0uZGlzYWJsZWQgPyAtMSA6IDB9IgogICAgICA+CiAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7YGx1Y2lkZToke21lbnVJdGVtLmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgPHNwYW4+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ID8gYjJgPHNwYW4gY2xhc3M9InNob3J0Y3V0Ij4ke21lbnVJdGVtLnNob3J0Y3V0fTwvc3Bhbj5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckJyZWFkY3J1bWJzKCkgewogICAgICBpZiAoIXRoaXMuYnJlYWRjcnVtYnMpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCBwYXJ0cyA9IHRoaXMuYnJlYWRjcnVtYnMuc3BsaXQodGhpcy5icmVhZGNydW1iU2VwYXJhdG9yKTsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3BhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAke2luZGV4MiA+IDAgPyBiMmA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPiR7dGhpcy5icmVhZGNydW1iU2VwYXJhdG9yfTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPHNwYW4gCiAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIiAKICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQnJlYWRjcnVtYkNsaWNrKHBhcnQsIGluZGV4Mil9CiAgICAgICAgPgogICAgICAgICAgJHtwYXJ0fQogICAgICAgIDwvc3Bhbj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyQWNjb3VudFNlY3Rpb24oKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLnNob3dTZWFyY2ggPyBiMmAKICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICBjbGFzcz0ic2VhcmNoLWljb24iCiAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6c2VhcmNoIn0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2VhcmNoQ2xpY2t9CiAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICBgIDogIiJ9CiAgICAgICR7dGhpcy51c2VyID8gYjJgCiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iIEBjbGljaz0ke3RoaXMuaGFuZGxlVXNlckNsaWNrfT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhciA/IGIyYDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gIDogYjJgJHt0aGlzLnVzZXIubmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX1gfQogICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cyA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHNwYW4+JHt0aGlzLnVzZXIubmFtZX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAgICAgICAudXNlcj0ke3RoaXMudXNlcn0KICAgICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMucHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAgICAgLmlzT3Blbj0ke3RoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVufQogICAgICAgICAgICAucG9zaXRpb249JHsidG9wLXJpZ2h0In0KICAgICAgICAgICAgQG1lbnUtc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVQcm9maWxlTWVudVNlbGVjdChlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgICAgJHt0aGlzLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSA/IGIyYAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhY3Rpdml0eS10b2dnbGUgJHt0aGlzLmFjdGl2aXR5TG9nQWN0aXZlID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUFjdGl2aXR5VG9nZ2xlfQogICAgICAgICAgdGl0bGU9IkFjdGl2aXR5IExvZyIKICAgICAgICA+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTphY3Rpdml0eSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgJHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiAwID8gYjJgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1iYWRnZSI+JHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiA5OSA/ICI5OSsiIDogdGhpcy5hY3Rpdml0eUxvZ0NvdW50fTwvc3Bhbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgIH0KICAgIC8vIEV2ZW50IGhhbmRsZXJzCiAgICBoYW5kbGVNZW51Q2xpY2soaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmIChpdGVtLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKGl0ZW0uc3VibWVudSAmJiBpdGVtLnN1Ym1lbnUubGVuZ3RoID4gMCkgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gaXRlbUlkOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgIGlmIChpdGVtLmFjdGlvbikgewogICAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVEcm9wZG93bkl0ZW1DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7CiAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWVudUtleWRvd24oZTExLCBpdGVtLCBpdGVtSWQpIHsKICAgICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgIGNhc2UgIiAiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmhhbmRsZU1lbnVDbGljayhpdGVtLCBpdGVtSWQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGlmIChpdGVtLnN1Ym1lbnUgJiYgdGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IDA7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsaWRJdGVtID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtLnN1Ym1lbnUsIC0xLCAxKTsKICAgICAgICAgICAgaWYgKGZpcnN0VmFsaWRJdGVtICE9PSAtMSkgewogICAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGZpcnN0VmFsaWRJdGVtOwogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcigiLmRyb3Bkb3duLm9wZW4iKTsKICAgICAgICAgICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgICAgICAgICBkcm9wZG93bi5mb2N1cygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVGFiIjoKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKGl0ZW1JZCwgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd0xlZnQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKGl0ZW1JZCwgLTEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUJyZWFkY3J1bWJDbGljayhicmVhZGNydW1iLCBpbmRleDIpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYnJlYWRjcnVtYi1uYXZpZ2F0ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgYnJlYWRjcnVtYiwgaW5kZXg6IGluZGV4MiB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2VhcmNoQ2xpY2soKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jbGljayIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFjdGl2aXR5VG9nZ2xlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhY3Rpdml0eS10b2dnbGUiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVVc2VyQ2xpY2soKSB7CiAgICAgIHRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuID0gIXRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ1c2VyLW1lbnUtb3BlbiIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVByb2ZpbGVNZW51U2VsZWN0KGUxMSkgewogICAgICB0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9maWxlLW1lbnUtc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIC8vIExpZmVjeWNsZQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUdsb2JhbENsaWNrKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbENsaWNrID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSk7CiAgICBoYW5kbGVEb2N1bWVudENsaWNrID0gKCkgPT4gewogICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgIH07CiAgICBoYW5kbGVEcm9wZG93bktleWRvd24oZTExLCBpdGVtcywgX3BhcmVudElkKSB7CiAgICAgIGNvbnN0IHZhbGlkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSk7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSwgMSk7CiAgICAgICAgICBpZiAobmV4dEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBuZXh0SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtLCAtMSk7CiAgICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgewogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBwcmV2SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gIT09IC0xKSB7CiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdmFsaWRJdGVtc1t0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW1dOwogICAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0gJiYgImFjdGlvbiIgaW4gZm9jdXNlZEl0ZW0gJiYgIWZvY3VzZWRJdGVtLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhmb2N1c2VkSXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkhvbWUiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgLTEsIDEpOwogICAgICAgICAgaWYgKGZpcnN0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGZpcnN0SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbmQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCBpdGVtcy5sZW5ndGgsIC0xKTsKICAgICAgICAgIGlmIChsYXN0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGxhc3RJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoYC5tZW51SXRlbS5hY3RpdmVgKTsKICAgICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgICBtZW51SXRlbS5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCBjdXJyZW50SW5kZXgsIGRpcmVjdGlvbikgewogICAgICBsZXQgaW5kZXgyID0gY3VycmVudEluZGV4ICsgZGlyZWN0aW9uOwogICAgICB3aGlsZSAoaW5kZXgyID49IDAgJiYgaW5kZXgyIDwgaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2luZGV4Ml07CiAgICAgICAgaWYgKCEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSAmJiAhKCJkaXNhYmxlZCIgaW4gaXRlbSAmJiBpdGVtLmRpc2FibGVkKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICB9CiAgICAgICAgaW5kZXgyICs9IGRpcmVjdGlvbjsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb2N1c05leHRNZW51SXRlbShjdXJyZW50SXRlbUlkLCBkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1lbnVJdGVtIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWlkIikgPT09IGN1cnJlbnRJdGVtSWQpOwogICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGxldCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247CiAgICAgIGlmIChuZXh0SW5kZXggPCAwKSB7CiAgICAgICAgbmV4dEluZGV4ID0gbWVudUl0ZW1zLmxlbmd0aCAtIDE7CiAgICAgIH0gZWxzZSBpZiAobmV4dEluZGV4ID49IG1lbnVJdGVtcy5sZW5ndGgpIHsKICAgICAgICBuZXh0SW5kZXggPSAwOwogICAgICB9CiAgICAgIGxldCBhdHRlbXB0cyA9IDA7CiAgICAgIHdoaWxlIChhdHRlbXB0cyA8IG1lbnVJdGVtcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCBuZXh0SXRlbSA9IG1lbnVJdGVtc1tuZXh0SW5kZXhdOwogICAgICAgIGlmICghbmV4dEl0ZW0uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSB7CiAgICAgICAgICBuZXh0SXRlbS5mb2N1cygpOwogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSkgewogICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBuZXh0SW5kZXggPSAobmV4dEluZGV4ICsgZGlyZWN0aW9uICsgbWVudUl0ZW1zLmxlbmd0aCkgJSBtZW51SXRlbXMubGVuZ3RoOwogICAgICAgIGF0dGVtcHRzKys7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aUJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYm90dG9tYmFyL2RlZXMtYXBwdWktYm90dG9tYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hOwp2YXIgZGVtb0Z1bmM1ID0gKCkgPT4gewogIHJldHVybiBiMihfYSB8fCAoX2EgPSBfX3RlbXBsYXRlKFtgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICM3MzczNzM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tYm90dG9tYmFyLXdyYXBwZXIgewogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgaHNsKDAgMCUgMjAlKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbGFiZWwiPkJvdHRvbSBiYXIgd2l0aCBzdGF0dXMgd2lkZ2V0cyBhbmQgYWN0aW9uczwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ib3R0b21iYXItd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcgogICAgICAgICAgICAgIGlkPSJkZW1vLWJvdHRvbWJhciIKICAgICAgICAgICAgPjwvZGVlcy1hcHB1aS1ib3R0b21iYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbGFiZWwiPkNvbnRyb2xzPC9kaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkU3VjY2Vzc1dpZGdldCgpIj5BZGQgU3VjY2VzcyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRXYXJuaW5nV2lkZ2V0KCkiPkFkZCBXYXJuaW5nIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZEVycm9yV2lkZ2V0KCkiPkFkZCBFcnJvciBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRMb2FkaW5nV2lkZ2V0KCkiPkFkZCBMb2FkaW5nIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFJpZ2h0V2lkZ2V0KCkiPkFkZCBSaWdodCBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRBY3Rpb24oKSI+QWRkIEFjdGlvbjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImNsZWFyQWxsKCkiPkNsZWFyIEFsbDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSI+CiAgICAgICAgY29uc3QgYm90dG9tYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbW8tYm90dG9tYmFyJyk7CgogICAgICAgIC8vIFdhaXQgZm9yIGNvbXBvbmVudCB0byBpbml0aWFsaXplCiAgICAgICAgYXdhaXQgYm90dG9tYmFyLnVwZGF0ZUNvbXBsZXRlOwoKICAgICAgICAvLyBBZGQgaW5pdGlhbCB3aWRnZXRzCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ3N0YXR1cycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTphY3Rpdml0eScsCiAgICAgICAgICBsYWJlbDogJ1N5c3RlbSBPbmxpbmUnLAogICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICB0b29sdGlwOiAnQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ1N0YXR1cyBjbGlja2VkJyksCiAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zOiBbCiAgICAgICAgICAgIHsgbmFtZTogJ1ZpZXcgRGV0YWlscycsIGljb25OYW1lOiAnbHVjaWRlOmluZm8nLCBhY3Rpb246ICgpID0+IGFsZXJ0KCdTeXN0ZW0gZGV0YWlscycpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICdSZWZyZXNoIFN0YXR1cycsIGljb25OYW1lOiAnbHVjaWRlOnJlZnJlc2hDdycsIGFjdGlvbjogKCkgPT4gYWxlcnQoJ1JlZnJlc2hpbmcuLi4nKSB9LAogICAgICAgICAgXSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ25vdGlmaWNhdGlvbnMnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YmVsbCcsCiAgICAgICAgICBsYWJlbDogJzMgbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBzdGF0dXM6ICd3YXJuaW5nJywKICAgICAgICAgIHRvb2x0aXA6ICdZb3UgaGF2ZSB1bnJlYWQgbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9ucyBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICd2ZXJzaW9uJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmdpdEJyYW5jaCcsCiAgICAgICAgICBsYWJlbDogJ3YxLjIuMycsCiAgICAgICAgICB0b29sdGlwOiAnQ3VycmVudCB2ZXJzaW9uJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ1ZlcnNpb24gY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICAvLyBBZGQgaW5pdGlhbCBhY3Rpb25zCiAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICBpZDogJ3NldHRpbmdzJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnNldHRpbmdzJywKICAgICAgICAgIHRvb2x0aXA6ICdTZXR0aW5ncycsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGFsZXJ0KCdTZXR0aW5ncyBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgaWQ6ICdoZWxwJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmhlbHBDaXJjbGUnLAogICAgICAgICAgdG9vbHRpcDogJ0hlbHAnLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBhbGVydCgnSGVscCBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIC8vIERlbW8gY29udHJvbCBmdW5jdGlvbnMKICAgICAgICBsZXQgd2lkZ2V0Q291bnRlciA9IDA7CiAgICAgICAgbGV0IGFjdGlvbkNvdW50ZXIgPSAwOwoKICAgICAgICB3aW5kb3cuYWRkU3VjY2Vzc1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3N1Y2Nlc3MtJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmNoZWNrQ2lyY2xlJywKICAgICAgICAgICAgbGFiZWw6ICdTdWNjZXNzICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgICAgdG9vbHRpcDogJ1N1Y2Nlc3Mgd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnc3VjY2Vzcy0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkV2FybmluZ1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3dhcm5pbmctJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmFsZXJ0VHJpYW5nbGUnLAogICAgICAgICAgICBsYWJlbDogJ1dhcm5pbmcgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ3dhcm5pbmcnLAogICAgICAgICAgICB0b29sdGlwOiAnV2FybmluZyB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCd3YXJuaW5nLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRFcnJvcldpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ2Vycm9yLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTp4Q2lyY2xlJywKICAgICAgICAgICAgbGFiZWw6ICdFcnJvciAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLAogICAgICAgICAgICB0b29sdGlwOiAnRXJyb3Igd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnZXJyb3ItJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZExvYWRpbmdXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBjb25zdCBpZCA9ICdsb2FkaW5nLScgKyB3aWRnZXRDb3VudGVyOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6bG9hZGVyMicsCiAgICAgICAgICAgIGxhYmVsOiAnTG9hZGluZy4uLicsCiAgICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsCiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsCiAgICAgICAgICAgIHRvb2x0aXA6ICdMb2FkaW5nIGluIHByb2dyZXNzJywKICAgICAgICAgIH0pOwoKICAgICAgICAgIC8vIFNpbXVsYXRlIGNvbXBsZXRpb24gYWZ0ZXIgMyBzZWNvbmRzCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgYm90dG9tYmFyLnVwZGF0ZVdpZGdldChpZCwgewogICAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmNoZWNrJywKICAgICAgICAgICAgICBsYWJlbDogJ0RvbmUhJywKICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkUmlnaHRXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdyaWdodC0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6aW5mbycsCiAgICAgICAgICAgIGxhYmVsOiAnUmlnaHQgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdyaWdodC0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkQWN0aW9uID0gKCkgPT4gewogICAgICAgICAgYWN0aW9uQ291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICAgIGlkOiAnYWN0aW9uLScgKyBhY3Rpb25Db3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTp6YXAnLAogICAgICAgICAgICB0b29sdGlwOiAnQWN0aW9uICcgKyBhY3Rpb25Db3VudGVyLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgICAgYWxlcnQoJ0FjdGlvbiAnICsgYWN0aW9uQ291bnRlciArICcgY2xpY2tlZCcpOwogICAgICAgICAgICAgIGJvdHRvbWJhci5yZW1vdmVBY3Rpb24oJ2FjdGlvbi0nICsgYWN0aW9uQ291bnRlcik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuY2xlYXJBbGwgPSAoKSA9PiB7CiAgICAgICAgICBib3R0b21iYXIuY2xlYXJXaWRnZXRzKCk7CiAgICAgICAgICBib3R0b21iYXIuY2xlYXJBY3Rpb25zKCk7CiAgICAgICAgICB3aWRnZXRDb3VudGVyID0gMDsKICAgICAgICAgIGFjdGlvbkNvdW50ZXIgPSAwOwogICAgICAgIH07CiAgICAgIDxcL3NjcmlwdD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgXSkpKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWJvdHRvbWJhci9kZWVzLWFwcHVpLWJvdHRvbWJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxMSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUJvdHRvbWJhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfd2lkZ2V0c19kZWNvcmF0b3JzOwogIGxldCBfd2lkZ2V0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2FjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUJvdHRvbWJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF93aWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTExKHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMSh0aGlzLCBudWxsLCBfYWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aW9uc19pbml0aWFsaXplcnMsIF9hY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX3dpZGdldHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgd2lkZ2V0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3aWRnZXRzKHZhbHVlMikgewogICAgICB0aGlzLiN3aWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEyKHRoaXMsIF9hY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBhY3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuYm90dG9tLWJhciB7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTQlKSIsICJoc2woMCAwJSA2JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAud2lkZ2V0OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtc2VwYXJhdG9yIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFN0YXR1cyBjb2xvcnMgbWF0Y2hpbmcgZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyICovCiAgICAgIC53aWRnZXQuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0Lndhcm5pbmcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDM4IDkyJSA0NSUpIiwgImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5lcnJvciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLnNwaW5uaW5nIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBsZWZ0V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5wb3NpdGlvbiAhPT0gInJpZ2h0Iikuc29ydCgoYTUsIGI1KSA9PiAoYTUub3JkZXIgfHwgMCkgLSAoYjUub3JkZXIgfHwgMCkpOwogICAgICBjb25zdCByaWdodFdpZGdldHMgPSB0aGlzLndpZGdldHMuZmlsdGVyKCh3MykgPT4gdzMucG9zaXRpb24gPT09ICJyaWdodCIpLnNvcnQoKGE1LCBiNSkgPT4gKGE1Lm9yZGVyIHx8IDApIC0gKGI1Lm9yZGVyIHx8IDApKTsKICAgICAgY29uc3QgbGVmdEFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUucG9zaXRpb24gPT09ICJsZWZ0Iik7CiAgICAgIGNvbnN0IHJpZ2h0QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5wb3NpdGlvbiAhPT0gImxlZnQiKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIExlZnQgYWN0aW9ucyAtLT4KICAgICAgICAke2xlZnRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnJlbmRlckFjdGlvbihhY3Rpb24pKX0KCiAgICAgICAgPCEtLSBMZWZ0IHdpZGdldHMgLS0+CiAgICAgICAgJHtsZWZ0V2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICR7aW5kZXgyID4gMCB8fCBsZWZ0QWN0aW9ucy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YCA6ICIifQogICAgICAgICAgJHt0aGlzLnJlbmRlcldpZGdldCh3aWRnZXQpfQogICAgICAgIGApfQoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIFJpZ2h0IHdpZGdldHMgLS0+CiAgICAgICAgJHtyaWdodFdpZGdldHMubWFwKCh3aWRnZXQsIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCl9CiAgICAgICAgICAke2luZGV4MiA8IHJpZ2h0V2lkZ2V0cy5sZW5ndGggLSAxIHx8IHJpZ2h0QWN0aW9ucy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YCA6ICIifQogICAgICAgIGApfQoKICAgICAgICA8IS0tIFJpZ2h0IGFjdGlvbnMgLS0+CiAgICAgICAgJHtyaWdodEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHRoaXMucmVuZGVyQWN0aW9uKGFjdGlvbikpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJXaWRnZXQod2lkZ2V0KSB7CiAgICAgIGNvbnN0IHN0YXR1c0NsYXNzID0gd2lkZ2V0LnN0YXR1cyAmJiB3aWRnZXQuc3RhdHVzICE9PSAiaWRsZSIgPyB3aWRnZXQuc3RhdHVzIDogIiI7CiAgICAgIGNvbnN0IGljb25OYW1lID0gd2lkZ2V0Lmljb25OYW1lID8gd2lkZ2V0Lmljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IHdpZGdldC5pY29uTmFtZSA6IGBsdWNpZGU6JHt3aWRnZXQuaWNvbk5hbWV9YCA6ICIiOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0id2lkZ2V0ICR7c3RhdHVzQ2xhc3N9IgogICAgICAgIHRpdGxlPSIke3dpZGdldC50b29sdGlwIHx8ICIifSIKICAgICAgICBAY2xpY2s9JHsoKSA9PiB3aWRnZXQub25DbGljaz8uKCl9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVXaWRnZXRDb250ZXh0TWVudShlMTEsIHdpZGdldCl9CiAgICAgID4KICAgICAgICAke2ljb25OYW1lID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgIC5pY29uPSR7aWNvbk5hbWV9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7d2lkZ2V0LmxvYWRpbmcgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICAke3dpZGdldC5sYWJlbCA/IGIyYDxzcGFuPiR7d2lkZ2V0LmxhYmVsfTwvc3Bhbj5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbihhY3Rpb24pIHsKICAgICAgY29uc3QgaWNvbk5hbWUgPSBhY3Rpb24uaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpID8gYWN0aW9uLmljb25OYW1lIDogYGx1Y2lkZToke2FjdGlvbi5pY29uTmFtZX1gOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYWN0aW9uLWJ1dHRvbiAke2FjdGlvbi5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgdGl0bGU9IiR7YWN0aW9uLnRvb2x0aXAgfHwgIiJ9IgogICAgICAgIEBjbGljaz0keygpID0+ICFhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLm9uQ2xpY2s/LigpfQogICAgICA+CiAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgLmljb249JHtpY29uTmFtZX0KICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVdpZGdldENvbnRleHRNZW51KGUxMSwgd2lkZ2V0KSB7CiAgICAgIGlmICghd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMgfHwgd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMpIHsKICAgICAgICBpZiAoaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLAogICAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhd2FpdCBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZTExLCBtZW51SXRlbXMpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBBUEkgTUVUSE9EUyAoaW1wbGVtZW50cyBJQm90dG9tQmFyQVBJKQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIEFkZCBhIHdpZGdldCB0byB0aGUgYm90dG9tIGJhcgogICAgICovCiAgICBhZGRXaWRnZXQod2lkZ2V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5pZCAhPT0gd2lkZ2V0LmlkKTsKICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgd2lkZ2V0XTsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHdpZGdldCBieSBJRAogICAgICovCiAgICB1cGRhdGVXaWRnZXQoaWQsIHVwZGF0ZSkgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3MykgPT4gdzMuaWQgPT09IGlkID8geyAuLi53MywgLi4udXBkYXRlIH0gOiB3Myk7CiAgICB9CiAgICAvKioKICAgICAqIFJlbW92ZSBhIHdpZGdldCBieSBJRAogICAgICovCiAgICByZW1vdmVXaWRnZXQoaWQpIHsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLmlkICE9PSBpZCk7CiAgICB9CiAgICAvKioKICAgICAqIEdldCBhIHdpZGdldCBieSBJRAogICAgICovCiAgICBnZXRXaWRnZXQoaWQpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5maW5kKCh3MykgPT4gdzMuaWQgPT09IGlkKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYWxsIHdpZGdldHMKICAgICAqLwogICAgY2xlYXJXaWRnZXRzKCkgewogICAgICB0aGlzLndpZGdldHMgPSBbXTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIGFuIGFjdGlvbiBidXR0b24KICAgICAqLwogICAgYWRkQWN0aW9uKGFjdGlvbikgewogICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUuaWQgIT09IGFjdGlvbi5pZCk7CiAgICAgIHRoaXMuYWN0aW9ucyA9IFsuLi50aGlzLmFjdGlvbnMsIGFjdGlvbl07CiAgICB9CiAgICAvKioKICAgICAqIFJlbW92ZSBhbiBhY3Rpb24gYnkgSUQKICAgICAqLwogICAgcmVtb3ZlQWN0aW9uKGlkKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5pZCAhPT0gaWQpOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgYWN0aW9ucwogICAgICovCiAgICBjbGVhckFjdGlvbnMoKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IFtdOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWJhY2tncm91bmQgewogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBtYXJnaW46IDMycHggMCAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk2OHB4KSB7CiAgICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tYmFja2dyb3VuZCI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RGVmYXVsdCBQYW5lbHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlBhbmVsIENvbXBvbmVudCJ9IC5zdWJ0aXRsZT0keyJUaGUgZGVmYXVsdCBwYW5lbCB2YXJpYW50IHdpdGggc2hhZGNuLWluc3BpcmVkIHN0eWxpbmcifT4KICAgICAgICA8cD5UaGUgcGFuZWwgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgZm9sbG93cyB0aGUgdGhlbWUgYW5kIHByb3ZpZGVzIGNvbnNpc3RlbnQgc3R5bGluZyBmb3IgZ3JvdXBlZCBjb250ZW50LjwvcD4KICAgICAgICA8cD5JdCdzIHBlcmZlY3QgZm9yIGNyZWF0aW5nIHNlY3Rpb25zIGluIHlvdXIgYXBwbGljYXRpb24gd2l0aCBwcm9wZXIgc3BhY2luZyBhbmQgYm9yZGVycy48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBPdmVydmlldyJ9IC5zdWJ0aXRsZT0keyJLZXkgY2FwYWJpbGl0aWVzIn0+CiAgICAgICAgICA8cD5HcmlkIGxheW91dHMgd29yayBncmVhdCB3aXRoIHBhbmVscyBmb3IgY3JlYXRpbmcgZGFzaGJvYXJkcyBhbmQgZmVhdHVyZSBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8ZGVlcy1idXR0b24+TGVhcm4gTW9yZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJRdWljayBBY3Rpb25zIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiB0YXNrcyJ9PgogICAgICAgICAgPHA+RWFjaCBwYW5lbCBtYWludGFpbnMgY29uc2lzdGVudCBzcGFjaW5nIGFuZCBzdHlsaW5nIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5HZXQgU3RhcnRlZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgVmFyaWFudHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRlZmF1bHQgVmFyaWFudCJ9IC52YXJpYW50PSR7ImRlZmF1bHQifT4KICAgICAgICA8cD5UaGUgZGVmYXVsdCB2YXJpYW50IGhhcyBhIHdoaXRlIGJhY2tncm91bmQsIHN1YnRsZSBib3JkZXIsIGFuZCBtaW5pbWFsIHNoYWRvdy4gSXQncyB0aGUgc3RhbmRhcmQgY2hvaWNlIGZvciBtb3N0IGNvbnRlbnQuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJkZWZhdWx0IjwvY29kZT4gb3Igb21pdCB0aGUgdmFyaWFudCBwcm9wZXJ0eS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJPdXRsaW5lIFZhcmlhbnQifSAuc3VidGl0bGU9JHsiVHJhbnNwYXJlbnQgYmFja2dyb3VuZCB3aXRoIGJvcmRlciJ9IC52YXJpYW50PSR7Im91dGxpbmUifT4KICAgICAgICA8cD5UaGUgb3V0bGluZSB2YXJpYW50IHJlbW92ZXMgdGhlIGJhY2tncm91bmQgY29sb3IgYW5kIHNoYWRvdywga2VlcGluZyBvbmx5IHRoZSBib3JkZXIuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJvdXRsaW5lIjwvY29kZT4gZm9yIGEgbGlnaHRlciB2aXN1YWwgd2VpZ2h0LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikdob3N0IFZhcmlhbnQifSAuc3VidGl0bGU9JHsiTWluaW1hbCBzdHlsaW5nIGZvciBzdWJ0bGUgc2VjdGlvbnMifSAudmFyaWFudD0keyJnaG9zdCJ9PgogICAgICAgIDxwPlRoZSBnaG9zdCB2YXJpYW50IGhhcyBubyBib3JkZXIgb3IgYmFja2dyb3VuZCBieSBkZWZhdWx0LCBvbmx5IHNob3dpbmcgYSBzdWJ0bGUgYmFja2dyb3VuZCBvbiBob3Zlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Imdob3N0IjwvY29kZT4gZm9yIHRoZSBtb3N0IG1pbmltYWwgYXBwZWFyYW5jZS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgU2l6ZXM8L2gyPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC0zY29sIj4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU21hbGwgUGFuZWwifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+Q29tcGFjdCBwYWRkaW5nIGZvciBkZW5zZSBsYXlvdXRzLjwvcD4KICAgICAgICAgIDxwPlVzZSA8Y29kZT5zaXplPSJzbSI8L2NvZGU+PC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTWVkaXVtIFBhbmVsIn0gLnNpemU9JHsibWQifT4KICAgICAgICAgIDxwPkRlZmF1bHQgc2l6ZSB3aXRoIGJhbGFuY2VkIHNwYWNpbmcuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9Im1kIjwvY29kZT4gb3Igb21pdC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYXJnZSBQYW5lbCJ9IC5zaXplPSR7ImxnIn0+CiAgICAgICAgICA8cD5HZW5lcm91cyBwYWRkaW5nIGZvciBwcm9taW5lbnQgc2VjdGlvbnMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9ImxnIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q29tcGxleCBFeGFtcGxlczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlBhbmVscyB3b3JrIGdyZWF0IGZvciBvcmdhbml6aW5nIGZvcm0gc2VjdGlvbnMifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUHJvamVjdCBOYW1lIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJEZXNjcmlwdGlvbiJ9IC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duIAogICAgICAgICAgICAubGFiZWw9JHsiQ2F0ZWdvcnkifSAKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJXZWIgRGV2ZWxvcG1lbnQiLCBrZXk6ICJ3ZWIiIH0sCiAgeyBvcHRpb246ICJNb2JpbGUgQXBwIiwga2V5OiAibW9iaWxlIiB9LAogIHsgb3B0aW9uOiAiRGVza3RvcCBTb2Z0d2FyZSIsIGtleTogImRlc2t0b3AiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5DcmVhdGUgUHJvamVjdDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbHMifSAuc3VidGl0bGU9JHsiUGFuZWxzIGNhbiBiZSBuZXN0ZWQgZm9yIGhpZXJhcmNoaWNhbCBvcmdhbml6YXRpb24ifT4KICAgICAgICA8cD5Zb3UgY2FuIG5lc3QgcGFuZWxzIHRvIGNyZWF0ZSBtb3JlIGNvbXBsZXggbGF5b3V0czo8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbCAxIn0gLnZhcmlhbnQ9JHsib3V0bGluZSJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5UaGlzIGlzIGEgbmVzdGVkIHBhbmVsIHdpdGggb3V0bGluZSB2YXJpYW50IGFuZCBzbWFsbCBzaXplLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbCAyIn0gLnZhcmlhbnQ9JHsiZ2hvc3QifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+VGhpcyBpcyBhbm90aGVyIG5lc3RlZCBwYW5lbCB3aXRoIGdob3N0IHZhcmlhbnQuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5VbnRpdGxlZCBQYW5lbHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWw+CiAgICAgICAgPHA+UGFuZWxzIHdvcmsgZ3JlYXQgZXZlbiB3aXRob3V0IGEgdGl0bGUgZm9yIHNpbXBsZSBjb250ZW50IGdyb3VwaW5nLjwvcD4KICAgICAgICA8cD5UaGV5IHByb3ZpZGUgdmlzdWFsIHNlcGFyYXRpb24gYW5kIGNvbnNpc3RlbnQgcGFkZGluZyB0aHJvdWdob3V0IHlvdXIgaW50ZXJmYWNlLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgIDxkZWVzLXBhbmVsIC52YXJpYW50PSR7Im91dGxpbmUifT4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luLXRvcDogMDsiPkN1c3RvbSBDb250ZW50PC9oND4KICAgICAgICAgIDxwPllvdSBjYW4gYWRkIHlvdXIgb3duIGhlYWRpbmdzIGFuZCBzdHJ1Y3R1cmUgd2l0aGluIHVudGl0bGVkIHBhbmVscy48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC52YXJpYW50PSR7Imdob3N0In0+CiAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbi10b3A6IDA7Ij5NaW5pbWFsIFN0eWxlPC9oND4KICAgICAgICAgIDxwPkdob3N0IHBhbmVscyB3aXRob3V0IHRpdGxlcyBjcmVhdGUgdmVyeSBzdWJ0bGUgY29udGVudCBzZWN0aW9ucy48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGZvbnRzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZWlzdFNhbnNGb250ID0gIkdlaXN0IFNhbnMiOwp2YXIgaW50ZWxPbmVNb25vRm9udCA9ICJJbnRlbCBPbmUgTW9ubyI7CnZhciBnZWlzdEZvbnRGYW1pbHkgPSBgJyR7Z2Vpc3RTYW5zRm9udH0nLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCAnT3h5Z2VuJywgJ1VidW50dScsICdDYW50YXJlbGwnLCAnRmlyYSBTYW5zJywgJ0Ryb2lkIFNhbnMnLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmYDsKdmFyIG1vbm9Gb250RmFtaWx5ID0gYCcke2ludGVsT25lTW9ub0ZvbnR9JywgJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsICdGaXJhIE1vbm8nLCAnRHJvaWQgU2FucyBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlYDsKdmFyIGNzc0dlaXN0Rm9udEZhbWlseSA9IHIoZ2Vpc3RGb250RmFtaWx5KTsKdmFyIGNzc01vbm9Gb250RmFtaWx5ID0gcihtb25vRm9udEZhbWlseSk7CnZhciBjYWxTYW5zRm9udCA9ICJDYWwgU2FucyI7CnZhciBjYWxTYW5zRm9udEZhbWlseSA9IGAnJHtjYWxTYW5zRm9udH0nLCAke2dlaXN0Rm9udEZhbWlseX1gOwp2YXIgY3NzQ2FsU2Fuc0ZvbnRGYW1pbHkgPSByKGNhbFNhbnNGb250RmFtaWx5KTsKdmFyIHJvYm90b1NsYWJGb250ID0gIlJvYm90byBTbGFiIjsKdmFyIHJvYm90b1NsYWJGb250RmFtaWx5ID0gYCcke3JvYm90b1NsYWJGb250fScsIEdlb3JnaWEsIHNlcmlmYDsKdmFyIGNzc1JvYm90b1NsYWJGb250RmFtaWx5ID0gcihyb2JvdG9TbGFiRm9udEZhbWlseSk7CnZhciBiYXNlRm9udFN0eWxlcyA9IHIoYAogIGZvbnQtZmFtaWx5OiAke2dlaXN0Rm9udEZhbWlseX07CiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjdjExJywgJ3RudW0nLCAnY3YwNScgMTsKYCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQYW5lbCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFuZWwiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90aXRsZV9kZWNvcmF0b3JzOwogIGxldCBfdGl0bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VidGl0bGVfZGVjb3JhdG9yczsKICBsZXQgX3N1YnRpdGxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VidGl0bGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhcmlhbnRfZGVjb3JhdG9yczsKICBsZXQgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YXJpYW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9yczsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BhbmVsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RpdGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc3VidGl0bGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YXJpYW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3RpdGxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpdGxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aXRsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aXRsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGl0bGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc3VidGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1YnRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1YnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWJ0aXRsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWJ0aXRsZV9pbml0aWFsaXplcnMsIF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF92YXJpYW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhcmlhbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhcmlhbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFyaWFudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFyaWFudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YXJpYW50X2luaXRpYWxpemVycywgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ1bkFmdGVyUmVuZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydW5BZnRlclJlbmRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ydW5BZnRlclJlbmRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnVuQWZ0ZXJSZW5kZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQYW5lbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzY7CiAgICAjdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3RpdGxlX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHRpdGxlKCkgewogICAgICByZXR1cm4gdGhpcy4jdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aXRsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc3VidGl0bGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHN1YnRpdGxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWJ0aXRsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YXJpYW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc3VidGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF92YXJpYW50X2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdmFyaWFudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YXJpYW50KHZhbHVlMikgewogICAgICB0aGlzLiN2YXJpYW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgIm1kIikpOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgcnVuQWZ0ZXJSZW5kZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJ1bkFmdGVyUmVuZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBkZWZhdWx0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJkZWZhdWx0Il0pIHsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCBoc2woMCAwJSAwJSAvIDAuMDUpOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBvdXRsaW5lICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJvdXRsaW5lIl0pIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBnaG9zdCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICB9CgogICAgICAvKiBTaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXI6ZW1wdHkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFRpdGxlIHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBtYXJnaW46IDRweCAwIDAgMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTdWJ0aXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgODQuOSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CgogICAgICAvKiBDb250ZW50IHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemU9ImxnIl0pIC5jb250ZW50IHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgIH0KCiAgICAgIC8qIFJlbW92ZSBtYXJnaW5zIGZyb20gZmlyc3QgYW5kIGxhc3QgY2hpbGRyZW4gKi8KICAgICAgLmNvbnRlbnQgOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzIGZvciBkZWZhdWx0IHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXTpob3ZlcikgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3Igb3V0bGluZSB2YXJpYW50ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJvdXRsaW5lIl06aG92ZXIpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDcuOCUpIil9OwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGdob3N0IHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Imdob3N0Il06aG92ZXIpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGVzICovCiAgICAgIDpob3N0KDpmb2N1cy13aXRoaW4pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLyogTmVzdGVkIHBhbmVscyBzcGFjaW5nICovCiAgICAgIDo6c2xvdHRlZChkZWVzLXBhbmVsKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWw6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgJHt0aGlzLnRpdGxlID8gYjJgPGgzIGNsYXNzPSJ0aXRsZSI+JHt0aGlzLnRpdGxlfTwvaDM+YCA6ICIifQogICAgICAgICR7dGhpcy5zdWJ0aXRsZSA/IGIyYDxwIGNsYXNzPSJzdWJ0aXRsZSI+JHt0aGlzLnN1YnRpdGxlfTwvcD5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMucnVuQWZ0ZXJSZW5kZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1BhbmVsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMjsKdmFyIGdlbmVyYXRlQ3B1Q29yZXMgPSAoY291bnQyKSA9PiB7CiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50MiB9LCAoXzQsIGkxMSkgPT4gKHsKICAgIGlkOiBpMTEsCiAgICB1c2FnZTogTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKSwKICAgIGxhYmVsOiBgJHtpMTF9YAogIH0pKTsKfTsKdmFyIGRlbW9GdW5jNyA9ICgpID0+IHsKICByZXR1cm4gYjIoX2EyIHx8IChfYTIgPSBfX3RlbXBsYXRlKFsiXG4gIDxkZWVzLWRlbW93cmFwcGVyPlxuICAgIDxzdHlsZT5cbiAgICAgICIsICdcbiAgICA8L3N0eWxlPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5ncmlkQWN0aW9ucz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBpZD0iYWN0aW9uLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6ICcsICI7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xvcjogIiwgJzsiPlxuICAgICAgICAgIDxlbT5DbGljayBvbiB0aWxlIGFjdGlvbnMgb3IgZ3JpZCBhY3Rpb25zIHRvIHNlZSB0aGUgcmVzdWx0Li4uPC9lbT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgJ1xuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkNvbmZpZ3VyYXRpb24gT3B0aW9uczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLWRlc2NyaXB0aW9uIj5cbiAgICAgICAgICAgICAgRWFjaCB0aWxlIHR5cGUgc3VwcG9ydHMgZGlmZmVyZW50IHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TnVtYmVyOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgY29sb3IsIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5HYXVnZTo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIGdhdWdlT3B0aW9ucyAobWluLCBtYXgsIHRocmVzaG9sZHMpPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5QZXJjZW50YWdlOjwvc3Ryb25nPiB2YWx1ZSAoMC0xMDApLCBjb2xvciwgZGVzY3JpcHRpb248L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlRyZW5kOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgdHJlbmREYXRhIGFycmF5LCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGV4dDo8L3N0cm9uZz4gdmFsdWUgKHN0cmluZyksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+Q29tcGFjdCBMYXlvdXQgKDE4MHB4IHRpbGVzKTwvaDQ+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDI0cHggMCAxNnB4IDA7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsiPlNwYWNpb3VzIExheW91dCAoMzIwcHggdGlsZXMpPC9oND5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICBpZD0iY3B1LWNvcmVzLWdyaWQiXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAuZ3JpZEFjdGlvbnM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1ncmlkIlxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLmdyaWRBY3Rpb25zPSIsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrIj4nLCAiPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgYAogICAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWNvbmZpZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+UGFydGl0aW9uIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnVzZWQ6PC9zdHJvbmc+IFVzZWQgc3BhY2UgaW4gYnl0ZXMgKGF1dG8tZm9ybWF0dGVkKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnRvdGFsOjwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLmZpbGVzeXN0ZW06PC9zdHJvbmc+IEZpbGVzeXN0ZW0gdHlwZSAoZXh0NCwgeGZzLCBudGZzKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLm1vdW50UG9pbnQ6PC9zdHJvbmc+IE1vdW50IHBvaW50IHBhdGggKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICBDb2xvciB0aHJlc2hvbGRzOiBOb3JtYWwgKCZsdDs3NSUpLCBXYXJuaW5nICg3NS05MCUpLCBDcml0aWNhbCAoJmd0OzkwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5EaXNrIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5jYXBhY2l0eTo8L3N0cm9uZz4gVG90YWwgY2FwYWNpdHkgaW4gYnl0ZXM8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEubW9kZWw6PC9zdHJvbmc+IERpc2sgbW9kZWwgbmFtZSAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLnR5cGU6PC9zdHJvbmc+IERpc2sgdHlwZTogJ3NzZCcsICdoZGQnLCBvciAnbnZtZSc8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaW9wczo8L3N0cm9uZz4gUmVhZC93cml0ZSBJT1BTIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaGVhbHRoOjwvc3Ryb25nPiBIZWFsdGggcGVyY2VudGFnZSAwLTEwMCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIEhlYWx0aCB0aHJlc2hvbGRzOiBHb29kICg3MC0xMDAlKSwgV2FybmluZyAoMzAtNzAlKSwgQ3JpdGljYWwgKCZsdDszMCUpCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgIC8vIENsZWFudXAgbGl2ZSB1cGRhdGVzIG9uIHBhZ2UgdW5sb2FkCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB7CiAgICAgICAgaWYgKCh3aW5kb3cgYXMgYW55KS5saXZlVXBkYXRlSW50ZXJ2YWwpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIDxcL3NjcmlwdD4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRpbGUtY29uZmlnIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctc2VjdGlvbiB7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctZGVzY3JpcHRpb24gewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29kZS1ibG9jayB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIH0KICAgICAgYCwgIjEuIENvbXByZWhlbnNpdmUgRGFzaGJvYXJkIiwgIkZ1bGwtZmVhdHVyZWQgc3RhdHMgZ3JpZCB3aXRoIHZhcmlvdXMgdGlsZSB0eXBlcywgYWN0aW9ucywgYW5kIEx1Y2lkZSBpY29ucyIsIFsKICAgIHsKICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgdGl0bGU6ICJUb3RhbCBSZXZlbnVlIiwKICAgICAgdmFsdWU6IDEyNTQyMCwKICAgICAgdW5pdDogIiQiLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXItc2lnbiIsCiAgICAgIGRlc2NyaXB0aW9uOiAiKzEyLjUlIGZyb20gbGFzdCBtb250aCIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyBEZXRhaWxzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyZW5kaW5nLXVwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIlZpZXdpbmcgcmV2ZW51ZSBkZXRhaWxzOiAkMTI1LDQyMCAoKzEyLjUlKSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFeHBvcnQgRGF0YSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJFeHBvcnRpbmcgcmV2ZW51ZSBkYXRhIHRvIENTVi4uLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAidXNlcnMiLAogICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgIHZhbHVlOiAzODQ3LAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgIGRlc2NyaXB0aW9uOiAiMzI0IG5ldyB0aGlzIHdlZWsiLAogICAgICBhY3Rpb25zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlZpZXcgVXNlciBMaXN0IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiT3BlbmluZyB1c2VyIGxpc3QuLi4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBpZDogImNwdSIsCiAgICAgIHRpdGxlOiAiQ1BVIFVzYWdlIiwKICAgICAgdmFsdWU6IDczLAogICAgICB1bml0OiAiJSIsCiAgICAgIHR5cGU6ICJnYXVnZSIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgbWluOiAwLAogICAgICAgIG1heDogMTAwLAogICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogImhzbCgwIDg0LjIlIDYwLjIlKSIgfQogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzdG9yYWdlIiwKICAgICAgdGl0bGU6ICJTdG9yYWdlIFVzZWQiLAogICAgICB2YWx1ZTogNjUsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgZGVzY3JpcHRpb246ICI2NTAgR0Igb2YgMSBUQiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGF0ZW5jeSIsCiAgICAgIHRpdGxlOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAxNDIsCiAgICAgIHVuaXQ6ICJtcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICB0cmVuZERhdGE6IFsxNTAsIDE0NSwgMTQ4LCAxNDIsIDEzOCwgMTQwLCAxMzUsIDE0NSwgMTQyXSwKICAgICAgZGVzY3JpcHRpb246ICJQOTUiCiAgICB9LAogICAgewogICAgICBpZDogInVwdGltZSIsCiAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgIHZhbHVlOiAiOTkuOTUlIiwKICAgICAgdHlwZTogInRleHQiLAogICAgICBpY29uOiAibHVjaWRlOmNoZWNrLWNpcmNsZSIsCiAgICAgIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiTGFzdCAzMCBkYXlzIgogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlJlZnJlc2giLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpyZWZyZXNoLWN3IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc3RhdHNncmlkIik7CiAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgIGdyaWQuc3R5bGUub3BhY2l0eSA9ICIwLjUiOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICBuYW1lOiAiRXhwb3J0IiwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2hhcmUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJFeHBvcnRpbmcgZGFzaGJvYXJkIHJlcG9ydC4uLiI7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIk9wZW5pbmcgZGFzaGJvYXJkIHNldHRpbmdzLi4uIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCBjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpLCBjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpLCAiMi4gVGlsZSBUeXBlcyIsICJEaWZmZXJlbnQgdmlzdWFsaXphdGlvbiB0eXBlcyBhdmFpbGFibGUgaW4gdGhlIHN0YXRzIGdyaWQiLCBbCiAgICB7CiAgICAgIGlkOiAibnVtYmVyLWV4YW1wbGUiLAogICAgICB0aXRsZTogIk51bWJlciBUaWxlIiwKICAgICAgdmFsdWU6IDQyMTk1LAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmhhc2giLAogICAgICBkZXNjcmlwdGlvbjogIlNpbXBsZSBudW1lcmljIGRpc3BsYXkiCiAgICB9LAogICAgewogICAgICBpZDogImdhdWdlLWV4YW1wbGUiLAogICAgICB0aXRsZTogIkdhdWdlIFRpbGUiLAogICAgICB2YWx1ZTogNjgsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpnYXVnZSIsCiAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgIG1pbjogMCwKICAgICAgICBtYXg6IDEwMCwKICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA1MCwgY29sb3I6ICJoc2woNDUuNCA5My40JSA0Ny41JSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAicGVyY2VudGFnZS1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJQZXJjZW50YWdlIFRpbGUiLAogICAgICB2YWx1ZTogNzgsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpwZXJjZW50IiwKICAgICAgZGVzY3JpcHRpb246ICJQcm9ncmVzcyBiYXIgdmlzdWFsaXphdGlvbiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidHJlbmQtZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiVHJlbmQgVGlsZSIsCiAgICAgIHZhbHVlOiA4OTIsCiAgICAgIHVuaXQ6ICJvcHMvcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLAogICAgICB0cmVuZERhdGE6IFs3MjAsIDc1MCwgNzgwLCA3OTUsIDgxMCwgODM1LCA4NTAsIDg2NSwgODgwLCA4OTJdLAogICAgICBkZXNjcmlwdGlvbjogImF2ZyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidGV4dC1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJUZXh0IFRpbGUiLAogICAgICB2YWx1ZTogIk9wZXJhdGlvbmFsIiwKICAgICAgdHlwZTogInRleHQiLAogICAgICBpY29uOiAibHVjaWRlOmluZm8iLAogICAgICBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICBkZXNjcmlwdGlvbjogIlN0YXR1cyBkaXNwbGF5IgogICAgfQogIF0sIDI4MCwgMTYsICIzLiBHcmlkIENvbmZpZ3VyYXRpb25zIiwgIkRpZmZlcmVudCBsYXlvdXQgb3B0aW9ucyBhbmQgcmVzcG9uc2l2ZSBiZWhhdmlvciIsIFsKICAgIHsgaWQ6ICIxIiwgdGl0bGU6ICJPcmRlcnMiLCB2YWx1ZTogMTU2LCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpzaG9wcGluZy1jYXJ0IiB9LAogICAgeyBpZDogIjIiLCB0aXRsZTogIlJldmVudWUiLCB2YWx1ZTogODQyMCwgdW5pdDogIiQiLCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpkb2xsYXItc2lnbiIgfSwKICAgIHsgaWQ6ICIzIiwgdGl0bGU6ICJVc2VycyIsIHZhbHVlOiA0MjMsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnVzZXJzIiB9LAogICAgeyBpZDogIjQiLCB0aXRsZTogIkdyb3d0aCIsIHZhbHVlOiAxMi41LCB1bml0OiAiJSIsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnRyZW5kaW5nLXVwIiwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9CiAgXSwgMTgwLCAxMiwgWwogICAgewogICAgICBpZDogInNwYWNpb3VzMSIsCiAgICAgIHRpdGxlOiAiTW9udGhseSBSZXZlbnVlIiwKICAgICAgdmFsdWU6IDE4NDUwMCwKICAgICAgdW5pdDogIiQiLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcmVkaXQtY2FyZCIsCiAgICAgIGRlc2NyaXB0aW9uOiAiVG90YWwgcmV2ZW51ZSB0aGlzIG1vbnRoIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzcGFjaW91czIiLAogICAgICB0aXRsZTogIkN1c3RvbWVyIFNhdGlzZmFjdGlvbiIsCiAgICAgIHZhbHVlOiA5NCwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOnNtaWxlIiwKICAgICAgZGVzY3JpcHRpb246ICJCYXNlZCBvbiAxLDIzNCByZXZpZXdzIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzcGFjaW91czMiLAogICAgICB0aXRsZTogIlNlcnZlciBSZXNwb25zZSIsCiAgICAgIHZhbHVlOiA5OCwKICAgICAgdW5pdDogIm1zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICB0cmVuZERhdGE6IFsxMDUsIDEwMiwgMTAwLCA5OSwgOTgsIDk4LCA5NywgOThdLAogICAgICBkZXNjcmlwdGlvbjogImF2ZyByZXNwb25zZSB0aW1lIgogICAgfQogIF0sIDMyMCwgMjAsICI0LiBDUFUgQ29yZXMgVmlzdWFsaXphdGlvbiIsICJWZXJ0aWNhbCBiYXIgdmlzdWFsaXphdGlvbiBmb3IgbXVsdGktY29yZSBDUFUgdXNhZ2Ugd2l0aCBjb2x1bW4gc3Bhbm5pbmciLCBbCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTgiLAogICAgICB0aXRsZTogIkNQVSBDb3JlcyAoOC1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3Jlcyg4KSwKICAgICAgZGVzY3JpcHRpb246ICJJbnRlbCBpNyAtIDggY29yZXMiCiAgICB9LAogICAgewogICAgICBpZDogIm1lbW9yeSIsCiAgICAgIHRpdGxlOiAiTWVtb3J5IFVzYWdlIiwKICAgICAgdmFsdWU6IDY4LAogICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgIGljb246ICJsdWNpZGU6ZGF0YWJhc2UiLAogICAgICBkZXNjcmlwdGlvbjogIjEzLjYgR0Igb2YgMjAgR0IiCiAgICB9LAogICAgewogICAgICBpZDogImNwdS1jb3Jlcy0xNiIsCiAgICAgIHRpdGxlOiAiQ1BVIENvcmVzICgxNi1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygxNiksCiAgICAgIGRlc2NyaXB0aW9uOiAiQU1EIFJ5emVuIDkgLSAxNiBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibmV0d29yayIsCiAgICAgIHRpdGxlOiAiTmV0d29yayBJL08iLAogICAgICB2YWx1ZTogMjQ1LAogICAgICB1bml0OiAiTUIvcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6bmV0d29yayIsCiAgICAgIHRyZW5kRGF0YTogWzIwMCwgMjIwLCAyMzUsIDI0MCwgMjM4LCAyNDVdLAogICAgICBkZXNjcmlwdGlvbjogInRocm91Z2hwdXQiCiAgICB9LAogICAgewogICAgICBpZDogImNwdS1jb3Jlcy0zMiIsCiAgICAgIHRpdGxlOiAiU2VydmVyIENQVSAoMzItY29yZSkiLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogImNwdUNvcmVzIiwKICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICBjb2x1bW5TcGFuOiAzLAogICAgICBjb3Jlc0RhdGE6IGdlbmVyYXRlQ3B1Q29yZXMoMzIpLAogICAgICBkZXNjcmlwdGlvbjogIkFNRCBFUFlDIC0gMzIgY29yZXMiCiAgICB9LAogICAgewogICAgICBpZDogImRpc2siLAogICAgICB0aXRsZTogIkRpc2sgVXNhZ2UiLAogICAgICB2YWx1ZTogNDIsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgZGVzY3JpcHRpb246ICI0MjAgR0Igb2YgMSBUQiIKICAgIH0KICBdLCBbCiAgICB7CiAgICAgIG5hbWU6ICJSYW5kb21pemUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzaHVmZmxlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjcHUtY29yZXMtZ3JpZCIpOwogICAgICAgIGlmICghZ3JpZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB0aWxlcyA9IGdyaWQudGlsZXMubWFwKCh0aWxlKSA9PiB7CiAgICAgICAgICBpZiAodGlsZS50eXBlID09PSAiY3B1Q29yZXMiICYmIHRpbGUuY29yZXNEYXRhKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgLi4udGlsZSwKICAgICAgICAgICAgICBjb3Jlc0RhdGE6IHRpbGUuY29yZXNEYXRhLm1hcCgoY29yZTIpID0+ICh7CiAgICAgICAgICAgICAgICAuLi5jb3JlMiwKICAgICAgICAgICAgICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGlsZTsKICAgICAgICB9KTsKICAgICAgICBncmlkLnRpbGVzID0gdGlsZXM7CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCAiNS4gSW50ZXJhY3RpdmUgRmVhdHVyZXMiLCAiVGlsZXMgd2l0aCBhY3Rpb25zIGFuZCByZWFsLXRpbWUgdXBkYXRlcyIsIFsKICAgIHsKICAgICAgaWQ6ICJsaXZlLWNwdSIsCiAgICAgIHRpdGxlOiAiTGl2ZSBDUFUiLAogICAgICB2YWx1ZTogNDUsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgICBtaW46IDAsCiAgICAgICAgbWF4OiAxMDAsCiAgICAgICAgdGhyZXNob2xkczogWwogICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiaHNsKDAgODQuMiUgNjAuMiUpIiB9CiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImxpdmUtcmVxdWVzdHMiLAogICAgICB0aXRsZTogIlJlcXVlc3RzL3NlYyIsCiAgICAgIHZhbHVlOiA4OTIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICB0cmVuZERhdGE6IFs4NTAsIDg2MCwgODcwLCA4ODAsIDg4NSwgODkwLCA4OTJdCiAgICB9LAogICAgewogICAgICBpZDogImxpdmUtbWVtb3J5IiwKICAgICAgdGl0bGU6ICJNZW1vcnkgVXNhZ2UiLAogICAgICB2YWx1ZTogNjIsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY291bnRlciIsCiAgICAgIHRpdGxlOiAiRXZlbnQgQ291bnRlciIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICBhY3Rpb25zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkluY3JlbWVudCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ludGVyYWN0aXZlLWdyaWQiKTsKICAgICAgICAgICAgaWYgKCFncmlkKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgdGlsZSA9IGdyaWQudGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAiY291bnRlciIpOwogICAgICAgICAgICB0aWxlLnZhbHVlID0gdHlwZW9mIHRpbGUudmFsdWUgPT09ICJudW1iZXIiID8gdGlsZS52YWx1ZSArIDEgOiAxOwogICAgICAgICAgICBncmlkLnRpbGVzID0gWy4uLmdyaWQudGlsZXNdOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlJlc2V0IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnJvdGF0ZS1jY3ciLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0aWxlID0gZ3JpZC50aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJjb3VudGVyIik7CiAgICAgICAgICAgIHRpbGUudmFsdWUgPSAwOwogICAgICAgICAgICBncmlkLnRpbGVzID0gWy4uLmdyaWQudGlsZXNdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXQogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlN0YXJ0IExpdmUgVXBkYXRlcyIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsYXkiLAogICAgICBhY3Rpb246IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCkgewogICAgICAgICAgd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7CiAgICAgICAgICAgIGlmIChncmlkKSB7CiAgICAgICAgICAgICAgY29uc3QgdGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICAgICAgY29uc3QgY3B1VGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtY3B1Iik7CiAgICAgICAgICAgICAgY3B1VGlsZS52YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgY3B1VGlsZS52YWx1ZSArIChNYXRoLnJhbmRvbSgpICogMjAgLSAxMCkpKTsKICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0c1RpbGUgPSB0aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJsaXZlLXJlcXVlc3RzIik7CiAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZXF1ZXN0c1RpbGUudmFsdWUgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiA1MCAtIDI1KTsKICAgICAgICAgICAgICByZXF1ZXN0c1RpbGUudmFsdWUgPSBNYXRoLm1heCg4MDAsIG5ld1ZhbHVlKTsKICAgICAgICAgICAgICByZXF1ZXN0c1RpbGUudHJlbmREYXRhID0gWy4uLnJlcXVlc3RzVGlsZS50cmVuZERhdGEuc2xpY2UoMSksIHJlcXVlc3RzVGlsZS52YWx1ZV07CiAgICAgICAgICAgICAgY29uc3QgbWVtb3J5VGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtbWVtb3J5Iik7CiAgICAgICAgICAgICAgbWVtb3J5VGlsZS52YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgbWVtb3J5VGlsZS52YWx1ZSArIChNYXRoLnJhbmRvbSgpICogMTAgLSA1KSkpOwogICAgICAgICAgICAgIGdyaWQudGlsZXMgPSB0aWxlczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMWUzKTsKICAgICAgICAgIHRoaXMubmFtZSA9ICJTdG9wIExpdmUgVXBkYXRlcyI7CiAgICAgICAgICB0aGlzLmljb25OYW1lID0gImx1Y2lkZTpwYXVzZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgICB3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsID0gbnVsbDsKICAgICAgICAgIHRoaXMubmFtZSA9ICJTdGFydCBMaXZlIFVwZGF0ZXMiOwogICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICJsdWNpZGU6cGxheSI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwgMjUwLCAxNiwgIjYuIENvZGUgRXhhbXBsZSIsICJIb3cgdG8gaW1wbGVtZW50IGEgc3RhdHMgZ3JpZCB3aXRoIFR5cGVTY3JpcHQiLCBgY29uc3QgdGlsZXM6IElTdGF0c1RpbGVbXSA9IFsKICB7CiAgICBpZDogJ3JldmVudWUnLAogICAgdGl0bGU6ICdUb3RhbCBSZXZlbnVlJywKICAgIHZhbHVlOiAxMjU0MjAsCiAgICB1bml0OiAnJCcsCiAgICB0eXBlOiAnbnVtYmVyJywKICAgIGljb246ICdsdWNpZGU6ZG9sbGFyLXNpZ24nLAogICAgZGVzY3JpcHRpb246ICcrMTIuNSUgZnJvbSBsYXN0IG1vbnRoJywKICAgIGFjdGlvbnM6IFsKICAgICAgewogICAgICAgIG5hbWU6ICdWaWV3IERldGFpbHMnLAogICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnRyZW5kaW5nLXVwJywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCdWaWV3IHJldmVudWUgZGV0YWlscycpOwogICAgICAgIH0KICAgICAgfQogICAgXQogIH0sCiAgewogICAgaWQ6ICdjcHUnLAogICAgdGl0bGU6ICdDUFUgVXNhZ2UnLAogICAgdmFsdWU6IDczLAogICAgdW5pdDogJyUnLAogICAgdHlwZTogJ2dhdWdlJywKICAgIGljb246ICdsdWNpZGU6Y3B1JywKICAgIGdhdWdlT3B0aW9uczogewogICAgICBtaW46IDAsCiAgICAgIG1heDogMTAwLAogICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICdoc2woMTQyLjEgNzYuMiUgMzYuMyUpJyB9LAogICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogJ2hzbCg0NS40IDkzLjQlIDQ3LjUlKScgfSwKICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICdoc2woMCA4NC4yJSA2MC4yJSknIH0KICAgICAgXQogICAgfQogIH0KXTsKCi8vIFJlbmRlciB0aGUgc3RhdHMgZ3JpZApodG1sXGAKICA8ZGVlcy1zdGF0c2dyaWQKICAgIC50aWxlcz1cJHt0aWxlc30KICAgIC5taW5UaWxlV2lkdGg9XCR7MjUwfQogICAgLmdhcD1cJHsxNn0KICAgIC5ncmlkQWN0aW9ucz1cJHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAnUmVmcmVzaCcsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaC1jdycsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygnUmVmcmVzaCcpCiAgICAgIH0KICAgIF19CiAgPjwvZGVlcy1zdGF0c2dyaWQ+ClxgO2AsICI3LiBEaXNrICYgU3RvcmFnZSBUaWxlcyIsICJQYXJ0aXRpb24gYW5kIHBoeXNpY2FsIGRpc2sgdmlzdWFsaXphdGlvbiB0aWxlcyIsIFsKICAgIHsKICAgICAgaWQ6ICJyb290LXBhcnRpdGlvbiIsCiAgICAgIHRpdGxlOiAiUm9vdCBQYXJ0aXRpb24iLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogInBhcnRpdGlvbiIsCiAgICAgIGljb246ICJsdWNpZGU6Zm9sZGVyLXJvb3QiLAogICAgICBwYXJ0aXRpb25EYXRhOiB7CiAgICAgICAgdXNlZDogNjk4MzQxNDI1MTUyLAogICAgICAgIC8vIH42NTAgR0IKICAgICAgICB0b3RhbDogMTA3Mzc0MTgyNGUzLAogICAgICAgIC8vIH4xIFRCCiAgICAgICAgZmlsZXN5c3RlbTogImV4dDQiLAogICAgICAgIG1vdW50UG9pbnQ6ICIvIgogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImhvbWUtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJIb21lIFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpob21lIiwKICAgICAgcGFydGl0aW9uRGF0YTogewogICAgICAgIHVzZWQ6IDIxNDc0ODM2NDgwMCwKICAgICAgICAvLyB+MjAwIEdCCiAgICAgICAgdG90YWw6IDUzNjg3MDkxMmUzLAogICAgICAgIC8vIH41MDAgR0IKICAgICAgICBmaWxlc3lzdGVtOiAiZXh0NCIsCiAgICAgICAgbW91bnRQb2ludDogIi9ob21lIgogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImRhdGEtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJEYXRhIFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIsCiAgICAgIHBhcnRpdGlvbkRhdGE6IHsKICAgICAgICB1c2VkOiAxOTMyNzM1MjgzMjAwLAogICAgICAgIC8vIH4xLjggVEIgKDkwJSAtIGNyaXRpY2FsKQogICAgICAgIHRvdGFsOiAyMTQ3NDgzNjQ4ZTMsCiAgICAgICAgLy8gfjIgVEIKICAgICAgICBmaWxlc3lzdGVtOiAieGZzIiwKICAgICAgICBtb3VudFBvaW50OiAiL2RhdGEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibnZtZS1zc2QiLAogICAgICB0aXRsZTogIlByaW1hcnkgTlZNZSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDJlMTIsCiAgICAgICAgLy8gMiBUQgogICAgICAgIG1vZGVsOiAiU2Ftc3VuZyA5OTAgUHJvIiwKICAgICAgICB0eXBlOiAibnZtZSIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogNzQ1MCwKICAgICAgICAgIHdyaXRlOiA2OTAwCiAgICAgICAgfSwKICAgICAgICBoZWFsdGg6IDk4CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAic2F0YS1zc2QiLAogICAgICB0aXRsZTogIlNlY29uZGFyeSBTU0QiLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogImRpc2siLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkaXNrRGF0YTogewogICAgICAgIGNhcGFjaXR5OiAxZTEyLAogICAgICAgIC8vIDEgVEIKICAgICAgICBtb2RlbDogIkNydWNpYWwgTVg1MDAiLAogICAgICAgIHR5cGU6ICJzc2QiLAogICAgICAgIGlvcHM6IHsKICAgICAgICAgIHJlYWQ6IDU2MCwKICAgICAgICAgIHdyaXRlOiA1MTAKICAgICAgICB9LAogICAgICAgIGhlYWx0aDogODUKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJoZGQtc3RvcmFnZSIsCiAgICAgIHRpdGxlOiAiQmFja3VwIEhERCIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6YXJjaGl2ZSIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDhlMTIsCiAgICAgICAgLy8gOCBUQgogICAgICAgIG1vZGVsOiAiU2VhZ2F0ZSBJcm9uV29sZiIsCiAgICAgICAgdHlwZTogImhkZCIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogMjEwLAogICAgICAgICAgd3JpdGU6IDE5NQogICAgICAgIH0sCiAgICAgICAgaGVhbHRoOiA0MgogICAgICB9CiAgICB9CiAgXSwgMjgwLCAxNik7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1iYXNlL2RlZXMtaW5wdXQtYmFzZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwp2YXIgX19lc0RlY29yYXRlMTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRCYXNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xheW91dE1vZGVfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWRfZGVjb3JhdG9yczsKICBsZXQgX2Rpc2FibGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgcmV0dXJuIGNsYXNzIERlZXNJbnB1dEJhc2UgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xheW91dE1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2xheW91dE1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0TW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0TW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0TW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsUG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWxQb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWxQb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycywgX2xhYmVsUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfa2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImtleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAia2V5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoua2V5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2tleV9pbml0aWFsaXplcnMsIF9rZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2Rpc2FibGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXNhYmxlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXNhYmxlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGVzY3JpcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRlc2NyaXB0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRlc2NyaXB0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYXlvdXRNb2RlX2luaXRpYWxpemVycywgImF1dG8iKTsKICAgIC8qKgogICAgICogTGF5b3V0IG1vZGUgZm9yIHRoZSBpbnB1dCBjb21wb25lbnQKICAgICAqIC0gdmVydGljYWw6IFRyYWRpdGlvbmFsIGZvcm0gbGF5b3V0IChsYWJlbCBvbiB0b3ApCiAgICAgKiAtIGhvcml6b250YWw6IElubGluZSBsYXlvdXQgKGxhYmVsIHBvc2l0aW9uIGNvbmZpZ3VyYWJsZSkKICAgICAqIC0gYXV0bzogRGV0ZWN0IGZyb20gcGFyZW50IGNvbnRleHQKICAgICAqLwogICAgZ2V0IGxheW91dE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGF5b3V0TW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGF5b3V0TW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxQb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AiKSk7CiAgICAvKioKICAgICAqIFBvc2l0aW9uIG9mIHRoZSBsYWJlbCByZWxhdGl2ZSB0byB0aGUgaW5wdXQKICAgICAqLwogICAgZ2V0IGxhYmVsUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbFBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFiZWxQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8qKgogICAgICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBpbnB1dHMKICAgICAqLwogICAgZ2V0IGtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2tleV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGtleSh2YWx1ZTIpIHsKICAgICAgdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9rZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlcXVpcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXF1aXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGVzY3JpcHRpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBkZXNjcmlwdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGVzY3JpcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvKioKICAgICAqIENvbW1vbiBzdHlsZXMgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzCiAgICAgKi8KICAgIHN0YXRpYyBnZXQgYmFzZVN0eWxlcygpIHsKICAgICAgcmV0dXJuIFsKICAgICAgICBpYAogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIGNvbnNpc3RlbnQgc3BhY2luZyAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQ6IDhweDsKICAgICAgICAgIC0tZGVlcy1pbnB1dC12ZXJ0aWNhbC1nYXA6IGNhbGModmFyKC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQpICogMik7IC8qIDE2cHggKi8KICAgICAgICAgIC0tZGVlcy1pbnB1dC1ob3Jpem9udGFsLWdhcDogY2FsYyh2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCkgKiAyKTsgLyogMTZweCAqLwogICAgICAgICAgLS1kZWVzLWlucHV0LWxhYmVsLWdhcDogdmFyKC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQpOyAvKiA4cHggKi8KICAgICAgICB9CgogICAgICAgIC8qIERlZmF1bHQgdmVydGljYWwgc3RhY2tpbmcgbW9kZSAoZm9yIGZvcm1zKSAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tZGVlcy1pbnB1dC12ZXJ0aWNhbC1nYXApOwogICAgICAgIH0KCiAgICAgICAgLyogTGFzdCBjaGlsZCBpbiBjb250YWluZXIgc2hvdWxkIGhhdmUgbm8gYm90dG9tIG1hcmdpbiAqLwogICAgICAgIDpob3N0KDpsYXN0LWNoaWxkKSB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLyogSG9yaXpvbnRhbCBsYXlvdXQgbW9kZSAtIGFjdGl2YXRlZCBieSBhdHRyaWJ1dGUgKi8KICAgICAgICA6aG9zdChbbGF5b3V0LW1vZGU9Imhvcml6b250YWwiXSkgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1kZWVzLWlucHV0LWhvcml6b250YWwtZ2FwKTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGF5b3V0LW1vZGU9Imhvcml6b250YWwiXTpsYXN0LWNoaWxkKSB7CiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBBdXRvIG1vZGUgLSBpbmhlcml0IGZyb20gcGFyZW50IGRlZXMtZm9ybSBpZiBwcmVzZW50ICovCgogICAgICAgIC8qIExhYmVsIHBvc2l0aW9uIHZhcmlhdGlvbnMgKi8KICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvOwogICAgICAgICAgZ2FwOiB2YXIoLS1kZWVzLWlucHV0LWxhYmVsLWdhcCk7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249Im5vbmUiXSkgZGVlcy1sYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgYAogICAgICBdOwogICAgfQogICAgLyoqCiAgICAgKiBTdWJqZWN0IGZvciB2YWx1ZSBjaGFuZ2VzIHRoYXQgYWxsIGlucHV0cyBzaG91bGQgaW1wbGVtZW50CiAgICAgKi8KICAgIGNoYW5nZVN1YmplY3QgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgLyoqCiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTQogICAgICogU2V0cyB1cCBsYXlvdXQgbW9kZSBkZXRlY3Rpb24KICAgICAqLwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGV0ZWN0TGF5b3V0TW9kZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBEZXRlY3RzIHRoZSBhcHByb3ByaWF0ZSBsYXlvdXQgbW9kZSBiYXNlZCBvbiBwYXJlbnQgY29udGV4dAogICAgICovCiAgICBkZXRlY3RMYXlvdXRNb2RlKCkgewogICAgICBpZiAodGhpcy5sYXlvdXRNb2RlICE9PSAiYXV0byIpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCB0aGlzLmxheW91dE1vZGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTsKICAgICAgaWYgKHBhcmVudEZvcm0gJiYgcGFyZW50Rm9ybS5oYXNBdHRyaWJ1dGUoImhvcml6b250YWwtbGF5b3V0IikpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCAiaG9yaXpvbnRhbCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsICJ2ZXJ0aWNhbCIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIGF0dHJpYnV0ZSB3aGVuIHByb3BlcnR5IGNoYW5nZXMKICAgICAqLwogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGF5b3V0TW9kZSIpKSB7CiAgICAgICAgdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGFiZWxQb3NpdGlvbiIpKSB7CiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxhYmVsLXBvc2l0aW9uIiwgdGhpcy5sYWJlbFBvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdGFuZGFyZCBtZXRob2QgZm9yIGZyZWV6aW5nIGlucHV0IChkaXNhYmxpbmcpCiAgICAgKi8KICAgIGFzeW5jIGZyZWV6ZSgpIHsKICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICB9CiAgICAvKioKICAgICAqIFN0YW5kYXJkIG1ldGhvZCBmb3IgdW5mcmVlemluZyBpbnB1dCAoZW5hYmxpbmcpCiAgICAgKi8KICAgIGFzeW5jIHVuZnJlZXplKCkgewogICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7CiAgICB9CiAgfTsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjaGVja2JveGVzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LWNoZWNrYm94Iik7CiAgY29uc3Qgc2VsZWN0QWxsQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0LWFsbC1idG4iKTsKICBjb25zdCBjbGVhckFsbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NsZWFyLWFsbC1idG4iKTsKICBpZiAoc2VsZWN0QWxsQnRuICYmIGNsZWFyQWxsQnRuKSB7CiAgICBzZWxlY3RBbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3gpID0+IHsKICAgICAgICBpZiAoIWNoZWNrYm94LmRpc2FibGVkICYmIGNoZWNrYm94LmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpKSB7CiAgICAgICAgICBjaGVja2JveC52YWx1ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY2xlYXJBbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3gpID0+IHsKICAgICAgICBpZiAoIWNoZWNrYm94LmRpc2FibGVkICYmIGNoZWNrYm94LmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpKSB7CiAgICAgICAgICBjaGVja2JveC52YWx1ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9Cn19PgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jaGVja2JveC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhvcml6b250YWwtY2hlY2tib3hlcyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW50ZXJhY3RpdmUtc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZm9ybS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbGlzdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIENoZWNrYm94ZXMifSAuc3VidGl0bGU9JHsiU2ltcGxlIGNoZWNrYm94IGV4YW1wbGVzIHdpdGggdmFyaW91cyBsYWJlbHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkkgYWdyZWUgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsidGVybXMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpYmUgdG8gbmV3c2xldHRlciJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmtleT0keyJuZXdzbGV0dGVyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRW5hYmxlIG5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZWNlaXZlIGVtYWlsIHVwZGF0ZXMgYWJvdXQgeW91ciBhY2NvdW50In0KICAgICAgICAgICAgLmtleT0keyJub3RpZmljYXRpb25zIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJDaGVja2JveCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGNoZWNrYm94IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRlZmF1bHQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNoZWNrZWQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgdW5jaGVja2VkIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBjaGVja2VkIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIGNoZWNrYm94In0gCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsicmVxdWlyZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1jaGVja2JveGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEEifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkEifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQiJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25CIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gRCJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25EIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIFNlbGVjdGlvbiBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiB1c2UgY2FzZSBmb3IgZmVhdHVyZSB0b2dnbGVzIHdpdGggYmF0Y2ggb3BlcmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9InNlbGVjdC1hbGwtYnRuIiB0eXBlPSJzZWNvbmRhcnkiPlNlbGVjdCBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJjbGVhci1hbGwtYnRuIiB0eXBlPSJzZWNvbmRhcnkiPkNsZWFyIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkRhcmsgTW9kZSBTdXBwb3J0In0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUxIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBOb3RpZmljYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUd28tRmFjdG9yIEF1dGhlbnRpY2F0aW9uIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMyJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiQVBJIEFjY2VzcyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlNCJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiQWR2YW5jZWQgQW5hbHl0aWNzIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlNSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByaXZhY3kgU2V0dGluZ3MgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDaGVja2JveGVzIGluIGEgdHlwaWNhbCBmb3JtIGNvbnRleHQifT4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Qcml2YWN5IFByZWZlcmVuY2VzPC9oND4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiU2hhcmUgYW5hbHl0aWNzIGRhdGEifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIZWxwIHVzIGltcHJvdmUgYnkgc2hhcmluZyBhbm9ueW1vdXMgdXNhZ2UgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiUGVyc29uYWxpemVkIHJlY29tbWVuZGF0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkdldCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIGFjdGl2aXR5In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJNYXJrZXRpbmcgY29tbXVuaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBwcm9tb3Rpb25hbCBlbWFpbHMgYW5kIHNwZWNpYWwgb2ZmZXJzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUaGlyZC1wYXJ0eSBpbnRlZ3JhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWxsb3cgYXBwcm92ZWQgcGFydG5lcnMgdG8gYWNjZXNzIHlvdXIgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2hlY2tib3hlcyB0byBzZWUgdmFsdWUgY2hhbmdlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRmVhdHVyZSB0b2dnbGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NoZWNrYm94LW91dHB1dCIpOwogIGlmIChvdXRwdXQgJiYgZXZlbnQuZGV0YWlsKSB7CiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBGZWF0dXJlIGlzICR7aXNDaGVja2VkID8gImVuYWJsZWQiIDogImRpc2FibGVkIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGVidWcgbW9kZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZXZlbnQpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZGVidWctb3V0cHV0Iik7CiAgaWYgKG91dHB1dCAmJiBldmVudC5kZXRhaWwpIHsKICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5nZXRWYWx1ZSgpOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gYERlYnVnIG1vZGU6ICR7aXNDaGVja2VkID8gIk9OIiA6ICJPRkYifWA7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImNoZWNrYm94LW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5GZWF0dXJlIGlzIGRpc2FibGVkPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJkZWJ1Zy1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRlYnVnIG1vZGU6IE9GRjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jaGVja2JveC9kZWVzLWlucHV0LWNoZWNrYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0Q2hlY2tib3ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWNoZWNrYm94IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9kZWNvcmF0b3JzOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0Q2hlY2tib3gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9pbmRldGVybWluYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTQodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNCh0aGlzLCBudWxsLCBfaW5kZXRlcm1pbmF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbmRldGVybWluYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbmRldGVybWluYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluZGV0ZXJtaW5hdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluZGV0ZXJtaW5hdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMsIF9pbmRldGVybWluYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRDaGVja2JveDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jODsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luZGV0ZXJtaW5hdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX2luZGV0ZXJtaW5hdGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGluZGV0ZXJtaW5hdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5kZXRlcm1pbmF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICB0aGlzLmxhYmVsUG9zaXRpb24gPSAicmlnaHQiOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAgICogewogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGhlaWdodDogMThweDsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLmNoZWNrYm94IHsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveDpmb2N1cy12aXNpYmxlIHsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIENoZWNrbWFyayB1c2luZyBMdWNpZGUgaWNvbiBzdHlsZSAqLwogICAgICAgIC5jaGVja2JveCAuY2hlY2ttYXJrIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LnNlbGVjdGVkIC5jaGVja21hcmsgewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveCAuY2hlY2ttYXJrIHN2ZyB7CiAgICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICAgIHN0cm9rZTogd2hpdGU7CiAgICAgICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICAgICAgfQoKICAgICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guZGlzYWJsZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogTGFiZWwgKi8KICAgICAgICAubGFiZWwtY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lci5kaXNhYmxlZDpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIEBjbGljaz0iJHt0aGlzLnRvZ2dsZVNlbGVjdGVkfSI+CiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggJHt0aGlzLnZhbHVlID8gInNlbGVjdGVkIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IiAKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZUtleWRvd259IgogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUgPyBiMmAKICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAgNkw5IDE3TDQgMTIiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgYCA6IHRoaXMuaW5kZXRlcm1pbmF0ZSA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPgogICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01IDEySDE5IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJjaGVja2JveC1sYWJlbCI+JHt0aGlzLmxhYmVsfTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24tdGV4dCI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyB0b2dnbGVTZWxlY3RlZCgpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICB9CiAgICBmb2N1cygpIHsKICAgICAgY29uc3QgY2hlY2tib3hEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoZWNrYm94Iik7CiAgICAgIGlmIChjaGVja2JveERpdikgewogICAgICAgIGNoZWNrYm94RGl2LmZvY3VzKCk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIiAiIHx8IGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RlZCgpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczE1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRDaGVja2JveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGNvbG9ycy5qcwp2YXIgY29sb3JzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY29sb3JzX2V4cG9ydHMsIHsKICBicmlnaHQ6ICgpID0+IGJyaWdodCwKICBkYXJrOiAoKSA9PiBkYXJrCn0pOwp2YXIgZGFyayA9IHsKICBibHVlOiAiIzAwNTBiOSIsCiAgYmx1ZUFjdGl2ZTogIiMwMDY5ZjIiLAogIGJsdWVNdXRlZDogIiMwMTI0NTIiLAogIHRleHQ6ICIjZmZmZmZmIgp9Owp2YXIgYnJpZ2h0ID0gewogIGJsdWU6ICIjMDA1MGI5IiwKICBibHVlQWN0aXZlOiAiIzAwNjlmMiIsCiAgYmx1ZU11dGVkOiAiIzAwNjlmMiIsCiAgdGV4dDogIiMzMzMzMzMiCn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9kYWwvZGVlcy1tb2RhbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gaDMgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBwIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgxNTBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkhlYWRlciBCdXR0b25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIG9wdGlvbmFsIGhlYWRlciBidXR0b25zIGZvciBoZWxwIGFuZCBjbG9zaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIldpdGggSGVscCBCdXR0b24iLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6IGFzeW5jICgpID0+IHsKICAgICAgY29uc3QgaGVscE1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJIZWxwIiwKICAgICAgICB3aWR0aDogInNtYWxsIiwKICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsCiAgICAgICAgc2hvd0hlbHBCdXR0b246IGZhbHNlLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBoZWxwIGNvbnRlbnQgZm9yIHRoZSBtb2RhbC48L3A+CiAgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gcHJvdmlkZSBjb250ZXh0LXNwZWNpZmljIGhlbHAgaGVyZS48L3A+CiAgICAgICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfV0KICAgICAgfSk7CiAgICB9LAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYSBoZWxwIGJ1dHRvbiBpbiB0aGUgaGVhZGVyLiBDbGljayBpdCB0byBzZWUgaGVscCBjb250ZW50LjwvcD4KICAgICAgICAgICAgICA8cD5UaGUgY2xvc2UgYnV0dG9uIGlzIGFsc28gdmlzaWJsZSBieSBkZWZhdWx0LjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiT0siLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5XaXRoIEhlbHAgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJObyBDbG9zZSBCdXR0b24iLAogICAgc2hvd0Nsb3NlQnV0dG9uOiBmYWxzZSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIG5vIGNsb3NlIGJ1dHRvbiBpbiB0aGUgaGVhZGVyLjwvcD4KICAgICAgICAgICAgICA8cD5Zb3UgbXVzdCB1c2UgdGhlIGFjdGlvbiBidXR0b25zIG9yIGNsaWNrIG91dHNpZGUgdG8gY2xvc2UgaXQuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk5vIENsb3NlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQm90aCBCdXR0b25zIiwKICAgIHNob3dIZWxwQnV0dG9uOiB0cnVlLAogICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLAogICAgb25IZWxwOiAoKSA9PiBhbGVydCgiSGVscCBjbGlja2VkISIpLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYm90aCBoZWxwIGFuZCBjbG9zZSBidXR0b25zLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiRG9uZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkJvdGggQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQ2xlYW4gSGVhZGVyIiwKICAgIHNob3dDbG9zZUJ1dHRvbjogZmFsc2UsCiAgICBzaG93SGVscEJ1dHRvbjogZmFsc2UsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGNsZWFuIGhlYWRlciB3aXRoIG5vIGJ1dHRvbnMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkNsZWFuIEhlYWRlcjwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5Nb2RhbCBXaWR0aCBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCB3aWR0aHM6IHNtYWxsLCBtZWRpdW0sIGxhcmdlLCBmdWxsc2NyZWVuLCBvciBjdXN0b20gcGl4ZWwgdmFsdWVzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIlNtYWxsIE1vZGFsIiwKICAgIHdpZHRoOiAic21hbGwiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHNtYWxsIG1vZGFsIHdpdGggYSB3aWR0aCBvZiAzODBweC4gUGVyZmVjdCBmb3Igc2ltcGxlIGNvbmZpcm1hdGlvbnMgb3IgYnJpZWYgbWVzc2FnZXMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJPSyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlNtYWxsIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJNZWRpdW0gTW9kYWwgKERlZmF1bHQpIiwKICAgIHdpZHRoOiAibWVkaXVtIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJVc2VybmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRW1haWwifSAuaW5wdXRUeXBlPSR7ImVtYWlsIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQYXNzd29yZCJ9IC5pbnB1dFR5cGU9JHsicGFzc3dvcmQifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2lnbiBVcCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk1lZGl1bSBNb2RhbDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTGFyZ2UgTW9kYWwiLAogICAgd2lkdGg6ICJsYXJnZSIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8aDQ+V2lkZSBDb250ZW50IEFyZWE8L2g0PgogICAgICAgICAgICAgIDxwPlRoaXMgbGFyZ2UgbW9kYWwgaXMgODAwcHggd2lkZSBhbmQgcGVyZmVjdCBmb3IgZGlzcGxheWluZyBtb3JlIGNvbXBsZXggY29udGVudCBsaWtlIGZvcm1zIHdpdGggbXVsdGlwbGUgY29sdW1ucywgdGFibGVzLCBvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi48L3A+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDE2cHg7IG1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZpcnN0IE5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7Ikxhc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQ29tcGFueSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUG9zaXRpb24ifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2F2ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkxhcmdlIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJGdWxsc2NyZWVuIEVkaXRvciIsCiAgICB3aWR0aDogImZ1bGxzY3JlZW4iLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6IGFzeW5jICgpID0+IHsKICAgICAgYWxlcnQoIkluIGEgcmVhbCBhcHAsIHRoaXMgd291bGQgc2hvdyBlZGl0b3IgZG9jdW1lbnRhdGlvbiIpOwogICAgfSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxoND5GdWxsc2NyZWVuIEV4cGVyaWVuY2Ugd2l0aCBIZWFkZXIgQ29udHJvbHM8L2g0PgogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgdGFrZXMgdXAgYWxtb3N0IHRoZSBlbnRpcmUgdmlld3BvcnQgd2l0aCBhIDIwcHggbWFyZ2luIG9uIGFsbCBzaWRlcy4gVGhlIGhlYWRlciBidXR0b25zIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGZ1bGxzY3JlZW4gbW9kZS48L3A+CiAgICAgICAgICAgICAgPHA+VGhlIGNvbnRlbnQgYXJlYSBjYW4gYmUgYXMgdGFsbCBhcyBuZWVkZWQgYW5kIHdpbGwgc2Nyb2xsIGlmIG5lY2Vzc2FyeS48L3A+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzJhMmEyYSIpfTsgYm9yZGVyLXJhZGl1czogOHB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OSIsICIjNjY2Iil9Ij5MYXJnZSBjb250ZW50IGFyZWE8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIlNhdmUiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5GdWxsc2NyZWVuIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkN1c3RvbSBXaWR0aCAmIENvbnN0cmFpbnRzPC9oMz4KICAgICAgPHA+WW91IGNhbiBhbHNvIHNldCBjdXN0b20gcGl4ZWwgd2lkdGhzIGFuZCBtaW4vbWF4IGNvbnN0cmFpbnRzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIkN1c3RvbSBXaWR0aCAoNzAwcHgpIiwKICAgIHdpZHRoOiA3MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGN1c3RvbSB3aWR0aCBvZiBleGFjdGx5IDcwMCBwaXhlbHMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkN1c3RvbSA3MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBNYXggV2lkdGgiLAogICAgd2lkdGg6ICJsYXJnZSIsCiAgICBtYXhXaWR0aDogNjAwLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBpcyBzZXQgdG8gJ2xhcmdlJyBidXQgY29uc3RyYWluZWQgYnkgYSBtYXhXaWR0aCBvZiA2MDBweC48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk1heCBXaWR0aCA2MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBNaW4gV2lkdGgiLAogICAgd2lkdGg6IDMwMCwKICAgIG1pbldpZHRoOiA0MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIHdpZHRoIGlzIHNldCB0byAzMDBweCBidXQgaGFzIGEgbWluV2lkdGggb2YgNDAwcHgsIHNvIGl0IHdpbGwgYmUgNDAwcHggd2lkZS48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIk9LIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWluIFdpZHRoIDQwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkJ1dHRvbiBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCBidXR0b24gY29uZmlndXJhdGlvbnMgd2l0aCBwcm9wZXIgc3BhY2luZy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJNdWx0aXBsZSBBY3Rpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgZGVtb25zdHJhdGVzIG11bHRpcGxlIGJ1dHRvbnMgd2l0aCBwcm9wZXIgc3BhY2luZyBiZXR3ZWVuIHRoZW0uPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIENoYW5nZXMiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5UaHJlZSBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJTaW5nbGUgQWN0aW9uIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlNvbWV0aW1lcyB5b3UganVzdCBuZWVkIG9uZSBidXR0b24uPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJBY2tub3dsZWRnZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlNpbmdsZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk5vIEFjdGlvbnMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gYm90dG9tIGJ1dHRvbnMuIFVzZSB0aGUgWCBidXR0b24gb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZS48L3A+CiAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OyI+VGhpcyBpcyB1c2VmdWwgZm9yIGluZm9ybWF0aW9uYWwgbW9kYWxzIHRoYXQgZG9uJ3QgcmVxdWlyZSB1c2VyIGFjdGlvbi48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW10KICB9KTsKfX0+Tm8gQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTG9uZyBCdXR0b24gTGFiZWxzIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRlc3RpbmcgYnV0dG9uIGxheW91dCB3aXRoIGxvbmdlciBsYWJlbHMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEaXNjYXJkIEFsbCBDaGFuZ2VzIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2F2ZSBhbmQgQ29udGludWUgRWRpdGluZyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkxvbmcgTGFiZWxzPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlJlc3BvbnNpdmUgQmVoYXZpb3I8L2gzPgogICAgICA8cD5BbGwgbW9kYWxzIGF1dG9tYXRpY2FsbHkgYmVjb21lIGZ1bGwtd2lkdGggb24gbW9iaWxlIGRldmljZXMgKDwgNzY4cHggdmlld3BvcnQgd2lkdGgpIGZvciBiZXR0ZXIgdXNhYmlsaXR5LjwvcD4KICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiUmVzcG9uc2l2ZSBNb2RhbCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIHNob3dIZWxwQnV0dG9uOiB0cnVlLAogICAgb25IZWxwOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCByZXF1ZXN0ZWQgZm9yIHJlc3BvbnNpdmUgbW9kYWwiKSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8cD5SZXNpemUgeW91ciBicm93c2VyIHdpbmRvdyB0byBzZWUgaG93IHRoaXMgbW9kYWwgYWRhcHRzLiBPbiBtb2JpbGUgdmlld3BvcnRzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSB0aGUgZnVsbCB3aWR0aCBtaW51cyBtYXJnaW5zLjwvcD4KICAgICAgICAgICAgPHA+VGhlIGhlYWRlciBidXR0b25zIHJlbWFpbiBhY2Nlc3NpYmxlIGF0IGFsbCB2aWV3cG9ydCBzaXplcy48L3A+CiAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlRlc3QgUmVzcG9uc2l2ZTwvZGVlcy1idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc01vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudU9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVPcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudU9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZHRoX2RlY29yYXRvcnM7CiAgbGV0IF93aWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX21pbldpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dDbG9zZUJ1dHRvbl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb25IZWxwX2RlY29yYXRvcnM7CiAgbGV0IF9vbkhlbHBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9yczsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVGdWxsc2NyZWVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50UGFkZGluZ19kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFBhZGRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50UGFkZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kYWxaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21vZGFsWkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vZGFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2NvbnRlbnRfZGVjb3JhdG9ycyA9IFtyNSh7fSldOwogICAgICBfbWVudU9wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSh7fSldOwogICAgICBfd2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbldpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX29uSGVscF9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9tb2JpbGVGdWxsc2NyZWVuX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbW9kYWxaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9jb250ZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50X2luaXRpYWxpemVycywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWVudU9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudU9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVPcHRpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51T3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51T3B0aW9uc19pbml0aWFsaXplcnMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF93aWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3aWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dpZHRoX2luaXRpYWxpemVycywgX3dpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21heFdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFdpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4V2lkdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWluV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pbldpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbldpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5XaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5XaWR0aF9pbml0aWFsaXplcnMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9zaG93Q2xvc2VCdXR0b25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0Nsb3NlQnV0dG9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93Q2xvc2VCdXR0b24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0Nsb3NlQnV0dG9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q2xvc2VCdXR0b24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9zaG93SGVscEJ1dHRvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93SGVscEJ1dHRvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0hlbHBCdXR0b24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hlbHBCdXR0b24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dIZWxwQnV0dG9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX29uSGVscF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvbkhlbHAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9uSGVscCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vbkhlbHAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm9uSGVscCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vbkhlbHBfaW5pdGlhbGl6ZXJzLCBfb25IZWxwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9iaWxlRnVsbHNjcmVlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibW9iaWxlRnVsbHNjcmVlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVGdWxsc2NyZWVuLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2JpbGVGdWxsc2NyZWVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9jb250ZW50UGFkZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50UGFkZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudFBhZGRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFBhZGRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRQYWRkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRQYWRkaW5nX2luaXRpYWxpemVycywgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21vZGFsWkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1vZGFsWkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RhbFpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2RhbFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubW9kYWxaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNNb2RhbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jOTsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KG9wdGlvbnNBcmcpIHsKICAgICAgY29uc3QgYm9keTMgPSBkb2N1bWVudC5ib2R5OwogICAgICBjb25zdCBtb2RhbCA9IG5ldyBEZWVzTW9kYWwyKCk7CiAgICAgIG1vZGFsLmhlYWRpbmcgPSBvcHRpb25zQXJnLmhlYWRpbmc7CiAgICAgIG1vZGFsLmNvbnRlbnQgPSBvcHRpb25zQXJnLmNvbnRlbnQ7CiAgICAgIG1vZGFsLm1lbnVPcHRpb25zID0gb3B0aW9uc0FyZy5tZW51T3B0aW9uczsKICAgICAgaWYgKG9wdGlvbnNBcmcud2lkdGgpCiAgICAgICAgbW9kYWwud2lkdGggPSBvcHRpb25zQXJnLndpZHRoOwogICAgICBpZiAob3B0aW9uc0FyZy5tYXhXaWR0aCkKICAgICAgICBtb2RhbC5tYXhXaWR0aCA9IG9wdGlvbnNBcmcubWF4V2lkdGg7CiAgICAgIGlmIChvcHRpb25zQXJnLm1pbldpZHRoKQogICAgICAgIG1vZGFsLm1pbldpZHRoID0gb3B0aW9uc0FyZy5taW5XaWR0aDsKICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0Nsb3NlQnV0dG9uICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuc2hvd0Nsb3NlQnV0dG9uID0gb3B0aW9uc0FyZy5zaG93Q2xvc2VCdXR0b247CiAgICAgIGlmIChvcHRpb25zQXJnLnNob3dIZWxwQnV0dG9uICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuc2hvd0hlbHBCdXR0b24gPSBvcHRpb25zQXJnLnNob3dIZWxwQnV0dG9uOwogICAgICBpZiAob3B0aW9uc0FyZy5vbkhlbHApCiAgICAgICAgbW9kYWwub25IZWxwID0gb3B0aW9uc0FyZy5vbkhlbHA7CiAgICAgIGlmIChvcHRpb25zQXJnLm1vYmlsZUZ1bGxzY3JlZW4gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5tb2JpbGVGdWxsc2NyZWVuID0gb3B0aW9uc0FyZy5tb2JpbGVGdWxsc2NyZWVuOwogICAgICBpZiAob3B0aW9uc0FyZy5jb250ZW50UGFkZGluZyAhPT0gdm9pZCAwKQogICAgICAgIG1vZGFsLmNvbnRlbnRQYWRkaW5nID0gb3B0aW9uc0FyZy5jb250ZW50UGFkZGluZzsKICAgICAgbW9kYWwud2luZG93TGF5ZXIgPSBhd2FpdCBEZWVzV2luZG93TGF5ZXIuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgYmx1cjogdHJ1ZQogICAgICB9KTsKICAgICAgbW9kYWwud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgbW9kYWwuZGVzdHJveSgpOwogICAgICB9KTsKICAgICAgYm9keTMuYXBwZW5kKG1vZGFsLndpbmRvd0xheWVyKTsKICAgICAgYm9keTMuYXBwZW5kKG1vZGFsKTsKICAgICAgbW9kYWwubW9kYWxaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKG1vZGFsLCBtb2RhbC5tb2RhbFpJbmRleCk7CiAgICAgIHJldHVybiBtb2RhbDsKICAgIH0KICAgICNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9oZWFkaW5nX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBjb250ZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tZW51T3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgbWVudU9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWVudU9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF93aWR0aF9pbml0aWFsaXplcnMsICJtZWRpdW0iKSk7CiAgICBnZXQgd2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3aWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiN3aWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21heFdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tYXhXaWR0aF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1heFdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5XaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21heFdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWluV2lkdGhfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtaW5XaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0Nsb3NlQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWluV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0Nsb3NlQnV0dG9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0Nsb3NlQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0Nsb3NlQnV0dG9uKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93SGVscEJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93SGVscEJ1dHRvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hlbHBCdXR0b24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb25IZWxwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0hlbHBCdXR0b25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9vbkhlbHBfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBvbkhlbHAoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvbkhlbHBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvbkhlbHAodmFsdWUyKSB7CiAgICAgIHRoaXMuI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZUZ1bGxzY3JlZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tb2JpbGVGdWxsc2NyZWVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtb2JpbGVGdWxsc2NyZWVuKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZUZ1bGxzY3JlZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI21vYmlsZUZ1bGxzY3JlZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50UGFkZGluZ19pbml0aWFsaXplcnMsIDE2KSk7CiAgICBnZXQgY29udGVudFBhZGRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRQYWRkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vZGFsWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudFBhZGRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tb2RhbFpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vZGFsWkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RhbFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgLm1vZGFsQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CiAgICAgIC5tb2RhbCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgwLjk1KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0MHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC8qIFdpZHRoIHZhcmlhdGlvbnMgKi8KICAgICAgLm1vZGFsLndpZHRoLXNtYWxsIHsKICAgICAgICB3aWR0aDogMzgwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1tZWRpdW0gewogICAgICAgIHdpZHRoOiA1NjBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWxhcmdlIHsKICAgICAgICB3aWR0aDogODAwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1mdWxsc2NyZWVuIHsKICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpOwogICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0MHB4KTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCkgIWltcG9ydGFudDsKICAgICAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBBbGxvdyBmdWxsIGhlaWdodCBvbiBtb2JpbGUgd2hlbiBjb250ZW50IG5lZWRzIGl0ICovCiAgICAgICAgLm1vZGFsQ29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5tb2RhbCB7CiAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjBweCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEZ1bGwgc2NyZWVuIG1vZGUgb24gbW9iaWxlICovCiAgICAgICAgLm1vZGFsLm1vYmlsZS1mdWxsc2NyZWVuIHsKICAgICAgICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgICAgICAgaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LWhlaWdodDogMTAwdmggIWltcG9ydGFudDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgfQogICAgICB9CgogICAgICAubW9kYWwuc2hvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsLnNob3cucHJlZGVzdHJveSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkaW5nLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgNDBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzUyNTI1YiIpfTsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjMjU2M2ViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnk6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjMWQ0ZWQ4Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzFkNGVkOCIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3Qgd2lkdGhDbGFzcyA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAic3RyaW5nIiA/IGB3aWR0aC0ke3RoaXMud2lkdGh9YCA6ICIiOwogICAgICBjb25zdCBjdXN0b21XaWR0aCA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAibnVtYmVyIiA/IGAke3RoaXMud2lkdGh9cHhgIDogIiI7CiAgICAgIGNvbnN0IG1heFdpZHRoU3R5bGUgPSB0aGlzLm1heFdpZHRoID8gYCR7dGhpcy5tYXhXaWR0aH1weGAgOiAiIjsKICAgICAgY29uc3QgbWluV2lkdGhTdHlsZSA9IHRoaXMubWluV2lkdGggPyBgJHt0aGlzLm1pbldpZHRofXB4YCA6ICIiOwogICAgICBjb25zdCBtb2JpbGVGdWxsc2NyZWVuQ2xhc3MgPSB0aGlzLm1vYmlsZUZ1bGxzY3JlZW4gPyAibW9iaWxlLWZ1bGxzY3JlZW4iIDogIiI7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7Y3VzdG9tV2lkdGggPyBgLm1vZGFsIHsgd2lkdGg6ICR7Y3VzdG9tV2lkdGh9OyB9YCA6ICIifQogICAgICAgICR7bWF4V2lkdGhTdHlsZSA/IGAubW9kYWwgeyBtYXgtd2lkdGg6ICR7bWF4V2lkdGhTdHlsZX07IH1gIDogIiJ9CiAgICAgICAgJHttaW5XaWR0aFN0eWxlID8gYC5tb2RhbCB7IG1pbi13aWR0aDogJHttaW5XaWR0aFN0eWxlfTsgfWAgOiAiIn0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWxDb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlT3V0c2lkZUNsaWNrfSBzdHlsZT0iei1pbmRleDogJHt0aGlzLm1vZGFsWkluZGV4fSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgJHt3aWR0aENsYXNzfSAke21vYmlsZUZ1bGxzY3JlZW5DbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctdGV4dCI+JHt0aGlzLmhlYWRpbmd9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b25zIj4KICAgICAgICAgICAgICAke3RoaXMuc2hvd0hlbHBCdXR0b24gPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b24iIEBjbGljaz0ke3RoaXMuaGFuZGxlSGVscH0gdGl0bGU9IkhlbHAiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpoZWxwQ2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgJHt0aGlzLnNob3dDbG9zZUJ1dHRvbiA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5kZXN0cm95KCl9IHRpdGxlPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOiAke3RoaXMuY29udGVudFBhZGRpbmd9cHg7Ij4ke3RoaXMuY29udGVudH08L2Rpdj4KICAgICAgICAgICR7dGhpcy5tZW51T3B0aW9ucy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbUJ1dHRvbnMiPgogICAgICAgICAgICAgICR7dGhpcy5tZW51T3B0aW9ucy5tYXAoKGFjdGlvbkFyZywgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQnV0dG9uICR7aW5kZXgyID09PSB0aGlzLm1lbnVPcHRpb25zLmxlbmd0aCAtIDEgPyAicHJpbWFyeSIgOiAiIn0gJHthY3Rpb25BcmcubmFtZSA9PT0gIk9LIiA/ICJvayIgOiAiIn0iIEBjbGljaz0keygpID0+IHsKICAgICAgICBhY3Rpb25BcmcuYWN0aW9uKHRoaXMpOwogICAgICB9fT4ke2FjdGlvbkFyZy5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICB3aW5kb3dMYXllciA9IF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vZGFsWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzApOwogICAgICBjb25zdCBtb2RhbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKTsKICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgYXN5bmMgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50QXJnKSB7CiAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtb2RhbENvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWxDb250YWluZXIiKTsKICAgICAgaWYgKGV2ZW50QXJnLnRhcmdldCA9PT0gbW9kYWxDb250YWluZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1vZGFsIik7CiAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoInByZWRlc3Ryb3kiKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyMDApOwogICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUhlbHAoKSB7CiAgICAgIGlmICh0aGlzLm9uSGVscCkgewogICAgICAgIGF3YWl0IHRoaXMub25IZWxwKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMCA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHsiYSBsYWJlbCJ9PjwvZGVlcy1sYWJlbD4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTGFiZWwgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWxhYmVsIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzTGFiZWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcmVxdWlyZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNih0aGlzLCBudWxsLCBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGVzY3JpcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRlc2NyaXB0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRlc2NyaXB0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE2KHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTGFiZWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxMDsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfZGVzY3JpcHRpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBkZXNjcmlwdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGVzY3JpcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX3JlcXVpcmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByZXF1aXJlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVxdWlyZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5yZXF1aXJlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLmxhYmVsID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj4KICAgICAgICAgICAgICAke3RoaXMubGFiZWx9CiAgICAgICAgICAgICAgJHt0aGlzLnJlcXVpcmVkID8gYjJgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTppbmZvIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IGIyYGB9CiAgICBgOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNMYWJlbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vdmVyc2lvbi5qcwp2YXIgTU9OQUNPX1ZFUlNJT04gPSAiMC41NS4xIjsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL2RlZXMtd29ya3NwYWNlLW1vbmFjby5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VNb25hY28gPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9jb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2xhbmd1YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9maWxlUGF0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50U3ViamVjdF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFN1YmplY3RfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZFdyYXBfZGVjb3JhdG9yczsKICBsZXQgX3dvcmRXcmFwX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZU1vbmFjbzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jb250ZW50X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2NvbnRlbnRTdWJqZWN0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF93b3JkV3JhcF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2NvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9sYW5ndWFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYW5ndWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFuZ3VhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFuZ3VhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhbmd1YWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2ZpbGVQYXRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWxlUGF0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWxlUGF0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfY29udGVudFN1YmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudFN1YmplY3QiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRTdWJqZWN0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRTdWJqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50U3ViamVjdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF93b3JkV3JhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3b3JkV3JhcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZFdyYXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud29yZFdyYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndvcmRXcmFwID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRXcmFwX2luaXRpYWxpemVycywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdvcmtzcGFjZS1tb25hY28+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+YDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiV29ya3NwYWNlIjsKICAgIC8vIFNUQVRJQwogICAgc3RhdGljIG1vbmFjb0RlZmVycmVkOwogICAgLy8gSU5TVEFOQ0UKICAgIGVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCAiZnVuY3Rpb24gaGVsbG8oKSB7XG4JYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xufSIpOwogICAgZ2V0IGNvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2xhbmd1YWdlX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKSk7CiAgICBnZXQgbGFuZ3VhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhbmd1YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9maWxlUGF0aF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZmlsZVBhdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbGVQYXRoKHZhbHVlMikgewogICAgICB0aGlzLiNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRTdWJqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSkpOwogICAgZ2V0IGNvbnRlbnRTdWJqZWN0KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50U3ViamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCAib2ZmIikpOwogICAgZ2V0IHdvcmRXcmFwKCkgewogICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3b3JkV3JhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBpc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgfQoKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOwogICAgICBjb25zdCBtb25hY29DZG5CYXNlID0gYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbW9uYWNvLWVkaXRvckAke01PTkFDT19WRVJTSU9OfWA7CiAgICAgIGlmICghRGVlc1dvcmtzcGFjZU1vbmFjbzIubW9uYWNvRGVmZXJyZWQpIHsKICAgICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCA9IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHttb25hY29DZG5CYXNlfS9taW4vdnMvbG9hZGVyLmpzYDsKICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0VXJsOwogICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1dvcmtzcGFjZU1vbmFjbzIubW9uYWNvRGVmZXJyZWQucHJvbWlzZTsKICAgICAgd2luZG93LnJlcXVpcmUuY29uZmlnKHsKICAgICAgICBwYXRoczogeyB2czogYCR7bW9uYWNvQ2RuQmFzZX0vbWluL3ZzYCB9CiAgICAgIH0pOwogICAgICB3aW5kb3cucmVxdWlyZShbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdLCBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgIGNvbnN0IGluaXRpYWxUaGVtZSA9IGlzQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgICAgbGV0IG1vZGVsID0gbnVsbDsKICAgICAgICBpZiAodGhpcy5maWxlUGF0aCkgewogICAgICAgICAgY29uc3QgdXJpID0gbW9uYWNvSW5zdGFuY2UuVXJpLnBhcnNlKGBmaWxlOi8vJHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuZ2V0TW9kZWwodXJpKTsKICAgICAgICAgIGlmICghbW9kZWwpIHsKICAgICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5jb250ZW50LCB0aGlzLmxhbmd1YWdlLCB1cmkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbW9kZWwuc2V0VmFsdWUodGhpcy5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgZWRpdG9yMiA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGUoY29udGFpbmVyLCB7CiAgICAgICAgICBtb2RlbDogbW9kZWwgfHwgdm9pZCAwLAogICAgICAgICAgdmFsdWU6IG1vZGVsID8gdm9pZCAwIDogdGhpcy5jb250ZW50LAogICAgICAgICAgbGFuZ3VhZ2U6IG1vZGVsID8gdm9pZCAwIDogdGhpcy5sYW5ndWFnZSwKICAgICAgICAgIHRoZW1lOiBpbml0aWFsVGhlbWUsCiAgICAgICAgICB1c2VTaGFkb3dET006IHRydWUsCiAgICAgICAgICBmb250U2l6ZTogMTYsCiAgICAgICAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsCiAgICAgICAgICB3b3JkV3JhcDogdGhpcy53b3JkV3JhcCwKICAgICAgICAgIGhvdmVyOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgIGRlbGF5OiAzMDAsCiAgICAgICAgICAgIHN0aWNreTogdHJ1ZSwKICAgICAgICAgICAgYWJvdmU6IGZhbHNlCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICAgIGVkaXRvcjIudXBkYXRlT3B0aW9ucyh7IHRoZW1lOiBuZXdUaGVtZSB9KTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmVkaXRvckRlZmVycmVkLnJlc29sdmUoZWRpdG9yMik7CiAgICAgIH0pOwogICAgICBjb25zdCBjc3MxMyA9IGF3YWl0IChhd2FpdCBmZXRjaChgJHttb25hY29DZG5CYXNlfS9taW4vdnMvZWRpdG9yL2VkaXRvci5tYWluLmNzc2ApKS50ZXh0KCk7CiAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzczEzOwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kKHN0eWxlRWxlbWVudCk7CiAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KGFzeW5jIChldmVudEFyZykgPT4gewogICAgICAgIGlmICh0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdmFsdWUyID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KHZhbHVlMik7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29udGVudC1jaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHZhbHVlMiwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSk7CiAgICAgIHRoaXMuY29udGVudFN1YmplY3QubmV4dChlZGl0b3IuZ2V0VmFsdWUoKSk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJmaWxlUGF0aCIpICYmIHRoaXMuZmlsZVBhdGgpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgdXJpID0gbW9uYWNvSW5zdGFuY2UuVXJpLnBhcnNlKGBmaWxlOi8vJHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgIGxldCBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5nZXRNb2RlbCh1cmkpOwogICAgICAgIGlmICghbW9kZWwpIHsKICAgICAgICAgIG1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuY29udGVudCwgdGhpcy5sYW5ndWFnZSwgdXJpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG1vZGVsLmdldFZhbHVlKCkgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSB0cnVlOwogICAgICAgICAgICBtb2RlbC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKGN1cnJlbnRNb2RlbD8udXJpLnRvU3RyaW5nKCkgIT09IHVyaS50b1N0cmluZygpKSB7CiAgICAgICAgICBlZGl0b3Iuc2V0TW9kZWwobW9kZWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29udGVudCIpKSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGVkaXRvci5nZXRWYWx1ZSgpOwogICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gdHJ1ZTsKICAgICAgICAgIGVkaXRvci5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImxhbmd1YWdlIikpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgbW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICBpZiAobW9kZWwpIHsKICAgICAgICAgIG1vbmFjb0luc3RhbmNlLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCB0aGlzLmxhbmd1YWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgY29udGVudCBmcm9tIGV4dGVybmFsIHNvdXJjZSB3aXRoIG9wdGlvbmFsIGN1cnNvciBwcmVzZXJ2YXRpb24uCiAgICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBmaWxlIGNvbnRlbnQgY2hhbmdlcyBleHRlcm5hbGx5IChlLmcuLCBmaWxlIGNoYW5nZWQgb24gZGlzaykuCiAgICAgKiBAcGFyYW0gbmV3Q29udGVudCBUaGUgbmV3IGNvbnRlbnQgdG8gc2V0CiAgICAgKiBAcGFyYW0gcHJlc2VydmVDdXJzb3IgV2hldGhlciB0byBwcmVzZXJ2ZSBjdXJzb3Ivc2Nyb2xsIHBvc2l0aW9uIChkZWZhdWx0OiB0cnVlKQogICAgICovCiAgICBhc3luYyBzZXRDb250ZW50RXh0ZXJuYWwobmV3Q29udGVudCwgcHJlc2VydmVDdXJzb3IgPSB0cnVlKSB7CiAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IG5ld0NvbnRlbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVzZXJ2ZUN1cnNvciA/IGVkaXRvci5nZXRQb3NpdGlvbigpIDogbnVsbDsKICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNlbGVjdGlvbnMoKSA6IG51bGw7CiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNjcm9sbFRvcCgpIDogMDsKICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNjcm9sbExlZnQoKSA6IDA7CiAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgIGVkaXRvci5zZXRWYWx1ZShuZXdDb250ZW50KTsKICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgIGlmIChwcmVzZXJ2ZUN1cnNvcikgewogICAgICAgIGlmIChwb3NpdGlvbjMpIHsKICAgICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgICBjb25zdCBsaW5lQ291bnQgPSBtb2RlbD8uZ2V0TGluZUNvdW50KCkgfHwgMTsKICAgICAgICAgIGNvbnN0IGNsYW1wZWRMaW5lID0gTWF0aC5taW4ocG9zaXRpb24zLmxpbmVOdW1iZXIsIGxpbmVDb3VudCk7CiAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbW9kZWw/LmdldExpbmVNYXhDb2x1bW4oY2xhbXBlZExpbmUpIHx8IDE7CiAgICAgICAgICBjb25zdCBjbGFtcGVkQ29sdW1uID0gTWF0aC5taW4ocG9zaXRpb24zLmNvbHVtbiwgbGluZUxlbmd0aCk7CiAgICAgICAgICBlZGl0b3Iuc2V0UG9zaXRpb24oeyBsaW5lTnVtYmVyOiBjbGFtcGVkTGluZSwgY29sdW1uOiBjbGFtcGVkQ29sdW1uIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGVkaXRvci5zZXRTZWxlY3Rpb25zKHNlbGVjdGlvbnMpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVkaXRvci5zZXRTY3JvbGxQb3NpdGlvbih7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9KTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1dvcmtzcGFjZU1vbmFjbzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY29kZS9kZWVzLWlucHV0LWNvZGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBMQU5HVUFHRVMgPSBbCiAgeyBrZXk6ICJ0eXBlc2NyaXB0IiwgbGFiZWw6ICJUeXBlU2NyaXB0IiB9LAogIHsga2V5OiAiamF2YXNjcmlwdCIsIGxhYmVsOiAiSmF2YVNjcmlwdCIgfSwKICB7IGtleTogImpzb24iLCBsYWJlbDogIkpTT04iIH0sCiAgeyBrZXk6ICJodG1sIiwgbGFiZWw6ICJIVE1MIiB9LAogIHsga2V5OiAiY3NzIiwgbGFiZWw6ICJDU1MiIH0sCiAgeyBrZXk6ICJzY3NzIiwgbGFiZWw6ICJTQ1NTIiB9LAogIHsga2V5OiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiB9LAogIHsga2V5OiAieWFtbCIsIGxhYmVsOiAiWUFNTCIgfSwKICB7IGtleTogInhtbCIsIGxhYmVsOiAiWE1MIiB9LAogIHsga2V5OiAic3FsIiwgbGFiZWw6ICJTUUwiIH0sCiAgeyBrZXk6ICJweXRob24iLCBsYWJlbDogIlB5dGhvbiIgfSwKICB7IGtleTogImphdmEiLCBsYWJlbDogIkphdmEiIH0sCiAgeyBrZXk6ICJjc2hhcnAiLCBsYWJlbDogIkMjIiB9LAogIHsga2V5OiAiY3BwIiwgbGFiZWw6ICJDKysiIH0sCiAgeyBrZXk6ICJnbyIsIGxhYmVsOiAiR28iIH0sCiAgeyBrZXk6ICJydXN0IiwgbGFiZWw6ICJSdXN0IiB9LAogIHsga2V5OiAic2hlbGwiLCBsYWJlbDogIlNoZWxsIiB9LAogIHsga2V5OiAicGxhaW50ZXh0IiwgbGFiZWw6ICJQbGFpbiBUZXh0IiB9Cl07CnZhciBEZWVzSW5wdXRDb2RlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1jb2RlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2xhbmd1YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9kZWNvcmF0b3JzOwogIGxldCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGluZU51bWJlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzOwogIGxldCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRDb2RlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbGFuZ3VhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9oZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF93b3JkV3JhcF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3Nob3dMaW5lTnVtYmVyc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9sYW5ndWFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYW5ndWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFuZ3VhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFuZ3VhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhbmd1YWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2hlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oZWlnaHRfaW5pdGlhbGl6ZXJzLCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX3dvcmRXcmFwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRXcmFwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3b3JkV3JhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53b3JkV3JhcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZFdyYXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5lTnVtYmVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0xpbmVOdW1iZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dMaW5lTnVtYmVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmVOdW1iZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xhbmd1YWdlRHJvcGRvd25PcGVuIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xhbmd1YWdlRHJvcGRvd25PcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvcHlTdWNjZXNzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb3B5U3VjY2VzcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb3B5U3VjY2Vzcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29weVN1Y2Nlc3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBfY29weVN1Y2Nlc3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1pbnB1dC1jb2RlCiAgICAgIGxhYmVsPSJUeXBlU2NyaXB0IENvZGUiCiAgICAgIGtleT0iY29kZSIKICAgICAgbGFuZ3VhZ2U9InR5cGVzY3JpcHQiCiAgICAgIGhlaWdodD0iMzAwcHgiCiAgICAgIC52YWx1ZT0keydjb25zdCBncmVldGluZzogc3RyaW5nID0gIkhlbGxvIFdvcmxkIjtcbmNvbnNvbGUubG9nKGdyZWV0aW5nKTsnfQogICAgPjwvZGVlcy1pbnB1dC1jb2RlPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAidHlwZXNjcmlwdCIpKTsKICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9oZWlnaHRfaW5pdGlhbGl6ZXJzLCAiMjAwcHgiKSk7CiAgICBnZXQgaGVpZ2h0KCkgewogICAgICByZXR1cm4gdGhpcy4jaGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3dvcmRXcmFwX2luaXRpYWxpemVycywgIm9mZiIpKTsKICAgIGdldCB3b3JkV3JhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgd29yZFdyYXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0xpbmVOdW1iZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9zaG93TGluZU51bWJlcnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0xpbmVOdW1iZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmVOdW1iZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0xpbmVOdW1iZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0xhbmd1YWdlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfc2hvd0xpbmVOdW1iZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMYW5ndWFnZURyb3Bkb3duT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xhbmd1YWdlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNvcHlTdWNjZXNzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb3B5U3VjY2Vzcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGVkaXRvckVsZW1lbnQgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfY29weVN1Y2Nlc3NfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudG9vbGJhci1sZWZ0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXJpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICBtYXgtaGVpZ2h0OiAyNTBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1pbi13aWR0aDogMTQwcHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUpOwogICAgICB9CgogICAgICAuZWRpdG9yLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuY29kZS1jb250YWluZXIgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IHRoaXMubGFuZ3VhZ2UpIHx8IExBTkdVQUdFU1swXTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLmVkaXRvci13cmFwcGVyIHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7Y3VycmVudExhbmd1YWdlLmxhYmVsfQogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpDaGV2cm9uRG93biJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICR7dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAke0xBTkdVQUdFUy5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IHRoaXMubGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zZWxlY3RMYW5ndWFnZShlMTEsIGxhbmcua2V5KX0KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtsYW5nLmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy53b3JkV3JhcCA9PT0gIm9uIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IldvcmQgV3JhcCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlV29yZFdyYXB9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6V3JhcFRleHQifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuc2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iTGluZSBOdW1iZXJzIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVMaW5lTnVtYmVyc30KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpIYXNoIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuY29weVN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2VzcyA/ICJsdWNpZGU6Q2hlY2siIDogImx1Y2lkZTpDb3B5In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICB0aXRsZT0iRXhwYW5kIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5vcGVuRnVsbHNjcmVlbn0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpNYXhpbWl6ZTIifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbW9uYWNvCiAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgLndvcmRXcmFwPSR7dGhpcy53b3JkV3JhcH0KICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKChuZXdDb250ZW50KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKSB7CiAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW47CiAgICB9CiAgICBoYW5kbGVMYW5ndWFnZUJsdXIoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB9LCAxNTApOwogICAgfQogICAgYXN5bmMgc2VsZWN0TGFuZ3VhZ2UoZTExLCBsYW5ndWFnZUtleSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICB0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKG1vZGVsKSB7CiAgICAgICAgICB3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCBsYW5ndWFnZUtleSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0b2dnbGVXb3JkV3JhcCgpIHsKICAgICAgdGhpcy53b3JkV3JhcCA9IHRoaXMud29yZFdyYXAgPT09ICJvbiIgPyAib2ZmIiA6ICJvbiI7CiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJ3b3JkV3JhcCIsIHRoaXMud29yZFdyYXApOwogICAgfQogICAgdG9nZ2xlTGluZU51bWJlcnMoKSB7CiAgICAgIHRoaXMuc2hvd0xpbmVOdW1iZXJzID0gIXRoaXMuc2hvd0xpbmVOdW1iZXJzOwogICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigibGluZU51bWJlcnMiLCB0aGlzLnNob3dMaW5lTnVtYmVycyA/ICJvbiIgOiAib2ZmIik7CiAgICB9CiAgICBhc3luYyB1cGRhdGVFZGl0b3JPcHRpb24ob3B0aW9uMiwgdmFsdWUyKSB7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IudXBkYXRlT3B0aW9ucyh7IFtvcHRpb24yXTogdmFsdWUyIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjb3B5Q29kZSgpIHsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnZhbHVlKTsKICAgICAgICB0aGlzLmNvcHlTdWNjZXNzID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB9LCAyZTMpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsIGVycik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMudmFsdWUgPSBuZXdDb250ZW50OwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBvcGVuRnVsbHNjcmVlbigpIHsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgbGV0IG1vZGFsRWRpdG9yRWxlbWVudCA9IG51bGw7CiAgICAgIGxldCBtb2RhbExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZTsKICAgICAgbGV0IG1vZGFsV29yZFdyYXAgPSB0aGlzLndvcmRXcmFwOwogICAgICBsZXQgbW9kYWxTaG93TGluZU51bWJlcnMgPSB0aGlzLnNob3dMaW5lTnVtYmVyczsKICAgICAgbGV0IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgbGV0IG1vZGFsQ29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2VMYWJlbCA9ICgpID0+IHsKICAgICAgICBjb25zdCBsYW5nID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UpOwogICAgICAgIHJldHVybiBsYW5nID8gbGFuZy5sYWJlbCA6ICJUeXBlU2NyaXB0IjsKICAgICAgfTsKICAgICAgY29uc3QgdXBkYXRlVG9vbGJhclVJID0gKG1vZGFsMikgPT4gewogICAgICAgIGNvbnN0IHRvb2xiYXIyID0gbW9kYWwyLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgaWYgKCF0b29sYmFyMikKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWJ1dHRvbiBzcGFuIik7CiAgICAgICAgaWYgKGxhbmdCdG4pCiAgICAgICAgICBsYW5nQnRuLnRleHRDb250ZW50ID0gZ2V0TGFuZ3VhZ2VMYWJlbCgpOwogICAgICAgIGNvbnN0IHdyYXBCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICBpZiAod3JhcEJ0bikgewogICAgICAgICAgd3JhcEJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFdvcmRXcmFwID09PSAib24iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7CiAgICAgICAgaWYgKGxpbmVzQnRuKSB7CiAgICAgICAgICBsaW5lc0J0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFNob3dMaW5lTnVtYmVycyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNvcHlCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb25zdCBjb3B5SWNvbiA9IGNvcHlCdG4/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgIGlmIChjb3B5QnRuICYmIGNvcHlJY29uKSB7CiAgICAgICAgICBjb3B5QnRuLmNsYXNzTGlzdC50b2dnbGUoInN1Y2Nlc3MiLCBtb2RhbENvcHlTdWNjZXNzKTsKICAgICAgICAgIGNvcHlJY29uLmljb24gPSBtb2RhbENvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkiOwogICAgICAgIH0KICAgICAgICBjb25zdCBkcm9wZG93biA9IHRvb2xiYXIyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpOwogICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPyAiYmxvY2siIDogIm5vbmUiOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgbW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogdGhpcy5sYWJlbCB8fCAiQ29kZSBFZGl0b3IiLAogICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgY29udGVudFBhZGRpbmc6IDAsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtZHJvcGRvd24gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMTAwJTsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgICAgICBjb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgICAgICB3aWR0aDogMXB4OwogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtnZXRMYW5ndWFnZUxhYmVsKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7TEFOR1VBR0VTLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIGRhdGEtbGFuZz0iJHtsYW5nLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke2xhbmcubGFiZWx9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gd3JhcC1idG4gJHttb2RhbFdvcmRXcmFwID09PSAib24iID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJXb3JkIFdyYXAiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOldyYXBUZXh0In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIGxpbmVzLWJ0biAke21vZGFsU2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJMaW5lIE51bWJlcnMiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkhhc2gifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gY29weS1idG4iIHRpdGxlPSJDb3B5IENvZGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWVkaXRvci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmNvbnRlbnQ9JHtjdXJyZW50VmFsdWV9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke21vZGFsTGFuZ3VhZ2V9CiAgICAgICAgICAgIC53b3JkV3JhcD0ke21vZGFsV29yZFdyYXB9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiU2F2ZSAmIENsb3NlIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICBtb2RhbEVkaXRvckVsZW1lbnQgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgICAgICBpZiAobW9kYWxFZGl0b3JFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgbW9kYWxFZGl0b3JFbGVtZW50ID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IHRvb2xiYXIgPSBtb2RhbC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwtdG9vbGJhciIpOwogICAgICBpZiAodG9vbGJhcikgewogICAgICAgIGNvbnN0IGxhbmdCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24iKTsKICAgICAgICBsYW5nQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbjsKICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGFuZ09wdGlvbnMgPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5sYW5ndWFnZS1vcHRpb24iKTsKICAgICAgICBsYW5nT3B0aW9ucy5mb3JFYWNoKChvcHRpb24yKSA9PiB7CiAgICAgICAgICBvcHRpb24yLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdMYW5nID0gb3B0aW9uMi5kYXRhc2V0Lmxhbmc7CiAgICAgICAgICAgIGlmIChuZXdMYW5nICYmIG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2UgPSBuZXdMYW5nOwogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgICAgd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RlbCwgbmV3TGFuZyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhbmdPcHRpb25zLmZvckVhY2goKG9wdCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIikpOwogICAgICAgICAgICAgIG9wdGlvbjIuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCB3cmFwQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICB3cmFwQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIG1vZGFsV29yZFdyYXAgPSBtb2RhbFdvcmRXcmFwID09PSAib24iID8gIm9mZiIgOiAib24iOwogICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZU9wdGlvbnMoeyB3b3JkV3JhcDogbW9kYWxXb3JkV3JhcCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5saW5lcy1idG4iKTsKICAgICAgICBsaW5lc0J0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICBtb2RhbFNob3dMaW5lTnVtYmVycyA9ICFtb2RhbFNob3dMaW5lTnVtYmVyczsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGVkaXRvci51cGRhdGVPcHRpb25zKHsgbGluZU51bWJlcnM6IG1vZGFsU2hvd0xpbmVOdW1iZXJzID8gIm9uIiA6ICJvZmYiIH0pOwogICAgICAgICAgfQogICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBjb3B5QnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb3B5QnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgIG1vZGFsQ29weVN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBtb2RhbENvcHlTdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IiwgZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gJiYgIWxhbmdCdG4/LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICBpZiAodGhpcy5lZGl0b3JFbGVtZW50KSB7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UudGhlbigoZWRpdG9yKSA9PiB7CiAgICAgICAgICBpZiAoZWRpdG9yLmdldFZhbHVlKCkgIT09IHZhbHVlMikgewogICAgICAgICAgICBlZGl0b3Iuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kYXRlLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVQaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogIGlmIChkYXRlUGlja2VyKSB7CiAgICBkYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQmFzaWMgZGF0ZSBzZWxlY3RlZDoiLCBldmVudC50YXJnZXQudmFsdWUpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIERhdGUgUGlja2VyIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWUifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iU2VsZWN0IERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2hvb3NlIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVUaW1lUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKTsKICBjb25zdCBhcHBvaW50bWVudFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJBcHBvaW50bWVudCJdJyk7CiAgaWYgKGRhdGVUaW1lUGlja2VyKSB7CiAgICBkYXRlVGltZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBjb25zb2xlLmxvZygiMjRoIGZvcm1hdCBkYXRldGltZToiLCB2YWx1ZTIpOwogICAgfSk7CiAgfQogIGlmIChhcHBvaW50bWVudFBpY2tlcikgewogICAgYXBwb2ludG1lbnRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgY29uc29sZS5sb2coIjEyaCBmb3JtYXQgZGF0ZXRpbWU6IiwgdmFsdWUyKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIGFuZCBUaW1lIFNlbGVjdGlvbiJ9IC5zdWJ0aXRsZT0keyJEYXRlIHBpY2tlcnMgd2l0aCB0aW1lIHNlbGVjdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEYXRlICYgVGltZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYm90aCBkYXRlIGFuZCB0aW1lICgyNC1ob3VyIGZvcm1hdCkiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBcHBvaW50bWVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXRlIGFuZCB0aW1lIHdpdGggQU0vUE0gc2VsZWN0b3IgKDE1LW1pbnV0ZSBpbmNyZW1lbnRzKSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjEyaCIKICAgICAgICAgIC5taW51dGVJbmNyZW1lbnQ9JHsxNX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRpbWV6b25lUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgdGltZXpvbmVQaWNrZXJzLmZvckVhY2goKHBpY2tlcikgPT4gewogICAgcGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnNvbGUubG9nKGAke3RhcmdldC5sYWJlbH0gdmFsdWU6YCwgdGFyZ2V0LnZhbHVlKTsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXR0ZWQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJUaW1lem9uZSBTdXBwb3J0In0gLnN1YnRpdGxlPSR7IkRhdGUgYW5kIHRpbWUgc2VsZWN0aW9uIHdpdGggdGltZXpvbmUgYXdhcmVuZXNzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgVGltZSAod2l0aCBUaW1lem9uZSkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZS90aW1lIGFuZCB0aW1lem9uZSBmb3IgdGhlIG1lZXRpbmciCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMjRoIgogICAgICAgICAgdGltZXpvbmU9IkFtZXJpY2EvTmV3X1lvcmsiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJHbG9iYWwgRXZlbnQgU2NoZWR1bGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2NoZWR1bGUgYW4gZXZlbnQgYWNyb3NzIGRpZmZlcmVudCB0aW1lem9uZXMiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgdGltZXpvbmU9IkV1cm9wZS9Mb25kb24iCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MzB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmdXR1cmVEYXRlUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTsKICBpZiAoZnV0dXJlRGF0ZVBpY2tlcikgewogICAgZnV0dXJlRGF0ZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGNvbnN0IGRheXNEaWZmID0gTWF0aC5mbG9vcigoc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAoMWUzICogNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgY29uc29sZS5sb2coYFNlbGVjdGVkIGRhdGUgaXMgJHtkYXlzRGlmZn0gZGF5cyBmcm9tIHRvZGF5YCk7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSArIDkwICogMjQgKiA2MCAqIDYwICogMWUzKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybWF0dGVyczIgPSB7CiAgICAiREQvTU0vWVlZWSI6ICJFdXJvcGVhbiIsCiAgICAiTU0vREQvWVlZWSI6ICJVUyIsCiAgICAiWVlZWS1NTS1ERCI6ICJJU08iCiAgfTsKICBjb25zdCBkYXRlUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgZGF0ZVBpY2tlcnMuZm9yRWFjaCgocGlja2VyKSA9PiB7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIEZvcm1hdHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGRhdGUgZGlzcGxheSBmb3JtYXRzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IkV1cm9wZWFuIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iREQvTU0vWVlZWSIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJVUyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9Ik1NL0REL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iSVNPIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iWVlZWS1NTS1ERCIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByZXF1aXJlZFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyW3JlcXVpcmVkXSIpOwogIGlmIChyZXF1aXJlZFBpY2tlcikgewogICAgcmVxdWlyZWRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc3QgcGlja2VyID0gcmVxdWlyZWRQaWNrZXI7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHBpY2tlci5nZXRWYWx1ZSgpOwogICAgICBpZiAoIXZhbHVlMikgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBkYXRlIGZpZWxkIGlzIGVtcHR5Iik7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHVzUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IlVTIENhbGVuZGFyIl0nKTsKICBjb25zdCBldVBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJFVSBDYWxlbmRhciJdJyk7CiAgaWYgKHVzUGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiVVMgQ2FsZW5kYXIgc3RhcnRzIG9uIFN1bmRheSAoMCkiKTsKICB9CiAgaWYgKGV1UGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiRVUgQ2FsZW5kYXIgc3RhcnRzIG9uIE1vbmRheSAoMSkiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBnZW5lcmF0ZVdlZWtlbmRzID0gKCkgPT4gewogICAgY29uc3Qgd2Vla2VuZHMgPSBbXTsKICAgIGNvbnN0IG5vdzIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgICBjb25zdCBtb250aCA9IG5vdzIuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICB3aGlsZSAoZGF0ZS5nZXRNb250aCgpID09PSBtb250aCkgewogICAgICBpZiAoZGF0ZS5nZXREYXkoKSA9PT0gMCB8fCBkYXRlLmdldERheSgpID09PSA2KSB7CiAgICAgICAgd2Vla2VuZHMucHVzaChuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpKTsKICAgICAgfQogICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTsKICAgIH0KICAgIHJldHVybiB3ZWVrZW5kczsKICB9OwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmRpc2FibGVkRGF0ZXMgPSBnZW5lcmF0ZVdlZWtlbmRzKCk7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEaXNhYmxlZCBEYXRlcyJ9IC5zdWJ0aXRsZT0keyJDYWxlbmRhciB3aXRoIHNwZWNpZmljIGRhdGVzIGRpc2FibGVkICh3ZWVrZW5kcyBpbiBjdXJyZW50IG1vbnRoKSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBdmFpbGFiaWxpdHkgQ2FsZW5kYXIiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV2Vla2VuZHMgYXJlIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBtb250aCIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgY29uc3QgY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTsKICBjb25zdCBjdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgY29uc3Qgc2FtcGxlRXZlbnRzID0gWwogICAgLy8gQ3VycmVudCB3ZWVrIGV2ZW50cwogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0ke3RvZGF5LmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJUZWFtIE1lZXRpbmciLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiAyCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJQcm9qZWN0IERlYWRsaW5lIiwKICAgICAgdHlwZTogIndhcm5pbmciCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJSZWxlYXNlIERheSIsCiAgICAgIHR5cGU6ICJzdWNjZXNzIgogICAgfSwKICAgIHsKICAgICAgZGF0ZTogYCR7Y3VycmVudFllYXJ9LSR7KGN1cnJlbnRNb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0tJHsodG9kYXkuZ2V0RGF0ZSgpICsgNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWAsCiAgICAgIHRpdGxlOiAiVXJnZW50IEZpeCBSZXF1aXJlZCIsCiAgICAgIHR5cGU6ICJlcnJvciIKICAgIH0sCiAgICAvLyBNdWx0aXBsZSBldmVudHMgb24gb25lIGRheQogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyA3KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJNdWx0aXBsZSBFdmVudHMgVG9kYXkiLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiA1CiAgICB9LAogICAgLy8gTmV4dCBtb250aCBldmVudAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0xNWAsCiAgICAgIHRpdGxlOiAiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLAogICAgICB0eXBlOiAiaW5mbyIKICAgIH0KICBdOwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmV2ZW50cyA9IHNhbXBsZUV2ZW50czsKICAgIGNvbnNvbGUubG9nKCJDYWxlbmRhciBldmVudHMgbG9hZGVkOiIsIHNhbXBsZUV2ZW50cyk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZXZlbnQtb3V0cHV0Iik7CiAgaWYgKHBpY2tlciAmJiBvdXRwdXQpIHsKICAgIHBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSB0YXJnZXQudmFsdWU7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gaW5wdXQ/LnZhbHVlIHx8ICJOL0EiOwogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHN0cm9uZz5FdmVudCB0cmlnZ2VyZWQhPC9zdHJvbmc+PGJyPgogICAgICAgICAgICAgIElTTyBWYWx1ZTogJHt2YWx1ZTJ9PGJyPgogICAgICAgICAgICAgIEZvcm1hdHRlZDogJHtmb3JtYXR0ZWRWYWx1ZX08YnI+CiAgICAgICAgICAgICAgRGF0ZSBvYmplY3Q6ICR7ZGF0ZS50b0xvY2FsZVN0cmluZygpfQogICAgICAgICAgICBgOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPGVtPkRhdGUgY2xlYXJlZDwvZW0+IjsKICAgICAgfQogICAgfSk7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIkRhdGVwaWNrZXIgbG9zdCBmb2N1cyIpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGRlbW9uc3RyYXRpb24gb2YgY2hhbmdlIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEZW1vIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBhIGRhdGUgdG8gc2VlIHRoZSBldmVudCBkZXRhaWxzIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJldmVudC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+U2VsZWN0IGEgZGF0ZSB0byBzZWUgZXZlbnQgZGV0YWlscy4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkYXRlcGlja2VyU3R5bGVzID0gWwogIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwgImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsICIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmRheTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5kYXkuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAvKiBFdmVudCBpbmRpY2F0b3JzICovCiAgICAgIC5kYXkuaGFzLWV2ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pbmRpY2F0b3IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QgewogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwgImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsICJoc2woNDUgOTAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Quc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNjklIDQ1JSkiLCAiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBldmVudCBkZXRhaWxzICovCiAgICAgIC5ldmVudC10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA4cHgpOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGF5Lmhhcy1ldmVudDpob3ZlciAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogVGltZSBzZWxlY3RvciAqLwogICAgICAudGltZS1zZWxlY3RvciB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCAiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VwYXJhdG9yIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBidXR0b25zICovCiAgICAgIC5jYWxlbmRhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudG9kYXktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Q6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsICJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJEYXRlcGlja2VyID0gKGNvbXBvbmVudCkgPT4gewogIGNvbnN0IG1vbnRoTmFtZXMgPSBbCiAgICAiSmFudWFyeSIsCiAgICAiRmVicnVhcnkiLAogICAgIk1hcmNoIiwKICAgICJBcHJpbCIsCiAgICAiTWF5IiwKICAgICJKdW5lIiwKICAgICJKdWx5IiwKICAgICJBdWd1c3QiLAogICAgIlNlcHRlbWJlciIsCiAgICAiT2N0b2JlciIsCiAgICAiTm92ZW1iZXIiLAogICAgIkRlY2VtYmVyIgogIF07CiAgY29uc3Qgd2Vla0RheXMgPSBjb21wb25lbnQud2Vla1N0YXJ0c09uID09PSAxID8gWyJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSIsICJTdSJdIDogWyJTdSIsICJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSJdOwogIGNvbnN0IGRheXMyID0gY29tcG9uZW50LmdldERheXNJbk1vbnRoKCk7CiAgY29uc3QgaXNBTSA9IGNvbXBvbmVudC5zZWxlY3RlZEhvdXIgPCAxMjsKICBjb25zdCB0aW1lem9uZXMgPSBjb21wb25lbnQuZ2V0VGltZXpvbmVzKCk7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7Y29tcG9uZW50LmxhYmVsfSAuZGVzY3JpcHRpb249JHtjb21wb25lbnQuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke2NvbXBvbmVudC5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udGFpbmVyIj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBjbGFzcz0iZGF0ZS1pbnB1dCAke2NvbXBvbmVudC5pc09wZW5lZCA/ICJvcGVuIiA6ICIifSIKICAgICAgICAgICAgICAudmFsdWU9JHtjb21wb25lbnQuZm9ybWF0RGF0ZShjb21wb25lbnQudmFsdWUpfQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke2NvbXBvbmVudC5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtjb21wb25lbnQuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7Y29tcG9uZW50LnRvZ2dsZUNhbGVuZGFyfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUtleWRvd259CiAgICAgICAgICAgICAgQGlucHV0PSR7Y29tcG9uZW50LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7Y29tcG9uZW50LmhhbmRsZUlucHV0Qmx1cn0KICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZy1yaWdodDogJHtjb21wb25lbnQudmFsdWUgPyAiNjRweCIgOiAiNDBweCJ9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQudmFsdWUgJiYgIWNvbXBvbmVudC5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJWYWx1ZX0gdGl0bGU9IkNsZWFyIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7Y29tcG9uZW50LmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7Y29tcG9uZW50Lm9wZW5zVG9Ub3AgPyAidG9wIiA6ICJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5wcmV2aW91c01vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvbkxlZnQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vbnRoLXllYXItZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7bW9udGhOYW1lc1tjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKV19ICR7Y29tcG9uZW50LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5uZXh0TW9udGh9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGV2cm9uUmlnaHQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2Vla2RheXMiPgogICAgICAgICAgICAgICAgJHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gYjJgPGRpdiBjbGFzcz0id2Vla2RheSI+JHtkYXl9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2RheXMyLm1hcCgoZGF5KSA9PiB7CiAgICBjb25zdCBpc1RvZGF5MyA9IGNvbXBvbmVudC5pc1RvZGF5KGRheSk7CiAgICBjb25zdCBpc1NlbGVjdGVkID0gY29tcG9uZW50LmlzU2VsZWN0ZWQoZGF5KTsKICAgIGNvbnN0IGlzT3RoZXJNb250aCA9IGRheS5nZXRNb250aCgpICE9PSBjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBjb21wb25lbnQuaXNEaXNhYmxlZChkYXkpOwogICAgY29uc3QgZGF5RXZlbnRzID0gY29tcG9uZW50LmdldEV2ZW50c0ZvckRhdGUoZGF5KTsKICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwOwogICAgY29uc3QgdG90YWxFdmVudENvdW50ID0gZGF5RXZlbnRzLnJlZHVjZSgoc3VtLCBldmVudCkgPT4gc3VtICsgKGV2ZW50LmNvdW50IHx8IDEpLCAwKTsKICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRheSAke2lzT3RoZXJNb250aCA/ICJvdGhlci1tb250aCIgOiAiIn0gJHtpc1RvZGF5MyA/ICJ0b2RheSIgOiAiIn0gJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzRXZlbnRzID8gImhhcy1ldmVudCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiAhaXNEaXNhYmxlZCAmJiBjb21wb25lbnQuc2VsZWN0RGF0ZShkYXkpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICR7ZGF5LmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7aGFzRXZlbnRzID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICR7dG90YWxFdmVudENvdW50ID4gMyA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke3RvdGFsRXZlbnRDb3VudH08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWluZGljYXRvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50cy5zbGljZSgwLCAzKS5tYXAoKGV2ZW50KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZG90ICR7ZXZlbnQudHlwZSB8fCAiaW5mbyJ9Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50c1swXS50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXlFdmVudHNbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RvdGFsRXZlbnRDb3VudCA+IDEgPyBiMmAgKCske3RvdGFsRXZlbnRDb3VudCAtIDF9IG1vcmUpYCA6ICIifQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGA7CiAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5lbmFibGVUaW1lID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3Rvci10aXRsZSI+VGltZTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLWlucHV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IChjb21wb25lbnQuc2VsZWN0ZWRIb3VyID09PSAwID8gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyID4gMTIgPyBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIC0gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IGNvbXBvbmVudC5oYW5kbGVIb3VySW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iJHtjb21wb25lbnQudGltZUZvcm1hdCA9PT0gIjEyaCIgPyAxIDogMH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7Y29tcG9uZW50LnRpbWVGb3JtYXQgPT09ICIxMmgiID8gMTIgOiAyM30iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1zZXBhcmF0b3IiPjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC5zZWxlY3RlZE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9CiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlTWludXRlSW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke2NvbXBvbmVudC5taW51dGVJbmNyZW1lbnQgfHwgMX0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0tcG0tc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHtpc0FNID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBjb21wb25lbnQuc2V0QU1QTSgiYW0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIEFNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHshaXNBTSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gY29tcG9uZW50LnNldEFNUE0oInBtIil9CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICBQTQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICAgIDwhLS0gVGltZXpvbmUgU2VsZWN0b3IgLS0+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQuZW5hYmxlVGltZXpvbmUgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWV6b25lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3ItdGl0bGUiPlRpbWV6b25lPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRpbWV6b25lLXNlbGVjdCIgCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7Y29tcG9uZW50LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dGltZXpvbmVzLm1hcCgodHopID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHt0ei52YWx1ZX0iID9zZWxlY3RlZD0ke3R6LnZhbHVlID09PSBjb21wb25lbnQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3R6LmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5zZWxlY3RUb2RheX0+CiAgICAgICAgICAgICAgICAgIFRvZGF5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJ9PgogICAgICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2NvbXBvbmVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREYXRlcGlja2VyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzOwogIGxldCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VuYWJsZVRpbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWVGb3JtYXRfZGVjb3JhdG9yczsKICBsZXQgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfZGF0ZUZvcm1hdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkRhdGVfZGVjb3JhdG9yczsKICBsZXQgX21pbkRhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhEYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dlZWtTdGFydHNPbl9kZWNvcmF0b3JzOwogIGxldCBfd2Vla1N0YXJ0c09uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZGVjb3JhdG9yczsKICBsZXQgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2RlY29yYXRvcnM7CiAgbGV0IF90aW1lem9uZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ldmVudHNfZGVjb3JhdG9yczsKICBsZXQgX2V2ZW50c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzT3BlbmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGVfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZpZXdEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREYXRlcGlja2VyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZW5hYmxlVGltZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWludXRlSW5jcmVtZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21pbkRhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhEYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2V2ZW50c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkRGF0ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmlld0RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRNaW51dGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbmFibGVUaW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVuYWJsZVRpbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWVGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGltZUZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGltZUZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lRm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aW1lRm9ybWF0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWludXRlSW5jcmVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW51dGVJbmNyZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWludXRlSW5jcmVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW51dGVJbmNyZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycywgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kYXRlRm9ybWF0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGVGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGVGb3JtYXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGF0ZUZvcm1hdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0ZUZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfbWluRGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5EYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5EYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbkRhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkRhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluRGF0ZV9pbml0aWFsaXplcnMsIF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX21heERhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4RGF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhEYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heERhdGVfaW5pdGlhbGl6ZXJzLCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kaXNhYmxlZERhdGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkRGF0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkRGF0ZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWREYXRlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWREYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZERhdGVzX2luaXRpYWxpemVycywgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndlZWtTdGFydHNPbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2Vla1N0YXJ0c09uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndlZWtTdGFydHNPbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2Vla1N0YXJ0c09uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIF93ZWVrU3RhcnRzT25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lem9uZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW5hYmxlVGltZXpvbmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW5hYmxlVGltZXpvbmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWV6b25lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycywgX2VuYWJsZVRpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWV6b25lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWV6b25lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lem9uZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lem9uZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGltZXpvbmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGltZXpvbmVfaW5pdGlhbGl6ZXJzLCBfdGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZXZlbnRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50c19pbml0aWFsaXplcnMsIF9ldmVudHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9vcGVuc1RvVG9wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5zVG9Ub3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5zVG9Ub3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbnNUb1RvcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgX29wZW5zVG9Ub3BfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfc2VsZWN0ZWREYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkRGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWREYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkRGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWREYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZERhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdmlld0RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld0RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdEYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3RGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3RGF0ZV9pbml0aWFsaXplcnMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZEhvdXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRIb3VyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZEhvdXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRIb3VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZEhvdXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycywgX3NlbGVjdGVkSG91cl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE1pbnV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRNaW51dGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRNaW51dGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkTWludXRlX2luaXRpYWxpemVycywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREYXRlcGlja2VyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVuYWJsZVRpbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlVGltZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW5hYmxlVGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9pbml0aWFsaXplcnMsICIyNGgiKSk7CiAgICBnZXQgdGltZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWludXRlSW5jcmVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBtaW51dGVJbmNyZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW51dGVJbmNyZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbnV0ZUluY3JlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgZGF0ZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkYXRlRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNkYXRlRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW5EYXRlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtaW5EYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1pbkRhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWluRGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21heERhdGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1heERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWF4RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9tYXhEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlzYWJsZWREYXRlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZERhdGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2Vla1N0YXJ0c09uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCB3ZWVrU3RhcnRzT24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIERlZmF1bHQgdG8gTW9uZGF5CiAgICBzZXQgd2Vla1N0YXJ0c09uKHZhbHVlMikgewogICAgICB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgcGxhY2Vob2xkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lem9uZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZW5hYmxlVGltZXpvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVuYWJsZVRpbWV6b25lKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9pbml0aWFsaXplcnMsIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpOwogICAgZ2V0IHRpbWV6b25lKCkgewogICAgICByZXR1cm4gdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lem9uZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZXZlbnRzKCkgewogICAgICByZXR1cm4gdGhpcy4jZXZlbnRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXZlbnRzKHZhbHVlMikgewogICAgICB0aGlzLiNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc09wZW5lZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBzZWxlY3RlZERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZERhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZERhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZpZXdEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWREYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkpOwogICAgZ2V0IHZpZXdEYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkSG91cl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBzZWxlY3RlZEhvdXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEhvdXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkSG91cl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRNaW51dGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkTWludXRlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGRhdGVwaWNrZXJTdHlsZXM7CiAgICBnZXRUaW1lem9uZXMoKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB2YWx1ZTogIlVUQyIsIGxhYmVsOiAiVVRDIChDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFtZXJpY2EvTmV3X1lvcmsiLCBsYWJlbDogIkVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0NoaWNhZ28iLCBsYWJlbDogIkNlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0RlbnZlciIsIGxhYmVsOiAiTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgbGFiZWw6ICJQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSIgfSwKICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9QaG9lbml4IiwgbGFiZWw6ICJBcml6b25hIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0FuY2hvcmFnZSIsIGxhYmVsOiAiQWxhc2thIiB9LAogICAgICAgIHsgdmFsdWU6ICJQYWNpZmljL0hvbm9sdWx1IiwgbGFiZWw6ICJIYXdhaWkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9Mb25kb24iLCBsYWJlbDogIkxvbmRvbiIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL1BhcmlzIiwgbGFiZWw6ICJQYXJpcyIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL0JlcmxpbiIsIGxhYmVsOiAiQmVybGluIiB9LAogICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvTW9zY293IiwgbGFiZWw6ICJNb3Njb3ciIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvRHViYWkiLCBsYWJlbDogIkR1YmFpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBc2lhL0tvbGthdGEiLCBsYWJlbDogIkluZGlhIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvU2hhbmdoYWkiLCBsYWJlbDogIkNoaW5hIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvVG9reW8iLCBsYWJlbDogIlRva3lvIiB9LAogICAgICAgIHsgdmFsdWU6ICJBdXN0cmFsaWEvU3lkbmV5IiwgbGFiZWw6ICJTeWRuZXkiIH0sCiAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvQXVja2xhbmQiLCBsYWJlbDogIkF1Y2tsYW5kIiB9CiAgICAgIF07CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiByZW5kZXJEYXRlcGlja2VyKHRoaXMpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsKICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTsKICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKG5vdzIpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gbm93Mi5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAwOwogICAgICB9CiAgICB9CiAgICBmb3JtYXREYXRlKGlzb1N0cmluZykgewogICAgICBpZiAoIWlzb1N0cmluZykKICAgICAgICByZXR1cm4gIiI7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb1N0cmluZyk7CiAgICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kYXRlRm9ybWF0OwogICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKTsKICAgICAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJZWVlZIiwgeWVhcik7CiAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZIiwgeWVhci5zbGljZSgtMikpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJNTSIsIG1vbnRoKTsKICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgiREQiLCBkYXkpOwogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgIGNvbnN0IGhvdXJzMjQgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICBjb25zdCBob3VyczEyID0gaG91cnMyNCA9PT0gMCA/IDEyIDogaG91cnMyNCA+IDEyID8gaG91cnMyNCAtIDEyIDogaG91cnMyNDsKICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICBjb25zdCBhbXBtID0gaG91cnMyNCA+PSAxMiA/ICJQTSIgOiAiQU0iOwogICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gIjEyaCIpIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczEyfToke21pbnV0ZXN9ICR7YW1wbX1gOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczI0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgICB0aW1lWm9uZU5hbWU6ICJzaG9ydCIsCiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyMi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSAidGltZVpvbmVOYW1lIik7CiAgICAgICAgICBpZiAodHpQYXJ0KSB7CiAgICAgICAgICAgIGZvcm1hdHRlZCArPSBgICR7dHpQYXJ0LnZhbHVlfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0pOwogICAgYXN5bmMgdG9nZ2xlQ2FsZW5kYXIoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IGlucHV0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKTsKICAgICAgICBjb25zdCByZWN0ID0gaW5wdXRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tOwogICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDsKICAgICAgICB0aGlzLm9wZW5zVG9Ub3AgPSBzcGFjZUJlbG93IDwgNDAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93OwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0KICAgIGdldERheXNJbk1vbnRoKCkgewogICAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApOwogICAgICBjb25zdCBkYXlzMiA9IFtdOwogICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMud2Vla1N0YXJ0c09uID09PSAxID8gZmlyc3REYXkuZ2V0RGF5KCkgPT09IDAgPyA2IDogZmlyc3REYXkuZ2V0RGF5KCkgLSAxIDogZmlyc3REYXkuZ2V0RGF5KCk7CiAgICAgIGZvciAobGV0IGkxMSA9IHN0YXJ0T2Zmc2V0OyBpMTEgPiAwOyBpMTEtLSkgewogICAgICAgIGRheXMyLnB1c2gobmV3IERhdGUoeWVhciwgbW9udGgsIDEgLSBpMTEpKTsKICAgICAgfQogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGFzdERheS5nZXREYXRlKCk7IGkxMSsrKSB7CiAgICAgICAgZGF5czIucHVzaChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaTExKSk7CiAgICAgIH0KICAgICAgY29uc3QgcmVtYWluaW5nRGF5cyA9IDQyIC0gZGF5czIubGVuZ3RoOwogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gcmVtYWluaW5nRGF5czsgaTExKyspIHsKICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaTExKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRheXMyOwogICAgfQogICAgaXNUb2RheShkYXRlKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc1NlbGVjdGVkKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc0Rpc2FibGVkKGRhdGUpIHsKICAgICAgaWYgKHRoaXMubWluRGF0ZSkgewogICAgICAgIGNvbnN0IG1pbjMgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpOwogICAgICAgIGlmIChkYXRlIDwgbWluMykKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heERhdGUpIHsKICAgICAgICBjb25zdCBtYXgzID0gbmV3IERhdGUodGhpcy5tYXhEYXRlKTsKICAgICAgICBpZiAoZGF0ZSA+IG1heDMpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkaXNhYmxlZFN0cikgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQyID0gbmV3IERhdGUoZGlzYWJsZWRTdHIpOwogICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgPT09IGRpc2FibGVkMi5nZXREYXRlKCkgJiYgZGF0ZS5nZXRNb250aCgpID09PSBkaXNhYmxlZDIuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRpc2FibGVkMi5nZXRGdWxsWWVhcigpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBnZXRFdmVudHNGb3JEYXRlKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmV2ZW50cyB8fCB0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5kYXRlID09PSBkYXRlU3RyKTsKICAgIH0KICAgIHNlbGVjdERhdGUoZGF0ZSkgewogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBpZiAoIXRoaXMuZW5hYmxlVGltZSkgewogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2VsZWN0VG9kYXkoKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdG9kYXk7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRvZGF5LmdldE1pbnV0ZXMoKTsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyKCkgewogICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgIH0KICAgIHByZXZpb3VzTW9udGgoKSB7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSAtIDEsIDEpOwogICAgfQogICAgbmV4dE1vbnRoKCkgewogICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkgKyAxLCAxKTsKICAgIH0KICAgIGhhbmRsZUhvdXJJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBsZXQgdmFsdWUyID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpIHx8IDA7CiAgICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICIxMmgiKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTIsIHZhbHVlMikpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91ciA+PSAxMiAmJiB2YWx1ZTIgIT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlMiArIDEyOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPCAxMiAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDIzLCB2YWx1ZTIpKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGhhbmRsZU1pbnV0ZUlucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGxldCB2YWx1ZTIgPSBwYXJzZUludChpbnB1dC52YWx1ZSkgfHwgMDsKICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oNTksIHZhbHVlMikpOwogICAgICBpZiAodGhpcy5taW51dGVJbmNyZW1lbnQgJiYgdGhpcy5taW51dGVJbmNyZW1lbnQgPiAxKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5yb3VuZCh2YWx1ZTIgLyB0aGlzLm1pbnV0ZUluY3JlbWVudCkgKiB0aGlzLm1pbnV0ZUluY3JlbWVudDsKICAgICAgfQogICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIHNldEFNUE0ocGVyaW9kKSB7CiAgICAgIGlmIChwZXJpb2QgPT09ICJhbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciAtPSAxMjsKICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICJwbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPCAxMikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICs9IDEyOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgfQogICAgdXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpIHsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVRpbWV6b25lQ2hhbmdlKGUxMSkgewogICAgICBjb25zdCBzZWxlY3QgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnRpbWV6b25lID0gc2VsZWN0LnZhbHVlOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lLAogICAgICAgIHRpbWVab25lTmFtZTogInNob3J0IgogICAgICB9KTsKICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIyLmZvcm1hdFRvUGFydHMoZGF0ZSk7CiAgICAgIGNvbnN0IGRhdGVQYXJ0cyA9IHt9OwogICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7CiAgICAgICAgZGF0ZVBhcnRzW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlOwogICAgICB9KTsKICAgICAgY29uc3QgaXNvU3RyaW5nID0gYCR7ZGF0ZVBhcnRzLnllYXJ9LSR7ZGF0ZVBhcnRzLm1vbnRofS0ke2RhdGVQYXJ0cy5kYXl9VCR7ZGF0ZVBhcnRzLmhvdXJ9OiR7ZGF0ZVBhcnRzLm1pbnV0ZX06JHtkYXRlUGFydHMuc2Vjb25kfWA7CiAgICAgIGNvbnN0IHR6T2Zmc2V0ID0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aGlzLnRpbWV6b25lKTsKICAgICAgcmV0dXJuIGAke2lzb1N0cmluZ30ke3R6T2Zmc2V0fWA7CiAgICB9CiAgICBnZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aW1lem9uZSkgewogICAgICBjb25zdCB0ekRhdGUgPSBuZXcgRGF0ZShkYXRlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IHRpbWV6b25lIH0pKTsKICAgICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogIlVUQyIgfSkpOwogICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gKHR6RGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKSkgLyAoMWUzICogNjApOwogICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0TWludXRlcykgLyA2MCk7CiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAlIDYwOwogICAgICBjb25zdCBzaWduID0gb2Zmc2V0TWludXRlcyA+PSAwID8gIisiIDogIi0iOwogICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgfQogICAgaGFuZGxlS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcigpOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiICYmIHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVmFsdWUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlTWFudWFsSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VNYW51YWxEYXRlKGlucHV0VmFsdWUpOwogICAgICBpZiAocGFyc2VkRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGUudG9JU09TdHJpbmcoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHBhcnNlZERhdGU7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcGFyc2VkRGF0ZS5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZWREYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXRCbHVyKGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgIGlmICghaW5wdXRWYWx1ZSkgewogICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlTWFudWFsRGF0ZShpbnB1dFZhbHVlKTsKICAgICAgaWYgKHBhcnNlZERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBwYXJzZWREYXRlOwogICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHBhcnNlZERhdGUuZ2V0SG91cnMoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gcGFyc2VkRGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTWFudWFsRGF0ZShpbnB1dCkgewogICAgICBpZiAoIWlucHV0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KCIgIik7CiAgICAgIGxldCBkYXRlUGFydCA9IHBhcnRzWzBdOwogICAgICBsZXQgdGltZVBhcnQgPSBwYXJ0c1sxXSB8fCAiIjsKICAgICAgbGV0IHBhcnNlZERhdGUgPSBudWxsOwogICAgICBjb25zdCBpc29NYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezR9KS0oXGR7MSwyfSktKFxkezEsMn0pJC8pOwogICAgICBpZiAoaXNvTWF0Y2gpIHsKICAgICAgICBjb25zdCBbXzQsIHllYXIsIG1vbnRoLCBkYXldID0gaXNvTWF0Y2g7CiAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCBldU1hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTsKICAgICAgICBpZiAoZXVNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBkYXksIG1vbnRoLCB5ZWFyXSA9IGV1TWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCB1c01hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezR9KSQvKTsKICAgICAgICBpZiAodXNNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBtb250aCwgZGF5LCB5ZWFyXSA9IHVzTWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUgfHwgaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRpbWVQYXJ0KSB7CiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdGltZVBhcnQubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTsKICAgICAgICBpZiAodGltZU1hdGNoKSB7CiAgICAgICAgICBjb25zdCBbXzQsIGhvdXJzLCBtaW51dGVzXSA9IHRpbWVNYXRjaDsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91cnMpKTsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZUludChtaW51dGVzKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3Vycyhub3cyLmdldEhvdXJzKCkpOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhub3cyLmdldE1pbnV0ZXMoKSk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRTZWNvbmRzKDApOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWlsbGlzZWNvbmRzKDApOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZWREYXRlOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlMik7CiAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBkYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dERhdGVwaWNrZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvZGVlcy1pbnB1dC10ZXh0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTIgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgY2hhbmdlZCB0bzpgLCBpbnB1dC5nZXRWYWx1ZSgpKTsKICAgIH0pOwogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgbG9zdCBmb2N1c2ApOwogICAgfSk7CiAgfSk7CiAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0icGFzc3dvcmQiXScpOwogIGlmIChwYXNzd29yZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiUGFzc3dvcmQgaW5wdXQgaW5jbHVkZXMgdmlzaWJpbGl0eSB0b2dnbGUiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVGV4dCBJbnB1dHMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgdGV4dCBpbnB1dHMgd2l0aCBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huZG9lIn0KICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huQGV4YW1wbGUuY29tIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiV2Ugd2lsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsIHdpdGggYW55b25lIn0KICAgICAgICAgIC5rZXk9JHsiZW1haWwifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlBhc3N3b3JkIn0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfSAKICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaG9yaXpvbnRhbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgaG9yaXpvbnRhbElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTsKICAgIGNvbnNvbGUubG9nKGBIb3Jpem9udGFsIGlucHV0ICIke2lucHV0LmxhYmVsfSIgZGlzcGxheTpgLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpOwogIH0pOwogIGNvbnN0IGZpcnN0TmFtZUlucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJmaXJzdE5hbWUiXScpOwogIGNvbnN0IGxhc3ROYW1lSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFtrZXk9Imxhc3ROYW1lIl0nKTsKICBpZiAoZmlyc3ROYW1lSW5wdXQgJiYgbGFzdE5hbWVJbnB1dCkgewogICAgY29uc3QgdXBkYXRlRnVsbE5hbWUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZpcnN0TmFtZUlucHV0LmdldFZhbHVlKCk7CiAgICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBjb25zb2xlLmxvZyhgRnVsbCBuYW1lOiAke2ZpcnN0TmFtZX0gJHtsYXN0TmFtZX1gKTsKICAgIH07CiAgICBmaXJzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogICAgbGFzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IGlucHV0LmxhYmVsUG9zaXRpb247CiAgICBjb25zb2xlLmxvZyhgSW5wdXQgIiR7aW5wdXQubGFiZWx9IiBoYXMgbGFiZWwgcG9zaXRpb246ICR7cG9zaXRpb24zfWApOwogIH0pOwogIGNvbnN0IGxlZnRMYWJlbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgnZGVlcy1pbnB1dC10ZXh0W2xhYmVsUG9zaXRpb249ImxlZnQiXScpOwogIGlmIChsZWZ0TGFiZWxJbnB1dHMubGVuZ3RoID4gMCkgewogICAgY29uc29sZS5sb2coYCR7bGVmdExhYmVsSW5wdXRzLmxlbmd0aH0gaW5wdXRzIGhhdmUgbGVmdC1hbGlnbmVkIGxhYmVscyBmb3IgaW5saW5lIGxheW91dGApOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYWJlbCBQb3NpdGlvbnMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGxhYmVsIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHZhcmlvdXMgbGF5b3V0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gVG9wIChEZWZhdWx0KSJ9IAogICAgICAgICAgLnZhbHVlPSR7IlN0YW5kYXJkIGxheW91dCJ9IAogICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsidG9wIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBMZWZ0In0gCiAgICAgICAgICAudmFsdWU9JHsiSW5saW5lIGxhYmVsIn0gCiAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNpdHkifSAKICAgICAgICAgICAgLnZhbHVlPSR7Ik5ldyBZb3JrIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiWklQIENvZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7IjEwMDAxIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcmVxdWlyZWRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0W3JlcXVpcmVkXSIpOwogIGNvbnN0IGRpc2FibGVkSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKTsKICBjb25zdCBlcnJvcklucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0nKTsKICBpZiAocmVxdWlyZWRJbnB1dCkgewogICAgcmVxdWlyZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBpZiAoIXJlcXVpcmVkSW5wdXQuZ2V0VmFsdWUoKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBmaWVsZCBpcyBlbXB0eSEiKTsKICAgICAgfQogICAgfSk7CiAgfQogIGlmIChkaXNhYmxlZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgaW5wdXQgY2Fubm90IGJlIGVkaXRlZCIpOwogIH0KICBpZiAoZXJyb3JJbnB1dCkgewogICAgY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLCBlcnJvcklucHV0LnZhbGlkYXRpb25UZXh0KTsKICAgIGVycm9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsICgpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXJyb3JJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUyLmluY2x1ZGVzKCJAIikgJiYgdmFsdWUyLmluY2x1ZGVzKCIuIikpIHsKICAgICAgICBlcnJvcklucHV0LnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgZXJyb3JJbnB1dC52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgIGNvbnNvbGUubG9nKCJFbWFpbCB2YWxpZGF0aW9uIHBhc3NlZCEiKTsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZhbGlkYXRpb24gc3RhdGVzIGFuZCBpbnB1dCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgRmllbGQifSAKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAua2V5PSR7InJlcXVpcmVkRmllbGQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIEZpZWxkIn0gCiAgICAgICAgICAudmFsdWU9JHsiQ2Fubm90IGVkaXQgdGhpcyJ9IAogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJGaWVsZCB3aXRoIEVycm9yIn0gCiAgICAgICAgICAudmFsdWU9JHsiaW52YWxpZEAifSAKICAgICAgICAgIC52YWxpZGF0aW9uVGV4dD0keyJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIn0KICAgICAgICAgIC52YWxpZGF0aW9uU3RhdGU9JHsiaW52YWxpZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGFzc3dvcmRJbnB1dHMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dFtpc1Bhc3N3b3JkQm9vbF0iKTsKICBwYXNzd29yZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY2hlY2tUb2dnbGUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0RWwgPSBpbnB1dC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIGNvbnNvbGUubG9nKGBQYXNzd29yZCBmaWVsZCAiJHtpbnB1dC5sYWJlbH0iIHR5cGU6YCwgaW5wdXRFbC50eXBlKTsKICAgICAgfQogICAgfTsKICAgIGlmIChpbnB1dC5zaGFkb3dSb290KSB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tUb2dnbGUpOwogICAgICBjb25zdCBpbnB1dEVsID0gaW5wdXQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW5wdXRFbCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsidHlwZSJdIH0pOwogICAgICB9CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQWR2YW5jZWQgRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGUgYW5kIG90aGVyIGFkdmFuY2VkIGZlYXR1cmVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9IAogICAgICAgICAgLmlzUGFzc3dvcmRCb29sPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7InNrLTEyMzQ1Njc4OTBhYmNkZWYifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IktlZXAgdGhpcyBrZXkgc2VjdXJlIGFuZCBuZXZlciBzaGFyZSBpdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHluYW1pY0lucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0ZXh0LWlucHV0LW91dHB1dCIpOwogIGlmIChkeW5hbWljSW5wdXQgJiYgb3V0cHV0KSB7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIChldmVudCkgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEN1cnJlbnQgdmFsdWU6ICIke3ZhbHVlMn0iYDsKICAgIH0pOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpOwogICAgfSk7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIklucHV0IGJsdXJyZWQiKTsKICAgIH0pOwogICAgbGV0IGtleXByZXNzQ291bnQgPSAwOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoKSA9PiB7CiAgICAgIGtleXByZXNzQ291bnQrKzsKICAgICAgY29uc29sZS5sb2coYEtleXByZXNzIGNvdW50OiAke2tleXByZXNzQ291bnR9YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUcnkgdHlwaW5nIGluIHRoZSBpbnB1dHMgdG8gc2VlIHJlYWwtdGltZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJEeW5hbWljIElucHV0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0idGV4dC1pbnB1dC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCI+Q3VycmVudCB2YWx1ZTogIiI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGV4dC9kZWVzLWlucHV0LXRleHQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUZXh0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC10ZXh0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF92YWxpZGF0aW9uRnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7fSldOwogICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF9pc1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQYXNzd29yZEJvb2wiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQYXNzd29yZEJvb2wsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgX2lzUGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1Bhc3N3b3JkQm9vbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UGFzc3dvcmRCb29sLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93UGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBfc2hvd1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uRnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25GdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uRnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25GdW5jdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Bhc3N3b3JkQm9vbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93UGFzc3dvcmRCb29sX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93UGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dQYXNzd29yZEJvb2wodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCB2YWxpZGF0aW9uVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvbkZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB2YWxpZGF0aW9uRnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uRnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25GdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBQYXNzd29yZCB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5zaG93UGFzc3dvcmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMXB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM4cHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7CiAgICAgIH0KCiAgICAgIC5zaG93UGFzc3dvcmQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4xKSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci53YXJuIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjEpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLnZhbGlkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAvKiBFcnJvciBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjA1KSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBXYXJuaW5nIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwgImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMDUpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjA1KSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjA1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgaW5wdXQgewogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/IGNzc01vbm9Gb250RmFtaWx5IDogImluaGVyaXQifTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAke3RoaXMuaXNQYXNzd29yZEJvb2wgPyAiMC41cHgiIDogIm5vcm1hbCJ9OwogICAgICAgICAgcGFkZGluZy1yaWdodDogJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gIjQ4cHgiIDogIjEycHgifTsKICAgICAgICB9CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gaWAKICAgICAgICAgICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgYCA6IGlgCiAgICAgICAgICAgICAgLnZhbGlkYXRpb25Db250YWluZXIgewogICAgICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSIke3RoaXMuaXNQYXNzd29yZEJvb2wgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJwYXNzd29yZCIgOiAidGV4dCJ9IgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9IiR7dGhpcy51cGRhdGVWYWx1ZX0iCiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3RoaXMubGFiZWwgPyAiIiA6ICJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJsdWNpZGU6RXllIiA6ICJsdWNpZGU6RXllT2ZmIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbkNvbnRhaW5lciAke3RoaXMudmFsaWRhdGlvblN0YXRlIHx8ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVZhbHVlKGV2ZW50QXJnKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpIHsKICAgICAgdGhpcy5zaG93UGFzc3dvcmRCb29sID0gIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbDsKICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmZvY3VzKCk7CiAgICB9CiAgICBhc3luYyBibHVyKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmJsdXIoKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGV4dDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUHJvZHVjdCBDYXJkcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcHJvZHVjdCBkaXNwbGF5IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIldpcmVsZXNzIEJsdWV0b290aCBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIlByZW1pdW0gc291bmQgcXVhbGl0eSB3aXRoIGFjdGl2ZSBub2lzZSBjYW5jZWxsYXRpb24iLAogIHByaWNlOiAxNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMTk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiU21hcnQgV2F0Y2ggU2VyaWVzIDciLAogIGNhdGVnb3J5OiAiV2VhcmFibGVzIiwKICBkZXNjcmlwdGlvbjogIlRyYWNrIHlvdXIgZml0bmVzcyBhbmQgc3RheSBjb25uZWN0ZWQgb24gdGhlIGdvIiwKICBwcmljZTogMzk5LAogIGljb25OYW1lOiAibHVjaWRlOndhdGNoIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlVTQi1DIEh1YiIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgcHJpY2U6IDQ5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOnVzYiIsCiAgaW5TdG9jazogZmFsc2UKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBTaG9wcGluZyBDYXJ0In0gLnN1YnRpdGxlPSR7IlByb2R1Y3QgY2FyZHMgd2l0aCBkeW5hbWljIGNhcnQgY2FsY3VsYXRpb24ifSAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHByb2R1Y3RzID0gWwogICAgeyBpZDogImxhcHRvcCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsIGNhdGVnb3J5OiAiQ29tcHV0ZXJzIiwgZGVzY3JpcHRpb246ICJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIiwgcHJpY2U6IDE5OTksIG9yaWdpbmFsUHJpY2U6IDIxOTksIGljb25OYW1lOiAibHVjaWRlOmxhcHRvcCIgfSB9LAogICAgeyBpZDogImlwYWQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJpUGFkIEFpciIsIGNhdGVnb3J5OiAiVGFibGV0cyIsIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywgcHJpY2U6IDU5OSwgaWNvbk5hbWU6ICJsdWNpZGU6dGFibGV0IiB9IH0sCiAgICB7IGlkOiAia2V5Ym9hcmQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJNYWdpYyBLZXlib2FyZCIsIGNhdGVnb3J5OiAiQWNjZXNzb3JpZXMiLCBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLCBwcmljZTogMTQ5LCBpY29uTmFtZTogImx1Y2lkZTprZXlib2FyZCIgfSB9CiAgXTsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGxldCB0b3RhbCA9IDA7CiAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgcHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcihgIyR7cHJvZHVjdC5pZH1gKTsKICAgICAgaWYgKGVsZW1lbnQ0ICYmIGVsZW1lbnQ0LnF1YW50aXR5ID4gMCkgewogICAgICAgIGNvbnN0IHN1YnRvdGFsID0gcHJvZHVjdC5kYXRhLnByaWNlICogZWxlbWVudDQucXVhbnRpdHk7CiAgICAgICAgdG90YWwgKz0gc3VidG90YWw7CiAgICAgICAgaXRlbXMucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3Byb2R1Y3QuZGF0YS5uYW1lfSAoJHtlbGVtZW50NC5xdWFudGl0eX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj4kJHtzdWJ0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTsKICAgIGlmIChzdW1tYXJ5KSB7CiAgICAgIHN1bW1hcnkuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICR7aXRlbXMuam9pbigiIil9CiAgICAgICAgICAgICAgJHtpdGVtcy5sZW5ndGggPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibGFwdG9wIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsCiAgY2F0ZWdvcnk6ICJDb21wdXRlcnMiLAogIGRlc2NyaXB0aW9uOiAiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIsCiAgcHJpY2U6IDE5OTksCiAgb3JpZ2luYWxQcmljZTogMjE5OSwKICBpY29uTmFtZTogImx1Y2lkZTpsYXB0b3AiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJpcGFkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogImlQYWQgQWlyIiwKICBjYXRlZ29yeTogIlRhYmxldHMiLAogIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywKICBwcmljZTogNTk5LAogIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIk1hZ2ljIEtleWJvYXJkIiwKICBjYXRlZ29yeTogIkFjY2Vzc29yaWVzIiwKICBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLAogIHByaWNlOiAxNDksCiAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPlNob3BwaW5nIENhcnQ8L2gzPgogICAgICAgICAgPGRpdiBpZD0iaW50ZXJhY3RpdmUtY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZWxlY3RhYmxlIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2FyZHMgb3IgY2hlY2tib3hlcyB0byBzZWxlY3QgcHJvZHVjdHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJTb255IEFscGhhIDcgSVYiLAogIGNhdGVnb3J5OiAiQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICJGdWxsLWZyYW1lIG1pcnJvcmxlc3MgY2FtZXJhIiwKICBwcmljZTogMjQ5OCwKICBpY29uTmFtZTogImx1Y2lkZTpjYW1lcmEiCn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7dHJ1ZX0KICAgICAgICAgICAgLnNob3dRdWFudGl0eVNlbGVjdG9yPSR7ZmFsc2V9CiAgICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBjb25zdCBzZWxlY3RlZENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpOwogICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0cyA9IFtdOwogICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgIGlmIChjYXJkLnNlbGVjdGVkKSB7CiAgICAgICAgc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKGNhcmQucHJvZHVjdERhdGEubmFtZSk7CiAgICAgIH0KICAgIH0pOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gc2VsZWN0ZWRQcm9kdWN0cy5sZW5ndGggPiAwID8gYFNlbGVjdGVkOiAke3NlbGVjdGVkUHJvZHVjdHMuam9pbigiLCAiKX1gIDogIk5vIHByb2R1Y3RzIHNlbGVjdGVkIjsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiREpJIE1pbmkgMyBQcm8iLAogIGNhdGVnb3J5OiAiRHJvbmVzIiwKICBkZXNjcmlwdGlvbjogIkxpZ2h0d2VpZ2h0IGRyb25lIHdpdGggNEsgY2FtZXJhIiwKICBwcmljZTogNzU5LAogIGljb25OYW1lOiAibHVjaWRlOnBsYW5lIgp9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7CiAgaWYgKG91dHB1dCkgewogICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgIGNvbnN0IHNlbGVjdGVkUHJvZHVjdHMgPSBbXTsKICAgIHNlbGVjdGVkQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gewogICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgIHNlbGVjdGVkUHJvZHVjdHMucHVzaChjYXJkLnByb2R1Y3REYXRhLm5hbWUpOwogICAgICB9CiAgICB9KTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IHNlbGVjdGVkUHJvZHVjdHMubGVuZ3RoID4gMCA/IGBTZWxlY3RlZDogJHtzZWxlY3RlZFByb2R1Y3RzLmpvaW4oIiwgIil9YCA6ICJObyBwcm9kdWN0cyBzZWxlY3RlZCI7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkdvUHJvIEhFUk8xMiIsCiAgY2F0ZWdvcnk6ICJBY3Rpb24gQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICI1LjNLIHZpZGVvIHdpdGggSHlwZXJTbW9vdGggNi4wIiwKICBwcmljZTogMzk5LAogIG9yaWdpbmFsUHJpY2U6IDQ0OSwKICBpY29uTmFtZTogImx1Y2lkZTp2aWRlbyIKfX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHt0cnVlfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHtmYWxzZX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0keyhlMTEpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIik7CiAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICBzZWxlY3RlZENhcmRzLmZvckVhY2goKGNhcmQpID0+IHsKICAgICAgaWYgKGNhcmQuc2VsZWN0ZWQpIHsKICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgfQogICAgfSk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtcHJvZHVjdHMiIGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgTm8gcHJvZHVjdHMgc2VsZWN0ZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByb2R1Y3QgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxpbWl0ZWQgRWRpdGlvbiBTbmVha2VycyIsCiAgY2F0ZWdvcnk6ICJGb290d2VhciIsCiAgZGVzY3JpcHRpb246ICJFeGNsdXNpdmUgY29sb3J3YXkgLSBPbmx5IDUwMCBwYWlycyIsCiAgcHJpY2U6IDI5OSwKICBpY29uTmFtZTogImx1Y2lkZTpmb290cHJpbnRzIiwKICBpblN0b2NrOiBmYWxzZSwKICBzdG9ja1RleHQ6ICJTb2xkIE91dCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJNaW5pbWFsaXN0IFdhbGxldCIsCiAgcHJpY2U6IDM5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOndhbGxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJQcmVtaXVtIENvZmZlZSBCZWFucyIsCiAgY2F0ZWdvcnk6ICJGb29kICYgQmV2ZXJhZ2UiLAogIGRlc2NyaXB0aW9uOiAiU2luZ2xlIG9yaWdpbiwgbWVkaXVtIHJvYXN0IiwKICBwcmljZTogMTguNSwKICBpY29uTmFtZTogImx1Y2lkZTpjb2ZmZWUiLAogIGN1cnJlbmN5OiAiXHUyMEFDIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wcm9kdWN0RGF0YV9kZWNvcmF0b3JzOwogIGxldCBfcHJvZHVjdERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZGVjb3JhdG9yczsKICBsZXQgX3F1YW50aXR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9xdWFudGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NlbGVjdGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicHJvZHVjdERhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2R1Y3REYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2R1Y3REYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wcm9kdWN0RGF0YSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9xdWFudGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJxdWFudGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicXVhbnRpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucXVhbnRpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnF1YW50aXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3F1YW50aXR5X2luaXRpYWxpemVycywgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dRdWFudGl0eVNlbGVjdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93UXVhbnRpdHlTZWxlY3RvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UXVhbnRpdHlTZWxlY3Rvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1F1YW50aXR5U2VsZWN0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfc2VsZWN0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTM7CiAgICAjcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2luaXRpYWxpemVycywgewogICAgICBuYW1lOiAiUHJvZHVjdCBOYW1lIiwKICAgICAgcHJpY2U6IDAKICAgIH0pOwogICAgZ2V0IHByb2R1Y3REYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9kdWN0RGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcXVhbnRpdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHF1YW50aXR5KHZhbHVlMikgewogICAgICB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93UXVhbnRpdHlTZWxlY3RvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2VsZWN0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RhYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNlbGVjdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LXByaWNlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcmljZS1jdXJyZW50IHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMub3V0LW9mLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHsgbmFtZSwgY2F0ZWdvcnksIGRlc2NyaXB0aW9uLCBwcmljZSwgb3JpZ2luYWxQcmljZSwgY3VycmVuY3kgPSAiJCIsIGluU3RvY2sgPSB0cnVlLCBzdG9ja1RleHQgPSBpblN0b2NrID8gIkluIFN0b2NrIiA6ICJPdXQgb2YgU3RvY2siLCBpbWFnZVVybCwgaWNvbk5hbWUgPSAibHVjaWRlOnBhY2thZ2UiIH0gPSB0aGlzLnByb2R1Y3REYXRhOwogICAgICBjb25zdCBmb3JtYXRQcmljZSA9ICh2YWx1ZTIpID0+IHsKICAgICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHt2YWx1ZTIudG9GaXhlZCgyKX1gOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InByb2R1Y3QtY2FyZCAke3RoaXMuc2VsZWN0YWJsZSA/ICJzZWxlY3RhYmxlIiA6ICIifSAke3RoaXMuc2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2FyZENsaWNrfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1pbWFnZSI+CiAgICAgICAgICAke2ltYWdlVXJsID8gYjJgCiAgICAgICAgICAgIDxpbWcgc3JjPSIke2ltYWdlVXJsfSIgYWx0PSIke25hbWV9Ij4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2ljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgIGB9CiAgICAgICAgICAke3RoaXMuc2VsZWN0YWJsZSA/IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJzZWxlY3Rpb24tY2hlY2tib3ggJHt0aGlzLnNlbGVjdGVkID8gImNoZWNrZWQiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKTsKICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWhlYWRlciI+CiAgICAgICAgICAgICR7Y2F0ZWdvcnkgPyBiMmA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNhdGVnb3J5Ij4ke2NhdGVnb3J5fTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1uYW1lIj4ke25hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7ZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1kZXNjcmlwdGlvbiI+JHtkZXNjcmlwdGlvbn08L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9InN0b2NrLXN0YXR1cyAke2luU3RvY2sgPyAiaW4tc3RvY2siIDogIm91dC1vZi1zdG9jayJ9Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2luU3RvY2sgPyAibHVjaWRlOmNoZWNrLWNpcmNsZSIgOiAibHVjaWRlOngtY2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICR7c3RvY2tUZXh0fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtcHJpY2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1jdXJyZW50Ij4ke2Zvcm1hdFByaWNlKHByaWNlKX08L3NwYW4+CiAgICAgICAgICAgICAgJHtvcmlnaW5hbFByaWNlICYmIG9yaWdpbmFsUHJpY2UgPiBwcmljZSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9yaWdpbmFsIj4ke2Zvcm1hdFByaWNlKG9yaWdpbmFsUHJpY2UpfTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuc2hvd1F1YW50aXR5U2VsZWN0b3IgPyBiMmAKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnF1YW50aXR5fQogICAgICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZTExKSA9PiB7CiAgICAgICAgdGhpcy5xdWFudGl0eSA9IGUxMS5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJxdWFudGl0eUNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBxdWFudGl0eTogdGhpcy5xdWFudGl0eSwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH19CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2FyZENsaWNrKCkgewogICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNlbGVjdGlvblRvZ2dsZSgpIHsKICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgIHByb2R1Y3REYXRhOiB0aGlzLnByb2R1Y3REYXRhCiAgICAgICAgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczIyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxNCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zaG9wcGluZy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFF1YW50aXR5IFNlbGVjdG9yIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBxdWFudGl0eSBpbnB1dCB3aXRoIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHRoZSBkZXNpcmVkIHF1YW50aXR5In0KICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJJdGVtcyBpbiBDYXJ0In0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGp1c3QgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIn0KICAgICAgICAgIC52YWx1ZT0kezN9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJNb2Rlcm4gZS1jb21tZXJjZSBwcm9kdWN0IGNhcmRzIHdpdGggaW50ZXJhY3RpdmUgcXVhbnRpdHkgc2VsZWN0b3JzIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGNvbnN0IGNhcmQxID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKTsKICAgIGNvbnN0IGNhcmQyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjbW91c2UtcXR5Iik7CiAgICBjb25zdCBjYXJkMyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2tleWJvYXJkLXF0eSIpOwogICAgY29uc3QgcXR5MSA9IGNhcmQxPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MiA9IGNhcmQyPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MyA9IGNhcmQzPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcHJpY2UxID0gMzQ5Ljk5ICogcXR5MTsKICAgIGNvbnN0IHByaWNlMiA9IDk5Ljk5ICogcXR5MjsKICAgIGNvbnN0IHByaWNlMyA9IDc5Ljk5ICogcXR5MzsKICAgIGNvbnN0IHRvdGFsID0gcHJpY2UxICsgcHJpY2UyICsgcHJpY2UzOwogICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NhcnQtc3VtbWFyeS1jb250ZW50Iik7CiAgICBpZiAoc3VtbWFyeSkgewogICAgICBzdW1tYXJ5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAke3F0eTEgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7cXR5MX0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UxLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTIgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dpdGVjaCBNWCBNYXN0ZXIgM1MgKCR7cXR5Mn0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UyLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTMgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtxdHkzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtwcmljZTMudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICR7dG90YWwgPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InNob3BwaW5nLWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImhlYWRwaG9uZXMtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlNvbnkgV0gtMTAwMFhNNSBXaXJlbGVzcyBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIkluZHVzdHJ5LWxlYWRpbmcgbm9pc2UgY2FuY2VsaW5nIHdpdGggQXV0byBOQyBPcHRpbWl6ZXIiLAogIHByaWNlOiAzNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMzk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibW91c2UtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgZGVzY3JpcHRpb246ICJQZXJmb3JtYW5jZSB3aXJlbGVzcyBtb3VzZSB3aXRoIHVsdHJhLWZhc3Qgc2Nyb2xsaW5nIiwKICBwcmljZTogOTkuOTksCiAgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlciIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZC1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsCiAgY2F0ZWdvcnk6ICJLZXlib2FyZHMiLAogIGRlc2NyaXB0aW9uOiAiQ29tcGFjdCA3NSUgbGF5b3V0IHdpdGggaG90LXN3YXBwYWJsZSBzd2l0Y2hlcyIsCiAgcHJpY2U6IDc5Ljk5LAogIG9yaWdpbmFsUHJpY2U6IDk0Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmtleWJvYXJkIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7Ik51bWJlciBvZiBMaWNlbnNlcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgcXVhbnRpdHkgY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0kezV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3JkZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBvcmRlciBmb3JtIHdpdGggcXVhbnRpdHkgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkN1c3RvbWVyIE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJhc2ljIFBsYW4iLCAiUHJvIFBsYW4iLCAiRW50ZXJwcmlzZSBQbGFuIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTnVtYmVyIG9mIGxpY2Vuc2VzIn0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWNpYWwgSW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTIyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyMih0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgMSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lciB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3IgewogICAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3RvcjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCAiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5wbHVzIHsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHkgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIH0KCiAgICAgICAgLyogS2V5Ym9hcmQgbmF2aWdhdGlvbiBmb2N1cyBzdHlsZXMgKi8KICAgICAgICAuc2VsZWN0b3I6Zm9jdXMgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CgogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icXVhbnRpdHktY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLW1pbj0iJHt0aGlzLnZhbHVlIDw9IDB9IgogICAgICAgID4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBtaW51cyIgCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgdGhpcy5kZWNyZWFzZSgpOwogICAgICB9fSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVjcmVhc2UoKTsKICAgICAgICB9CiAgICAgIH19IgogICAgICAgICAgICByb2xlPSJidXR0b24iCiAgICAgICAgICAgIGFyaWEtbGFiZWw9IkRlY3JlYXNlIHF1YW50aXR5IgogICAgICAgICAgPuKIkjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icXVhbnRpdHkiIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLWF0b21pYz0idHJ1ZSI+JHt0aGlzLnZhbHVlfTwvZGl2PgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIHBsdXMiIAogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgIHRoaXMuaW5jcmVhc2UoKTsKICAgICAgfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQgPyAiLTEiIDogIjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiIHx8IGUxMS5rZXkgPT09ICIgIikgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmluY3JlYXNlKCk7CiAgICAgICAgfQogICAgICB9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGluY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICB0aGlzLnZhbHVlKys7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGRlY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy52YWx1ZSA+IDApIHsKICAgICAgICB0aGlzLnZhbHVlLS07CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAvZGVlcy1pbnB1dC1yYWRpb2dyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTUgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlc3VsdC1kaXNwbGF5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmFkaW8gR3JvdXBzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBzdHJpbmcgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpcHRpb24gUGxhbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyAtICQ5L21vbnRoIiwgIlBybyAtICQyOS9tb250aCIsICJFbnRlcnByaXNlIC0gJDk5L21vbnRoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm8gLSAkMjkvbW9udGgifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHlvdXIgc3Vic2NyaXB0aW9uIHRpZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJIaWdoIiwgIk1lZGl1bSIsICJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJSYWRpbyBncm91cHMgd2l0aCBob3Jpem9udGFsIGFycmFuZ2VtZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgLmxhYmVsPSR7IkRvIHlvdSBhZ3JlZSB3aXRoIHRoZSB0ZXJtcz8ifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlllcyIsICJObyIsICJNYXliZSJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJZZXMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiRXhwZXJpZW5jZSBMZXZlbCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siQmVnaW5uZXIiLCAiSW50ZXJtZWRpYXRlIiwgIkV4cGVydCJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIGV4cGVyaWVuY2UgbGV2ZWwgd2l0aCB3ZWIgZGV2ZWxvcG1lbnQifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEFkdmFuY2VkIE9wdGlvbnMifSAuc3VidGl0bGU9JHsiVXNpbmcgb2JqZWN0IGZvcm1hdCB3aXRoIGtleXMgYW5kIHBheWxvYWRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgaWQ9ImFkdmFuY2VkLXJhZGlvIgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBSZWdpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIChVUyBFYXN0KSIsIGtleTogInVzLWVhc3QiLCBwYXlsb2FkOiB7IHJlZ2lvbjogInVzLWVhc3QtMSIsIGxhdGVuY3k6IDIwIH0gfSwKICB7IG9wdGlvbjogIkV1cm9wZSAoRnJhbmtmdXJ0KSIsIGtleTogImV1LWNlbnRyYWwiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImV1LWNlbnRyYWwtMSIsIGxhdGVuY3k6IDUwIH0gfSwKICB7IG9wdGlvbjogIkFzaWEgUGFjaWZpYyAoU2luZ2Fwb3JlKSIsIGtleTogImFwLXNvdXRoZWFzdCIsIHBheWxvYWQ6IHsgcmVnaW9uOiAiYXAtc291dGhlYXN0LTEiLCBsYXRlbmN5OiAxMjAgfSB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZXUtY2VudHJhbCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHRoZSBjbG9zZXN0IHJlZ2lvbiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSJ9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVnaW9uLXJlc3VsdCIpOwogIGlmIChkaXNwbGF5KSB7CiAgICBkaXNwbGF5LnRleHRDb250ZW50ID0gIlNlbGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZTExLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8ZGl2IGlkPSJyZWdpb24tcmVzdWx0IiBjbGFzcz0icmVzdWx0LWRpc3BsYXkiPlNlbGVjdGVkOiB7ICJyZWdpb24iOiAiZXUtY2VudHJhbC0xIiwgImxhdGVuY3kiOiA1MCB9PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdXJ2ZXkgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSByYWRpbyBncm91cHMgZm9yIHN1cnZleXMgYW5kIGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkhvdyBzYXRpc2ZpZWQgYXJlIHlvdT8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siVmVyeSBTYXRpc2ZpZWQiLCAiU2F0aXNmaWVkIiwgIk5ldXRyYWwiLCAiRGlzc2F0aXNmaWVkIiwgIlZlcnkgRGlzc2F0aXNmaWVkIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJTYXRpc2ZpZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJXb3VsZCB5b3UgcmVjb21tZW5kIHVzPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEZWZpbml0ZWx5IiwgIlByb2JhYmx5IiwgIk5vdCBTdXJlIiwgIlByb2JhYmx5IE5vdCIsICJEZWZpbml0ZWx5IE5vdCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJvYmFibHkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gU3RhdGVzICYgVmFsaWRhdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCB2YWxpZGF0aW9uIGV4YW1wbGVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIFNlbGVjdGlvbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJPcHRpb24gQSIsICJPcHRpb24gQiIsICJPcHRpb24gQyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIFN0YXRlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRpc2FibGVkIE9wdGlvbiAxIiwgIkRpc2FibGVkIE9wdGlvbiAyIiwgIkRpc2FibGVkIE9wdGlvbiAzIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEaXNhYmxlZCBPcHRpb24gMiJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiBwYXR0ZXJucyBpbiBhcHBsaWNhdGlvbiBzZXR0aW5ncyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJUaGVtZSBQcmVmZXJlbmNlIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiTGlnaHQgVGhlbWUiLCBrZXk6ICJsaWdodCIsIHBheWxvYWQ6ICJsaWdodCIgfSwKICB7IG9wdGlvbjogIkRhcmsgVGhlbWUiLCBrZXk6ICJkYXJrIiwgcGF5bG9hZDogImRhcmsiIH0sCiAgeyBvcHRpb246ICJTeXN0ZW0gRGVmYXVsdCIsIGtleTogInN5c3RlbSIsIHBheWxvYWQ6ICJhdXRvIiB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZGFyayJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIGhvdyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFwcGVhciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb24gRnJlcXVlbmN5In0KICAgICAgICAgIC5vcHRpb25zPSR7WyJBbGwgTm90aWZpY2F0aW9ucyIsICJJbXBvcnRhbnQgT25seSIsICJOb25lIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSW1wb3J0YW50IE9ubHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNvbnRyb2wgaG93IG9mdGVuIHlvdSByZWNlaXZlIG5vdGlmaWNhdGlvbnMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiTGFuZ3VhZ2UifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCAiR2VybWFuIiwgIkZyZW5jaCIsICJTcGFuaXNoIiwgIkphcGFuZXNlIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiV29ya3Mgc2VhbWxlc3NseSB3aXRoIGRlZXMtZm9ybSJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IE5hbWUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InByb2R1Y3ROYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbGVjdHJvbmljcyIsICJDbG90aGluZyIsICJCb29rcyIsICJIb21lICYgR2FyZGVuIiwgIlNwb3J0cyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7ImNhdGVnb3J5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiQ29uZGl0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk5ldyIsICJMaWtlIE5ldyIsICJHb29kIiwgIkZhaXIiLCAiUG9vciJdfQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImNvbmRpdGlvbiJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJOZXcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTaGlwcGluZyBTcGVlZCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiU3RhbmRhcmQgKDUtNyBkYXlzKSIsIGtleTogInN0YW5kYXJkIiwgcGF5bG9hZDogeyBkYXlzOiA3LCBwcmljZTogMCB9IH0sCiAgeyBvcHRpb246ICJFeHByZXNzICgyLTMgZGF5cykiLCBrZXk6ICJleHByZXNzIiwgcGF5bG9hZDogeyBkYXlzOiAzLCBwcmljZTogMTAgfSB9LAogIHsgb3B0aW9uOiAiT3Zlcm5pZ2h0Iiwga2V5OiAib3Zlcm5pZ2h0IiwgcGF5bG9hZDogeyBkYXlzOiAxLCBwcmljZTogMjUgfSB9Cl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSYWRpb2dyb3VwID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1yYWRpb2dyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXJlY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9kaXJlY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlyZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXJlY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlyZWN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXJlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UmFkaW9ncm91cDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkT3B0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZE9wdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMsICJ2ZXJ0aWNhbCIpKTsKICAgIGdldCBkaXJlY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXJlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybSBjb21wYXRpYmlsaXR5CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSB0aGlzLmdldE9wdGlvbkJ5S2V5KHRoaXMuc2VsZWN0ZWRPcHRpb24pOwogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiICYmIG9wdGlvbjIucGF5bG9hZCAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjIucGF5bG9hZDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWwpIHsKICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdHlwZW9mIG9wdCA9PT0gIm9iamVjdCIgJiYgb3B0LnBheWxvYWQgPT09IHZhbCk7CiAgICAgICAgaWYgKG9wdGlvbjIgJiYgdHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uMi5rZXk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDIwcHggNnB4IDA7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tY2lyY2xlIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsICJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgMy45JSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAubGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDAzZW07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdKSAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9InZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9Indhcm4iXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBPdmVycmlkZSBiYXNlIGdyaWQgbGF5b3V0IGZvciByYWRpb2dyb3VwIHRvIHByZXZlbnQgbGFyZ2UgZ2FwcyAqLwogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJsYWJlbC10ZXh0Ij4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpcmVjdGlvbn0iPgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKChvcHRpb24yKSA9PiB7CiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gdGhpcy5nZXRPcHRpb25LZXkob3B0aW9uMik7CiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbjIpOwogICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkT3B0aW9uID09PSBvcHRpb25LZXk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tb3B0aW9uICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5zZWxlY3RPcHRpb24ob3B0aW9uS2V5KX0iCiAgICAgICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZTExLCBvcHRpb25LZXkpfSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tY2lyY2xlIiAKICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICAgICAgICByb2xlPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPSIke2lzU2VsZWN0ZWR9IgogICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke29wdGlvbkxhYmVsfSIKICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvLWxhYmVsIj4ke29wdGlvbkxhYmVsfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRPcHRpb25LZXkob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIua2V5OwogICAgfQogICAgZ2V0T3B0aW9uTGFiZWwob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIub3B0aW9uOwogICAgfQogICAgZ2V0T3B0aW9uQnlLZXkoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25LZXkob3B0KSA9PT0ga2V5Mik7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oa2V5MikgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBrZXkyOwogICAgICBpZiAob2xkVmFsdWUgIT09IGtleTIpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpbnB1dCIsIHsKICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy52YWx1ZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWwpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZE9wdGlvbikgewogICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVxdWlyZWQpIHsKICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25LZXkoZmlyc3RPcHRpb24pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVLZXlkb3duKGV2ZW50LCBvcHRpb25LZXkpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb25LZXkpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dSaWdodCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICAgIGZvY3VzTmV4dE9wdGlvbigpIHsKICAgICAgY29uc3QgcmFkaW9DaXJjbGVzID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcmFkaW9DaXJjbGVzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSB0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCk7CiAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHJhZGlvQ2lyY2xlcy5sZW5ndGg7CiAgICAgIHJhZGlvQ2lyY2xlc1tuZXh0SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBmb2N1c1ByZXZpb3VzT3B0aW9uKCkgewogICAgICBjb25zdCByYWRpb0NpcmNsZXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIucmFkaW8tY2lyY2xlIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSByYWRpb0NpcmNsZXMuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IHRoaXMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KTsKICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IDw9IDAgPyByYWRpb0NpcmNsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRJbmRleCAtIDE7CiAgICAgIHJhZGlvQ2lyY2xlc1twcmV2SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFJhZGlvZ3JvdXAyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE2ID0gKCkgPT4gYjJgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+YDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUyNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMjUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNGb3JtU3VibWl0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtLXN1Ym1pdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2Rpc2FibGVkX2RlY29yYXRvcnM7CiAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Zvcm1TdWJtaXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3N0YXR1c19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBkaXNhYmxlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzYWJsZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCAibm9ybWFsIikpOwogICAgZ2V0IHN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbdGhlbWVEZWZhdWx0U3R5bGVzLCBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICBgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICBzdGF0dXM9IiR7dGhpcy5zdGF0dXN9IgogICAgICAgIEBjbGljaz0iJHt0aGlzLnN1Ym1pdH0iCiAgICAgICAgP2Rpc2FibGVkPSIke3RoaXMuZGlzYWJsZWR9IgogICAgICA+CiAgICAgICAgJHt0aGlzLnRleHQgfHwgYjJgPHNsb3Q+PC9zbG90PmB9CiAgICAgIDwvZGVlcy1idXR0b24+CiAgICBgOwogICAgfQogICAgYXN5bmMgc3VibWl0KCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtRWxlbWVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1mb3JtIik7CiAgICAgIGlmIChwYXJlbnRGb3JtRWxlbWVudCAmJiBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCkgewogICAgICAgIHBhcmVudEZvcm1FbGVtZW50LmdhdGhlckFuZERpc3BhdGNoKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgIHRoaXMuc3VibWl0KCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTcgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnNwYWNlciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjb3VudHJ5RHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBDb3VudHJ5Il0nKTsKICBjb25zdCByb2xlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTsKICBpZiAoY291bnRyeURyb3Bkb3duKSB7CiAgICBjb3VudHJ5RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KICBpZiAocm9sZURyb3Bkb3duKSB7CiAgICByb2xlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCYXNpYyBEcm9wZG93bnMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgZHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBhbmQgdmFyaW91cyBvcHRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgQ291bnRyeSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlVuaXRlZCBTdGF0ZXMiLCBrZXk6ICJ1cyIgfSwKICB7IG9wdGlvbjogIkNhbmFkYSIsIGtleTogImNhIiB9LAogIHsgb3B0aW9uOiAiR2VybWFueSIsIGtleTogImRlIiB9LAogIHsgb3B0aW9uOiAiRnJhbmNlIiwga2V5OiAiZnIiIH0sCiAgeyBvcHRpb246ICJVbml0ZWQgS2luZ2RvbSIsIGtleTogInVrIiB9LAogIHsgb3B0aW9uOiAiQXVzdHJhbGlhIiwga2V5OiAiYXUiIH0sCiAgeyBvcHRpb246ICJKYXBhbiIsIGtleTogImpwIiB9LAogIHsgb3B0aW9uOiAiQnJhemlsIiwga2V5OiAiYnIiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiVW5pdGVkIFN0YXRlcyIsIGtleTogInVzIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkFkbWluaXN0cmF0b3IiLCBrZXk6ICJhZG1pbiIgfSwKICB7IG9wdGlvbjogIkVkaXRvciIsIGtleTogImVkaXRvciIgfSwKICB7IG9wdGlvbjogIlZpZXdlciIsIGtleTogInZpZXdlciIgfSwKICB7IG9wdGlvbjogIkd1ZXN0Iiwga2V5OiAiZ3Vlc3QiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcHJpb3JpdHlEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGlmIChwcmlvcml0eURyb3Bkb3duKSB7CiAgICBwcmlvcml0eURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGBQcmlvcml0eSBjaGFuZ2VkIHRvOiAke2V2ZW50LmRldGFpbC5vcHRpb259YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aG91dCBTZWFyY2gifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBmb3Igc2ltcGxlciBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiSGlnaCIsIGtleTogImhpZ2giIH0sCiAgeyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH0sCiAgeyBvcHRpb246ICJMb3ciLCBrZXk6ICJsb3ciIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiTWVkaXVtIiwga2V5OiAibWVkaXVtIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93bnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxhYmVsID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwogICAgICBjb25zb2xlLmxvZyhgJHtsYWJlbH06ICR7ZXZlbnQuZGV0YWlsLm9wdGlvbn1gKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIGRyb3Bkb3ducyBpbiBhIGhvcml6b250YWwgbGF5b3V0IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGVwYXJ0bWVudCJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkVuZ2luZWVyaW5nIiwga2V5OiAiZW5nIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiTWFya2V0aW5nIiwga2V5OiAibWFya2V0aW5nIiB9LAogIHsgb3B0aW9uOiAiU2FsZXMiLCBrZXk6ICJzYWxlcyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gU2l6ZSJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiMS01Iiwga2V5OiAic21hbGwiIH0sCiAgeyBvcHRpb246ICI2LTIwIiwga2V5OiAibWVkaXVtIiB9LAogIHsgb3B0aW9uOiAiMjEtNTAiLCBrZXk6ICJsYXJnZSIgfSwKICB7IG9wdGlvbjogIjUwKyIsIGtleTogInhsYXJnZSIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkxvY2F0aW9uIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVtb3RlIiwga2V5OiAicmVtb3RlIiB9LAogIHsgb3B0aW9uOiAiT24tc2l0ZSIsIGtleTogIm9uc2l0ZSIgfSwKICB7IG9wdGlvbjogIkh5YnJpZCIsIGtleTogImh5YnJpZCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHJlcXVpcmVkRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd25bcmVxdWlyZWRdIik7CiAgaWYgKHJlcXVpcmVkRHJvcGRvd24pIHsKICAgIHJlcXVpcmVkRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJlcXVpcmVkIGRyb3Bkb3duIGxvc3QgZm9jdXMiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk9wdGlvbiBBIiwga2V5OiAiYSIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBCIiwga2V5OiAiYiIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBDIiwga2V5OiAiYyIgfQpdfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJDYW5ub3QgU2VsZWN0Iiwga2V5OiAiZGlzYWJsZWQiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiQ2Fubm90IFNlbGVjdCIsIGtleTogImRpc2FibGVkIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRpdiBjbGFzcz0ic3BhY2VyIj4KICAgICAgKFNwYWNlciB0byB0ZXN0IGRyb3Bkb3duIHBvc2l0aW9uaW5nKQogICAgPC9kaXY+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBpZiAoZHJvcGRvd24pIHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJCb3R0b20gZHJvcGRvd24gc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCb3R0b20gUG9zaXRpb25pbmcifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gdGhhdCBvcGVucyB1cHdhcmQgd2hlbiBuZWFyIGJvdHRvbSBvZiB2aWV3cG9ydCJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiT3BlbnMgVXB3YXJkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiRmlyc3QgT3B0aW9uIiwga2V5OiAiZmlyc3QiIH0sCiAgeyBvcHRpb246ICJTZWNvbmQgT3B0aW9uIiwga2V5OiAic2Vjb25kIiB9LAogIHsgb3B0aW9uOiAiVGhpcmQgT3B0aW9uIiwga2V5OiAidGhpcmQiIH0sCiAgeyBvcHRpb246ICJGb3VydGggT3B0aW9uIiwga2V5OiAiZm91cnRoIiB9LAogIHsgb3B0aW9uOiAiRmlmdGggT3B0aW9uIiwga2V5OiAiZmlmdGgiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGNvbnN0IG91dHB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAoZHJvcGRvd24gJiYgb3V0cHV0KSB7CiAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5TZWxlY3QgYSBwcm9kdWN0IHRvIHNlZSBkZXRhaWxzLi4uPC9lbT4iOwogICAgZHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5kZXRhaWwudmFsdWUpIHsKICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLmtleX08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5QcmljZTo8L3N0cm9uZz4gJCR7ZXZlbnQuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlIHx8ICJOL0EifTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPkZlYXR1cmVzOjwvc3Ryb25nPiAke2V2ZW50LmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKSB8fCAiTi9BIn0KICAgICAgICAgICAgYDsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nICYgUGF5bG9hZCJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB3aXRoIHBheWxvYWQgZGF0YSBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsaW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUHJvZHVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkJhc2ljIFBsYW4iLCBrZXk6ICJiYXNpYyIsIHBheWxvYWQ6IHsgcHJpY2U6IDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSJdIH0gfSwKICB7IG9wdGlvbjogIlBybyBQbGFuIiwga2V5OiAicHJvIiwgcGF5bG9hZDogeyBwcmljZTogMTkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiXSB9IH0sCiAgeyBvcHRpb246ICJFbnRlcnByaXNlIFBsYW4iLCBrZXk6ICJlbnRlcnByaXNlIiwgcGF5bG9hZDogeyBwcmljZTogNDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiLCAiRmVhdHVyZSBDIl0gfSB9Cl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3QgcHJvamVjdFR5cGVEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9InByb2plY3RUeXBlIl0nKTsKICBjb25zdCBmcmFtZXdvcmtEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9ImZyYW1ld29yayJdJyk7CiAgaWYgKGZvcm0pIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBldmVudC5kZXRhaWwuZGF0YSk7CiAgICB9KTsKICB9CiAgaWYgKHByb2plY3RUeXBlRHJvcGRvd24gJiYgZnJhbWV3b3JrRHJvcGRvd24pIHsKICAgIHByb2plY3RUeXBlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gZXZlbnQuZGV0YWlsLmtleTsKICAgICAgY29uc29sZS5sb2coYFByb2plY3QgdHlwZSBjaGFuZ2VkIHRvOiAke3NlbGVjdGVkVHlwZX1gKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdvcmtpbmcgd2l0aGluIGEgZm9ybSB3aXRoIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvamVjdFR5cGUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBBcHBsaWNhdGlvbiIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHBsaWNhdGlvbiIsIGtleTogIm1vYmlsZSIgfSwKICB7IG9wdGlvbjogIkRlc2t0b3AgQXBwbGljYXRpb24iLCBrZXk6ICJkZXNrdG9wIiB9LAogIHsgb3B0aW9uOiAiQVBJIFNlcnZpY2UiLCBrZXk6ICJhcGkiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wbWVudCBGcmFtZXdvcmsifQogICAgICAgICAgICAua2V5PSR7ImZyYW1ld29yayJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVhY3QiLCBrZXk6ICJyZWFjdCIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiVnVlLmpzIiwga2V5OiAidnVlIiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgeyBvcHRpb246ICJBbmd1bGFyIiwga2V5OiAiYW5ndWxhciIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiUmVhY3QgTmF0aXZlIiwga2V5OiAicmVhY3QtbmF0aXZlIiwgcGF5bG9hZDogeyB0eXBlOiAibW9iaWxlIiB9IH0sCiAgeyBvcHRpb246ICJGbHV0dGVyIiwga2V5OiAiZmx1dHRlciIsIHBheWxvYWQ6IHsgdHlwZTogIm1vYmlsZSIgfSB9LAogIHsgb3B0aW9uOiAiRWxlY3Ryb24iLCBrZXk6ICJlbGVjdHJvbiIsIHBheWxvYWQ6IHsgdHlwZTogImRlc2t0b3AiIH0gfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiQ3JlYXRlIFByb2plY3QifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREcm9wZG93biA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5lZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfb3BlbnNUb1RvcF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyZWRPcHRpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc09wZW5lZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoVmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE9wdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRPcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRPcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgX3NlbGVjdGVkT3B0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVNlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVNlYXJjaCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuc1RvVG9wID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyZWRPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJlZE9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyZWRPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJlZE9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyZWRPcHRpb25zX2luaXRpYWxpemVycywgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGlnaGxpZ2h0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZEluZGV4X2luaXRpYWxpemVycywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFZhbHVlX2luaXRpYWxpemVycywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkT3B0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWw7CiAgICB9CiAgICAjZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgZW5hYmxlU2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlU2VhcmNoKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZmlsdGVyZWRPcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyZWRPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJlZE9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoaWdobGlnaHRlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZmlsdGVyZWRPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBoaWdobGlnaHRlZEluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhpZ2hsaWdodGVkSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hpZ2hsaWdodGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3BlbmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWFyY2hWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoVmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3ggewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveC5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIERyb3Bkb3duIGFycm93ICovCiAgICAgIC5zZWxlY3RlZEJveDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMTJweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3gub3Blbjo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDUwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3gudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAuc2VsZWN0aW9uQm94LmJvdHRvbSB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uQm94LnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgKi8KICAgICAgLm9wdGlvbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE5vIG9wdGlvbnMgbWVzc2FnZSAqLwogICAgICAubm8tb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogU2VhcmNoICovCiAgICAgIC5zZWFyY2ggewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VhcmNoLmJvdHRvbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2ggaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0ic2VsZWN0ZWRCb3ggJHt0aGlzLmlzT3BlbmVkID8gIm9wZW4iIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpfSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZE9wdGlvbj8ub3B0aW9uIHx8ICJTZWxlY3QgYW4gb3B0aW9uIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9uQm94ICR7dGhpcy5pc09wZW5lZCA/ICJzaG93IiA6ICIifSAke3RoaXMub3BlbnNUb1RvcCA/ICJ0b3AiIDogImJvdHRvbSJ9Ij4KICAgICAgICAgICAgJHt0aGlzLmVuYWJsZVNlYXJjaCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBvcHRpb25zLi4uIiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0iJHt0aGlzLnNlYXJjaFZhbHVlfSIKICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0iJHt0aGlzLmhhbmRsZVNlYXJjaH0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfSIKICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bn0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0ibm8tb3B0aW9ucyI+Tm8gb3B0aW9ucyBmb3VuZDwvZGl2PmAgOiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbjIsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4MjsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcHRpb24gJHtpc0hpZ2hsaWdodGVkID8gImhpZ2hsaWdodGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMudXBkYXRlU2VsZWN0aW9uKG9wdGlvbjIpfSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9IiR7KCkgPT4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXgyfSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtvcHRpb24yLm9wdGlvbn0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCBudWxsOwogICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIm9wdGlvbnMiKSkgewogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICB9CiAgICB9CiAgICBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uOwogICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGVkT3B0aW9uIiwgewogICAgICAgIGRldGFpbDogc2VsZWN0ZWRPcHRpb24sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICIiOwogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICB9CiAgICB9KTsKICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpIHsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpOwogICAgICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZEJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207CiAgICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wOwogICAgICAgIHRoaXMub3BlbnNUb1RvcCA9IHNwYWNlQmVsb3cgPCAzMDAgJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3c7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoIGlucHV0Iik7CiAgICAgICAgaWYgKHNlYXJjaElucHV0KSB7CiAgICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgIH0sIDApOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hUZXJtOwogICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24yKSA9PiBvcHRpb24yLm9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSk7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7CiAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTsKICAgICAgaWYgKGtleTIgPT09ICJBcnJvd0Rvd24iKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggKyAxID4gbWF4SW5kZXggPyAwIDogdGhpcy5oaWdobGlnaHRlZEluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChrZXkyID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCAtIDEgPCAwID8gbWF4SW5kZXggOiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxOwogICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJFbnRlciIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoa2V5MiA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTZWxlY3RlZEJveEtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50LmtleSA9PT0gIiAiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghdGhpcy5pc09wZW5lZCkgewogICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxOCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tc2hlbGwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMTYwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogICAgICAgICAgLmRlbW8tZ3JpZC0tdHdvIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc3RhY2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTUgMjAlIDI2JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMyAxMDAlIDk3JSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzIlKSIsICJoc2woMjE1IDIwJSA4MiUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDQ1JSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNoZWxsIj4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTW9kZXJuIGZpbGUgdXBsb2FkZXIifQogICAgICAgIC5zdWJ0aXRsZT0keyJTaGFkY24taW5zcGlyZWQgbGF5b3V0IHdpdGggZHJhZyAmIGRyb3AsIHByZXZpZXdzIGFuZCB2YWxpZGF0aW9uIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCBkZW1vLWdyaWQtLXR3byI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgeW91ciByZXF1ZXN0In0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyosLnBkZiwuemlwIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezEwICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQnJhbmQgYXNzZXRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGhpZ2gtcmVzb2x1dGlvbiBpbWFnZXJ5IChKUEcvUE5HKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS9qcGVnLGltYWdlL3BuZyJ9CiAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm1heFNpemU9JHs1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgICAgLmJ1dHRvblRleHQ9JHsiU2VsZWN0IGNvdmVyIGltYWdlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQXVkaW8gdXBsb2FkcyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNoYXJlIHBvZGNhc3QgZHJhZnRzIChNUDMvV0FWLCBtYXggMjVNQiBlYWNoKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJhdWRpby8qIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezI1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgZXhhbXBsZSJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZGVyIGlzIGRpc2FibGVkIHdoaWxlIG1vZGVyYXRpb24gaXMgcGVuZGluZyJ9CiAgICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkZvcm0gaW50ZWdyYXRpb24ifQogICAgICAgIC5zdWJ0aXRsZT0keyJDb21iaW5lIGZpbGUgdXBsb2FkcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBERUVTIGZvcm0gZWNvc3lzdGVtIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBuYW1lIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIb3cgc2hvdWxkIHdlIHJlZmVyIHRvIHRoaXMgcHJvamVjdCBpbnRlcm5hbGx5PyJ9CiAgICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0TmFtZSJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ29udGFjdCBlbWFpbCJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7ImVtYWlsIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgICAua2V5PSR7ImNvbnRhY3RFbWFpbCJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiU3RhdGVtZW50IG9mIHdvcmsifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBhIHNpZ25lZCBzdGF0ZW1lbnQgb2Ygd29yayAoUERGLCBtYXggMTVNQikifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAgIC5hY2NlcHQ9JHsiYXBwbGljYXRpb24vcGRmIn0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7MTUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgICAgIC5tdWx0aXBsZT0ke2ZhbHNlfQogICAgICAgICAgICAgICAgLmtleT0keyJzb3cifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IkNyZWF0aXZlIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsLiBVcGxvYWQgdXAgdG8gZml2ZSB2aXN1YWwgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyoifQogICAgICAgICAgICAgICAgLm1heEZpbGVzPSR7NX0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7OCAqIDEwMjQgKiAxMDI0fQogICAgICAgICAgICAgICAgLmtleT0keyJyZWZlcmVuY2VzIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJOb3RlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIG9wdGlvbmFsIGNvbnRleHQgZm9yIHJldmlld2VycyJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgICAgIC5rZXk9JHsibm90ZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IGJyaWVmaW5nIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGVlcy1mb3JtPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+R29vZCB0byBrbm93Ojwvc3Ryb25nPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkRyYWcgJiBkcm9wIGhpZ2hsaWdodHMgdGhlIGRyb3B6b25lIGFuZCBzdXBwb3J0cyBrZXlib2FyZCBhY3RpdmF0aW9uLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHN1bW1hcmlzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSA8Y29kZT5hY2NlcHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgogICAgICAgICAgICAgIDxsaT5JbWFnZSB1cGxvYWRzIHNob3cgbGl2ZSBwcmV2aWV3cyBnZW5lcmF0ZWQgdmlhIDxjb2RlPlVSTC5jcmVhdGVPYmplY3RVUkw8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpPkZpbGUgc2l6ZSBhbmQgZmlsZS1jb3VudCBsaW1pdHMgc3VyZmFjZSBpbmxpbmUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UaGUgY29tcG9uZW50IHN0YXlzIGNvbXBhdGlibGUgd2l0aCA8Y29kZT5kZWVzLWZvcm08L2NvZGU+IHZhbHVlIGFjY2Vzc29ycy48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBmaWxldXBsb2FkU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgaWAKICAgIDpob3N0IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCgogICAgLmlucHV0LXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmRyb3B6b25lIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICBib3JkZXI6IDEuNXB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgODAlKSIsICJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDEyJSkiKX0sCiAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjUpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDMycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUsIDIzLCA0MiwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTElKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWRpc2FibGVkIHsKICAgICAgb3BhY2l0eTogMC42OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2JvZHkgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCAiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZSB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCAiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCAiaHNsKDIxMyA5MyUgMTglKSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwgImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwgImhzbCgyMTcgMjUlIDI2JSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5maWxlLXJvdzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC44KSIsICJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCgogICAgLnRodW1iLWltYWdlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICB9CgogICAgLmZpbGUtbWV0YSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmZpbGUtbmFtZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsICJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAzMiUgMjglKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NiUpIiwgImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsICJoc2woMCA2MiUgMzIlIC8gMC4xNSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIlIDQ2JSkiLCAiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMjYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRGaWxldXBsb2FkID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1maWxldXBsb2FkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3N0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9idXR0b25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9idXR0b25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnV0dG9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0X2RlY29yYXRvcnM7CiAgbGV0IF9hY2NlcHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2RlY29yYXRvcnM7CiAgbGV0IF9tdWx0aXBsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc3RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzTG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYnV0dG9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FjY2VwdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX211bHRpcGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tYXhGaWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfc3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGF0ZV9pbml0aWFsaXplcnMsIF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0xvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9idXR0b25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJ1dHRvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJ1dHRvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnV0dG9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnV0dG9uVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9idXR0b25UZXh0X2luaXRpYWxpemVycywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfYWNjZXB0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdF9pbml0aWFsaXplcnMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbXVsdGlwbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXVsdGlwbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11bHRpcGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11bHRpcGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tdWx0aXBsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIF9tdWx0aXBsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9tYXhTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhTaXplX2luaXRpYWxpemVycywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbWF4RmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RmlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEZpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhGaWxlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIF9tYXhGaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfaW5pdGlhbGl6ZXJzLCAiaWRsZSIpKTsKICAgIGdldCBzdGF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzTG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTG9hZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCAiU2VsZWN0IGZpbGVzIikpOwogICAgZ2V0IGJ1dHRvblRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNidXR0b25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnV0dG9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjY2VwdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbXVsdGlwbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBtdWx0aXBsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbXVsdGlwbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyBubyBsaW1pdAogICAgc2V0IG1heFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhGaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhGaWxlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyAwIG1lYW5zIG5vIGxpbWl0CiAgICBzZXQgbWF4RmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksICIiKTsKICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBwcmV2aWV3VXJsTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBkcm9wQXJlYSA9IG51bGw7CiAgICBzdGF0aWMgc3R5bGVzID0gZmlsZXVwbG9hZFN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWNjZXB0ZWRTdW1tYXJ5ID0gdGhpcy5nZXRBY2NlcHRlZFN1bW1hcnkoKTsKICAgICAgY29uc3QgbWV0YUVudHJpZXMgPSBbCiAgICAgICAgdGhpcy5tdWx0aXBsZSA/ICJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiIDogIlNpbmdsZSBmaWxlIG9ubHkiLAogICAgICAgIHRoaXMubWF4U2l6ZSA+IDAgPyBgTWF4ICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWAgOiAiTm8gc2l6ZSBsaW1pdCIKICAgICAgXTsKICAgICAgaWYgKGFjY2VwdGVkU3VtbWFyeSkgewogICAgICAgIG1ldGFFbnRyaWVzLnB1c2goYEFjY2VwdHMgJHthY2NlcHRlZFN1bW1hcnl9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZSA9PT0gImRyYWdPdmVyIiA/ICJkcm9wem9uZS0tYWN0aXZlIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZHJvcHpvbmUtLWRpc2FibGVkIiA6ICIifSAke3RoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJkcm9wem9uZS0taGFzLWZpbGVzIiA6ICIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IC0xIDogMH0KICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgYXJpYS1sYWJlbD0ke2BTZWxlY3QgZmlsZXMke2FjY2VwdGVkU3VtbWFyeSA/IGAgKCR7YWNjZXB0ZWRTdW1tYXJ5fSlgIDogIiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8ICIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nID8gYjJgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHQgfHwgIlNlbGVjdCBmaWxlcyJ9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fc3VibGluZSI+CiAgICAgICAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IKICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcHpvbmVfX2Jyb3dzZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVCcm93c2VDbGlja30KICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgYnJvd3NlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fbWV0YSI+CiAgICAgICAgICAgICR7bWV0YUVudHJpZXMubWFwKChlbnRyeSkgPT4gYjJgPHNwYW4+JHtlbnRyeX08L3NwYW4+YCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5yZW5kZXJGaWxlTGlzdCgpfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZSA/IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSIgYXJpYS1saXZlPSJwb2xpdGUiPiR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZX08L2Rpdj5gIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRmlsZUxpc3QoKSB7CiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2hlYWRlciI+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMSA/ICIiIDogInMifSBzZWxlY3RlZDwvc3Bhbj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gYjJgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoID4gMSA/ICJhbGwiIDogIiJ9PC9idXR0b24+YCA6IGIyYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKChmaWxlKSA9PiB0aGlzLnJlbmRlckZpbGVSb3coZmlsZSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWxlUm93KGZpbGUpIHsKICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICBjb25zdCBwcmV2aWV3VXJsID0gdGhpcy5jYW5TaG93UHJldmlldyhmaWxlKSA/IHRoaXMuZ2V0UHJldmlld1VybChmaWxlKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1yb3cgJHtmaWxlVHlwZX0tZmlsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS10aHVtYiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgJHtwcmV2aWV3VXJsID8gYjJgPGltZyBjbGFzcz0idGh1bWItaW1hZ2UiIHNyYz0ke3ByZXZpZXdVcmx9IGFsdD0ke2BQcmV2aWV3IG9mICR7ZmlsZS5uYW1lfWB9PmAgOiBiMmA8ZGVlcy1pY29uIGljb249JHt0aGlzLmdldEZpbGVJY29uKGZpbGUpfT48L2RlZXMtaWNvbj5gfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbWV0YSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSR7ZmlsZS5uYW1lfT4ke2ZpbGUubmFtZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtZGV0YWlscyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPiR7dGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfTwvc3Bhbj4KICAgICAgICAgICAgJHtmaWxlVHlwZSAhPT0gImZpbGUiID8gYjJgPHNwYW4gY2xhc3M9ImZpbGUtdHlwZSI+JHtmaWxlVHlwZX08L3NwYW4+YCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGNsYXNzPSJyZW1vdmUtYnV0dG9uIgogICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUZpbGUoZmlsZSl9CiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgUmVtb3ZlICR7ZmlsZS5uYW1lfWB9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZUZpbGVJbnB1dENoYW5nZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSh0YXJnZXQuZmlsZXMgPz8gW10pOwogICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICB9CiAgICAgIHRhcmdldC52YWx1ZSA9ICIiOwogICAgfTsKICAgIGhhbmRsZURyb3B6b25lQ2xpY2sgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZHJvcHpvbmVfX2Jyb3dzZSwgLmZpbGUtbGlzdCIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVTZWxlY3RvcigpOwogICAgfTsKICAgIGhhbmRsZUJyb3dzZUNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgIH07CiAgICBoYW5kbGVEcm9wem9uZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiB8fCBldmVudC5rZXkgPT09ICIgIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCk7CiAgICAgIH0KICAgIH07CiAgICBoYW5kbGVDbGVhckFsbCA9IChldmVudCkgPT4gewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmNsZWFyQWxsKCk7CiAgICB9OwogICAgaGFuZGxlRHJhZ0V2ZW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyYWdlbnRlciIgfHwgZXZlbnQudHlwZSA9PT0gImRyYWdvdmVyIikgewogICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHsKICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRyYWdPdmVyIjsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJkcmFnbGVhdmUiKSB7CiAgICAgICAgaWYgKCF0aGlzLmRyb3BBcmVhKSB7CiAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB7IGNsaWVudFggPSAwLCBjbGllbnRZID0gMCB9ID0gZXZlbnQ7CiAgICAgICAgaWYgKGNsaWVudFggPD0gcmVjdC5sZWZ0IHx8IGNsaWVudFggPj0gcmVjdC5yaWdodCB8fCBjbGllbnRZIDw9IHJlY3QudG9wIHx8IGNsaWVudFkgPj0gcmVjdC5ib3R0b20pIHsKICAgICAgICAgIHRoaXMuc3RhdGUgPSAiaWRsZSI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyb3AiKSB7CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJpZGxlIjsKICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcyA/PyBbXSk7CiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGF0dGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5kcm9wQXJlYSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBbImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcmFnbGVhdmUiLCAiZHJvcCJdLmZvckVhY2goKGV2ZW50TmFtZSkgPT4gewogICAgICAgIHRoaXMuZHJvcEFyZWEuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMuaGFuZGxlRHJhZ0V2ZW50KTsKICAgICAgfSk7CiAgICB9CiAgICBkZXRhY2hEcm9wTGlzdGVuZXJzKCkgewogICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICB0aGlzLmRyb3BBcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLmhhbmRsZURyYWdFdmVudCk7CiAgICAgIH0pOwogICAgfQogICAgcmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpIHsKICAgICAgY29uc3QgbmV3RHJvcEFyZWEgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wem9uZSIpOwogICAgICBpZiAobmV3RHJvcEFyZWEgIT09IHRoaXMuZHJvcEFyZWEpIHsKICAgICAgICB0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKTsKICAgICAgICB0aGlzLmRyb3BBcmVhID0gbmV3RHJvcEFyZWE7CiAgICAgICAgdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgIH0KICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgICAgIGNvbnN0IHVuaXRzMiA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSksIHVuaXRzMi5sZW5ndGggLSAxKTsKICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZXhwb25lbnQpOwogICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChzaXplICogMTAwKSAvIDEwMH0gJHt1bml0czJbZXhwb25lbnRdfWA7CiAgICB9CiAgICBnZXRGaWxlVHlwZShmaWxlKSB7CiAgICAgIGNvbnN0IHR5cGU1ID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICByZXR1cm4gImltYWdlIjsKICAgICAgaWYgKHR5cGU1ID09PSAiYXBwbGljYXRpb24vcGRmIikKICAgICAgICByZXR1cm4gInBkZiI7CiAgICAgIGlmICh0eXBlNS5pbmNsdWRlcygid29yZCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJkb2N1bWVudCIpKQogICAgICAgIHJldHVybiAiZG9jIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJzaGVldCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJleGNlbCIpKQogICAgICAgIHJldHVybiAic3ByZWFkc2hlZXQiOwogICAgICBpZiAodHlwZTUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpIHx8IHR5cGU1LmluY2x1ZGVzKCJwb3dlcnBvaW50IikpCiAgICAgICAgcmV0dXJuICJwcmVzZW50YXRpb24iOwogICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAgICAgICAgcmV0dXJuICJ2aWRlbyI7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJhdWRpby8iKSkKICAgICAgICByZXR1cm4gImF1ZGlvIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ6aXAiKSB8fCB0eXBlNS5pbmNsdWRlcygiY29tcHJlc3NlZCIpKQogICAgICAgIHJldHVybiAiYXJjaGl2ZSI7CiAgICAgIHJldHVybiAiZmlsZSI7CiAgICB9CiAgICBnZXRGaWxlSWNvbihmaWxlKSB7CiAgICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5nZXRGaWxlVHlwZShmaWxlKTsKICAgICAgY29uc3QgaWNvbk1hcCA9IHsKICAgICAgICBpbWFnZTogImx1Y2lkZTpGaWxlSW1hZ2UiLAogICAgICAgIHBkZjogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgZG9jOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICBzcHJlYWRzaGVldDogImx1Y2lkZTpGaWxlU3ByZWFkc2hlZXQiLAogICAgICAgIHByZXNlbnRhdGlvbjogImx1Y2lkZTpGaWxlQmFyQ2hhcnQiLAogICAgICAgIHZpZGVvOiAibHVjaWRlOkZpbGVWaWRlbyIsCiAgICAgICAgYXVkaW86ICJsdWNpZGU6RmlsZUF1ZGlvIiwKICAgICAgICBhcmNoaXZlOiAibHVjaWRlOkZpbGVBcmNoaXZlIiwKICAgICAgICBmaWxlOiAibHVjaWRlOkZpbGUiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uTWFwW2ZpbGVUeXBlXSA/PyAibHVjaWRlOkZpbGUiOwogICAgfQogICAgY2FuU2hvd1ByZXZpZXcoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpICYmIGZpbGUuc2l6ZSA8IDUgKiAxMDI0ICogMTAyNDsKICAgIH0KICAgIHZhbGlkYXRlRmlsZShmaWxlKSB7CiAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSAiJHtmaWxlLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YDsKICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYWNjZXB0KSB7CiAgICAgICAgY29uc3QgYWNjZXB0ZWRUeXBlcyA9IHRoaXMuYWNjZXB0LnNwbGl0KCIsIikubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKTsKICAgICAgICBpZiAoYWNjZXB0ZWRUeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBsZXQgaXNBY2NlcHRlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBhY2NlcHRUeXBlIG9mIGFjY2VwdGVkVHlwZXMpIHsKICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGUuc3RhcnRzV2l0aCgiLiIpKSB7CiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGFjY2VwdFR5cGUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIGlzQWNjZXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFjY2VwdFR5cGUuZW5kc1dpdGgoIi8qIikpIHsKICAgICAgICAgICAgICBjb25zdCBwcmVmaXg0ID0gYWNjZXB0VHlwZS5zbGljZSgwLCAtMik7CiAgICAgICAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKHByZWZpeDQpKSB7CiAgICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IGFjY2VwdFR5cGUpIHsKICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpc0FjY2VwdGVkKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSB0eXBlIG5vdCBhY2NlcHRlZC4gQWxsb3dlZDogJHthY2NlcHRlZFR5cGVzLmpvaW4oIiwgIil9YDsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXRQcmV2aWV3VXJsKGZpbGUpIHsKICAgICAgbGV0IHVybCA9IHRoaXMucHJldmlld1VybE1hcC5nZXQoZmlsZSk7CiAgICAgIGlmICghdXJsKSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuc2V0KGZpbGUsIHVybCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVybDsKICAgIH0KICAgIHJlbGVhc2VQcmV2aWV3KGZpbGUpIHsKICAgICAgY29uc3QgdXJsID0gdGhpcy5wcmV2aWV3VXJsTWFwLmdldChmaWxlKTsKICAgICAgaWYgKHVybCkgewogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuZGVsZXRlKGZpbGUpOwogICAgICB9CiAgICB9CiAgICBnZXRBY2NlcHRlZFN1bW1hcnkoKSB7CiAgICAgIGlmICghdGhpcy5hY2NlcHQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZWQgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDApLm1hcCgodG9rZW4pID0+IHRoaXMuZm9ybWF0QWNjZXB0VG9rZW4odG9rZW4pKSkpLmZpbHRlcihCb29sZWFuKTsKICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBmb3JtYXR0ZWRbMF07CiAgICAgIH0KICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDIpIHsKICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkWzBdfSwgJHtmb3JtYXR0ZWRbMV19YDsKICAgICAgfQogICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkLnNsaWNlKDAsIDIpLmpvaW4oIiwgIil9XHUyMDI2YDsKICAgIH0KICAgIGZvcm1hdEFjY2VwdFRva2VuKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiA9PT0gIiovKiIpIHsKICAgICAgICByZXR1cm4gIkFsbCBmaWxlcyI7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKCIvKiIpKSB7CiAgICAgICAgY29uc3QgZmFtaWx5ID0gdG9rZW4uc3BsaXQoIi8iKVswXTsKICAgICAgICBpZiAoIWZhbWlseSkgewogICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7ZmFtaWx5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7ZmFtaWx5LnNsaWNlKDEpfSBmaWxlc2A7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgIHJldHVybiB0b2tlbi5zbGljZSgxKS50b1VwcGVyQ2FzZSgpOwogICAgICB9CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicGRmIikpCiAgICAgICAgcmV0dXJuICJQREYiOwogICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInppcCIpKQogICAgICAgIHJldHVybiAiWklQIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJqc29uIikpCiAgICAgICAgcmV0dXJuICJKU09OIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgICByZXR1cm4gIkRPQyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpKQogICAgICAgIHJldHVybiAiRE9DWCI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygiZXhjZWwiKSkKICAgICAgICByZXR1cm4gIlhMUyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicHJlc2VudGF0aW9uIikpCiAgICAgICAgcmV0dXJuICJQUFQiOwogICAgICBjb25zdCBzZWdtZW50cyA9IHRva2VuLnNwbGl0KCIvIik7CiAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gc2VnbWVudHMucG9wKCkgPz8gdG9rZW47CiAgICAgIHJldHVybiBsYXN0U2VnbWVudC50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgYXR0YWNoTGlmZWN5Y2xlTGlzdGVuZXJzKCkgewogICAgICB0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKTsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygidmFsdWUiKSkgewogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB9CiAgICAgIHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHRoaXMuZGV0YWNoRHJvcExpc3RlbmVycygpOwogICAgICB0aGlzLnZhbHVlLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnByZXZpZXdVcmxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNMb2FkaW5nKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTsKICAgICAgY29uc3QgaW5wdXRGaWxlID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZmlsZS1pbnB1dCIpOwogICAgICBpZiAoIWlucHV0RmlsZSkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZmlsZXMgfHwgaW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgIH0sIDMwMCk7CiAgICAgIH07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgaW5wdXRGaWxlLmNsaWNrKCk7CiAgICB9CiAgICByZW1vdmVGaWxlKGZpbGUpIHsKICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy52YWx1ZS5pbmRleE9mKGZpbGUpOwogICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpOwogICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjbGVhckFsbCgpIHsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgdGhpcy52YWx1ZSA9IFtdOwogICAgICBleGlzdGluZ0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICB9CiAgICBhc3luYyB1cGRhdGVWYWx1ZShldmVudEFyZykgewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHRhcmdldC5maWxlcyA/PyBbXSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICB2b2lkIHRoaXMudmFsaWRhdGUoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIGFzeW5jIGFkZEZpbGVzKGZpbGVzKSB7CiAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSBbXTsKICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICBmaWxlc1RvQWRkLnB1c2goZmlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heEZpbGVzID4gMCkgewogICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSB0aGlzLnZhbHVlLmxlbmd0aCArIGZpbGVzVG9BZGQubGVuZ3RoOwogICAgICAgIGlmICh0b3RhbEZpbGVzID4gdGhpcy5tYXhGaWxlcykgewogICAgICAgICAgY29uc3QgYWxsb3dlZENvdW50ID0gdGhpcy5tYXhGaWxlcyAtIHRoaXMudmFsdWUubGVuZ3RoOwogICAgICAgICAgaWYgKGFsbG93ZWRDb3VudCA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWF4aW11bSAke3RoaXMubWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgOwogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmlsZXNUb0FkZC5zcGxpY2UoYWxsb3dlZENvdW50KTsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgT25seSAke2FsbG93ZWRDb3VudH0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGA7CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ3YXJuIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGZpbGVzVG9BZGQubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlc1RvQWRkWzBdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlLnB1c2goLi4uZmlsZXNUb0FkZCk7CiAgICAgIH0KICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gIiI7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBmaWxlIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMudmFsdWUpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gdGhpcy52YWx1ZS5sZW5ndGggPiAwID8gInZhbGlkIiA6IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMKZnVuY3Rpb24gaXNWYWxpZElCQU4oaWJhbiwgdmFsaWRhdGlvbk9wdGlvbnMpIHsKICBpZiAodmFsaWRhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgdmFsaWRhdGlvbk9wdGlvbnMgPSB7IGFsbG93UVJJQkFOOiB0cnVlIH07CiAgfQogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlswLTldezJ9JCIsICIiKTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICBpZiAoc3BlYyA9PT0gdm9pZCAwIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCkKICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gc3BlYy5jaGFycyA9PT0gaWJhbi5sZW5ndGggJiYgcmVnLnRlc3QoaWJhbi5zbGljZSgyLCA0KSkgJiYgaXNWYWxpZEJCQU4oaWJhbi5zbGljZSg0KSwgY291bnRyeUNvZGUpICYmIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgJiYgKHZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOIHx8ICFpc1FSSUJBTihpYmFuKSk7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNJQkFOOwooZnVuY3Rpb24oVmFsaWRhdGlvbkVycm9yc0lCQU4yKSB7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiTm9JQkFOUHJvdmlkZWQiXSA9IDBdID0gIk5vSUJBTlByb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Db3VudHJ5Il0gPSAxXSA9ICJOb0lCQU5Db3VudHJ5IjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0JCQU5MZW5ndGgiXSA9IDJdID0gIldyb25nQkJBTkxlbmd0aCI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdCQkFORm9ybWF0Il0gPSAzXSA9ICJXcm9uZ0JCQU5Gb3JtYXQiOwogIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIkNoZWNrc3VtTm90TnVtYmVyIl0gPSA0XSA9ICJDaGVja3N1bU5vdE51bWJlciI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdJQkFOQ2hlY2tzdW0iXSA9IDVdID0gIldyb25nSUJBTkNoZWNrc3VtIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0iXSA9IDZdID0gIldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiUVJJQkFOTm90QWxsb3dlZCJdID0gN10gPSAiUVJJQkFOTm90QWxsb3dlZCI7Cn0pKFZhbGlkYXRpb25FcnJvcnNJQkFOIHx8IChWYWxpZGF0aW9uRXJyb3JzSUJBTiA9IHt9KSk7CmZ1bmN0aW9uIHZhbGlkYXRlSUJBTihpYmFuLCB2YWxpZGF0aW9uT3B0aW9ucykgewogIGlmICh2YWxpZGF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7CiAgICB2YWxpZGF0aW9uT3B0aW9ucyA9IHsgYWxsb3dRUklCQU46IHRydWUgfTsKICB9CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGliYW4gIT09IHZvaWQgMCAmJiBpYmFuICE9PSBudWxsICYmIGliYW4gIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tpYmFuLnNsaWNlKDAsIDIpXTsKICAgIGlmICghc3BlYyB8fCAhKHNwZWMuYmJhbl9yZWdleHAgfHwgc3BlYy5jaGFycykpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOQ291bnRyeSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmNoYXJzICYmIHNwZWMuY2hhcnMgIT09IGliYW4ubGVuZ3RoKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmJiYW5fcmVnZXhwICYmICFjaGVja0Zvcm1hdEJCQU4oaWJhbi5zbGljZSg0KSwgc3BlYy5iYmFuX3JlZ2V4cCkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdCQkFORm9ybWF0KTsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMgJiYgIXNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoaWJhbi5zbGljZSg0KSkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdBY2NvdW50QmFua0JyYW5jaENoZWNrc3VtKTsKICAgIH0KICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeWzAtOV17Mn0kIiwgIiIpOwogICAgaWYgKCFyZWcudGVzdChpYmFuLnNsaWNlKDIsIDQpKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5DaGVja3N1bU5vdE51bWJlcik7CiAgICB9CiAgICBpZiAocmVzdWx0LmVycm9yQ29kZXMuaW5kZXhPZihWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0JCQU5Gb3JtYXQpICE9PSAtMSB8fCAhaXNWYWxpZElCQU5DaGVja3N1bShpYmFuKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0lCQU5DaGVja3N1bSk7CiAgICB9CiAgICBpZiAoIXZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOICYmIGlzUVJJQkFOKGliYW4pKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLlFSSUJBTk5vdEFsbG93ZWQpOwogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOUHJvdmlkZWQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGlzVmFsaWRCQkFOKGJiYW4sIGNvdW50cnlDb2RlKSB7CiAgaWYgKGJiYW4gPT09IHZvaWQgMCB8fCBiYmFuID09PSBudWxsIHx8IGNvdW50cnlDb2RlID09PSB2b2lkIDAgfHwgY291bnRyeUNvZGUgPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbY291bnRyeUNvZGVdOwogIGlmIChzcGVjID09PSB2b2lkIDAgfHwgc3BlYyA9PT0gbnVsbCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSB2b2lkIDAgfHwgc3BlYy5iYmFuX3JlZ2V4cCA9PT0gbnVsbCB8fCBzcGVjLmNoYXJzID09PSB2b2lkIDAgfHwgc3BlYy5jaGFycyA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoc3BlYy5jaGFycyAtIDQgPT09IGJiYW4ubGVuZ3RoICYmIGNoZWNrRm9ybWF0QkJBTihiYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgaWYgKHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMpIHsKICAgICAgcmV0dXJuIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gaXNTRVBBQ291bnRyeShjb3VudHJ5Q29kZSkgewogIGlmIChjb3VudHJ5Q29kZSAhPT0gdm9pZCAwICYmIGNvdW50cnlDb2RlICE9PSBudWxsKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tjb3VudHJ5Q29kZV07CiAgICBpZiAoc3BlYyAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBzcGVjLlNFUEEgPyBzcGVjLlNFUEEgOiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGlzUVJJQkFOKGliYW4pIHsKICBpZiAoaWJhbiA9PT0gdm9pZCAwIHx8IGliYW4gPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIGNvdW50cnlDb2RlID0gaWJhbi5zbGljZSgwLCAyKTsKICB2YXIgUVJJQkFOQ291bnRyaWVzID0gWyJMSSIsICJDSCJdOwogIGlmICghUVJJQkFOQ291bnRyaWVzLmluY2x1ZGVzKGNvdW50cnlDb2RlKSkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXjNbMC0xXXsxfVswLTldezN9JCIsICIiKTsKICByZXR1cm4gcmVnLnRlc3QoaWJhbi5zbGljZSg0LCA5KSk7Cn0KZnVuY3Rpb24gY29tcG9zZUlCQU4ocGFyYW1zMikgewogIHZhciBmb3JtYXRlZF9iYmFuID0gZWxlY3Ryb25pY0Zvcm1hdElCQU4ocGFyYW1zMi5iYmFuKSB8fCAiIjsKICBpZiAocGFyYW1zMi5jb3VudHJ5Q29kZSA9PT0gbnVsbCB8fCBwYXJhbXMyLmNvdW50cnlDb2RlID09PSB2b2lkIDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1twYXJhbXMyLmNvdW50cnlDb2RlXTsKICBpZiAoZm9ybWF0ZWRfYmJhbiAhPT0gIiIgJiYgc3BlYyAhPT0gdm9pZCAwICYmIHNwZWMuY2hhcnMgJiYgc3BlYy5jaGFycyAhPT0gbnVsbCAmJiBzcGVjLmNoYXJzID09PSBmb3JtYXRlZF9iYmFuLmxlbmd0aCArIDQgJiYgc3BlYy5iYmFuX3JlZ2V4cCAmJiBzcGVjLmJiYW5fcmVnZXhwICE9PSBudWxsICYmIGNoZWNrRm9ybWF0QkJBTihmb3JtYXRlZF9iYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgdmFyIGNoZWNrc29tID0gbW9kOTcxMEliYW4ocGFyYW1zMi5jb3VudHJ5Q29kZSArICIwMCIgKyBmb3JtYXRlZF9iYmFuKTsKICAgIHJldHVybiBwYXJhbXMyLmNvdW50cnlDb2RlICsgKCIwIiArICg5OCAtIGNoZWNrc29tKSkuc2xpY2UoLTIpICsgZm9ybWF0ZWRfYmJhbjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gZXh0cmFjdElCQU4oaWJhbikgewogIHZhciByZXN1bHQgPSB7fTsKICB2YXIgZUZvcm1hdElCQU4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICByZXN1bHQuaWJhbiA9IGVGb3JtYXRJQkFOIHx8IGliYW47CiAgaWYgKCEhZUZvcm1hdElCQU4gJiYgaXNWYWxpZElCQU4oZUZvcm1hdElCQU4pKSB7CiAgICByZXN1bHQuYmJhbiA9IGVGb3JtYXRJQkFOLnNsaWNlKDQpOwogICAgcmVzdWx0LmNvdW50cnlDb2RlID0gZUZvcm1hdElCQU4uc2xpY2UoMCwgMik7CiAgICByZXN1bHQudmFsaWQgPSB0cnVlOwogICAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbcmVzdWx0LmNvdW50cnlDb2RlXTsKICAgIGlmIChzcGVjLmFjY291bnRfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5hY2NvdW50X2luZGVudGlmaWVyLnNwbGl0KCItIik7CiAgICAgIHZhciBzdGFydGluZyA9IHBhcnNlSW50KGFjWzBdKTsKICAgICAgdmFyIGVuZGluZyA9IHBhcnNlSW50KGFjWzFdKTsKICAgICAgcmVzdWx0LmFjY291bnROdW1iZXIgPSByZXN1bHQuaWJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5iYW5rX2lkZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5iYW5rX2lkZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYmFua0lkZW50aWZpZXIgPSByZXN1bHQuYmJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5icmFuY2hfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5icmFuY2hfaW5kZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYnJhbmNoSWRlbnRpZmllciA9IHJlc3VsdC5iYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2hlY2tGb3JtYXRCQkFOKGJiYW4sIGJmb3JtYXQpIHsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cChiZm9ybWF0LCAiIik7CiAgcmV0dXJuIHJlZy50ZXN0KGJiYW4pOwp9CmZ1bmN0aW9uIGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pIHsKICBpZiAodHlwZW9mIGliYW4gIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGliYW4ucmVwbGFjZSgvWy1cIF0vZywgIiIpLnRvVXBwZXJDYXNlKCk7Cn0KZnVuY3Rpb24gZnJpZW5kbHlGb3JtYXRJQkFOKGliYW4sIHNlcGFyYXRvcikgewogIGlmICh0eXBlb2YgaWJhbiAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgfHwgc2VwYXJhdG9yID09PSBudWxsKSB7CiAgICBzZXBhcmF0b3IgPSAiICI7CiAgfQogIHZhciBlbGVjdHJvbmljX2liYW4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICBpZiAoZWxlY3Ryb25pY19pYmFuID09PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGVsZWN0cm9uaWNfaWJhbi5yZXBsYWNlKC8oLns0fSkoPyEkKS9nLCAiJDEiICsgc2VwYXJhdG9yKTsKfQpmdW5jdGlvbiBpc1ZhbGlkSUJBTkNoZWNrc3VtKGliYW4pIHsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBwcm92aWRlZENoZWNrc3VtID0gcGFyc2VJbnQoaWJhbi5zbGljZSgyLCA0KSwgMTApOwogIHZhciBiYmFuID0gaWJhbi5zbGljZSg0KTsKICB2YXIgdmFsaWRhdGlvblN0cmluZyA9IHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKCIiLmNvbmNhdChiYmFuKS5jb25jYXQoY291bnRyeUNvZGUsICIwMCIpKTsKICB2YXIgcmVzdCA9IG1vZDk3MTAodmFsaWRhdGlvblN0cmluZyk7CiAgcmV0dXJuIDk4IC0gcmVzdCA9PT0gcHJvdmlkZWRDaGVja3N1bTsKfQpmdW5jdGlvbiByZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShzdHIpIHsKICByZXR1cm4gc3RyLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYzExKSB7CiAgICB2YXIgY29kZTQgPSBjMTEuY2hhckNvZGVBdCgwKTsKICAgIHJldHVybiBjb2RlNCA+PSA2NSA/IChjb2RlNCAtIDU1KS50b1N0cmluZygpIDogYzExOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG1vZDk3MTBJYmFuKGliYW4pIHsKICByZXR1cm4gbW9kOTcxMChyZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShpYmFuLnNsaWNlKDQpICsgaWJhbi5zbGljZSgwLCA0KSkpOwp9CmZ1bmN0aW9uIGdldENvdW50cnlTcGVjaWZpY2F0aW9ucygpIHsKICB2YXIgY291bnR5TWFwID0ge307CiAgZm9yICh2YXIgY291bnR5Q29kZSBpbiBjb3VudHJ5U3BlY3MpIHsKICAgIHZhciBjb3VudHkgPSBjb3VudHJ5U3BlY3NbY291bnR5Q29kZV07CiAgICBjb3VudHlNYXBbY291bnR5Q29kZV0gPSB7CiAgICAgIGNoYXJzOiBjb3VudHkuY2hhcnMgfHwgbnVsbCwKICAgICAgYmJhbl9yZWdleHA6IGNvdW50eS5iYmFuX3JlZ2V4cCB8fCBudWxsLAogICAgICBJQkFOUmVnaXN0cnk6IGNvdW50eS5JQkFOUmVnaXN0cnkgfHwgZmFsc2UsCiAgICAgIFNFUEE6IGNvdW50eS5TRVBBIHx8IGZhbHNlCiAgICB9OwogIH0KICByZXR1cm4gY291bnR5TWFwOwp9CmZ1bmN0aW9uIGlzVmFsaWRCSUMoYmljKSB7CiAgaWYgKCFiaWMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwgIiIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2JpYy50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsIDYpXTsKICByZXR1cm4gcmVnLnRlc3QoYmljKSAmJiBzcGVjICE9PSB2b2lkIDA7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNCSUM7CihmdW5jdGlvbihWYWxpZGF0aW9uRXJyb3JzQklDMikgewogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJOb0JJQ1Byb3ZpZGVkIl0gPSAwXSA9ICJOb0JJQ1Byb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzQklDMltWYWxpZGF0aW9uRXJyb3JzQklDMlsiTm9CSUNDb3VudHJ5Il0gPSAxXSA9ICJOb0JJQ0NvdW50cnkiOwogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJXcm9uZ0JJQ0Zvcm1hdCJdID0gMl0gPSAiV3JvbmdCSUNGb3JtYXQiOwp9KShWYWxpZGF0aW9uRXJyb3JzQklDIHx8IChWYWxpZGF0aW9uRXJyb3JzQklDID0ge30pKTsKZnVuY3Rpb24gdmFsaWRhdGVCSUMoYmljKSB7CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGJpYyAhPT0gdm9pZCAwICYmIGJpYyAhPT0gbnVsbCAmJiBiaWMgIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tiaWMudG9VcHBlckNhc2UoKS5zbGljZSg0LCA2KV07CiAgICBpZiAoc3BlYyA9PT0gdm9pZCAwKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNCSUMuTm9CSUNDb3VudHJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeW2EtekEtWl17Nn1bYS16QS1aMC05XXsyfShbYS16QS1aMC05XXszfSk/JCIsICIiKTsKICAgICAgaWYgKCFyZWcudGVzdChiaWMpKSB7CiAgICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzQklDLldyb25nQklDRm9ybWF0KTsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0JJQy5Ob0JJQ1Byb3ZpZGVkKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBleHRyYWN0QklDKGlucHV0QmljKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBiaWMgPSBpbnB1dEJpYy50b1VwcGVyQ2FzZSgpOwogIGlmIChpc1ZhbGlkQklDKGJpYykpIHsKICAgIHJlc3VsdC5iYW5rQ29kZSA9IGJpYy5zbGljZSgwLCA0KTsKICAgIHJlc3VsdC5jb3VudHJ5Q29kZSA9IGJpYy5zbGljZSg0LCA2KTsKICAgIHJlc3VsdC5sb2NhdGlvbkNvZGUgPSBiaWMuc2xpY2UoNiwgOCk7CiAgICByZXN1bHQudGVzdEJJQyA9IHJlc3VsdC5sb2NhdGlvbkNvZGVbMV0gPT09ICIwIiA/IHRydWUgOiBmYWxzZTsKICAgIHJlc3VsdC5icmFuY2hDb2RlID0gYmljLmxlbmd0aCA+IDggPyBiaWMuc2xpY2UoOCkgOiBudWxsOwogICAgcmVzdWx0LnZhbGlkID0gdHJ1ZTsKICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNoZWNrTm9yd2F5QkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs1LCA0LCAzLCAyLCA3LCA2LCA1LCA0LCAzLCAyXTsKICB2YXIgYmJhbldpdGhvdXRTcGFjZXNBbmRQZXJpb2RzID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjb250cm9sRGlnaXQgPSBwYXJzZUludChiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuY2hhckF0KDEwKSwgMTApOwogIHZhciBiYmFuV2l0aG91dENvbnRyb2xEaWdpdCA9IGJiYW5XaXRob3V0U3BhY2VzQW5kUGVyaW9kcy5zdWJzdHJpbmcoMCwgMTApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDEwOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KGJiYW5XaXRob3V0Q29udHJvbERpZ2l0LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbERpZ2l0ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IDExIC0gcmVtYWluZGVyKTsKfTsKdmFyIGNoZWNrQmVsZ2lhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjaGVja2luZ1BhcnQgPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoMCwgc3RyaXBwZWQubGVuZ3RoIC0gMiksIDEwKTsKICB2YXIgY2hlY2tzdW0gPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoc3RyaXBwZWQubGVuZ3RoIC0gMiwgc3RyaXBwZWQubGVuZ3RoKSwgMTApOwogIHZhciByZW1haW5kZXIgPSBjaGVja2luZ1BhcnQgJSA5NyA9PT0gMCA/IDk3IDogY2hlY2tpbmdQYXJ0ICUgOTc7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gY2hlY2tzdW07Cn07CnZhciBtb2Q5NzEwID0gZnVuY3Rpb24odmFsaWRhdGlvblN0cmluZykgewogIHdoaWxlICh2YWxpZGF0aW9uU3RyaW5nLmxlbmd0aCA+IDIpIHsKICAgIHZhciBwYXJ0ID0gdmFsaWRhdGlvblN0cmluZy5zbGljZSgwLCA2KTsKICAgIHZhciBwYXJ0SW50ID0gcGFyc2VJbnQocGFydCwgMTApOwogICAgaWYgKGlzTmFOKHBhcnRJbnQpKSB7CiAgICAgIHJldHVybiBOYU47CiAgICB9CiAgICB2YWxpZGF0aW9uU3RyaW5nID0gcGFydEludCAlIDk3ICsgdmFsaWRhdGlvblN0cmluZy5zbGljZShwYXJ0Lmxlbmd0aCk7CiAgfQogIHJldHVybiBwYXJzZUludCh2YWxpZGF0aW9uU3RyaW5nLCAxMCkgJSA5NzsKfTsKdmFyIGNoZWNrTW9kOTcxMEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciByZW1pbmRlciA9IG1vZDk3MTAoc3RyaXBwZWQpOwogIHJldHVybiByZW1pbmRlciA9PT0gMTsKfTsKdmFyIGNoZWNrUG9sYW5kQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFszLCA5LCA3LCAxLCAzLCA5LCA3XTsKICB2YXIgY29udHJvbERpZ2l0ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNyksIDEwKTsKICB2YXIgdG9DaGVjayA9IGJiYW4uc3Vic3RyaW5nKDAsIDcpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDc7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQodG9DaGVjay5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogIH0KICB2YXIgcmVtYWluZGVyID0gc3VtICUgMTA7CiAgcmV0dXJuIGNvbnRyb2xEaWdpdCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja1NwYWluQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0c0JhbmtCcmFuY2ggPSBbNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogIHZhciB3ZWlnaHRzQWNjb3VudCA9IFsxLCAyLCA0LCA4LCA1LCAxMCwgOSwgNywgMywgNl07CiAgdmFyIGNvbnRyb2xCYW5rQnJhbmNoID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoOCksIDEwKTsKICB2YXIgY29udHJvbEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogIHZhciBiYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgOCk7CiAgdmFyIGFjY291bnQgPSBiYmFuLnN1YnN0cmluZygxMCwgMjApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDg7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYmFua0JyYW5jaC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0JhbmtCcmFuY2hbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sQmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgMTA7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0FjY291bnRbaW5kZXgyXTsKICB9CiAgcmVtYWluZGVyID0gc3VtICUgMTE7CiAgcmV0dXJuIGNvbnRyb2xBY2NvdW50ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja01vZDExMTAgPSBmdW5jdGlvbih0b0NoZWNrLCBjb250cm9sKSB7CiAgdmFyIG5yID0gMTA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVjay5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBuciArPSBwYXJzZUludCh0b0NoZWNrLmNoYXJBdChpbmRleDIpLCAxMCk7CiAgICBpZiAobnIgJSAxMCAhPT0gMCkgewogICAgICBuciA9IG5yICUgMTA7CiAgICB9CiAgICBuciA9IG5yICogMjsKICAgIG5yID0gbnIgJSAxMTsKICB9CiAgcmV0dXJuIGNvbnRyb2wgPT09ICgxMSAtIG5yID09PSAxMCA/IDAgOiAxMSAtIG5yKTsKfTsKdmFyIGNoZWNrQ3JvYXRpYW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBjb250cm9sQmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDYpLCAxMCk7CiAgdmFyIGNvbnRyb2xBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTYpLCAxMCk7CiAgdmFyIGJhbmtCcmFuY2ggPSBiYmFuLnN1YnN0cmluZygwLCA2KTsKICB2YXIgYWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDcsIDE2KTsKICByZXR1cm4gY2hlY2tNb2QxMTEwKGJhbmtCcmFuY2gsIGNvbnRyb2xCYW5rQnJhbmNoKSAmJiBjaGVja01vZDExMTAoYWNjb3VudCwgY29udHJvbEFjY291bnQpOwp9Owp2YXIgY2hlY2tDemVjaEFuZFNsb3Zha0JCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHNQcmVmaXggPSBbMTAsIDUsIDgsIDQsIDIsIDFdOwogIHZhciB3ZWlnaHRzU3VmZml4ID0gWzYsIDMsIDcsIDksIDEwLCA1LCA4LCA0LCAyLCAxXTsKICB2YXIgY29udHJvbFByZWZpeCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDkpLCAxMCk7CiAgdmFyIGNvbnRyb2xTdWZmaXggPSBwYXJzZUludChiYmFuLmNoYXJBdCgxOSksIDEwKTsKICB2YXIgcHJlZml4NCA9IGJiYW4uc3Vic3RyaW5nKDQsIDkpOwogIHZhciBzdWZmaXggPSBiYmFuLnN1YnN0cmluZygxMCwgMTkpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHByZWZpeDQubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHByZWZpeDQuY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNQcmVmaXhbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sUHJlZml4ICE9PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCBzdWZmaXgubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHN1ZmZpeC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1N1ZmZpeFtpbmRleDJdOwogIH0KICByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbFN1ZmZpeCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tFc3RvbmlhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHMgPSBbNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgN107CiAgdmFyIGNvbnRyb2xEaWdpdCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE1KSwgMTApOwogIHZhciB0b0NoZWNrID0gYmJhbi5zdWJzdHJpbmcoMiwgMTUpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDEwOwogIHJldHVybiBjb250cm9sRGlnaXQgPT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tGcmVuY2hCQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICB2YXIgbm9ybWFsaXplZCA9IEFycmF5LmZyb20oc3RyaXBwZWQpOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHN0cmlwcGVkLmxlbmd0aDsgaW5kZXgyKyspIHsKICAgIHZhciBjMTEgPSBub3JtYWxpemVkW2luZGV4Ml0uY2hhckNvZGVBdCgwKTsKICAgIGlmIChjMTEgPj0gNjUpIHsKICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICBjYXNlIDY1OgogICAgICAgIGNhc2UgNzQ6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiMSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY2OgogICAgICAgIGNhc2UgNzU6CiAgICAgICAgY2FzZSA4MzoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICIyIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjc6CiAgICAgICAgY2FzZSA3NjoKICAgICAgICBjYXNlIDg0OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjMiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2ODoKICAgICAgICBjYXNlIDc3OgogICAgICAgIGNhc2UgODU6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY5OgogICAgICAgIGNhc2UgNzg6CiAgICAgICAgY2FzZSA4NjoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI1IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzA6CiAgICAgICAgY2FzZSA3OToKICAgICAgICBjYXNlIDg3OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjYiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA3MToKICAgICAgICBjYXNlIDgwOgogICAgICAgIGNhc2UgODg6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNyI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDcyOgogICAgICAgIGNhc2UgODE6CiAgICAgICAgY2FzZSA4OToKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI4IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzM6CiAgICAgICAgY2FzZSA4MjoKICAgICAgICBjYXNlIDkwOgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjkiOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgdmFyIHJlbWFpbmRlciA9IG1vZDk3MTAobm9ybWFsaXplZC5qb2luKCIiKSk7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gMDsKfTsKdmFyIGNoZWNrSHVuZ2FyaWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzXTsKICB2YXIgY29udHJvbERpZ2l0QmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDcpLCAxMCk7CiAgdmFyIHRvQ2hlY2tCYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgNyk7CiAgdmFyIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0JhbmtCcmFuY2gubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tCYW5rQnJhbmNoLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMDsKICBpZiAoY29udHJvbERpZ2l0QmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBpZiAoYmJhbi5lbmRzV2l0aCgiMDAwMDAwMDAiKSkgewogICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMTUpOwogICAgdmFyIGNvbnRyb2xEaWdpdEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCgxNSksIDEwKTsKICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2tBY2NvdW50Lmxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICB9CiAgICB2YXIgcmVtYWluZGVyXzEgPSBzdW0gJSAxMDsKICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzEgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMSk7CiAgfSBlbHNlIHsKICAgIHZhciB0b0NoZWNrQWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDgsIDIzKTsKICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMjMpLCAxMCk7CiAgICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCB0b0NoZWNrQWNjb3VudC5sZW5ndGg7IGluZGV4MisrKSB7CiAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrQWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgfQogICAgdmFyIHJlbWFpbmRlcl8yID0gc3VtICUgMTA7CiAgICByZXR1cm4gY29udHJvbERpZ2l0QWNjb3VudCA9PT0gKHJlbWFpbmRlcl8yID09PSAwID8gMCA6IDEwIC0gcmVtYWluZGVyXzIpOwogIH0KfTsKdmFyIHNldENvdW50cnlCQkFOVmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvdW50cnksIGZ1bmMpIHsKICBpZiAodHlwZW9mIGNvdW50cnlTcGVjc1tjb3VudHJ5XSA9PT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY291bnRyeVNwZWNzW2NvdW50cnldLmJiYW5fdmFsaWRhdGlvbl9mdW5jID0gZnVuYzsKICByZXR1cm4gdHJ1ZTsKfTsKdmFyIGNvdW50cnlTcGVjcyA9IHsKICBBRDogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgQUU6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9WzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjctMjMiCiAgfSwKICBBRjoge30sCiAgQUc6IHt9LAogIEFJOiB7fSwKICBBTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQU06IHt9LAogIEFPOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgQVE6IHt9LAogIEFSOiB7fSwKICBBUzoge30sCiAgQVQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgQVU6IHt9LAogIEFXOiB7fSwKICBBWDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEFaOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI4IgogIH0sCiAgQkE6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgQkI6IHt9LAogIEJEOiB7fSwKICBCRTogewogICAgY2hhcnM6IDE2LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tCZWxnaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMTYiCiAgfSwKICBCRjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgQkc6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17Nn1bQS1aMC05XXs4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBCSDogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bQS1aMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMiIKICB9LAogIEJJOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI3IgogIH0sCiAgQko6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICB9LAogIEJMOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiCiAgfSwKICBCTToge30sCiAgQk46IHt9LAogIEJPOiB7fSwKICBCUToge30sCiAgQlI6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjgtMTIiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC03IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNy0yOSIKICB9LAogIEJTOiB7fSwKICBCVDoge30sCiAgQlY6IHt9LAogIEJXOiB7fSwKICBCWTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgQlo6IHt9LAogIENBOiB7fSwKICBDQzoge30sCiAgQ0Q6IHt9LAogIENGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgQ0c6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBDSDogewogICAgY2hhcnM6IDIxLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NX1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiCiAgfSwKICBDSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsyM30kIgogIH0sCiAgQ0s6IHt9LAogIENMOiB7fSwKICBDTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIENOOiB7fSwKICBDTzoge30sCiAgQ1I6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIyIgogIH0sCiAgQ1U6IHt9LAogIENWOiB7IGNoYXJzOiAyNSwgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIgfSwKICBDVzoge30sCiAgQ1g6IHt9LAogIENZOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQ1o6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICB9LAogIERFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTIyIgogIH0sCiAgREo6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNS05IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjciCiAgfSwKICBESzogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRE06IHt9LAogIERPOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI4IgogIH0sCiAgRFo6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiCiAgfSwKICBFQzoge30sCiAgRUU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRXN0b25pYW5CQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIEVHOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNX0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBFSDoge30sCiAgRVI6IHt9LAogIEVTOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tTcGFpbkJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICB9LAogIEVUOiB7fSwKICBGSTogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTAiCiAgfSwKICBGSjoge30sCiAgRks6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezJ9WzAtOV17MTJ9JCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBGTToge30sCiAgRk86IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRlI6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tGcmVuY2hCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI0IgogIH0sCiAgR0E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHQjogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgR0Q6IHt9LAogIEdFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyfVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTIyIgogIH0sCiAgR0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEdHOiB7fSwKICBHSDoge30sCiAgR0k6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIzIgogIH0sCiAgR0w6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgR006IHt9LAogIEdOOiB7fSwKICBHUDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgR1E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHUjogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17N31bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTI3IgogIH0sCiAgR1M6IHt9LAogIEdUOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIEdVOiB7fSwKICBHVzogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsxOX0kIgogIH0sCiAgR1k6IHt9LAogIEhLOiB7fSwKICBITToge30sCiAgSE46IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIKICB9LAogIEhSOiB7CiAgICBjaGFyczogMjEsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxN30kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0Nyb2F0aWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTYiCiAgfSwKICBIVDoge30sCiAgSFU6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrSHVuZ2FyaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSUQ6IHt9LAogIElFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBJTDogewogICAgY2hhcnM6IDIzLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSU06IHt9LAogIElOOiB7fSwKICBJTzoge30sCiAgSVE6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIElSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIgogIH0sCiAgSVM6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiCiAgfSwKICBJVDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTEwIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjEtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yNyIKICB9LAogIEpFOiB7fSwKICBKTToge30sCiAgSk86IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NH1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICI0LTciCiAgfSwKICBKUDoge30sCiAgS0U6IHt9LAogIEtHOiB7fSwKICBLSDoge30sCiAgS0k6IHt9LAogIEtNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgS046IHt9LAogIEtQOiB7fSwKICBLUjoge30sCiAgS1c6IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjIwLTMwIgogIH0sCiAgS1k6IHt9LAogIEtaOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezEzfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIwIgogIH0sCiAgTEE6IHt9LAogIExCOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yOCIKICB9LAogIExDOiB7CiAgICBjaGFyczogMzIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezI0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTMyIgogIH0sCiAgTEk6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezV9W0EtWjAtOV17MTJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTEs6IHt9LAogIExSOiB7fSwKICBMUzoge30sCiAgTFQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgTFU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgTFY6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIxIgogIH0sCiAgTFk6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy01IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTAtMjUiCiAgfSwKICBNQTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjR9JCIKICB9LAogIE1DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRnJlbmNoQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTUQ6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9W0EtWjAtOV17MTh9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMjQiCiAgfSwKICBNRTogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMiIKICB9LAogIE1GOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBNRzogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIE1IOiB7fSwKICBNSzogewogICAgY2hhcnM6IDE5LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBNTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgTU06IHt9LAogIE1OOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIE1POiB7fSwKICBNUDoge30sCiAgTVE6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIE1SOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjciCiAgfSwKICBNUzoge30sCiAgTVQ6IHsKICAgIGNoYXJzOiAzMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NX1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTgiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNS0zMSIKICB9LAogIE1VOiB7CiAgICBjaGFyczogMzAsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezE5fVtBLVpdezN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC01IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTMwIgogIH0sCiAgTVY6IHt9LAogIE1XOiB7fSwKICBNWDoge30sCiAgTVk6IHt9LAogIE1aOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgTkE6IHt9LAogIE5DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBORTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgTkY6IHt9LAogIE5HOiB7fSwKICBOSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIE5MOiB7CiAgICBjaGFyczogMTgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezEwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0xOCIKICB9LAogIE5POiB7CiAgICBjaGFyczogMTUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja05vcndheUJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE1IgogIH0sCiAgTlA6IHt9LAogIE5SOiB7fSwKICBOVToge30sCiAgTlo6IHt9LAogIE9NOiB7CiAgICBjaGFyczogMjMsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogZmFsc2UsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBQQToge30sCiAgUEU6IHt9LAogIFBGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBQRzoge30sCiAgUEg6IHt9LAogIFBLOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgUEw6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja1BvbGFuZEJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjItMjgiCiAgfSwKICBQTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgUE46IHt9LAogIFBSOiB7fSwKICBQUzogewogICAgY2hhcnM6IDI5LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsyMX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBQVDogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBQVzoge30sCiAgUFk6IHt9LAogIFFBOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI5IgogIH0sCiAgUkU6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFJPOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yNCIKICB9LAogIFJTOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgUlU6IHsKICAgIGNoYXJzOiAzMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fVtBLVowLTldezE1fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiOS0xMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTgiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTMzIgogIH0sCiAgUlc6IHt9LAogIFNBOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyfVtBLVowLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMi0yNCIKICB9LAogIFNCOiB7fSwKICBTQzogewogICAgY2hhcnM6IDMxLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH1bQS1aXXszfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTItMjgiCiAgfSwKICBTRDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBTRTogeyBjaGFyczogMjQsIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLCBJQkFOUmVnaXN0cnk6IHRydWUsIFNFUEE6IHRydWUsIGJhbmtfaWRlbnRpZmllcjogIjAtMiIgfSwKICBTRzoge30sCiAgU0g6IHt9LAogIFNJOiB7CiAgICBjaGFyczogMTksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItNCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjktMTYiCiAgfSwKICBTSjoge30sCiAgU0s6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZQogIH0sCiAgU0w6IHt9LAogIFNNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjYtMTAiCiAgfSwKICBTTjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgU086IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC02IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIFNSOiB7fSwKICBTUzoge30sCiAgU1Q6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IgogIH0sCiAgU1Y6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIFNYOiB7fSwKICBTWToge30sCiAgU1o6IHt9LAogIFRDOiB7fSwKICBURDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIFRGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBURzogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgVEg6IHt9LAogIFRKOiB7fSwKICBUSzoge30sCiAgVEw6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjMiCiAgfSwKICBUTToge30sCiAgVE46IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI0IgogIH0sCiAgVE86IHt9LAogIFRSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs1fVtBLVowLTldezE3fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBUVDoge30sCiAgVFY6IHt9LAogIFRXOiB7fSwKICBUWjoge30sCiAgVUE6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezZ9W0EtWjAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTUtMjkiCiAgfSwKICBVRzoge30sCiAgVU06IHt9LAogIFVTOiB7fSwKICBVWToge30sCiAgVVo6IHt9LAogIFZBOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTIyIgogIH0sCiAgVkM6IHt9LAogIFZFOiB7fSwKICBWRzogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgVkk6IHt9LAogIFZOOiB7fSwKICBWVToge30sCiAgV0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFdTOiB7fSwKICBYSzogewogICAgY2hhcnM6IDIwLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIyLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjAiCiAgfSwKICBZRToge30sCiAgWVQ6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFpBOiB7fSwKICBaTToge30sCiAgWlc6IHt9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE5ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBheW1lbnQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgSUJBTiBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJJbnRlcm5hdGlvbmFsIEJhbmsgQWNjb3VudCBOdW1iZXIgd2l0aCBhdXRvbWF0aWMgZm9ybWF0dGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiQmFuayBBY2NvdW50IElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIEludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiVmVyaWZpZWQgSUJBTiJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgSUJBTiBoYXMgYmVlbiB2ZXJpZmllZCJ9CiAgICAgICAgICAudmFsdWU9JHsiREU4OTM3MDQwMDQ0MDUzMjAxMzAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGF5bWVudCBJbmZvcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJJQkFOIGlucHV0IHdpdGggaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHBheW1lbnQgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IEhvbGRlciJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkpvaG4gRG9lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAgLmxhYmVsPSR7IklCQU4ifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJHQjgyV0VTVDEyMzQ1Njk4NzY1NDMyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiUmVxdWlyZWQgZmllbGRzIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgLmxhYmVsPSR7IlBheW1lbnQgQWNjb3VudCJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBwcm9jZXNzaW5nIHBheW1lbnRzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhbmsgVHJhbnNmZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIGV4YW1wbGUgd2l0aCBJQkFOIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUmVjaXBpZW50IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4gLmxhYmVsPSR7IlJlY2lwaWVudCBJQkFOIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vZGVlcy1pbnB1dC1pYmFuLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0SWJhbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtaWJhbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZFN0cmluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRJYmFuMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZFN0cmluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50ZXJlZFN0cmluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRlcmVkU3RyaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkU3RyaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF9lbnRlcmVkSWJhbklzVmFsaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZEliYW5Jc1ZhbGlkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnRlcmVkSWJhbklzVmFsaWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50ZXJlZEliYW5Jc1ZhbGlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkSWJhbklzVmFsaWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycywgX2VudGVyZWRJYmFuSXNWYWxpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2VudGVyZWRTdHJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGVudGVyZWRTdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkU3RyaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW50ZXJlZFN0cmluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZFN0cmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVudGVyZWRJYmFuSXNWYWxpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudGVyZWRJYmFuSXNWYWxpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZEliYW5Jc1ZhbGlkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSUJBTiBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbCB8fCAiSUJBTiJ9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgLmRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiREU4OSAzNzA0IDAwNDQgMDUzMiAwMTMwIDAwIn0KICAgICAgICAgIEBpbnB1dD0keyhldmVudEFyZykgPT4gewogICAgICAgIHRoaXMudmFsaWRhdGVJYmFuKGV2ZW50QXJnKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChkZWVzSW5wdXRUZXh0ICYmIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlSWJhbihldmVudEFyZykgewogICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIGxldCBlbnRlcmVkU3RyaW5nID0gaW5wdXRFbGVtZW50Py52YWx1ZTsKICAgICAgZW50ZXJlZFN0cmluZyA9IGVudGVyZWRTdHJpbmcgfHwgIiI7CiAgICAgIGlmICh0aGlzLmVudGVyZWRTdHJpbmcgIT09IGVudGVyZWRTdHJpbmcpIHsKICAgICAgICB0aGlzLmVudGVyZWRTdHJpbmcgPSBmcmllbmRseUZvcm1hdElCQU4oZW50ZXJlZFN0cmluZykgfHwgIiI7CiAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy5lbnRlcmVkU3RyaW5nOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZW50ZXJlZFN0cmluZzsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmVudGVyZWRJYmFuSXNWYWxpZCA9IGlzVmFsaWRJQkFOKHRoaXMuZW50ZXJlZFN0cmluZy5yZXBsYWNlKC8gL2csICIiKSk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGRlZXNJbnB1dFRleHQudmFsaWRhdGlvblRleHQgPSBgSUJBTiBpcyB2YWxpZDogJHt0aGlzLmVudGVyZWRJYmFuSXNWYWxpZH1gOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTih2YWx1ZTIpIHx8ICIiOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dEliYW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk11bHRpLU9wdGlvbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TZWxlY3QgZnJvbSBtdWx0aXBsZSBvcHRpb25zIHdpdGggYSBzbW9vdGggc2xpZGluZyBpbmRpY2F0b3IgYW5pbWF0aW9uLjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiRGlzcGxheSBNb2RlIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgaG93IGNvbnRlbnQgaXMgZGlzcGxheWVkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJMaXN0IFZpZXciLCAiR3JpZCBWaWV3IiwgIkNvbXBhY3QiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJHcmlkIFZpZXcifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlQtU2hpcnQgU2l6ZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgcHJlZmVycmVkIHNpemUifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlhTIiwgIlMiLCAiTSIsICJMIiwgIlhMIiwgIlhYTCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik0ifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Qm9vbGVhbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TaW1wbGUgb24vb2ZmIHN3aXRjaGVzIHdpdGggY3VzdG9taXphYmxlIGxhYmVscyBmb3IgY2xlYXJlciBjb250ZXh0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW5hYmxlIG9yIGRpc2FibGUgcHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRydWUifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIHRoZW1lIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJEYXJrIn0KICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkxpZ2h0In0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEYXJrIn0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNldHRpbmdzIEdyaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db25maWd1cmF0aW9uIG9wdGlvbnMgYXJyYW5nZWQgaW4gYSByZXNwb25zaXZlIGdyaWQgbGF5b3V0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tU2F2ZSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkVuYWJsZWQifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJEaXNhYmxlZCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmFibGVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbmdsaXNoIiwgIkdlcm1hbiIsICJGcmVuY2giLCAiU3BhbmlzaCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUXVhbGl0eSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVWx0cmEiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkhpZ2gifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlByaXZhY3kifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0ZXMgJiBGb3JtIEludGVncmF0aW9uPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+RXhhbXBsZXMgb2YgZGlzYWJsZWQgc3RhdGVzIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gZm9ybXMuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IFR5cGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgc2V0dGluZyBpcyBsb2NrZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkZyZWUiLCAiUHJvIiwgIkVudGVycHJpc2UiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbnRlcnByaXNlIn0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJWaXNpYmlsaXR5In0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHJpdmF0ZSJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcml2YXRlIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTGljZW5zZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJNSVQiLCAiQXBhY2hlIDIuMCIsICJHUEwgdjMiLCAiUHJvcHJpZXRhcnkiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1JVCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRNdWx0aXRvZ2dsZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sZWFuVHJ1ZU5hbWVfZGVjb3JhdG9yczsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9kZWNvcmF0b3JzOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5GYWxzZU5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfYm9vbGVhblRydWVOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sVmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5UcnVlTmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib29sZWFuVHJ1ZU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvb2xlYW5UcnVlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuVHJ1ZU5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvb2xlYW5UcnVlTmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5GYWxzZU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbGVhbkZhbHNlTmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm9vbGVhbkZhbHNlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuRmFsc2VOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sZWFuRmFsc2VOYW1lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jvb2xlYW5GYWxzZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sVmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib29sVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbFZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sVmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm9vbFZhbHVlX2luaXRpYWxpemVycywgX2Jvb2xWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibXVsdGkiKTsKICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2luaXRpYWxpemVycywgInRydWUiKSk7CiAgICBnZXQgYm9vbGVhblRydWVOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhblRydWVOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm9vbGVhblRydWVOYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMsICJmYWxzZSIpKTsKICAgIGdldCBib29sZWFuRmFsc2VOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhbkZhbHNlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xlYW5GYWxzZU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jvb2xlYW5GYWxzZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJvb2xWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jvb2xWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBBZGQgdmFsdWUgcHJvcGVydHkgZm9yIGZvcm0gY29tcGF0aWJpbGl0eQogICAgZ2V0IHZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsID8gdGhpcy5ib29sZWFuVHJ1ZU5hbWUgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAub3B0aW9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAub3B0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2U0ZTRlNyIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KCiAgICAgIC5pbmRpY2F0b3IgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAuaW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5zZWxlY3Rpb25zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLm9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmluZGljYXRvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiLCAicmdiYSgxMTMsIDExMywgMTIyLCAwLjE1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGljYXRvciI+PC9kaXY+CiAgICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYDxkaXYgY2xhc3M9Im9wdGlvbiAke29wdGlvbjIgPT09IHRoaXMuc2VsZWN0ZWRPcHRpb24gPyAic2VsZWN0ZWQiIDogIiJ9IiBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihvcHRpb24yKX0+CiAgICAgICAgICAgICAgICAke29wdGlvbjJ9CiAgICAgICAgICAgICAgPC9kaXY+IGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMub3B0aW9ucyA9IFt0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIsIHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiXTsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gW3RoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiwgdGhpcy5ib29sZWFuRmFsc2VOYW1lIHx8ICJmYWxzZSJdOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmIChkb2N1bWVudC5mb250cykgewogICAgICAgIGF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVTZWxlY3Rpb24ob3B0aW9uQXJnKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkFyZzsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgfQogICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgYXN5bmMgc2V0SW5kaWNhdG9yKCkgewogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmluZGljYXRvciIpOwogICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSB8fCAhaW5kaWNhdG9yKSB7CiAgICAgICAgaWYgKGluZGljYXRvcikgewogICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYC5vcHRpb246bnRoLWNoaWxkKCR7c2VsZWN0ZWRJbmRleCArIDJ9KWApOwogICAgICBpZiAoaW5kaWNhdG9yICYmIG9wdGlvbjIpIHsKICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZSgibm8tdHJhbnNpdGlvbiIpOwogICAgICAgICAgfSwgNTApOwogICAgICAgIH0KICAgICAgICBpbmRpY2F0b3Iuc3R5bGUud2lkdGggPSBgJHtvcHRpb24yLmNsaWVudFdpZHRofXB4YDsKICAgICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke29wdGlvbjIub2Zmc2V0TGVmdH1weGA7CiAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJib29sZWFuIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWx1ZTIgPyB0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dE11bHRpdG9nZ2xlMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjEgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkVudGVyIHlvdXIgcGhvbmUgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlIn0KICAgICAgICAgIC52YWx1ZT0keyI1NTUxMjM0NTY3In0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IkNvbnRhY3QgUGhvbmUifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZXF1aXJlZCBmb3IgYWNjb3VudCB2ZXJpZmljYXRpb24ifQogICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyIrMSAoNTU1KSAwMDAtMDAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiTW9iaWxlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiNDE1NTU1MTIzNCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9mZmljZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg4MDApIDU1NS0wMDAwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcm5hdGlvbmFsIE51bWJlcnMifSAuc3VidGl0bGU9JHsiU3VwcG9ydHMgZm9ybWF0dGluZyBmb3IgbnVtYmVycyB3aXRoIGNvdW50cnkgY29kZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJJbnRlcm5hdGlvbmFsIENvbnRhY3QifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBdXRvbWF0aWNhbGx5IGZvcm1hdHMgaW50ZXJuYXRpb25hbCBudW1iZXJzIn0KICAgICAgICAgIC52YWx1ZT0keyI0NDEyMzQ1Njc4OTAifQogICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAubGFiZWw9JHsiRW1lcmdlbmN5IENvbnRhY3QifSAKICAgICAgICAgIC52YWx1ZT0keyI5MTEifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJQaG9uZSBpbnB1dCBhcyBwYXJ0IG9mIGEgY29udGFjdCBmb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZ1bGwgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UGhvbmUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXBob25lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9kZWNvcmF0b3JzOwogIGxldCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFBob25lMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2Zvcm1hdHRlZFBob25lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUyOSh0aGlzLCBudWxsLCBfZm9ybWF0dGVkUGhvbmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9ybWF0dGVkUGhvbmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvcm1hdHRlZFBob25lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvcm1hdHRlZFBob25lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb3JtYXR0ZWRQaG9uZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsIF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI5KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjkodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2Zvcm1hdHRlZFBob25lX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZm9ybWF0dGVkUGhvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvcm1hdHRlZFBob25lKHZhbHVlMikgewogICAgICB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIrMSAoNTU1KSAxMjMtNDU2NyIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZm9ybWF0dGVkUGhvbmV9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICBAaW5wdXQ9JHsoZXZlbnQpID0+IHRoaXMuaGFuZGxlUGhvbmVJbnB1dChldmVudCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKHRoaXMudmFsdWUpOwogICAgICB9CiAgICAgIGNvbnN0IGlubmVySW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChpbm5lcklucHV0ICYmIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVBob25lSW5wdXQoZXZlbnQpIHsKICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5QaG9uZU51bWJlcihpbnB1dC52YWx1ZSk7CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoY2xlYW5lZFZhbHVlKTsKICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSBmb3JtYXR0ZWQpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7CiAgICAgICAgaW5wdXQudmFsdWUgPSBmb3JtYXR0ZWQ7CiAgICAgICAgY29uc3QgbmV3Q3Vyc29yUG9zID0gdGhpcy5jYWxjdWxhdGVDdXJzb3JQb3NpdGlvbihjbGVhbmVkVmFsdWUsIGZvcm1hdHRlZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5ld0N1cnNvclBvcywgbmV3Q3Vyc29yUG9zKTsKICAgICAgfQogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gZm9ybWF0dGVkOwogICAgICB0aGlzLnZhbHVlID0gY2xlYW5lZFZhbHVlOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvXEQvZywgIiIpOwogICAgfQogICAgZm9ybWF0UGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKTsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiIjsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoIDw9IDMpCiAgICAgICAgcmV0dXJuIGNsZWFuZWQ7CiAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSA2KQogICAgICAgIHJldHVybiBgKCR7Y2xlYW5lZC5zbGljZSgwLCAzKX0pICR7Y2xlYW5lZC5zbGljZSgzKX1gOwogICAgICBpZiAoY2xlYW5lZC5sZW5ndGggPD0gMTApCiAgICAgICAgcmV0dXJuIGAoJHtjbGVhbmVkLnNsaWNlKDAsIDMpfSkgJHtjbGVhbmVkLnNsaWNlKDMsIDYpfS0ke2NsZWFuZWQuc2xpY2UoNil9YDsKICAgICAgcmV0dXJuIGArJHtjbGVhbmVkLnNsaWNlKDAsIGNsZWFuZWQubGVuZ3RoIC0gMTApfSAoJHtjbGVhbmVkLnNsaWNlKC0xMCwgLTcpfSkgJHtjbGVhbmVkLnNsaWNlKC03LCAtNCl9LSR7Y2xlYW5lZC5zbGljZSgtNCl9YDsKICAgIH0KICAgIGNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWQsIGZvcm1hdHRlZCwgb2xkUG9zKSB7CiAgICAgIGxldCBmb3JtYXR0aW5nQ2hhcnMgPSAwOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBvbGRQb3MgJiYgaTExIDwgZm9ybWF0dGVkLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoIS9cZC8udGVzdChmb3JtYXR0ZWRbaTExXSkpIHsKICAgICAgICAgIGZvcm1hdHRpbmdDaGFycysrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gTWF0aC5taW4ob2xkUG9zICsgZm9ybWF0dGluZ0NoYXJzLCBmb3JtYXR0ZWQubGVuZ3RoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZU51bWJlcih2YWx1ZTIpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMiA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgdG9nZ2xlQWxsT25CdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0b2dnbGUtYWxsLW9uIik7CiAgY29uc3QgdG9nZ2xlQWxsT2ZmQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjdG9nZ2xlLWFsbC1vZmYiKTsKICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmZlYXR1cmUtdG9nZ2xlcyBkZWVzLWlucHV0LXRvZ2dsZSIpOwogIGlmICh0b2dnbGVBbGxPbkJ0biAmJiB0b2dnbGVBbGxPZmZCdG4pIHsKICAgIHRvZ2dsZUFsbE9uQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBmZWF0dXJlVG9nZ2xlcy5mb3JFYWNoKCh0b2dnbGUpID0+IHsKICAgICAgICBpZiAoIXRvZ2dsZS5kaXNhYmxlZCAmJiAhdG9nZ2xlLnJlcXVpcmVkKSB7CiAgICAgICAgICB0b2dnbGUudmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHRvZ2dsZUFsbE9mZkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgZmVhdHVyZVRvZ2dsZXMuZm9yRWFjaCgodG9nZ2xlKSA9PiB7CiAgICAgICAgaWYgKCF0b2dnbGUuZGlzYWJsZWQgJiYgIXRvZ2dsZS5yZXF1aXJlZCkgewogICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvZ2dsZS1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5ob3Jpem9udGFsLXRvZ2dsZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CgogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmZlYXR1cmUtdG9nZ2xlcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5kcmFnLWhpbnQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVG9nZ2xlIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBvbi9vZmYgdG9nZ2xlIHN3aXRjaCB3aXRoIGRyYWcgc3VwcG9ydCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBmZWF0dXJlIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5rZXk9JHsiYmFzaWMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJBY3RpdmUgdG9nZ2xlIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJhY3RpdmUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaXRoIGRlc2NyaXB0aW9uIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBoYXMgYWRkaXRpb25hbCBoZWxwZXIgdGV4dCBleHBsYWluaW5nIGl0cyBwdXJwb3NlIn0KICAgICAgICAgICAgLmtleT0keyJ3aXRoRGVzYyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0iZHJhZy1oaW50Ij5UaXA6IFlvdSBjYW4gZHJhZyB0aGUgdG9nZ2xlIGtub2IgdG8gc3dpdGNoIHN0YXRlczwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRvZ2dsZSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHRvZ2dsZSBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGVkIChvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob24pIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgKGFsd2F5cyBvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyB0b2dnbGUgY2Fubm90IGJlIHR1cm5lZCBvZmYifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJUb2dnbGVzIGFycmFuZ2VkIGhvcml6b250YWxseSBmb3IgY29tcGFjdCBpbnRlcmZhY2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC10b2dnbGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiV2lGaSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJCbHVldG9vdGgifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkdQUyJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJORkMifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlcyBpbiBhIHR5cGljYWwgc2V0dGluZ3MgY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2g0PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJQdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHVzaCBub3RpZmljYXRpb25zIG9uIHlvdXIgZGV2aWNlIn0KICAgICAgICAgICAgICAua2V5PSR7InB1c2gifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgaW1wb3J0YW50IHVwZGF0ZXMgdmlhIGVtYWlsIn0KICAgICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU291bmQifQogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQbGF5IGEgc291bmQgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsic291bmQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJWaWJyYXRpb24ifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlZpYnJhdGUgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsidmlicmF0aW9uIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgVG9nZ2xlcyJ9IC5zdWJ0aXRsZT0keyJCYXRjaCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHRvZ2dsZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9uIiB0eXBlPSJzZWNvbmRhcnkiPkVuYWJsZSBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9mZiIgdHlwZT0ic2Vjb25kYXJ5Ij5EaXNhYmxlIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtdG9nZ2xlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZGFya01vZGUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJBdXRvLXNhdmUifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJhdXRvU2F2ZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWxsIGNoZWNrIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7InNwZWxsQ2hlY2sifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wZXIgbW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJkZXZNb2RlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiQmV0YSBmZWF0dXJlcyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJiZXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIGluIHJlYWwtdGltZSJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFpcnBsYW5lIG1vZGUifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FpcnBsYW5lLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBBaXJwbGFuZSBtb2RlOiAke2V2ZW50LmRldGFpbCA/ICJPTiIgOiAiT0ZGIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRG8gbm90IGRpc3R1cmIifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2RuZC1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRG8gbm90IGRpc3R1cmI6ICR7ZXZlbnQuZGV0YWlsID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUb2dnbGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXRvZ2dsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0VG9nZ2xlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFRvZ2dsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogS25vYiBwb3NpdGlvbiB0cmFja2luZyAoMCA9IG9mZiwgbWF4VHJhdmVsID0gb24pCiAgICAgKi8KICAgIGN1cnJlbnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMCk7CiAgICAvKioKICAgICAqIERyYWcgc3RhdGUKICAgICAqLwogICAgaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgaGFzRHJhZ2dlZCA9IGZhbHNlOwogICAgc3RhcnRYID0gMDsKICAgIC8vIFRvZ2dsZSBkaW1lbnNpb25zCiAgICB0cmFja1dpZHRoID0gMzY7CiAgICB0cmFja0hlaWdodCA9IDIwOwogICAga25vYlNpemUgPSAxNDsKICAgIHBhZGRpbmcgPSAyOwogICAgbWF4VHJhdmVsID0gMTY7CiAgICAvLyB0cmFja1dpZHRoIC0ga25vYlNpemUgLSAocGFkZGluZyAqIDIpIC0gYm9yZGVyCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gInJpZ2h0IjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtdHJhY2sgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50b2dnbGUta25vYiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMnB4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBSZXF1aXJlZCBzdGF0ZSAobG9ja2VkIG9uKSAqLwogICAgICA6aG9zdChbcmVxdWlyZWRdW3ZhbHVlXSkgLnRvZ2dsZS10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA2MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA0OS44JSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUta25vYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLyogTGFiZWwgKi8KICAgICAgLmxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMuaGFuZGxlQ2xpY2t9Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS10cmFjayAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWtub2IiCiAgICAgICAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wYWRkaW5nICsgdGhpcy5jdXJyZW50WH1weDsiCiAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSIke3RoaXMub25Qb2ludGVyRG93bn0iCiAgICAgICAgICAgICAgQHBvaW50ZXJtb3ZlPSIke3RoaXMub25Qb2ludGVyTW92ZX0iCiAgICAgICAgICAgICAgQHBvaW50ZXJ1cD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgICBAcG9pbnRlcmNhbmNlbD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy52YWx1ZSA/IHRoaXMubWF4VHJhdmVsIDogMDsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIENsaWNrIGhhbmRsZXIgLSB0b2dnbGVzIHRoZSB2YWx1ZQogICAgICovCiAgICBhc3luYyBoYW5kbGVDbGljayhldmVudCkgewogICAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7CiAgICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMubWF4VHJhdmVsOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyMTEpID0+IHNldFRpbWVvdXQocjExLCAxMCkpOwogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLm1heFRyYXZlbCAtIDM7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy5tYXhUcmF2ZWw7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibmV3VmFsdWUiLCB7CiAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy5oYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQb2ludGVyIGRvd24gLSBzdGFydCBkcmFnZ2luZwogICAgICovCiAgICBvblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5jdXJyZW50WDsKICAgICAgZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgbW92ZSAtIHRyYWNrIGRyYWcgcG9zaXRpb24KICAgICAqLwogICAgb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1ggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7CiAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IHRydWU7CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3WCwgdGhpcy5tYXhUcmF2ZWwpKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgdXAgLSBjb21wbGV0ZSBkcmFnIGFuZCBzbmFwIHRvIG5lYXJlc3Qgc2lkZQogICAgICovCiAgICBvblBvaW50ZXJVcChldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgIGlmICghdGhpcy5oYXNEcmFnZ2VkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICBjb25zdCBtaWRwb2ludCA9IHRoaXMubWF4VHJhdmVsIC8gMjsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VycmVudFggPiBtaWRwb2ludDsKICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMudmFsdWUgPyB0aGlzLm1heFRyYXZlbCA6IDA7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmhhc0RyYWdnZWQgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFN5bmMga25vYiBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgZXh0ZXJuYWxseQogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ2YWx1ZSIpICYmICF0aGlzLmlzRHJhZ2dpbmcgJiYgIXRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEtleWJvYXJkIHN1cHBvcnQKICAgICAqLwogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KTsKICAgICAgfQogICAgfQogICAgLy8gRGVlc0lucHV0QmFzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlQXJnKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZUFyZzsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCB0cmFjazIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTsKICAgICAgaWYgKHRyYWNrMikgewogICAgICAgIHRyYWNrMi5mb2N1cygpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UzZjJmZDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjMTk3NmQyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuaW5mby1ib3ggewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUzYTVmOwogICAgICAgICAgICBjb2xvcjogIzkwY2FmOTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUeXBlIExpc3QifSAuc3VidGl0bGU9JHsiQWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBhIGxpc3QifT4KICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCB0YWdzIGJ5IHR5cGluZyBhbmQgcHJlc3NpbmcgRW50ZXIifQogICAgICAgICAgLnZhbHVlPSR7WyJqYXZhc2NyaXB0IiwgInR5cGVzY3JpcHQiLCAid2ViLWNvbXBvbmVudHMiXX0KICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiVGVhbSBNZW1iZXJzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgZW1haWwgYWRkcmVzc2VzIG9mIHRlYW0gbWVtYmVycyJ9CiAgICAgICAgICAudmFsdWU9JHtbImFsaWNlQGV4YW1wbGUuY29tIiwgImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTa2lsbHMgJiBLZXl3b3JkcyJ9IC5zdWJ0aXRsZT0keyJNYW5hZ2UgbGlzdHMgb2Ygc2tpbGxzIGFuZCBrZXl3b3JkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBTa2lsbHMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgIC52YWx1ZT0ke1siSFRNTCIsICJDU1MiLCAiSmF2YVNjcmlwdCIsICJOb2RlLmpzIiwgIlJlYWN0Il19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yaWVzIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siVGVjaG5vbG9neSIsICJEZXNpZ24iLCAiQnVzaW5lc3MiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJLZXl3b3JkcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbImlubm92YXRpb24iLCAic3RhcnR1cCIsICJncm93dGgiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJSZXF1aXJlZCAmIERpc2FibGVkIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgaW5wdXQgc3RhdGVzIGZvciB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IERlcGVuZGVuY2llcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTGlzdCBhbGwgcmVxdWlyZWQgbnBtIHBhY2thZ2VzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCIsICJAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzIl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBUYWdzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSB0YWdzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0ifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0ke1sic3lzdGVtIiwgInByb3RlY3RlZCIsICJyZWFkb25seSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1bW1hcnkifSAKICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJ0aWNsZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgcmVsZXZhbnQgdGFncyBmb3IgYmV0dGVyIGRpc2NvdmVyYWJpbGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1sidHV0b3JpYWwiLCAid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUeXBlbGlzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9pbnB1dFZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRUeXBlbGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzMSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMxKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjM7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwgIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjBweCAxcHggNHB4IHJnYmEoMCwwLDAsMC4zKSIsICJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCAiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY5ZjIiLCAiIzAwODRmZiIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgICAgfQoKICAgICAgLnRhZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubm90YWdzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZjVlOSIsICIjMmQzYTJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzJlN2QzMiIsICIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjM2Q0ZjNkIil9OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYzYyODI4IiwgIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhZ3MiIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpOwogICAgICB9fT4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9Im5vdGFncyI+Tm8gdGFncyB5ZXQ8L2Rpdj5gIDogdGhpcy52YWx1ZS5tYXAoKHRhZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICAgICAgICAke3RhZ30KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5yZW1vdmVUYWcodGFnKTsKICAgICAgfX0+w5c8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlLCBwcmVzcyBFbnRlciB0byBhZGQgaXQuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gewogICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgIH19CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hZGRUYWcodGhpcy5pbnB1dFZhbHVlLnRyaW0oKSk7CiAgICAgICAgfQogICAgICB9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYWRkVGFnKHRhZykgewogICAgICBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXModGFnKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGFnXTsKICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmVtb3ZlVGFnKHRhZykgewogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGVlcy10YWJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzI0ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtb1dyYXBwZXIgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQogICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrPSR7KCkgPT4gewogIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIik7Cn19PlRvZ2dsZSBUaGVtZTwvZGVlcy1idXR0b24+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkJhc2ljIFRhYmxlIHdpdGggQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgc3RhbmRhcmQgdGFibGUgd2l0aCByb3cgYWN0aW9ucywgZWRpdGFibGUgZmllbGRzLCBhbmQgY29udGV4dCBtZW51IHN1cHBvcnQuIERvdWJsZS1jbGljayBvbiBkZXNjcmlwdGlvbnMgdG8gZWRpdC4gR3JpZCBsaW5lcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkN1cnJlbnQgQWNjb3VudCBTdGF0ZW1lbnQiCiAgICAgICAgICBoZWFkaW5nMj0iQnVucSAtIFBheW1lbnQgQWNjb3VudCAyIC0gQXByaWwgMjAyMSIKICAgICAgICAgIC5lZGl0YWJsZUZpZWxkcz0iJHtbImRlc2NyaXB0aW9uIl19IgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJQcmludGluZyBQYXBlciAoT2ZmaWNlIFN1cHBsaWVzKSAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDIiLAogICAgYW1vdW50OiAiMTY1LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIkxvZ2l0ZWNoIE1vdXNlIChIYXJkd2FyZSkgLSBsb2dpLmNvbSBPbmxpbmVTaG9wIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDMiLAogICAgYW1vdW50OiAiMjk5OSwwMCBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJNYWNib29rIFBybyAxNmluY2ggKEhhcmR3YXJlKSAtIEFwcGxlLmRlIE9ubGluZVNob3AiCiAgfSwKICB7CiAgICBkYXRlOiAiMjAyMS0wNC0wMSIsCiAgICBhbW91bnQ6ICIyNDY0LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1sKICB7CiAgICBuYW1lOiAidXBsb2FkIiwKICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInVwbG9hZCIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBhbGVydChvcHRpb25zQXJnLml0ZW0uYW1vdW50KTsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ2aXNpYmlsaXR5IiwKICAgIGljb25OYW1lOiAiY29weSIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJjcmVhdGUgbmV3IiwKICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgIHR5cGU6IFsiaGVhZGVyIl0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ0byBnYWxsZXJ5IiwKICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICB0eXBlOiBbImZvb3RlciJdLAogICAgdXNlVGFibGVCZWhhdmlvdXI6ICJwcmV2aWV3IiwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChpdGVtQXJnKSA9PiB7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiY29weSIsCiAgICBpY29uTmFtZTogImNvcHlTb2xpZCIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51IiwgImluUm93Il0sCiAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiZWRpdCAoZnJvbSBkZW1vKSIsCiAgICBpY29uTmFtZTogInBlblRvU3F1YXJlIiwKICAgIHR5cGU6IFsiY29udGV4dG1lbnUiXSwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJwYXN0ZSIsCiAgICBpY29uTmFtZTogInBhc3RlU29saWQiLAogICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0sCiAgewogICAgbmFtZTogInByZXZpZXciLAogICAgdHlwZTogWyJkb3VibGVDbGljayIsICJjb250ZXh0bWVudSJdLAogICAgaWNvbk5hbWU6ICJleWUiLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgYWxlcnQoaXRlbUFyZy5pdGVtLmFtb3VudCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KXX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBwcm9kdWN0OiAnTWFjQm9vayBQcm8gMTYiJywKICAgIHdhcmVob3VzZV9hOiAiNDUiLAogICAgd2FyZWhvdXNlX2I6ICIzMiIsCiAgICB3YXJlaG91c2VfYzogIjI4IiwKICAgIHRvdGFsOiAiMTA1IiwKICAgIHN0YXR1czogIlx1MjcxMyBJbiBTdG9jayIKICB9LAogIHsKICAgIHByb2R1Y3Q6ICJpUGhvbmUgMTUgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMTIwIiwKICAgIHdhcmVob3VzZV9iOiAiODkiLAogICAgd2FyZWhvdXNlX2M6ICIxNTYiLAogICAgdG90YWw6ICIzNjUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0sCiAgewogICAgcHJvZHVjdDogIkFpclBvZHMgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMCIsCiAgICB3YXJlaG91c2VfYjogIjEyIiwKICAgIHdhcmVob3VzZV9jOiAiNSIsCiAgICB0b3RhbDogIjE3IiwKICAgIHN0YXR1czogIlx1MjZBMCBMb3cgU3RvY2siCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiaVBhZCBBaXIiLAogICAgd2FyZWhvdXNlX2E6ICIyMyIsCiAgICB3YXJlaG91c2VfYjogIjQ1IiwKICAgIHdhcmVob3VzZV9jOiAiNjciLAogICAgdG90YWw6ICIxMzUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHt0cnVlfQogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgc2VydmVyOiAiQVBJLTEiLAogICAgcmVnaW9uOiAiVVMtRWFzdCIsCiAgICBjcHU6ICI0NSUiLAogICAgbWVtb3J5OiAiNjIlIiwKICAgIGRpc2s6ICI3OCUiLAogICAgbGF0ZW5jeTogIjEybXMiLAogICAgdXB0aW1lOiAiOTkuOSUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTJ9IEhlYWx0aHkiCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJBUEktMiIsCiAgICByZWdpb246ICJFVS1XZXN0IiwKICAgIGNwdTogIjM4JSIsCiAgICBtZW1vcnk6ICI1NSUiLAogICAgZGlzazogIjQ1JSIsCiAgICBsYXRlbmN5OiAiMjVtcyIsCiAgICB1cHRpbWU6ICI5OS44JSIsCiAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICB9LAogIHsKICAgIHNlcnZlcjogIkRCLU1hc3RlciIsCiAgICByZWdpb246ICJVUy1FYXN0IiwKICAgIGNwdTogIjcyJSIsCiAgICBtZW1vcnk6ICI4MSUiLAogICAgZGlzazogIjkyJSIsCiAgICBsYXRlbmN5OiAiOG1zIiwKICAgIHVwdGltZTogIjEwMCUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTF9IFdhcm5pbmciCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJEQi1SZXBsaWNhIiwKICAgIHJlZ2lvbjogIkVVLVdlc3QiLAogICAgY3B1OiAiMjMlIiwKICAgIG1lbW9yeTogIjM0JSIsCiAgICBkaXNrOiAiNDUlIiwKICAgIGxhdGVuY3k6ICIxNW1zIiwKICAgIHVwdGltZTogIjk5LjclIiwKICAgIHN0YXR1czogIlx1ezFGN0UyfSBIZWFsdGh5IgogIH0sCiAgewogICAgc2VydmVyOiAiQ2FjaGUtMSIsCiAgICByZWdpb246ICJBUC1Tb3V0aCIsCiAgICBjcHU6ICI4OSUiLAogICAgbWVtb3J5OiAiOTIlIiwKICAgIGRpc2s6ICIxMiUiLAogICAgbGF0ZW5jeTogIjEyMG1zIiwKICAgIHVwdGltZTogIjk4LjUlIiwKICAgIHN0YXR1czogIlx1ezFGNTM0fSBDcml0aWNhbCIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbCiAgewogICAgbmFtZTogIlNTSCBDb25uZWN0IiwKICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChvcHRpb25zQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0aW5nIHRvOiIsIG9wdGlvbnNBcmcuaXRlbS5zZXJ2ZXIpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogIlZpZXcgTG9ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlLXRleHQiLAogICAgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iiwgb3B0aW9uc0FyZy5pdGVtLnNlcnZlcik7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiUmVzdGFydCBTZXJ2ZXIiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaC1jdyIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLCBvcHRpb25zQXJnLml0ZW0uc2VydmVyKTsKICAgIH0KICB9Cl19IgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggSG9yaXpvbnRhbCBMaW5lcyBPbmx5PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW1waGFzaXMgb24gcm93IHNlcGFyYXRpb24gd2l0aG91dCBjb2x1bW4gZGl2aWRlcnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUGVyZm9ybWFuY2UiCiAgICAgICAgICBoZWFkaW5nMj0iVG9wIHBlcmZvcm1lcnMgdGhpcyBxdWFydGVyIgogICAgICAgICAgLnNob3dIb3Jpem9udGFsTGluZXM9JHt0cnVlfQogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBzYWxlc3BlcnNvbjogIkVtaWx5IEpvaG5zb24iLAogICAgcmVnaW9uOiAiTm9ydGggQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICI0MiIsCiAgICByZXZlbnVlOiAiJDEuMk0iLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMjglIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiTWljaGFlbCBDaGVuIiwKICAgIHJlZ2lvbjogIkFzaWEgUGFjaWZpYyIsCiAgICBkZWFsc19jbG9zZWQ6ICIzOCIsCiAgICByZXZlbnVlOiAiJDk4MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMTUlIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiU2FyYWggV2lsbGlhbXMiLAogICAgcmVnaW9uOiAiRXVyb3BlIiwKICAgIGRlYWxzX2Nsb3NlZDogIjM1IiwKICAgIHJldmVudWU6ICIkODc1SyIsCiAgICBxdW90YV9hY2hpZXZlbWVudDogIjEwOCUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0sCiAgewogICAgc2FsZXNwZXJzb246ICJEYXZpZCBHYXJjaWEiLAogICAgcmVnaW9uOiAiTGF0aW4gQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICIzMSIsCiAgICByZXZlbnVlOiAiJDc1MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICI5NSUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJzYWxlcyByZXBzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNpbXBsZSBUYWJsZSAoTm8gR3JpZCk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5DbGVhbiwgbWluaW1hbCBkZXNpZ24gd2l0aG91dCBncmlkIGxpbmVzLiBTZXQgc2hvd0dyaWQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBncmlkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlRlYW0gTWVtYmVycyIKICAgICAgICAgIGhlYWRpbmcyPSJFbmdpbmVlcmluZyBEZXBhcnRtZW50IgogICAgICAgICAgLnNob3dHcmlkPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBuYW1lOiAiQWxpY2UgSm9obnNvbiIsCiAgICByb2xlOiAiTGVhZCBFbmdpbmVlciIsCiAgICBlbWFpbDogImFsaWNlQGNvbXBhbnkuY29tIiwKICAgIGxvY2F0aW9uOiAiU2FuIEZyYW5jaXNjbyIsCiAgICBqb2luZWQ6ICIyMDIwLTAzLTE1IgogIH0sCiAgewogICAgbmFtZTogIkJvYiBTbWl0aCIsCiAgICByb2xlOiAiU2VuaW9yIERldmVsb3BlciIsCiAgICBlbWFpbDogImJvYkBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIk5ldyBZb3JrIiwKICAgIGpvaW5lZDogIjIwMTktMDctMjIiCiAgfSwKICB7CiAgICBuYW1lOiAiQ2hhcmxpZSBEYXZpcyIsCiAgICByb2xlOiAiRGV2T3BzIEVuZ2luZWVyIiwKICAgIGVtYWlsOiAiY2hhcmxpZUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkxvbmRvbiIsCiAgICBqb2luZWQ6ICIyMDIxLTAxLTEwIgogIH0sCiAgewogICAgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwKICAgIHJvbGU6ICJGcm9udGVuZCBEZXZlbG9wZXIiLAogICAgZW1haWw6ICJkaWFuYUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkJhcmNlbG9uYSIsCiAgICBqb2luZWQ6ICIyMDIyLTA1LTE4IgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgcHJvZHVjdDogIkVudGVycHJpc2UgTGljZW5zZSIsCiAgICB1bml0czogNDUsCiAgICByZXZlbnVlOiAyMjVlMywKICAgIGdyb3d0aDogMC4yMywKICAgIGZvcmVjYXN0OiAyOGU0CiAgfSwKICB7CiAgICBwcm9kdWN0OiAiUHJvZmVzc2lvbmFsIExpY2Vuc2UiLAogICAgdW5pdHM6IDEyOCwKICAgIHJldmVudWU6IDEyOGUzLAogICAgZ3Jvd3RoOiAwLjE1LAogICAgZm9yZWNhc3Q6IDE0N2UzCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiU3RhcnRlciBMaWNlbnNlIiwKICAgIHVuaXRzOiAzNDIsCiAgICByZXZlbnVlOiA2ODQwMCwKICAgIGdyb3d0aDogMC40MiwKICAgIGZvcmVjYXN0OiA5N2UzCiAgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogIFByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCwKICAiVW5pdHMgU29sZCI6IGl0ZW0udW5pdHMudG9Mb2NhbGVTdHJpbmcoKSwKICBSZXZlbnVlOiAiJCIgKyBpdGVtLnJldmVudWUudG9Mb2NhbGVTdHJpbmcoKSwKICBHcm93dGg6IChpdGVtLmdyb3d0aCAqIDEwMCkudG9GaXhlZCgxKSArICIlIiwKICAiUTEgMjAyNCBGb3JlY2FzdCI6ICIkIiArIGl0ZW0uZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKQp9KX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5FbXB0eSBUYWJsZSBTdGF0ZTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkhvdyB0aGUgdGFibGUgbG9va3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJObyBEYXRhIEF2YWlsYWJsZSIKICAgICAgICAgIGhlYWRpbmcyPSJUaGlzIHRhYmxlIGlzIGN1cnJlbnRseSBlbXB0eSIKICAgICAgICAgIC5kYXRhPSR7W119CiAgICAgICAgICBkYXRhTmFtZT0iaXRlbXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2NoZW1hLUZpcnN0IENvbHVtbnMgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5EZWZpbmVzIGNvbHVtbnMgZXhwbGljaXRseSBhbmQgcmVuZGVycyB2aWEgc2NoZW1hLiBObyBkaXNwbGF5RnVuY3Rpb24gbmVlZGVkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlVzZXJzIChTY2hlbWEtRmlyc3QpIgogICAgICAgICAgaGVhZGluZzI9IkNvbHVtbnMgZGVmaW5lIHJlbmRlcmluZyBhbmQgb3JkZXIiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCByZW5kZXJlcjogKHY1KSA9PiBiMmA8ZGVlcy1iYWRnZT4ke3Y1fTwvZGVlcy1iYWRnZT5gIH0sCiAgeyBrZXk6ICJqb2luZWRBdCIsIGhlYWRlcjogIkpvaW5lZCIsIHJlbmRlcmVyOiAodjUpID0+IG5ldyBEYXRlKHY1KS50b0xvY2FsZURhdGVTdHJpbmcoKSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSIsIGVtYWlsOiAiYWxpY2VAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjItMDgtMDEiIH0sCiAgeyBuYW1lOiAiQm9iIiwgZW1haWw6ICJib2JAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjEtMTItMTEiIH0sCiAgeyBuYW1lOiAiQ2Fyb2wiLCBlbWFpbDogImNhcm9sQGV4YW1wbGUuY29tIiwgam9pbmVkQXQ6ICIyMDIzLTAzLTIyIiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyh1NykgPT4gKHsgbmFtZTogdTcubmFtZSwgZW1haWw6IHU3LmVtYWlsLCByb2xlOiB1Ny5yb2xlIH0pfQogICAgICAgICAgLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uPSR7dHJ1ZX0KICAgICAgICAgIC5kYXRhPSR7WwogIHsgbmFtZTogIkVyaW4iLCBlbWFpbDogImVyaW5AZXhhbXBsZS5jb20iLCByb2xlOiAiQWRtaW4iIH0sCiAgeyBuYW1lOiAiRmlubiIsIGVtYWlsOiAiZmlubkBleGFtcGxlLmNvbSIsIHJvbGU6ICJVc2VyIiB9LAogIHsgbmFtZTogIkdpbmEiLCBlbWFpbDogImdpbmFAZXhhbXBsZS5jb20iLCByb2xlOiAiVXNlciIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9InVzZXJzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIiAKICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnNvbGUubG9nKCJTZWxlY3Rpb24gY2hhbmdlZCIsIGUxMS5kZXRhaWwpOwp9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0keyhlMTEpID0+IHsKICBjb25zdCB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7CiAgaWYgKHRibCkKICAgIHRibC5zZXRGaWx0ZXJUZXh0KGUxMS5kZXRhaWwudmFsdWUpOwp9fQogICAgICAgICAgIEBzZWFyY2gtc3VibWl0PSR7KGUxMSkgPT4gewogIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICBpZiAodGJsKQogICAgdGJsLnNldEZpbHRlclRleHQoZTExLmRldGFpbC52YWx1ZSk7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkZpbHRlcmluZyArIE11bHRpLVNlbGVjdGlvbiAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlVzZSB0aGUgc2VhcmNoIGJhciB0byBmaWx0ZXIgcm93czsgdG9nZ2xlIHNlbGVjdGlvbiB2aWEgY2hlY2tib3hlcy4gQ2xpY2sgaGVhZGVycyB0byBzb3J0LjwvcD4KICAgICAgICA8ZGVlcy1zZWFyY2hiYXI+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEycHgiPjwvZGl2PgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0idGFibGVGaWx0ZXJTZWxlY3REZW1vIgogICAgICAgICAgaGVhZGluZzE9IkludmVudG9yeSAoRmlsdGVyICsgU2VsZWN0KSIKICAgICAgICAgIGhlYWRpbmcyPSJUcnkgdHlwaW5nIHRvIGZpbHRlciBhbmQgc2VsZWN0aW5nIG11bHRpcGxlIHJvd3MiCiAgICAgICAgICAuc2VsZWN0aW9uTW9kZT0keyJtdWx0aSJ9CiAgICAgICAgICAucm93S2V5PSR7InNrdSJ9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogInNrdSIsIGhlYWRlcjogIlNLVSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdG9jayIsIGhlYWRlcjogIlN0b2NrIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBza3U6ICJBLTEwMCIsIG5hbWU6ICJVU0ItQyBDYWJsZSIsIHN0b2NrOiAxMjAgfSwKICB7IHNrdTogIkEtMTAxIiwgbmFtZTogIldpcmVsZXNzIE1vdXNlIiwgc3RvY2s6IDU1IH0sCiAgeyBza3U6ICJBLTEwMiIsIG5hbWU6ICJMYXB0b3AgU3RhbmQiLCBzdG9jazogMTggfSwKICB7IHNrdTogIkItMjAwIiwgbmFtZTogIktleWJvYXJkIChJU08pIiwgc3RvY2s6IDg5IH0sCiAgeyBza3U6ICJCLTIwMSIsIG5hbWU6ICJIRE1JIEFkYXB0ZXIiLCBzdG9jazogMCB9LAogIHsgc2t1OiAiQy0zMDAiLCBuYW1lOiAiV2ViY2FtIDEwODBwIiwgc3RvY2s6IDQyIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Db2x1bW4gRmlsdGVycyArIFN0aWNreSBIZWFkZXIgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5QZXItY29sdW1uIHF1aWNrIGZpbHRlcnMgYW5kIHN0aWNreSBoZWFkZXIgd2l0aCBpbnRlcm5hbCBzY3JvbGwuIFRyeSBmaWx0ZXJpbmcgdGhlIE5hbWUgY29sdW1uLiBVc2VzIC0tdGFibGUtbWF4LWhlaWdodCB2YXIuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgIGRlZXMtdGFibGVbc3RpY2t5LWhlYWRlcl0geyAtLXRhYmxlLW1heC1oZWlnaHQ6IDIyMHB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkVtcGxveWVlcyIKICAgICAgICAgIGhlYWRpbmcyPSJRdWljayBmaWx0ZXIgcGVyIGNvbHVtbiArIHN0aWNreSBoZWFkZXIiCiAgICAgICAgICAuc2hvd0NvbHVtbkZpbHRlcnM9JHt0cnVlfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0ke3RydWV9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiZGVwYXJ0bWVudCIsIGhlYWRlcjogIkRlcGFydG1lbnQiLCBzb3J0YWJsZTogdHJ1ZSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSBKb2huc29uIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJCb2IgU21pdGgiLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJTYWxlcyIgfSwKICB7IG5hbWU6ICJDaGFybGllIERhdmlzIiwgZW1haWw6ICJjaGFybGllQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkhSIiB9LAogIHsgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwgZW1haWw6ICJkaWFuYUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJFdGhhbiBCcm93biIsIGVtYWlsOiAiZXRoYW5AY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRmluYW5jZSIgfSwKICB7IG5hbWU6ICJGaW9uYSBDbGFyayIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU2FsZXMiIH0sCiAgeyBuYW1lOiAiR3JhY2UgTGVlIiwgZW1haWw6ICJncmFjZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJIZW5yeSBXaWxzb24iLCBlbWFpbDogImhlbnJ5QGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIk1hcmtldGluZyIgfSwKICB7IG5hbWU6ICJJcmVuZSBXYWxrZXIiLCBlbWFpbDogImlyZW5lQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkZpbmFuY2UiIH0sCiAgeyBuYW1lOiAiSmFjayBUdXJuZXIiLCBlbWFpbDogImphY2tAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU3VwcG9ydCIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9ImVtcGxveWVlcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiIKICAgICAgICBAc2VhcmNoUmVxdWVzdD0ke2FzeW5jIChlMTEpID0+IHsKICBjb25zdCB7IHF1ZXJ5IH0gPSBlMTEuZGV0YWlsIHx8IHsgcXVlcnk6ICIiIH07CiAgY29uc3QgdGFibGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKTsKICBjb25zdCBiYXNlRGF0YSA9IFsKICAgIHsgaWQ6IDEsIG5hbWU6ICJBbGljZSIsIGNpdHk6ICJCZXJsaW4iLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSIsIGNpdHk6ICJMb25kb24iLCB0aXRsZTogIk1hbmFnZXIiIH0sCiAgICB7IGlkOiA0LCBuYW1lOiAiRGlhbmEiLCBjaXR5OiAiTWFkcmlkIiwgdGl0bGU6ICJFbmdpbmVlciIgfSwKICAgIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9CiAgXTsKICBhd2FpdCBuZXcgUHJvbWlzZSgocjExKSA9PiBzZXRUaW1lb3V0KHIxMSwgMzAwKSk7CiAgY29uc3QgcTIgPSBTdHJpbmcocXVlcnkgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgZmlsdGVyZWQgPSBxMiA/IGJhc2VEYXRhLmZpbHRlcigocjExKSA9PiBPYmplY3QudmFsdWVzKHIxMSkuc29tZSgodjUpID0+IFN0cmluZyh2NSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxMikpKSA6IGJhc2VEYXRhOwogIHRhYmxlMi5kYXRhID0gZmlsdGVyZWQ7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZlciBTZWFyY2ggKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5TZWxlY3QgU2VydmVyIG1vZGUsIHR5cGUgYSBxdWVyeSwgYW5kIHdhdGNoIHRoZSB0YWJsZSBmZXRjaCBzaW11bGF0ZWQgcmVzdWx0cy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzZXJ2ZXJTZWFyY2hEZW1vIgogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSAoU2VydmVyIFNlYXJjaCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ2xpY2sgU2VhcmNoLCBjaG9vc2UgU2VydmVyIG1vZGUsIGFuZCB0eXBlIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIgfSwKICB7IGtleTogImNpdHkiLCBoZWFkZXI6ICJDaXR5IiB9LAogIHsga2V5OiAidGl0bGUiLCBoZWFkZXI6ICJUaXRsZSIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIiwgY2l0eTogIkJlcmxpbiIsIHRpdGxlOiAiRW5naW5lZXIiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUiLCBjaXR5OiAiTG9uZG9uIiwgdGl0bGU6ICJNYW5hZ2VyIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSIsIGNpdHk6ICJNYWRyaWQiLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0icGVvcGxlIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPldpZGUgUHJvcGVydGllcyArIE1hbnkgQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgdGFibGUgd2l0aCBtYW55IGNvbHVtbnMgYW5kIHJpY2ggYWN0aW9ucyB0byBzdHJlc3MgdGVzdCBsYXlvdXQgYW5kIHN0aWNreSBBY3Rpb25zLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSBEaXJlY3RvcnkiCiAgICAgICAgICBoZWFkaW5nMj0iTWFueSBwcm9wZXJ0aWVzIGFuZCBhY3Rpb25zIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInJvbGUiLCBoZWFkZXI6ICJSb2xlIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiIH0sCiAgeyBrZXk6ICJwaG9uZSIsIGhlYWRlcjogIlBob25lIiB9LAogIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdGF0dXMiLCBoZWFkZXI6ICJTdGF0dXMiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiY3JlYXRlZEF0IiwgaGVhZGVyOiAiQ3JlYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImxhc3RMb2dpbiIsIGhlYWRlcjogIkxhc3QgTG9naW4iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAicHJvamVjdHMiLCBoZWFkZXI6ICJQcm9qZWN0cyIgfSwKICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogIHsga2V5OiAibm90ZXMiLCBoZWFkZXI6ICJOb3RlcyIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIEpvaG5zb24iLCByb2xlOiAiRW5naW5lZXIiLCBkZXBhcnRtZW50OiAiUiZEIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTExIiwgbG9jYXRpb246ICJCZXJsaW4iLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIzLTAxLTEyIiwgdXBkYXRlZEF0OiAiMjAyNC0wNS0wMyIsIGxhc3RMb2dpbjogIjIwMjQtMTAtMDEiLCBwcm9qZWN0czogNSwgdGFnczogInR5cGVzY3JpcHQsIHVpIiwgbm90ZXM6ICJNZW50b3IiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiBTbWl0aCIsIHJvbGU6ICJEZXNpZ25lciIsIGRlcGFydG1lbnQ6ICJEZXNpZ24iLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTEyIiwgbG9jYXRpb246ICJQYXJpcyIsIHN0YXR1czogIkFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMjItMTEtMDUiLCB1cGRhdGVkQXQ6ICIyMDI0LTA0LTEwIiwgbGFzdExvZ2luOiAiMjAyNC0wOS0yOCIsIHByb2plY3RzOiA4LCB0YWdzOiAiZmlnbWEsIGJyYW5kIiwgbm90ZXM6ICJQYXJ0LXRpbWUiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUgRGF2aXMiLCByb2xlOiAiTWFuYWdlciIsIGRlcGFydG1lbnQ6ICJPcHMiLCBlbWFpbDogImNoYXJsaWVAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExMyIsIGxvY2F0aW9uOiAiTG9uZG9uIiwgc3RhdHVzOiAiT24gTGVhdmUiLCBjcmVhdGVkQXQ6ICIyMDIxLTA0LTIxIiwgdXBkYXRlZEF0OiAiMjAyNC0wMi0xNSIsIGxhc3RMb2dpbjogIjIwMjQtMDgtMTIiLCBwcm9qZWN0czogMywgdGFnczogInNyZSwgbGVhZGVyc2hpcCIsIG5vdGVzOiAiIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIHJvbGU6ICJFbmdpbmVlciIsIGRlcGFydG1lbnQ6ICJQbGF0Zm9ybSIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNCIsIGxvY2F0aW9uOiAiTWFkcmlkIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMC0wNi0zMCIsIHVwZGF0ZWRBdDogIjIwMjQtMDYtMjUiLCBsYXN0TG9naW46ICIyMDI0LTEwLTAyIiwgcHJvamVjdHM6IDYsIHRhZ3M6ICJub2RlLCBhcGkiLCBub3RlczogIk9uLWNhbGwiIH0sCiAgeyBpZDogNSwgbmFtZTogIkV0aGFuIEJyb3duIiwgcm9sZTogIlN1cHBvcnQiLCBkZXBhcnRtZW50OiAiQ1MiLCBlbWFpbDogImV0aGFuQGNvcnAuY29tIiwgcGhvbmU6ICIrMSAyMDIgNTU1IDAxMTUiLCBsb2NhdGlvbjogIlJvbWUiLCBzdGF0dXM6ICJJbmFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMTktMDktMTgiLCB1cGRhdGVkQXQ6ICIyMDI0LTAzLTA5IiwgbGFzdExvZ2luOiAiMjAyNC0wNi0xOSIsIHByb2plY3RzOiAyLCB0YWdzOiAiemVuZGVzayIsIG5vdGVzOiAiUmVoaXJlIiB9LAogIHsgaWQ6IDYsIG5hbWU6ICJGaW9uYSBDbGFyayIsIHJvbGU6ICJRQSIsIGRlcGFydG1lbnQ6ICJRQSIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNiIsIGxvY2F0aW9uOiAiVmllbm5hIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMi0wMy0xNCIsIHVwZGF0ZWRBdDogIjIwMjQtMDMtMDEiLCBsYXN0TG9naW46ICIyMDI0LTA5LTA3IiwgcHJvamVjdHM6IDcsIHRhZ3M6ICJwbGF5d3JpZ2h0Iiwgbm90ZXM6ICIiIH0KXX0KICAgICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICB7IG5hbWU6ICJWaWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJ2aWV3IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJlZGl0IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkRlbGV0ZSIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJkZWxldGUiLCBpdGVtKTsKICB9IH0sCiAgeyBuYW1lOiAiTWVzc2FnZSIsIGljb25OYW1lOiAibHVjaWRlOm1lc3NhZ2Utc3F1YXJlIiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJtZXNzYWdlIiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkhpc3RvcnkiLCBpY29uTmFtZTogImx1Y2lkZTpjbG9jayIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiaGlzdG9yeSIsIGl0ZW0pOwogIH0gfSwKICB7IG5hbWU6ICJBZGQgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIHR5cGU6IFsiaGVhZGVyIl0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IHRhYmxlOiB0YWJsZTIgfSkgPT4gewogICAgY29uc29sZS5sb2coImFkZCIpOwogIH0gfSwKICB7IG5hbWU6ICJFeHBvcnQgQ1NWIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCB0eXBlOiBbImhlYWRlciJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyB0YWJsZTogdGFibGUyIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJleHBvcnQiKTsKICB9IH0sCiAgeyBuYW1lOiAiQnVsayBEZWxldGUiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaC0yIiwgdHlwZTogWyJmb290ZXIiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgdGFibGU6IHRhYmxlMiB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiYnVsayBkZWxldGUiKTsKICB9IH0KXX0KICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY3JvbGxhYmxlIFNtYWxsIEhlaWdodDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIG1hbnkgaXRlbXMgYW5kIGEgc21hbGwgZml4ZWQgaGVpZ2h0IHRvIGZvcmNlIHZlcnRpY2FsIHNjcm9sbGluZyBpbnNpZGUgdGhlIHRhYmxlLiBBY3Rpb25zIHJlbWFpbiB2aXNpYmxlIG9uIHRoZSByaWdodDsgaG9yaXpvbnRhbCBzY3JvbGwgYXBwZWFycyBpZiBuZWVkZWQuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICNzY3JvbGxTbWFsbEhlaWdodCB7IC0tdGFibGUtbWF4LWhlaWdodDogMjQwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2Nyb2xsU21hbGxIZWlnaHQiCiAgICAgICAgICAuc3RpY2t5SGVhZGVyPSR7dHJ1ZX0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogIHsga2V5OiAiaWQiLCBoZWFkZXI6ICJJRCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJyb2xlIiwgaGVhZGVyOiAiUm9sZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJkZXBhcnRtZW50IiwgaGVhZGVyOiAiRGVwYXJ0bWVudCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogIHsga2V5OiAicGhvbmUiLCBoZWFkZXI6ICJQaG9uZSIgfSwKICB7IGtleTogImxvY2F0aW9uIiwgaGVhZGVyOiAiTG9jYXRpb24iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImNyZWF0ZWRBdCIsIGhlYWRlcjogIkNyZWF0ZWQiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAidXBkYXRlZEF0IiwgaGVhZGVyOiAiVXBkYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInByb2plY3RzIiwgaGVhZGVyOiAiUHJvamVjdHMiIH0sCiAgeyBrZXk6ICJ0YWdzIiwgaGVhZGVyOiAiVGFncyIgfSwKICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KXX0KICAgICAgICAgIC5kYXRhPSR7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTAwIH0sIChfNCwgaTExKSA9PiAoewogIGlkOiBpMTEgKyAxLAogIG5hbWU6IGBVc2VyICR7aTExICsgMX1gLAogIHJvbGU6IFsiRW5naW5lZXIiLCAiRGVzaWduZXIiLCAiTWFuYWdlciIsICJRQSIsICJTdXBwb3J0Il1baTExICUgNV0sCiAgZGVwYXJ0bWVudDogWyJSJkQiLCAiRGVzaWduIiwgIk9wcyIsICJRQSIsICJDUyJdW2kxMSAlIDVdLAogIGVtYWlsOiBgdXNlciR7aTExICsgMX1AY29ycC5jb21gLAogIHBob25lOiBgKzEgMjAyIDU1NSAke1N0cmluZygxZTMgKyBpMTEpLnNsaWNlKC00KX1gLAogIGxvY2F0aW9uOiBbIkJlcmxpbiIsICJQYXJpcyIsICJMb25kb24iLCAiTWFkcmlkIiwgIlJvbWUiXVtpMTEgJSA1XSwKICBzdGF0dXM6IFsiQWN0aXZlIiwgIkluYWN0aXZlIiwgIk9uIExlYXZlIl1baTExICUgM10sCiAgY3JlYXRlZEF0OiBgMjAyMy0ke1N0cmluZyhpMTEgJSAxMiArIDEpLnBhZFN0YXJ0KDIsICIwIil9LSR7U3RyaW5nKGkxMSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHVwZGF0ZWRBdDogYDIwMjQtJHtTdHJpbmcoKGkxMSArIDMpICUgMTIgKyAxKS5wYWRTdGFydCgyLCAiMCIpfS0ke1N0cmluZygoaTExICsgNykgJSAyOCArIDEpLnBhZFN0YXJ0KDIsICIwIil9YCwKICBsYXN0TG9naW46IGAyMDI0LSR7U3RyaW5nKChpMTEgKyA2KSAlIDEyICsgMSkucGFkU3RhcnQoMiwgIjAiKX0tJHtTdHJpbmcoKGkxMSArIDEwKSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHByb2plY3RzOiBpMTEgJSAxMiwKICB0YWdzOiBpMTEgJSAyID8gInR5cGVzY3JpcHQiIDogImRlc2lnbiIsCiAgbm90ZXM6IGkxMSAlIDMgPyAiIiA6ICJOb3RlIgp9KSl9CiAgICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgeyBuYW1lOiAiVmlldyIsIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICB9IH0sCiAgeyBuYW1lOiAiRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2giLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogIH0gfQpdfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIHRhYmxlU3R5bGVzID0gWwogIHRoZW1lRGVmYXVsdFN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgbWluLWhlaWdodDogNjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcxIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmdTZXBhcmF0aW9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGVyQWN0aW9ucyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuaGVhZGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgICAgICAuc2VhcmNoR3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIGxldCBzZWFyY2ggbW9kZSBzaXplIHRvIGNvbnRlbnQgKG5vIGZvcmNlZCB3aWR0aCkgKi8KCiAgICAgIC5zZWFyY2hHcmlkLmhpZGRlbiB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDBweCAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDBweDsKICAgICAgfQoKICAgICAgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAvKiBlbmFibGUgaG9yaXpvbnRhbCBzY3JvbGwgb25seSB3aGVuIGNvbnRlbnQgZXhjZWVkcyB3aWR0aCAqLwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgLyogcHJldmVudCB2ZXJ0aWNhbCBzY3JvbGwgaW5zaWRlIHRoZSB0YWJsZSBjb250YWluZXIgKi8KICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgLyogYXZvaWQgcmVzZXJ2aW5nIGV4dHJhIHNwYWNlIGZvciBjbGFzc2ljIHNjcm9sbGJhcnMgd2hlcmUgcG9zc2libGUgKi8KICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsKICAgICAgfQogICAgICAvKiBIaWRlIGhvcml6b250YWwgc2Nyb2xsYmFyIGVudGlyZWx5IHdoZW4gbm90IHVzaW5nIHN0aWNreSBoZWFkZXIgKi8KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGwgewogICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLyogSUUvRWRnZSAqLwogICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgICAvKiBGaXJlZm94IChoaWRlcyBib3RoIGF4ZXMpICovCiAgICAgIH0KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAvKiBDaHJvbWUvU2FmYXJpICovCiAgICAgIH0KICAgICAgLyogSW4gc3RpY2t5LWhlYWRlciBtb2RlLCBoaWRlIG9ubHkgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGluIFdlYktpdC9CbGluayAqLwogICAgICA6aG9zdChbc3RpY2t5LWhlYWRlcl0pIC50YWJsZVNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGwgewogICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLXRhYmxlLW1heC1oZWlnaHQsIDM2MHB4KTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIC8qIGFsbG93IHRhYmxlIHRvIGdyb3cgd2lkZXIgdGhhbiBjb250YWluZXIgc28gYWN0aW9ucyBjb2x1bW4gY2FuIHN0aWNrICovCiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm5vRGF0YVNldCB7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSB0aGVhZCB0aCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERlZmF1bHQgaG9yaXpvbnRhbCBsaW5lcyAoYm90dG9tIGJvcmRlciBvbmx5KSAqLwogICAgICB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ob3Jpem9udGFsLWxpbmVzXSkgdGJvZHkgdHI6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsICJoc2woMCAwJSAxNC45JSAvIDAuNSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbHVtbiBob3ZlciBlZmZlY3QgZm9yIGJldHRlciB0cmFjZWFiaWxpdHkgKi8KICAgICAgdGQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgdGQ6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSAvIDAuMykiLCAiaHNsKDAgMCUgMTQuOSUgLyAwLjMpIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICB0ZDpob3Zlcjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEdyaWQgbW9kZSAtIHNob3dzIGJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwgbGluZXMgKi8KICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aDpmaXJzdC1jaGlsZCwKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQgewogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0aWNreSBBY3Rpb25zIGNvbHVtbiAocmlnaHQgcGlubmVkKSAqLwogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sLAogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgdGJvZHkgdHIuaGFzQXR0YWNobWVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0aDpmaXJzdC1jaGlsZCwKICAgICAgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgdGg6bGFzdC1jaGlsZCwKICAgICAgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aDpsYXN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmlubmVyQ2VsbENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgdGQgaW5wdXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQogICAgICAKICAgICAgdGQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMikiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDExLjglKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLmZvb3RlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFibGVTdGF0aXN0aWNzIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGF0YS5qcwpmdW5jdGlvbiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKSB7CiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIFtdOwogIGNvbnN0IGZpcnN0VHJhbnNmb3JtZWRJdGVtID0gZGlzcGxheUZ1bmN0aW9uKGRhdGFbMF0pOwogIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZmlyc3RUcmFuc2Zvcm1lZEl0ZW0pOwogIHJldHVybiBrZXlzMi5tYXAoKGtleTIpID0+ICh7CiAgICBrZXk6IGtleTIsCiAgICBoZWFkZXI6IGtleTIsCiAgICB2YWx1ZTogKHJvdykgPT4gZGlzcGxheUZ1bmN0aW9uKHJvdylba2V5Ml0KICB9KSk7Cn0KZnVuY3Rpb24gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnMoY29sdW1ucywgYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sIGRpc3BsYXlGdW5jdGlvbiwgZGF0YSkgewogIGNvbnN0IGJhc2UgPSAoY29sdW1ucyB8fCBbXSkuc2xpY2UoKTsKICBpZiAoIWF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKQogICAgcmV0dXJuIGJhc2U7CiAgY29uc3QgZnJvbURpc3BsYXkgPSBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKTsKICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KGJhc2UubWFwKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSkpOwogIGZvciAoY29uc3QgY29sIG9mIGZyb21EaXNwbGF5KSB7CiAgICBpZiAoIWV4aXN0aW5nS2V5cy5oYXMoU3RyaW5nKGNvbC5rZXkpKSkgewogICAgICBiYXNlLnB1c2goY29sKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2U7Cn0KZnVuY3Rpb24gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLCBkaXNwbGF5RnVuY3Rpb24pIHsKICByZXR1cm4gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07Cn0KZnVuY3Rpb24gZ2V0Vmlld0RhdGEoZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgc29ydEtleSwgc29ydERpciwgZmlsdGVyVGV4dCwgY29sdW1uRmlsdGVycywgZmlsdGVyTW9kZSA9ICJ0YWJsZSIsIGx1Y2VuZVByZWRpY2F0ZSkgewogIGxldCBhcnIgPSBkYXRhLnNsaWNlKCk7CiAgY29uc3QgZnQgPSAoZmlsdGVyVGV4dCB8fCAiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgY2YgPSBjb2x1bW5GaWx0ZXJzIHx8IHt9OwogIGNvbnN0IGNmS2V5cyA9IE9iamVjdC5rZXlzKGNmKS5maWx0ZXIoKGs0KSA9PiAoY2ZbazRdID8/ICIiKS50cmltKCkubGVuZ3RoID4gMCk7CiAgaWYgKGZ0IHx8IGNmS2V5cy5sZW5ndGggPiAwKSB7CiAgICBhcnIgPSBhcnIuZmlsdGVyKChyb3cpID0+IHsKICAgICAgZm9yIChjb25zdCBrNCBvZiBjZktleXMpIHsKICAgICAgICBpZiAoZmlsdGVyTW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBjb25zdCB2YWwgPSByb3dbazRdOwogICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbmVlZGxlID0gU3RyaW5nKGNmW2s0XSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmICghczkuaW5jbHVkZXMobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjb2wyID0gZWZmZWN0aXZlQ29sdW1ucy5maW5kKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSA9PT0gazQpOwogICAgICAgICAgaWYgKCFjb2wyIHx8IGNvbDIuaGlkZGVuIHx8IGNvbDIuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjb25zdCBuZWVkbGUgPSBTdHJpbmcoY2ZbazRdKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKCFzOS5pbmNsdWRlcyhuZWVkbGUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmdCkgewogICAgICAgIGlmIChsdWNlbmVQcmVkaWNhdGUpIHsKICAgICAgICAgIGlmICghbHVjZW5lUHJlZGljYXRlKHJvdykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBsZXQgYW55ID0gZmFsc2U7CiAgICAgICAgaWYgKGZpbHRlck1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhyb3cpKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKHM5LmluY2x1ZGVzKGZ0KSkgewogICAgICAgICAgICAgIGFueSA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCBjb2wyIG9mIGVmZmVjdGl2ZUNvbHVtbnMpIHsKICAgICAgICAgICAgaWYgKGNvbDIuaGlkZGVuKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBnZXRDZWxsVmFsdWUocm93LCBjb2wyKTsKICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoczkuaW5jbHVkZXMoZnQpKSB7CiAgICAgICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWFueSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KICBpZiAoIXNvcnRLZXkgfHwgIXNvcnREaXIpCiAgICByZXR1cm4gYXJyOwogIGNvbnN0IGNvbCA9IGVmZmVjdGl2ZUNvbHVtbnMuZmluZCgoYzExKSA9PiBTdHJpbmcoYzExLmtleSkgPT09IHNvcnRLZXkpOwogIGlmICghY29sKQogICAgcmV0dXJuIGFycjsKICBjb25zdCBkaXIgPSBzb3J0RGlyID09PSAiYXNjIiA/IDEgOiAtMTsKICBhcnIuc29ydCgoYTUsIGI1KSA9PiB7CiAgICBjb25zdCB2YSA9IGdldENlbGxWYWx1ZShhNSwgY29sKTsKICAgIGNvbnN0IHZiID0gZ2V0Q2VsbFZhbHVlKGI1LCBjb2wpOwogICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkKICAgICAgcmV0dXJuIDA7CiAgICBpZiAodmEgPT0gbnVsbCkKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHZiID09IG51bGwpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgaWYgKHR5cGVvZiB2YSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIHZiID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuICh2YSAtIHZiKSAqIGRpcjsKICAgIGNvbnN0IHNhID0gU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3Qgc2IgPSBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAoc2EgPCBzYikKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHNhID4gc2IpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgcmV0dXJuIDA7CiAgfSk7CiAgcmV0dXJuIGFycjsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2x1Y2VuZS5qcwpmdW5jdGlvbiBzdHJpcFF1b3RlcyhzOSkgewogIGlmIChzOS5zdGFydHNXaXRoKCciJykgJiYgczkuZW5kc1dpdGgoJyInKSB8fCBzOS5zdGFydHNXaXRoKCInIikgJiYgczkuZW5kc1dpdGgoIiciKSkgewogICAgcmV0dXJuIHM5LnNsaWNlKDEsIC0xKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIHNwbGl0QnlPcihpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrT1JccysvaSkubWFwKChzOSkgPT4gczkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7Cn0KZnVuY3Rpb24gc3BsaXRCeUFuZChpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrQU5EXHMrL2kpLm1hcCgoczkpID0+IHM5LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwp9CmZ1bmN0aW9uIHBhcnNlVGVybShyYXcyKSB7CiAgaWYgKCFyYXcyKQogICAgcmV0dXJuIG51bGw7CiAgbGV0IG5lZ2F0ZSA9IGZhbHNlOwogIGNvbnN0IG5vdE1hdGNoID0gcmF3Mi5tYXRjaCgvXlxzKihOT1Rccyt8LSlccyooLiopJC9pKTsKICBpZiAobm90TWF0Y2gpIHsKICAgIG5lZ2F0ZSA9IHRydWU7CiAgICByYXcyID0gbm90TWF0Y2hbMl07CiAgfQogIGNvbnN0IHJhbmdlTWF0Y2ggPSByYXcyLm1hdGNoKC9eKFteOlxzXSspXHMqOlxzKlxbKC4qPylccytUT1xzKyguKj8pXF0kL2kpOwogIGlmIChyYW5nZU1hdGNoKSB7CiAgICByZXR1cm4gewogICAgICBmaWVsZDogcmFuZ2VNYXRjaFsxXSwKICAgICAgbmVnYXRlLAogICAgICByYW5nZTogeyBsb3dlcjogc3RyaXBRdW90ZXMocmFuZ2VNYXRjaFsyXSkudG9Mb3dlckNhc2UoKSwgdXBwZXI6IHN0cmlwUXVvdGVzKHJhbmdlTWF0Y2hbM10pLnRvTG93ZXJDYXNlKCksIGluY2x1c2l2ZTogdHJ1ZSB9CiAgICB9OwogIH0KICBjb25zdCBtNiA9IHJhdzIubWF0Y2goL14oW146XHNdKylccyo6XHMqKCJbXiJdKiJ8J1teJ10qJ3xbXiInXHNdKykkLyk7CiAgaWYgKG02KSB7CiAgICByZXR1cm4geyBmaWVsZDogbTZbMV0sIHZhbHVlOiBzdHJpcFF1b3RlcyhtNlsyXSkudG9Mb3dlckNhc2UoKSwgbmVnYXRlIH07CiAgfQogIGlmIChyYXcyLmxlbmd0aCA+IDApIHsKICAgIHJldHVybiB7IHZhbHVlOiBzdHJpcFF1b3RlcyhyYXcyKS50b0xvd2VyQ2FzZSgpLCBuZWdhdGUgfTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcGFyc2VMdWNlbmUoaW5wdXQpIHsKICBpZiAoIWlucHV0KQogICAgcmV0dXJuIG51bGw7CiAgY29uc3QgY2xhdXNlcyA9IHNwbGl0QnlPcihpbnB1dCkubWFwKChjbGF1c2VTdHIpID0+IHsKICAgIGNvbnN0IHRlcm1zID0gc3BsaXRCeUFuZChjbGF1c2VTdHIpLm1hcChwYXJzZVRlcm0pLmZpbHRlcigodDkpID0+ICEhdDkgJiYgISF0OS52YWx1ZSk7CiAgICByZXR1cm4geyB0ZXJtcyB9OwogIH0pLmZpbHRlcigoYzExKSA9PiBjMTEudGVybXMubGVuZ3RoID4gMCk7CiAgaWYgKGNsYXVzZXMubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHsgY2xhdXNlcyB9Owp9CmZ1bmN0aW9uIGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUoaW5wdXQsIG1vZGUsIGNvbHVtbnMpIHsKICBjb25zdCBhc3QgPSBwYXJzZUx1Y2VuZShpbnB1dCk7CiAgaWYgKCFhc3QpCiAgICByZXR1cm4gbnVsbDsKICBjb25zdCBjb2xNYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjMTEpID0+IFtTdHJpbmcoYzExLmtleSksIGMxMV0pKTsKICBjb25zdCBjbXAgPSAoYTUsIGI1KSA9PiBhNSA8IGI1ID8gLTEgOiBhNSA+IGI1ID8gMSA6IDA7CiAgY29uc3QgY29lcmNlMiA9IChzOSkgPT4gewogICAgY29uc3Qgc3RyID0gU3RyaW5nKHM5ID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbnVtID0gTnVtYmVyKHN0cik7CiAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShzdHIpOwogICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSAmJiBzdHIudHJpbSgpICE9PSAiIikKICAgICAgcmV0dXJuIHsgdDogIm4iLCB2OiBudW0gfTsKICAgIGlmICghTnVtYmVyLmlzTmFOKGRhdGUpKQogICAgICByZXR1cm4geyB0OiAiZCIsIHY6IGRhdGUgfTsKICAgIHJldHVybiB7IHQ6ICJzIiwgdjogc3RyIH07CiAgfTsKICBjb25zdCBpblJhbmdlID0gKHZhbCwgbG93ZXIsIHVwcGVyKSA9PiB7CiAgICBjb25zdCBhNSA9IGNvZXJjZTIodmFsKTsKICAgIGNvbnN0IGxvID0gY29lcmNlMihsb3dlcik7CiAgICBjb25zdCB1cCA9IGNvZXJjZTIodXBwZXIpOwogICAgaWYgKGE1LnQgPT09ICJzIiAmJiBsby50ID09PSAicyIgJiYgdXAudCA9PT0gInMiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGNtcChhdiwgbG8udikgPj0gMCAmJiBjbXAoYXYsIHVwLnYpIDw9IDA7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gIm4iICYmIGxvLnQgPT09ICJuIiAmJiB1cC50ID09PSAibiIpIHsKICAgICAgY29uc3QgYXYgPSBhNS52OwogICAgICByZXR1cm4gYXYgPj0gbG8udiAmJiBhdiA8PSB1cC52OwogICAgfQogICAgaWYgKGE1LnQgPT09ICJkIiAmJiBsby50ID09PSAiZCIgJiYgdXAudCA9PT0gImQiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvLnYgJiYgYXYgPD0gdXAudjsKICAgIH0KICAgIGNvbnN0IGFzID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBjbXAoYXMsIGxvd2VyKSA+PSAwICYmIGNtcChhcywgdXBwZXIpIDw9IDA7CiAgfTsKICByZXR1cm4gKHJvdykgPT4gewogICAgZm9yIChjb25zdCBjbGF1c2Ugb2YgYXN0LmNsYXVzZXMpIHsKICAgICAgbGV0IGNsYXVzZU9rID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0ZXJtIG9mIGNsYXVzZS50ZXJtcykgewogICAgICAgIGxldCBvazMgPSBmYWxzZTsKICAgICAgICBpZiAodGVybS5yYW5nZSAmJiB0ZXJtLmZpZWxkKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIG9rMyA9IGluUmFuZ2Uocm93W3Rlcm0uZmllbGRdLCB0ZXJtLnJhbmdlLmxvd2VyLCB0ZXJtLnJhbmdlLnVwcGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbE1hcC5nZXQodGVybS5maWVsZCk7CiAgICAgICAgICAgIGlmICghY29sIHx8IGNvbC5oaWRkZW4pIHsKICAgICAgICAgICAgICBvazMgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBvazMgPSBpblJhbmdlKHZhbCwgdGVybS5yYW5nZS5sb3dlciwgdGVybS5yYW5nZS51cHBlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRlcm0uZmllbGQgJiYgdGVybS52YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHJvd1t0ZXJtLmZpZWxkXSA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgb2szID0gczkuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIG9rMyA9IHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnZhbHVlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtb2RlID09PSAiZGF0YSIpIHsKICAgICAgICAgICAgb2szID0gT2JqZWN0LnZhbHVlcyhyb3cpLnNvbWUoKHY1KSA9PiBTdHJpbmcodjUgPz8gIiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS52YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2szID0gY29sdW1ucy5zb21lKChjb2wpID0+IHsKICAgICAgICAgICAgICBpZiAoY29sLmhpZGRlbikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRlcm0ubmVnYXRlKQogICAgICAgICAgb2szID0gIW9rMzsKICAgICAgICBpZiAoIW9rMykgewogICAgICAgICAgY2xhdXNlT2sgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2xhdXNlT2spCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfTsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2RlZXMtdGFibGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGFibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRhYmxlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZzFfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmcxX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nMl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kYXRhX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZGVjb3JhdG9yczsKICBsZXQgX3JlcXVpcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3dLZXlfZGVjb3JhdG9yczsKICBsZXQgX3Jvd0tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9yczsKICBsZXQgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93R3JpZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zb3J0S2V5X2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0S2V5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydEtleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydERpcl9kZWNvcmF0b3JzOwogIGxldCBfc29ydERpcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnREaXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlclRleHRfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dDb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzOwogIGxldCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hNb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZElkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUYWJsZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nMV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfaGVhZGluZzJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2RhdGFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2RhdGFOYW1lX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3NlYXJjaGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9kYXRhQWN0aW9uc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9jb2x1bW5zX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Jvd0tleV9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgYXR0cmlidXRlOiBmYWxzZQogICAgICB9KV07CiAgICAgIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIGF0dHJpYnV0ZTogZmFsc2UKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9lZGl0YWJsZUZpZWxkc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy12ZXJ0aWNhbC1saW5lcyIKICAgICAgfSldOwogICAgICBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ob3Jpem9udGFsLWxpbmVzIgogICAgICB9KV07CiAgICAgIF9zaG93R3JpZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ncmlkIgogICAgICB9KV07CiAgICAgIF9zb3J0S2V5X2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3NvcnREaXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfZmlsdGVyVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogInNob3ctY29sdW1uLWZpbHRlcnMiIH0pXTsKICAgICAgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAic3RpY2t5LWhlYWRlciIgfSldOwogICAgICBfc2VhcmNoTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZElkc19kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9oZWFkaW5nMV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nMSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZzEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVhZGluZzEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcxID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmcxX2luaXRpYWxpemVycywgX2hlYWRpbmcxX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2hlYWRpbmcyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmcyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nMiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nMiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVhZGluZzIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZzJfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZzJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YV9pbml0aWFsaXplcnMsIF9kYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJrZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImtleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5rZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9rZXlfaW5pdGlhbGl6ZXJzLCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFOYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFOYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhTmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YU5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YU5hbWVfaW5pdGlhbGl6ZXJzLCBfZGF0YU5hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlYXJjaGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIF9zZWFyY2hhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YUFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfY29sdW1uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2x1bW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2x1bW5zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbHVtbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbHVtbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sdW1uc19pbml0aWFsaXplcnMsIF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3Jvd0tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyb3dLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvd0tleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb3dLZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJvd0tleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3dLZXlfaW5pdGlhbGl6ZXJzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc3BsYXlGdW5jdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzcGxheUZ1bmN0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9kaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkRGF0YVJvd19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZERhdGFSb3ciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkRGF0YVJvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZERhdGFSb3csIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkRGF0YVJvdyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWREYXRhUm93X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRhYmxlRmllbGRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlZGl0YWJsZUZpZWxkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0YWJsZUZpZWxkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZWRpdGFibGVGaWVsZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGFibGVGaWVsZHNfaW5pdGlhbGl6ZXJzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd1ZlcnRpY2FsTGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1ZlcnRpY2FsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dWZXJ0aWNhbExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dWZXJ0aWNhbExpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VmVydGljYWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93SG9yaXpvbnRhbExpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIb3Jpem9udGFsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dIb3Jpem9udGFsTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hvcml6b250YWxMaW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hvcml6b250YWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93SG9yaXpvbnRhbExpbmVzX2luaXRpYWxpemVycywgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0dyaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0dyaWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dHcmlkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93R3JpZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93R3JpZF9pbml0aWFsaXplcnMsIF9zaG93R3JpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zb3J0S2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnRLZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc29ydEtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydEtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zb3J0S2V5X2luaXRpYWxpemVycywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc29ydERpcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzb3J0RGlyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0RGlyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNvcnREaXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNvcnREaXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydERpcl9pbml0aWFsaXplcnMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2ZpbHRlclRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJUZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJUZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbHVtbkZpbHRlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sdW1uRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0NvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDb2x1bW5GaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDb2x1bW5GaWx0ZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIF9zaG93Q29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zdGlja3lIZWFkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RpY2t5SGVhZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGlja3lIZWFkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RpY2t5SGVhZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGlja3lIZWFkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgX3N0aWNreUhlYWRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWFyY2hNb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaE1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlYXJjaE1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgX3NlYXJjaE1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3Rpb25Nb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3Rpb25Nb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGlvbk1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGlvbk1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSWRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZElkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZElkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRJZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUYWJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI0OwogICAgI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMV9pbml0aWFsaXplcnMsICJoZWFkaW5nIDEiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgaGVhZGluZzEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcxKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hlYWRpbmcyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9pbml0aWFsaXplcnMsICJoZWFkaW5nIDIiKSk7CiAgICBnZXQgaGVhZGluZzIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcyKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGRhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIGRlZXMtZm9ybSBjb21wYXRpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5kYXRhOwogICAgfQogICAgc2V0IHZhbHVlKF92YWx1ZUFyZykgewogICAgfQogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAjZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIC8vIGVuZCBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLyoqCiAgICAgKiBXaGF0IGRvZXMgYSByb3cgb2YgZGF0YSByZXByZXNlbnQ/CiAgICAgKi8KICAgIGdldCBkYXRhTmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzZWFyY2hhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlYXJjaGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGF0YUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRhdGFBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gc2NoZW1hLWZpcnN0IGNvbHVtbnMgQVBJCiAgICBnZXQgY29sdW1ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2x1bW5zKHZhbHVlMikgewogICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm93S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Jvd0tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBTdGFibGUgcm93IGlkZW50aXR5IGZvciBzZWxlY3Rpb24gYW5kIHVwZGF0ZXMuIElmIHByb3ZpZGVkIGFzIGEgZnVuY3Rpb24sCiAgICAgKiBpdCBpcyBvbmx5IHVzYWJsZSBhcyBhIHByb3BlcnR5IChub3QgdmlhIGF0dHJpYnV0ZSkuCiAgICAgKi8KICAgIGdldCByb3dLZXkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyb3dLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByb3dLZXkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvd0tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLyoqCiAgICAgKiBXaGVuIHRydWUgYW5kIGNvbHVtbnMgYXJlIHByb3ZpZGVkLCBtZXJnZSBhbnkgbWlzc2luZyBjb2x1bW5zIGRpc2NvdmVyZWQKICAgICAqIHZpYSBkaXNwbGF5RnVuY3Rpb24gaW50byB0aGUgZWZmZWN0aXZlIHNjaGVtYS4KICAgICAqLwogICAgZ2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgZGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgcmV2ZXJzZURpc3BsYXlGdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkRGF0YVJvd19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkRGF0YVJvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRGF0YVJvd19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkRGF0YVJvdyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZWRpdGFibGVGaWVsZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZWRpdGFibGVGaWVsZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVkaXRhYmxlRmllbGRzKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dWZXJ0aWNhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd1ZlcnRpY2FsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dWZXJ0aWNhbExpbmVzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIb3Jpem9udGFsTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dIb3Jpem9udGFsTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIb3Jpem9udGFsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93SG9yaXpvbnRhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hvcml6b250YWxMaW5lcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dHcmlkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93R3JpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGZpbGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgZmlsZVdlYWtNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gc2ltcGxlIGNsaWVudC1zaWRlIHNvcnRpbmcgKFBoYXNlIDEpCiAgICBnZXQgc29ydEtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzb3J0S2V5KHZhbHVlMikgewogICAgICB0aGlzLiNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNvcnREaXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzb3J0RGlyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydERpcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlclRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZmlsdGVyVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAvLyBzaW1wbGUgY2xpZW50LXNpZGUgZmlsdGVyaW5nIChQaGFzZSAxKQogICAgZ2V0IGZpbHRlclRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJUZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAvLyBwZXItY29sdW1uIHF1aWNrIGZpbHRlcnMKICAgIGdldCBjb2x1bW5GaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbHVtbkZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd0NvbHVtbkZpbHRlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dDb2x1bW5GaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzdGlja3lIZWFkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGlja3lIZWFkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGlja3lIZWFkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zdGlja3lIZWFkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgInRhYmxlIikpOwogICAgLy8gc2VhcmNoIHJvdyBzdGF0ZQogICAgZ2V0IHNlYXJjaE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX19zZWFyY2hUZXh0U3ViID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICBfX3NlYXJjaE1vZGVTdWI7CiAgICAjc2VsZWN0aW9uTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsICJub25lIik7CiAgICAvLyBzZWxlY3Rpb24gKFBoYXNlIDEpCiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgc2VsZWN0ZWRJZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSWRzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX3Jvd0lkTWFwID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpOwogICAgX3Jvd0lkQ291bnRlciA9IDA7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSB0YWJsZVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgdXNpbmdDb2x1bW5zID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwOwogICAgICBjb25zdCBlZmZlY3RpdmVDb2x1bW5zID0gdXNpbmdDb2x1bW5zID8gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uLCB0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKSA6IGNvbXB1dGVDb2x1bW5zRnJvbURpc3BsYXlGdW5jdGlvbih0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKTsKICAgICAgY29uc3QgbHVjZW5lUHJlZCA9IGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUodGhpcy5maWx0ZXJUZXh0LCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGVmZmVjdGl2ZUNvbHVtbnMpOwogICAgICBjb25zdCB2aWV3RGF0YSA9IGdldFZpZXdEYXRhKHRoaXMuZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgdGhpcy5zb3J0S2V5LCB0aGlzLnNvcnREaXIsIHRoaXMuZmlsdGVyVGV4dCwgdGhpcy5jb2x1bW5GaWx0ZXJzLCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGx1Y2VuZVByZWQgfHwgdm9pZCAwKTsKICAgICAgdGhpcy5fbGFzdFZpZXdEYXRhID0gdmlld0RhdGE7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPCEtLSB0aGUgaGVhZGluZyBwYXJ0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMSI+JHt0aGlzLmxhYmVsIHx8IHRoaXMuaGVhZGluZzF9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzIiPiR7dGhpcy5oZWFkaW5nMn08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImhlYWRlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoZWFkZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZ1NlcGFyYXRpb24iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEdyaWQgaGlkZGVuIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Imx1Y2VuZSBzeW50YXggc2VhcmNoIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7YAogICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBsdWNlbmUgc3ludGF4IHRvIHNlYXJjaCBmb3IgZGF0YSwgZS5nLjoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICBuYW1lOiAiam9obiIgQU5EIGFnZTogMTgKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJzZWFyY2ggbW9kZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJ0YWJsZSIsICJkYXRhIiwgInNlcnZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidGFibGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHtgCiAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGJhc2ljIG1vZGVzOgogICAgICAgICAgICAgIAogICAgICAgICAgICAgICogdGFibGU6IG9ubHkgc2VhcmNoZXMgZGF0YSBhbHJlYWR5IGluIHRoZSB0YWJsZQogICAgICAgICAgICAgICogZGF0YTogc2VhcmNoZXMgb3JpZ2luYWwgZGF0YSwgaWdub3JpbmcgdGFibGUgdHJhbnNmb3JtcwogICAgICAgICAgICAgICogc2VydmVyOiBzZWFyY2hlcyBkYXRhIG9uIHRoZSBzZXJ2ZXIKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gdGhlIGFjdHVhbCB0YWJsZSAtLT4KICAgICAgICA8c3R5bGU+PC9zdHlsZT4KICAgICAgICAke3RoaXMuZGF0YS5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5hcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluZGV0ZXJtaW5hdGU9JHt0aGlzLmlzVmlzaWJsZVNlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnNldFNlbGVjdFZpc2libGUoZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3QgaXNTb3J0YWJsZSA9ICEhY29sLnNvcnRhYmxlOwogICAgICAgIGNvbnN0IGFyaWFTb3J0ID0gdGhpcy5nZXRBcmlhU29ydChjb2wpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9ImNvbHVtbmhlYWRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc29ydD0ke2FyaWFTb3J0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IiR7aXNTb3J0YWJsZSA/ICJjdXJzb3I6IHBvaW50ZXI7IiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IGlzU29ydGFibGUgPyB0aGlzLnRvZ2dsZVNvcnQoY29sKSA6IG51bGx9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2wuaGVhZGVyID8/IGNvbC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcihjb2wpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuIGIyYCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgOwogICAgICAgIH0KICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzID8gYjJgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICJub25lIiA/IGIyYDx0aCBzdHlsZT0id2lkdGg6NDJweDsiPjwvdGg+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgICBpZiAoY29sLmZpbHRlcmFibGUgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIGIyYDx0aD48L3RoPmA7CiAgICAgICAgcmV0dXJuIGIyYDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJGaWx0ZXIuLi4iIC52YWx1ZT0ke3RoaXMuY29sdW1uRmlsdGVyc1trZXkyXSB8fCAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnNldENvbHVtbkZpbHRlcihrZXkyLCBlMTEudGFyZ2V0LnZhbHVlKX0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHJldHVybiBiMmAgPHRoPjwvdGg+IGA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICAgICAgICAgICAgICAgICAgPC90cj5gIDogYjJgYH0KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICR7dmlld0RhdGEubWFwKChpdGVtQXJnLCByb3dJbmRleCkgPT4gewogICAgICAgIGNvbnN0IGdldFRyID0gKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGlmIChlbGVtZW50QXJnLnRhZ05hbWUgPT09ICJUUiIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ2V0VHIoZWxlbWVudEFyZy5wYXJlbnRFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVJvdyA9IGl0ZW1Bcmc7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoaXRlbUFyZyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgcmVhbFRhcmdldCA9IGdldFRyKGV2ZW50QXJnLnRhcmdldCk7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgcmVhbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJoYXNBdHRhY2htZW50Iik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgIHJlYWxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiaGFzQXR0YWNobWVudCIpOwogICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShldmVudEFyZy5kYXRhVHJhbnNmZXIuZmlsZXMpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbGVXZWFrTWFwLmdldChpdGVtQXJnKTsKICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgIHRoaXMuZmlsZVdlYWtNYXAuc2V0KGl0ZW1BcmcsIG5ld0ZpbGVzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm5ld0ZpbGVzKTsKICAgICAgICAgIH0KICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoKGFjdGlvbikgPT4gewogICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHsKICAgICAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSwKICAgICAgICAgICAgICBpY29uTmFtZTogYWN0aW9uLmljb25OYW1lLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtQXJnLAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbTsKICAgICAgICAgIH0pKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHtpdGVtQXJnID09PSB0aGlzLnNlbGVjdGVkRGF0YVJvdyA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW1BcmcpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuc2V0Um93U2VsZWN0ZWQoaXRlbUFyZywgZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZ2V0Q2VsbFZhbHVlKGl0ZW1BcmcsIGNvbCwgdGhpcy5kaXNwbGF5RnVuY3Rpb24pOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBjb2wucmVuZGVyZXIgPyBjb2wucmVuZGVyZXIodmFsdWUyLCBpdGVtQXJnLCB7IHJvd0luZGV4LCBjb2xJbmRleCwgY29sdW1uOiBjb2wgfSkgOiB2YWx1ZTI7CiAgICAgICAgICBjb25zdCBlZGl0S2V5ID0gU3RyaW5nKGNvbC5rZXkpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRibEFjdGlvbiA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiZG91YmxlQ2xpY2siKSk7CiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlRmllbGRzLmluY2x1ZGVzKGVkaXRLZXkpKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsRWRpdGluZyhlMTEsIGl0ZW1BcmcsIGVkaXRLZXkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGRibEFjdGlvbikgewogICAgICAgICAgICAgIGRibEFjdGlvbi5hY3Rpb25GdW5jKHsgaXRlbTogaXRlbUFyZywgdGFibGU6IHRoaXMgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7Y29udGVudDN9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgIH0pfQogICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnNDb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEFjdGlvbnNGb3JUeXBlKCJpblJvdyIpLm1hcCgoYWN0aW9uQXJnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gYWN0aW9uQXJnLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgIGl0ZW06IGl0ZW1BcmcsCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25BcmcuaWNvbk5hbWUgPyBiMmAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbkFyZy5pY29uTmFtZX0+PC9kZWVzLWljb24+IGAgOiBhY3Rpb25BcmcubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgfQogICAgICAgIH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA7CiAgICAgIH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogYjJgIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lIHx8ICJkYXRhIHJvd3MifSAodG90YWwpIHwKICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkRGF0YVJvdyA/IGAjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpICsgMX1gIDogYE5vYH0KICAgICAgICAgICAgc2VsZWN0ZWQKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImZvb3RlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMuZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCk7CiAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHsKICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiaGVhZGVyIikgJiYgYWN0aW9uQXJnLm5hbWUgPT09ICJTZWFyY2giKTsKICAgICAgICBpZiAoIWV4aXN0aW5nKSB7CiAgICAgICAgICB0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoewogICAgICAgICAgICBuYW1lOiAiU2VhcmNoIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nR2xhc3MiLAogICAgICAgICAgICB0eXBlOiBbImhlYWRlciJdLAogICAgICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm9wZW4gc2VhcmNoIik7CiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoR3JpZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCIpOwogICAgICAgICAgICAgIHNlYXJjaEdyaWQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhQWN0aW9ucyk7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9CiAgICAgICAgOwogICAgICAgIHRoaXMud2lyZVNlYXJjaElucHV0cygpOwogICAgICB9CiAgICB9CiAgICBfX2RlYm91bmNlVGltZXI7CiAgICBkZWJvdW5jZVJ1bihmbiwgbXMgPSAyMDApIHsKICAgICAgaWYgKHRoaXMuX19kZWJvdW5jZVRpbWVyKQogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9fZGVib3VuY2VUaW1lcik7CiAgICAgIHRoaXMuX19kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmbiwgbXMpOwogICAgfQogICAgd2lyZVNlYXJjaElucHV0cygpIHsKICAgICAgY29uc3Qgc2VhcmNoVGV4dEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LXRleHQiKTsKICAgICAgY29uc3Qgc2VhcmNoTW9kZUVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LW11bHRpdG9nZ2xlIik7CiAgICAgIGlmIChzZWFyY2hUZXh0RWwgJiYgIXRoaXMuX19zZWFyY2hUZXh0U3ViKSB7CiAgICAgICAgdGhpcy5fX3NlYXJjaFRleHRTdWIgPSBzZWFyY2hUZXh0RWwuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWwgPSBlbD8udmFsdWUgPz8gIiI7CiAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gInNlcnZlciIpIHsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0IiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyVGV4dCh2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoc2VhcmNoTW9kZUVsICYmICF0aGlzLl9fc2VhcmNoTW9kZVN1YikgewogICAgICAgIHRoaXMuX19zZWFyY2hNb2RlU3ViID0gc2VhcmNoTW9kZUVsLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChlbCkgPT4gewogICAgICAgICAgY29uc3QgbW9kZSA9IGVsPy5zZWxlY3RlZE9wdGlvbiB8fCBlbD8udmFsdWUgfHwgInRhYmxlIjsKICAgICAgICAgIGlmIChtb2RlID09PSAidGFibGUiIHx8IG1vZGUgPT09ICJkYXRhIiB8fCBtb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGUgPSBtb2RlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hUZXh0RWw/LnZhbHVlID8/ICIiOwogICAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIsIHsgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sIGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclRleHQodmFsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXRlcm1pbmVDb2x1bW5XaWR0aHMoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IHRhYmxlMiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpOwogICAgICBpZiAoIXRhYmxlMikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNlbGxzMiA9IHRhYmxlMi5yb3dzWzBdLmNlbGxzOwogICAgICBjb25zdCBoYW5kbGVDb2x1bW5CeUluZGV4ID0gYXN5bmMgKGkxMSwgd2FpdEZvclJlbmRlckFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IGNlbGwyID0gY2VsbHMyW2kxMV07CiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsMikud2lkdGg7CiAgICAgICAgaWYgKGNlbGwyLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikpIHsKICAgICAgICAgIGNvbnN0IG5lZWRlZFdpZHRoID0gdGhpcy5kYXRhQWN0aW9ucy5maWx0ZXIoKGFjdGlvbkFyZykgPT4gYWN0aW9uQXJnLnR5cGUuaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCAqIDM2OwogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSBgJHtNYXRoLm1heChuZWVkZWRXaWR0aCwgNjgpfXB4YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSB3aWR0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHdhaXRGb3JSZW5kZXJBcmcpIHsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBpZiAoY2VsbHMyW2NlbGxzMi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgYXdhaXQgaGFuZGxlQ29sdW1uQnlJbmRleChjZWxsczIubGVuZ3RoIC0gMSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgY2VsbHMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoY2VsbHMyW2kxMV0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGhhbmRsZUNvbHVtbkJ5SW5kZXgoaTExKTsKICAgICAgfQogICAgICB0YWJsZTIuc3R5bGUudGFibGVMYXlvdXQgPSAiZml4ZWQiOwogICAgfQogICAgLy8gY29tcHV0ZSBoZWxwZXJzIG1vdmVkIHRvIC4vZGF0YS50cwogICAgdG9nZ2xlU29ydChjb2wpIHsKICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgaWYgKHRoaXMuc29ydEtleSAhPT0ga2V5MikgewogICAgICAgIHRoaXMuc29ydEtleSA9IGtleTI7CiAgICAgICAgdGhpcy5zb3J0RGlyID0gImFzYyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuc29ydERpciA9PT0gImFzYyIpCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiZGVzYyI7CiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0RGlyID09PSAiZGVzYyIpIHsKICAgICAgICAgIHRoaXMuc29ydERpciA9IG51bGw7CiAgICAgICAgICB0aGlzLnNvcnRLZXkgPSB2b2lkIDA7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiYXNjIjsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0Q2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IHRoaXMuc29ydEtleSwgZGlyOiB0aGlzLnNvcnREaXIgfSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBnZXRBcmlhU29ydChjb2wpIHsKICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgcmV0dXJuICJub25lIjsKICAgICAgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gImFzYyIgPyAiYXNjZW5kaW5nIiA6ICJkZXNjZW5kaW5nIjsKICAgIH0KICAgIHJlbmRlclNvcnRJbmRpY2F0b3IoY29sKSB7CiAgICAgIGlmIChTdHJpbmcoY29sLmtleSkgIT09IHRoaXMuc29ydEtleSB8fCAhdGhpcy5zb3J0RGlyKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICByZXR1cm4gYjJgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsgb3BhY2l0eTowLjc7Ij4ke3RoaXMuc29ydERpciA9PT0gImFzYyIgPyAiXHUyNUIyIiA6ICJcdTI1QkMifTwvc3Bhbj5gOwogICAgfQogICAgLy8gZmlsdGVyaW5nIGhlbHBlcnMKICAgIHNldEZpbHRlclRleHQodmFsdWUyKSB7CiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpbHRlclRleHQ7CiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9IHZhbHVlMiA/PyAiIjsKICAgICAgaWYgKHByZXYgIT09IHRoaXMuZmlsdGVyVGV4dCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogeyB0ZXh0OiB0aGlzLmZpbHRlclRleHQsIGNvbHVtbnM6IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzIH0gfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIH0KICAgIH0KICAgIHNldENvbHVtbkZpbHRlcihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlcnMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGV4dDogdGhpcy5maWx0ZXJUZXh0LCBjb2x1bW5zOiB7IC4uLnRoaXMuY29sdW1uRmlsdGVycyB9IH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogICAgLy8gc2VsZWN0aW9uIGhlbHBlcnMKICAgIGdldFJvd0lkKHJvdykgewogICAgICBpZiAodGhpcy5yb3dLZXkpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMucm93S2V5ID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgcmV0dXJuIHRoaXMucm93S2V5KHJvdyk7CiAgICAgICAgcmV0dXJuIFN0cmluZyhyb3dbdGhpcy5yb3dLZXldKTsKICAgICAgfQogICAgICBjb25zdCBrZXkyID0gcm93OwogICAgICBpZiAoIXRoaXMuX3Jvd0lkTWFwLmhhcyhrZXkyKSkgewogICAgICAgIHRoaXMuX3Jvd0lkTWFwLnNldChrZXkyLCBTdHJpbmcoKyt0aGlzLl9yb3dJZENvdW50ZXIpKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fcm93SWRNYXAuZ2V0KGtleTIpOwogICAgfQogICAgaXNSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSk7CiAgICB9CiAgICB0b2dnbGVSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJtdWx0aSIpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMoaWQpKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzZXRSb3dTZWxlY3RlZChyb3csIGNoZWNrZWQpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIikgewogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKSB7CiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9sYXN0Vmlld0RhdGEgfHwgW107CiAgICAgIGlmICh2aWV3Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpIHsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocjExKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCkgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy5fbGFzdFZpZXdEYXRhIHx8IFtdOwogICAgICBpZiAodmlldy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgY291bnQyID0gMDsKICAgICAgZm9yIChjb25zdCByMTEgb2YgdmlldykgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgY291bnQyKys7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvdW50MiA+IDAgJiYgY291bnQyIDwgdmlldy5sZW5ndGg7CiAgICB9CiAgICBzZXRTZWxlY3RWaXNpYmxlKGNoZWNrZWQpIHsKICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgaWYgKGNoZWNrZWQpIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkgewogICAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyk7CiAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIoKHIxMSkgPT4gdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChyMTEpKSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgc2VsZWN0ZWRJZHMsIHNlbGVjdGVkUm93cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZ2V0QWN0aW9uc0ZvclR5cGUodHlwZUFyZykgewogICAgICBjb25zdCBhY3Rpb25zID0gW107CiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICBpZiAoIWFjdGlvbi50eXBlLmluY2x1ZGVzKHR5cGVBcmcpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjdGlvbnM7CiAgICB9CiAgICBhc3luYyBoYW5kbGVDZWxsRWRpdGluZyhldmVudCwgaXRlbUFyZywga2V5MikgewogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gdGFyZ2V0LnN0eWxlLmNvbG9yOwogICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICBjb25zdCB0cmFuc2Zvcm1lZEl0ZW0gPSB0aGlzLmRpc3BsYXlGdW5jdGlvbihpdGVtQXJnKTsKICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdHJhbnNmb3JtZWRJdGVtW2tleTJdID8/IGl0ZW1Bcmdba2V5Ml0gPz8gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICAgIGNvbnN0IGJsdXJJbnB1dCA9IGFzeW5jIChibHVyQXJnID0gdHJ1ZSwgc2F2ZUFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgaWYgKGJsdXJBcmcpIHsKICAgICAgICAgIGlucHV0LmJsdXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNhdmVBcmcpIHsKICAgICAgICAgIGl0ZW1Bcmdba2V5Ml0gPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBpbnB1dC5yZW1vdmUoKTsKICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSBvcmlnaW5hbENvbG9yOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9OwogICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgIGJsdXJJbnB1dChmYWxzZSwgZmFsc2UpOwogICAgICB9KTsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgYmx1cklucHV0KHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRhcmdldC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVGFibGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS9kZWVzLWZvcm0uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyNSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmZvcm0tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSAzNS4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDY1LjMlKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLnN0YXR1cy1tZXNzYWdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsICJoc2woMCA3Mi4yJSA2MC42JSkiKX07CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGNvbnN0IG91dHB1dERpdiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiLmZvcm0tb3V0cHV0Iik7CiAgaWYgKGZvcm0gJiYgb3V0cHV0RGl2KSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gYDxzdHJvbmc+U3VibWl0dGVkIERhdGE6PC9zdHJvbmc+CiR7SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMil9YDsKICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyk7CiAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIlJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKTsKICAgICAgZm9ybS5yZXNldCgpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIjxlbT5Gb3JtIGhhcyBiZWVuIHJlc2V0PC9lbT4iOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCwgZGVlcy1pbnB1dC1kcm9wZG93biwgZGVlcy1pbnB1dC1jaGVja2JveCIpOwogICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkZpZWxkIGNoYW5nZWQ6IiwgaW5wdXQuZ2V0QXR0cmlidXRlKCJrZXkiKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkNvbXBsZXRlIEZvcm0gRXhhbXBsZSIgLmRlc2NyaXB0aW9uPSJBIGNvbXByZWhlbnNpdmUgZm9ybSB3aXRoIHZhcmlvdXMgaW5wdXQgdHlwZXMsIHZhbGlkYXRpb24sIGFuZCBmb3JtIHN1Ym1pc3Npb24gaGFuZGxpbmciPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfSAKICAgICAgICAgICAga2V5PSJmaXJzdE5hbWUiIAogICAgICAgICAgICBsYWJlbD0iRmlyc3QgTmFtZSIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IllvdXIgZ2l2ZW4gbmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0gCiAgICAgICAgICAgIGtleT0iZW1haWwiIAogICAgICAgICAgICBsYWJlbD0iRW1haWwgQWRkcmVzcyIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IldlIHdpbGwgdXNlIHRoaXMgdG8gY29udGFjdCB5b3UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9ImNvdW50cnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDb3VudHJ5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH0sCiAgeyBvcHRpb246ICJDYW5hZGEiLCBrZXk6ICJjYSIgfSwKICB7IG9wdGlvbjogIkdlcm1hbnkiLCBrZXk6ICJkZSIgfSwKICB7IG9wdGlvbjogIkZyYW5jZSIsIGtleTogImZyIiB9LAogIHsgb3B0aW9uOiAiVW5pdGVkIEtpbmdkb20iLCBrZXk6ICJ1ayIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9InBhc3N3b3JkIgogICAgICAgICAgICBsYWJlbD0iUGFzc3dvcmQiCiAgICAgICAgICAgIGlzUGFzc3dvcmRCb29sCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNaW5pbXVtIDggY2hhcmFjdGVycyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIGtleT0idGVybXMiCiAgICAgICAgICAgIGxhYmVsPSJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0ibmV3c2xldHRlciIKICAgICAgICAgICAgbGFiZWw9IlNlbmQgbWUgcHJvbW90aW9uYWwgZW1haWxzIgogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGlmIChmb3JtKSB7CiAgICBjb25zb2xlLmxvZygiSG9yaXpvbnRhbCBmb3JtIGxheW91dCBhY3RpdmUiKTsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZmlsdGVycyA9IGV2ZW50LmRldGFpbC5kYXRhOwogICAgICBjb25zb2xlLmxvZygiRmlsdGVyIGFwcGxpZWQ6IiwgZmlsdGVycyk7CiAgICAgIGNvbnN0IHJlc3VsdHNDb3VudCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxOwogICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtyZXN1bHRzQ291bnR9IHJlc3VsdHMgd2l0aCBmaWx0ZXJzOmAsIGZpbHRlcnMpOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoIltrZXldIik7CiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IGZvcm0uY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgICAgY29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLCBmb3JtRGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJBbGwiLCBrZXk6ICJhbGwiIH0sCiAgeyBvcHRpb246ICJQcm9kdWN0cyIsIGtleTogInByb2R1Y3RzIiB9LAogIHsgb3B0aW9uOiAiU2VydmljZXMiLCBrZXk6ICJzZXJ2aWNlcyIgfSwKICB7IG9wdGlvbjogIlN1cHBvcnQiLCBrZXk6ICJzdXBwb3J0IiB9Cl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0ke2ZhbHNlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk5ld2VzdCIsIGtleTogIm5ld2VzdCIgfSwKICB7IG9wdGlvbjogIlBvcHVsYXIiLCBrZXk6ICJwb3B1bGFyIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IExvdyB0byBIaWdoIiwga2V5OiAicHJpY2VfYXNjIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IEhpZ2ggdG8gTG93Iiwga2V5OiAicHJpY2VfZGVzYyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICBjb25zdCBzdGF0dXNEaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzdGF0dXMtZGlzcGxheSIpOwogIGlmIChmb3JtKSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkFkdmFuY2VkIGZvcm0gZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiVmFsaWRhdGluZyB5b3VyIGluZm9ybWF0aW9uLi4uIik7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigxNTAwKTsKICAgICAgaWYgKGRhdGEuaWJhbiAmJiBkYXRhLmliYW4ubGVuZ3RoID4gMTUpIHsKICAgICAgICBmb3JtLnNldFN0YXR1cygic3VjY2VzcyIsICJBcHBsaWNhdGlvbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICAgIGlmIChzdGF0dXNEaXYpIHsKICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAic3RhdHVzLW1lc3NhZ2Ugc3VjY2VzcyI7CiAgICAgICAgICBzdGF0dXNEaXYudGV4dENvbnRlbnQgPSAiXHUyNzEzIFlvdXIgYXBwbGljYXRpb24gaGFzIGJlZW4gc3VibWl0dGVkLiBXZSB3aWxsIGNvbnRhY3QgeW91IHNvb24uIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9ybS5zZXRTdGF0dXMoImVycm9yIiwgIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKTsKICAgICAgICBpZiAoc3RhdHVzRGl2KSB7CiAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gInN0YXR1cy1tZXNzYWdlIGVycm9yIjsKICAgICAgICAgIHN0YXR1c0Rpdi50ZXh0Q29udGVudCA9ICJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coIkZvcm0gZGF0YSBsb2dnZWQ6IiwgZGF0YSk7CiAgICB9KTsKICAgIGNvbnN0IGZpbGVVcGxvYWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpOwogICAgaWYgKGZpbGVVcGxvYWQpIHsKICAgICAgZmlsZVVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRldGFpbD8uZmlsZXMgfHwgW107CiAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZXMubGVuZ3RofSBmaWxlKHMpIHNlbGVjdGVkIGZvciB1cGxvYWRgKTsKICAgICAgfSk7CiAgICB9CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICBrZXk9InBob25lIgogICAgICAgICAgICBsYWJlbD0iUGhvbmUgTnVtYmVyIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAga2V5PSJwcmVmZXJlbmNlcyIKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBQcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbWFpbCIsICJTTVMiLCAiUHVzaCIsICJJbi1BcHAiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpc2VsZWN0CiAgICAgICAgICAgIGtleT0iaW50ZXJlc3RzIgogICAgICAgICAgICAubGFiZWw9JHsiQXJlYXMgb2YgSW50ZXJlc3QifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlRlY2hub2xvZ3kiLCBrZXk6ICJ0ZWNoIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiQnVzaW5lc3MiLCBrZXk6ICJidXNpbmVzcyIgfSwKICB7IG9wdGlvbjogIk1hcmtldGluZyIsIGtleTogIm1hcmtldGluZyIgfSwKICB7IG9wdGlvbjogIlNhbGVzIiwga2V5OiAic2FsZXMiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUzMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIEZPUk1fSU5QVVRfVFlQRVMgPSBbCiAgRGVlc0lucHV0Q2hlY2tib3gsCiAgRGVlc0lucHV0Q29kZSwKICBEZWVzSW5wdXREYXRlcGlja2VyLAogIERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRRdWFudGl0eVNlbGVjdG9yLAogIERlZXNJbnB1dFJhZGlvZ3JvdXAsCiAgRGVlc0lucHV0VGV4dCwKICBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3QsCiAgRGVlc1RhYmxlCl07CnZhciBEZWVzRm9ybSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZm9ybSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9yczsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogImhvcml6b250YWwtbGF5b3V0IiB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMzKHRoaXMsIG51bGwsIF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhvcml6b250YWxMYXlvdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhvcml6b250YWxMYXlvdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaG9yaXpvbnRhbExheW91dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaG9yaXpvbnRhbExheW91dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ob3Jpem9udGFsTGF5b3V0X2luaXRpYWxpemVycywgX2hvcml6b250YWxMYXlvdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgbmFtZSA9ICJteWZvcm0iOwogICAgY2hhbmdlU3ViamVjdCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgIHJlYWR5RGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNCh0aGlzLCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8qKgogICAgICogQ29udHJvbHMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMKICAgICAqIFdoZW4gdHJ1ZSwgc2V0cyBhbGwgY2hpbGQgaW5wdXRzIHRvIGhvcml6b250YWwgbGF5b3V0CiAgICAgKi8KICAgIGdldCBob3Jpem9udGFsTGF5b3V0KCkgewogICAgICByZXR1cm4gdGhpcy4jaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhvcml6b250YWxMYXlvdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hvcml6b250YWxMYXlvdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICB0aGlzLnVwZGF0ZVJlcXVpcmVkU3RhdHVzKCk7CiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZm9ybUNoaWxkcmVuKSB7CiAgICAgICAgY2hpbGQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSBhd2FpdCB0aGlzLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWVPYmplY3QpOwogICAgICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgICAgICAgdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMuYWRkQmVoYXZpb3VycygpOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgZ2V0Rm9ybUVsZW1lbnRzKCkgewogICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGNoaWxkKSA9PiBGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKGNoaWxkLmNvbnN0cnVjdG9yKSk7CiAgICB9CiAgICBnZXRTdWJtaXRCdXR0b24oKSB7CiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGNoaWxkKSA9PiBjaGlsZCBpbnN0YW5jZW9mIERlZXNGb3JtU3VibWl0KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVJlcXVpcmVkU3RhdHVzKCkgewogICAgICBjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTsKICAgICAgbGV0IHJlcXVpcmVkT0sgPSB0cnVlOwogICAgICBmb3IgKGNvbnN0IGNoaWxkQXJnIG9mIHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkpIHsKICAgICAgICBpZiAoY2hpbGRBcmcucmVxdWlyZWQgJiYgIWNoaWxkQXJnLnZhbHVlKSB7CiAgICAgICAgICByZXF1aXJlZE9LID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmdldFN1Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgdGhpcy5nZXRTdWJtaXRCdXR0b24oKS5kaXNhYmxlZCA9ICFyZXF1aXJlZE9LOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIGNvbGxlY3RzIHRoZSBmb3JtIGRhdGEKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIGNvbGxlY3RGb3JtRGF0YSgpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSB7fTsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbjIpIHsKICAgICAgICBpZiAoIWNoaWxkLmtleSkgewogICAgICAgICAgY29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2NoaWxkLmxhYmVsfSIgaGFzIG5vIGtleS4gc2tpcHBpbmcuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFsdWVPYmplY3RbY2hpbGQua2V5XSA9IGNoaWxkLnZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZU9iamVjdDsKICAgIH0KICAgIGFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCkgewogICAgICBjb25zdCB2YWx1ZU9iamVjdCA9IGF3YWl0IHRoaXMuY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgIGNvbnN0IGZvcm1EYXRhRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImZvcm1EYXRhIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgZGF0YTogdmFsdWVPYmplY3QKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChmb3JtRGF0YUV2ZW50KTsKICAgICAgY29uc29sZS5sb2coImRpc3BhdGNoZWQgZGF0YToiKTsKICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgfQogICAgc2V0U3RhdHVzKHZpc3VhbFN0YXRlQXJnLCB0ZXh0U3RhdGVBcmcpIHsKICAgICAgY29uc3QgaW5wdXRDaGlsZHJlbiA9IHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgIHN3aXRjaCAodmlzdWFsU3RhdGVBcmcpIHsKICAgICAgICBjYXNlICJub3JtYWwiOgogICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gIm5vcm1hbCI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwZW5kaW5nIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdWNjZXNzIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInN1Y2Nlc3MiOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgc3VibWl0QnV0dG9uLnN0YXR1cyA9ICJlcnJvciI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0ID0gdGV4dFN0YXRlQXJnOwogICAgfQogICAgLyoqCiAgICAgKiByZXNldHMgdGhlIGZvcm0KICAgICAqLwogICAgcmVzZXQoKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpOwogICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgIGlucHV0Q2hpbGQudmFsdWUgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuc2V0U3RhdHVzKCJub3JtYWwiLCAiU3VibWl0Iik7CiAgICB9CiAgICBhc3luYyBhZGRCZWhhdmlvdXJzKCkgewogICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgaWYgKCFGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKHRhcmdldC5jb25zdHJ1Y3RvcikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRhcmdldCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgY2hpbGRyZW4yW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXQuYmx1cigpOwogICAgICAgICAgICB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpPy5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMgYmFzZWQgb24gZm9ybSdzIGhvcml6b250YWxMYXlvdXQgcHJvcGVydHkKICAgICAqLwogICAgdXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgIGlmICgibGF5b3V0TW9kZSIgaW4gY2hpbGQpIHsKICAgICAgICAgIGNoaWxkLmxheW91dE1vZGUgPSAiYXV0byI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlCiAgICAgKi8KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImhvcml6b250YWxMYXlvdXQiKSkgewogICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM0KHRoaXMsIF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIGRlbW9GdW5jMjYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAudmVydGljYWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuaWNvbi1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCB0eXBlNSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInR5cGUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke3R5cGU1fWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQnV0dG9uIFZhcmlhbnRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCB2aXN1YWwgc3R5bGVzIGZvciB2YXJpb3VzIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCI+RGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5Ij5TZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5EZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+T3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPkdob3N0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJsaW5rIj5MaW5rIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3Qgc2l6ZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInNpemUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gc2l6ZTogJHtzaXplfWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gQnV0dG9uIFNpemVzIn0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIHNpemVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0ic20iPlNtYWxsIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCI+RGVmYXVsdCBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyI+TGFyZ2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiAudGV4dD0keyJcdXsxRjY4MH0ifT48L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSIgdHlwZT0ic2Vjb25kYXJ5Ij5TbWFsbCBTZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImRlZmF1bHQiIHR5cGU9ImRlc3RydWN0aXZlIj5EZWZhdWx0IERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyIgdHlwZT0ib3V0bGluZSI+TGFyZ2UgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBpY29uQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBpY29uQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCBoYXNJY29uID0gYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICBpZiAoaGFzSWNvbikgewogICAgICAgIGNvbnN0IGljb25OYW1lID0gaGFzSWNvbi5nZXRBdHRyaWJ1dGUoImljb25GQSIpIHx8ICJ1bmtub3duIjsKICAgICAgICBjb25zb2xlLmxvZyhgSWNvbiBidXR0b24gY2xpY2tlZDogJHtpY29uTmFtZX1gKTsKICAgICAgfQogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBZGQgSXRlbQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEZWxldGUKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgRG93bmxvYWQKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgU2V0dGluZ3MKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmNhcmV0TGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEJhY2sKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICBOZXh0CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9InNlY29uZGFyeSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Z2VhciI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTZWFyY2giPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3QgaWNvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgIm5vbmUiOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uUG9zaXRpb24iKSB8fCAibGVmdCI7CiAgICAgIGNvbnNvbGUubG9nKGBJY29uIHByb3BlcnR5IGJ1dHRvbjogaWNvbj0ke2ljb24zfSwgcG9zaXRpb249JHtwb3NpdGlvbjN9YCk7CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBJY29ucyB2aWEgUHJvcGVydHkifSAuc3VidGl0bGU9JHsiU2ltcGxpZmllZCBpY29uIHN5bnRheCB1c2luZyB0aGUgaWNvbiBwcm9wZXJ0eSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIGljb249ImZhOnRyYXNoIj5EZWxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIGljb249Imx1Y2lkZTpEb3dubG9hZCI+RG93bmxvYWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSIgaWNvbj0iZmE6Z2VhciI+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldExlZnQiPkJhY2s8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0Ij5OZXh0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlZmF1bHQiIGljb249ImZhOnBsdXMiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ic2Vjb25kYXJ5IiBpY29uPSJsdWNpZGU6U2V0dGluZ3MiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOlNlYXJjaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCIgaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtc25pcHBldCI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIiZndDtBZGQgSXRlbSZsdDsvZGVlcy1idXR0b24mZ3Q7PGJyPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gaWNvbj0iZmE6Y2FyZXRSaWdodCIgaWNvblBvc2l0aW9uPSJyaWdodCImZ3Q7TmV4dCZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGVuZGluZ0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKTsKICBjb25zdCBzdWNjZXNzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9InN1Y2Nlc3MiXScpOwogIGNvbnN0IGVycm9yQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9ImVycm9yIl0nKTsKICBpZiAocGVuZGluZ0J1dHRvbikgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKTsKICAgIH0sIDFlMyk7CiAgfQogIGlmIChzdWNjZXNzQnV0dG9uKSB7CiAgICBzdWNjZXNzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTdWNjZXNzIHN0YXRlIGJ1dHRvbiBjbGlja2VkIik7CiAgICB9KTsKICB9CiAgaWYgKGVycm9yQnV0dG9uKSB7CiAgICBlcnJvckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjbGljay1vdXRwdXQiKTsKICBjb25zdCBjbGlja01lQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIik7CiAgY29uc3QgZGF0YUJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0ic2Vjb25kYXJ5Il0nKTsKICBjb25zdCBhc3luY0J0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZGVzdHJ1Y3RpdmUiXScpOwogIGlmIChjbGlja01lQnRuICYmIG91dHB1dCkgewogICAgY2xpY2tNZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlVGltZVN0cmluZygpfWA7CiAgICB9KTsKICB9CiAgaWYgKGRhdGFCdG4gJiYgb3V0cHV0KSB7CiAgICBkYXRhQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtlMTEuZGV0YWlsLmRhdGF9YDsKICAgIH0pOwogIH0KICBpZiAoYXN5bmNCdG4gJiYgb3V0cHV0KSB7CiAgICBhc3luY0J0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgYXN5bmMgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiUHJvY2Vzc2luZy4uLiI7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiQWN0aW9uIGNvbXBsZXRlZCEiOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGV4YW1wbGVzIHdpdGggY2xpY2sgZXZlbnQgaGFuZGxpbmcifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNsaWNrIE1lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIC5ldmVudERldGFpbERhdGE9JHsiY3VzdG9tLWRhdGEtMTIzIn0+CiAgICAgICAgICAgIENsaWNrIHdpdGggRGF0YQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+QXN5bmMgQWN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJjbGljay1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+Q2xpY2sgYSBidXR0b24gdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZm9ybS1vdXRwdXQiKTsKICBpZiAoZm9ybSAmJiBvdXRwdXQpIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLmRhdGEsIG51bGwsIDIpOwogICAgfSk7CiAgfQogIGNvbnN0IGRyYWZ0QnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpOwogIGNvbnN0IGNhbmNlbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZ2hvc3QiXScpOwogIGlmIChkcmFmdEJ0bikgewogICAgZHJhZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlNhdmUgRHJhZnQgY2xpY2tlZCIpOwogICAgfSk7CiAgfQogIGlmIChjYW5jZWxCdG4pIHsKICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgY29uc3QgdHlwZTUgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CiAgICBpZiAodHlwZTUpIHsKICAgICAgY29uc29sZS5sb2coYExlZ2FjeSB0eXBlICIke3R5cGU1fSIgaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5YCk7CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSJ9IC5zdWJ0aXRsZT0keyJPbGQgYnV0dG9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcHBlZCB0byBuZXcgdmFyaWFudHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im5vcm1hbCI+Tm9ybWFsIOKGkiBEZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+SGlnaGxpZ2h0ZWQg4oaSIERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkaXNjcmVldCI+RGlzY3JlZXQg4oaSIE91dGxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImJpZyI+QmlnIOKGkiBMYXJnZSBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYWN0aW9uR3JvdXAgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdOwogIGNvbnN0IGRhbmdlckdyb3VwID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTsKICBpZiAoYWN0aW9uR3JvdXApIHsKICAgIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Hcm91cC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4MikgPT4gewogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgICBjb25zdCBhY3Rpb24gPSBbIlNhdmUgQ2hhbmdlcyIsICJEaXNjYXJkIiwgIkhlbHAiXVtpbmRleDJdOwogICAgICAgIGNvbnNvbGUubG9nKGBBY3Rpb24gZ3JvdXA6ICR7YWN0aW9ufSBjbGlja2VkYCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQogIGlmIChkYW5nZXJHcm91cCkgewogICAgY29uc3QgYnV0dG9ucyA9IGRhbmdlckdyb3VwLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbiwgaW5kZXgyKSA9PiB7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgIGNvbnN0IGFjdGlvbiA9IFsiRGVsZXRlIEFjY291bnQiLCAiQXJjaGl2ZSBEYXRhIiwgIk5vdCBBdmFpbGFibGUiXVtpbmRleDJdOwogICAgICAgIGlmIChpbmRleDIgIT09IDIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHthY3Rpb259IGNsaWNrZWRgKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEFkdmFuY2VkIEV4YW1wbGVzIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXggYnV0dG9uIGNvbmZpZ3VyYXRpb25zIGFuZCByZWFsLXdvcmxkIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5BY3Rpb24gR3JvdXA8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNhdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6VW5kbzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERpc2NhcmQKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVscENpcmNsZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgSGVscAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5EYW5nZXIgWm9uZTwvaDQ+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERlbGV0ZSBBY2NvdW50CiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6QXJjaGl2ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgQXJjaGl2ZSBEYXRhCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iIGRpc2FibGVkPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkJhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgTm90IEF2YWlsYWJsZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjRweDsiPgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+Q29kZSBFeGFtcGxlOjwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLXNuaXBwZXQiPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIGljb249Imx1Y2lkZTpTYXZlIiBAY2xpY2tlZD0iXCR7aGFuZGxlQ2xpY2t9IiZndDs8YnI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwO1NhdmUgQ2hhbmdlczxicj4KICAgICAgICAgICAgJmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50RGV0YWlsRGF0YV9kZWNvcmF0b3JzOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzSGlkZGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luc2lkZUZvcm1fZGVjb3JhdG9yczsKICBsZXQgX2luc2lkZUZvcm1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvblBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90ZXh0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgaGFzQ2hhbmdlZCgpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSldOwogICAgICBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNIaWRkZW5fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2luc2lkZUZvcm1fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX2ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50RGV0YWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnREZXRhaWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50RGV0YWlsRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnREZXRhaWxEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50RGV0YWlsRGF0YV9pbml0aWFsaXplcnMsIF9ldmVudERldGFpbERhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pc0hpZGRlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hpZGRlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIaWRkZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIaWRkZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzSGlkZGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSGlkZGVuX2luaXRpYWxpemVycywgX2lzSGlkZGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50eXBlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfaW5zaWRlRm9ybV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnNpZGVGb3JtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnNpZGVGb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluc2lkZUZvcm0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluc2lkZUZvcm0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25faW5pdGlhbGl6ZXJzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvblBvc2l0aW9uX2luaXRpYWxpemVycywgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0J1dHRvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI2OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9ldmVudERldGFpbERhdGFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBldmVudERldGFpbERhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBldmVudERldGFpbERhdGEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzSGlkZGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0hpZGRlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICBnZXQgc3RhdHVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5zaWRlRm9ybSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luc2lkZUZvcm1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbnNpZGVGb3JtKHZhbHVlMikgewogICAgICB0aGlzLiNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2luc2lkZUZvcm1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9pY29uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgaWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IGljb25Qb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGljb25Qb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAoIXRoaXMuaW5zaWRlRm9ybSAmJiB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpKSB7CiAgICAgICAgdGhpcy5pbnNpZGVGb3JtID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTAuMiUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA4NSUpIiwgImhzbCgyMTUgMjAuMiUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLm91dGxpbmU6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCAiaHNsKDIxNSAyMC4yJSAyNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24ub3V0bGluZTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBTZWNvbmRhcnkgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgODUlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIHN0YXRlcyAqLwogICAgICAuYnV0dG9uLnBlbmRpbmcsCiAgICAgIC5idXR0b24uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzNnB4OyAvKiBTcGFjZSBmb3Igc3Bpbm5lciAqLwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLXNtLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1zbS5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLWxnLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1sZy5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0NHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnBlbmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDYyLjglIDcwLjYlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLmJ1dHRvbi5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGUgKi8KICAgICAgLmJ1dHRvbjpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgICB9CgogICAgICAvKiBMb2FkaW5nIHNwaW5uZXIgKi8KICAgICAgZGVlcy1zcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbSBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDE0cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBJY29uIHNpemluZyB3aXRoaW4gYnV0dG9ucyAqLwogICAgICAuYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQoKICAgICAgLyogVGV4dCBhbGlnbm1lbnQgKi8KICAgICAgLnRleHRib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICAvKioKICAgICAqIEV4dHJhY3RzIGljb24gYW5kIHRleHQgZnJvbSBsaWdodCBET00gYW5kIHNldHMgcHJvcGVydGllcwogICAgICovCiAgICBleHRyYWN0TGlnaHREb20oKSB7CiAgICAgIGNvbnN0IGljb25FbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTsKICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZmlsdGVyKChub2RlMikgPT4gbm9kZTIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKS5tYXAoKG5vZGUyKSA9PiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICBpZiAodGV4dENvbnRlbnQgJiYgIXRoaXMudGV4dCkgewogICAgICAgIHRoaXMudGV4dCA9IHRleHRDb250ZW50OwogICAgICB9CiAgICAgIGlmIChpY29uRWxlbWVudCkgewogICAgICAgIGNvbnN0IGljb25WYWx1ZSA9IGljb25FbGVtZW50Lmljb24gfHwgaWNvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgKGljb25FbGVtZW50Lmljb25GQSA/IGBmYToke2ljb25FbGVtZW50Lmljb25GQX1gIDogbnVsbCk7CiAgICAgICAgaWYgKGljb25WYWx1ZSkgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkTm9kZXMpOwogICAgICAgICAgY29uc3QgaWNvbkluZGV4ID0gY2hpbGRyZW4yLmluZGV4T2YoaWNvbkVsZW1lbnQpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gY2hpbGRyZW4yLmZpbHRlcigobm9kZTIpID0+IG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBmaXJzdFRleHRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRleHROb2Rlc1swXSk7CiAgICAgICAgICAgIHRoaXMuaWNvblBvc2l0aW9uID0gaWNvbkluZGV4IDwgZmlyc3RUZXh0SW5kZXggPyAibGVmdCIgOiAicmlnaHQiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pY29uID0gaWNvblZhbHVlOwogICAgICAgIH0KICAgICAgICBpY29uRWxlbWVudC5yZW1vdmUoKTsKICAgICAgfQogICAgICB0aGlzLmlubmVySFRNTCA9ICIiOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB0eXBlTWFwID0gewogICAgICAgICJub3JtYWwiOiAiZGVmYXVsdCIsCiAgICAgICAgImhpZ2hsaWdodGVkIjogImRlc3RydWN0aXZlIiwKICAgICAgICAiZGlzY3JlZXQiOiAib3V0bGluZSIsCiAgICAgICAgImJpZyI6ICJkZWZhdWx0IgogICAgICAgIC8vIFdpbGwgdXNlIHNpemUgaW5zdGVhZAogICAgICB9OwogICAgICBjb25zdCBhY3R1YWxUeXBlID0gdHlwZU1hcFt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZTsKICAgICAgY29uc3QgYWN0dWFsU2l6ZSA9IHRoaXMudHlwZSA9PT0gImJpZyIgPyAibGciIDogdGhpcy5zaXplOwogICAgICBjb25zdCBsZWZ0SWNvbiA9IHRoaXMuaWNvblBvc2l0aW9uID09PSAibGVmdCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICBjb25zdCByaWdodEljb24gPSB0aGlzLmljb25Qb3NpdGlvbiA9PT0gInJpZ2h0IiAmJiB0aGlzLmljb24gPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5pY29ufT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICAgIGNvbnN0IGlzSWNvbk9ubHkgPSBhY3R1YWxTaXplID09PSAiaWNvbiIgJiYgdGhpcy5pY29uOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYnV0dG9uICR7dGhpcy5pc0hpZGRlbiA/ICJoaWRkZW4iIDogIiJ9ICR7YWN0dWFsVHlwZX0gc2l6ZS0ke2FjdHVhbFNpemV9ICR7dGhpcy5zdGF0dXN9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzID09PSAibm9ybWFsIiA/IGIyYGAgOiBiMmAKICAgICAgICAgIDxkZWVzLXNwaW5uZXIKICAgICAgICAgICAgLmJudz0ke3RydWV9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7YWN0dWFsU2l6ZSA9PT0gInNtIiA/IDE0IDogYWN0dWFsU2l6ZSA9PT0gImxnIiA/IDE4IDogMTZ9IgogICAgICAgICAgPjwvZGVlcy1zcGlubmVyPgogICAgICAgIGB9CiAgICAgICAgJHtsZWZ0SWNvbn0KICAgICAgICAke2lzSWNvbk9ubHkgPyAiIiA6IGIyYDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0IHx8ICJCdXR0b24ifTwvZGl2PmB9CiAgICAgICAgJHtyaWdodEljb259CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGRpc3BhdGNoQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBkYXRhOiB0aGlzLmV2ZW50RGV0YWlsRGF0YQogICAgICAgIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZXh0cmFjdExpZ2h0RG9tKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczM1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQnV0dG9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0YXRzR3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc3RhdHNncmlkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGlsZXNfZGVjb3JhdG9yczsKICBsZXQgX3RpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9nYXBfZGVjb3JhdG9yczsKICBsZXQgX2dhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2dhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2dyaWRBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0YXRzR3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90aWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWluVGlsZVdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ2FwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF90aWxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aWxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGlsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRpbGVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbGVzX2luaXRpYWxpemVycywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5UaWxlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pblRpbGVXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5UaWxlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pblRpbGVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5nYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmdhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9nYXBfaW5pdGlhbGl6ZXJzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dyaWRBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImdyaWRBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncmlkQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ncmlkQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZ3JpZEFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRleHRNZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGV4dE1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51VmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGV4dE1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudVBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZXh0TWVudVBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51UG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51UG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51QWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudUFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRleHRNZW51QWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudUFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51QWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RhdHNHcmlkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNzsKICAgICN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfdGlsZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgdGlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpbGVzKHZhbHVlMikgewogICAgICB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pblRpbGVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICBnZXQgbWluVGlsZVdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluVGlsZVdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtaW5UaWxlV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfaW5pdGlhbGl6ZXJzLCAxNikpOwogICAgZ2V0IGdhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2dhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZ2FwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZ3JpZEFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9ncmlkQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZ3JpZEFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdyaWRBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX2dyaWRBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjb250ZXh0TWVudVZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBjb250ZXh0TWVudVBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGV4dE1lbnVQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRleHRNZW51UG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBjb250ZXh0TWVudUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudUFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51QWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHNpemluZyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1ncmlkLWdhcDogMTJweDsKICAgICAgICAtLXRpbGUtcGFkZGluZzogMTZweDsKICAgICAgICAtLWhlYWRlci1zcGFjaW5nOiAxMnB4OwogICAgICAgIC0tY29udGVudC1taW4taGVpZ2h0OiA0MHB4OwogICAgICAgIC0tdmFsdWUtZm9udC1zaXplOiAyNnB4OwogICAgICAgIC0tdW5pdC1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1sYWJlbC1mb250LXNpemU6IDEycHg7CiAgICAgICAgLS10aXRsZS1mb250LXNpemU6IDEzcHg7CiAgICAgICAgLS1kZXNjcmlwdGlvbi1zcGFjaW5nOiA4cHg7CiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgLS10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgfQoKICAgICAgLyogR3JpZCBMYXlvdXQgKi8KICAgICAgLmdyaWQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IGNhbGModmFyKC0tZ3JpZC1nYXApICogMS41KTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JpZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgZGVlcy1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgke3IoMjUwKX1weCwgMWZyKSk7CiAgICAgICAgZ2FwOiAke3IoMTYpfXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBUaWxlIEJhc2UgU3R5bGVzICovCiAgICAgIC5zdGF0cy10aWxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICAgICAgcGFkZGluZzogdmFyKC0tdGlsZS1wYWRkaW5nKTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBkMGQwZCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDBkMGQwIiwgIiMyYTJhMmEiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZS5jbGlja2FibGU6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMykiLCAicmdiYSgwLDAsMCwwLjE1KSIpfTsKICAgICAgfQoKICAgICAgLyogVGlsZSBIZWFkZXIgKi8KICAgICAgLnRpbGUtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1oZWFkZXItc3BhY2luZyk7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgIH0KCiAgICAgIC50aWxlLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUaWxlIENvbnRlbnQgKi8KICAgICAgLnRpbGUtY29udGVudCB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tY29udGVudC1taW4taGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnRpbGUtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAudGlsZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnRpbGUtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tZGVzY3JpcHRpb24tc3BhY2luZyk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIEdhdWdlIFN0eWxlcyAqLwogICAgICAuZ2F1Z2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuZ2F1Z2UtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZ2F1Z2Utc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDY7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1maWxsIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgICAgICAgdHJhbnNpdGlvbjogc3Ryb2tlLWRhc2hvZmZzZXQgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ2F1Z2UtdGV4dCB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CiAgICAgIAogICAgICAuZ2F1Z2UtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAucGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAucGVyY2VudGFnZS1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2UwZTBlMCIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAvKiBNdWx0aSBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAubXVsdGktcGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIENQVSBDb3JlcyBTdHlsZXMgKi8KICAgICAgLmNwdS1jb3Jlcy13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDNweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtYmFycy5jZW50ZXJlZCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogNnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItd3JhcHBlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NjY2NiIsICIjODg4ODg4Iil9OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwOwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubG93IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubWVkaXVtIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1maWxsLmhpZ2ggewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBQYXJ0aXRpb24gU3R5bGVzICovCiAgICAgIC5wYXJ0aXRpb24td3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1wZXJjZW50YWdlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwuY3JpdGljYWwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1maWxlc3lzdGVtIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tb3VudHBvaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICB9CgogICAgICAvKiBEaXNrIFN0eWxlcyAqLwogICAgICAuZGlzay13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpc2stY2FwYWNpdHkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAuZGlzay1tb2RlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLXR5cGUtYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLW1ldHJpY3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAuZGlzay1pb3BzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwuZ29vZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLmNyaXRpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLyogVHJlbmQgU3R5bGVzICovCiAgICAgIC50cmVuZC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudHJlbmQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRyZW5kLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRyZW5kLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudHJlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLWdyYXBoIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC50cmVuZC1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRyZW5kLWxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OTk5OSIsICIjNjY2NjY2Iil9OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICB9CgogICAgICAudHJlbmQtYXJlYSB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUwLCAxNTAsIDE1MCwgMC4wOCkiLCAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAvKiBDb250ZXh0IE1lbnUgKi8KICAgICAgZGVlcy1jb250ZXh0bWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JpZEFjdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gCiAgICAgICAgICAgICAgICBAY2xpY2tlZD0keygpID0+IHRoaXMuaGFuZGxlR3JpZEFjdGlvbihhY3Rpb24pfQogICAgICAgICAgICAgICAgdHlwZT0ib3V0bGluZSIKICAgICAgICAgICAgICAgIHNpemU9InNtIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoKHRpbGUpID0+IHRoaXMucmVuZGVyVGlsZSh0aWxlKSl9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgICAgICAueD0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54fQogICAgICAgICAgLnk9JHt0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueX0KICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmNvbnRleHRNZW51QWN0aW9uc30KICAgICAgICAgIEBjbGlja2VkPSR7KCkgPT4gdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZX0KICAgICAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZSh0aWxlKSB7CiAgICAgIGNvbnN0IGhhc0FjdGlvbnMgPSB0aWxlLmFjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA+IDA7CiAgICAgIGNvbnN0IGNsaWNrYWJsZSA9IGhhc0FjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMTsKICAgICAgY29uc3QgY29sdW1uU3BhbiA9IHRpbGUuY29sdW1uU3BhbiAmJiB0aWxlLmNvbHVtblNwYW4gPiAxID8gdGlsZS5jb2x1bW5TcGFuIDogdm9pZCAwOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ic3RhdHMtdGlsZSAke2NsaWNrYWJsZSA/ICJjbGlja2FibGUiIDogIiJ9IgogICAgICAgIHN0eWxlPSIke2NvbHVtblNwYW4gPyBgZ3JpZC1jb2x1bW46IHNwYW4gJHtjb2x1bW5TcGFufWAgOiAiIn0iCiAgICAgICAgQGNsaWNrPSR7Y2xpY2thYmxlID8gKCkgPT4gdGhpcy5oYW5kbGVUaWxlQWN0aW9uKHRpbGUuYWN0aW9uc1swXSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7aGFzQWN0aW9ucyA/IChlMTEpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51KGUxMSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWhlYWRlciI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpbGUtdGl0bGUiPiR7dGlsZS50aXRsZX08L2gzPgogICAgICAgICAgJHt0aWxlLmljb24gPyBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0idGlsZS1pY29uIiAuaWNvbj0ke3RpbGUuaWNvbn0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQodGlsZSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHt0aWxlLmRlc2NyaXB0aW9uICYmIHRpbGUudHlwZSAhPT0gInRyZW5kIiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1kZXNjcmlwdGlvbiI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZUNvbnRlbnQodGlsZSkgewogICAgICBzd2l0Y2ggKHRpbGUudHlwZSkgewogICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgIDxzcGFuPiR7dGlsZS52YWx1ZX08L3NwYW4+CiAgICAgICAgICAgICR7dGlsZS51bml0ID8gYjJgPHNwYW4gY2xhc3M9InRpbGUtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgY2FzZSAiZ2F1Z2UiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyR2F1Z2UodGlsZSk7CiAgICAgICAgY2FzZSAicGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQZXJjZW50YWdlKHRpbGUpOwogICAgICAgIGNhc2UgInRyZW5kIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRyZW5kKHRpbGUpOwogICAgICAgIGNhc2UgIm11bHRpUGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSk7CiAgICAgICAgY2FzZSAiY3B1Q29yZXMiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3B1Q29yZXModGlsZSk7CiAgICAgICAgY2FzZSAicGFydGl0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhcnRpdGlvbih0aWxlKTsKICAgICAgICBjYXNlICJkaXNrIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpc2sodGlsZSk7CiAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgICR7dGlsZS52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgfQogICAgcmVuZGVyR2F1Z2UodGlsZSkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlIDogcGFyc2VGbG9hdCh0aWxlLnZhbHVlKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHRpbGUuZ2F1Z2VPcHRpb25zIHx8IHsgbWluOiAwLCBtYXg6IDEwMCB9OwogICAgICBjb25zdCBwZXJjZW50YWdlID0gKHZhbHVlMiAtIG9wdGlvbnMubWluKSAvIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluKSAqIDEwMDsKICAgICAgY29uc3Qgd2lkdGggPSAxMjA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDcwOwogICAgICBjb25zdCBzdHJva2VXaWR0aCA9IDY7CiAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHJva2VXaWR0aCAvIDIgKyAyOwogICAgICBjb25zdCByYWRpdXMgPSA0MDsKICAgICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjsKICAgICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAtIHBhZGRpbmc7CiAgICAgIGNvbnN0IHN0YXJ0WCA9IGNlbnRlclggLSByYWRpdXM7CiAgICAgIGNvbnN0IHN0YXJ0WSA9IGNlbnRlclk7CiAgICAgIGNvbnN0IGVuZFggPSBjZW50ZXJYICsgcmFkaXVzOwogICAgICBjb25zdCBlbmRZID0gY2VudGVyWTsKICAgICAgY29uc3QgYXJjUGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMCAxICR7ZW5kWH0gJHtlbmRZfWA7CiAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSBNYXRoLlBJICogcmFkaXVzOwogICAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIGNpcmN1bWZlcmVuY2UgKiBwZXJjZW50YWdlIC8gMTAwOwogICAgICBsZXQgc3Ryb2tlQ29sb3IgPSB0aWxlLmNvbG9yIHx8IGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyOC44JSkiLCAiaHNsKDIxMCA0MCUgNzglKSIpOwogICAgICBpZiAob3B0aW9ucy50aHJlc2hvbGRzKSB7CiAgICAgICAgY29uc3Qgc29ydGVkVGhyZXNob2xkcyA9IFsuLi5vcHRpb25zLnRocmVzaG9sZHNdLnNvcnQoKGE1LCBiNSkgPT4gYjUudmFsdWUgLSBhNS52YWx1ZSk7CiAgICAgICAgZm9yIChjb25zdCB0aHJlc2hvbGQgb2Ygc29ydGVkVGhyZXNob2xkcykgewogICAgICAgICAgaWYgKHZhbHVlMiA+PSB0aHJlc2hvbGQudmFsdWUpIHsKICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSB0aHJlc2hvbGQuY29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAke3dpZHRofSAke2hlaWdodH0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7YXJjUGF0aH0iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke2FyY1BhdGh9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtzdHJva2VDb2xvcn0iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtjaXJjdW1mZXJlbmNlfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtzdHJva2VEYXNob2Zmc2V0fSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtjZW50ZXJYfSIgeT0iJHtjZW50ZXJZIC0gOH0iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPgogICAgICAgICAgICAgIDx0c3Bhbj4ke3ZhbHVlMn08L3RzcGFuPiR7dGlsZS51bml0ID8gYjJgPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7dGlsZS51bml0fTwvdHNwYW4+YCA6ICIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyUGVyY2VudGFnZSh0aWxlKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB0aWxlLnZhbHVlID09PSAibnVtYmVyIiA/IHRpbGUudmFsdWUgOiBwYXJzZUZsb2F0KHRpbGUudmFsdWUpOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB2YWx1ZTIpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2UtdmFsdWUiPiR7cGVyY2VudGFnZX0lPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InBlcmNlbnRhZ2UtZmlsbCIgCiAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHtwZXJjZW50YWdlfSU7ICR7dGlsZS5jb2xvciA/IGBiYWNrZ3JvdW5kOiAke3RpbGUuY29sb3J9YCA6ICIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVHJlbmQodGlsZSkgewogICAgICBpZiAoIXRpbGUudHJlbmREYXRhIHx8IHRpbGUudHJlbmREYXRhLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IHRpbGUudHJlbmREYXRhOwogICAgICBjb25zdCBtYXgzID0gTWF0aC5tYXgoLi4uZGF0YSk7CiAgICAgIGNvbnN0IG1pbjMgPSBNYXRoLm1pbiguLi5kYXRhKTsKICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjMgfHwgMTsKICAgICAgY29uc3Qgd2lkdGggPSAzMDA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDMyOwogICAgICBjb25zdCBwYWRkaW5nID0gMjsKICAgICAgY29uc3QgcG9pbnRzID0gZGF0YS5tYXAoKHZhbHVlMiwgaW5kZXgyKSA9PiB7CiAgICAgICAgY29uc3QgeDMgPSBpbmRleDIgLyAoZGF0YS5sZW5ndGggLSAxKSAqIHdpZHRoOwogICAgICAgIGNvbnN0IHk1ID0gcGFkZGluZyArIChoZWlnaHQgLSAyICogcGFkZGluZykgLSAodmFsdWUyIC0gbWluMykgLyByYW5nZTIgKiAoaGVpZ2h0IC0gMiAqIHBhZGRpbmcpOwogICAgICAgIHJldHVybiBgJHt4M30sJHt5NX1gOwogICAgICB9KS5qb2luKCIgIik7CiAgICAgIGNvbnN0IGFyZWFQb2ludHMgPSBgMCwke2hlaWdodH0gJHtwb2ludHN9ICR7d2lkdGh9LCR7aGVpZ2h0fWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idHJlbmQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0cmVuZC1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRyZW5kLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9zcGFuPgogICAgICAgICAgJHt0aWxlLnVuaXQgPyBiMmA8c3BhbiBjbGFzcz0idHJlbmQtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICR7dGlsZS5kZXNjcmlwdGlvbiA/IGIyYDxzcGFuIGNsYXNzPSJ0cmVuZC1sYWJlbCI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtZ3JhcGgiPgogICAgICAgICAgPHN2ZyBjbGFzcz0idHJlbmQtc3ZnIiB2aWV3Qm94PSIwIDAgJHt3aWR0aH0gJHtoZWlnaHR9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9InRyZW5kLWFyZWEiIHBvaW50cz0iJHthcmVhUG9pbnRzfSIgLz4KICAgICAgICAgICAgPHBvbHlsaW5lIGNsYXNzPSJ0cmVuZC1saW5lIiBwb2ludHM9IiR7cG9pbnRzfSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSkgewogICAgICBpZiAoIXRpbGUucGVyY2VudGFnZXMgfHwgdGlsZS5wZXJjZW50YWdlcy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgaXRlbXMgPSB0aWxlLnBlcmNlbnRhZ2VzLnNsaWNlKDAsIDMpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtcyI+CiAgICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSkgPT4gewogICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGl0ZW0udmFsdWUpKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtbGFiZWwiPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLXZhbHVlIj4ke3BlcmNlbnRhZ2V9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtZmlsbCIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7cGVyY2VudGFnZX0lOyAke2l0ZW0uY29sb3IgPyBgYmFja2dyb3VuZDogJHtpdGVtLmNvbG9yfWAgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQ3B1Q29yZXModGlsZSkgewogICAgICBpZiAoIXRpbGUuY29yZXNEYXRhIHx8IHRpbGUuY29yZXNEYXRhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBjb3JlcyA9IHRpbGUuY29yZXNEYXRhOwogICAgICBjb25zdCBhdmdVc2FnZSA9IE1hdGgucm91bmQoY29yZXMucmVkdWNlKChzdW0sIGNvcmUyKSA9PiBzdW0gKyBjb3JlMi51c2FnZSwgMCkgLyBjb3Jlcy5sZW5ndGgpOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKHVzYWdlKSA9PiB7CiAgICAgICAgaWYgKHVzYWdlIDwgNTApCiAgICAgICAgICByZXR1cm4gImxvdyI7CiAgICAgICAgaWYgKHVzYWdlIDwgODApCiAgICAgICAgICByZXR1cm4gIm1lZGl1bSI7CiAgICAgICAgcmV0dXJuICJoaWdoIjsKICAgICAgfTsKICAgICAgY29uc3QgbWF4QmFyc1dpZHRoID0gY29yZXMubGVuZ3RoICogMjQgKyAoY29yZXMubGVuZ3RoIC0gMSkgKiAzOwogICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuIHx8IDE7CiAgICAgIGNvbnN0IGVzdGltYXRlZFRpbGVXaWR0aCA9IHRoaXMubWluVGlsZVdpZHRoICogY29sdW1uU3BhbiArIChjb2x1bW5TcGFuIC0gMSkgKiB0aGlzLmdhcCAtIDMyOwogICAgICBjb25zdCBzaG91bGRDZW50ZXIgPSBtYXhCYXJzV2lkdGggPCBlc3RpbWF0ZWRUaWxlV2lkdGggKiAwLjY2NjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmVzLXZhbHVlIj4ke2F2Z1VzYWdlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7Y29yZXMubGVuZ3RofSBjb3Jlczwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtYmFycyAke3Nob3VsZENlbnRlciA/ICJjZW50ZXJlZCIgOiAiIn0iPgogICAgICAgICAgJHtjb3Jlcy5tYXAoKGNvcmUyKSA9PiB7CiAgICAgICAgY29uc3QgdXNhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGNvcmUyLnVzYWdlKSk7CiAgICAgICAgY29uc3QgY29sb3JDbGFzcyA9IGdldENvbG9yQ2xhc3ModXNhZ2UpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZS1iYXItY29udGFpbmVyIiB0aXRsZT0iQ29yZSAke2NvcmUyLmxhYmVsIHx8IGNvcmUyLmlkfTogJHt1c2FnZX0lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjcHUtY29yZS1iYXItZmlsbCAke2NvbG9yQ2xhc3N9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dXNhZ2V9JSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAke2NvcmVzLmxlbmd0aCA8PSAxNiA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmUtbGFiZWwiPiR7Y29yZTIubGFiZWwgfHwgY29yZTIuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZm9ybWF0Qnl0ZXMoYnl0ZXMpIHsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCIjsKICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICBjb25zdCBzaXplcyA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiIsICJQQiJdOwogICAgICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGs0LCBpMTEpKS50b0ZpeGVkKDEpKSArICIgIiArIHNpemVzW2kxMV07CiAgICB9CiAgICByZW5kZXJQYXJ0aXRpb24odGlsZSkgewogICAgICBpZiAoIXRpbGUucGFydGl0aW9uRGF0YSkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCB7IHVzZWQsIHRvdGFsLCBmaWxlc3lzdGVtLCBtb3VudFBvaW50IH0gPSB0aWxlLnBhcnRpdGlvbkRhdGE7CiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHVzZWQgLyB0b3RhbCAqIDEwMCkpOwogICAgICBjb25zdCBmcmVlID0gdG90YWwgLSB1c2VkOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKCkgPT4gewogICAgICAgIGlmIChwZXJjZW50YWdlID49IDkwKQogICAgICAgICAgcmV0dXJuICJjcml0aWNhbCI7CiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPj0gNzUpCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiIjsKICAgICAgfTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24td3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXBlcmNlbnRhZ2UiPiR7TWF0aC5yb3VuZChwZXJjZW50YWdlKX0lPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1iYXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icGFydGl0aW9uLWJhci1maWxsICR7Z2V0Q29sb3JDbGFzcygpfSIKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPlVzZWQ8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKHVzZWQpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPkZyZWU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGZyZWUpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1tZXRhIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tZmlsZXN5c3RlbSI+JHtmaWxlc3lzdGVtfTwvc3Bhbj4KICAgICAgICAgICR7bW91bnRQb2ludCA/IGIyYDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tbW91bnRwb2ludCI+JHttb3VudFBvaW50fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpc2sodGlsZSkgewogICAgICBpZiAoIXRpbGUuZGlza0RhdGEpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgeyBjYXBhY2l0eSwgbW9kZWwsIHR5cGU6IHR5cGU1LCBpb3BzLCBoZWFsdGggfSA9IHRpbGUuZGlza0RhdGE7CiAgICAgIGNvbnN0IGdldEhlYWx0aENsYXNzID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICh2YWx1ZTIgPj0gNzApCiAgICAgICAgICByZXR1cm4gImdvb2QiOwogICAgICAgIGlmICh2YWx1ZTIgPj0gMzApCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiY3JpdGljYWwiOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImRpc2std3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1jYXBhY2l0eSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGNhcGFjaXR5KX08L2Rpdj4KICAgICAgICAke21vZGVsIHx8IHR5cGU1ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHttb2RlbCA/IGIyYDxzcGFuPiR7bW9kZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgJHt0eXBlNSA/IGIyYDxzcGFuIGNsYXNzPSJkaXNrLXR5cGUtYmFkZ2UiPiR7dHlwZTV9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1ldHJpY3MiPgogICAgICAgICAgJHtpb3BzID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+UmVhZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtdmFsdWUiPiR7aW9wcy5yZWFkLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcy1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtbGFiZWwiPldyaXRlPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHtpb3BzLndyaXRlLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICR7aGVhbHRoICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staGVhbHRoLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1oZWFsdGgtbGFiZWwiPkhlYWx0aDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC12YWx1ZSI+JHtoZWFsdGh9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke2dldEhlYWx0aENsYXNzKGhlYWx0aCl9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7aGVhbHRofSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBoYW5kbGVHcmlkQWN0aW9uKGFjdGlvbikgewogICAgICBpZiAoYWN0aW9uLmFjdGlvbikgewogICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24oKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaGFuZGxlVGlsZUFjdGlvbihhY3Rpb24sIF90aWxlKSB7CiAgICAgIGlmIChhY3Rpb24uYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpOwogICAgICB9CiAgICB9CiAgICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHRpbGUpIHsKICAgICAgaWYgKCF0aWxlLmFjdGlvbnMgfHwgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9OwogICAgICB0aGlzLmNvbnRleHRNZW51QWN0aW9ucyA9IHRpbGUuYWN0aW9uczsKICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSB0cnVlOwogICAgICBjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3NlSGFuZGxlcik7CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2VIYW5kbGVyKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNTdGF0c0dyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMzYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZW1vRGFzaGJvYXJkVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tZGFzaGJvYXJkLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hY3RpdmF0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2YXRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vRGFzaGJvYXJkVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9hY3RpdmF0ZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2FjdGl2YXRlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmF0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2YXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmF0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2YXRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmF0ZWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vRGFzaGJvYXJkVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBhY3RpdmF0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmF0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2YXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3R4ID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJPbmxpbmUgbm93IiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImFwaS1jYWxscyIsCiAgICAgICAgdGl0bGU6ICJBUEkgQ2FsbHMiLAogICAgICAgIHZhbHVlOiA0NTIwMCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzEyJSBmcm9tIGxhc3QgaG91ciIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFszMmUzLCAzNWUzLCAzOGUzLCA0MWUzLCAzOWUzLCA0MmUzLCA0NTIwMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAiaGVhbHRoIiwKICAgICAgICB0aXRsZTogIlN5c3RlbSBIZWFsdGgiLAogICAgICAgIHZhbHVlOiA5OS45LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJsdWNpZGU6aGVhcnQtcHVsc2UiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTUsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSIsCiAgICAgICAgdmFsdWU6IDEyNywKICAgICAgICB1bml0OiAibXMiLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJsdWNpZGU6dGltZXIiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiLTE1bXMgZnJvbSB5ZXN0ZXJkYXkiLAogICAgICAgIGNvbG9yOiAiIzhiNWNmNiIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicmVzb3VyY2VzIiwKICAgICAgICB0aXRsZTogIlJlc291cmNlIFVzYWdlIiwKICAgICAgICB2YWx1ZTogIiIsCiAgICAgICAgdHlwZTogIm11bHRpUGVyY2VudGFnZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgIHBlcmNlbnRhZ2VzOiBbCiAgICAgICAgICB7IGxhYmVsOiAiQ1BVIiwgdmFsdWU6IDY3LCBjb2xvcjogIiMzYjgyZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiTWVtb3J5IiwgdmFsdWU6IDg0LCBjb2xvcjogIiM4YjVjZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiRGlzayIsIHZhbHVlOiA0NSwgY29sb3I6ICIjMTBiOTgxIiB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXF1ZXN0cyIsCiAgICAgICAgdGl0bGU6ICJSZXF1ZXN0cy9zZWMiLAogICAgICAgIHZhbHVlOiAxODUwLAogICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQ3VycmVudCB0aHJvdWdocHV0IiwKICAgICAgICBjb2xvcjogIiMwNmI2ZDQiLAogICAgICAgIHRyZW5kRGF0YTogWzEyMDAsIDE0MDAsIDEzNTAsIDE2MDAsIDE3NTAsIDE2ODAsIDE4NTBdCiAgICAgIH0KICAgIF07CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIHRoaXMuY3R4ID0gY29udGV4dDI7CiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBhY3RpdmF0ZWQgd2l0aCBjb250ZXh0OiIsIGNvbnRleHQyKTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIkRhc2hib2FyZCIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJRdWljayBBY2Nlc3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk92ZXJ2aWV3IikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlY2VudCIsIGljb25OYW1lOiAiY2xvY2siLCBiYWRnZTogNSwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVjZW50IikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIlJlZnJlc2ggRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2hDdyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlRpbWUgUmFuZ2UiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiTGl2ZSBVcGRhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6cmFkaW8iLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiTGl2ZSB1cGRhdGVzOiIsIGFjdGl2ZSkgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJtdWx0aUZpbHRlciIsIGtleTogIkRhdGEgU291cmNlcyIsIGljb25OYW1lOiAibHVjaWRlOmRhdGFiYXNlIiwgb3B0aW9uczogWwogICAgICAgICAgICAgICAgeyBrZXk6ICJhcGkiLCBsYWJlbDogIkFQSSBTZXJ2ZXIiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICB7IGtleTogIndlYiIsIGxhYmVsOiAiV2ViIFRyYWZmaWMiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpnbG9iZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibW9iaWxlIiwgbGFiZWw6ICJNb2JpbGUgQXBwIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnNtYXJ0cGhvbmUiIH0KICAgICAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsIGtleXMyKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBbmFseXRpY3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDMiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiTWV0cmljcyIsIGljb25OYW1lOiAiYWN0aXZpdHkiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJNZXRyaWNzIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImZpbGVUZXh0IiwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiQW5hbHl0aWNzIERvY3MiLCBpY29uTmFtZTogImx1Y2lkZTpleHRlcm5hbExpbmsiLCBocmVmOiAiaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL2FuYWx5dGljcyIgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJPdmVydmlldyB0YWIiKSB9LAogICAgICAgIHsga2V5OiAiQW5hbHl0aWNzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbmFseXRpY3MgdGFiIikgfSwKICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgdGFiIikgfQogICAgICBdKTsKICAgIH0KICAgIG9uRGVhY3RpdmF0ZSgpIHsKICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBkZWFjdGl2YXRlZCIpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9CiAgICAgICAgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW4tYm90dG9tOiAzMnB4OyB9CiAgICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCl9CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgPGRpdiBjbGFzcz0iY3R4LWFjdGlvbnMiPgogICAgICAgIDxoMj5Db250ZXh0IEFjdGlvbnMgKGN0eC5hcHB1aSk8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoZmFsc2UpfT5IaWRlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVWaXNpYmxlKHRydWUpfT5TaG93IE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKGZhbHNlKX0+SGlkZSBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodHJ1ZSl9PlNob3cgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoZmFsc2UpfT5IaWRlIENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNWaXNpYmxlKHRydWUpfT5TaG93IENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKHRydWUpfT5Db2xsYXBzZSBNYWluIE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKGZhbHNlKX0+RXhwYW5kIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldEJyZWFkY3J1bWJzKFsiRGFzaGJvYXJkIiwgIk92ZXJ2aWV3IiwgIlN0YXRzIl0pfT5TZXQgQnJlYWRjcnVtYnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygicHJvamVjdHMiKX0+R28gdG8gUHJvamVjdHM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygic2V0dGluZ3MiLCB7IHNlY3Rpb246ICJzZWN1cml0eSIgfSl9PkdvIHRvIFNldHRpbmdzL1NlY3VyaXR5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuYWN0aXZpdHlMb2cuYWRkKHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJEZW1vIFVzZXIiLCBtZXNzYWdlOiAiQnV0dG9uIGNsaWNrZWQgZnJvbSBjdHghIiwgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlci1jbGljayIgfSl9PkFkZCBBY3Rpdml0eSBFbnRyeTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51QmFkZ2UoInRhc2tzIiwgOTkpfT5TZXQgVGFza3MgQmFkZ2UgdG8gOTk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuY2xlYXJNYWluTWVudUJhZGdlKCJ0YXNrcyIpfT5DbGVhciBUYXNrcyBCYWRnZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUodHJ1ZSwgMSl9PkF1dG8taGlkZSBUYWJzICjiiaQxKTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic0F1dG9IaWRlKGZhbHNlKX0+RGlzYWJsZSBBdXRvLWhpZGU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRDbG9zZWFibGVUYWIoKX0+QWRkIENsb3NlYWJsZSBUYWI8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgdGFiQ291bnRlciA9IDA7CiAgICBhZGRDbG9zZWFibGVUYWIoKSB7CiAgICAgIGlmICghdGhpcy5jdHgpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgY29uc3QgdGFiS2V5ID0gYFRhYiAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLmN0eC5hcHB1aS5hZGRDb250ZW50VGFiKHsKICAgICAgICBrZXk6IHRhYktleSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke3RhYktleX1gKSwKICAgICAgICBjbG9zZWFibGU6IHRydWUsCiAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgdGhpcy5jdHg/LmFwcHVpLnJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9EYXNoYm9hcmRWaWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vU2V0dGluZ3NWaWV3ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1zZXR0aW5ncy12aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2VjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hhc0NoYW5nZXNfZGVjb3JhdG9yczsKICBsZXQgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9TZXR0aW5nc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2VjdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaGFzQ2hhbmdlc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzNih0aGlzLCBudWxsLCBfc2VjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VjdGlvbl9pbml0aWFsaXplcnMsIF9zZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2hhc0NoYW5nZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFzQ2hhbmdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGFzQ2hhbmdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oYXNDaGFuZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYXNDaGFuZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBfaGFzQ2hhbmdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNzZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9zZWN0aW9uX2luaXRpYWxpemVycywgImdlbmVyYWwiKTsKICAgIGdldCBzZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfc2VjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGhhc0NoYW5nZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFzQ2hhbmdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGFzQ2hhbmdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgYXBwdWkgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgdGhpcy5hcHB1aSA9IGNvbnRleHQyLmFwcHVpOwogICAgICBjb25zb2xlLmxvZygiU2V0dGluZ3MgYWN0aXZhdGVkIHdpdGggcGFyYW1zOiIsIGNvbnRleHQyLnBhcmFtcyk7CiAgICAgIGlmIChjb250ZXh0Mi5wYXJhbXM/LnNlY3Rpb24pIHsKICAgICAgICB0aGlzLnNlY3Rpb24gPSBjb250ZXh0Mi5wYXJhbXMuc2VjdGlvbjsKICAgICAgfQogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHsKICAgICAgICBoZWFkaW5nOiAiU2V0dGluZ3MiLAogICAgICAgIGdyb3VwczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQWNjb3VudCIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnVzZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiZ2VuZXJhbCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAicHJvZmlsZSIsIGljb25OYW1lOiAidXNlciIsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigicHJvZmlsZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJzZWN1cml0eSIsIGljb25OYW1lOiAic2hpZWxkIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJzZWN1cml0eSIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2xpZGVycyIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJub3RpZmljYXRpb25zIiwgaWNvbk5hbWU6ICJiZWxsIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigibm90aWZpY2F0aW9ucyIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJhcHBlYXJhbmNlIiwgaWNvbk5hbWU6ICJwYWxldHRlIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJhcHBlYXJhbmNlIikgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pOwogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRDb250ZW50VGFicyhbXSk7CiAgICB9CiAgICBvbkRlYWN0aXZhdGUoKSB7CiAgICAgIGNvbnNvbGUubG9nKCJTZXR0aW5ncyBkZWFjdGl2YXRlZCIpOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIH0KICAgIGNhbkRlYWN0aXZhdGUoKSB7CiAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMpIHsKICAgICAgICByZXR1cm4gIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzaG93U2VjdGlvbihzZWN0aW9uKSB7CiAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247CiAgICAgIHRoaXMuYXBwdWk/LnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oc2VjdGlvbik7CiAgICB9CiAgICBzaW11bGF0ZUNoYW5nZSgpIHsKICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNpbXVsYXRlQ2hhbmdlKCl9Pk1ha2UgQ2hhbmdlczwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmhhc0NoYW5nZXMgPyBiMmA8cCBjbGFzcz0id2FybmluZyI+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBOYXZpZ2F0aW9uIHdpbGwgcHJvbXB0IGZvciBjb25maXJtYXRpb24uPC9wPmAgOiAiIn0KICAgIGA7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgRGVtb1Byb2plY3RzVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tcHJvamVjdHMtdmlldyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICB2YXIgRGVtb1Byb2plY3RzVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1Byb2plY3RzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIlByb2plY3RzIiwKICAgICAgICBncm91cHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk15IFByb2plY3RzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IGtleTogIkFjdGl2ZSIsIGljb25OYW1lOiAiZm9sZGVyIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJBcmNoaXZlZCIsIGljb25OYW1lOiAiYXJjaGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlNoYXJlZCIsIGljb25OYW1lOiAidXNlcnMiLCBiYWRnZTogMiwgYmFkZ2VWYXJpYW50OiAid2FybmluZyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNoYXJlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlF1aWNrIEFjdGlvbnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBuZXcgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiVGVtcGxhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0VGVtcGxhdGUiLCBocmVmOiAiaHR0cHM6Ly90ZW1wbGF0ZXMuZXhhbXBsZS5jb20iIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkdyaWQiLCBpY29uTmFtZTogImx1Y2lkZTpncmlkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiR3JpZCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6a2FuYmFuIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQm9hcmQgdmlldyIpIH0KICAgICAgXSk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnByb2plY3RzIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAucHJvamVjdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsKICAgICAgICB9CiAgICAgICAgLnByb2plY3Q6aG92ZXIgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IGgzIHsgY29sb3I6ICNmYWZhZmE7IG1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAucHJvamVjdCBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgICAgLmJhZGdlIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxNDUzMmQ7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlByb2plY3RzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0icHJvamVjdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkZyb250ZW5kIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QtYmFzZWQgZGFzaGJvYXJkIGFwcGxpY2F0aW9uPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkFQSSBTZXJ2ZXIgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPk5vZGUuanMgUkVTVCBBUEkgYmFja2VuZDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Nb2JpbGUgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdCBOYXRpdmUgaU9TL0FuZHJvaWQgYXBwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkRvY3VtZW50YXRpb248L2gzPgogICAgICAgICAgPHA+VGVjaG5pY2FsIGRvY3VtZW50YXRpb24gc2l0ZTwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9Qcm9qZWN0c1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIERlbW9UYXNrc1ZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXRhc2tzLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9UYXNrc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgIGhlYWRpbmc6ICJUYXNrcyIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJWaWV3cyIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJBbGwgVGFza3MiLCBpY29uTmFtZTogImxpc3QiLCBiYWRnZTogMTIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFsbCIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJUb2RheSIsIGljb25OYW1lOiAiY2FsZW5kYXIiLCBiYWRnZTogMywgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVG9kYXkiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiVXBjb21pbmciLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVXBjb21pbmciKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiQ29tcGxldGVkIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNvbXBsZXRlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkZpbHRlcnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiUHJpb3JpdHkiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJQcmlvcml0eSIsIGljb25OYW1lOiAibHVjaWRlOmZsYWciLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICB7IGtleTogImhpZ2giLCBsYWJlbDogIkhpZ2giLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTphbGVydENpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibWVkaXVtIiwgbGFiZWw6ICJNZWRpdW0iLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTptaW51c0NpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibG93IiwgbGFiZWw6ICJMb3ciLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6Y2lyY2xlIiB9CiAgICAgICAgICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlByaW9yaXR5IGZpbHRlcjoiLCBrZXlzMikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiT3B0aW9ucyIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IFN1YnRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdFRyZWUiLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBzdWJ0YXNrczoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBjb21wbGV0ZWQ6IiwgYWN0aXZlKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJBZGQgVGFzayIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJBZGQgbmV3IHRhc2siKSB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIkltcG9ydCBUYXNrcyIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCB0YXNrcyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDbGVhciBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLCB2YXJpYW50OiAiZGFuZ2VyIiwgY29uZmlybU1lc3NhZ2U6ICJEZWxldGUgYWxsIGNvbXBsZXRlZCB0YXNrcz8iLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCIpIH0sCiAgICAgICAgeyBrZXk6ICJDYWxlbmRhciIsIGljb25OYW1lOiAibHVjaWRlOmNhbGVuZGFyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ2FsZW5kYXIiKSB9CiAgICAgIF0pOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC50YXNrLWxpc3QgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLnRhc2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICB9CiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzUyNTI1MjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CiAgICAgICAgLnRhc2stdGV4dCB7IGNvbG9yOiAjZmFmYWZhOyBmbGV4OiAxOyB9CiAgICAgICAgLmR1ZS1kYXRlIHsgY29sb3I6ICM3MzczNzM7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIC5wcmlvcml0eSB7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIH0KICAgICAgICAucHJpb3JpdHkuaGlnaCB7IGJhY2tncm91bmQ6ICM0NTBhMGE7IGNvbG9yOiAjZjg3MTcxOyB9CiAgICAgICAgLnByaW9yaXR5Lm1lZGl1bSB7IGJhY2tncm91bmQ6ICM0NTFhMDM7IGNvbG9yOiAjZmJiZjI0OyB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5UYXNrczwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InRhc2stbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFzayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay10ZXh0Ij5SZXZpZXcgcHVsbCByZXF1ZXN0ICM0Mjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+VG9kYXk8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpb3JpdHkgaGlnaCI+SGlnaDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlVwZGF0ZSBkb2N1bWVudGF0aW9uPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub21vcnJvdzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBtZWRpdW0iPk1lZGl1bTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPldyaXRlIHVuaXQgdGVzdHM8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPkRlYyAyMDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIGRlbW9GdW5jMjcgPSAoKSA9PiB7CiAgY29uc3QgYXBwQ29uZmlnID0gewogICAgYnJhbmRpbmc6IHsKICAgICAgbG9nb0ljb246ICJsdWNpZGU6Ym94IiwKICAgICAgbG9nb1RleHQ6ICJBY21lIEFwcCIKICAgIH0sCiAgICBhcHBCYXI6IHsKICAgICAgbWVudUl0ZW1zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJOZXcgUHJvamVjdCIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGVQbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiT3Blbi4uLiIsIHNob3J0Y3V0OiAiQ21kK08iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgICAgICB7IG5hbWU6ICJteS1hcHAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIG15LWFwcCIpIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiY29tcG9uZW50LWxpYiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpIH0KICAgICAgICAgICAgXSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBbGwiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVkbyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1oiLCBpY29uTmFtZTogInJlZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWRvIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQ29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBpY29uTmFtZTogImNvcHkiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJUb2dnbGUgQWN0aXZpdHkgTG9nIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrQSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBhY3Rpdml0eSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3MiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrLyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXSwKICAgICAgYnJlYWRjcnVtYnM6ICJEYXNoYm9hcmQiLAogICAgICBzaG93V2luZG93Q29udHJvbHM6IHRydWUsCiAgICAgIHNob3dTZWFyY2g6IHRydWUsCiAgICAgIHVzZXI6IHsKICAgICAgICBuYW1lOiAiSmFuZSBTbWl0aCIsCiAgICAgICAgZW1haWw6ICJqYW5lLnNtaXRoQGV4YW1wbGUuY29tIiwKICAgICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICAgIH0sCiAgICAgIHByb2ZpbGVNZW51SXRlbXM6IFsKICAgICAgICB7IG5hbWU6ICJQcm9maWxlIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQWNjb3VudCBTZXR0aW5ncyIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiSGVscCAmIFN1cHBvcnQiLCBpY29uTmFtZTogImhlbHBDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgIF0KICAgIH0sCiAgICB2aWV3czogWwogICAgICB7CiAgICAgICAgaWQ6ICJkYXNoYm9hcmQiLAogICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLAogICAgICAgIGNvbnRlbnQ6ICJkZW1vLWRhc2hib2FyZC12aWV3IiwKICAgICAgICByb3V0ZTogImRhc2hib2FyZCIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicHJvamVjdHMiLAogICAgICAgIG5hbWU6ICJQcm9qZWN0cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICBjb250ZW50OiAiZGVtby1wcm9qZWN0cy12aWV3IiwKICAgICAgICByb3V0ZTogInByb2plY3RzIiwKICAgICAgICBiYWRnZTogMwogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ0YXNrcyIsCiAgICAgICAgbmFtZTogIlRhc2tzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsCiAgICAgICAgY29udGVudDogImRlbW8tdGFza3MtdmlldyIsCiAgICAgICAgcm91dGU6ICJ0YXNrcyIsCiAgICAgICAgYmFkZ2U6IDEyCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInNldHRpbmdzIiwKICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICBjb250ZW50OiAiZGVtby1zZXR0aW5ncy12aWV3IiwKICAgICAgICByb3V0ZTogInNldHRpbmdzLzpzZWN0aW9uPyIKICAgICAgfQogICAgXSwKICAgIG1haW5NZW51OiB7CiAgICAgIHNlY3Rpb25zOiBbCiAgICAgICAgeyBuYW1lOiAiTWFpbiIsIHZpZXdzOiBbImRhc2hib2FyZCJdIH0sCiAgICAgICAgeyBuYW1lOiAiV29ya3NwYWNlIiwgdmlld3M6IFsicHJvamVjdHMiLCAidGFza3MiXSB9CiAgICAgIF0sCiAgICAgIGJvdHRvbUl0ZW1zOiBbInNldHRpbmdzIl0KICAgIH0sCiAgICBkZWZhdWx0VmlldzogImRhc2hib2FyZCIsCiAgICBib3R0b21CYXI6IHsKICAgICAgdmlzaWJsZTogdHJ1ZSwKICAgICAgd2lkZ2V0czogWwogICAgICAgIHsKICAgICAgICAgIGlkOiAic3RhdHVzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgIGxhYmVsOiAiU3lzdGVtIE9ubGluZSIsCiAgICAgICAgICBzdGF0dXM6ICJzdWNjZXNzIiwKICAgICAgICAgIHRvb2x0aXA6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygiU3RhdHVzIGNsaWNrZWQiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJub3RpZmljYXRpb25zIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLAogICAgICAgICAgbGFiZWw6ICIzIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgc3RhdHVzOiAid2FybmluZyIsCiAgICAgICAgICB0b29sdGlwOiAiWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInZlcnNpb24iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0QnJhbmNoIiwKICAgICAgICAgIGxhYmVsOiAidjEuMi4zIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgdG9vbHRpcDogIkN1cnJlbnQgdmVyc2lvbiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBpZDogInRlcm1pbmFsIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgICAgICAgIHRvb2x0aXA6ICJPcGVuIFRlcm1pbmFsIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIGNsaWNrZWQiKQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIG9uVmlld0NoYW5nZTogKHZpZXdJZCwgdmlldykgPT4gewogICAgICBjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3ZpZXdJZH0gKCR7dmlldy5uYW1lfSlgKTsKICAgIH0sCiAgICBvblNlYXJjaDogKHF1ZXJ5KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IiwgcXVlcnkpOwogICAgfQogIH07CiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGNvbnRhaW5lckVsZW1lbnQuY2xhc3NOYW1lID0gImRlbW8tY29udGFpbmVyIjsKICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICBjb25zdCBhcHB1aUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpIik7CiAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChhcHB1aUVsZW1lbnQpOwogIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgYXdhaXQgYXBwdWlFbGVtZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgYXBwdWlFbGVtZW50LmNvbmZpZ3VyZShhcHBDb25maWcpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAibG9naW4iLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogImxvZ2dlZCBpbiBmcm9tIENocm9tZSBvbiBtYWNPUyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjcmVhdGUiLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogJ2NyZWF0ZWQgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgICAgdXNlcjogIkpvaG4gRG9lIiwKICAgICAgICAgIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogInZpZXciLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImRlbGV0ZSIsCiAgICAgICAgICB1c2VyOiAiQWRtaW4iLAogICAgICAgICAgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjdXN0b20iLAogICAgICAgICAgdXNlcjogIlN5c3RlbSIsCiAgICAgICAgICBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgfQogICAgICBdKTsKICAgIH0sIDUwMCk7CiAgICBhcHB1aUVsZW1lbnQudmlld0NoYW5nZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXcgY2hhbmdlZCBldmVudDoiLCBldmVudCk7CiAgICAgIGFwcHVpRWxlbWVudC5zZXRCcmVhZGNydW1icyhldmVudC52aWV3Lm5hbWUpOwogICAgfSk7CiAgICBhcHB1aUVsZW1lbnQudmlld0xpZmVjeWNsZSQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsIGV2ZW50LnR5cGUsIGV2ZW50LnZpZXdJZCk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBhcHB1aUVsZW1lbnQuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCAxNSk7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGQoewogICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgIG1lc3NhZ2U6ICJuZXcgdGFza3MgYWRkZWQiCiAgICAgIH0pOwogICAgfSwgNWUzKTsKICB9LCAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgJHtjb250YWluZXJFbGVtZW50fQogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS92aWV3LnJlZ2lzdHJ5LmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBWaWV3UmVnaXN0cnkgPSBjbGFzcyB7CiAgdmlld3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY3VycmVudFZpZXdJZCA9IG51bGw7CiAgYXBwdWkgPSBudWxsOwogIC8qKgogICAqIFNldCB0aGUgYXBwdWkgcmVmZXJlbmNlIGZvciB2aWV3IGFjdGl2YXRpb24gY29udGV4dAogICAqLwogIHNldEFwcHVpUmVmKGFwcHVpKSB7CiAgICB0aGlzLmFwcHVpID0gYXBwdWk7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGEgc2luZ2xlIHZpZXcKICAgKi8KICByZWdpc3Rlcih2aWV3KSB7CiAgICBpZiAodGhpcy52aWV3cy5oYXModmlldy5pZCkpIHsKICAgICAgY29uc29sZS53YXJuKGBWaWV3IHdpdGggaWQgIiR7dmlldy5pZH0iIGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCk7CiAgICB9CiAgICB0aGlzLnZpZXdzLnNldCh2aWV3LmlkLCB2aWV3KTsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgbXVsdGlwbGUgdmlld3MKICAgKi8KICByZWdpc3RlckFsbCh2aWV3cykgewogICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4gdGhpcy5yZWdpc3Rlcih2aWV3KSk7CiAgfQogIC8qKgogICAqIEdldCBhIHZpZXcgZGVmaW5pdGlvbiBieSBJRAogICAqLwogIGdldCh2aWV3SWQpIHsKICAgIHJldHVybiB0aGlzLnZpZXdzLmdldCh2aWV3SWQpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgdmlldyBJRHMKICAgKi8KICBnZXRWaWV3SWRzKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy5rZXlzKCkpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHZpZXdzCiAgICovCiAgZ2V0QWxsKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy52YWx1ZXMoKSk7CiAgfQogIC8qKgogICAqIEdldCByb3V0ZSBmb3IgYSB2aWV3CiAgICovCiAgZ2V0Um91dGUodmlld0lkKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIHJldHVybiB2aWV3Py5yb3V0ZSB8fCB2aWV3Py5pZCB8fCAiIjsKICB9CiAgLyoqCiAgICogRmluZCB2aWV3IGJ5IHJvdXRlIChzdXBwb3J0cyBwYXJhbWV0ZXJpemVkIHJvdXRlcyBsaWtlICdzZXR0aW5ncy86c2VjdGlvbicpCiAgICovCiAgZmluZEJ5Um91dGUocm91dGUpIHsKICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnZpZXdzLnZhbHVlcygpKSB7CiAgICAgIGNvbnN0IHZpZXdSb3V0ZSA9IHZpZXcucm91dGUgfHwgdmlldy5pZDsKICAgICAgY29uc3QgcGFyYW1zMiA9IHRoaXMubWF0Y2hSb3V0ZSh2aWV3Um91dGUsIHJvdXRlKTsKICAgICAgaWYgKHBhcmFtczIgIT09IG51bGwpIHsKICAgICAgICByZXR1cm4geyB2aWV3LCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgLyoqCiAgICogTWF0Y2ggYSByb3V0ZSBwYXR0ZXJuIGFnYWluc3QgYW4gYWN0dWFsIHJvdXRlCiAgICogUmV0dXJucyBwYXJhbXMgaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UKICAgKi8KICBtYXRjaFJvdXRlKHBhdHRlcm4sIHJvdXRlKSB7CiAgICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KCIvIik7CiAgICBjb25zdCByb3V0ZVBhcnRzID0gcm91dGUuc3BsaXQoIi8iKTsKICAgIGNvbnN0IGhhc09wdGlvbmFsUGFyYW0gPSBwYXR0ZXJuUGFydHMubGVuZ3RoID4gMCAmJiBwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKCI/Iik7CiAgICBpZiAoaGFzT3B0aW9uYWxQYXJhbSkgewogICAgICBpZiAocm91dGVQYXJ0cy5sZW5ndGggPCBwYXR0ZXJuUGFydHMubGVuZ3RoIC0gMSB8fCByb3V0ZVBhcnRzLmxlbmd0aCA+IHBhdHRlcm5QYXJ0cy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSByb3V0ZVBhcnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHBhcmFtczIgPSB7fTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHBhdHRlcm5QYXJ0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGxldCBwYXJ0ID0gcGF0dGVyblBhcnRzW2kxMV07CiAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwYXJ0LmVuZHNXaXRoKCI/Iik7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgcGFydCA9IHBhcnQuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoIjoiKSkgewogICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcnQuc2xpY2UoMSk7CiAgICAgICAgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBwYXJhbXMyW3BhcmFtTmFtZV0gPSByb3V0ZVBhcnRzW2kxMV07CiAgICAgICAgfSBlbHNlIGlmICghaXNPcHRpb25hbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gcGFydCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyYW1zMjsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgbmF2aWdhdGlvbiBhd2F5IGZyb20gY3VycmVudCB2aWV3IGlzIGFsbG93ZWQKICAgKi8KICBhc3luYyBjYW5MZWF2ZUN1cnJlbnRWaWV3KCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRWaWV3SWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIGlmICghaW5zdGFuY2UpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgbGlmZWN5Y2xlID0gaW5zdGFuY2U7CiAgICBpZiAodHlwZW9mIGxpZmVjeWNsZS5jYW5EZWFjdGl2YXRlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBhd2FpdCBsaWZlY3ljbGUuY2FuRGVhY3RpdmF0ZSgpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIC8qKgogICAqIEFjdGl2YXRlIGEgdmlldyAtIGhhbmRsZXMgY2FjaGluZywgbGlmZWN5Y2xlLCBhbmQgcmVuZGVyaW5nCiAgICovCiAgYXN5bmMgYWN0aXZhdGVWaWV3KHZpZXdJZCwgY29udGFpbmVyLCBwYXJhbXMyKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIGlmICghdmlldykgewogICAgICBjb25zb2xlLmVycm9yKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHNob3VsZENhY2hlID0gdmlldy5jYWNoZSAhPT0gZmFsc2U7CiAgICBpZiAodGhpcy5jdXJyZW50Vmlld0lkICYmIHRoaXMuY3VycmVudFZpZXdJZCAhPT0gdmlld0lkKSB7CiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIH0KICAgIGxldCBlbGVtZW50NCA9IHNob3VsZENhY2hlID8gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCkgOiB2b2lkIDA7CiAgICBpZiAoZWxlbWVudDQpIHsKICAgICAgZWxlbWVudDQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudDQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KHZpZXcpOwogICAgICBpZiAoIWVsZW1lbnQ0KSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IGZvciB2aWV3ICIke3ZpZXdJZH0iYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgaWYgKHNob3VsZENhY2hlKSB7CiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSB2aWV3SWQ7CiAgICBhd2FpdCB0aGlzLmNhbGxPbkFjdGl2YXRlKGVsZW1lbnQ0LCB2aWV3SWQsIHBhcmFtczIpOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBEZWFjdGl2YXRlIGEgdmlldyAoaGlkZSBhbmQgY2FsbCBsaWZlY3ljbGUgaG9vaykKICAgKi8KICBhc3luYyBkZWFjdGl2YXRlVmlldyh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIWluc3RhbmNlKQogICAgICByZXR1cm47CiAgICBjb25zdCBsaWZlY3ljbGUgPSBpbnN0YW5jZTsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uRGVhY3RpdmF0ZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBhd2FpdCBsaWZlY3ljbGUub25EZWFjdGl2YXRlKCk7CiAgICB9CiAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIH0KICAvKioKICAgKiBDcmVhdGUgYSB2aWV3IGVsZW1lbnQgZnJvbSBpdHMgZGVmaW5pdGlvbiAoc3VwcG9ydHMgYXN5bmMgY29udGVudCkKICAgKi8KICBhc3luYyBjcmVhdGVWaWV3RWxlbWVudCh2aWV3KSB7CiAgICBsZXQgY29udGVudDMgPSB2aWV3LmNvbnRlbnQ7CiAgICBpZiAodHlwZW9mIGNvbnRlbnQzID09PSAiZnVuY3Rpb24iICYmICEoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNvbnRlbnQzLmNvbnN0cnVjdG9yLm5hbWUgPT09ICJBc3luY0Z1bmN0aW9uIikgewogICAgICB0cnkgewogICAgICAgIGNvbnRlbnQzID0gYXdhaXQgY29udGVudDMoKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3luYyBjb250ZW50IGZvciB2aWV3ICIke3ZpZXcuaWR9IjpgLCBlcnJvcik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGxldCBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlldy5pZH0iYCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZWxlbWVudDQuZGF0YXNldC52aWV3SWQgPSB2aWV3LmlkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBDYWxsIG9uQWN0aXZhdGUgbGlmZWN5Y2xlIGhvb2sgb24gYSB2aWV3IGVsZW1lbnQKICAgKi8KICBhc3luYyBjYWxsT25BY3RpdmF0ZShlbGVtZW50NCwgdmlld0lkLCBwYXJhbXMyKSB7CiAgICBjb25zdCBsaWZlY3ljbGUgPSBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uQWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgY29uc3QgY29udGV4dDIgPSB7CiAgICAgICAgYXBwdWk6IHRoaXMuYXBwdWksCiAgICAgICAgdmlld0lkLAogICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICB9OwogICAgICBhd2FpdCBsaWZlY3ljbGUub25BY3RpdmF0ZShjb250ZXh0Mik7CiAgICB9CiAgfQogIC8qKgogICAqIExlZ2FjeSBtZXRob2QgLSByZW5kZXJzIHZpZXcgd2l0aG91dCBjYWNoaW5nCiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGl2YXRlVmlldyBpbnN0ZWFkCiAgICovCiAgcmVuZGVyVmlldyh2aWV3SWQsIGNvbnRhaW5lcikgewogICAgY29uc3QgdmlldyA9IHRoaXMudmlld3MuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIXZpZXcpIHsKICAgICAgY29uc29sZS5lcnJvcihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICBsZXQgZWxlbWVudDQ7CiAgICBjb25zdCBjb250ZW50MyA9IHZpZXcuY29udGVudDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgdGhpcy5jdXJyZW50Vmlld0lkID0gdmlld0lkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB2aWV3IElECiAgICovCiAgZ2V0Q3VycmVudFZpZXdJZCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ7CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgaW5zdGFuY2Ugb2YgYSB2aWV3CiAgICovCiAgZ2V0SW5zdGFuY2Uodmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgfQogIC8qKgogICAqIENsZWFyIGEgc3BlY2lmaWMgY2FjaGVkIGluc3RhbmNlCiAgICovCiAgY2xlYXJJbnN0YW5jZSh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UucGFyZW50Tm9kZSkgewogICAgICBpbnN0YW5jZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlKTsKICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZSh2aWV3SWQpOwogICAgaWYgKHRoaXMuY3VycmVudFZpZXdJZCA9PT0gdmlld0lkKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXdJZCA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCBpbnN0YW5jZXMKICAgKi8KICBjbGVhckluc3RhbmNlcygpIHsKICAgIGZvciAoY29uc3QgW3ZpZXdJZCwgaW5zdGFuY2VdIG9mIHRoaXMuaW5zdGFuY2VzKSB7CiAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnROb2RlKSB7CiAgICAgICAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmNsZWFyKCk7CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSBudWxsOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGEgdmlldwogICAqLwogIHVucmVnaXN0ZXIodmlld0lkKSB7CiAgICB0aGlzLmNsZWFySW5zdGFuY2Uodmlld0lkKTsKICAgIHJldHVybiB0aGlzLnZpZXdzLmRlbGV0ZSh2aWV3SWQpOwogIH0KICAvKioKICAgKiBDbGVhciB0aGUgcmVnaXN0cnkKICAgKi8KICBjbGVhcigpIHsKICAgIHRoaXMudmlld3MuY2xlYXIoKTsKICAgIHRoaXMuY2xlYXJJbnN0YW5jZXMoKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgYSB2aWV3IGlzIHJlZ2lzdGVyZWQKICAgKi8KICBoYXModmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy52aWV3cy5oYXModmlld0lkKTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB2aWV3cwogICAqLwogIGdldCBzaXplKCkgewogICAgcmV0dXJuIHRoaXMudmlld3Muc2l6ZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWlubWVudS9kZWVzLWFwcHVpLW1haW5tZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjggPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1tYWlubWVudS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tbWFpbm1lbnUtY29udGFpbmVyIj4KICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgIC5sb2dvSWNvbj0keyJsdWNpZGU6Ym94In0KICAgICAgLmxvZ29UZXh0PSR7IkFjbWUgQXBwIn0KICAgICAgLm1lbnVHcm91cHM9JHtbCiAgewogICAgdGFiczogWwogICAgICB7IGtleTogIkRhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQiKSB9LAogICAgICB7IGtleTogIkluYm94IiwgaWNvbk5hbWU6ICJsdWNpZGU6aW5ib3giLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbmJveCIpIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJXb3Jrc3BhY2UiLAogICAgdGFiczogWwogICAgICB7IGtleTogIlByb2plY3RzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvamVjdHMiKSB9LAogICAgICB7IGtleTogIlRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Y2hlY2tTcXVhcmUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYXNrcyIpIH0sCiAgICAgIHsga2V5OiAiRG9jdW1lbnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEb2N1bWVudHMiKSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgIHRhYnM6IFsKICAgICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgIHsga2V5OiAiSW5zaWdodHMiLCBpY29uTmFtZTogImx1Y2lkZTpsaWdodGJ1bGIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbnNpZ2h0cyIpIH0KICAgIF0KICB9Cl19CiAgICAgIC5ib3R0b21UYWJzPSR7WwogIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfSwKICB7IGtleTogIkhlbHAiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0KXX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5tZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWlubWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xvZ29JY29uX2RlY29yYXRvcnM7CiAgbGV0IF9sb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9kZWNvcmF0b3JzOwogIGxldCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbVRhYnNfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZF9kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aU1haW5tZW51MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xvZ29JY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbG9nb1RleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9ib3R0b21UYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2xvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvZ29JY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2dvSWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubG9nb0ljb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nb0ljb25faW5pdGlhbGl6ZXJzLCBfbG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfbG9nb1RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nb1RleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvZ29UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sb2dvVGV4dF9pbml0aWFsaXplcnMsIF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVHcm91cHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVHcm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51R3JvdXBzX2luaXRpYWxpemVycywgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfYm90dG9tVGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21UYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tVGFic19pbml0aWFsaXplcnMsIF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlNYWlubWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICAvLyBMb2dvIHByb3BlcnRpZXMKICAgIGdldCBsb2dvSWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nb1RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBsb2dvVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb1RleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvLyBNZW51IGdyb3VwcyAobmV3IHdheSkKICAgIGdldCBtZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gQm90dG9tIHRhYnMgKHBpbm5lZCB0byBib3R0b20pCiAgICBnZXQgYm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21UYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIExlZ2FjeSB0YWJzIHByb3BlcnR5IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5Db250YWluZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhcn07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1leHBhbmRlZCk7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLyogTG9nbyBTZWN0aW9uICovCiAgICAgIC5sb2dvU2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubG9nb1NlY3Rpb24gewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTWlkZGxlIFNlY3Rpb24gKHNjcm9sbGFibGUpICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAubWVudUdyb3VwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmdyb3VwVGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBJdGVtICovCiAgICAgIC50YWIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI2MjYyNiIsICIjZTVlNWU1Iil9OwogICAgICB9CgogICAgICAudGFiOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNmM2Y0NiIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkY2ZjZTciLCAiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTI0MDBlIiwgIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzQ1MGEwYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogQm90dG9tIFNlY3Rpb24gKi8KICAgICAgLmJvdHRvbVNlY3Rpb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuZ2V0QWxsVGFicygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgW3sKICAgICAgICAgIG5hbWU6ICJhcHAgc2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJnZWFyIgogICAgICAgIH1dKTsKICAgICAgfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29uIHx8IHRoaXMubG9nb1RleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ29TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmxvZ29JY29uID8gYjJgPGRlZXMtaWNvbiBjbGFzcz0ibG9nb0ljb24iIC5pY29uPSIke3RoaXMubG9nb0ljb259Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5sb2dvVGV4dCA/IGIyYDxzcGFuIGNsYXNzPSJsb2dvVGV4dCI+JHt0aGlzLmxvZ29UZXh0fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVTZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5tZW51R3JvdXBzLmxlbmd0aCA+IDAgPyB0aGlzLnJlbmRlck1lbnVHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5VGFicygpfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMuYm90dG9tVGFicy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVHcm91cHMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgICR7Z3JvdXAubmFtZSA/IGIyYDxkaXYgY2xhc3M9Imdyb3VwSGVhZGVyIj4ke2dyb3VwLm5hbWV9PC9kaXY+YCA6ICIifQogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICAgJHtncm91cC5pdGVtcy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5VGFicygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYih0YWJBcmcpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRhYiAke3RhYkFyZyA9PT0gdGhpcy5zZWxlY3RlZFRhYiA/ICJzZWxlY3RlZFRhYiIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYih0YWJBcmcpOwogICAgICB9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGFiQXJnLmljb25OYW1lIHx8ICIifSI+PC9kZWVzLWljb24+CiAgICAgICAgPHNwYW4gY2xhc3M9InRhYkxhYmVsIj4ke3RhYkFyZy5rZXl9PC9zcGFuPgogICAgICAgICR7dGFiQXJnLmJhZGdlICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke3RhYkFyZy5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHt0YWJBcmcuYmFkZ2V9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7dGFiQXJnLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEFsbFRhYnMoKSB7CiAgICAgIGlmICh0aGlzLm1lbnVHcm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGdyb3VwVGFicyA9IHRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpOwogICAgICAgIHJldHVybiBbLi4uZ3JvdXBUYWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgICB9CiAgICAgIHJldHVybiBbLi4udGhpcy50YWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgfQogICAgdXBkYXRlVGFiKHRhYkFyZykgewogICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiQXJnOwogICAgICB0aGlzLnNlbGVjdGVkVGFiLmFjdGlvbigpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJzKCk7CiAgICAgIGlmIChhbGxUYWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYihhbGxUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpTWFpbm1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGJhY2tncm91bmQ6ICMwZjBmMGY7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBoMyB7CiAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBjb2RlIHsKICAgICAgYmFja2dyb3VuZDogIzI3MjcyYTsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHVsIHsKICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAuaGVhZGluZz0keyJQcm9qZWN0cyJ9CiAgICAgIC5ncm91cHM9JHtbCiAgLy8gR3JvdXAgMTogVGFiIGl0ZW1zIChkZWZhdWx0IGJlaGF2aW9yKQogIHsKICAgIG5hbWU6ICJOYXZpZ2F0aW9uIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmNvbXBhc3MiLAogICAgaXRlbXM6IFsKICAgICAgeyBrZXk6ICJEYXNoYm9hcmQiLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgY2xpY2tlZCIpLCBiYWRnZTogMywgYmFkZ2VWYXJpYW50OiAid2FybmluZyIgfSwKICAgICAgeyBrZXk6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiB9LAogICAgICB7IGtleTogIkFuYWx5dGljcyIsIGljb25OYW1lOiAibHVjaWRlOmJhckNoYXJ0MiIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMjogQWN0aW9ucwogIHsKICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgIGljb25OYW1lOiAibHVjaWRlOnphcCIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDcmVhdGUgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKSB9LAogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJJbXBvcnQgRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCBEYXRhIGNsaWNrZWQhIikgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiRGVsZXRlIEFsbCIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsIHZhcmlhbnQ6ICJkYW5nZXIiLCBjb25maXJtTWVzc2FnZTogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkRlbGV0ZWQhIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMzogRmlsdGVycwogIHsKICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlN0YXR1cyIgfSwKICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBBY3RpdmUiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja0NpcmNsZSIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLCBhY3RpdmUpIH0sCiAgICAgIHsgdHlwZTogImZpbHRlciIsIGtleTogIlNob3cgQXJjaGl2ZWQiLCBpY29uTmFtZTogImx1Y2lkZTphcmNoaXZlIiwgYWN0aXZlOiBmYWxzZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFyY2hpdmVkOiIsIGFjdGl2ZSkgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJDYXRlZ29yaWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6dGFnIiwgY29sbGFwc2VkOiBmYWxzZSwgb3B0aW9uczogWwogICAgICAgIHsga2V5OiAiZnJvbnRlbmQiLCBsYWJlbDogIkZyb250ZW5kIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6bW9uaXRvciIgfSwKICAgICAgICB7IGtleTogImJhY2tlbmQiLCBsYWJlbDogIkJhY2tlbmQiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgeyBrZXk6ICJkZXZvcHMiLCBsYWJlbDogIkRldk9wcyIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpjbG91ZCIgfSwKICAgICAgICB7IGtleTogImRlc2lnbiIsIGxhYmVsOiAiRGVzaWduIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnBhbGV0dGUiIH0KICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlNlbGVjdGVkIGNhdGVnb3JpZXM6Iiwga2V5czIpIH0KICAgIF0KICB9LAogIC8vIEdyb3VwIDQ6IExpbmtzIGFuZCBtaXNjCiAgewogICAgbmFtZTogIlJlc291cmNlcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpib29rT3BlbiIsCiAgICBjb2xsYXBzZWQ6IHRydWUsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIkRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJBUEkgUmVmZXJlbmNlIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBocmVmOiAiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZG9jcyIgfSwKICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIlVzZXIgR3VpZGUiLCBpY29uTmFtZTogImx1Y2lkZTpib29rIiwgaHJlZjogImh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9ndWlkZSIgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJTdXBwb3J0IiB9LAogICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiSGVscCBDZW50ZXIiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgaHJlZjogIi9oZWxwIiwgZXh0ZXJuYWw6IGZhbHNlIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJHaXRIdWIgSXNzdWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0aHViIiwgaHJlZjogImh0dHBzOi8vZ2l0aHViLmNvbS9leGFtcGxlL2lzc3VlcyIgfQogICAgXQogIH0KXX0KICAgICAgQGl0ZW0tc2VsZWN0PSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlRhYiBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGFjdGlvbi1jbGljaz0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJBY3Rpb24gY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGZpbHRlci10b2dnbGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiRmlsdGVyIHRvZ2dsZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBtdWx0aWZpbHRlci1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTXVsdGktZmlsdGVyIGNoYW5nZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBsaW5rLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkxpbmsgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIDxoMz5TZWNvbmRhcnkgTWVudSBEZW1vPC9oMz4KICAgICAgPHA+VGhpcyBkZW1vIHNob3djYXNlcyBhbGwgOCBpdGVtIHR5cGVzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Y29kZT50YWI8L2NvZGU+IC0gU2VsZWN0YWJsZSBpdGVtcyAoTmF2aWdhdGlvbiBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IC0gQmx1ZSBhY3Rpb25zIChBY3Rpb25zIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gd2l0aCA8Y29kZT52YXJpYW50OiAnZGFuZ2VyJzwvY29kZT4gLSBSZWQgZGFuZ2VyIGFjdGlvbjwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmZpbHRlcjwvY29kZT4gLSBDaGVja2JveCB0b2dnbGVzIChGaWx0ZXJzIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPm11bHRpRmlsdGVyPC9jb2RlPiAtIENvbGxhcHNpYmxlIG11bHRpLXNlbGVjdCAoQ2F0ZWdvcmllcyk8L2xpPgogICAgICAgIDxsaT48Y29kZT5kaXZpZGVyPC9jb2RlPiAtIFZpc3VhbCBzZXBhcmF0b3JzPC9saT4KICAgICAgICA8bGk+PGNvZGU+aGVhZGVyPC9jb2RlPiAtIFNlY3Rpb24gbGFiZWxzPC9saT4KICAgICAgICA8bGk+PGNvZGU+bGluazwvY29kZT4gLSBFeHRlcm5hbC9pbnRlcm5hbCBsaW5rcyAoUmVzb3VyY2VzIGdyb3VwKTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlRyeSB0aGUgY29sbGFwc2UgdG9nZ2xlIG9uIHRoZSBsZWZ0IGVkZ2UhPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVNlY29uZGFyeW1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9oZWFkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9ncm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJDb3VudGVyX2RlY29yYXRvcnM7CiAgbGV0IF9yZW5kZXJDb3VudGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVuZGVyQ291bnRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZ3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9jb2xsYXBzZWRHcm91cHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9ncm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ncm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JvdXBzX2luaXRpYWxpemVycywgX2dyb3Vwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uT3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uT3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZEdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkR3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZEdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkR3JvdXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZEdyb3Vwc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZE11bHRpRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkTXVsdGlGaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZW5kZXJDb3VudGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJDb3VudGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlbmRlckNvdW50ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlbmRlckNvdW50ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlTZWNvbmRhcnltZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjk7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICJNZW51Iik7CiAgICAvLyBJTlNUQU5DRQogICAgLyoqIER5bmFtaWMgaGVhZGluZyAtIHR5cGljYWxseSBzaG93cyB0aGUgc2VsZWN0ZWQgTWFpbk1lbnUgaXRlbSAqLwogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLyoqIEdyb3VwZWQgaXRlbXMgd2l0aCBjb2xsYXBzZSBzdXBwb3J0IC0gc3VwcG9ydHMgbmV3IElTZWNvbmRhcnlNZW51R3JvdXAgKi8KICAgIGdldCBncm91cHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncm91cHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBncm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIC8qKiBMZWdhY3kgZmxhdCBsaXN0IHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgIGdldCBzZWxlY3Rpb25PcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGlvbk9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0YWIgaXRlbSAqLwogICAgZ2V0IHNlbGVjdGVkSXRlbSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgLyoqIEludGVybmFsIHN0YXRlIGZvciBjb2xsYXBzZWQgZ3JvdXBzICovCiAgICBnZXQgY29sbGFwc2VkR3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkR3JvdXBzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICAvKiogSW50ZXJuYWwgc3RhdGUgZm9yIGNvbGxhcHNlZCBtdWx0aS1maWx0ZXJzICovCiAgICBnZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZW5kZXJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIC8qKiBSZW5kZXIgY291bnRlciB0byBmb3JjZSByZS1yZW5kZXJzIHdoZW4gaXRlbXMgYXJlIG11dGF0ZWQgKi8KICAgIGdldCByZW5kZXJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlbmRlckNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlbmRlckNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8qKiBIb3Jpem9udGFsIGNvbGxhcHNlIHN0YXRlICovCiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkOiAyNDBweDsKICAgICAgICAtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tc2lkZWJhci1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLXNpZGViYXItZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgICAgLS1zaWRlYmFyLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1zaWRlYmFyLWJvcmRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICAtLXNpZGViYXItaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1zaWRlYmFyLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICAtLXNpZGViYXItYWNjZW50OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CgogICAgICAgIC8qIEJhZGdlIGNvbG9ycyAqLwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICAtLWJhZGdlLWRlZmF1bHQtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2YzZjQ2IiwgIiNhMWExYWEiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjZmNlNyIsICIjMTQ1MzJkIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgICAtLWJhZGdlLXdhcm5pbmctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkyNDAwZSIsICIjZmJiZjI0Iil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVlMmUyIiwgIiM0NTBhMGEiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKCiAgICAgICAgLyogQWN0aW9uIGNvbG9ycyAqLwogICAgICAgIC0tYWN0aW9uLXByaW1hcnk6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMzYjgyZjYiKX07CiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeS1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzYwYTVmYSIpfTsKICAgICAgICAtLWFjdGlvbi1kYW5nZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyLWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2I5MWMxYyIsICIjZjg3MTcxIil9OwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJnKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkKTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgU2VjdGlvbiAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGFibGUgTWVudSBTZWN0aW9uICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXI6aG92ZXIgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpub3QoLmNvbGxhcHNlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLyogSGlkZSBncm91cCBoZWFkZXJzIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEdyb3VwIEl0ZW1zIENvbnRhaW5lciAqLwogICAgICAuZ3JvdXBJdGVtcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXJnaW4gMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBJdGVtcy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBBbHdheXMgc2hvdyBpdGVtcyB3aGVuIGhvcml6b250YWxseSBjb2xsYXBzZWQgKHJlZ2FyZGxlc3Mgb2YgZ3JvdXAgY29sbGFwc2Ugc3RhdGUpICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBJdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBNZW51IEl0ZW0gQmFzZSAqLwogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0NTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWN0aXZlKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tcHJpbWFyeSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5LWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNywgOTksIDIzNSwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXIpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlcjpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXItaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyMCwgMzgsIDM4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBGaWx0ZXIgSXRlbSBTdHlsZXMgKi8KICAgICAgLm1lbnVJdGVtLmZpbHRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyIC5maWx0ZXItY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyLmFjdGl2ZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLyogTXVsdGktRmlsdGVyIENvbnRhaW5lciAqLwogICAgICAubXVsdGlGaWx0ZXIgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlci5jb2xsYXBzZWQgLmNoZXZyb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiAub3B0aW9uLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzUyNTI1MiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gZGVlcy1pY29uLm9wdGlvbi1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyICovCiAgICAgIC5tZW51RGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudURpdmlkZXIgewogICAgICAgIG1hcmdpbjogOHB4IDRweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyL0xhYmVsICovCiAgICAgIC5tZW51SGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExpbmsgSXRlbSAqLwogICAgICAubWVudUl0ZW0ubGluayAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLyogQ29sbGFwc2VkIG1lbnUgaXRlbSBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5maWx0ZXItY2hlY2tib3gsCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmV4dGVybmFsLWljb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubXVsdGlGaWx0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAuaXRlbS10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtZmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW06aG92ZXIgLml0ZW0tdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAxczsKICAgICAgfQoKICAgICAgLyogQmFkZ2UgU3R5bGVzICovCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWRlZmF1bHQtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1zdWNjZXNzLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXdhcm5pbmctYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS13YXJuaW5nLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1lcnJvci1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWVycm9yLWZnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGVnYWN5IG9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5sZWdhY3lPcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgfQoKICAgICAgLyogRGl2aWRlciAobGVnYWN5KSAqLwogICAgICAuZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkaW5nIj4ke3RoaXMuaGVhZGluZ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudVNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLmdyb3Vwcy5sZW5ndGggPiAwID8gdGhpcy5yZW5kZXJHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5T3B0aW9ucygpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyb3VwcygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJncm91cEhlYWRlciAke3RoaXMuY29sbGFwc2VkR3JvdXBzLmhhcyhncm91cC5uYW1lKSA/ICJjb2xsYXBzZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVHcm91cChncm91cC5uYW1lKX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJncm91cFRpdGxlIj4KICAgICAgICAgICAgICAke2dyb3VwLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oZ3JvdXAuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgICR7Z3JvdXAubmFtZX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncm91cEl0ZW1zICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKGdyb3VwLm5hbWUpID8gImNvbGxhcHNlZCIgOiAiIn0iPgogICAgICAgICAgICAke2dyb3VwLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJJdGVtKGl0ZW0sIGdyb3VwKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVySXRlbShpdGVtLCBncm91cCkgewogICAgICBpZiAoImhpZGRlbiIgaW4gaXRlbSAmJiBpdGVtLmhpZGRlbikgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gInR5cGUiIGluIGl0ZW0gPyBpdGVtLnR5cGUgOiAidGFiIjsKICAgICAgc3dpdGNoIChpdGVtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGlvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJBY3Rpb25JdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgIm11bHRpRmlsdGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKTsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpdmlkZXIoKTsKICAgICAgICBjYXNlICJoZWFkZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGVhZGVyKGl0ZW0pOwogICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlua0l0ZW0oaXRlbSk7CiAgICAgICAgY2FzZSAidGFiIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShpdGVtLCBncm91cCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlclRhYkl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtPy5rZXkgPT09IGl0ZW0ua2V5OwogICAgICBjb25zdCBpc0Rpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0gJHtpc0Rpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9IiR7KCkgPT4gIWlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKX0iCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2l0ZW0uYmFkZ2UgIT09IHZvaWQgMCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7aXRlbS5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHtpdGVtLmJhZGdlfTwvc3Bhbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbkl0ZW0oaXRlbSkgewogICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS52YXJpYW50IHx8ICJwcmltYXJ5IjsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBhY3Rpb24tJHt2YXJpYW50fSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiAhaXNEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUFjdGlvbkNsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBmaWx0ZXIgJHtpdGVtLmFjdGl2ZSA/ICJhY3RpdmUiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlRmlsdGVyVG9nZ2xlKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke2l0ZW0uYWN0aXZlID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5hY3RpdmUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aUZpbHRlckl0ZW0oaXRlbSkgewogICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhpdGVtLmtleSk7CiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gb3B0LmNoZWNrZWQpLmxlbmd0aDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlciI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLWhlYWRlciAke2lzQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVNdWx0aUZpbHRlcihpdGVtLmtleSl9IgogICAgICAgID4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aUZpbHRlci10aXRsZSI+CiAgICAgICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAke2l0ZW0ua2V5fQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgJHtjaGVja2VkQ291bnQgPiAwID8gYjJgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLWNvdW50Ij4ke2NoZWNrZWRDb3VudH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlci1vcHRpb25zICR7aXNDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSI+CiAgICAgICAgICAke2l0ZW0ub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbiIKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShpdGVtLCBvcHRpb24yLmtleSl9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9uLWNoZWNrYm94ICR7b3B0aW9uMi5jaGVja2VkID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICAgICAgICR7b3B0aW9uMi5jaGVja2VkID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmNoZWNrIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAke29wdGlvbjIuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIGNsYXNzPSJvcHRpb24taWNvbiIgLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKG9wdGlvbjIuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgIDxzcGFuPiR7b3B0aW9uMi5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpdmlkZXIoKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51RGl2aWRlciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckhlYWRlcihpdGVtKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51SGVhZGVyIj4ke2l0ZW0ubGFiZWx9PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckxpbmtJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBsaW5rICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlTGlua0NsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgICR7aXNFeHRlcm5hbCA/IGIyYDxkZWVzLWljb24gY2xhc3M9ImV4dGVybmFsLWljb24iIC5pY29uPSIkeyJsdWNpZGU6ZXh0ZXJuYWxMaW5rIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJsZWdhY3lPcHRpb25zIj4KICAgICAgICAke3RoaXMuc2VsZWN0aW9uT3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG9wdGlvbjIgJiYgb3B0aW9uMi5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXRlbSA9IG9wdGlvbjI7CiAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgIGtleTogaXRlbS5rZXksCiAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sCiAgICAgICAgICBiYWRnZTogaXRlbS5iYWRnZSwKICAgICAgICAgIGJhZGdlVmFyaWFudDogaXRlbS5iYWRnZVZhcmlhbnQKICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0odGFiSXRlbSk7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICAvLyBIZWxwZXIgdG8gbm9ybWFsaXplIGljb24gbmFtZXMKICAgIG5vcm1hbGl6ZUljb24oaWNvbk5hbWUpIHsKICAgICAgcmV0dXJuIGljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGljb25OYW1lIDogYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICB9CiAgICB0b2dnbGVHcm91cChncm91cE5hbWUpIHsKICAgICAgY29uc3QgbmV3Q29sbGFwc2VkID0gbmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7CiAgICAgIGlmIChuZXdDb2xsYXBzZWQuaGFzKGdyb3VwTmFtZSkpIHsKICAgICAgICBuZXdDb2xsYXBzZWQuZGVsZXRlKGdyb3VwTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmFkZChncm91cE5hbWUpOwogICAgICB9CiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzID0gbmV3Q29sbGFwc2VkOwogICAgfQogICAgdG9nZ2xlTXVsdGlGaWx0ZXIoZmlsdGVyS2V5KSB7CiAgICAgIGNvbnN0IG5ld0NvbGxhcHNlZCA9IG5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOwogICAgICBpZiAobmV3Q29sbGFwc2VkLmhhcyhmaWx0ZXJLZXkpKSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmRlbGV0ZShmaWx0ZXJLZXkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5ld0NvbGxhcHNlZC5hZGQoZmlsdGVyS2V5KTsKICAgICAgfQogICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IG5ld0NvbGxhcHNlZDsKICAgIH0KICAgIHRvZ2dsZUNvbGxhcHNlKCkgewogICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sbGFwc2UtY2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBzZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIGdyb3VwIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVBY3Rpb25DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmNvbmZpcm1NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oaXRlbS5jb25maXJtTWVzc2FnZSk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVGaWx0ZXJUb2dnbGUoaXRlbSkgewogICAgICBjb25zdCBuZXdBY3RpdmUgPSAhaXRlbS5hY3RpdmU7CiAgICAgIGl0ZW0uYWN0aXZlID0gbmV3QWN0aXZlOwogICAgICBpdGVtLm9uVG9nZ2xlKG5ld0FjdGl2ZSk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWx0ZXItdG9nZ2xlIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtLCBhY3RpdmU6IG5ld0FjdGl2ZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTXVsdGlGaWx0ZXJPcHRpb25Ub2dnbGUoaXRlbSwgb3B0aW9uS2V5KSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSBpdGVtLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQua2V5ID09PSBvcHRpb25LZXkpOwogICAgICBpZiAob3B0aW9uMikgewogICAgICAgIG9wdGlvbjIuY2hlY2tlZCA9ICFvcHRpb24yLmNoZWNrZWQ7CiAgICAgIH0KICAgICAgY29uc3Qgc2VsZWN0ZWRLZXlzID0gaXRlbS5vcHRpb25zLmZpbHRlcigob3B0KSA9PiBvcHQuY2hlY2tlZCkubWFwKChvcHQpID0+IG9wdC5rZXkpOwogICAgICBpdGVtLm9uQ2hhbmdlKHNlbGVjdGVkS2V5cyk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtdWx0aWZpbHRlci1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIHNlbGVjdGVkS2V5cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTGlua0NsaWNrKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgaWYgKGlzRXh0ZXJuYWwpIHsKICAgICAgICB3aW5kb3cub3BlbihpdGVtLmhyZWYsICJfYmxhbmsiLCAibm9vcGVuZXIsbm9yZWZlcnJlciIpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXRlbS5ocmVmOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxpbmstY2xpY2siLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCBpdGVtKSB7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IGRldGFpbHMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkVkaXQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGVuY2lsIgogICAgICAgIH0KICAgICAgXSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGluaXRpYWxDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGNvbnN0IGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHsKICAgICAgICAgIGlmIChncm91cC5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgaW5pdGlhbENvbGxhcHNlZC5hZGQoZ3JvdXAubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGlmICgidHlwZSIgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICJtdWx0aUZpbHRlciIpIHsKICAgICAgICAgICAgICBjb25zdCBtdWx0aUZpbHRlciA9IGl0ZW07CiAgICAgICAgICAgICAgaWYgKG11bHRpRmlsdGVyLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkLmFkZChtdWx0aUZpbHRlci5rZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cHMgPSBpbml0aWFsQ29sbGFwc2VkOwogICAgICAgIHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkOwogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwLml0ZW1zKSB7CiAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSAidHlwZSIgaW4gaXRlbSA/IGl0ZW0udHlwZSA6ICJ0YWIiOwogICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gInRhYiIgfHwgaXRlbVR5cGUgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IGl0ZW07CiAgICAgICAgICAgICAgICBpZiAoIXRhYkl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWJJdGVtKHRhYkl0ZW0sIGdyb3VwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25PcHRpb25zLmZpbmQoKG9wdCkgPT4gISgiZGl2aWRlciIgaW4gb3B0KSk7CiAgICAgICAgaWYgKGZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgICAga2V5OiBmaXJzdE9wdGlvbi5rZXksCiAgICAgICAgICAgIGljb25OYW1lOiBmaXJzdE9wdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBmaXJzdE9wdGlvbi5hY3Rpb24KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnNlbGVjdFRhYkl0ZW0odGFiSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTM5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb0Nsb3NlYWJsZVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLWNsb3NlYWJsZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYkNvdW50ZXJfZGVjb3JhdG9yczsKICBsZXQgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9DbG9zZWFibGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhYkNvdW50ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJDb3VudGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkNvdW50ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkNvdW50ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiQ291bnRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFiQ291bnRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJDb3VudGVyX2luaXRpYWxpemVycywgX3RhYkNvdW50ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJNYWluIiwgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk1haW4gY2xpY2tlZCIpIH0KICAgIF0pOwogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFiQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFiQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYkNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGFkZFRhYigpIHsKICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgIGNvbnN0IHRhYktleSA9IGBEb2N1bWVudCAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLnRhYnMgPSBbCiAgICAgICAgLi4udGhpcy50YWJzLAogICAgICAgIHsKICAgICAgICAgIGtleTogdGFiS2V5LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGAke3RhYktleX0gY2xpY2tlZGApLAogICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLAogICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5yZW1vdmVUYWIodGFiS2V5KQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHJlbW92ZVRhYih0YWJLZXkpIHsKICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigodDkpID0+IHQ5LmtleSAhPT0gdGFiS2V5KTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFiKGUxMS5kZXRhaWwudGFiLmtleSl9CiAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgTmV3IFRhYjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgQ2xpY2sgdGhlIFggYnV0dG9uIG9uIHRhYnMgdG8gY2xvc2UgdGhlbS4gVGhlICJNYWluIiB0YWIgaXMgbm90IGNsb3NlYWJsZS4KICAgICAgICA8YnI+Q3VycmVudCB0YWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vQXV0b0hpZGVUYWJzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1hdXRvaGlkZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vQXV0b0hpZGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF90aHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF9hdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9IaWRlX2luaXRpYWxpemVycywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vQXV0b0hpZGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJUYWIgMSIsIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYWIgMSIpIH0sCiAgICAgIHsga2V5OiAiVGFiIDIiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVGFiIDIiKSB9CiAgICBdKTsKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgdGhyZXNob2xkKCkgewogICAgICByZXR1cm4gdGhpcy4jdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGhyZXNob2xkKHZhbHVlMikgewogICAgICB0aGlzLiN0aHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICB0YWJDb3VudGVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyksIDIpOwogICAgYWRkVGFiKCkgewogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFicywgewogICAgICAgIGtleTogYFRhYiAke3RoaXMudGFiQ291bnRlcn1gLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLAogICAgICAgIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coYFRhYiAke3RoaXMudGFiQ291bnRlcn1gKQogICAgICB9XTsKICAgIH0KICAgIHJlbW92ZUxhc3RUYWIoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5zbGljZSgwLCAtMSk7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVGFicygpIHsKICAgICAgdGhpcy50YWJzID0gW107CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHNob3VsZEhpZGUgPSB0aGlzLmF1dG9IaWRlICYmIHRoaXMudGFicy5sZW5ndGggPD0gdGhpcy50aHJlc2hvbGQ7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7c2hvdWxkSGlkZSA/IGIyYDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gIDogYjJgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUxhc3RUYWIoKX0+LSBSZW1vdmUgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDA7CiAgICAgIH19PlRocmVzaG9sZDogMDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICAgIHRoaXMudGhyZXNob2xkID0gMTsKICAgICAgfX0+VGhyZXNob2xkOiAxPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAyOwogICAgICB9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlID8gIk9OIiA6ICJPRkYifSB8IFRocmVzaG9sZDogJHt0aGlzLnRocmVzaG9sZH0gfCBUYWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgICAgPGJyPlRhYnMgd2lsbCBoaWRlIHdoZW4gY291bnQg4omkIHRocmVzaG9sZC4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb0F1dG9IaWRlVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmMzMCA9ICgpID0+IHsKICBjb25zdCBob3Jpem9udGFsVGFicyA9IFsKICAgIHsga2V5OiAiSG9tZSIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBbmFseXRpY3MgRGFzaGJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGluZUNoYXJ0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQW5hbHl0aWNzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJVc2VyIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiSGVscCIsIGljb25OYW1lOiAibHVjaWRlOmhlbHBDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCB2ZXJ0aWNhbFRhYnMgPSBbCiAgICB7IGtleTogIlByb2ZpbGUiLCBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiU2VjdXJpdHkiLCBpY29uTmFtZTogImx1Y2lkZTpzaGllbGQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZWN1cml0eSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiTm90aWZpY2F0aW9ucyIsIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJJbnRlZ3JhdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTpsaW5rIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSW50ZWdyYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBZHZhbmNlZCIsIGljb25OYW1lOiAibHVjaWRlOmNvZGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBZHZhbmNlZCBjbGlja2VkIikgfQogIF07CiAgY29uc3Qgbm9JbmRpY2F0b3JUYWJzID0gWwogICAgeyBrZXk6ICJBbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbGwgY2xpY2tlZCIpIH0sCiAgICB7IGtleTogIkFjdGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiQ29tcGxldGVkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ29tcGxldGVkIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBcmNoaXZlZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCBkZW1vQ29udGVudCA9ICh0ZXh0OSkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsiPgogICAgICAke3RleHQ5fQogICAgPC9kaXY+CiAgYDsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50d28tY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjAwcHggMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkhvcml6b250YWwgVGFicyB3aXRoIEFuaW1hdGVkIEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnRhYnM9JHtob3Jpem9udGFsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtkZW1vQ29udGVudCgiU2VsZWN0IGEgdGFiIHRvIHNlZSB0aGUgc21vb3RoIHNsaWRpbmcgYW5pbWF0aW9uIG9mIHRoZSBpbmRpY2F0b3IuIFRoZSBpbmRpY2F0b3IgYXV0b21hdGljYWxseSBhZGp1c3RzIGl0cyB3aWR0aCB0byBtYXRjaCB0aGUgdGFiIGNvbnRlbnQgd2l0aCBtaW5pbWFsIHBhZGRpbmcuIil9CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q2xvc2VhYmxlIFRhYnMgKEJyb3dzZXItc3R5bGUpPC9kaXY+CiAgICAgICAgPGRlbW8tY2xvc2VhYmxlLXRhYnM+PC9kZW1vLWNsb3NlYWJsZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1dG8taGlkZSBUYWJzPC9kaXY+CiAgICAgICAgPGRlbW8tYXV0b2hpZGUtdGFicz48L2RlbW8tYXV0b2hpZGUtdGFicz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WZXJ0aWNhbCBUYWJzIExheW91dDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InR3by1jb2x1bW4iPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFiU3R5bGU9JHsidmVydGljYWwifSAudGFicz0ke3ZlcnRpY2FsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgICAke2RlbW9Db250ZW50KCJWZXJ0aWNhbCB0YWJzIHdvcmsgZ3JlYXQgZm9yIHNldHRpbmdzIHBhZ2VzIGFuZCBuYXZpZ2F0aW9uIG1lbnVzLiBUaGUgYW5pbWF0ZWQgaW5kaWNhdG9yIHNtb290aGx5IHRyYW5zaXRpb25zIGJldHdlZW4gc2VsZWN0aW9ucy4iKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5XaXRob3V0IEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnNob3dUYWJJbmRpY2F0b3I9JHtmYWxzZX0gLnRhYnM9JHtub0luZGljYXRvclRhYnN9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7ZGVtb0NvbnRlbnQoIlRhYnMgY2FuIGFsc28gYmUgdXNlZCB3aXRob3V0IHRoZSBhbmltYXRlZCBpbmRpY2F0b3IgYnkgc2V0dGluZyBzaG93VGFiSW5kaWNhdG9yIHRvIGZhbHNlLiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2RlZXMtYXBwdWktdGFicy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXRhYnMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGFiSW5kaWNhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9kZWNvcmF0b3JzOwogIGxldCBfdGFiU3R5bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnM7CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9yczsKICBsZXQgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYkluZGljYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90YWJTdHlsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY2FuU2Nyb2xsTGVmdF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1RhYkluZGljYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1RhYkluZGljYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFiSW5kaWNhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGFiSW5kaWNhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF90YWJTdHlsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJTdHlsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFiU3R5bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiU3R5bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRhYlN0eWxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYlN0eWxlX2luaXRpYWxpemVycywgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9IaWRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvSGlkZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfYXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b0hpZGVUaHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9IaWRlVGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvSGlkZVRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9hdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNhblNjcm9sbExlZnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbExlZnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2FuU2Nyb2xsTGVmdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2FuU2Nyb2xsTGVmdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2FuU2Nyb2xsUmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbFJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNhblNjcm9sbFJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jYW5TY3JvbGxSaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzMwOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9zaG93VGFiSW5kaWNhdG9yX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dUYWJJbmRpY2F0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1RhYkluZGljYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYlN0eWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYlN0eWxlX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgdGFiU3R5bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYlN0eWxlKHZhbHVlMikgewogICAgICB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGF1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhdXRvSGlkZVRocmVzaG9sZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBTY3JvbGwgc3RhdGUgZm9yIGZhZGUgaW5kaWNhdG9ycwogICAgZ2V0IGNhblNjcm9sbExlZnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsTGVmdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjYW5TY3JvbGxSaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsUmlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IChfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9IDAlLAogICAgICAgICAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMCkiLCAicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsICJyZ2JhKDIyLDIyLDIyLDApIil9IDEwMCUpOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBTaG93IHNjcm9sbGJhciBvbiBob3ZlciAqLwogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjM1KSIpfTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYiAudGFiLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC41KSIpfTsKICAgICAgfQoKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiB0aGlzLnRhYnMubGVuZ3RoIDw9IHRoaXMuYXV0b0hpZGVUaHJlc2hvbGQpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYnNXcmFwcGVyKCkgewogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHdyYXBwZXJDbGFzcyA9IGlzSG9yaXpvbnRhbCA/ICJ0YWJzLXdyYXBwZXIgaG9yaXpvbnRhbC13cmFwcGVyIiA6ICJ2ZXJ0aWNhbC13cmFwcGVyIjsKICAgICAgY29uc3QgY29udGFpbmVyQ2xhc3MgPSBgdGFic0NvbnRhaW5lciAke3RoaXMudGFiU3R5bGV9YDsKICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtbGVmdCAke3RoaXMuY2FuU2Nyb2xsTGVmdCA/ICJ2aXNpYmxlIiA6ICIifSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSIke2NvbnRhaW5lckNsYXNzfSIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiB0aGlzLnJlbmRlclRhYih0YWIyLCBpc0hvcml6b250YWwpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtcmlnaHQgJHt0aGlzLmNhblNjcm9sbFJpZ2h0ID8gInZpc2libGUiIDogIiJ9Ij48L2Rpdj4KICAgICAgICAgICR7dGhpcy5zaG93VGFiSW5kaWNhdG9yID8gYjJgPGRpdiBjbGFzcz0idGFiSW5kaWNhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3N9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3IgPyBiMmA8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGFiKHRhYjIsIGlzSG9yaXpvbnRhbCkgewogICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGFiMiA9PT0gdGhpcy5zZWxlY3RlZFRhYjsKICAgICAgY29uc3QgY2xhc3NlcyA9IGB0YWIgJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkVGFiIiA6ICIifWA7CiAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGFiMi5jbG9zZWFibGUgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSIkeyhlMTEpID0+IHRoaXMuY2xvc2VUYWIoZTExLCB0YWIyKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyI+PC9kZWVzLWljb24+CiAgICAgIDwvc3Bhbj4KICAgIGAgOiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBpc0hvcml6b250YWwgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAke3RoaXMucmVuZGVyVGFiSWNvbih0YWIyKX0KICAgICAgICAke3RhYjIua2V5fQogICAgICA8L3NwYW4+CiAgICAgICR7Y2xvc2VCdXR0b259CiAgICBgIDogYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKHRhYjIpfQogICAgICAke3RhYjIua2V5fQogICAgICAke2Nsb3NlQnV0dG9ufQogICAgYDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IiR7Y2xhc3Nlc30iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMuc2VsZWN0VGFiKHRhYjIpfSIKICAgICAgPgogICAgICAgICR7Y29udGVudDN9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYkljb24odGFiMikgewogICAgICByZXR1cm4gdGFiMi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249JHt0YWIyLmljb25OYW1lfT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICB9CiAgICBzZWxlY3RUYWIodGFiQXJnKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWJBcmc7CiAgICAgIHRhYkFyZy5hY3Rpb24oKTsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLnNjcm9sbFRhYkludG9WaWV3KHRhYkFyZyk7CiAgICAgIH0pOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2VUYWIoZTExLCB0YWIyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKHRhYjIub25DbG9zZSkgewogICAgICAgIHRhYjIub25DbG9zZSgpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWIyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc2V0dXBSZXNpemVPYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMudGFiU3R5bGUgIT09ICJob3Jpem9udGFsIikKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNjcm9sbCA9ICgpID0+IHsKICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgfTsKICAgIHVwZGF0ZVNjcm9sbFN0YXRlKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7CiAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoOwogICAgICBjb25zdCBjbGllbnRXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDsKICAgICAgY29uc3QgdGhyZXNob2xkID0gMjsKICAgICAgdGhpcy5jYW5TY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA+IHRocmVzaG9sZDsKICAgICAgdGhpcy5jYW5TY3JvbGxSaWdodCA9IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gdGhyZXNob2xkOwogICAgfQogICAgc2Nyb2xsVGFiSW50b1ZpZXcodGFiMikgewogICAgICBpZiAodGhpcy50YWJTdHlsZSAhPT0gImhvcml6b250YWwiKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZih0YWIyKTsKICAgICAgaWYgKHRhYkluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBjb25zdCB0YWJFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGAudGFiOm50aC1jaGlsZCgke3RhYkluZGV4ICsgMX0pYCk7CiAgICAgIGlmICh0YWJFbGVtZW50ICYmIGNvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgdGFiUmVjdCA9IHRhYkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNGdWxseVZpc2libGUgPSB0YWJSZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIHRhYlJlY3QucmlnaHQgPD0gY29udGFpbmVyUmVjdC5yaWdodDsKICAgICAgICBpZiAoIWlzRnVsbHlWaXNpYmxlKSB7CiAgICAgICAgICB0YWJFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiLCBpbmxpbmU6ICJuZWFyZXN0IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRhYnMiKSAmJiB0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRUYWIpIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNlbGVjdGVkVGFiIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ0YWJzIikpIHsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIGlmICghdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZCAmJiBkb2N1bWVudC5mb250cykgewogICAgICAgICAgYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CiAgICAgICAgfQogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGljYXRvcigpOwogICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpbmRpY2F0b3JJbml0aWFsaXplZCA9IGZhbHNlOwogICAgdXBkYXRlVGFiSW5kaWNhdG9yKCkgewogICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy5nZXRTZWxlY3RlZFRhYkVsZW1lbnQoKTsKICAgICAgaWYgKCFzZWxlY3RlZFRhYkVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldEluZGljYXRvckVsZW1lbnQoKTsKICAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKGluZGljYXRvcik7CiAgICAgIGlmICh0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICB0aGlzLnVwZGF0ZUhvcml6b250YWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9CiAgICAgIGluZGljYXRvci5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgfQogICAgc2hvdWxkU2hvd0luZGljYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgJiYgdGhpcy5zaG93VGFiSW5kaWNhdG9yICYmIHRoaXMudGFicy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGFiKTsKICAgIH0KICAgIGdldFNlbGVjdGVkVGFiRWxlbWVudCgpIHsKICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRUYWIpOwogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHNlbGVjdG9yID0gaXNIb3Jpem9udGFsID8gYC50YWJzLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtzZWxlY3RlZEluZGV4ICsgMX0pYCA6IGAudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke3NlbGVjdGVkSW5kZXggKyAxfSlgOwogICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgfQogICAgZ2V0SW5kaWNhdG9yRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGFiSW5kaWNhdG9yIik7CiAgICB9CiAgICBoYW5kbGVJbml0aWFsVHJhbnNpdGlvbihpbmRpY2F0b3IpIHsKICAgICAgaWYgKCF0aGlzLmluZGljYXRvckluaXRpYWxpemVkKSB7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgfSwgNTApOwogICAgICB9CiAgICB9CiAgICB1cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKGluZGljYXRvciwgdGFiRWxlbWVudCkgewogICAgICBjb25zdCB0YWJDb250ZW50ID0gdGFiRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIudGFiLWNvbnRlbnQiKTsKICAgICAgaWYgKCF0YWJDb250ZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSBpbmRpY2F0b3IucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgY29udGVudFJlY3QgPSB0YWJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBjb250ZW50TGVmdCA9IGNvbnRlbnRSZWN0LmxlZnQgLSB3cmFwcGVyUmVjdC5sZWZ0OwogICAgICBjb25zdCBpbmRpY2F0b3JXaWR0aCA9IGNvbnRlbnRSZWN0LndpZHRoICsgODsKICAgICAgY29uc3QgaW5kaWNhdG9yTGVmdCA9IGNvbnRlbnRMZWZ0IC0gNDsKICAgICAgaW5kaWNhdG9yLnN0eWxlLndpZHRoID0gYCR7aW5kaWNhdG9yV2lkdGh9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke2luZGljYXRvckxlZnR9cHhgOwogICAgfQogICAgdXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCB0YWJFbGVtZW50KSB7CiAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIiKTsKICAgICAgaWYgKCF0YWJzQ29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgaW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke3RhYkVsZW1lbnQub2Zmc2V0VG9wICsgdGFic0NvbnRhaW5lci5vZmZzZXRUb3B9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbmNvbnRlbnQvZGVlcy1hcHB1aS1tYWluY29udGVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5jb250ZW50ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWluY29udGVudCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzOwogIGxldCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic0F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlNYWluY29udGVudDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3Nob3dUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1RhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZVRocmVzaG9sZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZVRocmVzaG9sZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlVGhyZXNob2xkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aU1haW5jb250ZW50MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgLnRhYnM9JHtbCiAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXciKSB9LAogICAgICB7IGtleTogIkRldGFpbHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiRGV0YWlscyIpIH0sCiAgICAgIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfQogICAgXX0KICAgID4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogNDBweDsgY29sb3I6ICNjY2M7Ij4KICAgICAgICA8aDE+TWFpbiBDb250ZW50IEFyZWE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiBjb250ZW50IGdvZXMuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsga2V5OiAiXHUyNkEwXHVGRTBGIFBsZWFzZSBzZXQgdGFicyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50IikgfQogICAgXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1RhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3Nob3dUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0YWJzQXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVUaHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgPiAqIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtub3RhYnNdKSAudG9wYmFyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5zZWxlY3RlZFRhYn0KICAgICAgICAgICAgLnNob3dUYWJJbmRpY2F0b3I9JHt0cnVlfQogICAgICAgICAgICAudGFiU3R5bGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMudGFic0F1dG9IaWRlfQogICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVRhYlNlbGVjdChlMTEpfQogICAgICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZVRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVRhYkNsb3NlKGUxMSkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1RhYnMiKSkgewogICAgICAgIGlmICh0aGlzLnNob3dUYWJzKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgibm90YWJzIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCAiIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoIXRoaXMuc2hvd1RhYnMpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibm90YWJzIiwgIiIpOwogICAgICB9CiAgICAgIGNvbnN0IHRhYnNDb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7CiAgICAgIGlmICh0YWJzQ29tcG9uZW50KSB7CiAgICAgICAgYXdhaXQgdGFic0NvbXBvbmVudC51cGRhdGVDb21wbGV0ZTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlNYWluY29udGVudDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvZGVlcy1hcHB1aS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWkiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyVXNlcl9kZWNvcmF0b3JzOwogIGxldCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb1RleHRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VGFic19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnM7CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbmNvbnRlbnRUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWluY29udGVudFRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlsb2dFbGVtZW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2FwcGJhck1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FwcGJhclVzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21haW5tZW51TG9nb0ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYWlubWVudUxvZ29UZXh0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWFpbm1lbnVHcm91cHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2FwcGJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWFpbm1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyTWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyTWVudUl0ZW1zX2luaXRpYWxpemVycywgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJCcmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJCcmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyQnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhckJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJTaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJVc2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhclVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyVXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyVXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcHBiYXJVc2VyX2luaXRpYWxpemVycywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyU2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJTaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhclNob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUxvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51TG9nb0ljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51TG9nb0ljb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVMb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVMb2dvSWNvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUxvZ29UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51TG9nb1RleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51TG9nb1RleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVMb2dvVGV4dF9pbml0aWFsaXplcnMsIF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51Qm90dG9tVGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVCb3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51Qm90dG9tVGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVCb3R0b21UYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVUYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51VGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudVNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVIZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51SGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51SGVhZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudUhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51R3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnVHcm91cHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVDb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51VmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudVZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRUYWJzQXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRUYWJzQXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFRhYnNBdXRvSGlkZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFRhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudFRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgX21haW5jb250ZW50VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhcl9pbml0aWFsaXplcnMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudV9pbml0aWFsaXplcnMsIF9tYWlubWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudF9pbml0aWFsaXplcnMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlsb2dFbGVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpdml0eWxvZ0VsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlsb2dFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlsb2dFbGVtZW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5bG9nRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9ib3R0b21iYXJFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvdHRvbWJhckVsZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvdHRvbWJhckVsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm90dG9tYmFyRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm90dG9tYmFyRWxlbWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYm90dG9tYmFyVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21iYXJWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21iYXJWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbWJhclZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbWJhclZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWaWV3Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50Vmlldywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZpZXcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSRUFDVElWRSBPQlNFUlZBQkxFUyAoUnhKUyBTdWJqZWN0cykKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqIE9ic2VydmFibGUgc3RyZWFtIG9mIHZpZXcgbGlmZWN5Y2xlIGV2ZW50cyAqLwogICAgdmlld0xpZmVjeWNsZSQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAvKiogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdmlldyBjaGFuZ2UgZXZlbnRzICovCiAgICB2aWV3Q2hhbmdlZCQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAjYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIElOVEVSTkFMIFBST1BFUlRJRVMgKFByb3BlcnRpZXMgZm9yIGNoaWxkIGNvbXBvbmVudHMpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIGFwcGJhcgogICAgZ2V0IGFwcGJhck1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhck1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhck1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyQnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYXBwYmFyQnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhckJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJTaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGFwcGJhclVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyVXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJVc2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgYXBwYmFyUHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJQcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhcHBiYXJTaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhclNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI2FwcGJhclNob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb0ljb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3IgbWFpbm1lbnUKICAgIGdldCBtYWlubWVudUxvZ29JY29uKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVMb2dvSWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51TG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51TG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1haW5tZW51TG9nb1RleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVMb2dvVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVMb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudUdyb3VwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG1haW5tZW51Qm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Qm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51Qm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudVRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVNlbGVjdGVkVGFiKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3Igc2Vjb25kYXJ5bWVudQogICAgZ2V0IHNlY29uZGFyeW1lbnVIZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51SGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBzZWNvbmRhcnltZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBDb2xsYXBzZSBzdGF0ZXMKICAgIGdldCBtYWlubWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51Q29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIC8vIFZpc2liaWxpdHkgc3RhdGVzCiAgICBnZXQgbWFpbm1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNlY29uZGFyeW1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51VmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IG1haW5jb250ZW50VGFic1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY29udGVudFRhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29udGVudFRhYnNBdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50VGFic0F1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgYW5kIGNvdW50CiAgICBnZXQgYWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIFByb3BlcnRpZXMgZm9yIG1haW5jb250ZW50CiAgICBnZXQgbWFpbmNvbnRlbnRUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRUYWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIFJlZmVyZW5jZXMgdG8gY2hpbGQgY29tcG9uZW50cwogICAgZ2V0IGFwcGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5tZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51KHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbmNvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtYWluY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlsb2dFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBhY3Rpdml0eWxvZ0VsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eWxvZ0VsZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5bG9nRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgYm90dG9tYmFyRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21iYXJFbGVtZW50KHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21iYXJFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGJvdHRvbWJhclZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNib3R0b21iYXJWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm90dG9tYmFyVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAvLyBDdXJyZW50IHZpZXcgc3RhdGUKICAgIGdldCBjdXJyZW50VmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFZpZXcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBJbnRlcm5hbCBzZXJ2aWNlcwogICAgdmlld1JlZ2lzdHJ5ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IFZpZXdSZWdpc3RyeSgpKTsKICAgIHJvdXRlckNsZWFudXAgPSBudWxsOwogICAgc2VhcmNoQ2FsbGJhY2sgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgLm1haW5ncmlkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCAtIDI0cHgpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldCBkeW5hbWljYWxseSBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtY29sdW1ucyAwLjNzIGVhc2UsIGhlaWdodCAwLjNzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2JvdHRvbWJhci1oaWRkZW5dKSAubWFpbmdyaWQgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCk7CiAgICAgIH0KCiAgICAgIGRlZXMtYXBwdWktYm90dG9tYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogNDsKICAgICAgfQoKICAgICAgLyogWi1pbmRleCBsYXllcmluZyBmb3IgcHJvcGVyIHN0YWNraW5nICovCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbm1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAzOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLW1haW5jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgIH0KCiAgICAgIC8qIFZpZXcgY29udGFpbmVyIGZvciBkeW5hbWljYWxseSBsb2FkZWQgdmlld3MgKi8KICAgICAgLnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnZpZXctY29udGFpbmVyOmVtcHR5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmFwcGJhck1lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJzfQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yfQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9sc30KICAgICAgICAudXNlcj0ke3RoaXMuYXBwYmFyVXNlcn0KICAgICAgICAucHJvZmlsZU1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAuc2hvd1NlYXJjaD0ke3RoaXMuYXBwYmFyU2hvd1NlYXJjaH0KICAgICAgICAuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlPSR7dHJ1ZX0KICAgICAgICAuYWN0aXZpdHlMb2dDb3VudD0ke3RoaXMuYWN0aXZpdHlMb2dDb3VudH0KICAgICAgICAuYWN0aXZpdHlMb2dBY3RpdmU9JHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyQnJlYWRjcnVtYk5hdmlnYXRlKGUxMSl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyU2VhcmNoQ2xpY2soKX0KICAgICAgICBAc2VhcmNoLXF1ZXJ5PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hRdWVyeShlMTEpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl9CiAgICAgICAgQHByb2ZpbGUtbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgQGFjdGl2aXR5LXRvZ2dsZT0keygpID0+IHRoaXMudG9nZ2xlQWN0aXZpdHlMb2coKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5ncmlkIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyICR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPyAiMjgwcHgiIDogIjBweCJ9OyI+CiAgICAgICAgJHt0aGlzLm1haW5tZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgICAgICAgLmxvZ29JY29uPSR7dGhpcy5tYWlubWVudUxvZ29JY29ufQogICAgICAgICAgICAubG9nb1RleHQ9JHt0aGlzLm1haW5tZW51TG9nb1RleHR9CiAgICAgICAgICAgIC5tZW51R3JvdXBzPSR7dGhpcy5tYWlubWVudUdyb3Vwc30KICAgICAgICAgICAgLmJvdHRvbVRhYnM9JHt0aGlzLm1haW5tZW51Qm90dG9tVGFic30KICAgICAgICAgICAgLnRhYnM9JHt0aGlzLm1haW5tZW51VGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWlubWVudVNlbGVjdGVkVGFifQogICAgICAgICAgICAuY29sbGFwc2VkPSR7dGhpcy5tYWlubWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51VGFiU2VsZWN0KGUxMSl9CiAgICAgICAgICAgIEBjb2xsYXBzZS1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7dGhpcy5zZWNvbmRhcnltZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAgICAgICAuaGVhZGluZz0ke3RoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmd9CiAgICAgICAgICAgIC5ncm91cHM9JHt0aGlzLnNlY29uZGFyeW1lbnVHcm91cHN9CiAgICAgICAgICAgIC5zZWxlY3RlZEl0ZW09JHt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW19CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWR9CiAgICAgICAgICAgIEBpdGVtLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUl0ZW1TZWxlY3QoZTExKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgICAgICAudGFicz0ke3RoaXMubWFpbmNvbnRlbnRUYWJzfQogICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFifQogICAgICAgICAgLnNob3dUYWJzPSR7dGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZT0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZX0KICAgICAgICAgIC50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGR9CiAgICAgICAgICBAdGFiLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpfQogICAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYkNsb3NlKGUxMSl9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0idmlldy1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgPHNsb3QgbmFtZT0ibWFpbmNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2RlZXMtYXBwdWktbWFpbmNvbnRlbnQ+CiAgICAgICAgPGRlZXMtYXBwdWktYWN0aXZpdHlsb2cKICAgICAgICAgIGNsYXNzPSIke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID8gInZpc2libGUiIDogImhpZGRlbiJ9IgogICAgICAgID48L2RlZXMtYXBwdWktYWN0aXZpdHlsb2c+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuYm90dG9tYmFyVmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcj48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmFwcGJhciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLWFwcGJhciIpOwogICAgICB0aGlzLm1haW5tZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKTsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpOwogICAgICB0aGlzLm1haW5jb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKTsKICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpOwogICAgICB0aGlzLmJvdHRvbWJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1ib3R0b21iYXIiKTsKICAgICAgaWYgKHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50KSB7CiAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9nQ291bnQgPSBlbnRyaWVzLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLnZpZXdSZWdpc3RyeS5zZXRBcHB1aVJlZih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5yb3V0ZXJDbGVhbnVwKSB7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwKCk7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCk7CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLmNvbXBsZXRlKCk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEFQUCBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFwcCBiYXIgbWVudSBpdGVtcyAoRmlsZSwgRWRpdCwgVmlldywgZXRjLikKICAgICAqLwogICAgc2V0QXBwQmFyTWVudXMobWVudXMpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSBbLi4ubWVudXNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzaW5nbGUgYXBwIGJhciBtZW51IGJ5IG5hbWUKICAgICAqLwogICAgdXBkYXRlQXBwQmFyTWVudShuYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSB0aGlzLmFwcGJhck1lbnVJdGVtcy5tYXAoKG1lbnUpID0+IHsKICAgICAgICBpZiAoIm5hbWUiIGluIG1lbnUgJiYgbWVudS5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgICByZXR1cm4geyAuLi5tZW51LCAuLi51cGRhdGUgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1lbnU7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGJyZWFkY3J1bWJzIChzdHJpbmcgb3IgYXJyYXkpCiAgICAgKi8KICAgIHNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJzKSkgewogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBicmVhZGNydW1icy5qb2luKHRoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1icyA9IGJyZWFkY3J1bWJzOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCB0aGUgY3VycmVudCB1c2VyCiAgICAgKi8KICAgIHNldFVzZXIodXNlcikgewogICAgICB0aGlzLmFwcGJhclVzZXIgPSB1c2VyOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHByb2ZpbGUgZHJvcGRvd24gbWVudSBpdGVtcwogICAgICovCiAgICBzZXRQcm9maWxlTWVudUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IFsuLi5pdGVtc107CiAgICB9CiAgICAvKioKICAgICAqIFNldCBzZWFyY2ggYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2VhcmNoVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYXBwYmFyU2hvd1NlYXJjaCA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCB3aW5kb3cgY29udHJvbHMgdmlzaWJpbGl0eQogICAgICovCiAgICBzZXRXaW5kb3dDb250cm9sc1Zpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9scyA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGEgc2VhcmNoIGNhbGxiYWNrCiAgICAgKi8KICAgIG9uU2VhcmNoKGNhbGxiYWNrKSB7CiAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogTUFJTiBNRU5VCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogU2V0IHRoZSBlbnRpcmUgbWFpbiBtZW51IGNvbmZpZ3VyYXRpb24KICAgICAqLwogICAgc2V0TWFpbk1lbnUoY29uZmlnMykgewogICAgICBpZiAoY29uZmlnMy5sb2dvSWNvbiAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5sb2dvSWNvbjsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5sb2dvVGV4dCAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5sb2dvVGV4dDsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ncm91cHMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJvdHRvbVRhYnMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gWy4uLmNvbmZpZzMuYm90dG9tVGFic107CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGEgc3BlY2lmaWMgbWVudSBncm91cCBieSBuYW1lCiAgICAgKi8KICAgIHVwZGF0ZU1haW5NZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lID8geyAuLi5ncm91cCwgLi4udXBkYXRlIH0gOiBncm91cCk7CiAgICB9CiAgICAvKioKICAgICAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIHNwZWNpZmljIGdyb3VwCiAgICAgKi8KICAgIGFkZE1haW5NZW51SXRlbShncm91cE5hbWUsIHRhYjIpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zIHx8IFtdLCB0YWIyXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWVudSBpdGVtIGZyb20gYSBncm91cCBieSBrZXkKICAgICAqLwogICAgcmVtb3ZlTWFpbk1lbnVJdGVtKGdyb3VwTmFtZSwgdGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSB0aGlzLm1haW5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtIGJ5IGtleQogICAgICovCiAgICBzZXRNYWluTWVudVNlbGVjdGlvbih0YWJLZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLm1haW5tZW51R3JvdXBzKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IGdyb3VwLml0ZW1zPy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBib3R0b21UYWIgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICBpZiAoYm90dG9tVGFiKSB7CiAgICAgICAgdGhpcy5tYWlubWVudVNlbGVjdGVkVGFiID0gYm90dG9tVGFiOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCBtYWluIG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldE1haW5NZW51Q29sbGFwc2VkKGNvbGxhcHNlZCkgewogICAgICB0aGlzLm1haW5tZW51Q29sbGFwc2VkID0gY29sbGFwc2VkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgbWFpbiBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0TWFpbk1lbnVWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5tYWlubWVudVZpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgc2Vjb25kYXJ5IG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldFNlY29uZGFyeU1lbnVDb2xsYXBzZWQoY29sbGFwc2VkKSB7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCA9IGNvbGxhcHNlZDsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHNlY29uZGFyeSBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmlzaWJsZTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGNvbnRlbnQgdGFicyB2aXNpYmlsaXR5CiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCBjb250ZW50IHRhYnMgYXV0by1oaWRlIGJlaGF2aW9yCiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZSBhdXRvLWhpZGUgZmVhdHVyZQogICAgICogQHBhcmFtIHRocmVzaG9sZCAtIEhpZGUgd2hlbiB0YWJzLmxlbmd0aCA8PSB0aHJlc2hvbGQgKGRlZmF1bHQgMCA9IGhpZGUgd2hlbiBubyB0YWJzKQogICAgICovCiAgICBzZXRDb250ZW50VGFic0F1dG9IaWRlKGVuYWJsZWQsIHRocmVzaG9sZCA9IDApIHsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlID0gZW5hYmxlZDsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkID0gdGhyZXNob2xkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYSBiYWRnZSBvbiBhIG1haW4gbWVudSBpdGVtCiAgICAgKi8KICAgIHNldE1haW5NZW51QmFkZ2UodGFiS2V5LCBiYWRnZSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gdGFiMi5rZXkgPT09IHRhYktleSA/IHsgLi4udGFiMiwgYmFkZ2UgfSA6IHRhYjIpCiAgICAgIH0pKTsKICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYSBiYWRnZSBmcm9tIGEgbWFpbiBtZW51IGl0ZW0KICAgICAqLwogICAgY2xlYXJNYWluTWVudUJhZGdlKHRhYktleSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gewogICAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgICAgY29uc3QgeyBiYWRnZSwgLi4ucmVzdCB9ID0gdGFiMjsKICAgICAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGFiMjsKICAgICAgICB9KQogICAgICB9KSk7CiAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gdGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKCh0YWIyKSA9PiB7CiAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICByZXR1cm4gcmVzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0pOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBTRUNPTkRBUlkgTUVOVQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kYXJ5IG1lbnUgY29uZmlndXJhdGlvbgogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51KGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMuaGVhZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IGNvbmZpZzMuaGVhZGluZzsKICAgICAgfQogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzcGVjaWZpYyBzZWNvbmRhcnkgbWVudSBncm91cAogICAgICovCiAgICB1cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IGdyb3VwTmFtZSA/IHsgLi4uZ3JvdXAsIC4uLnVwZGF0ZSB9IDogZ3JvdXApOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gaXRlbSB0byBhIHNlY29uZGFyeSBtZW51IGdyb3VwCiAgICAgKi8KICAgIGFkZFNlY29uZGFyeU1lbnVJdGVtKGdyb3VwTmFtZSwgaXRlbSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zLCBpdGVtXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHRoZSBzZWxlY3RlZCBzZWNvbmRhcnkgbWVudSBpdGVtIGJ5IGtleSAoZm9yIHRhYiBpdGVtcyBvbmx5KQogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKGl0ZW1LZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpIHsKICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXAuaXRlbXMuZmluZCgoaTExKSA9PiAia2V5IiBpbiBpMTEgJiYgaTExLmtleSA9PT0gaXRlbUtleSk7CiAgICAgICAgaWYgKGl0ZW0gJiYgKCEoInR5cGUiIGluIGl0ZW0pIHx8IGl0ZW0udHlwZSA9PT0gInRhYiIgfHwgaXRlbS50eXBlID09PSB2b2lkIDApKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgc2Vjb25kYXJ5IG1lbnUKICAgICAqLwogICAgY2xlYXJTZWNvbmRhcnlNZW51KCkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gIiI7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUdyb3VwcyA9IFtdOwogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSB2b2lkIDA7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IENPTlRFTlQgVEFCUwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgY29udGVudCB0YWJzCiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzKHRhYnMpIHsKICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSBbLi4udGFic107CiAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYikgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRhYnNbMF07CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogQWRkIGEgY29udGVudCB0YWIKICAgICAqLwogICAgYWRkQ29udGVudFRhYih0YWIyKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gWy4uLnRoaXMubWFpbmNvbnRlbnRUYWJzLCB0YWIyXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgY29udGVudCB0YWIgYnkga2V5CiAgICAgKi8KICAgIHJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdGhpcy5tYWluY29udGVudFRhYnMuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpOwogICAgICBpZiAodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXkgPT09IHRhYktleSkgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRoaXMubWFpbmNvbnRlbnRUYWJzWzBdOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNlbGVjdCBhIGNvbnRlbnQgdGFiIGJ5IGtleQogICAgICovCiAgICBzZWxlY3RDb250ZW50VGFiKHRhYktleSkgewogICAgICBjb25zdCB0YWIyID0gdGhpcy5tYWluY29udGVudFRhYnMuZmluZCgodDkpID0+IHQ5LmtleSA9PT0gdGFiS2V5KTsKICAgICAgaWYgKHRhYjIpIHsKICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRlbnQgdGFiCiAgICAgKi8KICAgIGdldFNlbGVjdGVkQ29udGVudFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYjsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogQUNUSVZJVFkgTE9HCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogR2V0IHRoZSBhY3Rpdml0eSBsb2cgQVBJCiAgICAgKi8KICAgIGdldCBhY3Rpdml0eUxvZygpIHsKICAgICAgaWYgKCF0aGlzLmFjdGl2aXR5bG9nRWxlbWVudCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhZGQ6IChlbnRyeSkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZChlbnRyeSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uYWRkTWFueShlbnRyaWVzKSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2xlYXI6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5jbGVhcigpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRFbnRyaWVzOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uZ2V0RW50cmllcygpIHx8IFtdLAogICAgICAgICAgZmlsdGVyOiAoY3JpdGVyaWEpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5maWx0ZXIoY3JpdGVyaWEpIHx8IFtdLAogICAgICAgICAgc2VhcmNoOiAocXVlcnkpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocXVlcnkpIHx8IFtdCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGFkZDogKGVudHJ5KSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGQoZW50cnkpLAogICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGRNYW55KGVudHJpZXMpLAogICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLAogICAgICAgIGdldEVudHJpZXM6ICgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmdldEVudHJpZXMoKSwKICAgICAgICBmaWx0ZXI6IChjcml0ZXJpYSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZmlsdGVyKGNyaXRlcmlhKSwKICAgICAgICBzZWFyY2g6IChxdWVyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKHF1ZXJ5KQogICAgICB9OwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0QWN0aXZpdHlMb2dWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgdG9nZ2xlQWN0aXZpdHlMb2coKSB7CiAgICAgIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID0gIXRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgc3RhdGUKICAgICAqLwogICAgZ2V0QWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEJPVFRPTSBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBHZXQgdGhlIGJvdHRvbSBiYXIgQVBJIGZvciB3aWRnZXQvYWN0aW9uIG1hbmFnZW1lbnQKICAgICAqLwogICAgZ2V0IGJvdHRvbUJhcigpIHsKICAgICAgaWYgKCF0aGlzLmJvdHRvbWJhckVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZFdpZGdldCh3aWRnZXQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSk7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlV2lkZ2V0OiAoaWQpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8ucmVtb3ZlV2lkZ2V0KGlkKSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KGlkKSwKICAgICAgICAgIGNsZWFyV2lkZ2V0czogKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhcldpZGdldHMoKSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZEFjdGlvbihhY3Rpb24pKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZW1vdmVBY3Rpb246IChpZCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5yZW1vdmVBY3Rpb24oaWQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbGVhckFjdGlvbnM6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJBY3Rpb25zKCkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBhZGRXaWRnZXQ6ICh3aWRnZXQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5hZGRXaWRnZXQod2lkZ2V0KSwKICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQudXBkYXRlV2lkZ2V0KGlkLCB1cGRhdGUpLAogICAgICAgIHJlbW92ZVdpZGdldDogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KGlkKSwKICAgICAgICBnZXRXaWRnZXQ6IChpZCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmdldFdpZGdldChpZCksCiAgICAgICAgY2xlYXJXaWRnZXRzOiAoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuY2xlYXJXaWRnZXRzKCksCiAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKGFjdGlvbiksCiAgICAgICAgcmVtb3ZlQWN0aW9uOiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5yZW1vdmVBY3Rpb24oaWQpLAogICAgICAgIGNsZWFyQWN0aW9uczogKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyQWN0aW9ucygpCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBib3R0b20gYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0Qm90dG9tQmFyVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYm90dG9tYmFyVmlzaWJsZSA9IHZpc2libGU7CiAgICAgIGlmICghdmlzaWJsZSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIiwgIiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGJvdHRvbSBiYXIgdmlzaWJpbGl0eSBzdGF0ZQogICAgICovCiAgICBnZXRCb3R0b21CYXJWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5ib3R0b21iYXJWaXNpYmxlOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBOQVZJR0FUSU9OCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogTmF2aWdhdGUgdG8gYSB2aWV3IGJ5IElECiAgICAgKi8KICAgIGFzeW5jIG5hdmlnYXRlVG9WaWV3KHZpZXdJZCwgcGFyYW1zMikgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgIGlmICghdmlldykgewogICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IG5hdmlnYXRlIHRvIHVua25vd24gdmlldzogJHt2aWV3SWR9YCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGNhbkxlYXZlID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuY2FuTGVhdmVDdXJyZW50VmlldygpOwogICAgICBpZiAoY2FuTGVhdmUgIT09IHRydWUpIHsKICAgICAgICBpZiAodHlwZW9mIGNhbkxlYXZlID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oY2FuTGVhdmUpOwogICAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLm5leHQoeyB0eXBlOiAibG9hZGluZyIsIHZpZXdJZCB9KTsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3KHZpZXcsIHBhcmFtczIpOwogICAgICAgIGNvbnN0IHJvdXRlID0gdmlldy5yb3V0ZSB8fCB2aWV3SWQ7CiAgICAgICAgY29uc3QgbmV3SGFzaCA9IGAjJHtyb3V0ZX1gOwogICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gbmV3SGFzaCkgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgdmlld0lkIH0sICIiLCBuZXdIYXNoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsgdHlwZTogImxvYWRFcnJvciIsIHZpZXdJZCwgZXJyb3IgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCB2aWV3CiAgICAgKi8KICAgIGdldEN1cnJlbnRWaWV3KCkgewogICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlldzsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGFjY2VzcyB0byB0aGUgdmlldyByZWdpc3RyeSAoZm9yIGFkdmFuY2VkIHVzZSkKICAgICAqLwogICAgZ2V0Vmlld1JlZ2lzdHJ5KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3UmVnaXN0cnk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgYXBwIHNoZWxsIHdpdGggYSB1bmlmaWVkIGNvbmZpZyBvYmplY3QKICAgICAqLwogICAgY29uZmlndXJlKGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMudmlld3MpIHsKICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5jbGVhcigpOwogICAgICAgIHRoaXMudmlld1JlZ2lzdHJ5LnJlZ2lzdGVyQWxsKGNvbmZpZzMudmlld3MpOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJyYW5kaW5nKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5icmFuZGluZy5sb2dvSWNvbiB8fCAiIjsKICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLmJyYW5kaW5nLmxvZ29UZXh0IHx8ICIiOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmFwcEJhcikgewogICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gY29uZmlnMy5hcHBCYXIubWVudUl0ZW1zIHx8IFtdOwogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1icyB8fCAiIjsKICAgICAgICB0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1iU2VwYXJhdG9yIHx8ICIgPiAiOwogICAgICAgIHRoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzID0gY29uZmlnMy5hcHBCYXIuc2hvd1dpbmRvd0NvbnRyb2xzID8/IHRydWU7CiAgICAgICAgdGhpcy5hcHBiYXJTaG93U2VhcmNoID0gY29uZmlnMy5hcHBCYXIuc2hvd1NlYXJjaCA/PyBmYWxzZTsKICAgICAgICB0aGlzLmFwcGJhclVzZXIgPSBjb25maWczLmFwcEJhci51c2VyOwogICAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IGNvbmZpZzMuYXBwQmFyLnByb2ZpbGVNZW51SXRlbXMgfHwgW107CiAgICAgIH0KICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUpIHsKICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucykgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZzMubWFpbk1lbnUuZ3JvdXBzKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gY29uZmlnMy5tYWluTWVudS5ncm91cHM7CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWczLm1haW5NZW51LmxvZ29JY29uKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb0ljb24gPSBjb25maWczLm1haW5NZW51LmxvZ29JY29uOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dCkgewogICAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tVGFicykgewogICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSBjb25maWczLm1haW5NZW51LmJvdHRvbVRhYnM7CiAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IHRoaXMuYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tSXRlbXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIpIHsKICAgICAgICB0aGlzLnNldEJvdHRvbUJhclZpc2libGUoY29uZmlnMy5ib3R0b21CYXIudmlzaWJsZSA/PyB0cnVlKTsKICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cykgewogICAgICAgICAgY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHsKICAgICAgICAgICAgdGhpcy5ib3R0b21CYXIuYWRkV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMpIHsKICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYm90dG9tQmFyLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihjb25maWczKTsKICAgICAgaWYgKGNvbmZpZzMub25WaWV3Q2hhbmdlKSB7CiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgY29uZmlnMy5vblZpZXdDaGFuZ2UoZXZlbnQudmlld0lkLCBldmVudC52aWV3KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5vblNlYXJjaCkgewogICAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjb25maWczLm9uU2VhcmNoOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmRlZmF1bHRWaWV3KSB7CiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhjb25maWczLmRlZmF1bHRWaWV3KTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIHNldHVwUm91dGVySW50ZWdyYXRpb24oY29uZmlnMykgewogICAgICBjb25zdCBoYW5kbGVIYXNoQ2hhbmdlID0gKCkgPT4gewogICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgICBpZiAoIWhhc2gpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoaGFzaCk7CiAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsIGhhbmRsZUhhc2hDaGFuZ2UpOwogICAgICB0aGlzLnJvdXRlckNsZWFudXAgPSAoKSA9PiB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgfTsKICAgICAgY29uc3QgY3VycmVudEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgaWYgKGN1cnJlbnRIYXNoKSB7CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoY3VycmVudEhhc2gpOwogICAgICAgIGlmIChtYXRjaDIpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyksIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKSB7CiAgICAgIGlmICghY29uZmlnMy5tYWluTWVudT8uc2VjdGlvbnMpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+ICh7CiAgICAgICAgbmFtZTogc2VjdGlvbi5uYW1lLAogICAgICAgIGl0ZW1zOiBzZWN0aW9uLnZpZXdzLm1hcCgodmlld0lkKSA9PiB7CiAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGtleTogdmlldy5pZCwKICAgICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyh2aWV3SWQpLAogICAgICAgICAgICBiYWRnZTogdmlldy5iYWRnZQogICAgICAgICAgfTsKICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikKICAgICAgfSkpOwogICAgfQogICAgYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKHZpZXdJZCkgPT4gewogICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTsKICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAga2V5OiB2aWV3LmlkLAogICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMubmF2aWdhdGVUb1ZpZXcodmlld0lkKQogICAgICAgIH07CiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTsKICAgIH0KICAgIGFzeW5jIGxvYWRWaWV3KHZpZXcsIHBhcmFtczIpIHsKICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdGhpcy5jdXJyZW50VmlldzsKICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7CiAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSB0aGlzLm1haW5jb250ZW50Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKSB8fCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3LWNvbnRhaW5lciIpOwogICAgICBpZiAodmlld0NvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuYWN0aXZhdGVWaWV3KHZpZXcuaWQsIHZpZXdDb250YWluZXIsIHBhcmFtczIpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsKICAgICAgICAgICAgdHlwZTogImFjdGl2YXRlZCIsCiAgICAgICAgICAgIHZpZXdJZDogdmlldy5pZCwKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudDQsCiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh2aWV3LnNlY29uZGFyeU1lbnUpIHsKICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2aWV3LnNlY29uZGFyeU1lbnU7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IHZpZXcubmFtZTsKICAgICAgfQogICAgICBpZiAodmlldy5jb250ZW50VGFicykgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdmlldy5jb250ZW50VGFiczsKICAgICAgfQogICAgICB0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHZpZXcuaWQpOwogICAgICBjb25zdCBjaGFuZ2VFdmVudCA9IHsKICAgICAgICB2aWV3SWQ6IHZpZXcuaWQsCiAgICAgICAgdmlldywKICAgICAgICBwcmV2aW91c1ZpZXcsCiAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgIH07CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLm5leHQoY2hhbmdlRXZlbnQpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LWNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IGNoYW5nZUV2ZW50LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFVkVOVCBIQU5ETEVSUyAoSW50ZXJuYWwpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1icmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItc2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkoZTExKSB7CiAgICAgIGlmICh0aGlzLnNlYXJjaENhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5zZWFyY2hDYWxsYmFjayhlMTEuZGV0YWlsLnF1ZXJ5KTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtcXVlcnkiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItdXNlci1tZW51LW9wZW4iLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMubWFpbm1lbnVTZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS10YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBlMTEuZGV0YWlsLml0ZW07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShlMTEpIHsKICAgICAgdGhpcy5tYWlubWVudUNvbGxhcHNlZCA9IGUxMS5kZXRhaWwuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQgPSBlMTEuZGV0YWlsLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Vjb25kYXJ5bWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gZTExLmRldGFpbC50YWI7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVDb250ZW50VGFiQ2xvc2UoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLWNsb3NlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1leGl0L2RlZXMtYnV0dG9uLWV4aXQuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTQzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbkV4aXQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWJ1dHRvbi1leGl0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbkV4aXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU0Myh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uRXhpdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWJ1dHRvbi1leGl0PjwvZGVlcy1idXR0b24tZXhpdD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3NpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAyNCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3R5bGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKCiAgICBgCiAgICBdKTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6ICR7dGhpcy5zaXplfXB4OwogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuc2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpcnN0TGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2Vjb25kTGluZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNCdXR0b25FeGl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzEgPSAoKSA9PiB7CiAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aG91dCBsYWJlbHMgZm9yIHNpbXBsZSBncm91cGluZzwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TGFiZWxlZCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIGRlc2NyaXB0aXZlIGxhYmVsczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlZpZXcgTW9kZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5HcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DYXJkczwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+TXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB1c2VkIHRvZ2V0aGVyPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TmV0d29yazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TYWxlczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlRpbWUgUmFuZ2U6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPjFIPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj4yNEg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+N0Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MzBEPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FeHBvcnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VmVydGljYWwgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aCB2ZXJ0aWNhbCBsYXlvdXQ8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAyNHB4OyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCIgbGFiZWw9Ik5hdmlnYXRpb246Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhc2hib2FyZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+QW5hbHl0aWNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlcG9ydHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGRpcmVjdGlvbj0idmVydGljYWwiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RWRpdCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRlbGV0ZSBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPk1peGVkIEJ1dHRvbiBUeXBlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRpZmZlcmVudCBidXR0b24gdHlwZXMgd2l0aGluIGdyb3VwczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlN0YXR1czoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InN1Y2Nlc3MiPkFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+UGVuZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGFuZ2VyIj5JbmFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9kZWVzLWJ1dHRvbi1ncm91cC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCdXR0b25Hcm91cCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uLWdyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCdXR0b25Hcm91cDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZGlyZWN0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ0KHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQodGhpcywgbnVsbCwgX2RpcmVjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXJlY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpcmVjdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXJlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXJlY3Rpb25faW5pdGlhbGl6ZXJzLCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uR3JvdXAyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQnV0dG9uIjsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDUodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgZGlyZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlyZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlyZWN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQ1KHRoaXMsIF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncm91cC52ZXJ0aWNhbCAubGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8c3BhbiBjbGFzcz0ibGFiZWwiPiR7dGhpcy5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0J1dHRvbkdyb3VwMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzIgPSAoKSA9PiB7CiAgY29uc3QgaW5pdGlhbERhdGFzZXRzID0gewogICAgc3lzdGVtOiB7CiAgICAgIGxhYmVsOiAiU3lzdGVtIFVzYWdlICglKSIsCiAgICAgIHNlcmllczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDUFUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDI1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDI4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDM1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogMzIgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDM4IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJNZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDQ1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ2IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUyIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogNTAgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDU1IH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0KICB9OwogIGNvbnN0IGluaXRpYWxGb3JtYXR0ZXJzID0gewogICAgc3lzdGVtOiAodmFsKSA9PiBgJHt2YWx9JWAKICB9OwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNtYWluLWNoYXJ0Iik7CiAgICBjb25zdCBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Nvbm5lY3Rpb25zLWNoYXJ0Iik7CiAgICBsZXQgaW50ZXJ2YWxJZDsKICAgIGxldCBjb25uZWN0aW9uc0ludGVydmFsSWQ7CiAgICBsZXQgY3VycmVudERhdGFzZXQgPSAic3lzdGVtIjsKICAgIGNvbnN0IGZvcm1hdHRlcnMyID0gewogICAgICBzeXN0ZW06ICh2YWwpID0+IGAke3ZhbH0lYCwKICAgICAgbmV0d29yazogKHZhbCkgPT4gYCR7dmFsfSBNYnBzYCwKICAgICAgc2FsZXM6ICh2YWwpID0+IGAkJHt2YWwudG9Mb2NhbGVTdHJpbmcoKX1gCiAgICB9OwogICAgY29uc3QgVElNRV9XSU5ET1cgPSAyICogNjAgKiAxZTM7CiAgICBjb25zdCBVUERBVEVfSU5URVJWQUwgPSAxZTM7CiAgICBjb25zdCBEQVRBX1BPSU5UX0lOVEVSVkFMID0gNWUzOwogICAgbGV0IHByZXZpb3VzVmFsdWVzID0gewogICAgICBjcHU6IDMwLAogICAgICBtZW1vcnk6IDUwLAogICAgICBkb3dubG9hZDogMTUwLAogICAgICB1cGxvYWQ6IDMwLAogICAgICBjb25uZWN0aW9uczogMTUwCiAgICB9OwogICAgY29uc3QgZ2VuZXJhdGVJbml0aWFsRGF0YSA9IChiYXNlVmFsdWUsIHZhcmlhbmNlLCBpbnRlcnZhbDMgPSBEQVRBX1BPSU5UX0lOVEVSVkFMKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHBvaW50Q291bnQgPSBNYXRoLmZsb29yKFRJTUVfV0lORE9XIC8gaW50ZXJ2YWwzKTsKICAgICAgZm9yIChsZXQgaTExID0gcG9pbnRDb3VudDsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IG5ldyBEYXRlKG5vdzIgLSBpMTEgKiBpbnRlcnZhbDMpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYmFzZVZhbHVlICsgKE1hdGgucmFuZG9tKCkgLSAwLjUpICogdmFyaWFuY2U7CiAgICAgICAgZGF0YS5wdXNoKHsgeDogdGltZXN0YW1wMiwgeTogTWF0aC5yb3VuZCh2YWx1ZTIpIH0pOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfTsKICAgIGNvbnN0IGRhdGFzZXRzID0gewogICAgICBzeXN0ZW06IHsKICAgICAgICBsYWJlbDogIlN5c3RlbSBVc2FnZSAoJSkiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQ1BVIiwKICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5jcHUsIDEwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk1lbW9yeSIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA4KQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgbmV0d29yazogewogICAgICAgIGxhYmVsOiAiTmV0d29yayBUcmFmZmljIChNYnBzKSIsCiAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuZG93bmxvYWQsIDMwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlVwbG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMudXBsb2FkLCAxMCkKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHNhbGVzOiB7CiAgICAgICAgbGFiZWw6ICJTYWxlcyBBbmFseXRpY3MiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUmV2ZW51ZSIsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAxIiwgeTogNDVlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDIiLCB5OiA1MmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMyIsIHk6IDQ4ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA0IiwgeTogNjFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDUiLCB5OiA1OGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNiIsIHk6IDY1ZTMgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUHJvZml0IiwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDEiLCB5OiAxMmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMiIsIHk6IDE0ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAzIiwgeTogMTFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDQiLCB5OiAxOGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNSIsIHk6IDE2ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA2IiwgeTogMmU0IH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGdldE5leHRWYWx1ZSA9IChjdXJyZW50LCBtaW4zLCBtYXgzLCBtYXhDaGFuZ2UgPSA1KSA9PiB7CiAgICAgIGNvbnN0IGNoYW5nZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG1heENoYW5nZSAqIDI7CiAgICAgIGxldCBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBjaGFuZ2U7CiAgICAgIGNvbnN0IGNlbnRlciA9IChtaW4zICsgbWF4MykgLyAyOwogICAgICBjb25zdCBwcmVzc3VyZSA9IChjZW50ZXIgLSBuZXdWYWx1ZSkgKiAwLjE7CiAgICAgIG5ld1ZhbHVlICs9IHByZXNzdXJlOwogICAgICBuZXdWYWx1ZSA9IE1hdGgubWF4KG1pbjMsIE1hdGgubWluKG1heDMsIG5ld1ZhbHVlKSk7CiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTsKICAgIH07CiAgICBsZXQgbGFzdERhdGFQb2ludFRpbWUgPSBEYXRlLm5vdygpOwogICAgbGV0IGNvbm5lY3Rpb25zTGFzdFVwZGF0ZSA9IERhdGUubm93KCk7CiAgICBjb25zdCBhZGRSZWFsdGltZURhdGEgPSAoKSA9PiB7CiAgICAgIGlmICghY2hhcnRFbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHNob3VsZEFkZFBvaW50ID0gbm93MiAtIGxhc3REYXRhUG9pbnRUaW1lID49IERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICAgIGlmIChzaG91bGRBZGRQb2ludCkgewogICAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gbm93MjsKICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICAgIGlmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNwdSA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy5jcHUsIDIwLCA1MCwgMyk7CiAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgPSBnZXROZXh0VmFsdWUocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA0MCwgNzAsIDIpOwogICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgIGluZGV4MiA9PT0gMCA/IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5jcHUgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREYXRhc2V0ID09PSAibmV0d29yayIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLmRvd25sb2FkLCAxMDAsIDIwMCwgMTApOwogICAgICAgICAgcHJldmlvdXNWYWx1ZXMudXBsb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLnVwbG9hZCwgMjAsIDUwLCA1KTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZXMgPSBjaGFydEVsZW1lbnQuY2hhcnRTZXJpZXMubWFwKChzZXJpZXMsIGluZGV4MikgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAuLi5zZXJpZXMuZGF0YSwKICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuZG93bmxvYWQgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy51cGxvYWQgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB1cGRhdGVDb25uZWN0aW9ucyA9ICgpID0+IHsKICAgICAgaWYgKCFjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBjaGFuZ2UgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMSkgLSAxMDsKICAgICAgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgPSBNYXRoLm1heCg1MCwgTWF0aC5taW4oMzAwLCBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyArIGNoYW5nZSkpOwogICAgICBjb25zdCBjdXJyZW50U2VyaWVzID0gY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuY2hhcnRTZXJpZXM7CiAgICAgIGNvbnN0IG5ld0RhdGEgPSBbewogICAgICAgIG5hbWU6IGN1cnJlbnRTZXJpZXNbMF0/Lm5hbWUgfHwgIkNvbm5lY3Rpb25zIiwKICAgICAgICBkYXRhOiBbCiAgICAgICAgICAuLi5jdXJyZW50U2VyaWVzWzBdPy5kYXRhIHx8IFtdLAogICAgICAgICAgeyB4OiBuZXdUaW1lc3RhbXAsIHk6IHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zIH0KICAgICAgICBdCiAgICAgIH1dOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC51cGRhdGVTZXJpZXMobmV3RGF0YSwgZmFsc2UpOwogICAgfTsKICAgIGNvbnN0IHN3aXRjaERhdGFzZXQgPSAobmFtZSkgPT4gewogICAgICBjdXJyZW50RGF0YXNldCA9IG5hbWU7CiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuYW1lXTsKICAgICAgY2hhcnRFbGVtZW50LmxhYmVsID0gZGF0YXNldC5sYWJlbDsKICAgICAgY2hhcnRFbGVtZW50LnNlcmllcyA9IGRhdGFzZXQuc2VyaWVzOwogICAgICBjaGFydEVsZW1lbnQueUF4aXNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzMltuYW1lXTsKICAgICAgaWYgKG5hbWUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNNYXggPSAxMDA7CiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJkeW5hbWljIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNTY2FsaW5nID0gImR5bmFtaWMiOwogICAgICB9CiAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gRGF0ZS5ub3coKSAtIERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICB9OwogICAgY29uc3Qgc3RhcnRSZWFsdGltZSA9ICgpID0+IHsKICAgICAgaWYgKCFpbnRlcnZhbElkICYmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgfHwgY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikpIHsKICAgICAgICBjaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gdHJ1ZTsKICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IGFkZFJlYWx0aW1lRGF0YSgpLCBEQVRBX1BPSU5UX0lOVEVSVkFMKTsKICAgICAgfQogICAgICBpZiAoIWNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IHRydWU7CiAgICAgICAgY29ubmVjdGlvbnNJbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHVwZGF0ZUNvbm5lY3Rpb25zKCksIFVQREFURV9JTlRFUlZBTCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmVhbHRpbWUgPSAoKSA9PiB7CiAgICAgIGlmIChpbnRlcnZhbElkKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CiAgICAgICAgaW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjb25uZWN0aW9uc0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChjb25uZWN0aW9uc0ludGVydmFsSWQpOwogICAgICAgIGNvbm5lY3Rpb25zSW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCByYW5kb21pemVEYXRhID0gKCkgPT4gewogICAgICBpZiAoY3VycmVudERhdGFzZXQgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMuY3B1ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDg1IDogMjU7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMubWVtb3J5ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDgwIDogNDU7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDI1MCA6IDEwMDsKICAgICAgICBwcmV2aW91c1ZhbHVlcy51cGxvYWQgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gODAgOiAyMDsKICAgICAgfQogICAgICBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyAyODAgOiA4MDsKICAgICAgbGFzdERhdGFQb2ludFRpbWUgPSAwOwogICAgICBjb25uZWN0aW9uc0xhc3RVcGRhdGUgPSAwOwogICAgfTsKICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICBpZiAodGV4dDkgPT09ICJTeXN0ZW0gVXNhZ2UiKSB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgic3lzdGVtIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiTmV0d29yayBUcmFmZmljIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoIm5ldHdvcmsiKSk7CiAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoInNhbGVzIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RhcnQgTGl2ZSIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzdGFydFJlYWx0aW1lKCkpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RvcCBMaXZlIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0b3BSZWFsdGltZSgpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlNwaWtlIFZhbHVlcyIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiByYW5kb21pemVEYXRhKCkpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHVwZGF0ZUJ1dHRvblN0YXRlcyA9ICgpID0+IHsKICAgICAgY29uc3QgYnV0dG9uczIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMyLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgICAgaWYgKHRleHQ5ID09PSAiU3lzdGVtIFVzYWdlIikgewogICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIiA/ICJoaWdobGlnaHRlZCIgOiAibm9ybWFsIjsKICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJzYWxlcyIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBjaGFydEVsZW1lbnQucm9sbGluZ1dpbmRvdyA9IFRJTUVfV0lORE9XOwogICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgIGNoYXJ0RWxlbWVudC55QXhpc01heCA9IDEwMDsKICAgIGNoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgIH0sIDEwMCk7CiAgICBjb25zdCBvcmlnaW5hbFN3aXRjaERhdGFzZXQgPSBzd2l0Y2hEYXRhc2V0OwogICAgY29uc3Qgc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUgPSAobmFtZSkgPT4gewogICAgICBvcmlnaW5hbFN3aXRjaERhdGFzZXQobmFtZSk7CiAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlcygpOwogICAgfTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIGlmICh0ZXh0OSA9PT0gIlN5c3RlbSBVc2FnZSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzeXN0ZW0iKSk7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUoInN5c3RlbSIpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJuZXR3b3JrIikpOwogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXRXaXRoQnV0dG9uVXBkYXRlKCJuZXR3b3JrIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSgic2FsZXMiKSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50KSB7CiAgICAgIGNvbnN0IGluaXRpYWxDb25uZWN0aW9uc0RhdGEgPSBnZW5lcmF0ZUluaXRpYWxEYXRhKHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zLCAzMCwgVVBEQVRFX0lOVEVSVkFMKTsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuc2VyaWVzID0gW3sKICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbnMiLAogICAgICAgIGRhdGE6IGluaXRpYWxDb25uZWN0aW9uc0RhdGEKICAgICAgfV07CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJvbGxpbmdXaW5kb3cgPSBUSU1FX1dJTkRPVzsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJmaXhlZCI7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzTWF4ID0gMzUwOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hhcnQtY29udGFpbmVyIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke2luaXRpYWxEYXRhc2V0cy5zeXN0ZW0ubGFiZWx9CiAgICAgICAgICAuc2VyaWVzPSR7aW5pdGlhbERhdGFzZXRzLnN5c3RlbS5zZXJpZXN9CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHtpbml0aWFsRm9ybWF0dGVycy5zeXN0ZW19CiAgICAgICAgPjwvZGVlcy1jaGFydC1hcmVhPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7Ij4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0iY29ubmVjdGlvbnMtY2hhcnQiCiAgICAgICAgICAubGFiZWw9JHsiQWN0aXZlIENvbm5lY3Rpb25zIn0KICAgICAgICAgIC5zZXJpZXM9JHtbewogICAgbmFtZTogIkNvbm5lY3Rpb25zIiwKICAgIGRhdGE6IFtdCiAgfV19CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHsodmFsKSA9PiBgJHt2YWx9YH0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWFyZWE+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgUmVhbC10aW1lIG1vbml0b3Jpbmcgd2l0aCAyLW1pbnV0ZSByb2xsaW5nIHdpbmRvdyDigKIgCiAgICAgICAgVXBkYXRlcyBldmVyeSBzZWNvbmQgd2l0aCBzbW9vdGggdmFsdWUgdHJhbnNpdGlvbnMg4oCiIAogICAgICAgIENsaWNrICdTcGlrZSBWYWx1ZXMnIHRvIHNpbXVsYXRlIGxvYWQgc3Bpa2VzCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBjaGFydEFyZWFTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CiAgICAgIC5jaGFydENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIHBhZGRpbmc6IDQ0cHggMTZweCAxNnB4IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAvKiBFbnN1cmUgY29udGFpbmVyIGRvZXNuJ3Qgb3ZlcnJpZGUgY2hhcnQgYmFja2dyb3VuZCAqLwogICAgICB9CiAgICAgIAogICAgICAvKiBBcGV4Q2hhcnRzIHRoZW1lIG92ZXJyaWRlcyAqLwogICAgICAuYXBleGNoYXJ0cy1jYW52YXMgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWlubmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1ncmFwaGljYWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlckNoYXJ0QXJlYSA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydFRpdGxlIj4ke2NvbXBvbmVudC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NoYXJ0QXJlYSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hhcnQtYXJlYSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NoYXJ0X2RlY29yYXRvcnM7CiAgbGV0IF9jaGFydF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NoYXJ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9zZXJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZXJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2RlY29yYXRvcnM7CiAgbGV0IF95QXhpc0Zvcm1hdHRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnM7CiAgbGV0IF9yb2xsaW5nV2luZG93X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVhbHRpbWVNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9yZWFsdGltZU1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzU2NhbGluZ19kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1Njcm9sbEludGVydmFsX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoYXJ0QXJlYTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jaGFydF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX3Nlcmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfeUF4aXNGb3JtYXR0ZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfcm9sbGluZ1dpbmRvd19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF95QXhpc01heF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2NoYXJ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNoYXJ0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjaGFydCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jaGFydCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2hhcnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCBfY2hhcnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0NSh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9zZXJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZXJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VyaWVzX2luaXRpYWxpemVycywgX3Nlcmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc0Zvcm1hdHRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc0Zvcm1hdHRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNGb3JtYXR0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNGb3JtYXR0ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzRm9ybWF0dGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycywgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX3JvbGxpbmdXaW5kb3dfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9sbGluZ1dpbmRvdyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm9sbGluZ1dpbmRvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb2xsaW5nV2luZG93LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb2xsaW5nV2luZG93ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9yZWFsdGltZU1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVhbHRpbWVNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZWFsdGltZU1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVhbHRpbWVNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWFsdGltZU1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVhbHRpbWVNb2RlX2luaXRpYWxpemVycywgX3JlYWx0aW1lTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNTY2FsaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ5QXhpc1NjYWxpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNTY2FsaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai55QXhpc1NjYWxpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgX3lBeGlzU2NhbGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc01heF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc01heCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNNYXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNNYXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzTWF4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzTWF4X2luaXRpYWxpemVycywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvU2Nyb2xsSW50ZXJ2YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGxJbnRlcnZhbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvU2Nyb2xsSW50ZXJ2YWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbEludGVydmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkNoYXJ0IjsKICAgICNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gaW5zdGFuY2UKICAgIGdldCBjaGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2hhcnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9jaGFydF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgIlVudGl0bGVkIENoYXJ0IikpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3Nlcmllc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE92ZXJyaWRlIGdldHRlciB0byByZXR1cm4gaW50ZXJuYWwgY2hhcnQgZGF0YQogICAgZ2V0IGNoYXJ0U2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YS5sZW5ndGggPiAwID8gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YSA6IHRoaXMuc2VyaWVzOwogICAgfQogICAgI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfc2VyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfaW5pdGlhbGl6ZXJzLCAodmFsKSA9PiBgJHt2YWx9IE1icHNgKSk7CiAgICBnZXQgeUF4aXNGb3JtYXR0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHlBeGlzRm9ybWF0dGVyKHZhbHVlMikgewogICAgICB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc0Zvcm1hdHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcm9sbGluZ1dpbmRvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgbm8gcm9sbGluZyB3aW5kb3cKICAgIHNldCByb2xsaW5nV2luZG93KHZhbHVlMikgewogICAgICB0aGlzLiNyb2xsaW5nV2luZG93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVhbHRpbWVNb2RlKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVhbHRpbWVNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNyZWFsdGltZU1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc1NjYWxpbmdfaW5pdGlhbGl6ZXJzLCAiZHluYW1pYyIpKTsKICAgIGdldCB5QXhpc1NjYWxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB5QXhpc1NjYWxpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzU2NhbGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzLCAxMDApKTsKICAgIGdldCB5QXhpc01heCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBVc2VkIHdoZW4geUF4aXNTY2FsaW5nIGlzICdmaXhlZCcgb3IgJ3BlcmNlbnRhZ2UnCiAgICBzZXQgeUF4aXNNYXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgIGdldCBhdXRvU2Nyb2xsSW50ZXJ2YWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvU2Nyb2xsSW50ZXJ2YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIEF1dG8tc2Nyb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoMCB0byBkaXNhYmxlKQogICAgc2V0IGF1dG9TY3JvbGxJbnRlcnZhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2F1dG9TY3JvbGxJbnRlcnZhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICByZXNpemVUaW1lb3V0OwogICAgaW50ZXJuYWxDaGFydERhdGEgPSBbXTsKICAgIGF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICBERUJVR19SRVNJWkUgPSBmYWxzZTsKICAgIC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSByZXNpemUgZGVidWdnaW5nCiAgICAvLyBDaGFydCBjb2xvciBzY2hlbWVzCiAgICBDSEFSVF9DT0xPUlMgPSB7CiAgICAgIGRhcms6IFsKICAgICAgICAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsCiAgICAgICAgLy8gQmx1ZQogICAgICAgICJoc2woMTczLjQgODAuNCUgNDAlKSIsCiAgICAgICAgLy8gVGVhbAogICAgICAgICJoc2woMjgwLjMgODcuNCUgNjYuNyUpIiwKICAgICAgICAvLyBQdXJwbGUKICAgICAgICAiaHNsKDI0LjYgOTUlIDUzLjElKSIKICAgICAgICAvLyBPcmFuZ2UKICAgICAgXSwKICAgICAgbGlnaHQ6IFsKICAgICAgICAiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsCiAgICAgICAgLy8gQmx1ZSAoc2hhZGNuIHByaW1hcnkpCiAgICAgICAgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICAgIC8vIEdyZWVuIChzaGFkY24gc3VjY2VzcykKICAgICAgICAiaHNsKDI4MC4zIDQ3LjclIDUwLjIlKSIsCiAgICAgICAgLy8gUHVycGxlIChtdXRlZCkKICAgICAgICAiaHNsKDIwLjUgOTAuMiUgNDguMiUpIgogICAgICAgIC8vIE9yYW5nZSAoc2hhZGNuIGRlc3RydWN0aXZlIHZhcmlhbnQpCiAgICAgIF0KICAgIH07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5jaGFydCkgewogICAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gUmVzaXplIGRldGVjdGVkOiIsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiBlbnRyeS5jb250ZW50UmVjdC53aWR0aCwKICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuY29udGVudFJlY3QuaGVpZ2h0CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgICB0aGlzLnJlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7CiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlc3Ryb3lpbmcgY2hhcnQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGNoYXJ0QXJlYVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckNoYXJ0QXJlYSh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IEFwZXhDaGFydHNMaWIgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRBcGV4Q2hhcnRzKCk7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIGNvbnN0IG1haW5ib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKTsKICAgICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIik7CiAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJDaGFydCBjb250YWluZXJzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nVG9wLCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHN0eWxlQ2hhcnRDb250YWluZXIucGFkZGluZ1JpZ2h0LCAxMCk7CiAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgY29uc3QgaW5pdGlhbEhlaWdodCA9IG1haW5ib3gub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207CiAgICAgIGNvbnN0IGNoYXJ0U2VyaWVzID0gdGhpcy5zZXJpZXMubGVuZ3RoID4gMCA/IHRoaXMuc2VyaWVzIDogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJjcHUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMjUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAyMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDI1IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJtZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMTAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDEyIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAxMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDQwIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBjaGFydFNlcmllczsKICAgICAgY29uc3QgaXNEYXJrID0gIXRoaXMuZ29CcmlnaHQ7CiAgICAgIGNvbnN0IHRoZW1lID0gaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IjsKICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgc2VyaWVzOiBjaGFydFNlcmllcywKICAgICAgICBjaGFydDogewogICAgICAgICAgd2lkdGg6IGluaXRpYWxXaWR0aCB8fCAxMDAsCiAgICAgICAgICAvLyBVc2UgYWN0dWFsIHdpZHRoIG9yIGZhbGxiYWNrCiAgICAgICAgICBoZWlnaHQ6IGluaXRpYWxIZWlnaHQgfHwgMTAwLAogICAgICAgICAgLy8gVXNlIGFjdHVhbCBoZWlnaHQgb3IgZmFsbGJhY2sKICAgICAgICAgIHR5cGU6ICJhcmVhIiwKICAgICAgICAgIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHRvIGluaGVyaXQgZnJvbSBjb250YWluZXIKICAgICAgICAgIHRvb2xiYXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRpc2FibGVzIHRoZSB0b29sYmFyCiAgICAgICAgICB9LAogICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgIC8vIERpc2FibGUgYW5pbWF0aW9ucyBpbiByZWFsdGltZSBtb2RlCiAgICAgICAgICAgIHNwZWVkOiA0MDAsCiAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyYWR1YWwgYW5pbWF0aW9uIGZvciBjbGVhbmVyIHVwZGF0ZXMKICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICB9LAogICAgICAgICAgICBkeW5hbWljQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHpvb206IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgLy8gRGlzYWJsZSB6b29tIGZvciBjbGVhbmVyIGludGVyYWN0aW9uCiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0aW9uOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgIC8vIERpc2FibGUgc2VsZWN0aW9uCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkYXRhTGFiZWxzOiB7CiAgICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgIGN1cnZlOiAic21vb3RoIgogICAgICAgIH0sCiAgICAgICAgeGF4aXM6IHsKICAgICAgICAgIHR5cGU6ICJkYXRldGltZSIsCiAgICAgICAgICAvLyBUaW1lLXNlcmllcyBkYXRhCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0OiAiSEg6bW06c3MiLAogICAgICAgICAgICAvLyBUaW1lIGZvcm1hdHRpbmcgd2l0aCBzZWNvbmRzCiAgICAgICAgICAgIGRhdGV0aW1lVVRDOiBmYWxzZSwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0sCiAgICAgICAgICAgICAgLy8gTGFiZWwgY29sb3IKICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICctYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLAogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBheGlzQm9yZGVyOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeC1heGlzIGJvcmRlcgogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICBzaG93OiBmYWxzZQogICAgICAgICAgICAvLyBIaWRlIHgtYXhpcyB0aWNrcwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeWF4aXM6IHsKICAgICAgICAgIG1pbjogMCwKICAgICAgICAgIG1heDogdGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIiA/IHZvaWQgMCA6IHRoaXMueUF4aXNNYXgsCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogW2lzRGFyayA/ICJoc2woMCAwJSA2My45JSkiIDogImhzbCgwIDAlIDIwJSkiXSwKICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gSGlkZSB5LWF4aXMgYm9yZGVyCiAgICAgICAgICB9LAogICAgICAgICAgYXhpc1RpY2tzOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeS1heGlzIHRpY2tzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICBzaGFyZWQ6IHRydWUsCiAgICAgICAgICAvLyBFbmFibGVzIHRoZSB0b29sdGlwIHRvIGRpc3BsYXkgYWNyb3NzIHNlcmllcwogICAgICAgICAgaW50ZXJzZWN0OiBmYWxzZSwKICAgICAgICAgIC8vIEFsbG93cyBob3ZlcmluZyBhbnl3aGVyZSBvbiB0aGUgY2hhcnQKICAgICAgICAgIGZvbGxvd0N1cnNvcjogdHJ1ZSwKICAgICAgICAgIC8vIE1ha2VzIHRvb2x0aXAgZm9sbG93IG1vdXNlIGV2ZW4gYmV0d2VlbiBwb2ludHMKICAgICAgICAgIHg6IHsKICAgICAgICAgICAgZm9ybWF0OiAiZGQvTU0veXkgSEg6bW0iCiAgICAgICAgICB9LAogICAgICAgICAgY3VzdG9tOiAoeyBzZXJpZXMsIGRhdGFQb2ludEluZGV4LCB3OiB3MyB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHczLmNvbmZpZy50aGVtZS5tb2RlOwogICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlID0gY3VycmVudFRoZW1lID09PSAiZGFyayI7CiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDklKSIgOiAiaHNsKDAgMCUgMTAwJSkiOwogICAgICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDk1JSkiIDogImhzbCgwIDAlIDklKSI7CiAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDg5LjglKSI7CiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjIgPSB3My5jb25maWcueWF4aXNbMF0/LmxhYmVscz8uZm9ybWF0dGVyIHx8ICgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGxldCB0b29sdGlwQ29udGVudCA9IGA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHt0ZXh0Q29sb3J9OyBib3JkZXItcmFkaXVzOiA2cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIGhzbCgwIDAlIDAlIC8gJHtpc0RhcmtNb2RlID8gIjAuMiIgOiAiMC4xIn0pOyBib3JkZXI6IDFweCBzb2xpZCAke2JvcmRlckNvbG9yfTtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij5gOwogICAgICAgICAgICBzZXJpZXMuZm9yRWFjaCgoczksIGluZGV4MikgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdzMuZ2xvYmFscy5zZXJpZXNOYW1lc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHM5W2RhdGFQb2ludEluZGV4XTsKICAgICAgICAgICAgICBjb25zdCBjb2xvcjIgPSB3My5nbG9iYWxzLmNvbG9yc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyMih2YWx1ZTIpOwogICAgICAgICAgICAgIHRvb2x0aXBDb250ZW50ICs9IGA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgbWFyZ2luOiAke2luZGV4MiA+IDAgPyAiNnB4IiA6ICIwIn0gMDsiPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7Y29sb3IyfTsgYm9yZGVyLXJhZGl1czogMnB4OyI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNTAwOyI+JHtsYWJlbH06PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogYXV0bzsgZm9udC13ZWlnaHQ6IDYwMDsiPiR7Zm9ybWF0dGVkVmFsdWV9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdG9vbHRpcENvbnRlbnQgKz0gYDwvZGl2PmA7CiAgICAgICAgICAgIHJldHVybiB0b29sdGlwQ29udGVudDsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgIGxpbmVzOiB7CiAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAvLyBIaWRlIHZlcnRpY2FsIGdyaWQgbGluZXMgZm9yIGNsZWFuZXIgbG9vawogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbGluZXM6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBib3JkZXJDb2xvcjogaXNEYXJrID8gImhzbCgwIDAlIDE0LjklKSIgOiAiaHNsKDAgMCUgOTQlKSIsCiAgICAgICAgICAvLyBWZXJ5IHN1YnRsZSBncmlkIGxpbmVzCiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IDAsCiAgICAgICAgICAvLyBTb2xpZCBsaW5lCiAgICAgICAgICBwYWRkaW5nOiB7CiAgICAgICAgICAgIHRvcDogMTAsCiAgICAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAgICAgICAgYm90dG9tOiAxMCwKICAgICAgICAgICAgbGVmdDogMjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZpbGw6IHsKICAgICAgICAgIHR5cGU6ICJncmFkaWVudCIsCiAgICAgICAgICAvLyBHcmFkaWVudCBmaWxsIGZvciB0aGUgYXJlYQogICAgICAgICAgZ3JhZGllbnQ6IHsKICAgICAgICAgICAgc2hhZGU6IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCIsCiAgICAgICAgICAgIHR5cGU6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgIHNoYWRlSW50ZW5zaXR5OiAwLjEsCiAgICAgICAgICAgIG9wYWNpdHlGcm9tOiBpc0RhcmsgPyAwLjIgOiAwLjMsCiAgICAgICAgICAgIG9wYWNpdHlUbzogMCwKICAgICAgICAgICAgc3RvcHM6IFswLCAxMDBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB0aGVtZTogewogICAgICAgICAgbW9kZTogdGhlbWUKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBBcGV4Q2hhcnRzTGliKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSwgb3B0aW9ucyk7CiAgICAgICAgYXdhaXQgdGhpcy5jaGFydC5yZW5kZXIoKTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDEwMCkpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgICBjb25zdCBtYWluYm94MiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGlmIChtYWluYm94MiAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShtYWluYm94Mik7CiAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZ29CcmlnaHQiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDaGFydFRoZW1lKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VyaWVzIikgJiYgdGhpcy5jaGFydCAmJiB0aGlzLnNlcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXJpZXModGhpcy5zZXJpZXMpOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzRm9ybWF0dGVyIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICB5YXhpczogewogICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMueUF4aXNGb3JtYXR0ZXIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInJlYWx0aW1lTW9kZSIpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICBzcGVlZDogNDAwLAogICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgZGVsYXk6IDAKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGR5bmFtaWNBbmltYXRpb246IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYXV0b1Njcm9sbEludGVydmFsIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ5QXhpc1NjYWxpbmciKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzTWF4IikpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZVNlcmllcyhuZXdTZXJpZXMsIGFuaW1hdGUgPSB0cnVlKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBuZXdTZXJpZXM7CiAgICAgICAgaWYgKHRoaXMucm9sbGluZ1dpbmRvdyA+IDAgJiYgdGhpcy5yZWFsdGltZU1vZGUpIHsKICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY3V0b2ZmVGltZSA9IG5vdzIgLSB0aGlzLnJvbGxpbmdXaW5kb3c7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcmllcyA9IG5ld1Nlcmllcy5tYXAoKHNlcmllcykgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IHNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQ0KSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludDQgPT09ICJvYmplY3QiICYmIHBvaW50NCAhPT0gbnVsbCAmJiAieCIgaW4gcG9pbnQ0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocG9pbnQ0LngpLmdldFRpbWUoKSA+IGN1dG9mZlRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmIChmaWx0ZXJlZFNlcmllcy5zb21lKChzOSkgPT4gczkuZGF0YS5sZW5ndGggPiAwKSkgewogICAgICAgICAgICBpZiAodGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIikgewogICAgICAgICAgICAgIGNvbnN0IGFsbFZhbHVlcyA9IGZpbHRlcmVkU2VyaWVzLmZsYXRNYXAoKHM5KSA9PiBzOS5kYXRhLm1hcCgoZDYpID0+IGQ2LnkpKTsKICAgICAgICAgICAgICBpZiAoYWxsVmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uYWxsVmFsdWVzKTsKICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNNYXggPSBNYXRoLmNlaWwobWF4VmFsdWUgKiAxLjEpOwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICAgICAgbWF4OiBkeW5hbWljTWF4CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKGZpbHRlcmVkU2VyaWVzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgY2hhcnQgc2VyaWVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLy8gVXBkYXRlIGp1c3QgdGhlIHgtYXhpcyBmb3Igc21vb3RoIHNjcm9sbGluZyBpbiByZWFsdGltZSBtb2RlCiAgICAvLyBQdWJsaWMgZm9yIGFkdmFuY2VkIHVzYWdlIGluIGRlbW9zLCBidXQgdHlwaWNhbGx5IGhhbmRsZWQgYXV0b21hdGljYWxseQogICAgYXN5bmMgdXBkYXRlVGltZVdpbmRvdygpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8IHRoaXMucm9sbGluZ1dpbmRvdyA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBjdXRvZmZUaW1lID0gbm93MiAtIHRoaXMucm9sbGluZ1dpbmRvdzsKICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICB4YXhpczogewogICAgICAgICAgbWluOiBjdXRvZmZUaW1lLAogICAgICAgICAgbWF4OiBub3cyLAogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIGZvcm1hdDogIkhIOm1tOnNzIiwKICAgICAgICAgICAgZGF0ZXRpbWVVVEM6IGZhbHNlLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogWyF0aGlzLmdvQnJpZ2h0ID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHRpY2tBbW91bnQ6IDYKICAgICAgICB9CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICB9CiAgICBhc3luYyBhcHBlbmREYXRhKG5ld0RhdGEpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kRGF0YShuZXdEYXRhKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpOwogICAgfQogICAgYXN5bmMgcmVzaXplQ2hhcnQoKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFpbmJveCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGFydENvbnRhaW5lciIpOwogICAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdm9pZCBtYWluYm94Lm9mZnNldEhlaWdodDsKICAgICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdUb3AsIDEwKTsKICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nQm90dG9tLCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nUmlnaHQsIDEwKTsKICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IDAgJiYgYWN0dWFsSGVpZ2h0ID4gMCkgewogICAgICAgICAgaWYgKHRoaXMuREVCVUdfUkVTSVpFKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gVXBkYXRpbmcgY2hhcnQgZGltZW5zaW9uczoiLCB7CiAgICAgICAgICAgICAgd2lkdGg6IGFjdHVhbFdpZHRoLAogICAgICAgICAgICAgIGhlaWdodDogYWN0dWFsSGVpZ2h0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgICB3aWR0aDogYWN0dWFsV2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBhY3R1YWxIZWlnaHQKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVzaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgY2hhcnQgcmVzaXplLiBVc2VmdWwgd2hlbiBhdXRvbWF0aWMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yay4KICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50LgogICAgICovCiAgICBhc3luYyBmb3JjZVJlc2l6ZSgpIHsKICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgfQogICAgc3RhcnRBdXRvU2Nyb2xsKCkgewogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5hdXRvU2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlVGltZVdpbmRvdygpOwogICAgICB9LCB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7CiAgICB9CiAgICBzdG9wQXV0b1Njcm9sbCgpIHsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbFRpbWVyKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpOwogICAgICAgIHRoaXMuYXV0b1Njcm9sbFRpbWVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlQ2hhcnRUaGVtZSgpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICBjb25zdCB0aGVtZSA9IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCI7CiAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgdGhlbWU6IHsKICAgICAgICAgIG1vZGU6IHRoZW1lCiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB4YXhpczogewogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHlheGlzOiB7CiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiCiAgICAgICAgfSwKICAgICAgICBmaWxsOiB7CiAgICAgICAgICBncmFkaWVudDogewogICAgICAgICAgICBzaGFkZTogaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IiwKICAgICAgICAgICAgb3BhY2l0eUZyb206IGlzRGFyayA/IDAuMiA6IDAuMwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzMyA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3Qgc3RydWN0dXJlZExvZyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3N0cnVjdHVyZWQtbG9nIik7CiAgICBjb25zdCByYXdMb2cgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNyYXctbG9nIik7CiAgICBsZXQgc3RydWN0dXJlZEludGVydmFsSWQ7CiAgICBsZXQgcmF3SW50ZXJ2YWxJZDsKICAgIGNvbnN0IHNlcnZlclNvdXJjZXMgPSBbIlNlcnZlciIsICJEYXRhYmFzZSIsICJBUEkiLCAiQXV0aCIsICJDYWNoZSIsICJRdWV1ZSIsICJXZWJTb2NrZXQiLCAiU2NoZWR1bGVyIl07CiAgICBjb25zdCBsb2dUZW1wbGF0ZXMgPSB7CiAgICAgIGRlYnVnOiBbCiAgICAgICAgIkxvYWRpbmcgbW9kdWxlOiB7e21vZHVsZX19IiwKICAgICAgICAiQ2FjaGUgaGl0IGZvciBrZXk6IHt7a2V5fX0iLAogICAgICAgICJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsCiAgICAgICAgIlJlcXVlc3QgaGVhZGVyczoge3toZWFkZXJzfX0iLAogICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSBsb2FkZWQ6IHt7dmFyfX0iCiAgICAgIF0sCiAgICAgIGluZm86IFsKICAgICAgICAiUmVxdWVzdCByZWNlaXZlZDoge3ttZXRob2R9fSB7e3BhdGh9fSIsCiAgICAgICAgIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgIlByb2Nlc3Npbmcgam9iIHt7am9iSWR9fSBmcm9tIHF1ZXVlIiwKICAgICAgICAnU2NoZWR1bGVkIHRhc2sgInt7dGFza319IiBzdGFydGVkJywKICAgICAgICAiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iCiAgICAgIF0sCiAgICAgIHdhcm46IFsKICAgICAgICAiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsCiAgICAgICAgIk1lbW9yeSB1c2FnZSBhdCB7e3BlcmNlbnR9fSUiLAogICAgICAgICJSYXRlIGxpbWl0IGFwcHJvYWNoaW5nIGZvciBJUCB7e2lwfX0iLAogICAgICAgICJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsCiAgICAgICAgIkNlcnRpZmljYXRlIGV4cGlyZXMgaW4ge3tkYXlzfX0gZGF5cyIKICAgICAgXSwKICAgICAgZXJyb3I6IFsKICAgICAgICAiRGF0YWJhc2UgY29ubmVjdGlvbiBsb3N0OiB7e2Vycm9yfX0iLAogICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiB7e2Vycm9yfX0iLAogICAgICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLAogICAgICAgICJGaWxlIG5vdCBmb3VuZDoge3twYXRofX0iLAogICAgICAgICJTZXJ2aWNlIHVuYXZhaWxhYmxlOiB7e3NlcnZpY2V9fSIKICAgICAgXSwKICAgICAgc3VjY2VzczogWwogICAgICAgICJTZXJ2ZXIgc3RhcnRlZCBzdWNjZXNzZnVsbHkgb24gcG9ydCB7e3BvcnR9fSIsCiAgICAgICAgIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLAogICAgICAgICJCYWNrdXAgY29tcGxldGVkOiB7e3NpemV9fSBNQiIsCiAgICAgICAgIlNTTCBjZXJ0aWZpY2F0ZSByZW5ld2VkIiwKICAgICAgICAiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiCiAgICAgIF0KICAgIH07CiAgICBjb25zdCBkb2NrZXJMb2dUZW1wbGF0ZXMgPSBbCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuMTIzWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW25naW54XSBHRVQgL2FwaS9oZWFsdGggMjAwIC0gMm1zIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0NS40NTZaXHgxQlswbSBceDFCWzMzbVdBUk5ceDFCWzBtICBbcmVkaXNdIENvbm5lY3Rpb24gcG9vbCBydW5uaW5nIGxvdzogMy8xMCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMDEyWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW2FwcF0gUHJvY2Vzc2luZyBiYXRjaCBqb2IgI3t7am9iSWR9fSIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMzQ1Wlx4MUJbMG0gXHgxQlszMm1PS1x4MUJbMG0gICAgW2hlYWx0aF0gQWxsIHNlcnZpY2VzIGhlYWx0aHkiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjAwMVpceDFCWzBtIFx4MUJbMzVtREVCVUdceDFCWzBtIFtncnBjXSBSZXF1ZXN0IHJlY2VpdmVkOiBHZXRVc2VyKGlkPXt7dXNlcklkfX0pIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny4yMzRaXHgxQlswbSBceDFCWzMxbUVSUk9SXHgxQlswbSBbYXV0aF0gVG9rZW4gdmFsaWRhdGlvbiBmYWlsZWQ6IGV4cGlyZWQiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuODkwWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW3dlYnNvY2tldF0gQ2xpZW50IGNvbm5lY3RlZDogc2Vzc2lvbj17e3Nlc3Npb259fSIsCiAgICAgIC8vIE11bHRpLWxpbmUgbG9nIGVudHJ5IGxpa2Ugc3RhY2sgdHJhY2VzCiAgICAgICJceDFCWzMxbUVycm9yOiBDb25uZWN0aW9uIHJlZnVzZWRceDFCWzBtXG4gICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSlcbiAgICBhdCBQb29sLmNvbm5lY3QgKC9hcHAvbm9kZV9tb2R1bGVzL3BnL2xpYi9wb29sLmpzOjQ1OjIzKVxuICAgIGF0IGFzeW5jIERhdGFiYXNlU2VydmljZS5xdWVyeSAoL2FwcC9zcmMvZGIvc2VydmljZS50czo4OToxMikiCiAgICBdOwogICAgY29uc3QgZ2VuZXJhdGVSYW5kb21Mb2cgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxldmVscyA9IFsiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgInN1Y2Nlc3MiXTsKICAgICAgY29uc3Qgd2VpZ2h0cyA9IFswLjIsIDAuNSwgMC4xNSwgMC4xLCAwLjA1XTsKICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKTsKICAgICAgbGV0IGN1bXVsYXRpdmUgPSAwOwogICAgICBsZXQgbGV2ZWwgPSAiaW5mbyI7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdlaWdodHMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGN1bXVsYXRpdmUgKz0gd2VpZ2h0c1tpMTFdOwogICAgICAgIGlmIChyYW5kb20gPCBjdW11bGF0aXZlKSB7CiAgICAgICAgICBsZXZlbCA9IGxldmVsc1tpMTFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHNvdXJjZSA9IHNlcnZlclNvdXJjZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2VydmVyU291cmNlcy5sZW5ndGgpXTsKICAgICAgY29uc3QgdGVtcGxhdGVzID0gbG9nVGVtcGxhdGVzW2xldmVsXTsKICAgICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBtZXNzYWdlMiA9IHRlbXBsYXRlLnJlcGxhY2UoInt7bW9kdWxlfX0iLCBbImV4cHJlc3MiLCAibW9uZ29vc2UiLCAicmVkaXMiLCAic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2tleX19IiwgInVzZXI6IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMykpLnJlcGxhY2UoInt7dGltZX19IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLCBbIk5PREVfRU5WIiwgIkRBVEFCQVNFX1VSTCIsICJBUElfS0VZIiwgIlBPUlQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLCBbIkdFVCIsICJQT1NUIiwgIlBVVCIsICJERUxFVEUiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7cGF0aH19IiwgWyIvYXBpL3VzZXJzIiwgIi9hcGkvYXV0aC9sb2dpbiIsICIvYXBpL3Byb2R1Y3RzIiwgIi9oZWFsdGgiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLCBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsICJqb2JfIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSkpLnJlcGxhY2UoInt7dGFza319IiwgWyJjbGVhbnVwIiwgImJhY2t1cCIsICJyZXBvcnQtZ2VuZXJhdGlvbiIsICJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2lwfX0iLCBgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU1KX1gKS5yZXBsYWNlKCJ7e3F1ZXJ5fX0iLCAiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyA3MCkpLnJlcGxhY2UoInt7ZW5kcG9pbnR9fSIsICIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMwKSArIDEpKS5yZXBsYWNlKCJ7e2Vycm9yfX0iLCBbIkVDT05OUkVGVVNFRCIsICJFVElNRURPVVQiLCAiRU5PVEZPVU5EIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsICJ1c2VyXyIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsIFsiUmVkaXMiLCAiTW9uZ29EQiIsICJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3BvcnR9fSIsIFN0cmluZygzZTMgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1MDApICsgMTAwKSk7CiAgICAgIHN0cnVjdHVyZWRMb2cuYWRkTG9nKGxldmVsLCBtZXNzYWdlMiwgc291cmNlKTsKICAgIH07CiAgICBjb25zdCBnZW5lcmF0ZURvY2tlckxvZyA9ICgpID0+IHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2NrZXJMb2dUZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9ja2VyTG9nVGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBub3cyID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBsb2dMaW5lID0gdGVtcGxhdGUucmVwbGFjZSgvMjAyNC0wMS0xNVQxMDoyMzpcZHsyfVwuXGR7M31aL2csIG5vdzIpLnJlcGxhY2UoInt7am9iSWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3tpcH19IiwgYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpKTsKICAgICAgcmF3TG9nLndyaXRlbG5SYXcobG9nTGluZSk7CiAgICB9OwogICAgY29uc3Qgc3RhcnRTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHsKICAgICAgICAgIGdlbmVyYXRlUmFuZG9tTG9nKCk7CiAgICAgICAgICBjb25zdCBuZXh0RGVsYXkgPSBNYXRoLnJhbmRvbSgpICogMmUzICsgNTAwOwogICAgICAgICAgc3RydWN0dXJlZEludGVydmFsSWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wU3RydWN0dXJlZFNpbXVsYXRpb24gPSAoKSA9PiB7CiAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc3RydWN0dXJlZEludGVydmFsSWQpOwogICAgICAgIHN0cnVjdHVyZWRJbnRlcnZhbElkID0gbnVsbDsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0YXJ0UmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4gewogICAgICAgICAgZ2VuZXJhdGVEb2NrZXJMb2coKTsKICAgICAgICAgIGNvbnN0IG5leHREZWxheSA9IE1hdGgucmFuZG9tKCkgKiAxZTMgKyAyMDA7CiAgICAgICAgICByYXdJbnRlcnZhbElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAocmF3SW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKHJhd0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJhd0ludGVydmFsSWQpOwogICAgICAgIHJhd0ludGVydmFsSWQgPSBudWxsOwogICAgICB9CiAgICB9OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJBZGQgU3RydWN0dXJlZCBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVSYW5kb21Mb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBTdHJ1Y3R1cmVkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0YXJ0U3RydWN0dXJlZFNpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdG9wIFN0cnVjdHVyZWQiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFN0cnVjdHVyZWRTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIERvY2tlciBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVEb2NrZXJMb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RhcnRSYXdTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU3RvcCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJhd1NpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIH0KICAgICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIH0KICAgICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgfQogICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPCEtLSBTdHJ1Y3R1cmVkIExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RydWN0dXJlZCBMb2dzIChJTG9nRW50cnkpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTdHJ1Y3R1cmVkIGxvZyBlbnRyaWVzIHdpdGggbGV2ZWwsIG1lc3NhZ2UsIGFuZCBzb3VyY2UuIFN1cHBvcnRzIHNlYXJjaCBhbmQga2V5d29yZCBoaWdobGlnaHRpbmcuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBTdHJ1Y3R1cmVkIExvZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RhcnQgU3RydWN0dXJlZDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBTdHJ1Y3R1cmVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJzdHJ1Y3R1cmVkLWxvZyIKICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0aW9uIFNlcnZlciBMb2dzIn0KICAgICAgICAgIC5oaWdobGlnaHRLZXl3b3Jkcz0ke1siZXJyb3IiLCAiZmFpbGVkIiwgInRpbWVvdXQiXX0KICAgICAgICAgIC5zaG93TWV0cmljcz0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBSYXcgTG9ncyBTZWN0aW9uIC0tPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5SYXcgTG9ncyAoRG9ja2VyL0NvbnRhaW5lciBTdHlsZSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFJhdyBsb2cgb3V0cHV0IHdpdGggQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZvciByZWFsIERvY2tlci9jb250YWluZXIgbG9ncy4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIERvY2tlciBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IERvY2tlcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgICAgaWQ9InJhdy1sb2ciCiAgICAgICAgICAubGFiZWw9JHsiRG9ja2VyIENvbnRhaW5lciBMb2dzIn0KICAgICAgICAgIC5tb2RlPSR7InJhdyJ9CiAgICAgICAgICAuc2hvd01ldHJpY3M9JHtmYWxzZX0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWxvZz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNDYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ2hhcnRMb2cgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNoYXJ0LWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9tb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9nRW50cmllc19kZWNvcmF0b3JzOwogIGxldCBfbG9nRW50cmllc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9TY3JvbGxfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhFbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhFbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodEtleXdvcmRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TWV0cmljc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlck1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQ2hhcnRMb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX21vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sb2dFbnRyaWVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEVudHJpZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9oaWdobGlnaHRLZXl3b3Jkc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21ldHJpY3NfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Rlcm1pbmFsUmVhZHlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kZV9pbml0aWFsaXplcnMsIF9tb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xvZ0VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nRW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nRW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dFbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dFbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvZ0VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9TY3JvbGwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b1Njcm9sbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsX2luaXRpYWxpemVycywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbWF4RW50cmllc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhFbnRyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhFbnRyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEVudHJpZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1heEVudHJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RW50cmllc19pbml0aWFsaXplcnMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodEtleXdvcmRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRLZXl3b3JkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRLZXl3b3Jkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0S2V5d29yZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd01ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dNZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dNZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TWV0cmljc19pbml0aWFsaXplcnMsIF9zaG93TWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9tZXRyaWNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1ldHJpY3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWV0cmljcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXRyaWNzX2luaXRpYWxpemVycywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFJlYWR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXJtaW5hbFJlYWR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsUmVhZHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsUmVhZHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGVybWluYWxSZWFkeV9pbml0aWFsaXplcnMsIF90ZXJtaW5hbFJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRMb2cyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQ2hhcnQiOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICJTZXJ2ZXIgTG9ncyIpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tb2RlX2luaXRpYWxpemVycywgInN0cnVjdHVyZWQiKSk7CiAgICBnZXQgbW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sb2dFbnRyaWVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBsb2dFbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvZ0VudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ0VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXV0b1Njcm9sbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TY3JvbGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdXRvU2Nyb2xsKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2luaXRpYWxpemVycywgMWU0KSk7CiAgICBnZXQgbWF4RW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEVudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhFbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGhpZ2hsaWdodEtleXdvcmRzKCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRLZXl3b3Jkcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2hpZ2hsaWdodEtleXdvcmRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd01ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dNZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoUXVlcnkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFF1ZXJ5KHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGZpbHRlck1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9maWx0ZXJNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbWV0cmljc19pbml0aWFsaXplcnMsIHsgZGVidWc6IDAsIGluZm86IDAsIHdhcm46IDAsIGVycm9yOiAwLCBzdWNjZXNzOiAwLCB0b3RhbDogMCwgcmF0ZTogMCB9KSk7CiAgICBnZXQgbWV0cmljcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0ZXJtaW5hbFJlYWR5KCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsUmVhZHkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Rlcm1pbmFsUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIEJ1ZmZlciBvZiBhbGwgbG9nIGVudHJpZXMgZm9yIGZpbHRlciBtb2RlCiAgICBsb2dCdWZmZXIgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyksIFtdKTsKICAgIC8vIFRyYWNrIHRyYWlsaW5nIGhpZGRlbiBlbnRyaWVzIGNvdW50IGZvciBsaXZlIHVwZGF0ZXMgaW4gZmlsdGVyIG1vZGUKICAgIHRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgLy8geHRlcm0gaW5zdGFuY2VzCiAgICB0ZXJtaW5hbCA9IG51bGw7CiAgICBmaXRBZGRvbiA9IG51bGw7CiAgICBzZWFyY2hBZGRvbiA9IG51bGw7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIGRvbXRvb2xzSW5zdGFuY2UgPSBudWxsOwogICAgLy8gUmF0ZSBjYWxjdWxhdGlvbgogICAgcmF0ZUJ1ZmZlciA9IFtdOwogICAgcmF0ZUludGVydmFsID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtbmF2IGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgOTMlIDQ3JSkiLCAiaHNsKDQ1IDkzJSA0NyUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsICJoc2woNDUgOTMlIDQ3JSkiKX07CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDklKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIC54dGVybSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLm1ldHJpY3MtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tZXRyaWM6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZXJyb3I6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLndhcm46OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDI1IDk1JSA1MyUpOwogICAgICB9CgogICAgICAubWV0cmljLmluZm86OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5zdWNjZXNzOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZGVidWc6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgMCUgNjMuOSUpOwogICAgICB9CgogICAgICAubWV0cmljLnJhdGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5yYXRlOjpiZWZvcmUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPiR7dGhpcy5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1ib3giPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggbG9ncy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoSW5wdXQoZTExKX0KICAgICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoUHJldmlvdXMoKX0gdGl0bGU9IlByZXZpb3VzIG1hdGNoIj7ihpE8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoTmV4dCgpfSB0aXRsZT0iTmV4dCBtYXRjaCI+4oaTPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10b2dnbGUgJHt0aGlzLmZpbHRlck1vZGUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnRvZ2dsZUZpbHRlck1vZGUoKX0KICAgICAgICAgICAgICB0aXRsZT0iJHt0aGlzLmZpbHRlck1vZGUgPyAiU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIiA6ICJTd2l0Y2ggdG8gZmlsdGVyIG1vZGUifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJNb2RlID8gIkZpbHRlciIgOiAiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbCA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyTG9ncygpfT4KICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgJHshdGhpcy50ZXJtaW5hbFJlYWR5ID8gYjJgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnNob3dNZXRyaWNzID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljcy1iYXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBlcnJvciI+ZXJyb3JzOiAke3RoaXMubWV0cmljcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHdhcm4iPndhcm5zOiAke3RoaXMubWV0cmljcy53YXJufTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgaW5mbyI+aW5mbzogJHt0aGlzLm1ldHJpY3MuaW5mb308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHN1Y2Nlc3MiPnN1Y2Nlc3M6ICR7dGhpcy5tZXRyaWNzLnN1Y2Nlc3N9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBkZWJ1ZyI+ZGVidWc6ICR7dGhpcy5tZXRyaWNzLmRlYnVnfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgcmF0ZSI+JHt0aGlzLm1ldHJpY3MucmF0ZS50b0ZpeGVkKDEpfSBsb2dzL3NlYzwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVUZXJtaW5hbCgpOwogICAgICBpZiAodGhpcy5sb2dFbnRyaWVzLmxlbmd0aCA+IDApIHsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nRW50cmllcykgewogICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGluaXRpYWxpemVUZXJtaW5hbCgpIHsKICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRCdW5kbGUsIHNlYXJjaEJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1TZWFyY2hBZGRvbigpCiAgICAgIF0pOwogICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzSW50b1NoYWRvdygpOwogICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IHh0ZXJtQnVuZGxlLlRlcm1pbmFsKHsKICAgICAgICBjdXJzb3JCbGluazogZmFsc2UsCiAgICAgICAgZGlzYWJsZVN0ZGluOiB0cnVlLAogICAgICAgIGZvbnRTaXplOiAxMiwKICAgICAgICBmb250RmFtaWx5OiAiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSIsCiAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZSgpLAogICAgICAgIHNjcm9sbGJhY2s6IHRoaXMubWF4RW50cmllcywKICAgICAgICBjb252ZXJ0RW9sOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEJ1bmRsZS5GaXRBZGRvbigpOwogICAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IHNlYXJjaEJ1bmRsZS5TZWFyY2hBZGRvbigpOwogICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTsKICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5zZWFyY2hBZGRvbik7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7CiAgICAgIHRoaXMudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICB0aGlzLmZpdEFkZG9uPy5maXQoKTsKICAgICAgfSk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSB0aGlzLmRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGlzLmdldFRlcm1pbmFsVGhlbWUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnJhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2FsY3VsYXRlUmF0ZSgpLCAxZTMpOwogICAgICB0aGlzLnRlcm1pbmFsUmVhZHkgPSB0cnVlOwogICAgfQogICAgZ2V0VGVybWluYWxUaGVtZSgpIHsKICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGUgPz8gdHJ1ZTsKICAgICAgcmV0dXJuIGlzRGFyayA/IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzBhMGEwYSIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNlMGUwZTAiLAogICAgICAgIGN1cnNvcjogIiNlMGUwZTAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICIjNDA0MDQwIiwKICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgIHJlZDogIiNmZjU1NTUiLAogICAgICAgIGdyZWVuOiAiIzUwZmE3YiIsCiAgICAgICAgeWVsbG93OiAiI2YxZmE4YyIsCiAgICAgICAgYmx1ZTogIiM2MjcyYTQiLAogICAgICAgIG1hZ2VudGE6ICIjZmY3OWM2IiwKICAgICAgICBjeWFuOiAiIzhiZTlmZCIsCiAgICAgICAgd2hpdGU6ICIjZjhmOGYyIiwKICAgICAgICBicmlnaHRCbGFjazogIiM2MjcyYTQiLAogICAgICAgIGJyaWdodFJlZDogIiNmZjZlNmUiLAogICAgICAgIGJyaWdodEdyZWVuOiAiIzY5ZmY5NCIsCiAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2ZmZmZhNSIsCiAgICAgICAgYnJpZ2h0Qmx1ZTogIiNkNmFjZmYiLAogICAgICAgIGJyaWdodE1hZ2VudGE6ICIjZmY5MmRmIiwKICAgICAgICBicmlnaHRDeWFuOiAiI2E0ZmZmZiIsCiAgICAgICAgYnJpZ2h0V2hpdGU6ICIjZmZmZmZmIgogICAgICB9IDogewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogIiNhZGQ2ZmYiLAogICAgICAgIGJsYWNrOiAiIzAwMDAwMCIsCiAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICB5ZWxsb3c6ICIjOTQ5ODAwIiwKICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGN5YW46ICIjMDU5OGJjIiwKICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgYnJpZ2h0UmVkOiAiI2NkMzEzMSIsCiAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICBicmlnaHRCbHVlOiAiIzA0NTFhNSIsCiAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICBicmlnaHRXaGl0ZTogIiNhNWE1YTUiCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIEluamVjdCB4dGVybSBDU1Mgc3R5bGVzIGludG8gc2hhZG93IHJvb3QKICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc2hhZG93IERPTSBkb2Vzbid0IGluaGVyaXQgc3R5bGVzIGZyb20gZG9jdW1lbnQuaGVhZAogICAgICovCiAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKSB7CiAgICAgIGNvbnN0IHN0eWxlSWQgPSAieHRlcm0tc2hhZG93LXN0eWxlcyI7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjc3NVcmwpOwogICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlLmlkID0gc3R5bGVJZDsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdHJ1Y3R1cmVkIExvZyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgc2luZ2xlIHN0cnVjdHVyZWQgbG9nIGVudHJ5CiAgICAgKi8KICAgIGFkZExvZyhsZXZlbCwgbWVzc2FnZTIsIHNvdXJjZSkgewogICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICB0aW1lc3RhbXA6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwKICAgICAgICBsZXZlbCwKICAgICAgICBtZXNzYWdlOiBtZXNzYWdlMiwKICAgICAgICBzb3VyY2UKICAgICAgfTsKICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHsKICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICB0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIG11bHRpcGxlIHN0cnVjdHVyZWQgbG9nIGVudHJpZXMKICAgICAqLwogICAgdXBkYXRlTG9nKGVudHJpZXMpIHsKICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgIHJldHVybjsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgaWYgKHRoaXMubG9nQnVmZmVyLmxlbmd0aCA+IHRoaXMubWF4RW50cmllcykgewogICAgICAgICAgdGhpcy5sb2dCdWZmZXIuc2hpZnQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmZpbHRlck1vZGUgfHwgIXRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgICAgICB0aGlzLndyaXRlTG9nRW50cnkoZW50cnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIHRyYWlsaW5nIGhpZGRlbiBwbGFjZWhvbGRlciBpbiByZWFsLXRpbWUKICAgICAqIENsZWFycyB0aGUgbGFzdCBsaW5lIGlmIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gd3JpdGVzIHVwZGF0ZWQgY291bnQKICAgICAqLwogICAgdXBkYXRlVHJhaWxpbmdQbGFjZWhvbGRlcigpIHsKICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA+IDApIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCJceDFCWzFBXHgxQlsyS1xyIik7CiAgICAgIH0KICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50Kys7CiAgICAgIHRoaXMud3JpdGVIaWRkZW5QbGFjZWhvbGRlcih0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgbG9nIGVudHJ5IG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsdGVyCiAgICAgKi8KICAgIGVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkgewogICAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCBlbnRyeS5sZXZlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCAoZW50cnkuc291cmNlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSA/PyBmYWxzZSk7CiAgICB9CiAgICB3cml0ZUxvZ0VudHJ5KGVudHJ5KSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0TG9nRW50cnkoZW50cnkpOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgZm9ybWF0TG9nRW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IHRoaXMuZm9ybWF0VGltZXN0YW1wKGVudHJ5LnRpbWVzdGFtcCk7CiAgICAgIGNvbnN0IGxldmVsQ29sb3JzID0gewogICAgICAgIGRlYnVnOiAiXHgxQls5MG0iLAogICAgICAgIC8vIEdyYXkKICAgICAgICBpbmZvOiAiXHgxQlszNm0iLAogICAgICAgIC8vIEN5YW4KICAgICAgICB3YXJuOiAiXHgxQlszM20iLAogICAgICAgIC8vIFllbGxvdwogICAgICAgIGVycm9yOiAiXHgxQlszMW0iLAogICAgICAgIC8vIFJlZAogICAgICAgIHN1Y2Nlc3M6ICJceDFCWzMybSIKICAgICAgICAvLyBHcmVlbgogICAgICB9OwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCBsZXZlbFN0ciA9IGAke2xldmVsQ29sb3JzW2VudHJ5LmxldmVsXX1bJHtlbnRyeS5sZXZlbC50b1VwcGVyQ2FzZSgpLnBhZEVuZCg3KX1dJHtyZXNldH1gOwogICAgICBjb25zdCBzb3VyY2VTdHIgPSBlbnRyeS5zb3VyY2UgPyBgJHtkaW19WyR7ZW50cnkuc291cmNlfV0ke3Jlc2V0fSBgIDogIiI7CiAgICAgIGNvbnN0IG1lc3NhZ2VTdHIgPSB0aGlzLmFwcGx5SGlnaGxpZ2h0cyhlbnRyeS5tZXNzYWdlKTsKICAgICAgcmV0dXJuIGAke2RpbX0ke3RpbWVzdGFtcDJ9JHtyZXNldH0gJHtsZXZlbFN0cn0gJHtzb3VyY2VTdHJ9JHttZXNzYWdlU3RyfWA7CiAgICB9CiAgICBmb3JtYXRUaW1lc3RhbXAoaXNvU3RyaW5nKSB7CiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpOwogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXIxMjogZmFsc2UsCiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMKICAgICAgfSk7CiAgICB9CiAgICBhcHBseUhpZ2hsaWdodHModGV4dDkpIHsKICAgICAgY29uc3Qga2V5d29yZHMgPSBbLi4udGhpcy5oaWdobGlnaHRLZXl3b3Jkc107CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgdGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGtleXdvcmRzLnB1c2godGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgICAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gdGV4dDk7CiAgICAgIGxldCByZXN1bHQgPSB0ZXh0OTsKICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7CiAgICAgICAgY29uc3QgZXNjYXBlZCA9IGtleXdvcmQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICJcXCQmIik7CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkfSlgLCAiZ2kiKTsKICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShyZWdleCwgIlx4MUJbNDNtXHgxQlszMG0kMVx4MUJbMG0iKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSYXcgTG9nIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBXcml0ZSByYXcgZGF0YSB0byB0aGUgdGVybWluYWwgKGZvciBEb2NrZXIgbG9ncywgZXRjLikKICAgICAqLwogICAgd3JpdGVSYXcoZGF0YSkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSByYXcgbGluZSB0byB0aGUgdGVybWluYWwKICAgICAqLwogICAgd3JpdGVsblJhdyhsaW5lKSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihsaW5lKTsKICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFNlYXJjaCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gaW5wdXQudmFsdWU7CiAgICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlZCA9IHRoaXMuc2VhcmNoUXVlcnkgIT09IG5ld1F1ZXJ5OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gbmV3UXVlcnk7CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgcXVlcnlDaGFuZ2VkKSB7CiAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICB0aGlzLnNlYXJjaFByZXZpb3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VhcmNoTmV4dCgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICBlMTEudGFyZ2V0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogU2VhcmNoIGZvciBhIHF1ZXJ5IGluIHRoZSB0ZXJtaW5hbAogICAgICovCiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dChxdWVyeSk7CiAgICB9CiAgICAvKioKICAgICAqIEZpbmQgbmV4dCBzZWFyY2ggbWF0Y2gKICAgICAqLwogICAgc2VhcmNoTmV4dCgpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBGaW5kIHByZXZpb3VzIHNlYXJjaCBtYXRjaAogICAgICovCiAgICBzZWFyY2hQcmV2aW91cygpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kUHJldmlvdXModGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQ29udHJvbCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHRvZ2dsZUF1dG9TY3JvbGwoKSB7CiAgICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwgJiYgdGhpcy50ZXJtaW5hbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYmV0d2VlbiBmaWx0ZXIgbW9kZSBhbmQgaGlnaGxpZ2h0IG1vZGUKICAgICAqLwogICAgdG9nZ2xlRmlsdGVyTW9kZSgpIHsKICAgICAgdGhpcy5maWx0ZXJNb2RlID0gIXRoaXMuZmlsdGVyTW9kZTsKICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgfQogICAgLyoqCiAgICAgKiBSZS1yZW5kZXIgbG9ncyBiYXNlZCBvbiBjdXJyZW50IGZpbHRlciBzdGF0ZQogICAgICogSW4gZmlsdGVyIG1vZGU6IHNob3cgbWF0Y2hpbmcgbG9ncyB3aXRoIHBsYWNlaG9sZGVycyBmb3IgaGlkZGVuIGVudHJpZXMKICAgICAqIEluIGhpZ2hsaWdodCBtb2RlOiBzaG93IGFsbCBsb2dzCiAgICAgKi8KICAgIHJlUmVuZGVyRmlsdGVyZWRMb2dzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLmNsZWFyKCk7CiAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0J1ZmZlcikgewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IGhpZGRlbkNvdW50ID0gMDsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nQnVmZmVyKSB7CiAgICAgICAgICBpZiAodGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpKSB7CiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDApIHsKICAgICAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgICAgIGhpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGZvcm1hdHRlZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWRkZW5Db3VudCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwKSB7CiAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gaGlkZGVuQ291bnQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSBwbGFjZWhvbGRlciBsaW5lIHNob3dpbmcgaG93IG1hbnkgbG9nIGVudHJpZXMgYXJlIGhpZGRlbiBieSBmaWx0ZXIKICAgICAqLwogICAgd3JpdGVIaWRkZW5QbGFjZWhvbGRlcihjb3VudDIpIHsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgdGV4dDkgPSBjb3VudDIgPT09IDEgPyBgWzEgbG9nIGxpbmUgaGlkZGVuIGJ5IGZpbHRlciAuLi5dYCA6IGBbJHtjb3VudDJ9IGxvZyBsaW5lcyBoaWRkZW4gYnkgZmlsdGVyIC4uLl1gOwogICAgICB0aGlzLnRlcm1pbmFsPy53cml0ZWxuKGAke2RpbX0ke3RleHQ5fSR7cmVzZXR9YCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBsb2dzIGFuZCByZXNldCBtZXRyaWNzCiAgICAgKi8KICAgIGNsZWFyTG9ncygpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uY2xlYXIoKTsKICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbXTsKICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgdGhpcy5yZXNldE1ldHJpY3MoKTsKICAgIH0KICAgIC8qKgogICAgICogU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGxvZwogICAgICovCiAgICBzY3JvbGxUb0JvdHRvbSgpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uc2Nyb2xsVG9Cb3R0b20oKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTWV0cmljcyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHVwZGF0ZU1ldHJpY3MobGV2ZWwpIHsKICAgICAgdGhpcy5tZXRyaWNzID0gewogICAgICAgIC4uLnRoaXMubWV0cmljcywKICAgICAgICBbbGV2ZWxdOiB0aGlzLm1ldHJpY3NbbGV2ZWxdICsgMSwKICAgICAgICB0b3RhbDogdGhpcy5tZXRyaWNzLnRvdGFsICsgMQogICAgICB9OwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICB9CiAgICByZWNvcmRMb2dFdmVudCgpIHsKICAgICAgdGhpcy5yYXRlQnVmZmVyLnB1c2goRGF0ZS5ub3coKSk7CiAgICB9CiAgICBjYWxjdWxhdGVSYXRlKCkgewogICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgdGhpcy5yYXRlQnVmZmVyID0gdGhpcy5yYXRlQnVmZmVyLmZpbHRlcigodDkpID0+IG5vdzIgLSB0OSA8IDFlNCk7CiAgICAgIGNvbnN0IHJhdGUgPSB0aGlzLnJhdGVCdWZmZXIubGVuZ3RoIC8gMTA7CiAgICAgIGlmIChyYXRlICE9PSB0aGlzLm1ldHJpY3MucmF0ZSkgewogICAgICAgIHRoaXMubWV0cmljcyA9IHsgLi4udGhpcy5tZXRyaWNzLCByYXRlIH07CiAgICAgIH0KICAgIH0KICAgIHJlc2V0TWV0cmljcygpIHsKICAgICAgdGhpcy5tZXRyaWNzID0geyBkZWJ1ZzogMCwgaW5mbzogMCwgd2FybjogMCwgZXJyb3I6IDAsIHN1Y2Nlc3M6IDAsIHRvdGFsOiAwLCByYXRlOiAwIH07CiAgICAgIHRoaXMucmF0ZUJ1ZmZlciA9IFtdOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMaWZlY3ljbGUKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJhdGVJbnRlcnZhbCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNDaGFydExvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzNCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vV3JhcHBlciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UeXBlU2NyaXB0IENvZGUgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBjb2RlIGV4YW1wbGUgd2l0aCB2YXJpb3VzIHN5bnRheCBoaWdobGlnaHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InR5cGVzY3JpcHQiPgppbnRlcmZhY2UgVXNlciB7CiAgaWQ6IG51bWJlcjsKICBuYW1lOiBzdHJpbmc7CiAgZW1haWw6IHN0cmluZzsKICBpc0FjdGl2ZTogYm9vbGVhbjsKfQoKY2xhc3MgVXNlclNlcnZpY2UgewogIHByaXZhdGUgdXNlcnM6IFVzZXJbXSA9IFtdOwogIAogIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpVXJsOiBzdHJpbmcpIHsKICAgIGNvbnNvbGUubG9nKCdVc2VyU2VydmljZSBpbml0aWFsaXplZCcpOwogIH0KICAKICBhc3luYyBnZXRVc2VycygpOiBQcm9taXNlPFVzZXJbXT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIHJldHVybiBkYXRhLnVzZXJzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXJzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIFtdOwogICAgfQogIH0KICAKICBhZGRVc2VyKHVzZXI6IFVzZXIpOiB2b2lkIHsKICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTsKICB9Cn0KCi8vIFVzYWdlIGV4YW1wbGUKY29uc3Qgc2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMnKTsKY29uc3QgdXNlcnMgPSBhd2FpdCBzZXJ2aWNlLmdldFVzZXJzKCk7CmNvbnNvbGUubG9nKCdGb3VuZCB1c2VyczonLCB1c2Vycy5sZW5ndGgpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SmF2YVNjcmlwdCBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBKYXZhU2NyaXB0IHdpdGggRVM2KyBmZWF0dXJlcy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iamF2YXNjcmlwdCI+Ci8vIEFycmF5IG1hbmlwdWxhdGlvbiBleGFtcGxlcwpjb25zdCBudW1iZXJzID0gWzEsIDIsIDMsIDQsIDVdOwpjb25zdCBkb3VibGVkID0gbnVtYmVycy5tYXAobiA9PiBuICogMik7CmNvbnN0IGZpbHRlcmVkID0gbnVtYmVycy5maWx0ZXIobiA9PiBuID4gMyk7CgovLyBPYmplY3QgZGVzdHJ1Y3R1cmluZwpjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTsKY29uc3QgeyBuYW1lLCBhZ2UgfSA9IHVzZXI7CgovLyBQcm9taXNlIGhhbmRsaW5nCmNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICh1cmwpID0+IHsKICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKfTsKCi8vIE1vZGVybiBzeW50YXgKY29uc3QgZ3JlZXQgPSAobmFtZSA9ICdXb3JsZCcpID0+IFxgSGVsbG8sIFwke25hbWV9IVxgOwpjb25zb2xlLmxvZyhncmVldCgnU2hhZENOJykpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHl0aG9uIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+UHl0aG9uIGNvZGUgd2l0aCBjbGFzc2VzIGFuZCB0eXBlIGhpbnRzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJweXRob24iPgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwKaW1wb3J0IGFzeW5jaW8KCmNsYXNzIERhdGFQcm9jZXNzb3I6CiAgICAiIiJBIHNpbXBsZSBkYXRhIHByb2Nlc3NvciBjbGFzcyIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5kYXRhOiBMaXN0W2RpY3RdID0gW10KICAgIAogICAgYXN5bmMgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBpdGVtczogTGlzdFtkaWN0XSkgLT4gTGlzdFtkaWN0XToKICAgICAgICAiIiJQcm9jZXNzIGRhdGEgaXRlbXMgYXN5bmNocm9ub3VzbHkiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIyBTaW11bGF0ZSBhc3luYyBwcm9jZXNzaW5nCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4xKQogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAnaWQnOiBpdGVtLmdldCgnaWQnKSwKICAgICAgICAgICAgICAgICdwcm9jZXNzZWQnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZQogICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICAKICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICdpdGVtc19wcm9jZXNzZWQnOiBsZW4oc2VsZi5kYXRhKQogICAgICAgIH0KCiMgVXNhZ2UKcHJvY2Vzc29yID0gRGF0YVByb2Nlc3NvcigiTWFpbiIpCmRhdGEgPSBhd2FpdCBwcm9jZXNzb3IucHJvY2Vzc19kYXRhKFt7J2lkJzogMX0sIHsnaWQnOiAyfV0pCiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DU1MgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgYW5kIGFuaW1hdGlvbnMuIE5vdGUgdGhlIHNob3J0ZXIgbGFuZ3VhZ2UgbGFiZWwuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImNzcyI+Ci8qIE1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyAqLwo6cm9vdCB7CiAgLS1wcmltYXJ5LWNvbG9yOiAjM2I4MmY2OwogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMTBiOTgxOwogIC0tYmFja2dyb3VuZDogI2ZmZmZmZjsKICAtLXRleHQtY29sb3I6ICMwOTA5MGI7CiAgLS1ib3JkZXItcmFkaXVzOiA2cHg7Cn0KCi5jYXJkIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIHBhZGRpbmc6IDI0cHg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgouY2FyZDpob3ZlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCkBrZXlmcmFtZXMgZmFkZUluIHsKICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9CiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SlNPTiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkpTT04gY29uZmlndXJhdGlvbiB3aXRoIHByb3BlciBmb3JtYXR0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqc29uIj4KewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMS4xMC43IiwKICAiZGVzY3JpcHRpb24iOiAiQSBjb21wcmVoZW5zaXZlIGNhdGFsb2cgb2Ygd2ViIGNvbXBvbmVudHMiLAogICJtYWluIjogImRpc3RfdHNfd2ViL2luZGV4LmpzIiwKICAidHlwZSI6ICJtb2R1bGUiLAogICJzY3JpcHRzIjogewogICAgImJ1aWxkIjogInRzYnVpbGQgdHNmb2xkZXJzIC0tYWxsb3dpbXBsaWNpdGFueSAmJiB0c2J1bmRsZSBlbGVtZW50IC0tcHJvZHVjdGlvbiIsCiAgICAid2F0Y2giOiAidHN3YXRjaCBlbGVtZW50IiwKICAgICJ0ZXN0IjogInRzdGVzdCB0ZXN0LyAtLXdlYiAtLXZlcmJvc2UiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjQ1IiwKICAgICJoaWdobGlnaHQuanMiOiAiXjExLjkuMCIKICB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czExKCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RhdGF2aWV3Q29kZWJveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGF0YXZpZXctY29kZWJveCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3Byb2dMYW5nX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9nTGFuZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnM7CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29kZVRvRGlzcGxheV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3Byb2dMYW5nX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX3Byb2dMYW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dMYW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9nTGFuZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9nTGFuZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZ0xhbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ0xhbmdfaW5pdGlhbGl6ZXJzLCBfcHJvZ0xhbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfY29kZVRvRGlzcGxheV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2RlVG9EaXNwbGF5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2RlVG9EaXNwbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvZGVUb0Rpc3BsYXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvZGVUb0Rpc3BsYXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsIF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKTsKICAgIGdldCBwcm9nTGFuZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcHJvZ0xhbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29kZVRvRGlzcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgY29kZVRvRGlzcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2RlVG9EaXNwbGF5KHZhbHVlMikgewogICAgICB0aGlzLiNjb2RlVG9EaXNwbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQogICAgICAgIC5tYWluYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuYXBwYmFyIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciAuZmlsZU5hbWUgewogICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbUJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VzTGFiZWwgewogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubGFuZ3VhZ2VMYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1rZXl3b3JkIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmNvZGVncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggYXV0bzsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM1MjUyNWIiKX07CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMHB4IDBweDsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICB9CgogICAgICAgIC5saW5lQ291bnRlcjpsYXN0LWNoaWxkIHsKICAgICAgICAgIG9wYWNpdHk6IDUwJTsKICAgICAgICB9CgogICAgICAgIHByZSB7CiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBjb2RlIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICB9CgogICAgICAgIGNvZGUsCiAgICAgICAgY29kZSAqLAogICAgICAgIC5saW5lTnVtYmVycyB7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtc3RyaW5nIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYnVpbHRfaW4gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOGI1Y2Y2IiwgIiNhNzhiZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXBhcmFtcyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwODkxYjIiLCAiIzA2YjZkNCIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWNvbW1lbnQgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1udW1iZXIgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1saXRlcmFsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYXR0ciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4YjVjZjYiLCAiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXZhcmlhYmxlIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtYWluYm94IgogICAgICAgIEBjb250ZXh0bWVudT0iJHsoZXZlbnRBcmcpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkFib3V0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJjaXJjbGVJbmZvIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdKTsKICAgICAgfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRlZXMtd2luZG93Y29udHJvbHMgdHlwZT0ibWFjIiBwb3NpdGlvbj0ibGVmdCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgICA8ZGVlcy13aW5kb3djb250cm9scyB0eXBlPSJtYWMiIHBvc2l0aW9uPSJyaWdodCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGVncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmVOdW1iZXJzIj4KICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGxldCBsaW5lQ291bnRlciA9IDA7CiAgICAgICAgcmV0dXJuIHRoaXMuY29kZVRvRGlzcGxheS5zcGxpdCgiXG4iKS5tYXAoKGxpbmVBcmcpID0+IHsKICAgICAgICAgIGxpbmVDb3VudGVyKys7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7bGluZUNvdW50ZXJ9PC9kaXY+YDsKICAgICAgICB9KTsKICAgICAgfSkoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHByZT48Y29kZT48L2NvZGU+PC9wcmU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlc0xhYmVsIj5TcGFjZXM6IDI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlTGFiZWwiPiR7dGhpcy5wcm9nTGFuZ308L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgY29kZVRvRGlzcGxheVN0b3JlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2NvZGVUb0Rpc3BsYXlfZXh0cmFJbml0aWFsaXplcnMpLCAiIik7CiAgICBoaWdobGlnaHRKcyA9IG51bGw7CiAgICBhc3luYyB1cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnNvbGUubG9nKCJoaWdobGlnaHRpbmcgbm93Iik7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7CiAgICAgIGNvbnN0IHNsb3R0ZWRDb2RlTm9kZXMgPSBbXTsKICAgICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gewogICAgICAgIGlmIChjaGlsZE5vZGUubm9kZU5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICAgIHNsb3R0ZWRDb2RlTm9kZXMucHVzaChjaGlsZE5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmNvZGVUb0Rpc3BsYXkgJiYgdGhpcy5jb2RlVG9EaXNwbGF5ICE9PSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHRoaXMuY29kZVRvRGlzcGxheSkudHJpbVN0YXJ0KCk7CiAgICAgIH0KICAgICAgaWYgKHNsb3R0ZWRDb2RlTm9kZXNbMF0gJiYgc2xvdHRlZENvZGVOb2Rlc1swXS53aG9sZVRleHQgJiYgIXRoaXMuY29kZVRvRGlzcGxheSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHNsb3R0ZWRDb2RlTm9kZXNbMF0ud2hvbGVUZXh0KS50cmltU3RhcnQoKTsKICAgICAgICB0aGlzLmNvZGVUb0Rpc3BsYXkgPSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZTsKICAgICAgfQogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgICAgdGhpcy5oaWdobGlnaHRKcyA9IGF3YWl0IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCkubG9hZEhpZ2hsaWdodEpzKCk7CiAgICAgIH0KICAgICAgY29uc3QgbG9jYWxDb2RlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJjb2RlIik7CiAgICAgIGNvbnN0IGhpZ2hsaWdodGVkSHRtbCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHRoaXMuY29kZVRvRGlzcGxheVN0b3JlLCB7CiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMucHJvZ0xhbmcsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGxvY2FsQ29kZU5vZGUuaW5uZXJIVE1MID0gaGlnaGxpZ2h0ZWRIdG1sLnZhbHVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RhdGF2aWV3Q29kZWJveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzUgPSAoKSA9PiBiMmAgPHN0eWxlPgogICAgLmRlbW8gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICB9CiAgICAKICAgIC5kZW1vLWdyaWQgewogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBnYXA6IDI0cHg7CiAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxNnB4OwogICAgfQogICAgCiAgICAuZGVtby10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgIFJpZ2h0LWNsaWNrIG9uIGFueSBkZXRhaWwgcm93IHRvIGNvcHkgdGhlIHZhbHVlLCBrZXksIG9yIGtleTp2YWx1ZSBjb21iaW5hdGlvbgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZpY2UgSGVhbHRoIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3sKICBpZDogIjEiLAogIG5hbWU6ICJBUEkgR2F0ZXdheSBTZXJ2aWNlIiwKICBjb21iaW5lZFN0YXR1czogIm9rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgZGV0YWlsczogWwogICAgewogICAgICBuYW1lOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAiNDVtcyAoYXZnKSIsCiAgICAgIHN0YXR1czogIm9rIiwKICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBub3JtYWwgcmFuZ2UiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45OSUgKDMwIGRheXMpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiRXhjZWxsZW50IHVwdGltZSIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJBY3RpdmUgQ29ubmVjdGlvbnMiLAogICAgICB2YWx1ZTogIjEsMjM0IC8gMTAsMDAwIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiTm9ybWFsIGxvYWQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiU1NMIENlcnRpZmljYXRlIiwKICAgICAgdmFsdWU6ICJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiQ2VydGlmaWNhdGUgdmFsaWQiCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+RGF0YWJhc2UgQ2x1c3RlciBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIyIiwKICBuYW1lOiAiUG9zdGdyZVNRTCBDbHVzdGVyIiwKICBjb21iaW5lZFN0YXR1czogInBhcnRseV9vayIsCiAgY29tYmluZWRTdGF0dXNUZXh0OiAiTWlub3IgaXNzdWVzIGRldGVjdGVkIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJQcmltYXJ5IE5vZGUiLAogICAgICB2YWx1ZTogImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiT3BlcmF0aW5nIG5vcm1hbGx5IgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlJlcGxpY2EgTGFnIiwKICAgICAgdmFsdWU6ICIyLjUgc2Vjb25kcyIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJTbGlnaHRseSBlbGV2YXRlZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNrIFVzYWdlIiwKICAgICAgdmFsdWU6ICI3OCUgKDMxMkdCIC8gNDAwR0IpIiwKICAgICAgc3RhdHVzOiAicGFydGx5X29rIiwKICAgICAgc3RhdHVzVGV4dDogIkFwcHJvYWNoaW5nIHRocmVzaG9sZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJDb25uZWN0aW9uIFBvb2wiLAogICAgICB2YWx1ZTogIjg5IC8gMTAwIGNvbm5lY3Rpb25zIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiV2l0aGluIGxpbWl0cyIKICAgIH0KICBdCn19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5CdWlsZCBQaXBlbGluZSBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIzIiwKICBuYW1lOiAiQ0kvQ0QgUGlwZWxpbmUiLAogIGNvbWJpbmVkU3RhdHVzOiAibm90X29rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJCdWlsZCBmYWlsdXJlIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJMYXN0IEJ1aWxkIiwKICAgICAgdmFsdWU6ICJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJUZXN0IGZhaWx1cmVzIgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkZhaWxlZCBUZXN0cyIsCiAgICAgIHZhbHVlOiAiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJVbml0IHRlc3QgZmFpbHVyZXMiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQ29kZSBDb3ZlcmFnZSIsCiAgICAgIHZhbHVlOiAiODIuNSUgKHRhcmdldDogODUlKSIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJCZWxvdyB0YXJnZXQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQnVpbGQgRHVyYXRpb24iLAogICAgICB2YWx1ZTogIjEybSAzNHMiLAogICAgICBzdGF0dXM6ICJvayIsCiAgICAgIHN0YXR1c1RleHQ6ICJOb3JtYWwgZHVyYXRpb24iCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNDggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3N0YXR1c09iamVjdF9kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzT2JqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KHRoaXMsIG51bGwsIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzT2JqZWN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXNPYmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzT2JqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXNPYmplY3QgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9zdGF0dXNPYmplY3RfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHN0YXR1c09iamVjdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1c09iamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMXB4IDJweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG8gMTAwcHg7CiAgICAgICAgaGVpZ2h0OiA1NnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdCB7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSAvIDAuMikiLCAiaHNsKDAgMCUgNDUuMSUgLyAwLjIpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29weU1haW46YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMikiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5ub3Rfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjIpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5wYXJ0bHlfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjIpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLmRldGFpbCB7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG87CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgICAgfQoKICAgICAgLmRldGFpbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IC5sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAudmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke3RoaXMuc3RhdHVzT2JqZWN0Py5jb21iaW5lZFN0YXR1c30iPjwvZGl2PgogICAgICAgICAgPGgxPiR7dGhpcy5zdGF0dXNPYmplY3Q/Lm5hbWUgfHwgIk5vIHN0YXR1cyBvYmplY3QgYXNzaWduZWQifTwvaDE+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5TWFpbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDb3B5QXNKc29ufT5Db3B5IEpTT048L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc3RhdHVzT2JqZWN0Py5kZXRhaWxzPy5tYXAoKGRldGFpbEFyZykgPT4gewogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldmVudCkgPT4gewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNvcHkgVmFsdWUiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5VG9DbGlwYm9hcmQoZGV0YWlsQXJnLnZhbHVlLCAiVmFsdWUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ29weSBLZXkiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmtleSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChkZXRhaWxBcmcubmFtZSwgIktleSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleTpWYWx1ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weS1wbHVzIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2RldGFpbEFyZy5uYW1lfTogJHtkZXRhaWxBcmcudmFsdWV9YCwgIktleTpWYWx1ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSk7CiAgICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke2RldGFpbEFyZy5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzVGV4dCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+JHtkZXRhaWxBcmcubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj4ke2RldGFpbEFyZy52YWx1ZX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKHRleHQ5LCB0eXBlNSA9ICJUZXh0IikgewogICAgICB0cnkgewogICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQ5KTsKICAgICAgICBjb25zb2xlLmxvZyhgJHt0eXBlNX0gY29waWVkIHRvIGNsaXBib2FyZGApOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29weSAke3R5cGU1fTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb3B5QXNKc29uKCkgewogICAgICBpZiAoIXRoaXMuc3RhdHVzT2JqZWN0KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCwgbnVsbCwgMikpOwogICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29weU1haW4iKTsKICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBidXR0b24udGV4dENvbnRlbnQ7CiAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kID0gaXNEYXJrID8gImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiIDogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiOwogICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXJDb2xvciA9IGlzRGFyayA/ICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiA6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIjsKICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSBpc0RhcmsgPyAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIgOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSI7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZCA9ICIiOwogICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlckNvbG9yID0gIiI7CiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAiIjsKICAgICAgICB9LCAxNTAwKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IiwgZXJyKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNDkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczUwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRmlsZXRyZWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1maWxldHJlZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnM7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9kZWNvcmF0b3JzOwogIGxldCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90cmVlRGF0YV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzTG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JNZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZUZpbGV0cmVlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcm9vdFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90cmVlRGF0YV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0OSh0aGlzLCBudWxsLCBfcm9vdFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9vdFBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvb3RQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJvb3RQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb290UGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb290UGF0aF9pbml0aWFsaXplcnMsIF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZFBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZFBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF90cmVlRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0cmVlRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHJlZURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHJlZURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRyZWVEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RyZWVEYXRhX2luaXRpYWxpemVycywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2lzTG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTG9hZGluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2Vycm9yTWVzc2FnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvck1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yTWVzc2FnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lcnJvck1lc3NhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVycm9yTWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlRmlsZXRyZWUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyb290UGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzLCAiLyIpKTsKICAgIGdldCByb290UGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcm9vdFBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF90cmVlRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdHJlZURhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRyZWVEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xvYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Vycm9yTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2Vycm9yTWVzc2FnZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZXJyb3JNZXNzYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JNZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXJyb3JNZXNzYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGV4cGFuZGVkUGF0aHMgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7CiAgICBsb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgIC8vIENsaXBib2FyZCBzdGF0ZSBmb3IgY29weS9wYXN0ZSBvcGVyYXRpb25zCiAgICBjbGlwYm9hcmRQYXRoID0gbnVsbDsKICAgIGNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAvLyBGaWxlIHdhdGNoZXIgZm9yIGF1dG8tcmVmcmVzaAogICAgZmlsZVdhdGNoZXIgPSBudWxsOwogICAgcmVmcmVzaERlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICBsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAudHJlZS1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAudHJlZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMXB4IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkzJSkiLCAiaHNsKDAgMCUgMTQlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5NSUpIiwgImhzbCgyMTAgNTAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsICJoc2woMjEwIDEwMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5MiUpIiwgImhzbCgyMTAgNTAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uZXhwYW5kZWQgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uLmhpZGRlbiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgODAlIDQ1JSkiLCAiaHNsKDQ1IDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZpbGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLnR5cGVzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woMjExIDYwJSA0OCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmphdmFzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woNTMgOTMlIDU0JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uanNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA4MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5odG1sIHsKICAgICAgICBjb2xvcjogaHNsKDE0IDc3JSA1MiUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmNzcyB7CiAgICAgICAgY29sb3I6IGhzbCgyMjggNzclIDU5JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24ubWFya2Rvd24gewogICAgICAgIGNvbG9yOiBoc2woMCAwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODUlKSIpfTsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZXJyb3IgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiBoc2woMCA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmVtcHR5IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5maWxldHJlZS10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KICAgICAgICAgICR7dGhpcy5lcnJvck1lc3NhZ2V9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJmaWxldHJlZS10b29sYmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci10aXRsZSI+RXhwbG9yZXI8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1hY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKX0gdGl0bGU9Ik5ldyBGaWxlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZVBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKX0gdGl0bGU9Ik5ldyBGb2xkZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmb2xkZXJQbHVzIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnRyZWVEYXRhLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBmaWxlcyBmb3VuZC48L2Rpdj5gIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyZWUtY29udGFpbmVyIiBAY29udGV4dG1lbnU9JHt0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudX0+CiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclRyZWUodGhpcy50cmVlRGF0YSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgIGA7CiAgICB9CiAgICByZW5kZXJUcmVlKG5vZGVzKSB7CiAgICAgIHJldHVybiBub2Rlcy5tYXAoKG5vZGUyKSA9PiB0aGlzLnJlbmRlck5vZGUobm9kZTIpKTsKICAgIH0KICAgIHJlbmRlck5vZGUobm9kZTIpIHsKICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IjsKICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCk7CiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlMi5wYXRoID09PSB0aGlzLnNlbGVjdGVkUGF0aDsKICAgICAgY29uc3QgaWNvbkNsYXNzID0gdGhpcy5nZXRGaWxlSWNvbkNsYXNzKG5vZGUyKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRyZWUtaXRlbSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCArIG5vZGUyLmxldmVsICogMTZ9cHgiCiAgICAgICAgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMil9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke2lzRXhwYW5kZWQgPyAiZXhwYW5kZWQiIDogIiJ9ICR7IWlzRGlyZWN0b3J5ID8gImhpZGRlbiIgOiAiIn0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hldnJvblJpZ2h0In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtaWNvbiAke2ljb25DbGFzc30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24obm9kZTIpfSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1uYW1lIj4ke25vZGUyLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtpc0RpcmVjdG9yeSAmJiBpc0V4cGFuZGVkICYmIG5vZGUyLmNoaWxkcmVuID8gdGhpcy5yZW5kZXJUcmVlKG5vZGUyLmNoaWxkcmVuKSA6ICIifQogICAgYDsKICAgIH0KICAgIGdldEZpbGVJY29uKG5vZGUyKSB7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKG5vZGUyLnBhdGgpID8gImx1Y2lkZTpmb2xkZXJPcGVuIiA6ICJsdWNpZGU6Zm9sZGVyIjsKICAgICAgfQogICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgIHN3aXRjaCAoZXh0KSB7CiAgICAgICAgY2FzZSAidHMiOgogICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianMiOgogICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlSnNvbiI7CiAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICBjYXNlICJzY3NzIjoKICAgICAgICBjYXNlICJsZXNzIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICBjYXNlICJtZCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlVGV4dCI7CiAgICAgICAgY2FzZSAicG5nIjoKICAgICAgICBjYXNlICJqcGciOgogICAgICAgIGNhc2UgImpwZWciOgogICAgICAgIGNhc2UgImdpZiI6CiAgICAgICAgY2FzZSAic3ZnIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmltYWdlIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZSI7CiAgICAgIH0KICAgIH0KICAgIGdldEZpbGVJY29uQ2xhc3Mobm9kZTIpIHsKICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiKQogICAgICAgIHJldHVybiAiZm9sZGVyIjsKICAgICAgY29uc3QgZXh0ID0gbm9kZTIubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBzd2l0Y2ggKGV4dCkgewogICAgICAgIGNhc2UgInRzIjoKICAgICAgICBjYXNlICJ0c3giOgogICAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgY2FzZSAianN4IjoKICAgICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImpzb24iOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuICJodG1sIjsKICAgICAgICBjYXNlICJjc3MiOgogICAgICAgIGNhc2UgInNjc3MiOgogICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgcmV0dXJuICJjc3MiOwogICAgICAgIGNhc2UgIm1kIjoKICAgICAgICAgIHJldHVybiAibWFya2Rvd24iOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gImZpbGUiOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMikgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRGlyZWN0b3J5KG5vZGUyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkUGF0aCA9IG5vZGUyLnBhdGg7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbm9kZTIucGF0aCwgbmFtZTogbm9kZTIubmFtZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBhc3luYyB0b2dnbGVEaXJlY3Rvcnkobm9kZTIpIHsKICAgICAgaWYgKHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCkpIHsKICAgICAgICB0aGlzLmV4cGFuZGVkUGF0aHMuZGVsZXRlKG5vZGUyLnBhdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5hZGQobm9kZTIucGF0aCk7CiAgICAgICAgaWYgKCFub2RlMi5jaGlsZHJlbiB8fCBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKG5vZGUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhc3luYyBsb2FkRGlyZWN0b3J5Q29udGVudHMobm9kZTIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKG5vZGUyLnBhdGgpOwogICAgICAgIG5vZGUyLmNoaWxkcmVuID0gdGhpcy5zb3J0RW50cmllcyhlbnRyaWVzKS5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgLi4uZW50cnksCiAgICAgICAgICBsZXZlbDogbm9kZTIubGV2ZWwgKyAxLAogICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLAogICAgICAgICAgY2hpbGRyZW46IGVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiID8gW10gOiB2b2lkIDAKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZGlyZWN0b3J5ICR7bm9kZTIucGF0aH06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3RmlsZShub2RlMi5wYXRoKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3Rm9sZGVyKG5vZGUyLnBhdGgpCiAgICAgICAgfSwgeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiUmVuYW1lIiwKICAgICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnJlbmFtZUl0ZW0obm9kZTIpCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiRHVwbGljYXRlIiwKICAgICAgICBpY29uTmFtZTogImZpbGVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZHVwbGljYXRlSXRlbShub2RlMikKICAgICAgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IiwKICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jb3B5SXRlbShub2RlMikKICAgICAgfSk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IiAmJiB0aGlzLmNsaXBib2FyZFBhdGgpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbShub2RlMi5wYXRoKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5kZWxldGVJdGVtKG5vZGUyKQogICAgICB9KTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCIudHJlZS1pdGVtIikpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICAgIGljb25OYW1lOiAiZmlsZVBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKQogICAgICAgIH0KICAgICAgXTsKICAgICAgaWYgKHRoaXMuY2xpcGJvYXJkUGF0aCkgewogICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbSgiLyIpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHNob3dJbnB1dE1vZGFsKG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlMikgPT4gewogICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLAogICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7b3B0aW9ucy5sYWJlbH0KICAgICAgICAgICAgLnZhbHVlPSR7b3B0aW9ucy52YWx1ZSB8fCAiIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLmJ1dHRvbk5hbWUgfHwgIkNyZWF0ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbDIgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGNvbnRlbnRFbDI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWU/LnRyaW0oKSB8fCAiIjsKICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHJlc29sdmUyKGlucHV0VmFsdWUgfHwgbnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgbW9kYWwudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY29udGVudEVsID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik7CiAgICAgICAgaWYgKGNvbnRlbnRFbCkgewogICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgICBhd2FpdCBpbnB1dEVsZW1lbnQudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGaWxlKHBhcmVudFBhdGgpIHsKICAgICAgY29uc3QgZmlsZU5hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiTmV3IEZpbGUiLAogICAgICAgIGxhYmVsOiAiRmlsZSBuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFmaWxlTmFtZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7ZmlsZU5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7ZmlsZU5hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCAiIik7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1jcmVhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5ld1BhdGggfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGb2xkZXIocGFyZW50UGF0aCkgewogICAgICBjb25zdCBmb2xkZXJOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgaGVhZGluZzogIk5ldyBGb2xkZXIiLAogICAgICAgIGxhYmVsOiAiRm9sZGVyIG5hbWUiCiAgICAgIH0pOwogICAgICBpZiAoIWZvbGRlck5hbWUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZvbGRlck5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7Zm9sZGVyTmFtZX1gOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQubWtkaXIobmV3UGF0aCk7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZm9sZGVyLWNyZWF0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVsZXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKGBEZWxldGUgJHtub2RlMi5uYW1lfT9gKTsKICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucm0obm9kZTIucGF0aCwgeyByZWN1cnNpdmU6IG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiIH0pOwogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBwYXRoOiBub2RlMi5wYXRoLCB0eXBlOiBub2RlMi50eXBlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZW5hbWUgYSBmaWxlIG9yIGZvbGRlcgogICAgICovCiAgICBhc3luYyByZW5hbWVJdGVtKG5vZGUyKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld05hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiUmVuYW1lIiwKICAgICAgICBsYWJlbDogIk5ldyBuYW1lIiwKICAgICAgICB2YWx1ZTogbm9kZTIubmFtZSwKICAgICAgICBidXR0b25OYW1lOiAiUmVuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFuZXdOYW1lIHx8IG5ld05hbWUgPT09IG5vZGUyLm5hbWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMobm9kZTIucGF0aCwgbmV3UGF0aCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKG5vZGUyLnBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgb2xkUGF0aDogbm9kZTIucGF0aCwgbmV3UGF0aCwgdHlwZTogbm9kZTIudHlwZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogRHVwbGljYXRlIGEgZmlsZSBvciBmb2xkZXIKICAgICAqLwogICAgYXN5bmMgZHVwbGljYXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGxldCBuZXdOYW1lOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImZpbGUiKSB7CiAgICAgICAgY29uc3QgbGFzdERvdCA9IG5vZGUyLm5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICBpZiAobGFzdERvdCA+IDApIHsKICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gbm9kZTIubmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7CiAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnN1YnN0cmluZyhsYXN0RG90KTsKICAgICAgICAgIG5ld05hbWUgPSBgJHtiYXNlTmFtZX1fY29weSR7ZXh0fWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld05hbWUgPSBgJHtub2RlMi5uYW1lfV9jb3B5YDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3TmFtZSA9IGAke25vZGUyLm5hbWV9X2NvcHlgOwogICAgICB9CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhub2RlMi5wYXRoLCBuZXdQYXRoKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kdXBsaWNhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZHVwbGljYXRlIGl0ZW06IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENvcHkgaXRlbSBwYXRoIHRvIGNsaXBib2FyZAogICAgICovCiAgICBhc3luYyBjb3B5SXRlbShub2RlMikgewogICAgICB0aGlzLmNsaXBib2FyZFBhdGggPSBub2RlMi5wYXRoOwogICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9ICJjb3B5IjsKICAgIH0KICAgIC8qKgogICAgICogUGFzdGUgY29waWVkIGl0ZW0gdG8gdGFyZ2V0IGRpcmVjdG9yeQogICAgICovCiAgICBhc3luYyBwYXN0ZUl0ZW0odGFyZ2V0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRoaXMuY2xpcGJvYXJkUGF0aCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNsaXBib2FyZFBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAicGFzdGVkIjsKICAgICAgY29uc3QgbmV3UGF0aCA9IHRhcmdldFBhdGggPT09ICIvIiA/IGAvJHtuYW1lfWAgOiBgJHt0YXJnZXRQYXRofS8ke25hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlNvdXJjZSBmaWxlIG5vIGxvbmdlciBleGlzdHMiKTsKICAgICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUodGhpcy5jbGlwYm9hcmRQYXRoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKG5ld1BhdGgsIGNvbnRlbnQzKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHRoaXMuY2xpcGJvYXJkUGF0aCwgbmV3UGF0aCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcGFzdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IHRoaXMuY2xpcGJvYXJkUGF0aCwgdGFyZ2V0UGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgdGhpcy5jbGlwYm9hcmRPcGVyYXRpb24gPSBudWxsOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWN1cnNpdmVseSBjb3B5IGRpcmVjdG9yeSBjb250ZW50cyB0byBhIG5ldyBwYXRoCiAgICAgKi8KICAgIGFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhzb3VyY2VQYXRoLCBkZXN0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKGRlc3RQYXRoKTsKICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihzb3VyY2VQYXRoKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3Qgc3JjRW50cnlQYXRoID0gc291cmNlUGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke3NvdXJjZVBhdGh9LyR7ZW50cnkubmFtZX1gOwogICAgICAgIGNvbnN0IGRlc3RFbnRyeVBhdGggPSBkZXN0UGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke2Rlc3RQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHNyY0VudHJ5UGF0aCwgZGVzdEVudHJ5UGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShzcmNFbnRyeVBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZGVzdEVudHJ5UGF0aCwgY29udGVudDMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikpIHsKICAgICAgICBpZiAodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgIT09IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgIHRoaXMuc3RvcEZpbGVXYXRjaGVyKCk7CiAgICAgICAgICB0aGlzLmxhc3RFeGVjdXRpb25FbnZpcm9ubWVudCA9IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICAgICAgICB0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCk7CiAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc3RhcnRGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMuZmlsZVdhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvIiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZpbGUgd2F0Y2hpbmcgbm90IHN1cHBvcnRlZDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIHN0b3BGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMuZmlsZVdhdGNoZXIpIHsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKTsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFRyZWUoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICh0aGlzLmxvYWRUcmVlU3RhcnRlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gdHJ1ZTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICIiOwogICAgICB0cnkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIodGhpcy5yb290UGF0aCk7CiAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMuc29ydEVudHJpZXMoZW50cmllcykubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAgIC4uLmVudHJ5LAogICAgICAgICAgbGV2ZWw6IDAsCiAgICAgICAgICBleHBhbmRlZDogZmFsc2UsCiAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtlcnJvcn1gOwogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGZpbGUgdHJlZToiLCBlcnJvcik7CiAgICAgICAgdGhpcy5sb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzb3J0RW50cmllcyhlbnRyaWVzKSB7CiAgICAgIHJldHVybiBlbnRyaWVzLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICAgIGlmIChhNS50eXBlICE9PSBiNS50eXBlKSB7CiAgICAgICAgICByZXR1cm4gYTUudHlwZSA9PT0gImRpcmVjdG9yeSIgPyAtMSA6IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhNS5uYW1lLmxvY2FsZUNvbXBhcmUoYjUubmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgcmVmcmVzaCgpIHsKICAgICAgdGhpcy5leHBhbmRlZFBhdGhzLmNsZWFyKCk7CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgIH0KICAgIHNlbGVjdEZpbGUocGF0aDIpIHsKICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBwYXRoMjsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X3NlcnZpY2VzKCk7CnZhciBfX2VzRGVjb3JhdGU1MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfY29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2RlY29yYXRvcnM7CiAgbGV0IF9saW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfY29tbWFuZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xpbmVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUyKHRoaXMsIG51bGwsIF9jb21tYW5kX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29tbWFuZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29tbWFuZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb21tYW5kX2luaXRpYWxpemVycywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Mih0aGlzLCBudWxsLCBfbGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5saW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9saW5lc19pbml0aWFsaXplcnMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgIC5jb21tYW5kPSR7InBucG0gaW5zdGFsbCJ9CiAgICAgIC5saW5lcz0ke1sKICAgICAgIlBhY2thZ2VzOiArNDIiLAogICAgICAiUHJvZ3Jlc3M6IHJlc29sdmVkIDE0MiwgcmV1c2VkIDE0MCwgZG93bmxvYWRlZCAyLCBhZGRlZCA0MiwgZG9uZSIsCiAgICAgICIiLAogICAgICAiZGVwZW5kZW5jaWVzOiIsCiAgICAgICIrIEBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSA0LjIuMyIsCiAgICAgICIrIHR5cGVzY3JpcHQgNS4zLjMiLAogICAgICAiIiwKICAgICAgIkRvbmUgaW4gMi4zcyIKICAgIF19CiAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Myh0aGlzLCBfY29tbWFuZF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8qKgogICAgICogVGhlIGNvbW1hbmQgYmVpbmcgZGlzcGxheWVkIChzaG93biBpbiBoZWFkZXIpCiAgICAgKi8KICAgIGdldCBjb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbW1hbmQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvKioKICAgICAqIE91dHB1dCBsaW5lcyB0byBkaXNwbGF5CiAgICAgKi8KICAgIGdldCBsaW5lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB0ZXJtaW5hbCA9IChfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZml0QWRkb24gPSBudWxsOwogICAgbGFzdExpbmVDb3VudCA9IDA7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItY29tbWFuZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAjeHRlcm0tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIEN1c3RvbSBzY3JvbGxiYXIgZm9yIHh0ZXJtIHZpZXdwb3J0ICovCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzAlKSIsICJoc2woMCAwJSAzNSUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWljb24iPiQ8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWNvbW1hbmQiPiR7dGhpcy5jb21tYW5kIHx8ICJXYWl0aW5nLi4uIn08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9Inh0ZXJtLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRlcm1pbmFsIHRoZW1lIGNvbG9ycyBiYXNlZCBvbiBicmlnaHQvZGFyayBtb2RlCiAgICAgKi8KICAgIGdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpIHsKICAgICAgcmV0dXJuIGlzQnJpZ2h0ID8gewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yQWNjZW50OiAiI2ZmZmZmZiIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC4yKSIKICAgICAgfSA6IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMDAwMCIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvcjogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvckFjY2VudDogIiMwMDAwMDAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikiCiAgICAgIH07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJ4dGVybS1jb250YWluZXIiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgXSk7CiAgICAgIHRoaXMudGVybWluYWwgPSBuZXcgeHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgIGNvbnZlcnRFb2w6IHRydWUsCiAgICAgICAgY3Vyc29yQmxpbms6IGZhbHNlLAogICAgICAgIGRpc2FibGVTdGRpbjogdHJ1ZSwKICAgICAgICBmb250U2l6ZTogMTIsCiAgICAgICAgZm9udEZhbWlseTogIidTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2UiLAogICAgICAgIHRoZW1lOiB0aGlzLmdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpLAogICAgICAgIHNjcm9sbGJhY2s6IDFlMwogICAgICB9KTsKICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBpZiAodGhpcy50ZXJtaW5hbCkgewogICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGdvQnJpZ2h0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgIHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuZml0QWRkb24pOwogICAgICB0aGlzLnRlcm1pbmFsLm9wZW4oY29udGFpbmVyKTsKICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuZml0QWRkb24pIHsKICAgICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGluZXMiKSkgewogICAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgICB9CiAgICB9CiAgICB3cml0ZU5ld0xpbmVzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdMaW5lcyA9IHRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG5ld0xpbmVzKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGxpbmUpOwogICAgICB9CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IHRoaXMubGluZXMubGVuZ3RoOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDsKICAgICAgfQogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYSBuZXcgbGluZSB0byB0aGUgb3V0cHV0CiAgICAgKi8KICAgIGFkZExpbmUobGluZSkgewogICAgICB0aGlzLmxpbmVzID0gWy4uLnRoaXMubGluZXMsIGxpbmVdOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgb3V0cHV0IGxpbmVzCiAgICAgKi8KICAgIGNsZWFyKCkgewogICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IDA7CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5jbGVhcigpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczUzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NjcmlwdHNfZGVjb3JhdG9yczsKICBsZXQgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9zY3JpcHRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0NoZWNraW5nUGFja2FnZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfc2NyaXB0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzY3JpcHRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzY3JpcHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNjcmlwdHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNjcmlwdHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2NyaXB0c19pbml0aWFsaXplcnMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX3BhY2thZ2VTdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGFja2FnZVN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFja2FnZVN0YXR1cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWNrYWdlU3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wYWNrYWdlU3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhY2thZ2VTdGF0dXNfaW5pdGlhbGl6ZXJzLCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUzKHRoaXMsIG51bGwsIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dGRhdGVkUGFja2FnZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dGRhdGVkUGFja2FnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0ZGF0ZWRQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0ZGF0ZWRQYWNrYWdlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfaXNDaGVja2luZ1BhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzQ2hlY2tpbmdQYWNrYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNDaGVja2luZ1BhY2thZ2VzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQ2hlY2tpbmdQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNDaGVja2luZ1BhY2thZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NjcmlwdHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzLCB7fSkpOwogICAgLy8gU2NyaXB0IHJ1bm5lciBzdGF0ZQogICAgZ2V0IHNjcmlwdHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzY3JpcHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2NyaXB0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2NyaXB0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfcGFja2FnZVN0YXR1c19pbml0aWFsaXplcnMsICJpZGxlIikpOwogICAgLy8gUGFja2FnZSBjaGVja2VyIHN0YXRlCiAgICBnZXQgcGFja2FnZVN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWNrYWdlU3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvdXRkYXRlZFBhY2thZ2VzKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dGRhdGVkUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI291dGRhdGVkUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0NoZWNraW5nUGFja2FnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0NoZWNraW5nUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzQ2hlY2tpbmdQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcGFja2FnZSB1cGRhdGUgdGhhdCBzaG91bGQgdHJpZ2dlciByZWZyZXNoCiAgICBwZW5kaW5nUGFja2FnZVVwZGF0ZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpLCBmYWxzZSk7CiAgICAvLyBCb3VuZCBoYW5kbGVyIGZvciBwcm9jZXNzLWNvbXBsZXRlIGV2ZW50cwogICAgaGFuZGxlUHJvY2Vzc0NvbXBsZXRlID0gKGUxMSkgPT4gewogICAgICBpZiAodGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZSkgewogICAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSBmYWxzZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tQYWNrYWdlcygpLCA1MDApOwogICAgICB9CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLndpZGdldC5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwLXRvLWRhdGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwZGF0ZXMtYXZhaWxhYmxlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5zcGlubmluZyB7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIFNjcmlwdCBSdW5uZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNjcmlwdENsaWNrfQogICAgICAgICAgdGl0bGU9IlJ1biBzY3JpcHQiCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6cGxheSJ9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlNjcmlwdHM8L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PgoKICAgICAgICA8IS0tIFBhY2thZ2UgQ2hlY2tlciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCAke3RoaXMuZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCl9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVQYWNrYWdlQ2xpY2t9CiAgICAgICAgICB0aXRsZT0iJHt0aGlzLmdldFBhY2thZ2VUb29sdGlwKCl9IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt0aGlzLmdldFBhY2thZ2VJY29uKCl9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+JHt0aGlzLmdldFBhY2thZ2VTdGF0dXNUZXh0KCl9PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIEZ1dHVyZSB3aWRnZXRzIGNhbiBiZSBhZGRlZCBoZXJlIC0tPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikgJiYgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBTY3JpcHQgUnVubmVyID09PT09PT09PT0KICAgIGFzeW5jIGxvYWRTY3JpcHRzKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnNjcmlwdHMgPSB7fTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvcGFja2FnZS5qc29uIik7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQzKTsKICAgICAgICB0aGlzLnNjcmlwdHMgPSBwYWNrYWdlSnNvbi5zY3JpcHRzIHx8IHt9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLCBlcnJvcik7CiAgICAgICAgdGhpcy5zY3JpcHRzID0ge307CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGhhbmRsZVNjcmlwdENsaWNrKGUxMSkgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IHNjcmlwdE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTsKICAgICAgaWYgKHNjcmlwdE5hbWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbXMgPSBzY3JpcHROYW1lcy5tYXAoKG5hbWUpID0+ICh7CiAgICAgICAgbmFtZSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNjcmlwdChuYW1lKTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHJ1blNjcmlwdChzY3JpcHROYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICB0eXBlOiAic2NyaXB0IiwKICAgICAgICBsYWJlbDogc2NyaXB0TmFtZSwKICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgYXJnczogWyJydW4iLCBzY3JpcHROYW1lXSwKICAgICAgICBtZXRhZGF0YTogeyBzY3JpcHROYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PSBQYWNrYWdlIENoZWNrZXIgPT09PT09PT09PQogICAgYXN5bmMgY2hlY2tQYWNrYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImlkbGUiOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiaWRsZSI7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJjaGVja2luZyI7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSB0cnVlOwogICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bigicG5wbSIsIFsib3V0ZGF0ZWQiLCAiLS1qc29uIl0pOwogICAgICAgIGxldCBvdXRwdXQgPSAiIjsKICAgICAgICBjb25zdCBvdXRwdXRSZWFkZXIgPSBwcm9jZXNzNC5vdXRwdXQuZ2V0UmVhZGVyKCk7CiAgICAgICAgY29uc3QgcmVhZE91dHB1dCA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZTogdmFsdWUyIH0gPSBhd2FpdCBvdXRwdXRSZWFkZXIucmVhZCgpOwogICAgICAgICAgICAgIGlmIChkb25lKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgb3V0cHV0ICs9IHZhbHVlMjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICByZWFkT3V0cHV0KCk7CiAgICAgICAgY29uc3QgZXhpdENvZGUgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgcHJvY2VzczQuZXhpdCwKICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlMigtMSksIDFlNCkpCiAgICAgICAgXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IG91dHB1dFJlYWRlci5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAtMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJQYWNrYWdlIGNoZWNrIHRpbWVkIG91dCIpOwogICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImVycm9yIjsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAwKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgb3V0ZGF0ZWREYXRhID0gSlNPTi5wYXJzZShvdXRwdXQpOwogICAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSB0aGlzLnBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhvdXRkYXRlZERhdGEpOwogICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoID4gMCA/ICJ1cGRhdGVzLWF2YWlsYWJsZSIgOiAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gInVwZGF0ZXMtYXZhaWxhYmxlIjsKICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXM6IiwgZXJyb3IpOwogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJlcnJvciI7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgcGFyc2VPdXRkYXRlZFBhY2thZ2VzKGRhdGEpIHsKICAgICAgY29uc3QgcGFja2FnZXMgPSBbXTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiBkYXRhICE9PSBudWxsKSB7CiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHsKICAgICAgICAgIGNvbnN0IHBrZ0luZm8gPSBpbmZvOwogICAgICAgICAgcGFja2FnZXMucHVzaCh7CiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGN1cnJlbnQ6IHBrZ0luZm8uY3VycmVudCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHdhbnRlZDogcGtnSW5mby53YW50ZWQgfHwgcGtnSW5mby5jdXJyZW50IHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgbGF0ZXN0OiBwa2dJbmZvLmxhdGVzdCB8fCBwa2dJbmZvLndhbnRlZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHR5cGU6IHBrZ0luZm8uZGVwZW5kZW5jeVR5cGUgPT09ICJkZXZEZXBlbmRlbmNpZXMiID8gImRldkRlcGVuZGVuY2llcyIgOiAiZGVwZW5kZW5jaWVzIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWNrYWdlczsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVBhY2thZ2VDbGljayhlMTEpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbXTsKICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgIG5hbWU6IHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzID8gIkNoZWNraW5nLi4uIiA6ICJDaGVjayBmb3IgdXBkYXRlcyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaEN3IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZGV0YWlsID0gewogICAgICAgICAgICB0eXBlOiAicGFja2FnZS11cGRhdGUiLAogICAgICAgICAgICBsYWJlbDogImNoZWNrIHBhY2thZ2VzIiwKICAgICAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgICAgICBhcmdzOiBbIm91dGRhdGVkIl0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrUGFja2FnZXMoKSwgM2UzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgY29uc3QgZGlzcGxheVBhY2thZ2VzID0gdGhpcy5vdXRkYXRlZFBhY2thZ2VzLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3IgKGNvbnN0IHBrZyBvZiBkaXNwbGF5UGFja2FnZXMpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogYCR7cGtnLm5hbWV9OiAke3BrZy5jdXJyZW50fSBcdTIxOTIgJHtwa2cubGF0ZXN0fWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBhY2thZ2UiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2UocGtnLm5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggPiAxMCkgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBgLi4uIGFuZCAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggLSAxMH0gbW9yZWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vcmVIb3Jpem9udGFsIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgbmFtZTogIlVwZGF0ZSBhbGwgcGFja2FnZXMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6YXJyb3dVcENpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGxQYWNrYWdlcygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVQYWNrYWdlKHBhY2thZ2VOYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogYHVwZGF0ZSAke3BhY2thZ2VOYW1lfWAsCiAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0IiwgcGFja2FnZU5hbWVdLAogICAgICAgIG1ldGFkYXRhOiB7IHBhY2thZ2VOYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlQWxsUGFja2FnZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogInVwZGF0ZSBhbGwiLAogICAgICAgIGNvbW1hbmQ6ICJwbnBtIiwKICAgICAgICBhcmdzOiBbInVwZGF0ZSIsICItLWxhdGVzdCJdCiAgICAgIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsCiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gSGVscGVyIE1ldGhvZHMgPT09PT09PT09PQogICAgZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCkgewogICAgICBpZiAodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICByZXR1cm4gdGhpcy5wYWNrYWdlU3RhdHVzOwogICAgfQogICAgZ2V0UGFja2FnZUljb24oKSB7CiAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICByZXR1cm4gImx1Y2lkZTpsb2FkZXIyIjsKICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VTdGF0dXMpIHsKICAgICAgICBjYXNlICJ1cC10by1kYXRlIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmNoZWNrQ2lyY2xlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTphbGVydENpcmNsZSI7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6eENpcmNsZSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2UiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlU3RhdHVzVGV4dCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcuLi4iOwogICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZVN0YXR1cykgewogICAgICAgIGNhc2UgInVwLXRvLWRhdGUiOgogICAgICAgICAgcmV0dXJuICJVcCB0byBkYXRlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9YDsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICByZXR1cm4gIkNoZWNrIGZhaWxlZCI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiUGFja2FnZXMiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlVG9vbHRpcCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcgZm9yIHBhY2thZ2UgdXBkYXRlcy4uLiI7CiAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlU3RhdHVzKSB7CiAgICAgICAgY2FzZSAidXAtdG8tZGF0ZSI6CiAgICAgICAgICByZXR1cm4gIkFsbCBwYWNrYWdlcyBhcmUgdXAgdG8gZGF0ZSI7CiAgICAgICAgY2FzZSAidXBkYXRlcy1hdmFpbGFibGUiOgogICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9IGF2YWlsYWJsZWA7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY2hlY2sgZm9yIHVwZGF0ZXMuIENsaWNrIHRvIHJldHJ5LiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiQ2xpY2sgdG8gY2hlY2sgZm9yIHBhY2thZ2UgdXBkYXRlcyI7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIE1ldGhvZHMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgcGFja2FnZSBjaGVjawogICAgICovCiAgICBhc3luYyByZWZyZXNoUGFja2FnZVN0YXR1cygpIHsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICAvKioKICAgICAqIE1hbnVhbGx5IHJlbG9hZCBzY3JpcHRzIGZyb20gcGFja2FnZS5qc29uCiAgICAgKi8KICAgIGFzeW5jIHJlZnJlc2hTY3JpcHRzKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL3R5cGVzY3JpcHQtaW50ZWxsaXNlbnNlLmpzCnZhciBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciA9IGNsYXNzIHsKICBsb2FkZWRMaWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBub3RGb3VuZFBhY2thZ2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAvLyBQYWNrYWdlcyBjaGVja2VkIGJ1dCBub3QgZm91bmQKICBtb25hY29JbnN0YW5jZSA9IG51bGw7CiAgZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogIC8vIENhY2hlIG9mIGZpbGUgY29udGVudHMgZm9yIHN5bmNocm9ub3VzIGFjY2VzcyBhbmQgbW9kdWxlIHJlc29sdXRpb24KICBmaWxlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIC8vIFRyYWNrIGV4dHJhIGxpYnMgYWRkZWQgZm9yIGNsZWFudXAKICBhZGRlZEV4dHJhTGlicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgLyoqCiAgICogR2V0IFR5cGVTY3JpcHQgQVBJIHdpdGggcHJvcGVyIHR5cGluZyBmb3IgTW9uYWNvIDAuNTUrCiAgICovCiAgZ2V0IHRzQXBpKCkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0aGlzLm1vbmFjb0luc3RhbmNlLmxhbmd1YWdlcy50eXBlc2NyaXB0OwogIH0KICAvKioKICAgKiBJbml0aWFsaXplIHdpdGggTW9uYWNvIGFuZCBleGVjdXRpb24gZW52aXJvbm1lbnQKICAgKi8KICBhc3luYyBpbml0KG1vbmFjb0luc3QsIGVudjIpIHsKICAgIHRoaXMubW9uYWNvSW5zdGFuY2UgPSBtb25hY29JbnN0OwogICAgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCA9IGVudjI7CiAgICB0aGlzLmNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpOwogICAgYXdhaXQgdGhpcy5sb2FkQWxsUHJvamVjdEZpbGVzKCk7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgYWxsIC50cy8uanMgZmlsZXMgZnJvbSB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGludG8gTW9uYWNvCiAgICovCiAgYXN5bmMgbG9hZEFsbFByb2plY3RGaWxlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRmlsZXNGcm9tRGlyZWN0b3J5KCIvIik7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeQogICAqLwogIGFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZGlyUGF0aCkgewogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgIGNvbnN0IGV4dCA9IGVudHJ5Lm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChleHQgPT09ICJ0cyIgfHwgZXh0ID09PSAidHN4IiB8fCBleHQgPT09ICJqcyIgfHwgZXh0ID09PSAianN4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShmdWxsUGF0aCk7CiAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlTW9kZWwoZnVsbFBhdGgsIGNvbnRlbnQzKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBjb25maWd1cmVDb21waWxlck9wdGlvbnMoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHsKICAgICAgdGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDIwLAogICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LAogICAgICAvLyBVc2UgQnVuZGxlciByZXNvbHV0aW9uIGlmIGF2YWlsYWJsZSAoTW9uYWNvIDAuNDUrKSwgZmFsbGJhY2sgdG8gTm9kZUpzCiAgICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLkJ1bmRsZXIgPz8gdHMuTW9kdWxlUmVzb2x1dGlvbktpbmQuTm9kZUpzLAogICAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLAogICAgICBlc01vZHVsZUludGVyb3A6IHRydWUsCiAgICAgIHN0cmljdDogdHJ1ZSwKICAgICAgbm9FbWl0OiB0cnVlLAogICAgICBhbGxvd0pzOiB0cnVlLAogICAgICBjaGVja0pzOiBmYWxzZSwKICAgICAgYWxsb3dOb25Uc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIGxpYjogWyJlczIwMjAiLCAiZG9tIiwgImRvbS5pdGVyYWJsZSJdLAogICAgICAvLyBTZXQgYmFzZVVybCB0byByb290IGZvciByZXNvbHZpbmcgYWJzb2x1dGUgaW1wb3J0cwogICAgICBiYXNlVXJsOiAiLyIsCiAgICAgIC8vIEFsbG93IGltcG9ydGluZyAudHMgZXh0ZW5zaW9ucyBkaXJlY3RseSAodXNlZnVsIGZvciBzb21lIHNldHVwcykKICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIC8vIFJlc29sdmUgSlNPTiBtb2R1bGVzCiAgICAgIHJlc29sdmVKc29uTW9kdWxlOiB0cnVlCiAgICB9KTsKICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoewogICAgICBub1NlbWFudGljVmFsaWRhdGlvbjogZmFsc2UsCiAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2UKICAgIH0pOwogICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLnNldEVhZ2VyTW9kZWxTeW5jKHRydWUpOwogIH0KICAvKioKICAgKiBQYXJzZSBpbXBvcnRzIGZyb20gVHlwZVNjcmlwdC9KYXZhU2NyaXB0IGNvbnRlbnQKICAgKi8KICBwYXJzZUltcG9ydHMoY29udGVudDMpIHsKICAgIGNvbnN0IGltcG9ydHMgPSBbXTsKICAgIGNvbnN0IGltcG9ydFJlZ2V4ID0gL2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nOwogICAgbGV0IG1hdGNoMjsKICAgIHdoaWxlICgobWF0Y2gyID0gaW1wb3J0UmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVccypcKFxzKlsnIl0oW14nIl0rKVsnIl1ccypcKS9nOwogICAgd2hpbGUgKChtYXRjaDIgPSByZXF1aXJlUmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFsuLi5uZXcgU2V0KGltcG9ydHMpXTsKICB9CiAgLyoqCiAgICogTG9hZCB0eXBlIGRlZmluaXRpb25zIGZvciBhIHBhY2thZ2UgZnJvbSB2aXJ0dWFsIEZTCiAgICovCiAgYXN5bmMgbG9hZFR5cGVzRm9yUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICBpZiAodGhpcy5sb2FkZWRMaWJzLmhhcyhwYWNrYWdlTmFtZSkpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKSkKICAgICAgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgbGV0IHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKTsKICAgICAgaWYgKCF0eXBlc0xvYWRlZCkgewogICAgICAgIHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICB9CiAgICAgIGlmICh0eXBlc0xvYWRlZCkgewogICAgICAgIHRoaXMubG9hZGVkTGlicy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubm90Rm91bmRQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIHR5cGVzIGZvciAke3BhY2thZ2VOYW1lfTpgLCBlcnJvcik7CiAgICB9CiAgfQogIGFzeW5jIHRyeUxvYWRQYWNrYWdlVHlwZXMocGFja2FnZU5hbWUpIHsKICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGJhc2VQYXRoID0gYC9ub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgdHJ5IHsKICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7YmFzZVBhdGh9L3BhY2thZ2UuanNvbmA7CiAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMocGFja2FnZUpzb25QYXRoKTsKICAgICAgaWYgKHBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgpOwogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQpOwogICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihwYWNrYWdlSnNvbkNvbnRlbnQsIGBmaWxlOi8vJHtwYWNrYWdlSnNvblBhdGh9YCk7CiAgICAgICAgY29uc3QgdHlwZXNQYXRoID0gcGFja2FnZUpzb24udHlwZXMgfHwgcGFja2FnZUpzb24udHlwaW5nczsKICAgICAgICBpZiAodHlwZXNQYXRoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb21tb25QYXRocyA9IFsKICAgICAgICBgJHtiYXNlUGF0aH0vaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2Rpc3QvaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2xpYi9pbmRleC5kLnRzYAogICAgICBdOwogICAgICBmb3IgKGNvbnN0IGR0c1BhdGggb2YgY29tbW9uUGF0aHMpIHsKICAgICAgICBpZiAoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoZHRzUGF0aCkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoYmFzZVBhdGgpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhY2thZ2UgdHlwZXMgZm9yICR7cGFja2FnZU5hbWV9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBsb2FkIGFsbCAuZC50cyBmaWxlcyBmcm9tIGEgcGFja2FnZSBkaXJlY3RvcnkKICAgKi8KICBhc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCkgewogICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8ICF0cykKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGJhc2VQYXRoKTsKICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgbG9hZCAuZC50cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5CiAgICovCiAgYXN5bmMgbG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShkaXJQYXRoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRzKQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgiLmQudHMiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGZ1bGxQYXRoKTsKICAgICAgICAgICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGNvbnRlbnQzLCBgZmlsZTovLyR7ZnVsbFBhdGh9YCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBhc3luYyB0cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgdHlwZXNQYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoIkAiKSA/IGBAdHlwZXMvJHtwYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKCIvIiwgIl9fIil9YCA6IGBAdHlwZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3R5cGVzUGFja2FnZU5hbWV9YDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluZGV4UGF0aCA9IGAke2Jhc2VQYXRofS9pbmRleC5kLnRzYDsKICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGluZGV4UGF0aCkpIHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBQcm9jZXNzIGNvbnRlbnQgY2hhbmdlIGFuZCBsb2FkIHR5cGVzIGZvciBhbnkgbmV3IGltcG9ydHMKICAgKi8KICBhc3luYyBwcm9jZXNzQ29udGVudENoYW5nZShjb250ZW50MykgewogICAgY29uc3QgaW1wb3J0cyA9IHRoaXMucGFyc2VJbXBvcnRzKGNvbnRlbnQzKTsKICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgaW1wb3J0cykgewogICAgICBpZiAoIXRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBTY2FuIG5vZGVfbW9kdWxlcyBmb3IgcGFja2FnZXMgYW5kIGxvYWQgdHlwZXMgZm9yIGFueSBub3QgeWV0IGxvYWRlZC4KICAgKiBDYWxsZWQgd2hlbiBub2RlX21vZHVsZXMgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKS4KICAgKi8KICBhc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7CiAgICB0cnkgewogICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbm9kZV9tb2R1bGVzIikpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKCIvbm9kZV9tb2R1bGVzIik7CiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgIGlmIChlbnRyeS50eXBlICE9PSAiZGlyZWN0b3J5IikKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoIkAiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgc2NvcGVkUGF0aCA9IGAvbm9kZV9tb2R1bGVzLyR7ZW50cnkubmFtZX1gOwogICAgICAgICAgICBjb25zdCBzY29wZWRFbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHNjb3BlZFBhdGgpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZEVudHJ5IG9mIHNjb3BlZEVudHJpZXMpIHsKICAgICAgICAgICAgICBpZiAoc2NvcGVkRW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gYCR7ZW50cnkubmFtZX0vJHtzY29wZWRFbnRyeS5uYW1lfWA7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghZW50cnkubmFtZS5zdGFydHNXaXRoKCIuIikpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShlbnRyeS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHNjYW4gbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgIH0KICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBtb2RlbCB0byBNb25hY28gZm9yIGNyb3NzLWZpbGUgSW50ZWxsaVNlbnNlCiAgICogQWxzbyByZWdpc3RlcnMgdGhlIGZpbGUgd2l0aCBUeXBlU2NyaXB0IHZpYSBhZGRFeHRyYUxpYiBmb3IgbW9kdWxlIHJlc29sdXRpb24KICAgKi8KICBhZGRGaWxlTW9kZWwocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZmlsZUNhY2hlLnNldChwYXRoMiwgY29udGVudDMpOwogICAgY29uc3QgdXJpID0gdGhpcy5tb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3BhdGgyfWApOwogICAgY29uc3QgZXhpc3RpbmdNb2RlbCA9IHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICBpZiAoZXhpc3RpbmdNb2RlbCkgewogICAgICBpZiAoZXhpc3RpbmdNb2RlbC5nZXRWYWx1ZSgpICE9PSBjb250ZW50MykgewogICAgICAgIGV4aXN0aW5nTW9kZWwuc2V0VmFsdWUoY29udGVudDMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMik7CiAgICAgIHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKGNvbnRlbnQzLCBsYW5ndWFnZSwgdXJpKTsKICAgIH0KICAgIHRoaXMuYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKTsKICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBhcyBhbiBleHRyYSBsaWIgZm9yIFR5cGVTY3JpcHQgbW9kdWxlIHJlc29sdXRpb24uCiAgICogVGhpcyBlbmFibGVzIFR5cGVTY3JpcHQgdG8gcmVzb2x2ZSBpbXBvcnRzIHRvIHByb2plY3QgZmlsZXMuCiAgICovCiAgYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWRkZWRFeHRyYUxpYnMuZ2V0KHBhdGgyKTsKICAgIGlmIChleGlzdGluZykgewogICAgICBleGlzdGluZy5kaXNwb3NlKCk7CiAgICB9CiAgICBjb25zdCBmaWxlUGF0aCA9IGBmaWxlOi8vJHtwYXRoMn1gOwogICAgY29uc3QgZGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywgZmlsZVBhdGgpOwogICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQocGF0aDIsIGRpc3Bvc2FibGUpOwogICAgaWYgKHBhdGgyLmVuZHNXaXRoKCIudHMiKSAmJiAhcGF0aDIuZW5kc1dpdGgoIi5kLnRzIikpIHsKICAgICAgY29uc3QganNQYXRoID0gcGF0aDIucmVwbGFjZSgvXC50cyQvLCAiLmpzIik7CiAgICAgIGNvbnN0IGpzRmlsZVBhdGggPSBgZmlsZTovLyR7anNQYXRofWA7CiAgICAgIGNvbnN0IGpzRGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywganNGaWxlUGF0aCk7CiAgICAgIHRoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGpzUGF0aCwganNEaXNwb3NhYmxlKTsKICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KGpzUGF0aCwgY29udGVudDMpOwogICAgfSBlbHNlIGlmIChwYXRoMi5lbmRzV2l0aCgiLnRzeCIpKSB7CiAgICAgIGNvbnN0IGpzeFBhdGggPSBwYXRoMi5yZXBsYWNlKC9cLnRzeCQvLCAiLmpzeCIpOwogICAgICBjb25zdCBqc3hGaWxlUGF0aCA9IGBmaWxlOi8vJHtqc3hQYXRofWA7CiAgICAgIGNvbnN0IGpzeERpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGpzeEZpbGVQYXRoKTsKICAgICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQoanN4UGF0aCwganN4RGlzcG9zYWJsZSk7CiAgICAgIHRoaXMuZmlsZUNhY2hlLnNldChqc3hQYXRoLCBjb250ZW50Myk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgZmlsZSBjb250ZW50IGZvciBzeW5jaHJvbm91cyBhY2Nlc3MKICAgKi8KICBnZXRGaWxlQ29udGVudChwYXRoMikgewogICAgcmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChwYXRoMik7CiAgfQogIGdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpIHsKICAgIGNvbnN0IGV4dCA9IHBhdGgyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICBzd2l0Y2ggKGV4dCkgewogICAgICBjYXNlICJ0cyI6CiAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgY2FzZSAianMiOgogICAgICBjYXNlICJqc3giOgogICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgIGNhc2UgImpzb24iOgogICAgICAgIHJldHVybiAianNvbiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJwbGFpbnRleHQiOwogICAgfQogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3JpZ2luYWxDb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkQ29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3JpZ2luYWxDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcmlnaW5hbENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcmlnaW5hbENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kaWZpZWRDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kaWZpZWRDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RpZmllZENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgX21vZGlmaWVkQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9yaWdpbmFsTGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9yaWdpbmFsTGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxMYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3JpZ2luYWxMYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgX29yaWdpbmFsTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RpZmllZExhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZExhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGlmaWVkTGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGlmaWVkTGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMsIF9tb2RpZmllZExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3IyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IKICAgICAgLm9yaWdpbmFsQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIik7XG59J30KICAgICAgLm1vZGlmaWVkQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIFdvcmxkISIpO1xuICByZXR1cm4gdHJ1ZTtcbn0nfQogICAgICAubGFuZ3VhZ2U9JHsidHlwZXNjcmlwdCJ9CiAgICAgIC5maWxlUGF0aD0keyIvZGVtby9leGFtcGxlLnRzIn0KICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAvLyBJTlNUQU5DRQogICAgZGlmZkVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IG9yaWdpbmFsQ29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsQ29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3JpZ2luYWxDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kaWZpZWRDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtb2RpZmllZENvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RpZmllZENvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9tb2RpZmllZENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgIkRpc2sgVmVyc2lvbiIpKTsKICAgIGdldCBvcmlnaW5hbExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jb3JpZ2luYWxMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzLCAiTG9jYWwgVmVyc2lvbiIpKTsKICAgIGdldCBtb2RpZmllZExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kaWZpZWRMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGlmaWVkTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGRpZmZFZGl0b3IgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIG9yaWdpbmFsTW9kZWwgPSBudWxsOwogICAgbW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmRpZmYtaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGlmZi1sYWJlbHMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmRpZmYtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlmZi1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5maWxlUGF0aC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJmaWxlIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJkaWZmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLWluZm8iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlmZi1maWxlbmFtZSI+JHtmaWxlTmFtZX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7CiAgICAgIGF3YWl0IHRoaXMuaW5pdERpZmZFZGl0b3IoKTsKICAgIH0KICAgIGFzeW5jIGluaXREaWZmRWRpdG9yKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpOwogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgbGV0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgY29uc3QgY2hlY2tNb25hY28gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubW9uYWNvKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vbmFjbyk7CiAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9KTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICAgICAgY29uc3Qgb3JpZ2luYWxVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICBjb25zdCBtb2RpZmllZFVyaSA9IG1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZGlmZjovL21vZGlmaWVkLyR7dGltZXN0YW1wMn0ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCwgdGhpcy5sYW5ndWFnZSwgb3JpZ2luYWxVcmkpOwogICAgICB0aGlzLm1vZGlmaWVkTW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5tb2RpZmllZENvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIG1vZGlmaWVkVXJpKTsKICAgICAgdGhpcy5kaWZmRWRpdG9yID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZURpZmZFZGl0b3IoY29udGFpbmVyLCB7CiAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLAogICAgICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICAgICAvLyBBbGxvdyBlZGl0aW5nIHRoZSBtb2RpZmllZCAobG9jYWwpIHNpZGUKICAgICAgICBvcmlnaW5hbEVkaXRhYmxlOiBmYWxzZSwKICAgICAgICAvLyBEaXNrIHZlcnNpb24gaXMgcmVhZC1vbmx5CiAgICAgICAgcmVuZGVyU2lkZUJ5U2lkZTogdHJ1ZSwKICAgICAgICBpZ25vcmVUcmltV2hpdGVzcGFjZTogZmFsc2UsCiAgICAgICAgZm9udFNpemU6IDE0LAogICAgICAgIG1pbmltYXA6IHsKICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgfQogICAgICB9KTsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldFRoZW1lKGluaXRpYWxUaGVtZSk7CiAgICAgIHRoaXMuZGlmZkVkaXRvci5zZXRNb2RlbCh7CiAgICAgICAgb3JpZ2luYWw6IHRoaXMub3JpZ2luYWxNb2RlbCwKICAgICAgICBtb2RpZmllZDogdGhpcy5tb2RpZmllZE1vZGVsCiAgICAgIH0pOwogICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUobmV3VGhlbWUpOwogICAgICB9KTsKICAgICAgY29uc3QgY3NzSWQgPSAibW9uYWNvLWRpZmYtZWRpdG9yLWNzcyI7CiAgICAgIGlmICghdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChjc3NJZCkpIHsKICAgICAgICBjb25zdCBjc3NSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IGNzc1Jlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGNzc0lkOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzc1RleHQ7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5kaWZmRWRpdG9yPy5yZXZlYWxGaXJzdERpZmYoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0sIDEwMCk7CiAgICAgIHRoaXMuZGlmZkVkaXRvckRlZmVycmVkLnJlc29sdmUodGhpcy5kaWZmRWRpdG9yKTsKICAgIH0KICAgIGdvVG9OZXh0RGlmZigpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBnb1RvUHJldmlvdXNEaWZmKCkgewogICAgICB0cnkgewogICAgICAgIHRoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBhY2NlcHRMb2NhbCgpIHsKICAgICAgY29uc3QgbW9kaWZpZWRDb250ZW50ID0gdGhpcy5kaWZmRWRpdG9yPy5nZXRNb2RpZmllZEVkaXRvcigpLmdldFZhbHVlKCkgfHwgdGhpcy5tb2RpZmllZENvbnRlbnQ7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogInVzZS1sb2NhbCIsIGNvbnRlbnQ6IG1vZGlmaWVkQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYWNjZXB0RGlzaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1yZXNvbHZlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiAidXNlLWRpc2siLCBjb250ZW50OiB0aGlzLm9yaWdpbmFsQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtY2xvc2VkIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9yaWdpbmFsTW9kZWwpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsTW9kZWwuZGlzcG9zZSgpOwogICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMubW9kaWZpZWRNb2RlbCkgewogICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgdGhpcy5tb2RpZmllZE1vZGVsID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5kaWZmRWRpdG9yKSB7CiAgICAgICAgdGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLmRpZmZFZGl0b3IgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwppbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsKCk7CmluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwp2YXIgX19lc0RlY29yYXRlNTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGVybWluYWxfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5GaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzOwogIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TYXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0Q29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0T3V0cHV0X2RlY29yYXRvcnM7CiAgbGV0IF9pbml0T3V0cHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9yczsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzOwogIGxldCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3BlbkZpbGVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNUZXJtaW5hbENvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNGaWxlVHJlZUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYXV0b1NhdmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2luaXRDb21tYW5kX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pbml0T3V0cHV0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2hvd0RpZmZWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbGl6YXRpb25Qcm9taXNlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsaXphdGlvblByb21pc2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsaXphdGlvblByb21pc2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2luaXRpYWxpemVycywgX2luaXRpYWxpemF0aW9uUHJvbWlzZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVUcmVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZVRyZWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVUcmVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93RmlsZVRyZWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycywgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rlcm1pbmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGVybWluYWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rlcm1pbmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGVybWluYWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rlcm1pbmFsX2luaXRpYWxpemVycywgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVUcmVlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVRyZWVXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVRyZWVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRlcm1pbmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIF90ZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9vcGVuRmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbkZpbGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRmlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuRmlsZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVGaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlRmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlRmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUZpbGVQYXRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycywgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNUZXJtaW5hbENvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNUZXJtaW5hbENvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRmlsZVRyZWVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRmlsZVRyZWVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNJbml0aWFsaXppbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSW5pdGlhbGl6aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSW5pdGlhbGl6aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0luaXRpYWxpemluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0luaXRpYWxpemluZ19pbml0aWFsaXplcnMsIF9pc0luaXRpYWxpemluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVCb3R0b21QYW5lbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQm90dG9tUGFuZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQm90dG9tUGFuZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUJvdHRvbVBhbmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUJvdHRvbVBhbmVsX2luaXRpYWxpemVycywgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpYWdub3N0aWNNYXJrZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWFnbm9zdGljTWFya2VycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWFnbm9zdGljTWFya2Vycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlhZ25vc3RpY01hcmtlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzLCBfZGlhZ25vc3RpY01hcmtlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfYXV0b1NhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1NhdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TYXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9TYXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvU2F2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2F2ZV9pbml0aWFsaXplcnMsIF9hdXRvU2F2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0Q29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2luaXRPdXRwdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdE91dHB1dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdE91dHB1dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0T3V0cHV0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0T3V0cHV0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50RmlsZVRyZWVXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEZpbGVUcmVlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUZXJtaW5hbEhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nRmlsZVRyZWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdGaWxlVHJlZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nRmlsZVRyZWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdGaWxlVHJlZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nRmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nVGVybWluYWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdUZXJtaW5hbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nVGVybWluYWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93RGlmZlZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dEaWZmVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93RGlmZlZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dEaWZmVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RGlmZlZpZXdfaW5pdGlhbGl6ZXJzLCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpZmZWaWV3Q29uZmlnIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWZmVmlld0NvbmZpZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWZmVmlld0NvbmZpZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlmZlZpZXdDb25maWcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzLCBfZGlmZlZpZXdDb25maWdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICBjb25zdCBlbnYyID0gbmV3IFdlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgICAgIGNvbnN0IG1vdW50UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgZW52Mi5pbml0KCk7CiAgICAgICAgY29uc3QgZmlsZVRyZWUgPSB7CiAgICAgICAgICAicGFja2FnZS5qc29uIjogewogICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgIG5hbWU6ICJkZW1vLXByb2plY3QiLAogICAgICAgICAgICAgICAgdmVyc2lvbjogIjEuMC4wIiwKICAgICAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICAgICAgc2NyaXB0czogewogICAgICAgICAgICAgICAgICBidWlsZDogInRzYyIsCiAgICAgICAgICAgICAgICAgIGRldjogInRzYyAtLXdhdGNoIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogewogICAgICAgICAgICAgICAgICAiQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlIjogIl40LjIuMyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi4wLjAiLAogICAgICAgICAgICAgICAgICB0eXBlc2NyaXB0OiAiXjUuMC4wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibnBtZXh0cmEuanNvbiI6IHsKICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBkZWVzRWRpdG9yV29ya3NwYWNlOiB7CiAgICAgICAgICAgICAgICAgIG9uSW5pdDogInBucG0gaW5zdGFsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBudWxsLCAyKQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInRzY29uZmlnLmpzb24iOiB7CiAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgIHRhcmdldDogIkVTMjAyMiIsCiAgICAgICAgICAgICAgICAgIG1vZHVsZTogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbjogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgICAgICAgICAgICBvdXREaXI6ICIuL2Rpc3QiLAogICAgICAgICAgICAgICAgICByb290RGlyOiAiLi9zcmMiLAogICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGluY2x1ZGU6IFsic3JjLyoqLyoiXQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBzcmM6IHsKICAgICAgICAgICAgZGlyZWN0b3J5OiB7CiAgICAgICAgICAgICAgImluZGV4LnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIE1haW4gZW50cnkgcG9pbnQKaW1wb3J0IHsgZ3JlZXQsIGZvcm1hdE5hbWUgfSBmcm9tICcuL3V0aWxzLmpzJzsKCmNvbnN0IG5hbWUgPSBmb3JtYXROYW1lKCdXb3JsZCcpOwpjb25zb2xlLmxvZyhncmVldChuYW1lKSk7CgovLyBFeGFtcGxlIGFzeW5jIGZ1bmN0aW9uCmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCdIZWxsbyBmcm9tIGFzeW5jIScpOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCm1haW4oKTsKYAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInV0aWxzLnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1wb3J0dGVzdC50cyI6IHsKICAgICAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICAgICAgY29udGVudHM6IGAvLyBUZXN0IG5wbSBwYWNrYWdlIGltcG9ydHMKaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7CgovLyBUaGlzIHNob3VsZCBoYXZlIEludGVsbGlTZW5zZSBzaG93aW5nIGRlZmVyKCkgbWV0aG9kCmNvbnN0IGRlZmVycmVkID0gc21hcnRwcm9taXNlLmRlZmVyPHN0cmluZz4oKTsKCi8vIFRlc3QgdXNpbmcgdGhlIGRlZmVycmVkIHByb21pc2UKYXN5bmMgZnVuY3Rpb24gdGVzdFNtYXJ0UHJvbWlzZSgpIHsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvIGZyb20gc21hcnRwcm9taXNlIScpOwogIH0sIDEwMCk7CgogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlZmVycmVkLnByb21pc2U7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKdGVzdFNtYXJ0UHJvbWlzZSgpOwpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBhd2FpdCBlbnYyLm1vdW50KGZpbGVUcmVlKTsKICAgICAgfSkoKTsKICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICAgICAgY29uc3Qgd29ya3NwYWNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd29ya3NwYWNlIik7CiAgICAgIHdvcmtzcGFjZUVsZW1lbnQuZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBlbnYyOwogICAgICB3b3Jrc3BhY2VFbGVtZW50LmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG1vdW50UHJvbWlzZTsKICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh3b3Jrc3BhY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke2NvbnRhaW5lckVsZW1lbnR9CiAgICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIGA7CiAgICB9OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsaXphdGlvblByb21pc2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93VGVybWluYWxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1Rlcm1pbmFsKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rlcm1pbmFsKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMsIDI1MCkpOwogICAgZ2V0IGZpbGVUcmVlV2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVRyZWVXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVRyZWVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Rlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycywgMjAwKSk7CiAgICBnZXQgdGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvcGVuRmlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRmlsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2ZUZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjdGl2ZUZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVGaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Rlcm1pbmFsQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzVGVybWluYWxDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVGVybWluYWxDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNGaWxlVHJlZUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNGaWxlVHJlZUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzSW5pdGlhbGl6aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGlzSW5pdGlhbGl6aW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0luaXRpYWxpemluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfaW5pdGlhbGl6ZXJzLCAidGVybWluYWwiKSk7CiAgICBnZXQgYWN0aXZlQm90dG9tUGFuZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJvdHRvbVBhbmVsKHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpYWdub3N0aWNNYXJrZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpYWdub3N0aWNNYXJrZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgaW5pdGlhbGl6YXRpb25TdGFydGVkID0gZmFsc2U7CiAgICBpbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbnVsbDsKICAgIGludGVsbGlTZW5zZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAvLyBub2RlX21vZHVsZXMgd2F0Y2hlciBmb3IgYXV0by1sb2FkaW5nIHR5cGVzCiAgICBub2RlTW9kdWxlc1dhdGNoZXIgPSBudWxsOwogICAgbm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQgPSBudWxsOwogICAgaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgIC8vIE9wZW4gZmlsZSB3YXRjaGVycyBmb3IgZXh0ZXJuYWwgY2hhbmdlIGRldGVjdGlvbgogICAgb3BlbkZpbGVXYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmaWxlQ2hhbmdlRGVib3VuY2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgYWN0aW9uYmFyRWxlbWVudCA9IG51bGw7CiAgICAjYXV0b1NhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gQXV0by1zYXZlIGZ1bmN0aW9uYWxpdHkKICAgIGdldCBhdXRvU2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b1NhdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBhdXRvU2F2ZUludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAjaW5pdENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSW5pdCB0ZXJtaW5hbCBwcmV2aWV3IHN0YXRlCiAgICBnZXQgaW5pdENvbW1hbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRDb21tYW5kKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luaXRPdXRwdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0Q29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGluaXRPdXRwdXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0T3V0cHV0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdE91dHB1dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICAvLyBSZXNpemUgc3RhdGUKICAgIGdldCBjdXJyZW50RmlsZVRyZWVXaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudEZpbGVUcmVlV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFRlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBjdXJyZW50VGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRUZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nRmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nVGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIERpZmYgdmlldyBzdGF0ZQogICAgZ2V0IHNob3dEaWZmVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dEaWZmVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dEaWZmVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZGlmZlZpZXdDb25maWdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RGlmZlZpZXdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkaWZmVmlld0NvbmZpZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlmZlZpZXdDb25maWcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBLZXlib2FyZCBzaG9ydGN1dCBoYW5kbGVyIChib3VuZCBmb3IgcHJvcGVyIGNsZWFudXApCiAgICBrZXlkb3duSGFuZGxlciA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLmtleSA9PT0gInMiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVBY3RpdmVGaWxlKCk7CiAgICAgIH0KICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLnNoaWZ0S2V5ICYmIGUxMS5rZXkudG9Mb3dlckNhc2UoKSA9PT0gInMiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5zYXZlQWxsRmlsZXMoKTsKICAgICAgfQogICAgfSk7CiAgICAvLyA9PT09PT09PT09IEZpbGV0cmVlIFJlc2l6ZSBIYW5kbGVycyA9PT09PT09PT09CiAgICBoYW5kbGVGaWxlVHJlZU1vdXNlRG93biA9IChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICB9OwogICAgaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGggKiAwLjU7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIE1hdGgubWluKG1heFdpZHRoLCBtb3VzZVgpKTsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IG5ld1dpZHRoOwogICAgfTsKICAgIGhhbmRsZUZpbGVUcmVlTW91c2VVcCA9ICgpID0+IHsKICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfTsKICAgIC8vID09PT09PT09PT0gVGVybWluYWwgUmVzaXplIEhhbmRsZXJzID09PT09PT09PT0KICAgIGhhbmRsZVRlcm1pbmFsTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgIH07CiAgICBoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtb3VzZVkgPSBlMTEuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wOwogICAgICBjb25zdCB0ZXJtaW5hbEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gbW91c2VZOwogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0ICogMC43OwogICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIE1hdGgubWluKG1heEhlaWdodCwgdGVybWluYWxIZWlnaHQpKTsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICB9OwogICAgaGFuZGxlVGVybWluYWxNb3VzZVVwID0gKCkgPT4gewogICAgICB0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbC5jb2xsYXBzZWQgewogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwgImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAucHJvYmxlbS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbWVzc2FnZSB7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbG9jYXRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzZXMgPSBbCiAgICAgICAgIndvcmtzcGFjZS1jb250YWluZXIiLAogICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlIHx8IHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsID8gImRyYWdnaW5nIiA6ICIiCiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTsKICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZCB8fCAiIn0KICAgICAgICAgICAgLmxpbmVzPSR7dGhpcy5pbml0T3V0cHV0fQogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9IndvcmtzcGFjZS1vdXRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iJHtjb250YWluZXJDbGFzc2VzfSI+CiAgICAgICAgICA8IS0tIEZpbGV0cmVlIHBhbmVsIChmdWxsIGhlaWdodCkgLS0+CiAgICAgICAgICAke3RoaXMuc2hvd0ZpbGVUcmVlID8gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iZmlsZXRyZWUtcGFuZWwgJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkID8gMCA6IHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGh9cHgiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUKICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAuc2VsZWN0ZWRQYXRoPSR7dGhpcy5hY3RpdmVGaWxlUGF0aH0KICAgICAgICAgICAgICAgIEBmaWxlLXNlbGVjdD0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7IXRoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLXZlcnRpY2FsICR7dGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPCEtLSBFZGl0b3IgKyBUZXJtaW5hbCBhcmVhIC0tPgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItcGFuZWwiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wZW5GaWxlcy5tYXAoKGZpbGUpID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHtmaWxlLnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGggPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZhdGVGaWxlKGZpbGUucGF0aCl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtmaWxlLm1vZGlmaWVkID8gYjJgPHNwYW4gY2xhc3M9InRhYi1tb2RpZmllZCI+PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItbmFtZSI+JHtmaWxlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5jbG9zZUZpbGUoZTExLCBmaWxlLnBhdGgpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWVudS1idXR0b24iIEBjbGljaz0ke3RoaXMuc2hvd0VkaXRvck1lbnV9IHRpdGxlPSJFZGl0b3Igb3B0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOm1vcmVWZXJ0aWNhbCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+CiAgICAgICAgICAgICAgICAke3RoaXMuc2hvd0RpZmZWaWV3ICYmIHRoaXMuZGlmZlZpZXdDb25maWcgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgLmZpbGVQYXRoPSR7dGhpcy5kaWZmVmlld0NvbmZpZy5maWxlUGF0aH0KICAgICAgICAgICAgICAgICAgICAub3JpZ2luYWxDb250ZW50PSR7dGhpcy5kaWZmVmlld0NvbmZpZy5vcmlnaW5hbENvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWVkQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcubW9kaWZpZWRDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZGlmZlZpZXdDb25maWcubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtcmVzb2x2ZWQ9JHt0aGlzLmhhbmRsZURpZmZSZXNvbHZlZH0KICAgICAgICAgICAgICAgICAgICBAZGlmZi1jbG9zZWQ9JHsoKSA9PiB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgfX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5vcGVuRmlsZXMubGVuZ3RoID09PSAwID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlQ29kZSJ9IGljb25TaXplPSI0OCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2VsZWN0IGEgZmlsZSB0byBlZGl0PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLmdldEFjdGl2ZUZpbGVDb250ZW50KCl9CiAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKHRoaXMuYWN0aXZlRmlsZVBhdGgpfQogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEhvcml6b250YWwgcmVzaXplIGhhbmRsZSBmb3IgdGVybWluYWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgJiYgIXRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLWhvcml6b250YWwgJHt0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAgIDwhLS0gVGVybWluYWwgcGFuZWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtcGFuZWwgJHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gMzIgOiB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodH1weCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgVGVybWluYWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInByb2JsZW1zIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJwcm9ibGVtcyJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2lyY2xlQWxlcnQifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgUHJvYmxlbXMKICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYW5lbC10YWItYmFkZ2UgJHt0aGlzLmdldEVycm9yQ291bnQoKSA9PT0gMCA/ICJ3YXJuaW5nIiA6ICIifSI+JHt0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmxlbmd0aH08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYWN0aW9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVRlcm1pbmFsfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgICAgLmljb249JHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAibHVjaWRlOmNoZXZyb25VcCIgOiAibHVjaWRlOmNoZXZyb25Eb3duIn0KICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJibG9jayIgOiAibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH0KICAgICAgICAgICAgICAgICAgICAuc2V0dXBDb21tYW5kPSR7IiJ9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsID09PSAicHJvYmxlbXMiID8gImJsb2NrIiA6ICJub25lIn0iPgogICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyUHJvYmxlbXNQYW5lbCgpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBCYXIgKGZ1bGwgd2lkdGgpIC0tPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIKICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICBAcnVuLXByb2Nlc3M9JHt0aGlzLmhhbmRsZVJ1blByb2Nlc3N9CiAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMua2V5ZG93bkhhbmRsZXIpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd25IYW5kbGVyKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApOwogICAgICBpZiAodGhpcy5hdXRvU2F2ZUludGVydmFsKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCk7CiAgICAgIHRoaXMuc3RvcEFsbEZpbGVXYXRjaGVycygpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdGhpcy5maWxlVHJlZVdpZHRoOwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHRoaXMudGVybWluYWxIZWlnaHQ7CiAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSAmJiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLmFjdGlvbmJhckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmFjdGlvbmJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItcGFuZWwgZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZVdvcmtzcGFjZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVPbkluaXRDb21tYW5kKCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZCA9IGZhbHNlOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeGVjdXRlIG9uSW5pdCBjb21tYW5kIGZyb20gbnBtZXh0cmEuanNvbiBpZiBwcmVzZW50CiAgICAgKiBUaGlzIGFsbG93cyBhdXRvbWF0aWMgc2V0dXAgbGlrZSBgcG5wbSBpbnN0YWxsYCBvbiB3b3Jrc3BhY2UgaW5pdGlhbGl6YXRpb24KICAgICAqLwogICAgYXN5bmMgZXhlY3V0ZU9uSW5pdENvbW1hbmQoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbnBtZXh0cmEuanNvbiIpKSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9ucG1leHRyYS5qc29uIik7CiAgICAgICAgICBjb25zdCBjb25maWczID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgICAgICBjb25zdCBvbkluaXQgPSBjb25maWczPy5kZWVzRWRpdG9yV29ya3NwYWNlPy5vbkluaXQ7CiAgICAgICAgICBpZiAob25Jbml0ICYmIHR5cGVvZiBvbkluaXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFeGVjdXRpbmcgb25Jbml0IGNvbW1hbmQ6Iiwgb25Jbml0KTsKICAgICAgICAgICAgdGhpcy5pbml0Q29tbWFuZCA9IG9uSW5pdDsKICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gW107CiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFyZ3NdID0gb25Jbml0LnNwbGl0KCIgIik7CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihjbWQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCBsaW5lXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IHByb2Nlc3M0LmV4aXQ7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6IiwgZXhpdENvZGUpOwogICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCAiIiwgYENvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiAke2V4aXRDb2RlfWBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBleGVjdXRlIG9uSW5pdCBjb21tYW5kOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7CiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGNvbnNvbGUud2FybigiTW9uYWNvIG5vdCB5ZXQgbG9hZGVkLCBJbnRlbGxpU2Vuc2Ugd2lsbCBiZSBpbml0aWFsaXplZCBsYXRlciIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbmV3IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyKCk7CiAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KG1vbmFjb0luc3RhbmNlLCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KTsKICAgICAgdGhpcy5zZXR1cE1hcmtlckxpc3RlbmVyKCk7CiAgICAgIHRoaXMuc3RhcnROb2RlTW9kdWxlc1dhdGNoZXIoKTsKICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICB9CiAgICAvKioKICAgICAqIFdhdGNoIG5vZGVfbW9kdWxlcyBmb3IgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKQogICAgICogYW5kIGF1dG9tYXRpY2FsbHkgbG9hZCB0eXBlcyBmb3IgbmV3IHBhY2thZ2VzCiAgICAgKi8KICAgIHN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiL25vZGVfbW9kdWxlcyIsIChfZXZlbnQsIF9maWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgfSwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKSB7CiAgICAgICAgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICB0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBPcGVuIEZpbGUgV2F0Y2hpbmcgZm9yIEV4dGVybmFsIENoYW5nZXMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBTdGFydCB3YXRjaGluZyBhbiBvcGVuIGZpbGUgZm9yIGV4dGVybmFsIGNoYW5nZXMKICAgICAqLwogICAgc3RhcnRXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMub3BlbkZpbGVXYXRjaGVycy5oYXMocGF0aDIpKQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChwYXRoMiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ1RpbWVvdXQgPSB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5nZXQocGF0aDIpOwogICAgICAgICAgaWYgKGV4aXN0aW5nVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKTsKICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKHBhdGgyKTsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5zZXQocGF0aDIsIHRpbWVvdXQyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuc2V0KHBhdGgyLCB3YXRjaGVyKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCB3YXRjaCBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdG9wIHdhdGNoaW5nIGEgZmlsZSB3aGVuIGl0J3MgY2xvc2VkCiAgICAgKi8KICAgIHN0b3BXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMub3BlbkZpbGVXYXRjaGVycy5nZXQocGF0aDIpOwogICAgICBpZiAod2F0Y2hlcikgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KHBhdGgyKTsKICAgICAgaWYgKHRpbWVvdXQyKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0b3AgYWxsIGZpbGUgd2F0Y2hlcnMKICAgICAqLwogICAgc3RvcEFsbEZpbGVXYXRjaGVycygpIHsKICAgICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMub3BlbkZpbGVXYXRjaGVycy52YWx1ZXMoKSkgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRpbWVvdXQyIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgfQogICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5jbGVhcigpOwogICAgfQogICAgLyoqCiAgICAgKiBIYW5kbGUgZXh0ZXJuYWwgZmlsZSBjaGFuZ2UgLSBzaG93IGFjdGlvbmJhciBpZiBmaWxlIGhhcyBsb2NhbCBjaGFuZ2VzLAogICAgICogb3RoZXJ3aXNlIHNpbGVudGx5IHVwZGF0ZSB3aXRoIGN1cnNvciBwcmVzZXJ2YXRpb24KICAgICAqLwogICAgYXN5bmMgaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoIWZpbGUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gZmlsZS5jb250ZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChmaWxlLm1vZGlmaWVkKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coewogICAgICAgICAgICBtZXNzYWdlOiBgIiR7ZmlsZS5uYW1lfSIgY2hhbmdlZCBvbiBkaXNrLiBXaGF0IGRvIHlvdSB3YW50IHRvIGRvP2AsCiAgICAgICAgICAgIHR5cGU6ICJxdWVzdGlvbiIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6Z2l0TWVyZ2UiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImxvYWQtZGlzayIsIGxhYmVsOiAiTG9hZCBmcm9tIERpc2siLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogInNhdmUtbG9jYWwiLCBsYWJlbDogIlNhdmUgTG9jYWwgdG8gRGlzayIgfSwKICAgICAgICAgICAgICB7IGlkOiAiY29tcGFyZSIsIGxhYmVsOiAiQ29tcGFyZSIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxNWUzLCBkZWZhdWx0QWN0aW9uSWQ6ICJsb2FkLWRpc2siIH0sCiAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAibG9hZC1kaXNrIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uYWN0aW9uSWQgPT09ICJzYXZlLWxvY2FsIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMiA/IHsgLi4uZjcsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAiY29tcGFyZSIpIHsKICAgICAgICAgICAgdGhpcy5vcGVuRGlmZlZpZXcocGF0aDIsIGZpbGUuY29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIG5ld0NvbnRlbnQsIHRydWUpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBoYW5kbGUgZXh0ZXJuYWwgY2hhbmdlIGZvciAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGZpbGUgY29udGVudCBpbiBzdGF0ZSBhbmQgb3B0aW9uYWxseSBpbiB0aGUgZWRpdG9yCiAgICAgKi8KICAgIGFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcikgewogICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLm1hcCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyID8geyAuLi5mNywgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgIGlmIChwYXRoMiA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYXdhaXQgZWRpdG9yLnNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIE9wZW4gdGhlIGRpZmYgdmlldyB0byBjb21wYXJlIGxvY2FsIGFuZCBkaXNrIHZlcnNpb25zCiAgICAgKi8KICAgIG9wZW5EaWZmVmlldyhwYXRoMiwgbG9jYWxDb250ZW50LCBkaXNrQ29udGVudCkgewogICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gewogICAgICAgIGZpbGVQYXRoOiBwYXRoMiwKICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGRpc2tDb250ZW50LAogICAgICAgIG1vZGlmaWVkQ29udGVudDogbG9jYWxDb250ZW50LAogICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpCiAgICAgIH07CiAgICAgIHRoaXMuc2hvd0RpZmZWaWV3ID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogSGFuZGxlIGRpZmYgdmlldyByZXNvbHV0aW9uCiAgICAgKi8KICAgIGFzeW5jIGhhbmRsZURpZmZSZXNvbHZlZChlMTEpIHsKICAgICAgY29uc3QgeyBhY3Rpb24sIGNvbnRlbnQ6IGNvbnRlbnQzIH0gPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBwYXRoMiA9IHRoaXMuZGlmZlZpZXdDb25maWc/LmZpbGVQYXRoOwogICAgICBpZiAoIXBhdGgyIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFjdGlvbiA9PT0gInVzZS1sb2NhbCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgY29udGVudDMpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIgPyB7IC4uLmY3LCBjb250ZW50OiBjb250ZW50MywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHBhdGgyID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBhd2FpdCBlZGl0b3Iuc2V0Q29udGVudEV4dGVybmFsKGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gInVzZS1kaXNrIikgewogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgIH0KICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IG51bGw7CiAgICB9CiAgICBhc3luYyBoYW5kbGVGaWxlU2VsZWN0KGUxMSkgewogICAgICBjb25zdCB7IHBhdGg6IHBhdGgyLCBuYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKHBhdGgyLCBuYW1lKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlKHBhdGgyLCBuYW1lKSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMub3BlbkZpbGVzLmZpbmQoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMik7CiAgICAgIGlmIChleGlzdGluZ0ZpbGUpIHsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IFsKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLAogICAgICAgICAgeyBwYXRoOiBwYXRoMiwgbmFtZSwgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9CiAgICAgICAgXTsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgdGhpcy5zdGFydFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgaWYgKCF0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpOwogICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciAmJiAobGFuZ3VhZ2UgPT09ICJ0eXBlc2NyaXB0IiB8fCBsYW5ndWFnZSA9PT0gImphdmFzY3JpcHQiKSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIucHJvY2Vzc0NvbnRlbnRDaGFuZ2UoY29udGVudDMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gb3BlbiBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYWN0aXZhdGVGaWxlKHBhdGgyKSB7CiAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgIH0KICAgIGNsb3NlRmlsZShlMTEsIHBhdGgyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgZmlsZUluZGV4ID0gdGhpcy5vcGVuRmlsZXMuZmluZEluZGV4KChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoZmlsZUluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlc1tmaWxlSW5kZXhdOwogICAgICBpZiAoZmlsZS5tb2RpZmllZCkgewogICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oYCR7ZmlsZS5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdGaWxlKHBhdGgyKTsKICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5wYXRoICE9PSBwYXRoMik7CiAgICAgIGlmICh0aGlzLmFjdGl2ZUZpbGVQYXRoID09PSBwYXRoMikgewogICAgICAgIGlmICh0aGlzLm9wZW5GaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IE1hdGgubWluKGZpbGVJbmRleCwgdGhpcy5vcGVuRmlsZXMubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gdGhpcy5vcGVuRmlsZXNbbmV3SW5kZXhdLnBhdGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSAiIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEFjdGl2ZUZpbGVDb250ZW50KCkgewogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpOwogICAgICByZXR1cm4gZmlsZT8uY29udGVudCB8fCAiIjsKICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBmaWxlSW5kZXggPSB0aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgaWYgKGZpbGVJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgaWYgKGZpbGUuY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMub3BlbkZpbGVzID0gWwogICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCwgZmlsZUluZGV4KSwKICAgICAgICAgIHsgLi4uZmlsZSwgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IHRydWUgfSwKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLnNsaWNlKGZpbGVJbmRleCArIDEpCiAgICAgICAgXTsKICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyICYmIChsYW5ndWFnZSA9PT0gInR5cGVzY3JpcHQiIHx8IGxhbmd1YWdlID09PSAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcj8ucHJvY2Vzc0NvbnRlbnRDaGFuZ2UobmV3Q29udGVudCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICBjb25zdCBleHQgPSBwYXRoMi5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBjb25zdCBsYW5ndWFnZU1hcCA9IHsKICAgICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICAgIHRzeDogInR5cGVzY3JpcHQiLAogICAgICAgIGpzOiAiamF2YXNjcmlwdCIsCiAgICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgICAganNvbjogImpzb24iLAogICAgICAgIGh0bWw6ICJodG1sIiwKICAgICAgICBjc3M6ICJjc3MiLAogICAgICAgIHNjc3M6ICJzY3NzIiwKICAgICAgICBsZXNzOiAibGVzcyIsCiAgICAgICAgbWQ6ICJtYXJrZG93biIsCiAgICAgICAgeWFtbDogInlhbWwiLAogICAgICAgIHltbDogInlhbWwiLAogICAgICAgIHhtbDogInhtbCIsCiAgICAgICAgc3FsOiAic3FsIiwKICAgICAgICBweTogInB5dGhvbiIsCiAgICAgICAgc2g6ICJzaGVsbCIsCiAgICAgICAgYmFzaDogInNoZWxsIgogICAgICB9OwogICAgICByZXR1cm4gbGFuZ3VhZ2VNYXBbZXh0IHx8ICIiXSB8fCAicGxhaW50ZXh0IjsKICAgIH0KICAgIHRvZ2dsZVRlcm1pbmFsKCkgewogICAgICB0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPSAhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkOwogICAgfQogICAgLy8gPT09PT09PT09PSBTYXZlIE9wZXJhdGlvbnMgPT09PT09PT09PQogICAgYXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCk7CiAgICAgIGlmICghZmlsZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZS5wYXRoID8geyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChmaWxlLnBhdGgsIGZpbGUuY29udGVudCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzYXZlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBzYXZlQWxsRmlsZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5tb2RpZmllZCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiAoeyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gRWRpdG9yIE1lbnUgPT09PT09PT09PQogICAgYXN5bmMgc2hvd0VkaXRvck1lbnUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6IHRoaXMuYXV0b1NhdmUgPyAiXHUyNzEzIEF1dG8gU2F2ZSIgOiAiQXV0byBTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnRvZ2dsZUF1dG9TYXZlKCkKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBY3RpdmVGaWxlKCkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIEFsbCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpzYXZlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5zYXZlQWxsRmlsZXMoKQogICAgICAgIH0KICAgICAgXTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIHRvZ2dsZUF1dG9TYXZlKCkgewogICAgICB0aGlzLmF1dG9TYXZlID0gIXRoaXMuYXV0b1NhdmU7CiAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7CiAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgY29uc3QgaGFzVW5zYXZlZCA9IHRoaXMub3BlbkZpbGVzLnNvbWUoKGY3KSA9PiBmNy5tb2RpZmllZCk7CiAgICAgICAgICBpZiAoaGFzVW5zYXZlZCkgewogICAgICAgICAgICB0aGlzLnNhdmVBbGxGaWxlcygpOwogICAgICAgICAgfQogICAgICAgIH0sIDJlMyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEVycm9yQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmZpbHRlcigobTYpID0+IG02LnNldmVyaXR5ID09PSA4KS5sZW5ndGg7CiAgICB9CiAgICByZW5kZXJQcm9ibGVtc1BhbmVsKCkgewogICAgICBpZiAodGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtZW1wdHkiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2tDaXJjbGUifSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+Tm8gcHJvYmxlbXMgZGV0ZWN0ZWQ8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKChtYXJrZXIpID0+IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1pdGVtIiBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKG1hcmtlcil9PgogICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgY2xhc3M9InByb2JsZW0taWNvbiAke21hcmtlci5zZXZlcml0eSA9PT0gOCA/ICJlcnJvciIgOiAid2FybmluZyJ9IgogICAgICAgICAgICAgIC5pY29uPSR7bWFya2VyLnNldmVyaXR5ID09PSA4ID8gImx1Y2lkZTpjaXJjbGVYIiA6ICJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke21hcmtlci5tZXNzYWdlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tbG9jYXRpb24iPgogICAgICAgICAgICAgICAgJHttYXJrZXIucmVzb3VyY2UucGF0aC5zcGxpdCgiLyIpLnBvcCgpfSAoJHttYXJrZXIuc3RhcnRMaW5lTnVtYmVyfSwgJHttYXJrZXIuc3RhcnRDb2x1bW59KQogICAgICAgICAgICAgICAgJHttYXJrZXIuc291cmNlID8gYFske21hcmtlci5zb3VyY2V9XWAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0obWFya2VyKSB7CiAgICAgIGNvbnN0IGZpbGVQYXRoID0gbWFya2VyLnJlc291cmNlLnBhdGg7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAiIjsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IGZpbGVQYXRoKTsKICAgICAgaWYgKCFleGlzdGluZ0ZpbGUpIHsKICAgICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9IGZpbGVQYXRoOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICBpZiAoZWRpdG9yRWxlbWVudCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IGVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG1hcmtlci5zdGFydExpbmVOdW1iZXIpOwogICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7CiAgICAgICAgICBsaW5lTnVtYmVyOiBtYXJrZXIuc3RhcnRMaW5lTnVtYmVyLAogICAgICAgICAgY29sdW1uOiBtYXJrZXIuc3RhcnRDb2x1bW4KICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0dXBNYXJrZXJMaXN0ZW5lcigpIHsKICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKQogICAgICAgIHJldHVybjsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycygodXJpcykgPT4gewogICAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgICAgfSk7CiAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgIH0KICAgIHVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCkgewogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBhbGxNYXJrZXJzID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7fSk7CiAgICAgIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMgPSBhbGxNYXJrZXJzLm1hcCgobTYpID0+ICh7CiAgICAgICAgbWVzc2FnZTogbTYubWVzc2FnZSwKICAgICAgICBzZXZlcml0eTogbTYuc2V2ZXJpdHksCiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBtNi5zdGFydExpbmVOdW1iZXIsCiAgICAgICAgc3RhcnRDb2x1bW46IG02LnN0YXJ0Q29sdW1uLAogICAgICAgIGVuZExpbmVOdW1iZXI6IG02LmVuZExpbmVOdW1iZXIsCiAgICAgICAgZW5kQ29sdW1uOiBtNi5lbmRDb2x1bW4sCiAgICAgICAgc291cmNlOiBtNi5zb3VyY2UsCiAgICAgICAgcmVzb3VyY2U6IHsgcGF0aDogbTYucmVzb3VyY2UucGF0aCB9CiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gQm90dG9tIEJhciBFdmVudCBIYW5kbGVycyA9PT09PT09PT09CiAgICAvKioKICAgICAqIEhhbmRsZSBydW4tcHJvY2VzcyBldmVudHMgZnJvbSBib3R0b20gYmFyIHdpZGdldHMKICAgICAqIENyZWF0ZXMgYSBuZXcgdGVybWluYWwgdGFiIGZvciB0aGUgcHJvY2VzcwogICAgICovCiAgICBhc3luYyBoYW5kbGVSdW5Qcm9jZXNzKGUxMSkgewogICAgICBjb25zdCBkZXRhaWwgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtdGVybWluYWwiKTsKICAgICAgaWYgKCF0ZXJtaW5hbCkgewogICAgICAgIGNvbnNvbGUud2FybigiVGVybWluYWwgY29tcG9uZW50IG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkKSB7CiAgICAgICAgdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCI7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IHRlcm1pbmFsLmNyZWF0ZVByb2Nlc3NUYWIoewogICAgICAgIHR5cGU6IGRldGFpbC50eXBlLAogICAgICAgIGxhYmVsOiBkZXRhaWwubGFiZWwsCiAgICAgICAgY29tbWFuZDogZGV0YWlsLmNvbW1hbmQsCiAgICAgICAgYXJnczogZGV0YWlsLmFyZ3MsCiAgICAgICAgbWV0YWRhdGE6IGRldGFpbC5tZXRhZGF0YSwKICAgICAgICBzd2l0Y2hUb1RhYjogdHJ1ZQogICAgICB9KTsKICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIExheW91dCBNZXRob2RzID09PT09PT09PT0KICAgIC8qKgogICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIGZpbGUgdHJlZSB3aWR0aAogICAgICovCiAgICBzZXRGaWxlVHJlZVdpZHRoKHdpZHRoKSB7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAwLjU7CiAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4obWF4V2lkdGgsIHdpZHRoKSk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgdGVybWluYWwgaGVpZ2h0CiAgICAgKi8KICAgIHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgewogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogMC43OwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9CiAgICAvKioKICAgICAqIFJlc2V0IGxheW91dCB0byBpbml0aWFsIHByb3BlcnR5IHZhbHVlcwogICAgICovCiAgICByZXNldExheW91dCgpIHsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHRoaXMuZmlsZVRyZWVXaWR0aDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSB0aGlzLnRlcm1pbmFsSGVpZ2h0OwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW5kZXguanMKaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwppbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1NyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgZGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9zcGxpdFJhdGlvX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9taW5QYW5lbFNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTWFya2Rvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3BsaXRSYXRpb19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pblBhbmVsU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9zcGxpdFJhdGlvX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNwbGl0UmF0aW8iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3BsaXRSYXRpbywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgX3NwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pblBhbmVsU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluUGFuZWxTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pblBhbmVsU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWluUGFuZWxTaXplID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMsIF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfY3VycmVudFNwbGl0UmF0aW9fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRTcGxpdFJhdGlvIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRTcGxpdFJhdGlvLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXJyZW50U3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMsIF9jdXJyZW50U3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bj5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAuZWRpdG9yQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzMwMzYzZCIpfTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTpob3ZlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiNmZmZmZmYiKX07CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm91dGxldENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwZDExMTciKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjQyOTJmIiwgIiNlNmVkZjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3JDb250YWluZXIsCiAgICAgIC5zcGxpdENvbnRhaW5lci5kcmFnZ2luZyAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgICNzcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgNTApOwogICAgLyoqCiAgICAgKiBJbml0aWFsIHNwbGl0IHJhdGlvIGZvciB0aGUgZWRpdG9yIChsZWZ0KSBwYW5lbC4KICAgICAqIFZhbHVlIGZyb20gMCB0byAxMDAgcmVwcmVzZW50aW5nIHBlcmNlbnRhZ2Ugd2lkdGguCiAgICAgKiBEZWZhdWx0IGlzIDUwICg1MC81MCBzcGxpdCkuCiAgICAgKi8KICAgIGdldCBzcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNwbGl0UmF0aW8odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2luaXRpYWxpemVycywgMTApKTsKICAgIC8qKgogICAgICogTWluaW11bSB3aWR0aCBwZXJjZW50YWdlIGZvciBlaXRoZXIgcGFuZWwuCiAgICAgKi8KICAgIGdldCBtaW5QYW5lbFNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5QYW5lbFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pblBhbmVsU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9faW5pdGlhbGl6ZXJzLCA1MCkpOwogICAgZ2V0IGN1cnJlbnRTcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50U3BsaXRSYXRpbyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0RyYWdnaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGNvbnRhaW5lckVsZW1lbnQ7CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic3BsaXRDb250YWluZXIgJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3JDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAubGFuZ3VhZ2U9JHsibWFya2Rvd24ifQogICAgICAgICAgICAuY29udGVudD0ke2AjIGEgdGVzdCBjb250ZW50CgpUaGlzIGlzIHRlc3QgY29udGVudCB0aGF0IGlzIG9mIGxvbmdlciBmb3JtIGFuIGhvcGVmdWxseSBzdGFydHMgdG8gd3JhcCB3aGVuIEkgbmVlZCBpdC4gQW5kIHllcywgaXQgZG9lcyBwZXJmZWN0bHkuIG5pY2UuCgpUZXN0IHwgSGVsbG8KLS0tIHwgLS0tClllYWggfCBTbyBnb29kCgpUaGlzIGlzIHJlYWwgYXNzZXQgSSB0aGluay4gV2h5IHdvdWxkIHdlIHdhbnQgdG8gbGVhdmUgdGhhdCBvbiB0aGUgdGFibGU/IENhbiB5b3UgdGVsbCBteSB0aGF0PwoKV2h5IGFyZSB3ZSBoZXJlPwoKRG8geW91IGtub3c/Cgo+IG5vdGU6ClRoZXJlIGlzIHNvbWV0aGluZyBnb2luZyBvbi4KClxgXGBcYHR5cGVzY3JpcHQKY29uc3QgaGVsbG8gPSAneWVzJwpcYFxgXGAKYH0KICAgICAgICAgICAgd29yZFdyYXA9ImJvdW5kZWQiCiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZUhhbmRsZSAke3RoaXMuaXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVNb3VzZURvd259CiAgICAgICAgPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im91dGxldENvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAkezEwMCAtIHRoaXMuY3VycmVudFNwbGl0UmF0aW99JSI+CiAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzQXJnKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnJlc2l6ZUhhbmRsZSIpOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IG1hcmtkb3duT3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bigpOwogICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bigibG9hZGluZy4uLiIpOwogICAgICBlZGl0b3IuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChjb250ZW50QXJnKSA9PiB7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGNvbnRlbnRBcmcpOwogICAgICAgIGNvbnN0IGh0bWwxOCA9IG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgICAgbWFya2Rvd25PdXRsZXQudXBkYXRlSHRtbFRleHQoaHRtbDE4KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVNb3VzZURvd24gPSAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfTsKICAgIGhhbmRsZU1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMuY29udGFpbmVyRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyUmVjdC53aWR0aDsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGxldCBuZXdSYXRpbyA9IG1vdXNlWCAvIGNvbnRhaW5lcldpZHRoICogMTAwOwogICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KHRoaXMubWluUGFuZWxTaXplLCBNYXRoLm1pbigxMDAgLSB0aGlzLm1pblBhbmVsU2l6ZSwgbmV3UmF0aW8pKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IG5ld1JhdGlvOwogICAgfTsKICAgIGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgc3BsaXQgcmF0aW8KICAgICAqLwogICAgc2V0U3BsaXRSYXRpbyhyYXRpbykgewogICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gTWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsIE1hdGgubWluKDEwMCAtIHRoaXMubWluUGFuZWxTaXplLCByYXRpbykpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXNldCB0byBpbml0aWFsIHNwbGl0IHJhdGlvCiAgICAgKi8KICAgIHJlc2V0U3BsaXRSYXRpbygpIHsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM2ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgY29uc3Qgb3V0bGV0ID0gcGFuZWxFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpOwogIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8aDE+SGVhZGluZyBMZXZlbCAxPC9oMT4KICAgICAgICAgICAgPGgyPkhlYWRpbmcgTGV2ZWwgMjwvaDI+CiAgICAgICAgICAgIDxoMz5IZWFkaW5nIExldmVsIDM8L2gzPgogICAgICAgICAgICA8aDQ+SGVhZGluZyBMZXZlbCA0PC9oND4KICAgICAgICAgICAgPGg1PkhlYWRpbmcgTGV2ZWwgNTwvaDU+CiAgICAgICAgICAgIDxoNj5IZWFkaW5nIExldmVsIDY8L2g2PgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDI6IFRleHQgRm9ybWF0dGluZyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGV4dCBGb3JtYXR0aW5nIn0KICAgICAgICAuc3VidGl0bGU9JHsiQm9sZCwgaXRhbGljLCBsaW5rcywgY29kZSwgYW5kIGtleWJvYXJkIGlucHV0In0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMzogTGlzdHMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7Ikxpc3RzIn0KICAgICAgICAuc3VidGl0bGU9JHsiT3JkZXJlZCwgdW5vcmRlcmVkLCBhbmQgdGFzayBsaXN0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMz5Vbm9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+Rmlyc3QgaXRlbTwvbGk+CiAgICAgICAgICAgICAgPGxpPlNlY29uZCBpdGVtCiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgIDxsaT5OZXN0ZWQgaXRlbSAxPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDI8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UaGlyZCBpdGVtPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxoMz5PcmRlcmVkIExpc3Q8L2gzPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgb25lPC9saT4KICAgICAgICAgICAgICA8bGk+U3RlcCB0d288L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHRocmVlPC9saT4KICAgICAgICAgICAgPC9vbD4KCiAgICAgICAgICAgIDxoMz5UYXNrIExpc3Q8L2gzPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPiBDb21wbGV0ZWQgdGFzazwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD4gUGVuZGluZyB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBBbm90aGVyIHRhc2s8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+SW5saW5lIGNvZGU6IDxjb2RlPmNvbnN0IGdyZWV0aW5nID0gIkhlbGxvLCBXb3JsZCEiOzwvY29kZT48L3A+CgogICAgICAgICAgICA8aDM+VHlwZVNjcmlwdCBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgaHRtbCwgY3NzIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50Jzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbnRlcmZhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5JVXNlcjwvc3Bhbj4gewogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPm5hbWU8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5lbWFpbDwvc3Bhbj46IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5zdHJpbmc8L3NwYW4+OwogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmFnZTwvc3Bhbj4/OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+bnVtYmVyPC9zcGFuPjsKfQoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5nZXRVc2VyPC9zcGFuPiA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmFzeW5jPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+aWQ8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPik6IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5Qcm9taXNlPC9zcGFuPiZsdDtJVXNlciZndDsgPSZndDsgewogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiByZXNwb25zZSA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmF3YWl0PC9zcGFuPiBmZXRjaChcYC9hcGkvdXNlcnMvXCR7aWR9XGApOwogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gcmVzcG9uc2UuanNvbigpOwp9OzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMz5KU09OIEV4YW1wbGU8L2gzPgogICAgICAgICAgICA8cHJlPjxjb2RlPnsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4ibmFtZSI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJkZWVzLWNhdGFsb2ciPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4idmVyc2lvbiI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiIzLjAuMCI8L3NwYW4+LAogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJkZXBlbmRlbmNpZXMiPC9zcGFuPjogewogICAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+IkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJeMi4wLjAiPC9zcGFuPgogIH0KfTwvY29kZT48L3ByZT4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA1OiBUYWJsZXMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IlRhYmxlcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN0eWxlZCB0YWJsZXMgd2l0aCBhbHRlcm5hdGluZyByb3dzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDY6IEJsb2NrcXVvdGVzICYgQWxlcnRzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJCbG9ja3F1b3RlcyAmIEFsZXJ0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlF1b3RlcyBhbmQgR2l0SHViLXN0eWxlIGFsZXJ0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBzdGFuZGFyZCBibG9ja3F1b3RlLiBJdCdzIGdyZWF0IGZvciBoaWdobGlnaHRpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uIG9yIHF1b3RlcyBmcm9tIG90aGVyIHNvdXJjZXMuPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1ub3RlIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBub3RlIHRvIGRyYXcgYXR0ZW50aW9uIHRvIGltcG9ydGFudCBkZXRhaWxzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBIZXJlJ3MgYSBoZWxwZnVsIHRpcCB0byBpbXByb3ZlIHlvdXIgd29ya2Zsb3cuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdG9waWMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXdhcm5pbmciPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gQmUgY2FyZWZ1bCB3aGVuIHBlcmZvcm1pbmcgdGhpcyBhY3Rpb24uPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWNhdXRpb24iPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Q2F1dGlvbjo8L3N0cm9uZz4gVGhpcyBhY3Rpb24gbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvaDE+CiAgICAgICAgICAgIDxwPldlbGNvbWUgdG8gdGhlIDxzdHJvbmc+ZGVlcy1jYXRhbG9nPC9zdHJvbmc+IGNvbXBvbmVudCBsaWJyYXJ5LiBUaGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgZ2V0IHVwIGFuZCBydW5uaW5nIHF1aWNrbHkuPC9wPgoKICAgICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+CiAgICAgICAgICAgIDxwPkluc3RhbGwgdGhlIHBhY2thZ2UgdXNpbmcgeW91ciBwcmVmZXJyZWQgcGFja2FnZSBtYW5hZ2VyOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIHBucG0gKHJlY29tbWVuZGVkKTwvc3Bhbj4KcG5wbSBhZGQgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nCgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIG5wbTwvc3Bhbj4KbnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGgyPkJhc2ljIFVzYWdlPC9oMj4KICAgICAgICAgICAgPHA+SW1wb3J0IGFuZCB1c2UgY29tcG9uZW50cyBpbiB5b3VyIFR5cGVTY3JpcHQgZmlsZXM6PC9wPgogICAgICAgICAgICA8cHJlPjxjb2RlPjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmltcG9ydDwvc3Bhbj4geyBEZWVzQnV0dG9uIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nJzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4vLyBVc2UgaW4geW91ciB0ZW1wbGF0ZXM8L3NwYW4+Cmh0bWxcYCZsdDtkZWVzLWJ1dHRvbiZndDtDbGljayBtZSZsdDsvZGVlcy1idXR0b24mZ3Q7XGA8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBDaGVjayB0aGUgZGVtbyBzaG93Y2FzZSBmb3IgbGl2ZSBleGFtcGxlcyBvZiBhbGwgY29tcG9uZW50cy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGgyPkF2YWlsYWJsZSBDb21wb25lbnRzPC9oMj4KICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkNvbXBvbmVudDwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1idXR0b248L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlByaW1hcnkgYnV0dG9uIGNvbXBvbmVudDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1pbnB1dC10ZXh0PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5UZXh0IGlucHV0IGZpZWxkPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT5kZWVzLXRhYmxlPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXRhIHRhYmxlIHdpdGggc29ydGluZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1tb2RhbDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TW9kYWwgZGlhbG9nPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxoMj5OZXh0IFN0ZXBzPC9oMj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5FeHBsb3JlIHRoZSA8YSBocmVmPSIjIj5jb21wb25lbnQgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT5DaGVjayBvdXQgdGhlIDxhIGhyZWY9IiMiPnRoZW1pbmcgZ3VpZGU8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Sm9pbiBvdXIgPGEgaHJlZj0iIyI+Y29tbXVuaXR5IERpc2NvcmQ8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPiJUaGUgYmVzdCBjb21wb25lbnQgbGlicmFyeSBpcyBvbmUgdGhhdCBnZXRzIG91dCBvZiB5b3VyIHdheS4iIFx1MjAxNCBEZXNpZ24gU3lzdGVtcyBUZWFtPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTU3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdOb3RvIFNhbnMnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI0MjkyZiIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICAub3V0bGV0IHsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRpbmdzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgfQoKICAgICAgaDQgewogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICB9CgogICAgICBoNSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NWVtOwogICAgICB9CgogICAgICBoNiB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjU2ZDc2IiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTY5ZGEiLCAiIzU4YTZmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAvKiBTdHJvbmcgYW5kIGVtcGhhc2lzICovCiAgICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2YwZjZmYyIpfTsKICAgICAgfQoKICAgICAgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogTGlzdHMgKi8KICAgICAgdWwsIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KCiAgICAgIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIGxpICsgbGkgewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgdWwgdWwsIHVsIG9sLCBvbCB1bCwgb2wgb2wgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogQmxvY2txdW90ZXMgKi8KICAgICAgYmxvY2txdW90ZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICAgIHBhZGRpbmc6IDAgMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY1NmQ3NiIsICIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbmxpbmUgY29kZSAqLwogICAgICBjb2RlIHsKICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiA4NSU7CiAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsICdTRiBNb25vJywgTWVubG8sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE3NSwgMTg0LCAxOTMsIDAuMikiLCAicmdiYSgxMTAsIDExOCwgMTI5LCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrcyAqLwogICAgICBwcmUgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzIxMjYyZCIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNmY4ZmEiLCAiIzE2MWIyMiIpfTsKICAgICAgfQoKICAgICAgLyogSG9yaXpvbnRhbCBydWxlcyAqLwogICAgICBociB7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDI0cHggMDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2U2ZWRmMyIpfTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgLyogRm9vdG5vdGVzICovCiAgICAgIC5mb290bm90ZXMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NTZkNzYiLCAiIzhiOTQ5ZSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5NjlkYSIsICIjNThhNmZmIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDksIDEwNSwgMjE4LCAwLjEpIiwgInJnYmEoNTYsIDEzOSwgMjUzLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtd2FybmluZyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2JmODcwMCIsICIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwgInJnYmEoMTg3LCAxMjgsIDksIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC1pbXBvcnRhbnQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4MjUwZGYiLCAiI2EzNzFmNyIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMzAsIDgwLCAyMjMsIDAuMSkiLCAicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2NmMjIyZSIsICIjZjg1MTQ5Iil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIwNywgMzQsIDQ2LCAwLjEpIiwgInJnYmEoMjQ4LCA4MSwgNzMsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC10aXAgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxYTdmMzciLCAiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsICJyZ2JhKDQ2LCAxNjAsIDY3LCAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBjb2RlIGJsb2NrcyAqLwogICAgICAuaGxqcy1jb21tZW50LAogICAgICAuaGxqcy1xdW90ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmE3MzdkIiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLXRhZywKICAgICAgLmhsanMtYWRkaXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q3M2E0OSIsICIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAzMmY2MiIsICIjYTVkNmZmIil9OwogICAgICB9CgogICAgICAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtc2VjdGlvbiwKICAgICAgLmhsanMtbmFtZSwKICAgICAgLmhsanMtc2VsZWN0b3ItaWQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWNsYXNzIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2ZjQyYzEiLCAiI2QyYThmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYXR0cmlidXRlLAogICAgICAuaGxqcy1hdHRyLAogICAgICAuaGxqcy12YXJpYWJsZSwKICAgICAgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsCiAgICAgIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy10eXBlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDVjYzUiLCAiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTM2MjA5IiwgIiNmZmE2NTciKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWJ1aWx0X2luLAogICAgICAuaGxqcy1kZWxldGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYjMxZDI4IiwgIiNmZmExOTgiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWZvcm11bGEgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICAvLyBJTlNUQU5DRQogICAgb3V0bGV0OwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im91dGxldCI+CiAgICAgICAgPGgxPk1hcmtkb3duIFByZXZpZXc8L2gxPgogICAgICAgIDxwPkNvbnRlbnQgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIG1hcmtkb3duIGlzIHBhcnNlZC48L3A+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMub3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZUh0bWxUZXh0KGh0bWxUZXh0QXJnKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmICghdGhpcy5vdXRsZXQpIHsKICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgIH0KICAgICAgdGhpcy5vdXRsZXQuaW5uZXJIVE1MID0gaHRtbFRleHRBcmc7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzcgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwgIkJyZWFkIiwgIkVnZ3MiLCAiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJSZXZpZXcgcHVsbCByZXF1ZXN0cyIsCiAgIkZpeCBjcml0aWNhbCBidWciLAogICJVcGRhdGUgZG9jdW1lbnRhdGlvbiIsCiAgIkRlcGxveSB0byBwcm9kdWN0aW9uIiwKICAiVGVhbSBzdGFuZHVwIG1lZXRpbmciCl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsICJCb2IiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0ke2ZhbHNlfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwgImJhY2tlbmQiLCAiZGF0YWJhc2UiXX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkR1cGxpY2F0ZSBpdGVtcyBhcmUgbm90IGFsbG93ZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gRGVsZXRlIENvbmZpcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlIGNvbmZpcm1hdGlvbiBiZWZvcmUgZGVsZXRpbmcgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiSW1wb3J0YW50IERvY3VtZW50cyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGRvY3VtZW50IG5hbWUuLi4ifQogICAgICAgICAgLmNvbmZpcm1EZWxldGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJDb250cmFjdF8yMDI0LnBkZiIsCiAgIkZpbmFuY2lhbF9SZXBvcnRfUTMueGxzeCIsCiAgIlByb2plY3RfUHJvcG9zYWwuZG9jeCIsCiAgIk1lZXRpbmdfTm90ZXMudHh0IgpdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkRlbGV0aW9uIHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3Igc2FmZXR5In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBEaXNhYmxlZCBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJSZWFkLW9ubHkgbGlzdCBkaXNwbGF5In0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBEZWZhdWx0cyJ9CiAgICAgICAgICAudmFsdWU9JHtbIkRlZmF1bHQgU2V0dGluZyAxIiwgIkRlZmF1bHQgU2V0dGluZyAyIiwgIkRlZmF1bHQgU2V0dGluZyAzIl19CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7IkluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGluZ3JlZGllbnQuLi4ifQogICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgLm1pbkl0ZW1zPSR7M30KICAgICAgICAgICAgICAua2V5PSR7ImluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiMiBjdXBzIGZsb3VyIiwKICAiMSBjdXAgc3VnYXIiLAogICIzIGVnZ3MiCl19CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCBhdCBsZWFzdCAzIGluZ3JlZGllbnRzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaW5zdHJ1Y3Rpb24gc3RlcC4uLiJ9CiAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiUHJlaGVhdCBvdmVuIHRvIDM1MFx4QjBGIiwKICAiTWl4IGRyeSBpbmdyZWRpZW50cyIKXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ZmFsc2V9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWF4SXRlbXM9JHsxMH0KICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTsKICBpZiAocHJldmlldykgewogICAgY29uc3QgZGF0YSA9IHsKICAgICAgaXRlbXM6IGUxMS5kZXRhaWwudmFsdWUsCiAgICAgIGNvdW50OiBlMTEuZGV0YWlsLnZhbHVlLmxlbmd0aCwKICAgICAgdGltZXN0YW1wOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkKICAgIH07CiAgICBwcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtcHJldmlldyIgaWQ9Imxpc3QtanNvbiI+CiAgICAgICAgICB7CiAgICAgICAgICAgICJpdGVtcyI6IFtdLAogICAgICAgICAgICAiY291bnQiOiAwLAogICAgICAgICAgICAidGltZXN0YW1wIjogIiR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfSIKICAgICAgICAgIH0KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg4pyoIEFkZCwgZWRpdCwgcmVtb3ZlLCBhbmQgcmVvcmRlciBpdGVtcyB0byBzZWUgdGhlIEpTT04gb3V0cHV0IHVwZGF0ZSBpbiByZWFsLXRpbWUKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24ifSAuc3VidGl0bGU9JHsiQ29tYmluZSBhbGwgZmVhdHVyZXMgZm9yIGNvbXBsZXggdXNlIGNhc2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgTWlsZXN0b25lcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIG1pbGVzdG9uZS4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbCiAgIlByb2plY3QgS2lja29mZiAtIFdlZWsgMSIsCiAgIlJlcXVpcmVtZW50cyBHYXRoZXJpbmcgLSBXZWVrIDItMyIsCiAgIkRlc2lnbiBQaGFzZSAtIFdlZWsgNC02IiwKICAiRGV2ZWxvcG1lbnQgU3ByaW50IDEgLSBXZWVrIDctOSIsCiAgIlRlc3RpbmcgJiBRQSAtIFdlZWsgMTAtMTEiLAogICJEZXBsb3ltZW50IC0gV2VlayAxMiIKXX0KICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0ke3RydWV9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik1hbmFnZSBwcm9qZWN0IG1pbGVzdG9uZXMgKDMtMTIgaXRlbXMsIHNvcnRhYmxlLCBubyBkdXBsaWNhdGVzKSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gRW1wdHkgU3RhdGUifSAuc3VidGl0bGU9JHsiSG93IHRoZSBjb21wb25lbnQgbG9va3Mgd2l0aCBubyBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJZb3VyIElkZWFzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTaGFyZSB5b3VyIGlkZWFzLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1tdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN0YXJ0IGFkZGluZyBpdGVtcyB0byBidWlsZCB5b3VyIGxpc3QifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9kZWVzLWlucHV0LWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRMaXN0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1saXN0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWluSXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0YWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb25maXJtRGVsZXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29uZmlybURlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2VkaXRpbmdJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlckluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ0N1cnJlbnRZX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfdGFyZ2V0SW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXRlbUhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaXRlbUhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbkl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NvcnRhYmxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbmZpcm1EZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnQ3VycmVudFlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhcmdldEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfbWF4SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhJdGVtc19pbml0aWFsaXplcnMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9taW5JdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5JdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluSXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkl0ZW1zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbkl0ZW1zX2luaXRpYWxpemVycywgX21pbkl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2FsbG93RHVwbGljYXRlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0R1cGxpY2F0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93RHVwbGljYXRlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbGxvd0R1cGxpY2F0ZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RHVwbGljYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzLCBfYWxsb3dEdXBsaWNhdGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3NvcnRhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zb3J0YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydGFibGVfaW5pdGlhbGl6ZXJzLCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfY29uZmlybURlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb25maXJtRGVsZXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb25maXJtRGVsZXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbmZpcm1EZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbmZpcm1EZWxldGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnB1dFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnB1dFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlucHV0VmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlucHV0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ0luZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nVmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdWYWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ1ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnZ2VkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdnZWRJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdnZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdPdmVySW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ092ZXJJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnT3ZlckluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kcmFnT3ZlckluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdTdGFydFkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdTdGFydFkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ1N0YXJ0WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ1N0YXJ0WSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnU3RhcnRZX2luaXRpYWxpemVycywgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfZHJhZ0N1cnJlbnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdDdXJyZW50WSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ0N1cnJlbnRZIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdDdXJyZW50WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ0N1cnJlbnRZID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdDdXJyZW50WV9pbml0aWFsaXplcnMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfdGFyZ2V0SW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFyZ2V0SW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhcmdldEluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhcmdldEluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YXJnZXRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIml0ZW1IZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIml0ZW1IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXRlbUhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXRlbUhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pdGVtSGVpZ2h0X2luaXRpYWxpemVycywgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dExpc3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIkFkZCBuZXcgaXRlbS4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21heEl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1heEl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgdW5saW1pdGVkCiAgICBzZXQgbWF4SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21pbkl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1pbkl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5JdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYWxsb3dEdXBsaWNhdGVzKCkgewogICAgICByZXR1cm4gdGhpcy4jYWxsb3dEdXBsaWNhdGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEdXBsaWNhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzb3J0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzb3J0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29uZmlybURlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29uZmlybURlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpcm1EZWxldGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb25maXJtRGVsZXRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZWRpdGluZ0luZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBlZGl0aW5nSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0aW5nSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2VkaXRpbmdJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZWRpdGluZ1ZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGluZ1ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZWRpdGluZ1ZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0aW5nVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnZ2VkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdnZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdnZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdnZWRJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdnZWRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdPdmVySW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIDApKTsKICAgIC8vIEVuaGFuY2VkIGRyYWcgc3RhdGUgZm9yIGludGVyYWN0aXZlIHJlb3JkZXJpbmcKICAgIGdldCBkcmFnU3RhcnRZKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ1N0YXJ0WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdTdGFydFkodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnQ3VycmVudFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnU3RhcnRZX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGRyYWdDdXJyZW50WSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdDdXJyZW50WSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ0N1cnJlbnRZX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFyZ2V0SW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICBnZXQgdGFyZ2V0SW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhcmdldEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2l0ZW1IZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgaXRlbUhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpdGVtSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBCb3VuZCBldmVudCBoYW5kbGVycyBmb3IgY2xlYW51cAogICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSBudWxsOwogICAgLy8gU3RvcmUgb3JpZ2luYWwgaXRlbSBwb3NpdGlvbnMgZm9yIGFjY3VyYXRlIGhpdCBkZXRlY3Rpb24gKGJlZm9yZSB0cmFuc2Zvcm1zKQogICAgb3JpZ2luYWxJdGVtUmVjdHMgPSBbXTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGlzdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBib3gtc2hhZG93IDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFByZXZlbnQgYW5pbWF0aW9uIGZyb20gYWZmZWN0aW5nIHNjcm9sbCBib3VuZHMgKi8KICAgICAgfQoKICAgICAgLmxpc3QtaXRlbTpsYXN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOm5vdCguaXMtZHJhZ2dpbmcpIC5saXN0LWl0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5Ny41JSkiLCAiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERyYWdnaW5nIGl0ZW0gLSBmb2xsb3dzIGN1cnNvciAqLwogICAgICAubGlzdC1pdGVtLmRyYWdnaW5nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgyMTUgMjAuMiUgMTIlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMCwgMCwgMCwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIHVwIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLXVwIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSkpOwogICAgICB9CgogICAgICAvKiBJdGVtcyB0aGF0IG5lZWQgdG8gbW92ZSBkb3duIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLWRvd24gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1pdGVtLWhlaWdodCwgNDhweCkpOwogICAgICB9CgoKICAgICAgLmRyYWctaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuaXRlbS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLml0ZW0tZWRpdC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLml0ZW0tYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zYXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsICJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLmFkZC1pdGVtLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsICJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmFkZC1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHggMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uLW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDM0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSB0cmFuc2l0aW9ucyBkdXJpbmcgZHJvcCB0byBwcmV2ZW50IGZsYXNoICovCiAgICAgIC5saXN0LWl0ZW1zLmRyb3BwaW5nIC5saXN0LWl0ZW0gewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1pdGVtcyI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy52YWx1ZS5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9Imxpc3QtaXRlbSAke3RoaXMuZHJhZ2dlZEluZGV4ID09PSBpbmRleDIgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSIke3RoaXMuc29ydGFibGUgJiYgIXRoaXMuZGlzYWJsZWR9IgogICAgICAgICAgICAgICAgQGRyYWdzdGFydD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgIEBkcmFnZW5kPSR7dGhpcy5oYW5kbGVEcmFnRW5kfQogICAgICAgICAgICAgICAgQGRyYWdvdmVyPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcmFnT3ZlcihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICBAZHJvcD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcChlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHt0aGlzLnNvcnRhYmxlICYmICF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpncmlwVmVydGljYWwifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXggPT09IGluZGV4MiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpdGVtLWVkaXQtaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRpbmdWYWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuZWRpdGluZ1ZhbHVlID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVFZGl0S2V5RG93bihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICAgICAgICBAYmx1cj0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS10ZXh0IiBAZGJsY2xpY2s9JHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICR7aXRlbX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZWRpdGluZ0luZGV4ID09PSBpbmRleDIgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIHNhdmUiIEBjbGljaz0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNhbmNlbEVkaXQoKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGVuY2lsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUl0ZW0oaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRyYXNoMiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApIDogYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgICAgTm8gaXRlbXMgYWRkZWQgeWV0CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgJHshdGhpcy5kaXNhYmxlZCAmJiAoIXRoaXMubWF4SXRlbXMgfHwgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1heEl0ZW1zKSA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGQtaXRlbS1jb250YWluZXIiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJhZGQtaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVBZGRLZXlEb3dufQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmFkZEl0ZW19CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5pbnB1dFZhbHVlLnRyaW0oKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0+PC9kZWVzLWljb24+IEFkZAogICAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVJbnB1dChlMTEpIHsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZTExLnRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUFkZEtleURvd24oZTExKSB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmFkZEl0ZW0oKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlRWRpdEtleURvd24oZTExLCBpbmRleDIpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVFZGl0KGluZGV4Mik7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTsKICAgICAgfQogICAgfQogICAgYWRkSXRlbSgpIHsKICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCF0cmltbWVkVmFsdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIXRoaXMuYWxsb3dEdXBsaWNhdGVzICYmIHRoaXMudmFsdWUuaW5jbHVkZXModHJpbW1lZFZhbHVlKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmFsaWRhdGlvblRleHQgPSAiIiwgM2UzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMubWF4SXRlbXMgJiYgdGhpcy52YWx1ZS5sZW5ndGggPj0gdGhpcy5tYXhJdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgTWF4aW11bSAke3RoaXMubWF4SXRlbXN9IGl0ZW1zIGFsbG93ZWRgOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRyaW1tZWRWYWx1ZV07CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgIH0KICAgIHN0YXJ0RWRpdChpbmRleDIpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSBpbmRleDI7CiAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy52YWx1ZVtpbmRleDJdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuaXRlbS1lZGl0LWlucHV0Iik7CiAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHNhdmVFZGl0KGluZGV4MikgewogICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB0aGlzLmVkaXRpbmdWYWx1ZS50cmltKCk7CiAgICAgIGlmICghdHJpbW1lZFZhbHVlKSB7CiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdHJpbW1lZFZhbHVlICE9PSB0aGlzLnZhbHVlW2luZGV4Ml0gJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgbmV3VmFsdWVbaW5kZXgyXSA9IHRyaW1tZWRWYWx1ZTsKICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IC0xOwogICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgY2FuY2VsRWRpdCgpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSAtMTsKICAgICAgdGhpcy5lZGl0aW5nVmFsdWUgPSAiIjsKICAgIH0KICAgIGFzeW5jIHJlbW92ZUl0ZW0oaW5kZXgyKSB7CiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHsKICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtRGlhbG9nKGBEZWxldGUgIiR7dGhpcy52YWx1ZVtpbmRleDJdfSI/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChfNCwgaTExKSA9PiBpMTEgIT09IGluZGV4Mik7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgYXN5bmMgc2hvd0NvbmZpcm1EaWFsb2cobWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZTIpOwogICAgfQogICAgLy8gRHJhZyBhbmQgZHJvcCBoYW5kbGVycyAtIEludGVyYWN0aXZlIGltcGxlbWVudGF0aW9uCiAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4MjsKICAgICAgdGhpcy50YXJnZXRJbmRleCA9IGluZGV4MjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gIm1vdmUiOwogICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCBpbmRleDIudG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGVtcHR5SW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZW1wdHlJbWcsIDAsIDApOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSBlMTEuY2xpZW50WTsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBjb25zdCBhbGxJdGVtcyA9IEFycmF5LmZyb20obGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikgfHwgW10pOwogICAgICBpZiAoYWxsSXRlbXNbaW5kZXgyXSkgewogICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IGFsbEl0ZW1zW2luZGV4Ml0ub2Zmc2V0SGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMub3JpZ2luYWxJdGVtUmVjdHMgPSBhbGxJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOwogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImlzLWRyYWdnaW5nIik7CiAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIuYmluZCh0aGlzKTsKICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQuYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgfQogICAgaGFuZGxlR2xvYmFsRHJhZ092ZXIoZTExKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBpZiAoIWxpc3RJdGVtcykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShsaXN0SXRlbXMucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpKTsKICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtc1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkZWx0YVkgPSB0aGlzLmRyYWdDdXJyZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtkZWx0YVl9cHgpYDsKICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgaWYgKCFkcmFnZ2VkUmVjdCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRDZW50ZXIgPSBkcmFnZ2VkUmVjdC50b3AgKyBkcmFnZ2VkUmVjdC5oZWlnaHQgLyAyICsgZGVsdGFZOwogICAgICBsZXQgbmV3VGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdnZWRJbmRleDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgaXRlbXMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGlmIChpMTEgPT09IHRoaXMuZHJhZ2dlZEluZGV4KQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbaTExXTsKICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgaXRlbUNlbnRlciA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwogICAgICAgIGlmIChpdGVtc1tpMTFdLmNsYXNzTGlzdC5jb250YWlucygibW92ZS11cCIpKSB7CiAgICAgICAgICBpdGVtQ2VudGVyIC09IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2kxMV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLWRvd24iKSkgewogICAgICAgICAgaXRlbUNlbnRlciArPSB0aGlzLml0ZW1IZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmIChkcmFnZ2VkQ2VudGVyIDwgaXRlbUNlbnRlciAmJiBpMTEgPCB0aGlzLmRyYWdnZWRJbmRleCkgewogICAgICAgICAgbmV3VGFyZ2V0SW5kZXggPSBpMTE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRDZW50ZXIgPiBpdGVtQ2VudGVyICYmIGkxMSA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBuZXdUYXJnZXRJbmRleCA9IGkxMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5ld1RhcmdldEluZGV4ICE9PSB0aGlzLnRhcmdldEluZGV4KSB7CiAgICAgICAgdGhpcy50YXJnZXRJbmRleCA9IG5ld1RhcmdldEluZGV4OwogICAgICAgIHRoaXMudXBkYXRlSXRlbVBvc2l0aW9ucyhpdGVtcyk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZUl0ZW1Qb3NpdGlvbnMoaXRlbXMpIHsKICAgICAgY29uc3QgZHJhZ2dlZElkeCA9IHRoaXMuZHJhZ2dlZEluZGV4OwogICAgICBjb25zdCB0YXJnZXRJZHggPSB0aGlzLnRhcmdldEluZGV4OwogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGlmIChsaXN0SXRlbXMpIHsKICAgICAgICBsaXN0SXRlbXMuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLCBgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKTsKICAgICAgfQogICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSBkcmFnZ2VkSWR4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgICBpdGVtLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IiwgYCR7dGhpcy5pdGVtSGVpZ2h0fXB4YCk7CiAgICAgICAgaWYgKGRyYWdnZWRJZHggPCB0YXJnZXRJZHgpIHsKICAgICAgICAgIGlmIChpMTEgPiBkcmFnZ2VkSWR4ICYmIGkxMSA8PSB0YXJnZXRJZHgpIHsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSWR4ID4gdGFyZ2V0SWR4KSB7CiAgICAgICAgICBpZiAoaTExID49IHRhcmdldElkeCAmJiBpMTEgPCBkcmFnZ2VkSWR4KSB7CiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgibW92ZS1kb3duIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbERyYWdFbmQoKSB7CiAgICAgIGlmICh0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcik7CiAgICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gaXRlbXM/Llt0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEgfHwgdGhpcy50YXJnZXRJbmRleCA9PT0gLTEgfHwgdGhpcy5kcmFnZ2VkSW5kZXggPT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IC0xKSB7CiAgICAgICAgICBkcmFnZ2VkRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gInRyYW5zZm9ybSAwLjE1cyBlYXNlIjsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIjsKICAgICAgICAgIGxldCBoYW5kbGVkMiA9IGZhbHNlOwogICAgICAgICAgY29uc3Qgb25SZXR1cm4gPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChoYW5kbGVkMikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGhhbmRsZWQyID0gdHJ1ZTsKICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uUmV0dXJuKTsKICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblJldHVybiwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgc2V0VGltZW91dChvblJldHVybiwgMjAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy50YXJnZXRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZFJlY3QgfHwgIXRhcmdldFJlY3QgfHwgIWRyYWdnZWRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgZmluYWxZOwogICAgICBpZiAodGhpcy50YXJnZXRJbmRleCA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC5ib3R0b20gLSBkcmFnZ2VkUmVjdC5ib3R0b207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC50b3AgLSBkcmFnZ2VkUmVjdC50b3A7CiAgICAgIH0KICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICJ0cmFuc2Zvcm0gMC4xNXMgZWFzZSI7CiAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7ZmluYWxZfXB4KWA7CiAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9ICgpID0+IHsKICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICBkcmFnZ2VkRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgb25UcmFuc2l0aW9uRW5kKTsKICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgdm9pZCBsaXN0SXRlbXM/Lm9mZnNldEhlaWdodDsKICAgICAgICBpdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgaXRlbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNmb3JtIik7CiAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZV07CiAgICAgICAgY29uc3QgW2RyYWdnZWRJdGVtXSA9IG5ld1ZhbHVlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwgMSk7CiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKHRoaXMudGFyZ2V0SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTsKICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7CiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgdGhpcy5kcmFnZ2VkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmRyYWdPdmVySW5kZXggPSAtMTsKICAgICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gMDsKICAgICAgICB0aGlzLmRyYWdDdXJyZW50WSA9IDA7CiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBmcmVzaEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbiA9ICJub25lIjsKICAgICAgICAgIH0pOwogICAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGZyZXNoSXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5yZW1vdmUoImRyb3BwaW5nIiwgImlzLWRyYWdnaW5nIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uVHJhbnNpdGlvbkVuZCwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMjAwKTsKICAgIH0KICAgIGNsZWFudXBEcmFnU3RhdGUobGlzdEl0ZW1zLCBpdGVtcykgewogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgIHZvaWQgbGlzdEl0ZW1zPy5vZmZzZXRIZWlnaHQ7CiAgICAgIGl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ092ZXJJbmRleCA9IC0xOwogICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IDA7CiAgICAgIHRoaXMuZHJhZ0N1cnJlbnRZID0gMDsKICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGZyZXNoSXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKTsKICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICBpdGVtLnN0eWxlLnRyYW5zaXRpb24gPSAibm9uZSI7CiAgICAgICAgfSk7CiAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgZnJlc2hJdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxpc3RJdGVtcz8uY2xhc3NMaXN0LnJlbW92ZSgiZHJvcHBpbmciLCAiaXMtZHJhZ2dpbmciKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQoKTsKICAgIH0KICAgIGhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKSB7CiAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCB0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgIH0KICAgIGhhbmRsZURyb3AoZTExLCBkcm9wSW5kZXgpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIH0KICAgIGVtaXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMiB8fCBbXTsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJBdCBsZWFzdCBvbmUgaXRlbSBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1pbkl0ZW1zICYmIHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5taW5JdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGA7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRMaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmljaCBUZXh0IEVkaXRvciJ9IC5zdWJ0aXRsZT0keyJBIGZ1bGwtZmVhdHVyZWQgcmljaCB0ZXh0IGVkaXRvciB3aXRoIGZvcm1hdHRpbmcgdG9vbGJhciJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkFydGljbGUgQ29udGVudCJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMT5XZWxjb21lIHRvIHRoZSBSaWNoIFRleHQgRWRpdG9yITwvaDE+PHA+VGhpcyBpcyBhIGZlYXR1cmUtcmljaCBlZGl0b3IgYnVpbHQgd2l0aCBUaXBUYXAuIFlvdSBjYW46PC9wPjx1bD48bGk+PHN0cm9uZz5Gb3JtYXQgdGV4dDwvc3Ryb25nPiB3aXRoIDxlbT52YXJpb3VzPC9lbT4gPHU+c3R5bGVzPC91PjwvbGk+PGxpPkNyZWF0ZSBkaWZmZXJlbnQgaGVhZGluZyBsZXZlbHM8L2xpPjxsaT5BZGQgPGEgaHJlZj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI+bGlua3M8L2E+IHRvIGV4dGVybmFsIHJlc291cmNlczwvbGk+PGxpPldyaXRlIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPiBvciBjb2RlIGJsb2NrczwvbGk+PC91bD48YmxvY2txdW90ZT48cD5Vc2UgdGhlIHRvb2xiYXIgYWJvdmUgdG8gZXhwbG9yZSBhbGwgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhdmFpbGFibGUhPC9wPjwvYmxvY2txdW90ZT48cD5TdGFydCB0eXBpbmcgdG8gc2VlIHRoZSBtYWdpYyBoYXBwZW4uLi48L3A+J30KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVc2UgdGhlIHRvb2xiYXIgdG8gZm9ybWF0IHlvdXIgY29udGVudCB3aXRoIGhlYWRpbmdzLCBsaXN0cywgbGlua3MsIGFuZCBtb3JlIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aCBQbGFjZWhvbGRlciJ9IC5zdWJ0aXRsZT0keyJFbXB0eSBlZGl0b3Igd2l0aCBwbGFjZWhvbGRlciB0ZXh0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiQmxvZyBQb3N0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU3RhcnQgd3JpdGluZyB5b3VyIGJsb2cgcG9zdCBoZXJlLi4uIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gQ29kZSBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJFZGl0b3IgcHJlLWZpbGxlZCB3aXRoIGNvZGUgZXhhbXBsZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJUZWNobmljYWwgRG9jdW1lbnRhdGlvbiJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMj5JbnN0YWxsYXRpb24gR3VpZGU8L2gyPjxwPlRvIGluc3RhbGwgdGhlIHBhY2thZ2UsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6PC9wPjxwcmU+PGNvZGU+bnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPjxwPlRoZW4gaW1wb3J0IHRoZSBjb21wb25lbnQgaW4geW91ciBUeXBlU2NyaXB0IGZpbGU6PC9wPjxwcmU+PGNvZGU+aW1wb3J0IHsgRGVlc0lucHV0UmljaHRleHQgfSBmcm9tICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciOzwvY29kZT48L3ByZT48cD5Zb3UgY2FuIG5vdyB1c2UgdGhlIDxjb2RlPiZsdDtkZWVzLWlucHV0LXJpY2h0ZXh0Jmd0OzwvY29kZT4gZWxlbWVudCBpbiB5b3VyIHRlbXBsYXRlcy48L3A+J30KICAgICAgICAgIC5taW5IZWlnaHQ9JHsyNTB9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIERpc2FibGVkIFN0YXRlIn0gLnN1YnRpdGxlPSR7IlJlYWQtb25seSByaWNoIHRleHQgY29udGVudCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlB1Ymxpc2hlZCBBcnRpY2xlIChSZWFkIE9ubHkpIn0gCiAgICAgICAgICAudmFsdWU9JHsnPGgyPlRoZSBGdXR1cmUgb2YgV2ViIENvbXBvbmVudHM8L2gyPjxwPldlYiBDb21wb25lbnRzIGhhdmUgcmV2b2x1dGlvbml6ZWQgaG93IHdlIGJ1aWxkIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLi4uPC9wPjxibG9ja3F1b3RlPjxwPiJUaGUgZnV0dXJlIG9mIHdlYiBkZXZlbG9wbWVudCBsaWVzIGluIHJldXNhYmxlLCBlbmNhcHN1bGF0ZWQgY29tcG9uZW50cy4iPC9wPjwvYmxvY2txdW90ZT4nfQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJUeXBlIGluIHRoZSBlZGl0b3IgYmVsb3cgYW5kIHNlZSB0aGUgSFRNTCBvdXRwdXQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1lZGl0b3IiCiAgICAgICAgICAubGFiZWw9JHsiVHJ5IGl0IHlvdXJzZWxmIn0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldyIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGUxMS5kZXRhaWwudmFsdWU7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJvdXRwdXQtcHJldmlldyI+CiAgICAgICAgICA8ZW0+SFRNTCBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmljaHRleHRTdHlsZXMgPSBbCiAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjIwMHB4IiwgIjIwMHB4Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyLmZvY3VzZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAyMDBweCk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA0MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDY5LjglKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53b3JkLWNvdW50IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQuc2hvdyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0IGlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyBidXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuZWRpdG9yLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b29sYmFyLWJ1dHRvbiwKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlclJpY2h0ZXh0ID0gKGNvbXBvbmVudCkgPT4gewogIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICR7Y29tcG9uZW50LmxhYmVsID8gYjJgPGxhYmVsIGNsYXNzPSJsYWJlbCI+JHtjb21wb25lbnQubGFiZWx9PC9sYWJlbD5gIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGFpbmVyICR7Y29tcG9uZW50LmVkaXRvcj8uaXNGb2N1c2VkID8gImZvY3VzZWQiIDogIiJ9IiBzdHlsZT0iLS1taW4taGVpZ2h0OiAke2NvbXBvbmVudC5taW5IZWlnaHR9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyVG9vbGJhcigpfQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQgJHtjb21wb25lbnQuc2hvd0xpbmtJbnB1dCA/ICJzaG93IiA6ICIifSI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iRW50ZXIgVVJMLi4uIiBAa2V5ZG93bj0ke2NvbXBvbmVudC5oYW5kbGVMaW5rSW5wdXRLZXlkb3dufSAvPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluay1pbnB1dC1idXR0b25zIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpbWFyeSIgQGNsaWNrPSR7Y29tcG9uZW50LnNhdmVMaW5rfT5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7Y29tcG9uZW50LnJlbW92ZUxpbmt9PlJlbW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ke2NvbXBvbmVudC5oaWRlTGlua0lucHV0fT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRlbnQiPjwvZGl2PgogICAgICAgICAgICAke2NvbXBvbmVudC5zaG93V29yZENvdW50ID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b3JkLWNvdW50Ij4ke2NvbXBvbmVudC53b3JkQ291bnR9IHdvcmQke2NvbXBvbmVudC53b3JkQ291bnQgIT09IDEgPyAicyIgOiAiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke2NvbXBvbmVudC5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke2NvbXBvbmVudC5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9jb21wb25lbnQuanMKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczYwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSaWNodGV4dCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcmljaHRleHQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dvcmRDb3VudF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1dvcmRDb3VudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfbWluSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGlua0lucHV0X2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZENvdW50X2RlY29yYXRvcnM7CiAgbGV0IF93b3JkQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UmljaHRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9taW5IZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX3Nob3dMaW5rSW5wdXRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3dvcmRDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1dvcmRDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V29yZENvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXb3JkQ291bnRfaW5pdGlhbGl6ZXJzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9taW5IZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5IZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluSGVpZ2h0X2luaXRpYWxpemVycywgX21pbkhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9zaG93TGlua0lucHV0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5rSW5wdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dMaW5rSW5wdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmtJbnB1dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmtJbnB1dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgX3Nob3dMaW5rSW5wdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfd29yZENvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZENvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFJpY2h0ZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzg7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93V29yZENvdW50X2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dXb3JkQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBtaW5IZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5IZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93TGlua0lucHV0KCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmtJbnB1dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dMaW5rSW5wdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IHdvcmRDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBlZGl0b3JFbGVtZW50ID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGxpbmtJbnB1dEVsZW1lbnQ7CiAgICB0aXB0YXBCdW5kbGUgPSBudWxsOwogICAgZWRpdG9yOwogICAgc3RhdGljIHN0eWxlcyA9IHJpY2h0ZXh0U3R5bGVzOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyUmljaHRleHQodGhpcyk7CiAgICB9CiAgICByZW5kZXJUb29sYmFyKCkgewogICAgICBjb25zdCBidXR0b25zID0gdGhpcy5nZXRUb29sYmFyQnV0dG9ucygpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7YnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gewogICAgICAgIGlmIChidXR0b24uaXNEaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke2J1dHRvbi5pc0FjdGl2ZT8uKCkgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQGNsaWNrPSR7YnV0dG9uLmFjdGlvbn0KICAgICAgICAgICAgdGl0bGU9JHtidXR0b24udGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdG9yfQogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YnV0dG9uLmljb259PjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYDsKICAgICAgfSl9CiAgICBgOwogICAgfQogICAgZ2V0VG9vbGJhckJ1dHRvbnMoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJib2xkIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Ym9sZCIsCiAgICAgICAgICB0aXRsZTogIkJvbGQgKEN0cmwrQikiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJib2xkIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJpdGFsaWMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTppdGFsaWMiLAogICAgICAgICAgdGl0bGU6ICJJdGFsaWMgKEN0cmwrSSkiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIml0YWxpYyIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kZXJsaW5lIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dW5kZXJsaW5lIiwKICAgICAgICAgIHRpdGxlOiAiVW5kZXJsaW5lIChDdHJsK1UpIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInN0cmlrZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnN0cmlrZXRocm91Z2giLAogICAgICAgICAgdGl0bGU6ICJTdHJpa2V0aHJvdWdoIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJzdHJpa2UiKQogICAgICAgIH0sCiAgICAgICAgeyBuYW1lOiAiZGl2aWRlcjEiLCB0aXRsZTogIiIsIGlzRGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAxIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMSB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDEgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMiIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcyIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmczIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAzIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDMgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIyIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYnVsbGV0TGlzdCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgdGl0bGU6ICJCdWxsZXQgTGlzdCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJ1bGxldExpc3QiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIm9yZGVyZWRMaXN0IiwKICAgICAgICAgIGljb246ICJsdWNpZGU6bGlzdE9yZGVyZWQiLAogICAgICAgICAgdGl0bGU6ICJOdW1iZXJlZCBMaXN0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0IikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJibG9ja3F1b3RlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6cXVvdGUiLAogICAgICAgICAgdGl0bGU6ICJRdW90ZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJsb2NrcXVvdGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGUiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImNvZGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGVCbG9jayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmZpbGVDb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSBCbG9jayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlQmxvY2soKS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIikKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIzIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAibGluayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpbmsiLAogICAgICAgICAgdGl0bGU6ICJBZGQgTGluayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlTGluaygpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJsaW5rIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkxlZnQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphbGlnbkxlZnQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBMZWZ0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAibGVmdCIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkNlbnRlciIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduQ2VudGVyIiwKICAgICAgICAgIHRpdGxlOiAiQWxpZ24gQ2VudGVyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigiY2VudGVyIikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJjZW50ZXIiIH0pCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYWxpZ25SaWdodCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduUmlnaHQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBSaWdodCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oInJpZ2h0IikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJyaWdodCIgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXI0IiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kbyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnVuZG8iLAogICAgICAgICAgdGl0bGU6ICJVbmRvIChDdHJsK1opIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlZG8iLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpyZWRvIiwKICAgICAgICAgIHRpdGxlOiAiUmVkbyAoQ3RybCtZKSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCkKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMudGlwdGFwQnVuZGxlID0gYXdhaXQgRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKS5sb2FkVGlwdGFwKCk7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5saW5rLWlucHV0IGlucHV0Iik7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRvcigpOwogICAgfQogICAgaW5pdGlhbGl6ZUVkaXRvcigpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudGlwdGFwQnVuZGxlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgeyBFZGl0b3IsIFN0YXJ0ZXJLaXQsIFVuZGVybGluZTogVW5kZXJsaW5lMiwgVGV4dEFsaWduLCBMaW5rOiBMaW5rMywgVHlwb2dyYXBoeSB9ID0gdGhpcy50aXB0YXBCdW5kbGU7CiAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7CiAgICAgICAgZWxlbWVudDogdGhpcy5lZGl0b3JFbGVtZW50LAogICAgICAgIGV4dGVuc2lvbnM6IFsKICAgICAgICAgIFN0YXJ0ZXJLaXQuY29uZmlndXJlKHsKICAgICAgICAgICAgaGVhZGluZzogewogICAgICAgICAgICAgIGxldmVsczogWzEsIDIsIDNdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVW5kZXJsaW5lMi5jb25maWd1cmUoe30pLAogICAgICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7CiAgICAgICAgICAgIHR5cGVzOiBbImhlYWRpbmciLCAicGFyYWdyYXBoIl0KICAgICAgICAgIH0pLAogICAgICAgICAgTGluazMuY29uZmlndXJlKHsKICAgICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLAogICAgICAgICAgICBIVE1MQXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAiZWRpdG9yLWxpbmsiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVHlwb2dyYXBoeS5jb25maWd1cmUoe30pCiAgICAgICAgXSwKICAgICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICh0aGlzLnBsYWNlaG9sZGVyID8gYDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YCA6ICIiKSwKICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHsKICAgICAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpOwogICAgICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfSwKICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9LAogICAgICAgIG9uQmx1cjogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgIH0KICAgIHVwZGF0ZVdvcmRDb3VudCgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHRleHQ5ID0gdGhpcy5lZGl0b3IuZ2V0VGV4dCgpOwogICAgICB0aGlzLndvcmRDb3VudCA9IHRleHQ5LnRyaW0oKSA/IHRleHQ5LnRyaW0oKS5zcGxpdCgvXHMrLykubGVuZ3RoIDogMDsKICAgIH0KICAgIHRvZ2dsZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSkgewogICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKCJsaW5rIikuaHJlZjsKICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSB0cnVlOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5saW5rSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZSA9IGhyZWYgfHwgIiI7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMubGlua0lucHV0RWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWUgPSAiIjsKICAgICAgICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHNhdmVMaW5rKCkgewogICAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmxpbmtJbnB1dEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCB1cmwgPSB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7CiAgICAgIGlmICh1cmwpIHsKICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTsKICAgICAgfQogICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgIH0KICAgIHJlbW92ZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5zZXRMaW5rKCkucnVuKCk7CiAgICAgIHRoaXMuaGlkZUxpbmtJbnB1dCgpOwogICAgfQogICAgaGlkZUxpbmtJbnB1dCgpIHsKICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gZmFsc2U7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgaGFuZGxlTGlua0lucHV0S2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVMaW5rKCk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgICAgfQogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZTIgIT09IHRoaXMuZWRpdG9yLmdldEhUTUwoKSkgewogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUyKTsKICAgICAgfQogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuc2V0VmFsdWUoIiIpOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLmVkaXRvcikgewogICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UmljaHRleHQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMzsKdmFyIGRlbW9GdW5jMzkgPSAoKSA9PiBiMihfYTMgfHwgKF9hMyA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC5zdWdnZXN0aW9ucz0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+XG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPScsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnJlcXVpcmVkPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgIC5kaXNhYmxlZD0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtZm9ybT5cbiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0XG4gICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgIC5yZXF1aXJlZD0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICdcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPlxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9JywgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAucmVxdWlyZWQ9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWlucHV0LXRleHRcbiAgICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgICAuaW5wdXRUeXBlPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9IiwgIj48L2RlZXMtZm9ybS1zdWJtaXQ+XG4gICAgICAgIDwvZGVlcy1mb3JtPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS10YWdzIlxuICAgICAgICAgIC5sYWJlbD0nLCAiXG4gICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgIEBjaGFuZ2U9IiwgYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctcHJldmlldyIgaWQ9InRhZ3MtcHJldmlldyI+CiAgICAgICAgICA8ZW0gc3R5bGU9ImNvbG9yOiAjOTk5OyI+Tm8gdGFncyBhZGRlZCB5ZXQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0idGFncy1qc29uIj4KICAgICAgICAgIDxlbT5KU09OIG91dHB1dCB3aWxsIGFwcGVhciBoZXJlLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gVXBkYXRlIEpTT04gcHJldmlldwogICAgICAgICAgY29uc3QgdGFnc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ludGVyYWN0aXZlLXRhZ3MnKTsKICAgICAgICAgIHRhZ3NJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QganNvblByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGFncy1qc29uJyk7CiAgICAgICAgICAgIGlmIChqc29uUHJldmlldykgewogICAgICAgICAgICAgIGpzb25QcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZS5kZXRhaWwudmFsdWUsIG51bGwsIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICA8XC9zY3JpcHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50YWctcHJldmlldyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZmFmYjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWYyOTM3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlMGU3ZmY7CiAgICAgICAgICBjb2xvcjogIzQzMzhjYTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC50YWctcHJldmlldy1pdGVtIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzMxMmU4MTsKICAgICAgICAgICAgY29sb3I6ICNjN2QyZmU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgLCAiMS4gQmFzaWMgVGFncyBJbnB1dCIsICJTaW1wbGUgdGFnIGlucHV0IHdpdGggY29tbW9uIHByb2dyYW1taW5nIGxhbmd1YWdlcyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZXMiLCAiQWRkIGEgbGFuZ3VhZ2UuLi4iLCBbIkphdmFTY3JpcHQiLCAiVHlwZVNjcmlwdCIsICJQeXRob24iLCAiR28iXSwgIlByZXNzIEVudGVyIG9yIGNvbW1hIHRvIGFkZCB0YWdzIiwgIjIuIFRhZ3Mgd2l0aCBTdWdnZXN0aW9ucyIsICJBdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBmYXN0ZXIgaW5wdXQiLCAiVGVjaCBTdGFjayIsICJUeXBlIHRvIHNlZSBzdWdnZXN0aW9ucy4uLiIsIFsKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTGl0IiwKICAiTmV4dC5qcyIsCiAgIk51eHQiLAogICJTdmVsdGVLaXQiLAogICJOb2RlLmpzIiwKICAiRGVubyIsCiAgIkJ1biIsCiAgIkV4cHJlc3MiLAogICJGYXN0aWZ5IiwKICAiTmVzdC5qcyIsCiAgIktvYSIsCiAgIk1vbmdvREIiLAogICJQb3N0Z3JlU1FMIiwKICAiUmVkaXMiLAogICJNeVNRTCIsCiAgIlNRTGl0ZSIsCiAgIkNhc3NhbmRyYSIsCiAgIkRvY2tlciIsCiAgIkt1YmVybmV0ZXMiLAogICJBV1MiLAogICJBenVyZSIsCiAgIkdDUCIsCiAgIlZlcmNlbCIsCiAgIk5ldGxpZnkiCl0sIFsiUmVhY3QiLCAiTm9kZS5qcyIsICJQb3N0Z3JlU1FMIiwgIkRvY2tlciJdLCAiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwgIjMuIExpbWl0ZWQgVGFncyIsICJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsICJUb3AgMyBTa2lsbHMiLCAiQWRkIHVwIHRvIDMgc2tpbGxzLi4uIiwgMywgWyJEZXNpZ24iLCAiRGV2ZWxvcG1lbnQiXSwgIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCAiQ2F0ZWdvcmllcyAoTWF4IDUpIiwgIlNlbGVjdCBjYXRlZ29yaWVzLi4uIiwgNSwgWyJCbG9nIiwgIlR1dG9yaWFsIiwgIk5ld3MiLCAiUmV2aWV3IiwgIkd1aWRlIiwgIkNhc2UgU3R1ZHkiLCAiSW50ZXJ2aWV3Il0sIFsiVHV0b3JpYWwiLCAiR3VpZGUiXSwgIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCAiNC4gUmVxdWlyZWQgJiBWYWxpZGF0aW9uIiwgIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsICJQcm9qZWN0IFRhZ3MiLCAiQWRkIGF0IGxlYXN0IG9uZSB0YWcuLi4iLCB0cnVlLCAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwgIjUuIERpc2FibGVkIFN0YXRlIiwgIlJlYWQtb25seSB0YWdzIGRpc3BsYXkiLCAiU3lzdGVtIFRhZ3MiLCBbIlN5c3RlbSIsICJQcm90ZWN0ZWQiLCAiUmVhZC1Pbmx5IiwgIkFyY2hpdmUiXSwgdHJ1ZSwgIlRoZXNlIHRhZ3MgY2Fubm90IGJlIG1vZGlmaWVkIiwgIjYuIEZvcm0gSW50ZWdyYXRpb24iLCAiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsICJQcm9qZWN0IE5hbWUiLCAiTXkgQXdlc29tZSBQcm9qZWN0IiwgdHJ1ZSwgIm5hbWUiLCAiVGVjaG5vbG9naWVzIFVzZWQiLCAiQWRkIHRlY2hub2xvZ2llcy4uLiIsIHRydWUsICJ0ZWNobm9sb2dpZXMiLCBbCiAgIlR5cGVTY3JpcHQiLAogICJKYXZhU2NyaXB0IiwKICAiUHl0aG9uIiwKICAiR28iLAogICJSdXN0IiwKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTm9kZS5qcyIsCiAgIkRlbm8iLAogICJFeHByZXNzIiwKICAiRmFzdEFQSSIKXSwgIlByb2plY3QgVGFncyIsICJBZGQgZGVzY3JpcHRpdmUgdGFncy4uLiIsICJ0YWdzIiwgMTAsIFsKICAiZnJvbnRlbmQiLAogICJiYWNrZW5kIiwKICAiZnVsbHN0YWNrIiwKICAibW9iaWxlIiwKICAiZGVza3RvcCIsCiAgIndlYiIsCiAgImFwaSIsCiAgImRhdGFiYXNlIiwKICAiZGV2b3BzIiwKICAidWkvdXgiLAogICJvcGVuc291cmNlIiwKICAic2FhcyIsCiAgImVudGVycHJpc2UiLAogICJzdGFydHVwIgpdLCAiRGVzY3JpcHRpb24iLCAidGV4dGFyZWEiLCAiRGVzY3JpYmUgeW91ciBwcm9qZWN0Li4uIiwgImRlc2NyaXB0aW9uIiwgIkNyZWF0ZSBQcm9qZWN0IiwgIjcuIEludGVyYWN0aXZlIERlbW8iLCAiQWRkIHRhZ3MgYW5kIHNlZSB0aGVtIGNvbGxlY3RlZCBpbiByZWFsLXRpbWUiLCAiWW91ciBJbnRlcmVzdHMiLCAiVHlwZSB5b3VyIGludGVyZXN0cy4uLiIsIFsKICAiTXVzaWMiLAogICJNb3ZpZXMiLAogICJCb29rcyIsCiAgIlRyYXZlbCIsCiAgIlBob3RvZ3JhcGh5IiwKICAiQ29va2luZyIsCiAgIkdhbWluZyIsCiAgIlNwb3J0cyIsCiAgIkFydCIsCiAgIlRlY2hub2xvZ3kiLAogICJGYXNoaW9uIiwKICAiRml0bmVzcyIsCiAgIk5hdHVyZSIsCiAgIlNjaWVuY2UiLAogICJIaXN0b3J5IgpdLCAoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWdzLXByZXZpZXciKTsKICBjb25zdCB0YWdzID0gZTExLmRldGFpbC52YWx1ZTsKICBpZiAocHJldmlldykgewogICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gdGFncy5tYXAoKHRhZykgPT4gYDxzcGFuIGNsYXNzPSJ0YWctcHJldmlldy1pdGVtIj4ke3RhZ308L3NwYW4+YCkuam9pbigiIik7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0VGFncyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGFncyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhUYWdzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhUYWdzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4VGFnc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRhZ3MyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWF4VGFnc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3N1Z2dlc3Rpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlNjAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9tYXhUYWdzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFRhZ3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFRhZ3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4VGFncywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4VGFncyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhUYWdzX2luaXRpYWxpemVycywgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VnZ2VzdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1Z2dlc3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWdnZXN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc2hvd1N1Z2dlc3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dTdWdnZXN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1N1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTdWdnZXN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1N1Z2dlc3Rpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9pbml0aWFsaXplcnMsIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUYWdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICJBZGQgdGFncy4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfbWF4VGFnc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhUYWdzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyB1bmxpbWl0ZWQKICAgIHNldCBtYXhUYWdzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhUYWdzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9tYXhUYWdzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHN1Z2dlc3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U3VnZ2VzdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93U3VnZ2VzdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTdWdnZXN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFnIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjIpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMykiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogdGFnQXBwZWFyIDAuMTVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdGFnQXBwZWFyIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgNDYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA1NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4wOCkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duICovCiAgICAgIC5zdWdnZXN0aW9ucy1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiBzdHlsZXMgKi8KICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuZmlsdGVyKChzdWdnZXN0aW9uKSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzdWdnZXN0aW9uKSAmJiBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0YWdzLWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrfQogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUubWFwKCh0YWcpID0+IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhZ308L3NwYW4+CiAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZy1yZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFnKGUxMSwgdGFnKX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIAogICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkICYmICghdGhpcy5tYXhUYWdzIHx8IHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5tYXhUYWdzKSA/IGIyYAogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWctaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVLZXlEb3dufQogICAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5oYW5kbGVGb2N1c30KICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVCbHVyfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAke3RoaXMuc2hvd1N1Z2dlc3Rpb25zICYmIGZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1kcm9wZG93biI+CiAgICAgICAgICAgICAgJHtmaWx0ZXJlZFN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InN1Z2dlc3Rpb24gJHtpbmRleDIgPT09IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPyAiaGlnaGxpZ2h0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuYWRkVGFnKHN1Z2dlc3Rpb24pOwogICAgICB9fQogICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBpbmRleDJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7c3VnZ2VzdGlvbn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uLW1lc3NhZ2UiPiR7dGhpcy52YWxpZGF0aW9uVGV4dH08L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ29udGFpbmVyQ2xpY2soZTExKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTsKICAgICAgaWYgKGlucHV0ICYmIGUxMS50YXJnZXQgIT09IGlucHV0KSB7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKSB8fCB0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSkgewogICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC9bLDtdL2csICIiKS50cmltKCk7CiAgICAgICAgaWYgKHRhZykgewogICAgICAgICAgdGhpcy5hZGRUYWcodGFnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleURvd24oZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA+PSAwICYmIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+ICF0aGlzLnZhbHVlLmluY2x1ZGVzKHN1Z2dlc3Rpb24pICYmIHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpOwogICAgICAgICAgaWYgKGZpbHRlcmVkU3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF0pIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcoZmlsdGVyZWRTdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlucHV0VmFsdWUudHJpbSgpKSB7CiAgICAgICAgICB0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkJhY2tzcGFjZSIgJiYgIXRoaXMuaW5wdXRWYWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJlbW92ZVRhZyhlMTEsIHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXSk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93RG93biIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBmaWx0ZXJlZENvdW50ID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHM5KSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzOSkgJiYgczkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpLmxlbmd0aDsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCArIDEsIGZpbHRlcmVkQ291bnQgLSAxKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiQXJyb3dVcCIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUZvY3VzKCkgewogICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVCbHVyKCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTsKICAgICAgfSwgMjAwKTsKICAgIH0KICAgIGFkZFRhZyh0YWcpIHsKICAgICAgaWYgKCF0YWcgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyh0YWcpKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMubWF4VGFncyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFRhZ3MpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRhZ107CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICByZW1vdmVUYWcoZTExLCB0YWcpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICBlbWl0Q2hhbmdlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTIgfHwgW107CiAgICB9CiAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiQXQgbGVhc3Qgb25lIHRhZyBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGFnczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZW5lcmF0ZVJlcG9ydEJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHRpdGxlLSR7dGltZXN0YW1wMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgY29udGVudDogIlN5c3RlbSBQZXJmb3JtYW5jZSBSZXBvcnQiCiAgICB9LAogICAgewogICAgICBpZDogYGRhdGUtJHt0aW1lc3RhbXAyICsgMX1gLAogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY29udGVudDogYEdlbmVyYXRlZCBvbjogJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCl9YAogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LWhlYWRpbmctJHt0aW1lc3RhbXAyICsgMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIkV4ZWN1dGl2ZSBTdW1tYXJ5IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LSR7dGltZXN0YW1wMiArIDN9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJUaGlzIHJlcG9ydCBwcm92aWRlcyBhbiBhbmFseXNpcyBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UgbWV0cmljcyBvdmVyIHRoZSBsYXN0IDMwIGRheXMuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgNH1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIktleSBNZXRyaWNzIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWxpc3QtJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICJBdmVyYWdlIHJlc3BvbnNlIHRpbWU6IDEyNG1zXG5VcHRpbWU6IDk5Ljk3JVxuQ1BVIHV0aWxpemF0aW9uOiA0NSVcbk1lbW9yeSB1c2FnZTogMi4zR0IgLyA4R0IiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgfSwKICAgIHsKICAgICAgaWQ6IGBhbmFseXNpcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDZ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJQZXJmb3JtYW5jZSBBbmFseXNpcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgYW5hbHlzaXMtcXVvdGUtJHt0aW1lc3RhbXAyICsgN31gLAogICAgICB0eXBlOiAicXVvdGUiLAogICAgICBjb250ZW50OiAiU3lzdGVtIHBlcmZvcm1hbmNlIHJlbWFpbnMgd2l0aGluIGFjY2VwdGFibGUgcGFyYW1ldGVycyB3aXRoIHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4iCiAgICB9LAogICAgewogICAgICBpZDogYGNvZGUtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA4fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiU2FtcGxlIFF1ZXJ5IFBlcmZvcm1hbmNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBjb2RlLWJsb2NrLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogImNvZGUiLAogICAgICBjb250ZW50OiAiU0VMRUNUIEFWRyhyZXNwb25zZV90aW1lKSBhcyBhdmdfdGltZSxcbiAgICAgICBDT1VOVCgqKSBhcyB0b3RhbF9yZXF1ZXN0cyxcbiAgICAgICBEQVRFKGNyZWF0ZWRfYXQpIGFzIGRhdGVcbkZST00gcGVyZm9ybWFuY2VfbG9nc1xuV0hFUkUgY3JlYXRlZF9hdCA+PSBOT1coKSAtIElOVEVSVkFMIDMwIERBWVxuR1JPVVAgQlkgREFURShjcmVhdGVkX2F0KVxuT1JERVIgQlkgZGF0ZSBERVNDOyIsCiAgICAgIG1ldGFkYXRhOiB7IGxhbmd1YWdlOiAic3FsIiB9CiAgICB9LAogICAgewogICAgICBpZDogYGRpdmlkZXItJHt0aW1lc3RhbXAyICsgMTB9YCwKICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICBjb250ZW50OiAiIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBmb290ZXItJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJSZXBvcnQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgU3lzdGVtIE1vbml0b3IgdjIuNS4wIgogICAgfQogIF07Cn07CnZhciBnZW5lcmF0ZVJlY2lwZUJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHJlY2lwZS10aXRsZS0ke3RpbWVzdGFtcDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgIGNvbnRlbnQ6ICJDbGFzc2ljIE1hcmdoZXJpdGEgUGl6emEiCiAgICB9LAogICAgewogICAgICBpZDogYHJlY2lwZS1pbnRyby0ke3RpbWVzdGFtcDIgKyAxfWAsCiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjb250ZW50OiAiQSB0cmFkaXRpb25hbCBJdGFsaWFuIHBpenphIHdpdGggZnJlc2ggYmFzaWwsIG1venphcmVsbGEsIGFuZCB0b21hdG8gc2F1Y2UuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBpbmdyZWRpZW50cy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjM1NX0gSW5ncmVkaWVudHMiCiAgICB9LAogICAgewogICAgICBpZDogYGRvdWdoLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgM31gLAogICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgY29udGVudDogIkZvciB0aGUgRG91Z2g6IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkb3VnaC1saXN0LSR7dGltZXN0YW1wMiArIDR9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAnNTAwZyB0aXBvICIwMCIgZmxvdXJcbjMyNW1sIHdhcm0gd2F0ZXJcbjEwZyBzYWx0XG43ZyBhY3RpdmUgZHJ5IHllYXN0XG4yIHRic3Agb2xpdmUgb2lsJywKICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJidWxsZXQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdG9wcGluZ3MtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA1fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiRm9yIHRoZSBUb3BwaW5nczoiCiAgICB9LAogICAgewogICAgICBpZDogYHRvcHBpbmdzLWxpc3QtJHt0aW1lc3RhbXAyICsgNn1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICI0MDBnIGNhbm5lZCBTYW4gTWFyemFubyB0b21hdG9lc1xuMjUwZyBmcmVzaCBtb3p6YXJlbGxhXG5GcmVzaCBiYXNpbCBsZWF2ZXNcbkV4dHJhIHZpcmdpbiBvbGl2ZSBvaWxcblNhbHQgYW5kIHBlcHBlciB0byB0YXN0ZSIsCiAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICB9LAogICAgewogICAgICBpZDogYGluc3RydWN0aW9ucy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDd9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjQ2OH1cdTIwMERcdXsxRjM3M30gSW5zdHJ1Y3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdGVwcy1saXN0LSR7dGltZXN0YW1wMiArIDh9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAiRGlzc29sdmUgeWVhc3QgaW4gd2FybSB3YXRlciBhbmQgbGV0IHN0YW5kIGZvciA1IG1pbnV0ZXNcbk1peCBmbG91ciBhbmQgc2FsdCwgY3JlYXRlIGEgd2VsbCBpbiBjZW50ZXJcbkFkZCB5ZWFzdCBtaXh0dXJlIGFuZCBvbGl2ZSBvaWxcbktuZWFkIGZvciAxMCBtaW51dGVzIHVudGlsIHNtb290aFxuTGV0IHJpc2UgZm9yIDEtMiBob3VycyB1bnRpbCBkb3VibGVkXG5QdW5jaCBkb3duIGFuZCBkaXZpZGUgaW50byBwb3J0aW9uc1xuUm9sbCBvdXQgZWFjaCBwb3J0aW9uIHRvIDEyLWluY2ggY2lyY2xlc1xuVG9wIHdpdGggY3J1c2hlZCB0b21hdG9lcywgbW96emFyZWxsYSwgYW5kIGJhc2lsXG5CYWtlIGF0IDQ3NVx4QjBGICgyNDVceEIwQykgZm9yIDEwLTEyIG1pbnV0ZXMiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdGlwLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgY29udGVudDogIlBybyB0aXA6IEZvciBhbiBhdXRoZW50aWMgdGFzdGUsIHVzZSBhIHBpenphIHN0b25lIGFuZCBwcmVoZWF0IGl0IGluIHRoZSBvdmVuIGZvciBhdCBsZWFzdCAzMCBtaW51dGVzIGJlZm9yZSBiYWtpbmcuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkaXZpZGVyLSR7dGltZXN0YW1wMiArIDEwfWAsCiAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgY29udGVudDogIiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgc2VydmluZ3MtJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJTZXJ2aW5nczogNCBwaXp6YXMgfCBQcmVwIHRpbWU6IDIgaG91cnMgfCBDb29rIHRpbWU6IDEyIG1pbnV0ZXMiCiAgICB9CiAgXTsKfTsKdmFyIGluaXRpYWxpemVFZGl0b3JzID0gKGNvbnRhaW5lcikgPT4gewogIGNvbnN0IGVkaXRvcnMgPSB7fTsKICBlZGl0b3JzLmJhc2ljID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItYmFzaWMiKTsKICBlZGl0b3JzLmFydGljbGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1hcnRpY2xlIik7CiAgZWRpdG9ycy5kcmFnRHJvcCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIik7CiAgZWRpdG9ycy50dXRvcmlhbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXR1dG9yaWFsIik7CiAgZWRpdG9ycy5tZWV0aW5nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItbWVldGluZyIpOwogIGVkaXRvcnMucmVjaXBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIik7CiAgZWRpdG9ycy50ZWNobmljYWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci10ZWNobmljYWwiKTsKICBlZGl0b3JzLmZvcm1JbnRlZ3JhdGlvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iKTsKICBlZGl0b3JzLnByb2dyYW1tYXRpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpOwogIGVkaXRvcnMuZXhwb3J0RGVtbyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWV4cG9ydCIpOwogIHJldHVybiBlZGl0b3JzOwp9Owp2YXIgc2V0dXBQcm9ncmFtbWF0aWNEZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgcmVwb3J0QnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVwb3J0Iik7CiAgY29uc3QgcmVjaXBlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVjaXBlIik7CiAgY29uc3QgY2xlYXJCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1jbGVhci1lZGl0b3IiKTsKICBpZiAocmVwb3J0QnRuKSB7CiAgICByZXBvcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZXBvcnRCbG9ja3MoKSk7CiAgICB9KTsKICB9CiAgaWYgKHJlY2lwZUJ0bikgewogICAgcmVjaXBlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBlZGl0b3IuaW1wb3J0QmxvY2tzKGdlbmVyYXRlUmVjaXBlQmxvY2tzKCkpOwogICAgfSk7CiAgfQogIGlmIChjbGVhckJ0bikgewogICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoW10pOwogICAgfSk7CiAgfQp9Owp2YXIgc2V0dXBFeHBvcnREZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgZXhwb3J0QmxvY2tzQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWJsb2NrcyIpOwogIGNvbnN0IGV4cG9ydEh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtaHRtbCIpOwogIGNvbnN0IGV4cG9ydE1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LW1hcmtkb3duIik7CiAgY29uc3Qgc2F2ZVN0YXRlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2F2ZS1zdGF0ZSIpOwogIGNvbnN0IHJlc3RvcmVTdGF0ZUJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKTsKICBsZXQgc2F2ZWRTdGF0ZSA9IG51bGw7CiAgaWYgKGV4cG9ydEJsb2Nrc0J0bikgewogICAgZXhwb3J0QmxvY2tzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBjb25zdCBibG9ja3MgPSBlZGl0b3IuZXhwb3J0QmxvY2tzKCk7CiAgICAgIGNvbnNvbGUubG9nKCJFeHBvcnRlZCBibG9ja3M6IiwgYmxvY2tzKTsKICAgICAgYWxlcnQoYEV4cG9ydGVkICR7YmxvY2tzLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKTsKICAgIH0pOwogIH0KICBpZiAoZXhwb3J0SHRtbEJ0bikgewogICAgZXhwb3J0SHRtbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY29uc3QgaHRtbDE4ID0gZWRpdG9yLmV4cG9ydEFzSHRtbCgpOwogICAgICBjb25zb2xlLmxvZygiSFRNTCBFeHBvcnQ6IiwgaHRtbDE4KTsKICAgICAgYWxlcnQoIkhUTUwgZXhwb3J0ZWQgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLiIpOwogICAgfSk7CiAgfQogIGlmIChleHBvcnRNYXJrZG93bkJ0bikgewogICAgZXhwb3J0TWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNvbnN0IG1hcmtkb3duID0gZWRpdG9yLmV4cG9ydEFzTWFya2Rvd24oKTsKICAgICAgY29uc29sZS5sb2coIk1hcmtkb3duIEV4cG9ydDoiLCBtYXJrZG93bik7CiAgICAgIGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICB9KTsKICB9CiAgaWYgKHNhdmVTdGF0ZUJ0bikgewogICAgc2F2ZVN0YXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBzYXZlZFN0YXRlID0gZWRpdG9yLmV4cG9ydFN0YXRlKCk7CiAgICAgIGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLCBzYXZlZFN0YXRlKTsKICAgICAgYWxlcnQoIkVkaXRvciBzdGF0ZSBzYXZlZCEiKTsKICAgIH0pOwogIH0KICBpZiAocmVzdG9yZVN0YXRlQnRuKSB7CiAgICByZXN0b3JlU3RhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGlmIChzYXZlZFN0YXRlKSB7CiAgICAgICAgZWRpdG9yLmltcG9ydFN0YXRlKHNhdmVkU3RhdGUpOwogICAgICAgIGFsZXJ0KCJFZGl0b3Igc3RhdGUgcmVzdG9yZWQhIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIk5vIHNhdmVkIHN0YXRlIGZvdW5kLiBTYXZlIHN0YXRlIGZpcnN0ISIpOwogICAgICB9CiAgICB9KTsKICB9Cn07CnZhciBzZXR1cE91dHB1dEZvcm1hdERlbW8gPSAoY29udGFpbmVyLCBodG1sRWRpdG9yLCBtYXJrZG93bkVkaXRvcikgPT4gewogIGNvbnN0IGh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0Iik7CiAgY29uc3QgaHRtbFByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LWh0bWwiKTsKICBpZiAoaHRtbEJ0biAmJiBodG1sUHJldmlldyAmJiBodG1sRWRpdG9yKSB7CiAgICBodG1sQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBodG1sUHJldmlldy50ZXh0Q29udGVudCA9IGh0bWxFZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaHRtbFByZXZpZXcuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpOwogICAgfSk7CiAgfQogIGNvbnN0IG1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2hvdy1tYXJrZG93bi1vdXRwdXQiKTsKICBjb25zdCBtYXJrZG93blByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LW1hcmtkb3duIik7CiAgaWYgKG1hcmtkb3duQnRuICYmIG1hcmtkb3duUHJldmlldyAmJiBtYXJrZG93bkVkaXRvcikgewogICAgbWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIG1hcmtkb3duUHJldmlldy50ZXh0Q29udGVudCA9IG1hcmtkb3duRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIG1hcmtkb3duUHJldmlldy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICB9KTsKICB9Cn07CnZhciBwb3B1bGF0ZUluaXRpYWxDb250ZW50ID0gKGVkaXRvcnMpID0+IHsKICBpZiAoZWRpdG9ycy5hcnRpY2xlKSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3QgYXJ0aWNsZUJsb2NrcyA9IFsKICAgICAgICB7CiAgICAgICAgICBpZDogImludHJvLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6ICJJbnRyb2R1Y3Rpb24gdG8gTW9kZXJuIFdlYiBEZXZlbG9wbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiaW50cm8tcGFyYS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk1vZGVybiB3ZWIgZGV2ZWxvcG1lbnQgaGFzIGV2b2x2ZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRoZSBwYXN0IGRlY2FkZS4gSW4gdGhpcyBhcnRpY2xlLCB3ZSdsbCBleHBsb3JlIHRoZSBrZXkgdGVjaG5vbG9naWVzIGFuZCBiZXN0IHByYWN0aWNlcyB0aGF0IGRlZmluZSB3ZWIgZGV2ZWxvcG1lbnQgaW4gMjAyNC4iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIktleSBUZWNobm9sb2dpZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgIGNvbnRlbnQ6ICJUeXBlU2NyaXB0IC0gVHlwZS1zYWZlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnRcbldlYiBDb21wb25lbnRzIC0gTmF0aXZlIGNvbXBvbmVudCBtb2RlbFxuRVMgTW9kdWxlcyAtIE1vZGVybiBtb2R1bGUgc3lzdGVtXG5XZWJBc3NlbWJseSAtIEhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJxdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiAiVGhlIGJlc3Qgd2F5IHRvIHByZWRpY3QgdGhlIGZ1dHVyZSBpcyB0byBpbnZlbnQgaXQuIC0gQWxhbiBLYXkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImV4YW1wbGUtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIkNvZGUgRXhhbXBsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY29kZS1leGFtcGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgY29udGVudDogImNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgfVxuICBcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxufSIsCiAgICAgICAgICBtZXRhZGF0YTogeyBsYW5ndWFnZTogImphdmFzY3JpcHQiIH0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVkaXRvcnMuYXJ0aWNsZS5pbXBvcnRCbG9ja3MoYXJ0aWNsZUJsb2Nrcyk7CiAgICB9LCA1MDApOwogIH0KICBpZiAoZWRpdG9ycy5kcmFnRHJvcCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnN0IGRyYWdCbG9ja3MgPSBbCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLXRpdGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICBjb250ZW50OiAiRHJhZyAmIERyb3AgRGVtbyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1pbnRyby0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIlRoaXMgZWRpdG9yIGRlbW9uc3RyYXRlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIFRyeSBkcmFnZ2luZyB0aGVzZSBibG9ja3MgYXJvdW5kISIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICBjb250ZW50OiAiSG93IEl0IFdvcmtzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWxpc3QtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICBjb250ZW50OiAiSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZVxuQ2xpY2sgYW5kIGhvbGQgdGhlIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZ1xuRHJhZyB0byByZW9yZGVyIGJsb2Nrc1xuUmVsZWFzZSB0byBkcm9wIGluIHRoZSBuZXcgcG9zaXRpb24iLAogICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJvcmRlcmVkIiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRyYWctcXVvdGUtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgY29udGVudDogIlRoZSBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgbWFrZXMgaXQgZWFzeSB0byByZW9yZ2FuaXplIHlvdXIgY29udGVudCB3aXRob3V0IGN1dHRpbmcgYW5kIHBhc3RpbmcuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWRpdmlkZXItIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWZvb3Rlci0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk5vdGU6IERpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkLCBidXQgb3RoZXIgYmxvY2tzIGNhbiBiZSBtb3ZlZCBhcm91bmQgdGhlbS4iCiAgICAgICAgfQogICAgICBdOwogICAgICBlZGl0b3JzLmRyYWdEcm9wLmltcG9ydEJsb2NrcyhkcmFnQmxvY2tzKTsKICAgIH0sIDYwMCk7CiAgfQp9Owp2YXIgZGVtb0Z1bmM0MCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICBjb25zdCBlZGl0b3JzID0gaW5pdGlhbGl6ZUVkaXRvcnMoZWxlbWVudEFyZyk7CiAgaWYgKGVkaXRvcnMucHJvZ3JhbW1hdGljKSB7CiAgICBzZXR1cFByb2dyYW1tYXRpY0RlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5wcm9ncmFtbWF0aWMpOwogIH0KICBpZiAoZWRpdG9ycy5leHBvcnREZW1vKSB7CiAgICBzZXR1cEV4cG9ydERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5leHBvcnREZW1vKTsKICB9CiAgc2V0dXBPdXRwdXRGb3JtYXREZW1vKGVsZW1lbnRBcmcsIGVkaXRvcnMubWVldGluZywgZWRpdG9ycy5yZWNpcGUpOwogIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQoZWRpdG9ycyk7CiAgY29uc29sZS5sb2coIldZU0lXWUcgRGVtbyBpbml0aWFsaXplZCB3aXRoIGVkaXRvcnM6IiwgT2JqZWN0LmtleXMoZWRpdG9ycykpOwp9fT4KICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGFuZWwtZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZmVhdHVyZS1pdGVtIHsKICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KICAgICAgICAuZmVhdHVyZS1pY29uIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMTAyLCAyMDQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4zKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgIG1hcmdpbjogMCAwIDEycHggMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTgwcHgsIDFmcikpOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0LWl0ZW0gewogICAgICAgICAgY29sb3I6ICNiYmI7CiAgICAgICAgfQogICAgICAgIC5zaG9ydGN1dC1rZXkgewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm91dHB1dC1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAub3V0cHV0LWNhcmQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjA0KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjMGYxNzJhKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE1LCAyMywgNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1heC1oZWlnaHQ6IDI4MHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWU9J2RhcmsnXSkgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMDYpOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjE1KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjZjRmNGY1KTsKICAgICAgfQoKICAgICAgLm91dHB1dC1wcmV2aWV3LnZpc2libGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAub3V0cHV0LWdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1ib3ggewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmOGZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC50aXBzLWJveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWxpc3QgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4OwogICAgICAgIGJvcmRlci1jb2xvcjogI2NjYzsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZGVtby1idXR0b24gewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogIzQ0NDsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuaHRtbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1NiwgMzksIDE3NiwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgc3Ryb25nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM0Q0FGNTA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLm1hcmtkb3duIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICNGRjk4MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM5QzI3QjA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHAgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gXHV7MUY2ODB9IE1vZGVybiBXWVNJV1lHIEVkaXRvciJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBBIHBvd2VyZnVsIGJsb2NrLWJhc2VkIGVkaXRvciB3aXRoIHNsYXNoIGNvbW1hbmRzLCBrZXlib2FyZCBzaG9ydGN1dHMsIGFuZCBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBjb250ZW50IGNyZWF0aW9uLCBibG9nIHBvc3RzLCBkb2N1bWVudGF0aW9uLCBhbmQgbW9yZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+U2xhc2ggY29tbWFuZHMgKC8pPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPktleWJvYXJkIHNob3J0Y3V0czwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5CbG9jay1iYXNlZCBlZGl0aW5nPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRyYWcgJiBkcm9wIHJlb3JkZXJpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+SFRNTCAmIE1hcmtkb3duIG91dHB1dDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5EYXJrIG1vZGUgc3VwcG9ydDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5Nb2JpbGUgcmVzcG9uc2l2ZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWJhc2ljIgogICAgICAgICAgbGFiZWw9IlJpY2ggVGV4dCBFZGl0b3IiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0YXJ0IHR5cGluZyBvciB1c2UgJy8nIHRvIGluc2VydCBkaWZmZXJlbnQgYmxvY2sgdHlwZXMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dHMtYm94Ij4KICAgICAgICAgIDxoNCBjbGFzcz0ic2hvcnRjdXRzLXRpdGxlIj7ijKjvuI8gS2V5Ym9hcmQgU2hvcnRjdXRzPC9oND4KICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Lzwvc3Bhbj4gU2xhc2ggY29tbWFuZHMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiM8L3NwYW4+IEhlYWRpbmcgMQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyM8L3NwYW4+IEhlYWRpbmcgMgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyMjPC9zcGFuPiBIZWFkaW5nIDMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPj48L3NwYW4+IFF1b3RlCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij5cYFxgXGA8L3NwYW4+IENvZGUgYmxvY2sKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPio8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi08L3NwYW4+IEJ1bGxldCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4xLjwvc3Bhbj4gTnVtYmVyZWQgbGlzdAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LS0tPC9zcGFuPiBEaXZpZGVyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBcdXsxRjRERH0gQmxvZyBQb3N0IEV4YW1wbGUifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgUGVyZmVjdCBmb3IgY3JlYXRpbmcgcmljaCBjb250ZW50IHdpdGggbXVsdGlwbGUgYmxvY2sgdHlwZXMuIAogICAgICAgICAgVGhlIGVkaXRvciBwcmVzZXJ2ZXMgZm9ybWF0dGluZyBhbmQgcHJvdmlkZXMgYSBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2UuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWFydGljbGUiCiAgICAgICAgICBsYWJlbD0iQmxvZyBQb3N0IENvbnRlbnQiIAogICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSB1c2luZyB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9ucyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBcdXsxRjUwMH0gRHJhZyAmIERyb3AgUmVvcmRlcmluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBFYXNpbHkgcmVhcnJhbmdlIHlvdXIgY29udGVudCBibG9ja3MgYnkgZHJhZ2dpbmcgdGhlbS4gCiAgICAgICAgICBIb3ZlciBvdmVyIGFueSBibG9jayB0byByZXZlYWwgdGhlIGRyYWcgaGFuZGxlIG9uIHRoZSBsZWZ0IHNpZGUuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWRyYWdkcm9wIgogICAgICAgICAgbGFiZWw9IkRyYWcgJiBEcm9wIERlbW8iIAogICAgICAgICAgZGVzY3JpcHRpb249IlRyeSBkcmFnZ2luZyBibG9ja3MgdG8gcmVvcmRlciB0aGVtIC0gaG92ZXIgdG8gc2VlIGRyYWcgaGFuZGxlcyIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGlwcy1ib3giPgogICAgICAgICAgPHN0cm9uZz7wn5KhIFRpcHM6PC9zdHJvbmc+CiAgICAgICAgICA8dWwgY2xhc3M9InRpcHMtbGlzdCI+CiAgICAgICAgICAgIDxsaT5Ib3ZlciBvdmVyIGFueSBibG9jayB0byBzZWUgdGhlIGRyYWcgaGFuZGxlICjii67ii64pIG9uIHRoZSBsZWZ0PC9saT4KICAgICAgICAgICAgPGxpPkNsaWNrIGFuZCBob2xkIHRoZSBkcmFnIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZzwvbGk+CiAgICAgICAgICAgIDxsaT5CbHVlIGluZGljYXRvcnMgc2hvdyB3aGVyZSB0aGUgYmxvY2sgd2lsbCBiZSBkcm9wcGVkPC9saT4KICAgICAgICAgICAgPGxpPkRpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkPC9saT4KICAgICAgICAgICAgPGxpPlRoZSBlZGl0b3IgbWFpbnRhaW5zIGZvY3VzIG9uIHRoZSBtb3ZlZCBibG9jayBhZnRlciBkcm9wcGluZzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gXHV7MUY0REF9IFR1dG9yaWFsICYgRG9jdW1lbnRhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcHJlaGVuc2l2ZSB0dXRvcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBjb2RlIGV4YW1wbGVzLCBsaXN0cywgYW5kIHN0cnVjdHVyZWQgY29udGVudC4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdHV0b3JpYWwiCiAgICAgICAgICBsYWJlbD0iR2l0IFR1dG9yaWFsIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdGVwLWJ5LXN0ZXAgZ3VpZGUgd2l0aCBjb21tYW5kcyBhbmQgZXhwbGFuYXRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgIHZhbHVlPSIjIEdpdCBUdXRvcmlhbCBmb3IgQmVnaW5uZXJzCgpHaXQgaXMgYSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHRoYXQgaGVscHMgeW91IHRyYWNrIGNoYW5nZXMgaW4geW91ciBjb2RlIG92ZXIgdGltZS4gVGhpcyB0dXRvcmlhbCB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBiYXNpY3MuCgojIyBQcmVyZXF1aXNpdGVzCgpCZWZvcmUgc3RhcnRpbmcsIGVuc3VyZSB5b3UgaGF2ZToKCi0gR2l0IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbQotIEEgdGV4dCBlZGl0b3Igb3IgSURFCi0gQmFzaWMgY29tbWFuZCBsaW5lIGtub3dsZWRnZQoKIyMgR2V0dGluZyBTdGFydGVkCgojIyMgMS4gQ29uZmlndXJlIEdpdAoKRmlyc3QsIHNldCB1cCB5b3VyIGlkZW50aXR5OgoKXGBcYFxgYmFzaApnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAmcXVvdDtZb3VyIE5hbWUmcXVvdDsKZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsICZxdW90O3lvdXIuZW1haWxAZXhhbXBsZS5jb20mcXVvdDsKXGBcYFxgCgojIyMgMi4gSW5pdGlhbGl6ZSBhIFJlcG9zaXRvcnkKCkNyZWF0ZSBhIG5ldyBHaXQgcmVwb3NpdG9yeToKClxgXGBcYGJhc2gKbWtkaXIgbXktcHJvamVjdApjZCBteS1wcm9qZWN0CmdpdCBpbml0ClxgXGBcYAoKIyMjIDMuIEJhc2ljIEdpdCBXb3JrZmxvdwoKIyMjIyBBZGRpbmcgRmlsZXMKCkNyZWF0ZSBhIGZpbGUgYW5kIGFkZCBpdCB0byBzdGFnaW5nOgoKXGBcYFxgYmFzaAplY2hvICZxdW90OyMgTXkgUHJvamVjdCZxdW90OyA+IFJFQURNRS5tZApnaXQgYWRkIFJFQURNRS5tZApcYFxgXGAKCiMjIyMgQ29tbWl0dGluZyBDaGFuZ2VzCgpcYFxgXGBiYXNoCmdpdCBjb21taXQgLW0gJnF1b3Q7SW5pdGlhbCBjb21taXQmcXVvdDsKXGBcYFxgCgo+ICoqQmVzdCBQcmFjdGljZToqKiBXcml0ZSBjbGVhciwgZGVzY3JpcHRpdmUgY29tbWl0IG1lc3NhZ2VzIHRoYXQgZXhwbGFpbiB3aGF0IGNoYW5nZXMgd2VyZSBtYWRlIGFuZCB3aHkuCgojIyMgNC4gV29ya2luZyB3aXRoIEJyYW5jaGVzCgpCcmFuY2hlcyBhbGxvdyB5b3UgdG8gd29yayBvbiBmZWF0dXJlcyBpbmRlcGVuZGVudGx5OgoKXGBcYFxgYmFzaAojIENyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaApnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2gKCiMgTWFrZSBjaGFuZ2VzIGFuZCBjb21taXQKZ2l0IGFkZCAuCmdpdCBjb21taXQgLW0gJnF1b3Q7QWRkIG5ldyBmZWF0dXJlJnF1b3Q7CgojIFN3aXRjaCBiYWNrIHRvIG1haW4KZ2l0IGNoZWNrb3V0IG1haW4KCiMgTWVyZ2UgdGhlIGZlYXR1cmUKZ2l0IG1lcmdlIGZlYXR1cmUtYnJhbmNoClxgXGBcYAoKLS0tCgojIyBDb21tb24gQ29tbWFuZHMgUmVmZXJlbmNlCgp8IENvbW1hbmQgfCBEZXNjcmlwdGlvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCBcYGdpdCBzdGF0dXNcYCB8IENoZWNrIHJlcG9zaXRvcnkgc3RhdHVzIHwKfCBcYGdpdCBsb2dcYCB8IFZpZXcgY29tbWl0IGhpc3RvcnkgfAp8IFxgZ2l0IGRpZmZcYCB8IFNob3cgY2hhbmdlcyB8CnwgXGBnaXQgcHVsbFxgIHwgRmV0Y2ggYW5kIG1lcmdlIGNoYW5nZXMgfAp8IFxgZ2l0IHB1c2hcYCB8IFVwbG9hZCBjaGFuZ2VzIHRvIHJlbW90ZSB8CgojIyBOZXh0IFN0ZXBzCgoxLiBMZWFybiBhYm91dCByZW1vdGUgcmVwb3NpdG9yaWVzCjIuIEV4cGxvcmUgYWR2YW5jZWQgR2l0IGZlYXR1cmVzCjMuIFByYWN0aWNlIHdpdGggcmVhbCBwcm9qZWN0cwo0LiBDb250cmlidXRlIHRvIG9wZW4gc291cmNlCgoqKkhhcHB5IGNvZGluZyEqKiDwn5qAIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFx1ezFGNTA0fSBPdXRwdXQgRm9ybWF0cyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDaG9vc2UgYmV0d2VlbiBIVE1MIGFuZCBNYXJrZG93biBvdXRwdXQgZm9ybWF0cyBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JzLCBkb2N1bWVudGF0aW9uIHN5c3RlbXMsIG9yIGFueSBjb250ZW50IG1hbmFnZW1lbnQgd29ya2Zsb3cuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLW1lZXRpbmciCiAgICAgICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgTm90ZXMiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdHJ1Y3R1cmVkIG1lZXRpbmcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgICAgICAgdmFsdWU9IjxoMj5RNCBQbGFubmluZyBNZWV0aW5nPC9oMj48cD48c3Ryb25nPkRhdGU6PC9zdHJvbmc+IERlY2VtYmVyIDE1LCAyMDI0PGJyPjxzdHJvbmc+QXR0ZW5kZWVzOjwvc3Ryb25nPiBQcm9kdWN0IFRlYW0sIEVuZ2luZWVyaW5nLCBEZXNpZ248L3A+PGgzPkFnZW5kYSBJdGVtczwvaDM+PG9sPjxsaT5SZXZpZXcgUTMgYWNoaWV2ZW1lbnRzPC9saT48bGk+U2V0IFE0IG9iamVjdGl2ZXM8L2xpPjxsaT5SZXNvdXJjZSBhbGxvY2F0aW9uPC9saT48bGk+VGltZWxpbmUgZGlzY3Vzc2lvbjwvbGk+PC9vbD48aDM+S2V5IERlY2lzaW9uczwvaDM+PHVsPjxsaT5MYXVuY2ggbmV3IGRhc2hib2FyZCBmZWF0dXJlIGJ5IGVuZCBvZiBKYW51YXJ5PC9saT48bGk+SW5jcmVhc2UgZW5naW5lZXJpbmcgdGVhbSBieSAyIGRldmVsb3BlcnM8L2xpPjxsaT5JbXBsZW1lbnQgd2Vla2x5IGRlc2lnbiByZXZpZXdzPC9saT48L3VsPjxibG9ja3F1b3RlPiZxdW90O0ZvY3VzIG9uIHVzZXIgZXhwZXJpZW5jZSBpbXByb3ZlbWVudHMgYmFzZWQgb24gUTMgZmVlZGJhY2smcXVvdDsgLSBQcm9kdWN0IE1hbmFnZXI8L2Jsb2NrcXVvdGU+PGgzPkFjdGlvbiBJdGVtczwvaDM+PHVsPjxsaT5TYXJhaDogQ3JlYXRlIGRldGFpbGVkIHByb2plY3QgdGltZWxpbmU8L2xpPjxsaT5NaWtlOiBEcmFmdCB0ZWNobmljYWwgcmVxdWlyZW1lbnRzPC9saT48bGk+TGlzYTogU2NoZWR1bGUgdXNlciByZXNlYXJjaCBzZXNzaW9uczwvbGk+PC91bD48aHI+PHA+TmV4dCBtZWV0aW5nOiBKYW51YXJ5IDUsIDIwMjU8L3A+IgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2hvdy1odG1sLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IEhUTUwgT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1odG1sIiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGFyaWEtbGl2ZT0icG9saXRlIj48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgICAgaWQ9ImVkaXRvci1yZWNpcGUiCiAgICAgICAgICAgICAgbGFiZWw9IlJlY2lwZSBCbG9nIFBvc3QiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJGb29kIGJsb2cgd2l0aCBtaXhlZCBjb250ZW50IgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICAgICAgdmFsdWU9IiMgVWx0aW1hdGUgQ2hvY29sYXRlIENoaXAgQ29va2llcwoKVGhlcmUncyBub3RoaW5nIHF1aXRlIGxpa2UgdGhlIHNtZWxsIG9mIGZyZXNobHkgYmFrZWQgY2hvY29sYXRlIGNoaXAgY29va2llcy4gVGhpcyByZWNpcGUgaGFzIGJlZW4gcGVyZmVjdGVkIG92ZXIgeWVhcnMgb2YgdGVzdGluZyEKCiMjIEluZ3JlZGllbnRzCgotIDLCvCBjdXBzIGFsbC1wdXJwb3NlIGZsb3VyCi0gMSB0c3AgYmFraW5nIHNvZGEKLSAxIHRzcCBzYWx0Ci0gMSBjdXAgYnV0dGVyLCBzb2Z0ZW5lZAotIMK+IGN1cCBncmFudWxhdGVkIHN1Z2FyCi0gwr4gY3VwIHBhY2tlZCBicm93biBzdWdhcgotIDIgbGFyZ2UgZWdncwotIDIgdHNwIHZhbmlsbGEgZXh0cmFjdAotIDIgY3VwcyBjaG9jb2xhdGUgY2hpcHMKCiMjIEluc3RydWN0aW9ucwoKIyMjIFN0ZXAgMTogUHJlcGFyYXRpb24KClByZWhlYXQgeW91ciBvdmVuIHRvICoqMzc1wrBGICgxOTDCsEMpKiouIFRoaXMgdGVtcGVyYXR1cmUgaXMgY3J1Y2lhbCBmb3IgYWNoaWV2aW5nIHRoZSBwZXJmZWN0IHRleHR1cmUuCgojIyMgU3RlcCAyOiBNaXggRHJ5IEluZ3JlZGllbnRzCgpJbiBhIG1lZGl1bSBib3dsLCB3aGlzayB0b2dldGhlcjoKCjEuIEZsb3VyCjIuIEJha2luZyBzb2RhCjMuIFNhbHQKCiMjIyBTdGVwIDM6IENyZWFtIEJ1dHRlciBhbmQgU3VnYXJzCgpcYFxgXGAKQ3JlYW0gYnV0dGVyIGFuZCBzdWdhcnMgZm9yIDMtNCBtaW51dGVzCnVudGlsIGxpZ2h0IGFuZCBmbHVmZnkKXGBcYFxgCgo+ICoqUHJvIHRpcDoqKiBSb29tIHRlbXBlcmF0dXJlIGluZ3JlZGllbnRzIG1peCBiZXR0ZXIgYW5kIGNyZWF0ZSBhIG1vcmUgdW5pZm9ybSBkb3VnaC4KCiMjIyBTdGVwIDQ6IEFkZCBXZXQgSW5ncmVkaWVudHMKCkJlYXQgaW4gZWdncyBvbmUgYXQgYSB0aW1lLCB0aGVuIGFkZCB2YW5pbGxhIGV4dHJhY3QuCgojIyMgU3RlcCA1OiBDb21iaW5lIGFuZCBCYWtlCgpHcmFkdWFsbHkgYmxlbmQgaW4gZmxvdXIgbWl4dHVyZSwgdGhlbiBzdGlyIGluIGNob2NvbGF0ZSBjaGlwcy4gRHJvcCByb3VuZGVkIHRhYmxlc3Bvb25zIG9udG8gdW5ncmVhc2VkIGNvb2tpZSBzaGVldHMuCgotLS0KCioqQmFraW5nIHRpbWU6KiogOS0xMSBtaW51dGVzIG9yIHVudGlsIGdvbGRlbiBicm93bgoKKipZaWVsZDoqKiBBYm91dCA1IGRvemVuIGNvb2tpZXMiCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LW1hcmtkb3duLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IE1hcmtkb3duIE91dHB1dDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBpZD0ib3V0cHV0LXByZXZpZXctbWFya2Rvd24iIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBcdXsxRjNBOH0gQWR2YW5jZWQgRWRpdGluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcGxleCBkb2N1bWVudHMgd2l0aCBtaXhlZCBjb250ZW50IHR5cGVzLiBUaGUgZWRpdG9yIGhhbmRsZXMgYWxsIGZvcm1hdHRpbmcgc2VhbWxlc3NseS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdGVjaG5pY2FsIgogICAgICAgICAgbGFiZWw9IlRlY2huaWNhbCBEb2N1bWVudGF0aW9uIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgdGVjaG5pY2FsIGRvY3Mgd2l0aCBjb2RlIGV4YW1wbGVzIGFuZCBzdHJ1Y3R1cmVkIGNvbnRlbnQiCiAgICAgICAgICB2YWx1ZT0iPGgxPkFQSSBEb2N1bWVudGF0aW9uPC9oMT48cD5XZWxjb21lIHRvIG91ciBBUEkgZG9jdW1lbnRhdGlvbi4gQmVsb3cgeW91J2xsIGZpbmQgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSBvdXIgZW5kcG9pbnRzLjwvcD48aDI+QXV0aGVudGljYXRpb248L2gyPjxwPkFsbCBBUEkgcmVxdWVzdHMgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBBUEkga2V5OjwvcD48cHJlPjxjb2RlPkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVk8L2NvZGU+PC9wcmU+PGgyPkVuZHBvaW50czwvaDI+PGgzPkdFVCAvdXNlcnM8L2gzPjxwPlJldHJpZXZlIGEgbGlzdCBvZiB1c2VycyBmcm9tIHRoZSBzeXN0ZW0uPC9wPjxwcmU+PGNvZGU+Y3VybCAtWCBHRVQgaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMgXFwKICAtSCAmcXVvdDtBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJnF1b3Q7PC9jb2RlPjwvcHJlPjxibG9ja3F1b3RlPk5vdGU6IFJhdGUgbGltaXRpbmcgYXBwbGllcyB0byBhbGwgZW5kcG9pbnRzLiBZb3UgY2FuIG1ha2UgdXAgdG8gMTAwIHJlcXVlc3RzIHBlciBtaW51dGUuPC9ibG9ja3F1b3RlPjxoMz5QT1NUIC91c2VyczwvaDM+PHA+Q3JlYXRlIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT57CiAgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Sm9obiBEb2UmcXVvdDssCiAgJnF1b3Q7ZW1haWwmcXVvdDs6ICZxdW90O2pvaG5AZXhhbXBsZS5jb20mcXVvdDssCiAgJnF1b3Q7cm9sZSZxdW90OzogJnF1b3Q7dXNlciZxdW90Owp9PC9jb2RlPjwvcHJlPjxocj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIG91ciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLjwvcD4iCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gXHUyNjk5XHVGRTBGIEZvcm0gSW50ZWdyYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgU2VhbWxlc3NseSBpbnRlZ3JhdGVzIHdpdGggZGVlcy1mb3JtIGZvciBjb21wbGV0ZSBmb3JtIHNvbHV0aW9ucy4gCiAgICAgICAgICBBbGwgc3RhbmRhcmQgZm9ybSBmZWF0dXJlcyBsaWtlIHZhbGlkYXRpb24sIHJlcXVpcmVkIGZpZWxkcywgYW5kIGRhdGEgYmluZGluZyB3b3JrIG91dCBvZiB0aGUgYm94LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgbGFiZWw9IkFydGljbGUgVGl0bGUiIAogICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKICAgICAgICAgICAgdmFsdWU9IkhvdyB0byBCdWlsZCBNb2Rlcm4gV2ViIEFwcGxpY2F0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgaWQ9ImVkaXRvci1mb3JtLWludGVncmF0aW9uIgogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBDb250ZW50IiAKICAgICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSBjb250ZW50IGhlcmUiCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgIGxhYmVsPSJUYWdzIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iQWRkIHJlbGV2YW50IHRhZ3MgZm9yIHlvdXIgYXJ0aWNsZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIFx1ezFGOUU5fSBQcm9ncmFtbWF0aWMgQmxvY2sgQ3JlYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbnRlbnQgcHJvZ3JhbW1hdGljYWxseSB1c2luZyB0aGUgYmxvY2sgQVBJIGZvciBkeW5hbWljIGRvY3VtZW50IGdlbmVyYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItcHJvZ3JhbW1hdGljIgogICAgICAgICAgbGFiZWw9IlByb2dyYW1tYXRpY2FsbHkgR2VuZXJhdGVkIENvbnRlbnQiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBjb250ZW50IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBpbXBvcnRCbG9ja3MgQVBJIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlcG9ydCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVwb3J0CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlY2lwZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVjaXBlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWNsZWFyLWVkaXRvciIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgQ2xlYXIgRWRpdG9yCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIFx1ezFGNEU0fSBFeHBvcnQvSW1wb3J0IEZlYXR1cmVzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFRoZSBXWVNJV1lHIGVkaXRvciBwcm92aWRlcyBtdWx0aXBsZSBleHBvcnQgZm9ybWF0cyBhbmQgbG9zc2xlc3Mgc2F2ZS9yZXN0b3JlIGNhcGFiaWxpdGllcyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGJsb2NrcyI+CiAgICAgICAgICAgIDxzdHJvbmc+TG9zc2xlc3MgQmxvY2tzPC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhbmQgaW1wb3J0IHJhdyBibG9jayBzdHJ1Y3R1cmUgZm9yIHBlcmZlY3Qgcm91bmQtdHJpcCBlZGl0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGh0bWwiPgogICAgICAgICAgICA8c3Ryb25nPkhUTUwgRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkdldCBjbGVhbiwgc2VtYW50aWMgSFRNTCByZWdhcmRsZXNzIG9mIG91dHB1dCBmb3JtYXQgc2V0dGluZzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBtYXJrZG93biI+CiAgICAgICAgICAgIDxzdHJvbmc+TWFya2Rvd24gRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhcyBNYXJrZG93biBmb3IgZG9jcywgUkVBRE1FcywgYW5kIHN0YXRpYyBzaXRlczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBzdGF0ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+U3RhdGUgTWFuYWdlbWVudDwvc3Ryb25nPgogICAgICAgICAgICA8cD5TYXZlIGFuZCByZXN0b3JlIGNvbXBsZXRlIGVkaXRvciBzdGF0ZSBpbmNsdWRpbmcgc2V0dGluZ3M8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgICBpZD0iZWRpdG9yLWV4cG9ydCIKICAgICAgICAgIGxhYmVsPSJFeHBvcnQgRGVtbyBFZGl0b3IiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IHRoZSBleHBvcnQgYnV0dG9ucyBiZWxvdyB0byBzZWUgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIgogICAgICAgICAgdmFsdWU9IjxoMT5Tb2Z0d2FyZSBSZWxlYXNlIE5vdGVzPC9oMT48cD48c3Ryb25nPlZlcnNpb24gMi41LjA8L3N0cm9uZz4gLSBSZWxlYXNlZCBEZWNlbWJlciAxNSwgMjAyNDwvcD48aDI+8J+OiSBOZXcgRmVhdHVyZXM8L2gyPjx1bD48bGk+QWRkZWQgZGFyayBtb2RlIHN1cHBvcnQgYWNyb3NzIGFsbCBjb21wb25lbnRzPC9saT48bGk+SW1wbGVtZW50ZWQgcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gZmVhdHVyZXM8L2xpPjxsaT5OZXcgZGFzaGJvYXJkIGFuYWx5dGljcyB3aWRnZXRzPC9saT48bGk+RXhwb3J0IGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCByZXBvcnQgdHlwZXM8L2xpPjwvdWw+PGgyPvCfkJsgQnVnIEZpeGVzPC9oMj48dWw+PGxpPkZpeGVkIG1lbW9yeSBsZWFrIGluIGRhdGEgcHJvY2Vzc2luZyBtb2R1bGU8L2xpPjxsaT5SZXNvbHZlZCBhdXRoZW50aWNhdGlvbiB0aW1lb3V0IGlzc3VlczwvbGk+PGxpPkNvcnJlY3RlZCB0aW1lem9uZSBoYW5kbGluZyBpbiBzY2hlZHVsZWQgdGFza3M8L2xpPjwvdWw+PGgyPuKaoSBQZXJmb3JtYW5jZSBJbXByb3ZlbWVudHM8L2gyPjxibG9ja3F1b3RlPlBhZ2UgbG9hZCB0aW1lcyByZWR1Y2VkIGJ5IDQwJSB0aHJvdWdoIGxhenkgbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmc8L2Jsb2NrcXVvdGU+PGgyPvCflKcgVGVjaG5pY2FsIERldGFpbHM8L2gyPjxwcmU+PGNvZGU+Ly8gTmV3IEFQSSBlbmRwb2ludCBmb3IgYmF0Y2ggb3BlcmF0aW9ucwpQT1NUIC9hcGkvdjIvYmF0Y2gKewogICZxdW90O29wZXJhdGlvbnMmcXVvdDs6IFsKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtHRVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy91c2Vycy8xMjMmcXVvdDsgfSwKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtQVVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy9zZXR0aW5ncyZxdW90OywgJnF1b3Q7Ym9keSZxdW90Ozogey4uLn0gfQogIF0KfTwvY29kZT48L3ByZT48aDI+8J+SoSBNaWdyYXRpb24gR3VpZGU8L2gyPjxvbD48bGk+VXBkYXRlIHlvdXIgZGVwZW5kZW5jaWVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbnM8L2xpPjxsaT5SdW4gZGF0YWJhc2UgbWlncmF0aW9uczogPGNvZGU+bnBtIHJ1biBtaWdyYXRlPC9jb2RlPjwvbGk+PGxpPkNsZWFyIGNhY2hlOiA8Y29kZT5ucG0gcnVuIGNhY2hlOmNsZWFyPC9jb2RlPjwvbGk+PGxpPlJlc3RhcnQgYWxsIHNlcnZpY2VzPC9saT48L29sPjxocj48cD5Gb3IgcXVlc3Rpb25zIG9yIGlzc3VlcywgcGxlYXNlIGNvbnRhY3QgdGhlIGRldmVsb3BtZW50IHRlYW0gb3IgZmlsZSBhIHRpY2tldCBpbiBvdXIgaXNzdWUgdHJhY2tlci48L3A+IgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1ibG9ja3MiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBCbG9ja3MKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWh0bWwiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBhcyBIVE1MCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1tYXJrZG93biIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIE1hcmtkb3duCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNhdmUtc3RhdGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIFNhdmUgU3RhdGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tcmVzdG9yZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgUmVzdG9yZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zaG9ydGN1dHMuanMKdmFyIFd5c2l3eWdTaG9ydGN1dHMgPSBjbGFzcyB7CiAgc3RhdGljIEhFQURJTkdfUEFUVEVSTlMgPSBbCiAgICB7IHBhdHRlcm46IC9eI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMSIgfSwKICAgIHsgcGF0dGVybjogL14jI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMiIgfSwKICAgIHsgcGF0dGVybjogL14jIyNbXHNcdTAwQTBdJC8sIHR5cGU6ICJoZWFkaW5nLTMiIH0KICBdOwogIHN0YXRpYyBMSVNUX1BBVFRFUk5TID0gWwogICAgeyBwYXR0ZXJuOiAvXlsqLV1bXHNcdTAwQTBdJC8sIHR5cGU6ICJidWxsZXQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcLltcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcKVtcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0KICBdOwogIHN0YXRpYyBRVU9URV9QQVRURVJOID0gL14+W1xzXHUwMEEwXSQvOwogIHN0YXRpYyBDT0RFX1BBVFRFUk4gPSAvXmBgYCQvOwogIHN0YXRpYyBESVZJREVSX1BBVFRFUk5TID0gWyItLS0iLCAiKioqIiwgIl9fXyJdOwogIHN0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5IRUFESU5HX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja0xpc3RTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5MSVNUX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCBsaXN0VHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja1F1b3RlU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLlFVT1RFX1BBVFRFUk4udGVzdChjb250ZW50Myk7CiAgfQogIHN0YXRpYyBjaGVja0NvZGVTaG9ydGN1dChjb250ZW50MykgewogICAgcmV0dXJuIHRoaXMuQ09ERV9QQVRURVJOLnRlc3QoY29udGVudDMpOwogIH0KICBzdGF0aWMgY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLkRJVklERVJfUEFUVEVSTlMuaW5jbHVkZXMoY29udGVudDMpOwogIH0KICBzdGF0aWMgZ2V0U2xhc2hNZW51SXRlbXMoKSB7CiAgICByZXR1cm4gWwogICAgICB7IHR5cGU6ICJwYXJhZ3JhcGgiLCBsYWJlbDogIlBhcmFncmFwaCIsIGljb246ICJsdWNpZGU6cGlsY3JvdyIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGluZy0xIiwgbGFiZWw6ICJIZWFkaW5nIDEiLCBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiB9LAogICAgICB7IHR5cGU6ICJoZWFkaW5nLTIiLCBsYWJlbDogIkhlYWRpbmcgMiIsIGljb246ICJsdWNpZGU6aGVhZGluZzIiIH0sCiAgICAgIHsgdHlwZTogImhlYWRpbmctMyIsIGxhYmVsOiAiSGVhZGluZyAzIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMyIgfSwKICAgICAgeyB0eXBlOiAicXVvdGUiLCBsYWJlbDogIlF1b3RlIiwgaWNvbjogImx1Y2lkZTpxdW90ZSIgfSwKICAgICAgeyB0eXBlOiAiY29kZSIsIGxhYmVsOiAiQ29kZSBCbG9jayIsIGljb246ICJsdWNpZGU6ZmlsZUNvZGUiIH0sCiAgICAgIHsgdHlwZTogImxpc3QiLCBsYWJlbDogIkJ1bGxldCBMaXN0IiwgaWNvbjogImx1Y2lkZTpsaXN0IiB9LAogICAgICB7IHR5cGU6ICJpbWFnZSIsIGxhYmVsOiAiSW1hZ2UiLCBpY29uOiAibHVjaWRlOmltYWdlIiB9LAogICAgICB7IHR5cGU6ICJkaXZpZGVyIiwgbGFiZWw6ICJEaXZpZGVyIiwgaWNvbjogImx1Y2lkZTptaW51cyIgfSwKICAgICAgeyB0eXBlOiAieW91dHViZSIsIGxhYmVsOiAiWW91VHViZSIsIGljb246ICJsdWNpZGU6eW91dHViZSIgfSwKICAgICAgeyB0eXBlOiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiwgaWNvbjogImx1Y2lkZTpmaWxlVGV4dCIgfSwKICAgICAgeyB0eXBlOiAiaHRtbCIsIGxhYmVsOiAiSFRNTCIsIGljb246ICJsdWNpZGU6Y29kZSIgfSwKICAgICAgeyB0eXBlOiAiYXR0YWNobWVudCIsIGxhYmVsOiAiRmlsZSBBdHRhY2htZW50IiwgaWNvbjogImx1Y2lkZTpwYXBlcmNsaXAiIH0KICAgIF07CiAgfQogIHN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKSB7CiAgICByZXR1cm4gYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTbGFzaE1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNsYXNoLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcl9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NsYXNoTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZW51WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9maWx0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyX2luaXRpYWxpemVycywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgIGlmICghRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpIHsKICAgICAgICBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzU2xhc2hNZW51MigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9maWx0ZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbHRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbWVudVpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51WkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjYWxsYmFjayA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIsCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIgLmljb24sCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgdGhpcy5zdHlsZS56SW5kZXggPSB0aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzbGFzaC1tZW51LWl0ZW0gJHtpbmRleDIgPT09IHRoaXMuc2VsZWN0ZWRJbmRleCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2l0ZW0udHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtpbmRleDJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHtpdGVtLmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEZpbHRlcmVkTWVudUl0ZW1zKCkgewogICAgICBjb25zdCBhbGxJdGVtcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgcmV0dXJuIGFsbEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5maWx0ZXIgPT09ICIiIHx8IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlci50b0xvd2VyQ2FzZSgpKSk7CiAgICB9CiAgICBzZWxlY3RJdGVtKHR5cGU1KSB7CiAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5jYWxsYmFjayh0eXBlNSk7CiAgICAgIH0KICAgICAgdGhpcy5oaWRlKCk7CiAgICB9CiAgICBzaG93KHBvc2l0aW9uMywgY2FsbGJhY2spIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHRoaXMuZmlsdGVyID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyMikgewogICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBuYXZpZ2F0ZShkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJkb3duIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxKSAlIGl0ZW1zLmxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPT09IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4IC0gMTsKICAgICAgfQogICAgfQogICAgc2VsZWN0Q3VycmVudCgpIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChpdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0udHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTsKICAgICAgICBpZiAobWVudSAmJiBtZW51LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpOwogICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLXR5cGUiKTsKICAgICAgICAgIGlmIChpdGVtVHlwZSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbVR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTsKICAgICAgICBpZiAobWVudUl0ZW0pIHsKICAgICAgICAgIGNvbnN0IGluZGV4MiA9IHBhcnNlSW50KG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWluZGV4IikgfHwgIjAiLCAxMCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDI7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSwgdHJ1ZSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczYyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2VsZWN0aW9uLmpzCnZhciBXeXNpd3lnU2VsZWN0aW9uID0gY2xhc3MgewogIC8qKgogICAqIEdldHMgc2VsZWN0aW9uIGluZm8gdGhhdCB3b3JrcyBhY3Jvc3MgU2hhZG93IERPTSBib3VuZGFyaWVzCiAgICogQHBhcmFtIHNoYWRvd1Jvb3RzIC0gU2hhZG93IHJvb3RzIHRvIGluY2x1ZGUgaW4gdGhlIHNlbGVjdGlvbiBzZWFyY2gKICAgKi8KICBzdGF0aWMgZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgY29uc29sZS5sb2coIld5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyAtIHNlbGVjdGlvbjoiLCBzZWxlY3Rpb24sICJyYW5nZUNvdW50OiIsIHNlbGVjdGlvbj8ucmFuZ2VDb3VudCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoImdldENvbXBvc2VkUmFuZ2VzIiBpbiBzZWxlY3Rpb24gJiYgdHlwZW9mIHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zb2xlLmxvZygiVXNpbmcgZ2V0Q29tcG9zZWRSYW5nZXMgd2l0aCIsIHNoYWRvd1Jvb3RzLmxlbmd0aCwgInNoYWRvdyByb290cyIpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJhbmdlcyA9IHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyh7IHNoYWRvd1Jvb3RzIH0pOwogICAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyByZXR1cm5lZCIsIHJhbmdlcy5sZW5ndGgsICJyYW5nZXMiKTsKICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHJhbmdlc1swXTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiByYW5nZTIuc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgICAgIGVuZENvbnRhaW5lcjogcmFuZ2UyLmVuZENvbnRhaW5lciwKICAgICAgICAgICAgZW5kT2Zmc2V0OiByYW5nZTIuZW5kT2Zmc2V0LAogICAgICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiZ2V0Q29tcG9zZWRSYW5nZXMgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZ2V0UmFuZ2VBdDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayIpOwogICAgfQogICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgIGVuZE9mZnNldDogcmFuZ2UyLmVuZE9mZnNldCwKICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBzZWxlY3Rpb24gaXMgd2l0aGluIGEgc3BlY2lmaWMgZWxlbWVudCAoY29uc2lkZXJpbmcgU2hhZG93IERPTSkKICAgKi8KICBzdGF0aWMgaXNTZWxlY3Rpb25JbkVsZW1lbnQoZWxlbWVudDQsIHNoYWRvd1Jvb3QpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBzaGFkb3dSb290ID8gdGhpcy5nZXRTZWxlY3Rpb25JbmZvKHNoYWRvd1Jvb3QpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSB8fCBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIHNlbGVjdGVkIHRleHQgYWNyb3NzIFNoYWRvdyBET00gYm91bmRhcmllcwogICAqLwogIHN0YXRpYyBnZXRTZWxlY3RlZFRleHQoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICByZXR1cm4gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnRvU3RyaW5nKCkgOiAiIjsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIHJhbmdlIGZyb20gc2VsZWN0aW9uIGluZm8KICAgKi8KICBzdGF0aWMgY3JlYXRlUmFuZ2VGcm9tSW5mbyhpbmZvKSB7CiAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcmFuZ2UyLnNldFN0YXJ0KGluZm8uc3RhcnRDb250YWluZXIsIGluZm8uc3RhcnRPZmZzZXQpOwogICAgcmFuZ2UyLnNldEVuZChpbmZvLmVuZENvbnRhaW5lciwgaW5mby5lbmRPZmZzZXQpOwogICAgcmV0dXJuIHJhbmdlMjsKICB9CiAgLyoqCiAgICogU2V0cyBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlICh3b3JrcyB3aXRoIFNoYWRvdyBET00pCiAgICovCiAgc3RhdGljIHNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpIHsKICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgIGlmIChzZWxlY3Rpb24pIHsKICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0cyBjdXJzb3IgcG9zaXRpb24gcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCAuLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHNoYWRvd1Jvb3RzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm4gbnVsbDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudDQpOwogICAgICBjb25zdCBpc0NvbnRhaW5lZCA9IHRoaXMuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWxlbWVudDQsIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBpZiAoaXNDb250YWluZWQpIHsKICAgICAgICByYW5nZTIuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHJhbmdlMi50b1N0cmluZygpLmxlbmd0aDsKICAgICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHRleHQ5ID0gZWxlbWVudDQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgaWYgKHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQgPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCA9PT0gc2VsZWN0aW9uVGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0ZXh0OS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUud2FybigiU2VsZWN0aW9uIGNvbnRhaW5lciBub3Qgd2l0aGluIGVsZW1lbnQsIHVzaW5nIHRleHQgbWF0Y2hpbmcgZmFsbGJhY2siKTsKICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldDsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbjoiLCBlcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICAvKioKICAgKiBHZXRzIGN1cnNvciBwb3NpdGlvbiBmcm9tIG1vdXNlIGNvb3JkaW5hdGVzIHdpdGggU2hhZG93IERPTSBzdXBwb3J0CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgY29udGFpbmVyLCAuLi5zaGFkb3dSb290cykgewogICAgaWYgKCJjYXJldFBvc2l0aW9uRnJvbVBvaW50IiBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSB7CiAgICAgIGxldCBjYXJldFBvcyA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgY2FyZXRQb3MgPSBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgLi4uc2hhZG93Um9vdHMpOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICBjYXJldFBvcyA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeDMsIHk1KTsKICAgICAgfQogICAgICBpZiAoY2FyZXRQb3MgJiYgY29udGFpbmVyLmNvbnRhaW5zKGNhcmV0UG9zLm9mZnNldE5vZGUpKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2Zmc2V0SW5FbGVtZW50KGNhcmV0UG9zLm9mZnNldE5vZGUsIGNhcmV0UG9zLm9mZnNldCwgY29udGFpbmVyKTsKICAgICAgfQogICAgfQogICAgaWYgKCJjYXJldFJhbmdlRnJvbVBvaW50IiBpbiBkb2N1bWVudCkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgzLCB5NSk7CiAgICAgIGlmIChyYW5nZTIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHJhbmdlMi5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocmFuZ2UyLnN0YXJ0Q29udGFpbmVyLCByYW5nZTIuc3RhcnRPZmZzZXQsIGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBjaGFyYWN0ZXIgb2Zmc2V0IG9mIGEgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQKICAgKi8KICBzdGF0aWMgZ2V0T2Zmc2V0SW5FbGVtZW50KG5vZGUyLCBvZmZzZXQsIGNvbnRhaW5lcikgewogICAgbGV0IHRvdGFsT2Zmc2V0ID0gMDsKICAgIGxldCBmb3VuZCA9IGZhbHNlOwogICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCB0ZXh0Tm9kZTsKICAgIHdoaWxlICh0ZXh0Tm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gbm9kZTIpIHsKICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHRvdGFsT2Zmc2V0ICs9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZvdW5kID8gdG90YWxPZmZzZXQgOiAwOwogIH0KICAvKioKICAgKiBTZXRzIGN1cnNvciBwb3NpdGlvbiBpbiBhbiBlbGVtZW50CiAgICovCiAgc3RhdGljIHNldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBwb3NpdGlvbjMpIHsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZWxlbWVudDQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSAwOwogICAgbGV0IHRhcmdldE5vZGUgPSBudWxsOwogICAgbGV0IHRhcmdldE9mZnNldCA9IDA7CiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgY29uc3Qgbm9kZTIgPSB3YWxrZXIuY3VycmVudE5vZGU7CiAgICAgIGNvbnN0IG5vZGVMZW5ndGggPSBub2RlMi50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gKyBub2RlTGVuZ3RoID49IHBvc2l0aW9uMykgewogICAgICAgIHRhcmdldE5vZGUgPSBub2RlMjsKICAgICAgICB0YXJnZXRPZmZzZXQgPSBwb3NpdGlvbjMgLSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY3VycmVudFBvc2l0aW9uICs9IG5vZGVMZW5ndGg7CiAgICB9CiAgICBpZiAodGFyZ2V0Tm9kZSkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICByYW5nZTIuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgdGFyZ2V0T2Zmc2V0KTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICB0aGlzLnNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbGVtZW50IGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGVsZW1lbnQuY29udGFpbnMoKSBkb2Vzbid0IHdvcmsgYWNyb3NzIFNoYWRvdyBET00KICAgKi8KICBzdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY29udGFpbmVyLCBub2RlMikgewogICAgaWYgKCFjb250YWluZXIgfHwgIW5vZGUyKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgY3VycmVudCA9IG5vZGUyOwogICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgaWYgKGN1cnJlbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYgY3VycmVudC5ob3N0KSB7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKHNoYWRvd1Jvb3QuY29udGFpbnMoY29udGFpbmVyKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gc2hhZG93Um9vdC5ob3N0OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZm9ybWF0dGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Zvcm1hdHRpbmcgPSBjbGFzcyB7CiAgc3RhdGljIGZvcm1hdEJ1dHRvbnMgPSBbCiAgICB7IGNvbW1hbmQ6ICJib2xkIiwgaWNvbjogIkIiLCBsYWJlbDogIkJvbGQiLCBzaG9ydGN1dDogIlx1MjMxOEIiIH0sCiAgICB7IGNvbW1hbmQ6ICJpdGFsaWMiLCBpY29uOiAiSSIsIGxhYmVsOiAiSXRhbGljIiwgc2hvcnRjdXQ6ICJcdTIzMThJIiB9LAogICAgeyBjb21tYW5kOiAidW5kZXJsaW5lIiwgaWNvbjogIlUiLCBsYWJlbDogIlVuZGVybGluZSIsIHNob3J0Y3V0OiAiXHUyMzE4VSIgfSwKICAgIHsgY29tbWFuZDogInN0cmlrZVRocm91Z2giLCBpY29uOiAiU1x1MDMzNiIsIGxhYmVsOiAiU3RyaWtldGhyb3VnaCIgfSwKICAgIHsgY29tbWFuZDogImNvZGUiLCBpY29uOiAieyB9IiwgbGFiZWw6ICJJbmxpbmUgQ29kZSIgfSwKICAgIHsgY29tbWFuZDogImxpbmsiLCBpY29uOiAiXHV7MUY1MTd9IiwgbGFiZWw6ICJMaW5rIiwgc2hvcnRjdXQ6ICJcdTIzMThLIiB9CiAgXTsKICBzdGF0aWMgcmVuZGVyRm9ybWF0dGluZ01lbnUocG9zaXRpb24zLCBvbkZvcm1hdCkgewogICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7cG9zaXRpb24zLnl9cHg7IGxlZnQ6ICR7cG9zaXRpb24zLnh9cHg7IgogICAgICAgIEBtb3VzZWRvd249IiR7KGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfX0iCiAgICAgICAgQGNsaWNrPSIkeyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gYjJgCiAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICBjbGFzcz0iZm9ybWF0LWJ1dHRvbiAke2J1dHRvbi5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IG9uRm9ybWF0KGJ1dHRvbi5jb21tYW5kKX0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc3RhdGljIGFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZhbHVlMiwgcmFuZ2UyLCBzaGFkb3dSb290cykgewogICAgbGV0IHdvcmtpbmdSYW5nZTsKICAgIGlmIChyYW5nZTIpIHsKICAgICAgd29ya2luZ1JhbmdlID0gcmFuZ2UyOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHdvcmtpbmdSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgfQogICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgIGNhc2UgImJvbGQiOgogICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJzdHJvbmciKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaXRhbGljIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiZW0iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidW5kZXJsaW5lIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAidSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJpa2VUaHJvdWdoIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAicyIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2RlIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiY29kZSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJsaW5rIjoKICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayh3b3JraW5nUmFuZ2UsIHZhbHVlMik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoc2hhZG93Um9vdHMgJiYgc2hhZG93Um9vdHMubGVuZ3RoID4gMCkgewogICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldFNlbGVjdGlvbkZyb21SYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc3RhdGljIHdyYXBTZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFzRm9ybWF0dGluZyA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKTsKICAgIGlmIChoYXNGb3JtYXR0aW5nKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsIHRhZ05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZTIuZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgcmFuZ2UyLmluc2VydE5vZGUod3JhcHBlcik7CiAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyh3cmFwcGVyKTsKICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB3cmFwIHNlbGVjdGlvbjoiLCBlMTEpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb3IgaXMgd2l0aGluIGFueSBpbnN0YW5jZXMgb2YgYSB0YWcKICAgKi8KICBzdGF0aWMgc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBsZXQgbm9kZTIgPSByYW5nZTIuc3RhcnRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBub2RlMiA9IHJhbmdlMi5lbmRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5jbG9uZUNvbnRlbnRzKCk7CiAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTsKICAgIGNvbnN0IHRhZ3MgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgcmV0dXJuIHRhZ3MubGVuZ3RoID4gMDsKICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSB0aGUgc2VsZWN0aW9uCiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ0Zyb21TZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgbGV0IGV4cGFuZGVkUmFuZ2UgPSByYW5nZTIuY2xvbmVSYW5nZSgpOwogICAgbGV0IHN0YXJ0Tm9kZSA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgIGxldCBzdGFydFRhZyA9IG51bGw7CiAgICB3aGlsZSAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZSAhPT0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpIHsKICAgICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgc3RhcnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZSkgewogICAgICAgIHN0YXJ0VGFnID0gc3RhcnROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgbGV0IGVuZE5vZGUgPSByYW5nZTIuZW5kQ29udGFpbmVyOwogICAgbGV0IGVuZFRhZyA9IG51bGw7CiAgICB3aGlsZSAoZW5kTm9kZSAmJiBlbmROb2RlICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICBpZiAoZW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZW5kTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICBlbmRUYWcgPSBlbmROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7CiAgICB9CiAgICBpZiAoc3RhcnRUYWcpIHsKICAgICAgZXhwYW5kZWRSYW5nZS5zZXRTdGFydEJlZm9yZShzdGFydFRhZyk7CiAgICB9CiAgICBpZiAoZW5kVGFnKSB7CiAgICAgIGV4cGFuZGVkUmFuZ2Uuc2V0RW5kQWZ0ZXIoZW5kVGFnKTsKICAgIH0KICAgIGNvbnN0IGZyYWdtZW50ID0gZXhwYW5kZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgIGNvbnN0IHByb2Nlc3NlZEZyYWdtZW50ID0gdGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGZyYWdtZW50LCB0YWdOYW1lKTsKICAgIGV4cGFuZGVkUmFuZ2UuaW5zZXJ0Tm9kZShwcm9jZXNzZWRGcmFnbWVudCk7CiAgICBjb25zdCB0ZXh0Tm9kZXMgPSBbXTsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocHJvY2Vzc2VkRnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBub2RlMjsKICAgIHdoaWxlIChub2RlMiA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIHRleHROb2Rlcy5wdXNoKG5vZGUyKTsKICAgIH0KICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgIG5ld1JhbmdlLnNldEVuZCh0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLCB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSBhIGRvY3VtZW50IGZyYWdtZW50CiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ3NGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHRhZ05hbWUpIHsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICAgY29uc3QgdGFncyA9IHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7CiAgICBjb25zdCB0YWdBcnJheSA9IEFycmF5LmZyb20odGFncyk7CiAgICB0YWdBcnJheS5mb3JFYWNoKCh0YWcpID0+IHsKICAgICAgY29uc3QgcGFyZW50ID0gdGFnLnBhcmVudE5vZGU7CiAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICB3aGlsZSAodGFnLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGFnLmZpcnN0Q2hpbGQsIHRhZyk7CiAgICAgICAgfQogICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0YWcpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG5ld0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkgewogICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpOwogICAgfQogICAgcmV0dXJuIG5ld0ZyYWdtZW50OwogIH0KICBzdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKHJhbmdlMiwgdXJsKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCAiYSIpKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsICJhIik7CiAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgfQogICAgfQogICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgbGluazMudGFyZ2V0ID0gIl9ibGFuayI7CiAgICBsaW5rMy5yZWwgPSAibm9vcGVuZXIgbm9yZWZlcnJlciI7CiAgICB0cnkgewogICAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5leHRyYWN0Q29udGVudHMoKTsKICAgICAgbGluazMuYXBwZW5kQ2hpbGQoY29udGVudHMpOwogICAgICByYW5nZTIuaW5zZXJ0Tm9kZShsaW5rMyk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGluazMpOwogICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLCBlMTEpOwogICAgfQogIH0KICBzdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uc2hhZG93Um9vdHMpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgY29uc29sZS5sb2coImdldFNlbGVjdGlvbkNvb3JkaW5hdGVzIC0gc2VsZWN0aW9uSW5mbzoiLCBzZWxlY3Rpb25JbmZvKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBjb25zb2xlLmxvZygiTm8gc2VsZWN0aW9uIGluZm8gYXZhaWxhYmxlIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnNvbGUubG9nKCJSYW5nZSByZWN0OiIsIHJlY3QpOwogICAgaWYgKHJlY3Qud2lkdGggPT09IDAgJiYgcmVjdC5oZWlnaHQgPT09IDApIHsKICAgICAgY29uc29sZS5sb2coIlJlY3Qgd2lkdGggYW5kIGhlaWdodCBhcmUgMCwgdHJ5aW5nIGRpZmZlcmVudCBhcHByb2FjaCIpOwogICAgICBpZiAoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTMgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgdGVtcFNwYW4udGV4dENvbnRlbnQgPSAiXHUyMDBCIjsKICAgICAgICAgIHJhbmdlMy5pbnNlcnROb2RlKHRlbXBTcGFuKTsKICAgICAgICAgIGNvbnN0IHNwYW5SZWN0ID0gdGVtcFNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0ZW1wU3Bhbi5yZW1vdmUoKTsKICAgICAgICAgIGlmIChzcGFuUmVjdC53aWR0aCA+IDAgfHwgc3BhblJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgICAgICBjb25zdCBjb29yZHMyID0gewogICAgICAgICAgICAgIHg6IHNwYW5SZWN0LmxlZnQsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIHNwYW5SZWN0LnRvcCAtIDQ1KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zb2xlLmxvZygiVXNlZCBzcGFuIHRyaWNrIGZvciBjb29yZHM6IiwgY29vcmRzMik7CiAgICAgICAgICAgIHJldHVybiBjb29yZHMyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsCiAgICAgIHk6IE1hdGgubWF4KDQ1LCByZWN0LnRvcCAtIDQ1KQogICAgICAvLyBQb3NpdGlvbiBhYm92ZSBzZWxlY3Rpb24sIGJ1dCBlbnN1cmUgaXQncyBub3QgbmVnYXRpdmUKICAgIH07CiAgICBjb25zb2xlLmxvZygiUmV0dXJuaW5nIGNvb3JkczoiLCBjb29yZHMpOwogICAgcmV0dXJuIGNvb3JkczsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtZm9ybWF0dGluZy1tZW51LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0Zvcm1hdHRpbmdNZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtYXR0aW5nLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtYXR0aW5nTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWVudVpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIodGhpcywgbnVsbCwgX3Bvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRm9ybWF0dGluZ01lbnUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgICAgaWYgKCFEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKSB7CiAgICAgICAgRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzRm9ybWF0dGluZ01lbnUyKCk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKTsKICAgICAgfQogICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1lbnVaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudVpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY2FsbGJhY2sgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjNDA0MDQwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKDVweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLml0YWxpYyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi51bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiAuY29kZS1pY29uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImZvcm1hdHRpbmctbWVudSIgCiAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wb3NpdGlvbi54fXB4OyB0b3A6ICR7dGhpcy5wb3NpdGlvbi55fXB4OyIKICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgZGF0YS1tZW51LXR5cGU9ImZvcm1hdHRpbmciCiAgICAgID4KICAgICAgICAke1d5c2l3eWdGb3JtYXR0aW5nLmZvcm1hdEJ1dHRvbnMubWFwKChidXR0b24pID0+IGIyYAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIGRhdGEtY29tbWFuZD0iJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFwcGx5Rm9ybWF0KGNvbW1hbmQpIHsKICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmNhbGxiYWNrKGNvbW1hbmQpOwogICAgICB9CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgfQogICAgfQogICAgc2hvdyhwb3NpdGlvbjMsIGNhbGxiYWNrKSB7CiAgICAgIGNvbnNvbGUubG9nKCJGb3JtYXR0aW5nTWVudS5zaG93IGNhbGxlZDoiLCB7IHBvc2l0aW9uOiBwb3NpdGlvbjMsIHZpc2libGU6IHRoaXMudmlzaWJsZSB9KTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbjMpIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICBjb25zdCBidXR0b24gPSB0YXJnZXQuY2xvc2VzdCgiLmZvcm1hdC1idXR0b24iKTsKICAgICAgICBpZiAoYnV0dG9uKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLWNvbW1hbmQiKTsKICAgICAgICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtYXR0aW5nTWVudTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmludGVyZmFjZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMKdmFyIFBST0dSQU1NSU5HX0xBTkdVQUdFUyA9IFsKICAiSmF2YVNjcmlwdCIsCiAgIlR5cGVTY3JpcHQiLAogICJQeXRob24iLAogICJKYXZhIiwKICAiQysrIiwKICAiQyMiLAogICJHbyIsCiAgIlJ1c3QiLAogICJIVE1MIiwKICAiQ1NTIiwKICAiU1FMIiwKICAiU2hlbGwiLAogICJKU09OIiwKICAiWUFNTCIsCiAgIk1hcmtkb3duIiwKICAiUGxhaW4gVGV4dCIKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHd5c2l3eWdTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgbWluLWhlaWdodDogMjAwcHg7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzNmM2Y0NiIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMTgxODFiIil9LCAwIDAgMCA0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIil9OwogICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLyogVmlzdWFsIGhpbnQgZm9yIHRleHQgc2VsZWN0aW9uICovCiAgLmVkaXRvci1jb250ZW50OmhvdmVyIHsKICAgIGN1cnNvcjogdGV4dDsKICB9CgogIC5lZGl0b3ItY29udGVudCB7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICBtYXJnaW46IDAgLThweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogIH0KCiAgLmJsb2NrIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLyogRmlyc3QgYW5kIGxhc3QgYmxvY2tzIGRvbid0IG5lZWQgZXh0cmEgc3BhY2luZyAqLwogIC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAuYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgb3V0bGluZTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICB9CgogIC5ibG9ja1tjb250ZW50ZWRpdGFibGVdIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaDplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJUeXBlICcvJyBmb3IgY29tbWFuZHMuLi4iOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMSB7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDEiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMjplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDIiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMzplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDMiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLnF1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLnF1b3RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlF1b3RlIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5jb2RlLWJsb2NrLWNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW46IDIwcHggMDsKICB9CgogIC5jb2RlLWxhbmd1YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDRweDsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiAgICB6LWluZGV4OiAxOwogIH0KCiAgLmJsb2NrLmNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzE4MTgxYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgcGFkZGluZy10b3A6IDMycHg7IC8qIE1ha2Ugcm9vbSBmb3IgbGFuZ3VhZ2UgaW5kaWNhdG9yICovCiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgfQoKICAuYmxvY2suY29kZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIvLyBDb2RlIGJsb2NrIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmxpc3QgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwsCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIDAgMjRweDsKICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7CiAgfQoKICAuYmxvY2subGlzdCB1bCB7CiAgICBsaXN0LXN0eWxlOiBkaXNjOwogIH0KCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKICB9CgogIC5ibG9jay5saXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQoKICAuYmxvY2subGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgfQoKICAuYmxvY2suZGl2aWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgbWFyZ2luOiAwOwogIH0KCiAgLnNsYXNoLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgIHBhZGRpbmc6IDRweDsKICAgIHotaW5kZXg6IDEwMDA7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAudG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC00MHB4OwogICAgbGVmdDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBub25lOwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogIH0KCiAgLnRvb2xiYXIudmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAvKiBEcmFnIGFuZCBEcm9wIFN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogIH0KCiAgLyogRW5zdXJlIHByb3BlciBzcGFjaW5nIGNvbnRleHQgZm9yIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgfQoKICAvKiBPdmVycmlkZSBmb3IgaGVhZGluZ3MgZm9sbG93aW5nIG90aGVyIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTIsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0zIHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgfQoKICAvKiBDb2RlIGFuZCBxdW90ZSBibG9ja3MgbmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5jb2RlLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLnF1b3RlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgfQoKICAuZHJhZy1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogLTI4cHg7CiAgICB0b3A6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgY3Vyc29yOiBncmFiOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLmRyYWctaGFuZGxlOjpiZWZvcmUgewogICAgY29udGVudDogIuKLruKLriI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTJweDsKICB9CgogIC5ibG9jay13cmFwcGVyOmhvdmVyIC5kcmFnLWhhbmRsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICB9CgogIC5kcmFnLWhhbmRsZTphY3RpdmUgewogICAgY3Vyc29yOiBncmFiYmluZzsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgfQoKICAuYmxvY2std3JhcHBlci5kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDIwMDE7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQmxvY2tzIHRoYXQgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3YXkgKi8KICAuYmxvY2std3JhcHBlci5tb3ZlLWRvd24gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKTsKICB9CgogIC5ibG9jay13cmFwcGVyLm1vdmUtdXAgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSkpOwogIH0KCiAgLyogRHJvcCBpbmRpY2F0b3IgKi8KICAuZHJvcC1pbmRpY2F0b3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiKX07CiAgICBib3JkZXI6IDJweCBkYXNoZWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UsIGhlaWdodCAwLjJzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE5OTk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogUmVtb3ZlIG9sZCBkcmFnLW92ZXIgc3R5bGVzICovCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWJlZm9yZSwKICAuYmxvY2std3JhcHBlci5kcmFnLW92ZXItYWZ0ZXIgewogICAgLyogTm8gbG9uZ2VyIG5lZWRlZCwgdXNpbmcgZHJvcCBpbmRpY2F0b3IgaW5zdGVhZCAqLwogIH0KCiAgLmVkaXRvci1jb250ZW50LmRyYWdnaW5nICogewogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAvKiBCbG9jayBTZXR0aW5ncyBCdXR0b24gLSBSZW1vdmVkIGluIGZhdm9yIG9mIGNvbnRleHQgbWVudSAqLwoKICAvKiBUZXh0IFNlbGVjdGlvbiBTdHlsZXMgKi8KICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgY29sb3I6IGluaGVyaXQ7CiAgfQoKICAvKiBGb3JtYXR0aW5nIE1lbnUgKi8KICAuZm9ybWF0dGluZy1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICB6LWluZGV4OiAxMDAxOwogICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgZnJvbSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgycHgpOwogICAgfQogICAgdG8gewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgfQoKICAuZm9ybWF0LWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLmZvcm1hdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICB9CgogIC8qIEFwcGxpZWQgZm9ybWF0IHN0eWxlcyBpbiBjb250ZW50ICovCiAgLmJsb2NrIHN0cm9uZywKICAuYmxvY2sgYiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgZW0sCiAgLmJsb2NrIGkgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmJsb2NrIHUgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICAuYmxvY2sgc3RyaWtlLAogIC5ibG9jayBzIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgb3BhY2l0eTogMC43OwogIH0KCiAgLmJsb2NrIGNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBhIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYmxvY2sgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb252ZXJ0ZXJzLmpzCnZhciBXeXNpd3lnQ29udmVydGVycyA9IGNsYXNzIHsKICBzdGF0aWMgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBzdGF0aWMgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgc3RhdGljIGdldEh0bWxPdXRwdXQoYmxvY2tzKSB7CiAgICByZXR1cm4gYmxvY2tzLm1hcCgoYmxvY2spID0+IHsKICAgICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50LmluY2x1ZGVzKCI8IikgJiYgYmxvY2suY29udGVudC5pbmNsdWRlcygiPiIpID8gYmxvY2suY29udGVudCA6IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KTsKICAgICAgc3dpdGNoIChibG9jay50eXBlKSB7CiAgICAgICAgY2FzZSAicGFyYWdyYXBoIjoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50ID8gYDxwPiR7Y29udGVudDN9PC9wPmAgOiAiIjsKICAgICAgICBjYXNlICJoZWFkaW5nLTEiOgogICAgICAgICAgcmV0dXJuIGA8aDE+JHtjb250ZW50M308L2gxPmA7CiAgICAgICAgY2FzZSAiaGVhZGluZy0yIjoKICAgICAgICAgIHJldHVybiBgPGgyPiR7Y29udGVudDN9PC9oMj5gOwogICAgICAgIGNhc2UgImhlYWRpbmctMyI6CiAgICAgICAgICByZXR1cm4gYDxoMz4ke2NvbnRlbnQzfTwvaDM+YDsKICAgICAgICBjYXNlICJxdW90ZSI6CiAgICAgICAgICByZXR1cm4gYDxibG9ja3F1b3RlPiR7Y29udGVudDN9PC9ibG9ja3F1b3RlPmA7CiAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICByZXR1cm4gYDxwcmU+PGNvZGU+JHt0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCl9PC9jb2RlPjwvcHJlPmA7CiAgICAgICAgY2FzZSAibGlzdCI6CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBsaXN0VGFnID0gYmxvY2subWV0YWRhdGE/Lmxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiAiPGhyPiI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgaWYgKGltYWdlVXJsKSB7CiAgICAgICAgICAgIGNvbnN0IGFsdFRleHQgPSB0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCB8fCAiSW1hZ2UiKTsKICAgICAgICAgICAgcmV0dXJuIGA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHthbHRUZXh0fSIgLz5gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgY29uc3QgdmlkZW9JZCA9IGJsb2NrLm1ldGFkYXRhPy52aWRlb0lkOwogICAgICAgICAgaWYgKHZpZGVvSWQpIHsKICAgICAgICAgICAgcmV0dXJuIGA8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY2FzZSAibWFya2Rvd24iOgogICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJtYXJrZG93bi1jb250ZW50Ij4ke3RoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KX08L2Rpdj5gOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiYXR0YWNobWVudCI6CiAgICAgICAgICBjb25zdCBmaWxlcyA9IGJsb2NrLm1ldGFkYXRhPy5maWxlcyB8fCBbXTsKICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudHMiPiR7ZmlsZXMubWFwKChmaWxlKSA9PiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7ZmlsZS5pZH0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtmaWxlLmRhdGF9IiBkb3dubG9hZD0iJHtmaWxlLm5hbWV9Ij4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvYT4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPigke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBgPHA+JHtjb250ZW50M308L3A+YDsKICAgICAgfQogICAgfSkuZmlsdGVyKChodG1sMTgpID0+IGh0bWwxOCAhPT0gIiIpLmpvaW4oIlxuIik7CiAgfQogIHN0YXRpYyBnZXRNYXJrZG93bk91dHB1dChibG9ja3MpIHsKICAgIHJldHVybiBibG9ja3MubWFwKChibG9jaykgPT4gewogICAgICBzd2l0Y2ggKGJsb2NrLnR5cGUpIHsKICAgICAgICBjYXNlICJwYXJhZ3JhcGgiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgIHJldHVybiBgIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTIiOgogICAgICAgICAgcmV0dXJuIGAjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTMiOgogICAgICAgICAgcmV0dXJuIGAjIyMgJHtibG9jay5jb250ZW50fWA7CiAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgcmV0dXJuIGA+ICR7YmxvY2suY29udGVudH1gOwogICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgcmV0dXJuIGBcYFxgXGAKJHtibG9jay5jb250ZW50fQpcYFxgXGBgOwogICAgICAgIGNhc2UgImxpc3QiOgogICAgICAgICAgY29uc3QgaXRlbXMgPSBibG9jay5jb250ZW50LnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiKSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYCR7aW5kZXgyICsgMX0uICR7aXRlbX1gKS5qb2luKCJcbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4gYC0gJHtpdGVtfWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgY2FzZSAiZGl2aWRlciI6CiAgICAgICAgICByZXR1cm4gIi0tLSI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICAgIHJldHVybiBpbWFnZVVybCA/IGAhWyR7YWx0VGV4dH1dKCR7aW1hZ2VVcmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJ5b3V0dWJlIjoKICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgIGNvbnN0IHVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmwgfHwgKHZpZGVvSWQgPyBgaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JZH1gIDogIiIpOwogICAgICAgICAgcmV0dXJuIHVybCA/IGBbWW91VHViZSBWaWRlb10oJHt1cmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJtYXJrZG93biI6CiAgICAgICAgICByZXR1cm4gYmxvY2suY29udGVudDsKICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgIHJldHVybiBgPCEtLSBIVE1MIEJsb2NrCiR7YmxvY2suY29udGVudH0KLS0+YDsKICAgICAgICBjYXNlICJhdHRhY2htZW50IjoKICAgICAgICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYC0gWyR7ZmlsZS5uYW1lfV0oJHtmaWxlLmRhdGF9KWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50OwogICAgICB9CiAgICB9KS5maWx0ZXIoKG1kKSA9PiBtZCAhPT0gIiIpLmpvaW4oIlxuXG4iKTsKICB9CiAgc3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGh0bWwxOCkgewogICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sMTgsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTIpID0+IHsKICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLnRleHRDb250ZW50LnRyaW0oKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gbm9kZTI7CiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQ0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImgxIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LmlubmVySFRNTCB8fCAiIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJoMiI6CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaDMiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJsb2NrcXVvdGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicHJlIjoKICAgICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LnRleHRDb250ZW50IHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVsIjoKICAgICAgICAgIGNhc2UgIm9sIjoKICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gQXJyYXkuZnJvbShlbGVtZW50NC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpKTsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBsaXN0SXRlbXMubWFwKChsaTIpID0+IGxpMi5pbm5lckhUTUwgfHwgIiIpLmpvaW4oIlxuIik7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6IHRhZ05hbWUgPT09ICJvbCIgPyAib3JkZXJlZCIgOiAiYnVsbGV0IiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImhyIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiAiICIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaW1nIjoKICAgICAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICBjb250ZW50OiBpbWdFbGVtZW50LmFsdCB8fCAiIiwKICAgICAgICAgICAgICBtZXRhZGF0YTogeyB1cmw6IGltZ0VsZW1lbnQuc3JjIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZWxlbWVudDQuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBkb2MuYm9keS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUyKSA9PiBwcm9jZXNzTm9kZShub2RlMikpOwogICAgcmV0dXJuIGJsb2NrczsKICB9CiAgc3RhdGljIHBhcnNlTWFya2Rvd25Ub0Jsb2NrcyhtYXJrZG93bikgewogICAgY29uc3QgbGluZXMgPSBtYXJrZG93bi5zcGxpdCgiXG4iKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgbGV0IGN1cnJlbnRMaXN0SXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2kxMV07CiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoMikKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMjICIpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6IGxpbmUuc3Vic3RyaW5nKDMpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCIjIyMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoNCkKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIj4gIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZygyKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiYGBgIikpIHsKICAgICAgICBjb25zdCBjb2RlTGluZXMgPSBbXTsKICAgICAgICBpMTErKzsKICAgICAgICB3aGlsZSAoaTExIDwgbGluZXMubGVuZ3RoICYmICFsaW5lc1tpMTFdLnN0YXJ0c1dpdGgoImBgYCIpKSB7CiAgICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lc1tpMTFdKTsKICAgICAgICAgIGkxMSsrOwogICAgICAgIH0KICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgIGNvbnRlbnQ6IGNvZGVMaW5lcy5qb2luKCJcbiIpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXihcKnwtKSAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnN1YnN0cmluZygyKSk7CiAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyZW50TGlzdEl0ZW1zID0gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnJlcGxhY2UoL15cZCtcLiAvLCAiIikpOwogICAgICAgIGlmIChpMTEgPT09IGxpbmVzLmxlbmd0aCAtIDEgfHwgIWxpbmVzW2kxMSArIDFdLm1hdGNoKC9eXGQrXC4gLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lID09PSAiLS0tIiB8fCBsaW5lID09PSAiKioqIiB8fCBsaW5lID09PSAiX19fIikgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICAgICAgY29udGVudDogIiAiCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXiFcWyhbXlxdXSopXF1cKChbXlwpXSspXCkkLykpIHsKICAgICAgICBjb25zdCBtYXRjaDIgPSBsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTsKICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgICBjb250ZW50OiBtYXRjaDJbMV0gfHwgIiIsCiAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogbWF0Y2gyWzJdIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lLnRyaW0oKSkgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiBsaW5lCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBibG9ja3M7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Jsb2NrcyA9IGNsYXNzIHsKICBzdGF0aWMgcmVuZGVyTGlzdENvbnRlbnQoY29udGVudDMsIG1ldGFkYXRhKSB7CiAgICBjb25zdCBpdGVtcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdFRhZyA9IG1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7aXRlbXMubWFwKChpdGVtKSA9PiBgPGxpPiR7aXRlbX08L2xpPmApLmpvaW4oIiIpfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzdGF0aWMgcmVuZGVyQmxvY2soYmxvY2ssIGlzU2VsZWN0ZWQsIGhhbmRsZXJzMikgewogICAgaWYgKGJsb2NrLnR5cGUgPT09ICJkaXZpZGVyIikgewogICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImJsb2NrIGRpdmlkZXIiCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICA+CiAgICAgICAgICA8aHI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICBAaW5wdXQ9IiR7aGFuZGxlcnMyLm9uSW5wdXR9IgogICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICBAZm9jdXM9IiR7aGFuZGxlcnMyLm9uRm9jdXN9IgogICAgICAgICAgQGJsdXI9IiR7aGFuZGxlcnMyLm9uQmx1cn0iCiAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICBAbW91c2V1cD0iJHsoZTExKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICBpZiAoaGFuZGxlcnMyLm9uTW91c2VVcCkKICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXAoZTExKTsKICAgICAgfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJwbGFpbiB0ZXh0IjsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbGFuZ3VhZ2UiPiR7bGFuZ3VhZ2V9PC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgQGlucHV0PSIke2hhbmRsZXJzMi5vbklucHV0fSIKICAgICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgICAgIEBibHVyPSIke2hhbmRsZXJzMi5vbkJsdXJ9IgogICAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgICAgQG1vdXNldXA9IiR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIik7CiAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICBoYW5kbGVyczIub25Nb3VzZVVwKGUxMSk7CiAgICAgIH19IgogICAgICAgICAgICAudGV4dENvbnRlbnQ9IiR7YmxvY2suY29udGVudCB8fCAiIn0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgQGZvY3VzPSIke2hhbmRsZXJzMi5vbkZvY3VzfSIKICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgfX0iCiAgICAgICAgLmlubmVySFRNTD0iJHtibG9jay5jb250ZW50IHx8ICIifSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgIHJldHVybiBibG9ja0VsZW1lbnQ7CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWwpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBpZiAoZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyMDBCIik7CiAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgICAgcmFuZ2UyLnNldFN0YXJ0KHRleHROb2RlLCAxKTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3ROb2RlKGVsZW1lbnQ0KTsKICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICBpZiAoZWxlbWVudDQudGV4dENvbnRlbnQgPT09ICJcdTIwMEIiKSB7CiAgICAgIGVsZW1lbnQ0LnRleHRDb250ZW50ID0gIiI7CiAgICB9CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGlmIChlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByYW5nZTIuc2V0U3RhcnQoZWxlbWVudDQsIDApOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZShlbGVtZW50NCk7CiAgICAgIGlmIChmaXJzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGZpcnN0Tm9kZSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0QmVmb3JlKGZpcnN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgfQogIHN0YXRpYyBnZXRMYXN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQ0LmNoaWxkTm9kZXNbZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKICAgIGlmIChsYXN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGxhc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbGFzdENoaWxkOwogICAgfQogICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE5vZGUobGFzdENoaWxkKTsKICB9CiAgc3RhdGljIGdldEZpcnN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50NC5jaGlsZE5vZGVzWzBdOwogICAgaWYgKGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICB9CiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE5vZGUoZmlyc3RDaGlsZCk7CiAgfQogIHN0YXRpYyBmb2N1c0xpc3RJdGVtKGxpc3RFbGVtZW50KSB7CiAgICBjb25zdCBmaXJzdExpID0gbGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcigibGkiKTsKICAgIGlmIChmaXJzdExpKSB7CiAgICAgIGZpcnN0TGkuZm9jdXMoKTsKICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0TGkpOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy5qcwp2YXIgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwogICAqLwogIGNyZWF0ZUJsb2NrKHR5cGU1ID0gInBhcmFncmFwaCIsIGNvbnRlbnQzID0gIiIsIG1ldGFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgdHlwZTogdHlwZTUsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAuLi5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhIH0KICAgIH07CiAgfQogIC8qKgogICAqIEluc2VydHMgYSBibG9jayBhZnRlciB0aGUgc3BlY2lmaWVkIGJsb2NrCiAgICovCiAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrczsKICAgIGNvbnN0IGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGFmdGVyQmxvY2suaWQpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gWwogICAgICAuLi5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLAogICAgICBuZXdCbG9jaywKICAgICAgLi4uYmxvY2tzLnNsaWNlKGJsb2NrSW5kZXggKyAxKQogICAgXTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IGFmdGVyV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YWZ0ZXJCbG9jay5pZH0iXWApOwogICAgICBpZiAoYWZ0ZXJXcmFwcGVyKSB7CiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgfQogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgYXdhaXQgdGhpcy5mb2N1c0Jsb2NrKG5ld0Jsb2NrLmlkLCAic3RhcnQiKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIHJlbW92ZUJsb2NrKGJsb2NrSWQpIHsKICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcigoYjUpID0+IGI1LmlkICE9PSBibG9ja0lkKTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICB3cmFwcGVyLnJlbW92ZSgpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogIH0KICAvKioKICAgKiBGaW5kcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIGZpbmRCbG9jayhibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gYmxvY2tJZCk7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGluZGV4IG9mIGEgYmxvY2sKICAgKi8KICBnZXRCbG9ja0luZGV4KGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogIH0KICAvKioKICAgKiBGb2N1c2VzIGEgc3BlY2lmaWMgYmxvY2sKICAgKi8KICBhc3luYyBmb2N1c0Jsb2NrKGJsb2NrSWQsIGN1cnNvclBvc2l0aW9uID0gInN0YXJ0IikgewogICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgIGlmICh3cmFwcGVyRWxlbWVudCkgewogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogVXBkYXRlcyB0aGUgY29udGVudCBvZiBhIGJsb2NrCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrSWQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZmluZEJsb2NrKGJsb2NrSWQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIH0KICB9CiAgLyoqCiAgICogVHJhbnNmb3JtcyBhIGJsb2NrIHRvIGEgZGlmZmVyZW50IHR5cGUKICAgKi8KICB0cmFuc2Zvcm1CbG9jayhibG9ja0lkLCBuZXdUeXBlLCBtZXRhZGF0YSkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmZpbmRCbG9jayhibG9ja0lkKTsKICAgIGlmIChibG9jaykgewogICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgYmxvY2sudHlwZSA9IG5ld1R5cGU7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgaWYgKG1ldGFkYXRhKSB7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgfQogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgfQogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfQogIH0KICAvKioKICAgKiBNb3ZlcyBhIGJsb2NrIHRvIGEgbmV3IHBvc2l0aW9uCiAgICovCiAgbW92ZUJsb2NrKGJsb2NrSWQsIHRhcmdldEluZGV4KSB7CiAgICBjb25zdCBibG9ja3MgPSBbLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXTsKICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xIHx8IHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBibG9ja3MubGVuZ3RoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IFttb3ZlZEJsb2NrXSA9IGJsb2Nrcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTsKICAgIGJsb2Nrcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG1vdmVkQmxvY2spOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gYmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgcHJldmlvdXMgYmxvY2sKICAgKi8KICBnZXRQcmV2aW91c0Jsb2NrKGJsb2NrSWQpIHsKICAgIGNvbnN0IGluZGV4MiA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIHJldHVybiBpbmRleDIgPiAwID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiAtIDFdIDogbnVsbDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgbmV4dCBibG9jawogICAqLwogIGdldE5leHRCbG9jayhibG9ja0lkKSB7CiAgICBjb25zdCBpbmRleDIgPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICByZXR1cm4gaW5kZXgyIDwgdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCAtIDEgPyB0aGlzLmNvbXBvbmVudC5ibG9ja3NbaW5kZXgyICsgMV0gOiBudWxsOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLmJhc2UuanMKdmFyIEJhc2VCbG9ja0hhbmRsZXIgPSBjbGFzcyB7CiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbW9uIHNldHVwCiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICB9CiAgLy8gQ29tbW9uIHN0eWxlcyBjYW4gYmUgZGVmaW5lZCBoZXJlCiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuICIiOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLnJlZ2lzdHJ5LmpzCnZhciBCbG9ja1JlZ2lzdHJ5ID0gY2xhc3MgewogIHN0YXRpYyBoYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgc3RhdGljIHJlZ2lzdGVyKHR5cGU1LCBoYW5kbGVyMikgewogICAgdGhpcy5oYW5kbGVycy5zZXQodHlwZTUsIGhhbmRsZXIyKTsKICB9CiAgc3RhdGljIGdldEhhbmRsZXIodHlwZTUpIHsKICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlNSk7CiAgfQogIHN0YXRpYyBnZXRBbGxUeXBlcygpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L3BhcmFncmFwaC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgUGFyYWdyYXBoQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInBhcmFncmFwaCI7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgY29uc29sZS5lcnJvcigiUGFyYWdyYXBoQmxvY2tIYW5kbGVyLnNldHVwOiBObyBwYXJhZ3JhcGggYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uSW5wdXQoZTExKTsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25CbHVyKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25Nb3VzZVVwPy4oZTExKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcGFyYWdyYXBoQmxvY2ssIGJsb2NrKTsKICB9CiAgc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBwYXJhZ3JhcGhCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBwYXJhZ3JhcGhCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocGFyYWdyYXBoQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBjb25zdCBlbmRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gZWxlbWVudDQuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAod3lzaXd5Z0Jsb2NrKSB7CiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2sgPSB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2s7CiAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpIHsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuc2VsZWN0aW9uSGFuZGxlcik7CiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyk7CiAgICB9CiAgfQogIGRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIGRldGFpbCkgewogICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgIGRldGFpbCwKICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgY29tcG9zZWQ6IHRydWUKICAgIH0pOwogICAgZWxlbWVudDQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIFBhcmFncmFwaCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnBhcmFncmFwaCB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiI7CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYXJhZ3JhcGggZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICBpZiAoIXBhcmFncmFwaEJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHBhcmFncmFwaEJsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybiAiIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jazsKICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmIChwYXJhZ3JhcGhCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKHBhcmFncmFwaEJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBwYXJhZ3JhcGhCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKHNlbCkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShwYXJhZ3JhcGhCbG9jaykgfHwgcGFyYWdyYXBoQmxvY2s7CiAgICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGxhc3ROb2RlLCBsYXN0Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDApOwogICAgICAgICAgcmFuZ2UyLnNldEVuZChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuY29sbGFwc2UoZmFsc2UpOwogICAgICAgIH0KICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBjb25zdCBzZXRDdXJzb3IgPSAoKSA9PiB7CiAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiICYmICghcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQgfHwgcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocGFyYWdyYXBoQmxvY2ssIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH07CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDEwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHBhcmFncmFwaEJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGJlZm9yZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgYmVmb3JlUmFuZ2Uuc2V0U3RhcnQocGFyYWdyYXBoQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKHBhcmFncmFwaEJsb2NrLCBwYXJhZ3JhcGhCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IGJlZm9yZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYmVmb3JlRnJhZ21lbnQpOwogICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgdGVtcERpdi5pbm5lckhUTUwgPSAiIjsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYWZ0ZXJGcmFnbWVudCk7CiAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgfTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2hlYWRpbmcuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIEhlYWRpbmdCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGU7CiAgbGV2ZWw7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICBjb25zdHJ1Y3Rvcih0eXBlNSkgewogICAgc3VwZXIoKTsKICAgIHRoaXMudHlwZSA9IHR5cGU1OwogICAgdGhpcy5sZXZlbCA9IHBhcnNlSW50KHR5cGU1LnNwbGl0KCItIilbMV0pOwogIH0KICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICBjb25zb2xlLmVycm9yKCJIZWFkaW5nQmxvY2tIYW5kbGVyLnNldHVwOiBObyBoZWFkaW5nIGJsb2NrIGVsZW1lbnQgZm91bmQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGJsb2NrLmNvbnRlbnQgJiYgIWhlYWRpbmdCbG9jay5pbm5lckhUTUwpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydCgpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcD8uKGUxMSk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICB9CiAgICAgIH0sIDApOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jayk7CiAgfQogIHNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jaykgewogICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrMiA9IGhlYWRpbmdCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgIGlmIChzdGFydEluQmxvY2sgfHwgZW5kSW5CbG9jaykgewogICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiBzZWxlY3RlZFRleHQudHJpbSgpLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBoZWFkaW5nQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suaGVhZGluZy0xIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMjRweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDEiOwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDIiOwogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDMiOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAiSGVhZGluZyI7CiAgICB9CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBoZWFkaW5nIGZ1bmN0aW9uYWxpdHkgKG1vc3RseSB0aGUgc2FtZSBhcyBwYXJhZ3JhcGgpCiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGNvbnRleHQyPy5jb21wb25lbnQ7CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IGNvbnRleHQyPy5zaGFkb3dSb290OwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZ0Jsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgY29udGVudDMgPSBoZWFkaW5nQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2s7CiAgICBoZWFkaW5nQmxvY2suaW5uZXJIVE1MID0gY29udGVudDM7CiAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmIChoZWFkaW5nQmxvY2spIHsKICAgICAgV3lzaXd5Z0Jsb2Nrcy5zZXRDdXJzb3JUb0VuZChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBoZWFkaW5nQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICB9KTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgJiYgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGhlYWRpbmdCbG9jaykgfHwgaGVhZGluZ0Jsb2NrOwogICAgICAgIGlmIChsYXN0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgIHJhbmdlMi5zZXRFbmQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGFzdE5vZGUpOwogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgfHwgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGhlYWRpbmdCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGhlYWRpbmdCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IGhlYWRpbmdCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGN1cnNvclBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICBhZnRlcjogaGVhZGluZ0Jsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChoZWFkaW5nQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGhlYWRpbmdCbG9jaywgaGVhZGluZ0Jsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFF1b3RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInF1b3RlIjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHF1b3RlJHtzZWxlY3RlZENsYXNzfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtwbGFjZWhvbGRlcn0iCiAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChibG9jay5jb250ZW50ICYmICFxdW90ZUJsb2NrLmlubmVySFRNTCkgewogICAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcXVvdGVCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIHF1b3RlQmxvY2ssIGJsb2NrKSB7CiAgICBjb25zdCBjaGVja1NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgaWYgKHN0YXJ0SW5CbG9jayB8fCBlbmRJbkJsb2NrKSB7CiAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICByYW5nZTogcmFuZ2UyLAogICAgICAgICAgICByZWN0LAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IHF1b3RlQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBRdW90ZSBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnF1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzU1NSIsICIjYjBiMGIwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiAiQWRkIGEgcXVvdGUuLi4iOwogIH0KICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgcXVvdGUgZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocXVvdGVCbG9jayk7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICByZXR1cm4gcG9zaXRpb24zOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBjb250ZW50MyA9IHF1b3RlQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2s7CiAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmIChxdW90ZUJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChxdW90ZUJsb2NrKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAocXVvdGVCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKHF1b3RlQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFxdW90ZUJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgcXVvdGVCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBxdW90ZUJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcXVvdGVCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBxdW90ZUJsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHF1b3RlQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocXVvdGVCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcXVvdGVCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBxdW90ZUJsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChxdW90ZUJsb2NrLCAwKTsKICAgIGJlZm9yZVJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICBhZnRlclJhbmdlLnNldEVuZChxdW90ZUJsb2NrLCBxdW90ZUJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3NlcnZpY2VzKCk7CnZhciBDb2RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImNvZGUiOwogIGhpZ2hsaWdodFRpbWVyID0gbnVsbDsKICBoaWdobGlnaHRKcyA9IG51bGw7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAidHlwZXNjcmlwdCI7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lQ291bnQgPSBjb250ZW50My5zcGxpdCgiXG4iKS5sZW5ndGg7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgY29uc3QgbGFuZ3VhZ2VPcHRpb25zID0gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLm1hcCgobGFuZykgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiBgPG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZTJ9IiAke3ZhbHVlMiA9PT0gbGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9PiR7bGFuZ308L29wdGlvbj5gOwogICAgfSkuam9pbigiIik7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiBkYXRhLWxhbmd1YWdlPSIke2xhbmd1YWdlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Ij4KICAgICAgICAgICAgJHtsYW5ndWFnZU9wdGlvbnN9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnV0dG9uIiB0aXRsZT0iQ29weSBjb2RlIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29weS1pY29uIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMCA2Ljc1QzAgNS43ODQuNzg0IDUgMS43NSA1aDEuNWEuNzUuNzUgMCAwMTAgMS41aC0xLjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTEuNWEuNzUuNzUgMCAwMTEuNSAwdjEuNUExLjc1IDEuNzUgMCAwMTkuMjUgMTZoLTcuNUExLjc1IDEuNzUgMCAwMTAgMTQuMjV2LTcuNXoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxLjc1QzUgLjc4NCA1Ljc4NCAwIDYuNzUgMGg3LjVDMTUuMjE2IDAgMTYgLjc4NCAxNiAxLjc1djcuNUExLjc1IDEuNzUgMCAwMTE0LjI1IDExaC03LjVBMS43NSAxLjc1IDAgMDE1IDkuMjV2LTcuNXptMS43NS0uMjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTcuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10ZXh0Ij5Db3B5PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVycyI+JHtsaW5lTnVtYmVyc0h0bWx9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWNvbnRlbnQiPgogICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlLXByZSI+PGNvZGUgY2xhc3M9ImNvZGUtZWRpdG9yIiAKICAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChjb250ZW50Myl9PC9jb2RlPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBjb3B5QnV0dG9uID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIik7CiAgICBjb25zdCBsYW5ndWFnZVNlbGVjdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLXNlbGVjdG9yIik7CiAgICBpZiAoIWVkaXRvciB8fCAhY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAobGFuZ3VhZ2VTZWxlY3RvcikgewogICAgICBsYW5ndWFnZVNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBuZXdMYW5ndWFnZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IC4uLmJsb2NrLm1ldGFkYXRhLCBsYW5ndWFnZTogbmV3TGFuZ3VhZ2UgfTsKICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIiwgbmV3TGFuZ3VhZ2UpOwogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgIH0KICAgICAgICBpZiAoaGFuZGxlcnMyLm9uSW5wdXQpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKGNvcHlCdXR0b24pIHsKICAgICAgY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgY29uc3QgY29weVRleHQgPSBjb3B5QnV0dG9uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKTsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvcHlUZXh0LnRleHRDb250ZW50OwogICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpOwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5OiIsIGVycik7CiAgICAgICAgICBjb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IGNvbnRlbnQzOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICBjb25zdCBjb3B5VGV4dCA9IGNvcHlCdXR0b24ucXVlcnlTZWxlY3RvcigiLmNvcHktdGV4dCIpOwogICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb3B5VGV4dC50ZXh0Q29udGVudDsKICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LmFkZCgiY29waWVkIik7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIik7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhbGxiYWNrIGNvcHkgZmFpbGVkOiIsIGVycjIpOwogICAgICAgICAgfQogICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGxldCBpc0VkaXRpbmcgPSBmYWxzZTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaXNFZGl0aW5nID0gdHJ1ZTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImVkaXRpbmciKTsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChlZGl0b3IuZmlyc3RDaGlsZCkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGVkaXRvci5maXJzdENoaWxkLCAwKTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGlzRWRpdGluZyA9IGZhbHNlOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpOwogICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlnaGxpZ2h0VGltZXIpOwogICAgfSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJUYWIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoZTExLmtleSkpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gZWRpdG9yLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93TGVmdCIgJiYgY3Vyc29yUG9zID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd1JpZ2h0IiAmJiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJBcnJvd1VwIiB8fCBlMTEua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgY29uc3QgbGluZXMgPSAoZWRpdG9yLnRleHRDb250ZW50IHx8ICIiKS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5nZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcik7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIGN1cnJlbnRMaW5lID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd0Rvd24iICYmIGN1cnJlbnRMaW5lID09PSBsaW5lcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IHRleHQ5ID0gZTExLmNsaXBib2FyZERhdGE/LmdldERhdGEoInRleHQvcGxhaW4iKTsKICAgICAgaWYgKHRleHQ5KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIHJhbmdlMi5kZWxldGVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0OSk7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCkpOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmQoKSk7CiAgICBpZiAoYmxvY2suY29udGVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlZGl0b3IpIHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIH0pOwogICAgfQogIH0KICB1cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBjb25zdCBsaW5lTnVtYmVyc0NvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLW51bWJlcnMiKTsKICAgIGlmICghZWRpdG9yIHx8ICFsaW5lTnVtYmVyc0NvbnRhaW5lcikKICAgICAgcmV0dXJuOwogICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpOwogICAgY29uc3QgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIHx8IDE7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgbGluZU51bWJlcnNDb250YWluZXIuaW5uZXJIVE1MID0gbGluZU51bWJlcnNIdG1sOwogIH0KICBnZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcikgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiAwOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gcmFuZ2UyLmNsb25lUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZTIuc3RhcnRDb250YWluZXIsIHJhbmdlMi5zdGFydE9mZnNldCk7CiAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpOwogICAgY29uc3QgbGluZXNCZWZvcmVDdXJzb3IgPSB0ZXh0QmVmb3JlQ3Vyc29yLnNwbGl0KCJcbiIpOwogICAgcmV0dXJuIGxpbmVzQmVmb3JlQ3Vyc29yLmxlbmd0aCAtIDE7CiAgfQogIGFzeW5jIGFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jaykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJ0eXBlc2NyaXB0IjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KGNvbnRlbnQzLCB7CiAgICAgICAgbGFuZ3VhZ2UsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChyZXN1bHQudmFsdWUpIHsKICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlZGl0b3IgJiYgY3Vyc29yUG9zICE9PSBudWxsKSB7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGVkaXRvciwgY3Vyc29yUG9zKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJTeW50YXggaGlnaGxpZ2h0aW5nIGZhaWxlZDoiLCBlcnJvcik7CiAgICB9CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yPy50ZXh0Q29udGVudCB8fCAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdG9yKSB7CiAgICAgIGNvbnN0IGJsb2NrID0gewogICAgICAgIGlkOiBlZGl0b3IuZGF0YXNldC5ibG9ja0lkIHx8ICIiLAogICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgbGFuZ3VhZ2U6IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiKSB8fCAidHlwZXNjcmlwdCIKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZWxlbWVudDQsIGJsb2NrKTsKICAgIH0KICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZTIuc3RhcnRDb250YWluZXIpKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0KTsKICAgIHJldHVybiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIDApOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVkaXRvci50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCBsZW5ndGgpOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBlZGl0b3I/LmZvY3VzKCk7CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci5mb2N1cygpOwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgaWYgKHBvc2l0aW9uMyA9PT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuZ2V0Q29udGVudChlbGVtZW50NCk7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGNvbnRlbnQzLnN1YnN0cmluZygwLCBwb3NpdGlvbjMpLAogICAgICBhZnRlcjogY29udGVudDMuc3Vic3RyaW5nKHBvc2l0aW9uMykKICAgIH07CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIENvZGUgQmxvY2sgQ29udGFpbmVyIC0gTWluaW1hbGlzdCBzaGFkY24gc3R5bGUgKi8KICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyIC0gU2ltcGxpZmllZCAqLwogICAgICAuY29kZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb3B5IEJ1dHRvbiAtIE1pbmltYWwgKi8KICAgICAgLmNvcHktYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbi5jb3BpZWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciAuY29weS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAuY29weS10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2RlIEJvZHkgKi8KICAgICAgLmNvZGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogTGluZSBOdW1iZXJzIC0gU3VidGxlICovCiAgICAgIC5saW5lLW51bWJlcnMgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCA4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQ29udGVudCAqLwogICAgICAuY29kZS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1wcmUgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFBsYWNlaG9sZGVyICovCiAgICAgIC5jb2RlLWVkaXRvcjplbXB0eTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiLy8gVHlwZSBvciBwYXN0ZSBjb2RlIGhlcmUuLi4iOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBXaGVuIGVkaXRpbmcgKGZvY3VzZWQpLCBzaG93IGdyZXkgdGV4dCB3aXRob3V0IGhpZ2hsaWdodGluZyAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuZWRpdGluZyAuY29kZS1lZGl0b3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciAqIHsKICAgICAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAvKiBTeW50YXggSGlnaGxpZ2h0aW5nIC0gTXV0ZWQgY29sb3JzICovCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1rZXl3b3JkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc3RyaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwNTk2NjkiLCAiIzEwYjk4MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW51bWJlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jb21tZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy12YXJpYWJsZSwKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY2xhc3MsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10aXRsZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXBhcmFtcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1saXRlcmFsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW1ldGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcHVuY3R1YXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZDFkNWRiIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdGFnIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHJpYnV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci10YWcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItaWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzdjM2FlZCIsICIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTZWxlY3Rpb24gKi8KICAgICAgLmNvZGUtZWRpdG9yOjpzZWxlY3Rpb24sCiAgICAgIC5jb2RlLWVkaXRvciAqOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKSIsICJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4zKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgLSBNaW5pbWFsICovCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvbGlzdC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgTGlzdEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJsaXN0IjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24gYW5kIGxpc3Qgc3RhdGUKICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgbGlzdFR5cGUgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICBjb25zdCBsaXN0VGFnID0gbGlzdFR5cGUgPT09ICJvcmRlcmVkIiA/ICJvbCIgOiAidWwiOwogICAgY29uc3QgbGlzdENvbnRlbnQgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGJsb2NrLmNvbnRlbnQsIGJsb2NrLm1ldGFkYXRhKTsKICAgIHJldHVybiBgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPiR7bGlzdENvbnRlbnR9PC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJMaXN0Q29udGVudChjb250ZW50MywgbWV0YWRhdGEpIHsKICAgIGlmICghY29udGVudDMpCiAgICAgIHJldHVybiAiPHVsPjxsaT48L2xpPjwvdWw+IjsKICAgIGNvbnN0IGxpc3RUeXBlID0gbWV0YWRhdGE/Lmxpc3RUeXBlIHx8ICJ1bm9yZGVyZWQiOwogICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgIGNvbnN0IGxpbmVzID0gY29udGVudDMuc3BsaXQoIlxuIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7CiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGA8bGk+JHtsaW5lfTwvbGk+YCkuam9pbigiIik7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7bGlzdEl0ZW1zfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgIGlmICghbGlzdEJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhbGlzdEJsb2NrLmlubmVySFRNTCkgewogICAgICBsaXN0QmxvY2suaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJMaXN0Q29udGVudChibG9jay5jb250ZW50LCBibG9jay5tZXRhZGF0YSk7CiAgICB9CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgICAgICBpZiAoY3VycmVudExpICYmIGN1cnJlbnRMaS50ZXh0Q29udGVudCA9PT0gIiIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZCgpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBsaXN0QmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gd3lzaXd5Z0Jsb2NrMj8uc2hhZG93Um9vdDsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gbGlzdEJsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgIGlmICh3eXNpd3lnQmxvY2spIHsKICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwod3lzaXd5Z0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0uYmluZCh0aGlzKTsKICAgIH0KICB9CiAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgZGV0YWlsLAogICAgICBidWJibGVzOiB0cnVlLAogICAgICBjb21wb3NlZDogdHJ1ZQogICAgfSk7CiAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBsaXN0IGZ1bmN0aW9uYWxpdHkKICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICByZXR1cm4gbnVsbDsKICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShsaXN0QmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhsaXN0QmxvY2spOwogICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICByZXR1cm4gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdEl0ZW1zID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICBjb25zdCBjb250ZW50MyA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLnRleHRDb250ZW50IHx8ICIiKS5qb2luKCJcbiIpOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrOwogICAgY29uc3QgbGlzdEVsZW1lbnQgPSBsaXN0QmxvY2sucXVlcnlTZWxlY3RvcigidWwsIG9sIik7CiAgICBjb25zdCBpc09yZGVyZWQgPSBsaXN0RWxlbWVudD8udGFnTmFtZSA9PT0gIk9MIjsKICAgIGxpc3RCbG9jay5pbm5lckhUTUwgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCB7IGxpc3RUeXBlOiBpc09yZGVyZWQgPyAib3JkZXJlZCIgOiAidW5vcmRlcmVkIiB9KTsKICAgIGlmIChoYWRGb2N1cykgewogICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgZmlyc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgaWYgKGZpcnN0TGkpIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLmdldEZpcnN0VGV4dE5vZGUoZmlyc3RMaSk7CiAgICAgIGlmICh0ZXh0Tm9kZSkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgcmFuZ2UyLnNldEVuZCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGxhc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaTpsYXN0LWNoaWxkIik7CiAgICBpZiAobGFzdExpKSB7CiAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUobGFzdExpKTsKICAgICAgaWYgKHRleHROb2RlKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICByYW5nZTIuc2V0U3RhcnQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHJhbmdlMi5zZXRFbmQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgfQogIGdldEZpcnN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAoZmlyc3RUZXh0KQogICAgICAgIHJldHVybiBmaXJzdFRleHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBsaXN0QmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbGlzdEJsb2NrICYmIGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgIT09IGxpc3RCbG9jaykgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghbGlzdEJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIGxpc3RCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3RCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgSW1hZ2VCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAiaW1hZ2UiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgIGNvbnN0IGlzTG9hZGluZyA9IGJsb2NrLm1ldGFkYXRhPy5sb2FkaW5nOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtaGFzLWltYWdlPSIkeyEhaW1hZ2VVcmx9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke2lzTG9hZGluZyA/IHRoaXMucmVuZGVyTG9hZGluZygpIDogaW1hZ2VVcmwgPyB0aGlzLnJlbmRlckltYWdlKGltYWdlVXJsLCBhbHRUZXh0KSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKX0KICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgCiAgICAgICAgICAgICAgIGNsYXNzPSJpbWFnZS1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgYWNjZXB0PSJpbWFnZS8qIiAKICAgICAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclBsYWNlaG9sZGVyKCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVySW1hZ2UodXJsLCBhbHRUZXh0KSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1jb250YWluZXIiPgogICAgICAgIDxpbWcgc3JjPSIke3VybH0iIGFsdD0iJHt0aGlzLmVzY2FwZUh0bWwoYWx0VGV4dCl9IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckxvYWRpbmcoKSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7CiAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICBjb25zb2xlLmVycm9yKCJJbWFnZUJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgY29udGFpbmVyIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZmlsZUlucHV0KSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiKTsKICAgIGlmIChwbGFjZWhvbGRlcikgewogICAgICBwbGFjZWhvbGRlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBQbGFjZWhvbGRlciBjbGlja2VkLCBvcGVuaW5nIGZpbGUgc2VsZWN0b3IiKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzKCk7CiAgICB9KTsKICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBGaWxlIHNlbGVjdGVkOiIsIGZpbGUubmFtZSk7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGZpbGUsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKCFibG9jay5tZXRhZGF0YT8udXJsKSB7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgY29uc3QgZmlsZSA9IGUxMS5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikgJiYgIWJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgIH0KICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJEZWxldGUiIHx8IGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHZvaWQgMDsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTdGFydGluZyBmaWxlIHVwbG9hZCIsIHsKICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSwKICAgICAgZmlsZVNpemU6IGZpbGUuc2l6ZSwKICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgIH0pOwogICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZSkgewogICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZS4gTWF4aW11bSBzaXplIGlzIDEwTUIiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSB0cnVlOwogICAgYmxvY2subWV0YWRhdGEuZmlsZU5hbWUgPSBmaWxlLm5hbWU7CiAgICBibG9jay5tZXRhZGF0YS5maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKICAgIGJsb2NrLm1ldGFkYXRhLm1pbWVUeXBlID0gZmlsZS50eXBlOwogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKTsKICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgdHJ5IHsKICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChmaWxlKTsKICAgICAgYmxvY2subWV0YWRhdGEudXJsID0gZGF0YVVybDsKICAgICAgYmxvY2subWV0YWRhdGEubG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCBuYW1lV2l0aG91dEV4dCA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLlteLy5dKyQvLCAiIik7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBuYW1lV2l0aG91dEV4dDsKICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIiwgewogICAgICAgIGhhc1VybDogISFibG9jay5tZXRhZGF0YS51cmwsCiAgICAgICAgdXJsTGVuZ3RoOiBkYXRhVXJsLmxlbmd0aCwKICAgICAgICBhbHRUZXh0OiBibG9jay5jb250ZW50CiAgICAgIH0pOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IiwgZXJyb3IpOwogICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gZmFsc2U7CiAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgfQogIH0KICBmaWxlVG9EYXRhVXJsKGZpbGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGUxMS50YXJnZXQ/LnJlc3VsdDsKICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJlc29sdmUyKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICB9KTsKICB9CiAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICByZXR1cm4gYmxvY2s/LmNvbnRlbnQgfHwgIiI7CiAgfQogIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICBpZiAoYmxvY2spIHsKICAgICAgYmxvY2suY29udGVudCA9IGNvbnRlbnQzOwogICAgfQogIH0KICBnZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgY29udGVudDogIiIsCiAgICAgIG1ldGFkYXRhOiB7fQogICAgfTsKICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmltYWdlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29udGFpbmVyPy5mb2N1cygpOwogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogSW1hZ2UgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFVwbG9hZCBQbGFjZWhvbGRlciAqLwogICAgICAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0OHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXI6aG92ZXIgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmZjZmZiIsICIjMWUxYjRiIil9OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWljb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSW1hZ2UgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIGlucHV0IGhpZGRlbiAqLwogICAgICAuaW1hZ2UtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL21lZGlhL3lvdXR1YmUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFlvdVR1YmVCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAieW91dHViZSI7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCB2aWRlb0lkID0gYmxvY2subWV0YWRhdGE/LnZpZGVvSWQ7CiAgICBjb25zdCB1cmwgPSBibG9jay5tZXRhZGF0YT8udXJsIHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1oYXMtdmlkZW89IiR7ISF2aWRlb0lkfSI+CiAgICAgICAgJHt2aWRlb0lkID8gdGhpcy5yZW5kZXJWaWRlbyh2aWRlb0lkKSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIodXJsKX0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcih1cmwpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwodXJsKX0iIC8+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieW91dHViZS1lbWJlZC1idG4iPkVtYmVkIFZpZGVvPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyVmlkZW8odmlkZW9JZCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1jb250YWluZXIiPgogICAgICAgIDxpZnJhbWUgCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iCiAgICAgICAgICBmcmFtZWJvcmRlcj0iMCIKICAgICAgICAgIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIgogICAgICAgICAgYWxsb3dmdWxsc2NyZWVuCiAgICAgICAgPjwvaWZyYW1lPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGlmICghY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAoYmxvY2subWV0YWRhdGE/LnZpZGVvSWQpIHsKICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXJsSW5wdXQgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTsKICAgIGNvbnN0IGVtYmVkQnRuID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7CiAgICBpZiAoIXVybElucHV0IHx8ICFlbWJlZEJ0bikKICAgICAgcmV0dXJuOwogICAgdXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgZW1iZWRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIHRoaXMuZW1iZWRWaWRlbyh1cmxJbnB1dC52YWx1ZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHVybElucHV0LnZhbHVlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHVybElucHV0LmJsdXIoKTsKICAgICAgfQogICAgfSk7CiAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcGFzdGVkVXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgICAgaWYgKHRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHBhc3RlZFVybCkpIHsKICAgICAgICAgIHRoaXMuZW1iZWRWaWRlbyhwYXN0ZWRVcmwsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybElucHV0LnZhbHVlOwogICAgfSk7CiAgfQogIGVtYmVkVmlkZW8odXJsLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCB2aWRlb0lkID0gdGhpcy5leHRyYWN0WW91VHViZVZpZGVvSWQodXJsKTsKICAgIGlmICghdmlkZW9JZCkgewogICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBibG9jay5tZXRhZGF0YS52aWRlb0lkID0gdmlkZW9JZDsKICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybDsKICAgIGJsb2NrLmNvbnRlbnQgPSBgWW91VHViZSBWaWRlbzogJHt2aWRlb0lkfWA7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHVybCkgewogICAgY29uc3QgcGF0dGVybnMyID0gWwogICAgICAvKD86eW91dHViZVwuY29tXC8oPzpbXlwvXStcLy4rXC98KD86dnxlKD86bWJlZCk/KVwvfC4qWz8mXXY9KXx5b3V0dVwuYmVcLykoW14iJj9cLyBdezExfSkvLAogICAgICAveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1YmVcLmNvbVwvd2F0Y2hcP3Y9KFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1XC5iZVwvKFteIiY/XC8gXXsxMX0pLwogICAgXTsKICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJuczIpIHsKICAgICAgY29uc3QgbWF0Y2gyID0gdXJsLm1hdGNoKHBhdHRlcm4pOwogICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoMlsxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogInlvdXR1YmUiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICBpZiAodXJsSW5wdXQpIHsKICAgICAgdXJsSW5wdXQuZm9jdXMoKTsKICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7CiAgICAgIGNvbnRhaW5lci5mb2N1cygpOwogICAgfQogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogWW91VHViZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBQbGFjZWhvbGRlciAqLwogICAgICAueW91dHViZS1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMzJweCAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWVtYmVkLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1jb250YWluZXIgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgQXR0YWNobWVudEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJhdHRhY2htZW50IjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaWNvbiI+XHV7MUY0Q0V9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LXRpdGxlIj5GaWxlIEF0dGFjaG1lbnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1saXN0Ij4KICAgICAgICAgICR7ZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucmVuZGVyRmlsZXMoZmlsZXMpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImF0dGFjaG1lbnQtZmlsZS1pbnB1dCIgCiAgICAgICAgICAgICAgIG11bHRpcGxlIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgICAgJHtmaWxlcy5sZW5ndGggPiAwID8gJzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPicgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPkNsaWNrIHRvIGFkZCBmaWxlczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWhpbnQiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJGaWxlcyhmaWxlcykgewogICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYAogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtmaWxlLmlkfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pY29uIj4ke3RoaXMuZ2V0RmlsZUljb24oZmlsZS50eXBlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIj4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtZmlsZSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij5ceEQ3PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbigiIik7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWZpbGUtaW5wdXQiKTsKICAgIGlmICghY29udGFpbmVyIHx8ICFmaWxlSW5wdXQpIHsKICAgICAgY29uc29sZS5lcnJvcigiQXR0YWNobWVudEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1wbGFjZWhvbGRlciIpOwogICAgaWYgKHBsYWNlaG9sZGVyKSB7CiAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhZGRNb3JlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5hZGQtbW9yZS1maWxlcyIpOwogICAgaWYgKGFkZE1vcmVCdG4pIHsKICAgICAgYWRkTW9yZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgZmlsZUlucHV0LmNsaWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInJlbW92ZS1maWxlIikpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc3QgZmlsZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLWlkIik7CiAgICAgICAgaWYgKGZpbGVJZCkgewogICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGVJZCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgfSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgYXN5bmMgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICAgIGNvbnN0IGZpbGVzID0gZTExLmRhdGFUcmFuc2Zlcj8uZmlsZXM7CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQXR0YWNobWVudHMoZmlsZXMsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRGVsZXRlIiB8fCBlMTEua2V5ID09PSAiQmFja3NwYWNlIikgewogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBjb250YWluZXIgJiYgYmxvY2subWV0YWRhdGE/LmZpbGVzPy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhmaWxlcywgYmxvY2ssIGhhbmRsZXJzMikgewogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShmaWxlcykpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGZpbGUpOwogICAgICAgIGNvbnN0IGZpbGVEYXRhID0gewogICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgbmFtZTogZmlsZS5uYW1lLAogICAgICAgICAgc2l6ZTogZmlsZS5zaXplLAogICAgICAgICAgdHlwZTogZmlsZS50eXBlLAogICAgICAgICAgZGF0YTogZGF0YVVybAogICAgICAgIH07CiAgICAgICAgYmxvY2subWV0YWRhdGEuZmlsZXMucHVzaChmaWxlRGF0YSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGF0dGFjaCBmaWxlOiIsIGZpbGUubmFtZSwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBibG9jay5jb250ZW50ID0gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgOwogICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgfQogIHJlbW92ZUZpbGUoZmlsZUlkLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy5maWxlcykKICAgICAgcmV0dXJuOwogICAgYmxvY2subWV0YWRhdGEuZmlsZXMgPSBibG9jay5tZXRhZGF0YS5maWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5pZCAhPT0gZmlsZUlkKTsKICAgIGJsb2NrLmNvbnRlbnQgPSBibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggPiAwID8gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgIDogIiI7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfSk7CiAgfQogIGdldEZpbGVJY29uKG1pbWVUeXBlKSB7CiAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgIHJldHVybiAiXHV7MUY1QkN9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgcmV0dXJuICJcdXsxRjNBNX0iOwogICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQogICAgICByZXR1cm4gIlx1ezFGM0I1fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInBkZiIpKQogICAgICByZXR1cm4gIlx1ezFGNEM0fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInppcCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJyYXIiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygidGFyIikpCiAgICAgIHJldHVybiAiXHV7MUY1QzR9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5pbmNsdWRlcygic2hlZXQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQX0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJkb2N1bWVudCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRERH0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQn0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJ0ZXh0IikpCiAgICAgIHJldHVybiAiXHV7MUY0QzN9IjsKICAgIHJldHVybiAiXHV7MUY0QzF9IjsKICB9CiAgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgZ2VuZXJhdGVJZCgpIHsKICAgIHJldHVybiBgZmlsZS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImF0dGFjaG1lbnQiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnRhaW5lcj8uZm9jdXMoKTsKICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIEF0dGFjaG1lbnQgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyLmRyYWctb3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtc2l6ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQogICAgICAKICAgICAgLnJlbW92ZS1maWxlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzk5MWIxYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmNhNWE1IiwgIiNkYzI2MjYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgfQogICAgICAKICAgICAgLmFkZC1tb3JlLWZpbGVzOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGlkZGVuIGZpbGUgaW5wdXQgKi8KICAgICAgLmF0dGFjaG1lbnQtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvZGl2aWRlci5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgRGl2aWRlckJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJkaXZpZGVyIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIGRpdmlkZXIke3NlbGVjdGVkQ2xhc3N9IiBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBkaXZpZGVyQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2suZGl2aWRlciIpOwogICAgaWYgKCFkaXZpZGVyQmxvY2spCiAgICAgIHJldHVybjsKICAgIGRpdmlkZXJCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBkaXZpZGVyQmxvY2suZm9jdXMoKTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXM/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzPy4oKTsKICAgIH0pOwogICAgZGl2aWRlckJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXI/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiIHx8IGUxMS5rZXkgPT09ICJEZWxldGUiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suZGl2aWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlci5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvbWFya2Rvd24uYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIE1hcmtkb3duQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gIm1hcmtkb3duIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50IHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke2lzRWRpdE1vZGV9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7aXNFZGl0TW9kZSA/ICJQcmV2aWV3IiA6ICJFZGl0In0iPgogICAgICAgICAgICAke2lzRWRpdE1vZGUgPyAiXHV7MUY0NDF9XHVGRTBGIiA6ICJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJtYXJrZG93bi1lZGl0b3IiIAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG1hcmtkb3duIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoY29udGVudDMpfTwvdGV4dGFyZWE+CiAgICBgOwogIH0KICByZW5kZXJQcmV2aWV3KGNvbnRlbnQzKSB7CiAgICBjb25zdCBodG1sMTggPSB0aGlzLnBhcnNlTWFya2Rvd24oY29udGVudDMpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tcHJldmlldyI+CiAgICAgICAgJHtodG1sMTggfHwgJzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXRvZ2dsZUJ0bikgewogICAgICBjb25zb2xlLmVycm9yKCJNYXJrZG93bkJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSB0cnVlOwogICAgdG9nZ2xlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIlRhYiIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgaWYgKGUxMS5zaGlmdEtleSkgewogICAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gdmFsdWUyLnN1YnN0cmluZygwLCBzdGFydCk7CiAgICAgICAgICBjb25zdCBsYXN0TmV3bGluZSA9IGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZigiXG4iKTsKICAgICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IGxhc3ROZXdsaW5lICsgMTsKICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gdmFsdWUyLnN1YnN0cmluZyhsaW5lU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgIGlmIChsaW5lQ29udGVudC5zdGFydHNXaXRoKCIgICIpKSB7CiAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgbGluZVN0YXJ0KSArIGxpbmVDb250ZW50LnN1YnN0cmluZygyKSArIHZhbHVlMi5zdWJzdHJpbmcoc3RhcnQpOwogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgLSAyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArICIgICIgKyB2YWx1ZTIuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgMjsKICAgICAgICB9CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIioqIiwgIioqIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImkiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIl8iLCAiXyIpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICgoZTExLmN0cmxLZXkgfHwgZTExLm1ldGFLZXkpICYmIGUxMS5rZXkgPT09ICJrIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaW5zZXJ0TGluayhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29uc3QgcHJldmlldyA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1wcmV2aWV3Iik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhcHJldmlldykKICAgICAgcmV0dXJuOwogICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIHdyYXBTZWxlY3Rpb24oZWRpdG9yLCBiZWZvcmUsIGFmdGVyKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCByZXBsYWNlbWVudCA9IGJlZm9yZSArIChzZWxlY3RlZFRleHQgfHwgInRleHQiKSArIGFmdGVyOwogICAgZWRpdG9yLnZhbHVlID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydCkgKyByZXBsYWNlbWVudCArIGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoZW5kMyk7CiAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyByZXBsYWNlbWVudC5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGg7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGggKyA0OwogICAgfQogICAgZWRpdG9yLmZvY3VzKCk7CiAgfQogIGluc2VydExpbmsoZWRpdG9yKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCBsaW5rVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCAibGluayB0ZXh0IjsKICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYFske2xpbmtUZXh0fV0odXJsKWA7CiAgICBlZGl0b3IudmFsdWUgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhlbmQzKTsKICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0ICsgbGlua1RleHQubGVuZ3RoICsgMzsKICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGxpbmtUZXh0Lmxlbmd0aCArIDY7CiAgICBlZGl0b3IuZm9jdXMoKTsKICB9CiAgYXV0b1Jlc2l6ZShlZGl0b3IpIHsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSAiYXV0byI7CiAgICBlZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gZWRpdG9yLnNjcm9sbEhlaWdodCArICJweCI7CiAgfQogIHBhcnNlTWFya2Rvd24obWFya2Rvd24pIHsKICAgIGxldCBodG1sMTggPSB0aGlzLmVzY2FwZUh0bWwobWFya2Rvd24pOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sICI8aDM+JDE8L2gzPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL14jIyAoLispJC9nbSwgIjxoMj4kMTwvaDI+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXiMgKC4rKSQvZ20sICI8aDE+JDE8L2gxPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9fXyguKz8pX18vZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9cKiguKz8pXCovZywgIjxlbT4kMTwvZW0+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXyguKz8pXy9nLCAiPGVtPiQxPC9lbT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csICI8cHJlPjxjb2RlPiQxPC9jb2RlPjwvcHJlPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL2AoLis/KWAvZywgIjxjb2RlPiQxPC9jb2RlPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csICc8YSBocmVmPSIkMiI+JDE8L2E+Jyk7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXlwqICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9eLSAoLispJC9nbSwgIjxsaT4kMTwvbGk+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZywgKG1hdGNoMikgPT4gewogICAgICByZXR1cm4gIjx1bD4iICsgbWF0Y2gyICsgIjwvdWw+IjsKICAgIH0pOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1xuXG4vZywgIjwvcD48cD4iKTsKICAgIGh0bWwxOCA9ICI8cD4iICsgaHRtbDE4ICsgIjwvcD4iOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPjxcL3A+L2csICIiKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC88cD4oPGhbMS0zXT4pL2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLyg8XC9oWzEtM10+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPig8dWw+KS9nLCAiJDEiKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC8oPFwvdWw+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPig8cHJlPikvZywgIiQxIik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvKDxcL3ByZT4pPFwvcD4vZywgIiQxIik7CiAgICByZXR1cm4gaHRtbDE4OwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGJsb2NrSWQgPSBjb250YWluZXI/LmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgcmV0dXJuICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gMDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKTsKICAgICAgcHJldmlldz8uZm9jdXMoKTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjdXJzb3JQb3MgPSBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQ7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgYWZ0ZXI6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoY3Vyc29yUG9zKQogICAgfTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTWFya2Rvd24gQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyICovCiAgICAgIC5tYXJrZG93bi1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10b2dnbGUtbW9kZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5tYXJrZG93bi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEVkaXRvciAqLwogICAgICAubWFya2Rvd24tZWRpdG9yIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjI5MzciLCAiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjkzNyIsICIjZjNmNGY2Iil9OwogICAgICB9CiAgICAgIAogICAgICAucHJldmlldy1lbXB0eSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAvKiBNYXJrZG93biBwcmV2aWV3IHN0eWxlcyAqLwogICAgICAubWFya2Rvd24tcHJldmlldyBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDMgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTJweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyB1bCwKICAgICAgLm1hcmtkb3duLXByZXZpZXcgb2wgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBlbSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9odG1sLmJsb2NrLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBIdG1sQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImh0bWwiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaXNFZGl0TW9kZSA9IGJsb2NrLm1ldGFkYXRhPy5pc0VkaXRNb2RlID8/IHRydWU7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWVkaXQtbW9kZT0iJHtpc0VkaXRNb2RlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1pY29uIj4mbHQ7LyZndDs8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtdGl0bGUiPkhUTUw8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0bWwtdG9nZ2xlLW1vZGUiIHRpdGxlPSIke2lzRWRpdE1vZGUgPyAiUHJldmlldyIgOiAiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpc0VkaXRNb2RlID8gIlx1ezFGNDQxfVx1RkUwRiIgOiAiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJodG1sLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgSFRNTCBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQzKX08L3RleHRhcmVhPgogICAgYDsKICB9CiAgcmVuZGVyUHJldmlldyhjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaHRtbC1wcmV2aWV3Ij4KICAgICAgICAke2NvbnRlbnQzIHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXRvZ2dsZS1tb2RlIik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhdG9nZ2xlQnRuKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkh0bWxCbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9PT0gdm9pZCAwKQogICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgIHRvZ2dsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm47CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gaGFuZGxlcnMyLm9uQmx1cigpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgdGhpcy52YWxpZGF0ZUh0bWwoZWRpdG9yLnZhbHVlKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IGVkaXRvci52YWx1ZTsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGxhc3ROZXdsaW5lID0gYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCJcbiIpOwogICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gbGFzdE5ld2xpbmUgKyAxOwogICAgICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSB2YWx1ZTIuc3Vic3RyaW5nKGxpbmVTdGFydCwgc3RhcnQpOwogICAgICAgICAgaWYgKGxpbmVDb250ZW50LnN0YXJ0c1dpdGgoIiAgIikpIHsKICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdmFsdWUyLnN1YnN0cmluZygwLCBsaW5lU3RhcnQpICsgbGluZUNvbnRlbnQuc3Vic3RyaW5nKDIpICsgdmFsdWUyLnN1YnN0cmluZyhzdGFydCk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCAtIDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgIiAgIiArIHZhbHVlMi5zdWJzdHJpbmcoZW5kMyk7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyAyOwogICAgICAgIH0KICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoKGUxMS5jdHJsS2V5IHx8IGUxMS5tZXRhS2V5KSAmJiBlMTEua2V5ID09PSAiLyIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmF1dG9DbG9zZVRhZyhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXByZXZpZXcpCiAgICAgIHJldHVybjsKICAgIHByZXZpZXcuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiAmJiAhZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9IHRydWU7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5zYW5kYm94Q29udGVudChwcmV2aWV3KTsKICB9CiAgYXV0b0Nsb3NlVGFnKGVkaXRvcikgewogICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgY29uc3QgdGV4dDkgPSBlZGl0b3IudmFsdWU7CiAgICBsZXQgdGFnU3RhcnQgPSBjdXJzb3JQb3M7CiAgICB3aGlsZSAodGFnU3RhcnQgPiAwICYmIHRleHQ5W3RhZ1N0YXJ0IC0gMV0gIT09ICI8IikgewogICAgICB0YWdTdGFydC0tOwogICAgfQogICAgaWYgKHRhZ1N0YXJ0ID4gMCkgewogICAgICBjb25zdCB0YWdDb250ZW50ID0gdGV4dDkuc3Vic3RyaW5nKHRhZ1N0YXJ0LCBjdXJzb3JQb3MpOwogICAgICBjb25zdCB0YWdNYXRjaCA9IHRhZ0NvbnRlbnQubWF0Y2goL14oXHcrKS8pOwogICAgICBpZiAodGFnTWF0Y2gpIHsKICAgICAgICBjb25zdCB0YWdOYW1lID0gdGFnTWF0Y2hbMV07CiAgICAgICAgY29uc3QgY2xvc2luZ1RhZyA9IGA8LyR7dGFnTmFtZX0+YDsKICAgICAgICBlZGl0b3IudmFsdWUgPSB0ZXh0OS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSArICI+IiArIGNsb3NpbmdUYWcgKyB0ZXh0OS5zdWJzdHJpbmcoY3Vyc29yUG9zKTsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gY3Vyc29yUG9zICsgMTsKICAgICAgfQogICAgfQogIH0KICBhdXRvUmVzaXplKGVkaXRvcikgewogICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSBlZGl0b3Iuc2Nyb2xsSGVpZ2h0ICsgInB4IjsKICB9CiAgdmFsaWRhdGVIdG1sKGh0bWwxOCkgewogICAgY29uc3Qgb3BlblRhZ3MgPSBbXTsKICAgIGNvbnN0IHRhZ1JlZ2V4ID0gLzxcLz8oW2EtekEtWl1bYS16QS1aMC05XSopXGJbXj5dKj4vZzsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAoKG1hdGNoMiA9IHRhZ1JlZ2V4LmV4ZWMoaHRtbDE4KSkgIT09IG51bGwpIHsKICAgICAgY29uc3QgaXNDbG9zaW5nID0gbWF0Y2gyWzBdLnN0YXJ0c1dpdGgoIjwvIik7CiAgICAgIGNvbnN0IHRhZ05hbWUgPSBtYXRjaDJbMV0udG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGlzQ2xvc2luZykgewogICAgICAgIGlmIChvcGVuVGFncy5sZW5ndGggPT09IDAgfHwgb3BlblRhZ3Nbb3BlblRhZ3MubGVuZ3RoIC0gMV0gIT09IHRhZ05hbWUpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHt0YWdOYW1lfWApOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBvcGVuVGFncy5wb3AoKTsKICAgICAgfSBlbHNlIGlmICghbWF0Y2gyWzBdLmVuZHNXaXRoKCIvPiIpKSB7CiAgICAgICAgb3BlblRhZ3MucHVzaCh0YWdOYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKG9wZW5UYWdzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc29sZS53YXJuKGBVbmNsb3NlZCB0YWdzOiAke29wZW5UYWdzLmpvaW4oIiwgIil9YCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBzYW5kYm94Q29udGVudChwcmV2aWV3KSB7CiAgICBjb25zdCBzY3JpcHRzID0gcHJldmlldy5xdWVyeVNlbGVjdG9yQWxsKCJzY3JpcHQiKTsKICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpOwogICAgY29uc3QgYWxsRWxlbWVudHMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICAgIGFsbEVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4gewogICAgICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aCgib24iKSkgewogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY29uc3QgZm9ybXMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0iKTsKICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCAoZTExKSA9PiB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICByZXR1cm4gZWRpdG9yLnZhbHVlOwogICAgfQogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIHJldHVybiAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIHJldHVybiBlZGl0b3IgPyBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgOiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IDA7CiAgICAgIGVkaXRvci5mb2N1cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IuZm9jdXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1wcmV2aWV3Iik7CiAgICAgIHByZXZpZXc/LmZvY3VzKCk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGN1cnNvclBvcyA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JQb3MpLAogICAgICBhZnRlcjogZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3MpCiAgICB9OwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLmh0bWwtcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNhbmRib3hlZCBIVE1MIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5odG1sLXByZXZpZXcgKiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGltZyB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoLAogICAgICAuaHRtbC1wcmV2aWV3IHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2NrcmVnaXN0cmF0aW9uLmpzCmZ1bmN0aW9uIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpIHsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJkaXZpZGVyIiwgbmV3IERpdmlkZXJCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigicGFyYWdyYXBoIiwgbmV3IFBhcmFncmFwaEJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJoZWFkaW5nLTEiLCBuZXcgSGVhZGluZ0Jsb2NrSGFuZGxlcigiaGVhZGluZy0xIikpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImhlYWRpbmctMiIsIG5ldyBIZWFkaW5nQmxvY2tIYW5kbGVyKCJoZWFkaW5nLTIiKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaGVhZGluZy0zIiwgbmV3IEhlYWRpbmdCbG9ja0hhbmRsZXIoImhlYWRpbmctMyIpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJxdW90ZSIsIG5ldyBRdW90ZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJjb2RlIiwgbmV3IENvZGVCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibGlzdCIsIG5ldyBMaXN0QmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImltYWdlIiwgbmV3IEltYWdlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoInlvdXR1YmUiLCBuZXcgWW91VHViZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJhdHRhY2htZW50IiwgbmV3IEF0dGFjaG1lbnRCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibWFya2Rvd24iLCBuZXcgTWFya2Rvd25CbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaHRtbCIsIG5ldyBIdG1sQmxvY2tIYW5kbGVyKCkpOwp9CnJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z01vZGFsTWFuYWdlciA9IGNsYXNzIHsKICAvKioKICAgKiBTaG93cyBsYW5ndWFnZSBzZWxlY3Rpb24gbW9kYWwgZm9yIGNvZGUgYmxvY2tzCiAgICovCiAgc3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICBsZXQgc2VsZWN0ZWRMYW5ndWFnZSA9IG51bGw7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiU2VsZWN0IFByb2dyYW1taW5nIExhbmd1YWdlIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxhbmd1YWdlLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTsKICAgICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZ3JpZCI+CiAgICAgICAgICAgICAgJHt0aGlzLmdldExhbmd1YWdlcygpLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uICR7c2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZy50b0xvd2VyQ2FzZSgpID8gInNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZTIoc2VsZWN0ZWRMYW5ndWFnZSk7CiAgICAgICAgfX0iPgogICAgICAgICAgICAgICAgICAke2xhbmd9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICB9KTsKICB9CiAgLyoqCiAgICogU2hvd3MgYmxvY2sgc2V0dGluZ3MgbW9kYWwKICAgKi8KICBzdGF0aWMgYXN5bmMgc2hvd0Jsb2NrU2V0dGluZ3NNb2RhbChibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGNvbnRlbnQzID0gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAuc2V0dGluZ3MtY29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLWxhYmVsIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNjBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1pY29uIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuZ2V0QmxvY2tUeXBlU2VsZWN0b3IoYmxvY2ssIG9uVXBkYXRlKX0KICAgICAgICAke2Jsb2NrLnR5cGUgPT09ICJjb2RlIiA/IHRoaXMuZ2V0Q29kZUJsb2NrU2V0dGluZ3MoYmxvY2ssIG9uVXBkYXRlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgIGhlYWRpbmc6ICJCbG9jayBTZXR0aW5ncyIsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICBtZW51T3B0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0pOwogIH0KICAvKioKICAgKiBHZXRzIGNvZGUgYmxvY2sgc2V0dGluZ3MgY29udGVudAogICAqLwogIHN0YXRpYyBnZXRDb2RlQmxvY2tTZXR0aW5ncyhibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAiamF2YXNjcmlwdCI7CiAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1sYWJlbCI+UHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmcudG9Mb3dlckNhc2UoKSA/ICJzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgYmxvY2subWV0YWRhdGEubGFuZ3VhZ2UgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIG9uVXBkYXRlKGJsb2NrKTsKICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgfQogICAgfX0iCiAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmd9IgogICAgICAgICAgICA+JHtsYW5nfTwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgLyoqCiAgICogR2V0cyBhdmFpbGFibGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzCiAgICovCiAgc3RhdGljIGdldExhbmd1YWdlcygpIHsKICAgIHJldHVybiBbLi4uUFJPR1JBTU1JTkdfTEFOR1VBR0VTXTsKICB9CiAgLyoqCiAgICogR2V0cyBibG9jayB0eXBlIHNlbGVjdG9yCiAgICovCiAgc3RhdGljIGdldEJsb2NrVHlwZVNlbGVjdG9yKGJsb2NrLCBvblVwZGF0ZSkgewogICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKTsKICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPkJsb2NrIFR5cGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay10eXBlLWdyaWQiPgogICAgICAgICAgJHtibG9ja1R5cGVzLm1hcCgoaXRlbSkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9ImJsb2NrLXR5cGUtYnV0dG9uICR7YmxvY2sudHlwZSA9PT0gaXRlbS50eXBlID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9IiR7YXN5bmMgKGUxMSkgPT4gewogICAgICBjb25zdCBidXR0b24gPSBlMTEuY3VycmVudFRhcmdldDsKICAgICAgY29uc3Qgb2xkVHlwZSA9IGJsb2NrLnR5cGU7CiAgICAgIGJsb2NrLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgIGlmIChvbGRUeXBlID09PSAiY29kZSIgJiYgYmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZTsKICAgICAgfSBlbHNlIGlmIChvbGRUeXBlID09PSAibGlzdCIgJiYgYmxvY2sudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIgJiYgIWJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSkgewogICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAiY29kZSIgJiYgIWJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSkgewogICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgdGhpcy5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICAgIGlmIChsYW5ndWFnZSkgewogICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSBvbGRUeXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBvblVwZGF0ZShibG9jayk7CiAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0KICAgIH19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJsb2NrLXR5cGUtaWNvbiI+JHtpdGVtLmljb259PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW5wdXRoYW5kbGVyLmpzCnZhciBXeXNpd3lnSW5wdXRIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBzYXZlVGltZW91dCA9IG51bGw7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBpbnB1dCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGhhbmRsZUJsb2NrSW5wdXQoZTExLCBibG9jaykgewogICAgaWYgKHRoaXMuY29tcG9uZW50LmlzQ29tcG9zaW5nKQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgY29uc3QgdGV4dENvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0aGlzLmRldGVjdEJsb2NrVHlwZUludGVudCh0ZXh0Q29udGVudCk7CiAgICBpZiAoZGV0ZWN0ZWRUeXBlICYmIGRldGVjdGVkVHlwZS50eXBlICE9PSBibG9jay50eXBlKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5oYW5kbGVTbGFzaENvbW1hbmQodGV4dENvbnRlbnQsIHRhcmdldCk7CiAgICB0aGlzLnNjaGVkdWxlQXV0b1NhdmUoKTsKICB9CiAgLyoqCiAgICogVXBkYXRlcyBibG9jayBjb250ZW50IGJhc2VkIG9uIGl0cyB0eXBlCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrLCB0YXJnZXQpIHsKICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoIi5ibG9jay13cmFwcGVyIik7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICBjb25zdCBuZXdDb250ZW50ID0gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICB9CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLmlubmVySFRNTCB8fCAiIikuam9pbigiXG4iKTsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2suY29udGVudCA9IHRhcmdldC5pbm5lckhUTUwgfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogRGV0ZWN0cyBpZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gY3JlYXRlIGEgc3BlY2lmaWMgYmxvY2sgdHlwZQogICAqLwogIGRldGVjdEJsb2NrVHlwZUludGVudChjb250ZW50MykgewogICAgY29uc3QgaGVhZGluZ1Jlc3VsdCA9IFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tIZWFkaW5nU2hvcnRjdXQoY29udGVudDMpOwogICAgaWYgKGhlYWRpbmdSZXN1bHQpIHsKICAgICAgcmV0dXJuIGhlYWRpbmdSZXN1bHQ7CiAgICB9CiAgICBjb25zdCBsaXN0UmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0xpc3RTaG9ydGN1dChjb250ZW50Myk7CiAgICBpZiAobGlzdFJlc3VsdCkgewogICAgICByZXR1cm4gbGlzdFJlc3VsdDsKICAgIH0KICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrUXVvdGVTaG9ydGN1dChjb250ZW50MykpIHsKICAgICAgcmV0dXJuIHsgdHlwZTogInF1b3RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tDb2RlU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJjb2RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJkaXZpZGVyIiB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgYmxvY2sgdHlwZSB0cmFuc2Zvcm1hdGlvbgogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KSB7CiAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIGJsb2NrLnR5cGUgPSAibGlzdCI7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxpc3RUeXBlOiBkZXRlY3RlZFR5cGUubGlzdFR5cGUgfTsKICAgICAgY29uc3QgbGlzdFRhZyA9IGRldGVjdGVkVHlwZS5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgIHRhcmdldC5pbm5lckhUTUwgPSBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBXeXNpd3lnQmxvY2tzLmZvY3VzTGlzdEl0ZW0odGFyZ2V0KTsKICAgICAgfSwgMCk7CiAgICB9IGVsc2UgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgYmxvY2sudHlwZSA9ICJkaXZpZGVyIjsKICAgICAgYmxvY2suY29udGVudCA9ICIgIjsKICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICB9CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfSBlbHNlIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgV3lzaXd5Z01vZGFsTWFuYWdlci5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICBpZiAobGFuZ3VhZ2UpIHsKICAgICAgICBibG9jay50eXBlID0gImNvZGUiOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2UgfTsKICAgICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2soYmxvY2suaWQsICJzdGFydCIpOwogICAgICAgIH0sIDUwKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYmxvY2sudHlwZSA9IGRldGVjdGVkVHlwZS50eXBlOwogICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgIHRhcmdldC50ZXh0Q29udGVudCA9ICIiOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgIH0KICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhibG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0sIDUwKTsKICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBzbGFzaCBjb21tYW5kIGRldGVjdGlvbiBhbmQgbWVudSBkaXNwbGF5CiAgICovCiAgaGFuZGxlU2xhc2hDb21tYW5kKHRleHRDb250ZW50LCB0YXJnZXQpIHsKICAgIGNvbnN0IHNsYXNoTWVudSA9IHRoaXMuY29tcG9uZW50LnNsYXNoTWVudTsKICAgIGNvbnN0IGlzU2xhc2hNZW51VmlzaWJsZSA9IHNsYXNoTWVudSAmJiBzbGFzaE1lbnUudmlzaWJsZTsKICAgIGlmICh0ZXh0Q29udGVudCA9PT0gIi8iIHx8IHRleHRDb250ZW50LnN0YXJ0c1dpdGgoIi8iKSAmJiBpc1NsYXNoTWVudVZpc2libGUpIHsKICAgICAgaWYgKCFpc1NsYXNoTWVudVZpc2libGUgJiYgdGV4dENvbnRlbnQgPT09ICIvIikgewogICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldENhcmV0Q29vcmRpbmF0ZXModGFyZ2V0KTsKICAgICAgICBzbGFzaE1lbnUuc2hvdyh7IHg6IHJlY3QubGVmdCwgeTogcmVjdC5ib3R0b20gKyA0IH0sICh0eXBlNSkgPT4gewogICAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zZXJ0QmxvY2sodHlwZTUpOwogICAgICAgIH0pOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgIHRhcmdldC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChzbGFzaE1lbnUpIHsKICAgICAgICBzbGFzaE1lbnUudXBkYXRlRmlsdGVyKHRleHRDb250ZW50LnNsaWNlKDEpKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghdGV4dENvbnRlbnQuc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgIHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldC9jdXJzb3IKICAgKi8KICBnZXRDYXJldENvb3JkaW5hdGVzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKHJlY3Qud2lkdGggPiAwIHx8IHJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgIHJldHVybiByZWN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogIC8qKgogICAqIFNjaGVkdWxlcyBhdXRvLXNhdmUgYWZ0ZXIgYSBkZWxheQogICAqLwogIHNjaGVkdWxlQXV0b1NhdmUoKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51ICYmIHRoaXMuY29tcG9uZW50LnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuc2F2ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCk7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICB9LCAyZTMpOwogIH0KICAvKioKICAgKiBTeW5jcyBjb250ZW50IGZyb20gYWxsIGJsb2NrIERPTXMgdG8gdGhlIGRhdGEgbW9kZWwKICAgKi8KICBzeW5jQWxsQmxvY2tDb250ZW50KCkgewogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgYmxvY2suY29udGVudCA9IG5ld0NvbnRlbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogQ2xlYW5zIHVwIHJlc291cmNlcwogICAqLwogIGRlc3Ryb3koKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci5qcwp2YXIgV3lzaXd5Z0tleWJvYXJkSGFuZGxlciA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSB7CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUgJiYgdGhpcy5pc1NsYXNoTWVudUtleShlMTEua2V5KSkgewogICAgICB0aGlzLmNvbXBvbmVudC5oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChlMTEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgIGNhc2UgIlRhYiI6CiAgICAgICAgdGhpcy5oYW5kbGVUYWIoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVyKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJCYWNrc3BhY2UiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJEZWxldGUiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93VXAoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0Rvd24oZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXJyb3dSaWdodChlMTEsIGJsb2NrKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2tzIGlmIGtleSBpcyBmb3Igc2xhc2ggbWVudSBuYXZpZ2F0aW9uCiAgICovCiAgaXNTbGFzaE1lbnVLZXkoa2V5MikgewogICAgcmV0dXJuIFsiQXJyb3dEb3duIiwgIkFycm93VXAiLCAiRW50ZXIiLCAiRXNjYXBlIl0uaW5jbHVkZXMoa2V5Mik7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZm9ybWF0dGluZyBrZXlib2FyZCBzaG9ydGN1dHMKICAgKi8KICBoYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkgewogICAgaWYgKCEoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBzd2l0Y2ggKGUxMS5rZXkudG9Mb3dlckNhc2UoKSkgewogICAgICBjYXNlICJiIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJib2xkIikpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICBjYXNlICJpIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJpdGFsaWMiKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNhc2UgInUiOgogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoInVuZGVybGluZSIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgY2FzZSAiayI6CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgibGluayIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBUYWIga2V5CiAgICovCiAgaGFuZGxlVGFiKGUxMSwgYmxvY2spIHsKICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgRW50ZXIga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRW50ZXIoZTExLCBibG9jaykgewogICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGlmIChlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZTExLnNoaWZ0S2V5KSB7CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVySW5MaXN0KGUxMSwgYmxvY2spOwogICAgICB9IGVsc2UgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNwbGl0Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldFNwbGl0Q29udGVudCgpOwogICAgICAgICAgaWYgKHNwbGl0Q29udGVudCkgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudC5zZXRDb250ZW50KHNwbGl0Q29udGVudC5iZWZvcmUpOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gc3BsaXRDb250ZW50LmJlZm9yZTsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwgc3BsaXRDb250ZW50LmFmdGVyKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBFbnRlciBrZXkgaW4gbGlzdCBibG9ja3MKICAgKi8KICBhc3luYyBoYW5kbGVFbnRlckluTGlzdChlMTEsIGJsb2NrKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgIGlmIChjdXJyZW50TGkgJiYgY3VycmVudExpLnRleHRDb250ZW50ID09PSAiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBCYWNrc3BhY2Uga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2sgJiYgcHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgIH0gZWxzZSBpZiAobmV4dEJsb2NrICYmIG5leHRCbG9jay50eXBlICE9PSAiZGl2aWRlciIgJiYgbmV4dEJsb2NrLnR5cGUgIT09ICJpbWFnZSIpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGFyZ2V0LnRleHRDb250ZW50OwogICAgaWYgKGN1cnNvclBvcyA9PT0gMCkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgIT09ICJjb2RlIikgewogICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICBjb25zdCBhY3R1YWxDb250ZW50MiA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQgPyBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgOiBibG9jay5jb250ZW50OwogICAgICAgICAgaWYgKGFjdHVhbENvbnRlbnQyID09PSAiIiB8fCBhY3R1YWxDb250ZW50Mi50cmltKCkgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJldkJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3ByZXZCbG9jay5pZH0iXWApOwogICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZCbG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gcHJldkJsb2NrQ29tcG9uZW50Py5nZXRDb250ZW50KCkgfHwgcHJldkJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgfHwgYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICBsZXQgbWVyZ2VkQ29udGVudCA9ICIiOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIlxuIiA6ICIiKSArIGN1cnJlbnRDb250ZW50OwogICAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJsaXN0IiAmJiBibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgIG1lcmdlZENvbnRlbnQgPSBwcmV2Q29udGVudCArIChwcmV2Q29udGVudCAmJiBjdXJyZW50Q29udGVudCA/ICJcbiIgOiAiIikgKyBjdXJyZW50Q29udGVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIiAiIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lcmdlUG9pbnQgPSBwcmV2Q29udGVudC5sZW5ndGg7CiAgICAgICAgYmxvY2tPcHMudXBkYXRlQmxvY2tDb250ZW50KHByZXZCbG9jay5pZCwgbWVyZ2VkQ29udGVudCk7CiAgICAgICAgaWYgKHByZXZCbG9ja0NvbXBvbmVudCkgewogICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQobWVyZ2VkQ29udGVudCk7CiAgICAgICAgfQogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbWVyZ2VQb2ludCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA+IDEpIHsKICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogYmxvY2suY29udGVudDsKICAgICAgaWYgKGN1cnJlbnRDb250ZW50ID09PSAiIiB8fCBjdXJyZW50Q29udGVudC50cmltKCkgPT09ICIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgYmxvY2tPcHMucmVtb3ZlQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgaWYgKHByZXZCbG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBEZWxldGUga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICBpZiAobmV4dEJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfSBlbHNlIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgIGlmIChjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgIGlmIChuZXh0QmxvY2sgJiYgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93VXAga2V5IC0gbmF2aWdhdGUgdG8gcHJldmlvdXMgYmxvY2sgaWYgYXQgYmVnaW5uaW5nIG9yIGZpcnN0IGxpbmUKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd1VwKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLmlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBBcnJvd0Rvd24ga2V5IC0gbmF2aWdhdGUgdG8gbmV4dCBibG9jayBpZiBhdCBlbmQgb3IgbGFzdCBsaW5lCiAgICovCiAgYXN5bmMgaGFuZGxlQXJyb3dEb3duKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChuZXh0QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvIHx8ICFzZWxlY3Rpb25JbmZvLmNvbGxhcHNlZCkKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuaXNPbkxhc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHRleHQgbm9kZSBpbiBhbiBlbGVtZW50CiAgICovCiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93TGVmdCBrZXkgLSBuYXZpZ2F0ZSB0byBwcmV2aW91cyBibG9jayBpZiBhdCBiZWdpbm5pbmcKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBpZiAoY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKHByZXZCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJlbmQiOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBwb3NpdGlvbjMpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgQXJyb3dSaWdodCBrZXkgLSBuYXZpZ2F0ZSB0byBuZXh0IGJsb2NrIGlmIGF0IGVuZAogICAqLwogIGFzeW5jIGhhbmRsZUFycm93UmlnaHQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm47CiAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgY29uc3QgdGV4dExlbmd0aCA9IHRhcmdldC50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICBpZiAoY3Vyc29yUG9zID09PSB0ZXh0TGVuZ3RoKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgc2xhc2ggbWVudSBrZXlib2FyZCBuYXZpZ2F0aW9uCiAgICogTm90ZTogVGhpcyBpcyBub3cgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50IGRpcmVjdGx5CiAgICovCiAgLyoqCiAgICogQ2hlY2sgaWYgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uRmlyc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgbGV0IGNvbnRhaW5lciA9IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50RWxlbWVudDsKICAgICAgfQogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBpc05lYXJUb3AgPSByZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wIDwgNTsKICAgICAgaWYgKGNvbnRhaW5lci50ZXh0Q29udGVudCAmJiAhY29udGFpbmVyLnRleHRDb250ZW50LmluY2x1ZGVzKCJcbiIpKSB7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChjb250YWluZXIsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICByZXR1cm4gY3Vyc29yUG9zID09PSAwOwogICAgICB9CiAgICAgIHJldHVybiBpc05lYXJUb3A7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsIGUxMSk7CiAgICAgIGNvbnN0IGN1cnNvclBvcyA9IHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQ7CiAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IDA7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uTGFzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgY29udGFpbmVyID0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwogICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICB9CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tIC0gcmVjdC5ib3R0b20gPCA1OwogICAgICBpZiAoY29udGFpbmVyLnRleHRDb250ZW50ICYmICFjb250YWluZXIudGV4dENvbnRlbnQuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzTmVhckJvdHRvbTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBjb25zb2xlLndhcm4oIkVycm9yIGNoZWNraW5nIGxhc3QgbGluZToiLCBlMTEpOwogICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgcmV0dXJuIGN1cnNvclBvcyA9PT0gdGV4dExlbmd0aDsKICAgIH0KICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZHJhZ2Ryb3BoYW5kbGVyLmpzCnZhciBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBkcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICBkcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICBkcm9wSW5kaWNhdG9yID0gbnVsbDsKICBpbml0aWFsTW91c2VZID0gMDsKICBpbml0aWFsQmxvY2tZID0gMDsKICBkcmFnZ2VkQmxvY2tFbGVtZW50ID0gbnVsbDsKICBkcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja01hcmdpblRvcCA9IDA7CiAgbGFzdFVwZGF0ZVRpbWUgPSAwOwogIHVwZGF0ZVRocm90dGxlID0gODA7CiAgLy8gbWlsbGlzZWNvbmRzCiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBkcmFnIHN0YXRlCiAgICovCiAgZ2V0IGRyYWdTdGF0ZSgpIHsKICAgIHJldHVybiB7CiAgICAgIGRyYWdnZWRCbG9ja0lkOiB0aGlzLmRyYWdnZWRCbG9ja0lkLAogICAgICBkcmFnT3ZlckJsb2NrSWQ6IHRoaXMuZHJhZ092ZXJCbG9ja0lkLAogICAgICBkcmFnT3ZlclBvc2l0aW9uOiB0aGlzLmRyYWdPdmVyUG9zaXRpb24KICAgIH07CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBzdGFydAogICAqLwogIGhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSB7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBibG9jay5pZDsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICJtb3ZlIjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGJsb2NrLmlkKTsKICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICBlbXB0eUltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSI7CiAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbXB0eUltZywgMCwgMCk7CiAgICB0aGlzLmluaXRpYWxNb3VzZVkgPSBlMTEuY2xpZW50WTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5pbml0aWFsQmxvY2tZID0gcmVjdC50b3A7CiAgICAgIGNvbnN0IGlubmVyQmxvY2sgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChpbm5lckJsb2NrKSB7CiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gaW5uZXJCbG9jay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5uZXJCbG9jayk7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tNYXJnaW5Ub3AgPSBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpblRvcCkgfHwgMDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CiAgICAgIGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLCB7CiAgICAgICAgd3JhcHBlckhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgbWFyZ2luVG9wOiB0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCwKICAgICAgICBkcm9wSW5kaWNhdG9ySGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCwKICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQsCiAgICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgICAgfSk7CiAgICAgIHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKTsKICAgIH0KICAgIHRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkID0gdGhpcy5kcmFnZ2VkQmxvY2tJZDsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgIH0sIDEwKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGVuZAogICAqLwogIGhhbmRsZURyYWdFbmQoKSB7CiAgICBjb25zdCBhbGxCbG9ja3MgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICBhbGxCbG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHsKICAgICAgYmxvY2suY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciLCAibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgfSk7CiAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICB9CiAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0ID0gMDsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgIHRoaXMuaW5pdGlhbEJsb2NrWSA9IDA7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBvdmVyCiAgICovCiAgaGFuZGxlRHJhZ092ZXIoZTExLCBibG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIgfHwgIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gYmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIGNvbnN0IHJlY3QgPSBlMTEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IG1pZHBvaW50ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gZTExLmNsaWVudFkgPCBtaWRwb2ludCA/ICJiZWZvcmUiIDogImFmdGVyIjsKICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IHRoaXMuZHJhZ092ZXJCbG9ja0lkOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IHRoaXMuZHJhZ092ZXJQb3NpdGlvbjsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGxlYXZlCiAgICovCiAgaGFuZGxlRHJhZ0xlYXZlKGJsb2NrKSB7CiAgICBpZiAodGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrLmlkKSB7CiAgICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJvcAogICAqLwogIGhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gdGFyZ2V0QmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMuY29tcG9uZW50LmhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jayk7CiAgfQogIC8qKgogICAqIENoZWNrcyBpZiBhIGJsb2NrIGlzIGJlaW5nIGRyYWdnZWQKICAgKi8KICBpc0RyYWdnaW5nKGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9ja0lkOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBibG9jayBoYXMgZHJhZyBvdmVyIHN0YXRlCiAgICovCiAgaXNEcmFnT3ZlcihibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrSWQ7CiAgfQogIC8qKgogICAqIEdldHMgZHJhZyBvdmVyIENTUyBjbGFzc2VzIGZvciBhIGJsb2NrCiAgICovCiAgZ2V0RHJhZ092ZXJDbGFzc2VzKGJsb2NrSWQpIHsKICAgIGlmICghdGhpcy5pc0RyYWdPdmVyKGJsb2NrSWQpKQogICAgICByZXR1cm4gIiI7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlclBvc2l0aW9uID09PSAiYmVmb3JlIiA/ICJkcmFnLW92ZXItYmVmb3JlIiA6ICJkcmFnLW92ZXItYWZ0ZXIiOwogIH0KICAvKioKICAgKiBDcmVhdGVzIHRoZSBkcm9wIGluZGljYXRvciBlbGVtZW50CiAgICovCiAgY3JlYXRlRHJvcEluZGljYXRvcigpIHsKICAgIHRoaXMuZHJvcEluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLmNsYXNzTmFtZSA9ICJkcm9wLWluZGljYXRvciI7CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBnbG9iYWwgZHJhZ292ZXIgdG8gdXBkYXRlIGRyYWdnZWQgYmxvY2sgcG9zaXRpb24gYW5kIG1vdmUgb3RoZXIgYmxvY2tzCiAgICovCiAgaGFuZGxlR2xvYmFsRHJhZ092ZXIgPSAoZTExKSA9PiB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICBjb25zdCBkZWx0YVkgPSBlMTEuY2xpZW50WSAtIHRoaXMuaW5pdGlhbE1vdXNlWTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2RlbHRhWX1weClgOwogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFVwZGF0ZVRpbWUgPCB0aGlzLnVwZGF0ZVRocm90dGxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBub3cyOwogICAgdGhpcy51cGRhdGVCbG9ja1Bvc2l0aW9ucyhlMTEuY2xpZW50WSk7CiAgfTsKICAvKioKICAgKiBVcGRhdGVzIGJsb2NrIHBvc2l0aW9ucyBiYXNlZCBvbiBjdXJzb3IgcG9zaXRpb24KICAgKi8KICB1cGRhdGVCbG9ja1Bvc2l0aW9ucyhtb3VzZVkpIHsKICAgIGNvbnN0IGJsb2NrcyA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IGJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSkKICAgICAgcmV0dXJuOwogICAgYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGlmIChibG9jay5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSAhPT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCkgewogICAgICAgIGJsb2NrLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCAibW92ZS1kb3duIik7CiAgICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbmV3SW5kZXggPSBibG9ja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmxvY2tzLmxlbmd0aDsgaTExKyspIHsKICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgIGNvbnRpbnVlOwogICAgICBjb25zdCBibG9jayA9IGJsb2Nrc1tpMTFdOwogICAgICBjb25zdCByZWN0ID0gYmxvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGJsb2NrVG9wID0gcmVjdC50b3A7CiAgICAgIGlmIChtb3VzZVkgPCBibG9ja1RvcCArIHJlY3QuaGVpZ2h0ICogMC41KSB7CiAgICAgICAgbmV3SW5kZXggPSBpMTE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgaWYgKGRyYWdnZWRJbmRleCA8IG5ld0luZGV4KSB7CiAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJbmRleCAmJiBpMTEgPCBuZXdJbmRleCkgewogICAgICAgICAgYmxvY2suY2xhc3NMaXN0LmFkZCgibW92ZS11cCIpOwogICAgICAgICAgYmxvY2suc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLCBgJHt0aGlzLmRyYWdnZWRCbG9ja0hlaWdodH1weGApOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSW5kZXggPiBuZXdJbmRleCkgewogICAgICAgIGlmIChpMTEgPj0gbmV3SW5kZXggJiYgaTExIDwgZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBibG9jay5jbGFzc0xpc3QuYWRkKCJtb3ZlLWRvd24iKTsKICAgICAgICAgIGJsb2NrLnN0eWxlLnNldFByb3BlcnR5KCItLWRyYWctb2Zmc2V0IiwgYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMudXBkYXRlRHJvcEluZGljYXRvcihibG9ja3MsIG5ld0luZGV4LCBkcmFnZ2VkSW5kZXgpOwogIH0KICAvKioKICAgKiBVcGRhdGVzIHRoZSBkcm9wIGluZGljYXRvciBwb3NpdGlvbgogICAqLwogIHVwZGF0ZURyb3BJbmRpY2F0b3IoYmxvY2tzLCB0YXJnZXRJbmRleCwgZHJhZ2dlZEluZGV4KSB7CiAgICBpZiAoIXRoaXMuZHJvcEluZGljYXRvciB8fCAhdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGxldCB0b3BQb3NpdGlvbiA9IDA7CiAgICBjb25zdCB2aXN1YWxCbG9ja3MgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgY29uc3QgcmVjdCA9IGJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgdG9wID0gcmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcDsKICAgICAgbGV0IGJvdHRvbSA9IHJlY3QuYm90dG9tIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgIGNvbnN0IHRyYW5zZm9ybTIgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShibG9jaykudHJhbnNmb3JtOwogICAgICBpZiAodHJhbnNmb3JtMiAmJiB0cmFuc2Zvcm0yICE9PSAibm9uZSIpIHsKICAgICAgICBjb25zdCBtYXRyaXggPSBuZXcgRE9NTWF0cml4KHRyYW5zZm9ybTIpOwogICAgICAgIGNvbnN0IHlPZmZzZXQgPSBtYXRyaXgubTQyOwogICAgICAgIHRvcCArPSB5T2Zmc2V0OwogICAgICAgIGJvdHRvbSArPSB5T2Zmc2V0OwogICAgICB9CiAgICAgIHZpc3VhbEJsb2Nrcy5wdXNoKHsgaW5kZXg6IGkxMSwgdG9wLCBib3R0b20gfSk7CiAgICB9CiAgICB2aXN1YWxCbG9ja3Muc29ydCgoYTUsIGI1KSA9PiBhNS50b3AgLSBiNS50b3ApOwogICAgbGV0IGFkanVzdGVkVGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleDsKICAgIGlmICh0YXJnZXRJbmRleCA+IGRyYWdnZWRJbmRleCkgewogICAgICBhZGp1c3RlZFRhcmdldEluZGV4LS07CiAgICB9CiAgICBsZXQgYmxvY2tNYXJnaW4gPSAxNjsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgZHJhZ2dlZEJsb2NrID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgIGlmIChkcmFnZ2VkQmxvY2spIHsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSBkcmFnZ2VkQmxvY2sudHlwZTsKICAgICAgICBpZiAoYmxvY2tUeXBlID09PSAiaGVhZGluZy0xIiB8fCBibG9ja1R5cGUgPT09ICJoZWFkaW5nLTIiIHx8IGJsb2NrVHlwZSA9PT0gImhlYWRpbmctMyIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjQ7CiAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgPT09ICJjb2RlIiB8fCBibG9ja1R5cGUgPT09ICJxdW90ZSIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYWRqdXN0ZWRUYXJnZXRJbmRleCA9PT0gMCkgewogICAgICB0b3BQb3NpdGlvbiA9IDA7CiAgICB9IGVsc2UgaWYgKGFkanVzdGVkVGFyZ2V0SW5kZXggPj0gdmlzdWFsQmxvY2tzLmxlbmd0aCkgewogICAgICBjb25zdCBsYXN0QmxvY2sgPSB2aXN1YWxCbG9ja3NbdmlzdWFsQmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdEJsb2NrKSB7CiAgICAgICAgdG9wUG9zaXRpb24gPSBsYXN0QmxvY2suYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBibG9ja0JlZm9yZSA9IHZpc3VhbEJsb2Nrc1thZGp1c3RlZFRhcmdldEluZGV4IC0gMV07CiAgICAgIGlmIChibG9ja0JlZm9yZSkgewogICAgICAgIHRvcFBvc2l0aW9uID0gYmxvY2tCZWZvcmUuYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke01hdGgubWF4KDAsIHRvcFBvc2l0aW9uKX1weGA7CiAgICBjb25zb2xlLmxvZygiRHJvcCBpbmRpY2F0b3IgdXBkYXRlOiIsIHsKICAgICAgdGFyZ2V0SW5kZXgsCiAgICAgIGFkanVzdGVkVGFyZ2V0SW5kZXgsCiAgICAgIGRyYWdnZWRJbmRleCwKICAgICAgdG9wUG9zaXRpb24sCiAgICAgIGhlaWdodDogdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQsCiAgICAgIGJsb2NrTWFyZ2luLAogICAgICB2aXN1YWxCbG9ja3M6IHZpc3VhbEJsb2Nrcy5tYXAoKGI1KSA9PiAoeyBpbmRleDogYjUuaW5kZXgsIHRvcDogYjUudG9wLCBib3R0b206IGI1LmJvdHRvbSB9KSkKICAgIH0pOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnIGVuZAogICAqLwogIGhhbmRsZUdsb2JhbERyYWdFbmQgPSAoKSA9PiB7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZCk7CiAgICBpZiAodGhpcy5kcm9wSW5kaWNhdG9yKSB7CiAgICAgIHRoaXMuZHJvcEluZGljYXRvci5yZW1vdmUoKTsKICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yID0gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgdGhpcy5wZXJmb3JtRHJvcCgpOwogICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgfQogIH07CiAgLyoqCiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCBkcm9wIG9wZXJhdGlvbgogICAqLwogIHBlcmZvcm1Ecm9wKCkgewogICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkKQogICAgICByZXR1cm47CiAgICBjb25zdCBibG9ja0VsZW1lbnRzMiA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gYmxvY2tFbGVtZW50czIuZmluZCgoZWwpID0+IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHZpc3VhbE9yZGVyID0gYmxvY2tFbGVtZW50czIubWFwKChlbCkgPT4gewogICAgICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNlbnRlclkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICAgICAgcmV0dXJuIHsgaWQsIGNlbnRlclksIGVsZW1lbnQ6IGVsIH07CiAgICB9KTsKICAgIHZpc3VhbE9yZGVyLnNvcnQoKGE1LCBiNSkgPT4gYTUuY2VudGVyWSAtIGI1LmNlbnRlclkpOwogICAgY29uc3QgbmV3QmxvY2tJZHMgPSB2aXN1YWxPcmRlci5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpLmZpbHRlcigoaWQpID0+IGlkICE9PSBudWxsKTsKICAgIGNvbnN0IG9yaWdpbmFsQmxvY2tzID0gWy4uLnRoaXMuY29tcG9uZW50LmJsb2Nrc107CiAgICBjb25zdCBkcmFnZ2VkQmxvY2sgPSBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgaWYgKCFkcmFnZ2VkQmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IG9sZE9yZGVyID0gb3JpZ2luYWxCbG9ja3MubWFwKChiNSkgPT4gYjUuaWQpOwogICAgY29uc3Qgb3JkZXJDaGFuZ2VkID0gIW5ld0Jsb2NrSWRzLmV2ZXJ5KChpZCwgaW5kZXgyKSA9PiBpZCA9PT0gb2xkT3JkZXJbaW5kZXgyXSk7CiAgICBpZiAoIW9yZGVyQ2hhbmdlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBuZXdCbG9ja3MgPSBuZXdCbG9ja0lkcy5tYXAoKGlkKSA9PiBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gbmV3QmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoZHJhZ2dlZEJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGRyYWdnZWRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0sIDEwMCk7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkuanMKdmFyIFd5c2l3eWdIaXN0b3J5ID0gY2xhc3MgewogIGhpc3RvcnkgPSBbXTsKICBjdXJyZW50SW5kZXggPSAtMTsKICBtYXhIaXN0b3J5U2l6ZSA9IDUwOwogIGxhc3RTYXZlVGltZSA9IDA7CiAgc2F2ZURlYm91bmNlTXMgPSA1MDA7CiAgLy8gRGVib3VuY2Ugc2F2ZXMgdG8gYXZvaWQgdG9vIG1hbnkgc25hcHNob3RzCiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgIHRoaXMuY3VycmVudEluZGV4ID0gLTE7CiAgfQogIC8qKgogICAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBoaXN0b3J5CiAgICovCiAgc2F2ZVN0YXRlKGJsb2Nrcywgc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbikgewogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFNhdmVUaW1lIDwgdGhpcy5zYXZlRGVib3VuY2VNcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgIHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0gPSB7CiAgICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgIGN1cnNvclBvc2l0aW9uOiBjdXJzb3JQb3NpdGlvbiA/IHsgLi4uY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgICB0aW1lc3RhbXA6IG5vdzIKICAgICAgfTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpIHsKICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuY3VycmVudEluZGV4ICsgMSk7CiAgICB9CiAgICBjb25zdCBuZXdTdGF0ZSA9IHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgIHNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uID8geyAuLi5jdXJzb3JQb3NpdGlvbiB9IDogdm9pZCAwLAogICAgICB0aW1lc3RhbXA6IG5vdzIKICAgIH07CiAgICB0aGlzLmhpc3RvcnkucHVzaChuZXdTdGF0ZSk7CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnlTaXplKSB7CiAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpOwogICAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgfQogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBub3cyOwogIH0KICAvKioKICAgKiBGb3JjZSBzYXZlIGEgY2hlY2twb2ludCAodXNlZnVsIGZvciBvcGVyYXRpb25zIGxpa2UgYmxvY2sgZGVsZXRpb24pCiAgICovCiAgc2F2ZUNoZWNrcG9pbnQoYmxvY2tzLCBzZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKSB7CiAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICB0aGlzLnNhdmVTdGF0ZShibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogIH0KICAvKioKICAgKiBVbmRvIHRvIHByZXZpb3VzIHN0YXRlCiAgICovCiAgdW5kbygpIHsKICAgIGlmICghdGhpcy5jYW5VbmRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogUmVkbyB0byBuZXh0IHN0YXRlCiAgICovCiAgcmVkbygpIHsKICAgIGlmICghdGhpcy5jYW5SZWRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5VbmRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgcmVkbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5SZWRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7CiAgfQogIC8qKgogICAqIEdldCBjdXJyZW50IHN0YXRlCiAgICovCiAgZ2V0Q3VycmVudFN0YXRlKCkgewogICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0aGlzLmNsb25lU3RhdGUodGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgLyoqCiAgICogQ2xlYXIgaGlzdG9yeQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IC0xOwogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSAwOwogIH0KICAvKioKICAgKiBEZWVwIGNsb25lIGJsb2NrcwogICAqLwogIGNsb25lQmxvY2tzKGJsb2NrcykgewogICAgcmV0dXJuIGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoewogICAgICAuLi5ibG9jaywKICAgICAgbWV0YWRhdGE6IGJsb2NrLm1ldGFkYXRhID8geyAuLi5ibG9jay5tZXRhZGF0YSB9IDogdm9pZCAwCiAgICB9KSk7CiAgfQogIC8qKgogICAqIENsb25lIGEgaGlzdG9yeSBzdGF0ZQogICAqLwogIGNsb25lU3RhdGUoc3RhdGUxMikgewogICAgcmV0dXJuIHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKHN0YXRlMTIuYmxvY2tzKSwKICAgICAgc2VsZWN0ZWRCbG9ja0lkOiBzdGF0ZTEyLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IHN0YXRlMTIuY3Vyc29yUG9zaXRpb24gPyB7IC4uLnN0YXRlMTIuY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgdGltZXN0YW1wOiBzdGF0ZTEyLnRpbWVzdGFtcAogICAgfTsKICB9CiAgLyoqCiAgICogR2V0IGhpc3RvcnkgaW5mbyBmb3IgZGVidWdnaW5nCiAgICovCiAgZ2V0SGlzdG9yeUluZm8oKSB7CiAgICByZXR1cm4gewogICAgICBzaXplOiB0aGlzLmhpc3RvcnkubGVuZ3RoLAogICAgICBjdXJyZW50SW5kZXg6IHRoaXMuY3VycmVudEluZGV4LAogICAgICBjYW5VbmRvOiB0aGlzLmNhblVuZG8oKSwKICAgICAgY2FuUmVkbzogdGhpcy5jYW5SZWRvKCkKICAgIH07CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLXd5c2l3eWctYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV3lzaXd5Z0Jsb2NrID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13eXNpd3lnLWJsb2NrIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfYmxvY2tfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2NrX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmxvY2tfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzU2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19kZWNvcmF0b3JzOwogIGxldCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9kZWNvcmF0b3JzOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1d5c2l3eWdCbG9jazIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ibG9ja19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2lzU2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfaGFuZGxlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfYmxvY2tfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmxvY2siLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2NrLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ibG9jayA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja19pbml0aWFsaXplcnMsIF9ibG9ja19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pc1NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzU2VsZWN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzU2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNTZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNTZWxlY3RlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1NlbGVjdGVkX2luaXRpYWxpemVycywgX2lzU2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfaGFuZGxlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFuZGxlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhhbmRsZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhhbmRsZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYW5kbGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oYW5kbGVyc19pbml0aWFsaXplcnMsIF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInd5c2l3eWdDb21wb25lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInd5c2l3eWdDb21wb25lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud3lzaXd5Z0NvbXBvbmVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud3lzaXd5Z0NvbXBvbmVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93eXNpd3lnQ29tcG9uZW50X2luaXRpYWxpemVycywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5fc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIpOwogICAgICB9CiAgICB9CiAgICAjYmxvY2tfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCBibG9jaygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2sodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNTZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNTZWxlY3RlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNTZWxlY3RlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzU2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1NlbGVjdGVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY0KHRoaXMsIF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBoYW5kbGVycygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFuZGxlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd3lzaXd5Z0NvbXBvbmVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2hhbmRsZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHd5c2l3eWdDb21wb25lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBSZWZlcmVuY2UgdG8gcGFyZW50IGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgc2V0IHd5c2l3eWdDb21wb25lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3d5c2l3eWdDb21wb25lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdGFibGUgYmxvY2sgZWxlbWVudAogICAgYmxvY2tFbGVtZW50ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIC8vIFRyYWNrIGlmIHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb250ZW50CiAgICBjb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgIC8vIFRyYWNrIGN1cnNvciBwb3NpdGlvbgogICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgaGFuZGxlclN0eWxlc0luamVjdGVkID0gZmFsc2U7CiAgICAvLyBCbG9jayB0eXBlcyB0aGF0IGRvbid0IHN1cHBvcnQgY29udGVudGVkaXRhYmxlCiAgICBzdGF0aWMgTk9OX0VESVRBQkxFX1RZUEVTID0gWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiXTsKICAgIGluamVjdEhhbmRsZXJTdHlsZXMoKSB7CiAgICAgIGlmICh0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkID0gdHJ1ZTsKICAgICAgbGV0IHN0eWxlczMgPSAiIjsKICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEJsb2NrUmVnaXN0cnkuZ2V0QWxsVHlwZXMoKTsKICAgICAgZm9yIChjb25zdCB0eXBlNSBvZiBibG9ja1R5cGVzKSB7CiAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodHlwZTUpOwogICAgICAgIGlmIChoYW5kbGVyMikgewogICAgICAgICAgc3R5bGVzMyArPSBoYW5kbGVyMi5nZXRTdHlsZXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0eWxlczMpIHsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0eWxlczM7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYmxvY2sgewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEuNmVtOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrOmVtcHR5Om5vdCg6Zm9jdXMpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayA6aXMoaSwgZW0pIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5ibG9jayB1IHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmJsb2NrIHMgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgICB9CgogICAgICAuYmxvY2sgY29kZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDE0IiwgIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY2Y2MiLCAiIzRkOTRmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmJsb2NrIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgIH0KCiAgICAgIC8qIENvZGUgYmxvY2sgY29udGFpbmVyIGFuZCBsYW5ndWFnZSBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlciAqLwoKICAgICAgLyogU2VsZWN0aW9uIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjMpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIH0KCgoKCiAgICBgCiAgICBdOwogICAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImlzU2VsZWN0ZWQiKSAmJiB0aGlzLmJsb2NrKSB7CiAgICAgICAgbGV0IGVsZW1lbnQ0ID0gbnVsbDsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgLmJsb2NrLiR7YmxvY2tUeXBlfWA7CiAgICAgICAgZWxlbWVudDQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkgewogICAgICAgICAgICBlbGVtZW50NC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudDQuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJsb2NrIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IG9sZEJsb2NrID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJibG9jayIpOwogICAgICAgIGlmIChvbGRCbG9jayAmJiBvbGRCbG9jay5pZCAmJiBvbGRCbG9jay50eXBlICYmIG9sZEJsb2NrLmlkID09PSB0aGlzLmJsb2NrLmlkICYmIG9sZEJsb2NrLnR5cGUgPT09IHRoaXMuYmxvY2sudHlwZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIXRoaXMuYmxvY2tFbGVtZW50IHx8IHRoaXMuYmxvY2s/LnR5cGUgIT09IHRoaXMuYmxvY2tFbGVtZW50LmRhdGFzZXQuYmxvY2tUeXBlOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmNvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHRoaXMuaW5qZWN0SGFuZGxlclN0eWxlcygpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICBpZiAoY29udGFpbmVyICYmIHRoaXMuYmxvY2spIHsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJCbG9ja0NvbnRlbnQoKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgICBoYW5kbGVyMi5zZXR1cChibG9ja0VsZW1lbnQsIHRoaXMuYmxvY2ssIHRoaXMuaGFuZGxlcnMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUJsb2NrID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKGVkaXRhYmxlQmxvY2spIHsKICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsIHRoaXMuYmxvY2suaWQpOwogICAgICAgIGVkaXRhYmxlQmxvY2suc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLCB0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbklucHV0Py4oZTExKTsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVCbG9jayk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uRm9jdXM/LigpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uQmx1cj8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvblN0YXJ0Py4oKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvbkVuZD8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWN1cnJlbnRFZGl0YWJsZUJsb2NrKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2godGhpcy5zaGFkb3dSb290KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5ibG9jay5jb250ZW50KSB7CiAgICAgICAgICBlZGl0YWJsZUJsb2NrLmlubmVySFRNTCA9IHRoaXMuYmxvY2suY29udGVudDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja0VsZW1lbnQgPSBlZGl0YWJsZUJsb2NrOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgcmV0dXJuIHUzYGA7CiAgICAgIHJldHVybiB1M2A8ZGl2IGNsYXNzPSJ3eXNpd3lnLWJsb2NrLWNvbnRhaW5lciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckJsb2NrQ29udGVudCgpIHsKICAgICAgaWYgKCF0aGlzLmJsb2NrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnJlbmRlcih0aGlzLmJsb2NrLCB0aGlzLmlzU2VsZWN0ZWQpOwogICAgICB9CiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSB0aGlzLmlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1cykgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLmZvY3VzKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmJsb2NrICYmIERlZXNXeXNpd3lnQmxvY2syLk5PTl9FRElUQUJMRV9UWVBFUy5pbmNsdWRlcyh0aGlzLmJsb2NrLnR5cGUpKSB7CiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7CiAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgYmxvY2tFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICB9CiAgICAgIGVkaXRhYmxlRWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50ICYmIHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZm9jdXNXaXRoQ3Vyc29yKHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IoY29udGFpbmVyLCBwb3NpdGlvbjMsIGNvbnRleHQyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jayAmJiBEZWVzV3lzaXd5Z0Jsb2NrMi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgZWRpdGFibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgfQogICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydCgpOwogICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZCgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVFbGVtZW50LCBwb3NpdGlvbjMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgIHNldEN1cnNvcigpOwogICAgICB9IGVsc2UgewogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBHZXQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBlZGl0YWJsZSBlbGVtZW50CiAgICAgKi8KICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbikgewogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIsIHsKICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgIHNoYWRvd1Jvb3RzQ291bnQ6IHNoYWRvd1Jvb3RzLmxlbmd0aAogICAgICB9KTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFJhbmdlIGluZm86IiwgewogICAgICAgIHN0YXJ0Q29udGFpbmVyOiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbGxhcHNlZDogc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQsCiAgICAgICAgc3RhcnRDb250YWluZXJUZXh0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50CiAgICAgIH0pOwogICAgICBpZiAoIWVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBSYW5nZSBub3QgaW4gZWxlbWVudCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50NCk7CiAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246IiwgewogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbjMsCiAgICAgICAgcHJlQ2FyZXRUZXh0OiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCksCiAgICAgICAgZWxlbWVudFRleHQ6IGVsZW1lbnQ0LnRleHRDb250ZW50LAogICAgICAgIGVsZW1lbnRUZXh0TGVuZ3RoOiBlbGVtZW50NC50ZXh0Q29udGVudD8ubGVuZ3RoCiAgICAgIH0pOwogICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgfQogICAgZ2V0Q29udGVudCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldENvbnRlbnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MIHx8ICIiOwogICAgICBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IiwgY29udGVudDMpOwogICAgICByZXR1cm4gY29udGVudDM7CiAgICB9CiAgICBzZXRDb250ZW50KGNvbnRlbnQzKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250ZXh0MiA9IHsgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LCBjb21wb25lbnQ6IHRoaXMgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q29udGVudChjb250YWluZXIsIGNvbnRlbnQzLCBjb250ZXh0Mik7CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudDsKICAgICAgZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9TdGFydCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLnNldEN1cnNvclRvU3RhcnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5zZXRDdXJzb3JUb1N0YXJ0KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQoZWRpdGFibGVFbGVtZW50KTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9FbmQoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDdXJzb3JUb0VuZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnNldEN1cnNvclRvRW5kKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhpcyBibG9jawogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2sgfHwgdGhpcy5ibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgIGNvbnN0IHd5c2l3eWdDb21wb25lbnQgPSB0aGlzLnd5c2l3eWdDb21wb25lbnQ7CiAgICAgIGNvbnN0IGJsb2NrSWQgPSB0aGlzLmJsb2NrLmlkOwogICAgICBjb25zdCBibG9ja1R5cGVJdGVtcyA9IGJsb2NrVHlwZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgIT09IGN1cnJlbnRUeXBlICYmIGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKS5tYXAoKGl0ZW0pID0+ICh7CiAgICAgICAgbmFtZTogaXRlbS5sYWJlbCwKICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCAiIiksCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICBjb25zdCBibG9ja1RvVHJhbnNmb3JtID0gd3lzaXd5Z0NvbXBvbmVudC5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgaWYgKGJsb2NrVG9UcmFuc2Zvcm0pIHsKICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50IHx8ICIiOwogICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2U6ICJ0eXBlc2NyaXB0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiaW1hZ2UiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJ5b3V0dWJlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHd5c2l3eWdDb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soYmxvY2tJZCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDaGFuZ2UgVHlwZSIsCiAgICAgICAgICBpY29uTmFtZTogInR5cGUiLAogICAgICAgICAgc3VibWVudTogYmxvY2tUeXBlSXRlbXMKICAgICAgICB9CiAgICAgIF07CiAgICAgIGlmICghWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSkpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogIkN1dCIsCiAgICAgICAgICBpY29uTmFtZTogInNjaXNzb3JzIiwKICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK1giLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjdXQiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiQ29weSIsCiAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrQyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrViIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInBhc3RlIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgbWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0sIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEJsb2NrIiwKICAgICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5kZWxldGVCbG9jayhibG9ja0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbWVudUl0ZW1zOwogICAgfQogICAgLyoqCiAgICAgKiBHZXRzIGNvbnRlbnQgc3BsaXQgYXQgY3Vyc29yIHBvc2l0aW9uCiAgICAgKi8KICAgIGdldFNwbGl0Q29udGVudCgpIHsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3RhcnRpbmcuLi4iKTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ2hlY2tpbmcgZm9yIGhhbmRsZXIiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaGFzSGFuZGxlcjogISFoYW5kbGVyMiwKICAgICAgICBoYXNTcGxpdE1ldGhvZDogISEoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KQogICAgICB9KTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIiwgewogICAgICAgICAgY29udGFpbmVyOiAhIWNvbnRhaW5lciwKICAgICAgICAgIGNvbnRhaW5lckhUTUw6IGNvbnRhaW5lcj8uaW5uZXJIVE1MPy5zdWJzdHJpbmcoMCwgMTAwKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LAogICAgICAgICAgY29tcG9uZW50OiB0aGlzCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEVsZW1lbnQgaW5mbzoiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaW5uZXJIVE1MOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MLAogICAgICAgIHRleHRDb250ZW50OiBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQsCiAgICAgICAgdGV4dExlbmd0aDogZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50Py5sZW5ndGgKICAgICAgfSk7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIGluZm8gZnJvbSBzaGFkb3cgRE9NczoiLCB7CiAgICAgICAgc2VsZWN0aW9uSW5mbywKICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgfSk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3BsaXR0aW5nIHdpdGggbGFzdCBrbm93biBwb3NpdGlvbjoiLCB7CiAgICAgICAgICAgIHBvcywKICAgICAgICAgICAgZnVsbFRleHRMZW5ndGg6IGZ1bGxUZXh0Lmxlbmd0aCwKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIHJhbmdlOiIsIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwKICAgICAgICBzdGFydE9mZnNldDogc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCwKICAgICAgICBzdGFydENvbnRhaW5lckluRWxlbWVudDogZWRpdGFibGVFbGVtZW50LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpCiAgICAgIH0pOwogICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWRpdGFibGVFbGVtZW50LCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNlbGVjdGlvbiBub3QgaW4gdGhpcyBibG9jaywgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLCBjdXJzb3JQb3MpOwogICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBhdCBzdGFydCBvciBudWxsLCBtb3ZpbmcgYWxsIGNvbnRlbnQiKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgIGFmdGVyOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MCiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBiZWZvcmVSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChlZGl0YWJsZUVsZW1lbnQsIDApOwogICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGVkaXRhYmxlRWxlbWVudCwgZWRpdGFibGVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgY29uc3QgYmVmb3JlRnJhZ21lbnQgPSBiZWZvcmVSYW5nZS5jbG9uZUNvbnRlbnRzKCk7CiAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGJlZm9yZUZyYWdtZW50KTsKICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGFmdGVyRnJhZ21lbnQpOwogICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRmluYWwgc3BsaXQgcmVzdWx0OiIsIHsKICAgICAgICBjdXJzb3JQb3MsCiAgICAgICAgYmVmb3JlSHRtbCwKICAgICAgICBiZWZvcmVMZW5ndGg6IGJlZm9yZUh0bWwubGVuZ3RoLAogICAgICAgIGJlZm9yZUh0bWxQcmV2aWV3OiBiZWZvcmVIdG1sLnN1YnN0cmluZygwLCAxMDApICsgKGJlZm9yZUh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIiksCiAgICAgICAgYWZ0ZXJIdG1sLAogICAgICAgIGFmdGVyTGVuZ3RoOiBhZnRlckh0bWwubGVuZ3RoLAogICAgICAgIGFmdGVySHRtbFByZXZpZXc6IGFmdGVySHRtbC5zdWJzdHJpbmcoMCwgMTAwKSArIChhZnRlckh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIikKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgIGFmdGVyOiBhZnRlckh0bWwKICAgICAgfTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1pbnB1dC13eXNpd3lnLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTY0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0V3lzaXd5ZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtd3lzaXd5ZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibG9ja3NfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2Nrc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9yczsKICBsZXQgX2RyYWdnZWRCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0V3lzaXd5ZzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2Jsb2Nrc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dEZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dEZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2Jsb2Nrc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJibG9ja3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ibG9ja3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJsb2NrcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdnZWRCbG9ja0lkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnZ2VkQmxvY2tJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ2dlZEJsb2NrSWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdPdmVyQmxvY2tJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJCbG9ja0lkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ092ZXJCbG9ja0lkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnT3ZlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdPdmVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ092ZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9kcmFnT3ZlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dEZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycywgImh0bWwiKSk7CiAgICBnZXQgb3V0cHV0Rm9ybWF0KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3V0cHV0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9vdXRwdXRGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsKICAgICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICBjb250ZW50OiAiIgogICAgICB9CiAgICBdKSk7CiAgICBnZXQgYmxvY2tzKCkgewogICAgICByZXR1cm4gdGhpcy4jYmxvY2tzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2tzKHZhbHVlMikgewogICAgICB0aGlzLiNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE5vdCB1c2luZyBAc3RhdGUgdG8gYXZvaWQgcmUtcmVuZGVycyB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzCiAgICBzZWxlY3RlZEJsb2NrSWQgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAvLyBTbGFzaCBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgc2xhc2hNZW51ID0gRGVlc1NsYXNoTWVudS5nZXRJbnN0YW5jZSgpOwogICAgI2RyYWdnZWRCbG9ja0lkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgZ2V0IGRyYWdnZWRCbG9ja0lkKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnZ2VkQmxvY2tJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkcmFnT3ZlckJsb2NrSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnT3ZlckJsb2NrSWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdPdmVyQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGRyYWdPdmVyUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybWF0dGluZyBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgZm9ybWF0dGluZ01lbnUgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIERlZXNGb3JtYXR0aW5nTWVudS5nZXRJbnN0YW5jZSgpKTsKICAgICNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBzZWxlY3RlZFRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yQ29udGVudFJlZiA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICBpc0NvbXBvc2luZyA9IGZhbHNlOwogICAgLy8gSGFuZGxlciBpbnN0YW5jZXMKICAgIGJsb2NrT3BlcmF0aW9uczsKICAgIGlucHV0SGFuZGxlcjsKICAgIGtleWJvYXJkSGFuZGxlcjsKICAgIGRyYWdEcm9wSGFuZGxlcjsKICAgIGhpc3Rvcnk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB3eXNpd3lnU3R5bGVzCiAgICBdOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zID0gbmV3IFd5c2l3eWdCbG9ja09wZXJhdGlvbnModGhpcyk7CiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IFd5c2l3eWdJbnB1dEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuZHJhZ0Ryb3BIYW5kbGVyID0gbmV3IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBXeXNpd3lnSGlzdG9yeSgpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5pbnB1dEhhbmRsZXI/LmRlc3Ryb3koKTsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgdGhpcy5ibHVyVGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrcyA9IHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIgPyBXeXNpd3lnQ29udmVydGVycy5wYXJzZUh0bWxUb0Jsb2Nrcyh0aGlzLnZhbHVlKSA6IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTsKICAgICAgICBpZiAocGFyc2VkQmxvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuYmxvY2tzID0gcGFyc2VkQmxvY2tzOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHRoaXMuaGFuZGxlRWRpdG9yQ2xpY2soZTExKSk7CiAgICAgIH0KICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibG9jay10ZXh0LXNlbGVjdGVkIiwgKGUxMSkgPT4gewogICAgICAgIGlmICghdGhpcy5zbGFzaE1lbnUudmlzaWJsZSAmJiBlMTEuZGV0YWlsLmhhc1NlbGVjdGlvbiAmJiBlMTEuZGV0YWlsLnRleHQubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSBlMTEuZGV0YWlsLnRleHQ7CiAgICAgICAgICBpZiAoZTExLmRldGFpbC5yZWN0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgICAgICAgICB4OiBlMTEuZGV0YWlsLnJlY3QubGVmdCArIGUxMS5kZXRhaWwucmVjdC53aWR0aCAvIDIsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIGUxMS5kZXRhaWwucmVjdC50b3AgLSA0NSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KGNvb3JkcywgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBmb3JtYXR0aW5nTWVudUVsZW1lbnQgPSB0aGlzLmZvcm1hdHRpbmdNZW51LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTsKICAgICAgICBpZiAoZm9ybWF0dGluZ01lbnVFbGVtZW50ICYmIGZvcm1hdHRpbmdNZW51RWxlbWVudC5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5mb3JtYXR0aW5nTWVudS52aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGlmICghdGhpcy5jb250YWlucyh0YXJnZXQpICYmICF0aGlzLnNoYWRvd1Jvb3Q/LmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgIWUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy51bmRvKCk7CiAgICAgICAgfSBlbHNlIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmIGUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5yZWRvKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgIH0KICAgIC8qKgogICAgICogUmVuZGVycyBhbGwgYmxvY2tzIHByb2dyYW1tYXRpY2FsbHkgd2l0aG91dCB0cmlnZ2VyaW5nIHJlLXJlbmRlcnMKICAgICAqLwogICAgcmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvckNvbnRlbnRSZWYpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvckNvbnRlbnRSZWYuaW5uZXJIVE1MID0gIiI7CiAgICAgIHRoaXMuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spOwogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZChibG9ja1dyYXBwZXIpOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGJsb2NrIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseQogICAgICovCiAgICBjcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJibG9jay13cmFwcGVyIjsKICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLCBibG9jay5pZCk7CiAgICAgIGlmIChibG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICBjb25zdCBkcmFnSGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZHJhZ0hhbmRsZS5jbGFzc05hbWUgPSAiZHJhZy1oYW5kbGUiOwogICAgICAgIGRyYWdIYW5kbGUuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICBkcmFnSGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkcmFnSGFuZGxlKTsKICAgICAgfQogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBibG9ja0NvbXBvbmVudC5ibG9jayA9IGJsb2NrOwogICAgICBibG9ja0NvbXBvbmVudC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEJsb2NrSWQgPT09IGJsb2NrLmlkOwogICAgICBibG9ja0NvbXBvbmVudC53eXNpd3lnQ29tcG9uZW50ID0gdGhpczsKICAgICAgYmxvY2tDb21wb25lbnQuaGFuZGxlcnMgPSB7CiAgICAgICAgb25JbnB1dDogKGUxMSkgPT4gdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQmxvY2tJbnB1dChlMTEsIGJsb2NrKSwKICAgICAgICBvbktleURvd246IChlMTEpID0+IHRoaXMua2V5Ym9hcmRIYW5kbGVyLmhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmhhbmRsZUJsb2NrRm9jdXMoYmxvY2spLAogICAgICAgIG9uQmx1cjogKCkgPT4gdGhpcy5oYW5kbGVCbG9ja0JsdXIoYmxvY2spLAogICAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IHRydWUsCiAgICAgICAgb25Db21wb3NpdGlvbkVuZDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlLAogICAgICAgIG9uTW91c2VVcDogKGUxMSkgPT4gdGhpcy5oYW5kbGVUZXh0U2VsZWN0aW9uKGUxMSksCiAgICAgICAgb25SZXF1ZXN0VXBkYXRlOiAoKSA9PiB0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCkKICAgICAgfTsKICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChibG9ja0NvbXBvbmVudCk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCAoZTExKSA9PiB0aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnT3ZlcihlMTEsIGJsb2NrKSk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoZTExLCBibG9jaykpOwogICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsICgpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdMZWF2ZShibG9jaykpOwogICAgICByZXR1cm4gd3JhcHBlcjsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyBhIHNwZWNpZmljIGJsb2NrIGVsZW1lbnQKICAgICAqLwogICAgdXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrSWQpIHsKICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogICAgICBpZiAoIWJsb2NrKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9ja0lkfSJdYCk7CiAgICAgIGlmICghd3JhcHBlcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChibG9jayk7CiAgICAgIHdyYXBwZXIucmVwbGFjZVdpdGgobmV3V3JhcHBlcik7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiB1M2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIE9sZCByZW5kZXJCbG9jayBtZXRob2QgcmVtb3ZlZCAtIHVzaW5nIHByb2dyYW1tYXRpYyByZW5kZXJpbmcgaW5zdGVhZAogICAgaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZTExKSB7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51Lm5hdmlnYXRlKCJkb3duIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zbGFzaE1lbnUubmF2aWdhdGUoInVwIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51LnNlbGVjdEN1cnJlbnQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuY2xvc2VTbGFzaE1lbnUodHJ1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY2xvc2VTbGFzaE1lbnUoY2xlYXJTbGFzaCA9IGZhbHNlKSB7CiAgICAgIGlmIChjbGVhclNsYXNoICYmIHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSB0aGlzLnNlbGVjdGVkQmxvY2tJZCk7CiAgICAgICAgaWYgKGN1cnJlbnRCbG9jaykgewogICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ29udGVudCA9IGNvbnRlbnQzLnJlcGxhY2UoL15cL1teXHNdKlxzKi8sICIiKS50cmltKCk7CiAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5mb2N1c1dpdGhDdXJzb3IoMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zbGFzaE1lbnUuaGlkZSgpOwogICAgfQogICAgaGFuZGxlQmxvY2tGb2N1cyhibG9jaykgewogICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTsKICAgICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBwcmV2U2VsZWN0ZWRJZCA9IHRoaXMuc2VsZWN0ZWRCbG9ja0lkOwogICAgICB0aGlzLnNlbGVjdGVkQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgICBpZiAocHJldlNlbGVjdGVkSWQgIT09IGJsb2NrLmlkKSB7CiAgICAgICAgaWYgKHByZXZTZWxlY3RlZElkKSB7CiAgICAgICAgICBjb25zdCBwcmV2V3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7cHJldlNlbGVjdGVkSWR9Il1gKTsKICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgYmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBibHVyVGltZW91dCA9IG51bGw7CiAgICBoYW5kbGVCbG9ja0JsdXIoYmxvY2spIHsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQgJiYgYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudDsKICAgICAgICBjb25zdCBpc0Jsb2NrRm9jdXNlZCA9IGFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKTsKICAgICAgICBpZiAoIWlzQmxvY2tGb2N1c2VkKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICB9LCAxMDApOwogICAgfQogICAgaGFuZGxlRWRpdG9yQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgIGlmICh0aGlzLnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgICAgdGhpcy5jbG9zZVNsYXNoTWVudSh0cnVlKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZWRpdG9yLWNvbnRlbnQiKSkgewogICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobGFzdEJsb2NrLmlkLCBsYXN0QmxvY2sudHlwZSA9PT0gImRpdmlkZXIiIHx8IGxhc3RCbG9jay50eXBlID09PSAiaW1hZ2UiID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICB9CiAgICBjcmVhdGVOZXdCbG9jayh0eXBlNSA9ICJwYXJhZ3JhcGgiLCBjb250ZW50MyA9ICIiLCBtZXRhZGF0YSkgewogICAgICByZXR1cm4gewogICAgICAgIGlkOiBXeXNpd3lnU2hvcnRjdXRzLmdlbmVyYXRlQmxvY2tJZCgpLAogICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgIC4uLm1ldGFkYXRhICYmIHsgbWV0YWRhdGEgfQogICAgICB9OwogICAgfQogICAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgICAgY29uc3QgYmxvY2tJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSBhZnRlckJsb2NrLmlkKTsKICAgICAgdGhpcy5ibG9ja3MgPSBbLi4udGhpcy5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLCBuZXdCbG9jaywgLi4udGhpcy5ibG9ja3Muc2xpY2UoYmxvY2tJbmRleCArIDEpXTsKICAgICAgY29uc3QgYWZ0ZXJXcmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgaWYgKGFmdGVyV3JhcHBlcikgewogICAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMCkpOwogICAgICAgIGF3YWl0IHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobmV3QmxvY2suaWQsICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbnNlcnRCbG9jayh0eXBlNSkgewogICAgICBjb25zdCBjdXJyZW50QmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgaWYgKCFjdXJyZW50QmxvY2spIHsKICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2N1cnJlbnRCbG9jay5pZH0iXWApOwogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudDMucmVwbGFjZSgvXlwvW15cc10qXHMqLywgIiIpLnRyaW0oKTsKICAgICAgICAgIGJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQoY2xlYW5Db250ZW50KTsKICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KGZhbHNlKTsKICAgICAgaWYgKHR5cGU1ID09PSAiY29kZSIpIHsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlOiAidHlwZXNjcmlwdCIgfTsKICAgICAgfQogICAgICBjdXJyZW50QmxvY2sudHlwZSA9IHR5cGU1OwogICAgICBjdXJyZW50QmxvY2suY29udGVudCA9IGN1cnJlbnRCbG9jay5jb250ZW50IHx8ICIiOwogICAgICBpZiAodHlwZTUgPT09ICJkaXZpZGVyIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiAiOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gdGhpcy5jcmVhdGVOZXdCbG9jaygpOwogICAgICAgIHRoaXMuaW5zZXJ0QmxvY2tBZnRlcihjdXJyZW50QmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImxpc3QiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiaW1hZ2UiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJ5b3V0dWJlIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImh0bWwiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVCbG9ja0VsZW1lbnQoY3VycmVudEJsb2NrLmlkKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgaWYgKHR5cGU1ID09PSAibGlzdCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudDIgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50MikgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudDIuZm9jdXNMaXN0SXRlbSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ICE9PSAiZGl2aWRlciIgJiYgdHlwZTUgIT09ICJpbWFnZSIgJiYgdHlwZTUgIT09ICJ5b3V0dWJlIiAmJiB0eXBlNSAhPT0gIm1hcmtkb3duIiAmJiB0eXBlNSAhPT0gImh0bWwiICYmIHR5cGU1ICE9PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJpbWFnZSIgfHwgdHlwZTUgPT09ICJ5b3V0dWJlIiB8fCB0eXBlNSA9PT0gIm1hcmtkb3duIiB8fCB0eXBlNSA9PT0gImh0bWwiIHx8IHR5cGU1ID09PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZVZhbHVlKCkgewogICAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT09ICJodG1sIikgewogICAgICAgIHRoaXMudmFsdWUgPSBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICB9CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpOwogICAgICB0aGlzLnNhdmVUb0hpc3RvcnkodHJ1ZSk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIpIHsKICAgICAgICB0aGlzLmJsb2NrcyA9IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlSHRtbFRvQmxvY2tzKHZhbHVlMik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBXeXNpd3lnQ29udmVydGVycy5wYXJzZU1hcmtkb3duVG9CbG9ja3ModmFsdWUyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9ja3MubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBbewogICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6ICIiCiAgICAgICAgfV07CiAgICAgIH0KICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSk7CiAgICAgIGlmICh0aGlzLmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeHBvcnQgdGhlIGVkaXRvciBjb250ZW50IGFzIHJhdyBibG9ja3MgKGxvc3NsZXNzKQogICAgICovCiAgICBleHBvcnRCbG9ja3MoKSB7CiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmxvY2tzKSk7CiAgICB9CiAgICAvKioKICAgICAqIEltcG9ydCByYXcgYmxvY2tzIChsb3NzbGVzcykKICAgICAqLwogICAgaW1wb3J0QmxvY2tzKGJsb2NrcykgewogICAgICB0aGlzLmJsb2NrcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYmxvY2tzKSk7CiAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEV4cG9ydCBjb250ZW50IGFzIEhUTUwgcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc0h0bWwoKSB7CiAgICAgIHJldHVybiBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgIH0KICAgIC8qKgogICAgICogRXhwb3J0IGNvbnRlbnQgYXMgTWFya2Rvd24gcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc01hcmtkb3duKCkgewogICAgICByZXR1cm4gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGl0b3Igc3RhdGUgKGZvciBzYXZpbmcpCiAgICAgKi8KICAgIGV4cG9ydFN0YXRlKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJsb2NrczogdGhpcy5leHBvcnRCbG9ja3MoKSwKICAgICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMub3V0cHV0Rm9ybWF0CiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFJlc3RvcmUgZWRpdG9yIHN0YXRlIGZyb20gSlNPTgogICAgICovCiAgICBpbXBvcnRTdGF0ZShzdGF0ZTEyKSB7CiAgICAgIGlmIChzdGF0ZTEyLm91dHB1dEZvcm1hdCkgewogICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gc3RhdGUxMi5vdXRwdXRGb3JtYXQ7CiAgICAgIH0KICAgICAgdGhpcy5pbXBvcnRCbG9ja3Moc3RhdGUxMi5ibG9ja3MpOwogICAgfQogICAgaGFuZGxlRHJhZ0VuZCgpIHsKICAgICAgaWYgKHRoaXMuZHJhZ2dlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuZHJhZ2dlZEJsb2NrSWR9Il1gKTsKICAgICAgICBpZiAod3JhcHBlcikgewogICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBhbGxXcmFwcGVycyA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBhbGxXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXItYmVmb3JlIiwgImRyYWctb3Zlci1hZnRlciIpOwogICAgICB9KTsKICAgICAgdGhpcy5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBudWxsOwogICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgICBoYW5kbGVEcm9wKGUxMSwgdGFyZ2V0QmxvY2spIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tJZCB8fCB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSB0YXJnZXRCbG9jay5pZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gdGFyZ2V0QmxvY2suaWQpOwogICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSB8fCB0YXJnZXRJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBbZHJhZ2dlZEJsb2NrXSA9IHRoaXMuYmxvY2tzLnNwbGljZShkcmFnZ2VkSW5kZXgsIDEpOwogICAgICBsZXQgbmV3SW5kZXggPSB0YXJnZXRJbmRleDsKICAgICAgaWYgKHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9PT0gImFmdGVyIikgewogICAgICAgIG5ld0luZGV4ID0gZHJhZ2dlZEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4ICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdJbmRleCA9IGRyYWdnZWRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja3Muc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkQmxvY2spOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgbW92ZWRCbG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZHJhZ2dlZEJsb2NrLmlkfSJdIC5ibG9ja2ApOwogICAgICAgIGlmIChtb3ZlZEJsb2NrRWxlbWVudCAmJiBkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICBtb3ZlZEJsb2NrRWxlbWVudC5mb2N1cygpOwogICAgICAgIH0KICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGhhbmRsZVRleHRTZWxlY3Rpb24oX2UpIHsKICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpIHsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IGJsb2NrV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGJsb2NrV3JhcHBlcnM/LmZvckVhY2goKHdyYXBwZXIpID0+IHsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IGNvb3JkcyA9IFd5c2l3eWdGb3JtYXR0aW5nLmdldFNlbGVjdGlvbkNvb3JkaW5hdGVzKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKGNvb3JkcykgewogICAgICAgIHRoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh7IHg6IGNvb3Jkcy54LCB5OiBjb29yZHMueSB9LCBhc3luYyAoY29tbWFuZCkgPT4gYXdhaXQgdGhpcy5hcHBseUZvcm1hdChjb21tYW5kKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgIH0KICAgIH0KICAgIGhpZGVGb3JtYXR0aW5nTWVudSgpIHsKICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICB9CiAgICBhc3luYyBhcHBseUZvcm1hdChjb21tYW5kKSB7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBibG9ja1dyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBibG9ja1dyYXBwZXJzPy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudD8uc2hhZG93Um9vdCkgewogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHRhcmdldEJsb2NrOwogICAgICBsZXQgdGFyZ2V0QmxvY2tDb21wb25lbnQ7CiAgICAgIGNvbnN0IHdyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdyYXBwZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gd3JhcHBlcnNbaTExXTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgKGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpIHx8IGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IHdyYXBwZXIuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgICAgIHRhcmdldEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgdGFyZ2V0QmxvY2tDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGFyZ2V0QmxvY2sgfHwgIXRhcmdldEJsb2NrQ29tcG9uZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBpZiAoY29tbWFuZCA9PT0gImxpbmsiKSB7CiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5zaG93TGlua0RpYWxvZygpOwogICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBXeXNpd3lnRm9ybWF0dGluZy5hcHBseUZvcm1hdChjb21tYW5kLCB1cmwsIHJhbmdlMiwgc2hhZG93Um9vdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIFd5c2l3eWdGb3JtYXR0aW5nLmFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZvaWQgMCwgcmFuZ2UyLCBzaGFkb3dSb290cyk7CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMCkpOwogICAgICB0YXJnZXRCbG9jay5jb250ZW50ID0gdGFyZ2V0QmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRhcmdldEJsb2NrQ29tcG9uZW50LmZvY3VzKCk7CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNob3dMaW5rRGlhbG9nKCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgbGV0IGxpbmtVcmwgPSBudWxsOwogICAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGhlYWRpbmc6ICJBZGQgTGluayIsCiAgICAgICAgICBjb250ZW50OiB1M2AKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxpbmstaW5wdXQgewogICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlZXMtY29sb3ItbGluZS1icmlnaHQpOwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVzLWNvbG9yLWlucHV0KTsKICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0KTsKICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGluay1pbnB1dDpmb2N1cyB7CiAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRlZXMtY29sb3ItcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgIGNsYXNzPSJsaW5rLWlucHV0IiAKICAgICAgICAgICAgdHlwZT0idXJsIiAKICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20iIAogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICAgIGxpbmtVcmwgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IGlucHV0LmNsb3Nlc3QoImRlZXMtbW9kYWwiKTsKICAgICAgICAgICAgICBpZiAobW9kYWwpIHsKICAgICAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIik7CiAgICAgICAgICAgICAgICBpZiAob2tCdXR0b24pCiAgICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsaWNrKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9fSIKICAgICAgICAgICAgQGlucHV0PSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgbGlua1VybCA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICB9fSIKICAgICAgICAgIC8+CiAgICAgICAgYCwKICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobGlua1VybCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwgLmxpbmstaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dCkgewogICAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBVbmRvIHRoZSBsYXN0IGFjdGlvbgogICAgICovCiAgICB1bmRvKCkgewogICAgICBjb25zdCBzdGF0ZTEyID0gdGhpcy5oaXN0b3J5LnVuZG8oKTsKICAgICAgaWYgKHN0YXRlMTIpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTEyKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWRvIHRoZSBuZXh0IGFjdGlvbgogICAgICovCiAgICByZWRvKCkgewogICAgICBjb25zdCBzdGF0ZTEyID0gdGhpcy5oaXN0b3J5LnJlZG8oKTsKICAgICAgaWYgKHN0YXRlMTIpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTEyKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZXN0b3JlIGVkaXRvciBzdGF0ZSBmcm9tIGhpc3RvcnkKICAgICAqLwogICAgcmVzdG9yZVN0YXRlKHN0YXRlMTIpIHsKICAgICAgdGhpcy5ibG9ja3MgPSBzdGF0ZTEyLmJsb2NrczsKICAgICAgdGhpcy5zZWxlY3RlZEJsb2NrSWQgPSBzdGF0ZTEyLnNlbGVjdGVkQmxvY2tJZDsKICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgIGlmIChzdGF0ZTEyLmN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3N0YXRlMTIuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApOwogICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihzdGF0ZTEyLmN1cnNvclBvc2l0aW9uLm9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgNTApOwogICAgICB9IGVsc2UgaWYgKHN0YXRlMTIuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKHN0YXRlMTIuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgICB9LCA1MCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gaGlzdG9yeSB3aXRoIGN1cnNvciBwb3NpdGlvbgogICAgICovCiAgICBzYXZlVG9IaXN0b3J5KGRlYm91bmNlNCA9IHRydWUpIHsKICAgICAgbGV0IGN1cnNvclBvc2l0aW9uOwogICAgICBpZiAodGhpcy5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuc2VsZWN0ZWRCbG9ja0lkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiB0eXBlb2YgYmxvY2tDb21wb25lbnQuZ2V0Q3Vyc29yUG9zaXRpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgICAgaWYgKGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBibG9ja0NvbXBvbmVudC5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlYm91bmNlNCkgewogICAgICAgIHRoaXMuaGlzdG9yeS5zYXZlU3RhdGUodGhpcy5ibG9ja3MsIHRoaXMuc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVDaGVja3BvaW50KHRoaXMuYmxvY2tzLCB0aGlzLnNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUuY3JvcHBlci5qcwp2YXIgSW1hZ2VDcm9wcGVyID0gY2xhc3MgewogIG9wdGlvbnM7CiAgY2FudmFzOwogIGN0eDsKICBpbWc7CiAgb3ZlcmxheUNhbnZhczsKICBvdmVybGF5Q3R4OwogIC8vIENyb3AgYXJlYSBwcm9wZXJ0aWVzCiAgY3JvcFggPSAwOwogIGNyb3BZID0gMDsKICBjcm9wU2l6ZSA9IDIwMDsKICBtaW5Dcm9wU2l6ZSA9IDUwOwogIC8vIEludGVyYWN0aW9uIHN0YXRlCiAgaXNEcmFnZ2luZyA9IGZhbHNlOwogIGlzUmVzaXppbmcgPSBmYWxzZTsKICBkcmFnU3RhcnRYID0gMDsKICBkcmFnU3RhcnRZID0gMDsKICByZXNpemVIYW5kbGUgPSAiIjsKICAvLyBJbWFnZSBwcm9wZXJ0aWVzCiAgaW1hZ2VTY2FsZSA9IDE7CiAgaW1hZ2VPZmZzZXRYID0gMDsKICBpbWFnZU9mZnNldFkgPSAwOwogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgbWluU2l6ZTogNTAsCiAgICAgIG91dHB1dFNpemU6IDgwMCwKICAgICAgLy8gSGlnaGVyIGRlZmF1bHQgcmVzb2x1dGlvbgogICAgICBvdXRwdXRRdWFsaXR5OiAwLjk1LAogICAgICAvLyBIaWdoZXIgcXVhbGl0eQogICAgICAuLi5vcHRpb25zCiAgICB9OwogICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgdGhpcy5vdmVybGF5Q3R4ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpOwogIH0KICBhc3luYyBpbml0aWFsaXplKCkgewogICAgYXdhaXQgdGhpcy5sb2FkSW1hZ2UoKTsKICAgIHRoaXMuc2V0dXBDYW52YXNlcygpOwogICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICB0aGlzLnJlbmRlcigpOwogIH0KICBhc3luYyBsb2FkSW1hZ2UoKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5pbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZTIoKTsKICAgICAgdGhpcy5pbWcub25lcnJvciA9IHJlamVjdDsKICAgICAgdGhpcy5pbWcuc3JjID0gdGhpcy5vcHRpb25zLmltYWdlOwogICAgfSk7CiAgfQogIHNldHVwQ2FudmFzZXMoKSB7CiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyOwogICAgY29uc3QgY29udGFpbmVyU2l6ZSA9IE1hdGgubWluKGNvbnRhaW5lci5jbGllbnRXaWR0aCwgY29udGFpbmVyLmNsaWVudEhlaWdodCk7CiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSAiMCI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLndpZHRoID0gY29udGFpbmVyU2l6ZTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUudG9wID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmxlZnQgPSAiMCI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlDYW52YXMpOwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihjb250YWluZXJTaXplIC8gdGhpcy5pbWcud2lkdGgsIGNvbnRhaW5lclNpemUgLyB0aGlzLmltZy5oZWlnaHQpOwogICAgdGhpcy5pbWFnZVNjYWxlID0gc2NhbGU7CiAgICB0aGlzLmltYWdlT2Zmc2V0WCA9IChjb250YWluZXJTaXplIC0gdGhpcy5pbWcud2lkdGggKiBzY2FsZSkgLyAyOwogICAgdGhpcy5pbWFnZU9mZnNldFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuaW1nLmhlaWdodCAqIHNjYWxlKSAvIDI7CiAgICBjb25zdCBzY2FsZWRJbWFnZVdpZHRoID0gdGhpcy5pbWcud2lkdGggKiBzY2FsZTsKICAgIGNvbnN0IHNjYWxlZEltYWdlSGVpZ2h0ID0gdGhpcy5pbWcuaGVpZ2h0ICogc2NhbGU7CiAgICBjb25zdCBtYXhDcm9wU2l6ZSA9IE1hdGgubWluKHNjYWxlZEltYWdlV2lkdGgsIHNjYWxlZEltYWdlSGVpZ2h0LCBjb250YWluZXJTaXplICogMC44KTsKICAgIHRoaXMuY3JvcFNpemUgPSBtYXhDcm9wU2l6ZSAqIDAuODsKICAgIHRoaXMuY3JvcFggPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICAgIHRoaXMuY3JvcFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICB9CiAgc2V0dXBFdmVudExpc3RlbmVycygpIHsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVNb3VzZVVwLmJpbmQodGhpcykpOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSk7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0aGlzLmhhbmRsZVRvdWNoTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIHRoaXMuaGFuZGxlVG91Y2hFbmQuYmluZCh0aGlzKSk7CiAgfQogIGhhbmRsZU1vdXNlRG93bihlMTEpIHsKICAgIGNvbnN0IHJlY3QgPSB0aGlzLm92ZXJsYXlDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB4MyA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICBjb25zdCB5NSA9IChlMTEuY2xpZW50WSAtIHJlY3QudG9wKSAqICh0aGlzLm92ZXJsYXlDYW52YXMuaGVpZ2h0IC8gcmVjdC5oZWlnaHQpOwogICAgY29uc3QgaGFuZGxlMyA9IHRoaXMuZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSk7CiAgICBpZiAoaGFuZGxlMykgewogICAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZSA9IGhhbmRsZTM7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpKSB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICB9CiAgICB0aGlzLmRyYWdTdGFydFggPSB4MzsKICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogIH0KICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICBjb25zdCByZWN0ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgeDMgPSAoZTExLmNsaWVudFggLSByZWN0LmxlZnQpICogKHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCAvIHJlY3Qud2lkdGgpOwogICAgY29uc3QgeTUgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgIGNvbnN0IGhhbmRsZTMgPSB0aGlzLmdldFJlc2l6ZUhhbmRsZSh4MywgeTUpOwogICAgaWYgKGhhbmRsZTMpIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpOwogICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlQ3JvcEFyZWEoeDMsIHk1KSkgewogICAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9ICJkZWZhdWx0IjsKICAgIH0KICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHsKICAgICAgY29uc3QgZHggPSB4MyAtIHRoaXMuZHJhZ1N0YXJ0WDsKICAgICAgY29uc3QgZHkgPSB5NSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgY29uc3QgbWluWCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgICBjb25zdCBtYXhYID0gdGhpcy5pbWFnZU9mZnNldFggKyB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSAtIHRoaXMuY3JvcFNpemU7CiAgICAgIGNvbnN0IG1pblkgPSB0aGlzLmltYWdlT2Zmc2V0WTsKICAgICAgY29uc3QgbWF4WSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgdGhpcy5jcm9wWCA9IE1hdGgubWF4KG1pblgsIE1hdGgubWluKG1heFgsIHRoaXMuY3JvcFggKyBkeCkpOwogICAgICB0aGlzLmNyb3BZID0gTWF0aC5tYXgobWluWSwgTWF0aC5taW4obWF4WSwgdGhpcy5jcm9wWSArIGR5KSk7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IHgzOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NTsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0KICAgIGlmICh0aGlzLmlzUmVzaXppbmcpIHsKICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeDMsIHk1KTsKICAgICAgdGhpcy5kcmFnU3RhcnRYID0geDM7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfQogIH0KICBoYW5kbGVNb3VzZVVwKCkgewogICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTsKICAgIHRoaXMucmVzaXplSGFuZGxlID0gIiI7CiAgfQogIGhhbmRsZVRvdWNoU3RhcnQoZTExKSB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHRvdWNoID0gZTExLnRvdWNoZXNbMF07CiAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHsKICAgICAgY2xpZW50WDogdG91Y2guY2xpZW50WCwKICAgICAgY2xpZW50WTogdG91Y2guY2xpZW50WQogICAgfSk7CiAgICB0aGlzLmhhbmRsZU1vdXNlRG93bihtb3VzZUV2ZW50KTsKICB9CiAgaGFuZGxlVG91Y2hNb3ZlKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCB0b3VjaCA9IGUxMS50b3VjaGVzWzBdOwogICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLCB7CiAgICAgIGNsaWVudFg6IHRvdWNoLmNsaWVudFgsCiAgICAgIGNsaWVudFk6IHRvdWNoLmNsaWVudFkKICAgIH0pOwogICAgdGhpcy5oYW5kbGVNb3VzZU1vdmUobW91c2VFdmVudCk7CiAgfQogIGhhbmRsZVRvdWNoRW5kKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLmhhbmRsZU1vdXNlVXAoKTsKICB9CiAgZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSkgewogICAgY29uc3QgaGFuZGxlU2l6ZSA9IDIwOwogICAgY29uc3QgaGFuZGxlcyA9IHsKICAgICAgIm53IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgICJuZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgInN3IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICAic2UiOiB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICB9OwogICAgZm9yIChjb25zdCBba2V5MiwgcG9zXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVzKSkgewogICAgICBpZiAoTWF0aC5hYnMoeDMgLSBwb3MueCkgPCBoYW5kbGVTaXplICYmIE1hdGguYWJzKHk1IC0gcG9zLnkpIDwgaGFuZGxlU2l6ZSkgewogICAgICAgIHJldHVybiBrZXkyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQogIGdldFJlc2l6ZUN1cnNvcihoYW5kbGUzKSB7CiAgICBjb25zdCBjdXJzb3JzID0gewogICAgICAibnciOiAibnctcmVzaXplIiwKICAgICAgIm5lIjogIm5lLXJlc2l6ZSIsCiAgICAgICJzdyI6ICJzdy1yZXNpemUiLAogICAgICAic2UiOiAic2UtcmVzaXplIgogICAgfTsKICAgIHJldHVybiBjdXJzb3JzW2hhbmRsZTNdIHx8ICJkZWZhdWx0IjsKICB9CiAgaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpIHsKICAgIHJldHVybiB4MyA+PSB0aGlzLmNyb3BYICYmIHgzIDw9IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplICYmIHk1ID49IHRoaXMuY3JvcFkgJiYgeTUgPD0gdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemU7CiAgfQogIGhhbmRsZVJlc2l6ZSh4MywgeTUpIHsKICAgIGNvbnN0IGR4ID0geDMgLSB0aGlzLmRyYWdTdGFydFg7CiAgICBjb25zdCBkeSA9IHk1IC0gdGhpcy5kcmFnU3RhcnRZOwogICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgY29uc3QgaW1nVG9wID0gdGhpcy5pbWFnZU9mZnNldFk7CiAgICBjb25zdCBpbWdSaWdodCA9IHRoaXMuaW1hZ2VPZmZzZXRYICsgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGU7CiAgICBjb25zdCBpbWdCb3R0b20gPSB0aGlzLmltYWdlT2Zmc2V0WSArIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZTsKICAgIHN3aXRjaCAodGhpcy5yZXNpemVIYW5kbGUpIHsKICAgICAgY2FzZSAic2UiOgogICAgICAgIHRoaXMuY3JvcFNpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCBNYXRoLm1pbih0aGlzLmNyb3BTaXplICsgTWF0aC5tYXgoZHgsIGR5KSwgTWF0aC5taW4oaW1nUmlnaHQgLSB0aGlzLmNyb3BYLCBpbWdCb3R0b20gLSB0aGlzLmNyb3BZKSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJudyI6CiAgICAgICAgY29uc3QgbmV3U2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIHRoaXMuY3JvcFNpemUgLSBNYXRoLm1heChkeCwgZHkpKTsKICAgICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMuY3JvcFNpemUgLSBuZXdTaXplOwogICAgICAgIGNvbnN0IG5ld1ggPSB0aGlzLmNyb3BYICsgc2l6ZURpZmY7CiAgICAgICAgY29uc3QgbmV3WSA9IHRoaXMuY3JvcFkgKyBzaXplRGlmZjsKICAgICAgICBpZiAobmV3WCA+PSBpbWdMZWZ0ICYmIG5ld1kgPj0gaW1nVG9wKSB7CiAgICAgICAgICB0aGlzLmNyb3BYID0gbmV3WDsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZXdZOwogICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJuZSI6CiAgICAgICAgY29uc3QgbmVTaXplRHggPSBNYXRoLm1heChkeCwgLWR5KTsKICAgICAgICBjb25zdCBuZU5ld1NpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCB0aGlzLmNyb3BTaXplICsgbmVTaXplRHgpOwogICAgICAgIGNvbnN0IG5lU2l6ZURpZmYgPSBuZU5ld1NpemUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgIGNvbnN0IG5lTmV3WSA9IHRoaXMuY3JvcFkgLSBuZVNpemVEaWZmOwogICAgICAgIGlmIChuZU5ld1kgPj0gaW1nVG9wICYmIHRoaXMuY3JvcFggKyBuZU5ld1NpemUgPD0gaW1nUmlnaHQpIHsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZU5ld1k7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gbmVOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAic3ciOgogICAgICAgIGNvbnN0IHN3U2l6ZUR4ID0gTWF0aC5tYXgoLWR4LCBkeSk7CiAgICAgICAgY29uc3Qgc3dOZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSArIHN3U2l6ZUR4KTsKICAgICAgICBjb25zdCBzd1NpemVEaWZmID0gc3dOZXdTaXplIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgICBjb25zdCBzd05ld1ggPSB0aGlzLmNyb3BYIC0gc3dTaXplRGlmZjsKICAgICAgICBpZiAoc3dOZXdYID49IGltZ0xlZnQgJiYgdGhpcy5jcm9wWSArIHN3TmV3U2l6ZSA8PSBpbWdCb3R0b20pIHsKICAgICAgICAgIHRoaXMuY3JvcFggPSBzd05ld1g7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gc3dOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5jdHguZmlsbFN0eWxlID0gIiMwMDAwMDAiOwogICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7CiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHRoaXMuaW1hZ2VPZmZzZXRYLCB0aGlzLmltYWdlT2Zmc2V0WSwgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUsIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZSk7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFN0eWxlID0gInJnYmEoMCwgMCwgMCwgMC41KSI7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFJlY3QodGhpcy5pbWFnZU9mZnNldFgsIHRoaXMuaW1hZ2VPZmZzZXRZLCB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSwgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlKTsKICAgIHRoaXMub3ZlcmxheUN0eC5zYXZlKCk7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyh0aGlzLmNyb3BYICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wU2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsaXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LnJlY3QodGhpcy5jcm9wWCwgdGhpcy5jcm9wWSwgdGhpcy5jcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5jbGlwKCk7CiAgICB9CiAgICB0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCwgdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCk7CiAgICB0aGlzLm92ZXJsYXlDdHgucmVzdG9yZSgpOwogICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZVN0eWxlID0gIndoaXRlIjsKICAgIHRoaXMub3ZlcmxheUN0eC5saW5lV2lkdGggPSAyOwogICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICB0aGlzLm92ZXJsYXlDdHguYmVnaW5QYXRoKCk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUgLyAyLCB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFNpemUgLyAyLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsIHRoaXMuY3JvcFksIHRoaXMuY3JvcFNpemUsIHRoaXMuY3JvcFNpemUpOwogICAgfQogICAgdGhpcy5kcmF3UmVzaXplSGFuZGxlcygpOwogIH0KICBkcmF3UmVzaXplSGFuZGxlcygpIHsKICAgIGNvbnN0IGhhbmRsZVNpemUgPSA4OwogICAgY29uc3QgaGFuZGxlcyA9IFsKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICBdOwogICAgdGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZTMpID0+IHsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICB0aGlzLm92ZXJsYXlDdHguYXJjKGhhbmRsZTMueCwgaGFuZGxlMy55LCBoYW5kbGVTaXplLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsKCk7CiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCkgewogICAgY29uc3QgY3JvcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgY29uc3QgY3JvcEN0eCA9IGNyb3BDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNvbnN0IHNjYWxlID0gMSAvIHRoaXMuaW1hZ2VTY2FsZTsKICAgIGNvbnN0IG9yaWdpbmFsQ3JvcFNpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBjb25zdCBvdXRwdXRTaXplID0gdGhpcy5vcHRpb25zLm91dHB1dFNpemU7CiAgICBpZiAob3V0cHV0U2l6ZSA+IG9yaWdpbmFsQ3JvcFNpemUpIHsKICAgICAgY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChvcmlnaW5hbENyb3BTaXplKX1weCB0byAke291dHB1dFNpemV9cHhgKTsKICAgIH0KICAgIGNyb3BDYW52YXMud2lkdGggPSBvdXRwdXRTaXplOwogICAgY3JvcENhbnZhcy5oZWlnaHQgPSBvdXRwdXRTaXplOwogICAgY29uc3Qgc3ggPSAodGhpcy5jcm9wWCAtIHRoaXMuaW1hZ2VPZmZzZXRYKSAqIHNjYWxlOwogICAgY29uc3Qgc3kgPSAodGhpcy5jcm9wWSAtIHRoaXMuaW1hZ2VPZmZzZXRZKSAqIHNjYWxlOwogICAgY29uc3Qgc1NpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIGNyb3BDdHguYmVnaW5QYXRoKCk7CiAgICAgIGNyb3BDdHguYXJjKG91dHB1dFNpemUgLyAyLCBvdXRwdXRTaXplIC8gMiwgb3V0cHV0U2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3JvcEN0eC5jbGlwKCk7CiAgICB9CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgIGNyb3BDdHguZHJhd0ltYWdlKHRoaXMuaW1nLCBzeCwgc3ksIHNTaXplLCBzU2l6ZSwgMCwgMCwgb3V0cHV0U2l6ZSwgb3V0cHV0U2l6ZSk7CiAgICBjb25zdCBpc1BuZyA9IHRoaXMub3B0aW9ucy5pbWFnZS5pbmNsdWRlcygiaW1hZ2UvcG5nIik7CiAgICBjb25zdCBmb3JtYXQyID0gaXNQbmcgPyAiaW1hZ2UvcG5nIiA6ICJpbWFnZS9qcGVnIjsKICAgIHJldHVybiBjcm9wQ2FudmFzLnRvRGF0YVVSTChmb3JtYXQyLCB0aGlzLm9wdGlvbnMub3V0cHV0UXVhbGl0eSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5yZW1vdmUoKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUubW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBQcm9maWxlUGljdHVyZU1vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2luaXRpYWxJbWFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbEltYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9kZWNvcmF0b3JzOwogIGxldCBfc2hhcGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9yczsKICBsZXQgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hhcGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluaXRpYWxJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5pdGlhbEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2hhcGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hhcGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNoYXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNoYXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaGFwZV9pbml0aWFsaXplcnMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY1KHRoaXMsIG51bGwsIF9vdXRwdXRTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRTaXplX2luaXRpYWxpemVycywgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRRdWFsaXR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRRdWFsaXR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFF1YWxpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjUodGhpcywgbnVsbCwgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRTdGVwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50U3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50U3RlcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFN0ZXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNyb3BwZWRJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3JvcHBlZEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNyb3BwZWRJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3JvcHBlZEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMsIF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaXNQcm9jZXNzaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvY2Vzc2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9jZXNzaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvY2Vzc2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9jZXNzaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvY2Vzc2luZ19pbml0aWFsaXplcnMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBpbml0aWFsSW1hZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbml0aWFsSW1hZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NoYXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCAicm91bmQiKSk7CiAgICBnZXQgc2hhcGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNoYXBlKHZhbHVlMikgewogICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICBnZXQgb3V0cHV0UXVhbGl0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCAiY3JvcCIpKTsKICAgIGdldCBjdXJyZW50U3RlcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFN0ZXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGNyb3BwZWRJbWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Nyb3BwZWRJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNyb3BwZWRJbWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2Nlc3NpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2Nlc3NpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2Nlc3NpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvY2Vzc2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3JvcHBlciA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHdpbmRvd0xheWVyOwogICAgekluZGV4ID0gMDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgfQoKICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBhMGEwYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCAiMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMC45OCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb246IG1vZGFsU2hvdyAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIG1vZGFsU2hvdyB7CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1vZGFsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAuY3JvcHBlci1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgYXNwZWN0LXJhdGlvOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNikiLCAiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KSIsICIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5yb3VuZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5zcXVhcmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zdWNjZXNzLW1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTBiOTgxIiwgIiMxMGI5ODEiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGFuaW1hdGlvbjogc3VjY2Vzc1B1bHNlIDAuNHMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHsKICAgICAgICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgICB9CgogICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTsKICAgICAgdGhpcy56SW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoIi0tei1pbmRleCIsIHRoaXMuekluZGV4LnRvU3RyaW5nKCkpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLnpJbmRleCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY3JvcHBlcikgewogICAgICAgIHRoaXMuY3JvcHBlci5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiID8gIkFkanVzdCBJbWFnZSIgOiAiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPgogICAgICAgICAgICAgIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIHNxdWFyZSB0byBzZWxlY3QgeW91ciBwcm9maWxlIGFyZWEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3BwZXItY29udGFpbmVyIiBpZD0iY3JvcHBlckNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuaXNQcm9jZXNzaW5nID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj5TYXZpbmcuLi48L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1pbWFnZSAke3RoaXMuc2hhcGV9IiAKICAgICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuY3JvcHBlZEltYWdlfSIgCiAgICAgICAgICAgICAgICAgIGFsdD0iQ3JvcHBlZCBwcmV2aWV3IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Y2Nlc3MtbWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZWNrIiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3Bhbj5Mb29raW5nIGdvb2QhPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplQ3JvcHBlcigpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbml0aWFsaXplQ3JvcHBlcigpIHsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7CiAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5jcm9wcGVyID0gbmV3IEltYWdlQ3JvcHBlcih7CiAgICAgICAgY29udGFpbmVyLAogICAgICAgIGltYWdlOiB0aGlzLmluaXRpYWxJbWFnZSwKICAgICAgICBzaGFwZTogdGhpcy5zaGFwZSwKICAgICAgICBhc3BlY3RSYXRpbzogMSwKICAgICAgICBvdXRwdXRTaXplOiB0aGlzLm91dHB1dFNpemUsCiAgICAgICAgb3V0cHV0UXVhbGl0eTogdGhpcy5vdXRwdXRRdWFsaXR5CiAgICAgIH0pOwogICAgICBhd2FpdCB0aGlzLmNyb3BwZXIuaW5pdGlhbGl6ZSgpOwogICAgfQogICAgYXN5bmMgaGFuZGxlQ3JvcCgpIHsKICAgICAgaWYgKCF0aGlzLmNyb3BwZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gInByZXZpZXciOwogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY3JvcHBlZERhdGEgPSBhd2FpdCB0aGlzLmNyb3BwZXIuZ2V0Q3JvcHBlZEltYWdlKCk7CiAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBjcm9wcGVkRGF0YTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDgwMCkpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2F2ZSIsIHsKICAgICAgICAgIGRldGFpbDogeyBjcm9wcGVkSW1hZ2U6IHRoaXMuY3JvcHBlZEltYWdlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSwgMTUwMCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IiwgZXJyb3IpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gUHJvZmlsZVBpY3R1cmVNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDQ4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByb3VuZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTsKICBpZiAocm91bmRQcm9maWxlKSB7CiAgICByb3VuZFByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coIlJvdW5kIHByb2ZpbGUgcGljdHVyZSBjaGFuZ2VkOiIsIHRhcmdldC52YWx1ZT8uc3Vic3RyaW5nKDAsIDUwKSArICIuLi4iKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcm9maWxlIFBpY3R1cmUgSW5wdXQifSAuc3VidGl0bGU9JHsiQmFzaWMgdXNhZ2Ugd2l0aCByb3VuZCBhbmQgc3F1YXJlIHNoYXBlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJQcm9maWxlIFBpY3R1cmUgKFJvdW5kKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRvIHVwbG9hZCBvciBkcmFnICYgZHJvcCBhbiBpbWFnZSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChTcXVhcmUpIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iU3VwcG9ydHMgSlBFRywgUE5HLCBhbmQgV2ViUCBmb3JtYXRzIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBwcm9maWxlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpOwogIHByb2ZpbGVzLmZvckVhY2goKHByb2ZpbGUpID0+IHsKICAgIHByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coYFByb2ZpbGUgKHNpemUgJHt0YXJnZXQuc2l6ZX0pIGNoYW5nZWRgKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNpemUgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJQcm9maWxlIHBpY3R1cmVzIGluIGRpZmZlcmVudCBzaXplcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJTbWFsbCAoODBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iODAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTWVkaXVtICgxMjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IkxhcmdlICgxNjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTYwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3Qgc2FtcGxlSW1hZ2VVcmwgPSAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLSUNBOFpHVm1jejRLSUNBZ0lEeHNhVzVsWVhKSGNtRmthV1Z1ZENCcFpEMGlaM0poWkdsbGJuUWlJSGd4UFNJd0pTSWdlVEU5SWpBbElpQjRNajBpTVRBd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdmJHOXlQU0lqTmpZM1pXVmhJaUF2UGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqRXdNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTTNOalJpWVRJaUlDOCtDaUFnSUNBOEwyeHBibVZoY2tkeVlXUnBaVzUwUGdvZ0lEd3ZaR1ZtY3o0S0lDQThjbVZqZENCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnWm1sc2JEMGlkWEpzS0NObmNtRmthV1Z1ZENraUlDOCtDaUFnUEhSbGVIUWdlRDBpTlRBbElpQjVQU0kxTUNVaUlHUnZiV2x1WVc1MExXSmhjMlZzYVc1bFBTSnRhV1JrYkdVaUlIUmxlSFF0WVc1amFHOXlQU0p0YVdSa2JHVWlJR1p2Ym5RdFptRnRhV3g1UFNKQmNtbGhiQ0lnWm05dWRDMXphWHBsUFNJNE1DSWdabWxzYkQwaWQyaHBkR1VpUGtwRVBDOTBaWGgwUGdvOEwzTjJaejQ9IjsKICBjb25zdCBwcmVmaWxsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTsKICBpZiAocHJlZmlsbGVkUHJvZmlsZSkgewogICAgcHJlZmlsbGVkUHJvZmlsZS52YWx1ZSA9IHNhbXBsZUltYWdlVXJsOwogICAgcHJlZmlsbGVkUHJvZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7CiAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSB0YXJnZXQudmFsdWUgPyBgSW1hZ2UgZGF0YTogJHt0YXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIDgwKX0uLi5gIDogIk5vIGltYWdlIHNlbGVjdGVkIjsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByZS1maWxsZWQgYW5kIFZhbHVlIEJpbmRpbmcifSAuc3VidGl0bGU9JHsiUHJvZmlsZSBwaWN0dXJlIHdpdGggaW5pdGlhbCB2YWx1ZSBhbmQgY2hhbmdlIHRyYWNraW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgIGlkPSJwcmVmaWxsZWQtcHJvZmlsZSIKICAgICAgICAgIGxhYmVsPSJFZGl0IEV4aXN0aW5nIFByb2ZpbGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2xpY2sgdGhlIGVkaXQgYnV0dG9uIHRvIGNoYW5nZSBvciBkZWxldGUgdG8gcmVtb3ZlIgogICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgc2l6ZT0iMTUwIgogICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0icHJlZmlsbGVkLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIEltYWdlIGRhdGEgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIGNoYW5nZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZGlzYWJsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpOwogIGlmIChkaXNhYmxlZFByb2ZpbGUpIHsKICAgIGRpc2FibGVkUHJvZmlsZS52YWx1ZSA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJSZXF1aXJlZCBGaWVsZCIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGlkPSJkaXNhYmxlZC1wcm9maWxlIgogICAgICAgICAgICBsYWJlbD0iRGlzYWJsZWQgU3RhdGUiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2RlY29yYXRvcnM7CiAgbGV0IF9zaGFwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzOwogIGxldCBfYWxsb3dEZWxldGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9vdXRwdXRTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaGFwZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FsbG93VXBsb2FkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FsbG93RGVsZXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEZpbGVTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzSG92ZXJlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3NoYXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNoYXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaGFwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaGFwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hhcGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWxsb3dVcGxvYWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWxsb3dVcGxvYWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93VXBsb2FkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93VXBsb2FkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hbGxvd1VwbG9hZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMsIF9hbGxvd1VwbG9hZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0RlbGV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWxsb3dEZWxldGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWxsb3dEZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RGVsZXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX21heEZpbGVTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heEZpbGVTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhGaWxlU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhGaWxlU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4RmlsZVNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdGVkRm9ybWF0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0ZWRGb3JtYXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdGVkRm9ybWF0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ZWRGb3JtYXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMsIF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0UXVhbGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0UXVhbGl0eSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRRdWFsaXR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vdXRwdXRRdWFsaXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0hvdmVyZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNIb3ZlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0hvdmVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfaXNMb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNMb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gQmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgVVJMCiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgZ2V0IHNoYXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaGFwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMTIwKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYWxsb3dVcGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFsbG93VXBsb2FkKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhbGxvd0RlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEZWxldGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21heEZpbGVTaXplX2luaXRpYWxpemVycywgNSAqIDEwMjQgKiAxMDI0KSk7CiAgICBnZXQgbWF4RmlsZVNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhGaWxlU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gNU1CCiAgICBzZXQgbWF4RmlsZVNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY2NlcHRlZEZvcm1hdHNfaW5pdGlhbGl6ZXJzLCBbImltYWdlL2pwZWciLCAiaW1hZ2UvcG5nIiwgImltYWdlL3dlYnAiXSkpOwogICAgZ2V0IGFjY2VwdGVkRm9ybWF0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdGVkRm9ybWF0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2FjY2VwdGVkRm9ybWF0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gT3V0cHV0IHJlc29sdXRpb24gaW4gcGl4ZWxzCiAgICBzZXQgb3V0cHV0U2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIDAuOTUpKTsKICAgIGdldCBvdXRwdXRRdWFsaXR5KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMC0xIHF1YWxpdHkgZm9yIEpQRUcKICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNIb3ZlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNIb3ZlcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc0hvdmVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0RyYWdnaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vZGFsSW5zdGFuY2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUgewogICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmRyYWdnaW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCAicmdiYSg5NiwgMTY1LCAyNTAsIDAuMTUpIil9OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ4IiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAucHJvZmlsZS1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyOmhvdmVyIC5vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3ZlcmxheS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC45NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzNmM2Y0NiIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjkpIiwgInJnYmEoMjIwLCAzOCwgMzgsIDAuOSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNkYzI2MjYiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wLXpvbmUtdGV4dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgYW5pbWF0aW9uICovCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSIsICJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctb3ZlcmxheS5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmNsaWNraW5nIHsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDAuM3MgZWFzZS1vdXQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIAogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icHJvZmlsZS1jb250YWluZXIiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgICAgQGRyYWdvdmVyPSR7dGhpcy5oYW5kbGVEcmFnT3Zlcn0KICAgICAgICAgIEBkcmFnbGVhdmU9JHt0aGlzLmhhbmRsZURyYWdMZWF2ZX0KICAgICAgICAgIEBkcm9wPSR7dGhpcy5oYW5kbGVEcm9wfQogICAgICAgICAgc3R5bGU9Ii0tc2l6ZTogJHt0aGlzLnNpemV9cHgiCiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1waWN0dXJlICR7dGhpcy5zaGFwZX0gJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9ICR7dGhpcy5pc0xvYWRpbmcgJiYgIXRoaXMudmFsdWUgPyAiY2xpY2tpbmciIDogIiJ9Ij4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlID8gYjJgCiAgICAgICAgICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1pbWFnZSIgc3JjPSIke3RoaXMudmFsdWV9IiBhbHQ9IlByb2ZpbGUgcGljdHVyZSIgLz4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InBsYWNlaG9sZGVyLWljb24iIGljb249Imx1Y2lkZTp1c2VyIiBpY29uU2l6ZT0iJHt0aGlzLnNpemUgKiAwLjV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgYH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0RyYWdnaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgc3R5bGU9Im9wYWNpdHk6IDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcC16b25lLXRleHQiPgogICAgICAgICAgICAgICAgICBEcm9wIGltYWdlIGhlcmUKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMudmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5hbGxvd1VwbG9hZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im92ZXJsYXktYnV0dG9uIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMub3Blbk1vZGFsKCk7CiAgICAgIH19IHRpdGxlPSJDaGFuZ2UgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpwZW5jaWwiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93RGVsZXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMuZGVsZXRlUGljdHVyZSgpOwogICAgICB9fSB0aXRsZT0iRGVsZXRlIHBpY3R1cmUiPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6dHJhc2gyIiBpY29uU2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctb3ZlcmxheSBzaG93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxpbnB1dAogICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgIGNsYXNzPSJoaWRkZW4taW5wdXQiCiAgICAgICAgICBhY2NlcHQ9IiR7dGhpcy5hY2NlcHRlZEZvcm1hdHMuam9pbigiLCIpfSIKICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgLz4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmFsbG93VXBsb2FkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5oaWRkZW4taW5wdXQiKTsKICAgICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVGaWxlU2VsZWN0KGV2ZW50KSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKGZpbGUpIHsKICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpOwogICAgICB9CiAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICB9CiAgICBoYW5kbGVEcmFnT3ZlcihldmVudCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5hbGxvd1VwbG9hZCkgewogICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVEcm9wKGV2ZW50KSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5hbGxvd1VwbG9hZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSkgewogICAgICAgIHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGUpIHsKICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZToiLCBmaWxlLnNpemUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NDIgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgYXdhaXQgdGhpcy5vcGVuTW9kYWwoYmFzZTY0Mik7CiAgICAgIH07CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfQogICAgYXN5bmMgb3Blbk1vZGFsKGluaXRpYWxJbWFnZSkgewogICAgICBjb25zdCBpbWFnZVRvRWRpdCA9IGluaXRpYWxJbWFnZSB8fCB0aGlzLnZhbHVlOwogICAgICBpZiAoIWltYWdlVG9FZGl0KSB7CiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpOwogICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSA9IG5ldyBQcm9maWxlUGljdHVyZU1vZGFsKCk7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zaGFwZSA9IHRoaXMuc2hhcGU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbml0aWFsSW1hZ2UgPSBpbWFnZVRvRWRpdDsKICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLm91dHB1dFNpemUgPSB0aGlzLm91dHB1dFNpemU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRRdWFsaXR5ID0gdGhpcy5vdXRwdXRRdWFsaXR5OwogICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcigic2F2ZSIsIChldmVudCkgPT4gewogICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5kZXRhaWwuY3JvcHBlZEltYWdlOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpOwogICAgfQogICAgZGVsZXRlUGljdHVyZSgpIHsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90cygpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGRmID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICBsZXQgX3BkZlVybF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3BkZlVybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU2Nyh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGYyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBwZGZVcmwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZGZVcmwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgodGhpcywgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgcGRmSnNSZWFkeTsKICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgIC8vIHR5cGVvZiBwZGZqc1R5cGVzOwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghRGVlc1BkZjIucGRmSnNSZWFkeSkgewogICAgICAgIGNvbnN0IHBkZkpzUmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgRGVlc1BkZjIucGRmSnNSZWFkeSA9IHBkZkpzUmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIERlZXNQZGYyLnBkZmpzTGliID0gYXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7CiAgICAgICAgRGVlc1BkZjIucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgICAgIHBkZkpzUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1BkZjIucGRmSnNSZWFkeTsKICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCgpOwogICAgfQogICAgYXN5bmMgZGlzcGxheUNvbnRlbnQoKSB7CiAgICAgIGF3YWl0IERlZXNQZGYyLnBkZkpzUmVhZHk7CiAgICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gRGVlc1BkZjIucGRmanNMaWIuZ2V0RG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICBsb2FkaW5nVGFzay5wcm9taXNlLnRoZW4oKHBkZikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgbG9hZGVkIik7CiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IDE7CiAgICAgICAgcGRmLmdldFBhZ2UocGFnZU51bWJlcikudGhlbigocGFnZSkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IDEwOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpOwogICAgICAgICAgY29uc3QgY29udGV4dDIgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiUGFnZSByZW5kZXJlZCIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0sIChyZWFzb24pID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbik7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhlIGdsb2JhbCBjb250ZXh0IG1lbnUgaGFuZGxlcgogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGYyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL1BkZk1hbmFnZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFBkZk1hbmFnZXIgPSBjbGFzcyB7CiAgc3RhdGljIHBkZmpzTGliOwogIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlOwogIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCkgewogICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMucGRmanNMaWIgPSBhd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKTsKICAgIHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgfQogIHN0YXRpYyBhc3luYyBsb2FkRG9jdW1lbnQodXJsKSB7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTsKICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudCh1cmwpOwogICAgY29uc3QgZG9jdW1lbnQ0ID0gYXdhaXQgbG9hZGluZ1Rhc2sucHJvbWlzZTsKICAgIHJldHVybiBkb2N1bWVudDQ7CiAgfQogIHN0YXRpYyByZWxlYXNlRG9jdW1lbnQoX3VybCkgewogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL0NhbnZhc1Bvb2wuanMKdmFyIENhbnZhc1Bvb2wgPSBjbGFzcyB7CiAgc3RhdGljIHBvb2wgPSBbXTsKICBzdGF0aWMgbWF4UG9vbFNpemUgPSAyMDsKICBzdGF0aWMgTUlOX0NBTlZBU19TSVpFID0gMjU2OwogIHN0YXRpYyBNQVhfQ0FOVkFTX1NJWkUgPSA0MDk2OwogIHN0YXRpYyBhY3F1aXJlKHdpZHRoLCBoZWlnaHQpIHsKICAgIGNvbnN0IHN1aXRhYmxlID0gdGhpcy5wb29sLmZpbmQoKGl0ZW0pID0+ICFpdGVtLmluVXNlICYmIGl0ZW0uY2FudmFzLndpZHRoID49IHdpZHRoICYmIGl0ZW0uY2FudmFzLmhlaWdodCA+PSBoZWlnaHQgJiYgaXRlbS5jYW52YXMud2lkdGggPD0gd2lkdGggKiAxLjUgJiYgaXRlbS5jYW52YXMuaGVpZ2h0IDw9IGhlaWdodCAqIDEuNSk7CiAgICBpZiAoc3VpdGFibGUpIHsKICAgICAgc3VpdGFibGUuaW5Vc2UgPSB0cnVlOwogICAgICBzdWl0YWJsZS5sYXN0VXNlZCA9IERhdGUubm93KCk7CiAgICAgIHN1aXRhYmxlLmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICBzdWl0YWJsZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBzdWl0YWJsZS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICByZXR1cm4gc3VpdGFibGU7CiAgICB9CiAgICBpZiAodGhpcy5wb29sLmxlbmd0aCA8IHRoaXMubWF4UG9vbFNpemUpIHsKICAgICAgY29uc3QgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICBhbHBoYTogdHJ1ZSwKICAgICAgICBkZXN5bmNocm9uaXplZDogdHJ1ZQogICAgICB9KTsKICAgICAgY2FudmFzMi53aWR0aCA9IE1hdGgubWluKE1hdGgubWF4KHdpZHRoLCB0aGlzLk1JTl9DQU5WQVNfU0laRSksIHRoaXMuTUFYX0NBTlZBU19TSVpFKTsKICAgICAgY2FudmFzMi5oZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChoZWlnaHQsIHRoaXMuTUlOX0NBTlZBU19TSVpFKSwgdGhpcy5NQVhfQ0FOVkFTX1NJWkUpOwogICAgICBjb25zdCBwb29sZWRDYW52YXMgPSB7CiAgICAgICAgY2FudmFzOiBjYW52YXMyLAogICAgICAgIGN0eDogY3R4MiwKICAgICAgICBpblVzZTogdHJ1ZSwKICAgICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKQogICAgICB9OwogICAgICB0aGlzLnBvb2wucHVzaChwb29sZWRDYW52YXMpOwogICAgICByZXR1cm4gcG9vbGVkQ2FudmFzOwogICAgfQogICAgY29uc3QgbHJ1ID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNvcnQoKGE1LCBiNSkgPT4gYTUubGFzdFVzZWQgLSBiNS5sYXN0VXNlZClbMF07CiAgICBpZiAobHJ1KSB7CiAgICAgIGxydS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgbHJ1LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGxydS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICBscnUuaW5Vc2UgPSB0cnVlOwogICAgICBscnUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gbHJ1OwogICAgfQogICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgIHJldHVybiB7CiAgICAgIGNhbnZhcywKICAgICAgY3R4LAogICAgICBpblVzZTogdHJ1ZSwKICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCkKICAgIH07CiAgfQogIHN0YXRpYyByZWxlYXNlKHBvb2xlZENhbnZhcykgewogICAgaWYgKHRoaXMucG9vbC5pbmNsdWRlcyhwb29sZWRDYW52YXMpKSB7CiAgICAgIHBvb2xlZENhbnZhcy5pblVzZSA9IGZhbHNlOwogICAgICBwb29sZWRDYW52YXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBwb29sZWRDYW52YXMuY2FudmFzLndpZHRoLCBwb29sZWRDYW52YXMuY2FudmFzLmhlaWdodCk7CiAgICB9CiAgfQogIHN0YXRpYyByZWxlYXNlQWxsKCkgewogICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucG9vbCkgewogICAgICBpdGVtLmluVXNlID0gZmFsc2U7CiAgICAgIGl0ZW0uY3R4LmNsZWFyUmVjdCgwLCAwLCBpdGVtLmNhbnZhcy53aWR0aCwgaXRlbS5jYW52YXMuaGVpZ2h0KTsKICAgIH0KICB9CiAgc3RhdGljIGRlc3Ryb3koKSB7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wb29sKSB7CiAgICAgIGl0ZW0uY2FudmFzLndpZHRoID0gMDsKICAgICAgaXRlbS5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIH0KICAgIHRoaXMucG9vbCA9IFtdOwogIH0KICBzdGF0aWMgZ2V0U3RhdHMoKSB7CiAgICByZXR1cm4gewogICAgICBwb29sU2l6ZTogdGhpcy5wb29sLmxlbmd0aCwKICAgICAgbWF4UG9vbFNpemU6IHRoaXMubWF4UG9vbFNpemUsCiAgICAgIGluVXNlOiB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmluVXNlKS5sZW5ndGgsCiAgICAgIGF2YWlsYWJsZTogdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLmxlbmd0aAogICAgfTsKICB9CiAgc3RhdGljIGFkanVzdFBvb2xTaXplKG5ld1NpemUpIHsKICAgIGlmIChuZXdTaXplIDwgdGhpcy5wb29sLmxlbmd0aCkgewogICAgICBjb25zdCB0b1JlbW92ZSA9IHRoaXMucG9vbC5sZW5ndGggLSBuZXdTaXplOwogICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNsaWNlKDAsIHRvUmVtb3ZlKTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlbW92ZWQpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLnBvb2wuaW5kZXhPZihpdGVtKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucG9vbC5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMubWF4UG9vbFNpemUgPSBuZXdTaXplOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL3V0aWxzLmpzCmZ1bmN0aW9uIGRlYm91bmNlMyhmdW5jLCB3YWl0MikgewogIGxldCB0aW1lb3V0MjsKICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZWRGdW5jdGlvbiguLi5hcmdzKSB7CiAgICBjb25zdCBsYXRlciA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgZnVuYyguLi5hcmdzKTsKICAgIH07CiAgICBjbGVhclRpbWVvdXQodGltZW91dDIpOwogICAgdGltZW91dDIgPSB3aW5kb3cuc2V0VGltZW91dChsYXRlciwgd2FpdDIpOwogIH07Cn0KZnVuY3Rpb24gdGhyb3R0bGUyKGZ1bmMsIGxpbWl0KSB7CiAgbGV0IGluVGhyb3R0bGU7CiAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykgewogICAgaWYgKCFpblRocm90dGxlKSB7CiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICAgIGluVGhyb3R0bGUgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCgpID0+IGluVGhyb3R0bGUgPSBmYWxzZSwgbGltaXQpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IDApCiAgICByZXR1cm4gIjAgQnl0ZXMiOwogIGNvbnN0IGs0ID0gMTAyNDsKICBjb25zdCBzaXplcyA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgcmV0dXJuIE1hdGgucm91bmQoYnl0ZXMgLyBNYXRoLnBvdyhrNCwgaTExKSAqIDEwMCkgLyAxMDAgKyAiICIgKyBzaXplc1tpMTFdOwp9CmZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlbGVtZW50NCwgbWFyZ2luID0gMCkgewogIGNvbnN0IHJlY3QgPSBlbGVtZW50NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICByZXR1cm4gcmVjdC50b3AgPj0gLW1hcmdpbiAmJiByZWN0LmxlZnQgPj0gLW1hcmdpbiAmJiByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICsgbWFyZ2luICYmIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgKyBtYXJnaW47Cn0KdmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IGNsYXNzIHsKICBzdGF0aWMgbWFya3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHN0YXRpYyBtZWFzdXJlcyA9IFtdOwogIHN0YXRpYyBtYXJrKG5hbWUpIHsKICAgIHRoaXMubWFya3Muc2V0KG5hbWUsIHBlcmZvcm1hbmNlLm5vdygpKTsKICB9CiAgc3RhdGljIG1lYXN1cmUobmFtZSwgc3RhcnRNYXJrKSB7CiAgICBjb25zdCBzdGFydCA9IHRoaXMubWFya3MuZ2V0KHN0YXJ0TWFyayk7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0OwogICAgICB0aGlzLm1lYXN1cmVzLnB1c2goeyBuYW1lLCBkdXJhdGlvbiB9KTsKICAgICAgdGhpcy5tYXJrcy5kZWxldGUoc3RhcnRNYXJrKTsKICAgICAgcmV0dXJuIGR1cmF0aW9uOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIHN0YXRpYyBnZXRSZXBvcnQoKSB7CiAgICBjb25zdCByZXBvcnQgPSB7CiAgICAgIG1lYXN1cmVzOiBbLi4udGhpcy5tZWFzdXJlc10sCiAgICAgIGF2ZXJhZ2VzOiB7fQogICAgfTsKICAgIGNvbnN0IGdyb3VwZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBtZWFzdXJlIG9mIHRoaXMubWVhc3VyZXMpIHsKICAgICAgaWYgKCFncm91cGVkLmhhcyhtZWFzdXJlLm5hbWUpKSB7CiAgICAgICAgZ3JvdXBlZC5zZXQobWVhc3VyZS5uYW1lLCBbXSk7CiAgICAgIH0KICAgICAgZ3JvdXBlZC5nZXQobWVhc3VyZS5uYW1lKS5wdXNoKG1lYXN1cmUuZHVyYXRpb24pOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgZHVyYXRpb25zXSBvZiBncm91cGVkKSB7CiAgICAgIHJlcG9ydC5hdmVyYWdlc1tuYW1lXSA9IGR1cmF0aW9ucy5yZWR1Y2UoKGE1LCBiNSkgPT4gYTUgKyBiNSwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlcG9ydDsKICB9CiAgc3RhdGljIGNsZWFyKCkgewogICAgdGhpcy5tYXJrcy5jbGVhcigpOwogICAgdGhpcy5tZWFzdXJlcyA9IFtdOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHByZXZpZXdTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBoZWlnaHQ6IDI2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTglKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAucHJldmlldy1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnByZXZpZXctb3ZlcmxheSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLnByZXZpZXctc3RhY2sgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5wcmV2aWV3LXN0YWNrLm5vbi1hNCB7CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICB9CgogICAgLnByZXZpZXctY2FudmFzIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBhdXRvOwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5ub24tYTQgLnByZXZpZXctY2FudmFzIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCAiaHNsKDIxNyAyNSUgMjQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICBsZWZ0OiA4cHg7CiAgICAgIHJpZ2h0OiA4cHg7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTIpIiwgImhzbCgyMTUgMjAlIDEyJSAvIDAuOTIpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogNnB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIHotaW5kZXg6IDEwOwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1wYWdlcyB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCAicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB6LWluZGV4OiAyMDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LW92ZXJsYXkgc3BhbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LWxvYWRpbmcsCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1sb2FkaW5nIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgOTglKSIsICJoc2woMCA2MiUgMjAlKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAucHJldmlldy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wcmV2aWV3LWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAucHJldmlldy1wYWdlLWluZGljYXRvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC43KSIsICJoc2woMCAwJSAxMDAlIC8gMC45KSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJ3aGl0ZSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgIH0KICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CiAgICB9CgogICAgLyogUmVzcG9uc2l2ZSBzaXplcyAqLwogICAgOmhvc3QoW3NpemU9InNtYWxsIl0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgaGVpZ2h0OiAxOTVweDsKICAgIH0KCiAgICA6aG9zdChbc2l6ZT0ibGFyZ2UiXSkgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDI1MHB4OwogICAgICBoZWlnaHQ6IDMyNXB4OwogICAgfQoKICAgIC8qIEdyaWQgb3B0aW1pemF0aW9ucyAqLwogICAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtncmlkLW1vZGVdKSAucHJldmlldy1jYW52YXMgewogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW8gPSAoKSA9PiB7CiAgY29uc3Qgc2FtcGxlUGRmcyA9IFsKICAgICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiLAogICAgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICBdOwogIGNvbnN0IGdlbmVyYXRlR3JpZEl0ZW1zID0gKGNvdW50MikgPT4gewogICAgY29uc3QgaXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGNvdW50MjsgaTExKyspIHsKICAgICAgY29uc3QgcGRmVXJsID0gc2FtcGxlUGRmc1tpMTEgJSBzYW1wbGVQZGZzLmxlbmd0aF07CiAgICAgIGl0ZW1zLnB1c2goYjJgCiAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgIHBkZlVybD0iJHtwZGZVcmx9IgogICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICBzdGFja09mZnNldD0iNiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgIGdyaWQtbW9kZQogICAgICAgICAgQHBkZi1wcmV2aWV3LWNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgUHJldmlldyBjbGlja2VkOiIsIGUxMS5kZXRhaWwpOwogICAgICAgIGFsZXJ0KGBQREYgY2xpY2tlZDogJHtlMTEuZGV0YWlsLnBhZ2VDb3VudH0gcGFnZXNgKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICBgKTsKICAgIH0KICAgIHJldHVybiBpdGVtczsKICB9OwogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgfQoKICAgICAgLnBlcmZvcm1hbmNlLXN0YXRzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpbmdsZSBQREYgUHJldmlldyB3aXRoIFN0YWNrZWQgUGFnZXM8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5EaWZmZXJlbnQgU2l6ZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPlNtYWxsOjwvZGl2PgogICAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgICAgICBtYXhQYWdlcz0iMiIKICAgICAgICAgICAgc3RhY2tPZmZzZXQ9IjYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy1wZGYtcHJldmlldwogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSI4IgogICAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxhYmVsIj5MYXJnZTo8L2Rpdj4KICAgICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjQiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSIxMCIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5Ob24tQ2xpY2thYmxlIFByZXZpZXc8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9ImZhbHNlIgogICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+UGVyZm9ybWFuY2UgR3JpZCAtIDUwIFBERnMgd2l0aCBMYXp5IExvYWRpbmc8L2gzPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICBUaGlzIGdyaWQgZGVtb25zdHJhdGVzIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggNTAgUERGIHByZXZpZXdzLgogICAgICAgICAgU2Nyb2xsIHRvIHNlZSBsYXp5IGxvYWRpbmcgaW4gYWN0aW9uIC0gcHJldmlld3MgcmVuZGVyIG9ubHkgd2hlbiB2aXNpYmxlLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7Z2VuZXJhdGVHcmlkSXRlbXMoNTApfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmb3JtYW5jZS1zdGF0cyI+CiAgICAgICAgICA8aDQ+UGVyZm9ybWFuY2UgRmVhdHVyZXM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkxhenkgTG9hZGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEVuYWJsZWQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5DYW52YXMgUG9vbGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEFjdGl2ZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPk1lbW9yeSBNYW5hZ2VtZW50PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgT3B0aW1pemVkPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW50ZXJzZWN0aW9uIE9ic2VydmVyPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4yMDBweCBtYXJnaW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXBkZi1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcGRmVXJsX2RlY29yYXRvcnM7CiAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGlja2FibGVfZGVjb3JhdG9yczsKICBsZXQgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsaWNrYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZUNvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZGVjb3JhdG9yczsKICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0E0Rm9ybWF0X2RlY29yYXRvcnM7CiAgbGV0IF9pc0E0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9jdXJyZW50UHJldmlld1BhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9jbGlja2FibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfcGFnZUNvdW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9yZW5kZXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY3VycmVudFByZXZpZXdQYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRQcmV2aWV3UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFByZXZpZXdQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRQcmV2aWV3UGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFByZXZpZXdQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQcmV2aWV3UGFnZV9pbml0aWFsaXplcnMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY2xpY2thYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNsaWNrYWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY2xpY2thYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNsaWNrYWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2xpY2thYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGFnZUNvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFnZUNvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBhZ2VDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZUNvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfbG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgodGhpcywgbnVsbCwgX3JlbmRlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlbmRlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZW5kZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVuZGVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBfcmVuZGVyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvcl9pbml0aWFsaXplcnMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY4KHRoaXMsIG51bGwsIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSG92ZXJpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNIb3ZlcmluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfaXNBNEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0E0Rm9ybWF0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0E0Rm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQTRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzQTRGb3JtYXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNBNEZvcm1hdF9pbml0aWFsaXplcnMsIF9pc0E0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgc3RhdGljIHN0eWxlcyA9IHByZXZpZXdTdHlsZXM7CiAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgcGRmVXJsKCkgewogICAgICByZXR1cm4gdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGRmVXJsKHZhbHVlMikgewogICAgICB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgY3VycmVudFByZXZpZXdQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFByZXZpZXdQYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgY2xpY2thYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2xpY2thYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2xpY2thYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcGFnZUNvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZUNvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZUNvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcGFnZUNvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgbG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlbmRlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZW5kZXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX3JlbmRlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVycm9yKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgaXNBNEZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzQTRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0E0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZW5kZXJQYWdlc1Rhc2sgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgcmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgIG9ic2VydmVyOwogICAgcGRmRG9jdW1lbnQ7CiAgICBjYW52YXNlcyA9IFtdOwogICAgcmVzaXplT2JzZXJ2ZXI7CiAgICBwcmV2aWV3Q29udGFpbmVyID0gbnVsbDsKICAgIHN0YWNrRWxlbWVudCA9IG51bGw7CiAgICBsb2FkZWRQZGZVcmwgPSBudWxsOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciAke3RoaXMubG9hZGluZyA/ICJsb2FkaW5nIiA6ICIifSAke3RoaXMuZXJyb3IgPyAiZXJyb3IiIDogIiJ9ICR7dGhpcy5jbGlja2FibGUgPyAiY2xpY2thYmxlIiA6ICIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5oYW5kbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkxvYWRpbmcgcHJldmlldy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlWCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctdGV4dCI+RmFpbGVkIHRvIGxvYWQgUERGPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgICR7IXRoaXMubG9hZGluZyAmJiAhdGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1zdGFjayAkeyF0aGlzLmlzQTRGb3JtYXQgPyAibm9uLWE0IiA6ICIifSI+CiAgICAgICAgICAgIDxjYW52YXMKICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICAgICAgZGF0YS1wYWdlPSIke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfSIKICAgICAgICAgICAgPjwvY2FudmFzPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDEgJiYgdGhpcy5pc0hvdmVyaW5nID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFnZS1pbmRpY2F0b3IiPgogICAgICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDAgJiYgIXRoaXMuaXNIb3ZlcmluZyA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWluZm8iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJldmlldy1wYWdlcyI+JHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQgPiAxID8gInMiIDogIiJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RXllIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVNb3VzZUVudGVyKCkgewogICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgfQogICAgaGFuZGxlTW91c2VMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSAhPT0gMSkgewogICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICB2b2lkIHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgIGlmICghdGhpcy5pc0hvdmVyaW5nIHx8IHRoaXMucGFnZUNvdW50IDw9IDEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgeDMgPSBlMTEuY2xpZW50WCAtIHJlY3QubGVmdDsKICAgICAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeDMgLyB3aWR0aCkpOwogICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKHBlcmNlbnRhZ2UgKiB0aGlzLnBhZ2VDb3VudCkgfHwgMTsKICAgICAgaWYgKG5ld1BhZ2UgIT09IHRoaXMuY3VycmVudFByZXZpZXdQYWdlKSB7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSBuZXdQYWdlOwogICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICBpZiAodGhpcy5vYnNlcnZlcikgewogICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICB9CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgIH0KICAgIHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgcm9vdDogbnVsbCwKICAgICAgICByb290TWFyZ2luOiAiMjAwcHgiLAogICAgICAgIHRocmVzaG9sZDogMC4wMQogICAgICB9OwogICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRocm90dGxlMigoZW50cmllcykgPT4gewogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIHRoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIDEwMCksIG9wdGlvbnMpOwogICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcyk7CiAgICB9CiAgICBhc3luYyBsb2FkQW5kUmVuZGVyUHJldmlldygpIHsKICAgICAgaWYgKHRoaXMucmVuZGVyZWQgfHwgdGhpcy5sb2FkaW5nKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICBQZXJmb3JtYW5jZU1vbml0b3IubWFyayhgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IGF3YWl0IFBkZk1hbmFnZXIubG9hZERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IHRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSAxOwogICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gdGhpcy5wZGZVcmw7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBkdXJhdGlvbiA9IFBlcmZvcm1hbmNlTW9uaXRvci5tZWFzdXJlKGBwcmV2aWV3LXJlbmRlci0ke3RoaXMucGRmVXJsfWAsIGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIHByZXZpZXcgcmVuZGVyZWQgaW4gJHtkdXJhdGlvbn1tc2ApOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiBwcmV2aWV3OiIsIGVycm9yKTsKICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2NoZWR1bGVSZW5kZXJQYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlclBhZ2VzVGFzaykgewogICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhZ2VzVGFzazsKICAgICAgfQogICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHByZXZpZXcgcGFnZXM6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IG51bGw7CiAgICAgICAgaWYgKHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQpIHsKICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFnZXNUYXNrOwogICAgfQogICAgYXN5bmMgcGVyZm9ybVJlbmRlclBhZ2VzKCkgewogICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpOwogICAgICBpZiAoIWNhbnZhcykgewogICAgICAgIGNvbnNvbGUud2FybigiUHJldmlldyBjYW52YXMgbm90IGZvdW5kIGluIERPTSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCB9ID0gdGhpcy5nZXRBdmFpbGFibGVTaXplKCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcGFnZU51bSA9IHRoaXMuY3VycmVudFByZXZpZXdQYWdlOwogICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgY29uc3QgaW5pdGlhbFZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gaW5pdGlhbFZpZXdwb3J0LmhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC53aWR0aDsKICAgICAgICBjb25zdCBhNFBvcnRyYWl0UmF0aW8gPSAxLjQxNDsKICAgICAgICBjb25zdCBhNExhbmRzY2FwZVJhdGlvID0gMC43MDc7CiAgICAgICAgY29uc3QgbGV0dGVyUG9ydHJhaXRSYXRpbyA9IDEuMjk0OwogICAgICAgIGNvbnN0IGxldHRlckxhbmRzY2FwZVJhdGlvID0gMC43NzM7CiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMC4wNTsKICAgICAgICBjb25zdCBpc0E0UG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGE0UG9ydHJhaXRSYXRpbykgPCBhNFBvcnRyYWl0UmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgY29uc3QgaXNBNExhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRMYW5kc2NhcGVSYXRpbykgPCBhNExhbmRzY2FwZVJhdGlvICogdG9sZXJhbmNlOwogICAgICAgIGNvbnN0IGlzTGV0dGVyUG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGxldHRlclBvcnRyYWl0UmF0aW8pIDwgbGV0dGVyUG9ydHJhaXRSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICBjb25zdCBpc0xldHRlckxhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gbGV0dGVyTGFuZHNjYXBlUmF0aW8pIDwgbGV0dGVyTGFuZHNjYXBlUmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gaXNBNFBvcnRyYWl0IHx8IGlzQTRMYW5kc2NhcGUgfHwgaXNMZXR0ZXJQb3J0cmFpdCB8fCBpc0xldHRlckxhbmRzY2FwZTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIGFzcGVjdCByYXRpbzogJHthc3BlY3RSYXRpby50b0ZpeGVkKDMpfSwgc3RhbmRhcmQgZm9ybWF0OiAke3RoaXMuaXNBNEZvcm1hdH1gKTsKICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlV2lkdGggOiBhdmFpbGFibGVXaWR0aCAtIDI0OwogICAgICAgIGNvbnN0IGFkanVzdGVkSGVpZ2h0ID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlSGVpZ2h0IDogYXZhaWxhYmxlSGVpZ2h0IC0gMjQ7CiAgICAgICAgY29uc3Qgc2NhbGVYID0gYWRqdXN0ZWRXaWR0aCA+IDAgPyBhZGp1c3RlZFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoIDogMDsKICAgICAgICBjb25zdCBzY2FsZVkgPSBhZGp1c3RlZEhlaWdodCA+IDAgPyBhZGp1c3RlZEhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC5oZWlnaHQgOiAwOwogICAgICAgIGNvbnN0IGJhc2VTY2FsZSA9IE1hdGgubWluKHNjYWxlWCB8fCAwLjUsIHNjYWxlWSB8fCBzY2FsZVggfHwgMC41KTsKICAgICAgICBjb25zdCByZW5kZXJTY2FsZSA9IE1hdGgubWluKGJhc2VTY2FsZSAqIDIsIDMpOwogICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlbmRlclNjYWxlKSB8fCByZW5kZXJTY2FsZSA8PSAwKSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogcmVuZGVyU2NhbGUgfSk7CiAgICAgICAgY29uc3QgcG9vbGVkQ2FudmFzID0gQ2FudmFzUG9vbC5hY3F1aXJlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpOwogICAgICAgIHRoaXMuY2FudmFzZXMucHVzaChwb29sZWRDYW52YXMpOwogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBwb29sZWRDYW52YXMuY3R4LAogICAgICAgICAgdmlld3BvcnQKICAgICAgICB9OwogICAgICAgIGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDsKICAgICAgICBjb25zdCBkaXNwbGF5V2lkdGggPSBhZGp1c3RlZFdpZHRoOwogICAgICAgIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQgLyB2aWV3cG9ydC53aWR0aCAqIGFkanVzdGVkV2lkdGg7CiAgICAgICAgaWYgKGRpc3BsYXlIZWlnaHQgPiBhZGp1c3RlZEhlaWdodCkgewogICAgICAgICAgY29uc3QgYWx0RGlzcGxheUhlaWdodCA9IGFkanVzdGVkSGVpZ2h0OwogICAgICAgICAgY29uc3QgYWx0RGlzcGxheVdpZHRoID0gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQgKiBhZGp1c3RlZEhlaWdodDsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2FsdERpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7YWx0RGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2Rpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgICAgICAgIGN0eC5kcmF3SW1hZ2UocG9vbGVkQ2FudmFzLmNhbnZhcywgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHBhZ2UuY2xlYW51cCgpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgcGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyQ2FudmFzZXMoKSB7CiAgICAgIGZvciAoY29uc3QgcG9vbGVkQ2FudmFzIG9mIHRoaXMuY2FudmFzZXMpIHsKICAgICAgICBDYW52YXNQb29sLnJlbGVhc2UocG9vbGVkQ2FudmFzKTsKICAgICAgfQogICAgICB0aGlzLmNhbnZhc2VzID0gW107CiAgICB9CiAgICBjbGVhbnVwKCkgewogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgaWYgKHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudCh0aGlzLmxvYWRlZFBkZlVybCA/PyB0aGlzLnBkZlVybCk7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZW5kZXJQYWdlc1F1ZXVlZCA9IGZhbHNlOwogICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaXNBNEZvcm1hdCA9IHRydWU7CiAgICAgIHRoaXMucHJldmlld0NvbnRhaW5lciA9IG51bGw7CiAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgdGhpcy5sb2FkZWRQZGZVcmwgPSBudWxsOwogICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB0aGlzLmVycm9yID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVDbGljaygpIHsKICAgICAgaWYgKCF0aGlzLmNsaWNrYWJsZSkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInBkZi1wcmV2aWV3LWNsaWNrIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgcGRmVXJsOiB0aGlzLnBkZlVybCwKICAgICAgICAgIHBhZ2VDb3VudDogdGhpcy5wYWdlQ291bnQKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicGRmVXJsIikgJiYgdGhpcy5wZGZVcmwpIHsKICAgICAgICBjb25zdCBwcmV2aW91c1VybCA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgicGRmVXJsIik7CiAgICAgICAgaWYgKHByZXZpb3VzVXJsKSB7CiAgICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudChwcmV2aW91c1VybCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgaWYgKHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIHJlY3QuYm90dG9tID4gMCkgewogICAgICAgICAgICB0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICBpZiAodGhpcy5jbGlja2FibGUpIHsKICAgICAgICBpdGVtcy5wdXNoKHsKICAgICAgICAgIG5hbWU6ICJWaWV3IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpFeWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgfQogICAgICBpdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiT3BlbiBQREYgaW4gTmV3IFRhYiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RXh0ZXJuYWxMaW5rIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgfQogICAgICB9LCB7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIG5hbWU6ICJEb3dubG9hZCBQREYiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgbGluazMuaHJlZiA9IHRoaXMucGRmVXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5wYWdlQ291bnQgPiAwKSB7CiAgICAgICAgaXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogYCR7dGhpcy5wYWdlQ291bnR9IHBhZ2Uke3RoaXMucGFnZUNvdW50ID4gMSA/ICJzIiA6ICIifWAsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBpdGVtczsKICAgIH0KICAgIGNhY2hlRWxlbWVudHMoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5wcmV2aWV3Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1jb250YWluZXIiKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc3RhY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5zdGFja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIik7CiAgICAgIH0KICAgIH0KICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyIHx8IHRoaXMucmVzaXplT2JzZXJ2ZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZW5kZXJlZCAmJiB0aGlzLnBkZkRvY3VtZW50ICYmICF0aGlzLmxvYWRpbmcpIHsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZ2V0QXZhaWxhYmxlU2l6ZSgpIHsKICAgICAgaWYgKCF0aGlzLnN0YWNrRWxlbWVudCkgewogICAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1zdGFjayIpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYXZhaWxhYmxlV2lkdGg6IDIwMCwKICAgICAgICAgIC8vIEZ1bGwgY29udGFpbmVyIHdpZHRoCiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQ6IDI2MAogICAgICAgICAgLy8gRnVsbCBjb250YWluZXIgaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5zdGFja0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgMCkgfHwgMjAwOwogICAgICBjb25zdCBhdmFpbGFibGVIZWlnaHQgPSBNYXRoLm1heChyZWN0LmhlaWdodCwgMCkgfHwgMjYwOwogICAgICByZXR1cm4geyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0IH07CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciB2aWV3ZXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7CiAgICB9CgogICAgLnBkZi12aWV3ZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnRvb2xiYXIgewogICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA0cHg7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5wYWdlLWluZm8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnBhZ2UtaW5wdXQgewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCAiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC5wYWdlLWlucHV0OmZvY3VzIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC5wYWdlLXNlcGFyYXRvciB7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNjAlKSIsICJoc2woMjE1IDE2JSA1MCUpIil9OwogICAgfQoKICAgIC56b29tLWxldmVsIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAudmlld2VyLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAuc2lkZWJhciB7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZSB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQoKICAgIC5zaWRlYmFyLWNvbnRlbnQgewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC50aHVtYm5haWwgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgLyogRGVmYXVsdCBBNCBhc3BlY3QgcmF0aW8gKDI5N21tIC8gMjEwbW0g4omIIDEuNDE0KSAqLwogICAgICBtaW4taGVpZ2h0OiBjYWxjKDE3NnB4ICogMS40MTQpOwogICAgfQoKICAgIC50aHVtYm5haWw6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB9CgogICAgLnRodW1ibmFpbDpob3ZlciB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAyNSUgMzUlKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLmFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLWNhbnZhcyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CgogICAgLnRodW1ibmFpbC1udW1iZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogNHB4OwogICAgICByaWdodDogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAudmlld2VyLW1haW4gewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmxvYWRpbmctY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZ2FwOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAubG9hZGluZy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wYWdlcy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDIwcHg7CiAgICB9CgogICAgLnBhZ2Utd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuY2FudmFzLWNvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICAucGFnZS1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC5wZGYtdmlld2VyLndpdGgtc2lkZWJhciAudmlld2VyLW1haW4gewogICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vMiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlZpZXdlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGRmLXZpZXdlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BkZlVybF9kZWNvcmF0b3JzOwogIGxldCBfcGRmVXJsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbFBhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZGVjb3JhdG9yczsKICBsZXQgX2luaXRpYWxab29tX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NpZGViYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RvdGFsUGFnZXNfZGVjb3JhdG9yczsKICBsZXQgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbFBhZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFpvb21faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfbG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RvY3VtZW50SWRfZGVjb3JhdG9yczsKICBsZXQgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90aHVtYm5haWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BkZlZpZXdlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2luaXRpYWxab29tX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF90b3RhbFBhZ2VzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY3VycmVudFpvb21fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2RvY3VtZW50SWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9wYWdlRGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfaW5pdGlhbFBhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbFBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluaXRpYWxQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxQYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsUGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9pbml0aWFsWm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0aWFsWm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRpYWxab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgX2luaXRpYWxab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUb29sYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VG9vbGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VG9vbGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1Rvb2xiYXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rvb2xiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NpZGViYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dTaWRlYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTaWRlYmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2lkZWJhciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50UGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFBhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgX2N1cnJlbnRQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3RvdGFsUGFnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWxQYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidG90YWxQYWdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50b3RhbFBhZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbFBhZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50Wm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9kb2N1bWVudElkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvY3VtZW50SWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvY3VtZW50SWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZG9jdW1lbnRJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZG9jdW1lbnRJZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb2N1bWVudElkX2luaXRpYWxpemVycywgX2RvY3VtZW50SWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfdGh1bWJuYWlsRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHVtYm5haWxEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHVtYm5haWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRodW1ibmFpbERhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRodW1ibmFpbERhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3BhZ2VEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwYWdlRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWdlRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZURhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtbzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlBERiI7CiAgICBzdGF0aWMgc3R5bGVzID0gdmlld2VyU3R5bGVzOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHBkZlVybCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBpbml0aWFsUGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbFBhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgImF1dG8iKSk7CiAgICBnZXQgaW5pdGlhbFpvb20oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRpYWxab29tKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX3Nob3dTaWRlYmFyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2lkZWJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NpZGViYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50UGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90b3RhbFBhZ2VzX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IHRvdGFsUGFnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdG90YWxQYWdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxQYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRab29tKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50Wm9vbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9sb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBsb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGRvY3VtZW50SWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZG9jdW1lbnRJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZG9jdW1lbnRJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdGh1bWJuYWlsRGF0YSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aHVtYm5haWxEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0aHVtYm5haWxEYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHBhZ2VEYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWdlRGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHBkZkRvY3VtZW50ID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgcmVuZGVyU3RhdGUgPSAiaWRsZSI7CiAgICByZW5kZXJBYm9ydENvbnRyb2xsZXIgPSBudWxsOwogICAgcGFnZVJlbmRlcmluZyA9IGZhbHNlOwogICAgcGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgdGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgIHBhZ2VSZW5kZXJUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjYW52YXM7CiAgICBjdHg7CiAgICB2aWV3ZXJNYWluID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7CiAgICBzY3JvbGxUaHJvdHRsZVRpbWVvdXQ7CiAgICB2aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgIHZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgIE1BTlVBTF9NSU5fWk9PTSA9IDAuNTsKICAgIE1BTlVBTF9NQVhfWk9PTSA9IDM7CiAgICBBQlNPTFVURV9NSU5fWk9PTSA9IDAuMTsKICAgIEFCU09MVVRFX01BWF9aT09NID0gNDsKICAgIFBBR0VfR0FQID0gMjA7CiAgICBSRU5ERVJfQlVGRkVSID0gMzsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBkZi12aWV3ZXIgJHt0aGlzLnNob3dTaWRlYmFyID8gIndpdGgtc2lkZWJhciIgOiAiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZSA8PSAxfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWluZm8iPgogICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgICAgICAgbWluPSIxIgogICAgICAgICAgICAgICAgICBtYXg9IiR7dGhpcy50b3RhbFBhZ2VzfSIKICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7U3RyaW5nKHRoaXMuY3VycmVudFBhZ2UpfQogICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVQYWdlSW5wdXR9CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXNlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXRvdGFsIj4ke3RoaXMudG90YWxQYWdlc308L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5uZXh0UGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2hvd1NpZGViYXIgPSAhdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXIgPyAiSGlkZSB0aHVtYm5haWxzIiA6ICJTaG93IHRodW1ibmFpbHMifSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7dGhpcy5zaG93U2lkZWJhciA/ICJsdWNpZGU6U2lkZWJhckNsb3NlIiA6ICJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMuc2hvd1NpZGViYXIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+UGFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWNsb3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2V9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLmtleWVkKHRoaXMuZG9jdW1lbnRJZCwgYjJgCiAgICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsIChpdGVtKSA9PiBpdGVtLnBhZ2UsIChpdGVtKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2UgPT09IGl0ZW0ucGFnZSA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtpdGVtLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLW1haW4iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+TG9hZGluZyBQREYuLi48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAke2RpcmVjdGl2ZXNfZXhwb3J0cy5yZXBlYXQodGhpcy5wYWdlRGF0YSwgKGl0ZW0pID0+IGl0ZW0ucGFnZSwgKGl0ZW0pID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InBhZ2UtY2FudmFzIiBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICBpZiAodGhpcy5wZGZVcmwpIHsKICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZGYoKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwOwogICAgICBpZiAodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpOwogICAgICAgIHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwOwogICAgICB9CiAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAiZGlzcG9zZWQiOwogICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICB0aGlzLmNhbnZhcyA9IHZvaWQgMDsKICAgICAgdGhpcy5jdHggPSB2b2lkIDA7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJwZGZVcmwiKSAmJiB0aGlzLnBkZlVybCkgewogICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJwZGZVcmwiKTsKICAgICAgICBpZiAocHJldmlvdXNVcmwpIHsKICAgICAgICAgIFBkZk1hbmFnZXIucmVsZWFzZURvY3VtZW50KHByZXZpb3VzVXJsKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb2N1bWVudElkID0gYCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWA7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1NpZGViYXIiKSAmJiB0aGlzLnNob3dTaWRlYmFyICYmIHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKCh0aHVtYikgPT4gdGh1bWIucmVuZGVyZWQgPSBmYWxzZSk7CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCk7CiAgICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7CiAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyh0aGlzLmN1cnJlbnRQYWdlKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFBkZigpIHsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJsb2FkaW5nIjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gYXdhaXQgUGRmTWFuYWdlci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSB0aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzOwogICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmluaXRpYWxQYWdlOwogICAgICAgIHRoaXMucmVzb2x2ZUluaXRpYWxWaWV3cG9ydE1vZGUoKTsKICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMucGFnZURhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyaW5nLW1haW4iOwogICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmluaXRpYWxQYWdlID4gMSkgewogICAgICAgICAgYXdhaXQgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5pbml0aWFsUGFnZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyZWQiOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gImVycm9yIjsKICAgICAgfQogICAgfQogICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgfQogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IGVudHJ5LnRhcmdldDsKICAgICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludChwYWdlV3JhcHBlci5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICByb290OiB0aGlzLnZpZXdlck1haW4sCiAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhpcy5SRU5ERVJfQlVGRkVSICogMTAwfXB4IDBweGAsCiAgICAgICAgdGhyZXNob2xkOiAwLjAxCiAgICAgIH0pOwogICAgICBjb25zdCBwYWdlV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTsKICAgICAgaWYgKHBhZ2VXcmFwcGVycykgewogICAgICAgIHBhZ2VXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5vYnNlcnZlKHdyYXBwZXIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodDsKICAgICAgZm9yIChjb25zdCBwYWdlSW5mbyBvZiB0aGlzLnBhZ2VEYXRhKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke3BhZ2VJbmZvLnBhZ2V9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBjb25zdCBidWZmZXIyID0gdGhpcy5SRU5ERVJfQlVGRkVSICogY2xpZW50SGVpZ2h0OwogICAgICAgIGlmIChyZWxhdGl2ZUJvdHRvbSA+PSAtYnVmZmVyMiAmJiByZWxhdGl2ZVRvcCA8PSBjbGllbnRIZWlnaHQgKyBidWZmZXIyKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlSW5mby5wYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKSB7CiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gdGhpcy5wYWdlRGF0YS5maW5kKChwNykgPT4gcDcucGFnZSA9PT0gcGFnZU51bSk7CiAgICAgIGlmICghcGFnZUluZm8gfHwgcGFnZUluZm8ucmVuZGVyZWQgfHwgcGFnZUluZm8ucmVuZGVyaW5nKQogICAgICAgIHJldHVybjsKICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLWNhbnZhc1tkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgIGlmICghY2FudmFzKSB7CiAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShwYWdlTnVtKTsKICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuY29tcHV0ZVZpZXdwb3J0KHBhZ2UpOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnQud2lkdGh9cHhgOwogICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmICghY3R4KSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBjdHgsCiAgICAgICAgICB2aWV3cG9ydAogICAgICAgIH07CiAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLnNldChwYWdlTnVtLCByZW5kZXJUYXNrKTsKICAgICAgICBhd2FpdCByZW5kZXJUYXNrLnByb21pc2U7CiAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICBwYWdlSW5mby5yZW5kZXJlZCA9IHRydWU7CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgicGFnZURhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgcGFnZSAke3BhZ2VOdW19OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7CiAgICAgIGlmICh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0sIDUwKTsKICAgIH07CiAgICB1cGRhdGVDdXJyZW50UGFnZSgpIHsKICAgICAgaWYgKCF0aGlzLnZpZXdlck1haW4pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wOwogICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0OwogICAgICBjb25zdCBjZW50ZXJZID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC8gMjsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdGhpcy5wYWdlRGF0YS5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke2kxMSArIDF9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wICsgc2Nyb2xsVG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBpZiAoY2VudGVyWSA+PSByZWxhdGl2ZVRvcCAmJiBjZW50ZXJZIDw9IHJlbGF0aXZlQm90dG9tKSB7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gaTExICsgMSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gaTExICsgMTsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NpZGViYXIpIHsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KGkxMSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNjcm9sbFRodW1ibmFpbEludG9WaWV3KHBhZ2VOdW0pIHsKICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGNvbnN0IHNpZGViYXJDb250ZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50Iik7CiAgICAgIGlmICh0aHVtYm5haWwgJiYgc2lkZWJhckNvbnRlbnQpIHsKICAgICAgICBjb25zdCB0aHVtYm5haWxSZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHNpZGViYXJSZWN0ID0gc2lkZWJhckNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNBYm92ZSA9IHRodW1ibmFpbFJlY3QudG9wIDwgc2lkZWJhclJlY3QudG9wOwogICAgICAgIGNvbnN0IGlzQmVsb3cgPSB0aHVtYm5haWxSZWN0LmJvdHRvbSA+IHNpZGViYXJSZWN0LmJvdHRvbTsKICAgICAgICBpZiAoaXNBYm92ZSB8fCBpc0JlbG93KSB7CiAgICAgICAgICBjb25zdCB0aHVtYm5haWxPZmZzZXQgPSB0aHVtYm5haWwub2Zmc2V0VG9wOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsSGVpZ2h0ID0gdGh1bWJuYWlsLm9mZnNldEhlaWdodDsKICAgICAgICAgIGNvbnN0IHNpZGViYXJIZWlnaHQgPSBzaWRlYmFyQ29udGVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSB0aHVtYm5haWxPZmZzZXQgLSBzaWRlYmFySGVpZ2h0IC8gMiArIHRodW1ibmFpbEhlaWdodCAvIDI7CiAgICAgICAgICBzaWRlYmFyQ29udGVudC5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgdGFyZ2V0U2Nyb2xsVG9wKSwKICAgICAgICAgICAgYmVoYXZpb3I6ICJzbW9vdGgiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNjcm9sbFRvUGFnZShwYWdlTnVtLCBzbW9vdGggPSB0cnVlKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IHBhZ2VXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGlmIChwYWdlV3JhcHBlciAmJiB0aGlzLnZpZXdlck1haW4pIHsKICAgICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFRvcCA9IHRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3A7CiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFRvcCArIChwYWdlUmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcCkgLSB0aGlzLnZpZXdlck1haW4uY2xpZW50VG9wOwogICAgICAgIGlmIChzbW9vdGgpIHsKICAgICAgICAgIHRoaXMudmlld2VyTWFpbi5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogdGFyZ2V0U2Nyb2xsVG9wLAogICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wID0gdGFyZ2V0U2Nyb2xsVG9wOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bTsKICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhwYWdlTnVtKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQYWdlSWZOZWVkZWQocGFnZU51bSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclRodW1ibmFpbHMoKSB7CiAgICAgIGlmICghdGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy50aHVtYm5haWxEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy50aHVtYm5haWxEYXRhLmV2ZXJ5KCh0OSkgPT4gdDkucmVuZGVyZWQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmFsID0gdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbDsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJyZW5kZXJpbmctdGh1bWJzIjsKICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCB0aHVtYm5haWxzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIik7CiAgICAgICAgY29uc3QgdGh1bWJuYWlsQ2FudmFzZXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aHVtYm5haWwtY2FudmFzIik7CiAgICAgICAgY29uc3Qgc2lkZWJhckNvbnRlbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKTsKICAgICAgICBjb25zdCBzaWRlYmFyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2lkZWJhckNvbnRlbnQpOwogICAgICAgIGNvbnN0IHNpZGViYXJQYWRkaW5nID0gcGFyc2VGbG9hdChzaWRlYmFyU3R5bGVzLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc2lkZWJhclN0eWxlcy5wYWRkaW5nUmlnaHQpOwogICAgICAgIGNvbnN0IG1heFRodW1ibmFpbFdpZHRoID0gMjAwIC0gc2lkZWJhclBhZGRpbmcgLSA0OwogICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIEFycmF5LmZyb20odGh1bWJuYWlsQ2FudmFzZXMpKSB7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKGNvbnRleHQyKSB7CiAgICAgICAgICAgIGNvbnRleHQyLmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB0aHVtYm5haWxDYW52YXNlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aHVtYm5haWxDYW52YXNlc1tpMTFdOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGh1bWJuYWlsc1tpMTFdOwogICAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KGNhbnZhcy5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICBjb25zdCBpbml0aWFsVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IG1heFRodW1ibmFpbFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydC53aWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgIHRodW1ibmFpbC5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgICAgdGh1bWJuYWlsLnN0eWxlLm1pbkhlaWdodCA9IGAke3ZpZXdwb3J0LmhlaWdodH1weGA7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFjb250ZXh0MikgewogICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MucHVzaChyZW5kZXJUYXNrKTsKICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICBjb25zdCB0aHVtYkRhdGEgPSB0aGlzLnRodW1ibmFpbERhdGEuZmluZCgodDkpID0+IHQ5LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKHRodW1iRGF0YSkgewogICAgICAgICAgICB0aHVtYkRhdGEucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInRodW1ibmFpbERhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciByZW5kZXJpbmcgdGh1bWJuYWlsczoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgfQogICAgfQogICAgcHJldmlvdXNQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHsKICAgICAgICB0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIG5leHRQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcykgewogICAgICAgIHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlVGh1bWJuYWlsQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQodGFyZ2V0LmRhdGFzZXQucGFnZSB8fCAiMSIpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIGhhbmRsZVBhZ2VJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIHpvb21JbigpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1pbih0aGlzLk1BTlVBTF9NQVhfWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAqIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgem9vbU91dCgpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAvIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgcmVzZXRab29tKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1BhZ2UoKSB7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1dpZHRoKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICByZVJlbmRlckFsbFBhZ2VzKCkgewogICAgICB0aGlzLnBhZ2VEYXRhLmZvckVhY2goKHBhZ2UpID0+IHsKICAgICAgICBwYWdlLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgcGFnZS5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0pOwogICAgfQogICAgZG93bmxvYWRQZGYoKSB7CiAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICBsaW5rMy5ocmVmID0gdGhpcy5wZGZVcmw7CiAgICAgIGxpbmszLmRvd25sb2FkID0gdGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKSB8fCAiZG9jdW1lbnQucGRmIjsKICAgICAgbGluazMuY2xpY2soKTsKICAgIH0KICAgIHByaW50UGRmKCkgewogICAgICB3aW5kb3cub3Blbih0aGlzLnBkZlVybCwgIl9ibGFuayIpPy5wcmludCgpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kb3dubG9hZFBkZigpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlByaW50IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpQcmludGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLnByaW50UGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdOwogICAgfQogICAgZ2V0IGNhblpvb21JbigpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tIDwgdGhpcy5NQU5VQUxfTUFYX1pPT007CiAgICB9CiAgICBnZXQgY2FuWm9vbU91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tID4gdGhpcy5NQU5VQUxfTUlOX1pPT007CiAgICB9CiAgICBlbnN1cmVWaWV3ZXJSZWZzKCkgewogICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikgewogICAgICAgIHRoaXMudmlld2VyTWFpbiA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXdlci1tYWluIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudmlld2VyTWFpbiAmJiAhdGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgdGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCk7CiAgICAgICAgICBpZiAodGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgICB0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTsKICAgICAgICB0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudDQuc2Nyb2xsVG9wOwogICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudDQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gZWxlbWVudDQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgY29uc3QgZGVsdGFZID0gZTExLmRlbHRhWTsKICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDA7CiAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID0gTWF0aC5hYnMoc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC0gc2Nyb2xsSGVpZ2h0KSA8IDE7CiAgICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiAhaXNBdFRvcCB8fCBkZWx0YVkgPiAwICYmICFpc0F0Qm90dG9tKSB7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFZIDwgMCAmJiBpc0F0VG9wIHx8IGRlbHRhWSA+IDAgJiYgaXNBdEJvdHRvbSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0sIHsgcGFzc2l2ZTogZmFsc2UgfSk7CiAgICAgIH0KICAgIH0KICAgIG1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGVzMyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgY29uc3QgcGFkZGluZ1ggPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ0xlZnQgfHwgIjAiKSArIHBhcnNlRmxvYXQoc3R5bGVzMy5wYWRkaW5nUmlnaHQgfHwgIjAiKTsKICAgICAgY29uc3QgcGFkZGluZ1kgPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ1RvcCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdCb3R0b20gfHwgIjAiKTsKICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0aGlzLnZpZXdlck1haW4uY2xpZW50V2lkdGggLSBwYWRkaW5nWCwgMCk7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQgLSBwYWRkaW5nWSwgMCk7CiAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aCwgaGVpZ2h0IH07CiAgICB9CiAgICByZXNvbHZlSW5pdGlhbFZpZXdwb3J0TW9kZSgpIHsKICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYWxab29tID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmluaXRpYWxab29tLCB0cnVlKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS13aWR0aCIpIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS1maXQiIHx8IHRoaXMuaW5pdGlhbFpvb20gPT09ICJhdXRvIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3cG9ydE1vZGUgIT09ICJjdXN0b20iKSB7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGNvbXB1dGVWaWV3cG9ydChwYWdlKSB7CiAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICBjb25zdCBiYXNlVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgIGxldCBzY2FsZTsKICAgICAgc3dpdGNoICh0aGlzLnZpZXdwb3J0TW9kZSkgewogICAgICAgIGNhc2UgInBhZ2Utd2lkdGgiOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIHNjYWxlID0gYXZhaWxhYmxlV2lkdGggLyBiYXNlVmlld3BvcnQud2lkdGg7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAicGFnZS1maXQiOgogICAgICAgIGNhc2UgImF1dG8iOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCB8fCBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgY29uc3Qgd2lkdGhTY2FsZSA9IGF2YWlsYWJsZVdpZHRoIC8gYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3QgaGVpZ2h0U2NhbGUgPSBhdmFpbGFibGVIZWlnaHQgLyBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgc2NhbGUgPSBNYXRoLm1pbih3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBzY2FsZSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmN1cnJlbnRab29tIHx8IDEsIGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzY2FsZSkgfHwgc2NhbGUgPD0gMCkgewogICAgICAgIHNjYWxlID0gMTsKICAgICAgfQogICAgICBjb25zdCBjbGFtcGVkU2NhbGUgPSB0aGlzLnZpZXdwb3J0TW9kZSA9PT0gImN1c3RvbSIgPyB0aGlzLm5vcm1hbGl6ZVpvb20oc2NhbGUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVab29tKHNjYWxlLCBmYWxzZSk7CiAgICAgIGlmICh0aGlzLnZpZXdwb3J0TW9kZSAhPT0gImN1c3RvbSIpIHsKICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gY2xhbXBlZFNjYWxlOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IGNsYW1wZWRTY2FsZSB9KTsKICAgIH0KICAgIG5vcm1hbGl6ZVpvb20odmFsdWUyLCBjbGFtcFRvTWFudWFsUmFuZ2UpIHsKICAgICAgY29uc3QgbWluMyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01JTl9aT09NIDogdGhpcy5BQlNPTFVURV9NSU5fWk9PTTsKICAgICAgY29uc3QgbWF4MyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01BWF9aT09NIDogdGhpcy5BQlNPTFVURV9NQVhfWk9PTTsKICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlMiwgbWluMyksIG1heDMpOwogICAgfQogICAgYXN5bmMgY2xlYW51cERvY3VtZW50KCkgewogICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcyB8fCBbXSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJpZGxlIjsKICAgICAgdGhpcy5wYWdlUmVuZGVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMucGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBbXTsKICAgICAgdGhpcy5wYWdlRGF0YSA9IFtdOwogICAgICB0aGlzLmRvY3VtZW50SWQgPSAiIjsKICAgICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuY3R4KSB7CiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMucGRmRG9jdW1lbnQuZGVzdHJveSgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIFBERiBkb2N1bWVudDoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMucGRmRG9jdW1lbnQgPSBudWxsOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTcwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb1ZpZXdEYXNoYm9hcmQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXZpZXctZGFzaGJvYXJkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld0Rhc2hib2FyZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTcwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1ZpZXdEYXNoYm9hcmQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImZhVXNlcnMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzE1JSBmcm9tIGxhc3Qgd2VlayIsCiAgICAgICAgY29sb3I6ICIjMjJjNTVlIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJwYWdldmlld3MiLAogICAgICAgIHRpdGxlOiAiUGFnZSBWaWV3cyIsCiAgICAgICAgdmFsdWU6IDU2NzAwLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJmYUV5ZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICI1Ni43ayB0b3RhbCB2aWV3cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ1cHRpbWUiLAogICAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgICAgdmFsdWU6IDg5LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJmYVNlcnZlciIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTAsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSBUaW1lIiwKICAgICAgICB2YWx1ZTogMy4yLAogICAgICAgIHVuaXQ6ICJzIiwKICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICBpY29uOiAiZmFDbG9jayIsCiAgICAgICAgZGVzY3JpcHRpb246ICItMC41cyBpbXByb3ZlbWVudCIsCiAgICAgICAgY29sb3I6ICIjZjU5ZTBiIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgICB0aXRsZTogIk1vbnRobHkgUmV2ZW51ZSIsCiAgICAgICAgdmFsdWU6IDQ4NTIwLAogICAgICAgIHVuaXQ6ICIkIiwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYURvbGxhclNpZ24iLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzguMiUgZ3Jvd3RoIiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiLAogICAgICAgIHRyZW5kRGF0YTogWzM1ZTMsIDM4ZTMsIDM3NTAwLCA0MWUzLCAzOTgwMCwgNDJlMywgNDQxMDAsIDQzMjAwLCA0NTYwMCwgNDcxMDAsIDQ2ODAwLCA0ODUyMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAidHJhZmZpYyIsCiAgICAgICAgdGl0bGU6ICJUcmFmZmljIFRyZW5kIiwKICAgICAgICB2YWx1ZTogMTY4MCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYUNoYXJ0TGluZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDcgZGF5cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFsxMjAwLCAxMzUwLCAxMTAwLCAxNDUwLCAxNjAwLCAxNTUwLCAxNjgwXQogICAgICB9CiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIHRvIHlvdXIgYXBwbGljYXRpb24gZGFzaGJvYXJkLiBIZXJlJ3MgYW4gb3ZlcnZpZXcgb2YgeW91ciBtZXRyaWNzOjwvcD4KICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgLnRpbGVzPSR7dGhpcy5zdGF0c1RpbGVzfQogICAgICAgIEB0aWxlLWFjdGlvbj0keyhlMTEpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCk7CiAgICAgIH19CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3RGFzaGJvYXJkMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld0FuYWx5dGljcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1hbmFseXRpY3MiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9WaWV3QW5hbHl0aWNzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld0FuYWx5dGljczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5BbmFseXRpY3M8L2gxPgogICAgICA8cD5UaGlzIGlzIHRoZSBhbmFseXRpY3Mgdmlldy4gWW91IGNhbiBhZGQgY2hhcnRzIGFuZCBtZXRyaWNzIGhlcmUuPC9wPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3QW5hbHl0aWNzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld1NldHRpbmdzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby12aWV3LXNldHRpbmdzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld1NldHRpbmdzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld1NldHRpbmdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5TZXR0aW5nczwvaDE+CiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGFwcGxpY2F0aW9uIHNldHRpbmdzIGJlbG93OjwvcD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5HZW5lcmFsIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwcE5hbWUiIGxhYmVsPSJBcHBsaWNhdGlvbiBOYW1lIiB2YWx1ZT0iTXkgQXBwIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcGlFbmRwb2ludCIgbGFiZWw9IkFQSSBFbmRwb2ludCIgdmFsdWU9Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iZW52aXJvbm1lbnQiCiAgICAgICAgICAgIGxhYmVsPSJFbnZpcm9ubWVudCIKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJEZXZlbG9wbWVudCIsIGtleTogImRldiIgfSwKICAgICAgICB7IG9wdGlvbjogIlN0YWdpbmciLCBrZXk6ICJzdGFnaW5nIiB9LAogICAgICAgIHsgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH0KICAgICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJQcm9kdWN0aW9uIiwga2V5OiAicHJvZCIgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZU5vdGlmaWNhdGlvbnMiIGxhYmVsPSJFbmFibGUgTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iZW5hYmxlQW5hbHl0aWNzIiBsYWJlbD0iRW5hYmxlIEFuYWx5dGljcyIgdmFsdWU9ImZhbHNlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TYXZlIEdlbmVyYWwgU2V0dGluZ3M8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPkRpc3BsYXkgUHJlZmVyZW5jZXM8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyI+UXVpY2sgZGlzcGxheSBzZXR0aW5ncyB1c2luZyBob3Jpem9udGFsIGxheW91dDo8L3A+CiAgICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0idGhlbWUiCiAgICAgICAgICAgICAgbGFiZWw9IlRoZW1lIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICB7IG9wdGlvbjogIkxpZ2h0Iiwga2V5OiAibGlnaHQiIH0sCiAgICAgICAgeyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfSwKICAgICAgICB7IG9wdGlvbjogIkF1dG8iLCBrZXk6ICJhdXRvIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9Imxhbmd1YWdlIgogICAgICAgICAgICAgIGxhYmVsPSJMYW5ndWFnZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH0sCiAgICAgICAgeyBvcHRpb246ICJHZXJtYW4iLCBrZXk6ICJkZSIgfSwKICAgICAgICB7IG9wdGlvbjogIlNwYW5pc2giLCBrZXk6ICJlcyIgfSwKICAgICAgICB7IG9wdGlvbjogIkZyZW5jaCIsIGtleTogImZyIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iY29tcGFjdE1vZGUiIGxhYmVsPSJDb21wYWN0IE1vZGUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siUmVhbC10aW1lIiwgIkRhaWx5IERpZ2VzdCIsICJXZWVrbHkgU3VtbWFyeSIsICJOZXZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUmVhbC10aW1lIn0KICAgICAgICAgICAgLmtleT0keyJlbWFpbEZyZXF1ZW5jeSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InB1c2hOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIFB1c2ggTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0ic291bmRBbGVydHMiIGxhYmVsPSJQbGF5IFNvdW5kIGZvciBBbGVydHMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5VcGRhdGUgTm90aWZpY2F0aW9uczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1ZpZXdTZXR0aW5nczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmM0MiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1hcHBkYXNoCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICB0ZXJtaW5hbFNldHVwQ29tbWFuZD0iZWNobyAnV2VsY29tZSB0byB0aGUgdGVybWluYWwhJyIKICAgICAgLnZpZXdUYWJzPSR7WwogIHsKICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsCiAgICBlbGVtZW50OiBEZW1vVmlld0Rhc2hib2FyZAogIH0sCiAgewogICAgbmFtZTogIkFuYWx5dGljcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgZWxlbWVudDogRGVtb1ZpZXdBbmFseXRpY3MKICB9LAogIHsKICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICBlbGVtZW50OiBEZW1vVmlld1NldHRpbmdzCiAgfQpdfQogICAgICBAbG9nb3V0PSR7KCkgPT4gewogIGNvbnNvbGUubG9nKCJMb2dvdXQgZXZlbnQgdHJpZ2dlcmVkIik7CiAgYWxlcnQoIkxvZ291dCBjbGlja2VkISIpOwp9fQogICAgICBAdmlldy1zZWxlY3Q9JHsoZTExKSA9PiB7CiAgY29uc29sZS5sb2coIlZpZXcgc2VsZWN0ZWQ6IiwgZTExLmRldGFpbC52aWV3Lm5hbWUpOwp9fQogICAgPjwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUFwcERhc2ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNpbXBsZS1hcHBkYXNoIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbmFtZV9kZWNvcmF0b3JzOwogIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX25hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF92aWV3VGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NpbXBsZUFwcERhc2gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfdmlld1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9uYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9uYW1lX2luaXRpYWxpemVycywgX25hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfdmlld1RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld1RhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3VGFicyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3VGFic19pbml0aWFsaXplcnMsIF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGVybWluYWxTZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGVybWluYWxTZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsU2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3NlbGVjdGVkVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlQXBwRGFzaDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlNpbXBsZSI7CiAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICJBcHBsaWNhdGlvbiBEYXNoYm9hcmQiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdmlld1RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHZpZXdUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3VGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0ZXJtaW5hbFNldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBgZWNobyAiVGVybWluYWwgcmVhZHkiYCkpOwogICAgZ2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXJtaW5hbFNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3NlbGVjdGVkVmlld19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgMTglKSAwJSwgaHNsKDIxNSAyMCUgMTQlKSAxMDAlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMDUpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuNSkiLCAiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsICJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDMwJSkiLCAiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwgImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwgImhzbCgyMTUgNzAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHNwYW4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXBwQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCAiaHNsKDAgODQlIDYwJSAvIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC5jb250cm9sYmFyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCAxMyUgMTglKSIsICJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKCh2aWV3KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXcgPT09IHZpZXcgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMubG9hZFZpZXcodmlldyl9CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3ZpZXcuaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dmlldy5pY29uTmFtZS5pbmNsdWRlcygiOiIpID8gdmlldy5pY29uTmFtZSA6IGBsdWNpZGU6JHt2aWV3Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7dmlldy5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2dvdXQiLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTsKICAgICAgfX0+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmxvZ091dCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5TaWduIG91dDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBjb250ZW50Ij4KICAgICAgICAgIDwhLS0gQ29udGVudCBnb2VzIGhlcmUgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy1jb25uZWN0ZWQiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6d2lmaSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+Q29ubmVjdGVkPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy10ZXJtaW5hbCIgQGNsaWNrPSR7dGhpcy5sYXVuY2hUZXJtaW5hbH0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp0ZXJtaW5hbCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+VGVybWluYWw8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudmlld1RhYnMgJiYgdGhpcy52aWV3VGFicy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlldyh0aGlzLnZpZXdUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgY3VycmVudFRlcm1pbmFsID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGxhdW5jaFRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbWFpbmNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpOwogICAgICBjb25zdCB7IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiB9ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpLCBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzKSk7CiAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIoKTsKICAgICAgdGVybWluYWwuc2V0dXBDb21tYW5kID0gdGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWwgPSB0ZXJtaW5hbDsKICAgICAgbWFpbmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXJtaW5hbCk7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgdGVybWluYWwuc3R5bGUuekluZGV4ID0gIjEwIjsKICAgICAgdGVybWluYWwuc3R5bGUudG9wID0gIjBweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLmxlZnQgPSAiMjQwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5ib3R0b20gPSAiMjRweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICB0ZXJtaW5hbC5zdHlsZS50cmFuc2l0aW9uID0gImFsbCAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIjsKICAgICAgdGVybWluYWwuc3R5bGUuYm94U2hhZG93ID0gIjAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuNSksIDAgMCAwIDFweCByZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KSI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm1heFdpZHRoID0gYGNhbGMoJHttYWluY29udGFpbmVyLmNsaWVudFdpZHRofXB4IC0yNDBweClgOwogICAgICB0ZXJtaW5hbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke21haW5jb250YWluZXIuY2xpZW50SGVpZ2h0fXB4IC0gMjRweClgOwogICAgICB0ZXJtaW5hbC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRoaXMuY2xvc2VUZXJtaW5hbCgpKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGVybWluYWwuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgdGVybWluYWwuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkiOwogICAgICByZXR1cm4gdGVybWluYWw7CiAgICB9CiAgICBhc3luYyBjbG9zZVRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMjUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5yZW1vdmUoKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGN1cnJlbnRWaWV3OwogICAgYXN5bmMgbG9hZFZpZXcodmlld0FyZykgewogICAgICBjb25zdCBhcHBjb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50Iik7CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgdmlld0FyZy5lbGVtZW50KCk7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5yZW1vdmUoKTsKICAgICAgfQogICAgICBhcHBjb250ZW50LmFwcGVuZENoaWxkKHZpZXcpOwogICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB2aWV3QXJnOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgdmlldzogdmlld0FyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MyA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1sb2dpbiAKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIEBsb2dpbj0keyhlMTEpID0+IHsKICBjb25zb2xlLmxvZygiTG9naW4gZXZlbnQgcmVjZWl2ZWQ6IiwgZTExLmRldGFpbCk7CiAgY29uc3QgbG9naW5EYXRhID0gZTExLmRldGFpbD8uZGF0YSB8fCBlMTEuZGV0YWlsOwogIGlmIChsb2dpbkRhdGE/LnVzZXJuYW1lICYmIGxvZ2luRGF0YT8ucGFzc3dvcmQpIHsKICAgIGFsZXJ0KGBMb2dpbiBhdHRlbXB0ZWQgd2l0aDoKVXNlcm5hbWU6ICR7bG9naW5EYXRhLnVzZXJuYW1lfQpQYXNzd29yZDogJHtsb2dpbkRhdGEucGFzc3dvcmR9YCk7CiAgfSBlbHNlIHsKICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6IiwgZTExLmRldGFpbCk7CiAgfQp9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUxvZ2luID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zaW1wbGUtbG9naW4iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9uYW1lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU2ltcGxlTG9naW4yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJuYW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJTaW1wbGUiOwogICAgI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX25hbWVfaW5pdGlhbGl6ZXJzLCAiQXBwbGljYXRpb24iKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmxvZ2luQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zbG90Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sb2dpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzNjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAubG9naW4taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImxvZ2luQ29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPlNpZ24gaW48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViaGVhZGVyIj5FbnRlciB5b3VyIGNyZWRlbnRpYWxzIHRvIGFjY2VzcyAke3RoaXMubmFtZX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4tY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InVzZXJuYW1lIiBsYWJlbD0iVXNlcm5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJwYXNzd29yZCIgbGFiZWw9IlBhc3N3b3JkIiBpc1Bhc3N3b3JkQm9vbCByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TaWduIGluPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdENvbnRhaW5lciI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBmb3JtID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvZ2luIiwgewogICAgICAgICAgICBkZXRhaWw6IGV2ZW50LmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIHNsb3R0ZWQgY29udGVudAogICAgICovCiAgICBhc3luYyBzd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBsb2dpbkRpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKTsKICAgICAgY29uc3QgbG9naW5Db250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ2luQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IHNsb3RDb250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNsb3RDb250YWluZXIiKTsKICAgICAgbG9naW5EaXYuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgbG9naW5EaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMjBweCkiOwogICAgICBsb2dpbkNvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDIwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHNsb3RDb250YWluZXJEaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMHB4KSI7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gImFsbCI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczczKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvaW5kZXguanMKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0NCA9ICgpID0+IGIyYAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0ke3RydWV9IC50ZXh0PSR7IlJvdW5kZWQifT48L2RlZXMtYmFkZ2U+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYmFkZ2UvZGVlcy1iYWRnZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCYWRnZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYmFkZ2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JvdW5kZWRfZGVjb3JhdG9yczsKICBsZXQgX3JvdW5kZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCYWRnZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JvdW5kZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50ZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RleHRfaW5pdGlhbGl6ZXJzLCBfdGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9yb3VuZGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvdW5kZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvdW5kZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucm91bmRlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucm91bmRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3VuZGVkX2luaXRpYWxpemVycywgX3JvdW5kZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNCYWRnZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ0OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByb3VuZGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJvdW5kZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JvdW5kZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQgPyAicm91bmRlZCIgOiAiIn0iPgogICAgICAgICR7dGhpcy50ZXh0fQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQmFkZ2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jaGlwcy9kZWVzLWNoaXBzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDUgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vbi1TZWxlY3RhYmxlIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkJhc2ljIGNoaXBzIHdpdGhvdXQgc2VsZWN0aW9uIGNhcGFiaWxpdHkuIFVzZSBmb3IgZGlzcGxheS1vbmx5IHRhZ3MuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibm9uZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJ0aWVyIiwgdmFsdWU6ICJQcmVtaXVtIiB9LAogIHsga2V5OiAicmVnaW9uIiwgdmFsdWU6ICJFVS1XZXN0IiB9LAogIHsga2V5OiAidHlwZSIsIHZhbHVlOiAiRW50ZXJwcmlzZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaW5nbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNsaWNrIHRvIHNlbGVjdCBvbmUgY2hpcCBhdCBhIHRpbWUuIFVzZWZ1bCBmb3IgZmlsdGVycyBhbmQgb3B0aW9ucy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImFsbCIsIHZhbHVlOiAiQWxsIFByb2plY3RzIiB9LAogIHsga2V5OiAiYWN0aXZlIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJhcmNoaXZlZCIsIHZhbHVlOiAiQXJjaGl2ZWQiIH0sCiAgeyBrZXk6ICJkcmFmdHMiLCB2YWx1ZTogIkRyYWZ0cyIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAianMiLCB2YWx1ZTogIkphdmFTY3JpcHQiIH0sCiAgeyBrZXk6ICJ0cyIsIHZhbHVlOiAiVHlwZVNjcmlwdCIgfSwKICB7IGtleTogInJlYWN0IiwgdmFsdWU6ICJSZWFjdCIgfSwKICB7IGtleTogInZ1ZSIsIHZhbHVlOiAiVnVlIiB9LAogIHsga2V5OiAiYW5ndWxhciIsIHZhbHVlOiAiQW5ndWxhciIgfSwKICB7IGtleTogIm5vZGUiLCB2YWx1ZTogIk5vZGUuanMiIH0KXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmVtb3ZhYmxlIENoaXBzIHdpdGggS2V5czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DaGlwcyB3aXRoIHJlbW92ZSBidXR0b25zIGFuZCBrZXktdmFsdWUgcGFpcnMuIFBlcmZlY3QgZm9yIGR5bmFtaWMgbGlzdHMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImVudiIsIHZhbHVlOiAiUHJvZHVjdGlvbiIgfSwKICB7IGtleTogInZlcnNpb24iLCB2YWx1ZTogIjIuNC4xIiB9LAogIHsga2V5OiAiYnJhbmNoIiwgdmFsdWU6ICJtYWluIiB9LAogIHsga2V5OiAiYXV0aG9yIiwgdmFsdWU6ICJKb2huIERvZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgeyBrZXk6ICJwcmlvcml0eSIsIHZhbHVlOiAiSGlnaCIgfSwKICB7IGtleTogInN0YXR1cyIsIHZhbHVlOiAiSW4gUHJvZ3Jlc3MiIH0sCiAgeyBrZXk6ICJidWciLCB2YWx1ZTogIkJ1ZyIgfSwKICB7IGtleTogImZlYXR1cmUiLCB2YWx1ZTogIkZlYXR1cmUiIH0sCiAgeyBrZXk6ICJzcHJpbnQiLCB2YWx1ZTogIlNwcmludCAyMyIgfSwKICB7IGtleTogImFzc2lnbmVlIiwgdmFsdWU6ICJBbGljZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNDaGlwcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hpcHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9yczsKICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGFibGVDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZENoaXBfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkQ2hpcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoaXBzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2hpcHNBcmVSZW1vdmFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNoaXBzQXJlUmVtb3ZhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNoaXBzQXJlUmVtb3ZhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jaGlwc0FyZVJlbW92YWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RhYmxlQ2hpcHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0YWJsZUNoaXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0YWJsZUNoaXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RhYmxlQ2hpcHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRDaGlwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZENoaXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZENoaXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkQ2hpcHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRDaGlwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDaGlwczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ1OwogICAgI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGlvbk1vZGVfaW5pdGlhbGl6ZXJzLCAic2luZ2xlIik7CiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfY2hpcHNBcmVSZW1vdmFibGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjaGlwc0FyZVJlbW92YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGFibGVDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0YWJsZUNoaXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0YWJsZUNoaXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0YWJsZUNoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RhYmxlQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RlZENoaXBfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRDaGlwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZENoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmNoaXAgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAuY2hpcDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICB9CgogICAgICBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmNDQ0NCIsICIjZWY0NDQ0Iil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMuc2VsZWN0YWJsZUNoaXBzLm1hcCgoY2hpcCkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENoaXAoY2hpcCl9CiAgICAgICAgICAgICAgY2xhc3M9ImNoaXAgJHt0aGlzLmlzU2VsZWN0ZWQoY2hpcCkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHtjaGlwLmtleSA/IGIyYDxkaXYgY2xhc3M9ImNoaXBLZXkiPiR7Y2hpcC5rZXl9PC9kaXY+YCA6IGIyYGB9ICR7Y2hpcC52YWx1ZX0KICAgICAgICAgICAgICAke3RoaXMuY2hpcHNBcmVSZW1vdmFibGUgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQpID0+IHsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnJlbW92ZUNoaXAoY2hpcCk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0keyJmYTp4bWFyayJ9CiAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgaXNTZWxlY3RlZChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGlwID8gdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLCBjaGlwKSA6IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSgoc2VsZWN0ZWQpID0+IHRoaXMuaXNTYW1lQ2hpcChzZWxlY3RlZCwgY2hpcCkpOwogICAgICB9CiAgICB9CiAgICBpc1NhbWVDaGlwKGNoaXAxLCBjaGlwMikgewogICAgICBpZiAoY2hpcDEua2V5ICYmIGNoaXAyLmtleSkgewogICAgICAgIHJldHVybiBjaGlwMS5rZXkgPT09IGNoaXAyLmtleTsKICAgICAgfQogICAgICByZXR1cm4gY2hpcDEudmFsdWUgPT09IGNoaXAyLnZhbHVlICYmIGNoaXAxLmtleSA9PT0gY2hpcDIua2V5OwogICAgfQogICAgYXN5bmMgc2VsZWN0Q2hpcChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJub25lIikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IGNoaXA7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbY2hpcF07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpcGxlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhdGhpcy5pc1NhbWVDaGlwKHNlbGVjdGVkLCBjaGlwKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFsuLi50aGlzLnNlbGVjdGVkQ2hpcHMsIGNoaXBdOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgfQogICAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkQ2hpcHMpOwogICAgfQogICAgcmVtb3ZlQ2hpcChjaGlwVG9SZW1vdmUpIHsKICAgICAgdGhpcy5zZWxlY3RhYmxlQ2hpcHMgPSB0aGlzLnNlbGVjdGFibGVDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hpcCAmJiB0aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsIGNoaXBUb1JlbW92ZSkpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hpcHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ2ID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBncmlkID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpOwogICAgY29uc3Qgc2VlZFdpZGdldHMgPSBbCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MxIiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiUmV2ZW51ZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXJTaWduIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMzJweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07Ij4kMTI0LDU2MzwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjMjJjNTVlOyBmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPuKGkSAxMi41JSBmcm9tIGxhc3QgbW9udGg8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MyIiwKICAgICAgICB4OiAzLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiVXNlcnMiLAogICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsiPjgsMjM0PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMzYjgyZjY7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+4oaRIDUuMiUgZnJvbSBsYXN0IHdlZWs8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImNoYXJ0MSIsCiAgICAgICAgeDogNiwKICAgICAgICB5OiAwLAogICAgICAgIHc6IDYsCiAgICAgICAgaDogNCwKICAgICAgICB0aXRsZTogIkFuYWx5dGljcyIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0KICAgIF07CiAgICBncmlkLndpZGdldHMgPSBzZWVkV2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gKHsgLi4ud2lkZ2V0IH0pKTsKICAgIGdyaWQuY2VsbEhlaWdodCA9IDgwOwogICAgZ3JpZC5tYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCwgbGVmdDogMTAgfTsKICAgIGdyaWQuZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTsKICAgIGdyaWQuc2hvd0dyaWRMaW5lcyA9IGZhbHNlOwogICAgY29uc3QgYmFzZUxheW91dCA9IGdyaWQuZ2V0TGF5b3V0KCkubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKTsKICAgIGNvbnN0IG1vYmlsZUxheW91dCA9IGdyaWQud2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiAoewogICAgICBpZDogd2lkZ2V0LmlkLAogICAgICB4OiAwLAogICAgICB5OiBpbmRleDIgPT09IDAgPyAwIDogZ3JpZC53aWRnZXRzLnNsaWNlKDAsIGluZGV4MikucmVkdWNlKChhY2MsIHByZXYpID0+IGFjYyArIHByZXYuaCwgMCksCiAgICAgIHc6IGdyaWQuY29sdW1ucywKICAgICAgaDogd2lkZ2V0LmgKICAgIH0pKTsKICAgIGdyaWQubGF5b3V0cyA9IHsKICAgICAgYmFzZTogYmFzZUxheW91dCwKICAgICAgbW9iaWxlOiBtb2JpbGVMYXlvdXQKICAgIH07CiAgICBjb25zdCBzdGF0dXNFbCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Rhc2hib2FyZExheW91dFN0YXR1cyIpOwogICAgY29uc3QgdXBkYXRlU3RhdHVzID0gKCkgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBBY3RpdmUgYnJlYWtwb2ludDogJHtncmlkLmFjdGl2ZUJyZWFrcG9pbnR9IFx1MjAyMiBUaWxlczogJHtsYXlvdXQubGVuZ3RofWA7CiAgICB9OwogICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCIobWF4LXdpZHRoOiA3NjhweCkiKTsKICAgIGNvbnN0IGhhbmRsZUJyZWFrcG9pbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IG1lZGlhUXVlcnkubWF0Y2hlcyA/ICJtb2JpbGUiIDogImJhc2UiOwogICAgICBncmlkLmFwcGx5QnJlYWtwb2ludExheW91dCh0YXJnZXQpOwogICAgICB1cGRhdGVTdGF0dXMoKTsKICAgIH07CiAgICBpZiAodHlwZW9mIG1lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfSBlbHNlIHsKICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcj8uKGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfQogICAgaGFuZGxlQnJlYWtwb2ludCgpOwogICAgbGV0IHdpZGdldENvdW50ZXIgPSA0OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJUb2dnbGUgQW5pbWF0aW9uIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5lbmFibGVBbmltYXRpb24gPSAhZ3JpZC5lbmFibGVBbmltYXRpb247CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBHcmlkIExpbmVzIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zaG93R3JpZExpbmVzID0gIWdyaWQuc2hvd0dyaWRMaW5lczsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIFdpZGdldCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1dpZGdldCA9IHsKICAgICAgICAgICAgICBpZDogYHdpZGdldCR7d2lkZ2V0Q291bnRlcisrfWAsCiAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgIHc6IDMsCiAgICAgICAgICAgICAgaDogMiwKICAgICAgICAgICAgICBhdXRvUG9zaXRpb246IHRydWUsCiAgICAgICAgICAgICAgdGl0bGU6IGBXaWRnZXQgJHt3aWRnZXRDb3VudGVyIC0gMX1gLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6cGFja2FnZSIsCiAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNzE3MTdhOyI+TmV3IHdpZGdldCBjb250ZW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpfTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZ3JpZC5hZGRXaWRnZXQobmV3V2lkZ2V0LCB0cnVlKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQ29tcGFjdCBHcmlkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5jb21wYWN0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBFZGl0IE1vZGUiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBncmlkLmVkaXRhYmxlID0gIWdyaWQuZWRpdGFibGU7CiAgICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGdyaWQuZWRpdGFibGUgPyAiTG9jayBHcmlkIiA6ICJVbmxvY2sgR3JpZCI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlJlc2V0IExheW91dCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuYXBwbHlCcmVha3BvaW50TGF5b3V0KGdyaWQuYWN0aXZlQnJlYWtwb2ludCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbGFzdFBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgbGV0IG1vdmVFdmVudENvdW50ZXIgPSAwOwogICAgY29uc3QgbG9nR3JpZFN0YXRlID0gKGV2ZW50TmFtZSwgZGV0YWlscykgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBjb25zb2xlLmdyb3VwKGBcdXsxRjUwNH0gJHtldmVudE5hbWV9IFtFdmVudCAjJHsrK21vdmVFdmVudENvdW50ZXJ9XWApOwogICAgICBjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSk7CiAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbmZpZ3VyYXRpb246IiwgewogICAgICAgIGNvbHVtbnM6IGdyaWQuY29sdW1ucywKICAgICAgICBjZWxsSGVpZ2h0OiBncmlkLmNlbGxIZWlnaHQsCiAgICAgICAgbWFyZ2luOiBncmlkLm1hcmdpbiwKICAgICAgICBlZGl0YWJsZTogZ3JpZC5lZGl0YWJsZSwKICAgICAgICBhY3RpdmVCcmVha3BvaW50OiBncmlkLmFjdGl2ZUJyZWFrcG9pbnQKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJDdXJyZW50IExheW91dDoiLCBsYXlvdXQpOwogICAgICBjb25zb2xlLmxvZygiV2lkZ2V0IENvdW50OiIsIGxheW91dC5sZW5ndGgpOwogICAgICBjb25zb2xlLmxvZygiR3JpZCBCb3VuZHM6IiwgewogICAgICAgIHRvdGFsV2lkZ2V0czogZ3JpZC53aWRnZXRzLmxlbmd0aCwKICAgICAgICBtYXhZOiBNYXRoLm1heCguLi5sYXlvdXQubWFwKCh3MykgPT4gdzMueSArIHczLmgpKSwKICAgICAgICBvY2N1cGllZDogbGF5b3V0Lm1hcCgodzMpID0+IGAke3czLmlkfTogKCR7dzMueH0sJHt3My55fSkgJHt3My53fXgke3czLmh9YCkuam9pbigiLCAiKQogICAgICB9KTsKICAgICAgaWYgKGRldGFpbHMpIHsKICAgICAgICBjb25zb2xlLmxvZygiRXZlbnQgRGV0YWlsczoiLCBkZXRhaWxzKTsKICAgICAgfQogICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICB9OwogICAgY29uc3QgcGxhY2Vob2xkZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wbGFjZWhvbGRlciIpOwogICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB7CiAgICAgICAgICBsZWZ0OiBwbGFjZWhvbGRlci5zdHlsZS5sZWZ0LAogICAgICAgICAgdG9wOiBwbGFjZWhvbGRlci5zdHlsZS50b3AsCiAgICAgICAgICB3aWR0aDogcGxhY2Vob2xkZXIuc3R5bGUud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodAogICAgICAgIH07CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQb3NpdGlvbikgIT09IEpTT04uc3RyaW5naWZ5KGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uKSkgewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJQcmV2aW91czoiLCBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbik7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ3VycmVudDoiLCBjdXJyZW50UG9zaXRpb24pOwogICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ncmlkLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGdyaWRJbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbnRhaW5lciBEaW1lbnNpb25zOiIsIHsKICAgICAgICAgICAgICB3aWR0aDogZ3JpZEluZm8uY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkSW5mby5jbGllbnRIZWlnaHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGdyaWQuc2hhZG93Um9vdCkgewogICAgICBwbGFjZWhvbGRlck9ic2VydmVyLm9ic2VydmUoZ3JpZC5zaGFkb3dSb290LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsic3R5bGUiXQogICAgICB9KTsKICAgIH0KICAgIGxvZ0dyaWRTdGF0ZSgiSW5pdGlhbCBHcmlkIFN0YXRlIik7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1tb3ZlIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBNb3ZlIiwgewogICAgICAgIHdpZGdldDogZTExLmRldGFpbC53aWRnZXQsCiAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICBzd2FwcGVkV2l0aDogZTExLmRldGFpbC5zd2FwcGVkV2l0aAogICAgICB9KTsKICAgIH0pOwogICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVzaXplIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBSZXNpemUiLCB7CiAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICBkaXNwbGFjZWQ6IGUxMS5kZXRhaWwuZGlzcGxhY2VkLAogICAgICAgIHN3YXBwZWRXaXRoOiBlMTEuZGV0YWlsLnN3YXBwZWRXaXRoCiAgICAgIH0pOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZW1vdmUiLCAoZTExKSA9PiB7CiAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlbW92ZSIsIHsKICAgICAgICByZW1vdmVkV2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldAogICAgICB9KTsKICAgICAgdXBkYXRlU3RhdHVzKCk7CiAgICB9KTsKICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigibGF5b3V0LWNoYW5nZSIsICgpID0+IHsKICAgICAgbG9nR3JpZFN0YXRlKCJMYXlvdXQgQ2hhbmdlIik7CiAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBpc0hlYWRlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLndpZGdldC1oZWFkZXIiKTsKICAgICAgY29uc3QgaXNSZXNpemVIYW5kbGUgPSBlMTEudGFyZ2V0LmNsb3Nlc3QoIi5yZXNpemUtaGFuZGxlIik7CiAgICAgIGlmIChpc0hlYWRlciB8fCBpc1Jlc2l6ZUhhbmRsZSkgewogICAgICAgIGNvbnNvbGUuZ3JvdXAoYFx1ezFGM0FGfSBJbnRlcmFjdGlvbiBTdGFydGVkOiAke2lzSGVhZGVyID8gIkRyYWciIDogIlJlc2l6ZSJ9YCk7CiAgICAgICAgY29uc29sZS5sb2coIlRhcmdldCBXaWRnZXQ6IiwgZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik/LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSk7CiAgICAgICAgY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246IiwgeyB4OiBlMTEuY2xpZW50WCwgeTogZTExLmNsaWVudFkgfSk7CiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKG1vdmVFdmVudCkgPT4gewogICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik7CiAgICAgICAgICBpZiAod2lkZ2V0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcdTIxOTRcdUZFMEYgUG9pbnRlciBNb3ZlOmAsIHsKICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSwKICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBtb3ZlRXZlbnQuY2xpZW50WCwgeTogbW92ZUV2ZW50LmNsaWVudFkgfSwKICAgICAgICAgICAgICBkZWx0YTogewogICAgICAgICAgICAgICAgeDogbW92ZUV2ZW50LmNsaWVudFggLSBlMTEuY2xpZW50WCwKICAgICAgICAgICAgICAgIHk6IG1vdmVFdmVudC5jbGllbnRZIC0gZTExLmNsaWVudFkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4gewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUYzQzF9IEludGVyYWN0aW9uIEVuZGVkIik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkZpbmFsIFN0YXRlIEFmdGVyIEludGVyYWN0aW9uIik7CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGhhbmRsZVBvaW50ZXJVcCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBoYW5kbGVQb2ludGVyVXApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG9yaWdpbmFsQWRkV2lkZ2V0ID0gZ3JpZC5hZGRXaWRnZXQuYmluZChncmlkKTsKICAgIGdyaWQuYWRkV2lkZ2V0ID0gKHdpZGdldCwgYXV0b1Bvc2l0aW9uKSA9PiB7CiAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1Mjc5NSBBZGRpbmcgV2lkZ2V0Iik7CiAgICAgIGNvbnNvbGUubG9nKCJOZXcgV2lkZ2V0OiIsIHdpZGdldCk7CiAgICAgIGNvbnNvbGUubG9nKCJBdXRvIFBvc2l0aW9uOiIsIGF1dG9Qb3NpdGlvbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQWRkV2lkZ2V0KHdpZGdldCwgYXV0b1Bvc2l0aW9uKTsKICAgICAgbG9nR3JpZFN0YXRlKCJBZnRlciBXaWRnZXQgQWRkZWQiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIGNvbnN0IG9yaWdpbmFsQ29tcGFjdCA9IGdyaWQuY29tcGFjdC5iaW5kKGdyaWQpOwogICAgZ3JpZC5jb21wYWN0ID0gKGRpcmVjdGlvbikgPT4gewogICAgICBjb25zb2xlLmdyb3VwKCJcdXsxRjVEQ31cdUZFMEYgQ29tcGFjdGluZyBHcmlkIik7CiAgICAgIGNvbnNvbGUubG9nKCJEaXJlY3Rpb246IiwgZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIpOwogICAgICBsb2dHcmlkU3RhdGUoIkJlZm9yZSBDb21wYWN0Iik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQ29tcGFjdChkaXJlY3Rpb24pOwogICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIENvbXBhY3QiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIHVwZGF0ZVN0YXR1cygpOwogIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZGVtby1jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIGRlZXMtYnV0dG9uIHsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICB9CgogICAgICAgICAgLmdyaWQtY29udGFpbmVyLXdyYXBwZXIgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBtaW4taGVpZ2h0OiA2MDBweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQoKICAgICAgICAgIC5pbmZvIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDZweDsKICAgICAgICAgIH0KCiAgICAgICAgICAjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGFzaGJvYXJkR3JpZFN0eWxlcyA9IFsKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5yZXNpemluZyB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwgIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwgIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyOmFjdGl2ZSB7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5Lmhhcy1oZWFkZXIgewogICAgICAgIHRvcDogNDVweDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAucmVzaXplLWhhbmRsZS1zZSB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3Zlcjo6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LmpzCnZhciBERUZBVUxUX01BUkdJTiA9IDEwOwp2YXIgcmVzb2x2ZU1hcmdpbnMgPSAobWFyZ2luKSA9PiB7CiAgaWYgKHR5cGVvZiBtYXJnaW4gPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gewogICAgICBob3Jpem9udGFsOiBtYXJnaW4sCiAgICAgIHZlcnRpY2FsOiBtYXJnaW4sCiAgICAgIHRvcDogbWFyZ2luLAogICAgICByaWdodDogbWFyZ2luLAogICAgICBib3R0b206IG1hcmdpbiwKICAgICAgbGVmdDogbWFyZ2luCiAgICB9OwogIH0KICBjb25zdCByZXNvbHZlZDIgPSB7CiAgICB0b3A6IG1hcmdpbi50b3AgPz8gREVGQVVMVF9NQVJHSU4sCiAgICByaWdodDogbWFyZ2luLnJpZ2h0ID8/IERFRkFVTFRfTUFSR0lOLAogICAgYm90dG9tOiBtYXJnaW4uYm90dG9tID8/IERFRkFVTFRfTUFSR0lOLAogICAgbGVmdDogbWFyZ2luLmxlZnQgPz8gREVGQVVMVF9NQVJHSU4KICB9OwogIHJldHVybiB7CiAgICAuLi5yZXNvbHZlZDIsCiAgICBob3Jpem9udGFsOiAocmVzb2x2ZWQyLmxlZnQgKyByZXNvbHZlZDIucmlnaHQpIC8gMiwKICAgIHZlcnRpY2FsOiAocmVzb2x2ZWQyLnRvcCArIHJlc29sdmVkMi5ib3R0b20pIC8gMgogIH07Cn07CnZhciBjYWxjdWxhdGVDZWxsTWV0cmljcyA9IChjb250YWluZXJXaWR0aCwgY29sdW1ucywgbWFyZ2lucywgY2VsbEhlaWdodCwgY2VsbEhlaWdodFVuaXQpID0+IHsKICBjb25zdCB0b3RhbE1hcmdpbldpZHRoID0gbWFyZ2lucy5ob3Jpem9udGFsICogKGNvbHVtbnMgKyAxKTsKICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoIC0gdG90YWxNYXJnaW5XaWR0aCwgMCk7CiAgY29uc3QgY2VsbFdpZHRoUHggPSBjb2x1bW5zID4gMCA/IGF2YWlsYWJsZVdpZHRoIC8gY29sdW1ucyA6IDA7CiAgY29uc3QgY2VsbEhlaWdodFB4ID0gY2VsbEhlaWdodFVuaXQgPT09ICJhdXRvIiA/IGNlbGxXaWR0aFB4IDogY2VsbEhlaWdodDsKICByZXR1cm4gewogICAgY29udGFpbmVyV2lkdGgsCiAgICBjZWxsV2lkdGhQeCwKICAgIG1hcmdpbkhvcml6b250YWxQeDogbWFyZ2lucy5ob3Jpem9udGFsLAogICAgY2VsbEhlaWdodFB4LAogICAgbWFyZ2luVmVydGljYWxQeDogbWFyZ2lucy52ZXJ0aWNhbAogIH07Cn07CnZhciBjYWxjdWxhdGVHcmlkSGVpZ2h0ID0gKHdpZGdldHMsIG1hcmdpbnMsIGNlbGxIZWlnaHQpID0+IHsKICBpZiAod2lkZ2V0cy5sZW5ndGggPT09IDApCiAgICByZXR1cm4gMDsKICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiBtYXhZICogY2VsbEhlaWdodCArIChtYXhZICsgMSkgKiBtYXJnaW5zLnZlcnRpY2FsOwp9Owp2YXIgb3ZlcmxhcHMgPSAod2lkZ2V0LCB4MywgeTUsIHczLCBoOSkgPT4geDMgPCB3aWRnZXQueCArIHdpZGdldC53ICYmIHgzICsgdzMgPiB3aWRnZXQueCAmJiB5NSA8IHdpZGdldC55ICsgd2lkZ2V0LmggJiYgeTUgKyBoOSA+IHdpZGdldC55Owp2YXIgY29sbGVjdENvbGxpc2lvbnMgPSAod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXID0gdGFyZ2V0LncsIG5leHRIID0gdGFyZ2V0LmgpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gewogICAgaWYgKHdpZGdldC5pZCA9PT0gdGFyZ2V0LmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3ZlcmxhcHMod2lkZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXLCBuZXh0SCk7CiAgfSk7Cn07CnZhciBjaGVja0NvbGxpc2lvbiA9ICh3aWRnZXRzLCB0YXJnZXQsIG5leHRYLCBuZXh0WSkgPT4gY29sbGVjdENvbGxpc2lvbnMod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFkpLmxlbmd0aCA+IDA7CnZhciBjbG9uZVdpZGdldCA9ICh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KTsKdmFyIGNsb25lV2lkZ2V0cyA9ICh3aWRnZXRzKSA9PiB3aWRnZXRzLm1hcChjbG9uZVdpZGdldCk7CnZhciBmaW5kQXZhaWxhYmxlUG9zaXRpb24gPSAod2lkZ2V0cywgd2lkdGgsIGhlaWdodCwgY29sdW1ucykgPT4gewogIGZvciAobGV0IHk1ID0gMDsgeTUgPCAyMDA7IHk1KyspIHsKICAgIGZvciAobGV0IHgzID0gMDsgeDMgPD0gY29sdW1ucyAtIHdpZHRoOyB4MysrKSB7CiAgICAgIGNvbnN0IGlzRnJlZSA9ICF3aWRnZXRzLnNvbWUoKHdpZGdldCkgPT4gb3ZlcmxhcHMod2lkZ2V0LCB4MywgeTUsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgaWYgKGlzRnJlZSkgewogICAgICAgIHJldHVybiB7IHg6IHgzLCB5OiB5NSB9OwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IG1heFkgPSB3aWRnZXRzLnJlZHVjZSgoYWNjLCB3aWRnZXQpID0+IE1hdGgubWF4KGFjYywgd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiB7IHg6IDAsIHk6IG1heFkgfTsKfTsKdmFyIHJlc29sdmVXaWRnZXRQbGFjZW1lbnQgPSAod2lkZ2V0cywgd2lkZ2V0SWQsIG5leHQyLCBjb2x1bW5zLCBwcmV2aW91c1Bvc2l0aW9uKSA9PiB7CiAgY29uc3Qgc291cmNlV2lkZ2V0cyA9IGNsb25lV2lkZ2V0cyh3aWRnZXRzKTsKICBjb25zdCBtb3ZpbmcgPSBzb3VyY2VXaWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgY29uc3Qgb3JpZ2luYWwgPSB3aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgaWYgKCFtb3ZpbmcgfHwgIW9yaWdpbmFsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgdGFyZ2V0ID0gewogICAgeDogbmV4dDIueCwKICAgIHk6IG5leHQyLnksCiAgICB3OiBuZXh0Mi53ID8/IG1vdmluZy53LAogICAgaDogbmV4dDIuaCA/PyBtb3ZpbmcuaAogIH07CiAgbW92aW5nLnggPSB0YXJnZXQueDsKICBtb3ZpbmcueSA9IHRhcmdldC55OwogIG1vdmluZy53ID0gdGFyZ2V0Lnc7CiAgbW92aW5nLmggPSB0YXJnZXQuaDsKICBjb25zdCBjb2xsaXNpb25zID0gY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgbW92aW5nLCB0YXJnZXQueCwgdGFyZ2V0LnksIHRhcmdldC53LCB0YXJnZXQuaCk7CiAgaWYgKGNvbGxpc2lvbnMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IFttb3ZpbmcuaWRdIH07CiAgfQogIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMSkgewogICAgY29uc3Qgb3RoZXIgPSBjb2xsaXNpb25zWzBdOwogICAgaWYgKCFvdGhlci5sb2NrZWQgJiYgIW90aGVyLm5vTW92ZSAmJiBvdGhlci53ID09PSBtb3ZpbmcudyAmJiBvdGhlci5oID09PSBtb3ZpbmcuaCkgewogICAgICBjb25zdCBvdGhlckNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb3RoZXIuaWQpOwogICAgICBpZiAob3RoZXJDbG9uZSkgewogICAgICAgIGNvbnN0IHN3YXBUYXJnZXQgPSBvcmlnaW5hbDsKICAgICAgICBjb25zdCBwcmV2aW91c090aGVyUG9zaXRpb24gPSB7IHg6IG90aGVyQ2xvbmUueCwgeTogb3RoZXJDbG9uZS55IH07CiAgICAgICAgb3RoZXJDbG9uZS54ID0gc3dhcFRhcmdldC54OwogICAgICAgIG90aGVyQ2xvbmUueSA9IHN3YXBUYXJnZXQueTsKICAgICAgICBjb25zdCBzd2FwVmFsaWQgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKS5sZW5ndGggPT09IDAgJiYgY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgb3RoZXJDbG9uZSwgb3RoZXJDbG9uZS54LCBvdGhlckNsb25lLnksIG90aGVyQ2xvbmUudywgb3RoZXJDbG9uZS5oKS5sZW5ndGggPT09IDA7CiAgICAgICAgaWYgKHN3YXBWYWxpZCkgewogICAgICAgICAgcmV0dXJuIHsgd2lkZ2V0czogc291cmNlV2lkZ2V0cywgbW92ZWRXaWRnZXRzOiBbbW92aW5nLmlkLCBvdGhlckNsb25lLmlkXSwgc3dhcHBlZFdpdGg6IG90aGVyQ2xvbmUuaWQgfTsKICAgICAgICB9CiAgICAgICAgb3RoZXJDbG9uZS54ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLng7CiAgICAgICAgb3RoZXJDbG9uZS55ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLnk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgbW92ZWRJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbbW92aW5nLmlkXSk7CiAgZm9yIChjb25zdCBvZmZlbmRpbmcgb2YgY29sbGlzaW9ucykgewogICAgaWYgKG9mZmVuZGluZy5sb2NrZWQgfHwgb2ZmZW5kaW5nLm5vTW92ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb2ZmZW5kaW5nLmlkKTsKICAgIGlmICghY2xvbmUpCiAgICAgIGNvbnRpbnVlOwogICAgY29uc3QgcmVtYWluaW5nID0gc291cmNlV2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LmlkICE9PSBvZmZlbmRpbmcuaWQpOwogICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHJlbWFpbmluZywgY2xvbmUudywgY2xvbmUuaCwgY29sdW1ucyk7CiAgICBjbG9uZS54ID0gcG9zaXRpb24zLng7CiAgICBjbG9uZS55ID0gcG9zaXRpb24zLnk7CiAgICBtb3ZlZElkcy5hZGQoY2xvbmUuaWQpOwogIH0KICBjb25zdCB2ZXJpZnkgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKTsKICBpZiAodmVyaWZ5Lmxlbmd0aCA+IDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IEFycmF5LmZyb20obW92ZWRJZHMpIH07Cn07CnZhciBjb21wYWN0TGF5b3V0ID0gKHdpZGdldHMsIGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpID0+IHsKICBjb25zdCBzb3J0ZWQgPSBbLi4ud2lkZ2V0c10uc29ydCgoYTUsIGI1KSA9PiB7CiAgICBpZiAoZGlyZWN0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgIGlmIChhNS55ICE9PSBiNS55KQogICAgICAgIHJldHVybiBhNS55IC0gYjUueTsKICAgICAgcmV0dXJuIGE1LnggLSBiNS54OwogICAgfQogICAgaWYgKGE1LnggIT09IGI1LngpCiAgICAgIHJldHVybiBhNS54IC0gYjUueDsKICAgIHJldHVybiBhNS55IC0gYjUueTsKICB9KTsKICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHsKICAgIGlmICh3aWRnZXQubG9ja2VkIHx8IHdpZGdldC5ub01vdmUpCiAgICAgIGNvbnRpbnVlOwogICAgaWYgKGRpcmVjdGlvbiA9PT0gInZlcnRpY2FsIikgewogICAgICB3aGlsZSAod2lkZ2V0LnkgPiAwICYmICFjaGVja0NvbGxpc2lvbih3aWRnZXRzLCB3aWRnZXQsIHdpZGdldC54LCB3aWRnZXQueSAtIDEpKSB7CiAgICAgICAgd2lkZ2V0LnkgLT0gMTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHdpZGdldC54ID4gMCAmJiAhY2hlY2tDb2xsaXNpb24od2lkZ2V0cywgd2lkZ2V0LCB3aWRnZXQueCAtIDEsIHdpZGdldC55KSkgewogICAgICAgIHdpZGdldC54IC09IDE7CiAgICAgIH0KICAgIH0KICB9Cn07CnZhciBhcHBseUxheW91dCA9ICh3aWRnZXRzLCBsYXlvdXQpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gewogICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgcmV0dXJuIGxheW91dEl0ZW0gPyB7IC4uLndpZGdldCwgLi4ubGF5b3V0SXRlbSB9IDogd2lkZ2V0OwogIH0pOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvaW50ZXJhY3Rpb24uanMKdmFyIGNvbXB1dGVHcmlkQ29vcmRpbmF0ZXMgPSAoeyBwb2ludGVyLCBjb250YWluZXJSZWN0LCBtZXRyaWNzLCBjb2x1bW5zLCB3aWRnZXQsIHJ0bCwgZHJhZ09mZnNldFggPSAwLCBkcmFnT2Zmc2V0WSA9IDAgfSkgPT4gewogIGNvbnN0IHJlbGF0aXZlWCA9IHBvaW50ZXIuY2xpZW50WCAtIGNvbnRhaW5lclJlY3QubGVmdCAtIGRyYWdPZmZzZXRYOwogIGNvbnN0IHJlbGF0aXZlWSA9IHBvaW50ZXIuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wIC0gZHJhZ09mZnNldFk7CiAgY29uc3QgbWFyZ2luWCA9IG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IG1hcmdpblkgPSBtZXRyaWNzLm1hcmdpblZlcnRpY2FsUHg7CiAgY29uc3QgY2VsbFdpZHRoID0gbWV0cmljcy5jZWxsV2lkdGhQeDsKICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgY29uc3QgY2xhbXAzID0gKHZhbHVlMiwgbWluMywgbWF4MykgPT4gTWF0aC5tYXgobWluMywgTWF0aC5taW4obWF4MywgdmFsdWUyKSk7CiAgY29uc3QgYWRqdXN0ZWRYID0gY2xhbXAzKHJlbGF0aXZlWCAtIG1hcmdpblgsIDAsIGNvbnRhaW5lclJlY3Qud2lkdGggLSBtYXJnaW5YKTsKICBjb25zdCBhZGp1c3RlZFkgPSBjbGFtcDMocmVsYXRpdmVZIC0gbWFyZ2luWSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICBjb25zdCBjZWxsUGx1c01hcmdpblggPSBjZWxsV2lkdGggKyBtYXJnaW5YOwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IGNlbGxIZWlnaHQgKyBtYXJnaW5ZOwogIGxldCBncmlkWCA9IE1hdGgucm91bmQoYWRqdXN0ZWRYIC8gY2VsbFBsdXNNYXJnaW5YKTsKICBpZiAocnRsKSB7CiAgICBncmlkWCA9IGNvbHVtbnMgLSB3aWRnZXQudyAtIGdyaWRYOwogIH0KICBncmlkWCA9IGNsYW1wMyhncmlkWCwgMCwgY29sdW1ucyAtIHdpZGdldC53KTsKICBjb25zdCBncmlkWSA9IGNsYW1wMyhNYXRoLnJvdW5kKGFkanVzdGVkWSAvIGNlbGxQbHVzTWFyZ2luWSksIDAsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICByZXR1cm4geyB4OiBncmlkWCwgeTogZ3JpZFkgfTsKfTsKdmFyIGNvbXB1dGVSZXNpemVEaW1lbnNpb25zID0gKHsgcG9pbnRlciwgY29udGFpbmVyUmVjdCwgbWV0cmljcywgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQsIHN0YXJ0UG9pbnRlciwgaGFuZGxlcjogaGFuZGxlcjIsIHdpZGdldCwgY29sdW1ucyB9KSA9PiB7CiAgY29uc3QgZGVsdGFYID0gcG9pbnRlci5jbGllbnRYIC0gc3RhcnRQb2ludGVyLmNsaWVudFg7CiAgY29uc3QgZGVsdGFZID0gcG9pbnRlci5jbGllbnRZIC0gc3RhcnRQb2ludGVyLmNsaWVudFk7CiAgbGV0IHdpZHRoID0gc3RhcnRXaWR0aDsKICBsZXQgaGVpZ2h0ID0gc3RhcnRIZWlnaHQ7CiAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IG1ldHJpY3MuY2VsbEhlaWdodFB4ICsgbWV0cmljcy5tYXJnaW5WZXJ0aWNhbFB4OwogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygiZSIpKSB7CiAgICBjb25zdCBkZWx0YUNvbHMgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIGNlbGxQbHVzTWFyZ2luWCk7CiAgICB3aWR0aCA9IHN0YXJ0V2lkdGggKyBkZWx0YUNvbHM7CiAgfQogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygicyIpKSB7CiAgICBjb25zdCBkZWx0YVJvd3MgPSBNYXRoLnJvdW5kKGRlbHRhWSAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICBoZWlnaHQgPSBzdGFydEhlaWdodCArIGRlbHRhUm93czsKICB9CiAgY29uc3QgY2xhbXBlZFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgfHwgMSwgTWF0aC5taW4od2lkdGgsIHdpZGdldC5tYXhXIHx8IGNvbHVtbnMgLSB3aWRnZXQueCkpOwogIGNvbnN0IGNsYW1wZWRIZWlnaHQgPSBNYXRoLm1heCh3aWRnZXQubWluSCB8fCAxLCBNYXRoLm1pbihoZWlnaHQsIHdpZGdldC5tYXhIIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSk7CiAgcmV0dXJuIHsKICAgIHdpZHRoOiBjbGFtcGVkV2lkdGgsCiAgICBoZWlnaHQ6IGNsYW1wZWRIZWlnaHQKICB9Owp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUuanMKdmFyIG9wZW5XaWRnZXRDb250ZXh0TWVudSA9ICh7IHdpZGdldCwgaG9zdCwgZXZlbnQgfSkgPT4gewogIGNvbnN0IGl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRGVsZXRlIHRpbGUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBob3N0LnJlbW92ZVdpZGdldCh3aWRnZXQuaWQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgXTsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIGl0ZW1zKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNzUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGFzaGJvYXJkZ3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGFzaGJvYXJkZ3JpZCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3dpZGdldHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jZWxsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFyZ2luX2RlY29yYXRvcnM7CiAgbGV0IF9tYXJnaW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXJnaW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9kZWNvcmF0b3JzOwogIGxldCBfZWRpdGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVBbmltYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydGxfZGVjb3JhdG9yczsKICBsZXQgX3J0bF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J0bF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dHNfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9yczsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Rhc2hib2FyZGdyaWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfd2lkZ2V0c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfY2VsbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21hcmdpbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2NvbHVtbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9lZGl0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lbmFibGVBbmltYXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9ydGxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9sYXlvdXRzX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZXRyaWNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3ByZXZpZXdXaWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfY2VsbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjZWxsSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNlbGxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNlbGxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodF9pbml0aWFsaXplcnMsIF9jZWxsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21hcmdpbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXJnaW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1hcmdpbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXJnaW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1hcmdpbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCBfbWFyZ2luX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NvbHVtbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sdW1ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sdW1ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2x1bW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb2x1bW5zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9lZGl0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0YWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGFibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZWRpdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRhYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VkaXRhYmxlX2luaXRpYWxpemVycywgX2VkaXRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2VuYWJsZUFuaW1hdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVBbmltYXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZUFuaW1hdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVBbmltYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZUFuaW1hdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNlbGxIZWlnaHRVbml0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0VW5pdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jZWxsSGVpZ2h0VW5pdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2VsbEhlaWdodFVuaXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCBfY2VsbEhlaWdodFVuaXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcnRsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ0bCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicnRsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ0bCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnRsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3J0bF9pbml0aWFsaXplcnMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93R3JpZExpbmVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93R3JpZExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkTGluZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dHcmlkTGluZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMsIF9zaG93R3JpZExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2xheW91dHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZUJyZWFrcG9pbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZUJyZWFrcG9pbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQnJlYWtwb2ludCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlQnJlYWtwb2ludCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycywgX2FjdGl2ZUJyZWFrcG9pbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWV0cmljcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWV0cmljcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZXRyaWNzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVzb2x2ZWRNYXJnaW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXNvbHZlZE1hcmdpbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRNYXJnaW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZXNvbHZlZE1hcmdpbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVzb2x2ZWRNYXJnaW5zX2luaXRpYWxpemVycywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcmV2aWV3V2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJldmlld1dpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJldmlld1dpZGdldHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByZXZpZXdXaWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgX3ByZXZpZXdXaWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ2OwogICAgc3RhdGljIHN0eWxlcyA9IGRhc2hib2FyZEdyaWRTdHlsZXM7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfaW5pdGlhbGl6ZXJzLCA4MCkpOwogICAgZ2V0IGNlbGxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2VsbEhlaWdodCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCAxMCkpOwogICAgZ2V0IG1hcmdpbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hcmdpbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFyZ2luX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCAxMikpOwogICAgZ2V0IGNvbHVtbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sdW1ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VkaXRhYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGVkaXRhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VuYWJsZUFuaW1hdGlvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBlbmFibGVBbmltYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbmFibGVBbmltYXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2VuYWJsZUFuaW1hdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCAicHgiKSk7CiAgICBnZXQgY2VsbEhlaWdodFVuaXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNlbGxIZWlnaHRVbml0KHZhbHVlMikgewogICAgICB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfcnRsX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBydGwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydGwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9zaG93R3JpZExpbmVzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93R3JpZExpbmVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dHcmlkTGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBsYXlvdXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jbGF5b3V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxheW91dHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xheW91dHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCcmVha3BvaW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2FjdGl2ZUJyZWFrcG9pbnRfaW5pdGlhbGl6ZXJzLCAiYmFzZSIpKTsKICAgIGdldCBhY3RpdmVCcmVha3BvaW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJyZWFrcG9pbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZUJyZWFrcG9pbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlclBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tZXRyaWNzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IG1ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWV0cmljcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Jlc29sdmVkTWFyZ2luc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9yZXNvbHZlZE1hcmdpbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcmVzb2x2ZWRNYXJnaW5zKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVzb2x2ZWRNYXJnaW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVzb2x2ZWRNYXJnaW5zKHZhbHVlMikgewogICAgICB0aGlzLiNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwcmV2aWV3V2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHByZXZpZXdXaWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcmV2aWV3V2lkZ2V0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnRhaW5lckJvdW5kcyA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZHJhZ1N0YXRlID0gbnVsbDsKICAgIHJlc2l6ZVN0YXRlID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIHRoaXMub2JzZXJ2ZVJlc2l6ZSgpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7CiAgICAgIHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKTsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZCkgewogICAgICBpZiAoY2hhbmdlZC5oYXMoIm1hcmdpbiIpIHx8IGNoYW5nZWQuaGFzKCJjb2x1bW5zIikgfHwgY2hhbmdlZC5oYXMoImNlbGxIZWlnaHQiKSB8fCBjaGFuZ2VkLmhhcygiY2VsbEhlaWdodFVuaXQiKSkgewogICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZC5oYXMoIndpZGdldHMiKSAmJiAhdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSkgewogICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Q2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYmFzZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgIGlmIChiYXNlV2lkZ2V0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGF5b3V0R3JpZCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGRpdj5ObyB3aWRnZXRzIGNvbmZpZ3VyZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+QWRkIHdpZGdldHMgdG8gcG9wdWxhdGUgdGhlIGRhc2hib2FyZDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICB9CiAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgY29uc3QgbWFyZ2lucyA9IHRoaXMucmVzb2x2ZWRNYXJnaW5zID8/IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICBjb25zdCBsYXlvdXRGb3JIZWlnaHQgPSB0aGlzLnByZXZpZXdXaWRnZXRzID8/IHRoaXMud2lkZ2V0czsKICAgICAgY29uc3QgZ3JpZEhlaWdodCA9IGNhbGN1bGF0ZUdyaWRIZWlnaHQobGF5b3V0Rm9ySGVpZ2h0LCBtYXJnaW5zLCBjZWxsSGVpZ2h0KTsKICAgICAgY29uc3QgcHJldmlld01hcCA9IHRoaXMucHJldmlld1dpZGdldHMgPyBuZXcgTWFwKHRoaXMucHJldmlld1dpZGdldHMubWFwKCh3aWRnZXQpID0+IFt3aWRnZXQuaWQsIHdpZGdldF0pKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6ICR7Z3JpZEhlaWdodH1weDsiPgogICAgICAgICR7dGhpcy5zaG93R3JpZExpbmVzID8gdGhpcy5yZW5kZXJHcmlkTGluZXMobWV0cmljcywgZ3JpZEhlaWdodCkgOiBudWxsfQogICAgICAgICR7YmFzZVdpZGdldHMubWFwKCh3aWRnZXQpID0+IHRoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkpfQogICAgICAgICR7dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID8gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcihtZXRyaWNzLCBtYXJnaW5zKSA6IG51bGx9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyaWRMaW5lcyhtZXRyaWNzLCBncmlkSGVpZ2h0KSB7CiAgICAgIGNvbnN0IHZlcnRpY2FsID0gW107CiAgICAgIGNvbnN0IGhvcml6b250YWwgPSBbXTsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBjZWxsUGx1c01hcmdpblkgPSBtZXRyaWNzLmNlbGxIZWlnaHRQeCArIG1ldHJpY3MubWFyZ2luVmVydGljYWxQeDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDw9IHRoaXMuY29sdW1uczsgaTExKyspIHsKICAgICAgICBjb25zdCBsZWZ0UHggPSBpMTEgKiBjZWxsUGx1c01hcmdpblggKyBtZXRyaWNzLm1hcmdpbkhvcml6b250YWxQeDsKICAgICAgICBjb25zdCBsZWZ0UGVyY2VudCA9IHRoaXMucHhUb1BlcmNlbnQobGVmdFB4LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgICB2ZXJ0aWNhbC5wdXNoKGIyYDxkaXYgY2xhc3M9ImdyaWQtbGluZS12ZXJ0aWNhbCIgc3R5bGU9ImxlZnQ6ICR7bGVmdFBlcmNlbnR9JTsiPjwvZGl2PmApOwogICAgICB9CiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoZ3JpZEhlaWdodCAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSByb3dzOyByb3crKykgewogICAgICAgIGNvbnN0IHRvcCA9IHJvdyAqIGNlbGxQbHVzTWFyZ2luWTsKICAgICAgICBob3Jpem9udGFsLnB1c2goYjJgPGRpdiBjbGFzcz0iZ3JpZC1saW5lLWhvcml6b250YWwiIHN0eWxlPSJ0b3A6ICR7dG9wfXB4OyI+PC9kaXY+YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke3ZlcnRpY2FsfQogICAgICAgICR7aG9yaXpvbnRhbH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkgewogICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGU/LndpZGdldElkID09PSB3aWRnZXQuaWQ7CiAgICAgIGNvbnN0IGlzUmVzaXppbmcgPSB0aGlzLnJlc2l6ZVN0YXRlPy53aWRnZXRJZCA9PT0gd2lkZ2V0LmlkOwogICAgICBjb25zdCBpc0xvY2tlZCA9IHdpZGdldC5sb2NrZWQgfHwgIXRoaXMuZWRpdGFibGU7CiAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwcmV2aWV3TWFwPy5nZXQod2lkZ2V0LmlkKSA/PyBudWxsOwogICAgICBjb25zdCBsYXlvdXRGb3JSZW5kZXIgPSBpc0RyYWdnaW5nID8gd2lkZ2V0IDogcHJldmlld1dpZGdldCA/PyB3aWRnZXQ7CiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbXB1dGVXaWRnZXRSZWN0KGxheW91dEZvclJlbmRlciwgbWV0cmljcywgbWFyZ2lucyk7CiAgICAgIGNvbnN0IHNpZGVQcm9wZXJ0eSA9IHRoaXMucnRsID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgICAgY29uc3Qgc2lkZVZhbHVlID0gdGhpcy5weFRvUGVyY2VudChyZWN0LmxlZnQsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3Qud2lkdGgsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBsZXQgdHJhbnNmb3JtMiA9ICIiOwogICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmRyYWdTdGF0ZT8uY3VycmVudFBvaW50ZXIpIHsKICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5kcmFnU3RhdGUuY3VycmVudFBvaW50ZXI7CiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB0cmFuc2xhdGVYID0gcG9pbnRlci5jbGllbnRYIC0gYm91bmRzLmxlZnQgLSB0aGlzLmRyYWdTdGF0ZS5vZmZzZXRYIC0gcmVjdC5sZWZ0OwogICAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSBwb2ludGVyLmNsaWVudFkgLSBib3VuZHMudG9wIC0gdGhpcy5kcmFnU3RhdGUub2Zmc2V0WSAtIHJlY3QudG9wOwogICAgICAgIHRyYW5zZm9ybTIgPSBgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpO2A7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7aXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0gJHtpc1Jlc2l6aW5nID8gInJlc2l6aW5nIiA6ICIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke3NpZGVQcm9wZXJ0eX06ICR7c2lkZVZhbHVlfSU7CiAgICAgICAgICB0b3A6ICR7cmVjdC50b3B9cHg7CiAgICAgICAgICB3aWR0aDogJHt3aWR0aFBlcmNlbnR9JTsKICAgICAgICAgIGhlaWdodDogJHtyZWN0LmhlaWdodH1weDsKICAgICAgICAgICR7dHJhbnNmb3JtMn0KICAgICAgICAiCiAgICAgICAgZGF0YS13aWRnZXQtaWQ9JHt3aWRnZXQuaWR9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+CiAgICAgICAgICAke3dpZGdldC50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0id2lkZ2V0LWhlYWRlciAke2lzTG9ja2VkID8gImxvY2tlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IChldnQpID0+IHRoaXMuc3RhcnREcmFnKGV2dCwgd2lkZ2V0KSA6IG51bGx9CiAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldnQpID0+IHRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgICB0YWJpbmRleD0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IDAgOiAtMX0KICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0KSA9PiB0aGlzLmhhbmRsZUhlYWRlcktleWRvd24oZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke3dpZGdldC5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3dpZGdldC5pY29ufT48L2RlZXMtaWNvbj5gIDogbnVsbH0KICAgICAgICAgICAgICAgICAgJHt3aWRnZXQudGl0bGV9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1ib2R5ICR7d2lkZ2V0LnRpdGxlID8gImhhcy1oZWFkZXIiIDogIiJ9Ij4KICAgICAgICAgICAgJHt3aWRnZXQuY29udGVudH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHshaXNMb2NrZWQgJiYgIXdpZGdldC5ub1Jlc2l6ZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLWUiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyhldnQpID0+IHRoaXMuc3RhcnRSZXNpemUoZXZ0LCB3aWRnZXQsICJlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtcyIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInMiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInNlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYCA6IG51bGx9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclBsYWNlaG9sZGVyKG1ldHJpY3MsIG1hcmdpbnMpIHsKICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24pIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5jb21wdXRlV2lkZ2V0UmVjdCh0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24sIG1ldHJpY3MsIG1hcmdpbnMpOwogICAgICBjb25zdCBzaWRlUHJvcGVydHkgPSB0aGlzLnJ0bCA/ICJyaWdodCIgOiAibGVmdCI7CiAgICAgIGNvbnN0IHNpZGVWYWx1ZSA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC5sZWZ0LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gdGhpcy5weFRvUGVyY2VudChyZWN0LndpZHRoLCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0IHBsYWNlaG9sZGVyIgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhcnREcmFnKGV2ZW50LCB3aWRnZXQpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlIHx8IHdpZGdldC5ub01vdmUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3Qgd2lkZ2V0RWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmdyaWQtd2lkZ2V0Iik7CiAgICAgIGlmICghd2lkZ2V0RWxlbWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5jb250YWluZXJCb3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gd2lkZ2V0UmVjdC5sZWZ0LAogICAgICAgIG9mZnNldFk6IGV2ZW50LmNsaWVudFkgLSB3aWRnZXRSZWN0LnRvcCwKICAgICAgICBzdGFydDogeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9LAogICAgICAgIHByZXZpb3VzUG9zaXRpb246IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICBjdXJyZW50UG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgbGFzdFBsYWNlbWVudDogbnVsbAogICAgICB9OwogICAgICB0aGlzLmludGVyYWN0aW9uQWN0aXZlID0gdHJ1ZTsKICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuaGFuZGxlRHJhZ01vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZURyYWdFbmQpOwogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH07CiAgICB9CiAgICBoYW5kbGVEcmFnTW92ZSA9IChldmVudCkgPT4gewogICAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ1N0YXRlLndpZGdldElkKTsKICAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgcmV0dXJuOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBwcmV2aW91c1Bvc2l0aW9uID0gdGhpcy5kcmFnU3RhdGUucHJldmlvdXNQb3NpdGlvbjsKICAgICAgY29uc3QgY29vcmRzID0gY29tcHV0ZUdyaWRDb29yZGluYXRlcyh7CiAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgY29udGFpbmVyUmVjdDogdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKICAgICAgICBtZXRyaWNzLAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucywKICAgICAgICB3aWRnZXQsCiAgICAgICAgcnRsOiB0aGlzLnJ0bCwKICAgICAgICBkcmFnT2Zmc2V0WDogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCwKICAgICAgICBkcmFnT2Zmc2V0WTogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WQogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55IH0sIHRoaXMuY29sdW1ucywgcHJldmlvdXNQb3NpdGlvbik7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICBjb25zdCB1cGRhdGVkV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0LmlkKTsKICAgICAgICB0aGlzLmRyYWdTdGF0ZSA9IHsKICAgICAgICAgIC4uLnRoaXMuZHJhZ1N0YXRlLAogICAgICAgICAgY3VycmVudFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgICAgbGFzdFBsYWNlbWVudDogcGxhY2VtZW50LAogICAgICAgICAgcHJldmlvdXNQb3NpdGlvbjogdXBkYXRlZFdpZGdldCA/IHsgaWQ6IHVwZGF0ZWRXaWRnZXQuaWQsIHg6IHVwZGF0ZWRXaWRnZXQueCwgeTogdXBkYXRlZFdpZGdldC55LCB3OiB1cGRhdGVkV2lkZ2V0LncsIGg6IHVwZGF0ZWRXaWRnZXQuaCB9IDogeyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0geyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfTsKICAgIGhhbmRsZURyYWdFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZHJhZ1N0YXRlID0gdGhpcy5kcmFnU3RhdGU7CiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gZHJhZ1N0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPz8gZHJhZ1N0YXRlLnN0YXJ0OwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KGxheW91dFNvdXJjZSwgZHJhZ1N0YXRlLndpZGdldElkLCB7IHg6IHRhcmdldC54LCB5OiB0YXJnZXQueSB9LCB0aGlzLmNvbHVtbnMsIGRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIGNvbnN0IGZpbmFsV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgodzMpID0+IHczLmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQpOwogICAgICAgIGlmIChmaW5hbFdpZGdldCkgewogICAgICAgICAgY29uc3QgaGFzT3ZlcmxhcCA9IHBsYWNlbWVudC53aWRnZXRzLnNvbWUoKHczKSA9PiB7CiAgICAgICAgICAgIGlmICh3My5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZpbmFsV2lkZ2V0LnggPCB3My54ICsgdzMudyAmJiBmaW5hbFdpZGdldC54ICsgZmluYWxXaWRnZXQudyA+IHczLnggJiYgZmluYWxXaWRnZXQueSA8IHczLnkgKyB3My5oICYmIGZpbmFsV2lkZ2V0LnkgKyBmaW5hbFdpZGdldC5oID4gdzMueTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFoYXNPdmVybGFwKSB7CiAgICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgZHJhZ1N0YXRlLndpZGdldElkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgeDogZHJhZ1N0YXRlLnN0YXJ0LngsIHk6IGRyYWdTdGF0ZS5zdGFydC55IH0gOiB3aWRnZXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkID8geyAuLi53aWRnZXQsIHg6IGRyYWdTdGF0ZS5zdGFydC54LCB5OiBkcmFnU3RhdGUuc3RhcnQueSB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLmRyYWdTdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgfTsKICAgIHN0YXJ0UmVzaXplKGV2ZW50LCB3aWRnZXQsIGhhbmRsZXIyKSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9SZXNpemUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy5lbnN1cmVNZXRyaWNzKCk7CiAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBoYW5kbGVyOiBoYW5kbGVyMiwKICAgICAgICBzdGFydFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIHN0YXJ0OiB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH0sCiAgICAgICAgc3RhcnRXaWR0aDogd2lkZ2V0LncsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHdpZGdldC5oLAogICAgICAgIGxhc3RQbGFjZW1lbnQ6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IHRydWU7CiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfTsKICAgIH0KICAgIGhhbmRsZVJlc2l6ZU1vdmUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6ZVN0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpOwogICAgICBpZiAoIXdpZGdldCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5leHRTaXplID0gY29tcHV0ZVJlc2l6ZURpbWVuc2lvbnMoewogICAgICAgIHBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgbWV0cmljcywKICAgICAgICBzdGFydFdpZHRoOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0V2lkdGgsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRIZWlnaHQsCiAgICAgICAgc3RhcnRQb2ludGVyOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlciwKICAgICAgICBoYW5kbGVyOiB0aGlzLnJlc2l6ZVN0YXRlLmhhbmRsZXIsCiAgICAgICAgd2lkZ2V0LAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucwogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiBuZXh0U2l6ZS53aWR0aCwgaDogbmV4dFNpemUuaGVpZ2h0IH0sIHRoaXMuY29sdW1ucywgdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICB0aGlzLnJlc2l6ZVN0YXRlID0geyAuLi50aGlzLnJlc2l6ZVN0YXRlLCBsYXN0UGxhY2VtZW50OiBwbGFjZW1lbnQgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0gewogICAgICAgICAgICBpZDogd2lkZ2V0LmlkLAogICAgICAgICAgICB4OiB3aWRnZXQueCwKICAgICAgICAgICAgeTogd2lkZ2V0LnksCiAgICAgICAgICAgIHc6IG5leHRTaXplLndpZHRoLAogICAgICAgICAgICBoOiBuZXh0U2l6ZS5oZWlnaHQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9OwogICAgaGFuZGxlUmVzaXplRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc2l6ZVN0YXRlID0gdGhpcy5yZXNpemVTdGF0ZTsKICAgICAgaWYgKCFyZXNpemVTdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNpemVTdGF0ZS5sYXN0UGxhY2VtZW50ID8/IHJlc29sdmVXaWRnZXRQbGFjZW1lbnQobGF5b3V0U291cmNlLCByZXNpemVTdGF0ZS53aWRnZXRJZCwgewogICAgICAgIHg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueCA/PyByZXNpemVTdGF0ZS5zdGFydC54LAogICAgICAgIHk6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueSA/PyByZXNpemVTdGF0ZS5zdGFydC55LAogICAgICAgIHc6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8udyA/PyByZXNpemVTdGF0ZS5zdGFydC53LAogICAgICAgIGg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8uaCA/PyByZXNpemVTdGF0ZS5zdGFydC5oCiAgICAgIH0sIHRoaXMuY29sdW1ucywgcmVzaXplU3RhdGUuc3RhcnQpOwogICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCByZXNpemVTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1yZXNpemUiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gcmVzaXplU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgdzogcmVzaXplU3RhdGUuc3RhcnQudywgaDogcmVzaXplU3RhdGUuc3RhcnQuaCB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLnJlc2l6ZVN0YXRlID0gbnVsbDsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICB0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCk7CiAgICB9OwogICAgaGFuZGxlSGVhZGVyS2V5ZG93bihldmVudCwgd2lkZ2V0KSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9Nb3ZlIHx8IHdpZGdldC5sb2NrZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qga2V5MiA9IGV2ZW50LmtleTsKICAgICAgY29uc3QgaXNSZXNpemUgPSBldmVudC5zaGlmdEtleTsKICAgICAgbGV0IHBsYWNlbWVudCA9IG51bGw7CiAgICAgIGlmIChpc1Jlc2l6ZSAmJiBbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoa2V5MikpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGRlbHRhMiA9IGtleTIgPT09ICJBcnJvd1JpZ2h0IiB8fCBrZXkyID09PSAiQXJyb3dEb3duIiA/IDEgOiAtMTsKICAgICAgICBpZiAoa2V5MiA9PT0gIkFycm93TGVmdCIgfHwga2V5MiA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHdpZGdldC5tYXhXID8/IHRoaXMuY29sdW1ucyAtIHdpZGdldC54OwogICAgICAgICAgY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgPz8gMSwgTWF0aC5taW4obWF4V2lkdGgsIHdpZGdldC53ICsgZGVsdGEyKSk7CiAgICAgICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogbmV4dFdpZHRoLCBoOiB3aWRnZXQuaCB9LCB0aGlzLmNvbHVtbnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB3aWRnZXQubWF4SCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBuZXh0SGVpZ2h0ID0gTWF0aC5tYXgod2lkZ2V0Lm1pbkggPz8gMSwgTWF0aC5taW4obWF4SGVpZ2h0LCB3aWRnZXQuaCArIGRlbHRhMikpOwogICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiBuZXh0SGVpZ2h0IH0sIHRoaXMuY29sdW1ucyk7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LXJlc2l6ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbW92ZU1hcCA9IHsKICAgICAgICBBcnJvd0xlZnQ6IHsgZHg6IC0xLCBkeTogMCB9LAogICAgICAgIEFycm93UmlnaHQ6IHsgZHg6IDEsIGR5OiAwIH0sCiAgICAgICAgQXJyb3dVcDogeyBkeDogMCwgZHk6IC0xIH0sCiAgICAgICAgQXJyb3dEb3duOiB7IGR4OiAwLCBkeTogMSB9CiAgICAgIH07CiAgICAgIGNvbnN0IGRlbHRhID0gbW92ZU1hcFtrZXkyXTsKICAgICAgaWYgKCFkZWx0YSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCB0YXJnZXRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5jb2x1bW5zIC0gd2lkZ2V0LncsIHdpZGdldC54ICsgZGVsdGEuZHgpKTsKICAgICAgY29uc3QgdGFyZ2V0WSA9IE1hdGgubWF4KDAsIHdpZGdldC55ICsgZGVsdGEuZHkpOwogICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHRhcmdldFgsIHk6IHRhcmdldFkgfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZlbnQsIHdpZGdldCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgb3BlbldpZGdldENvbnRleHRNZW51KHsgd2lkZ2V0LCBob3N0OiB0aGlzLCBldmVudCB9KTsKICAgIH0KICAgIGNvbW1pdFBsYWNlbWVudChyZXN1bHQsIHdpZGdldElkLCB0eXBlNSkgewogICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgdGhpcy53aWRnZXRzID0gcmVzdWx0LndpZGdldHM7CiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICBpZiAoc3ViamVjdCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodHlwZTUsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICB3aWRnZXQ6IHN1YmplY3QsCiAgICAgICAgICAgIGRpc3BsYWNlZDogcmVzdWx0Lm1vdmVkV2lkZ2V0cy5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gd2lkZ2V0SWQpLAogICAgICAgICAgICBzd2FwcGVkV2l0aDogcmVzdWx0LnN3YXBwZWRXaXRoCiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICByZW1vdmVXaWRnZXQod2lkZ2V0SWQpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgICAgIGlmICghdGFyZ2V0KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQuaWQgIT09IHdpZGdldElkKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgid2lkZ2V0LXJlbW92ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgd2lkZ2V0OiB0YXJnZXQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHVwZGF0ZVdpZGdldCh3aWRnZXRJZCwgdXBkYXRlcykgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgLi4udXBkYXRlcyB9IDogd2lkZ2V0KTsKICAgIH0KICAgIGdldExheW91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5tYXAoKHsgaWQsIHg6IHgzLCB5OiB5NSwgdzogdzMsIGg6IGg5IH0pID0+ICh7IGlkLCB4OiB4MywgeTogeTUsIHc6IHczLCBoOiBoOSB9KSk7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IGFwcGx5TGF5b3V0KHRoaXMud2lkZ2V0cywgbGF5b3V0KTsKICAgIH0KICAgIGxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CiAgICB9CiAgICB1bmxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFkZFdpZGdldCh3aWRnZXQsIGF1dG9Qb3NpdGlvbiA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IG5leHRXaWRnZXQgPSB7IC4uLndpZGdldCB9OwogICAgICBpZiAoYXV0b1Bvc2l0aW9uIHx8IG5leHRXaWRnZXQuYXV0b1Bvc2l0aW9uKSB7CiAgICAgICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHRoaXMud2lkZ2V0cywgbmV4dFdpZGdldC53LCBuZXh0V2lkZ2V0LmgsIHRoaXMuY29sdW1ucyk7CiAgICAgICAgbmV4dFdpZGdldC54ID0gcG9zaXRpb24zLng7CiAgICAgICAgbmV4dFdpZGdldC55ID0gcG9zaXRpb24zLnk7CiAgICAgIH0KICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgbmV4dFdpZGdldF07CiAgICB9CiAgICBjb21wYWN0KGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpIHsKICAgICAgY29uc3QgbmV4dFdpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KSk7CiAgICAgIGNvbXBhY3RMYXlvdXQobmV4dFdpZGdldHMsIGRpcmVjdGlvbik7CiAgICAgIHRoaXMud2lkZ2V0cyA9IG5leHRXaWRnZXRzOwogICAgfQogICAgYXBwbHlCcmVha3BvaW50TGF5b3V0KGJyZWFrcG9pbnQpIHsKICAgICAgdGhpcy5hY3RpdmVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXlvdXRzPy5bYnJlYWtwb2ludF07CiAgICAgIGlmIChsYXlvdXQpIHsKICAgICAgICB0aGlzLnNldExheW91dChsYXlvdXQpOwogICAgICB9CiAgICB9CiAgICBub3RpZnlMYXlvdXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGxheW91dDogdGhpcy5nZXRMYXlvdXQoKSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZW5zdXJlTWV0cmljcygpIHsKICAgICAgaWYgKCF0aGlzLm1ldHJpY3MpIHsKICAgICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubWV0cmljczsKICAgIH0KICAgIGNvbXB1dGVNZXRyaWNzKCkgewogICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmNvbnRhaW5lckJvdW5kcyA9IGJvdW5kczsKICAgICAgY29uc3QgbWFyZ2lucyA9IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgdGhpcy5yZXNvbHZlZE1hcmdpbnMgPSBtYXJnaW5zOwogICAgICB0aGlzLm1ldHJpY3MgPSBjYWxjdWxhdGVDZWxsTWV0cmljcyhib3VuZHMud2lkdGgsIHRoaXMuY29sdW1ucywgbWFyZ2lucywgdGhpcy5jZWxsSGVpZ2h0LCB0aGlzLmNlbGxIZWlnaHRVbml0KTsKICAgIH0KICAgIG9ic2VydmVSZXNpemUoKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgewogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICB9CiAgICByZWxlYXNlUG9pbnRlckV2ZW50cygpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZURyYWdNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVEcmFnRW5kKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICB9CiAgICBweFRvUGVyY2VudCh2YWx1ZTIsIGNvbnRhaW5lcikgewogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm4gMDsKICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUyIC8gY29udGFpbmVyICogMTAwKS50b0ZpeGVkKDQpKTsKICAgIH0KICAgIGNvbXB1dGVXaWRnZXRSZWN0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucykgewogICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgICAgIGNvbnN0IGxlZnQgPSB3aWRnZXQueCAqIChjZWxsV2lkdGggKyBtYXJnaW5zLmhvcml6b250YWwpICsgbWFyZ2lucy5ob3Jpem9udGFsOwogICAgICBjb25zdCB0b3AgPSB3aWRnZXQueSAqIChjZWxsSGVpZ2h0ICsgbWFyZ2lucy52ZXJ0aWNhbCkgKyBtYXJnaW5zLnZlcnRpY2FsOwogICAgICBjb25zdCB3aWR0aCA9IHdpZGdldC53ICogY2VsbFdpZHRoICsgTWF0aC5tYXgoMCwgd2lkZ2V0LncgLSAxKSAqIG1hcmdpbnMuaG9yaXpvbnRhbDsKICAgICAgY29uc3QgaGVpZ2h0ID0gd2lkZ2V0LmggKiBjZWxsSGVpZ2h0ICsgTWF0aC5tYXgoMCwgd2lkZ2V0LmggLSAxKSAqIG1hcmdpbnMudmVydGljYWw7CiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9OwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0Rhc2hib2FyZGdyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CmZ1bmN0aW9uIGRlbW9GdW5jNDcoKSB7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGA7Cn0KCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNIZWFkaW5nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oZWFkaW5nIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGV2ZWxfZGVjb3JhdG9yczsKICBsZXQgX2xldmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0hlYWRpbmcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGV2ZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9sZXZlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsZXZlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGV2ZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGV2ZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxldmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xldmVsX2luaXRpYWxpemVycywgX2xldmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gZGVtbwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ3OwogICAgI2xldmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9pbml0aWFsaXplcnMsICIxIik7CiAgICAvLyBwcm9wZXJ0aWVzCiAgICAvKioKICAgICAqIEhlYWRpbmcgbGV2ZWw6IDEtNiBmb3IgaDEtaDYsIG9yICdocicgZm9yIGhvcml6b250YWwgcnVsZSBzdHlsZQogICAgICovCiAgICBnZXQgbGV2ZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxldmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gU1RBVElDIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIEhlYWRpbmcgc3R5bGVzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbjogMTZweCAwIDhweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICAgIGgxIHsgZm9udC1zaXplOiAzMnB4OyBmb250LWZhbWlseTogJHtjc3NDYWxTYW5zRm9udEZhbWlseX07IGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO30KICAgICAgaDIgeyBmb250LXNpemU6IDI4cHg7IH0KICAgICAgaDMgeyBmb250LXNpemU6IDI0cHg7IH0KICAgICAgaDQgeyBmb250LXNpemU6IDIwcHg7IH0KICAgICAgaDUgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgaDYgeyBmb250LXNpemU6IDE0cHg7IH0KICAgICAgLyogSG9yaXpvbnRhbCBydWxlIHN0eWxlIGhlYWRpbmcgKi8KICAgICAgLmhlYWRpbmctaHIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLyogRmFkZSBsaW5lcyB0b3dhcmQgYW5kIGF3YXkgZnJvbSB0ZXh0IGZvciBociBzdHlsZSAqLwogICAgICAuaGVhZGluZy1ocjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIC8qIGZhZGUgaW4gdG93YXJkIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjY2NjKSIsICJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjMzMzKSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIG91dCBhd2F5IGZyb20gY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2NjYywgdHJhbnNwYXJlbnQpIiwgImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMzMywgdHJhbnNwYXJlbnQpIil9OwogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgICAgLyogU21hbGwgaHIgdmFyaWFudCB3aXRoIHJlZHVjZWQgbWFyZ2lucyAqLwogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjpiZWZvcmUsCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmFmdGVyIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CiAgICAgICAgY2FzZSAiMSI6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgICAgY2FzZSAiMiI6CiAgICAgICAgICByZXR1cm4gYjJgPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICByZXR1cm4gYjJgPGgzPjxzbG90Pjwvc2xvdD48L2gzPmA7CiAgICAgICAgY2FzZSAiNCI6CiAgICAgICAgICByZXR1cm4gYjJgPGg0PjxzbG90Pjwvc2xvdD48L2g0PmA7CiAgICAgICAgY2FzZSAiNSI6CiAgICAgICAgICByZXR1cm4gYjJgPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7CiAgICAgICAgY2FzZSAiNiI6CiAgICAgICAgICByZXR1cm4gYjJgPGg2PjxzbG90Pjwvc2xvdD48L2g2PmA7CiAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImhlYWRpbmctaHIiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGNhc2UgImhyLXNtYWxsIjoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDggPSAoKSA9PiBiMmAKICA8ZGVlcy1oaW50PjwvZGVlcy1oaW50PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTc3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0hpbnQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWhpbnQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSGludDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU3Nyh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGludDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ4OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiaW5mbyIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFt0aGVtZURlZmF1bHRTdHlsZXMsIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgIDxkaXYgY2xhc3M9Im1haW5ib3giPjwvZGl2PiBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0hpbnQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2luZGV4LmpzCmluaXRfZGVlc19pY29uKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9kZWVzLW1vYmlsZW5hdmlnYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9iaWxlbmF2aWdhdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbW9iaWxlbmF2aWdhdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlTmF2WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vYmlsZW5hdmlnYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3OCh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVOYXZaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vYmlsZU5hdlpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVOYXZaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZU5hdlpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vYmlsZW5hdmlnYXRpb24yLmNyZWF0ZUFuZFNob3coWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0LWRhc2hib2FyZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJvZmlsZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGRlZXNNb2JpbGVOYXYpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHByb2ZpbGUiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gc2V0dGluZ3MiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSGVscCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWxwLWNpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaG93IGhlbHAiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2lnbiBPdXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bG9nLW91dCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaWduIG91dCIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDsKICAgIHN0YXRpYyBzaW5nbGV0b25SZWY7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKCF0aGlzLnNpbmdsZXRvblJlZikgewogICAgICAgIHRoaXMuc2luZ2xldG9uUmVmID0gbmV3IERlZXNNb2JpbGVuYXZpZ2F0aW9uMigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKTsKICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCk7CiAgICAgIH0KICAgICAgdGhpcy5zaW5nbGV0b25SZWYubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgIHRoaXMuc2luZ2xldG9uUmVmLnNob3coKTsKICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9uUmVmOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBgTWVudWApOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc5KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3OSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vYmlsZU5hdlpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZU5hdlpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlTmF2WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZWFkeURlZmVycmVkID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9leHRyYUluaXRpYWxpemVycyksIGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCkpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBtb2JpbGUgbmF2aWdhdGlvbgogICAgICovCiAgICBhc3luYyBpbml0KCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiLTIwcHggMCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAtMTBweCAwIDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwgIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLm1haW4uc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubWVudUl0ZW0tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBtYXJnaW46IDhweCAxNnB4OwogICAgICB9CgogICAgICAvKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7CiAgICAgICAgLm1haW4gewogICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICAgIHdpZHRoOiA4NXZ3OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQW5pbWF0aW9uIGZvciBtZW51IGl0ZW1zICovCiAgICAgIEBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubWFpbi5zaG93IC5tZW51SXRlbSB7CiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IGNhbGModmFyKC0taXRlbS1pbmRleCwgMCkgKiAwLjA1cyk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbiB7CiAgICAgICAgICAtLXotaW5kZXg6ICR7dGhpcy5tb2JpbGVOYXZaSW5kZXh9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxoMiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW0sIGluZGV4MikgPT4gewogICAgICAgIGlmICgiZGl2aWRlciIgaW4gbWVudUl0ZW0gJiYgbWVudUl0ZW0uZGl2aWRlcikgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibWVudUl0ZW0iCiAgICAgICAgICAgICAgICBzdHlsZT0iLS1pdGVtLWluZGV4OiAke2luZGV4Mn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICBtZW51SXRlbS5hY3Rpb24odGhpcyk7CiAgICAgICAgfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7bWVudUl0ZW0uaWNvbk5hbWV9IHNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51SXRlbS10ZXh0Ij4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgd2luZG93TGF5ZXI7CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBzaG93CiAgICAgKi8KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IG1haW4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKTsKICAgICAgaWYgKCF0aGlzLndpbmRvd0xheWVyKSB7CiAgICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGJsdXI6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllcik7CiAgICAgICAgYXdhaXQgdGhpcy53aW5kb3dMYXllci5zaG93KCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2JpbGVOYXZaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubW9iaWxlTmF2WkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMCk7CiAgICAgIG1haW4uY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgLyoqCiAgICAgKiBpbml0cyB0aGUgaGlkZSBmdW5jdGlvbgogICAgICovCiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtYWluID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7CiAgICAgIG1haW4uY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICBpZiAodGhpcy53aW5kb3dMYXllcikgewogICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vYmlsZW5hdmlnYXRpb24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ5ID0gKCkgPT4gYjJgCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsIGUxMS5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIiwgZTExLmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFnaW5hdGlvbi9kZWVzLXBhZ2luYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczgwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGFnaW5hdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFnaW5hdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BhZ2VfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9kZWNvcmF0b3JzOwogIGxldCBfdG90YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFnaW5hdGlvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfdG90YWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc5KHRoaXMsIG51bGwsIF9wYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wYWdlX2luaXRpYWxpemVycywgX3BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfdG90YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRvdGFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90b3RhbF9pbml0aWFsaXplcnMsIF90b3RhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhZ2luYXRpb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OTsKICAgICNwYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9wYWdlX2luaXRpYWxpemVycywgMSk7CiAgICAvKiogQ3VycmVudCBwYWdlICgxLWJhc2VkKSAqLwogICAgZ2V0IHBhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RvdGFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfcGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2luaXRpYWxpemVycywgMSkpOwogICAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAqLwogICAgZ2V0IHRvdGFsKCkgewogICAgICByZXR1cm4gdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0b3RhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG1hcmdpbjogMCAycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZWUiLCAiIzQ0NCIpfTsKICAgICAgfQogICAgICBidXR0b246ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhYWEiLCAiIzY2NiIpfTsKICAgICAgfQogICAgICBidXR0b24uY3VycmVudCB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwNTBiOTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgc3Bhbi5lbGxpcHNpcyB7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGdldCBwYWdlcygpIHsKICAgICAgY29uc3QgcGFnZXMgPSBbXTsKICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsOwogICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYWdlOwogICAgICBpZiAodG90YWwgPD0gNykgewogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSB0b3RhbDsgaTExKyspIHsKICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFnZXMucHVzaCgxKTsKICAgICAgICBpZiAoY3VycmVudCA+IDQpIHsKICAgICAgICAgIHBhZ2VzLnB1c2goIi4uLiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnQgLSAyKTsKICAgICAgICBjb25zdCBlbmQzID0gTWF0aC5taW4odG90YWwgLSAxLCBjdXJyZW50ICsgMik7CiAgICAgICAgZm9yIChsZXQgaTExID0gc3RhcnQ7IGkxMSA8PSBlbmQzOyBpMTErKykgewogICAgICAgICAgcGFnZXMucHVzaChpMTEpOwogICAgICAgIH0KICAgICAgICBpZiAoY3VycmVudCA8IHRvdGFsIC0gMykgewogICAgICAgICAgcGFnZXMucHVzaCgiLi4uIik7CiAgICAgICAgfQogICAgICAgIHBhZ2VzLnB1c2godG90YWwpOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlczsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA8PSAxfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoKHA3KSA9PiBwNyA9PT0gIi4uLiIgPyBiMmA8c3BhbiBjbGFzcz0iZWxsaXBzaXMiPuKApjwvc3Bhbj5gIDogYjJgCiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IiR7cDcgPT09IHRoaXMucGFnZSA/ICJjdXJyZW50IiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZShwNyl9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtwNyA9PT0gdGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke3A3fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3A3fQogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgPGJ1dHRvbgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UgKyAxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbH0KICAgICAgICBhcmlhLWxhYmVsPSJOZXh0IHBhZ2UiCiAgICAgID4KICAgICAgICDigLoKICAgICAgPC9idXR0b24+CiAgICBgOwogICAgfQogICAgY2hhbmdlUGFnZShuZXdQYWdlKSB7CiAgICAgIGlmIChuZXdQYWdlIDwgMSB8fCBuZXdQYWdlID4gdGhpcy50b3RhbCB8fCBuZXdQYWdlID09PSB0aGlzLnBhZ2UpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5wYWdlID0gbmV3UGFnZTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHBhZ2U6IHRoaXMucGFnZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQYWdpbmF0aW9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQcm9ncmVzc2JhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcHJvZ3Jlc3NiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZXJjZW50YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9wZXJjZW50YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGVyY2VudGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUHJvZ3Jlc3NiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcGVyY2VudGFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfcGVyY2VudGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZXJjZW50YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwZXJjZW50YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBlcmNlbnRhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBlcmNlbnRhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGVyY2VudGFnZV9pbml0aWFsaXplcnMsIF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUHJvZ3Jlc3NiYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUwOwogICAgI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfaW5pdGlhbGl6ZXJzLCAwKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgcGVyY2VudGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZXJjZW50YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNwZXJjZW50YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShicmlnaHQudGV4dCwgZGFyay50ZXh0KX07CiAgICAgIH0KICAgICAgLnByb2dyZXNzQmFyQ29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VlZWVlYiIsICIjNDQ0Iil9OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3JkZXItdG9wOiAwLjVweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgibm9uZSIsICIjNTU1Iil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXJGaWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGJyaWdodC5ibHVlQWN0aXZlKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNXB4OwogICAgICAgIHRyYW5zaXRpb246IDAuMnMgd2lkdGg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJub25lIiwgIiMzOThmZmYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzc1RleHQgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyRmlsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc1RleHQiPgogICAgICAgICAgICAke3RoaXMucGVyY2VudGFnZX0lCiAgICAgICAgICA8ZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVBlcmNlbnRhZ2UoKSB7CiAgICAgIGNvbnN0IHByb2dyZXNzQmFyRmlsbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIucHJvZ3Jlc3NCYXJGaWxsIik7CiAgICAgIHByb2dyZXNzQmFyRmlsbC5zdHlsZS53aWR0aCA9IGAke3RoaXMucGVyY2VudGFnZX0lYDsKICAgIH0KICAgIHVwZGF0ZWQoKSB7CiAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1Byb2dyZXNzYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc2VhcmNoYmFyL2RlZXMtc2VhcmNoYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTEgPSAoKSA9PiB7CiAgY29uc3Qgb25DaGFuZ2VkID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNjaGFuZ2VkIik7CiAgICBpZiAoZWwpCiAgICAgIGVsLnRleHRDb250ZW50ID0gYHNlYXJjaC1jaGFuZ2VkOiAke2UxMS5kZXRhaWwudmFsdWV9YDsKICB9OwogIGNvbnN0IG9uU3VibWl0ID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNzdWJtaXR0ZWQiKTsKICAgIGlmIChlbCkKICAgICAgZWwudGV4dENvbnRlbnQgPSBgc2VhcmNoLXN1Ym1pdDogJHtlMTEuZGV0YWlsLnZhbHVlfWA7CiAgfTsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIAogICAgICAgIGJhY2tncm91bmQ6ICM4ODg4ODg7CiAgICAgIH0KICAgICAgLmxvZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgLmxvZ3MgZGl2IHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb1dyYXBwZXIiPgogICAgICA8ZGVlcy1zZWFyY2hiYXIKICAgICAgICBAc2VhcmNoLWNoYW5nZWQ9JHtvbkNoYW5nZWR9CiAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHtvblN1Ym1pdH0KICAgICAgPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgIDxkaXYgY2xhc3M9ImxvZ3MiPgogICAgICAgIDxkaXYgaWQ9ImNoYW5nZWQiPnNlYXJjaC1jaGFuZ2VkOjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InN1Ym1pdHRlZCI+c2VhcmNoLXN1Ym1pdDo8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTZWFyY2hiYXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNlYXJjaGJhciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2ZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTZWFyY2hiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZmlsdGVyc19kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU4MSh0aGlzLCBudWxsLCBfZmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyc19pbml0aWFsaXplcnMsIF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2VhcmNoYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTE7CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3hDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDE1IiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZWVlZWViIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b24gewogICAgICAgIC0tYnV0dG9uUGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWUsIGRhcmsuYmx1ZSl9OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgICNmaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9maWx0ZXJzX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBmaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHNlYXJjaElucHV0ID0gX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfZmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICBzZWFyY2hCdXR0b247CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3hDb250YWluZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iWW91ciBTa2lsbHMgKGUuZy4gVHlwZVNjcmlwdCwgUnVzdCwgUHJvamVjdG1hbmFnZW1lbnQpIiAvPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEJ1dHRvbiI+U2VhcmNoIC0+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuZmlsdGVycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVycyI+CiAgICAgICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPkZpbHRlcnM8L2RlZXMtaGVhZGluZz4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93biAubGFiZWw9JHsibG9jYXRpb24ifT48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGl2PiAgCiAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogTGlmZWN5Y2xlOiBhZnRlciBmaXJzdCByZW5kZXIsIHdpcmUgdXAgZXZlbnRzIGZvciBpbnB1dCBhbmQgc3VibWl0IGFjdGlvbnMKICAgICAqLwogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jaGFuZ2VkIiwgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgICB9KSk7CiAgICAgIH0pOwogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoU3VibWl0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB0aGlzLl9kaXNwYXRjaFN1Ym1pdCgpKTsKICAgIH0KICAgIC8qKgogICAgICogRGlzcGF0Y2ggYSBzdWJtaXQgZXZlbnQgd2l0aCB0aGUgY3VycmVudCBzZWFyY2ggdmFsdWUKICAgICAqLwogICAgX2Rpc3BhdGNoU3VibWl0KCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtc3VibWl0IiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NlYXJjaGJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUyID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLnJlZjEgewogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0icmVmMSI+PC9kaXY+CiAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHtgCiAgICAgICoqVGhpcyBpcyBhIGxvbmdlciBtYXJrZG93biB0ZXh0IHRoYXQgIGNhbiBiZSB1c2VkIHRoZSB3cml0ZSoqICAKICAgICAgYSBsb25nZXIgZGVzY3JpcHRpb24gYWJvdXQgd2hhdHMgZ29pbmcgb24gdGhlIGFwcCAgCiAgCiAgICAgICoqVGhpcyBpcyBhIHN1YmhlYWRlcioqCiAgICAgIGFuZCBhbm90aGVyIHRleHQKICAgIAogICAgYH0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTcGVlY2hidWJibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwZWVjaGJ1YmJsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2F2ZV9kZWNvcmF0b3JzOwogIGxldCBfd2F2ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21hbmlmZXN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU3BlZWNoYnViYmxlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfd2F2ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVmZmVkRWxlbWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVmZmVkRWxlbWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZWZmZWRFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWZmZWRFbGVtZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfd2F2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3YXZlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3YXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndhdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndhdmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZV9pbml0aWFsaXplcnMsIF93YXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFuaWZlc3RlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFuaWZlc3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYW5pZmVzdGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYW5pZmVzdGVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9zdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUyOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhyZWZFbGVtZW50LCB0ZXh0QXJnKSB7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgIGJsdXI6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb25zdCBzcGVlY2hidWJibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXNwZWVjaGJ1YmJsZSIpOwogICAgICBzcGVlY2hidWJibGUud2luZG93TGF5ZXIgPSB3aW5kb3dMYXllcjsKICAgICAgc3BlZWNoYnViYmxlLnJlZmZlZEVsZW1lbnQgPSByZWZFbGVtZW50OwogICAgICBzcGVlY2hidWJibGUudGV4dCA9IHRleHRBcmc7CiAgICAgIHNwZWVjaGJ1YmJsZS5tYW5pZmVzdGVkID0gdHJ1ZTsKICAgICAgd2luZG93TGF5ZXIuYXBwZW5kQ2hpbGQoc3BlZWNoYnViYmxlKTsKICAgICAgd2luZG93TGF5ZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgd2luZG93TGF5ZXIuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIud2luZG93T3ZlcmxheSIpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgIHJldHVybiBzcGVlY2hidWJibGU7CiAgICB9CiAgICAjcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfcmVmZmVkRWxlbWVudF9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHJlZmZlZEVsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVmZmVkRWxlbWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfd2F2ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgd2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3YXZlKHZhbHVlMikgewogICAgICB0aGlzLiN3YXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtYW5pZmVzdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hbmlmZXN0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21hbmlmZXN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgd2luZG93TGF5ZXIgPSBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuYXJyb3cgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmYiLCAiIzMzMyIpfTsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHRvcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5zcGVlY2hidWJibGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tYW5pZmVzdGVkID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGVlY2hidWJibGUiPgogICAgICAgICAgICAgICAgJHt0aGlzLndhdmUgPyBiMmA8c3BhbiBjbGFzcz0id2F2ZSI+8J+Rizwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmUodGhpcy5nZXRIdG1sKCkpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUNsaWNrKCkgewogICAgICBjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMucmVmZmVkRWxlbWVudCkgewogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZzsKICAgICAgfQogICAgICBpZiAodGhpcy5tYW5pZmVzdGVkKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQb3NpdGlvbigpOwogICAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IHNwZWVjaGJ1YmJsZTsKICAgICAgICB0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIHNwZWVjaGJ1YmJsZSA9IGF3YWl0IERlZXNTcGVlY2hidWJibGUyLmNyZWF0ZUFuZFNob3codGhpcy5yZWZmZWRFbGVtZW50LCB0aGlzLnRleHQpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgICAgc3BlZWNoYnViYmxlLmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlUG9zaXRpb24oKSB7CiAgICAgIGNvbnN0IHJlZkVsZW1lbnQgPSB0aGlzLnJlZmZlZEVsZW1lbnQ7CiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHJlZkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHRoaXMuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICB0aGlzLnN0eWxlLnRvcCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSAxM31weGA7CiAgICAgIHRoaXMuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgcmVmRWxlbWVudC5jbGllbnRXaWR0aCArIDR9cHhgOwogICAgICBpZiAoYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gMjUwKSB7CiAgICAgICAgdGhpcy5zdHlsZS53aWR0aCA9IGAyNTBweGA7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGdldEh0bWwoKSB7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bi5lYXN5TWFya2Rvd25Ub0h0bWwobm9ybWFsaXplZCk7CiAgICAgIHJldHVybiBvOChyZXN1bHQpOwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwaW5uZXIvZGVlcy1zcGlubmVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTgzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NwaW5uZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwaW5uZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm53X2RlY29yYXRvcnM7CiAgbGV0IF9ibndfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibndfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTcGlubmVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX2Jud19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTgzKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfYm53X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJudyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm53IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJudywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm53ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jud19pbml0aWFsaXplcnMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTcGlubmVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtc3Bpbm5lcj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHNpemU9JHs2NH0gc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgLnNpemU9JHs2NH0gc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgYDsKICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjApOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Jud19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9ibndfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJudygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jud19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJudyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm53X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfYm53X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAjbG9hZGluZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogIzhiYzM0YTAwOwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmcuc3VjY2VzcyB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICNsb2FkaW5nIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuc2l6ZX1weDsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKHRoaXMuYm53ID8gIiMzMzMiIDogYCM4YmMzNGFgLCB0aGlzLmJudyA/ICIjZmZmIiA6IGAjOGJjMzRhYCl9OwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSh0aGlzLmJudyA/ICIjMzMzIiA6IGAjZTY0YTE5YCwgdGhpcy5ibncgPyAiI2ZmZiIgOiBgI2U2NGExOWApfTsKICAgICAgICB9CiAgICAgICAgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSIke3RoaXMuc3RhdHVzfSIgaWQ9ImxvYWRpbmciPgogICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICJlcnJvciIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy1pY29uIC5pY29uPSR7ImZhOmNpcmNsZS14bWFyayJ9PjwvZGVlcy1pY29uPmA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3Bpbm5lcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHN0ZXBwZXJEZW1vID0gKCkgPT4gYjJgCiAgPGRlZXMtc3RlcHBlcgogICAgLnN0ZXBzPSR7WwogIHsKICAgIHRpdGxlOiAiQWNjb3VudCBTZXR1cCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJlbWFpbCIgbGFiZWw9IldvcmsgRW1haWwiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJDcmVhdGUgUGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlByb2ZpbGUgRGV0YWlscyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIkNvbnRhY3QgSW5mb3JtYXRpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSBrZXk9InBob25lIiBsYWJlbD0iTW9iaWxlIE51bWJlciIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iY29tcGFueSIgbGFiZWw9IkNvbXBhbnkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiVGVhbSBTaXplIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRlYW1TaXplIgogICAgICAgICAgICAgIGxhYmVsPSJIb3cgYmlnIGlzIHlvdXIgdGVhbT8iCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICIxLTUiLCB2YWx1ZTogIjEtNSIgfSwKICAgICAgeyBsYWJlbDogIjYtMjAiLCB2YWx1ZTogIjYtMjAiIH0sCiAgICAgIHsgbGFiZWw6ICIyMS01MCIsIHZhbHVlOiAiMjEtNTAiIH0sCiAgICAgIHsgbGFiZWw6ICI1MSsiLCB2YWx1ZTogIjUxKyIgfQogICAgXX0KICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiR29hbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAgIGtleT0iZ29hbCIKICAgICAgICAgICAgICBsYWJlbD0iTWFpbiBvYmplY3RpdmUiCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICJPbmJvYXJkaW5nIiwgdmFsdWU6ICJvbmJvYXJkaW5nIiB9LAogICAgICB7IGxhYmVsOiAiQW5hbHl0aWNzIiwgdmFsdWU6ICJhbmFseXRpY3MiIH0sCiAgICAgIHsgbGFiZWw6ICJBdXRvbWF0aW9uIiwgdmFsdWU6ICJhdXRvbWF0aW9uIiB9CiAgICBdfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgIHZhbGlkYXRpb25GdW5jOiBhc3luYyAoc3RlcHBlckFyZywgZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkZWVzRm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgfQogIH0sCiAgewogICAgdGl0bGU6ICJCcmFuZCBQcmVmZXJlbmNlcyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJicmFuZENvbG9yIiBsYWJlbD0iUHJpbWFyeSBicmFuZCBjb2xvciI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ0b25lIiBsYWJlbD0iUHJlZmVycmVkIHRvbmUgKGUuZy4gZnJpZW5kbHksIGZvcm1hbCkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiSW50ZWdyYXRpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIGtleT0iaW50ZWdyYXRpb25zIgogICAgICAgICAgICAgIGxhYmVsPSJJbnRlZ3JhdGlvbnMgaW4gdXNlIgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJBZGQgaW50ZWdyYXRpb24iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlJldmlldyAmIExhdW5jaCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGAKICB9Cl19CiAgPjwvZGVlcy1zdGVwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTg0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0ZXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0ZXBwZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zdGVwc19kZWNvcmF0b3JzOwogIGxldCBfc3RlcHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGVwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFN0ZXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0ZXBwZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3RlcHNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9zdGVwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGVwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RlcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RlcHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN0ZXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0ZXBzX2luaXRpYWxpemVycywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQodGhpcywgbnVsbCwgX3NlbGVjdGVkU3RlcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFN0ZXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkU3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFN0ZXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkU3RlcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBzdGVwcGVyRGVtbzsKICAgICNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc3RlcHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgc3RlcHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0ZXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkU3RlcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRTdGVwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRTdGVwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMGYwZjExIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTJlOGYwIiwgIiMyNzI3MjkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NDc0OGIiLCAiI2ExYTFhYSIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC40NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCAicmdiYSg2MywgNjMsIDcwLCAwLjg1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwgInJnYmEoMzksIDM5LCA0MiwgMC44NSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBmMTcyYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoZGFyay5ibHVlLCBkYXJrLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNykiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAuZ29CYWNrOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuODUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC42KSIpfTsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjayBzcGFuIHsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjazpob3ZlciBzcGFuIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC50aXRsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiA2NHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoKHN0ZXBBcmcpID0+IGIyYDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ic3RlcCAke3N0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwID8gInNlbGVjdGVkIiA6IG51bGx9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA+IHRoaXMuZ2V0SW5kZXhPZlN0ZXAodGhpcy5zZWxlY3RlZFN0ZXApID8gImhpZGRlblN0ZXAiIDogIiJ9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA9PT0gMCA/ICJlbnRyYW5jZSIgOiAiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoc3RlcEFyZykgPiAwID8gYjJgPGRpdiBjbGFzcz0iZ29CYWNrIiBAY2xpY2s9JHt0aGlzLmdvQmFja30+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBJbnRlciI+PC08L3NwYW4+IGdvIHRvIHByZXZpb3VzIHN0ZXA8L2Rpdj5gIDogYGB9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KChlbGVtZW50QXJnKSA9PiBlbGVtZW50QXJnID09PSBzdGVwQXJnKSArIDF9IG9mCiAgICAgICAgICAgICAgICAke3RoaXMuc3RlcHMubGVuZ3RofQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3N0ZXBBcmcudGl0bGV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHtzdGVwQXJnLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5kZXhPZlN0ZXAgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKHN0ZXBBcmcpID0+IHsKICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnMikgPT4gc3RlcEFyZyA9PT0gc3RlcEFyZzIpOwogICAgfSk7CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gdGhpcy5zdGVwc1swXTsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCk7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc3RlcC5lbnRyYW5jZSIpPy5jbGFzc0xpc3QucmVtb3ZlKCJlbnRyYW5jZSIpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZCgpIHsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgIH0KICAgIHNjcm9sbGVyOwogICAgYXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCkgewogICAgICBjb25zdCBzdGVwcGVyQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IGZpcnN0U3RlcEVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKTsKICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTsKICAgICAgaWYgKCFzZWxlY3RlZFN0ZXBFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wKSB7CiAgICAgICAgc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7c3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyIC0gc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyfXB4YDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiU2V0dGluZyBzY3JvbGwgc3RhdHVzIik7CiAgICAgIGNvbnNvbGUubG9nKHNlbGVjdGVkU3RlcEVsZW1lbnQpOwogICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHNlbGVjdGVkU3RlcEVsZW1lbnQub2Zmc2V0VG9wIC0gc3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyICsgc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwogICAgICBjb25zb2xlLmxvZyhzY3JvbGxQb3NpdGlvbik7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGlmICghdGhpcy5zY3JvbGxlcikgewogICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLlN3ZWV0U2Nyb2xsKHsKICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsCiAgICAgICAgICBlYXNpbmc6ICJlYXNlSW5PdXRFeHBvIiwKICAgICAgICAgIGR1cmF0aW9uOiA3MDAKICAgICAgICB9LCBzdGVwcGVyQ29udGFpbmVyKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkICYmIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLCBzZWxlY3RlZFN0ZXBFbGVtZW50LCB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTsKICAgICAgfQogICAgICB0aGlzLnNjcm9sbGVyLnRvKHNjcm9sbFBvc2l0aW9uKTsKICAgIH0KICAgIGFzeW5jIGdvQmFjaygpIHsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgfQogICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4XTsKICAgICAgY3VycmVudFN0ZXAudmFsaWRhdGlvbkZ1bmNDYWxsZWQgPSBmYWxzZTsKICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgcHJldmlvdXNTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gcHJldmlvdXNTdGVwOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKSk7CiAgICB9CiAgICBnb05leHQoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnKSA9PiBzdGVwQXJnID09PSB0aGlzLnNlbGVjdGVkU3RlcCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlcikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICB9CiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXhdOwogICAgICBjdXJyZW50U3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4ICsgMV07CiAgICAgIG5leHRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbmV4dFN0ZXA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1MyA9ICgpID0+IGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgIH0KCiAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNhYWEiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CgogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2tlZD0keygpID0+IHsKICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImJyaWdodCIpOwp9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKTsKfX0+SW5mbyBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCIgQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIk9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5TdWNjZXNzIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC53YXJuaW5nKCJQbGVhc2UgcmV2aWV3IGJlZm9yZSBwcm9jZWVkaW5nIik7Cn19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIik7Cn19PkVycm9yIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VG9hc3QgUG9zaXRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBUb2FzdHMgY2FuIGFwcGVhciBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVG9wIFJpZ2h0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLXJpZ2h0IgogIH0pOwp9fT5Ub3AgUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBMZWZ0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLWxlZnQiCiAgfSk7Cn19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gUmlnaHQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tcmlnaHQiCiAgfSk7Cn19PkJvdHRvbSBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiQm90dG9tIExlZnQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tbGVmdCIKICB9KTsKfX0+Qm90dG9tIExlZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBDZW50ZXIgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJ0b3AtY2VudGVyIgogIH0pOwp9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAiYm90dG9tLWNlbnRlciIKICB9KTsKfX0+Qm90dG9tIENlbnRlcjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkR1cmF0aW9uIE9wdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbnRyb2wgaG93IGxvbmcgdG9hc3RzIHN0YXkgdmlzaWJsZS4gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlF1aWNrIHRvYXN0ICgxIHNlY29uZCkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDFlMwogIH0pOwp9fT4xIFNlY29uZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU3RhbmRhcmQgdG9hc3QgKDMgc2Vjb25kcykiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDNlMwogIH0pOwp9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJMb25nIHRvYXN0ICg1IHNlY29uZHMpIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIGR1cmF0aW9uOiA1ZTMKICB9KTsKfX0+NSBTZWNvbmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJNYW51YWwgZGlzbWlzcyBvbmx5IChjbGljayB0byBjbG9zZSkiLAogICAgdHlwZTogIndhcm5pbmciLAogICAgZHVyYXRpb246IDAKICB9KTsKfX0+Tm8gQXV0by1EaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgVG9hc3RzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBNdWx0aXBsZSB0b2FzdHMgc3RhY2sgYXV0b21hdGljYWxseS4gVGhleSBtYWludGFpbiB0aGVpciBvcmRlciBhbmQgYW5pbWF0ZSBzbW9vdGhseS4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5pbmZvKCJGaXJzdCBub3RpZmljYXRpb24iKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC5zdWNjZXNzKCJTZWNvbmQgbm90aWZpY2F0aW9uIiksIDIwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Qud2FybmluZygiVGhpcmQgbm90aWZpY2F0aW9uIiksIDQwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSwgNjAwKTsKfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogYE5vdGlmaWNhdGlvbiAjJHtpMTF9YCwKICAgICAgICB0eXBlOiBpMTEgJSAyID09PSAwID8gInN1Y2Nlc3MiIDogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiAyZTMgKyBpMTEgKiA1MDAKICAgICAgfSk7CiAgICB9LCBpMTEgKiAxMDApOwogIH0KfX0+UmFwaWQgRmlyZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlJlYWwtV29ybGQgRXhhbXBsZXM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbW1vbiB1c2UgY2FzZXMgZm9yIHRvYXN0IG5vdGlmaWNhdGlvbnMgaW4gYXBwbGljYXRpb25zLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU2F2aW5nIGNoYW5nZXMuLi4iLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJDaGFuZ2VzIHNhdmVkIHN1Y2Nlc3NmdWxseSEiKTsKICB9LCAyZTMpOwp9fT5TYXZlIE9wZXJhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuZXJyb3IoIkZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4iKTsKfX0+TmV0d29yayBFcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Qud2FybmluZygiWW91ciBzZXNzaW9uIHdpbGwgZXhwaXJlIGluIDUgbWludXRlcyIpOwp9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5VcGxvYWQgQ29tcGxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Qcm9ncmFtbWF0aWMgQ29udHJvbDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQWR2YW5jZWQgY29udHJvbCBvdmVyIHRvYXN0IGJlaGF2aW9yLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVGhpcyB0b2FzdCBjYW4gYmUgZGlzbWlzc2VkIHByb2dyYW1tYXRpY2FsbHkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJUb2FzdCBkaXNtaXNzZWQgYWZ0ZXIgMiBzZWNvbmRzIik7CiAgfSwgMmUzKTsKfX0+UHJvZ3JhbW1hdGljIERpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmluZm8oIkluZm8gbWVzc2FnZSIsIDJlMyk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwgMmUzKSwgNTAwKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC53YXJuaW5nKCJXYXJuaW5nIG1lc3NhZ2UiLCAyZTMpLCAxZTMpOwogIHNldFRpbWVvdXQoKCkgPT4gRGVlc1RvYXN0LmVycm9yKCJFcnJvciBtZXNzYWdlIiwgMmUzKSwgMTUwMCk7Cn19PkNvbnZlbmllbmNlIE1ldGhvZHM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9hc3QvZGVlcy10b2FzdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNUb2FzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdG9hc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9tZXNzYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVzc2FnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kdXJhdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVG9hc3QyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVzc2FnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9kdXJhdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9tZXNzYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lc3NhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVzc2FnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXNzYWdlX2luaXRpYWxpemVycywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX2R1cmF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImR1cmF0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkdXJhdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kdXJhdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHVyYXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTM7CiAgICBzdGF0aWMgdG9hc3RDb250YWluZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHN0YXRpYyBnZXRPckNyZWF0ZUNvbnRhaW5lcihwb3NpdGlvbjMpIHsKICAgICAgaWYgKCF0aGlzLnRvYXN0Q29udGFpbmVycy5oYXMocG9zaXRpb24zKSkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBgdG9hc3QtY29udGFpbmVyIHRvYXN0LWNvbnRhaW5lci0ke3Bvc2l0aW9uM31gOwogICAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gYAogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5vdmVybGF5LnRvYXN0fTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgYDsKICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uMykgewogICAgICAgICAgY2FzZSAidG9wLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInRvcC1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJvdHRvbS1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidG9wLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgdGhpcy50b2FzdENvbnRhaW5lcnMuc2V0KHBvc2l0aW9uMywgY29udGFpbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50b2FzdENvbnRhaW5lcnMuZ2V0KHBvc2l0aW9uMyk7CiAgICB9CiAgICBzdGF0aWMgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgIGNvbnN0IG9wdHMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPyB7IG1lc3NhZ2U6IG9wdGlvbnMgfSA6IG9wdGlvbnM7CiAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IERlZXNUb2FzdDIoKTsKICAgICAgdG9hc3QubWVzc2FnZSA9IG9wdHMubWVzc2FnZTsKICAgICAgdG9hc3QudHlwZSA9IG9wdHMudHlwZSB8fCAiaW5mbyI7CiAgICAgIHRvYXN0LmR1cmF0aW9uID0gb3B0cy5kdXJhdGlvbiB8fCAzZTM7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0T3JDcmVhdGVDb250YWluZXIob3B0cy5wb3NpdGlvbiB8fCAidG9wLXJpZ2h0Iik7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7CiAgICAgIGF3YWl0IHRvYXN0LnVwZGF0ZUNvbXBsZXRlOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRvYXN0LmlzVmlzaWJsZSA9IHRydWU7CiAgICAgIH0pOwogICAgICBpZiAodG9hc3QuZHVyYXRpb24gPiAwKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0b2FzdC5kaXNtaXNzKCk7CiAgICAgICAgfSwgdG9hc3QuZHVyYXRpb24pOwogICAgICB9CiAgICAgIHJldHVybiB0b2FzdDsKICAgIH0KICAgIC8vIEFsaWFzIGZvciBjb25zaXN0ZW5jeSB3aXRoIERlZXNNb2RhbAogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9ucykgewogICAgICByZXR1cm4gdGhpcy5zaG93KG9wdGlvbnMpOwogICAgfQogICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcwogICAgc3RhdGljIGluZm8obWVzc2FnZTIsIGR1cmF0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzLnNob3coeyBtZXNzYWdlOiBtZXNzYWdlMiwgdHlwZTogImluZm8iLCBkdXJhdGlvbiB9KTsKICAgIH0KICAgIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJzdWNjZXNzIiwgZHVyYXRpb24gfSk7CiAgICB9CiAgICBzdGF0aWMgd2FybmluZyhtZXNzYWdlMiwgZHVyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAid2FybmluZyIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgc3RhdGljIGVycm9yKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJlcnJvciIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgI21lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX21lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lc3NhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVzc2FnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9tZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJpbmZvIikpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgM2UzKSk7CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGR1cmF0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Zpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc3Zpc2libGVdKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KCiAgICAgIC50b2FzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMyMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMSkiLCAicmdiYSgwLDAsMCwwLjMpIil9OwogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2FzdDpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLmljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmNsb3NlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNsb3NlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3R5cGU9ImluZm8iXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMDA4NGZmOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0ic3VjY2VzcyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJ3YXJuaW5nIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9ImVycm9yIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2VmNDQ0NDsKICAgICAgfQoKICAgICAgLyogUHJvZ3Jlc3MgYmFyICovCiAgICAgIC5wcm9ncmVzcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDsKICAgICAgICBhbmltYXRpb246IHByb2dyZXNzIGxpbmVhciBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwcm9ncmVzcyB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBpY29uczUgPSB7CiAgICAgICAgaW5mbzogYjJgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMWExIDEgMCAxMC0yIDB2Mkg3YTEgMSAwIDEwMCAyaDJ2MmExIDEgMCAxMDIgMHYtMmgyYTEgMSAwIDEwMC0yaC0yVjd6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCwKICAgICAgICBzdWNjZXNzOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIHdhcm5pbmc6IGIyYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMjU3IDMuMDk5Yy43NjUtMS4zNiAyLjcyMi0xLjM2IDMuNDg2IDBsNS41OCA5LjkyYy43NSAxLjMzNC0uMjEzIDIuOTgtMS43NDIgMi45OEg0LjQyYy0xLjUzIDAtMi40OTMtMS42NDYtMS43NDMtMi45OGw1LjU4LTkuOTJ6TTExIDEzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOGExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDIgMFY2YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIGVycm9yOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2ek04LjcwNyA3LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNEw4LjU4NiAxMGwtMS4yOTMgMS4yOTNhMSAxIDAgMTAxLjQxNCAxLjQxNEwxMCAxMS40MTRsMS4yOTMgMS4yOTNhMSAxIDAgMDAxLjQxNC0xLjQxNEwxMS40MTQgMTBsMS4yOTMtMS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMMTAgOC41ODYgOC43MDcgNy4yOTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YAogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRvYXN0IiBAY2xpY2s9JHt0aGlzLmRpc21pc3N9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24iPgogICAgICAgICAgJHtpY29uczVbdGhpcy50eXBlXX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4ke3RoaXMubWVzc2FnZX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHoiLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5kdXJhdGlvbiA+IDAgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBzdHlsZT0iYW5pbWF0aW9uLWR1cmF0aW9uOiAke3RoaXMuZHVyYXRpb259bXMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkaXNtaXNzKCkgewogICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDMwMCkpOwogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBhcmVudEVsZW1lbnQ7CiAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICBmb3IgKGNvbnN0IFtwb3NpdGlvbjMsIGNvbnRdIG9mIERlZXNUb2FzdDIudG9hc3RDb250YWluZXJzLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKGNvbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgICAgICBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5kZWxldGUocG9zaXRpb24zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdGhpcy50eXBlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXVwZGF0ZXIvZGVlcy11cGRhdGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgdXBkYXRlciA9IGF3YWl0IERlZXNVcGRhdGVyLmNyZWF0ZUFuZFNob3coKTsKICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgIGF3YWl0IHVwZGF0ZXIuZGVzdHJveSgpOwogIH0sIDFlNCk7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVXBkYXRlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdXBkYXRlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzOwogIGxldCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVXBkYXRlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXJyZW50VmVyc2lvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODYodGhpcywgbnVsbCwgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWZXJzaW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmVyc2lvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VmVyc2lvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZlcnNpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCBfY3VycmVudFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nih0aGlzLCBudWxsLCBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXBkYXRlZFZlcnNpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVwZGF0ZWRWZXJzaW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnVwZGF0ZWRWZXJzaW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51cGRhdGVkVmVyc2lvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91cGRhdGVkVmVyc2lvbl9pbml0aWFsaXplcnMsIF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NDsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KCkgewogICAgICBjb25zdCB1cGRhdGVyID0gbmV3IERlZXNVcGRhdGVyMigpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwZGF0ZXIpOwogICAgICByZXR1cm4gdXBkYXRlcjsKICAgIH0KICAgICNjdXJyZW50VmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IGN1cnJlbnRWZXJzaW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VmVyc2lvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1cGRhdGVkVmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODcodGhpcywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB1cGRhdGVkVmVyc2lvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXBkYXRlZFZlcnNpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMyMjIiKX07CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAuYnV0dG9uQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy13aW5kb3dsYXllcgogICAgICAgIEBjbGlja2VkPSIke3RoaXMud2luZG93TGF5ZXJDbGlja2VkfSIKICAgICAgICAub3B0aW9ucz0ke3sKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7MC41fT48L2RlZXMtcHJvZ3Jlc3NiYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbkNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Nb3JlIGluZm88L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q2hhbmdlbG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PiA8L2RlZXMtd2luZG93bGF5ZXIKICAgICAgPj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICB9CiAgICB3aW5kb3dMYXllckNsaWNrZWQoKSB7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVXBkYXRlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1NSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIH0KCiAgICAudG9rZW4tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1pdGVtIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1uYW1lIHsKICAgICAgZm9udC1mYW1pbHk6ICdJbnRlbCBPbmUgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgfQoKICAgIC50b2tlbi12YWx1ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNwYWNpbmctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuc3BhY2luZy1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgLnJhZGl1cy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnJhZGl1cy1ib3ggewogICAgICB3aWR0aDogNjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnNoYWRvdy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNoYWRvdy1ib3ggewogICAgICB3aWR0aDogMTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICB9CgogICAgLmhlaWdodC1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuaGVpZ2h0LWJveCB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy10aGVtZT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3BhY2luZyBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXNwYWNpbmcteHMgdGhyb3VnaCAtLWRlZXMtc3BhY2luZy0zeGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteHMpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhzICg0cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXNtKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zbSAoOHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1tZCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWQgKDEycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLWxnKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5sZyAoMTZweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhsICgyNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4yeGwgKDMycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjN4bCAoNDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkJvcmRlciBSYWRpdXMgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1yYWRpdXMteHMgdGhyb3VnaCAtLWRlZXMtcmFkaXVzLWZ1bGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteHMpOyI+eHM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4xMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1mdWxsKTsiPmZ1bGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OTk5cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNoYWRvdyBFbGV2YXRpb24gU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zaGFkb3cteHMgdGhyb3VnaCAtLWRlZXMtc2hhZG93LWxnCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1pbmltYWw8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnN1YnRsZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWVkaXVtPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1sZyk7Ij5sZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5wcm9taW5lbnQ8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbnRyb2wgSGVpZ2h0IFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtY29udHJvbC1oZWlnaHQtc20gdGhyb3VnaCAtLWRlZXMtY29udHJvbC1oZWlnaHQteGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjMycHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zNnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NDBweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsKTsiPnhsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQ4cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRyYW5zaXRpb24gRHVyYXRpb25zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0IHRocm91Z2ggLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZmFzdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xNXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3c8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMnM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4zczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXRoZW1lPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGhlbWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRoZW1lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY3VzdG9tU3BhY2luZ19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21TaGFkb3dzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tU2hhZG93c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2N1c3RvbVRyYW5zaXRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUaGVtZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVNwYWNpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVNwYWNpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tU3BhY2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tU3BhY2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21TcGFjaW5nX2luaXRpYWxpemVycywgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVJhZGl1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tUmFkaXVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVJhZGl1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tUmFkaXVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMsIF9jdXN0b21SYWRpdXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXN0b21TaGFkb3dzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21TaGFkb3dzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVNoYWRvd3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1c3RvbVNoYWRvd3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODcodGhpcywgbnVsbCwgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVRyYW5zaXRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21UcmFuc2l0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXN0b21UcmFuc2l0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tVHJhbnNpdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tQ29udHJvbEhlaWdodHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbUNvbnRyb2xIZWlnaHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbUNvbnRyb2xIZWlnaHRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1RoZW1lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTU7CiAgICAjY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIHRoZW1lIG92ZXJyaWRlcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdldCBjdXN0b21TcGFjaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVNwYWNpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbVNwYWNpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXN0b21SYWRpdXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TcGFjaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGN1c3RvbVJhZGl1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVJhZGl1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVJhZGl1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tU2hhZG93c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVJhZGl1c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVNoYWRvd3NfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tU2hhZG93cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVNoYWRvd3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXN0b21TaGFkb3dzKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tVHJhbnNpdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tVHJhbnNpdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVRyYW5zaXRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBjdXN0b21Db250cm9sSGVpZ2h0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VzdG9tQ29udHJvbEhlaWdodHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3R5bGVzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZW5kZXIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7dGhpcy5nZW5lcmF0ZUN1c3RvbVN0eWxlcygpfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaXZhdGUgTWV0aG9kcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdlbmVyYXRlQ3VzdG9tU3R5bGVzKCkgewogICAgICBjb25zdCBzdHlsZXMzID0gWyI6aG9zdCB7Il07CiAgICAgIGlmICh0aGlzLmN1c3RvbVNwYWNpbmcpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU3BhY2luZykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tUmFkaXVzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVJhZGl1cykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1yYWRpdXMtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5jdXN0b21TaGFkb3dzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNoYWRvd3MpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtc2hhZG93LSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGNvbnN0IGNzc0tleSA9IGtleTIgPT09ICJkZWZhdWx0IiA/ICJkZWZhdWx0IiA6IGtleTI7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtdHJhbnNpdGlvbi0ke2Nzc0tleX06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdHlsZXMzLnB1c2goIn0iKTsKICAgICAgcmV0dXJuIHN0eWxlczMuam9pbigiXG4iKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQdWJsaWMgQVBJIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCBhIHNwYWNpbmcgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0U3BhY2luZyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TcGFjaW5nID0geyAuLi50aGlzLmN1c3RvbVNwYWNpbmcsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHJhZGl1cyB2YWx1ZSBkeW5hbWljYWxseQogICAgICovCiAgICBzZXRSYWRpdXMoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0geyAuLi50aGlzLmN1c3RvbVJhZGl1cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgc2hhZG93IHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgKi8KICAgIHNldFNoYWRvdyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TaGFkb3dzID0geyAuLi50aGlzLmN1c3RvbVNoYWRvd3MsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHRyYW5zaXRpb24gdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0VHJhbnNpdGlvbihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHsgLi4udGhpcy5jdXN0b21UcmFuc2l0aW9ucywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgY29udHJvbCBoZWlnaHQgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0Q29udHJvbEhlaWdodChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHsgLi4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IHRoZW1lIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzICsgb3ZlcnJpZGVzKQogICAgICovCiAgICBnZXRUaGVtZSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBjb2xvcnM6IHRoZW1lRGVmYXVsdHMuY29sb3JzLAogICAgICAgIHNwYWNpbmc6IHsgLi4udGhlbWVEZWZhdWx0cy5zcGFjaW5nLCAuLi50aGlzLmN1c3RvbVNwYWNpbmcgfSwKICAgICAgICByYWRpdXM6IHsgLi4udGhlbWVEZWZhdWx0cy5yYWRpdXMsIC4uLnRoaXMuY3VzdG9tUmFkaXVzIH0sCiAgICAgICAgc2hhZG93czogeyAuLi50aGVtZURlZmF1bHRzLnNoYWRvd3MsIC4uLnRoaXMuY3VzdG9tU2hhZG93cyB9LAogICAgICAgIHRyYW5zaXRpb25zOiB7IC4uLnRoZW1lRGVmYXVsdHMudHJhbnNpdGlvbnMsIC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgfSwKICAgICAgICBjb250cm9sSGVpZ2h0czogeyAuLi50aGVtZURlZmF1bHRzLmNvbnRyb2xIZWlnaHRzLCAuLi50aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzIH0KICAgICAgfTsKICAgIH0KICAgIC8qKgogICAgICogUmVzZXQgYWxsIGN1c3RvbSBvdmVycmlkZXMgdG8gZGVmYXVsdHMKICAgICAqLwogICAgcmVzZXRUb0RlZmF1bHRzKCkgewogICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzID0gbnVsbDsKICAgIH0KICAgIC8qKgogICAgICogQXBwbHkgYSBjb21wbGV0ZSB0aGVtZSBvYmplY3QKICAgICAqLwogICAgYXBwbHlUaGVtZSh0aGVtZSkgewogICAgICBpZiAodGhlbWUuc3BhY2luZykKICAgICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nOwogICAgICBpZiAodGhlbWUucmFkaXVzKQogICAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0gdGhlbWUucmFkaXVzOwogICAgICBpZiAodGhlbWUuc2hhZG93cykKICAgICAgICB0aGlzLmN1c3RvbVNoYWRvd3MgPSB0aGVtZS5zaGFkb3dzOwogICAgICBpZiAodGhlbWUudHJhbnNpdGlvbnMpCiAgICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zOwogICAgICBpZiAodGhlbWUuY29udHJvbEhlaWdodHMpCiAgICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHRoZW1lLmNvbnRyb2xIZWlnaHRzOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUaGVtZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbmRleC5qcwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi8wMF9jb21taXRpbmZvX2RhdGEuanMKdmFyIGNvbW1pdGluZm8gPSB7CiAgbmFtZTogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgdmVyc2lvbjogIjMuMzYuMCIsCiAgZGVzY3JpcHRpb246ICJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIgp9OwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMTUoKTsKdmFyIGh0bWw3ID0gYjI7CnZhciBjc3MyID0gaTsKdmFyIGNzc01hbmFnZXIyID0gY3NzTWFuYWdlcjsKdmFyIGN1c3RvbUVsZW1lbnQgPSB0NDsKdmFyIHByb3BlcnR5ID0gbjU7CnZhciBzdGF0ZSA9IHI1Owp2YXIgRGVlc0VsZW1lbnQyID0gRGVlc0VsZW1lbnQ7CgovLyB0c193ZWIvc2VydmljZXMvYXBpLnNlcnZpY2UudHMKdmFyIEFwaVNlcnZpY2UgPSBjbGFzcyB7CiAgYmFzZVVybDsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuYmFzZVVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAiL3R5cGVkcmVxdWVzdCI7CiAgfQogIC8qKgogICAqIE1ha2UgYSB0eXBlZCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kCiAgICovCiAgYXN5bmMgcmVxdWVzdChtZXRob2QsIHJlcXVlc3REYXRhKSB7CiAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSZXF1ZXN0KHRoaXMuYmFzZVVybCwgbWV0aG9kKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUocmVxdWVzdERhdGEpOwogICAgcmV0dXJuIHJlc3BvbnNlOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gUzMgQVBJIE1ldGhvZHMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgYXN5bmMgbGlzdEJ1Y2tldHMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImxpc3RCdWNrZXRzIiwge30pOwogICAgcmV0dXJuIHJlc3VsdC5idWNrZXRzOwogIH0KICBhc3luYyBjcmVhdGVCdWNrZXQoYnVja2V0TmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KAogICAgICAiY3JlYXRlQnVja2V0IiwKICAgICAgeyBidWNrZXROYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRlbGV0ZUJ1Y2tldChidWNrZXROYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJkZWxldGVCdWNrZXQiLAogICAgICB7IGJ1Y2tldE5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgbGlzdE9iamVjdHMoYnVja2V0TmFtZSwgcHJlZml4NCwgZGVsaW1pdGVyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJsaXN0T2JqZWN0cyIsIHsgYnVja2V0TmFtZSwgcHJlZml4OiBwcmVmaXg0LCBkZWxpbWl0ZXIgfSk7CiAgfQogIGFzeW5jIGdldE9iamVjdChidWNrZXROYW1lLCBrZXkyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJnZXRPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0TWV0YWRhdGEoYnVja2V0TmFtZSwga2V5MikgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZ2V0T2JqZWN0TWV0YWRhdGEiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICB9CiAgYXN5bmMgcHV0T2JqZWN0KGJ1Y2tldE5hbWUsIGtleTIsIGNvbnRlbnQzLCBjb250ZW50VHlwZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJwdXRPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiwgY29udGVudDogY29udGVudDMsIGNvbnRlbnRUeXBlIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkZWxldGVPYmplY3QoYnVja2V0TmFtZSwga2V5MikgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkZWxldGVPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZGVsZXRlUHJlZml4KGJ1Y2tldE5hbWUsIHByZWZpeDQpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZGVsZXRlUHJlZml4IiwgeyBidWNrZXROYW1lLCBwcmVmaXg6IHByZWZpeDQgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGdldE9iamVjdFVybChidWNrZXROYW1lLCBrZXkyKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldE9iamVjdFVybCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogICAgcmV0dXJuIHJlc3VsdC51cmw7CiAgfQogIGFzeW5jIGNvcHlPYmplY3Qoc291cmNlQnVja2V0LCBzb3VyY2VLZXksIGRlc3RCdWNrZXQsIGRlc3RLZXkpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY29weU9iamVjdCIsIHsgc291cmNlQnVja2V0LCBzb3VyY2VLZXksIGRlc3RCdWNrZXQsIGRlc3RLZXkgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBNb25nb0RCIEFQSSBNZXRob2RzCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIGFzeW5jIGxpc3REYXRhYmFzZXMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJsaXN0RGF0YWJhc2VzIiwKICAgICAge30KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LmRhdGFiYXNlczsKICB9CiAgYXN5bmMgY3JlYXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJjcmVhdGVEYXRhYmFzZSIsCiAgICAgIHsgZGF0YWJhc2VOYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRyb3BEYXRhYmFzZShkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImRyb3BEYXRhYmFzZSIsCiAgICAgIHsgZGF0YWJhc2VOYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGxpc3RDb2xsZWN0aW9ucyhkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgibGlzdENvbGxlY3Rpb25zIiwgeyBkYXRhYmFzZU5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LmNvbGxlY3Rpb25zOwogIH0KICBhc3luYyBjcmVhdGVDb2xsZWN0aW9uKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY3JlYXRlQ29sbGVjdGlvbiIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZHJvcENvbGxlY3Rpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkcm9wQ29sbGVjdGlvbiIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZmluZERvY3VtZW50cyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBvcHRpb25zKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJmaW5kRG9jdW1lbnRzIiwgewogICAgICBkYXRhYmFzZU5hbWUsCiAgICAgIGNvbGxlY3Rpb25OYW1lLAogICAgICAuLi5vcHRpb25zCiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0RG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJnZXREb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCB9KTsKICAgIHJldHVybiByZXN1bHQuZG9jdW1lbnQ7CiAgfQogIGFzeW5jIGluc2VydERvY3VtZW50KGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGRvY3VtZW50NCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJpbnNlcnREb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnQ6IGRvY3VtZW50NCB9KTsKICAgIHJldHVybiByZXN1bHQuaW5zZXJ0ZWRJZDsKICB9CiAgYXN5bmMgdXBkYXRlRG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCwgdXBkYXRlKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJ1cGRhdGVEb2N1bWVudCIsIHsKICAgICAgZGF0YWJhc2VOYW1lLAogICAgICBjb2xsZWN0aW9uTmFtZSwKICAgICAgZG9jdW1lbnRJZCwKICAgICAgdXBkYXRlCiAgICB9KTsKICB9CiAgYXN5bmMgZGVsZXRlRG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCkgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZGVsZXRlRG9jdW1lbnQiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGRvY3VtZW50SWQgfSk7CiAgfQogIGFzeW5jIHJ1bkFnZ3JlZ2F0aW9uKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIHBpcGVsaW5lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoInJ1bkFnZ3JlZ2F0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBwaXBlbGluZSB9KTsKICAgIHJldHVybiByZXN1bHQucmVzdWx0czsKICB9CiAgYXN5bmMgbGlzdEluZGV4ZXMoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJsaXN0SW5kZXhlcyIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuaW5kZXhlczsKICB9CiAgYXN5bmMgY3JlYXRlSW5kZXgoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwga2V5czIsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY3JlYXRlSW5kZXgiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGtleXM6IGtleXMyLCBvcHRpb25zIH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbmRleE5hbWU7CiAgfQogIGFzeW5jIGRyb3BJbmRleChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBpbmRleE5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZHJvcEluZGV4IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBpbmRleE5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGdldENvbGxlY3Rpb25TdGF0cyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldENvbGxlY3Rpb25TdGF0cyIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3RhdHM7CiAgfQogIGFzeW5jIGdldFNlcnZlclN0YXR1cygpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImdldFNlcnZlclN0YXR1cyIsIHt9KTsKICB9Cn07CgovLyB0c193ZWIvc2VydmljZXMvaW5kZXgudHMKdmFyIGFwaVNlcnZpY2UgPSBuZXcgQXBpU2VydmljZSgpOwoKLy8gdHNfd2ViL3N0eWxlcy90aGVtZS50cwppbml0X2Rpc3RfdHMyNigpOwp2YXIgdGhlbWVTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIC8qIEJhY2tncm91bmQgY29sb3JzICovCiAgICAtLXRzdmlldy1iZy1wcmltYXJ5OiAjMWExYTFhOwogICAgLS10c3ZpZXctYmctc2Vjb25kYXJ5OiAjMWUxZTFlOwogICAgLS10c3ZpZXctYmctdGVydGlhcnk6ICMxNDE0MTQ7CiAgICAtLXRzdmlldy1iZy1vdmVybGF5OiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXRzdmlldy1iZy1vdmVybGF5LWRhcms6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIC0tdHN2aWV3LWJnLWRpYWxvZy1vdmVybGF5OiByZ2JhKDAsIDAsIDAsIDAuNyk7CgogICAgLyogQm9yZGVyIGNvbG9ycyAqLwogICAgLS10c3ZpZXctYm9yZGVyLXByaW1hcnk6ICMzMzM7CiAgICAtLXRzdmlldy1ib3JkZXItc2Vjb25kYXJ5OiAjNDQ0OwogICAgLS10c3ZpZXctYm9yZGVyLXRlcnRpYXJ5OiAjMmEyYTNlOwoKICAgIC8qIFRleHQgY29sb3JzICovCiAgICAtLXRzdmlldy10ZXh0LXByaW1hcnk6ICNmZmY7CiAgICAtLXRzdmlldy10ZXh0LXNlY29uZGFyeTogI2UwZTBlMDsKICAgIC0tdHN2aWV3LXRleHQtdGVydGlhcnk6ICNjY2M7CiAgICAtLXRzdmlldy10ZXh0LW11dGVkOiAjODg4OwogICAgLS10c3ZpZXctdGV4dC1kaW06ICM2NjY7CgogICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzICovCiAgICAtLXRzdmlldy1ob3Zlci1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIC0tdHN2aWV3LWhvdmVyLWJnLXN0cm9uZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgLS10c3ZpZXctc2VsZWN0ZWQtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAtLXRzdmlldy1hY3RpdmUtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKCiAgICAvKiBBY2NlbnQgY29sb3JzICovCiAgICAtLXRzdmlldy1hY2NlbnQtZm9sZGVyOiAjZmJiZjI0OwoKICAgIC8qIERhbmdlci9kZXN0cnVjdGl2ZSBhY3Rpb25zICovCiAgICAtLXRzdmlldy1kYW5nZXI6ICNlZjQ0NDQ7CiAgICAtLXRzdmlldy1kYW5nZXItdGV4dDogI2Y4NzE3MTsKICAgIC0tdHN2aWV3LWRhbmdlci1iZzogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgIC0tdHN2aWV3LWRhbmdlci1iZy1ob3ZlcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKCiAgICAvKiBTdWNjZXNzIHN0YXRlcyAqLwogICAgLS10c3ZpZXctc3VjY2VzczogIzIyYzU1ZTsKICAgIC0tdHN2aWV3LXN1Y2Nlc3MtYmc6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CgogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS10c3ZpZXctcmFkaXVzLXNtOiA0cHg7CiAgICAtLXRzdmlldy1yYWRpdXMtbWQ6IDZweDsKICAgIC0tdHN2aWV3LXJhZGl1cy1sZzogOHB4OwogICAgLS10c3ZpZXctcmFkaXVzLXhsOiAxMnB4OwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tdHN2aWV3LXNwYWNpbmcteHM6IDRweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctc206IDhweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctbWQ6IDEycHg7CiAgICAtLXRzdmlldy1zcGFjaW5nLWxnOiAxNnB4OwogICAgLS10c3ZpZXctc3BhY2luZy14bDogMjRweDsKICB9CmA7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LWFwcC50cwp2YXIgX25ld0RhdGFiYXNlTmFtZV9kZWMsIF9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2dfZGVjLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjLCBfbmV3QnVja2V0TmFtZV9kZWMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYywgX2RhdGFiYXNlc19kZWMsIF9idWNrZXRzX2RlYywgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMsIF9zZWxlY3RlZERhdGFiYXNlX2RlYywgX3NlbGVjdGVkQnVja2V0X2RlYywgX3ZpZXdNb2RlX2RlYywgX2E0LCBfVHN2aWV3QXBwX2RlY29yYXRvcnMsIF9pbml0LCBfdmlld01vZGUsIF9zZWxlY3RlZEJ1Y2tldCwgX3NlbGVjdGVkRGF0YWJhc2UsIF9zZWxlY3RlZENvbGxlY3Rpb24sIF9idWNrZXRzLCBfZGF0YWJhc2VzLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZywgX25ld0J1Y2tldE5hbWUsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZywgX25ld0NvbGxlY3Rpb25OYW1lLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nLCBfbmV3RGF0YWJhc2VOYW1lOwp2YXIgeyBodG1sOiBodG1sOCwgY3NzOiBjc3MzLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMywgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDIsIHN0YXRlOiBzdGF0ZTIsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDMgfSA9IHBsdWdpbnNfZXhwb3J0czU7CnZhciB7IERlZXNDb250ZXh0bWVudTogRGVlc0NvbnRleHRtZW51MiB9ID0gZGlzdF90c193ZWJfZXhwb3J0czI7Cl9Uc3ZpZXdBcHBfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MigidHN2aWV3LWFwcCIpXTsKdmFyIFRzdmlld0FwcCA9IGNsYXNzIGV4dGVuZHMgKF9hNCA9IERlZXNFbGVtZW50MywgX3ZpZXdNb2RlX2RlYyA9IFtzdGF0ZTIoKV0sIF9zZWxlY3RlZEJ1Y2tldF9kZWMgPSBbc3RhdGUyKCldLCBfc2VsZWN0ZWREYXRhYmFzZV9kZWMgPSBbc3RhdGUyKCldLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYyA9IFtzdGF0ZTIoKV0sIF9idWNrZXRzX2RlYyA9IFtzdGF0ZTIoKV0sIF9kYXRhYmFzZXNfZGVjID0gW3N0YXRlMigpXSwgX3Nob3dDcmVhdGVCdWNrZXREaWFsb2dfZGVjID0gW3N0YXRlMigpXSwgX25ld0J1Y2tldE5hbWVfZGVjID0gW3N0YXRlMigpXSwgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nX2RlYyA9IFtzdGF0ZTIoKV0sIF9uZXdDb2xsZWN0aW9uTmFtZV9kZWMgPSBbc3RhdGUyKCldLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nX2RlYyA9IFtzdGF0ZTIoKV0sIF9uZXdEYXRhYmFzZU5hbWVfZGVjID0gW3N0YXRlMigpXSwgX2E0KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF92aWV3TW9kZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDgsIHRoaXMsICJzMyIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRCdWNrZXQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWREYXRhYmFzZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDE2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZENvbGxlY3Rpb24sIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYnVja2V0cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDI0LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyOCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDMyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9uZXdCdWNrZXROYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0MywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0NvbGxlY3Rpb25OYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDQsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0NywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQ4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9uZXdEYXRhYmFzZU5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1MiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDU1LCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpOwogIH0KICBhc3luYyBsb2FkRGF0YSgpIHsKICAgIHRyeSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdEJ1Y2tldHMoKTsKICAgICAgdGhpcy5kYXRhYmFzZXMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3REYXRhYmFzZXMoKTsKICAgICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJzMyIgJiYgdGhpcy5idWNrZXRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRCdWNrZXQpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iICYmIHRoaXMuZGF0YWJhc2VzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWREYXRhYmFzZSkgewogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2VzWzBdLm5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIGRhdGE6IiwgZXJyKTsKICAgIH0KICB9CiAgc2V0Vmlld01vZGUobW9kZSkgewogICAgdGhpcy52aWV3TW9kZSA9IG1vZGU7CiAgfQogIHNlbGVjdEJ1Y2tldChidWNrZXQpIHsKICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSBidWNrZXQ7CiAgfQogIHNlbGVjdERhdGFiYXNlKGRiKSB7CiAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSBkYjsKICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgfQogIHNlbGVjdENvbGxlY3Rpb24oY29sbGVjdGlvbikgewogICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwogIH0KICBhc3luYyBjcmVhdGVCdWNrZXQoKSB7CiAgICBpZiAoIXRoaXMubmV3QnVja2V0TmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmNyZWF0ZUJ1Y2tldCh0aGlzLm5ld0J1Y2tldE5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IFsuLi50aGlzLmJ1Y2tldHMsIHRoaXMubmV3QnVja2V0TmFtZS50cmltKCldOwogICAgICB0aGlzLm5ld0J1Y2tldE5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gZmFsc2U7CiAgICB9CiAgfQogIGFzeW5jIGNyZWF0ZUNvbGxlY3Rpb24oKSB7CiAgICBpZiAoIXRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpIHx8ICF0aGlzLnNlbGVjdGVkRGF0YWJhc2UpIHJldHVybjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24odGhpcy5zZWxlY3RlZERhdGFiYXNlLCB0aGlzLm5ld0NvbGxlY3Rpb25OYW1lLnRyaW0oKSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLm5ld0NvbGxlY3Rpb25OYW1lID0gIiI7CiAgICAgIHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgY3JlYXRlRGF0YWJhc2UoKSB7CiAgICBpZiAoIXRoaXMubmV3RGF0YWJhc2VOYW1lLnRyaW0oKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlRGF0YWJhc2UodGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gWy4uLnRoaXMuZGF0YWJhc2VzLCB7IG5hbWU6IHRoaXMubmV3RGF0YWJhc2VOYW1lLnRyaW0oKSB9XTsKICAgICAgdGhpcy5uZXdEYXRhYmFzZU5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldCwgZTExKSB7CiAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBidWNrZXQgIiR7YnVja2V0fSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIG9iamVjdHMgaW4gdGhlIGJ1Y2tldC5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlQnVja2V0KGJ1Y2tldCk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmJ1Y2tldHMgPSB0aGlzLmJ1Y2tldHMuZmlsdGVyKChiNSkgPT4gYjUgIT09IGJ1Y2tldCk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQnVja2V0ID09PSBidWNrZXQpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdIHx8ICIiOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGRlbGV0ZURhdGFiYXNlKGRiTmFtZSwgZTExKSB7CiAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBkYXRhYmFzZSAiJHtkYk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgY29sbGVjdGlvbnMgYW5kIGRvY3VtZW50cy5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcERhdGFiYXNlKGRiTmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmRhdGFiYXNlcyA9IHRoaXMuZGF0YWJhc2VzLmZpbHRlcigoZDYpID0+IGQ2Lm5hbWUgIT09IGRiTmFtZSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPT09IGRiTmFtZSkgewogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2VzWzBdPy5uYW1lIHx8ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlQ29sbGVjdGlvbihkYk5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBjb2xsZWN0aW9uICIke2NvbGxlY3Rpb25OYW1lfSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIGRvY3VtZW50cy5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcENvbGxlY3Rpb24oZGJOYW1lLCBjb2xsZWN0aW9uTmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICBpZiAodGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25OYW1lKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICB9CiAgaGFuZGxlQnVja2V0Q29udGV4dE1lbnUoZXZlbnQsIGJ1Y2tldCkgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTIub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJWaWV3IENvbnRlbnRzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJPcGVuIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0QnVja2V0KGJ1Y2tldCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUgQnVja2V0IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBidWNrZXQgIiR7YnVja2V0fSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIG9iamVjdHMgaW4gdGhlIGJ1Y2tldC5gKSkgewogICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVCdWNrZXQoYnVja2V0KTsKICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aGlzLmJ1Y2tldHMgPSB0aGlzLmJ1Y2tldHMuZmlsdGVyKChiNSkgPT4gYjUgIT09IGJ1Y2tldCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCdWNrZXQgPT09IGJ1Y2tldCkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1Y2tldCA9IHRoaXMuYnVja2V0c1swXSB8fCAiIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICBoYW5kbGVEYXRhYmFzZUNvbnRleHRNZW51KGV2ZW50LCBkYk5hbWUpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnUyLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IENvbGxlY3Rpb24iLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlclBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gZGJOYW1lOwogICAgICAgICAgdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IHRydWU7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUgRGF0YWJhc2UiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGRhdGFiYXNlICIke2RiTmFtZX0iPyBUaGlzIHdpbGwgZGVsZXRlIGFsbCBjb2xsZWN0aW9ucyBhbmQgZG9jdW1lbnRzLmApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRyb3BEYXRhYmFzZShkYk5hbWUpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VzID0gdGhpcy5kYXRhYmFzZXMuZmlsdGVyKChkNikgPT4gZDYubmFtZSAhPT0gZGJOYW1lKTsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWxlY3RlZERhdGFiYXNlID09PSBkYk5hbWUpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2VzWzBdPy5uYW1lIHx8ICIiOwogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImFwcC1jb250YWluZXIiPgogICAgICAgIDxoZWFkZXIgY2xhc3M9ImFwcC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYXBwLXRpdGxlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yIDNoNmE0IDQgMCAwIDEgNCA0djE0YTMgMyAwIDAgMC0zLTNIMnoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgM2gtNmE0IDQgMCAwIDAtNCA0djE0YTMgMyAwIDAgMSAzLTNoN3oiPjwvcGF0aD4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIFRzVmlldwogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPG5hdiBjbGFzcz0ibmF2LXRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9Im5hdi10YWIgJHt0aGlzLnZpZXdNb2RlID09PSAiczMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3TW9kZSgiczMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIFMzIFN0b3JhZ2UKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0ibmF2LXRhYiAke3RoaXMudmlld01vZGUgPT09ICJtb25nbyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdNb2RlKCJtb25nbyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTW9uZ29EQgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gInNldHRpbmdzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoInNldHRpbmdzIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBTZXR0aW5ncwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvbmF2PgogICAgICAgIDwvaGVhZGVyPgoKICAgICAgICA8bWFpbiBjbGFzcz0iYXBwLW1haW4iPgogICAgICAgICAgJHt0aGlzLnJlbmRlclNpZGViYXIoKX0KICAgICAgICAgICR7dGhpcy5yZW5kZXJDb250ZW50KCl9CiAgICAgICAgPC9tYWluPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZUJ1Y2tldERpYWxvZygpfQogICAgICAke3RoaXMucmVuZGVyQ3JlYXRlQ29sbGVjdGlvbkRpYWxvZygpfQogICAgICAke3RoaXMucmVuZGVyQ3JlYXRlRGF0YWJhc2VEaWFsb2coKX0KICAgIGA7CiAgfQogIHJlbmRlckNyZWF0ZUJ1Y2tldERpYWxvZygpIHsKICAgIGlmICghdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5DcmVhdGUgTmV3IEJ1Y2tldDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJCdWNrZXQgbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdCdWNrZXROYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLm5ld0J1Y2tldE5hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5jcmVhdGVCdWNrZXQoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZUJ1Y2tldCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlQ29sbGVjdGlvbkRpYWxvZygpIHsKICAgIGlmICghdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZykgcmV0dXJuICIiOwogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBDb2xsZWN0aW9uIGluICR7dGhpcy5zZWxlY3RlZERhdGFiYXNlfTwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJDb2xsZWN0aW9uIG5hbWUiCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMubmV3Q29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3Q29sbGVjdGlvbk5hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5jcmVhdGVDb2xsZWN0aW9uKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0NvbGxlY3Rpb25OYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckNyZWF0ZURhdGFiYXNlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZykgcmV0dXJuICIiOwogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5DcmVhdGUgTmV3IERhdGFiYXNlPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkRhdGFiYXNlIG5hbWUiCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMubmV3RGF0YWJhc2VOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLm5ld0RhdGFiYXNlTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZURhdGFiYXNlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlRGF0YWJhc2UoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclNpZGViYXIoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5CdWNrZXRzPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjcmVhdGUtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSB0cnVlfT4KICAgICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjEyIiB5MT0iNSIgeDI9IjEyIiB5Mj0iMTkiPjwvbGluZT4KICAgICAgICAgICAgICA8bGluZSB4MT0iNSIgeTE9IjEyIiB4Mj0iMTkiIHkyPSIxMiI+PC9saW5lPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgTmV3IEJ1Y2tldAogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMuYnVja2V0cy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gYnVja2V0cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmJ1Y2tldHMubWFwKAogICAgICAgIChidWNrZXQpID0+IGh0bWw4YAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWl0ZW0gJHtidWNrZXQgPT09IHRoaXMuc2VsZWN0ZWRCdWNrZXQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RCdWNrZXQoYnVja2V0KX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQnVja2V0Q29udGV4dE1lbnUoZTExLCBidWNrZXQpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaWRlYmFyLWl0ZW0tbmFtZSI+JHtidWNrZXR9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICAgICl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJtb25nbyIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxhc2lkZSBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+RGF0YWJhc2VzICYgQ29sbGVjdGlvbnM8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gdHJ1ZX0+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjUiIHkxPSIxMiIgeDI9IjE5IiB5Mj0iMTIiPjwvbGluZT4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIE5ldyBEYXRhYmFzZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgICAke3RoaXMuZGF0YWJhc2VzLmxlbmd0aCA9PT0gMCA/IGh0bWw4YDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSIgc3R5bGU9ImNvbG9yOiAjNjY2OyBjdXJzb3I6IGRlZmF1bHQ7Ij5ObyBkYXRhYmFzZXMgZm91bmQ8L2Rpdj5gIDogdGhpcy5kYXRhYmFzZXMubWFwKChkYikgPT4gdGhpcy5yZW5kZXJEYXRhYmFzZUdyb3VwKGRiKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2FzaWRlPgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWw4YAogICAgICA8YXNpZGUgY2xhc3M9InNpZGViYXIiPgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaGVhZGVyIj5TZXR0aW5nczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItbGlzdCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iPkNvbm5lY3Rpb248L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNpZGViYXItaXRlbSI+RGlzcGxheTwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2FzaWRlPgogICAgYDsKICB9CiAgcmVuZGVyRGF0YWJhc2VHcm91cChkYikgewogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkYi1ncm91cCI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRiLWdyb3VwLWhlYWRlciAke3RoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIubmFtZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdERhdGFiYXNlKGRiLm5hbWUpfQogICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEYXRhYmFzZUNvbnRleHRNZW51KGUxMSwgZGIubmFtZSl9CiAgICAgICAgPgogICAgICAgICAgPHN2ZyB3aWR0aD0iMTQiIGhlaWdodD0iMTQiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgPHBhdGggZD0iTTMgNXYxNGMwIDEuNjYgNCAzIDkgM3M5LTEuMzQgOS0zVjUiPjwvcGF0aD4KICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImZsZXg6IDE7Ij4ke2RiLm5hbWV9PC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5zZWxlY3RlZERhdGFiYXNlID09PSBkYi5uYW1lID8gdGhpcy5yZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGIubmFtZSkgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDb2xsZWN0aW9uc0xpc3QoZGJOYW1lKSB7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDx0c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMKICAgICAgICAuZGF0YWJhc2VOYW1lPSR7ZGJOYW1lfQogICAgICAgIC5zZWxlY3RlZENvbGxlY3Rpb249JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICBAY29sbGVjdGlvbi1zZWxlY3RlZD0keyhlMTEpID0+IHRoaXMuc2VsZWN0Q29sbGVjdGlvbihlMTEuZGV0YWlsKX0KICAgICAgICBAY29sbGVjdGlvbi1kZWxldGVkPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpfQogICAgICA+PC90c3ZpZXctbW9uZ28tY29sbGVjdGlvbnM+CiAgICBgOwogIH0KICBoYW5kbGVDb2xsZWN0aW9uRGVsZXRlZChlMTEpIHsKICAgIGNvbnN0IHsgY29sbGVjdGlvbk5hbWUgfSA9IGUxMS5kZXRhaWw7CiAgICBpZiAodGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25OYW1lKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICB9CiAgfQogIHJlbmRlckNvbnRlbnQoKSB7CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gInMzIikgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRCdWNrZXQpIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgYnVja2V0IHRvIGJyb3dzZTwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIHJldHVybiBodG1sOGAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHRzdmlldy1zMy1icm93c2VyIC5idWNrZXROYW1lPSR7dGhpcy5zZWxlY3RlZEJ1Y2tldH0+PC90c3ZpZXctczMtYnJvd3Nlcj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iKSB7CiAgICAgIGlmICghdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24pIHsKICAgICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+CiAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgPGVsbGlwc2UgY3g9IjEyIiBjeT0iNSIgcng9IjkiIHJ5PSIzIj48L2VsbGlwc2U+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjEgMTJjMCAxLjY2LTQgMy05IDNzLTktMS4zNC05LTMiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPHA+U2VsZWN0IGEgY29sbGVjdGlvbiB0byB2aWV3IGRvY3VtZW50czwvcD4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgOwogICAgICB9CiAgICAgIHJldHVybiBodG1sOGAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgICAgPHRzdmlldy1tb25nby1icm93c2VyCiAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLnNlbGVjdGVkRGF0YWJhc2V9CiAgICAgICAgICAgIC5jb2xsZWN0aW9uTmFtZT0ke3RoaXMuc2VsZWN0ZWRDb2xsZWN0aW9ufQogICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWJyb3dzZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgPGgyPlNldHRpbmdzPC9oMj4KICAgICAgICA8cD5Db25maWd1cmF0aW9uIG9wdGlvbnMgY29taW5nIHNvb24uPC9wPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdCA9IF9fZGVjb3JhdG9yU3RhcnQoX2E0KTsKX3ZpZXdNb2RlID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQnVja2V0ID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkRGF0YWJhc2UgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRDb2xsZWN0aW9uID0gbmV3IFdlYWtNYXAoKTsKX2J1Y2tldHMgPSBuZXcgV2Vha01hcCgpOwpfZGF0YWJhc2VzID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dDcmVhdGVCdWNrZXREaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3QnVja2V0TmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IG5ldyBXZWFrTWFwKCk7Cl9uZXdDb2xsZWN0aW9uTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3RGF0YWJhc2VOYW1lID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJ2aWV3TW9kZSIsIF92aWV3TW9kZV9kZWMsIFRzdmlld0FwcCwgX3ZpZXdNb2RlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzZWxlY3RlZEJ1Y2tldCIsIF9zZWxlY3RlZEJ1Y2tldF9kZWMsIFRzdmlld0FwcCwgX3NlbGVjdGVkQnVja2V0KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzZWxlY3RlZERhdGFiYXNlIiwgX3NlbGVjdGVkRGF0YWJhc2VfZGVjLCBUc3ZpZXdBcHAsIF9zZWxlY3RlZERhdGFiYXNlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzZWxlY3RlZENvbGxlY3Rpb24iLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYywgVHN2aWV3QXBwLCBfc2VsZWN0ZWRDb2xsZWN0aW9uKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJidWNrZXRzIiwgX2J1Y2tldHNfZGVjLCBUc3ZpZXdBcHAsIF9idWNrZXRzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJkYXRhYmFzZXMiLCBfZGF0YWJhc2VzX2RlYywgVHN2aWV3QXBwLCBfZGF0YWJhc2VzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzaG93Q3JlYXRlQnVja2V0RGlhbG9nIiwgX3Nob3dDcmVhdGVCdWNrZXREaWFsb2dfZGVjLCBUc3ZpZXdBcHAsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJuZXdCdWNrZXROYW1lIiwgX25ld0J1Y2tldE5hbWVfZGVjLCBUc3ZpZXdBcHAsIF9uZXdCdWNrZXROYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyIsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJuZXdDb2xsZWN0aW9uTmFtZSIsIF9uZXdDb2xsZWN0aW9uTmFtZV9kZWMsIFRzdmlld0FwcCwgX25ld0NvbGxlY3Rpb25OYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJzaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2ciLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nX2RlYywgVHN2aWV3QXBwLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDQsICJuZXdEYXRhYmFzZU5hbWUiLCBfbmV3RGF0YWJhc2VOYW1lX2RlYywgVHN2aWV3QXBwLCBfbmV3RGF0YWJhc2VOYW1lKTsKVHN2aWV3QXBwID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQsIDAsICJUc3ZpZXdBcHAiLCBfVHN2aWV3QXBwX2RlY29yYXRvcnMsIFRzdmlld0FwcCk7Cl9fcHVibGljRmllbGQoVHN2aWV3QXBwLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIzLmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzM2AKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdHN2aWV3LWJnLXByaW1hcnksICMxYTFhMWEpOwogICAgICAgIGNvbG9yOiAjZWVlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmFwcC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiA0OHB4IDFmcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5hcHAtaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTQxNDE0OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAuYXBwLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5hcHAtdGl0bGUgc3ZnIHsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLm5hdi10YWIgewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgfQoKICAgICAgLm5hdi10YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuYXBwLW1haW4gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAyNDBweCAxZnI7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnNpZGViYXIgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzMzMzsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuc2lkZWJhci1saXN0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1czsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtIC5jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5jb250ZW50LWFyZWEgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgc3ZnIHsKICAgICAgICB3aWR0aDogNjRweDsKICAgICAgICBoZWlnaHQ6IDY0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAuZGItZ3JvdXAtaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGItZ3JvdXAtaGVhZGVyOmhvdmVyIHsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgfQoKICAgICAgLmRiLWdyb3VwLWNvbGxlY3Rpb25zIHsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDEycHg7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jcmVhdGUtYnRuIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IGRhc2hlZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5jcmVhdGUtYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpOwogICAgICB9CgogICAgICAuZGlhbG9nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuZGlhbG9nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtaW4td2lkdGg6IDQwMHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgfQoKICAgICAgLmRpYWxvZy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICMxNDE0MTQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNDA0MDQwOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNTA1MDUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tZGVsZXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbS1uYW1lIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxLCBUc3ZpZXdBcHApOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1icm93c2VyLnRzCnZhciBfcmVmcmVzaEtleV9kZWMsIF9zZWxlY3RlZEtleV9kZWMsIF9jdXJyZW50UHJlZml4X2RlYywgX3ZpZXdUeXBlX2RlYywgX2J1Y2tldE5hbWVfZGVjLCBfYTUsIF9Uc3ZpZXdTM0Jyb3dzZXJfZGVjb3JhdG9ycywgX2luaXQyLCBfYnVja2V0TmFtZSwgX3ZpZXdUeXBlLCBfY3VycmVudFByZWZpeCwgX3NlbGVjdGVkS2V5LCBfcmVmcmVzaEtleTsKdmFyIHsgaHRtbDogaHRtbDksIGNzczogY3NzNCwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjQsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQzLCBwcm9wZXJ0eTogcHJvcGVydHkyLCBzdGF0ZTogc3RhdGUzLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ0IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDMoInRzdmlldy1zMy1icm93c2VyIildOwp2YXIgVHN2aWV3UzNCcm93c2VyID0gY2xhc3MgZXh0ZW5kcyAoX2E1ID0gRGVlc0VsZW1lbnQ0LCBfYnVja2V0TmFtZV9kZWMgPSBbcHJvcGVydHkyKHsgdHlwZTogU3RyaW5nIH0pXSwgX3ZpZXdUeXBlX2RlYyA9IFtzdGF0ZTMoKV0sIF9jdXJyZW50UHJlZml4X2RlYyA9IFtzdGF0ZTMoKV0sIF9zZWxlY3RlZEtleV9kZWMgPSBbc3RhdGUzKCldLCBfcmVmcmVzaEtleV9kZWMgPSBbc3RhdGUzKCldLCBfYTUpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3ZpZXdUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDEyLCB0aGlzLCAiY29sdW1ucyIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2N1cnJlbnRQcmVmaXgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZEtleSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjQsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyNywgdGhpcyk7CiAgfQogIHNldFZpZXdUeXBlKHR5cGU1KSB7CiAgICB0aGlzLnZpZXdUeXBlID0gdHlwZTU7CiAgfQogIG5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCkgewogICAgdGhpcy5jdXJyZW50UHJlZml4ID0gcHJlZml4NDsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICB9CiAgaGFuZGxlS2V5U2VsZWN0ZWQoZTExKSB7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gZTExLmRldGFpbC5rZXk7CiAgfQogIGhhbmRsZU5hdmlnYXRlKGUxMSkgewogICAgdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KGUxMS5kZXRhaWwucHJlZml4KTsKICB9CiAgaGFuZGxlT2JqZWN0RGVsZXRlZChlMTEpIHsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICAgIHRoaXMucmVmcmVzaEtleSsrOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikpIHsKICAgICAgdGhpcy5zZWxlY3RlZEtleSA9ICIiOwogICAgICB0aGlzLmN1cnJlbnRQcmVmaXggPSAiIjsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgYnJlYWRjcnVtYlBhcnRzID0gdGhpcy5jdXJyZW50UHJlZml4ID8gdGhpcy5jdXJyZW50UHJlZml4LnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pIDogW107CiAgICByZXR1cm4gaHRtbDlgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWIiPgogICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KCIiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICR7YnJlYWRjcnVtYlBhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiB7CiAgICAgIGNvbnN0IHByZWZpeDQgPSBicmVhZGNydW1iUGFydHMuc2xpY2UoMCwgaW5kZXgyICsgMSkuam9pbigiLyIpICsgIi8iOwogICAgICByZXR1cm4gaHRtbDlgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPi88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7cGFydH0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICBgOwogICAgfSl9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRvZ2dsZSI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idmlldy1idG4gJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdUeXBlKCJjb2x1bW5zIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDb2x1bW5zCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InZpZXctYnRuICR7dGhpcy52aWV3VHlwZSA9PT0gImtleXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3VHlwZSgia2V5cyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTGlzdAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50ICR7dGhpcy5zZWxlY3RlZEtleSA/ICJoYXMtcHJldmlldyIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi12aWV3Ij4KICAgICAgICAgICAgJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyBodG1sOWAKICAgICAgICAgICAgICAgICAgPHRzdmlldy1zMy1jb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgLmJ1Y2tldE5hbWU9JHt0aGlzLmJ1Y2tldE5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmN1cnJlbnRQcmVmaXg9JHt0aGlzLmN1cnJlbnRQcmVmaXh9CiAgICAgICAgICAgICAgICAgICAgLnJlZnJlc2hLZXk9JHt0aGlzLnJlZnJlc2hLZXl9CiAgICAgICAgICAgICAgICAgICAgQGtleS1zZWxlY3RlZD0ke3RoaXMuaGFuZGxlS2V5U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgICAgQG5hdmlnYXRlPSR7dGhpcy5oYW5kbGVOYXZpZ2F0ZX0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLWNvbHVtbnM+CiAgICAgICAgICAgICAgICBgIDogaHRtbDlgCiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMta2V5cwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5jdXJyZW50UHJlZml4PSR7dGhpcy5jdXJyZW50UHJlZml4fQogICAgICAgICAgICAgICAgICAgIC5yZWZyZXNoS2V5PSR7dGhpcy5yZWZyZXNoS2V5fQogICAgICAgICAgICAgICAgICAgIEBrZXktc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZUtleVNlbGVjdGVkfQogICAgICAgICAgICAgICAgICAgIEBuYXZpZ2F0ZT0ke3RoaXMuaGFuZGxlTmF2aWdhdGV9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1rZXlzPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zZWxlY3RlZEtleSA/IGh0bWw5YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1wYW5lbCI+CiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMtcHJldmlldwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5vYmplY3RLZXk9JHt0aGlzLnNlbGVjdGVkS2V5fQogICAgICAgICAgICAgICAgICAgIEBvYmplY3QtZGVsZXRlZD0ke3RoaXMuaGFuZGxlT2JqZWN0RGVsZXRlZH0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLXByZXZpZXc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MiA9IF9fZGVjb3JhdG9yU3RhcnQoX2E1KTsKX2J1Y2tldE5hbWUgPSBuZXcgV2Vha01hcCgpOwpfdmlld1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfY3VycmVudFByZWZpeCA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEtleSA9IG5ldyBXZWFrTWFwKCk7Cl9yZWZyZXNoS2V5ID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAiYnVja2V0TmFtZSIsIF9idWNrZXROYW1lX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfYnVja2V0TmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInZpZXdUeXBlIiwgX3ZpZXdUeXBlX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfdmlld1R5cGUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJjdXJyZW50UHJlZml4IiwgX2N1cnJlbnRQcmVmaXhfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9jdXJyZW50UHJlZml4KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAic2VsZWN0ZWRLZXkiLCBfc2VsZWN0ZWRLZXlfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9zZWxlY3RlZEtleSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMsIFRzdmlld1MzQnJvd3NlciwgX3JlZnJlc2hLZXkpOwpUc3ZpZXdTM0Jyb3dzZXIgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDAsICJUc3ZpZXdTM0Jyb3dzZXIiLCBfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMsIFRzdmlld1MzQnJvd3Nlcik7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNCcm93c2VyLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI0LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmJyb3dzZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnZpZXctdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudmlldy1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudmlldy1idG46aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLnZpZXctYnRuLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDM1MHB4OwogICAgICB9CgogICAgICAubWFpbi12aWV3IHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAucHJldmlldy1wYW5lbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7CiAgICAgICAgLmNvbnRlbnQsCiAgICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQoKICAgICAgICAucHJldmlldy1wYW5lbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxLCBUc3ZpZXdTM0Jyb3dzZXIpOwoKLy8gdHNfd2ViL3V0aWxpdGllcy9mb3JtYXR0ZXJzLnRzCmZ1bmN0aW9uIGZvcm1hdFNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IHZvaWQgMCB8fCBieXRlcyA9PT0gbnVsbCkgcmV0dXJuICItIjsKICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAiMCBCIjsKICBjb25zdCB1bml0czIgPSBbIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiXTsKICBsZXQgc2l6ZSA9IGJ5dGVzOwogIGxldCB1bml0SW5kZXggPSAwOwogIHdoaWxlIChzaXplID49IDEwMjQgJiYgdW5pdEluZGV4IDwgdW5pdHMyLmxlbmd0aCAtIDEpIHsKICAgIHNpemUgLz0gMTAyNDsKICAgIHVuaXRJbmRleCsrOwogIH0KICByZXR1cm4gYCR7c2l6ZS50b0ZpeGVkKHVuaXRJbmRleCA+IDAgPyAxIDogMCl9ICR7dW5pdHMyW3VuaXRJbmRleF19YDsKfQpmdW5jdGlvbiBmb3JtYXRDb3VudChjb3VudDIpIHsKICBpZiAoY291bnQyID09PSB2b2lkIDAgfHwgY291bnQyID09PSBudWxsKSByZXR1cm4gIiI7CiAgaWYgKGNvdW50MiA+PSAxZTYpIHJldHVybiBgJHsoY291bnQyIC8gMWU2KS50b0ZpeGVkKDEpfU1gOwogIGlmIChjb3VudDIgPj0gMWUzKSByZXR1cm4gYCR7KGNvdW50MiAvIDFlMykudG9GaXhlZCgxKX1LYDsKICByZXR1cm4gY291bnQyLnRvU3RyaW5nKCk7Cn0KZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDIpIHsKICBjb25zdCBwYXJ0cyA9IHBhdGgyLnJlcGxhY2UoL1wvJC8sICIiKS5zcGxpdCgiLyIpOwogIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCBwYXRoMjsKfQoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1jb2x1bW5zLnRzCnZhciBfbG9hZGluZ19kZWMsIF9jb2x1bW5zX2RlYywgX3JlZnJlc2hLZXlfZGVjMiwgX2N1cnJlbnRQcmVmaXhfZGVjMiwgX2J1Y2tldE5hbWVfZGVjMiwgX2E2LCBfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMsIF9pbml0MywgX2J1Y2tldE5hbWUyLCBfY3VycmVudFByZWZpeDIsIF9yZWZyZXNoS2V5MiwgX2NvbHVtbnMsIF9sb2FkaW5nOwp2YXIgeyBodG1sOiBodG1sMTAsIGNzczogY3NzNSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjUsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ0LCBwcm9wZXJ0eTogcHJvcGVydHkzLCBzdGF0ZTogc3RhdGU0LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ1IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTMgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3UzNDb2x1bW5zX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDQoInRzdmlldy1zMy1jb2x1bW5zIildOwp2YXIgVHN2aWV3UzNDb2x1bW5zID0gY2xhc3MgZXh0ZW5kcyAoX2E2ID0gRGVlc0VsZW1lbnQ1LCBfYnVja2V0TmFtZV9kZWMyID0gW3Byb3BlcnR5Myh7IHR5cGU6IFN0cmluZyB9KV0sIF9jdXJyZW50UHJlZml4X2RlYzIgPSBbcHJvcGVydHkzKHsgdHlwZTogU3RyaW5nIH0pXSwgX3JlZnJlc2hLZXlfZGVjMiA9IFtwcm9wZXJ0eTMoeyB0eXBlOiBOdW1iZXIgfSldLCBfY29sdW1uc19kZWMgPSBbc3RhdGU0KCldLCBfbG9hZGluZ19kZWMgPSBbc3RhdGU0KCldLCBfYTYpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXkyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDE2LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2x1bW5zLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDIwLCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyNCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyNywgdGhpcyk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJyZXNpemluZyIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiREVGQVVMVF9DT0xVTU5fV0lEVEgiLCAyNTApOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiTUlOX0NPTFVNTl9XSURUSCIsIDE1MCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJNQVhfQ09MVU1OX1dJRFRIIiwgNTAwKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZVJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6aW5nKSByZXR1cm47CiAgICAgIGNvbnN0IGRlbHRhID0gZTExLmNsaWVudFggLSB0aGlzLnJlc2l6aW5nLnN0YXJ0WDsKICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1pbigKICAgICAgICB0aGlzLk1BWF9DT0xVTU5fV0lEVEgsCiAgICAgICAgTWF0aC5tYXgodGhpcy5NSU5fQ09MVU1OX1dJRFRILCB0aGlzLnJlc2l6aW5nLnN0YXJ0V2lkdGggKyBkZWx0YSkKICAgICAgKTsKICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSB0aGlzLnJlc2l6aW5nLmNvbHVtbkluZGV4KSB7CiAgICAgICAgICByZXR1cm4geyAuLi5jb2wsIHdpZHRoOiBuZXdXaWR0aCB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29sOwogICAgICB9KTsKICAgIH0pOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAic3RvcFJlc2l6ZSIsICgpID0+IHsKICAgICAgdGhpcy5yZXNpemluZyA9IG51bGw7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUmVzaXplKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuc3RvcFJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gIiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICIiOwogICAgfSk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicmVmcmVzaEtleSIpKSB7CiAgICAgIHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZEluaXRpYWxDb2x1bW4oKSB7CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMuY3VycmVudFByZWZpeCwgIi8iKTsKICAgICAgdGhpcy5jb2x1bW5zID0gWwogICAgICAgIHsKICAgICAgICAgIHByZWZpeDogdGhpcy5jdXJyZW50UHJlZml4LAogICAgICAgICAgb2JqZWN0czogcmVzdWx0Lm9iamVjdHMsCiAgICAgICAgICBwcmVmaXhlczogcmVzdWx0LnByZWZpeGVzLAogICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLAogICAgICAgICAgd2lkdGg6IHRoaXMuREVGQVVMVF9DT0xVTU5fV0lEVEgKICAgICAgICB9CiAgICAgIF07CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3RzOiIsIGVycik7CiAgICAgIHRoaXMuY29sdW1ucyA9IFtdOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGFzeW5jIHNlbGVjdEZvbGRlcihjb2x1bW5JbmRleCwgcHJlZml4NCkgewogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sLCBpMTEpID0+IHsKICAgICAgaWYgKGkxMSA9PT0gY29sdW1uSW5kZXgpIHsKICAgICAgICByZXR1cm4geyAuLi5jb2wsIHNlbGVjdGVkSXRlbTogcHJlZml4NCB9OwogICAgICB9CiAgICAgIHJldHVybiBjb2w7CiAgICB9KTsKICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5zbGljZSgwLCBjb2x1bW5JbmRleCArIDEpOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHByZWZpeDQsICIvIik7CiAgICAgIHRoaXMuY29sdW1ucyA9IFsKICAgICAgICAuLi50aGlzLmNvbHVtbnMsCiAgICAgICAgewogICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgb2JqZWN0czogcmVzdWx0Lm9iamVjdHMsCiAgICAgICAgICBwcmVmaXhlczogcmVzdWx0LnByZWZpeGVzLAogICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLAogICAgICAgICAgd2lkdGg6IHRoaXMuREVGQVVMVF9DT0xVTU5fV0lEVEgKICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLnNjcm9sbFRvRW5kKCkpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZm9sZGVyOiIsIGVycik7CiAgICB9CiAgfQogIHNjcm9sbFRvRW5kKCkgewogICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxXaWR0aCAtIHRoaXMuY2xpZW50V2lkdGg7CiAgfQogIHN0YXJ0UmVzaXplKGUxMSwgY29sdW1uSW5kZXgpIHsKICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdGhpcy5yZXNpemluZyA9IHsKICAgICAgY29sdW1uSW5kZXgsCiAgICAgIHN0YXJ0WDogZTExLmNsaWVudFgsCiAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuY29sdW1uc1tjb2x1bW5JbmRleF0ud2lkdGgKICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5zdG9wUmVzaXplKTsKICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gImNvbC1yZXNpemUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gIm5vbmUiOwogIH0KICBzZWxlY3RGaWxlKGNvbHVtbkluZGV4LCBrZXkyKSB7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICBpZiAoaTExID09PSBjb2x1bW5JbmRleCkgewogICAgICAgIHJldHVybiB7IC4uLmNvbCwgc2VsZWN0ZWRJdGVtOiBrZXkyIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbDsKICAgIH0pOwogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKDAsIGNvbHVtbkluZGV4ICsgMSk7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgIG5ldyBDdXN0b21FdmVudCgia2V5LXNlbGVjdGVkIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IGtleTIgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBnZXRGaWxlSWNvbihrZXkyKSB7CiAgICBjb25zdCBleHQgPSBrZXkyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgIiI7CiAgICBjb25zdCBpY29uTWFwID0gewogICAgICBqc29uOiAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiIsCiAgICAgIHR4dDogIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiLAogICAgICBwbmc6ICJNNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIsCiAgICAgIGpwZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAganBlZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAgZ2lmOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBwZGY6ICJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IgogICAgfTsKICAgIHJldHVybiBpY29uTWFwW2V4dF0gfHwgIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiOwogIH0KICBoYW5kbGVGb2xkZXJDb250ZXh0TWVudShldmVudCwgY29sdW1uSW5kZXgsIHByZWZpeDQpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnUzLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiT3BlbiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyT3BlbiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdEZvbGRlcihjb2x1bW5JbmRleCwgcHJlZml4NCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwcmVmaXg0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBGb2xkZXIiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGZvbGRlciAiJHtnZXRGaWxlTmFtZShwcmVmaXg0KX0iIGFuZCBhbGwgaXRzIGNvbnRlbnRzP2ApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZVByZWZpeCh0aGlzLmJ1Y2tldE5hbWUsIHByZWZpeDQpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIGhhbmRsZUZpbGVDb250ZXh0TWVudShldmVudCwgY29sdW1uSW5kZXgsIGtleTIpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnUzLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiUHJldmlldyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShjb2x1bW5JbmRleCwga2V5Mik7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRvd25sb2FkIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldE9iamVjdFVybCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSBnZXRGaWxlTmFtZShrZXkyKTsKICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChrZXkyKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZmlsZSAiJHtnZXRGaWxlTmFtZShrZXkyKX0iP2ApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZU9iamVjdCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gaHRtbDEwYDxkaXYgY2xhc3M9ImxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj5gOwogICAgfQogICAgcmV0dXJuIGh0bWwxMGAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleDIpID0+IHRoaXMucmVuZGVyQ29sdW1uV3JhcHBlcihjb2x1bW4sIGluZGV4MikpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckNvbHVtbldyYXBwZXIoY29sdW1uLCBpbmRleDIpIHsKICAgIHJldHVybiBodG1sMTBgCiAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi13cmFwcGVyIj4KICAgICAgICAke3RoaXMucmVuZGVyQ29sdW1uKGNvbHVtbiwgaW5kZXgyKX0KICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSAke3RoaXMucmVzaXppbmc/LmNvbHVtbkluZGV4ID09PSBpbmRleDIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgIEBtb3VzZWRvd249JHsoZTExKSA9PiB0aGlzLnN0YXJ0UmVzaXplKGUxMSwgaW5kZXgyKX0KICAgICAgICA+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ29sdW1uKGNvbHVtbiwgaW5kZXgyKSB7CiAgICBjb25zdCBoZWFkZXJOYW1lID0gY29sdW1uLnByZWZpeCA/IGdldEZpbGVOYW1lKGNvbHVtbi5wcmVmaXgpIDogdGhpcy5idWNrZXROYW1lOwogICAgcmV0dXJuIGh0bWwxMGAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1uIiBzdHlsZT0id2lkdGg6ICR7Y29sdW1uLndpZHRofXB4Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4taGVhZGVyIiB0aXRsZT0ke2NvbHVtbi5wcmVmaXggfHwgdGhpcy5idWNrZXROYW1lfT4KICAgICAgICAgICR7aGVhZGVyTmFtZX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4taXRlbXMiPgogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubGVuZ3RoID09PSAwICYmIGNvbHVtbi5vYmplY3RzLmxlbmd0aCA9PT0gMCA/IGh0bWwxMGA8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+RW1wdHkgZm9sZGVyPC9kaXY+YCA6ICIifQogICAgICAgICAgJHtjb2x1bW4ucHJlZml4ZXMubWFwKAogICAgICAocHJlZml4NCkgPT4gaHRtbDEwYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJjb2x1bW4taXRlbSBmb2xkZXIgJHtjb2x1bW4uc2VsZWN0ZWRJdGVtID09PSBwcmVmaXg0ID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0Rm9sZGVyKGluZGV4MiwgcHJlZml4NCl9CiAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUZvbGRlckNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBwcmVmaXg0KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPiR7Z2V0RmlsZU5hbWUocHJlZml4NCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY2hldnJvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iOSAxOCAxNSAxMiA5IDYiPjwvcG9seWxpbmU+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYAogICAgKX0KICAgICAgICAgICR7Y29sdW1uLm9iamVjdHMubWFwKAogICAgICAob2JqKSA9PiBodG1sMTBgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9ImNvbHVtbi1pdGVtICR7Y29sdW1uLnNlbGVjdGVkSXRlbSA9PT0gb2JqLmtleSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEZpbGUoaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRmlsZUNvbnRleHRNZW51KGUxMSwgaW5kZXgyLCBvYmoua2V5KX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3ZnIGNsYXNzPSJpY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSIke3RoaXMuZ2V0RmlsZUljb24ob2JqLmtleSl9IiAvPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibmFtZSI+JHtnZXRGaWxlTmFtZShvYmoua2V5KX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAKICAgICl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MyA9IF9fZGVjb3JhdG9yU3RhcnQoX2E2KTsKX2J1Y2tldE5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX2N1cnJlbnRQcmVmaXgyID0gbmV3IFdlYWtNYXAoKTsKX3JlZnJlc2hLZXkyID0gbmV3IFdlYWtNYXAoKTsKX2NvbHVtbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWMyLCBUc3ZpZXdTM0NvbHVtbnMsIF9idWNrZXROYW1lMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMyLCBUc3ZpZXdTM0NvbHVtbnMsIF9jdXJyZW50UHJlZml4Mik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMyLCBUc3ZpZXdTM0NvbHVtbnMsIF9yZWZyZXNoS2V5Mik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImNvbHVtbnMiLCBfY29sdW1uc19kZWMsIFRzdmlld1MzQ29sdW1ucywgX2NvbHVtbnMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9sb2FkaW5nKTsKVHN2aWV3UzNDb2x1bW5zID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCAwLCAiVHN2aWV3UzNDb2x1bW5zIiwgX1Rzdmlld1MzQ29sdW1uc19kZWNvcmF0b3JzLCBUc3ZpZXdTM0NvbHVtbnMpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld1MzQ29sdW1ucywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyNS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiBtYXgtY29udGVudDsKICAgICAgfQoKICAgICAgLmNvbHVtbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmNvbHVtbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDVweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZTpob3Zlcjo6YWZ0ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLmFjdGl2ZTo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICM0MDQwNDA7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBsZWZ0OiAxcHg7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4td3JhcHBlcjpsYXN0LWNoaWxkIC5yZXNpemUtaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuY29sdW1uLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtcyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0uZm9sZGVyIHsKICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbSAubmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbSAuY2hldnJvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDEsIFRzdmlld1MzQ29sdW1ucyk7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LXMzLWtleXMudHMKdmFyIF9maWx0ZXJUZXh0X2RlYywgX3NlbGVjdGVkS2V5X2RlYzIsIF9sb2FkaW5nX2RlYzIsIF9wcmVmaXhlc19kZWMsIF9hbGxLZXlzX2RlYywgX3JlZnJlc2hLZXlfZGVjMywgX2N1cnJlbnRQcmVmaXhfZGVjMywgX2J1Y2tldE5hbWVfZGVjMywgX2E3LCBfVHN2aWV3UzNLZXlzX2RlY29yYXRvcnMsIF9pbml0NCwgX2J1Y2tldE5hbWUzLCBfY3VycmVudFByZWZpeDMsIF9yZWZyZXNoS2V5MywgX2FsbEtleXMsIF9wcmVmaXhlcywgX2xvYWRpbmcyLCBfc2VsZWN0ZWRLZXkyLCBfZmlsdGVyVGV4dDsKdmFyIHsgaHRtbDogaHRtbDExLCBjc3M6IGNzczYsIGNzc01hbmFnZXI6IGNzc01hbmFnZXI2LCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50NSwgcHJvcGVydHk6IHByb3BlcnR5NCwgc3RhdGU6IHN0YXRlNSwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50NiB9ID0gcGx1Z2luc19leHBvcnRzNTsKdmFyIHsgRGVlc0NvbnRleHRtZW51OiBEZWVzQ29udGV4dG1lbnU0IH0gPSBkaXN0X3RzX3dlYl9leHBvcnRzMjsKX1Rzdmlld1MzS2V5c19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ1KCJ0c3ZpZXctczMta2V5cyIpXTsKdmFyIFRzdmlld1MzS2V5cyA9IGNsYXNzIGV4dGVuZHMgKF9hNyA9IERlZXNFbGVtZW50NiwgX2J1Y2tldE5hbWVfZGVjMyA9IFtwcm9wZXJ0eTQoeyB0eXBlOiBTdHJpbmcgfSldLCBfY3VycmVudFByZWZpeF9kZWMzID0gW3Byb3BlcnR5NCh7IHR5cGU6IFN0cmluZyB9KV0sIF9yZWZyZXNoS2V5X2RlYzMgPSBbcHJvcGVydHk0KHsgdHlwZTogTnVtYmVyIH0pXSwgX2FsbEtleXNfZGVjID0gW3N0YXRlNSgpXSwgX3ByZWZpeGVzX2RlYyA9IFtzdGF0ZTUoKV0sIF9sb2FkaW5nX2RlYzIgPSBbc3RhdGU1KCldLCBfc2VsZWN0ZWRLZXlfZGVjMiA9IFtzdGF0ZTUoKV0sIF9maWx0ZXJUZXh0X2RlYyA9IFtzdGF0ZTUoKV0sIF9hNykgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYnVja2V0TmFtZTMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2N1cnJlbnRQcmVmaXgzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcmVmcmVzaEtleTMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTYsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2FsbEtleXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjAsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9wcmVmaXhlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyNCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xvYWRpbmcyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDI4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRLZXkyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDMyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDM1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZmlsdGVyVGV4dCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAzOSwgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY3VycmVudFByZWZpeCIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicmVmcmVzaEtleSIpKSB7CiAgICAgIHRoaXMubG9hZE9iamVjdHMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZE9iamVjdHMoKSB7CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMuY3VycmVudFByZWZpeCwgIi8iKTsKICAgICAgdGhpcy5hbGxLZXlzID0gcmVzdWx0Lm9iamVjdHM7CiAgICAgIHRoaXMucHJlZml4ZXMgPSByZXN1bHQucHJlZml4ZXM7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3RzOiIsIGVycik7CiAgICAgIHRoaXMuYWxsS2V5cyA9IFtdOwogICAgICB0aGlzLnByZWZpeGVzID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgaGFuZGxlRmlsdGVySW5wdXQoZTExKSB7CiAgICB0aGlzLmZpbHRlclRleHQgPSBlMTEudGFyZ2V0LnZhbHVlOwogIH0KICBzZWxlY3RLZXkoa2V5MiwgaXNGb2xkZXIpIHsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBrZXkyOwogICAgaWYgKGlzRm9sZGVyKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoIm5hdmlnYXRlIiwgewogICAgICAgICAgZGV0YWlsOiB7IHByZWZpeDoga2V5MiB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImtleS1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBrZXk6IGtleTIgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9CiAgfQogIGdldCBmaWx0ZXJlZEl0ZW1zKCkgewogICAgY29uc3QgZmlsdGVyMiA9IHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgZm9sZGVycyA9IHRoaXMucHJlZml4ZXMuZmlsdGVyKChwNykgPT4gIWZpbHRlcjIgfHwgZ2V0RmlsZU5hbWUocDcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyMikpLm1hcCgocDcpID0+ICh7IGtleTogcDcsIGlzRm9sZGVyOiB0cnVlLCBzaXplOiB2b2lkIDAgfSkpOwogICAgY29uc3QgZmlsZXMgPSB0aGlzLmFsbEtleXMuZmlsdGVyKChvMTMpID0+ICFmaWx0ZXIyIHx8IGdldEZpbGVOYW1lKG8xMy5rZXkpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyMikpLm1hcCgobzEzKSA9PiAoeyBrZXk6IG8xMy5rZXksIGlzRm9sZGVyOiBmYWxzZSwgc2l6ZTogbzEzLnNpemUgfSkpOwogICAgcmV0dXJuIFsuLi5mb2xkZXJzLCAuLi5maWxlc107CiAgfQogIGhhbmRsZUl0ZW1Db250ZXh0TWVudShldmVudCwga2V5MiwgaXNGb2xkZXIpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoaXNGb2xkZXIpIHsKICAgICAgRGVlc0NvbnRleHRtZW51NC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlck9wZW4iLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0S2V5KGtleTIsIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChrZXkyKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBmb2xkZXIgIiR7Z2V0RmlsZU5hbWUoa2V5Mil9IiBhbmQgYWxsIGl0cyBjb250ZW50cz9gKSkgewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZVByZWZpeCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPYmplY3RzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0gZWxzZSB7CiAgICAgIERlZXNDb250ZXh0bWVudTQub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJldmlldyIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpleWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0S2V5KGtleTIsIGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgYXBpU2VydmljZS5nZXRPYmplY3RVcmwodGhpcy5idWNrZXROYW1lLCBrZXkyKTsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB1cmw7CiAgICAgICAgICAgIGxpbmszLmRvd25sb2FkID0gZ2V0RmlsZU5hbWUoa2V5Mik7CiAgICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBQYXRoIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KGtleTIpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZmlsZSAiJHtnZXRGaWxlTmFtZShrZXkyKX0iP2ApKSB7CiAgICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlT2JqZWN0KHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfQogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDExYAogICAgICA8ZGl2IGNsYXNzPSJrZXlzLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVyLWJhciI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImZpbHRlci1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkZpbHRlciBmaWxlcy4uLiIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5maWx0ZXJUZXh0fQogICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUZpbHRlcklucHV0fQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ia2V5cy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDExYDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+YCA6IHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDAgPyBodG1sMTFgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIG9iamVjdHMgZm91bmQ8L2Rpdj5gIDogaHRtbDExYAogICAgICAgICAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6IDEwMHB4OyI+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmZpbHRlcmVkSXRlbXMubWFwKAogICAgICAoaXRlbSkgPT4gaHRtbDExYAogICAgICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5zZWxlY3RlZEtleSA9PT0gaXRlbS5rZXkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RLZXkoaXRlbS5rZXksIGl0ZW0uaXNGb2xkZXIpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ29udGV4dE1lbnUoZTExLCBpdGVtLmtleSwgaXRlbS5pc0ZvbGRlcil9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrZXktY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpdGVtLmlzRm9sZGVyID8gaHRtbDExYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImtleS1pY29uIGZvbGRlci1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ia2V5LWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbmFtZSI+JHtnZXRGaWxlTmFtZShpdGVtLmtleSl9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InNpemUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5pc0ZvbGRlciA/ICItIiA6IGZvcm1hdFNpemUoaXRlbS5zaXplKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ0ID0gX19kZWNvcmF0b3JTdGFydChfYTcpOwpfYnVja2V0TmFtZTMgPSBuZXcgV2Vha01hcCgpOwpfY3VycmVudFByZWZpeDMgPSBuZXcgV2Vha01hcCgpOwpfcmVmcmVzaEtleTMgPSBuZXcgV2Vha01hcCgpOwpfYWxsS2V5cyA9IG5ldyBXZWFrTWFwKCk7Cl9wcmVmaXhlcyA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nMiA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEtleTIgPSBuZXcgV2Vha01hcCgpOwpfZmlsdGVyVGV4dCA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9idWNrZXROYW1lMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImN1cnJlbnRQcmVmaXgiLCBfY3VycmVudFByZWZpeF9kZWMzLCBUc3ZpZXdTM0tleXMsIF9jdXJyZW50UHJlZml4Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMzLCBUc3ZpZXdTM0tleXMsIF9yZWZyZXNoS2V5Myk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImFsbEtleXMiLCBfYWxsS2V5c19kZWMsIFRzdmlld1MzS2V5cywgX2FsbEtleXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJwcmVmaXhlcyIsIF9wcmVmaXhlc19kZWMsIFRzdmlld1MzS2V5cywgX3ByZWZpeGVzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzIsIFRzdmlld1MzS2V5cywgX2xvYWRpbmcyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAic2VsZWN0ZWRLZXkiLCBfc2VsZWN0ZWRLZXlfZGVjMiwgVHN2aWV3UzNLZXlzLCBfc2VsZWN0ZWRLZXkyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYywgVHN2aWV3UzNLZXlzLCBfZmlsdGVyVGV4dCk7ClRzdmlld1MzS2V5cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgMCwgIlRzdmlld1MzS2V5cyIsIF9Uc3ZpZXdTM0tleXNfZGVjb3JhdG9ycywgVHN2aWV3UzNLZXlzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM0tleXMsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjYuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M2YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5rZXlzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5rZXlzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIH0KCiAgICAgIHRoZWFkIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIHRoIHsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICB0ZCB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMmEyYTNlOwogICAgICB9CgogICAgICB0cjpob3ZlciB0ZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjAzKTsKICAgICAgfQoKICAgICAgdHIuc2VsZWN0ZWQgdGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC5rZXktY2VsbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmtleS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5mb2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC5rZXktbmFtZSB7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAuc2l6ZS1jZWxsIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDEsIFRzdmlld1MzS2V5cyk7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LXMzLXByZXZpZXcudHMKdmFyIF9lcnJvcl9kZWMsIF9sYXN0TW9kaWZpZWRfZGVjLCBfc2l6ZV9kZWMsIF9jb250ZW50VHlwZV9kZWMsIF9jb250ZW50X2RlYywgX2xvYWRpbmdfZGVjMywgX29iamVjdEtleV9kZWMsIF9idWNrZXROYW1lX2RlYzQsIF9hOCwgX1Rzdmlld1MzUHJldmlld19kZWNvcmF0b3JzLCBfaW5pdDUsIF9idWNrZXROYW1lNCwgX29iamVjdEtleSwgX2xvYWRpbmczLCBfY29udGVudCwgX2NvbnRlbnRUeXBlLCBfc2l6ZSwgX2xhc3RNb2RpZmllZCwgX2Vycm9yOwp2YXIgeyBodG1sOiBodG1sMTIsIGNzczogY3NzNywgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjcsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ2LCBwcm9wZXJ0eTogcHJvcGVydHk1LCBzdGF0ZTogc3RhdGU2LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ3IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3UzNQcmV2aWV3X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDYoInRzdmlldy1zMy1wcmV2aWV3IildOwp2YXIgVHN2aWV3UzNQcmV2aWV3ID0gY2xhc3MgZXh0ZW5kcyAoX2E4ID0gRGVlc0VsZW1lbnQ3LCBfYnVja2V0TmFtZV9kZWM0ID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9vYmplY3RLZXlfZGVjID0gW3Byb3BlcnR5NSh7IHR5cGU6IFN0cmluZyB9KV0sIF9sb2FkaW5nX2RlYzMgPSBbc3RhdGU2KCldLCBfY29udGVudF9kZWMgPSBbc3RhdGU2KCldLCBfY29udGVudFR5cGVfZGVjID0gW3N0YXRlNigpXSwgX3NpemVfZGVjID0gW3N0YXRlNigpXSwgX2xhc3RNb2RpZmllZF9kZWMgPSBbc3RhdGU2KCldLCBfZXJyb3JfZGVjID0gW3N0YXRlNigpXSwgX2E4KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXROYW1lNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb2JqZWN0S2V5LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDIwLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29udGVudFR5cGUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjQsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaXplLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI4LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sYXN0TW9kaWZpZWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMzIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lcnJvciwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzOSwgdGhpcyk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIm9iamVjdEtleSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpKSB7CiAgICAgIGlmICh0aGlzLm9iamVjdEtleSkgewogICAgICAgIHRoaXMubG9hZE9iamVjdCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuY29udGVudCA9ICIiOwogICAgICAgIHRoaXMuY29udGVudFR5cGUgPSAiIjsKICAgICAgICB0aGlzLmVycm9yID0gIiI7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgbG9hZE9iamVjdCgpIHsKICAgIGlmICghdGhpcy5vYmplY3RLZXkgfHwgIXRoaXMuYnVja2V0TmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0KHRoaXMuYnVja2V0TmFtZSwgdGhpcy5vYmplY3RLZXkpOwogICAgICB0aGlzLmNvbnRlbnQgPSByZXN1bHQuY29udGVudDsKICAgICAgdGhpcy5jb250ZW50VHlwZSA9IHJlc3VsdC5jb250ZW50VHlwZTsKICAgICAgdGhpcy5zaXplID0gcmVzdWx0LnNpemU7CiAgICAgIHRoaXMubGFzdE1vZGlmaWVkID0gcmVzdWx0Lmxhc3RNb2RpZmllZDsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIG9iamVjdDoiLCBlcnIpOwogICAgICB0aGlzLmVycm9yID0gIkZhaWxlZCB0byBsb2FkIG9iamVjdCI7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgZm9ybWF0RGF0ZShkYXRlU3RyKSB7CiAgICBpZiAoIWRhdGVTdHIpIHJldHVybiAiLSI7CiAgICBjb25zdCBkYXRlID0gbmV3IERhdGUoZGF0ZVN0cik7CiAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVN0cmluZygpOwogIH0KICBpc0ltYWdlKCkgewogICAgcmV0dXJuIHRoaXMuY29udGVudFR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIik7CiAgfQogIGlzVGV4dCgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoInRleHQvIikgfHwgdGhpcy5jb250ZW50VHlwZSA9PT0gImFwcGxpY2F0aW9uL2pzb24iIHx8IHRoaXMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi94bWwiIHx8IHRoaXMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IjsKICB9CiAgZ2V0VGV4dENvbnRlbnQoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKHRoaXMuY29udGVudCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJpbmFyeVN0cmluZy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgYnl0ZXNbaTExXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigidXRmLTgiKS5kZWNvZGUoYnl0ZXMpOwogICAgfSBjYXRjaCB7CiAgICAgIHJldHVybiAiVW5hYmxlIHRvIGRlY29kZSBjb250ZW50IjsKICAgIH0KICB9CiAgYXN5bmMgaGFuZGxlRG93bmxvYWQoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBibG9iID0gbmV3IEJsb2IoW1VpbnQ4QXJyYXkuZnJvbShhdG9iKHRoaXMuY29udGVudCksIChjMTEpID0+IGMxMS5jaGFyQ29kZUF0KDApKV0sIHsKICAgICAgICB0eXBlOiB0aGlzLmNvbnRlbnRUeXBlCiAgICAgIH0pOwogICAgICBjb25zdCB1cmwgPSBVUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpOwogICAgICBjb25zdCBhNSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKICAgICAgYTUuaHJlZiA9IHVybDsKICAgICAgYTUuZG93bmxvYWQgPSBnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSk7CiAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoYTUpOwogICAgICBhNS5jbGljaygpOwogICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKGE1KTsKICAgICAgVVJMLnJldm9rZU9iamVjdFVSTCh1cmwpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRvd25sb2FkaW5nOiIsIGVycik7CiAgICB9CiAgfQogIGFzeW5jIGhhbmRsZURlbGV0ZSgpIHsKICAgIGlmICghY29uZmlybShgRGVsZXRlICIke2dldEZpbGVOYW1lKHRoaXMub2JqZWN0S2V5KX0iP2ApKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZU9iamVjdCh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMub2JqZWN0S2V5KTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgib2JqZWN0LWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsga2V5OiB0aGlzLm9iamVjdEtleSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZWxldGluZyBvYmplY3Q6IiwgZXJyKTsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgaWYgKCF0aGlzLm9iamVjdEtleSkgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMTQgMiAxNCA4IDIwIDgiIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBmaWxlIHRvIHByZXZpZXc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxMmAKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvcikgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLXN0YXRlIj4ke3RoaXMuZXJyb3J9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEyYAogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy10aXRsZSI+JHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LW1ldGEiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke3RoaXMuY29udGVudFR5cGV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRhLWl0ZW0iPiR7dGhpcy5mb3JtYXREYXRlKHRoaXMubGFzdE1vZGlmaWVkKX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1jb250ZW50Ij4KICAgICAgICAgICR7dGhpcy5pc0ltYWdlKCkgPyBodG1sMTJgPGltZyBjbGFzcz0icHJldmlldy1pbWFnZSIgc3JjPSJkYXRhOiR7dGhpcy5jb250ZW50VHlwZX07YmFzZTY0LCR7dGhpcy5jb250ZW50fSIgLz5gIDogdGhpcy5pc1RleHQoKSA/IGh0bWwxMmA8cHJlIGNsYXNzPSJwcmV2aWV3LXRleHQiPiR7dGhpcy5nZXRUZXh0Q29udGVudCgpfTwvcHJlPmAgOiBodG1sMTJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJpbmFyeS1wcmV2aWV3Ij4KICAgICAgICAgICAgICAgICAgICA8cD5CaW5hcnkgZmlsZSBwcmV2aWV3IG5vdCBhdmFpbGFibGU8L3A+CiAgICAgICAgICAgICAgICAgICAgPHA+RG93bmxvYWQgdG8gdmlldzwvcD4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEb3dubG9hZH0+RG93bmxvYWQ8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4gZGFuZ2VyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZURlbGV0ZX0+RGVsZXRlPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0NSA9IF9fZGVjb3JhdG9yU3RhcnQoX2E4KTsKX2J1Y2tldE5hbWU0ID0gbmV3IFdlYWtNYXAoKTsKX29iamVjdEtleSA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nMyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50ID0gbmV3IFdlYWtNYXAoKTsKX2NvbnRlbnRUeXBlID0gbmV3IFdlYWtNYXAoKTsKX3NpemUgPSBuZXcgV2Vha01hcCgpOwpfbGFzdE1vZGlmaWVkID0gbmV3IFdlYWtNYXAoKTsKX2Vycm9yID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiYnVja2V0TmFtZSIsIF9idWNrZXROYW1lX2RlYzQsIFRzdmlld1MzUHJldmlldywgX2J1Y2tldE5hbWU0KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAib2JqZWN0S2V5IiwgX29iamVjdEtleV9kZWMsIFRzdmlld1MzUHJldmlldywgX29iamVjdEtleSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWMzLCBUc3ZpZXdTM1ByZXZpZXcsIF9sb2FkaW5nMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImNvbnRlbnQiLCBfY29udGVudF9kZWMsIFRzdmlld1MzUHJldmlldywgX2NvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJjb250ZW50VHlwZSIsIF9jb250ZW50VHlwZV9kZWMsIFRzdmlld1MzUHJldmlldywgX2NvbnRlbnRUeXBlKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAic2l6ZSIsIF9zaXplX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfc2l6ZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImxhc3RNb2RpZmllZCIsIF9sYXN0TW9kaWZpZWRfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9sYXN0TW9kaWZpZWQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJlcnJvciIsIF9lcnJvcl9kZWMsIFRzdmlld1MzUHJldmlldywgX2Vycm9yKTsKVHN2aWV3UzNQcmV2aWV3ID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCAwLCAiVHN2aWV3UzNQcmV2aWV3IiwgX1Rzdmlld1MzUHJldmlld19kZWNvcmF0b3JzLCBUc3ZpZXdTM1ByZXZpZXcpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld1MzUHJldmlldywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyNy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczdgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnByZXZpZXctaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAucHJldmlldy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgfQoKICAgICAgLnByZXZpZXctbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLm1ldGEtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJldmlldy1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmVycm9yLXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmJpbmFyeS1wcmV2aWV3IHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAxLCBUc3ZpZXdTM1ByZXZpZXcpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1icm93c2VyLnRzCnZhciBfc3RhdHNfZGVjLCBfc2VsZWN0ZWREb2N1bWVudElkX2RlYywgX2FjdGl2ZVRhYl9kZWMsIF9jb2xsZWN0aW9uTmFtZV9kZWMsIF9kYXRhYmFzZU5hbWVfZGVjLCBfYTksIF9Uc3ZpZXdNb25nb0Jyb3dzZXJfZGVjb3JhdG9ycywgX2luaXQ2LCBfZGF0YWJhc2VOYW1lLCBfY29sbGVjdGlvbk5hbWUsIF9hY3RpdmVUYWIsIF9zZWxlY3RlZERvY3VtZW50SWQsIF9zdGF0czsKdmFyIHsgaHRtbDogaHRtbDEzLCBjc3M6IGNzczgsIGNzc01hbmFnZXI6IGNzc01hbmFnZXI4LCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50NywgcHJvcGVydHk6IHByb3BlcnR5Niwgc3RhdGU6IHN0YXRlNywgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50OCB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvQnJvd3Nlcl9kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ3KCJ0c3ZpZXctbW9uZ28tYnJvd3NlciIpXTsKdmFyIFRzdmlld01vbmdvQnJvd3NlciA9IGNsYXNzIGV4dGVuZHMgKF9hOSA9IERlZXNFbGVtZW50OCwgX2RhdGFiYXNlTmFtZV9kZWMgPSBbcHJvcGVydHk2KHsgdHlwZTogU3RyaW5nIH0pXSwgX2NvbGxlY3Rpb25OYW1lX2RlYyA9IFtwcm9wZXJ0eTYoeyB0eXBlOiBTdHJpbmcgfSldLCBfYWN0aXZlVGFiX2RlYyA9IFtzdGF0ZTcoKV0sIF9zZWxlY3RlZERvY3VtZW50SWRfZGVjID0gW3N0YXRlNygpXSwgX3N0YXRzX2RlYyA9IFtzdGF0ZTcoKV0sIF9hOSkgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YWJhc2VOYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9uTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2FjdGl2ZVRhYiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxNiwgdGhpcywgImRvY3VtZW50cyIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkRG9jdW1lbnRJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3N0YXRzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDI0LCB0aGlzLCBudWxsKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjcsIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWRTdGF0cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5sb2FkU3RhdHMoKTsKICAgICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSAiIjsKICAgIH0KICB9CiAgYXN5bmMgbG9hZFN0YXRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgdGhpcy5zdGF0cyA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0Q29sbGVjdGlvblN0YXRzKHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIHN0YXRzOiIsIGVycik7CiAgICAgIHRoaXMuc3RhdHMgPSBudWxsOwogICAgfQogIH0KICBzZXRBY3RpdmVUYWIodGFiMikgewogICAgdGhpcy5hY3RpdmVUYWIgPSB0YWIyOwogIH0KICBoYW5kbGVEb2N1bWVudFNlbGVjdGVkKGUxMSkgewogICAgdGhpcy5zZWxlY3RlZERvY3VtZW50SWQgPSBlMTEuZGV0YWlsLmRvY3VtZW50SWQ7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTNgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1pbmZvIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNvbGxlY3Rpb24tdGl0bGUiPiR7dGhpcy5jb2xsZWN0aW9uTmFtZX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5zdGF0cyA/IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29sbGVjdGlvbi1zdGF0cyI+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHtmb3JtYXRDb3VudCh0aGlzLnN0YXRzLmNvdW50KX0gZG9jczwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zdGF0cy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHt0aGlzLnN0YXRzLmluZGV4Q291bnR9IGluZGV4ZXM8L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0idGFicyI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idGFiICR7dGhpcy5hY3RpdmVUYWIgPT09ICJkb2N1bWVudHMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRBY3RpdmVUYWIoImRvY3VtZW50cyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgRG9jdW1lbnRzCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InRhYiAke3RoaXMuYWN0aXZlVGFiID09PSAiaW5kZXhlcyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEFjdGl2ZVRhYigiaW5kZXhlcyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgSW5kZXhlcwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHt0aGlzLmFjdGl2ZVRhYiA9PT0gImFnZ3JlZ2F0aW9uIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0QWN0aXZlVGFiKCJhZ2dyZWdhdGlvbiIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQWdncmVnYXRpb24KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJtYWluLXBhbmVsIj4KICAgICAgICAgICAgJHt0aGlzLmFjdGl2ZVRhYiA9PT0gImRvY3VtZW50cyIgPyBodG1sMTNgCiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctbW9uZ28tZG9jdW1lbnRzCiAgICAgICAgICAgICAgICAgICAgLmRhdGFiYXNlTmFtZT0ke3RoaXMuZGF0YWJhc2VOYW1lfQogICAgICAgICAgICAgICAgICAgIC5jb2xsZWN0aW9uTmFtZT0ke3RoaXMuY29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgQGRvY3VtZW50LXNlbGVjdGVkPSR7dGhpcy5oYW5kbGVEb2N1bWVudFNlbGVjdGVkfQogICAgICAgICAgICAgICAgICA+PC90c3ZpZXctbW9uZ28tZG9jdW1lbnRzPgogICAgICAgICAgICAgICAgYCA6IHRoaXMuYWN0aXZlVGFiID09PSAiaW5kZXhlcyIgPyBodG1sMTNgCiAgICAgICAgICAgICAgICAgICAgPHRzdmlldy1tb25nby1pbmRleGVzCiAgICAgICAgICAgICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5kYXRhYmFzZU5hbWV9CiAgICAgICAgICAgICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLmNvbGxlY3Rpb25OYW1lfQogICAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1tb25nby1pbmRleGVzPgogICAgICAgICAgICAgICAgICBgIDogaHRtbDEzYAogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDI0cHg7IHRleHQtYWxpZ246IGNlbnRlcjsgY29sb3I6ICM2NjY7Ij4KICAgICAgICAgICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uIHBpcGVsaW5lIGJ1aWxkZXIgY29taW5nIHNvb24KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRldGFpbC1wYW5lbCI+CiAgICAgICAgICAgIDx0c3ZpZXctbW9uZ28tZG9jdW1lbnQKICAgICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5kYXRhYmFzZU5hbWV9CiAgICAgICAgICAgICAgLmNvbGxlY3Rpb25OYW1lPSR7dGhpcy5jb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgICAuZG9jdW1lbnRJZD0ke3RoaXMuc2VsZWN0ZWREb2N1bWVudElkfQogICAgICAgICAgICA+PC90c3ZpZXctbW9uZ28tZG9jdW1lbnQ+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ2ID0gX19kZWNvcmF0b3JTdGFydChfYTkpOwpfZGF0YWJhc2VOYW1lID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lID0gbmV3IFdlYWtNYXAoKTsKX2FjdGl2ZVRhYiA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZERvY3VtZW50SWQgPSBuZXcgV2Vha01hcCgpOwpfc3RhdHMgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfZGF0YWJhc2VOYW1lKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9jb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImFjdGl2ZVRhYiIsIF9hY3RpdmVUYWJfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9hY3RpdmVUYWIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJzZWxlY3RlZERvY3VtZW50SWQiLCBfc2VsZWN0ZWREb2N1bWVudElkX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfc2VsZWN0ZWREb2N1bWVudElkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAic3RhdHMiLCBfc3RhdHNfZGVjLCBUc3ZpZXdNb25nb0Jyb3dzZXIsIF9zdGF0cyk7ClRzdmlld01vbmdvQnJvd3NlciA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgMCwgIlRzdmlld01vbmdvQnJvd3NlciIsIF9Uc3ZpZXdNb25nb0Jyb3dzZXJfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Ccm93c2VyKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0Jyb3dzZXIsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjguZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M4YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYnJvd3Nlci1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24tc3RhdHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLnN0YXQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1czsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLnRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciA0MDBweDsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1haW4tcGFuZWwgewogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kZXRhaWwtcGFuZWwgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDEyMDBweCkgewogICAgICAgIC5jb250ZW50IHsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyOwogICAgICAgIH0KCiAgICAgICAgLmRldGFpbC1wYW5lbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAxLCBUc3ZpZXdNb25nb0Jyb3dzZXIpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1jb2xsZWN0aW9ucy50cwp2YXIgX2xvYWRpbmdfZGVjNCwgX2NvbGxlY3Rpb25zX2RlYywgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMyLCBfZGF0YWJhc2VOYW1lX2RlYzIsIF9hMTAsIF9Uc3ZpZXdNb25nb0NvbGxlY3Rpb25zX2RlY29yYXRvcnMsIF9pbml0NywgX2RhdGFiYXNlTmFtZTIsIF9zZWxlY3RlZENvbGxlY3Rpb24yLCBfY29sbGVjdGlvbnMsIF9sb2FkaW5nNDsKdmFyIHsgaHRtbDogaHRtbDE0LCBjc3M6IGNzczksIGNzc01hbmFnZXI6IGNzc01hbmFnZXI5LCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50OCwgcHJvcGVydHk6IHByb3BlcnR5Nywgc3RhdGU6IHN0YXRlOCwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50OSB9ID0gcGx1Z2luc19leHBvcnRzNTsKdmFyIHsgRGVlc0NvbnRleHRtZW51OiBEZWVzQ29udGV4dG1lbnU1IH0gPSBkaXN0X3RzX3dlYl9leHBvcnRzMjsKX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50OCgidHN2aWV3LW1vbmdvLWNvbGxlY3Rpb25zIildOwp2YXIgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucyA9IGNsYXNzIGV4dGVuZHMgKF9hMTAgPSBEZWVzRWxlbWVudDksIF9kYXRhYmFzZU5hbWVfZGVjMiA9IFtwcm9wZXJ0eTcoeyB0eXBlOiBTdHJpbmcgfSldLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYzIgPSBbcHJvcGVydHk3KHsgdHlwZTogU3RyaW5nIH0pXSwgX2NvbGxlY3Rpb25zX2RlYyA9IFtzdGF0ZTgoKV0sIF9sb2FkaW5nX2RlYzQgPSBbc3RhdGU4KCldLCBfYTEwKSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZENvbGxlY3Rpb24yLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbnMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTYsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAyMCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAyMywgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZENvbGxlY3Rpb25zKCk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImRhdGFiYXNlTmFtZSIpKSB7CiAgICAgIHRoaXMubG9hZENvbGxlY3Rpb25zKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWRDb2xsZWN0aW9ucygpIHsKICAgIGlmICghdGhpcy5kYXRhYmFzZU5hbWUpIHJldHVybjsKICAgIHRoaXMubG9hZGluZyA9IHRydWU7CiAgICB0cnkgewogICAgICB0aGlzLmNvbGxlY3Rpb25zID0gYXdhaXQgYXBpU2VydmljZS5saXN0Q29sbGVjdGlvbnModGhpcy5kYXRhYmFzZU5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgY29sbGVjdGlvbnM6IiwgZXJyKTsKICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IFtdOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIHNlbGVjdENvbGxlY3Rpb24obmFtZSkgewogICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICBuZXcgQ3VzdG9tRXZlbnQoImNvbGxlY3Rpb24tc2VsZWN0ZWQiLCB7CiAgICAgICAgZGV0YWlsOiBuYW1lLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkKICAgICk7CiAgfQogIGFzeW5jIGRlbGV0ZUNvbGxlY3Rpb24obmFtZSkgewogICAgaWYgKCFjb25maXJtKGBEZWxldGUgY29sbGVjdGlvbiAiJHtuYW1lfSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIGRvY3VtZW50cy5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcENvbGxlY3Rpb24odGhpcy5kYXRhYmFzZU5hbWUsIG5hbWUpOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IHRoaXMuY29sbGVjdGlvbnMuZmlsdGVyKChjMTEpID0+IGMxMS5uYW1lICE9PSBuYW1lKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiY29sbGVjdGlvbi1kZWxldGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGRhdGFiYXNlTmFtZTogdGhpcy5kYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lOiBuYW1lIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfQogIH0KICBoYW5kbGVDb2xsZWN0aW9uQ29udGV4dE1lbnUoZXZlbnQsIGNvbGxlY3Rpb24pIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnU1Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiVmlldyBEb2N1bWVudHMiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVUZXh0IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0Q29sbGVjdGlvbihjb2xsZWN0aW9uLm5hbWUpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIENvbGxlY3Rpb24iLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLmRlbGV0ZUNvbGxlY3Rpb24oY29sbGVjdGlvbi5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICBhc3luYyByZWZyZXNoKCkgewogICAgYXdhaXQgdGhpcy5sb2FkQ29sbGVjdGlvbnMoKTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKHRoaXMubG9hZGluZykgewogICAgICByZXR1cm4gaHRtbDE0YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcgY29sbGVjdGlvbnMuLi48L2Rpdj5gOwogICAgfQogICAgaWYgKHRoaXMuY29sbGVjdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBodG1sMTRgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGNvbGxlY3Rpb25zPC9kaXY+YDsKICAgIH0KICAgIHJldHVybiBodG1sMTRgCiAgICAgIDxkaXYgY2xhc3M9ImNvbGxlY3Rpb25zLWxpc3QiPgogICAgICAgICR7dGhpcy5jb2xsZWN0aW9ucy5tYXAoCiAgICAgIChjb2xsKSA9PiBodG1sMTRgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iY29sbGVjdGlvbi1pdGVtICR7dGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGwubmFtZSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RDb2xsZWN0aW9uKGNvbGwubmFtZSl9CiAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb2xsZWN0aW9uQ29udGV4dE1lbnUoZTExLCBjb2xsKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsZWN0aW9uLW5hbWUiPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29sbGVjdGlvbi1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnoiPjwvcGF0aD4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgJHtjb2xsLm5hbWV9CiAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICR7Y29sbC5jb3VudCAhPT0gdm9pZCAwID8gaHRtbDE0YDxzcGFuIGNsYXNzPSJjb2xsZWN0aW9uLWNvdW50Ij4ke2Zvcm1hdENvdW50KGNvbGwuY291bnQpfTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYAogICAgKX0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ3ID0gX19kZWNvcmF0b3JTdGFydChfYTEwKTsKX2RhdGFiYXNlTmFtZTIgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRDb2xsZWN0aW9uMiA9IG5ldyBXZWFrTWFwKCk7Cl9jb2xsZWN0aW9ucyA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nNCA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjMiwgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgX2RhdGFiYXNlTmFtZTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJzZWxlY3RlZENvbGxlY3Rpb24iLCBfc2VsZWN0ZWRDb2xsZWN0aW9uX2RlYzIsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9zZWxlY3RlZENvbGxlY3Rpb24yKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAiY29sbGVjdGlvbnMiLCBfY29sbGVjdGlvbnNfZGVjLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zLCBfY29sbGVjdGlvbnMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjNCwgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgX2xvYWRpbmc0KTsKVHN2aWV3TW9uZ29Db2xsZWN0aW9ucyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgMCwgIlRzdmlld01vbmdvQ29sbGVjdGlvbnMiLCBfVHN2aWV3TW9uZ29Db2xsZWN0aW9uc19kZWNvcmF0b3JzLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0NvbGxlY3Rpb25zLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI5LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzOWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuY29sbGVjdGlvbnMtbGlzdCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24tbmFtZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWNvdW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDEsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudHMudHMKdmFyIF9zZWxlY3RlZElkX2RlYywgX2ZpbHRlclRleHRfZGVjMiwgX2xvYWRpbmdfZGVjNSwgX3BhZ2VTaXplX2RlYywgX3BhZ2VfZGVjLCBfdG90YWxfZGVjLCBfZG9jdW1lbnRzX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzIsIF9kYXRhYmFzZU5hbWVfZGVjMywgX2ExMSwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIF9pbml0OCwgX2RhdGFiYXNlTmFtZTMsIF9jb2xsZWN0aW9uTmFtZTIsIF9kb2N1bWVudHMsIF90b3RhbCwgX3BhZ2UsIF9wYWdlU2l6ZSwgX2xvYWRpbmc1LCBfZmlsdGVyVGV4dDIsIF9zZWxlY3RlZElkOwp2YXIgeyBodG1sOiBodG1sMTUsIGNzczogY3NzMTAsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDksIHByb3BlcnR5OiBwcm9wZXJ0eTgsIHN0YXRlOiBzdGF0ZTksIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDEwIH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTYgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3TW9uZ29Eb2N1bWVudHNfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50OSgidHN2aWV3LW1vbmdvLWRvY3VtZW50cyIpXTsKdmFyIFRzdmlld01vbmdvRG9jdW1lbnRzID0gY2xhc3MgZXh0ZW5kcyAoX2ExMSA9IERlZXNFbGVtZW50MTAsIF9kYXRhYmFzZU5hbWVfZGVjMyA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMiA9IFtwcm9wZXJ0eTgoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRzX2RlYyA9IFtzdGF0ZTkoKV0sIF90b3RhbF9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZV9kZWMgPSBbc3RhdGU5KCldLCBfcGFnZVNpemVfZGVjID0gW3N0YXRlOSgpXSwgX2xvYWRpbmdfZGVjNSA9IFtzdGF0ZTkoKV0sIF9maWx0ZXJUZXh0X2RlYzIgPSBbc3RhdGU5KCldLCBfc2VsZWN0ZWRJZF9kZWMgPSBbc3RhdGU5KCldLCBfYTExKSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9uTmFtZTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudHMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTYsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF90b3RhbCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMCwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyNCwgdGhpcywgMSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfcGFnZVNpemUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMjgsIHRoaXMsIDUwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzMiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2ZpbHRlclRleHQyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA0MywgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoImNvbGxlY3Rpb25OYW1lIikpIHsKICAgICAgdGhpcy5wYWdlID0gMTsKICAgICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudHMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgbGV0IGZpbHRlcjIgPSB7fTsKICAgICAgaWYgKHRoaXMuZmlsdGVyVGV4dC50cmltKCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgZmlsdGVyMiA9IEpTT04ucGFyc2UodGhpcy5maWx0ZXJUZXh0KTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5maW5kRG9jdW1lbnRzKAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgc2tpcDogKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSwKICAgICAgICAgIGxpbWl0OiB0aGlzLnBhZ2VTaXplCiAgICAgICAgfQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50cyA9IHJlc3VsdC5kb2N1bWVudHM7CiAgICAgIHRoaXMudG90YWwgPSByZXN1bHQudG90YWw7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkb2N1bWVudHM6IiwgZXJyKTsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgICAgdGhpcy50b3RhbCA9IDA7CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgaGFuZGxlRmlsdGVySW5wdXQoZTExKSB7CiAgICB0aGlzLmZpbHRlclRleHQgPSBlMTEudGFyZ2V0LnZhbHVlOwogIH0KICBoYW5kbGVGaWx0ZXJTdWJtaXQoKSB7CiAgICB0aGlzLnBhZ2UgPSAxOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGhhbmRsZUtleVByZXNzKGUxMSkgewogICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgdGhpcy5oYW5kbGVGaWx0ZXJTdWJtaXQoKTsKICAgIH0KICB9CiAgc2VsZWN0RG9jdW1lbnQoZG9jKSB7CiAgICBjb25zdCBpZCA9IGRvYy5faWQgfHwgIiI7CiAgICB0aGlzLnNlbGVjdGVkSWQgPSBpZDsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogaWQsIGRvY3VtZW50OiBkb2MgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBnb1RvUGFnZShwYWdlTnVtKSB7CiAgICB0aGlzLnBhZ2UgPSBwYWdlTnVtOwogICAgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgfQogIGdldERvY3VtZW50UHJldmlldyhkb2MpIHsKICAgIGNvbnN0IHByZXZpZXcgPSB7fTsKICAgIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZG9jKS5maWx0ZXIoKGs0KSA9PiBrNCAhPT0gIl9pZCIpOwogICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXMyLnNsaWNlKDAsIDMpKSB7CiAgICAgIHByZXZpZXdba2V5Ml0gPSBkb2Nba2V5Ml07CiAgICB9CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkocHJldmlldyk7CiAgfQogIGdldCB0b3RhbFBhZ2VzKCkgewogICAgcmV0dXJuIE1hdGguY2VpbCh0aGlzLnRvdGFsIC8gdGhpcy5wYWdlU2l6ZSk7CiAgfQogIGFzeW5jIGhhbmRsZUluc2VydE5ldygpIHsKICAgIGNvbnN0IG5ld0RvYyA9IHsKICAgICAgLy8gRGVmYXVsdCBlbXB0eSBkb2N1bWVudAogICAgICBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKQogICAgfTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluc2VydGVkSWQgPSBhd2FpdCBhcGlTZXJ2aWNlLmluc2VydERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgbmV3RG9jCiAgICAgICk7CiAgICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogICAgICB0aGlzLnNlbGVjdGVkSWQgPSBpbnNlcnRlZElkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBpbnNlcnRlZElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGluc2VydGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgfQogIH0KICBoYW5kbGVEb2N1bWVudENvbnRleHRNZW51KGV2ZW50LCBkb2MpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBkb2NJZCA9IGRvYy5faWQ7CiAgICBEZWVzQ29udGV4dG1lbnU2Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiVmlldy9FZGl0IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiQ29weSBhcyBKU09OIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KEpTT04uc3RyaW5naWZ5KGRvYywgbnVsbCwgMikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEdXBsaWNhdGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHlQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHsgX2lkLCAuLi5kb2NXaXRob3V0SWQgfSA9IGRvYzsKICAgICAgICAgIGNvbnN0IG5ld0RvYyA9IHsgLi4uZG9jV2l0aG91dElkLCBjcmVhdGVkQXQ6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSB9OwogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgaW5zZXJ0ZWRJZCA9IGF3YWl0IGFwaVNlcnZpY2UuaW5zZXJ0RG9jdW1lbnQoCiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICAgICAgICBuZXdEb2MKICAgICAgICAgICAgKTsKICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9IGluc2VydGVkSWQ7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LXNlbGVjdGVkIiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IGluc2VydGVkSWQgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pCiAgICAgICAgICAgICk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZHVwbGljYXRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZG9jdW1lbnQgIiR7ZG9jSWR9Ij9gKSkgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgICAgICAgZG9jSWQKICAgICAgICAgICAgKTsKICAgICAgICAgICAgaWYgKHJlc3VsdC5zdWNjZXNzKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnRzKCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRJZCA9PT0gZG9jSWQpIHsKICAgICAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZCA9ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIHJlbmRlcigpIHsKICAgIGNvbnN0IHN0YXJ0UmVjb3JkID0gKHRoaXMucGFnZSAtIDEpICogdGhpcy5wYWdlU2l6ZSArIDE7CiAgICBjb25zdCBlbmRSZWNvcmQgPSBNYXRoLm1pbih0aGlzLnBhZ2UgKiB0aGlzLnBhZ2VTaXplLCB0aGlzLnRvdGFsKTsKICAgIHJldHVybiBodG1sMTVgCiAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50cy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1iYXIiPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJmaWx0ZXItaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSdGaWx0ZXI6IHsiZmllbGQiOiAidmFsdWUifScKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5maWx0ZXJUZXh0fQogICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUZpbHRlcklucHV0fQogICAgICAgICAgICBAa2V5cHJlc3M9JHt0aGlzLmhhbmRsZUtleVByZXNzfQogICAgICAgICAgLz4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImZpbHRlci1idG4iIEBjbGljaz0ke3RoaXMuaGFuZGxlRmlsdGVyU3VibWl0fT5BcHBseTwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLWJhciI+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUluc2VydE5ld30+KyBJbnNlcnQgRG9jdW1lbnQ8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnRzLWxpc3QiPgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTVgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZy4uLjwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5sZW5ndGggPT09IDAgPyBodG1sMTVgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIGRvY3VtZW50cyBmb3VuZDwvZGl2PmAgOiB0aGlzLmRvY3VtZW50cy5tYXAoCiAgICAgIChkb2MpID0+IGh0bWwxNWAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZG9jdW1lbnQtcm93ICR7dGhpcy5zZWxlY3RlZElkID09PSBkb2MuX2lkID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0RG9jdW1lbnQoZG9jKX0KICAgICAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRG9jdW1lbnRDb250ZXh0TWVudShlMTEsIGRvYyl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtaWQiPl9pZDogJHtkb2MuX2lkfTwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtcHJldmlldyI+JHt0aGlzLmdldERvY3VtZW50UHJldmlldyhkb2MpfTwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudG90YWwgPiAwID8gaHRtbDE1YAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24iPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbi1pbmZvIj4KICAgICAgICAgICAgICAgICAgU2hvd2luZyAke3N0YXJ0UmVjb3JkfS0ke2VuZFJlY29yZH0gb2YgJHt0aGlzLnRvdGFsfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uLWNvbnRyb2xzIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWJ0biIKICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPD0gMX0KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgUHJldmlvdXMKICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFnZS1idG4iCiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlID49IHRoaXMudG90YWxQYWdlc30KICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmdvVG9QYWdlKHRoaXMucGFnZSArIDEpfQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgTmV4dAogICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0OCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMSk7Cl9kYXRhYmFzZU5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9kb2N1bWVudHMgPSBuZXcgV2Vha01hcCgpOwpfdG90YWwgPSBuZXcgV2Vha01hcCgpOwpfcGFnZSA9IG5ldyBXZWFrTWFwKCk7Cl9wYWdlU2l6ZSA9IG5ldyBXZWFrTWFwKCk7Cl9sb2FkaW5nNSA9IG5ldyBXZWFrTWFwKCk7Cl9maWx0ZXJUZXh0MiA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZElkID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWMzLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RhdGFiYXNlTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJjb2xsZWN0aW9uTmFtZSIsIF9jb2xsZWN0aW9uTmFtZV9kZWMyLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2NvbGxlY3Rpb25OYW1lMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImRvY3VtZW50cyIsIF9kb2N1bWVudHNfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2RvY3VtZW50cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInRvdGFsIiwgX3RvdGFsX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF90b3RhbCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2UiLCBfcGFnZV9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfcGFnZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgInBhZ2VTaXplIiwgX3BhZ2VTaXplX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9wYWdlU2l6ZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWM1LCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2xvYWRpbmc1KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiZmlsdGVyVGV4dCIsIF9maWx0ZXJUZXh0X2RlYzIsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfZmlsdGVyVGV4dDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJzZWxlY3RlZElkIiwgX3NlbGVjdGVkSWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX3NlbGVjdGVkSWQpOwpUc3ZpZXdNb25nb0RvY3VtZW50cyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgMCwgIlRzdmlld01vbmdvRG9jdW1lbnRzIiwgX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvRG9jdW1lbnRzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0RvY3VtZW50cywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMTAuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3MxMGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmZpbHRlci1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjMpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgfQoKICAgICAgLmZpbHRlci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZmlsdGVyLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnRzLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1yb3cgewogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93LnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1pZCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcHJldmlldyB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzMzMzsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5wYWdpbmF0aW9uLWluZm8gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhZ2luYXRpb24tY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0biB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLnBhZ2UtYnRuOmhvdmVyOm5vdCg6ZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuYWN0aW9ucy1iYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzIyYzU1ZTsKICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMzQsIDE5NywgOTQsIDAuMyk7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMSwgVHN2aWV3TW9uZ29Eb2N1bWVudHMpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1kb2N1bWVudC50cwp2YXIgX2Vycm9yX2RlYzIsIF9lZGl0Q29udGVudF9kZWMsIF9lZGl0aW5nX2RlYywgX2xvYWRpbmdfZGVjNiwgX2RvY3VtZW50X2RlYywgX2RvY3VtZW50SWRfZGVjLCBfY29sbGVjdGlvbk5hbWVfZGVjMywgX2RhdGFiYXNlTmFtZV9kZWM0LCBfYTEyLCBfVHN2aWV3TW9uZ29Eb2N1bWVudF9kZWNvcmF0b3JzLCBfaW5pdDksIF9kYXRhYmFzZU5hbWU0LCBfY29sbGVjdGlvbk5hbWUzLCBfZG9jdW1lbnRJZCwgX2RvY3VtZW50LCBfbG9hZGluZzYsIF9lZGl0aW5nLCBfZWRpdENvbnRlbnQsIF9lcnJvcjI7CnZhciB7IGh0bWw6IGh0bWwxNiwgY3NzOiBjc3MxMSwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjExLCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50MTAsIHByb3BlcnR5OiBwcm9wZXJ0eTksIHN0YXRlOiBzdGF0ZTEwLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMSB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50MTAoInRzdmlldy1tb25nby1kb2N1bWVudCIpXTsKdmFyIFRzdmlld01vbmdvRG9jdW1lbnQgPSBjbGFzcyBleHRlbmRzIChfYTEyID0gRGVlc0VsZW1lbnQxMSwgX2RhdGFiYXNlTmFtZV9kZWM0ID0gW3Byb3BlcnR5OSh7IHR5cGU6IFN0cmluZyB9KV0sIF9jb2xsZWN0aW9uTmFtZV9kZWMzID0gW3Byb3BlcnR5OSh7IHR5cGU6IFN0cmluZyB9KV0sIF9kb2N1bWVudElkX2RlYyA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRfZGVjID0gW3N0YXRlMTAoKV0sIF9sb2FkaW5nX2RlYzYgPSBbc3RhdGUxMCgpXSwgX2VkaXRpbmdfZGVjID0gW3N0YXRlMTAoKV0sIF9lZGl0Q29udGVudF9kZWMgPSBbc3RhdGUxMCgpXSwgX2Vycm9yX2RlYzIgPSBbc3RhdGUxMCgpXSwgX2ExMikgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YWJhc2VOYW1lNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWUzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZG9jdW1lbnRJZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RvY3VtZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDIwLCB0aGlzLCBudWxsKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9sb2FkaW5nNiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAyNCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2VkaXRpbmcsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjgsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lZGl0Q29udGVudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAzMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2Vycm9yMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAzOSwgdGhpcyk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImRvY3VtZW50SWQiKSkgewogICAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuZG9jdW1lbnRJZCkgewogICAgICAgIHRoaXMubG9hZERvY3VtZW50KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5kb2N1bWVudCA9IG51bGw7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgbG9hZERvY3VtZW50KCkgewogICAgaWYgKCF0aGlzLmRvY3VtZW50SWQgfHwgIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdGhpcy5lcnJvciA9ICIiOwogICAgdHJ5IHsKICAgICAgdGhpcy5kb2N1bWVudCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0RG9jdW1lbnQoCiAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICB0aGlzLmRvY3VtZW50SWQKICAgICAgKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgIHRoaXMuZXJyb3IgPSAiRmFpbGVkIHRvIGxvYWQgZG9jdW1lbnQiOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIHN0YXJ0RWRpdGluZygpIHsKICAgIHRoaXMuZWRpdENvbnRlbnQgPSBKU09OLnN0cmluZ2lmeSh0aGlzLmRvY3VtZW50LCBudWxsLCAyKTsKICAgIHRoaXMuZWRpdGluZyA9IHRydWU7CiAgfQogIGNhbmNlbEVkaXRpbmcoKSB7CiAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTsKICAgIHRoaXMuZWRpdENvbnRlbnQgPSAiIjsKICB9CiAgYXN5bmMgc2F2ZURvY3VtZW50KCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgdXBkYXRlZERvYyA9IEpTT04ucGFyc2UodGhpcy5lZGl0Q29udGVudCk7CiAgICAgIGNvbnN0IHsgX2lkLCAuLi51cGRhdGVGaWVsZHMgfSA9IHVwZGF0ZWREb2M7CiAgICAgIGF3YWl0IGFwaVNlcnZpY2UudXBkYXRlRG9jdW1lbnQoCiAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICB0aGlzLmRvY3VtZW50SWQsCiAgICAgICAgdXBkYXRlRmllbGRzCiAgICAgICk7CiAgICAgIHRoaXMuZWRpdGluZyA9IGZhbHNlOwogICAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudCgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC11cGRhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IHRoaXMuZG9jdW1lbnRJZCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBzYXZpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJJbnZhbGlkIEpTT04gb3Igc2F2ZSBmYWlsZWQiOwogICAgfQogIH0KICBhc3luYyBkZWxldGVEb2N1bWVudCgpIHsKICAgIGlmICghY29uZmlybSgiRGVsZXRlIHRoaXMgZG9jdW1lbnQ/IikpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlRG9jdW1lbnQoCiAgICAgICAgdGhpcy5kYXRhYmFzZU5hbWUsCiAgICAgICAgdGhpcy5jb2xsZWN0aW9uTmFtZSwKICAgICAgICB0aGlzLmRvY3VtZW50SWQKICAgICAgKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiB0aGlzLmRvY3VtZW50SWQgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICAgIHRoaXMuZG9jdW1lbnQgPSBudWxsOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlbGV0aW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgIHRoaXMuZXJyb3IgPSAiRGVsZXRlIGZhaWxlZCI7CiAgICB9CiAgfQogIGZvcm1hdEpzb24ob2JqKSB7CiAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLCBudWxsLCAyKTsKICB9CiAgc3ludGF4SGlnaGxpZ2h0KGpzb24pIHsKICAgIHJldHVybiBqc29uLnJlcGxhY2UoLyIoW14iXSspIjovZywgJzxzcGFuIGNsYXNzPSJqc29uLWtleSI+IiQxIjwvc3Bhbj46JykucmVwbGFjZSgvOiAiKFteIl0qKSIvZywgJzogPHNwYW4gY2xhc3M9Impzb24tc3RyaW5nIj4iJDEiPC9zcGFuPicpLnJlcGxhY2UoLzogKFxkK1wuP1xkKikvZywgJzogPHNwYW4gY2xhc3M9Impzb24tbnVtYmVyIj4kMTwvc3Bhbj4nKS5yZXBsYWNlKC86ICh0cnVlfGZhbHNlKS9nLCAnOiA8c3BhbiBjbGFzcz0ianNvbi1ib29sZWFuIj4kMTwvc3Bhbj4nKS5yZXBsYWNlKC86IChudWxsKS9nLCAnOiA8c3BhbiBjbGFzcz0ianNvbi1udWxsIj4kMTwvc3Bhbj4nKTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKCF0aGlzLmRvY3VtZW50SWQpIHsKICAgICAgcmV0dXJuIGh0bWwxNmAKICAgICAgICA8ZGl2IGNsYXNzPSJkb2N1bWVudC1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiIgLz4KICAgICAgICAgICAgICA8cG9seWxpbmUgcG9pbnRzPSIxNCAyIDE0IDggMjAgOCIgLz4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIDxwPlNlbGVjdCBhIGRvY3VtZW50IHRvIHZpZXc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxNmAKICAgICAgICA8ZGl2IGNsYXNzPSJkb2N1bWVudC1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZy4uLjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgaWYgKHRoaXMuZXJyb3IgJiYgIXRoaXMuZG9jdW1lbnQpIHsKICAgICAgcmV0dXJuIGh0bWwxNmAKICAgICAgICA8ZGl2IGNsYXNzPSJkb2N1bWVudC1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iZXJyb3Itc3RhdGUiPiR7dGhpcy5lcnJvcn08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIHJldHVybiBodG1sMTZgCiAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkZXItdGl0bGUiPkRvY3VtZW50PC9zcGFuPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWFjdGlvbnMiPgogICAgICAgICAgICAke3RoaXMuZWRpdGluZyA/IGh0bWwxNmAKICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgQGNsaWNrPSR7dGhpcy5jYW5jZWxFZGl0aW5nfT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biBwcmltYXJ5IiBAY2xpY2s9JHt0aGlzLnNhdmVEb2N1bWVudH0+U2F2ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgYCA6IGh0bWwxNmAKICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgQGNsaWNrPSR7dGhpcy5zdGFydEVkaXRpbmd9PkVkaXQ8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biBkYW5nZXIiIEBjbGljaz0ke3RoaXMuZGVsZXRlRG9jdW1lbnR9PkRlbGV0ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICAgICR7dGhpcy5lZGl0aW5nID8gaHRtbDE2YAogICAgICAgICAgICAgICAgPHRleHRhcmVhCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJlZGl0LWFyZWEiCiAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZWRpdENvbnRlbnR9CiAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuZWRpdENvbnRlbnQgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICAgICAgPjwvdGV4dGFyZWE+CiAgICAgICAgICAgICAgYCA6IGh0bWwxNmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9Impzb24tdmlldyIKICAgICAgICAgICAgICAgICAgLmlubmVySFRNTD0ke3RoaXMuc3ludGF4SGlnaGxpZ2h0KHRoaXMuZm9ybWF0SnNvbih0aGlzLmRvY3VtZW50KSl9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ5ID0gX19kZWNvcmF0b3JTdGFydChfYTEyKTsKX2RhdGFiYXNlTmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWUzID0gbmV3IFdlYWtNYXAoKTsKX2RvY3VtZW50SWQgPSBuZXcgV2Vha01hcCgpOwpfZG9jdW1lbnQgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzYgPSBuZXcgV2Vha01hcCgpOwpfZWRpdGluZyA9IG5ldyBXZWFrTWFwKCk7Cl9lZGl0Q29udGVudCA9IG5ldyBXZWFrTWFwKCk7Cl9lcnJvcjIgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzQsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9kYXRhYmFzZU5hbWU0KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjMywgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2NvbGxlY3Rpb25OYW1lMyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImRvY3VtZW50SWQiLCBfZG9jdW1lbnRJZF9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9kb2N1bWVudElkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZG9jdW1lbnQiLCBfZG9jdW1lbnRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZG9jdW1lbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjNiwgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2xvYWRpbmc2KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZWRpdGluZyIsIF9lZGl0aW5nX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2VkaXRpbmcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJlZGl0Q29udGVudCIsIF9lZGl0Q29udGVudF9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9lZGl0Q29udGVudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImVycm9yIiwgX2Vycm9yX2RlYzIsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9lcnJvcjIpOwpUc3ZpZXdNb25nb0RvY3VtZW50ID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCAwLCAiVHN2aWV3TW9uZ29Eb2N1bWVudCIsIF9Uc3ZpZXdNb25nb0RvY3VtZW50X2RlY29yYXRvcnMsIFRzdmlld01vbmdvRG9jdW1lbnQpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld01vbmdvRG9jdW1lbnQsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjExLmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzMTFgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5kb2N1bWVudC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgfQoKICAgICAgLmhlYWRlci10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5kYW5nZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZWY0NDQ0OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMyk7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5qc29uLXZpZXcgewogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ01lbmxvJywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgIH0KCiAgICAgIC5qc29uLWtleSB7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5qc29uLXN0cmluZyB7CiAgICAgICAgY29sb3I6ICNhNWQ2YTc7CiAgICAgIH0KCiAgICAgIC5qc29uLW51bWJlciB7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC5qc29uLWJvb2xlYW4gewogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICB9CgogICAgICAuanNvbi1udWxsIHsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmVkaXQtYXJlYSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLmVkaXQtYXJlYTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgc3ZnIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuZXJyb3Itc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDEsIFRzdmlld01vbmdvRG9jdW1lbnQpOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1tb25nby1pbmRleGVzLnRzCnZhciBfbmV3SW5kZXhTcGFyc2VfZGVjLCBfbmV3SW5kZXhVbmlxdWVfZGVjLCBfbmV3SW5kZXhLZXlzX2RlYywgX3Nob3dDcmVhdGVEaWFsb2dfZGVjLCBfbG9hZGluZ19kZWM3LCBfaW5kZXhlc19kZWMsIF9jb2xsZWN0aW9uTmFtZV9kZWM0LCBfZGF0YWJhc2VOYW1lX2RlYzUsIF9hMTMsIF9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycywgX2luaXQxMCwgX2RhdGFiYXNlTmFtZTUsIF9jb2xsZWN0aW9uTmFtZTQsIF9pbmRleGVzLCBfbG9hZGluZzcsIF9zaG93Q3JlYXRlRGlhbG9nLCBfbmV3SW5kZXhLZXlzLCBfbmV3SW5kZXhVbmlxdWUsIF9uZXdJbmRleFNwYXJzZTsKdmFyIHsgaHRtbDogaHRtbDE3LCBjc3M6IGNzczEyLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTIsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMSwgcHJvcGVydHk6IHByb3BlcnR5MTAsIHN0YXRlOiBzdGF0ZTExLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMiB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvSW5kZXhlc19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQxMSgidHN2aWV3LW1vbmdvLWluZGV4ZXMiKV07CnZhciBUc3ZpZXdNb25nb0luZGV4ZXMgPSBjbGFzcyBleHRlbmRzIChfYTEzID0gRGVlc0VsZW1lbnQxMiwgX2RhdGFiYXNlTmFtZV9kZWM1ID0gW3Byb3BlcnR5MTAoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjNCA9IFtwcm9wZXJ0eTEwKHsgdHlwZTogU3RyaW5nIH0pXSwgX2luZGV4ZXNfZGVjID0gW3N0YXRlMTEoKV0sIF9sb2FkaW5nX2RlYzcgPSBbc3RhdGUxMSgpXSwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjID0gW3N0YXRlMTEoKV0sIF9uZXdJbmRleEtleXNfZGVjID0gW3N0YXRlMTEoKV0sIF9uZXdJbmRleFVuaXF1ZV9kZWMgPSBbc3RhdGUxMSgpXSwgX25ld0luZGV4U3BhcnNlX2RlYyA9IFtzdGF0ZTExKCldLCBfYTEzKSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZU5hbWU1LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbGxlY3Rpb25OYW1lNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfaW5kZXhlcywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTYsIHRoaXMsIFtdKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzcsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDIwLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVEaWFsb2csIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDI0LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4S2V5cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3SW5kZXhVbmlxdWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDMyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0luZGV4U3BhcnNlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzNiwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMzksIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWRJbmRleGVzKCk7CiAgfQogIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImRhdGFiYXNlTmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29sbGVjdGlvbk5hbWUiKSkgewogICAgICB0aGlzLmxvYWRJbmRleGVzKCk7CiAgICB9CiAgfQogIGFzeW5jIGxvYWRJbmRleGVzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIHRoaXMuaW5kZXhlcyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdEluZGV4ZXModGhpcy5kYXRhYmFzZU5hbWUsIHRoaXMuY29sbGVjdGlvbk5hbWUpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgaW5kZXhlczoiLCBlcnIpOwogICAgICB0aGlzLmluZGV4ZXMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5uZXdJbmRleEtleXMgPSAiIjsKICAgIHRoaXMubmV3SW5kZXhVbmlxdWUgPSBmYWxzZTsKICAgIHRoaXMubmV3SW5kZXhTcGFyc2UgPSBmYWxzZTsKICAgIHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGNsb3NlQ3JlYXRlRGlhbG9nKCkgewogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgfQogIGFzeW5jIGNyZWF0ZUluZGV4KCkgewogICAgdHJ5IHsKICAgICAgY29uc3Qga2V5czIgPSBKU09OLnBhcnNlKHRoaXMubmV3SW5kZXhLZXlzKTsKICAgICAgYXdhaXQgYXBpU2VydmljZS5jcmVhdGVJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwga2V5czIsIHsKICAgICAgICB1bmlxdWU6IHRoaXMubmV3SW5kZXhVbmlxdWUsCiAgICAgICAgc3BhcnNlOiB0aGlzLm5ld0luZGV4U3BhcnNlCiAgICAgIH0pOwogICAgICB0aGlzLmNsb3NlQ3JlYXRlRGlhbG9nKCk7CiAgICAgIGF3YWl0IHRoaXMubG9hZEluZGV4ZXMoKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBjcmVhdGluZyBpbmRleDoiLCBlcnIpOwogICAgICBhbGVydCgiSW52YWxpZCBKU09OIG9yIGluZGV4IGNyZWF0aW9uIGZhaWxlZCIpOwogICAgfQogIH0KICBhc3luYyBkcm9wSW5kZXgoaW5kZXhOYW1lKSB7CiAgICBpZiAoaW5kZXhOYW1lID09PSAiX2lkXyIpIHsKICAgICAgYWxlcnQoIkNhbm5vdCBkcm9wIHRoZSBfaWQgaW5kZXgiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFjb25maXJtKGBEcm9wIGluZGV4ICIke2luZGV4TmFtZX0iP2ApKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRyb3BJbmRleCh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSwgaW5kZXhOYW1lKTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5kZXhlcygpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRyb3BwaW5nIGluZGV4OiIsIGVycik7CiAgICB9CiAgfQogIGZvcm1hdEtleXMoa2V5czIpIHsKICAgIHJldHVybiBKU09OLnN0cmluZ2lmeShrZXlzMik7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sMTdgCiAgICAgIDxkaXYgY2xhc3M9ImluZGV4ZXMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNyZWF0ZS1idG4iIEBjbGljaz0ke3RoaXMub3BlbkNyZWF0ZURpYWxvZ30+KyBDcmVhdGUgSW5kZXg8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXhlcy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDE3YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5pbmRleGVzLmxlbmd0aCA9PT0gMCA/IGh0bWwxN2A8ZGl2IGNsYXNzPSJlbXB0eS1zdGF0ZSI+Tm8gaW5kZXhlcyBmb3VuZDwvZGl2PmAgOiB0aGlzLmluZGV4ZXMubWFwKAogICAgICAoaWR4KSA9PiBodG1sMTdgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXgtY2FyZCI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iaW5kZXgtbmFtZSI+JHtpZHgubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWJhZGdlcyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHgudW5pcXVlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSB1bmlxdWUiPnVuaXF1ZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpZHguc3BhcnNlID8gaHRtbDE3YDxzcGFuIGNsYXNzPSJiYWRnZSBzcGFyc2UiPnNwYXJzZTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1rZXlzIj4ke3RoaXMuZm9ybWF0S2V5cyhpZHgua2V5cyl9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1hY3Rpb25zIj4KICAgICAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkcm9wLWJ0biIKICAgICAgICAgICAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtpZHgubmFtZSA9PT0gIl9pZF8ifQogICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuZHJvcEluZGV4KGlkeC5uYW1lKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIERyb3AKICAgICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICAke3RoaXMuc2hvd0NyZWF0ZURpYWxvZyA/IGh0bWwxN2AKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0ke3RoaXMuY2xvc2VDcmVhdGVEaWFsb2d9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+Q3JlYXRlIEluZGV4PC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctbGFiZWwiPkluZGV4IEtleXMgKEpTT04pPC9sYWJlbD4KICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSd7ImZpZWxkIjogMX0nCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdJbmRleEtleXN9CiAgICAgICAgICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleEtleXMgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhVbmlxdWV9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFVuaXF1ZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFVuaXF1ZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWZpZWxkIj4KICAgICAgICAgICAgICAgICAgPGxhYmVsIGNsYXNzPSJkaWFsb2ctY2hlY2tib3giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0iY2hlY2tib3giCiAgICAgICAgICAgICAgICAgICAgICAuY2hlY2tlZD0ke3RoaXMubmV3SW5kZXhTcGFyc2V9CiAgICAgICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gdGhpcy5uZXdJbmRleFNwYXJzZSA9IGUxMS50YXJnZXQuY2hlY2tlZH0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICAgIFNwYXJzZQogICAgICAgICAgICAgICAgICA8L2xhYmVsPgogICAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5jbG9zZUNyZWF0ZURpYWxvZ30+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5jcmVhdGVJbmRleH0+Q3JlYXRlPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICBgOwogIH0KfTsKX2luaXQxMCA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMyk7Cl9kYXRhYmFzZU5hbWU1ID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lNCA9IG5ldyBXZWFrTWFwKCk7Cl9pbmRleGVzID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmc3ID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dDcmVhdGVEaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3SW5kZXhLZXlzID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4VW5pcXVlID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4U3BhcnNlID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjNSwgVHN2aWV3TW9uZ29JbmRleGVzLCBfZGF0YWJhc2VOYW1lNSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJjb2xsZWN0aW9uTmFtZSIsIF9jb2xsZWN0aW9uTmFtZV9kZWM0LCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9jb2xsZWN0aW9uTmFtZTQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAiaW5kZXhlcyIsIF9pbmRleGVzX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfaW5kZXhlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjNywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbG9hZGluZzcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAic2hvd0NyZWF0ZURpYWxvZyIsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfc2hvd0NyZWF0ZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJuZXdJbmRleEtleXMiLCBfbmV3SW5kZXhLZXlzX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhLZXlzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgIm5ld0luZGV4VW5pcXVlIiwgX25ld0luZGV4VW5pcXVlX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbmV3SW5kZXhVbmlxdWUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibmV3SW5kZXhTcGFyc2UiLCBfbmV3SW5kZXhTcGFyc2VfZGVjLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9uZXdJbmRleFNwYXJzZSk7ClRzdmlld01vbmdvSW5kZXhlcyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDAsICJUc3ZpZXdNb25nb0luZGV4ZXMiLCBfVHN2aWV3TW9uZ29JbmRleGVzX2RlY29yYXRvcnMsIFRzdmlld01vbmdvSW5kZXhlcyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29JbmRleGVzLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMi5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczEyYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5pbmRleGVzLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLnRvb2xiYXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMjJjNTVlOwogICAgICAgIGNvbG9yOiAjNGFkZTgwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4zKTsKICAgICAgfQoKICAgICAgLmluZGV4ZXMtbGlzdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1jYXJkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuaW5kZXgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmluZGV4LWJhZGdlcyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmJhZGdlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmJhZGdlLnVuaXF1ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3BhcnNlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MSwgMTkxLCAzNiwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmluZGV4LWtleXMgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmluZGV4LWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRyb3AtYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZWY0NDQ0OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAuZHJvcC1idG46aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgIH0KCiAgICAgIC5kcm9wLWJ0bjpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAvKiBEaWFsb2cgc3R5bGVzICovCiAgICAgIC5kaWFsb2ctb3ZlcmxheSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuNyk7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2cgewogICAgICAgIGJhY2tncm91bmQ6ICMxZTFlMWU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgd2lkdGg6IDQwMHB4OwogICAgICAgIG1heC13aWR0aDogOTAlOwogICAgICB9CgogICAgICAuZGlhbG9nLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWZpZWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWxhYmVsIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNnB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZGlhbG9nLWNoZWNrYm94IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuZGlhbG9nLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICM2NjY7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi5wcmltYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxLCBUc3ZpZXdNb25nb0luZGV4ZXMpOwoKLy8gdHNfd2ViL2luZGV4LnRzCnZhciBpbml0QXBwID0gYXN5bmMgKCkgPT4gewogIGNvbnNvbGUubG9nKCJUc1ZpZXcgVUkgaW5pdGlhbGl6aW5nLi4uIik7CiAgYXdhaXQgY3VzdG9tRWxlbWVudHMud2hlbkRlZmluZWQoInRzdmlldy1hcHAiKTsKICBpZiAoIWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoInRzdmlldy1hcHAiKSkgewogICAgY29uc3QgYXBwID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgidHN2aWV3LWFwcCIpOwogICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChhcHApOwogIH0KICBjb25zb2xlLmxvZygiVHNWaWV3IFVJIHJlYWR5Iik7Cn07CmlmIChkb2N1bWVudC5yZWFkeVN0YXRlID09PSAibG9hZGluZyIpIHsKICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgaW5pdEFwcCk7Cn0gZWxzZSB7CiAgaW5pdEFwcCgpOwp9Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246CgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qczoKbGl0LWh0bWwvbGl0LWh0bWwuanM6CmxpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvc3RhdGUuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzeW5jLmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qczoKbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3VudGlsLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL3JlcGVhdC5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE3IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpsaXQtaHRtbC9pcy1zZXJ2ZXIuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMiBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKc3dlZXQtc2Nyb2xsL3N3ZWV0LXNjcm9sbC5qczoKICAoKiEgQHByZXNlcnZlIHN3ZWV0LXNjcm9sbCB2NC4wLjAgLSB0c3V5b3NoaXdhZGEgfCBNSVQgTGljZW5zZSAqKQogICgqISAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgogICAgICBDb3B5cmlnaHQgKGMpIE1pY3Jvc29mdCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KICAgICAgTGljZW5zZWQgdW5kZXIgdGhlIEFwYWNoZSBMaWNlbnNlLCBWZXJzaW9uIDIuMCAodGhlICJMaWNlbnNlIik7IHlvdSBtYXkgbm90IHVzZQogICAgICB0aGlzIGZpbGUgZXhjZXB0IGluIGNvbXBsaWFuY2Ugd2l0aCB0aGUgTGljZW5zZS4gWW91IG1heSBvYnRhaW4gYSBjb3B5IG9mIHRoZQogICAgICBMaWNlbnNlIGF0IGh0dHA6Ly93d3cuYXBhY2hlLm9yZy9saWNlbnNlcy9MSUNFTlNFLTIuMAogIAogICAgICBUSElTIENPREUgSVMgUFJPVklERUQgT04gQU4gKkFTIElTKiBCQVNJUywgV0lUSE9VVCBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgQU5ZCiAgICAgIEtJTkQsIEVJVEhFUiBFWFBSRVNTIE9SIElNUExJRUQsIElOQ0xVRElORyBXSVRIT1VUIExJTUlUQVRJT04gQU5ZIElNUExJRUQKICAgICAgV0FSUkFOVElFUyBPUiBDT05ESVRJT05TIE9GIFRJVExFLCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSwKICAgICAgTUVSQ0hBTlRBQkxJVFkgT1IgTk9OLUlORlJJTkdFTUVOVC4KICAKICAgICAgU2VlIHRoZSBBcGFjaGUgVmVyc2lvbiAyLjAgTGljZW5zZSBmb3Igc3BlY2lmaWMgbGFuZ3VhZ2UgZ292ZXJuaW5nIHBlcm1pc3Npb25zCiAgICAgIGFuZCBsaW1pdGF0aW9ucyB1bmRlciB0aGUgTGljZW5zZS4KICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiogKikKCmxpdC1odG1sL3N0YXRpYy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlLWhlbHBlcnMuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMCBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvcHJpdmF0ZS1hc3luYy1oZWxwZXJzLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmVzL2tleWVkLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMjEgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLWJyYW5kcy1zdmctaWNvbnMvaW5kZXgubWpzOgpAZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLXNvbGlkLXN2Zy1pY29ucy9pbmRleC5tanM6CiAgKCohCiAgICogRm9udCBBd2Vzb21lIEZyZWUgNy4xLjAgYnkgQGZvbnRhd2Vzb21lIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20KICAgKiBMaWNlbnNlIC0gaHR0cHM6Ly9mb250YXdlc29tZS5jb20vbGljZW5zZS9mcmVlIChJY29uczogQ0MgQlkgNC4wLCBGb250czogU0lMIE9GTCAxLjEsIENvZGU6IE1JVCBMaWNlbnNlKQogICAqIENvcHlyaWdodCAyMDI1IEZvbnRpY29ucywgSW5jLgogICAqKQoKbHVjaWRlL2Rpc3QvZXNtL2RlZmF1bHRBdHRyaWJ1dGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vY3JlYXRlRWxlbWVudC5qczoKbHVjaWRlL2Rpc3QvZXNtL3JlcGxhY2VFbGVtZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2EtbGFyZ2Utc21hbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY2Nlc3NpYmlsaXR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWN0aXZpdHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9haXItdmVudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlycGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tc21va2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGJ1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWNlbnRlci1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tZW5kLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1lbmQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1jZW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWp1c3RpZnktZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1zcGFjZS1hcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLXNwYWNlLWJldHdlZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1zdGFydC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tc3RhcnQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWNlbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWRpc3RyaWJ1dGUtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtYnVsYW5jZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtcGVyc2FuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtcGVyc2FuZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBob3JhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5jaG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5ncnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbm5veWVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW50ZW5uYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudmlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXBlcnR1cmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHAtd2luZG93LW1hYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcC13aW5kb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHBsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUtcmVzdG9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcm1jaGFpci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1kb3duLWRhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1sZWZ0LWRhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1yaWdodC1kYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXVwLWRhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLTAtMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMS0wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1hLXouanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXRvLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tbmFycm93LXdpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXRvLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi13aWRlLW5hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tei1hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1sZWZ0LWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtdG8tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1mcm9tLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctcmlnaHQtdG8tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtMC0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtMS0wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtYS16LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWZyb20tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLW5hcnJvdy13aWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC10by1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtd2lkZS1uYXJyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC16LWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93cy11cC1mcm9tLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hc3Rlcmlzay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0LXNpZ24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hdG9tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8tbGluZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F1ZGlvLXdhdmVmb3JtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXhlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXhpcy0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhYnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWNrcGFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtZG9sbGFyLXNpZ24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1ldXJvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtaW5kaWFuLXJ1cGVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtaW5mby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWphcGFuZXNlLXllbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcGVyY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wb3VuZC1zdGVybGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXF1ZXN0aW9uLW1hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1ydXNzaWFuLXJ1YmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2Utc3dpc3MtZnJhbmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS10dXJraXNoLWxpcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWdnYWdlLWNsYWltLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFsbG9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmFuYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmRhZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUtYXJyb3ctdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJjb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFycmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFzZWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXRoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1jaGFyZ2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktZnVsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktbG93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1tZWRpdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXdhcm5pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVha2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVhbi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLWRvdWJsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC1zaW5nbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlci1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWVsZWN0cmljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1yaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4taG9yaXpvbnRhbC1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZXR3ZWVuLWhvcml6b250YWwtc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZXR3ZWVuLXZlcnRpY2FsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWNlcHMtZmxleGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpbmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpb2hhemFyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpbm9jdWxhcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaXJkaG91c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYml0Y29pbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmxpbmRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmxvY2tzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLWNvbm5lY3RlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtc2VhcmNoaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9sZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib21iLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWF1ZGlvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stY29weS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFkcGhvbmVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2sta2V5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1pbWFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbWFya2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stb3Blbi1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stb3Blbi10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXRleHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay10eXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11cC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmstbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmsteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vbS1ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3QtbWVzc2FnZS1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3Qtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90dGxlLXdpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3ctYXJyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3hlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNrZXRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4tY2lyY3VpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpY2std2FsbC1maXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpY2std2FsbC1zaGllbGQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpZWZjYXNlLWJ1c2luZXNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpZWZjYXNlLWNvbnZleW9yLWJlbHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtbWVkaWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaW5nLXRvLWZyb250LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2gtY2xlYW5pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icnVzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1YmJsZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVnLXBsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVpbGRpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idXMtZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS1jYXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nha2Utc2xpY2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsY3VsYXRvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItYXJyb3ctdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jaGVjay0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWRheXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1mb2xkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItcmFuZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zeW5jLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIteC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FtZXJhLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbWVyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LWNhbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW5keS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW5keS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXItZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXItdGF4aS1mcm9udC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcmF2YW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXJkLXNpbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcnJvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtbG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLXNlbnNpdGl2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtdXBwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNzZXR0ZS10YXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3RsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NjdHYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1hcmVhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1kZWNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWluY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItc3RhY2tlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNhbmRsZXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1kZWNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWluY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tc3RhY2tlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWdhbnR0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5ldHdvcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1kZWNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4taW5jcmVhc2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29sdW1uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb21iaW5lZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1waWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zY2F0dGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtc3BsaW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2stY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVmLWhhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXJyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWJpc2hvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1rbmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1wYXduLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtcXVlZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWZpcnN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3Mtcm9vay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGFzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LWVsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtbGVmdC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaHVyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaWdhcmV0dGUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hyb21pdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaWdhcmV0dGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LXVwLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZGl2aWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRvbGxhci1zaWduLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRvdC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVxdWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1mYWRpbmctcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1nYXVnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGFya2luZy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGFya2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBpbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wb3VuZC1zdGVybGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvd2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXF1ZXN0aW9uLW1hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc2xhc2gtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zdGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0b3AuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtdXNlci1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjdWl0LWJvYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2l0cnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xhcHBlcmJvYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWNvcHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtbGlzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wYXN0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wZW4tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC10eXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay03LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stZmFkaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvc2VkLWNhcHRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWJhY2t1cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtZG93bmxvYWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kcml6emxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtZm9nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtaGFpbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWxpZ2h0bmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW1vb24tcmFpbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW1vb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLXdpbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc25vdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXN1bi1yYWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3VuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3luYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXVwbG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2x1Yi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGUteG1sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGVwZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2Rlc2FuZGJveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZmZlZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvaW5zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbWJpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21tYW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcGFzcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXBvbmVudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXB1dGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uY2llcmdlLWJlbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uc3RydWN0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhY3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250YWluZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250cmFzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvb2tpZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvb2tpbmctcG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHkteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHlsZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWRvd24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1sZWZ0LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXJpZ2h0LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItcmlnaHQtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NwdS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NyZWF0aXZlLWNvbW1vbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcmVkaXQtY2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb2lzc2FudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3AuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcm9zcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzaGFpci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Vib2lkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3VwLXNvZGEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdXJyZW5jeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N5bGluZGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGFtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UtYmFja3VwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UtemFwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVjaW1hbHMtYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWxldGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZXNzZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbWV0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlmZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtYWxidW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXNjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGl2aWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG5hLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kbmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2xsYXItc2lnbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvbnV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9vci1jbG9zZWQtbG9ja2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9vci1jbG9zZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3dubG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYWZ0aW5nLWNvbXBhc3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmFtYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyaWJiYmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJpbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RydW1zdGljay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2R1bWJiZWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Vhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXJ0aC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VjbGlwc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2ctZnJpZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2ctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWdnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWxsaXBzaXMtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lbGxpcHNpcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLWFwcHJveGltYXRlbHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcXVhbC1ub3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcmFzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcXVhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V0aGVybmV0LXBvcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ldXJvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXYtY2hhcmdlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V4dGVybmFsLWxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9leHBhbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtY2xvc2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY3RvcnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYWNlYm9vay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zhc3QtZm9yd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlYXRoZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZW5jZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlcnJpcy13aGVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpZ21hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1hcmNoaXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1heGlzLTNkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1iYWRnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYnJhY2VzLWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYm94LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1icmFjZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGFydC1jb2x1bW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LXBpZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hlY2stY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZ2l0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1leGNsYW1hdGlvbi1wb2ludC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaGVhZHBob25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaW1hZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWlucHV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1rZXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbXVzaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1vdXRwdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBlbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXF1ZXN0aW9uLW1hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsdXMtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zY2FuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zZWFyY2gtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNpZ25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3ByZWFkc2hlZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNsaWRlcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN0YWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zeW1saW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXJtaW5hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdHlwZS1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXR5cGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS11c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS12b2x1bWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXZpZGVvLWNhbWVyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUteC1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmluZ2VycHJpbnQtcGF0dGVybi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpcmUtZXh0aW5ndWlzaGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoLXN5bWJvbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoaW5nLWhvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctdHJpYW5nbGUtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctdHJpYW5nbGUtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFtZS1raW5kbGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFtZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNobGlnaHQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2hsaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLWNvbmljYWwtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzay1jb25pY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC1ob3Jpem9udGFsLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxvd2VyLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2N1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItYXJjaGl2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jbG9zZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWlucHV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWthbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1rZXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW91dHB1dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1yb290LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXNlYXJjaC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zeW1saW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItdHJlZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvb3RwcmludHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JrbGlmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvcm0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3J3YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJhbWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mcmFtZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mcm93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1ZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdWxsc2NyZWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVubmVsLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdW5uZWwteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXRodW1ibmFpbHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXZlcnRpY2FsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLWRpcmVjdGlvbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FtZXBhZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhdWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F2ZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW9yZ2lhbi1sYXJpLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2hvc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1icmFuY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tbWl0LWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tbWl0LXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbXBhcmUtYXJyb3dzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbXBhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtZm9yay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1ncmFwaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1tZXJnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtYXJyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWNsb3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY3JlYXRlLWFycm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWRyYWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGh1Yi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGxhYi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsYXNzLXdhdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Nlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsb2JlLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dvYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncHUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFkdWF0aW9uLWNhcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyYXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDItY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDIteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0zeDIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTN4My5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JvdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ndWl0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1idXJnZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1tZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWNvaW5zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1maXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1ncmFiLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtaGVscGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtbWV0YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLXBsYXR0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZGJhZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmRzaGFrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUtZG93bmxvYWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWRyaXZlLXVwbG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtaGF0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXQtZ2xhc3Nlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhemUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hkbWktcG9ydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctNS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctNi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkcGhvbmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHBob25lcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRzZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1jcmFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWhhbmRzaGFrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LXB1bHNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWxpY29wdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGV4YWdvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hpZ2hsaWdodGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGlzdG9yeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvcC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3NwaXRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdGVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91cmdsYXNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UtaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1wbHVnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXdpZmkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ljZS1jcmVhbS1ib3dsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWNvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pZC1jYXJkLWxhbnlhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pZC1jYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2Utb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXBsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwc2NhbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltcG9ydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luYm94LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5kaWFuLXJ1cGVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5maW5pdHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmZvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zcGVjdGlvbi1wYW5lbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luc3RhZ3JhbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0YWxpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pdGVyYXRpb24tY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9qYXBhbmVzZS15ZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9qb3lzdGljay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2thbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2theWFrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleWJvYXJkLW11c2ljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWNlaWxpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWRlc2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWZsb29yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC13YWxsLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFuZC1wbG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFuZG1hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5ndWFnZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXB0b3AtbWluaW1hbC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC1taW5pbWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFzc28tc2VsZWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFzc28uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXVnaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheWVycy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtZGFzaGJvYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LWdyaWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtbGlzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1wYW5lbC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXBhbmVsLXRvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC10ZW1wbGF0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlYWYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sZWFmeS1ncmVlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlY3Rlcm4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWJyYXJ5LWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWZlLWJ1b3kuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdhdHVyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2h0YnVsYi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdodGJ1bGIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5lLXNxdWlnZ2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay0yLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rZWRpbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZWNrcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtZG93bi11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtdXAtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY29sbGFwc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWZpbHRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtaW5kZW50LWRlY3JlYXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1pbmRlbnQtaW5jcmVhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1tdXNpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtb3JkZXJlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtcmVzdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXRvZG8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXRyZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXZpZGVvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXItcGlud2hlZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUtZml4ZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jYXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jay1rZXlob2xlLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLWtleWhvbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9nLWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9nLW91dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvZ3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2xsaXBvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2x1Z2dhZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWduZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC13YXJuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWxib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlscy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2staW5zaWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4taG91c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLWluc2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wbHVzLWluc2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC1pbnNpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbm5lZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy1zdHJva2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFydGluaS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXhpbWl6ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWdhcGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21laC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lbW9yeS1zdGljay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lcmdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVudS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW1vcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXJlcGx5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtd2FybmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kaWZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtbW9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1xdW90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXJlcGx5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtc2hhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtd2FybmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2VzLXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMtdm9jYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb2NoaXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3Njb3BlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWljcm93YXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsZXN0b25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWxrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWluaW1pemUtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jbG91ZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGF1c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXBsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNtYXJ0cGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNwZWFrZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXN0b3AuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vb24tc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdG9yYmlrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi1zbm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91bnRhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLTItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci1iYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWNsaWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLTItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmV3c3BhcGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmV0d29yay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25mYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vbi1iaW5hcnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay10YWJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVwYWQtdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL251dC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9udXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tcGF1c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb21lZ2EuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcHRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcmJpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yaWdhbWkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LWJ1Y2tldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LXJvbGxlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50YnJ1c2gtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWludGJydXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFsZXR0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmRhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLWNsb3NlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1jbG9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1yaWdodC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQtY2xvc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3AtYm90dG9tLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1jbG9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3Atb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy1sZWZ0LWJvdHRvbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy1yaWdodC1ib3R0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbHMtdG9wLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXBlcmNsaXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJraW5nLW1ldGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFyZW50aGVzZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJ0eS1wb3BwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bhdy1wcmludC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BjLWNhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4tdG9vbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1ydWxlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbnRhZ29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVyY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlcnNvbi1zdGFuZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BoaWxpcHBpbmUtcGVzby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWZvcndhcmRlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWNhbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1pbmNvbWluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW1pc3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW91dGdvaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpYW5vLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlja2F4ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY3R1cmUtaW4tcGljdHVyZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlnZ3ktYmFuay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsbC1ib3R0bGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bpbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpcGV0dGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waXp6YS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLWxhbmRpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS10YWtlb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGxhbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy16YXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvY2tldC1rbmlmZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvY2tldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvZGNhc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvaW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3Bjb3JuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wc2ljbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3VuZC1zdGVybGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJlc2VudGF0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJpbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ByaW50ZXItY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcm9qZWN0b3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcm9wb3J0aW9ucy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3B1enpsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3B5cmFtaWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9xci1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcXVvdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWJiaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlhdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpby1yZWNlaXZlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlvLXRvd2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWlsLXN5bWJvbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhaW5ib3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXRpby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtZXVyby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtaW5kaWFuLXJ1cGVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1qYXBhbmVzZS15ZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXBvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1ydXNzaWFuLXJ1YmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1zd2lzcy1mcmFuYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtdHVya2lzaC1saXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1jaXJjbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZWxsaXBzaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZ29nZ2xlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjeWNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8tMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY2N3LWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY2N3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jdy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWN3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmlnZXJhdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVnZXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZW1vdmUtZm9ybWF0dGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwZWF0LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBsYWNlLWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGxhY2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBseS1hbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBseS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jld2luZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JpYmJvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvY2tldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvY2tpbmctY2hhaXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb2xsZXItY29hc3Rlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtM2QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LWtleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jY3ctc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jdy1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3V0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvd3MtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvd3MtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvd3MtNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jzcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3J1bGVyLWRpbWVuc2lvbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydXNzaWFuLXJ1YmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FpbGJvYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYWxhZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbmR3aWNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F0ZWxsaXRlLWRpc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXVkaS1yaXlhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUtYWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NhbGUtM2QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWV5ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tYmFyY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZmFjZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4taGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXFyLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2hvb2wuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2lzc29ycy1saW5lLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaXNzb3JzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nvb3Rlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjcmVlbi1zaGFyZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JlZW4tc2hhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JvbGwtdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWN0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VuZC10by1iYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcGFyYXRvci1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1jcmFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXR0aW5ncy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFwZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFyZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGVldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1lbGxpcHNpcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1oYWxmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXF1ZXN0aW9uLW1hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtdXNlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcC13aGVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGlydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWJhZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWJhc2tldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWNhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG92ZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG93ZXItaGVhZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NocmVkZGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW1wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hydWIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHVmZmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLWhpZ2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWdtYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1sb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtbWVkaXVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLXplcm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYXR1cmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC1iaWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpcmVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2tpcC1iYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2t1bGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWZvcndhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2xpY2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGlkZXJzLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGlkZXJzLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS1jaGFyZ2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtYXJ0cGhvbmUtbmZjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWlsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NuYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc25vd2ZsYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc29hcC1kaXNwZW5zZXItZHJvcGxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvZmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zb2xhci1wYW5lbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFjZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BhcmtsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYXJrbGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlYWtlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWVjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVsbC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwbGluZS1wb2ludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcG9vbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nwb3RsaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwcmF5LWNhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nwcm91dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hY3Rpdml0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hc3Rlcmlzay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1ib3R0b20tZGFzaGVkLXNjaXNzb3JzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoYXJ0LWdhbnR0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20tY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtYm90dG9tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1rYW5iYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLW1vdXNlLXBvaW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGl2aWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1lcXVhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1mdW5jdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1rYW5iYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbGlicmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1lbnUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbW91c2UtcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wYXJraW5nLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wYXJraW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpbGNyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBvd2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXJhZGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2Npc3NvcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcm91bmQtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNpZ21hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNwbGl0LWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXN0YWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXN0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3RvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS10ZXJtaW5hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS11c2VyLXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtZXhjbHVkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtaW50ZXJzZWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1zdWJ0cmFjdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlyY2xlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtdW5pdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlycmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RhbXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXItaGFsZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGVwLWJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGVwLWZvcndhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGV0aG9zY29wZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNrZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNreS1ub3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RvcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLXZlcnRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RyaWtldGhyb3VnaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1YnNjcmlwdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1kaW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tbWVkaXVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLW1vb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tc25vdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnJpc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW5zZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdXBlcnNjcmlwdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3YXRjaC1ib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dpc3MtZnJhbmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd2l0Y2gtY2FtZXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dvcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zeXJpbmdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLWNlbGxzLW1lcmdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY2VsbHMtc3BsaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1vZi1jb250ZW50cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLWNvbHVtbnMtc3BsaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1wcm9wZXJ0aWVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtcm93cy1zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGV0LXNtYXJ0cGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFncy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFuZ2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhcmdldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbGVzY29wZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQtdHJlZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXN0LXR1YmUtZGlhZ29uYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXJtaW5hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWNlbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1qdXN0aWZ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtY3Vyc29yLWlucHV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1jdXJzb3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXF1b3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1pbml0aWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXNlbGVjdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZWF0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXdyYXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zbm93Zmxha2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zdW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RodW1icy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1zbGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy1wbGFuZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aW1lci1yZXNldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9nZ2xlLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2lsZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b29sLWNhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b29sYm94LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9ybmFkby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvcnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3dlci1jb250cm9sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG95LWJyaWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhZmZpYy1jb25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhY3Rvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LXR1bm5lbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tdHJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFtLWZyb250LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbnNnZW5kZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFzaC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLWRlY2lkdW91cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGFsbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbGxvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLXVwLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Ryb3BoeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RydWNrLWVsZWN0cmljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJ1Y2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJraXNoLWxpcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJudGFibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJ0bGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90di1taW5pbWFsLXBsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90di1taW5pbWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0Y2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0dGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHlwZS1vdXRsaW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHlwZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VtYnJlbGxhLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VtYnJlbGxhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kZXJsaW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5mb2xkLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmdyb3VwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5pdmVyc2l0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5saW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5wbHVnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNiLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXBsb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXN0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMtcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2Vycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLWNyb3NzZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91dGVuc2lscy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Zhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0aWxpdHktcG9sZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZhcmlhYmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmF1bHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZWN0b3Itc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVnYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW5ldGlhbi1tYXNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW51cy1hbmQtbWFycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpYnJhdGUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlicmF0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9pY2VtYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlkZW90YXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlldy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZvbGxleWJhbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZvbHVtZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZvbHVtZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbGxldC1taW5pbWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LWNhcmRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbHBhcGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FuZC1zcGFya2xlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXJlaG91c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXNoaW5nLW1hY2hpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXRjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWxhZGRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F5cG9pbnRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2ViY2FtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2ViaG9vay1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2VpZ2h0LXRpbGRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2VpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hlYXQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hlYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aG9sZS13b3JkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWxvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktaGlnaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXN5bmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXplcm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZC1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpbmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dvcm0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JrZmxvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dyZW5jaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy95b3V0dWJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3phcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20taW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy96b29tLW91dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zQW5kQWxpYXNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2x1Y2lkZS5qczoKICAoKioKICAgKiBAbGljZW5zZSBsdWNpZGUgdjAuNTYyLjAgLSBJU0MKICAgKgogICAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIElTQyBsaWNlbnNlLgogICAqIFNlZSB0aGUgTElDRU5TRSBmaWxlIGluIHRoZSByb290IGRpcmVjdG9yeSBvZiB0aGlzIHNvdXJjZSB0cmVlLgogICAqKQoKaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanM6CiAgKCohCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgU2HFoWEgSm92YW5pxIcKICAgKiBMaWNlbnNlZCB1bmRlciB0aGUgTW96aWxsYSBQdWJsaWMgTGljZW5zZSwgVmVyc2lvbiAyLjAgb3IgdGhlIE1JVCBsaWNlbnNlLAogICAqIGF0IHlvdXIgb3B0aW9uLiBUaGlzIGZpbGUgbWF5IG5vdCBiZSBjb3BpZWQsIG1vZGlmaWVkLCBvciBkaXN0cmlidXRlZAogICAqIGV4Y2VwdCBhY2NvcmRpbmcgdG8gdGhvc2UgdGVybXMuCiAgICogU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogU2HFoWEgSm92YW5pxIcKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogTUlUIG9yIE1QTC8yLjAKICAgKikKICAoKioKICAgKiBWYWxpZGF0aW9uLCBleHRyYWN0aW9uIGFuZCBjcmVhdGlvbiBvZiBJQkFOLCBCQkFOLCBCSUMvU1dJRlQgbnVtYmVycyBwbHVzIHNvbWUgb3RoZXIgaGVscGZ1bCBzdHVmZgogICAqIEBwYWNrYWdlIERvY3VtZW50YXRpb24KICAgKiBAYXV0aG9yIFNhxaFhIEpvdmFuacSHCiAgICogQG1vZHVsZSBpYmFudG9vbHMKICAgKiBAdmVyc2lvbiA0LjUuMQogICAqIEBsaWNlbnNlIE1JVCBvciBNUEwtMi4wCiAgICogQHByZWZlcnJlZAogICAqKQoqLwovLyMgc291cmNlTWFwcGluZ1VSTD1idW5kbGUtMTc2OTM0MDIxNDkwNC5qcy5tYXAK" + "contentBase64": "dmFyIF9fY3JlYXRlID0gT2JqZWN0LmNyZWF0ZTsKdmFyIF9fZnJlZXplID0gT2JqZWN0LmZyZWV6ZTsKdmFyIF9fZGVmUHJvcCA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTsKdmFyIF9fZ2V0T3duUHJvcERlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOwp2YXIgX19nZXRPd25Qcm9wTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lczsKdmFyIF9fZ2V0UHJvdG9PZiA9IE9iamVjdC5nZXRQcm90b3R5cGVPZjsKdmFyIF9faGFzT3duUHJvcCA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CnZhciBfX2tub3duU3ltYm9sID0gKG5hbWUsIHN5bWJvbCkgPT4gKHN5bWJvbCA9IFN5bWJvbFtuYW1lXSkgPyBzeW1ib2wgOiAvKiBAX19QVVJFX18gKi8gU3ltYm9sLmZvcigiU3ltYm9sLiIgKyBuYW1lKTsKdmFyIF9fdHlwZUVycm9yID0gKG1zZykgPT4gewogIHRocm93IFR5cGVFcnJvcihtc2cpOwp9Owp2YXIgX19kZWZOb3JtYWxQcm9wID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBrZXkyIGluIG9iaiA/IF9fZGVmUHJvcChvYmosIGtleTIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IHZhbHVlMiB9KSA6IG9ialtrZXkyXSA9IHZhbHVlMjsKdmFyIF9fbmFtZSA9ICh0YXJnZXQsIHZhbHVlMikgPT4gX19kZWZQcm9wKHRhcmdldCwgIm5hbWUiLCB7IHZhbHVlOiB2YWx1ZTIsIGNvbmZpZ3VyYWJsZTogdHJ1ZSB9KTsKdmFyIF9fcmVxdWlyZSA9IC8qIEBfX1BVUkVfXyAqLyAoKHgzKSA9PiB0eXBlb2YgcmVxdWlyZSAhPT0gInVuZGVmaW5lZCIgPyByZXF1aXJlIDogdHlwZW9mIFByb3h5ICE9PSAidW5kZWZpbmVkIiA/IG5ldyBQcm94eSh4MywgewogIGdldDogKGE1LCBiNSkgPT4gKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIiA/IHJlcXVpcmUgOiBhNSlbYjVdCn0pIDogeDMpKGZ1bmN0aW9uKHgzKSB7CiAgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAidW5kZWZpbmVkIikgcmV0dXJuIHJlcXVpcmUuYXBwbHkodGhpcywgYXJndW1lbnRzKTsKICB0aHJvdyBFcnJvcignRHluYW1pYyByZXF1aXJlIG9mICInICsgeDMgKyAnIiBpcyBub3Qgc3VwcG9ydGVkJyk7Cn0pOwp2YXIgX19lc20gPSAoZm4sIHJlcykgPT4gZnVuY3Rpb24gX19pbml0KCkgewogIHJldHVybiBmbiAmJiAocmVzID0gKDAsIGZuW19fZ2V0T3duUHJvcE5hbWVzKGZuKVswXV0pKGZuID0gMCkpLCByZXM7Cn07CnZhciBfX2NvbW1vbkpTID0gKGNiLCBtb2QpID0+IGZ1bmN0aW9uIF9fcmVxdWlyZTIoKSB7CiAgcmV0dXJuIG1vZCB8fCAoMCwgY2JbX19nZXRPd25Qcm9wTmFtZXMoY2IpWzBdXSkoKG1vZCA9IHsgZXhwb3J0czoge30gfSkuZXhwb3J0cywgbW9kKSwgbW9kLmV4cG9ydHM7Cn07CnZhciBfX2V4cG9ydCA9ICh0YXJnZXQsIGFsbDMpID0+IHsKICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCB7IGdldDogYWxsM1tuYW1lXSwgZW51bWVyYWJsZTogdHJ1ZSB9KTsKfTsKdmFyIF9fY29weVByb3BzID0gKHRvMiwgZnJvbTIsIGV4Y2VwdCwgZGVzYykgPT4gewogIGlmIChmcm9tMiAmJiB0eXBlb2YgZnJvbTIgPT09ICJvYmplY3QiIHx8IHR5cGVvZiBmcm9tMiA9PT0gImZ1bmN0aW9uIikgewogICAgZm9yIChsZXQga2V5MiBvZiBfX2dldE93blByb3BOYW1lcyhmcm9tMikpCiAgICAgIGlmICghX19oYXNPd25Qcm9wLmNhbGwodG8yLCBrZXkyKSAmJiBrZXkyICE9PSBleGNlcHQpCiAgICAgICAgX19kZWZQcm9wKHRvMiwga2V5MiwgeyBnZXQ6ICgpID0+IGZyb20yW2tleTJdLCBlbnVtZXJhYmxlOiAhKGRlc2MgPSBfX2dldE93blByb3BEZXNjKGZyb20yLCBrZXkyKSkgfHwgZGVzYy5lbnVtZXJhYmxlIH0pOwogIH0KICByZXR1cm4gdG8yOwp9Owp2YXIgX190b0VTTSA9IChtb2QsIGlzTm9kZU1vZGUsIHRhcmdldCkgPT4gKHRhcmdldCA9IG1vZCAhPSBudWxsID8gX19jcmVhdGUoX19nZXRQcm90b09mKG1vZCkpIDoge30sIF9fY29weVByb3BzKAogIC8vIElmIHRoZSBpbXBvcnRlciBpcyBpbiBub2RlIGNvbXBhdGliaWxpdHkgbW9kZSBvciB0aGlzIGlzIG5vdCBhbiBFU00KICAvLyBmaWxlIHRoYXQgaGFzIGJlZW4gY29udmVydGVkIHRvIGEgQ29tbW9uSlMgZmlsZSB1c2luZyBhIEJhYmVsLQogIC8vIGNvbXBhdGlibGUgdHJhbnNmb3JtIChpLmUuICJfX2VzTW9kdWxlIiBoYXMgbm90IGJlZW4gc2V0KSwgdGhlbiBzZXQKICAvLyAiZGVmYXVsdCIgdG8gdGhlIENvbW1vbkpTICJtb2R1bGUuZXhwb3J0cyIgZm9yIG5vZGUgY29tcGF0aWJpbGl0eS4KICBpc05vZGVNb2RlIHx8ICFtb2QgfHwgIW1vZC5fX2VzTW9kdWxlID8gX19kZWZQcm9wKHRhcmdldCwgImRlZmF1bHQiLCB7IHZhbHVlOiBtb2QsIGVudW1lcmFibGU6IHRydWUgfSkgOiB0YXJnZXQsCiAgbW9kCikpOwp2YXIgX19kZWNvcmF0b3JTdGFydCA9IChiYXNlKSA9PiBbLCAsICwgX19jcmVhdGUoYmFzZT8uW19fa25vd25TeW1ib2woIm1ldGFkYXRhIildID8/IG51bGwpXTsKdmFyIF9fZGVjb3JhdG9yU3RyaW5ncyA9IFsiY2xhc3MiLCAibWV0aG9kIiwgImdldHRlciIsICJzZXR0ZXIiLCAiYWNjZXNzb3IiLCAiZmllbGQiLCAidmFsdWUiLCAiZ2V0IiwgInNldCJdOwp2YXIgX19leHBlY3RGbiA9IChmbikgPT4gZm4gIT09IHZvaWQgMCAmJiB0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIgPyBfX3R5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKSA6IGZuOwp2YXIgX19kZWNvcmF0b3JDb250ZXh0ID0gKGtpbmQsIG5hbWUsIGRvbmUsIG1ldGFkYXRhLCBmbnMpID0+ICh7IGtpbmQ6IF9fZGVjb3JhdG9yU3RyaW5nc1traW5kXSwgbmFtZSwgbWV0YWRhdGEsIGFkZEluaXRpYWxpemVyOiAoZm4pID0+IGRvbmUuXyA/IF9fdHlwZUVycm9yKCJBbHJlYWR5IGluaXRpYWxpemVkIikgOiBmbnMucHVzaChfX2V4cGVjdEZuKGZuIHx8IG51bGwpKSB9KTsKdmFyIF9fZGVjb3JhdG9yTWV0YWRhdGEgPSAoYXJyYXksIHRhcmdldCkgPT4gX19kZWZOb3JtYWxQcm9wKHRhcmdldCwgX19rbm93blN5bWJvbCgibWV0YWRhdGEiKSwgYXJyYXlbM10pOwp2YXIgX19ydW5Jbml0aWFsaXplcnMgPSAoYXJyYXksIGZsYWdzLCBzZWxmMiwgdmFsdWUyKSA9PiB7CiAgZm9yICh2YXIgaTExID0gMCwgZm5zID0gYXJyYXlbZmxhZ3MgPj4gMV0sIG4xMyA9IGZucyAmJiBmbnMubGVuZ3RoOyBpMTEgPCBuMTM7IGkxMSsrKSBmbGFncyAmIDEgPyBmbnNbaTExXS5jYWxsKHNlbGYyKSA6IHZhbHVlMiA9IGZuc1tpMTFdLmNhbGwoc2VsZjIsIHZhbHVlMik7CiAgcmV0dXJuIHZhbHVlMjsKfTsKdmFyIF9fZGVjb3JhdGVFbGVtZW50ID0gKGFycmF5LCBmbGFncywgbmFtZSwgZGVjb3JhdG9ycywgdGFyZ2V0LCBleHRyYSkgPT4gewogIHZhciBmbiwgaXQsIGRvbmUsIGN0eCwgYWNjZXNzLCBrNCA9IGZsYWdzICYgNywgczkgPSAhIShmbGFncyAmIDgpLCBwNyA9ICEhKGZsYWdzICYgMTYpOwogIHZhciBqNCA9IGs0ID4gMyA/IGFycmF5Lmxlbmd0aCArIDEgOiBrNCA/IHM5ID8gMSA6IDIgOiAwLCBrZXkyID0gX19kZWNvcmF0b3JTdHJpbmdzW2s0ICsgNV07CiAgdmFyIGluaXRpYWxpemVycyA9IGs0ID4gMyAmJiAoYXJyYXlbajQgLSAxXSA9IFtdKSwgZXh0cmFJbml0aWFsaXplcnMgPSBhcnJheVtqNF0gfHwgKGFycmF5W2o0XSA9IFtdKTsKICB2YXIgZGVzYyA9IGs0ICYmICghcDcgJiYgIXM5ICYmICh0YXJnZXQgPSB0YXJnZXQucHJvdG90eXBlKSwgazQgPCA1ICYmIChrNCA+IDMgfHwgIXA3KSAmJiBfX2dldE93blByb3BEZXNjKGs0IDwgNCA/IHRhcmdldCA6IHsgZ2V0IFtuYW1lXSgpIHsKICAgIHJldHVybiBfX3ByaXZhdGVHZXQodGhpcywgZXh0cmEpOwogIH0sIHNldCBbbmFtZV0oeDMpIHsKICAgIHJldHVybiBfX3ByaXZhdGVTZXQodGhpcywgZXh0cmEsIHgzKTsKICB9IH0sIG5hbWUpKTsKICBrNCA/IHA3ICYmIGs0IDwgNCAmJiBfX25hbWUoZXh0cmEsIChrNCA+IDIgPyAic2V0ICIgOiBrNCA+IDEgPyAiZ2V0ICIgOiAiIikgKyBuYW1lKSA6IF9fbmFtZSh0YXJnZXQsIG5hbWUpOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICBjdHggPSBfX2RlY29yYXRvckNvbnRleHQoazQsIG5hbWUsIGRvbmUgPSB7fSwgYXJyYXlbM10sIGV4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGlmIChrNCkgewogICAgICBjdHguc3RhdGljID0gczksIGN0eC5wcml2YXRlID0gcDcsIGFjY2VzcyA9IGN0eC5hY2Nlc3MgPSB7IGhhczogcDcgPyAoeDMpID0+IF9fcHJpdmF0ZUluKHRhcmdldCwgeDMpIDogKHgzKSA9PiBuYW1lIGluIHgzIH07CiAgICAgIGlmIChrNCBeIDMpIGFjY2Vzcy5nZXQgPSBwNyA/ICh4MykgPT4gKGs0IF4gMSA/IF9fcHJpdmF0ZUdldCA6IF9fcHJpdmF0ZU1ldGhvZCkoeDMsIHRhcmdldCwgazQgXiA0ID8gZXh0cmEgOiBkZXNjLmdldCkgOiAoeDMpID0+IHgzW25hbWVdOwogICAgICBpZiAoazQgPiAyKSBhY2Nlc3Muc2V0ID0gcDcgPyAoeDMsIHk1KSA9PiBfX3ByaXZhdGVTZXQoeDMsIHRhcmdldCwgeTUsIGs0IF4gNCA/IGV4dHJhIDogZGVzYy5zZXQpIDogKHgzLCB5NSkgPT4geDNbbmFtZV0gPSB5NTsKICAgIH0KICAgIGl0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoazQgPyBrNCA8IDQgPyBwNyA/IGV4dHJhIDogZGVzY1trZXkyXSA6IGs0ID4gNCA/IHZvaWQgMCA6IHsgZ2V0OiBkZXNjLmdldCwgc2V0OiBkZXNjLnNldCB9IDogdGFyZ2V0LCBjdHgpLCBkb25lLl8gPSAxOwogICAgaWYgKGs0IF4gNCB8fCBpdCA9PT0gdm9pZCAwKSBfX2V4cGVjdEZuKGl0KSAmJiAoazQgPiA0ID8gaW5pdGlhbGl6ZXJzLnVuc2hpZnQoaXQpIDogazQgPyBwNyA/IGV4dHJhID0gaXQgOiBkZXNjW2tleTJdID0gaXQgOiB0YXJnZXQgPSBpdCk7CiAgICBlbHNlIGlmICh0eXBlb2YgaXQgIT09ICJvYmplY3QiIHx8IGl0ID09PSBudWxsKSBfX3R5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICBlbHNlIF9fZXhwZWN0Rm4oZm4gPSBpdC5nZXQpICYmIChkZXNjLmdldCA9IGZuKSwgX19leHBlY3RGbihmbiA9IGl0LnNldCkgJiYgKGRlc2Muc2V0ID0gZm4pLCBfX2V4cGVjdEZuKGZuID0gaXQuaW5pdCkgJiYgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoZm4pOwogIH0KICByZXR1cm4gazQgfHwgX19kZWNvcmF0b3JNZXRhZGF0YShhcnJheSwgdGFyZ2V0KSwgZGVzYyAmJiBfX2RlZlByb3AodGFyZ2V0LCBuYW1lLCBkZXNjKSwgcDcgPyBrNCBeIDQgPyBleHRyYSA6IGRlc2MgOiB0YXJnZXQ7Cn07CnZhciBfX3B1YmxpY0ZpZWxkID0gKG9iaiwga2V5MiwgdmFsdWUyKSA9PiBfX2RlZk5vcm1hbFByb3Aob2JqLCB0eXBlb2Yga2V5MiAhPT0gInN5bWJvbCIgPyBrZXkyICsgIiIgOiBrZXkyLCB2YWx1ZTIpOwp2YXIgX19hY2Nlc3NDaGVjayA9IChvYmosIG1lbWJlciwgbXNnKSA9PiBtZW1iZXIuaGFzKG9iaikgfHwgX190eXBlRXJyb3IoIkNhbm5vdCAiICsgbXNnKTsKdmFyIF9fcHJpdmF0ZUluID0gKG1lbWJlciwgb2JqKSA9PiBPYmplY3Qob2JqKSAhPT0gb2JqID8gX190eXBlRXJyb3IoJ0Nhbm5vdCB1c2UgdGhlICJpbiIgb3BlcmF0b3Igb24gdGhpcyB2YWx1ZScpIDogbWVtYmVyLmhhcyhvYmopOwp2YXIgX19wcml2YXRlR2V0ID0gKG9iaiwgbWVtYmVyLCBnZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAicmVhZCBmcm9tIHByaXZhdGUgZmllbGQiKSwgZ2V0dGVyID8gZ2V0dGVyLmNhbGwob2JqKSA6IG1lbWJlci5nZXQob2JqKSk7CnZhciBfX3ByaXZhdGVBZGQgPSAob2JqLCBtZW1iZXIsIHZhbHVlMikgPT4gbWVtYmVyLmhhcyhvYmopID8gX190eXBlRXJyb3IoIkNhbm5vdCBhZGQgdGhlIHNhbWUgcHJpdmF0ZSBtZW1iZXIgbW9yZSB0aGFuIG9uY2UiKSA6IG1lbWJlciBpbnN0YW5jZW9mIFdlYWtTZXQgPyBtZW1iZXIuYWRkKG9iaikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZVNldCA9IChvYmosIG1lbWJlciwgdmFsdWUyLCBzZXR0ZXIpID0+IChfX2FjY2Vzc0NoZWNrKG9iaiwgbWVtYmVyLCAid3JpdGUgdG8gcHJpdmF0ZSBmaWVsZCIpLCBzZXR0ZXIgPyBzZXR0ZXIuY2FsbChvYmosIHZhbHVlMikgOiBtZW1iZXIuc2V0KG9iaiwgdmFsdWUyKSwgdmFsdWUyKTsKdmFyIF9fcHJpdmF0ZU1ldGhvZCA9IChvYmosIG1lbWJlciwgbWV0aG9kKSA9PiAoX19hY2Nlc3NDaGVjayhvYmosIG1lbWJlciwgImFjY2VzcyBwcml2YXRlIG1ldGhvZCIpLCBtZXRob2QpOwp2YXIgX190ZW1wbGF0ZSA9IChjb29rZWQsIHJhdzIpID0+IF9fZnJlZXplKF9fZGVmUHJvcChjb29rZWQsICJyYXciLCB7IHZhbHVlOiBfX2ZyZWV6ZShyYXcyIHx8IGNvb2tlZC5zbGljZSgpKSB9KSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvY3NzLXRhZy5qcwp2YXIgdCwgZSwgcywgbywgbiwgciwgaSwgUywgYzsKdmFyIGluaXRfY3NzX3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2Nzcy10YWcuanMiKCkgewogICAgdCA9IGdsb2JhbFRoaXMsIGUgPSB0LlNoYWRvd1Jvb3QgJiYgKHZvaWQgMCA9PT0gdC5TaGFkeUNTUyB8fCB0LlNoYWR5Q1NTLm5hdGl2ZVNoYWRvdykgJiYgImFkb3B0ZWRTdHlsZVNoZWV0cyIgaW4gRG9jdW1lbnQucHJvdG90eXBlICYmICJyZXBsYWNlIiBpbiBDU1NTdHlsZVNoZWV0LnByb3RvdHlwZSwgcyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKSwgbyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgbiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSwgbzEzKSB7CiAgICAgICAgaWYgKHRoaXMuXyRjc3NSZXN1bHQkID0gdHJ1ZSwgbzEzICE9PSBzKSB0aHJvdyBFcnJvcigiQ1NTUmVzdWx0IGlzIG5vdCBjb25zdHJ1Y3RhYmxlLiBVc2UgYHVuc2FmZUNTU2Agb3IgYGNzc2AgaW5zdGVhZC4iKTsKICAgICAgICB0aGlzLmNzc1RleHQgPSB0OSwgdGhpcy50ID0gZTExOwogICAgICB9CiAgICAgIGdldCBzdHlsZVNoZWV0KCkgewogICAgICAgIGxldCB0OSA9IHRoaXMubzsKICAgICAgICBjb25zdCBzOSA9IHRoaXMudDsKICAgICAgICBpZiAoZSAmJiB2b2lkIDAgPT09IHQ5KSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB2b2lkIDAgIT09IHM5ICYmIDEgPT09IHM5Lmxlbmd0aDsKICAgICAgICAgIGUxMSAmJiAodDkgPSBvLmdldChzOSkpLCB2b2lkIDAgPT09IHQ5ICYmICgodGhpcy5vID0gdDkgPSBuZXcgQ1NTU3R5bGVTaGVldCgpKS5yZXBsYWNlU3luYyh0aGlzLmNzc1RleHQpLCBlMTEgJiYgby5zZXQoczksIHQ5KSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfQogICAgICB0b1N0cmluZygpIHsKICAgICAgICByZXR1cm4gdGhpcy5jc3NUZXh0OwogICAgICB9CiAgICB9OwogICAgciA9ICh0OSkgPT4gbmV3IG4oInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkgOiB0OSArICIiLCB2b2lkIDAsIHMpLCBpID0gKHQ5LCAuLi5lMTEpID0+IHsKICAgICAgY29uc3QgbzEzID0gMSA9PT0gdDkubGVuZ3RoID8gdDlbMF0gOiBlMTEucmVkdWNlKChlMTIsIHM5LCBvMTQpID0+IGUxMiArICgodDEwKSA9PiB7CiAgICAgICAgaWYgKHRydWUgPT09IHQxMC5fJGNzc1Jlc3VsdCQpIHJldHVybiB0MTAuY3NzVGV4dDsKICAgICAgICBpZiAoIm51bWJlciIgPT0gdHlwZW9mIHQxMCkgcmV0dXJuIHQxMDsKICAgICAgICB0aHJvdyBFcnJvcigiVmFsdWUgcGFzc2VkIHRvICdjc3MnIGZ1bmN0aW9uIG11c3QgYmUgYSAnY3NzJyBmdW5jdGlvbiByZXN1bHQ6ICIgKyB0MTAgKyAiLiBVc2UgJ3Vuc2FmZUNTUycgdG8gcGFzcyBub24tbGl0ZXJhbCB2YWx1ZXMsIGJ1dCB0YWtlIGNhcmUgdG8gZW5zdXJlIHBhZ2Ugc2VjdXJpdHkuIik7CiAgICAgIH0pKHM5KSArIHQ5W28xNCArIDFdLCB0OVswXSk7CiAgICAgIHJldHVybiBuZXcgbihvMTMsIHQ5LCBzKTsKICAgIH0sIFMgPSAoczksIG8xMykgPT4gewogICAgICBpZiAoZSkgczkuYWRvcHRlZFN0eWxlU2hlZXRzID0gbzEzLm1hcCgodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/IHQ5IDogdDkuc3R5bGVTaGVldCk7CiAgICAgIGVsc2UgZm9yIChjb25zdCBlMTEgb2YgbzEzKSB7CiAgICAgICAgY29uc3QgbzE0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSwgbjEzID0gdC5saXROb25jZTsKICAgICAgICB2b2lkIDAgIT09IG4xMyAmJiBvMTQuc2V0QXR0cmlidXRlKCJub25jZSIsIG4xMyksIG8xNC50ZXh0Q29udGVudCA9IGUxMS5jc3NUZXh0LCBzOS5hcHBlbmRDaGlsZChvMTQpOwogICAgICB9CiAgICB9LCBjID0gZSA/ICh0OSkgPT4gdDkgOiAodDkpID0+IHQ5IGluc3RhbmNlb2YgQ1NTU3R5bGVTaGVldCA/ICgodDEwKSA9PiB7CiAgICAgIGxldCBlMTEgPSAiIjsKICAgICAgZm9yIChjb25zdCBzOSBvZiB0MTAuY3NzUnVsZXMpIGUxMSArPSBzOS5jc3NUZXh0OwogICAgICByZXR1cm4gcihlMTEpOwogICAgfSkodDkpIDogdDk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzCnZhciBpMiwgZTIsIGgsIHIyLCBvMiwgbjIsIGEsIGMyLCBsLCBwLCBkLCB1LCBmLCBiLCB5Owp2YXIgaW5pdF9yZWFjdGl2ZV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvcmVhY3RpdmUtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2Nzc190YWcoKTsKICAgIGluaXRfY3NzX3RhZygpOwogICAgKHsgaXM6IGkyLCBkZWZpbmVQcm9wZXJ0eTogZTIsIGdldE93blByb3BlcnR5RGVzY3JpcHRvcjogaCwgZ2V0T3duUHJvcGVydHlOYW1lczogcjIsIGdldE93blByb3BlcnR5U3ltYm9sczogbzIsIGdldFByb3RvdHlwZU9mOiBuMiB9ID0gT2JqZWN0KSwgYSA9IGdsb2JhbFRoaXMsIGMyID0gYS50cnVzdGVkVHlwZXMsIGwgPSBjMiA/IGMyLmVtcHR5U2NyaXB0IDogIiIsIHAgPSBhLnJlYWN0aXZlRWxlbWVudFBvbHlmaWxsU3VwcG9ydCwgZCA9ICh0OSwgczkpID0+IHQ5LCB1ID0geyB0b0F0dHJpYnV0ZSh0OSwgczkpIHsKICAgICAgc3dpdGNoIChzOSkgewogICAgICAgIGNhc2UgQm9vbGVhbjoKICAgICAgICAgIHQ5ID0gdDkgPyBsIDogbnVsbDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0OSA9IG51bGwgPT0gdDkgPyB0OSA6IEpTT04uc3RyaW5naWZ5KHQ5KTsKICAgICAgfQogICAgICByZXR1cm4gdDk7CiAgICB9LCBmcm9tQXR0cmlidXRlKHQ5LCBzOSkgewogICAgICBsZXQgaTExID0gdDk7CiAgICAgIHN3aXRjaCAoczkpIHsKICAgICAgICBjYXNlIEJvb2xlYW46CiAgICAgICAgICBpMTEgPSBudWxsICE9PSB0OTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgTnVtYmVyOgogICAgICAgICAgaTExID0gbnVsbCA9PT0gdDkgPyBudWxsIDogTnVtYmVyKHQ5KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgT2JqZWN0OgogICAgICAgIGNhc2UgQXJyYXk6CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpMTEgPSBKU09OLnBhcnNlKHQ5KTsKICAgICAgICAgIH0gY2F0Y2ggKHQxMCkgewogICAgICAgICAgICBpMTEgPSBudWxsOwogICAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBpMTE7CiAgICB9IH0sIGYgPSAodDksIHM5KSA9PiAhaTIodDksIHM5KSwgYiA9IHsgYXR0cmlidXRlOiB0cnVlLCB0eXBlOiBTdHJpbmcsIGNvbnZlcnRlcjogdSwgcmVmbGVjdDogZmFsc2UsIHVzZURlZmF1bHQ6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH07CiAgICBTeW1ib2wubWV0YWRhdGEgPz89IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIm1ldGFkYXRhIiksIGEubGl0UHJvcGVydHlNZXRhZGF0YSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB5ID0gY2xhc3MgZXh0ZW5kcyBIVE1MRWxlbWVudCB7CiAgICAgIHN0YXRpYyBhZGRJbml0aWFsaXplcih0OSkgewogICAgICAgIHRoaXMuXyRFaSgpLCAodGhpcy5sID8/PSBbXSkucHVzaCh0OSk7CiAgICAgIH0KICAgICAgc3RhdGljIGdldCBvYnNlcnZlZEF0dHJpYnV0ZXMoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmluYWxpemUoKSwgdGhpcy5fJEVoICYmIFsuLi50aGlzLl8kRWgua2V5cygpXTsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvcGVydHkodDksIHM5ID0gYikgewogICAgICAgIGlmIChzOS5zdGF0ZSAmJiAoczkuYXR0cmlidXRlID0gZmFsc2UpLCB0aGlzLl8kRWkoKSwgdGhpcy5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkodDkpICYmICgoczkgPSBPYmplY3QuY3JlYXRlKHM5KSkud3JhcHBlZCA9IHRydWUpLCB0aGlzLmVsZW1lbnRQcm9wZXJ0aWVzLnNldCh0OSwgczkpLCAhczkubm9BY2Nlc3NvcikgewogICAgICAgICAgY29uc3QgaTExID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpLCBoOSA9IHRoaXMuZ2V0UHJvcGVydHlEZXNjcmlwdG9yKHQ5LCBpMTEsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaDkgJiYgZTIodGhpcy5wcm90b3R5cGUsIHQ5LCBoOSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBnZXRQcm9wZXJ0eURlc2NyaXB0b3IodDksIHM5LCBpMTEpIHsKICAgICAgICBjb25zdCB7IGdldDogZTExLCBzZXQ6IHIxMSB9ID0gaCh0aGlzLnByb3RvdHlwZSwgdDkpID8/IHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbczldOwogICAgICAgIH0sIHNldCh0MTApIHsKICAgICAgICAgIHRoaXNbczldID0gdDEwOwogICAgICAgIH0gfTsKICAgICAgICByZXR1cm4geyBnZXQ6IGUxMSwgc2V0KHMxMCkgewogICAgICAgICAgY29uc3QgaDkgPSBlMTE/LmNhbGwodGhpcyk7CiAgICAgICAgICByMTE/LmNhbGwodGhpcywgczEwKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKHQ5LCBoOSwgaTExKTsKICAgICAgICB9LCBjb25maWd1cmFibGU6IHRydWUsIGVudW1lcmFibGU6IHRydWUgfTsKICAgICAgfQogICAgICBzdGF0aWMgZ2V0UHJvcGVydHlPcHRpb25zKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZWxlbWVudFByb3BlcnRpZXMuZ2V0KHQ5KSA/PyBiOwogICAgICB9CiAgICAgIHN0YXRpYyBfJEVpKCkgewogICAgICAgIGlmICh0aGlzLmhhc093blByb3BlcnR5KGQoImVsZW1lbnRQcm9wZXJ0aWVzIikpKSByZXR1cm47CiAgICAgICAgY29uc3QgdDkgPSBuMih0aGlzKTsKICAgICAgICB0OS5maW5hbGl6ZSgpLCB2b2lkIDAgIT09IHQ5LmwgJiYgKHRoaXMubCA9IFsuLi50OS5sXSksIHRoaXMuZWxlbWVudFByb3BlcnRpZXMgPSBuZXcgTWFwKHQ5LmVsZW1lbnRQcm9wZXJ0aWVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemUoKSB7CiAgICAgICAgaWYgKHRoaXMuaGFzT3duUHJvcGVydHkoZCgiZmluYWxpemVkIikpKSByZXR1cm47CiAgICAgICAgaWYgKHRoaXMuZmluYWxpemVkID0gdHJ1ZSwgdGhpcy5fJEVpKCksIHRoaXMuaGFzT3duUHJvcGVydHkoZCgicHJvcGVydGllcyIpKSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5wcm9wZXJ0aWVzLCBzOSA9IFsuLi5yMih0MTApLCAuLi5vMih0MTApXTsKICAgICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5KSB0aGlzLmNyZWF0ZVByb3BlcnR5KGkxMSwgdDEwW2kxMV0pOwogICAgICAgIH0KICAgICAgICBjb25zdCB0OSA9IHRoaXNbU3ltYm9sLm1ldGFkYXRhXTsKICAgICAgICBpZiAobnVsbCAhPT0gdDkpIHsKICAgICAgICAgIGNvbnN0IHM5ID0gbGl0UHJvcGVydHlNZXRhZGF0YS5nZXQodDkpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gczkpIGZvciAoY29uc3QgW3QxMCwgaTExXSBvZiBzOSkgdGhpcy5lbGVtZW50UHJvcGVydGllcy5zZXQodDEwLCBpMTEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl8kRWggPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIGZvciAoY29uc3QgW3QxMCwgczldIG9mIHRoaXMuZWxlbWVudFByb3BlcnRpZXMpIHsKICAgICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRFdSh0MTAsIHM5KTsKICAgICAgICAgIHZvaWQgMCAhPT0gaTExICYmIHRoaXMuXyRFaC5zZXQoaTExLCB0MTApOwogICAgICAgIH0KICAgICAgICB0aGlzLmVsZW1lbnRTdHlsZXMgPSB0aGlzLmZpbmFsaXplU3R5bGVzKHRoaXMuc3R5bGVzKTsKICAgICAgfQogICAgICBzdGF0aWMgZmluYWxpemVTdHlsZXMoczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBbXTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShzOSkpIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IG5ldyBTZXQoczkuZmxhdCgxIC8gMCkucmV2ZXJzZSgpKTsKICAgICAgICAgIGZvciAoY29uc3QgczEwIG9mIGUxMSkgaTExLnVuc2hpZnQoYyhzMTApKTsKICAgICAgICB9IGVsc2Ugdm9pZCAwICE9PSBzOSAmJiBpMTEucHVzaChjKHM5KSk7CiAgICAgICAgcmV0dXJuIGkxMTsKICAgICAgfQogICAgICBzdGF0aWMgXyRFdSh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSBzOS5hdHRyaWJ1dGU7CiAgICAgICAgcmV0dXJuIGZhbHNlID09PSBpMTEgPyB2b2lkIDAgOiAic3RyaW5nIiA9PSB0eXBlb2YgaTExID8gaTExIDogInN0cmluZyIgPT0gdHlwZW9mIHQ5ID8gdDkudG9Mb3dlckNhc2UoKSA6IHZvaWQgMDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigpLCB0aGlzLl8kRXAgPSB2b2lkIDAsIHRoaXMuaXNVcGRhdGVQZW5kaW5nID0gZmFsc2UsIHRoaXMuaGFzVXBkYXRlZCA9IGZhbHNlLCB0aGlzLl8kRW0gPSBudWxsLCB0aGlzLl8kRXYoKTsKICAgICAgfQogICAgICBfJEV2KCkgewogICAgICAgIHRoaXMuXyRFUyA9IG5ldyBQcm9taXNlKCh0OSkgPT4gdGhpcy5lbmFibGVVcGRhdGluZyA9IHQ5KSwgdGhpcy5fJEFMID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgdGhpcy5fJEVfKCksIHRoaXMucmVxdWVzdFVwZGF0ZSgpLCB0aGlzLmNvbnN0cnVjdG9yLmw/LmZvckVhY2goKHQ5KSA9PiB0OSh0aGlzKSk7CiAgICAgIH0KICAgICAgYWRkQ29udHJvbGxlcih0OSkgewogICAgICAgICh0aGlzLl8kRU8gPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCkpLmFkZCh0OSksIHZvaWQgMCAhPT0gdGhpcy5yZW5kZXJSb290ICYmIHRoaXMuaXNDb25uZWN0ZWQgJiYgdDkuaG9zdENvbm5lY3RlZD8uKCk7CiAgICAgIH0KICAgICAgcmVtb3ZlQ29udHJvbGxlcih0OSkgewogICAgICAgIHRoaXMuXyRFTz8uZGVsZXRlKHQ5KTsKICAgICAgfQogICAgICBfJEVfKCkgewogICAgICAgIGNvbnN0IHQ5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgczkgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzOwogICAgICAgIGZvciAoY29uc3QgaTExIG9mIHM5LmtleXMoKSkgdGhpcy5oYXNPd25Qcm9wZXJ0eShpMTEpICYmICh0OS5zZXQoaTExLCB0aGlzW2kxMV0pLCBkZWxldGUgdGhpc1tpMTFdKTsKICAgICAgICB0OS5zaXplID4gMCAmJiAodGhpcy5fJEVwID0gdDkpOwogICAgICB9CiAgICAgIGNyZWF0ZVJlbmRlclJvb3QoKSB7CiAgICAgICAgY29uc3QgdDkgPSB0aGlzLnNoYWRvd1Jvb3QgPz8gdGhpcy5hdHRhY2hTaGFkb3codGhpcy5jb25zdHJ1Y3Rvci5zaGFkb3dSb290T3B0aW9ucyk7CiAgICAgICAgcmV0dXJuIFModDksIHRoaXMuY29uc3RydWN0b3IuZWxlbWVudFN0eWxlcyksIHQ5OwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMucmVuZGVyUm9vdCA/Pz0gdGhpcy5jcmVhdGVSZW5kZXJSb290KCksIHRoaXMuZW5hYmxlVXBkYXRpbmcodHJ1ZSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3RDb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBlbmFibGVVcGRhdGluZyh0OSkgewogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHRoaXMuXyRFTz8uZm9yRWFjaCgodDkpID0+IHQ5Lmhvc3REaXNjb25uZWN0ZWQ/LigpKTsKICAgICAgfQogICAgICBhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2sodDksIHM5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQUsodDksIGkxMSk7CiAgICAgIH0KICAgICAgXyRFVCh0OSwgczkpIHsKICAgICAgICBjb25zdCBpMTEgPSB0aGlzLmNvbnN0cnVjdG9yLmVsZW1lbnRQcm9wZXJ0aWVzLmdldCh0OSksIGUxMSA9IHRoaXMuY29uc3RydWN0b3IuXyRFdSh0OSwgaTExKTsKICAgICAgICBpZiAodm9pZCAwICE9PSBlMTEgJiYgdHJ1ZSA9PT0gaTExLnJlZmxlY3QpIHsKICAgICAgICAgIGNvbnN0IGg5ID0gKHZvaWQgMCAhPT0gaTExLmNvbnZlcnRlcj8udG9BdHRyaWJ1dGUgPyBpMTEuY29udmVydGVyIDogdSkudG9BdHRyaWJ1dGUoczksIGkxMS50eXBlKTsKICAgICAgICAgIHRoaXMuXyRFbSA9IHQ5LCBudWxsID09IGg5ID8gdGhpcy5yZW1vdmVBdHRyaWJ1dGUoZTExKSA6IHRoaXMuc2V0QXR0cmlidXRlKGUxMSwgaDkpLCB0aGlzLl8kRW0gPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFLKHQ5LCBzOSkgewogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuY29uc3RydWN0b3IsIGUxMSA9IGkxMS5fJEVoLmdldCh0OSk7CiAgICAgICAgaWYgKHZvaWQgMCAhPT0gZTExICYmIHRoaXMuXyRFbSAhPT0gZTExKSB7CiAgICAgICAgICBjb25zdCB0MTAgPSBpMTEuZ2V0UHJvcGVydHlPcHRpb25zKGUxMSksIGg5ID0gImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDEwLmNvbnZlcnRlciA/IHsgZnJvbUF0dHJpYnV0ZTogdDEwLmNvbnZlcnRlciB9IDogdm9pZCAwICE9PSB0MTAuY29udmVydGVyPy5mcm9tQXR0cmlidXRlID8gdDEwLmNvbnZlcnRlciA6IHU7CiAgICAgICAgICB0aGlzLl8kRW0gPSBlMTE7CiAgICAgICAgICBjb25zdCByMTEgPSBoOS5mcm9tQXR0cmlidXRlKHM5LCB0MTAudHlwZSk7CiAgICAgICAgICB0aGlzW2UxMV0gPSByMTEgPz8gdGhpcy5fJEVqPy5nZXQoZTExKSA/PyByMTEsIHRoaXMuXyRFbSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlcXVlc3RVcGRhdGUodDksIHM5LCBpMTEsIGUxMSA9IGZhbHNlLCBoOSkgewogICAgICAgIGlmICh2b2lkIDAgIT09IHQ5KSB7CiAgICAgICAgICBjb25zdCByMTEgPSB0aGlzLmNvbnN0cnVjdG9yOwogICAgICAgICAgaWYgKGZhbHNlID09PSBlMTEgJiYgKGg5ID0gdGhpc1t0OV0pLCBpMTEgPz89IHIxMS5nZXRQcm9wZXJ0eU9wdGlvbnModDkpLCAhKChpMTEuaGFzQ2hhbmdlZCA/PyBmKShoOSwgczkpIHx8IGkxMS51c2VEZWZhdWx0ICYmIGkxMS5yZWZsZWN0ICYmIGg5ID09PSB0aGlzLl8kRWo/LmdldCh0OSkgJiYgIXRoaXMuaGFzQXR0cmlidXRlKHIxMS5fJEV1KHQ5LCBpMTEpKSkpIHJldHVybjsKICAgICAgICAgIHRoaXMuQyh0OSwgczksIGkxMSk7CiAgICAgICAgfQogICAgICAgIGZhbHNlID09PSB0aGlzLmlzVXBkYXRlUGVuZGluZyAmJiAodGhpcy5fJEVTID0gdGhpcy5fJEVQKCkpOwogICAgICB9CiAgICAgIEModDksIHM5LCB7IHVzZURlZmF1bHQ6IGkxMSwgcmVmbGVjdDogZTExLCB3cmFwcGVkOiBoOSB9LCByMTEpIHsKICAgICAgICBpMTEgJiYgISh0aGlzLl8kRWogPz89IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCkpLmhhcyh0OSkgJiYgKHRoaXMuXyRFai5zZXQodDksIHIxMSA/PyBzOSA/PyB0aGlzW3Q5XSksIHRydWUgIT09IGg5IHx8IHZvaWQgMCAhPT0gcjExKSB8fCAodGhpcy5fJEFMLmhhcyh0OSkgfHwgKHRoaXMuaGFzVXBkYXRlZCB8fCBpMTEgfHwgKHM5ID0gdm9pZCAwKSwgdGhpcy5fJEFMLnNldCh0OSwgczkpKSwgdHJ1ZSA9PT0gZTExICYmIHRoaXMuXyRFbSAhPT0gdDkgJiYgKHRoaXMuXyRFcSA/Pz0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkuYWRkKHQ5KSk7CiAgICAgIH0KICAgICAgYXN5bmMgXyRFUCgpIHsKICAgICAgICB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IHRydWU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuXyRFUzsKICAgICAgICB9IGNhdGNoICh0MTApIHsKICAgICAgICAgIFByb21pc2UucmVqZWN0KHQxMCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHQ5ID0gdGhpcy5zY2hlZHVsZVVwZGF0ZSgpOwogICAgICAgIHJldHVybiBudWxsICE9IHQ5ICYmIGF3YWl0IHQ5LCAhdGhpcy5pc1VwZGF0ZVBlbmRpbmc7CiAgICAgIH0KICAgICAgc2NoZWR1bGVVcGRhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucGVyZm9ybVVwZGF0ZSgpOwogICAgICB9CiAgICAgIHBlcmZvcm1VcGRhdGUoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzVXBkYXRlUGVuZGluZykgcmV0dXJuOwogICAgICAgIGlmICghdGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgICBpZiAodGhpcy5yZW5kZXJSb290ID8/PSB0aGlzLmNyZWF0ZVJlbmRlclJvb3QoKSwgdGhpcy5fJEVwKSB7CiAgICAgICAgICAgIGZvciAoY29uc3QgW3QxMSwgczEwXSBvZiB0aGlzLl8kRXApIHRoaXNbdDExXSA9IHMxMDsKICAgICAgICAgICAgdGhpcy5fJEVwID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5jb25zdHJ1Y3Rvci5lbGVtZW50UHJvcGVydGllczsKICAgICAgICAgIGlmICh0MTAuc2l6ZSA+IDApIGZvciAoY29uc3QgW3MxMCwgaTExXSBvZiB0MTApIHsKICAgICAgICAgICAgY29uc3QgeyB3cmFwcGVkOiB0MTEgfSA9IGkxMSwgZTExID0gdGhpc1tzMTBdOwogICAgICAgICAgICB0cnVlICE9PSB0MTEgfHwgdGhpcy5fJEFMLmhhcyhzMTApIHx8IHZvaWQgMCA9PT0gZTExIHx8IHRoaXMuQyhzMTAsIHZvaWQgMCwgaTExLCBlMTEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgdDkgPSBmYWxzZTsKICAgICAgICBjb25zdCBzOSA9IHRoaXMuXyRBTDsKICAgICAgICB0cnkgewogICAgICAgICAgdDkgPSB0aGlzLnNob3VsZFVwZGF0ZShzOSksIHQ5ID8gKHRoaXMud2lsbFVwZGF0ZShzOSksIHRoaXMuXyRFTz8uZm9yRWFjaCgodDEwKSA9PiB0MTAuaG9zdFVwZGF0ZT8uKCkpLCB0aGlzLnVwZGF0ZShzOSkpIDogdGhpcy5fJEVNKCk7CiAgICAgICAgfSBjYXRjaCAoczEwKSB7CiAgICAgICAgICB0aHJvdyB0OSA9IGZhbHNlLCB0aGlzLl8kRU0oKSwgczEwOwogICAgICAgIH0KICAgICAgICB0OSAmJiB0aGlzLl8kQUUoczkpOwogICAgICB9CiAgICAgIHdpbGxVcGRhdGUodDkpIHsKICAgICAgfQogICAgICBfJEFFKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVPPy5mb3JFYWNoKCh0MTApID0+IHQxMC5ob3N0VXBkYXRlZD8uKCkpLCB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMuaGFzVXBkYXRlZCA9IHRydWUsIHRoaXMuZmlyc3RVcGRhdGVkKHQ5KSksIHRoaXMudXBkYXRlZCh0OSk7CiAgICAgIH0KICAgICAgXyRFTSgpIHsKICAgICAgICB0aGlzLl8kQUwgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCB0aGlzLmlzVXBkYXRlUGVuZGluZyA9IGZhbHNlOwogICAgICB9CiAgICAgIGdldCB1cGRhdGVDb21wbGV0ZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRVcGRhdGVDb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGdldFVwZGF0ZUNvbXBsZXRlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kRVM7CiAgICAgIH0KICAgICAgc2hvdWxkVXBkYXRlKHQ5KSB7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgdGhpcy5fJEVxICYmPSB0aGlzLl8kRXEuZm9yRWFjaCgodDEwKSA9PiB0aGlzLl8kRVQodDEwLCB0aGlzW3QxMF0pKSwgdGhpcy5fJEVNKCk7CiAgICAgIH0KICAgICAgdXBkYXRlZCh0OSkgewogICAgICB9CiAgICAgIGZpcnN0VXBkYXRlZCh0OSkgewogICAgICB9CiAgICB9OwogICAgeS5lbGVtZW50U3R5bGVzID0gW10sIHkuc2hhZG93Um9vdE9wdGlvbnMgPSB7IG1vZGU6ICJvcGVuIiB9LCB5W2QoImVsZW1lbnRQcm9wZXJ0aWVzIildID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgeVtkKCJmaW5hbGl6ZWQiKV0gPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBwPy4oeyBSZWFjdGl2ZUVsZW1lbnQ6IHkgfSksIChhLnJlYWN0aXZlRWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiMi4xLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcwpmdW5jdGlvbiBWKHQ5LCBpMTEpIHsKICBpZiAoIXUyKHQ5KSB8fCAhdDkuaGFzT3duUHJvcGVydHkoInJhdyIpKSB0aHJvdyBFcnJvcigiaW52YWxpZCB0ZW1wbGF0ZSBzdHJpbmdzIGFycmF5Iik7CiAgcmV0dXJuIHZvaWQgMCAhPT0gZTMgPyBlMy5jcmVhdGVIVE1MKGkxMSkgOiBpMTE7Cn0KZnVuY3Rpb24gTSh0OSwgaTExLCBzOSA9IHQ5LCBlMTEpIHsKICBpZiAoaTExID09PSBFKSByZXR1cm4gaTExOwogIGxldCBoOSA9IHZvaWQgMCAhPT0gZTExID8gczkuXyRDbz8uW2UxMV0gOiBzOS5fJENsOwogIGNvbnN0IG8xMyA9IGEyKGkxMSkgPyB2b2lkIDAgOiBpMTEuXyRsaXREaXJlY3RpdmUkOwogIHJldHVybiBoOT8uY29uc3RydWN0b3IgIT09IG8xMyAmJiAoaDk/Ll8kQU8/LihmYWxzZSksIHZvaWQgMCA9PT0gbzEzID8gaDkgPSB2b2lkIDAgOiAoaDkgPSBuZXcgbzEzKHQ5KSwgaDkuXyRBVCh0OSwgczksIGUxMSkpLCB2b2lkIDAgIT09IGUxMSA/IChzOS5fJENvID8/PSBbXSlbZTExXSA9IGg5IDogczkuXyRDbCA9IGg5KSwgdm9pZCAwICE9PSBoOSAmJiAoaTExID0gTSh0OSwgaDkuXyRBUyh0OSwgaTExLnZhbHVlcyksIGg5LCBlMTEpKSwgaTExOwp9CnZhciB0MiwgaTMsIHMyLCBlMywgaDIsIG8zLCBuMywgcjMsIGwyLCBjMywgYTIsIHUyLCBkMiwgZjIsIHYsIF8sIG0sIHAyLCBnLCAkLCB5MiwgeCwgYjIsIHcsIFQsIEUsIEEsIEMsIFAsIE4sIFMyLCBSLCBrLCBILCBJLCBMLCB6LCBaLCBqLCBCLCBEOwp2YXIgaW5pdF9saXRfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9saXQtaHRtbC5qcyIoKSB7CiAgICB0MiA9IGdsb2JhbFRoaXMsIGkzID0gKHQ5KSA9PiB0OSwgczIgPSB0Mi50cnVzdGVkVHlwZXMsIGUzID0gczIgPyBzMi5jcmVhdGVQb2xpY3koImxpdC1odG1sIiwgeyBjcmVhdGVIVE1MOiAodDkpID0+IHQ5IH0pIDogdm9pZCAwLCBoMiA9ICIkbGl0JCIsIG8zID0gYGxpdCQke01hdGgucmFuZG9tKCkudG9GaXhlZCg5KS5zbGljZSgyKX0kYCwgbjMgPSAiPyIgKyBvMywgcjMgPSBgPCR7bjN9PmAsIGwyID0gZG9jdW1lbnQsIGMzID0gKCkgPT4gbDIuY3JlYXRlQ29tbWVudCgiIiksIGEyID0gKHQ5KSA9PiBudWxsID09PSB0OSB8fCAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgdDksIHUyID0gQXJyYXkuaXNBcnJheSwgZDIgPSAodDkpID0+IHUyKHQ5KSB8fCAiZnVuY3Rpb24iID09IHR5cGVvZiB0OT8uW1N5bWJvbC5pdGVyYXRvcl0sIGYyID0gIlsgCVxuXGZccl0iLCB2ID0gLzwoPzooIS0tfFwvW15hLXpBLVpdKXwoXC8/W2EtekEtWl1bXj5cc10qKXwoXC8/JCkpL2csIF8gPSAvLS0+L2csIG0gPSAvPi9nLCBwMiA9IFJlZ0V4cChgPnwke2YyfSg/OihbXlxccyInPj0vXSspKCR7ZjJ9Kj0ke2YyfSooPzpbXiAJClxmXHIiJ1xgPD49XXwoInwnKXwpKXwkKWAsICJnIiksIGcgPSAvJy9nLCAkID0gLyIvZywgeTIgPSAvXig/OnNjcmlwdHxzdHlsZXx0ZXh0YXJlYXx0aXRsZSkkL2ksIHggPSAodDkpID0+IChpMTEsIC4uLnM5KSA9PiAoeyBfJGxpdFR5cGUkOiB0OSwgc3RyaW5nczogaTExLCB2YWx1ZXM6IHM5IH0pLCBiMiA9IHgoMSksIHcgPSB4KDIpLCBUID0geCgzKSwgRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm9DaGFuZ2UiKSwgQSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCJsaXQtbm90aGluZyIpLCBDID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCksIFAgPSBsMi5jcmVhdGVUcmVlV2Fsa2VyKGwyLCAxMjkpOwogICAgTiA9ICh0OSwgaTExKSA9PiB7CiAgICAgIGNvbnN0IHM5ID0gdDkubGVuZ3RoIC0gMSwgZTExID0gW107CiAgICAgIGxldCBuMTMsIGw2ID0gMiA9PT0gaTExID8gIjxzdmc+IiA6IDMgPT09IGkxMSA/ICI8bWF0aD4iIDogIiIsIGMxMSA9IHY7CiAgICAgIGZvciAobGV0IGkxMiA9IDA7IGkxMiA8IHM5OyBpMTIrKykgewogICAgICAgIGNvbnN0IHMxMCA9IHQ5W2kxMl07CiAgICAgICAgbGV0IGE1LCB1NywgZDYgPSAtMSwgZjcgPSAwOwogICAgICAgIGZvciAoOyBmNyA8IHMxMC5sZW5ndGggJiYgKGMxMS5sYXN0SW5kZXggPSBmNywgdTcgPSBjMTEuZXhlYyhzMTApLCBudWxsICE9PSB1Nyk7ICkgZjcgPSBjMTEubGFzdEluZGV4LCBjMTEgPT09IHYgPyAiIS0tIiA9PT0gdTdbMV0gPyBjMTEgPSBfIDogdm9pZCAwICE9PSB1N1sxXSA/IGMxMSA9IG0gOiB2b2lkIDAgIT09IHU3WzJdID8gKHkyLnRlc3QodTdbMl0pICYmIChuMTMgPSBSZWdFeHAoIjwvIiArIHU3WzJdLCAiZyIpKSwgYzExID0gcDIpIDogdm9pZCAwICE9PSB1N1szXSAmJiAoYzExID0gcDIpIDogYzExID09PSBwMiA/ICI+IiA9PT0gdTdbMF0gPyAoYzExID0gbjEzID8/IHYsIGQ2ID0gLTEpIDogdm9pZCAwID09PSB1N1sxXSA/IGQ2ID0gLTIgOiAoZDYgPSBjMTEubGFzdEluZGV4IC0gdTdbMl0ubGVuZ3RoLCBhNSA9IHU3WzFdLCBjMTEgPSB2b2lkIDAgPT09IHU3WzNdID8gcDIgOiAnIicgPT09IHU3WzNdID8gJCA6IGcpIDogYzExID09PSAkIHx8IGMxMSA9PT0gZyA/IGMxMSA9IHAyIDogYzExID09PSBfIHx8IGMxMSA9PT0gbSA/IGMxMSA9IHYgOiAoYzExID0gcDIsIG4xMyA9IHZvaWQgMCk7CiAgICAgICAgY29uc3QgeDMgPSBjMTEgPT09IHAyICYmIHQ5W2kxMiArIDFdLnN0YXJ0c1dpdGgoIi8+IikgPyAiICIgOiAiIjsKICAgICAgICBsNiArPSBjMTEgPT09IHYgPyBzMTAgKyByMyA6IGQ2ID49IDAgPyAoZTExLnB1c2goYTUpLCBzMTAuc2xpY2UoMCwgZDYpICsgaDIgKyBzMTAuc2xpY2UoZDYpICsgbzMgKyB4MykgOiBzMTAgKyBvMyArICgtMiA9PT0gZDYgPyBpMTIgOiB4Myk7CiAgICAgIH0KICAgICAgcmV0dXJuIFtWKHQ5LCBsNiArICh0OVtzOV0gfHwgIjw/PiIpICsgKDIgPT09IGkxMSA/ICI8L3N2Zz4iIDogMyA9PT0gaTExID8gIjwvbWF0aD4iIDogIiIpKSwgZTExXTsKICAgIH07CiAgICBTMiA9IGNsYXNzIF9TIHsKICAgICAgY29uc3RydWN0b3IoeyBzdHJpbmdzOiB0OSwgXyRsaXRUeXBlJDogaTExIH0sIGUxMSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdGhpcy5wYXJ0cyA9IFtdOwogICAgICAgIGxldCBsNiA9IDAsIGE1ID0gMDsKICAgICAgICBjb25zdCB1NyA9IHQ5Lmxlbmd0aCAtIDEsIGQ2ID0gdGhpcy5wYXJ0cywgW2Y3LCB2NV0gPSBOKHQ5LCBpMTEpOwogICAgICAgIGlmICh0aGlzLmVsID0gX1MuY3JlYXRlRWxlbWVudChmNywgZTExKSwgUC5jdXJyZW50Tm9kZSA9IHRoaXMuZWwuY29udGVudCwgMiA9PT0gaTExIHx8IDMgPT09IGkxMSkgewogICAgICAgICAgY29uc3QgdDEwID0gdGhpcy5lbC5jb250ZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgICB0MTAucmVwbGFjZVdpdGgoLi4udDEwLmNoaWxkTm9kZXMpOwogICAgICAgIH0KICAgICAgICBmb3IgKDsgbnVsbCAhPT0gKHIxMSA9IFAubmV4dE5vZGUoKSkgJiYgZDYubGVuZ3RoIDwgdTc7ICkgewogICAgICAgICAgaWYgKDEgPT09IHIxMS5ub2RlVHlwZSkgewogICAgICAgICAgICBpZiAocjExLmhhc0F0dHJpYnV0ZXMoKSkgZm9yIChjb25zdCB0MTAgb2YgcjExLmdldEF0dHJpYnV0ZU5hbWVzKCkpIGlmICh0MTAuZW5kc1dpdGgoaDIpKSB7CiAgICAgICAgICAgICAgY29uc3QgaTEyID0gdjVbYTUrK10sIHM5ID0gcjExLmdldEF0dHJpYnV0ZSh0MTApLnNwbGl0KG8zKSwgZTEyID0gLyhbLj9AXSk/KC4qKS8uZXhlYyhpMTIpOwogICAgICAgICAgICAgIGQ2LnB1c2goeyB0eXBlOiAxLCBpbmRleDogbDYsIG5hbWU6IGUxMlsyXSwgc3RyaW5nczogczksIGN0b3I6ICIuIiA9PT0gZTEyWzFdID8gSSA6ICI/IiA9PT0gZTEyWzFdID8gTCA6ICJAIiA9PT0gZTEyWzFdID8geiA6IEggfSksIHIxMS5yZW1vdmVBdHRyaWJ1dGUodDEwKTsKICAgICAgICAgICAgfSBlbHNlIHQxMC5zdGFydHNXaXRoKG8zKSAmJiAoZDYucHVzaCh7IHR5cGU6IDYsIGluZGV4OiBsNiB9KSwgcjExLnJlbW92ZUF0dHJpYnV0ZSh0MTApKTsKICAgICAgICAgICAgaWYgKHkyLnRlc3QocjExLnRhZ05hbWUpKSB7CiAgICAgICAgICAgICAgY29uc3QgdDEwID0gcjExLnRleHRDb250ZW50LnNwbGl0KG8zKSwgaTEyID0gdDEwLmxlbmd0aCAtIDE7CiAgICAgICAgICAgICAgaWYgKGkxMiA+IDApIHsKICAgICAgICAgICAgICAgIHIxMS50ZXh0Q29udGVudCA9IHMyID8gczIuZW1wdHlTY3JpcHQgOiAiIjsKICAgICAgICAgICAgICAgIGZvciAobGV0IHM5ID0gMDsgczkgPCBpMTI7IHM5KyspIHIxMS5hcHBlbmQodDEwW3M5XSwgYzMoKSksIFAubmV4dE5vZGUoKSwgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiArK2w2IH0pOwogICAgICAgICAgICAgICAgcjExLmFwcGVuZCh0MTBbaTEyXSwgYzMoKSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKDggPT09IHIxMS5ub2RlVHlwZSkgaWYgKHIxMS5kYXRhID09PSBuMykgZDYucHVzaCh7IHR5cGU6IDIsIGluZGV4OiBsNiB9KTsKICAgICAgICAgIGVsc2UgewogICAgICAgICAgICBsZXQgdDEwID0gLTE7CiAgICAgICAgICAgIGZvciAoOyAtMSAhPT0gKHQxMCA9IHIxMS5kYXRhLmluZGV4T2YobzMsIHQxMCArIDEpKTsgKSBkNi5wdXNoKHsgdHlwZTogNywgaW5kZXg6IGw2IH0pLCB0MTAgKz0gbzMubGVuZ3RoIC0gMTsKICAgICAgICAgIH0KICAgICAgICAgIGw2Kys7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVFbGVtZW50KHQ5LCBpMTEpIHsKICAgICAgICBjb25zdCBzOSA9IGwyLmNyZWF0ZUVsZW1lbnQoInRlbXBsYXRlIik7CiAgICAgICAgcmV0dXJuIHM5LmlubmVySFRNTCA9IHQ5LCBzOTsKICAgICAgfQogICAgfTsKICAgIFIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLl8kQVYgPSBbXSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUQgPSB0OSwgdGhpcy5fJEFNID0gaTExOwogICAgICB9CiAgICAgIGdldCBwYXJlbnROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQU0ucGFyZW50Tm9kZTsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgdSh0OSkgewogICAgICAgIGNvbnN0IHsgZWw6IHsgY29udGVudDogaTExIH0sIHBhcnRzOiBzOSB9ID0gdGhpcy5fJEFELCBlMTEgPSAodDk/LmNyZWF0aW9uU2NvcGUgPz8gbDIpLmltcG9ydE5vZGUoaTExLCB0cnVlKTsKICAgICAgICBQLmN1cnJlbnROb2RlID0gZTExOwogICAgICAgIGxldCBoOSA9IFAubmV4dE5vZGUoKSwgbzEzID0gMCwgbjEzID0gMCwgcjExID0gczlbMF07CiAgICAgICAgZm9yICg7IHZvaWQgMCAhPT0gcjExOyApIHsKICAgICAgICAgIGlmIChvMTMgPT09IHIxMS5pbmRleCkgewogICAgICAgICAgICBsZXQgaTEyOwogICAgICAgICAgICAyID09PSByMTEudHlwZSA/IGkxMiA9IG5ldyBrKGg5LCBoOS5uZXh0U2libGluZywgdGhpcywgdDkpIDogMSA9PT0gcjExLnR5cGUgPyBpMTIgPSBuZXcgcjExLmN0b3IoaDksIHIxMS5uYW1lLCByMTEuc3RyaW5ncywgdGhpcywgdDkpIDogNiA9PT0gcjExLnR5cGUgJiYgKGkxMiA9IG5ldyBaKGg5LCB0aGlzLCB0OSkpLCB0aGlzLl8kQVYucHVzaChpMTIpLCByMTEgPSBzOVsrK24xM107CiAgICAgICAgICB9CiAgICAgICAgICBvMTMgIT09IHIxMT8uaW5kZXggJiYgKGg5ID0gUC5uZXh0Tm9kZSgpLCBvMTMrKyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBQLmN1cnJlbnROb2RlID0gbDIsIGUxMTsKICAgICAgfQogICAgICBwKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzOSBvZiB0aGlzLl8kQVYpIHZvaWQgMCAhPT0gczkgJiYgKHZvaWQgMCAhPT0gczkuc3RyaW5ncyA/IChzOS5fJEFJKHQ5LCBzOSwgaTExKSwgaTExICs9IHM5LnN0cmluZ3MubGVuZ3RoIC0gMikgOiBzOS5fJEFJKHQ5W2kxMV0pKSwgaTExKys7CiAgICAgIH0KICAgIH07CiAgICBrID0gY2xhc3MgX2sgewogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNPy5fJEFVID8/IHRoaXMuXyRDdjsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSwgZTExKSB7CiAgICAgICAgdGhpcy50eXBlID0gMiwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLl8kQUEgPSB0OSwgdGhpcy5fJEFCID0gaTExLCB0aGlzLl8kQU0gPSBzOSwgdGhpcy5vcHRpb25zID0gZTExLCB0aGlzLl8kQ3YgPSBlMTE/LmlzQ29ubmVjdGVkID8/IHRydWU7CiAgICAgIH0KICAgICAgZ2V0IHBhcmVudE5vZGUoKSB7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5fJEFBLnBhcmVudE5vZGU7CiAgICAgICAgY29uc3QgaTExID0gdGhpcy5fJEFNOwogICAgICAgIHJldHVybiB2b2lkIDAgIT09IGkxMSAmJiAxMSA9PT0gdDk/Lm5vZGVUeXBlICYmICh0OSA9IGkxMS5wYXJlbnROb2RlKSwgdDk7CiAgICAgIH0KICAgICAgZ2V0IHN0YXJ0Tm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBOwogICAgICB9CiAgICAgIGdldCBlbmROb2RlKCkgewogICAgICAgIHJldHVybiB0aGlzLl8kQUI7CiAgICAgIH0KICAgICAgXyRBSSh0OSwgaTExID0gdGhpcykgewogICAgICAgIHQ5ID0gTSh0aGlzLCB0OSwgaTExKSwgYTIodDkpID8gdDkgPT09IEEgfHwgbnVsbCA9PSB0OSB8fCAiIiA9PT0gdDkgPyAodGhpcy5fJEFIICE9PSBBICYmIHRoaXMuXyRBUigpLCB0aGlzLl8kQUggPSBBKSA6IHQ5ICE9PSB0aGlzLl8kQUggJiYgdDkgIT09IEUgJiYgdGhpcy5fKHQ5KSA6IHZvaWQgMCAhPT0gdDkuXyRsaXRUeXBlJCA/IHRoaXMuJCh0OSkgOiB2b2lkIDAgIT09IHQ5Lm5vZGVUeXBlID8gdGhpcy5UKHQ5KSA6IGQyKHQ5KSA/IHRoaXMuayh0OSkgOiB0aGlzLl8odDkpOwogICAgICB9CiAgICAgIE8odDkpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFBLnBhcmVudE5vZGUuaW5zZXJ0QmVmb3JlKHQ5LCB0aGlzLl8kQUIpOwogICAgICB9CiAgICAgIFQodDkpIHsKICAgICAgICB0aGlzLl8kQUggIT09IHQ5ICYmICh0aGlzLl8kQVIoKSwgdGhpcy5fJEFIID0gdGhpcy5PKHQ5KSk7CiAgICAgIH0KICAgICAgXyh0OSkgewogICAgICAgIHRoaXMuXyRBSCAhPT0gQSAmJiBhMih0aGlzLl8kQUgpID8gdGhpcy5fJEFBLm5leHRTaWJsaW5nLmRhdGEgPSB0OSA6IHRoaXMuVChsMi5jcmVhdGVUZXh0Tm9kZSh0OSkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICAkKHQ5KSB7CiAgICAgICAgY29uc3QgeyB2YWx1ZXM6IGkxMSwgXyRsaXRUeXBlJDogczkgfSA9IHQ5LCBlMTEgPSAibnVtYmVyIiA9PSB0eXBlb2YgczkgPyB0aGlzLl8kQUModDkpIDogKHZvaWQgMCA9PT0gczkuZWwgJiYgKHM5LmVsID0gUzIuY3JlYXRlRWxlbWVudChWKHM5LmgsIHM5LmhbMF0pLCB0aGlzLm9wdGlvbnMpKSwgczkpOwogICAgICAgIGlmICh0aGlzLl8kQUg/Ll8kQUQgPT09IGUxMSkgdGhpcy5fJEFILnAoaTExKTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IHQxMCA9IG5ldyBSKGUxMSwgdGhpcyksIHMxMCA9IHQxMC51KHRoaXMub3B0aW9ucyk7CiAgICAgICAgICB0MTAucChpMTEpLCB0aGlzLlQoczEwKSwgdGhpcy5fJEFIID0gdDEwOwogICAgICAgIH0KICAgICAgfQogICAgICBfJEFDKHQ5KSB7CiAgICAgICAgbGV0IGkxMSA9IEMuZ2V0KHQ5LnN0cmluZ3MpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IGkxMSAmJiBDLnNldCh0OS5zdHJpbmdzLCBpMTEgPSBuZXcgUzIodDkpKSwgaTExOwogICAgICB9CiAgICAgIGsodDkpIHsKICAgICAgICB1Mih0aGlzLl8kQUgpIHx8ICh0aGlzLl8kQUggPSBbXSwgdGhpcy5fJEFSKCkpOwogICAgICAgIGNvbnN0IGkxMSA9IHRoaXMuXyRBSDsKICAgICAgICBsZXQgczksIGUxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBoOSBvZiB0OSkgZTExID09PSBpMTEubGVuZ3RoID8gaTExLnB1c2goczkgPSBuZXcgX2sodGhpcy5PKGMzKCkpLCB0aGlzLk8oYzMoKSksIHRoaXMsIHRoaXMub3B0aW9ucykpIDogczkgPSBpMTFbZTExXSwgczkuXyRBSShoOSksIGUxMSsrOwogICAgICAgIGUxMSA8IGkxMS5sZW5ndGggJiYgKHRoaXMuXyRBUihzOSAmJiBzOS5fJEFCLm5leHRTaWJsaW5nLCBlMTEpLCBpMTEubGVuZ3RoID0gZTExKTsKICAgICAgfQogICAgICBfJEFSKHQ5ID0gdGhpcy5fJEFBLm5leHRTaWJsaW5nLCBzOSkgewogICAgICAgIGZvciAodGhpcy5fJEFQPy4oZmFsc2UsIHRydWUsIHM5KTsgdDkgIT09IHRoaXMuXyRBQjsgKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMyh0OSkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpMyh0OSkucmVtb3ZlKCksIHQ5ID0gczEwOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRDb25uZWN0ZWQodDkpIHsKICAgICAgICB2b2lkIDAgPT09IHRoaXMuXyRBTSAmJiAodGhpcy5fJEN2ID0gdDksIHRoaXMuXyRBUD8uKHQ5KSk7CiAgICAgIH0KICAgIH07CiAgICBIID0gY2xhc3MgewogICAgICBnZXQgdGFnTmFtZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5lbGVtZW50LnRhZ05hbWU7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgdGhpcy50eXBlID0gMSwgdGhpcy5fJEFIID0gQSwgdGhpcy5fJEFOID0gdm9pZCAwLCB0aGlzLmVsZW1lbnQgPSB0OSwgdGhpcy5uYW1lID0gaTExLCB0aGlzLl8kQU0gPSBlMTEsIHRoaXMub3B0aW9ucyA9IGg5LCBzOS5sZW5ndGggPiAyIHx8ICIiICE9PSBzOVswXSB8fCAiIiAhPT0gczlbMV0gPyAodGhpcy5fJEFIID0gQXJyYXkoczkubGVuZ3RoIC0gMSkuZmlsbChuZXcgU3RyaW5nKCkpLCB0aGlzLnN0cmluZ3MgPSBzOSkgOiB0aGlzLl8kQUggPSBBOwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMsIHM5LCBlMTEpIHsKICAgICAgICBjb25zdCBoOSA9IHRoaXMuc3RyaW5nczsKICAgICAgICBsZXQgbzEzID0gZmFsc2U7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSwgbzEzID0gIWEyKHQ5KSB8fCB0OSAhPT0gdGhpcy5fJEFIICYmIHQ5ICE9PSBFLCBvMTMgJiYgKHRoaXMuXyRBSCA9IHQ5KTsKICAgICAgICBlbHNlIHsKICAgICAgICAgIGNvbnN0IGUxMiA9IHQ5OwogICAgICAgICAgbGV0IG4xMywgcjExOwogICAgICAgICAgZm9yICh0OSA9IGg5WzBdLCBuMTMgPSAwOyBuMTMgPCBoOS5sZW5ndGggLSAxOyBuMTMrKykgcjExID0gTSh0aGlzLCBlMTJbczkgKyBuMTNdLCBpMTEsIG4xMyksIHIxMSA9PT0gRSAmJiAocjExID0gdGhpcy5fJEFIW24xM10pLCBvMTMgfHw9ICFhMihyMTEpIHx8IHIxMSAhPT0gdGhpcy5fJEFIW24xM10sIHIxMSA9PT0gQSA/IHQ5ID0gQSA6IHQ5ICE9PSBBICYmICh0OSArPSAocjExID8/ICIiKSArIGg5W24xMyArIDFdKSwgdGhpcy5fJEFIW24xM10gPSByMTE7CiAgICAgICAgfQogICAgICAgIG8xMyAmJiAhZTExICYmIHRoaXMuaih0OSk7CiAgICAgIH0KICAgICAgaih0OSkgewogICAgICAgIHQ5ID09PSBBID8gdGhpcy5lbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSh0aGlzLm5hbWUpIDogdGhpcy5lbGVtZW50LnNldEF0dHJpYnV0ZSh0aGlzLm5hbWUsIHQ5ID8/ICIiKTsKICAgICAgfQogICAgfTsKICAgIEkgPSBjbGFzcyBleHRlbmRzIEggewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLnR5cGUgPSAzOwogICAgICB9CiAgICAgIGoodDkpIHsKICAgICAgICB0aGlzLmVsZW1lbnRbdGhpcy5uYW1lXSA9IHQ5ID09PSBBID8gdm9pZCAwIDogdDk7CiAgICAgIH0KICAgIH07CiAgICBMID0gY2xhc3MgZXh0ZW5kcyBIIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy50eXBlID0gNDsKICAgICAgfQogICAgICBqKHQ5KSB7CiAgICAgICAgdGhpcy5lbGVtZW50LnRvZ2dsZUF0dHJpYnV0ZSh0aGlzLm5hbWUsICEhdDkgJiYgdDkgIT09IEEpOwogICAgICB9CiAgICB9OwogICAgeiA9IGNsYXNzIGV4dGVuZHMgSCB7CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBpMTEsIHM5LCBlMTEsIGg5KSB7CiAgICAgICAgc3VwZXIodDksIGkxMSwgczksIGUxMSwgaDkpLCB0aGlzLnR5cGUgPSA1OwogICAgICB9CiAgICAgIF8kQUkodDksIGkxMSA9IHRoaXMpIHsKICAgICAgICBpZiAoKHQ5ID0gTSh0aGlzLCB0OSwgaTExLCAwKSA/PyBBKSA9PT0gRSkgcmV0dXJuOwogICAgICAgIGNvbnN0IHM5ID0gdGhpcy5fJEFILCBlMTEgPSB0OSA9PT0gQSAmJiBzOSAhPT0gQSB8fCB0OS5jYXB0dXJlICE9PSBzOS5jYXB0dXJlIHx8IHQ5Lm9uY2UgIT09IHM5Lm9uY2UgfHwgdDkucGFzc2l2ZSAhPT0gczkucGFzc2l2ZSwgaDkgPSB0OSAhPT0gQSAmJiAoczkgPT09IEEgfHwgZTExKTsKICAgICAgICBlMTEgJiYgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy5uYW1lLCB0aGlzLCBzOSksIGg5ICYmIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKHRoaXMubmFtZSwgdGhpcywgdDkpLCB0aGlzLl8kQUggPSB0OTsKICAgICAgfQogICAgICBoYW5kbGVFdmVudCh0OSkgewogICAgICAgICJmdW5jdGlvbiIgPT0gdHlwZW9mIHRoaXMuXyRBSCA/IHRoaXMuXyRBSC5jYWxsKHRoaXMub3B0aW9ucz8uaG9zdCA/PyB0aGlzLmVsZW1lbnQsIHQ5KSA6IHRoaXMuXyRBSC5oYW5kbGVFdmVudCh0OSk7CiAgICAgIH0KICAgIH07CiAgICBaID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSwgaTExLCBzOSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IHQ5LCB0aGlzLnR5cGUgPSA2LCB0aGlzLl8kQU4gPSB2b2lkIDAsIHRoaXMuXyRBTSA9IGkxMSwgdGhpcy5vcHRpb25zID0gczk7CiAgICAgIH0KICAgICAgZ2V0IF8kQVUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuXyRBTS5fJEFVOwogICAgICB9CiAgICAgIF8kQUkodDkpIHsKICAgICAgICBNKHRoaXMsIHQ5KTsKICAgICAgfQogICAgfTsKICAgIGogPSB7IE06IGgyLCBQOiBvMywgQTogbjMsIEM6IDEsIEw6IE4sIFIsIEQ6IGQyLCBWOiBNLCBJOiBrLCBILCBOOiBMLCBVOiB6LCBCOiBJLCBGOiBaIH0sIEIgPSB0Mi5saXRIdG1sUG9seWZpbGxTdXBwb3J0OwogICAgQj8uKFMyLCBrKSwgKHQyLmxpdEh0bWxWZXJzaW9ucyA/Pz0gW10pLnB1c2goIjMuMy4yIik7CiAgICBEID0gKHQ5LCBpMTEsIHM5KSA9PiB7CiAgICAgIGNvbnN0IGUxMSA9IHM5Py5yZW5kZXJCZWZvcmUgPz8gaTExOwogICAgICBsZXQgaDkgPSBlMTEuXyRsaXRQYXJ0JDsKICAgICAgaWYgKHZvaWQgMCA9PT0gaDkpIHsKICAgICAgICBjb25zdCB0MTAgPSBzOT8ucmVuZGVyQmVmb3JlID8/IG51bGw7CiAgICAgICAgZTExLl8kbGl0UGFydCQgPSBoOSA9IG5ldyBrKGkxMS5pbnNlcnRCZWZvcmUoYzMoKSwgdDEwKSwgdDEwLCB2b2lkIDAsIHM5ID8/IHt9KTsKICAgICAgfQogICAgICByZXR1cm4gaDkuXyRBSSh0OSksIGg5OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1lbGVtZW50QDQuMi4yL25vZGVfbW9kdWxlcy9saXQtZWxlbWVudC9saXQtZWxlbWVudC5qcwp2YXIgczMsIGk0LCBvNCwgbjQ7CnZhciBpbml0X2xpdF9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWVsZW1lbnRANC4yLjIvbm9kZV9tb2R1bGVzL2xpdC1lbGVtZW50L2xpdC1lbGVtZW50LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgaW5pdF9yZWFjdGl2ZV9lbGVtZW50KCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBzMyA9IGdsb2JhbFRoaXM7CiAgICBpNCA9IGNsYXNzIGV4dGVuZHMgeSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMucmVuZGVyT3B0aW9ucyA9IHsgaG9zdDogdGhpcyB9LCB0aGlzLl8kRG8gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgY3JlYXRlUmVuZGVyUm9vdCgpIHsKICAgICAgICBjb25zdCB0OSA9IHN1cGVyLmNyZWF0ZVJlbmRlclJvb3QoKTsKICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJPcHRpb25zLnJlbmRlckJlZm9yZSA/Pz0gdDkuZmlyc3RDaGlsZCwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHQ5KSB7CiAgICAgICAgY29uc3QgcjExID0gdGhpcy5yZW5kZXIoKTsKICAgICAgICB0aGlzLmhhc1VwZGF0ZWQgfHwgKHRoaXMucmVuZGVyT3B0aW9ucy5pc0Nvbm5lY3RlZCA9IHRoaXMuaXNDb25uZWN0ZWQpLCBzdXBlci51cGRhdGUodDkpLCB0aGlzLl8kRG8gPSBEKHIxMSwgdGhpcy5yZW5kZXJSb290LCB0aGlzLnJlbmRlck9wdGlvbnMpOwogICAgICB9CiAgICAgIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKHRydWUpOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgIHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCksIHRoaXMuXyREbz8uc2V0Q29ubmVjdGVkKGZhbHNlKTsKICAgICAgfQogICAgICByZW5kZXIoKSB7CiAgICAgICAgcmV0dXJuIEU7CiAgICAgIH0KICAgIH07CiAgICBpNC5fJGxpdEVsZW1lbnQkID0gdHJ1ZSwgaTRbImZpbmFsaXplZCJdID0gdHJ1ZSwgczMubGl0RWxlbWVudEh5ZHJhdGVTdXBwb3J0Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG80ID0gczMubGl0RWxlbWVudFBvbHlmaWxsU3VwcG9ydDsKICAgIG80Py4oeyBMaXRFbGVtZW50OiBpNCB9KTsKICAgIG40ID0geyBfJEFLOiAodDksIGUxMSwgcjExKSA9PiB7CiAgICAgIHQ5Ll8kQUsoZTExLCByMTEpOwogICAgfSwgXyRBTDogKHQ5KSA9PiB0OS5fJEFMIH07CiAgICAoczMubGl0RWxlbWVudFZlcnNpb25zID8/PSBbXSkucHVzaCgiNC4yLjIiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9pcy1zZXJ2ZXIuanMKdmFyIG81Owp2YXIgaW5pdF9pc19zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvaXMtc2VydmVyLmpzIigpIHsKICAgIG81ID0gZmFsc2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcwp2YXIgaW5pdF9saXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X3JlYWN0aXZlX2VsZW1lbnQoKTsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfbGl0X2VsZW1lbnQoKTsKICAgIGluaXRfaXNfc2VydmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcytpc291bmlxdWVAMS4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2lzb3VuaXF1ZS9kaXN0X3RzL2luZGV4LmpzCnZhciByZXF1aXJlX2Rpc3RfdHMgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2lzb3VuaXF1ZUAxLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvaXNvdW5pcXVlL2Rpc3RfdHMvaW5kZXguanMiKGV4cG9ydHMpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAiX19lc01vZHVsZSIsIHsgdmFsdWU6IHRydWUgfSk7CiAgICBleHBvcnRzLnVuaSA9IHZvaWQgMDsKICAgIHZhciB1bmkzID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH1fJHtgeHh4eHh4eHh4eHh4eHh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KX1gOwogICAgfTsKICAgIGV4cG9ydHMudW5pID0gdW5pMzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuZGVmZXJyZWQuanMKdmFyIERlZmVycmVkLCBkZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkID0gY2xhc3MgewogICAgICBjbGFpbSgpIHsKICAgICAgICBpZiAodGhpcy5jbGFpbWVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkRlZmVycmVkIGFscmVhZHkgY2xhaW1lZCIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNsYWltZWQgPSB0cnVlOwogICAgICB9CiAgICAgIGdldCBkdXJhdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zdG9wcGVkQXQpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnN0b3BwZWRBdCAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gRGF0ZS5ub3coKSAtIHRoaXMuc3RhcnRlZEF0OwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmNsYWltZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICAgICAgdGhpcy5yZXNvbHZlID0gKHZhbHVlQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc3RhdHVzID0gImZ1bGZpbGxlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVzb2x2ZTIodmFsdWVBcmcpOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMucmVqZWN0ID0gKHJlYXNvbikgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJyZWplY3RlZCI7CiAgICAgICAgICAgIHRoaXMuc3RvcHBlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgICAgcmVqZWN0KHJlYXNvbik7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBEYXRlLm5vdygpOwogICAgICAgICAgdGhpcy5zdGF0dXMgPSAicGVuZGluZyI7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkZWZlciA9ICgpID0+IHsKICAgICAgcmV0dXJuIG5ldyBEZWZlcnJlZCgpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cHJvbWlzZUA0LjIuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvc21hcnRwcm9taXNlLmNsYXNzZXMuY3VtdWxhdGl2ZWRlZmVycmVkLmpzCnZhciBDdW11bGF0aXZlRGVmZXJyZWQsIGN1bXVsYXRpdmVEZWZlcjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5jdW11bGF0aXZlZGVmZXJyZWQuanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZCgpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMgPSBbXTsKICAgICAgICB0aGlzLmRlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLmRlZmVycmVkLnByb21pc2U7CiAgICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgICB3aGlsZSAodGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgY29uc3QgcG9wcGVkUHJvbWlzZSA9IHRoaXMuYWNjdW11bGF0ZWRQcm9taXNlcy5zaGlmdCgpOwogICAgICAgICAgICBhd2FpdCBwb3BwZWRQcm9taXNlOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0KICAgICAgc3ViRGVmZXIoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRlZmVyKCk7CiAgICAgICAgdGhpcy5hZGRQcm9taXNlKGRvbmUucHJvbWlzZSk7CiAgICAgICAgcmV0dXJuIGRvbmU7CiAgICAgIH0KICAgICAgYWRkUHJvbWlzZShwcm9taXNlQXJnKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnB1c2gocHJvbWlzZUFyZyk7CiAgICAgIH0KICAgIH07CiAgICBjdW11bGF0aXZlRGVmZXIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkKCk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRwcm9taXNlQDQuMi4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0cywgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkLAogIERlZmVycmVkOiAoKSA9PiBEZWZlcnJlZCwKICBjdW11bGF0aXZlRGVmZXI6ICgpID0+IGN1bXVsYXRpdmVEZWZlciwKICBkZWZlcjogKCkgPT4gZGVmZXIsCiAgZnJvbUNhbGxiYWNrOiAoKSA9PiBmcm9tQ2FsbGJhY2ssCiAgZ2V0Rmlyc3RUcnVlT3JGYWxzZTogKCkgPT4gZ2V0Rmlyc3RUcnVlT3JGYWxzZSwKICBtYXA6ICgpID0+IG1hcCwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZSwKICByZXNvbHZlZFByb21pc2U6ICgpID0+IHJlc29sdmVkUHJvbWlzZSwKICB0aW1lb3V0QW5kQ29udGludWU6ICgpID0+IHRpbWVvdXRBbmRDb250aW51ZSwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAKfSk7CnZhciByZXNvbHZlZFByb21pc2UsIHJlamVjdGVkUHJvbWlzZSwgbWFwLCB0aW1lb3V0V3JhcCwgdGltZW91dEFuZENvbnRpbnVlLCBnZXRGaXJzdFRydWVPckZhbHNlLCBmcm9tQ2FsbGJhY2s7CnZhciBpbml0X2Rpc3RfdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHByb21pc2VANC4yLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfZGVmZXJyZWQoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkKCk7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkKCk7CiAgICByZXNvbHZlZFByb21pc2UgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UgPSAoZXJyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChlcnIpOwogICAgfTsKICAgIG1hcCA9IGFzeW5jIChpbnB1dEFyZywgZnVuY3Rpb25BcmcpID0+IHsKICAgICAgY29uc3QgcHJvbWlzZUFycmF5ID0gW107CiAgICAgIGNvbnN0IHJlc3VsdEFycmF5ID0gW107CiAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBpbnB1dEFyZykgewogICAgICAgIGNvbnN0IHByb21pc2UgPSBmdW5jdGlvbkFyZyhpdGVtKTsKICAgICAgICBwcm9taXNlQXJyYXkucHVzaChwcm9taXNlKTsKICAgICAgICBwcm9taXNlLnRoZW4oKHgzKSA9PiB7CiAgICAgICAgICByZXN1bHRBcnJheS5wdXNoKHgzKTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICB9OwogICAgdGltZW91dFdyYXAgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcgPSA2ZTQpID0+IHsKICAgICAgcmV0dXJuIHRpbWVvdXRXcmFwKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnLCBmYWxzZSk7CiAgICB9OwogICAgZ2V0Rmlyc3RUcnVlT3JGYWxzZSA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIoKTsKICAgICAgZm9yIChjb25zdCBwcm9taXNlQXJnIG9mIHByb21pc2VzQXJnKSB7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKChyZXN1bHRBcmcpID0+IHsKICAgICAgICAgIGlmIChyZXN1bHRBcmcgPT09IHRydWUpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIFByb21pc2UuYWxsKHByb21pc2VzQXJnKS50aGVuKCgpID0+IHsKICAgICAgICBkb25lLnJlc29sdmUoZmFsc2UpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgIH07CiAgICBmcm9tQ2FsbGJhY2sgPSAoZm4pID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgZm4oKGVyciwgcmVzdWx0KSA9PiB7CiAgICAgICAgICBpZiAoZXJyKSB7CiAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmVzb2x2ZTIocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRyeF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90c2xpYkAyLjguMS9ub2RlX21vZHVsZXMvdHNsaWIvdHNsaWIuZXM2Lm1qcwpmdW5jdGlvbiBfX2V4dGVuZHMoZDYsIGI1KSB7CiAgaWYgKHR5cGVvZiBiNSAhPT0gImZ1bmN0aW9uIiAmJiBiNSAhPT0gbnVsbCkKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkNsYXNzIGV4dGVuZHMgdmFsdWUgIiArIFN0cmluZyhiNSkgKyAiIGlzIG5vdCBhIGNvbnN0cnVjdG9yIG9yIG51bGwiKTsKICBleHRlbmRTdGF0aWNzKGQ2LCBiNSk7CiAgZnVuY3Rpb24gX18oKSB7CiAgICB0aGlzLmNvbnN0cnVjdG9yID0gZDY7CiAgfQogIGQ2LnByb3RvdHlwZSA9IGI1ID09PSBudWxsID8gT2JqZWN0LmNyZWF0ZShiNSkgOiAoX18ucHJvdG90eXBlID0gYjUucHJvdG90eXBlLCBuZXcgX18oKSk7Cn0KZnVuY3Rpb24gX19yZXN0KHM5LCBlMTEpIHsKICB2YXIgdDkgPSB7fTsKICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpICYmIGUxMS5pbmRleE9mKHA3KSA8IDApCiAgICB0OVtwN10gPSBzOVtwN107CiAgaWYgKHM5ICE9IG51bGwgJiYgdHlwZW9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMgPT09ICJmdW5jdGlvbiIpCiAgICBmb3IgKHZhciBpMTEgPSAwLCBwNyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoczkpOyBpMTEgPCBwNy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChlMTEuaW5kZXhPZihwN1tpMTFdKSA8IDAgJiYgT2JqZWN0LnByb3RvdHlwZS5wcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHM5LCBwN1tpMTFdKSkKICAgICAgICB0OVtwN1tpMTFdXSA9IHM5W3A3W2kxMV1dOwogICAgfQogIHJldHVybiB0OTsKfQpmdW5jdGlvbiBfX2RlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYykgewogIHZhciBjMTEgPSBhcmd1bWVudHMubGVuZ3RoLCByMTEgPSBjMTEgPCAzID8gdGFyZ2V0IDogZGVzYyA9PT0gbnVsbCA/IGRlc2MgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwga2V5MikgOiBkZXNjLCBkNjsKICBpZiAodHlwZW9mIFJlZmxlY3QgPT09ICJvYmplY3QiICYmIHR5cGVvZiBSZWZsZWN0LmRlY29yYXRlID09PSAiZnVuY3Rpb24iKSByMTEgPSBSZWZsZWN0LmRlY29yYXRlKGRlY29yYXRvcnMsIHRhcmdldCwga2V5MiwgZGVzYyk7CiAgZWxzZSBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgaWYgKGQ2ID0gZGVjb3JhdG9yc1tpMTFdKSByMTEgPSAoYzExIDwgMyA/IGQ2KHIxMSkgOiBjMTEgPiAzID8gZDYodGFyZ2V0LCBrZXkyLCByMTEpIDogZDYodGFyZ2V0LCBrZXkyKSkgfHwgcjExOwogIHJldHVybiBjMTEgPiAzICYmIHIxMSAmJiBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBrZXkyLCByMTEpLCByMTE7Cn0KZnVuY3Rpb24gX19wYXJhbShwYXJhbUluZGV4LCBkZWNvcmF0b3IpIHsKICByZXR1cm4gZnVuY3Rpb24odGFyZ2V0LCBrZXkyKSB7CiAgICBkZWNvcmF0b3IodGFyZ2V0LCBrZXkyLCBwYXJhbUluZGV4KTsKICB9Owp9CmZ1bmN0aW9uIF9fZXNEZWNvcmF0ZShjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn0KZnVuY3Rpb24gX19ydW5Jbml0aWFsaXplcnMyKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9CmZ1bmN0aW9uIF9fcHJvcEtleSh4MykgewogIHJldHVybiB0eXBlb2YgeDMgPT09ICJzeW1ib2wiID8geDMgOiAiIi5jb25jYXQoeDMpOwp9CmZ1bmN0aW9uIF9fc2V0RnVuY3Rpb25OYW1lKGY3LCBuYW1lLCBwcmVmaXg0KSB7CiAgaWYgKHR5cGVvZiBuYW1lID09PSAic3ltYm9sIikgbmFtZSA9IG5hbWUuZGVzY3JpcHRpb24gPyAiWyIuY29uY2F0KG5hbWUuZGVzY3JpcHRpb24sICJdIikgOiAiIjsKICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGY3LCAibmFtZSIsIHsgY29uZmlndXJhYmxlOiB0cnVlLCB2YWx1ZTogcHJlZml4NCA/ICIiLmNvbmNhdChwcmVmaXg0LCAiICIsIG5hbWUpIDogbmFtZSB9KTsKfQpmdW5jdGlvbiBfX21ldGFkYXRhKG1ldGFkYXRhS2V5LCBtZXRhZGF0YVZhbHVlKSB7CiAgaWYgKHR5cGVvZiBSZWZsZWN0ID09PSAib2JqZWN0IiAmJiB0eXBlb2YgUmVmbGVjdC5tZXRhZGF0YSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIFJlZmxlY3QubWV0YWRhdGEobWV0YWRhdGFLZXksIG1ldGFkYXRhVmFsdWUpOwp9CmZ1bmN0aW9uIF9fYXdhaXRlcih0aGlzQXJnLCBfYXJndW1lbnRzLCBQNCwgZ2VuZXJhdG9yKSB7CiAgZnVuY3Rpb24gYWRvcHQodmFsdWUyKSB7CiAgICByZXR1cm4gdmFsdWUyIGluc3RhbmNlb2YgUDQgPyB2YWx1ZTIgOiBuZXcgUDQoZnVuY3Rpb24ocmVzb2x2ZTIpIHsKICAgICAgcmVzb2x2ZTIodmFsdWUyKTsKICAgIH0pOwogIH0KICByZXR1cm4gbmV3IChQNCB8fCAoUDQgPSBQcm9taXNlKSkoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlMikgewogICAgICB0cnkgewogICAgICAgIHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUyKSk7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIHJlamVjdChlMTEpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZTIpIHsKICAgICAgdHJ5IHsKICAgICAgICBzdGVwKGdlbmVyYXRvclsidGhyb3ciXSh2YWx1ZTIpKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7CiAgICAgIHJlc3VsdC5kb25lID8gcmVzb2x2ZTIocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsKICAgIH0KICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTsKICB9KTsKfQpmdW5jdGlvbiBfX2dlbmVyYXRvcih0aGlzQXJnLCBib2R5MykgewogIHZhciBfNCA9IHsgbGFiZWw6IDAsIHNlbnQ6IGZ1bmN0aW9uKCkgewogICAgaWYgKHQ5WzBdICYgMSkgdGhyb3cgdDlbMV07CiAgICByZXR1cm4gdDlbMV07CiAgfSwgdHJ5czogW10sIG9wczogW10gfSwgZjcsIHk1LCB0OSwgZzQgPSBPYmplY3QuY3JlYXRlKCh0eXBlb2YgSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBJdGVyYXRvciA6IE9iamVjdCkucHJvdG90eXBlKTsKICByZXR1cm4gZzQubmV4dCA9IHZlcmIoMCksIGc0WyJ0aHJvdyJdID0gdmVyYigxKSwgZzRbInJldHVybiJdID0gdmVyYigyKSwgdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiAoZzRbU3ltYm9sLml0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSksIGc0OwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIHN0ZXAoW24xMywgdjVdKTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0ZXAob3ApIHsKICAgIGlmIChmNykgdGhyb3cgbmV3IFR5cGVFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgZXhlY3V0aW5nLiIpOwogICAgd2hpbGUgKGc0ICYmIChnNCA9IDAsIG9wWzBdICYmIChfNCA9IDApKSwgXzQpIHRyeSB7CiAgICAgIGlmIChmNyA9IDEsIHk1ICYmICh0OSA9IG9wWzBdICYgMiA/IHk1WyJyZXR1cm4iXSA6IG9wWzBdID8geTVbInRocm93Il0gfHwgKCh0OSA9IHk1WyJyZXR1cm4iXSkgJiYgdDkuY2FsbCh5NSksIDApIDogeTUubmV4dCkgJiYgISh0OSA9IHQ5LmNhbGwoeTUsIG9wWzFdKSkuZG9uZSkgcmV0dXJuIHQ5OwogICAgICBpZiAoeTUgPSAwLCB0OSkgb3AgPSBbb3BbMF0gJiAyLCB0OS52YWx1ZV07CiAgICAgIHN3aXRjaCAob3BbMF0pIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgdDkgPSBvcDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNDoKICAgICAgICAgIF80LmxhYmVsKys7CiAgICAgICAgICByZXR1cm4geyB2YWx1ZTogb3BbMV0sIGRvbmU6IGZhbHNlIH07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgXzQubGFiZWwrKzsKICAgICAgICAgIHk1ID0gb3BbMV07CiAgICAgICAgICBvcCA9IFswXTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIG9wID0gXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBpZiAoISh0OSA9IF80LnRyeXMsIHQ5ID0gdDkubGVuZ3RoID4gMCAmJiB0OVt0OS5sZW5ndGggLSAxXSkgJiYgKG9wWzBdID09PSA2IHx8IG9wWzBdID09PSAyKSkgewogICAgICAgICAgICBfNCA9IDA7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9wWzBdID09PSAzICYmICghdDkgfHwgb3BbMV0gPiB0OVswXSAmJiBvcFsxXSA8IHQ5WzNdKSkgewogICAgICAgICAgICBfNC5sYWJlbCA9IG9wWzFdOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcFswXSA9PT0gNiAmJiBfNC5sYWJlbCA8IHQ5WzFdKSB7CiAgICAgICAgICAgIF80LmxhYmVsID0gdDlbMV07CiAgICAgICAgICAgIHQ5ID0gb3A7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHQ5ICYmIF80LmxhYmVsIDwgdDlbMl0pIHsKICAgICAgICAgICAgXzQubGFiZWwgPSB0OVsyXTsKICAgICAgICAgICAgXzQub3BzLnB1c2gob3ApOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0OVsyXSkgXzQub3BzLnBvcCgpOwogICAgICAgICAgXzQudHJ5cy5wb3AoKTsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICB9CiAgICAgIG9wID0gYm9keTMuY2FsbCh0aGlzQXJnLCBfNCk7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgb3AgPSBbNiwgZTExXTsKICAgICAgeTUgPSAwOwogICAgfSBmaW5hbGx5IHsKICAgICAgZjcgPSB0OSA9IDA7CiAgICB9CiAgICBpZiAob3BbMF0gJiA1KSB0aHJvdyBvcFsxXTsKICAgIHJldHVybiB7IHZhbHVlOiBvcFswXSA/IG9wWzFdIDogdm9pZCAwLCBkb25lOiB0cnVlIH07CiAgfQp9CmZ1bmN0aW9uIF9fZXhwb3J0U3RhcihtNiwgbzEzKSB7CiAgZm9yICh2YXIgcDcgaW4gbTYpIGlmIChwNyAhPT0gImRlZmF1bHQiICYmICFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobzEzLCBwNykpIF9fY3JlYXRlQmluZGluZyhvMTMsIG02LCBwNyk7Cn0KZnVuY3Rpb24gX192YWx1ZXMobzEzKSB7CiAgdmFyIHM5ID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wuaXRlcmF0b3IsIG02ID0gczkgJiYgbzEzW3M5XSwgaTExID0gMDsKICBpZiAobTYpIHJldHVybiBtNi5jYWxsKG8xMyk7CiAgaWYgKG8xMyAmJiB0eXBlb2YgbzEzLmxlbmd0aCA9PT0gIm51bWJlciIpIHJldHVybiB7CiAgICBuZXh0OiBmdW5jdGlvbigpIHsKICAgICAgaWYgKG8xMyAmJiBpMTEgPj0gbzEzLmxlbmd0aCkgbzEzID0gdm9pZCAwOwogICAgICByZXR1cm4geyB2YWx1ZTogbzEzICYmIG8xM1tpMTErK10sIGRvbmU6ICFvMTMgfTsKICAgIH0KICB9OwogIHRocm93IG5ldyBUeXBlRXJyb3IoczkgPyAiT2JqZWN0IGlzIG5vdCBpdGVyYWJsZS4iIDogIlN5bWJvbC5pdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKfQpmdW5jdGlvbiBfX3JlYWQobzEzLCBuMTMpIHsKICB2YXIgbTYgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIG8xM1tTeW1ib2wuaXRlcmF0b3JdOwogIGlmICghbTYpIHJldHVybiBvMTM7CiAgdmFyIGkxMSA9IG02LmNhbGwobzEzKSwgcjExLCBhciA9IFtdLCBlMTE7CiAgdHJ5IHsKICAgIHdoaWxlICgobjEzID09PSB2b2lkIDAgfHwgbjEzLS0gPiAwKSAmJiAhKHIxMSA9IGkxMS5uZXh0KCkpLmRvbmUpIGFyLnB1c2gocjExLnZhbHVlKTsKICB9IGNhdGNoIChlcnJvcikgewogICAgZTExID0geyBlcnJvciB9OwogIH0gZmluYWxseSB7CiAgICB0cnkgewogICAgICBpZiAocjExICYmICFyMTEuZG9uZSAmJiAobTYgPSBpMTFbInJldHVybiJdKSkgbTYuY2FsbChpMTEpOwogICAgfSBmaW5hbGx5IHsKICAgICAgaWYgKGUxMSkgdGhyb3cgZTExLmVycm9yOwogICAgfQogIH0KICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWQoKSB7CiAgZm9yICh2YXIgYXIgPSBbXSwgaTExID0gMDsgaTExIDwgYXJndW1lbnRzLmxlbmd0aDsgaTExKyspCiAgICBhciA9IGFyLmNvbmNhdChfX3JlYWQoYXJndW1lbnRzW2kxMV0pKTsKICByZXR1cm4gYXI7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheXMoKSB7CiAgZm9yICh2YXIgczkgPSAwLCBpMTEgPSAwLCBpbCA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IGlsOyBpMTErKykgczkgKz0gYXJndW1lbnRzW2kxMV0ubGVuZ3RoOwogIGZvciAodmFyIHIxMSA9IEFycmF5KHM5KSwgazQgPSAwLCBpMTEgPSAwOyBpMTEgPCBpbDsgaTExKyspCiAgICBmb3IgKHZhciBhNSA9IGFyZ3VtZW50c1tpMTFdLCBqNCA9IDAsIGpsID0gYTUubGVuZ3RoOyBqNCA8IGpsOyBqNCsrLCBrNCsrKQogICAgICByMTFbazRdID0gYTVbajRdOwogIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX19zcHJlYWRBcnJheSh0bzIsIGZyb20yLCBwYWNrKSB7CiAgaWYgKHBhY2sgfHwgYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgZm9yICh2YXIgaTExID0gMCwgbDYgPSBmcm9tMi5sZW5ndGgsIGFyOyBpMTEgPCBsNjsgaTExKyspIHsKICAgIGlmIChhciB8fCAhKGkxMSBpbiBmcm9tMikpIHsKICAgICAgaWYgKCFhcikgYXIgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChmcm9tMiwgMCwgaTExKTsKICAgICAgYXJbaTExXSA9IGZyb20yW2kxMV07CiAgICB9CiAgfQogIHJldHVybiB0bzIuY29uY2F0KGFyIHx8IEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGZyb20yKSk7Cn0KZnVuY3Rpb24gX19hd2FpdCh2NSkgewogIHJldHVybiB0aGlzIGluc3RhbmNlb2YgX19hd2FpdCA/ICh0aGlzLnYgPSB2NSwgdGhpcykgOiBuZXcgX19hd2FpdCh2NSk7Cn0KZnVuY3Rpb24gX19hc3luY0dlbmVyYXRvcih0aGlzQXJnLCBfYXJndW1lbnRzLCBnZW5lcmF0b3IpIHsKICBpZiAoIVN5bWJvbC5hc3luY0l0ZXJhdG9yKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNJdGVyYXRvciBpcyBub3QgZGVmaW5lZC4iKTsKICB2YXIgZzQgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSksIGkxMSwgcTIgPSBbXTsKICByZXR1cm4gaTExID0gT2JqZWN0LmNyZWF0ZSgodHlwZW9mIEFzeW5jSXRlcmF0b3IgPT09ICJmdW5jdGlvbiIgPyBBc3luY0l0ZXJhdG9yIDogT2JqZWN0KS5wcm90b3R5cGUpLCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIsIGF3YWl0UmV0dXJuKSwgaTExW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSA9IGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHRoaXM7CiAgfSwgaTExOwogIGZ1bmN0aW9uIGF3YWl0UmV0dXJuKGY3KSB7CiAgICByZXR1cm4gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh2NSkudGhlbihmNywgcmVqZWN0KTsKICAgIH07CiAgfQogIGZ1bmN0aW9uIHZlcmIobjEzLCBmNykgewogICAgaWYgKGc0W24xM10pIHsKICAgICAgaTExW24xM10gPSBmdW5jdGlvbih2NSkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICAgIHEyLnB1c2goW24xMywgdjUsIGE1LCBiNV0pID4gMSB8fCByZXN1bWUobjEzLCB2NSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGlmIChmNykgaTExW24xM10gPSBmNyhpMTFbbjEzXSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHJlc3VtZShuMTMsIHY1KSB7CiAgICB0cnkgewogICAgICBzdGVwKGc0W24xM10odjUpKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBzZXR0bGUocTJbMF1bM10sIGUxMSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHN0ZXAocjExKSB7CiAgICByMTEudmFsdWUgaW5zdGFuY2VvZiBfX2F3YWl0ID8gUHJvbWlzZS5yZXNvbHZlKHIxMS52YWx1ZS52KS50aGVuKGZ1bGZpbGwsIHJlamVjdCkgOiBzZXR0bGUocTJbMF1bMl0sIHIxMSk7CiAgfQogIGZ1bmN0aW9uIGZ1bGZpbGwodmFsdWUyKSB7CiAgICByZXN1bWUoIm5leHQiLCB2YWx1ZTIpOwogIH0KICBmdW5jdGlvbiByZWplY3QodmFsdWUyKSB7CiAgICByZXN1bWUoInRocm93IiwgdmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKGY3LCB2NSkgewogICAgaWYgKGY3KHY1KSwgcTIuc2hpZnQoKSwgcTIubGVuZ3RoKSByZXN1bWUocTJbMF1bMF0sIHEyWzBdWzFdKTsKICB9Cn0KZnVuY3Rpb24gX19hc3luY0RlbGVnYXRvcihvMTMpIHsKICB2YXIgaTExLCBwNzsKICByZXR1cm4gaTExID0ge30sIHZlcmIoIm5leHQiKSwgdmVyYigidGhyb3ciLCBmdW5jdGlvbihlMTEpIHsKICAgIHRocm93IGUxMTsKICB9KSwgdmVyYigicmV0dXJuIiksIGkxMVtTeW1ib2wuaXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTE7CiAgZnVuY3Rpb24gdmVyYihuMTMsIGY3KSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdID8gZnVuY3Rpb24odjUpIHsKICAgICAgcmV0dXJuIChwNyA9ICFwNykgPyB7IHZhbHVlOiBfX2F3YWl0KG8xM1tuMTNdKHY1KSksIGRvbmU6IGZhbHNlIH0gOiBmNyA/IGY3KHY1KSA6IHY1OwogICAgfSA6IGY3OwogIH0KfQpmdW5jdGlvbiBfX2FzeW5jVmFsdWVzKG8xMykgewogIGlmICghU3ltYm9sLmFzeW5jSXRlcmF0b3IpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN5bWJvbC5hc3luY0l0ZXJhdG9yIGlzIG5vdCBkZWZpbmVkLiIpOwogIHZhciBtNiA9IG8xM1tTeW1ib2wuYXN5bmNJdGVyYXRvcl0sIGkxMTsKICByZXR1cm4gbTYgPyBtNi5jYWxsKG8xMykgOiAobzEzID0gdHlwZW9mIF9fdmFsdWVzID09PSAiZnVuY3Rpb24iID8gX192YWx1ZXMobzEzKSA6IG8xM1tTeW1ib2wuaXRlcmF0b3JdKCksIGkxMSA9IHt9LCB2ZXJiKCJuZXh0IiksIHZlcmIoInRocm93IiksIHZlcmIoInJldHVybiIpLCBpMTFbU3ltYm9sLmFzeW5jSXRlcmF0b3JdID0gZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gdGhpczsKICB9LCBpMTEpOwogIGZ1bmN0aW9uIHZlcmIobjEzKSB7CiAgICBpMTFbbjEzXSA9IG8xM1tuMTNdICYmIGZ1bmN0aW9uKHY1KSB7CiAgICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICAgICAgdjUgPSBvMTNbbjEzXSh2NSksIHNldHRsZShyZXNvbHZlMiwgcmVqZWN0LCB2NS5kb25lLCB2NS52YWx1ZSk7CiAgICAgIH0pOwogICAgfTsKICB9CiAgZnVuY3Rpb24gc2V0dGxlKHJlc29sdmUyLCByZWplY3QsIGQ2LCB2NSkgewogICAgUHJvbWlzZS5yZXNvbHZlKHY1KS50aGVuKGZ1bmN0aW9uKHY2KSB7CiAgICAgIHJlc29sdmUyKHsgdmFsdWU6IHY2LCBkb25lOiBkNiB9KTsKICAgIH0sIHJlamVjdCk7CiAgfQp9CmZ1bmN0aW9uIF9fbWFrZVRlbXBsYXRlT2JqZWN0KGNvb2tlZCwgcmF3MikgewogIGlmIChPYmplY3QuZGVmaW5lUHJvcGVydHkpIHsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb29rZWQsICJyYXciLCB7IHZhbHVlOiByYXcyIH0pOwogIH0gZWxzZSB7CiAgICBjb29rZWQucmF3ID0gcmF3MjsKICB9CiAgcmV0dXJuIGNvb2tlZDsKfQpmdW5jdGlvbiBfX2ltcG9ydFN0YXIobW9kKSB7CiAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICB2YXIgcmVzdWx0ID0ge307CiAgaWYgKG1vZCAhPSBudWxsKSB7CiAgICBmb3IgKHZhciBrNCA9IG93bktleXMobW9kKSwgaTExID0gMDsgaTExIDwgazQubGVuZ3RoOyBpMTErKykgaWYgKGs0W2kxMV0gIT09ICJkZWZhdWx0IikgX19jcmVhdGVCaW5kaW5nKHJlc3VsdCwgbW9kLCBrNFtpMTFdKTsKICB9CiAgX19zZXRNb2R1bGVEZWZhdWx0KHJlc3VsdCwgbW9kKTsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIF9faW1wb3J0RGVmYXVsdChtb2QpIHsKICByZXR1cm4gbW9kICYmIG1vZC5fX2VzTW9kdWxlID8gbW9kIDogeyBkZWZhdWx0OiBtb2QgfTsKfQpmdW5jdGlvbiBfX2NsYXNzUHJpdmF0ZUZpZWxkR2V0KHJlY2VpdmVyLCBzdGF0ZTEyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBnZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTIgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxMiB8fCAhZjcgOiAhc3RhdGUxMi5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgcmVhZCBwcml2YXRlIG1lbWJlciBmcm9tIGFuIG9iamVjdCB3aG9zZSBjbGFzcyBkaWQgbm90IGRlY2xhcmUgaXQiKTsKICByZXR1cm4ga2luZCA9PT0gIm0iID8gZjcgOiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyKSA6IGY3ID8gZjcudmFsdWUgOiBzdGF0ZTEyLmdldChyZWNlaXZlcik7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZFNldChyZWNlaXZlciwgc3RhdGUxMiwgdmFsdWUyLCBraW5kLCBmNykgewogIGlmIChraW5kID09PSAibSIpIHRocm93IG5ldyBUeXBlRXJyb3IoIlByaXZhdGUgbWV0aG9kIGlzIG5vdCB3cml0YWJsZSIpOwogIGlmIChraW5kID09PSAiYSIgJiYgIWY3KSB0aHJvdyBuZXcgVHlwZUVycm9yKCJQcml2YXRlIGFjY2Vzc29yIHdhcyBkZWZpbmVkIHdpdGhvdXQgYSBzZXR0ZXIiKTsKICBpZiAodHlwZW9mIHN0YXRlMTIgPT09ICJmdW5jdGlvbiIgPyByZWNlaXZlciAhPT0gc3RhdGUxMiB8fCAhZjcgOiAhc3RhdGUxMi5oYXMocmVjZWl2ZXIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3Qgd3JpdGUgcHJpdmF0ZSBtZW1iZXIgdG8gYW4gb2JqZWN0IHdob3NlIGNsYXNzIGRpZCBub3QgZGVjbGFyZSBpdCIpOwogIHJldHVybiBraW5kID09PSAiYSIgPyBmNy5jYWxsKHJlY2VpdmVyLCB2YWx1ZTIpIDogZjcgPyBmNy52YWx1ZSA9IHZhbHVlMiA6IHN0YXRlMTIuc2V0KHJlY2VpdmVyLCB2YWx1ZTIpLCB2YWx1ZTI7Cn0KZnVuY3Rpb24gX19jbGFzc1ByaXZhdGVGaWVsZEluKHN0YXRlMTIsIHJlY2VpdmVyKSB7CiAgaWYgKHJlY2VpdmVyID09PSBudWxsIHx8IHR5cGVvZiByZWNlaXZlciAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHJlY2VpdmVyICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgdXNlICdpbicgb3BlcmF0b3Igb24gbm9uLW9iamVjdCIpOwogIHJldHVybiB0eXBlb2Ygc3RhdGUxMiA9PT0gImZ1bmN0aW9uIiA/IHJlY2VpdmVyID09PSBzdGF0ZTEyIDogc3RhdGUxMi5oYXMocmVjZWl2ZXIpOwp9CmZ1bmN0aW9uIF9fYWRkRGlzcG9zYWJsZVJlc291cmNlKGVudjIsIHZhbHVlMiwgYXN5bmMyKSB7CiAgaWYgKHZhbHVlMiAhPT0gbnVsbCAmJiB2YWx1ZTIgIT09IHZvaWQgMCkgewogICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZC4iKTsKICAgIHZhciBkaXNwb3NlLCBpbm5lcjsKICAgIGlmIChhc3luYzIpIHsKICAgICAgaWYgKCFTeW1ib2wuYXN5bmNEaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuYXN5bmNEaXNwb3NlIGlzIG5vdCBkZWZpbmVkLiIpOwogICAgICBkaXNwb3NlID0gdmFsdWUyW1N5bWJvbC5hc3luY0Rpc3Bvc2VdOwogICAgfQogICAgaWYgKGRpc3Bvc2UgPT09IHZvaWQgMCkgewogICAgICBpZiAoIVN5bWJvbC5kaXNwb3NlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJTeW1ib2wuZGlzcG9zZSBpcyBub3QgZGVmaW5lZC4iKTsKICAgICAgZGlzcG9zZSA9IHZhbHVlMltTeW1ib2wuZGlzcG9zZV07CiAgICAgIGlmIChhc3luYzIpIGlubmVyID0gZGlzcG9zZTsKICAgIH0KICAgIGlmICh0eXBlb2YgZGlzcG9zZSAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IG5vdCBkaXNwb3NhYmxlLiIpOwogICAgaWYgKGlubmVyKSBkaXNwb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHRyeSB7CiAgICAgICAgaW5uZXIuY2FsbCh0aGlzKTsKICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVqZWN0KGUxMSk7CiAgICAgIH0KICAgIH07CiAgICBlbnYyLnN0YWNrLnB1c2goeyB2YWx1ZTogdmFsdWUyLCBkaXNwb3NlLCBhc3luYzogYXN5bmMyIH0pOwogIH0gZWxzZSBpZiAoYXN5bmMyKSB7CiAgICBlbnYyLnN0YWNrLnB1c2goeyBhc3luYzogdHJ1ZSB9KTsKICB9CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBfX2Rpc3Bvc2VSZXNvdXJjZXMoZW52MikgewogIGZ1bmN0aW9uIGZhaWwoZTExKSB7CiAgICBlbnYyLmVycm9yID0gZW52Mi5oYXNFcnJvciA/IG5ldyBfU3VwcHJlc3NlZEVycm9yKGUxMSwgZW52Mi5lcnJvciwgIkFuIGVycm9yIHdhcyBzdXBwcmVzc2VkIGR1cmluZyBkaXNwb3NhbC4iKSA6IGUxMTsKICAgIGVudjIuaGFzRXJyb3IgPSB0cnVlOwogIH0KICB2YXIgcjExLCBzOSA9IDA7CiAgZnVuY3Rpb24gbmV4dDIoKSB7CiAgICB3aGlsZSAocjExID0gZW52Mi5zdGFjay5wb3AoKSkgewogICAgICB0cnkgewogICAgICAgIGlmICghcjExLmFzeW5jICYmIHM5ID09PSAxKSByZXR1cm4gczkgPSAwLCBlbnYyLnN0YWNrLnB1c2gocjExKSwgUHJvbWlzZS5yZXNvbHZlKCkudGhlbihuZXh0Mik7CiAgICAgICAgaWYgKHIxMS5kaXNwb3NlKSB7CiAgICAgICAgICB2YXIgcmVzdWx0ID0gcjExLmRpc3Bvc2UuY2FsbChyMTEudmFsdWUpOwogICAgICAgICAgaWYgKHIxMS5hc3luYykgcmV0dXJuIHM5IHw9IDIsIFByb21pc2UucmVzb2x2ZShyZXN1bHQpLnRoZW4obmV4dDIsIGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICBmYWlsKGUxMSk7CiAgICAgICAgICAgIHJldHVybiBuZXh0MigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSBlbHNlIHM5IHw9IDE7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGZhaWwoZTExKTsKICAgICAgfQogICAgfQogICAgaWYgKHM5ID09PSAxKSByZXR1cm4gZW52Mi5oYXNFcnJvciA/IFByb21pc2UucmVqZWN0KGVudjIuZXJyb3IpIDogUHJvbWlzZS5yZXNvbHZlKCk7CiAgICBpZiAoZW52Mi5oYXNFcnJvcikgdGhyb3cgZW52Mi5lcnJvcjsKICB9CiAgcmV0dXJuIG5leHQyKCk7Cn0KZnVuY3Rpb24gX19yZXdyaXRlUmVsYXRpdmVJbXBvcnRFeHRlbnNpb24ocGF0aDIsIHByZXNlcnZlSnN4KSB7CiAgaWYgKHR5cGVvZiBwYXRoMiA9PT0gInN0cmluZyIgJiYgL15cLlwuP1wvLy50ZXN0KHBhdGgyKSkgewogICAgcmV0dXJuIHBhdGgyLnJlcGxhY2UoL1wuKHRzeCkkfCgoPzpcLmQpPykoKD86XC5bXi4vXSs/KT8pXC4oW2NtXT8pdHMkL2ksIGZ1bmN0aW9uKG02LCB0c3gsIGQ2LCBleHQsIGNtKSB7CiAgICAgIHJldHVybiB0c3ggPyBwcmVzZXJ2ZUpzeCA/ICIuanN4IiA6ICIuanMiIDogZDYgJiYgKCFleHQgfHwgIWNtKSA/IG02IDogZDYgKyBleHQgKyAiLiIgKyBjbS50b0xvd2VyQ2FzZSgpICsgImpzIjsKICAgIH0pOwogIH0KICByZXR1cm4gcGF0aDI7Cn0KdmFyIGV4dGVuZFN0YXRpY3MsIF9fYXNzaWduLCBfX2NyZWF0ZUJpbmRpbmcsIF9fc2V0TW9kdWxlRGVmYXVsdCwgb3duS2V5cywgX1N1cHByZXNzZWRFcnJvciwgdHNsaWJfZXM2X2RlZmF1bHQ7CnZhciBpbml0X3RzbGliX2VzNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3RzbGliQDIuOC4xL25vZGVfbW9kdWxlcy90c2xpYi90c2xpYi5lczYubWpzIigpIHsKICAgIGV4dGVuZFN0YXRpY3MgPSBmdW5jdGlvbihkNiwgYjUpIHsKICAgICAgZXh0ZW5kU3RhdGljcyA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiB8fCB7IF9fcHJvdG9fXzogW10gfSBpbnN0YW5jZW9mIEFycmF5ICYmIGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGQ3Ll9fcHJvdG9fXyA9IGI2OwogICAgICB9IHx8IGZ1bmN0aW9uKGQ3LCBiNikgewogICAgICAgIGZvciAodmFyIHA3IGluIGI2KSBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGI2LCBwNykpIGQ3W3A3XSA9IGI2W3A3XTsKICAgICAgfTsKICAgICAgcmV0dXJuIGV4dGVuZFN0YXRpY3MoZDYsIGI1KTsKICAgIH07CiAgICBfX2Fzc2lnbiA9IGZ1bmN0aW9uKCkgewogICAgICBfX2Fzc2lnbiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24yKHQ5KSB7CiAgICAgICAgZm9yICh2YXIgczksIGkxMSA9IDEsIG4xMyA9IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSA8IG4xMzsgaTExKyspIHsKICAgICAgICAgIHM5ID0gYXJndW1lbnRzW2kxMV07CiAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgfQogICAgICAgIHJldHVybiB0OTsKICAgICAgfTsKICAgICAgcmV0dXJuIF9fYXNzaWduLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICB9OwogICAgOwogICAgOwogICAgOwogICAgOwogICAgX19jcmVhdGVCaW5kaW5nID0gT2JqZWN0LmNyZWF0ZSA/IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIHZhciBkZXNjID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihtNiwgazQpOwogICAgICBpZiAoIWRlc2MgfHwgKCJnZXQiIGluIGRlc2MgPyAhbTYuX19lc01vZHVsZSA6IGRlc2Mud3JpdGFibGUgfHwgZGVzYy5jb25maWd1cmFibGUpKSB7CiAgICAgICAgZGVzYyA9IHsgZW51bWVyYWJsZTogdHJ1ZSwgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiBtNltrNF07CiAgICAgICAgfSB9OwogICAgICB9CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvMTMsIGsyMiwgZGVzYyk7CiAgICB9KSA6IChmdW5jdGlvbihvMTMsIG02LCBrNCwgazIyKSB7CiAgICAgIGlmIChrMjIgPT09IHZvaWQgMCkgazIyID0gazQ7CiAgICAgIG8xM1trMjJdID0gbTZbazRdOwogICAgfSk7CiAgICA7CiAgICBfX3NldE1vZHVsZURlZmF1bHQgPSBPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgdjUpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgImRlZmF1bHQiLCB7IGVudW1lcmFibGU6IHRydWUsIHZhbHVlOiB2NSB9KTsKICAgIH0pIDogZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBvMTNbImRlZmF1bHQiXSA9IHY1OwogICAgfTsKICAgIG93bktleXMgPSBmdW5jdGlvbihvMTMpIHsKICAgICAgb3duS2V5cyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzIHx8IGZ1bmN0aW9uKG8xNCkgewogICAgICAgIHZhciBhciA9IFtdOwogICAgICAgIGZvciAodmFyIGs0IGluIG8xNCkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvMTQsIGs0KSkgYXJbYXIubGVuZ3RoXSA9IGs0OwogICAgICAgIHJldHVybiBhcjsKICAgICAgfTsKICAgICAgcmV0dXJuIG93bktleXMobzEzKTsKICAgIH07CiAgICBfU3VwcHJlc3NlZEVycm9yID0gdHlwZW9mIFN1cHByZXNzZWRFcnJvciA9PT0gImZ1bmN0aW9uIiA/IFN1cHByZXNzZWRFcnJvciA6IGZ1bmN0aW9uKGVycm9yLCBzdXBwcmVzc2VkLCBtZXNzYWdlMikgewogICAgICB2YXIgZTExID0gbmV3IEVycm9yKG1lc3NhZ2UyKTsKICAgICAgcmV0dXJuIGUxMS5uYW1lID0gIlN1cHByZXNzZWRFcnJvciIsIGUxMS5lcnJvciA9IGVycm9yLCBlMTEuc3VwcHJlc3NlZCA9IHN1cHByZXNzZWQsIGUxMTsKICAgIH07CiAgICB0c2xpYl9lczZfZGVmYXVsdCA9IHsKICAgICAgX19leHRlbmRzLAogICAgICBfX2Fzc2lnbiwKICAgICAgX19yZXN0LAogICAgICBfX2RlY29yYXRlLAogICAgICBfX3BhcmFtLAogICAgICBfX2VzRGVjb3JhdGUsCiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOiBfX3J1bkluaXRpYWxpemVyczIsCiAgICAgIF9fcHJvcEtleSwKICAgICAgX19zZXRGdW5jdGlvbk5hbWUsCiAgICAgIF9fbWV0YWRhdGEsCiAgICAgIF9fYXdhaXRlciwKICAgICAgX19nZW5lcmF0b3IsCiAgICAgIF9fY3JlYXRlQmluZGluZywKICAgICAgX19leHBvcnRTdGFyLAogICAgICBfX3ZhbHVlcywKICAgICAgX19yZWFkLAogICAgICBfX3NwcmVhZCwKICAgICAgX19zcHJlYWRBcnJheXMsCiAgICAgIF9fc3ByZWFkQXJyYXksCiAgICAgIF9fYXdhaXQsCiAgICAgIF9fYXN5bmNHZW5lcmF0b3IsCiAgICAgIF9fYXN5bmNEZWxlZ2F0b3IsCiAgICAgIF9fYXN5bmNWYWx1ZXMsCiAgICAgIF9fbWFrZVRlbXBsYXRlT2JqZWN0LAogICAgICBfX2ltcG9ydFN0YXIsCiAgICAgIF9faW1wb3J0RGVmYXVsdCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEdldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZFNldCwKICAgICAgX19jbGFzc1ByaXZhdGVGaWVsZEluLAogICAgICBfX2FkZERpc3Bvc2FibGVSZXNvdXJjZSwKICAgICAgX19kaXNwb3NlUmVzb3VyY2VzLAogICAgICBfX3Jld3JpdGVSZWxhdGl2ZUltcG9ydEV4dGVuc2lvbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNGdW5jdGlvbi5qcwpmdW5jdGlvbiBpc0Z1bmN0aW9uKHZhbHVlMikgewogIHJldHVybiB0eXBlb2YgdmFsdWUyID09PSAiZnVuY3Rpb24iOwp9CnZhciBpbml0X2lzRnVuY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzRnVuY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9jcmVhdGVFcnJvckNsYXNzLmpzCmZ1bmN0aW9uIGNyZWF0ZUVycm9yQ2xhc3MoY3JlYXRlSW1wbCkgewogIHZhciBfc3VwZXIgPSBmdW5jdGlvbihpbnN0YW5jZSkgewogICAgRXJyb3IuY2FsbChpbnN0YW5jZSk7CiAgICBpbnN0YW5jZS5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrOwogIH07CiAgdmFyIGN0b3JGdW5jID0gY3JlYXRlSW1wbChfc3VwZXIpOwogIGN0b3JGdW5jLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICBjdG9yRnVuYy5wcm90b3R5cGUuY29uc3RydWN0b3IgPSBjdG9yRnVuYzsKICByZXR1cm4gY3RvckZ1bmM7Cn0KdmFyIGluaXRfY3JlYXRlRXJyb3JDbGFzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvY3JlYXRlRXJyb3JDbGFzcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMKdmFyIFVuc3Vic2NyaXB0aW9uRXJyb3I7CnZhciBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL1Vuc3Vic2NyaXB0aW9uRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBVbnN1YnNjcmlwdGlvbkVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIFVuc3Vic2NyaXB0aW9uRXJyb3JJbXBsKGVycm9ycykgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBlcnJvcnMgPyBlcnJvcnMubGVuZ3RoICsgIiBlcnJvcnMgb2NjdXJyZWQgZHVyaW5nIHVuc3Vic2NyaXB0aW9uOlxuIiArIGVycm9ycy5tYXAoZnVuY3Rpb24oZXJyLCBpMTEpIHsKICAgICAgICAgIHJldHVybiBpMTEgKyAxICsgIikgIiArIGVyci50b1N0cmluZygpOwogICAgICAgIH0pLmpvaW4oIlxuICAiKSA6ICIiOwogICAgICAgIHRoaXMubmFtZSA9ICJVbnN1YnNjcmlwdGlvbkVycm9yIjsKICAgICAgICB0aGlzLmVycm9ycyA9IGVycm9yczsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMKZnVuY3Rpb24gYXJyUmVtb3ZlKGFyciwgaXRlbSkgewogIGlmIChhcnIpIHsKICAgIHZhciBpbmRleDIgPSBhcnIuaW5kZXhPZihpdGVtKTsKICAgIDAgPD0gaW5kZXgyICYmIGFyci5zcGxpY2UoaW5kZXgyLCAxKTsKICB9Cn0KdmFyIGluaXRfYXJyUmVtb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcnJSZW1vdmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3Vic2NyaXB0aW9uLmpzCmZ1bmN0aW9uIGlzU3Vic2NyaXB0aW9uKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24gfHwgdmFsdWUyICYmICJjbG9zZWQiIGluIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5yZW1vdmUpICYmIGlzRnVuY3Rpb24odmFsdWUyLmFkZCkgJiYgaXNGdW5jdGlvbih2YWx1ZTIudW5zdWJzY3JpYmUpOwp9CmZ1bmN0aW9uIGV4ZWNGaW5hbGl6ZXIoZmluYWxpemVyKSB7CiAgaWYgKGlzRnVuY3Rpb24oZmluYWxpemVyKSkgewogICAgZmluYWxpemVyKCk7CiAgfSBlbHNlIHsKICAgIGZpbmFsaXplci51bnN1YnNjcmliZSgpOwogIH0KfQp2YXIgU3Vic2NyaXB0aW9uLCBFTVBUWV9TVUJTQ1JJUFRJT047CnZhciBpbml0X1N1YnNjcmlwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL1N1YnNjcmlwdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X1Vuc3Vic2NyaXB0aW9uRXJyb3IoKTsKICAgIGluaXRfYXJyUmVtb3ZlKCk7CiAgICBTdWJzY3JpcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmlwdGlvbjIoaW5pdGlhbFRlYXJkb3duKSB7CiAgICAgICAgdGhpcy5pbml0aWFsVGVhcmRvd24gPSBpbml0aWFsVGVhcmRvd247CiAgICAgICAgdGhpcy5jbG9zZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLl9wYXJlbnRhZ2UgPSBudWxsOwogICAgICAgIHRoaXMuX2ZpbmFsaXplcnMgPSBudWxsOwogICAgICB9CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGVfMSwgX2ExNCwgZV8yLCBfYjsKICAgICAgICB2YXIgZXJyb3JzOwogICAgICAgIGlmICghdGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgICAgaWYgKF9wYXJlbnRhZ2UpIHsKICAgICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgZm9yICh2YXIgX3BhcmVudGFnZV8xID0gX192YWx1ZXMoX3BhcmVudGFnZSksIF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKTsgIV9wYXJlbnRhZ2VfMV8xLmRvbmU7IF9wYXJlbnRhZ2VfMV8xID0gX3BhcmVudGFnZV8xLm5leHQoKSkgewogICAgICAgICAgICAgICAgICB2YXIgcGFyZW50XzEgPSBfcGFyZW50YWdlXzFfMS52YWx1ZTsKICAgICAgICAgICAgICAgICAgcGFyZW50XzEucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBpZiAoX3BhcmVudGFnZV8xXzEgJiYgIV9wYXJlbnRhZ2VfMV8xLmRvbmUgJiYgKF9hMTQgPSBfcGFyZW50YWdlXzEucmV0dXJuKSkgX2ExNC5jYWxsKF9wYXJlbnRhZ2VfMSk7CiAgICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgICBpZiAoZV8xKSB0aHJvdyBlXzEuZXJyb3I7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIF9wYXJlbnRhZ2UucmVtb3ZlKHRoaXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICB2YXIgaW5pdGlhbEZpbmFsaXplciA9IHRoaXMuaW5pdGlhbFRlYXJkb3duOwogICAgICAgICAgaWYgKGlzRnVuY3Rpb24oaW5pdGlhbEZpbmFsaXplcikpIHsKICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBpbml0aWFsRmluYWxpemVyKCk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgICAgIGVycm9ycyA9IGUxMSBpbnN0YW5jZW9mIFVuc3Vic2NyaXB0aW9uRXJyb3IgPyBlMTEuZXJyb3JzIDogW2UxMV07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHZhciBfZmluYWxpemVycyA9IHRoaXMuX2ZpbmFsaXplcnM7CiAgICAgICAgICBpZiAoX2ZpbmFsaXplcnMpIHsKICAgICAgICAgICAgdGhpcy5fZmluYWxpemVycyA9IG51bGw7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgZm9yICh2YXIgX2ZpbmFsaXplcnNfMSA9IF9fdmFsdWVzKF9maW5hbGl6ZXJzKSwgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCk7ICFfZmluYWxpemVyc18xXzEuZG9uZTsgX2ZpbmFsaXplcnNfMV8xID0gX2ZpbmFsaXplcnNfMS5uZXh0KCkpIHsKICAgICAgICAgICAgICAgIHZhciBmaW5hbGl6ZXIgPSBfZmluYWxpemVyc18xXzEudmFsdWU7CiAgICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgICBleGVjRmluYWxpemVyKGZpbmFsaXplcik7CiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgICAgICAgZXJyb3JzID0gZXJyb3JzICE9PSBudWxsICYmIGVycm9ycyAhPT0gdm9pZCAwID8gZXJyb3JzIDogW107CiAgICAgICAgICAgICAgICAgIGlmIChlcnIgaW5zdGFuY2VvZiBVbnN1YnNjcmlwdGlvbkVycm9yKSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzID0gX19zcHJlYWRBcnJheShfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoZXJyb3JzKSksIF9fcmVhZChlcnIuZXJyb3JzKSk7CiAgICAgICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICAgICAgZXJyb3JzLnB1c2goZXJyKTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBjYXRjaCAoZV8yXzEpIHsKICAgICAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgICBpZiAoX2ZpbmFsaXplcnNfMV8xICYmICFfZmluYWxpemVyc18xXzEuZG9uZSAmJiAoX2IgPSBfZmluYWxpemVyc18xLnJldHVybikpIF9iLmNhbGwoX2ZpbmFsaXplcnNfMSk7CiAgICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChlcnJvcnMpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFVuc3Vic2NyaXB0aW9uRXJyb3IoZXJyb3JzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmlwdGlvbjIucHJvdG90eXBlLmFkZCA9IGZ1bmN0aW9uKHRlYXJkb3duKSB7CiAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgaWYgKHRlYXJkb3duICYmIHRlYXJkb3duICE9PSB0aGlzKSB7CiAgICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgICAgZXhlY0ZpbmFsaXplcih0ZWFyZG93bik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBpZiAodGVhcmRvd24gaW5zdGFuY2VvZiBTdWJzY3JpcHRpb24yKSB7CiAgICAgICAgICAgICAgaWYgKHRlYXJkb3duLmNsb3NlZCB8fCB0ZWFyZG93bi5faGFzUGFyZW50KHRoaXMpKSB7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHRlYXJkb3duLl9hZGRQYXJlbnQodGhpcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgKHRoaXMuX2ZpbmFsaXplcnMgPSAoX2ExNCA9IHRoaXMuX2ZpbmFsaXplcnMpICE9PSBudWxsICYmIF9hMTQgIT09IHZvaWQgMCA/IF9hMTQgOiBbXSkucHVzaCh0ZWFyZG93bik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5faGFzUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgcmV0dXJuIF9wYXJlbnRhZ2UgPT09IHBhcmVudCB8fCBBcnJheS5pc0FycmF5KF9wYXJlbnRhZ2UpICYmIF9wYXJlbnRhZ2UuaW5jbHVkZXMocGFyZW50KTsKICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUuX2FkZFBhcmVudCA9IGZ1bmN0aW9uKHBhcmVudCkgewogICAgICAgIHZhciBfcGFyZW50YWdlID0gdGhpcy5fcGFyZW50YWdlOwogICAgICAgIHRoaXMuX3BhcmVudGFnZSA9IEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkgPyAoX3BhcmVudGFnZS5wdXNoKHBhcmVudCksIF9wYXJlbnRhZ2UpIDogX3BhcmVudGFnZSA/IFtfcGFyZW50YWdlLCBwYXJlbnRdIDogcGFyZW50OwogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLnByb3RvdHlwZS5fcmVtb3ZlUGFyZW50ID0gZnVuY3Rpb24ocGFyZW50KSB7CiAgICAgICAgdmFyIF9wYXJlbnRhZ2UgPSB0aGlzLl9wYXJlbnRhZ2U7CiAgICAgICAgaWYgKF9wYXJlbnRhZ2UgPT09IHBhcmVudCkgewogICAgICAgICAgdGhpcy5fcGFyZW50YWdlID0gbnVsbDsKICAgICAgICB9IGVsc2UgaWYgKEFycmF5LmlzQXJyYXkoX3BhcmVudGFnZSkpIHsKICAgICAgICAgIGFyclJlbW92ZShfcGFyZW50YWdlLCBwYXJlbnQpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaXB0aW9uMi5wcm90b3R5cGUucmVtb3ZlID0gZnVuY3Rpb24odGVhcmRvd24pIHsKICAgICAgICB2YXIgX2ZpbmFsaXplcnMgPSB0aGlzLl9maW5hbGl6ZXJzOwogICAgICAgIF9maW5hbGl6ZXJzICYmIGFyclJlbW92ZShfZmluYWxpemVycywgdGVhcmRvd24pOwogICAgICAgIGlmICh0ZWFyZG93biBpbnN0YW5jZW9mIFN1YnNjcmlwdGlvbjIpIHsKICAgICAgICAgIHRlYXJkb3duLl9yZW1vdmVQYXJlbnQodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpcHRpb24yLkVNUFRZID0gKGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBlbXB0eTQgPSBuZXcgU3Vic2NyaXB0aW9uMigpOwogICAgICAgIGVtcHR5NC5jbG9zZWQgPSB0cnVlOwogICAgICAgIHJldHVybiBlbXB0eTQ7CiAgICAgIH0pKCk7CiAgICAgIHJldHVybiBTdWJzY3JpcHRpb24yOwogICAgfSkoKTsKICAgIEVNUFRZX1NVQlNDUklQVElPTiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2NvbmZpZy5qcwp2YXIgY29uZmlnOwp2YXIgaW5pdF9jb25maWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9jb25maWcuanMiKCkgewogICAgY29uZmlnID0gewogICAgICBvblVuaGFuZGxlZEVycm9yOiBudWxsLAogICAgICBvblN0b3BwZWROb3RpZmljYXRpb246IG51bGwsCiAgICAgIFByb21pc2U6IHZvaWQgMCwKICAgICAgdXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZzogZmFsc2UsCiAgICAgIHVzZURlcHJlY2F0ZWROZXh0Q29udGV4dDogZmFsc2UKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvdGltZW91dFByb3ZpZGVyLmpzCnZhciB0aW1lb3V0UHJvdmlkZXI7CnZhciBpbml0X3RpbWVvdXRQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci90aW1lb3V0UHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIHRpbWVvdXRQcm92aWRlciA9IHsKICAgICAgc2V0VGltZW91dDogZnVuY3Rpb24oaGFuZGxlcjIsIHRpbWVvdXQyKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDI7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICB9CiAgICAgICAgdmFyIGRlbGVnYXRlID0gdGltZW91dFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0VGltZW91dCkgewogICAgICAgICAgcmV0dXJuIGRlbGVnYXRlLnNldFRpbWVvdXQuYXBwbHkoZGVsZWdhdGUsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gc2V0VGltZW91dC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhclRpbWVvdXQ6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSB0aW1lb3V0UHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLmNsZWFyVGltZW91dCkgfHwgY2xlYXJUaW1lb3V0KShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcmVwb3J0VW5oYW5kbGVkRXJyb3IuanMKZnVuY3Rpb24gcmVwb3J0VW5oYW5kbGVkRXJyb3IoZXJyKSB7CiAgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICB2YXIgb25VbmhhbmRsZWRFcnJvciA9IGNvbmZpZy5vblVuaGFuZGxlZEVycm9yOwogICAgaWYgKG9uVW5oYW5kbGVkRXJyb3IpIHsKICAgICAgb25VbmhhbmRsZWRFcnJvcihlcnIpOwogICAgfSBlbHNlIHsKICAgICAgdGhyb3cgZXJyOwogICAgfQogIH0pOwp9CnZhciBpbml0X3JlcG9ydFVuaGFuZGxlZEVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9yZXBvcnRVbmhhbmRsZWRFcnJvci5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbm9vcC5qcwpmdW5jdGlvbiBub29wKCkgewp9CnZhciBpbml0X25vb3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL25vb3AuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uRmFjdG9yaWVzLmpzCmZ1bmN0aW9uIGVycm9yTm90aWZpY2F0aW9uKGVycm9yKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiRSIsIHZvaWQgMCwgZXJyb3IpOwp9CmZ1bmN0aW9uIG5leHROb3RpZmljYXRpb24odmFsdWUyKSB7CiAgcmV0dXJuIGNyZWF0ZU5vdGlmaWNhdGlvbigiTiIsIHZhbHVlMiwgdm9pZCAwKTsKfQpmdW5jdGlvbiBjcmVhdGVOb3RpZmljYXRpb24oa2luZCwgdmFsdWUyLCBlcnJvcikgewogIHJldHVybiB7CiAgICBraW5kLAogICAgdmFsdWU6IHZhbHVlMiwKICAgIGVycm9yCiAgfTsKfQp2YXIgQ09NUExFVEVfTk9USUZJQ0FUSU9OOwp2YXIgaW5pdF9Ob3RpZmljYXRpb25GYWN0b3JpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Ob3RpZmljYXRpb25GYWN0b3JpZXMuanMiKCkgewogICAgQ09NUExFVEVfTk9USUZJQ0FUSU9OID0gKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gY3JlYXRlTm90aWZpY2F0aW9uKCJDIiwgdm9pZCAwLCB2b2lkIDApOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvZXJyb3JDb250ZXh0LmpzCmZ1bmN0aW9uIGVycm9yQ29udGV4dChjYikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZykgewogICAgdmFyIGlzUm9vdCA9ICFjb250ZXh0OwogICAgaWYgKGlzUm9vdCkgewogICAgICBjb250ZXh0ID0geyBlcnJvclRocm93bjogZmFsc2UsIGVycm9yOiBudWxsIH07CiAgICB9CiAgICBjYigpOwogICAgaWYgKGlzUm9vdCkgewogICAgICB2YXIgX2ExNCA9IGNvbnRleHQsIGVycm9yVGhyb3duID0gX2ExNC5lcnJvclRocm93biwgZXJyb3IgPSBfYTE0LmVycm9yOwogICAgICBjb250ZXh0ID0gbnVsbDsKICAgICAgaWYgKGVycm9yVGhyb3duKSB7CiAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgIH0KICAgIH0KICB9IGVsc2UgewogICAgY2IoKTsKICB9Cn0KZnVuY3Rpb24gY2FwdHVyZUVycm9yKGVycikgewogIGlmIChjb25maWcudXNlRGVwcmVjYXRlZFN5bmNocm9ub3VzRXJyb3JIYW5kbGluZyAmJiBjb250ZXh0KSB7CiAgICBjb250ZXh0LmVycm9yVGhyb3duID0gdHJ1ZTsKICAgIGNvbnRleHQuZXJyb3IgPSBlcnI7CiAgfQp9CnZhciBjb250ZXh0Owp2YXIgaW5pdF9lcnJvckNvbnRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2Vycm9yQ29udGV4dC5qcyIoKSB7CiAgICBpbml0X2NvbmZpZygpOwogICAgY29udGV4dCA9IG51bGw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGJpbmQoZm4sIHRoaXNBcmcpIHsKICByZXR1cm4gX2JpbmQuY2FsbChmbiwgdGhpc0FyZyk7Cn0KZnVuY3Rpb24gaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpIHsKICBpZiAoY29uZmlnLnVzZURlcHJlY2F0ZWRTeW5jaHJvbm91c0Vycm9ySGFuZGxpbmcpIHsKICAgIGNhcHR1cmVFcnJvcihlcnJvcik7CiAgfSBlbHNlIHsKICAgIHJlcG9ydFVuaGFuZGxlZEVycm9yKGVycm9yKTsKICB9Cn0KZnVuY3Rpb24gZGVmYXVsdEVycm9ySGFuZGxlcihlcnIpIHsKICB0aHJvdyBlcnI7Cn0KZnVuY3Rpb24gaGFuZGxlU3RvcHBlZE5vdGlmaWNhdGlvbihub3RpZmljYXRpb24sIHN1YnNjcmliZXIpIHsKICB2YXIgb25TdG9wcGVkTm90aWZpY2F0aW9uID0gY29uZmlnLm9uU3RvcHBlZE5vdGlmaWNhdGlvbjsKICBvblN0b3BwZWROb3RpZmljYXRpb24gJiYgdGltZW91dFByb3ZpZGVyLnNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICByZXR1cm4gb25TdG9wcGVkTm90aWZpY2F0aW9uKG5vdGlmaWNhdGlvbiwgc3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIFN1YnNjcmliZXIsIF9iaW5kLCBDb25zdW1lck9ic2VydmVyLCBTYWZlU3Vic2NyaWJlciwgRU1QVFlfT0JTRVJWRVI7CnZhciBpbml0X1N1YnNjcmliZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJzY3JpYmVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBpbml0X2NvbmZpZygpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X05vdGlmaWNhdGlvbkZhY3RvcmllcygpOwogICAgaW5pdF90aW1lb3V0UHJvdmlkZXIoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3Vic2NyaWJlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YnNjcmliZXIyKGRlc3RpbmF0aW9uKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgICBfdGhpcy5pc1N0b3BwZWQgPSBmYWxzZTsKICAgICAgICBpZiAoZGVzdGluYXRpb24pIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gZGVzdGluYXRpb247CiAgICAgICAgICBpZiAoaXNTdWJzY3JpcHRpb24oZGVzdGluYXRpb24pKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmFkZChfdGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF90aGlzLmRlc3RpbmF0aW9uID0gRU1QVFlfT0JTRVJWRVI7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBTdWJzY3JpYmVyMi5jcmVhdGUgPSBmdW5jdGlvbihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBTYWZlU3Vic2NyaWJlcihuZXh0MiwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIGhhbmRsZVN0b3BwZWROb3RpZmljYXRpb24obmV4dE5vdGlmaWNhdGlvbih2YWx1ZTIpLCB0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5fbmV4dCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKGVycm9yTm90aWZpY2F0aW9uKGVyciksIHRoaXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICB0aGlzLl9lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICBoYW5kbGVTdG9wcGVkTm90aWZpY2F0aW9uKENPTVBMRVRFX05PVElGSUNBVElPTiwgdGhpcyk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgIHRoaXMuX2NvbXBsZXRlKCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uID0gbnVsbDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YnNjcmliZXIyLnByb3RvdHlwZS5fbmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIHRoaXMuZGVzdGluYXRpb24ubmV4dCh2YWx1ZTIpOwogICAgICB9OwogICAgICBTdWJzY3JpYmVyMi5wcm90b3R5cGUuX2Vycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMuZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgU3Vic2NyaWJlcjIucHJvdG90eXBlLl9jb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0aGlzLmRlc3RpbmF0aW9uLmNvbXBsZXRlKCk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBTdWJzY3JpYmVyMjsKICAgIH0pKFN1YnNjcmlwdGlvbik7CiAgICBfYmluZCA9IEZ1bmN0aW9uLnByb3RvdHlwZS5iaW5kOwogICAgQ29uc3VtZXJPYnNlcnZlciA9IChmdW5jdGlvbigpIHsKICAgICAgZnVuY3Rpb24gQ29uc3VtZXJPYnNlcnZlcjIocGFydGlhbE9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5wYXJ0aWFsT2JzZXJ2ZXIgPSBwYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgIH0KICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcGFydGlhbE9ic2VydmVyID0gdGhpcy5wYXJ0aWFsT2JzZXJ2ZXI7CiAgICAgICAgaWYgKHBhcnRpYWxPYnNlcnZlci5uZXh0KSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIubmV4dCh2YWx1ZTIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmVycm9yID0gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuZXJyb3IpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5lcnJvcihlcnIpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVVbmhhbmRsZWRFcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQ29uc3VtZXJPYnNlcnZlcjIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlciA9IHRoaXMucGFydGlhbE9ic2VydmVyOwogICAgICAgIGlmIChwYXJ0aWFsT2JzZXJ2ZXIuY29tcGxldGUpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHBhcnRpYWxPYnNlcnZlci5jb21wbGV0ZSgpOwogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgaGFuZGxlVW5oYW5kbGVkRXJyb3IoZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIENvbnN1bWVyT2JzZXJ2ZXIyOwogICAgfSkoKTsKICAgIFNhZmVTdWJzY3JpYmVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU2FmZVN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBTYWZlU3Vic2NyaWJlcjIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgdmFyIHBhcnRpYWxPYnNlcnZlcjsKICAgICAgICBpZiAoaXNGdW5jdGlvbihvYnNlcnZlck9yTmV4dCkgfHwgIW9ic2VydmVyT3JOZXh0KSB7CiAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSB7CiAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0ICE9PSBudWxsICYmIG9ic2VydmVyT3JOZXh0ICE9PSB2b2lkIDAgPyBvYnNlcnZlck9yTmV4dCA6IHZvaWQgMCwKICAgICAgICAgICAgZXJyb3I6IGVycm9yICE9PSBudWxsICYmIGVycm9yICE9PSB2b2lkIDAgPyBlcnJvciA6IHZvaWQgMCwKICAgICAgICAgICAgY29tcGxldGU6IGNvbXBsZXRlICE9PSBudWxsICYmIGNvbXBsZXRlICE9PSB2b2lkIDAgPyBjb21wbGV0ZSA6IHZvaWQgMAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdmFyIGNvbnRleHRfMTsKICAgICAgICAgIGlmIChfdGhpcyAmJiBjb25maWcudXNlRGVwcmVjYXRlZE5leHRDb250ZXh0KSB7CiAgICAgICAgICAgIGNvbnRleHRfMSA9IE9iamVjdC5jcmVhdGUob2JzZXJ2ZXJPck5leHQpOwogICAgICAgICAgICBjb250ZXh0XzEudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICByZXR1cm4gX3RoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgICAgcGFydGlhbE9ic2VydmVyID0gewogICAgICAgICAgICAgIG5leHQ6IG9ic2VydmVyT3JOZXh0Lm5leHQgJiYgYmluZChvYnNlcnZlck9yTmV4dC5uZXh0LCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGVycm9yOiBvYnNlcnZlck9yTmV4dC5lcnJvciAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmVycm9yLCBjb250ZXh0XzEpLAogICAgICAgICAgICAgIGNvbXBsZXRlOiBvYnNlcnZlck9yTmV4dC5jb21wbGV0ZSAmJiBiaW5kKG9ic2VydmVyT3JOZXh0LmNvbXBsZXRlLCBjb250ZXh0XzEpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBwYXJ0aWFsT2JzZXJ2ZXIgPSBvYnNlcnZlck9yTmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBuZXcgQ29uc3VtZXJPYnNlcnZlcihwYXJ0aWFsT2JzZXJ2ZXIpOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICByZXR1cm4gU2FmZVN1YnNjcmliZXIyOwogICAgfSkoU3Vic2NyaWJlcik7CiAgICBFTVBUWV9PQlNFUlZFUiA9IHsKICAgICAgY2xvc2VkOiB0cnVlLAogICAgICBuZXh0OiBub29wLAogICAgICBlcnJvcjogZGVmYXVsdEVycm9ySGFuZGxlciwKICAgICAgY29tcGxldGU6IG5vb3AKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvb2JzZXJ2YWJsZS5qcwp2YXIgb2JzZXJ2YWJsZTsKdmFyIGluaXRfb2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3N5bWJvbC9vYnNlcnZhYmxlLmpzIigpIHsKICAgIG9ic2VydmFibGUgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5vYnNlcnZhYmxlIHx8ICJAQG9ic2VydmFibGUiOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaWRlbnRpdHkuanMKZnVuY3Rpb24gaWRlbnRpdHkoeDMpIHsKICByZXR1cm4geDM7Cn0KdmFyIGluaXRfaWRlbnRpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lkZW50aXR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvcGlwZS5qcwpmdW5jdGlvbiBwaXBlKCkgewogIHZhciBmbnMgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgZm5zW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBwaXBlRnJvbUFycmF5KGZucyk7Cn0KZnVuY3Rpb24gcGlwZUZyb21BcnJheShmbnMpIHsKICBpZiAoZm5zLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIGlkZW50aXR5OwogIH0KICBpZiAoZm5zLmxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIGZuc1swXTsKICB9CiAgcmV0dXJuIGZ1bmN0aW9uIHBpcGVkKGlucHV0KSB7CiAgICByZXR1cm4gZm5zLnJlZHVjZShmdW5jdGlvbihwcmV2LCBmbikgewogICAgICByZXR1cm4gZm4ocHJldik7CiAgICB9LCBpbnB1dCk7CiAgfTsKfQp2YXIgaW5pdF9waXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9waXBlLmpzIigpIHsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMKZnVuY3Rpb24gZ2V0UHJvbWlzZUN0b3IocHJvbWlzZUN0b3IpIHsKICB2YXIgX2ExNDsKICByZXR1cm4gKF9hMTQgPSBwcm9taXNlQ3RvciAhPT0gbnVsbCAmJiBwcm9taXNlQ3RvciAhPT0gdm9pZCAwID8gcHJvbWlzZUN0b3IgOiBjb25maWcuUHJvbWlzZSkgIT09IG51bGwgJiYgX2ExNCAhPT0gdm9pZCAwID8gX2ExNCA6IFByb21pc2U7Cn0KZnVuY3Rpb24gaXNPYnNlcnZlcih2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyICYmIGlzRnVuY3Rpb24odmFsdWUyLm5leHQpICYmIGlzRnVuY3Rpb24odmFsdWUyLmVycm9yKSAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5jb21wbGV0ZSk7Cn0KZnVuY3Rpb24gaXNTdWJzY3JpYmVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgdmFsdWUyIGluc3RhbmNlb2YgU3Vic2NyaWJlciB8fCBpc09ic2VydmVyKHZhbHVlMikgJiYgaXNTdWJzY3JpcHRpb24odmFsdWUyKTsKfQp2YXIgT2JzZXJ2YWJsZTsKdmFyIGluaXRfT2JzZXJ2YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL09ic2VydmFibGUuanMiKCkgewogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X3BpcGUoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBPYnNlcnZhYmxlID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKSB7CiAgICAgICAgaWYgKHN1YnNjcmliZTIpIHsKICAgICAgICAgIHRoaXMuX3N1YnNjcmliZSA9IHN1YnNjcmliZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZTIoKTsKICAgICAgICBvYnNlcnZhYmxlMi5zb3VyY2UgPSB0aGlzOwogICAgICAgIG9ic2VydmFibGUyLm9wZXJhdG9yID0gb3BlcmF0b3I7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuc3Vic2NyaWJlID0gZnVuY3Rpb24ob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIHN1YnNjcmliZXIgPSBpc1N1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQpID8gb2JzZXJ2ZXJPck5leHQgOiBuZXcgU2FmZVN1YnNjcmliZXIob2JzZXJ2ZXJPck5leHQsIGVycm9yLCBjb21wbGV0ZSk7CiAgICAgICAgZXJyb3JDb250ZXh0KGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIF9hMTQgPSBfdGhpcywgb3BlcmF0b3IgPSBfYTE0Lm9wZXJhdG9yLCBzb3VyY2UgPSBfYTE0LnNvdXJjZTsKICAgICAgICAgIHN1YnNjcmliZXIuYWRkKG9wZXJhdG9yID8gb3BlcmF0b3IuY2FsbChzdWJzY3JpYmVyLCBzb3VyY2UpIDogc291cmNlID8gX3RoaXMuX3N1YnNjcmliZShzdWJzY3JpYmVyKSA6IF90aGlzLl90cnlTdWJzY3JpYmUoc3Vic2NyaWJlcikpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzdWJzY3JpYmVyOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5wcm90b3R5cGUuX3RyeVN1YnNjcmliZSA9IGZ1bmN0aW9uKHNpbmspIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIHRoaXMuX3N1YnNjcmliZShzaW5rKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHNpbmsuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24obmV4dDIsIHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciBzdWJzY3JpYmVyID0gbmV3IFNhZmVTdWJzY3JpYmVyKHsKICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIG5leHQyKHZhbHVlMik7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICByZWplY3QoZXJyKTsKICAgICAgICAgICAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGVycm9yOiByZWplY3QsCiAgICAgICAgICAgIGNvbXBsZXRlOiByZXNvbHZlMgogICAgICAgICAgfSk7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5fc3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHJldHVybiAoX2ExNCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlW29ic2VydmFibGVdID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIE9ic2VydmFibGUyLnByb3RvdHlwZS5waXBlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG9wZXJhdGlvbnMgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgb3BlcmF0aW9uc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGlwZUZyb21BcnJheShvcGVyYXRpb25zKSh0aGlzKTsKICAgICAgfTsKICAgICAgT2JzZXJ2YWJsZTIucHJvdG90eXBlLnRvUHJvbWlzZSA9IGZ1bmN0aW9uKHByb21pc2VDdG9yKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBwcm9taXNlQ3RvciA9IGdldFByb21pc2VDdG9yKHByb21pc2VDdG9yKTsKICAgICAgICByZXR1cm4gbmV3IHByb21pc2VDdG9yKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgICBfdGhpcy5zdWJzY3JpYmUoZnVuY3Rpb24oeDMpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbHVlMiA9IHgzOwogICAgICAgICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgIHJldHVybiByZWplY3QoZXJyKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gcmVzb2x2ZTIodmFsdWUyKTsKICAgICAgICAgIH0pOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBPYnNlcnZhYmxlMi5jcmVhdGUgPSBmdW5jdGlvbihzdWJzY3JpYmUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlMihzdWJzY3JpYmUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIE9ic2VydmFibGUyOwogICAgfSkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvbGlmdC5qcwpmdW5jdGlvbiBoYXNMaWZ0KHNvdXJjZSkgewogIHJldHVybiBpc0Z1bmN0aW9uKHNvdXJjZSA9PT0gbnVsbCB8fCBzb3VyY2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHNvdXJjZS5saWZ0KTsKfQpmdW5jdGlvbiBvcGVyYXRlKGluaXQpIHsKICByZXR1cm4gZnVuY3Rpb24oc291cmNlKSB7CiAgICBpZiAoaGFzTGlmdChzb3VyY2UpKSB7CiAgICAgIHJldHVybiBzb3VyY2UubGlmdChmdW5jdGlvbihsaWZ0ZWRTb3VyY2UpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGluaXQobGlmdGVkU291cmNlLCB0aGlzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHRoaXMuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5hYmxlIHRvIGxpZnQgdW5rbm93biBPYnNlcnZhYmxlIHR5cGUiKTsKICB9Owp9CnZhciBpbml0X2xpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2xpZnQuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvT3BlcmF0b3JTdWJzY3JpYmVyLmpzCmZ1bmN0aW9uIGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihkZXN0aW5hdGlvbiwgb25OZXh0LCBvbkNvbXBsZXRlLCBvbkVycm9yLCBvbkZpbmFsaXplKSB7CiAgcmV0dXJuIG5ldyBPcGVyYXRvclN1YnNjcmliZXIoZGVzdGluYXRpb24sIG9uTmV4dCwgb25Db21wbGV0ZSwgb25FcnJvciwgb25GaW5hbGl6ZSk7Cn0KdmFyIE9wZXJhdG9yU3Vic2NyaWJlcjsKdmFyIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL09wZXJhdG9yU3Vic2NyaWJlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJzY3JpYmVyKCk7CiAgICBPcGVyYXRvclN1YnNjcmliZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhPcGVyYXRvclN1YnNjcmliZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBPcGVyYXRvclN1YnNjcmliZXIyKGRlc3RpbmF0aW9uLCBvbk5leHQsIG9uQ29tcGxldGUsIG9uRXJyb3IsIG9uRmluYWxpemUsIHNob3VsZFVuc3Vic2NyaWJlKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgZGVzdGluYXRpb24pIHx8IHRoaXM7CiAgICAgICAgX3RoaXMub25GaW5hbGl6ZSA9IG9uRmluYWxpemU7CiAgICAgICAgX3RoaXMuc2hvdWxkVW5zdWJzY3JpYmUgPSBzaG91bGRVbnN1YnNjcmliZTsKICAgICAgICBfdGhpcy5fbmV4dCA9IG9uTmV4dCA/IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgb25OZXh0KHZhbHVlMik7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fbmV4dDsKICAgICAgICBfdGhpcy5fZXJyb3IgPSBvbkVycm9yID8gZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkVycm9yKGVycik7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGRlc3RpbmF0aW9uLmVycm9yKGVycjIpOwogICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgdGhpcy51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgIH0gOiBfc3VwZXIucHJvdG90eXBlLl9lcnJvcjsKICAgICAgICBfdGhpcy5fY29tcGxldGUgPSBvbkNvbXBsZXRlID8gZnVuY3Rpb24oKSB7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBvbkNvbXBsZXRlKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgZGVzdGluYXRpb24uZXJyb3IoZXJyKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIHRoaXMudW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICB9IDogX3N1cGVyLnByb3RvdHlwZS5fY29tcGxldGU7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIE9wZXJhdG9yU3Vic2NyaWJlcjIucHJvdG90eXBlLnVuc3Vic2NyaWJlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQ7CiAgICAgICAgaWYgKCF0aGlzLnNob3VsZFVuc3Vic2NyaWJlIHx8IHRoaXMuc2hvdWxkVW5zdWJzY3JpYmUoKSkgewogICAgICAgICAgdmFyIGNsb3NlZF8xID0gdGhpcy5jbG9zZWQ7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLnVuc3Vic2NyaWJlLmNhbGwodGhpcyk7CiAgICAgICAgICAhY2xvc2VkXzEgJiYgKChfYTE0ID0gdGhpcy5vbkZpbmFsaXplKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmNhbGwodGhpcykpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIE9wZXJhdG9yU3Vic2NyaWJlcjI7CiAgICB9KShTdWJzY3JpYmVyKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWZDb3VudC5qcwpmdW5jdGlvbiByZWZDb3VudCgpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBjb25uZWN0aW9uID0gbnVsbDsKICAgIHNvdXJjZS5fcmVmQ291bnQrKzsKICAgIHZhciByZWZDb3VudGVyID0gY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIHZvaWQgMCwgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXNvdXJjZSB8fCBzb3VyY2UuX3JlZkNvdW50IDw9IDAgfHwgMCA8IC0tc291cmNlLl9yZWZDb3VudCkgewogICAgICAgIGNvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB2YXIgc2hhcmVkQ29ubmVjdGlvbiA9IHNvdXJjZS5fY29ubmVjdGlvbjsKICAgICAgdmFyIGNvbm4gPSBjb25uZWN0aW9uOwogICAgICBjb25uZWN0aW9uID0gbnVsbDsKICAgICAgaWYgKHNoYXJlZENvbm5lY3Rpb24gJiYgKCFjb25uIHx8IHNoYXJlZENvbm5lY3Rpb24gPT09IGNvbm4pKSB7CiAgICAgICAgc2hhcmVkQ29ubmVjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShyZWZDb3VudGVyKTsKICAgIGlmICghcmVmQ291bnRlci5jbG9zZWQpIHsKICAgICAgY29ubmVjdGlvbiA9IHNvdXJjZS5jb25uZWN0KCk7CiAgICB9CiAgfSk7Cn0KdmFyIGluaXRfcmVmQ291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVmQ291bnQuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMKdmFyIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTsKdmFyIGluaXRfQ29ubmVjdGFibGVPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9Db25uZWN0YWJsZU9ic2VydmFibGUuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2xpZnQoKTsKICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZSA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIoc291cmNlLCBzdWJqZWN0RmFjdG9yeSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuc291cmNlID0gc291cmNlOwogICAgICAgIF90aGlzLnN1YmplY3RGYWN0b3J5ID0gc3ViamVjdEZhY3Rvcnk7CiAgICAgICAgX3RoaXMuX3N1YmplY3QgPSBudWxsOwogICAgICAgIF90aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgX3RoaXMuX2Nvbm5lY3Rpb24gPSBudWxsOwogICAgICAgIGlmIChoYXNMaWZ0KHNvdXJjZSkpIHsKICAgICAgICAgIF90aGlzLmxpZnQgPSBzb3VyY2UubGlmdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0U3ViamVjdCgpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgQ29ubmVjdGFibGVPYnNlcnZhYmxlMi5wcm90b3R5cGUuZ2V0U3ViamVjdCA9IGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBzdWJqZWN0ID0gdGhpcy5fc3ViamVjdDsKICAgICAgICBpZiAoIXN1YmplY3QgfHwgc3ViamVjdC5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3N1YmplY3QgPSB0aGlzLnN1YmplY3RGYWN0b3J5KCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLl9zdWJqZWN0OwogICAgICB9OwogICAgICBDb25uZWN0YWJsZU9ic2VydmFibGUyLnByb3RvdHlwZS5fdGVhcmRvd24gPSBmdW5jdGlvbigpIHsKICAgICAgICB0aGlzLl9yZWZDb3VudCA9IDA7CiAgICAgICAgdmFyIF9jb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICB0aGlzLl9zdWJqZWN0ID0gdGhpcy5fY29ubmVjdGlvbiA9IG51bGw7CiAgICAgICAgX2Nvbm5lY3Rpb24gPT09IG51bGwgfHwgX2Nvbm5lY3Rpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jb25uZWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLmNvbm5lY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIHZhciBjb25uZWN0aW9uID0gdGhpcy5fY29ubmVjdGlvbjsKICAgICAgICBpZiAoIWNvbm5lY3Rpb24pIHsKICAgICAgICAgIGNvbm5lY3Rpb24gPSB0aGlzLl9jb25uZWN0aW9uID0gbmV3IFN1YnNjcmlwdGlvbigpOwogICAgICAgICAgdmFyIHN1YmplY3RfMSA9IHRoaXMuZ2V0U3ViamVjdCgpOwogICAgICAgICAgY29ubmVjdGlvbi5hZGQodGhpcy5zb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJqZWN0XzEsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgICBzdWJqZWN0XzEuY29tcGxldGUoKTsKICAgICAgICAgIH0sIGZ1bmN0aW9uKGVycikgewogICAgICAgICAgICBfdGhpcy5fdGVhcmRvd24oKTsKICAgICAgICAgICAgc3ViamVjdF8xLmVycm9yKGVycik7CiAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgcmV0dXJuIF90aGlzLl90ZWFyZG93bigpOwogICAgICAgICAgfSkpKTsKICAgICAgICAgIGlmIChjb25uZWN0aW9uLmNsb3NlZCkgewogICAgICAgICAgICB0aGlzLl9jb25uZWN0aW9uID0gbnVsbDsKICAgICAgICAgICAgY29ubmVjdGlvbiA9IFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbm5lY3Rpb247CiAgICAgIH07CiAgICAgIENvbm5lY3RhYmxlT2JzZXJ2YWJsZTIucHJvdG90eXBlLnJlZkNvdW50ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIHJlZkNvdW50KCkodGhpcyk7CiAgICAgIH07CiAgICAgIHJldHVybiBDb25uZWN0YWJsZU9ic2VydmFibGUyOwogICAgfSkoT2JzZXJ2YWJsZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlci5qcwp2YXIgcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfcGVyZm9ybWFuY2VUaW1lc3RhbXBQcm92aWRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmpzIigpIHsKICAgIHBlcmZvcm1hbmNlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyLmRlbGVnYXRlIHx8IHBlcmZvcm1hbmNlKS5ub3coKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9hbmltYXRpb25GcmFtZVByb3ZpZGVyLmpzCnZhciBhbmltYXRpb25GcmFtZVByb3ZpZGVyOwp2YXIgaW5pdF9hbmltYXRpb25GcmFtZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3Vic2NyaXB0aW9uKCk7CiAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyID0gewogICAgICBzY2hlZHVsZTogZnVuY3Rpb24oY2FsbGJhY2spIHsKICAgICAgICB2YXIgcmVxdWVzdCA9IHJlcXVlc3RBbmltYXRpb25GcmFtZTsKICAgICAgICB2YXIgY2FuY2VsID0gY2FuY2VsQW5pbWF0aW9uRnJhbWU7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gYW5pbWF0aW9uRnJhbWVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICBpZiAoZGVsZWdhdGUpIHsKICAgICAgICAgIHJlcXVlc3QgPSBkZWxlZ2F0ZS5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU7CiAgICAgICAgICBjYW5jZWwgPSBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZTsKICAgICAgICB9CiAgICAgICAgdmFyIGhhbmRsZTMgPSByZXF1ZXN0KGZ1bmN0aW9uKHRpbWVzdGFtcDIpIHsKICAgICAgICAgIGNhbmNlbCA9IHZvaWQgMDsKICAgICAgICAgIGNhbGxiYWNrKHRpbWVzdGFtcDIpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGNhbmNlbCA9PT0gbnVsbCB8fCBjYW5jZWwgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGNhbmNlbChoYW5kbGUzKTsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIuZGVsZWdhdGU7CiAgICAgICAgcmV0dXJuICgoZGVsZWdhdGUgPT09IG51bGwgfHwgZGVsZWdhdGUgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGRlbGVnYXRlLnJlcXVlc3RBbmltYXRpb25GcmFtZSkgfHwgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKS5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjYW5jZWxBbmltYXRpb25GcmFtZTogZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgICAgICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5jYW5jZWxBbmltYXRpb25GcmFtZSkgfHwgY2FuY2VsQW5pbWF0aW9uRnJhbWUpLmFwcGx5KHZvaWQgMCwgX19zcHJlYWRBcnJheShbXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2RvbS9hbmltYXRpb25GcmFtZXMuanMKZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzKHRpbWVzdGFtcFByb3ZpZGVyKSB7CiAgcmV0dXJuIHRpbWVzdGFtcFByb3ZpZGVyID8gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgOiBERUZBVUxUX0FOSU1BVElPTl9GUkFNRVM7Cn0KZnVuY3Rpb24gYW5pbWF0aW9uRnJhbWVzRmFjdG9yeSh0aW1lc3RhbXBQcm92aWRlcikgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgcHJvdmlkZXIgPSB0aW1lc3RhbXBQcm92aWRlciB8fCBwZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyOwogICAgdmFyIHN0YXJ0ID0gcHJvdmlkZXIubm93KCk7CiAgICB2YXIgaWQgPSAwOwogICAgdmFyIHJ1biA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgaWQgPSBhbmltYXRpb25GcmFtZVByb3ZpZGVyLnJlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbih0aW1lc3RhbXAyKSB7CiAgICAgICAgICBpZCA9IDA7CiAgICAgICAgICB2YXIgbm93MiA9IHByb3ZpZGVyLm5vdygpOwogICAgICAgICAgc3Vic2NyaWJlci5uZXh0KHsKICAgICAgICAgICAgdGltZXN0YW1wOiB0aW1lc3RhbXBQcm92aWRlciA/IG5vdzIgOiB0aW1lc3RhbXAyLAogICAgICAgICAgICBlbGFwc2VkOiBub3cyIC0gc3RhcnQKICAgICAgICAgIH0pOwogICAgICAgICAgcnVuKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBydW4oKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgaWYgKGlkKSB7CiAgICAgICAgYW5pbWF0aW9uRnJhbWVQcm92aWRlci5jYW5jZWxBbmltYXRpb25GcmFtZShpZCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KdmFyIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUzsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kb20vYW5pbWF0aW9uRnJhbWVzLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9wZXJmb3JtYW5jZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIERFRkFVTFRfQU5JTUFUSU9OX0ZSQU1FUyA9IGFuaW1hdGlvbkZyYW1lc0ZhY3RvcnkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMKdmFyIE9iamVjdFVuc3Vic2NyaWJlZEVycm9yOwp2YXIgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBPYmplY3RVbnN1YnNjcmliZWRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBPYmplY3RVbnN1YnNjcmliZWRFcnJvckltcGwoKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJPYmplY3RVbnN1YnNjcmliZWRFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gIm9iamVjdCB1bnN1YnNjcmliZWQiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TdWJqZWN0LmpzCnZhciBTdWJqZWN0LCBBbm9ueW1vdXNTdWJqZWN0Owp2YXIgaW5pdF9TdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfZXJyb3JDb250ZXh0KCk7CiAgICBTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFN1YmplY3QyKCkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuY2xvc2VkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgX3RoaXMub2JzZXJ2ZXJzID0gW107CiAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgX3RoaXMuaGFzRXJyb3IgPSBmYWxzZTsKICAgICAgICBfdGhpcy50aHJvd25FcnJvciA9IG51bGw7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5saWZ0ID0gZnVuY3Rpb24ob3BlcmF0b3IpIHsKICAgICAgICB2YXIgc3ViamVjdCA9IG5ldyBBbm9ueW1vdXNTdWJqZWN0KHRoaXMsIHRoaXMpOwogICAgICAgIHN1YmplY3Qub3BlcmF0b3IgPSBvcGVyYXRvcjsKICAgICAgICByZXR1cm4gc3ViamVjdDsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90aHJvd0lmQ2xvc2VkID0gZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgT2JqZWN0VW5zdWJzY3JpYmVkRXJyb3IoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgZV8xLCBfYTE0OwogICAgICAgICAgX3RoaXMuX3Rocm93SWZDbG9zZWQoKTsKICAgICAgICAgIGlmICghX3RoaXMuaXNTdG9wcGVkKSB7CiAgICAgICAgICAgIGlmICghX3RoaXMuY3VycmVudE9ic2VydmVycykgewogICAgICAgICAgICAgIF90aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBBcnJheS5mcm9tKF90aGlzLm9ic2VydmVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICBmb3IgKHZhciBfYiA9IF9fdmFsdWVzKF90aGlzLmN1cnJlbnRPYnNlcnZlcnMpLCBfYyA9IF9iLm5leHQoKTsgIV9jLmRvbmU7IF9jID0gX2IubmV4dCgpKSB7CiAgICAgICAgICAgICAgICB2YXIgb2JzZXJ2ZXIgPSBfYy52YWx1ZTsKICAgICAgICAgICAgICAgIG9ic2VydmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgaWYgKF9jICYmICFfYy5kb25lICYmIChfYTE0ID0gX2IucmV0dXJuKSkgX2ExNC5jYWxsKF9iKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgIGVycm9yQ29udGV4dChmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgICBpZiAoIV90aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICBfdGhpcy5oYXNFcnJvciA9IF90aGlzLmlzU3RvcHBlZCA9IHRydWU7CiAgICAgICAgICAgIF90aGlzLnRocm93bkVycm9yID0gZXJyOwogICAgICAgICAgICB2YXIgb2JzZXJ2ZXJzID0gX3RoaXMub2JzZXJ2ZXJzOwogICAgICAgICAgICB3aGlsZSAob2JzZXJ2ZXJzLmxlbmd0aCkgewogICAgICAgICAgICAgIG9ic2VydmVycy5zaGlmdCgpLmVycm9yKGVycik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBlcnJvckNvbnRleHQoZnVuY3Rpb24oKSB7CiAgICAgICAgICBfdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgICAgaWYgKCFfdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgICAgX3RoaXMuaXNTdG9wcGVkID0gdHJ1ZTsKICAgICAgICAgICAgdmFyIG9ic2VydmVycyA9IF90aGlzLm9ic2VydmVyczsKICAgICAgICAgICAgd2hpbGUgKG9ic2VydmVycy5sZW5ndGgpIHsKICAgICAgICAgICAgICBvYnNlcnZlcnMuc2hpZnQoKS5jb21wbGV0ZSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS51bnN1YnNjcmliZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gdGhpcy5jbG9zZWQgPSB0cnVlOwogICAgICAgIHRoaXMub2JzZXJ2ZXJzID0gdGhpcy5jdXJyZW50T2JzZXJ2ZXJzID0gbnVsbDsKICAgICAgfTsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KFN1YmplY3QyLnByb3RvdHlwZSwgIm9ic2VydmVkIiwgewogICAgICAgIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgICB2YXIgX2ExNDsKICAgICAgICAgIHJldHVybiAoKF9hMTQgPSB0aGlzLm9ic2VydmVycykgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5sZW5ndGgpID4gMDsKICAgICAgICB9LAogICAgICAgIGVudW1lcmFibGU6IGZhbHNlLAogICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZQogICAgICB9KTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLl90cnlTdWJzY3JpYmUuY2FsbCh0aGlzLCBzdWJzY3JpYmVyKTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdGhpcy5fdGhyb3dJZkNsb3NlZCgpOwogICAgICAgIHRoaXMuX2NoZWNrRmluYWxpemVkU3RhdHVzZXMoc3Vic2NyaWJlcik7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lubmVyU3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5wcm90b3R5cGUuX2lubmVyU3Vic2NyaWJlID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfdGhpcyA9IHRoaXM7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBoYXNFcnJvciA9IF9hMTQuaGFzRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBvYnNlcnZlcnMgPSBfYTE0Lm9ic2VydmVyczsKICAgICAgICBpZiAoaGFzRXJyb3IgfHwgaXNTdG9wcGVkKSB7CiAgICAgICAgICByZXR1cm4gRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRPYnNlcnZlcnMgPSBudWxsOwogICAgICAgIG9ic2VydmVycy5wdXNoKHN1YnNjcmliZXIpOwogICAgICAgIHJldHVybiBuZXcgU3Vic2NyaXB0aW9uKGZ1bmN0aW9uKCkgewogICAgICAgICAgX3RoaXMuY3VycmVudE9ic2VydmVycyA9IG51bGw7CiAgICAgICAgICBhcnJSZW1vdmUob2JzZXJ2ZXJzLCBzdWJzY3JpYmVyKTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgU3ViamVjdDIucHJvdG90eXBlLl9jaGVja0ZpbmFsaXplZFN0YXR1c2VzID0gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgICAgIHZhciBfYTE0ID0gdGhpcywgaGFzRXJyb3IgPSBfYTE0Lmhhc0Vycm9yLCB0aHJvd25FcnJvciA9IF9hMTQudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkOwogICAgICAgIGlmIChoYXNFcnJvcikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcih0aHJvd25FcnJvcik7CiAgICAgICAgfSBlbHNlIGlmIChpc1N0b3BwZWQpIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFN1YmplY3QyLnByb3RvdHlwZS5hc09ic2VydmFibGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgb2JzZXJ2YWJsZTIgPSBuZXcgT2JzZXJ2YWJsZSgpOwogICAgICAgIG9ic2VydmFibGUyLnNvdXJjZSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIG9ic2VydmFibGUyOwogICAgICB9OwogICAgICBTdWJqZWN0Mi5jcmVhdGUgPSBmdW5jdGlvbihkZXN0aW5hdGlvbiwgc291cmNlKSB7CiAgICAgICAgcmV0dXJuIG5ldyBBbm9ueW1vdXNTdWJqZWN0KGRlc3RpbmF0aW9uLCBzb3VyY2UpOwogICAgICB9OwogICAgICByZXR1cm4gU3ViamVjdDI7CiAgICB9KShPYnNlcnZhYmxlKTsKICAgIEFub255bW91c1N1YmplY3QgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBbm9ueW1vdXNTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQW5vbnltb3VzU3ViamVjdDIoZGVzdGluYXRpb24sIHNvdXJjZSkgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuZGVzdGluYXRpb24gPSBkZXN0aW5hdGlvbjsKICAgICAgICBfdGhpcy5zb3VyY2UgPSBzb3VyY2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFub255bW91c1N1YmplY3QyLnByb3RvdHlwZS5uZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIChfYiA9IChfYTE0ID0gdGhpcy5kZXN0aW5hdGlvbikgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5uZXh0KSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0LCB2YWx1ZTIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgICB2YXIgX2ExNCwgX2I7CiAgICAgICAgKF9iID0gKF9hMTQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmVycm9yKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0LCBlcnIpOwogICAgICB9OwogICAgICBBbm9ueW1vdXNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCwgX2I7CiAgICAgICAgKF9iID0gKF9hMTQgPSB0aGlzLmRlc3RpbmF0aW9uKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LmNvbXBsZXRlKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IuY2FsbChfYTE0KTsKICAgICAgfTsKICAgICAgQW5vbnltb3VzU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIF9hMTQsIF9iOwogICAgICAgIHJldHVybiAoX2IgPSAoX2ExNCA9IHRoaXMuc291cmNlKSA9PT0gbnVsbCB8fCBfYTE0ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYTE0LnN1YnNjcmliZShzdWJzY3JpYmVyKSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogRU1QVFlfU1VCU0NSSVBUSU9OOwogICAgICB9OwogICAgICByZXR1cm4gQW5vbnltb3VzU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL0JlaGF2aW9yU3ViamVjdC5qcwp2YXIgQmVoYXZpb3JTdWJqZWN0Owp2YXIgaW5pdF9CZWhhdmlvclN1YmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9CZWhhdmlvclN1YmplY3QuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU3ViamVjdCgpOwogICAgQmVoYXZpb3JTdWJqZWN0ID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQmVoYXZpb3JTdWJqZWN0MiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQmVoYXZpb3JTdWJqZWN0MihfdmFsdWUpIHsKICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzKSB8fCB0aGlzOwogICAgICAgIF90aGlzLl92YWx1ZSA9IF92YWx1ZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLCAidmFsdWUiLCB7CiAgICAgICAgZ2V0OiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmdldFZhbHVlKCk7CiAgICAgICAgfSwKICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZSwKICAgICAgICBjb25maWd1cmFibGU6IHRydWUKICAgICAgfSk7CiAgICAgIEJlaGF2aW9yU3ViamVjdDIucHJvdG90eXBlLl9zdWJzY3JpYmUgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgICAgdmFyIHN1YnNjcmlwdGlvbiA9IF9zdXBlci5wcm90b3R5cGUuX3N1YnNjcmliZS5jYWxsKHRoaXMsIHN1YnNjcmliZXIpOwogICAgICAgICFzdWJzY3JpcHRpb24uY2xvc2VkICYmIHN1YnNjcmliZXIubmV4dCh0aGlzLl92YWx1ZSk7CiAgICAgICAgcmV0dXJuIHN1YnNjcmlwdGlvbjsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUuZ2V0VmFsdWUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNC5oYXNFcnJvciwgdGhyb3duRXJyb3IgPSBfYTE0LnRocm93bkVycm9yLCBfdmFsdWUgPSBfYTE0Ll92YWx1ZTsKICAgICAgICBpZiAoaGFzRXJyb3IpIHsKICAgICAgICAgIHRocm93IHRocm93bkVycm9yOwogICAgICAgIH0KICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgcmV0dXJuIF92YWx1ZTsKICAgICAgfTsKICAgICAgQmVoYXZpb3JTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIHRoaXMuX3ZhbHVlID0gdmFsdWUyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIEJlaGF2aW9yU3ViamVjdDI7CiAgICB9KShTdWJqZWN0KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9kYXRlVGltZXN0YW1wUHJvdmlkZXIuanMKdmFyIGRhdGVUaW1lc3RhbXBQcm92aWRlcjsKdmFyIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2RhdGVUaW1lc3RhbXBQcm92aWRlci5qcyIoKSB7CiAgICBkYXRlVGltZXN0YW1wUHJvdmlkZXIgPSB7CiAgICAgIG5vdzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIChkYXRlVGltZXN0YW1wUHJvdmlkZXIuZGVsZWdhdGUgfHwgRGF0ZSkubm93KCk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9SZXBsYXlTdWJqZWN0LmpzCnZhciBSZXBsYXlTdWJqZWN0Owp2YXIgaW5pdF9SZXBsYXlTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvUmVwbGF5U3ViamVjdC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X2RhdGVUaW1lc3RhbXBQcm92aWRlcigpOwogICAgUmVwbGF5U3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFJlcGxheVN1YmplY3QyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBSZXBsYXlTdWJqZWN0MihfYnVmZmVyU2l6ZSwgX3dpbmRvd1RpbWUsIF90aW1lc3RhbXBQcm92aWRlcikgewogICAgICAgIGlmIChfYnVmZmVyU2l6ZSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfYnVmZmVyU2l6ZSA9IEluZmluaXR5OwogICAgICAgIH0KICAgICAgICBpZiAoX3dpbmRvd1RpbWUgPT09IHZvaWQgMCkgewogICAgICAgICAgX3dpbmRvd1RpbWUgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgaWYgKF90aW1lc3RhbXBQcm92aWRlciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBfdGltZXN0YW1wUHJvdmlkZXIgPSBkYXRlVGltZXN0YW1wUHJvdmlkZXI7CiAgICAgICAgfQogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX2J1ZmZlclNpemUgPSBfYnVmZmVyU2l6ZTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IF93aW5kb3dUaW1lOwogICAgICAgIF90aGlzLl90aW1lc3RhbXBQcm92aWRlciA9IF90aW1lc3RhbXBQcm92aWRlcjsKICAgICAgICBfdGhpcy5fYnVmZmVyID0gW107CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IHRydWU7CiAgICAgICAgX3RoaXMuX2luZmluaXRlVGltZVdpbmRvdyA9IF93aW5kb3dUaW1lID09PSBJbmZpbml0eTsKICAgICAgICBfdGhpcy5fYnVmZmVyU2l6ZSA9IE1hdGgubWF4KDEsIF9idWZmZXJTaXplKTsKICAgICAgICBfdGhpcy5fd2luZG93VGltZSA9IE1hdGgubWF4KDEsIF93aW5kb3dUaW1lKTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgUmVwbGF5U3ViamVjdDIucHJvdG90eXBlLm5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBfYnVmZmVyID0gX2ExNC5fYnVmZmVyLCBfaW5maW5pdGVUaW1lV2luZG93ID0gX2ExNC5faW5maW5pdGVUaW1lV2luZG93LCBfdGltZXN0YW1wUHJvdmlkZXIgPSBfYTE0Ll90aW1lc3RhbXBQcm92aWRlciwgX3dpbmRvd1RpbWUgPSBfYTE0Ll93aW5kb3dUaW1lOwogICAgICAgIGlmICghaXNTdG9wcGVkKSB7CiAgICAgICAgICBfYnVmZmVyLnB1c2godmFsdWUyKTsKICAgICAgICAgICFfaW5maW5pdGVUaW1lV2luZG93ICYmIF9idWZmZXIucHVzaChfdGltZXN0YW1wUHJvdmlkZXIubm93KCkgKyBfd2luZG93VGltZSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuX3RyaW1CdWZmZXIoKTsKICAgICAgICBfc3VwZXIucHJvdG90eXBlLm5leHQuY2FsbCh0aGlzLCB2YWx1ZTIpOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3N1YnNjcmliZSA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB0aGlzLl90aHJvd0lmQ2xvc2VkKCk7CiAgICAgICAgdGhpcy5fdHJpbUJ1ZmZlcigpOwogICAgICAgIHZhciBzdWJzY3JpcHRpb24gPSB0aGlzLl9pbm5lclN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE0Ll9pbmZpbml0ZVRpbWVXaW5kb3csIF9idWZmZXIgPSBfYTE0Ll9idWZmZXI7CiAgICAgICAgdmFyIGNvcHkgPSBfYnVmZmVyLnNsaWNlKCk7CiAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgY29weS5sZW5ndGggJiYgIXN1YnNjcmliZXIuY2xvc2VkOyBpMTEgKz0gX2luZmluaXRlVGltZVdpbmRvdyA/IDEgOiAyKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoY29weVtpMTFdKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyhzdWJzY3JpYmVyKTsKICAgICAgICByZXR1cm4gc3Vic2NyaXB0aW9uOwogICAgICB9OwogICAgICBSZXBsYXlTdWJqZWN0Mi5wcm90b3R5cGUuX3RyaW1CdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9idWZmZXJTaXplID0gX2ExNC5fYnVmZmVyU2l6ZSwgX3RpbWVzdGFtcFByb3ZpZGVyID0gX2ExNC5fdGltZXN0YW1wUHJvdmlkZXIsIF9idWZmZXIgPSBfYTE0Ll9idWZmZXIsIF9pbmZpbml0ZVRpbWVXaW5kb3cgPSBfYTE0Ll9pbmZpbml0ZVRpbWVXaW5kb3c7CiAgICAgICAgdmFyIGFkanVzdGVkQnVmZmVyU2l6ZSA9IChfaW5maW5pdGVUaW1lV2luZG93ID8gMSA6IDIpICogX2J1ZmZlclNpemU7CiAgICAgICAgX2J1ZmZlclNpemUgPCBJbmZpbml0eSAmJiBhZGp1c3RlZEJ1ZmZlclNpemUgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyLnNwbGljZSgwLCBfYnVmZmVyLmxlbmd0aCAtIGFkanVzdGVkQnVmZmVyU2l6ZSk7CiAgICAgICAgaWYgKCFfaW5maW5pdGVUaW1lV2luZG93KSB7CiAgICAgICAgICB2YXIgbm93MiA9IF90aW1lc3RhbXBQcm92aWRlci5ub3coKTsKICAgICAgICAgIHZhciBsYXN0MyA9IDA7CiAgICAgICAgICBmb3IgKHZhciBpMTEgPSAxOyBpMTEgPCBfYnVmZmVyLmxlbmd0aCAmJiBfYnVmZmVyW2kxMV0gPD0gbm93MjsgaTExICs9IDIpIHsKICAgICAgICAgICAgbGFzdDMgPSBpMTE7CiAgICAgICAgICB9CiAgICAgICAgICBsYXN0MyAmJiBfYnVmZmVyLnNwbGljZSgwLCBsYXN0MyArIDEpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIFJlcGxheVN1YmplY3QyOwogICAgfSkoU3ViamVjdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9Bc3luY1N1YmplY3QuanMKdmFyIEFzeW5jU3ViamVjdDsKdmFyIGluaXRfQXN5bmNTdWJqZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvQXN5bmNTdWJqZWN0LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YmplY3QoKTsKICAgIEFzeW5jU3ViamVjdCA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU3ViamVjdDIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIEFzeW5jU3ViamVjdDIoKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuX3ZhbHVlID0gbnVsbDsKICAgICAgICBfdGhpcy5faGFzVmFsdWUgPSBmYWxzZTsKICAgICAgICBfdGhpcy5faXNDb21wbGV0ZSA9IGZhbHNlOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBBc3luY1N1YmplY3QyLnByb3RvdHlwZS5fY2hlY2tGaW5hbGl6ZWRTdGF0dXNlcyA9IGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGhhc0Vycm9yID0gX2ExNC5oYXNFcnJvciwgX2hhc1ZhbHVlID0gX2ExNC5faGFzVmFsdWUsIF92YWx1ZSA9IF9hMTQuX3ZhbHVlLCB0aHJvd25FcnJvciA9IF9hMTQudGhyb3duRXJyb3IsIGlzU3RvcHBlZCA9IF9hMTQuaXNTdG9wcGVkLCBfaXNDb21wbGV0ZSA9IF9hMTQuX2lzQ29tcGxldGU7CiAgICAgICAgaWYgKGhhc0Vycm9yKSB7CiAgICAgICAgICBzdWJzY3JpYmVyLmVycm9yKHRocm93bkVycm9yKTsKICAgICAgICB9IGVsc2UgaWYgKGlzU3RvcHBlZCB8fCBfaXNDb21wbGV0ZSkgewogICAgICAgICAgX2hhc1ZhbHVlICYmIHN1YnNjcmliZXIubmV4dChfdmFsdWUpOwogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUubmV4dCA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgICAgIGlmICghdGhpcy5pc1N0b3BwZWQpIHsKICAgICAgICAgIHRoaXMuX3ZhbHVlID0gdmFsdWUyOwogICAgICAgICAgdGhpcy5faGFzVmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfTsKICAgICAgQXN5bmNTdWJqZWN0Mi5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIF9oYXNWYWx1ZSA9IF9hMTQuX2hhc1ZhbHVlLCBfdmFsdWUgPSBfYTE0Ll92YWx1ZSwgX2lzQ29tcGxldGUgPSBfYTE0Ll9pc0NvbXBsZXRlOwogICAgICAgIGlmICghX2lzQ29tcGxldGUpIHsKICAgICAgICAgIHRoaXMuX2lzQ29tcGxldGUgPSB0cnVlOwogICAgICAgICAgX2hhc1ZhbHVlICYmIF9zdXBlci5wcm90b3R5cGUubmV4dC5jYWxsKHRoaXMsIF92YWx1ZSk7CiAgICAgICAgICBfc3VwZXIucHJvdG90eXBlLmNvbXBsZXRlLmNhbGwodGhpcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZXR1cm4gQXN5bmNTdWJqZWN0MjsKICAgIH0pKFN1YmplY3QpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FjdGlvbi5qcwp2YXIgQWN0aW9uOwp2YXIgaW5pdF9BY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQWN0aW9uMihzY2hlZHVsZXIsIHdvcmspIHsKICAgICAgICByZXR1cm4gX3N1cGVyLmNhbGwodGhpcykgfHwgdGhpczsKICAgICAgfQogICAgICBBY3Rpb24yLnByb3RvdHlwZS5zY2hlZHVsZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIHJldHVybiBBY3Rpb24yOwogICAgfSkoU3Vic2NyaXB0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbnRlcnZhbFByb3ZpZGVyLmpzCnZhciBpbnRlcnZhbFByb3ZpZGVyOwp2YXIgaW5pdF9pbnRlcnZhbFByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ludGVydmFsUHJvdmlkZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGludGVydmFsUHJvdmlkZXIgPSB7CiAgICAgIHNldEludGVydmFsOiBmdW5jdGlvbihoYW5kbGVyMiwgdGltZW91dDIpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pIC0gMl0gPSBhcmd1bWVudHNbX2ldOwogICAgICAgIH0KICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbnRlcnZhbFByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIGlmIChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuc2V0SW50ZXJ2YWwpIHsKICAgICAgICAgIHJldHVybiBkZWxlZ2F0ZS5zZXRJbnRlcnZhbC5hcHBseShkZWxlZ2F0ZSwgX19zcHJlYWRBcnJheShbaGFuZGxlcjIsIHRpbWVvdXQyXSwgX19yZWFkKGFyZ3MpKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZXRJbnRlcnZhbC5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW2hhbmRsZXIyLCB0aW1lb3V0Ml0sIF9fcmVhZChhcmdzKSkpOwogICAgICB9LAogICAgICBjbGVhckludGVydmFsOiBmdW5jdGlvbihoYW5kbGUzKSB7CiAgICAgICAgdmFyIGRlbGVnYXRlID0gaW50ZXJ2YWxQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbnRlcnZhbCkgfHwgY2xlYXJJbnRlcnZhbCkoaGFuZGxlMyk7CiAgICAgIH0sCiAgICAgIGRlbGVnYXRlOiB2b2lkIDAKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNBY3Rpb24uanMKdmFyIEFzeW5jQWN0aW9uOwp2YXIgaW5pdF9Bc3luY0FjdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc3luY0FjdGlvbi5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9BY3Rpb24oKTsKICAgIGluaXRfaW50ZXJ2YWxQcm92aWRlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIEFzeW5jQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQXN5bmNBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc3luY0FjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5wZW5kaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmNsb3NlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUgPSBzdGF0ZTEyOwogICAgICAgIHZhciBpZCA9IHRoaXMuaWQ7CiAgICAgICAgdmFyIHNjaGVkdWxlciA9IHRoaXMuc2NoZWR1bGVyOwogICAgICAgIGlmIChpZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZChzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLnBlbmRpbmcgPSB0cnVlOwogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5pZCA9IChfYTE0ID0gdGhpcy5pZCkgIT09IG51bGwgJiYgX2ExNCAhPT0gdm9pZCAwID8gX2ExNCA6IHRoaXMucmVxdWVzdEFzeW5jSWQoc2NoZWR1bGVyLCB0aGlzLmlkLCBkZWxheTIpOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBfaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGludGVydmFsUHJvdmlkZXIuc2V0SW50ZXJ2YWwoc2NoZWR1bGVyLmZsdXNoLmJpbmQoc2NoZWR1bGVyLCB0aGlzKSwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKF9zY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCAmJiB0aGlzLmRlbGF5ID09PSBkZWxheTIgJiYgdGhpcy5wZW5kaW5nID09PSBmYWxzZSkgewogICAgICAgICAgcmV0dXJuIGlkOwogICAgICAgIH0KICAgICAgICBpZiAoaWQgIT0gbnVsbCkgewogICAgICAgICAgaW50ZXJ2YWxQcm92aWRlci5jbGVhckludGVydmFsKGlkKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHZvaWQgMDsKICAgICAgfTsKICAgICAgQXN5bmNBY3Rpb24yLnByb3RvdHlwZS5leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxMiwgZGVsYXkyKSB7CiAgICAgICAgaWYgKHRoaXMuY2xvc2VkKSB7CiAgICAgICAgICByZXR1cm4gbmV3IEVycm9yKCJleGVjdXRpbmcgYSBjYW5jZWxsZWQgYWN0aW9uIik7CiAgICAgICAgfQogICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgIHZhciBlcnJvciA9IHRoaXMuX2V4ZWN1dGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHJldHVybiBlcnJvcjsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGVuZGluZyA9PT0gZmFsc2UgJiYgdGhpcy5pZCAhPSBudWxsKSB7CiAgICAgICAgICB0aGlzLmlkID0gdGhpcy5yZWN5Y2xlQXN5bmNJZCh0aGlzLnNjaGVkdWxlciwgdGhpcy5pZCwgbnVsbCk7CiAgICAgICAgfQogICAgICB9OwogICAgICBBc3luY0FjdGlvbjIucHJvdG90eXBlLl9leGVjdXRlID0gZnVuY3Rpb24oc3RhdGUxMiwgX2RlbGF5KSB7CiAgICAgICAgdmFyIGVycm9yZWQgPSBmYWxzZTsKICAgICAgICB2YXIgZXJyb3JWYWx1ZTsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy53b3JrKHN0YXRlMTIpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgZXJyb3JlZCA9IHRydWU7CiAgICAgICAgICBlcnJvclZhbHVlID0gZTExID8gZTExIDogbmV3IEVycm9yKCJTY2hlZHVsZWQgYWN0aW9uIHRocmV3IGZhbHN5IGVycm9yIik7CiAgICAgICAgfQogICAgICAgIGlmIChlcnJvcmVkKSB7CiAgICAgICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICByZXR1cm4gZXJyb3JWYWx1ZTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIEFzeW5jQWN0aW9uMi5wcm90b3R5cGUudW5zdWJzY3JpYmUgPSBmdW5jdGlvbigpIHsKICAgICAgICBpZiAoIXRoaXMuY2xvc2VkKSB7CiAgICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGlkID0gX2ExNC5pZCwgc2NoZWR1bGVyID0gX2ExNC5zY2hlZHVsZXI7CiAgICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgICAgdGhpcy53b3JrID0gdGhpcy5zdGF0ZSA9IHRoaXMuc2NoZWR1bGVyID0gbnVsbDsKICAgICAgICAgIHRoaXMucGVuZGluZyA9IGZhbHNlOwogICAgICAgICAgYXJyUmVtb3ZlKGFjdGlvbnMsIHRoaXMpOwogICAgICAgICAgaWYgKGlkICE9IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5pZCA9IHRoaXMucmVjeWNsZUFzeW5jSWQoc2NoZWR1bGVyLCBpZCwgbnVsbCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlbGF5ID0gbnVsbDsKICAgICAgICAgIF9zdXBlci5wcm90b3R5cGUudW5zdWJzY3JpYmUuY2FsbCh0aGlzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY0FjdGlvbjI7CiAgICB9KShBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMKZnVuY3Rpb24gZmluZEFuZENsZWFySGFuZGxlKGhhbmRsZTMpIHsKICBpZiAoaGFuZGxlMyBpbiBhY3RpdmVIYW5kbGVzKSB7CiAgICBkZWxldGUgYWN0aXZlSGFuZGxlc1toYW5kbGUzXTsKICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KdmFyIG5leHRIYW5kbGUsIHJlc29sdmVkLCBhY3RpdmVIYW5kbGVzLCBJbW1lZGlhdGUsIFRlc3RUb29sczsKdmFyIGluaXRfSW1tZWRpYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9JbW1lZGlhdGUuanMiKCkgewogICAgbmV4dEhhbmRsZSA9IDE7CiAgICBhY3RpdmVIYW5kbGVzID0ge307CiAgICBJbW1lZGlhdGUgPSB7CiAgICAgIHNldEltbWVkaWF0ZTogZnVuY3Rpb24oY2IpIHsKICAgICAgICB2YXIgaGFuZGxlMyA9IG5leHRIYW5kbGUrKzsKICAgICAgICBhY3RpdmVIYW5kbGVzW2hhbmRsZTNdID0gdHJ1ZTsKICAgICAgICBpZiAoIXJlc29sdmVkKSB7CiAgICAgICAgICByZXNvbHZlZCA9IFByb21pc2UucmVzb2x2ZSgpOwogICAgICAgIH0KICAgICAgICByZXNvbHZlZC50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKSAmJiBjYigpOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBoYW5kbGUzOwogICAgICB9LAogICAgICBjbGVhckltbWVkaWF0ZTogZnVuY3Rpb24oaGFuZGxlMykgewogICAgICAgIGZpbmRBbmRDbGVhckhhbmRsZShoYW5kbGUzKTsKICAgICAgfQogICAgfTsKICAgIFRlc3RUb29scyA9IHsKICAgICAgcGVuZGluZzogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIE9iamVjdC5rZXlzKGFjdGl2ZUhhbmRsZXMpLmxlbmd0aDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9pbW1lZGlhdGVQcm92aWRlci5qcwp2YXIgc2V0SW1tZWRpYXRlLCBjbGVhckltbWVkaWF0ZSwgaW1tZWRpYXRlUHJvdmlkZXI7CnZhciBpbml0X2ltbWVkaWF0ZVByb3ZpZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2ltbWVkaWF0ZVByb3ZpZGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0ltbWVkaWF0ZSgpOwogICAgc2V0SW1tZWRpYXRlID0gSW1tZWRpYXRlLnNldEltbWVkaWF0ZSwgY2xlYXJJbW1lZGlhdGUgPSBJbW1lZGlhdGUuY2xlYXJJbW1lZGlhdGU7CiAgICBpbW1lZGlhdGVQcm92aWRlciA9IHsKICAgICAgc2V0SW1tZWRpYXRlOiBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgYXJncyA9IFtdOwogICAgICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgICAgfQogICAgICAgIHZhciBkZWxlZ2F0ZSA9IGltbWVkaWF0ZVByb3ZpZGVyLmRlbGVnYXRlOwogICAgICAgIHJldHVybiAoKGRlbGVnYXRlID09PSBudWxsIHx8IGRlbGVnYXRlID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkZWxlZ2F0ZS5zZXRJbW1lZGlhdGUpIHx8IHNldEltbWVkaWF0ZSkuYXBwbHkodm9pZCAwLCBfX3NwcmVhZEFycmF5KFtdLCBfX3JlYWQoYXJncykpKTsKICAgICAgfSwKICAgICAgY2xlYXJJbW1lZGlhdGU6IGZ1bmN0aW9uKGhhbmRsZTMpIHsKICAgICAgICB2YXIgZGVsZWdhdGUgPSBpbW1lZGlhdGVQcm92aWRlci5kZWxlZ2F0ZTsKICAgICAgICByZXR1cm4gKChkZWxlZ2F0ZSA9PT0gbnVsbCB8fCBkZWxlZ2F0ZSA9PT0gdm9pZCAwID8gdm9pZCAwIDogZGVsZWdhdGUuY2xlYXJJbW1lZGlhdGUpIHx8IGNsZWFySW1tZWRpYXRlKShoYW5kbGUzKTsKICAgICAgfSwKICAgICAgZGVsZWdhdGU6IHZvaWQgMAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9Bc2FwQWN0aW9uLmpzCnZhciBBc2FwQWN0aW9uOwp2YXIgaW5pdF9Bc2FwQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBBY3Rpb24uanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNBY3Rpb24oKTsKICAgIGluaXRfaW1tZWRpYXRlUHJvdmlkZXIoKTsKICAgIEFzYXBBY3Rpb24gPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhBc2FwQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXNhcEFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXNhcEFjdGlvbjIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkID0gZnVuY3Rpb24oc2NoZWR1bGVyLCBpZCwgZGVsYXkyKSB7CiAgICAgICAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBkZWxheTIgPSAwOwogICAgICAgIH0KICAgICAgICBpZiAoZGVsYXkyICE9PSBudWxsICYmIGRlbGF5MiA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICByZXR1cm4gc2NoZWR1bGVyLl9zY2hlZHVsZWQgfHwgKHNjaGVkdWxlci5fc2NoZWR1bGVkID0gaW1tZWRpYXRlUHJvdmlkZXIuc2V0SW1tZWRpYXRlKHNjaGVkdWxlci5mbHVzaC5iaW5kKHNjaGVkdWxlciwgdm9pZCAwKSkpOwogICAgICB9OwogICAgICBBc2FwQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICB2YXIgX2ExNDsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgIT0gbnVsbCA/IGRlbGF5MiA+IDAgOiB0aGlzLmRlbGF5ID4gMCkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQuY2FsbCh0aGlzLCBzY2hlZHVsZXIsIGlkLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGlmIChpZCAhPSBudWxsICYmICgoX2ExNCA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5pZCkgIT09IGlkKSB7CiAgICAgICAgICBpbW1lZGlhdGVQcm92aWRlci5jbGVhckltbWVkaWF0ZShpZCk7CiAgICAgICAgICBpZiAoc2NoZWR1bGVyLl9zY2hlZHVsZWQgPT09IGlkKSB7CiAgICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQXNhcEFjdGlvbjI7CiAgICB9KShBc3luY0FjdGlvbik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9TY2hlZHVsZXIuanMKdmFyIFNjaGVkdWxlcjsKdmFyIGluaXRfU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfZGF0ZVRpbWVzdGFtcFByb3ZpZGVyKCk7CiAgICBTY2hlZHVsZXIgPSAoZnVuY3Rpb24oKSB7CiAgICAgIGZ1bmN0aW9uIFNjaGVkdWxlcjIoc2NoZWR1bGVyQWN0aW9uQ3Rvciwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIyLm5vdzsKICAgICAgICB9CiAgICAgICAgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yID0gc2NoZWR1bGVyQWN0aW9uQ3RvcjsKICAgICAgICB0aGlzLm5vdyA9IG5vdzI7CiAgICAgIH0KICAgICAgU2NoZWR1bGVyMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbih3b3JrLCBkZWxheTIsIHN0YXRlMTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgdGhpcy5zY2hlZHVsZXJBY3Rpb25DdG9yKHRoaXMsIHdvcmspLnNjaGVkdWxlKHN0YXRlMTIsIGRlbGF5Mik7CiAgICAgIH07CiAgICAgIFNjaGVkdWxlcjIubm93ID0gZGF0ZVRpbWVzdGFtcFByb3ZpZGVyLm5vdzsKICAgICAgcmV0dXJuIFNjaGVkdWxlcjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzeW5jU2NoZWR1bGVyLmpzCnZhciBBc3luY1NjaGVkdWxlcjsKdmFyIGluaXRfQXN5bmNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXN5bmNTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfU2NoZWR1bGVyKCk7CiAgICBBc3luY1NjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzeW5jU2NoZWR1bGVyMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gQXN5bmNTY2hlZHVsZXIyKFNjaGVkdWxlckFjdGlvbiwgbm93MikgewogICAgICAgIGlmIChub3cyID09PSB2b2lkIDApIHsKICAgICAgICAgIG5vdzIgPSBTY2hlZHVsZXIubm93OwogICAgICAgIH0KICAgICAgICB2YXIgX3RoaXMgPSBfc3VwZXIuY2FsbCh0aGlzLCBTY2hlZHVsZXJBY3Rpb24sIG5vdzIpIHx8IHRoaXM7CiAgICAgICAgX3RoaXMuYWN0aW9ucyA9IFtdOwogICAgICAgIF90aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQXN5bmNTY2hlZHVsZXIyLnByb3RvdHlwZS5mbHVzaCA9IGZ1bmN0aW9uKGFjdGlvbikgewogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIGlmICh0aGlzLl9hY3RpdmUpIHsKICAgICAgICAgIGFjdGlvbnMucHVzaChhY3Rpb24pOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB2YXIgZXJyb3I7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoZXJyb3IgPSBhY3Rpb24uZXhlY3V0ZShhY3Rpb24uc3RhdGUsIGFjdGlvbi5kZWxheSkpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfSB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlIChhY3Rpb24gPSBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBc3luY1NjaGVkdWxlcjI7CiAgICB9KShTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FzYXBTY2hlZHVsZXIuanMKdmFyIEFzYXBTY2hlZHVsZXI7CnZhciBpbml0X0FzYXBTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQXNhcFNjaGVkdWxlci5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgQXNhcFNjaGVkdWxlciA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKEFzYXBTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBc2FwU2NoZWR1bGVyMigpIHsKICAgICAgICByZXR1cm4gX3N1cGVyICE9PSBudWxsICYmIF9zdXBlci5hcHBseSh0aGlzLCBhcmd1bWVudHMpIHx8IHRoaXM7CiAgICAgIH0KICAgICAgQXNhcFNjaGVkdWxlcjIucHJvdG90eXBlLmZsdXNoID0gZnVuY3Rpb24oYWN0aW9uKSB7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gdHJ1ZTsKICAgICAgICB2YXIgZmx1c2hJZCA9IHRoaXMuX3NjaGVkdWxlZDsKICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgdmFyIGFjdGlvbnMgPSB0aGlzLmFjdGlvbnM7CiAgICAgICAgdmFyIGVycm9yOwogICAgICAgIGFjdGlvbiA9IGFjdGlvbiB8fCBhY3Rpb25zLnNoaWZ0KCk7CiAgICAgICAgZG8gewogICAgICAgICAgaWYgKGVycm9yID0gYWN0aW9uLmV4ZWN1dGUoYWN0aW9uLnN0YXRlLCBhY3Rpb24uZGVsYXkpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gd2hpbGUgKChhY3Rpb24gPSBhY3Rpb25zWzBdKSAmJiBhY3Rpb24uaWQgPT09IGZsdXNoSWQgJiYgYWN0aW9ucy5zaGlmdCgpKTsKICAgICAgICB0aGlzLl9hY3RpdmUgPSBmYWxzZTsKICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSkgewogICAgICAgICAgICBhY3Rpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRocm93IGVycm9yOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIEFzYXBTY2hlZHVsZXIyOwogICAgfSkoQXN5bmNTY2hlZHVsZXIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL2FzYXAuanMKdmFyIGFzYXBTY2hlZHVsZXIsIGFzYXA7CnZhciBpbml0X2FzYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXNhcC5qcyIoKSB7CiAgICBpbml0X0FzYXBBY3Rpb24oKTsKICAgIGluaXRfQXNhcFNjaGVkdWxlcigpOwogICAgYXNhcFNjaGVkdWxlciA9IG5ldyBBc2FwU2NoZWR1bGVyKEFzYXBBY3Rpb24pOwogICAgYXNhcCA9IGFzYXBTY2hlZHVsZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMKdmFyIGFzeW5jU2NoZWR1bGVyLCBhc3luYzsKdmFyIGluaXRfYXN5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYXN5bmMuanMiKCkgewogICAgaW5pdF9Bc3luY0FjdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgYXN5bmNTY2hlZHVsZXIgPSBuZXcgQXN5bmNTY2hlZHVsZXIoQXN5bmNBY3Rpb24pOwogICAgYXN5bmMgPSBhc3luY1NjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9RdWV1ZUFjdGlvbi5qcwp2YXIgUXVldWVBY3Rpb247CnZhciBpbml0X1F1ZXVlQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBRdWV1ZUFjdGlvbiA9IChmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgX19leHRlbmRzKFF1ZXVlQWN0aW9uMiwgX3N1cGVyKTsKICAgICAgZnVuY3Rpb24gUXVldWVBY3Rpb24yKHNjaGVkdWxlciwgd29yaykgewogICAgICAgIHZhciBfdGhpcyA9IF9zdXBlci5jYWxsKHRoaXMsIHNjaGVkdWxlciwgd29yaykgfHwgdGhpczsKICAgICAgICBfdGhpcy5zY2hlZHVsZXIgPSBzY2hlZHVsZXI7CiAgICAgICAgX3RoaXMud29yayA9IHdvcms7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5zY2hlZHVsZS5jYWxsKHRoaXMsIHN0YXRlMTIsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHRoaXMuZGVsYXkgPSBkZWxheTI7CiAgICAgICAgdGhpcy5zdGF0ZSA9IHN0YXRlMTI7CiAgICAgICAgdGhpcy5zY2hlZHVsZXIuZmx1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH07CiAgICAgIFF1ZXVlQWN0aW9uMi5wcm90b3R5cGUuZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIHJldHVybiBkZWxheTIgPiAwIHx8IHRoaXMuY2xvc2VkID8gX3N1cGVyLnByb3RvdHlwZS5leGVjdXRlLmNhbGwodGhpcywgc3RhdGUxMiwgZGVsYXkyKSA6IHRoaXMuX2V4ZWN1dGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgfTsKICAgICAgUXVldWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsICYmIGRlbGF5MiA+IDAgfHwgZGVsYXkyID09IG51bGwgJiYgdGhpcy5kZWxheSA+IDApIHsKICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnJlcXVlc3RBc3luY0lkLmNhbGwodGhpcywgc2NoZWR1bGVyLCBpZCwgZGVsYXkyKTsKICAgICAgICB9CiAgICAgICAgc2NoZWR1bGVyLmZsdXNoKHRoaXMpOwogICAgICAgIHJldHVybiAwOwogICAgICB9OwogICAgICByZXR1cm4gUXVldWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1F1ZXVlU2NoZWR1bGVyLmpzCnZhciBRdWV1ZVNjaGVkdWxlcjsKdmFyIGluaXRfUXVldWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvUXVldWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIFF1ZXVlU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoUXVldWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBRdWV1ZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIHJldHVybiBRdWV1ZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMKdmFyIHF1ZXVlU2NoZWR1bGVyLCBxdWV1ZTsKdmFyIGluaXRfcXVldWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvcXVldWUuanMiKCkgewogICAgaW5pdF9RdWV1ZUFjdGlvbigpOwogICAgaW5pdF9RdWV1ZVNjaGVkdWxlcigpOwogICAgcXVldWVTY2hlZHVsZXIgPSBuZXcgUXVldWVTY2hlZHVsZXIoUXVldWVBY3Rpb24pOwogICAgcXVldWUgPSBxdWV1ZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9BbmltYXRpb25GcmFtZUFjdGlvbi5qcwp2YXIgQW5pbWF0aW9uRnJhbWVBY3Rpb247CnZhciBpbml0X0FuaW1hdGlvbkZyYW1lQWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lQWN0aW9uLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lUHJvdmlkZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVBY3Rpb24yLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZUFjdGlvbjIoc2NoZWR1bGVyLCB3b3JrKSB7CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICByZXR1cm4gX3RoaXM7CiAgICAgIH0KICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPT0gbnVsbCAmJiBkZWxheTIgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHNjaGVkdWxlci5hY3Rpb25zLnB1c2godGhpcyk7CiAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5fc2NoZWR1bGVkIHx8IChzY2hlZHVsZXIuX3NjaGVkdWxlZCA9IGFuaW1hdGlvbkZyYW1lUHJvdmlkZXIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHNjaGVkdWxlci5mbHVzaCh2b2lkIDApOwogICAgICAgIH0pKTsKICAgICAgfTsKICAgICAgQW5pbWF0aW9uRnJhbWVBY3Rpb24yLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgaWYgKGRlbGF5MiAhPSBudWxsID8gZGVsYXkyID4gMCA6IHRoaXMuZGVsYXkgPiAwKSB7CiAgICAgICAgICByZXR1cm4gX3N1cGVyLnByb3RvdHlwZS5yZWN5Y2xlQXN5bmNJZC5jYWxsKHRoaXMsIHNjaGVkdWxlciwgaWQsIGRlbGF5Mik7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gc2NoZWR1bGVyLmFjdGlvbnM7CiAgICAgICAgaWYgKGlkICE9IG51bGwgJiYgaWQgPT09IHNjaGVkdWxlci5fc2NoZWR1bGVkICYmICgoX2ExNCA9IGFjdGlvbnNbYWN0aW9ucy5sZW5ndGggLSAxXSkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5pZCkgIT09IGlkKSB7CiAgICAgICAgICBhbmltYXRpb25GcmFtZVByb3ZpZGVyLmNhbmNlbEFuaW1hdGlvbkZyYW1lKGlkKTsKICAgICAgICAgIHNjaGVkdWxlci5fc2NoZWR1bGVkID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICB9OwogICAgICByZXR1cm4gQW5pbWF0aW9uRnJhbWVBY3Rpb24yOwogICAgfSkoQXN5bmNBY3Rpb24pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL0FuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLmpzCnZhciBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKdmFyIGluaXRfQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfQXN5bmNTY2hlZHVsZXIoKTsKICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIyLCBfc3VwZXIpOwogICAgICBmdW5jdGlvbiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjIoKSB7CiAgICAgICAgcmV0dXJuIF9zdXBlciAhPT0gbnVsbCAmJiBfc3VwZXIuYXBwbHkodGhpcywgYXJndW1lbnRzKSB8fCB0aGlzOwogICAgICB9CiAgICAgIEFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbihhY3Rpb24pIHsKICAgICAgICB0aGlzLl9hY3RpdmUgPSB0cnVlOwogICAgICAgIHZhciBmbHVzaElkOwogICAgICAgIGlmIChhY3Rpb24pIHsKICAgICAgICAgIGZsdXNoSWQgPSBhY3Rpb24uaWQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsdXNoSWQgPSB0aGlzLl9zY2hlZHVsZWQ7CiAgICAgICAgICB0aGlzLl9zY2hlZHVsZWQgPSB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIHZhciBhY3Rpb25zID0gdGhpcy5hY3Rpb25zOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICBhY3Rpb24gPSBhY3Rpb24gfHwgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgIGRvIHsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9IHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmlkID09PSBmbHVzaElkICYmIGFjdGlvbnMuc2hpZnQoKSk7CiAgICAgICAgdGhpcy5fYWN0aXZlID0gZmFsc2U7CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoKGFjdGlvbiA9IGFjdGlvbnNbMF0pICYmIGFjdGlvbi5pZCA9PT0gZmx1c2hJZCAmJiBhY3Rpb25zLnNoaWZ0KCkpIHsKICAgICAgICAgICAgYWN0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBBbmltYXRpb25GcmFtZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMKdmFyIGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyLCBhbmltYXRpb25GcmFtZTsKdmFyIGluaXRfYW5pbWF0aW9uRnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZXIvYW5pbWF0aW9uRnJhbWUuanMiKCkgewogICAgaW5pdF9BbmltYXRpb25GcmFtZUFjdGlvbigpOwogICAgaW5pdF9BbmltYXRpb25GcmFtZVNjaGVkdWxlcigpOwogICAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIgPSBuZXcgQW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIoQW5pbWF0aW9uRnJhbWVBY3Rpb24pOwogICAgYW5pbWF0aW9uRnJhbWUgPSBhbmltYXRpb25GcmFtZVNjaGVkdWxlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlci9WaXJ0dWFsVGltZVNjaGVkdWxlci5qcwp2YXIgVmlydHVhbFRpbWVTY2hlZHVsZXIsIFZpcnR1YWxBY3Rpb247CnZhciBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVyL1ZpcnR1YWxUaW1lU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X0FzeW5jQWN0aW9uKCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9Bc3luY1NjaGVkdWxlcigpOwogICAgVmlydHVhbFRpbWVTY2hlZHVsZXIgPSAoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIF9fZXh0ZW5kcyhWaXJ0dWFsVGltZVNjaGVkdWxlcjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxUaW1lU2NoZWR1bGVyMihzY2hlZHVsZXJBY3Rpb25DdG9yLCBtYXhGcmFtZXMpIHsKICAgICAgICBpZiAoc2NoZWR1bGVyQWN0aW9uQ3RvciA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBzY2hlZHVsZXJBY3Rpb25DdG9yID0gVmlydHVhbEFjdGlvbjsKICAgICAgICB9CiAgICAgICAgaWYgKG1heEZyYW1lcyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBtYXhGcmFtZXMgPSBJbmZpbml0eTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyQWN0aW9uQ3RvciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMuZnJhbWU7CiAgICAgICAgfSkgfHwgdGhpczsKICAgICAgICBfdGhpcy5tYXhGcmFtZXMgPSBtYXhGcmFtZXM7CiAgICAgICAgX3RoaXMuZnJhbWUgPSAwOwogICAgICAgIF90aGlzLmluZGV4ID0gLTE7CiAgICAgICAgcmV0dXJuIF90aGlzOwogICAgICB9CiAgICAgIFZpcnR1YWxUaW1lU2NoZWR1bGVyMi5wcm90b3R5cGUuZmx1c2ggPSBmdW5jdGlvbigpIHsKICAgICAgICB2YXIgX2ExNCA9IHRoaXMsIGFjdGlvbnMgPSBfYTE0LmFjdGlvbnMsIG1heEZyYW1lcyA9IF9hMTQubWF4RnJhbWVzOwogICAgICAgIHZhciBlcnJvcjsKICAgICAgICB2YXIgYWN0aW9uOwogICAgICAgIHdoaWxlICgoYWN0aW9uID0gYWN0aW9uc1swXSkgJiYgYWN0aW9uLmRlbGF5IDw9IG1heEZyYW1lcykgewogICAgICAgICAgYWN0aW9ucy5zaGlmdCgpOwogICAgICAgICAgdGhpcy5mcmFtZSA9IGFjdGlvbi5kZWxheTsKICAgICAgICAgIGlmIChlcnJvciA9IGFjdGlvbi5leGVjdXRlKGFjdGlvbi5zdGF0ZSwgYWN0aW9uLmRlbGF5KSkgewogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGVycm9yKSB7CiAgICAgICAgICB3aGlsZSAoYWN0aW9uID0gYWN0aW9ucy5zaGlmdCgpKSB7CiAgICAgICAgICAgIGFjdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgfQogICAgICB9OwogICAgICBWaXJ0dWFsVGltZVNjaGVkdWxlcjIuZnJhbWVUaW1lRmFjdG9yID0gMTA7CiAgICAgIHJldHVybiBWaXJ0dWFsVGltZVNjaGVkdWxlcjI7CiAgICB9KShBc3luY1NjaGVkdWxlcik7CiAgICBWaXJ0dWFsQWN0aW9uID0gKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICBfX2V4dGVuZHMoVmlydHVhbEFjdGlvbjIsIF9zdXBlcik7CiAgICAgIGZ1bmN0aW9uIFZpcnR1YWxBY3Rpb24yKHNjaGVkdWxlciwgd29yaywgaW5kZXgyKSB7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmRleDIgPSBzY2hlZHVsZXIuaW5kZXggKz0gMTsKICAgICAgICB9CiAgICAgICAgdmFyIF90aGlzID0gX3N1cGVyLmNhbGwodGhpcywgc2NoZWR1bGVyLCB3b3JrKSB8fCB0aGlzOwogICAgICAgIF90aGlzLnNjaGVkdWxlciA9IHNjaGVkdWxlcjsKICAgICAgICBfdGhpcy53b3JrID0gd29yazsKICAgICAgICBfdGhpcy5pbmRleCA9IGluZGV4MjsKICAgICAgICBfdGhpcy5hY3RpdmUgPSB0cnVlOwogICAgICAgIF90aGlzLmluZGV4ID0gc2NoZWR1bGVyLmluZGV4ID0gaW5kZXgyOwogICAgICAgIHJldHVybiBfdGhpczsKICAgICAgfQogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUuc2NoZWR1bGUgPSBmdW5jdGlvbihzdGF0ZTEyLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIGlmIChOdW1iZXIuaXNGaW5pdGUoZGVsYXkyKSkgewogICAgICAgICAgaWYgKCF0aGlzLmlkKSB7CiAgICAgICAgICAgIHJldHVybiBfc3VwZXIucHJvdG90eXBlLnNjaGVkdWxlLmNhbGwodGhpcywgc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlID0gZmFsc2U7CiAgICAgICAgICB2YXIgYWN0aW9uID0gbmV3IFZpcnR1YWxBY3Rpb24yKHRoaXMuc2NoZWR1bGVyLCB0aGlzLndvcmspOwogICAgICAgICAgdGhpcy5hZGQoYWN0aW9uKTsKICAgICAgICAgIHJldHVybiBhY3Rpb24uc2NoZWR1bGUoc3RhdGUxMiwgZGVsYXkyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIFN1YnNjcmlwdGlvbi5FTVBUWTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5yZXF1ZXN0QXN5bmNJZCA9IGZ1bmN0aW9uKHNjaGVkdWxlciwgaWQsIGRlbGF5MikgewogICAgICAgIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgICAgICAgZGVsYXkyID0gMDsKICAgICAgICB9CiAgICAgICAgdGhpcy5kZWxheSA9IHNjaGVkdWxlci5mcmFtZSArIGRlbGF5MjsKICAgICAgICB2YXIgYWN0aW9ucyA9IHNjaGVkdWxlci5hY3Rpb25zOwogICAgICAgIGFjdGlvbnMucHVzaCh0aGlzKTsKICAgICAgICBhY3Rpb25zLnNvcnQoVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMpOwogICAgICAgIHJldHVybiAxOwogICAgICB9OwogICAgICBWaXJ0dWFsQWN0aW9uMi5wcm90b3R5cGUucmVjeWNsZUFzeW5jSWQgPSBmdW5jdGlvbihzY2hlZHVsZXIsIGlkLCBkZWxheTIpIHsKICAgICAgICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgICAgICAgIGRlbGF5MiA9IDA7CiAgICAgICAgfQogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH07CiAgICAgIFZpcnR1YWxBY3Rpb24yLnByb3RvdHlwZS5fZXhlY3V0ZSA9IGZ1bmN0aW9uKHN0YXRlMTIsIGRlbGF5MikgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZSA9PT0gdHJ1ZSkgewogICAgICAgICAgcmV0dXJuIF9zdXBlci5wcm90b3R5cGUuX2V4ZWN1dGUuY2FsbCh0aGlzLCBzdGF0ZTEyLCBkZWxheTIpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgVmlydHVhbEFjdGlvbjIuc29ydEFjdGlvbnMgPSBmdW5jdGlvbihhNSwgYjUpIHsKICAgICAgICBpZiAoYTUuZGVsYXkgPT09IGI1LmRlbGF5KSB7CiAgICAgICAgICBpZiAoYTUuaW5kZXggPT09IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAwOwogICAgICAgICAgfSBlbHNlIGlmIChhNS5pbmRleCA+IGI1LmluZGV4KSB7CiAgICAgICAgICAgIHJldHVybiAxOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIC0xOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoYTUuZGVsYXkgPiBiNS5kZWxheSkgewogICAgICAgICAgcmV0dXJuIDE7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBWaXJ0dWFsQWN0aW9uMjsKICAgIH0pKEFzeW5jQWN0aW9uKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZW1wdHkuanMKZnVuY3Rpb24gZW1wdHkoc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IGVtcHR5U2NoZWR1bGVkKHNjaGVkdWxlcikgOiBFTVBUWTsKfQpmdW5jdGlvbiBlbXB0eVNjaGVkdWxlZChzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pOwogIH0pOwp9CnZhciBFTVBUWTsKdmFyIGluaXRfZW1wdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2VtcHR5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgRU1QVFkgPSBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNTY2hlZHVsZXIuanMKZnVuY3Rpb24gaXNTY2hlZHVsZXIodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiBpc0Z1bmN0aW9uKHZhbHVlMi5zY2hlZHVsZSk7Cn0KdmFyIGluaXRfaXNTY2hlZHVsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzU2NoZWR1bGVyLmpzIigpIHsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9hcmdzLmpzCmZ1bmN0aW9uIGxhc3QoYXJyKSB7CiAgcmV0dXJuIGFyclthcnIubGVuZ3RoIC0gMV07Cn0KZnVuY3Rpb24gcG9wUmVzdWx0U2VsZWN0b3IoYXJncykgewogIHJldHVybiBpc0Z1bmN0aW9uKGxhc3QoYXJncykpID8gYXJncy5wb3AoKSA6IHZvaWQgMDsKfQpmdW5jdGlvbiBwb3BTY2hlZHVsZXIoYXJncykgewogIHJldHVybiBpc1NjaGVkdWxlcihsYXN0KGFyZ3MpKSA/IGFyZ3MucG9wKCkgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcG9wTnVtYmVyKGFyZ3MsIGRlZmF1bHRWYWx1ZSkgewogIHJldHVybiB0eXBlb2YgbGFzdChhcmdzKSA9PT0gIm51bWJlciIgPyBhcmdzLnBvcCgpIDogZGVmYXVsdFZhbHVlOwp9CnZhciBpbml0X2FyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2FyZ3MuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2lzU2NoZWR1bGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzCnZhciBpc0FycmF5TGlrZTsKdmFyIGluaXRfaXNBcnJheUxpa2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXJyYXlMaWtlLmpzIigpIHsKICAgIGlzQXJyYXlMaWtlID0gKGZ1bmN0aW9uKHgzKSB7CiAgICAgIHJldHVybiB4MyAmJiB0eXBlb2YgeDMubGVuZ3RoID09PSAibnVtYmVyIiAmJiB0eXBlb2YgeDMgIT09ICJmdW5jdGlvbiI7CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNQcm9taXNlLmpzCmZ1bmN0aW9uIGlzUHJvbWlzZSh2YWx1ZTIpIHsKICByZXR1cm4gaXNGdW5jdGlvbih2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyB2b2lkIDAgOiB2YWx1ZTIudGhlbik7Cn0KdmFyIGluaXRfaXNQcm9taXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1Byb21pc2UuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzSW50ZXJvcE9ic2VydmFibGUuanMKZnVuY3Rpb24gaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkgewogIHJldHVybiBpc0Z1bmN0aW9uKGlucHV0W29ic2VydmFibGVdKTsKfQp2YXIgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0ludGVyb3BPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfb2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2lzQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0FzeW5jSXRlcmFibGUob2JqKSB7CiAgcmV0dXJuIFN5bWJvbC5hc3luY0l0ZXJhdG9yICYmIGlzRnVuY3Rpb24ob2JqID09PSBudWxsIHx8IG9iaiA9PT0gdm9pZCAwID8gdm9pZCAwIDogb2JqW1N5bWJvbC5hc3luY0l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNBc3luY0l0ZXJhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc0FzeW5jSXRlcmFibGUuanMiKCkgewogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL3Rocm93VW5vYnNlcnZhYmxlRXJyb3IuanMKZnVuY3Rpb24gY3JlYXRlSW52YWxpZE9ic2VydmFibGVUeXBlRXJyb3IoaW5wdXQpIHsKICByZXR1cm4gbmV3IFR5cGVFcnJvcigiWW91IHByb3ZpZGVkICIgKyAoaW5wdXQgIT09IG51bGwgJiYgdHlwZW9mIGlucHV0ID09PSAib2JqZWN0IiA/ICJhbiBpbnZhbGlkIG9iamVjdCIgOiAiJyIgKyBpbnB1dCArICInIikgKyAiIHdoZXJlIGEgc3RyZWFtIHdhcyBleHBlY3RlZC4gWW91IGNhbiBwcm92aWRlIGFuIE9ic2VydmFibGUsIFByb21pc2UsIFJlYWRhYmxlU3RyZWFtLCBBcnJheSwgQXN5bmNJdGVyYWJsZSwgb3IgSXRlcmFibGUuIik7Cn0KdmFyIGluaXRfdGhyb3dVbm9ic2VydmFibGVFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvdGhyb3dVbm9ic2VydmFibGVFcnJvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zeW1ib2wvaXRlcmF0b3IuanMKZnVuY3Rpb24gZ2V0U3ltYm9sSXRlcmF0b3IoKSB7CiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICJmdW5jdGlvbiIgfHwgIVN5bWJvbC5pdGVyYXRvcikgewogICAgcmV0dXJuICJAQGl0ZXJhdG9yIjsKICB9CiAgcmV0dXJuIFN5bWJvbC5pdGVyYXRvcjsKfQp2YXIgaXRlcmF0b3I7CnZhciBpbml0X2l0ZXJhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc3ltYm9sL2l0ZXJhdG9yLmpzIigpIHsKICAgIGl0ZXJhdG9yID0gZ2V0U3ltYm9sSXRlcmF0b3IoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcwpmdW5jdGlvbiBpc0l0ZXJhYmxlKGlucHV0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24oaW5wdXQgPT09IG51bGwgfHwgaW5wdXQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGlucHV0W2l0ZXJhdG9yXSk7Cn0KdmFyIGluaXRfaXNJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNJdGVyYWJsZS5qcyIoKSB7CiAgICBpbml0X2l0ZXJhdG9yKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNSZWFkYWJsZVN0cmVhbUxpa2UuanMKZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkgewogIHJldHVybiBfX2FzeW5jR2VuZXJhdG9yKHRoaXMsIGFyZ3VtZW50cywgZnVuY3Rpb24gcmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcl8xKCkgewogICAgdmFyIHJlYWRlciwgX2ExNCwgdmFsdWUyLCBkb25lOwogICAgcmV0dXJuIF9fZ2VuZXJhdG9yKHRoaXMsIGZ1bmN0aW9uKF9iKSB7CiAgICAgIHN3aXRjaCAoX2IubGFiZWwpIHsKICAgICAgICBjYXNlIDA6CiAgICAgICAgICByZWFkZXIgPSByZWFkYWJsZVN0cmVhbS5nZXRSZWFkZXIoKTsKICAgICAgICAgIF9iLmxhYmVsID0gMTsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBfYi50cnlzLnB1c2goWzEsICwgOSwgMTBdKTsKICAgICAgICAgIF9iLmxhYmVsID0gMjsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoZmFsc2UpIHJldHVybiBbMywgOF07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQocmVhZGVyLnJlYWQoKSldOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIF9hMTQgPSBfYi5zZW50KCksIHZhbHVlMiA9IF9hMTQudmFsdWUsIGRvbmUgPSBfYTE0LmRvbmU7CiAgICAgICAgICBpZiAoIWRvbmUpIHJldHVybiBbMywgNV07CiAgICAgICAgICByZXR1cm4gWzQsIF9fYXdhaXQodm9pZCAwKV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFsyLCBfYi5zZW50KCldOwogICAgICAgIGNhc2UgNToKICAgICAgICAgIHJldHVybiBbNCwgX19hd2FpdCh2YWx1ZTIpXTsKICAgICAgICBjYXNlIDY6CiAgICAgICAgICByZXR1cm4gWzQsIF9iLnNlbnQoKV07CiAgICAgICAgY2FzZSA3OgogICAgICAgICAgX2Iuc2VudCgpOwogICAgICAgICAgcmV0dXJuIFszLCAyXTsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICByZWFkZXIucmVsZWFzZUxvY2soKTsKICAgICAgICAgIHJldHVybiBbN107CiAgICAgICAgY2FzZSAxMDoKICAgICAgICAgIHJldHVybiBbMl07CiAgICAgIH0KICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGlzUmVhZGFibGVTdHJlYW1MaWtlKG9iaikgewogIHJldHVybiBpc0Z1bmN0aW9uKG9iaiA9PT0gbnVsbCB8fCBvYmogPT09IHZvaWQgMCA/IHZvaWQgMCA6IG9iai5nZXRSZWFkZXIpOwp9CnZhciBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc1JlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcwpmdW5jdGlvbiBpbm5lckZyb20oaW5wdXQpIHsKICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBPYnNlcnZhYmxlKSB7CiAgICByZXR1cm4gaW5wdXQ7CiAgfQogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIGZyb21JbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBcnJheUxpa2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKGlucHV0KTsKICAgIH0KICAgIGlmIChpc1Byb21pc2UoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tUHJvbWlzZShpbnB1dCk7CiAgICB9CiAgICBpZiAoaXNBc3luY0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzSXRlcmFibGUoaW5wdXQpKSB7CiAgICAgIHJldHVybiBmcm9tSXRlcmFibGUoaW5wdXQpOwogICAgfQogICAgaWYgKGlzUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0KSkgewogICAgICByZXR1cm4gZnJvbVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCk7CiAgICB9CiAgfQogIHRocm93IGNyZWF0ZUludmFsaWRPYnNlcnZhYmxlVHlwZUVycm9yKGlucHV0KTsKfQpmdW5jdGlvbiBmcm9tSW50ZXJvcE9ic2VydmFibGUob2JqKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBvYnMgPSBvYmpbb2JzZXJ2YWJsZV0oKTsKICAgIGlmIChpc0Z1bmN0aW9uKG9icy5zdWJzY3JpYmUpKSB7CiAgICAgIHJldHVybiBvYnMuc3Vic2NyaWJlKHN1YnNjcmliZXIpOwogICAgfQogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiUHJvdmlkZWQgb2JqZWN0IGRvZXMgbm90IGNvcnJlY3RseSBpbXBsZW1lbnQgU3ltYm9sLm9ic2VydmFibGUiKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tQXJyYXlMaWtlKGFycmF5KSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGFycmF5Lmxlbmd0aCAmJiAhc3Vic2NyaWJlci5jbG9zZWQ7IGkxMSsrKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChhcnJheVtpMTFdKTsKICAgIH0KICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tUHJvbWlzZShwcm9taXNlKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgfQogICAgfSwgZnVuY3Rpb24oZXJyKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICB9KS50aGVuKG51bGwsIHJlcG9ydFVuaGFuZGxlZEVycm9yKTsKICB9KTsKfQpmdW5jdGlvbiBmcm9tSXRlcmFibGUoaXRlcmFibGUpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGVfMSwgX2ExNDsKICAgIHRyeSB7CiAgICAgIGZvciAodmFyIGl0ZXJhYmxlXzEgPSBfX3ZhbHVlcyhpdGVyYWJsZSksIGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpOyAhaXRlcmFibGVfMV8xLmRvbmU7IGl0ZXJhYmxlXzFfMSA9IGl0ZXJhYmxlXzEubmV4dCgpKSB7CiAgICAgICAgdmFyIHZhbHVlMiA9IGl0ZXJhYmxlXzFfMS52YWx1ZTsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICBpZiAoc3Vic2NyaWJlci5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgIGVfMSA9IHsgZXJyb3I6IGVfMV8xIH07CiAgICB9IGZpbmFsbHkgewogICAgICB0cnkgewogICAgICAgIGlmIChpdGVyYWJsZV8xXzEgJiYgIWl0ZXJhYmxlXzFfMS5kb25lICYmIChfYTE0ID0gaXRlcmFibGVfMS5yZXR1cm4pKSBfYTE0LmNhbGwoaXRlcmFibGVfMSk7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICB9CiAgICB9CiAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgfSk7Cn0KZnVuY3Rpb24gZnJvbUFzeW5jSXRlcmFibGUoYXN5bmNJdGVyYWJsZSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICBwcm9jZXNzMihhc3luY0l0ZXJhYmxlLCBzdWJzY3JpYmVyKS5jYXRjaChmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZyb21SZWFkYWJsZVN0cmVhbUxpa2UocmVhZGFibGVTdHJlYW0pIHsKICByZXR1cm4gZnJvbUFzeW5jSXRlcmFibGUocmVhZGFibGVTdHJlYW1MaWtlVG9Bc3luY0dlbmVyYXRvcihyZWFkYWJsZVN0cmVhbSkpOwp9CmZ1bmN0aW9uIHByb2Nlc3MyKGFzeW5jSXRlcmFibGUsIHN1YnNjcmliZXIpIHsKICB2YXIgYXN5bmNJdGVyYWJsZV8xLCBhc3luY0l0ZXJhYmxlXzFfMTsKICB2YXIgZV8yLCBfYTE0OwogIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgdmFyIHZhbHVlMiwgZV8yXzE7CiAgICByZXR1cm4gX19nZW5lcmF0b3IodGhpcywgZnVuY3Rpb24oX2IpIHsKICAgICAgc3dpdGNoIChfYi5sYWJlbCkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIF9iLnRyeXMucHVzaChbMCwgNSwgNiwgMTFdKTsKICAgICAgICAgIGFzeW5jSXRlcmFibGVfMSA9IF9fYXN5bmNWYWx1ZXMoYXN5bmNJdGVyYWJsZSk7CiAgICAgICAgICBfYi5sYWJlbCA9IDE7CiAgICAgICAgY2FzZSAxOgogICAgICAgICAgcmV0dXJuIFs0LCBhc3luY0l0ZXJhYmxlXzEubmV4dCgpXTsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSA9IF9iLnNlbnQoKSwgIWFzeW5jSXRlcmFibGVfMV8xLmRvbmUpKSByZXR1cm4gWzMsIDRdOwogICAgICAgICAgdmFsdWUyID0gYXN5bmNJdGVyYWJsZV8xXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAgIGlmIChzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgICByZXR1cm4gWzJdOwogICAgICAgICAgfQogICAgICAgICAgX2IubGFiZWwgPSAzOwogICAgICAgIGNhc2UgMzoKICAgICAgICAgIHJldHVybiBbMywgMV07CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA1OgogICAgICAgICAgZV8yXzEgPSBfYi5zZW50KCk7CiAgICAgICAgICBlXzIgPSB7IGVycm9yOiBlXzJfMSB9OwogICAgICAgICAgcmV0dXJuIFszLCAxMV07CiAgICAgICAgY2FzZSA2OgogICAgICAgICAgX2IudHJ5cy5wdXNoKFs2LCAsIDksIDEwXSk7CiAgICAgICAgICBpZiAoIShhc3luY0l0ZXJhYmxlXzFfMSAmJiAhYXN5bmNJdGVyYWJsZV8xXzEuZG9uZSAmJiAoX2ExNCA9IGFzeW5jSXRlcmFibGVfMS5yZXR1cm4pKSkgcmV0dXJuIFszLCA4XTsKICAgICAgICAgIHJldHVybiBbNCwgX2ExNC5jYWxsKGFzeW5jSXRlcmFibGVfMSldOwogICAgICAgIGNhc2UgNzoKICAgICAgICAgIF9iLnNlbnQoKTsKICAgICAgICAgIF9iLmxhYmVsID0gODsKICAgICAgICBjYXNlIDg6CiAgICAgICAgICByZXR1cm4gWzMsIDEwXTsKICAgICAgICBjYXNlIDk6CiAgICAgICAgICBpZiAoZV8yKSB0aHJvdyBlXzIuZXJyb3I7CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTA6CiAgICAgICAgICByZXR1cm4gWzddOwogICAgICAgIGNhc2UgMTE6CiAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICByZXR1cm4gWzJdOwogICAgICB9CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9pbm5lckZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lubmVyRnJvbS5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc1Byb21pc2UoKTsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzSXRlcmFibGUoKTsKICAgIGluaXRfaXNSZWFkYWJsZVN0cmVhbUxpa2UoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgaW5pdF9yZXBvcnRVbmhhbmRsZWRFcnJvcigpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL2V4ZWN1dGVTY2hlZHVsZS5qcwpmdW5jdGlvbiBleGVjdXRlU2NoZWR1bGUocGFyZW50U3Vic2NyaXB0aW9uLCBzY2hlZHVsZXIsIHdvcmssIGRlbGF5MiwgcmVwZWF0MykgewogIGlmIChkZWxheTIgPT09IHZvaWQgMCkgewogICAgZGVsYXkyID0gMDsKICB9CiAgaWYgKHJlcGVhdDMgPT09IHZvaWQgMCkgewogICAgcmVwZWF0MyA9IGZhbHNlOwogIH0KICB2YXIgc2NoZWR1bGVTdWJzY3JpcHRpb24gPSBzY2hlZHVsZXIuc2NoZWR1bGUoZnVuY3Rpb24oKSB7CiAgICB3b3JrKCk7CiAgICBpZiAocmVwZWF0MykgewogICAgICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHRoaXMuc2NoZWR1bGUobnVsbCwgZGVsYXkyKSk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnVuc3Vic2NyaWJlKCk7CiAgICB9CiAgfSwgZGVsYXkyKTsKICBwYXJlbnRTdWJzY3JpcHRpb24uYWRkKHNjaGVkdWxlU3Vic2NyaXB0aW9uKTsKICBpZiAoIXJlcGVhdDMpIHsKICAgIHJldHVybiBzY2hlZHVsZVN1YnNjcmlwdGlvbjsKICB9Cn0KdmFyIGluaXRfZXhlY3V0ZVNjaGVkdWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9leGVjdXRlU2NoZWR1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcwpmdW5jdGlvbiBvYnNlcnZlT24oc2NoZWR1bGVyLCBkZWxheTIpIHsKICBpZiAoZGVsYXkyID09PSB2b2lkIDApIHsKICAgIGRlbGF5MiA9IDA7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9LCBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBzdWJzY3JpYmVyLmVycm9yKGVycik7CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfb2JzZXJ2ZU9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29ic2VydmVPbi5qcyIoKSB7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N1YnNjcmliZU9uLmpzCmZ1bmN0aW9uIHN1YnNjcmliZU9uKHNjaGVkdWxlciwgZGVsYXkyKSB7CiAgaWYgKGRlbGF5MiA9PT0gdm9pZCAwKSB7CiAgICBkZWxheTIgPSAwOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHN1YnNjcmliZXIuYWRkKHNjaGVkdWxlci5zY2hlZHVsZShmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHNvdXJjZS5zdWJzY3JpYmUoc3Vic2NyaWJlcik7CiAgICB9LCBkZWxheTIpKTsKICB9KTsKfQp2YXIgaW5pdF9zdWJzY3JpYmVPbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zdWJzY3JpYmVPbi5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZU9ic2VydmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVPYnNlcnZhYmxlKGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gaW5uZXJGcm9tKGlucHV0KS5waXBlKHN1YnNjcmliZU9uKHNjaGVkdWxlciksIG9ic2VydmVPbihzY2hlZHVsZXIpKTsKfQp2YXIgaW5pdF9zY2hlZHVsZU9ic2VydmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVPYnNlcnZhYmxlLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X29ic2VydmVPbigpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlUHJvbWlzZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVByb21pc2UoaW5wdXQsIHNjaGVkdWxlcikgewogIHJldHVybiBpbm5lckZyb20oaW5wdXQpLnBpcGUoc3Vic2NyaWJlT24oc2NoZWR1bGVyKSwgb2JzZXJ2ZU9uKHNjaGVkdWxlcikpOwp9CnZhciBpbml0X3NjaGVkdWxlUHJvbWlzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVByb21pc2UuanMiKCkgewogICAgaW5pdF9pbm5lckZyb20oKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBcnJheS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFycmF5KGlucHV0LCBzY2hlZHVsZXIpIHsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgdmFyIGkxMSA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoaTExID09PSBpbnB1dC5sZW5ndGgpIHsKICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGlucHV0W2kxMSsrXSk7CiAgICAgICAgaWYgKCFzdWJzY3JpYmVyLmNsb3NlZCkgewogICAgICAgICAgdGhpcy5zY2hlZHVsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVBcnJheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUFycmF5LmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlSXRlcmFibGUuanMKZnVuY3Rpb24gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIHZhciBpdGVyYXRvcjI7CiAgICBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgaXRlcmF0b3IyID0gaW5wdXRbaXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHZhciB2YWx1ZTI7CiAgICAgICAgdmFyIGRvbmU7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9hMTQgPSBpdGVyYXRvcjIubmV4dCgpLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBkb25lID0gX2ExNC5kb25lOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAoZG9uZSkgewogICAgICAgICAgc3Vic2NyaWJlci5jb21wbGV0ZSgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICB9CiAgICAgIH0sIDAsIHRydWUpOwogICAgfSk7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBpc0Z1bmN0aW9uKGl0ZXJhdG9yMiA9PT0gbnVsbCB8fCBpdGVyYXRvcjIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGl0ZXJhdG9yMi5yZXR1cm4pICYmIGl0ZXJhdG9yMi5yZXR1cm4oKTsKICAgIH07CiAgfSk7Cn0KdmFyIGluaXRfc2NoZWR1bGVJdGVyYWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZUl0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9pdGVyYXRvcigpOwogICAgaW5pdF9pc0Z1bmN0aW9uKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlQXN5bmNJdGVyYWJsZS5qcwpmdW5jdGlvbiBzY2hlZHVsZUFzeW5jSXRlcmFibGUoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmICghaW5wdXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXRlcmFibGUgY2Fubm90IGJlIG51bGwiKTsKICB9CiAgcmV0dXJuIG5ldyBPYnNlcnZhYmxlKGZ1bmN0aW9uKHN1YnNjcmliZXIpIHsKICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICB2YXIgaXRlcmF0b3IyID0gaW5wdXRbU3ltYm9sLmFzeW5jSXRlcmF0b3JdKCk7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIGZ1bmN0aW9uKCkgewogICAgICAgIGl0ZXJhdG9yMi5uZXh0KCkudGhlbihmdW5jdGlvbihyZXN1bHQpIHsKICAgICAgICAgIGlmIChyZXN1bHQuZG9uZSkgewogICAgICAgICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdWJzY3JpYmVyLm5leHQocmVzdWx0LnZhbHVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSwgMCwgdHJ1ZSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9zY2hlZHVsZUFzeW5jSXRlcmFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9zY2hlZHVsZWQvc2NoZWR1bGVBc3luY0l0ZXJhYmxlLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcwpmdW5jdGlvbiBzY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShyZWFkYWJsZVN0cmVhbUxpa2VUb0FzeW5jR2VuZXJhdG9yKGlucHV0KSwgc2NoZWR1bGVyKTsKfQp2YXIgaW5pdF9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3NjaGVkdWxlZC9zY2hlZHVsZVJlYWRhYmxlU3RyZWFtTGlrZS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc1JlYWRhYmxlU3RyZWFtTGlrZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcwpmdW5jdGlvbiBzY2hlZHVsZWQoaW5wdXQsIHNjaGVkdWxlcikgewogIGlmIChpbnB1dCAhPSBudWxsKSB7CiAgICBpZiAoaXNJbnRlcm9wT2JzZXJ2YWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlT2JzZXJ2YWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0FycmF5TGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXJyYXkoaW5wdXQsIHNjaGVkdWxlcik7CiAgICB9CiAgICBpZiAoaXNQcm9taXNlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVQcm9taXNlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogICAgaWYgKGlzQXN5bmNJdGVyYWJsZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlQXN5bmNJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc0l0ZXJhYmxlKGlucHV0KSkgewogICAgICByZXR1cm4gc2NoZWR1bGVJdGVyYWJsZShpbnB1dCwgc2NoZWR1bGVyKTsKICAgIH0KICAgIGlmIChpc1JlYWRhYmxlU3RyZWFtTGlrZShpbnB1dCkpIHsKICAgICAgcmV0dXJuIHNjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKGlucHV0LCBzY2hlZHVsZXIpOwogICAgfQogIH0KICB0aHJvdyBjcmVhdGVJbnZhbGlkT2JzZXJ2YWJsZVR5cGVFcnJvcihpbnB1dCk7Cn0KdmFyIGluaXRfc2NoZWR1bGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvc2NoZWR1bGVkL3NjaGVkdWxlZC5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9zY2hlZHVsZVByb21pc2UoKTsKICAgIGluaXRfc2NoZWR1bGVBcnJheSgpOwogICAgaW5pdF9zY2hlZHVsZUl0ZXJhYmxlKCk7CiAgICBpbml0X3NjaGVkdWxlQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF9pc0ludGVyb3BPYnNlcnZhYmxlKCk7CiAgICBpbml0X2lzUHJvbWlzZSgpOwogICAgaW5pdF9pc0FycmF5TGlrZSgpOwogICAgaW5pdF9pc0l0ZXJhYmxlKCk7CiAgICBpbml0X2lzQXN5bmNJdGVyYWJsZSgpOwogICAgaW5pdF90aHJvd1Vub2JzZXJ2YWJsZUVycm9yKCk7CiAgICBpbml0X2lzUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgICBpbml0X3NjaGVkdWxlUmVhZGFibGVTdHJlYW1MaWtlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb20uanMKZnVuY3Rpb24gZnJvbShpbnB1dCwgc2NoZWR1bGVyKSB7CiAgcmV0dXJuIHNjaGVkdWxlciA/IHNjaGVkdWxlZChpbnB1dCwgc2NoZWR1bGVyKSA6IGlubmVyRnJvbShpbnB1dCk7Cn0KdmFyIGluaXRfZnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbS5qcyIoKSB7CiAgICBpbml0X3NjaGVkdWxlZCgpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb2YuanMKZnVuY3Rpb24gb2YoKSB7CiAgdmFyIGFyZ3MgPSBbXTsKICBmb3IgKHZhciBfaSA9IDA7IF9pIDwgYXJndW1lbnRzLmxlbmd0aDsgX2krKykgewogICAgYXJnc1tfaV0gPSBhcmd1bWVudHNbX2ldOwogIH0KICB2YXIgc2NoZWR1bGVyID0gcG9wU2NoZWR1bGVyKGFyZ3MpOwogIHJldHVybiBmcm9tKGFyZ3MsIHNjaGVkdWxlcik7Cn0KdmFyIGluaXRfb2YgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL29mLmpzIigpIHsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9mcm9tKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3Rocm93RXJyb3IuanMKZnVuY3Rpb24gdGhyb3dFcnJvcihlcnJvck9yRXJyb3JGYWN0b3J5LCBzY2hlZHVsZXIpIHsKICB2YXIgZXJyb3JGYWN0b3J5ID0gaXNGdW5jdGlvbihlcnJvck9yRXJyb3JGYWN0b3J5KSA/IGVycm9yT3JFcnJvckZhY3RvcnkgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiBlcnJvck9yRXJyb3JGYWN0b3J5OwogIH07CiAgdmFyIGluaXQgPSBmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICByZXR1cm4gc3Vic2NyaWJlci5lcnJvcihlcnJvckZhY3RvcnkoKSk7CiAgfTsKICByZXR1cm4gbmV3IE9ic2VydmFibGUoc2NoZWR1bGVyID8gZnVuY3Rpb24oc3Vic2NyaWJlcikgewogICAgcmV0dXJuIHNjaGVkdWxlci5zY2hlZHVsZShpbml0LCAwLCBzdWJzY3JpYmVyKTsKICB9IDogaW5pdCk7Cn0KdmFyIGluaXRfdGhyb3dFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvdGhyb3dFcnJvci5qcyIoKSB7CiAgICBpbml0X09ic2VydmFibGUoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvTm90aWZpY2F0aW9uLmpzCmZ1bmN0aW9uIG9ic2VydmVOb3RpZmljYXRpb24obm90aWZpY2F0aW9uLCBvYnNlcnZlcikgewogIHZhciBfYTE0LCBfYiwgX2M7CiAgdmFyIF9kID0gbm90aWZpY2F0aW9uLCBraW5kID0gX2Qua2luZCwgdmFsdWUyID0gX2QudmFsdWUsIGVycm9yID0gX2QuZXJyb3I7CiAgaWYgKHR5cGVvZiBraW5kICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBub3RpZmljYXRpb24sIG1pc3NpbmcgImtpbmQiJyk7CiAgfQogIGtpbmQgPT09ICJOIiA/IChfYTE0ID0gb2JzZXJ2ZXIubmV4dCkgPT09IG51bGwgfHwgX2ExNCA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2ExNC5jYWxsKG9ic2VydmVyLCB2YWx1ZTIpIDoga2luZCA9PT0gIkUiID8gKF9iID0gb2JzZXJ2ZXIuZXJyb3IpID09PSBudWxsIHx8IF9iID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfYi5jYWxsKG9ic2VydmVyLCBlcnJvcikgOiAoX2MgPSBvYnNlcnZlci5jb21wbGV0ZSkgPT09IG51bGwgfHwgX2MgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9jLmNhbGwob2JzZXJ2ZXIpOwp9CnZhciBOb3RpZmljYXRpb25LaW5kLCBOb3RpZmljYXRpb247CnZhciBpbml0X05vdGlmaWNhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL05vdGlmaWNhdGlvbi5qcyIoKSB7CiAgICBpbml0X2VtcHR5KCk7CiAgICBpbml0X29mKCk7CiAgICBpbml0X3Rocm93RXJyb3IoKTsKICAgIGluaXRfaXNGdW5jdGlvbigpOwogICAgKGZ1bmN0aW9uKE5vdGlmaWNhdGlvbktpbmQyKSB7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJORVhUIl0gPSAiTiI7CiAgICAgIE5vdGlmaWNhdGlvbktpbmQyWyJFUlJPUiJdID0gIkUiOwogICAgICBOb3RpZmljYXRpb25LaW5kMlsiQ09NUExFVEUiXSA9ICJDIjsKICAgIH0pKE5vdGlmaWNhdGlvbktpbmQgfHwgKE5vdGlmaWNhdGlvbktpbmQgPSB7fSkpOwogICAgTm90aWZpY2F0aW9uID0gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBOb3RpZmljYXRpb24yKGtpbmQsIHZhbHVlMiwgZXJyb3IpIHsKICAgICAgICB0aGlzLmtpbmQgPSBraW5kOwogICAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lcnJvciA9IGVycm9yOwogICAgICAgIHRoaXMuaGFzVmFsdWUgPSBraW5kID09PSAiTiI7CiAgICAgIH0KICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUub2JzZXJ2ZSA9IGZ1bmN0aW9uKG9ic2VydmVyKSB7CiAgICAgICAgcmV0dXJuIG9ic2VydmVOb3RpZmljYXRpb24odGhpcywgb2JzZXJ2ZXIpOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLnByb3RvdHlwZS5kbyA9IGZ1bmN0aW9uKG5leHRIYW5kbGVyLCBlcnJvckhhbmRsZXIsIGNvbXBsZXRlSGFuZGxlcikgewogICAgICAgIHZhciBfYTE0ID0gdGhpcywga2luZCA9IF9hMTQua2luZCwgdmFsdWUyID0gX2ExNC52YWx1ZSwgZXJyb3IgPSBfYTE0LmVycm9yOwogICAgICAgIHJldHVybiBraW5kID09PSAiTiIgPyBuZXh0SGFuZGxlciA9PT0gbnVsbCB8fCBuZXh0SGFuZGxlciA9PT0gdm9pZCAwID8gdm9pZCAwIDogbmV4dEhhbmRsZXIodmFsdWUyKSA6IGtpbmQgPT09ICJFIiA/IGVycm9ySGFuZGxlciA9PT0gbnVsbCB8fCBlcnJvckhhbmRsZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGVycm9ySGFuZGxlcihlcnJvcikgOiBjb21wbGV0ZUhhbmRsZXIgPT09IG51bGwgfHwgY29tcGxldGVIYW5kbGVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBjb21wbGV0ZUhhbmRsZXIoKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUuYWNjZXB0ID0gZnVuY3Rpb24obmV4dE9yT2JzZXJ2ZXIsIGVycm9yLCBjb21wbGV0ZSkgewogICAgICAgIHZhciBfYTE0OwogICAgICAgIHJldHVybiBpc0Z1bmN0aW9uKChfYTE0ID0gbmV4dE9yT2JzZXJ2ZXIpID09PSBudWxsIHx8IF9hMTQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hMTQubmV4dCkgPyB0aGlzLm9ic2VydmUobmV4dE9yT2JzZXJ2ZXIpIDogdGhpcy5kbyhuZXh0T3JPYnNlcnZlciwgZXJyb3IsIGNvbXBsZXRlKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5wcm90b3R5cGUudG9PYnNlcnZhYmxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCBraW5kID0gX2ExNC5raW5kLCB2YWx1ZTIgPSBfYTE0LnZhbHVlLCBlcnJvciA9IF9hMTQuZXJyb3I7CiAgICAgICAgdmFyIHJlc3VsdCA9IGtpbmQgPT09ICJOIiA/IG9mKHZhbHVlMikgOiBraW5kID09PSAiRSIgPyB0aHJvd0Vycm9yKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGVycm9yOwogICAgICAgIH0pIDoga2luZCA9PT0gIkMiID8gRU1QVFkgOiAwOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmV4cGVjdGVkIG5vdGlmaWNhdGlvbiBraW5kICIgKyBraW5kKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVOZXh0ID0gZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIG5ldyBOb3RpZmljYXRpb24yKCJOIiwgdmFsdWUyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVFcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiBuZXcgTm90aWZpY2F0aW9uMigiRSIsIHZvaWQgMCwgZXJyKTsKICAgICAgfTsKICAgICAgTm90aWZpY2F0aW9uMi5jcmVhdGVDb21wbGV0ZSA9IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uOwogICAgICB9OwogICAgICBOb3RpZmljYXRpb24yLmNvbXBsZXRlTm90aWZpY2F0aW9uID0gbmV3IE5vdGlmaWNhdGlvbjIoIkMiKTsKICAgICAgcmV0dXJuIE5vdGlmaWNhdGlvbjI7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMKdmFyIGluaXRfaXNPYnNlcnZhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9pc09ic2VydmFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzCnZhciBFbXB0eUVycm9yOwp2YXIgaW5pdF9FbXB0eUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9FbXB0eUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgRW1wdHlFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBFbXB0eUVycm9ySW1wbCgpIHsKICAgICAgICBfc3VwZXIodGhpcyk7CiAgICAgICAgdGhpcy5uYW1lID0gIkVtcHR5RXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJubyBlbGVtZW50cyBpbiBzZXF1ZW5jZSI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfbGFzdFZhbHVlRnJvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL2xhc3RWYWx1ZUZyb20uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvZmlyc3RWYWx1ZUZyb20uanMKdmFyIGluaXRfZmlyc3RWYWx1ZUZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9maXJzdFZhbHVlRnJvbS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzCnZhciBBcmd1bWVudE91dE9mUmFuZ2VFcnJvcjsKdmFyIGluaXRfQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IgPSBjcmVhdGVFcnJvckNsYXNzKGZ1bmN0aW9uKF9zdXBlcikgewogICAgICByZXR1cm4gZnVuY3Rpb24gQXJndW1lbnRPdXRPZlJhbmdlRXJyb3JJbXBsKCkgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiQXJndW1lbnRPdXRPZlJhbmdlRXJyb3IiOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJhcmd1bWVudCBvdXQgb2YgcmFuZ2UiOwogICAgICB9OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMKdmFyIE5vdEZvdW5kRXJyb3I7CnZhciBpbml0X05vdEZvdW5kRXJyb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL05vdEZvdW5kRXJyb3IuanMiKCkgewogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBOb3RGb3VuZEVycm9yID0gY3JlYXRlRXJyb3JDbGFzcyhmdW5jdGlvbihfc3VwZXIpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIE5vdEZvdW5kRXJyb3JJbXBsKG1lc3NhZ2UyKSB7CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubmFtZSA9ICJOb3RGb3VuZEVycm9yIjsKICAgICAgICB0aGlzLm1lc3NhZ2UgPSBtZXNzYWdlMjsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzCnZhciBTZXF1ZW5jZUVycm9yOwp2YXIgaW5pdF9TZXF1ZW5jZUVycm9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9TZXF1ZW5jZUVycm9yLmpzIigpIHsKICAgIGluaXRfY3JlYXRlRXJyb3JDbGFzcygpOwogICAgU2VxdWVuY2VFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBTZXF1ZW5jZUVycm9ySW1wbChtZXNzYWdlMikgewogICAgICAgIF9zdXBlcih0aGlzKTsKICAgICAgICB0aGlzLm5hbWUgPSAiU2VxdWVuY2VFcnJvciI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTI7CiAgICAgIH07CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzCmZ1bmN0aW9uIGlzVmFsaWREYXRlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgaW5zdGFuY2VvZiBEYXRlICYmICFpc05hTih2YWx1ZTIpOwp9CnZhciBpbml0X2lzRGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3V0aWwvaXNEYXRlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lb3V0LmpzCmZ1bmN0aW9uIHRpbWVvdXQoY29uZmlnMywgc2NoZWR1bGVyQXJnKSB7CiAgdmFyIF9hMTQgPSBpc1ZhbGlkRGF0ZShjb25maWczKSA/IHsgZmlyc3Q6IGNvbmZpZzMgfSA6IHR5cGVvZiBjb25maWczID09PSAibnVtYmVyIiA/IHsgZWFjaDogY29uZmlnMyB9IDogY29uZmlnMywgZmlyc3QyID0gX2ExNC5maXJzdCwgZWFjaCA9IF9hMTQuZWFjaCwgX2IgPSBfYTE0LndpdGgsIF93aXRoID0gX2IgPT09IHZvaWQgMCA/IHRpbWVvdXRFcnJvckZhY3RvcnkgOiBfYiwgX2MgPSBfYTE0LnNjaGVkdWxlciwgc2NoZWR1bGVyID0gX2MgPT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyAhPT0gbnVsbCAmJiBzY2hlZHVsZXJBcmcgIT09IHZvaWQgMCA/IHNjaGVkdWxlckFyZyA6IGFzeW5jU2NoZWR1bGVyIDogX2MsIF9kID0gX2ExNC5tZXRhLCBtZXRhID0gX2QgPT09IHZvaWQgMCA/IG51bGwgOiBfZDsKICBpZiAoZmlyc3QyID09IG51bGwgJiYgZWFjaCA9PSBudWxsKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJObyB0aW1lb3V0IHByb3ZpZGVkLiIpOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBvcmlnaW5hbFNvdXJjZVN1YnNjcmlwdGlvbjsKICAgIHZhciB0aW1lclN1YnNjcmlwdGlvbjsKICAgIHZhciBsYXN0VmFsdWUgPSBudWxsOwogICAgdmFyIHNlZW4gPSAwOwogICAgdmFyIHN0YXJ0VGltZXIgPSBmdW5jdGlvbihkZWxheTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPSBleGVjdXRlU2NoZWR1bGUoc3Vic2NyaWJlciwgc2NoZWR1bGVyLCBmdW5jdGlvbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgIGlubmVyRnJvbShfd2l0aCh7CiAgICAgICAgICAgIG1ldGEsCiAgICAgICAgICAgIGxhc3RWYWx1ZSwKICAgICAgICAgICAgc2VlbgogICAgICAgICAgfSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIHN1YnNjcmliZXIuZXJyb3IoZXJyKTsKICAgICAgICB9CiAgICAgIH0sIGRlbGF5Mik7CiAgICB9OwogICAgb3JpZ2luYWxTb3VyY2VTdWJzY3JpcHRpb24gPSBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIHNlZW4rKzsKICAgICAgc3Vic2NyaWJlci5uZXh0KGxhc3RWYWx1ZSA9IHZhbHVlMik7CiAgICAgIGVhY2ggPiAwICYmIHN0YXJ0VGltZXIoZWFjaCk7CiAgICB9LCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmICghKHRpbWVyU3Vic2NyaXB0aW9uID09PSBudWxsIHx8IHRpbWVyU3Vic2NyaXB0aW9uID09PSB2b2lkIDAgPyB2b2lkIDAgOiB0aW1lclN1YnNjcmlwdGlvbi5jbG9zZWQpKSB7CiAgICAgICAgdGltZXJTdWJzY3JpcHRpb24gPT09IG51bGwgfHwgdGltZXJTdWJzY3JpcHRpb24gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRpbWVyU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgIH0KICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgIH0pKTsKICAgICFzZWVuICYmIHN0YXJ0VGltZXIoZmlyc3QyICE9IG51bGwgPyB0eXBlb2YgZmlyc3QyID09PSAibnVtYmVyIiA/IGZpcnN0MiA6ICtmaXJzdDIgLSBzY2hlZHVsZXIubm93KCkgOiBlYWNoKTsKICB9KTsKfQpmdW5jdGlvbiB0aW1lb3V0RXJyb3JGYWN0b3J5KGluZm8pIHsKICB0aHJvdyBuZXcgVGltZW91dEVycm9yKGluZm8pOwp9CnZhciBUaW1lb3V0RXJyb3I7CnZhciBpbml0X3RpbWVvdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dC5qcyIoKSB7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X2lzRGF0ZSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9jcmVhdGVFcnJvckNsYXNzKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICAgIFRpbWVvdXRFcnJvciA9IGNyZWF0ZUVycm9yQ2xhc3MoZnVuY3Rpb24oX3N1cGVyKSB7CiAgICAgIHJldHVybiBmdW5jdGlvbiBUaW1lb3V0RXJyb3JJbXBsKGluZm8pIHsKICAgICAgICBpZiAoaW5mbyA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBpbmZvID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgX3N1cGVyKHRoaXMpOwogICAgICAgIHRoaXMubWVzc2FnZSA9ICJUaW1lb3V0IGhhcyBvY2N1cnJlZCI7CiAgICAgICAgdGhpcy5uYW1lID0gIlRpbWVvdXRFcnJvciI7CiAgICAgICAgdGhpcy5pbmZvID0gaW5mbzsKICAgICAgfTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hcC5qcwpmdW5jdGlvbiBtYXAyKHByb2plY3QsIHRoaXNBcmcpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBpbmRleDIgPSAwOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHN1YnNjcmliZXIubmV4dChwcm9qZWN0LmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykpOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X21hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXAuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvdXRpbC9tYXBPbmVPck1hbnlBcmdzLmpzCmZ1bmN0aW9uIGNhbGxPckFwcGx5KGZuLCBhcmdzKSB7CiAgcmV0dXJuIGlzQXJyYXkoYXJncykgPyBmbi5hcHBseSh2b2lkIDAsIF9fc3ByZWFkQXJyYXkoW10sIF9fcmVhZChhcmdzKSkpIDogZm4oYXJncyk7Cn0KZnVuY3Rpb24gbWFwT25lT3JNYW55QXJncyhmbikgewogIHJldHVybiBtYXAyKGZ1bmN0aW9uKGFyZ3MpIHsKICAgIHJldHVybiBjYWxsT3JBcHBseShmbiwgYXJncyk7CiAgfSk7Cn0KdmFyIGlzQXJyYXk7CnZhciBpbml0X21hcE9uZU9yTWFueUFyZ3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC91dGlsL21hcE9uZU9yTWFueUFyZ3MuanMiKCkgewogICAgaW5pdF90c2xpYl9lczYoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpc0FycmF5ID0gQXJyYXkuaXNBcnJheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzCnZhciBpbml0X2JpbmRDYWxsYmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZENhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvYmluZE5vZGVDYWxsYmFjay5qcwp2YXIgaW5pdF9iaW5kTm9kZUNhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9iaW5kTm9kZUNhbGxiYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUludGVybmFscy5qcwpmdW5jdGlvbiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQsIG9uQmVmb3JlTmV4dCwgZXhwYW5kMiwgaW5uZXJTdWJTY2hlZHVsZXIsIGFkZGl0aW9uYWxGaW5hbGl6ZXIpIHsKICB2YXIgYnVmZmVyMiA9IFtdOwogIHZhciBhY3RpdmUgPSAwOwogIHZhciBpbmRleDIgPSAwOwogIHZhciBpc0NvbXBsZXRlID0gZmFsc2U7CiAgdmFyIGNoZWNrQ29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgIGlmIChpc0NvbXBsZXRlICYmICFidWZmZXIyLmxlbmd0aCAmJiAhYWN0aXZlKSB7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0KICB9OwogIHZhciBvdXRlck5leHQgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgIHJldHVybiBhY3RpdmUgPCBjb25jdXJyZW50ID8gZG9Jbm5lclN1Yih2YWx1ZTIpIDogYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgfTsKICB2YXIgZG9Jbm5lclN1YiA9IGZ1bmN0aW9uKHZhbHVlMikgewogICAgZXhwYW5kMiAmJiBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgIGFjdGl2ZSsrOwogICAgdmFyIGlubmVyQ29tcGxldGUgPSBmYWxzZTsKICAgIGlubmVyRnJvbShwcm9qZWN0KHZhbHVlMiwgaW5kZXgyKyspKS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKGlubmVyVmFsdWUpIHsKICAgICAgb25CZWZvcmVOZXh0ID09PSBudWxsIHx8IG9uQmVmb3JlTmV4dCA9PT0gdm9pZCAwID8gdm9pZCAwIDogb25CZWZvcmVOZXh0KGlubmVyVmFsdWUpOwogICAgICBpZiAoZXhwYW5kMikgewogICAgICAgIG91dGVyTmV4dChpbm5lclZhbHVlKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBzdWJzY3JpYmVyLm5leHQoaW5uZXJWYWx1ZSk7CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBpbm5lckNvbXBsZXRlID0gdHJ1ZTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIGlmIChpbm5lckNvbXBsZXRlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGFjdGl2ZS0tOwogICAgICAgICAgdmFyIF9sb29wXzEgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcmVkVmFsdWUgPSBidWZmZXIyLnNoaWZ0KCk7CiAgICAgICAgICAgIGlmIChpbm5lclN1YlNjaGVkdWxlcikgewogICAgICAgICAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBpbm5lclN1YlNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gZG9Jbm5lclN1YihidWZmZXJlZFZhbHVlKTsKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBkb0lubmVyU3ViKGJ1ZmZlcmVkVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgd2hpbGUgKGJ1ZmZlcjIubGVuZ3RoICYmIGFjdGl2ZSA8IGNvbmN1cnJlbnQpIHsKICAgICAgICAgICAgX2xvb3BfMSgpOwogICAgICAgICAgfQogICAgICAgICAgY2hlY2tDb21wbGV0ZSgpOwogICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgc3Vic2NyaWJlci5lcnJvcihlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgfSkpOwogIH07CiAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgb3V0ZXJOZXh0LCBmdW5jdGlvbigpIHsKICAgIGlzQ29tcGxldGUgPSB0cnVlOwogICAgY2hlY2tDb21wbGV0ZSgpOwogIH0pKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBhZGRpdGlvbmFsRmluYWxpemVyID09PSBudWxsIHx8IGFkZGl0aW9uYWxGaW5hbGl6ZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGFkZGl0aW9uYWxGaW5hbGl6ZXIoKTsKICB9Owp9CnZhciBpbml0X21lcmdlSW50ZXJuYWxzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlSW50ZXJuYWxzLmpzIigpIHsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X2V4ZWN1dGVTY2hlZHVsZSgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcC5qcwpmdW5jdGlvbiBtZXJnZU1hcChwcm9qZWN0LCByZXN1bHRTZWxlY3RvciwgY29uY3VycmVudCkgewogIGlmIChjb25jdXJyZW50ID09PSB2b2lkIDApIHsKICAgIGNvbmN1cnJlbnQgPSBJbmZpbml0eTsKICB9CiAgaWYgKGlzRnVuY3Rpb24ocmVzdWx0U2VsZWN0b3IpKSB7CiAgICByZXR1cm4gbWVyZ2VNYXAoZnVuY3Rpb24oYTUsIGkxMSkgewogICAgICByZXR1cm4gbWFwMihmdW5jdGlvbihiNSwgaWkpIHsKICAgICAgICByZXR1cm4gcmVzdWx0U2VsZWN0b3IoYTUsIGI1LCBpMTEsIGlpKTsKICAgICAgfSkoaW5uZXJGcm9tKHByb2plY3QoYTUsIGkxMSkpKTsKICAgIH0sIGNvbmN1cnJlbnQpOwogIH0gZWxzZSBpZiAodHlwZW9mIHJlc3VsdFNlbGVjdG9yID09PSAibnVtYmVyIikgewogICAgY29uY3VycmVudCA9IHJlc3VsdFNlbGVjdG9yOwogIH0KICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHJldHVybiBtZXJnZUludGVybmFscyhzb3VyY2UsIHN1YnNjcmliZXIsIHByb2plY3QsIGNvbmN1cnJlbnQpOwogIH0pOwp9CnZhciBpbml0X21lcmdlTWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwLmpzIigpIHsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X21lcmdlSW50ZXJuYWxzKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZUFsbC5qcwpmdW5jdGlvbiBtZXJnZUFsbChjb25jdXJyZW50KSB7CiAgaWYgKGNvbmN1cnJlbnQgPT09IHZvaWQgMCkgewogICAgY29uY3VycmVudCA9IEluZmluaXR5OwogIH0KICByZXR1cm4gbWVyZ2VNYXAoaWRlbnRpdHksIGNvbmN1cnJlbnQpOwp9CnZhciBpbml0X21lcmdlQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlQWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfaWRlbnRpdHkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRBbGwuanMKZnVuY3Rpb24gY29uY2F0QWxsKCkgewogIHJldHVybiBtZXJnZUFsbCgxKTsKfQp2YXIgaW5pdF9jb25jYXRBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0QWxsLmpzIigpIHsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzCmZ1bmN0aW9uIGNvbmNhdCgpIHsKICB2YXIgYXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHJldHVybiBjb25jYXRBbGwoKShmcm9tKGFyZ3MsIHBvcFNjaGVkdWxlcihhcmdzKSkpOwp9CnZhciBpbml0X2NvbmNhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29uY2F0LmpzIigpIHsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfZnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9kZWZlci5qcwp2YXIgaW5pdF9kZWZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZGVmZXIuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9jb25uZWN0YWJsZS5qcwp2YXIgaW5pdF9jb25uZWN0YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvY29ubmVjdGFibGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mb3JrSm9pbi5qcwp2YXIgaW5pdF9mb3JrSm9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZm9ya0pvaW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9mcm9tRXZlbnQuanMKZnVuY3Rpb24gZnJvbUV2ZW50KHRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zLCByZXN1bHRTZWxlY3RvcikgewogIGlmIChpc0Z1bmN0aW9uKG9wdGlvbnMpKSB7CiAgICByZXN1bHRTZWxlY3RvciA9IG9wdGlvbnM7CiAgICBvcHRpb25zID0gdm9pZCAwOwogIH0KICBpZiAocmVzdWx0U2VsZWN0b3IpIHsKICAgIHJldHVybiBmcm9tRXZlbnQodGFyZ2V0LCBldmVudE5hbWUsIG9wdGlvbnMpLnBpcGUobWFwT25lT3JNYW55QXJncyhyZXN1bHRTZWxlY3RvcikpOwogIH0KICB2YXIgX2ExNCA9IF9fcmVhZChpc0V2ZW50VGFyZ2V0KHRhcmdldCkgPyBldmVudFRhcmdldE1ldGhvZHMubWFwKGZ1bmN0aW9uKG1ldGhvZE5hbWUpIHsKICAgIHJldHVybiBmdW5jdGlvbihoYW5kbGVyMikgewogICAgICByZXR1cm4gdGFyZ2V0W21ldGhvZE5hbWVdKGV2ZW50TmFtZSwgaGFuZGxlcjIsIG9wdGlvbnMpOwogICAgfTsKICB9KSA6IGlzTm9kZVN0eWxlRXZlbnRFbWl0dGVyKHRhcmdldCkgPyBub2RlRXZlbnRFbWl0dGVyTWV0aG9kcy5tYXAodG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpKSA6IGlzSlF1ZXJ5U3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSA/IGpxdWVyeU1ldGhvZHMubWFwKHRvQ29tbW9uSGFuZGxlclJlZ2lzdHJ5KHRhcmdldCwgZXZlbnROYW1lKSkgOiBbXSwgMiksIGFkZDMgPSBfYTE0WzBdLCByZW1vdmUyID0gX2ExNFsxXTsKICBpZiAoIWFkZDMpIHsKICAgIGlmIChpc0FycmF5TGlrZSh0YXJnZXQpKSB7CiAgICAgIHJldHVybiBtZXJnZU1hcChmdW5jdGlvbihzdWJUYXJnZXQpIHsKICAgICAgICByZXR1cm4gZnJvbUV2ZW50KHN1YlRhcmdldCwgZXZlbnROYW1lLCBvcHRpb25zKTsKICAgICAgfSkoaW5uZXJGcm9tKHRhcmdldCkpOwogICAgfQogIH0KICBpZiAoIWFkZDMpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgZXZlbnQgdGFyZ2V0Iik7CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgaGFuZGxlcjIgPSBmdW5jdGlvbigpIHsKICAgICAgdmFyIGFyZ3MgPSBbXTsKICAgICAgZm9yICh2YXIgX2kgPSAwOyBfaSA8IGFyZ3VtZW50cy5sZW5ndGg7IF9pKyspIHsKICAgICAgICBhcmdzW19pXSA9IGFyZ3VtZW50c1tfaV07CiAgICAgIH0KICAgICAgcmV0dXJuIHN1YnNjcmliZXIubmV4dCgxIDwgYXJncy5sZW5ndGggPyBhcmdzIDogYXJnc1swXSk7CiAgICB9OwogICAgYWRkMyhoYW5kbGVyMik7CiAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZW1vdmUyKGhhbmRsZXIyKTsKICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gdG9Db21tb25IYW5kbGVyUmVnaXN0cnkodGFyZ2V0LCBldmVudE5hbWUpIHsKICByZXR1cm4gZnVuY3Rpb24obWV0aG9kTmFtZSkgewogICAgcmV0dXJuIGZ1bmN0aW9uKGhhbmRsZXIyKSB7CiAgICAgIHJldHVybiB0YXJnZXRbbWV0aG9kTmFtZV0oZXZlbnROYW1lLCBoYW5kbGVyMik7CiAgICB9OwogIH07Cn0KZnVuY3Rpb24gaXNOb2RlU3R5bGVFdmVudEVtaXR0ZXIodGFyZ2V0KSB7CiAgcmV0dXJuIGlzRnVuY3Rpb24odGFyZ2V0LmFkZExpc3RlbmVyKSAmJiBpc0Z1bmN0aW9uKHRhcmdldC5yZW1vdmVMaXN0ZW5lcik7Cn0KZnVuY3Rpb24gaXNKUXVlcnlTdHlsZUV2ZW50RW1pdHRlcih0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQub24pICYmIGlzRnVuY3Rpb24odGFyZ2V0Lm9mZik7Cn0KZnVuY3Rpb24gaXNFdmVudFRhcmdldCh0YXJnZXQpIHsKICByZXR1cm4gaXNGdW5jdGlvbih0YXJnZXQuYWRkRXZlbnRMaXN0ZW5lcikgJiYgaXNGdW5jdGlvbih0YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcik7Cn0KdmFyIG5vZGVFdmVudEVtaXR0ZXJNZXRob2RzLCBldmVudFRhcmdldE1ldGhvZHMsIGpxdWVyeU1ldGhvZHM7CnZhciBpbml0X2Zyb21FdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50LmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X21lcmdlTWFwKCk7CiAgICBpbml0X2lzQXJyYXlMaWtlKCk7CiAgICBpbml0X2lzRnVuY3Rpb24oKTsKICAgIGluaXRfbWFwT25lT3JNYW55QXJncygpOwogICAgbm9kZUV2ZW50RW1pdHRlck1ldGhvZHMgPSBbImFkZExpc3RlbmVyIiwgInJlbW92ZUxpc3RlbmVyIl07CiAgICBldmVudFRhcmdldE1ldGhvZHMgPSBbImFkZEV2ZW50TGlzdGVuZXIiLCAicmVtb3ZlRXZlbnRMaXN0ZW5lciJdOwogICAganF1ZXJ5TWV0aG9kcyA9IFsib24iLCAib2ZmIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2Zyb21FdmVudFBhdHRlcm4uanMKdmFyIGluaXRfZnJvbUV2ZW50UGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvZnJvbUV2ZW50UGF0dGVybi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2dlbmVyYXRlLmpzCnZhciBpbml0X2dlbmVyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9nZW5lcmF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcwp2YXIgaW5pdF9paWYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2lpZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzCmZ1bmN0aW9uIHRpbWVyKGR1ZVRpbWUsIGludGVydmFsT3JTY2hlZHVsZXIsIHNjaGVkdWxlcikgewogIGlmIChkdWVUaW1lID09PSB2b2lkIDApIHsKICAgIGR1ZVRpbWUgPSAwOwogIH0KICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jOwogIH0KICB2YXIgaW50ZXJ2YWxEdXJhdGlvbiA9IC0xOwogIGlmIChpbnRlcnZhbE9yU2NoZWR1bGVyICE9IG51bGwpIHsKICAgIGlmIChpc1NjaGVkdWxlcihpbnRlcnZhbE9yU2NoZWR1bGVyKSkgewogICAgICBzY2hlZHVsZXIgPSBpbnRlcnZhbE9yU2NoZWR1bGVyOwogICAgfSBlbHNlIHsKICAgICAgaW50ZXJ2YWxEdXJhdGlvbiA9IGludGVydmFsT3JTY2hlZHVsZXI7CiAgICB9CiAgfQogIHJldHVybiBuZXcgT2JzZXJ2YWJsZShmdW5jdGlvbihzdWJzY3JpYmVyKSB7CiAgICB2YXIgZHVlID0gaXNWYWxpZERhdGUoZHVlVGltZSkgPyArZHVlVGltZSAtIHNjaGVkdWxlci5ub3coKSA6IGR1ZVRpbWU7CiAgICBpZiAoZHVlIDwgMCkgewogICAgICBkdWUgPSAwOwogICAgfQogICAgdmFyIG4xMyA9IDA7CiAgICByZXR1cm4gc2NoZWR1bGVyLnNjaGVkdWxlKGZ1bmN0aW9uKCkgewogICAgICBpZiAoIXN1YnNjcmliZXIuY2xvc2VkKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KG4xMysrKTsKICAgICAgICBpZiAoMCA8PSBpbnRlcnZhbER1cmF0aW9uKSB7CiAgICAgICAgICB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgaW50ZXJ2YWxEdXJhdGlvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0sIGR1ZSk7CiAgfSk7Cn0KdmFyIGluaXRfdGltZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3RpbWVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9hc3luYygpOwogICAgaW5pdF9pc1NjaGVkdWxlcigpOwogICAgaW5pdF9pc0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvaW50ZXJ2YWwuanMKdmFyIGluaXRfaW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL2ludGVydmFsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvbmV2ZXIuanMKZnVuY3Rpb24gbmV2ZXIoKSB7CiAgcmV0dXJuIE5FVkVSOwp9CnZhciBORVZFUjsKdmFyIGluaXRfbmV2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL25ldmVyLmpzIigpIHsKICAgIGluaXRfT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBORVZFUiA9IG5ldyBPYnNlcnZhYmxlKG5vb3ApOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9vbkVycm9yUmVzdW1lTmV4dC5qcwp2YXIgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvb25FcnJvclJlc3VtZU5leHQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9wYWlycy5qcwp2YXIgaW5pdF9wYWlycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcGFpcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcwpmdW5jdGlvbiBmaWx0ZXIocHJlZGljYXRlLCB0aGlzQXJnKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgaW5kZXgyID0gMDsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICByZXR1cm4gcHJlZGljYXRlLmNhbGwodGhpc0FyZywgdmFsdWUyLCBpbmRleDIrKykgJiYgc3Vic2NyaWJlci5uZXh0KHZhbHVlMik7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfZmlsdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbHRlci5qcyIoKSB7CiAgICBpbml0X2xpZnQoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcwp2YXIgaW5pdF9wYXJ0aXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3BhcnRpdGlvbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhY2UuanMKdmFyIGluaXRfcmFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29ic2VydmFibGUvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3JhbmdlLmpzCnZhciBpbml0X3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS9yYW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3VzaW5nLmpzCnZhciBpbml0X3VzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb2JzZXJ2YWJsZS91c2luZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcwp2YXIgaW5pdF96aXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vYnNlcnZhYmxlL3ppcC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC90eXBlcy5qcwp2YXIgaW5pdF90eXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL3R5cGVzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcwp2YXIgaW5pdF9hdWRpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYXVkaXRUaW1lLmpzCnZhciBpbml0X2F1ZGl0VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9hdWRpdFRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlci5qcwpmdW5jdGlvbiBidWZmZXIoY2xvc2luZ05vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgY3VycmVudEJ1ZmZlciA9IFtdOwogICAgc291cmNlLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHJldHVybiBjdXJyZW50QnVmZmVyLnB1c2godmFsdWUyKTsKICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICBzdWJzY3JpYmVyLm5leHQoY3VycmVudEJ1ZmZlcik7CiAgICAgIHN1YnNjcmliZXIuY29tcGxldGUoKTsKICAgIH0pKTsKICAgIGlubmVyRnJvbShjbG9zaW5nTm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHZhciBiNSA9IGN1cnJlbnRCdWZmZXI7CiAgICAgIGN1cnJlbnRCdWZmZXIgPSBbXTsKICAgICAgc3Vic2NyaWJlci5uZXh0KGI1KTsKICAgIH0sIG5vb3ApKTsKICAgIHJldHVybiBmdW5jdGlvbigpIHsKICAgICAgY3VycmVudEJ1ZmZlciA9IG51bGw7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X2J1ZmZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXIuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X25vb3AoKTsKICAgIGluaXRfT3BlcmF0b3JTdWJzY3JpYmVyKCk7CiAgICBpbml0X2lubmVyRnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlckNvdW50LmpzCmZ1bmN0aW9uIGJ1ZmZlckNvdW50KGJ1ZmZlclNpemUsIHN0YXJ0QnVmZmVyRXZlcnkpIHsKICBpZiAoc3RhcnRCdWZmZXJFdmVyeSA9PT0gdm9pZCAwKSB7CiAgICBzdGFydEJ1ZmZlckV2ZXJ5ID0gbnVsbDsKICB9CiAgc3RhcnRCdWZmZXJFdmVyeSA9IHN0YXJ0QnVmZmVyRXZlcnkgIT09IG51bGwgJiYgc3RhcnRCdWZmZXJFdmVyeSAhPT0gdm9pZCAwID8gc3RhcnRCdWZmZXJFdmVyeSA6IGJ1ZmZlclNpemU7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVycyA9IFtdOwogICAgdmFyIGNvdW50MiA9IDA7CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNCwgZV8yLCBfYjsKICAgICAgdmFyIHRvRW1pdCA9IG51bGw7CiAgICAgIGlmIChjb3VudDIrKyAlIHN0YXJ0QnVmZmVyRXZlcnkgPT09IDApIHsKICAgICAgICBidWZmZXJzLnB1c2goW10pOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgZm9yICh2YXIgYnVmZmVyc18xID0gX192YWx1ZXMoYnVmZmVycyksIGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKTsgIWJ1ZmZlcnNfMV8xLmRvbmU7IGJ1ZmZlcnNfMV8xID0gYnVmZmVyc18xLm5leHQoKSkgewogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSBidWZmZXJzXzFfMS52YWx1ZTsKICAgICAgICAgIGJ1ZmZlcjIucHVzaCh2YWx1ZTIpOwogICAgICAgICAgaWYgKGJ1ZmZlclNpemUgPD0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICAgICAgdG9FbWl0ID0gdG9FbWl0ICE9PSBudWxsICYmIHRvRW1pdCAhPT0gdm9pZCAwID8gdG9FbWl0IDogW107CiAgICAgICAgICAgIHRvRW1pdC5wdXNoKGJ1ZmZlcjIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZV8xXzEpIHsKICAgICAgICBlXzEgPSB7IGVycm9yOiBlXzFfMSB9OwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoYnVmZmVyc18xXzEgJiYgIWJ1ZmZlcnNfMV8xLmRvbmUgJiYgKF9hMTQgPSBidWZmZXJzXzEucmV0dXJuKSkgX2ExNC5jYWxsKGJ1ZmZlcnNfMSk7CiAgICAgICAgfSBmaW5hbGx5IHsKICAgICAgICAgIGlmIChlXzEpIHRocm93IGVfMS5lcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRvRW1pdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBmb3IgKHZhciB0b0VtaXRfMSA9IF9fdmFsdWVzKHRvRW1pdCksIHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCk7ICF0b0VtaXRfMV8xLmRvbmU7IHRvRW1pdF8xXzEgPSB0b0VtaXRfMS5uZXh0KCkpIHsKICAgICAgICAgICAgdmFyIGJ1ZmZlcjIgPSB0b0VtaXRfMV8xLnZhbHVlOwogICAgICAgICAgICBhcnJSZW1vdmUoYnVmZmVycywgYnVmZmVyMik7CiAgICAgICAgICAgIHN1YnNjcmliZXIubmV4dChidWZmZXIyKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlXzJfMSkgewogICAgICAgICAgZV8yID0geyBlcnJvcjogZV8yXzEgfTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgaWYgKHRvRW1pdF8xXzEgJiYgIXRvRW1pdF8xXzEuZG9uZSAmJiAoX2IgPSB0b0VtaXRfMS5yZXR1cm4pKSBfYi5jYWxsKHRvRW1pdF8xKTsKICAgICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICAgIGlmIChlXzIpIHRocm93IGVfMi5lcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICB2YXIgZV8zLCBfYTE0OwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIGJ1ZmZlcnNfMiA9IF9fdmFsdWVzKGJ1ZmZlcnMpLCBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCk7ICFidWZmZXJzXzJfMS5kb25lOyBidWZmZXJzXzJfMSA9IGJ1ZmZlcnNfMi5uZXh0KCkpIHsKICAgICAgICAgIHZhciBidWZmZXIyID0gYnVmZmVyc18yXzEudmFsdWU7CiAgICAgICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlXzNfMSkgewogICAgICAgIGVfMyA9IHsgZXJyb3I6IGVfM18xIH07CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGlmIChidWZmZXJzXzJfMSAmJiAhYnVmZmVyc18yXzEuZG9uZSAmJiAoX2ExNCA9IGJ1ZmZlcnNfMi5yZXR1cm4pKSBfYTE0LmNhbGwoYnVmZmVyc18yKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMykgdGhyb3cgZV8zLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBidWZmZXJzID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9idWZmZXJDb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJDb3VudC5qcyIoKSB7CiAgICBpbml0X3RzbGliX2VzNigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzCmZ1bmN0aW9uIGJ1ZmZlclRpbWUoYnVmZmVyVGltZVNwYW4pIHsKICB2YXIgX2ExNCwgX2I7CiAgdmFyIG90aGVyQXJncyA9IFtdOwogIGZvciAodmFyIF9pID0gMTsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICBvdGhlckFyZ3NbX2kgLSAxXSA9IGFyZ3VtZW50c1tfaV07CiAgfQogIHZhciBzY2hlZHVsZXIgPSAoX2ExNCA9IHBvcFNjaGVkdWxlcihvdGhlckFyZ3MpKSAhPT0gbnVsbCAmJiBfYTE0ICE9PSB2b2lkIDAgPyBfYTE0IDogYXN5bmNTY2hlZHVsZXI7CiAgdmFyIGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgPSAoX2IgPSBvdGhlckFyZ3NbMF0pICE9PSBudWxsICYmIF9iICE9PSB2b2lkIDAgPyBfYiA6IG51bGw7CiAgdmFyIG1heEJ1ZmZlclNpemUgPSBvdGhlckFyZ3NbMV0gfHwgSW5maW5pdHk7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICB2YXIgYnVmZmVyUmVjb3JkcyA9IFtdOwogICAgdmFyIHJlc3RhcnRPbkVtaXQgPSBmYWxzZTsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24ocmVjb3JkKSB7CiAgICAgIHZhciBidWZmZXIyID0gcmVjb3JkLmJ1ZmZlciwgc3VicyA9IHJlY29yZC5zdWJzOwogICAgICBzdWJzLnVuc3Vic2NyaWJlKCk7CiAgICAgIGFyclJlbW92ZShidWZmZXJSZWNvcmRzLCByZWNvcmQpOwogICAgICBzdWJzY3JpYmVyLm5leHQoYnVmZmVyMik7CiAgICAgIHJlc3RhcnRPbkVtaXQgJiYgc3RhcnRCdWZmZXIoKTsKICAgIH07CiAgICB2YXIgc3RhcnRCdWZmZXIgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGJ1ZmZlclJlY29yZHMpIHsKICAgICAgICB2YXIgc3VicyA9IG5ldyBTdWJzY3JpcHRpb24oKTsKICAgICAgICBzdWJzY3JpYmVyLmFkZChzdWJzKTsKICAgICAgICB2YXIgYnVmZmVyMiA9IFtdOwogICAgICAgIHZhciByZWNvcmRfMSA9IHsKICAgICAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgICAgIHN1YnMKICAgICAgICB9OwogICAgICAgIGJ1ZmZlclJlY29yZHMucHVzaChyZWNvcmRfMSk7CiAgICAgICAgZXhlY3V0ZVNjaGVkdWxlKHN1YnMsIHNjaGVkdWxlciwgZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gZW1pdChyZWNvcmRfMSk7CiAgICAgICAgfSwgYnVmZmVyVGltZVNwYW4pOwogICAgICB9CiAgICB9OwogICAgaWYgKGJ1ZmZlckNyZWF0aW9uSW50ZXJ2YWwgIT09IG51bGwgJiYgYnVmZmVyQ3JlYXRpb25JbnRlcnZhbCA+PSAwKSB7CiAgICAgIGV4ZWN1dGVTY2hlZHVsZShzdWJzY3JpYmVyLCBzY2hlZHVsZXIsIHN0YXJ0QnVmZmVyLCBidWZmZXJDcmVhdGlvbkludGVydmFsLCB0cnVlKTsKICAgIH0gZWxzZSB7CiAgICAgIHJlc3RhcnRPbkVtaXQgPSB0cnVlOwogICAgfQogICAgc3RhcnRCdWZmZXIoKTsKICAgIHZhciBidWZmZXJUaW1lU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdmFyIGVfMSwgX2ExNTsKICAgICAgdmFyIHJlY29yZHNDb3B5ID0gYnVmZmVyUmVjb3Jkcy5zbGljZSgpOwogICAgICB0cnkgewogICAgICAgIGZvciAodmFyIHJlY29yZHNDb3B5XzEgPSBfX3ZhbHVlcyhyZWNvcmRzQ29weSksIHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpOyAhcmVjb3Jkc0NvcHlfMV8xLmRvbmU7IHJlY29yZHNDb3B5XzFfMSA9IHJlY29yZHNDb3B5XzEubmV4dCgpKSB7CiAgICAgICAgICB2YXIgcmVjb3JkID0gcmVjb3Jkc0NvcHlfMV8xLnZhbHVlOwogICAgICAgICAgdmFyIGJ1ZmZlcjIgPSByZWNvcmQuYnVmZmVyOwogICAgICAgICAgYnVmZmVyMi5wdXNoKHZhbHVlMik7CiAgICAgICAgICBtYXhCdWZmZXJTaXplIDw9IGJ1ZmZlcjIubGVuZ3RoICYmIGVtaXQocmVjb3JkKTsKICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVfMV8xKSB7CiAgICAgICAgZV8xID0geyBlcnJvcjogZV8xXzEgfTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0cnkgewogICAgICAgICAgaWYgKHJlY29yZHNDb3B5XzFfMSAmJiAhcmVjb3Jkc0NvcHlfMV8xLmRvbmUgJiYgKF9hMTUgPSByZWNvcmRzQ29weV8xLnJldHVybikpIF9hMTUuY2FsbChyZWNvcmRzQ29weV8xKTsKICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgaWYgKGVfMSkgdGhyb3cgZV8xLmVycm9yOwogICAgICAgIH0KICAgICAgfQogICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgIHdoaWxlIChidWZmZXJSZWNvcmRzID09PSBudWxsIHx8IGJ1ZmZlclJlY29yZHMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGJ1ZmZlclJlY29yZHMubGVuZ3RoKSB7CiAgICAgICAgc3Vic2NyaWJlci5uZXh0KGJ1ZmZlclJlY29yZHMuc2hpZnQoKS5idWZmZXIpOwogICAgICB9CiAgICAgIGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSBudWxsIHx8IGJ1ZmZlclRpbWVTdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBidWZmZXJUaW1lU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIHN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgIH0sIHZvaWQgMCwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBidWZmZXJSZWNvcmRzID0gbnVsbDsKICAgIH0pOwogICAgc291cmNlLnN1YnNjcmliZShidWZmZXJUaW1lU3Vic2NyaWJlcik7CiAgfSk7Cn0KdmFyIGluaXRfYnVmZmVyVGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUaW1lLmpzIigpIHsKICAgIGluaXRfdHNsaWJfZXM2KCk7CiAgICBpbml0X1N1YnNjcmlwdGlvbigpOwogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9hcnJSZW1vdmUoKTsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfYXJncygpOwogICAgaW5pdF9leGVjdXRlU2NoZWR1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9idWZmZXJUb2dnbGUuanMKdmFyIGluaXRfYnVmZmVyVG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlclRvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvYnVmZmVyV2hlbi5qcwp2YXIgaW5pdF9idWZmZXJXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2J1ZmZlcldoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NhdGNoRXJyb3IuanMKdmFyIGluaXRfY2F0Y2hFcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jYXRjaEVycm9yLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZWR1Y2UuanMKdmFyIGluaXRfcmVkdWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlZHVjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdG9BcnJheS5qcwp2YXIgaW5pdF90b0FycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RvQXJyYXkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbWJpbmVMYXRlc3RBbGwuanMKdmFyIGluaXRfY29tYmluZUxhdGVzdEFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0QWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lQWxsLmpzCnZhciBpbml0X2NvbWJpbmVBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29tYmluZUxhdGVzdC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcwp2YXIgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb21iaW5lTGF0ZXN0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29uY2F0TWFwLmpzCnZhciBpbml0X2NvbmNhdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzCnZhciBpbml0X2NvbmNhdE1hcFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdE1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMKdmFyIGluaXRfY29uY2F0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2NvbmNhdFdpdGguanMKdmFyIGluaXRfY29uY2F0V2l0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25jYXRXaXRoLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9jb25uZWN0LmpzCnZhciBpbml0X2Nvbm5lY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY29ubmVjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMKdmFyIGluaXRfY291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvY291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzCmZ1bmN0aW9uIGRlYm91bmNlKGR1cmF0aW9uU2VsZWN0b3IpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBoYXNWYWx1ZSA9IGZhbHNlOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgZHVyYXRpb25TdWJzY3JpYmVyID0gbnVsbDsKICAgIHZhciBlbWl0ID0gZnVuY3Rpb24oKSB7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9PT0gbnVsbCB8fCBkdXJhdGlvblN1YnNjcmliZXIgPT09IHZvaWQgMCA/IHZvaWQgMCA6IGR1cmF0aW9uU3Vic2NyaWJlci51bnN1YnNjcmliZSgpOwogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBsYXN0VmFsdWU7CiAgICAgICAgbGFzdFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgfQogICAgfTsKICAgIHNvdXJjZS5zdWJzY3JpYmUoY3JlYXRlT3BlcmF0b3JTdWJzY3JpYmVyKHN1YnNjcmliZXIsIGZ1bmN0aW9uKHZhbHVlMikgewogICAgICBkdXJhdGlvblN1YnNjcmliZXIgPT09IG51bGwgfHwgZHVyYXRpb25TdWJzY3JpYmVyID09PSB2b2lkIDAgPyB2b2lkIDAgOiBkdXJhdGlvblN1YnNjcmliZXIudW5zdWJzY3JpYmUoKTsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBsYXN0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIGR1cmF0aW9uU3Vic2NyaWJlciA9IGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBlbWl0LCBub29wKTsKICAgICAgaW5uZXJGcm9tKGR1cmF0aW9uU2VsZWN0b3IodmFsdWUyKSkuc3Vic2NyaWJlKGR1cmF0aW9uU3Vic2NyaWJlcik7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBkdXJhdGlvblN1YnNjcmliZXIgPSBudWxsOwogICAgfSkpOwogIH0pOwp9CnZhciBpbml0X2RlYm91bmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlYm91bmNlLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWJvdW5jZVRpbWUuanMKZnVuY3Rpb24gZGVib3VuY2VUaW1lKGR1ZVRpbWUsIHNjaGVkdWxlcikgewogIGlmIChzY2hlZHVsZXIgPT09IHZvaWQgMCkgewogICAgc2NoZWR1bGVyID0gYXN5bmNTY2hlZHVsZXI7CiAgfQogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgdmFyIGFjdGl2ZVRhc2sgPSBudWxsOwogICAgdmFyIGxhc3RWYWx1ZSA9IG51bGw7CiAgICB2YXIgbGFzdFRpbWUgPSBudWxsOwogICAgdmFyIGVtaXQgPSBmdW5jdGlvbigpIHsKICAgICAgaWYgKGFjdGl2ZVRhc2spIHsKICAgICAgICBhY3RpdmVUYXNrLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgYWN0aXZlVGFzayA9IG51bGw7CiAgICAgICAgdmFyIHZhbHVlMiA9IGxhc3RWYWx1ZTsKICAgICAgICBsYXN0VmFsdWUgPSBudWxsOwogICAgICAgIHN1YnNjcmliZXIubmV4dCh2YWx1ZTIpOwogICAgICB9CiAgICB9OwogICAgZnVuY3Rpb24gZW1pdFdoZW5JZGxlKCkgewogICAgICB2YXIgdGFyZ2V0VGltZSA9IGxhc3RUaW1lICsgZHVlVGltZTsKICAgICAgdmFyIG5vdzIgPSBzY2hlZHVsZXIubm93KCk7CiAgICAgIGlmIChub3cyIDwgdGFyZ2V0VGltZSkgewogICAgICAgIGFjdGl2ZVRhc2sgPSB0aGlzLnNjaGVkdWxlKHZvaWQgMCwgdGFyZ2V0VGltZSAtIG5vdzIpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBlbWl0KCk7CiAgICB9CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgbGFzdFZhbHVlID0gdmFsdWUyOwogICAgICBsYXN0VGltZSA9IHNjaGVkdWxlci5ub3coKTsKICAgICAgaWYgKCFhY3RpdmVUYXNrKSB7CiAgICAgICAgYWN0aXZlVGFzayA9IHNjaGVkdWxlci5zY2hlZHVsZShlbWl0V2hlbklkbGUsIGR1ZVRpbWUpOwogICAgICAgIHN1YnNjcmliZXIuYWRkKGFjdGl2ZVRhc2spOwogICAgICB9CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgZW1pdCgpOwogICAgICBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCB2b2lkIDAsIGZ1bmN0aW9uKCkgewogICAgICBsYXN0VmFsdWUgPSBhY3RpdmVUYXNrID0gbnVsbDsKICAgIH0pKTsKICB9KTsKfQp2YXIgaW5pdF9kZWJvdW5jZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVib3VuY2VUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcwp2YXIgaW5pdF9kZWZhdWx0SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWZhdWx0SWZFbXB0eS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZS5qcwp2YXIgaW5pdF90YWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzCnZhciBpbml0X2lnbm9yZUVsZW1lbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lnbm9yZUVsZW1lbnRzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcwp2YXIgaW5pdF9tYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXBUby5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVsYXlXaGVuLmpzCnZhciBpbml0X2RlbGF5V2hlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZWxheVdoZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzCnZhciBpbml0X2RlbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2RlbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kZW1hdGVyaWFsaXplLmpzCnZhciBpbml0X2RlbWF0ZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGVtYXRlcmlhbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMKdmFyIGluaXRfZGlzdGluY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZGlzdGluY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzCnZhciBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2Rpc3RpbmN0VW50aWxDaGFuZ2VkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcwp2YXIgaW5pdF9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9kaXN0aW5jdFVudGlsS2V5Q2hhbmdlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3dJZkVtcHR5LmpzCnZhciBpbml0X3Rocm93SWZFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvd0lmRW1wdHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2VsZW1lbnRBdC5qcwp2YXIgaW5pdF9lbGVtZW50QXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZWxlbWVudEF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9lbmRXaXRoLmpzCnZhciBpbml0X2VuZFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZW5kV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMKdmFyIGluaXRfZXZlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXZlcnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3RNYXAuanMKdmFyIGluaXRfZXhoYXVzdE1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0TWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9leGhhdXN0QWxsLmpzCnZhciBpbml0X2V4aGF1c3RBbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhoYXVzdC5qcwp2YXIgaW5pdF9leGhhdXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4aGF1c3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2V4cGFuZC5qcwp2YXIgaW5pdF9leHBhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZXhwYW5kLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcwp2YXIgaW5pdF9maW5hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maW5hbGl6ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZC5qcwp2YXIgaW5pdF9maW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZpbmRJbmRleC5qcwp2YXIgaW5pdF9maW5kSW5kZXggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmluZEluZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcwp2YXIgaW5pdF9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9maXJzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZ3JvdXBCeS5qcwp2YXIgaW5pdF9ncm91cEJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2dyb3VwQnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2lzRW1wdHkuanMKdmFyIGluaXRfaXNFbXB0eSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9pc0VtcHR5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcwp2YXIgaW5pdF90YWtlTGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlTGFzdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbGFzdC5qcwp2YXIgaW5pdF9sYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2xhc3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzCnZhciBpbml0X21hdGVyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21hdGVyaWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tYXguanMKdmFyIGluaXRfbWF4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21heC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvZmxhdE1hcC5qcwp2YXIgaW5pdF9mbGF0TWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL2ZsYXRNYXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlTWFwVG8uanMKdmFyIGluaXRfbWVyZ2VNYXBUbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZU1hcFRvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVNjYW4uanMKdmFyIGluaXRfbWVyZ2VTY2FuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlU2Nhbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWVyZ2UuanMKdmFyIGluaXRfbWVyZ2UyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9tZXJnZVdpdGguanMKdmFyIGluaXRfbWVyZ2VXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL21lcmdlV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbWluLmpzCnZhciBpbml0X21pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9taW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL211bHRpY2FzdC5qcwp2YXIgaW5pdF9tdWx0aWNhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvbXVsdGljYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9vbkVycm9yUmVzdW1lTmV4dFdpdGguanMKdmFyIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL29uRXJyb3JSZXN1bWVOZXh0V2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMKdmFyIGluaXRfcGFpcndpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcGFpcndpc2UuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzCnZhciBpbml0X3BsdWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3BsdWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoLmpzCnZhciBpbml0X3B1Ymxpc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaEJlaGF2aW9yLmpzCnZhciBpbml0X3B1Ymxpc2hCZWhhdmlvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoQmVoYXZpb3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzCnZhciBpbml0X3B1Ymxpc2hMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3B1Ymxpc2hMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wdWJsaXNoUmVwbGF5LmpzCnZhciBpbml0X3B1Ymxpc2hSZXBsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcHVibGlzaFJlcGxheS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMKdmFyIGluaXRfcmFjZVdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZVdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JlcGVhdC5qcwp2YXIgaW5pdF9yZXBlYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9yZXBlYXRXaGVuLmpzCnZhciBpbml0X3JlcGVhdFdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmVwZWF0V2hlbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMKdmFyIGluaXRfcmV0cnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JldHJ5V2hlbi5qcwp2YXIgaW5pdF9yZXRyeVdoZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmV0cnlXaGVuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zYW1wbGUuanMKdmFyIGluaXRfc2FtcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2FtcGxlVGltZS5qcwp2YXIgaW5pdF9zYW1wbGVUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NhbXBsZVRpbWUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NjYW4uanMKdmFyIGluaXRfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zZXF1ZW5jZUVxdWFsLmpzCnZhciBpbml0X3NlcXVlbmNlRXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2VxdWVuY2VFcXVhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMKdmFyIGluaXRfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2hhcmUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzCnZhciBpbml0X3NoYXJlUmVwbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NoYXJlUmVwbGF5LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zaW5nbGUuanMKdmFyIGluaXRfc2luZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NpbmdsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcC5qcwp2YXIgaW5pdF9za2lwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzCnZhciBpbml0X3NraXBMYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBMYXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwVW50aWwuanMKdmFyIGluaXRfc2tpcFVudGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3NraXBVbnRpbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc2tpcFdoaWxlLmpzCnZhciBpbml0X3NraXBXaGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9za2lwV2hpbGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N0YXJ0V2l0aC5qcwpmdW5jdGlvbiBzdGFydFdpdGgoKSB7CiAgdmFyIHZhbHVlcyA9IFtdOwogIGZvciAodmFyIF9pID0gMDsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICB2YWx1ZXNbX2ldID0gYXJndW1lbnRzW19pXTsKICB9CiAgdmFyIHNjaGVkdWxlciA9IHBvcFNjaGVkdWxlcih2YWx1ZXMpOwogIHJldHVybiBvcGVyYXRlKGZ1bmN0aW9uKHNvdXJjZSwgc3Vic2NyaWJlcikgewogICAgKHNjaGVkdWxlciA/IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSwgc2NoZWR1bGVyKSA6IGNvbmNhdCh2YWx1ZXMsIHNvdXJjZSkpLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF9zdGFydFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3RhcnRXaXRoLmpzIigpIHsKICAgIGluaXRfY29uY2F0KCk7CiAgICBpbml0X2FyZ3MoKTsKICAgIGluaXRfbGlmdCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaE1hcC5qcwp2YXIgaW5pdF9zd2l0Y2hNYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hBbGwuanMKdmFyIGluaXRfc3dpdGNoQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMKdmFyIGluaXRfc3dpdGNoTWFwVG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvc3dpdGNoTWFwVG8uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3N3aXRjaFNjYW4uanMKdmFyIGluaXRfc3dpdGNoU2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9zd2l0Y2hTY2FuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlVW50aWwuanMKZnVuY3Rpb24gdGFrZVVudGlsKG5vdGlmaWVyKSB7CiAgcmV0dXJuIG9wZXJhdGUoZnVuY3Rpb24oc291cmNlLCBzdWJzY3JpYmVyKSB7CiAgICBpbm5lckZyb20obm90aWZpZXIpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9LCBub29wKSk7CiAgICAhc3Vic2NyaWJlci5jbG9zZWQgJiYgc291cmNlLnN1YnNjcmliZShzdWJzY3JpYmVyKTsKICB9KTsKfQp2YXIgaW5pdF90YWtlVW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFrZVVudGlsLmpzIigpIHsKICAgIGluaXRfbGlmdCgpOwogICAgaW5pdF9PcGVyYXRvclN1YnNjcmliZXIoKTsKICAgIGluaXRfaW5uZXJGcm9tKCk7CiAgICBpbml0X25vb3AoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YWtlV2hpbGUuanMKdmFyIGluaXRfdGFrZVdoaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rha2VXaGlsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGFwLmpzCnZhciBpbml0X3RhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90YXAuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3Rocm90dGxlLmpzCmZ1bmN0aW9uIHRocm90dGxlKGR1cmF0aW9uU2VsZWN0b3IsIGNvbmZpZzMpIHsKICByZXR1cm4gb3BlcmF0ZShmdW5jdGlvbihzb3VyY2UsIHN1YnNjcmliZXIpIHsKICAgIHZhciBfYTE0ID0gY29uZmlnMyAhPT0gbnVsbCAmJiBjb25maWczICE9PSB2b2lkIDAgPyBjb25maWczIDoge30sIF9iID0gX2ExNC5sZWFkaW5nLCBsZWFkaW5nID0gX2IgPT09IHZvaWQgMCA/IHRydWUgOiBfYiwgX2MgPSBfYTE0LnRyYWlsaW5nLCB0cmFpbGluZyA9IF9jID09PSB2b2lkIDAgPyBmYWxzZSA6IF9jOwogICAgdmFyIGhhc1ZhbHVlID0gZmFsc2U7CiAgICB2YXIgc2VuZFZhbHVlID0gbnVsbDsKICAgIHZhciB0aHJvdHRsZWQgPSBudWxsOwogICAgdmFyIGlzQ29tcGxldGUgPSBmYWxzZTsKICAgIHZhciBlbmRUaHJvdHRsaW5nID0gZnVuY3Rpb24oKSB7CiAgICAgIHRocm90dGxlZCA9PT0gbnVsbCB8fCB0aHJvdHRsZWQgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHRocm90dGxlZC51bnN1YnNjcmliZSgpOwogICAgICB0aHJvdHRsZWQgPSBudWxsOwogICAgICBpZiAodHJhaWxpbmcpIHsKICAgICAgICBzZW5kKCk7CiAgICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICAgIH0KICAgIH07CiAgICB2YXIgY2xlYW51cFRocm90dGxpbmcgPSBmdW5jdGlvbigpIHsKICAgICAgdGhyb3R0bGVkID0gbnVsbDsKICAgICAgaXNDb21wbGV0ZSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9OwogICAgdmFyIHN0YXJ0VGhyb3R0bGUgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHRocm90dGxlZCA9IGlubmVyRnJvbShkdXJhdGlvblNlbGVjdG9yKHZhbHVlMikpLnN1YnNjcmliZShjcmVhdGVPcGVyYXRvclN1YnNjcmliZXIoc3Vic2NyaWJlciwgZW5kVGhyb3R0bGluZywgY2xlYW51cFRocm90dGxpbmcpKTsKICAgIH07CiAgICB2YXIgc2VuZCA9IGZ1bmN0aW9uKCkgewogICAgICBpZiAoaGFzVmFsdWUpIHsKICAgICAgICBoYXNWYWx1ZSA9IGZhbHNlOwogICAgICAgIHZhciB2YWx1ZTIgPSBzZW5kVmFsdWU7CiAgICAgICAgc2VuZFZhbHVlID0gbnVsbDsKICAgICAgICBzdWJzY3JpYmVyLm5leHQodmFsdWUyKTsKICAgICAgICAhaXNDb21wbGV0ZSAmJiBzdGFydFRocm90dGxlKHZhbHVlMik7CiAgICAgIH0KICAgIH07CiAgICBzb3VyY2Uuc3Vic2NyaWJlKGNyZWF0ZU9wZXJhdG9yU3Vic2NyaWJlcihzdWJzY3JpYmVyLCBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgaGFzVmFsdWUgPSB0cnVlOwogICAgICBzZW5kVmFsdWUgPSB2YWx1ZTI7CiAgICAgICEodGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiAobGVhZGluZyA/IHNlbmQoKSA6IHN0YXJ0VGhyb3R0bGUodmFsdWUyKSk7CiAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgaXNDb21wbGV0ZSA9IHRydWU7CiAgICAgICEodHJhaWxpbmcgJiYgaGFzVmFsdWUgJiYgdGhyb3R0bGVkICYmICF0aHJvdHRsZWQuY2xvc2VkKSAmJiBzdWJzY3JpYmVyLmNvbXBsZXRlKCk7CiAgICB9KSk7CiAgfSk7Cn0KdmFyIGluaXRfdGhyb3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGUuanMiKCkgewogICAgaW5pdF9saWZ0KCk7CiAgICBpbml0X09wZXJhdG9yU3Vic2NyaWJlcigpOwogICAgaW5pdF9pbm5lckZyb20oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aHJvdHRsZVRpbWUuanMKZnVuY3Rpb24gdGhyb3R0bGVUaW1lKGR1cmF0aW9uLCBzY2hlZHVsZXIsIGNvbmZpZzMpIHsKICBpZiAoc2NoZWR1bGVyID09PSB2b2lkIDApIHsKICAgIHNjaGVkdWxlciA9IGFzeW5jU2NoZWR1bGVyOwogIH0KICB2YXIgZHVyYXRpb24kID0gdGltZXIoZHVyYXRpb24sIHNjaGVkdWxlcik7CiAgcmV0dXJuIHRocm90dGxlKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGR1cmF0aW9uJDsKICB9LCBjb25maWczKTsKfQp2YXIgaW5pdF90aHJvdHRsZVRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGhyb3R0bGVUaW1lLmpzIigpIHsKICAgIGluaXRfYXN5bmMoKTsKICAgIGluaXRfdGhyb3R0bGUoKTsKICAgIGluaXRfdGltZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy90aW1lSW50ZXJ2YWwuanMKdmFyIGluaXRfdGltZUludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVJbnRlcnZhbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMKdmFyIGluaXRfdGltZW91dFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZW91dFdpdGguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3RpbWVzdGFtcC5qcwp2YXIgaW5pdF90aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvdGltZXN0YW1wLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3cuanMKdmFyIGluaXRfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvdy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMKdmFyIGluaXRfd2luZG93Q291bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93Q291bnQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RpbWUuanMKdmFyIGluaXRfd2luZG93VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUaW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy93aW5kb3dUb2dnbGUuanMKdmFyIGluaXRfd2luZG93VG9nZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1RvZ2dsZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvd2luZG93V2hlbi5qcwp2YXIgaW5pdF93aW5kb3dXaGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpbmRvd1doZW4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzCnZhciBpbml0X3dpdGhMYXRlc3RGcm9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3dpdGhMYXRlc3RGcm9tLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBBbGwuanMKdmFyIGluaXRfemlwQWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3ppcEFsbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzCnZhciBpbml0X3ppcDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy96aXBXaXRoLmpzCnZhciBpbml0X3ppcFdpdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvemlwV2l0aC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbmRleC5qcwp2YXIgaW5pdF9lc201ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW5kZXguanMiKCkgewogICAgaW5pdF9PYnNlcnZhYmxlKCk7CiAgICBpbml0X0Nvbm5lY3RhYmxlT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9vYnNlcnZhYmxlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lcygpOwogICAgaW5pdF9TdWJqZWN0KCk7CiAgICBpbml0X0JlaGF2aW9yU3ViamVjdCgpOwogICAgaW5pdF9SZXBsYXlTdWJqZWN0KCk7CiAgICBpbml0X0FzeW5jU3ViamVjdCgpOwogICAgaW5pdF9hc2FwKCk7CiAgICBpbml0X2FzeW5jKCk7CiAgICBpbml0X3F1ZXVlKCk7CiAgICBpbml0X2FuaW1hdGlvbkZyYW1lKCk7CiAgICBpbml0X1ZpcnR1YWxUaW1lU2NoZWR1bGVyKCk7CiAgICBpbml0X1NjaGVkdWxlcigpOwogICAgaW5pdF9TdWJzY3JpcHRpb24oKTsKICAgIGluaXRfU3Vic2NyaWJlcigpOwogICAgaW5pdF9Ob3RpZmljYXRpb24oKTsKICAgIGluaXRfcGlwZSgpOwogICAgaW5pdF9ub29wKCk7CiAgICBpbml0X2lkZW50aXR5KCk7CiAgICBpbml0X2lzT2JzZXJ2YWJsZSgpOwogICAgaW5pdF9sYXN0VmFsdWVGcm9tKCk7CiAgICBpbml0X2ZpcnN0VmFsdWVGcm9tKCk7CiAgICBpbml0X0FyZ3VtZW50T3V0T2ZSYW5nZUVycm9yKCk7CiAgICBpbml0X0VtcHR5RXJyb3IoKTsKICAgIGluaXRfTm90Rm91bmRFcnJvcigpOwogICAgaW5pdF9PYmplY3RVbnN1YnNjcmliZWRFcnJvcigpOwogICAgaW5pdF9TZXF1ZW5jZUVycm9yKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfVW5zdWJzY3JpcHRpb25FcnJvcigpOwogICAgaW5pdF9iaW5kQ2FsbGJhY2soKTsKICAgIGluaXRfYmluZE5vZGVDYWxsYmFjaygpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0KCk7CiAgICBpbml0X2NvbmNhdCgpOwogICAgaW5pdF9jb25uZWN0YWJsZSgpOwogICAgaW5pdF9kZWZlcigpOwogICAgaW5pdF9lbXB0eSgpOwogICAgaW5pdF9mb3JrSm9pbigpOwogICAgaW5pdF9mcm9tKCk7CiAgICBpbml0X2Zyb21FdmVudCgpOwogICAgaW5pdF9mcm9tRXZlbnRQYXR0ZXJuKCk7CiAgICBpbml0X2dlbmVyYXRlKCk7CiAgICBpbml0X2lpZigpOwogICAgaW5pdF9pbnRlcnZhbCgpOwogICAgaW5pdF9tZXJnZSgpOwogICAgaW5pdF9uZXZlcigpOwogICAgaW5pdF9vZigpOwogICAgaW5pdF9vbkVycm9yUmVzdW1lTmV4dCgpOwogICAgaW5pdF9wYWlycygpOwogICAgaW5pdF9wYXJ0aXRpb24oKTsKICAgIGluaXRfcmFjZSgpOwogICAgaW5pdF9yYW5nZSgpOwogICAgaW5pdF90aHJvd0Vycm9yKCk7CiAgICBpbml0X3RpbWVyKCk7CiAgICBpbml0X3VzaW5nKCk7CiAgICBpbml0X3ppcCgpOwogICAgaW5pdF9zY2hlZHVsZWQoKTsKICAgIGluaXRfZW1wdHkoKTsKICAgIGluaXRfbmV2ZXIoKTsKICAgIGluaXRfdHlwZXMoKTsKICAgIGluaXRfY29uZmlnKCk7CiAgICBpbml0X2F1ZGl0KCk7CiAgICBpbml0X2F1ZGl0VGltZSgpOwogICAgaW5pdF9idWZmZXIoKTsKICAgIGluaXRfYnVmZmVyQ291bnQoKTsKICAgIGluaXRfYnVmZmVyVGltZSgpOwogICAgaW5pdF9idWZmZXJUb2dnbGUoKTsKICAgIGluaXRfYnVmZmVyV2hlbigpOwogICAgaW5pdF9jYXRjaEVycm9yKCk7CiAgICBpbml0X2NvbWJpbmVBbGwoKTsKICAgIGluaXRfY29tYmluZUxhdGVzdEFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0V2l0aCgpOwogICAgaW5pdF9jb25jYXRBbGwoKTsKICAgIGluaXRfY29uY2F0TWFwKCk7CiAgICBpbml0X2NvbmNhdE1hcFRvKCk7CiAgICBpbml0X2NvbmNhdFdpdGgoKTsKICAgIGluaXRfY29ubmVjdCgpOwogICAgaW5pdF9jb3VudCgpOwogICAgaW5pdF9kZWJvdW5jZSgpOwogICAgaW5pdF9kZWJvdW5jZVRpbWUoKTsKICAgIGluaXRfZGVmYXVsdElmRW1wdHkoKTsKICAgIGluaXRfZGVsYXkoKTsKICAgIGluaXRfZGVsYXlXaGVuKCk7CiAgICBpbml0X2RlbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfZGlzdGluY3QoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbENoYW5nZWQoKTsKICAgIGluaXRfZGlzdGluY3RVbnRpbEtleUNoYW5nZWQoKTsKICAgIGluaXRfZWxlbWVudEF0KCk7CiAgICBpbml0X2VuZFdpdGgoKTsKICAgIGluaXRfZXZlcnkoKTsKICAgIGluaXRfZXhoYXVzdCgpOwogICAgaW5pdF9leGhhdXN0QWxsKCk7CiAgICBpbml0X2V4aGF1c3RNYXAoKTsKICAgIGluaXRfZXhwYW5kKCk7CiAgICBpbml0X2ZpbHRlcigpOwogICAgaW5pdF9maW5hbGl6ZSgpOwogICAgaW5pdF9maW5kKCk7CiAgICBpbml0X2ZpbmRJbmRleCgpOwogICAgaW5pdF9maXJzdCgpOwogICAgaW5pdF9ncm91cEJ5KCk7CiAgICBpbml0X2lnbm9yZUVsZW1lbnRzKCk7CiAgICBpbml0X2lzRW1wdHkoKTsKICAgIGluaXRfbGFzdCgpOwogICAgaW5pdF9tYXAoKTsKICAgIGluaXRfbWFwVG8oKTsKICAgIGluaXRfbWF0ZXJpYWxpemUoKTsKICAgIGluaXRfbWF4KCk7CiAgICBpbml0X21lcmdlQWxsKCk7CiAgICBpbml0X2ZsYXRNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXAoKTsKICAgIGluaXRfbWVyZ2VNYXBUbygpOwogICAgaW5pdF9tZXJnZVNjYW4oKTsKICAgIGluaXRfbWVyZ2VXaXRoKCk7CiAgICBpbml0X21pbigpOwogICAgaW5pdF9tdWx0aWNhc3QoKTsKICAgIGluaXRfb2JzZXJ2ZU9uKCk7CiAgICBpbml0X29uRXJyb3JSZXN1bWVOZXh0V2l0aCgpOwogICAgaW5pdF9wYWlyd2lzZSgpOwogICAgaW5pdF9wbHVjaygpOwogICAgaW5pdF9wdWJsaXNoKCk7CiAgICBpbml0X3B1Ymxpc2hCZWhhdmlvcigpOwogICAgaW5pdF9wdWJsaXNoTGFzdCgpOwogICAgaW5pdF9wdWJsaXNoUmVwbGF5KCk7CiAgICBpbml0X3JhY2VXaXRoKCk7CiAgICBpbml0X3JlZHVjZSgpOwogICAgaW5pdF9yZXBlYXQoKTsKICAgIGluaXRfcmVwZWF0V2hlbigpOwogICAgaW5pdF9yZXRyeSgpOwogICAgaW5pdF9yZXRyeVdoZW4oKTsKICAgIGluaXRfcmVmQ291bnQoKTsKICAgIGluaXRfc2FtcGxlKCk7CiAgICBpbml0X3NhbXBsZVRpbWUoKTsKICAgIGluaXRfc2NhbigpOwogICAgaW5pdF9zZXF1ZW5jZUVxdWFsKCk7CiAgICBpbml0X3NoYXJlKCk7CiAgICBpbml0X3NoYXJlUmVwbGF5KCk7CiAgICBpbml0X3NpbmdsZSgpOwogICAgaW5pdF9za2lwKCk7CiAgICBpbml0X3NraXBMYXN0KCk7CiAgICBpbml0X3NraXBVbnRpbCgpOwogICAgaW5pdF9za2lwV2hpbGUoKTsKICAgIGluaXRfc3RhcnRXaXRoKCk7CiAgICBpbml0X3N1YnNjcmliZU9uKCk7CiAgICBpbml0X3N3aXRjaEFsbCgpOwogICAgaW5pdF9zd2l0Y2hNYXAoKTsKICAgIGluaXRfc3dpdGNoTWFwVG8oKTsKICAgIGluaXRfc3dpdGNoU2NhbigpOwogICAgaW5pdF90YWtlKCk7CiAgICBpbml0X3Rha2VMYXN0KCk7CiAgICBpbml0X3Rha2VVbnRpbCgpOwogICAgaW5pdF90YWtlV2hpbGUoKTsKICAgIGluaXRfdGFwKCk7CiAgICBpbml0X3Rocm90dGxlKCk7CiAgICBpbml0X3Rocm90dGxlVGltZSgpOwogICAgaW5pdF90aHJvd0lmRW1wdHkoKTsKICAgIGluaXRfdGltZUludGVydmFsKCk7CiAgICBpbml0X3RpbWVvdXQoKTsKICAgIGluaXRfdGltZW91dFdpdGgoKTsKICAgIGluaXRfdGltZXN0YW1wKCk7CiAgICBpbml0X3RvQXJyYXkoKTsKICAgIGluaXRfd2luZG93KCk7CiAgICBpbml0X3dpbmRvd0NvdW50KCk7CiAgICBpbml0X3dpbmRvd1RpbWUoKTsKICAgIGluaXRfd2luZG93VG9nZ2xlKCk7CiAgICBpbml0X3dpbmRvd1doZW4oKTsKICAgIGluaXRfd2l0aExhdGVzdEZyb20oKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMKdmFyIGluaXRfcGFydGl0aW9uMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3J4anNANy44LjIvbm9kZV9tb2R1bGVzL3J4anMvZGlzdC9lc201L2ludGVybmFsL29wZXJhdG9ycy9wYXJ0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvaW50ZXJuYWwvb3BlcmF0b3JzL3JhY2UuanMKdmFyIGluaXRfcmFjZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9pbnRlcm5hbC9vcGVyYXRvcnMvcmFjZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yeGpzQDcuOC4yL25vZGVfbW9kdWxlcy9yeGpzL2Rpc3QvZXNtNS9vcGVyYXRvcnMvaW5kZXguanMKdmFyIGluaXRfb3BlcmF0b3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcnhqc0A3LjguMi9ub2RlX21vZHVsZXMvcnhqcy9kaXN0L2VzbTUvb3BlcmF0b3JzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYXVkaXQoKTsKICAgIGluaXRfYXVkaXRUaW1lKCk7CiAgICBpbml0X2J1ZmZlcigpOwogICAgaW5pdF9idWZmZXJDb3VudCgpOwogICAgaW5pdF9idWZmZXJUaW1lKCk7CiAgICBpbml0X2J1ZmZlclRvZ2dsZSgpOwogICAgaW5pdF9idWZmZXJXaGVuKCk7CiAgICBpbml0X2NhdGNoRXJyb3IoKTsKICAgIGluaXRfY29tYmluZUFsbCgpOwogICAgaW5pdF9jb21iaW5lTGF0ZXN0QWxsKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3QyKCk7CiAgICBpbml0X2NvbWJpbmVMYXRlc3RXaXRoKCk7CiAgICBpbml0X2NvbmNhdDIoKTsKICAgIGluaXRfY29uY2F0QWxsKCk7CiAgICBpbml0X2NvbmNhdE1hcCgpOwogICAgaW5pdF9jb25jYXRNYXBUbygpOwogICAgaW5pdF9jb25jYXRXaXRoKCk7CiAgICBpbml0X2Nvbm5lY3QoKTsKICAgIGluaXRfY291bnQoKTsKICAgIGluaXRfZGVib3VuY2UoKTsKICAgIGluaXRfZGVib3VuY2VUaW1lKCk7CiAgICBpbml0X2RlZmF1bHRJZkVtcHR5KCk7CiAgICBpbml0X2RlbGF5KCk7CiAgICBpbml0X2RlbGF5V2hlbigpOwogICAgaW5pdF9kZW1hdGVyaWFsaXplKCk7CiAgICBpbml0X2Rpc3RpbmN0KCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxDaGFuZ2VkKCk7CiAgICBpbml0X2Rpc3RpbmN0VW50aWxLZXlDaGFuZ2VkKCk7CiAgICBpbml0X2VsZW1lbnRBdCgpOwogICAgaW5pdF9lbmRXaXRoKCk7CiAgICBpbml0X2V2ZXJ5KCk7CiAgICBpbml0X2V4aGF1c3QoKTsKICAgIGluaXRfZXhoYXVzdEFsbCgpOwogICAgaW5pdF9leGhhdXN0TWFwKCk7CiAgICBpbml0X2V4cGFuZCgpOwogICAgaW5pdF9maWx0ZXIoKTsKICAgIGluaXRfZmluYWxpemUoKTsKICAgIGluaXRfZmluZCgpOwogICAgaW5pdF9maW5kSW5kZXgoKTsKICAgIGluaXRfZmlyc3QoKTsKICAgIGluaXRfZ3JvdXBCeSgpOwogICAgaW5pdF9pZ25vcmVFbGVtZW50cygpOwogICAgaW5pdF9pc0VtcHR5KCk7CiAgICBpbml0X2xhc3QoKTsKICAgIGluaXRfbWFwKCk7CiAgICBpbml0X21hcFRvKCk7CiAgICBpbml0X21hdGVyaWFsaXplKCk7CiAgICBpbml0X21heCgpOwogICAgaW5pdF9tZXJnZTIoKTsKICAgIGluaXRfbWVyZ2VBbGwoKTsKICAgIGluaXRfZmxhdE1hcCgpOwogICAgaW5pdF9tZXJnZU1hcCgpOwogICAgaW5pdF9tZXJnZU1hcFRvKCk7CiAgICBpbml0X21lcmdlU2NhbigpOwogICAgaW5pdF9tZXJnZVdpdGgoKTsKICAgIGluaXRfbWluKCk7CiAgICBpbml0X211bHRpY2FzdCgpOwogICAgaW5pdF9vYnNlcnZlT24oKTsKICAgIGluaXRfb25FcnJvclJlc3VtZU5leHRXaXRoKCk7CiAgICBpbml0X3BhaXJ3aXNlKCk7CiAgICBpbml0X3BhcnRpdGlvbjIoKTsKICAgIGluaXRfcGx1Y2soKTsKICAgIGluaXRfcHVibGlzaCgpOwogICAgaW5pdF9wdWJsaXNoQmVoYXZpb3IoKTsKICAgIGluaXRfcHVibGlzaExhc3QoKTsKICAgIGluaXRfcHVibGlzaFJlcGxheSgpOwogICAgaW5pdF9yYWNlMigpOwogICAgaW5pdF9yYWNlV2l0aCgpOwogICAgaW5pdF9yZWR1Y2UoKTsKICAgIGluaXRfcmVwZWF0KCk7CiAgICBpbml0X3JlcGVhdFdoZW4oKTsKICAgIGluaXRfcmV0cnkoKTsKICAgIGluaXRfcmV0cnlXaGVuKCk7CiAgICBpbml0X3JlZkNvdW50KCk7CiAgICBpbml0X3NhbXBsZSgpOwogICAgaW5pdF9zYW1wbGVUaW1lKCk7CiAgICBpbml0X3NjYW4oKTsKICAgIGluaXRfc2VxdWVuY2VFcXVhbCgpOwogICAgaW5pdF9zaGFyZSgpOwogICAgaW5pdF9zaGFyZVJlcGxheSgpOwogICAgaW5pdF9zaW5nbGUoKTsKICAgIGluaXRfc2tpcCgpOwogICAgaW5pdF9za2lwTGFzdCgpOwogICAgaW5pdF9za2lwVW50aWwoKTsKICAgIGluaXRfc2tpcFdoaWxlKCk7CiAgICBpbml0X3N0YXJ0V2l0aCgpOwogICAgaW5pdF9zdWJzY3JpYmVPbigpOwogICAgaW5pdF9zd2l0Y2hBbGwoKTsKICAgIGluaXRfc3dpdGNoTWFwKCk7CiAgICBpbml0X3N3aXRjaE1hcFRvKCk7CiAgICBpbml0X3N3aXRjaFNjYW4oKTsKICAgIGluaXRfdGFrZSgpOwogICAgaW5pdF90YWtlTGFzdCgpOwogICAgaW5pdF90YWtlVW50aWwoKTsKICAgIGluaXRfdGFrZVdoaWxlKCk7CiAgICBpbml0X3RhcCgpOwogICAgaW5pdF90aHJvdHRsZSgpOwogICAgaW5pdF90aHJvdHRsZVRpbWUoKTsKICAgIGluaXRfdGhyb3dJZkVtcHR5KCk7CiAgICBpbml0X3RpbWVJbnRlcnZhbCgpOwogICAgaW5pdF90aW1lb3V0KCk7CiAgICBpbml0X3RpbWVvdXRXaXRoKCk7CiAgICBpbml0X3RpbWVzdGFtcCgpOwogICAgaW5pdF90b0FycmF5KCk7CiAgICBpbml0X3dpbmRvdygpOwogICAgaW5pdF93aW5kb3dDb3VudCgpOwogICAgaW5pdF93aW5kb3dUaW1lKCk7CiAgICBpbml0X3dpbmRvd1RvZ2dsZSgpOwogICAgaW5pdF93aW5kb3dXaGVuKCk7CiAgICBpbml0X3dpdGhMYXRlc3RGcm9tKCk7CiAgICBpbml0X3ppcDIoKTsKICAgIGluaXRfemlwQWxsKCk7CiAgICBpbml0X3ppcFdpdGgoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMKdmFyIHNtYXJ0cnhfcGx1Z2luc19yeGpzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cywgewogIE9ic2VydmFibGU6ICgpID0+IE9ic2VydmFibGUsCiAgUmVwbGF5U3ViamVjdDogKCkgPT4gUmVwbGF5U3ViamVjdCwKICBTdWJqZWN0OiAoKSA9PiBTdWJqZWN0LAogIFN1YnNjcmlwdGlvbjogKCkgPT4gU3Vic2NyaXB0aW9uLAogIGZyb206ICgpID0+IGZyb20sCiAgZnJvbUV2ZW50OiAoKSA9PiBmcm9tRXZlbnQsCiAgb2Y6ICgpID0+IG9mLAogIG9wczogKCkgPT4gb3BzCn0pOwp2YXIgb3BzOwp2YXIgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5wbHVnaW5zLnJ4anMuanMiKCkgewogICAgaW5pdF9lc201KCk7CiAgICBpbml0X29wZXJhdG9ycygpOwogICAgb3BzID0gewogICAgICBidWZmZXIsCiAgICAgIGJ1ZmZlckNvdW50LAogICAgICBidWZmZXJUaW1lLAogICAgICBkZWJvdW5jZSwKICAgICAgZGVib3VuY2VUaW1lLAogICAgICBmaWx0ZXIsCiAgICAgIG1hcDogbWFwMiwKICAgICAgc3RhcnRXaXRoLAogICAgICB0YWtlVW50aWwsCiAgICAgIHRocm90dGxlVGltZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvc21hcnRyeC5jbGFzc2VzLm9ic2VydmFibGVtYXAuanMKdmFyIE9ic2VydmFibGVtYXA7CnZhciBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZW1hcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHJ4X3BsdWdpbnNfcnhqcygpOwogICAgT2JzZXJ2YWJsZW1hcCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkgPSBuZXcgQXJyYXkoKTsKICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5ID0gbmV3IEFycmF5KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNyZWF0ZXMgYSBob3Qgc3ViamVjdCBpZiBub3QgeWV0IHJlZ2lzdGVyZWQgZm9yIHRoZSBldmVudC4KICAgICAgICogSW4gY2FzZSBldmVudCBoYXMgYmVlbiByZWdpc3RlcmVkIGJlZm9yZSB0aGUgc2FtZSBvYnNlcnZhYmxlIGlzIHJldHVybmVkLgogICAgICAgKi8KICAgICAgZ2V0U3ViamVjdEZvckVtaXR0ZXJFdmVudChlbWl0dGVyQXJnLCBldmVudEFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nQnVuZGxlID0gdGhpcy5vYnNlcnZhYmxlRXZlbnRFbWl0dGVyQnVuZGxlQXJyYXkuZmluZCgoYnVuZGxlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYnVuZGxlQXJnLmV2ZW50UmVmID09PSBlbWl0dGVyQXJnICYmIGJ1bmRsZUFyZy5ldmVudCA9PT0gZXZlbnRBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlck9ic2VydmFibGUgPSBmcm9tRXZlbnQoZW1pdHRlckFyZywgZXZlbnRBcmcpOwogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgZW1pdHRlck9ic2VydmFibGUuc3Vic2NyaWJlKGVtaXR0ZXJTdWJqZWN0KTsKICAgICAgICAgIGNvbnN0IG5ld0J1bmRsZSA9IHsKICAgICAgICAgICAgc3ViamVjdDogZW1pdHRlclN1YmplY3QsCiAgICAgICAgICAgIGV2ZW50UmVmOiBlbWl0dGVyQXJnLAogICAgICAgICAgICBldmVudDogZXZlbnRBcmcKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLm9ic2VydmFibGVFdmVudEVtaXR0ZXJCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldFN1YmplY3RGb3JFdmVudFRhcmdldChldmVudFRhcmdldEFyZywgZXZlbnROYW1lQXJnKSB7CiAgICAgICAgY29uc3QgZXhpc3RpbmdCdW5kbGUgPSB0aGlzLm9ic2VydmFibGVFdmVudFRhcmdldEJ1bmRsZUFycmF5LmZpbmQoKGJ1bmRsZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIGJ1bmRsZUFyZy5ldmVudFJlZiA9PT0gZXZlbnRUYXJnZXRBcmcgJiYgYnVuZGxlQXJnLmV2ZW50ID09PSBldmVudE5hbWVBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGV4aXN0aW5nQnVuZGxlKSB7CiAgICAgICAgICByZXR1cm4gZXhpc3RpbmdCdW5kbGUuc3ViamVjdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgZW1pdHRlclN1YmplY3QgPSBuZXcgU3ViamVjdCgpOwogICAgICAgICAgY29uc3QgbmV3QnVuZGxlID0gewogICAgICAgICAgICBzdWJqZWN0OiBlbWl0dGVyU3ViamVjdCwKICAgICAgICAgICAgZXZlbnRSZWY6IGV2ZW50VGFyZ2V0QXJnLAogICAgICAgICAgICBldmVudDogZXZlbnROYW1lQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRXZlbnRUYXJnZXRCdW5kbGVBcnJheS5wdXNoKG5ld0J1bmRsZSk7CiAgICAgICAgICByZXR1cm4gbmV3QnVuZGxlLnN1YmplY3Q7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmNsYXNzZXMub2JzZXJ2YWJsZWludGFrZS5qcwp2YXIgT2JzZXJ2YWJsZUludGFrZTsKdmFyIGluaXRfc21hcnRyeF9jbGFzc2VzX29ic2VydmFibGVpbnRha2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguY2xhc3Nlcy5vYnNlcnZhYmxlaW50YWtlLmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgICBPYnNlcnZhYmxlSW50YWtlID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm9ic2VydmFibGVGdW5jdGlvbnMgPSB7CiAgICAgICAgICBuZXh0OiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIGNvbXBsZXRlOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgdGhpcy5nZW5lcmF0b3IgPSBudWxsOwogICAgICAgIHRoaXMuYnVmZmVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnBheWxvYWRCdWZmZXIgPSBbXTsKICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBuZXcgT2JzZXJ2YWJsZSgob2JzZXJ2ZXJBcmcpID0+IHsKICAgICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5uZXh0ID0gKC4uLmFyZ3MpID0+IHsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLm5leHQoYXJncyk7CiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLmNvbXBsZXRlID0gKCkgPT4gewogICAgICAgICAgICB0aGlzLmNvbXBsZXRlZERlZmZlcmVkLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuIG9ic2VydmVyQXJnLmNvbXBsZXRlKCk7CiAgICAgICAgICB9OwogICAgICAgIH0pOwogICAgICAgIHRoaXMuY29tcGxldGVkRGVmZmVyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICB0aGlzLmNvbXBsZXRlZCA9IHRoaXMuY29tcGxldGVkRGVmZmVyZWQucHJvbWlzZTsKICAgICAgfQogICAgICBzZXRPYnNlcnZhYmxlKG9ic2VydmFibGVGdW5jKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZUZ1bmM7CiAgICAgIH0KICAgICAgcHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuYnVmZmVyZWQpIHsKICAgICAgICAgIHRoaXMucGF5bG9hZEJ1ZmZlci5wdXNoKHBheWxvYWRBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmludGVybmFsUHVzaChwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1c2hlcyBtYW55IHBheWxvYWRzIGFzIGFycmF5CiAgICAgICAqIEBwYXJhbSBwYXlsb2FkQXJnQXJyYXkKICAgICAgICovCiAgICAgIHB1c2hNYW55KHBheWxvYWRBcmdBcnJheSkgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBwYXlsb2FkQXJnQXJyYXkpIHsKICAgICAgICAgIHRoaXMucHVzaChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldHMgYSBnZW5lcmF0b3IgdG8gcXVlcnkgdGhlIG5leHQgcHVzaGVkIHZhbHVlCiAgICAgICAqIEBwYXJhbSBnZW5lcmF0b3JBcmcKICAgICAgICovCiAgICAgIHNldEdlbmVyYXRvcihnZW5lcmF0b3JBcmcpIHsKICAgICAgICB0aGlzLmdlbmVyYXRvciA9IGdlbmVyYXRvckFyZzsKICAgICAgfQogICAgICBtYWtlQnVmZmVyZWQoKSB7CiAgICAgICAgdGhpcy5idWZmZXJlZCA9IHRydWU7CiAgICAgIH0KICAgICAgc3Vic2NyaWJlKC4uLmFyZ3MpIHsKICAgICAgICByZXR1cm4gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSguLi5hcmdzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVxdWVzdCB0aGUgbmV4dCB2YWx1ZXMgaW4gdGhlIHF1YW50aXR5IHNwZWNpZmllZAogICAgICAgKiBAcGFyYW0gaG93TWFueUFyZyBpZiBhIGdlbmVyYXRvciBpcyBzZXQsIG9mIGEgYnVmZmVyIGV4aXN0cywgdGhpcyBhbGxvd3MgcmV0cmlldmluZyB2YWx1ZXMKICAgICAgICovCiAgICAgIHJlcXVlc3QoaG93TWFueUFyZykgewogICAgICAgIGlmIChob3dNYW55QXJnID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSAhPT0gaG93TWFueUFyZzsgaTExKyspIHsKICAgICAgICAgICAgaWYgKHRoaXMucGF5bG9hZEJ1ZmZlci5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgdGhpcy5pbnRlcm5hbFB1c2godGhpcy5wYXlsb2FkQnVmZmVyLnNoaWZ0KCkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IG5leHRQYXlsb2FkID0gdGhpcy5nZW5lcmF0b3IubmV4dCgpOwogICAgICAgICAgICAgIHRoaXMuaW50ZXJuYWxQdXNoKG5leHRQYXlsb2FkLnZhbHVlKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogc2lnbmFscyB0aGUgY29tcGxldGlvbiBvZiB0aGlzIG9ic2VydmFibGUKICAgICAgICovCiAgICAgIHNpZ25hbENvbXBsZXRlKCkgewogICAgICAgIHRoaXMub2JzZXJ2YWJsZUZ1bmN0aW9ucy5jb21wbGV0ZSgpOwogICAgICB9CiAgICAgIGludGVybmFsUHVzaChwYXlsb2FkQXJnKSB7CiAgICAgICAgdGhpcy5vYnNlcnZhYmxlRnVuY3Rpb25zLm5leHQocGF5bG9hZEFyZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL3NtYXJ0cnguZnVuY3Rpb25zLmpzCmZ1bmN0aW9uIGZyb21TdHJlYW1XaXRoQmFja3ByZXNzdXJlKHN0cmVhbSkgewogIHJldHVybiBuZXcgT2JzZXJ2YWJsZSgoc3Vic2NyaWJlcikgPT4gewogICAgY29uc3QgcGF1c2VTdHJlYW0gPSAoKSA9PiBzdHJlYW0ucGF1c2UoKTsKICAgIGNvbnN0IHJlc3VtZVN0cmVhbSA9ICgpID0+IHByb2Nlc3MubmV4dFRpY2soKCkgPT4gc3RyZWFtLnJlc3VtZSgpKTsKICAgIGNvbnN0IG9uRGF0YSA9IChkYXRhKSA9PiB7CiAgICAgIHBhdXNlU3RyZWFtKCk7CiAgICAgIHN1YnNjcmliZXIubmV4dChkYXRhKTsKICAgICAgcmVzdW1lU3RyZWFtKCk7CiAgICB9OwogICAgc3RyZWFtLm9uKCJkYXRhIiwgb25EYXRhKTsKICAgIHN0cmVhbS5vbigiZXJyb3IiLCAoZXJyb3IpID0+IHN1YnNjcmliZXIuZXJyb3IoZXJyb3IpKTsKICAgIHN0cmVhbS5vbigiZW5kIiwgKCkgPT4gc3Vic2NyaWJlci5jb21wbGV0ZSgpKTsKICAgIHN0cmVhbS5vbigiY2xvc2UiLCAoKSA9PiBzdWJzY3JpYmVyLmNvbXBsZXRlKCkpOwogICAgcmV0dXJuICgpID0+IHsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJkYXRhIiwgb25EYXRhKTsKICAgICAgc3RyZWFtLnJlbW92ZUxpc3RlbmVyKCJlcnJvciIsIHN1YnNjcmliZXIuZXJyb3IpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImVuZCIsIHN1YnNjcmliZXIuY29tcGxldGUpOwogICAgICBzdHJlYW0ucmVtb3ZlTGlzdGVuZXIoImNsb3NlIiwgc3Vic2NyaWJlci5jb21wbGV0ZSk7CiAgICB9OwogIH0pOwp9CnZhciBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyeEAzLjAuMTAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cngvZGlzdF90cy9zbWFydHJ4LmZ1bmN0aW9ucy5qcyIoKSB7CiAgICBpbml0X2VzbTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cnhAMy4wLjEwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJ4L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMiwgewogIE9ic2VydmFibGVJbnRha2U6ICgpID0+IE9ic2VydmFibGVJbnRha2UsCiAgT2JzZXJ2YWJsZW1hcDogKCkgPT4gT2JzZXJ2YWJsZW1hcCwKICBmcm9tU3RyZWFtV2l0aEJhY2twcmVzc3VyZTogKCkgPT4gZnJvbVN0cmVhbVdpdGhCYWNrcHJlc3N1cmUsCiAgcnhqczogKCkgPT4gc21hcnRyeF9wbHVnaW5zX3J4anNfZXhwb3J0cwp9KTsKdmFyIGluaXRfZGlzdF90czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJ4QDMuMC4xMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyeC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRyeF9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlbWFwKCk7CiAgICBpbml0X3NtYXJ0cnhfY2xhc3Nlc19vYnNlcnZhYmxlaW50YWtlKCk7CiAgICBpbml0X3NtYXJ0cnhfZnVuY3Rpb25zKCk7CiAgICBpbml0X3NtYXJ0cnhfcGx1Z2luc19yeGpzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzCmZ1bmN0aW9uIG41KHQ5KSB7CiAgcmV0dXJuIChlMTEsIG8xMykgPT4gIm9iamVjdCIgPT0gdHlwZW9mIG8xMyA/IHI0KHQ5LCBlMTEsIG8xMykgOiAoKHQxMCwgZTEyLCBvMTQpID0+IHsKICAgIGNvbnN0IHIxMSA9IGUxMi5oYXNPd25Qcm9wZXJ0eShvMTQpOwogICAgcmV0dXJuIGUxMi5jb25zdHJ1Y3Rvci5jcmVhdGVQcm9wZXJ0eShvMTQsIHQxMCksIHIxMSA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZTEyLCBvMTQpIDogdm9pZCAwOwogIH0pKHQ5LCBlMTEsIG8xMyk7Cn0KdmFyIG82LCByNDsKdmFyIGluaXRfcHJvcGVydHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzIigpIHsKICAgIGluaXRfcmVhY3RpdmVfZWxlbWVudCgpOwogICAgbzYgPSB7IGF0dHJpYnV0ZTogdHJ1ZSwgdHlwZTogU3RyaW5nLCBjb252ZXJ0ZXI6IHUsIHJlZmxlY3Q6IGZhbHNlLCBoYXNDaGFuZ2VkOiBmIH0sIHI0ID0gKHQ5ID0gbzYsIGUxMSwgcjExKSA9PiB7CiAgICAgIGNvbnN0IHsga2luZDogbjEzLCBtZXRhZGF0YTogaTExIH0gPSByMTE7CiAgICAgIGxldCBzOSA9IGdsb2JhbFRoaXMubGl0UHJvcGVydHlNZXRhZGF0YS5nZXQoaTExKTsKICAgICAgaWYgKHZvaWQgMCA9PT0gczkgJiYgZ2xvYmFsVGhpcy5saXRQcm9wZXJ0eU1ldGFkYXRhLnNldChpMTEsIHM5ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSksICJzZXR0ZXIiID09PSBuMTMgJiYgKCh0OSA9IE9iamVjdC5jcmVhdGUodDkpKS53cmFwcGVkID0gdHJ1ZSksIHM5LnNldChyMTEubmFtZSwgdDkpLCAiYWNjZXNzb3IiID09PSBuMTMpIHsKICAgICAgICBjb25zdCB7IG5hbWU6IG8xMyB9ID0gcjExOwogICAgICAgIHJldHVybiB7IHNldChyMTIpIHsKICAgICAgICAgIGNvbnN0IG4xNCA9IGUxMS5nZXQuY2FsbCh0aGlzKTsKICAgICAgICAgIGUxMS5zZXQuY2FsbCh0aGlzLCByMTIpLCB0aGlzLnJlcXVlc3RVcGRhdGUobzEzLCBuMTQsIHQ5LCB0cnVlLCByMTIpOwogICAgICAgIH0sIGluaXQoZTEyKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwICE9PSBlMTIgJiYgdGhpcy5DKG8xMywgdm9pZCAwLCB0OSwgZTEyKSwgZTEyOwogICAgICAgIH0gfTsKICAgICAgfQogICAgICBpZiAoInNldHRlciIgPT09IG4xMykgewogICAgICAgIGNvbnN0IHsgbmFtZTogbzEzIH0gPSByMTE7CiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgY29uc3QgbjE0ID0gdGhpc1tvMTNdOwogICAgICAgICAgZTExLmNhbGwodGhpcywgcjEyKSwgdGhpcy5yZXF1ZXN0VXBkYXRlKG8xMywgbjE0LCB0OSwgdHJ1ZSwgcjEyKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBkZWNvcmF0b3IgbG9jYXRpb246ICIgKyBuMTMpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvcHJvcGVydHkuanMKdmFyIGluaXRfcHJvcGVydHkyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9wcm9wZXJ0eS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY29sb3JzLmpzCnZhciBpbml0X2RvbXRvb2xzX2NvbG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jb2xvcnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czMsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0LAogIGRlbGF5Rm9yOiAoKSA9PiBkZWxheUZvciwKICBkZWxheUZvclJhbmRvbTogKCkgPT4gZGVsYXlGb3JSYW5kb20KfSk7CnZhciBkZWxheUZvciwgZGVsYXlGb3JSYW5kb20sIFRpbWVvdXQ7CnZhciBpbml0X2Rpc3RfdHMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRkZWxheUAzLjAuNS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRkZWxheS9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGlzdF90cygpOwogICAgZGVsYXlGb3IgPSBhc3luYyAodGltZUluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gbmV3IFRpbWVvdXQodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tID0gYXN5bmMgKHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCB0aW1lTWF4SW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgYXdhaXQgZGVsYXlGb3IoTWF0aC5yYW5kb20oKSAqICh0aW1lTWF4SW5NaWxsaXNlY29uZEFyZyAtIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnKSArIHRpbWVNaW5Jbk1pbGxpc2Vjb25kQXJnLCBudWxsLCB1bnJlZmVkQXJnKTsKICAgICAgcmV0dXJuIHBhc3NPbkFyZzsKICAgIH07CiAgICBUaW1lb3V0ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIoKTsKICAgICAgICB0aGlzLnByb21pc2UgPSB0aGlzLl9kZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuX3RpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGlmICghdGhpcy5fY2FuY2VsbGVkKSB7CiAgICAgICAgICAgIHRoaXMuX2RlZmVycmVkLnJlc29sdmUocGFzc09uKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lSW5NaWxsaXNlY29uZEFyZyk7CiAgICAgICAgdGhpcy5zdGFydGVkID0gRGF0ZS5ub3coKTsKICAgICAgICBpZiAodW5yZWZlZEFyZykgewogICAgICAgICAgdGhpcy5tYWtlVW5yZWZlZCgpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdW5yZWZmaW5nIGEgdGltZW91dCBjYXVzZXMgdGhlIG5vZGUgcHJvY2VzcyB0byBub3Qgd2FpdCBmb3IgY29tcGxldGlvbiBiZWZvcmUgZXhpdAogICAgICAgKi8KICAgICAgbWFrZVVucmVmZWQoKSB7CiAgICAgICAgdGhpcy5fdGltZW91dC51bnJlZigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjYW5jZWxzIHRoZSB0aW1lcgogICAgICAgKi8KICAgICAgY2FuY2VsKCkgewogICAgICAgIHRoaXMuX2NhbmNlbGxlZCA9IHRydWU7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3RpbWVvdXQpOwogICAgICB9CiAgICAgIGdldFRpbWVMZWZ0KCkgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuc3RhcnRlZCArIHRoaXMudGltZW91dEluTWlsbGlzIC0gRGF0ZS5ub3coKTsKICAgICAgICByZXR1cm4gcmVzdWx0ID4gMCA/IHJlc3VsdCA6IDA7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czQgPSB7fTsKdmFyIGluaXRfZGlzdF90czQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3QtaW50ZXJmYWNlc0AzLjAuMTkvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC1pbnRlcmZhY2VzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXNjYXBlLXN0cmluZy1yZWdleHBANS4wLjAvbm9kZV9tb2R1bGVzL2VzY2FwZS1zdHJpbmctcmVnZXhwL2luZGV4LmpzCmZ1bmN0aW9uIGVzY2FwZVN0cmluZ1JlZ2V4cChzdHJpbmczKSB7CiAgaWYgKHR5cGVvZiBzdHJpbmczICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgYSBzdHJpbmciKTsKICB9CiAgcmV0dXJuIHN0cmluZzMucmVwbGFjZSgvW3xcXHt9KClbXF1eJCsqPy5dL2csICJcXCQmIikucmVwbGFjZSgvLS9nLCAiXFx4MmQiKTsKfQp2YXIgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2VzY2FwZS1zdHJpbmctcmVnZXhwQDUuMC4wL25vZGVfbW9kdWxlcy9lc2NhcGUtc3RyaW5nLXJlZ2V4cC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXRjaGVyQDUuMC4wL25vZGVfbW9kdWxlcy9tYXRjaGVyL2luZGV4LmpzCnZhciBtYXRjaGVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobWF0Y2hlcl9leHBvcnRzLCB7CiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaCwKICBtYXRjaGVyOiAoKSA9PiBtYXRjaGVyCn0pOwpmdW5jdGlvbiBtYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGJhc2VNYXRjaGVyKGlucHV0cywgcGF0dGVybnMyLCBvcHRpb25zLCBmYWxzZSk7Cn0KZnVuY3Rpb24gaXNNYXRjaChpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucykgewogIHJldHVybiBiYXNlTWF0Y2hlcihpbnB1dHMsIHBhdHRlcm5zMiwgb3B0aW9ucywgdHJ1ZSkubGVuZ3RoID4gMDsKfQp2YXIgcmVnZXhwQ2FjaGUsIHNhbml0aXplQXJyYXksIG1ha2VSZWdleHAsIGJhc2VNYXRjaGVyOwp2YXIgaW5pdF9tYXRjaGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWF0Y2hlckA1LjAuMC9ub2RlX21vZHVsZXMvbWF0Y2hlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzY2FwZV9zdHJpbmdfcmVnZXhwKCk7CiAgICByZWdleHBDYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBzYW5pdGl6ZUFycmF5ID0gKGlucHV0LCBpbnB1dE5hbWUpID0+IHsKICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGlucHV0KSkgewogICAgICAgIHN3aXRjaCAodHlwZW9mIGlucHV0KSB7CiAgICAgICAgICBjYXNlICJzdHJpbmciOgogICAgICAgICAgICBpbnB1dCA9IFtpbnB1dF07CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidW5kZWZpbmVkIjoKICAgICAgICAgICAgaW5wdXQgPSBbXTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAnJHtpbnB1dE5hbWV9JyB0byBiZSBhIHN0cmluZyBvciBhbiBhcnJheSwgYnV0IGdvdCBhIHR5cGUgb2YgJyR7dHlwZW9mIGlucHV0fSdgKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGlucHV0LmZpbHRlcigoc3RyaW5nMykgPT4gewogICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgIGlmICh0eXBlb2Ygc3RyaW5nMyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgJyR7aW5wdXROYW1lfScgdG8gYmUgYW4gYXJyYXkgb2Ygc3RyaW5ncywgYnV0IGZvdW5kIGEgdHlwZSBvZiAnJHt0eXBlb2Ygc3RyaW5nM30nIGluIHRoZSBhcnJheWApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSk7CiAgICB9OwogICAgbWFrZVJlZ2V4cCA9IChwYXR0ZXJuLCBvcHRpb25zKSA9PiB7CiAgICAgIG9wdGlvbnMgPSB7CiAgICAgICAgY2FzZVNlbnNpdGl2ZTogZmFsc2UsCiAgICAgICAgLi4ub3B0aW9ucwogICAgICB9OwogICAgICBjb25zdCBjYWNoZUtleSA9IHBhdHRlcm4gKyBKU09OLnN0cmluZ2lmeShvcHRpb25zKTsKICAgICAgaWYgKHJlZ2V4cENhY2hlLmhhcyhjYWNoZUtleSkpIHsKICAgICAgICByZXR1cm4gcmVnZXhwQ2FjaGUuZ2V0KGNhY2hlS2V5KTsKICAgICAgfQogICAgICBjb25zdCBuZWdhdGVkID0gcGF0dGVyblswXSA9PT0gIiEiOwogICAgICBpZiAobmVnYXRlZCkgewogICAgICAgIHBhdHRlcm4gPSBwYXR0ZXJuLnNsaWNlKDEpOwogICAgICB9CiAgICAgIHBhdHRlcm4gPSBlc2NhcGVTdHJpbmdSZWdleHAocGF0dGVybikucmVwbGFjZSgvXFxcKi9nLCAiW1xcc1xcU10qIik7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAoYF4ke3BhdHRlcm59JGAsIG9wdGlvbnMuY2FzZVNlbnNpdGl2ZSA/ICIiIDogImkiKTsKICAgICAgcmVnZXhwLm5lZ2F0ZWQgPSBuZWdhdGVkOwogICAgICByZWdleHBDYWNoZS5zZXQoY2FjaGVLZXksIHJlZ2V4cCk7CiAgICAgIHJldHVybiByZWdleHA7CiAgICB9OwogICAgYmFzZU1hdGNoZXIgPSAoaW5wdXRzLCBwYXR0ZXJuczIsIG9wdGlvbnMsIGZpcnN0TWF0Y2hPbmx5KSA9PiB7CiAgICAgIGlucHV0cyA9IHNhbml0aXplQXJyYXkoaW5wdXRzLCAiaW5wdXRzIik7CiAgICAgIHBhdHRlcm5zMiA9IHNhbml0aXplQXJyYXkocGF0dGVybnMyLCAicGF0dGVybnMiKTsKICAgICAgaWYgKHBhdHRlcm5zMi5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgcGF0dGVybnMyID0gcGF0dGVybnMyLm1hcCgocGF0dGVybikgPT4gbWFrZVJlZ2V4cChwYXR0ZXJuLCBvcHRpb25zKSk7CiAgICAgIGNvbnN0IHsgYWxsUGF0dGVybnMgfSA9IG9wdGlvbnMgfHwge307CiAgICAgIGNvbnN0IHJlc3VsdCA9IFtdOwogICAgICBmb3IgKGNvbnN0IGlucHV0IG9mIGlucHV0cykgewogICAgICAgIGxldCBtYXRjaGVzOwogICAgICAgIGNvbnN0IGRpZEZpdCA9IFsuLi5wYXR0ZXJuczJdLmZpbGwoZmFsc2UpOwogICAgICAgIGZvciAoY29uc3QgW2luZGV4MiwgcGF0dGVybl0gb2YgcGF0dGVybnMyLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKHBhdHRlcm4udGVzdChpbnB1dCkpIHsKICAgICAgICAgICAgZGlkRml0W2luZGV4Ml0gPSB0cnVlOwogICAgICAgICAgICBtYXRjaGVzID0gIXBhdHRlcm4ubmVnYXRlZDsKICAgICAgICAgICAgaWYgKCFtYXRjaGVzKSB7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCEobWF0Y2hlcyA9PT0gZmFsc2UgfHwgbWF0Y2hlcyA9PT0gdm9pZCAwICYmIHBhdHRlcm5zMi5zb21lKChwYXR0ZXJuKSA9PiAhcGF0dGVybi5uZWdhdGVkKSB8fCBhbGxQYXR0ZXJucyAmJiBkaWRGaXQuc29tZSgoeWVzLCBpbmRleDIpID0+ICF5ZXMgJiYgIXBhdHRlcm5zMltpbmRleDJdLm5lZ2F0ZWQpKSkgewogICAgICAgICAgcmVzdWx0LnB1c2goaW5wdXQpOwogICAgICAgICAgaWYgKGZpcnN0TWF0Y2hPbmx5KSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9zbWFydG1hdGNoLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL3NtYXJ0bWF0Y2gucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X21hdGNoZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWF0Y2hAMi4wLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWF0Y2gvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM1LCB7CiAgU21hcnRNYXRjaDogKCkgPT4gU21hcnRNYXRjaAp9KTsKdmFyIFNtYXJ0TWF0Y2g7CnZhciBpbml0X2Rpc3RfdHM1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXRjaEAyLjAuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXRjaC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXRjaF9wbHVnaW5zKCk7CiAgICBTbWFydE1hdGNoID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih3aWxkY2FyZEFyZykgewogICAgICAgIHRoaXMud2lsZGNhcmQgPSB3aWxkY2FyZEFyZzsKICAgICAgfQogICAgICBtYXRjaChtYXRjaFN0cmluZ0FyZykgewogICAgICAgIHJldHVybiBtYXRjaGVyX2V4cG9ydHMuaXNNYXRjaChtYXRjaFN0cmluZ0FyZywgdGhpcy53aWxkY2FyZCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9jcm9uZXJAOS4xLjAvbm9kZV9tb2R1bGVzL2Nyb25lci9kaXN0L2Nyb25lci5qcwp2YXIgY3JvbmVyX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY3JvbmVyX2V4cG9ydHMsIHsKICBDcm9uOiAoKSA9PiBSMiwKICBDcm9uRGF0ZTogKCkgPT4gZjMsCiAgQ3JvblBhdHRlcm46ICgpID0+IGQzLAogIHNjaGVkdWxlZEpvYnM6ICgpID0+IHkzCn0pOwpmdW5jdGlvbiBoMyhuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUsIGw2KSB7CiAgcmV0dXJuIGgzLmZyb21UWihoMy50cChuMTMsIHQ5LCBlMTEsIHIxMSwgczksIGkxMSwgYTUpLCBsNik7Cn0KZnVuY3Rpb24gRDIobjEzLCB0OSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKSB7CiAgbGV0IGUxMSA9IHQ5LnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IG4xMywgdGltZVpvbmVOYW1lOiAic2hvcnRPZmZzZXQiIH0pLnNwbGl0KCIgIikuc2xpY2UoLTEpWzBdLCByMTEgPSB0OS50b0xvY2FsZVN0cmluZygiZW4tVVMiKS5yZXBsYWNlKC9bXHUyMDJmXS8sICIgIik7CiAgcmV0dXJuIERhdGUucGFyc2UoYCR7cjExfSBHTVRgKSAtIERhdGUucGFyc2UoYCR7cjExfSAke2UxMX1gKTsKfQpmdW5jdGlvbiBrMihuMTMsIHQ5KSB7CiAgbGV0IGUxMSA9IG5ldyBEYXRlKERhdGUucGFyc2UobjEzKSk7CiAgaWYgKGlzTmFOKGUxMSkpIHRocm93IG5ldyBFcnJvcigibWluaXR6OiBJbnZhbGlkIElTTzg2MDEgcGFzc2VkIHRvIHBhcnNlci4iKTsKICBsZXQgcjExID0gbjEzLnN1YnN0cmluZyg5KTsKICByZXR1cm4gbjEzLmluY2x1ZGVzKCJaIikgfHwgcjExLmluY2x1ZGVzKCItIikgfHwgcjExLmluY2x1ZGVzKCIrIikgPyBoMy50cChlMTEuZ2V0VVRDRnVsbFllYXIoKSwgZTExLmdldFVUQ01vbnRoKCkgKyAxLCBlMTEuZ2V0VVRDRGF0ZSgpLCBlMTEuZ2V0VVRDSG91cnMoKSwgZTExLmdldFVUQ01pbnV0ZXMoKSwgZTExLmdldFVUQ1NlY29uZHMoKSwgIkV0Yy9VVEMiKSA6IGgzLnRwKGUxMS5nZXRGdWxsWWVhcigpLCBlMTEuZ2V0TW9udGgoKSArIDEsIGUxMS5nZXREYXRlKCksIGUxMS5nZXRIb3VycygpLCBlMTEuZ2V0TWludXRlcygpLCBlMTEuZ2V0U2Vjb25kcygpLCB0OSk7Cn0KZnVuY3Rpb24gTjIobjEzKSB7CiAgaWYgKG4xMyA9PT0gdm9pZCAwICYmIChuMTMgPSB7fSksIGRlbGV0ZSBuMTMubmFtZSwgbjEzLmxlZ2FjeU1vZGUgPSBuMTMubGVnYWN5TW9kZSA9PT0gdm9pZCAwID8gdHJ1ZSA6IG4xMy5sZWdhY3lNb2RlLCBuMTMucGF1c2VkID0gbjEzLnBhdXNlZCA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMucGF1c2VkLCBuMTMubWF4UnVucyA9IG4xMy5tYXhSdW5zID09PSB2b2lkIDAgPyAxIC8gMCA6IG4xMy5tYXhSdW5zLCBuMTMuY2F0Y2ggPSBuMTMuY2F0Y2ggPT09IHZvaWQgMCA/IGZhbHNlIDogbjEzLmNhdGNoLCBuMTMuaW50ZXJ2YWwgPSBuMTMuaW50ZXJ2YWwgPT09IHZvaWQgMCA/IDAgOiBwYXJzZUludChuMTMuaW50ZXJ2YWwudG9TdHJpbmcoKSwgMTApLCBuMTMudXRjT2Zmc2V0ID0gbjEzLnV0Y09mZnNldCA9PT0gdm9pZCAwID8gdm9pZCAwIDogcGFyc2VJbnQobjEzLnV0Y09mZnNldC50b1N0cmluZygpLCAxMCksIG4xMy51bnJlZiA9IG4xMy51bnJlZiA9PT0gdm9pZCAwID8gZmFsc2UgOiBuMTMudW5yZWYsIG4xMy5zdGFydEF0ICYmIChuMTMuc3RhcnRBdCA9IG5ldyBmMyhuMTMuc3RhcnRBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5zdG9wQXQgJiYgKG4xMy5zdG9wQXQgPSBuZXcgZjMobjEzLnN0b3BBdCwgbjEzLnRpbWV6b25lKSksIG4xMy5pbnRlcnZhbCAhPT0gbnVsbCkgewogICAgaWYgKGlzTmFOKG4xMy5pbnRlcnZhbCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IFN1cHBsaWVkIHZhbHVlIGZvciBpbnRlcnZhbCBpcyBub3QgYSBudW1iZXIiKTsKICAgIGlmIChuMTMuaW50ZXJ2YWwgPCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25PcHRpb25zOiBTdXBwbGllZCB2YWx1ZSBmb3IgaW50ZXJ2YWwgY2FuIG5vdCBiZSBuZWdhdGl2ZSIpOwogIH0KICBpZiAobjEzLnV0Y09mZnNldCAhPT0gdm9pZCAwKSB7CiAgICBpZiAoaXNOYU4objEzLnV0Y09mZnNldCkpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IEludmFsaWQgdmFsdWUgcGFzc2VkIGZvciB1dGNPZmZzZXQsIHNob3VsZCBiZSBudW1iZXIgcmVwcmVzZW50aW5nIG1pbnV0ZXMgb2Zmc2V0IGZyb20gVVRDLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgPCAtODcwIHx8IG4xMy51dGNPZmZzZXQgPiA4NzApIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IHV0Y09mZnNldCBvdXQgb2YgYm91bmRzLiIpOwogICAgaWYgKG4xMy51dGNPZmZzZXQgIT09IHZvaWQgMCAmJiBuMTMudGltZXpvbmUpIHRocm93IG5ldyBFcnJvcigiQ3Jvbk9wdGlvbnM6IENvbWJpbmluZyAndXRjT2Zmc2V0JyB3aXRoICd0aW1lem9uZScgaXMgbm90IGFsbG93ZWQuIik7CiAgfQogIGlmIChuMTMudW5yZWYgIT09IHRydWUgJiYgbjEzLnVucmVmICE9PSBmYWxzZSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uT3B0aW9uczogVW5yZWYgc2hvdWxkIGJlIGVpdGhlciB0cnVlLCBmYWxzZSBvciB1bmRlZmluZWQoZmFsc2UpLiIpOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gZzIobjEzKSB7CiAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChuMTMpID09PSAiW29iamVjdCBGdW5jdGlvbl0iIHx8IHR5cGVvZiBuMTMgPT0gImZ1bmN0aW9uIiB8fCBuMTMgaW5zdGFuY2VvZiBGdW5jdGlvbjsKfQpmdW5jdGlvbiBTMyhuMTMpIHsKICByZXR1cm4gZzIobjEzKTsKfQpmdW5jdGlvbiBQMihuMTMpIHsKICB0eXBlb2YgRGVubyA8ICJ1IiAmJiB0eXBlb2YgRGVuby51bnJlZlRpbWVyIDwgInUiID8gRGVuby51bnJlZlRpbWVyKG4xMykgOiBuMTMgJiYgdHlwZW9mIG4xMy51bnJlZiA8ICJ1IiAmJiBuMTMudW5yZWYoKTsKfQp2YXIgYjMsIHAzLCB2MiwgZDMsIE8sIG0yLCBmMywgXzIsIHkzLCBSMjsKdmFyIGluaXRfY3JvbmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY3JvbmVyQDkuMS4wL25vZGVfbW9kdWxlcy9jcm9uZXIvZGlzdC9jcm9uZXIuanMiKCkgewogICAgaDMuZnJvbVRaSVNPID0gKG4xMywgdDksIGUxMSkgPT4gaDMuZnJvbVRaKGsyKG4xMywgdDkpLCBlMTEpOwogICAgaDMuZnJvbVRaID0gZnVuY3Rpb24objEzLCB0OSkgewogICAgICBsZXQgZTExID0gbmV3IERhdGUoRGF0ZS5VVEMobjEzLnksIG4xMy5tIC0gMSwgbjEzLmQsIG4xMy5oLCBuMTMuaSwgbjEzLnMpKSwgcjExID0gRDIobjEzLnR6LCBlMTEpLCBzOSA9IG5ldyBEYXRlKGUxMS5nZXRUaW1lKCkgLSByMTEpLCBpMTEgPSBEMihuMTMudHosIHM5KTsKICAgICAgaWYgKGkxMSAtIHIxMSA9PT0gMCkgcmV0dXJuIHM5OwogICAgICB7CiAgICAgICAgbGV0IGE1ID0gbmV3IERhdGUoZTExLmdldFRpbWUoKSAtIGkxMSksIGw2ID0gRDIobjEzLnR6LCBhNSk7CiAgICAgICAgaWYgKGw2IC0gaTExID09PSAwKSByZXR1cm4gYTU7CiAgICAgICAgaWYgKCF0OSAmJiBsNiAtIGkxMSA+IDApIHJldHVybiBhNTsKICAgICAgICBpZiAodDkpIHRocm93IG5ldyBFcnJvcigiSW52YWxpZCBkYXRlIHBhc3NlZCB0byBmcm9tVFooKSIpOwogICAgICAgIHJldHVybiBzOTsKICAgICAgfQogICAgfTsKICAgIGgzLnRvVFogPSBmdW5jdGlvbihuMTMsIHQ5KSB7CiAgICAgIGxldCBlMTEgPSBuMTMudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogdDkgfSkucmVwbGFjZSgvW1x1MjAyZl0vLCAiICIpLCByMTEgPSBuZXcgRGF0ZShlMTEpOwogICAgICByZXR1cm4geyB5OiByMTEuZ2V0RnVsbFllYXIoKSwgbTogcjExLmdldE1vbnRoKCkgKyAxLCBkOiByMTEuZ2V0RGF0ZSgpLCBoOiByMTEuZ2V0SG91cnMoKSwgaTogcjExLmdldE1pbnV0ZXMoKSwgczogcjExLmdldFNlY29uZHMoKSwgdHo6IHQ5IH07CiAgICB9OwogICAgaDMudHAgPSAobjEzLCB0OSwgZTExLCByMTEsIHM5LCBpMTEsIGE1KSA9PiAoeyB5OiBuMTMsIG06IHQ5LCBkOiBlMTEsIGg6IHIxMSwgaTogczksIHM6IGkxMSwgdHo6IGE1IH0pOwogICAgaDMubWluaXR6ID0gaDM7CiAgICBiMyA9IDMyLCBwMyA9IDMxIHwgYjMsIHYyID0gWzEsIDIsIDQsIDgsIDE2XSwgZDMgPSBjbGFzcyB7CiAgICAgIHBhdHRlcm47CiAgICAgIHRpbWV6b25lOwogICAgICBzZWNvbmQ7CiAgICAgIG1pbnV0ZTsKICAgICAgaG91cjsKICAgICAgZGF5OwogICAgICBtb250aDsKICAgICAgZGF5T2ZXZWVrOwogICAgICBsYXN0RGF5T2ZNb250aDsKICAgICAgc3RhckRPTTsKICAgICAgc3RhckRPVzsKICAgICAgY29uc3RydWN0b3IodDksIGUxMSkgewogICAgICAgIHRoaXMucGF0dGVybiA9IHQ5LCB0aGlzLnRpbWV6b25lID0gZTExLCB0aGlzLnNlY29uZCA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLm1pbnV0ZSA9IEFycmF5KDYwKS5maWxsKDApLCB0aGlzLmhvdXIgPSBBcnJheSgyNCkuZmlsbCgwKSwgdGhpcy5kYXkgPSBBcnJheSgzMSkuZmlsbCgwKSwgdGhpcy5tb250aCA9IEFycmF5KDEyKS5maWxsKDApLCB0aGlzLmRheU9mV2VlayA9IEFycmF5KDcpLmZpbGwoMCksIHRoaXMubGFzdERheU9mTW9udGggPSBmYWxzZSwgdGhpcy5zdGFyRE9NID0gZmFsc2UsIHRoaXMuc3RhckRPVyA9IGZhbHNlLCB0aGlzLnBhcnNlKCk7CiAgICAgIH0KICAgICAgcGFyc2UoKSB7CiAgICAgICAgaWYgKCEodHlwZW9mIHRoaXMucGF0dGVybiA9PSAic3RyaW5nIiB8fCB0aGlzLnBhdHRlcm4gaW5zdGFuY2VvZiBTdHJpbmcpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogUGF0dGVybiBoYXMgdG8gYmUgb2YgdHlwZSBzdHJpbmcuIik7CiAgICAgICAgdGhpcy5wYXR0ZXJuLmluZGV4T2YoIkAiKSA+PSAwICYmICh0aGlzLnBhdHRlcm4gPSB0aGlzLmhhbmRsZU5pY2tuYW1lcyh0aGlzLnBhdHRlcm4pLnRyaW0oKSk7CiAgICAgICAgbGV0IHQ5ID0gdGhpcy5wYXR0ZXJuLnJlcGxhY2UoL1xzKy9nLCAiICIpLnNwbGl0KCIgIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA8IDUgfHwgdDkubGVuZ3RoID4gNikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGludmFsaWQgY29uZmlndXJhdGlvbiBmb3JtYXQgKCciICsgdGhpcy5wYXR0ZXJuICsgIicpLCBleGFjdGx5IGZpdmUgb3Igc2l4IHNwYWNlIHNlcGFyYXRlZCBwYXJ0cyBhcmUgcmVxdWlyZWQuIik7CiAgICAgICAgaWYgKHQ5Lmxlbmd0aCA9PT0gNSAmJiB0OS51bnNoaWZ0KCIwIiksIHQ5WzNdLmluZGV4T2YoIkwiKSA+PSAwICYmICh0OVszXSA9IHQ5WzNdLnJlcGxhY2UoIkwiLCAiIiksIHRoaXMubGFzdERheU9mTW9udGggPSB0cnVlKSwgdDlbM10gPT0gIioiICYmICh0aGlzLnN0YXJET00gPSB0cnVlKSwgdDlbNF0ubGVuZ3RoID49IDMgJiYgKHQ5WzRdID0gdGhpcy5yZXBsYWNlQWxwaGFNb250aHModDlbNF0pKSwgdDlbNV0ubGVuZ3RoID49IDMgJiYgKHQ5WzVdID0gdGhpcy5yZXBsYWNlQWxwaGFEYXlzKHQ5WzVdKSksIHQ5WzVdID09ICIqIiAmJiAodGhpcy5zdGFyRE9XID0gdHJ1ZSksIHRoaXMucGF0dGVybi5pbmRleE9mKCI/IikgPj0gMCkgewogICAgICAgICAgbGV0IGUxMSA9IG5ldyBmMygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgdGhpcy50aW1lem9uZSkuZ2V0RGF0ZSh0cnVlKTsKICAgICAgICAgIHQ5WzBdID0gdDlbMF0ucmVwbGFjZSgiPyIsIGUxMS5nZXRTZWNvbmRzKCkudG9TdHJpbmcoKSksIHQ5WzFdID0gdDlbMV0ucmVwbGFjZSgiPyIsIGUxMS5nZXRNaW51dGVzKCkudG9TdHJpbmcoKSksIHQ5WzJdID0gdDlbMl0ucmVwbGFjZSgiPyIsIGUxMS5nZXRIb3VycygpLnRvU3RyaW5nKCkpLCB0aGlzLnN0YXJET00gfHwgKHQ5WzNdID0gdDlbM10ucmVwbGFjZSgiPyIsIGUxMS5nZXREYXRlKCkudG9TdHJpbmcoKSkpLCB0OVs0XSA9IHQ5WzRdLnJlcGxhY2UoIj8iLCAoZTExLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpKSwgdGhpcy5zdGFyRE9XIHx8ICh0OVs1XSA9IHQ5WzVdLnJlcGxhY2UoIj8iLCBlMTEuZ2V0RGF5KCkudG9TdHJpbmcoKSkpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSksIHRoaXMucGFydFRvQXJyYXkoInNlY29uZCIsIHQ5WzBdLCAwLCAxKSwgdGhpcy5wYXJ0VG9BcnJheSgibWludXRlIiwgdDlbMV0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJob3VyIiwgdDlbMl0sIDAsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJkYXkiLCB0OVszXSwgLTEsIDEpLCB0aGlzLnBhcnRUb0FycmF5KCJtb250aCIsIHQ5WzRdLCAtMSwgMSksIHRoaXMucGFydFRvQXJyYXkoImRheU9mV2VlayIsIHQ5WzVdLCAwLCBwMyksIHRoaXMuZGF5T2ZXZWVrWzddICYmICh0aGlzLmRheU9mV2Vla1swXSA9IHRoaXMuZGF5T2ZXZWVrWzddKTsKICAgICAgfQogICAgICBwYXJ0VG9BcnJheSh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbdDldLCBhNSA9IHQ5ID09PSAiZGF5IiAmJiB0aGlzLmxhc3REYXlPZk1vbnRoOwogICAgICAgIGlmIChlMTEgPT09ICIiICYmICFhNSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IGNvbmZpZ3VyYXRpb24gZW50cnkgIiArIHQ5ICsgIiAoIiArIGUxMSArICIpIGlzIGVtcHR5LCBjaGVjayBmb3IgdHJhaWxpbmcgc3BhY2VzLiIpOwogICAgICAgIGlmIChlMTEgPT09ICIqIikgcmV0dXJuIGkxMS5maWxsKHM5KTsKICAgICAgICBsZXQgbDYgPSBlMTEuc3BsaXQoIiwiKTsKICAgICAgICBpZiAobDYubGVuZ3RoID4gMSkgZm9yIChsZXQgbzEzID0gMDsgbzEzIDwgbDYubGVuZ3RoOyBvMTMrKykgdGhpcy5wYXJ0VG9BcnJheSh0OSwgbDZbbzEzXSwgcjExLCBzOSk7CiAgICAgICAgZWxzZSBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSAmJiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLSIpICE9PSAtMSA/IHRoaXMuaGFuZGxlUmFuZ2UoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEuaW5kZXhPZigiLyIpICE9PSAtMSA/IHRoaXMuaGFuZGxlU3RlcHBpbmcoZTExLCB0OSwgcjExLCBzOSkgOiBlMTEgIT09ICIiICYmIHRoaXMuaGFuZGxlTnVtYmVyKGUxMSwgdDksIHIxMSwgczkpOwogICAgICB9CiAgICAgIHRocm93QXRJbGxlZ2FsQ2hhcmFjdGVycyh0OSkgewogICAgICAgIGZvciAobGV0IGUxMSA9IDA7IGUxMSA8IHQ5Lmxlbmd0aDsgZTExKyspIGlmICgoZTExID09PSA1ID8gL1teLyowLTksXC0jTF0rLyA6IC9bXi8qMC05LC1dKy8pLnRlc3QodDlbZTExXSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBjb25maWd1cmF0aW9uIGVudHJ5ICIgKyBlMTEgKyAiICgiICsgdDlbZTExXSArICIpIGNvbnRhaW5zIGlsbGVnYWwgY2hhcmFjdGVycy4iKTsKICAgICAgfQogICAgICBoYW5kbGVOdW1iZXIodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gcGFyc2VJbnQoaTExWzBdLCAxMCkgKyByMTE7CiAgICAgICAgaWYgKGlzTmFOKGE1KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46ICIgKyBlMTEgKyAiIGlzIG5vdCBhIG51bWJlcjogJyIgKyB0OSArICInIik7CiAgICAgICAgdGhpcy5zZXRQYXJ0KGUxMSwgYTUsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgc2V0UGFydCh0OSwgZTExLCByMTEpIHsKICAgICAgICBpZiAoIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0aGlzLCB0OSkpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBJbnZhbGlkIHBhcnQgc3BlY2lmaWVkOiAiICsgdDkpOwogICAgICAgIGlmICh0OSA9PT0gImRheU9mV2VlayIpIHsKICAgICAgICAgIGlmIChlMTEgPT09IDcgJiYgKGUxMSA9IDApLCBlMTEgPCAwIHx8IGUxMSA+IDYpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgZGF5T2ZXZWVrOiAiICsgZTExKTsKICAgICAgICAgIHRoaXMuc2V0TnRoV2Vla2RheU9mTW9udGgoZTExLCByMTEpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodDkgPT09ICJzZWNvbmQiIHx8IHQ5ID09PSAibWludXRlIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDYwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJob3VyIikgewogICAgICAgICAgaWYgKGUxMSA8IDAgfHwgZTExID49IDI0KSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIH0gZWxzZSBpZiAodDkgPT09ICJkYXkiKSB7CiAgICAgICAgICBpZiAoZTExIDwgMCB8fCBlMTEgPj0gMzEpIHRocm93IG5ldyBSYW5nZUVycm9yKCJDcm9uUGF0dGVybjogSW52YWxpZCB2YWx1ZSBmb3IgIiArIHQ5ICsgIjogIiArIGUxMSk7CiAgICAgICAgfSBlbHNlIGlmICh0OSA9PT0gIm1vbnRoIiAmJiAoZTExIDwgMCB8fCBlMTEgPj0gMTIpKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQ3JvblBhdHRlcm46IEludmFsaWQgdmFsdWUgZm9yICIgKyB0OSArICI6ICIgKyBlMTEpOwogICAgICAgIHRoaXNbdDldW2UxMV0gPSByMTE7CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2VXaXRoU3RlcHBpbmcodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLm1hdGNoKC9eKFxkKyktKFxkKylcLyhcZCspJC8pOwogICAgICAgIGlmIChhNSA9PT0gbnVsbCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZSB3aXRoIHN0ZXBwaW5nOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBsZXQgWywgbDYsIG8xMywgdTddID0gYTUsIGMxMSA9IHBhcnNlSW50KGw2LCAxMCkgKyByMTEsIHczID0gcGFyc2VJbnQobzEzLCAxMCkgKyByMTEsIEMzID0gcGFyc2VJbnQodTcsIDEwKTsKICAgICAgICBpZiAoaXNOYU4oYzExKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBsb3dlciByYW5nZSAoTmFOKSIpOwogICAgICAgIGlmIChpc05hTih3MykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAoaXNOYU4oQzMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAoTmFOKSIpOwogICAgICAgIGlmIChDMyA9PT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogMCIpOwogICAgICAgIGlmIChDMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIHN0ZXBzIGNhbm5vdCBiZSBncmVhdGVyIHRoYW4gbWF4aW11bSB2YWx1ZSBvZiBwYXJ0ICgiICsgdGhpc1tlMTFdLmxlbmd0aCArICIpIik7CiAgICAgICAgaWYgKGMxMSA+IHczKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogRnJvbSB2YWx1ZSBpcyBsYXJnZXIgdGhhbiB0byB2YWx1ZTogJyIgKyB0OSArICInIik7CiAgICAgICAgZm9yIChsZXQgVDMgPSBjMTE7IFQzIDw9IHczOyBUMyArPSBDMykgdGhpcy5zZXRQYXJ0KGUxMSwgVDMsIGkxMVsxXSB8fCBzOSk7CiAgICAgIH0KICAgICAgZXh0cmFjdE50aCh0OSwgZTExKSB7CiAgICAgICAgbGV0IHIxMSA9IHQ5LCBzOTsKICAgICAgICBpZiAocjExLmluY2x1ZGVzKCIjIikpIHsKICAgICAgICAgIGlmIChlMTEgIT09ICJkYXlPZldlZWsiKSB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXR0ZXJuOiBudGggKCMpIG9ubHkgYWxsb3dlZCBpbiBkYXktb2Ytd2VlayBmaWVsZCIpOwogICAgICAgICAgczkgPSByMTEuc3BsaXQoIiMiKVsxXSwgcjExID0gcjExLnNwbGl0KCIjIilbMF07CiAgICAgICAgfQogICAgICAgIHJldHVybiBbcjExLCBzOV07CiAgICAgIH0KICAgICAgaGFuZGxlUmFuZ2UodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBpMTEgPSB0aGlzLmV4dHJhY3ROdGgodDksIGUxMSksIGE1ID0gaTExWzBdLnNwbGl0KCItIik7CiAgICAgICAgaWYgKGE1Lmxlbmd0aCAhPT0gMikgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCByYW5nZTogJyIgKyB0OSArICInIik7CiAgICAgICAgbGV0IGw2ID0gcGFyc2VJbnQoYTVbMF0sIDEwKSArIHIxMSwgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKSArIHIxMTsKICAgICAgICBpZiAoaXNOYU4obDYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIGxvd2VyIHJhbmdlIChOYU4pIik7CiAgICAgICAgaWYgKGlzTmFOKG8xMykpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgdXBwZXIgcmFuZ2UgKE5hTikiKTsKICAgICAgICBpZiAobDYgPiBvMTMpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBGcm9tIHZhbHVlIGlzIGxhcmdlciB0aGFuIHRvIHZhbHVlOiAnIiArIHQ5ICsgIiciKTsKICAgICAgICBmb3IgKGxldCB1NyA9IGw2OyB1NyA8PSBvMTM7IHU3KyspIHRoaXMuc2V0UGFydChlMTEsIHU3LCBpMTFbMV0gfHwgczkpOwogICAgICB9CiAgICAgIGhhbmRsZVN0ZXBwaW5nKHQ5LCBlMTEsIHIxMSwgczkpIHsKICAgICAgICBsZXQgaTExID0gdGhpcy5leHRyYWN0TnRoKHQ5LCBlMTEpLCBhNSA9IGkxMVswXS5zcGxpdCgiLyIpOwogICAgICAgIGlmIChhNS5sZW5ndGggIT09IDIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIGlsbGVnYWwgc3RlcHBpbmc6ICciICsgdDkgKyAiJyIpOwogICAgICAgIGE1WzBdID09PSAiIiAmJiAoYTVbMF0gPSAiKiIpOwogICAgICAgIGxldCBsNiA9IDA7CiAgICAgICAgYTVbMF0gIT09ICIqIiAmJiAobDYgPSBwYXJzZUludChhNVswXSwgMTApICsgcjExKTsKICAgICAgICBsZXQgbzEzID0gcGFyc2VJbnQoYTVbMV0sIDEwKTsKICAgICAgICBpZiAoaXNOYU4obzEzKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvblBhdHRlcm46IFN5bnRheCBlcnJvciwgaWxsZWdhbCBzdGVwcGluZzogKE5hTikiKTsKICAgICAgICBpZiAobzEzID09PSAwKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDcm9uUGF0dGVybjogU3ludGF4IGVycm9yLCBpbGxlZ2FsIHN0ZXBwaW5nOiAwIik7CiAgICAgICAgaWYgKG8xMyA+IHRoaXNbZTExXS5sZW5ndGgpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNyb25QYXR0ZXJuOiBTeW50YXggZXJyb3IsIG1heCBzdGVwcyBmb3IgcGFydCBpcyAoIiArIHRoaXNbZTExXS5sZW5ndGggKyAiKSIpOwogICAgICAgIGZvciAobGV0IHU3ID0gbDY7IHU3IDwgdGhpc1tlMTFdLmxlbmd0aDsgdTcgKz0gbzEzKSB0aGlzLnNldFBhcnQoZTExLCB1NywgaTExWzFdIHx8IHM5KTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFEYXlzKHQ5KSB7CiAgICAgICAgcmV0dXJuIHQ5LnJlcGxhY2UoLy1zdW4vZ2ksICItNyIpLnJlcGxhY2UoL3N1bi9naSwgIjAiKS5yZXBsYWNlKC9tb24vZ2ksICIxIikucmVwbGFjZSgvdHVlL2dpLCAiMiIpLnJlcGxhY2UoL3dlZC9naSwgIjMiKS5yZXBsYWNlKC90aHUvZ2ksICI0IikucmVwbGFjZSgvZnJpL2dpLCAiNSIpLnJlcGxhY2UoL3NhdC9naSwgIjYiKTsKICAgICAgfQogICAgICByZXBsYWNlQWxwaGFNb250aHModDkpIHsKICAgICAgICByZXR1cm4gdDkucmVwbGFjZSgvamFuL2dpLCAiMSIpLnJlcGxhY2UoL2ZlYi9naSwgIjIiKS5yZXBsYWNlKC9tYXIvZ2ksICIzIikucmVwbGFjZSgvYXByL2dpLCAiNCIpLnJlcGxhY2UoL21heS9naSwgIjUiKS5yZXBsYWNlKC9qdW4vZ2ksICI2IikucmVwbGFjZSgvanVsL2dpLCAiNyIpLnJlcGxhY2UoL2F1Zy9naSwgIjgiKS5yZXBsYWNlKC9zZXAvZ2ksICI5IikucmVwbGFjZSgvb2N0L2dpLCAiMTAiKS5yZXBsYWNlKC9ub3YvZ2ksICIxMSIpLnJlcGxhY2UoL2RlYy9naSwgIjEyIik7CiAgICAgIH0KICAgICAgaGFuZGxlTmlja25hbWVzKHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9IHQ5LnRyaW0oKS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJldHVybiBlMTEgPT09ICJAeWVhcmx5IiB8fCBlMTEgPT09ICJAYW5udWFsbHkiID8gIjAgMCAxIDEgKiIgOiBlMTEgPT09ICJAbW9udGhseSIgPyAiMCAwIDEgKiAqIiA6IGUxMSA9PT0gIkB3ZWVrbHkiID8gIjAgMCAqICogMCIgOiBlMTEgPT09ICJAZGFpbHkiID8gIjAgMCAqICogKiIgOiBlMTEgPT09ICJAaG91cmx5IiA/ICIwICogKiAqICoiIDogdDk7CiAgICAgIH0KICAgICAgc2V0TnRoV2Vla2RheU9mTW9udGgodDksIGUxMSkgewogICAgICAgIGlmICh0eXBlb2YgZTExICE9ICJudW1iZXIiICYmIGUxMSA9PT0gIkwiKSB0aGlzLmRheU9mV2Vla1t0OV0gPSB0aGlzLmRheU9mV2Vla1t0OV0gfCBiMzsKICAgICAgICBlbHNlIGlmIChlMTEgPT09IHAzKSB0aGlzLmRheU9mV2Vla1t0OV0gPSBwMzsKICAgICAgICBlbHNlIGlmIChlMTEgPCA2ICYmIGUxMSA+IDApIHRoaXMuZGF5T2ZXZWVrW3Q5XSA9IHRoaXMuZGF5T2ZXZWVrW3Q5XSB8IHYyW2UxMSAtIDFdOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcihgQ3JvblBhdHRlcm46IG50aCB3ZWVrZGF5IG91dCBvZiByYW5nZSwgc2hvdWxkIGJlIDEtNSBvciBMLiBWYWx1ZTogJHtlMTF9LCBUeXBlOiAke3R5cGVvZiBlMTF9YCk7CiAgICAgIH0KICAgIH07CiAgICBPID0gWzMxLCAyOCwgMzEsIDMwLCAzMSwgMzAsIDMxLCAzMSwgMzAsIDMxLCAzMCwgMzFdLCBtMiA9IFtbIm1vbnRoIiwgInllYXIiLCAwXSwgWyJkYXkiLCAibW9udGgiLCAtMV0sIFsiaG91ciIsICJkYXkiLCAwXSwgWyJtaW51dGUiLCAiaG91ciIsIDBdLCBbInNlY29uZCIsICJtaW51dGUiLCAwXV0sIGYzID0gY2xhc3MgbjYgewogICAgICB0ejsKICAgICAgbXM7CiAgICAgIHNlY29uZDsKICAgICAgbWludXRlOwogICAgICBob3VyOwogICAgICBkYXk7CiAgICAgIG1vbnRoOwogICAgICB5ZWFyOwogICAgICBjb25zdHJ1Y3Rvcih0OSwgZTExKSB7CiAgICAgICAgaWYgKHRoaXMudHogPSBlMTEsIHQ5ICYmIHQ5IGluc3RhbmNlb2YgRGF0ZSkgaWYgKCFpc05hTih0OSkpIHRoaXMuZnJvbURhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgZGF0ZSBwYXNzZWQgdG8gQ3JvbkRhdGUgY29uc3RydWN0b3IiKTsKICAgICAgICBlbHNlIGlmICh0OSA9PT0gdm9pZCAwKSB0aGlzLmZyb21EYXRlKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKTsKICAgICAgICBlbHNlIGlmICh0OSAmJiB0eXBlb2YgdDkgPT0gInN0cmluZyIpIHRoaXMuZnJvbVN0cmluZyh0OSk7CiAgICAgICAgZWxzZSBpZiAodDkgaW5zdGFuY2VvZiBuNikgdGhpcy5mcm9tQ3JvbkRhdGUodDkpOwogICAgICAgIGVsc2UgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ3JvbkRhdGU6IEludmFsaWQgdHlwZSAoIiArIHR5cGVvZiB0OSArICIpIHBhc3NlZCB0byBDcm9uRGF0ZSBjb25zdHJ1Y3RvciIpOwogICAgICB9CiAgICAgIGlzTnRoV2Vla2RheU9mTW9udGgodDksIGUxMSwgcjExLCBzOSkgewogICAgICAgIGxldCBhNSA9IG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIHIxMSkpLmdldFVUQ0RheSgpLCBsNiA9IDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gMTsgbzEzIDw9IHIxMTsgbzEzKyspIG5ldyBEYXRlKERhdGUuVVRDKHQ5LCBlMTEsIG8xMykpLmdldFVUQ0RheSgpID09PSBhNSAmJiBsNisrOwogICAgICAgIGlmIChzOSAmIHAzICYmIHYyW2w2IC0gMV0gJiBzOSkgcmV0dXJuIHRydWU7CiAgICAgICAgaWYgKHM5ICYgYjMpIHsKICAgICAgICAgIGxldCBvMTMgPSBuZXcgRGF0ZShEYXRlLlVUQyh0OSwgZTExICsgMSwgMCkpLmdldFVUQ0RhdGUoKTsKICAgICAgICAgIGZvciAobGV0IHU3ID0gcjExICsgMTsgdTcgPD0gbzEzOyB1NysrKSBpZiAobmV3IERhdGUoRGF0ZS5VVEModDksIGUxMSwgdTcpKS5nZXRVVENEYXkoKSA9PT0gYTUpIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbURhdGUodDkpIHsKICAgICAgICBpZiAodGhpcy50eiAhPT0gdm9pZCAwKSBpZiAodHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIpIHRoaXMubXMgPSB0OS5nZXRVVENNaWxsaXNlY29uZHMoKSwgdGhpcy5zZWNvbmQgPSB0OS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gdDkuZ2V0VVRDTWludXRlcygpICsgdGhpcy50eiwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0aGlzLmFwcGx5KCk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBsZXQgZTExID0gaDMudG9UWih0OSwgdGhpcy50eik7CiAgICAgICAgICB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gZTExLnMsIHRoaXMubWludXRlID0gZTExLmksIHRoaXMuaG91ciA9IGUxMS5oLCB0aGlzLmRheSA9IGUxMS5kLCB0aGlzLm1vbnRoID0gZTExLm0gLSAxLCB0aGlzLnllYXIgPSBlMTEueTsKICAgICAgICB9CiAgICAgICAgZWxzZSB0aGlzLm1zID0gdDkuZ2V0TWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0U2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldE1pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0SG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXREYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRGdWxsWWVhcigpOwogICAgICB9CiAgICAgIGZyb21Dcm9uRGF0ZSh0OSkgewogICAgICAgIHRoaXMudHogPSB0OS50eiwgdGhpcy55ZWFyID0gdDkueWVhciwgdGhpcy5tb250aCA9IHQ5Lm1vbnRoLCB0aGlzLmRheSA9IHQ5LmRheSwgdGhpcy5ob3VyID0gdDkuaG91ciwgdGhpcy5taW51dGUgPSB0OS5taW51dGUsIHRoaXMuc2Vjb25kID0gdDkuc2Vjb25kLCB0aGlzLm1zID0gdDkubXM7CiAgICAgIH0KICAgICAgYXBwbHkoKSB7CiAgICAgICAgaWYgKHRoaXMubW9udGggPiAxMSB8fCB0aGlzLmRheSA+IE9bdGhpcy5tb250aF0gfHwgdGhpcy5ob3VyID4gNTkgfHwgdGhpcy5taW51dGUgPiA1OSB8fCB0aGlzLnNlY29uZCA+IDU5IHx8IHRoaXMuaG91ciA8IDAgfHwgdGhpcy5taW51dGUgPCAwIHx8IHRoaXMuc2Vjb25kIDwgMCkgewogICAgICAgICAgbGV0IHQ5ID0gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKTsKICAgICAgICAgIHJldHVybiB0aGlzLm1zID0gdDkuZ2V0VVRDTWlsbGlzZWNvbmRzKCksIHRoaXMuc2Vjb25kID0gdDkuZ2V0VVRDU2Vjb25kcygpLCB0aGlzLm1pbnV0ZSA9IHQ5LmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gdDkuZ2V0VVRDSG91cnMoKSwgdGhpcy5kYXkgPSB0OS5nZXRVVENEYXRlKCksIHRoaXMubW9udGggPSB0OS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSB0OS5nZXRVVENGdWxsWWVhcigpLCB0cnVlOwogICAgICAgIH0gZWxzZSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZnJvbVN0cmluZyh0OSkgewogICAgICAgIGlmICh0eXBlb2YgdGhpcy50eiA9PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IGUxMSA9IGgzLmZyb21UWklTTyh0OSk7CiAgICAgICAgICB0aGlzLm1zID0gZTExLmdldFVUQ01pbGxpc2Vjb25kcygpLCB0aGlzLnNlY29uZCA9IGUxMS5nZXRVVENTZWNvbmRzKCksIHRoaXMubWludXRlID0gZTExLmdldFVUQ01pbnV0ZXMoKSwgdGhpcy5ob3VyID0gZTExLmdldFVUQ0hvdXJzKCksIHRoaXMuZGF5ID0gZTExLmdldFVUQ0RhdGUoKSwgdGhpcy5tb250aCA9IGUxMS5nZXRVVENNb250aCgpLCB0aGlzLnllYXIgPSBlMTEuZ2V0VVRDRnVsbFllYXIoKSwgdGhpcy5hcHBseSgpOwogICAgICAgIH0gZWxzZSByZXR1cm4gdGhpcy5mcm9tRGF0ZShoMy5mcm9tVFpJU08odDksIHRoaXMudHopKTsKICAgICAgfQogICAgICBmaW5kTmV4dCh0OSwgZTExLCByMTEsIHM5KSB7CiAgICAgICAgbGV0IGkxMSA9IHRoaXNbZTExXSwgYTU7CiAgICAgICAgcjExLmxhc3REYXlPZk1vbnRoICYmICh0aGlzLm1vbnRoICE9PSAxID8gYTUgPSBPW3RoaXMubW9udGhdIDogYTUgPSBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCAwLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF0ZSgpKTsKICAgICAgICBsZXQgbDYgPSAhcjExLnN0YXJET1cgJiYgZTExID09ICJkYXkiID8gbmV3IERhdGUoRGF0ZS5VVEModGhpcy55ZWFyLCB0aGlzLm1vbnRoLCAxLCAwLCAwLCAwLCAwKSkuZ2V0VVRDRGF5KCkgOiB2b2lkIDA7CiAgICAgICAgZm9yIChsZXQgbzEzID0gdGhpc1tlMTFdICsgczk7IG8xMyA8IHIxMVtlMTFdLmxlbmd0aDsgbzEzKyspIHsKICAgICAgICAgIGxldCB1NyA9IHIxMVtlMTFdW28xM107CiAgICAgICAgICBpZiAoZTExID09PSAiZGF5IiAmJiByMTEubGFzdERheU9mTW9udGggJiYgbzEzIC0gczkgPT0gYTUgJiYgKHU3ID0gMSksIGUxMSA9PT0gImRheSIgJiYgIXIxMS5zdGFyRE9XKSB7CiAgICAgICAgICAgIGxldCBjMTEgPSByMTEuZGF5T2ZXZWVrWyhsNiArIChvMTMgLSBzOSAtIDEpKSAlIDddOwogICAgICAgICAgICBpZiAoYzExICYmIGMxMSAmIHAzKSBjMTEgPSB0aGlzLmlzTnRoV2Vla2RheU9mTW9udGgodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCBvMTMgLSBzOSwgYzExKSA/IDEgOiAwOwogICAgICAgICAgICBlbHNlIGlmIChjMTEpIHRocm93IG5ldyBFcnJvcihgQ3JvbkRhdGU6IEludmFsaWQgdmFsdWUgZm9yIGRheU9mV2VlayBlbmNvdW50ZXJlZC4gJHtjMTF9YCk7CiAgICAgICAgICAgIHQ5LmxlZ2FjeU1vZGUgJiYgIXIxMS5zdGFyRE9NID8gdTcgPSB1NyB8fCBjMTEgOiB1NyA9IHU3ICYmIGMxMTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh1NykgcmV0dXJuIHRoaXNbZTExXSA9IG8xMyAtIHM5LCBpMTEgIT09IHRoaXNbZTExXSA/IDIgOiAxOwogICAgICAgIH0KICAgICAgICByZXR1cm4gMzsKICAgICAgfQogICAgICByZWN1cnNlKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSA9IHRoaXMuZmluZE5leHQoZTExLCBtMltyMTFdWzBdLCB0OSwgbTJbcjExXVsyXSk7CiAgICAgICAgaWYgKHM5ID4gMSkgewogICAgICAgICAgbGV0IGkxMSA9IHIxMSArIDE7CiAgICAgICAgICBmb3IgKDsgaTExIDwgbTIubGVuZ3RoOyApIHRoaXNbbTJbaTExXVswXV0gPSAtbTJbaTExXVsyXSwgaTExKys7CiAgICAgICAgICBpZiAoczkgPT09IDMpIHJldHVybiB0aGlzW20yW3IxMV1bMV1dKyssIHRoaXNbbTJbcjExXVswXV0gPSAtbTJbcjExXVsyXSwgdGhpcy5hcHBseSgpLCB0aGlzLnJlY3Vyc2UodDksIGUxMSwgMCk7CiAgICAgICAgICBpZiAodGhpcy5hcHBseSgpKSByZXR1cm4gdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIHIxMSAtIDEpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcjExICs9IDEsIHIxMSA+PSBtMi5sZW5ndGggPyB0aGlzIDogdGhpcy55ZWFyID49IDNlMyA/IG51bGwgOiB0aGlzLnJlY3Vyc2UodDksIGUxMSwgcjExKTsKICAgICAgfQogICAgICBpbmNyZW1lbnQodDksIGUxMSwgcjExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2Vjb25kICs9IGUxMS5pbnRlcnZhbCAhPT0gdm9pZCAwICYmIGUxMS5pbnRlcnZhbCA+IDEgJiYgcjExID8gZTExLmludGVydmFsIDogMSwgdGhpcy5tcyA9IDAsIHRoaXMuYXBwbHkoKSwgdGhpcy5yZWN1cnNlKHQ5LCBlMTEsIDApOwogICAgICB9CiAgICAgIGdldERhdGUodDkpIHsKICAgICAgICByZXR1cm4gdDkgfHwgdGhpcy50eiA9PT0gdm9pZCAwID8gbmV3IERhdGUodGhpcy55ZWFyLCB0aGlzLm1vbnRoLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMubXMpIDogdHlwZW9mIHRoaXMudHogPT0gIm51bWJlciIgPyBuZXcgRGF0ZShEYXRlLlVUQyh0aGlzLnllYXIsIHRoaXMubW9udGgsIHRoaXMuZGF5LCB0aGlzLmhvdXIsIHRoaXMubWludXRlIC0gdGhpcy50eiwgdGhpcy5zZWNvbmQsIHRoaXMubXMpKSA6IGgzLmZyb21UWihoMy50cCh0aGlzLnllYXIsIHRoaXMubW9udGggKyAxLCB0aGlzLmRheSwgdGhpcy5ob3VyLCB0aGlzLm1pbnV0ZSwgdGhpcy5zZWNvbmQsIHRoaXMudHopLCBmYWxzZSk7CiAgICAgIH0KICAgICAgZ2V0VGltZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXREYXRlKGZhbHNlKS5nZXRUaW1lKCk7CiAgICAgIH0KICAgIH07CiAgICBfMiA9IDMwICogMWUzLCB5MyA9IFtdLCBSMiA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgb3B0aW9uczsKICAgICAgX3N0YXRlczsKICAgICAgZm47CiAgICAgIGNvbnN0cnVjdG9yKHQ5LCBlMTEsIHIxMSkgewogICAgICAgIGxldCBzOSwgaTExOwogICAgICAgIGlmIChnMihlMTEpKSBpMTEgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAodHlwZW9mIGUxMSA9PSAib2JqZWN0IikgczkgPSBlMTE7CiAgICAgICAgZWxzZSBpZiAoZTExICE9PSB2b2lkIDApIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSW52YWxpZCBhcmd1bWVudCBwYXNzZWQgZm9yIG9wdGlvbnNJbi4gU2hvdWxkIGJlIG9uZSBvZiBmdW5jdGlvbiwgb3Igb2JqZWN0IChvcHRpb25zKS4iKTsKICAgICAgICBpZiAoZzIocjExKSkgaTExID0gcjExOwogICAgICAgIGVsc2UgaWYgKHR5cGVvZiByMTEgPT0gIm9iamVjdCIpIHM5ID0gcjExOwogICAgICAgIGVsc2UgaWYgKHIxMSAhPT0gdm9pZCAwKSB0aHJvdyBuZXcgRXJyb3IoIkNyb246IEludmFsaWQgYXJndW1lbnQgcGFzc2VkIGZvciBmdW5jSW4uIFNob3VsZCBiZSBvbmUgb2YgZnVuY3Rpb24sIG9yIG9iamVjdCAob3B0aW9ucykuIik7CiAgICAgICAgaWYgKHRoaXMubmFtZSA9IHM5Py5uYW1lLCB0aGlzLm9wdGlvbnMgPSBOMihzOSksIHRoaXMuX3N0YXRlcyA9IHsga2lsbDogZmFsc2UsIGJsb2NraW5nOiBmYWxzZSwgcHJldmlvdXNSdW46IHZvaWQgMCwgY3VycmVudFJ1bjogdm9pZCAwLCBvbmNlOiB2b2lkIDAsIGN1cnJlbnRUaW1lb3V0OiB2b2lkIDAsIG1heFJ1bnM6IHM5ID8gczkubWF4UnVucyA6IHZvaWQgMCwgcGF1c2VkOiBzOSA/IHM5LnBhdXNlZCA6IGZhbHNlLCBwYXR0ZXJuOiBuZXcgZDMoIiogKiAqICogKiIpIH0sIHQ5ICYmICh0OSBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHQ5ID09ICJzdHJpbmciICYmIHQ5LmluZGV4T2YoIjoiKSA+IDApID8gdGhpcy5fc3RhdGVzLm9uY2UgPSBuZXcgZjModDksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KSA6IHRoaXMuX3N0YXRlcy5wYXR0ZXJuID0gbmV3IGQzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUpLCB0aGlzLm5hbWUpIHsKICAgICAgICAgIGlmICh5My5maW5kKChsNikgPT4gbDYubmFtZSA9PT0gdGhpcy5uYW1lKSkgdGhyb3cgbmV3IEVycm9yKCJDcm9uOiBUcmllZCB0byBpbml0aWFsaXplIG5ldyBuYW1lZCBqb2IgJyIgKyB0aGlzLm5hbWUgKyAiJywgYnV0IG5hbWUgYWxyZWFkeSB0YWtlbi4iKTsKICAgICAgICAgIHkzLnB1c2godGhpcyk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgIT09IHZvaWQgMCAmJiBTMyhpMTEpICYmICh0aGlzLmZuID0gaTExLCB0aGlzLnNjaGVkdWxlKCkpLCB0aGlzOwogICAgICB9CiAgICAgIG5leHRSdW4odDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IGUxMS5nZXREYXRlKGZhbHNlKSA6IG51bGw7CiAgICAgIH0KICAgICAgbmV4dFJ1bnModDksIGUxMSkgewogICAgICAgIHRoaXMuX3N0YXRlcy5tYXhSdW5zICE9PSB2b2lkIDAgJiYgdDkgPiB0aGlzLl9zdGF0ZXMubWF4UnVucyAmJiAodDkgPSB0aGlzLl9zdGF0ZXMubWF4UnVucyk7CiAgICAgICAgbGV0IHIxMSA9IFtdLCBzOSA9IGUxMSB8fCB0aGlzLl9zdGF0ZXMuY3VycmVudFJ1biB8fCB2b2lkIDA7CiAgICAgICAgZm9yICg7IHQ5LS0gJiYgKHM5ID0gdGhpcy5uZXh0UnVuKHM5KSk7ICkgcjExLnB1c2goczkpOwogICAgICAgIHJldHVybiByMTE7CiAgICAgIH0KICAgICAgZ2V0UGF0dGVybigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdHRlcm4gPyB0aGlzLl9zdGF0ZXMucGF0dGVybi5wYXR0ZXJuIDogdm9pZCAwOwogICAgICB9CiAgICAgIGlzUnVubmluZygpIHsKICAgICAgICBsZXQgdDkgPSB0aGlzLm5leHRSdW4odGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4pLCBlMTEgPSAhdGhpcy5fc3RhdGVzLnBhdXNlZCwgcjExID0gdGhpcy5mbiAhPT0gdm9pZCAwLCBzOSA9ICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgICByZXR1cm4gZTExICYmIHIxMSAmJiBzOSAmJiB0OSAhPT0gbnVsbDsKICAgICAgfQogICAgICBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIGlzQnVzeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLmJsb2NraW5nOwogICAgICB9CiAgICAgIGN1cnJlbnRSdW4oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuID8gdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4uZ2V0RGF0ZSgpIDogbnVsbDsKICAgICAgfQogICAgICBwcmV2aW91c1J1bigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuID8gdGhpcy5fc3RhdGVzLnByZXZpb3VzUnVuLmdldERhdGUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgbXNUb05leHQodDkpIHsKICAgICAgICBsZXQgZTExID0gdGhpcy5fbmV4dCh0OSk7CiAgICAgICAgcmV0dXJuIGUxMSA/IHQ5IGluc3RhbmNlb2YgZjMgfHwgdDkgaW5zdGFuY2VvZiBEYXRlID8gZTExLmdldFRpbWUoKSAtIHQ5LmdldFRpbWUoKSA6IGUxMS5nZXRUaW1lKCkgLSBuZXcgZjModDkpLmdldFRpbWUoKSA6IG51bGw7CiAgICAgIH0KICAgICAgc3RvcCgpIHsKICAgICAgICB0aGlzLl9zdGF0ZXMua2lsbCA9IHRydWUsIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiBjbGVhclRpbWVvdXQodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KTsKICAgICAgICBsZXQgdDkgPSB5My5pbmRleE9mKHRoaXMpOwogICAgICAgIHQ5ID49IDAgJiYgeTMuc3BsaWNlKHQ5LCAxKTsKICAgICAgfQogICAgICBwYXVzZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLnBhdXNlZCA9IHRydWUsICF0aGlzLl9zdGF0ZXMua2lsbDsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0YXRlcy5wYXVzZWQgPSBmYWxzZSwgIXRoaXMuX3N0YXRlcy5raWxsOwogICAgICB9CiAgICAgIHNjaGVkdWxlKHQ5KSB7CiAgICAgICAgaWYgKHQ5ICYmIHRoaXMuZm4pIHRocm93IG5ldyBFcnJvcigiQ3JvbjogSXQgaXMgbm90IGFsbG93ZWQgdG8gc2NoZWR1bGUgdHdvIGZ1bmN0aW9ucyB1c2luZyB0aGUgc2FtZSBDcm9uZXIgaW5zdGFuY2UuIik7CiAgICAgICAgdDkgJiYgKHRoaXMuZm4gPSB0OSk7CiAgICAgICAgbGV0IGUxMSA9IHRoaXMubXNUb05leHQoKSwgcjExID0gdGhpcy5uZXh0UnVuKHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKTsKICAgICAgICByZXR1cm4gZTExID09IG51bGwgfHwgaXNOYU4oZTExKSB8fCByMTEgPT09IG51bGwgPyB0aGlzIDogKGUxMSA+IF8yICYmIChlMTEgPSBfMiksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCA9IHNldFRpbWVvdXQoKCkgPT4gdGhpcy5fY2hlY2tUcmlnZ2VyKHIxMSksIGUxMSksIHRoaXMuX3N0YXRlcy5jdXJyZW50VGltZW91dCAmJiB0aGlzLm9wdGlvbnMudW5yZWYgJiYgUDIodGhpcy5fc3RhdGVzLmN1cnJlbnRUaW1lb3V0KSwgdGhpcyk7CiAgICAgIH0KICAgICAgYXN5bmMgX3RyaWdnZXIodDkpIHsKICAgICAgICBpZiAodGhpcy5fc3RhdGVzLmJsb2NraW5nID0gdHJ1ZSwgdGhpcy5fc3RhdGVzLmN1cnJlbnRSdW4gPSBuZXcgZjModm9pZCAwLCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5jYXRjaCkgdHJ5IHsKICAgICAgICAgIHRoaXMuZm4gIT09IHZvaWQgMCAmJiBhd2FpdCB0aGlzLmZuKHRoaXMsIHRoaXMub3B0aW9ucy5jb250ZXh0KTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGcyKHRoaXMub3B0aW9ucy5jYXRjaCkgJiYgdGhpcy5vcHRpb25zLmNhdGNoKGUxMSwgdGhpcyk7CiAgICAgICAgfQogICAgICAgIGVsc2UgdGhpcy5mbiAhPT0gdm9pZCAwICYmIGF3YWl0IHRoaXMuZm4odGhpcywgdGhpcy5vcHRpb25zLmNvbnRleHQpOwogICAgICAgIHRoaXMuX3N0YXRlcy5wcmV2aW91c1J1biA9IG5ldyBmMyh0OSwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCB0aGlzLl9zdGF0ZXMuYmxvY2tpbmcgPSBmYWxzZTsKICAgICAgfQogICAgICBhc3luYyB0cmlnZ2VyKCkgewogICAgICAgIGF3YWl0IHRoaXMuX3RyaWdnZXIoKTsKICAgICAgfQogICAgICBydW5zTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RhdGVzLm1heFJ1bnM7CiAgICAgIH0KICAgICAgX2NoZWNrVHJpZ2dlcih0OSkgewogICAgICAgIGxldCBlMTEgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgcjExID0gIXRoaXMuX3N0YXRlcy5wYXVzZWQgJiYgZTExLmdldFRpbWUoKSA+PSB0OS5nZXRUaW1lKCksIHM5ID0gdGhpcy5fc3RhdGVzLmJsb2NraW5nICYmIHRoaXMub3B0aW9ucy5wcm90ZWN0OwogICAgICAgIHIxMSAmJiAhczkgPyAodGhpcy5fc3RhdGVzLm1heFJ1bnMgIT09IHZvaWQgMCAmJiB0aGlzLl9zdGF0ZXMubWF4UnVucy0tLCB0aGlzLl90cmlnZ2VyKCkpIDogcjExICYmIHM5ICYmIGcyKHRoaXMub3B0aW9ucy5wcm90ZWN0KSAmJiBzZXRUaW1lb3V0KCgpID0+IHRoaXMub3B0aW9ucy5wcm90ZWN0KHRoaXMpLCAwKSwgdGhpcy5zY2hlZHVsZSgpOwogICAgICB9CiAgICAgIF9uZXh0KHQ5KSB7CiAgICAgICAgbGV0IGUxMSA9ICEhKHQ5IHx8IHRoaXMuX3N0YXRlcy5jdXJyZW50UnVuKSwgcjExID0gZmFsc2U7CiAgICAgICAgIXQ5ICYmIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAmJiAoW3Q5LCBlMTFdID0gdGhpcy5fY2FsY3VsYXRlUHJldmlvdXNSdW4odDksIGUxMSksIHIxMSA9ICF0OSksIHQ5ID0gbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCksIHRoaXMub3B0aW9ucy5zdGFydEF0ICYmIHQ5ICYmIHQ5LmdldFRpbWUoKSA8IHRoaXMub3B0aW9ucy5zdGFydEF0LmdldFRpbWUoKSAmJiAodDkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdCk7CiAgICAgICAgbGV0IHM5ID0gdGhpcy5fc3RhdGVzLm9uY2UgfHwgbmV3IGYzKHQ5LCB0aGlzLm9wdGlvbnMudGltZXpvbmUgfHwgdGhpcy5vcHRpb25zLnV0Y09mZnNldCk7CiAgICAgICAgcmV0dXJuICFyMTEgJiYgczkgIT09IHRoaXMuX3N0YXRlcy5vbmNlICYmIChzOSA9IHM5LmluY3JlbWVudCh0aGlzLl9zdGF0ZXMucGF0dGVybiwgdGhpcy5vcHRpb25zLCBlMTEpKSwgdGhpcy5fc3RhdGVzLm9uY2UgJiYgdGhpcy5fc3RhdGVzLm9uY2UuZ2V0VGltZSgpIDw9IHQ5LmdldFRpbWUoKSB8fCBzOSA9PT0gbnVsbCB8fCB0aGlzLl9zdGF0ZXMubWF4UnVucyAhPT0gdm9pZCAwICYmIHRoaXMuX3N0YXRlcy5tYXhSdW5zIDw9IDAgfHwgdGhpcy5fc3RhdGVzLmtpbGwgfHwgdGhpcy5vcHRpb25zLnN0b3BBdCAmJiBzOS5nZXRUaW1lKCkgPj0gdGhpcy5vcHRpb25zLnN0b3BBdC5nZXRUaW1lKCkgPyBudWxsIDogczk7CiAgICAgIH0KICAgICAgX2NhbGN1bGF0ZVByZXZpb3VzUnVuKHQ5LCBlMTEpIHsKICAgICAgICBsZXQgcjExID0gbmV3IGYzKHZvaWQgMCwgdGhpcy5vcHRpb25zLnRpbWV6b25lIHx8IHRoaXMub3B0aW9ucy51dGNPZmZzZXQpLCBzOSA9IHQ5OwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuc3RhcnRBdC5nZXRUaW1lKCkgPD0gcjExLmdldFRpbWUoKSkgewogICAgICAgICAgczkgPSB0aGlzLm9wdGlvbnMuc3RhcnRBdDsKICAgICAgICAgIGxldCBpMTEgPSBzOS5nZXRUaW1lKCkgKyB0aGlzLm9wdGlvbnMuaW50ZXJ2YWwgKiAxZTM7CiAgICAgICAgICBmb3IgKDsgaTExIDw9IHIxMS5nZXRUaW1lKCk7ICkgczkgPSBuZXcgZjMoczksIHRoaXMub3B0aW9ucy50aW1lem9uZSB8fCB0aGlzLm9wdGlvbnMudXRjT2Zmc2V0KS5pbmNyZW1lbnQodGhpcy5fc3RhdGVzLnBhdHRlcm4sIHRoaXMub3B0aW9ucywgdHJ1ZSksIGkxMSA9IHM5LmdldFRpbWUoKSArIHRoaXMub3B0aW9ucy5pbnRlcnZhbCAqIDFlMzsKICAgICAgICAgIGUxMSA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzOSA9PT0gbnVsbCAmJiAoczkgPSB2b2lkIDApLCBbczksIGUxMV07CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RhbnRzLmpzCnZhciBkYXlzSW5XZWVrLCBkYXlzSW5ZZWFyLCBtYXhUaW1lLCBtaW5UaW1lLCBtaWxsaXNlY29uZHNJbldlZWssIG1pbGxpc2Vjb25kc0luRGF5LCBtaWxsaXNlY29uZHNJbk1pbnV0ZSwgbWlsbGlzZWNvbmRzSW5Ib3VyLCBtaWxsaXNlY29uZHNJblNlY29uZCwgbWludXRlc0luWWVhciwgbWludXRlc0luTW9udGgsIG1pbnV0ZXNJbkRheSwgbWludXRlc0luSG91ciwgbW9udGhzSW5RdWFydGVyLCBtb250aHNJblllYXIsIHF1YXJ0ZXJzSW5ZZWFyLCBzZWNvbmRzSW5Ib3VyLCBzZWNvbmRzSW5NaW51dGUsIHNlY29uZHNJbkRheSwgc2Vjb25kc0luV2Vlaywgc2Vjb25kc0luWWVhciwgc2Vjb25kc0luTW9udGgsIHNlY29uZHNJblF1YXJ0ZXIsIGNvbnN0cnVjdEZyb21TeW1ib2w7CnZhciBpbml0X2NvbnN0YW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdGFudHMuanMiKCkgewogICAgZGF5c0luV2VlayA9IDc7CiAgICBkYXlzSW5ZZWFyID0gMzY1LjI0MjU7CiAgICBtYXhUaW1lID0gTWF0aC5wb3coMTAsIDgpICogMjQgKiA2MCAqIDYwICogMWUzOwogICAgbWluVGltZSA9IC1tYXhUaW1lOwogICAgbWlsbGlzZWNvbmRzSW5XZWVrID0gNjA0OGU1OwogICAgbWlsbGlzZWNvbmRzSW5EYXkgPSA4NjRlNTsKICAgIG1pbGxpc2Vjb25kc0luTWludXRlID0gNmU0OwogICAgbWlsbGlzZWNvbmRzSW5Ib3VyID0gMzZlNTsKICAgIG1pbGxpc2Vjb25kc0luU2Vjb25kID0gMWUzOwogICAgbWludXRlc0luWWVhciA9IDUyNTYwMDsKICAgIG1pbnV0ZXNJbk1vbnRoID0gNDMyMDA7CiAgICBtaW51dGVzSW5EYXkgPSAxNDQwOwogICAgbWludXRlc0luSG91ciA9IDYwOwogICAgbW9udGhzSW5RdWFydGVyID0gMzsKICAgIG1vbnRoc0luWWVhciA9IDEyOwogICAgcXVhcnRlcnNJblllYXIgPSA0OwogICAgc2Vjb25kc0luSG91ciA9IDM2MDA7CiAgICBzZWNvbmRzSW5NaW51dGUgPSA2MDsKICAgIHNlY29uZHNJbkRheSA9IHNlY29uZHNJbkhvdXIgKiAyNDsKICAgIHNlY29uZHNJbldlZWsgPSBzZWNvbmRzSW5EYXkgKiA3OwogICAgc2Vjb25kc0luWWVhciA9IHNlY29uZHNJbkRheSAqIGRheXNJblllYXI7CiAgICBzZWNvbmRzSW5Nb250aCA9IHNlY29uZHNJblllYXIgLyAxMjsKICAgIHNlY29uZHNJblF1YXJ0ZXIgPSBzZWNvbmRzSW5Nb250aCAqIDM7CiAgICBjb25zdHJ1Y3RGcm9tU3ltYm9sID0gLyogQF9fUFVSRV9fICovIFN5bWJvbC5mb3IoImNvbnN0cnVjdERhdGVGcm9tIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcwpmdW5jdGlvbiBjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgZGF0ZSA9PT0gImZ1bmN0aW9uIikgcmV0dXJuIGRhdGUodmFsdWUyKTsKICBpZiAoZGF0ZSAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIgJiYgY29uc3RydWN0RnJvbVN5bWJvbCBpbiBkYXRlKQogICAgcmV0dXJuIGRhdGVbY29uc3RydWN0RnJvbVN5bWJvbF0odmFsdWUyKTsKICBpZiAoZGF0ZSBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgZGF0ZS5jb25zdHJ1Y3Rvcih2YWx1ZTIpOwogIHJldHVybiBuZXcgRGF0ZSh2YWx1ZTIpOwp9CnZhciBjb25zdHJ1Y3RGcm9tX2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdEZyb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29uc3RydWN0RnJvbS5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgY29uc3RydWN0RnJvbV9kZWZhdWx0ID0gY29uc3RydWN0RnJvbTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90b0RhdGUuanMKZnVuY3Rpb24gdG9EYXRlKGFyZ3VtZW50LCBjb250ZXh0MikgewogIHJldHVybiBjb25zdHJ1Y3RGcm9tKGNvbnRleHQyIHx8IGFyZ3VtZW50LCBhcmd1bWVudCk7Cn0KdmFyIHRvRGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF90b0RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdG9EYXRlLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgdG9EYXRlX2RlZmF1bHQgPSB0b0RhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkRGF5cy5qcwpmdW5jdGlvbiBhZGREYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoaXNOYU4oYW1vdW50KSkgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgTmFOKTsKICBpZiAoIWFtb3VudCkgcmV0dXJuIF9kYXRlOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgYW1vdW50KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZERheXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGREYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZERheXNfZGVmYXVsdCA9IGFkZERheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTW9udGhzLmpzCmZ1bmN0aW9uIGFkZE1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgaWYgKCFhbW91bnQpIHsKICAgIHJldHVybiBfZGF0ZTsKICB9CiAgY29uc3QgZGF5T2ZNb250aCA9IF9kYXRlLmdldERhdGUoKTsKICBjb25zdCBlbmRPZkRlc2lyZWRNb250aCA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgX2RhdGUuZ2V0VGltZSgpKTsKICBlbmRPZkRlc2lyZWRNb250aC5zZXRNb250aChfZGF0ZS5nZXRNb250aCgpICsgYW1vdW50ICsgMSwgMCk7CiAgY29uc3QgZGF5c0luTW9udGggPSBlbmRPZkRlc2lyZWRNb250aC5nZXREYXRlKCk7CiAgaWYgKGRheU9mTW9udGggPj0gZGF5c0luTW9udGgpIHsKICAgIHJldHVybiBlbmRPZkRlc2lyZWRNb250aDsKICB9IGVsc2UgewogICAgX2RhdGUuc2V0RnVsbFllYXIoCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldEZ1bGxZZWFyKCksCiAgICAgIGVuZE9mRGVzaXJlZE1vbnRoLmdldE1vbnRoKCksCiAgICAgIGRheU9mTW9udGgKICAgICk7CiAgICByZXR1cm4gX2RhdGU7CiAgfQp9CnZhciBhZGRNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1vbnRocy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBhZGRNb250aHNfZGVmYXVsdCA9IGFkZE1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGQuanMKZnVuY3Rpb24gYWRkKGRhdGUsIGR1cmF0aW9uLCBvcHRpb25zKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIHdlZWtzID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGVXaXRoTW9udGhzID0gbW9udGhzMiB8fCB5ZWFycyA/IGFkZE1vbnRocyhfZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIpIDogX2RhdGU7CiAgY29uc3QgZGF0ZVdpdGhEYXlzID0gZGF5czIgfHwgd2Vla3MgPyBhZGREYXlzKGRhdGVXaXRoTW9udGhzLCBkYXlzMiArIHdlZWtzICogNykgOiBkYXRlV2l0aE1vbnRoczsKICBjb25zdCBtaW51dGVzVG9BZGQgPSBtaW51dGVzICsgaG91cnMgKiA2MDsKICBjb25zdCBzZWNvbmRzVG9BZGQgPSBzZWNvbmRzICsgbWludXRlc1RvQWRkICogNjA7CiAgY29uc3QgbXNUb0FkZCA9IHNlY29uZHNUb0FkZCAqIDFlMzsKICByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCArZGF0ZVdpdGhEYXlzICsgbXNUb0FkZCk7Cn0KdmFyIGFkZF9kZWZhdWx0Owp2YXIgaW5pdF9hZGQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkLmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZF9kZWZhdWx0ID0gYWRkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2F0dXJkYXkuanMKZnVuY3Rpb24gaXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDY7Cn0KdmFyIGlzU2F0dXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYXR1cmRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1NhdHVyZGF5X2RlZmF1bHQgPSBpc1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU3VuZGF5LmpzCmZ1bmN0aW9uIGlzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMDsKfQp2YXIgaXNTdW5kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTdW5kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTdW5kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzU3VuZGF5X2RlZmF1bHQgPSBpc1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZWtlbmQuanMKZnVuY3Rpb24gaXNXZWVrZW5kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgfHwgZGF5ID09PSA2Owp9CnZhciBpc1dlZWtlbmRfZGVmYXVsdDsKdmFyIGluaXRfaXNXZWVrZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2Vla2VuZC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWVrZW5kX2RlZmF1bHQgPSBpc1dlZWtlbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIGFkZEJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3Qgc3RhcnRlZE9uV2Vla2VuZCA9IGlzV2Vla2VuZChfZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGlzTmFOKGFtb3VudCkpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGhvdXJzID0gX2RhdGUuZ2V0SG91cnMoKTsKICBjb25zdCBzaWduID0gYW1vdW50IDwgMCA/IC0xIDogMTsKICBjb25zdCBmdWxsV2Vla3MgPSBNYXRoLnRydW5jKGFtb3VudCAvIDUpOwogIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgZnVsbFdlZWtzICogNyk7CiAgbGV0IHJlc3REYXlzID0gTWF0aC5hYnMoYW1vdW50ICUgNSk7CiAgd2hpbGUgKHJlc3REYXlzID4gMCkgewogICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBzaWduKTsKICAgIGlmICghaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSkgcmVzdERheXMgLT0gMTsKICB9CiAgaWYgKHN0YXJ0ZWRPbldlZWtlbmQgJiYgaXNXZWVrZW5kKF9kYXRlLCBvcHRpb25zKSAmJiBhbW91bnQgIT09IDApIHsKICAgIGlmIChpc1NhdHVyZGF5KF9kYXRlLCBvcHRpb25zKSkKICAgICAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyAoc2lnbiA8IDAgPyAyIDogLTEpKTsKICAgIGlmIChpc1N1bmRheShfZGF0ZSwgb3B0aW9ucykpCiAgICAgIF9kYXRlLnNldERhdGUoX2RhdGUuZ2V0RGF0ZSgpICsgKHNpZ24gPCAwID8gMSA6IC0yKSk7CiAgfQogIF9kYXRlLnNldEhvdXJzKGhvdXJzKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9hZGRCdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9pc1NhdHVyZGF5KCk7CiAgICBpbml0X2lzU3VuZGF5KCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZEJ1c2luZXNzRGF5c19kZWZhdWx0ID0gYWRkQnVzaW5lc3NEYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3RvRGF0ZShkYXRlKSArIGFtb3VudCk7Cn0KdmFyIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGFkZE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gYWRkTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZEhvdXJzLmpzCmZ1bmN0aW9uIGFkZEhvdXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaWxsaXNlY29uZHMoZGF0ZSwgYW1vdW50ICogbWlsbGlzZWNvbmRzSW5Ib3VyLCBvcHRpb25zKTsKfQp2YXIgYWRkSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkSG91cnMuanMiKCkgewogICAgaW5pdF9hZGRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBhZGRIb3Vyc19kZWZhdWx0ID0gYWRkSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0T3B0aW9ucy5qcwpmdW5jdGlvbiBnZXREZWZhdWx0T3B0aW9ucygpIHsKICByZXR1cm4gZGVmYXVsdE9wdGlvbnM7Cn0KZnVuY3Rpb24gc2V0RGVmYXVsdE9wdGlvbnMobmV3T3B0aW9ucykgewogIGRlZmF1bHRPcHRpb25zID0gbmV3T3B0aW9uczsKfQp2YXIgZGVmYXVsdE9wdGlvbnM7CnZhciBpbml0X2RlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgZGVmYXVsdE9wdGlvbnMgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vlay5qcwpmdW5jdGlvbiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCB3ZWVrU3RhcnRzT24gPSBvcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy53ZWVrU3RhcnRzT24gPz8gMDsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF5KCk7CiAgY29uc3QgZGlmZiA9IChkYXkgPCB3ZWVrU3RhcnRzT24gPyA3IDogMCkgKyBkYXkgLSB3ZWVrU3RhcnRzT247CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgLSBkaWZmKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZXZWVrX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mV2Vla19kZWZhdWx0ID0gc3RhcnRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWsoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgc3RhcnRPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgc3RhcnRPZklTT1dlZWtfZGVmYXVsdCA9IHN0YXJ0T2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZklTT1dlZWsoZm91cnRoT2ZKYW51YXJ5T2ZOZXh0WWVhcik7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20oX2RhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mVGhpc1llYXIuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5T2ZUaGlzWWVhci5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBzdGFydE9mVGhpc1llYXIgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZlRoaXNZZWFyKTsKICBpZiAoX2RhdGUuZ2V0VGltZSgpID49IHN0YXJ0T2ZOZXh0WWVhci5nZXRUaW1lKCkpIHsKICAgIHJldHVybiB5ZWFyICsgMTsKICB9IGVsc2UgaWYgKF9kYXRlLmdldFRpbWUoKSA+PSBzdGFydE9mVGhpc1llYXIuZ2V0VGltZSgpKSB7CiAgICByZXR1cm4geWVhcjsKICB9IGVsc2UgewogICAgcmV0dXJuIHllYXIgLSAxOwogIH0KfQp2YXIgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPV2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IGdldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlKTsKICBjb25zdCB1dGNEYXRlID0gbmV3IERhdGUoCiAgICBEYXRlLlVUQygKICAgICAgX2RhdGUuZ2V0RnVsbFllYXIoKSwKICAgICAgX2RhdGUuZ2V0TW9udGgoKSwKICAgICAgX2RhdGUuZ2V0RGF0ZSgpLAogICAgICBfZGF0ZS5nZXRIb3VycygpLAogICAgICBfZGF0ZS5nZXRNaW51dGVzKCksCiAgICAgIF9kYXRlLmdldFNlY29uZHMoKSwKICAgICAgX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICAgICkKICApOwogIHV0Y0RhdGUuc2V0VVRDRnVsbFllYXIoX2RhdGUuZ2V0RnVsbFllYXIoKSk7CiAgcmV0dXJuICtkYXRlIC0gK3V0Y0RhdGU7Cn0KdmFyIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2dldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZURhdGVzKGNvbnRleHQyLCAuLi5kYXRlcykgewogIGNvbnN0IG5vcm1hbGl6ZTQgPSBjb25zdHJ1Y3RGcm9tLmJpbmQoCiAgICBudWxsLAogICAgY29udGV4dDIgfHwgZGF0ZXMuZmluZCgoZGF0ZSkgPT4gdHlwZW9mIGRhdGUgPT09ICJvYmplY3QiKQogICk7CiAgcmV0dXJuIGRhdGVzLm1hcChub3JtYWxpemU0KTsKfQp2YXIgaW5pdF9ub3JtYWxpemVEYXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL25vcm1hbGl6ZURhdGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMKZnVuY3Rpb24gc3RhcnRPZkRheShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc3RhcnRPZkRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZEYXlfZGVmYXVsdCA9IHN0YXJ0T2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IGxhdGVyU3RhcnRPZkRheSA9IHN0YXJ0T2ZEYXkobGF0ZXJEYXRlXyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZEYXkgPSBzdGFydE9mRGF5KGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgbGF0ZXJUaW1lc3RhbXAgPSArbGF0ZXJTdGFydE9mRGF5IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZEYXkpOwogIGNvbnN0IGVhcmxpZXJUaW1lc3RhbXAgPSArZWFybGllclN0YXJ0T2ZEYXkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJTdGFydE9mRGF5KTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCB5ZWFyID0gZ2V0SVNPV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZm91cnRoT2ZKYW51YXJ5ID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmb3VydGhPZkphbnVhcnkuc2V0RnVsbFllYXIoeWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnkpOwp9CnZhciBzdGFydE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIHN0YXJ0T2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZklTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzCmZ1bmN0aW9uIHNldElTT1dlZWtZZWFyKGRhdGUsIHdlZWtZZWFyLCBvcHRpb25zKSB7CiAgbGV0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKAogICAgX2RhdGUsCiAgICBzdGFydE9mSVNPV2Vla1llYXIoX2RhdGUsIG9wdGlvbnMpCiAgKTsKICBjb25zdCBmb3VydGhPZkphbnVhcnkgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeS5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgNCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEhvdXJzKDAsIDAsIDAsIDApOwogIF9kYXRlID0gc3RhcnRPZklTT1dlZWtZZWFyKGZvdXJ0aE9mSmFudWFyeSk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldElTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPV2Vla1llYXJfZGVmYXVsdCA9IHNldElTT1dlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZElTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIHNldElTT1dlZWtZZWFyKGRhdGUsIGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpICsgYW1vdW50LCBvcHRpb25zKTsKfQp2YXIgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2FkZElTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRJU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zZXRJU09XZWVrWWVhcigpOwogICAgYWRkSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBhZGRJU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkTWludXRlcy5qcwpmdW5jdGlvbiBhZGRNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRUaW1lKF9kYXRlLmdldFRpbWUoKSArIGFtb3VudCAqIG1pbGxpc2Vjb25kc0luTWludXRlKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGFkZE1pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfYWRkTWludXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRNaW51dGVzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgYWRkTWludXRlc19kZWZhdWx0ID0gYWRkTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcwpmdW5jdGlvbiBhZGRRdWFydGVycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDMsIG9wdGlvbnMpOwp9CnZhciBhZGRRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgYWRkUXVhcnRlcnNfZGVmYXVsdCA9IGFkZFF1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFNlY29uZHMuanMKZnVuY3Rpb24gYWRkU2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIGFtb3VudCAqIDFlMywgb3B0aW9ucyk7Cn0KdmFyIGFkZFNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfYWRkU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRTZWNvbmRzLmpzIigpIHsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBhZGRTZWNvbmRzX2RlZmF1bHQgPSBhZGRTZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2FkZFdlZWtzLmpzCmZ1bmN0aW9uIGFkZFdlZWtzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIGFtb3VudCAqIDcsIG9wdGlvbnMpOwp9CnZhciBhZGRXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9hZGRXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGFkZFdlZWtzX2RlZmF1bHQgPSBhZGRXZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hZGRZZWFycy5qcwpmdW5jdGlvbiBhZGRZZWFycyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIGFtb3VudCAqIDEyLCBvcHRpb25zKTsKfQp2YXIgYWRkWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfYWRkWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYWRkWWVhcnMuanMiKCkgewogICAgaW5pdF9hZGRNb250aHMoKTsKICAgIGFkZFllYXJzX2RlZmF1bHQgPSBhZGRZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9hcmVJbnRlcnZhbHNPdmVybGFwcGluZy5qcwpmdW5jdGlvbiBhcmVJbnRlcnZhbHNPdmVybGFwcGluZyhpbnRlcnZhbExlZnQsIGludGVydmFsUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBbbGVmdFN0YXJ0VGltZSwgbGVmdEVuZFRpbWVdID0gWwogICAgK3RvRGF0ZShpbnRlcnZhbExlZnQuc3RhcnQsIG9wdGlvbnM/LmluKSwKICAgICt0b0RhdGUoaW50ZXJ2YWxMZWZ0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0VGltZSwgcmlnaHRFbmRUaW1lXSA9IFsKICAgICt0b0RhdGUoaW50ZXJ2YWxSaWdodC5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCwgb3B0aW9ucz8uaW4pCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGlmIChvcHRpb25zPy5pbmNsdXNpdmUpCiAgICByZXR1cm4gbGVmdFN0YXJ0VGltZSA8PSByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPD0gbGVmdEVuZFRpbWU7CiAgcmV0dXJuIGxlZnRTdGFydFRpbWUgPCByaWdodEVuZFRpbWUgJiYgcmlnaHRTdGFydFRpbWUgPCBsZWZ0RW5kVGltZTsKfQp2YXIgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmdfZGVmYXVsdDsKdmFyIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGFyZUludGVydmFsc092ZXJsYXBwaW5nX2RlZmF1bHQgPSBhcmVJbnRlcnZhbHNPdmVybGFwcGluZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMKZnVuY3Rpb24gbWF4MihkYXRlcywgb3B0aW9ucykgewogIGxldCByZXN1bHQ7CiAgbGV0IGNvbnRleHQyID0gb3B0aW9ucz8uaW47CiAgZGF0ZXMuZm9yRWFjaCgoZGF0ZSkgPT4gewogICAgaWYgKCFjb250ZXh0MiAmJiB0eXBlb2YgZGF0ZSA9PT0gIm9iamVjdCIpCiAgICAgIGNvbnRleHQyID0gY29uc3RydWN0RnJvbS5iaW5kKG51bGwsIGRhdGUpOwogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgY29udGV4dDIpOwogICAgaWYgKCFyZXN1bHQgfHwgcmVzdWx0IDwgZGF0ZV8gfHwgaXNOYU4oK2RhdGVfKSkgcmVzdWx0ID0gZGF0ZV87CiAgfSk7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20oY29udGV4dDIsIHJlc3VsdCB8fCBOYU4pOwp9CnZhciBtYXhfZGVmYXVsdDsKdmFyIGluaXRfbWF4MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tYXguanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbWF4X2RlZmF1bHQgPSBtYXgyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcwpmdW5jdGlvbiBtaW4yKGRhdGVzLCBvcHRpb25zKSB7CiAgbGV0IHJlc3VsdDsKICBsZXQgY29udGV4dDIgPSBvcHRpb25zPy5pbjsKICBkYXRlcy5mb3JFYWNoKChkYXRlKSA9PiB7CiAgICBpZiAoIWNvbnRleHQyICYmIHR5cGVvZiBkYXRlID09PSAib2JqZWN0IikKICAgICAgY29udGV4dDIgPSBjb25zdHJ1Y3RGcm9tLmJpbmQobnVsbCwgZGF0ZSk7CiAgICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBjb250ZXh0Mik7CiAgICBpZiAoIXJlc3VsdCB8fCByZXN1bHQgPiBkYXRlXyB8fCBpc05hTigrZGF0ZV8pKSByZXN1bHQgPSBkYXRlXzsKICB9KTsKICByZXR1cm4gY29uc3RydWN0RnJvbShjb250ZXh0MiwgcmVzdWx0IHx8IE5hTik7Cn0KdmFyIG1pbl9kZWZhdWx0Owp2YXIgaW5pdF9taW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbi5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBtaW5fZGVmYXVsdCA9IG1pbjI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xhbXAuanMKZnVuY3Rpb24gY2xhbXAoZGF0ZSwgaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVfLCBzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZSwKICAgIGludGVydmFsMy5zdGFydCwKICAgIGludGVydmFsMy5lbmQKICApOwogIHJldHVybiBtaW4yKFttYXgyKFtkYXRlXywgc3RhcnRdLCBvcHRpb25zKSwgZW5kM10sIG9wdGlvbnMpOwp9CnZhciBjbGFtcF9kZWZhdWx0Owp2YXIgaW5pdF9jbGFtcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jbGFtcC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X21heDIoKTsKICAgIGluaXRfbWluMigpOwogICAgY2xhbXBfZGVmYXVsdCA9IGNsYW1wOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmUsIGRhdGVzKSB7CiAgY29uc3QgdGltZVRvQ29tcGFyZSA9ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7CiAgaWYgKGlzTmFOKHRpbWVUb0NvbXBhcmUpKSByZXR1cm4gTmFOOwogIGxldCByZXN1bHQ7CiAgbGV0IG1pbkRpc3RhbmNlOwogIGRhdGVzLmZvckVhY2goKGRhdGUsIGluZGV4MikgPT4gewogICAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgICBpZiAoaXNOYU4oK2RhdGVfKSkgewogICAgICByZXN1bHQgPSBOYU47CiAgICAgIG1pbkRpc3RhbmNlID0gTmFOOwogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBkaXN0YW5jZSA9IE1hdGguYWJzKHRpbWVUb0NvbXBhcmUgLSArZGF0ZV8pOwogICAgaWYgKHJlc3VsdCA9PSBudWxsIHx8IGRpc3RhbmNlIDwgbWluRGlzdGFuY2UpIHsKICAgICAgcmVzdWx0ID0gaW5kZXgyOwogICAgICBtaW5EaXN0YW5jZSA9IGRpc3RhbmNlOwogICAgfQogIH0pOwogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNsb3Nlc3RJbmRleFRvX2RlZmF1bHQ7CnZhciBpbml0X2Nsb3Nlc3RJbmRleFRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Nsb3Nlc3RJbmRleFRvLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBjbG9zZXN0SW5kZXhUb19kZWZhdWx0ID0gY2xvc2VzdEluZGV4VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzCmZ1bmN0aW9uIGNsb3Nlc3RUbyhkYXRlVG9Db21wYXJlLCBkYXRlcywgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlVG9Db21wYXJlXywgLi4uZGF0ZXNfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBkYXRlVG9Db21wYXJlLAogICAgLi4uZGF0ZXMKICApOwogIGNvbnN0IGluZGV4MiA9IGNsb3Nlc3RJbmRleFRvKGRhdGVUb0NvbXBhcmVfLCBkYXRlc18pOwogIGlmICh0eXBlb2YgaW5kZXgyID09PSAibnVtYmVyIiAmJiBpc05hTihpbmRleDIpKQogICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oZGF0ZVRvQ29tcGFyZV8sIE5hTik7CiAgaWYgKGluZGV4MiAhPT0gdm9pZCAwKSByZXR1cm4gZGF0ZXNfW2luZGV4Ml07Cn0KdmFyIGNsb3Nlc3RUb19kZWZhdWx0Owp2YXIgaW5pdF9jbG9zZXN0VG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY2xvc2VzdFRvLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgY2xvc2VzdFRvX2RlZmF1bHQgPSBjbG9zZXN0VG87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcwpmdW5jdGlvbiBjb21wYXJlQXNjKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIHsKICBjb25zdCBkaWZmID0gK3RvRGF0ZShkYXRlTGVmdCkgLSArdG9EYXRlKGRhdGVSaWdodCk7CiAgaWYgKGRpZmYgPCAwKSByZXR1cm4gLTE7CiAgZWxzZSBpZiAoZGlmZiA+IDApIHJldHVybiAxOwogIHJldHVybiBkaWZmOwp9CnZhciBjb21wYXJlQXNjX2RlZmF1bHQ7CnZhciBpbml0X2NvbXBhcmVBc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZUFzYy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgY29tcGFyZUFzY19kZWZhdWx0ID0gY29tcGFyZUFzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb21wYXJlRGVzYy5qcwpmdW5jdGlvbiBjb21wYXJlRGVzYyhkYXRlTGVmdCwgZGF0ZVJpZ2h0KSB7CiAgY29uc3QgZGlmZiA9ICt0b0RhdGUoZGF0ZUxlZnQpIC0gK3RvRGF0ZShkYXRlUmlnaHQpOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIC0xOwogIGVsc2UgaWYgKGRpZmYgPCAwKSByZXR1cm4gMTsKICByZXR1cm4gZGlmZjsKfQp2YXIgY29tcGFyZURlc2NfZGVmYXVsdDsKdmFyIGluaXRfY29tcGFyZURlc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvY29tcGFyZURlc2MuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGNvbXBhcmVEZXNjX2RlZmF1bHQgPSBjb21wYXJlRGVzYzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMKZnVuY3Rpb24gY29uc3RydWN0Tm93KGRhdGUpIHsKICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBEYXRlLm5vdygpKTsKfQp2YXIgY29uc3RydWN0Tm93X2RlZmF1bHQ7CnZhciBpbml0X2NvbnN0cnVjdE5vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9jb25zdHJ1Y3ROb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBjb25zdHJ1Y3ROb3dfZGVmYXVsdCA9IGNvbnN0cnVjdE5vdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kYXlzVG9XZWVrcy5qcwpmdW5jdGlvbiBkYXlzVG9XZWVrcyhkYXlzMikgewogIGNvbnN0IHJlc3VsdCA9IE1hdGgudHJ1bmMoZGF5czIgLyBkYXlzSW5XZWVrKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGF5c1RvV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGF5c1RvV2Vla3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGF5c1RvV2Vla3MuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRheXNUb1dlZWtzX2RlZmF1bHQgPSBkYXlzVG9XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVEYXkuanMKZnVuY3Rpb24gaXNTYW1lRGF5KGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mRGF5KGRhdGVMZWZ0XykgPT09ICtzdGFydE9mRGF5KGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVEYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZURheS5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZEYXkoKTsKICAgIGlzU2FtZURheV9kZWZhdWx0ID0gaXNTYW1lRGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRGF0ZS5qcwpmdW5jdGlvbiBpc0RhdGUodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiBpbnN0YW5jZW9mIERhdGUgfHwgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhbHVlMikgPT09ICJbb2JqZWN0IERhdGVdIjsKfQp2YXIgaXNEYXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzRGF0ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNEYXRlLmpzIigpIHsKICAgIGlzRGF0ZV9kZWZhdWx0ID0gaXNEYXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVmFsaWQuanMKZnVuY3Rpb24gaXNWYWxpZChkYXRlKSB7CiAgcmV0dXJuICEoIWlzRGF0ZShkYXRlKSAmJiB0eXBlb2YgZGF0ZSAhPT0gIm51bWJlciIgfHwgaXNOYU4oK3RvRGF0ZShkYXRlKSkpOwp9CnZhciBpc1ZhbGlkX2RlZmF1bHQ7CnZhciBpbml0X2lzVmFsaWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNWYWxpZC5qcyIoKSB7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1ZhbGlkX2RlZmF1bHQgPSBpc1ZhbGlkOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkJ1c2luZXNzRGF5cy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBpZiAoIWlzVmFsaWQobGF0ZXJEYXRlXykgfHwgIWlzVmFsaWQoZWFybGllckRhdGVfKSkgcmV0dXJuIE5hTjsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3Qgc2lnbiA9IGRpZmYgPCAwID8gLTEgOiAxOwogIGNvbnN0IHdlZWtzID0gTWF0aC50cnVuYyhkaWZmIC8gNyk7CiAgbGV0IHJlc3VsdCA9IHdlZWtzICogNTsKICBsZXQgbW92aW5nRGF0ZSA9IGFkZERheXMoZWFybGllckRhdGVfLCB3ZWVrcyAqIDcpOwogIHdoaWxlICghaXNTYW1lRGF5KGxhdGVyRGF0ZV8sIG1vdmluZ0RhdGUpKSB7CiAgICByZXN1bHQgKz0gaXNXZWVrZW5kKG1vdmluZ0RhdGUsIG9wdGlvbnMpID8gMCA6IHNpZ247CiAgICBtb3ZpbmdEYXRlID0gYWRkRGF5cyhtb3ZpbmdEYXRlLCBzaWduKTsKICB9CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5c19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkJ1c2luZXNzRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiBnZXRJU09XZWVrWWVhcihsYXRlckRhdGVfLCBvcHRpb25zKSAtIGdldElTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXywgb3B0aW9ucyk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla0xlZnQgPSBzdGFydE9mSVNPV2VlayhsYXRlckRhdGVfKTsKICBjb25zdCBzdGFydE9mSVNPV2Vla1JpZ2h0ID0gc3RhcnRPZklTT1dlZWsoZWFybGllckRhdGVfKTsKICBjb25zdCB0aW1lc3RhbXBMZWZ0ID0gK3N0YXJ0T2ZJU09XZWVrTGVmdCAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoc3RhcnRPZklTT1dlZWtMZWZ0KTsKICBjb25zdCB0aW1lc3RhbXBSaWdodCA9ICtzdGFydE9mSVNPV2Vla1JpZ2h0IC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhzdGFydE9mSVNPV2Vla1JpZ2h0KTsKICByZXR1cm4gTWF0aC5yb3VuZCgodGltZXN0YW1wTGVmdCAtIHRpbWVzdGFtcFJpZ2h0KSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCB5ZWFyc0RpZmYgPSBsYXRlckRhdGVfLmdldEZ1bGxZZWFyKCkgLSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKICBjb25zdCBtb250aHNEaWZmID0gbGF0ZXJEYXRlXy5nZXRNb250aCgpIC0gZWFybGllckRhdGVfLmdldE1vbnRoKCk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDEyICsgbW9udGhzRGlmZjsKfQp2YXIgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFF1YXJ0ZXIuanMKZnVuY3Rpb24gZ2V0UXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLnRydW5jKF9kYXRlLmdldE1vbnRoKCkgLyAzKSArIDE7CiAgcmV0dXJuIHF1YXJ0ZXI7Cn0KdmFyIGdldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRRdWFydGVyX2RlZmF1bHQgPSBnZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHllYXJzRGlmZiA9IGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwogIGNvbnN0IHF1YXJ0ZXJzRGlmZiA9IGdldFF1YXJ0ZXIobGF0ZXJEYXRlXykgLSBnZXRRdWFydGVyKGVhcmxpZXJEYXRlXyk7CiAgcmV0dXJuIHllYXJzRGlmZiAqIDQgKyBxdWFydGVyc0RpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZ2V0UXVhcnRlcigpOwogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyc19kZWZhdWx0ID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBsYXRlclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZWFybGllclN0YXJ0T2ZXZWVrID0gc3RhcnRPZldlZWsoZWFybGllckRhdGVfLCBvcHRpb25zKTsKICBjb25zdCBsYXRlclRpbWVzdGFtcCA9ICtsYXRlclN0YXJ0T2ZXZWVrIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhsYXRlclN0YXJ0T2ZXZWVrKTsKICBjb25zdCBlYXJsaWVyVGltZXN0YW1wID0gK2VhcmxpZXJTdGFydE9mV2VlayAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllclN0YXJ0T2ZXZWVrKTsKICByZXR1cm4gTWF0aC5yb3VuZCgobGF0ZXJUaW1lc3RhbXAgLSBlYXJsaWVyVGltZXN0YW1wKSAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzLmpzIigpIHsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3NfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuIGxhdGVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAtIGVhcmxpZXJEYXRlXy5nZXRGdWxsWWVhcigpOwp9CnZhciBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbkRheXMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluRGF5cyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmZXJlbmNlID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKQogICk7CiAgbGF0ZXJEYXRlXy5zZXREYXRlKGxhdGVyRGF0ZV8uZ2V0RGF0ZSgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGNvbnN0IGlzTGFzdERheU5vdEZ1bGwgPSBOdW1iZXIoCiAgICBjb21wYXJlTG9jYWxBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ24KICApOwogIGNvbnN0IHJlc3VsdCA9IHNpZ24gKiAoZGlmZmVyZW5jZSAtIGlzTGFzdERheU5vdEZ1bGwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CmZ1bmN0aW9uIGNvbXBhcmVMb2NhbEFzYyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgY29uc3QgZGlmZiA9IGxhdGVyRGF0ZS5nZXRGdWxsWWVhcigpIC0gZWFybGllckRhdGUuZ2V0RnVsbFllYXIoKSB8fCBsYXRlckRhdGUuZ2V0TW9udGgoKSAtIGVhcmxpZXJEYXRlLmdldE1vbnRoKCkgfHwgbGF0ZXJEYXRlLmdldERhdGUoKSAtIGVhcmxpZXJEYXRlLmdldERhdGUoKSB8fCBsYXRlckRhdGUuZ2V0SG91cnMoKSAtIGVhcmxpZXJEYXRlLmdldEhvdXJzKCkgfHwgbGF0ZXJEYXRlLmdldE1pbnV0ZXMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbnV0ZXMoKSB8fCBsYXRlckRhdGUuZ2V0U2Vjb25kcygpIC0gZWFybGllckRhdGUuZ2V0U2Vjb25kcygpIHx8IGxhdGVyRGF0ZS5nZXRNaWxsaXNlY29uZHMoKSAtIGVhcmxpZXJEYXRlLmdldE1pbGxpc2Vjb25kcygpOwogIGlmIChkaWZmIDwgMCkgcmV0dXJuIC0xOwogIGlmIChkaWZmID4gMCkgcmV0dXJuIDE7CiAgcmV0dXJuIGRpZmY7Cn0KdmFyIGRpZmZlcmVuY2VJbkRheXNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5EYXlzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBkaWZmZXJlbmNlSW5EYXlzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZ2V0Um91bmRpbmdNZXRob2QuanMKZnVuY3Rpb24gZ2V0Um91bmRpbmdNZXRob2QobWV0aG9kKSB7CiAgcmV0dXJuIChudW1iZXIyKSA9PiB7CiAgICBjb25zdCByb3VuZCA9IG1ldGhvZCA/IE1hdGhbbWV0aG9kXSA6IE1hdGgudHJ1bmM7CiAgICBjb25zdCByZXN1bHQgPSByb3VuZChudW1iZXIyKTsKICAgIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0OwogIH07Cn0KdmFyIGluaXRfZ2V0Um91bmRpbmdNZXRob2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9nZXRSb3VuZGluZ01ldGhvZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSG91cnMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICBjb25zdCBkaWZmID0gKCtsYXRlckRhdGVfIC0gK2VhcmxpZXJEYXRlXykgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluSG91cnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGRpZmZlcmVuY2VJbkhvdXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJJU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gc3ViSVNPV2Vla1llYXJzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRJU09XZWVrWWVhcnMoZGF0ZSwgLWFtb3VudCwgb3B0aW9ucyk7Cn0KdmFyIHN1YklTT1dlZWtZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJJU09XZWVrWWVhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSVNPV2Vla1llYXJzLmpzIigpIHsKICAgIGluaXRfYWRkSVNPV2Vla1llYXJzKCk7CiAgICBzdWJJU09XZWVrWWVhcnNfZGVmYXVsdCA9IHN1YklTT1dlZWtZZWFyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgY29uc3Qgc2lnbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICBjb25zdCBkaWZmID0gTWF0aC5hYnMoCiAgICBkaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpCiAgKTsKICBjb25zdCBhZGp1c3RlZERhdGUgPSBzdWJJU09XZWVrWWVhcnMobGF0ZXJEYXRlXywgc2lnbiAqIGRpZmYsIG9wdGlvbnMpOwogIGNvbnN0IGlzTGFzdElTT1dlZWtZZWFyTm90RnVsbCA9IE51bWJlcigKICAgIGNvbXBhcmVBc2MoYWRqdXN0ZWREYXRlLCBlYXJsaWVyRGF0ZV8pID09PSAtc2lnbgogICk7CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gaXNMYXN0SVNPV2Vla1llYXJOb3RGdWxsKTsKICByZXR1cm4gcmVzdWx0ID09PSAwID8gMCA6IHJlc3VsdDsKfQp2YXIgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQ7CnZhciBpbml0X2RpZmZlcmVuY2VJbklTT1dlZWtZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5JU09XZWVrWWVhcnMuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1YklTT1dlZWtZZWFycygpOwogICAgZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5JU09XZWVrWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICt0b0RhdGUobGF0ZXJEYXRlKSAtICt0b0RhdGUoZWFybGllckRhdGUpOwp9CnZhciBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTWludXRlcy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5NaW51dGVzKGRhdGVMZWZ0LCBkYXRlUmlnaHQsIG9wdGlvbnMpIHsKICBjb25zdCBkaWZmID0gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKGRhdGVMZWZ0LCBkYXRlUmlnaHQpIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJbk1pbnV0ZXMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzKCk7CiAgICBkaWZmZXJlbmNlSW5NaW51dGVzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5NaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzCmZ1bmN0aW9uIGVuZE9mRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGF5X2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRheV9kZWZhdWx0ID0gZW5kT2ZEYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZNb250aC5qcwpmdW5jdGlvbiBlbmRPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgbW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIF9kYXRlLnNldEZ1bGxZZWFyKF9kYXRlLmdldEZ1bGxZZWFyKCksIG1vbnRoICsgMSwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZk1vbnRoX2RlZmF1bHQgPSBlbmRPZk1vbnRoOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTGFzdERheU9mTW9udGguanMKZnVuY3Rpb24gaXNMYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIHJldHVybiArZW5kT2ZEYXkoX2RhdGUsIG9wdGlvbnMpID09PSArZW5kT2ZNb250aChfZGF0ZSwgb3B0aW9ucyk7Cn0KdmFyIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfaXNMYXN0RGF5T2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xhc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTGFzdERheU9mTW9udGhfZGVmYXVsdCA9IGlzTGFzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZmVyZW5jZSA9IE1hdGguYWJzKAogICAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHMod29ya2luZ0xhdGVyRGF0ZSwgZWFybGllckRhdGVfKQogICk7CiAgaWYgKGRpZmZlcmVuY2UgPCAxKSByZXR1cm4gMDsKICBpZiAod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpID09PSAxICYmIHdvcmtpbmdMYXRlckRhdGUuZ2V0RGF0ZSgpID4gMjcpCiAgICB3b3JraW5nTGF0ZXJEYXRlLnNldERhdGUoMzApOwogIHdvcmtpbmdMYXRlckRhdGUuc2V0TW9udGgod29ya2luZ0xhdGVyRGF0ZS5nZXRNb250aCgpIC0gc2lnbiAqIGRpZmZlcmVuY2UpOwogIGxldCBpc0xhc3RNb250aE5vdEZ1bGwgPSBjb21wYXJlQXNjKHdvcmtpbmdMYXRlckRhdGUsIGVhcmxpZXJEYXRlXykgPT09IC1zaWduOwogIGlmIChpc0xhc3REYXlPZk1vbnRoKGxhdGVyRGF0ZV8pICYmIGRpZmZlcmVuY2UgPT09IDEgJiYgY29tcGFyZUFzYyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pID09PSAxKSB7CiAgICBpc0xhc3RNb250aE5vdEZ1bGwgPSBmYWxzZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmZXJlbmNlIC0gK2lzTGFzdE1vbnRoTm90RnVsbCk7CiAgcmV0dXJuIHJlc3VsdCA9PT0gMCA/IDAgOiByZXN1bHQ7Cn0KdmFyIGRpZmZlcmVuY2VJbk1vbnRoc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluTW9udGhzLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfY29tcGFyZUFzYygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocygpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBkaWZmZXJlbmNlSW5Nb250aHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJbk1vbnRoczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5RdWFydGVycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5RdWFydGVycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbk1vbnRocyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSAvIDM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluUXVhcnRlcnNfZGVmYXVsdDsKdmFyIGluaXRfZGlmZmVyZW5jZUluUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGRpZmZlcmVuY2VJblF1YXJ0ZXJzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5TZWNvbmRzLmpzCmZ1bmN0aW9uIGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgLyAxZTM7CiAgcmV0dXJuIGdldFJvdW5kaW5nTWV0aG9kKG9wdGlvbnM/LnJvdW5kaW5nTWV0aG9kKShkaWZmKTsKfQp2YXIgZGlmZmVyZW5jZUluU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2RpZmZlcmVuY2VJblNlY29uZHMuanMiKCkgewogICAgaW5pdF9nZXRSb3VuZGluZ01ldGhvZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaWxsaXNlY29uZHMoKTsKICAgIGRpZmZlcmVuY2VJblNlY29uZHNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZGlmZmVyZW5jZUluV2Vla3MuanMKZnVuY3Rpb24gZGlmZmVyZW5jZUluV2Vla3MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5EYXlzKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIC8gNzsKICByZXR1cm4gZ2V0Um91bmRpbmdNZXRob2Qob3B0aW9ucz8ucm91bmRpbmdNZXRob2QpKGRpZmYpOwp9CnZhciBkaWZmZXJlbmNlSW5XZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5XZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5XZWVrcy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGRpZmZlcmVuY2VJbldlZWtzX2RlZmF1bHQgPSBkaWZmZXJlbmNlSW5XZWVrczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcwpmdW5jdGlvbiBkaWZmZXJlbmNlSW5ZZWFycyhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGNvbnN0IHNpZ24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSk7CiAgbGF0ZXJEYXRlXy5zZXRGdWxsWWVhcigxNTg0KTsKICBlYXJsaWVyRGF0ZV8uc2V0RnVsbFllYXIoMTU4NCk7CiAgY29uc3QgcGFydGlhbCA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSA9PT0gLXNpZ247CiAgY29uc3QgcmVzdWx0ID0gc2lnbiAqIChkaWZmIC0gK3BhcnRpYWwpOwogIHJldHVybiByZXN1bHQgPT09IDAgPyAwIDogcmVzdWx0Owp9CnZhciBkaWZmZXJlbmNlSW5ZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9kaWZmZXJlbmNlSW5ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9kaWZmZXJlbmNlSW5ZZWFycy5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycygpOwogICAgZGlmZmVyZW5jZUluWWVhcnNfZGVmYXVsdCA9IGRpZmZlcmVuY2VJblllYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvbm9ybWFsaXplSW50ZXJ2YWwuanMKZnVuY3Rpb24gbm9ybWFsaXplSW50ZXJ2YWwoY29udGV4dDIsIGludGVydmFsMykgewogIGNvbnN0IFtzdGFydCwgZW5kM10gPSBub3JtYWxpemVEYXRlcyhjb250ZXh0MiwgaW50ZXJ2YWwzLnN0YXJ0LCBpbnRlcnZhbDMuZW5kKTsKICByZXR1cm4geyBzdGFydCwgZW5kOiBlbmQzIH07Cn0KdmFyIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9ub3JtYWxpemVJbnRlcnZhbC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaERheU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaERheU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBsZXQgc3RlcCA9IG9wdGlvbnM/LnN0ZXAgPz8gMTsKICBpZiAoIXN0ZXApIHJldHVybiBbXTsKICBpZiAoc3RlcCA8IDApIHsKICAgIHN0ZXAgPSAtc3RlcDsKICAgIHJldmVyc2VkID0gIXJldmVyc2VkOwogIH0KICBjb25zdCBkYXRlcyA9IFtdOwogIHdoaWxlICgrZGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBkYXRlcy5wdXNoKGNvbnN0cnVjdEZyb20oc3RhcnQsIGRhdGUpKTsKICAgIGRhdGUuc2V0RGF0ZShkYXRlLmdldERhdGUoKSArIHN0ZXApOwogICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hEYXlPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hEYXlPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hEYXlPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaERheU9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hEYXlPZkludGVydmFsOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hIb3VyT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoSG91ck9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBsZXQgcmV2ZXJzZWQgPSArc3RhcnQgPiArZW5kMzsKICBjb25zdCBlbmRUaW1lID0gcmV2ZXJzZWQgPyArc3RhcnQgOiArZW5kMzsKICBjb25zdCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgZGF0ZS5zZXRNaW51dGVzKDAsIDAsIDApOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRIb3VycyhkYXRlLmdldEhvdXJzKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hIb3VyT2ZJbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoSG91ck9mSW50ZXJ2YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaEhvdXJPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaEhvdXJPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoSG91ck9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1pbnV0ZU9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaE1pbnV0ZU9mSW50ZXJ2YWwoaW50ZXJ2YWwzLCBvcHRpb25zKSB7CiAgY29uc3QgeyBzdGFydCwgZW5kOiBlbmQzIH0gPSBub3JtYWxpemVJbnRlcnZhbChvcHRpb25zPy5pbiwgaW50ZXJ2YWwzKTsKICBzdGFydC5zZXRTZWNvbmRzKDAsIDApOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGxldCBkYXRlID0gcmV2ZXJzZWQgPyBlbmQzIDogc3RhcnQ7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlID0gYWRkTWludXRlcyhkYXRlLCBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNaW51dGVPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hNaW51dGVPZkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VhY2hNaW51dGVPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfYWRkTWludXRlcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoTWludXRlT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1pbnV0ZU9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaE1vbnRoT2ZJbnRlcnZhbC5qcwpmdW5jdGlvbiBlYWNoTW9udGhPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3QgZW5kVGltZSA9IHJldmVyc2VkID8gK3N0YXJ0IDogK2VuZDM7CiAgY29uc3QgZGF0ZSA9IHJldmVyc2VkID8gZW5kMyA6IHN0YXJ0OwogIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgZGF0ZS5zZXREYXRlKDEpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZS5zZXRNb250aChkYXRlLmdldE1vbnRoKCkgKyBzdGVwKTsKICB9CiAgcmV0dXJuIHJldmVyc2VkID8gZGF0ZXMucmV2ZXJzZSgpIDogZGF0ZXM7Cn0KdmFyIGVhY2hNb250aE9mSW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfZWFjaE1vbnRoT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoTW9udGhPZkludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplSW50ZXJ2YWwoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgZWFjaE1vbnRoT2ZJbnRlcnZhbF9kZWZhdWx0ID0gZWFjaE1vbnRoT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mUXVhcnRlci5qcwpmdW5jdGlvbiBzdGFydE9mUXVhcnRlcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnRNb250aCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbW9udGggPSBjdXJyZW50TW9udGggLSBjdXJyZW50TW9udGggJSAzOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCAxKTsKICBfZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHN0YXJ0T2ZRdWFydGVyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZRdWFydGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mUXVhcnRlcl9kZWZhdWx0ID0gc3RhcnRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFF1YXJ0ZXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hRdWFydGVyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydE9mUXVhcnRlcihzdGFydCkgOiArc3RhcnRPZlF1YXJ0ZXIoZW5kMyk7CiAgbGV0IGRhdGUgPSByZXZlcnNlZCA/IHN0YXJ0T2ZRdWFydGVyKGVuZDMpIDogc3RhcnRPZlF1YXJ0ZXIoc3RhcnQpOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtkYXRlIDw9IGVuZFRpbWUpIHsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgZGF0ZSkpOwogICAgZGF0ZSA9IGFkZFF1YXJ0ZXJzKGRhdGUsIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFF1YXJ0ZXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoUXVhcnRlck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRRdWFydGVycygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBlYWNoUXVhcnRlck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hRdWFydGVyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgbGV0IHJldmVyc2VkID0gK3N0YXJ0ID4gK2VuZDM7CiAgY29uc3Qgc3RhcnREYXRlV2VlayA9IHJldmVyc2VkID8gc3RhcnRPZldlZWsoZW5kMywgb3B0aW9ucykgOiBzdGFydE9mV2VlayhzdGFydCwgb3B0aW9ucyk7CiAgY29uc3QgZW5kRGF0ZVdlZWsgPSByZXZlcnNlZCA/IHN0YXJ0T2ZXZWVrKHN0YXJ0LCBvcHRpb25zKSA6IHN0YXJ0T2ZXZWVrKGVuZDMsIG9wdGlvbnMpOwogIHN0YXJ0RGF0ZVdlZWsuc2V0SG91cnMoMTUpOwogIGVuZERhdGVXZWVrLnNldEhvdXJzKDE1KTsKICBjb25zdCBlbmRUaW1lID0gK2VuZERhdGVXZWVrLmdldFRpbWUoKTsKICBsZXQgY3VycmVudERhdGUgPSBzdGFydERhdGVXZWVrOwogIGxldCBzdGVwID0gb3B0aW9ucz8uc3RlcCA/PyAxOwogIGlmICghc3RlcCkgcmV0dXJuIFtdOwogIGlmIChzdGVwIDwgMCkgewogICAgc3RlcCA9IC1zdGVwOwogICAgcmV2ZXJzZWQgPSAhcmV2ZXJzZWQ7CiAgfQogIGNvbnN0IGRhdGVzID0gW107CiAgd2hpbGUgKCtjdXJyZW50RGF0ZSA8PSBlbmRUaW1lKSB7CiAgICBjdXJyZW50RGF0ZS5zZXRIb3VycygwKTsKICAgIGRhdGVzLnB1c2goY29uc3RydWN0RnJvbShzdGFydCwgY3VycmVudERhdGUpKTsKICAgIGN1cnJlbnREYXRlID0gYWRkV2Vla3MoY3VycmVudERhdGUsIHN0ZXApOwogICAgY3VycmVudERhdGUuc2V0SG91cnMoMTUpOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFdlZWtPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla09mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9hZGRXZWVrcygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBlYWNoV2Vla09mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hXZWVrT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZkludGVydmFsKGludGVydmFsMywgb3B0aW9ucykgewogIGNvbnN0IHsgc3RhcnQsIGVuZDogZW5kMyB9ID0gbm9ybWFsaXplSW50ZXJ2YWwob3B0aW9ucz8uaW4sIGludGVydmFsMyk7CiAgY29uc3QgZGF0ZUludGVydmFsID0gZWFjaERheU9mSW50ZXJ2YWwoeyBzdGFydCwgZW5kOiBlbmQzIH0sIG9wdGlvbnMpOwogIGNvbnN0IHdlZWtlbmRzID0gW107CiAgbGV0IGluZGV4MiA9IDA7CiAgd2hpbGUgKGluZGV4MiA8IGRhdGVJbnRlcnZhbC5sZW5ndGgpIHsKICAgIGNvbnN0IGRhdGUgPSBkYXRlSW50ZXJ2YWxbaW5kZXgyKytdOwogICAgaWYgKGlzV2Vla2VuZChkYXRlKSkgd2Vla2VuZHMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgfQogIHJldHVybiB3ZWVrZW5kczsKfQp2YXIgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hXZWVrZW5kT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2lzV2Vla2VuZCgpOwogICAgZWFjaFdlZWtlbmRPZkludGVydmFsX2RlZmF1bHQgPSBlYWNoV2Vla2VuZE9mSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1vbnRoLmpzCmZ1bmN0aW9uIHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldERhdGUoMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZNb250aC5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZk1vbnRoX2RlZmF1bHQgPSBzdGFydE9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzCmZ1bmN0aW9uIGVhY2hXZWVrZW5kT2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3Qgc3RhcnQgPSBzdGFydE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mTW9udGgoZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIGVhY2hXZWVrZW5kT2ZJbnRlcnZhbCh7IHN0YXJ0LCBlbmQ6IGVuZDMgfSwgb3B0aW9ucyk7Cn0KdmFyIGVhY2hXZWVrZW5kT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9lYWNoV2Vla2VuZE9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBlYWNoV2Vla2VuZE9mTW9udGhfZGVmYXVsdCA9IGVhY2hXZWVrZW5kT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlllYXIuanMKZnVuY3Rpb24gZW5kT2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgX2RhdGUuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZZZWFyX2RlZmF1bHQgPSBlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlllYXIuanMKZnVuY3Rpb24gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlXy5nZXRGdWxsWWVhcigpLCAwLCAxKTsKICBkYXRlXy5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZWFyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mWWVhcl9kZWZhdWx0ID0gc3RhcnRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMKZnVuY3Rpb24gZWFjaFdlZWtlbmRPZlllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHN0YXJ0ID0gc3RhcnRPZlllYXIoZGF0ZSwgb3B0aW9ucyk7CiAgY29uc3QgZW5kMyA9IGVuZE9mWWVhcihkYXRlLCBvcHRpb25zKTsKICByZXR1cm4gZWFjaFdlZWtlbmRPZkludGVydmFsKHsgc3RhcnQsIGVuZDogZW5kMyB9LCBvcHRpb25zKTsKfQp2YXIgZWFjaFdlZWtlbmRPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZWFjaFdlZWtlbmRPZlllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFdlZWtlbmRPZlllYXIuanMiKCkgewogICAgaW5pdF9lYWNoV2Vla2VuZE9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZZZWFyKCk7CiAgICBlYWNoV2Vla2VuZE9mWWVhcl9kZWZhdWx0ID0gZWFjaFdlZWtlbmRPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZWFjaFllYXJPZkludGVydmFsLmpzCmZ1bmN0aW9uIGVhY2hZZWFyT2ZJbnRlcnZhbChpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGxldCByZXZlcnNlZCA9ICtzdGFydCA+ICtlbmQzOwogIGNvbnN0IGVuZFRpbWUgPSByZXZlcnNlZCA/ICtzdGFydCA6ICtlbmQzOwogIGNvbnN0IGRhdGUgPSByZXZlcnNlZCA/IGVuZDMgOiBzdGFydDsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGRhdGUuc2V0TW9udGgoMCwgMSk7CiAgbGV0IHN0ZXAgPSBvcHRpb25zPy5zdGVwID8/IDE7CiAgaWYgKCFzdGVwKSByZXR1cm4gW107CiAgaWYgKHN0ZXAgPCAwKSB7CiAgICBzdGVwID0gLXN0ZXA7CiAgICByZXZlcnNlZCA9ICFyZXZlcnNlZDsKICB9CiAgY29uc3QgZGF0ZXMgPSBbXTsKICB3aGlsZSAoK2RhdGUgPD0gZW5kVGltZSkgewogICAgZGF0ZXMucHVzaChjb25zdHJ1Y3RGcm9tKHN0YXJ0LCBkYXRlKSk7CiAgICBkYXRlLnNldEZ1bGxZZWFyKGRhdGUuZ2V0RnVsbFllYXIoKSArIHN0ZXApOwogIH0KICByZXR1cm4gcmV2ZXJzZWQgPyBkYXRlcy5yZXZlcnNlKCkgOiBkYXRlczsKfQp2YXIgZWFjaFllYXJPZkludGVydmFsX2RlZmF1bHQ7CnZhciBpbml0X2VhY2hZZWFyT2ZJbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lYWNoWWVhck9mSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVJbnRlcnZhbCgpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBlYWNoWWVhck9mSW50ZXJ2YWxfZGVmYXVsdCA9IGVhY2hZZWFyT2ZJbnRlcnZhbDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkRlY2FkZS5qcwpmdW5jdGlvbiBlbmRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IDkgKyBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICBfZGF0ZS5zZXRGdWxsWWVhcihkZWNhZGUsIDExLCAzMSk7CiAgX2RhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mRGVjYWRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZkRlY2FkZV9kZWZhdWx0ID0gZW5kT2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZIb3VyLmpzCmZ1bmN0aW9uIGVuZE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoNTksIDU5LCA5OTkpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgZW5kT2ZIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZkhvdXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGVuZE9mSG91cl9kZWZhdWx0ID0gZW5kT2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcwpmdW5jdGlvbiBlbmRPZldlZWsoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRheSA9IF9kYXRlLmdldERheSgpOwogIGNvbnN0IGRpZmYgPSAoZGF5IDwgd2Vla1N0YXJ0c09uID8gLTcgOiAwKSArIDYgLSAoZGF5IC0gd2Vla1N0YXJ0c09uKTsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSArIGRpZmYpOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mV2Vlay5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZXZWVrX2RlZmF1bHQgPSBlbmRPZldlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZJU09XZWVrLmpzCmZ1bmN0aW9uIGVuZE9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGVuZE9mV2VlayhkYXRlLCB7IC4uLm9wdGlvbnMsIHdlZWtTdGFydHNPbjogMSB9KTsKfQp2YXIgZW5kT2ZJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWsuanMiKCkgewogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGVuZE9mSVNPV2Vla19kZWZhdWx0ID0gZW5kT2ZJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mSVNPV2Vla1llYXIuanMKZnVuY3Rpb24gZW5kT2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDQpOwogIGZvdXJ0aE9mSmFudWFyeU9mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgX2RhdGUgPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnlPZk5leHRZZWFyLCBvcHRpb25zKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoX2RhdGUuZ2V0TWlsbGlzZWNvbmRzKCkgLSAxKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mSVNPV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZklTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgZW5kT2ZJU09XZWVrWWVhcl9kZWZhdWx0ID0gZW5kT2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBlbmRPZk1pbnV0ZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZk1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZk1pbnV0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZNaW51dGVfZGVmYXVsdCA9IGVuZE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcwpmdW5jdGlvbiBlbmRPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBfZGF0ZS5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgX2RhdGUuc2V0TW9udGgobW9udGgsIDApOwogIF9kYXRlLnNldEhvdXJzKDIzLCA1OSwgNTksIDk5OSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBlbmRPZlF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mUXVhcnRlci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZW5kT2ZRdWFydGVyX2RlZmF1bHQgPSBlbmRPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZTZWNvbmQuanMKZnVuY3Rpb24gZW5kT2ZTZWNvbmQoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXRNaWxsaXNlY29uZHMoOTk5KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGVuZE9mU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2VuZE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mU2Vjb25kLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBlbmRPZlNlY29uZF9kZWZhdWx0ID0gZW5kT2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb2RheS5qcwpmdW5jdGlvbiBlbmRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gZW5kT2ZEYXkoRGF0ZS5ub3coKSwgb3B0aW9ucyk7Cn0KdmFyIGVuZE9mVG9kYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9lbmRPZlRvZGF5LmpzIigpIHsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGVuZE9mVG9kYXlfZGVmYXVsdCA9IGVuZE9mVG9kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZUb21vcnJvdy5qcwpmdW5jdGlvbiBlbmRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgbW9udGgsIGRheSArIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gb3B0aW9ucz8uaW4gPyBvcHRpb25zLmluKGRhdGUpIDogZGF0ZTsKfQp2YXIgZW5kT2ZUb21vcnJvd19kZWZhdWx0Owp2YXIgaW5pdF9lbmRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2VuZE9mVG9tb3Jyb3cuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGVuZE9mVG9tb3Jyb3dfZGVmYXVsdCA9IGVuZE9mVG9tb3Jyb3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMKZnVuY3Rpb24gZW5kT2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKG5vdzIuZ2V0RnVsbFllYXIoKSwgbm93Mi5nZXRNb250aCgpLCBub3cyLmdldERhdGUoKSAtIDEpOwogIGRhdGUuc2V0SG91cnMoMjMsIDU5LCA1OSwgOTk5KTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfZW5kT2ZZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZW5kT2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgZW5kT2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IGVuZE9mWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzCnZhciBmb3JtYXREaXN0YW5jZUxvY2FsZSwgZm9ybWF0RGlzdGFuY2U7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy9fbGliL2Zvcm1hdERpc3RhbmNlLmpzIigpIHsKICAgIGZvcm1hdERpc3RhbmNlTG9jYWxlID0gewogICAgICBsZXNzVGhhblhTZWNvbmRzOiB7CiAgICAgICAgb25lOiAibGVzcyB0aGFuIGEgc2Vjb25kIiwKICAgICAgICBvdGhlcjogImxlc3MgdGhhbiB7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgeFNlY29uZHM6IHsKICAgICAgICBvbmU6ICIxIHNlY29uZCIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gc2Vjb25kcyIKICAgICAgfSwKICAgICAgaGFsZkFNaW51dGU6ICJoYWxmIGEgbWludXRlIiwKICAgICAgbGVzc1RoYW5YTWludXRlczogewogICAgICAgIG9uZTogImxlc3MgdGhhbiBhIG1pbnV0ZSIsCiAgICAgICAgb3RoZXI6ICJsZXNzIHRoYW4ge3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIHhNaW51dGVzOiB7CiAgICAgICAgb25lOiAiMSBtaW51dGUiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IG1pbnV0ZXMiCiAgICAgIH0sCiAgICAgIGFib3V0WEhvdXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSBob3VyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeEhvdXJzOiB7CiAgICAgICAgb25lOiAiMSBob3VyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBob3VycyIKICAgICAgfSwKICAgICAgeERheXM6IHsKICAgICAgICBvbmU6ICIxIGRheSIsCiAgICAgICAgb3RoZXI6ICJ7e2NvdW50fX0gZGF5cyIKICAgICAgfSwKICAgICAgYWJvdXRYV2Vla3M6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIHdlZWsiLAogICAgICAgIG90aGVyOiAiYWJvdXQge3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICB4V2Vla3M6IHsKICAgICAgICBvbmU6ICIxIHdlZWsiLAogICAgICAgIG90aGVyOiAie3tjb3VudH19IHdlZWtzIgogICAgICB9LAogICAgICBhYm91dFhNb250aHM6IHsKICAgICAgICBvbmU6ICJhYm91dCAxIG1vbnRoIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIHhNb250aHM6IHsKICAgICAgICBvbmU6ICIxIG1vbnRoIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSBtb250aHMiCiAgICAgIH0sCiAgICAgIGFib3V0WFllYXJzOiB7CiAgICAgICAgb25lOiAiYWJvdXQgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFib3V0IHt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgeFllYXJzOiB7CiAgICAgICAgb25lOiAiMSB5ZWFyIiwKICAgICAgICBvdGhlcjogInt7Y291bnR9fSB5ZWFycyIKICAgICAgfSwKICAgICAgb3ZlclhZZWFyczogewogICAgICAgIG9uZTogIm92ZXIgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogIm92ZXIge3tjb3VudH19IHllYXJzIgogICAgICB9LAogICAgICBhbG1vc3RYWWVhcnM6IHsKICAgICAgICBvbmU6ICJhbG1vc3QgMSB5ZWFyIiwKICAgICAgICBvdGhlcjogImFsbW9zdCB7e2NvdW50fX0geWVhcnMiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXREaXN0YW5jZSA9ICh0b2tlbiwgY291bnQyLCBvcHRpb25zKSA9PiB7CiAgICAgIGxldCByZXN1bHQ7CiAgICAgIGNvbnN0IHRva2VuVmFsdWUgPSBmb3JtYXREaXN0YW5jZUxvY2FsZVt0b2tlbl07CiAgICAgIGlmICh0eXBlb2YgdG9rZW5WYWx1ZSA9PT0gInN0cmluZyIpIHsKICAgICAgICByZXN1bHQgPSB0b2tlblZhbHVlOwogICAgICB9IGVsc2UgaWYgKGNvdW50MiA9PT0gMSkgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub25lOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCA9IHRva2VuVmFsdWUub3RoZXIucmVwbGFjZSgie3tjb3VudH19IiwgY291bnQyLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGlmIChvcHRpb25zPy5hZGRTdWZmaXgpIHsKICAgICAgICBpZiAob3B0aW9ucy5jb21wYXJpc29uICYmIG9wdGlvbnMuY29tcGFyaXNvbiA+IDApIHsKICAgICAgICAgIHJldHVybiAiaW4gIiArIHJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHJlc3VsdCArICIgYWdvIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRGb3JtYXRMb25nRm4uanMKZnVuY3Rpb24gYnVpbGRGb3JtYXRMb25nRm4oYXJncykgewogIHJldHVybiAob3B0aW9ucyA9IHt9KSA9PiB7CiAgICBjb25zdCB3aWR0aCA9IG9wdGlvbnMud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgIGNvbnN0IGZvcm1hdDIgPSBhcmdzLmZvcm1hdHNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0c1thcmdzLmRlZmF1bHRXaWR0aF07CiAgICByZXR1cm4gZm9ybWF0MjsKICB9Owp9CnZhciBpbml0X2J1aWxkRm9ybWF0TG9uZ0ZuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkRm9ybWF0TG9uZ0ZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzCnZhciBkYXRlRm9ybWF0cywgdGltZUZvcm1hdHMsIGRhdGVUaW1lRm9ybWF0cywgZm9ybWF0TG9uZzsKdmFyIGluaXRfZm9ybWF0TG9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRMb25nLmpzIigpIHsKICAgIGluaXRfYnVpbGRGb3JtYXRMb25nRm4oKTsKICAgIGRhdGVGb3JtYXRzID0gewogICAgICBmdWxsOiAiRUVFRSwgTU1NTSBkbywgeSIsCiAgICAgIGxvbmc6ICJNTU1NIGRvLCB5IiwKICAgICAgbWVkaXVtOiAiTU1NIGQsIHkiLAogICAgICBzaG9ydDogIk1NL2RkL3l5eXkiCiAgICB9OwogICAgdGltZUZvcm1hdHMgPSB7CiAgICAgIGZ1bGw6ICJoOm1tOnNzIGEgenp6eiIsCiAgICAgIGxvbmc6ICJoOm1tOnNzIGEgeiIsCiAgICAgIG1lZGl1bTogImg6bW06c3MgYSIsCiAgICAgIHNob3J0OiAiaDptbSBhIgogICAgfTsKICAgIGRhdGVUaW1lRm9ybWF0cyA9IHsKICAgICAgZnVsbDogInt7ZGF0ZX19ICdhdCcge3t0aW1lfX0iLAogICAgICBsb25nOiAie3tkYXRlfX0gJ2F0JyB7e3RpbWV9fSIsCiAgICAgIG1lZGl1bTogInt7ZGF0ZX19LCB7e3RpbWV9fSIsCiAgICAgIHNob3J0OiAie3tkYXRlfX0sIHt7dGltZX19IgogICAgfTsKICAgIGZvcm1hdExvbmcgPSB7CiAgICAgIGRhdGU6IGJ1aWxkRm9ybWF0TG9uZ0ZuKHsKICAgICAgICBmb3JtYXRzOiBkYXRlRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KSwKICAgICAgdGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IHRpbWVGb3JtYXRzLAogICAgICAgIGRlZmF1bHRXaWR0aDogImZ1bGwiCiAgICAgIH0pLAogICAgICBkYXRlVGltZTogYnVpbGRGb3JtYXRMb25nRm4oewogICAgICAgIGZvcm1hdHM6IGRhdGVUaW1lRm9ybWF0cywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJmdWxsIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcwp2YXIgZm9ybWF0UmVsYXRpdmVMb2NhbGUsIGZvcm1hdFJlbGF0aXZlOwp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9mb3JtYXRSZWxhdGl2ZS5qcyIoKSB7CiAgICBmb3JtYXRSZWxhdGl2ZUxvY2FsZSA9IHsKICAgICAgbGFzdFdlZWs6ICInbGFzdCcgZWVlZSAnYXQnIHAiLAogICAgICB5ZXN0ZXJkYXk6ICIneWVzdGVyZGF5IGF0JyBwIiwKICAgICAgdG9kYXk6ICIndG9kYXkgYXQnIHAiLAogICAgICB0b21vcnJvdzogIid0b21vcnJvdyBhdCcgcCIsCiAgICAgIG5leHRXZWVrOiAiZWVlZSAnYXQnIHAiLAogICAgICBvdGhlcjogIlAiCiAgICB9OwogICAgZm9ybWF0UmVsYXRpdmUgPSAodG9rZW4sIF9kYXRlLCBfYmFzZURhdGUsIF9vcHRpb25zKSA9PiBmb3JtYXRSZWxhdGl2ZUxvY2FsZVt0b2tlbl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzCmZ1bmN0aW9uIGJ1aWxkTG9jYWxpemVGbihhcmdzKSB7CiAgcmV0dXJuICh2YWx1ZTIsIG9wdGlvbnMpID0+IHsKICAgIGNvbnN0IGNvbnRleHQyID0gb3B0aW9ucz8uY29udGV4dCA/IFN0cmluZyhvcHRpb25zLmNvbnRleHQpIDogInN0YW5kYWxvbmUiOwogICAgbGV0IHZhbHVlc0FycmF5OwogICAgaWYgKGNvbnRleHQyID09PSAiZm9ybWF0dGluZyIgJiYgYXJncy5mb3JtYXR0aW5nVmFsdWVzKSB7CiAgICAgIGNvbnN0IGRlZmF1bHRXaWR0aCA9IGFyZ3MuZGVmYXVsdEZvcm1hdHRpbmdXaWR0aCB8fCBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgY29uc3Qgd2lkdGggPSBvcHRpb25zPy53aWR0aCA/IFN0cmluZyhvcHRpb25zLndpZHRoKSA6IGRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLmZvcm1hdHRpbmdWYWx1ZXNbd2lkdGhdIHx8IGFyZ3MuZm9ybWF0dGluZ1ZhbHVlc1tkZWZhdWx0V2lkdGhdOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgZGVmYXVsdFdpZHRoID0gYXJncy5kZWZhdWx0V2lkdGg7CiAgICAgIGNvbnN0IHdpZHRoID0gb3B0aW9ucz8ud2lkdGggPyBTdHJpbmcob3B0aW9ucy53aWR0aCkgOiBhcmdzLmRlZmF1bHRXaWR0aDsKICAgICAgdmFsdWVzQXJyYXkgPSBhcmdzLnZhbHVlc1t3aWR0aF0gfHwgYXJncy52YWx1ZXNbZGVmYXVsdFdpZHRoXTsKICAgIH0KICAgIGNvbnN0IGluZGV4MiA9IGFyZ3MuYXJndW1lbnRDYWxsYmFjayA/IGFyZ3MuYXJndW1lbnRDYWxsYmFjayh2YWx1ZTIpIDogdmFsdWUyOwogICAgcmV0dXJuIHZhbHVlc0FycmF5W2luZGV4Ml07CiAgfTsKfQp2YXIgaW5pdF9idWlsZExvY2FsaXplRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRMb2NhbGl6ZUZuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcwp2YXIgZXJhVmFsdWVzLCBxdWFydGVyVmFsdWVzLCBtb250aFZhbHVlcywgZGF5VmFsdWVzLCBkYXlQZXJpb2RWYWx1ZXMsIGZvcm1hdHRpbmdEYXlQZXJpb2RWYWx1ZXMsIG9yZGluYWxOdW1iZXIsIGxvY2FsaXplOwp2YXIgaW5pdF9sb2NhbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9sb2NhbGl6ZS5qcyIoKSB7CiAgICBpbml0X2J1aWxkTG9jYWxpemVGbigpOwogICAgZXJhVmFsdWVzID0gewogICAgICBuYXJyb3c6IFsiQiIsICJBIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIkJDIiwgIkFEIl0sCiAgICAgIHdpZGU6IFsiQmVmb3JlIENocmlzdCIsICJBbm5vIERvbWluaSJdCiAgICB9OwogICAgcXVhcnRlclZhbHVlcyA9IHsKICAgICAgbmFycm93OiBbIjEiLCAiMiIsICIzIiwgIjQiXSwKICAgICAgYWJicmV2aWF0ZWQ6IFsiUTEiLCAiUTIiLCAiUTMiLCAiUTQiXSwKICAgICAgd2lkZTogWyIxc3QgcXVhcnRlciIsICIybmQgcXVhcnRlciIsICIzcmQgcXVhcnRlciIsICI0dGggcXVhcnRlciJdCiAgICB9OwogICAgbW9udGhWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJKIiwgIkYiLCAiTSIsICJBIiwgIk0iLCAiSiIsICJKIiwgIkEiLCAiUyIsICJPIiwgIk4iLCAiRCJdLAogICAgICBhYmJyZXZpYXRlZDogWwogICAgICAgICJKYW4iLAogICAgICAgICJGZWIiLAogICAgICAgICJNYXIiLAogICAgICAgICJBcHIiLAogICAgICAgICJNYXkiLAogICAgICAgICJKdW4iLAogICAgICAgICJKdWwiLAogICAgICAgICJBdWciLAogICAgICAgICJTZXAiLAogICAgICAgICJPY3QiLAogICAgICAgICJOb3YiLAogICAgICAgICJEZWMiCiAgICAgIF0sCiAgICAgIHdpZGU6IFsKICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgIkZlYnJ1YXJ5IiwKICAgICAgICAiTWFyY2giLAogICAgICAgICJBcHJpbCIsCiAgICAgICAgIk1heSIsCiAgICAgICAgIkp1bmUiLAogICAgICAgICJKdWx5IiwKICAgICAgICAiQXVndXN0IiwKICAgICAgICAiU2VwdGVtYmVyIiwKICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgIk5vdmVtYmVyIiwKICAgICAgICAiRGVjZW1iZXIiCiAgICAgIF0KICAgIH07CiAgICBkYXlWYWx1ZXMgPSB7CiAgICAgIG5hcnJvdzogWyJTIiwgIk0iLCAiVCIsICJXIiwgIlQiLCAiRiIsICJTIl0sCiAgICAgIHNob3J0OiBbIlN1IiwgIk1vIiwgIlR1IiwgIldlIiwgIlRoIiwgIkZyIiwgIlNhIl0sCiAgICAgIGFiYnJldmlhdGVkOiBbIlN1biIsICJNb24iLCAiVHVlIiwgIldlZCIsICJUaHUiLCAiRnJpIiwgIlNhdCJdLAogICAgICB3aWRlOiBbCiAgICAgICAgIlN1bmRheSIsCiAgICAgICAgIk1vbmRheSIsCiAgICAgICAgIlR1ZXNkYXkiLAogICAgICAgICJXZWRuZXNkYXkiLAogICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgIkZyaWRheSIsCiAgICAgICAgIlNhdHVyZGF5IgogICAgICBdCiAgICB9OwogICAgZGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJldmVuaW5nIiwKICAgICAgICBuaWdodDogIm5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAibW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogIm1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAibmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzID0gewogICAgICBuYXJyb3c6IHsKICAgICAgICBhbTogImEiLAogICAgICAgIHBtOiAicCIsCiAgICAgICAgbWlkbmlnaHQ6ICJtaSIsCiAgICAgICAgbm9vbjogIm4iLAogICAgICAgIG1vcm5pbmc6ICJpbiB0aGUgbW9ybmluZyIsCiAgICAgICAgYWZ0ZXJub29uOiAiaW4gdGhlIGFmdGVybm9vbiIsCiAgICAgICAgZXZlbmluZzogImluIHRoZSBldmVuaW5nIiwKICAgICAgICBuaWdodDogImF0IG5pZ2h0IgogICAgICB9LAogICAgICBhYmJyZXZpYXRlZDogewogICAgICAgIGFtOiAiQU0iLAogICAgICAgIHBtOiAiUE0iLAogICAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICAgIG5vb246ICJub29uIiwKICAgICAgICBtb3JuaW5nOiAiaW4gdGhlIG1vcm5pbmciLAogICAgICAgIGFmdGVybm9vbjogImluIHRoZSBhZnRlcm5vb24iLAogICAgICAgIGV2ZW5pbmc6ICJpbiB0aGUgZXZlbmluZyIsCiAgICAgICAgbmlnaHQ6ICJhdCBuaWdodCIKICAgICAgfSwKICAgICAgd2lkZTogewogICAgICAgIGFtOiAiYS5tLiIsCiAgICAgICAgcG06ICJwLm0uIiwKICAgICAgICBtaWRuaWdodDogIm1pZG5pZ2h0IiwKICAgICAgICBub29uOiAibm9vbiIsCiAgICAgICAgbW9ybmluZzogImluIHRoZSBtb3JuaW5nIiwKICAgICAgICBhZnRlcm5vb246ICJpbiB0aGUgYWZ0ZXJub29uIiwKICAgICAgICBldmVuaW5nOiAiaW4gdGhlIGV2ZW5pbmciLAogICAgICAgIG5pZ2h0OiAiYXQgbmlnaHQiCiAgICAgIH0KICAgIH07CiAgICBvcmRpbmFsTnVtYmVyID0gKGRpcnR5TnVtYmVyLCBfb3B0aW9ucykgPT4gewogICAgICBjb25zdCBudW1iZXIyID0gTnVtYmVyKGRpcnR5TnVtYmVyKTsKICAgICAgY29uc3QgcmVtMTAwID0gbnVtYmVyMiAlIDEwMDsKICAgICAgaWYgKHJlbTEwMCA+IDIwIHx8IHJlbTEwMCA8IDEwKSB7CiAgICAgICAgc3dpdGNoIChyZW0xMDAgJSAxMCkgewogICAgICAgICAgY2FzZSAxOgogICAgICAgICAgICByZXR1cm4gbnVtYmVyMiArICJzdCI7CiAgICAgICAgICBjYXNlIDI6CiAgICAgICAgICAgIHJldHVybiBudW1iZXIyICsgIm5kIjsKICAgICAgICAgIGNhc2UgMzoKICAgICAgICAgICAgcmV0dXJuIG51bWJlcjIgKyAicmQiOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVtYmVyMiArICJ0aCI7CiAgICB9OwogICAgbG9jYWxpemUgPSB7CiAgICAgIG9yZGluYWxOdW1iZXIsCiAgICAgIGVyYTogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGVyYVZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIgogICAgICB9KSwKICAgICAgcXVhcnRlcjogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IHF1YXJ0ZXJWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIsCiAgICAgICAgYXJndW1lbnRDYWxsYmFjazogKHF1YXJ0ZXIpID0+IHF1YXJ0ZXIgLSAxCiAgICAgIH0pLAogICAgICBtb250aDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IG1vbnRoVmFsdWVzLAogICAgICAgIGRlZmF1bHRXaWR0aDogIndpZGUiCiAgICAgIH0pLAogICAgICBkYXk6IGJ1aWxkTG9jYWxpemVGbih7CiAgICAgICAgdmFsdWVzOiBkYXlWYWx1ZXMsCiAgICAgICAgZGVmYXVsdFdpZHRoOiAid2lkZSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRMb2NhbGl6ZUZuKHsKICAgICAgICB2YWx1ZXM6IGRheVBlcmlvZFZhbHVlcywKICAgICAgICBkZWZhdWx0V2lkdGg6ICJ3aWRlIiwKICAgICAgICBmb3JtYXR0aW5nVmFsdWVzOiBmb3JtYXR0aW5nRGF5UGVyaW9kVmFsdWVzLAogICAgICAgIGRlZmF1bHRGb3JtYXR0aW5nV2lkdGg6ICJ3aWRlIgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaEZuKGFyZ3MpIHsKICByZXR1cm4gKHN0cmluZzMsIG9wdGlvbnMgPSB7fSkgPT4gewogICAgY29uc3Qgd2lkdGggPSBvcHRpb25zLndpZHRoOwogICAgY29uc3QgbWF0Y2hQYXR0ZXJuID0gd2lkdGggJiYgYXJncy5tYXRjaFBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLm1hdGNoUGF0dGVybnNbYXJncy5kZWZhdWx0TWF0Y2hXaWR0aF07CiAgICBjb25zdCBtYXRjaFJlc3VsdCA9IHN0cmluZzMubWF0Y2gobWF0Y2hQYXR0ZXJuKTsKICAgIGlmICghbWF0Y2hSZXN1bHQpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBtYXRjaGVkU3RyaW5nID0gbWF0Y2hSZXN1bHRbMF07CiAgICBjb25zdCBwYXJzZVBhdHRlcm5zID0gd2lkdGggJiYgYXJncy5wYXJzZVBhdHRlcm5zW3dpZHRoXSB8fCBhcmdzLnBhcnNlUGF0dGVybnNbYXJncy5kZWZhdWx0UGFyc2VXaWR0aF07CiAgICBjb25zdCBrZXkyID0gQXJyYXkuaXNBcnJheShwYXJzZVBhdHRlcm5zKSA/IGZpbmRJbmRleDIocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkgOiAoCiAgICAgIC8vIFtUT0RPXSAtLSBJIGNoYWxsZW5nZSB5b3UgdG8gZml4IHRoZSB0eXBlCiAgICAgIGZpbmRLZXkocGFyc2VQYXR0ZXJucywgKHBhdHRlcm4pID0+IHBhdHRlcm4udGVzdChtYXRjaGVkU3RyaW5nKSkKICAgICk7CiAgICBsZXQgdmFsdWUyOwogICAgdmFsdWUyID0gYXJncy52YWx1ZUNhbGxiYWNrID8gYXJncy52YWx1ZUNhbGxiYWNrKGtleTIpIDoga2V5MjsKICAgIHZhbHVlMiA9IG9wdGlvbnMudmFsdWVDYWxsYmFjayA/ICgKICAgICAgLy8gW1RPRE9dIC0tIEkgY2hhbGxlbmdlIHlvdSB0byBmaXggdGhlIHR5cGUKICAgICAgb3B0aW9ucy52YWx1ZUNhbGxiYWNrKHZhbHVlMikKICAgICkgOiB2YWx1ZTI7CiAgICBjb25zdCByZXN0ID0gc3RyaW5nMy5zbGljZShtYXRjaGVkU3RyaW5nLmxlbmd0aCk7CiAgICByZXR1cm4geyB2YWx1ZTogdmFsdWUyLCByZXN0IH07CiAgfTsKfQpmdW5jdGlvbiBmaW5kS2V5KG9iamVjdCwgcHJlZGljYXRlKSB7CiAgZm9yIChjb25zdCBrZXkyIGluIG9iamVjdCkgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpICYmIHByZWRpY2F0ZShvYmplY3Rba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CmZ1bmN0aW9uIGZpbmRJbmRleDIoYXJyYXksIHByZWRpY2F0ZSkgewogIGZvciAobGV0IGtleTIgPSAwOyBrZXkyIDwgYXJyYXkubGVuZ3RoOyBrZXkyKyspIHsKICAgIGlmIChwcmVkaWNhdGUoYXJyYXlba2V5Ml0pKSB7CiAgICAgIHJldHVybiBrZXkyOwogICAgfQogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2J1aWxkTWF0Y2hGbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvX2xpYi9idWlsZE1hdGNoRm4uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9fbGliL2J1aWxkTWF0Y2hQYXR0ZXJuRm4uanMKZnVuY3Rpb24gYnVpbGRNYXRjaFBhdHRlcm5GbihhcmdzKSB7CiAgcmV0dXJuIChzdHJpbmczLCBvcHRpb25zID0ge30pID0+IHsKICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLm1hdGNoUGF0dGVybik7CiAgICBpZiAoIW1hdGNoUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGNvbnN0IG1hdGNoZWRTdHJpbmcgPSBtYXRjaFJlc3VsdFswXTsKICAgIGNvbnN0IHBhcnNlUmVzdWx0ID0gc3RyaW5nMy5tYXRjaChhcmdzLnBhcnNlUGF0dGVybik7CiAgICBpZiAoIXBhcnNlUmVzdWx0KSByZXR1cm4gbnVsbDsKICAgIGxldCB2YWx1ZTIgPSBhcmdzLnZhbHVlQ2FsbGJhY2sgPyBhcmdzLnZhbHVlQ2FsbGJhY2socGFyc2VSZXN1bHRbMF0pIDogcGFyc2VSZXN1bHRbMF07CiAgICB2YWx1ZTIgPSBvcHRpb25zLnZhbHVlQ2FsbGJhY2sgPyBvcHRpb25zLnZhbHVlQ2FsbGJhY2sodmFsdWUyKSA6IHZhbHVlMjsKICAgIGNvbnN0IHJlc3QgPSBzdHJpbmczLnNsaWNlKG1hdGNoZWRTdHJpbmcubGVuZ3RoKTsKICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIHJlc3QgfTsKICB9Owp9CnZhciBpbml0X2J1aWxkTWF0Y2hQYXR0ZXJuRm4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL19saWIvYnVpbGRNYXRjaFBhdHRlcm5Gbi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbG9jYWxlL2VuLVVTL19saWIvbWF0Y2guanMKdmFyIG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sIHBhcnNlT3JkaW5hbE51bWJlclBhdHRlcm4sIG1hdGNoRXJhUGF0dGVybnMsIHBhcnNlRXJhUGF0dGVybnMsIG1hdGNoUXVhcnRlclBhdHRlcm5zLCBwYXJzZVF1YXJ0ZXJQYXR0ZXJucywgbWF0Y2hNb250aFBhdHRlcm5zLCBwYXJzZU1vbnRoUGF0dGVybnMsIG1hdGNoRGF5UGF0dGVybnMsIHBhcnNlRGF5UGF0dGVybnMsIG1hdGNoRGF5UGVyaW9kUGF0dGVybnMsIHBhcnNlRGF5UGVyaW9kUGF0dGVybnMsIG1hdGNoOwp2YXIgaW5pdF9tYXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMvX2xpYi9tYXRjaC5qcyIoKSB7CiAgICBpbml0X2J1aWxkTWF0Y2hGbigpOwogICAgaW5pdF9idWlsZE1hdGNoUGF0dGVybkZuKCk7CiAgICBtYXRjaE9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL14oXGQrKSh0aHxzdHxuZHxyZCk/L2k7CiAgICBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuID0gL1xkKy9pOwogICAgbWF0Y2hFcmFQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihifGEpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihiXC4/XHM/Y1wuP3xiXC4/XHM/Y1wuP1xzP2VcLj98YVwuP1xzP2RcLj98Y1wuP1xzP2VcLj8pL2ksCiAgICAgIHdpZGU6IC9eKGJlZm9yZSBjaHJpc3R8YmVmb3JlIGNvbW1vbiBlcmF8YW5ubyBkb21pbml8Y29tbW9uIGVyYSkvaQogICAgfTsKICAgIHBhcnNlRXJhUGF0dGVybnMgPSB7CiAgICAgIGFueTogWy9eYi9pLCAvXihhfGMpL2ldCiAgICB9OwogICAgbWF0Y2hRdWFydGVyUGF0dGVybnMgPSB7CiAgICAgIG5hcnJvdzogL15bMTIzNF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9ecVsxMjM0XS9pLAogICAgICB3aWRlOiAvXlsxMjM0XSh0aHxzdHxuZHxyZCk/IHF1YXJ0ZXIvaQogICAgfTsKICAgIHBhcnNlUXVhcnRlclBhdHRlcm5zID0gewogICAgICBhbnk6IFsvMS9pLCAvMi9pLCAvMy9pLCAvNC9pXQogICAgfTsKICAgIG1hdGNoTW9udGhQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXltqZm1hc29uZF0vaSwKICAgICAgYWJicmV2aWF0ZWQ6IC9eKGphbnxmZWJ8bWFyfGFwcnxtYXl8anVufGp1bHxhdWd8c2VwfG9jdHxub3Z8ZGVjKS9pLAogICAgICB3aWRlOiAvXihqYW51YXJ5fGZlYnJ1YXJ5fG1hcmNofGFwcmlsfG1heXxqdW5lfGp1bHl8YXVndXN0fHNlcHRlbWJlcnxvY3RvYmVyfG5vdmVtYmVyfGRlY2VtYmVyKS9pCiAgICB9OwogICAgcGFyc2VNb250aFBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IFsKICAgICAgICAvXmovaSwKICAgICAgICAvXmYvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXm0vaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmovaSwKICAgICAgICAvXmEvaSwKICAgICAgICAvXnMvaSwKICAgICAgICAvXm8vaSwKICAgICAgICAvXm4vaSwKICAgICAgICAvXmQvaQogICAgICBdLAogICAgICBhbnk6IFsKICAgICAgICAvXmphL2ksCiAgICAgICAgL15mL2ksCiAgICAgICAgL15tYXIvaSwKICAgICAgICAvXmFwL2ksCiAgICAgICAgL15tYXkvaSwKICAgICAgICAvXmp1bi9pLAogICAgICAgIC9eanVsL2ksCiAgICAgICAgL15hdS9pLAogICAgICAgIC9ecy9pLAogICAgICAgIC9eby9pLAogICAgICAgIC9ebi9pLAogICAgICAgIC9eZC9pCiAgICAgIF0KICAgIH07CiAgICBtYXRjaERheVBhdHRlcm5zID0gewogICAgICBuYXJyb3c6IC9eW3NtdHdmXS9pLAogICAgICBzaG9ydDogL14oc3V8bW98dHV8d2V8dGh8ZnJ8c2EpL2ksCiAgICAgIGFiYnJldmlhdGVkOiAvXihzdW58bW9ufHR1ZXx3ZWR8dGh1fGZyaXxzYXQpL2ksCiAgICAgIHdpZGU6IC9eKHN1bmRheXxtb25kYXl8dHVlc2RheXx3ZWRuZXNkYXl8dGh1cnNkYXl8ZnJpZGF5fHNhdHVyZGF5KS9pCiAgICB9OwogICAgcGFyc2VEYXlQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiBbL15zL2ksIC9ebS9pLCAvXnQvaSwgL153L2ksIC9edC9pLCAvXmYvaSwgL15zL2ldLAogICAgICBhbnk6IFsvXnN1L2ksIC9ebS9pLCAvXnR1L2ksIC9edy9pLCAvXnRoL2ksIC9eZi9pLCAvXnNhL2ldCiAgICB9OwogICAgbWF0Y2hEYXlQZXJpb2RQYXR0ZXJucyA9IHsKICAgICAgbmFycm93OiAvXihhfHB8bWl8bnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2ksCiAgICAgIGFueTogL14oW2FwXVwuP1xzP21cLj98bWlkbmlnaHR8bm9vbnwoaW4gdGhlfGF0KSAobW9ybmluZ3xhZnRlcm5vb258ZXZlbmluZ3xuaWdodCkpL2kKICAgIH07CiAgICBwYXJzZURheVBlcmlvZFBhdHRlcm5zID0gewogICAgICBhbnk6IHsKICAgICAgICBhbTogL15hL2ksCiAgICAgICAgcG06IC9ecC9pLAogICAgICAgIG1pZG5pZ2h0OiAvXm1pL2ksCiAgICAgICAgbm9vbjogL15uby9pLAogICAgICAgIG1vcm5pbmc6IC9tb3JuaW5nL2ksCiAgICAgICAgYWZ0ZXJub29uOiAvYWZ0ZXJub29uL2ksCiAgICAgICAgZXZlbmluZzogL2V2ZW5pbmcvaSwKICAgICAgICBuaWdodDogL25pZ2h0L2kKICAgICAgfQogICAgfTsKICAgIG1hdGNoID0gewogICAgICBvcmRpbmFsTnVtYmVyOiBidWlsZE1hdGNoUGF0dGVybkZuKHsKICAgICAgICBtYXRjaFBhdHRlcm46IG1hdGNoT3JkaW5hbE51bWJlclBhdHRlcm4sCiAgICAgICAgcGFyc2VQYXR0ZXJuOiBwYXJzZU9yZGluYWxOdW1iZXJQYXR0ZXJuLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6ICh2YWx1ZTIpID0+IHBhcnNlSW50KHZhbHVlMiwgMTApCiAgICAgIH0pLAogICAgICBlcmE6IGJ1aWxkTWF0Y2hGbih7CiAgICAgICAgbWF0Y2hQYXR0ZXJuczogbWF0Y2hFcmFQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlRXJhUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiCiAgICAgIH0pLAogICAgICBxdWFydGVyOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoUXVhcnRlclBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VRdWFydGVyUGF0dGVybnMsCiAgICAgICAgZGVmYXVsdFBhcnNlV2lkdGg6ICJhbnkiLAogICAgICAgIHZhbHVlQ2FsbGJhY2s6IChpbmRleDIpID0+IGluZGV4MiArIDEKICAgICAgfSksCiAgICAgIG1vbnRoOiBidWlsZE1hdGNoRm4oewogICAgICAgIG1hdGNoUGF0dGVybnM6IG1hdGNoTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0TWF0Y2hXaWR0aDogIndpZGUiLAogICAgICAgIHBhcnNlUGF0dGVybnM6IHBhcnNlTW9udGhQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheTogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAid2lkZSIsCiAgICAgICAgcGFyc2VQYXR0ZXJuczogcGFyc2VEYXlQYXR0ZXJucywKICAgICAgICBkZWZhdWx0UGFyc2VXaWR0aDogImFueSIKICAgICAgfSksCiAgICAgIGRheVBlcmlvZDogYnVpbGRNYXRjaEZuKHsKICAgICAgICBtYXRjaFBhdHRlcm5zOiBtYXRjaERheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRNYXRjaFdpZHRoOiAiYW55IiwKICAgICAgICBwYXJzZVBhdHRlcm5zOiBwYXJzZURheVBlcmlvZFBhdHRlcm5zLAogICAgICAgIGRlZmF1bHRQYXJzZVdpZHRoOiAiYW55IgogICAgICB9KQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sb2NhbGUvZW4tVVMuanMKdmFyIGVuVVMsIGVuX1VTX2RlZmF1bHQ7CnZhciBpbml0X2VuX1VTID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xvY2FsZS9lbi1VUy5qcyIoKSB7CiAgICBpbml0X2Zvcm1hdERpc3RhbmNlKCk7CiAgICBpbml0X2Zvcm1hdExvbmcoKTsKICAgIGluaXRfZm9ybWF0UmVsYXRpdmUoKTsKICAgIGluaXRfbG9jYWxpemUoKTsKICAgIGluaXRfbWF0Y2goKTsKICAgIGVuVVMgPSB7CiAgICAgIGNvZGU6ICJlbi1VUyIsCiAgICAgIGZvcm1hdERpc3RhbmNlLAogICAgICBmb3JtYXRMb25nLAogICAgICBmb3JtYXRSZWxhdGl2ZSwKICAgICAgbG9jYWxpemUsCiAgICAgIG1hdGNoLAogICAgICBvcHRpb25zOiB7CiAgICAgICAgd2Vla1N0YXJ0c09uOiAwLAogICAgICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZTogMQogICAgICB9CiAgICB9OwogICAgZW5fVVNfZGVmYXVsdCA9IGVuVVM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzCnZhciBpbml0X2RlZmF1bHRMb2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9kZWZhdWx0TG9jYWxlLmpzIigpIHsKICAgIGluaXRfZW5fVVMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlPZlllYXIuanMKZnVuY3Rpb24gZ2V0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cyhfZGF0ZSwgc3RhcnRPZlllYXIoX2RhdGUpKTsKICBjb25zdCBkYXlPZlllYXIgPSBkaWZmICsgMTsKICByZXR1cm4gZGF5T2ZZZWFyOwp9CnZhciBnZXREYXlPZlllYXJfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheU9mWWVhci5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mWWVhcigpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheU9mWWVhcl9kZWZhdWx0ID0gZ2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWsuanMKZnVuY3Rpb24gZ2V0SVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZklTT1dlZWsoX2RhdGUpIC0gK3N0YXJ0T2ZJU09XZWVrWWVhcihfZGF0ZSk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRJU09XZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mSVNPV2VlaygpOwogICAgaW5pdF9zdGFydE9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRJU09XZWVrX2RlZmF1bHQgPSBnZXRJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzCmZ1bmN0aW9uIGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBmaXJzdFdlZWtDb250YWluc0RhdGUgPSBvcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gb3B0aW9ucz8ubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlPy5vcHRpb25zPy5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gMTsKICBjb25zdCBmaXJzdFdlZWtPZk5leHRZZWFyID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBmaXJzdFdlZWtPZk5leHRZZWFyLnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mTmV4dFllYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZk5leHRZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZOZXh0WWVhciwgb3B0aW9ucyk7CiAgY29uc3QgZmlyc3RXZWVrT2ZUaGlzWWVhciA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZmlyc3RXZWVrT2ZUaGlzWWVhci5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vla09mVGhpc1llYXIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3Qgc3RhcnRPZlRoaXNZZWFyID0gc3RhcnRPZldlZWsoZmlyc3RXZWVrT2ZUaGlzWWVhciwgb3B0aW9ucyk7CiAgaWYgKCtfZGF0ZSA+PSArc3RhcnRPZk5leHRZZWFyKSB7CiAgICByZXR1cm4geWVhciArIDE7CiAgfSBlbHNlIGlmICgrX2RhdGUgPj0gK3N0YXJ0T2ZUaGlzWWVhcikgewogICAgcmV0dXJuIHllYXI7CiAgfSBlbHNlIHsKICAgIHJldHVybiB5ZWFyIC0gMTsKICB9Cn0KdmFyIGdldFdlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtZZWFyX2RlZmF1bHQgPSBnZXRXZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mV2Vla1llYXIuanMKZnVuY3Rpb24gc3RhcnRPZldlZWtZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHllYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih5ZWFyLCAwLCBmaXJzdFdlZWtDb250YWluc0RhdGUpOwogIGZpcnN0V2Vlay5zZXRIb3VycygwLCAwLCAwLCAwKTsKICBjb25zdCBfZGF0ZSA9IHN0YXJ0T2ZXZWVrKGZpcnN0V2Vlaywgb3B0aW9ucyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mV2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZldlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZXZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIHN0YXJ0T2ZXZWVrWWVhcl9kZWZhdWx0ID0gc3RhcnRPZldlZWtZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWsuanMKZnVuY3Rpb24gZ2V0V2VlayhkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGRpZmYgPSArc3RhcnRPZldlZWsoX2RhdGUsIG9wdGlvbnMpIC0gK3N0YXJ0T2ZXZWVrWWVhcihfZGF0ZSwgb3B0aW9ucyk7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2VlaykgKyAxOwp9CnZhciBnZXRXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2dldFdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vlay5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRXZWVrX2RlZmF1bHQgPSBnZXRXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvYWRkTGVhZGluZ1plcm9zLmpzCmZ1bmN0aW9uIGFkZExlYWRpbmdaZXJvcyhudW1iZXIyLCB0YXJnZXRMZW5ndGgpIHsKICBjb25zdCBzaWduID0gbnVtYmVyMiA8IDAgPyAiLSIgOiAiIjsKICBjb25zdCBvdXRwdXQgPSBNYXRoLmFicyhudW1iZXIyKS50b1N0cmluZygpLnBhZFN0YXJ0KHRhcmdldExlbmd0aCwgIjAiKTsKICByZXR1cm4gc2lnbiArIG91dHB1dDsKfQp2YXIgaW5pdF9hZGRMZWFkaW5nWmVyb3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9hZGRMZWFkaW5nWmVyb3MuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xpZ2h0Rm9ybWF0dGVycy5qcwp2YXIgbGlnaHRGb3JtYXR0ZXJzOwp2YXIgaW5pdF9saWdodEZvcm1hdHRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9mb3JtYXQvbGlnaHRGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBsaWdodEZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIFllYXIKICAgICAgeShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IHNpZ25lZFllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgeWVhciA9IHNpZ25lZFllYXIgPiAwID8gc2lnbmVkWWVhciA6IDEgLSBzaWduZWRZZWFyOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3ModG9rZW4gPT09ICJ5eSIgPyB5ZWFyICUgMTAwIDogeWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gTW9udGgKICAgICAgTShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHJldHVybiB0b2tlbiA9PT0gIk0iID8gU3RyaW5nKG1vbnRoICsgMSkgOiBhZGRMZWFkaW5nWmVyb3MobW9udGggKyAxLCAyKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldERhdGUoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYShkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGRhdGUuZ2V0SG91cnMoKSAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJhIjoKICAgICAgICAgIGNhc2UgImFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZS50b1VwcGVyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZVswXTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGRheVBlcmlvZEVudW1WYWx1ZSA9PT0gImFtIiA/ICJhLm0uIiA6ICJwLm0uIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGgoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0SG91cnMoKSAlIDEyIHx8IDEyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBIb3VyIFswLTIzXQogICAgICBIKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldEhvdXJzKCksIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIE1pbnV0ZQogICAgICBtKGRhdGUsIHRva2VuKSB7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXRlLmdldE1pbnV0ZXMoKSwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gU2Vjb25kCiAgICAgIHMoZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGRhdGUuZ2V0U2Vjb25kcygpLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUyhkYXRlLCB0b2tlbikgewogICAgICAgIGNvbnN0IG51bWJlck9mRGlnaXRzID0gdG9rZW4ubGVuZ3RoOwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlLmdldE1pbGxpc2Vjb25kcygpOwogICAgICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgICAgIG1pbGxpc2Vjb25kczIgKiBNYXRoLnBvdygxMCwgbnVtYmVyT2ZEaWdpdHMgLSAzKQogICAgICAgICk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzCmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lU2hvcnQob2Zmc2V0LCBkZWxpbWl0ZXIgPSAiIikgewogIGNvbnN0IHNpZ24gPSBvZmZzZXQgPiAwID8gIi0iIDogIisiOwogIGNvbnN0IGFic09mZnNldCA9IE1hdGguYWJzKG9mZnNldCk7CiAgY29uc3QgaG91cnMgPSBNYXRoLnRydW5jKGFic09mZnNldCAvIDYwKTsKICBjb25zdCBtaW51dGVzID0gYWJzT2Zmc2V0ICUgNjA7CiAgaWYgKG1pbnV0ZXMgPT09IDApIHsKICAgIHJldHVybiBzaWduICsgU3RyaW5nKGhvdXJzKTsKICB9CiAgcmV0dXJuIHNpZ24gKyBTdHJpbmcoaG91cnMpICsgZGVsaW1pdGVyICsgYWRkTGVhZGluZ1plcm9zKG1pbnV0ZXMsIDIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lV2l0aE9wdGlvbmFsTWludXRlcyhvZmZzZXQsIGRlbGltaXRlcikgewogIGlmIChvZmZzZXQgJSA2MCA9PT0gMCkgewogICAgY29uc3Qgc2lnbiA9IG9mZnNldCA+IDAgPyAiLSIgOiAiKyI7CiAgICByZXR1cm4gc2lnbiArIGFkZExlYWRpbmdaZXJvcyhNYXRoLmFicyhvZmZzZXQpIC8gNjAsIDIpOwogIH0KICByZXR1cm4gZm9ybWF0VGltZXpvbmUob2Zmc2V0LCBkZWxpbWl0ZXIpOwp9CmZ1bmN0aW9uIGZvcm1hdFRpbWV6b25lKG9mZnNldCwgZGVsaW1pdGVyID0gIiIpIHsKICBjb25zdCBzaWduID0gb2Zmc2V0ID4gMCA/ICItIiA6ICIrIjsKICBjb25zdCBhYnNPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogIGNvbnN0IGhvdXJzID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzT2Zmc2V0IC8gNjApLCAyKTsKICBjb25zdCBtaW51dGVzID0gYWRkTGVhZGluZ1plcm9zKGFic09mZnNldCAlIDYwLCAyKTsKICByZXR1cm4gc2lnbiArIGhvdXJzICsgZGVsaW1pdGVyICsgbWludXRlczsKfQp2YXIgZGF5UGVyaW9kRW51bSwgZm9ybWF0dGVyczsKdmFyIGluaXRfZm9ybWF0dGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL2Zvcm1hdC9mb3JtYXR0ZXJzLmpzIigpIHsKICAgIGluaXRfZ2V0RGF5T2ZZZWFyKCk7CiAgICBpbml0X2dldElTT1dlZWsoKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF9nZXRXZWVrWWVhcigpOwogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBkYXlQZXJpb2RFbnVtID0gewogICAgICBhbTogImFtIiwKICAgICAgcG06ICJwbSIsCiAgICAgIG1pZG5pZ2h0OiAibWlkbmlnaHQiLAogICAgICBub29uOiAibm9vbiIsCiAgICAgIG1vcm5pbmc6ICJtb3JuaW5nIiwKICAgICAgYWZ0ZXJub29uOiAiYWZ0ZXJub29uIiwKICAgICAgZXZlbmluZzogImV2ZW5pbmciLAogICAgICBuaWdodDogIm5pZ2h0IgogICAgfTsKICAgIGZvcm1hdHRlcnMgPSB7CiAgICAgIC8vIEVyYQogICAgICBHOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZXJhID0gZGF0ZS5nZXRGdWxsWWVhcigpID4gMCA/IDEgOiAwOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIEFELCBCQwogICAgICAgICAgY2FzZSAiRyI6CiAgICAgICAgICBjYXNlICJHRyI6CiAgICAgICAgICBjYXNlICJHR0ciOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSk7CiAgICAgICAgICAvLyBBLCBCCiAgICAgICAgICBjYXNlICJHR0dHRyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZXJhKGVyYSwgeyB3aWR0aDogIm5hcnJvdyIgfSk7CiAgICAgICAgICAvLyBBbm5vIERvbWluaSwgQmVmb3JlIENocmlzdAogICAgICAgICAgY2FzZSAiR0dHRyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmVyYShlcmEsIHsgd2lkdGg6ICJ3aWRlIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFllYXIKICAgICAgeTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInlvIikgewogICAgICAgICAgY29uc3Qgc2lnbmVkWWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICAgIGNvbnN0IHllYXIgPSBzaWduZWRZZWFyID4gMCA/IHNpZ25lZFllYXIgOiAxIC0gc2lnbmVkWWVhcjsKICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcih5ZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy55KGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gTG9jYWwgd2Vlay1udW1iZXJpbmcgeWVhcgogICAgICBZOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2lnbmVkV2Vla1llYXIgPSBnZXRXZWVrWWVhcihkYXRlLCBvcHRpb25zKTsKICAgICAgICBjb25zdCB3ZWVrWWVhciA9IHNpZ25lZFdlZWtZZWFyID4gMCA/IHNpZ25lZFdlZWtZZWFyIDogMSAtIHNpZ25lZFdlZWtZZWFyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIllZIikgewogICAgICAgICAgY29uc3QgdHdvRGlnaXRZZWFyID0gd2Vla1llYXIgJSAxMDA7CiAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHR3b0RpZ2l0WWVhciwgMik7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbiA9PT0gIllvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHdlZWtZZWFyLCB7IHVuaXQ6ICJ5ZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh3ZWVrWWVhciwgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWstbnVtYmVyaW5nIHllYXIKICAgICAgUjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICBjb25zdCBpc29XZWVrWWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUpOwogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2Vla1llYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIEV4dGVuZGVkIHllYXIuIFRoaXMgaXMgYSBzaW5nbGUgbnVtYmVyIGRlc2lnbmF0aW5nIHRoZSB5ZWFyIG9mIHRoaXMgY2FsZW5kYXIgc3lzdGVtLgogICAgICAvLyBUaGUgbWFpbiBkaWZmZXJlbmNlIGJldHdlZW4gYHlgIGFuZCBgdWAgbG9jYWxpemVycyBhcmUgQi5DLiB5ZWFyczoKICAgICAgLy8gfCBZZWFyIHwgYHlgIHwgYHVgIHwKICAgICAgLy8gfC0tLS0tLXwtLS0tLXwtLS0tLXwKICAgICAgLy8gfCBBQyAxIHwgICAxIHwgICAxIHwKICAgICAgLy8gfCBCQyAxIHwgICAxIHwgICAwIHwKICAgICAgLy8gfCBCQyAyIHwgICAyIHwgIC0xIHwKICAgICAgLy8gQWxzbyBgeXlgIGFsd2F5cyByZXR1cm5zIHRoZSBsYXN0IHR3byBkaWdpdHMgb2YgYSB5ZWFyLAogICAgICAvLyB3aGlsZSBgdXVgIHBhZHMgc2luZ2xlIGRpZ2l0IHllYXJzIHRvIDIgY2hhcmFjdGVycyBhbmQgcmV0dXJucyBvdGhlciB5ZWFycyB1bmNoYW5nZWQuCiAgICAgIHU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIFF1YXJ0ZXIKICAgICAgUTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IHF1YXJ0ZXIgPSBNYXRoLmNlaWwoKGRhdGUuZ2V0TW9udGgoKSArIDEpIC8gMyk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcocXVhcnRlcik7CiAgICAgICAgICAvLyAwMSwgMDIsIDAzLCAwNAogICAgICAgICAgY2FzZSAiUVEiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKHF1YXJ0ZXIsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIDNyZCwgNHRoCiAgICAgICAgICBjYXNlICJRbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihxdWFydGVyLCB7IHVuaXQ6ICJxdWFydGVyIiB9KTsKICAgICAgICAgIC8vIFExLCBRMiwgUTMsIFE0CiAgICAgICAgICBjYXNlICJRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQgKG5hcnJvdyBxdWFydGVyOyBjb3VsZCBiZSBub3QgbnVtZXJpY2FsKQogICAgICAgICAgY2FzZSAiUVFRUVEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxc3QgcXVhcnRlciwgMm5kIHF1YXJ0ZXIsIC4uLgogICAgICAgICAgY2FzZSAiUVFRUSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLnF1YXJ0ZXIocXVhcnRlciwgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgcXVhcnRlcgogICAgICBxOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgcXVhcnRlciA9IE1hdGguY2VpbCgoZGF0ZS5nZXRNb250aCgpICsgMSkgLyAzKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0CiAgICAgICAgICBjYXNlICJxIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhxdWFydGVyKTsKICAgICAgICAgIC8vIDAxLCAwMiwgMDMsIDA0CiAgICAgICAgICBjYXNlICJxcSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MocXVhcnRlciwgMik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKHF1YXJ0ZXIsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIucXVhcnRlcihxdWFydGVyLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBNb250aAogICAgICBNOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgbW9udGggPSBkYXRlLmdldE1vbnRoKCk7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuTShkYXRlLCB0b2tlbik7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJNbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihtb250aCArIDEsIHsgdW5pdDogIm1vbnRoIiB9KTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEosIEYsIC4uLiwgRAogICAgICAgICAgY2FzZSAiTU1NTU0iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbW9udGgKICAgICAgTDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IG1vbnRoID0gZGF0ZS5nZXRNb250aCgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkwiOgogICAgICAgICAgICByZXR1cm4gU3RyaW5nKG1vbnRoICsgMSk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhtb250aCArIDEsIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTG8iOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIobW9udGggKyAxLCB7IHVuaXQ6ICJtb250aCIgfSk7CiAgICAgICAgICAvLyBKYW4sIEZlYiwgLi4uLCBEZWMKICAgICAgICAgIGNhc2UgIkxMTCI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIubW9udGgobW9udGgsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5tb250aChtb250aCwgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTExMTCI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm1vbnRoKG1vbnRoLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIHdlZWsgb2YgeWVhcgogICAgICB3OiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgd2VlayA9IGdldFdlZWsoZGF0ZSwgb3B0aW9ucyk7CiAgICAgICAgaWYgKHRva2VuID09PSAid28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIod2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3Mod2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSVNPIHdlZWsgb2YgeWVhcgogICAgICBJOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgaXNvV2VlayA9IGdldElTT1dlZWsoZGF0ZSk7CiAgICAgICAgaWYgKHRva2VuID09PSAiSW8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaXNvV2VlaywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvV2VlaywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gRGF5IG9mIHRoZSBtb250aAogICAgICBkOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgaWYgKHRva2VuID09PSAiZG8iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoZGF0ZS5nZXREYXRlKCksIHsgdW5pdDogImRhdGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLmQoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBEYXkgb2YgeWVhcgogICAgICBEOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgbG9jYWxpemUyKSB7CiAgICAgICAgY29uc3QgZGF5T2ZZZWFyID0gZ2V0RGF5T2ZZZWFyKGRhdGUpOwogICAgICAgIGlmICh0b2tlbiA9PT0gIkRvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRheU9mWWVhciwgeyB1bml0OiAiZGF5T2ZZZWFyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhkYXlPZlllYXIsIHRva2VuLmxlbmd0aCk7CiAgICAgIH0sCiAgICAgIC8vIERheSBvZiB3ZWVrCiAgICAgIEU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIFR1ZQogICAgICAgICAgY2FzZSAiRSI6CiAgICAgICAgICBjYXNlICJFRSI6CiAgICAgICAgICBjYXNlICJFRUUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUCiAgICAgICAgICBjYXNlICJFRUVFRSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiRUVFRUVFIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIExvY2FsIGRheSBvZiB3ZWVrCiAgICAgIGU6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGxvY2FsRGF5T2ZXZWVrID0gKGRheU9mV2VlayAtIG9wdGlvbnMud2Vla1N0YXJ0c09uICsgOCkgJSA3IHx8IDc7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gTnVtZXJpY2FsIHZhbHVlIChOdGggZGF5IG9mIHdlZWsgd2l0aCBjdXJyZW50IGxvY2FsZSBvciB3ZWVrU3RhcnRzT24pCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhsb2NhbERheU9mV2Vlayk7CiAgICAgICAgICAvLyBQYWRkZWQgbnVtZXJpY2FsIHZhbHVlCiAgICAgICAgICBjYXNlICJlZSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MobG9jYWxEYXlPZldlZWssIDIpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJlbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImVlZWVlIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJlZWVlIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gU3RhbmQtYWxvbmUgbG9jYWwgZGF5IG9mIHdlZWsKICAgICAgYzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMiwgb3B0aW9ucykgewogICAgICAgIGNvbnN0IGRheU9mV2VlayA9IGRhdGUuZ2V0RGF5KCk7CiAgICAgICAgY29uc3QgbG9jYWxEYXlPZldlZWsgPSAoZGF5T2ZXZWVrIC0gb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA4KSAlIDcgfHwgNzsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBOdW1lcmljYWwgdmFsdWUgKHNhbWUgYXMgaW4gYGVgKQogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcobG9jYWxEYXlPZldlZWspOwogICAgICAgICAgLy8gUGFkZGVkIG51bWVyaWNhbCB2YWx1ZQogICAgICAgICAgY2FzZSAiY2MiOgogICAgICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGxvY2FsRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgN3RoCiAgICAgICAgICBjYXNlICJjbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihsb2NhbERheU9mV2VlaywgeyB1bml0OiAiZGF5IiB9KTsKICAgICAgICAgIGNhc2UgImNjYyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJjY2NjY2MiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJjY2NjIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gSVNPIGRheSBvZiB3ZWVrCiAgICAgIGk6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBkYXlPZldlZWsgPSBkYXRlLmdldERheSgpOwogICAgICAgIGNvbnN0IGlzb0RheU9mV2VlayA9IGRheU9mV2VlayA9PT0gMCA/IDcgOiBkYXlPZldlZWs7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMgogICAgICAgICAgY2FzZSAiaSI6CiAgICAgICAgICAgIHJldHVybiBTdHJpbmcoaXNvRGF5T2ZXZWVrKTsKICAgICAgICAgIC8vIDAyCiAgICAgICAgICBjYXNlICJpaSI6CiAgICAgICAgICAgIHJldHVybiBhZGRMZWFkaW5nWmVyb3MoaXNvRGF5T2ZXZWVrLCB0b2tlbi5sZW5ndGgpOwogICAgICAgICAgLy8gMm5kCiAgICAgICAgICBjYXNlICJpbyI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIub3JkaW5hbE51bWJlcihpc29EYXlPZldlZWssIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXkoZGF5T2ZXZWVrLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJpaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheShkYXlPZldlZWssIHsKICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdWVzZGF5CiAgICAgICAgICBjYXNlICJpaWlpIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5KGRheU9mV2VlaywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSwKICAgICAgLy8gQU0gb3IgUE0KICAgICAgYTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGNvbnN0IGRheVBlcmlvZEVudW1WYWx1ZSA9IGhvdXJzIC8gMTIgPj0gMSA/ICJwbSIgOiAiYW0iOwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgY2FzZSAiYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGNhc2UgImFhYWFhIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImFhYWEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9LAogICAgICAvLyBBTSwgUE0sIG1pZG5pZ2h0LCBub29uCiAgICAgIGI6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgZGF5UGVyaW9kRW51bVZhbHVlOwogICAgICAgIGlmIChob3VycyA9PT0gMTIpIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubm9vbjsKICAgICAgICB9IGVsc2UgaWYgKGhvdXJzID09PSAwKSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1pZG5pZ2h0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBob3VycyAvIDEyID49IDEgPyAicG0iIDogImFtIjsKICAgICAgICB9CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYiI6CiAgICAgICAgICBjYXNlICJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBsb2NhbGl6ZTIuZGF5UGVyaW9kKGRheVBlcmlvZEVudW1WYWx1ZSwgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY2FzZSAiYmJiYmIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYmJiYiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIGluIHRoZSBtb3JuaW5nLCBpbiB0aGUgYWZ0ZXJub29uLCBpbiB0aGUgZXZlbmluZywgYXQgbmlnaHQKICAgICAgQjogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGNvbnN0IGhvdXJzID0gZGF0ZS5nZXRIb3VycygpOwogICAgICAgIGxldCBkYXlQZXJpb2RFbnVtVmFsdWU7CiAgICAgICAgaWYgKGhvdXJzID49IDE3KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLmV2ZW5pbmc7CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSAxMikgewogICAgICAgICAgZGF5UGVyaW9kRW51bVZhbHVlID0gZGF5UGVyaW9kRW51bS5hZnRlcm5vb247CiAgICAgICAgfSBlbHNlIGlmIChob3VycyA+PSA0KSB7CiAgICAgICAgICBkYXlQZXJpb2RFbnVtVmFsdWUgPSBkYXlQZXJpb2RFbnVtLm1vcm5pbmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGRheVBlcmlvZEVudW1WYWx1ZSA9IGRheVBlcmlvZEVudW0ubmlnaHQ7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5kYXlQZXJpb2QoZGF5UGVyaW9kRW51bVZhbHVlLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLmRheVBlcmlvZChkYXlQZXJpb2RFbnVtVmFsdWUsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzEtMTJdCiAgICAgIGg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJobyIpIHsKICAgICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgICAgaWYgKGhvdXJzID09PSAwKSBob3VycyA9IDEyOwogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpZ2h0Rm9ybWF0dGVycy5oKGRhdGUsIHRva2VuKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMC0yM10KICAgICAgSDogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIkhvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0SG91cnMoKSwgeyB1bml0OiAiaG91ciIgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaWdodEZvcm1hdHRlcnMuSChkYXRlLCB0b2tlbik7CiAgICAgIH0sCiAgICAgIC8vIEhvdXIgWzAtMTFdCiAgICAgIEs6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBsb2NhbGl6ZTIpIHsKICAgICAgICBjb25zdCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKSAlIDEyOwogICAgICAgIGlmICh0b2tlbiA9PT0gIktvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGhvdXJzLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyhob3VycywgdG9rZW4ubGVuZ3RoKTsKICAgICAgfSwKICAgICAgLy8gSG91ciBbMS0yNF0KICAgICAgazogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGxldCBob3VycyA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICBpZiAoaG91cnMgPT09IDApIGhvdXJzID0gMjQ7CiAgICAgICAgaWYgKHRva2VuID09PSAia28iKSB7CiAgICAgICAgICByZXR1cm4gbG9jYWxpemUyLm9yZGluYWxOdW1iZXIoaG91cnMsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKGhvdXJzLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaW51dGUKICAgICAgbTogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gIm1vIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0TWludXRlcygpLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLm0oZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBTZWNvbmQKICAgICAgczogZnVuY3Rpb24oZGF0ZSwgdG9rZW4sIGxvY2FsaXplMikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInNvIikgewogICAgICAgICAgcmV0dXJuIGxvY2FsaXplMi5vcmRpbmFsTnVtYmVyKGRhdGUuZ2V0U2Vjb25kcygpLCB7IHVuaXQ6ICJzZWNvbmQiIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLnMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBGcmFjdGlvbiBvZiBzZWNvbmQKICAgICAgUzogZnVuY3Rpb24oZGF0ZSwgdG9rZW4pIHsKICAgICAgICByZXR1cm4gbGlnaHRGb3JtYXR0ZXJzLlMoZGF0ZSwgdG9rZW4pOwogICAgICB9LAogICAgICAvLyBUaW1lem9uZSAoSVNPLTg2MDEuIElmIG9mZnNldCBpcyAwLCBvdXRwdXQgaXMgYWx3YXlzIGAnWidgKQogICAgICBYOiBmdW5jdGlvbihkYXRlLCB0b2tlbiwgX2xvY2FsaXplKSB7CiAgICAgICAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBkYXRlLmdldFRpbWV6b25lT2Zmc2V0KCk7CiAgICAgICAgaWYgKHRpbWV6b25lT2Zmc2V0ID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIloiOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAiWCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgWFhgCiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYIjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYFhYWGAKICAgICAgICAgIGNhc2UgIlhYWFhYIjoKICAgICAgICAgIGNhc2UgIlhYWCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChJU08tODYwMS4gSWYgb2Zmc2V0IGlzIDAsIG91dHB1dCBpcyBgJyswMDowMCdgIG9yIGVxdWl2YWxlbnQpCiAgICAgIHg6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBIb3VycyBhbmQgb3B0aW9uYWwgbWludXRlcwogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZVdpdGhPcHRpb25hbE1pbnV0ZXModGltZXpvbmVPZmZzZXQpOwogICAgICAgICAgLy8gSG91cnMsIG1pbnV0ZXMgYW5kIG9wdGlvbmFsIHNlY29uZHMgd2l0aG91dCBgOmAgZGVsaW1pdGVyCiAgICAgICAgICAvLyBOb3RlOiBuZWl0aGVyIElTTy04NjAxIG5vciBKYXZhU2NyaXB0IHN1cHBvcnRzIHNlY29uZHMgaW4gdGltZXpvbmUgb2Zmc2V0cwogICAgICAgICAgLy8gc28gdGhpcyB0b2tlbiBhbHdheXMgaGFzIHRoZSBzYW1lIG91dHB1dCBhcyBgeHhgCiAgICAgICAgICBjYXNlICJ4eHh4IjoKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIGZvcm1hdFRpbWV6b25lKHRpbWV6b25lT2Zmc2V0KTsKICAgICAgICAgIC8vIEhvdXJzLCBtaW51dGVzIGFuZCBvcHRpb25hbCBzZWNvbmRzIHdpdGggYDpgIGRlbGltaXRlcgogICAgICAgICAgLy8gTm90ZTogbmVpdGhlciBJU08tODYwMSBub3IgSmF2YVNjcmlwdCBzdXBwb3J0cyBzZWNvbmRzIGluIHRpbWV6b25lIG9mZnNldHMKICAgICAgICAgIC8vIHNvIHRoaXMgdG9rZW4gYWx3YXlzIGhhcyB0aGUgc2FtZSBvdXRwdXQgYXMgYHh4eGAKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgIGNhc2UgInh4eCI6CiAgICAgICAgICAvLyBIb3VycyBhbmQgbWludXRlcyB3aXRoIGA6YCBkZWxpbWl0ZXIKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChHTVQpCiAgICAgIE86IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAiTyI6CiAgICAgICAgICBjYXNlICJPTyI6CiAgICAgICAgICBjYXNlICJPT08iOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAiT09PTyI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFRpbWV6b25lIChzcGVjaWZpYyBub24tbG9jYXRpb24pCiAgICAgIHo6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lem9uZU9mZnNldCA9IGRhdGUuZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBTaG9ydAogICAgICAgICAgY2FzZSAieiI6CiAgICAgICAgICBjYXNlICJ6eiI6CiAgICAgICAgICBjYXNlICJ6enoiOgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZVNob3J0KHRpbWV6b25lT2Zmc2V0LCAiOiIpOwogICAgICAgICAgLy8gTG9uZwogICAgICAgICAgY2FzZSAienp6eiI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gIkdNVCIgKyBmb3JtYXRUaW1lem9uZSh0aW1lem9uZU9mZnNldCwgIjoiKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIC8vIFNlY29uZHMgdGltZXN0YW1wCiAgICAgIHQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICBjb25zdCB0aW1lc3RhbXAyID0gTWF0aC50cnVuYygrZGF0ZSAvIDFlMyk7CiAgICAgICAgcmV0dXJuIGFkZExlYWRpbmdaZXJvcyh0aW1lc3RhbXAyLCB0b2tlbi5sZW5ndGgpOwogICAgICB9LAogICAgICAvLyBNaWxsaXNlY29uZHMgdGltZXN0YW1wCiAgICAgIFQ6IGZ1bmN0aW9uKGRhdGUsIHRva2VuLCBfbG9jYWxpemUpIHsKICAgICAgICByZXR1cm4gYWRkTGVhZGluZ1plcm9zKCtkYXRlLCB0b2tlbi5sZW5ndGgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzCnZhciBkYXRlTG9uZ0Zvcm1hdHRlciwgdGltZUxvbmdGb3JtYXR0ZXIsIGRhdGVUaW1lTG9uZ0Zvcm1hdHRlciwgbG9uZ0Zvcm1hdHRlcnM7CnZhciBpbml0X2xvbmdGb3JtYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL19saWIvZm9ybWF0L2xvbmdGb3JtYXR0ZXJzLmpzIigpIHsKICAgIGRhdGVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIHN3aXRjaCAocGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogInNob3J0IiB9KTsKICAgICAgICBjYXNlICJQUCI6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICBjYXNlICJQUFAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLmRhdGUoeyB3aWR0aDogImxvbmciIH0pOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gZm9ybWF0TG9uZzIuZGF0ZSh7IHdpZHRoOiAiZnVsbCIgfSk7CiAgICAgIH0KICAgIH07CiAgICB0aW1lTG9uZ0Zvcm1hdHRlciA9IChwYXR0ZXJuLCBmb3JtYXRMb25nMikgPT4gewogICAgICBzd2l0Y2ggKHBhdHRlcm4pIHsKICAgICAgICBjYXNlICJwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJzaG9ydCIgfSk7CiAgICAgICAgY2FzZSAicHAiOgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogIm1lZGl1bSIgfSk7CiAgICAgICAgY2FzZSAicHBwIjoKICAgICAgICAgIHJldHVybiBmb3JtYXRMb25nMi50aW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICBjYXNlICJwcHBwIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIGZvcm1hdExvbmcyLnRpbWUoeyB3aWR0aDogImZ1bGwiIH0pOwogICAgICB9CiAgICB9OwogICAgZGF0ZVRpbWVMb25nRm9ybWF0dGVyID0gKHBhdHRlcm4sIGZvcm1hdExvbmcyKSA9PiB7CiAgICAgIGNvbnN0IG1hdGNoUmVzdWx0ID0gcGF0dGVybi5tYXRjaCgvKFArKShwKyk/LykgfHwgW107CiAgICAgIGNvbnN0IGRhdGVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMV07CiAgICAgIGNvbnN0IHRpbWVQYXR0ZXJuID0gbWF0Y2hSZXN1bHRbMl07CiAgICAgIGlmICghdGltZVBhdHRlcm4pIHsKICAgICAgICByZXR1cm4gZGF0ZUxvbmdGb3JtYXR0ZXIocGF0dGVybiwgZm9ybWF0TG9uZzIpOwogICAgICB9CiAgICAgIGxldCBkYXRlVGltZUZvcm1hdDsKICAgICAgc3dpdGNoIChkYXRlUGF0dGVybikgewogICAgICAgIGNhc2UgIlAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAic2hvcnQiIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiUFAiOgogICAgICAgICAgZGF0ZVRpbWVGb3JtYXQgPSBmb3JtYXRMb25nMi5kYXRlVGltZSh7IHdpZHRoOiAibWVkaXVtIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUCI6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJsb25nIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlBQUFAiOgogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBkYXRlVGltZUZvcm1hdCA9IGZvcm1hdExvbmcyLmRhdGVUaW1lKHsgd2lkdGg6ICJmdWxsIiB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHJldHVybiBkYXRlVGltZUZvcm1hdC5yZXBsYWNlKCJ7e2RhdGV9fSIsIGRhdGVMb25nRm9ybWF0dGVyKGRhdGVQYXR0ZXJuLCBmb3JtYXRMb25nMikpLnJlcGxhY2UoInt7dGltZX19IiwgdGltZUxvbmdGb3JtYXR0ZXIodGltZVBhdHRlcm4sIGZvcm1hdExvbmcyKSk7CiAgICB9OwogICAgbG9uZ0Zvcm1hdHRlcnMgPSB7CiAgICAgIHA6IHRpbWVMb25nRm9ybWF0dGVyLAogICAgICBQOiBkYXRlVGltZUxvbmdGb3JtYXR0ZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvX2xpYi9wcm90ZWN0ZWRUb2tlbnMuanMKZnVuY3Rpb24gaXNQcm90ZWN0ZWREYXlPZlllYXJUb2tlbih0b2tlbikgewogIHJldHVybiBkYXlPZlllYXJUb2tlblJFLnRlc3QodG9rZW4pOwp9CmZ1bmN0aW9uIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikgewogIHJldHVybiB3ZWVrWWVhclRva2VuUkUudGVzdCh0b2tlbik7Cn0KZnVuY3Rpb24gd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0MiwgaW5wdXQpIHsKICBjb25zdCBfbWVzc2FnZSA9IG1lc3NhZ2UodG9rZW4sIGZvcm1hdDIsIGlucHV0KTsKICBjb25zb2xlLndhcm4oX21lc3NhZ2UpOwogIGlmICh0aHJvd1Rva2Vucy5pbmNsdWRlcyh0b2tlbikpIHRocm93IG5ldyBSYW5nZUVycm9yKF9tZXNzYWdlKTsKfQpmdW5jdGlvbiBtZXNzYWdlKHRva2VuLCBmb3JtYXQyLCBpbnB1dCkgewogIGNvbnN0IHN1YmplY3QgPSB0b2tlblswXSA9PT0gIlkiID8gInllYXJzIiA6ICJkYXlzIG9mIHRoZSBtb250aCI7CiAgcmV0dXJuIGBVc2UgXGAke3Rva2VuLnRvTG93ZXJDYXNlKCl9XGAgaW5zdGVhZCBvZiBcYCR7dG9rZW59XGAgKGluIFxgJHtmb3JtYXQyfVxgKSBmb3IgZm9ybWF0dGluZyAke3N1YmplY3R9IHRvIHRoZSBpbnB1dCBcYCR7aW5wdXR9XGA7IHNlZTogaHR0cHM6Ly9naXRodWIuY29tL2RhdGUtZm5zL2RhdGUtZm5zL2Jsb2IvbWFzdGVyL2RvY3MvdW5pY29kZVRva2Vucy5tZGA7Cn0KdmFyIGRheU9mWWVhclRva2VuUkUsIHdlZWtZZWFyVG9rZW5SRSwgdGhyb3dUb2tlbnM7CnZhciBpbml0X3Byb3RlY3RlZFRva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9fbGliL3Byb3RlY3RlZFRva2Vucy5qcyIoKSB7CiAgICBkYXlPZlllYXJUb2tlblJFID0gL15EKyQvOwogICAgd2Vla1llYXJUb2tlblJFID0gL15ZKyQvOwogICAgdGhyb3dUb2tlbnMgPSBbIkQiLCAiREQiLCAiWVkiLCAiWVlZWSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdC5qcwpmdW5jdGlvbiBmb3JtYXQoZGF0ZSwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IG9yaWdpbmFsRGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKCFpc1ZhbGlkKG9yaWdpbmFsRGF0ZSkpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgbGV0IHBhcnRzID0gZm9ybWF0U3RyLm1hdGNoKGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICJwIiB8fCBmaXJzdENoYXJhY3RlciA9PT0gIlAiKSB7CiAgICAgIGNvbnN0IGxvbmdGb3JtYXR0ZXIgPSBsb25nRm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl07CiAgICAgIHJldHVybiBsb25nRm9ybWF0dGVyKHN1YnN0cmluZywgbG9jYWxlLmZvcm1hdExvbmcpOwogICAgfQogICAgcmV0dXJuIHN1YnN0cmluZzsKICB9KS5qb2luKCIiKS5tYXRjaChmb3JtYXR0aW5nVG9rZW5zUmVnRXhwKS5tYXAoKHN1YnN0cmluZykgPT4gewogICAgaWYgKHN1YnN0cmluZyA9PT0gIicnIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6ICInIiB9OwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSBzdWJzdHJpbmdbMF07CiAgICBpZiAoZmlyc3RDaGFyYWN0ZXIgPT09ICInIikgewogICAgICByZXR1cm4geyBpc1Rva2VuOiBmYWxzZSwgdmFsdWU6IGNsZWFuRXNjYXBlZFN0cmluZyhzdWJzdHJpbmcpIH07CiAgICB9CiAgICBpZiAoZm9ybWF0dGVyc1tmaXJzdENoYXJhY3Rlcl0pIHsKICAgICAgcmV0dXJuIHsgaXNUb2tlbjogdHJ1ZSwgdmFsdWU6IHN1YnN0cmluZyB9OwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwKSkgewogICAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigKICAgICAgICAiRm9ybWF0IHN0cmluZyBjb250YWlucyBhbiB1bmVzY2FwZWQgbGF0aW4gYWxwaGFiZXQgY2hhcmFjdGVyIGAiICsgZmlyc3RDaGFyYWN0ZXIgKyAiYCIKICAgICAgKTsKICAgIH0KICAgIHJldHVybiB7IGlzVG9rZW46IGZhbHNlLCB2YWx1ZTogc3Vic3RyaW5nIH07CiAgfSk7CiAgaWYgKGxvY2FsZS5sb2NhbGl6ZS5wcmVwcm9jZXNzb3IpIHsKICAgIHBhcnRzID0gbG9jYWxlLmxvY2FsaXplLnByZXByb2Nlc3NvcihvcmlnaW5hbERhdGUsIHBhcnRzKTsKICB9CiAgY29uc3QgZm9ybWF0dGVyT3B0aW9ucyA9IHsKICAgIGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSwKICAgIHdlZWtTdGFydHNPbiwKICAgIGxvY2FsZQogIH07CiAgcmV0dXJuIHBhcnRzLm1hcCgocGFydCkgPT4gewogICAgaWYgKCFwYXJ0LmlzVG9rZW4pIHJldHVybiBwYXJ0LnZhbHVlOwogICAgY29uc3QgdG9rZW4gPSBwYXJ0LnZhbHVlOwogICAgaWYgKCFvcHRpb25zPy51c2VBZGRpdGlvbmFsV2Vla1llYXJUb2tlbnMgJiYgaXNQcm90ZWN0ZWRXZWVrWWVhclRva2VuKHRva2VuKSB8fCAhb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIFN0cmluZyhkYXRlKSk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gZm9ybWF0dGVyc1t0b2tlblswXV07CiAgICByZXR1cm4gZm9ybWF0dGVyMihvcmlnaW5hbERhdGUsIHRva2VuLCBsb2NhbGUubG9jYWxpemUsIGZvcm1hdHRlck9wdGlvbnMpOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZWQgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwKTsKICBpZiAoIW1hdGNoZWQpIHsKICAgIHJldHVybiBpbnB1dDsKICB9CiAgcmV0dXJuIG1hdGNoZWRbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cCwgIiciKTsKfQp2YXIgZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cCwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAsIGVzY2FwZWRTdHJpbmdSZWdFeHAsIGRvdWJsZVF1b3RlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cCwgZm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2Zvcm1hdHRlcnMoKTsKICAgIGluaXRfbG9uZ0Zvcm1hdHRlcnMoKTsKICAgIGluaXRfcHJvdGVjdGVkVG9rZW5zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwID0gL1ArcCt8UCt8cCt8Jyd8JygnJ3xbXiddKSsoJ3wkKXwuL2c7CiAgICBlc2NhcGVkU3RyaW5nUmVnRXhwID0gL14nKFteXSo/KSc/JC87CiAgICBkb3VibGVRdW90ZVJlZ0V4cCA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAgPSAvW2EtekEtWl0vOwogICAgZm9ybWF0X2RlZmF1bHQgPSBmb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2UuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2UyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgbWludXRlc0luQWxtb3N0VHdvRGF5cyA9IDI1MjA7CiAgY29uc3QgY29tcGFyaXNvbiA9IGNvbXBhcmVBc2MobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSk7CiAgaWYgKGlzTmFOKGNvbXBhcmlzb24pKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgY29uc3QgbG9jYWxpemVPcHRpb25zID0gT2JqZWN0LmFzc2lnbih7fSwgb3B0aW9ucywgewogICAgYWRkU3VmZml4OiBvcHRpb25zPy5hZGRTdWZmaXgsCiAgICBjb21wYXJpc29uCiAgfSk7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgLi4uY29tcGFyaXNvbiA+IDAgPyBbZWFybGllckRhdGUsIGxhdGVyRGF0ZV0gOiBbbGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZV0KICApOwogIGNvbnN0IHNlY29uZHMgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgY29uc3Qgb2Zmc2V0SW5TZWNvbmRzID0gKGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMoZWFybGllckRhdGVfKSAtIGdldFRpbWV6b25lT2Zmc2V0SW5NaWxsaXNlY29uZHMobGF0ZXJEYXRlXykpIC8gMWUzOwogIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLnJvdW5kKChzZWNvbmRzIC0gb2Zmc2V0SW5TZWNvbmRzKSAvIDYwKTsKICBsZXQgbW9udGhzMjsKICBpZiAobWludXRlcyA8IDIpIHsKICAgIGlmIChvcHRpb25zPy5pbmNsdWRlU2Vjb25kcykgewogICAgICBpZiAoc2Vjb25kcyA8IDUpIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgNSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgMTApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhTZWNvbmRzIiwgMTAsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSBpZiAoc2Vjb25kcyA8IDIwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YU2Vjb25kcyIsIDIwLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9IGVsc2UgaWYgKHNlY29uZHMgPCA0MCkgewogICAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImhhbGZBTWludXRlIiwgMCwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIGlmIChzZWNvbmRzIDwgNjApIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJsZXNzVGhhblhNaW51dGVzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChtaW51dGVzID09PSAwKSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgibGVzc1RoYW5YTWludXRlcyIsIDEsIGxvY2FsaXplT3B0aW9ucyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCBtaW51dGVzLCBsb2NhbGl6ZU9wdGlvbnMpOwogICAgICB9CiAgICB9CiAgfSBlbHNlIGlmIChtaW51dGVzIDwgNDUpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhNaW51dGVzIiwgbWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCA5MCkgewogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgiYWJvdXRYSG91cnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgY29uc3QgaG91cnMgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyA2MCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhIb3VycyIsIGhvdXJzLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkFsbW9zdFR3b0RheXMpIHsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhEYXlzIiwgMSwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCkgewogICAgY29uc3QgZGF5czIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5EYXkpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieERheXMiLCBkYXlzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKG1pbnV0ZXMgPCBtaW51dGVzSW5Nb250aCAqIDIpIHsKICAgIG1vbnRoczIgPSBNYXRoLnJvdW5kKG1pbnV0ZXMgLyBtaW51dGVzSW5Nb250aCk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJhYm91dFhNb250aHMiLCBtb250aHMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0KICBtb250aHMyID0gZGlmZmVyZW5jZUluTW9udGhzKGVhcmxpZXJEYXRlXywgbGF0ZXJEYXRlXyk7CiAgaWYgKG1vbnRoczIgPCAxMikgewogICAgY29uc3QgbmVhcmVzdE1vbnRoID0gTWF0aC5yb3VuZChtaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1vbnRocyIsIG5lYXJlc3RNb250aCwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgbW9udGhzU2luY2VTdGFydE9mWWVhciA9IG1vbnRoczIgJSAxMjsKICAgIGNvbnN0IHllYXJzID0gTWF0aC50cnVuYyhtb250aHMyIC8gMTIpOwogICAgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCAzKSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFib3V0WFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgICB9IGVsc2UgaWYgKG1vbnRoc1NpbmNlU3RhcnRPZlllYXIgPCA5KSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoIm92ZXJYWWVhcnMiLCB5ZWFycywgbG9jYWxpemVPcHRpb25zKTsKICAgIH0gZWxzZSB7CiAgICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoImFsbW9zdFhZZWFycyIsIHllYXJzICsgMSwgbG9jYWxpemVPcHRpb25zKTsKICAgIH0KICB9Cn0KdmFyIGZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5Nb250aHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgZm9ybWF0RGlzdGFuY2VfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVN0cmljdChsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGNvbXBhcmlzb24gPSBjb21wYXJlQXNjKGxhdGVyRGF0ZSwgZWFybGllckRhdGUpOwogIGlmIChpc05hTihjb21wYXJpc29uKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBsb2NhbGl6ZU9wdGlvbnMgPSBPYmplY3QuYXNzaWduKHt9LCBvcHRpb25zLCB7CiAgICBhZGRTdWZmaXg6IG9wdGlvbnM/LmFkZFN1ZmZpeCwKICAgIGNvbXBhcmlzb24KICB9KTsKICBjb25zdCBbbGF0ZXJEYXRlXywgZWFybGllckRhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICAuLi5jb21wYXJpc29uID4gMCA/IFtlYXJsaWVyRGF0ZSwgbGF0ZXJEYXRlXSA6IFtsYXRlckRhdGUsIGVhcmxpZXJEYXRlXQogICk7CiAgY29uc3Qgcm91bmRpbmdNZXRob2QgPSBnZXRSb3VuZGluZ01ldGhvZChvcHRpb25zPy5yb3VuZGluZ01ldGhvZCA/PyAicm91bmQiKTsKICBjb25zdCBtaWxsaXNlY29uZHMyID0gZWFybGllckRhdGVfLmdldFRpbWUoKSAtIGxhdGVyRGF0ZV8uZ2V0VGltZSgpOwogIGNvbnN0IG1pbnV0ZXMgPSBtaWxsaXNlY29uZHMyIC8gbWlsbGlzZWNvbmRzSW5NaW51dGU7CiAgY29uc3QgdGltZXpvbmVPZmZzZXQgPSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGVhcmxpZXJEYXRlXykgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGxhdGVyRGF0ZV8pOwogIGNvbnN0IGRzdE5vcm1hbGl6ZWRNaW51dGVzID0gKG1pbGxpc2Vjb25kczIgLSB0aW1lem9uZU9mZnNldCkgLyBtaWxsaXNlY29uZHNJbk1pbnV0ZTsKICBjb25zdCBkZWZhdWx0VW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgbGV0IHVuaXQ7CiAgaWYgKCFkZWZhdWx0VW5pdCkgewogICAgaWYgKG1pbnV0ZXMgPCAxKSB7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IDYwKSB7CiAgICAgIHVuaXQgPSAibWludXRlIjsKICAgIH0gZWxzZSBpZiAobWludXRlcyA8IG1pbnV0ZXNJbkRheSkgewogICAgICB1bml0ID0gImhvdXIiOwogICAgfSBlbHNlIGlmIChkc3ROb3JtYWxpemVkTWludXRlcyA8IG1pbnV0ZXNJbk1vbnRoKSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoZHN0Tm9ybWFsaXplZE1pbnV0ZXMgPCBtaW51dGVzSW5ZZWFyKSB7CiAgICAgIHVuaXQgPSAibW9udGgiOwogICAgfSBlbHNlIHsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IGRlZmF1bHRVbml0OwogIH0KICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgIGNvbnN0IHNlY29uZHMgPSByb3VuZGluZ01ldGhvZChtaWxsaXNlY29uZHMyIC8gMWUzKTsKICAgIHJldHVybiBsb2NhbGUuZm9ybWF0RGlzdGFuY2UoInhTZWNvbmRzIiwgc2Vjb25kcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJtaW51dGUiKSB7CiAgICBjb25zdCByb3VuZGVkTWludXRlcyA9IHJvdW5kaW5nTWV0aG9kKG1pbnV0ZXMpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieE1pbnV0ZXMiLCByb3VuZGVkTWludXRlcywgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgY29uc3QgaG91cnMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gNjApOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieEhvdXJzIiwgaG91cnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgY29uc3QgZGF5czIgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJbkRheSk7CiAgICByZXR1cm4gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4RGF5cyIsIGRheXMyLCBsb2NhbGl6ZU9wdGlvbnMpOwogIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgY29uc3QgbW9udGhzMiA9IHJvdW5kaW5nTWV0aG9kKGRzdE5vcm1hbGl6ZWRNaW51dGVzIC8gbWludXRlc0luTW9udGgpOwogICAgcmV0dXJuIG1vbnRoczIgPT09IDEyICYmIGRlZmF1bHRVbml0ICE9PSAibW9udGgiID8gbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4WWVhcnMiLCAxLCBsb2NhbGl6ZU9wdGlvbnMpIDogbG9jYWxlLmZvcm1hdERpc3RhbmNlKCJ4TW9udGhzIiwgbW9udGhzMiwgbG9jYWxpemVPcHRpb25zKTsKICB9IGVsc2UgewogICAgY29uc3QgeWVhcnMgPSByb3VuZGluZ01ldGhvZChkc3ROb3JtYWxpemVkTWludXRlcyAvIG1pbnV0ZXNJblllYXIpOwogICAgcmV0dXJuIGxvY2FsZS5mb3JtYXREaXN0YW5jZSgieFllYXJzIiwgeWVhcnMsIGxvY2FsaXplT3B0aW9ucyk7CiAgfQp9CnZhciBmb3JtYXREaXN0YW5jZVN0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVN0cmljdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXREaXN0YW5jZVN0cmljdC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRMb2NhbGUoKTsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb21wYXJlQXNjKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgZm9ybWF0RGlzdGFuY2VTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlU3RyaWN0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3cuanMKZnVuY3Rpb24gZm9ybWF0RGlzdGFuY2VUb05vdyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGZvcm1hdERpc3RhbmNlMihkYXRlLCBjb25zdHJ1Y3ROb3coZGF0ZSksIG9wdGlvbnMpOwp9CnZhciBmb3JtYXREaXN0YW5jZVRvTm93X2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdERpc3RhbmNlVG9Ob3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdC5qcwpmdW5jdGlvbiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gZm9ybWF0RGlzdGFuY2VTdHJpY3QoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpLCBvcHRpb25zKTsKfQp2YXIgZm9ybWF0RGlzdGFuY2VUb05vd1N0cmljdF9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3QuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3RfZGVmYXVsdCA9IGZvcm1hdERpc3RhbmNlVG9Ob3dTdHJpY3Q7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMKZnVuY3Rpb24gZm9ybWF0RHVyYXRpb24oZHVyYXRpb24sIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IGxvY2FsZSA9IG9wdGlvbnM/LmxvY2FsZSA/PyBkZWZhdWx0T3B0aW9uczIubG9jYWxlID8/IGVuVVM7CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyBkZWZhdWx0Rm9ybWF0OwogIGNvbnN0IHplcm8gPSBvcHRpb25zPy56ZXJvID8/IGZhbHNlOwogIGNvbnN0IGRlbGltaXRlciA9IG9wdGlvbnM/LmRlbGltaXRlciA/PyAiICI7CiAgaWYgKCFsb2NhbGUuZm9ybWF0RGlzdGFuY2UpIHsKICAgIHJldHVybiAiIjsKICB9CiAgY29uc3QgcmVzdWx0ID0gZm9ybWF0Mi5yZWR1Y2UoKGFjYywgdW5pdCkgPT4gewogICAgY29uc3QgdG9rZW4gPSBgeCR7dW5pdC5yZXBsYWNlKC8oXi4pLywgKG02KSA9PiBtNi50b1VwcGVyQ2FzZSgpKX1gOwogICAgY29uc3QgdmFsdWUyID0gZHVyYXRpb25bdW5pdF07CiAgICBpZiAodmFsdWUyICE9PSB2b2lkIDAgJiYgKHplcm8gfHwgZHVyYXRpb25bdW5pdF0pKSB7CiAgICAgIHJldHVybiBhY2MuY29uY2F0KGxvY2FsZS5mb3JtYXREaXN0YW5jZSh0b2tlbiwgdmFsdWUyKSk7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKS5qb2luKGRlbGltaXRlcik7CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZGVmYXVsdEZvcm1hdCwgZm9ybWF0RHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0RHVyYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0RHVyYXRpb24uanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBkZWZhdWx0Rm9ybWF0ID0gWwogICAgICAieWVhcnMiLAogICAgICAibW9udGhzIiwKICAgICAgIndlZWtzIiwKICAgICAgImRheXMiLAogICAgICAiaG91cnMiLAogICAgICAibWludXRlcyIsCiAgICAgICJzZWNvbmRzIgogICAgXTsKICAgIGZvcm1hdER1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXREdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMKZnVuY3Rpb24gZm9ybWF0SVNPKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHsKICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHRpbWUgdmFsdWUiKTsKICB9CiAgY29uc3QgZm9ybWF0MiA9IG9wdGlvbnM/LmZvcm1hdCA/PyAiZXh0ZW5kZWQiOwogIGNvbnN0IHJlcHJlc2VudGF0aW9uID0gb3B0aW9ucz8ucmVwcmVzZW50YXRpb24gPz8gImNvbXBsZXRlIjsKICBsZXQgcmVzdWx0ID0gIiI7CiAgbGV0IHR6T2Zmc2V0ID0gIiI7CiAgY29uc3QgZGF0ZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiLSIgOiAiIjsKICBjb25zdCB0aW1lRGVsaW1pdGVyID0gZm9ybWF0MiA9PT0gImV4dGVuZGVkIiA/ICI6IiA6ICIiOwogIGlmIChyZXByZXNlbnRhdGlvbiAhPT0gInRpbWUiKSB7CiAgICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICAgIGNvbnN0IG1vbnRoID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1vbnRoKCkgKyAxLCAyKTsKICAgIGNvbnN0IHllYXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RnVsbFllYXIoKSwgNCk7CiAgICByZXN1bHQgPSBgJHt5ZWFyfSR7ZGF0ZURlbGltaXRlcn0ke21vbnRofSR7ZGF0ZURlbGltaXRlcn0ke2RheX1gOwogIH0KICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJkYXRlIikgewogICAgY29uc3Qgb2Zmc2V0ID0gZGF0ZV8uZ2V0VGltZXpvbmVPZmZzZXQoKTsKICAgIGlmIChvZmZzZXQgIT09IDApIHsKICAgICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyhvZmZzZXQpOwogICAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgICBjb25zdCBtaW51dGVPZmZzZXQgPSBhZGRMZWFkaW5nWmVyb3MoYWJzb2x1dGVPZmZzZXQgJSA2MCwgMik7CiAgICAgIGNvbnN0IHNpZ24gPSBvZmZzZXQgPCAwID8gIisiIDogIi0iOwogICAgICB0ek9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogICAgfSBlbHNlIHsKICAgICAgdHpPZmZzZXQgPSAiWiI7CiAgICB9CiAgICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEhvdXJzKCksIDIpOwogICAgY29uc3QgbWludXRlID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldE1pbnV0ZXMoKSwgMik7CiAgICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICAgIGNvbnN0IHNlcGFyYXRvciA9IHJlc3VsdCA9PT0gIiIgPyAiIiA6ICJUIjsKICAgIGNvbnN0IHRpbWUgPSBbaG91ciwgbWludXRlLCBzZWNvbmRdLmpvaW4odGltZURlbGltaXRlcik7CiAgICByZXN1bHQgPSBgJHtyZXN1bHR9JHtzZXBhcmF0b3J9JHt0aW1lfSR7dHpPZmZzZXR9YDsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgZm9ybWF0SVNPX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU08uanMiKCkgewogICAgaW5pdF9hZGRMZWFkaW5nWmVyb3MoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU09fZGVmYXVsdCA9IGZvcm1hdElTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzCmZ1bmN0aW9uIGZvcm1hdElTTzkwNzUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZvcm1hdDIgPSBvcHRpb25zPy5mb3JtYXQgPz8gImV4dGVuZGVkIjsKICBjb25zdCByZXByZXNlbnRhdGlvbiA9IG9wdGlvbnM/LnJlcHJlc2VudGF0aW9uID8/ICJjb21wbGV0ZSI7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGNvbnN0IGRhdGVEZWxpbWl0ZXIgPSBmb3JtYXQyID09PSAiZXh0ZW5kZWQiID8gIi0iIDogIiI7CiAgY29uc3QgdGltZURlbGltaXRlciA9IGZvcm1hdDIgPT09ICJleHRlbmRlZCIgPyAiOiIgOiAiIjsKICBpZiAocmVwcmVzZW50YXRpb24gIT09ICJ0aW1lIikgewogICAgY29uc3QgZGF5ID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldERhdGUoKSwgMik7CiAgICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgICBjb25zdCB5ZWFyID0gYWRkTGVhZGluZ1plcm9zKGRhdGVfLmdldEZ1bGxZZWFyKCksIDQpOwogICAgcmVzdWx0ID0gYCR7eWVhcn0ke2RhdGVEZWxpbWl0ZXJ9JHttb250aH0ke2RhdGVEZWxpbWl0ZXJ9JHtkYXl9YDsKICB9CiAgaWYgKHJlcHJlc2VudGF0aW9uICE9PSAiZGF0ZSIpIHsKICAgIGNvbnN0IGhvdXIgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0SG91cnMoKSwgMik7CiAgICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICAgIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRTZWNvbmRzKCksIDIpOwogICAgY29uc3Qgc2VwYXJhdG9yID0gcmVzdWx0ID09PSAiIiA/ICIiIDogIiAiOwogICAgcmVzdWx0ID0gYCR7cmVzdWx0fSR7c2VwYXJhdG9yfSR7aG91cn0ke3RpbWVEZWxpbWl0ZXJ9JHttaW51dGV9JHt0aW1lRGVsaW1pdGVyfSR7c2Vjb25kfWA7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGZvcm1hdElTTzkwNzVfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0SVNPOTA3NSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRJU085MDc1LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRJU085MDc1X2RlZmF1bHQgPSBmb3JtYXRJU085MDc1OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGZvcm1hdElTT0R1cmF0aW9uKGR1cmF0aW9uKSB7CiAgY29uc3QgewogICAgeWVhcnMgPSAwLAogICAgbW9udGhzOiBtb250aHMyID0gMCwKICAgIGRheXM6IGRheXMyID0gMCwKICAgIGhvdXJzID0gMCwKICAgIG1pbnV0ZXMgPSAwLAogICAgc2Vjb25kcyA9IDAKICB9ID0gZHVyYXRpb247CiAgcmV0dXJuIGBQJHt5ZWFyc31ZJHttb250aHMyfU0ke2RheXMyfURUJHtob3Vyc31IJHttaW51dGVzfU0ke3NlY29uZHN9U2A7Cn0KdmFyIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdElTT0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdElTT0R1cmF0aW9uLmpzIigpIHsKICAgIGZvcm1hdElTT0R1cmF0aW9uX2RlZmF1bHQgPSBmb3JtYXRJU09EdXJhdGlvbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzCmZ1bmN0aW9uIGZvcm1hdFJGQzMzMzkoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoIWlzVmFsaWQoZGF0ZV8pKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGNvbnN0IGZyYWN0aW9uRGlnaXRzID0gb3B0aW9ucz8uZnJhY3Rpb25EaWdpdHMgPz8gMDsKICBjb25zdCBkYXkgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0RGF0ZSgpLCAyKTsKICBjb25zdCBtb250aCA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRNb250aCgpICsgMSwgMik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgaG91ciA9IGFkZExlYWRpbmdaZXJvcyhkYXRlXy5nZXRIb3VycygpLCAyKTsKICBjb25zdCBtaW51dGUgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0TWludXRlcygpLCAyKTsKICBjb25zdCBzZWNvbmQgPSBhZGRMZWFkaW5nWmVyb3MoZGF0ZV8uZ2V0U2Vjb25kcygpLCAyKTsKICBsZXQgZnJhY3Rpb25hbFNlY29uZCA9ICIiOwogIGlmIChmcmFjdGlvbkRpZ2l0cyA+IDApIHsKICAgIGNvbnN0IG1pbGxpc2Vjb25kczIgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKTsKICAgIGNvbnN0IGZyYWN0aW9uYWxTZWNvbmRzID0gTWF0aC50cnVuYygKICAgICAgbWlsbGlzZWNvbmRzMiAqIE1hdGgucG93KDEwLCBmcmFjdGlvbkRpZ2l0cyAtIDMpCiAgICApOwogICAgZnJhY3Rpb25hbFNlY29uZCA9ICIuIiArIGFkZExlYWRpbmdaZXJvcyhmcmFjdGlvbmFsU2Vjb25kcywgZnJhY3Rpb25EaWdpdHMpOwogIH0KICBsZXQgb2Zmc2V0ID0gIiI7CiAgY29uc3QgdHpPZmZzZXQgPSBkYXRlXy5nZXRUaW1lem9uZU9mZnNldCgpOwogIGlmICh0ek9mZnNldCAhPT0gMCkgewogICAgY29uc3QgYWJzb2x1dGVPZmZzZXQgPSBNYXRoLmFicyh0ek9mZnNldCk7CiAgICBjb25zdCBob3VyT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKE1hdGgudHJ1bmMoYWJzb2x1dGVPZmZzZXQgLyA2MCksIDIpOwogICAgY29uc3QgbWludXRlT2Zmc2V0ID0gYWRkTGVhZGluZ1plcm9zKGFic29sdXRlT2Zmc2V0ICUgNjAsIDIpOwogICAgY29uc3Qgc2lnbiA9IHR6T2Zmc2V0IDwgMCA/ICIrIiA6ICItIjsKICAgIG9mZnNldCA9IGAke3NpZ259JHtob3VyT2Zmc2V0fToke21pbnV0ZU9mZnNldH1gOwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSAiWiI7CiAgfQogIHJldHVybiBgJHt5ZWFyfS0ke21vbnRofS0ke2RheX1UJHtob3VyfToke21pbnV0ZX06JHtzZWNvbmR9JHtmcmFjdGlvbmFsU2Vjb25kfSR7b2Zmc2V0fWA7Cn0KdmFyIGZvcm1hdFJGQzMzMzlfZGVmYXVsdDsKdmFyIGluaXRfZm9ybWF0UkZDMzMzOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mb3JtYXRSRkMzMzM5LmpzIigpIHsKICAgIGluaXRfYWRkTGVhZGluZ1plcm9zKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXRSRkMzMzM5X2RlZmF1bHQgPSBmb3JtYXRSRkMzMzM5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJGQzcyMzEuanMKZnVuY3Rpb24gZm9ybWF0UkZDNzIzMShkYXRlKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKF9kYXRlKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCBkYXlOYW1lID0gZGF5c1tfZGF0ZS5nZXRVVENEYXkoKV07CiAgY29uc3QgZGF5T2ZNb250aCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENEYXRlKCksIDIpOwogIGNvbnN0IG1vbnRoTmFtZSA9IG1vbnRoc1tfZGF0ZS5nZXRVVENNb250aCgpXTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0VVRDRnVsbFllYXIoKTsKICBjb25zdCBob3VyID0gYWRkTGVhZGluZ1plcm9zKF9kYXRlLmdldFVUQ0hvdXJzKCksIDIpOwogIGNvbnN0IG1pbnV0ZSA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENNaW51dGVzKCksIDIpOwogIGNvbnN0IHNlY29uZCA9IGFkZExlYWRpbmdaZXJvcyhfZGF0ZS5nZXRVVENTZWNvbmRzKCksIDIpOwogIHJldHVybiBgJHtkYXlOYW1lfSwgJHtkYXlPZk1vbnRofSAke21vbnRoTmFtZX0gJHt5ZWFyfSAke2hvdXJ9OiR7bWludXRlfToke3NlY29uZH0gR01UYDsKfQp2YXIgZGF5cywgbW9udGhzLCBmb3JtYXRSRkM3MjMxX2RlZmF1bHQ7CnZhciBpbml0X2Zvcm1hdFJGQzcyMzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UkZDNzIzMS5qcyIoKSB7CiAgICBpbml0X2FkZExlYWRpbmdaZXJvcygpOwogICAgaW5pdF9pc1ZhbGlkKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZGF5cyA9IFsiU3VuIiwgIk1vbiIsICJUdWUiLCAiV2VkIiwgIlRodSIsICJGcmkiLCAiU2F0Il07CiAgICBtb250aHMgPSBbCiAgICAgICJKYW4iLAogICAgICAiRmViIiwKICAgICAgIk1hciIsCiAgICAgICJBcHIiLAogICAgICAiTWF5IiwKICAgICAgIkp1biIsCiAgICAgICJKdWwiLAogICAgICAiQXVnIiwKICAgICAgIlNlcCIsCiAgICAgICJPY3QiLAogICAgICAiTm92IiwKICAgICAgIkRlYyIKICAgIF07CiAgICBmb3JtYXRSRkM3MjMxX2RlZmF1bHQgPSBmb3JtYXRSRkM3MjMxOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2Zvcm1hdFJlbGF0aXZlLmpzCmZ1bmN0aW9uIGZvcm1hdFJlbGF0aXZlMihkYXRlLCBiYXNlRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtkYXRlXywgYmFzZURhdGVfXSA9IG5vcm1hbGl6ZURhdGVzKG9wdGlvbnM/LmluLCBkYXRlLCBiYXNlRGF0ZSk7CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IGRpZmYgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMoZGF0ZV8sIGJhc2VEYXRlXyk7CiAgaWYgKGlzTmFOKGRpZmYpKSB7CiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCB0aW1lIHZhbHVlIik7CiAgfQogIGxldCB0b2tlbjsKICBpZiAoZGlmZiA8IC02KSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfSBlbHNlIGlmIChkaWZmIDwgLTEpIHsKICAgIHRva2VuID0gImxhc3RXZWVrIjsKICB9IGVsc2UgaWYgKGRpZmYgPCAwKSB7CiAgICB0b2tlbiA9ICJ5ZXN0ZXJkYXkiOwogIH0gZWxzZSBpZiAoZGlmZiA8IDEpIHsKICAgIHRva2VuID0gInRvZGF5IjsKICB9IGVsc2UgaWYgKGRpZmYgPCAyKSB7CiAgICB0b2tlbiA9ICJ0b21vcnJvdyI7CiAgfSBlbHNlIGlmIChkaWZmIDwgNykgewogICAgdG9rZW4gPSAibmV4dFdlZWsiOwogIH0gZWxzZSB7CiAgICB0b2tlbiA9ICJvdGhlciI7CiAgfQogIGNvbnN0IGZvcm1hdFN0ciA9IGxvY2FsZS5mb3JtYXRSZWxhdGl2ZSh0b2tlbiwgZGF0ZV8sIGJhc2VEYXRlXywgewogICAgbG9jYWxlLAogICAgd2Vla1N0YXJ0c09uCiAgfSk7CiAgcmV0dXJuIGZvcm1hdChkYXRlXywgZm9ybWF0U3RyLCB7IGxvY2FsZSwgd2Vla1N0YXJ0c09uIH0pOwp9CnZhciBmb3JtYXRSZWxhdGl2ZV9kZWZhdWx0Owp2YXIgaW5pdF9mb3JtYXRSZWxhdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZm9ybWF0UmVsYXRpdmUuanMiKCkgewogICAgaW5pdF9kZWZhdWx0TG9jYWxlKCk7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9mb3JtYXQoKTsKICAgIGZvcm1hdFJlbGF0aXZlX2RlZmF1bHQgPSBmb3JtYXRSZWxhdGl2ZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZnJvbVVuaXhUaW1lLmpzCmZ1bmN0aW9uIGZyb21Vbml4VGltZSh1bml4VGltZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUodW5peFRpbWUgKiAxZTMsIG9wdGlvbnM/LmluKTsKfQp2YXIgZnJvbVVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2Zyb21Vbml4VGltZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9mcm9tVW5peFRpbWUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGZyb21Vbml4VGltZV9kZWZhdWx0ID0gZnJvbVVuaXhUaW1lOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERhdGUuanMKZnVuY3Rpb24gZ2V0RGF0ZShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF0ZSgpOwp9CnZhciBnZXREYXRlX2RlZmF1bHQ7CnZhciBpbml0X2dldERhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF0ZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGF0ZV9kZWZhdWx0ID0gZ2V0RGF0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMKZnVuY3Rpb24gZ2V0RGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKTsKfQp2YXIgZ2V0RGF5X2RlZmF1bHQ7CnZhciBpbml0X2dldERheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheV9kZWZhdWx0ID0gZ2V0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzCmZ1bmN0aW9uIGdldERheXNJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGhJbmRleCA9IF9kYXRlLmdldE1vbnRoKCk7CiAgY29uc3QgbGFzdERheU9mTW9udGgyID0gY29uc3RydWN0RnJvbShfZGF0ZSwgMCk7CiAgbGFzdERheU9mTW9udGgyLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoSW5kZXggKyAxLCAwKTsKICBsYXN0RGF5T2ZNb250aDIuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIGxhc3REYXlPZk1vbnRoMi5nZXREYXRlKCk7Cn0KdmFyIGdldERheXNJbk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERheXNJbk1vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldERheXNJbk1vbnRoX2RlZmF1bHQgPSBnZXREYXlzSW5Nb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0xlYXBZZWFyLmpzCmZ1bmN0aW9uIGlzTGVhcFllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CnZhciBpc0xlYXBZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzTGVhcFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNMZWFwWWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNMZWFwWWVhcl9kZWZhdWx0ID0gaXNMZWFwWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXREYXlzSW5ZZWFyLmpzCmZ1bmN0aW9uIGdldERheXNJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBpZiAoTnVtYmVyLmlzTmFOKCtfZGF0ZSkpIHJldHVybiBOYU47CiAgcmV0dXJuIGlzTGVhcFllYXIoX2RhdGUpID8gMzY2IDogMzY1Owp9CnZhciBnZXREYXlzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldERheXNJblllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGF5c0luWWVhci5qcyIoKSB7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXREYXlzSW5ZZWFyX2RlZmF1bHQgPSBnZXREYXlzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcwpmdW5jdGlvbiBnZXREZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSBNYXRoLmZsb29yKHllYXIgLyAxMCkgKiAxMDsKICByZXR1cm4gZGVjYWRlOwp9CnZhciBnZXREZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldERlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0RGVjYWRlX2RlZmF1bHQgPSBnZXREZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMKZnVuY3Rpb24gZ2V0RGVmYXVsdE9wdGlvbnMyKCkgewogIHJldHVybiBPYmplY3QuYXNzaWduKHt9LCBnZXREZWZhdWx0T3B0aW9ucygpKTsKfQp2YXIgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0RGVmYXVsdE9wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0RGVmYXVsdE9wdGlvbnMuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgZ2V0RGVmYXVsdE9wdGlvbnNfZGVmYXVsdCA9IGdldERlZmF1bHRPcHRpb25zMjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRIb3Vycy5qcwpmdW5jdGlvbiBnZXRIb3VycyhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0SG91cnMoKTsKfQp2YXIgZ2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldEhvdXJzX2RlZmF1bHQgPSBnZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRJU09EYXkuanMKZnVuY3Rpb24gZ2V0SVNPRGF5KGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXkgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpOwogIHJldHVybiBkYXkgPT09IDAgPyA3IDogZGF5Owp9CnZhciBnZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfZ2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT0RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0SVNPRGF5X2RlZmF1bHQgPSBnZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0SVNPV2Vla3NJblllYXIuanMKZnVuY3Rpb24gZ2V0SVNPV2Vla3NJblllYXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IHRoaXNZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IG5leHRZZWFyID0gc3RhcnRPZklTT1dlZWtZZWFyKGFkZFdlZWtzKHRoaXNZZWFyLCA2MCkpOwogIGNvbnN0IGRpZmYgPSArbmV4dFllYXIgLSArdGhpc1llYXI7CiAgcmV0dXJuIE1hdGgucm91bmQoZGlmZiAvIG1pbGxpc2Vjb25kc0luV2Vlayk7Cn0KdmFyIGdldElTT1dlZWtzSW5ZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldElTT1dlZWtzSW5ZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldElTT1dlZWtzSW5ZZWFyLmpzIigpIHsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrWWVhcigpOwogICAgZ2V0SVNPV2Vla3NJblllYXJfZGVmYXVsdCA9IGdldElTT1dlZWtzSW5ZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbGxpc2Vjb25kcy5qcwpmdW5jdGlvbiBnZXRNaWxsaXNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0TWlsbGlzZWNvbmRzKCk7Cn0KdmFyIGdldE1pbGxpc2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaWxsaXNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNaWxsaXNlY29uZHNfZGVmYXVsdCA9IGdldE1pbGxpc2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRNaW51dGVzLmpzCmZ1bmN0aW9uIGdldE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1pbnV0ZXMoKTsKfQp2YXIgZ2V0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9nZXRNaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1pbnV0ZXMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE1pbnV0ZXNfZGVmYXVsdCA9IGdldE1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0TW9udGguanMKZnVuY3Rpb24gZ2V0TW9udGgoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldE1vbnRoKCk7Cn0KdmFyIGdldE1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2dldE1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldE1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRNb250aF9kZWZhdWx0ID0gZ2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMKZnVuY3Rpb24gZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMoaW50ZXJ2YWxMZWZ0LCBpbnRlcnZhbFJpZ2h0KSB7CiAgY29uc3QgW2xlZnRTdGFydCwgbGVmdEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5zdGFydCksCiAgICArdG9EYXRlKGludGVydmFsTGVmdC5lbmQpCiAgXS5zb3J0KChhNSwgYjUpID0+IGE1IC0gYjUpOwogIGNvbnN0IFtyaWdodFN0YXJ0LCByaWdodEVuZF0gPSBbCiAgICArdG9EYXRlKGludGVydmFsUmlnaHQuc3RhcnQpLAogICAgK3RvRGF0ZShpbnRlcnZhbFJpZ2h0LmVuZCkKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgY29uc3QgaXNPdmVybGFwcGluZyA9IGxlZnRTdGFydCA8IHJpZ2h0RW5kICYmIHJpZ2h0U3RhcnQgPCBsZWZ0RW5kOwogIGlmICghaXNPdmVybGFwcGluZykgcmV0dXJuIDA7CiAgY29uc3Qgb3ZlcmxhcExlZnQgPSByaWdodFN0YXJ0IDwgbGVmdFN0YXJ0ID8gbGVmdFN0YXJ0IDogcmlnaHRTdGFydDsKICBjb25zdCBsZWZ0ID0gb3ZlcmxhcExlZnQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBMZWZ0KTsKICBjb25zdCBvdmVybGFwUmlnaHQgPSByaWdodEVuZCA+IGxlZnRFbmQgPyBsZWZ0RW5kIDogcmlnaHRFbmQ7CiAgY29uc3QgcmlnaHQgPSBvdmVybGFwUmlnaHQgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKG92ZXJsYXBSaWdodCk7CiAgcmV0dXJuIE1hdGguY2VpbCgocmlnaHQgLSBsZWZ0KSAvIG1pbGxpc2Vjb25kc0luRGF5KTsKfQp2YXIgZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHNfZGVmYXVsdDsKdmFyIGluaXRfZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0T3ZlcmxhcHBpbmdEYXlzSW5JbnRlcnZhbHMuanMiKCkgewogICAgaW5pdF9nZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzX2RlZmF1bHQgPSBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFsczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRTZWNvbmRzLmpzCmZ1bmN0aW9uIGdldFNlY29uZHMoZGF0ZSkgewogIHJldHVybiB0b0RhdGUoZGF0ZSkuZ2V0U2Vjb25kcygpOwp9CnZhciBnZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2dldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0U2Vjb25kc19kZWZhdWx0ID0gZ2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRUaW1lLmpzCmZ1bmN0aW9uIGdldFRpbWUoZGF0ZSkgewogIHJldHVybiArdG9EYXRlKGRhdGUpOwp9CnZhciBnZXRUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0VGltZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0VGltZV9kZWZhdWx0ID0gZ2V0VGltZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRVbml4VGltZS5qcwpmdW5jdGlvbiBnZXRVbml4VGltZShkYXRlKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoK3RvRGF0ZShkYXRlKSAvIDFlMyk7Cn0KdmFyIGdldFVuaXhUaW1lX2RlZmF1bHQ7CnZhciBpbml0X2dldFVuaXhUaW1lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFVuaXhUaW1lLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBnZXRVbml4VGltZV9kZWZhdWx0ID0gZ2V0VW5peFRpbWU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0V2Vla09mTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla09mTW9udGgoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgY3VycmVudERheU9mTW9udGggPSBnZXREYXRlKHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikpOwogIGlmIChpc05hTihjdXJyZW50RGF5T2ZNb250aCkpIHJldHVybiBOYU47CiAgY29uc3Qgc3RhcnRXZWVrRGF5ID0gZ2V0RGF5KHN0YXJ0T2ZNb250aChkYXRlLCBvcHRpb25zKSk7CiAgbGV0IGxhc3REYXlPZkZpcnN0V2VlayA9IHdlZWtTdGFydHNPbiAtIHN0YXJ0V2Vla0RheTsKICBpZiAobGFzdERheU9mRmlyc3RXZWVrIDw9IDApIGxhc3REYXlPZkZpcnN0V2VlayArPSA3OwogIGNvbnN0IHJlbWFpbmluZ0RheXNBZnRlckZpcnN0V2VlayA9IGN1cnJlbnREYXlPZk1vbnRoIC0gbGFzdERheU9mRmlyc3RXZWVrOwogIHJldHVybiBNYXRoLmNlaWwocmVtYWluaW5nRGF5c0FmdGVyRmlyc3RXZWVrIC8gNykgKyAxOwp9CnZhciBnZXRXZWVrT2ZNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9nZXRXZWVrT2ZNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrT2ZNb250aC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZNb250aCgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGdldFdlZWtPZk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrT2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZNb250aC5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZNb250aChkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IG1vbnRoID0gX2RhdGUuZ2V0TW9udGgoKTsKICBfZGF0ZS5zZXRGdWxsWWVhcihfZGF0ZS5nZXRGdWxsWWVhcigpLCBtb250aCArIDEsIDApOwogIF9kYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiB0b0RhdGUoX2RhdGUsIG9wdGlvbnM/LmluKTsKfQp2YXIgbGFzdERheU9mTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mTW9udGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mTW9udGguanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZk1vbnRoX2RlZmF1bHQgPSBsYXN0RGF5T2ZNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9nZXRXZWVrc0luTW9udGguanMKZnVuY3Rpb24gZ2V0V2Vla3NJbk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBjb250ZXh0RGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgcmV0dXJuIGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoCiAgICBsYXN0RGF5T2ZNb250aChjb250ZXh0RGF0ZSwgb3B0aW9ucyksCiAgICBzdGFydE9mTW9udGgoY29udGV4dERhdGUsIG9wdGlvbnMpLAogICAgb3B0aW9ucwogICkgKyAxOwp9CnZhciBnZXRXZWVrc0luTW9udGhfZGVmYXVsdDsKdmFyIGluaXRfZ2V0V2Vla3NJbk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2dldFdlZWtzSW5Nb250aC5qcyIoKSB7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0V2Vla3NJbk1vbnRoX2RlZmF1bHQgPSBnZXRXZWVrc0luTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcwpmdW5jdGlvbiBnZXRZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXRGdWxsWWVhcigpOwp9CnZhciBnZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2dldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvZ2V0WWVhci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgZ2V0WWVhcl9kZWZhdWx0ID0gZ2V0WWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaWxsaXNlY29uZHMoaG91cnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhob3VycyAqIG1pbGxpc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvTWlsbGlzZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBob3Vyc1RvTWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9NaW51dGVzLmpzCmZ1bmN0aW9uIGhvdXJzVG9NaW51dGVzKGhvdXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMgKiBtaW51dGVzSW5Ib3VyKTsKfQp2YXIgaG91cnNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfaG91cnNUb01pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaG91cnNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGhvdXJzVG9NaW51dGVzX2RlZmF1bHQgPSBob3Vyc1RvTWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9ob3Vyc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBob3Vyc1RvU2Vjb25kcyhob3VycykgewogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzICogc2Vjb25kc0luSG91cik7Cn0KdmFyIGhvdXJzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X2hvdXJzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2hvdXJzVG9TZWNvbmRzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBob3Vyc1RvU2Vjb25kc19kZWZhdWx0ID0gaG91cnNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWwuanMKZnVuY3Rpb24gaW50ZXJ2YWwyKHN0YXJ0LCBlbmQzLCBvcHRpb25zKSB7CiAgY29uc3QgW19zdGFydCwgX2VuZF0gPSBub3JtYWxpemVEYXRlcyhvcHRpb25zPy5pbiwgc3RhcnQsIGVuZDMpOwogIGlmIChpc05hTigrX3N0YXJ0KSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiU3RhcnQgZGF0ZSBpcyBpbnZhbGlkIik7CiAgaWYgKGlzTmFOKCtfZW5kKSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiRW5kIGRhdGUgaXMgaW52YWxpZCIpOwogIGlmIChvcHRpb25zPy5hc3NlcnRQb3NpdGl2ZSAmJiArX3N0YXJ0ID4gK19lbmQpCiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFbmQgZGF0ZSBtdXN0IGJlIGFmdGVyIHN0YXJ0IGRhdGUiKTsKICByZXR1cm4geyBzdGFydDogX3N0YXJ0LCBlbmQ6IF9lbmQgfTsKfQp2YXIgaW50ZXJ2YWxfZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWwyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGludGVydmFsX2RlZmF1bHQgPSBpbnRlcnZhbDI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50ZXJ2YWxUb0R1cmF0aW9uLmpzCmZ1bmN0aW9uIGludGVydmFsVG9EdXJhdGlvbihpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB7IHN0YXJ0LCBlbmQ6IGVuZDMgfSA9IG5vcm1hbGl6ZUludGVydmFsKG9wdGlvbnM/LmluLCBpbnRlcnZhbDMpOwogIGNvbnN0IGR1cmF0aW9uID0ge307CiAgY29uc3QgeWVhcnMgPSBkaWZmZXJlbmNlSW5ZZWFycyhlbmQzLCBzdGFydCk7CiAgaWYgKHllYXJzKSBkdXJhdGlvbi55ZWFycyA9IHllYXJzOwogIGNvbnN0IHJlbWFpbmluZ01vbnRocyA9IGFkZChzdGFydCwgeyB5ZWFyczogZHVyYXRpb24ueWVhcnMgfSk7CiAgY29uc3QgbW9udGhzMiA9IGRpZmZlcmVuY2VJbk1vbnRocyhlbmQzLCByZW1haW5pbmdNb250aHMpOwogIGlmIChtb250aHMyKSBkdXJhdGlvbi5tb250aHMgPSBtb250aHMyOwogIGNvbnN0IHJlbWFpbmluZ0RheXMgPSBhZGQocmVtYWluaW5nTW9udGhzLCB7IG1vbnRoczogZHVyYXRpb24ubW9udGhzIH0pOwogIGNvbnN0IGRheXMyID0gZGlmZmVyZW5jZUluRGF5cyhlbmQzLCByZW1haW5pbmdEYXlzKTsKICBpZiAoZGF5czIpIGR1cmF0aW9uLmRheXMgPSBkYXlzMjsKICBjb25zdCByZW1haW5pbmdIb3VycyA9IGFkZChyZW1haW5pbmdEYXlzLCB7IGRheXM6IGR1cmF0aW9uLmRheXMgfSk7CiAgY29uc3QgaG91cnMgPSBkaWZmZXJlbmNlSW5Ib3VycyhlbmQzLCByZW1haW5pbmdIb3Vycyk7CiAgaWYgKGhvdXJzKSBkdXJhdGlvbi5ob3VycyA9IGhvdXJzOwogIGNvbnN0IHJlbWFpbmluZ01pbnV0ZXMgPSBhZGQocmVtYWluaW5nSG91cnMsIHsgaG91cnM6IGR1cmF0aW9uLmhvdXJzIH0pOwogIGNvbnN0IG1pbnV0ZXMgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGVuZDMsIHJlbWFpbmluZ01pbnV0ZXMpOwogIGlmIChtaW51dGVzKSBkdXJhdGlvbi5taW51dGVzID0gbWludXRlczsKICBjb25zdCByZW1haW5pbmdTZWNvbmRzID0gYWRkKHJlbWFpbmluZ01pbnV0ZXMsIHsgbWludXRlczogZHVyYXRpb24ubWludXRlcyB9KTsKICBjb25zdCBzZWNvbmRzID0gZGlmZmVyZW5jZUluU2Vjb25kcyhlbmQzLCByZW1haW5pbmdTZWNvbmRzKTsKICBpZiAoc2Vjb25kcykgZHVyYXRpb24uc2Vjb25kcyA9IHNlY29uZHM7CiAgcmV0dXJuIGR1cmF0aW9uOwp9CnZhciBpbnRlcnZhbFRvRHVyYXRpb25fZGVmYXVsdDsKdmFyIGluaXRfaW50ZXJ2YWxUb0R1cmF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGVydmFsVG9EdXJhdGlvbi5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZUludGVydmFsKCk7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5EYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblNlY29uZHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluWWVhcnMoKTsKICAgIGludGVydmFsVG9EdXJhdGlvbl9kZWZhdWx0ID0gaW50ZXJ2YWxUb0R1cmF0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMKZnVuY3Rpb24gaW50bEZvcm1hdChkYXRlLCBmb3JtYXRPckxvY2FsZSwgbG9jYWxlT3B0aW9ucykgewogIGxldCBmb3JtYXRPcHRpb25zOwogIGlmIChpc0Zvcm1hdE9wdGlvbnMoZm9ybWF0T3JMb2NhbGUpKSB7CiAgICBmb3JtYXRPcHRpb25zID0gZm9ybWF0T3JMb2NhbGU7CiAgfSBlbHNlIHsKICAgIGxvY2FsZU9wdGlvbnMgPSBmb3JtYXRPckxvY2FsZTsKICB9CiAgcmV0dXJuIG5ldyBJbnRsLkRhdGVUaW1lRm9ybWF0KGxvY2FsZU9wdGlvbnM/LmxvY2FsZSwgZm9ybWF0T3B0aW9ucykuZm9ybWF0KAogICAgdG9EYXRlKGRhdGUpCiAgKTsKfQpmdW5jdGlvbiBpc0Zvcm1hdE9wdGlvbnMob3B0cykgewogIHJldHVybiBvcHRzICE9PSB2b2lkIDAgJiYgISgibG9jYWxlIiBpbiBvcHRzKTsKfQp2YXIgaW50bEZvcm1hdF9kZWZhdWx0Owp2YXIgaW5pdF9pbnRsRm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2ludGxGb3JtYXQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGludGxGb3JtYXRfZGVmYXVsdCA9IGludGxGb3JtYXQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaW50bEZvcm1hdERpc3RhbmNlLmpzCmZ1bmN0aW9uIGludGxGb3JtYXREaXN0YW5jZShsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgbGV0IHZhbHVlMiA9IDA7CiAgbGV0IHVuaXQ7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIGlmICghb3B0aW9ucz8udW5pdCkgewogICAgY29uc3QgZGlmZkluU2Vjb25kcyA9IGRpZmZlcmVuY2VJblNlY29uZHMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbk1pbnV0ZSkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5TZWNvbmRzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAic2Vjb25kIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Ib3VyKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbk1pbnV0ZXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJtaW51dGUiOwogICAgfSBlbHNlIGlmIChNYXRoLmFicyhkaWZmSW5TZWNvbmRzKSA8IHNlY29uZHNJbkRheSAmJiBNYXRoLmFicyhkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKSkgPCAxKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkhvdXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAiaG91ciI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luV2VlayAmJiAodmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykpICYmIE1hdGguYWJzKHZhbHVlMikgPCA3KSB7CiAgICAgIHVuaXQgPSAiZGF5IjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5Nb250aCkgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhcldlZWtzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICAgIHVuaXQgPSAid2VlayI7CiAgICB9IGVsc2UgaWYgKE1hdGguYWJzKGRpZmZJblNlY29uZHMpIDwgc2Vjb25kc0luUXVhcnRlcikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICB1bml0ID0gIm1vbnRoIjsKICAgIH0gZWxzZSBpZiAoTWF0aC5hYnMoZGlmZkluU2Vjb25kcykgPCBzZWNvbmRzSW5ZZWFyKSB7CiAgICAgIGlmIChkaWZmZXJlbmNlSW5DYWxlbmRhclF1YXJ0ZXJzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXykgPCA0KSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAicXVhcnRlciI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgICAgIHVuaXQgPSAieWVhciI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyWWVhcnMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgICAgdW5pdCA9ICJ5ZWFyIjsKICAgIH0KICB9IGVsc2UgewogICAgdW5pdCA9IG9wdGlvbnM/LnVuaXQ7CiAgICBpZiAodW5pdCA9PT0gInNlY29uZCIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluU2Vjb25kcyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAibWludXRlIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5NaW51dGVzKGxhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlXyk7CiAgICB9IGVsc2UgaWYgKHVuaXQgPT09ICJob3VyIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5Ib3VycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAiZGF5IikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIndlZWsiKSB7CiAgICAgIHZhbHVlMiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyV2Vla3MobGF0ZXJEYXRlXywgZWFybGllckRhdGVfKTsKICAgIH0gZWxzZSBpZiAodW5pdCA9PT0gIm1vbnRoIikgewogICAgICB2YWx1ZTIgPSBkaWZmZXJlbmNlSW5DYWxlbmRhck1vbnRocyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAicXVhcnRlciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJRdWFydGVycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfSBlbHNlIGlmICh1bml0ID09PSAieWVhciIpIHsKICAgICAgdmFsdWUyID0gZGlmZmVyZW5jZUluQ2FsZW5kYXJZZWFycyhsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV8pOwogICAgfQogIH0KICBjb25zdCBydGYgPSBuZXcgSW50bC5SZWxhdGl2ZVRpbWVGb3JtYXQob3B0aW9ucz8ubG9jYWxlLCB7CiAgICBudW1lcmljOiAiYXV0byIsCiAgICAuLi5vcHRpb25zCiAgfSk7CiAgcmV0dXJuIHJ0Zi5mb3JtYXQodmFsdWUyLCB1bml0KTsKfQp2YXIgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQ7CnZhciBpbml0X2ludGxGb3JtYXREaXN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbnRsRm9ybWF0RGlzdGFuY2UuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkhvdXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbnV0ZXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluU2Vjb25kcygpOwogICAgaW50bEZvcm1hdERpc3RhbmNlX2RlZmF1bHQgPSBpbnRsRm9ybWF0RGlzdGFuY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNBZnRlci5qcwpmdW5jdGlvbiBpc0FmdGVyKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQWZ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNBZnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0FmdGVyLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0FmdGVyX2RlZmF1bHQgPSBpc0FmdGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzCmZ1bmN0aW9uIGlzQmVmb3JlKGRhdGUsIGRhdGVUb0NvbXBhcmUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8ICt0b0RhdGUoZGF0ZVRvQ29tcGFyZSk7Cn0KdmFyIGlzQmVmb3JlX2RlZmF1bHQ7CnZhciBpbml0X2lzQmVmb3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzQmVmb3JlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0JlZm9yZV9kZWZhdWx0ID0gaXNCZWZvcmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFcXVhbC5qcwpmdW5jdGlvbiBpc0VxdWFsKGxlZnREYXRlLCByaWdodERhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShsZWZ0RGF0ZSkgPT09ICt0b0RhdGUocmlnaHREYXRlKTsKfQp2YXIgaXNFcXVhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc0VxdWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRXF1YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzRXF1YWxfZGVmYXVsdCA9IGlzRXF1YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMKZnVuY3Rpb24gaXNFeGlzdHMoeWVhciwgbW9udGgsIGRheSkgewogIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgZGF5KTsKICByZXR1cm4gZGF0ZS5nZXRGdWxsWWVhcigpID09PSB5ZWFyICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gbW9udGggJiYgZGF0ZS5nZXREYXRlKCkgPT09IGRheTsKfQp2YXIgaXNFeGlzdHNfZGVmYXVsdDsKdmFyIGluaXRfaXNFeGlzdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNFeGlzdHMuanMiKCkgewogICAgaXNFeGlzdHNfZGVmYXVsdCA9IGlzRXhpc3RzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzCmZ1bmN0aW9uIGlzRmlyc3REYXlPZk1vbnRoKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXRlKCkgPT09IDE7Cn0KdmFyIGlzRmlyc3REYXlPZk1vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzRmlyc3REYXlPZk1vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRmlyc3REYXlPZk1vbnRoLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0ZpcnN0RGF5T2ZNb250aF9kZWZhdWx0ID0gaXNGaXJzdERheU9mTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNGcmlkYXkuanMKZnVuY3Rpb24gaXNGcmlkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSA1Owp9CnZhciBpc0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9pc0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNGcmlkYXlfZGVmYXVsdCA9IGlzRnJpZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzCmZ1bmN0aW9uIGlzRnV0dXJlKGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA+IERhdGUubm93KCk7Cn0KdmFyIGlzRnV0dXJlX2RlZmF1bHQ7CnZhciBpbml0X2lzRnV0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzRnV0dXJlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc0Z1dHVyZV9kZWZhdWx0ID0gaXNGdXR1cmU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvdHJhbnNwb3NlLmpzCmZ1bmN0aW9uIHRyYW5zcG9zZShkYXRlLCBjb25zdHJ1Y3RvcikgewogIGNvbnN0IGRhdGVfID0gaXNDb25zdHJ1Y3Rvcihjb25zdHJ1Y3RvcikgPyBuZXcgY29uc3RydWN0b3IoMCkgOiBjb25zdHJ1Y3RGcm9tKGNvbnN0cnVjdG9yLCAwKTsKICBkYXRlXy5zZXRGdWxsWWVhcihkYXRlLmdldEZ1bGxZZWFyKCksIGRhdGUuZ2V0TW9udGgoKSwgZGF0ZS5nZXREYXRlKCkpOwogIGRhdGVfLnNldEhvdXJzKAogICAgZGF0ZS5nZXRIb3VycygpLAogICAgZGF0ZS5nZXRNaW51dGVzKCksCiAgICBkYXRlLmdldFNlY29uZHMoKSwKICAgIGRhdGUuZ2V0TWlsbGlzZWNvbmRzKCkKICApOwogIHJldHVybiBkYXRlXzsKfQpmdW5jdGlvbiBpc0NvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKSB7CiAgcmV0dXJuIHR5cGVvZiBjb25zdHJ1Y3RvciA9PT0gImZ1bmN0aW9uIiAmJiBjb25zdHJ1Y3Rvci5wcm90b3R5cGU/LmNvbnN0cnVjdG9yID09PSBjb25zdHJ1Y3RvcjsKfQp2YXIgdHJhbnNwb3NlX2RlZmF1bHQ7CnZhciBpbml0X3RyYW5zcG9zZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy90cmFuc3Bvc2UuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICB0cmFuc3Bvc2VfZGVmYXVsdCA9IHRyYW5zcG9zZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL1NldHRlci5qcwp2YXIgVElNRVpPTkVfVU5JVF9QUklPUklUWSwgU2V0dGVyLCBWYWx1ZVNldHRlciwgRGF0ZVRpbWV6b25lU2V0dGVyOwp2YXIgaW5pdF9TZXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9TZXR0ZXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RyYW5zcG9zZSgpOwogICAgVElNRVpPTkVfVU5JVF9QUklPUklUWSA9IDEwOwogICAgU2V0dGVyID0gY2xhc3MgewogICAgICBzdWJQcmlvcml0eSA9IDA7CiAgICAgIHZhbGlkYXRlKF91dGNEYXRlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogICAgVmFsdWVTZXR0ZXIgPSBjbGFzcyBleHRlbmRzIFNldHRlciB7CiAgICAgIGNvbnN0cnVjdG9yKHZhbHVlMiwgdmFsaWRhdGVWYWx1ZSwgc2V0VmFsdWUsIHByaW9yaXR5LCBzdWJQcmlvcml0eSkgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgICB0aGlzLnZhbGlkYXRlVmFsdWUgPSB2YWxpZGF0ZVZhbHVlOwogICAgICAgIHRoaXMuc2V0VmFsdWUgPSBzZXRWYWx1ZTsKICAgICAgICB0aGlzLnByaW9yaXR5ID0gcHJpb3JpdHk7CiAgICAgICAgaWYgKHN1YlByaW9yaXR5KSB7CiAgICAgICAgICB0aGlzLnN1YlByaW9yaXR5ID0gc3ViUHJpb3JpdHk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gdGhpcy52YWxpZGF0ZVZhbHVlKGRhdGUsIHRoaXMudmFsdWUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBmbGFncywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLnNldFZhbHVlKGRhdGUsIGZsYWdzLCB0aGlzLnZhbHVlLCBvcHRpb25zKTsKICAgICAgfQogICAgfTsKICAgIERhdGVUaW1lem9uZVNldHRlciA9IGNsYXNzIGV4dGVuZHMgU2V0dGVyIHsKICAgICAgcHJpb3JpdHkgPSBUSU1FWk9ORV9VTklUX1BSSU9SSVRZOwogICAgICBzdWJQcmlvcml0eSA9IC0xOwogICAgICBjb25zdHJ1Y3Rvcihjb250ZXh0MiwgcmVmZXJlbmNlKSB7CiAgICAgICAgc3VwZXIoKTsKICAgICAgICB0aGlzLmNvbnRleHQgPSBjb250ZXh0MiB8fCAoKGRhdGUpID0+IGNvbnN0cnVjdEZyb20ocmVmZXJlbmNlLCBkYXRlKSk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzKSB7CiAgICAgICAgaWYgKGZsYWdzLnRpbWVzdGFtcElzU2V0KSByZXR1cm4gZGF0ZTsKICAgICAgICByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCB0cmFuc3Bvc2UoZGF0ZSwgdGhpcy5jb250ZXh0KSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9QYXJzZXIuanMKdmFyIFBhcnNlcjsKdmFyIGluaXRfUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvUGFyc2VyLmpzIigpIHsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBQYXJzZXIgPSBjbGFzcyB7CiAgICAgIHJ1bihkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gdGhpcy5wYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKTsKICAgICAgICBpZiAoIXJlc3VsdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7CiAgICAgICAgICBzZXR0ZXI6IG5ldyBWYWx1ZVNldHRlcigKICAgICAgICAgICAgcmVzdWx0LnZhbHVlLAogICAgICAgICAgICB0aGlzLnZhbGlkYXRlLAogICAgICAgICAgICB0aGlzLnNldCwKICAgICAgICAgICAgdGhpcy5wcmlvcml0eSwKICAgICAgICAgICAgdGhpcy5zdWJQcmlvcml0eQogICAgICAgICAgKSwKICAgICAgICAgIHJlc3Q6IHJlc3VsdC5yZXN0CiAgICAgICAgfTsKICAgICAgfQogICAgICB2YWxpZGF0ZShfdXRjRGF0ZSwgX3ZhbHVlLCBfb3B0aW9ucykgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMKdmFyIEVyYVBhcnNlcjsKdmFyIGluaXRfRXJhUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9FcmFQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIEVyYVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxNDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyBBRCwgQkMKICAgICAgICAgIGNhc2UgIkciOgogICAgICAgICAgY2FzZSAiR0ciOgogICAgICAgICAgY2FzZSAiR0dHIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5lcmEoZGF0ZVN0cmluZywgeyB3aWR0aDogImFiYnJldmlhdGVkIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciIH0pOwogICAgICAgICAgLy8gQSwgQgogICAgICAgICAgY2FzZSAiR0dHR0ciOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICAgIC8vIEFubm8gRG9taW5pLCBCZWZvcmUgQ2hyaXN0CiAgICAgICAgICBjYXNlICJHR0dHIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiB9KSB8fCBtYXRjaDIuZXJhKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJhYmJyZXZpYXRlZCIgfSkgfHwgbWF0Y2gyLmVyYShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBmbGFncy5lcmEgPSB2YWx1ZTI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJSIiwgInUiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvY29uc3RhbnRzLmpzCnZhciBudW1lcmljUGF0dGVybnMsIHRpbWV6b25lUGF0dGVybnM7CnZhciBpbml0X2NvbnN0YW50czIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9jb25zdGFudHMuanMiKCkgewogICAgbnVtZXJpY1BhdHRlcm5zID0gewogICAgICBtb250aDogL14oMVswLTJdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMgogICAgICBkYXRlOiAvXigzWzAtMV18WzAtMl0/XGQpLywKICAgICAgLy8gMCB0byAzMQogICAgICBkYXlPZlllYXI6IC9eKDM2WzAtNl18M1swLTVdXGR8WzAtMl0/XGQ/XGQpLywKICAgICAgLy8gMCB0byAzNjYKICAgICAgd2VlazogL14oNVswLTNdfFswLTRdP1xkKS8sCiAgICAgIC8vIDAgdG8gNTMKICAgICAgaG91cjIzaDogL14oMlswLTNdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjMKICAgICAgaG91cjI0aDogL14oMlswLTRdfFswLTFdP1xkKS8sCiAgICAgIC8vIDAgdG8gMjQKICAgICAgaG91cjExaDogL14oMVswLTFdfDA/XGQpLywKICAgICAgLy8gMCB0byAxMQogICAgICBob3VyMTJoOiAvXigxWzAtMl18MD9cZCkvLAogICAgICAvLyAwIHRvIDEyCiAgICAgIG1pbnV0ZTogL15bMC01XT9cZC8sCiAgICAgIC8vIDAgdG8gNTkKICAgICAgc2Vjb25kOiAvXlswLTVdP1xkLywKICAgICAgLy8gMCB0byA1OQogICAgICBzaW5nbGVEaWdpdDogL15cZC8sCiAgICAgIC8vIDAgdG8gOQogICAgICB0d29EaWdpdHM6IC9eXGR7MSwyfS8sCiAgICAgIC8vIDAgdG8gOTkKICAgICAgdGhyZWVEaWdpdHM6IC9eXGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5CiAgICAgIGZvdXJEaWdpdHM6IC9eXGR7MSw0fS8sCiAgICAgIC8vIDAgdG8gOTk5OQogICAgICBhbnlEaWdpdHNTaWduZWQ6IC9eLT9cZCsvLAogICAgICBzaW5nbGVEaWdpdFNpZ25lZDogL14tP1xkLywKICAgICAgLy8gMCB0byA5LCAtMCB0byAtOQogICAgICB0d29EaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDJ9LywKICAgICAgLy8gMCB0byA5OSwgLTAgdG8gLTk5CiAgICAgIHRocmVlRGlnaXRzU2lnbmVkOiAvXi0/XGR7MSwzfS8sCiAgICAgIC8vIDAgdG8gOTk5LCAtMCB0byAtOTk5CiAgICAgIGZvdXJEaWdpdHNTaWduZWQ6IC9eLT9cZHsxLDR9LwogICAgICAvLyAwIHRvIDk5OTksIC0wIHRvIC05OTk5CiAgICB9OwogICAgdGltZXpvbmVQYXR0ZXJucyA9IHsKICAgICAgYmFzaWNPcHRpb25hbE1pbnV0ZXM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSk/fFovLAogICAgICBiYXNpYzogL14oWystXSkoXGR7Mn0pKFxkezJ9KXxaLywKICAgICAgYmFzaWNPcHRpb25hbFNlY29uZHM6IC9eKFsrLV0pKFxkezJ9KShcZHsyfSkoKFxkezJ9KSk/fFovLAogICAgICBleHRlbmRlZDogL14oWystXSkoXGR7Mn0pOihcZHsyfSl8Wi8sCiAgICAgIGV4dGVuZGVkT3B0aW9uYWxTZWNvbmRzOiAvXihbKy1dKShcZHsyfSk6KFxkezJ9KSg6KFxkezJ9KSk/fFovCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvdXRpbHMuanMKZnVuY3Rpb24gbWFwVmFsdWUocGFyc2VGblJlc3VsdCwgbWFwRm4pIHsKICBpZiAoIXBhcnNlRm5SZXN1bHQpIHsKICAgIHJldHVybiBwYXJzZUZuUmVzdWx0OwogIH0KICByZXR1cm4gewogICAgdmFsdWU6IG1hcEZuKHBhcnNlRm5SZXN1bHQudmFsdWUpLAogICAgcmVzdDogcGFyc2VGblJlc3VsdC5yZXN0CiAgfTsKfQpmdW5jdGlvbiBwYXJzZU51bWVyaWNQYXR0ZXJuKHBhdHRlcm4sIGRhdGVTdHJpbmcpIHsKICBjb25zdCBtYXRjaFJlc3VsdCA9IGRhdGVTdHJpbmcubWF0Y2gocGF0dGVybik7CiAgaWYgKCFtYXRjaFJlc3VsdCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHJldHVybiB7CiAgICB2YWx1ZTogcGFyc2VJbnQobWF0Y2hSZXN1bHRbMF0sIDEwKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZVBhdHRlcm4ocGF0dGVybiwgZGF0ZVN0cmluZykgewogIGNvbnN0IG1hdGNoUmVzdWx0ID0gZGF0ZVN0cmluZy5tYXRjaChwYXR0ZXJuKTsKICBpZiAoIW1hdGNoUmVzdWx0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgaWYgKG1hdGNoUmVzdWx0WzBdID09PSAiWiIpIHsKICAgIHJldHVybiB7CiAgICAgIHZhbHVlOiAwLAogICAgICByZXN0OiBkYXRlU3RyaW5nLnNsaWNlKDEpCiAgICB9OwogIH0KICBjb25zdCBzaWduID0gbWF0Y2hSZXN1bHRbMV0gPT09ICIrIiA/IDEgOiAtMTsKICBjb25zdCBob3VycyA9IG1hdGNoUmVzdWx0WzJdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbMl0sIDEwKSA6IDA7CiAgY29uc3QgbWludXRlcyA9IG1hdGNoUmVzdWx0WzNdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbM10sIDEwKSA6IDA7CiAgY29uc3Qgc2Vjb25kcyA9IG1hdGNoUmVzdWx0WzVdID8gcGFyc2VJbnQobWF0Y2hSZXN1bHRbNV0sIDEwKSA6IDA7CiAgcmV0dXJuIHsKICAgIHZhbHVlOiBzaWduICogKGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kKSwKICAgIHJlc3Q6IGRhdGVTdHJpbmcuc2xpY2UobWF0Y2hSZXN1bHRbMF0ubGVuZ3RoKQogIH07Cn0KZnVuY3Rpb24gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZykgewogIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5hbnlEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwp9CmZ1bmN0aW9uIHBhcnNlTkRpZ2l0cyhuMTMsIGRhdGVTdHJpbmcpIHsKICBzd2l0Y2ggKG4xMykgewogICAgY2FzZSAxOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2luZ2xlRGlnaXQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAyOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudHdvRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLnRocmVlRGlnaXRzLCBkYXRlU3RyaW5nKTsKICAgIGNhc2UgNDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLmZvdXJEaWdpdHMsIGRhdGVTdHJpbmcpOwogICAgZGVmYXVsdDoKICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obmV3IFJlZ0V4cCgiXlxcZHsxLCIgKyBuMTMgKyAifSIpLCBkYXRlU3RyaW5nKTsKICB9Cn0KZnVuY3Rpb24gcGFyc2VORGlnaXRzU2lnbmVkKG4xMywgZGF0ZVN0cmluZykgewogIHN3aXRjaCAobjEzKSB7CiAgICBjYXNlIDE6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5zaW5nbGVEaWdpdFNpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBjYXNlIDI6CiAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy50d29EaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSAzOgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMudGhyZWVEaWdpdHNTaWduZWQsIGRhdGVTdHJpbmcpOwogICAgY2FzZSA0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZm91ckRpZ2l0c1NpZ25lZCwgZGF0ZVN0cmluZyk7CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihuZXcgUmVnRXhwKCJeLT9cXGR7MSwiICsgbjEzICsgIn0iKSwgZGF0ZVN0cmluZyk7CiAgfQp9CmZ1bmN0aW9uIGRheVBlcmlvZEVudW1Ub0hvdXJzKGRheVBlcmlvZCkgewogIHN3aXRjaCAoZGF5UGVyaW9kKSB7CiAgICBjYXNlICJtb3JuaW5nIjoKICAgICAgcmV0dXJuIDQ7CiAgICBjYXNlICJldmVuaW5nIjoKICAgICAgcmV0dXJuIDE3OwogICAgY2FzZSAicG0iOgogICAgY2FzZSAibm9vbiI6CiAgICBjYXNlICJhZnRlcm5vb24iOgogICAgICByZXR1cm4gMTI7CiAgICBjYXNlICJhbSI6CiAgICBjYXNlICJtaWRuaWdodCI6CiAgICBjYXNlICJuaWdodCI6CiAgICBkZWZhdWx0OgogICAgICByZXR1cm4gMDsKICB9Cn0KZnVuY3Rpb24gbm9ybWFsaXplVHdvRGlnaXRZZWFyKHR3b0RpZ2l0WWVhciwgY3VycmVudFllYXIpIHsKICBjb25zdCBpc0NvbW1vbkVyYSA9IGN1cnJlbnRZZWFyID4gMDsKICBjb25zdCBhYnNDdXJyZW50WWVhciA9IGlzQ29tbW9uRXJhID8gY3VycmVudFllYXIgOiAxIC0gY3VycmVudFllYXI7CiAgbGV0IHJlc3VsdDsKICBpZiAoYWJzQ3VycmVudFllYXIgPD0gNTApIHsKICAgIHJlc3VsdCA9IHR3b0RpZ2l0WWVhciB8fCAxMDA7CiAgfSBlbHNlIHsKICAgIGNvbnN0IHJhbmdlRW5kID0gYWJzQ3VycmVudFllYXIgKyA1MDsKICAgIGNvbnN0IHJhbmdlRW5kQ2VudHVyeSA9IE1hdGgudHJ1bmMocmFuZ2VFbmQgLyAxMDApICogMTAwOwogICAgY29uc3QgaXNQcmV2aW91c0NlbnR1cnkgPSB0d29EaWdpdFllYXIgPj0gcmFuZ2VFbmQgJSAxMDA7CiAgICByZXN1bHQgPSB0d29EaWdpdFllYXIgKyByYW5nZUVuZENlbnR1cnkgLSAoaXNQcmV2aW91c0NlbnR1cnkgPyAxMDAgOiAwKTsKICB9CiAgcmV0dXJuIGlzQ29tbW9uRXJhID8gcmVzdWx0IDogMSAtIHJlc3VsdDsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgoeWVhcikgewogIHJldHVybiB5ZWFyICUgNDAwID09PSAwIHx8IHllYXIgJSA0ID09PSAwICYmIHllYXIgJSAxMDAgIT09IDA7Cn0KdmFyIGluaXRfdXRpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi91dGlscy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMKdmFyIFllYXJQYXJzZXI7CnZhciBpbml0X1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1llYXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbIlkiLCAiUiIsICJ1IiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJ5eSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ5IjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJ5byI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBpZiAodmFsdWUyLmlzVHdvRGlnaXRZZWFyKSB7CiAgICAgICAgICBjb25zdCBub3JtYWxpemVkVHdvRGlnaXRZZWFyID0gbm9ybWFsaXplVHdvRGlnaXRZZWFyKAogICAgICAgICAgICB2YWx1ZTIueWVhciwKICAgICAgICAgICAgY3VycmVudFllYXIKICAgICAgICAgICk7CiAgICAgICAgICBkYXRlLnNldEZ1bGxZZWFyKG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsIDAsIDEpOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBkYXRlOwogICAgICAgIH0KICAgICAgICBjb25zdCB5ZWFyID0gISgiZXJhIiBpbiBmbGFncykgfHwgZmxhZ3MuZXJhID09PSAxID8gdmFsdWUyLnllYXIgOiAxIC0gdmFsdWUyLnllYXI7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCAwLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzCnZhciBMb2NhbFdlZWtZZWFyUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtZZWFyUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Mb2NhbFdlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfZ2V0V2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBMb2NhbFdlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAoeWVhcikgPT4gKHsKICAgICAgICAgIHllYXIsCiAgICAgICAgICBpc1R3b0RpZ2l0WWVhcjogdG9rZW4gPT09ICJZWSIKICAgICAgICB9KTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJZIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyg0LCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICBjYXNlICJZbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAieWVhciIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUocGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMi5pc1R3b0RpZ2l0WWVhciB8fCB2YWx1ZTIueWVhciA+IDA7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBjdXJyZW50WWVhciA9IGdldFdlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogICAgICAgIGlmICh2YWx1ZTIuaXNUd29EaWdpdFllYXIpIHsKICAgICAgICAgIGNvbnN0IG5vcm1hbGl6ZWRUd29EaWdpdFllYXIgPSBub3JtYWxpemVUd29EaWdpdFllYXIoCiAgICAgICAgICAgIHZhbHVlMi55ZWFyLAogICAgICAgICAgICBjdXJyZW50WWVhcgogICAgICAgICAgKTsKICAgICAgICAgIGRhdGUuc2V0RnVsbFllYXIoCiAgICAgICAgICAgIG5vcm1hbGl6ZWRUd29EaWdpdFllYXIsCiAgICAgICAgICAgIDAsCiAgICAgICAgICAgIG9wdGlvbnMuZmlyc3RXZWVrQ29udGFpbnNEYXRlCiAgICAgICAgICApOwogICAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICAgIHJldHVybiBzdGFydE9mV2VlayhkYXRlLCBvcHRpb25zKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeWVhciA9ICEoImVyYSIgaW4gZmxhZ3MpIHx8IGZsYWdzLmVyYSA9PT0gMSA/IHZhbHVlMi55ZWFyIDogMSAtIHZhbHVlMi55ZWFyOwogICAgICAgIGRhdGUuc2V0RnVsbFllYXIoeWVhciwgMCwgb3B0aW9ucy5maXJzdFdlZWtDb250YWluc0RhdGUpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZXZWVrKGRhdGUsIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAiUSIsCiAgICAgICAgInEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzCnZhciBJU09XZWVrWWVhclBhcnNlcjsKdmFyIGluaXRfSVNPV2Vla1llYXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT1dlZWtZZWFyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEzMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBpZiAodG9rZW4gPT09ICJSIikgewogICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCg0LCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0c1NpZ25lZCh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGNvbnN0IGZpcnN0V2Vla09mWWVhciA9IGNvbnN0cnVjdEZyb20oZGF0ZSwgMCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEZ1bGxZZWFyKHZhbHVlMiwgMCwgNCk7CiAgICAgICAgZmlyc3RXZWVrT2ZZZWFyLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBzdGFydE9mSVNPV2VlayhmaXJzdFdlZWtPZlllYXIpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiRyIsCiAgICAgICAgInkiLAogICAgICAgICJZIiwKICAgICAgICAidSIsCiAgICAgICAgIlEiLAogICAgICAgICJxIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJ3IiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzCnZhciBFeHRlbmRlZFllYXJQYXJzZXI7CnZhciBpbml0X0V4dGVuZGVkWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRXh0ZW5kZWRZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBFeHRlbmRlZFllYXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGlmICh0b2tlbiA9PT0gInUiKSB7CiAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKDQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzU2lnbmVkKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZTIsIDAsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJHIiwgInkiLCAiWSIsICJSIiwgInciLCAiSSIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMKdmFyIFF1YXJ0ZXJQYXJzZXI7CnZhciBpbml0X1F1YXJ0ZXJQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1F1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFF1YXJ0ZXJQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTIwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgMywgNAogICAgICAgICAgY2FzZSAiUSI6CiAgICAgICAgICBjYXNlICJRUSI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIC8vIDFzdCwgMm5kLCAzcmQsIDR0aAogICAgICAgICAgY2FzZSAiUW8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAicXVhcnRlciIgfSk7CiAgICAgICAgICAvLyBRMSwgUTIsIFEzLCBRNAogICAgICAgICAgY2FzZSAiUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyAxLCAyLCAzLCA0IChuYXJyb3cgcXVhcnRlcjsgY291bGQgYmUgbm90IG51bWVyaWNhbCkKICAgICAgICAgIGNhc2UgIlFRUVFRIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMXN0IHF1YXJ0ZXIsIDJuZCBxdWFydGVyLCAuLi4KICAgICAgICAgIGNhc2UgIlFRUVEiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSA0OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoKHZhbHVlMiAtIDEpICogMywgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMKdmFyIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyOwp2YXIgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVRdWFydGVyUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEyMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDEsIDIsIDMsIDQKICAgICAgICAgIGNhc2UgInEiOgogICAgICAgICAgY2FzZSAicXEiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgM3JkLCA0dGgKICAgICAgICAgIGNhc2UgInFvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInF1YXJ0ZXIiIH0pOwogICAgICAgICAgLy8gUTEsIFEyLCBRMywgUTQKICAgICAgICAgIGNhc2UgInFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5xdWFydGVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgLy8gMSwgMiwgMywgNCAobmFycm93IHF1YXJ0ZXI7IGNvdWxkIGJlIG5vdCBudW1lcmljYWwpCiAgICAgICAgICBjYXNlICJxcXFxcSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIDFzdCBxdWFydGVyLCAybmQgcXVhcnRlciwgLi4uCiAgICAgICAgICBjYXNlICJxcXFxIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLnF1YXJ0ZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIucXVhcnRlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNDsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKCh2YWx1ZTIgLSAxKSAqIDMsIDEpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJZIiwKICAgICAgICAiUiIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzCnZhciBNb250aFBhcnNlcjsKdmFyIGluaXRfTW9udGhQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIE1vbnRoUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgIlkiLAogICAgICAgICJSIiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJEIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICAgIHByaW9yaXR5ID0gMTEwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHZhbHVlMiAtIDE7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMSwgMiwgLi4uLCAxMgogICAgICAgICAgY2FzZSAiTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5tb250aCwgZGF0ZVN0cmluZyksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gMDEsIDAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJNTSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHMoMiwgZGF0ZVN0cmluZyksIHZhbHVlQ2FsbGJhY2spOwogICAgICAgICAgLy8gMXN0LCAybmQsIC4uLiwgMTJ0aAogICAgICAgICAgY2FzZSAiTW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogIm1vbnRoIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIEphbiwgRmViLCAuLi4sIERlYwogICAgICAgICAgY2FzZSAiTU1NIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gSiwgRiwgLi4uLCBECiAgICAgICAgICBjYXNlICJNTU1NTSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBKYW51YXJ5LCBGZWJydWFyeSwgLi4uLCBEZWNlbWJlcgogICAgICAgICAgY2FzZSAiTU1NTSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJ3aWRlIiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1vbnRoKHZhbHVlMiwgMSk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTW9udGhQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVNb250aFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZU1vbnRoUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFN0YW5kQWxvbmVNb250aFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gdmFsdWUyIC0gMTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAxLCAyLCAuLi4sIDEyCiAgICAgICAgICBjYXNlICJMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1vbnRoLCBkYXRlU3RyaW5nKSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyAwMSwgMDIsIC4uLiwgMTIKICAgICAgICAgIGNhc2UgIkxMIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cygyLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAxc3QsIDJuZCwgLi4uLCAxMnRoCiAgICAgICAgICBjYXNlICJMbyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB1bml0OiAibW9udGgiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gSmFuLCBGZWIsIC4uLiwgRGVjCiAgICAgICAgICBjYXNlICJMTEwiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgICAvLyBKLCBGLCAuLi4sIEQKICAgICAgICAgIGNhc2UgIkxMTExMIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5tb250aChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJzdGFuZGFsb25lIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIEphbnVhcnksIEZlYnJ1YXJ5LCAuLi4sIERlY2VtYmVyCiAgICAgICAgICBjYXNlICJMTExMIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIubW9udGgoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLm1vbnRoKGRhdGVTdHJpbmcsIHsgd2lkdGg6ICJuYXJyb3ciLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDExOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgodmFsdWUyLCAxKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJ3IiwKICAgICAgICAiSSIsCiAgICAgICAgIkQiLAogICAgICAgICJpIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vlay5qcwpmdW5jdGlvbiBzZXRXZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldFdlZWsoZGF0ZV8sIG9wdGlvbnMpIC0gd2VlazsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gdG9EYXRlKGRhdGVfLCBvcHRpb25zPy5pbik7Cn0KdmFyIHNldFdlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0V2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldFdlZWtfZGVmYXVsdCA9IHNldFdlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcwp2YXIgTG9jYWxXZWVrUGFyc2VyOwp2YXIgaW5pdF9Mb2NhbFdlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsV2Vla1BhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc3RhcnRPZldlZWsoKTsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIExvY2FsV2Vla1BhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJ3IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLndlZWssIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAid28iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAid2VlayIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDUzOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBzdGFydE9mV2VlayhzZXRXZWVrKGRhdGUsIHZhbHVlMiwgb3B0aW9ucyksIG9wdGlvbnMpOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPV2Vlay5qcwpmdW5jdGlvbiBzZXRJU09XZWVrKGRhdGUsIHdlZWssIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgZGlmZiA9IGdldElTT1dlZWsoX2RhdGUsIG9wdGlvbnMpIC0gd2VlazsKICBfZGF0ZS5zZXREYXRlKF9kYXRlLmdldERhdGUoKSAtIGRpZmYgKiA3KTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIHNldElTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRJU09XZWVrLmpzIigpIHsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldElTT1dlZWtfZGVmYXVsdCA9IHNldElTT1dlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMKdmFyIElTT1dlZWtQYXJzZXI7CnZhciBpbml0X0lTT1dlZWtQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT1dlZWtQYXJzZXIuanMiKCkgewogICAgaW5pdF9zZXRJU09XZWVrKCk7CiAgICBpbml0X3N0YXJ0T2ZJU09XZWVrKCk7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBJU09XZWVrUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDEwMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMud2VlaywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJJbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJ3ZWVrIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gNTM7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHN0YXJ0T2ZJU09XZWVrKHNldElTT1dlZWsoZGF0ZSwgdmFsdWUyKSk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiZSIsCiAgICAgICAgImMiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0RhdGVQYXJzZXIuanMKdmFyIERBWVNfSU5fTU9OVEgsIERBWVNfSU5fTU9OVEhfTEVBUF9ZRUFSLCBEYXRlUGFyc2VyOwp2YXIgaW5pdF9EYXRlUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXRlUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERBWVNfSU5fTU9OVEggPSBbMzEsIDI4LCAzMSwgMzAsIDMxLCAzMCwgMzEsIDMxLCAzMCwgMzEsIDMwLCAzMV07CiAgICBEQVlTX0lOX01PTlRIX0xFQVBfWUVBUiA9IFsKICAgICAgMzEsCiAgICAgIDI5LAogICAgICAzMSwKICAgICAgMzAsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMxLAogICAgICAzMCwKICAgICAgMzEsCiAgICAgIDMwLAogICAgICAzMQogICAgXTsKICAgIERhdGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHN1YlByaW9yaXR5ID0gMTsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImQiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuZGF0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJkbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJkYXRlIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKTsKICAgICAgICBjb25zdCBpc0xlYXBZZWFyMiA9IGlzTGVhcFllYXJJbmRleCh5ZWFyKTsKICAgICAgICBjb25zdCBtb250aCA9IGRhdGUuZ2V0TW9udGgoKTsKICAgICAgICBpZiAoaXNMZWFwWWVhcjIpIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gREFZU19JTl9NT05USF9MRUFQX1lFQVJbbW9udGhdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IERBWVNfSU5fTU9OVEhbbW9udGhdOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldERhdGUodmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgInciLAogICAgICAgICJJIiwKICAgICAgICAiRCIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzCnZhciBEYXlPZlllYXJQYXJzZXI7CnZhciBpbml0X0RheU9mWWVhclBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5T2ZZZWFyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheU9mWWVhclBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgc3VicHJpb3JpdHkgPSAxOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiRCI6CiAgICAgICAgICBjYXNlICJERCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5kYXlPZlllYXIsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAiRG8iOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgeyB1bml0OiAiZGF0ZSIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKGRhdGUsIHZhbHVlMikgewogICAgICAgIGNvbnN0IHllYXIgPSBkYXRlLmdldEZ1bGxZZWFyKCk7CiAgICAgICAgY29uc3QgaXNMZWFwWWVhcjIgPSBpc0xlYXBZZWFySW5kZXgoeWVhcik7CiAgICAgICAgaWYgKGlzTGVhcFllYXIyKSB7CiAgICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDM2NjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAxICYmIHZhbHVlMiA8PSAzNjU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0TW9udGgoMCwgdmFsdWUyKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAiWSIsCiAgICAgICAgIlIiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRSIsCiAgICAgICAgImkiLAogICAgICAgICJlIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXkuanMKZnVuY3Rpb24gc2V0RGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3Qgd2Vla1N0YXJ0c09uID0gb3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi53ZWVrU3RhcnRzT24gPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8ud2Vla1N0YXJ0c09uID8/IDA7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGN1cnJlbnREYXkgPSBkYXRlXy5nZXREYXkoKTsKICBjb25zdCByZW1haW5kZXIgPSBkYXkgJSA3OwogIGNvbnN0IGRheUluZGV4ID0gKHJlbWFpbmRlciArIDcpICUgNzsKICBjb25zdCBkZWx0YSA9IDcgLSB3ZWVrU3RhcnRzT247CiAgY29uc3QgZGlmZiA9IGRheSA8IDAgfHwgZGF5ID4gNiA/IGRheSAtIChjdXJyZW50RGF5ICsgZGVsdGEpICUgNyA6IChkYXlJbmRleCArIGRlbHRhKSAlIDcgLSAoY3VycmVudERheSArIGRlbHRhKSAlIDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXREYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0RGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERheS5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHRPcHRpb25zKCk7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXREYXlfZGVmYXVsdCA9IHNldERheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzCnZhciBEYXlQYXJzZXI7CnZhciBpbml0X0RheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJFIjoKICAgICAgICAgIGNhc2UgIkVFIjoKICAgICAgICAgIGNhc2UgIkVFRSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJFRUVFRUUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiRUVFRSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiRCIsICJpIiwgImUiLCAiYyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzCnZhciBMb2NhbERheVBhcnNlcjsKdmFyIGluaXRfTG9jYWxEYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0xvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgTG9jYWxEYXlQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gOTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB2YWx1ZUNhbGxiYWNrID0gKHZhbHVlMikgPT4gewogICAgICAgICAgY29uc3Qgd2hvbGVXZWVrRGF5cyA9IE1hdGguZmxvb3IoKHZhbHVlMiAtIDEpIC8gNykgKiA3OwogICAgICAgICAgcmV0dXJuICh2YWx1ZTIgKyBvcHRpb25zLndlZWtTdGFydHNPbiArIDYpICUgNyArIHdob2xlV2Vla0RheXM7CiAgICAgICAgfTsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICAvLyAzCiAgICAgICAgICBjYXNlICJlIjoKICAgICAgICAgIGNhc2UgImVlIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpLCB2YWx1ZUNhbGxiYWNrKTsKICAgICAgICAgIC8vIDNyZAogICAgICAgICAgY2FzZSAiZW8iOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLm9yZGluYWxOdW1iZXIoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgdW5pdDogImRheSIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImVlZSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIC8vIFR1CiAgICAgICAgICBjYXNlICJlZWVlZWUiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgICAgLy8gVHVlc2RheQogICAgICAgICAgY2FzZSAiZWVlZSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAid2lkZSIsIGNvbnRleHQ6ICJmb3JtYXR0aW5nIiB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAic2hvcnQiLCBjb250ZXh0OiAiZm9ybWF0dGluZyIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7IHdpZHRoOiAibmFycm93IiwgY29udGV4dDogImZvcm1hdHRpbmciIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA2OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMiwgb3B0aW9ucykgewogICAgICAgIGRhdGUgPSBzZXREYXkoZGF0ZSwgdmFsdWUyLCBvcHRpb25zKTsKICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsKICAgICAgICAieSIsCiAgICAgICAgIlIiLAogICAgICAgICJ1IiwKICAgICAgICAicSIsCiAgICAgICAgIlEiLAogICAgICAgICJNIiwKICAgICAgICAiTCIsCiAgICAgICAgIkkiLAogICAgICAgICJkIiwKICAgICAgICAiRCIsCiAgICAgICAgIkUiLAogICAgICAgICJpIiwKICAgICAgICAiYyIsCiAgICAgICAgInQiLAogICAgICAgICJUIgogICAgICBdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzCnZhciBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXI7CnZhciBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyLmpzIigpIHsKICAgIGluaXRfc2V0RGF5KCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgU3RhbmRBbG9uZUxvY2FsRGF5UGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDkwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdmFsdWVDYWxsYmFjayA9ICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGNvbnN0IHdob2xlV2Vla0RheXMgPSBNYXRoLmZsb29yKCh2YWx1ZTIgLSAxKSAvIDcpICogNzsKICAgICAgICAgIHJldHVybiAodmFsdWUyICsgb3B0aW9ucy53ZWVrU3RhcnRzT24gKyA2KSAlIDcgKyB3aG9sZVdlZWtEYXlzOwogICAgICAgIH07CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgLy8gMwogICAgICAgICAgY2FzZSAiYyI6CiAgICAgICAgICBjYXNlICJjYyI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgICAgICAvLyAzcmQKICAgICAgICAgIGNhc2UgImNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHVuaXQ6ICJkYXkiCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVHVlCiAgICAgICAgICBjYXNlICJjY2MiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFQKICAgICAgICAgIGNhc2UgImNjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAic3RhbmRhbG9uZSIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiY2NjY2NjIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImNjY2MiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIndpZGUiLCBjb250ZXh0OiAic3RhbmRhbG9uZSIgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogInN0YW5kYWxvbmUiCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogInNob3J0IiwgY29udGV4dDogInN0YW5kYWxvbmUiIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgeyB3aWR0aDogIm5hcnJvdyIsIGNvbnRleHQ6ICJzdGFuZGFsb25lIiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMCAmJiB2YWx1ZTIgPD0gNjsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIsIG9wdGlvbnMpIHsKICAgICAgICBkYXRlID0gc2V0RGF5KGRhdGUsIHZhbHVlMiwgb3B0aW9ucyk7CiAgICAgICAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbCiAgICAgICAgInkiLAogICAgICAgICJSIiwKICAgICAgICAidSIsCiAgICAgICAgInEiLAogICAgICAgICJRIiwKICAgICAgICAiTSIsCiAgICAgICAgIkwiLAogICAgICAgICJJIiwKICAgICAgICAiZCIsCiAgICAgICAgIkQiLAogICAgICAgICJFIiwKICAgICAgICAiaSIsCiAgICAgICAgImUiLAogICAgICAgICJ0IiwKICAgICAgICAiVCIKICAgICAgXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SVNPRGF5LmpzCmZ1bmN0aW9uIHNldElTT0RheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgY3VycmVudERheSA9IGdldElTT0RheShkYXRlXywgb3B0aW9ucyk7CiAgY29uc3QgZGlmZiA9IGRheSAtIGN1cnJlbnREYXk7CiAgcmV0dXJuIGFkZERheXMoZGF0ZV8sIGRpZmYsIG9wdGlvbnMpOwp9CnZhciBzZXRJU09EYXlfZGVmYXVsdDsKdmFyIGluaXRfc2V0SVNPRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldElTT0RheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0SVNPRGF5KCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0SVNPRGF5X2RlZmF1bHQgPSBzZXRJU09EYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcwp2YXIgSVNPRGF5UGFyc2VyOwp2YXIgaW5pdF9JU09EYXlQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL0lTT0RheVBhcnNlci5qcyIoKSB7CiAgICBpbml0X3NldElTT0RheSgpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIElTT0RheVBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA5MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiB7CiAgICAgICAgICBpZiAodmFsdWUyID09PSAwKSB7CiAgICAgICAgICAgIHJldHVybiA3OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHZhbHVlMjsKICAgICAgICB9OwogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIC8vIDIKICAgICAgICAgIGNhc2UgImkiOgogICAgICAgICAgY2FzZSAiaWkiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICAvLyAybmQKICAgICAgICAgIGNhc2UgImlvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImRheSIgfSk7CiAgICAgICAgICAvLyBUdWUKICAgICAgICAgIGNhc2UgImlpaSI6CiAgICAgICAgICAgIHJldHVybiBtYXBWYWx1ZSgKICAgICAgICAgICAgICBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogInNob3J0IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSksCiAgICAgICAgICAgICAgdmFsdWVDYWxsYmFjawogICAgICAgICAgICApOwogICAgICAgICAgLy8gVAogICAgICAgICAgY2FzZSAiaWlpaWkiOgogICAgICAgICAgICByZXR1cm4gbWFwVmFsdWUoCiAgICAgICAgICAgICAgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgICAvLyBUdQogICAgICAgICAgY2FzZSAiaWlpaWlpIjoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJzaG9ydCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIHZhbHVlQ2FsbGJhY2sKICAgICAgICAgICAgKTsKICAgICAgICAgIC8vIFR1ZXNkYXkKICAgICAgICAgIGNhc2UgImlpaWkiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hcFZhbHVlKAogICAgICAgICAgICAgIG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXkoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5KGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiAic2hvcnQiLAogICAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheShkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgICB9KSwKICAgICAgICAgICAgICB2YWx1ZUNhbGxiYWNrCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDEgJiYgdmFsdWUyIDw9IDc7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZSA9IHNldElTT0RheShkYXRlLCB2YWx1ZTIpOwogICAgICAgIGRhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWwogICAgICAgICJ5IiwKICAgICAgICAiWSIsCiAgICAgICAgInUiLAogICAgICAgICJxIiwKICAgICAgICAiUSIsCiAgICAgICAgIk0iLAogICAgICAgICJMIiwKICAgICAgICAidyIsCiAgICAgICAgImQiLAogICAgICAgICJEIiwKICAgICAgICAiRSIsCiAgICAgICAgImUiLAogICAgICAgICJjIiwKICAgICAgICAidCIsCiAgICAgICAgIlQiCiAgICAgIF07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzCnZhciBBTVBNUGFyc2VyOwp2YXIgaW5pdF9BTVBNUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9BTVBNUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDgwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiYSI6CiAgICAgICAgICBjYXNlICJhYSI6CiAgICAgICAgICBjYXNlICJhYWEiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJhYWFhYSI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiYWFhYSI6CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJ3aWRlIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJhYmJyZXZpYXRlZCIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0SG91cnMoZGF5UGVyaW9kRW51bVRvSG91cnModmFsdWUyKSwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJiIiwgIkIiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzCnZhciBBTVBNTWlkbmlnaHRQYXJzZXI7CnZhciBpbml0X0FNUE1NaWRuaWdodFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvQU1QTU1pZG5pZ2h0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBBTVBNTWlkbmlnaHRQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gODA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgIGNhc2UgImJiIjoKICAgICAgICAgIGNhc2UgImJiYiI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgImJiYmJiIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAibmFycm93IiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSk7CiAgICAgICAgICBjYXNlICJiYmJiIjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIndpZGUiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogImFiYnJldmlhdGVkIiwKICAgICAgICAgICAgICBjb250ZXh0OiAiZm9ybWF0dGluZyIKICAgICAgICAgICAgfSkgfHwgbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRIb3VycyhkYXlQZXJpb2RFbnVtVG9Ib3Vycyh2YWx1ZTIpLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiQiIsICJIIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMKdmFyIERheVBlcmlvZFBhcnNlcjsKdmFyIGluaXRfRGF5UGVyaW9kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9EYXlQZXJpb2RQYXJzZXIuanMiKCkgewogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIERheVBlcmlvZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA4MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgIkIiOgogICAgICAgICAgY2FzZSAiQkIiOgogICAgICAgICAgY2FzZSAiQkJCIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgICAgY2FzZSAiQkJCQkIiOgogICAgICAgICAgICByZXR1cm4gbWF0Y2gyLmRheVBlcmlvZChkYXRlU3RyaW5nLCB7CiAgICAgICAgICAgICAgd2lkdGg6ICJuYXJyb3ciLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KTsKICAgICAgICAgIGNhc2UgIkJCQkIiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAid2lkZSIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pIHx8IG1hdGNoMi5kYXlQZXJpb2QoZGF0ZVN0cmluZywgewogICAgICAgICAgICAgIHdpZHRoOiAiYWJicmV2aWF0ZWQiLAogICAgICAgICAgICAgIGNvbnRleHQ6ICJmb3JtYXR0aW5nIgogICAgICAgICAgICB9KSB8fCBtYXRjaDIuZGF5UGVyaW9kKGRhdGVTdHJpbmcsIHsKICAgICAgICAgICAgICB3aWR0aDogIm5hcnJvdyIsCiAgICAgICAgICAgICAgY29udGV4dDogImZvcm1hdHRpbmciCiAgICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKGRheVBlcmlvZEVudW1Ub0hvdXJzKHZhbHVlMiksIDAsIDAsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiYSIsICJiIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzCnZhciBIb3VyMXRvMTJQYXJzZXI7CnZhciBpbml0X0hvdXIxdG8xMlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjF0bzEyUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxdG8xMlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjEyaCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJobyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMTI7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaXNQTSA9IGRhdGUuZ2V0SG91cnMoKSA+PSAxMjsKICAgICAgICBpZiAoaXNQTSAmJiB2YWx1ZTIgPCAxMikgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIgKyAxMiwgMCwgMCwgMCk7CiAgICAgICAgfSBlbHNlIGlmICghaXNQTSAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsiSCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMKdmFyIEhvdXIwdG8yM1BhcnNlcjsKdmFyIGluaXRfSG91cjB0bzIzUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMHRvMjNQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjB0bzIzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMjNoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIkhvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAyMzsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiwgMCwgMCwgMCk7CiAgICAgICAgcmV0dXJuIGRhdGU7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJhIiwgImIiLCAiaCIsICJLIiwgImsiLCAidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMKdmFyIEhvdXIwVG8xMVBhcnNlcjsKdmFyIGluaXRfSG91cjBUbzExUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9Ib3VyMFRvMTFQYXJzZXIuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSG91cjBUbzExUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDcwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbiwgbWF0Y2gyKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAiSyI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU51bWVyaWNQYXR0ZXJuKG51bWVyaWNQYXR0ZXJucy5ob3VyMTFoLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgIktvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogImhvdXIiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSAxMTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBjb25zdCBpc1BNID0gZGF0ZS5nZXRIb3VycygpID49IDEyOwogICAgICAgIGlmIChpc1BNICYmIHZhbHVlMiA8IDEyKSB7CiAgICAgICAgICBkYXRlLnNldEhvdXJzKHZhbHVlMiArIDEyLCAwLCAwLCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgZGF0ZS5zZXRIb3Vycyh2YWx1ZTIsIDAsIDAsIDApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImgiLCAiSCIsICJrIiwgInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzCnZhciBIb3VyMVRvMjRQYXJzZXI7CnZhciBpbml0X0hvdXIxVG8yNFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSG91cjFUbzI0UGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIEhvdXIxVG8yNFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA3MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgImsiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuaG91cjI0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJrbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJob3VyIiB9KTsKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdmFsaWRhdGUoX2RhdGUsIHZhbHVlMikgewogICAgICAgIHJldHVybiB2YWx1ZTIgPj0gMSAmJiB2YWx1ZTIgPD0gMjQ7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgY29uc3QgaG91cnMgPSB2YWx1ZTIgPD0gMjQgPyB2YWx1ZTIgJSAyNCA6IHZhbHVlMjsKICAgICAgICBkYXRlLnNldEhvdXJzKGhvdXJzLCAwLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbImEiLCAiYiIsICJoIiwgIkgiLCAiSyIsICJ0IiwgIlQiXTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcwp2YXIgTWludXRlUGFyc2VyOwp2YXIgaW5pdF9NaW51dGVQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL01pbnV0ZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czIoKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBNaW51dGVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gNjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuLCBtYXRjaDIpIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJtIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTnVtZXJpY1BhdHRlcm4obnVtZXJpY1BhdHRlcm5zLm1pbnV0ZSwgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJtbyI6CiAgICAgICAgICAgIHJldHVybiBtYXRjaDIub3JkaW5hbE51bWJlcihkYXRlU3RyaW5nLCB7IHVuaXQ6ICJtaW51dGUiIH0pOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlTkRpZ2l0cyh0b2tlbi5sZW5ndGgsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWxpZGF0ZShfZGF0ZSwgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIHZhbHVlMiA+PSAwICYmIHZhbHVlMiA8PSA1OTsKICAgICAgfQogICAgICBzZXQoZGF0ZSwgX2ZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBkYXRlLnNldE1pbnV0ZXModmFsdWUyLCAwLCAwKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzCnZhciBTZWNvbmRQYXJzZXI7CnZhciBpbml0X1NlY29uZFBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMigpOwogICAgaW5pdF9QYXJzZXIoKTsKICAgIGluaXRfdXRpbHMoKTsKICAgIFNlY29uZFBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSA1MDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4sIG1hdGNoMikgewogICAgICAgIHN3aXRjaCAodG9rZW4pIHsKICAgICAgICAgIGNhc2UgInMiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VOdW1lcmljUGF0dGVybihudW1lcmljUGF0dGVybnMuc2Vjb25kLCBkYXRlU3RyaW5nKTsKICAgICAgICAgIGNhc2UgInNvIjoKICAgICAgICAgICAgcmV0dXJuIG1hdGNoMi5vcmRpbmFsTnVtYmVyKGRhdGVTdHJpbmcsIHsgdW5pdDogInNlY29uZCIgfSk7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gcGFyc2VORGlnaXRzKHRva2VuLmxlbmd0aCwgZGF0ZVN0cmluZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhbGlkYXRlKF9kYXRlLCB2YWx1ZTIpIHsKICAgICAgICByZXR1cm4gdmFsdWUyID49IDAgJiYgdmFsdWUyIDw9IDU5OwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGRhdGUuc2V0U2Vjb25kcyh2YWx1ZTIsIDApOwogICAgICAgIHJldHVybiBkYXRlOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9IFsidCIsICJUIl07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzCnZhciBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyOwp2YXIgaW5pdF9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9GcmFjdGlvbk9mU2Vjb25kUGFyc2VyLmpzIigpIHsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBGcmFjdGlvbk9mU2Vjb25kUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDMwOwogICAgICBwYXJzZShkYXRlU3RyaW5nLCB0b2tlbikgewogICAgICAgIGNvbnN0IHZhbHVlQ2FsbGJhY2sgPSAodmFsdWUyKSA9PiBNYXRoLnRydW5jKHZhbHVlMiAqIE1hdGgucG93KDEwLCAtdG9rZW4ubGVuZ3RoICsgMykpOwogICAgICAgIHJldHVybiBtYXBWYWx1ZShwYXJzZU5EaWdpdHModG9rZW4ubGVuZ3RoLCBkYXRlU3RyaW5nKSwgdmFsdWVDYWxsYmFjayk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWUyKTsKICAgICAgICByZXR1cm4gZGF0ZTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVXaXRoWlBhcnNlcjsKdmFyIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvSVNPVGltZXpvbmVXaXRoWlBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVXaXRoWlBhcnNlciA9IGNsYXNzIGV4dGVuZHMgUGFyc2VyIHsKICAgICAgcHJpb3JpdHkgPSAxMDsKICAgICAgcGFyc2UoZGF0ZVN0cmluZywgdG9rZW4pIHsKICAgICAgICBzd2l0Y2ggKHRva2VuKSB7CiAgICAgICAgICBjYXNlICJYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbE1pbnV0ZXMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4odGltZXpvbmVQYXR0ZXJucy5iYXNpYywgZGF0ZVN0cmluZyk7CiAgICAgICAgICBjYXNlICJYWFhYIjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuYmFzaWNPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAiWFhYWFgiOgogICAgICAgICAgICByZXR1cm4gcGFyc2VUaW1lem9uZVBhdHRlcm4oCiAgICAgICAgICAgICAgdGltZXpvbmVQYXR0ZXJucy5leHRlbmRlZE9wdGlvbmFsU2Vjb25kcywKICAgICAgICAgICAgICBkYXRlU3RyaW5nCiAgICAgICAgICAgICk7CiAgICAgICAgICBjYXNlICJYWFgiOgogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWQsIGRhdGVTdHJpbmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXQoZGF0ZSwgZmxhZ3MsIHZhbHVlMikgewogICAgICAgIGlmIChmbGFncy50aW1lc3RhbXBJc1NldCkgcmV0dXJuIGRhdGU7CiAgICAgICAgcmV0dXJuIGNvbnN0cnVjdEZyb20oCiAgICAgICAgICBkYXRlLAogICAgICAgICAgZGF0ZS5nZXRUaW1lKCkgLSBnZXRUaW1lem9uZU9mZnNldEluTWlsbGlzZWNvbmRzKGRhdGUpIC0gdmFsdWUyCiAgICAgICAgKTsKICAgICAgfQogICAgICBpbmNvbXBhdGlibGVUb2tlbnMgPSBbInQiLCAiVCIsICJ4Il07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcwp2YXIgSVNPVGltZXpvbmVQYXJzZXI7CnZhciBpbml0X0lTT1RpbWV6b25lUGFyc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlL19saWIvcGFyc2Vycy9JU09UaW1lem9uZVBhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9jb25zdGFudHMyKCk7CiAgICBpbml0X1BhcnNlcigpOwogICAgaW5pdF91dGlscygpOwogICAgSVNPVGltZXpvbmVQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMTA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcsIHRva2VuKSB7CiAgICAgICAgc3dpdGNoICh0b2tlbikgewogICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxNaW51dGVzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKHRpbWV6b25lUGF0dGVybnMuYmFzaWMsIGRhdGVTdHJpbmcpOwogICAgICAgICAgY2FzZSAieHh4eCI6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybigKICAgICAgICAgICAgICB0aW1lem9uZVBhdHRlcm5zLmJhc2ljT3B0aW9uYWxTZWNvbmRzLAogICAgICAgICAgICAgIGRhdGVTdHJpbmcKICAgICAgICAgICAgKTsKICAgICAgICAgIGNhc2UgInh4eHh4IjoKICAgICAgICAgICAgcmV0dXJuIHBhcnNlVGltZXpvbmVQYXR0ZXJuKAogICAgICAgICAgICAgIHRpbWV6b25lUGF0dGVybnMuZXh0ZW5kZWRPcHRpb25hbFNlY29uZHMsCiAgICAgICAgICAgICAgZGF0ZVN0cmluZwogICAgICAgICAgICApOwogICAgICAgICAgY2FzZSAieHh4IjoKICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgIHJldHVybiBwYXJzZVRpbWV6b25lUGF0dGVybih0aW1lem9uZVBhdHRlcm5zLmV4dGVuZGVkLCBkYXRlU3RyaW5nKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIGZsYWdzLCB2YWx1ZTIpIHsKICAgICAgICBpZiAoZmxhZ3MudGltZXN0YW1wSXNTZXQpIHJldHVybiBkYXRlOwogICAgICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKAogICAgICAgICAgZGF0ZSwKICAgICAgICAgIGRhdGUuZ2V0VGltZSgpIC0gZ2V0VGltZXpvbmVPZmZzZXRJbk1pbGxpc2Vjb25kcyhkYXRlKSAtIHZhbHVlMgogICAgICAgICk7CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gWyJ0IiwgIlQiLCAiWCJdOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wU2Vjb25kc1BhcnNlcjsKdmFyIGluaXRfVGltZXN0YW1wU2Vjb25kc1BhcnNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMvVGltZXN0YW1wU2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyID0gY2xhc3MgZXh0ZW5kcyBQYXJzZXIgewogICAgICBwcmlvcml0eSA9IDQwOwogICAgICBwYXJzZShkYXRlU3RyaW5nKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlQW55RGlnaXRzU2lnbmVkKGRhdGVTdHJpbmcpOwogICAgICB9CiAgICAgIHNldChkYXRlLCBfZmxhZ3MsIHZhbHVlMikgewogICAgICAgIHJldHVybiBbY29uc3RydWN0RnJvbShkYXRlLCB2YWx1ZTIgKiAxZTMpLCB7IHRpbWVzdGFtcElzU2V0OiB0cnVlIH1dOwogICAgICB9CiAgICAgIGluY29tcGF0aWJsZVRva2VucyA9ICIqIjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcwp2YXIgVGltZXN0YW1wTWlsbGlzZWNvbmRzUGFyc2VyOwp2YXIgaW5pdF9UaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzL1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfUGFyc2VyKCk7CiAgICBpbml0X3V0aWxzKCk7CiAgICBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIgPSBjbGFzcyBleHRlbmRzIFBhcnNlciB7CiAgICAgIHByaW9yaXR5ID0gMjA7CiAgICAgIHBhcnNlKGRhdGVTdHJpbmcpIHsKICAgICAgICByZXR1cm4gcGFyc2VBbnlEaWdpdHNTaWduZWQoZGF0ZVN0cmluZyk7CiAgICAgIH0KICAgICAgc2V0KGRhdGUsIF9mbGFncywgdmFsdWUyKSB7CiAgICAgICAgcmV0dXJuIFtjb25zdHJ1Y3RGcm9tKGRhdGUsIHZhbHVlMiksIHsgdGltZXN0YW1wSXNTZXQ6IHRydWUgfV07CiAgICAgIH0KICAgICAgaW5jb21wYXRpYmxlVG9rZW5zID0gIioiOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS9fbGliL3BhcnNlcnMuanMKdmFyIHBhcnNlcnM7CnZhciBpbml0X3BhcnNlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcGFyc2UvX2xpYi9wYXJzZXJzLmpzIigpIHsKICAgIGluaXRfRXJhUGFyc2VyKCk7CiAgICBpbml0X1llYXJQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9JU09XZWVrWWVhclBhcnNlcigpOwogICAgaW5pdF9FeHRlbmRlZFllYXJQYXJzZXIoKTsKICAgIGluaXRfUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lUXVhcnRlclBhcnNlcigpOwogICAgaW5pdF9Nb250aFBhcnNlcigpOwogICAgaW5pdF9TdGFuZEFsb25lTW9udGhQYXJzZXIoKTsKICAgIGluaXRfTG9jYWxXZWVrUGFyc2VyKCk7CiAgICBpbml0X0lTT1dlZWtQYXJzZXIoKTsKICAgIGluaXRfRGF0ZVBhcnNlcigpOwogICAgaW5pdF9EYXlPZlllYXJQYXJzZXIoKTsKICAgIGluaXRfRGF5UGFyc2VyKCk7CiAgICBpbml0X0xvY2FsRGF5UGFyc2VyKCk7CiAgICBpbml0X1N0YW5kQWxvbmVMb2NhbERheVBhcnNlcigpOwogICAgaW5pdF9JU09EYXlQYXJzZXIoKTsKICAgIGluaXRfQU1QTVBhcnNlcigpOwogICAgaW5pdF9BTVBNTWlkbmlnaHRQYXJzZXIoKTsKICAgIGluaXRfRGF5UGVyaW9kUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxdG8xMlBhcnNlcigpOwogICAgaW5pdF9Ib3VyMHRvMjNQYXJzZXIoKTsKICAgIGluaXRfSG91cjBUbzExUGFyc2VyKCk7CiAgICBpbml0X0hvdXIxVG8yNFBhcnNlcigpOwogICAgaW5pdF9NaW51dGVQYXJzZXIoKTsKICAgIGluaXRfU2Vjb25kUGFyc2VyKCk7CiAgICBpbml0X0ZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKTsKICAgIGluaXRfSVNPVGltZXpvbmVXaXRoWlBhcnNlcigpOwogICAgaW5pdF9JU09UaW1lem9uZVBhcnNlcigpOwogICAgaW5pdF9UaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCk7CiAgICBpbml0X1RpbWVzdGFtcE1pbGxpc2Vjb25kc1BhcnNlcigpOwogICAgcGFyc2VycyA9IHsKICAgICAgRzogbmV3IEVyYVBhcnNlcigpLAogICAgICB5OiBuZXcgWWVhclBhcnNlcigpLAogICAgICBZOiBuZXcgTG9jYWxXZWVrWWVhclBhcnNlcigpLAogICAgICBSOiBuZXcgSVNPV2Vla1llYXJQYXJzZXIoKSwKICAgICAgdTogbmV3IEV4dGVuZGVkWWVhclBhcnNlcigpLAogICAgICBROiBuZXcgUXVhcnRlclBhcnNlcigpLAogICAgICBxOiBuZXcgU3RhbmRBbG9uZVF1YXJ0ZXJQYXJzZXIoKSwKICAgICAgTTogbmV3IE1vbnRoUGFyc2VyKCksCiAgICAgIEw6IG5ldyBTdGFuZEFsb25lTW9udGhQYXJzZXIoKSwKICAgICAgdzogbmV3IExvY2FsV2Vla1BhcnNlcigpLAogICAgICBJOiBuZXcgSVNPV2Vla1BhcnNlcigpLAogICAgICBkOiBuZXcgRGF0ZVBhcnNlcigpLAogICAgICBEOiBuZXcgRGF5T2ZZZWFyUGFyc2VyKCksCiAgICAgIEU6IG5ldyBEYXlQYXJzZXIoKSwKICAgICAgZTogbmV3IExvY2FsRGF5UGFyc2VyKCksCiAgICAgIGM6IG5ldyBTdGFuZEFsb25lTG9jYWxEYXlQYXJzZXIoKSwKICAgICAgaTogbmV3IElTT0RheVBhcnNlcigpLAogICAgICBhOiBuZXcgQU1QTVBhcnNlcigpLAogICAgICBiOiBuZXcgQU1QTU1pZG5pZ2h0UGFyc2VyKCksCiAgICAgIEI6IG5ldyBEYXlQZXJpb2RQYXJzZXIoKSwKICAgICAgaDogbmV3IEhvdXIxdG8xMlBhcnNlcigpLAogICAgICBIOiBuZXcgSG91cjB0bzIzUGFyc2VyKCksCiAgICAgIEs6IG5ldyBIb3VyMFRvMTFQYXJzZXIoKSwKICAgICAgazogbmV3IEhvdXIxVG8yNFBhcnNlcigpLAogICAgICBtOiBuZXcgTWludXRlUGFyc2VyKCksCiAgICAgIHM6IG5ldyBTZWNvbmRQYXJzZXIoKSwKICAgICAgUzogbmV3IEZyYWN0aW9uT2ZTZWNvbmRQYXJzZXIoKSwKICAgICAgWDogbmV3IElTT1RpbWV6b25lV2l0aFpQYXJzZXIoKSwKICAgICAgeDogbmV3IElTT1RpbWV6b25lUGFyc2VyKCksCiAgICAgIHQ6IG5ldyBUaW1lc3RhbXBTZWNvbmRzUGFyc2VyKCksCiAgICAgIFQ6IG5ldyBUaW1lc3RhbXBNaWxsaXNlY29uZHNQYXJzZXIoKQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZS5qcwpmdW5jdGlvbiBwYXJzZShkYXRlU3RyLCBmb3JtYXRTdHIsIHJlZmVyZW5jZURhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBpbnZhbGlkRGF0ZSA9ICgpID0+IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgcmVmZXJlbmNlRGF0ZSwgTmFOKTsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9uczIoKTsKICBjb25zdCBsb2NhbGUgPSBvcHRpb25zPy5sb2NhbGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZSA/PyBlblVTOwogIGNvbnN0IGZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA9IG9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyBkZWZhdWx0T3B0aW9uczIuZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LmZpcnN0V2Vla0NvbnRhaW5zRGF0ZSA/PyAxOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGlmICghZm9ybWF0U3RyKQogICAgcmV0dXJuIGRhdGVTdHIgPyBpbnZhbGlkRGF0ZSgpIDogdG9EYXRlKHJlZmVyZW5jZURhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBzdWJGbk9wdGlvbnMgPSB7CiAgICBmaXJzdFdlZWtDb250YWluc0RhdGUsCiAgICB3ZWVrU3RhcnRzT24sCiAgICBsb2NhbGUKICB9OwogIGNvbnN0IHNldHRlcnMgPSBbbmV3IERhdGVUaW1lem9uZVNldHRlcihvcHRpb25zPy5pbiwgcmVmZXJlbmNlRGF0ZSldOwogIGNvbnN0IHRva2VucyA9IGZvcm1hdFN0ci5tYXRjaChsb25nRm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciBpbiBsb25nRm9ybWF0dGVycykgewogICAgICBjb25zdCBsb25nRm9ybWF0dGVyID0gbG9uZ0Zvcm1hdHRlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgICByZXR1cm4gbG9uZ0Zvcm1hdHRlcihzdWJzdHJpbmcsIGxvY2FsZS5mb3JtYXRMb25nKTsKICAgIH0KICAgIHJldHVybiBzdWJzdHJpbmc7CiAgfSkuam9pbigiIikubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDIpOwogIGNvbnN0IHVzZWRUb2tlbnMgPSBbXTsKICBmb3IgKGxldCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbFdlZWtZZWFyVG9rZW5zICYmIGlzUHJvdGVjdGVkV2Vla1llYXJUb2tlbih0b2tlbikpIHsKICAgICAgd2Fybk9yVGhyb3dQcm90ZWN0ZWRFcnJvcih0b2tlbiwgZm9ybWF0U3RyLCBkYXRlU3RyKTsKICAgIH0KICAgIGlmICghb3B0aW9ucz8udXNlQWRkaXRpb25hbERheU9mWWVhclRva2VucyAmJiBpc1Byb3RlY3RlZERheU9mWWVhclRva2VuKHRva2VuKSkgewogICAgICB3YXJuT3JUaHJvd1Byb3RlY3RlZEVycm9yKHRva2VuLCBmb3JtYXRTdHIsIGRhdGVTdHIpOwogICAgfQogICAgY29uc3QgZmlyc3RDaGFyYWN0ZXIgPSB0b2tlblswXTsKICAgIGNvbnN0IHBhcnNlciA9IHBhcnNlcnNbZmlyc3RDaGFyYWN0ZXJdOwogICAgaWYgKHBhcnNlcikgewogICAgICBjb25zdCB7IGluY29tcGF0aWJsZVRva2VucyB9ID0gcGFyc2VyOwogICAgICBpZiAoQXJyYXkuaXNBcnJheShpbmNvbXBhdGlibGVUb2tlbnMpKSB7CiAgICAgICAgY29uc3QgaW5jb21wYXRpYmxlVG9rZW4gPSB1c2VkVG9rZW5zLmZpbmQoCiAgICAgICAgICAodXNlZFRva2VuKSA9PiBpbmNvbXBhdGlibGVUb2tlbnMuaW5jbHVkZXModXNlZFRva2VuLnRva2VuKSB8fCB1c2VkVG9rZW4udG9rZW4gPT09IGZpcnN0Q2hhcmFjdGVyCiAgICAgICAgKTsKICAgICAgICBpZiAoaW5jb21wYXRpYmxlVG9rZW4pIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgICBgVGhlIGZvcm1hdCBzdHJpbmcgbXVzdG4ndCBjb250YWluIFxgJHtpbmNvbXBhdGlibGVUb2tlbi5mdWxsVG9rZW59XGAgYW5kIFxgJHt0b2tlbn1cYCBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAocGFyc2VyLmluY29tcGF0aWJsZVRva2VucyA9PT0gIioiICYmIHVzZWRUb2tlbnMubGVuZ3RoID4gMCkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgYFRoZSBmb3JtYXQgc3RyaW5nIG11c3RuJ3QgY29udGFpbiBcYCR7dG9rZW59XGAgYW5kIGFueSBvdGhlciB0b2tlbiBhdCB0aGUgc2FtZSB0aW1lYAogICAgICAgICk7CiAgICAgIH0KICAgICAgdXNlZFRva2Vucy5wdXNoKHsgdG9rZW46IGZpcnN0Q2hhcmFjdGVyLCBmdWxsVG9rZW46IHRva2VuIH0pOwogICAgICBjb25zdCBwYXJzZVJlc3VsdCA9IHBhcnNlci5ydW4oCiAgICAgICAgZGF0ZVN0ciwKICAgICAgICB0b2tlbiwKICAgICAgICBsb2NhbGUubWF0Y2gsCiAgICAgICAgc3ViRm5PcHRpb25zCiAgICAgICk7CiAgICAgIGlmICghcGFyc2VSZXN1bHQpIHsKICAgICAgICByZXR1cm4gaW52YWxpZERhdGUoKTsKICAgICAgfQogICAgICBzZXR0ZXJzLnB1c2gocGFyc2VSZXN1bHQuc2V0dGVyKTsKICAgICAgZGF0ZVN0ciA9IHBhcnNlUmVzdWx0LnJlc3Q7CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3RDaGFyYWN0ZXIubWF0Y2godW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAyKSkgewogICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKAogICAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodG9rZW4gPT09ICInJyIpIHsKICAgICAgICB0b2tlbiA9ICInIjsKICAgICAgfSBlbHNlIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgICAgdG9rZW4gPSBjbGVhbkVzY2FwZWRTdHJpbmcyKHRva2VuKTsKICAgICAgfQogICAgICBpZiAoZGF0ZVN0ci5pbmRleE9mKHRva2VuKSA9PT0gMCkgewogICAgICAgIGRhdGVTdHIgPSBkYXRlU3RyLnNsaWNlKHRva2VuLmxlbmd0aCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGludmFsaWREYXRlKCk7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKGRhdGVTdHIubGVuZ3RoID4gMCAmJiBub3RXaGl0ZXNwYWNlUmVnRXhwLnRlc3QoZGF0ZVN0cikpIHsKICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBjb25zdCB1bmlxdWVQcmlvcml0eVNldHRlcnMgPSBzZXR0ZXJzLm1hcCgoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkpLnNvcnQoKGE1LCBiNSkgPT4gYjUgLSBhNSkuZmlsdGVyKChwcmlvcml0eSwgaW5kZXgyLCBhcnJheSkgPT4gYXJyYXkuaW5kZXhPZihwcmlvcml0eSkgPT09IGluZGV4MikubWFwKAogICAgKHByaW9yaXR5KSA9PiBzZXR0ZXJzLmZpbHRlcigoc2V0dGVyKSA9PiBzZXR0ZXIucHJpb3JpdHkgPT09IHByaW9yaXR5KS5zb3J0KChhNSwgYjUpID0+IGI1LnN1YlByaW9yaXR5IC0gYTUuc3ViUHJpb3JpdHkpCiAgKS5tYXAoKHNldHRlckFycmF5KSA9PiBzZXR0ZXJBcnJheVswXSk7CiAgbGV0IGRhdGUgPSB0b0RhdGUocmVmZXJlbmNlRGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrZGF0ZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIGNvbnN0IGZsYWdzID0ge307CiAgZm9yIChjb25zdCBzZXR0ZXIgb2YgdW5pcXVlUHJpb3JpdHlTZXR0ZXJzKSB7CiAgICBpZiAoIXNldHRlci52YWxpZGF0ZShkYXRlLCBzdWJGbk9wdGlvbnMpKSB7CiAgICAgIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogICAgfQogICAgY29uc3QgcmVzdWx0ID0gc2V0dGVyLnNldChkYXRlLCBmbGFncywgc3ViRm5PcHRpb25zKTsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlc3VsdCkpIHsKICAgICAgZGF0ZSA9IHJlc3VsdFswXTsKICAgICAgT2JqZWN0LmFzc2lnbihmbGFncywgcmVzdWx0WzFdKTsKICAgIH0gZWxzZSB7CiAgICAgIGRhdGUgPSByZXN1bHQ7CiAgICB9CiAgfQogIHJldHVybiBkYXRlOwp9CmZ1bmN0aW9uIGNsZWFuRXNjYXBlZFN0cmluZzIoaW5wdXQpIHsKICByZXR1cm4gaW5wdXQubWF0Y2goZXNjYXBlZFN0cmluZ1JlZ0V4cDIpWzFdLnJlcGxhY2UoZG91YmxlUXVvdGVSZWdFeHAyLCAiJyIpOwp9CnZhciBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiwgbG9uZ0Zvcm1hdHRpbmdUb2tlbnNSZWdFeHAyLCBlc2NhcGVkU3RyaW5nUmVnRXhwMiwgZG91YmxlUXVvdGVSZWdFeHAyLCBub3RXaGl0ZXNwYWNlUmVnRXhwLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIsIHBhcnNlX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdExvY2FsZSgpOwogICAgaW5pdF9sb25nRm9ybWF0dGVycygpOwogICAgaW5pdF9wcm90ZWN0ZWRUb2tlbnMoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIGluaXRfU2V0dGVyKCk7CiAgICBpbml0X3BhcnNlcnMoKTsKICAgIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAyID0gL1t5WVFxTUx3SWREZWNpaEhLa21zXW98KFx3KVwxKnwnJ3wnKCcnfFteJ10pKygnfCQpfC4vZzsKICAgIGxvbmdGb3JtYXR0aW5nVG9rZW5zUmVnRXhwMiA9IC9QK3ArfFArfHArfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDIgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMiA9IC8nJy9nOwogICAgbm90V2hpdGVzcGFjZVJlZ0V4cCA9IC9cUy87CiAgICB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDIgPSAvW2EtekEtWl0vOwogICAgcGFyc2VfZGVmYXVsdCA9IHBhcnNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTWF0Y2guanMKZnVuY3Rpb24gaXNNYXRjaDIoZGF0ZVN0ciwgZm9ybWF0U3RyLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzVmFsaWQocGFyc2UoZGF0ZVN0ciwgZm9ybWF0U3RyLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSwgb3B0aW9ucykpOwp9CnZhciBpc01hdGNoX2RlZmF1bHQ7CnZhciBpbml0X2lzTWF0Y2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNYXRjaC5qcyIoKSB7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfcGFyc2UoKTsKICAgIGlzTWF0Y2hfZGVmYXVsdCA9IGlzTWF0Y2gyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzTW9uZGF5LmpzCmZ1bmN0aW9uIGlzTW9uZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKS5nZXREYXkoKSA9PT0gMTsKfQp2YXIgaXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNNb25kYXkuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzTW9uZGF5X2RlZmF1bHQgPSBpc01vbmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1Bhc3QuanMKZnVuY3Rpb24gaXNQYXN0KGRhdGUpIHsKICByZXR1cm4gK3RvRGF0ZShkYXRlKSA8IERhdGUubm93KCk7Cn0KdmFyIGlzUGFzdF9kZWZhdWx0Owp2YXIgaW5pdF9pc1Bhc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNQYXN0LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1Bhc3RfZGVmYXVsdCA9IGlzUGFzdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcwpmdW5jdGlvbiBzdGFydE9mSG91cihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldE1pbnV0ZXMoMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mSG91cl9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mSG91ci5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkhvdXJfZGVmYXVsdCA9IHN0YXJ0T2ZIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUhvdXIuanMKZnVuY3Rpb24gaXNTYW1lSG91cihkYXRlTGVmdCwgZGF0ZVJpZ2h0LCBvcHRpb25zKSB7CiAgY29uc3QgW2RhdGVMZWZ0XywgZGF0ZVJpZ2h0X10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgZGF0ZUxlZnQsCiAgICBkYXRlUmlnaHQKICApOwogIHJldHVybiArc3RhcnRPZkhvdXIoZGF0ZUxlZnRfKSA9PT0gK3N0YXJ0T2ZIb3VyKGRhdGVSaWdodF8pOwp9CnZhciBpc1NhbWVIb3VyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUhvdXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lSG91ci5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZIb3VyKCk7CiAgICBpc1NhbWVIb3VyX2RlZmF1bHQgPSBpc1NhbWVIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVdlZWsuanMKZnVuY3Rpb24gaXNTYW1lV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZldlZWsobGF0ZXJEYXRlXywgb3B0aW9ucykgPT09ICtzdGFydE9mV2VlayhlYXJsaWVyRGF0ZV8sIG9wdGlvbnMpOwp9CnZhciBpc1NhbWVXZWVrX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVdlZWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lV2Vlay5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpbml0X3N0YXJ0T2ZXZWVrKCk7CiAgICBpc1NhbWVXZWVrX2RlZmF1bHQgPSBpc1NhbWVXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWsuanMKZnVuY3Rpb24gaXNTYW1lSVNPV2VlayhsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVdlZWsobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrLmpzIigpIHsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaXNTYW1lSVNPV2Vla19kZWZhdWx0ID0gaXNTYW1lSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBpc1NhbWVJU09XZWVrWWVhcihsYXRlckRhdGUsIGVhcmxpZXJEYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgW2xhdGVyRGF0ZV8sIGVhcmxpZXJEYXRlX10gPSBub3JtYWxpemVEYXRlcygKICAgIG9wdGlvbnM/LmluLAogICAgbGF0ZXJEYXRlLAogICAgZWFybGllckRhdGUKICApOwogIHJldHVybiArc3RhcnRPZklTT1dlZWtZZWFyKGxhdGVyRGF0ZV8pID09PSArc3RhcnRPZklTT1dlZWtZZWFyKGVhcmxpZXJEYXRlXyk7Cn0KdmFyIGlzU2FtZUlTT1dlZWtZZWFyX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZUlTT1dlZWtZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZUlTT1dlZWtZZWFyLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVJU09XZWVrWWVhcl9kZWZhdWx0ID0gaXNTYW1lSVNPV2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZk1pbnV0ZS5qcwpmdW5jdGlvbiBzdGFydE9mTWludXRlKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0U2Vjb25kcygwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHN0YXJ0T2ZNaW51dGVfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZk1pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mTWludXRlLmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzdGFydE9mTWludXRlX2RlZmF1bHQgPSBzdGFydE9mTWludXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZU1pbnV0ZS5qcwpmdW5jdGlvbiBpc1NhbWVNaW51dGUobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSkgewogIHJldHVybiArc3RhcnRPZk1pbnV0ZShsYXRlckRhdGUpID09PSArc3RhcnRPZk1pbnV0ZShlYXJsaWVyRGF0ZSk7Cn0KdmFyIGlzU2FtZU1pbnV0ZV9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNaW51dGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTWludXRlLmpzIigpIHsKICAgIGluaXRfc3RhcnRPZk1pbnV0ZSgpOwogICAgaXNTYW1lTWludXRlX2RlZmF1bHQgPSBpc1NhbWVNaW51dGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lTW9udGguanMKZnVuY3Rpb24gaXNTYW1lTW9udGgobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKSAmJiBsYXRlckRhdGVfLmdldE1vbnRoKCkgPT09IGVhcmxpZXJEYXRlXy5nZXRNb250aCgpOwp9CnZhciBpc1NhbWVNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVNb250aC5qcyIoKSB7CiAgICBpbml0X25vcm1hbGl6ZURhdGVzKCk7CiAgICBpc1NhbWVNb250aF9kZWZhdWx0ID0gaXNTYW1lTW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lUXVhcnRlci5qcwpmdW5jdGlvbiBpc1NhbWVRdWFydGVyKGxhdGVyRGF0ZSwgZWFybGllckRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBbZGF0ZUxlZnRfLCBkYXRlUmlnaHRfXSA9IG5vcm1hbGl6ZURhdGVzKAogICAgb3B0aW9ucz8uaW4sCiAgICBsYXRlckRhdGUsCiAgICBlYXJsaWVyRGF0ZQogICk7CiAgcmV0dXJuICtzdGFydE9mUXVhcnRlcihkYXRlTGVmdF8pID09PSArc3RhcnRPZlF1YXJ0ZXIoZGF0ZVJpZ2h0Xyk7Cn0KdmFyIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNTYW1lUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVRdWFydGVyLmpzIigpIHsKICAgIGluaXRfbm9ybWFsaXplRGF0ZXMoKTsKICAgIGluaXRfc3RhcnRPZlF1YXJ0ZXIoKTsKICAgIGlzU2FtZVF1YXJ0ZXJfZGVmYXVsdCA9IGlzU2FtZVF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZlNlY29uZC5qcwpmdW5jdGlvbiBzdGFydE9mU2Vjb25kKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TWlsbGlzZWNvbmRzKDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc3RhcnRPZlNlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mU2Vjb25kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZTZWNvbmQuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHN0YXJ0T2ZTZWNvbmRfZGVmYXVsdCA9IHN0YXJ0T2ZTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNTYW1lU2Vjb25kLmpzCmZ1bmN0aW9uIGlzU2FtZVNlY29uZChsYXRlckRhdGUsIGVhcmxpZXJEYXRlKSB7CiAgcmV0dXJuICtzdGFydE9mU2Vjb25kKGxhdGVyRGF0ZSkgPT09ICtzdGFydE9mU2Vjb25kKGVhcmxpZXJEYXRlKTsKfQp2YXIgaXNTYW1lU2Vjb25kX2RlZmF1bHQ7CnZhciBpbml0X2lzU2FtZVNlY29uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVTZWNvbmQuanMiKCkgewogICAgaW5pdF9zdGFydE9mU2Vjb25kKCk7CiAgICBpc1NhbWVTZWNvbmRfZGVmYXVsdCA9IGlzU2FtZVNlY29uZDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1NhbWVZZWFyLmpzCmZ1bmN0aW9uIGlzU2FtZVllYXIobGF0ZXJEYXRlLCBlYXJsaWVyRGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IFtsYXRlckRhdGVfLCBlYXJsaWVyRGF0ZV9dID0gbm9ybWFsaXplRGF0ZXMoCiAgICBvcHRpb25zPy5pbiwKICAgIGxhdGVyRGF0ZSwKICAgIGVhcmxpZXJEYXRlCiAgKTsKICByZXR1cm4gbGF0ZXJEYXRlXy5nZXRGdWxsWWVhcigpID09PSBlYXJsaWVyRGF0ZV8uZ2V0RnVsbFllYXIoKTsKfQp2YXIgaXNTYW1lWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1NhbWVZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzU2FtZVllYXIuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemVEYXRlcygpOwogICAgaXNTYW1lWWVhcl9kZWZhdWx0ID0gaXNTYW1lWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzCmZ1bmN0aW9uIGlzVGhpc0hvdXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVIb3VyKAogICAgdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc0hvdXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzSG91ciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNIb3VyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RoaXNIb3VyX2RlZmF1bHQgPSBpc1RoaXNIb3VyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMKZnVuY3Rpb24gaXNUaGlzSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZUlTT1dlZWsoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzSVNPV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNJU09XZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc0lTT1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrKCk7CiAgICBpc1RoaXNJU09XZWVrX2RlZmF1bHQgPSBpc1RoaXNJU09XZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01pbnV0ZS5qcwpmdW5jdGlvbiBpc1RoaXNNaW51dGUoZGF0ZSkgewogIHJldHVybiBpc1NhbWVNaW51dGUoZGF0ZSwgY29uc3RydWN0Tm93KGRhdGUpKTsKfQp2YXIgaXNUaGlzTWludXRlX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01pbnV0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNaW51dGUuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTWludXRlKCk7CiAgICBpc1RoaXNNaW51dGVfZGVmYXVsdCA9IGlzVGhpc01pbnV0ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNNb250aC5qcwpmdW5jdGlvbiBpc1RoaXNNb250aChkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZU1vbnRoKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc01vbnRoX2RlZmF1bHQ7CnZhciBpbml0X2lzVGhpc01vbnRoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc01vbnRoLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGlzVGhpc01vbnRoX2RlZmF1bHQgPSBpc1RoaXNNb250aDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzCmZ1bmN0aW9uIGlzVGhpc1F1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVRdWFydGVyKAogICAgY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBkYXRlKSwKICAgIGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbiB8fCBkYXRlKQogICk7Cn0KdmFyIGlzVGhpc1F1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfaXNUaGlzUXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNRdWFydGVyLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaXNUaGlzUXVhcnRlcl9kZWZhdWx0ID0gaXNUaGlzUXVhcnRlcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RoaXNTZWNvbmQuanMKZnVuY3Rpb24gaXNUaGlzU2Vjb25kKGRhdGUpIHsKICByZXR1cm4gaXNTYW1lU2Vjb25kKGRhdGUsIGNvbnN0cnVjdE5vdyhkYXRlKSk7Cn0KdmFyIGlzVGhpc1NlY29uZF9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNTZWNvbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzU2Vjb25kLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZVNlY29uZCgpOwogICAgaXNUaGlzU2Vjb25kX2RlZmF1bHQgPSBpc1RoaXNTZWNvbmQ7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUaGlzV2Vlay5qcwpmdW5jdGlvbiBpc1RoaXNXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gaXNTYW1lV2VlaygKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksCiAgICBvcHRpb25zCiAgKTsKfQp2YXIgaXNUaGlzV2Vla19kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNXZWVrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1dlZWsuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVXZWVrKCk7CiAgICBpc1RoaXNXZWVrX2RlZmF1bHQgPSBpc1RoaXNXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMKZnVuY3Rpb24gaXNUaGlzWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZVllYXIoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgY29uc3RydWN0Tm93KG9wdGlvbnM/LmluIHx8IGRhdGUpCiAgKTsKfQp2YXIgaXNUaGlzWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9pc1RoaXNZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGhpc1llYXIuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpc1RoaXNZZWFyX2RlZmF1bHQgPSBpc1RoaXNZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVGh1cnNkYXkuanMKZnVuY3Rpb24gaXNUaHVyc2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbikuZ2V0RGF5KCkgPT09IDQ7Cn0KdmFyIGlzVGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUaHVyc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RodXJzZGF5LmpzIigpIHsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBpc1RodXJzZGF5X2RlZmF1bHQgPSBpc1RodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVG9kYXkuanMKZnVuY3Rpb24gaXNUb2RheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGlzU2FtZURheSgKICAgIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgZGF0ZSksCiAgICBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSkKICApOwp9CnZhciBpc1RvZGF5X2RlZmF1bHQ7CnZhciBpbml0X2lzVG9kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNUb2RheS5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBpbml0X2lzU2FtZURheSgpOwogICAgaXNUb2RheV9kZWZhdWx0ID0gaXNUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzCmZ1bmN0aW9uIGlzVG9tb3Jyb3coZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBkYXRlLAogICAgYWRkRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpLAogICAgb3B0aW9ucwogICk7Cn0KdmFyIGlzVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfaXNUb21vcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1RvbW9ycm93LmpzIigpIHsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpc1RvbW9ycm93X2RlZmF1bHQgPSBpc1RvbW9ycm93OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcwpmdW5jdGlvbiBpc1R1ZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAyOwp9CnZhciBpc1R1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNUdWVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzVHVlc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNUdWVzZGF5X2RlZmF1bHQgPSBpc1R1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNXZWRuZXNkYXkuanMKZnVuY3Rpb24gaXNXZWRuZXNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pLmdldERheSgpID09PSAzOwp9CnZhciBpc1dlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9pc1dlZG5lc2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pc1dlZG5lc2RheS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaXNXZWRuZXNkYXlfZGVmYXVsdCA9IGlzV2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMKZnVuY3Rpb24gaXNXaXRoaW5JbnRlcnZhbChkYXRlLCBpbnRlcnZhbDMsIG9wdGlvbnMpIHsKICBjb25zdCB0aW1lID0gK3RvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgW3N0YXJ0VGltZSwgZW5kVGltZV0gPSBbCiAgICArdG9EYXRlKGludGVydmFsMy5zdGFydCwgb3B0aW9ucz8uaW4pLAogICAgK3RvRGF0ZShpbnRlcnZhbDMuZW5kLCBvcHRpb25zPy5pbikKICBdLnNvcnQoKGE1LCBiNSkgPT4gYTUgLSBiNSk7CiAgcmV0dXJuIHRpbWUgPj0gc3RhcnRUaW1lICYmIHRpbWUgPD0gZW5kVGltZTsKfQp2YXIgaXNXaXRoaW5JbnRlcnZhbF9kZWZhdWx0Owp2YXIgaW5pdF9pc1dpdGhpbkludGVydmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2lzV2l0aGluSW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGlzV2l0aGluSW50ZXJ2YWxfZGVmYXVsdCA9IGlzV2l0aGluSW50ZXJ2YWw7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcwpmdW5jdGlvbiBzdWJEYXlzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGREYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJEYXlzX2RlZmF1bHQ7CnZhciBpbml0X3N1YkRheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIHN1YkRheXNfZGVmYXVsdCA9IHN1YkRheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMKZnVuY3Rpb24gaXNZZXN0ZXJkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBpc1NhbWVEYXkoCiAgICBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIGRhdGUpLAogICAgc3ViRGF5cyhjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4gfHwgZGF0ZSksIDEpCiAgKTsKfQp2YXIgaXNZZXN0ZXJkYXlfZGVmYXVsdDsKdmFyIGluaXRfaXNZZXN0ZXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvaXNZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2NvbnN0cnVjdE5vdygpOwogICAgaW5pdF9pc1NhbWVEYXkoKTsKICAgIGluaXRfc3ViRGF5cygpOwogICAgaXNZZXN0ZXJkYXlfZGVmYXVsdCA9IGlzWWVzdGVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZEZWNhZGUoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gX2RhdGUuZ2V0RnVsbFllYXIoKTsKICBjb25zdCBkZWNhZGUgPSA5ICsgTWF0aC5mbG9vcih5ZWFyIC8gMTApICogMTA7CiAgX2RhdGUuc2V0RnVsbFllYXIoZGVjYWRlICsgMSwgMCwgMCk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIHRvRGF0ZShfZGF0ZSwgb3B0aW9ucz8uaW4pOwp9CnZhciBsYXN0RGF5T2ZEZWNhZGVfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mRGVjYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgbGFzdERheU9mRGVjYWRlX2RlZmF1bHQgPSBsYXN0RGF5T2ZEZWNhZGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mV2Vlay5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZXZWVrKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkZWZhdWx0T3B0aW9uczIgPSBnZXREZWZhdWx0T3B0aW9ucygpOwogIGNvbnN0IHdlZWtTdGFydHNPbiA9IG9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBvcHRpb25zPy5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyBkZWZhdWx0T3B0aW9uczIud2Vla1N0YXJ0c09uID8/IGRlZmF1bHRPcHRpb25zMi5sb2NhbGU/Lm9wdGlvbnM/LndlZWtTdGFydHNPbiA/PyAwOwogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBkYXkgPSBfZGF0ZS5nZXREYXkoKTsKICBjb25zdCBkaWZmID0gKGRheSA8IHdlZWtTdGFydHNPbiA/IC03IDogMCkgKyA2IC0gKGRheSAtIHdlZWtTdGFydHNPbik7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgX2RhdGUuc2V0RGF0ZShfZGF0ZS5nZXREYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gX2RhdGU7Cn0KdmFyIGxhc3REYXlPZldlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZXZWVrLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBsYXN0RGF5T2ZXZWVrX2RlZmF1bHQgPSBsYXN0RGF5T2ZXZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZklTT1dlZWsuanMKZnVuY3Rpb24gbGFzdERheU9mSVNPV2VlayhkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIGxhc3REYXlPZldlZWsoZGF0ZSwgeyAuLi5vcHRpb25zLCB3ZWVrU3RhcnRzT246IDEgfSk7Cn0KdmFyIGxhc3REYXlPZklTT1dlZWtfZGVmYXVsdDsKdmFyIGluaXRfbGFzdERheU9mSVNPV2VlayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrLmpzIigpIHsKICAgIGluaXRfbGFzdERheU9mV2VlaygpOwogICAgbGFzdERheU9mSVNPV2Vla19kZWZhdWx0ID0gbGFzdERheU9mSVNPV2VlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZJU09XZWVrWWVhcihkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgeWVhciA9IGdldElTT1dlZWtZZWFyKGRhdGUsIG9wdGlvbnMpOwogIGNvbnN0IGZvdXJ0aE9mSmFudWFyeSA9IGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgMCk7CiAgZm91cnRoT2ZKYW51YXJ5LnNldEZ1bGxZZWFyKHllYXIgKyAxLCAwLCA0KTsKICBmb3VydGhPZkphbnVhcnkuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mSVNPV2Vlayhmb3VydGhPZkphbnVhcnksIG9wdGlvbnMpOwogIGRhdGVfLnNldERhdGUoZGF0ZV8uZ2V0RGF0ZSgpIC0gMSk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBsYXN0RGF5T2ZJU09XZWVrWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZJU09XZWVrWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZJU09XZWVrWWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGxhc3REYXlPZklTT1dlZWtZZWFyX2RlZmF1bHQgPSBsYXN0RGF5T2ZJU09XZWVrWWVhcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9sYXN0RGF5T2ZRdWFydGVyLmpzCmZ1bmN0aW9uIGxhc3REYXlPZlF1YXJ0ZXIoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBjdXJyZW50TW9udGggPSBkYXRlXy5nZXRNb250aCgpOwogIGNvbnN0IG1vbnRoID0gY3VycmVudE1vbnRoIC0gY3VycmVudE1vbnRoICUgMyArIDM7CiAgZGF0ZV8uc2V0TW9udGgobW9udGgsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mUXVhcnRlcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZRdWFydGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlF1YXJ0ZXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlF1YXJ0ZXJfZGVmYXVsdCA9IGxhc3REYXlPZlF1YXJ0ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGFzdERheU9mWWVhci5qcwpmdW5jdGlvbiBsYXN0RGF5T2ZZZWFyKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IGRhdGVfLmdldEZ1bGxZZWFyKCk7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhciArIDEsIDAsIDApOwogIGRhdGVfLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlXzsKfQp2YXIgbGFzdERheU9mWWVhcl9kZWZhdWx0Owp2YXIgaW5pdF9sYXN0RGF5T2ZZZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xhc3REYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIGxhc3REYXlPZlllYXJfZGVmYXVsdCA9IGxhc3REYXlPZlllYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbGlnaHRGb3JtYXQuanMKZnVuY3Rpb24gbGlnaHRGb3JtYXQoZGF0ZSwgZm9ybWF0U3RyKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSk7CiAgaWYgKCFpc1ZhbGlkKGRhdGVfKSkgewogICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdGltZSB2YWx1ZSIpOwogIH0KICBjb25zdCB0b2tlbnMgPSBmb3JtYXRTdHIubWF0Y2goZm9ybWF0dGluZ1Rva2Vuc1JlZ0V4cDMpOwogIGlmICghdG9rZW5zKSByZXR1cm4gIiI7CiAgY29uc3QgcmVzdWx0ID0gdG9rZW5zLm1hcCgoc3Vic3RyaW5nKSA9PiB7CiAgICBpZiAoc3Vic3RyaW5nID09PSAiJyciKSB7CiAgICAgIHJldHVybiAiJyI7CiAgICB9CiAgICBjb25zdCBmaXJzdENoYXJhY3RlciA9IHN1YnN0cmluZ1swXTsKICAgIGlmIChmaXJzdENoYXJhY3RlciA9PT0gIiciKSB7CiAgICAgIHJldHVybiBjbGVhbkVzY2FwZWRTdHJpbmczKHN1YnN0cmluZyk7CiAgICB9CiAgICBjb25zdCBmb3JtYXR0ZXIyID0gbGlnaHRGb3JtYXR0ZXJzW2ZpcnN0Q2hhcmFjdGVyXTsKICAgIGlmIChmb3JtYXR0ZXIyKSB7CiAgICAgIHJldHVybiBmb3JtYXR0ZXIyKGRhdGVfLCBzdWJzdHJpbmcpOwogICAgfQogICAgaWYgKGZpcnN0Q2hhcmFjdGVyLm1hdGNoKHVuZXNjYXBlZExhdGluQ2hhcmFjdGVyUmVnRXhwMykpIHsKICAgICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoCiAgICAgICAgIkZvcm1hdCBzdHJpbmcgY29udGFpbnMgYW4gdW5lc2NhcGVkIGxhdGluIGFscGhhYmV0IGNoYXJhY3RlciBgIiArIGZpcnN0Q2hhcmFjdGVyICsgImAiCiAgICAgICk7CiAgICB9CiAgICByZXR1cm4gc3Vic3RyaW5nOwogIH0pLmpvaW4oIiIpOwogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2xlYW5Fc2NhcGVkU3RyaW5nMyhpbnB1dCkgewogIGNvbnN0IG1hdGNoZXMgPSBpbnB1dC5tYXRjaChlc2NhcGVkU3RyaW5nUmVnRXhwMyk7CiAgaWYgKCFtYXRjaGVzKSByZXR1cm4gaW5wdXQ7CiAgcmV0dXJuIG1hdGNoZXNbMV0ucmVwbGFjZShkb3VibGVRdW90ZVJlZ0V4cDMsICInIik7Cn0KdmFyIGZvcm1hdHRpbmdUb2tlbnNSZWdFeHAzLCBlc2NhcGVkU3RyaW5nUmVnRXhwMywgZG91YmxlUXVvdGVSZWdFeHAzLCB1bmVzY2FwZWRMYXRpbkNoYXJhY3RlclJlZ0V4cDMsIGxpZ2h0Rm9ybWF0X2RlZmF1bHQ7CnZhciBpbml0X2xpZ2h0Rm9ybWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2xpZ2h0Rm9ybWF0LmpzIigpIHsKICAgIGluaXRfbGlnaHRGb3JtYXR0ZXJzKCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBmb3JtYXR0aW5nVG9rZW5zUmVnRXhwMyA9IC8oXHcpXDEqfCcnfCcoJyd8W14nXSkrKCd8JCl8Li9nOwogICAgZXNjYXBlZFN0cmluZ1JlZ0V4cDMgPSAvXicoW15dKj8pJz8kLzsKICAgIGRvdWJsZVF1b3RlUmVnRXhwMyA9IC8nJy9nOwogICAgdW5lc2NhcGVkTGF0aW5DaGFyYWN0ZXJSZWdFeHAzID0gL1thLXpBLVpdLzsKICAgIGxpZ2h0Rm9ybWF0X2RlZmF1bHQgPSBsaWdodEZvcm1hdDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzKHsKICB5ZWFycywKICBtb250aHM6IG1vbnRoczIsCiAgd2Vla3MsCiAgZGF5czogZGF5czIsCiAgaG91cnMsCiAgbWludXRlcywKICBzZWNvbmRzCn0pIHsKICBsZXQgdG90YWxEYXlzID0gMDsKICBpZiAoeWVhcnMpIHRvdGFsRGF5cyArPSB5ZWFycyAqIGRheXNJblllYXI7CiAgaWYgKG1vbnRoczIpIHRvdGFsRGF5cyArPSBtb250aHMyICogKGRheXNJblllYXIgLyAxMik7CiAgaWYgKHdlZWtzKSB0b3RhbERheXMgKz0gd2Vla3MgKiA3OwogIGlmIChkYXlzMikgdG90YWxEYXlzICs9IGRheXMyOwogIGxldCB0b3RhbFNlY29uZHMgPSB0b3RhbERheXMgKiAyNCAqIDYwICogNjA7CiAgaWYgKGhvdXJzKSB0b3RhbFNlY29uZHMgKz0gaG91cnMgKiA2MCAqIDYwOwogIGlmIChtaW51dGVzKSB0b3RhbFNlY29uZHMgKz0gbWludXRlcyAqIDYwOwogIGlmIChzZWNvbmRzKSB0b3RhbFNlY29uZHMgKz0gc2Vjb25kczsKICByZXR1cm4gTWF0aC50cnVuYyh0b3RhbFNlY29uZHMgKiAxZTMpOwp9CnZhciBtaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcwpmdW5jdGlvbiBtaWxsaXNlY29uZHNUb0hvdXJzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBob3VycyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJbkhvdXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoaG91cnMpOwp9CnZhciBtaWxsaXNlY29uZHNUb0hvdXJzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9Ib3Vycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9Ib3Vyc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb01pbnV0ZXMuanMKZnVuY3Rpb24gbWlsbGlzZWNvbmRzVG9NaW51dGVzKG1pbGxpc2Vjb25kczIpIHsKICBjb25zdCBtaW51dGVzID0gbWlsbGlzZWNvbmRzMiAvIG1pbGxpc2Vjb25kc0luTWludXRlOwogIHJldHVybiBNYXRoLnRydW5jKG1pbnV0ZXMpOwp9CnZhciBtaWxsaXNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdDsKdmFyIGluaXRfbWlsbGlzZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbGxpc2Vjb25kc1RvTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWlsbGlzZWNvbmRzVG9NaW51dGVzX2RlZmF1bHQgPSBtaWxsaXNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWlsbGlzZWNvbmRzVG9TZWNvbmRzLmpzCmZ1bmN0aW9uIG1pbGxpc2Vjb25kc1RvU2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgY29uc3Qgc2Vjb25kcyA9IG1pbGxpc2Vjb25kczIgLyBtaWxsaXNlY29uZHNJblNlY29uZDsKICByZXR1cm4gTWF0aC50cnVuYyhzZWNvbmRzKTsKfQp2YXIgbWlsbGlzZWNvbmRzVG9TZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X21pbGxpc2Vjb25kc1RvU2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taWxsaXNlY29uZHNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbGxpc2Vjb25kc1RvU2Vjb25kc19kZWZhdWx0ID0gbWlsbGlzZWNvbmRzVG9TZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb0hvdXJzLmpzCmZ1bmN0aW9uIG1pbnV0ZXNUb0hvdXJzKG1pbnV0ZXMpIHsKICBjb25zdCBob3VycyA9IG1pbnV0ZXMgLyBtaW51dGVzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgbWludXRlc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb0hvdXJzX2RlZmF1bHQgPSBtaW51dGVzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9taW51dGVzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gbWludXRlc1RvTWlsbGlzZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogbWlsbGlzZWNvbmRzSW5NaW51dGUpOwp9CnZhciBtaW51dGVzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbWludXRlc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBtaW51dGVzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbWludXRlc1RvU2Vjb25kcy5qcwpmdW5jdGlvbiBtaW51dGVzVG9TZWNvbmRzKG1pbnV0ZXMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzICogc2Vjb25kc0luTWludXRlKTsKfQp2YXIgbWludXRlc1RvU2Vjb25kc19kZWZhdWx0Owp2YXIgaW5pdF9taW51dGVzVG9TZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL21pbnV0ZXNUb1NlY29uZHMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIG1pbnV0ZXNUb1NlY29uZHNfZGVmYXVsdCA9IG1pbnV0ZXNUb1NlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcwpmdW5jdGlvbiBtb250aHNUb1F1YXJ0ZXJzKG1vbnRoczIpIHsKICBjb25zdCBxdWFydGVycyA9IG1vbnRoczIgLyBtb250aHNJblF1YXJ0ZXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMocXVhcnRlcnMpOwp9CnZhciBtb250aHNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X21vbnRoc1RvUXVhcnRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbW9udGhzVG9RdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgbW9udGhzVG9RdWFydGVyc19kZWZhdWx0ID0gbW9udGhzVG9RdWFydGVyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzCmZ1bmN0aW9uIG1vbnRoc1RvWWVhcnMobW9udGhzMikgewogIGNvbnN0IHllYXJzID0gbW9udGhzMiAvIG1vbnRoc0luWWVhcjsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyk7Cn0KdmFyIG1vbnRoc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfbW9udGhzVG9ZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9tb250aHNUb1llYXJzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBtb250aHNUb1llYXJzX2RlZmF1bHQgPSBtb250aHNUb1llYXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHREYXkuanMKZnVuY3Rpb24gbmV4dERheShkYXRlLCBkYXksIG9wdGlvbnMpIHsKICBsZXQgZGVsdGEgPSBkYXkgLSBnZXREYXkoZGF0ZSwgb3B0aW9ucyk7CiAgaWYgKGRlbHRhIDw9IDApIGRlbHRhICs9IDc7CiAgcmV0dXJuIGFkZERheXMoZGF0ZSwgZGVsdGEsIG9wdGlvbnMpOwp9CnZhciBuZXh0RGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHREYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dERheS5qcyIoKSB7CiAgICBpbml0X2FkZERheXMoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBuZXh0RGF5X2RlZmF1bHQgPSBuZXh0RGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRGcmlkYXkuanMKZnVuY3Rpb24gbmV4dEZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNSwgb3B0aW9ucyk7Cn0KdmFyIG5leHRGcmlkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dEZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0RnJpZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dEZyaWRheV9kZWZhdWx0ID0gbmV4dEZyaWRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9uZXh0TW9uZGF5LmpzCmZ1bmN0aW9uIG5leHRNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDEsIG9wdGlvbnMpOwp9CnZhciBuZXh0TW9uZGF5X2RlZmF1bHQ7CnZhciBpbml0X25leHRNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dE1vbmRheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRNb25kYXlfZGVmYXVsdCA9IG5leHRNb25kYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzCmZ1bmN0aW9uIG5leHRTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIG5leHREYXkoZGF0ZSwgNiwgb3B0aW9ucyk7Cn0KdmFyIG5leHRTYXR1cmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFNhdHVyZGF5LmpzIigpIHsKICAgIGluaXRfbmV4dERheSgpOwogICAgbmV4dFNhdHVyZGF5X2RlZmF1bHQgPSBuZXh0U2F0dXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFN1bmRheS5qcwpmdW5jdGlvbiBuZXh0U3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAwLCBvcHRpb25zKTsKfQp2YXIgbmV4dFN1bmRheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0U3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRTdW5kYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0U3VuZGF5X2RlZmF1bHQgPSBuZXh0U3VuZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcwpmdW5jdGlvbiBuZXh0VGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBuZXh0RGF5KGRhdGUsIDQsIG9wdGlvbnMpOwp9CnZhciBuZXh0VGh1cnNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFRodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUaHVyc2RheS5qcyIoKSB7CiAgICBpbml0X25leHREYXkoKTsKICAgIG5leHRUaHVyc2RheV9kZWZhdWx0ID0gbmV4dFRodXJzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRUdWVzZGF5LmpzCmZ1bmN0aW9uIG5leHRUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAyLCBvcHRpb25zKTsKfQp2YXIgbmV4dFR1ZXNkYXlfZGVmYXVsdDsKdmFyIGluaXRfbmV4dFR1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFR1ZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0VHVlc2RheV9kZWZhdWx0ID0gbmV4dFR1ZXNkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvbmV4dFdlZG5lc2RheS5qcwpmdW5jdGlvbiBuZXh0V2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gbmV4dERheShkYXRlLCAzLCBvcHRpb25zKTsKfQp2YXIgbmV4dFdlZG5lc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9uZXh0V2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL25leHRXZWRuZXNkYXkuanMiKCkgewogICAgaW5pdF9uZXh0RGF5KCk7CiAgICBuZXh0V2VkbmVzZGF5X2RlZmF1bHQgPSBuZXh0V2VkbmVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3BhcnNlSVNPLmpzCmZ1bmN0aW9uIHBhcnNlSVNPKGFyZ3VtZW50LCBvcHRpb25zKSB7CiAgY29uc3QgaW52YWxpZERhdGUgPSAoKSA9PiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCBOYU4pOwogIGNvbnN0IGFkZGl0aW9uYWxEaWdpdHMgPSBvcHRpb25zPy5hZGRpdGlvbmFsRGlnaXRzID8/IDI7CiAgY29uc3QgZGF0ZVN0cmluZ3MgPSBzcGxpdERhdGVTdHJpbmcoYXJndW1lbnQpOwogIGxldCBkYXRlOwogIGlmIChkYXRlU3RyaW5ncy5kYXRlKSB7CiAgICBjb25zdCBwYXJzZVllYXJSZXN1bHQgPSBwYXJzZVllYXIoZGF0ZVN0cmluZ3MuZGF0ZSwgYWRkaXRpb25hbERpZ2l0cyk7CiAgICBkYXRlID0gcGFyc2VEYXRlKHBhcnNlWWVhclJlc3VsdC5yZXN0RGF0ZVN0cmluZywgcGFyc2VZZWFyUmVzdWx0LnllYXIpOwogIH0KICBpZiAoIWRhdGUgfHwgaXNOYU4oK2RhdGUpKSByZXR1cm4gaW52YWxpZERhdGUoKTsKICBjb25zdCB0aW1lc3RhbXAyID0gK2RhdGU7CiAgbGV0IHRpbWUgPSAwOwogIGxldCBvZmZzZXQ7CiAgaWYgKGRhdGVTdHJpbmdzLnRpbWUpIHsKICAgIHRpbWUgPSBwYXJzZVRpbWUoZGF0ZVN0cmluZ3MudGltZSk7CiAgICBpZiAoaXNOYU4odGltZSkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0KICBpZiAoZGF0ZVN0cmluZ3MudGltZXpvbmUpIHsKICAgIG9mZnNldCA9IHBhcnNlVGltZXpvbmUoZGF0ZVN0cmluZ3MudGltZXpvbmUpOwogICAgaWYgKGlzTmFOKG9mZnNldCkpIHJldHVybiBpbnZhbGlkRGF0ZSgpOwogIH0gZWxzZSB7CiAgICBjb25zdCB0bXBEYXRlID0gbmV3IERhdGUodGltZXN0YW1wMiArIHRpbWUpOwogICAgY29uc3QgcmVzdWx0ID0gdG9EYXRlKDAsIG9wdGlvbnM/LmluKTsKICAgIHJlc3VsdC5zZXRGdWxsWWVhcigKICAgICAgdG1wRGF0ZS5nZXRVVENGdWxsWWVhcigpLAogICAgICB0bXBEYXRlLmdldFVUQ01vbnRoKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDRGF0ZSgpCiAgICApOwogICAgcmVzdWx0LnNldEhvdXJzKAogICAgICB0bXBEYXRlLmdldFVUQ0hvdXJzKCksCiAgICAgIHRtcERhdGUuZ2V0VVRDTWludXRlcygpLAogICAgICB0bXBEYXRlLmdldFVUQ1NlY29uZHMoKSwKICAgICAgdG1wRGF0ZS5nZXRVVENNaWxsaXNlY29uZHMoKQogICAgKTsKICAgIHJldHVybiByZXN1bHQ7CiAgfQogIHJldHVybiB0b0RhdGUodGltZXN0YW1wMiArIHRpbWUgKyBvZmZzZXQsIG9wdGlvbnM/LmluKTsKfQpmdW5jdGlvbiBzcGxpdERhdGVTdHJpbmcoZGF0ZVN0cmluZykgewogIGNvbnN0IGRhdGVTdHJpbmdzID0ge307CiAgY29uc3QgYXJyYXkgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLmRhdGVUaW1lRGVsaW1pdGVyKTsKICBsZXQgdGltZVN0cmluZzsKICBpZiAoYXJyYXkubGVuZ3RoID4gMikgewogICAgcmV0dXJuIGRhdGVTdHJpbmdzOwogIH0KICBpZiAoLzovLnRlc3QoYXJyYXlbMF0pKSB7CiAgICB0aW1lU3RyaW5nID0gYXJyYXlbMF07CiAgfSBlbHNlIHsKICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBhcnJheVswXTsKICAgIHRpbWVTdHJpbmcgPSBhcnJheVsxXTsKICAgIGlmIChwYXR0ZXJucy50aW1lWm9uZURlbGltaXRlci50ZXN0KGRhdGVTdHJpbmdzLmRhdGUpKSB7CiAgICAgIGRhdGVTdHJpbmdzLmRhdGUgPSBkYXRlU3RyaW5nLnNwbGl0KHBhdHRlcm5zLnRpbWVab25lRGVsaW1pdGVyKVswXTsKICAgICAgdGltZVN0cmluZyA9IGRhdGVTdHJpbmcuc3Vic3RyKAogICAgICAgIGRhdGVTdHJpbmdzLmRhdGUubGVuZ3RoLAogICAgICAgIGRhdGVTdHJpbmcubGVuZ3RoCiAgICAgICk7CiAgICB9CiAgfQogIGlmICh0aW1lU3RyaW5nKSB7CiAgICBjb25zdCB0b2tlbiA9IHBhdHRlcm5zLnRpbWV6b25lLmV4ZWModGltZVN0cmluZyk7CiAgICBpZiAodG9rZW4pIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmcucmVwbGFjZSh0b2tlblsxXSwgIiIpOwogICAgICBkYXRlU3RyaW5ncy50aW1lem9uZSA9IHRva2VuWzFdOwogICAgfSBlbHNlIHsKICAgICAgZGF0ZVN0cmluZ3MudGltZSA9IHRpbWVTdHJpbmc7CiAgICB9CiAgfQogIHJldHVybiBkYXRlU3RyaW5nczsKfQpmdW5jdGlvbiBwYXJzZVllYXIoZGF0ZVN0cmluZywgYWRkaXRpb25hbERpZ2l0cykgewogIGNvbnN0IHJlZ2V4ID0gbmV3IFJlZ0V4cCgKICAgICJeKD86KFxcZHs0fXxbKy1dXFxkeyIgKyAoNCArIGFkZGl0aW9uYWxEaWdpdHMpICsgIn0pfChcXGR7Mn18WystXVxcZHsiICsgKDIgKyBhZGRpdGlvbmFsRGlnaXRzKSArICJ9KSQpIgogICk7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKHJlZ2V4KTsKICBpZiAoIWNhcHR1cmVzKSByZXR1cm4geyB5ZWFyOiBOYU4sIHJlc3REYXRlU3RyaW5nOiAiIiB9OwogIGNvbnN0IHllYXIgPSBjYXB0dXJlc1sxXSA/IHBhcnNlSW50KGNhcHR1cmVzWzFdKSA6IG51bGw7CiAgY29uc3QgY2VudHVyeSA9IGNhcHR1cmVzWzJdID8gcGFyc2VJbnQoY2FwdHVyZXNbMl0pIDogbnVsbDsKICByZXR1cm4gewogICAgeWVhcjogY2VudHVyeSA9PT0gbnVsbCA/IHllYXIgOiBjZW50dXJ5ICogMTAwLAogICAgcmVzdERhdGVTdHJpbmc6IGRhdGVTdHJpbmcuc2xpY2UoKGNhcHR1cmVzWzFdIHx8IGNhcHR1cmVzWzJdKS5sZW5ndGgpCiAgfTsKfQpmdW5jdGlvbiBwYXJzZURhdGUoZGF0ZVN0cmluZywgeWVhcikgewogIGlmICh5ZWFyID09PSBudWxsKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgY29uc3QgY2FwdHVyZXMgPSBkYXRlU3RyaW5nLm1hdGNoKGRhdGVSZWdleCk7CiAgaWYgKCFjYXB0dXJlcykgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogIGNvbnN0IGlzV2Vla0RhdGUgPSAhIWNhcHR1cmVzWzRdOwogIGNvbnN0IGRheU9mWWVhciA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbMV0pOwogIGNvbnN0IG1vbnRoID0gcGFyc2VEYXRlVW5pdChjYXB0dXJlc1syXSkgLSAxOwogIGNvbnN0IGRheSA9IHBhcnNlRGF0ZVVuaXQoY2FwdHVyZXNbM10pOwogIGNvbnN0IHdlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzRdKTsKICBjb25zdCBkYXlPZldlZWsgPSBwYXJzZURhdGVVbml0KGNhcHR1cmVzWzVdKSAtIDE7CiAgaWYgKGlzV2Vla0RhdGUpIHsKICAgIGlmICghdmFsaWRhdGVXZWVrRGF0ZSh5ZWFyLCB3ZWVrLCBkYXlPZldlZWspKSB7CiAgICAgIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoTmFOKTsKICAgIH0KICAgIHJldHVybiBkYXlPZklTT1dlZWtZZWFyKHllYXIsIHdlZWssIGRheU9mV2Vlayk7CiAgfSBlbHNlIHsKICAgIGNvbnN0IGRhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoMCk7CiAgICBpZiAoIXZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF5KSB8fCAhdmFsaWRhdGVEYXlPZlllYXJEYXRlKHllYXIsIGRheU9mWWVhcikpIHsKICAgICAgcmV0dXJuIC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZShOYU4pOwogICAgfQogICAgZGF0ZS5zZXRVVENGdWxsWWVhcih5ZWFyLCBtb250aCwgTWF0aC5tYXgoZGF5T2ZZZWFyLCBkYXkpKTsKICAgIHJldHVybiBkYXRlOwogIH0KfQpmdW5jdGlvbiBwYXJzZURhdGVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPyBwYXJzZUludCh2YWx1ZTIpIDogMTsKfQpmdW5jdGlvbiBwYXJzZVRpbWUodGltZVN0cmluZykgewogIGNvbnN0IGNhcHR1cmVzID0gdGltZVN0cmluZy5tYXRjaCh0aW1lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiBOYU47CiAgY29uc3QgaG91cnMgPSBwYXJzZVRpbWVVbml0KGNhcHR1cmVzWzFdKTsKICBjb25zdCBtaW51dGVzID0gcGFyc2VUaW1lVW5pdChjYXB0dXJlc1syXSk7CiAgY29uc3Qgc2Vjb25kcyA9IHBhcnNlVGltZVVuaXQoY2FwdHVyZXNbM10pOwogIGlmICghdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSkgewogICAgcmV0dXJuIE5hTjsKICB9CiAgcmV0dXJuIGhvdXJzICogbWlsbGlzZWNvbmRzSW5Ib3VyICsgbWludXRlcyAqIG1pbGxpc2Vjb25kc0luTWludXRlICsgc2Vjb25kcyAqIDFlMzsKfQpmdW5jdGlvbiBwYXJzZVRpbWVVbml0KHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgJiYgcGFyc2VGbG9hdCh2YWx1ZTIucmVwbGFjZSgiLCIsICIuIikpIHx8IDA7Cn0KZnVuY3Rpb24gcGFyc2VUaW1lem9uZSh0aW1lem9uZVN0cmluZykgewogIGlmICh0aW1lem9uZVN0cmluZyA9PT0gIloiKSByZXR1cm4gMDsKICBjb25zdCBjYXB0dXJlcyA9IHRpbWV6b25lU3RyaW5nLm1hdGNoKHRpbWV6b25lUmVnZXgpOwogIGlmICghY2FwdHVyZXMpIHJldHVybiAwOwogIGNvbnN0IHNpZ24gPSBjYXB0dXJlc1sxXSA9PT0gIisiID8gLTEgOiAxOwogIGNvbnN0IGhvdXJzID0gcGFyc2VJbnQoY2FwdHVyZXNbMl0pOwogIGNvbnN0IG1pbnV0ZXMgPSBjYXB0dXJlc1szXSAmJiBwYXJzZUludChjYXB0dXJlc1szXSkgfHwgMDsKICBpZiAoIXZhbGlkYXRlVGltZXpvbmUoaG91cnMsIG1pbnV0ZXMpKSB7CiAgICByZXR1cm4gTmFOOwogIH0KICByZXR1cm4gc2lnbiAqIChob3VycyAqIG1pbGxpc2Vjb25kc0luSG91ciArIG1pbnV0ZXMgKiBtaWxsaXNlY29uZHNJbk1pbnV0ZSk7Cn0KZnVuY3Rpb24gZGF5T2ZJU09XZWVrWWVhcihpc29XZWVrWWVhciwgd2VlaywgZGF5KSB7CiAgY29uc3QgZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgwKTsKICBkYXRlLnNldFVUQ0Z1bGxZZWFyKGlzb1dlZWtZZWFyLCAwLCA0KTsKICBjb25zdCBmb3VydGhPZkphbnVhcnlEYXkgPSBkYXRlLmdldFVUQ0RheSgpIHx8IDc7CiAgY29uc3QgZGlmZiA9ICh3ZWVrIC0gMSkgKiA3ICsgZGF5ICsgMSAtIGZvdXJ0aE9mSmFudWFyeURheTsKICBkYXRlLnNldFVUQ0RhdGUoZGF0ZS5nZXRVVENEYXRlKCkgKyBkaWZmKTsKICByZXR1cm4gZGF0ZTsKfQpmdW5jdGlvbiBpc0xlYXBZZWFySW5kZXgyKHllYXIpIHsKICByZXR1cm4geWVhciAlIDQwMCA9PT0gMCB8fCB5ZWFyICUgNCA9PT0gMCAmJiB5ZWFyICUgMTAwICE9PSAwOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF0ZSh5ZWFyLCBtb250aCwgZGF0ZSkgewogIHJldHVybiBtb250aCA+PSAwICYmIG1vbnRoIDw9IDExICYmIGRhdGUgPj0gMSAmJiBkYXRlIDw9IChkYXlzSW5Nb250aHNbbW9udGhdIHx8IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMjkgOiAyOCkpOwp9CmZ1bmN0aW9uIHZhbGlkYXRlRGF5T2ZZZWFyRGF0ZSh5ZWFyLCBkYXlPZlllYXIpIHsKICByZXR1cm4gZGF5T2ZZZWFyID49IDEgJiYgZGF5T2ZZZWFyIDw9IChpc0xlYXBZZWFySW5kZXgyKHllYXIpID8gMzY2IDogMzY1KTsKfQpmdW5jdGlvbiB2YWxpZGF0ZVdlZWtEYXRlKF95ZWFyLCB3ZWVrLCBkYXkpIHsKICByZXR1cm4gd2VlayA+PSAxICYmIHdlZWsgPD0gNTMgJiYgZGF5ID49IDAgJiYgZGF5IDw9IDY7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lKGhvdXJzLCBtaW51dGVzLCBzZWNvbmRzKSB7CiAgaWYgKGhvdXJzID09PSAyNCkgewogICAgcmV0dXJuIG1pbnV0ZXMgPT09IDAgJiYgc2Vjb25kcyA9PT0gMDsKICB9CiAgcmV0dXJuIHNlY29uZHMgPj0gMCAmJiBzZWNvbmRzIDwgNjAgJiYgbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPCA2MCAmJiBob3VycyA+PSAwICYmIGhvdXJzIDwgMjU7Cn0KZnVuY3Rpb24gdmFsaWRhdGVUaW1lem9uZShfaG91cnMsIG1pbnV0ZXMpIHsKICByZXR1cm4gbWludXRlcyA+PSAwICYmIG1pbnV0ZXMgPD0gNTk7Cn0KdmFyIHBhdHRlcm5zLCBkYXRlUmVnZXgsIHRpbWVSZWdleCwgdGltZXpvbmVSZWdleCwgZGF5c0luTW9udGhzLCBwYXJzZUlTT19kZWZhdWx0Owp2YXIgaW5pdF9wYXJzZUlTTyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUlTTy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgcGF0dGVybnMgPSB7CiAgICAgIGRhdGVUaW1lRGVsaW1pdGVyOiAvW1QgXS8sCiAgICAgIHRpbWVab25lRGVsaW1pdGVyOiAvW1ogXS9pLAogICAgICB0aW1lem9uZTogLyhbWistXS4qKSQvCiAgICB9OwogICAgZGF0ZVJlZ2V4ID0gL14tPyg/OihcZHszfSl8KFxkezJ9KSg/Oi0/KFxkezJ9KSk/fFcoXGR7Mn0pKD86LT8oXGR7MX0pKT98KSQvOwogICAgdGltZVJlZ2V4ID0gL14oXGR7Mn0oPzpbLixdXGQqKT8pKD86Oj8oXGR7Mn0oPzpbLixdXGQqKT8pKT8oPzo6PyhcZHsyfSg/OlsuLF1cZCopPykpPyQvOwogICAgdGltZXpvbmVSZWdleCA9IC9eKFsrLV0pKFxkezJ9KSg/Ojo/KFxkezJ9KSk/JC87CiAgICBkYXlzSW5Nb250aHMgPSBbMzEsIG51bGwsIDMxLCAzMCwgMzEsIDMwLCAzMSwgMzEsIDMwLCAzMSwgMzAsIDMxXTsKICAgIHBhcnNlSVNPX2RlZmF1bHQgPSBwYXJzZUlTTzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMKZnVuY3Rpb24gcGFyc2VKU09OKGRhdGVTdHIsIG9wdGlvbnMpIHsKICBjb25zdCBwYXJ0cyA9IGRhdGVTdHIubWF0Y2goCiAgICAvKFxkezR9KS0oXGR7Mn0pLShcZHsyfSlbVCBdKFxkezJ9KTooXGR7Mn0pOihcZHsyfSkoPzpcLihcZHswLDd9KSk/KD86WnwoLikoXGR7Mn0pOj8oXGR7Mn0pPyk/LwogICk7CiAgaWYgKCFwYXJ0cykgcmV0dXJuIHRvRGF0ZShOYU4sIG9wdGlvbnM/LmluKTsKICByZXR1cm4gdG9EYXRlKAogICAgRGF0ZS5VVEMoCiAgICAgICtwYXJ0c1sxXSwKICAgICAgK3BhcnRzWzJdIC0gMSwKICAgICAgK3BhcnRzWzNdLAogICAgICArcGFydHNbNF0gLSAoK3BhcnRzWzldIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s1XSAtICgrcGFydHNbMTBdIHx8IDApICogKHBhcnRzWzhdID09ICItIiA/IC0xIDogMSksCiAgICAgICtwYXJ0c1s2XSwKICAgICAgKygocGFydHNbN10gfHwgIjAiKSArICIwMCIpLnN1YnN0cmluZygwLCAzKQogICAgKSwKICAgIG9wdGlvbnM/LmluCiAgKTsKfQp2YXIgcGFyc2VKU09OX2RlZmF1bHQ7CnZhciBpbml0X3BhcnNlSlNPTiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wYXJzZUpTT04uanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHBhcnNlSlNPTl9kZWZhdWx0ID0gcGFyc2VKU09OOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzRGF5KGRhdGUsIGRheSwgb3B0aW9ucykgewogIGxldCBkZWx0YSA9IGdldERheShkYXRlLCBvcHRpb25zKSAtIGRheTsKICBpZiAoZGVsdGEgPD0gMCkgZGVsdGEgKz0gNzsKICByZXR1cm4gc3ViRGF5cyhkYXRlLCBkZWx0YSwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzRGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzRGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzRGF5LmpzIigpIHsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIHByZXZpb3VzRGF5X2RlZmF1bHQgPSBwcmV2aW91c0RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcwpmdW5jdGlvbiBwcmV2aW91c0ZyaWRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDUsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c0ZyaWRheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c0ZyaWRheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c0ZyaWRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c0ZyaWRheV9kZWZhdWx0ID0gcHJldmlvdXNGcmlkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMKZnVuY3Rpb24gcHJldmlvdXNNb25kYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCAxLCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNNb25kYXlfZGVmYXVsdDsKdmFyIGluaXRfcHJldmlvdXNNb25kYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNNb25kYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNNb25kYXlfZGVmYXVsdCA9IHByZXZpb3VzTW9uZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU2F0dXJkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNTYXR1cmRheShkYXRlLCBvcHRpb25zKSB7CiAgcmV0dXJuIHByZXZpb3VzRGF5KGRhdGUsIDYsIG9wdGlvbnMpOwp9CnZhciBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU2F0dXJkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNTYXR1cmRheS5qcyIoKSB7CiAgICBpbml0X3ByZXZpb3VzRGF5KCk7CiAgICBwcmV2aW91c1NhdHVyZGF5X2RlZmF1bHQgPSBwcmV2aW91c1NhdHVyZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzU3VuZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMCwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzU3VuZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzU3VuZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzU3VuZGF5X2RlZmF1bHQgPSBwcmV2aW91c1N1bmRheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1RodXJzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzVGh1cnNkYXkoZGF0ZSwgb3B0aW9ucykgewogIHJldHVybiBwcmV2aW91c0RheShkYXRlLCA0LCBvcHRpb25zKTsKfQp2YXIgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1RodXJzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzVGh1cnNkYXkuanMiKCkgewogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgcHJldmlvdXNUaHVyc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUaHVyc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9wcmV2aW91c1R1ZXNkYXkuanMKZnVuY3Rpb24gcHJldmlvdXNUdWVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMiwgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0Owp2YXIgaW5pdF9wcmV2aW91c1R1ZXNkYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcHJldmlvdXNUdWVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzVHVlc2RheV9kZWZhdWx0ID0gcHJldmlvdXNUdWVzZGF5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzCmZ1bmN0aW9uIHByZXZpb3VzV2VkbmVzZGF5KGRhdGUsIG9wdGlvbnMpIHsKICByZXR1cm4gcHJldmlvdXNEYXkoZGF0ZSwgMywgb3B0aW9ucyk7Cn0KdmFyIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQ7CnZhciBpbml0X3ByZXZpb3VzV2VkbmVzZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3ByZXZpb3VzV2VkbmVzZGF5LmpzIigpIHsKICAgIGluaXRfcHJldmlvdXNEYXkoKTsKICAgIHByZXZpb3VzV2VkbmVzZGF5X2RlZmF1bHQgPSBwcmV2aW91c1dlZG5lc2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHF1YXJ0ZXJzVG9Nb250aHMocXVhcnRlcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyhxdWFydGVycyAqIG1vbnRoc0luUXVhcnRlcik7Cn0KdmFyIHF1YXJ0ZXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9xdWFydGVyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICBxdWFydGVyc1RvTW9udGhzX2RlZmF1bHQgPSBxdWFydGVyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcwpmdW5jdGlvbiBxdWFydGVyc1RvWWVhcnMocXVhcnRlcnMpIHsKICBjb25zdCB5ZWFycyA9IHF1YXJ0ZXJzIC8gcXVhcnRlcnNJblllYXI7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMpOwp9CnZhciBxdWFydGVyc1RvWWVhcnNfZGVmYXVsdDsKdmFyIGluaXRfcXVhcnRlcnNUb1llYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3F1YXJ0ZXJzVG9ZZWFycy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgcXVhcnRlcnNUb1llYXJzX2RlZmF1bHQgPSBxdWFydGVyc1RvWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdEhvdXJzKGRhdGUsIG9wdGlvbnMpIHsKICBjb25zdCBuZWFyZXN0VG8gPSBvcHRpb25zPy5uZWFyZXN0VG8gPz8gMTsKICBpZiAobmVhcmVzdFRvIDwgMSB8fCBuZWFyZXN0VG8gPiAxMikKICAgIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IGZyYWN0aW9uYWxNaW51dGVzID0gZGF0ZV8uZ2V0TWludXRlcygpIC8gNjA7CiAgY29uc3QgZnJhY3Rpb25hbFNlY29uZHMgPSBkYXRlXy5nZXRTZWNvbmRzKCkgLyA2MCAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwIC8gNjA7CiAgY29uc3QgaG91cnMgPSBkYXRlXy5nZXRIb3VycygpICsgZnJhY3Rpb25hbE1pbnV0ZXMgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZEhvdXJzID0gcm91bmRpbmdNZXRob2QoaG91cnMgLyBuZWFyZXN0VG8pICogbmVhcmVzdFRvOwogIGRhdGVfLnNldEhvdXJzKHJvdW5kZWRIb3VycywgMCwgMCwgMCk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQ7CnZhciBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RIb3Vycy5qcyIoKSB7CiAgICBpbml0X2dldFJvdW5kaW5nTWV0aG9kKCk7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICByb3VuZFRvTmVhcmVzdEhvdXJzX2RlZmF1bHQgPSByb3VuZFRvTmVhcmVzdEhvdXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3JvdW5kVG9OZWFyZXN0TWludXRlcy5qcwpmdW5jdGlvbiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMoZGF0ZSwgb3B0aW9ucykgewogIGNvbnN0IG5lYXJlc3RUbyA9IG9wdGlvbnM/Lm5lYXJlc3RUbyA/PyAxOwogIGlmIChuZWFyZXN0VG8gPCAxIHx8IG5lYXJlc3RUbyA+IDMwKSByZXR1cm4gY29uc3RydWN0RnJvbShkYXRlLCBOYU4pOwogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBmcmFjdGlvbmFsU2Vjb25kcyA9IGRhdGVfLmdldFNlY29uZHMoKSAvIDYwOwogIGNvbnN0IGZyYWN0aW9uYWxNaWxsaXNlY29uZHMgPSBkYXRlXy5nZXRNaWxsaXNlY29uZHMoKSAvIDFlMyAvIDYwOwogIGNvbnN0IG1pbnV0ZXMgPSBkYXRlXy5nZXRNaW51dGVzKCkgKyBmcmFjdGlvbmFsU2Vjb25kcyArIGZyYWN0aW9uYWxNaWxsaXNlY29uZHM7CiAgY29uc3QgbWV0aG9kID0gb3B0aW9ucz8ucm91bmRpbmdNZXRob2QgPz8gInJvdW5kIjsKICBjb25zdCByb3VuZGluZ01ldGhvZCA9IGdldFJvdW5kaW5nTWV0aG9kKG1ldGhvZCk7CiAgY29uc3Qgcm91bmRlZE1pbnV0ZXMgPSByb3VuZGluZ01ldGhvZChtaW51dGVzIC8gbmVhcmVzdFRvKSAqIG5lYXJlc3RUbzsKICBkYXRlXy5zZXRNaW51dGVzKHJvdW5kZWRNaW51dGVzLCAwLCAwKTsKICByZXR1cm4gZGF0ZV87Cn0KdmFyIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9yb3VuZFRvTmVhcmVzdE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvcm91bmRUb05lYXJlc3RNaW51dGVzLmpzIigpIHsKICAgIGluaXRfZ2V0Um91bmRpbmdNZXRob2QoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF90b0RhdGUoKTsKICAgIHJvdW5kVG9OZWFyZXN0TWludXRlc19kZWZhdWx0ID0gcm91bmRUb05lYXJlc3RNaW51dGVzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb0hvdXJzLmpzCmZ1bmN0aW9uIHNlY29uZHNUb0hvdXJzKHNlY29uZHMpIHsKICBjb25zdCBob3VycyA9IHNlY29uZHMgLyBzZWNvbmRzSW5Ib3VyOwogIHJldHVybiBNYXRoLnRydW5jKGhvdXJzKTsKfQp2YXIgc2Vjb25kc1RvSG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvSG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvSG91cnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb0hvdXJzX2RlZmF1bHQgPSBzZWNvbmRzVG9Ib3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZWNvbmRzVG9NaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2Vjb25kc1RvTWlsbGlzZWNvbmRzKHNlY29uZHMpIHsKICByZXR1cm4gc2Vjb25kcyAqIG1pbGxpc2Vjb25kc0luU2Vjb25kOwp9CnZhciBzZWNvbmRzVG9NaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc2Vjb25kc1RvTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgc2Vjb25kc1RvTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzZWNvbmRzVG9NaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2Vjb25kc1RvTWludXRlcy5qcwpmdW5jdGlvbiBzZWNvbmRzVG9NaW51dGVzKHNlY29uZHMpIHsKICBjb25zdCBtaW51dGVzID0gc2Vjb25kcyAvIHNlY29uZHNJbk1pbnV0ZTsKICByZXR1cm4gTWF0aC50cnVuYyhtaW51dGVzKTsKfQp2YXIgc2Vjb25kc1RvTWludXRlc19kZWZhdWx0Owp2YXIgaW5pdF9zZWNvbmRzVG9NaW51dGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NlY29uZHNUb01pbnV0ZXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHNlY29uZHNUb01pbnV0ZXNfZGVmYXVsdCA9IHNlY29uZHNUb01pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TW9udGguanMKZnVuY3Rpb24gc2V0TW9udGgoZGF0ZSwgbW9udGgsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgY29uc3QgeWVhciA9IF9kYXRlLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgZGF5ID0gX2RhdGUuZ2V0RGF0ZSgpOwogIGNvbnN0IG1pZE1vbnRoID0gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCAwKTsKICBtaWRNb250aC5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgMTUpOwogIG1pZE1vbnRoLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIGNvbnN0IGRheXNJbk1vbnRoID0gZ2V0RGF5c0luTW9udGgobWlkTW9udGgpOwogIF9kYXRlLnNldE1vbnRoKG1vbnRoLCBNYXRoLm1pbihkYXksIGRheXNJbk1vbnRoKSk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRNb250aF9kZWZhdWx0Owp2YXIgaW5pdF9zZXRNb250aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNb250aC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfZ2V0RGF5c0luTW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRNb250aF9kZWZhdWx0ID0gc2V0TW9udGg7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0LmpzCmZ1bmN0aW9uIHNldChkYXRlLCB2YWx1ZXMsIG9wdGlvbnMpIHsKICBsZXQgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGlmIChpc05hTigrX2RhdGUpKSByZXR1cm4gY29uc3RydWN0RnJvbShvcHRpb25zPy5pbiB8fCBkYXRlLCBOYU4pOwogIGlmICh2YWx1ZXMueWVhciAhPSBudWxsKSBfZGF0ZS5zZXRGdWxsWWVhcih2YWx1ZXMueWVhcik7CiAgaWYgKHZhbHVlcy5tb250aCAhPSBudWxsKSBfZGF0ZSA9IHNldE1vbnRoKF9kYXRlLCB2YWx1ZXMubW9udGgpOwogIGlmICh2YWx1ZXMuZGF0ZSAhPSBudWxsKSBfZGF0ZS5zZXREYXRlKHZhbHVlcy5kYXRlKTsKICBpZiAodmFsdWVzLmhvdXJzICE9IG51bGwpIF9kYXRlLnNldEhvdXJzKHZhbHVlcy5ob3Vycyk7CiAgaWYgKHZhbHVlcy5taW51dGVzICE9IG51bGwpIF9kYXRlLnNldE1pbnV0ZXModmFsdWVzLm1pbnV0ZXMpOwogIGlmICh2YWx1ZXMuc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRTZWNvbmRzKHZhbHVlcy5zZWNvbmRzKTsKICBpZiAodmFsdWVzLm1pbGxpc2Vjb25kcyAhPSBudWxsKSBfZGF0ZS5zZXRNaWxsaXNlY29uZHModmFsdWVzLm1pbGxpc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRfZGVmYXVsdDsKdmFyIGluaXRfc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldC5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRfZGVmYXVsdCA9IHNldDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXRlLmpzCmZ1bmN0aW9uIHNldERhdGUoZGF0ZSwgZGF5T2ZNb250aCwgb3B0aW9ucykgewogIGNvbnN0IF9kYXRlID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBfZGF0ZS5zZXREYXRlKGRheU9mTW9udGgpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0RGF0ZV9kZWZhdWx0Owp2YXIgaW5pdF9zZXREYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERhdGUuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERhdGVfZGVmYXVsdCA9IHNldERhdGU7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0RGF5T2ZZZWFyLmpzCmZ1bmN0aW9uIHNldERheU9mWWVhcihkYXRlLCBkYXlPZlllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgZGF0ZV8uc2V0TW9udGgoMCk7CiAgZGF0ZV8uc2V0RGF0ZShkYXlPZlllYXIpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0RGF5T2ZZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldERheU9mWWVhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXREYXlPZlllYXIuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldERheU9mWWVhcl9kZWZhdWx0ID0gc2V0RGF5T2ZZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzCmZ1bmN0aW9uIHNldERlZmF1bHRPcHRpb25zMihvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0ge307CiAgY29uc3QgZGVmYXVsdE9wdGlvbnMyID0gZ2V0RGVmYXVsdE9wdGlvbnMoKTsKICBmb3IgKGNvbnN0IHByb3BlcnR5MTEgaW4gZGVmYXVsdE9wdGlvbnMyKSB7CiAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGRlZmF1bHRPcHRpb25zMiwgcHJvcGVydHkxMSkpIHsKICAgICAgcmVzdWx0W3Byb3BlcnR5MTFdID0gZGVmYXVsdE9wdGlvbnMyW3Byb3BlcnR5MTFdOwogICAgfQogIH0KICBmb3IgKGNvbnN0IHByb3BlcnR5MTEgaW4gb3B0aW9ucykgewogICAgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvcHRpb25zLCBwcm9wZXJ0eTExKSkgewogICAgICBpZiAob3B0aW9uc1twcm9wZXJ0eTExXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgZGVsZXRlIHJlc3VsdFtwcm9wZXJ0eTExXTsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXN1bHRbcHJvcGVydHkxMV0gPSBvcHRpb25zW3Byb3BlcnR5MTFdOwogICAgICB9CiAgICB9CiAgfQogIHNldERlZmF1bHRPcHRpb25zKHJlc3VsdCk7Cn0KdmFyIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQ7CnZhciBpbml0X3NldERlZmF1bHRPcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldERlZmF1bHRPcHRpb25zLmpzIigpIHsKICAgIGluaXRfZGVmYXVsdE9wdGlvbnMoKTsKICAgIHNldERlZmF1bHRPcHRpb25zX2RlZmF1bHQgPSBzZXREZWZhdWx0T3B0aW9uczI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMKZnVuY3Rpb24gc2V0SG91cnMoZGF0ZSwgaG91cnMsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0SG91cnMoaG91cnMpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0SG91cnNfZGVmYXVsdDsKdmFyIGluaXRfc2V0SG91cnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0SG91cnMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldEhvdXJzX2RlZmF1bHQgPSBzZXRIb3VyczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMKZnVuY3Rpb24gc2V0TWlsbGlzZWNvbmRzKGRhdGUsIG1pbGxpc2Vjb25kczIsIG9wdGlvbnMpIHsKICBjb25zdCBfZGF0ZSA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgX2RhdGUuc2V0TWlsbGlzZWNvbmRzKG1pbGxpc2Vjb25kczIpOwogIHJldHVybiBfZGF0ZTsKfQp2YXIgc2V0TWlsbGlzZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbGxpc2Vjb25kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRNaWxsaXNlY29uZHMuanMiKCkgewogICAgaW5pdF90b0RhdGUoKTsKICAgIHNldE1pbGxpc2Vjb25kc19kZWZhdWx0ID0gc2V0TWlsbGlzZWNvbmRzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldE1pbnV0ZXMuanMKZnVuY3Rpb24gc2V0TWludXRlcyhkYXRlLCBtaW51dGVzLCBvcHRpb25zKSB7CiAgY29uc3QgZGF0ZV8gPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGRhdGVfLnNldE1pbnV0ZXMobWludXRlcyk7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3NldE1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0TWludXRlcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0TWludXRlc19kZWZhdWx0ID0gc2V0TWludXRlczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzCmZ1bmN0aW9uIHNldFF1YXJ0ZXIoZGF0ZSwgcXVhcnRlciwgb3B0aW9ucykgewogIGNvbnN0IGRhdGVfID0gdG9EYXRlKGRhdGUsIG9wdGlvbnM/LmluKTsKICBjb25zdCBvbGRRdWFydGVyID0gTWF0aC50cnVuYyhkYXRlXy5nZXRNb250aCgpIC8gMykgKyAxOwogIGNvbnN0IGRpZmYgPSBxdWFydGVyIC0gb2xkUXVhcnRlcjsKICByZXR1cm4gc2V0TW9udGgoZGF0ZV8sIGRhdGVfLmdldE1vbnRoKCkgKyBkaWZmICogMyk7Cn0KdmFyIHNldFF1YXJ0ZXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0UXVhcnRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRRdWFydGVyLmpzIigpIHsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRRdWFydGVyX2RlZmF1bHQgPSBzZXRRdWFydGVyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3NldFNlY29uZHMuanMKZnVuY3Rpb24gc2V0U2Vjb25kcyhkYXRlLCBzZWNvbmRzLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIF9kYXRlLnNldFNlY29uZHMoc2Vjb25kcyk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzZXRTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3NldFNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0U2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc2V0U2Vjb25kc19kZWZhdWx0ID0gc2V0U2Vjb25kczsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zZXRXZWVrWWVhci5qcwpmdW5jdGlvbiBzZXRXZWVrWWVhcihkYXRlLCB3ZWVrWWVhciwgb3B0aW9ucykgewogIGNvbnN0IGRlZmF1bHRPcHRpb25zMiA9IGdldERlZmF1bHRPcHRpb25zKCk7CiAgY29uc3QgZmlyc3RXZWVrQ29udGFpbnNEYXRlID0gb3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IG9wdGlvbnM/LmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IGRlZmF1bHRPcHRpb25zMi5maXJzdFdlZWtDb250YWluc0RhdGUgPz8gZGVmYXVsdE9wdGlvbnMyLmxvY2FsZT8ub3B0aW9ucz8uZmlyc3RXZWVrQ29udGFpbnNEYXRlID8/IDE7CiAgY29uc3QgZGlmZiA9IGRpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygKICAgIHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbiksCiAgICBzdGFydE9mV2Vla1llYXIoZGF0ZSwgb3B0aW9ucyksCiAgICBvcHRpb25zCiAgKTsKICBjb25zdCBmaXJzdFdlZWsgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIDApOwogIGZpcnN0V2Vlay5zZXRGdWxsWWVhcih3ZWVrWWVhciwgMCwgZmlyc3RXZWVrQ29udGFpbnNEYXRlKTsKICBmaXJzdFdlZWsuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgY29uc3QgZGF0ZV8gPSBzdGFydE9mV2Vla1llYXIoZmlyc3RXZWVrLCBvcHRpb25zKTsKICBkYXRlXy5zZXREYXRlKGRhdGVfLmdldERhdGUoKSArIGRpZmYpOwogIHJldHVybiBkYXRlXzsKfQp2YXIgc2V0V2Vla1llYXJfZGVmYXVsdDsKdmFyIGluaXRfc2V0V2Vla1llYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0V2Vla1llYXIuanMiKCkgewogICAgaW5pdF9kZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9jb25zdHJ1Y3RGcm9tKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRXZWVrWWVhcl9kZWZhdWx0ID0gc2V0V2Vla1llYXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcwpmdW5jdGlvbiBzZXRZZWFyKGRhdGUsIHllYXIsIG9wdGlvbnMpIHsKICBjb25zdCBkYXRlXyA9IHRvRGF0ZShkYXRlLCBvcHRpb25zPy5pbik7CiAgaWYgKGlzTmFOKCtkYXRlXykpIHJldHVybiBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluIHx8IGRhdGUsIE5hTik7CiAgZGF0ZV8uc2V0RnVsbFllYXIoeWVhcik7CiAgcmV0dXJuIGRhdGVfOwp9CnZhciBzZXRZZWFyX2RlZmF1bHQ7CnZhciBpbml0X3NldFllYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc2V0WWVhci5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfdG9EYXRlKCk7CiAgICBzZXRZZWFyX2RlZmF1bHQgPSBzZXRZZWFyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZEZWNhZGUuanMKZnVuY3Rpb24gc3RhcnRPZkRlY2FkZShkYXRlLCBvcHRpb25zKSB7CiAgY29uc3QgX2RhdGUgPSB0b0RhdGUoZGF0ZSwgb3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBfZGF0ZS5nZXRGdWxsWWVhcigpOwogIGNvbnN0IGRlY2FkZSA9IE1hdGguZmxvb3IoeWVhciAvIDEwKSAqIDEwOwogIF9kYXRlLnNldEZ1bGxZZWFyKGRlY2FkZSwgMCwgMSk7CiAgX2RhdGUuc2V0SG91cnMoMCwgMCwgMCwgMCk7CiAgcmV0dXJuIF9kYXRlOwp9CnZhciBzdGFydE9mRGVjYWRlX2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZEZWNhZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3RhcnRPZkRlY2FkZS5qcyIoKSB7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgc3RhcnRPZkRlY2FkZV9kZWZhdWx0ID0gc3RhcnRPZkRlY2FkZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMKZnVuY3Rpb24gc3RhcnRPZlRvZGF5KG9wdGlvbnMpIHsKICByZXR1cm4gc3RhcnRPZkRheShEYXRlLm5vdygpLCBvcHRpb25zKTsKfQp2YXIgc3RhcnRPZlRvZGF5X2RlZmF1bHQ7CnZhciBpbml0X3N0YXJ0T2ZUb2RheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9kYXkuanMiKCkgewogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBzdGFydE9mVG9kYXlfZGVmYXVsdCA9IHN0YXJ0T2ZUb2RheTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mVG9tb3Jyb3cuanMKZnVuY3Rpb24gc3RhcnRPZlRvbW9ycm93KG9wdGlvbnMpIHsKICBjb25zdCBub3cyID0gY29uc3RydWN0Tm93KG9wdGlvbnM/LmluKTsKICBjb25zdCB5ZWFyID0gbm93Mi5nZXRGdWxsWWVhcigpOwogIGNvbnN0IG1vbnRoID0gbm93Mi5nZXRNb250aCgpOwogIGNvbnN0IGRheSA9IG5vdzIuZ2V0RGF0ZSgpOwogIGNvbnN0IGRhdGUgPSBjb25zdHJ1Y3RGcm9tKG9wdGlvbnM/LmluLCAwKTsKICBkYXRlLnNldEZ1bGxZZWFyKHllYXIsIG1vbnRoLCBkYXkgKyAxKTsKICBkYXRlLnNldEhvdXJzKDAsIDAsIDAsIDApOwogIHJldHVybiBkYXRlOwp9CnZhciBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdDsKdmFyIGluaXRfc3RhcnRPZlRvbW9ycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZUb21vcnJvdy5qcyIoKSB7CiAgICBpbml0X2NvbnN0cnVjdEZyb20oKTsKICAgIGluaXRfY29uc3RydWN0Tm93KCk7CiAgICBzdGFydE9mVG9tb3Jyb3dfZGVmYXVsdCA9IHN0YXJ0T2ZUb21vcnJvdzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdGFydE9mWWVzdGVyZGF5LmpzCmZ1bmN0aW9uIHN0YXJ0T2ZZZXN0ZXJkYXkob3B0aW9ucykgewogIGNvbnN0IG5vdzIgPSBjb25zdHJ1Y3ROb3cob3B0aW9ucz8uaW4pOwogIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgY29uc3QgbW9udGggPSBub3cyLmdldE1vbnRoKCk7CiAgY29uc3QgZGF5ID0gbm93Mi5nZXREYXRlKCk7CiAgY29uc3QgZGF0ZSA9IGNvbnN0cnVjdE5vdyhvcHRpb25zPy5pbik7CiAgZGF0ZS5zZXRGdWxsWWVhcih5ZWFyLCBtb250aCwgZGF5IC0gMSk7CiAgZGF0ZS5zZXRIb3VycygwLCAwLCAwLCAwKTsKICByZXR1cm4gZGF0ZTsKfQp2YXIgc3RhcnRPZlllc3RlcmRheV9kZWZhdWx0Owp2YXIgaW5pdF9zdGFydE9mWWVzdGVyZGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N0YXJ0T2ZZZXN0ZXJkYXkuanMiKCkgewogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIHN0YXJ0T2ZZZXN0ZXJkYXlfZGVmYXVsdCA9IHN0YXJ0T2ZZZXN0ZXJkYXk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTW9udGhzLmpzCmZ1bmN0aW9uIHN1Yk1vbnRocyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTW9udGhzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNb250aHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTW9udGhzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1vbnRocy5qcyIoKSB7CiAgICBpbml0X2FkZE1vbnRocygpOwogICAgc3ViTW9udGhzX2RlZmF1bHQgPSBzdWJNb250aHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzCmZ1bmN0aW9uIHN1YihkYXRlLCBkdXJhdGlvbiwgb3B0aW9ucykgewogIGNvbnN0IHsKICAgIHllYXJzID0gMCwKICAgIG1vbnRoczogbW9udGhzMiA9IDAsCiAgICB3ZWVrcyA9IDAsCiAgICBkYXlzOiBkYXlzMiA9IDAsCiAgICBob3VycyA9IDAsCiAgICBtaW51dGVzID0gMCwKICAgIHNlY29uZHMgPSAwCiAgfSA9IGR1cmF0aW9uOwogIGNvbnN0IHdpdGhvdXRNb250aHMgPSBzdWJNb250aHMoZGF0ZSwgbW9udGhzMiArIHllYXJzICogMTIsIG9wdGlvbnMpOwogIGNvbnN0IHdpdGhvdXREYXlzID0gc3ViRGF5cyh3aXRob3V0TW9udGhzLCBkYXlzMiArIHdlZWtzICogNywgb3B0aW9ucyk7CiAgY29uc3QgbWludXRlc1RvU3ViID0gbWludXRlcyArIGhvdXJzICogNjA7CiAgY29uc3Qgc2Vjb25kc1RvU3ViID0gc2Vjb25kcyArIG1pbnV0ZXNUb1N1YiAqIDYwOwogIGNvbnN0IG1zVG9TdWIgPSBzZWNvbmRzVG9TdWIgKiAxZTM7CiAgcmV0dXJuIGNvbnN0cnVjdEZyb20ob3B0aW9ucz8uaW4gfHwgZGF0ZSwgK3dpdGhvdXREYXlzIC0gbXNUb1N1Yik7Cn0KdmFyIHN1Yl9kZWZhdWx0Owp2YXIgaW5pdF9zdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViLmpzIigpIHsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9zdWJEYXlzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgc3ViX2RlZmF1bHQgPSBzdWI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViQnVzaW5lc3NEYXlzLmpzCmZ1bmN0aW9uIHN1YkJ1c2luZXNzRGF5cyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkQnVzaW5lc3NEYXlzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJCdXNpbmVzc0RheXNfZGVmYXVsdDsKdmFyIGluaXRfc3ViQnVzaW5lc3NEYXlzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1YkJ1c2luZXNzRGF5cy5qcyIoKSB7CiAgICBpbml0X2FkZEJ1c2luZXNzRGF5cygpOwogICAgc3ViQnVzaW5lc3NEYXlzX2RlZmF1bHQgPSBzdWJCdXNpbmVzc0RheXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViSG91cnMuanMKZnVuY3Rpb24gc3ViSG91cnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZEhvdXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJIb3Vyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJIb3VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJIb3Vycy5qcyIoKSB7CiAgICBpbml0X2FkZEhvdXJzKCk7CiAgICBzdWJIb3Vyc19kZWZhdWx0ID0gc3ViSG91cnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWlsbGlzZWNvbmRzLmpzCmZ1bmN0aW9uIHN1Yk1pbGxpc2Vjb25kcyhkYXRlLCBhbW91bnQsIG9wdGlvbnMpIHsKICByZXR1cm4gYWRkTWlsbGlzZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaWxsaXNlY29uZHNfZGVmYXVsdDsKdmFyIGluaXRfc3ViTWlsbGlzZWNvbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3N1Yk1pbGxpc2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbGxpc2Vjb25kcygpOwogICAgc3ViTWlsbGlzZWNvbmRzX2RlZmF1bHQgPSBzdWJNaWxsaXNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcwpmdW5jdGlvbiBzdWJNaW51dGVzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRNaW51dGVzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJNaW51dGVzX2RlZmF1bHQ7CnZhciBpbml0X3N1Yk1pbnV0ZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViTWludXRlcy5qcyIoKSB7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIHN1Yk1pbnV0ZXNfZGVmYXVsdCA9IHN1Yk1pbnV0ZXM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViUXVhcnRlcnMuanMKZnVuY3Rpb24gc3ViUXVhcnRlcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFF1YXJ0ZXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJRdWFydGVyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJRdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJRdWFydGVycy5qcyIoKSB7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBzdWJRdWFydGVyc19kZWZhdWx0ID0gc3ViUXVhcnRlcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcwpmdW5jdGlvbiBzdWJTZWNvbmRzKGRhdGUsIGFtb3VudCwgb3B0aW9ucykgewogIHJldHVybiBhZGRTZWNvbmRzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJTZWNvbmRzX2RlZmF1bHQ7CnZhciBpbml0X3N1YlNlY29uZHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViU2Vjb25kcy5qcyIoKSB7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIHN1YlNlY29uZHNfZGVmYXVsdCA9IHN1YlNlY29uZHM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViV2Vla3MuanMKZnVuY3Rpb24gc3ViV2Vla3MoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFdlZWtzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJXZWVrc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJXZWVrcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJXZWVrcy5qcyIoKSB7CiAgICBpbml0X2FkZFdlZWtzKCk7CiAgICBzdWJXZWVrc19kZWZhdWx0ID0gc3ViV2Vla3M7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvc3ViWWVhcnMuanMKZnVuY3Rpb24gc3ViWWVhcnMoZGF0ZSwgYW1vdW50LCBvcHRpb25zKSB7CiAgcmV0dXJuIGFkZFllYXJzKGRhdGUsIC1hbW91bnQsIG9wdGlvbnMpOwp9CnZhciBzdWJZZWFyc19kZWZhdWx0Owp2YXIgaW5pdF9zdWJZZWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9zdWJZZWFycy5qcyIoKSB7CiAgICBpbml0X2FkZFllYXJzKCk7CiAgICBzdWJZZWFyc19kZWZhdWx0ID0gc3ViWWVhcnM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMvd2Vla3NUb0RheXMuanMKZnVuY3Rpb24gd2Vla3NUb0RheXMod2Vla3MpIHsKICByZXR1cm4gTWF0aC50cnVuYyh3ZWVrcyAqIGRheXNJbldlZWspOwp9CnZhciB3ZWVrc1RvRGF5c19kZWZhdWx0Owp2YXIgaW5pdF93ZWVrc1RvRGF5cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy93ZWVrc1RvRGF5cy5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50cygpOwogICAgd2Vla3NUb0RheXNfZGVmYXVsdCA9IHdlZWtzVG9EYXlzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9EYXlzLmpzCmZ1bmN0aW9uIHllYXJzVG9EYXlzKHllYXJzKSB7CiAgcmV0dXJuIE1hdGgudHJ1bmMoeWVhcnMgKiBkYXlzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb0RheXNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb0RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kYXRlLWZuc0A0LjEuMC9ub2RlX21vZHVsZXMvZGF0ZS1mbnMveWVhcnNUb0RheXMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9EYXlzX2RlZmF1bHQgPSB5ZWFyc1RvRGF5czsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzCmZ1bmN0aW9uIHllYXJzVG9Nb250aHMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIG1vbnRoc0luWWVhcik7Cn0KdmFyIHllYXJzVG9Nb250aHNfZGVmYXVsdDsKdmFyIGluaXRfeWVhcnNUb01vbnRocyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvTW9udGhzLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzKCk7CiAgICB5ZWFyc1RvTW9udGhzX2RlZmF1bHQgPSB5ZWFyc1RvTW9udGhzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL3llYXJzVG9RdWFydGVycy5qcwpmdW5jdGlvbiB5ZWFyc1RvUXVhcnRlcnMoeWVhcnMpIHsKICByZXR1cm4gTWF0aC50cnVuYyh5ZWFycyAqIHF1YXJ0ZXJzSW5ZZWFyKTsKfQp2YXIgeWVhcnNUb1F1YXJ0ZXJzX2RlZmF1bHQ7CnZhciBpbml0X3llYXJzVG9RdWFydGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy95ZWFyc1RvUXVhcnRlcnMuanMiKCkgewogICAgaW5pdF9jb25zdGFudHMoKTsKICAgIHllYXJzVG9RdWFydGVyc19kZWZhdWx0ID0geWVhcnNUb1F1YXJ0ZXJzOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF0ZS1mbnNANC4xLjAvbm9kZV9tb2R1bGVzL2RhdGUtZm5zL2luZGV4LmpzCnZhciBkYXRlX2Zuc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRhdGVfZm5zX2V4cG9ydHMsIHsKICBhZGQ6ICgpID0+IGFkZCwKICBhZGRCdXNpbmVzc0RheXM6ICgpID0+IGFkZEJ1c2luZXNzRGF5cywKICBhZGREYXlzOiAoKSA9PiBhZGREYXlzLAogIGFkZEhvdXJzOiAoKSA9PiBhZGRIb3VycywKICBhZGRJU09XZWVrWWVhcnM6ICgpID0+IGFkZElTT1dlZWtZZWFycywKICBhZGRNaWxsaXNlY29uZHM6ICgpID0+IGFkZE1pbGxpc2Vjb25kcywKICBhZGRNaW51dGVzOiAoKSA9PiBhZGRNaW51dGVzLAogIGFkZE1vbnRoczogKCkgPT4gYWRkTW9udGhzLAogIGFkZFF1YXJ0ZXJzOiAoKSA9PiBhZGRRdWFydGVycywKICBhZGRTZWNvbmRzOiAoKSA9PiBhZGRTZWNvbmRzLAogIGFkZFdlZWtzOiAoKSA9PiBhZGRXZWVrcywKICBhZGRZZWFyczogKCkgPT4gYWRkWWVhcnMsCiAgYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmc6ICgpID0+IGFyZUludGVydmFsc092ZXJsYXBwaW5nLAogIGNsYW1wOiAoKSA9PiBjbGFtcCwKICBjbG9zZXN0SW5kZXhUbzogKCkgPT4gY2xvc2VzdEluZGV4VG8sCiAgY2xvc2VzdFRvOiAoKSA9PiBjbG9zZXN0VG8sCiAgY29tcGFyZUFzYzogKCkgPT4gY29tcGFyZUFzYywKICBjb21wYXJlRGVzYzogKCkgPT4gY29tcGFyZURlc2MsCiAgY29uc3RydWN0RnJvbTogKCkgPT4gY29uc3RydWN0RnJvbSwKICBjb25zdHJ1Y3ROb3c6ICgpID0+IGNvbnN0cnVjdE5vdywKICBkYXlzVG9XZWVrczogKCkgPT4gZGF5c1RvV2Vla3MsCiAgZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5CdXNpbmVzc0RheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJEYXlzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhckRheXMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJJU09XZWVrWWVhcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFySVNPV2Vla3MsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJNb250aHM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzLAogIGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMsCiAgZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrczogKCkgPT4gZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcywKICBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzLAogIGRpZmZlcmVuY2VJbkRheXM6ICgpID0+IGRpZmZlcmVuY2VJbkRheXMsCiAgZGlmZmVyZW5jZUluSG91cnM6ICgpID0+IGRpZmZlcmVuY2VJbkhvdXJzLAogIGRpZmZlcmVuY2VJbklTT1dlZWtZZWFyczogKCkgPT4gZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzLAogIGRpZmZlcmVuY2VJbk1pbGxpc2Vjb25kczogKCkgPT4gZGlmZmVyZW5jZUluTWlsbGlzZWNvbmRzLAogIGRpZmZlcmVuY2VJbk1pbnV0ZXM6ICgpID0+IGRpZmZlcmVuY2VJbk1pbnV0ZXMsCiAgZGlmZmVyZW5jZUluTW9udGhzOiAoKSA9PiBkaWZmZXJlbmNlSW5Nb250aHMsCiAgZGlmZmVyZW5jZUluUXVhcnRlcnM6ICgpID0+IGRpZmZlcmVuY2VJblF1YXJ0ZXJzLAogIGRpZmZlcmVuY2VJblNlY29uZHM6ICgpID0+IGRpZmZlcmVuY2VJblNlY29uZHMsCiAgZGlmZmVyZW5jZUluV2Vla3M6ICgpID0+IGRpZmZlcmVuY2VJbldlZWtzLAogIGRpZmZlcmVuY2VJblllYXJzOiAoKSA9PiBkaWZmZXJlbmNlSW5ZZWFycywKICBlYWNoRGF5T2ZJbnRlcnZhbDogKCkgPT4gZWFjaERheU9mSW50ZXJ2YWwsCiAgZWFjaEhvdXJPZkludGVydmFsOiAoKSA9PiBlYWNoSG91ck9mSW50ZXJ2YWwsCiAgZWFjaE1pbnV0ZU9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNaW51dGVPZkludGVydmFsLAogIGVhY2hNb250aE9mSW50ZXJ2YWw6ICgpID0+IGVhY2hNb250aE9mSW50ZXJ2YWwsCiAgZWFjaFF1YXJ0ZXJPZkludGVydmFsOiAoKSA9PiBlYWNoUXVhcnRlck9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla09mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZkludGVydmFsOiAoKSA9PiBlYWNoV2Vla2VuZE9mSW50ZXJ2YWwsCiAgZWFjaFdlZWtlbmRPZk1vbnRoOiAoKSA9PiBlYWNoV2Vla2VuZE9mTW9udGgsCiAgZWFjaFdlZWtlbmRPZlllYXI6ICgpID0+IGVhY2hXZWVrZW5kT2ZZZWFyLAogIGVhY2hZZWFyT2ZJbnRlcnZhbDogKCkgPT4gZWFjaFllYXJPZkludGVydmFsLAogIGVuZE9mRGF5OiAoKSA9PiBlbmRPZkRheSwKICBlbmRPZkRlY2FkZTogKCkgPT4gZW5kT2ZEZWNhZGUsCiAgZW5kT2ZIb3VyOiAoKSA9PiBlbmRPZkhvdXIsCiAgZW5kT2ZJU09XZWVrOiAoKSA9PiBlbmRPZklTT1dlZWssCiAgZW5kT2ZJU09XZWVrWWVhcjogKCkgPT4gZW5kT2ZJU09XZWVrWWVhciwKICBlbmRPZk1pbnV0ZTogKCkgPT4gZW5kT2ZNaW51dGUsCiAgZW5kT2ZNb250aDogKCkgPT4gZW5kT2ZNb250aCwKICBlbmRPZlF1YXJ0ZXI6ICgpID0+IGVuZE9mUXVhcnRlciwKICBlbmRPZlNlY29uZDogKCkgPT4gZW5kT2ZTZWNvbmQsCiAgZW5kT2ZUb2RheTogKCkgPT4gZW5kT2ZUb2RheSwKICBlbmRPZlRvbW9ycm93OiAoKSA9PiBlbmRPZlRvbW9ycm93LAogIGVuZE9mV2VlazogKCkgPT4gZW5kT2ZXZWVrLAogIGVuZE9mWWVhcjogKCkgPT4gZW5kT2ZZZWFyLAogIGVuZE9mWWVzdGVyZGF5OiAoKSA9PiBlbmRPZlllc3RlcmRheSwKICBmb3JtYXQ6ICgpID0+IGZvcm1hdCwKICBmb3JtYXREYXRlOiAoKSA9PiBmb3JtYXQsCiAgZm9ybWF0RGlzdGFuY2U6ICgpID0+IGZvcm1hdERpc3RhbmNlMiwKICBmb3JtYXREaXN0YW5jZVN0cmljdDogKCkgPT4gZm9ybWF0RGlzdGFuY2VTdHJpY3QsCiAgZm9ybWF0RGlzdGFuY2VUb05vdzogKCkgPT4gZm9ybWF0RGlzdGFuY2VUb05vdywKICBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0OiAoKSA9PiBmb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0LAogIGZvcm1hdER1cmF0aW9uOiAoKSA9PiBmb3JtYXREdXJhdGlvbiwKICBmb3JtYXRJU086ICgpID0+IGZvcm1hdElTTywKICBmb3JtYXRJU085MDc1OiAoKSA9PiBmb3JtYXRJU085MDc1LAogIGZvcm1hdElTT0R1cmF0aW9uOiAoKSA9PiBmb3JtYXRJU09EdXJhdGlvbiwKICBmb3JtYXRSRkMzMzM5OiAoKSA9PiBmb3JtYXRSRkMzMzM5LAogIGZvcm1hdFJGQzcyMzE6ICgpID0+IGZvcm1hdFJGQzcyMzEsCiAgZm9ybWF0UmVsYXRpdmU6ICgpID0+IGZvcm1hdFJlbGF0aXZlMiwKICBmb3JtYXR0ZXJzOiAoKSA9PiBmb3JtYXR0ZXJzLAogIGZyb21Vbml4VGltZTogKCkgPT4gZnJvbVVuaXhUaW1lLAogIGdldERhdGU6ICgpID0+IGdldERhdGUsCiAgZ2V0RGF5OiAoKSA9PiBnZXREYXksCiAgZ2V0RGF5T2ZZZWFyOiAoKSA9PiBnZXREYXlPZlllYXIsCiAgZ2V0RGF5c0luTW9udGg6ICgpID0+IGdldERheXNJbk1vbnRoLAogIGdldERheXNJblllYXI6ICgpID0+IGdldERheXNJblllYXIsCiAgZ2V0RGVjYWRlOiAoKSA9PiBnZXREZWNhZGUsCiAgZ2V0RGVmYXVsdE9wdGlvbnM6ICgpID0+IGdldERlZmF1bHRPcHRpb25zMiwKICBnZXRIb3VyczogKCkgPT4gZ2V0SG91cnMsCiAgZ2V0SVNPRGF5OiAoKSA9PiBnZXRJU09EYXksCiAgZ2V0SVNPV2VlazogKCkgPT4gZ2V0SVNPV2VlaywKICBnZXRJU09XZWVrWWVhcjogKCkgPT4gZ2V0SVNPV2Vla1llYXIsCiAgZ2V0SVNPV2Vla3NJblllYXI6ICgpID0+IGdldElTT1dlZWtzSW5ZZWFyLAogIGdldE1pbGxpc2Vjb25kczogKCkgPT4gZ2V0TWlsbGlzZWNvbmRzLAogIGdldE1pbnV0ZXM6ICgpID0+IGdldE1pbnV0ZXMsCiAgZ2V0TW9udGg6ICgpID0+IGdldE1vbnRoLAogIGdldE92ZXJsYXBwaW5nRGF5c0luSW50ZXJ2YWxzOiAoKSA9PiBnZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscywKICBnZXRRdWFydGVyOiAoKSA9PiBnZXRRdWFydGVyLAogIGdldFNlY29uZHM6ICgpID0+IGdldFNlY29uZHMsCiAgZ2V0VGltZTogKCkgPT4gZ2V0VGltZSwKICBnZXRVbml4VGltZTogKCkgPT4gZ2V0VW5peFRpbWUsCiAgZ2V0V2VlazogKCkgPT4gZ2V0V2VlaywKICBnZXRXZWVrT2ZNb250aDogKCkgPT4gZ2V0V2Vla09mTW9udGgsCiAgZ2V0V2Vla1llYXI6ICgpID0+IGdldFdlZWtZZWFyLAogIGdldFdlZWtzSW5Nb250aDogKCkgPT4gZ2V0V2Vla3NJbk1vbnRoLAogIGdldFllYXI6ICgpID0+IGdldFllYXIsCiAgaG91cnNUb01pbGxpc2Vjb25kczogKCkgPT4gaG91cnNUb01pbGxpc2Vjb25kcywKICBob3Vyc1RvTWludXRlczogKCkgPT4gaG91cnNUb01pbnV0ZXMsCiAgaG91cnNUb1NlY29uZHM6ICgpID0+IGhvdXJzVG9TZWNvbmRzLAogIGludGVydmFsOiAoKSA9PiBpbnRlcnZhbDIsCiAgaW50ZXJ2YWxUb0R1cmF0aW9uOiAoKSA9PiBpbnRlcnZhbFRvRHVyYXRpb24sCiAgaW50bEZvcm1hdDogKCkgPT4gaW50bEZvcm1hdCwKICBpbnRsRm9ybWF0RGlzdGFuY2U6ICgpID0+IGludGxGb3JtYXREaXN0YW5jZSwKICBpc0FmdGVyOiAoKSA9PiBpc0FmdGVyLAogIGlzQmVmb3JlOiAoKSA9PiBpc0JlZm9yZSwKICBpc0RhdGU6ICgpID0+IGlzRGF0ZSwKICBpc0VxdWFsOiAoKSA9PiBpc0VxdWFsLAogIGlzRXhpc3RzOiAoKSA9PiBpc0V4aXN0cywKICBpc0ZpcnN0RGF5T2ZNb250aDogKCkgPT4gaXNGaXJzdERheU9mTW9udGgsCiAgaXNGcmlkYXk6ICgpID0+IGlzRnJpZGF5LAogIGlzRnV0dXJlOiAoKSA9PiBpc0Z1dHVyZSwKICBpc0xhc3REYXlPZk1vbnRoOiAoKSA9PiBpc0xhc3REYXlPZk1vbnRoLAogIGlzTGVhcFllYXI6ICgpID0+IGlzTGVhcFllYXIsCiAgaXNNYXRjaDogKCkgPT4gaXNNYXRjaDIsCiAgaXNNb25kYXk6ICgpID0+IGlzTW9uZGF5LAogIGlzUGFzdDogKCkgPT4gaXNQYXN0LAogIGlzU2FtZURheTogKCkgPT4gaXNTYW1lRGF5LAogIGlzU2FtZUhvdXI6ICgpID0+IGlzU2FtZUhvdXIsCiAgaXNTYW1lSVNPV2VlazogKCkgPT4gaXNTYW1lSVNPV2VlaywKICBpc1NhbWVJU09XZWVrWWVhcjogKCkgPT4gaXNTYW1lSVNPV2Vla1llYXIsCiAgaXNTYW1lTWludXRlOiAoKSA9PiBpc1NhbWVNaW51dGUsCiAgaXNTYW1lTW9udGg6ICgpID0+IGlzU2FtZU1vbnRoLAogIGlzU2FtZVF1YXJ0ZXI6ICgpID0+IGlzU2FtZVF1YXJ0ZXIsCiAgaXNTYW1lU2Vjb25kOiAoKSA9PiBpc1NhbWVTZWNvbmQsCiAgaXNTYW1lV2VlazogKCkgPT4gaXNTYW1lV2VlaywKICBpc1NhbWVZZWFyOiAoKSA9PiBpc1NhbWVZZWFyLAogIGlzU2F0dXJkYXk6ICgpID0+IGlzU2F0dXJkYXksCiAgaXNTdW5kYXk6ICgpID0+IGlzU3VuZGF5LAogIGlzVGhpc0hvdXI6ICgpID0+IGlzVGhpc0hvdXIsCiAgaXNUaGlzSVNPV2VlazogKCkgPT4gaXNUaGlzSVNPV2VlaywKICBpc1RoaXNNaW51dGU6ICgpID0+IGlzVGhpc01pbnV0ZSwKICBpc1RoaXNNb250aDogKCkgPT4gaXNUaGlzTW9udGgsCiAgaXNUaGlzUXVhcnRlcjogKCkgPT4gaXNUaGlzUXVhcnRlciwKICBpc1RoaXNTZWNvbmQ6ICgpID0+IGlzVGhpc1NlY29uZCwKICBpc1RoaXNXZWVrOiAoKSA9PiBpc1RoaXNXZWVrLAogIGlzVGhpc1llYXI6ICgpID0+IGlzVGhpc1llYXIsCiAgaXNUaHVyc2RheTogKCkgPT4gaXNUaHVyc2RheSwKICBpc1RvZGF5OiAoKSA9PiBpc1RvZGF5LAogIGlzVG9tb3Jyb3c6ICgpID0+IGlzVG9tb3Jyb3csCiAgaXNUdWVzZGF5OiAoKSA9PiBpc1R1ZXNkYXksCiAgaXNWYWxpZDogKCkgPT4gaXNWYWxpZCwKICBpc1dlZG5lc2RheTogKCkgPT4gaXNXZWRuZXNkYXksCiAgaXNXZWVrZW5kOiAoKSA9PiBpc1dlZWtlbmQsCiAgaXNXaXRoaW5JbnRlcnZhbDogKCkgPT4gaXNXaXRoaW5JbnRlcnZhbCwKICBpc1llc3RlcmRheTogKCkgPT4gaXNZZXN0ZXJkYXksCiAgbGFzdERheU9mRGVjYWRlOiAoKSA9PiBsYXN0RGF5T2ZEZWNhZGUsCiAgbGFzdERheU9mSVNPV2VlazogKCkgPT4gbGFzdERheU9mSVNPV2VlaywKICBsYXN0RGF5T2ZJU09XZWVrWWVhcjogKCkgPT4gbGFzdERheU9mSVNPV2Vla1llYXIsCiAgbGFzdERheU9mTW9udGg6ICgpID0+IGxhc3REYXlPZk1vbnRoLAogIGxhc3REYXlPZlF1YXJ0ZXI6ICgpID0+IGxhc3REYXlPZlF1YXJ0ZXIsCiAgbGFzdERheU9mV2VlazogKCkgPT4gbGFzdERheU9mV2VlaywKICBsYXN0RGF5T2ZZZWFyOiAoKSA9PiBsYXN0RGF5T2ZZZWFyLAogIGxpZ2h0Rm9ybWF0OiAoKSA9PiBsaWdodEZvcm1hdCwKICBsaWdodEZvcm1hdHRlcnM6ICgpID0+IGxpZ2h0Rm9ybWF0dGVycywKICBsb25nRm9ybWF0dGVyczogKCkgPT4gbG9uZ0Zvcm1hdHRlcnMsCiAgbWF4OiAoKSA9PiBtYXgyLAogIG1pbGxpc2Vjb25kczogKCkgPT4gbWlsbGlzZWNvbmRzLAogIG1pbGxpc2Vjb25kc1RvSG91cnM6ICgpID0+IG1pbGxpc2Vjb25kc1RvSG91cnMsCiAgbWlsbGlzZWNvbmRzVG9NaW51dGVzOiAoKSA9PiBtaWxsaXNlY29uZHNUb01pbnV0ZXMsCiAgbWlsbGlzZWNvbmRzVG9TZWNvbmRzOiAoKSA9PiBtaWxsaXNlY29uZHNUb1NlY29uZHMsCiAgbWluOiAoKSA9PiBtaW4yLAogIG1pbnV0ZXNUb0hvdXJzOiAoKSA9PiBtaW51dGVzVG9Ib3VycywKICBtaW51dGVzVG9NaWxsaXNlY29uZHM6ICgpID0+IG1pbnV0ZXNUb01pbGxpc2Vjb25kcywKICBtaW51dGVzVG9TZWNvbmRzOiAoKSA9PiBtaW51dGVzVG9TZWNvbmRzLAogIG1vbnRoc1RvUXVhcnRlcnM6ICgpID0+IG1vbnRoc1RvUXVhcnRlcnMsCiAgbW9udGhzVG9ZZWFyczogKCkgPT4gbW9udGhzVG9ZZWFycywKICBuZXh0RGF5OiAoKSA9PiBuZXh0RGF5LAogIG5leHRGcmlkYXk6ICgpID0+IG5leHRGcmlkYXksCiAgbmV4dE1vbmRheTogKCkgPT4gbmV4dE1vbmRheSwKICBuZXh0U2F0dXJkYXk6ICgpID0+IG5leHRTYXR1cmRheSwKICBuZXh0U3VuZGF5OiAoKSA9PiBuZXh0U3VuZGF5LAogIG5leHRUaHVyc2RheTogKCkgPT4gbmV4dFRodXJzZGF5LAogIG5leHRUdWVzZGF5OiAoKSA9PiBuZXh0VHVlc2RheSwKICBuZXh0V2VkbmVzZGF5OiAoKSA9PiBuZXh0V2VkbmVzZGF5LAogIHBhcnNlOiAoKSA9PiBwYXJzZSwKICBwYXJzZUlTTzogKCkgPT4gcGFyc2VJU08sCiAgcGFyc2VKU09OOiAoKSA9PiBwYXJzZUpTT04sCiAgcGFyc2VyczogKCkgPT4gcGFyc2VycywKICBwcmV2aW91c0RheTogKCkgPT4gcHJldmlvdXNEYXksCiAgcHJldmlvdXNGcmlkYXk6ICgpID0+IHByZXZpb3VzRnJpZGF5LAogIHByZXZpb3VzTW9uZGF5OiAoKSA9PiBwcmV2aW91c01vbmRheSwKICBwcmV2aW91c1NhdHVyZGF5OiAoKSA9PiBwcmV2aW91c1NhdHVyZGF5LAogIHByZXZpb3VzU3VuZGF5OiAoKSA9PiBwcmV2aW91c1N1bmRheSwKICBwcmV2aW91c1RodXJzZGF5OiAoKSA9PiBwcmV2aW91c1RodXJzZGF5LAogIHByZXZpb3VzVHVlc2RheTogKCkgPT4gcHJldmlvdXNUdWVzZGF5LAogIHByZXZpb3VzV2VkbmVzZGF5OiAoKSA9PiBwcmV2aW91c1dlZG5lc2RheSwKICBxdWFydGVyc1RvTW9udGhzOiAoKSA9PiBxdWFydGVyc1RvTW9udGhzLAogIHF1YXJ0ZXJzVG9ZZWFyczogKCkgPT4gcXVhcnRlcnNUb1llYXJzLAogIHJvdW5kVG9OZWFyZXN0SG91cnM6ICgpID0+IHJvdW5kVG9OZWFyZXN0SG91cnMsCiAgcm91bmRUb05lYXJlc3RNaW51dGVzOiAoKSA9PiByb3VuZFRvTmVhcmVzdE1pbnV0ZXMsCiAgc2Vjb25kc1RvSG91cnM6ICgpID0+IHNlY29uZHNUb0hvdXJzLAogIHNlY29uZHNUb01pbGxpc2Vjb25kczogKCkgPT4gc2Vjb25kc1RvTWlsbGlzZWNvbmRzLAogIHNlY29uZHNUb01pbnV0ZXM6ICgpID0+IHNlY29uZHNUb01pbnV0ZXMsCiAgc2V0OiAoKSA9PiBzZXQsCiAgc2V0RGF0ZTogKCkgPT4gc2V0RGF0ZSwKICBzZXREYXk6ICgpID0+IHNldERheSwKICBzZXREYXlPZlllYXI6ICgpID0+IHNldERheU9mWWVhciwKICBzZXREZWZhdWx0T3B0aW9uczogKCkgPT4gc2V0RGVmYXVsdE9wdGlvbnMyLAogIHNldEhvdXJzOiAoKSA9PiBzZXRIb3VycywKICBzZXRJU09EYXk6ICgpID0+IHNldElTT0RheSwKICBzZXRJU09XZWVrOiAoKSA9PiBzZXRJU09XZWVrLAogIHNldElTT1dlZWtZZWFyOiAoKSA9PiBzZXRJU09XZWVrWWVhciwKICBzZXRNaWxsaXNlY29uZHM6ICgpID0+IHNldE1pbGxpc2Vjb25kcywKICBzZXRNaW51dGVzOiAoKSA9PiBzZXRNaW51dGVzLAogIHNldE1vbnRoOiAoKSA9PiBzZXRNb250aCwKICBzZXRRdWFydGVyOiAoKSA9PiBzZXRRdWFydGVyLAogIHNldFNlY29uZHM6ICgpID0+IHNldFNlY29uZHMsCiAgc2V0V2VlazogKCkgPT4gc2V0V2VlaywKICBzZXRXZWVrWWVhcjogKCkgPT4gc2V0V2Vla1llYXIsCiAgc2V0WWVhcjogKCkgPT4gc2V0WWVhciwKICBzdGFydE9mRGF5OiAoKSA9PiBzdGFydE9mRGF5LAogIHN0YXJ0T2ZEZWNhZGU6ICgpID0+IHN0YXJ0T2ZEZWNhZGUsCiAgc3RhcnRPZkhvdXI6ICgpID0+IHN0YXJ0T2ZIb3VyLAogIHN0YXJ0T2ZJU09XZWVrOiAoKSA9PiBzdGFydE9mSVNPV2VlaywKICBzdGFydE9mSVNPV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZJU09XZWVrWWVhciwKICBzdGFydE9mTWludXRlOiAoKSA9PiBzdGFydE9mTWludXRlLAogIHN0YXJ0T2ZNb250aDogKCkgPT4gc3RhcnRPZk1vbnRoLAogIHN0YXJ0T2ZRdWFydGVyOiAoKSA9PiBzdGFydE9mUXVhcnRlciwKICBzdGFydE9mU2Vjb25kOiAoKSA9PiBzdGFydE9mU2Vjb25kLAogIHN0YXJ0T2ZUb2RheTogKCkgPT4gc3RhcnRPZlRvZGF5LAogIHN0YXJ0T2ZUb21vcnJvdzogKCkgPT4gc3RhcnRPZlRvbW9ycm93LAogIHN0YXJ0T2ZXZWVrOiAoKSA9PiBzdGFydE9mV2VlaywKICBzdGFydE9mV2Vla1llYXI6ICgpID0+IHN0YXJ0T2ZXZWVrWWVhciwKICBzdGFydE9mWWVhcjogKCkgPT4gc3RhcnRPZlllYXIsCiAgc3RhcnRPZlllc3RlcmRheTogKCkgPT4gc3RhcnRPZlllc3RlcmRheSwKICBzdWI6ICgpID0+IHN1YiwKICBzdWJCdXNpbmVzc0RheXM6ICgpID0+IHN1YkJ1c2luZXNzRGF5cywKICBzdWJEYXlzOiAoKSA9PiBzdWJEYXlzLAogIHN1YkhvdXJzOiAoKSA9PiBzdWJIb3VycywKICBzdWJJU09XZWVrWWVhcnM6ICgpID0+IHN1YklTT1dlZWtZZWFycywKICBzdWJNaWxsaXNlY29uZHM6ICgpID0+IHN1Yk1pbGxpc2Vjb25kcywKICBzdWJNaW51dGVzOiAoKSA9PiBzdWJNaW51dGVzLAogIHN1Yk1vbnRoczogKCkgPT4gc3ViTW9udGhzLAogIHN1YlF1YXJ0ZXJzOiAoKSA9PiBzdWJRdWFydGVycywKICBzdWJTZWNvbmRzOiAoKSA9PiBzdWJTZWNvbmRzLAogIHN1YldlZWtzOiAoKSA9PiBzdWJXZWVrcywKICBzdWJZZWFyczogKCkgPT4gc3ViWWVhcnMsCiAgdG9EYXRlOiAoKSA9PiB0b0RhdGUsCiAgdHJhbnNwb3NlOiAoKSA9PiB0cmFuc3Bvc2UsCiAgd2Vla3NUb0RheXM6ICgpID0+IHdlZWtzVG9EYXlzLAogIHllYXJzVG9EYXlzOiAoKSA9PiB5ZWFyc1RvRGF5cywKICB5ZWFyc1RvTW9udGhzOiAoKSA9PiB5ZWFyc1RvTW9udGhzLAogIHllYXJzVG9RdWFydGVyczogKCkgPT4geWVhcnNUb1F1YXJ0ZXJzCn0pOwp2YXIgaW5pdF9kYXRlX2ZucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RhdGUtZm5zQDQuMS4wL25vZGVfbW9kdWxlcy9kYXRlLWZucy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZCgpOwogICAgaW5pdF9hZGRCdXNpbmVzc0RheXMoKTsKICAgIGluaXRfYWRkRGF5cygpOwogICAgaW5pdF9hZGRIb3VycygpOwogICAgaW5pdF9hZGRJU09XZWVrWWVhcnMoKTsKICAgIGluaXRfYWRkTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X2FkZE1pbnV0ZXMoKTsKICAgIGluaXRfYWRkTW9udGhzKCk7CiAgICBpbml0X2FkZFF1YXJ0ZXJzKCk7CiAgICBpbml0X2FkZFNlY29uZHMoKTsKICAgIGluaXRfYWRkV2Vla3MoKTsKICAgIGluaXRfYWRkWWVhcnMoKTsKICAgIGluaXRfYXJlSW50ZXJ2YWxzT3ZlcmxhcHBpbmcoKTsKICAgIGluaXRfY2xhbXAoKTsKICAgIGluaXRfY2xvc2VzdEluZGV4VG8oKTsKICAgIGluaXRfY2xvc2VzdFRvKCk7CiAgICBpbml0X2NvbXBhcmVBc2MoKTsKICAgIGluaXRfY29tcGFyZURlc2MoKTsKICAgIGluaXRfY29uc3RydWN0RnJvbSgpOwogICAgaW5pdF9jb25zdHJ1Y3ROb3coKTsKICAgIGluaXRfZGF5c1RvV2Vla3MoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyRGF5cygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtZZWFycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhcklTT1dlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyTW9udGhzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkNhbGVuZGFyUXVhcnRlcnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluQ2FsZW5kYXJXZWVrcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5DYWxlbmRhclllYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbkRheXMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSG91cnMoKTsKICAgIGluaXRfZGlmZmVyZW5jZUluSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5NaW51dGVzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbk1vbnRocygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5RdWFydGVycygpOwogICAgaW5pdF9kaWZmZXJlbmNlSW5TZWNvbmRzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJbldlZWtzKCk7CiAgICBpbml0X2RpZmZlcmVuY2VJblllYXJzKCk7CiAgICBpbml0X2VhY2hEYXlPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hIb3VyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTWludXRlT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoTW9udGhPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hRdWFydGVyT2ZJbnRlcnZhbCgpOwogICAgaW5pdF9lYWNoV2Vla09mSW50ZXJ2YWwoKTsKICAgIGluaXRfZWFjaFdlZWtlbmRPZkludGVydmFsKCk7CiAgICBpbml0X2VhY2hXZWVrZW5kT2ZNb250aCgpOwogICAgaW5pdF9lYWNoV2Vla2VuZE9mWWVhcigpOwogICAgaW5pdF9lYWNoWWVhck9mSW50ZXJ2YWwoKTsKICAgIGluaXRfZW5kT2ZEYXkoKTsKICAgIGluaXRfZW5kT2ZEZWNhZGUoKTsKICAgIGluaXRfZW5kT2ZIb3VyKCk7CiAgICBpbml0X2VuZE9mSVNPV2VlaygpOwogICAgaW5pdF9lbmRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X2VuZE9mTWludXRlKCk7CiAgICBpbml0X2VuZE9mTW9udGgoKTsKICAgIGluaXRfZW5kT2ZRdWFydGVyKCk7CiAgICBpbml0X2VuZE9mU2Vjb25kKCk7CiAgICBpbml0X2VuZE9mVG9kYXkoKTsKICAgIGluaXRfZW5kT2ZUb21vcnJvdygpOwogICAgaW5pdF9lbmRPZldlZWsoKTsKICAgIGluaXRfZW5kT2ZZZWFyKCk7CiAgICBpbml0X2VuZE9mWWVzdGVyZGF5KCk7CiAgICBpbml0X2Zvcm1hdCgpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZTIoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VTdHJpY3QoKTsKICAgIGluaXRfZm9ybWF0RGlzdGFuY2VUb05vdygpOwogICAgaW5pdF9mb3JtYXREaXN0YW5jZVRvTm93U3RyaWN0KCk7CiAgICBpbml0X2Zvcm1hdER1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdElTTygpOwogICAgaW5pdF9mb3JtYXRJU085MDc1KCk7CiAgICBpbml0X2Zvcm1hdElTT0R1cmF0aW9uKCk7CiAgICBpbml0X2Zvcm1hdFJGQzMzMzkoKTsKICAgIGluaXRfZm9ybWF0UkZDNzIzMSgpOwogICAgaW5pdF9mb3JtYXRSZWxhdGl2ZTIoKTsKICAgIGluaXRfZnJvbVVuaXhUaW1lKCk7CiAgICBpbml0X2dldERhdGUoKTsKICAgIGluaXRfZ2V0RGF5KCk7CiAgICBpbml0X2dldERheU9mWWVhcigpOwogICAgaW5pdF9nZXREYXlzSW5Nb250aCgpOwogICAgaW5pdF9nZXREYXlzSW5ZZWFyKCk7CiAgICBpbml0X2dldERlY2FkZSgpOwogICAgaW5pdF9nZXREZWZhdWx0T3B0aW9ucygpOwogICAgaW5pdF9nZXRIb3VycygpOwogICAgaW5pdF9nZXRJU09EYXkoKTsKICAgIGluaXRfZ2V0SVNPV2VlaygpOwogICAgaW5pdF9nZXRJU09XZWVrWWVhcigpOwogICAgaW5pdF9nZXRJU09XZWVrc0luWWVhcigpOwogICAgaW5pdF9nZXRNaWxsaXNlY29uZHMoKTsKICAgIGluaXRfZ2V0TWludXRlcygpOwogICAgaW5pdF9nZXRNb250aCgpOwogICAgaW5pdF9nZXRPdmVybGFwcGluZ0RheXNJbkludGVydmFscygpOwogICAgaW5pdF9nZXRRdWFydGVyKCk7CiAgICBpbml0X2dldFNlY29uZHMoKTsKICAgIGluaXRfZ2V0VGltZSgpOwogICAgaW5pdF9nZXRVbml4VGltZSgpOwogICAgaW5pdF9nZXRXZWVrKCk7CiAgICBpbml0X2dldFdlZWtPZk1vbnRoKCk7CiAgICBpbml0X2dldFdlZWtZZWFyKCk7CiAgICBpbml0X2dldFdlZWtzSW5Nb250aCgpOwogICAgaW5pdF9nZXRZZWFyKCk7CiAgICBpbml0X2hvdXJzVG9NaWxsaXNlY29uZHMoKTsKICAgIGluaXRfaG91cnNUb01pbnV0ZXMoKTsKICAgIGluaXRfaG91cnNUb1NlY29uZHMoKTsKICAgIGluaXRfaW50ZXJ2YWwyKCk7CiAgICBpbml0X2ludGVydmFsVG9EdXJhdGlvbigpOwogICAgaW5pdF9pbnRsRm9ybWF0KCk7CiAgICBpbml0X2ludGxGb3JtYXREaXN0YW5jZSgpOwogICAgaW5pdF9pc0FmdGVyKCk7CiAgICBpbml0X2lzQmVmb3JlKCk7CiAgICBpbml0X2lzRGF0ZTIoKTsKICAgIGluaXRfaXNFcXVhbCgpOwogICAgaW5pdF9pc0V4aXN0cygpOwogICAgaW5pdF9pc0ZpcnN0RGF5T2ZNb250aCgpOwogICAgaW5pdF9pc0ZyaWRheSgpOwogICAgaW5pdF9pc0Z1dHVyZSgpOwogICAgaW5pdF9pc0xhc3REYXlPZk1vbnRoKCk7CiAgICBpbml0X2lzTGVhcFllYXIoKTsKICAgIGluaXRfaXNNYXRjaCgpOwogICAgaW5pdF9pc01vbmRheSgpOwogICAgaW5pdF9pc1Bhc3QoKTsKICAgIGluaXRfaXNTYW1lRGF5KCk7CiAgICBpbml0X2lzU2FtZUhvdXIoKTsKICAgIGluaXRfaXNTYW1lSVNPV2VlaygpOwogICAgaW5pdF9pc1NhbWVJU09XZWVrWWVhcigpOwogICAgaW5pdF9pc1NhbWVNaW51dGUoKTsKICAgIGluaXRfaXNTYW1lTW9udGgoKTsKICAgIGluaXRfaXNTYW1lUXVhcnRlcigpOwogICAgaW5pdF9pc1NhbWVTZWNvbmQoKTsKICAgIGluaXRfaXNTYW1lV2VlaygpOwogICAgaW5pdF9pc1NhbWVZZWFyKCk7CiAgICBpbml0X2lzU2F0dXJkYXkoKTsKICAgIGluaXRfaXNTdW5kYXkoKTsKICAgIGluaXRfaXNUaGlzSG91cigpOwogICAgaW5pdF9pc1RoaXNJU09XZWVrKCk7CiAgICBpbml0X2lzVGhpc01pbnV0ZSgpOwogICAgaW5pdF9pc1RoaXNNb250aCgpOwogICAgaW5pdF9pc1RoaXNRdWFydGVyKCk7CiAgICBpbml0X2lzVGhpc1NlY29uZCgpOwogICAgaW5pdF9pc1RoaXNXZWVrKCk7CiAgICBpbml0X2lzVGhpc1llYXIoKTsKICAgIGluaXRfaXNUaHVyc2RheSgpOwogICAgaW5pdF9pc1RvZGF5KCk7CiAgICBpbml0X2lzVG9tb3Jyb3coKTsKICAgIGluaXRfaXNUdWVzZGF5KCk7CiAgICBpbml0X2lzVmFsaWQoKTsKICAgIGluaXRfaXNXZWRuZXNkYXkoKTsKICAgIGluaXRfaXNXZWVrZW5kKCk7CiAgICBpbml0X2lzV2l0aGluSW50ZXJ2YWwoKTsKICAgIGluaXRfaXNZZXN0ZXJkYXkoKTsKICAgIGluaXRfbGFzdERheU9mRGVjYWRlKCk7CiAgICBpbml0X2xhc3REYXlPZklTT1dlZWsoKTsKICAgIGluaXRfbGFzdERheU9mSVNPV2Vla1llYXIoKTsKICAgIGluaXRfbGFzdERheU9mTW9udGgoKTsKICAgIGluaXRfbGFzdERheU9mUXVhcnRlcigpOwogICAgaW5pdF9sYXN0RGF5T2ZXZWVrKCk7CiAgICBpbml0X2xhc3REYXlPZlllYXIoKTsKICAgIGluaXRfbGlnaHRGb3JtYXQoKTsKICAgIGluaXRfbWF4MigpOwogICAgaW5pdF9taWxsaXNlY29uZHMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9Ib3VycygpOwogICAgaW5pdF9taWxsaXNlY29uZHNUb01pbnV0ZXMoKTsKICAgIGluaXRfbWlsbGlzZWNvbmRzVG9TZWNvbmRzKCk7CiAgICBpbml0X21pbjIoKTsKICAgIGluaXRfbWludXRlc1RvSG91cnMoKTsKICAgIGluaXRfbWludXRlc1RvTWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X21pbnV0ZXNUb1NlY29uZHMoKTsKICAgIGluaXRfbW9udGhzVG9RdWFydGVycygpOwogICAgaW5pdF9tb250aHNUb1llYXJzKCk7CiAgICBpbml0X25leHREYXkoKTsKICAgIGluaXRfbmV4dEZyaWRheSgpOwogICAgaW5pdF9uZXh0TW9uZGF5KCk7CiAgICBpbml0X25leHRTYXR1cmRheSgpOwogICAgaW5pdF9uZXh0U3VuZGF5KCk7CiAgICBpbml0X25leHRUaHVyc2RheSgpOwogICAgaW5pdF9uZXh0VHVlc2RheSgpOwogICAgaW5pdF9uZXh0V2VkbmVzZGF5KCk7CiAgICBpbml0X3BhcnNlKCk7CiAgICBpbml0X3BhcnNlSVNPKCk7CiAgICBpbml0X3BhcnNlSlNPTigpOwogICAgaW5pdF9wcmV2aW91c0RheSgpOwogICAgaW5pdF9wcmV2aW91c0ZyaWRheSgpOwogICAgaW5pdF9wcmV2aW91c01vbmRheSgpOwogICAgaW5pdF9wcmV2aW91c1NhdHVyZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzU3VuZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzVGh1cnNkYXkoKTsKICAgIGluaXRfcHJldmlvdXNUdWVzZGF5KCk7CiAgICBpbml0X3ByZXZpb3VzV2VkbmVzZGF5KCk7CiAgICBpbml0X3F1YXJ0ZXJzVG9Nb250aHMoKTsKICAgIGluaXRfcXVhcnRlcnNUb1llYXJzKCk7CiAgICBpbml0X3JvdW5kVG9OZWFyZXN0SG91cnMoKTsKICAgIGluaXRfcm91bmRUb05lYXJlc3RNaW51dGVzKCk7CiAgICBpbml0X3NlY29uZHNUb0hvdXJzKCk7CiAgICBpbml0X3NlY29uZHNUb01pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zZWNvbmRzVG9NaW51dGVzKCk7CiAgICBpbml0X3NldCgpOwogICAgaW5pdF9zZXREYXRlKCk7CiAgICBpbml0X3NldERheSgpOwogICAgaW5pdF9zZXREYXlPZlllYXIoKTsKICAgIGluaXRfc2V0RGVmYXVsdE9wdGlvbnMoKTsKICAgIGluaXRfc2V0SG91cnMoKTsKICAgIGluaXRfc2V0SVNPRGF5KCk7CiAgICBpbml0X3NldElTT1dlZWsoKTsKICAgIGluaXRfc2V0SVNPV2Vla1llYXIoKTsKICAgIGluaXRfc2V0TWlsbGlzZWNvbmRzKCk7CiAgICBpbml0X3NldE1pbnV0ZXMoKTsKICAgIGluaXRfc2V0TW9udGgoKTsKICAgIGluaXRfc2V0UXVhcnRlcigpOwogICAgaW5pdF9zZXRTZWNvbmRzKCk7CiAgICBpbml0X3NldFdlZWsoKTsKICAgIGluaXRfc2V0V2Vla1llYXIoKTsKICAgIGluaXRfc2V0WWVhcigpOwogICAgaW5pdF9zdGFydE9mRGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZEZWNhZGUoKTsKICAgIGluaXRfc3RhcnRPZkhvdXIoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWsoKTsKICAgIGluaXRfc3RhcnRPZklTT1dlZWtZZWFyKCk7CiAgICBpbml0X3N0YXJ0T2ZNaW51dGUoKTsKICAgIGluaXRfc3RhcnRPZk1vbnRoKCk7CiAgICBpbml0X3N0YXJ0T2ZRdWFydGVyKCk7CiAgICBpbml0X3N0YXJ0T2ZTZWNvbmQoKTsKICAgIGluaXRfc3RhcnRPZlRvZGF5KCk7CiAgICBpbml0X3N0YXJ0T2ZUb21vcnJvdygpOwogICAgaW5pdF9zdGFydE9mV2VlaygpOwogICAgaW5pdF9zdGFydE9mV2Vla1llYXIoKTsKICAgIGluaXRfc3RhcnRPZlllYXIoKTsKICAgIGluaXRfc3RhcnRPZlllc3RlcmRheSgpOwogICAgaW5pdF9zdWIoKTsKICAgIGluaXRfc3ViQnVzaW5lc3NEYXlzKCk7CiAgICBpbml0X3N1YkRheXMoKTsKICAgIGluaXRfc3ViSG91cnMoKTsKICAgIGluaXRfc3ViSVNPV2Vla1llYXJzKCk7CiAgICBpbml0X3N1Yk1pbGxpc2Vjb25kcygpOwogICAgaW5pdF9zdWJNaW51dGVzKCk7CiAgICBpbml0X3N1Yk1vbnRocygpOwogICAgaW5pdF9zdWJRdWFydGVycygpOwogICAgaW5pdF9zdWJTZWNvbmRzKCk7CiAgICBpbml0X3N1YldlZWtzKCk7CiAgICBpbml0X3N1YlllYXJzKCk7CiAgICBpbml0X3RvRGF0ZSgpOwogICAgaW5pdF90cmFuc3Bvc2UoKTsKICAgIGluaXRfd2Vla3NUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb0RheXMoKTsKICAgIGluaXRfeWVhcnNUb01vbnRocygpOwogICAgaW5pdF95ZWFyc1RvUXVhcnRlcnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcwp2YXIgcmVxdWlyZV9kYXlqc19taW4gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2RheWpzQDEuMTEuMTkvbm9kZV9tb2R1bGVzL2RheWpzL2RheWpzLm1pbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAhKGZ1bmN0aW9uKHQ5LCBlMTEpIHsKICAgICAgIm9iamVjdCIgPT0gdHlwZW9mIGV4cG9ydHMgJiYgInVuZGVmaW5lZCIgIT0gdHlwZW9mIG1vZHVsZSA/IG1vZHVsZS5leHBvcnRzID0gZTExKCkgOiAiZnVuY3Rpb24iID09IHR5cGVvZiBkZWZpbmUgJiYgZGVmaW5lLmFtZCA/IGRlZmluZShlMTEpIDogKHQ5ID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogdDkgfHwgc2VsZikuZGF5anMgPSBlMTEoKTsKICAgIH0pKGV4cG9ydHMsIChmdW5jdGlvbigpIHsKICAgICAgInVzZSBzdHJpY3QiOwogICAgICB2YXIgdDkgPSAxZTMsIGUxMSA9IDZlNCwgbjEzID0gMzZlNSwgcjExID0gIm1pbGxpc2Vjb25kIiwgaTExID0gInNlY29uZCIsIHM5ID0gIm1pbnV0ZSIsIHU3ID0gImhvdXIiLCBhNSA9ICJkYXkiLCBvMTMgPSAid2VlayIsIGMxMSA9ICJtb250aCIsIGY3ID0gInF1YXJ0ZXIiLCBoOSA9ICJ5ZWFyIiwgZDYgPSAiZGF0ZSIsIGw2ID0gIkludmFsaWQgRGF0ZSIsICQzID0gL14oXGR7NH0pWy0vXT8oXGR7MSwyfSk/Wy0vXT8oXGR7MCwyfSlbVHRcc10qKFxkezEsMn0pPzo/KFxkezEsMn0pPzo/KFxkezEsMn0pP1suOl0/KFxkKyk/JC8sIHk1ID0gL1xbKFteXF1dKyldfFl7MSw0fXxNezEsNH18RHsxLDJ9fGR7MSw0fXxIezEsMn18aHsxLDJ9fGF8QXxtezEsMn18c3sxLDJ9fFp7MSwyfXxTU1MvZywgTTMgPSB7IG5hbWU6ICJlbiIsIHdlZWtkYXlzOiAiU3VuZGF5X01vbmRheV9UdWVzZGF5X1dlZG5lc2RheV9UaHVyc2RheV9GcmlkYXlfU2F0dXJkYXkiLnNwbGl0KCJfIiksIG1vbnRoczogIkphbnVhcnlfRmVicnVhcnlfTWFyY2hfQXByaWxfTWF5X0p1bmVfSnVseV9BdWd1c3RfU2VwdGVtYmVyX09jdG9iZXJfTm92ZW1iZXJfRGVjZW1iZXIiLnNwbGl0KCJfIiksIG9yZGluYWw6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSBbInRoIiwgInN0IiwgIm5kIiwgInJkIl0sIG4xNCA9IHQxMCAlIDEwMDsKICAgICAgICByZXR1cm4gIlsiICsgdDEwICsgKGUxMlsobjE0IC0gMjApICUgMTBdIHx8IGUxMltuMTRdIHx8IGUxMlswXSkgKyAiXSI7CiAgICAgIH0gfSwgbTYgPSBmdW5jdGlvbih0MTAsIGUxMiwgbjE0KSB7CiAgICAgICAgdmFyIHIxMiA9IFN0cmluZyh0MTApOwogICAgICAgIHJldHVybiAhcjEyIHx8IHIxMi5sZW5ndGggPj0gZTEyID8gdDEwIDogIiIgKyBBcnJheShlMTIgKyAxIC0gcjEyLmxlbmd0aCkuam9pbihuMTQpICsgdDEwOwogICAgICB9LCB2NSA9IHsgczogbTYsIHo6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHZhciBlMTIgPSAtdDEwLnV0Y09mZnNldCgpLCBuMTQgPSBNYXRoLmFicyhlMTIpLCByMTIgPSBNYXRoLmZsb29yKG4xNCAvIDYwKSwgaTEyID0gbjE0ICUgNjA7CiAgICAgICAgcmV0dXJuIChlMTIgPD0gMCA/ICIrIiA6ICItIikgKyBtNihyMTIsIDIsICIwIikgKyAiOiIgKyBtNihpMTIsIDIsICIwIik7CiAgICAgIH0sIG06IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCkgewogICAgICAgIGlmIChlMTIuZGF0ZSgpIDwgbjE0LmRhdGUoKSkgcmV0dXJuIC10MTAobjE0LCBlMTIpOwogICAgICAgIHZhciByMTIgPSAxMiAqIChuMTQueWVhcigpIC0gZTEyLnllYXIoKSkgKyAobjE0Lm1vbnRoKCkgLSBlMTIubW9udGgoKSksIGkxMiA9IGUxMi5jbG9uZSgpLmFkZChyMTIsIGMxMSksIHMxMCA9IG4xNCAtIGkxMiA8IDAsIHU4ID0gZTEyLmNsb25lKCkuYWRkKHIxMiArIChzMTAgPyAtMSA6IDEpLCBjMTEpOwogICAgICAgIHJldHVybiArKC0ocjEyICsgKG4xNCAtIGkxMikgLyAoczEwID8gaTEyIC0gdTggOiB1OCAtIGkxMikpIHx8IDApOwogICAgICB9LCBhOiBmdW5jdGlvbih0MTApIHsKICAgICAgICByZXR1cm4gdDEwIDwgMCA/IE1hdGguY2VpbCh0MTApIHx8IDAgOiBNYXRoLmZsb29yKHQxMCk7CiAgICAgIH0sIHA6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB7IE06IGMxMSwgeTogaDksIHc6IG8xMywgZDogYTUsIEQ6IGQ2LCBoOiB1NywgbTogczksIHM6IGkxMSwgbXM6IHIxMSwgUTogZjcgfVt0MTBdIHx8IFN0cmluZyh0MTAgfHwgIiIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvcyQvLCAiIik7CiAgICAgIH0sIHU6IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQxMDsKICAgICAgfSB9LCBnNCA9ICJlbiIsIEQ0ID0ge307CiAgICAgIEQ0W2c0XSA9IE0zOwogICAgICB2YXIgcDcgPSAiJGlzRGF5anNPYmplY3QiLCBTNSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgIHJldHVybiB0MTAgaW5zdGFuY2VvZiBfNCB8fCAhKCF0MTAgfHwgIXQxMFtwN10pOwogICAgICB9LCB3MyA9IGZ1bmN0aW9uIHQxMChlMTIsIG4xNCwgcjEyKSB7CiAgICAgICAgdmFyIGkxMjsKICAgICAgICBpZiAoIWUxMikgcmV0dXJuIGc0OwogICAgICAgIGlmICgic3RyaW5nIiA9PSB0eXBlb2YgZTEyKSB7CiAgICAgICAgICB2YXIgczEwID0gZTEyLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBENFtzMTBdICYmIChpMTIgPSBzMTApLCBuMTQgJiYgKEQ0W3MxMF0gPSBuMTQsIGkxMiA9IHMxMCk7CiAgICAgICAgICB2YXIgdTggPSBlMTIuc3BsaXQoIi0iKTsKICAgICAgICAgIGlmICghaTEyICYmIHU4Lmxlbmd0aCA+IDEpIHJldHVybiB0MTAodThbMF0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB2YXIgYTYgPSBlMTIubmFtZTsKICAgICAgICAgIEQ0W2E2XSA9IGUxMiwgaTEyID0gYTY7CiAgICAgICAgfQogICAgICAgIHJldHVybiAhcjEyICYmIGkxMiAmJiAoZzQgPSBpMTIpLCBpMTIgfHwgIXIxMiAmJiBnNDsKICAgICAgfSwgTzIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIGlmIChTNSh0MTApKSByZXR1cm4gdDEwLmNsb25lKCk7CiAgICAgICAgdmFyIG4xNCA9ICJvYmplY3QiID09IHR5cGVvZiBlMTIgPyBlMTIgOiB7fTsKICAgICAgICByZXR1cm4gbjE0LmRhdGUgPSB0MTAsIG4xNC5hcmdzID0gYXJndW1lbnRzLCBuZXcgXzQobjE0KTsKICAgICAgfSwgYjUgPSB2NTsKICAgICAgYjUubCA9IHczLCBiNS5pID0gUzUsIGI1LncgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgIHJldHVybiBPMih0MTAsIHsgbG9jYWxlOiBlMTIuJEwsIHV0YzogZTEyLiR1LCB4OiBlMTIuJHgsICRvZmZzZXQ6IGUxMi4kb2Zmc2V0IH0pOwogICAgICB9OwogICAgICB2YXIgXzQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgZnVuY3Rpb24gTTQodDEwKSB7CiAgICAgICAgICB0aGlzLiRMID0gdzModDEwLmxvY2FsZSwgbnVsbCwgdHJ1ZSksIHRoaXMucGFyc2UodDEwKSwgdGhpcy4keCA9IHRoaXMuJHggfHwgdDEwLnggfHwge30sIHRoaXNbcDddID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgdmFyIG03ID0gTTQucHJvdG90eXBlOwogICAgICAgIHJldHVybiBtNy5wYXJzZSA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgdGhpcy4kZCA9IChmdW5jdGlvbih0MTEpIHsKICAgICAgICAgICAgdmFyIGUxMiA9IHQxMS5kYXRlLCBuMTQgPSB0MTEudXRjOwogICAgICAgICAgICBpZiAobnVsbCA9PT0gZTEyKSByZXR1cm4gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKE5hTik7CiAgICAgICAgICAgIGlmIChiNS51KGUxMikpIHJldHVybiAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICAgICAgaWYgKGUxMiBpbnN0YW5jZW9mIERhdGUpIHJldHVybiBuZXcgRGF0ZShlMTIpOwogICAgICAgICAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIGUxMiAmJiAhL1okL2kudGVzdChlMTIpKSB7CiAgICAgICAgICAgICAgdmFyIHIxMiA9IGUxMi5tYXRjaCgkMyk7CiAgICAgICAgICAgICAgaWYgKHIxMikgewogICAgICAgICAgICAgICAgdmFyIGkxMiA9IHIxMlsyXSAtIDEgfHwgMCwgczEwID0gKHIxMls3XSB8fCAiMCIpLnN1YnN0cmluZygwLCAzKTsKICAgICAgICAgICAgICAgIHJldHVybiBuMTQgPyBuZXcgRGF0ZShEYXRlLlVUQyhyMTJbMV0sIGkxMiwgcjEyWzNdIHx8IDEsIHIxMls0XSB8fCAwLCByMTJbNV0gfHwgMCwgcjEyWzZdIHx8IDAsIHMxMCkpIDogbmV3IERhdGUocjEyWzFdLCBpMTIsIHIxMlszXSB8fCAxLCByMTJbNF0gfHwgMCwgcjEyWzVdIHx8IDAsIHIxMls2XSB8fCAwLCBzMTApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gbmV3IERhdGUoZTEyKTsKICAgICAgICAgIH0pKHQxMCksIHRoaXMuaW5pdCgpOwogICAgICAgIH0sIG03LmluaXQgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciB0MTAgPSB0aGlzLiRkOwogICAgICAgICAgdGhpcy4keSA9IHQxMC5nZXRGdWxsWWVhcigpLCB0aGlzLiRNID0gdDEwLmdldE1vbnRoKCksIHRoaXMuJEQgPSB0MTAuZ2V0RGF0ZSgpLCB0aGlzLiRXID0gdDEwLmdldERheSgpLCB0aGlzLiRIID0gdDEwLmdldEhvdXJzKCksIHRoaXMuJG0gPSB0MTAuZ2V0TWludXRlcygpLCB0aGlzLiRzID0gdDEwLmdldFNlY29uZHMoKSwgdGhpcy4kbXMgPSB0MTAuZ2V0TWlsbGlzZWNvbmRzKCk7CiAgICAgICAgfSwgbTcuJHV0aWxzID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYjU7CiAgICAgICAgfSwgbTcuaXNWYWxpZCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICEodGhpcy4kZC50b1N0cmluZygpID09PSBsNik7CiAgICAgICAgfSwgbTcuaXNTYW1lID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSBPMih0MTApOwogICAgICAgICAgcmV0dXJuIHRoaXMuc3RhcnRPZihlMTIpIDw9IG4xNCAmJiBuMTQgPD0gdGhpcy5lbmRPZihlMTIpOwogICAgICAgIH0sIG03LmlzQWZ0ZXIgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgcmV0dXJuIE8yKHQxMCkgPCB0aGlzLnN0YXJ0T2YoZTEyKTsKICAgICAgICB9LCBtNy5pc0JlZm9yZSA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5lbmRPZihlMTIpIDwgTzIodDEwKTsKICAgICAgICB9LCBtNy4kZyA9IGZ1bmN0aW9uKHQxMCwgZTEyLCBuMTQpIHsKICAgICAgICAgIHJldHVybiBiNS51KHQxMCkgPyB0aGlzW2UxMl0gOiB0aGlzLnNldChuMTQsIHQxMCk7CiAgICAgICAgfSwgbTcudW5peCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIE1hdGguZmxvb3IodGhpcy52YWx1ZU9mKCkgLyAxZTMpOwogICAgICAgIH0sIG03LnZhbHVlT2YgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiRkLmdldFRpbWUoKTsKICAgICAgICB9LCBtNy5zdGFydE9mID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLCByMTIgPSAhIWI1LnUoZTEyKSB8fCBlMTIsIGY4ID0gYjUucCh0MTApLCBsNyA9IGZ1bmN0aW9uKHQxMSwgZTEzKSB7CiAgICAgICAgICAgIHZhciBpMTIgPSBiNS53KG4xNC4kdSA/IERhdGUuVVRDKG4xNC4keSwgZTEzLCB0MTEpIDogbmV3IERhdGUobjE0LiR5LCBlMTMsIHQxMSksIG4xNCk7CiAgICAgICAgICAgIHJldHVybiByMTIgPyBpMTIgOiBpMTIuZW5kT2YoYTUpOwogICAgICAgICAgfSwgJDQgPSBmdW5jdGlvbih0MTEsIGUxMykgewogICAgICAgICAgICByZXR1cm4gYjUudyhuMTQudG9EYXRlKClbdDExXS5hcHBseShuMTQudG9EYXRlKCJzIiksIChyMTIgPyBbMCwgMCwgMCwgMF0gOiBbMjMsIDU5LCA1OSwgOTk5XSkuc2xpY2UoZTEzKSksIG4xNCk7CiAgICAgICAgICB9LCB5NiA9IHRoaXMuJFcsIE01ID0gdGhpcy4kTSwgbTggPSB0aGlzLiRELCB2NiA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKTsKICAgICAgICAgIHN3aXRjaCAoZjgpIHsKICAgICAgICAgICAgY2FzZSBoOToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgMCkgOiBsNygzMSwgMTEpOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICByZXR1cm4gcjEyID8gbDcoMSwgTTUpIDogbDcoMCwgTTUgKyAxKTsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgdmFyIGc1ID0gdGhpcy4kbG9jYWxlKCkud2Vla1N0YXJ0IHx8IDAsIEQ1ID0gKHk2IDwgZzUgPyB5NiArIDcgOiB5NikgLSBnNTsKICAgICAgICAgICAgICByZXR1cm4gbDcocjEyID8gbTggLSBENSA6IG04ICsgKDYgLSBENSksIE01KTsKICAgICAgICAgICAgY2FzZSBhNToKICAgICAgICAgICAgY2FzZSBkNjoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiSG91cnMiLCAwKTsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICByZXR1cm4gJDQodjYgKyAiTWludXRlcyIsIDEpOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJTZWNvbmRzIiwgMik7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgIHJldHVybiAkNCh2NiArICJNaWxsaXNlY29uZHMiLCAzKTsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jbG9uZSgpOwogICAgICAgICAgfQogICAgICAgIH0sIG03LmVuZE9mID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdGFydE9mKHQxMCwgZmFsc2UpOwogICAgICAgIH0sIG03LiRzZXQgPSBmdW5jdGlvbih0MTAsIGUxMikgewogICAgICAgICAgdmFyIG4xNCwgbzE0ID0gYjUucCh0MTApLCBmOCA9ICJzZXQiICsgKHRoaXMuJHUgPyAiVVRDIiA6ICIiKSwgbDcgPSAobjE0ID0ge30sIG4xNFthNV0gPSBmOCArICJEYXRlIiwgbjE0W2Q2XSA9IGY4ICsgIkRhdGUiLCBuMTRbYzExXSA9IGY4ICsgIk1vbnRoIiwgbjE0W2g5XSA9IGY4ICsgIkZ1bGxZZWFyIiwgbjE0W3U3XSA9IGY4ICsgIkhvdXJzIiwgbjE0W3M5XSA9IGY4ICsgIk1pbnV0ZXMiLCBuMTRbaTExXSA9IGY4ICsgIlNlY29uZHMiLCBuMTRbcjExXSA9IGY4ICsgIk1pbGxpc2Vjb25kcyIsIG4xNClbbzE0XSwgJDQgPSBvMTQgPT09IGE1ID8gdGhpcy4kRCArIChlMTIgLSB0aGlzLiRXKSA6IGUxMjsKICAgICAgICAgIGlmIChvMTQgPT09IGMxMSB8fCBvMTQgPT09IGg5KSB7CiAgICAgICAgICAgIHZhciB5NiA9IHRoaXMuY2xvbmUoKS5zZXQoZDYsIDEpOwogICAgICAgICAgICB5Ni4kZFtsN10oJDQpLCB5Ni5pbml0KCksIHRoaXMuJGQgPSB5Ni5zZXQoZDYsIE1hdGgubWluKHRoaXMuJEQsIHk2LmRheXNJbk1vbnRoKCkpKS4kZDsKICAgICAgICAgIH0gZWxzZSBsNyAmJiB0aGlzLiRkW2w3XSgkNCk7CiAgICAgICAgICByZXR1cm4gdGhpcy5pbml0KCksIHRoaXM7CiAgICAgICAgfSwgbTcuc2V0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmNsb25lKCkuJHNldCh0MTAsIGUxMik7CiAgICAgICAgfSwgbTcuZ2V0ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgICByZXR1cm4gdGhpc1tiNS5wKHQxMCldKCk7CiAgICAgICAgfSwgbTcuYWRkID0gZnVuY3Rpb24ocjEyLCBmOCkgewogICAgICAgICAgdmFyIGQ3LCBsNyA9IHRoaXM7CiAgICAgICAgICByMTIgPSBOdW1iZXIocjEyKTsKICAgICAgICAgIHZhciAkNCA9IGI1LnAoZjgpLCB5NiA9IGZ1bmN0aW9uKHQxMCkgewogICAgICAgICAgICB2YXIgZTEyID0gTzIobDcpOwogICAgICAgICAgICByZXR1cm4gYjUudyhlMTIuZGF0ZShlMTIuZGF0ZSgpICsgTWF0aC5yb3VuZCh0MTAgKiByMTIpKSwgbDcpOwogICAgICAgICAgfTsKICAgICAgICAgIGlmICgkNCA9PT0gYzExKSByZXR1cm4gdGhpcy5zZXQoYzExLCB0aGlzLiRNICsgcjEyKTsKICAgICAgICAgIGlmICgkNCA9PT0gaDkpIHJldHVybiB0aGlzLnNldChoOSwgdGhpcy4keSArIHIxMik7CiAgICAgICAgICBpZiAoJDQgPT09IGE1KSByZXR1cm4geTYoMSk7CiAgICAgICAgICBpZiAoJDQgPT09IG8xMykgcmV0dXJuIHk2KDcpOwogICAgICAgICAgdmFyIE01ID0gKGQ3ID0ge30sIGQ3W3M5XSA9IGUxMSwgZDdbdTddID0gbjEzLCBkN1tpMTFdID0gdDksIGQ3KVskNF0gfHwgMSwgbTggPSB0aGlzLiRkLmdldFRpbWUoKSArIHIxMiAqIE01OwogICAgICAgICAgcmV0dXJuIGI1LncobTgsIHRoaXMpOwogICAgICAgIH0sIG03LnN1YnRyYWN0ID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmFkZCgtMSAqIHQxMCwgZTEyKTsKICAgICAgICB9LCBtNy5mb3JtYXQgPSBmdW5jdGlvbih0MTApIHsKICAgICAgICAgIHZhciBlMTIgPSB0aGlzLCBuMTQgPSB0aGlzLiRsb2NhbGUoKTsKICAgICAgICAgIGlmICghdGhpcy5pc1ZhbGlkKCkpIHJldHVybiBuMTQuaW52YWxpZERhdGUgfHwgbDY7CiAgICAgICAgICB2YXIgcjEyID0gdDEwIHx8ICJZWVlZLU1NLUREVEhIOm1tOnNzWiIsIGkxMiA9IGI1LnoodGhpcyksIHMxMCA9IHRoaXMuJEgsIHU4ID0gdGhpcy4kbSwgYTYgPSB0aGlzLiRNLCBvMTQgPSBuMTQud2Vla2RheXMsIGMxMiA9IG4xNC5tb250aHMsIGY4ID0gbjE0Lm1lcmlkaWVtLCBoMTAgPSBmdW5jdGlvbih0MTEsIG4xNSwgaTEzLCBzMTEpIHsKICAgICAgICAgICAgcmV0dXJuIHQxMSAmJiAodDExW24xNV0gfHwgdDExKGUxMiwgcjEyKSkgfHwgaTEzW24xNV0uc2xpY2UoMCwgczExKTsKICAgICAgICAgIH0sIGQ3ID0gZnVuY3Rpb24odDExKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCAlIDEyIHx8IDEyLCB0MTEsICIwIik7CiAgICAgICAgICB9LCAkNCA9IGY4IHx8IGZ1bmN0aW9uKHQxMSwgZTEzLCBuMTUpIHsKICAgICAgICAgICAgdmFyIHIxMyA9IHQxMSA8IDEyID8gIkFNIiA6ICJQTSI7CiAgICAgICAgICAgIHJldHVybiBuMTUgPyByMTMudG9Mb3dlckNhc2UoKSA6IHIxMzsKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gcjEyLnJlcGxhY2UoeTUsIChmdW5jdGlvbih0MTEsIHIxMykgewogICAgICAgICAgICByZXR1cm4gcjEzIHx8IChmdW5jdGlvbih0MTIpIHsKICAgICAgICAgICAgICBzd2l0Y2ggKHQxMikgewogICAgICAgICAgICAgICAgY2FzZSAiWVkiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKGUxMi4keSkuc2xpY2UoLTIpOwogICAgICAgICAgICAgICAgY2FzZSAiWVlZWSI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKGUxMi4keSwgNCwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgIk0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYTYgKyAxOwogICAgICAgICAgICAgICAgY2FzZSAiTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhhNiArIDEsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJNTU0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC5tb250aHNTaG9ydCwgYTYsIGMxMiwgMyk7CiAgICAgICAgICAgICAgICBjYXNlICJNTU1NIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChjMTIsIGE2KTsKICAgICAgICAgICAgICAgIGNhc2UgIkQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZTEyLiREOwogICAgICAgICAgICAgICAgY2FzZSAiREQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJEQsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJFcpOwogICAgICAgICAgICAgICAgY2FzZSAiZGQiOgogICAgICAgICAgICAgICAgICByZXR1cm4gaDEwKG4xNC53ZWVrZGF5c01pbiwgZTEyLiRXLCBvMTQsIDIpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGgxMChuMTQud2Vla2RheXNTaG9ydCwgZTEyLiRXLCBvMTQsIDMpOwogICAgICAgICAgICAgICAgY2FzZSAiZGRkZCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBvMTRbZTEyLiRXXTsKICAgICAgICAgICAgICAgIGNhc2UgIkgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHMxMCk7CiAgICAgICAgICAgICAgICBjYXNlICJISCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBiNS5zKHMxMCwgMiwgIjAiKTsKICAgICAgICAgICAgICAgIGNhc2UgImgiOgogICAgICAgICAgICAgICAgICByZXR1cm4gZDcoMSk7CiAgICAgICAgICAgICAgICBjYXNlICJoaCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBkNygyKTsKICAgICAgICAgICAgICAgIGNhc2UgImEiOgogICAgICAgICAgICAgICAgICByZXR1cm4gJDQoczEwLCB1OCwgdHJ1ZSk7CiAgICAgICAgICAgICAgICBjYXNlICJBIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuICQ0KHMxMCwgdTgsIGZhbHNlKTsKICAgICAgICAgICAgICAgIGNhc2UgIm0iOgogICAgICAgICAgICAgICAgICByZXR1cm4gU3RyaW5nKHU4KTsKICAgICAgICAgICAgICAgIGNhc2UgIm1tIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIGI1LnModTgsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJzIjoKICAgICAgICAgICAgICAgICAgcmV0dXJuIFN0cmluZyhlMTIuJHMpOwogICAgICAgICAgICAgICAgY2FzZSAic3MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJHMsIDIsICIwIik7CiAgICAgICAgICAgICAgICBjYXNlICJTU1MiOgogICAgICAgICAgICAgICAgICByZXR1cm4gYjUucyhlMTIuJG1zLCAzLCAiMCIpOwogICAgICAgICAgICAgICAgY2FzZSAiWiI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBpMTI7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KSh0MTEpIHx8IGkxMi5yZXBsYWNlKCI6IiwgIiIpOwogICAgICAgICAgfSkpOwogICAgICAgIH0sIG03LnV0Y09mZnNldCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIDE1ICogLU1hdGgucm91bmQodGhpcy4kZC5nZXRUaW1lem9uZU9mZnNldCgpIC8gMTUpOwogICAgICAgIH0sIG03LmRpZmYgPSBmdW5jdGlvbihyMTIsIGQ3LCBsNykgewogICAgICAgICAgdmFyICQ0LCB5NiA9IHRoaXMsIE01ID0gYjUucChkNyksIG04ID0gTzIocjEyKSwgdjYgPSAobTgudXRjT2Zmc2V0KCkgLSB0aGlzLnV0Y09mZnNldCgpKSAqIGUxMSwgZzUgPSB0aGlzIC0gbTgsIEQ1ID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBiNS5tKHk2LCBtOCk7CiAgICAgICAgICB9OwogICAgICAgICAgc3dpdGNoIChNNSkgewogICAgICAgICAgICBjYXNlIGg5OgogICAgICAgICAgICAgICQ0ID0gRDUoKSAvIDEyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIGMxMToKICAgICAgICAgICAgICAkNCA9IEQ1KCk7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgZjc6CiAgICAgICAgICAgICAgJDQgPSBENSgpIC8gMzsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSBvMTM6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA2MDQ4ZTU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgYTU6CiAgICAgICAgICAgICAgJDQgPSAoZzUgLSB2NikgLyA4NjRlNTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgY2FzZSB1NzoKICAgICAgICAgICAgICAkNCA9IGc1IC8gbjEzOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICBjYXNlIHM5OgogICAgICAgICAgICAgICQ0ID0gZzUgLyBlMTE7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIGNhc2UgaTExOgogICAgICAgICAgICAgICQ0ID0gZzUgLyB0OTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgICAkNCA9IGc1OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGw3ID8gJDQgOiBiNS5hKCQ0KTsKICAgICAgICB9LCBtNy5kYXlzSW5Nb250aCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZW5kT2YoYzExKS4kRDsKICAgICAgICB9LCBtNy4kbG9jYWxlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gRDRbdGhpcy4kTF07CiAgICAgICAgfSwgbTcubG9jYWxlID0gZnVuY3Rpb24odDEwLCBlMTIpIHsKICAgICAgICAgIGlmICghdDEwKSByZXR1cm4gdGhpcy4kTDsKICAgICAgICAgIHZhciBuMTQgPSB0aGlzLmNsb25lKCksIHIxMiA9IHczKHQxMCwgZTEyLCB0cnVlKTsKICAgICAgICAgIHJldHVybiByMTIgJiYgKG4xNC4kTCA9IHIxMiksIG4xNDsKICAgICAgICB9LCBtNy5jbG9uZSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGI1LncodGhpcy4kZCwgdGhpcyk7CiAgICAgICAgfSwgbTcudG9EYXRlID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbmV3IERhdGUodGhpcy52YWx1ZU9mKCkpOwogICAgICAgIH0sIG03LnRvSlNPTiA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuaXNWYWxpZCgpID8gdGhpcy50b0lTT1N0cmluZygpIDogbnVsbDsKICAgICAgICB9LCBtNy50b0lTT1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9JU09TdHJpbmcoKTsKICAgICAgICB9LCBtNy50b1N0cmluZyA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuJGQudG9VVENTdHJpbmcoKTsKICAgICAgICB9LCBNNDsKICAgICAgfSkoKSwgazQgPSBfNC5wcm90b3R5cGU7CiAgICAgIHJldHVybiBPMi5wcm90b3R5cGUgPSBrNCwgW1siJG1zIiwgcjExXSwgWyIkcyIsIGkxMV0sIFsiJG0iLCBzOV0sIFsiJEgiLCB1N10sIFsiJFciLCBhNV0sIFsiJE0iLCBjMTFdLCBbIiR5IiwgaDldLCBbIiREIiwgZDZdXS5mb3JFYWNoKChmdW5jdGlvbih0MTApIHsKICAgICAgICBrNFt0MTBbMV1dID0gZnVuY3Rpb24oZTEyKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4kZyhlMTIsIHQxMFswXSwgdDEwWzFdKTsKICAgICAgICB9OwogICAgICB9KSksIE8yLmV4dGVuZCA9IGZ1bmN0aW9uKHQxMCwgZTEyKSB7CiAgICAgICAgcmV0dXJuIHQxMC4kaSB8fCAodDEwKGUxMiwgXzQsIE8yKSwgdDEwLiRpID0gdHJ1ZSksIE8yOwogICAgICB9LCBPMi5sb2NhbGUgPSB3MywgTzIuaXNEYXlqcyA9IFM1LCBPMi51bml4ID0gZnVuY3Rpb24odDEwKSB7CiAgICAgICAgcmV0dXJuIE8yKDFlMyAqIHQxMCk7CiAgICAgIH0sIE8yLmVuID0gRDRbZzRdLCBPMi5McyA9IEQ0LCBPMi5wID0ge30sIE8yOwogICAgfSkpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMKdmFyIHJlcXVpcmVfaXNUb2RheSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vZGF5anNAMS4xMS4xOS9ub2RlX21vZHVsZXMvZGF5anMvcGx1Z2luL2lzVG9kYXkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgIShmdW5jdGlvbihlMTEsIG8xMykgewogICAgICAib2JqZWN0IiA9PSB0eXBlb2YgZXhwb3J0cyAmJiAidW5kZWZpbmVkIiAhPSB0eXBlb2YgbW9kdWxlID8gbW9kdWxlLmV4cG9ydHMgPSBvMTMoKSA6ICJmdW5jdGlvbiIgPT0gdHlwZW9mIGRlZmluZSAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKG8xMykgOiAoZTExID0gInVuZGVmaW5lZCIgIT0gdHlwZW9mIGdsb2JhbFRoaXMgPyBnbG9iYWxUaGlzIDogZTExIHx8IHNlbGYpLmRheWpzX3BsdWdpbl9pc1RvZGF5ID0gbzEzKCk7CiAgICB9KShleHBvcnRzLCAoZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKGUxMSwgbzEzLCB0OSkgewogICAgICAgIG8xMy5wcm90b3R5cGUuaXNUb2RheSA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGUxMiA9ICJZWVlZLU1NLUREIiwgbzE0ID0gdDkoKTsKICAgICAgICAgIHJldHVybiB0aGlzLmZvcm1hdChlMTIpID09PSBvMTQuZm9ybWF0KGUxMik7CiAgICAgICAgfTsKICAgICAgfTsKICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3BhcnNlLW1zQDQuMC4wL25vZGVfbW9kdWxlcy9wYXJzZS1tcy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZU51bWJlcihtaWxsaXNlY29uZHMyKSB7CiAgcmV0dXJuIHsKICAgIGRheXM6IE1hdGgudHJ1bmMobWlsbGlzZWNvbmRzMiAvIDg2NGU1KSwKICAgIGhvdXJzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgLyAzNmU1ICUgMjQpLAogICAgbWludXRlczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gNmU0ICUgNjApLAogICAgc2Vjb25kczogTWF0aC50cnVuYyhtaWxsaXNlY29uZHMyIC8gMWUzICUgNjApLAogICAgbWlsbGlzZWNvbmRzOiBNYXRoLnRydW5jKG1pbGxpc2Vjb25kczIgJSAxZTMpLAogICAgbWljcm9zZWNvbmRzOiBNYXRoLnRydW5jKHRvWmVyb0lmSW5maW5pdHkobWlsbGlzZWNvbmRzMiAqIDFlMykgJSAxZTMpLAogICAgbmFub3NlY29uZHM6IE1hdGgudHJ1bmModG9aZXJvSWZJbmZpbml0eShtaWxsaXNlY29uZHMyICogMWU2KSAlIDFlMykKICB9Owp9CmZ1bmN0aW9uIHBhcnNlQmlnaW50KG1pbGxpc2Vjb25kczIpIHsKICByZXR1cm4gewogICAgZGF5czogbWlsbGlzZWNvbmRzMiAvIDg2NDAwMDAwbiwKICAgIGhvdXJzOiBtaWxsaXNlY29uZHMyIC8gMzYwMDAwMG4gJSAyNG4sCiAgICBtaW51dGVzOiBtaWxsaXNlY29uZHMyIC8gNjAwMDBuICUgNjBuLAogICAgc2Vjb25kczogbWlsbGlzZWNvbmRzMiAvIDEwMDBuICUgNjBuLAogICAgbWlsbGlzZWNvbmRzOiBtaWxsaXNlY29uZHMyICUgMTAwMG4sCiAgICBtaWNyb3NlY29uZHM6IDBuLAogICAgbmFub3NlY29uZHM6IDBuCiAgfTsKfQpmdW5jdGlvbiBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKSB7CiAgc3dpdGNoICh0eXBlb2YgbWlsbGlzZWNvbmRzMikgewogICAgY2FzZSAibnVtYmVyIjogewogICAgICBpZiAoTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICAgICAgcmV0dXJuIHBhcnNlTnVtYmVyKG1pbGxpc2Vjb25kczIpOwogICAgICB9CiAgICAgIGJyZWFrOwogICAgfQogICAgY2FzZSAiYmlnaW50IjogewogICAgICByZXR1cm4gcGFyc2VCaWdpbnQobWlsbGlzZWNvbmRzMik7CiAgICB9CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGEgZmluaXRlIG51bWJlciBvciBiaWdpbnQiKTsKfQp2YXIgdG9aZXJvSWZJbmZpbml0eTsKdmFyIGluaXRfcGFyc2VfbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXJzZS1tc0A0LjAuMC9ub2RlX21vZHVsZXMvcGFyc2UtbXMvaW5kZXguanMiKCkgewogICAgdG9aZXJvSWZJbmZpbml0eSA9ICh2YWx1ZTIpID0+IE51bWJlci5pc0Zpbml0ZSh2YWx1ZTIpID8gdmFsdWUyIDogMDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ByZXR0eS1tc0A5LjMuMC9ub2RlX21vZHVsZXMvcHJldHR5LW1zL2luZGV4LmpzCmZ1bmN0aW9uIHByZXR0eU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyLCBvcHRpb25zKSB7CiAgY29uc3QgaXNCaWdJbnQgPSB0eXBlb2YgbWlsbGlzZWNvbmRzMiA9PT0gImJpZ2ludCI7CiAgaWYgKCFpc0JpZ0ludCAmJiAhTnVtYmVyLmlzRmluaXRlKG1pbGxpc2Vjb25kczIpKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZpbml0ZSBudW1iZXIgb3IgYmlnaW50Iik7CiAgfQogIG9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjb25zdCBzaWduID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAiLSIgOiAiIjsKICBtaWxsaXNlY29uZHMyID0gbWlsbGlzZWNvbmRzMiA8IDAgPyAtbWlsbGlzZWNvbmRzMiA6IG1pbGxpc2Vjb25kczI7CiAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgb3B0aW9ucy5jb21wYWN0ID0gZmFsc2U7CiAgICBvcHRpb25zLmZvcm1hdFN1Yk1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy5zZXBhcmF0ZU1pbGxpc2Vjb25kcyA9IGZhbHNlOwogICAgb3B0aW9ucy52ZXJib3NlID0gZmFsc2U7CiAgfQogIGlmIChvcHRpb25zLmNvbXBhY3QpIHsKICAgIG9wdGlvbnMudW5pdENvdW50ID0gMTsKICAgIG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSAwOwogICAgb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID0gMDsKICB9CiAgbGV0IHJlc3VsdCA9IFtdOwogIGNvbnN0IGZsb29yRGVjaW1hbHMgPSAodmFsdWUyLCBkZWNpbWFsRGlnaXRzKSA9PiB7CiAgICBjb25zdCBmbG9vcmVkSW50ZXJpbVZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZTIgKiAxMCAqKiBkZWNpbWFsRGlnaXRzICsgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04pOwogICAgY29uc3QgZmxvb3JlZFZhbHVlID0gTWF0aC5yb3VuZChmbG9vcmVkSW50ZXJpbVZhbHVlKSAvIDEwICoqIGRlY2ltYWxEaWdpdHM7CiAgICByZXR1cm4gZmxvb3JlZFZhbHVlLnRvRml4ZWQoZGVjaW1hbERpZ2l0cyk7CiAgfTsKICBjb25zdCBhZGQzID0gKHZhbHVlMiwgbG9uZywgc2hvcnQsIHZhbHVlU3RyaW5nKSA9PiB7CiAgICBpZiAoKHJlc3VsdC5sZW5ndGggPT09IDAgfHwgIW9wdGlvbnMuY29sb25Ob3RhdGlvbikgJiYgaXNaZXJvKHZhbHVlMikgJiYgIShvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgc2hvcnQgPT09ICJtIikpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgdmFsdWVTdHJpbmcgPz89IFN0cmluZyh2YWx1ZTIpOwogICAgaWYgKG9wdGlvbnMuY29sb25Ob3RhdGlvbikgewogICAgICBjb25zdCB3aG9sZURpZ2l0cyA9IHZhbHVlU3RyaW5nLmluY2x1ZGVzKCIuIikgPyB2YWx1ZVN0cmluZy5zcGxpdCgiLiIpWzBdLmxlbmd0aCA6IHZhbHVlU3RyaW5nLmxlbmd0aDsKICAgICAgY29uc3QgbWluTGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCA+IDAgPyAyIDogMTsKICAgICAgdmFsdWVTdHJpbmcgPSAiMCIucmVwZWF0KE1hdGgubWF4KDAsIG1pbkxlbmd0aCAtIHdob2xlRGlnaXRzKSkgKyB2YWx1ZVN0cmluZzsKICAgIH0gZWxzZSB7CiAgICAgIHZhbHVlU3RyaW5nICs9IG9wdGlvbnMudmVyYm9zZSA/ICIgIiArIHBsdXJhbGl6ZShsb25nLCB2YWx1ZTIpIDogc2hvcnQ7CiAgICB9CiAgICByZXN1bHQucHVzaCh2YWx1ZVN0cmluZyk7CiAgfTsKICBjb25zdCBwYXJzZWQgPSBwYXJzZU1pbGxpc2Vjb25kcyhtaWxsaXNlY29uZHMyKTsKICBjb25zdCBkYXlzMiA9IEJpZ0ludChwYXJzZWQuZGF5cyk7CiAgaWYgKG9wdGlvbnMuaGlkZVllYXJBbmREYXlzKSB7CiAgICBhZGQzKEJpZ0ludChkYXlzMikgKiAyNG4gKyBCaWdJbnQocGFyc2VkLmhvdXJzKSwgImhvdXIiLCAiaCIpOwogIH0gZWxzZSB7CiAgICBpZiAob3B0aW9ucy5oaWRlWWVhcikgewogICAgICBhZGQzKGRheXMyLCAiZGF5IiwgImQiKTsKICAgIH0gZWxzZSB7CiAgICAgIGFkZDMoZGF5czIgLyAzNjVuLCAieWVhciIsICJ5Iik7CiAgICAgIGFkZDMoZGF5czIgJSAzNjVuLCAiZGF5IiwgImQiKTsKICAgIH0KICAgIGFkZDMoTnVtYmVyKHBhcnNlZC5ob3VycyksICJob3VyIiwgImgiKTsKICB9CiAgYWRkMyhOdW1iZXIocGFyc2VkLm1pbnV0ZXMpLCAibWludXRlIiwgIm0iKTsKICBpZiAoIW9wdGlvbnMuaGlkZVNlY29uZHMpIHsKICAgIGlmIChvcHRpb25zLnNlcGFyYXRlTWlsbGlzZWNvbmRzIHx8IG9wdGlvbnMuZm9ybWF0U3ViTWlsbGlzZWNvbmRzIHx8ICFvcHRpb25zLmNvbG9uTm90YXRpb24gJiYgbWlsbGlzZWNvbmRzMiA8IDFlMyAmJiAhb3B0aW9ucy5zdWJTZWNvbmRzQXNEZWNpbWFscykgewogICAgICBjb25zdCBzZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5zZWNvbmRzKTsKICAgICAgY29uc3QgbWlsbGlzZWNvbmRzMyA9IE51bWJlcihwYXJzZWQubWlsbGlzZWNvbmRzKTsKICAgICAgY29uc3QgbWljcm9zZWNvbmRzID0gTnVtYmVyKHBhcnNlZC5taWNyb3NlY29uZHMpOwogICAgICBjb25zdCBuYW5vc2Vjb25kcyA9IE51bWJlcihwYXJzZWQubmFub3NlY29uZHMpOwogICAgICBhZGQzKHNlY29uZHMsICJzZWNvbmQiLCAicyIpOwogICAgICBpZiAob3B0aW9ucy5mb3JtYXRTdWJNaWxsaXNlY29uZHMpIHsKICAgICAgICBhZGQzKG1pbGxpc2Vjb25kczMsICJtaWxsaXNlY29uZCIsICJtcyIpOwogICAgICAgIGFkZDMobWljcm9zZWNvbmRzLCAibWljcm9zZWNvbmQiLCAiXHhCNXMiKTsKICAgICAgICBhZGQzKG5hbm9zZWNvbmRzLCAibmFub3NlY29uZCIsICJucyIpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0FuZEJlbG93ID0gbWlsbGlzZWNvbmRzMyArIG1pY3Jvc2Vjb25kcyAvIDFlMyArIG5hbm9zZWNvbmRzIC8gMWU2OwogICAgICAgIGNvbnN0IG1pbGxpc2Vjb25kc0RlY2ltYWxEaWdpdHMgPSB0eXBlb2Ygb3B0aW9ucy5taWxsaXNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMubWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA6IDA7CiAgICAgICAgY29uc3Qgcm91bmRlZE1pbGxpc2Vjb25kcyA9IG1pbGxpc2Vjb25kc0FuZEJlbG93ID49IDEgPyBNYXRoLnJvdW5kKG1pbGxpc2Vjb25kc0FuZEJlbG93KSA6IE1hdGguY2VpbChtaWxsaXNlY29uZHNBbmRCZWxvdyk7CiAgICAgICAgY29uc3QgbWlsbGlzZWNvbmRzU3RyaW5nID0gbWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cyA/IG1pbGxpc2Vjb25kc0FuZEJlbG93LnRvRml4ZWQobWlsbGlzZWNvbmRzRGVjaW1hbERpZ2l0cykgOiByb3VuZGVkTWlsbGlzZWNvbmRzOwogICAgICAgIGFkZDMoCiAgICAgICAgICBOdW1iZXIucGFyc2VGbG9hdChtaWxsaXNlY29uZHNTdHJpbmcpLAogICAgICAgICAgIm1pbGxpc2Vjb25kIiwKICAgICAgICAgICJtcyIsCiAgICAgICAgICBtaWxsaXNlY29uZHNTdHJpbmcKICAgICAgICApOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBzZWNvbmRzID0gKGlzQmlnSW50ID8gTnVtYmVyKG1pbGxpc2Vjb25kczIgJSBPTkVfREFZX0lOX01JTExJU0VDT05EUykgOiBtaWxsaXNlY29uZHMyKSAvIDFlMyAlIDYwOwogICAgICBjb25zdCBzZWNvbmRzRGVjaW1hbERpZ2l0cyA9IHR5cGVvZiBvcHRpb25zLnNlY29uZHNEZWNpbWFsRGlnaXRzID09PSAibnVtYmVyIiA/IG9wdGlvbnMuc2Vjb25kc0RlY2ltYWxEaWdpdHMgOiAxOwogICAgICBjb25zdCBzZWNvbmRzRml4ZWQgPSBmbG9vckRlY2ltYWxzKHNlY29uZHMsIHNlY29uZHNEZWNpbWFsRGlnaXRzKTsKICAgICAgY29uc3Qgc2Vjb25kc1N0cmluZyA9IG9wdGlvbnMua2VlcERlY2ltYWxzT25XaG9sZVNlY29uZHMgPyBzZWNvbmRzRml4ZWQgOiBzZWNvbmRzRml4ZWQucmVwbGFjZSgvXC4wKyQvLCAiIik7CiAgICAgIGFkZDMoTnVtYmVyLnBhcnNlRmxvYXQoc2Vjb25kc1N0cmluZyksICJzZWNvbmQiLCAicyIsIHNlY29uZHNTdHJpbmcpOwogICAgfQogIH0KICBpZiAocmVzdWx0Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHNpZ24gKyAiMCIgKyAob3B0aW9ucy52ZXJib3NlID8gIiBtaWxsaXNlY29uZHMiIDogIm1zIik7CiAgfQogIGNvbnN0IHNlcGFyYXRvciA9IG9wdGlvbnMuY29sb25Ob3RhdGlvbiA/ICI6IiA6ICIgIjsKICBpZiAodHlwZW9mIG9wdGlvbnMudW5pdENvdW50ID09PSAibnVtYmVyIikgewogICAgcmVzdWx0ID0gcmVzdWx0LnNsaWNlKDAsIE1hdGgubWF4KG9wdGlvbnMudW5pdENvdW50LCAxKSk7CiAgfQogIHJldHVybiBzaWduICsgcmVzdWx0LmpvaW4oc2VwYXJhdG9yKTsKfQp2YXIgaXNaZXJvLCBwbHVyYWxpemUsIFNFQ09ORF9ST1VORElOR19FUFNJTE9OLCBPTkVfREFZX0lOX01JTExJU0VDT05EUzsKdmFyIGluaXRfcHJldHR5X21zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJldHR5LW1zQDkuMy4wL25vZGVfbW9kdWxlcy9wcmV0dHktbXMvaW5kZXguanMiKCkgewogICAgaW5pdF9wYXJzZV9tcygpOwogICAgaXNaZXJvID0gKHZhbHVlMikgPT4gdmFsdWUyID09PSAwIHx8IHZhbHVlMiA9PT0gMG47CiAgICBwbHVyYWxpemUgPSAod29yZCwgY291bnQyKSA9PiBjb3VudDIgPT09IDEgfHwgY291bnQyID09PSAxbiA/IHdvcmQgOiBgJHt3b3JkfXNgOwogICAgU0VDT05EX1JPVU5ESU5HX0VQU0lMT04gPSAxZS03OwogICAgT05FX0RBWV9JTl9NSUxMSVNFQ09ORFMgPSAyNG4gKiA2MG4gKiA2MG4gKiAxMDAwbjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLnBsdWdpbnMuanMKdmFyIGltcG9ydF9kYXlqcywgaW1wb3J0X2lzVG9kYXk7CnZhciBpbml0X3NtYXJ0dGltZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfY3JvbmVyKCk7CiAgICBpbml0X2RhdGVfZm5zKCk7CiAgICBpbXBvcnRfZGF5anMgPSBfX3RvRVNNKHJlcXVpcmVfZGF5anNfbWluKCksIDEpOwogICAgaW1wb3J0X2lzVG9kYXkgPSBfX3RvRVNNKHJlcXVpcmVfaXNUb2RheSgpLCAxKTsKICAgIGluaXRfcHJldHR5X21zKCk7CiAgICBpbXBvcnRfZGF5anMuZGVmYXVsdC5leHRlbmQoaW1wb3J0X2lzVG9kYXkuZGVmYXVsdCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMKdmFyIENyb25QYXJzZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmNyb25wYXJzZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgQ3JvblBhcnNlciA9IGNsYXNzIHsKICAgICAgZ2V0IGNyb25BcnJheSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5jcm9uRXhwcmVzc2lvbi5zcGxpdCgiICIpOwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKGNyb25FeHByZXNzaW9uQXJnKSB7CiAgICAgICAgdGhpcy5jcm9uRXhwcmVzc2lvbiA9IGNyb25FeHByZXNzaW9uQXJnOwogICAgICAgIGlmICh0aGlzLmNyb25BcnJheS5sZW5ndGggPCA2KSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkNyb25QYXJzZXIgbmVlZHMgc2Vjb25kIGxldmVsIGFjY3VyYWN5Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldE5leHRQYXJ0TWF0Y2goY3JvblBhcnQsIHN0YXJ0VmFsdWUsIG1vZHVsb0FyZykgewogICAgICAgIGlmIChjcm9uUGFydCA9PT0gIioiKSB7CiAgICAgICAgICByZXR1cm4gc3RhcnRWYWx1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNyb25QYXJ0LmluY2x1ZGVzKCIvIikpIHsKICAgICAgICAgIGNvbnN0IGV2ZXJ5MyA9IHBhcnNlSW50KGNyb25QYXJ0LnNwbGl0KCIvIilbMV0sIDEwKTsKICAgICAgICAgIGNvbnN0IGZpbmRFdmVuTWF0Y2ggPSAocmVjdXJzaW9uU3RhcnRBcmcpID0+IHsKICAgICAgICAgICAgaWYgKHJlY3Vyc2lvblN0YXJ0QXJnICUgZXZlcnkzID09PSAwKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlY3Vyc2lvblN0YXJ0QXJnOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmaW5kRXZlbk1hdGNoKHJlY3Vyc2lvblN0YXJ0QXJnICsgMSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gZmluZEV2ZW5NYXRjaChzdGFydFZhbHVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcnNlSW50KGNyb25QYXJ0LCAxMCkgfHwgY3JvblBhcnQgPT09ICIwIikgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gcGFyc2VJbnQoY3JvblBhcnQsIDEwKTsKICAgICAgICAgIHJldHVybiBtYXRjaDI7CiAgICAgICAgfQogICAgICB9CiAgICAgIG1zVG9OZXh0KCkgewogICAgICAgIGNvbnN0IGNyb25BcnJheSA9IHRoaXMuY3JvbkFycmF5OwogICAgICAgIGNvbnN0IHNlY29uZEV4cHJlc3Npb24gPSBjcm9uQXJyYXlbMF07CiAgICAgICAgY29uc3QgbWludXRlRXhwcmVzc2lvbiA9IGNyb25BcnJheVsxXTsKICAgICAgICBjb25zdCBob3VyRXhwcmVzc2lvbiA9IGNyb25BcnJheVsyXTsKICAgICAgICBjb25zdCBkYXlFeHByZXNzaW9uID0gY3JvbkFycmF5WzNdOwogICAgICAgIGNvbnN0IG1vbnRoRXhwcmVzc2lvbiA9IGNyb25BcnJheVs0XTsKICAgICAgICBjb25zdCB5ZWFyRXhwcmVzc2lvbiA9IGNyb25BcnJheVs1XTsKICAgICAgICBsZXQgY3VycmVudERhdGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudFNlY29uZCA9IGN1cnJlbnREYXRlLmdldFNlY29uZHMoKSArIDE7CiAgICAgICAgbGV0IGN1cnJlbnRNaW51dGUgPSBjdXJyZW50RGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgbGV0IGN1cnJlbnRIb3VyID0gY3VycmVudERhdGUuZ2V0SG91cnMoKTsKICAgICAgICBsZXQgY3VycmVudERheSA9IGN1cnJlbnREYXRlLmdldERhdGUoKTsKICAgICAgICBsZXQgY3VycmVudE1vbnRoID0gY3VycmVudERhdGUuZ2V0TW9udGgoKTsKICAgICAgICBsZXQgY3VycmVudFllYXIgPSBjdXJyZW50RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICAgIGNvbnN0IHRhcmdldFNlY29uZCA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChzZWNvbmRFeHByZXNzaW9uLCBjdXJyZW50U2Vjb25kLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldFNlY29uZCA8IGN1cnJlbnRTZWNvbmQpIHsKICAgICAgICAgIGN1cnJlbnRNaW51dGUgPSAoY3VycmVudE1pbnV0ZSArIDEpICUgNTk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHRhcmdldE1pbnV0ZSA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChtaW51dGVFeHByZXNzaW9uLCBjdXJyZW50TWludXRlLCA1OSk7CiAgICAgICAgaWYgKHRhcmdldE1pbnV0ZSA8IGN1cnJlbnRNaW51dGUpIHsKICAgICAgICAgIGN1cnJlbnRIb3VyID0gKGN1cnJlbnRIb3VyICsgMSkgJSAyMzsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0SG91ciA9IHRoaXMuZ2V0TmV4dFBhcnRNYXRjaChob3VyRXhwcmVzc2lvbiwgY3VycmVudEhvdXIsIDIzKTsKICAgICAgICBpZiAodGFyZ2V0SG91ciA8IGN1cnJlbnRIb3VyKSB7CiAgICAgICAgICBjdXJyZW50RGF5ID0gKGN1cnJlbnREYXkgKyAxKSAlIDMwOwogICAgICAgIH0KICAgICAgICBjb25zdCB0YXJnZXREYXkgPSBjdXJyZW50RGF5OwogICAgICAgIGlmICh0YXJnZXREYXkgPCBjdXJyZW50RGF5KSB7CiAgICAgICAgICBjdXJyZW50TW9udGggPSAoY3VycmVudE1vbnRoICsgMSkgJSAxMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0TW9udGggPSBjdXJyZW50TW9udGg7CiAgICAgICAgaWYgKHRhcmdldE1vbnRoIDwgY3VycmVudE1vbnRoKSB7CiAgICAgICAgICBjdXJyZW50WWVhciA9IGN1cnJlbnRZZWFyICsgMTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdGFyZ2V0WWVhciA9IGN1cnJlbnRZZWFyOwogICAgICAgIGNvbnN0IHRhcmdldERhdGUgPSBuZXcgRGF0ZSh0YXJnZXRZZWFyLCB0YXJnZXRNb250aCwgdGFyZ2V0RGF5LCB0YXJnZXRIb3VyLCB0YXJnZXRNaW51dGUsIHRhcmdldFNlY29uZCk7CiAgICAgICAgY29uc3QgdGFyZ2V0VGltZSA9IHRhcmdldERhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiB0YXJnZXRUaW1lIC0gRGF0ZS5ub3coKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcwp2YXIgQ3JvbkpvYjsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfY3JvbmpvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3JvbmpvYi5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25wYXJzZXIoKTsKICAgIENyb25Kb2IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGNyb25NYW5hZ2VyLCBjcm9uRXhwcmVzc2lvbkFyZywgam9iRnVuY3Rpb24pIHsKICAgICAgICB0aGlzLnN0YXR1cyA9ICJpbml0aWFsIjsKICAgICAgICB0aGlzLm5leHRFeGVjdXRpb25Vbml4ID0gMDsKICAgICAgICB0aGlzLmNyb25FeHByZXNzaW9uID0gY3JvbkV4cHJlc3Npb25Bcmc7CiAgICAgICAgdGhpcy5qb2JGdW5jdGlvbiA9IGpvYkZ1bmN0aW9uOwogICAgICAgIHRoaXMuY3JvblBhcnNlciA9IG5ldyBjcm9uZXJfZXhwb3J0cy5Dcm9uKGNyb25FeHByZXNzaW9uQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgY3JvbmpvYiBuZWVkcyB0byBiZSBleGVjdXRlZAogICAgICAgKi8KICAgICAgY2hlY2tFeGVjdXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPT09IDApIHsKICAgICAgICAgIHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgaWYgKERhdGUubm93KCkgPiB0aGlzLm5leHRFeGVjdXRpb25Vbml4KSB7CiAgICAgICAgICBjb25zdCBtYXliZVByb21pc2UgPSB0aGlzLmpvYkZ1bmN0aW9uKHRoaXMubmV4dEV4ZWN1dGlvblVuaXgpOwogICAgICAgICAgaWYgKG1heWJlUHJvbWlzZSBpbnN0YW5jZW9mIFByb21pc2UpIHsKICAgICAgICAgICAgbWF5YmVQcm9taXNlLmNhdGNoKChlMTEpID0+IGNvbnNvbGUubG9nKGUxMSkpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5uZXh0RXhlY3V0aW9uVW5peCA9IHRoaXMuZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXg7CiAgICAgIH0KICAgICAgZ2V0TmV4dEV4ZWN1dGlvblRpbWUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubmV4dEV4ZWN1dGlvblVuaXggPSBEYXRlLm5vdygpICsgdGhpcy5nZXRUaW1lVG9OZXh0RXhlY3V0aW9uKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgdGhlIHRpbWUgdG8gbmV4dCBleGVjdXRpb24KICAgICAgICovCiAgICAgIGdldFRpbWVUb05leHRFeGVjdXRpb24oKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY3JvblBhcnNlci5tc1RvTmV4dCgpOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICB9CiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcwp2YXIgdW5pdHMsIGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlU3RyaW5nLCBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lOwp2YXIgaW5pdF9zbWFydHRpbWVfdW5pdHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS51bml0cy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICB1bml0cyA9IHsKICAgICAgeWVhcnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzMTU0ZTc7CiAgICAgIH0sCiAgICAgIG1vbnRoczogKHRpbWVzQXJnID0gMSkgPT4gewogICAgICAgIHJldHVybiB0aW1lc0FyZyAqIDI2MjhlNjsKICAgICAgfSwKICAgICAgd2Vla3M6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA2MDQ4ZTU7CiAgICAgIH0sCiAgICAgIGRheXM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiA4NjRlNTsKICAgICAgfSwKICAgICAgaG91cnM6ICh0aW1lc0FyZyA9IDEpID0+IHsKICAgICAgICByZXR1cm4gdGltZXNBcmcgKiAzNmU1OwogICAgICB9LAogICAgICBtaW51dGVzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogNmU0OwogICAgICB9LAogICAgICBzZWNvbmRzOiAodGltZXNBcmcgPSAxKSA9PiB7CiAgICAgICAgcmV0dXJuIHRpbWVzQXJnICogMWUzOwogICAgICB9CiAgICB9OwogICAgZ2V0TWlsbGlTZWNvbmRzRnJvbVVuaXRzID0gKGNvbWJpbmF0aW9uQXJnKSA9PiB7CiAgICAgIGxldCB0aW1lSW5NaWxsaXNlY29uZHMgPSAwOwogICAgICBsZXQgYWRkTWlsbGlTZWNvbmRzID0gKG1pbGxpU2Vjb25kc0FyZykgPT4gewogICAgICAgIHRpbWVJbk1pbGxpc2Vjb25kcyA9IHRpbWVJbk1pbGxpc2Vjb25kcyArIG1pbGxpU2Vjb25kc0FyZzsKICAgICAgfTsKICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnllYXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLnllYXJzKGNvbWJpbmF0aW9uQXJnLnllYXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1vbnRocykgewogICAgICAgIGFkZE1pbGxpU2Vjb25kcyh1bml0cy5tb250aHMoY29tYmluYXRpb25BcmcubW9udGhzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLndlZWtzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLndlZWtzKGNvbWJpbmF0aW9uQXJnLndlZWtzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmRheXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuZGF5cyhjb21iaW5hdGlvbkFyZy5kYXlzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSB7CiAgICAgICAgYWRkTWlsbGlTZWNvbmRzKHVuaXRzLmhvdXJzKGNvbWJpbmF0aW9uQXJnLmhvdXJzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLm1pbnV0ZXMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMubWludXRlcyhjb21iaW5hdGlvbkFyZy5taW51dGVzKSk7CiAgICAgIH0KICAgICAgaWYgKGNvbWJpbmF0aW9uQXJnLnNlY29uZHMpIHsKICAgICAgICBhZGRNaWxsaVNlY29uZHModW5pdHMuc2Vjb25kcyhjb21iaW5hdGlvbkFyZy5zZWNvbmRzKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRpbWVJbk1pbGxpc2Vjb25kczsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcgPSAobWlsbGlTZWNvbmRzQXJnKSA9PiB7CiAgICAgIHJldHVybiBwcmV0dHlNaWxsaXNlY29uZHMobWlsbGlTZWNvbmRzQXJnKTsKICAgIH07CiAgICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVBZ29UaW1lID0gKHRpbWVTdGFtcEFyZykgPT4gewogICAgICByZXR1cm4gZGF0ZV9mbnNfZXhwb3J0cy5mb3JtYXREaXN0YW5jZVRvTm93KG5ldyBEYXRlKHRpbWVTdGFtcEFyZykpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMKdmFyIENyb25NYW5hZ2VyOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9ubWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuY3Jvbm1hbmFnZXIuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19jcm9uam9iKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgQ3Jvbk1hbmFnZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuY3JvbmpvYnMgPSBuZXcgZGlzdF90c19leHBvcnRzNi5PYmplY3RNYXAoKTsKICAgICAgfQogICAgICBhZGRDcm9uam9iKGNyb25JZGVudGlmaWVyQXJnLCBjcm9uRnVuY3Rpb25BcmcpIHsKICAgICAgICBjb25zdCBuZXdDcm9uSm9iID0gbmV3IENyb25Kb2IodGhpcywgY3JvbklkZW50aWZpZXJBcmcsIGNyb25GdW5jdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jcm9uam9icy5hZGQobmV3Q3JvbkpvYik7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIpIHsKICAgICAgICAgIG5ld0Nyb25Kb2Iuc3RhcnQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld0Nyb25Kb2I7CiAgICAgIH0KICAgICAgcmVtb3ZlQ3JvbmpvYihjcm9uam9iQXJnKSB7CiAgICAgICAgY3JvbmpvYkFyZy5zdG9wKCk7CiAgICAgICAgdGhpcy5jcm9uam9icy5yZW1vdmUoY3JvbmpvYkFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0cyB0aGUgY3JvbmpvYgogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhdHVzICE9PSAic3RhcnRlZCIpIHsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLnN0YXJ0KCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnJ1bkNyb25DeWNsZSgpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBydW5Dcm9uQ3ljbGUoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgwKTsKICAgICAgICBkbyB7CiAgICAgICAgICBsZXQgbmV4dFJ1bm5pbmdDcm9uam9iOwogICAgICAgICAgZm9yIChjb25zdCBjcm9uSm9iIG9mIHRoaXMuY3JvbmpvYnMuZ2V0QXJyYXkoKSkgewogICAgICAgICAgICBjcm9uSm9iLmNoZWNrRXhlY3V0aW9uKCk7CiAgICAgICAgICAgIGlmICghbmV4dFJ1bm5pbmdDcm9uam9iIHx8IGNyb25Kb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpIDwgbmV4dFJ1bm5pbmdDcm9uam9iLmdldFRpbWVUb05leHRFeGVjdXRpb24oKSkgewogICAgICAgICAgICAgIG5leHRSdW5uaW5nQ3JvbmpvYiA9IGNyb25Kb2I7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGlmIChuZXh0UnVubmluZ0Nyb25qb2IpIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dChuZXh0UnVubmluZ0Nyb25qb2IuZ2V0VGltZVRvTmV4dEV4ZWN1dGlvbigpKTsKICAgICAgICAgICAgY29uc29sZS5sb2coYE5leHQgQ3JvbkpvYiBzY2hlZHVsZWQgaW4gJHtnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmcodGhpcy5leGVjdXRpb25UaW1lb3V0LmdldFRpbWVMZWZ0KCkpfWApOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5leGVjdXRpb25UaW1lb3V0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czMuVGltZW91dCgxZTMpOwogICAgICAgICAgICBjb25zb2xlLmxvZygibm8gY3JvbmpvYnMgc3BlY2lmaWVkISBDaGVja2luZyBhZ2FpbiBpbiAxIHNlY29uZCIpOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25UaW1lb3V0LnByb21pc2U7CiAgICAgICAgfSB3aGlsZSAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3BzIGFsbCBjcm9uam9icwogICAgICAgKi8KICAgICAgc3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdGFydGVkIikgewogICAgICAgICAgdGhpcy5zdGF0dXMgPSAic3RvcHBlZCI7CiAgICAgICAgICB0aGlzLmV4ZWN1dGlvblRpbWVvdXQuY2FuY2VsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBZb3UgdHJpZWQgdG8gc3RvcCBhIENyb25NYW5hZ2VyIHRoYXQgd2FzIG5vdCBhY3R1YWxseSBzdGFydGVkLmApOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGNyb24gb2YgdGhpcy5jcm9uam9icy5nZXRBcnJheSgpKSB7CiAgICAgICAgICBjcm9uLnN0b3AoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcwp2YXIgRXh0ZW5kZWREYXRlOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19leHRlbmRlZGRhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmV4dGVuZGVkZGF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV91bml0cygpOwogICAgRXh0ZW5kZWREYXRlID0gY2xhc3MgX0V4dGVuZGVkRGF0ZSBleHRlbmRzIERhdGUgewogICAgICAvLyBTVEFUSUMgZmFjdG9yaWVzCiAgICAgIHN0YXRpYyBmcm9tTWlsbGlzKG1pbGxpU2Vjb25kcykgewogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShtaWxsaVNlY29uZHMpOwogICAgICB9CiAgICAgIHN0YXRpYyBmcm9tRGF0ZShkYXRlQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKGRhdGVBcmcuZ2V0VGltZSgpKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbUV1cm9wZWFuRGF0ZShldXJvcGVhbkRhdGUpIHsKICAgICAgICBjb25zdCBkYXRlQXJyYXkgPSAvKC4qKVwuKC4qKVwuKC4qKS8uZXhlYyhldXJvcGVhbkRhdGUpOwogICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSgKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzNdKSwKICAgICAgICAgIC8vIHllYXIKICAgICAgICAgIHBhcnNlRmxvYXQoZGF0ZUFycmF5WzJdKSAtIDEsCiAgICAgICAgICAvLyBtb250aAogICAgICAgICAgcGFyc2VGbG9hdChkYXRlQXJyYXlbMV0pCiAgICAgICAgICAvLyBkYXkKICAgICAgICApOwogICAgICAgIGNvbnN0IHVuaXhNaWxsaSA9IGRhdGUuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZSh1bml4TWlsbGkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIEV4dGVuZGVkIGRhdGUgZnJvbSBhIGh5cGVkRGF0ZSBsaWtlICIyMDE4LTAzLTI4IgogICAgICAgKiBAcGFyYW0gZGF0ZVN0cmluZwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21IeXBoZWREYXRlKGRhdGVTdHJpbmcpIHsKICAgICAgICBjb25zdCBkYXRlTWlsbGlzID0gbmV3IERhdGUoZGF0ZVN0cmluZykuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBuZXcgX0V4dGVuZGVkRGF0ZShkYXRlTWlsbGlzKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2FtZSBhcyAuZnJvbUV1cm9wZWFuRGF0ZSgpLCBidXQgYWNjZXB0cyBhZGRpdGlvbmFsIHRpbWVBcmcgYW5kIHpvbmVBcmcKICAgICAgICovCiAgICAgIHN0YXRpYyBmcm9tRXVyb3BlYW5EYXRlQW5kVGltZShldXJvcGVhbkRhdGVBcmcsIHRpbWVBcmcgPSAiMTI6MDA6MDAiLCB6b25lQXJnID0gIkV1cm9wZS9CZXJsaW4iKSB7CiAgICAgICAgY29uc3QgZGF0ZUFycmF5ID0gLyguKilcLiguKilcLiguKikvLmV4ZWMoZXVyb3BlYW5EYXRlQXJnKTsKICAgICAgICBjb25zdCBzbGljZURhdGUgPSAoZGF0ZVN0cmluZykgPT4gewogICAgICAgICAgcmV0dXJuIGAwJHtkYXRlU3RyaW5nfWAuc2xpY2UoLTIpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgZGF0ZVRpbWVTdHJpbmcgPSBgJHtkYXRlQXJyYXlbM119LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsyXSl9LSR7c2xpY2VEYXRlKGRhdGVBcnJheVsxXSl9VCR7dGltZUFyZ31gOwogICAgICAgIGNvbnN0IGRhdGUgPSBpbXBvcnRfZGF5anMuZGVmYXVsdChkYXRlVGltZVN0cmluZyk7CiAgICAgICAgY29uc3QgdW5peE1pbGxpID0gZGF0ZS50b0RhdGUoKS5nZXRUaW1lKCk7CiAgICAgICAgcmV0dXJuIG5ldyBfRXh0ZW5kZWREYXRlKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IodW5peE1pbGxpID0gRGF0ZS5ub3coKSkgewogICAgICAgIHN1cGVyKHVuaXhNaWxsaSk7CiAgICAgIH0KICAgICAgLy8KICAgICAgZXhwb3J0VG9FdXJvcGVhbkRhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi5kYXlTdHJpbmd9LiR7dW5pdHMyLm1vbnRoU3RyaW5nfS4ke3VuaXRzMi55ZWFyU3RyaW5nfWA7CiAgICAgIH0KICAgICAgZXhwb3J0VG9IeXBoZWRTb3J0YWJsZURhdGUoKSB7CiAgICAgICAgY29uc3QgdW5pdHMyID0gdGhpcy5leHBvcnRUb1VuaXRzKCk7CiAgICAgICAgcmV0dXJuIGAke3VuaXRzMi55ZWFyU3RyaW5nfS0ke3VuaXRzMi5tb250aFN0cmluZ30tJHt1bml0czIuZGF5U3RyaW5nfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGV4cG9ydHMgdW5pdHMKICAgICAgICovCiAgICAgIGV4cG9ydFRvVW5pdHMoKSB7CiAgICAgICAgY29uc3QgbW9udGhzQXJyYXkgPSBbCiAgICAgICAgICAiSmFudWFyeSIsCiAgICAgICAgICAiRmVicnVhcnkiLAogICAgICAgICAgIk1hcmNoIiwKICAgICAgICAgICJBcHJpbCIsCiAgICAgICAgICAiTWF5IiwKICAgICAgICAgICJKdW5lIiwKICAgICAgICAgICJKdWx5IiwKICAgICAgICAgICJBdWd1c3QiLAogICAgICAgICAgIlNlcHRlbWJlciIsCiAgICAgICAgICAiT2N0b2JlciIsCiAgICAgICAgICAiTm92ZW1iZXIiLAogICAgICAgICAgIkRlY2VtYmVyIgogICAgICAgIF07CiAgICAgICAgY29uc3QgZGF5c0FycmF5ID0gWwogICAgICAgICAgIk1vbmRheSIsCiAgICAgICAgICAiVHVlc2RheSIsCiAgICAgICAgICAiV2VkbmVzZGF5IiwKICAgICAgICAgICJUaHVyc2RheSIsCiAgICAgICAgICAiRnJpZGF5IiwKICAgICAgICAgICJTYXR1cmRheSIsCiAgICAgICAgICAiU3VuZGF5IgogICAgICAgIF07CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHllYXI6IHRoaXMuZ2V0RnVsbFllYXIoKSwKICAgICAgICAgIHllYXJTdHJpbmc6IGAke3RoaXMuZ2V0RnVsbFllYXIoKX1gLAogICAgICAgICAgbW9udGg6IHRoaXMuZ2V0TW9udGgoKSArIDEsCiAgICAgICAgICBtb250aFN0cmluZzogKCIwIiArICh0aGlzLmdldE1vbnRoKCkgKyAxKSkuc2xpY2UoLTIpLAogICAgICAgICAgbW9udGhOYW1lOiBtb250aHNBcnJheVt0aGlzLmdldE1vbnRoKCldLAogICAgICAgICAgZGF5OiB0aGlzLmdldERhdGUoKSwKICAgICAgICAgIGRheVN0cmluZzogKCIwIiArIHRoaXMuZ2V0RGF0ZSgpKS5zbGljZSgtMiksCiAgICAgICAgICBkYXlPZlRoZVdlZWs6IHRoaXMuZ2V0RGF5KCksCiAgICAgICAgICBkYXlPZlRoZVdlZWtOYW1lOiBkYXlzQXJyYXlbdGhpcy5nZXREYXkoKV0KICAgICAgICB9OwogICAgICB9CiAgICAgIGZvcm1hdChmb3JtYXRBcmcpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmZvcm1hdChmb3JtYXRBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBib29sZWFuIGNoZWNrcwogICAgICAgKi8KICAgICAgaXNUb2RheSgpIHsKICAgICAgICByZXR1cm4gaW1wb3J0X2RheWpzLmRlZmF1bHQodGhpcy5nZXRUaW1lKCkpLmlzVG9kYXkoKTsKICAgICAgfQogICAgICBsZXNzVGltZVBhc3NlZFRvTm93KHVuaXRBcmdzKSB7CiAgICAgICAgY29uc3QgbWF4UGFzc2VkVW5peFRpbWUgPSBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHModW5pdEFyZ3MpOwogICAgICAgIGNvbnN0IGFjdHVhbFBhc3NlZFVuaXhUaW1lID0gRGF0ZS5ub3coKSAtIHRoaXMuZ2V0VGltZSgpOwogICAgICAgIHJldHVybiBhY3R1YWxQYXNzZWRVbml4VGltZSA8IG1heFBhc3NlZFVuaXhUaW1lOwogICAgICB9CiAgICAgIG1vcmVUaW1lUGFzc2VkVG9Ob3codW5pdEFyZ3MpIHsKICAgICAgICByZXR1cm4gIXRoaXMubGVzc1RpbWVQYXNzZWRUb05vdyh1bml0QXJncyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzCnZhciBIcnRNZWFzdXJlbWVudDsKdmFyIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfaHJ0bWVhc3VyZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLmhydG1lYXN1cmVtZW50LmpzIigpIHsKICAgIEhydE1lYXN1cmVtZW50ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLm1pbGxpU2Vjb25kcyA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IG51bGw7CiAgICAgICAgdGhpcy5fbWlsbGlEaWZmID0gbnVsbDsKICAgICAgICB0aGlzLl9zdGFydGVkID0gZmFsc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0YXJ0IHRoZSBtZWFzdXJlbWVudAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgdGhpcy5fc3RhcnRlZCA9IHRydWU7CiAgICAgICAgdGhpcy5fbWlsbGlTdGFydCA9IERhdGUubm93KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHN0b3AgdGhlIG1lYXN1cmVtZW50CiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLl9zdGFydGVkID09PSBmYWxzZSkgewogICAgICAgICAgY29uc29sZS5sb2coIkhhc24ndCBzdGFydGVkIHlldCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBEYXRlLm5vdygpIC0gdGhpcy5fbWlsbGlTdGFydDsKICAgICAgICB0aGlzLm5hbm9TZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmICogMWUzOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gdGhpcy5fbWlsbGlEaWZmOwogICAgICAgIHJldHVybiB0aGlzOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXNldCB0aGUgbWVhc3VyZW1lbnQKICAgICAgICovCiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMubmFub1NlY29uZHMgPSBudWxsOwogICAgICAgIHRoaXMubWlsbGlTZWNvbmRzID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaVN0YXJ0ID0gbnVsbDsKICAgICAgICB0aGlzLl9taWxsaURpZmYgPSBudWxsOwogICAgICAgIHRoaXMuX3N0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMKdmFyIEludGVydmFsOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc19pbnRlcnZhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dGltZUA0LjEuMS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR0aW1lL2Rpc3RfdHMvc21hcnR0aW1lLmNsYXNzZXMuaW50ZXJ2YWwuanMiKCkgewogICAgaW5pdF9zbWFydHRpbWVfcGx1Z2lucygpOwogICAgSW50ZXJ2YWwgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGludGVydmFsTWlsbGlzZW5jb25kc0FyZykgewogICAgICAgIHRoaXMuc3RhdHVzID0gImluaXRpYWwiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgICAgdGhpcy5pbnRlcnZhbEpvYnMgPSBbXTsKICAgICAgICB0aGlzLmludGVydmFsTWlsbGlzZWNvbmRzID0gaW50ZXJ2YWxNaWxsaXNlbmNvbmRzQXJnOwogICAgICB9CiAgICAgIHN0YXJ0KCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0YXJ0ZWQiOwogICAgICAgIGNvbnN0IHN0YXR1c0F1dGggPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICB0aGlzLnN0YXR1c0F1dGhvcml6YXRpb24gPSBzdGF0dXNBdXRoOwogICAgICAgIGNvbnN0IHJ1bkludGVydmFsID0gYXN5bmMgKCkgPT4gewogICAgICAgICAgd2hpbGUgKHRoaXMuc3RhdHVzID09PSAic3RhcnRlZCIgJiYgdGhpcy5zdGF0dXNBdXRob3JpemF0aW9uID09PSBzdGF0dXNBdXRoKSB7CiAgICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5pbnRlcnZhbE1pbGxpc2Vjb25kcyk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0ZUludGVydmFsSm9icygpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcnVuSW50ZXJ2YWwoKTsKICAgICAgfQogICAgICBzdG9wKCkgewogICAgICAgIHRoaXMuc3RhdHVzID0gInN0b3BwZWQiOwogICAgICAgIHRoaXMuc3RhdHVzQXV0aG9yaXphdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgYWRkSW50ZXJ2YWxKb2IoZnVuY0FyZykgewogICAgICAgIHRoaXMuaW50ZXJ2YWxKb2JzLnB1c2goZnVuY0FyZyk7CiAgICAgIH0KICAgICAgZXhlY3V0ZUludGVydmFsSm9icygpIHsKICAgICAgICBmb3IgKGNvbnN0IGZ1bmNBcmcgb2YgdGhpcy5pbnRlcnZhbEpvYnMpIHsKICAgICAgICAgIGZ1bmNBcmcoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcwp2YXIgVGltZVN0YW1wOwp2YXIgaW5pdF9zbWFydHRpbWVfY2xhc3Nlc190aW1lc3RhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHRpbWVANC4xLjEvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dGltZS9kaXN0X3RzL3NtYXJ0dGltZS5jbGFzc2VzLnRpbWVzdGFtcC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBUaW1lU3RhbXAgPSBjbGFzcyBfVGltZVN0YW1wIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmcm9tIG1pbGxpc2Vjb25kcwogICAgICAgKi8KICAgICAgc3RhdGljIGZyb21NaWxsaVNlY29uZHMobWlsbGlTZWNvbmRzQXJnKSB7CiAgICAgICAgcmV0dXJuIG5ldyBfVGltZVN0YW1wKG1pbGxpU2Vjb25kc0FyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgbmV3IFRpbWVTdGFtcCBmb3Igbm93IHdpdGggY2hhbmdlIHNldAogICAgICAgKiBAcGFyYW0gdGltZVN0YW1wQXJnCiAgICAgICAqLwogICAgICBzdGF0aWMgZnJvbVRpbWVTdGFtcCh0aW1lU3RhbXBBcmcpIHsKICAgICAgICBjb25zdCBsb2NhbFRpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgbG9jYWxUaW1lU3RhbXAuY2hhbmdlID0gbG9jYWxUaW1lU3RhbXAubWlsbGlTZWNvbmRzIC0gdGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kczsKICAgICAgICByZXR1cm4gbG9jYWxUaW1lU3RhbXA7CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoY3JlYXRvckFyZykgewogICAgICAgIHRoaXMuY2hhbmdlID0gbnVsbDsKICAgICAgICBpZiAoIWNyZWF0b3JBcmcpIHsKICAgICAgICAgIHRoaXMuZGF0ZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNyZWF0b3JBcmcgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICB0aGlzLmRhdGUgPSBuZXcgRGF0ZShjcmVhdG9yQXJnKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5taWxsaVNlY29uZHMgPSB0aGlzLmRhdGUuZ2V0VGltZSgpOwogICAgICAgIHRoaXMuZXBvY2h0aW1lID0gTWF0aC5mbG9vcih0aGlzLm1pbGxpU2Vjb25kcyAvIDFlMyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyBvbGRlciB0aGFuIGFub3RoZXIgdGltZXN0YW1wCiAgICAgICAqIEBwYXJhbSBUaW1lU3RhbXBBcmcKICAgICAgICogQHBhcmFtIHRyZXNob2xkVGltZUFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW5PdGhlclRpbWVTdGFtcChUaW1lU3RhbXBBcmcsIHRyZXNob2xkVGltZUFyZyA9IDApIHsKICAgICAgICBpZiAodGhpcy5taWxsaVNlY29uZHMgPCBUaW1lU3RhbXBBcmcubWlsbGlTZWNvbmRzIC0gdHJlc2hvbGRUaW1lQXJnKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogSXMgdGhlIGN1cnJlbnQgaW5zdGFuY2Ugb2xkZXIgdGhhbiB0aGUgYXJndW1lbnQKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKi8KICAgICAgaXNPbGRlclRoYW4oVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzICsgdHJlc2hvbGRUaW1lQXJnIDwgVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBib29sZWFuIGZvciB3ZXRoZXIgdGhlIHRpbWVzdGFtcCBpcyB5b3VuZ2VyIHRoYW4gYW5vdGhlciB0aW1lc3RhbXAKICAgICAgICogQHBhcmFtIFRpbWVTdGFtcEFyZwogICAgICAgKiBAcGFyYW0gdHJlc2hvbGRUaW1lQXJnCiAgICAgICAqLwogICAgICBpc1lvdW5nZXJUaGFuT3RoZXJUaW1lU3RhbXAoVGltZVN0YW1wQXJnLCB0cmVzaG9sZFRpbWVBcmcgPSAwKSB7CiAgICAgICAgaWYgKHRoaXMubWlsbGlTZWNvbmRzID4gVGltZVN0YW1wQXJnLm1pbGxpU2Vjb25kcyArIHRyZXNob2xkVGltZUFyZykgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaXNZb3VuZ2VyVGhhbk1pbGxpU2Vjb25kcyhtaWxsaXNlY29uZEFyZykgewogICAgICAgIGNvbnN0IG5vd1RpbWVTdGFtcCA9IG5ldyBfVGltZVN0YW1wKCk7CiAgICAgICAgY29uc3QgY29tcGFyZUVwb2NoVGltZSA9IG5vd1RpbWVTdGFtcC5lcG9jaHRpbWUgLSBtaWxsaXNlY29uZEFyZzsKICAgICAgICBjb25zdCBjb21wYXJlVGltZVN0YW1wID0gbmV3IF9UaW1lU3RhbXAoY29tcGFyZUVwb2NoVGltZSk7CiAgICAgICAgcmV0dXJuIHRoaXMuaXNZb3VuZ2VyVGhhbk90aGVyVGltZVN0YW1wKGNvbXBhcmVUaW1lU3RhbXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcwp2YXIgVGltZXI7CnZhciBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9zbWFydHRpbWUuY2xhc3Nlcy50aW1lci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgVGltZXIgPSBjbGFzcyB7CiAgICAgIGdldCB0aW1lTGVmdCgpIHsKICAgICAgICByZXR1cm4gdGhpcy50aW1lSW5NaWxsaXNlY29uZHMgLSB0aGlzLnBhdXNlZEF0LmNoYW5nZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZHNBcmcpIHsKICAgICAgICB0aGlzLnN0YXRlID0gImluaXRpYXRlZCI7CiAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMudGltZUluTWlsbGlzZWNvbmRzID0gdGltZUluTWlsbGlzZWNvbmRzQXJnOwogICAgICAgIHRoaXMuY29tcGxldGVkID0gdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5wcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdGFydHMgdGhlIHRpbWVyCiAgICAgICAqLwogICAgICBzdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuY29tcGxldGVkRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfSwgdGhpcy50aW1lSW5NaWxsaXNlY29uZHMpOwogICAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBuZXcgVGltZVN0YW1wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigidGltZXIgaGFzIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgcmVzdW1lIGluc3RlYWQiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgaWYgKHRoaXMuc3RhcnRlZEF0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5jdXJyZW50VGltZW91dCk7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lb3V0ID0gbnVsbDsKICAgICAgICAgIHRoaXMucGF1c2VkQXQgPSBUaW1lU3RhbXAuZnJvbVRpbWVTdGFtcCh0aGlzLnN0YXJ0ZWRBdCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc3VtZSgpIHsKICAgICAgICBpZiAodGhpcy5zdGFydGVkQXQpIHsKICAgICAgICAgIHRoaXMuY3VycmVudFRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jb21wbGV0ZWREZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9LCB0aGlzLnRpbWVMZWZ0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aW1lciBoYXMgTk9UIGJlZW4gc3RhcnRlZCBiZWZvcmUuIFBsZWFzZSB1c2UgLnN0YXJ0KCkgaW5zdGVhZCIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXNldCgpIHsKICAgICAgICB0aGlzLnBhdXNlKCk7CiAgICAgICAgdGhpcy5zdGFydGVkQXQgPSBudWxsOwogICAgICAgIHRoaXMucGF1c2VkQXQgPSBudWxsOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHM3LCB7CiAgQ3JvbkpvYjogKCkgPT4gQ3JvbkpvYiwKICBDcm9uTWFuYWdlcjogKCkgPT4gQ3Jvbk1hbmFnZXIsCiAgRXh0ZW5kZWREYXRlOiAoKSA9PiBFeHRlbmRlZERhdGUsCiAgSHJ0TWVhc3VyZW1lbnQ6ICgpID0+IEhydE1lYXN1cmVtZW50LAogIEludGVydmFsOiAoKSA9PiBJbnRlcnZhbCwKICBUaW1lU3RhbXA6ICgpID0+IFRpbWVTdGFtcCwKICBUaW1lcjogKCkgPT4gVGltZXIsCiAgZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZTogKCkgPT4gZ2V0TWlsbGlTZWNvbmRzQXNIdW1hblJlYWRhYmxlQWdvVGltZSwKICBnZXRNaWxsaVNlY29uZHNBc0h1bWFuUmVhZGFibGVTdHJpbmc6ICgpID0+IGdldE1pbGxpU2Vjb25kc0FzSHVtYW5SZWFkYWJsZVN0cmluZywKICBnZXRNaWxsaVNlY29uZHNGcm9tVW5pdHM6ICgpID0+IGdldE1pbGxpU2Vjb25kc0Zyb21Vbml0cywKICB1bml0czogKCkgPT4gdW5pdHMKfSk7CnZhciBpbml0X2Rpc3RfdHM2ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR0aW1lQDQuMS4xL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHRpbWUvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25tYW5hZ2VyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2Nyb25qb2IoKTsKICAgIGluaXRfc21hcnR0aW1lX2NsYXNzZXNfZXh0ZW5kZWRkYXRlKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2hydG1lYXN1cmVtZW50KCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX2ludGVydmFsKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVyKCk7CiAgICBpbml0X3NtYXJ0dGltZV9jbGFzc2VzX3RpbWVzdGFtcCgpOwogICAgaW5pdF9zbWFydHRpbWVfdW5pdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMKdmFyIHJlcXVpcmVfU3ltYm9sVHJlZU5vZGUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZU5vZGUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBjbGFzcyBTeW1ib2xUcmVlTm9kZSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucGFyZW50ID0gbnVsbDsKICAgICAgICB0aGlzLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgdGhpcy5maXJzdENoaWxkID0gbnVsbDsKICAgICAgICB0aGlzLmxhc3RDaGlsZCA9IG51bGw7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSAwOwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICAgIHRoaXMuY2FjaGVkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgfQogICAgICBnZXQgaXNBdHRhY2hlZCgpIHsKICAgICAgICByZXR1cm4gQm9vbGVhbih0aGlzLnBhcmVudCB8fCB0aGlzLnByZXZpb3VzU2libGluZyB8fCB0aGlzLm5leHRTaWJsaW5nKTsKICAgICAgfQogICAgICBnZXQgaGFzQ2hpbGRyZW4oKSB7CiAgICAgICAgcmV0dXJuIEJvb2xlYW4odGhpcy5maXJzdENoaWxkKTsKICAgICAgfQogICAgICBjaGlsZHJlbkNoYW5nZWQoKSB7CiAgICAgICAgdGhpcy5jaGlsZHJlblZlcnNpb24gPSB0aGlzLmNoaWxkcmVuVmVyc2lvbiArIDEgJiA0Mjk0OTY3Mjk1OwogICAgICAgIHRoaXMuY2hpbGRJbmRleENhY2hlZFVwVG8gPSBudWxsOwogICAgICB9CiAgICAgIGdldENhY2hlZEluZGV4KHBhcmVudE5vZGUpIHsKICAgICAgICBpZiAodGhpcy5jYWNoZWRJbmRleFZlcnNpb24gIT09IHBhcmVudE5vZGUuY2hpbGRyZW5WZXJzaW9uKSB7CiAgICAgICAgICB0aGlzLmNhY2hlZEluZGV4VmVyc2lvbiA9IE5hTjsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuY2FjaGVkSW5kZXg7CiAgICAgIH0KICAgICAgc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgaW5kZXgyKSB7CiAgICAgICAgdGhpcy5jYWNoZWRJbmRleFZlcnNpb24gPSBwYXJlbnROb2RlLmNoaWxkcmVuVmVyc2lvbjsKICAgICAgICB0aGlzLmNhY2hlZEluZGV4ID0gaW5kZXgyOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlUG9zaXRpb24uanMKdmFyIHJlcXVpcmVfVHJlZVBvc2l0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVQb3NpdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICBtb2R1bGUuZXhwb3J0cyA9IE9iamVjdC5mcmVlemUoewogICAgICAvLyBzYW1lIGFzIERPTSBET0NVTUVOVF9QT1NJVElPTl8KICAgICAgRElTQ09OTkVDVEVEOiAxLAogICAgICBQUkVDRURJTkc6IDIsCiAgICAgIEZPTExPV0lORzogNCwKICAgICAgQ09OVEFJTlM6IDgsCiAgICAgIENPTlRBSU5FRF9CWTogMTYKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3ltYm9sLXRyZWVAMy4yLjQvbm9kZV9tb2R1bGVzL3N5bWJvbC10cmVlL2xpYi9UcmVlSXRlcmF0b3IuanMKdmFyIHJlcXVpcmVfVHJlZUl0ZXJhdG9yID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1RyZWVJdGVyYXRvci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVFJFRSA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woKTsKICAgIHZhciBST09UID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIE5FWFQgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICB2YXIgSVRFUkFURV9GVU5DID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgpOwogICAgdmFyIFRyZWVJdGVyYXRvciA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodHJlZSwgcm9vdDYsIGZpcnN0UmVzdWx0LCBpdGVyYXRlRnVuY3Rpb24pIHsKICAgICAgICB0aGlzW1RSRUVdID0gdHJlZTsKICAgICAgICB0aGlzW1JPT1RdID0gcm9vdDY7CiAgICAgICAgdGhpc1tORVhUXSA9IGZpcnN0UmVzdWx0OwogICAgICAgIHRoaXNbSVRFUkFURV9GVU5DXSA9IGl0ZXJhdGVGdW5jdGlvbjsKICAgICAgfQogICAgICBuZXh0KCkgewogICAgICAgIGNvbnN0IHRyZWUgPSB0aGlzW1RSRUVdOwogICAgICAgIGNvbnN0IGl0ZXJhdGVGdW5jID0gdGhpc1tJVEVSQVRFX0ZVTkNdOwogICAgICAgIGNvbnN0IHJvb3Q2ID0gdGhpc1tST09UXTsKICAgICAgICBpZiAoIXRoaXNbTkVYVF0pIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGRvbmU6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiByb290NgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1tORVhUXTsKICAgICAgICBpZiAoaXRlcmF0ZUZ1bmMgPT09IDEpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikucHJldmlvdXNTaWJsaW5nOwogICAgICAgIH0gZWxzZSBpZiAoaXRlcmF0ZUZ1bmMgPT09IDIpIHsKICAgICAgICAgIHRoaXNbTkVYVF0gPSB0cmVlLl9ub2RlKHZhbHVlMikubmV4dFNpYmxpbmc7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gMykgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuX25vZGUodmFsdWUyKS5wYXJlbnQ7CiAgICAgICAgfSBlbHNlIGlmIChpdGVyYXRlRnVuYyA9PT0gNCkgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUucHJlY2VkaW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpc1tORVhUXSA9IHRyZWUuZm9sbG93aW5nKHZhbHVlMiwgeyByb290OiByb290NiB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgdmFsdWU6IHZhbHVlMgogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSwgU3ltYm9sLml0ZXJhdG9yLCB7CiAgICAgIHZhbHVlOiBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgd3JpdGFibGU6IGZhbHNlCiAgICB9KTsKICAgIFRyZWVJdGVyYXRvci5QUkVWID0gMTsKICAgIFRyZWVJdGVyYXRvci5ORVhUID0gMjsKICAgIFRyZWVJdGVyYXRvci5QQVJFTlQgPSAzOwogICAgVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA9IDQ7CiAgICBUcmVlSXRlcmF0b3IuRk9MTE9XSU5HID0gNTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yKTsKICAgIE9iamVjdC5mcmVlemUoVHJlZUl0ZXJhdG9yLnByb3RvdHlwZSk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IFRyZWVJdGVyYXRvcjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N5bWJvbC10cmVlQDMuMi40L25vZGVfbW9kdWxlcy9zeW1ib2wtdHJlZS9saWIvU3ltYm9sVHJlZS5qcwp2YXIgcmVxdWlyZV9TeW1ib2xUcmVlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zeW1ib2wtdHJlZUAzLjIuNC9ub2RlX21vZHVsZXMvc3ltYm9sLXRyZWUvbGliL1N5bWJvbFRyZWUuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFN5bWJvbFRyZWVOb2RlID0gcmVxdWlyZV9TeW1ib2xUcmVlTm9kZSgpOwogICAgdmFyIFRyZWVQb3NpdGlvbiA9IHJlcXVpcmVfVHJlZVBvc2l0aW9uKCk7CiAgICB2YXIgVHJlZUl0ZXJhdG9yID0gcmVxdWlyZV9UcmVlSXRlcmF0b3IoKTsKICAgIGZ1bmN0aW9uIHJldHVyblRydWUoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gcmV2ZXJzZUFycmF5SW5kZXgoYXJyYXksIHJldmVyc2VJbmRleCkgewogICAgICByZXR1cm4gYXJyYXlbYXJyYXkubGVuZ3RoIC0gMSAtIHJldmVyc2VJbmRleF07CiAgICB9CiAgICB2YXIgU3ltYm9sVHJlZSA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBjb25zdHJ1Y3RvcgogICAgICAgKiBAYWxpYXMgbW9kdWxlOnN5bWJvbC10cmVlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBbZGVzY3JpcHRpb249J1N5bWJvbFRyZWUgZGF0YSddIERlc2NyaXB0aW9uIHVzZWQgZm9yIHRoZSBTeW1ib2wKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGRlc2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5zeW1ib2wgPSBTeW1ib2woZGVzY3JpcHRpb24gfHwgIlN5bWJvbFRyZWUgZGF0YSIpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBZb3UgY2FuIHVzZSB0aGlzIGZ1bmN0aW9uIHRvIChvcHRpb25hbGx5KSBpbml0aWFsaXplIGFuIG9iamVjdCByaWdodCBhZnRlciBpdHMgY3JlYXRpb24sCiAgICAgICAqIHRvIHRha2UgYWR2YW50YWdlIG9mIFY4J3MgZmFzdCBwcm9wZXJ0aWVzLiBBbHNvIHVzZWZ1bCBpZiB5b3Ugd291bGQgbGlrZSB0bwogICAgICAgKiBmcmVlemUgeW91ciBvYmplY3QuCiAgICAgICAqCiAgICAgICAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kCiAgICAgICAqIEBhbGlhcyBtb2R1bGU6c3ltYm9sLXRyZWUjaW5pdGlhbGl6ZQogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gb2JqZWN0CiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdCkgewogICAgICAgIHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICByZXR1cm4gb2JqZWN0OwogICAgICB9CiAgICAgIF9ub2RlKG9iamVjdCkgewogICAgICAgIGlmICghb2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgY29uc3Qgbm9kZTIgPSBvYmplY3RbdGhpcy5zeW1ib2xdOwogICAgICAgIGlmIChub2RlMikgewogICAgICAgICAgcmV0dXJuIG5vZGUyOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb2JqZWN0W3RoaXMuc3ltYm9sXSA9IG5ldyBTeW1ib2xUcmVlTm9kZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXR1cm5zIGB0cnVlYCBpZiB0aGUgb2JqZWN0IGhhcyBhbnkgY2hpbGRyZW4uIE90aGVyd2lzZSBpdCByZXR1cm5zIGBmYWxzZWAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaGFzQ2hpbGRyZW4KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtCb29sZWFufQogICAgICAgKi8KICAgICAgaGFzQ2hpbGRyZW4ob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5oYXNDaGlsZHJlbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJucyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBmaXJzdENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgZmlyc3RDaGlsZChvYmplY3QpIHsKICAgICAgICByZXR1cm4gdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIGxhc3QgY2hpbGQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBsYXN0Q2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0Q2hpbGQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5sYXN0Q2hpbGQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHByZXZpb3VzIHNpYmxpbmcgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwcmV2aW91c1NpYmxpbmcKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwcmV2aW91c1NpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIG5leHQgc2libGluZyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIG5leHRTaWJsaW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fQogICAgICAgKi8KICAgICAgbmV4dFNpYmxpbmcob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmV0dXJuIHRoZSBwYXJlbnQgb2YgdGhlIGdpdmVuIG9iamVjdC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBwYXJlbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBwYXJlbnQob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGluY2x1c2l2ZSBkZXNjZW5kYW50IHRoYXQgaXMgbGFzdCBpbiB0cmVlIG9yZGVyIG9mIHRoZSBnaXZlbiBvYmplY3QuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGRlcHRoIG9mIHRoZSBzdWJ0cmVlIG9mIGBvYmplY3RgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgbGFzdEluY2x1c2l2ZURlc2NlbmRhbnQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcmV0dXJuIHtPYmplY3R9CiAgICAgICAqLwogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3QpIHsKICAgICAgICBsZXQgbGFzdENoaWxkOwogICAgICAgIGxldCBjdXJyZW50ID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChsYXN0Q2hpbGQgPSB0aGlzLl9ub2RlKGN1cnJlbnQpLmxhc3RDaGlsZCkgewogICAgICAgICAgY3VycmVudCA9IGxhc3RDaGlsZDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGN1cnJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIHByZWNlZGluZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBwcmVjZWRpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBiZWZvcmUgQiBpbiB0cmVlIG9yZGVyLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCAod29yc3QgY2FzZSkKICAgICAgICogKiBgTygxKWAgKGFtb3J0aXplZCB3aGVuIHdhbGtpbmcgdGhlIGVudGlyZSB0cmVlKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHByZWNlZGluZwogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEByZXR1cm4gez9PYmplY3R9CiAgICAgICAqLwogICAgICBwcmVjZWRpbmcob2JqZWN0LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgdHJlZVJvb3QgPSBvcHRpb25zICYmIG9wdGlvbnMucm9vdDsKICAgICAgICBpZiAob2JqZWN0ID09PSB0cmVlUm9vdCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHByZXZpb3VzU2libGluZyA9IHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgaWYgKHByZXZpb3VzU2libGluZykgewogICAgICAgICAgcmV0dXJuIHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocHJldmlvdXNTaWJsaW5nKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX25vZGUob2JqZWN0KS5wYXJlbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZpbmQgdGhlIGZvbGxvd2luZyBvYmplY3QgKEEpIG9mIHRoZSBnaXZlbiBvYmplY3QgKEIpLgogICAgICAgKiBBbiBvYmplY3QgQSBpcyBmb2xsb3dpbmcgYW4gb2JqZWN0IEIgaWYgQSBhbmQgQiBhcmUgaW4gdGhlIHNhbWUgdHJlZQogICAgICAgKiBhbmQgQSBjb21lcyBhZnRlciBCIGluIHRyZWUgb3JkZXIuCiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlKSB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBlbnRpcmUgdHJlZQogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkIHdoZW4gd2Fsa2luZyB0aGUgZW50aXJlIHRyZWUpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgZm9sbG93aW5nCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7IU9iamVjdH0gb2JqZWN0CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zLnJvb3RdIElmIHNldCwgYHJvb3RgIG11c3QgYmUgYW4gaW5jbHVzaXZlIGFuY2VzdG9yCiAgICAgICAqICAgICAgICBvZiB0aGUgcmV0dXJuIHZhbHVlIChvciBlbHNlIG51bGwgaXMgcmV0dXJuZWQpLiBUaGlzIGNoZWNrIF9hc3N1bWVzXwogICAgICAgKiAgICAgICAgdGhhdCBgcm9vdGAgaXMgYWxzbyBhbiBpbmNsdXNpdmUgYW5jZXN0b3Igb2YgdGhlIGdpdmVuIGBvYmplY3RgCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMuc2tpcENoaWxkcmVuPWZhbHNlXSBJZiBzZXQsIGlnbm9yZSB0aGUgY2hpbGRyZW4gb2YgYG9iamVjdGAKICAgICAgICogQHJldHVybiB7P09iamVjdH0KICAgICAgICovCiAgICAgIGZvbGxvd2luZyhvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCB0cmVlUm9vdCA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yb290OwogICAgICAgIGNvbnN0IHNraXBDaGlsZHJlbiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5za2lwQ2hpbGRyZW47CiAgICAgICAgY29uc3QgZmlyc3RDaGlsZCA9ICFza2lwQ2hpbGRyZW4gJiYgdGhpcy5fbm9kZShvYmplY3QpLmZpcnN0Q2hpbGQ7CiAgICAgICAgaWYgKGZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHJldHVybiBmaXJzdENoaWxkOwogICAgICAgIH0KICAgICAgICBsZXQgY3VycmVudCA9IG9iamVjdDsKICAgICAgICBkbyB7CiAgICAgICAgICBpZiAoY3VycmVudCA9PT0gdHJlZVJvb3QpIHsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBuZXh0U2libGluZyA9IHRoaXMuX25vZGUoY3VycmVudCkubmV4dFNpYmxpbmc7CiAgICAgICAgICBpZiAobmV4dFNpYmxpbmcpIHsKICAgICAgICAgICAgcmV0dXJuIG5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgY3VycmVudCA9IHRoaXMuX25vZGUoY3VycmVudCkucGFyZW50OwogICAgICAgIH0gd2hpbGUgKGN1cnJlbnQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIGNoaWxkcmVuIG9mIHRoZSBnaXZlbiBgcGFyZW50YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNoaWxkcmVuVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBbb3B0aW9uc10KICAgICAgICogQHBhcmFtIHtPYmplY3RbXX0gW29wdGlvbnMuYXJyYXk9W11dCiAgICAgICAqIEBwYXJhbSB7RnVuY3Rpb259IFtvcHRpb25zLmZpbHRlcl0gRnVuY3Rpb24gdG8gdGVzdCBlYWNoIG9iamVjdCBiZWZvcmUgaXQgaXMgYWRkZWQgdG8gdGhlIGFycmF5LgogICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnZva2VkIHdpdGggYXJndW1lbnRzIChvYmplY3QpLiBTaG91bGQgcmV0dXJuIGB0cnVlYCBpZiBhbiBvYmplY3QKICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgaXMgdG8gYmUgaW5jbHVkZWQuCiAgICAgICAqIEBwYXJhbSB7Kn0gW29wdGlvbnMudGhpc0FyZ10gVmFsdWUgdG8gdXNlIGFzIGB0aGlzYCB3aGVuIGV4ZWN1dGluZyBgZmlsdGVyYC4KICAgICAgICogQHJldHVybiB7T2JqZWN0W119CiAgICAgICAqLwogICAgICBjaGlsZHJlblRvQXJyYXkocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgYXJyYXkgPSBvcHRpb25zICYmIG9wdGlvbnMuYXJyYXkgfHwgW107CiAgICAgICAgY29uc3QgZmlsdGVyMiA9IG9wdGlvbnMgJiYgb3B0aW9ucy5maWx0ZXIgfHwgcmV0dXJuVHJ1ZTsKICAgICAgICBjb25zdCB0aGlzQXJnID0gb3B0aW9ucyAmJiBvcHRpb25zLnRoaXNBcmcgfHwgdm9pZCAwOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBsZXQgaW5kZXgyID0gMDsKICAgICAgICB3aGlsZSAob2JqZWN0KSB7CiAgICAgICAgICBjb25zdCBub2RlMiA9IHRoaXMuX25vZGUob2JqZWN0KTsKICAgICAgICAgIG5vZGUyLnNldENhY2hlZEluZGV4KHBhcmVudE5vZGUsIGluZGV4Mik7CiAgICAgICAgICBpZiAoZmlsdGVyMi5jYWxsKHRoaXNBcmcsIG9iamVjdCkpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChvYmplY3QpOwogICAgICAgICAgfQogICAgICAgICAgb2JqZWN0ID0gbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgICArK2luZGV4MjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGluY2x1c2l2ZSBhbmNlc3RvcnMgb2YgdGhlIGdpdmVuIG9iamVjdCB0byBhbiBhcnJheS4KICAgICAgICoKICAgICAgICogKiBgTyhuKWAgd2hlcmUgYG5gIGlzIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBgb2JqZWN0YAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc1RvQXJyYXkKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3QsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IGFuY2VzdG9yID0gb2JqZWN0OwogICAgICAgIHdoaWxlIChhbmNlc3RvcikgewogICAgICAgICAgaWYgKGZpbHRlcjIuY2FsbCh0aGlzQXJnLCBhbmNlc3RvcikpIHsKICAgICAgICAgICAgYXJyYXkucHVzaChhbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgICBhbmNlc3RvciA9IHRoaXMuX25vZGUoYW5jZXN0b3IpLnBhcmVudDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBlbmQgYWxsIGRlc2NlbmRhbnRzIG9mIHRoZSBnaXZlbiBvYmplY3QgdG8gYW4gYXJyYXkgKGluIHRyZWUgb3JkZXIpLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBvYmplY3RzIGluIHRoZSBzdWItdHJlZSBvZiB0aGUgZ2l2ZW4gYG9iamVjdGAKICAgICAgICoKICAgICAgICogQG1ldGhvZCB0cmVlVG9BcnJheQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcm9vdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0W119IFtvcHRpb25zLmFycmF5PVtdXQogICAgICAgKiBAcGFyYW0ge0Z1bmN0aW9ufSBbb3B0aW9ucy5maWx0ZXJdIEZ1bmN0aW9uIHRvIHRlc3QgZWFjaCBvYmplY3QgYmVmb3JlIGl0IGlzIGFkZGVkIHRvIHRoZSBhcnJheS4KICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgSW52b2tlZCB3aXRoIGFyZ3VtZW50cyAob2JqZWN0KS4gU2hvdWxkIHJldHVybiBgdHJ1ZWAgaWYgYW4gb2JqZWN0CiAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlzIHRvIGJlIGluY2x1ZGVkLgogICAgICAgKiBAcGFyYW0geyp9IFtvcHRpb25zLnRoaXNBcmddIFZhbHVlIHRvIHVzZSBhcyBgdGhpc2Agd2hlbiBleGVjdXRpbmcgYGZpbHRlcmAuCiAgICAgICAqIEByZXR1cm4ge09iamVjdFtdfQogICAgICAgKi8KICAgICAgdHJlZVRvQXJyYXkocm9vdDYsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBhcnJheSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5hcnJheSB8fCBbXTsKICAgICAgICBjb25zdCBmaWx0ZXIyID0gb3B0aW9ucyAmJiBvcHRpb25zLmZpbHRlciB8fCByZXR1cm5UcnVlOwogICAgICAgIGNvbnN0IHRoaXNBcmcgPSBvcHRpb25zICYmIG9wdGlvbnMudGhpc0FyZyB8fCB2b2lkIDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHJvb3Q2OwogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGlmIChmaWx0ZXIyLmNhbGwodGhpc0FyZywgb2JqZWN0KSkgewogICAgICAgICAgICBhcnJheS5wdXNoKG9iamVjdCk7CiAgICAgICAgICB9CiAgICAgICAgICBvYmplY3QgPSB0aGlzLmZvbGxvd2luZyhvYmplY3QsIHsgcm9vdDogcm9vdDYgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBjaGlsZHJlbiBvZiB0aGUgZ2l2ZW4gb2JqZWN0CiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBjaGlsZHJlbkl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXQogICAgICAgKiBAcGFyYW0ge0Jvb2xlYW59IFtvcHRpb25zLnJldmVyc2U9ZmFsc2VdCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIGNoaWxkcmVuSXRlcmF0b3IocGFyZW50LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHBhcmVudCk7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgcGFyZW50LAogICAgICAgICAgcmV2ZXJzZSA/IHBhcmVudE5vZGUubGFzdENoaWxkIDogcGFyZW50Tm9kZS5maXJzdENoaWxkLAogICAgICAgICAgcmV2ZXJzZSA/IFRyZWVJdGVyYXRvci5QUkVWIDogVHJlZUl0ZXJhdG9yLk5FWFQKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJdGVyYXRlIG92ZXIgYWxsIHRoZSBwcmV2aW91cyBzaWJsaW5ncyBvZiB0aGUgZ2l2ZW4gb2JqZWN0LiAoaW4gcmV2ZXJzZSB0cmVlIG9yZGVyKQogICAgICAgKgogICAgICAgKiAqIGBPKDEpYCBmb3IgYSBzaW5nbGUgaXRlcmF0aW9uCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgcHJldmlvdXNTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5wcmV2aW91c1NpYmxpbmcsCiAgICAgICAgICBUcmVlSXRlcmF0b3IuUFJFVgogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgdGhlIG5leHQgc2libGluZ3Mgb2YgdGhlIGdpdmVuIG9iamVjdC4gKGluIHRyZWUgb3JkZXIpCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgIGZvciBhIHNpbmdsZSBpdGVyYXRpb24KICAgICAgICoKICAgICAgICogQG1ldGhvZCBuZXh0U2libGluZ3NJdGVyYXRvcgogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gb2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gQW4gaXRlcmFibGUgaXRlcmF0b3IgKEVTNikKICAgICAgICovCiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdCkgewogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIG9iamVjdCwKICAgICAgICAgIHRoaXMuX25vZGUob2JqZWN0KS5uZXh0U2libGluZywKICAgICAgICAgIFRyZWVJdGVyYXRvci5ORVhUCiAgICAgICAgKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSXRlcmF0ZSBvdmVyIGFsbCBpbmNsdXNpdmUgYW5jZXN0b3JzIG9mIHRoZSBnaXZlbiBvYmplY3QKICAgICAgICoKICAgICAgICogKiBgTygxKWAgZm9yIGEgc2luZ2xlIGl0ZXJhdGlvbgogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGFuY2VzdG9yc0l0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvYmplY3QKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgYW5jZXN0b3JzSXRlcmF0b3Iob2JqZWN0KSB7CiAgICAgICAgcmV0dXJuIG5ldyBUcmVlSXRlcmF0b3IoCiAgICAgICAgICB0aGlzLAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgb2JqZWN0LAogICAgICAgICAgVHJlZUl0ZXJhdG9yLlBBUkVOVAogICAgICAgICk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEl0ZXJhdGUgb3ZlciBhbGwgZGVzY2VuZGFudHMgb2YgdGhlIGdpdmVuIG9iamVjdCAoaW4gdHJlZSBvcmRlcikuCiAgICAgICAqCiAgICAgICAqIFdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIG9iamVjdHMgaW4gdGhlIHN1Yi10cmVlIG9mIHRoZSBnaXZlbiBgcm9vdGA6CiAgICAgICAqCiAgICAgICAqICogYE8obilgICh3b3JzdCBjYXNlIGZvciBhIHNpbmdsZSBpdGVyYXRpb24pCiAgICAgICAqICogYE8obilgIChhbW9ydGl6ZWQsIHdoZW4gY29tcGxldGluZyB0aGUgaXRlcmF0b3IpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgdHJlZUl0ZXJhdG9yCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByb290CiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSBvcHRpb25zCiAgICAgICAqIEBwYXJhbSB7Qm9vbGVhbn0gW29wdGlvbnMucmV2ZXJzZT1mYWxzZV0KICAgICAgICogQHJldHVybiB7T2JqZWN0fSBBbiBpdGVyYWJsZSBpdGVyYXRvciAoRVM2KQogICAgICAgKi8KICAgICAgdHJlZUl0ZXJhdG9yKHJvb3Q2LCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmV2ZXJzZSA9IG9wdGlvbnMgJiYgb3B0aW9ucy5yZXZlcnNlOwogICAgICAgIHJldHVybiBuZXcgVHJlZUl0ZXJhdG9yKAogICAgICAgICAgdGhpcywKICAgICAgICAgIHJvb3Q2LAogICAgICAgICAgcmV2ZXJzZSA/IHRoaXMubGFzdEluY2x1c2l2ZURlc2NlbmRhbnQocm9vdDYpIDogcm9vdDYsCiAgICAgICAgICByZXZlcnNlID8gVHJlZUl0ZXJhdG9yLlBSRUNFRElORyA6IFRyZWVJdGVyYXRvci5GT0xMT1dJTkcKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBGaW5kIHRoZSBpbmRleCBvZiB0aGUgZ2l2ZW4gb2JqZWN0ICh0aGUgbnVtYmVyIG9mIHByZWNlZGluZyBzaWJsaW5ncykuCiAgICAgICAqCiAgICAgICAqICogYE8obilgIHdoZXJlIGBuYCBpcyB0aGUgYW1vdW50IG9mIHByZWNlZGluZyBzaWJsaW5ncwogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgaW5kZXgKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGNoaWxkCiAgICAgICAqIEByZXR1cm4ge051bWJlcn0gVGhlIG51bWJlciBvZiBwcmVjZWRpbmcgc2libGluZ3MsIG9yIC0xIGlmIHRoZSBvYmplY3QgaGFzIG5vIHBhcmVudAogICAgICAgKi8KICAgICAgaW5kZXgoY2hpbGQpIHsKICAgICAgICBjb25zdCBjaGlsZE5vZGUgPSB0aGlzLl9ub2RlKGNoaWxkKTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShjaGlsZE5vZGUucGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUpIHsKICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgbGV0IGN1cnJlbnRJbmRleCA9IGNoaWxkTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKTsKICAgICAgICBpZiAoY3VycmVudEluZGV4ID49IDApIHsKICAgICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgICAgfQogICAgICAgIGN1cnJlbnRJbmRleCA9IDA7CiAgICAgICAgbGV0IG9iamVjdCA9IHBhcmVudE5vZGUuZmlyc3RDaGlsZDsKICAgICAgICBpZiAocGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbykgewogICAgICAgICAgY29uc3QgY2FjaGVkVXBUb05vZGUgPSB0aGlzLl9ub2RlKHBhcmVudE5vZGUuY2hpbGRJbmRleENhY2hlZFVwVG8pOwogICAgICAgICAgb2JqZWN0ID0gY2FjaGVkVXBUb05vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgICBjdXJyZW50SW5kZXggPSBjYWNoZWRVcFRvTm9kZS5nZXRDYWNoZWRJbmRleChwYXJlbnROb2RlKSArIDE7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChvYmplY3QpIHsKICAgICAgICAgIGNvbnN0IG5vZGUyID0gdGhpcy5fbm9kZShvYmplY3QpOwogICAgICAgICAgbm9kZTIuc2V0Q2FjaGVkSW5kZXgocGFyZW50Tm9kZSwgY3VycmVudEluZGV4KTsKICAgICAgICAgIGlmIChvYmplY3QgPT09IGNoaWxkKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgKytjdXJyZW50SW5kZXg7CiAgICAgICAgICBvYmplY3QgPSBub2RlMi5uZXh0U2libGluZzsKICAgICAgICB9CiAgICAgICAgcGFyZW50Tm9kZS5jaGlsZEluZGV4Q2FjaGVkVXBUbyA9IGNoaWxkOwogICAgICAgIHJldHVybiBjdXJyZW50SW5kZXg7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENhbGN1bGF0ZSB0aGUgbnVtYmVyIG9mIGNoaWxkcmVuLgogICAgICAgKgogICAgICAgKiAqIGBPKG4pYCB3aGVyZSBgbmAgaXMgdGhlIGFtb3VudCBvZiBjaGlsZHJlbgogICAgICAgKiAqIGBPKDEpYCAoYW1vcnRpemVkLCBpZiB0aGUgdHJlZSBpcyBub3QgbW9kaWZpZWQpCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgY2hpbGRyZW5Db3VudAogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcGFyZW50CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNoaWxkcmVuQ291bnQocGFyZW50KSB7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocGFyZW50KTsKICAgICAgICBpZiAoIXBhcmVudE5vZGUubGFzdENoaWxkKSB7CiAgICAgICAgICByZXR1cm4gMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuaW5kZXgocGFyZW50Tm9kZS5sYXN0Q2hpbGQpICsgMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29tcGFyZSB0aGUgcG9zaXRpb24gb2YgYW4gb2JqZWN0IHJlbGF0aXZlIHRvIGFub3RoZXIgb2JqZWN0LiBBIGJpdCBzZXQgaXMgcmV0dXJuZWQ6CiAgICAgICAqCiAgICAgICAqIDx1bD4KICAgICAgICogICAgIDxsaT5ESVNDT05ORUNURUQgOiAxPC9saT4KICAgICAgICogICAgIDxsaT5QUkVDRURJTkcgOiAyPC9saT4KICAgICAgICogICAgIDxsaT5GT0xMT1dJTkcgOiA0PC9saT4KICAgICAgICogICAgIDxsaT5DT05UQUlOUyA6IDg8L2xpPgogICAgICAgKiAgICAgPGxpPkNPTlRBSU5FRF9CWSA6IDE2PC9saT4KICAgICAgICogPC91bD4KICAgICAgICoKICAgICAgICogVGhlIHNlbWFudGljcyBhcmUgdGhlIHNhbWUgYXMgY29tcGFyZURvY3VtZW50UG9zaXRpb24gaW4gRE9NLCB3aXRoIHRoZSBleGNlcHRpb24gdGhhdAogICAgICAgKiBESVNDT05ORUNURUQgbmV2ZXIgb2NjdXJzIHdpdGggYW55IG90aGVyIGJpdC4KICAgICAgICoKICAgICAgICogd2hlcmUgYG5gIGFuZCBgbWAgYXJlIHRoZSBhbW91bnQgb2YgYW5jZXN0b3JzIG9mIGBsZWZ0YCBhbmQgYHJpZ2h0YDsKICAgICAgICogd2hlcmUgYG9gIGlzIHRoZSBhbW91bnQgb2YgY2hpbGRyZW4gb2YgdGhlIGxvd2VzdCBjb21tb24gYW5jZXN0b3Igb2YgYGxlZnRgIGFuZCBgcmlnaHRgOgogICAgICAgKgogICAgICAgKiAqIGBPKG4gKyBtICsgbylgICh3b3JzdCBjYXNlKQogICAgICAgKiAqIGBPKG4gKyBtKWAgKGFtb3J0aXplZCwgaWYgdGhlIHRyZWUgaXMgbm90IG1vZGlmaWVkKQogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGNvbXBhcmVUcmVlUG9zaXRpb24KICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IGxlZnQKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJpZ2h0CiAgICAgICAqIEByZXR1cm4ge051bWJlcn0KICAgICAgICovCiAgICAgIGNvbXBhcmVUcmVlUG9zaXRpb24obGVmdCwgcmlnaHQpIHsKICAgICAgICBpZiAobGVmdCA9PT0gcmlnaHQpIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IGxlZnRBbmNlc3RvciA9IGxlZnQ7CiAgICAgICAgICB3aGlsZSAobGVmdEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgPT09IHJpZ2h0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlOUyB8IFRyZWVQb3NpdGlvbi5QUkVDRURJTkc7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGVmdEFuY2VzdG9ycy5wdXNoKGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICAgIGxlZnRBbmNlc3RvciA9IHRoaXMucGFyZW50KGxlZnRBbmNlc3Rvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3JzID0gW107CiAgICAgICAgewogICAgICAgICAgbGV0IHJpZ2h0QW5jZXN0b3IgPSByaWdodDsKICAgICAgICAgIHdoaWxlIChyaWdodEFuY2VzdG9yKSB7CiAgICAgICAgICAgIGlmIChyaWdodEFuY2VzdG9yID09PSBsZWZ0KSB7CiAgICAgICAgICAgICAgcmV0dXJuIFRyZWVQb3NpdGlvbi5DT05UQUlORURfQlkgfCBUcmVlUG9zaXRpb24uRk9MTE9XSU5HOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3JzLnB1c2gocmlnaHRBbmNlc3Rvcik7CiAgICAgICAgICAgIHJpZ2h0QW5jZXN0b3IgPSB0aGlzLnBhcmVudChyaWdodEFuY2VzdG9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgcm9vdDYgPSByZXZlcnNlQXJyYXlJbmRleChsZWZ0QW5jZXN0b3JzLCAwKTsKICAgICAgICBpZiAoIXJvb3Q2IHx8IHJvb3Q2ICE9PSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgMCkpIHsKICAgICAgICAgIHJldHVybiBUcmVlUG9zaXRpb24uRElTQ09OTkVDVEVEOwogICAgICAgIH0KICAgICAgICBsZXQgY29tbW9uQW5jZXN0b3JJbmRleCA9IDA7CiAgICAgICAgY29uc3QgYW5jZXN0b3JzTWluTGVuZ3RoID0gTWF0aC5taW4obGVmdEFuY2VzdG9ycy5sZW5ndGgsIHJpZ2h0QW5jZXN0b3JzLmxlbmd0aCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW5jZXN0b3JzTWluTGVuZ3RoOyArK2kxMSkgewogICAgICAgICAgY29uc3QgbGVmdEFuY2VzdG9yID0gcmV2ZXJzZUFycmF5SW5kZXgobGVmdEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGNvbnN0IHJpZ2h0QW5jZXN0b3IgPSByZXZlcnNlQXJyYXlJbmRleChyaWdodEFuY2VzdG9ycywgaTExKTsKICAgICAgICAgIGlmIChsZWZ0QW5jZXN0b3IgIT09IHJpZ2h0QW5jZXN0b3IpIHsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjb21tb25BbmNlc3RvckluZGV4ID0gaTExOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZWZ0SW5kZXggPSB0aGlzLmluZGV4KHJldmVyc2VBcnJheUluZGV4KGxlZnRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgY29uc3QgcmlnaHRJbmRleCA9IHRoaXMuaW5kZXgocmV2ZXJzZUFycmF5SW5kZXgocmlnaHRBbmNlc3RvcnMsIGNvbW1vbkFuY2VzdG9ySW5kZXggKyAxKSk7CiAgICAgICAgcmV0dXJuIHJpZ2h0SW5kZXggPCBsZWZ0SW5kZXggPyBUcmVlUG9zaXRpb24uUFJFQ0VESU5HIDogVHJlZVBvc2l0aW9uLkZPTExPV0lORzsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIHRoZSBvYmplY3QgZnJvbSB0aGlzIHRyZWUuCiAgICAgICAqIEhhcyBubyBlZmZlY3QgaWYgYWxyZWFkeSByZW1vdmVkLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIHJlbW92ZQogICAgICAgKiBAbWVtYmVyT2YgbW9kdWxlOnN5bWJvbC10cmVlIwogICAgICAgKiBAcGFyYW0ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gcmVtb3ZlT2JqZWN0CiAgICAgICAqLwogICAgICByZW1vdmUocmVtb3ZlT2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVtb3ZlTm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlT2JqZWN0KTsKICAgICAgICBjb25zdCBwYXJlbnROb2RlID0gdGhpcy5fbm9kZShyZW1vdmVOb2RlLnBhcmVudCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlbW92ZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXh0Tm9kZSA9IHRoaXMuX25vZGUocmVtb3ZlTm9kZS5uZXh0U2libGluZyk7CiAgICAgICAgaWYgKHBhcmVudE5vZGUpIHsKICAgICAgICAgIGlmIChwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlbW92ZU9iamVjdCkgewogICAgICAgICAgICBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPSByZW1vdmVOb2RlLm5leHRTaWJsaW5nOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHBhcmVudE5vZGUubGFzdENoaWxkID09PSByZW1vdmVPYmplY3QpIHsKICAgICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHByZXZOb2RlKSB7CiAgICAgICAgICBwcmV2Tm9kZS5uZXh0U2libGluZyA9IHJlbW92ZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgfQogICAgICAgIGlmIChuZXh0Tm9kZSkgewogICAgICAgICAgbmV4dE5vZGUucHJldmlvdXNTaWJsaW5nID0gcmVtb3ZlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgfQogICAgICAgIHJlbW92ZU5vZGUucGFyZW50ID0gbnVsbDsKICAgICAgICByZW1vdmVOb2RlLnByZXZpb3VzU2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5uZXh0U2libGluZyA9IG51bGw7CiAgICAgICAgcmVtb3ZlTm9kZS5jYWNoZWRJbmRleCA9IC0xOwogICAgICAgIHJlbW92ZU5vZGUuY2FjaGVkSW5kZXhWZXJzaW9uID0gTmFOOwogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVtb3ZlT2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBiZWZvcmUgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgcHJldmlvdXMgc2libGluZyBvZiBgcmVmZXJlbmNlT2JqZWN0YC4KICAgICAgICoKICAgICAgICogKiBgTygxKWAKICAgICAgICoKICAgICAgICogQG1ldGhvZCBpbnNlcnRCZWZvcmUKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGluc2VydEJlZm9yZShyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgcHJldk5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucHJldmlvdXNTaWJsaW5nKTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGNvbnN0IHBhcmVudE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUucGFyZW50KTsKICAgICAgICBpZiAobmV3Tm9kZS5pc0F0dGFjaGVkKSB7CiAgICAgICAgICB0aHJvdyBFcnJvcigiR2l2ZW4gb2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUsIHJlbW92ZSBpdCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU5vZGUucGFyZW50OwogICAgICAgIG5ld05vZGUucHJldmlvdXNTaWJsaW5nID0gcmVmZXJlbmNlTm9kZS5wcmV2aW91c1NpYmxpbmc7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICByZWZlcmVuY2VOb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAocHJldk5vZGUpIHsKICAgICAgICAgIHByZXZOb2RlLm5leHRTaWJsaW5nID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSAmJiBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5maXJzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgIH0KICAgICAgICBpZiAocGFyZW50Tm9kZSkgewogICAgICAgICAgcGFyZW50Tm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0IHRoZSBnaXZlbiBvYmplY3QgYWZ0ZXIgdGhlIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgbmV4dCBzaWJsaW5nIG9mIGByZWZlcmVuY2VPYmplY3RgLgogICAgICAgKgogICAgICAgKiAqIGBPKDEpYAogICAgICAgKgogICAgICAgKiBAbWV0aG9kIGluc2VydEFmdGVyCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBpbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdCkgewogICAgICAgIGNvbnN0IHJlZmVyZW5jZU5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU9iamVjdCk7CiAgICAgICAgY29uc3QgbmV4dE5vZGUgPSB0aGlzLl9ub2RlKHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmcpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlTm9kZS5wYXJlbnQpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIG5ld05vZGUucGFyZW50ID0gcmVmZXJlbmNlTm9kZS5wYXJlbnQ7CiAgICAgICAgbmV3Tm9kZS5wcmV2aW91c1NpYmxpbmcgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgbmV3Tm9kZS5uZXh0U2libGluZyA9IHJlZmVyZW5jZU5vZGUubmV4dFNpYmxpbmc7CiAgICAgICAgcmVmZXJlbmNlTm9kZS5uZXh0U2libGluZyA9IG5ld09iamVjdDsKICAgICAgICBpZiAobmV4dE5vZGUpIHsKICAgICAgICAgIG5leHROb2RlLnByZXZpb3VzU2libGluZyA9IG5ld09iamVjdDsKICAgICAgICB9CiAgICAgICAgaWYgKHBhcmVudE5vZGUgJiYgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPT09IHJlZmVyZW5jZU9iamVjdCkgewogICAgICAgICAgcGFyZW50Tm9kZS5sYXN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgfQogICAgICAgIGlmIChwYXJlbnROb2RlKSB7CiAgICAgICAgICBwYXJlbnROb2RlLmNoaWxkcmVuQ2hhbmdlZCgpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3T2JqZWN0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnQgdGhlIGdpdmVuIG9iamVjdCBhcyB0aGUgZmlyc3QgY2hpbGQgb2YgdGhlIGdpdmVuIHJlZmVyZW5jZSBvYmplY3QuCiAgICAgICAqIGBuZXdPYmplY3RgIGlzIG5vdyB0aGUgZmlyc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgcHJlcGVuZENoaWxkCiAgICAgICAqIEBtZW1iZXJPZiBtb2R1bGU6c3ltYm9sLXRyZWUjCiAgICAgICAqIEBwYXJhbSB7T2JqZWN0fSByZWZlcmVuY2VPYmplY3QKICAgICAgICogQHBhcmFtIHtPYmplY3R9IG5ld09iamVjdAogICAgICAgKiBAdGhyb3dzIHtFcnJvcn0gSWYgdGhlIG5ld09iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlCiAgICAgICAqIEByZXR1cm4ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqLwogICAgICBwcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0LCBuZXdPYmplY3QpIHsKICAgICAgICBjb25zdCByZWZlcmVuY2VOb2RlID0gdGhpcy5fbm9kZShyZWZlcmVuY2VPYmplY3QpOwogICAgICAgIGNvbnN0IG5ld05vZGUgPSB0aGlzLl9ub2RlKG5ld09iamVjdCk7CiAgICAgICAgaWYgKG5ld05vZGUuaXNBdHRhY2hlZCkgewogICAgICAgICAgdGhyb3cgRXJyb3IoIkdpdmVuIG9iamVjdCBpcyBhbHJlYWR5IHByZXNlbnQgaW4gdGhpcyBTeW1ib2xUcmVlLCByZW1vdmUgaXQgZmlyc3QiKTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlZmVyZW5jZU5vZGUuaGFzQ2hpbGRyZW4pIHsKICAgICAgICAgIHRoaXMuaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCwgbmV3T2JqZWN0KTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbmV3Tm9kZS5wYXJlbnQgPSByZWZlcmVuY2VPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmZpcnN0Q2hpbGQgPSBuZXdPYmplY3Q7CiAgICAgICAgICByZWZlcmVuY2VOb2RlLmxhc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuY2hpbGRyZW5DaGFuZ2VkKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdPYmplY3Q7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydCB0aGUgZ2l2ZW4gb2JqZWN0IGFzIHRoZSBsYXN0IGNoaWxkIG9mIHRoZSBnaXZlbiByZWZlcmVuY2Ugb2JqZWN0LgogICAgICAgKiBgbmV3T2JqZWN0YCBpcyBub3cgdGhlIGxhc3QgY2hpbGQgb2YgYHJlZmVyZW5jZU9iamVjdGAuCiAgICAgICAqCiAgICAgICAqICogYE8oMSlgCiAgICAgICAqCiAgICAgICAqIEBtZXRob2QgYXBwZW5kQ2hpbGQKICAgICAgICogQG1lbWJlck9mIG1vZHVsZTpzeW1ib2wtdHJlZSMKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJlZmVyZW5jZU9iamVjdAogICAgICAgKiBAcGFyYW0ge09iamVjdH0gbmV3T2JqZWN0CiAgICAgICAqIEB0aHJvd3Mge0Vycm9yfSBJZiB0aGUgbmV3T2JqZWN0IGlzIGFscmVhZHkgcHJlc2VudCBpbiB0aGlzIFN5bWJvbFRyZWUKICAgICAgICogQHJldHVybiB7T2JqZWN0fSBuZXdPYmplY3QKICAgICAgICovCiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0KSB7CiAgICAgICAgY29uc3QgcmVmZXJlbmNlTm9kZSA9IHRoaXMuX25vZGUocmVmZXJlbmNlT2JqZWN0KTsKICAgICAgICBjb25zdCBuZXdOb2RlID0gdGhpcy5fbm9kZShuZXdPYmplY3QpOwogICAgICAgIGlmIChuZXdOb2RlLmlzQXR0YWNoZWQpIHsKICAgICAgICAgIHRocm93IEVycm9yKCJHaXZlbiBvYmplY3QgaXMgYWxyZWFkeSBwcmVzZW50IGluIHRoaXMgU3ltYm9sVHJlZSwgcmVtb3ZlIGl0IGZpcnN0Iik7CiAgICAgICAgfQogICAgICAgIGlmIChyZWZlcmVuY2VOb2RlLmhhc0NoaWxkcmVuKSB7CiAgICAgICAgICB0aGlzLmluc2VydEFmdGVyKHJlZmVyZW5jZU5vZGUubGFzdENoaWxkLCBuZXdPYmplY3QpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBuZXdOb2RlLnBhcmVudCA9IHJlZmVyZW5jZU9iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUuZmlyc3RDaGlsZCA9IG5ld09iamVjdDsKICAgICAgICAgIHJlZmVyZW5jZU5vZGUubGFzdENoaWxkID0gbmV3T2JqZWN0OwogICAgICAgICAgcmVmZXJlbmNlTm9kZS5jaGlsZHJlbkNoYW5nZWQoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ld09iamVjdDsKICAgICAgfQogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gU3ltYm9sVHJlZTsKICAgIFN5bWJvbFRyZWUuVHJlZVBvc2l0aW9uID0gVHJlZVBvc2l0aW9uOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zeW1ib2xfdHJlZTsKdmFyIGluaXRfY2xhc3Nlc19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzNSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHM2KCk7CiAgICBpbXBvcnRfc3ltYm9sX3RyZWUgPSBfX3RvRVNNKHJlcXVpcmVfU3ltYm9sVHJlZSgpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5hc3luY2V4ZWN1dGlvbnN0YWNrLmpzCnZhciBBc3luY0V4ZWN1dGlvblN0YWNrOwp2YXIgaW5pdF9jbGFzc2VzX2FzeW5jZXhlY3V0aW9uc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYXN5bmNleGVjdXRpb25zdGFjay5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQXN5bmNFeGVjdXRpb25TdGFjayA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cyA9IFtdOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSA9IEluZmluaXR5OwogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50ID0gMDsKICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZSA9IFtdOwogICAgICB9CiAgICAgIGFzeW5jIGdldEV4Y2x1c2l2ZUV4ZWN1dGlvblNsb3QoZnVuY0FyZywgdGltZW91dEFyZykgewogICAgICAgIGNvbnN0IGV4ZWN1dGlvbkRlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uU2xvdCA9IHsKICAgICAgICAgIGZ1bmNUb0V4ZWN1dGU6IGZ1bmNBcmcsCiAgICAgICAgICBleGVjdXRpb25EZWZlcnJlZCwKICAgICAgICAgIHRpbWVvdXQ6IHRpbWVvdXRBcmcsCiAgICAgICAgICBtb2RlOiAiZXhjbHVzaXZlIgogICAgICAgIH07CiAgICAgICAgdGhpcy5leGVjdXRpb25TbG90cy5wdXNoKGV4ZWN1dGlvblNsb3QpOwogICAgICAgIHRoaXMucHJvY2Vzc0V4ZWN1dGlvblNsb3RzKCk7CiAgICAgICAgcmV0dXJuIGV4ZWN1dGlvbkRlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0Tm9uRXhjbHVzaXZlRXhlY3V0aW9uU2xvdChmdW5jQXJnLCB0aW1lb3V0QXJnKSB7CiAgICAgICAgY29uc3QgZXhlY3V0aW9uRGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBleGVjdXRpb25TbG90ID0gewogICAgICAgICAgZnVuY1RvRXhlY3V0ZTogZnVuY0FyZywKICAgICAgICAgIGV4ZWN1dGlvbkRlZmVycmVkLAogICAgICAgICAgdGltZW91dDogdGltZW91dEFyZywKICAgICAgICAgIG1vZGU6ICJub25leGNsdXNpdmUiCiAgICAgICAgfTsKICAgICAgICB0aGlzLmV4ZWN1dGlvblNsb3RzLnB1c2goZXhlY3V0aW9uU2xvdCk7CiAgICAgICAgdGhpcy5wcm9jZXNzRXhlY3V0aW9uU2xvdHMoKTsKICAgICAgICByZXR1cm4gZXhlY3V0aW9uRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBtYXhpbXVtIG51bWJlciBvZiBjb25jdXJyZW50IG5vbi1leGNsdXNpdmUgdGFza3MuCiAgICAgICAqIEBwYXJhbSBjb25jdXJyZW5jeSBtaW5pbXVtIDEgKEluZmluaXR5IG1lYW5zIHVubGltaXRlZCkKICAgICAgICovCiAgICAgIHNldE5vbkV4Y2x1c2l2ZU1heENvbmN1cnJlbmN5KGNvbmN1cnJlbmN5KSB7CiAgICAgICAgaWYgKCFOdW1iZXIuaXNGaW5pdGUoY29uY3VycmVuY3kpIHx8IGNvbmN1cnJlbmN5IDwgMSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSBtdXN0IGJlIGEgZmluaXRlIG51bWJlciA+PSAxIik7CiAgICAgICAgfQogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kgPSBjb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogR2V0IHRoZSBjb25maWd1cmVkIG1heCBjb25jdXJyZW5jeSBmb3Igbm9uLWV4Y2x1c2l2ZSB0YXNrcyAqLwogICAgICBnZXROb25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ub25FeGNsdXNpdmVNYXhDb25jdXJyZW5jeTsKICAgICAgfQogICAgICAvKiogTnVtYmVyIG9mIG5vbi1leGNsdXNpdmUgdGFza3MgY3VycmVudGx5IHJ1bm5pbmcgKi8KICAgICAgZ2V0QWN0aXZlTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50OwogICAgICB9CiAgICAgIC8qKiBOdW1iZXIgb2Ygbm9uLWV4Y2x1c2l2ZSB0YXNrcyB3YWl0aW5nIGZvciBhIGZyZWUgc2xvdCAqLwogICAgICBnZXRQZW5kaW5nTm9uRXhjbHVzaXZlQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLmxlbmd0aDsKICAgICAgfQogICAgICBhc3luYyBwcm9jZXNzRXhlY3V0aW9uU2xvdHMoKSB7CiAgICAgICAgaWYgKHRoaXMuaXNQcm9jZXNzaW5nKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB3aGlsZSAodGhpcy5leGVjdXRpb25TbG90cy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBjdXJyZW50U2xvdCA9IHRoaXMuZXhlY3V0aW9uU2xvdHNbMF07CiAgICAgICAgICBpZiAoY3VycmVudFNsb3QubW9kZSA9PT0gImV4Y2x1c2l2ZSIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRlRXhjbHVzaXZlU2xvdChjdXJyZW50U2xvdCk7CiAgICAgICAgICAgIHRoaXMuZXhlY3V0aW9uU2xvdHMuc2hpZnQoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IG5vbkV4Y2x1c2l2ZVNsb3RzID0gW107CiAgICAgICAgICAgIHdoaWxlICh0aGlzLmV4ZWN1dGlvblNsb3RzLmxlbmd0aCA+IDAgJiYgdGhpcy5leGVjdXRpb25TbG90c1swXS5tb2RlID09PSAibm9uZXhjbHVzaXZlIikgewogICAgICAgICAgICAgIG5vbkV4Y2x1c2l2ZVNsb3RzLnB1c2godGhpcy5leGVjdXRpb25TbG90cy5zaGlmdCgpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVOb25FeGNsdXNpdmVTbG90cyhub25FeGNsdXNpdmVTbG90cyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZUV4Y2x1c2l2ZVNsb3Qoc2xvdCkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBpZiAoc2xvdC50aW1lb3V0KSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IFByb21pc2UucmFjZShbCiAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihzbG90LnRpbWVvdXQpLnRoZW4oKCkgPT4gewogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUaW1lb3V0IHJlYWNoZWQiKTsKICAgICAgICAgICAgICB9KQogICAgICAgICAgICBdKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBzbG90LmZ1bmNUb0V4ZWN1dGUoKTsKICAgICAgICAgICAgc2xvdC5leGVjdXRpb25EZWZlcnJlZC5yZXNvbHZlKHJlc3VsdCk7CiAgICAgICAgICB9CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVqZWN0KGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZXhlY3V0ZU5vbkV4Y2x1c2l2ZVNsb3RzKHNsb3RzKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZXMgPSBzbG90cy5tYXAoYXN5bmMgKHNsb3QpID0+IHsKICAgICAgICAgIGF3YWl0IHRoaXMud2FpdEZvck5vbkV4Y2x1c2l2ZVNsb3QoKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGlmIChzbG90LnRpbWVvdXQpIHsKICAgICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgICAgICAgc2xvdC5mdW5jVG9FeGVjdXRlKCksCiAgICAgICAgICAgICAgICBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHNsb3QudGltZW91dCkudGhlbigoKSA9PiB7CiAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVGltZW91dCByZWFjaGVkIik7CiAgICAgICAgICAgICAgICB9KQogICAgICAgICAgICAgIF0pOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHNsb3QuZnVuY1RvRXhlY3V0ZSgpOwogICAgICAgICAgICAgIHNsb3QuZXhlY3V0aW9uRGVmZXJyZWQucmVzb2x2ZShyZXN1bHQpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBzbG90LmV4ZWN1dGlvbkRlZmVycmVkLnJlamVjdChlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBXYWl0IHVudGlsIGEgbm9uLWV4Y2x1c2l2ZSBzbG90IGlzIGF2YWlsYWJsZSAocmVzcGVjdHMgbWF4IGNvbmN1cnJlbmN5KS4KICAgICAgICovCiAgICAgIHdhaXRGb3JOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIGlmICh0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCA8IHRoaXMubm9uRXhjbHVzaXZlTWF4Q29uY3VycmVuY3kpIHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50Kys7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIHRoaXMubm9uRXhjbHVzaXZlUGVuZGluZ1F1ZXVlLnB1c2goKCkgPT4gewogICAgICAgICAgICB0aGlzLm5vbkV4Y2x1c2l2ZUN1cnJlbnRDb3VudCsrOwogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqIFJlbGVhc2UgYSBub24tZXhjbHVzaXZlIHNsb3QgYW5kIHdha2UgdGhlIG5leHQgd2FpdGVyLCBpZiBhbnkuICovCiAgICAgIHJlbGVhc2VOb25FeGNsdXNpdmVTbG90KCkgewogICAgICAgIHRoaXMubm9uRXhjbHVzaXZlQ3VycmVudENvdW50LS07CiAgICAgICAgY29uc3QgbmV4dDIgPSB0aGlzLm5vbkV4Y2x1c2l2ZVBlbmRpbmdRdWV1ZS5zaGlmdCgpOwogICAgICAgIGlmIChuZXh0MikgewogICAgICAgICAgbmV4dDIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuYmFja3ByZXNzdXJlZGFycmF5LmpzCnZhciBCYWNrcHJlc3N1cmVkQXJyYXk7CnZhciBpbml0X2NsYXNzZXNfYmFja3ByZXNzdXJlZGFycmF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmJhY2twcmVzc3VyZWRhcnJheS5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgQmFja3ByZXNzdXJlZEFycmF5ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihoaWdoV2F0ZXJNYXJrID0gMTYpIHsKICAgICAgICB0aGlzLmhhc1NwYWNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLnJ4anMuU3ViamVjdCgpOwogICAgICAgIHRoaXMuZGF0YSA9IFtdOwogICAgICAgIHRoaXMuaGlnaFdhdGVyTWFyayA9IGhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgcHVzaChpdGVtKSB7CiAgICAgICAgdGhpcy5kYXRhLnB1c2goaXRlbSk7CiAgICAgICAgdGhpcy5pdGVtc0F2YWlsYWJsZS5uZXh0KCJpdGVtc0F2YWlsYWJsZSIpOwogICAgICAgIGNvbnN0IHNwYWNlQXZhaWxhYmxlID0gdGhpcy5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgaWYgKHNwYWNlQXZhaWxhYmxlKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzcGFjZUF2YWlsYWJsZTsKICAgICAgfQogICAgICBzaGlmdCgpIHsKICAgICAgICBjb25zdCBpdGVtID0gdGhpcy5kYXRhLnNoaWZ0KCk7CiAgICAgICAgaWYgKHRoaXMuY2hlY2tTcGFjZUF2YWlsYWJsZSgpKSB7CiAgICAgICAgICB0aGlzLmhhc1NwYWNlLm5leHQoImhhc1NwYWNlIik7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpdGVtOwogICAgICB9CiAgICAgIGNoZWNrU3BhY2VBdmFpbGFibGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGF0YS5sZW5ndGggPCB0aGlzLmhpZ2hXYXRlck1hcms7CiAgICAgIH0KICAgICAgY2hlY2tIYXNJdGVtcygpIHsKICAgICAgICByZXR1cm4gdGhpcy5kYXRhLmxlbmd0aCA+IDA7CiAgICAgIH0KICAgICAgd2FpdEZvclNwYWNlKCkgewogICAgICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmNoZWNrU3BhY2VBdmFpbGFibGUoKSkgewogICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3Qgc3Vic2NyaXB0aW9uID0gdGhpcy5oYXNTcGFjZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgICAgICAgIHJlc29sdmUyKCk7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHdhaXRGb3JJdGVtcygpIHsKICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IHN1YnNjcmlwdGlvbiA9IHRoaXMuaXRlbXNBdmFpbGFibGUuc3Vic2NyaWJlKCgpID0+IHsKICAgICAgICAgICAgICBzdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICAgICAgICByZXNvbHZlMigpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5mYXN0bWFwLmpzCnZhciBGYXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2Zhc3RtYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgRmFzdE1hcCA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMKdmFyIHVuaSwgT2JqZWN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5vYmplY3RtYXAuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19mYXN0bWFwKCk7CiAgICB1bmkgPSAocHJlZml4NCA9ICJ1bmkiKSA9PiB7CiAgICAgIHJldHVybiBgJHtwcmVmaXg0fXh4eHh4eHh4eHh4YC5yZXBsYWNlKC9beHldL2csIChjMTEpID0+IHsKICAgICAgICBjb25zdCByMTEgPSBNYXRoLnJhbmRvbSgpICogMTYgfCAwOwogICAgICAgIGNvbnN0IHY1ID0gYzExID09PSAieCIgPyByMTEgOiByMTEgJiAzIHwgODsKICAgICAgICByZXR1cm4gdjUudG9TdHJpbmcoMTYpOwogICAgICB9KTsKICAgIH07CiAgICBPYmplY3RNYXAgPSBjbGFzcyBfT2JqZWN0TWFwIHsKICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgaW5zdGFuY2UKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZmFzdE1hcCA9IG5ldyBGYXN0TWFwKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pKCJrZXkiKTsKICAgICAgICB0aGlzLmFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXksIG9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QubmV4dCh7CiAgICAgICAgICBvcGVyYXRpb246ICJhZGQiLAogICAgICAgICAgcGF5bG9hZDogb2JqZWN0QXJnCiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHVuaXF1ZUtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbGlrZSAuYWRkIGJ1dCBhZGRzIGFuIHdob2xlIGFycmF5IG9mIG9iamVjdHMKICAgICAgICovCiAgICAgIGFkZEFycmF5KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZChpdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrIGlmIG9iamVjdCBpcyBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIHJldHVybiAhIXRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldCBrZXkgZm9yIG9iamVjdAogICAgICAgKiBAcGFyYW0gZmluZEZ1bmN0aW9uCiAgICAgICAqLwogICAgICBnZXRLZXlGb3JPYmplY3Qob2JqZWN0QXJnKSB7CiAgICAgICAgbGV0IGZvdW5kS2V5ID0gbnVsbDsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoIWZvdW5kS2V5ICYmIHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgZm91bmRLZXkgPSBrZXlBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZvdW5kS2V5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kIG9iamVjdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZChmaW5kRnVuY3Rpb24pIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgfQogICAgICBmaW5kU3luYyhmaW5kRnVuY3Rpb24pIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKSkgewogICAgICAgICAgICByZXR1cm4gdGhpcy5nZXRNYXBwZWRVbmlxdWUoa2V5QXJnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGEgc3BlY2lmaWMgZWxlbWVudCBhbmQgdGhlbiByZW1vdmVzIGl0CiAgICAgICAqLwogICAgICBhc3luYyBmaW5kT25lQW5kUmVtb3ZlKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IGF3YWl0IHRoaXMuZmluZChmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgZmluZE9uZUFuZFJlbW92ZVN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgY29uc3QgZm91bmRFbGVtZW50ID0gdGhpcy5maW5kU3luYyhmaW5kRnVuY3Rpb24pOwogICAgICAgIGlmIChmb3VuZEVsZW1lbnQpIHsKICAgICAgICAgIHRoaXMucmVtb3ZlKGZvdW5kRWxlbWVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEVsZW1lbnQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJ1biBmdW5jdGlvbiBmb3IgZWFjaCBpdGVtIGluIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgYXN5bmMgZm9yRWFjaChmdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIGF3YWl0IGZ1bmN0aW9uQXJnKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYW4gb2JqZWN0IGluIHRoZSBPYnNlcnZhYmxlbWFwIGFuZCByZW1vdmVzIGl0LCBzbyBpdCBjYW4ndCBiZSByZXRyaWV2ZWQgYWdhaW4KICAgICAgICovCiAgICAgIGdldE9uZUFuZFJlbW92ZSgpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IHRoaXMuZmFzdE1hcC5nZXRLZXlzKCk7CiAgICAgICAgaWYgKGtleXMyLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGtleVRvVXNlID0ga2V5czJbMF07CiAgICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleVRvVXNlKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkSXRlbQogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgY2xvbmVkIGFycmF5IG9mIGFsbCB0aGUgb2JqZWN0cyBjdXJyZW50bHkgaW4gdGhlIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgZ2V0QXJyYXkoKSB7CiAgICAgICAgY29uc3QgcmV0dXJuQXJyYXkgPSBbXTsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHRoaXMuZmFzdE1hcC5nZXRCeUtleShrZXlBcmcpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBPYmplY3RtYXAgaXN0IGVtcHR5CiAgICAgICAqLwogICAgICBpc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpLmxlbmd0aCA9PT0gMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlIG9iamVjdCBmcm9tIE9iamVjdG1hcAogICAgICAgKi8KICAgICAgcmVtb3ZlKG9iamVjdEFyZykgewogICAgICAgIGlmICh0aGlzLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIGNvbnN0IGtleUFyZyA9IHRoaXMuZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZyk7CiAgICAgICAgICBjb25zdCByZW1vdmVkT2JqZWN0ID0gdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgICBvcGVyYXRpb246ICJyZW1vdmUiLAogICAgICAgICAgICBwYXlsb2FkOiByZW1vdmVkT2JqZWN0CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiByZW1vdmVkT2JqZWN0OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgdGhpcy5mYXN0TWFwLnJlbW92ZUZyb21NYXAoa2V5QXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgYSBuZXcgT2JqZWN0bWFwIHRoYXQgaW5jbHVkZXMKICAgICAgICovCiAgICAgIGNvbmNhdChvYmplY3RNYXBBcmcpIHsKICAgICAgICBjb25zdCBjb25jYXR0ZWRPYmplY3RNYXAgPSBuZXcgX09iamVjdE1hcCgpOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcih0aGlzLmZhc3RNYXApOwogICAgICAgIGNvbmNhdHRlZE9iamVjdE1hcC5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgICAgcmV0dXJuIGNvbmNhdHRlZE9iamVjdE1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBPYmplY3RtYXAKICAgICAgICogTm90ZTogdW5pcXVlS2V5Q29sbGlzaW9ucyB3aWxsIGNhdXNlIG92ZXJ3cml0ZQogICAgICAgKiBAcGFyYW0gb2JqZWN0TWFwQXJnCiAgICAgICAqLwogICAgICBhZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwLmFkZEFsbEZyb21PdGhlcihvYmplY3RNYXBBcmcuZmFzdE1hcCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuaW50ZXJlc3QuanMKdmFyIEludGVyZXN0Owp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmludGVyZXN0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXAoKTsKICAgIEludGVyZXN0ID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogcXVpY2sgYWNjZXNzIHRvIGEgc3RyaW5nIHRoYXQgbWFrZXMgdGhlIGludGVyZXN0IGNvbXBhcmFibGUgZm9yIGNoZWNraW5nIGZvciBzaW1pbGFyIGludGVyZXN0cwogICAgICAgKi8KICAgICAgZ2V0IGNvbXBhcmlzb25TdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyaXNvbkZ1bmModGhpcy5vcmlnaW5hbEludGVyZXN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZnVsbGZpbGwgdGhlIGludGVyZXN0CiAgICAgICAqLwogICAgICBmdWxsZmlsbEludGVyZXN0KG9iamVjdEFyZykgewogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gdHJ1ZTsKICAgICAgICB0aGlzLmZ1bGxmaWxsbWVudFN0b3JlID0gW107CiAgICAgICAgdGhpcy5pbnRlcmVzdERlZmVycmVkLnJlc29sdmUob2JqZWN0QXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICoKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKGludGVyZXN0TWFwQXJnLCBpbnRlcmVzdEFyZywgY29tcGFyaXNvbkZ1bmNBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIgPSBuZXcgZGlzdF90c19leHBvcnRzNy5UaW1lcigxZTQpOwogICAgICAgIHRoaXMuaXNGdWxsZmlsbGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5mdWxsZmlsbG1lbnRTdG9yZSA9IFtdOwogICAgICAgIHRoaXMuaW50ZXJlc3REZWZlcnJlZCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMuRGVmZXJyZWQoKTsKICAgICAgICB0aGlzLmludGVyZXN0RnVsbGZpbGxlZCA9IHRoaXMuaW50ZXJlc3REZWZlcnJlZC5wcm9taXNlOwogICAgICAgIHRoaXMuaW50ZXJlc3RNYXBSZWYgPSBpbnRlcmVzdE1hcEFyZzsKICAgICAgICB0aGlzLm9yaWdpbmFsSW50ZXJlc3QgPSBpbnRlcmVzdEFyZzsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmRlc3RydWN0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgdGhpcy5kZXN0cm95KCk7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucz8ubWFya0xvc3RBZnRlckRlZmF1bHQpIHsKICAgICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IodGhpcy5vcHRpb25zLm1hcmtMb3N0QWZ0ZXJEZWZhdWx0KS50aGVuKHRoaXMubWFya0xvc3QpOwogICAgICAgIH0KICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8vIExJRkVDWUNMRSBNQU5BR0VNRU5UCiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAgLyoqCiAgICAgICAqIHNlbGYgZGVzdHJ1Y3RzIHRoZSBpbnRlcmVzdAogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmludGVyZXN0TWFwUmVmLnJlbW92ZUludGVyZXN0KHRoaXMpOwogICAgICAgIGlmICghdGhpcy5pc0Z1bGxmaWxsZWQgJiYgdGhpcy5vcHRpb25zLmRlZmF1bHRGdWxsZmlsbG1lbnQpIHsKICAgICAgICAgIHRoaXMuZnVsbGZpbGxJbnRlcmVzdCh0aGlzLm9wdGlvbnMuZGVmYXVsdEZ1bGxmaWxsbWVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBub3RpZmllcyB0aGUgaW50ZXJlc3QgdGhhdCB0aGUgaW50ZXJlc3QgaW4gaXQgaGFzIGJlZW4gbG9zdAogICAgICAgKi8KICAgICAgbWFya0xvc3QoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnN0YXJ0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRoZSBpbnRlcmVzdCB0aGF0IHRoZSBpbnRlcmVzdCBpbiBpdCBoYXMgYmVlbiByZXN0b3JlZAogICAgICAgKi8KICAgICAgcmVuZXcoKSB7CiAgICAgICAgdGhpcy5kZXN0cnVjdGlvblRpbWVyLnJlc2V0KCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuaW50ZXJlc3RtYXAuanMKdmFyIEludGVyZXN0TWFwOwp2YXIgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmludGVyZXN0bWFwLmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfb2JqZWN0bWFwKCk7CiAgICBpbml0X2NsYXNzZXNfaW50ZXJlc3RtYXBfaW50ZXJlc3QoKTsKICAgIEludGVyZXN0TWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcihjb21wYXJpc29uRnVuY0FyZywgb3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5pbnRlcmVzdE9iamVjdE1hcCA9IG5ldyBPYmplY3RNYXAoKTsKICAgICAgICB0aGlzLmludGVyZXN0T2JzZXJ2YWJsZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyLk9ic2VydmFibGVJbnRha2UoKTsKICAgICAgICB0aGlzLmNvbXBhcmlzb25GdW5jID0gY29tcGFyaXNvbkZ1bmNBcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBpbnRlcmVzdCB0byB0aGUgSW50ZXJlc3RNYXAKICAgICAgICogQHBhcmFtIGludGVyZXN0SWQKICAgICAgICovCiAgICAgIGFzeW5jIGFkZEludGVyZXN0KGludGVyZXN0SWQsIGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhpbnRlcmVzdElkKTsKICAgICAgICBsZXQgcmV0dXJuSW50ZXJlc3Q7CiAgICAgICAgY29uc3QgbmV3SW50ZXJlc3QgPSBuZXcgSW50ZXJlc3QodGhpcywgaW50ZXJlc3RJZCwgdGhpcy5jb21wYXJpc29uRnVuYywgewogICAgICAgICAgbWFya0xvc3RBZnRlckRlZmF1bHQ6IHRoaXMub3B0aW9ucy5tYXJrTG9zdEFmdGVyRGVmYXVsdCwKICAgICAgICAgIGRlZmF1bHRGdWxsZmlsbG1lbnQ6IGRlZmF1bHRGdWxsZmlsbG1lbnRBcmcKICAgICAgICB9KTsKICAgICAgICBsZXQgaW50ZXJlc3RFeGlzdHMgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZvckVhY2goKGludGVyZXN0QXJnKSA9PiB7CiAgICAgICAgICBpZiAoIWludGVyZXN0RXhpc3RzICYmIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IG5ld0ludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coImluZm8iLCBgaW50ZXJlc3QgYWxyZWFkeSBleGlzdHMgZm9yICR7bmV3SW50ZXJlc3QuY29tcGFyaXNvblN0cmluZ31gKTsKICAgICAgICAgICAgaW50ZXJlc3RFeGlzdHMgPSB0cnVlOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdCA9IGludGVyZXN0QXJnOwogICAgICAgICAgICByZXR1cm5JbnRlcmVzdC5yZW5ldygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghcmV0dXJuSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybkludGVyZXN0ID0gbmV3SW50ZXJlc3Q7CiAgICAgICAgICB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmFkZChyZXR1cm5JbnRlcmVzdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuaW50ZXJlc3RPYnNlcnZhYmxlLnB1c2gocmV0dXJuSW50ZXJlc3QpOwogICAgICAgIHJldHVybiByZXR1cm5JbnRlcmVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhbiBpbnRlcmVzdCBmcm9tIHRoZSBpbnRlcmVzdCBtYXAKICAgICAgICovCiAgICAgIHJlbW92ZUludGVyZXN0KGludGVyZXN0QXJnKSB7CiAgICAgICAgY29uc3QgaW50ZXJlc3RUb1JlbW92ZSA9IHRoaXMuaW50ZXJlc3RPYmplY3RNYXAuZmluZE9uZUFuZFJlbW92ZVN5bmMoKGludGVyZXN0QXJnMikgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0QXJnLmNvbXBhcmlzb25TdHJpbmcgPT09IGludGVyZXN0QXJnMi5jb21wYXJpc29uU3RyaW5nOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpbnRlcmVzdAogICAgICAgKi8KICAgICAgY2hlY2tJbnRlcmVzdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBjb21wYXJpc29uU3RyaW5nID0gdGhpcy5jb21wYXJpc29uRnVuYyhvYmplY3RBcmcpOwogICAgICAgIHJldHVybiB0aGlzLmNoZWNrSW50ZXJlc3RCeVN0cmluZyhjb21wYXJpc29uU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBjb21wYXJpc29uU3RyaW5nQXJnCiAgICAgICAqLwogICAgICBjaGVja0ludGVyZXN0QnlTdHJpbmcoY29tcGFyaXNvblN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IGZvdW5kSW50ZXJlc3QgPSB0aGlzLmludGVyZXN0T2JqZWN0TWFwLmZpbmRTeW5jKChpbnRlcmVzdCkgPT4gewogICAgICAgICAgcmV0dXJuIGludGVyZXN0LmNvbXBhcmlzb25TdHJpbmcgPT09IGNvbXBhcmlzb25TdHJpbmdBcmc7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKGZvdW5kSW50ZXJlc3QpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpbmZvcm0gbG9zdCBpbnRlcmVzdAogICAgICAgKiBAcGFyYW0gaW50ZXJlc3RJZAogICAgICAgKi8KICAgICAgaW5mb3JtTG9zdEludGVyZXN0KGludGVyZXN0SWQpIHsKICAgICAgICBjb25zdCB3YW50ZWRJbnRlcmVzdCA9IHRoaXMuZmluZEludGVyZXN0KGludGVyZXN0SWQpOwogICAgICAgIGlmICh3YW50ZWRJbnRlcmVzdCkgewogICAgICAgICAgd2FudGVkSW50ZXJlc3QubWFya0xvc3QoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZpbmRzIGFuIGludGVyZXN0CiAgICAgICAqIEBwYXJhbSBpbnRlcmVzdElkCiAgICAgICAqLwogICAgICBmaW5kSW50ZXJlc3QoaW50ZXJlc3RJZCkgewogICAgICAgIGNvbnN0IGNvbXBhcmFibGVTdHJpbmcgPSB0aGlzLmNvbXBhcmlzb25GdW5jKGludGVyZXN0SWQpOwogICAgICAgIGNvbnN0IGludGVyZXN0ID0gdGhpcy5pbnRlcmVzdE9iamVjdE1hcC5maW5kU3luYygoaW50ZXJlc3RBcmcpID0+IHsKICAgICAgICAgIHJldHVybiBpbnRlcmVzdEFyZy5jb21wYXJpc29uU3RyaW5nID09PSBjb21wYXJhYmxlU3RyaW5nOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBpbnRlcmVzdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5saW1pdGVkYXJyYXkuanMKdmFyIExpbWl0ZWRBcnJheTsKdmFyIGluaXRfY2xhc3Nlc19saW1pdGVkYXJyYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMubGltaXRlZGFycmF5LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19wbHVnaW5zKCk7CiAgICBMaW1pdGVkQXJyYXkgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGxpbWl0QXJnKSB7CiAgICAgICAgdGhpcy5hcnJheSA9IFtdOwogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICB9CiAgICAgIGFkZE9uZShvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmFycmF5LnVuc2hpZnQob2JqZWN0QXJnKTsKICAgICAgICBpZiAodGhpcy5hcnJheS5sZW5ndGggPiB0aGlzLmFycmF5TGltaXQpIHsKICAgICAgICAgIHRoaXMuYXJyYXkubGVuZ3RoID0gdGhpcy5hcnJheUxpbWl0OwogICAgICAgIH0KICAgICAgfQogICAgICBhZGRNYW55KG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgZm9yIChsZXQgb2JqZWN0QXJnIG9mIG9iamVjdEFycmF5QXJnKSB7CiAgICAgICAgICB0aGlzLmFkZE9uZShvYmplY3RBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICBzZXRMaW1pdChsaW1pdEFyZykgewogICAgICAgIHRoaXMuYXJyYXlMaW1pdCA9IGxpbWl0QXJnOwogICAgICAgIGlmICh0aGlzLmFycmF5Lmxlbmd0aCA+IHRoaXMuYXJyYXlMaW1pdCkgewogICAgICAgICAgdGhpcy5hcnJheS5sZW5ndGggPSB0aGlzLmFycmF5TGltaXQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldEF2ZXJhZ2UoKSB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLmFycmF5WzBdID09PSAibnVtYmVyIikgewogICAgICAgICAgbGV0IHN1bSA9IDA7CiAgICAgICAgICBmb3IgKGxldCBsb2NhbE51bWJlciBvZiB0aGlzLmFycmF5KSB7CiAgICAgICAgICAgIGxldCBsb2NhbE51bWJlckFueSA9IGxvY2FsTnVtYmVyOwogICAgICAgICAgICBzdW0gPSBzdW0gKyBsb2NhbE51bWJlckFueTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBzdW0gLyB0aGlzLmFycmF5Lmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLmxvb3B0cmFja2VyLmpzCnZhciBMb29wVHJhY2tlcjsKdmFyIGluaXRfY2xhc3Nlc19sb29wdHJhY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvY2xhc3Nlcy5sb29wdHJhY2tlci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX29iamVjdG1hcCgpOwogICAgTG9vcFRyYWNrZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwID0gbmV3IE9iamVjdE1hcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgYW5kIHRyYWNrcyBhbiBvYmplY3QKICAgICAgICogQHBhcmFtIG9iamVjdEFyZwogICAgICAgKi8KICAgICAgY2hlY2tBbmRUcmFjayhvYmplY3RBcmcpIHsKICAgICAgICBpZiAoIXRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmNoZWNrRm9yT2JqZWN0KG9iamVjdEFyZykpIHsKICAgICAgICAgIHRoaXMucmVmZXJlbmNlT2JqZWN0TWFwLmFkZChvYmplY3RBcmcpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXA7CnZhciBpbml0X2NsYXNzZXNfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnN0cmluZ21hcC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgU3RyaW5nbWFwID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZCBhIHN0cmluZyB0byB0aGUgU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBhZGRTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkucHVzaChzdHJpbmdBcmcpOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBsaWtlIGFkZFN0cmluZywgYnV0IGFjY2VwdHMgYW4gYXJyYXkgb2Ygc3RyaW5ncwogICAgICAgKi8KICAgICAgYWRkU3RyaW5nQXJyYXkoc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICAgIHRoaXMuYWRkU3RyaW5nKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmVtb3ZlcyBhIHN0cmluZyBmcm9tIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgcmVtb3ZlU3RyaW5nKHN0cmluZ0FyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAodGhpcy5fc3RyaW5nQXJyYXlba2V5QXJnXSA9PT0gc3RyaW5nQXJnKSB7CiAgICAgICAgICAgIHRoaXMuX3N0cmluZ0FycmF5LnNwbGljZShwYXJzZUludChrZXlBcmcpLCAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGVzIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIHdpcGUoKSB7CiAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkgPSBbXTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgc3RyaW5nIGlzIGluIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgY2hlY2tTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX3N0cmluZ0FycmF5LmluZGV4T2Yoc3RyaW5nQXJnKSAhPT0gLTE7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBzdHJpbmdQcmVzZW5jZSB3aXRoIG1pbmltYXRjaAogICAgICAgKi8KICAgICAgY2hlY2tNaW5pbWF0Y2gobWluaU1hdGNoU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3Qgc21hcnRNYXRjaEluc3RhbmNlID0gbmV3IGRpc3RfdHNfZXhwb3J0czUuU21hcnRNYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpOwogICAgICAgIGxldCBmb3VuZE1hdGNoID0gZmFsc2U7CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICBpZiAoc21hcnRNYXRjaEluc3RhbmNlLm1hdGNoKHN0cmluZ0l0ZW0pKSB7CiAgICAgICAgICAgIGZvdW5kTWF0Y2ggPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRNYXRjaDsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIHRoZSBTdHJpbmdtYXAgaXMgZW1wdHkKICAgICAgICovCiAgICAgIGNoZWNrSXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkubGVuZ3RoID09PSAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGEgY2xvbmVkIGNvcHkgb2YgdGhlIGN1cnJlbnQgc3RyaW5nIEFycmF5CiAgICAgICAqLwogICAgICBnZXRTdHJpbmdBcnJheSgpIHsKICAgICAgICBjb25zdCByZXR1cm5BcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiB0aGlzLl9zdHJpbmdBcnJheSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChzdHJpbmdJdGVtKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVybkFycmF5OwogICAgICB9CiAgICAgIC8vIHRyaWdnZXIgcmVnaXN0ZXJpbmcKICAgICAgLyoqCiAgICAgICAqIHJlZ2lzdGVyIGEgbmV3IHRyaWdnZXIKICAgICAgICovCiAgICAgIHJlZ2lzdGVyVW50aWxUcnVlKGZ1bmN0aW9uQXJnLCBjYWxsYmFja0FyZykgewogICAgICAgIGNvbnN0IHRydWVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LnB1c2goKCkgPT4gewogICAgICAgICAgY29uc3QgcmVzdWx0ID0gZnVuY3Rpb25BcmcodGhpcy5nZXRTdHJpbmdBcnJheSgpKTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHRydWUpIHsKICAgICAgICAgICAgaWYgKGNhbGxiYWNrQXJnKSB7CiAgICAgICAgICAgICAgY2FsbGJhY2tBcmcoKTsKICAgICAgICAgICAgfQogICAgICAgICAgICB0cnVlRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgICByZXR1cm4gdHJ1ZURlZmVycmVkLnByb21pc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIG5vdGlmaWVzIHRyaWdnZXJzCiAgICAgICAqLwogICAgICBub3RpZnlUcmlnZ2VyKCkgewogICAgICAgIGNvbnN0IGZpbHRlcmVkQXJyYXkgPSB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheS5maWx0ZXIoKGZ1bmN0aW9uQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gIWZ1bmN0aW9uQXJnKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBmaWx0ZXJlZEFycmF5OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcwp2YXIgVGltZWRBZ2dyZWd0b3I7CnZhciBpbml0X2NsYXNzZXNfdGltZWRhZ2dyZWdhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRpbWVkYWdncmVnYXRvci5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcGx1Z2lucygpOwogICAgVGltZWRBZ2dyZWd0b3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgICB0aGlzLnN0b3JhZ2VBcnJheSA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgY2hlY2tBZ2dyZWdhdGlvblN0YXR1cygpIHsKICAgICAgICBjb25zdCBhZGRBZ2dyZWdhdGlvblRpbWVyID0gKCkgPT4gewogICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvblRpbWVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czcuVGltZXIodGhpcy5vcHRpb25zLmFnZ3JlZ2F0aW9uSW50ZXJ2YWxJbk1pbGxpcyk7CiAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uVGltZXIuY29tcGxldGVkLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjb25zdCBhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nID0gdGhpcy5zdG9yYWdlQXJyYXk7CiAgICAgICAgICAgIGlmIChhZ2dyZWdhdGVGb3JQcm9jZXNzaW5nLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lciA9IG51bGw7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuc3RvcmFnZUFycmF5ID0gW107CiAgICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICAgICAgdGhpcy5vcHRpb25zLmZ1bmN0aW9uRm9yQWdncmVnYXRpb24oYWdncmVnYXRlRm9yUHJvY2Vzc2luZyk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25UaW1lci5zdGFydCgpOwogICAgICAgIH07CiAgICAgICAgaWYgKCF0aGlzLmFnZ3JlZ2F0aW9uVGltZXIpIHsKICAgICAgICAgIGFkZEFnZ3JlZ2F0aW9uVGltZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYWRkKGFnZ3JlZ2F0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5zdG9yYWdlQXJyYXkucHVzaChhZ2dyZWdhdGlvbkFyZyk7CiAgICAgICAgdGhpcy5jaGVja0FnZ3JlZ2F0aW9uU3RhdHVzKCk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2NsYXNzZXMudHJlZS5qcwp2YXIgVHJlZTsKdmFyIGluaXRfY2xhc3Nlc190cmVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9jbGFzc2VzLnRyZWUuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3BsdWdpbnMoKTsKICAgIFRyZWUgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuc3ltYm9sVHJlZSA9IG5ldyBpbXBvcnRfc3ltYm9sX3RyZWUuZGVmYXVsdCgpOwogICAgICB9CiAgICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbnMgdGhhdCBtYXAgdG8gdGhlIGZ1bmN0aW9uYWxpdHkgb2Ygc3ltYm9sLXRyZWUKICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKgogICAgICAgKiBAcGFyYW0gb2JqZWN0QXJnCiAgICAgICAqLwogICAgICBpbml0aWFsaXplKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaW5pdGlhbGl6ZShvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGhhc0NoaWxkcmVuKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuaGFzQ2hpbGRyZW4ob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBmaXJzdENoaWxkKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZmlyc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIGxhc3RDaGlsZChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RDaGlsZChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZyhvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZyhvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmcob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBwYXJlbnQob2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wYXJlbnQob2JqZWN0QXJnKTsKICAgICAgfQogICAgICBsYXN0SW5jbHVzaXZlRGVzY2VuZGFudChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmxhc3RJbmNsdXNpdmVEZXNjZW5kYW50KG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucHJlY2VkaW5nKG9iamVjdEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuZm9sbG93aW5nKG9iamVjdCwgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5Ub0FycmF5KHBhcmVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgIH0KICAgICAgYW5jZXN0b3JzVG9BcnJheShvYmplY3RBcmcsIG9wdGlvbnNBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmFuY2VzdG9yc1RvQXJyYXkob2JqZWN0QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICB0cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS50cmVlVG9BcnJheShyb290QXJnLCBvcHRpb25zQXJnKTsKICAgICAgfQogICAgICBjaGlsZHJlbkl0ZXJhdG9yKHBhcmVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUuY2hpbGRyZW5JdGVyYXRvcihwYXJlbnRBcmcsIG9wdGlvbnNBcmcpOwogICAgICB9CiAgICAgIHByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLnByZXZpb3VzU2libGluZ3NJdGVyYXRvcihvYmplY3RBcmcpOwogICAgICB9CiAgICAgIG5leHRTaWJsaW5nc0l0ZXJhdG9yKG9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUubmV4dFNpYmxpbmdzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICBhbmNlc3RvcnNJdGVyYXRvcihvYmplY3RBcmcpIHsKICAgICAgICB0aGlzLnN5bWJvbFRyZWUuYW5jZXN0b3JzSXRlcmF0b3IoKTsKICAgICAgfQogICAgICB0cmVlSXRlcmF0b3Iocm9vdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUudHJlZUl0ZXJhdG9yKHJvb3RBcmcpOwogICAgICB9CiAgICAgIGluZGV4KGNoaWxkQXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbmRleChjaGlsZEFyZyk7CiAgICAgIH0KICAgICAgY2hpbGRyZW5Db3VudChwYXJlbnRBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5zeW1ib2xUcmVlLmNoaWxkcmVuQ291bnQocGFyZW50QXJnKTsKICAgICAgfQogICAgICBjb21wYXJlVHJlZVBvc2l0aW9uKGxlZnRBcmcsIHJpZ2h0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY29tcGFyZVRyZWVQb3NpdGlvbihsZWZ0QXJnLCByaWdodEFyZyk7CiAgICAgIH0KICAgICAgcmVtb3ZlKHJlbW92ZU9iamVjdEFyZykgewogICAgICAgIHJldHVybiB0aGlzLnN5bWJvbFRyZWUucmVtb3ZlKHJlbW92ZU9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgaW5zZXJ0QmVmb3JlKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRCZWZvcmUocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGluc2VydEFmdGVyKHJlZmVyZW5jZU9iamVjdCwgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5pbnNlcnRBZnRlcihyZWZlcmVuY2VPYmplY3QsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgcHJlcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5wcmVwZW5kQ2hpbGQocmVmZXJlbmNlT2JqZWN0QXJnLCBuZXdPYmplY3RBcmcpOwogICAgICB9CiAgICAgIGFwcGVuZENoaWxkKHJlZmVyZW5jZU9iamVjdEFyZywgbmV3T2JqZWN0QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3ltYm9sVHJlZS5hcHBlbmRDaGlsZChyZWZlcmVuY2VPYmplY3RBcmcsIG5ld09iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgICAvLyBGdW5jdGlvbmlvbmFsaXR5IHRoYXQgZXh0ZW5kcyBzeW1ib2wtdHJlZQogICAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgYnJhbmNoIG9mIHRoZSB0cmVlIGFzIEpTT04KICAgICAgICogY2FuIGJlIHVzZXIKICAgICAgICovCiAgICAgIHRvSnNvbldpdGhIaWVyYWNoeShyb290RWxlbWVudCkgewogICAgICAgIGNvbnN0IHRyZWVJdGVyYWJsZSA9IHRoaXMudHJlZUl0ZXJhdG9yKHJvb3RFbGVtZW50LCB7fSk7CiAgICAgICAgZm9yIChjb25zdCB0cmVlSXRlbSBvZiB0cmVlSXRlcmFibGUpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKHRyZWVJdGVtKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGJ1aWxkcyBhIHRyZWUgZnJvbSBhIEpTT04gd2l0aCBoaWVyYWNoeQogICAgICAgKiBAcGFyYW0gcm9vdEVsZW1lbnQKICAgICAgICovCiAgICAgIGZyb21Kc29uV2l0aEhpZXJhY2h5KHJvb3RFbGVtZW50KSB7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHM2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czYsIHsKICBBc3luY0V4ZWN1dGlvblN0YWNrOiAoKSA9PiBBc3luY0V4ZWN1dGlvblN0YWNrLAogIEJhY2twcmVzc3VyZWRBcnJheTogKCkgPT4gQmFja3ByZXNzdXJlZEFycmF5LAogIEZhc3RNYXA6ICgpID0+IEZhc3RNYXAsCiAgSW50ZXJlc3Q6ICgpID0+IEludGVyZXN0LAogIEludGVyZXN0TWFwOiAoKSA9PiBJbnRlcmVzdE1hcCwKICBMaW1pdGVkQXJyYXk6ICgpID0+IExpbWl0ZWRBcnJheSwKICBMb29wVHJhY2tlcjogKCkgPT4gTG9vcFRyYWNrZXIsCiAgT2JqZWN0TWFwOiAoKSA9PiBPYmplY3RNYXAsCiAgU3RyaW5nbWFwOiAoKSA9PiBTdHJpbmdtYXAsCiAgVGltZWRBZ2dyZWd0b3I6ICgpID0+IFRpbWVkQWdncmVndG9yLAogIFRyZWU6ICgpID0+IFRyZWUsCiAgdW5pOiAoKSA9PiB1bmkKfSk7CnZhciBpbml0X2Rpc3RfdHM3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfYXN5bmNleGVjdXRpb25zdGFjaygpOwogICAgaW5pdF9jbGFzc2VzX2JhY2twcmVzc3VyZWRhcnJheSgpOwogICAgaW5pdF9jbGFzc2VzX2Zhc3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19pbnRlcmVzdG1hcCgpOwogICAgaW5pdF9jbGFzc2VzX2ludGVyZXN0bWFwX2ludGVyZXN0KCk7CiAgICBpbml0X2NsYXNzZXNfbGltaXRlZGFycmF5KCk7CiAgICBpbml0X2NsYXNzZXNfbG9vcHRyYWNrZXIoKTsKICAgIGluaXRfY2xhc3Nlc19vYmplY3RtYXAoKTsKICAgIGluaXRfY2xhc3Nlc19zdHJpbmdtYXAoKTsKICAgIGluaXRfY2xhc3Nlc190aW1lZGFnZ3JlZ2F0b3IoKTsKICAgIGluaXRfY2xhc3Nlc190cmVlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91aW50OGFycmF5LWV4dHJhc0AxLjUuMC9ub2RlX21vZHVsZXMvdWludDhhcnJheS1leHRyYXMvaW5kZXguanMKdmFyIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodWludDhhcnJheV9leHRyYXNfZXhwb3J0cywgewogIGFyZVVpbnQ4QXJyYXlzRXF1YWw6ICgpID0+IGFyZVVpbnQ4QXJyYXlzRXF1YWwsCiAgYXNzZXJ0VWludDhBcnJheTogKCkgPT4gYXNzZXJ0VWludDhBcnJheSwKICBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcjogKCkgPT4gYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIsCiAgYmFzZTY0VG9TdHJpbmc6ICgpID0+IGJhc2U2NFRvU3RyaW5nLAogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5LAogIGNvbXBhcmVVaW50OEFycmF5czogKCkgPT4gY29tcGFyZVVpbnQ4QXJyYXlzLAogIGNvbmNhdFVpbnQ4QXJyYXlzOiAoKSA9PiBjb25jYXRVaW50OEFycmF5cywKICBnZXRVaW50QkU6ICgpID0+IGdldFVpbnRCRSwKICBoZXhUb1VpbnQ4QXJyYXk6ICgpID0+IGhleFRvVWludDhBcnJheSwKICBpbmNsdWRlczogKCkgPT4gaW5jbHVkZXMsCiAgaW5kZXhPZjogKCkgPT4gaW5kZXhPZiwKICBpc1VpbnQ4QXJyYXk6ICgpID0+IGlzVWludDhBcnJheSwKICBzdHJpbmdUb0Jhc2U2NDogKCkgPT4gc3RyaW5nVG9CYXNlNjQsCiAgc3RyaW5nVG9VaW50OEFycmF5OiAoKSA9PiBzdHJpbmdUb1VpbnQ4QXJyYXksCiAgdG9VaW50OEFycmF5OiAoKSA9PiB0b1VpbnQ4QXJyYXksCiAgdWludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1aW50OEFycmF5VG9CYXNlNjQsCiAgdWludDhBcnJheVRvSGV4OiAoKSA9PiB1aW50OEFycmF5VG9IZXgsCiAgdWludDhBcnJheVRvU3RyaW5nOiAoKSA9PiB1aW50OEFycmF5VG9TdHJpbmcKfSk7CmZ1bmN0aW9uIGlzVHlwZSh2YWx1ZTIsIHR5cGVDb25zdHJ1Y3RvciwgdHlwZVN0cmluZ2lmaWVkKSB7CiAgaWYgKCF2YWx1ZTIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKHZhbHVlMi5jb25zdHJ1Y3RvciA9PT0gdHlwZUNvbnN0cnVjdG9yKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgcmV0dXJuIG9iamVjdFRvU3RyaW5nLmNhbGwodmFsdWUyKSA9PT0gdHlwZVN0cmluZ2lmaWVkOwp9CmZ1bmN0aW9uIGlzVWludDhBcnJheSh2YWx1ZTIpIHsKICByZXR1cm4gaXNUeXBlKHZhbHVlMiwgVWludDhBcnJheSwgdWludDhBcnJheVN0cmluZ2lmaWVkKTsKfQpmdW5jdGlvbiBpc0FycmF5QnVmZmVyKHZhbHVlMikgewogIHJldHVybiBpc1R5cGUodmFsdWUyLCBBcnJheUJ1ZmZlciwgYXJyYXlCdWZmZXJTdHJpbmdpZmllZCk7Cn0KZnVuY3Rpb24gaXNVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICByZXR1cm4gaXNVaW50OEFycmF5KHZhbHVlMikgfHwgaXNBcnJheUJ1ZmZlcih2YWx1ZTIpOwp9CmZ1bmN0aW9uIGFzc2VydFVpbnQ4QXJyYXkodmFsdWUyKSB7CiAgaWYgKCFpc1VpbnQ4QXJyYXkodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAsIGdvdCBcYCR7dHlwZW9mIHZhbHVlMn1cYGApOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVaW50OEFycmF5T3JBcnJheUJ1ZmZlcih2YWx1ZTIpIHsKICBpZiAoIWlzVWludDhBcnJheU9yQXJyYXlCdWZmZXIodmFsdWUyKSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcihgRXhwZWN0ZWQgXGBVaW50OEFycmF5XGAgb3IgXGBBcnJheUJ1ZmZlclxgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gdG9VaW50OEFycmF5KHZhbHVlMikgewogIGlmICh2YWx1ZTIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgfQogIGlmIChBcnJheUJ1ZmZlci5pc1ZpZXcodmFsdWUyKSkgewogICAgcmV0dXJuIG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIsIHZhbHVlMi5ieXRlT2Zmc2V0LCB2YWx1ZTIuYnl0ZUxlbmd0aCk7CiAgfQogIHRocm93IG5ldyBUeXBlRXJyb3IoYFVuc3VwcG9ydGVkIHZhbHVlLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGAuYCk7Cn0KZnVuY3Rpb24gY29uY2F0VWludDhBcnJheXMoYXJyYXlzLCB0b3RhbExlbmd0aCkgewogIGlmIChhcnJheXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7CiAgfQogIHRvdGFsTGVuZ3RoID8/PSBhcnJheXMucmVkdWNlKChhY2N1bXVsYXRvciwgY3VycmVudFZhbHVlKSA9PiBhY2N1bXVsYXRvciArIGN1cnJlbnRWYWx1ZS5sZW5ndGgsIDApOwogIGNvbnN0IHJldHVyblZhbHVlID0gbmV3IFVpbnQ4QXJyYXkodG90YWxMZW5ndGgpOwogIGxldCBvZmZzZXQgPSAwOwogIGZvciAoY29uc3QgYXJyYXkgb2YgYXJyYXlzKSB7CiAgICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICAgIHJldHVyblZhbHVlLnNldChhcnJheSwgb2Zmc2V0KTsKICAgIG9mZnNldCArPSBhcnJheS5sZW5ndGg7CiAgfQogIHJldHVybiByZXR1cm5WYWx1ZTsKfQpmdW5jdGlvbiBhcmVVaW50OEFycmF5c0VxdWFsKGE1LCBiNSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYTUpOwogIGFzc2VydFVpbnQ4QXJyYXkoYjUpOwogIGlmIChhNSA9PT0gYjUpIHsKICAgIHJldHVybiB0cnVlOwogIH0KICBpZiAoYTUubGVuZ3RoICE9PSBiNS5sZW5ndGgpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgYTUubGVuZ3RoOyBpbmRleDIrKykgewogICAgaWYgKGE1W2luZGV4Ml0gIT09IGI1W2luZGV4Ml0pIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICByZXR1cm4gdHJ1ZTsKfQpmdW5jdGlvbiBjb21wYXJlVWludDhBcnJheXMoYTUsIGI1KSB7CiAgYXNzZXJ0VWludDhBcnJheShhNSk7CiAgYXNzZXJ0VWludDhBcnJheShiNSk7CiAgY29uc3QgbGVuZ3RoID0gTWF0aC5taW4oYTUubGVuZ3RoLCBiNS5sZW5ndGgpOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyKyspIHsKICAgIGNvbnN0IGRpZmYgPSBhNVtpbmRleDJdIC0gYjVbaW5kZXgyXTsKICAgIGlmIChkaWZmICE9PSAwKSB7CiAgICAgIHJldHVybiBNYXRoLnNpZ24oZGlmZik7CiAgICB9CiAgfQogIHJldHVybiBNYXRoLnNpZ24oYTUubGVuZ3RoIC0gYjUubGVuZ3RoKTsKfQpmdW5jdGlvbiB1aW50OEFycmF5VG9TdHJpbmcoYXJyYXksIGVuY29kaW5nID0gInV0ZjgiKSB7CiAgYXNzZXJ0VWludDhBcnJheU9yQXJyYXlCdWZmZXIoYXJyYXkpOwogIGNhY2hlZERlY29kZXJzW2VuY29kaW5nXSA/Pz0gbmV3IGdsb2JhbFRoaXMuVGV4dERlY29kZXIoZW5jb2RpbmcpOwogIHJldHVybiBjYWNoZWREZWNvZGVyc1tlbmNvZGluZ10uZGVjb2RlKGFycmF5KTsKfQpmdW5jdGlvbiBhc3NlcnRTdHJpbmcodmFsdWUyKSB7CiAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCBcYHN0cmluZ1xgLCBnb3QgXGAke3R5cGVvZiB2YWx1ZTJ9XGBgKTsKICB9Cn0KZnVuY3Rpb24gc3RyaW5nVG9VaW50OEFycmF5KHN0cmluZzMpIHsKICBhc3NlcnRTdHJpbmcoc3RyaW5nMyk7CiAgcmV0dXJuIGNhY2hlZEVuY29kZXIuZW5jb2RlKHN0cmluZzMpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIHsKICByZXR1cm4gYmFzZTY0Mi5yZXBsYWNlQWxsKCIrIiwgIi0iKS5yZXBsYWNlQWxsKCIvIiwgIl8iKS5yZXBsYWNlKC89KyQvLCAiIik7Cn0KZnVuY3Rpb24gYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0dXJsKSB7CiAgY29uc3QgYmFzZTY0MiA9IGJhc2U2NHVybC5yZXBsYWNlQWxsKCItIiwgIisiKS5yZXBsYWNlQWxsKCJfIiwgIi8iKTsKICBjb25zdCBwYWRkaW5nID0gKDQgLSBiYXNlNjQyLmxlbmd0aCAlIDQpICUgNDsKICByZXR1cm4gYmFzZTY0MiArICI9Ii5yZXBlYXQocGFkZGluZyk7Cn0KZnVuY3Rpb24gdWludDhBcnJheVRvQmFzZTY0KGFycmF5LCB7IHVybFNhZmUgPSBmYWxzZSB9ID0ge30pIHsKICBhc3NlcnRVaW50OEFycmF5KGFycmF5KTsKICBsZXQgYmFzZTY0MiA9ICIiOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8IGFycmF5Lmxlbmd0aDsgaW5kZXgyICs9IE1BWF9CTE9DS19TSVpFKSB7CiAgICBjb25zdCBjaHVuayA9IGFycmF5LnN1YmFycmF5KGluZGV4MiwgaW5kZXgyICsgTUFYX0JMT0NLX1NJWkUpOwogICAgYmFzZTY0MiArPSBnbG9iYWxUaGlzLmJ0b2EoU3RyaW5nLmZyb21Db2RlUG9pbnQuYXBwbHkodm9pZCAwLCBjaHVuaykpOwogIH0KICByZXR1cm4gdXJsU2FmZSA/IGJhc2U2NFRvQmFzZTY0VXJsKGJhc2U2NDIpIDogYmFzZTY0MjsKfQpmdW5jdGlvbiBiYXNlNjRUb1VpbnQ4QXJyYXkoYmFzZTY0U3RyaW5nKSB7CiAgYXNzZXJ0U3RyaW5nKGJhc2U2NFN0cmluZyk7CiAgcmV0dXJuIFVpbnQ4QXJyYXkuZnJvbShnbG9iYWxUaGlzLmF0b2IoYmFzZTY0VXJsVG9CYXNlNjQoYmFzZTY0U3RyaW5nKSksICh4MykgPT4geDMuY29kZVBvaW50QXQoMCkpOwp9CmZ1bmN0aW9uIHN0cmluZ1RvQmFzZTY0KHN0cmluZzMsIHsgdXJsU2FmZSA9IGZhbHNlIH0gPSB7fSkgewogIGFzc2VydFN0cmluZyhzdHJpbmczKTsKICByZXR1cm4gdWludDhBcnJheVRvQmFzZTY0KHN0cmluZ1RvVWludDhBcnJheShzdHJpbmczKSwgeyB1cmxTYWZlIH0pOwp9CmZ1bmN0aW9uIGJhc2U2NFRvU3RyaW5nKGJhc2U2NFN0cmluZykgewogIGFzc2VydFN0cmluZyhiYXNlNjRTdHJpbmcpOwogIHJldHVybiB1aW50OEFycmF5VG9TdHJpbmcoYmFzZTY0VG9VaW50OEFycmF5KGJhc2U2NFN0cmluZykpOwp9CmZ1bmN0aW9uIHVpbnQ4QXJyYXlUb0hleChhcnJheSkgewogIGFzc2VydFVpbnQ4QXJyYXkoYXJyYXkpOwogIGxldCBoZXhTdHJpbmcgPSAiIjsKICBmb3IgKGxldCBpbmRleDIgPSAwOyBpbmRleDIgPCBhcnJheS5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBoZXhTdHJpbmcgKz0gYnl0ZVRvSGV4TG9va3VwVGFibGVbYXJyYXlbaW5kZXgyXV07CiAgfQogIHJldHVybiBoZXhTdHJpbmc7Cn0KZnVuY3Rpb24gaGV4VG9VaW50OEFycmF5KGhleFN0cmluZykgewogIGFzc2VydFN0cmluZyhoZXhTdHJpbmcpOwogIGlmIChoZXhTdHJpbmcubGVuZ3RoICUgMiAhPT0gMCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIEhleCBzdHJpbmcgbGVuZ3RoLiIpOwogIH0KICBjb25zdCByZXN1bHRMZW5ndGggPSBoZXhTdHJpbmcubGVuZ3RoIC8gMjsKICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KHJlc3VsdExlbmd0aCk7CiAgZm9yIChsZXQgaW5kZXgyID0gMDsgaW5kZXgyIDwgcmVzdWx0TGVuZ3RoOyBpbmRleDIrKykgewogICAgY29uc3QgaGlnaE5pYmJsZSA9IGhleFRvRGVjaW1hbExvb2t1cFRhYmxlW2hleFN0cmluZ1tpbmRleDIgKiAyXV07CiAgICBjb25zdCBsb3dOaWJibGUgPSBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZVtoZXhTdHJpbmdbaW5kZXgyICogMiArIDFdXTsKICAgIGlmIChoaWdoTmliYmxlID09PSB2b2lkIDAgfHwgbG93TmliYmxlID09PSB2b2lkIDApIHsKICAgICAgdGhyb3cgbmV3IEVycm9yKGBJbnZhbGlkIEhleCBjaGFyYWN0ZXIgZW5jb3VudGVyZWQgYXQgcG9zaXRpb24gJHtpbmRleDIgKiAyfWApOwogICAgfQogICAgYnl0ZXNbaW5kZXgyXSA9IGhpZ2hOaWJibGUgPDwgNCB8IGxvd05pYmJsZTsKICB9CiAgcmV0dXJuIGJ5dGVzOwp9CmZ1bmN0aW9uIGdldFVpbnRCRSh2aWV3KSB7CiAgY29uc3QgeyBieXRlTGVuZ3RoIH0gPSB2aWV3OwogIGlmIChieXRlTGVuZ3RoID09PSA2KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50MTYoMCkgKiAyICoqIDMyICsgdmlldy5nZXRVaW50MzIoMik7CiAgfQogIGlmIChieXRlTGVuZ3RoID09PSA1KSB7CiAgICByZXR1cm4gdmlldy5nZXRVaW50OCgwKSAqIDIgKiogMzIgKyB2aWV3LmdldFVpbnQzMigxKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDQpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQzMigwKTsKICB9CiAgaWYgKGJ5dGVMZW5ndGggPT09IDMpIHsKICAgIHJldHVybiB2aWV3LmdldFVpbnQ4KDApICogMiAqKiAxNiArIHZpZXcuZ2V0VWludDE2KDEpOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMikgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDE2KDApOwogIH0KICBpZiAoYnl0ZUxlbmd0aCA9PT0gMSkgewogICAgcmV0dXJuIHZpZXcuZ2V0VWludDgoMCk7CiAgfQp9CmZ1bmN0aW9uIGluZGV4T2YoYXJyYXksIHZhbHVlMikgewogIGNvbnN0IGFycmF5TGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogIGNvbnN0IHZhbHVlTGVuZ3RoID0gdmFsdWUyLmxlbmd0aDsKICBpZiAodmFsdWVMZW5ndGggPT09IDApIHsKICAgIHJldHVybiAtMTsKICB9CiAgaWYgKHZhbHVlTGVuZ3RoID4gYXJyYXlMZW5ndGgpIHsKICAgIHJldHVybiAtMTsKICB9CiAgY29uc3QgdmFsaWRPZmZzZXRMZW5ndGggPSBhcnJheUxlbmd0aCAtIHZhbHVlTGVuZ3RoOwogIGZvciAobGV0IGluZGV4MiA9IDA7IGluZGV4MiA8PSB2YWxpZE9mZnNldExlbmd0aDsgaW5kZXgyKyspIHsKICAgIGxldCBpc01hdGNoMyA9IHRydWU7CiAgICBmb3IgKGxldCBpbmRleDIyID0gMDsgaW5kZXgyMiA8IHZhbHVlTGVuZ3RoOyBpbmRleDIyKyspIHsKICAgICAgaWYgKGFycmF5W2luZGV4MiArIGluZGV4MjJdICE9PSB2YWx1ZTJbaW5kZXgyMl0pIHsKICAgICAgICBpc01hdGNoMyA9IGZhbHNlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoaXNNYXRjaDMpIHsKICAgICAgcmV0dXJuIGluZGV4MjsKICAgIH0KICB9CiAgcmV0dXJuIC0xOwp9CmZ1bmN0aW9uIGluY2x1ZGVzKGFycmF5LCB2YWx1ZTIpIHsKICByZXR1cm4gaW5kZXhPZihhcnJheSwgdmFsdWUyKSAhPT0gLTE7Cn0KdmFyIG9iamVjdFRvU3RyaW5nLCB1aW50OEFycmF5U3RyaW5naWZpZWQsIGFycmF5QnVmZmVyU3RyaW5naWZpZWQsIGNhY2hlZERlY29kZXJzLCBjYWNoZWRFbmNvZGVyLCBNQVhfQkxPQ0tfU0laRSwgYnl0ZVRvSGV4TG9va3VwVGFibGUsIGhleFRvRGVjaW1hbExvb2t1cFRhYmxlOwp2YXIgaW5pdF91aW50OGFycmF5X2V4dHJhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VpbnQ4YXJyYXktZXh0cmFzQDEuNS4wL25vZGVfbW9kdWxlcy91aW50OGFycmF5LWV4dHJhcy9pbmRleC5qcyIoKSB7CiAgICBvYmplY3RUb1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB1aW50OEFycmF5U3RyaW5naWZpZWQgPSAiW29iamVjdCBVaW50OEFycmF5XSI7CiAgICBhcnJheUJ1ZmZlclN0cmluZ2lmaWVkID0gIltvYmplY3QgQXJyYXlCdWZmZXJdIjsKICAgIGNhY2hlZERlY29kZXJzID0gewogICAgICB1dGY4OiBuZXcgZ2xvYmFsVGhpcy5UZXh0RGVjb2RlcigidXRmOCIpCiAgICB9OwogICAgY2FjaGVkRW5jb2RlciA9IG5ldyBnbG9iYWxUaGlzLlRleHRFbmNvZGVyKCk7CiAgICBNQVhfQkxPQ0tfU0laRSA9IDY1NTM1OwogICAgYnl0ZVRvSGV4TG9va3VwVGFibGUgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiAyNTYgfSwgKF80LCBpbmRleDIpID0+IGluZGV4Mi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgIjAiKSk7CiAgICBoZXhUb0RlY2ltYWxMb29rdXBUYWJsZSA9IHsKICAgICAgMDogMCwKICAgICAgMTogMSwKICAgICAgMjogMiwKICAgICAgMzogMywKICAgICAgNDogNCwKICAgICAgNTogNSwKICAgICAgNjogNiwKICAgICAgNzogNywKICAgICAgODogOCwKICAgICAgOTogOSwKICAgICAgYTogMTAsCiAgICAgIGI6IDExLAogICAgICBjOiAxMiwKICAgICAgZDogMTMsCiAgICAgIGU6IDE0LAogICAgICBmOiAxNSwKICAgICAgQTogMTAsCiAgICAgIEI6IDExLAogICAgICBDOiAxMiwKICAgICAgRDogMTMsCiAgICAgIEU6IDE0LAogICAgICBGOiAxNQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRidWZmZXJfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0YnVmZmVyQDMuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGJ1ZmZlci9kaXN0X3RzL3NtYXJ0YnVmZmVyLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF91aW50OGFycmF5X2V4dHJhcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czggPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOCwgewogIGJhc2U2NFRvVWludDhBcnJheTogKCkgPT4gYmFzZTY0VG9VaW50OEFycmF5MiwKICBlbnN1cmVQdXJlVWludDhBcnJheTogKCkgPT4gZW5zdXJlUHVyZVVpbnQ4QXJyYXksCiAgaXNCdWZmZXJMaWtlOiAoKSA9PiBpc0J1ZmZlckxpa2UsCiAgaXNVaW50OEFycmF5OiAoKSA9PiBpc1VpbnQ4QXJyYXkyLAogIHVJbnQ4QXJyYXlFeHRyYXM6ICgpID0+IHVJbnQ4QXJyYXlFeHRyYXMsCiAgdUludDhBcnJheVRvQmFzZTY0OiAoKSA9PiB1SW50OEFycmF5VG9CYXNlNjQKfSk7CmZ1bmN0aW9uIHVJbnQ4QXJyYXlUb0Jhc2U2NCh1SW50OEFycmF5KSB7CiAgcmV0dXJuIHVpbnQ4YXJyYXlfZXh0cmFzX2V4cG9ydHMudWludDhBcnJheVRvQmFzZTY0KHVJbnQ4QXJyYXkpOwp9CmZ1bmN0aW9uIGJhc2U2NFRvVWludDhBcnJheTIoYmFzZTY0MikgewogIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjQyKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2Uob2JqKSB7CiAgaWYgKG9iaiAmJiB0eXBlb2Ygb2JqLmJ5dGVMZW5ndGggPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiICYmIEJ1ZmZlci5pc0J1ZmZlcikgewogICAgcmV0dXJuIEJ1ZmZlci5pc0J1ZmZlcihvYmopOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gZW5zdXJlUHVyZVVpbnQ4QXJyYXkoYnVmZmVyQXJnKSB7CiAgY29uc3QgdWludDhBcnJheSA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlckFyZy5sZW5ndGgpOwogIHVpbnQ4QXJyYXkuc2V0KGJ1ZmZlckFyZyk7CiAgcmV0dXJuIHVpbnQ4QXJyYXk7Cn0KdmFyIHVJbnQ4QXJyYXlFeHRyYXMsIGlzVWludDhBcnJheTI7CnZhciBpbml0X2Rpc3RfdHM4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRidWZmZXJAMy4wLjUvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0YnVmZmVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGJ1ZmZlcl9wbHVnaW5zKCk7CiAgICB1SW50OEFycmF5RXh0cmFzID0gdWludDhhcnJheV9leHRyYXNfZXhwb3J0czsKICAgIGlzVWludDhBcnJheTIgPSAob2JqKSA9PiB7CiAgICAgIHJldHVybiB1aW50OGFycmF5X2V4dHJhc19leHBvcnRzLmlzVWludDhBcnJheShvYmopOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9zbWFydGd1YXJkLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRndWFyZF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL3NtYXJ0Z3VhcmQucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzCnZhciBHdWFyZDsKdmFyIGluaXRfY2xhc3Nlc19ndWFyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkLmpzIigpIHsKICAgIGluaXRfc21hcnRndWFyZF9wbHVnaW5zKCk7CiAgICBHdWFyZCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRGdW5jdGlvbkFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuZ3VhcmRGdW5jdGlvbiA9IGd1YXJkRnVuY3Rpb25Bcmc7CiAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZXhlY3V0ZXMgdGhlIGd1YXJkIGFnYWluc3QgYSBkYXRhIGFyZ3VtZW50OwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZXhlYyhkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5ndWFyZEZ1bmN0aW9uKGRhdGFBcmcpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5leGVjKGRhdGFBcmcpOwogICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZhaWxlZEhpbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMKdmFyIEd1YXJkRXJyb3I7CnZhciBpbml0X2NsYXNzZXNfZ3VhcmRlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0Z3VhcmRAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0Z3VhcmQvZGlzdF90cy9jbGFzc2VzLmd1YXJkZXJyb3IuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIEd1YXJkRXJyb3IgPSBjbGFzcyBleHRlbmRzIEVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIpIHsKICAgICAgICBzdXBlcihtZXNzYWdlMik7CiAgICAgICAgdGhpcy5uYW1lID0gIkd1YXJkRXJyb3IiOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMKdmFyIEd1YXJkU2V0Owp2YXIgaW5pdF9jbGFzc2VzX2d1YXJkc2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRndWFyZEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRndWFyZC9kaXN0X3RzL2NsYXNzZXMuZ3VhcmRzZXQuanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgR3VhcmRTZXQgPSBjbGFzcyBleHRlbmRzIEd1YXJkIHsKICAgICAgY29uc3RydWN0b3IoZ3VhcmRBcnJheSA9IFtdKSB7CiAgICAgICAgc3VwZXIoYXN5bmMgKGRhdGFBcmcpID0+IHsKICAgICAgICAgIHJldHVybiB0aGlzLmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5ndWFyZHMgPSBndWFyZEFycmF5OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBleGVjdXRlcyBhbGwgZ3VhcmRzIGluIGFsbCBndWFyZFNldHMgYWdhaW5zdCBhIGRhdGEgYXJndW1lbnQKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCBvcHRpb25zQXJnID0gewogICAgICAgIG1vZGU6ICJwYXJhbGxlbCIsCiAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgfSkgewogICAgICAgIGNvbnN0IHJlc3VsdFByb21pc2VzID0gW107CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZ3VhcmRSZXN1bHRQcm9taXNlID0gZ3VhcmQuZXhlYyhkYXRhQXJnKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLm1vZGUgPT09ICJzZXJpYWwiKSB7CiAgICAgICAgICAgIGF3YWl0IGd1YXJkUmVzdWx0UHJvbWlzZTsKICAgICAgICAgIH0KICAgICAgICAgIHJlc3VsdFByb21pc2VzLnB1c2goZ3VhcmRSZXN1bHRQcm9taXNlKTsKICAgICAgICAgIGlmIChvcHRpb25zQXJnLnN0b3BPbkZhaWwpIHsKICAgICAgICAgICAgaWYgKCFhd2FpdCBndWFyZFJlc3VsdFByb21pc2UpIHsKICAgICAgICAgICAgICByZXR1cm4gYXdhaXQgUHJvbWlzZS5hbGwocmVzdWx0UHJvbWlzZXMpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCBQcm9taXNlLmFsbChyZXN1bHRQcm9taXNlcyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHM7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGNoZWNrcyBpZiBhbGwgZ3VhcmRzIHBhc3MKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFsbEd1YXJkc1Bhc3MoZGF0YUFyZywgb3B0aW9uc0FyZyA9IHsKICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgIHN0b3BPbkZhaWw6IGZhbHNlCiAgICAgIH0pIHsKICAgICAgICBjb25zdCByZXN1bHRzID0gYXdhaXQgdGhpcy5leGVjQWxsV2l0aERhdGEoZGF0YUFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgcmV0dXJuIHJlc3VsdHMuZXZlcnkoKHJlc3VsdCkgPT4gcmVzdWx0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIGlmIGFueSBndWFyZCBwYXNzZXMKICAgICAgICogQHBhcmFtIGRhdGFBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFueUd1YXJkc1Bhc3MoZGF0YUFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdHMgPSBhd2FpdCB0aGlzLmV4ZWNBbGxXaXRoRGF0YShkYXRhQXJnLCB7CiAgICAgICAgICBtb2RlOiAicGFyYWxsZWwiLAogICAgICAgICAgc3RvcE9uRmFpbDogZmFsc2UKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0cy5zb21lKChyZXN1bHQpID0+IHJlc3VsdCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJldHVybnMgdGhlIGZpcnN0IHJlYXNvbiBmb3Igd2h5IHNvbWV0aGluZyBmYWlscwogICAgICAgKiBAcGFyYW0gZGF0YUFyZwogICAgICAgKiBAcmV0dXJucwogICAgICAgKi8KICAgICAgZ2V0RmFpbGVkSGludChkYXRhQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBndWFyZCBvZiB0aGlzLmd1YXJkcykgewogICAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGd1YXJkLmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgICBpZiAoZmFpbGVkSGludCkgewogICAgICAgICAgICByZXR1cm4gZmFpbGVkSGludDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czkgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzOSwgewogIEd1YXJkOiAoKSA9PiBHdWFyZCwKICBHdWFyZEVycm9yOiAoKSA9PiBHdWFyZEVycm9yLAogIEd1YXJkU2V0OiAoKSA9PiBHdWFyZFNldCwKICBwYXNzR3VhcmRzT3JSZWplY3Q6ICgpID0+IHBhc3NHdWFyZHNPclJlamVjdAp9KTsKdmFyIHBhc3NHdWFyZHNPclJlamVjdDsKdmFyIGluaXRfZGlzdF90czkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGd1YXJkQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGd1YXJkL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGd1YXJkX3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZCgpOwogICAgaW5pdF9jbGFzc2VzX2d1YXJkc2V0KCk7CiAgICBpbml0X2NsYXNzZXNfZ3VhcmRzZXQoKTsKICAgIGluaXRfY2xhc3Nlc19ndWFyZGVycm9yKCk7CiAgICBwYXNzR3VhcmRzT3JSZWplY3QgPSBhc3luYyAoZGF0YUFyZywgZ3VhcmRzKSA9PiB7CiAgICAgIGNvbnN0IGd1YXJkU2V0ID0gbmV3IEd1YXJkU2V0KGd1YXJkcyk7CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGd1YXJkU2V0LmFsbEd1YXJkc1Bhc3MoZGF0YUFyZyk7CiAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgY29uc3QgZmFpbGVkSGludCA9IGF3YWl0IGd1YXJkU2V0LmdldEZhaWxlZEhpbnQoZGF0YUFyZyk7CiAgICAgICAgdGhyb3cgbmV3IEd1YXJkRXJyb3IoYEd1YXJkcyBmYWlsZWQ6CiR7ZmFpbGVkSGludH0KICAgIGApOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvc21hcnRlbnYucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydGVudl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGVudkA1LjAuMTMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0ZW52L2Rpc3RfdHMvaW50ZXJmYWNlcy9pbmRleC5qcwp2YXIgaW5pdF9pbnRlcmZhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMKdmFyIFNtYXJ0ZW52Owp2YXIgaW5pdF9zbWFydGVudl9jbGFzc2VzX3NtYXJ0ZW52ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL3NtYXJ0ZW52LmNsYXNzZXMuc21hcnRlbnYuanMiKCkgewogICAgaW5pdF9zbWFydGVudl9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMoKTsKICAgIFNtYXJ0ZW52ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvYWRlZFNjcmlwdHMgPSBbXTsKICAgICAgfQogICAgICBhc3luYyBnZXRFbnZBd2FyZU1vZHVsZShvcHRpb25zQXJnKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVOb2RlTW9kdWxlKG9wdGlvbnNBcmcubm9kZU1vZHVsZU5hbWUpOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgaWYgKHRoaXMuaXNCcm93c2VyKSB7CiAgICAgICAgICBjb25zdCBtb2R1bGVSZXN1bHQgPSBhd2FpdCB0aGlzLmdldFNhZmVXZWJNb2R1bGUob3B0aW9uc0FyZy53ZWJVcmxBcmcsIG9wdGlvbnNBcmcuZ2V0RnVuY3Rpb24pOwogICAgICAgICAgcmV0dXJuIG1vZHVsZVJlc3VsdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc29sZS5lcnJvcigicGxhdGZvcm0gZm9yIGxvYWRpbmcgbm90IHN1cHBvcnRlZCBieSBzbWFydGVudiIpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBnZXRTYWZlTm9kZU1vZHVsZShtb2R1bGVOYW1lQXJnLCBydW5BZnRlckZ1bmMpIHsKICAgICAgICBpZiAoIXRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBZb3UgdHJpZWQgdG8gbG9hZCBhIG5vZGUgbW9kdWxlIGluIGEgd3JvbmcgY29udGV4dDogJHttb2R1bGVOYW1lQXJnfS4gVGhpcyBkb2VzIG5vdCB0aHJvdy5gKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuVmFsdWUgPSBhd2FpdCBuZXcgRnVuY3Rpb24oYHJldHVybiBpbXBvcnQoJyR7bW9kdWxlTmFtZUFyZ30nKWApKCk7CiAgICAgICAgaWYgKHJ1bkFmdGVyRnVuYykgewogICAgICAgICAgYXdhaXQgcnVuQWZ0ZXJGdW5jKHJldHVyblZhbHVlKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJldHVyblZhbHVlOwogICAgICB9CiAgICAgIGFzeW5jIGdldFNhZmVXZWJNb2R1bGUodXJsQXJnLCBnZXRGdW5jdGlvbkFyZykgewogICAgICAgIGlmICghdGhpcy5pc0Jyb3dzZXIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIllvdSB0cmllZCB0byBsb2FkIGEgd2ViIG1vZHVsZSBpbiBhIHdyb25nIGNvbnRleHQiKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMubG9hZGVkU2NyaXB0cy5pbmNsdWRlcyh1cmxBcmcpKSB7CiAgICAgICAgICByZXR1cm4gZ2V0RnVuY3Rpb25BcmcoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5sb2FkZWRTY3JpcHRzLnB1c2godXJsQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGlmIChnbG9iYWxUaGlzLmltcG9ydFNjcmlwdHMpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuaW1wb3J0U2NyaXB0cyh1cmxBcmcpOwogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHNjcmlwdCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgICAgc2NyaXB0Lm9ubG9hZCA9ICgpID0+IHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgICB9OwogICAgICAgICAgc2NyaXB0LnNyYyA9IHVybEFyZzsKICAgICAgICAgIGRvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQoc2NyaXB0KTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHJldHVybiBnZXRGdW5jdGlvbkFyZygpOwogICAgICB9CiAgICAgIGdldCBydW50aW1lRW52KCkgewogICAgICAgIGlmICh0eXBlb2YgcHJvY2VzcyAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiAibm9kZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiYnJvd3NlciI7CiAgICAgICAgfQogICAgICB9CiAgICAgIGdldCBpc0Jyb3dzZXIoKSB7CiAgICAgICAgcmV0dXJuICF0aGlzLmlzTm9kZTsKICAgICAgfQogICAgICBnZXQgdXNlckFnZW50KCkgewogICAgICAgIGlmICh0aGlzLmlzQnJvd3NlcikgewogICAgICAgICAgcmV0dXJuIG5hdmlnYXRvci51c2VyQWdlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAidW5kZWZpbmVkIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0IGlzTm9kZSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5ydW50aW1lRW52ID09PSAibm9kZSI7CiAgICAgIH0KICAgICAgZ2V0IG5vZGVWZXJzaW9uKCkgewogICAgICAgIHJldHVybiBwcm9jZXNzLnZlcnNpb247CiAgICAgIH0KICAgICAgZ2V0IGlzQ0koKSB7CiAgICAgICAgaWYgKHRoaXMuaXNOb2RlKSB7CiAgICAgICAgICBpZiAocHJvY2Vzcy5lbnYuQ0kpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgaXNNYWNBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAiZGFyd2luIjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBpc1dpbmRvd3NBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAid2luMzIiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGFzeW5jIGlzTGludXhBc3luYygpIHsKICAgICAgICBpZiAodGhpcy5pc05vZGUpIHsKICAgICAgICAgIGNvbnN0IG9zID0gYXdhaXQgdGhpcy5nZXRTYWZlTm9kZU1vZHVsZSgib3MiKTsKICAgICAgICAgIHJldHVybiBvcy5wbGF0Zm9ybSgpID09PSAibGludXgiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwcmludHMgdGhlIGVudmlyb25tZW50IHRvIGNvbnNvbGUKICAgICAgICovCiAgICAgIGFzeW5jIHByaW50RW52KCkgewogICAgICAgIGlmICh0aGlzLmlzTm9kZSkgewogICAgICAgICAgY29uc29sZS5sb2coInJ1bm5pbmcgb24gTk9ERSIpOwogICAgICAgICAgY29uc29sZS5sb2coIm5vZGUgdmVyc2lvbiBpcyAiICsgdGhpcy5ub2RlVmVyc2lvbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJydW5uaW5nIG9uIEJST1dTRVIiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJicm93c2VyIGlzICIgKyB0aGlzLnVzZXJBZ2VudCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMCwgewogIFNtYXJ0ZW52OiAoKSA9PiBTbWFydGVudgp9KTsKdmFyIGluaXRfZGlzdF90czEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRlbnZANS4wLjEzL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGVudi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRlbnZfY2xhc3Nlc19zbWFydGVudigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcwp2YXIgaXNvdW5pcXVlOwp2YXIgaW5pdF9zbWFydHN0cmluZ19wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcucGx1Z2lucy5qcyIoKSB7CiAgICBpc291bmlxdWUgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcwp2YXIgc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsIHsKICBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZywKICBjcmVhdGVSYW5kb21TdHJpbmc6ICgpID0+IGNyZWF0ZVJhbmRvbVN0cmluZwp9KTsKdmFyIGdldFJhbmRvbUludCwgY3VzdG9tUmFuZG9tYXRpYywgY3JlYXRlUmFuZG9tU3RyaW5nLCBjcmVhdGVDcnlwdG9SYW5kb21TdHJpbmc7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmNyZWF0ZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGdldFJhbmRvbUludCA9IChtaW4zLCBtYXgzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgZ2xvYmFsVGhpcyAhPT0gInVuZGVmaW5lZCIgJiYgZ2xvYmFsVGhpcy5jcnlwdG8gJiYgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjM7CiAgICAgICAgY29uc3QgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoMSk7CiAgICAgICAgZ2xvYmFsVGhpcy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGFycmF5KTsKICAgICAgICByZXR1cm4gbWluMyArIGFycmF5WzBdICUgcmFuZ2UyOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAobWF4MyAtIG1pbjMpKSArIG1pbjM7CiAgICAgIH0KICAgIH07CiAgICBjdXN0b21SYW5kb21hdGljID0gKHBhdHRlcm4sIGxlbmd0aCwgb3B0aW9ucykgPT4gewogICAgICBjb25zdCBjaGFyU2V0cyA9IHsKICAgICAgICAiQSI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWiIsCiAgICAgICAgImEiOiAiYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLAogICAgICAgICIwIjogIjAxMjM0NTY3ODkiLAogICAgICAgICIhIjogIiFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IiwKICAgICAgICAiKiI6ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSFAIyQlXiYqKClfKy09W117fXw7OiwuPD4/IgogICAgICB9OwogICAgICBsZXQgYWN0dWFsUGF0dGVybiA9IHBhdHRlcm47CiAgICAgIGlmIChsZW5ndGggJiYgbGVuZ3RoID4gcGF0dGVybi5sZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5yZXBlYXQoTWF0aC5jZWlsKGxlbmd0aCAvIHBhdHRlcm4ubGVuZ3RoKSkuc2xpY2UoMCwgbGVuZ3RoKTsKICAgICAgfSBlbHNlIGlmIChsZW5ndGgpIHsKICAgICAgICBhY3R1YWxQYXR0ZXJuID0gcGF0dGVybi5zbGljZSgwLCBsZW5ndGgpOwogICAgICB9CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgZm9yIChjb25zdCBjaGFyIG9mIGFjdHVhbFBhdHRlcm4pIHsKICAgICAgICBpZiAoY2hhclNldHNbY2hhcl0pIHsKICAgICAgICAgIGNvbnN0IGNoYXJTZXQgPSBjaGFyU2V0c1tjaGFyXTsKICAgICAgICAgIGNvbnN0IHJhbmRvbUluZGV4ID0gZ2V0UmFuZG9tSW50KDAsIGNoYXJTZXQubGVuZ3RoKTsKICAgICAgICAgIHJlc3VsdCArPSBjaGFyU2V0W3JhbmRvbUluZGV4XTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ICs9IGNoYXI7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgY3JlYXRlUmFuZG9tU3RyaW5nID0gKHBhdHRlcm5BcmcsIGxlbmd0aEFyZywgb3B0aW9uc0FyZykgPT4gewogICAgICByZXR1cm4gY3VzdG9tUmFuZG9tYXRpYyhwYXR0ZXJuQXJnLCBsZW5ndGhBcmcsIG9wdGlvbnNBcmcpOwogICAgfTsKICAgIGNyZWF0ZUNyeXB0b1JhbmRvbVN0cmluZyA9ICgpID0+IHsKICAgICAgcmV0dXJuIGlzb3VuaXF1ZS51bmkoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5kb2NrZXIuanMKdmFyIHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2RvY2tlcl9leHBvcnRzLCB7CiAgbWFrZUVudk9iamVjdDogKCkgPT4gbWFrZUVudk9iamVjdAp9KTsKdmFyIG1ha2VFbnZPYmplY3Q7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvY2tlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvY2tlci5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIG1ha2VFbnZPYmplY3QgPSBmdW5jdGlvbihlbnZBcnJheUFyZykgewogICAgICBsZXQgcmV0dXJuT2JqZWN0ID0ge307CiAgICAgIGxldCByZWdleFN0cmluZyA9IC8oLiopPSguKikvOwogICAgICBpZiAodHlwZW9mIGVudkFycmF5QXJnICE9PSAidW5kZWZpbmVkIikgewogICAgICAgIGZvciAobGV0IGVudktleSBpbiBlbnZBcnJheUFyZykgewogICAgICAgICAgbGV0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoZW52QXJyYXlBcmdbZW52S2V5XSk7CiAgICAgICAgICByZXR1cm5PYmplY3RbcmVnZXhNYXRjaGVzWzFdXSA9IHJlZ2V4TWF0Y2hlc1syXTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVybk9iamVjdDsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5pbmRlbnQuanMKdmFyIHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLCB7CiAgaW5kZW50OiAoKSA9PiBpbmRlbnQsCiAgaW5kZW50V2l0aFByZWZpeDogKCkgPT4gaW5kZW50V2l0aFByZWZpeCwKICBub3JtYWxpemU6ICgpID0+IG5vcm1hbGl6ZQp9KTsKdmFyIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWssIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcywgY2xlYW5TdHJpbmdBcnJheSwgaW5kZW50LCBpbmRlbnRXaXRoUHJlZml4LCBub3JtYWxpemU7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmluZGVudC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRBcnJheSA9IHN0cmluZ0FyZy5zcGxpdCgiXG4iKTsKICAgICAgcmV0dXJuIGNsZWFuU3RyaW5nQXJyYXkocmVzdWx0QXJyYXkpOwogICAgfTsKICAgIGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyA9IChzdHJpbmdBcnJheUFyZykgPT4gewogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gIiI7CiAgICAgIGZvciAobGV0IGxpbmUgb2Ygc3RyaW5nQXJyYXlBcmcpIHsKICAgICAgICByZXN1bHRTdHJpbmcgPSByZXN1bHRTdHJpbmcgKyBsaW5lICsgIlxuIjsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGNsZWFuU3RyaW5nQXJyYXkgPSAoc3RyaW5nQXJyYXlBcmcpID0+IHsKICAgICAgbGV0IHRlc3RSZWdleCA9IC9eW1xzXSokLzsKICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnWzBdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnNoaWZ0KCk7CiAgICAgIH0KICAgICAgaWYgKHRlc3RSZWdleC50ZXN0KHN0cmluZ0FycmF5QXJnW3N0cmluZ0FycmF5QXJnLmxlbmd0aCAtIDFdKSkgewogICAgICAgIHN0cmluZ0FycmF5QXJnLnBvcCgpOwogICAgICB9CiAgICAgIHJldHVybiBzdHJpbmdBcnJheUFyZzsKICAgIH07CiAgICBpbmRlbnQgPSAoc3RyaW5nQXJnLCBzcGFjZUFtb3VudCkgPT4gewogICAgICBsZXQgbG9jYWxTdHJpbmdBcnJheSA9IHNwbGl0U3RyaW5nQXRMaW5lQnJlYWsoc3RyaW5nQXJnKTsKICAgICAgZm9yIChsZXQgc3RyaW5nQXJnMiBvZiBsb2NhbFN0cmluZ0FycmF5KSB7CiAgICAgICAgc3RyaW5nQXJnMiA9ICIgIi5yZXBlYXQoc3BhY2VBbW91bnQpICsgc3RyaW5nQXJnMjsKICAgICAgfQogICAgICBsZXQgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKGxvY2FsU3RyaW5nQXJyYXkpOwogICAgICByZXR1cm4gcmVzdWx0U3RyaW5nOwogICAgfTsKICAgIGluZGVudFdpdGhQcmVmaXggPSAoc3RyaW5nQXJnLCBwcmVmaXhBcmcpID0+IHsKICAgICAgbGV0IHJlc3VsdFN0cmluZzsKICAgICAgbGV0IHN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheSkgewogICAgICAgIHJlc3VsdEFycmF5LnB1c2gocHJlZml4QXJnICsgc3RyaW5nSXRlbSk7CiAgICAgIH0KICAgICAgcmVzdWx0U3RyaW5nID0gam9pblN0cmluZ1dpdGhMaW5lQnJlYWtzKHJlc3VsdEFycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgICBub3JtYWxpemUgPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGxldCByZXN1bHRTdHJpbmc7CiAgICAgIGxldCBzcGxpdFN0cmluZ0FycmF5ID0gc3BsaXRTdHJpbmdBdExpbmVCcmVhayhzdHJpbmdBcmcpOwogICAgICBsZXQgbWluQ29tbW9uTGVmdE9mZnNldDsKICAgICAgY29uc3QgZGVJbmRlbnRSZWdleCA9IC9eKFxzKikvOwogICAgICBjb25zdCBlbXB0eUxpbmVSZWdleCA9IC9eKFxzKikkLzsKICAgICAgZm9yIChsZXQgc3RyaW5nSXRlbSBvZiBzcGxpdFN0cmluZ0FycmF5KSB7CiAgICAgICAgbGV0IG9mZnNldFN0cmluZyA9IGRlSW5kZW50UmVnZXguZXhlYyhzdHJpbmdJdGVtKVsxXTsKICAgICAgICBpZiAoKHR5cGVvZiBtaW5Db21tb25MZWZ0T2Zmc2V0ID09PSAidW5kZWZpbmVkIiB8fCBvZmZzZXRTdHJpbmcubGVuZ3RoIDwgbWluQ29tbW9uTGVmdE9mZnNldCkgJiYgIWVtcHR5TGluZVJlZ2V4LnRlc3Qoc3RyaW5nSXRlbSkpIHsKICAgICAgICAgIG1pbkNvbW1vbkxlZnRPZmZzZXQgPSBvZmZzZXRTdHJpbmcubGVuZ3RoOwogICAgICAgIH0KICAgICAgfQogICAgICBsZXQgcmVzdWx0U3BsaXRTdHJpbmdBcnJheSA9IFtdOwogICAgICBmb3IgKGxldCBzdHJpbmdJdGVtIG9mIHNwbGl0U3RyaW5nQXJyYXkpIHsKICAgICAgICByZXN1bHRTcGxpdFN0cmluZ0FycmF5LnB1c2goc3RyaW5nSXRlbS5zdWJzdHIobWluQ29tbW9uTGVmdE9mZnNldCkpOwogICAgICB9CiAgICAgIHJlc3VsdFN0cmluZyA9IGpvaW5TdHJpbmdXaXRoTGluZUJyZWFrcyhyZXN1bHRTcGxpdFN0cmluZ0FycmF5KTsKICAgICAgcmV0dXJuIHJlc3VsdFN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9zbWFydHN0cmluZy5ub3JtYWxpemUuanMKdmFyIHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzID0ge307Cl9fZXhwb3J0KHNtYXJ0c3RyaW5nX25vcm1hbGl6ZV9leHBvcnRzLCB7CiAgcmVwbGFjZUFsbDogKCkgPT4gcmVwbGFjZUFsbCwKICBzdGFuZGFyZDogKCkgPT4gc3RhbmRhcmQKfSk7CnZhciByZXBsYWNlQWxsLCBzdHJpcEluZGVudCwgc3RhbmRhcmQ7CnZhciBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5qcyIoKSB7CiAgICByZXBsYWNlQWxsID0gKHN0cmluZ0FyZywgc2VhcmNoUGF0dGVybiwgcmVwbGFjZW1lbnRTdHJpbmcpID0+IHsKICAgICAgcmV0dXJuIHN0cmluZ0FyZy5yZXBsYWNlKG5ldyBSZWdFeHAoc2VhcmNoUGF0dGVybiwgImciKSwgcmVwbGFjZW1lbnRTdHJpbmcpOwogICAgfTsKICAgIHN0cmlwSW5kZW50ID0gKHN0cikgPT4gewogICAgICBjb25zdCBsaW5lcyA9IHN0ci5zcGxpdCgiXG4iKTsKICAgICAgbGV0IG1pbkluZGVudCA9IEluZmluaXR5OwogICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICBpZiAobGluZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgY29uc3QgbWF0Y2gyID0gbGluZS5tYXRjaCgvXihccyopLyk7CiAgICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICAgIG1pbkluZGVudCA9IE1hdGgubWluKG1pbkluZGVudCwgbWF0Y2gyWzFdLmxlbmd0aCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChtaW5JbmRlbnQgPT09IEluZmluaXR5IHx8IG1pbkluZGVudCA9PT0gMCkgewogICAgICAgIHJldHVybiBzdHI7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVzLm1hcCgobGluZSkgPT4gewogICAgICAgIGlmIChsaW5lLmxlbmd0aCA+PSBtaW5JbmRlbnQpIHsKICAgICAgICAgIHJldHVybiBsaW5lLnNsaWNlKG1pbkluZGVudCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaW5lOwogICAgICB9KS5qb2luKCJcbiIpOwogICAgfTsKICAgIHN0YW5kYXJkID0gKHN0cmluZ0FyZywgb3B0aW9ucykgPT4gewogICAgICBsZXQgcmVzdWx0ID0gc3RyaW5nQXJnOwogICAgICBpZiAoIW9wdGlvbnMgfHwgb3B0aW9ucy5zdHJpcEluZGVudCkgewogICAgICAgIHJlc3VsdCA9IHN0cmlwSW5kZW50KHJlc3VsdCk7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMubm9ybWFsaXplTmV3bGluZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5yZXBsYWNlKC9cclxuL2csICJcbiIpOwogICAgICB9CiAgICAgIGlmICghb3B0aW9ucyB8fCBvcHRpb25zLnJlcGxhY2VUYWJzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZUFsbChyZXN1bHQsICIJLyIsICIgIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBMZWFkaW5nVHJhaWxpbmdFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKS5yZXBsYWNlKC9ccypbXHJcbl0kL2dtLCAiIik7CiAgICAgIH0KICAgICAgaWYgKCFvcHRpb25zIHx8IG9wdGlvbnMuc3RyaXBBbGxFbXB0eUxpbmVzKSB7CiAgICAgICAgcmVzdWx0ID0gcmVzdWx0LnJlcGxhY2UoL15ccypbXHJcbl0vZ20sICIiKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmJhc2U2NC5qcwp2YXIgdW5pdmVyc2FsQmFzZTY0LCBCYXNlNjQsIGJhc2U2NDsKdmFyIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuYmFzZTY0LmpzIigpIHsKICAgIHVuaXZlcnNhbEJhc2U2NCA9IHsKICAgICAgZW5jb2RlOiAoc3RyKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiBCdWZmZXIgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICByZXR1cm4gQnVmZmVyLmZyb20oc3RyLCAidXRmOCIpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBidG9hICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgY29uc3QgdXRmOEJ5dGVzID0gbmV3IFRleHRFbmNvZGVyKCkuZW5jb2RlKHN0cik7CiAgICAgICAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBBcnJheS5mcm9tKHV0ZjhCeXRlcywgKGJ5dGUpID0+IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZSkpLmpvaW4oIiIpOwogICAgICAgICAgcmV0dXJuIGJ0b2EoYmluYXJ5U3RyaW5nKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgY2hhcnMgPSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyI7CiAgICAgICAgICBjb25zdCBieXRlcyA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShzdHIpOwogICAgICAgICAgbGV0IHJlc3VsdCA9ICIiOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGE1ID0gYnl0ZXNbaTExKytdOwogICAgICAgICAgICBjb25zdCBiNSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGMxMSA9IGkxMSA8IGJ5dGVzLmxlbmd0aCA/IGJ5dGVzW2kxMSsrXSA6IDA7CiAgICAgICAgICAgIGNvbnN0IGJpdG1hcCA9IGE1IDw8IDE2IHwgYjUgPDwgOCB8IGMxMTsKICAgICAgICAgICAgcmVzdWx0ICs9IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gMTggJiA2Myk7CiAgICAgICAgICAgIHJlc3VsdCArPSBjaGFycy5jaGFyQXQoYml0bWFwID4+IDEyICYgNjMpOwogICAgICAgICAgICByZXN1bHQgKz0gaTExIC0gMiA8IGJ5dGVzLmxlbmd0aCA/IGNoYXJzLmNoYXJBdChiaXRtYXAgPj4gNiAmIDYzKSA6ICI9IjsKICAgICAgICAgICAgcmVzdWx0ICs9IGkxMSAtIDEgPCBieXRlcy5sZW5ndGggPyBjaGFycy5jaGFyQXQoYml0bWFwICYgNjMpIDogIj0iOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlY29kZTogKHN0cikgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NFN0cmluZyA9IHN0ci5yZXBsYWNlKC8tL2csICIrIikucmVwbGFjZSgvXy9nLCAiLyIpLnBhZEVuZChzdHIubGVuZ3RoICsgKDQgLSBzdHIubGVuZ3RoICUgNCkgJSA0LCAiPSIpOwogICAgICAgIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgICAgICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGJhc2U2NFN0cmluZywgImJhc2U2NCIpLnRvU3RyaW5nKCJ1dGY4Iik7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYXRvYiAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYmFzZTY0U3RyaW5nKTsKICAgICAgICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7CiAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBieXRlc1tpMTFdID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoYnl0ZXMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjaGFycyA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvIjsKICAgICAgICAgIGxldCBieXRlcyA9IFtdOwogICAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgICB3aGlsZSAoaTExIDwgYmFzZTY0U3RyaW5nLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBlbmNvZGVkMSA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMiA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkMyA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBlbmNvZGVkNCA9IGNoYXJzLmluZGV4T2YoYmFzZTY0U3RyaW5nLmNoYXJBdChpMTErKykpOwogICAgICAgICAgICBjb25zdCBiaXRtYXAgPSBlbmNvZGVkMSA8PCAxOCB8IGVuY29kZWQyIDw8IDEyIHwgZW5jb2RlZDMgPDwgNiB8IGVuY29kZWQ0OwogICAgICAgICAgICBieXRlcy5wdXNoKGJpdG1hcCA+PiAxNiAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkMyAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgPj4gOCAmIDI1NSk7CiAgICAgICAgICAgIGlmIChlbmNvZGVkNCAhPT0gNjQpCiAgICAgICAgICAgICAgYnl0ZXMucHVzaChiaXRtYXAgJiAyNTUpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG5ldyBUZXh0RGVjb2RlcigpLmRlY29kZShuZXcgVWludDhBcnJheShieXRlcykpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIEJhc2U2NCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoaW5wdXRTdHJpbmdBcmcsIHR5cGVBcmcpIHsKICAgICAgICBzd2l0Y2ggKHR5cGVBcmcpIHsKICAgICAgICAgIGNhc2UgInN0cmluZyI6CiAgICAgICAgICAgIHRoaXMucmVmU3RyaW5nID0gaW5wdXRTdHJpbmdBcmc7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYmFzZTY0IjoKICAgICAgICAgICAgdGhpcy5yZWZTdHJpbmcgPSBiYXNlNjQuZGVjb2RlKGlucHV0U3RyaW5nQXJnKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJiYXNlNjR1cmkiOgogICAgICAgICAgICB0aGlzLnJlZlN0cmluZyA9IGJhc2U2NC5kZWNvZGUoaW5wdXRTdHJpbmdBcmcpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIHNpbXBsZSBzdHJpbmcgKHVuZW5jb2RlZCkKICAgICAgICovCiAgICAgIGdldCBzaW1wbGVTdHJpbmcoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVmU3RyaW5nOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0aGUgYmFzZTY0IGVuY29kZWQgdmVyc2lvbiBvZiB0aGUgb3JpZ2luYWwgc3RyaW5nCiAgICAgICAqLwogICAgICBnZXQgYmFzZTY0U3RyaW5nKCkgewogICAgICAgIHJldHVybiBiYXNlNjQuZW5jb2RlKHRoaXMucmVmU3RyaW5nKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogdGhlIGJhc2U2NHVyaSBlbmNvZGVkIHZlcnNpb24gb2YgdGhlIG9yaWdpbmFsIHN0cmluZwogICAgICAgKi8KICAgICAgZ2V0IGJhc2U2NFVyaVN0cmluZygpIHsKICAgICAgICByZXR1cm4gYmFzZTY0LmVuY29kZVVyaSh0aGlzLnJlZlN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgICBiYXNlNjQgPSB7CiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIHRoZSBzdHJpbmcKICAgICAgICovCiAgICAgIGVuY29kZTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBlbmNvZGVzIGEgc3RyaW5nQXJnIHRvIGJhc2U2NCB1cmkgc3R5bGUKICAgICAgICovCiAgICAgIGVuY29kZVVyaTogKHN0cmluZ0FyZykgPT4gewogICAgICAgIHJldHVybiB1bml2ZXJzYWxCYXNlNjQuZW5jb2RlKHN0cmluZ0FyZykucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0vZywgIiIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogZGVjb2RlcyBhIGJhc2U2NCBlbmNvZGVkIHN0cmluZwogICAgICAgKi8KICAgICAgZGVjb2RlOiAoc3RyaW5nQXJnKSA9PiB7CiAgICAgICAgcmV0dXJuIHVuaXZlcnNhbEJhc2U2NC5kZWNvZGUoc3RyaW5nQXJnKTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzdHJpbmdBcmcKICAgICAgICogY2hlY2tzIHdldGhlciB0aGUgc3RyaW5nIGlzIGJhc2U2NCBlbmNvZGVkCiAgICAgICAqLwogICAgICBpc0Jhc2U2NDogKHN0cmluZ0FyZykgPT4gewogICAgICAgIGNvbnN0IHJlZ2V4ID0gL14oW0EtWmEtejAtOSsvXXs0fSkqKFtBLVphLXowLTkrL117M309fFtBLVphLXowLTkrL117Mn09PSk/JC87CiAgICAgICAgcmV0dXJuIHJlZ2V4LnRlc3Qoc3RyaW5nQXJnKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLnR5cGUuanMKdmFyIHNtYXJ0c3RyaW5nX3R5cGVfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChzbWFydHN0cmluZ190eXBlX2V4cG9ydHMsIHsKICBpc0Jhc2U2NDogKCkgPT4gaXNCYXNlNjQsCiAgaXNVdGY4OiAoKSA9PiBpc1V0ZjgKfSk7CnZhciBpc1V0ZjgsIGlzQmFzZTY0Owp2YXIgaW5pdF9zbWFydHN0cmluZ190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcudHlwZS5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfYmFzZTY0KCk7CiAgICBpc1V0ZjggPSAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGVuY29kZXIyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICAgIGNvbnN0IGJ5dGVzID0gZW5jb2RlcjIuZW5jb2RlKHN0cmluZ0FyZyk7CiAgICAgIGxldCBpMTEgPSAwOwogICAgICB3aGlsZSAoaTExIDwgYnl0ZXMubGVuZ3RoKSB7CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gQVNDSUkKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDkgfHwgYnl0ZXNbaTExXSA9PT0gMTAgfHwgYnl0ZXNbaTExXSA9PT0gMTMgfHwgMzIgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDEyNgogICAgICAgICkgewogICAgICAgICAgaTExICs9IDE7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gbm9uLW92ZXJsb25nIDItYnl0ZQogICAgICAgICAgMTk0IDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyMjMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDI7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKAogICAgICAgICAgLy8gZXhjbHVkaW5nIG92ZXJsb25ncwogICAgICAgICAgYnl0ZXNbaTExXSA9PT0gMjI0ICYmIDE2MCA8PSBieXRlc1tpMTEgKyAxXSAmJiBieXRlc1tpMTEgKyAxXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDJdICYmIGJ5dGVzW2kxMSArIDJdIDw9IDE5MSB8fCAvLyBzdHJhaWdodCAzLWJ5dGUKICAgICAgICAgICgyMjUgPD0gYnl0ZXNbaTExXSAmJiBieXRlc1tpMTFdIDw9IDIzNiB8fCBieXRlc1tpMTFdID09PSAyMzggfHwgYnl0ZXNbaTExXSA9PT0gMjM5KSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgfHwgLy8gZXhjbHVkaW5nIHN1cnJvZ2F0ZXMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDIzNyAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTU5ICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEKICAgICAgICApIHsKICAgICAgICAgIGkxMSArPSAzOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICgKICAgICAgICAgIC8vIHBsYW5lcyAxLTMKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0MCAmJiAxNDQgPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MSB8fCAvLyBwbGFuZXMgNC0xNQogICAgICAgICAgMjQxIDw9IGJ5dGVzW2kxMV0gJiYgYnl0ZXNbaTExXSA8PSAyNDMgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDFdICYmIGJ5dGVzW2kxMSArIDFdIDw9IDE5MSAmJiAxMjggPD0gYnl0ZXNbaTExICsgMl0gJiYgYnl0ZXNbaTExICsgMl0gPD0gMTkxICYmIDEyOCA8PSBieXRlc1tpMTEgKyAzXSAmJiBieXRlc1tpMTEgKyAzXSA8PSAxOTEgfHwgLy8gcGxhbmUgMTYKICAgICAgICAgIGJ5dGVzW2kxMV0gPT09IDI0NCAmJiAxMjggPD0gYnl0ZXNbaTExICsgMV0gJiYgYnl0ZXNbaTExICsgMV0gPD0gMTQzICYmIDEyOCA8PSBieXRlc1tpMTEgKyAyXSAmJiBieXRlc1tpMTEgKyAyXSA8PSAxOTEgJiYgMTI4IDw9IGJ5dGVzW2kxMSArIDNdICYmIGJ5dGVzW2kxMSArIDNdIDw9IDE5MQogICAgICAgICkgewogICAgICAgICAgaTExICs9IDQ7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfTsKICAgIGlzQmFzZTY0ID0gKHN0cmluZ0FyZykgPT4gewogICAgICBjb25zdCBub3RCYXNlNjQgPSAvW15BLVowLTkrXC89XS9pOwogICAgICBjb25zdCBsZW4gPSBzdHJpbmdBcmcubGVuZ3RoOwogICAgICBpZiAoIWxlbiB8fCBsZW4gJSA0ICE9PSAwIHx8IG5vdEJhc2U2NC50ZXN0KHN0cmluZ0FyZykpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgY29uc3QgZmlyc3RQYWRkaW5nQ2hhciA9IHN0cmluZ0FyZy5pbmRleE9mKCI9Iik7CiAgICAgIHJldHVybiBmaXJzdFBhZGRpbmdDaGFyID09PSAtMSB8fCBmaXJzdFBhZGRpbmdDaGFyID09PSBsZW4gLSAxIHx8IGZpcnN0UGFkZGluZ0NoYXIgPT09IGxlbiAtIDIgJiYgc3RyaW5nQXJnW2xlbiAtIDFdID09PSAiPSI7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdHJpbmdANC4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RyaW5nL2Rpc3RfdHMvc21hcnRzdHJpbmcuZG9tYWluLmpzCnZhciBEb21haW47CnZhciBpbml0X3NtYXJ0c3RyaW5nX2RvbWFpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmRvbWFpbi5qcyIoKSB7CiAgICBEb21haW4gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGRvbWFpblN0cmluZ0FyZykgewogICAgICAgIHRoaXMucHJvdG9jb2wgPSB0aGlzLl9wcm90b2NvbFJlZ2V4KGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgaWYgKCF0aGlzLnByb3RvY29sKSB7CiAgICAgICAgICBkb21haW5TdHJpbmdBcmcgPSBgaHR0cHM6Ly8ke2RvbWFpblN0cmluZ0FyZ31gOwogICAgICAgIH0KICAgICAgICB0aGlzLm5vZGVQYXJzZWRVcmwgPSBuZXcgVVJMKGRvbWFpblN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5wb3J0ID0gdGhpcy5ub2RlUGFyc2VkVXJsLnBvcnQ7CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gdGhpcy5fZG9tYWluUmVnZXgoZG9tYWluU3RyaW5nQXJnLnJlcGxhY2UodGhpcy5ub2RlUGFyc2VkVXJsLnBhdGhuYW1lLCAiIikpOwogICAgICAgIHRoaXMuZnVsbE5hbWUgPSAiIjsKICAgICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgICAgICAgIGlmIChyZWdleE1hdGNoZXNbaTExIC0gMV0pIHsKICAgICAgICAgICAgY29uc3QgbG9jYWxNYXRjaCA9IHJlZ2V4TWF0Y2hlc1tpMTEgLSAxXTsKICAgICAgICAgICAgdGhpc1sibGV2ZWwiICsgaTExLnRvU3RyaW5nKCldID0gbG9jYWxNYXRjaDsKICAgICAgICAgICAgaWYgKHRoaXMuZnVsbE5hbWUgPT09ICIiKSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2g7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5mdWxsTmFtZSA9IGxvY2FsTWF0Y2ggKyAiLiIgKyB0aGlzLmZ1bGxOYW1lOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aGlzWyJsZXZlbCIgKyBpMTEudG9TdHJpbmcoKV0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuem9uZU5hbWUgPSB0aGlzLmxldmVsMiArICIuIiArIHRoaXMubGV2ZWwxOwogICAgICAgIHRoaXMudG9wTGV2ZWwgPSB0aGlzLmxldmVsMTsKICAgICAgICB0aGlzLmRvbWFpbk5hbWUgPSB0aGlzLmxldmVsMjsKICAgICAgICB0aGlzLnN1YkRvbWFpbiA9IHRoaXMubGV2ZWwzOwogICAgICB9CiAgICAgIC8vIGhlbHBlciBmdW5jdGlvbnMKICAgICAgLyoqICovCiAgICAgIF9kb21haW5SZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC8oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfShbYS16QS1aMC05XC1cX10qKVwuezAsMX0oW2EtekEtWjAtOVwtXF9dKilcLnswLDF9KFthLXpBLVowLTlcLVxfXSopXC57MCwxfSQvOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICByZWdleE1hdGNoZXMucmV2ZXJzZSgpOwogICAgICAgIHJlZ2V4TWF0Y2hlcy5wb3AoKTsKICAgICAgICBjb25zdCByZWdleE1hdGNoZXNGaWx0ZXJlZCA9IHJlZ2V4TWF0Y2hlcy5maWx0ZXIoZnVuY3Rpb24oc3RyaW5nQXJnMikgewogICAgICAgICAgcmV0dXJuIHN0cmluZ0FyZzIgIT09ICIiOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiByZWdleE1hdGNoZXNGaWx0ZXJlZDsKICAgICAgfQogICAgICBfcHJvdG9jb2xSZWdleChzdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCByZWdleFN0cmluZyA9IC9eKFthLXpBLVowLTldKik6XC9cLy87CiAgICAgICAgY29uc3QgcmVnZXhNYXRjaGVzID0gcmVnZXhTdHJpbmcuZXhlYyhzdHJpbmdBcmcpOwogICAgICAgIGlmIChyZWdleE1hdGNoZXMpIHsKICAgICAgICAgIHJldHVybiByZWdleE1hdGNoZXNbMV07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgICAgfQogICAgICB9CiAgICAgIF9wb3J0UmVnZXgoc3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVnZXhTdHJpbmcgPSAvXihbYS16QS1aMC05XSopOlwvXC8vOwogICAgICAgIGNvbnN0IHJlZ2V4TWF0Y2hlcyA9IHJlZ2V4U3RyaW5nLmV4ZWMoc3RyaW5nQXJnKTsKICAgICAgICBpZiAocmVnZXhNYXRjaGVzKSB7CiAgICAgICAgICByZXR1cm4gcmVnZXhNYXRjaGVzWzFdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcwp2YXIgR2l0UmVwbywgZ2l0UmVnZXgsIGdpdExpbms7CnZhciBpbml0X3NtYXJ0c3RyaW5nX2dpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RyaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0cmluZy9kaXN0X3RzL3NtYXJ0c3RyaW5nLmdpdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX3BsdWdpbnMoKTsKICAgIEdpdFJlcG8gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0cmluZ0FyZywgdG9rZW5BcmcpIHsKICAgICAgICBsZXQgcmVnZXhNYXRjaGVzID0gZ2l0UmVnZXgoc3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmhvc3QgPSByZWdleE1hdGNoZXNbMV07CiAgICAgICAgdGhpcy51c2VyID0gcmVnZXhNYXRjaGVzWzJdOwogICAgICAgIHRoaXMucmVwbyA9IHJlZ2V4TWF0Y2hlc1szXTsKICAgICAgICB0aGlzLmFjY2Vzc1Rva2VuID0gdG9rZW5Bcmc7CiAgICAgICAgdGhpcy5zc2hVcmwgPSBnaXRMaW5rKHRoaXMuaG9zdCwgdGhpcy51c2VyLCB0aGlzLnJlcG8sIHRoaXMuYWNjZXNzVG9rZW4sICJzc2giKTsKICAgICAgICB0aGlzLmh0dHBzVXJsID0gZ2l0TGluayh0aGlzLmhvc3QsIHRoaXMudXNlciwgdGhpcy5yZXBvLCB0aGlzLmFjY2Vzc1Rva2VuLCAiaHR0cHMiKTsKICAgICAgfQogICAgfTsKICAgIGdpdFJlZ2V4ID0gZnVuY3Rpb24oc3RyaW5nQXJnKSB7CiAgICAgIGNvbnN0IHJlZ2V4U3RyaW5nID0gLyhbYS16QS1aMC05XC1fXC5dKikoPzpcL3xcOikoW2EtekEtWjAtOVwtX1wuXSopKD86XC8pKFthLXpBLVowLTlcLV9cLl0qKSg/OlwuZ2l0KS87CiAgICAgIGxldCByZWdleE1hdGNoZXMgPSByZWdleFN0cmluZy5leGVjKHN0cmluZ0FyZyk7CiAgICAgIHJldHVybiByZWdleE1hdGNoZXM7CiAgICB9OwogICAgZ2l0TGluayA9IGZ1bmN0aW9uKGhvc3RBcmcsIHVzZXJBcmcsIHJlcG9BcmcsIHRva2VuQXJnID0gIiIsIGxpbmtUeXBlQXJnKSB7CiAgICAgIGxldCByZXR1cm5TdHJpbmc7CiAgICAgIGlmICh0b2tlbkFyZyAhPT0gIiIpIHsKICAgICAgICB0b2tlbkFyZyA9IHRva2VuQXJnICsgIkAiOwogICAgICB9CiAgICAgIHN3aXRjaCAobGlua1R5cGVBcmcpIHsKICAgICAgICBjYXNlICJodHRwcyI6CiAgICAgICAgICByZXR1cm5TdHJpbmcgPSAiaHR0cHM6Ly8iICsgdG9rZW5BcmcgKyBob3N0QXJnICsgIi8iICsgdXNlckFyZyArICIvIiArIHJlcG9BcmcgKyAiLmdpdCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzc2giOgogICAgICAgICAgcmV0dXJuU3RyaW5nID0gImdpdEAiICsgaG9zdEFyZyArICI6IiArIHVzZXJBcmcgKyAiLyIgKyByZXBvQXJnICsgIi5naXQiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkxpbmsgVHlwZSAiICsgbGlua1R5cGVBcmcgKyAiIG5vdCBrbm93biIpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTEgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTEsIHsKICBCYXNlNjQ6ICgpID0+IEJhc2U2NCwKICBEb21haW46ICgpID0+IERvbWFpbiwKICBHaXRSZXBvOiAoKSA9PiBHaXRSZXBvLAogIGJhc2U2NDogKCkgPT4gYmFzZTY0LAogIGNyZWF0ZTogKCkgPT4gc21hcnRzdHJpbmdfY3JlYXRlX2V4cG9ydHMsCiAgZG9ja2VyOiAoKSA9PiBzbWFydHN0cmluZ19kb2NrZXJfZXhwb3J0cywKICBpbmRlbnQ6ICgpID0+IHNtYXJ0c3RyaW5nX2luZGVudF9leHBvcnRzLAogIG5vcm1hbGl6ZTogKCkgPT4gc21hcnRzdHJpbmdfbm9ybWFsaXplX2V4cG9ydHMsCiAgdHlwZTogKCkgPT4gc21hcnRzdHJpbmdfdHlwZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0cmluZ0A0LjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdHJpbmcvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2NyZWF0ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb2NrZXIoKTsKICAgIGluaXRfc21hcnRzdHJpbmdfaW5kZW50KCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX25vcm1hbGl6ZSgpOwogICAgaW5pdF9zbWFydHN0cmluZ190eXBlKCk7CiAgICBpbml0X3NtYXJ0c3RyaW5nX2Jhc2U2NCgpOwogICAgaW5pdF9zbWFydHN0cmluZ19kb21haW4oKTsKICAgIGluaXRfc21hcnRzdHJpbmdfZ2l0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sb2Rhc2guY2xvbmVkZWVwQDQuNS4wL25vZGVfbW9kdWxlcy9sb2Rhc2guY2xvbmVkZWVwL2luZGV4LmpzCnZhciByZXF1aXJlX2xvZGFzaCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vbG9kYXNoLmNsb25lZGVlcEA0LjUuMC9ub2RlX21vZHVsZXMvbG9kYXNoLmNsb25lZGVlcC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICB2YXIgTEFSR0VfQVJSQVlfU0laRSA9IDIwMDsKICAgIHZhciBIQVNIX1VOREVGSU5FRCA9ICJfX2xvZGFzaF9oYXNoX3VuZGVmaW5lZF9fIjsKICAgIHZhciBNQVhfU0FGRV9JTlRFR0VSID0gOTAwNzE5OTI1NDc0MDk5MTsKICAgIHZhciBhcmdzVGFnID0gIltvYmplY3QgQXJndW1lbnRzXSIsIGFycmF5VGFnID0gIltvYmplY3QgQXJyYXldIiwgYm9vbFRhZyA9ICJbb2JqZWN0IEJvb2xlYW5dIiwgZGF0ZVRhZyA9ICJbb2JqZWN0IERhdGVdIiwgZXJyb3JUYWcgPSAiW29iamVjdCBFcnJvcl0iLCBmdW5jVGFnID0gIltvYmplY3QgRnVuY3Rpb25dIiwgZ2VuVGFnID0gIltvYmplY3QgR2VuZXJhdG9yRnVuY3Rpb25dIiwgbWFwVGFnID0gIltvYmplY3QgTWFwXSIsIG51bWJlclRhZyA9ICJbb2JqZWN0IE51bWJlcl0iLCBvYmplY3RUYWcgPSAiW29iamVjdCBPYmplY3RdIiwgcHJvbWlzZVRhZyA9ICJbb2JqZWN0IFByb21pc2VdIiwgcmVnZXhwVGFnID0gIltvYmplY3QgUmVnRXhwXSIsIHNldFRhZyA9ICJbb2JqZWN0IFNldF0iLCBzdHJpbmdUYWcgPSAiW29iamVjdCBTdHJpbmddIiwgc3ltYm9sVGFnID0gIltvYmplY3QgU3ltYm9sXSIsIHdlYWtNYXBUYWcgPSAiW29iamVjdCBXZWFrTWFwXSI7CiAgICB2YXIgYXJyYXlCdWZmZXJUYWcgPSAiW29iamVjdCBBcnJheUJ1ZmZlcl0iLCBkYXRhVmlld1RhZyA9ICJbb2JqZWN0IERhdGFWaWV3XSIsIGZsb2F0MzJUYWcgPSAiW29iamVjdCBGbG9hdDMyQXJyYXldIiwgZmxvYXQ2NFRhZyA9ICJbb2JqZWN0IEZsb2F0NjRBcnJheV0iLCBpbnQ4VGFnID0gIltvYmplY3QgSW50OEFycmF5XSIsIGludDE2VGFnID0gIltvYmplY3QgSW50MTZBcnJheV0iLCBpbnQzMlRhZyA9ICJbb2JqZWN0IEludDMyQXJyYXldIiwgdWludDhUYWcgPSAiW29iamVjdCBVaW50OEFycmF5XSIsIHVpbnQ4Q2xhbXBlZFRhZyA9ICJbb2JqZWN0IFVpbnQ4Q2xhbXBlZEFycmF5XSIsIHVpbnQxNlRhZyA9ICJbb2JqZWN0IFVpbnQxNkFycmF5XSIsIHVpbnQzMlRhZyA9ICJbb2JqZWN0IFVpbnQzMkFycmF5XSI7CiAgICB2YXIgcmVSZWdFeHBDaGFyID0gL1tcXF4kLiorPygpW1xde318XS9nOwogICAgdmFyIHJlRmxhZ3MgPSAvXHcqJC87CiAgICB2YXIgcmVJc0hvc3RDdG9yID0gL15cW29iamVjdCAuKz9Db25zdHJ1Y3RvclxdJC87CiAgICB2YXIgcmVJc1VpbnQgPSAvXig/OjB8WzEtOV1cZCopJC87CiAgICB2YXIgY2xvbmVhYmxlVGFncyA9IHt9OwogICAgY2xvbmVhYmxlVGFnc1thcmdzVGFnXSA9IGNsb25lYWJsZVRhZ3NbYXJyYXlUYWddID0gY2xvbmVhYmxlVGFnc1thcnJheUJ1ZmZlclRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGFWaWV3VGFnXSA9IGNsb25lYWJsZVRhZ3NbYm9vbFRhZ10gPSBjbG9uZWFibGVUYWdzW2RhdGVUYWddID0gY2xvbmVhYmxlVGFnc1tmbG9hdDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbZmxvYXQ2NFRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDhUYWddID0gY2xvbmVhYmxlVGFnc1tpbnQxNlRhZ10gPSBjbG9uZWFibGVUYWdzW2ludDMyVGFnXSA9IGNsb25lYWJsZVRhZ3NbbWFwVGFnXSA9IGNsb25lYWJsZVRhZ3NbbnVtYmVyVGFnXSA9IGNsb25lYWJsZVRhZ3Nbb2JqZWN0VGFnXSA9IGNsb25lYWJsZVRhZ3NbcmVnZXhwVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc2V0VGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3RyaW5nVGFnXSA9IGNsb25lYWJsZVRhZ3Nbc3ltYm9sVGFnXSA9IGNsb25lYWJsZVRhZ3NbdWludDhUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50OENsYW1wZWRUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MTZUYWddID0gY2xvbmVhYmxlVGFnc1t1aW50MzJUYWddID0gdHJ1ZTsKICAgIGNsb25lYWJsZVRhZ3NbZXJyb3JUYWddID0gY2xvbmVhYmxlVGFnc1tmdW5jVGFnXSA9IGNsb25lYWJsZVRhZ3Nbd2Vha01hcFRhZ10gPSBmYWxzZTsKICAgIHZhciBmcmVlR2xvYmFsID0gdHlwZW9mIGdsb2JhbCA9PSAib2JqZWN0IiAmJiBnbG9iYWwgJiYgZ2xvYmFsLk9iamVjdCA9PT0gT2JqZWN0ICYmIGdsb2JhbDsKICAgIHZhciBmcmVlU2VsZiA9IHR5cGVvZiBzZWxmID09ICJvYmplY3QiICYmIHNlbGYgJiYgc2VsZi5PYmplY3QgPT09IE9iamVjdCAmJiBzZWxmOwogICAgdmFyIHJvb3Q2ID0gZnJlZUdsb2JhbCB8fCBmcmVlU2VsZiB8fCBGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOwogICAgdmFyIGZyZWVFeHBvcnRzID0gdHlwZW9mIGV4cG9ydHMgPT0gIm9iamVjdCIgJiYgZXhwb3J0cyAmJiAhZXhwb3J0cy5ub2RlVHlwZSAmJiBleHBvcnRzOwogICAgdmFyIGZyZWVNb2R1bGUgPSBmcmVlRXhwb3J0cyAmJiB0eXBlb2YgbW9kdWxlID09ICJvYmplY3QiICYmIG1vZHVsZSAmJiAhbW9kdWxlLm5vZGVUeXBlICYmIG1vZHVsZTsKICAgIHZhciBtb2R1bGVFeHBvcnRzID0gZnJlZU1vZHVsZSAmJiBmcmVlTW9kdWxlLmV4cG9ydHMgPT09IGZyZWVFeHBvcnRzOwogICAgZnVuY3Rpb24gYWRkTWFwRW50cnkobWFwNywgcGFpcikgewogICAgICBtYXA3LnNldChwYWlyWzBdLCBwYWlyWzFdKTsKICAgICAgcmV0dXJuIG1hcDc7CiAgICB9CiAgICBmdW5jdGlvbiBhZGRTZXRFbnRyeShzZXQzLCB2YWx1ZTIpIHsKICAgICAgc2V0My5hZGQodmFsdWUyKTsKICAgICAgcmV0dXJuIHNldDM7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheUVhY2goYXJyYXksIGl0ZXJhdGVlKSB7CiAgICAgIHZhciBpbmRleDIgPSAtMSwgbGVuZ3RoID0gYXJyYXkgPyBhcnJheS5sZW5ndGggOiAwOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBsZW5ndGgpIHsKICAgICAgICBpZiAoaXRlcmF0ZWUoYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSkgPT09IGZhbHNlKSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGFycmF5OwogICAgfQogICAgZnVuY3Rpb24gYXJyYXlQdXNoKGFycmF5LCB2YWx1ZXMpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSB2YWx1ZXMubGVuZ3RoLCBvZmZzZXQgPSBhcnJheS5sZW5ndGg7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxlbmd0aCkgewogICAgICAgIGFycmF5W29mZnNldCArIGluZGV4Ml0gPSB2YWx1ZXNbaW5kZXgyXTsKICAgICAgfQogICAgICByZXR1cm4gYXJyYXk7CiAgICB9CiAgICBmdW5jdGlvbiBhcnJheVJlZHVjZShhcnJheSwgaXRlcmF0ZWUsIGFjY3VtdWxhdG9yLCBpbml0QWNjdW0pIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBhcnJheSA/IGFycmF5Lmxlbmd0aCA6IDA7CiAgICAgIGlmIChpbml0QWNjdW0gJiYgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBhcnJheVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYWNjdW11bGF0b3IgPSBpdGVyYXRlZShhY2N1bXVsYXRvciwgYXJyYXlbaW5kZXgyXSwgaW5kZXgyLCBhcnJheSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgfQogICAgZnVuY3Rpb24gYmFzZVRpbWVzKG4xMywgaXRlcmF0ZWUpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShuMTMpOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBuMTMpIHsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IGl0ZXJhdGVlKGluZGV4Mik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGdldFZhbHVlKG9iamVjdCwga2V5MikgewogICAgICByZXR1cm4gb2JqZWN0ID09IG51bGwgPyB2b2lkIDAgOiBvYmplY3Rba2V5Ml07CiAgICB9CiAgICBmdW5jdGlvbiBpc0hvc3RPYmplY3QodmFsdWUyKSB7CiAgICAgIHZhciByZXN1bHQgPSBmYWxzZTsKICAgICAgaWYgKHZhbHVlMiAhPSBudWxsICYmIHR5cGVvZiB2YWx1ZTIudG9TdHJpbmcgIT0gImZ1bmN0aW9uIikgewogICAgICAgIHRyeSB7CiAgICAgICAgICByZXN1bHQgPSAhISh2YWx1ZTIgKyAiIik7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBUb0FycmF5KG1hcDcpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCByZXN1bHQgPSBBcnJheShtYXA3LnNpemUpOwogICAgICBtYXA3LmZvckVhY2goZnVuY3Rpb24odmFsdWUyLCBrZXkyKSB7CiAgICAgICAgcmVzdWx0WysraW5kZXgyXSA9IFtrZXkyLCB2YWx1ZTJdOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIG92ZXJBcmcoZnVuYywgdHJhbnNmb3JtMikgewogICAgICByZXR1cm4gZnVuY3Rpb24oYXJnKSB7CiAgICAgICAgcmV0dXJuIGZ1bmModHJhbnNmb3JtMihhcmcpKTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFRvQXJyYXkoc2V0MykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIHJlc3VsdCA9IEFycmF5KHNldDMuc2l6ZSk7CiAgICAgIHNldDMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICByZXN1bHRbKytpbmRleDJdID0gdmFsdWUyOwogICAgICB9KTsKICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIHZhciBhcnJheVByb3RvID0gQXJyYXkucHJvdG90eXBlLCBmdW5jUHJvdG8gPSBGdW5jdGlvbi5wcm90b3R5cGUsIG9iamVjdFByb3RvID0gT2JqZWN0LnByb3RvdHlwZTsKICAgIHZhciBjb3JlSnNEYXRhID0gcm9vdDZbIl9fY29yZS1qc19zaGFyZWRfXyJdOwogICAgdmFyIG1hc2tTcmNLZXkgPSAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciB1aWQgPSAvW14uXSskLy5leGVjKGNvcmVKc0RhdGEgJiYgY29yZUpzRGF0YS5rZXlzICYmIGNvcmVKc0RhdGEua2V5cy5JRV9QUk9UTyB8fCAiIik7CiAgICAgIHJldHVybiB1aWQgPyAiU3ltYm9sKHNyYylfMS4iICsgdWlkIDogIiI7CiAgICB9KSgpOwogICAgdmFyIGZ1bmNUb1N0cmluZyA9IGZ1bmNQcm90by50b1N0cmluZzsKICAgIHZhciBoYXNPd25Qcm9wZXJ0eTMgPSBvYmplY3RQcm90by5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciBvYmplY3RUb1N0cmluZzIgPSBvYmplY3RQcm90by50b1N0cmluZzsKICAgIHZhciByZUlzTmF0aXZlID0gUmVnRXhwKAogICAgICAiXiIgKyBmdW5jVG9TdHJpbmcuY2FsbChoYXNPd25Qcm9wZXJ0eTMpLnJlcGxhY2UocmVSZWdFeHBDaGFyLCAiXFwkJiIpLnJlcGxhY2UoL2hhc093blByb3BlcnR5fChmdW5jdGlvbikuKj8oPz1cXFwoKXwgZm9yIC4rPyg/PVxcXF0pL2csICIkMS4qPyIpICsgIiQiCiAgICApOwogICAgdmFyIEJ1ZmZlcjIgPSBtb2R1bGVFeHBvcnRzID8gcm9vdDYuQnVmZmVyIDogdm9pZCAwLCBTeW1ib2wyID0gcm9vdDYuU3ltYm9sLCBVaW50OEFycmF5MiA9IHJvb3Q2LlVpbnQ4QXJyYXksIGdldFByb3RvdHlwZSA9IG92ZXJBcmcoT2JqZWN0LmdldFByb3RvdHlwZU9mLCBPYmplY3QpLCBvYmplY3RDcmVhdGUgPSBPYmplY3QuY3JlYXRlLCBwcm9wZXJ0eUlzRW51bWVyYWJsZSA9IG9iamVjdFByb3RvLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBzcGxpY2UyID0gYXJyYXlQcm90by5zcGxpY2U7CiAgICB2YXIgbmF0aXZlR2V0U3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMsIG5hdGl2ZUlzQnVmZmVyID0gQnVmZmVyMiA/IEJ1ZmZlcjIuaXNCdWZmZXIgOiB2b2lkIDAsIG5hdGl2ZUtleXMgPSBvdmVyQXJnKE9iamVjdC5rZXlzLCBPYmplY3QpOwogICAgdmFyIERhdGFWaWV3MiA9IGdldE5hdGl2ZShyb290NiwgIkRhdGFWaWV3IiksIE1hcDMgPSBnZXROYXRpdmUocm9vdDYsICJNYXAiKSwgUHJvbWlzZTIgPSBnZXROYXRpdmUocm9vdDYsICJQcm9taXNlIiksIFNldDIgPSBnZXROYXRpdmUocm9vdDYsICJTZXQiKSwgV2Vha01hcDIgPSBnZXROYXRpdmUocm9vdDYsICJXZWFrTWFwIiksIG5hdGl2ZUNyZWF0ZSA9IGdldE5hdGl2ZShPYmplY3QsICJjcmVhdGUiKTsKICAgIHZhciBkYXRhVmlld0N0b3JTdHJpbmcgPSB0b1NvdXJjZShEYXRhVmlldzIpLCBtYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoTWFwMyksIHByb21pc2VDdG9yU3RyaW5nID0gdG9Tb3VyY2UoUHJvbWlzZTIpLCBzZXRDdG9yU3RyaW5nID0gdG9Tb3VyY2UoU2V0MiksIHdlYWtNYXBDdG9yU3RyaW5nID0gdG9Tb3VyY2UoV2Vha01hcDIpOwogICAgdmFyIHN5bWJvbFByb3RvID0gU3ltYm9sMiA/IFN5bWJvbDIucHJvdG90eXBlIDogdm9pZCAwLCBzeW1ib2xWYWx1ZU9mID0gc3ltYm9sUHJvdG8gPyBzeW1ib2xQcm90by52YWx1ZU9mIDogdm9pZCAwOwogICAgZnVuY3Rpb24gSGFzaDIoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5hdGl2ZUNyZWF0ZSA/IG5hdGl2ZUNyZWF0ZShudWxsKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gaGFzaERlbGV0ZShrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLmhhcyhrZXkyKSAmJiBkZWxldGUgdGhpcy5fX2RhdGFfX1trZXkyXTsKICAgIH0KICAgIGZ1bmN0aW9uIGhhc2hHZXQoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX187CiAgICAgIGlmIChuYXRpdmVDcmVhdGUpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gZGF0YVtrZXkyXTsKICAgICAgICByZXR1cm4gcmVzdWx0ID09PSBIQVNIX1VOREVGSU5FRCA/IHZvaWQgMCA6IHJlc3VsdDsKICAgICAgfQogICAgICByZXR1cm4gaGFzT3duUHJvcGVydHkzLmNhbGwoZGF0YSwga2V5MikgPyBkYXRhW2tleTJdIDogdm9pZCAwOwogICAgfQogICAgZnVuY3Rpb24gaGFzaEhhcyhrZXkyKSB7CiAgICAgIHZhciBkYXRhID0gdGhpcy5fX2RhdGFfXzsKICAgICAgcmV0dXJuIG5hdGl2ZUNyZWF0ZSA/IGRhdGFba2V5Ml0gIT09IHZvaWQgMCA6IGhhc093blByb3BlcnR5My5jYWxsKGRhdGEsIGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gaGFzaFNldChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fOwogICAgICBkYXRhW2tleTJdID0gbmF0aXZlQ3JlYXRlICYmIHZhbHVlMiA9PT0gdm9pZCAwID8gSEFTSF9VTkRFRklORUQgOiB2YWx1ZTI7CiAgICAgIHJldHVybiB0aGlzOwogICAgfQogICAgSGFzaDIucHJvdG90eXBlLmNsZWFyID0gaGFzaENsZWFyOwogICAgSGFzaDIucHJvdG90eXBlWyJkZWxldGUiXSA9IGhhc2hEZWxldGU7CiAgICBIYXNoMi5wcm90b3R5cGUuZ2V0ID0gaGFzaEdldDsKICAgIEhhc2gyLnByb3RvdHlwZS5oYXMgPSBoYXNoSGFzOwogICAgSGFzaDIucHJvdG90eXBlLnNldCA9IGhhc2hTZXQ7CiAgICBmdW5jdGlvbiBMaXN0Q2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxpc3RDYWNoZUNsZWFyKCkgewogICAgICB0aGlzLl9fZGF0YV9fID0gW107CiAgICB9CiAgICBmdW5jdGlvbiBsaXN0Q2FjaGVEZWxldGUoa2V5MikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGxhc3RJbmRleCA9IGRhdGEubGVuZ3RoIC0gMTsKICAgICAgaWYgKGluZGV4MiA9PSBsYXN0SW5kZXgpIHsKICAgICAgICBkYXRhLnBvcCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHNwbGljZTIuY2FsbChkYXRhLCBpbmRleDIsIDEpOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlR2V0KGtleTIpIHsKICAgICAgdmFyIGRhdGEgPSB0aGlzLl9fZGF0YV9fLCBpbmRleDIgPSBhc3NvY0luZGV4T2YoZGF0YSwga2V5Mik7CiAgICAgIHJldHVybiBpbmRleDIgPCAwID8gdm9pZCAwIDogZGF0YVtpbmRleDJdWzFdOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlSGFzKGtleTIpIHsKICAgICAgcmV0dXJuIGFzc29jSW5kZXhPZih0aGlzLl9fZGF0YV9fLCBrZXkyKSA+IC0xOwogICAgfQogICAgZnVuY3Rpb24gbGlzdENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgZGF0YSA9IHRoaXMuX19kYXRhX18sIGluZGV4MiA9IGFzc29jSW5kZXhPZihkYXRhLCBrZXkyKTsKICAgICAgaWYgKGluZGV4MiA8IDApIHsKICAgICAgICBkYXRhLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICB9IGVsc2UgewogICAgICAgIGRhdGFbaW5kZXgyXVsxXSA9IHZhbHVlMjsKICAgICAgfQogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIExpc3RDYWNoZS5wcm90b3R5cGUuY2xlYXIgPSBsaXN0Q2FjaGVDbGVhcjsKICAgIExpc3RDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbGlzdENhY2hlRGVsZXRlOwogICAgTGlzdENhY2hlLnByb3RvdHlwZS5nZXQgPSBsaXN0Q2FjaGVHZXQ7CiAgICBMaXN0Q2FjaGUucHJvdG90eXBlLmhhcyA9IGxpc3RDYWNoZUhhczsKICAgIExpc3RDYWNoZS5wcm90b3R5cGUuc2V0ID0gbGlzdENhY2hlU2V0OwogICAgZnVuY3Rpb24gTWFwQ2FjaGUoZW50cmllcykgewogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IGVudHJpZXMgPyBlbnRyaWVzLmxlbmd0aCA6IDA7CiAgICAgIHRoaXMuY2xlYXIoKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGVudHJ5ID0gZW50cmllc1tpbmRleDJdOwogICAgICAgIHRoaXMuc2V0KGVudHJ5WzBdLCBlbnRyeVsxXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlQ2xlYXIoKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSB7CiAgICAgICAgImhhc2giOiBuZXcgSGFzaDIoKSwKICAgICAgICAibWFwIjogbmV3IChNYXAzIHx8IExpc3RDYWNoZSkoKSwKICAgICAgICAic3RyaW5nIjogbmV3IEhhc2gyKCkKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIGdldE1hcERhdGEodGhpcywga2V5MilbImRlbGV0ZSJdKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gbWFwQ2FjaGVHZXQoa2V5MikgewogICAgICByZXR1cm4gZ2V0TWFwRGF0YSh0aGlzLCBrZXkyKS5nZXQoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBtYXBDYWNoZUhhcyhrZXkyKSB7CiAgICAgIHJldHVybiBnZXRNYXBEYXRhKHRoaXMsIGtleTIpLmhhcyhrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hcENhY2hlU2V0KGtleTIsIHZhbHVlMikgewogICAgICBnZXRNYXBEYXRhKHRoaXMsIGtleTIpLnNldChrZXkyLCB2YWx1ZTIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIE1hcENhY2hlLnByb3RvdHlwZS5jbGVhciA9IG1hcENhY2hlQ2xlYXI7CiAgICBNYXBDYWNoZS5wcm90b3R5cGVbImRlbGV0ZSJdID0gbWFwQ2FjaGVEZWxldGU7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuZ2V0ID0gbWFwQ2FjaGVHZXQ7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuaGFzID0gbWFwQ2FjaGVIYXM7CiAgICBNYXBDYWNoZS5wcm90b3R5cGUuc2V0ID0gbWFwQ2FjaGVTZXQ7CiAgICBmdW5jdGlvbiBTdGFjayhlbnRyaWVzKSB7CiAgICAgIHRoaXMuX19kYXRhX18gPSBuZXcgTGlzdENhY2hlKGVudHJpZXMpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tDbGVhcigpIHsKICAgICAgdGhpcy5fX2RhdGFfXyA9IG5ldyBMaXN0Q2FjaGUoKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrRGVsZXRlKGtleTIpIHsKICAgICAgcmV0dXJuIHRoaXMuX19kYXRhX19bImRlbGV0ZSJdKGtleTIpOwogICAgfQogICAgZnVuY3Rpb24gc3RhY2tHZXQoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5fX2RhdGFfXy5nZXQoa2V5Mik7CiAgICB9CiAgICBmdW5jdGlvbiBzdGFja0hhcyhrZXkyKSB7CiAgICAgIHJldHVybiB0aGlzLl9fZGF0YV9fLmhhcyhrZXkyKTsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YWNrU2V0KGtleTIsIHZhbHVlMikgewogICAgICB2YXIgY2FjaGUgPSB0aGlzLl9fZGF0YV9fOwogICAgICBpZiAoY2FjaGUgaW5zdGFuY2VvZiBMaXN0Q2FjaGUpIHsKICAgICAgICB2YXIgcGFpcnMyID0gY2FjaGUuX19kYXRhX187CiAgICAgICAgaWYgKCFNYXAzIHx8IHBhaXJzMi5sZW5ndGggPCBMQVJHRV9BUlJBWV9TSVpFIC0gMSkgewogICAgICAgICAgcGFpcnMyLnB1c2goW2tleTIsIHZhbHVlMl0pOwogICAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgfQogICAgICAgIGNhY2hlID0gdGhpcy5fX2RhdGFfXyA9IG5ldyBNYXBDYWNoZShwYWlyczIpOwogICAgICB9CiAgICAgIGNhY2hlLnNldChrZXkyLCB2YWx1ZTIpOwogICAgICByZXR1cm4gdGhpczsKICAgIH0KICAgIFN0YWNrLnByb3RvdHlwZS5jbGVhciA9IHN0YWNrQ2xlYXI7CiAgICBTdGFjay5wcm90b3R5cGVbImRlbGV0ZSJdID0gc3RhY2tEZWxldGU7CiAgICBTdGFjay5wcm90b3R5cGUuZ2V0ID0gc3RhY2tHZXQ7CiAgICBTdGFjay5wcm90b3R5cGUuaGFzID0gc3RhY2tIYXM7CiAgICBTdGFjay5wcm90b3R5cGUuc2V0ID0gc3RhY2tTZXQ7CiAgICBmdW5jdGlvbiBhcnJheUxpa2VLZXlzKHZhbHVlMiwgaW5oZXJpdGVkKSB7CiAgICAgIHZhciByZXN1bHQgPSBpc0FycmF5Myh2YWx1ZTIpIHx8IGlzQXJndW1lbnRzKHZhbHVlMikgPyBiYXNlVGltZXModmFsdWUyLmxlbmd0aCwgU3RyaW5nKSA6IFtdOwogICAgICB2YXIgbGVuZ3RoID0gcmVzdWx0Lmxlbmd0aCwgc2tpcEluZGV4ZXMgPSAhIWxlbmd0aDsKICAgICAgZm9yICh2YXIga2V5MiBpbiB2YWx1ZTIpIHsKICAgICAgICBpZiAoKGluaGVyaXRlZCB8fCBoYXNPd25Qcm9wZXJ0eTMuY2FsbCh2YWx1ZTIsIGtleTIpKSAmJiAhKHNraXBJbmRleGVzICYmIChrZXkyID09ICJsZW5ndGgiIHx8IGlzSW5kZXgoa2V5MiwgbGVuZ3RoKSkpKSB7CiAgICAgICAgICByZXN1bHQucHVzaChrZXkyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIGFzc2lnblZhbHVlKG9iamVjdCwga2V5MiwgdmFsdWUyKSB7CiAgICAgIHZhciBvYmpWYWx1ZSA9IG9iamVjdFtrZXkyXTsKICAgICAgaWYgKCEoaGFzT3duUHJvcGVydHkzLmNhbGwob2JqZWN0LCBrZXkyKSAmJiBlcShvYmpWYWx1ZSwgdmFsdWUyKSkgfHwgdmFsdWUyID09PSB2b2lkIDAgJiYgIShrZXkyIGluIG9iamVjdCkpIHsKICAgICAgICBvYmplY3Rba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGFzc29jSW5kZXhPZihhcnJheSwga2V5MikgewogICAgICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoOwogICAgICB3aGlsZSAobGVuZ3RoLS0pIHsKICAgICAgICBpZiAoZXEoYXJyYXlbbGVuZ3RoXVswXSwga2V5MikpIHsKICAgICAgICAgIHJldHVybiBsZW5ndGg7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAtMTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VBc3NpZ24ob2JqZWN0LCBzb3VyY2UpIHsKICAgICAgcmV0dXJuIG9iamVjdCAmJiBjb3B5T2JqZWN0KHNvdXJjZSwga2V5czIoc291cmNlKSwgb2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VDbG9uZSh2YWx1ZTIsIGlzRGVlcCwgaXNGdWxsLCBjdXN0b21pemVyLCBrZXkyLCBvYmplY3QsIHN0YWNrKSB7CiAgICAgIHZhciByZXN1bHQ7CiAgICAgIGlmIChjdXN0b21pemVyKSB7CiAgICAgICAgcmVzdWx0ID0gb2JqZWN0ID8gY3VzdG9taXplcih2YWx1ZTIsIGtleTIsIG9iamVjdCwgc3RhY2spIDogY3VzdG9taXplcih2YWx1ZTIpOwogICAgICB9CiAgICAgIGlmIChyZXN1bHQgIT09IHZvaWQgMCkgewogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgaWYgKCFpc09iamVjdDModmFsdWUyKSkgewogICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgIH0KICAgICAgdmFyIGlzQXJyID0gaXNBcnJheTModmFsdWUyKTsKICAgICAgaWYgKGlzQXJyKSB7CiAgICAgICAgcmVzdWx0ID0gaW5pdENsb25lQXJyYXkodmFsdWUyKTsKICAgICAgICBpZiAoIWlzRGVlcCkgewogICAgICAgICAgcmV0dXJuIGNvcHlBcnJheSh2YWx1ZTIsIHJlc3VsdCk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHZhciB0YWcgPSBnZXRUYWcodmFsdWUyKSwgaXNGdW5jID0gdGFnID09IGZ1bmNUYWcgfHwgdGFnID09IGdlblRhZzsKICAgICAgICBpZiAoaXNCdWZmZXIodmFsdWUyKSkgewogICAgICAgICAgcmV0dXJuIGNsb25lQnVmZmVyKHZhbHVlMiwgaXNEZWVwKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRhZyA9PSBvYmplY3RUYWcgfHwgdGFnID09IGFyZ3NUYWcgfHwgaXNGdW5jICYmICFvYmplY3QpIHsKICAgICAgICAgIGlmIChpc0hvc3RPYmplY3QodmFsdWUyKSkgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUyIDoge307CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVPYmplY3QoaXNGdW5jID8ge30gOiB2YWx1ZTIpOwogICAgICAgICAgaWYgKCFpc0RlZXApIHsKICAgICAgICAgICAgcmV0dXJuIGNvcHlTeW1ib2xzKHZhbHVlMiwgYmFzZUFzc2lnbihyZXN1bHQsIHZhbHVlMikpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWNsb25lYWJsZVRhZ3NbdGFnXSkgewogICAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gdmFsdWUyIDoge307CiAgICAgICAgICB9CiAgICAgICAgICByZXN1bHQgPSBpbml0Q2xvbmVCeVRhZyh2YWx1ZTIsIHRhZywgYmFzZUNsb25lLCBpc0RlZXApOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGFjayB8fCAoc3RhY2sgPSBuZXcgU3RhY2soKSk7CiAgICAgIHZhciBzdGFja2VkID0gc3RhY2suZ2V0KHZhbHVlMik7CiAgICAgIGlmIChzdGFja2VkKSB7CiAgICAgICAgcmV0dXJuIHN0YWNrZWQ7CiAgICAgIH0KICAgICAgc3RhY2suc2V0KHZhbHVlMiwgcmVzdWx0KTsKICAgICAgaWYgKCFpc0FycikgewogICAgICAgIHZhciBwcm9wcyA9IGlzRnVsbCA/IGdldEFsbEtleXModmFsdWUyKSA6IGtleXMyKHZhbHVlMik7CiAgICAgIH0KICAgICAgYXJyYXlFYWNoKHByb3BzIHx8IHZhbHVlMiwgZnVuY3Rpb24oc3ViVmFsdWUsIGtleTMpIHsKICAgICAgICBpZiAocHJvcHMpIHsKICAgICAgICAgIGtleTMgPSBzdWJWYWx1ZTsKICAgICAgICAgIHN1YlZhbHVlID0gdmFsdWUyW2tleTNdOwogICAgICAgIH0KICAgICAgICBhc3NpZ25WYWx1ZShyZXN1bHQsIGtleTMsIGJhc2VDbG9uZShzdWJWYWx1ZSwgaXNEZWVwLCBpc0Z1bGwsIGN1c3RvbWl6ZXIsIGtleTMsIHZhbHVlMiwgc3RhY2spKTsKICAgICAgfSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlQ3JlYXRlKHByb3RvKSB7CiAgICAgIHJldHVybiBpc09iamVjdDMocHJvdG8pID8gb2JqZWN0Q3JlYXRlKHByb3RvKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gYmFzZUdldEFsbEtleXMob2JqZWN0LCBrZXlzRnVuYywgc3ltYm9sc0Z1bmMpIHsKICAgICAgdmFyIHJlc3VsdCA9IGtleXNGdW5jKG9iamVjdCk7CiAgICAgIHJldHVybiBpc0FycmF5MyhvYmplY3QpID8gcmVzdWx0IDogYXJyYXlQdXNoKHJlc3VsdCwgc3ltYm9sc0Z1bmMob2JqZWN0KSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlR2V0VGFnKHZhbHVlMikgewogICAgICByZXR1cm4gb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKTsKICAgIH0KICAgIGZ1bmN0aW9uIGJhc2VJc05hdGl2ZSh2YWx1ZTIpIHsKICAgICAgaWYgKCFpc09iamVjdDModmFsdWUyKSB8fCBpc01hc2tlZCh2YWx1ZTIpKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBwYXR0ZXJuID0gaXNGdW5jdGlvbjIodmFsdWUyKSB8fCBpc0hvc3RPYmplY3QodmFsdWUyKSA/IHJlSXNOYXRpdmUgOiByZUlzSG9zdEN0b3I7CiAgICAgIHJldHVybiBwYXR0ZXJuLnRlc3QodG9Tb3VyY2UodmFsdWUyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBiYXNlS2V5cyhvYmplY3QpIHsKICAgICAgaWYgKCFpc1Byb3RvdHlwZShvYmplY3QpKSB7CiAgICAgICAgcmV0dXJuIG5hdGl2ZUtleXMob2JqZWN0KTsKICAgICAgfQogICAgICB2YXIgcmVzdWx0ID0gW107CiAgICAgIGZvciAodmFyIGtleTIgaW4gT2JqZWN0KG9iamVjdCkpIHsKICAgICAgICBpZiAoaGFzT3duUHJvcGVydHkzLmNhbGwob2JqZWN0LCBrZXkyKSAmJiBrZXkyICE9ICJjb25zdHJ1Y3RvciIpIHsKICAgICAgICAgIHJlc3VsdC5wdXNoKGtleTIpOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVCdWZmZXIoYnVmZmVyMiwgaXNEZWVwKSB7CiAgICAgIGlmIChpc0RlZXApIHsKICAgICAgICByZXR1cm4gYnVmZmVyMi5zbGljZSgpOwogICAgICB9CiAgICAgIHZhciByZXN1bHQgPSBuZXcgYnVmZmVyMi5jb25zdHJ1Y3RvcihidWZmZXIyLmxlbmd0aCk7CiAgICAgIGJ1ZmZlcjIuY29weShyZXN1bHQpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVBcnJheUJ1ZmZlcihhcnJheUJ1ZmZlcikgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IGFycmF5QnVmZmVyLmNvbnN0cnVjdG9yKGFycmF5QnVmZmVyLmJ5dGVMZW5ndGgpOwogICAgICBuZXcgVWludDhBcnJheTIocmVzdWx0KS5zZXQobmV3IFVpbnQ4QXJyYXkyKGFycmF5QnVmZmVyKSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZURhdGFWaWV3KGRhdGFWaWV3LCBpc0RlZXApIHsKICAgICAgdmFyIGJ1ZmZlcjIgPSBpc0RlZXAgPyBjbG9uZUFycmF5QnVmZmVyKGRhdGFWaWV3LmJ1ZmZlcikgOiBkYXRhVmlldy5idWZmZXI7CiAgICAgIHJldHVybiBuZXcgZGF0YVZpZXcuY29uc3RydWN0b3IoYnVmZmVyMiwgZGF0YVZpZXcuYnl0ZU9mZnNldCwgZGF0YVZpZXcuYnl0ZUxlbmd0aCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZU1hcChtYXA3LCBpc0RlZXAsIGNsb25lRnVuYykgewogICAgICB2YXIgYXJyYXkgPSBpc0RlZXAgPyBjbG9uZUZ1bmMobWFwVG9BcnJheShtYXA3KSwgdHJ1ZSkgOiBtYXBUb0FycmF5KG1hcDcpOwogICAgICByZXR1cm4gYXJyYXlSZWR1Y2UoYXJyYXksIGFkZE1hcEVudHJ5LCBuZXcgbWFwNy5jb25zdHJ1Y3RvcigpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lUmVnRXhwKHJlZ2V4cCkgewogICAgICB2YXIgcmVzdWx0ID0gbmV3IHJlZ2V4cC5jb25zdHJ1Y3RvcihyZWdleHAuc291cmNlLCByZUZsYWdzLmV4ZWMocmVnZXhwKSk7CiAgICAgIHJlc3VsdC5sYXN0SW5kZXggPSByZWdleHAubGFzdEluZGV4OwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gY2xvbmVTZXQoc2V0MywgaXNEZWVwLCBjbG9uZUZ1bmMpIHsKICAgICAgdmFyIGFycmF5ID0gaXNEZWVwID8gY2xvbmVGdW5jKHNldFRvQXJyYXkoc2V0MyksIHRydWUpIDogc2V0VG9BcnJheShzZXQzKTsKICAgICAgcmV0dXJuIGFycmF5UmVkdWNlKGFycmF5LCBhZGRTZXRFbnRyeSwgbmV3IHNldDMuY29uc3RydWN0b3IoKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVN5bWJvbChzeW1ib2wpIHsKICAgICAgcmV0dXJuIHN5bWJvbFZhbHVlT2YgPyBPYmplY3Qoc3ltYm9sVmFsdWVPZi5jYWxsKHN5bWJvbCkpIDoge307CiAgICB9CiAgICBmdW5jdGlvbiBjbG9uZVR5cGVkQXJyYXkodHlwZWRBcnJheSwgaXNEZWVwKSB7CiAgICAgIHZhciBidWZmZXIyID0gaXNEZWVwID8gY2xvbmVBcnJheUJ1ZmZlcih0eXBlZEFycmF5LmJ1ZmZlcikgOiB0eXBlZEFycmF5LmJ1ZmZlcjsKICAgICAgcmV0dXJuIG5ldyB0eXBlZEFycmF5LmNvbnN0cnVjdG9yKGJ1ZmZlcjIsIHR5cGVkQXJyYXkuYnl0ZU9mZnNldCwgdHlwZWRBcnJheS5sZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gY29weUFycmF5KHNvdXJjZSwgYXJyYXkpIHsKICAgICAgdmFyIGluZGV4MiA9IC0xLCBsZW5ndGggPSBzb3VyY2UubGVuZ3RoOwogICAgICBhcnJheSB8fCAoYXJyYXkgPSBBcnJheShsZW5ndGgpKTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgYXJyYXlbaW5kZXgyXSA9IHNvdXJjZVtpbmRleDJdOwogICAgICB9CiAgICAgIHJldHVybiBhcnJheTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvcHlPYmplY3Qoc291cmNlLCBwcm9wcywgb2JqZWN0LCBjdXN0b21pemVyKSB7CiAgICAgIG9iamVjdCB8fCAob2JqZWN0ID0ge30pOwogICAgICB2YXIgaW5kZXgyID0gLTEsIGxlbmd0aCA9IHByb3BzLmxlbmd0aDsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgICAgdmFyIGtleTIgPSBwcm9wc1tpbmRleDJdOwogICAgICAgIHZhciBuZXdWYWx1ZSA9IGN1c3RvbWl6ZXIgPyBjdXN0b21pemVyKG9iamVjdFtrZXkyXSwgc291cmNlW2tleTJdLCBrZXkyLCBvYmplY3QsIHNvdXJjZSkgOiB2b2lkIDA7CiAgICAgICAgYXNzaWduVmFsdWUob2JqZWN0LCBrZXkyLCBuZXdWYWx1ZSA9PT0gdm9pZCAwID8gc291cmNlW2tleTJdIDogbmV3VmFsdWUpOwogICAgICB9CiAgICAgIHJldHVybiBvYmplY3Q7CiAgICB9CiAgICBmdW5jdGlvbiBjb3B5U3ltYm9scyhzb3VyY2UsIG9iamVjdCkgewogICAgICByZXR1cm4gY29weU9iamVjdChzb3VyY2UsIGdldFN5bWJvbHMoc291cmNlKSwgb2JqZWN0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldEFsbEtleXMob2JqZWN0KSB7CiAgICAgIHJldHVybiBiYXNlR2V0QWxsS2V5cyhvYmplY3QsIGtleXMyLCBnZXRTeW1ib2xzKTsKICAgIH0KICAgIGZ1bmN0aW9uIGdldE1hcERhdGEobWFwNywga2V5MikgewogICAgICB2YXIgZGF0YSA9IG1hcDcuX19kYXRhX187CiAgICAgIHJldHVybiBpc0tleWFibGUoa2V5MikgPyBkYXRhW3R5cGVvZiBrZXkyID09ICJzdHJpbmciID8gInN0cmluZyIgOiAiaGFzaCJdIDogZGF0YS5tYXA7CiAgICB9CiAgICBmdW5jdGlvbiBnZXROYXRpdmUob2JqZWN0LCBrZXkyKSB7CiAgICAgIHZhciB2YWx1ZTIgPSBnZXRWYWx1ZShvYmplY3QsIGtleTIpOwogICAgICByZXR1cm4gYmFzZUlzTmF0aXZlKHZhbHVlMikgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9CiAgICB2YXIgZ2V0U3ltYm9scyA9IG5hdGl2ZUdldFN5bWJvbHMgPyBvdmVyQXJnKG5hdGl2ZUdldFN5bWJvbHMsIE9iamVjdCkgOiBzdHViQXJyYXk7CiAgICB2YXIgZ2V0VGFnID0gYmFzZUdldFRhZzsKICAgIGlmIChEYXRhVmlldzIgJiYgZ2V0VGFnKG5ldyBEYXRhVmlldzIobmV3IEFycmF5QnVmZmVyKDEpKSkgIT0gZGF0YVZpZXdUYWcgfHwgTWFwMyAmJiBnZXRUYWcobmV3IE1hcDMoKSkgIT0gbWFwVGFnIHx8IFByb21pc2UyICYmIGdldFRhZyhQcm9taXNlMi5yZXNvbHZlKCkpICE9IHByb21pc2VUYWcgfHwgU2V0MiAmJiBnZXRUYWcobmV3IFNldDIoKSkgIT0gc2V0VGFnIHx8IFdlYWtNYXAyICYmIGdldFRhZyhuZXcgV2Vha01hcDIoKSkgIT0gd2Vha01hcFRhZykgewogICAgICBnZXRUYWcgPSBmdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgICB2YXIgcmVzdWx0ID0gb2JqZWN0VG9TdHJpbmcyLmNhbGwodmFsdWUyKSwgQ3RvciA9IHJlc3VsdCA9PSBvYmplY3RUYWcgPyB2YWx1ZTIuY29uc3RydWN0b3IgOiB2b2lkIDAsIGN0b3JTdHJpbmcgPSBDdG9yID8gdG9Tb3VyY2UoQ3RvcikgOiB2b2lkIDA7CiAgICAgICAgaWYgKGN0b3JTdHJpbmcpIHsKICAgICAgICAgIHN3aXRjaCAoY3RvclN0cmluZykgewogICAgICAgICAgICBjYXNlIGRhdGFWaWV3Q3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gZGF0YVZpZXdUYWc7CiAgICAgICAgICAgIGNhc2UgbWFwQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gbWFwVGFnOwogICAgICAgICAgICBjYXNlIHByb21pc2VDdG9yU3RyaW5nOgogICAgICAgICAgICAgIHJldHVybiBwcm9taXNlVGFnOwogICAgICAgICAgICBjYXNlIHNldEN0b3JTdHJpbmc6CiAgICAgICAgICAgICAgcmV0dXJuIHNldFRhZzsKICAgICAgICAgICAgY2FzZSB3ZWFrTWFwQ3RvclN0cmluZzoKICAgICAgICAgICAgICByZXR1cm4gd2Vha01hcFRhZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIGluaXRDbG9uZUFycmF5KGFycmF5KSB7CiAgICAgIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGgsIHJlc3VsdCA9IGFycmF5LmNvbnN0cnVjdG9yKGxlbmd0aCk7CiAgICAgIGlmIChsZW5ndGggJiYgdHlwZW9mIGFycmF5WzBdID09ICJzdHJpbmciICYmIGhhc093blByb3BlcnR5My5jYWxsKGFycmF5LCAiaW5kZXgiKSkgewogICAgICAgIHJlc3VsdC5pbmRleCA9IGFycmF5LmluZGV4OwogICAgICAgIHJlc3VsdC5pbnB1dCA9IGFycmF5LmlucHV0OwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpbml0Q2xvbmVPYmplY3Qob2JqZWN0KSB7CiAgICAgIHJldHVybiB0eXBlb2Ygb2JqZWN0LmNvbnN0cnVjdG9yID09ICJmdW5jdGlvbiIgJiYgIWlzUHJvdG90eXBlKG9iamVjdCkgPyBiYXNlQ3JlYXRlKGdldFByb3RvdHlwZShvYmplY3QpKSA6IHt9OwogICAgfQogICAgZnVuY3Rpb24gaW5pdENsb25lQnlUYWcob2JqZWN0LCB0YWcsIGNsb25lRnVuYywgaXNEZWVwKSB7CiAgICAgIHZhciBDdG9yID0gb2JqZWN0LmNvbnN0cnVjdG9yOwogICAgICBzd2l0Y2ggKHRhZykgewogICAgICAgIGNhc2UgYXJyYXlCdWZmZXJUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVBcnJheUJ1ZmZlcihvYmplY3QpOwogICAgICAgIGNhc2UgYm9vbFRhZzoKICAgICAgICBjYXNlIGRhdGVUYWc6CiAgICAgICAgICByZXR1cm4gbmV3IEN0b3IoK29iamVjdCk7CiAgICAgICAgY2FzZSBkYXRhVmlld1RhZzoKICAgICAgICAgIHJldHVybiBjbG9uZURhdGFWaWV3KG9iamVjdCwgaXNEZWVwKTsKICAgICAgICBjYXNlIGZsb2F0MzJUYWc6CiAgICAgICAgY2FzZSBmbG9hdDY0VGFnOgogICAgICAgIGNhc2UgaW50OFRhZzoKICAgICAgICBjYXNlIGludDE2VGFnOgogICAgICAgIGNhc2UgaW50MzJUYWc6CiAgICAgICAgY2FzZSB1aW50OFRhZzoKICAgICAgICBjYXNlIHVpbnQ4Q2xhbXBlZFRhZzoKICAgICAgICBjYXNlIHVpbnQxNlRhZzoKICAgICAgICBjYXNlIHVpbnQzMlRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVR5cGVkQXJyYXkob2JqZWN0LCBpc0RlZXApOwogICAgICAgIGNhc2UgbWFwVGFnOgogICAgICAgICAgcmV0dXJuIGNsb25lTWFwKG9iamVjdCwgaXNEZWVwLCBjbG9uZUZ1bmMpOwogICAgICAgIGNhc2UgbnVtYmVyVGFnOgogICAgICAgIGNhc2Ugc3RyaW5nVGFnOgogICAgICAgICAgcmV0dXJuIG5ldyBDdG9yKG9iamVjdCk7CiAgICAgICAgY2FzZSByZWdleHBUYWc6CiAgICAgICAgICByZXR1cm4gY2xvbmVSZWdFeHAob2JqZWN0KTsKICAgICAgICBjYXNlIHNldFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVNldChvYmplY3QsIGlzRGVlcCwgY2xvbmVGdW5jKTsKICAgICAgICBjYXNlIHN5bWJvbFRhZzoKICAgICAgICAgIHJldHVybiBjbG9uZVN5bWJvbChvYmplY3QpOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBpc0luZGV4KHZhbHVlMiwgbGVuZ3RoKSB7CiAgICAgIGxlbmd0aCA9IGxlbmd0aCA9PSBudWxsID8gTUFYX1NBRkVfSU5URUdFUiA6IGxlbmd0aDsKICAgICAgcmV0dXJuICEhbGVuZ3RoICYmICh0eXBlb2YgdmFsdWUyID09ICJudW1iZXIiIHx8IHJlSXNVaW50LnRlc3QodmFsdWUyKSkgJiYgKHZhbHVlMiA+IC0xICYmIHZhbHVlMiAlIDEgPT0gMCAmJiB2YWx1ZTIgPCBsZW5ndGgpOwogICAgfQogICAgZnVuY3Rpb24gaXNLZXlhYmxlKHZhbHVlMikgewogICAgICB2YXIgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICByZXR1cm4gdHlwZTUgPT0gInN0cmluZyIgfHwgdHlwZTUgPT0gIm51bWJlciIgfHwgdHlwZTUgPT0gInN5bWJvbCIgfHwgdHlwZTUgPT0gImJvb2xlYW4iID8gdmFsdWUyICE9PSAiX19wcm90b19fIiA6IHZhbHVlMiA9PT0gbnVsbDsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTWFza2VkKGZ1bmMpIHsKICAgICAgcmV0dXJuICEhbWFza1NyY0tleSAmJiBtYXNrU3JjS2V5IGluIGZ1bmM7CiAgICB9CiAgICBmdW5jdGlvbiBpc1Byb3RvdHlwZSh2YWx1ZTIpIHsKICAgICAgdmFyIEN0b3IgPSB2YWx1ZTIgJiYgdmFsdWUyLmNvbnN0cnVjdG9yLCBwcm90byA9IHR5cGVvZiBDdG9yID09ICJmdW5jdGlvbiIgJiYgQ3Rvci5wcm90b3R5cGUgfHwgb2JqZWN0UHJvdG87CiAgICAgIHJldHVybiB2YWx1ZTIgPT09IHByb3RvOwogICAgfQogICAgZnVuY3Rpb24gdG9Tb3VyY2UoZnVuYykgewogICAgICBpZiAoZnVuYyAhPSBudWxsKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBmdW5jVG9TdHJpbmcuY2FsbChmdW5jKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICB9CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHJldHVybiBmdW5jICsgIiI7CiAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb25lRGVlcCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGJhc2VDbG9uZSh2YWx1ZTIsIHRydWUsIHRydWUpOwogICAgfQogICAgZnVuY3Rpb24gZXEodmFsdWUyLCBvdGhlcikgewogICAgICByZXR1cm4gdmFsdWUyID09PSBvdGhlciB8fCB2YWx1ZTIgIT09IHZhbHVlMiAmJiBvdGhlciAhPT0gb3RoZXI7CiAgICB9CiAgICBmdW5jdGlvbiBpc0FyZ3VtZW50cyh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGlzQXJyYXlMaWtlT2JqZWN0KHZhbHVlMikgJiYgaGFzT3duUHJvcGVydHkzLmNhbGwodmFsdWUyLCAiY2FsbGVlIikgJiYgKCFwcm9wZXJ0eUlzRW51bWVyYWJsZS5jYWxsKHZhbHVlMiwgImNhbGxlZSIpIHx8IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMikgPT0gYXJnc1RhZyk7CiAgICB9CiAgICB2YXIgaXNBcnJheTMgPSBBcnJheS5pc0FycmF5OwogICAgZnVuY3Rpb24gaXNBcnJheUxpa2UyKHZhbHVlMikgewogICAgICByZXR1cm4gdmFsdWUyICE9IG51bGwgJiYgaXNMZW5ndGgodmFsdWUyLmxlbmd0aCkgJiYgIWlzRnVuY3Rpb24yKHZhbHVlMik7CiAgICB9CiAgICBmdW5jdGlvbiBpc0FycmF5TGlrZU9iamVjdCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIGlzT2JqZWN0TGlrZSh2YWx1ZTIpICYmIGlzQXJyYXlMaWtlMih2YWx1ZTIpOwogICAgfQogICAgdmFyIGlzQnVmZmVyID0gbmF0aXZlSXNCdWZmZXIgfHwgc3R1YkZhbHNlOwogICAgZnVuY3Rpb24gaXNGdW5jdGlvbjIodmFsdWUyKSB7CiAgICAgIHZhciB0YWcgPSBpc09iamVjdDModmFsdWUyKSA/IG9iamVjdFRvU3RyaW5nMi5jYWxsKHZhbHVlMikgOiAiIjsKICAgICAgcmV0dXJuIHRhZyA9PSBmdW5jVGFnIHx8IHRhZyA9PSBnZW5UYWc7CiAgICB9CiAgICBmdW5jdGlvbiBpc0xlbmd0aCh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHR5cGVvZiB2YWx1ZTIgPT0gIm51bWJlciIgJiYgdmFsdWUyID4gLTEgJiYgdmFsdWUyICUgMSA9PSAwICYmIHZhbHVlMiA8PSBNQVhfU0FGRV9JTlRFR0VSOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3QzKHZhbHVlMikgewogICAgICB2YXIgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICByZXR1cm4gISF2YWx1ZTIgJiYgKHR5cGU1ID09ICJvYmplY3QiIHx8IHR5cGU1ID09ICJmdW5jdGlvbiIpOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3RMaWtlKHZhbHVlMikgewogICAgICByZXR1cm4gISF2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PSAib2JqZWN0IjsKICAgIH0KICAgIGZ1bmN0aW9uIGtleXMyKG9iamVjdCkgewogICAgICByZXR1cm4gaXNBcnJheUxpa2UyKG9iamVjdCkgPyBhcnJheUxpa2VLZXlzKG9iamVjdCkgOiBiYXNlS2V5cyhvYmplY3QpOwogICAgfQogICAgZnVuY3Rpb24gc3R1YkFycmF5KCkgewogICAgICByZXR1cm4gW107CiAgICB9CiAgICBmdW5jdGlvbiBzdHViRmFsc2UoKSB7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gY2xvbmVEZWVwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnlAMi4xLjAvbm9kZV9tb2R1bGVzL2Zhc3QtanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzCnZhciByZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mYXN0LWpzb24tc3RhYmxlLXN0cmluZ2lmeUAyLjEuMC9ub2RlX21vZHVsZXMvZmFzdC1qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgbW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihkYXRhLCBvcHRzKSB7CiAgICAgIGlmICghb3B0cykgb3B0cyA9IHt9OwogICAgICBpZiAodHlwZW9mIG9wdHMgPT09ICJmdW5jdGlvbiIpIG9wdHMgPSB7IGNtcDogb3B0cyB9OwogICAgICB2YXIgY3ljbGVzID0gdHlwZW9mIG9wdHMuY3ljbGVzID09PSAiYm9vbGVhbiIgPyBvcHRzLmN5Y2xlcyA6IGZhbHNlOwogICAgICB2YXIgY21wID0gb3B0cy5jbXAgJiYgLyogQF9fUFVSRV9fICovIChmdW5jdGlvbihmNykgewogICAgICAgIHJldHVybiBmdW5jdGlvbihub2RlMikgewogICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKGE1LCBiNSkgewogICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhNSwgdmFsdWU6IG5vZGUyW2E1XSB9OwogICAgICAgICAgICB2YXIgYm9iaiA9IHsga2V5OiBiNSwgdmFsdWU6IG5vZGUyW2I1XSB9OwogICAgICAgICAgICByZXR1cm4gZjcoYW9iaiwgYm9iaik7CiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0pKG9wdHMuY21wKTsKICAgICAgdmFyIHNlZW4gPSBbXTsKICAgICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnk1KG5vZGUyKSB7CiAgICAgICAgaWYgKG5vZGUyICYmIG5vZGUyLnRvSlNPTiAmJiB0eXBlb2Ygbm9kZTIudG9KU09OID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBub2RlMiA9IG5vZGUyLnRvSlNPTigpOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZTIgPT09IHZvaWQgMCkgcmV0dXJuOwogICAgICAgIGlmICh0eXBlb2Ygbm9kZTIgPT0gIm51bWJlciIpIHJldHVybiBpc0Zpbml0ZShub2RlMikgPyAiIiArIG5vZGUyIDogIm51bGwiOwogICAgICAgIGlmICh0eXBlb2Ygbm9kZTIgIT09ICJvYmplY3QiKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkobm9kZTIpOwogICAgICAgIHZhciBpMTEsIG91dDsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShub2RlMikpIHsKICAgICAgICAgIG91dCA9ICJbIjsKICAgICAgICAgIGZvciAoaTExID0gMDsgaTExIDwgbm9kZTIubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICBpZiAoaTExKSBvdXQgKz0gIiwiOwogICAgICAgICAgICBvdXQgKz0gc3RyaW5naWZ5NShub2RlMltpMTFdKSB8fCAibnVsbCI7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gb3V0ICsgIl0iOwogICAgICAgIH0KICAgICAgICBpZiAobm9kZTIgPT09IG51bGwpIHJldHVybiAibnVsbCI7CiAgICAgICAgaWYgKHNlZW4uaW5kZXhPZihub2RlMikgIT09IC0xKSB7CiAgICAgICAgICBpZiAoY3ljbGVzKSByZXR1cm4gSlNPTi5zdHJpbmdpZnkoIl9fY3ljbGVfXyIpOwogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTiIpOwogICAgICAgIH0KICAgICAgICB2YXIgc2VlbkluZGV4ID0gc2Vlbi5wdXNoKG5vZGUyKSAtIDE7CiAgICAgICAgdmFyIGtleXMyID0gT2JqZWN0LmtleXMobm9kZTIpLnNvcnQoY21wICYmIGNtcChub2RlMikpOwogICAgICAgIG91dCA9ICIiOwogICAgICAgIGZvciAoaTExID0gMDsgaTExIDwga2V5czIubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgdmFyIGtleTIgPSBrZXlzMltpMTFdOwogICAgICAgICAgdmFyIHZhbHVlMiA9IHN0cmluZ2lmeTUobm9kZTJba2V5Ml0pOwogICAgICAgICAgaWYgKCF2YWx1ZTIpIGNvbnRpbnVlOwogICAgICAgICAgaWYgKG91dCkgb3V0ICs9ICIsIjsKICAgICAgICAgIG91dCArPSBKU09OLnN0cmluZ2lmeShrZXkyKSArICI6IiArIHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgc2Vlbi5zcGxpY2Uoc2VlbkluZGV4LCAxKTsKICAgICAgICByZXR1cm4gInsiICsgb3V0ICsgIn0iOwogICAgICB9KShkYXRhKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL3NtYXJ0anNvbi5wbHVnaW5zLmpzCnZhciBpbXBvcnRfbG9kYXNoLCBpbXBvcnRfZmFzdF9qc29uX3N0YWJsZV9zdHJpbmdpZnksIHN0YWJsZUpzb247CnZhciBpbml0X3NtYXJ0anNvbl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9zbWFydGpzb24ucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTEoKTsKICAgIGltcG9ydF9sb2Rhc2ggPSBfX3RvRVNNKHJlcXVpcmVfbG9kYXNoKCksIDEpOwogICAgaW1wb3J0X2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5ID0gX190b0VTTShyZXF1aXJlX2Zhc3RfanNvbl9zdGFibGVfc3RyaW5naWZ5KCksIDEpOwogICAgc3RhYmxlSnNvbiA9IGltcG9ydF9mYXN0X2pzb25fc3RhYmxlX3N0cmluZ2lmeS5kZWZhdWx0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcwpmdW5jdGlvbiBiYXNlNjRFbmNvZGUoZGF0YSkgewogIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgcmV0dXJuIEJ1ZmZlci5mcm9tKGRhdGEpLnRvU3RyaW5nKCJiYXNlNjQiKTsKICB9CiAgcmV0dXJuIGJ0b2EoU3RyaW5nLmZyb21DaGFyQ29kZSguLi5kYXRhKSk7Cn0KZnVuY3Rpb24gYmFzZTY0RGVjb2RlKHN0cikgewogIGlmICh0eXBlb2YgQnVmZmVyICE9PSAidW5kZWZpbmVkIikgewogICAgY29uc3QgYnVmID0gQnVmZmVyLmZyb20oc3RyLCAiYmFzZTY0Iik7CiAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ1ZmZlciwgYnVmLmJ5dGVPZmZzZXQsIGJ1Zi5ieXRlTGVuZ3RoKTsKICB9CiAgcmV0dXJuIG5ldyBVaW50OEFycmF5KEFycmF5LmZyb20oYXRvYihzdHIpKS5tYXAoKGNoYXIpID0+IGNoYXIuY2hhckNvZGVBdCgwKSkpOwp9CmZ1bmN0aW9uIHN0cmluZ2lmeSh2YWx1ZTIsIHNwYWNlMikgewogIHJldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZTIsIHJlcGxhY2VyLCBzcGFjZTIpOwp9CmZ1bmN0aW9uIHBhcnNlMih0ZXh0OSkgewogIHJldHVybiBKU09OLnBhcnNlKHRleHQ5LCByZXZpdmVyKTsKfQpmdW5jdGlvbiBpc0VuY29kZWRCdWZmZXIoeDMpIHsKICByZXR1cm4gaXNPYmplY3QoeDMpICYmIHgzLnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiBpc1N0cmluZyh4My5kYXRhKTsKfQpmdW5jdGlvbiBpc0J1ZmZlckxpa2UyKHgzKSB7CiAgcmV0dXJuIGlzT2JqZWN0KHgzKSAmJiAoeDMudHlwZSA9PT0gIkJ1ZmZlciIgJiYgKGlzQXJyYXkyKHgzLmRhdGEpIHx8IGlzU3RyaW5nKHgzLmRhdGEpKSkgfHwgeDMgaW5zdGFuY2VvZiBVaW50OEFycmF5Owp9CmZ1bmN0aW9uIGlzQXJyYXkyKHgzKSB7CiAgcmV0dXJuIEFycmF5LmlzQXJyYXkoeDMpOwp9CmZ1bmN0aW9uIGlzU3RyaW5nKHgzKSB7CiAgcmV0dXJuIHR5cGVvZiB4MyA9PT0gInN0cmluZyI7Cn0KZnVuY3Rpb24gaXNPYmplY3QoeDMpIHsKICByZXR1cm4gdHlwZW9mIHgzID09PSAib2JqZWN0IiAmJiB4MyAhPT0gbnVsbDsKfQp2YXIgcmVwbGFjZXIsIHJldml2ZXI7CnZhciBpbml0X2J1ZmZlcmhhbmRsaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRqc29uQDUuMi4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGpzb24vZGlzdF90cy9idWZmZXJoYW5kbGluZy5qcyIoKSB7CiAgICBpbml0X3NtYXJ0anNvbl9wbHVnaW5zKCk7CiAgICByZXBsYWNlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzQnVmZmVyTGlrZTIodmFsdWUyKSkgewogICAgICAgIGxldCBidWZmZXJEYXRhOwogICAgICAgIGlmICgiZGF0YSIgaW4gdmFsdWUyICYmIGlzQXJyYXkyKHZhbHVlMi5kYXRhKSkgewogICAgICAgICAgYnVmZmVyRGF0YSA9IG5ldyBVaW50OEFycmF5KHZhbHVlMi5kYXRhKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMiBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgICAgIGJ1ZmZlckRhdGEgPSB2YWx1ZTI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSAiYmFzZTY0OiIgKyBiYXNlNjRFbmNvZGUoYnVmZmVyRGF0YSk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHR5cGU6ICJFbmNvZGVkQnVmZmVyIiwKICAgICAgICAgIGRhdGE6IGJhc2U2NERhdGEKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9OwogICAgcmV2aXZlciA9IChrZXkyLCB2YWx1ZTIpID0+IHsKICAgICAgaWYgKGlzRW5jb2RlZEJ1ZmZlcih2YWx1ZTIpKSB7CiAgICAgICAgaWYgKGlzU3RyaW5nKHZhbHVlMi5kYXRhKSAmJiB2YWx1ZTIuZGF0YS5zdGFydHNXaXRoKCJiYXNlNjQ6IikpIHsKICAgICAgICAgIGNvbnN0IGJhc2U2NERhdGEgPSB2YWx1ZTIuZGF0YS5zbGljZSg3KTsKICAgICAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBiYXNlNjREZWNvZGUoYmFzZTY0RGF0YSk7CiAgICAgICAgICByZXR1cm4gYnVmZmVyMjsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHZhbHVlMjsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGpzb25ANS4yLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0anNvbi9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxMiA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxMiwgewogIFNtYXJ0anNvbjogKCkgPT4gU21hcnRqc29uLAogIGRlZXBFcXVhbEpzb25MU3RyaW5nczogKCkgPT4gZGVlcEVxdWFsSnNvbkxTdHJpbmdzLAogIGRlZXBFcXVhbE9iamVjdHM6ICgpID0+IGRlZXBFcXVhbE9iamVjdHMsCiAgZm9sZERlYzogKCkgPT4gZm9sZERlYywKICBwYXJzZTogKCkgPT4gcGFyc2UzLAogIHBhcnNlQmFzZTY0OiAoKSA9PiBwYXJzZUJhc2U2NCwKICBwYXJzZUpzb25MOiAoKSA9PiBwYXJzZUpzb25MLAogIHN0YWJsZU9uZVdheVN0cmluZ2lmeTogKCkgPT4gc3RhYmxlT25lV2F5U3RyaW5naWZ5LAogIHN0cmluZ2lmeTogKCkgPT4gc3RyaW5naWZ5MiwKICBzdHJpbmdpZnlCYXNlNjQ6ICgpID0+IHN0cmluZ2lmeUJhc2U2NCwKICBzdHJpbmdpZnlKc29uTDogKCkgPT4gc3RyaW5naWZ5SnNvbkwsCiAgc3RyaW5naWZ5UHJldHR5OiAoKSA9PiBzdHJpbmdpZnlQcmV0dHkKfSk7CnZhciBwYXJzZTMsIHBhcnNlSnNvbkwsIHN0cmluZ2lmeUpzb25MLCBzdGFibGVPbmVXYXlTdHJpbmdpZnksIHN0cmluZ2lmeTIsIHN0cmluZ2lmeVByZXR0eSwgc3RyaW5naWZ5QmFzZTY0LCBwYXJzZUJhc2U2NCwgU21hcnRqc29uLCBmb2xkRGVjLCBkZWVwRXF1YWxPYmplY3RzLCBkZWVwRXF1YWxKc29uTFN0cmluZ3M7CnZhciBpbml0X2Rpc3RfdHMxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0anNvbkA1LjIuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRqc29uL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydGpzb25fcGx1Z2lucygpOwogICAgaW5pdF9idWZmZXJoYW5kbGluZygpOwogICAgcGFyc2UzID0gcGFyc2UyOwogICAgcGFyc2VKc29uTCA9IChqc29ubERhdGEpID0+IHsKICAgICAgY29uc3QgbGluZXMgPSBqc29ubERhdGEuc3BsaXQoIlxuIik7CiAgICAgIGNvbnN0IHBhcnNlZERhdGEgPSBsaW5lcy5yZWR1Y2UoKGFjYywgbGluZSkgPT4gewogICAgICAgIGNvbnN0IHRyaW1tZWQgPSBsaW5lLnRyaW0oKTsKICAgICAgICBpZiAodHJpbW1lZC5sZW5ndGggPiAwKSB7CiAgICAgICAgICBhY2MucHVzaChwYXJzZTModHJpbW1lZCkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9LCBbXSk7CiAgICAgIHJldHVybiBwYXJzZWREYXRhOwogICAgfTsKICAgIHN0cmluZ2lmeUpzb25MID0gKGl0ZW1zKSA9PiB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0pID0+IHN0cmluZ2lmeTIoaXRlbSkpLmpvaW4oIlxuIik7CiAgICB9OwogICAgc3RhYmxlT25lV2F5U3RyaW5naWZ5ID0gKG9iakFyZywgc2ltcGxlT3JkZXJBcnJheSwgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IHZpc2l0ZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtTZXQoKTsKICAgICAgY29uc3Qgc2FuaXRpemUyID0gKHZhbCkgPT4gewogICAgICAgIGlmICh2YWwgPT09IG51bGwgfHwgdHlwZW9mIHZhbCAhPT0gIm9iamVjdCIpIHsKICAgICAgICAgIHJldHVybiB2YWw7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlcGxhY2VkID0gcmVwbGFjZXIoIiIsIHZhbCk7CiAgICAgICAgaWYgKHJlcGxhY2VkICYmIHJlcGxhY2VkLnR5cGUgPT09ICJFbmNvZGVkQnVmZmVyIiAmJiB0eXBlb2YgcmVwbGFjZWQuZGF0YSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJldHVybiByZXBsYWNlZDsKICAgICAgICB9CiAgICAgICAgaWYgKHZpc2l0ZWQuaGFzKHZhbCkpIHsKICAgICAgICAgIHJldHVybiAiX19jeWNsZV9fIjsKICAgICAgICB9CiAgICAgICAgdmlzaXRlZC5hZGQodmFsKTsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7CiAgICAgICAgICByZXR1cm4gdmFsLm1hcCgoaXRlbSkgPT4gc2FuaXRpemUyKGl0ZW0pKTsKICAgICAgICB9CiAgICAgICAgY29uc3Qgb3V0ID0ge307CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKHZhbCkpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9IHNhbml0aXplMih2YWxba2V5Ml0pOwogICAgICAgICAgfSBjYXRjaCAoZTExKSB7CiAgICAgICAgICAgIG91dFtrZXkyXSA9ICJfX3Vuc2VyaWFsaXphYmxlX18iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0OwogICAgICB9OwogICAgICBjb25zdCBvYmogPSBzYW5pdGl6ZTIob2JqQXJnKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHsKICAgICAgICAuLi5vcHRpb25zQXJnLAogICAgICAgIGN5Y2xlczogdHJ1ZQogICAgICB9OwogICAgICBpZiAoc2ltcGxlT3JkZXJBcnJheSAmJiAhb3B0aW9ucy5jbXApIHsKICAgICAgICBjb25zdCBvcmRlcjIgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICAgIHNpbXBsZU9yZGVyQXJyYXkuZm9yRWFjaCgoa2V5MiwgaWR4KSA9PiBvcmRlcjIuc2V0KGtleTIsIGlkeCkpOwogICAgICAgIG9wdGlvbnMuY21wID0gKGE1LCBiNSkgPT4gewogICAgICAgICAgY29uc3QgYUlkeCA9IG9yZGVyMi5oYXMoYTUua2V5KSA/IG9yZGVyMi5nZXQoYTUua2V5KSA6IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICAgIGNvbnN0IGJJZHggPSBvcmRlcjIuaGFzKGI1LmtleSkgPyBvcmRlcjIuZ2V0KGI1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBpZiAoYUlkeCAhPT0gYklkeCkKICAgICAgICAgICAgcmV0dXJuIGFJZHggLSBiSWR4OwogICAgICAgICAgcmV0dXJuIGE1LmtleSA8IGI1LmtleSA/IC0xIDogYTUua2V5ID4gYjUua2V5ID8gMSA6IDA7CiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gc3RhYmxlSnNvbihvYmosIG9wdGlvbnMpOwogICAgfTsKICAgIHN0cmluZ2lmeTIgPSAob2JqQXJnLCBzaW1wbGVPcmRlckFycmF5LCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgY29uc3QgYnVmZmVyZWRKc29uID0gc3RyaW5naWZ5KG9iakFyZyk7CiAgICAgIG9iakFyZyA9IEpTT04ucGFyc2UoYnVmZmVyZWRKc29uKTsKICAgICAgbGV0IG9wdGlvbnMgPSB7IC4uLm9wdGlvbnNBcmcgfTsKICAgICAgaWYgKHNpbXBsZU9yZGVyQXJyYXkgJiYgIW9wdGlvbnMuY21wKSB7CiAgICAgICAgY29uc3Qgb3JkZXIyID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgICBzaW1wbGVPcmRlckFycmF5LmZvckVhY2goKGtleTIsIGlkeCkgPT4gb3JkZXIyLnNldChrZXkyLCBpZHgpKTsKICAgICAgICBvcHRpb25zLmNtcCA9IChhNSwgYjUpID0+IHsKICAgICAgICAgIGNvbnN0IGFJZHggPSBvcmRlcjIuaGFzKGE1LmtleSkgPyBvcmRlcjIuZ2V0KGE1LmtleSkgOiBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBiSWR4ID0gb3JkZXIyLmhhcyhiNS5rZXkpID8gb3JkZXIyLmdldChiNS5rZXkpIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogICAgICAgICAgaWYgKGFJZHggIT09IGJJZHgpCiAgICAgICAgICAgIHJldHVybiBhSWR4IC0gYklkeDsKICAgICAgICAgIHJldHVybiBhNS5rZXkgPCBiNS5rZXkgPyAtMSA6IGE1LmtleSA+IGI1LmtleSA/IDEgOiAwOwogICAgICAgIH07CiAgICAgIH0KICAgICAgbGV0IHJldHVybkpzb24gPSBzdGFibGVKc29uKG9iakFyZywgb3B0aW9ucyk7CiAgICAgIHJldHVybiByZXR1cm5Kc29uOwogICAgfTsKICAgIHN0cmluZ2lmeVByZXR0eSA9IChvYmplY3RBcmcpID0+IHsKICAgICAgY29uc3Qgc3RyaW5naWZpZWQgPSBzdHJpbmdpZnkyKG9iamVjdEFyZyk7CiAgICAgIGNvbnN0IG9iamVjdCA9IEpTT04ucGFyc2Uoc3RyaW5naWZpZWQpOwogICAgICByZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqZWN0LCBudWxsLCAyKTsKICAgIH07CiAgICBzdHJpbmdpZnlCYXNlNjQgPSAoLi4uYXJncykgPT4gewogICAgICBjb25zdCBzdHJpbmdpZmllZFJlc3VsdCA9IHN0cmluZ2lmeTIoLi4uYXJncyk7CiAgICAgIHJldHVybiBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQuZW5jb2RlVXJpKHN0cmluZ2lmaWVkUmVzdWx0KTsKICAgIH07CiAgICBwYXJzZUJhc2U2NCA9IChiYXNlNjRKc29uU3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGJhc2U2NDIgPSBkaXN0X3RzX2V4cG9ydHMxMS5iYXNlNjQ7CiAgICAgIGNvbnN0IGRlY29kZUZuID0gYmFzZTY0Mi5kZWNvZGVVcmkgfHwgYmFzZTY0Mi5kZWNvZGU7CiAgICAgIGNvbnN0IHNpbXBsZVN0cmluZ2lmaWVkID0gZGVjb2RlRm4oYmFzZTY0SnNvblN0cmluZ0FyZyk7CiAgICAgIHJldHVybiBwYXJzZTMoc2ltcGxlU3RyaW5naWZpZWQpOwogICAgfTsKICAgIFNtYXJ0anNvbiA9IGNsYXNzIF9TbWFydGpzb24gewogICAgICAvKioKICAgICAgICogZW5mb2xkcyBkYXRhIGZyb20gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBzdGF0aWMgZW5mb2xkRnJvbU9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBuZXdJbnN0YW5jZSA9IG5ldyB0aGlzKCk7CiAgICAgICAgY29uc3Qgc2F2ZWFibGVzID0gbmV3SW5zdGFuY2Uuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBpbiBvYmplY3RBcmcpIHsKICAgICAgICAgIGlmIChzYXZlYWJsZXMuaW5kZXhPZihrZXlOYW1lKSAhPT0gLTEpIHsKICAgICAgICAgICAgbmV3SW5zdGFuY2Vba2V5TmFtZV0gPSBvYmplY3RBcmdba2V5TmFtZV07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBuZXdJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZW5mb2xkIGZyb20ganNvbgogICAgICAgKi8KICAgICAgc3RhdGljIGVuZm9sZEZyb21Kc29uKGpzb25BcmcpIHsKICAgICAgICBjb25zdCBvYmplY3RGcm9tSnNvbiA9IHBhcnNlMyhqc29uQXJnKTsKICAgICAgICByZXR1cm4gdGhpcy5lbmZvbGRGcm9tT2JqZWN0KG9iamVjdEZyb21Kc29uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZm9sZHMgYSBjbGFzcyBpbnRvIGFuIG9iamVjdAogICAgICAgKi8KICAgICAgZm9sZFRvT2JqZWN0KCkgewogICAgICAgIGNvbnN0IHRyYWNrU2V0ID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgICB0cmFja1NldC5hZGQodGhpcyk7CiAgICAgICAgcmV0dXJuIHRoaXMuZm9sZFRvT2JqZWN0SW50ZXJuYWwodHJhY2tTZXQpOwogICAgICB9CiAgICAgIGZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0ge307CiAgICAgICAgY29uc3QgZm9sZFZhbHVlID0gKHZhbCkgPT4gewogICAgICAgICAgaWYgKHZhbCBpbnN0YW5jZW9mIF9TbWFydGpzb24pIHsKICAgICAgICAgICAgaWYgKHRyYWNrU2V0Lmhhcyh2YWwpKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJjeWNsZSBkZXRlY3RlZCIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRyYWNrU2V0LmFkZCh2YWwpOwogICAgICAgICAgICByZXR1cm4gdmFsLmZvbGRUb09iamVjdEludGVybmFsKHRyYWNrU2V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHsKICAgICAgICAgICAgcmV0dXJuIHZhbC5tYXAoKGl0ZW0pID0+IGZvbGRWYWx1ZShpdGVtKSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaW1wb3J0X2xvZGFzaC5kZWZhdWx0KHZhbCk7CiAgICAgICAgfTsKICAgICAgICBjb25zdCBwcm9wcyA9IHRoaXMuc2F2ZWFibGVQcm9wZXJ0aWVzIHx8IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5TmFtZSBvZiBwcm9wcykgewogICAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpc1trZXlOYW1lXTsKICAgICAgICAgIHJlc3VsdFtrZXlOYW1lXSA9IGZvbGRWYWx1ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmb2xkcyBhIGNsYXNzIGludG8gYW4gb2JqZWN0CiAgICAgICAqLwogICAgICBmb2xkVG9Kc29uKCkgewogICAgICAgIGNvbnN0IGZvbGRlZE9iamVjdCA9IHRoaXMuZm9sZFRvT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHN0cmluZ2lmeTIoZm9sZGVkT2JqZWN0KTsKICAgICAgfQogICAgfTsKICAgIGZvbGREZWMgPSAoKSA9PiB7CiAgICAgIHJldHVybiAodGFyZ2V0LCBrZXkyKSA9PiB7CiAgICAgICAgaWYgKCF0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzKSB7CiAgICAgICAgICB0YXJnZXQuc2F2ZWFibGVQcm9wZXJ0aWVzID0gW107CiAgICAgICAgfQogICAgICAgIHRhcmdldC5zYXZlYWJsZVByb3BlcnRpZXMucHVzaChrZXkyKTsKICAgICAgfTsKICAgIH07CiAgICBkZWVwRXF1YWxPYmplY3RzID0gKG9iamVjdDEsIG9iamVjdDIpID0+IHsKICAgICAgY29uc3Qgb2JqZWN0MVN0cmluZyA9IHN0cmluZ2lmeTIob2JqZWN0MSk7CiAgICAgIGNvbnN0IG9iamVjdDJTdHJpbmcgPSBzdHJpbmdpZnkyKG9iamVjdDIpOwogICAgICByZXR1cm4gb2JqZWN0MVN0cmluZyA9PT0gb2JqZWN0MlN0cmluZzsKICAgIH07CiAgICBkZWVwRXF1YWxKc29uTFN0cmluZ3MgPSAoanNvbkxTdHJpbmcxLCBqc29uTFN0cmluZzIpID0+IHsKICAgICAgY29uc3QgZmlyc3RBcnJheSA9IHBhcnNlSnNvbkwoanNvbkxTdHJpbmcxKTsKICAgICAgY29uc3Qgc2Vjb25kQXJyYXkgPSBwYXJzZUpzb25MKGpzb25MU3RyaW5nMik7CiAgICAgIHJldHVybiBkZWVwRXF1YWxPYmplY3RzKGZpcnN0QXJyYXksIHNlY29uZEFycmF5KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtpZGJAOC4wLjMvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2lkYi9idWlsZC9pbmRleC5qcwp2YXIgYnVpbGRfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChidWlsZF9leHBvcnRzLCB7CiAgZGVsZXRlREI6ICgpID0+IGRlbGV0ZURCLAogIG9wZW5EQjogKCkgPT4gb3BlbkRCLAogIHVud3JhcDogKCkgPT4gdW53cmFwLAogIHdyYXA6ICgpID0+IHdyYXAKfSk7CmZ1bmN0aW9uIGdldElkYlByb3h5YWJsZVR5cGVzKCkgewogIHJldHVybiBpZGJQcm94eWFibGVUeXBlcyB8fCAoaWRiUHJveHlhYmxlVHlwZXMgPSBbCiAgICBJREJEYXRhYmFzZSwKICAgIElEQk9iamVjdFN0b3JlLAogICAgSURCSW5kZXgsCiAgICBJREJDdXJzb3IsCiAgICBJREJUcmFuc2FjdGlvbgogIF0pOwp9CmZ1bmN0aW9uIGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkgewogIHJldHVybiBjdXJzb3JBZHZhbmNlTWV0aG9kcyB8fCAoY3Vyc29yQWR2YW5jZU1ldGhvZHMgPSBbCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmFkdmFuY2UsCiAgICBJREJDdXJzb3IucHJvdG90eXBlLmNvbnRpbnVlLAogICAgSURCQ3Vyc29yLnByb3RvdHlwZS5jb250aW51ZVByaW1hcnlLZXkKICBdKTsKfQpmdW5jdGlvbiBwcm9taXNpZnlSZXF1ZXN0KHJlcXVlc3QpIHsKICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgIGNvbnN0IHVubGlzdGVuID0gKCkgPT4gewogICAgICByZXF1ZXN0LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgICAgcmVxdWVzdC5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBzdWNjZXNzID0gKCkgPT4gewogICAgICByZXNvbHZlMih3cmFwKHJlcXVlc3QucmVzdWx0KSk7CiAgICAgIHVubGlzdGVuKCk7CiAgICB9OwogICAgY29uc3QgZXJyb3IgPSAoKSA9PiB7CiAgICAgIHJlamVjdChyZXF1ZXN0LmVycm9yKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInN1Y2Nlc3MiLCBzdWNjZXNzKTsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLCBlcnJvcik7CiAgfSk7CiAgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLnNldChwcm9taXNlLCByZXF1ZXN0KTsKICByZXR1cm4gcHJvbWlzZTsKfQpmdW5jdGlvbiBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHJhbnNhY3Rpb25Eb25lTWFwLmhhcyh0eCkpCiAgICByZXR1cm47CiAgY29uc3QgZG9uZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICBjb25zdCB1bmxpc3RlbiA9ICgpID0+IHsKICAgICAgdHgucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY29tcGxldGUiLCBjb21wbGV0ZSk7CiAgICAgIHR4LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgICB0eC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsIGVycm9yKTsKICAgIH07CiAgICBjb25zdCBjb21wbGV0ZSA9ICgpID0+IHsKICAgICAgcmVzb2x2ZTIoKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICBjb25zdCBlcnJvciA9ICgpID0+IHsKICAgICAgcmVqZWN0KHR4LmVycm9yIHx8IG5ldyBET01FeGNlcHRpb24oIkFib3J0RXJyb3IiLCAiQWJvcnRFcnJvciIpKTsKICAgICAgdW5saXN0ZW4oKTsKICAgIH07CiAgICB0eC5hZGRFdmVudExpc3RlbmVyKCJjb21wbGV0ZSIsIGNvbXBsZXRlKTsKICAgIHR4LmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIiwgZXJyb3IpOwogICAgdHguYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLCBlcnJvcik7CiAgfSk7CiAgdHJhbnNhY3Rpb25Eb25lTWFwLnNldCh0eCwgZG9uZSk7Cn0KZnVuY3Rpb24gcmVwbGFjZVRyYXBzKGNhbGxiYWNrKSB7CiAgaWRiUHJveHlUcmFwcyA9IGNhbGxiYWNrKGlkYlByb3h5VHJhcHMpOwp9CmZ1bmN0aW9uIHdyYXBGdW5jdGlvbihmdW5jKSB7CiAgaWYgKGdldEN1cnNvckFkdmFuY2VNZXRob2RzKCkuaW5jbHVkZXMoZnVuYykpIHsKICAgIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICAgIGZ1bmMuYXBwbHkodW53cmFwKHRoaXMpLCBhcmdzKTsKICAgICAgcmV0dXJuIHdyYXAodGhpcy5yZXF1ZXN0KTsKICAgIH07CiAgfQogIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICByZXR1cm4gd3JhcChmdW5jLmFwcGx5KHVud3JhcCh0aGlzKSwgYXJncykpOwogIH07Cn0KZnVuY3Rpb24gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gImZ1bmN0aW9uIikKICAgIHJldHVybiB3cmFwRnVuY3Rpb24odmFsdWUyKTsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pCiAgICBjYWNoZURvbmVQcm9taXNlRm9yVHJhbnNhY3Rpb24odmFsdWUyKTsKICBpZiAoaW5zdGFuY2VPZkFueSh2YWx1ZTIsIGdldElkYlByb3h5YWJsZVR5cGVzKCkpKQogICAgcmV0dXJuIG5ldyBQcm94eSh2YWx1ZTIsIGlkYlByb3h5VHJhcHMpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gd3JhcCh2YWx1ZTIpIHsKICBpZiAodmFsdWUyIGluc3RhbmNlb2YgSURCUmVxdWVzdCkKICAgIHJldHVybiBwcm9taXNpZnlSZXF1ZXN0KHZhbHVlMik7CiAgaWYgKHRyYW5zZm9ybUNhY2hlLmhhcyh2YWx1ZTIpKQogICAgcmV0dXJuIHRyYW5zZm9ybUNhY2hlLmdldCh2YWx1ZTIpOwogIGNvbnN0IG5ld1ZhbHVlID0gdHJhbnNmb3JtQ2FjaGFibGVWYWx1ZSh2YWx1ZTIpOwogIGlmIChuZXdWYWx1ZSAhPT0gdmFsdWUyKSB7CiAgICB0cmFuc2Zvcm1DYWNoZS5zZXQodmFsdWUyLCBuZXdWYWx1ZSk7CiAgICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KG5ld1ZhbHVlLCB2YWx1ZTIpOwogIH0KICByZXR1cm4gbmV3VmFsdWU7Cn0KZnVuY3Rpb24gb3BlbkRCKG5hbWUsIHZlcnNpb24yLCB7IGJsb2NrZWQsIHVwZ3JhZGUsIGJsb2NraW5nLCB0ZXJtaW5hdGVkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIub3BlbihuYW1lLCB2ZXJzaW9uMik7CiAgY29uc3Qgb3BlblByb21pc2UgPSB3cmFwKHJlcXVlc3QpOwogIGlmICh1cGdyYWRlKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoInVwZ3JhZGVuZWVkZWQiLCAoZXZlbnQpID0+IHsKICAgICAgdXBncmFkZSh3cmFwKHJlcXVlc3QucmVzdWx0KSwgZXZlbnQub2xkVmVyc2lvbiwgZXZlbnQubmV3VmVyc2lvbiwgd3JhcChyZXF1ZXN0LnRyYW5zYWN0aW9uKSwgZXZlbnQpOwogICAgfSk7CiAgfQogIGlmIChibG9ja2VkKSB7CiAgICByZXF1ZXN0LmFkZEV2ZW50TGlzdGVuZXIoImJsb2NrZWQiLCAoZXZlbnQpID0+IGJsb2NrZWQoCiAgICAgIC8vIENhc3RpbmcgZHVlIHRvIGh0dHBzOi8vZ2l0aHViLmNvbS9taWNyb3NvZnQvVHlwZVNjcmlwdC1ET00tbGliLWdlbmVyYXRvci9wdWxsLzE0MDUKICAgICAgZXZlbnQub2xkVmVyc2lvbiwKICAgICAgZXZlbnQubmV3VmVyc2lvbiwKICAgICAgZXZlbnQKICAgICkpOwogIH0KICBvcGVuUHJvbWlzZS50aGVuKChkYikgPT4gewogICAgaWYgKHRlcm1pbmF0ZWQpCiAgICAgIGRiLmFkZEV2ZW50TGlzdGVuZXIoImNsb3NlIiwgKCkgPT4gdGVybWluYXRlZCgpKTsKICAgIGlmIChibG9ja2luZykgewogICAgICBkYi5hZGRFdmVudExpc3RlbmVyKCJ2ZXJzaW9uY2hhbmdlIiwgKGV2ZW50KSA9PiBibG9ja2luZyhldmVudC5vbGRWZXJzaW9uLCBldmVudC5uZXdWZXJzaW9uLCBldmVudCkpOwogICAgfQogIH0pLmNhdGNoKCgpID0+IHsKICB9KTsKICByZXR1cm4gb3BlblByb21pc2U7Cn0KZnVuY3Rpb24gZGVsZXRlREIobmFtZSwgeyBibG9ja2VkIH0gPSB7fSkgewogIGNvbnN0IHJlcXVlc3QgPSBpbmRleGVkREIuZGVsZXRlRGF0YWJhc2UobmFtZSk7CiAgaWYgKGJsb2NrZWQpIHsKICAgIHJlcXVlc3QuYWRkRXZlbnRMaXN0ZW5lcigiYmxvY2tlZCIsIChldmVudCkgPT4gYmxvY2tlZCgKICAgICAgLy8gQ2FzdGluZyBkdWUgdG8gaHR0cHM6Ly9naXRodWIuY29tL21pY3Jvc29mdC9UeXBlU2NyaXB0LURPTS1saWItZ2VuZXJhdG9yL3B1bGwvMTQwNQogICAgICBldmVudC5vbGRWZXJzaW9uLAogICAgICBldmVudAogICAgKSk7CiAgfQogIHJldHVybiB3cmFwKHJlcXVlc3QpLnRoZW4oKCkgPT4gdm9pZCAwKTsKfQpmdW5jdGlvbiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB7CiAgaWYgKCEodGFyZ2V0IGluc3RhbmNlb2YgSURCRGF0YWJhc2UgJiYgIShwcm9wIGluIHRhcmdldCkgJiYgdHlwZW9mIHByb3AgPT09ICJzdHJpbmciKSkgewogICAgcmV0dXJuOwogIH0KICBpZiAoY2FjaGVkTWV0aG9kcy5nZXQocHJvcCkpCiAgICByZXR1cm4gY2FjaGVkTWV0aG9kcy5nZXQocHJvcCk7CiAgY29uc3QgdGFyZ2V0RnVuY05hbWUgPSBwcm9wLnJlcGxhY2UoL0Zyb21JbmRleCQvLCAiIik7CiAgY29uc3QgdXNlSW5kZXggPSBwcm9wICE9PSB0YXJnZXRGdW5jTmFtZTsKICBjb25zdCBpc1dyaXRlID0gd3JpdGVNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKTsKICBpZiAoCiAgICAvLyBCYWlsIGlmIHRoZSB0YXJnZXQgZG9lc24ndCBleGlzdCBvbiB0aGUgdGFyZ2V0LiBFZywgZ2V0QWxsIGlzbid0IGluIEVkZ2UuCiAgICAhKHRhcmdldEZ1bmNOYW1lIGluICh1c2VJbmRleCA/IElEQkluZGV4IDogSURCT2JqZWN0U3RvcmUpLnByb3RvdHlwZSkgfHwgIShpc1dyaXRlIHx8IHJlYWRNZXRob2RzLmluY2x1ZGVzKHRhcmdldEZ1bmNOYW1lKSkKICApIHsKICAgIHJldHVybjsKICB9CiAgY29uc3QgbWV0aG9kID0gYXN5bmMgZnVuY3Rpb24oc3RvcmVOYW1lLCAuLi5hcmdzKSB7CiAgICBjb25zdCB0eCA9IHRoaXMudHJhbnNhY3Rpb24oc3RvcmVOYW1lLCBpc1dyaXRlID8gInJlYWR3cml0ZSIgOiAicmVhZG9ubHkiKTsKICAgIGxldCB0YXJnZXQyID0gdHguc3RvcmU7CiAgICBpZiAodXNlSW5kZXgpCiAgICAgIHRhcmdldDIgPSB0YXJnZXQyLmluZGV4KGFyZ3Muc2hpZnQoKSk7CiAgICByZXR1cm4gKGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgdGFyZ2V0Mlt0YXJnZXRGdW5jTmFtZV0oLi4uYXJncyksCiAgICAgIGlzV3JpdGUgJiYgdHguZG9uZQogICAgXSkpWzBdOwogIH07CiAgY2FjaGVkTWV0aG9kcy5zZXQocHJvcCwgbWV0aG9kKTsKICByZXR1cm4gbWV0aG9kOwp9CmFzeW5jIGZ1bmN0aW9uKiBpdGVyYXRlKC4uLmFyZ3MpIHsKICBsZXQgY3Vyc29yID0gdGhpczsKICBpZiAoIShjdXJzb3IgaW5zdGFuY2VvZiBJREJDdXJzb3IpKSB7CiAgICBjdXJzb3IgPSBhd2FpdCBjdXJzb3Iub3BlbkN1cnNvciguLi5hcmdzKTsKICB9CiAgaWYgKCFjdXJzb3IpCiAgICByZXR1cm47CiAgY3Vyc29yID0gY3Vyc29yOwogIGNvbnN0IHByb3hpZWRDdXJzb3IgPSBuZXcgUHJveHkoY3Vyc29yLCBjdXJzb3JJdGVyYXRvclRyYXBzKTsKICBpdHRyUHJveGllZEN1cnNvclRvT3JpZ2luYWxQcm94eS5zZXQocHJveGllZEN1cnNvciwgY3Vyc29yKTsKICByZXZlcnNlVHJhbnNmb3JtQ2FjaGUuc2V0KHByb3hpZWRDdXJzb3IsIHVud3JhcChjdXJzb3IpKTsKICB3aGlsZSAoY3Vyc29yKSB7CiAgICB5aWVsZCBwcm94aWVkQ3Vyc29yOwogICAgY3Vyc29yID0gYXdhaXQgKGFkdmFuY2VSZXN1bHRzLmdldChwcm94aWVkQ3Vyc29yKSB8fCBjdXJzb3IuY29udGludWUoKSk7CiAgICBhZHZhbmNlUmVzdWx0cy5kZWxldGUocHJveGllZEN1cnNvcik7CiAgfQp9CmZ1bmN0aW9uIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgewogIHJldHVybiBwcm9wID09PSBTeW1ib2wuYXN5bmNJdGVyYXRvciAmJiBpbnN0YW5jZU9mQW55KHRhcmdldCwgW0lEQkluZGV4LCBJREJPYmplY3RTdG9yZSwgSURCQ3Vyc29yXSkgfHwgcHJvcCA9PT0gIml0ZXJhdGUiICYmIGluc3RhbmNlT2ZBbnkodGFyZ2V0LCBbSURCSW5kZXgsIElEQk9iamVjdFN0b3JlXSk7Cn0KdmFyIGluc3RhbmNlT2ZBbnksIGlkYlByb3h5YWJsZVR5cGVzLCBjdXJzb3JBZHZhbmNlTWV0aG9kcywgdHJhbnNhY3Rpb25Eb25lTWFwLCB0cmFuc2Zvcm1DYWNoZSwgcmV2ZXJzZVRyYW5zZm9ybUNhY2hlLCBpZGJQcm94eVRyYXBzLCB1bndyYXAsIHJlYWRNZXRob2RzLCB3cml0ZU1ldGhvZHMsIGNhY2hlZE1ldGhvZHMsIGFkdmFuY2VNZXRob2RQcm9wcywgbWV0aG9kTWFwLCBhZHZhbmNlUmVzdWx0cywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHksIGN1cnNvckl0ZXJhdG9yVHJhcHM7CnZhciBpbml0X2J1aWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgraWRiQDguMC4zL25vZGVfbW9kdWxlcy9AdGVtcGZpeC9pZGIvYnVpbGQvaW5kZXguanMiKCkgewogICAgaW5zdGFuY2VPZkFueSA9IChvYmplY3QsIGNvbnN0cnVjdG9ycykgPT4gY29uc3RydWN0b3JzLnNvbWUoKGMxMSkgPT4gb2JqZWN0IGluc3RhbmNlb2YgYzExKTsKICAgIHRyYW5zYWN0aW9uRG9uZU1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgdHJhbnNmb3JtQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIHJldmVyc2VUcmFuc2Zvcm1DYWNoZSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaWRiUHJveHlUcmFwcyA9IHsKICAgICAgZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24pIHsKICAgICAgICAgIGlmIChwcm9wID09PSAiZG9uZSIpCiAgICAgICAgICAgIHJldHVybiB0cmFuc2FjdGlvbkRvbmVNYXAuZ2V0KHRhcmdldCk7CiAgICAgICAgICBpZiAocHJvcCA9PT0gInN0b3JlIikgewogICAgICAgICAgICByZXR1cm4gcmVjZWl2ZXIub2JqZWN0U3RvcmVOYW1lc1sxXSA/IHZvaWQgMCA6IHJlY2VpdmVyLm9iamVjdFN0b3JlKHJlY2VpdmVyLm9iamVjdFN0b3JlTmFtZXNbMF0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gd3JhcCh0YXJnZXRbcHJvcF0pOwogICAgICB9LAogICAgICBzZXQodGFyZ2V0LCBwcm9wLCB2YWx1ZTIpIHsKICAgICAgICB0YXJnZXRbcHJvcF0gPSB2YWx1ZTI7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0sCiAgICAgIGhhcyh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAodGFyZ2V0IGluc3RhbmNlb2YgSURCVHJhbnNhY3Rpb24gJiYgKHByb3AgPT09ICJkb25lIiB8fCBwcm9wID09PSAic3RvcmUiKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldDsKICAgICAgfQogICAgfTsKICAgIHVud3JhcCA9ICh2YWx1ZTIpID0+IHJldmVyc2VUcmFuc2Zvcm1DYWNoZS5nZXQodmFsdWUyKTsKICAgIHJlYWRNZXRob2RzID0gWyJnZXQiLCAiZ2V0S2V5IiwgImdldEFsbCIsICJnZXRBbGxLZXlzIiwgImNvdW50Il07CiAgICB3cml0ZU1ldGhvZHMgPSBbInB1dCIsICJhZGQiLCAiZGVsZXRlIiwgImNsZWFyIl07CiAgICBjYWNoZWRNZXRob2RzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHJlcGxhY2VUcmFwcygob2xkVHJhcHMpID0+ICh7CiAgICAgIC4uLm9sZFRyYXBzLAogICAgICBnZXQ6ICh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSA9PiBnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5nZXQodGFyZ2V0LCBwcm9wLCByZWNlaXZlciksCiAgICAgIGhhczogKHRhcmdldCwgcHJvcCkgPT4gISFnZXRNZXRob2QodGFyZ2V0LCBwcm9wKSB8fCBvbGRUcmFwcy5oYXModGFyZ2V0LCBwcm9wKQogICAgfSkpOwogICAgYWR2YW5jZU1ldGhvZFByb3BzID0gWyJjb250aW51ZSIsICJjb250aW51ZVByaW1hcnlLZXkiLCAiYWR2YW5jZSJdOwogICAgbWV0aG9kTWFwID0ge307CiAgICBhZHZhbmNlUmVzdWx0cyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgV2Vha01hcCgpOwogICAgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGN1cnNvckl0ZXJhdG9yVHJhcHMgPSB7CiAgICAgIGdldCh0YXJnZXQsIHByb3ApIHsKICAgICAgICBpZiAoIWFkdmFuY2VNZXRob2RQcm9wcy5pbmNsdWRlcyhwcm9wKSkKICAgICAgICAgIHJldHVybiB0YXJnZXRbcHJvcF07CiAgICAgICAgbGV0IGNhY2hlZEZ1bmMgPSBtZXRob2RNYXBbcHJvcF07CiAgICAgICAgaWYgKCFjYWNoZWRGdW5jKSB7CiAgICAgICAgICBjYWNoZWRGdW5jID0gbWV0aG9kTWFwW3Byb3BdID0gZnVuY3Rpb24oLi4uYXJncykgewogICAgICAgICAgICBhZHZhbmNlUmVzdWx0cy5zZXQodGhpcywgaXR0clByb3hpZWRDdXJzb3JUb09yaWdpbmFsUHJveHkuZ2V0KHRoaXMpW3Byb3BdKC4uLmFyZ3MpKTsKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBjYWNoZWRGdW5jOwogICAgICB9CiAgICB9OwogICAgcmVwbGFjZVRyYXBzKChvbGRUcmFwcykgPT4gKHsKICAgICAgLi4ub2xkVHJhcHMsCiAgICAgIGdldCh0YXJnZXQsIHByb3AsIHJlY2VpdmVyKSB7CiAgICAgICAgaWYgKGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkpCiAgICAgICAgICByZXR1cm4gaXRlcmF0ZTsKICAgICAgICByZXR1cm4gb2xkVHJhcHMuZ2V0KHRhcmdldCwgcHJvcCwgcmVjZWl2ZXIpOwogICAgICB9LAogICAgICBoYXModGFyZ2V0LCBwcm9wKSB7CiAgICAgICAgcmV0dXJuIGlzSXRlcmF0b3JQcm9wKHRhcmdldCwgcHJvcCkgfHwgb2xkVHJhcHMuaGFzKHRhcmdldCwgcHJvcCk7CiAgICAgIH0KICAgIH0pKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnN0b3JlX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvd2Vic3RvcmUucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHM3KCk7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaW5pdF9idWlsZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMKdmFyIFdlYlN0b3JlOwp2YXIgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3dlYnN0b3JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic3RvcmVAMi4wLjIwL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzdG9yZS9kaXN0X3RzL3dlYnN0b3JlLmNsYXNzZXMud2Vic3RvcmUuanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBXZWJTdG9yZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuaW5pdENhbGxlZCA9IGZhbHNlOwogICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgaW5pdCgpIHsKICAgICAgICBpZiAodGhpcy5pbml0Q2FsbGVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbml0Q2FsbGVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBzbWFydGVudiA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMC5TbWFydGVudigpOwogICAgICAgIGlmICghc21hcnRlbnYuaXNCcm93c2VyICYmICFnbG9iYWxUaGlzLmluZGV4ZWREQikgewogICAgICAgICAgY29uc29sZS5sb2coImhleSIpOwogICAgICAgICAgY29uc29sZS5sb2coZ2xvYmFsVGhpcy5pbmRleGVkREIpOwogICAgICAgICAgYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiL2F1dG8iKTsKICAgICAgICAgIGlmICghZ2xvYmFsVGhpcy5pbmRleGVkREIpIHsKICAgICAgICAgICAgY29uc3QgbW9kID0gYXdhaXQgc21hcnRlbnYuZ2V0U2FmZU5vZGVNb2R1bGUoImZha2UtaW5kZXhlZGRiIik7CiAgICAgICAgICAgIGdsb2JhbFRoaXMuaW5kZXhlZERCID0gbmV3IG1vZC5JREJGYWN0b3J5KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMuZGIgPSBhd2FpdCBidWlsZF9leHBvcnRzLm9wZW5EQih0aGlzLm9wdGlvbnMuZGJOYW1lLCAxLCB7CiAgICAgICAgICB1cGdyYWRlOiAoZGIpID0+IHsKICAgICAgICAgICAgZGIuY3JlYXRlT2JqZWN0U3RvcmUodGhpcy5vcHRpb25zLnN0b3JlTmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgYXN5bmMgZ2V0KGtleTIpIHsKICAgICAgICBhd2FpdCB0aGlzLmluaXQoKTsKICAgICAgICByZXR1cm4gdGhpcy5kYi5nZXQodGhpcy5vcHRpb25zLnN0b3JlTmFtZSwga2V5Mik7CiAgICAgIH0KICAgICAgYXN5bmMgY2hlY2soa2V5QXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5nZXQoa2V5QXJnKTsKICAgICAgICByZXR1cm4gISFyZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0KGtleTIsIHZhbCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLnB1dCh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lLCB2YWwsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGRlbGV0ZShrZXkyKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZGVsZXRlKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUsIGtleTIpOwogICAgICB9CiAgICAgIGFzeW5jIGNsZWFyKCkgewogICAgICAgIGF3YWl0IHRoaXMuaW5pdCgpOwogICAgICAgIHJldHVybiB0aGlzLmRiLmNsZWFyKHRoaXMub3B0aW9ucy5zdG9yZU5hbWUpOwogICAgICB9CiAgICAgIGFzeW5jIGtleXMoKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0KCk7CiAgICAgICAgcmV0dXJuIHRoaXMuZGIuZ2V0QWxsS2V5cyh0aGlzLm9wdGlvbnMuc3RvcmVOYW1lKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzCnZhciBUeXBlZHJlcXVlc3RDYWNoZTsKdmFyIGluaXRfd2Vic3RvcmVfY2xhc3Nlc190eXBlZHJlcXVlc3RjYWNoZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy93ZWJzdG9yZS5jbGFzc2VzLnR5cGVkcmVxdWVzdGNhY2hlLmpzIigpIHsKICAgIGluaXRfd2Vic3RvcmVfY2xhc3Nlc193ZWJzdG9yZSgpOwogICAgaW5pdF93ZWJzdG9yZV9wbHVnaW5zKCk7CiAgICBUeXBlZHJlcXVlc3RDYWNoZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoZG9tYWluQXJnID0gImRlZmF1bHQiKSB7CiAgICAgICAgdGhpcy53ZWJzdG9yZSA9IG5ldyBXZWJTdG9yZSh7CiAgICAgICAgICBkYk5hbWU6ICJ0clN0b3JlIiwKICAgICAgICAgIHN0b3JlTmFtZTogYHRyU3RvcmUtJHtkb21haW5Bcmd9YAogICAgICAgIH0pOwogICAgICB9CiAgICAgIGJ1aWxkS2V5KHJlcXVlc3RBcmcpIHsKICAgICAgICByZXR1cm4gZGlzdF90c19leHBvcnRzMTIuc3RyaW5naWZ5KHsKICAgICAgICAgIG1ldGhvZDogcmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiByZXF1ZXN0QXJnLnJlcXVlc3QKICAgICAgICB9KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc3RvcmVzIGJ5IHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGlmICghdHlwZWRyZXF1ZXN0QXJnLnJlc3BvbnNlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSBjYW5ub3Qgc3RvcmUgcmVxdWVzdHMgd2l0aG91dCBhIHJlc3BvbnNlIHByZXNlbnQiKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzdG9yZS5zZXQodGhpcy5idWlsZEtleSh0eXBlZHJlcXVlc3RBcmcpLCB0eXBlZHJlcXVlc3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXQgYnkgZnVsbCB0eW9lZHJlcXVlc3QgYnkgcGFydGlhbCB0eXBlZHJlcXVlc3QKICAgICAgICogQHBhcmFtIHR5cGVkcmVxdWVzdGFyZwogICAgICAgKi8KICAgICAgYXN5bmMgZ2V0QnlSZXF1ZXN0KHR5cGVkcmVxdWVzdEFyZykgewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMud2Vic3RvcmUuZ2V0KHRoaXMuYnVpbGRLZXkodHlwZWRyZXF1ZXN0QXJnKSk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnN0b3JlQDIuMC4yMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic3RvcmUvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTMgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTMsIHsKICBUeXBlZHJlcXVlc3RDYWNoZTogKCkgPT4gVHlwZWRyZXF1ZXN0Q2FjaGUsCiAgV2ViU3RvcmU6ICgpID0+IFdlYlN0b3JlCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzdG9yZUAyLjAuMjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnN0b3JlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzdG9yZV9jbGFzc2VzX3R5cGVkcmVxdWVzdGNhY2hlKCk7CiAgICBpbml0X3dlYnN0b3JlX2NsYXNzZXNfd2Vic3RvcmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5wbHVnaW5zLmpzCnZhciBpbml0X3dlYnJlcXVlc3RfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnJlcXVlc3RAMy4wLjM3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJyZXF1ZXN0L2Rpc3RfdHMvd2VicmVxdWVzdC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czEwKCk7CiAgICBpbml0X2Rpc3RfdHMxMigpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEAzLjAuMzcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTQgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTQsIHsKICBXZWJSZXF1ZXN0OiAoKSA9PiBXZWJSZXF1ZXN0Cn0pOwp2YXIgV2ViUmVxdWVzdDsKdmFyIGluaXRfZGlzdF90czE0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2VicmVxdWVzdEAzLjAuMzcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnJlcXVlc3QvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X3dlYnJlcXVlc3RfcGx1Z2lucygpOwogICAgV2ViUmVxdWVzdCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgdGhpcy5vcHRpb25zQXJnID0gb3B0aW9uc0FyZzsKICAgICAgICB0aGlzLmNhY2hlU3RvcmUgPSBuZXcgZGlzdF90c19leHBvcnRzMTMuV2ViU3RvcmUoewogICAgICAgICAgZGJOYW1lOiAid2VicmVxdWVzdCIsCiAgICAgICAgICBzdG9yZU5hbWU6ICJ3ZWJyZXF1ZXN0IgogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgICAgIGxvZ2dpbmc6IHRydWUsCiAgICAgICAgICAuLi5vcHRpb25zQXJnCiAgICAgICAgfTsKICAgICAgfQogICAgICBhc3luYyBnZXRKc29uKHVybEFyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiR0VUIiwKICAgICAgICAgIHVzZUNhY2hlOiB1c2VDYWNoZUFyZwogICAgICAgIH0pOwogICAgICAgIGNvbnN0IHJlc3BvbnNlVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCByZXNwb25zZVJlc3VsdCA9IGRpc3RfdHNfZXhwb3J0czEyLnBhcnNlKHJlc3BvbnNlVGV4dCk7CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlUmVzdWx0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBwb3N0SnNvbgogICAgICAgKi8KICAgICAgYXN5bmMgcG9zdEpzb24odXJsQXJnLCByZXF1ZXN0Qm9keSwgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICJDb250ZW50LVR5cGUiOiAiYXBwbGljYXRpb24vanNvbiIKICAgICAgICAgIH0sCiAgICAgICAgICBib2R5OiBkaXN0X3RzX2V4cG9ydHMxMi5zdHJpbmdpZnkocmVxdWVzdEJvZHkpLAogICAgICAgICAgdXNlQ2FjaGU6IHVzZUNhY2hlQXJnCiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICAgIGNvbnN0IHJlc3BvbnNlUmVzdWx0ID0gZGlzdF90c19leHBvcnRzMTIucGFyc2UocmVzcG9uc2VUZXh0KTsKICAgICAgICByZXR1cm4gcmVzcG9uc2VSZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHB1dCBqcwogICAgICAgKi8KICAgICAgYXN5bmMgcHV0SnNvbih1cmxBcmcsIHJlcXVlc3RCb2R5LCB1c2VTdG9yZUFzRmFsbGJhY2sgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5yZXF1ZXN0KHVybEFyZywgewogICAgICAgICAgbWV0aG9kOiAiUFVUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIGJvZHk6IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShyZXF1ZXN0Qm9keSkKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcHV0IGpzCiAgICAgICAqLwogICAgICBhc3luYyBkZWxldGVKc29uKHVybEFyZywgdXNlU3RvcmVBc0ZhbGxiYWNrID0gZmFsc2UpIHsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IHRoaXMucmVxdWVzdCh1cmxBcmcsIHsKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi9qc29uIgogICAgICAgICAgfSwKICAgICAgICAgIG1ldGhvZDogIkdFVCIKICAgICAgICB9KTsKICAgICAgICBjb25zdCByZXNwb25zZVRleHQgPSBhd2FpdCByZXNwb25zZS50ZXh0KCk7CiAgICAgICAgY29uc3QgcmVzcG9uc2VSZXN1bHQgPSBkaXN0X3RzX2V4cG9ydHMxMi5wYXJzZShyZXNwb25zZVRleHQpOwogICAgICAgIHJldHVybiByZXNwb25zZVJlc3VsdDsKICAgICAgfQogICAgICBhc3luYyByZXF1ZXN0KHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIG9wdGlvbnNBcmcgPSB7CiAgICAgICAgICB0aW1lb3V0TXM6IDZlNCwKICAgICAgICAgIHVzZUNhY2hlOiBmYWxzZSwKICAgICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgICB9OwogICAgICAgIGxldCBjb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3Iob3B0aW9uc0FyZy50aW1lb3V0TXMpLnRoZW4oKCkgPT4gewogICAgICAgICAgY29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIH0pOwogICAgICAgIGxldCBjYWNoZWRSZXNwb25zZURlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgbGV0IGNhY2hlVXNlZCA9IGZhbHNlOwogICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5jaGVjayh1cmxBcmcpKSB7CiAgICAgICAgICBjb25zdCByZXNwb25zZUJ1ZmZlciA9IGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5nZXQodXJsQXJnKTsKICAgICAgICAgIGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucmVzb2x2ZShuZXcgUmVzcG9uc2UocmVzcG9uc2VCdWZmZXIsIHt9KSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucmVzb2x2ZShudWxsKTsKICAgICAgICB9CiAgICAgICAgbGV0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2godXJsQXJnLCB7CiAgICAgICAgICBzaWduYWw6IGNvbnRyb2xsZXIuc2lnbmFsLAogICAgICAgICAgbWV0aG9kOiBvcHRpb25zQXJnLm1ldGhvZCwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgLi4ub3B0aW9uc0FyZy5oZWFkZXJzIHx8IHt9CiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogb3B0aW9uc0FyZy5ib2R5CiAgICAgICAgfSkuY2F0Y2goYXN5bmMgKGVycikgPT4gewogICAgICAgICAgaWYgKG9wdGlvbnNBcmcudXNlQ2FjaGUgJiYgYXdhaXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlKSB7CiAgICAgICAgICAgIGNhY2hlVXNlZCA9IHRydWU7CiAgICAgICAgICAgIGNvbnN0IGNhY2hlZFJlc3BvbnNlID0gY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlOwogICAgICAgICAgICByZXR1cm4gY2FjaGVkUmVzcG9uc2U7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZXJyOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmIChvcHRpb25zQXJnLnVzZUNhY2hlICYmIGF3YWl0IGNhY2hlZFJlc3BvbnNlRGVmZXJyZWQucHJvbWlzZSAmJiByZXNwb25zZS5zdGF0dXMgPT09IDUwMCkgewogICAgICAgICAgY2FjaGVVc2VkID0gdHJ1ZTsKICAgICAgICAgIHJlc3BvbnNlID0gYXdhaXQgY2FjaGVkUmVzcG9uc2VEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWNhY2hlVXNlZCAmJiBvcHRpb25zQXJnLnVzZUNhY2hlICYmIHJlc3BvbnNlLnN0YXR1cyA8IDMwMCkgewogICAgICAgICAgY29uc3QgYnVmZmVyMiA9IGF3YWl0IHJlc3BvbnNlLmNsb25lKCkuYXJyYXlCdWZmZXIoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuY2FjaGVTdG9yZS5zZXQodXJsQXJnLCBidWZmZXIyKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5sb2coYCR7dXJsQXJnfSBhbnN3ZXJzIHdpdGggc3RhdHVzOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICByZXR1cm4gcmVzcG9uc2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGEgbXVsdGkgZW5kcG9pbnQsIGZhdWx0IHRvbGVyYW50IHJlcXVlc3QgZnVuY3Rpb24KICAgICAgICovCiAgICAgIGFzeW5jIHJlcXVlc3RNdWx0aUVuZHBvaW50KHVybEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGxldCBhbGxVcmxzOwogICAgICAgIGxldCB1c2VkVXJsSW5kZXggPSAwOwogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybEFyZykpIHsKICAgICAgICAgIGFsbFVybHMgPSB1cmxBcmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGFsbFVybHMgPSBbdXJsQXJnXTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVxdWVzdEhpc3RvcnkgPSBbXTsKICAgICAgICBjb25zdCBkb0hpc3RvcnlDaGVjayA9IGFzeW5jIChoaXN0b3J5RW50cnlUeXBlQXJnKSA9PiB7CiAgICAgICAgICByZXF1ZXN0SGlzdG9yeS5wdXNoKGhpc3RvcnlFbnRyeVR5cGVBcmcpOwogICAgICAgICAgaWYgKGhpc3RvcnlFbnRyeVR5cGVBcmcgPT09ICI0MjkiKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJnb3QgNDI5LCBzbyB3YWl0aW5nIGEgbGl0dGxlIGJpdC4iKTsKICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAoMmUzIC0gMWUzICsgMSkpICsgMWUzKTsKICAgICAgICAgIH0KICAgICAgICAgIGxldCBudW1PZkhpc3RvcnlUeXBlID0gMDsKICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgcmVxdWVzdEhpc3RvcnkpIHsKICAgICAgICAgICAgaWYgKGVudHJ5ID09PSBoaXN0b3J5RW50cnlUeXBlQXJnKQogICAgICAgICAgICAgIG51bU9mSGlzdG9yeVR5cGUrKzsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChudW1PZkhpc3RvcnlUeXBlID4gMiAqIGFsbFVybHMubGVuZ3RoICogdXNlZFVybEluZGV4KSB7CiAgICAgICAgICAgIHVzZWRVcmxJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgZG9SZXF1ZXN0ID0gYXN5bmMgKHVybFRvVXNlKSA9PiB7CiAgICAgICAgICBpZiAoIXVybFRvVXNlKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigicmVxdWVzdCBmYWlsZWQgcGVybWFuZW50bHkiKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMubG9nKGBHZXR0aW5nICR7dXJsVG9Vc2V9IHdpdGggbWV0aG9kICR7b3B0aW9uc0FyZy5tZXRob2R9YCk7CiAgICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybFRvVXNlLCB7CiAgICAgICAgICAgIG1ldGhvZDogb3B0aW9uc0FyZy5tZXRob2QsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICAgICAgICAgIC4uLm9wdGlvbnNBcmcuaGVhZGVycyB8fCB7fQogICAgICAgICAgICB9LAogICAgICAgICAgICBib2R5OiBvcHRpb25zQXJnLmJvZHkKICAgICAgICAgIH0pOwogICAgICAgICAgdGhpcy5sb2coYCR7dXJsVG9Vc2V9IGFuc3dlcnMgd2l0aCBzdGF0dXM6ICR7cmVzcG9uc2Uuc3RhdHVzfWApOwogICAgICAgICAgaWYgKHJlc3BvbnNlLnN0YXR1cyA+PSAyMDAgJiYgcmVzcG9uc2Uuc3RhdHVzIDwgMzAwKSB7CiAgICAgICAgICAgIHJldHVybiByZXNwb25zZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGF3YWl0IGRvSGlzdG9yeUNoZWNrKHJlc3BvbnNlLnN0YXR1cy50b1N0cmluZygpKTsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZG9SZXF1ZXN0KGFsbFVybHNbdXNlZFVybEluZGV4XSk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBjb25zdCBmaW5hbFJlc3BvbnNlID0gYXdhaXQgZG9SZXF1ZXN0KGFsbFVybHNbdXNlZFVybEluZGV4XSk7CiAgICAgICAgcmV0dXJuIGZpbmFsUmVzcG9uc2U7CiAgICAgIH0KICAgICAgbG9nKGxvZ0FyZykgewogICAgICAgIGlmICh0aGlzLm9wdGlvbnMubG9nZ2luZykgewogICAgICAgICAgY29uc29sZS5sb2cobG9nQXJnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMKdmFyIGlzb3VuaXF1ZTI7CnZhciBpbml0X3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL3BsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzNCgpOwogICAgaXNvdW5pcXVlMiA9IF9fdG9FU00ocmVxdWlyZV9kaXN0X3RzKCksIDEpOwogICAgaW5pdF9kaXN0X3RzNygpOwogICAgaW5pdF9kaXN0X3RzOCgpOwogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzOSgpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbml0X2Rpc3RfdHMxNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcmVzcG9uc2VlcnJvci5qcwp2YXIgVHlwZWRSZXNwb25zZUVycm9yOwp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlc3BvbnNlZXJyb3IuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFJlc3BvbnNlRXJyb3IgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKGVycm9yVGV4dEFyZywgZXJyb3JEYXRhQXJnKSB7CiAgICAgICAgdGhpcy5lcnJvclRleHQgPSBlcnJvclRleHRBcmc7CiAgICAgICAgdGhpcy5lcnJvckRhdGEgPSBlcnJvckRhdGFBcmc7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0b29scy5qcwp2YXIgVHlwZWRUb29sczsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdG9vbHMuanMiKCkgewogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRvb2xzID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmxvY2FsRGF0YSA9IHt9OwogICAgICB9CiAgICAgIGFzeW5jIHBhc3NHdWFyZHMoZ3VhcmRzQXJnLCBkYXRhQXJnKSB7CiAgICAgICAgY29uc3QgZ3VhcmRTZXQgPSBuZXcgZGlzdF90c19leHBvcnRzOS5HdWFyZFNldChndWFyZHNBcmcpOwogICAgICAgIGNvbnN0IGd1YXJkUmVzdWx0ID0gYXdhaXQgZ3VhcmRTZXQuYWxsR3VhcmRzUGFzcyhkYXRhQXJnKTsKICAgICAgICBpZiAoIWd1YXJkUmVzdWx0KSB7CiAgICAgICAgICBjb25zdCBmYWlsZWRIaW50ID0gYXdhaXQgZ3VhcmRTZXQuZ2V0RmFpbGVkSGludChkYXRhQXJnKTsKICAgICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IoYGd1YXJkIGZhaWxlZDogJHtmYWlsZWRIaW50fWAsIHsgZmFpbGVkSGludCB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWRoYW5kbGVyLmpzCnZhciBUeXBlZEhhbmRsZXI7CnZhciBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkaGFuZGxlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlc3BvbnNlZXJyb3IoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHRvb2xzKCk7CiAgICBUeXBlZEhhbmRsZXIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG1ldGhvZEFyZywgaGFuZGxlckZ1bmN0aW9uQXJnKSB7CiAgICAgICAgdGhpcy5tZXRob2QgPSBtZXRob2RBcmc7CiAgICAgICAgdGhpcy5oYW5kbGVyRnVuY3Rpb24gPSBoYW5kbGVyRnVuY3Rpb25Bcmc7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFkZHMgYSByZXNwb25zZSB0byB0aGUgdHlwZWRSZXF1ZXN0CiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3RBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGFkZFJlc3BvbnNlKHR5cGVkUmVxdWVzdEFyZykgewogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmcubWV0aG9kICE9PSB0aGlzLm1ldGhvZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ0aGlzIGhhbmRsZXIgaGFzIGJlZW4gZ2l2ZW4gYSB3cm9uZyBtZXRob2QgdG8gYW5zd2VyIHRvLiBQbGVhc2UgdXNlIGEgVHlwZWRSb3V0ZXIgdG8gZmlsdGVyIHJlcXVlc3RzIik7CiAgICAgICAgfQogICAgICAgIGxldCB0eXBlZFJlc3BvbnNlRXJyb3I7CiAgICAgICAgY29uc3QgdHlwZWR0b29sc0luc3RhbmNlID0gbmV3IFR5cGVkVG9vbHMoKTsKICAgICAgICBpZiAodHlwZWRSZXF1ZXN0QXJnLmxvY2FsRGF0YSkgewogICAgICAgICAgdHlwZWR0b29sc0luc3RhbmNlLmxvY2FsRGF0YSA9IHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGE7CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdGhpcy5oYW5kbGVyRnVuY3Rpb24odHlwZWRSZXF1ZXN0QXJnLnJlcXVlc3QsIHR5cGVkdG9vbHNJbnN0YW5jZSkuY2F0Y2goKGUxMSkgPT4gewogICAgICAgICAgaWYgKGUxMSBpbnN0YW5jZW9mIFR5cGVkUmVzcG9uc2VFcnJvcikgewogICAgICAgICAgICB0eXBlZFJlc3BvbnNlRXJyb3IgPSBlMTE7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zb2xlLmxvZyhlMTEpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICh0eXBlZFJlc3BvbnNlRXJyb3IpIHsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5lcnJvciA9IHsKICAgICAgICAgICAgdGV4dDogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yVGV4dCwKICAgICAgICAgICAgZGF0YTogdHlwZWRSZXNwb25zZUVycm9yLmVycm9yRGF0YQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHJlc3BvbnNlKSB7CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcucmVzcG9uc2UgPSByZXNwb25zZTsKICAgICAgICB9CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPyB0eXBlZFJlcXVlc3RBcmcuY29ycmVsYXRpb24ucGhhc2UgPSAicmVzcG9uc2UiIDogbnVsbDsKICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkcm91dGVyLmpzCnZhciBUeXBlZFJvdXRlcjsKdmFyIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJvdXRlci5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMoKTsKICAgIGluaXRfY2xhc3Nlc192aXJ0dWFsc3RyZWFtKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRoYW5kbGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWRyZXF1ZXN0KCk7CiAgICBUeXBlZFJvdXRlciA9IGNsYXNzIF9UeXBlZFJvdXRlciB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuaG9va3MgPSB7fTsKICAgICAgICB0aGlzLnJvdXRlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMuaGFuZGxlck1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2Lk9iamVjdE1hcCgpOwogICAgICAgIHRoaXMucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuT2JqZWN0TWFwKCk7CiAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcCA9IG5ldyBkaXN0X3RzX2V4cG9ydHM2LkludGVyZXN0TWFwKChjb3JyZWxhdGlvbklkKSA9PiBjb3JyZWxhdGlvbklkKTsKICAgICAgfQogICAgICAvLyBVc2UgZ2xvYmFsVGhpcyBmb3IgY3Jvc3MtYnVuZGxlIGhvb2sgc2hhcmluZwogICAgICBzdGF0aWMgZ2V0IGdsb2JhbEhvb2tzKCkgewogICAgICAgIGlmICghZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MpIHsKICAgICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0ge307CiAgICAgICAgfQogICAgICAgIHJldHVybiBnbG9iYWxUaGlzLl9fdHlwZWRSb3V0ZXJHbG9iYWxIb29rczsKICAgICAgfQogICAgICBzdGF0aWMgc2V0IGdsb2JhbEhvb2tzKHZhbHVlMikgewogICAgICAgIGdsb2JhbFRoaXMuX190eXBlZFJvdXRlckdsb2JhbEhvb2tzID0gdmFsdWUyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgZ2xvYmFsIGhvb2tzIGZvciBtb25pdG9yaW5nIGFsbCBUeXBlZFJlcXVlc3QgdHJhZmZpYwogICAgICAgKiBIb29rcyBhcmUgc2hhcmVkIGFjcm9zcyBhbGwgYnVuZGxlcyB2aWEgZ2xvYmFsVGhpcwogICAgICAgKi8KICAgICAgc3RhdGljIHNldEdsb2JhbEhvb2tzKGhvb2tzOCkgewogICAgICAgIGNvbnN0IGN1cnJlbnQgPSBfVHlwZWRSb3V0ZXIuZ2xvYmFsSG9va3M7CiAgICAgICAgX1R5cGVkUm91dGVyLmdsb2JhbEhvb2tzID0geyAuLi5jdXJyZW50LCAuLi5ob29rczggfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ2xlYXIgYWxsIGdsb2JhbCBob29rcwogICAgICAgKi8KICAgICAgc3RhdGljIGNsZWFyR2xvYmFsSG9va3MoKSB7CiAgICAgICAgZ2xvYmFsVGhpcy5fX3R5cGVkUm91dGVyR2xvYmFsSG9va3MgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IGluc3RhbmNlLWxldmVsIGhvb2tzIGZvciBtb25pdG9yaW5nIHRyYWZmaWMgdGhyb3VnaCB0aGlzIHJvdXRlcgogICAgICAgKi8KICAgICAgc2V0SG9va3MoaG9va3M4KSB7CiAgICAgICAgdGhpcy5ob29rcyA9IHsgLi4udGhpcy5ob29rcywgLi4uaG9va3M4IH07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEhlbHBlciB0byBjYWxsIGJvdGggZ2xvYmFsIGFuZCBpbnN0YW5jZSBob29rcwogICAgICAgKi8KICAgICAgY2FsbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9UeXBlZFJvdXRlci5nbG9iYWxIb29rc1tob29rTmFtZV0/LihlbnRyeSk7CiAgICAgICAgICB0aGlzLmhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUm91dGVyIGhvb2sgZXJyb3IgKCR7aG9va05hbWV9KTpgLCBlcnIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyB0aGUgaGFuZGxlciB0byB0aGUgcm91dGluZyBtYXAKICAgICAgICogQHBhcmFtIHR5cGVkSGFuZGxlckFyZwogICAgICAgKi8KICAgICAgYWRkVHlwZWRIYW5kbGVyKHR5cGVkSGFuZGxlckFyZykgewogICAgICAgIGNvbnN0IGV4aXN0aW5nVHlwZWRIYW5kbGVyID0gdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QodHlwZWRIYW5kbGVyQXJnLm1ldGhvZCk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYGEgVHlwZWRIYW5kbGVyIGZvciAke3R5cGVkSGFuZGxlckFyZy5tZXRob2R9IGFscmVkeSBleGlzdHMhIENhbid0IGFkZCBhbm90aGVyIG9uZS5gKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5oYW5kbGVyTWFwLmFkZCh0eXBlZEhhbmRsZXJBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhZGRzIGFub3RoZXIgc3ViIHR5cGVkUm91dGVyCiAgICAgICAqIEBwYXJhbSB0eXBlZFJlcXVlc3QKICAgICAgICovCiAgICAgIGFkZFR5cGVkUm91dGVyKHR5cGVkUm91dGVyQXJnKSB7CiAgICAgICAgY29uc3Qgcm91dGVyRXhpc3RzID0gdGhpcy5yb3V0ZXJNYXAuZmluZFN5bmMoKHJvdXRlckFyZykgPT4gcm91dGVyQXJnID09PSB0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgaWYgKCFyb3V0ZXJFeGlzdHMpIHsKICAgICAgICAgIHRoaXMucm91dGVyTWFwLmFkZCh0eXBlZFJvdXRlckFyZyk7CiAgICAgICAgICB0eXBlZFJvdXRlckFyZy5hZGRUeXBlZFJvdXRlcih0aGlzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2hlY2tGb3JUeXBlZEhhbmRsZXIobWV0aG9kQXJnKSB7CiAgICAgICAgcmV0dXJuICEhdGhpcy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZ2V0cyBhIHR5cGVkIFJvdXRlciBmcm9tIHRoZSByb3V0ZXIgY2hhaW4sIHVwc3RyZWFtIGFuZCBkb3duc3RyZWFtCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICogQHBhcmFtIGNoZWNrVXBzdHJlYW1Sb3V0ZXIKICAgICAgICovCiAgICAgIGdldFR5cGVkSGFuZGxlckZvck1ldGhvZChtZXRob2RBcmcsIGNoZWNrZWRSb3V0ZXJzID0gW10pIHsKICAgICAgICBjaGVja2VkUm91dGVycy5wdXNoKHRoaXMpOwogICAgICAgIGxldCB0eXBlZEhhbmRsZXI7CiAgICAgICAgdHlwZWRIYW5kbGVyID0gdGhpcy5oYW5kbGVyTWFwLmZpbmRTeW5jKChoYW5kbGVyMikgPT4gewogICAgICAgICAgcmV0dXJuIGhhbmRsZXIyLm1ldGhvZCA9PT0gbWV0aG9kQXJnOwogICAgICAgIH0pOwogICAgICAgIGlmICghdHlwZWRIYW5kbGVyKSB7CiAgICAgICAgICB0aGlzLnJvdXRlck1hcC5nZXRBcnJheSgpLmZvckVhY2goKHR5cGVkUm91dGVyQXJnKSA9PiB7CiAgICAgICAgICAgIGlmICghdHlwZWRIYW5kbGVyICYmICFjaGVja2VkUm91dGVycy5pbmNsdWRlcyh0eXBlZFJvdXRlckFyZykpIHsKICAgICAgICAgICAgICB0eXBlZEhhbmRsZXIgPSB0eXBlZFJvdXRlckFyZy5nZXRUeXBlZEhhbmRsZXJGb3JNZXRob2QobWV0aG9kQXJnLCBjaGVja2VkUm91dGVycyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHlwZWRIYW5kbGVyOwogICAgICB9CiAgICAgIHN0YXRpYyB7CiAgICAgICAgdGhpcy5kZWZhdWx0Um91dGVPcHRpb25zID0gewogICAgICAgICAgbG9jYWxSZXF1ZXN0OiBmYWxzZSwKICAgICAgICAgIHNraXBIb29rczogZmFsc2UKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3JlcXVlc3QnIC0+IHJvdXRlcyBhIHR5cGVkIHJlcXVlc3Qgb2JqZWN0IHRvIGEgaGFuZGxlcgogICAgICAgKiBpZiB0eXBlZHJlcXVlc3Qgb2JqZWN0IGhhcyBjb3JyZWxhdGlvbi5waGFzZSA9PT0gJ3Jlc3BvbnNlJyAtPiByb3V0ZXMgYSB0eXBlZCByZXF1ZXN0IG9iamVjdCB0byByZXF1ZXN0IGZpcmUgZXZlbnQKICAgICAgICogQHBhcmFtIHR5cGVkUmVxdWVzdEFyZwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyAtIE9wdGlvbnMgb2JqZWN0IHdpdGg6CiAgICAgICAqICAgLSBsb2NhbFJlcXVlc3Q6IHRyZWF0IGFzIGxvY2FsIHJlcXVlc3QgKGRlZmF1bHQ6IGZhbHNlKQogICAgICAgKiAgIC0gc2tpcEhvb2tzOiBza2lwIGNhbGxpbmcgaG9va3MgZm9yIHRoaXMgcm91dGluZyAoZGVmYXVsdDogZmFsc2UsIHVzZSBmb3IgYnJvYWRjYXN0LXJlY2VpdmVkIG1lc3NhZ2VzKQogICAgICAgKi8KICAgICAgYXN5bmMgcm91dGVBbmRBZGRSZXNwb25zZSh0eXBlZFJlcXVlc3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgewogICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7IC4uLl9UeXBlZFJvdXRlci5kZWZhdWx0Um91dGVPcHRpb25zLCAuLi5vcHRpb25zQXJnIH07CiAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsodHlwZWRSZXF1ZXN0QXJnLCB7CiAgICAgICAgICB0eXBlZHJvdXRlcjogdGhpcwogICAgICAgIH0pOwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSB0eXBlZFJlcXVlc3RBcmcubG9jYWxEYXRhIHx8IHt9OwogICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEuZmlyc3RUeXBlZHJvdXRlciA9IHRoaXM7CiAgICAgICAgaWYgKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QgPT09ICIjI1ZpcnR1YWxTdHJlYW0jIyIpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMuaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHR5cGVkUmVxdWVzdEFyZyk7CiAgICAgICAgICByZXN1bHQubG9jYWxEYXRhID0gbnVsbDsKICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgfQogICAgICAgIGlmICh0eXBlZFJlcXVlc3RBcmc/LmNvcnJlbGF0aW9uPy5waGFzZSA9PT0gInJlcXVlc3QiIHx8IG9wdGlvbnMubG9jYWxSZXF1ZXN0KSB7CiAgICAgICAgICBjb25zdCByZXF1ZXN0U3RhcnRUaW1lID0gRGF0ZS5ub3coKTsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1JlcXVlc3QiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogImluY29taW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICAgIHRpbWVzdGFtcDogcmVxdWVzdFN0YXJ0VGltZSwKICAgICAgICAgICAgICBwYXlsb2FkOiB0eXBlZFJlcXVlc3RBcmcucmVxdWVzdAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHR5cGVkSGFuZGxlciA9IHRoaXMuZ2V0VHlwZWRIYW5kbGVyRm9yTWV0aG9kKHR5cGVkUmVxdWVzdEFyZy5tZXRob2QpOwogICAgICAgICAgaWYgKCF0eXBlZEhhbmRsZXIpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coYENhbm5vdCBmaW5kIGhhbmRsZXIgZm9yIG1ldGhvZG5hbWUgJHt0eXBlZFJlcXVlc3RBcmcubWV0aG9kfWApOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcuZXJyb3IgPSB7CiAgICAgICAgICAgICAgdGV4dDogIlRoZXJlIGlzIG5vIGF2YWlsYWJsZSBtZXRob2QgZm9yIHRoaXMgY2FsbCBvbiB0aGUgc2VydmVyIHNpZGUiLAogICAgICAgICAgICAgIGRhdGE6IHt9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbi5waGFzZSA9ICJyZXNwb25zZSI7CiAgICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHR5cGVkUmVxdWVzdEFyZywgewogICAgICAgICAgICAgIHR5cGVkcm91dGVyOiB0aGlzCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBpZiAoIW9wdGlvbnMuc2tpcEhvb2tzKSB7CiAgICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25PdXRnb2luZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgICBtZXRob2Q6IHR5cGVkUmVxdWVzdEFyZy5tZXRob2QsCiAgICAgICAgICAgICAgICBkaXJlY3Rpb246ICJvdXRnb2luZyIsCiAgICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICAgIHRpbWVzdGFtcDogRGF0ZS5ub3coKSwKICAgICAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgICAgZXJyb3I6IHR5cGVkUmVxdWVzdEFyZy5lcnJvcj8udGV4dAogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiB0eXBlZFJlcXVlc3RBcmc7CiAgICAgICAgICB9CiAgICAgICAgICB0eXBlZFJlcXVlc3RBcmcgPSBhd2FpdCB0eXBlZEhhbmRsZXIuYWRkUmVzcG9uc2UodHlwZWRSZXF1ZXN0QXJnKTsKICAgICAgICAgIHR5cGVkUmVxdWVzdEFyZy5sb2NhbERhdGEgPSBudWxsOwogICAgICAgICAgdHlwZWRSZXF1ZXN0QXJnID0gVmlydHVhbFN0cmVhbS5lbmNvZGVQYXlsb2FkRm9yTmV0d29yayh0eXBlZFJlcXVlc3RBcmcsIHsKICAgICAgICAgICAgdHlwZWRyb3V0ZXI6IHRoaXMKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFvcHRpb25zLnNraXBIb29rcykgewogICAgICAgICAgICB0aGlzLmNhbGxIb29rKCJvbk91dGdvaW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgICAgY29ycmVsYXRpb25JZDogdHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uPy5pZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgICAgbWV0aG9kOiB0eXBlZFJlcXVlc3RBcmcubWV0aG9kLAogICAgICAgICAgICAgIGRpcmVjdGlvbjogIm91dGdvaW5nIiwKICAgICAgICAgICAgICBwaGFzZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgICAgZHVyYXRpb25NczogRGF0ZS5ub3coKSAtIHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgICAgcGF5bG9hZDogdHlwZWRSZXF1ZXN0QXJnLnJlc3BvbnNlLAogICAgICAgICAgICAgIGVycm9yOiB0eXBlZFJlcXVlc3RBcmcuZXJyb3I/LnRleHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdHlwZWRSZXF1ZXN0QXJnOwogICAgICAgIH0gZWxzZSBpZiAodHlwZWRSZXF1ZXN0QXJnPy5jb3JyZWxhdGlvbj8ucGhhc2UgPT09ICJyZXNwb25zZSIpIHsKICAgICAgICAgIGlmICghb3B0aW9ucy5za2lwSG9va3MpIHsKICAgICAgICAgICAgdGhpcy5jYWxsSG9vaygib25JbmNvbWluZ1Jlc3BvbnNlIiwgewogICAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHR5cGVkUmVxdWVzdEFyZy5jb3JyZWxhdGlvbj8uaWQgfHwgInVua25vd24iLAogICAgICAgICAgICAgIG1ldGhvZDogdHlwZWRSZXF1ZXN0QXJnLm1ldGhvZCwKICAgICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgICAgcGhhc2U6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgdGltZXN0YW1wOiBEYXRlLm5vdygpLAogICAgICAgICAgICAgIHBheWxvYWQ6IHR5cGVkUmVxdWVzdEFyZy5yZXNwb25zZSwKICAgICAgICAgICAgICBlcnJvcjogdHlwZWRSZXF1ZXN0QXJnLmVycm9yPy50ZXh0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5maXJlRXZlbnRJbnRlcmVzdE1hcC5maW5kSW50ZXJlc3QodHlwZWRSZXF1ZXN0QXJnLmNvcnJlbGF0aW9uLmlkKT8uZnVsbGZpbGxJbnRlcmVzdCh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKCJyZWNlaXZlZCB3ZWlyZGx5IHNoYXBlZCByZXF1ZXN0Iik7CiAgICAgICAgICBjb25zb2xlLmxvZyh0eXBlZFJlcXVlc3RBcmcpOwogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBoYW5kbGUgc3RyZWFtaW5nCiAgICAgICAqIEBwYXJhbSBzdHJlYW1UckFyZwogICAgICAgKi8KICAgICAgYXN5bmMgaGFuZGxlU3RyZWFtVHlwZWRSZXF1ZXN0KHN0cmVhbVRyQXJnKSB7CiAgICAgICAgY29uc3QgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtID0gYXdhaXQgdGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZmluZChhc3luYyAodmlydHVhbFN0cmVhbUFyZykgPT4gewogICAgICAgICAgcmV0dXJuIHZpcnR1YWxTdHJlYW1Bcmcuc3RyZWFtSWQgPT09IHN0cmVhbVRyQXJnLnJlcXVlc3Quc3RyZWFtSWQ7CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCFyZWxldmFudFZpcnR1YWxTdHJlYW0pIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBubyByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSBmb3VuZCBmb3Igc3RyZWFtIHdpdGggaWQgJHtzdHJlYW1UckFyZy5yZXF1ZXN0LnN0cmVhbUlkfWApOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuZ2V0QXJyYXkoKSk7CiAgICAgICAgICByZXR1cm4gc3RyZWFtVHJBcmc7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBzdWNjZXNzOiBmb3VuZCByZWxldmFudCB2aXJ0dWFsIHN0cmVhbSB3aXRoIGlkICR7c3RyZWFtVHJBcmcucmVxdWVzdC5zdHJlYW1JZH1gKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgcmVsZXZhbnRWaXJ0dWFsU3RyZWFtLmhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnZpcnR1YWxzdHJlYW0uanMKdmFyIGNsb3NpbmdCaXQsIFZpcnR1YWxTdHJlYW07CnZhciBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy52aXJ0dWFsc3RyZWFtLmpzIigpIHsKICAgIGluaXRfcGx1Z2lucygpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBjbG9zaW5nQml0ID0gIiMjIyMjIyMjIyMjIyNDTE9TSU5HIEJJVCMjIyMjIyMjIyMjIyMiOwogICAgVmlydHVhbFN0cmVhbSA9IGNsYXNzIF9WaXJ0dWFsU3RyZWFtIHsKICAgICAgLy8gU1RBVElDCiAgICAgIHN0YXRpYyBlbmNvZGVQYXlsb2FkRm9yTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zLCBvcmlnaW5hbFBheWxvYWQsIHBhdGgyID0gW10pIHsKICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAoZGlzdF90c19leHBvcnRzOC5pc0J1ZmZlckxpa2Uob2JqZWN0UGF5bG9hZCkpIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgICBpZiAob2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIF9WaXJ0dWFsU3RyZWFtKSB7CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC5zaWRlID0gInJlcXVlc3RpbmciOwogICAgICAgICAgICBvYmplY3RQYXlsb2FkLnNlbmRNZXRob2QgPSBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2Q7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoIW9iamVjdFBheWxvYWQuc2lkZSAmJiBjb21tRnVuY3Rpb25zLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc2lkZSA9ICJyZXNwb25kaW5nIjsKICAgICAgICAgICAgb2JqZWN0UGF5bG9hZC50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIucmVnaXN0ZXJlZFZpcnR1YWxTdHJlYW1zLmFkZChvYmplY3RQYXlsb2FkKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghb3JpZ2luYWxQYXlsb2FkLnJlc3BvbnNlIHx8IHBhdGgyLmluY2x1ZGVzKCJyZXNwb25zZSIpKSB7CiAgICAgICAgICAgIG9iamVjdFBheWxvYWQuc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgX2lzVmlydHVhbFN0cmVhbTogdHJ1ZSwKICAgICAgICAgICAgICBzdHJlYW1JZDogb2JqZWN0UGF5bG9hZC5zdHJlYW1JZAogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgICBfT0JNSVRURURfVklSVFVBTF9TVFJFQU06IHRydWUsCiAgICAgICAgICAgICAgcmVhc29uOiAicGF0aCBpcyB1bmRlciAucmVxdWVzdDogb2JtaXR0ZWQgZm9yIGRlZHVwbGljYXRpb24gcmVhc29ucyBpbiByZXNwb25zZSBjeWNsZS4iCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZC5tYXAoKGl0ZW0sIGluZGV4MikgPT4gX1ZpcnR1YWxTdHJlYW0uZW5jb2RlUGF5bG9hZEZvck5ldHdvcmsoCiAgICAgICAgICAgIGl0ZW0sCiAgICAgICAgICAgIGNvbW1GdW5jdGlvbnMsCiAgICAgICAgICAgIG9yaWdpbmFsUGF5bG9hZCB8fCBvYmplY3RQYXlsb2FkLAogICAgICAgICAgICBwYXRoMi5jb25jYXQoU3RyaW5nKGluZGV4MikpCiAgICAgICAgICAgIC8vIENvbnZlcnQgaW5kZXggdG8gc3RyaW5nIGFuZCBjb25jYXRlbmF0ZSB0byBwYXRoCiAgICAgICAgICApKTsKICAgICAgICB9IGVsc2UgaWYgKG9iamVjdFBheWxvYWQgIT09IG51bGwgJiYgdHlwZW9mIG9iamVjdFBheWxvYWQgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICByZXR1cm4gT2JqZWN0LmVudHJpZXMob2JqZWN0UGF5bG9hZCkucmVkdWNlKChhY2MsIFtrZXkyLCB2YWx1ZTJdKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXRoMi5jb25jYXQoa2V5Mik7CiAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHZhbHVlMiwgY29tbUZ1bmN0aW9ucywgb3JpZ2luYWxQYXlsb2FkIHx8IG9iamVjdFBheWxvYWQsIG5ld1BhdGgpOwogICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgfSwge30pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0UGF5bG9hZDsKICAgICAgICB9CiAgICAgIH0KICAgICAgc3RhdGljIGRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkLCBjb21tRnVuY3Rpb25zKSB7CiAgICAgICAgaWYgKGRpc3RfdHNfZXhwb3J0czguaXNCdWZmZXJMaWtlKG9iamVjdFBheWxvYWQpIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBUeXBlZFJvdXRlcikgewogICAgICAgICAgcmV0dXJuIG9iamVjdFBheWxvYWQ7CiAgICAgICAgfQogICAgICAgIGlmIChvYmplY3RQYXlsb2FkICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3RQYXlsb2FkID09PSAib2JqZWN0IikgewogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBTZXQgfHwgb2JqZWN0UGF5bG9hZCBpbnN0YW5jZW9mIE1hcCB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgRGF0ZSB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUmVnRXhwIHx8IG9iamVjdFBheWxvYWQgaW5zdGFuY2VvZiBFcnJvciB8fCBvYmplY3RQYXlsb2FkIGluc3RhbmNlb2YgUHJvbWlzZSB8fCB0eXBlb2Ygb2JqZWN0UGF5bG9hZC50aGVuID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG9iamVjdFBheWxvYWQuX2lzVmlydHVhbFN0cmVhbSkgewogICAgICAgICAgICBjb25zdCB2aXJ0dWFsU3RyZWFtID0gbmV3IF9WaXJ0dWFsU3RyZWFtKCk7CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RyZWFtSWQgPSBvYmplY3RQYXlsb2FkLnN0cmVhbUlkOwogICAgICAgICAgICBpZiAoIXZpcnR1YWxTdHJlYW0uc2lkZSAmJiBjb21tRnVuY3Rpb25zLnNlbmRNZXRob2QpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVxdWVzdGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS5zZW5kTWV0aG9kID0gY29tbUZ1bmN0aW9ucy5zZW5kTWV0aG9kOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghdmlydHVhbFN0cmVhbS5zaWRlICYmIGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXIpIHsKICAgICAgICAgICAgICB2aXJ0dWFsU3RyZWFtLnNpZGUgPSAicmVzcG9uZGluZyI7CiAgICAgICAgICAgICAgdmlydHVhbFN0cmVhbS50eXBlZHJvdXRlciA9IGNvbW1GdW5jdGlvbnMudHlwZWRyb3V0ZXI7CiAgICAgICAgICAgICAgY29tbUZ1bmN0aW9ucy50eXBlZHJvdXRlci5yZWdpc3RlcmVkVmlydHVhbFN0cmVhbXMuYWRkKHZpcnR1YWxTdHJlYW0pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZpcnR1YWxTdHJlYW0uc3RhcnRLZWVwQWxpdmVMb29wKCk7CiAgICAgICAgICAgIHJldHVybiB2aXJ0dWFsU3RyZWFtOwogICAgICAgICAgfSBlbHNlIGlmIChBcnJheS5pc0FycmF5KG9iamVjdFBheWxvYWQpKSB7CiAgICAgICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RQYXlsb2FkKSB7CiAgICAgICAgICAgICAgcmV0dXJuQXJyYXkucHVzaChfVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsoaXRlbSwgY29tbUZ1bmN0aW9ucykpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBPYmplY3Qua2V5cyhvYmplY3RQYXlsb2FkKS5yZWR1Y2UoKGFjYywga2V5MikgPT4gewogICAgICAgICAgICAgIGFjY1trZXkyXSA9IF9WaXJ0dWFsU3RyZWFtLmRlY29kZVBheWxvYWRGcm9tTmV0d29yayhvYmplY3RQYXlsb2FkW2tleTJdLCBjb21tRnVuY3Rpb25zKTsKICAgICAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgICAgICB9LCB7fSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBvYmplY3RQYXlsb2FkOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnN0cmVhbUlkID0gaXNvdW5pcXVlMi51bmkoKTsKICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IHRydWU7CiAgICAgICAgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5ID0gbmV3IGRpc3RfdHNfZXhwb3J0czYuQmFja3ByZXNzdXJlZEFycmF5KDE2KTsKICAgICAgICB0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkgPSBuZXcgZGlzdF90c19leHBvcnRzNi5CYWNrcHJlc3N1cmVkQXJyYXkoMTYpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB0YWtlcyBjYXJlIG9mIHNlbmRpbmcKICAgICAgICovCiAgICAgIGFzeW5jIHdvcmtPblF1ZXVlKCkgewogICAgICAgIGlmICh0aGlzLndvcmtpbmdEZWZlcnJlZCkgewogICAgICAgICAgcmV0dXJuIHRoaXMud29ya2luZ0RlZmVycmVkLnByb21pc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXF1ZXN0aW5nIikgewogICAgICAgICAgbGV0IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkID0gIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCk7CiAgICAgICAgICBsZXQgb3RoZXJTaWRlSGFzTmV4dCA9IGZhbHNlOwogICAgICAgICAgbGV0IG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCA9IGZhbHNlOwogICAgICAgICAgY29uc3QgZ2V0RmVlZGJhY2sgPSBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHN0cmVhbVRyID0gYXdhaXQgdGhpcy5zZW5kTWV0aG9kKHsKICAgICAgICAgICAgICBtZXRob2Q6ICIjI1ZpcnR1YWxTdHJlYW0jIyIsCiAgICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgICAgICBjeWNsZUlkOiBpc291bmlxdWUyLnVuaSgpLAogICAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlKSB7CiAgICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICAgIG90aGVyU2lkZUhhc05leHQgPSBzdHJlYW1Uci5yZXNwb25zZS5uZXh0OwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgYXdhaXQgZ2V0RmVlZGJhY2soKTsKICAgICAgICAgIHdoaWxlICh0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwIHx8IG90aGVyU2lkZUhhc05leHQpIHsKICAgICAgICAgICAgaWYgKG90aGVyU2lkZUlzQmFja3ByZXNzdXJlZCkgewogICAgICAgICAgICAgIHdoaWxlIChvdGhlclNpZGVJc0JhY2twcmVzc3VyZWQpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJ3YWl0aW5nIGZvciBmZWVkYmFjayBiZWNhdXNlIG9mIGJhY2twcmVzc3VyZS4uLiIpOwogICAgICAgICAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcig1MCk7CiAgICAgICAgICAgICAgICBhd2FpdCBnZXRGZWVkYmFjaygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBsZXQgZGF0YUFyZzsKICAgICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbGV0IHN0cmVhbVRyOwogICAgICAgICAgICBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgICAgbWV0aG9kOiAiIyNWaXJ0dWFsU3RyZWFtIyMiLAogICAgICAgICAgICAgIHJlcXVlc3Q6IHsKICAgICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgICAgY3ljbGVJZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgICAgIGN5Y2xlOiAicmVxdWVzdCIsCiAgICAgICAgICAgICAgICBtYWluUHVycG9zZTogZGF0YUFyZyA/ICJjaHVuayIgOiAicmVhZCIsCiAgICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6IHRoaXNTaWRlSXNCYWNrcHJlc3N1cmVkLAogICAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICAgIC4uLmRhdGFBcmcgPyB7IGNodW5rRGF0YTogZGF0YUFyZyB9IDoge30KICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIHJlc3BvbnNlOiBudWxsCiAgICAgICAgICAgIH0pLmNhdGNoKCgpID0+IHsKICAgICAgICAgICAgICBjb25zb2xlLmxvZygic3RyZWFtIGVuZGVkIGltbWF0dXJlbHkiKTsKICAgICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSkgewogICAgICAgICAgICAgIHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5wdXNoKHN0cmVhbVRyLnJlc3BvbnNlLmNodW5rRGF0YSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgb3RoZXJTaWRlSXNCYWNrcHJlc3N1cmVkID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UuYmFja3ByZXNzdXJlOwogICAgICAgICAgICB0aGlzU2lkZUlzQmFja3ByZXNzdXJlZCA9ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpOwogICAgICAgICAgICBvdGhlclNpZGVIYXNOZXh0ID0gc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2UubmV4dDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgdGhpcy53b3JraW5nRGVmZXJyZWQucmVzb2x2ZSgpOwogICAgICAgIHRoaXMud29ya2luZ0RlZmVycmVkID0gbnVsbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhpcyBtZXRob2QgaGFuZGxlcyB0aGUgc3RyZWFtIG9ubHkgb24gdGhlIHJlc3BvbmRpbmcgc2lkZQogICAgICAgKiBAcGFyYW0gc3RyZWFtVHJBcmcKICAgICAgICogQHJldHVybnMKICAgICAgICovCiAgICAgIGFzeW5jIGhhbmRsZVN0cmVhbVRyKHN0cmVhbVRyQXJnKSB7CiAgICAgICAgaWYgKHN0cmVhbVRyQXJnLnJlcXVlc3Qua2VlcEFsaXZlID09PSB0cnVlICYmIHRoaXMua2VlcEFsaXZlID09PSB0cnVlKSB7CiAgICAgICAgICB0aGlzLmxhc3RLZWVwQWxpdmVFdmVudCA9IERhdGUubm93KCk7CiAgICAgICAgfSBlbHNlIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0LmtlZXBBbGl2ZSA9PT0gZmFsc2UpIHsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAia2VlcEFsaXZlIikgewogICAgICAgICAgc3RyZWFtVHJBcmcucmVzcG9uc2UgPSB7CiAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgIGN5Y2xlOiAicmVzcG9uc2UiLAogICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgIGtlZXBBbGl2ZTogdGhpcy5rZWVwQWxpdmUsCiAgICAgICAgICAgIG5leHQ6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAsCiAgICAgICAgICAgIGJhY2twcmVzc3VyZTogIXRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja1NwYWNlQXZhaWxhYmxlKCkKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChzdHJlYW1UckFyZy5yZXF1ZXN0Lm1haW5QdXJwb3NlID09PSAiZmVlZGJhY2siKSB7CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgc3RyZWFtSWQ6IHRoaXMuc3RyZWFtSWQsCiAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgIG1haW5QdXJwb3NlOiAiZmVlZGJhY2siLAogICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAwLAogICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAoc3RyZWFtVHJBcmcucmVxdWVzdC5tYWluUHVycG9zZSA9PT0gImNodW5rIikgewogICAgICAgICAgdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LnB1c2goc3RyZWFtVHJBcmcucmVxdWVzdC5jaHVua0RhdGEpOwogICAgICAgICAgaWYgKHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5kYXRhLmxlbmd0aCA+IDAgJiYgc3RyZWFtVHJBcmcucmVzcG9uc2UuYmFja3ByZXNzdXJlID09PSBmYWxzZSkgewogICAgICAgICAgICBjb25zdCBkYXRhQXJnID0gdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LnNoaWZ0KCk7CiAgICAgICAgICAgIHN0cmVhbVRyQXJnLnJlc3BvbnNlID0gewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IHN0cmVhbVRyQXJnLnJlcXVlc3QuY3ljbGVJZCwKICAgICAgICAgICAgICBjeWNsZTogInJlc3BvbnNlIiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImNodW5rIiwKICAgICAgICAgICAgICBuZXh0OiB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkuZGF0YS5sZW5ndGggPiAxLAogICAgICAgICAgICAgIC8vIDEgYW5kIG5vdCAwIGJlY2F1c2Ugd2UgY2FsbCBzaGlmdCBhIGZldyBsaW5lcyBkb3duCiAgICAgICAgICAgICAgYmFja3ByZXNzdXJlOiAhdGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5LmNoZWNrU3BhY2VBdmFpbGFibGUoKSwKICAgICAgICAgICAgICBjaHVua0RhdGE6IHRoaXMuc2VuZEJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdHJlYW1UckFyZy5yZXNwb25zZSA9IHsKICAgICAgICAgICAgICBzdHJlYW1JZDogdGhpcy5zdHJlYW1JZCwKICAgICAgICAgICAgICBjeWNsZUlkOiBzdHJlYW1UckFyZy5yZXF1ZXN0LmN5Y2xlSWQsCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXNwb25zZSIsCiAgICAgICAgICAgICAgbWFpblB1cnBvc2U6ICJmZWVkYmFjayIsCiAgICAgICAgICAgICAgbmV4dDogdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LmRhdGEubGVuZ3RoID4gMCwKICAgICAgICAgICAgICBiYWNrcHJlc3N1cmU6ICF0aGlzLnJlY2VpdmVCYWNrcHJlc3N1cmVkQXJyYXkuY2hlY2tTcGFjZUF2YWlsYWJsZSgpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICBzdHJlYW1UckFyZy5yZXF1ZXN0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHN0cmVhbVRyQXJnOwogICAgICB9CiAgICAgIC8vIGxpZmVjeWNsZSBtZXRob2RzCiAgICAgIC8qKgogICAgICAgKiBjbG9zZXMgdGhlIHZpcnR1YWwgc3RyZWFtCiAgICAgICAqLwogICAgICBhc3luYyBjbGVhbnVwKCkgewogICAgICAgIGlmICh0aGlzLnR5cGVkcm91dGVyKSB7CiAgICAgICAgICB0aGlzLnR5cGVkcm91dGVyLnJlZ2lzdGVyZWRWaXJ0dWFsU3RyZWFtcy5yZW1vdmUodGhpcyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBhIGtlZXBBbGl2ZSBsb29wIHRoYXQgd29ya3MgYWNyb3NzIHRlY2hub2xvZ2llcwogICAgICAgKi8KICAgICAgYXN5bmMgc3RhcnRLZWVwQWxpdmVMb29wKCkgewogICAgICAgIGlmICh0aGlzLnNpZGUgPT09ICJyZXNwb25kaW5nIikgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKDApOwogICAgICAgIGNvbnNvbGUubG9nKGBzdGFydGluZyBrZWVwYWxpdmUgbG9vcCBvbiBzaWRlICR7dGhpcy5zaWRlfWApOwogICAgICAgIGxldCBjb3VudGVyMiA9IDA7CiAgICAgICAga2VlcEFsaXZlTG9vcDogd2hpbGUgKHRoaXMua2VlcEFsaXZlKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnRyaWdnZXJLZWVwQWxpdmUoKTsKICAgICAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czMuZGVsYXlGb3IoMWUzKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcigxZTMpOwogICAgICAgIGF3YWl0IHRoaXMuY2xlYW51cCgpOwogICAgICAgIGNvbnNvbGUubG9nKGBjbGVhbmVkIHVwIGZvciBzdHJlYW0gJHt0aGlzLnN0cmVhbUlkfWApOwogICAgICB9CiAgICAgIGFzeW5jIHRyaWdnZXJLZWVwQWxpdmUoKSB7CiAgICAgICAgaWYgKHRoaXMuc2lkZSA9PT0gInJlcXVlc3RpbmciKSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhga2VlcGFsaXZlIHNlbnQuYCk7CiAgICAgICAgICBjb25zdCBzdHJlYW1UciA9IGF3YWl0IHRoaXMuc2VuZE1ldGhvZCh7CiAgICAgICAgICAgIG1ldGhvZDogIiMjVmlydHVhbFN0cmVhbSMjIiwKICAgICAgICAgICAgcmVxdWVzdDogewogICAgICAgICAgICAgIHN0cmVhbUlkOiB0aGlzLnN0cmVhbUlkLAogICAgICAgICAgICAgIGN5Y2xlSWQ6IGlzb3VuaXF1ZTIudW5pKCksCiAgICAgICAgICAgICAgY3ljbGU6ICJyZXF1ZXN0IiwKICAgICAgICAgICAgICBtYWluUHVycG9zZTogImtlZXBBbGl2ZSIsCiAgICAgICAgICAgICAga2VlcEFsaXZlOiB0aGlzLmtlZXBBbGl2ZQogICAgICAgICAgICB9LAogICAgICAgICAgICByZXNwb25zZTogbnVsbAogICAgICAgICAgfSkuY2F0Y2goKCkgPT4gewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoc3RyZWFtVHIgJiYgc3RyZWFtVHIucmVzcG9uc2UgJiYgc3RyZWFtVHIucmVzcG9uc2Uua2VlcEFsaXZlID09PSBmYWxzZSkgewogICAgICAgICAgICB0aGlzLmtlZXBBbGl2ZSA9IGZhbHNlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy5sYXN0S2VlcEFsaXZlRXZlbnQgPSBEYXRlLm5vdygpOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN0cmVhbVRyICYmIHN0cmVhbVRyLnJlc3BvbnNlICYmIHN0cmVhbVRyLnJlc3BvbnNlLm5leHQpIHsKICAgICAgICAgICAgdGhpcy53b3JrT25RdWV1ZSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoRGF0ZS5ub3coKSAtIHRoaXMubGFzdEtlZXBBbGl2ZUV2ZW50ID4gMWU0KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgY2xvc2luZyBzdHJlYW0gZm9yICR7dGhpcy5zdHJlYW1JZH1gKTsKICAgICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8vIERhdGEgc2VuZGluZyBhbmQgcmVjZWl2aW5nCiAgICAgIGFzeW5jIHNlbmREYXRhKGRhdGFBcmcpIHsKICAgICAgICB0aGlzLnNlbmRCYWNrcHJlc3N1cmVkQXJyYXkucHVzaChkYXRhQXJnKTsKICAgICAgICB0aGlzLndvcmtPblF1ZXVlKCk7CiAgICAgICAgYXdhaXQgdGhpcy5zZW5kQmFja3ByZXNzdXJlZEFycmF5LndhaXRGb3JTcGFjZSgpOwogICAgICB9CiAgICAgIGFzeW5jIGZldGNoRGF0YSgpIHsKICAgICAgICBpZiAodGhpcy5yZWNlaXZlQmFja3ByZXNzdXJlZEFycmF5Lmhhc1NwYWNlKSB7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS53YWl0Rm9ySXRlbXMoKTsKICAgICAgICBjb25zdCBkYXRhUGFja2FnZSA9IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5zaGlmdCgpOwogICAgICAgIHJldHVybiBkYXRhUGFja2FnZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmVhZHMgZnJvbSBhIFJlYWRhYmxlIGFuZCBzZW5kcyBpdCB0byB0aGUgb3RoZXIgc2lkZQogICAgICAgKiBAcGFyYW0gcmVhZGFibGVTdHJlYW1BcmcKICAgICAgICovCiAgICAgIGFzeW5jIHJlYWRGcm9tV2Vic3RyZWFtKHJlYWRhYmxlU3RyZWFtQXJnLCBjbG9zZUFmdGVyUmVhZGluZyA9IHRydWUpIHsKICAgICAgICBjb25zdCByZWFkZXIgPSByZWFkYWJsZVN0cmVhbUFyZy5nZXRSZWFkZXIoKTsKICAgICAgICBsZXQgc3RyZWFtSXNEb25lID0gZmFsc2U7CiAgICAgICAgd2hpbGUgKCFzdHJlYW1Jc0RvbmUpIHsKICAgICAgICAgIGNvbnN0IHsgdmFsdWU6IHZhbHVlMiwgZG9uZSB9ID0gYXdhaXQgcmVhZGVyLnJlYWQoKTsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5zZW5kRGF0YSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgc3RyZWFtSXNEb25lID0gZG9uZTsKICAgICAgICB9CiAgICAgICAgaWYgKGNsb3NlQWZ0ZXJSZWFkaW5nKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNsb3NlKHRydWUpOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB3cml0ZVRvV2Vic3RyZWFtKHdyaXRhYmxlU3RyZWFtQXJnKSB7CiAgICAgICAgY29uc3Qgd3JpdGVyID0gd3JpdGFibGVTdHJlYW1BcmcuZ2V0V3JpdGVyKCk7CiAgICAgICAgd2hpbGUgKHRoaXMua2VlcEFsaXZlIHx8IHRoaXMucmVjZWl2ZUJhY2twcmVzc3VyZWRBcnJheS5jaGVja0hhc0l0ZW1zKCkpIHsKICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IGF3YWl0IHRoaXMuZmV0Y2hEYXRhKCk7CiAgICAgICAgICBpZiAodmFsdWUyID09PSBjbG9zaW5nQml0KSB7CiAgICAgICAgICAgIHdyaXRlci5yZWxlYXNlTG9jaygpOwogICAgICAgICAgICBhd2FpdCB3cml0YWJsZVN0cmVhbUFyZy5jbG9zZSgpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHdyaXRlci53cml0ZSh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogY2xvc2VzIHRoZSBzdHJlYW0KICAgICAgICogaWYgc2VuZENsb3NpbmdCaXRBcmcgaXMgdHJ1ZSwgdGhlIHN0cmVhbSB3aWxsIHNlbmQgYSBjbG9zaW5nIGJpdAogICAgICAgKiBAcGFyYW0gc2VuZENsb3NpbmdCaXRBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGNsb3NlKHNlbmRDbG9zaW5nQml0QXJnID0gZmFsc2UpIHsKICAgICAgICBpZiAoc2VuZENsb3NpbmdCaXRBcmcpIHsKICAgICAgICAgIHRoaXMuc2VuZERhdGEoY2xvc2luZ0JpdCk7CiAgICAgICAgfQogICAgICAgIHRoaXMua2VlcEFsaXZlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2NsYXNzZXMudHlwZWR0YXJnZXQuanMKdmFyIFR5cGVkVGFyZ2V0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGFwaS5nbG9iYWwrdHlwZWRyZXF1ZXN0QDMuMi41L25vZGVfbW9kdWxlcy9AYXBpLmdsb2JhbC90eXBlZHJlcXVlc3QvZGlzdF90cy9jbGFzc2VzLnR5cGVkdGFyZ2V0LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBUeXBlZFRhcmdldCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIGlmIChvcHRpb25zQXJnLnBvc3RNZXRob2RXaXRoVHlwZWRSb3V0ZXIgJiYgIW9wdGlvbnNBcmcudHlwZWRSb3V0ZXJSZWYpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigieW91IGhhdmUgdG8gc3BlY2lmeSBhIHR5cGVkcm91dGVyIHdoZW4gdXNpbmcgcG9zdG1ldGhvZCB3aXRoIHR5cGVkcm91dGVyIik7CiAgICAgICAgfQogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnNBcmc7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdChwYXlsb2FkQXJnKSB7CiAgICAgICAgbGV0IHJlc3BvbnNlSW50ZXJlc3Q7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZikgewogICAgICAgICAgcmVzcG9uc2VJbnRlcmVzdCA9IGF3YWl0IHRoaXMub3B0aW9ucy50eXBlZFJvdXRlclJlZi5maXJlRXZlbnRJbnRlcmVzdE1hcC5hZGRJbnRlcmVzdChwYXlsb2FkQXJnLmNvcnJlbGF0aW9uLmlkLCBwYXlsb2FkQXJnKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgcG9zdE1ldGhvZCA9IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kIHx8IHRoaXMub3B0aW9ucy5wb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOwogICAgICAgIGNvbnN0IHBvc3RNZXRob2RSZXR1cm5WYWx1ZSA9IGF3YWl0IHBvc3RNZXRob2QocGF5bG9hZEFyZyk7CiAgICAgICAgbGV0IHJlc3BvbnNlQm9keTsKICAgICAgICBpZiAocmVzcG9uc2VJbnRlcmVzdCkgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gYXdhaXQgcmVzcG9uc2VJbnRlcmVzdC5pbnRlcmVzdEZ1bGxmaWxsZWQ7CiAgICAgICAgfSBlbHNlIGlmIChwb3N0TWV0aG9kUmV0dXJuVmFsdWUpIHsKICAgICAgICAgIHJlc3BvbnNlQm9keSA9IHBvc3RNZXRob2RSZXR1cm5WYWx1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzcG9uc2VCb2R5ID0gcGF5bG9hZEFyZzsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3BvbnNlQm9keTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMKZnVuY3Rpb24gY2FsbEdsb2JhbEhvb2soaG9va05hbWUsIGVudHJ5KSB7CiAgdHJ5IHsKICAgIFR5cGVkUm91dGVyLmdsb2JhbEhvb2tzW2hvb2tOYW1lXT8uKGVudHJ5KTsKICB9IGNhdGNoIChlcnIpIHsKICAgIGNvbnNvbGUuZXJyb3IoYFR5cGVkUmVxdWVzdCBob29rIGVycm9yICgke2hvb2tOYW1lfSk6YCwgZXJyKTsKICB9Cn0KdmFyIHdlYnJlcXVlc3RJbnN0YW5jZSwgVHlwZWRSZXF1ZXN0Owp2YXIgaW5pdF9jbGFzc2VzX3R5cGVkcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvY2xhc3Nlcy50eXBlZHJlcXVlc3QuanMiKCkgewogICAgaW5pdF9wbHVnaW5zKCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcm91dGVyKCk7CiAgICBpbml0X2NsYXNzZXNfdHlwZWR0YXJnZXQoKTsKICAgIHdlYnJlcXVlc3RJbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNC5XZWJSZXF1ZXN0KCk7CiAgICBUeXBlZFJlcXVlc3QgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBAcGFyYW0gcG9zdEVuZFBvaW50QXJnCiAgICAgICAqIEBwYXJhbSBtZXRob2RBcmcKICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKHBvc3RUYXJnZXQsIG1ldGhvZEFyZykgewogICAgICAgIHRoaXMuc2tpcEhvb2tzID0gZmFsc2U7CiAgICAgICAgaWYgKHR5cGVvZiBwb3N0VGFyZ2V0ID09PSAic3RyaW5nIikgewogICAgICAgICAgdGhpcy51cmxFbmRQb2ludCA9IHBvc3RUYXJnZXQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudHlwZWRUYXJnZXQgPSBwb3N0VGFyZ2V0OwogICAgICAgIH0KICAgICAgICB0aGlzLm1ldGhvZCA9IG1ldGhvZEFyZzsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmlyZXMgdGhlIHJlcXVlc3QKICAgICAgICovCiAgICAgIGFzeW5jIGZpcmUoZmlyZUFyZywgdXNlQ2FjaGVBcmcgPSBmYWxzZSkgewogICAgICAgIGNvbnN0IHJlcXVlc3RTdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgIGxldCBwYXlsb2FkU2VuZGluZyA9IHsKICAgICAgICAgIG1ldGhvZDogdGhpcy5tZXRob2QsCiAgICAgICAgICByZXF1ZXN0OiBmaXJlQXJnLAogICAgICAgICAgcmVzcG9uc2U6IG51bGwsCiAgICAgICAgICBjb3JyZWxhdGlvbjogewogICAgICAgICAgICBpZDogaXNvdW5pcXVlMi51bmkoKSwKICAgICAgICAgICAgcGhhc2U6ICJyZXF1ZXN0IgogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgcGF5bG9hZFNlbmRpbmcgPSBWaXJ0dWFsU3RyZWFtLmVuY29kZVBheWxvYWRGb3JOZXR3b3JrKHBheWxvYWRTZW5kaW5nLCB7CiAgICAgICAgICBzZW5kTWV0aG9kOiAocGF5bG9hZEFyZykgPT4gewogICAgICAgICAgICByZXR1cm4gdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZEFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgaWYgKCF0aGlzLnNraXBIb29rcykgewogICAgICAgICAgY2FsbEdsb2JhbEhvb2soIm9uT3V0Z29pbmdSZXF1ZXN0IiwgewogICAgICAgICAgICBjb3JyZWxhdGlvbklkOiBwYXlsb2FkU2VuZGluZy5jb3JyZWxhdGlvbi5pZCwKICAgICAgICAgICAgbWV0aG9kOiB0aGlzLm1ldGhvZCwKICAgICAgICAgICAgZGlyZWN0aW9uOiAib3V0Z29pbmciLAogICAgICAgICAgICBwaGFzZTogInJlcXVlc3QiLAogICAgICAgICAgICB0aW1lc3RhbXA6IHJlcXVlc3RTdGFydFRpbWUsCiAgICAgICAgICAgIHBheWxvYWQ6IGZpcmVBcmcKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBsZXQgcGF5bG9hZFJlY2VpdmluZzsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gYXdhaXQgdGhpcy5wb3N0VHJPYmplY3QocGF5bG9hZFNlbmRpbmcsIHVzZUNhY2hlQXJnKTsKICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gVmlydHVhbFN0cmVhbS5kZWNvZGVQYXlsb2FkRnJvbU5ldHdvcmsocGF5bG9hZFJlY2VpdmluZywgewogICAgICAgICAgc2VuZE1ldGhvZDogKHBheWxvYWRBcmcpID0+IHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucG9zdFRyT2JqZWN0KHBheWxvYWRBcmcpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGlmICghdGhpcy5za2lwSG9va3MpIHsKICAgICAgICAgIGNhbGxHbG9iYWxIb29rKCJvbkluY29taW5nUmVzcG9uc2UiLCB7CiAgICAgICAgICAgIGNvcnJlbGF0aW9uSWQ6IHBheWxvYWRTZW5kaW5nLmNvcnJlbGF0aW9uLmlkLAogICAgICAgICAgICBtZXRob2Q6IHRoaXMubWV0aG9kLAogICAgICAgICAgICBkaXJlY3Rpb246ICJpbmNvbWluZyIsCiAgICAgICAgICAgIHBoYXNlOiAicmVzcG9uc2UiLAogICAgICAgICAgICB0aW1lc3RhbXA6IERhdGUubm93KCksCiAgICAgICAgICAgIGR1cmF0aW9uTXM6IERhdGUubm93KCkgLSByZXF1ZXN0U3RhcnRUaW1lLAogICAgICAgICAgICBwYXlsb2FkOiBwYXlsb2FkUmVjZWl2aW5nPy5yZXNwb25zZSwKICAgICAgICAgICAgZXJyb3I6IHBheWxvYWRSZWNlaXZpbmc/LmVycm9yPy50ZXh0CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHBheWxvYWRSZWNlaXZpbmcucmVzcG9uc2U7CiAgICAgIH0KICAgICAgYXN5bmMgcG9zdFRyT2JqZWN0KHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyA9IGZhbHNlKSB7CiAgICAgICAgbGV0IHBheWxvYWRSZWNlaXZpbmc7CiAgICAgICAgaWYgKHRoaXMudXJsRW5kUG9pbnQpIHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgd2VicmVxdWVzdEluc3RhbmNlLnBvc3RKc29uKHRoaXMudXJsRW5kUG9pbnQsIHBheWxvYWRTZW5kaW5nQXJnLCB1c2VDYWNoZUFyZyk7CiAgICAgICAgICBwYXlsb2FkUmVjZWl2aW5nID0gcmVzcG9uc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSBhd2FpdCB0aGlzLnR5cGVkVGFyZ2V0LnBvc3QocGF5bG9hZFNlbmRpbmdBcmcpOwogICAgICAgIH0KICAgICAgICBpZiAocGF5bG9hZFJlY2VpdmluZy5lcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgbWV0aG9kOiA+PiR7dGhpcy5tZXRob2R9PDwgZ290IGFuIEVSUk9SOiAiJHtwYXlsb2FkUmVjZWl2aW5nLmVycm9yLnRleHR9IiB3aXRoIGRhdGEgJHtKU09OLnN0cmluZ2lmeShwYXlsb2FkUmVjZWl2aW5nLmVycm9yLmRhdGEsIG51bGwsIDIpfWApOwogICAgICAgICAgaWYgKCFwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlZFJlc3BvbnNlRXJyb3IocGF5bG9hZFJlY2VpdmluZy5lcnJvci50ZXh0LCBwYXlsb2FkUmVjZWl2aW5nLmVycm9yLmRhdGEpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChwYXlsb2FkUmVjZWl2aW5nLnJldHJ5KSB7CiAgICAgICAgICBjb25zb2xlLmxvZyhgc2VydmVyIHJlcXVlc3RlZCByZXRyeSBmb3IgdGhlIGZvbGxvd2luZyByZWFzb246ICR7cGF5bG9hZFJlY2VpdmluZy5yZXRyeS5yZWFzb259YCk7CiAgICAgICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMzLmRlbGF5Rm9yKHBheWxvYWRSZWNlaXZpbmcucmV0cnkud2FpdEZvck1zKTsKICAgICAgICAgIHBheWxvYWRSZWNlaXZpbmcgPSBhd2FpdCB0aGlzLnBvc3RUck9iamVjdChwYXlsb2FkU2VuZGluZ0FyZywgdXNlQ2FjaGVBcmcpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcGF5bG9hZFJlY2VpdmluZzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BhcGkuZ2xvYmFsK3R5cGVkcmVxdWVzdEAzLjIuNS9ub2RlX21vZHVsZXMvQGFwaS5nbG9iYWwvdHlwZWRyZXF1ZXN0L2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE1ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE1LCB7CiAgVHlwZWRIYW5kbGVyOiAoKSA9PiBUeXBlZEhhbmRsZXIsCiAgVHlwZWRSZXF1ZXN0OiAoKSA9PiBUeXBlZFJlcXVlc3QsCiAgVHlwZWRSZXNwb25zZUVycm9yOiAoKSA9PiBUeXBlZFJlc3BvbnNlRXJyb3IsCiAgVHlwZWRSb3V0ZXI6ICgpID0+IFR5cGVkUm91dGVyLAogIFR5cGVkVGFyZ2V0OiAoKSA9PiBUeXBlZFRhcmdldCwKICBWaXJ0dWFsU3RyZWFtOiAoKSA9PiBWaXJ0dWFsU3RyZWFtCn0pOwp2YXIgaW5pdF9kaXN0X3RzMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AYXBpLmdsb2JhbCt0eXBlZHJlcXVlc3RAMy4yLjUvbm9kZV9tb2R1bGVzL0BhcGkuZ2xvYmFsL3R5cGVkcmVxdWVzdC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJlcXVlc3QoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZGhhbmRsZXIoKTsKICAgIGluaXRfY2xhc3Nlc190eXBlZHJvdXRlcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkcmVzcG9uc2VlcnJvcigpOwogICAgaW5pdF9jbGFzc2VzX3R5cGVkdGFyZ2V0KCk7CiAgICBpbml0X2NsYXNzZXNfdmlydHVhbHN0cmVhbSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL3V0aWwuanMKZnVuY3Rpb24gaXNQcm9taXNlMihvYmopIHsKICByZXR1cm4gb2JqICYmIHR5cGVvZiBvYmoudGhlbiA9PT0gImZ1bmN0aW9uIjsKfQpmdW5jdGlvbiBzbGVlcCh0aW1lLCByZXNvbHZlV2l0aCkgewogIGlmICghdGltZSkgdGltZSA9IDA7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcykgewogICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZXMocmVzb2x2ZVdpdGgpOwogICAgfSwgdGltZSk7CiAgfSk7Cn0KZnVuY3Rpb24gcmFuZG9tSW50KG1pbjMsIG1heDMpIHsKICByZXR1cm4gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogKG1heDMgLSBtaW4zICsgMSkgKyBtaW4zKTsKfQpmdW5jdGlvbiByYW5kb21Ub2tlbigpIHsKICByZXR1cm4gTWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIpOwp9CmZ1bmN0aW9uIG1pY3JvU2Vjb25kcygpIHsKICB2YXIgcmV0ID0gRGF0ZS5ub3coKSAqIDFlMzsKICBpZiAocmV0IDw9IGxhc3RNcykgewogICAgcmV0ID0gbGFzdE1zICsgMTsKICB9CiAgbGFzdE1zID0gcmV0OwogIHJldHVybiByZXQ7Cn0KZnVuY3Rpb24gc3VwcG9ydHNXZWJMb2NrQVBJKCkgewogIGlmICh0eXBlb2YgbmF2aWdhdG9yICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgbmF2aWdhdG9yLmxvY2tzICE9PSAidW5kZWZpbmVkIiAmJiB0eXBlb2YgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QgPT09ICJmdW5jdGlvbiIpIHsKICAgIHJldHVybiB0cnVlOwogIH0gZWxzZSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CnZhciBQUk9NSVNFX1JFU09MVkVEX0ZBTFNFLCBQUk9NSVNFX1JFU09MVkVEX1RSVUUsIFBST01JU0VfUkVTT0xWRURfVk9JRCwgbGFzdE1zOwp2YXIgaW5pdF91dGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL3V0aWwuanMiKCkgewogICAgUFJPTUlTRV9SRVNPTFZFRF9GQUxTRSA9IFByb21pc2UucmVzb2x2ZShmYWxzZSk7CiAgICBQUk9NSVNFX1JFU09MVkVEX1RSVUUgPSBQcm9taXNlLnJlc29sdmUodHJ1ZSk7CiAgICBQUk9NSVNFX1JFU09MVkVEX1ZPSUQgPSBQcm9taXNlLnJlc29sdmUoKTsKICAgIGxhc3RNcyA9IDA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9uYXRpdmUuanMKZnVuY3Rpb24gY3JlYXRlKGNoYW5uZWxOYW1lKSB7CiAgdmFyIHN0YXRlMTIgPSB7CiAgICB0aW1lOiBtaWNyb1NlY29uZHMoKSwKICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwsCiAgICBiYzogbmV3IEJyb2FkY2FzdENoYW5uZWwoY2hhbm5lbE5hbWUpLAogICAgc3ViRm5zOiBbXQogICAgLy8gc3Vic2NyaWJlckZ1bmN0aW9ucwogIH07CiAgc3RhdGUxMi5iYy5vbm1lc3NhZ2UgPSBmdW5jdGlvbihtc2dFdmVudCkgewogICAgaWYgKHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjaykgewogICAgICBzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2sobXNnRXZlbnQuZGF0YSk7CiAgICB9CiAgfTsKICByZXR1cm4gc3RhdGUxMjsKfQpmdW5jdGlvbiBjbG9zZShjaGFubmVsU3RhdGUpIHsKICBjaGFubmVsU3RhdGUuYmMuY2xvc2UoKTsKICBjaGFubmVsU3RhdGUuc3ViRm5zID0gW107Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHRyeSB7CiAgICBjaGFubmVsU3RhdGUuYmMucG9zdE1lc3NhZ2UobWVzc2FnZUpzb24sIGZhbHNlKTsKICAgIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgfSBjYXRjaCAoZXJyKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICB9Cn0KZnVuY3Rpb24gb25NZXNzYWdlKGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZCgpIHsKICBpZiAodHlwZW9mIGdsb2JhbFRoaXMgIT09ICJ1bmRlZmluZWQiICYmIGdsb2JhbFRoaXMuRGVubyAmJiBnbG9iYWxUaGlzLkRlbm8uYXJncykgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGlmICgodHlwZW9mIHdpbmRvdyAhPT0gInVuZGVmaW5lZCIgfHwgdHlwZW9mIHNlbGYgIT09ICJ1bmRlZmluZWQiKSAmJiB0eXBlb2YgQnJvYWRjYXN0Q2hhbm5lbCA9PT0gImZ1bmN0aW9uIikgewogICAgaWYgKEJyb2FkY2FzdENoYW5uZWwuX3B1YmtleSkgewogICAgICB0aHJvdyBuZXcgRXJyb3IoIkJyb2FkY2FzdENoYW5uZWw6IERvIG5vdCBvdmVyd3JpdGUgd2luZG93LkJyb2FkY2FzdENoYW5uZWwgd2l0aCB0aGlzIG1vZHVsZSwgdGhpcyBpcyBub3QgYSBwb2x5ZmlsbCIpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBmYWxzZTsKICB9Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZSgpIHsKICByZXR1cm4gMTUwOwp9CnZhciBtaWNyb1NlY29uZHMyLCB0eXBlLCBOYXRpdmVNZXRob2Q7CnZhciBpbml0X25hdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL25hdGl2ZS5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczIgPSBtaWNyb1NlY29uZHM7CiAgICB0eXBlID0gIm5hdGl2ZSI7CiAgICBOYXRpdmVNZXRob2QgPSB7CiAgICAgIGNyZWF0ZSwKICAgICAgY2xvc2UsCiAgICAgIG9uTWVzc2FnZSwKICAgICAgcG9zdE1lc3NhZ2UsCiAgICAgIGNhbkJlVXNlZCwKICAgICAgdHlwZSwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZSwKICAgICAgbWljcm9TZWNvbmRzOiBtaWNyb1NlY29uZHMyCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMKZnVuY3Rpb24gcmVtb3ZlVG9vT2xkVmFsdWVzKG9ibGl2aW91c1NldCkgewogIGNvbnN0IG9sZGVyVGhlbiA9IG5vdygpIC0gb2JsaXZpb3VzU2V0LnR0bDsKICBjb25zdCBpdGVyYXRvcjIgPSBvYmxpdmlvdXNTZXQubWFwW1N5bWJvbC5pdGVyYXRvcl0oKTsKICB3aGlsZSAodHJ1ZSkgewogICAgY29uc3QgbmV4dDIgPSBpdGVyYXRvcjIubmV4dCgpLnZhbHVlOwogICAgaWYgKCFuZXh0MikgewogICAgICBicmVhazsKICAgIH0KICAgIGNvbnN0IHZhbHVlMiA9IG5leHQyWzBdOwogICAgY29uc3QgdGltZSA9IG5leHQyWzFdOwogICAgaWYgKHRpbWUgPCBvbGRlclRoZW4pIHsKICAgICAgb2JsaXZpb3VzU2V0Lm1hcC5kZWxldGUodmFsdWUyKTsKICAgIH0gZWxzZSB7CiAgICAgIGJyZWFrOwogICAgfQogIH0KfQpmdW5jdGlvbiBub3coKSB7CiAgcmV0dXJuIERhdGUubm93KCk7Cn0KdmFyIE9ibGl2aW91c1NldDsKdmFyIGluaXRfc3JjID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vb2JsaXZpb3VzLXNldEAyLjAuMC9ub2RlX21vZHVsZXMvb2JsaXZpb3VzLXNldC9kaXN0L2VzbS9zcmMvaW5kZXguanMiKCkgewogICAgT2JsaXZpb3VzU2V0ID0gY2xhc3MgewogICAgICB0dGw7CiAgICAgIG1hcCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGluZyBjYWxscyB0byBzZXRUaW1lb3V0KCkgaXMgZXhwZW5zaXZlLAogICAgICAgKiBzbyB3ZSBvbmx5IGRvIHRoYXQgaWYgdGhlcmUgaXMgbm90IHRpbWVvdXQgYWxyZWFkeSBvcGVuLgogICAgICAgKi8KICAgICAgX3RvID0gZmFsc2U7CiAgICAgIGNvbnN0cnVjdG9yKHR0bCkgewogICAgICAgIHRoaXMudHRsID0gdHRsOwogICAgICB9CiAgICAgIGhhcyh2YWx1ZTIpIHsKICAgICAgICBjb25zdCB2YWx1ZVRpbWUgPSB0aGlzLm1hcC5nZXQodmFsdWUyKTsKICAgICAgICBpZiAodHlwZW9mIHZhbHVlVGltZSA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKHZhbHVlVGltZSA8IG5vdygpIC0gdGhpcy50dGwpIHsKICAgICAgICAgIHRoaXMubWFwLmRlbGV0ZSh2YWx1ZTIpOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBhZGQodmFsdWUyKSB7CiAgICAgICAgdGhpcy5tYXAuZGVsZXRlKHZhbHVlMik7CiAgICAgICAgdGhpcy5tYXAuc2V0KHZhbHVlMiwgbm93KCkpOwogICAgICAgIGlmICghdGhpcy5fdG8pIHsKICAgICAgICAgIHRoaXMuX3RvID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICB0aGlzLl90byA9IGZhbHNlOwogICAgICAgICAgICByZW1vdmVUb29PbGRWYWx1ZXModGhpcyk7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5tYXAuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9vcHRpb25zLmpzCmZ1bmN0aW9uIGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKCkgewogIHZhciBvcmlnaW5hbE9wdGlvbnMgPSBhcmd1bWVudHMubGVuZ3RoID4gMCAmJiBhcmd1bWVudHNbMF0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1swXSA6IHt9OwogIHZhciBvcHRpb25zID0gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShvcmlnaW5hbE9wdGlvbnMpKTsKICBpZiAodHlwZW9mIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9PT0gInVuZGVmaW5lZCIpIG9wdGlvbnMud2ViV29ya2VyU3VwcG9ydCA9IHRydWU7CiAgaWYgKCFvcHRpb25zLmlkYikgb3B0aW9ucy5pZGIgPSB7fTsKICBpZiAoIW9wdGlvbnMuaWRiLnR0bCkgb3B0aW9ucy5pZGIudHRsID0gMWUzICogNDU7CiAgaWYgKCFvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsKSBvcHRpb25zLmlkYi5mYWxsYmFja0ludGVydmFsID0gMTUwOwogIGlmIChvcmlnaW5hbE9wdGlvbnMuaWRiICYmIHR5cGVvZiBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2UgPT09ICJmdW5jdGlvbiIpIG9wdGlvbnMuaWRiLm9uY2xvc2UgPSBvcmlnaW5hbE9wdGlvbnMuaWRiLm9uY2xvc2U7CiAgaWYgKCFvcHRpb25zLmxvY2Fsc3RvcmFnZSkgb3B0aW9ucy5sb2NhbHN0b3JhZ2UgPSB7fTsKICBpZiAoIW9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQpIG9wdGlvbnMubG9jYWxzdG9yYWdlLnJlbW92ZVRpbWVvdXQgPSAxZTMgKiA2MDsKICBpZiAob3JpZ2luYWxPcHRpb25zLm1ldGhvZHMpIG9wdGlvbnMubWV0aG9kcyA9IG9yaWdpbmFsT3B0aW9ucy5tZXRob2RzOwogIGlmICghb3B0aW9ucy5ub2RlKSBvcHRpb25zLm5vZGUgPSB7fTsKICBpZiAoIW9wdGlvbnMubm9kZS50dGwpIG9wdGlvbnMubm9kZS50dGwgPSAxZTMgKiA2MCAqIDI7CiAgaWYgKCFvcHRpb25zLm5vZGUubWF4UGFyYWxsZWxXcml0ZXMpIG9wdGlvbnMubm9kZS5tYXhQYXJhbGxlbFdyaXRlcyA9IDIwNDg7CiAgaWYgKHR5cGVvZiBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPT09ICJ1bmRlZmluZWQiKSBvcHRpb25zLm5vZGUudXNlRmFzdFBhdGggPSB0cnVlOwogIHJldHVybiBvcHRpb25zOwp9CnZhciBpbml0X29wdGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvb3B0aW9ucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzCmZ1bmN0aW9uIGdldElkYigpIHsKICBpZiAodHlwZW9mIGluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiBpbmRleGVkREI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICJ1bmRlZmluZWQiKSB7CiAgICBpZiAodHlwZW9mIHdpbmRvdy5tb3pJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1vekluZGV4ZWREQjsKICAgIGlmICh0eXBlb2Ygd2luZG93LndlYmtpdEluZGV4ZWREQiAhPT0gInVuZGVmaW5lZCIpIHJldHVybiB3aW5kb3cud2Via2l0SW5kZXhlZERCOwogICAgaWYgKHR5cGVvZiB3aW5kb3cubXNJbmRleGVkREIgIT09ICJ1bmRlZmluZWQiKSByZXR1cm4gd2luZG93Lm1zSW5kZXhlZERCOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gY29tbWl0SW5kZXhlZERCVHJhbnNhY3Rpb24odHgpIHsKICBpZiAodHguY29tbWl0KSB7CiAgICB0eC5jb21taXQoKTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlRGF0YWJhc2UoY2hhbm5lbE5hbWUpIHsKICB2YXIgSW5kZXhlZERCID0gZ2V0SWRiKCk7CiAgdmFyIGRiTmFtZSA9IERCX1BSRUZJWCArIGNoYW5uZWxOYW1lOwogIHZhciBvcGVuUmVxdWVzdCA9IEluZGV4ZWREQi5vcGVuKGRiTmFtZSk7CiAgb3BlblJlcXVlc3Qub251cGdyYWRlbmVlZGVkID0gZnVuY3Rpb24oZXYpIHsKICAgIHZhciBkYiA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICBkYi5jcmVhdGVPYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQsIHsKICAgICAga2V5UGF0aDogImlkIiwKICAgICAgYXV0b0luY3JlbWVudDogdHJ1ZQogICAgfSk7CiAgfTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIG9wZW5SZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihldikgewogICAgICByZXR1cm4gcmVqKGV2KTsKICAgIH07CiAgICBvcGVuUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgcmVzKG9wZW5SZXF1ZXN0LnJlc3VsdCk7CiAgICB9OwogIH0pOwp9CmZ1bmN0aW9uIHdyaXRlTWVzc2FnZShkYiwgcmVhZGVyVXVpZCwgbWVzc2FnZUpzb24pIHsKICB2YXIgdGltZSA9IERhdGUubm93KCk7CiAgdmFyIHdyaXRlT2JqZWN0ID0gewogICAgdXVpZDogcmVhZGVyVXVpZCwKICAgIHRpbWUsCiAgICBkYXRhOiBtZXNzYWdlSnNvbgogIH07CiAgdmFyIHR4ID0gZGIudHJhbnNhY3Rpb24oW09CSkVDVF9TVE9SRV9JRF0sICJyZWFkd3JpdGUiLCBUUkFOU0FDVElPTl9TRVRUSU5HUyk7CiAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICB0eC5vbmNvbXBsZXRlID0gZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiByZXMoKTsKICAgIH07CiAgICB0eC5vbmVycm9yID0gZnVuY3Rpb24oZXYpIHsKICAgICAgcmV0dXJuIHJlaihldik7CiAgICB9OwogICAgdmFyIG9iamVjdFN0b3JlID0gdHgub2JqZWN0U3RvcmUoT0JKRUNUX1NUT1JFX0lEKTsKICAgIG9iamVjdFN0b3JlLmFkZCh3cml0ZU9iamVjdCk7CiAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0QWxsTWVzc2FnZXMoZGIpIHsKICB2YXIgdHggPSBkYi50cmFuc2FjdGlvbihPQkpFQ1RfU1RPUkVfSUQsICJyZWFkb25seSIsIFRSQU5TQUNUSU9OX1NFVFRJTkdTKTsKICB2YXIgb2JqZWN0U3RvcmUgPSB0eC5vYmplY3RTdG9yZShPQkpFQ1RfU1RPUkVfSUQpOwogIHZhciByZXQgPSBbXTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBvYmplY3RTdG9yZS5vcGVuQ3Vyc29yKCkub25zdWNjZXNzID0gZnVuY3Rpb24oZXYpIHsKICAgICAgdmFyIGN1cnNvciA9IGV2LnRhcmdldC5yZXN1bHQ7CiAgICAgIGlmIChjdXJzb3IpIHsKICAgICAgICByZXQucHVzaChjdXJzb3IudmFsdWUpOwogICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBnZXRNZXNzYWdlc0hpZ2hlclRoYW4oZGIsIGxhc3RDdXJzb3JJZCkgewogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHZhciBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogIGlmIChvYmplY3RTdG9yZS5nZXRBbGwpIHsKICAgIHZhciBnZXRBbGxSZXF1ZXN0ID0gb2JqZWN0U3RvcmUuZ2V0QWxsKGtleVJhbmdlVmFsdWUpOwogICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlcywgcmVqKSB7CiAgICAgIGdldEFsbFJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGVycikgewogICAgICAgIHJldHVybiByZWooZXJyKTsKICAgICAgfTsKICAgICAgZ2V0QWxsUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICByZXMoZTExLnRhcmdldC5yZXN1bHQpOwogICAgICB9OwogICAgfSk7CiAgfQogIGZ1bmN0aW9uIG9wZW5DdXJzb3IoKSB7CiAgICB0cnkgewogICAgICBrZXlSYW5nZVZhbHVlID0gSURCS2V5UmFuZ2UuYm91bmQobGFzdEN1cnNvcklkICsgMSwgSW5maW5pdHkpOwogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcihrZXlSYW5nZVZhbHVlKTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICByZXR1cm4gb2JqZWN0U3RvcmUub3BlbkN1cnNvcigpOwogICAgfQogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWopIHsKICAgIHZhciBvcGVuQ3Vyc29yUmVxdWVzdCA9IG9wZW5DdXJzb3IoKTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uZXJyb3IgPSBmdW5jdGlvbihlcnIpIHsKICAgICAgcmV0dXJuIHJlaihlcnIpOwogICAgfTsKICAgIG9wZW5DdXJzb3JSZXF1ZXN0Lm9uc3VjY2VzcyA9IGZ1bmN0aW9uKGV2KSB7CiAgICAgIHZhciBjdXJzb3IgPSBldi50YXJnZXQucmVzdWx0OwogICAgICBpZiAoY3Vyc29yKSB7CiAgICAgICAgaWYgKGN1cnNvci52YWx1ZS5pZCA8IGxhc3RDdXJzb3JJZCArIDEpIHsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXShsYXN0Q3Vyc29ySWQgKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0LnB1c2goY3Vyc29yLnZhbHVlKTsKICAgICAgICAgIGN1cnNvclsiY29udGludWUiXSgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb21taXRJbmRleGVkREJUcmFuc2FjdGlvbih0eCk7CiAgICAgICAgcmVzKHJldCk7CiAgICAgIH0KICAgIH07CiAgfSk7Cn0KZnVuY3Rpb24gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgaWRzKSB7CiAgaWYgKGNoYW5uZWxTdGF0ZS5jbG9zZWQpIHsKICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW10pOwogIH0KICB2YXIgdHggPSBjaGFubmVsU3RhdGUuZGIudHJhbnNhY3Rpb24oT0JKRUNUX1NUT1JFX0lELCAicmVhZHdyaXRlIiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgcmV0dXJuIFByb21pc2UuYWxsKGlkcy5tYXAoZnVuY3Rpb24oaWQpIHsKICAgIHZhciBkZWxldGVSZXF1ZXN0ID0gb2JqZWN0U3RvcmVbImRlbGV0ZSJdKGlkKTsKICAgIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgICAgZGVsZXRlUmVxdWVzdC5vbnN1Y2Nlc3MgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gcmVzKCk7CiAgICAgIH07CiAgICB9KTsKICB9KSk7Cn0KZnVuY3Rpb24gZ2V0T2xkTWVzc2FnZXMoZGIsIHR0bCkgewogIHZhciBvbGRlclRoZW4gPSBEYXRlLm5vdygpIC0gdHRsOwogIHZhciB0eCA9IGRiLnRyYW5zYWN0aW9uKE9CSkVDVF9TVE9SRV9JRCwgInJlYWRvbmx5IiwgVFJBTlNBQ1RJT05fU0VUVElOR1MpOwogIHZhciBvYmplY3RTdG9yZSA9IHR4Lm9iamVjdFN0b3JlKE9CSkVDVF9TVE9SRV9JRCk7CiAgdmFyIHJldCA9IFtdOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIG9iamVjdFN0b3JlLm9wZW5DdXJzb3IoKS5vbnN1Y2Nlc3MgPSBmdW5jdGlvbihldikgewogICAgICB2YXIgY3Vyc29yID0gZXYudGFyZ2V0LnJlc3VsdDsKICAgICAgaWYgKGN1cnNvcikgewogICAgICAgIHZhciBtc2dPYmsgPSBjdXJzb3IudmFsdWU7CiAgICAgICAgaWYgKG1zZ09iay50aW1lIDwgb2xkZXJUaGVuKSB7CiAgICAgICAgICByZXQucHVzaChtc2dPYmspOwogICAgICAgICAgY3Vyc29yWyJjb250aW51ZSJdKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbW1pdEluZGV4ZWREQlRyYW5zYWN0aW9uKHR4KTsKICAgICAgICAgIHJlcyhyZXQpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICByZXMocmV0KTsKICAgICAgfQogICAgfTsKICB9KTsKfQpmdW5jdGlvbiBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSkgewogIHJldHVybiBnZXRPbGRNZXNzYWdlcyhjaGFubmVsU3RhdGUuZGIsIGNoYW5uZWxTdGF0ZS5vcHRpb25zLmlkYi50dGwpLnRoZW4oZnVuY3Rpb24odG9vT2xkKSB7CiAgICByZXR1cm4gcmVtb3ZlTWVzc2FnZXNCeUlkKGNoYW5uZWxTdGF0ZSwgdG9vT2xkLm1hcChmdW5jdGlvbihtc2cpIHsKICAgICAgcmV0dXJuIG1zZy5pZDsKICAgIH0pKTsKICB9KTsKfQpmdW5jdGlvbiBjcmVhdGUyKGNoYW5uZWxOYW1lLCBvcHRpb25zKSB7CiAgb3B0aW9ucyA9IGZpbGxPcHRpb25zV2l0aERlZmF1bHRzKG9wdGlvbnMpOwogIHJldHVybiBjcmVhdGVEYXRhYmFzZShjaGFubmVsTmFtZSkudGhlbihmdW5jdGlvbihkYikgewogICAgdmFyIHN0YXRlMTIgPSB7CiAgICAgIGNsb3NlZDogZmFsc2UsCiAgICAgIGxhc3RDdXJzb3JJZDogMCwKICAgICAgY2hhbm5lbE5hbWUsCiAgICAgIG9wdGlvbnMsCiAgICAgIHV1aWQ6IHJhbmRvbVRva2VuKCksCiAgICAgIC8qKgogICAgICAgKiBlbWl0dGVkTWVzc2FnZXNJZHMKICAgICAgICogY29udGFpbnMgYWxsIG1lc3NhZ2VzIHRoYXQgaGF2ZSBiZWVuIGVtaXR0ZWQgYmVmb3JlCiAgICAgICAqIEB0eXBlIHtPYmxpdmlvdXNTZXR9CiAgICAgICAqLwogICAgICBlTUlzOiBuZXcgT2JsaXZpb3VzU2V0KG9wdGlvbnMuaWRiLnR0bCAqIDIpLAogICAgICAvLyBlbnN1cmVzIHdlIGRvIG5vdCByZWFkIG1lc3NhZ2VzIGluIHBhcmFsbGVsCiAgICAgIHdyaXRlQmxvY2tQcm9taXNlOiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQsCiAgICAgIG1lc3NhZ2VzQ2FsbGJhY2s6IG51bGwsCiAgICAgIHJlYWRRdWV1ZVByb21pc2VzOiBbXSwKICAgICAgZGIKICAgIH07CiAgICBkYi5vbmNsb3NlID0gZnVuY3Rpb24oKSB7CiAgICAgIHN0YXRlMTIuY2xvc2VkID0gdHJ1ZTsKICAgICAgaWYgKG9wdGlvbnMuaWRiLm9uY2xvc2UpIG9wdGlvbnMuaWRiLm9uY2xvc2UoKTsKICAgIH07CiAgICBfcmVhZExvb3Aoc3RhdGUxMik7CiAgICByZXR1cm4gc3RhdGUxMjsKICB9KTsKfQpmdW5jdGlvbiBfcmVhZExvb3Aoc3RhdGUxMikgewogIGlmIChzdGF0ZTEyLmNsb3NlZCkgcmV0dXJuOwogIHJlYWROZXdNZXNzYWdlcyhzdGF0ZTEyKS50aGVuKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIHNsZWVwKHN0YXRlMTIub3B0aW9ucy5pZGIuZmFsbGJhY2tJbnRlcnZhbCk7CiAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiBfcmVhZExvb3Aoc3RhdGUxMik7CiAgfSk7Cn0KZnVuY3Rpb24gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZTEyKSB7CiAgaWYgKG1zZ09iai51dWlkID09PSBzdGF0ZTEyLnV1aWQpIHJldHVybiBmYWxzZTsKICBpZiAoc3RhdGUxMi5lTUlzLmhhcyhtc2dPYmouaWQpKSByZXR1cm4gZmFsc2U7CiAgaWYgKG1zZ09iai5kYXRhLnRpbWUgPCBzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lKSByZXR1cm4gZmFsc2U7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gcmVhZE5ld01lc3NhZ2VzKHN0YXRlMTIpIHsKICBpZiAoc3RhdGUxMi5jbG9zZWQpIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgaWYgKCFzdGF0ZTEyLm1lc3NhZ2VzQ2FsbGJhY2spIHJldHVybiBQUk9NSVNFX1JFU09MVkVEX1ZPSUQ7CiAgcmV0dXJuIGdldE1lc3NhZ2VzSGlnaGVyVGhhbihzdGF0ZTEyLmRiLCBzdGF0ZTEyLmxhc3RDdXJzb3JJZCkudGhlbihmdW5jdGlvbihuZXdlck1lc3NhZ2VzKSB7CiAgICB2YXIgdXNlTWVzc2FnZXMgPSBuZXdlck1lc3NhZ2VzLmZpbHRlcihmdW5jdGlvbihtc2dPYmopIHsKICAgICAgcmV0dXJuICEhbXNnT2JqOwogICAgfSkubWFwKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAobXNnT2JqLmlkID4gc3RhdGUxMi5sYXN0Q3Vyc29ySWQpIHsKICAgICAgICBzdGF0ZTEyLmxhc3RDdXJzb3JJZCA9IG1zZ09iai5pZDsKICAgICAgfQogICAgICByZXR1cm4gbXNnT2JqOwogICAgfSkuZmlsdGVyKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICByZXR1cm4gX2ZpbHRlck1lc3NhZ2UobXNnT2JqLCBzdGF0ZTEyKTsKICAgIH0pLnNvcnQoZnVuY3Rpb24obXNnT2JqQSwgbXNnT2JqQikgewogICAgICByZXR1cm4gbXNnT2JqQS50aW1lIC0gbXNnT2JqQi50aW1lOwogICAgfSk7CiAgICB1c2VNZXNzYWdlcy5mb3JFYWNoKGZ1bmN0aW9uKG1zZ09iaikgewogICAgICBpZiAoc3RhdGUxMi5tZXNzYWdlc0NhbGxiYWNrKSB7CiAgICAgICAgc3RhdGUxMi5lTUlzLmFkZChtc2dPYmouaWQpOwogICAgICAgIHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjayhtc2dPYmouZGF0YSk7CiAgICAgIH0KICAgIH0pOwogICAgcmV0dXJuIFBST01JU0VfUkVTT0xWRURfVk9JRDsKICB9KTsKfQpmdW5jdGlvbiBjbG9zZTIoY2hhbm5lbFN0YXRlKSB7CiAgY2hhbm5lbFN0YXRlLmNsb3NlZCA9IHRydWU7CiAgY2hhbm5lbFN0YXRlLmRiLmNsb3NlKCk7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UgPSBjaGFubmVsU3RhdGUud3JpdGVCbG9ja1Byb21pc2UudGhlbihmdW5jdGlvbigpIHsKICAgIHJldHVybiB3cml0ZU1lc3NhZ2UoY2hhbm5lbFN0YXRlLmRiLCBjaGFubmVsU3RhdGUudXVpZCwgbWVzc2FnZUpzb24pOwogIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICBpZiAocmFuZG9tSW50KDAsIDEwKSA9PT0gMCkgewogICAgICBjbGVhbk9sZE1lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIGNoYW5uZWxTdGF0ZS53cml0ZUJsb2NrUHJvbWlzZTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2UyKGNoYW5uZWxTdGF0ZSwgZm4sIHRpbWUpIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFja1RpbWUgPSB0aW1lOwogIGNoYW5uZWxTdGF0ZS5tZXNzYWdlc0NhbGxiYWNrID0gZm47CiAgcmVhZE5ld01lc3NhZ2VzKGNoYW5uZWxTdGF0ZSk7Cn0KZnVuY3Rpb24gY2FuQmVVc2VkMigpIHsKICByZXR1cm4gISFnZXRJZGIoKTsKfQpmdW5jdGlvbiBhdmVyYWdlUmVzcG9uc2VUaW1lMihvcHRpb25zKSB7CiAgcmV0dXJuIG9wdGlvbnMuaWRiLmZhbGxiYWNrSW50ZXJ2YWwgKiAyOwp9CnZhciBtaWNyb1NlY29uZHMzLCBEQl9QUkVGSVgsIE9CSkVDVF9TVE9SRV9JRCwgVFJBTlNBQ1RJT05fU0VUVElOR1MsIHR5cGUyLCBJbmRleGVkREJNZXRob2Q7CnZhciBpbml0X2luZGV4ZWRfZGIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kcy9pbmRleGVkLWRiLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9zcmMoKTsKICAgIGluaXRfb3B0aW9ucygpOwogICAgbWljcm9TZWNvbmRzMyA9IG1pY3JvU2Vjb25kczsKICAgIERCX1BSRUZJWCA9ICJwdWJrZXkuYnJvYWRjYXN0LWNoYW5uZWwtMC0iOwogICAgT0JKRUNUX1NUT1JFX0lEID0gIm1lc3NhZ2VzIjsKICAgIFRSQU5TQUNUSU9OX1NFVFRJTkdTID0gewogICAgICBkdXJhYmlsaXR5OiAicmVsYXhlZCIKICAgIH07CiAgICB0eXBlMiA9ICJpZGIiOwogICAgSW5kZXhlZERCTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTIsCiAgICAgIGNsb3NlOiBjbG9zZTIsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMiwKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMiwKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQyLAogICAgICB0eXBlOiB0eXBlMiwKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTIsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzMwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcwpmdW5jdGlvbiBnZXRMb2NhbFN0b3JhZ2UoKSB7CiAgdmFyIGxvY2FsU3RvcmFnZTI7CiAgaWYgKHR5cGVvZiB3aW5kb3cgPT09ICJ1bmRlZmluZWQiKSByZXR1cm4gbnVsbDsKICB0cnkgewogICAgbG9jYWxTdG9yYWdlMiA9IHdpbmRvdy5sb2NhbFN0b3JhZ2U7CiAgICBsb2NhbFN0b3JhZ2UyID0gd2luZG93WyJpZTgtZXZlbnRsaXN0ZW5lci9zdG9yYWdlIl0gfHwgd2luZG93LmxvY2FsU3RvcmFnZTsKICB9IGNhdGNoIChlMTEpIHsKICB9CiAgcmV0dXJuIGxvY2FsU3RvcmFnZTI7Cn0KZnVuY3Rpb24gc3RvcmFnZUtleShjaGFubmVsTmFtZSkgewogIHJldHVybiBLRVlfUFJFRklYICsgY2hhbm5lbE5hbWU7Cn0KZnVuY3Rpb24gcG9zdE1lc3NhZ2UzKGNoYW5uZWxTdGF0ZSwgbWVzc2FnZUpzb24pIHsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICBzbGVlcCgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHZhciBrZXkyID0gc3RvcmFnZUtleShjaGFubmVsU3RhdGUuY2hhbm5lbE5hbWUpOwogICAgICB2YXIgd3JpdGVPYmogPSB7CiAgICAgICAgdG9rZW46IHJhbmRvbVRva2VuKCksCiAgICAgICAgdGltZTogRGF0ZS5ub3coKSwKICAgICAgICBkYXRhOiBtZXNzYWdlSnNvbiwKICAgICAgICB1dWlkOiBjaGFubmVsU3RhdGUudXVpZAogICAgICB9OwogICAgICB2YXIgdmFsdWUyID0gSlNPTi5zdHJpbmdpZnkod3JpdGVPYmopOwogICAgICBnZXRMb2NhbFN0b3JhZ2UoKS5zZXRJdGVtKGtleTIsIHZhbHVlMik7CiAgICAgIHZhciBldiA9IGRvY3VtZW50LmNyZWF0ZUV2ZW50KCJFdmVudCIpOwogICAgICBldi5pbml0RXZlbnQoInN0b3JhZ2UiLCB0cnVlLCB0cnVlKTsKICAgICAgZXYua2V5ID0ga2V5MjsKICAgICAgZXYubmV3VmFsdWUgPSB2YWx1ZTI7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KGV2KTsKICAgICAgcmVzKCk7CiAgICB9KTsKICB9KTsKfQpmdW5jdGlvbiBhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsTmFtZSwgZm4pIHsKICB2YXIga2V5MiA9IHN0b3JhZ2VLZXkoY2hhbm5lbE5hbWUpOwogIHZhciBsaXN0ZW5lcjIgPSBmdW5jdGlvbiBsaXN0ZW5lcjMoZXYpIHsKICAgIGlmIChldi5rZXkgPT09IGtleTIpIHsKICAgICAgZm4oSlNPTi5wYXJzZShldi5uZXdWYWx1ZSkpOwogICAgfQogIH07CiAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwogIHJldHVybiBsaXN0ZW5lcjI7Cn0KZnVuY3Rpb24gcmVtb3ZlU3RvcmFnZUV2ZW50TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInN0b3JhZ2UiLCBsaXN0ZW5lcjIpOwp9CmZ1bmN0aW9uIGNyZWF0ZTMoY2hhbm5lbE5hbWUsIG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgaWYgKCFjYW5CZVVzZWQzKCkpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbDogbG9jYWxzdG9yYWdlIGNhbm5vdCBiZSB1c2VkIik7CiAgfQogIHZhciB1dWlkID0gcmFuZG9tVG9rZW4oKTsKICB2YXIgZU1JcyA9IG5ldyBPYmxpdmlvdXNTZXQob3B0aW9ucy5sb2NhbHN0b3JhZ2UucmVtb3ZlVGltZW91dCk7CiAgdmFyIHN0YXRlMTIgPSB7CiAgICBjaGFubmVsTmFtZSwKICAgIHV1aWQsCiAgICBlTUlzCiAgICAvLyBlbWl0dGVkTWVzc2FnZXNJZHMKICB9OwogIHN0YXRlMTIubGlzdGVuZXIgPSBhZGRTdG9yYWdlRXZlbnRMaXN0ZW5lcihjaGFubmVsTmFtZSwgZnVuY3Rpb24obXNnT2JqKSB7CiAgICBpZiAoIXN0YXRlMTIubWVzc2FnZXNDYWxsYmFjaykgcmV0dXJuOwogICAgaWYgKG1zZ09iai51dWlkID09PSB1dWlkKSByZXR1cm47CiAgICBpZiAoIW1zZ09iai50b2tlbiB8fCBlTUlzLmhhcyhtc2dPYmoudG9rZW4pKSByZXR1cm47CiAgICBpZiAobXNnT2JqLmRhdGEudGltZSAmJiBtc2dPYmouZGF0YS50aW1lIDwgc3RhdGUxMi5tZXNzYWdlc0NhbGxiYWNrVGltZSkgcmV0dXJuOwogICAgZU1Jcy5hZGQobXNnT2JqLnRva2VuKTsKICAgIHN0YXRlMTIubWVzc2FnZXNDYWxsYmFjayhtc2dPYmouZGF0YSk7CiAgfSk7CiAgcmV0dXJuIHN0YXRlMTI7Cn0KZnVuY3Rpb24gY2xvc2UzKGNoYW5uZWxTdGF0ZSkgewogIHJlbW92ZVN0b3JhZ2VFdmVudExpc3RlbmVyKGNoYW5uZWxTdGF0ZS5saXN0ZW5lcik7Cn0KZnVuY3Rpb24gb25NZXNzYWdlMyhjaGFubmVsU3RhdGUsIGZuLCB0aW1lKSB7CiAgY2hhbm5lbFN0YXRlLm1lc3NhZ2VzQ2FsbGJhY2tUaW1lID0gdGltZTsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDMoKSB7CiAgdmFyIGxzID0gZ2V0TG9jYWxTdG9yYWdlKCk7CiAgaWYgKCFscykgcmV0dXJuIGZhbHNlOwogIHRyeSB7CiAgICB2YXIga2V5MiA9ICJfX2Jyb2FkY2FzdGNoYW5uZWxfY2hlY2siOwogICAgbHMuc2V0SXRlbShrZXkyLCAid29ya3MiKTsKICAgIGxzLnJlbW92ZUl0ZW0oa2V5Mik7CiAgfSBjYXRjaCAoZTExKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGF2ZXJhZ2VSZXNwb25zZVRpbWUzKCkgewogIHZhciBkZWZhdWx0VGltZSA9IDEyMDsKICB2YXIgdXNlckFnZW50MiA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKTsKICBpZiAodXNlckFnZW50Mi5pbmNsdWRlcygic2FmYXJpIikgJiYgIXVzZXJBZ2VudDIuaW5jbHVkZXMoImNocm9tZSIpKSB7CiAgICByZXR1cm4gZGVmYXVsdFRpbWUgKiAyOwogIH0KICByZXR1cm4gZGVmYXVsdFRpbWU7Cn0KdmFyIG1pY3JvU2Vjb25kczQsIEtFWV9QUkVGSVgsIHR5cGUzLCBMb2NhbHN0b3JhZ2VNZXRob2Q7CnZhciBpbml0X2xvY2Fsc3RvcmFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL2xvY2Fsc3RvcmFnZS5qcyIoKSB7CiAgICBpbml0X3NyYygpOwogICAgaW5pdF9vcHRpb25zKCk7CiAgICBpbml0X3V0aWwoKTsKICAgIG1pY3JvU2Vjb25kczQgPSBtaWNyb1NlY29uZHM7CiAgICBLRVlfUFJFRklYID0gInB1YmtleS5icm9hZGNhc3RDaGFubmVsLSI7CiAgICB0eXBlMyA9ICJsb2NhbHN0b3JhZ2UiOwogICAgTG9jYWxzdG9yYWdlTWV0aG9kID0gewogICAgICBjcmVhdGU6IGNyZWF0ZTMsCiAgICAgIGNsb3NlOiBjbG9zZTMsCiAgICAgIG9uTWVzc2FnZTogb25NZXNzYWdlMywKICAgICAgcG9zdE1lc3NhZ2U6IHBvc3RNZXNzYWdlMywKICAgICAgY2FuQmVVc2VkOiBjYW5CZVVzZWQzLAogICAgICB0eXBlOiB0eXBlMywKICAgICAgYXZlcmFnZVJlc3BvbnNlVGltZTogYXZlcmFnZVJlc3BvbnNlVGltZTMsCiAgICAgIG1pY3JvU2Vjb25kczogbWljcm9TZWNvbmRzNAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9tZXRob2RzL3NpbXVsYXRlLmpzCmZ1bmN0aW9uIGNyZWF0ZTQoY2hhbm5lbE5hbWUpIHsKICB2YXIgc3RhdGUxMiA9IHsKICAgIHRpbWU6IG1pY3JvU2Vjb25kczUoKSwKICAgIG5hbWU6IGNoYW5uZWxOYW1lLAogICAgbWVzc2FnZXNDYWxsYmFjazogbnVsbAogIH07CiAgU0lNVUxBVEVfQ0hBTk5FTFMuYWRkKHN0YXRlMTIpOwogIHJldHVybiBzdGF0ZTEyOwp9CmZ1bmN0aW9uIGNsb3NlNChjaGFubmVsU3RhdGUpIHsKICBTSU1VTEFURV9DSEFOTkVMU1siZGVsZXRlIl0oY2hhbm5lbFN0YXRlKTsKfQpmdW5jdGlvbiBwb3N0TWVzc2FnZTQoY2hhbm5lbFN0YXRlLCBtZXNzYWdlSnNvbikgewogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICB2YXIgY2hhbm5lbEFycmF5ID0gQXJyYXkuZnJvbShTSU1VTEFURV9DSEFOTkVMUyk7CiAgICAgIGNoYW5uZWxBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKGNoYW5uZWwpIHsKICAgICAgICBpZiAoY2hhbm5lbC5uYW1lID09PSBjaGFubmVsU3RhdGUubmFtZSAmJiAvLyBoYXMgc2FtZSBuYW1lCiAgICAgICAgY2hhbm5lbCAhPT0gY2hhbm5lbFN0YXRlICYmIC8vIG5vdCBvd24gY2hhbm5lbAogICAgICAgICEhY2hhbm5lbC5tZXNzYWdlc0NhbGxiYWNrICYmIC8vIGhhcyBzdWJzY3JpYmVycwogICAgICAgIGNoYW5uZWwudGltZSA8IG1lc3NhZ2VKc29uLnRpbWUpIHsKICAgICAgICAgIGNoYW5uZWwubWVzc2FnZXNDYWxsYmFjayhtZXNzYWdlSnNvbik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmVzKCk7CiAgICB9LCBTSU1VTEFURV9ERUxBWV9USU1FKTsKICB9KTsKfQpmdW5jdGlvbiBvbk1lc3NhZ2U0KGNoYW5uZWxTdGF0ZSwgZm4pIHsKICBjaGFubmVsU3RhdGUubWVzc2FnZXNDYWxsYmFjayA9IGZuOwp9CmZ1bmN0aW9uIGNhbkJlVXNlZDQoKSB7CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gYXZlcmFnZVJlc3BvbnNlVGltZTQoKSB7CiAgcmV0dXJuIFNJTVVMQVRFX0RFTEFZX1RJTUU7Cn0KdmFyIG1pY3JvU2Vjb25kczUsIHR5cGU0LCBTSU1VTEFURV9DSEFOTkVMUywgU0lNVUxBVEVfREVMQVlfVElNRSwgU2ltdWxhdGVNZXRob2Q7CnZhciBpbml0X3NpbXVsYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZHMvc2ltdWxhdGUuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBtaWNyb1NlY29uZHM1ID0gbWljcm9TZWNvbmRzOwogICAgdHlwZTQgPSAic2ltdWxhdGUiOwogICAgU0lNVUxBVEVfQ0hBTk5FTFMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgU0lNVUxBVEVfREVMQVlfVElNRSA9IDU7CiAgICBTaW11bGF0ZU1ldGhvZCA9IHsKICAgICAgY3JlYXRlOiBjcmVhdGU0LAogICAgICBjbG9zZTogY2xvc2U0LAogICAgICBvbk1lc3NhZ2U6IG9uTWVzc2FnZTQsCiAgICAgIHBvc3RNZXNzYWdlOiBwb3N0TWVzc2FnZTQsCiAgICAgIGNhbkJlVXNlZDogY2FuQmVVc2VkNCwKICAgICAgdHlwZTogdHlwZTQsCiAgICAgIGF2ZXJhZ2VSZXNwb25zZVRpbWU6IGF2ZXJhZ2VSZXNwb25zZVRpbWU0LAogICAgICBtaWNyb1NlY29uZHM6IG1pY3JvU2Vjb25kczUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbWV0aG9kLWNob29zZXIuanMKZnVuY3Rpb24gY2hvb3NlTWV0aG9kKG9wdGlvbnMpIHsKICB2YXIgY2hvb3NlTWV0aG9kcyA9IFtdLmNvbmNhdChvcHRpb25zLm1ldGhvZHMsIE1FVEhPRFMpLmZpbHRlcihCb29sZWFuKTsKICBpZiAob3B0aW9ucy50eXBlKSB7CiAgICBpZiAob3B0aW9ucy50eXBlID09PSAic2ltdWxhdGUiKSB7CiAgICAgIHJldHVybiBTaW11bGF0ZU1ldGhvZDsKICAgIH0KICAgIHZhciByZXQgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgPT09IG9wdGlvbnMudHlwZTsKICAgIH0pOwogICAgaWYgKCFyZXQpIHRocm93IG5ldyBFcnJvcigibWV0aG9kLXR5cGUgIiArIG9wdGlvbnMudHlwZSArICIgbm90IGZvdW5kIik7CiAgICBlbHNlIHJldHVybiByZXQ7CiAgfQogIGlmICghb3B0aW9ucy53ZWJXb3JrZXJTdXBwb3J0KSB7CiAgICBjaG9vc2VNZXRob2RzID0gY2hvb3NlTWV0aG9kcy5maWx0ZXIoZnVuY3Rpb24obTYpIHsKICAgICAgcmV0dXJuIG02LnR5cGUgIT09ICJpZGIiOwogICAgfSk7CiAgfQogIHZhciB1c2VNZXRob2QgPSBjaG9vc2VNZXRob2RzLmZpbmQoZnVuY3Rpb24obWV0aG9kKSB7CiAgICByZXR1cm4gbWV0aG9kLmNhbkJlVXNlZCgpOwogIH0pOwogIGlmICghdXNlTWV0aG9kKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIk5vIHVzYWJsZSBtZXRob2QgZm91bmQgaW4gIiArIEpTT04uc3RyaW5naWZ5KE1FVEhPRFMubWFwKGZ1bmN0aW9uKG02KSB7CiAgICAgIHJldHVybiBtNi50eXBlOwogICAgfSkpKTsKICB9IGVsc2UgewogICAgcmV0dXJuIHVzZU1ldGhvZDsKICB9Cn0KdmFyIE1FVEhPRFM7CnZhciBpbml0X21ldGhvZF9jaG9vc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL21ldGhvZC1jaG9vc2VyLmpzIigpIHsKICAgIGluaXRfbmF0aXZlKCk7CiAgICBpbml0X2luZGV4ZWRfZGIoKTsKICAgIGluaXRfbG9jYWxzdG9yYWdlKCk7CiAgICBpbml0X3NpbXVsYXRlKCk7CiAgICBNRVRIT0RTID0gWwogICAgICBOYXRpdmVNZXRob2QsCiAgICAgIC8vIGZhc3Rlc3QKICAgICAgSW5kZXhlZERCTWV0aG9kLAogICAgICBMb2NhbHN0b3JhZ2VNZXRob2QKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvYnJvYWRjYXN0LWNoYW5uZWwuanMKZnVuY3Rpb24gY2xlYXJOb2RlRm9sZGVyKG9wdGlvbnMpIHsKICBvcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgdmFyIG1ldGhvZCA9IGNob29zZU1ldGhvZChvcHRpb25zKTsKICBpZiAobWV0aG9kLnR5cGUgPT09ICJub2RlIikgewogICAgcmV0dXJuIG1ldGhvZC5jbGVhck5vZGVGb2xkZXIoKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9GQUxTRTsKICB9Cn0KZnVuY3Rpb24gZW5mb3JjZU9wdGlvbnMob3B0aW9ucykgewogIEVORk9SQ0VEX09QVElPTlMgPSBvcHRpb25zOwp9CmZ1bmN0aW9uIF9wb3N0KGJyb2FkY2FzdENoYW5uZWwsIHR5cGU1LCBtc2cpIHsKICB2YXIgdGltZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogIHZhciBtc2dPYmogPSB7CiAgICB0aW1lLAogICAgdHlwZTogdHlwZTUsCiAgICBkYXRhOiBtc2cKICB9OwogIHZhciBhd2FpdFByZXBhcmUgPSBicm9hZGNhc3RDaGFubmVsLl9wcmVwUCA/IGJyb2FkY2FzdENoYW5uZWwuX3ByZXBQIDogUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIHJldHVybiBhd2FpdFByZXBhcmUudGhlbihmdW5jdGlvbigpIHsKICAgIHZhciBzZW5kUHJvbWlzZSA9IGJyb2FkY2FzdENoYW5uZWwubWV0aG9kLnBvc3RNZXNzYWdlKGJyb2FkY2FzdENoYW5uZWwuX3N0YXRlLCBtc2dPYmopOwogICAgYnJvYWRjYXN0Q2hhbm5lbC5fdU1QLmFkZChzZW5kUHJvbWlzZSk7CiAgICBzZW5kUHJvbWlzZVsiY2F0Y2giXSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBicm9hZGNhc3RDaGFubmVsLl91TVBbImRlbGV0ZSJdKHNlbmRQcm9taXNlKTsKICAgIH0pOwogICAgcmV0dXJuIHNlbmRQcm9taXNlOwogIH0pOwp9CmZ1bmN0aW9uIF9wcmVwYXJlQ2hhbm5lbChjaGFubmVsKSB7CiAgdmFyIG1heWJlUHJvbWlzZSA9IGNoYW5uZWwubWV0aG9kLmNyZWF0ZShjaGFubmVsLm5hbWUsIGNoYW5uZWwub3B0aW9ucyk7CiAgaWYgKGlzUHJvbWlzZTIobWF5YmVQcm9taXNlKSkgewogICAgY2hhbm5lbC5fcHJlcFAgPSBtYXliZVByb21pc2U7CiAgICBtYXliZVByb21pc2UudGhlbihmdW5jdGlvbihzOSkgewogICAgICBjaGFubmVsLl9zdGF0ZSA9IHM5OwogICAgfSk7CiAgfSBlbHNlIHsKICAgIGNoYW5uZWwuX3N0YXRlID0gbWF5YmVQcm9taXNlOwogIH0KfQpmdW5jdGlvbiBfaGFzTWVzc2FnZUxpc3RlbmVycyhjaGFubmVsKSB7CiAgaWYgKGNoYW5uZWwuX2FkZEVMLm1lc3NhZ2UubGVuZ3RoID4gMCkgcmV0dXJuIHRydWU7CiAgaWYgKGNoYW5uZWwuX2FkZEVMLmludGVybmFsLmxlbmd0aCA+IDApIHJldHVybiB0cnVlOwogIHJldHVybiBmYWxzZTsKfQpmdW5jdGlvbiBfYWRkTGlzdGVuZXJPYmplY3QoY2hhbm5lbCwgdHlwZTUsIG9iaikgewogIGNoYW5uZWwuX2FkZEVMW3R5cGU1XS5wdXNoKG9iaik7CiAgX3N0YXJ0TGlzdGVuaW5nKGNoYW5uZWwpOwp9CmZ1bmN0aW9uIF9yZW1vdmVMaXN0ZW5lck9iamVjdChjaGFubmVsLCB0eXBlNSwgb2JqKSB7CiAgY2hhbm5lbC5fYWRkRUxbdHlwZTVdID0gY2hhbm5lbC5fYWRkRUxbdHlwZTVdLmZpbHRlcihmdW5jdGlvbihvMTMpIHsKICAgIHJldHVybiBvMTMgIT09IG9iajsKICB9KTsKICBfc3RvcExpc3RlbmluZyhjaGFubmVsKTsKfQpmdW5jdGlvbiBfc3RhcnRMaXN0ZW5pbmcoY2hhbm5lbCkgewogIGlmICghY2hhbm5lbC5faUwgJiYgX2hhc01lc3NhZ2VMaXN0ZW5lcnMoY2hhbm5lbCkpIHsKICAgIHZhciBsaXN0ZW5lckZuID0gZnVuY3Rpb24gbGlzdGVuZXJGbjIobXNnT2JqKSB7CiAgICAgIGNoYW5uZWwuX2FkZEVMW21zZ09iai50eXBlXS5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyT2JqZWN0KSB7CiAgICAgICAgaWYgKG1zZ09iai50aW1lID49IGxpc3RlbmVyT2JqZWN0LnRpbWUpIHsKICAgICAgICAgIGxpc3RlbmVyT2JqZWN0LmZuKG1zZ09iai5kYXRhKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfTsKICAgIHZhciB0aW1lID0gY2hhbm5lbC5tZXRob2QubWljcm9TZWNvbmRzKCk7CiAgICBpZiAoY2hhbm5lbC5fcHJlcFApIHsKICAgICAgY2hhbm5lbC5fcHJlcFAudGhlbihmdW5jdGlvbigpIHsKICAgICAgICBjaGFubmVsLl9pTCA9IHRydWU7CiAgICAgICAgY2hhbm5lbC5tZXRob2Qub25NZXNzYWdlKGNoYW5uZWwuX3N0YXRlLCBsaXN0ZW5lckZuLCB0aW1lKTsKICAgICAgfSk7CiAgICB9IGVsc2UgewogICAgICBjaGFubmVsLl9pTCA9IHRydWU7CiAgICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbGlzdGVuZXJGbiwgdGltZSk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIF9zdG9wTGlzdGVuaW5nKGNoYW5uZWwpIHsKICBpZiAoY2hhbm5lbC5faUwgJiYgIV9oYXNNZXNzYWdlTGlzdGVuZXJzKGNoYW5uZWwpKSB7CiAgICBjaGFubmVsLl9pTCA9IGZhbHNlOwogICAgdmFyIHRpbWUgPSBjaGFubmVsLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgIGNoYW5uZWwubWV0aG9kLm9uTWVzc2FnZShjaGFubmVsLl9zdGF0ZSwgbnVsbCwgdGltZSk7CiAgfQp9CnZhciBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUywgbGFzdElkLCBCcm9hZGNhc3RDaGFubmVsMiwgRU5GT1JDRURfT1BUSU9OUzsKdmFyIGluaXRfYnJvYWRjYXN0X2NoYW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvYnJvYWRjYXN0LWNoYW5uZWwuanMiKCkgewogICAgaW5pdF91dGlsKCk7CiAgICBpbml0X21ldGhvZF9jaG9vc2VyKCk7CiAgICBpbml0X29wdGlvbnMoKTsKICAgIE9QRU5fQlJPQURDQVNUX0NIQU5ORUxTID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgIGxhc3RJZCA9IDA7CiAgICBCcm9hZGNhc3RDaGFubmVsMiA9IGZ1bmN0aW9uIEJyb2FkY2FzdENoYW5uZWwzKG5hbWUsIG9wdGlvbnMpIHsKICAgICAgdGhpcy5pZCA9IGxhc3RJZCsrOwogICAgICBPUEVOX0JST0FEQ0FTVF9DSEFOTkVMUy5hZGQodGhpcyk7CiAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgIGlmIChFTkZPUkNFRF9PUFRJT05TKSB7CiAgICAgICAgb3B0aW9ucyA9IEVORk9SQ0VEX09QVElPTlM7CiAgICAgIH0KICAgICAgdGhpcy5vcHRpb25zID0gZmlsbE9wdGlvbnNXaXRoRGVmYXVsdHMob3B0aW9ucyk7CiAgICAgIHRoaXMubWV0aG9kID0gY2hvb3NlTWV0aG9kKHRoaXMub3B0aW9ucyk7CiAgICAgIHRoaXMuX2lMID0gZmFsc2U7CiAgICAgIHRoaXMuX29uTUwgPSBudWxsOwogICAgICB0aGlzLl9hZGRFTCA9IHsKICAgICAgICBtZXNzYWdlOiBbXSwKICAgICAgICBpbnRlcm5hbDogW10KICAgICAgfTsKICAgICAgdGhpcy5fdU1QID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAgICAgdGhpcy5fYmVmQyA9IFtdOwogICAgICB0aGlzLl9wcmVwUCA9IG51bGw7CiAgICAgIF9wcmVwYXJlQ2hhbm5lbCh0aGlzKTsKICAgIH07CiAgICBCcm9hZGNhc3RDaGFubmVsMi5fcHVia2V5ID0gdHJ1ZTsKICAgIEJyb2FkY2FzdENoYW5uZWwyLnByb3RvdHlwZSA9IHsKICAgICAgcG9zdE1lc3NhZ2U6IGZ1bmN0aW9uIHBvc3RNZXNzYWdlNShtc2cpIHsKICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbC5wb3N0TWVzc2FnZSgpOiBDYW5ub3QgcG9zdCBtZXNzYWdlIGFmdGVyIGNoYW5uZWwgaGFzIGNsb3NlZCAiICsgLyoqCiAgICAgICAgICAgKiBJbiB0aGUgcGFzdCB3aGVuIHRoaXMgZXJyb3IgYXBwZWFyZWQsIGl0IHdhcyByZWFsbHkgaGFyZCB0byBkZWJ1Zy4KICAgICAgICAgICAqIFNvIG5vdyB3ZSBsb2cgdGhlIG1zZyB0b2dldGhlciB3aXRoIHRoZSBlcnJvciBzbyBpdCBhdCBsZWFzdAogICAgICAgICAgICogZ2l2ZXMgc29tZSBjbHVlIGFib3V0IHdoZXJlIGluIHlvdXIgYXBwbGljYXRpb24gdGhpcyBoYXBwZW5zLgogICAgICAgICAgICovCiAgICAgICAgICBKU09OLnN0cmluZ2lmeShtc2cpKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIF9wb3N0KHRoaXMsICJtZXNzYWdlIiwgbXNnKTsKICAgICAgfSwKICAgICAgcG9zdEludGVybmFsOiBmdW5jdGlvbiBwb3N0SW50ZXJuYWwobXNnKSB7CiAgICAgICAgcmV0dXJuIF9wb3N0KHRoaXMsICJpbnRlcm5hbCIsIG1zZyk7CiAgICAgIH0sCiAgICAgIHNldCBvbm1lc3NhZ2UoZm4pIHsKICAgICAgICB2YXIgdGltZSA9IHRoaXMubWV0aG9kLm1pY3JvU2Vjb25kcygpOwogICAgICAgIHZhciBsaXN0ZW5PYmogPSB7CiAgICAgICAgICB0aW1lLAogICAgICAgICAgZm4KICAgICAgICB9OwogICAgICAgIF9yZW1vdmVMaXN0ZW5lck9iamVjdCh0aGlzLCAibWVzc2FnZSIsIHRoaXMuX29uTUwpOwogICAgICAgIGlmIChmbiAmJiB0eXBlb2YgZm4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHRoaXMuX29uTUwgPSBsaXN0ZW5PYmo7CiAgICAgICAgICBfYWRkTGlzdGVuZXJPYmplY3QodGhpcywgIm1lc3NhZ2UiLCBsaXN0ZW5PYmopOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGFkZEV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIGFkZEV2ZW50TGlzdGVuZXIodHlwZTUsIGZuKSB7CiAgICAgICAgdmFyIHRpbWUgPSB0aGlzLm1ldGhvZC5taWNyb1NlY29uZHMoKTsKICAgICAgICB2YXIgbGlzdGVuT2JqID0gewogICAgICAgICAgdGltZSwKICAgICAgICAgIGZuCiAgICAgICAgfTsKICAgICAgICBfYWRkTGlzdGVuZXJPYmplY3QodGhpcywgdHlwZTUsIGxpc3Rlbk9iaik7CiAgICAgIH0sCiAgICAgIHJlbW92ZUV2ZW50TGlzdGVuZXI6IGZ1bmN0aW9uIHJlbW92ZUV2ZW50TGlzdGVuZXIodHlwZTUsIGZuKSB7CiAgICAgICAgdmFyIG9iaiA9IHRoaXMuX2FkZEVMW3R5cGU1XS5maW5kKGZ1bmN0aW9uKG9iajIpIHsKICAgICAgICAgIHJldHVybiBvYmoyLmZuID09PSBmbjsKICAgICAgICB9KTsKICAgICAgICBfcmVtb3ZlTGlzdGVuZXJPYmplY3QodGhpcywgdHlwZTUsIG9iaik7CiAgICAgIH0sCiAgICAgIGNsb3NlOiBmdW5jdGlvbiBjbG9zZTUoKSB7CiAgICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgICBpZiAodGhpcy5jbG9zZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgT1BFTl9CUk9BRENBU1RfQ0hBTk5FTFNbImRlbGV0ZSJdKHRoaXMpOwogICAgICAgIHRoaXMuY2xvc2VkID0gdHJ1ZTsKICAgICAgICB2YXIgYXdhaXRQcmVwYXJlID0gdGhpcy5fcHJlcFAgPyB0aGlzLl9wcmVwUCA6IFBST01JU0VfUkVTT0xWRURfVk9JRDsKICAgICAgICB0aGlzLl9vbk1MID0gbnVsbDsKICAgICAgICB0aGlzLl9hZGRFTC5tZXNzYWdlID0gW107CiAgICAgICAgcmV0dXJuIGF3YWl0UHJlcGFyZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIFByb21pc2UuYWxsKEFycmF5LmZyb20oX3RoaXMuX3VNUCkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gUHJvbWlzZS5hbGwoX3RoaXMuX2JlZkMubWFwKGZ1bmN0aW9uKGZuKSB7CiAgICAgICAgICAgIHJldHVybiBmbigpOwogICAgICAgICAgfSkpOwogICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gX3RoaXMubWV0aG9kLmNsb3NlKF90aGlzLl9zdGF0ZSk7CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGdldCB0eXBlKCkgewogICAgICAgIHJldHVybiB0aGlzLm1ldGhvZC50eXBlOwogICAgICB9LAogICAgICBnZXQgaXNDbG9zZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuY2xvc2VkOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9icm93c2VyLmpzCmZ1bmN0aW9uIGFkZEJyb3dzZXIoZm4pIHsKICBpZiAodHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlID09PSAiZnVuY3Rpb24iICYmIHNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSkgewogICAgdmFyIG9sZENsb3NlID0gc2VsZi5jbG9zZS5iaW5kKHNlbGYpOwogICAgc2VsZi5jbG9zZSA9IGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgICByZXR1cm4gb2xkQ2xvc2UoKTsKICAgIH07CiAgfSBlbHNlIHsKICAgIGlmICh0eXBlb2Ygd2luZG93LmFkZEV2ZW50TGlzdGVuZXIgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoImJlZm9yZXVubG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICBmbigpOwogICAgfSwgdHJ1ZSk7CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigidW5sb2FkIiwgZnVuY3Rpb24oKSB7CiAgICAgIGZuKCk7CiAgICB9LCB0cnVlKTsKICB9Cn0KdmFyIGluaXRfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvYnJvd3Nlci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL25vZGUuanMKZnVuY3Rpb24gYWRkTm9kZShmbikgewogIHByb2Nlc3Mub24oImV4aXQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpOwogIH0pOwogIHByb2Nlc3Mub24oImJlZm9yZUV4aXQiLCBmdW5jdGlvbigpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiBwcm9jZXNzLmV4aXQoKTsKICAgIH0pOwogIH0pOwogIHByb2Nlc3Mub24oIlNJR0lOVCIsIGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGZuKCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHByb2Nlc3MuZXhpdCgpOwogICAgfSk7CiAgfSk7CiAgcHJvY2Vzcy5vbigidW5jYXVnaHRFeGNlcHRpb24iLCBmdW5jdGlvbihlcnIpIHsKICAgIHJldHVybiBmbigpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGNvbnNvbGUudHJhY2UoZXJyKTsKICAgICAgcHJvY2Vzcy5leGl0KDEwMSk7CiAgICB9KTsKICB9KTsKfQp2YXIgaW5pdF9ub2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5sb2FkQDIuNC4xL25vZGVfbW9kdWxlcy91bmxvYWQvZGlzdC9lcy9ub2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VubG9hZEAyLjQuMS9ub2RlX21vZHVsZXMvdW5sb2FkL2Rpc3QvZXMvaW5kZXguanMKZnVuY3Rpb24gc3RhcnRMaXN0ZW5pbmcoKSB7CiAgaWYgKHN0YXJ0ZWRMaXN0ZW5pbmcpIHsKICAgIHJldHVybjsKICB9CiAgc3RhcnRlZExpc3RlbmluZyA9IHRydWU7CiAgVVNFX01FVEhPRChydW5BbGwpOwp9CmZ1bmN0aW9uIGFkZDIoZm4pIHsKICBzdGFydExpc3RlbmluZygpOwogIGlmICh0eXBlb2YgZm4gIT09ICJmdW5jdGlvbiIpIHsKICAgIHRocm93IG5ldyBFcnJvcigiTGlzdGVuZXIgaXMgbm8gZnVuY3Rpb24iKTsKICB9CiAgTElTVEVORVJTLmFkZChmbik7CiAgdmFyIGFkZFJldHVybiA9IHsKICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlMigpIHsKICAgICAgcmV0dXJuIExJU1RFTkVSU1siZGVsZXRlIl0oZm4pOwogICAgfSwKICAgIHJ1bjogZnVuY3Rpb24gcnVuKCkgewogICAgICBMSVNURU5FUlNbImRlbGV0ZSJdKGZuKTsKICAgICAgcmV0dXJuIGZuKCk7CiAgICB9CiAgfTsKICByZXR1cm4gYWRkUmV0dXJuOwp9CmZ1bmN0aW9uIHJ1bkFsbCgpIHsKICB2YXIgcHJvbWlzZXMgPSBbXTsKICBMSVNURU5FUlMuZm9yRWFjaChmdW5jdGlvbihmbikgewogICAgcHJvbWlzZXMucHVzaChmbigpKTsKICAgIExJU1RFTkVSU1siZGVsZXRlIl0oZm4pOwogIH0pOwogIHJldHVybiBQcm9taXNlLmFsbChwcm9taXNlcyk7Cn0KZnVuY3Rpb24gcmVtb3ZlQWxsKCkgewogIExJU1RFTkVSUy5jbGVhcigpOwp9CmZ1bmN0aW9uIGdldFNpemUoKSB7CiAgcmV0dXJuIExJU1RFTkVSUy5zaXplOwp9CnZhciBpc05vZGUsIFVTRV9NRVRIT0QsIExJU1RFTkVSUywgc3RhcnRlZExpc3RlbmluZzsKdmFyIGluaXRfZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmxvYWRAMi40LjEvbm9kZV9tb2R1bGVzL3VubG9hZC9kaXN0L2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnJvd3NlcigpOwogICAgaW5pdF9ub2RlKCk7CiAgICBpc05vZGUgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodHlwZW9mIHByb2Nlc3MgIT09ICJ1bmRlZmluZWQiID8gcHJvY2VzcyA6IDApID09PSAiW29iamVjdCBwcm9jZXNzXSI7CiAgICBVU0VfTUVUSE9EID0gaXNOb2RlID8gYWRkTm9kZSA6IGFkZEJyb3dzZXI7CiAgICBMSVNURU5FUlMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgc3RhcnRlZExpc3RlbmluZyA9IGZhbHNlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi11dGlsLmpzCmZ1bmN0aW9uIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsIGFjdGlvbikgewogIHZhciBtc2dKc29uID0gewogICAgY29udGV4dDogImxlYWRlciIsCiAgICBhY3Rpb24sCiAgICB0b2tlbjogbGVhZGVyRWxlY3Rvci50b2tlbgogIH07CiAgcmV0dXJuIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5wb3N0SW50ZXJuYWwobXNnSnNvbik7Cn0KZnVuY3Rpb24gYmVMZWFkZXIobGVhZGVyRWxlY3RvcikgewogIGxlYWRlckVsZWN0b3IuaXNMZWFkZXIgPSB0cnVlOwogIGxlYWRlckVsZWN0b3IuX2hhc0xlYWRlciA9IHRydWU7CiAgdmFyIHVubG9hZEZuID0gYWRkMihmdW5jdGlvbigpIHsKICAgIHJldHVybiBsZWFkZXJFbGVjdG9yLmRpZSgpOwogIH0pOwogIGxlYWRlckVsZWN0b3IuX3VubC5wdXNoKHVubG9hZEZuKTsKICB2YXIgaXNMZWFkZXJMaXN0ZW5lciA9IGZ1bmN0aW9uIGlzTGVhZGVyTGlzdGVuZXIyKG1zZykgewogICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cuYWN0aW9uID09PSAiYXBwbHkiKSB7CiAgICAgIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICJ0ZWxsIik7CiAgICB9CiAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy5hY3Rpb24gPT09ICJ0ZWxsIiAmJiAhbGVhZGVyRWxlY3Rvci5fZHBMQykgewogICAgICBsZWFkZXJFbGVjdG9yLl9kcExDID0gdHJ1ZTsKICAgICAgbGVhZGVyRWxlY3Rvci5fZHBMKCk7CiAgICAgIHNlbmRMZWFkZXJNZXNzYWdlKGxlYWRlckVsZWN0b3IsICJ0ZWxsIik7CiAgICB9CiAgfTsKICBsZWFkZXJFbGVjdG9yLmJyb2FkY2FzdENoYW5uZWwuYWRkRXZlbnRMaXN0ZW5lcigiaW50ZXJuYWwiLCBpc0xlYWRlckxpc3RlbmVyKTsKICBsZWFkZXJFbGVjdG9yLl9sc3Rucy5wdXNoKGlzTGVhZGVyTGlzdGVuZXIpOwogIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShsZWFkZXJFbGVjdG9yLCAidGVsbCIpOwp9CnZhciBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi11dGlsLmpzIigpIHsKICAgIGluaXRfZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24td2ViLWxvY2suanMKdmFyIExlYWRlckVsZWN0aW9uV2ViTG9jaywgTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRTsKdmFyIGluaXRfbGVhZGVyX2VsZWN0aW9uX3dlYl9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2xlYWRlci1lbGVjdGlvbi13ZWItbG9jay5qcyIoKSB7CiAgICBpbml0X3V0aWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uX3V0aWwoKTsKICAgIExlYWRlckVsZWN0aW9uV2ViTG9jayA9IGZ1bmN0aW9uIExlYWRlckVsZWN0aW9uV2ViTG9jazIoYnJvYWRjYXN0Q2hhbm5lbCwgb3B0aW9ucykgewogICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBicm9hZGNhc3RDaGFubmVsOwogICAgICBicm9hZGNhc3RDaGFubmVsLl9iZWZDLnB1c2goZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIF90aGlzLmRpZSgpOwogICAgICB9KTsKICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgdGhpcy5pc0RlYWQgPSBmYWxzZTsKICAgICAgdGhpcy50b2tlbiA9IHJhbmRvbVRva2VuKCk7CiAgICAgIHRoaXMuX2xzdG5zID0gW107CiAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICB0aGlzLl9kcEwgPSBmdW5jdGlvbigpIHsKICAgICAgfTsKICAgICAgdGhpcy5fZHBMQyA9IGZhbHNlOwogICAgICB0aGlzLl93S01DID0ge307CiAgICAgIHRoaXMubE4gPSAicHVia2V5LWJjfHwiICsgYnJvYWRjYXN0Q2hhbm5lbC5tZXRob2QudHlwZSArICJ8fCIgKyBicm9hZGNhc3RDaGFubmVsLm5hbWU7CiAgICB9OwogICAgTEVBREVSX0RJRV9BQk9SVF9TSUdOQUxfTUVTU0FHRSA9ICJMZWFkZXJFbGVjdGlvbldlYkxvY2suZGllKCkgY2FsbGVkIjsKICAgIExlYWRlckVsZWN0aW9uV2ViTG9jay5wcm90b3R5cGUgPSB7CiAgICAgIGhhc0xlYWRlcjogZnVuY3Rpb24gaGFzTGVhZGVyKCkgewogICAgICAgIHZhciBfdGhpczIgPSB0aGlzOwogICAgICAgIHJldHVybiBuYXZpZ2F0b3IubG9ja3MucXVlcnkoKS50aGVuKGZ1bmN0aW9uKGxvY2tzKSB7CiAgICAgICAgICB2YXIgcmVsZXZhbnRMb2NrcyA9IGxvY2tzLmhlbGQgPyBsb2Nrcy5oZWxkLmZpbHRlcihmdW5jdGlvbihsb2NrKSB7CiAgICAgICAgICAgIHJldHVybiBsb2NrLm5hbWUgPT09IF90aGlzMi5sTjsKICAgICAgICAgIH0pIDogW107CiAgICAgICAgICBpZiAocmVsZXZhbnRMb2NrcyAmJiByZWxldmFudExvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGF3YWl0TGVhZGVyc2hpcDogZnVuY3Rpb24gYXdhaXRMZWFkZXJzaGlwKCkgewogICAgICAgIHZhciBfdGhpczMgPSB0aGlzOwogICAgICAgIGlmICghdGhpcy5fd0xNUCkgewogICAgICAgICAgdGhpcy5fd0tNQy5jID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgICAgdmFyIHJldHVyblByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMsIHJlaikgewogICAgICAgICAgICBfdGhpczMuX3dLTUMucmVzID0gcmVzOwogICAgICAgICAgICBfdGhpczMuX3dLTUMucmVqID0gcmVqOwogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLl93TE1QID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzLCByZWplY3QpIHsKICAgICAgICAgICAgbmF2aWdhdG9yLmxvY2tzLnJlcXVlc3QoX3RoaXMzLmxOLCB7CiAgICAgICAgICAgICAgc2lnbmFsOiBfdGhpczMuX3dLTUMuYy5zaWduYWwKICAgICAgICAgICAgfSwgZnVuY3Rpb24oKSB7CiAgICAgICAgICAgICAgX3RoaXMzLl93S01DLmMgPSB2b2lkIDA7CiAgICAgICAgICAgICAgYmVMZWFkZXIoX3RoaXMzKTsKICAgICAgICAgICAgICByZXMoKTsKICAgICAgICAgICAgICByZXR1cm4gcmV0dXJuUHJvbWlzZTsKICAgICAgICAgICAgfSlbImNhdGNoIl0oZnVuY3Rpb24oZXJyKSB7CiAgICAgICAgICAgICAgaWYgKGVyci5tZXNzYWdlICYmIGVyci5tZXNzYWdlID09PSBMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFKSB7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGlmIChfdGhpczMuX3dLTUMucmVqKSB7CiAgICAgICAgICAgICAgICAgIF90aGlzMy5fd0tNQy5yZWooZXJyKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIHJlamVjdChlcnIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX3dMTVA7CiAgICAgIH0sCiAgICAgIHNldCBvbmR1cGxpY2F0ZShfZm4pIHsKICAgICAgfSwKICAgICAgZGllOiBmdW5jdGlvbiBkaWUoKSB7CiAgICAgICAgdmFyIF90aGlzNCA9IHRoaXM7CiAgICAgICAgdGhpcy5fbHN0bnMuZm9yRWFjaChmdW5jdGlvbihsaXN0ZW5lcjIpIHsKICAgICAgICAgIHJldHVybiBfdGhpczQuYnJvYWRjYXN0Q2hhbm5lbC5yZW1vdmVFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGxpc3RlbmVyMik7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fbHN0bnMgPSBbXTsKICAgICAgICB0aGlzLl91bmwuZm9yRWFjaChmdW5jdGlvbih1Rm4pIHsKICAgICAgICAgIHJldHVybiB1Rm4ucmVtb3ZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5fdW5sID0gW107CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy5pc0RlYWQgPSB0cnVlOwogICAgICAgIGlmICh0aGlzLl93S01DLnJlcykgewogICAgICAgICAgdGhpcy5fd0tNQy5yZXMoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3dLTUMuYykgewogICAgICAgICAgdGhpcy5fd0tNQy5jLmFib3J0KG5ldyBFcnJvcihMRUFERVJfRElFX0FCT1JUX1NJR05BTF9NRVNTQUdFKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZSh0aGlzLCAiZGVhdGgiKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Jyb2FkY2FzdC1jaGFubmVsQDcuMy4wL25vZGVfbW9kdWxlcy9icm9hZGNhc3QtY2hhbm5lbC9kaXN0L2VzYnJvd3Nlci9sZWFkZXItZWxlY3Rpb24uanMKZnVuY3Rpb24gX2F3YWl0TGVhZGVyc2hpcE9uY2UobGVhZGVyRWxlY3RvcikgewogIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzKSB7CiAgICB2YXIgcmVzb2x2ZWQyID0gZmFsc2U7CiAgICBmdW5jdGlvbiBmaW5pc2goKSB7CiAgICAgIGlmIChyZXNvbHZlZDIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgcmVzb2x2ZWQyID0gdHJ1ZTsKICAgICAgbGVhZGVyRWxlY3Rvci5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgd2hlbkRlYXRoTGlzdGVuZXIpOwogICAgICByZXModHJ1ZSk7CiAgICB9CiAgICBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgZmluaXNoKCk7CiAgICAgIH0KICAgIH0pOwogICAgdmFyIF90cnlPbkZhbGxCYWNrID0gZnVuY3Rpb24gdHJ5T25GYWxsQmFjaygpIHsKICAgICAgcmV0dXJuIHNsZWVwKGxlYWRlckVsZWN0b3IuX29wdGlvbnMuZmFsbGJhY2tJbnRlcnZhbCkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0RlYWQgfHwgcmVzb2x2ZWQyKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgICBmaW5pc2goKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGxlYWRlckVsZWN0b3IuYXBwbHlPbmNlKHRydWUpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIGlmIChsZWFkZXJFbGVjdG9yLmlzTGVhZGVyKSB7CiAgICAgICAgICAgICAgZmluaXNoKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgX3RyeU9uRmFsbEJhY2soKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBfdHJ5T25GYWxsQmFjaygpOwogICAgdmFyIHdoZW5EZWF0aExpc3RlbmVyID0gZnVuY3Rpb24gd2hlbkRlYXRoTGlzdGVuZXIyKG1zZykgewogICAgICBpZiAobXNnLmNvbnRleHQgPT09ICJsZWFkZXIiICYmIG1zZy5hY3Rpb24gPT09ICJkZWF0aCIpIHsKICAgICAgICBsZWFkZXJFbGVjdG9yLl9oYXNMZWFkZXIgPSBmYWxzZTsKICAgICAgICBsZWFkZXJFbGVjdG9yLmFwcGx5T25jZSgpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICBpZiAobGVhZGVyRWxlY3Rvci5pc0xlYWRlcikgewogICAgICAgICAgICBmaW5pc2goKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGxlYWRlckVsZWN0b3IuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIHdoZW5EZWF0aExpc3RlbmVyKTsKICAgIGxlYWRlckVsZWN0b3IuX2xzdG5zLnB1c2god2hlbkRlYXRoTGlzdGVuZXIpOwogIH0pOwp9CmZ1bmN0aW9uIGZpbGxPcHRpb25zV2l0aERlZmF1bHRzMihvcHRpb25zLCBjaGFubmVsKSB7CiAgaWYgKCFvcHRpb25zKSBvcHRpb25zID0ge307CiAgb3B0aW9ucyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkob3B0aW9ucykpOwogIGlmICghb3B0aW9ucy5mYWxsYmFja0ludGVydmFsKSB7CiAgICBvcHRpb25zLmZhbGxiYWNrSW50ZXJ2YWwgPSAzZTM7CiAgfQogIGlmICghb3B0aW9ucy5yZXNwb25zZVRpbWUpIHsKICAgIG9wdGlvbnMucmVzcG9uc2VUaW1lID0gY2hhbm5lbC5tZXRob2QuYXZlcmFnZVJlc3BvbnNlVGltZShjaGFubmVsLm9wdGlvbnMpOwogIH0KICByZXR1cm4gb3B0aW9uczsKfQpmdW5jdGlvbiBjcmVhdGVMZWFkZXJFbGVjdGlvbihjaGFubmVsLCBvcHRpb25zKSB7CiAgaWYgKGNoYW5uZWwuX2xlYWRlckVsZWN0b3IpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQnJvYWRjYXN0Q2hhbm5lbCBhbHJlYWR5IGhhcyBhIGxlYWRlci1lbGVjdG9yIik7CiAgfQogIG9wdGlvbnMgPSBmaWxsT3B0aW9uc1dpdGhEZWZhdWx0czIob3B0aW9ucywgY2hhbm5lbCk7CiAgdmFyIGVsZWN0b3IgPSBzdXBwb3J0c1dlYkxvY2tBUEkoKSA/IG5ldyBMZWFkZXJFbGVjdGlvbldlYkxvY2soY2hhbm5lbCwgb3B0aW9ucykgOiBuZXcgTGVhZGVyRWxlY3Rpb24oY2hhbm5lbCwgb3B0aW9ucyk7CiAgY2hhbm5lbC5fYmVmQy5wdXNoKGZ1bmN0aW9uKCkgewogICAgcmV0dXJuIGVsZWN0b3IuZGllKCk7CiAgfSk7CiAgY2hhbm5lbC5fbGVhZGVyRWxlY3RvciA9IGVsZWN0b3I7CiAgcmV0dXJuIGVsZWN0b3I7Cn0KdmFyIExlYWRlckVsZWN0aW9uOwp2YXIgaW5pdF9sZWFkZXJfZWxlY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvbGVhZGVyLWVsZWN0aW9uLmpzIigpIHsKICAgIGluaXRfdXRpbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fdXRpbCgpOwogICAgaW5pdF9sZWFkZXJfZWxlY3Rpb25fd2ViX2xvY2soKTsKICAgIExlYWRlckVsZWN0aW9uID0gZnVuY3Rpb24gTGVhZGVyRWxlY3Rpb24yKGJyb2FkY2FzdENoYW5uZWwsIG9wdGlvbnMpIHsKICAgICAgdmFyIF90aGlzID0gdGhpczsKICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsID0gYnJvYWRjYXN0Q2hhbm5lbDsKICAgICAgdGhpcy5fb3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgIHRoaXMuaXNMZWFkZXIgPSBmYWxzZTsKICAgICAgdGhpcy5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgIHRoaXMuaXNEZWFkID0gZmFsc2U7CiAgICAgIHRoaXMudG9rZW4gPSByYW5kb21Ub2tlbigpOwogICAgICB0aGlzLl9hcGxRID0gUFJPTUlTRV9SRVNPTFZFRF9WT0lEOwogICAgICB0aGlzLl9hcGxRQyA9IDA7CiAgICAgIHRoaXMuX3VubCA9IFtdOwogICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICB0aGlzLl9kcEwgPSBmdW5jdGlvbigpIHsKICAgICAgfTsKICAgICAgdGhpcy5fZHBMQyA9IGZhbHNlOwogICAgICB2YXIgaGFzTGVhZGVyTGlzdGVuZXIgPSBmdW5jdGlvbiBoYXNMZWFkZXJMaXN0ZW5lcjIobXNnKSB7CiAgICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIikgewogICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJkZWF0aCIpIHsKICAgICAgICAgICAgX3RoaXMuX2hhc0xlYWRlciA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJ0ZWxsIikgewogICAgICAgICAgICBfdGhpcy5faGFzTGVhZGVyID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhc0xlYWRlckxpc3RlbmVyKTsKICAgICAgdGhpcy5fbHN0bnMucHVzaChoYXNMZWFkZXJMaXN0ZW5lcik7CiAgICB9OwogICAgTGVhZGVyRWxlY3Rpb24ucHJvdG90eXBlID0gewogICAgICBoYXNMZWFkZXI6IGZ1bmN0aW9uIGhhc0xlYWRlcjIoKSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSh0aGlzLl9oYXNMZWFkZXIpOwogICAgICB9LAogICAgICAvKioKICAgICAgICogUmV0dXJucyB0cnVlIGlmIHRoZSBpbnN0YW5jZSBpcyBsZWFkZXIsCiAgICAgICAqIGZhbHNlIGlmIG5vdC4KICAgICAgICogQGFzeW5jCiAgICAgICAqLwogICAgICBhcHBseU9uY2U6IGZ1bmN0aW9uIGFwcGx5T25jZShpc0Zyb21GYWxsYmFja0ludGVydmFsKSB7CiAgICAgICAgdmFyIF90aGlzMiA9IHRoaXM7CiAgICAgICAgaWYgKHRoaXMuaXNMZWFkZXIpIHsKICAgICAgICAgIHJldHVybiBzbGVlcCgwLCB0cnVlKTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNEZWFkKSB7CiAgICAgICAgICByZXR1cm4gc2xlZXAoMCwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5fYXBsUUMgPiAxKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5fYXBsUTsKICAgICAgICB9CiAgICAgICAgdmFyIGFwcGx5UnVuID0gZnVuY3Rpb24gYXBwbHlSdW4yKCkgewogICAgICAgICAgaWYgKF90aGlzMi5pc0xlYWRlcikgewogICAgICAgICAgICByZXR1cm4gUFJPTUlTRV9SRVNPTFZFRF9UUlVFOwogICAgICAgICAgfQogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYSA9IGZhbHNlOwogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYVByb21pc2VSZXNvbHZlOwogICAgICAgICAgdmFyIHN0b3BDcml0ZXJpYVByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXMpIHsKICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUgPSBmdW5jdGlvbiBzdG9wQ3JpdGVyaWFQcm9taXNlUmVzb2x2ZTIoKSB7CiAgICAgICAgICAgICAgc3RvcENyaXRlcmlhID0gdHJ1ZTsKICAgICAgICAgICAgICByZXMoKTsKICAgICAgICAgICAgfTsKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIGhhbmRsZU1lc3NhZ2UgPSBmdW5jdGlvbiBoYW5kbGVNZXNzYWdlMihtc2cpIHsKICAgICAgICAgICAgaWYgKG1zZy5jb250ZXh0ID09PSAibGVhZGVyIiAmJiBtc2cudG9rZW4gIT0gX3RoaXMyLnRva2VuKSB7CiAgICAgICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJhcHBseSIpIHsKICAgICAgICAgICAgICAgIGlmIChtc2cudG9rZW4gPiBfdGhpczIudG9rZW4pIHsKICAgICAgICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUoKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgaWYgKG1zZy5hY3Rpb24gPT09ICJ0ZWxsIikgewogICAgICAgICAgICAgICAgc3RvcENyaXRlcmlhUHJvbWlzZVJlc29sdmUoKTsKICAgICAgICAgICAgICAgIF90aGlzMi5faGFzTGVhZGVyID0gdHJ1ZTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBfdGhpczIuYnJvYWRjYXN0Q2hhbm5lbC5hZGRFdmVudExpc3RlbmVyKCJpbnRlcm5hbCIsIGhhbmRsZU1lc3NhZ2UpOwogICAgICAgICAgdmFyIHdhaXRGb3JBbnN3ZXJUaW1lID0gaXNGcm9tRmFsbGJhY2tJbnRlcnZhbCA/IF90aGlzMi5fb3B0aW9ucy5yZXNwb25zZVRpbWUgKiA0IDogX3RoaXMyLl9vcHRpb25zLnJlc3BvbnNlVGltZTsKICAgICAgICAgIHJldHVybiBzZW5kTGVhZGVyTWVzc2FnZShfdGhpczIsICJhcHBseSIpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3NsZWVwKHdhaXRGb3JBbnN3ZXJUaW1lKSwgc3RvcENyaXRlcmlhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoKSk7CiAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICB9KS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UoX3RoaXMyLCAiYXBwbHkiKTsKICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJhY2UoW3NsZWVwKHdhaXRGb3JBbnN3ZXJUaW1lKSwgc3RvcENyaXRlcmlhUHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoKSk7CiAgICAgICAgICAgIH0pXSk7CiAgICAgICAgICB9KVsiY2F0Y2giXShmdW5jdGlvbigpIHsKICAgICAgICAgIH0pLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgICAgIF90aGlzMi5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgaGFuZGxlTWVzc2FnZSk7CiAgICAgICAgICAgIGlmICghc3RvcENyaXRlcmlhKSB7CiAgICAgICAgICAgICAgcmV0dXJuIGJlTGVhZGVyKF90aGlzMikudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9hcGxRQyA9IHRoaXMuX2FwbFFDICsgMTsKICAgICAgICB0aGlzLl9hcGxRID0gdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIGFwcGx5UnVuKCk7CiAgICAgICAgfSkudGhlbihmdW5jdGlvbigpIHsKICAgICAgICAgIF90aGlzMi5fYXBsUUMgPSBfdGhpczIuX2FwbFFDIC0gMTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gdGhpcy5fYXBsUS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuIF90aGlzMi5pc0xlYWRlcjsKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgYXdhaXRMZWFkZXJzaGlwOiBmdW5jdGlvbiBhd2FpdExlYWRlcnNoaXAyKCkgewogICAgICAgIGlmICgKICAgICAgICAgIC8qIF9hd2FpdExlYWRlcnNoaXBQcm9taXNlICovCiAgICAgICAgICAhdGhpcy5fYUxQCiAgICAgICAgKSB7CiAgICAgICAgICB0aGlzLl9hTFAgPSBfYXdhaXRMZWFkZXJzaGlwT25jZSh0aGlzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuX2FMUDsKICAgICAgfSwKICAgICAgc2V0IG9uZHVwbGljYXRlKGZuKSB7CiAgICAgICAgdGhpcy5fZHBMID0gZm47CiAgICAgIH0sCiAgICAgIGRpZTogZnVuY3Rpb24gZGllMigpIHsKICAgICAgICB2YXIgX3RoaXMzID0gdGhpczsKICAgICAgICB0aGlzLl9sc3Rucy5mb3JFYWNoKGZ1bmN0aW9uKGxpc3RlbmVyMikgewogICAgICAgICAgcmV0dXJuIF90aGlzMy5icm9hZGNhc3RDaGFubmVsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImludGVybmFsIiwgbGlzdGVuZXIyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl9sc3RucyA9IFtdOwogICAgICAgIHRoaXMuX3VubC5mb3JFYWNoKGZ1bmN0aW9uKHVGbikgewogICAgICAgICAgcmV0dXJuIHVGbi5yZW1vdmUoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl91bmwgPSBbXTsKICAgICAgICBpZiAodGhpcy5pc0xlYWRlcikgewogICAgICAgICAgdGhpcy5faGFzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgICB0aGlzLmlzTGVhZGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaXNEZWFkID0gdHJ1ZTsKICAgICAgICByZXR1cm4gc2VuZExlYWRlck1lc3NhZ2UodGhpcywgImRlYXRoIik7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9icm9hZGNhc3QtY2hhbm5lbEA3LjMuMC9ub2RlX21vZHVsZXMvYnJvYWRjYXN0LWNoYW5uZWwvZGlzdC9lc2Jyb3dzZXIvaW5kZXguanMKdmFyIGluaXRfZXNicm93c2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vYnJvYWRjYXN0LWNoYW5uZWxANy4zLjAvbm9kZV9tb2R1bGVzL2Jyb2FkY2FzdC1jaGFubmVsL2Rpc3QvZXNicm93c2VyL2luZGV4LmpzIigpIHsKICAgIGluaXRfYnJvYWRjYXN0X2NoYW5uZWwoKTsKICAgIGluaXRfbGVhZGVyX2VsZWN0aW9uKCk7CiAgICBpbml0X2xlYWRlcl9lbGVjdGlvbl91dGlsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMucGx1Z2lucy5qcwp2YXIgaW5pdF9kZWVzX2NvbW1zX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNvbW1zQDEuMC4zMC9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jb21tcy9kaXN0X3RzL2RlZXMtY29tbXMucGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHM0KCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9lc2Jyb3dzZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5jbGFzc2VzLmRlZXNjb21tcy5qcwp2YXIgQnJvYWRjYXN0Q2hhbm5lbDQsIERlZXNDb21tczsKdmFyIGluaXRfZGVlc19jb21tc19jbGFzc2VzX2RlZXNjb21tcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvZGVlcy1jb21tcy5jbGFzc2VzLmRlZXNjb21tcy5qcyIoKSB7CiAgICBpbml0X2RlZXNfY29tbXNfcGx1Z2lucygpOwogICAgQnJvYWRjYXN0Q2hhbm5lbDQgPSBnbG9iYWxUaGlzLkJyb2FkY2FzdENoYW5uZWw7CiAgICBpZiAoIUJyb2FkY2FzdENoYW5uZWw0KSB7CiAgICAgIEJyb2FkY2FzdENoYW5uZWw0ID0gQnJvYWRjYXN0Q2hhbm5lbDI7CiAgICB9CiAgICBEZWVzQ29tbXMgPSBjbGFzcyB7CiAgICAgIC8vIHJlY2VpdmluZyBtZXNzYWdlcwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmJyb2FkY2FzdENoYW5uZWwgPSBuZXcgQnJvYWRjYXN0Q2hhbm5lbDQoImRlZXMtY29tbXMiKTsKICAgICAgICB0aGlzLnR5cGVkcm91dGVyID0gbmV3IGRpc3RfdHNfZXhwb3J0czE1LlR5cGVkUm91dGVyKCk7CiAgICAgICAgdGhpcy50eXBlZHRhcmdldCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFRhcmdldCh7CiAgICAgICAgICBwb3N0TWV0aG9kV2l0aFR5cGVkUm91dGVyOiBhc3luYyAobWVzc2FnZUFyZykgPT4gewogICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKG1lc3NhZ2VBcmcpOwogICAgICAgICAgfSwKICAgICAgICAgIHR5cGVkUm91dGVyUmVmOiB0aGlzLnR5cGVkcm91dGVyCiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLm9ubWVzc2FnZSA9IGFzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBldmVudEFyZy5tZXRob2QgPyBldmVudEFyZyA6IGV2ZW50QXJnLmRhdGE7CiAgICAgICAgICBjb25zb2xlLmxvZyhKU09OLnN0cmluZ2lmeShtZXNzYWdlMikpOwogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCB0aGlzLnR5cGVkcm91dGVyLnJvdXRlQW5kQWRkUmVzcG9uc2UobWVzc2FnZTIsIHsgc2tpcEhvb2tzOiB0cnVlIH0pOwogICAgICAgICAgaWYgKHJlc3BvbnNlICYmICFyZXNwb25zZS5lcnJvcikgewogICAgICAgICAgICB0aGlzLnBvc3RNZXNzYWdlKHJlc3BvbnNlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlcyBhIHR5cGVkcmVxdWVzdCB3aXRoIHRoaXMgY2xhc3NlcyBwb3N0TWVzc2FnZSBhcyBwb3N0TWV0aG9kCiAgICAgICAqLwogICAgICBjcmVhdGVUeXBlZFJlcXVlc3QobWV0aG9kTmFtZSkgewogICAgICAgIGNvbnN0IHR5cGVkcmVxdWVzdCA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZFJlcXVlc3QodGhpcy50eXBlZHRhcmdldCwgbWV0aG9kTmFtZSk7CiAgICAgICAgcmV0dXJuIHR5cGVkcmVxdWVzdDsKICAgICAgfQogICAgICAvKioKICAgICAgICogcG9zdHMgYSB0eXBlZHJlcXVlc3RtZXNzYWdlCiAgICAgICAqLwogICAgICBhc3luYyBwb3N0TWVzc2FnZShtZXNzYWdlQXJnKSB7CiAgICAgICAgdGhpcy5icm9hZGNhc3RDaGFubmVsLnBvc3RNZXNzYWdlKG1lc3NhZ2VBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzdWJzY3JpYmUgdG8gbWVzc2FnZXMKICAgICAgICovCiAgICAgIGFzeW5jIGNyZWF0ZVR5cGVkSGFuZGxlcihtZXRob2RBcmcsIGhhbmRsZXJGdW5jdGlvbikgewogICAgICAgIHRoaXMudHlwZWRyb3V0ZXIuYWRkVHlwZWRIYW5kbGVyKG5ldyBkaXN0X3RzX2V4cG9ydHMxNS5UeXBlZEhhbmRsZXIobWV0aG9kQXJnLCBoYW5kbGVyRnVuY3Rpb24pKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE2ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE2LCB7CiAgRGVlc0NvbW1zOiAoKSA9PiBEZWVzQ29tbXMKfSk7CnZhciBpbml0X2Rpc3RfdHMxNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY29tbXNAMS4wLjMwL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNvbW1zL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWVzX2NvbW1zX2NsYXNzZXNfZGVlc2NvbW1zKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMKdmFyIHJlcXVpcmVfY29tbW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9jb21tb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgZnVuY3Rpb24gaXNOb3RoaW5nKHN1YmplY3QpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSAidW5kZWZpbmVkIiB8fCBzdWJqZWN0ID09PSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaXNPYmplY3QzKHN1YmplY3QpIHsKICAgICAgcmV0dXJuIHR5cGVvZiBzdWJqZWN0ID09PSAib2JqZWN0IiAmJiBzdWJqZWN0ICE9PSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gdG9BcnJheTMoc2VxdWVuY2UpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoc2VxdWVuY2UpKSByZXR1cm4gc2VxdWVuY2U7CiAgICAgIGVsc2UgaWYgKGlzTm90aGluZyhzZXF1ZW5jZSkpIHJldHVybiBbXTsKICAgICAgcmV0dXJuIFtzZXF1ZW5jZV07CiAgICB9CiAgICBmdW5jdGlvbiBleHRlbmQzKHRhcmdldCwgc291cmNlKSB7CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwga2V5Miwgc291cmNlS2V5czsKICAgICAgaWYgKHNvdXJjZSkgewogICAgICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgIGtleTIgPSBzb3VyY2VLZXlzW2luZGV4Ml07CiAgICAgICAgICB0YXJnZXRba2V5Ml0gPSBzb3VyY2Vba2V5Ml07CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9CiAgICBmdW5jdGlvbiByZXBlYXQzKHN0cmluZzMsIGNvdW50MikgewogICAgICB2YXIgcmVzdWx0ID0gIiIsIGN5Y2xlOwogICAgICBmb3IgKGN5Y2xlID0gMDsgY3ljbGUgPCBjb3VudDI7IGN5Y2xlICs9IDEpIHsKICAgICAgICByZXN1bHQgKz0gc3RyaW5nMzsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNOZWdhdGl2ZVplcm8obnVtYmVyMikgewogICAgICByZXR1cm4gbnVtYmVyMiA9PT0gMCAmJiBOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IDEgLyBudW1iZXIyOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMuaXNOb3RoaW5nID0gaXNOb3RoaW5nOwogICAgbW9kdWxlLmV4cG9ydHMuaXNPYmplY3QgPSBpc09iamVjdDM7CiAgICBtb2R1bGUuZXhwb3J0cy50b0FycmF5ID0gdG9BcnJheTM7CiAgICBtb2R1bGUuZXhwb3J0cy5yZXBlYXQgPSByZXBlYXQzOwogICAgbW9kdWxlLmV4cG9ydHMuaXNOZWdhdGl2ZVplcm8gPSBpc05lZ2F0aXZlWmVybzsKICAgIG1vZHVsZS5leHBvcnRzLmV4dGVuZCA9IGV4dGVuZDM7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMKdmFyIHJlcXVpcmVfZXhjZXB0aW9uID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9leGNlcHRpb24uanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgZnVuY3Rpb24gWUFNTEV4Y2VwdGlvbihyZWFzb24sIG1hcmsyKSB7CiAgICAgIEVycm9yLmNhbGwodGhpcyk7CiAgICAgIHRoaXMubmFtZSA9ICJZQU1MRXhjZXB0aW9uIjsKICAgICAgdGhpcy5yZWFzb24gPSByZWFzb247CiAgICAgIHRoaXMubWFyayA9IG1hcmsyOwogICAgICB0aGlzLm1lc3NhZ2UgPSAodGhpcy5yZWFzb24gfHwgIih1bmtub3duIHJlYXNvbikiKSArICh0aGlzLm1hcmsgPyAiICIgKyB0aGlzLm1hcmsudG9TdHJpbmcoKSA6ICIiKTsKICAgICAgaWYgKEVycm9yLmNhcHR1cmVTdGFja1RyYWNlKSB7CiAgICAgICAgRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcywgdGhpcy5jb25zdHJ1Y3Rvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zdGFjayA9IG5ldyBFcnJvcigpLnN0YWNrIHx8ICIiOwogICAgICB9CiAgICB9CiAgICBZQU1MRXhjZXB0aW9uLnByb3RvdHlwZSA9IE9iamVjdC5jcmVhdGUoRXJyb3IucHJvdG90eXBlKTsKICAgIFlBTUxFeGNlcHRpb24ucHJvdG90eXBlLmNvbnN0cnVjdG9yID0gWUFNTEV4Y2VwdGlvbjsKICAgIFlBTUxFeGNlcHRpb24ucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmczKGNvbXBhY3QpIHsKICAgICAgdmFyIHJlc3VsdCA9IHRoaXMubmFtZSArICI6ICI7CiAgICAgIHJlc3VsdCArPSB0aGlzLnJlYXNvbiB8fCAiKHVua25vd24gcmVhc29uKSI7CiAgICAgIGlmICghY29tcGFjdCAmJiB0aGlzLm1hcmspIHsKICAgICAgICByZXN1bHQgKz0gIiAiICsgdGhpcy5tYXJrLnRvU3RyaW5nKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFlBTUxFeGNlcHRpb247CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9tYXJrLmpzCnZhciByZXF1aXJlX21hcmsgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL21hcmsuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICBmdW5jdGlvbiBNYXJrKG5hbWUsIGJ1ZmZlcjIsIHBvc2l0aW9uMywgbGluZSwgY29sdW1uKSB7CiAgICAgIHRoaXMubmFtZSA9IG5hbWU7CiAgICAgIHRoaXMuYnVmZmVyID0gYnVmZmVyMjsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5saW5lID0gbGluZTsKICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47CiAgICB9CiAgICBNYXJrLnByb3RvdHlwZS5nZXRTbmlwcGV0ID0gZnVuY3Rpb24gZ2V0U25pcHBldChpbmRlbnQzLCBtYXhMZW5ndGgpIHsKICAgICAgdmFyIGhlYWQyLCBzdGFydCwgdGFpbCwgZW5kMywgc25pcHBldDsKICAgICAgaWYgKCF0aGlzLmJ1ZmZlcikgcmV0dXJuIG51bGw7CiAgICAgIGluZGVudDMgPSBpbmRlbnQzIHx8IDQ7CiAgICAgIG1heExlbmd0aCA9IG1heExlbmd0aCB8fCA3NTsKICAgICAgaGVhZDIgPSAiIjsKICAgICAgc3RhcnQgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoc3RhcnQgPiAwICYmICJcMFxyXG5ceDg1XHUyMDI4XHUyMDI5Ii5pbmRleE9mKHRoaXMuYnVmZmVyLmNoYXJBdChzdGFydCAtIDEpKSA9PT0gLTEpIHsKICAgICAgICBzdGFydCAtPSAxOwogICAgICAgIGlmICh0aGlzLnBvc2l0aW9uIC0gc3RhcnQgPiBtYXhMZW5ndGggLyAyIC0gMSkgewogICAgICAgICAgaGVhZDIgPSAiIC4uLiAiOwogICAgICAgICAgc3RhcnQgKz0gNTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICB0YWlsID0gIiI7CiAgICAgIGVuZDMgPSB0aGlzLnBvc2l0aW9uOwogICAgICB3aGlsZSAoZW5kMyA8IHRoaXMuYnVmZmVyLmxlbmd0aCAmJiAiXDBcclxuXHg4NVx1MjAyOFx1MjAyOSIuaW5kZXhPZih0aGlzLmJ1ZmZlci5jaGFyQXQoZW5kMykpID09PSAtMSkgewogICAgICAgIGVuZDMgKz0gMTsKICAgICAgICBpZiAoZW5kMyAtIHRoaXMucG9zaXRpb24gPiBtYXhMZW5ndGggLyAyIC0gMSkgewogICAgICAgICAgdGFpbCA9ICIgLi4uICI7CiAgICAgICAgICBlbmQzIC09IDU7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgc25pcHBldCA9IHRoaXMuYnVmZmVyLnNsaWNlKHN0YXJ0LCBlbmQzKTsKICAgICAgcmV0dXJuIGNvbW1vbi5yZXBlYXQoIiAiLCBpbmRlbnQzKSArIGhlYWQyICsgc25pcHBldCArIHRhaWwgKyAiXG4iICsgY29tbW9uLnJlcGVhdCgiICIsIGluZGVudDMgKyB0aGlzLnBvc2l0aW9uIC0gc3RhcnQgKyBoZWFkMi5sZW5ndGgpICsgIl4iOwogICAgfTsKICAgIE1hcmsucHJvdG90eXBlLnRvU3RyaW5nID0gZnVuY3Rpb24gdG9TdHJpbmczKGNvbXBhY3QpIHsKICAgICAgdmFyIHNuaXBwZXQsIHdoZXJlID0gIiI7CiAgICAgIGlmICh0aGlzLm5hbWUpIHsKICAgICAgICB3aGVyZSArPSAnaW4gIicgKyB0aGlzLm5hbWUgKyAnIiAnOwogICAgICB9CiAgICAgIHdoZXJlICs9ICJhdCBsaW5lICIgKyAodGhpcy5saW5lICsgMSkgKyAiLCBjb2x1bW4gIiArICh0aGlzLmNvbHVtbiArIDEpOwogICAgICBpZiAoIWNvbXBhY3QpIHsKICAgICAgICBzbmlwcGV0ID0gdGhpcy5nZXRTbmlwcGV0KCk7CiAgICAgICAgaWYgKHNuaXBwZXQpIHsKICAgICAgICAgIHdoZXJlICs9ICI6XG4iICsgc25pcHBldDsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHdoZXJlOwogICAgfTsKICAgIG1vZHVsZS5leHBvcnRzID0gTWFyazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUuanMKdmFyIHJlcXVpcmVfdHlwZSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgVFlQRV9DT05TVFJVQ1RPUl9PUFRJT05TID0gWwogICAgICAia2luZCIsCiAgICAgICJyZXNvbHZlIiwKICAgICAgImNvbnN0cnVjdCIsCiAgICAgICJpbnN0YW5jZU9mIiwKICAgICAgInByZWRpY2F0ZSIsCiAgICAgICJyZXByZXNlbnQiLAogICAgICAiZGVmYXVsdFN0eWxlIiwKICAgICAgInN0eWxlQWxpYXNlcyIKICAgIF07CiAgICB2YXIgWUFNTF9OT0RFX0tJTkRTID0gWwogICAgICAic2NhbGFyIiwKICAgICAgInNlcXVlbmNlIiwKICAgICAgIm1hcHBpbmciCiAgICBdOwogICAgZnVuY3Rpb24gY29tcGlsZVN0eWxlQWxpYXNlcyhtYXA3KSB7CiAgICAgIHZhciByZXN1bHQgPSB7fTsKICAgICAgaWYgKG1hcDcgIT09IG51bGwpIHsKICAgICAgICBPYmplY3Qua2V5cyhtYXA3KS5mb3JFYWNoKGZ1bmN0aW9uKHN0eWxlKSB7CiAgICAgICAgICBtYXA3W3N0eWxlXS5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgIHJlc3VsdFtTdHJpbmcoYWxpYXMpXSA9IHN0eWxlOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIFR5cGUyKHRhZywgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgT2JqZWN0LmtleXMob3B0aW9ucykuZm9yRWFjaChmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgaWYgKFRZUEVfQ09OU1RSVUNUT1JfT1BUSU9OUy5pbmRleE9mKG5hbWUpID09PSAtMSkgewogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24gb3B0aW9uICInICsgbmFtZSArICciIGlzIG1ldCBpbiBkZWZpbml0aW9uIG9mICInICsgdGFnICsgJyIgWUFNTCB0eXBlLicpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMudGFnID0gdGFnOwogICAgICB0aGlzLmtpbmQgPSBvcHRpb25zWyJraW5kIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXNvbHZlID0gb3B0aW9uc1sicmVzb2x2ZSJdIHx8IGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9OwogICAgICB0aGlzLmNvbnN0cnVjdCA9IG9wdGlvbnNbImNvbnN0cnVjdCJdIHx8IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YTsKICAgICAgfTsKICAgICAgdGhpcy5pbnN0YW5jZU9mID0gb3B0aW9uc1siaW5zdGFuY2VPZiJdIHx8IG51bGw7CiAgICAgIHRoaXMucHJlZGljYXRlID0gb3B0aW9uc1sicHJlZGljYXRlIl0gfHwgbnVsbDsKICAgICAgdGhpcy5yZXByZXNlbnQgPSBvcHRpb25zWyJyZXByZXNlbnQiXSB8fCBudWxsOwogICAgICB0aGlzLmRlZmF1bHRTdHlsZSA9IG9wdGlvbnNbImRlZmF1bHRTdHlsZSJdIHx8IG51bGw7CiAgICAgIHRoaXMuc3R5bGVBbGlhc2VzID0gY29tcGlsZVN0eWxlQWxpYXNlcyhvcHRpb25zWyJzdHlsZUFsaWFzZXMiXSB8fCBudWxsKTsKICAgICAgaWYgKFlBTUxfTk9ERV9LSU5EUy5pbmRleE9mKHRoaXMua2luZCkgPT09IC0xKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oJ1Vua25vd24ga2luZCAiJyArIHRoaXMua2luZCArICciIGlzIHNwZWNpZmllZCBmb3IgIicgKyB0YWcgKyAnIiBZQU1MIHR5cGUuJyk7CiAgICAgIH0KICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gVHlwZTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMKdmFyIHJlcXVpcmVfc2NoZW1hID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIGZ1bmN0aW9uIGNvbXBpbGVMaXN0KHNjaGVtYSwgbmFtZSwgcmVzdWx0KSB7CiAgICAgIHZhciBleGNsdWRlID0gW107CiAgICAgIHNjaGVtYS5pbmNsdWRlLmZvckVhY2goZnVuY3Rpb24oaW5jbHVkZWRTY2hlbWEpIHsKICAgICAgICByZXN1bHQgPSBjb21waWxlTGlzdChpbmNsdWRlZFNjaGVtYSwgbmFtZSwgcmVzdWx0KTsKICAgICAgfSk7CiAgICAgIHNjaGVtYVtuYW1lXS5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRUeXBlKSB7CiAgICAgICAgcmVzdWx0LmZvckVhY2goZnVuY3Rpb24ocHJldmlvdXNUeXBlLCBwcmV2aW91c0luZGV4KSB7CiAgICAgICAgICBpZiAocHJldmlvdXNUeXBlLnRhZyA9PT0gY3VycmVudFR5cGUudGFnICYmIHByZXZpb3VzVHlwZS5raW5kID09PSBjdXJyZW50VHlwZS5raW5kKSB7CiAgICAgICAgICAgIGV4Y2x1ZGUucHVzaChwcmV2aW91c0luZGV4KTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXN1bHQucHVzaChjdXJyZW50VHlwZSk7CiAgICAgIH0pOwogICAgICByZXR1cm4gcmVzdWx0LmZpbHRlcihmdW5jdGlvbih0eXBlNSwgaW5kZXgyKSB7CiAgICAgICAgcmV0dXJuIGV4Y2x1ZGUuaW5kZXhPZihpbmRleDIpID09PSAtMTsKICAgICAgfSk7CiAgICB9CiAgICBmdW5jdGlvbiBjb21waWxlTWFwKCkgewogICAgICB2YXIgcmVzdWx0ID0gewogICAgICAgIHNjYWxhcjoge30sCiAgICAgICAgc2VxdWVuY2U6IHt9LAogICAgICAgIG1hcHBpbmc6IHt9LAogICAgICAgIGZhbGxiYWNrOiB7fQogICAgICB9LCBpbmRleDIsIGxlbmd0aDsKICAgICAgZnVuY3Rpb24gY29sbGVjdFR5cGUodHlwZTUpIHsKICAgICAgICByZXN1bHRbdHlwZTUua2luZF1bdHlwZTUudGFnXSA9IHJlc3VsdFsiZmFsbGJhY2siXVt0eXBlNS50YWddID0gdHlwZTU7CiAgICAgIH0KICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgYXJndW1lbnRzW2luZGV4Ml0uZm9yRWFjaChjb2xsZWN0VHlwZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIFNjaGVtYTIoZGVmaW5pdGlvbjMpIHsKICAgICAgdGhpcy5pbmNsdWRlID0gZGVmaW5pdGlvbjMuaW5jbHVkZSB8fCBbXTsKICAgICAgdGhpcy5pbXBsaWNpdCA9IGRlZmluaXRpb24zLmltcGxpY2l0IHx8IFtdOwogICAgICB0aGlzLmV4cGxpY2l0ID0gZGVmaW5pdGlvbjMuZXhwbGljaXQgfHwgW107CiAgICAgIHRoaXMuaW1wbGljaXQuZm9yRWFjaChmdW5jdGlvbih0eXBlNSkgewogICAgICAgIGlmICh0eXBlNS5sb2FkS2luZCAmJiB0eXBlNS5sb2FkS2luZCAhPT0gInNjYWxhciIpIHsKICAgICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJUaGVyZSBpcyBhIG5vbi1zY2FsYXIgdHlwZSBpbiB0aGUgaW1wbGljaXQgbGlzdCBvZiBhIHNjaGVtYS4gSW1wbGljaXQgcmVzb2x2aW5nIG9mIHN1Y2ggdHlwZXMgaXMgbm90IHN1cHBvcnRlZC4iKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmNvbXBpbGVkSW1wbGljaXQgPSBjb21waWxlTGlzdCh0aGlzLCAiaW1wbGljaXQiLCBbXSk7CiAgICAgIHRoaXMuY29tcGlsZWRFeHBsaWNpdCA9IGNvbXBpbGVMaXN0KHRoaXMsICJleHBsaWNpdCIsIFtdKTsKICAgICAgdGhpcy5jb21waWxlZFR5cGVNYXAgPSBjb21waWxlTWFwKHRoaXMuY29tcGlsZWRJbXBsaWNpdCwgdGhpcy5jb21waWxlZEV4cGxpY2l0KTsKICAgIH0KICAgIFNjaGVtYTIuREVGQVVMVCA9IG51bGw7CiAgICBTY2hlbWEyLmNyZWF0ZSA9IGZ1bmN0aW9uIGNyZWF0ZVNjaGVtYSgpIHsKICAgICAgdmFyIHNjaGVtYXMsIHR5cGVzOwogICAgICBzd2l0Y2ggKGFyZ3VtZW50cy5sZW5ndGgpIHsKICAgICAgICBjYXNlIDE6CiAgICAgICAgICBzY2hlbWFzID0gU2NoZW1hMi5ERUZBVUxUOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMF07CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICBzY2hlbWFzID0gYXJndW1lbnRzWzBdOwogICAgICAgICAgdHlwZXMgPSBhcmd1bWVudHNbMV07CiAgICAgICAgICBicmVhazsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIldyb25nIG51bWJlciBvZiBhcmd1bWVudHMgZm9yIFNjaGVtYS5jcmVhdGUgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBzY2hlbWFzID0gY29tbW9uLnRvQXJyYXkoc2NoZW1hcyk7CiAgICAgIHR5cGVzID0gY29tbW9uLnRvQXJyYXkodHlwZXMpOwogICAgICBpZiAoIXNjaGVtYXMuZXZlcnkoZnVuY3Rpb24oc2NoZW1hKSB7CiAgICAgICAgcmV0dXJuIHNjaGVtYSBpbnN0YW5jZW9mIFNjaGVtYTI7CiAgICAgIH0pKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIlNwZWNpZmllZCBsaXN0IG9mIHN1cGVyIHNjaGVtYXMgKG9yIGEgc2luZ2xlIFNjaGVtYSBvYmplY3QpIGNvbnRhaW5zIGEgbm9uLVNjaGVtYSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgaWYgKCF0eXBlcy5ldmVyeShmdW5jdGlvbih0eXBlNSkgewogICAgICAgIHJldHVybiB0eXBlNSBpbnN0YW5jZW9mIFR5cGUyOwogICAgICB9KSkgewogICAgICAgIHRocm93IG5ldyBZQU1MRXhjZXB0aW9uKCJTcGVjaWZpZWQgbGlzdCBvZiBZQU1MIHR5cGVzIChvciBhIHNpbmdsZSBUeXBlIG9iamVjdCkgY29udGFpbnMgYSBub24tVHlwZSBvYmplY3QuIik7CiAgICAgIH0KICAgICAgcmV0dXJuIG5ldyBTY2hlbWEyKHsKICAgICAgICBpbmNsdWRlOiBzY2hlbWFzLAogICAgICAgIGV4cGxpY2l0OiB0eXBlcwogICAgICB9KTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IFNjaGVtYTI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3N0ci5qcwp2YXIgcmVxdWlyZV9zdHIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc3RyLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnN0ciIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIGNvbnN0cnVjdDogZnVuY3Rpb24oZGF0YSkgewogICAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6ICIiOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2VxLmpzCnZhciByZXF1aXJlX3NlcSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXEuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6c2VxIiwgewogICAgICBraW5kOiAic2VxdWVuY2UiLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21hcC5qcwp2YXIgcmVxdWlyZV9tYXAgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbWFwLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOm1hcCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICBjb25zdHJ1Y3Q6IGZ1bmN0aW9uKGRhdGEpIHsKICAgICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiB7fTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZmFpbHNhZmUuanMKdmFyIHJlcXVpcmVfZmFpbHNhZmUgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9mYWlsc2FmZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgZXhwbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3N0cigpLAogICAgICAgIHJlcXVpcmVfc2VxKCksCiAgICAgICAgcmVxdWlyZV9tYXAoKQogICAgICBdCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvbnVsbC5qcwp2YXIgcmVxdWlyZV9udWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL251bGwuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE51bGwoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBtYXgzID0gZGF0YS5sZW5ndGg7CiAgICAgIHJldHVybiBtYXgzID09PSAxICYmIGRhdGEgPT09ICJ+IiB8fCBtYXgzID09PSA0ICYmIChkYXRhID09PSAibnVsbCIgfHwgZGF0YSA9PT0gIk51bGwiIHx8IGRhdGEgPT09ICJOVUxMIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sTnVsbCgpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBmdW5jdGlvbiBpc051bGwob2JqZWN0KSB7CiAgICAgIHJldHVybiBvYmplY3QgPT09IG51bGw7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6bnVsbCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sTnVsbCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sTnVsbCwKICAgICAgcHJlZGljYXRlOiBpc051bGwsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGNhbm9uaWNhbDogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIn4iOwogICAgICAgIH0sCiAgICAgICAgbG93ZXJjYXNlOiBmdW5jdGlvbigpIHsKICAgICAgICAgIHJldHVybiAibnVsbCI7CiAgICAgICAgfSwKICAgICAgICB1cHBlcmNhc2U6IGZ1bmN0aW9uKCkgewogICAgICAgICAgcmV0dXJuICJOVUxMIjsKICAgICAgICB9LAogICAgICAgIGNhbWVsY2FzZTogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gIk51bGwiOwogICAgICAgIH0KICAgICAgfSwKICAgICAgZGVmYXVsdFN0eWxlOiAibG93ZXJjYXNlIgogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2Jvb2wuanMKdmFyIHJlcXVpcmVfYm9vbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9ib29sLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCb29sZWFuKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdmFyIG1heDMgPSBkYXRhLmxlbmd0aDsKICAgICAgcmV0dXJuIG1heDMgPT09IDQgJiYgKGRhdGEgPT09ICJ0cnVlIiB8fCBkYXRhID09PSAiVHJ1ZSIgfHwgZGF0YSA9PT0gIlRSVUUiKSB8fCBtYXgzID09PSA1ICYmIChkYXRhID09PSAiZmFsc2UiIHx8IGRhdGEgPT09ICJGYWxzZSIgfHwgZGF0YSA9PT0gIkZBTFNFIik7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQm9vbGVhbihkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAidHJ1ZSIgfHwgZGF0YSA9PT0gIlRydWUiIHx8IGRhdGEgPT09ICJUUlVFIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzQm9vbGVhbihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBCb29sZWFuXSI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6Ym9vbCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sQm9vbGVhbiwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQm9vbGVhbiwKICAgICAgcHJlZGljYXRlOiBpc0Jvb2xlYW4sCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGxvd2VyY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gInRydWUiIDogImZhbHNlIjsKICAgICAgICB9LAogICAgICAgIHVwcGVyY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gIlRSVUUiIDogIkZBTFNFIjsKICAgICAgICB9LAogICAgICAgIGNhbWVsY2FzZTogZnVuY3Rpb24ob2JqZWN0KSB7CiAgICAgICAgICByZXR1cm4gb2JqZWN0ID8gIlRydWUiIDogIkZhbHNlIjsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIGRlZmF1bHRTdHlsZTogImxvd2VyY2FzZSIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9pbnQuanMKdmFyIHJlcXVpcmVfaW50ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2ludC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gaXNIZXhDb2RlKGMxMSkgewogICAgICByZXR1cm4gNDggPD0gYzExICYmIGMxMSA8PSA1NyB8fCA2NSA8PSBjMTEgJiYgYzExIDw9IDcwIHx8IDk3IDw9IGMxMSAmJiBjMTEgPD0gMTAyOwogICAgfQogICAgZnVuY3Rpb24gaXNPY3RDb2RlKGMxMSkgewogICAgICByZXR1cm4gNDggPD0gYzExICYmIGMxMSA8PSA1NTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzRGVjQ29kZShjMTEpIHsKICAgICAgcmV0dXJuIDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTc7CiAgICB9CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbEludGVnZXIoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgbWF4MyA9IGRhdGEubGVuZ3RoLCBpbmRleDIgPSAwLCBoYXNEaWdpdHMgPSBmYWxzZSwgY2g7CiAgICAgIGlmICghbWF4MykgcmV0dXJuIGZhbHNlOwogICAgICBjaCA9IGRhdGFbaW5kZXgyXTsKICAgICAgaWYgKGNoID09PSAiLSIgfHwgY2ggPT09ICIrIikgewogICAgICAgIGNoID0gZGF0YVsrK2luZGV4Ml07CiAgICAgIH0KICAgICAgaWYgKGNoID09PSAiMCIpIHsKICAgICAgICBpZiAoaW5kZXgyICsgMSA9PT0gbWF4MykgcmV0dXJuIHRydWU7CiAgICAgICAgY2ggPSBkYXRhWysraW5kZXgyXTsKICAgICAgICBpZiAoY2ggPT09ICJiIikgewogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICAgIGlmIChjaCA9PT0gIl8iKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKGNoICE9PSAiMCIgJiYgY2ggIT09ICIxIikgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGhhc0RpZ2l0cyAmJiBjaCAhPT0gIl8iOwogICAgICAgIH0KICAgICAgICBpZiAoY2ggPT09ICJ4IikgewogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICAgIGlmIChjaCA9PT0gIl8iKSBjb250aW51ZTsKICAgICAgICAgICAgaWYgKCFpc0hleENvZGUoZGF0YS5jaGFyQ29kZUF0KGluZGV4MikpKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gaGFzRGlnaXRzICYmIGNoICE9PSAiXyI7CiAgICAgICAgfQogICAgICAgIGZvciAoOyBpbmRleDIgPCBtYXgzOyBpbmRleDIrKykgewogICAgICAgICAgY2ggPSBkYXRhW2luZGV4Ml07CiAgICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgICBpZiAoIWlzT2N0Q29kZShkYXRhLmNoYXJDb2RlQXQoaW5kZXgyKSkpIHJldHVybiBmYWxzZTsKICAgICAgICAgIGhhc0RpZ2l0cyA9IHRydWU7CiAgICAgICAgfQogICAgICAgIHJldHVybiBoYXNEaWdpdHMgJiYgY2ggIT09ICJfIjsKICAgICAgfQogICAgICBpZiAoY2ggPT09ICJfIikgcmV0dXJuIGZhbHNlOwogICAgICBmb3IgKDsgaW5kZXgyIDwgbWF4MzsgaW5kZXgyKyspIHsKICAgICAgICBjaCA9IGRhdGFbaW5kZXgyXTsKICAgICAgICBpZiAoY2ggPT09ICJfIikgY29udGludWU7CiAgICAgICAgaWYgKGNoID09PSAiOiIpIGJyZWFrOwogICAgICAgIGlmICghaXNEZWNDb2RlKGRhdGEuY2hhckNvZGVBdChpbmRleDIpKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBoYXNEaWdpdHMgPSB0cnVlOwogICAgICB9CiAgICAgIGlmICghaGFzRGlnaXRzIHx8IGNoID09PSAiXyIpIHJldHVybiBmYWxzZTsKICAgICAgaWYgKGNoICE9PSAiOiIpIHJldHVybiB0cnVlOwogICAgICByZXR1cm4gL14oOlswLTVdP1swLTldKSskLy50ZXN0KGRhdGEuc2xpY2UoaW5kZXgyKSk7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sSW50ZWdlcihkYXRhKSB7CiAgICAgIHZhciB2YWx1ZTIgPSBkYXRhLCBzaWduID0gMSwgY2gsIGJhc2UsIGRpZ2l0cyA9IFtdOwogICAgICBpZiAodmFsdWUyLmluZGV4T2YoIl8iKSAhPT0gLTEpIHsKICAgICAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXy9nLCAiIik7CiAgICAgIH0KICAgICAgY2ggPSB2YWx1ZTJbMF07CiAgICAgIGlmIChjaCA9PT0gIi0iIHx8IGNoID09PSAiKyIpIHsKICAgICAgICBpZiAoY2ggPT09ICItIikgc2lnbiA9IC0xOwogICAgICAgIHZhbHVlMiA9IHZhbHVlMi5zbGljZSgxKTsKICAgICAgICBjaCA9IHZhbHVlMlswXTsKICAgICAgfQogICAgICBpZiAodmFsdWUyID09PSAiMCIpIHJldHVybiAwOwogICAgICBpZiAoY2ggPT09ICIwIikgewogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJiIikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIuc2xpY2UoMiksIDIpOwogICAgICAgIGlmICh2YWx1ZTJbMV0gPT09ICJ4IikgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDE2KTsKICAgICAgICByZXR1cm4gc2lnbiAqIHBhcnNlSW50KHZhbHVlMiwgOCk7CiAgICAgIH0KICAgICAgaWYgKHZhbHVlMi5pbmRleE9mKCI6IikgIT09IC0xKSB7CiAgICAgICAgdmFsdWUyLnNwbGl0KCI6IikuZm9yRWFjaChmdW5jdGlvbih2NSkgewogICAgICAgICAgZGlnaXRzLnVuc2hpZnQocGFyc2VJbnQodjUsIDEwKSk7CiAgICAgICAgfSk7CiAgICAgICAgdmFsdWUyID0gMDsKICAgICAgICBiYXNlID0gMTsKICAgICAgICBkaWdpdHMuZm9yRWFjaChmdW5jdGlvbihkNikgewogICAgICAgICAgdmFsdWUyICs9IGQ2ICogYmFzZTsKICAgICAgICAgIGJhc2UgKj0gNjA7CiAgICAgICAgfSk7CiAgICAgICAgcmV0dXJuIHNpZ24gKiB2YWx1ZTI7CiAgICAgIH0KICAgICAgcmV0dXJuIHNpZ24gKiBwYXJzZUludCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzSW50ZWdlcihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBOdW1iZXJdIiAmJiAob2JqZWN0ICUgMSA9PT0gMCAmJiAhY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOmludCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sSW50ZWdlciwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sSW50ZWdlciwKICAgICAgcHJlZGljYXRlOiBpc0ludGVnZXIsCiAgICAgIHJlcHJlc2VudDogewogICAgICAgIGJpbmFyeTogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMGIiICsgb2JqLnRvU3RyaW5nKDIpIDogIi0wYiIgKyBvYmoudG9TdHJpbmcoMikuc2xpY2UoMSk7CiAgICAgICAgfSwKICAgICAgICBvY3RhbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMCIgKyBvYmoudG9TdHJpbmcoOCkgOiAiLTAiICsgb2JqLnRvU3RyaW5nKDgpLnNsaWNlKDEpOwogICAgICAgIH0sCiAgICAgICAgZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqLnRvU3RyaW5nKDEwKTsKICAgICAgICB9LAogICAgICAgIC8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi8KICAgICAgICBoZXhhZGVjaW1hbDogZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgICByZXR1cm4gb2JqID49IDAgPyAiMHgiICsgb2JqLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpIDogIi0weCIgKyBvYmoudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9LAogICAgICBkZWZhdWx0U3R5bGU6ICJkZWNpbWFsIiwKICAgICAgc3R5bGVBbGlhc2VzOiB7CiAgICAgICAgYmluYXJ5OiBbMiwgImJpbiJdLAogICAgICAgIG9jdGFsOiBbOCwgIm9jdCJdLAogICAgICAgIGRlY2ltYWw6IFsxMCwgImRlYyJdLAogICAgICAgIGhleGFkZWNpbWFsOiBbMTYsICJoZXgiXQogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMKdmFyIHJlcXVpcmVfZmxvYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvZmxvYXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0ZMT0FUX1BBVFRFUk4gPSBuZXcgUmVnRXhwKAogICAgICAvLyAyLjVlNCwgMi41IGFuZCBpbnRlZ2VycwogICAgICAiXig/OlstK10/KD86MHxbMS05XVswLTlfXSopKD86XFwuWzAtOV9dKik/KD86W2VFXVstK10/WzAtOV0rKT98XFwuWzAtOV9dKyg/OltlRV1bLStdP1swLTldKyk/fFstK10/WzAtOV1bMC05X10qKD86OlswLTVdP1swLTldKStcXC5bMC05X10qfFstK10/XFwuKD86aW5mfEluZnxJTkYpfFxcLig/Om5hbnxOYU58TkFOKSkkIgogICAgKTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sRmxvYXQoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoIVlBTUxfRkxPQVRfUEFUVEVSTi50ZXN0KGRhdGEpIHx8IC8vIFF1aWNrIGhhY2sgdG8gbm90IGFsbG93IGludGVnZXJzIGVuZCB3aXRoIGBfYAogICAgICAvLyBQcm9iYWJseSBzaG91bGQgdXBkYXRlIHJlZ2V4cCAmIGNoZWNrIHNwZWVkCiAgICAgIGRhdGFbZGF0YS5sZW5ndGggLSAxXSA9PT0gIl8iKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbEZsb2F0KGRhdGEpIHsKICAgICAgdmFyIHZhbHVlMiwgc2lnbiwgYmFzZSwgZGlnaXRzOwogICAgICB2YWx1ZTIgPSBkYXRhLnJlcGxhY2UoL18vZywgIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgIHNpZ24gPSB2YWx1ZTJbMF0gPT09ICItIiA/IC0xIDogMTsKICAgICAgZGlnaXRzID0gW107CiAgICAgIGlmICgiKy0iLmluZGV4T2YodmFsdWUyWzBdKSA+PSAwKSB7CiAgICAgICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDEpOwogICAgICB9CiAgICAgIGlmICh2YWx1ZTIgPT09ICIuaW5mIikgewogICAgICAgIHJldHVybiBzaWduID09PSAxID8gTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZIDogTnVtYmVyLk5FR0FUSVZFX0lORklOSVRZOwogICAgICB9IGVsc2UgaWYgKHZhbHVlMiA9PT0gIi5uYW4iKSB7CiAgICAgICAgcmV0dXJuIE5hTjsKICAgICAgfSBlbHNlIGlmICh2YWx1ZTIuaW5kZXhPZigiOiIpID49IDApIHsKICAgICAgICB2YWx1ZTIuc3BsaXQoIjoiKS5mb3JFYWNoKGZ1bmN0aW9uKHY1KSB7CiAgICAgICAgICBkaWdpdHMudW5zaGlmdChwYXJzZUZsb2F0KHY1LCAxMCkpOwogICAgICAgIH0pOwogICAgICAgIHZhbHVlMiA9IDA7CiAgICAgICAgYmFzZSA9IDE7CiAgICAgICAgZGlnaXRzLmZvckVhY2goZnVuY3Rpb24oZDYpIHsKICAgICAgICAgIHZhbHVlMiArPSBkNiAqIGJhc2U7CiAgICAgICAgICBiYXNlICo9IDYwOwogICAgICAgIH0pOwogICAgICAgIHJldHVybiBzaWduICogdmFsdWUyOwogICAgICB9CiAgICAgIHJldHVybiBzaWduICogcGFyc2VGbG9hdCh2YWx1ZTIsIDEwKTsKICAgIH0KICAgIHZhciBTQ0lFTlRJRklDX1dJVEhPVVRfRE9UID0gL15bLStdP1swLTldK2UvOwogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbEZsb2F0KG9iamVjdCwgc3R5bGUpIHsKICAgICAgdmFyIHJlczsKICAgICAgaWYgKGlzTmFOKG9iamVjdCkpIHsKICAgICAgICBzd2l0Y2ggKHN0eWxlKSB7CiAgICAgICAgICBjYXNlICJsb3dlcmNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5uYW4iOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuTkFOIjsKICAgICAgICAgIGNhc2UgImNhbWVsY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLk5hTiI7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA9PT0gb2JqZWN0KSB7CiAgICAgICAgc3dpdGNoIChzdHlsZSkgewogICAgICAgICAgY2FzZSAibG93ZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICIuaW5mIjsKICAgICAgICAgIGNhc2UgInVwcGVyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi5JbmYiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChOdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkgPT09IG9iamVjdCkgewogICAgICAgIHN3aXRjaCAoc3R5bGUpIHsKICAgICAgICAgIGNhc2UgImxvd2VyY2FzZSI6CiAgICAgICAgICAgIHJldHVybiAiLS5pbmYiOwogICAgICAgICAgY2FzZSAidXBwZXJjYXNlIjoKICAgICAgICAgICAgcmV0dXJuICItLklORiI7CiAgICAgICAgICBjYXNlICJjYW1lbGNhc2UiOgogICAgICAgICAgICByZXR1cm4gIi0uSW5mIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoY29tbW9uLmlzTmVnYXRpdmVaZXJvKG9iamVjdCkpIHsKICAgICAgICByZXR1cm4gIi0wLjAiOwogICAgICB9CiAgICAgIHJlcyA9IG9iamVjdC50b1N0cmluZygxMCk7CiAgICAgIHJldHVybiBTQ0lFTlRJRklDX1dJVEhPVVRfRE9ULnRlc3QocmVzKSA/IHJlcy5yZXBsYWNlKCJlIiwgIi5lIikgOiByZXM7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Zsb2F0KG9iamVjdCkgewogICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG9iamVjdCkgPT09ICJbb2JqZWN0IE51bWJlcl0iICYmIChvYmplY3QgJSAxICE9PSAwIHx8IGNvbW1vbi5pc05lZ2F0aXZlWmVybyhvYmplY3QpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpmbG9hdCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sRmxvYXQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbEZsb2F0LAogICAgICBwcmVkaWNhdGU6IGlzRmxvYXQsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbEZsb2F0LAogICAgICBkZWZhdWx0U3R5bGU6ICJsb3dlcmNhc2UiCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzCnZhciByZXF1aXJlX2pzb24gPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9qc29uLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9mYWlsc2FmZSgpCiAgICAgIF0sCiAgICAgIGltcGxpY2l0OiBbCiAgICAgICAgcmVxdWlyZV9udWxsKCksCiAgICAgICAgcmVxdWlyZV9ib29sKCksCiAgICAgICAgcmVxdWlyZV9pbnQoKSwKICAgICAgICByZXF1aXJlX2Zsb2F0KCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcwp2YXIgcmVxdWlyZV9jb3JlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvY29yZS5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgU2NoZW1hMiA9IHJlcXVpcmVfc2NoZW1hKCk7CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBTY2hlbWEyKHsKICAgICAgaW5jbHVkZTogWwogICAgICAgIHJlcXVpcmVfanNvbigpCiAgICAgIF0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS90aW1lc3RhbXAuanMKdmFyIHJlcXVpcmVfdGltZXN0YW1wID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL3RpbWVzdGFtcC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBZQU1MX0RBVEVfUkVHRVhQID0gbmV3IFJlZ0V4cCgKICAgICAgIl4oWzAtOV1bMC05XVswLTldWzAtOV0pLShbMC05XVswLTldKS0oWzAtOV1bMC05XSkkIgogICAgKTsKICAgIHZhciBZQU1MX1RJTUVTVEFNUF9SRUdFWFAgPSBuZXcgUmVnRXhwKAogICAgICAiXihbMC05XVswLTldWzAtOV1bMC05XSktKFswLTldWzAtOV0/KS0oWzAtOV1bMC05XT8pKD86W1R0XXxbIFxcdF0rKShbMC05XVswLTldPyk6KFswLTldWzAtOV0pOihbMC05XVswLTldKSg/OlxcLihbMC05XSopKT8oPzpbIFxcdF0qKFp8KFstK10pKFswLTldWzAtOV0/KSg/OjooWzAtOV1bMC05XSkpPykpPyQiCiAgICApOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxUaW1lc3RhbXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoWUFNTF9EQVRFX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgaWYgKFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpICE9PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFRpbWVzdGFtcChkYXRhKSB7CiAgICAgIHZhciBtYXRjaDIsIHllYXIsIG1vbnRoLCBkYXksIGhvdXIsIG1pbnV0ZSwgc2Vjb25kLCBmcmFjdGlvbiA9IDAsIGRlbHRhID0gbnVsbCwgdHpfaG91ciwgdHpfbWludXRlLCBkYXRlOwogICAgICBtYXRjaDIgPSBZQU1MX0RBVEVfUkVHRVhQLmV4ZWMoZGF0YSk7CiAgICAgIGlmIChtYXRjaDIgPT09IG51bGwpIG1hdGNoMiA9IFlBTUxfVElNRVNUQU1QX1JFR0VYUC5leGVjKGRhdGEpOwogICAgICBpZiAobWF0Y2gyID09PSBudWxsKSB0aHJvdyBuZXcgRXJyb3IoIkRhdGUgcmVzb2x2ZSBlcnJvciIpOwogICAgICB5ZWFyID0gK21hdGNoMlsxXTsKICAgICAgbW9udGggPSArbWF0Y2gyWzJdIC0gMTsKICAgICAgZGF5ID0gK21hdGNoMlszXTsKICAgICAgaWYgKCFtYXRjaDJbNF0pIHsKICAgICAgICByZXR1cm4gbmV3IERhdGUoRGF0ZS5VVEMoeWVhciwgbW9udGgsIGRheSkpOwogICAgICB9CiAgICAgIGhvdXIgPSArbWF0Y2gyWzRdOwogICAgICBtaW51dGUgPSArbWF0Y2gyWzVdOwogICAgICBzZWNvbmQgPSArbWF0Y2gyWzZdOwogICAgICBpZiAobWF0Y2gyWzddKSB7CiAgICAgICAgZnJhY3Rpb24gPSBtYXRjaDJbN10uc2xpY2UoMCwgMyk7CiAgICAgICAgd2hpbGUgKGZyYWN0aW9uLmxlbmd0aCA8IDMpIHsKICAgICAgICAgIGZyYWN0aW9uICs9ICIwIjsKICAgICAgICB9CiAgICAgICAgZnJhY3Rpb24gPSArZnJhY3Rpb247CiAgICAgIH0KICAgICAgaWYgKG1hdGNoMls5XSkgewogICAgICAgIHR6X2hvdXIgPSArbWF0Y2gyWzEwXTsKICAgICAgICB0el9taW51dGUgPSArKG1hdGNoMlsxMV0gfHwgMCk7CiAgICAgICAgZGVsdGEgPSAodHpfaG91ciAqIDYwICsgdHpfbWludXRlKSAqIDZlNDsKICAgICAgICBpZiAobWF0Y2gyWzldID09PSAiLSIpIGRlbHRhID0gLWRlbHRhOwogICAgICB9CiAgICAgIGRhdGUgPSBuZXcgRGF0ZShEYXRlLlVUQyh5ZWFyLCBtb250aCwgZGF5LCBob3VyLCBtaW51dGUsIHNlY29uZCwgZnJhY3Rpb24pKTsKICAgICAgaWYgKGRlbHRhKSBkYXRlLnNldFRpbWUoZGF0ZS5nZXRUaW1lKCkgLSBkZWx0YSk7CiAgICAgIHJldHVybiBkYXRlOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50WWFtbFRpbWVzdGFtcChvYmplY3QpIHsKICAgICAgcmV0dXJuIG9iamVjdC50b0lTT1N0cmluZygpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnRpbWVzdGFtcCIsIHsKICAgICAga2luZDogInNjYWxhciIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sVGltZXN0YW1wLAogICAgICBjb25zdHJ1Y3Q6IGNvbnN0cnVjdFlhbWxUaW1lc3RhbXAsCiAgICAgIGluc3RhbmNlT2Y6IERhdGUsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50WWFtbFRpbWVzdGFtcAogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzCnZhciByZXF1aXJlX21lcmdlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL21lcmdlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxNZXJnZShkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhID09PSAiPDwiIHx8IGRhdGEgPT09IG51bGw7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6bWVyZ2UiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE1lcmdlCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvYmluYXJ5LmpzCnZhciByZXF1aXJlX2JpbmFyeSA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9iaW5hcnkuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIE5vZGVCdWZmZXI7CiAgICB0cnkgewogICAgICBfcmVxdWlyZSA9IF9fcmVxdWlyZTsKICAgICAgTm9kZUJ1ZmZlciA9IF9yZXF1aXJlKCJidWZmZXIiKS5CdWZmZXI7CiAgICB9IGNhdGNoIChfXykgewogICAgfQogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgQkFTRTY0X01BUCA9ICJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPVxuXHIiOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxCaW5hcnkoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgY29kZTQsIGlkeCwgYml0bGVuID0gMCwgbWF4MyA9IGRhdGEubGVuZ3RoLCBtYXA3ID0gQkFTRTY0X01BUDsKICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXgzOyBpZHgrKykgewogICAgICAgIGNvZGU0ID0gbWFwNy5pbmRleE9mKGRhdGEuY2hhckF0KGlkeCkpOwogICAgICAgIGlmIChjb2RlNCA+IDY0KSBjb250aW51ZTsKICAgICAgICBpZiAoY29kZTQgPCAwKSByZXR1cm4gZmFsc2U7CiAgICAgICAgYml0bGVuICs9IDY7CiAgICAgIH0KICAgICAgcmV0dXJuIGJpdGxlbiAlIDggPT09IDA7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RZYW1sQmluYXJ5KGRhdGEpIHsKICAgICAgdmFyIGlkeCwgdGFpbGJpdHMsIGlucHV0ID0gZGF0YS5yZXBsYWNlKC9bXHJcbj1dL2csICIiKSwgbWF4MyA9IGlucHV0Lmxlbmd0aCwgbWFwNyA9IEJBU0U2NF9NQVAsIGJpdHMgPSAwLCByZXN1bHQgPSBbXTsKICAgICAgZm9yIChpZHggPSAwOyBpZHggPCBtYXgzOyBpZHgrKykgewogICAgICAgIGlmIChpZHggJSA0ID09PSAwICYmIGlkeCkgewogICAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiAxNiAmIDI1NSk7CiAgICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpOwogICAgICAgICAgcmVzdWx0LnB1c2goYml0cyAmIDI1NSk7CiAgICAgICAgfQogICAgICAgIGJpdHMgPSBiaXRzIDw8IDYgfCBtYXA3LmluZGV4T2YoaW5wdXQuY2hhckF0KGlkeCkpOwogICAgICB9CiAgICAgIHRhaWxiaXRzID0gbWF4MyAlIDQgKiA2OwogICAgICBpZiAodGFpbGJpdHMgPT09IDApIHsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDE2ICYgMjU1KTsKICAgICAgICByZXN1bHQucHVzaChiaXRzID4+IDggJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgJiAyNTUpOwogICAgICB9IGVsc2UgaWYgKHRhaWxiaXRzID09PSAxOCkgewogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMTAgJiAyNTUpOwogICAgICAgIHJlc3VsdC5wdXNoKGJpdHMgPj4gMiAmIDI1NSk7CiAgICAgIH0gZWxzZSBpZiAodGFpbGJpdHMgPT09IDEyKSB7CiAgICAgICAgcmVzdWx0LnB1c2goYml0cyA+PiA0ICYgMjU1KTsKICAgICAgfQogICAgICBpZiAoTm9kZUJ1ZmZlcikgewogICAgICAgIHJldHVybiBOb2RlQnVmZmVyLmZyb20gPyBOb2RlQnVmZmVyLmZyb20ocmVzdWx0KSA6IG5ldyBOb2RlQnVmZmVyKHJlc3VsdCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudFlhbWxCaW5hcnkob2JqZWN0KSB7CiAgICAgIHZhciByZXN1bHQgPSAiIiwgYml0cyA9IDAsIGlkeCwgdGFpbCwgbWF4MyA9IG9iamVjdC5sZW5ndGgsIG1hcDcgPSBCQVNFNjRfTUFQOwogICAgICBmb3IgKGlkeCA9IDA7IGlkeCA8IG1heDM7IGlkeCsrKSB7CiAgICAgICAgaWYgKGlkeCAlIDMgPT09IDAgJiYgaWR4KSB7CiAgICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDE4ICYgNjNdOwogICAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiAxMiAmIDYzXTsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gNiAmIDYzXTsKICAgICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgJiA2M107CiAgICAgICAgfQogICAgICAgIGJpdHMgPSAoYml0cyA8PCA4KSArIG9iamVjdFtpZHhdOwogICAgICB9CiAgICAgIHRhaWwgPSBtYXgzICUgMzsKICAgICAgaWYgKHRhaWwgPT09IDApIHsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzID4+IDE4ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTIgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA2ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgJiA2M107CiAgICAgIH0gZWxzZSBpZiAodGFpbCA9PT0gMikgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMTAgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbYml0cyA+PiA0ICYgNjNdOwogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPDwgMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1s2NF07CiAgICAgIH0gZWxzZSBpZiAodGFpbCA9PT0gMSkgewogICAgICAgIHJlc3VsdCArPSBtYXA3W2JpdHMgPj4gMiAmIDYzXTsKICAgICAgICByZXN1bHQgKz0gbWFwN1tiaXRzIDw8IDQgJiA2M107CiAgICAgICAgcmVzdWx0ICs9IG1hcDdbNjRdOwogICAgICAgIHJlc3VsdCArPSBtYXA3WzY0XTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gaXNCaW5hcnkob2JqZWN0KSB7CiAgICAgIHJldHVybiBOb2RlQnVmZmVyICYmIE5vZGVCdWZmZXIuaXNCdWZmZXIob2JqZWN0KTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpiaW5hcnkiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbEJpbmFyeSwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sQmluYXJ5LAogICAgICBwcmVkaWNhdGU6IGlzQmluYXJ5LAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudFlhbWxCaW5hcnkKICAgIH0pOwogICAgdmFyIF9yZXF1aXJlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9vbWFwLmpzCnZhciByZXF1aXJlX29tYXAgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvb21hcC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfaGFzT3duUHJvcGVydHkgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5OwogICAgdmFyIF90b1N0cmluZyA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICBmdW5jdGlvbiByZXNvbHZlWWFtbE9tYXAoZGF0YSkgewogICAgICBpZiAoZGF0YSA9PT0gbnVsbCkgcmV0dXJuIHRydWU7CiAgICAgIHZhciBvYmplY3RLZXlzID0gW10sIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBwYWlyS2V5LCBwYWlySGFzS2V5LCBvYmplY3QgPSBkYXRhOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAgcGFpckhhc0tleSA9IGZhbHNlOwogICAgICAgIGlmIChfdG9TdHJpbmcuY2FsbChwYWlyKSAhPT0gIltvYmplY3QgT2JqZWN0XSIpIHJldHVybiBmYWxzZTsKICAgICAgICBmb3IgKHBhaXJLZXkgaW4gcGFpcikgewogICAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHBhaXIsIHBhaXJLZXkpKSB7CiAgICAgICAgICAgIGlmICghcGFpckhhc0tleSkgcGFpckhhc0tleSA9IHRydWU7CiAgICAgICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXBhaXJIYXNLZXkpIHJldHVybiBmYWxzZTsKICAgICAgICBpZiAob2JqZWN0S2V5cy5pbmRleE9mKHBhaXJLZXkpID09PSAtMSkgb2JqZWN0S2V5cy5wdXNoKHBhaXJLZXkpOwogICAgICAgIGVsc2UgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbE9tYXAoZGF0YSkgewogICAgICByZXR1cm4gZGF0YSAhPT0gbnVsbCA/IGRhdGEgOiBbXTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpvbWFwIiwgewogICAgICBraW5kOiAic2VxdWVuY2UiLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbE9tYXAsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbE9tYXAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcwp2YXIgcmVxdWlyZV9wYWlycyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9wYWlycy5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgVHlwZTIgPSByZXF1aXJlX3R5cGUoKTsKICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgZnVuY3Rpb24gcmVzb2x2ZVlhbWxQYWlycyhkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gdHJ1ZTsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCBwYWlyLCBrZXlzMiwgcmVzdWx0LCBvYmplY3QgPSBkYXRhOwogICAgICByZXN1bHQgPSBuZXcgQXJyYXkob2JqZWN0Lmxlbmd0aCk7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXIgPSBvYmplY3RbaW5kZXgyXTsKICAgICAgICBpZiAoX3RvU3RyaW5nLmNhbGwocGFpcikgIT09ICJbb2JqZWN0IE9iamVjdF0iKSByZXR1cm4gZmFsc2U7CiAgICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhwYWlyKTsKICAgICAgICBpZiAoa2V5czIubGVuZ3RoICE9PSAxKSByZXR1cm4gZmFsc2U7CiAgICAgICAgcmVzdWx0W2luZGV4Ml0gPSBba2V5czJbMF0sIHBhaXJba2V5czJbMF1dXTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbnN0cnVjdFlhbWxQYWlycyhkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gW107CiAgICAgIHZhciBpbmRleDIsIGxlbmd0aCwgcGFpciwga2V5czIsIHJlc3VsdCwgb2JqZWN0ID0gZGF0YTsKICAgICAgcmVzdWx0ID0gbmV3IEFycmF5KG9iamVjdC5sZW5ndGgpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBwYWlyID0gb2JqZWN0W2luZGV4Ml07CiAgICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhwYWlyKTsKICAgICAgICByZXN1bHRbaW5kZXgyXSA9IFtrZXlzMlswXSwgcGFpcltrZXlzMlswXV1dOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6cGFpcnMiLCB7CiAgICAgIGtpbmQ6ICJzZXF1ZW5jZSIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVZYW1sUGFpcnMsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0WWFtbFBhaXJzCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvc2V0LmpzCnZhciByZXF1aXJlX3NldCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9zZXQuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICB2YXIgX2hhc093blByb3BlcnR5ID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKICAgIGZ1bmN0aW9uIHJlc29sdmVZYW1sU2V0KGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiB0cnVlOwogICAgICB2YXIga2V5Miwgb2JqZWN0ID0gZGF0YTsKICAgICAgZm9yIChrZXkyIGluIG9iamVjdCkgewogICAgICAgIGlmIChfaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIGtleTIpKSB7CiAgICAgICAgICBpZiAob2JqZWN0W2tleTJdICE9PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0WWFtbFNldChkYXRhKSB7CiAgICAgIHJldHVybiBkYXRhICE9PSBudWxsID8gZGF0YSA6IHt9OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOnNldCIsIHsKICAgICAga2luZDogIm1hcHBpbmciLAogICAgICByZXNvbHZlOiByZXNvbHZlWWFtbFNldCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RZYW1sU2V0CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X3NhZmUuanMKdmFyIHJlcXVpcmVfZGVmYXVsdF9zYWZlID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9zYWZlLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9jb3JlKCkKICAgICAgXSwKICAgICAgaW1wbGljaXQ6IFsKICAgICAgICByZXF1aXJlX3RpbWVzdGFtcCgpLAogICAgICAgIHJlcXVpcmVfbWVyZ2UoKQogICAgICBdLAogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfYmluYXJ5KCksCiAgICAgICAgcmVxdWlyZV9vbWFwKCksCiAgICAgICAgcmVxdWlyZV9wYWlycygpLAogICAgICAgIHJlcXVpcmVfc2V0KCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC90eXBlL2pzL3VuZGVmaW5lZC5qcwp2YXIgcmVxdWlyZV91bmRlZmluZWQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvdW5kZWZpbmVkLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBUeXBlMiA9IHJlcXVpcmVfdHlwZSgpOwogICAgZnVuY3Rpb24gcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCgpIHsKICAgICAgcmV0dXJuIHZvaWQgMDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlcHJlc2VudEphdmFzY3JpcHRVbmRlZmluZWQoKSB7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIGlzVW5kZWZpbmVkKG9iamVjdCkgewogICAgICByZXR1cm4gdHlwZW9mIG9iamVjdCA9PT0gInVuZGVmaW5lZCI7CiAgICB9CiAgICBtb2R1bGUuZXhwb3J0cyA9IG5ldyBUeXBlMigidGFnOnlhbWwub3JnLDIwMDI6anMvdW5kZWZpbmVkIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRVbmRlZmluZWQsCiAgICAgIGNvbnN0cnVjdDogY29uc3RydWN0SmF2YXNjcmlwdFVuZGVmaW5lZCwKICAgICAgcHJlZGljYXRlOiBpc1VuZGVmaW5lZCwKICAgICAgcmVwcmVzZW50OiByZXByZXNlbnRKYXZhc2NyaXB0VW5kZWZpbmVkCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3R5cGUvanMvcmVnZXhwLmpzCnZhciByZXF1aXJlX3JlZ2V4cCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9yZWdleHAuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cChkYXRhKSB7CiAgICAgIGlmIChkYXRhID09PSBudWxsKSByZXR1cm4gZmFsc2U7CiAgICAgIGlmIChkYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlOwogICAgICB2YXIgcmVnZXhwID0gZGF0YSwgdGFpbCA9IC9cLyhbZ2ltXSopJC8uZXhlYyhkYXRhKSwgbW9kaWZpZXJzID0gIiI7CiAgICAgIGlmIChyZWdleHBbMF0gPT09ICIvIikgewogICAgICAgIGlmICh0YWlsKSBtb2RpZmllcnMgPSB0YWlsWzFdOwogICAgICAgIGlmIChtb2RpZmllcnMubGVuZ3RoID4gMykgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChyZWdleHBbcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxXSAhPT0gIi8iKSByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwKGRhdGEpIHsKICAgICAgdmFyIHJlZ2V4cCA9IGRhdGEsIHRhaWwgPSAvXC8oW2dpbV0qKSQvLmV4ZWMoZGF0YSksIG1vZGlmaWVycyA9ICIiOwogICAgICBpZiAocmVnZXhwWzBdID09PSAiLyIpIHsKICAgICAgICBpZiAodGFpbCkgbW9kaWZpZXJzID0gdGFpbFsxXTsKICAgICAgICByZWdleHAgPSByZWdleHAuc2xpY2UoMSwgcmVnZXhwLmxlbmd0aCAtIG1vZGlmaWVycy5sZW5ndGggLSAxKTsKICAgICAgfQogICAgICByZXR1cm4gbmV3IFJlZ0V4cChyZWdleHAsIG1vZGlmaWVycyk7CiAgICB9CiAgICBmdW5jdGlvbiByZXByZXNlbnRKYXZhc2NyaXB0UmVnRXhwKG9iamVjdCkgewogICAgICB2YXIgcmVzdWx0ID0gIi8iICsgb2JqZWN0LnNvdXJjZSArICIvIjsKICAgICAgaWYgKG9iamVjdC5nbG9iYWwpIHJlc3VsdCArPSAiZyI7CiAgICAgIGlmIChvYmplY3QubXVsdGlsaW5lKSByZXN1bHQgKz0gIm0iOwogICAgICBpZiAob2JqZWN0Lmlnbm9yZUNhc2UpIHJlc3VsdCArPSAiaSI7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc1JlZ0V4cChvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBSZWdFeHBdIjsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzID0gbmV3IFR5cGUyKCJ0YWc6eWFtbC5vcmcsMjAwMjpqcy9yZWdleHAiLCB7CiAgICAgIGtpbmQ6ICJzY2FsYXIiLAogICAgICByZXNvbHZlOiByZXNvbHZlSmF2YXNjcmlwdFJlZ0V4cCwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0UmVnRXhwLAogICAgICBwcmVkaWNhdGU6IGlzUmVnRXhwLAogICAgICByZXByZXNlbnQ6IHJlcHJlc2VudEphdmFzY3JpcHRSZWdFeHAKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcwp2YXIgcmVxdWlyZV9mdW5jdGlvbiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vanMteWFtbEAzLjE0LjIvbm9kZV9tb2R1bGVzL2pzLXlhbWwvbGliL2pzLXlhbWwvdHlwZS9qcy9mdW5jdGlvbi5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgZXNwcmltYTsKICAgIHRyeSB7CiAgICAgIF9yZXF1aXJlID0gX19yZXF1aXJlOwogICAgICBlc3ByaW1hID0gX3JlcXVpcmUoImVzcHJpbWEiKTsKICAgIH0gY2F0Y2ggKF80KSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgZXNwcmltYSA9IHdpbmRvdy5lc3ByaW1hOwogICAgfQogICAgdmFyIFR5cGUyID0gcmVxdWlyZV90eXBlKCk7CiAgICBmdW5jdGlvbiByZXNvbHZlSmF2YXNjcmlwdEZ1bmN0aW9uKGRhdGEpIHsKICAgICAgaWYgKGRhdGEgPT09IG51bGwpIHJldHVybiBmYWxzZTsKICAgICAgdHJ5IHsKICAgICAgICB2YXIgc291cmNlID0gIigiICsgZGF0YSArICIpIiwgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSk7CiAgICAgICAgaWYgKGFzdC50eXBlICE9PSAiUHJvZ3JhbSIgfHwgYXN0LmJvZHkubGVuZ3RoICE9PSAxIHx8IGFzdC5ib2R5WzBdLnR5cGUgIT09ICJFeHByZXNzaW9uU3RhdGVtZW50IiB8fCBhc3QuYm9keVswXS5leHByZXNzaW9uLnR5cGUgIT09ICJBcnJvd0Z1bmN0aW9uRXhwcmVzc2lvbiIgJiYgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiRnVuY3Rpb25FeHByZXNzaW9uIikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24oZGF0YSkgewogICAgICB2YXIgc291cmNlID0gIigiICsgZGF0YSArICIpIiwgYXN0ID0gZXNwcmltYS5wYXJzZShzb3VyY2UsIHsgcmFuZ2U6IHRydWUgfSksIHBhcmFtczIgPSBbXSwgYm9keTM7CiAgICAgIGlmIChhc3QudHlwZSAhPT0gIlByb2dyYW0iIHx8IGFzdC5ib2R5Lmxlbmd0aCAhPT0gMSB8fCBhc3QuYm9keVswXS50eXBlICE9PSAiRXhwcmVzc2lvblN0YXRlbWVudCIgfHwgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi50eXBlICE9PSAiQXJyb3dGdW5jdGlvbkV4cHJlc3Npb24iICYmIGFzdC5ib2R5WzBdLmV4cHJlc3Npb24udHlwZSAhPT0gIkZ1bmN0aW9uRXhwcmVzc2lvbiIpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkZhaWxlZCB0byByZXNvbHZlIGZ1bmN0aW9uIik7CiAgICAgIH0KICAgICAgYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5wYXJhbXMuZm9yRWFjaChmdW5jdGlvbihwYXJhbSkgewogICAgICAgIHBhcmFtczIucHVzaChwYXJhbS5uYW1lKTsKICAgICAgfSk7CiAgICAgIGJvZHkzID0gYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnJhbmdlOwogICAgICBpZiAoYXN0LmJvZHlbMF0uZXhwcmVzc2lvbi5ib2R5LnR5cGUgPT09ICJCbG9ja1N0YXRlbWVudCIpIHsKICAgICAgICByZXR1cm4gbmV3IEZ1bmN0aW9uKHBhcmFtczIsIHNvdXJjZS5zbGljZShib2R5M1swXSArIDEsIGJvZHkzWzFdIC0gMSkpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgRnVuY3Rpb24ocGFyYW1zMiwgInJldHVybiAiICsgc291cmNlLnNsaWNlKGJvZHkzWzBdLCBib2R5M1sxXSkpOwogICAgfQogICAgZnVuY3Rpb24gcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uKG9iamVjdCkgewogICAgICByZXR1cm4gb2JqZWN0LnRvU3RyaW5nKCk7CiAgICB9CiAgICBmdW5jdGlvbiBpc0Z1bmN0aW9uMihvYmplY3QpIHsKICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChvYmplY3QpID09PSAiW29iamVjdCBGdW5jdGlvbl0iOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMgPSBuZXcgVHlwZTIoInRhZzp5YW1sLm9yZywyMDAyOmpzL2Z1bmN0aW9uIiwgewogICAgICBraW5kOiAic2NhbGFyIiwKICAgICAgcmVzb2x2ZTogcmVzb2x2ZUphdmFzY3JpcHRGdW5jdGlvbiwKICAgICAgY29uc3RydWN0OiBjb25zdHJ1Y3RKYXZhc2NyaXB0RnVuY3Rpb24sCiAgICAgIHByZWRpY2F0ZTogaXNGdW5jdGlvbjIsCiAgICAgIHJlcHJlc2VudDogcmVwcmVzZW50SmF2YXNjcmlwdEZ1bmN0aW9uCiAgICB9KTsKICAgIHZhciBfcmVxdWlyZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL3NjaGVtYS9kZWZhdWx0X2Z1bGwuanMKdmFyIHJlcXVpcmVfZGVmYXVsdF9mdWxsID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9zY2hlbWEvZGVmYXVsdF9mdWxsLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBTY2hlbWEyID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzID0gU2NoZW1hMi5ERUZBVUxUID0gbmV3IFNjaGVtYTIoewogICAgICBpbmNsdWRlOiBbCiAgICAgICAgcmVxdWlyZV9kZWZhdWx0X3NhZmUoKQogICAgICBdLAogICAgICBleHBsaWNpdDogWwogICAgICAgIHJlcXVpcmVfdW5kZWZpbmVkKCksCiAgICAgICAgcmVxdWlyZV9yZWdleHAoKSwKICAgICAgICByZXF1aXJlX2Z1bmN0aW9uKCkKICAgICAgXQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMKdmFyIHJlcXVpcmVfbG9hZGVyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9saWIvanMteWFtbC9sb2FkZXIuanMiKGV4cG9ydHMsIG1vZHVsZSkgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIGNvbW1vbiA9IHJlcXVpcmVfY29tbW9uKCk7CiAgICB2YXIgWUFNTEV4Y2VwdGlvbiA9IHJlcXVpcmVfZXhjZXB0aW9uKCk7CiAgICB2YXIgTWFyayA9IHJlcXVpcmVfbWFyaygpOwogICAgdmFyIERFRkFVTFRfU0FGRV9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfc2FmZSgpOwogICAgdmFyIERFRkFVTFRfRlVMTF9TQ0hFTUEgPSByZXF1aXJlX2RlZmF1bHRfZnVsbCgpOwogICAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgQ09OVEVYVF9GTE9XX0lOID0gMTsKICAgIHZhciBDT05URVhUX0ZMT1dfT1VUID0gMjsKICAgIHZhciBDT05URVhUX0JMT0NLX0lOID0gMzsKICAgIHZhciBDT05URVhUX0JMT0NLX09VVCA9IDQ7CiAgICB2YXIgQ0hPTVBJTkdfQ0xJUCA9IDE7CiAgICB2YXIgQ0hPTVBJTkdfU1RSSVAgPSAyOwogICAgdmFyIENIT01QSU5HX0tFRVAgPSAzOwogICAgdmFyIFBBVFRFUk5fTk9OX1BSSU5UQUJMRSA9IC9bXHgwMC1ceDA4XHgwQlx4MENceDBFLVx4MUZceDdGLVx4ODRceDg2LVx4OUZcdUZGRkVcdUZGRkZdfFtcdUQ4MDAtXHVEQkZGXSg/IVtcdURDMDAtXHVERkZGXSl8KD86W15cdUQ4MDAtXHVEQkZGXXxeKVtcdURDMDAtXHVERkZGXS87CiAgICB2YXIgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MgPSAvW1x4ODVcdTIwMjhcdTIwMjldLzsKICAgIHZhciBQQVRURVJOX0ZMT1dfSU5ESUNBVE9SUyA9IC9bLFxbXF1ce1x9XS87CiAgICB2YXIgUEFUVEVSTl9UQUdfSEFORExFID0gL14oPzohfCEhfCFbYS16XC1dKyEpJC9pOwogICAgdmFyIFBBVFRFUk5fVEFHX1VSSSA9IC9eKD86IXxbXixcW1xdXHtcfV0pKD86JVswLTlhLWZdezJ9fFswLTlhLXpcLSM7XC9cPzpAJj1cK1wkLF9cLiF+XConXChcKVxbXF1dKSokL2k7CiAgICBmdW5jdGlvbiBfY2xhc3Mob2JqKSB7CiAgICAgIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX0VPTChjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gMTAgfHwgYzExID09PSAxMzsKICAgIH0KICAgIGZ1bmN0aW9uIGlzX1dISVRFX1NQQUNFKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSA5IHx8IGMxMSA9PT0gMzI7CiAgICB9CiAgICBmdW5jdGlvbiBpc19XU19PUl9FT0woYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDkgfHwgYzExID09PSAzMiB8fCBjMTEgPT09IDEwIHx8IGMxMSA9PT0gMTM7CiAgICB9CiAgICBmdW5jdGlvbiBpc19GTE9XX0lORElDQVRPUihjMTEpIHsKICAgICAgcmV0dXJuIGMxMSA9PT0gNDQgfHwgYzExID09PSA5MSB8fCBjMTEgPT09IDkzIHx8IGMxMSA9PT0gMTIzIHx8IGMxMSA9PT0gMTI1OwogICAgfQogICAgZnVuY3Rpb24gZnJvbUhleENvZGUoYzExKSB7CiAgICAgIHZhciBsYzsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgbGMgPSBjMTEgfCAzMjsKICAgICAgaWYgKDk3IDw9IGxjICYmIGxjIDw9IDEwMikgewogICAgICAgIHJldHVybiBsYyAtIDk3ICsgMTA7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlZEhleExlbihjMTEpIHsKICAgICAgaWYgKGMxMSA9PT0gMTIwKSB7CiAgICAgICAgcmV0dXJuIDI7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gMTE3KSB7CiAgICAgICAgcmV0dXJuIDQ7CiAgICAgIH0KICAgICAgaWYgKGMxMSA9PT0gODUpIHsKICAgICAgICByZXR1cm4gODsKICAgICAgfQogICAgICByZXR1cm4gMDsKICAgIH0KICAgIGZ1bmN0aW9uIGZyb21EZWNpbWFsQ29kZShjMTEpIHsKICAgICAgaWYgKDQ4IDw9IGMxMSAmJiBjMTEgPD0gNTcpIHsKICAgICAgICByZXR1cm4gYzExIC0gNDg7CiAgICAgIH0KICAgICAgcmV0dXJuIC0xOwogICAgfQogICAgZnVuY3Rpb24gc2ltcGxlRXNjYXBlU2VxdWVuY2UoYzExKSB7CiAgICAgIHJldHVybiBjMTEgPT09IDQ4ID8gIlwwIiA6IGMxMSA9PT0gOTcgPyAiXHgwNyIgOiBjMTEgPT09IDk4ID8gIlxiIiA6IGMxMSA9PT0gMTE2ID8gIgkiIDogYzExID09PSA5ID8gIgkiIDogYzExID09PSAxMTAgPyAiXG4iIDogYzExID09PSAxMTggPyAiXHYiIDogYzExID09PSAxMDIgPyAiXGYiIDogYzExID09PSAxMTQgPyAiXHIiIDogYzExID09PSAxMDEgPyAiXHgxQiIgOiBjMTEgPT09IDMyID8gIiAiIDogYzExID09PSAzNCA/ICciJyA6IGMxMSA9PT0gNDcgPyAiLyIgOiBjMTEgPT09IDkyID8gIlxcIiA6IGMxMSA9PT0gNzggPyAiXHg4NSIgOiBjMTEgPT09IDk1ID8gIlx4QTAiIDogYzExID09PSA3NiA/ICJcdTIwMjgiIDogYzExID09PSA4MCA/ICJcdTIwMjkiIDogIiI7CiAgICB9CiAgICBmdW5jdGlvbiBjaGFyRnJvbUNvZGVwb2ludChjMTEpIHsKICAgICAgaWYgKGMxMSA8PSA2NTUzNSkgewogICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKGMxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoCiAgICAgICAgKGMxMSAtIDY1NTM2ID4+IDEwKSArIDU1Mjk2LAogICAgICAgIChjMTEgLSA2NTUzNiAmIDEwMjMpICsgNTYzMjAKICAgICAgKTsKICAgIH0KICAgIGZ1bmN0aW9uIHNldFByb3BlcnR5KG9iamVjdCwga2V5MiwgdmFsdWUyKSB7CiAgICAgIGlmIChrZXkyID09PSAiX19wcm90b19fIikgewogICAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShvYmplY3QsIGtleTIsIHsKICAgICAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZSwKICAgICAgICAgIGVudW1lcmFibGU6IHRydWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgICAgIHZhbHVlOiB2YWx1ZTIKICAgICAgICB9KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBvYmplY3Rba2V5Ml0gPSB2YWx1ZTI7CiAgICAgIH0KICAgIH0KICAgIHZhciBzaW1wbGVFc2NhcGVDaGVjayA9IG5ldyBBcnJheSgyNTYpOwogICAgdmFyIHNpbXBsZUVzY2FwZU1hcCA9IG5ldyBBcnJheSgyNTYpOwogICAgZm9yIChpMTEgPSAwOyBpMTEgPCAyNTY7IGkxMSsrKSB7CiAgICAgIHNpbXBsZUVzY2FwZUNoZWNrW2kxMV0gPSBzaW1wbGVFc2NhcGVTZXF1ZW5jZShpMTEpID8gMSA6IDA7CiAgICAgIHNpbXBsZUVzY2FwZU1hcFtpMTFdID0gc2ltcGxlRXNjYXBlU2VxdWVuY2UoaTExKTsKICAgIH0KICAgIGZ1bmN0aW9uIFN0YXRlKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHRoaXMuaW5wdXQgPSBpbnB1dDsKICAgICAgdGhpcy5maWxlbmFtZSA9IG9wdGlvbnNbImZpbGVuYW1lIl0gfHwgbnVsbDsKICAgICAgdGhpcy5zY2hlbWEgPSBvcHRpb25zWyJzY2hlbWEiXSB8fCBERUZBVUxUX0ZVTExfU0NIRU1BOwogICAgICB0aGlzLm9uV2FybmluZyA9IG9wdGlvbnNbIm9uV2FybmluZyJdIHx8IG51bGw7CiAgICAgIHRoaXMubGVnYWN5ID0gb3B0aW9uc1sibGVnYWN5Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuanNvbiA9IG9wdGlvbnNbImpzb24iXSB8fCBmYWxzZTsKICAgICAgdGhpcy5saXN0ZW5lciA9IG9wdGlvbnNbImxpc3RlbmVyIl0gfHwgbnVsbDsKICAgICAgdGhpcy5pbXBsaWNpdFR5cGVzID0gdGhpcy5zY2hlbWEuY29tcGlsZWRJbXBsaWNpdDsKICAgICAgdGhpcy50eXBlTWFwID0gdGhpcy5zY2hlbWEuY29tcGlsZWRUeXBlTWFwOwogICAgICB0aGlzLmxlbmd0aCA9IGlucHV0Lmxlbmd0aDsKICAgICAgdGhpcy5wb3NpdGlvbiA9IDA7CiAgICAgIHRoaXMubGluZSA9IDA7CiAgICAgIHRoaXMubGluZVN0YXJ0ID0gMDsKICAgICAgdGhpcy5saW5lSW5kZW50ID0gMDsKICAgICAgdGhpcy5kb2N1bWVudHMgPSBbXTsKICAgIH0KICAgIGZ1bmN0aW9uIGdlbmVyYXRlRXJyb3Ioc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIG5ldyBZQU1MRXhjZXB0aW9uKAogICAgICAgIG1lc3NhZ2UyLAogICAgICAgIG5ldyBNYXJrKHN0YXRlMTIuZmlsZW5hbWUsIHN0YXRlMTIuaW5wdXQsIHN0YXRlMTIucG9zaXRpb24sIHN0YXRlMTIubGluZSwgc3RhdGUxMi5wb3NpdGlvbiAtIHN0YXRlMTIubGluZVN0YXJ0KQogICAgICApOwogICAgfQogICAgZnVuY3Rpb24gdGhyb3dFcnJvcjIoc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgdGhyb3cgZ2VuZXJhdGVFcnJvcihzdGF0ZTEyLCBtZXNzYWdlMik7CiAgICB9CiAgICBmdW5jdGlvbiB0aHJvd1dhcm5pbmcoc3RhdGUxMiwgbWVzc2FnZTIpIHsKICAgICAgaWYgKHN0YXRlMTIub25XYXJuaW5nKSB7CiAgICAgICAgc3RhdGUxMi5vbldhcm5pbmcuY2FsbChudWxsLCBnZW5lcmF0ZUVycm9yKHN0YXRlMTIsIG1lc3NhZ2UyKSk7CiAgICAgIH0KICAgIH0KICAgIHZhciBkaXJlY3RpdmVIYW5kbGVycyA9IHsKICAgICAgWUFNTDogZnVuY3Rpb24gaGFuZGxlWWFtbERpcmVjdGl2ZShzdGF0ZTEyLCBuYW1lLCBhcmdzKSB7CiAgICAgICAgdmFyIG1hdGNoMiwgbWFqb3IsIG1pbm9yOwogICAgICAgIGlmIChzdGF0ZTEyLnZlcnNpb24gIT09IG51bGwpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJkdXBsaWNhdGlvbiBvZiAlWUFNTCBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAxKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiWUFNTCBkaXJlY3RpdmUgYWNjZXB0cyBleGFjdGx5IG9uZSBhcmd1bWVudCIpOwogICAgICAgIH0KICAgICAgICBtYXRjaDIgPSAvXihbMC05XSspXC4oWzAtOV0rKSQvLmV4ZWMoYXJnc1swXSk7CiAgICAgICAgaWYgKG1hdGNoMiA9PT0gbnVsbCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImlsbC1mb3JtZWQgYXJndW1lbnQgb2YgdGhlIFlBTUwgZGlyZWN0aXZlIik7CiAgICAgICAgfQogICAgICAgIG1ham9yID0gcGFyc2VJbnQobWF0Y2gyWzFdLCAxMCk7CiAgICAgICAgbWlub3IgPSBwYXJzZUludChtYXRjaDJbMl0sIDEwKTsKICAgICAgICBpZiAobWFqb3IgIT09IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ1bmFjY2VwdGFibGUgWUFNTCB2ZXJzaW9uIG9mIHRoZSBkb2N1bWVudCIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnZlcnNpb24gPSBhcmdzWzBdOwogICAgICAgIHN0YXRlMTIuY2hlY2tMaW5lQnJlYWtzID0gbWlub3IgPCAyOwogICAgICAgIGlmIChtaW5vciAhPT0gMSAmJiBtaW5vciAhPT0gMikgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlMTIsICJ1bnN1cHBvcnRlZCBZQU1MIHZlcnNpb24gb2YgdGhlIGRvY3VtZW50Iik7CiAgICAgICAgfQogICAgICB9LAogICAgICBUQUc6IGZ1bmN0aW9uIGhhbmRsZVRhZ0RpcmVjdGl2ZShzdGF0ZTEyLCBuYW1lLCBhcmdzKSB7CiAgICAgICAgdmFyIGhhbmRsZTMsIHByZWZpeDQ7CiAgICAgICAgaWYgKGFyZ3MubGVuZ3RoICE9PSAyKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiVEFHIGRpcmVjdGl2ZSBhY2NlcHRzIGV4YWN0bHkgdHdvIGFyZ3VtZW50cyIpOwogICAgICAgIH0KICAgICAgICBoYW5kbGUzID0gYXJnc1swXTsKICAgICAgICBwcmVmaXg0ID0gYXJnc1sxXTsKICAgICAgICBpZiAoIVBBVFRFUk5fVEFHX0hBTkRMRS50ZXN0KGhhbmRsZTMpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiaWxsLWZvcm1lZCB0YWcgaGFuZGxlIChmaXJzdCBhcmd1bWVudCkgb2YgdGhlIFRBRyBkaXJlY3RpdmUiKTsKICAgICAgICB9CiAgICAgICAgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTIudGFnTWFwLCBoYW5kbGUzKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgJ3RoZXJlIGlzIGEgcHJldmlvdXNseSBkZWNsYXJlZCBzdWZmaXggZm9yICInICsgaGFuZGxlMyArICciIHRhZyBoYW5kbGUnKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFQQVRURVJOX1RBR19VUkkudGVzdChwcmVmaXg0KSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImlsbC1mb3JtZWQgdGFnIHByZWZpeCAoc2Vjb25kIGFyZ3VtZW50KSBvZiB0aGUgVEFHIGRpcmVjdGl2ZSIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnRhZ01hcFtoYW5kbGUzXSA9IHByZWZpeDQ7CiAgICAgIH0KICAgIH07CiAgICBmdW5jdGlvbiBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBzdGFydCwgZW5kMywgY2hlY2tKc29uKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIF9sZW5ndGgsIF9jaGFyYWN0ZXIsIF9yZXN1bHQ7CiAgICAgIGlmIChzdGFydCA8IGVuZDMpIHsKICAgICAgICBfcmVzdWx0ID0gc3RhdGUxMi5pbnB1dC5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgICAgaWYgKGNoZWNrSnNvbikgewogICAgICAgICAgZm9yIChfcG9zaXRpb24gPSAwLCBfbGVuZ3RoID0gX3Jlc3VsdC5sZW5ndGg7IF9wb3NpdGlvbiA8IF9sZW5ndGg7IF9wb3NpdGlvbiArPSAxKSB7CiAgICAgICAgICAgIF9jaGFyYWN0ZXIgPSBfcmVzdWx0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTsKICAgICAgICAgICAgaWYgKCEoX2NoYXJhY3RlciA9PT0gOSB8fCAzMiA8PSBfY2hhcmFjdGVyICYmIF9jaGFyYWN0ZXIgPD0gMTExNDExMSkpIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZXhwZWN0ZWQgdmFsaWQgSlNPTiBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoUEFUVEVSTl9OT05fUFJJTlRBQkxFLnRlc3QoX3Jlc3VsdCkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0aGUgc3RyZWFtIGNvbnRhaW5zIG5vbi1wcmludGFibGUgY2hhcmFjdGVycyIpOwogICAgICAgIH0KICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBfcmVzdWx0OwogICAgICB9CiAgICB9CiAgICBmdW5jdGlvbiBtZXJnZU1hcHBpbmdzKHN0YXRlMTIsIGRlc3RpbmF0aW9uLCBzb3VyY2UsIG92ZXJyaWRhYmxlS2V5cykgewogICAgICB2YXIgc291cmNlS2V5cywga2V5MiwgaW5kZXgyLCBxdWFudGl0eTsKICAgICAgaWYgKCFjb21tb24uaXNPYmplY3Qoc291cmNlKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJjYW5ub3QgbWVyZ2UgbWFwcGluZ3M7IHRoZSBwcm92aWRlZCBzb3VyY2Ugb2JqZWN0IGlzIHVuYWNjZXB0YWJsZSIpOwogICAgICB9CiAgICAgIHNvdXJjZUtleXMgPSBPYmplY3Qua2V5cyhzb3VyY2UpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIHF1YW50aXR5ID0gc291cmNlS2V5cy5sZW5ndGg7IGluZGV4MiA8IHF1YW50aXR5OyBpbmRleDIgKz0gMSkgewogICAgICAgIGtleTIgPSBzb3VyY2VLZXlzW2luZGV4Ml07CiAgICAgICAgaWYgKCFfaGFzT3duUHJvcGVydHkuY2FsbChkZXN0aW5hdGlvbiwga2V5MikpIHsKICAgICAgICAgIHNldFByb3BlcnR5KGRlc3RpbmF0aW9uLCBrZXkyLCBzb3VyY2Vba2V5Ml0pOwogICAgICAgICAgb3ZlcnJpZGFibGVLZXlzW2tleTJdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgc3RhcnRMaW5lLCBzdGFydFBvcykgewogICAgICB2YXIgaW5kZXgyLCBxdWFudGl0eTsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkoa2V5Tm9kZSkpIHsKICAgICAgICBrZXlOb2RlID0gQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoa2V5Tm9kZSk7CiAgICAgICAgZm9yIChpbmRleDIgPSAwLCBxdWFudGl0eSA9IGtleU5vZGUubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KGtleU5vZGVbaW5kZXgyXSkpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgIm5lc3RlZCBhcnJheXMgYXJlIG5vdCBzdXBwb3J0ZWQgaW5zaWRlIGtleXMiKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0eXBlb2Yga2V5Tm9kZSA9PT0gIm9iamVjdCIgJiYgX2NsYXNzKGtleU5vZGVbaW5kZXgyXSkgPT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAgICAgIGtleU5vZGVbaW5kZXgyXSA9ICJbb2JqZWN0IE9iamVjdF0iOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodHlwZW9mIGtleU5vZGUgPT09ICJvYmplY3QiICYmIF9jbGFzcyhrZXlOb2RlKSA9PT0gIltvYmplY3QgT2JqZWN0XSIpIHsKICAgICAgICBrZXlOb2RlID0gIltvYmplY3QgT2JqZWN0XSI7CiAgICAgIH0KICAgICAga2V5Tm9kZSA9IFN0cmluZyhrZXlOb2RlKTsKICAgICAgaWYgKF9yZXN1bHQgPT09IG51bGwpIHsKICAgICAgICBfcmVzdWx0ID0ge307CiAgICAgIH0KICAgICAgaWYgKGtleVRhZyA9PT0gInRhZzp5YW1sLm9yZywyMDAyOm1lcmdlIikgewogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlTm9kZSkpIHsKICAgICAgICAgIGZvciAoaW5kZXgyID0gMCwgcXVhbnRpdHkgPSB2YWx1ZU5vZGUubGVuZ3RoOyBpbmRleDIgPCBxdWFudGl0eTsgaW5kZXgyICs9IDEpIHsKICAgICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZTEyLCBfcmVzdWx0LCB2YWx1ZU5vZGVbaW5kZXgyXSwgb3ZlcnJpZGFibGVLZXlzKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VNYXBwaW5ncyhzdGF0ZTEyLCBfcmVzdWx0LCB2YWx1ZU5vZGUsIG92ZXJyaWRhYmxlS2V5cyk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGlmICghc3RhdGUxMi5qc29uICYmICFfaGFzT3duUHJvcGVydHkuY2FsbChvdmVycmlkYWJsZUtleXMsIGtleU5vZGUpICYmIF9oYXNPd25Qcm9wZXJ0eS5jYWxsKF9yZXN1bHQsIGtleU5vZGUpKSB7CiAgICAgICAgICBzdGF0ZTEyLmxpbmUgPSBzdGFydExpbmUgfHwgc3RhdGUxMi5saW5lOwogICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiA9IHN0YXJ0UG9zIHx8IHN0YXRlMTIucG9zaXRpb247CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRlZCBtYXBwaW5nIGtleSIpOwogICAgICAgIH0KICAgICAgICBzZXRQcm9wZXJ0eShfcmVzdWx0LCBrZXlOb2RlLCB2YWx1ZU5vZGUpOwogICAgICAgIGRlbGV0ZSBvdmVycmlkYWJsZUtleXNba2V5Tm9kZV07CiAgICAgIH0KICAgICAgcmV0dXJuIF9yZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkTGluZUJyZWFrKHN0YXRlMTIpIHsKICAgICAgdmFyIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSAxMCkgewogICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMTMpIHsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgaWYgKHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKSA9PT0gMTApIHsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImEgbGluZSBicmVhayBpcyBleHBlY3RlZCIpOwogICAgICB9CiAgICAgIHN0YXRlMTIubGluZSArPSAxOwogICAgICBzdGF0ZTEyLmxpbmVTdGFydCA9IHN0YXRlMTIucG9zaXRpb247CiAgICB9CiAgICBmdW5jdGlvbiBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIGFsbG93Q29tbWVudHMsIGNoZWNrSW5kZW50KSB7CiAgICAgIHZhciBsaW5lQnJlYWtzID0gMCwgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChhbGxvd0NvbW1lbnRzICYmIGNoID09PSAzNSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfSB3aGlsZSAoY2ggIT09IDEwICYmIGNoICE9PSAxMyAmJiBjaCAhPT0gMCk7CiAgICAgICAgfQogICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICByZWFkTGluZUJyZWFrKHN0YXRlMTIpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICBsaW5lQnJlYWtzKys7CiAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQgPSAwOwogICAgICAgICAgd2hpbGUgKGNoID09PSAzMikgewogICAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQrKzsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGVja0luZGVudCAhPT0gLTEgJiYgbGluZUJyZWFrcyAhPT0gMCAmJiBzdGF0ZTEyLmxpbmVJbmRlbnQgPCBjaGVja0luZGVudCkgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZTEyLCAiZGVmaWNpZW50IGluZGVudGF0aW9uIik7CiAgICAgIH0KICAgICAgcmV0dXJuIGxpbmVCcmVha3M7CiAgICB9CiAgICBmdW5jdGlvbiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxMikgewogICAgICB2YXIgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbiwgY2g7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbik7CiAgICAgIGlmICgoY2ggPT09IDQ1IHx8IGNoID09PSA0NikgJiYgY2ggPT09IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChfcG9zaXRpb24gKyAxKSAmJiBjaCA9PT0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KF9wb3NpdGlvbiArIDIpKSB7CiAgICAgICAgX3Bvc2l0aW9uICs9IDM7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoX3Bvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDAgfHwgaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxMiwgY291bnQyKSB7CiAgICAgIGlmIChjb3VudDIgPT09IDEpIHsKICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSAiICI7CiAgICAgIH0gZWxzZSBpZiAoY291bnQyID4gMSkgewogICAgICAgIHN0YXRlMTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgY291bnQyIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRQbGFpblNjYWxhcihzdGF0ZTEyLCBub2RlSW5kZW50LCB3aXRoaW5GbG93Q29sbGVjdGlvbikgewogICAgICB2YXIgcHJlY2VkaW5nLCBmb2xsb3dpbmcsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgaGFzUGVuZGluZ0NvbnRlbnQsIF9saW5lLCBfbGluZVN0YXJ0LCBfbGluZUluZGVudCwgX2tpbmQgPSBzdGF0ZTEyLmtpbmQsIF9yZXN1bHQgPSBzdGF0ZTEyLnJlc3VsdCwgY2g7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoaXNfV1NfT1JfRU9MKGNoKSB8fCBpc19GTE9XX0lORElDQVRPUihjaCkgfHwgY2ggPT09IDM1IHx8IGNoID09PSAzOCB8fCBjaCA9PT0gNDIgfHwgY2ggPT09IDMzIHx8IGNoID09PSAxMjQgfHwgY2ggPT09IDYyIHx8IGNoID09PSAzOSB8fCBjaCA9PT0gMzQgfHwgY2ggPT09IDM3IHx8IGNoID09PSA2NCB8fCBjaCA9PT0gOTYpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKGNoID09PSA2MyB8fCBjaCA9PT0gNDUpIHsKICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgaGFzUGVuZGluZ0NvbnRlbnQgPSBmYWxzZTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSA1OCkgewogICAgICAgICAgZm9sbG93aW5nID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24gKyAxKTsKICAgICAgICAgIGlmIChpc19XU19PUl9FT0woZm9sbG93aW5nKSB8fCB3aXRoaW5GbG93Q29sbGVjdGlvbiAmJiBpc19GTE9XX0lORElDQVRPUihmb2xsb3dpbmcpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICBwcmVjZWRpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiAtIDEpOwogICAgICAgICAgaWYgKGlzX1dTX09SX0VPTChwcmVjZWRpbmcpKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5wb3NpdGlvbiA9PT0gc3RhdGUxMi5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTIpIHx8IHdpdGhpbkZsb3dDb2xsZWN0aW9uICYmIGlzX0ZMT1dfSU5ESUNBVE9SKGNoKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBfbGluZSA9IHN0YXRlMTIubGluZTsKICAgICAgICAgIF9saW5lU3RhcnQgPSBzdGF0ZTEyLmxpbmVTdGFydDsKICAgICAgICAgIF9saW5lSW5kZW50ID0gc3RhdGUxMi5saW5lSW5kZW50OwogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCBmYWxzZSwgLTEpOwogICAgICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA+PSBub2RlSW5kZW50KSB7CiAgICAgICAgICAgIGhhc1BlbmRpbmdDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiA9IGNhcHR1cmVFbmQ7CiAgICAgICAgICAgIHN0YXRlMTIubGluZSA9IF9saW5lOwogICAgICAgICAgICBzdGF0ZTEyLmxpbmVTdGFydCA9IF9saW5lU3RhcnQ7CiAgICAgICAgICAgIHN0YXRlMTIubGluZUluZGVudCA9IF9saW5lSW5kZW50OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGhhc1BlbmRpbmdDb250ZW50KSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIGZhbHNlKTsKICAgICAgICAgIHdyaXRlRm9sZGVkTGluZXMoc3RhdGUxMiwgc3RhdGUxMi5saW5lIC0gX2xpbmUpOwogICAgICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgICAgICBoYXNQZW5kaW5nQ29udGVudCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgICBpZiAoIWlzX1dISVRFX1NQQUNFKGNoKSkgewogICAgICAgICAgY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb24gKyAxOwogICAgICAgIH0KICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgZmFsc2UpOwogICAgICBpZiAoc3RhdGUxMi5yZXN1bHQpIHsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBzdGF0ZTEyLmtpbmQgPSBfa2luZDsKICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkU2luZ2xlUXVvdGVkU2NhbGFyKHN0YXRlMTIsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIGNoLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQ7CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoY2ggIT09IDM5KSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIGlmIChjaCA9PT0gMzkpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgc3RhdGUxMi5wb3NpdGlvbiwgdHJ1ZSk7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgaWYgKGNoID09PSAzOSkgewogICAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIGNhcHR1cmVFbmQsIHRydWUpOwogICAgICAgICAgd3JpdGVGb2xkZWRMaW5lcyhzdGF0ZTEyLCBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIGZhbHNlLCBub2RlSW5kZW50KSk7CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTIucG9zaXRpb24gPT09IHN0YXRlMTIubGluZVN0YXJ0ICYmIHRlc3REb2N1bWVudFNlcGFyYXRvcihzdGF0ZTEyKSkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBkb2N1bWVudCB3aXRoaW4gYSBzaW5nbGUgcXVvdGVkIHNjYWxhciIpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVuZXhwZWN0ZWQgZW5kIG9mIHRoZSBzdHJlYW0gd2l0aGluIGEgc2luZ2xlIHF1b3RlZCBzY2FsYXIiKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWREb3VibGVRdW90ZWRTY2FsYXIoc3RhdGUxMiwgbm9kZUluZGVudCkgewogICAgICB2YXIgY2FwdHVyZVN0YXJ0LCBjYXB0dXJlRW5kLCBoZXhMZW5ndGgsIGhleFJlc3VsdCwgdG1wLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gMzQpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgc3RhdGUxMi5raW5kID0gInNjYWxhciI7CiAgICAgIHN0YXRlMTIucmVzdWx0ID0gIiI7CiAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgY2FwdHVyZVN0YXJ0ID0gY2FwdHVyZUVuZCA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgIHdoaWxlICgoY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbikpICE9PSAwKSB7CiAgICAgICAgaWYgKGNoID09PSAzNCkgewogICAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxMiwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTEyLnBvc2l0aW9uLCB0cnVlKTsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDkyKSB7CiAgICAgICAgICBjYXB0dXJlU2VnbWVudChzdGF0ZTEyLCBjYXB0dXJlU3RhcnQsIHN0YXRlMTIucG9zaXRpb24sIHRydWUpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIGlmIChpc19FT0woY2gpKSB7CiAgICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgZmFsc2UsIG5vZGVJbmRlbnQpOwogICAgICAgICAgfSBlbHNlIGlmIChjaCA8IDI1NiAmJiBzaW1wbGVFc2NhcGVDaGVja1tjaF0pIHsKICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gc2ltcGxlRXNjYXBlTWFwW2NoXTsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZXNjYXBlZEhleExlbihjaCkpID4gMCkgewogICAgICAgICAgICBoZXhMZW5ndGggPSB0bXA7CiAgICAgICAgICAgIGhleFJlc3VsdCA9IDA7CiAgICAgICAgICAgIGZvciAoOyBoZXhMZW5ndGggPiAwOyBoZXhMZW5ndGgtLSkgewogICAgICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgICAgaWYgKCh0bXAgPSBmcm9tSGV4Q29kZShjaCkpID49IDApIHsKICAgICAgICAgICAgICAgIGhleFJlc3VsdCA9IChoZXhSZXN1bHQgPDwgNCkgKyB0bXA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJleHBlY3RlZCBoZXhhZGVjaW1hbCBjaGFyYWN0ZXIiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gY2hhckZyb21Db2RlcG9pbnQoaGV4UmVzdWx0KTsKICAgICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbisrOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInVua25vd24gZXNjYXBlIHNlcXVlbmNlIik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXB0dXJlU3RhcnQgPSBjYXB0dXJlRW5kID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB9IGVsc2UgaWYgKGlzX0VPTChjaCkpIHsKICAgICAgICAgIGNhcHR1cmVTZWdtZW50KHN0YXRlMTIsIGNhcHR1cmVTdGFydCwgY2FwdHVyZUVuZCwgdHJ1ZSk7CiAgICAgICAgICB3cml0ZUZvbGRlZExpbmVzKHN0YXRlMTIsIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgZmFsc2UsIG5vZGVJbmRlbnQpKTsKICAgICAgICAgIGNhcHR1cmVTdGFydCA9IGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5wb3NpdGlvbiA9PT0gc3RhdGUxMi5saW5lU3RhcnQgJiYgdGVzdERvY3VtZW50U2VwYXJhdG9yKHN0YXRlMTIpKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIGRvY3VtZW50IHdpdGhpbiBhIGRvdWJsZSBxdW90ZWQgc2NhbGFyIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHN0YXRlMTIucG9zaXRpb24rKzsKICAgICAgICAgIGNhcHR1cmVFbmQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBkb3VibGUgcXVvdGVkIHNjYWxhciIpOwogICAgfQogICAgZnVuY3Rpb24gcmVhZEZsb3dDb2xsZWN0aW9uKHN0YXRlMTIsIG5vZGVJbmRlbnQpIHsKICAgICAgdmFyIHJlYWROZXh0ID0gdHJ1ZSwgX2xpbmUsIF90YWcgPSBzdGF0ZTEyLnRhZywgX3Jlc3VsdCwgX2FuY2hvciA9IHN0YXRlMTIuYW5jaG9yLCBmb2xsb3dpbmcsIHRlcm1pbmF0b3IsIGlzUGFpciwgaXNFeHBsaWNpdFBhaXIsIGlzTWFwcGluZywgb3ZlcnJpZGFibGVLZXlzID0ge30sIGtleU5vZGUsIGtleVRhZywgdmFsdWVOb2RlLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCA9PT0gOTEpIHsKICAgICAgICB0ZXJtaW5hdG9yID0gOTM7CiAgICAgICAgaXNNYXBwaW5nID0gZmFsc2U7CiAgICAgICAgX3Jlc3VsdCA9IFtdOwogICAgICB9IGVsc2UgaWYgKGNoID09PSAxMjMpIHsKICAgICAgICB0ZXJtaW5hdG9yID0gMTI1OwogICAgICAgIGlzTWFwcGluZyA9IHRydWU7CiAgICAgICAgX3Jlc3VsdCA9IHt9OwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZTEyLmFuY2hvck1hcFtzdGF0ZTEyLmFuY2hvcl0gPSBfcmVzdWx0OwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIHdoaWxlIChjaCAhPT0gMCkgewogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgaWYgKGNoID09PSB0ZXJtaW5hdG9yKSB7CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgICAgICBzdGF0ZTEyLmFuY2hvciA9IF9hbmNob3I7CiAgICAgICAgICBzdGF0ZTEyLmtpbmQgPSBpc01hcHBpbmcgPyAibWFwcGluZyIgOiAic2VxdWVuY2UiOwogICAgICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIGlmICghcmVhZE5leHQpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJtaXNzZWQgY29tbWEgYmV0d2VlbiBmbG93IGNvbGxlY3Rpb24gZW50cmllcyIpOwogICAgICAgIH0KICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICBpc1BhaXIgPSBpc0V4cGxpY2l0UGFpciA9IGZhbHNlOwogICAgICAgIGlmIChjaCA9PT0gNjMpIHsKICAgICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSk7CiAgICAgICAgICBpZiAoaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgICAgaXNQYWlyID0gaXNFeHBsaWNpdFBhaXIgPSB0cnVlOwogICAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIG5vZGVJbmRlbnQsIENPTlRFWFRfRkxPV19JTiwgZmFsc2UsIHRydWUpOwogICAgICAgIGtleVRhZyA9IHN0YXRlMTIudGFnOwogICAgICAgIGtleU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIHRydWUsIG5vZGVJbmRlbnQpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmICgoaXNFeHBsaWNpdFBhaXIgfHwgc3RhdGUxMi5saW5lID09PSBfbGluZSkgJiYgY2ggPT09IDU4KSB7CiAgICAgICAgICBpc1BhaXIgPSB0cnVlOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgbm9kZUluZGVudCk7CiAgICAgICAgICBjb21wb3NlTm9kZShzdGF0ZTEyLCBub2RlSW5kZW50LCBDT05URVhUX0ZMT1dfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICAgIHZhbHVlTm9kZSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgIH0KICAgICAgICBpZiAoaXNNYXBwaW5nKSB7CiAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCB2YWx1ZU5vZGUpOwogICAgICAgIH0gZWxzZSBpZiAoaXNQYWlyKSB7CiAgICAgICAgICBfcmVzdWx0LnB1c2goc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBudWxsLCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgdmFsdWVOb2RlKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIF9yZXN1bHQucHVzaChrZXlOb2RlKTsKICAgICAgICB9CiAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCB0cnVlLCBub2RlSW5kZW50KTsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICBpZiAoY2ggPT09IDQ0KSB7CiAgICAgICAgICByZWFkTmV4dCA9IHRydWU7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWFkTmV4dCA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSBmbG93IGNvbGxlY3Rpb24iKTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRCbG9ja1NjYWxhcihzdGF0ZTEyLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBjYXB0dXJlU3RhcnQsIGZvbGRpbmcsIGNob21waW5nID0gQ0hPTVBJTkdfQ0xJUCwgZGlkUmVhZENvbnRlbnQgPSBmYWxzZSwgZGV0ZWN0ZWRJbmRlbnQgPSBmYWxzZSwgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQsIGVtcHR5TGluZXMgPSAwLCBhdE1vcmVJbmRlbnRlZCA9IGZhbHNlLCB0bXAsIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoID09PSAxMjQpIHsKICAgICAgICBmb2xkaW5nID0gZmFsc2U7CiAgICAgIH0gZWxzZSBpZiAoY2ggPT09IDYyKSB7CiAgICAgICAgZm9sZGluZyA9IHRydWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHN0YXRlMTIua2luZCA9ICJzY2FsYXIiOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9ICIiOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmIChjaCA9PT0gNDMgfHwgY2ggPT09IDQ1KSB7CiAgICAgICAgICBpZiAoQ0hPTVBJTkdfQ0xJUCA9PT0gY2hvbXBpbmcpIHsKICAgICAgICAgICAgY2hvbXBpbmcgPSBjaCA9PT0gNDMgPyBDSE9NUElOR19LRUVQIDogQ0hPTVBJTkdfU1RSSVA7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAicmVwZWF0IG9mIGEgY2hvbXBpbmcgbW9kZSBpZGVudGlmaWVyIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICgodG1wID0gZnJvbURlY2ltYWxDb2RlKGNoKSkgPj0gMCkgewogICAgICAgICAgaWYgKHRtcCA9PT0gMCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYmFkIGV4cGxpY2l0IGluZGVudGF0aW9uIHdpZHRoIG9mIGEgYmxvY2sgc2NhbGFyOyBpdCBjYW5ub3QgYmUgbGVzcyB0aGFuIG9uZSIpOwogICAgICAgICAgfSBlbHNlIGlmICghZGV0ZWN0ZWRJbmRlbnQpIHsKICAgICAgICAgICAgdGV4dEluZGVudCA9IG5vZGVJbmRlbnQgKyB0bXAgLSAxOwogICAgICAgICAgICBkZXRlY3RlZEluZGVudCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAicmVwZWF0IG9mIGFuIGluZGVudGF0aW9uIHdpZHRoIGlkZW50aWZpZXIiKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICBkbyB7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gd2hpbGUgKGlzX1dISVRFX1NQQUNFKGNoKSk7CiAgICAgICAgaWYgKGNoID09PSAzNSkgewogICAgICAgICAgZG8gewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfSB3aGlsZSAoIWlzX0VPTChjaCkgJiYgY2ggIT09IDApOwogICAgICAgIH0KICAgICAgfQogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICByZWFkTGluZUJyZWFrKHN0YXRlMTIpOwogICAgICAgIHN0YXRlMTIubGluZUluZGVudCA9IDA7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgd2hpbGUgKCghZGV0ZWN0ZWRJbmRlbnQgfHwgc3RhdGUxMi5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgJiYgY2ggPT09IDMyKSB7CiAgICAgICAgICBzdGF0ZTEyLmxpbmVJbmRlbnQrKzsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmICghZGV0ZWN0ZWRJbmRlbnQgJiYgc3RhdGUxMi5saW5lSW5kZW50ID4gdGV4dEluZGVudCkgewogICAgICAgICAgdGV4dEluZGVudCA9IHN0YXRlMTIubGluZUluZGVudDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzX0VPTChjaCkpIHsKICAgICAgICAgIGVtcHR5TGluZXMrKzsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDwgdGV4dEluZGVudCkgewogICAgICAgICAgaWYgKGNob21waW5nID09PSBDSE9NUElOR19LRUVQKSB7CiAgICAgICAgICAgIHN0YXRlMTIucmVzdWx0ICs9IGNvbW1vbi5yZXBlYXQoIlxuIiwgZGlkUmVhZENvbnRlbnQgPyAxICsgZW1wdHlMaW5lcyA6IGVtcHR5TGluZXMpOwogICAgICAgICAgfSBlbHNlIGlmIChjaG9tcGluZyA9PT0gQ0hPTVBJTkdfQ0xJUCkgewogICAgICAgICAgICBpZiAoZGlkUmVhZENvbnRlbnQpIHsKICAgICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSAiXG4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgaWYgKGZvbGRpbmcpIHsKICAgICAgICAgIGlmIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSB0cnVlOwogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICAgIH0gZWxzZSBpZiAoYXRNb3JlSW5kZW50ZWQpIHsKICAgICAgICAgICAgYXRNb3JlSW5kZW50ZWQgPSBmYWxzZTsKICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gY29tbW9uLnJlcGVhdCgiXG4iLCBlbXB0eUxpbmVzICsgMSk7CiAgICAgICAgICB9IGVsc2UgaWYgKGVtcHR5TGluZXMgPT09IDApIHsKICAgICAgICAgICAgaWYgKGRpZFJlYWRDb250ZW50KSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5yZXN1bHQgKz0gIiAiOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGVtcHR5TGluZXMpOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCArPSBjb21tb24ucmVwZWF0KCJcbiIsIGRpZFJlYWRDb250ZW50ID8gMSArIGVtcHR5TGluZXMgOiBlbXB0eUxpbmVzKTsKICAgICAgICB9CiAgICAgICAgZGlkUmVhZENvbnRlbnQgPSB0cnVlOwogICAgICAgIGRldGVjdGVkSW5kZW50ID0gdHJ1ZTsKICAgICAgICBlbXB0eUxpbmVzID0gMDsKICAgICAgICBjYXB0dXJlU3RhcnQgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIHdoaWxlICghaXNfRU9MKGNoKSAmJiBjaCAhPT0gMCkgewogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICB9CiAgICAgICAgY2FwdHVyZVNlZ21lbnQoc3RhdGUxMiwgY2FwdHVyZVN0YXJ0LCBzdGF0ZTEyLnBvc2l0aW9uLCBmYWxzZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBub2RlSW5kZW50KSB7CiAgICAgIHZhciBfbGluZSwgX3RhZyA9IHN0YXRlMTIudGFnLCBfYW5jaG9yID0gc3RhdGUxMi5hbmNob3IsIF9yZXN1bHQgPSBbXSwgZm9sbG93aW5nLCBkZXRlY3RlZCA9IGZhbHNlLCBjaDsKICAgICAgaWYgKHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5hbmNob3JNYXBbc3RhdGUxMi5hbmNob3JdID0gX3Jlc3VsdDsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgaWYgKGNoICE9PSA0NSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGZvbGxvd2luZyA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSk7CiAgICAgICAgaWYgKCFpc19XU19PUl9FT0woZm9sbG93aW5nKSkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRldGVjdGVkID0gdHJ1ZTsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uKys7CiAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDw9IG5vZGVJbmRlbnQpIHsKICAgICAgICAgICAgX3Jlc3VsdC5wdXNoKG51bGwpOwogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIG5vZGVJbmRlbnQsIENPTlRFWFRfQkxPQ0tfSU4sIGZhbHNlLCB0cnVlKTsKICAgICAgICBfcmVzdWx0LnB1c2goc3RhdGUxMi5yZXN1bHQpOwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmICgoc3RhdGUxMi5saW5lID09PSBfbGluZSB8fCBzdGF0ZTEyLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50KSAmJiBjaCAhPT0gMCkgewogICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImJhZCBpbmRlbnRhdGlvbiBvZiBhIHNlcXVlbmNlIGVudHJ5Iik7CiAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBub2RlSW5kZW50KSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBfdGFnOwogICAgICAgIHN0YXRlMTIuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICBzdGF0ZTEyLmtpbmQgPSAic2VxdWVuY2UiOwogICAgICAgIHN0YXRlMTIucmVzdWx0ID0gX3Jlc3VsdDsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBmdW5jdGlvbiByZWFkQmxvY2tNYXBwaW5nKHN0YXRlMTIsIG5vZGVJbmRlbnQsIGZsb3dJbmRlbnQpIHsKICAgICAgdmFyIGZvbGxvd2luZywgYWxsb3dDb21wYWN0LCBfbGluZSwgX3BvcywgX3RhZyA9IHN0YXRlMTIudGFnLCBfYW5jaG9yID0gc3RhdGUxMi5hbmNob3IsIF9yZXN1bHQgPSB7fSwgb3ZlcnJpZGFibGVLZXlzID0ge30sIGtleVRhZyA9IG51bGwsIGtleU5vZGUgPSBudWxsLCB2YWx1ZU5vZGUgPSBudWxsLCBhdEV4cGxpY2l0S2V5ID0gZmFsc2UsIGRldGVjdGVkID0gZmFsc2UsIGNoOwogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICBzdGF0ZTEyLmFuY2hvck1hcFtzdGF0ZTEyLmFuY2hvcl0gPSBfcmVzdWx0OwogICAgICB9CiAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICB3aGlsZSAoY2ggIT09IDApIHsKICAgICAgICBmb2xsb3dpbmcgPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgIF9saW5lID0gc3RhdGUxMi5saW5lOwogICAgICAgIF9wb3MgPSBzdGF0ZTEyLnBvc2l0aW9uOwogICAgICAgIGlmICgoY2ggPT09IDYzIHx8IGNoID09PSA1OCkgJiYgaXNfV1NfT1JfRU9MKGZvbGxvd2luZykpIHsKICAgICAgICAgIGlmIChjaCA9PT0gNjMpIHsKICAgICAgICAgICAgaWYgKGF0RXhwbGljaXRLZXkpIHsKICAgICAgICAgICAgICBzdG9yZU1hcHBpbmdQYWlyKHN0YXRlMTIsIF9yZXN1bHQsIG92ZXJyaWRhYmxlS2V5cywga2V5VGFnLCBrZXlOb2RlLCBudWxsKTsKICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgfQogICAgICAgICAgICBkZXRlY3RlZCA9IHRydWU7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSB0cnVlOwogICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSB0cnVlOwogICAgICAgICAgfSBlbHNlIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgYWxsb3dDb21wYWN0ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJpbmNvbXBsZXRlIGV4cGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBrZXkgbm9kZSBpcyBtaXNzZWQ7IG9yIGZvbGxvd2VkIGJ5IGEgbm9uLXRhYnVsYXRlZCBlbXB0eSBsaW5lIik7CiAgICAgICAgICB9CiAgICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uICs9IDE7CiAgICAgICAgICBjaCA9IGZvbGxvd2luZzsKICAgICAgICB9IGVsc2UgaWYgKGNvbXBvc2VOb2RlKHN0YXRlMTIsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19PVVQsIGZhbHNlLCB0cnVlKSkgewogICAgICAgICAgaWYgKHN0YXRlMTIubGluZSA9PT0gX2xpbmUpIHsKICAgICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICAgIHdoaWxlIChpc19XSElURV9TUEFDRShjaCkpIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChjaCA9PT0gNTgpIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICAgIGlmICghaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImEgd2hpdGVzcGFjZSBjaGFyYWN0ZXIgaXMgZXhwZWN0ZWQgYWZ0ZXIgdGhlIGtleS12YWx1ZSBzZXBhcmF0b3Igd2l0aGluIGEgYmxvY2sgbWFwcGluZyIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgZGV0ZWN0ZWQgPSB0cnVlOwogICAgICAgICAgICAgIGF0RXhwbGljaXRLZXkgPSBmYWxzZTsKICAgICAgICAgICAgICBhbGxvd0NvbXBhY3QgPSBmYWxzZTsKICAgICAgICAgICAgICBrZXlUYWcgPSBzdGF0ZTEyLnRhZzsKICAgICAgICAgICAgICBrZXlOb2RlID0gc3RhdGUxMi5yZXN1bHQ7CiAgICAgICAgICAgIH0gZWxzZSBpZiAoZGV0ZWN0ZWQpIHsKICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiY2FuIG5vdCByZWFkIGFuIGltcGxpY2l0IG1hcHBpbmcgcGFpcjsgYSBjb2xvbiBpcyBtaXNzZWQiKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgICAgICAgICAgc3RhdGUxMi5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJjYW4gbm90IHJlYWQgYSBibG9jayBtYXBwaW5nIGVudHJ5OyBhIG11bHRpbGluZSBrZXkgbWF5IG5vdCBiZSBhbiBpbXBsaWNpdCBrZXkiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHN0YXRlMTIudGFnID0gX3RhZzsKICAgICAgICAgICAgc3RhdGUxMi5hbmNob3IgPSBfYW5jaG9yOwogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTEyLmxpbmUgPT09IF9saW5lIHx8IHN0YXRlMTIubGluZUluZGVudCA+IG5vZGVJbmRlbnQpIHsKICAgICAgICAgIGlmIChjb21wb3NlTm9kZShzdGF0ZTEyLCBub2RlSW5kZW50LCBDT05URVhUX0JMT0NLX09VVCwgdHJ1ZSwgYWxsb3dDb21wYWN0KSkgewogICAgICAgICAgICBpZiAoYXRFeHBsaWNpdEtleSkgewogICAgICAgICAgICAgIGtleU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICB2YWx1ZU5vZGUgPSBzdGF0ZTEyLnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgICAgIHN0b3JlTWFwcGluZ1BhaXIoc3RhdGUxMiwgX3Jlc3VsdCwgb3ZlcnJpZGFibGVLZXlzLCBrZXlUYWcsIGtleU5vZGUsIHZhbHVlTm9kZSwgX2xpbmUsIF9wb3MpOwogICAgICAgICAgICBrZXlUYWcgPSBrZXlOb2RlID0gdmFsdWVOb2RlID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiBub2RlSW5kZW50ICYmIGNoICE9PSAwKSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYmFkIGluZGVudGF0aW9uIG9mIGEgbWFwcGluZyBlbnRyeSIpOwogICAgICAgIH0gZWxzZSBpZiAoc3RhdGUxMi5saW5lSW5kZW50IDwgbm9kZUluZGVudCkgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhdEV4cGxpY2l0S2V5KSB7CiAgICAgICAgc3RvcmVNYXBwaW5nUGFpcihzdGF0ZTEyLCBfcmVzdWx0LCBvdmVycmlkYWJsZUtleXMsIGtleVRhZywga2V5Tm9kZSwgbnVsbCk7CiAgICAgIH0KICAgICAgaWYgKGRldGVjdGVkKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBfdGFnOwogICAgICAgIHN0YXRlMTIuYW5jaG9yID0gX2FuY2hvcjsKICAgICAgICBzdGF0ZTEyLmtpbmQgPSAibWFwcGluZyI7CiAgICAgICAgc3RhdGUxMi5yZXN1bHQgPSBfcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBkZXRlY3RlZDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRUYWdQcm9wZXJ0eShzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGlzVmVyYmF0aW0gPSBmYWxzZSwgaXNOYW1lZCA9IGZhbHNlLCB0YWdIYW5kbGUsIHRhZ05hbWUsIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzMykgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoc3RhdGUxMi50YWcgIT09IG51bGwpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRpb24gb2YgYSB0YWcgcHJvcGVydHkiKTsKICAgICAgfQogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICBpZiAoY2ggPT09IDYwKSB7CiAgICAgICAgaXNWZXJiYXRpbSA9IHRydWU7CiAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgfSBlbHNlIGlmIChjaCA9PT0gMzMpIHsKICAgICAgICBpc05hbWVkID0gdHJ1ZTsKICAgICAgICB0YWdIYW5kbGUgPSAiISEiOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGFnSGFuZGxlID0gIiEiOwogICAgICB9CiAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTIucG9zaXRpb247CiAgICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgICAgZG8gewogICAgICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiBjaCAhPT0gNjIpOwogICAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uIDwgc3RhdGUxMi5sZW5ndGgpIHsKICAgICAgICAgIHRhZ05hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5leHBlY3RlZCBlbmQgb2YgdGhlIHN0cmVhbSB3aXRoaW4gYSB2ZXJiYXRpbSB0YWciKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpKSB7CiAgICAgICAgICBpZiAoY2ggPT09IDMzKSB7CiAgICAgICAgICAgIGlmICghaXNOYW1lZCkgewogICAgICAgICAgICAgIHRhZ0hhbmRsZSA9IHN0YXRlMTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uIC0gMSwgc3RhdGUxMi5wb3NpdGlvbiArIDEpOwogICAgICAgICAgICAgIGlmICghUEFUVEVSTl9UQUdfSEFORExFLnRlc3QodGFnSGFuZGxlKSkgewogICAgICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgIm5hbWVkIHRhZyBoYW5kbGUgY2Fubm90IGNvbnRhaW4gc3VjaCBjaGFyYWN0ZXJzIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlzTmFtZWQgPSB0cnVlOwogICAgICAgICAgICAgIF9wb3NpdGlvbiA9IHN0YXRlMTIucG9zaXRpb24gKyAxOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGV4Y2xhbWF0aW9uIG1hcmtzIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIHRhZ05hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgaWYgKFBBVFRFUk5fRkxPV19JTkRJQ0FUT1JTLnRlc3QodGFnTmFtZSkpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ0YWcgc3VmZml4IGNhbm5vdCBjb250YWluIGZsb3cgaW5kaWNhdG9yIGNoYXJhY3RlcnMiKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhZ05hbWUgJiYgIVBBVFRFUk5fVEFHX1VSSS50ZXN0KHRhZ05hbWUpKSB7CiAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgInRhZyBuYW1lIGNhbm5vdCBjb250YWluIHN1Y2ggY2hhcmFjdGVyczogIiArIHRhZ05hbWUpOwogICAgICB9CiAgICAgIGlmIChpc1ZlcmJhdGltKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSB0YWdOYW1lOwogICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHN0YXRlMTIudGFnTWFwLCB0YWdIYW5kbGUpKSB7CiAgICAgICAgc3RhdGUxMi50YWcgPSBzdGF0ZTEyLnRhZ01hcFt0YWdIYW5kbGVdICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICIhIikgewogICAgICAgIHN0YXRlMTIudGFnID0gIiEiICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIGlmICh0YWdIYW5kbGUgPT09ICIhISIpIHsKICAgICAgICBzdGF0ZTEyLnRhZyA9ICJ0YWc6eWFtbC5vcmcsMjAwMjoiICsgdGFnTmFtZTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAndW5kZWNsYXJlZCB0YWcgaGFuZGxlICInICsgdGFnSGFuZGxlICsgJyInKTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGNoOwogICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgaWYgKGNoICE9PSAzOCkgcmV0dXJuIGZhbHNlOwogICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZHVwbGljYXRpb24gb2YgYW4gYW5jaG9yIHByb3BlcnR5Iik7CiAgICAgIH0KICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibmFtZSBvZiBhbiBhbmNob3Igbm9kZSBtdXN0IGNvbnRhaW4gYXQgbGVhc3Qgb25lIGNoYXJhY3RlciIpOwogICAgICB9CiAgICAgIHN0YXRlMTIuYW5jaG9yID0gc3RhdGUxMi5pbnB1dC5zbGljZShfcG9zaXRpb24sIHN0YXRlMTIucG9zaXRpb24pOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWRBbGlhcyhzdGF0ZTEyKSB7CiAgICAgIHZhciBfcG9zaXRpb24sIGFsaWFzLCBjaDsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmIChjaCAhPT0gNDIpIHJldHVybiBmYWxzZTsKICAgICAgY2ggPSBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoKytzdGF0ZTEyLnBvc2l0aW9uKTsKICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgd2hpbGUgKGNoICE9PSAwICYmICFpc19XU19PUl9FT0woY2gpICYmICFpc19GTE9XX0lORElDQVRPUihjaCkpIHsKICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBfcG9zaXRpb24pIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibmFtZSBvZiBhbiBhbGlhcyBub2RlIG11c3QgY29udGFpbiBhdCBsZWFzdCBvbmUgY2hhcmFjdGVyIik7CiAgICAgIH0KICAgICAgYWxpYXMgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgIGlmICghX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUxMi5hbmNob3JNYXAsIGFsaWFzKSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICd1bmlkZW50aWZpZWQgYWxpYXMgIicgKyBhbGlhcyArICciJyk7CiAgICAgIH0KICAgICAgc3RhdGUxMi5yZXN1bHQgPSBzdGF0ZTEyLmFuY2hvck1hcFthbGlhc107CiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIGZ1bmN0aW9uIGNvbXBvc2VOb2RlKHN0YXRlMTIsIHBhcmVudEluZGVudCwgbm9kZUNvbnRleHQsIGFsbG93VG9TZWVrLCBhbGxvd0NvbXBhY3QpIHsKICAgICAgdmFyIGFsbG93QmxvY2tTdHlsZXMsIGFsbG93QmxvY2tTY2FsYXJzLCBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMsIGluZGVudFN0YXR1cyA9IDEsIGF0TmV3TGluZSA9IGZhbHNlLCBoYXNDb250ZW50ID0gZmFsc2UsIHR5cGVJbmRleCwgdHlwZVF1YW50aXR5LCB0eXBlNSwgZmxvd0luZGVudCwgYmxvY2tJbmRlbnQ7CiAgICAgIGlmIChzdGF0ZTEyLmxpc3RlbmVyICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5saXN0ZW5lcigib3BlbiIsIHN0YXRlMTIpOwogICAgICB9CiAgICAgIHN0YXRlMTIudGFnID0gbnVsbDsKICAgICAgc3RhdGUxMi5hbmNob3IgPSBudWxsOwogICAgICBzdGF0ZTEyLmtpbmQgPSBudWxsOwogICAgICBzdGF0ZTEyLnJlc3VsdCA9IG51bGw7CiAgICAgIGFsbG93QmxvY2tTdHlsZXMgPSBhbGxvd0Jsb2NrU2NhbGFycyA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IENPTlRFWFRfQkxPQ0tfT1VUID09PSBub2RlQ29udGV4dCB8fCBDT05URVhUX0JMT0NLX0lOID09PSBub2RlQ29udGV4dDsKICAgICAgaWYgKGFsbG93VG9TZWVrKSB7CiAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICBhdE5ld0xpbmUgPSB0cnVlOwogICAgICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA+IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPT09IHBhcmVudEluZGVudCkgewogICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAwOwogICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gLTE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEpIHsKICAgICAgICB3aGlsZSAocmVhZFRhZ1Byb3BlcnR5KHN0YXRlMTIpIHx8IHJlYWRBbmNob3JQcm9wZXJ0eShzdGF0ZTEyKSkgewogICAgICAgICAgaWYgKHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpKSB7CiAgICAgICAgICAgIGF0TmV3TGluZSA9IHRydWU7CiAgICAgICAgICAgIGFsbG93QmxvY2tDb2xsZWN0aW9ucyA9IGFsbG93QmxvY2tTdHlsZXM7CiAgICAgICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAxOwogICAgICAgICAgICB9IGVsc2UgaWYgKHN0YXRlMTIubGluZUluZGVudCA9PT0gcGFyZW50SW5kZW50KSB7CiAgICAgICAgICAgICAgaW5kZW50U3RhdHVzID0gMDsKICAgICAgICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPCBwYXJlbnRJbmRlbnQpIHsKICAgICAgICAgICAgICBpbmRlbnRTdGF0dXMgPSAtMTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWxsb3dCbG9ja0NvbGxlY3Rpb25zID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChhbGxvd0Jsb2NrQ29sbGVjdGlvbnMpIHsKICAgICAgICBhbGxvd0Jsb2NrQ29sbGVjdGlvbnMgPSBhdE5ld0xpbmUgfHwgYWxsb3dDb21wYWN0OwogICAgICB9CiAgICAgIGlmIChpbmRlbnRTdGF0dXMgPT09IDEgfHwgQ09OVEVYVF9CTE9DS19PVVQgPT09IG5vZGVDb250ZXh0KSB7CiAgICAgICAgaWYgKENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQgfHwgQ09OVEVYVF9GTE9XX09VVCA9PT0gbm9kZUNvbnRleHQpIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQ7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGZsb3dJbmRlbnQgPSBwYXJlbnRJbmRlbnQgKyAxOwogICAgICAgIH0KICAgICAgICBibG9ja0luZGVudCA9IHN0YXRlMTIucG9zaXRpb24gLSBzdGF0ZTEyLmxpbmVTdGFydDsKICAgICAgICBpZiAoaW5kZW50U3RhdHVzID09PSAxKSB7CiAgICAgICAgICBpZiAoYWxsb3dCbG9ja0NvbGxlY3Rpb25zICYmIChyZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBibG9ja0luZGVudCkgfHwgcmVhZEJsb2NrTWFwcGluZyhzdGF0ZTEyLCBibG9ja0luZGVudCwgZmxvd0luZGVudCkpIHx8IHJlYWRGbG93Q29sbGVjdGlvbihzdGF0ZTEyLCBmbG93SW5kZW50KSkgewogICAgICAgICAgICBoYXNDb250ZW50ID0gdHJ1ZTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGlmIChhbGxvd0Jsb2NrU2NhbGFycyAmJiByZWFkQmxvY2tTY2FsYXIoc3RhdGUxMiwgZmxvd0luZGVudCkgfHwgcmVhZFNpbmdsZVF1b3RlZFNjYWxhcihzdGF0ZTEyLCBmbG93SW5kZW50KSB8fCByZWFkRG91YmxlUXVvdGVkU2NhbGFyKHN0YXRlMTIsIGZsb3dJbmRlbnQpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZEFsaWFzKHN0YXRlMTIpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsIHx8IHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiYWxpYXMgbm9kZSBzaG91bGQgbm90IGhhdmUgYW55IHByb3BlcnRpZXMiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVhZFBsYWluU2NhbGFyKHN0YXRlMTIsIGZsb3dJbmRlbnQsIENPTlRFWFRfRkxPV19JTiA9PT0gbm9kZUNvbnRleHQpKSB7CiAgICAgICAgICAgICAgaGFzQ29udGVudCA9IHRydWU7CiAgICAgICAgICAgICAgaWYgKHN0YXRlMTIudGFnID09PSBudWxsKSB7CiAgICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9ICI/IjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKHN0YXRlMTIuYW5jaG9yICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5hbmNob3JNYXBbc3RhdGUxMi5hbmNob3JdID0gc3RhdGUxMi5yZXN1bHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKGluZGVudFN0YXR1cyA9PT0gMCkgewogICAgICAgICAgaGFzQ29udGVudCA9IGFsbG93QmxvY2tDb2xsZWN0aW9ucyAmJiByZWFkQmxvY2tTZXF1ZW5jZShzdGF0ZTEyLCBibG9ja0luZGVudCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLnRhZyAhPT0gbnVsbCAmJiBzdGF0ZTEyLnRhZyAhPT0gIiEiKSB7CiAgICAgICAgaWYgKHN0YXRlMTIudGFnID09PSAiPyIpIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLnJlc3VsdCAhPT0gbnVsbCAmJiBzdGF0ZTEyLmtpbmQgIT09ICJzY2FsYXIiKSB7CiAgICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICd1bmFjY2VwdGFibGUgbm9kZSBraW5kIGZvciAhPD8+IHRhZzsgaXQgc2hvdWxkIGJlICJzY2FsYXIiLCBub3QgIicgKyBzdGF0ZTEyLmtpbmQgKyAnIicpOwogICAgICAgICAgfQogICAgICAgICAgZm9yICh0eXBlSW5kZXggPSAwLCB0eXBlUXVhbnRpdHkgPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXMubGVuZ3RoOyB0eXBlSW5kZXggPCB0eXBlUXVhbnRpdHk7IHR5cGVJbmRleCArPSAxKSB7CiAgICAgICAgICAgIHR5cGU1ID0gc3RhdGUxMi5pbXBsaWNpdFR5cGVzW3R5cGVJbmRleF07CiAgICAgICAgICAgIGlmICh0eXBlNS5yZXNvbHZlKHN0YXRlMTIucmVzdWx0KSkgewogICAgICAgICAgICAgIHN0YXRlMTIucmVzdWx0ID0gdHlwZTUuY29uc3RydWN0KHN0YXRlMTIucmVzdWx0KTsKICAgICAgICAgICAgICBzdGF0ZTEyLnRhZyA9IHR5cGU1LnRhZzsKICAgICAgICAgICAgICBpZiAoc3RhdGUxMi5hbmNob3IgIT09IG51bGwpIHsKICAgICAgICAgICAgICAgIHN0YXRlMTIuYW5jaG9yTWFwW3N0YXRlMTIuYW5jaG9yXSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoc3RhdGUxMi50eXBlTWFwW3N0YXRlMTIua2luZCB8fCAiZmFsbGJhY2siXSwgc3RhdGUxMi50YWcpKSB7CiAgICAgICAgICB0eXBlNSA9IHN0YXRlMTIudHlwZU1hcFtzdGF0ZTEyLmtpbmQgfHwgImZhbGxiYWNrIl1bc3RhdGUxMi50YWddOwogICAgICAgICAgaWYgKHN0YXRlMTIucmVzdWx0ICE9PSBudWxsICYmIHR5cGU1LmtpbmQgIT09IHN0YXRlMTIua2luZCkgewogICAgICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAidW5hY2NlcHRhYmxlIG5vZGUga2luZCBmb3IgITwiICsgc3RhdGUxMi50YWcgKyAnPiB0YWc7IGl0IHNob3VsZCBiZSAiJyArIHR5cGU1LmtpbmQgKyAnIiwgbm90ICInICsgc3RhdGUxMi5raW5kICsgJyInKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdHlwZTUucmVzb2x2ZShzdGF0ZTEyLnJlc3VsdCkpIHsKICAgICAgICAgICAgdGhyb3dFcnJvcjIoc3RhdGUxMiwgImNhbm5vdCByZXNvbHZlIGEgbm9kZSB3aXRoICE8IiArIHN0YXRlMTIudGFnICsgIj4gZXhwbGljaXQgdGFnIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBzdGF0ZTEyLnJlc3VsdCA9IHR5cGU1LmNvbnN0cnVjdChzdGF0ZTEyLnJlc3VsdCk7CiAgICAgICAgICAgIGlmIChzdGF0ZTEyLmFuY2hvciAhPT0gbnVsbCkgewogICAgICAgICAgICAgIHN0YXRlMTIuYW5jaG9yTWFwW3N0YXRlMTIuYW5jaG9yXSA9IHN0YXRlMTIucmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJ1bmtub3duIHRhZyAhPCIgKyBzdGF0ZTEyLnRhZyArICI+Iik7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzdGF0ZTEyLmxpc3RlbmVyICE9PSBudWxsKSB7CiAgICAgICAgc3RhdGUxMi5saXN0ZW5lcigiY2xvc2UiLCBzdGF0ZTEyKTsKICAgICAgfQogICAgICByZXR1cm4gc3RhdGUxMi50YWcgIT09IG51bGwgfHwgc3RhdGUxMi5hbmNob3IgIT09IG51bGwgfHwgaGFzQ29udGVudDsKICAgIH0KICAgIGZ1bmN0aW9uIHJlYWREb2N1bWVudChzdGF0ZTEyKSB7CiAgICAgIHZhciBkb2N1bWVudFN0YXJ0ID0gc3RhdGUxMi5wb3NpdGlvbiwgX3Bvc2l0aW9uLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzLCBoYXNEaXJlY3RpdmVzID0gZmFsc2UsIGNoOwogICAgICBzdGF0ZTEyLnZlcnNpb24gPSBudWxsOwogICAgICBzdGF0ZTEyLmNoZWNrTGluZUJyZWFrcyA9IHN0YXRlMTIubGVnYWN5OwogICAgICBzdGF0ZTEyLnRhZ01hcCA9IHt9OwogICAgICBzdGF0ZTEyLmFuY2hvck1hcCA9IHt9OwogICAgICB3aGlsZSAoKGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pKSAhPT0gMCkgewogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pOwogICAgICAgIGlmIChzdGF0ZTEyLmxpbmVJbmRlbnQgPiAwIHx8IGNoICE9PSAzNykgewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGhhc0RpcmVjdGl2ZXMgPSB0cnVlOwogICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICB3aGlsZSAoY2ggIT09IDAgJiYgIWlzX1dTX09SX0VPTChjaCkpIHsKICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgfQogICAgICAgIGRpcmVjdGl2ZU5hbWUgPSBzdGF0ZTEyLmlucHV0LnNsaWNlKF9wb3NpdGlvbiwgc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgZGlyZWN0aXZlQXJncyA9IFtdOwogICAgICAgIGlmIChkaXJlY3RpdmVOYW1lLmxlbmd0aCA8IDEpIHsKICAgICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJkaXJlY3RpdmUgbmFtZSBtdXN0IG5vdCBiZSBsZXNzIHRoYW4gb25lIGNoYXJhY3RlciBpbiBsZW5ndGgiKTsKICAgICAgICB9CiAgICAgICAgd2hpbGUgKGNoICE9PSAwKSB7CiAgICAgICAgICB3aGlsZSAoaXNfV0hJVEVfU1BBQ0UoY2gpKSB7CiAgICAgICAgICAgIGNoID0gc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KCsrc3RhdGUxMi5wb3NpdGlvbik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoY2ggPT09IDM1KSB7CiAgICAgICAgICAgIGRvIHsKICAgICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgICB9IHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfRU9MKGNoKSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzX0VPTChjaCkpIGJyZWFrOwogICAgICAgICAgX3Bvc2l0aW9uID0gc3RhdGUxMi5wb3NpdGlvbjsKICAgICAgICAgIHdoaWxlIChjaCAhPT0gMCAmJiAhaXNfV1NfT1JfRU9MKGNoKSkgewogICAgICAgICAgICBjaCA9IHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdCgrK3N0YXRlMTIucG9zaXRpb24pOwogICAgICAgICAgfQogICAgICAgICAgZGlyZWN0aXZlQXJncy5wdXNoKHN0YXRlMTIuaW5wdXQuc2xpY2UoX3Bvc2l0aW9uLCBzdGF0ZTEyLnBvc2l0aW9uKSk7CiAgICAgICAgfQogICAgICAgIGlmIChjaCAhPT0gMCkgcmVhZExpbmVCcmVhayhzdGF0ZTEyKTsKICAgICAgICBpZiAoX2hhc093blByb3BlcnR5LmNhbGwoZGlyZWN0aXZlSGFuZGxlcnMsIGRpcmVjdGl2ZU5hbWUpKSB7CiAgICAgICAgICBkaXJlY3RpdmVIYW5kbGVyc1tkaXJlY3RpdmVOYW1lXShzdGF0ZTEyLCBkaXJlY3RpdmVOYW1lLCBkaXJlY3RpdmVBcmdzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3dXYXJuaW5nKHN0YXRlMTIsICd1bmtub3duIGRvY3VtZW50IGRpcmVjdGl2ZSAiJyArIGRpcmVjdGl2ZU5hbWUgKyAnIicpOwogICAgICAgIH0KICAgICAgfQogICAgICBza2lwU2VwYXJhdGlvblNwYWNlKHN0YXRlMTIsIHRydWUsIC0xKTsKICAgICAgaWYgKHN0YXRlMTIubGluZUluZGVudCA9PT0gMCAmJiBzdGF0ZTEyLmlucHV0LmNoYXJDb2RlQXQoc3RhdGUxMi5wb3NpdGlvbikgPT09IDQ1ICYmIHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMSkgPT09IDQ1ICYmIHN0YXRlMTIuaW5wdXQuY2hhckNvZGVBdChzdGF0ZTEyLnBvc2l0aW9uICsgMikgPT09IDQ1KSB7CiAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiArPSAzOwogICAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICB9IGVsc2UgaWYgKGhhc0RpcmVjdGl2ZXMpIHsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAiZGlyZWN0aXZlcyBlbmQgbWFyayBpcyBleHBlY3RlZCIpOwogICAgICB9CiAgICAgIGNvbXBvc2VOb2RlKHN0YXRlMTIsIHN0YXRlMTIubGluZUluZGVudCAtIDEsIENPTlRFWFRfQkxPQ0tfT1VULCBmYWxzZSwgdHJ1ZSk7CiAgICAgIHNraXBTZXBhcmF0aW9uU3BhY2Uoc3RhdGUxMiwgdHJ1ZSwgLTEpOwogICAgICBpZiAoc3RhdGUxMi5jaGVja0xpbmVCcmVha3MgJiYgUEFUVEVSTl9OT05fQVNDSUlfTElORV9CUkVBS1MudGVzdChzdGF0ZTEyLmlucHV0LnNsaWNlKGRvY3VtZW50U3RhcnQsIHN0YXRlMTIucG9zaXRpb24pKSkgewogICAgICAgIHRocm93V2FybmluZyhzdGF0ZTEyLCAibm9uLUFTQ0lJIGxpbmUgYnJlYWtzIGFyZSBpbnRlcnByZXRlZCBhcyBjb250ZW50Iik7CiAgICAgIH0KICAgICAgc3RhdGUxMi5kb2N1bWVudHMucHVzaChzdGF0ZTEyLnJlc3VsdCk7CiAgICAgIGlmIChzdGF0ZTEyLnBvc2l0aW9uID09PSBzdGF0ZTEyLmxpbmVTdGFydCAmJiB0ZXN0RG9jdW1lbnRTZXBhcmF0b3Ioc3RhdGUxMikpIHsKICAgICAgICBpZiAoc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pID09PSA0NikgewogICAgICAgICAgc3RhdGUxMi5wb3NpdGlvbiArPSAzOwogICAgICAgICAgc2tpcFNlcGFyYXRpb25TcGFjZShzdGF0ZTEyLCB0cnVlLCAtMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoc3RhdGUxMi5wb3NpdGlvbiA8IHN0YXRlMTIubGVuZ3RoIC0gMSkgewogICAgICAgIHRocm93RXJyb3IyKHN0YXRlMTIsICJlbmQgb2YgdGhlIHN0cmVhbSBvciBhIGRvY3VtZW50IHNlcGFyYXRvciBpcyBleHBlY3RlZCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gbG9hZERvY3VtZW50cyhpbnB1dCwgb3B0aW9ucykgewogICAgICBpbnB1dCA9IFN0cmluZyhpbnB1dCk7CiAgICAgIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9OwogICAgICBpZiAoaW5wdXQubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgaWYgKGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEwICYmIGlucHV0LmNoYXJDb2RlQXQoaW5wdXQubGVuZ3RoIC0gMSkgIT09IDEzKSB7CiAgICAgICAgICBpbnB1dCArPSAiXG4iOwogICAgICAgIH0KICAgICAgICBpZiAoaW5wdXQuY2hhckNvZGVBdCgwKSA9PT0gNjUyNzkpIHsKICAgICAgICAgIGlucHV0ID0gaW5wdXQuc2xpY2UoMSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHZhciBzdGF0ZTEyID0gbmV3IFN0YXRlKGlucHV0LCBvcHRpb25zKTsKICAgICAgdmFyIG51bGxwb3MgPSBpbnB1dC5pbmRleE9mKCJcMCIpOwogICAgICBpZiAobnVsbHBvcyAhPT0gLTEpIHsKICAgICAgICBzdGF0ZTEyLnBvc2l0aW9uID0gbnVsbHBvczsKICAgICAgICB0aHJvd0Vycm9yMihzdGF0ZTEyLCAibnVsbCBieXRlIGlzIG5vdCBhbGxvd2VkIGluIGlucHV0Iik7CiAgICAgIH0KICAgICAgc3RhdGUxMi5pbnB1dCArPSAiXDAiOwogICAgICB3aGlsZSAoc3RhdGUxMi5pbnB1dC5jaGFyQ29kZUF0KHN0YXRlMTIucG9zaXRpb24pID09PSAzMikgewogICAgICAgIHN0YXRlMTIubGluZUluZGVudCArPSAxOwogICAgICAgIHN0YXRlMTIucG9zaXRpb24gKz0gMTsKICAgICAgfQogICAgICB3aGlsZSAoc3RhdGUxMi5wb3NpdGlvbiA8IHN0YXRlMTIubGVuZ3RoIC0gMSkgewogICAgICAgIHJlYWREb2N1bWVudChzdGF0ZTEyKTsKICAgICAgfQogICAgICByZXR1cm4gc3RhdGUxMi5kb2N1bWVudHM7CiAgICB9CiAgICBmdW5jdGlvbiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvcjIsIG9wdGlvbnMpIHsKICAgICAgaWYgKGl0ZXJhdG9yMiAhPT0gbnVsbCAmJiB0eXBlb2YgaXRlcmF0b3IyID09PSAib2JqZWN0IiAmJiB0eXBlb2Ygb3B0aW9ucyA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBvcHRpb25zID0gaXRlcmF0b3IyOwogICAgICAgIGl0ZXJhdG9yMiA9IG51bGw7CiAgICAgIH0KICAgICAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpOwogICAgICBpZiAodHlwZW9mIGl0ZXJhdG9yMiAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBkb2N1bWVudHM7CiAgICAgIH0KICAgICAgZm9yICh2YXIgaW5kZXgyID0gMCwgbGVuZ3RoID0gZG9jdW1lbnRzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIGl0ZXJhdG9yMihkb2N1bWVudHNbaW5kZXgyXSk7CiAgICAgIH0KICAgIH0KICAgIGZ1bmN0aW9uIGxvYWQoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgdmFyIGRvY3VtZW50cyA9IGxvYWREb2N1bWVudHMoaW5wdXQsIG9wdGlvbnMpOwogICAgICBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiB2b2lkIDA7CiAgICAgIH0gZWxzZSBpZiAoZG9jdW1lbnRzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBkb2N1bWVudHNbMF07CiAgICAgIH0KICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImV4cGVjdGVkIGEgc2luZ2xlIGRvY3VtZW50IGluIHRoZSBzdHJlYW0sIGJ1dCBmb3VuZCBtb3JlIik7CiAgICB9CiAgICBmdW5jdGlvbiBzYWZlTG9hZEFsbChpbnB1dCwgaXRlcmF0b3IyLCBvcHRpb25zKSB7CiAgICAgIGlmICh0eXBlb2YgaXRlcmF0b3IyID09PSAib2JqZWN0IiAmJiBpdGVyYXRvcjIgIT09IG51bGwgJiYgdHlwZW9mIG9wdGlvbnMgPT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgb3B0aW9ucyA9IGl0ZXJhdG9yMjsKICAgICAgICBpdGVyYXRvcjIgPSBudWxsOwogICAgICB9CiAgICAgIHJldHVybiBsb2FkQWxsKGlucHV0LCBpdGVyYXRvcjIsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpOwogICAgfQogICAgZnVuY3Rpb24gc2FmZUxvYWQoaW5wdXQsIG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIGxvYWQoaW5wdXQsIGNvbW1vbi5leHRlbmQoeyBzY2hlbWE6IERFRkFVTFRfU0FGRV9TQ0hFTUEgfSwgb3B0aW9ucykpOwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMubG9hZEFsbCA9IGxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5sb2FkID0gbG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkQWxsID0gc2FmZUxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlTG9hZCA9IHNhZmVMb2FkOwogICAgdmFyIGkxMTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2R1bXBlci5qcwp2YXIgcmVxdWlyZV9kdW1wZXIgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sL2R1bXBlci5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgY29tbW9uID0gcmVxdWlyZV9jb21tb24oKTsKICAgIHZhciBZQU1MRXhjZXB0aW9uID0gcmVxdWlyZV9leGNlcHRpb24oKTsKICAgIHZhciBERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIHZhciBERUZBVUxUX1NBRkVfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X3NhZmUoKTsKICAgIHZhciBfdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nOwogICAgdmFyIF9oYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7CiAgICB2YXIgQ0hBUl9UQUIgPSA5OwogICAgdmFyIENIQVJfTElORV9GRUVEID0gMTA7CiAgICB2YXIgQ0hBUl9DQVJSSUFHRV9SRVRVUk4gPSAxMzsKICAgIHZhciBDSEFSX1NQQUNFID0gMzI7CiAgICB2YXIgQ0hBUl9FWENMQU1BVElPTiA9IDMzOwogICAgdmFyIENIQVJfRE9VQkxFX1FVT1RFID0gMzQ7CiAgICB2YXIgQ0hBUl9TSEFSUCA9IDM1OwogICAgdmFyIENIQVJfUEVSQ0VOVCA9IDM3OwogICAgdmFyIENIQVJfQU1QRVJTQU5EID0gMzg7CiAgICB2YXIgQ0hBUl9TSU5HTEVfUVVPVEUgPSAzOTsKICAgIHZhciBDSEFSX0FTVEVSSVNLID0gNDI7CiAgICB2YXIgQ0hBUl9DT01NQSA9IDQ0OwogICAgdmFyIENIQVJfTUlOVVMgPSA0NTsKICAgIHZhciBDSEFSX0NPTE9OID0gNTg7CiAgICB2YXIgQ0hBUl9FUVVBTFMgPSA2MTsKICAgIHZhciBDSEFSX0dSRUFURVJfVEhBTiA9IDYyOwogICAgdmFyIENIQVJfUVVFU1RJT04gPSA2MzsKICAgIHZhciBDSEFSX0NPTU1FUkNJQUxfQVQgPSA2NDsKICAgIHZhciBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgPSA5MTsKICAgIHZhciBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUID0gOTM7CiAgICB2YXIgQ0hBUl9HUkFWRV9BQ0NFTlQgPSA5NjsKICAgIHZhciBDSEFSX0xFRlRfQ1VSTFlfQlJBQ0tFVCA9IDEyMzsKICAgIHZhciBDSEFSX1ZFUlRJQ0FMX0xJTkUgPSAxMjQ7CiAgICB2YXIgQ0hBUl9SSUdIVF9DVVJMWV9CUkFDS0VUID0gMTI1OwogICAgdmFyIEVTQ0FQRV9TRVFVRU5DRVMgPSB7fTsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMF0gPSAiXFwwIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbN10gPSAiXFxhIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOF0gPSAiXFxiIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOV0gPSAiXFx0IjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTBdID0gIlxcbiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzExXSA9ICJcXHYiOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMl0gPSAiXFxmIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbMTNdID0gIlxcciI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzI3XSA9ICJcXGUiOwogICAgRVNDQVBFX1NFUVVFTkNFU1szNF0gPSAnXFwiJzsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbOTJdID0gIlxcXFwiOwogICAgRVNDQVBFX1NFUVVFTkNFU1sxMzNdID0gIlxcTiI7CiAgICBFU0NBUEVfU0VRVUVOQ0VTWzE2MF0gPSAiXFxfIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbODIzMl0gPSAiXFxMIjsKICAgIEVTQ0FQRV9TRVFVRU5DRVNbODIzM10gPSAiXFxQIjsKICAgIHZhciBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWCA9IFsKICAgICAgInkiLAogICAgICAiWSIsCiAgICAgICJ5ZXMiLAogICAgICAiWWVzIiwKICAgICAgIllFUyIsCiAgICAgICJvbiIsCiAgICAgICJPbiIsCiAgICAgICJPTiIsCiAgICAgICJuIiwKICAgICAgIk4iLAogICAgICAibm8iLAogICAgICAiTm8iLAogICAgICAiTk8iLAogICAgICAib2ZmIiwKICAgICAgIk9mZiIsCiAgICAgICJPRkYiCiAgICBdOwogICAgZnVuY3Rpb24gY29tcGlsZVN0eWxlTWFwKHNjaGVtYSwgbWFwNykgewogICAgICB2YXIgcmVzdWx0LCBrZXlzMiwgaW5kZXgyLCBsZW5ndGgsIHRhZywgc3R5bGUsIHR5cGU1OwogICAgICBpZiAobWFwNyA9PT0gbnVsbCkgcmV0dXJuIHt9OwogICAgICByZXN1bHQgPSB7fTsKICAgICAga2V5czIgPSBPYmplY3Qua2V5cyhtYXA3KTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBrZXlzMi5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICB0YWcgPSBrZXlzMltpbmRleDJdOwogICAgICAgIHN0eWxlID0gU3RyaW5nKG1hcDdbdGFnXSk7CiAgICAgICAgaWYgKHRhZy5zbGljZSgwLCAyKSA9PT0gIiEhIikgewogICAgICAgICAgdGFnID0gInRhZzp5YW1sLm9yZywyMDAyOiIgKyB0YWcuc2xpY2UoMik7CiAgICAgICAgfQogICAgICAgIHR5cGU1ID0gc2NoZW1hLmNvbXBpbGVkVHlwZU1hcFsiZmFsbGJhY2siXVt0YWddOwogICAgICAgIGlmICh0eXBlNSAmJiBfaGFzT3duUHJvcGVydHkuY2FsbCh0eXBlNS5zdHlsZUFsaWFzZXMsIHN0eWxlKSkgewogICAgICAgICAgc3R5bGUgPSB0eXBlNS5zdHlsZUFsaWFzZXNbc3R5bGVdOwogICAgICAgIH0KICAgICAgICByZXN1bHRbdGFnXSA9IHN0eWxlOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBlbmNvZGVIZXgoY2hhcmFjdGVyKSB7CiAgICAgIHZhciBzdHJpbmczLCBoYW5kbGUzLCBsZW5ndGg7CiAgICAgIHN0cmluZzMgPSBjaGFyYWN0ZXIudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgICAgIGlmIChjaGFyYWN0ZXIgPD0gMjU1KSB7CiAgICAgICAgaGFuZGxlMyA9ICJ4IjsKICAgICAgICBsZW5ndGggPSAyOwogICAgICB9IGVsc2UgaWYgKGNoYXJhY3RlciA8PSA2NTUzNSkgewogICAgICAgIGhhbmRsZTMgPSAidSI7CiAgICAgICAgbGVuZ3RoID0gNDsKICAgICAgfSBlbHNlIGlmIChjaGFyYWN0ZXIgPD0gNDI5NDk2NzI5NSkgewogICAgICAgIGhhbmRsZTMgPSAiVSI7CiAgICAgICAgbGVuZ3RoID0gODsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigiY29kZSBwb2ludCB3aXRoaW4gYSBzdHJpbmcgbWF5IG5vdCBiZSBncmVhdGVyIHRoYW4gMHhGRkZGRkZGRiIpOwogICAgICB9CiAgICAgIHJldHVybiAiXFwiICsgaGFuZGxlMyArIGNvbW1vbi5yZXBlYXQoIjAiLCBsZW5ndGggLSBzdHJpbmczLmxlbmd0aCkgKyBzdHJpbmczOwogICAgfQogICAgZnVuY3Rpb24gU3RhdGUob3B0aW9ucykgewogICAgICB0aGlzLnNjaGVtYSA9IG9wdGlvbnNbInNjaGVtYSJdIHx8IERFRkFVTFRfRlVMTF9TQ0hFTUE7CiAgICAgIHRoaXMuaW5kZW50ID0gTWF0aC5tYXgoMSwgb3B0aW9uc1siaW5kZW50Il0gfHwgMik7CiAgICAgIHRoaXMubm9BcnJheUluZGVudCA9IG9wdGlvbnNbIm5vQXJyYXlJbmRlbnQiXSB8fCBmYWxzZTsKICAgICAgdGhpcy5za2lwSW52YWxpZCA9IG9wdGlvbnNbInNraXBJbnZhbGlkIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMuZmxvd0xldmVsID0gY29tbW9uLmlzTm90aGluZyhvcHRpb25zWyJmbG93TGV2ZWwiXSkgPyAtMSA6IG9wdGlvbnNbImZsb3dMZXZlbCJdOwogICAgICB0aGlzLnN0eWxlTWFwID0gY29tcGlsZVN0eWxlTWFwKHRoaXMuc2NoZW1hLCBvcHRpb25zWyJzdHlsZXMiXSB8fCBudWxsKTsKICAgICAgdGhpcy5zb3J0S2V5cyA9IG9wdGlvbnNbInNvcnRLZXlzIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubGluZVdpZHRoID0gb3B0aW9uc1sibGluZVdpZHRoIl0gfHwgODA7CiAgICAgIHRoaXMubm9SZWZzID0gb3B0aW9uc1sibm9SZWZzIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMubm9Db21wYXRNb2RlID0gb3B0aW9uc1sibm9Db21wYXRNb2RlIl0gfHwgZmFsc2U7CiAgICAgIHRoaXMuY29uZGVuc2VGbG93ID0gb3B0aW9uc1siY29uZGVuc2VGbG93Il0gfHwgZmFsc2U7CiAgICAgIHRoaXMuaW1wbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkSW1wbGljaXQ7CiAgICAgIHRoaXMuZXhwbGljaXRUeXBlcyA9IHRoaXMuc2NoZW1hLmNvbXBpbGVkRXhwbGljaXQ7CiAgICAgIHRoaXMudGFnID0gbnVsbDsKICAgICAgdGhpcy5yZXN1bHQgPSAiIjsKICAgICAgdGhpcy5kdXBsaWNhdGVzID0gW107CiAgICAgIHRoaXMudXNlZER1cGxpY2F0ZXMgPSBudWxsOwogICAgfQogICAgZnVuY3Rpb24gaW5kZW50U3RyaW5nKHN0cmluZzMsIHNwYWNlcykgewogICAgICB2YXIgaW5kID0gY29tbW9uLnJlcGVhdCgiICIsIHNwYWNlcyksIHBvc2l0aW9uMyA9IDAsIG5leHQyID0gLTEsIHJlc3VsdCA9ICIiLCBsaW5lLCBsZW5ndGggPSBzdHJpbmczLmxlbmd0aDsKICAgICAgd2hpbGUgKHBvc2l0aW9uMyA8IGxlbmd0aCkgewogICAgICAgIG5leHQyID0gc3RyaW5nMy5pbmRleE9mKCJcbiIsIHBvc2l0aW9uMyk7CiAgICAgICAgaWYgKG5leHQyID09PSAtMSkgewogICAgICAgICAgbGluZSA9IHN0cmluZzMuc2xpY2UocG9zaXRpb24zKTsKICAgICAgICAgIHBvc2l0aW9uMyA9IGxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGluZSA9IHN0cmluZzMuc2xpY2UocG9zaXRpb24zLCBuZXh0MiArIDEpOwogICAgICAgICAgcG9zaXRpb24zID0gbmV4dDIgKyAxOwogICAgICAgIH0KICAgICAgICBpZiAobGluZS5sZW5ndGggJiYgbGluZSAhPT0gIlxuIikgcmVzdWx0ICs9IGluZDsKICAgICAgICByZXN1bHQgKz0gbGluZTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgZnVuY3Rpb24gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCkgewogICAgICByZXR1cm4gIlxuIiArIGNvbW1vbi5yZXBlYXQoIiAiLCBzdGF0ZTEyLmluZGVudCAqIGxldmVsKTsKICAgIH0KICAgIGZ1bmN0aW9uIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZTEyLCBzdHIpIHsKICAgICAgdmFyIGluZGV4MiwgbGVuZ3RoLCB0eXBlNTsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXMubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdHlwZTUgPSBzdGF0ZTEyLmltcGxpY2l0VHlwZXNbaW5kZXgyXTsKICAgICAgICBpZiAodHlwZTUucmVzb2x2ZShzdHIpKSB7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogICAgZnVuY3Rpb24gaXNXaGl0ZXNwYWNlKGMxMSkgewogICAgICByZXR1cm4gYzExID09PSBDSEFSX1NQQUNFIHx8IGMxMSA9PT0gQ0hBUl9UQUI7CiAgICB9CiAgICBmdW5jdGlvbiBpc1ByaW50YWJsZShjMTEpIHsKICAgICAgcmV0dXJuIDMyIDw9IGMxMSAmJiBjMTEgPD0gMTI2IHx8IDE2MSA8PSBjMTEgJiYgYzExIDw9IDU1Mjk1ICYmIGMxMSAhPT0gODIzMiAmJiBjMTEgIT09IDgyMzMgfHwgNTczNDQgPD0gYzExICYmIGMxMSA8PSA2NTUzMyAmJiBjMTEgIT09IDY1Mjc5IHx8IDY1NTM2IDw9IGMxMSAmJiBjMTEgPD0gMTExNDExMTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTnNDaGFyKGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiAhaXNXaGl0ZXNwYWNlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ0FSUklBR0VfUkVUVVJOICYmIGMxMSAhPT0gQ0hBUl9MSU5FX0ZFRUQ7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZShjMTEsIHByZXYpIHsKICAgICAgcmV0dXJuIGlzUHJpbnRhYmxlKGMxMSkgJiYgYzExICE9PSA2NTI3OSAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX0NPTE9OICYmIChjMTEgIT09IENIQVJfU0hBUlAgfHwgcHJldiAmJiBpc05zQ2hhcihwcmV2KSk7CiAgICB9CiAgICBmdW5jdGlvbiBpc1BsYWluU2FmZUZpcnN0KGMxMSkgewogICAgICByZXR1cm4gaXNQcmludGFibGUoYzExKSAmJiBjMTEgIT09IDY1Mjc5ICYmICFpc1doaXRlc3BhY2UoYzExKSAmJiBjMTEgIT09IENIQVJfTUlOVVMgJiYgYzExICE9PSBDSEFSX1FVRVNUSU9OICYmIGMxMSAhPT0gQ0hBUl9DT0xPTiAmJiBjMTEgIT09IENIQVJfQ09NTUEgJiYgYzExICE9PSBDSEFSX0xFRlRfU1FVQVJFX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX1NRVUFSRV9CUkFDS0VUICYmIGMxMSAhPT0gQ0hBUl9MRUZUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1JJR0hUX0NVUkxZX0JSQUNLRVQgJiYgYzExICE9PSBDSEFSX1NIQVJQICYmIGMxMSAhPT0gQ0hBUl9BTVBFUlNBTkQgJiYgYzExICE9PSBDSEFSX0FTVEVSSVNLICYmIGMxMSAhPT0gQ0hBUl9FWENMQU1BVElPTiAmJiBjMTEgIT09IENIQVJfVkVSVElDQUxfTElORSAmJiBjMTEgIT09IENIQVJfRVFVQUxTICYmIGMxMSAhPT0gQ0hBUl9HUkVBVEVSX1RIQU4gJiYgYzExICE9PSBDSEFSX1NJTkdMRV9RVU9URSAmJiBjMTEgIT09IENIQVJfRE9VQkxFX1FVT1RFICYmIGMxMSAhPT0gQ0hBUl9QRVJDRU5UICYmIGMxMSAhPT0gQ0hBUl9DT01NRVJDSUFMX0FUICYmIGMxMSAhPT0gQ0hBUl9HUkFWRV9BQ0NFTlQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpIHsKICAgICAgdmFyIGxlYWRpbmdTcGFjZVJlID0gL15cbiogLzsKICAgICAgcmV0dXJuIGxlYWRpbmdTcGFjZVJlLnRlc3Qoc3RyaW5nMyk7CiAgICB9CiAgICB2YXIgU1RZTEVfUExBSU4gPSAxLCBTVFlMRV9TSU5HTEUgPSAyLCBTVFlMRV9MSVRFUkFMID0gMywgU1RZTEVfRk9MREVEID0gNCwgU1RZTEVfRE9VQkxFID0gNTsKICAgIGZ1bmN0aW9uIGNob29zZVNjYWxhclN0eWxlKHN0cmluZzMsIHNpbmdsZUxpbmVPbmx5LCBpbmRlbnRQZXJMZXZlbCwgbGluZVdpZHRoLCB0ZXN0QW1iaWd1b3VzVHlwZSkgewogICAgICB2YXIgaTExOwogICAgICB2YXIgY2hhciwgcHJldl9jaGFyOwogICAgICB2YXIgaGFzTGluZUJyZWFrID0gZmFsc2U7CiAgICAgIHZhciBoYXNGb2xkYWJsZUxpbmUgPSBmYWxzZTsKICAgICAgdmFyIHNob3VsZFRyYWNrV2lkdGggPSBsaW5lV2lkdGggIT09IC0xOwogICAgICB2YXIgcHJldmlvdXNMaW5lQnJlYWsgPSAtMTsKICAgICAgdmFyIHBsYWluID0gaXNQbGFpblNhZmVGaXJzdChzdHJpbmczLmNoYXJDb2RlQXQoMCkpICYmICFpc1doaXRlc3BhY2Uoc3RyaW5nMy5jaGFyQ29kZUF0KHN0cmluZzMubGVuZ3RoIC0gMSkpOwogICAgICBpZiAoc2luZ2xlTGluZU9ubHkpIHsKICAgICAgICBmb3IgKGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEpOwogICAgICAgICAgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGZvciAoaTExID0gMDsgaTExIDwgc3RyaW5nMy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBjaGFyID0gc3RyaW5nMy5jaGFyQ29kZUF0KGkxMSk7CiAgICAgICAgICBpZiAoY2hhciA9PT0gQ0hBUl9MSU5FX0ZFRUQpIHsKICAgICAgICAgICAgaGFzTGluZUJyZWFrID0gdHJ1ZTsKICAgICAgICAgICAgaWYgKHNob3VsZFRyYWNrV2lkdGgpIHsKICAgICAgICAgICAgICBoYXNGb2xkYWJsZUxpbmUgPSBoYXNGb2xkYWJsZUxpbmUgfHwgLy8gRm9sZGFibGUgbGluZSA9IHRvbyBsb25nLCBhbmQgbm90IG1vcmUtaW5kZW50ZWQuCiAgICAgICAgICAgICAgaTExIC0gcHJldmlvdXNMaW5lQnJlYWsgLSAxID4gbGluZVdpZHRoICYmIHN0cmluZzNbcHJldmlvdXNMaW5lQnJlYWsgKyAxXSAhPT0gIiAiOwogICAgICAgICAgICAgIHByZXZpb3VzTGluZUJyZWFrID0gaTExOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKCFpc1ByaW50YWJsZShjaGFyKSkgewogICAgICAgICAgICByZXR1cm4gU1RZTEVfRE9VQkxFOwogICAgICAgICAgfQogICAgICAgICAgcHJldl9jaGFyID0gaTExID4gMCA/IHN0cmluZzMuY2hhckNvZGVBdChpMTEgLSAxKSA6IG51bGw7CiAgICAgICAgICBwbGFpbiA9IHBsYWluICYmIGlzUGxhaW5TYWZlKGNoYXIsIHByZXZfY2hhcik7CiAgICAgICAgfQogICAgICAgIGhhc0ZvbGRhYmxlTGluZSA9IGhhc0ZvbGRhYmxlTGluZSB8fCBzaG91bGRUcmFja1dpZHRoICYmIChpMTEgLSBwcmV2aW91c0xpbmVCcmVhayAtIDEgPiBsaW5lV2lkdGggJiYgc3RyaW5nM1twcmV2aW91c0xpbmVCcmVhayArIDFdICE9PSAiICIpOwogICAgICB9CiAgICAgIGlmICghaGFzTGluZUJyZWFrICYmICFoYXNGb2xkYWJsZUxpbmUpIHsKICAgICAgICByZXR1cm4gcGxhaW4gJiYgIXRlc3RBbWJpZ3VvdXNUeXBlKHN0cmluZzMpID8gU1RZTEVfUExBSU4gOiBTVFlMRV9TSU5HTEU7CiAgICAgIH0KICAgICAgaWYgKGluZGVudFBlckxldmVsID4gOSAmJiBuZWVkSW5kZW50SW5kaWNhdG9yKHN0cmluZzMpKSB7CiAgICAgICAgcmV0dXJuIFNUWUxFX0RPVUJMRTsKICAgICAgfQogICAgICByZXR1cm4gaGFzRm9sZGFibGVMaW5lID8gU1RZTEVfRk9MREVEIDogU1RZTEVfTElURVJBTDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlU2NhbGFyKHN0YXRlMTIsIHN0cmluZzMsIGxldmVsLCBpc2tleSkgewogICAgICBzdGF0ZTEyLmR1bXAgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHN0cmluZzMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm4gIicnIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFzdGF0ZTEyLm5vQ29tcGF0TW9kZSAmJiBERVBSRUNBVEVEX0JPT0xFQU5TX1NZTlRBWC5pbmRleE9mKHN0cmluZzMpICE9PSAtMSkgewogICAgICAgICAgcmV0dXJuICInIiArIHN0cmluZzMgKyAiJyI7CiAgICAgICAgfQogICAgICAgIHZhciBpbmRlbnQzID0gc3RhdGUxMi5pbmRlbnQgKiBNYXRoLm1heCgxLCBsZXZlbCk7CiAgICAgICAgdmFyIGxpbmVXaWR0aCA9IHN0YXRlMTIubGluZVdpZHRoID09PSAtMSA/IC0xIDogTWF0aC5tYXgoTWF0aC5taW4oc3RhdGUxMi5saW5lV2lkdGgsIDQwKSwgc3RhdGUxMi5saW5lV2lkdGggLSBpbmRlbnQzKTsKICAgICAgICB2YXIgc2luZ2xlTGluZU9ubHkgPSBpc2tleSB8fCBzdGF0ZTEyLmZsb3dMZXZlbCA+IC0xICYmIGxldmVsID49IHN0YXRlMTIuZmxvd0xldmVsOwogICAgICAgIGZ1bmN0aW9uIHRlc3RBbWJpZ3VpdHkoc3RyaW5nNCkgewogICAgICAgICAgcmV0dXJuIHRlc3RJbXBsaWNpdFJlc29sdmluZyhzdGF0ZTEyLCBzdHJpbmc0KTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoIChjaG9vc2VTY2FsYXJTdHlsZShzdHJpbmczLCBzaW5nbGVMaW5lT25seSwgc3RhdGUxMi5pbmRlbnQsIGxpbmVXaWR0aCwgdGVzdEFtYmlndWl0eSkpIHsKICAgICAgICAgIGNhc2UgU1RZTEVfUExBSU46CiAgICAgICAgICAgIHJldHVybiBzdHJpbmczOwogICAgICAgICAgY2FzZSBTVFlMRV9TSU5HTEU6CiAgICAgICAgICAgIHJldHVybiAiJyIgKyBzdHJpbmczLnJlcGxhY2UoLycvZywgIicnIikgKyAiJyI7CiAgICAgICAgICBjYXNlIFNUWUxFX0xJVEVSQUw6CiAgICAgICAgICAgIHJldHVybiAifCIgKyBibG9ja0hlYWRlcihzdHJpbmczLCBzdGF0ZTEyLmluZGVudCkgKyBkcm9wRW5kaW5nTmV3bGluZShpbmRlbnRTdHJpbmcoc3RyaW5nMywgaW5kZW50MykpOwogICAgICAgICAgY2FzZSBTVFlMRV9GT0xERUQ6CiAgICAgICAgICAgIHJldHVybiAiPiIgKyBibG9ja0hlYWRlcihzdHJpbmczLCBzdGF0ZTEyLmluZGVudCkgKyBkcm9wRW5kaW5nTmV3bGluZShpbmRlbnRTdHJpbmcoZm9sZFN0cmluZyhzdHJpbmczLCBsaW5lV2lkdGgpLCBpbmRlbnQzKSk7CiAgICAgICAgICBjYXNlIFNUWUxFX0RPVUJMRToKICAgICAgICAgICAgcmV0dXJuICciJyArIGVzY2FwZVN0cmluZyhzdHJpbmczLCBsaW5lV2lkdGgpICsgJyInOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oImltcG9zc2libGUgZXJyb3I6IGludmFsaWQgc2NhbGFyIHN0eWxlIik7CiAgICAgICAgfQogICAgICB9KSgpOwogICAgfQogICAgZnVuY3Rpb24gYmxvY2tIZWFkZXIoc3RyaW5nMywgaW5kZW50UGVyTGV2ZWwpIHsKICAgICAgdmFyIGluZGVudEluZGljYXRvciA9IG5lZWRJbmRlbnRJbmRpY2F0b3Ioc3RyaW5nMykgPyBTdHJpbmcoaW5kZW50UGVyTGV2ZWwpIDogIiI7CiAgICAgIHZhciBjbGlwID0gc3RyaW5nM1tzdHJpbmczLmxlbmd0aCAtIDFdID09PSAiXG4iOwogICAgICB2YXIga2VlcCA9IGNsaXAgJiYgKHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAyXSA9PT0gIlxuIiB8fCBzdHJpbmczID09PSAiXG4iKTsKICAgICAgdmFyIGNob21wID0ga2VlcCA/ICIrIiA6IGNsaXAgPyAiIiA6ICItIjsKICAgICAgcmV0dXJuIGluZGVudEluZGljYXRvciArIGNob21wICsgIlxuIjsKICAgIH0KICAgIGZ1bmN0aW9uIGRyb3BFbmRpbmdOZXdsaW5lKHN0cmluZzMpIHsKICAgICAgcmV0dXJuIHN0cmluZzNbc3RyaW5nMy5sZW5ndGggLSAxXSA9PT0gIlxuIiA/IHN0cmluZzMuc2xpY2UoMCwgLTEpIDogc3RyaW5nMzsKICAgIH0KICAgIGZ1bmN0aW9uIGZvbGRTdHJpbmcoc3RyaW5nMywgd2lkdGgpIHsKICAgICAgdmFyIGxpbmVSZSA9IC8oXG4rKShbXlxuXSopL2c7CiAgICAgIHZhciByZXN1bHQgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIG5leHRMRiA9IHN0cmluZzMuaW5kZXhPZigiXG4iKTsKICAgICAgICBuZXh0TEYgPSBuZXh0TEYgIT09IC0xID8gbmV4dExGIDogc3RyaW5nMy5sZW5ndGg7CiAgICAgICAgbGluZVJlLmxhc3RJbmRleCA9IG5leHRMRjsKICAgICAgICByZXR1cm4gZm9sZExpbmUoc3RyaW5nMy5zbGljZSgwLCBuZXh0TEYpLCB3aWR0aCk7CiAgICAgIH0pKCk7CiAgICAgIHZhciBwcmV2TW9yZUluZGVudGVkID0gc3RyaW5nM1swXSA9PT0gIlxuIiB8fCBzdHJpbmczWzBdID09PSAiICI7CiAgICAgIHZhciBtb3JlSW5kZW50ZWQ7CiAgICAgIHZhciBtYXRjaDI7CiAgICAgIHdoaWxlIChtYXRjaDIgPSBsaW5lUmUuZXhlYyhzdHJpbmczKSkgewogICAgICAgIHZhciBwcmVmaXg0ID0gbWF0Y2gyWzFdLCBsaW5lID0gbWF0Y2gyWzJdOwogICAgICAgIG1vcmVJbmRlbnRlZCA9IGxpbmVbMF0gPT09ICIgIjsKICAgICAgICByZXN1bHQgKz0gcHJlZml4NCArICghcHJldk1vcmVJbmRlbnRlZCAmJiAhbW9yZUluZGVudGVkICYmIGxpbmUgIT09ICIiID8gIlxuIiA6ICIiKSArIGZvbGRMaW5lKGxpbmUsIHdpZHRoKTsKICAgICAgICBwcmV2TW9yZUluZGVudGVkID0gbW9yZUluZGVudGVkOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBmb2xkTGluZShsaW5lLCB3aWR0aCkgewogICAgICBpZiAobGluZSA9PT0gIiIgfHwgbGluZVswXSA9PT0gIiAiKSByZXR1cm4gbGluZTsKICAgICAgdmFyIGJyZWFrUmUgPSAvIFteIF0vZzsKICAgICAgdmFyIG1hdGNoMjsKICAgICAgdmFyIHN0YXJ0ID0gMCwgZW5kMywgY3VyciA9IDAsIG5leHQyID0gMDsKICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICB3aGlsZSAobWF0Y2gyID0gYnJlYWtSZS5leGVjKGxpbmUpKSB7CiAgICAgICAgbmV4dDIgPSBtYXRjaDIuaW5kZXg7CiAgICAgICAgaWYgKG5leHQyIC0gc3RhcnQgPiB3aWR0aCkgewogICAgICAgICAgZW5kMyA9IGN1cnIgPiBzdGFydCA/IGN1cnIgOiBuZXh0MjsKICAgICAgICAgIHJlc3VsdCArPSAiXG4iICsgbGluZS5zbGljZShzdGFydCwgZW5kMyk7CiAgICAgICAgICBzdGFydCA9IGVuZDMgKyAxOwogICAgICAgIH0KICAgICAgICBjdXJyID0gbmV4dDI7CiAgICAgIH0KICAgICAgcmVzdWx0ICs9ICJcbiI7CiAgICAgIGlmIChsaW5lLmxlbmd0aCAtIHN0YXJ0ID4gd2lkdGggJiYgY3VyciA+IHN0YXJ0KSB7CiAgICAgICAgcmVzdWx0ICs9IGxpbmUuc2xpY2Uoc3RhcnQsIGN1cnIpICsgIlxuIiArIGxpbmUuc2xpY2UoY3VyciArIDEpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc3VsdCArPSBsaW5lLnNsaWNlKHN0YXJ0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0LnNsaWNlKDEpOwogICAgfQogICAgZnVuY3Rpb24gZXNjYXBlU3RyaW5nKHN0cmluZzMpIHsKICAgICAgdmFyIHJlc3VsdCA9ICIiOwogICAgICB2YXIgY2hhciwgbmV4dENoYXI7CiAgICAgIHZhciBlc2NhcGVTZXE7CiAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHN0cmluZzMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGNoYXIgPSBzdHJpbmczLmNoYXJDb2RlQXQoaTExKTsKICAgICAgICBpZiAoY2hhciA+PSA1NTI5NiAmJiBjaGFyIDw9IDU2MzE5KSB7CiAgICAgICAgICBuZXh0Q2hhciA9IHN0cmluZzMuY2hhckNvZGVBdChpMTEgKyAxKTsKICAgICAgICAgIGlmIChuZXh0Q2hhciA+PSA1NjMyMCAmJiBuZXh0Q2hhciA8PSA1NzM0MykgewogICAgICAgICAgICByZXN1bHQgKz0gZW5jb2RlSGV4KChjaGFyIC0gNTUyOTYpICogMTAyNCArIG5leHRDaGFyIC0gNTYzMjAgKyA2NTUzNik7CiAgICAgICAgICAgIGkxMSsrOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZXNjYXBlU2VxID0gRVNDQVBFX1NFUVVFTkNFU1tjaGFyXTsKICAgICAgICByZXN1bHQgKz0gIWVzY2FwZVNlcSAmJiBpc1ByaW50YWJsZShjaGFyKSA/IHN0cmluZzNbaTExXSA6IGVzY2FwZVNlcSB8fCBlbmNvZGVIZXgoY2hhcik7CiAgICAgIH0KICAgICAgcmV0dXJuIHJlc3VsdDsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRmxvd1NlcXVlbmNlKHN0YXRlMTIsIGxldmVsLCBvYmplY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTIudGFnLCBpbmRleDIsIGxlbmd0aDsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgaWYgKHdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0W2luZGV4Ml0sIGZhbHNlLCBmYWxzZSkpIHsKICAgICAgICAgIGlmIChpbmRleDIgIT09IDApIF9yZXN1bHQgKz0gIiwiICsgKCFzdGF0ZTEyLmNvbmRlbnNlRmxvdyA/ICIgIiA6ICIiKTsKICAgICAgICAgIF9yZXN1bHQgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9ICJbIiArIF9yZXN1bHQgKyAiXSI7CiAgICB9CiAgICBmdW5jdGlvbiB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdCwgY29tcGFjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUxMi50YWcsIGluZGV4MiwgbGVuZ3RoOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdC5sZW5ndGg7IGluZGV4MiA8IGxlbmd0aDsgaW5kZXgyICs9IDEpIHsKICAgICAgICBpZiAod3JpdGVOb2RlKHN0YXRlMTIsIGxldmVsICsgMSwgb2JqZWN0W2luZGV4Ml0sIHRydWUsIHRydWUpKSB7CiAgICAgICAgICBpZiAoIWNvbXBhY3QgfHwgaW5kZXgyICE9PSAwKSB7CiAgICAgICAgICAgIF9yZXN1bHQgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCk7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoc3RhdGUxMi5kdW1wICYmIENIQVJfTElORV9GRUVEID09PSBzdGF0ZTEyLmR1bXAuY2hhckNvZGVBdCgwKSkgewogICAgICAgICAgICBfcmVzdWx0ICs9ICItIjsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIF9yZXN1bHQgKz0gIi0gIjsKICAgICAgICAgIH0KICAgICAgICAgIF9yZXN1bHQgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9IF9yZXN1bHQgfHwgIltdIjsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlRmxvd01hcHBpbmcoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdCkgewogICAgICB2YXIgX3Jlc3VsdCA9ICIiLCBfdGFnID0gc3RhdGUxMi50YWcsIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpLCBpbmRleDIsIGxlbmd0aCwgb2JqZWN0S2V5LCBvYmplY3RWYWx1ZSwgcGFpckJ1ZmZlcjsKICAgICAgZm9yIChpbmRleDIgPSAwLCBsZW5ndGggPSBvYmplY3RLZXlMaXN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHBhaXJCdWZmZXIgPSAiIjsKICAgICAgICBpZiAoaW5kZXgyICE9PSAwKSBwYWlyQnVmZmVyICs9ICIsICI7CiAgICAgICAgaWYgKHN0YXRlMTIuY29uZGVuc2VGbG93KSBwYWlyQnVmZmVyICs9ICciJzsKICAgICAgICBvYmplY3RLZXkgPSBvYmplY3RLZXlMaXN0W2luZGV4Ml07CiAgICAgICAgb2JqZWN0VmFsdWUgPSBvYmplY3Rbb2JqZWN0S2V5XTsKICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0S2V5LCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIuZHVtcC5sZW5ndGggPiAxMDI0KSBwYWlyQnVmZmVyICs9ICI/ICI7CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTEyLmR1bXAgKyAoc3RhdGUxMi5jb25kZW5zZUZsb3cgPyAnIicgOiAiIikgKyAiOiIgKyAoc3RhdGUxMi5jb25kZW5zZUZsb3cgPyAiIiA6ICIgIik7CiAgICAgICAgaWYgKCF3cml0ZU5vZGUoc3RhdGUxMiwgbGV2ZWwsIG9iamVjdFZhbHVlLCBmYWxzZSwgZmFsc2UpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgcGFpckJ1ZmZlciArPSBzdGF0ZTEyLmR1bXA7CiAgICAgICAgX3Jlc3VsdCArPSBwYWlyQnVmZmVyOwogICAgICB9CiAgICAgIHN0YXRlMTIudGFnID0gX3RhZzsKICAgICAgc3RhdGUxMi5kdW1wID0gInsiICsgX3Jlc3VsdCArICJ9IjsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBvYmplY3QsIGNvbXBhY3QpIHsKICAgICAgdmFyIF9yZXN1bHQgPSAiIiwgX3RhZyA9IHN0YXRlMTIudGFnLCBvYmplY3RLZXlMaXN0ID0gT2JqZWN0LmtleXMob2JqZWN0KSwgaW5kZXgyLCBsZW5ndGgsIG9iamVjdEtleSwgb2JqZWN0VmFsdWUsIGV4cGxpY2l0UGFpciwgcGFpckJ1ZmZlcjsKICAgICAgaWYgKHN0YXRlMTIuc29ydEtleXMgPT09IHRydWUpIHsKICAgICAgICBvYmplY3RLZXlMaXN0LnNvcnQoKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2Ygc3RhdGUxMi5zb3J0S2V5cyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG9iamVjdEtleUxpc3Quc29ydChzdGF0ZTEyLnNvcnRLZXlzKTsKICAgICAgfSBlbHNlIGlmIChzdGF0ZTEyLnNvcnRLZXlzKSB7CiAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oInNvcnRLZXlzIG11c3QgYmUgYSBib29sZWFuIG9yIGEgZnVuY3Rpb24iKTsKICAgICAgfQogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgcGFpckJ1ZmZlciA9ICIiOwogICAgICAgIGlmICghY29tcGFjdCB8fCBpbmRleDIgIT09IDApIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gZ2VuZXJhdGVOZXh0TGluZShzdGF0ZTEyLCBsZXZlbCk7CiAgICAgICAgfQogICAgICAgIG9iamVjdEtleSA9IG9iamVjdEtleUxpc3RbaW5kZXgyXTsKICAgICAgICBvYmplY3RWYWx1ZSA9IG9iamVjdFtvYmplY3RLZXldOwogICAgICAgIGlmICghd3JpdGVOb2RlKHN0YXRlMTIsIGxldmVsICsgMSwgb2JqZWN0S2V5LCB0cnVlLCB0cnVlLCB0cnVlKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGV4cGxpY2l0UGFpciA9IHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIgfHwgc3RhdGUxMi5kdW1wICYmIHN0YXRlMTIuZHVtcC5sZW5ndGggPiAxMDI0OwogICAgICAgIGlmIChleHBsaWNpdFBhaXIpIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLmR1bXAgJiYgQ0hBUl9MSU5FX0ZFRUQgPT09IHN0YXRlMTIuZHVtcC5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIj8iOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcGFpckJ1ZmZlciArPSAiPyAiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwYWlyQnVmZmVyICs9IHN0YXRlMTIuZHVtcDsKICAgICAgICBpZiAoZXhwbGljaXRQYWlyKSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9IGdlbmVyYXRlTmV4dExpbmUoc3RhdGUxMiwgbGV2ZWwpOwogICAgICAgIH0KICAgICAgICBpZiAoIXdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCArIDEsIG9iamVjdFZhbHVlLCB0cnVlLCBleHBsaWNpdFBhaXIpKSB7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIuZHVtcCAmJiBDSEFSX0xJTkVfRkVFRCA9PT0gc3RhdGUxMi5kdW1wLmNoYXJDb2RlQXQoMCkpIHsKICAgICAgICAgIHBhaXJCdWZmZXIgKz0gIjoiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBwYWlyQnVmZmVyICs9ICI6ICI7CiAgICAgICAgfQogICAgICAgIHBhaXJCdWZmZXIgKz0gc3RhdGUxMi5kdW1wOwogICAgICAgIF9yZXN1bHQgKz0gcGFpckJ1ZmZlcjsKICAgICAgfQogICAgICBzdGF0ZTEyLnRhZyA9IF90YWc7CiAgICAgIHN0YXRlMTIuZHVtcCA9IF9yZXN1bHQgfHwgInt9IjsKICAgIH0KICAgIGZ1bmN0aW9uIGRldGVjdFR5cGUoc3RhdGUxMiwgb2JqZWN0LCBleHBsaWNpdCkgewogICAgICB2YXIgX3Jlc3VsdCwgdHlwZUxpc3QsIGluZGV4MiwgbGVuZ3RoLCB0eXBlNSwgc3R5bGU7CiAgICAgIHR5cGVMaXN0ID0gZXhwbGljaXQgPyBzdGF0ZTEyLmV4cGxpY2l0VHlwZXMgOiBzdGF0ZTEyLmltcGxpY2l0VHlwZXM7CiAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gdHlwZUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgdHlwZTUgPSB0eXBlTGlzdFtpbmRleDJdOwogICAgICAgIGlmICgodHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlNS5wcmVkaWNhdGUpICYmICghdHlwZTUuaW5zdGFuY2VPZiB8fCB0eXBlb2Ygb2JqZWN0ID09PSAib2JqZWN0IiAmJiBvYmplY3QgaW5zdGFuY2VvZiB0eXBlNS5pbnN0YW5jZU9mKSAmJiAoIXR5cGU1LnByZWRpY2F0ZSB8fCB0eXBlNS5wcmVkaWNhdGUob2JqZWN0KSkpIHsKICAgICAgICAgIHN0YXRlMTIudGFnID0gZXhwbGljaXQgPyB0eXBlNS50YWcgOiAiPyI7CiAgICAgICAgICBpZiAodHlwZTUucmVwcmVzZW50KSB7CiAgICAgICAgICAgIHN0eWxlID0gc3RhdGUxMi5zdHlsZU1hcFt0eXBlNS50YWddIHx8IHR5cGU1LmRlZmF1bHRTdHlsZTsKICAgICAgICAgICAgaWYgKF90b1N0cmluZy5jYWxsKHR5cGU1LnJlcHJlc2VudCkgPT09ICJbb2JqZWN0IEZ1bmN0aW9uXSIpIHsKICAgICAgICAgICAgICBfcmVzdWx0ID0gdHlwZTUucmVwcmVzZW50KG9iamVjdCwgc3R5bGUpOwogICAgICAgICAgICB9IGVsc2UgaWYgKF9oYXNPd25Qcm9wZXJ0eS5jYWxsKHR5cGU1LnJlcHJlc2VudCwgc3R5bGUpKSB7CiAgICAgICAgICAgICAgX3Jlc3VsdCA9IHR5cGU1LnJlcHJlc2VudFtzdHlsZV0ob2JqZWN0LCBzdHlsZSk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IFlBTUxFeGNlcHRpb24oIiE8IiArIHR5cGU1LnRhZyArICc+IHRhZyByZXNvbHZlciBhY2NlcHRzIG5vdCAiJyArIHN0eWxlICsgJyIgc3R5bGUnKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzdGF0ZTEyLmR1bXAgPSBfcmVzdWx0OwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIGZ1bmN0aW9uIHdyaXRlTm9kZShzdGF0ZTEyLCBsZXZlbCwgb2JqZWN0LCBibG9jaywgY29tcGFjdCwgaXNrZXkpIHsKICAgICAgc3RhdGUxMi50YWcgPSBudWxsOwogICAgICBzdGF0ZTEyLmR1bXAgPSBvYmplY3Q7CiAgICAgIGlmICghZGV0ZWN0VHlwZShzdGF0ZTEyLCBvYmplY3QsIGZhbHNlKSkgewogICAgICAgIGRldGVjdFR5cGUoc3RhdGUxMiwgb2JqZWN0LCB0cnVlKTsKICAgICAgfQogICAgICB2YXIgdHlwZTUgPSBfdG9TdHJpbmcuY2FsbChzdGF0ZTEyLmR1bXApOwogICAgICBpZiAoYmxvY2spIHsKICAgICAgICBibG9jayA9IHN0YXRlMTIuZmxvd0xldmVsIDwgMCB8fCBzdGF0ZTEyLmZsb3dMZXZlbCA+IGxldmVsOwogICAgICB9CiAgICAgIHZhciBvYmplY3RPckFycmF5ID0gdHlwZTUgPT09ICJbb2JqZWN0IE9iamVjdF0iIHx8IHR5cGU1ID09PSAiW29iamVjdCBBcnJheV0iLCBkdXBsaWNhdGVJbmRleCwgZHVwbGljYXRlOwogICAgICBpZiAob2JqZWN0T3JBcnJheSkgewogICAgICAgIGR1cGxpY2F0ZUluZGV4ID0gc3RhdGUxMi5kdXBsaWNhdGVzLmluZGV4T2Yob2JqZWN0KTsKICAgICAgICBkdXBsaWNhdGUgPSBkdXBsaWNhdGVJbmRleCAhPT0gLTE7CiAgICAgIH0KICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIgfHwgZHVwbGljYXRlIHx8IHN0YXRlMTIuaW5kZW50ICE9PSAyICYmIGxldmVsID4gMCkgewogICAgICAgIGNvbXBhY3QgPSBmYWxzZTsKICAgICAgfQogICAgICBpZiAoZHVwbGljYXRlICYmIHN0YXRlMTIudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdKSB7CiAgICAgICAgc3RhdGUxMi5kdW1wID0gIipyZWZfIiArIGR1cGxpY2F0ZUluZGV4OwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChvYmplY3RPckFycmF5ICYmIGR1cGxpY2F0ZSAmJiAhc3RhdGUxMi51c2VkRHVwbGljYXRlc1tkdXBsaWNhdGVJbmRleF0pIHsKICAgICAgICAgIHN0YXRlMTIudXNlZER1cGxpY2F0ZXNbZHVwbGljYXRlSW5kZXhdID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGU1ID09PSAiW29iamVjdCBPYmplY3RdIikgewogICAgICAgICAgaWYgKGJsb2NrICYmIE9iamVjdC5rZXlzKHN0YXRlMTIuZHVtcCkubGVuZ3RoICE9PSAwKSB7CiAgICAgICAgICAgIHdyaXRlQmxvY2tNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBzdGF0ZTEyLmR1bXAsIGNvbXBhY3QpOwogICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5kdW1wID0gIiZyZWZfIiArIGR1cGxpY2F0ZUluZGV4ICsgc3RhdGUxMi5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB3cml0ZUZsb3dNYXBwaW5nKHN0YXRlMTIsIGxldmVsLCBzdGF0ZTEyLmR1bXApOwogICAgICAgICAgICBpZiAoZHVwbGljYXRlKSB7CiAgICAgICAgICAgICAgc3RhdGUxMi5kdW1wID0gIiZyZWZfIiArIGR1cGxpY2F0ZUluZGV4ICsgIiAiICsgc3RhdGUxMi5kdW1wOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gIltvYmplY3QgQXJyYXldIikgewogICAgICAgICAgdmFyIGFycmF5TGV2ZWwgPSBzdGF0ZTEyLm5vQXJyYXlJbmRlbnQgJiYgbGV2ZWwgPiAwID8gbGV2ZWwgLSAxIDogbGV2ZWw7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgc3RhdGUxMi5kdW1wLmxlbmd0aCAhPT0gMCkgewogICAgICAgICAgICB3cml0ZUJsb2NrU2VxdWVuY2Uoc3RhdGUxMiwgYXJyYXlMZXZlbCwgc3RhdGUxMi5kdW1wLCBjb21wYWN0KTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArIHN0YXRlMTIuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgd3JpdGVGbG93U2VxdWVuY2Uoc3RhdGUxMiwgYXJyYXlMZXZlbCwgc3RhdGUxMi5kdW1wKTsKICAgICAgICAgICAgaWYgKGR1cGxpY2F0ZSkgewogICAgICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICImcmVmXyIgKyBkdXBsaWNhdGVJbmRleCArICIgIiArIHN0YXRlMTIuZHVtcDsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJbb2JqZWN0IFN0cmluZ10iKSB7CiAgICAgICAgICBpZiAoc3RhdGUxMi50YWcgIT09ICI/IikgewogICAgICAgICAgICB3cml0ZVNjYWxhcihzdGF0ZTEyLCBzdGF0ZTEyLmR1bXAsIGxldmVsLCBpc2tleSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChzdGF0ZTEyLnNraXBJbnZhbGlkKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0aHJvdyBuZXcgWUFNTEV4Y2VwdGlvbigidW5hY2NlcHRhYmxlIGtpbmQgb2YgYW4gb2JqZWN0IHRvIGR1bXAgIiArIHR5cGU1KTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXRlMTIudGFnICE9PSBudWxsICYmIHN0YXRlMTIudGFnICE9PSAiPyIpIHsKICAgICAgICAgIHN0YXRlMTIuZHVtcCA9ICIhPCIgKyBzdGF0ZTEyLnRhZyArICI+ICIgKyBzdGF0ZTEyLmR1bXA7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgZnVuY3Rpb24gZ2V0RHVwbGljYXRlUmVmZXJlbmNlcyhvYmplY3QsIHN0YXRlMTIpIHsKICAgICAgdmFyIG9iamVjdHMgPSBbXSwgZHVwbGljYXRlc0luZGV4ZXMgPSBbXSwgaW5kZXgyLCBsZW5ndGg7CiAgICAgIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpOwogICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IGR1cGxpY2F0ZXNJbmRleGVzLmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgIHN0YXRlMTIuZHVwbGljYXRlcy5wdXNoKG9iamVjdHNbZHVwbGljYXRlc0luZGV4ZXNbaW5kZXgyXV0pOwogICAgICB9CiAgICAgIHN0YXRlMTIudXNlZER1cGxpY2F0ZXMgPSBuZXcgQXJyYXkobGVuZ3RoKTsKICAgIH0KICAgIGZ1bmN0aW9uIGluc3BlY3ROb2RlKG9iamVjdCwgb2JqZWN0cywgZHVwbGljYXRlc0luZGV4ZXMpIHsKICAgICAgdmFyIG9iamVjdEtleUxpc3QsIGluZGV4MiwgbGVuZ3RoOwogICAgICBpZiAob2JqZWN0ICE9PSBudWxsICYmIHR5cGVvZiBvYmplY3QgPT09ICJvYmplY3QiKSB7CiAgICAgICAgaW5kZXgyID0gb2JqZWN0cy5pbmRleE9mKG9iamVjdCk7CiAgICAgICAgaWYgKGluZGV4MiAhPT0gLTEpIHsKICAgICAgICAgIGlmIChkdXBsaWNhdGVzSW5kZXhlcy5pbmRleE9mKGluZGV4MikgPT09IC0xKSB7CiAgICAgICAgICAgIGR1cGxpY2F0ZXNJbmRleGVzLnB1c2goaW5kZXgyKTsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgb2JqZWN0cy5wdXNoKG9iamVjdCk7CiAgICAgICAgICBpZiAoQXJyYXkuaXNBcnJheShvYmplY3QpKSB7CiAgICAgICAgICAgIGZvciAoaW5kZXgyID0gMCwgbGVuZ3RoID0gb2JqZWN0Lmxlbmd0aDsgaW5kZXgyIDwgbGVuZ3RoOyBpbmRleDIgKz0gMSkgewogICAgICAgICAgICAgIGluc3BlY3ROb2RlKG9iamVjdFtpbmRleDJdLCBvYmplY3RzLCBkdXBsaWNhdGVzSW5kZXhlcyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIG9iamVjdEtleUxpc3QgPSBPYmplY3Qua2V5cyhvYmplY3QpOwogICAgICAgICAgICBmb3IgKGluZGV4MiA9IDAsIGxlbmd0aCA9IG9iamVjdEtleUxpc3QubGVuZ3RoOyBpbmRleDIgPCBsZW5ndGg7IGluZGV4MiArPSAxKSB7CiAgICAgICAgICAgICAgaW5zcGVjdE5vZGUob2JqZWN0W29iamVjdEtleUxpc3RbaW5kZXgyXV0sIG9iamVjdHMsIGR1cGxpY2F0ZXNJbmRleGVzKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZnVuY3Rpb24gZHVtcChpbnB1dCwgb3B0aW9ucykgewogICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fTsKICAgICAgdmFyIHN0YXRlMTIgPSBuZXcgU3RhdGUob3B0aW9ucyk7CiAgICAgIGlmICghc3RhdGUxMi5ub1JlZnMpIGdldER1cGxpY2F0ZVJlZmVyZW5jZXMoaW5wdXQsIHN0YXRlMTIpOwogICAgICBpZiAod3JpdGVOb2RlKHN0YXRlMTIsIDAsIGlucHV0LCB0cnVlLCB0cnVlKSkgcmV0dXJuIHN0YXRlMTIuZHVtcCArICJcbiI7CiAgICAgIHJldHVybiAiIjsKICAgIH0KICAgIGZ1bmN0aW9uIHNhZmVEdW1wKGlucHV0LCBvcHRpb25zKSB7CiAgICAgIHJldHVybiBkdW1wKGlucHV0LCBjb21tb24uZXh0ZW5kKHsgc2NoZW1hOiBERUZBVUxUX1NBRkVfU0NIRU1BIH0sIG9wdGlvbnMpKTsKICAgIH0KICAgIG1vZHVsZS5leHBvcnRzLmR1bXAgPSBkdW1wOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUR1bXAgPSBzYWZlRHVtcDsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzCnZhciByZXF1aXJlX2pzX3lhbWwgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2xpYi9qcy15YW1sLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgICJ1c2Ugc3RyaWN0IjsKICAgIHZhciBsb2FkZXIgPSByZXF1aXJlX2xvYWRlcigpOwogICAgdmFyIGR1bXBlciA9IHJlcXVpcmVfZHVtcGVyKCk7CiAgICBmdW5jdGlvbiBkZXByZWNhdGVkKG5hbWUpIHsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiRnVuY3Rpb24gIiArIG5hbWUgKyAiIGlzIGRlcHJlY2F0ZWQgYW5kIGNhbm5vdCBiZSB1c2VkLiIpOwogICAgICB9OwogICAgfQogICAgbW9kdWxlLmV4cG9ydHMuVHlwZSA9IHJlcXVpcmVfdHlwZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuU2NoZW1hID0gcmVxdWlyZV9zY2hlbWEoKTsKICAgIG1vZHVsZS5leHBvcnRzLkZBSUxTQUZFX1NDSEVNQSA9IHJlcXVpcmVfZmFpbHNhZmUoKTsKICAgIG1vZHVsZS5leHBvcnRzLkpTT05fU0NIRU1BID0gcmVxdWlyZV9qc29uKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5DT1JFX1NDSEVNQSA9IHJlcXVpcmVfY29yZSgpOwogICAgbW9kdWxlLmV4cG9ydHMuREVGQVVMVF9TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5ERUZBVUxUX0ZVTExfU0NIRU1BID0gcmVxdWlyZV9kZWZhdWx0X2Z1bGwoKTsKICAgIG1vZHVsZS5leHBvcnRzLmxvYWQgPSBsb2FkZXIubG9hZDsKICAgIG1vZHVsZS5leHBvcnRzLmxvYWRBbGwgPSBsb2FkZXIubG9hZEFsbDsKICAgIG1vZHVsZS5leHBvcnRzLnNhZmVMb2FkID0gbG9hZGVyLnNhZmVMb2FkOwogICAgbW9kdWxlLmV4cG9ydHMuc2FmZUxvYWRBbGwgPSBsb2FkZXIuc2FmZUxvYWRBbGw7CiAgICBtb2R1bGUuZXhwb3J0cy5kdW1wID0gZHVtcGVyLmR1bXA7CiAgICBtb2R1bGUuZXhwb3J0cy5zYWZlRHVtcCA9IGR1bXBlci5zYWZlRHVtcDsKICAgIG1vZHVsZS5leHBvcnRzLllBTUxFeGNlcHRpb24gPSByZXF1aXJlX2V4Y2VwdGlvbigpOwogICAgbW9kdWxlLmV4cG9ydHMuTUlOSU1BTF9TQ0hFTUEgPSByZXF1aXJlX2ZhaWxzYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5TQUZFX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9zYWZlKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5ERUZBVUxUX1NDSEVNQSA9IHJlcXVpcmVfZGVmYXVsdF9mdWxsKCk7CiAgICBtb2R1bGUuZXhwb3J0cy5zY2FuID0gZGVwcmVjYXRlZCgic2NhbiIpOwogICAgbW9kdWxlLmV4cG9ydHMucGFyc2UgPSBkZXByZWNhdGVkKCJwYXJzZSIpOwogICAgbW9kdWxlLmV4cG9ydHMuY29tcG9zZSA9IGRlcHJlY2F0ZWQoImNvbXBvc2UiKTsKICAgIG1vZHVsZS5leHBvcnRzLmFkZENvbnN0cnVjdG9yID0gZGVwcmVjYXRlZCgiYWRkQ29uc3RydWN0b3IiKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2pzLXlhbWxAMy4xNC4yL25vZGVfbW9kdWxlcy9qcy15YW1sL2luZGV4LmpzCnZhciByZXF1aXJlX2pzX3lhbWwyID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9qcy15YW1sQDMuMTQuMi9ub2RlX21vZHVsZXMvanMteWFtbC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgeWFtbCA9IHJlcXVpcmVfanNfeWFtbCgpOwogICAgbW9kdWxlLmV4cG9ydHMgPSB5YW1sOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9zbWFydHlhbWwucGx1Z2lucy5qcwp2YXIgcmVxdWlyZV9zbWFydHlhbWxfcGx1Z2lucyA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9zbWFydHlhbWwucGx1Z2lucy5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIF9fY3JlYXRlQmluZGluZzIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgazIyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIG02W2s0XTsKICAgICAgfSB9KTsKICAgIH0pIDogKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgbzEzW2syMl0gPSBtNltrNF07CiAgICB9KSk7CiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0MiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobzEzLCAiZGVmYXVsdCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHY1IH0pOwogICAgfSkgOiBmdW5jdGlvbihvMTMsIHY1KSB7CiAgICAgIG8xM1siZGVmYXVsdCJdID0gdjU7CiAgICB9KTsKICAgIHZhciBfX2ltcG9ydFN0YXIyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICBpZiAobW9kICE9IG51bGwpIHsKICAgICAgICBmb3IgKHZhciBrNCBpbiBtb2QpIGlmIChrNCAhPT0gImRlZmF1bHQiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgazQpKSBfX2NyZWF0ZUJpbmRpbmcyKHJlc3VsdCwgbW9kLCBrNCk7CiAgICAgIH0KICAgICAgX19zZXRNb2R1bGVEZWZhdWx0MihyZXN1bHQsIG1vZCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMuanNZYW1sID0gdm9pZCAwOwogICAgdmFyIGpzWWFtbCA9IF9faW1wb3J0U3RhcjIocmVxdWlyZV9qc195YW1sMigpKTsKICAgIGV4cG9ydHMuanNZYW1sID0ganNZYW1sOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0X3RzMiA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR5YW1sQDIuMC41L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHlhbWwvZGlzdF90cy9pbmRleC5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgdmFyIF9fY3JlYXRlQmluZGluZzIgPSBleHBvcnRzICYmIGV4cG9ydHMuX19jcmVhdGVCaW5kaW5nIHx8IChPYmplY3QuY3JlYXRlID8gKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KG8xMywgazIyLCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZnVuY3Rpb24oKSB7CiAgICAgICAgcmV0dXJuIG02W2s0XTsKICAgICAgfSB9KTsKICAgIH0pIDogKGZ1bmN0aW9uKG8xMywgbTYsIGs0LCBrMjIpIHsKICAgICAgaWYgKGsyMiA9PT0gdm9pZCAwKSBrMjIgPSBrNDsKICAgICAgbzEzW2syMl0gPSBtNltrNF07CiAgICB9KSk7CiAgICB2YXIgX19zZXRNb2R1bGVEZWZhdWx0MiA9IGV4cG9ydHMgJiYgZXhwb3J0cy5fX3NldE1vZHVsZURlZmF1bHQgfHwgKE9iamVjdC5jcmVhdGUgPyAoZnVuY3Rpb24obzEzLCB2NSkgewogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkobzEzLCAiZGVmYXVsdCIsIHsgZW51bWVyYWJsZTogdHJ1ZSwgdmFsdWU6IHY1IH0pOwogICAgfSkgOiBmdW5jdGlvbihvMTMsIHY1KSB7CiAgICAgIG8xM1siZGVmYXVsdCJdID0gdjU7CiAgICB9KTsKICAgIHZhciBfX2ltcG9ydFN0YXIyID0gZXhwb3J0cyAmJiBleHBvcnRzLl9faW1wb3J0U3RhciB8fCBmdW5jdGlvbihtb2QpIHsKICAgICAgaWYgKG1vZCAmJiBtb2QuX19lc01vZHVsZSkgcmV0dXJuIG1vZDsKICAgICAgdmFyIHJlc3VsdCA9IHt9OwogICAgICBpZiAobW9kICE9IG51bGwpIHsKICAgICAgICBmb3IgKHZhciBrNCBpbiBtb2QpIGlmIChrNCAhPT0gImRlZmF1bHQiICYmIE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG1vZCwgazQpKSBfX2NyZWF0ZUJpbmRpbmcyKHJlc3VsdCwgbW9kLCBrNCk7CiAgICAgIH0KICAgICAgX19zZXRNb2R1bGVEZWZhdWx0MihyZXN1bHQsIG1vZCk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9OwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMub2JqZWN0VG9ZYW1sU3RyaW5nID0gZXhwb3J0cy55YW1sU3RyaW5nVG9PYmplY3QgPSB2b2lkIDA7CiAgICB2YXIgcGx1Z2luczMgPSBfX2ltcG9ydFN0YXIyKHJlcXVpcmVfc21hcnR5YW1sX3BsdWdpbnMoKSk7CiAgICBleHBvcnRzLnlhbWxTdHJpbmdUb09iamVjdCA9IGFzeW5jICh5YW1sU3RyaW5nQXJnLCBvcHRpb25zQXJnID0ge30pID0+IHsKICAgICAgcmV0dXJuIHBsdWdpbnMzLmpzWWFtbC5zYWZlTG9hZCh5YW1sU3RyaW5nQXJnKTsKICAgIH07CiAgICBleHBvcnRzLm9iamVjdFRvWWFtbFN0cmluZyA9IGFzeW5jIChvYmplY3RBcmcsIG9wdGlvbnNBcmcgPSB7fSkgPT4gewogICAgICByZXR1cm4gcGx1Z2luczMuanNZYW1sLnNhZmVEdW1wKG9iamVjdEFyZyk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vYmFpbEAyLjAuMi9ub2RlX21vZHVsZXMvYmFpbC9pbmRleC5qcwpmdW5jdGlvbiBiYWlsKGVycm9yKSB7CiAgaWYgKGVycm9yKSB7CiAgICB0aHJvdyBlcnJvcjsKICB9Cn0KdmFyIGluaXRfYmFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2JhaWxAMi4wLjIvbm9kZV9tb2R1bGVzL2JhaWwvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZXh0ZW5kQDMuMC4yL25vZGVfbW9kdWxlcy9leHRlbmQvaW5kZXguanMKdmFyIHJlcXVpcmVfZXh0ZW5kID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9leHRlbmRAMy4wLjIvbm9kZV9tb2R1bGVzL2V4dGVuZC9pbmRleC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICAidXNlIHN0cmljdCI7CiAgICB2YXIgaGFzT3duID0gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTsKICAgIHZhciB0b1N0ciA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7CiAgICB2YXIgZGVmaW5lUHJvcGVydHkgPSBPYmplY3QuZGVmaW5lUHJvcGVydHk7CiAgICB2YXIgZ09QRCA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7CiAgICB2YXIgaXNBcnJheTMgPSBmdW5jdGlvbiBpc0FycmF5NChhcnIpIHsKICAgICAgaWYgKHR5cGVvZiBBcnJheS5pc0FycmF5ID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoYXJyKTsKICAgICAgfQogICAgICByZXR1cm4gdG9TdHIuY2FsbChhcnIpID09PSAiW29iamVjdCBBcnJheV0iOwogICAgfTsKICAgIHZhciBpc1BsYWluT2JqZWN0MiA9IGZ1bmN0aW9uIGlzUGxhaW5PYmplY3QzKG9iaikgewogICAgICBpZiAoIW9iaiB8fCB0b1N0ci5jYWxsKG9iaikgIT09ICJbb2JqZWN0IE9iamVjdF0iKSB7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHZhciBoYXNPd25Db25zdHJ1Y3RvciA9IGhhc093bi5jYWxsKG9iaiwgImNvbnN0cnVjdG9yIik7CiAgICAgIHZhciBoYXNJc1Byb3RvdHlwZU9mID0gb2JqLmNvbnN0cnVjdG9yICYmIG9iai5jb25zdHJ1Y3Rvci5wcm90b3R5cGUgJiYgaGFzT3duLmNhbGwob2JqLmNvbnN0cnVjdG9yLnByb3RvdHlwZSwgImlzUHJvdG90eXBlT2YiKTsKICAgICAgaWYgKG9iai5jb25zdHJ1Y3RvciAmJiAhaGFzT3duQ29uc3RydWN0b3IgJiYgIWhhc0lzUHJvdG90eXBlT2YpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgdmFyIGtleTI7CiAgICAgIGZvciAoa2V5MiBpbiBvYmopIHsKICAgICAgfQogICAgICByZXR1cm4gdHlwZW9mIGtleTIgPT09ICJ1bmRlZmluZWQiIHx8IGhhc093bi5jYWxsKG9iaiwga2V5Mik7CiAgICB9OwogICAgdmFyIHNldFByb3BlcnR5ID0gZnVuY3Rpb24gc2V0UHJvcGVydHkyKHRhcmdldCwgb3B0aW9ucykgewogICAgICBpZiAoZGVmaW5lUHJvcGVydHkgJiYgb3B0aW9ucy5uYW1lID09PSAiX19wcm90b19fIikgewogICAgICAgIGRlZmluZVByb3BlcnR5KHRhcmdldCwgb3B0aW9ucy5uYW1lLCB7CiAgICAgICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICAgICAgY29uZmlndXJhYmxlOiB0cnVlLAogICAgICAgICAgdmFsdWU6IG9wdGlvbnMubmV3VmFsdWUsCiAgICAgICAgICB3cml0YWJsZTogdHJ1ZQogICAgICAgIH0pOwogICAgICB9IGVsc2UgewogICAgICAgIHRhcmdldFtvcHRpb25zLm5hbWVdID0gb3B0aW9ucy5uZXdWYWx1ZTsKICAgICAgfQogICAgfTsKICAgIHZhciBnZXRQcm9wZXJ0eSA9IGZ1bmN0aW9uIGdldFByb3BlcnR5MihvYmosIG5hbWUpIHsKICAgICAgaWYgKG5hbWUgPT09ICJfX3Byb3RvX18iKSB7CiAgICAgICAgaWYgKCFoYXNPd24uY2FsbChvYmosIG5hbWUpKSB7CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0gZWxzZSBpZiAoZ09QRCkgewogICAgICAgICAgcmV0dXJuIGdPUEQob2JqLCBuYW1lKS52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIG9ialtuYW1lXTsKICAgIH07CiAgICBtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIGV4dGVuZDMoKSB7CiAgICAgIHZhciBvcHRpb25zLCBuYW1lLCBzcmMsIGNvcHksIGNvcHlJc0FycmF5LCBjbG9uZTsKICAgICAgdmFyIHRhcmdldCA9IGFyZ3VtZW50c1swXTsKICAgICAgdmFyIGkxMSA9IDE7CiAgICAgIHZhciBsZW5ndGggPSBhcmd1bWVudHMubGVuZ3RoOwogICAgICB2YXIgZGVlcCA9IGZhbHNlOwogICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgZGVlcCA9IHRhcmdldDsKICAgICAgICB0YXJnZXQgPSBhcmd1bWVudHNbMV0gfHwge307CiAgICAgICAgaTExID0gMjsKICAgICAgfQogICAgICBpZiAodGFyZ2V0ID09IG51bGwgfHwgdHlwZW9mIHRhcmdldCAhPT0gIm9iamVjdCIgJiYgdHlwZW9mIHRhcmdldCAhPT0gImZ1bmN0aW9uIikgewogICAgICAgIHRhcmdldCA9IHt9OwogICAgICB9CiAgICAgIGZvciAoOyBpMTEgPCBsZW5ndGg7ICsraTExKSB7CiAgICAgICAgb3B0aW9ucyA9IGFyZ3VtZW50c1tpMTFdOwogICAgICAgIGlmIChvcHRpb25zICE9IG51bGwpIHsKICAgICAgICAgIGZvciAobmFtZSBpbiBvcHRpb25zKSB7CiAgICAgICAgICAgIHNyYyA9IGdldFByb3BlcnR5KHRhcmdldCwgbmFtZSk7CiAgICAgICAgICAgIGNvcHkgPSBnZXRQcm9wZXJ0eShvcHRpb25zLCBuYW1lKTsKICAgICAgICAgICAgaWYgKHRhcmdldCAhPT0gY29weSkgewogICAgICAgICAgICAgIGlmIChkZWVwICYmIGNvcHkgJiYgKGlzUGxhaW5PYmplY3QyKGNvcHkpIHx8IChjb3B5SXNBcnJheSA9IGlzQXJyYXkzKGNvcHkpKSkpIHsKICAgICAgICAgICAgICAgIGlmIChjb3B5SXNBcnJheSkgewogICAgICAgICAgICAgICAgICBjb3B5SXNBcnJheSA9IGZhbHNlOwogICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBpc0FycmF5MyhzcmMpID8gc3JjIDogW107CiAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICBjbG9uZSA9IHNyYyAmJiBpc1BsYWluT2JqZWN0MihzcmMpID8gc3JjIDoge307CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZSwgbmV3VmFsdWU6IGV4dGVuZDMoZGVlcCwgY2xvbmUsIGNvcHkpIH0pOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGNvcHkgIT09ICJ1bmRlZmluZWQiKSB7CiAgICAgICAgICAgICAgICBzZXRQcm9wZXJ0eSh0YXJnZXQsIHsgbmFtZSwgbmV3VmFsdWU6IGNvcHkgfSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiB0YXJnZXQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZGV2bG9wQDEuMS4wL25vZGVfbW9kdWxlcy9kZXZsb3AvbGliL2RlZmF1bHQuanMKZnVuY3Rpb24gZGVwcmVjYXRlKGZuKSB7CiAgcmV0dXJuIGZuOwp9CmZ1bmN0aW9uIGVxdWFsKCkgewp9CmZ1bmN0aW9uIG9rKCkgewp9CmZ1bmN0aW9uIHVucmVhY2hhYmxlKCkgewp9CnZhciBpbml0X2RlZmF1bHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kZXZsb3BAMS4xLjAvbm9kZV9tb2R1bGVzL2RldmxvcC9saWIvZGVmYXVsdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9pcy1wbGFpbi1vYmpANC4xLjAvbm9kZV9tb2R1bGVzL2lzLXBsYWluLW9iai9pbmRleC5qcwpmdW5jdGlvbiBpc1BsYWluT2JqZWN0KHZhbHVlMikgewogIGlmICh0eXBlb2YgdmFsdWUyICE9PSAib2JqZWN0IiB8fCB2YWx1ZTIgPT09IG51bGwpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY29uc3QgcHJvdG90eXBlID0gT2JqZWN0LmdldFByb3RvdHlwZU9mKHZhbHVlMik7CiAgcmV0dXJuIChwcm90b3R5cGUgPT09IG51bGwgfHwgcHJvdG90eXBlID09PSBPYmplY3QucHJvdG90eXBlIHx8IE9iamVjdC5nZXRQcm90b3R5cGVPZihwcm90b3R5cGUpID09PSBudWxsKSAmJiAhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiB2YWx1ZTIpICYmICEoU3ltYm9sLml0ZXJhdG9yIGluIHZhbHVlMik7Cn0KdmFyIGluaXRfaXNfcGxhaW5fb2JqID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaXMtcGxhaW4tb2JqQDQuMS4wL25vZGVfbW9kdWxlcy9pcy1wbGFpbi1vYmovaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdHJvdWdoQDIuMi4wL25vZGVfbW9kdWxlcy90cm91Z2gvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRyb3VnaCgpIHsKICBjb25zdCBmbnMgPSBbXTsKICBjb25zdCBwaXBlbGluZSA9IHsgcnVuLCB1c2UgfTsKICByZXR1cm4gcGlwZWxpbmU7CiAgZnVuY3Rpb24gcnVuKC4uLnZhbHVlcykgewogICAgbGV0IG1pZGRsZXdhcmVJbmRleCA9IC0xOwogICAgY29uc3QgY2FsbGJhY2sgPSB2YWx1ZXMucG9wKCk7CiAgICBpZiAodHlwZW9mIGNhbGxiYWNrICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIGZ1bmN0aW9uIGFzIGxhc3QgYXJndW1lbnQsIG5vdCAiICsgY2FsbGJhY2spOwogICAgfQogICAgbmV4dDIobnVsbCwgLi4udmFsdWVzKTsKICAgIGZ1bmN0aW9uIG5leHQyKGVycm9yLCAuLi5vdXRwdXQpIHsKICAgICAgY29uc3QgZm4gPSBmbnNbKyttaWRkbGV3YXJlSW5kZXhdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIGlmIChlcnJvcikgewogICAgICAgIGNhbGxiYWNrKGVycm9yKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgICAgIGlmIChvdXRwdXRbaW5kZXgyXSA9PT0gbnVsbCB8fCBvdXRwdXRbaW5kZXgyXSA9PT0gdm9pZCAwKSB7CiAgICAgICAgICBvdXRwdXRbaW5kZXgyXSA9IHZhbHVlc1tpbmRleDJdOwogICAgICAgIH0KICAgICAgfQogICAgICB2YWx1ZXMgPSBvdXRwdXQ7CiAgICAgIGlmIChmbikgewogICAgICAgIHdyYXAyKGZuLCBuZXh0MikoLi4ub3V0cHV0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICBjYWxsYmFjayhudWxsLCAuLi5vdXRwdXQpOwogICAgICB9CiAgICB9CiAgfQogIGZ1bmN0aW9uIHVzZShtaWRkZWx3YXJlKSB7CiAgICBpZiAodHlwZW9mIG1pZGRlbHdhcmUgIT09ICJmdW5jdGlvbiIpIHsKICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgICAiRXhwZWN0ZWQgYG1pZGRlbHdhcmVgIHRvIGJlIGEgZnVuY3Rpb24sIG5vdCAiICsgbWlkZGVsd2FyZQogICAgICApOwogICAgfQogICAgZm5zLnB1c2gobWlkZGVsd2FyZSk7CiAgICByZXR1cm4gcGlwZWxpbmU7CiAgfQp9CmZ1bmN0aW9uIHdyYXAyKG1pZGRsZXdhcmUsIGNhbGxiYWNrKSB7CiAgbGV0IGNhbGxlZDsKICByZXR1cm4gd3JhcHBlZDsKICBmdW5jdGlvbiB3cmFwcGVkKC4uLnBhcmFtZXRlcnMpIHsKICAgIGNvbnN0IGZuRXhwZWN0c0NhbGxiYWNrID0gbWlkZGxld2FyZS5sZW5ndGggPiBwYXJhbWV0ZXJzLmxlbmd0aDsKICAgIGxldCByZXN1bHQ7CiAgICBpZiAoZm5FeHBlY3RzQ2FsbGJhY2spIHsKICAgICAgcGFyYW1ldGVycy5wdXNoKGRvbmUpOwogICAgfQogICAgdHJ5IHsKICAgICAgcmVzdWx0ID0gbWlkZGxld2FyZS5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnN0IGV4Y2VwdGlvbiA9ICgKICAgICAgICAvKiogQHR5cGUge0Vycm9yfSAqLwogICAgICAgIGVycm9yCiAgICAgICk7CiAgICAgIGlmIChmbkV4cGVjdHNDYWxsYmFjayAmJiBjYWxsZWQpIHsKICAgICAgICB0aHJvdyBleGNlcHRpb247CiAgICAgIH0KICAgICAgcmV0dXJuIGRvbmUoZXhjZXB0aW9uKTsKICAgIH0KICAgIGlmICghZm5FeHBlY3RzQ2FsbGJhY2spIHsKICAgICAgaWYgKHJlc3VsdCAmJiByZXN1bHQudGhlbiAmJiB0eXBlb2YgcmVzdWx0LnRoZW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICByZXN1bHQudGhlbih0aGVuLCBkb25lKTsKICAgICAgfSBlbHNlIGlmIChyZXN1bHQgaW5zdGFuY2VvZiBFcnJvcikgewogICAgICAgIGRvbmUocmVzdWx0KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGVuKHJlc3VsdCk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZG9uZShlcnJvciwgLi4ub3V0cHV0KSB7CiAgICBpZiAoIWNhbGxlZCkgewogICAgICBjYWxsZWQgPSB0cnVlOwogICAgICBjYWxsYmFjayhlcnJvciwgLi4ub3V0cHV0KTsKICAgIH0KICB9CiAgZnVuY3Rpb24gdGhlbih2YWx1ZTIpIHsKICAgIGRvbmUobnVsbCwgdmFsdWUyKTsKICB9Cn0KdmFyIGluaXRfbGliID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdHJvdWdoQDIuMi4wL25vZGVfbW9kdWxlcy90cm91Z2gvbGliL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzCnZhciBpbml0X3Ryb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Ryb3VnaEAyLjIuMC9ub2RlX21vZHVsZXMvdHJvdWdoL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbkA0LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHN0cmluZ2lmeVBvc2l0aW9uKHZhbHVlMikgewogIGlmICghdmFsdWUyIHx8IHR5cGVvZiB2YWx1ZTIgIT09ICJvYmplY3QiKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGlmICgicG9zaXRpb24iIGluIHZhbHVlMiB8fCAidHlwZSIgaW4gdmFsdWUyKSB7CiAgICByZXR1cm4gcG9zaXRpb24odmFsdWUyLnBvc2l0aW9uKTsKICB9CiAgaWYgKCJzdGFydCIgaW4gdmFsdWUyIHx8ICJlbmQiIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvc2l0aW9uKHZhbHVlMik7CiAgfQogIGlmICgibGluZSIgaW4gdmFsdWUyIHx8ICJjb2x1bW4iIGluIHZhbHVlMikgewogICAgcmV0dXJuIHBvaW50KHZhbHVlMik7CiAgfQogIHJldHVybiAiIjsKfQpmdW5jdGlvbiBwb2ludChwb2ludDQpIHsKICByZXR1cm4gaW5kZXgocG9pbnQ0ICYmIHBvaW50NC5saW5lKSArICI6IiArIGluZGV4KHBvaW50NCAmJiBwb2ludDQuY29sdW1uKTsKfQpmdW5jdGlvbiBwb3NpdGlvbihwb3MpIHsKICByZXR1cm4gcG9pbnQocG9zICYmIHBvcy5zdGFydCkgKyAiLSIgKyBwb2ludChwb3MgJiYgcG9zLmVuZCk7Cn0KZnVuY3Rpb24gaW5kZXgodmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIiA/IHZhbHVlMiA6IDE7Cn0KdmFyIGluaXRfbGliMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uQDQuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXN0cmluZ2lmeS1wb3NpdGlvbi9saWIvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfc3RyaW5naWZ5X3Bvc2l0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1zdHJpbmdpZnktcG9zaXRpb25ANC4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtc3RyaW5naWZ5LXBvc2l0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9saWIvaW5kZXguanMKdmFyIFZGaWxlTWVzc2FnZTsKdmFyIGluaXRfbGliMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlLW1lc3NhZ2VANC4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlLW1lc3NhZ2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9zdHJpbmdpZnlfcG9zaXRpb24oKTsKICAgIFZGaWxlTWVzc2FnZSA9IGNsYXNzIGV4dGVuZHMgRXJyb3IgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbWVzc2FnZSBmb3IgYHJlYXNvbmAuCiAgICAgICAqCiAgICAgICAqID4g8J+qpiAqKk5vdGUqKjogYWxzbyBoYXMgb2Jzb2xldGUgc2lnbmF0dXJlcy4KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMKICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucwogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgSW5zdGFuY2Ugb2YgYFZGaWxlTWVzc2FnZWAuCiAgICAgICAqLwogICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgY29tcGxleGl0eQogICAgICBjb25zdHJ1Y3RvcihjYXVzZU9yUmVhc29uLCBvcHRpb25zT3JQYXJlbnRPclBsYWNlLCBvcmlnaW4pIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9uc09yUGFyZW50T3JQbGFjZSA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIG9yaWdpbiA9IG9wdGlvbnNPclBhcmVudE9yUGxhY2U7CiAgICAgICAgICBvcHRpb25zT3JQYXJlbnRPclBsYWNlID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICBsZXQgcmVhc29uID0gIiI7CiAgICAgICAgbGV0IG9wdGlvbnMgPSB7fTsKICAgICAgICBsZXQgbGVnYWN5Q2F1c2UgPSBmYWxzZTsKICAgICAgICBpZiAob3B0aW9uc09yUGFyZW50T3JQbGFjZSkgewogICAgICAgICAgaWYgKCJsaW5lIiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmICJjb2x1bW4iIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0gZWxzZSBpZiAoInN0YXJ0IiBpbiBvcHRpb25zT3JQYXJlbnRPclBsYWNlICYmICJlbmQiIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgcGxhY2U6IG9wdGlvbnNPclBhcmVudE9yUGxhY2UgfTsKICAgICAgICAgIH0gZWxzZSBpZiAoInR5cGUiIGluIG9wdGlvbnNPclBhcmVudE9yUGxhY2UpIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsKICAgICAgICAgICAgICBhbmNlc3RvcnM6IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXSwKICAgICAgICAgICAgICBwbGFjZTogb3B0aW9uc09yUGFyZW50T3JQbGFjZS5wb3NpdGlvbgogICAgICAgICAgICB9OwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb3B0aW9ucyA9IHsgLi4ub3B0aW9uc09yUGFyZW50T3JQbGFjZSB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGNhdXNlT3JSZWFzb24gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZWFzb24gPSBjYXVzZU9yUmVhc29uOwogICAgICAgIH0gZWxzZSBpZiAoIW9wdGlvbnMuY2F1c2UgJiYgY2F1c2VPclJlYXNvbikgewogICAgICAgICAgbGVnYWN5Q2F1c2UgPSB0cnVlOwogICAgICAgICAgcmVhc29uID0gY2F1c2VPclJlYXNvbi5tZXNzYWdlOwogICAgICAgICAgb3B0aW9ucy5jYXVzZSA9IGNhdXNlT3JSZWFzb247CiAgICAgICAgfQogICAgICAgIGlmICghb3B0aW9ucy5ydWxlSWQgJiYgIW9wdGlvbnMuc291cmNlICYmIHR5cGVvZiBvcmlnaW4gPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBjb25zdCBpbmRleDIgPSBvcmlnaW4uaW5kZXhPZigiOiIpOwogICAgICAgICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgICAgICAgb3B0aW9ucy5ydWxlSWQgPSBvcmlnaW47CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvcHRpb25zLnNvdXJjZSA9IG9yaWdpbi5zbGljZSgwLCBpbmRleDIpOwogICAgICAgICAgICBvcHRpb25zLnJ1bGVJZCA9IG9yaWdpbi5zbGljZShpbmRleDIgKyAxKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvcHRpb25zLnBsYWNlICYmIG9wdGlvbnMuYW5jZXN0b3JzICYmIG9wdGlvbnMuYW5jZXN0b3JzKSB7CiAgICAgICAgICBjb25zdCBwYXJlbnQgPSBvcHRpb25zLmFuY2VzdG9yc1tvcHRpb25zLmFuY2VzdG9ycy5sZW5ndGggLSAxXTsKICAgICAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICAgICAgb3B0aW9ucy5wbGFjZSA9IHBhcmVudC5wb3NpdGlvbjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgc3RhcnQgPSBvcHRpb25zLnBsYWNlICYmICJzdGFydCIgaW4gb3B0aW9ucy5wbGFjZSA/IG9wdGlvbnMucGxhY2Uuc3RhcnQgOiBvcHRpb25zLnBsYWNlOwogICAgICAgIHRoaXMuYW5jZXN0b3JzID0gb3B0aW9ucy5hbmNlc3RvcnMgfHwgdm9pZCAwOwogICAgICAgIHRoaXMuY2F1c2UgPSBvcHRpb25zLmNhdXNlIHx8IHZvaWQgMDsKICAgICAgICB0aGlzLmNvbHVtbiA9IHN0YXJ0ID8gc3RhcnQuY29sdW1uIDogdm9pZCAwOwogICAgICAgIHRoaXMuZmF0YWwgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5maWxlID0gIiI7CiAgICAgICAgdGhpcy5tZXNzYWdlID0gcmVhc29uOwogICAgICAgIHRoaXMubGluZSA9IHN0YXJ0ID8gc3RhcnQubGluZSA6IHZvaWQgMDsKICAgICAgICB0aGlzLm5hbWUgPSBzdHJpbmdpZnlQb3NpdGlvbihvcHRpb25zLnBsYWNlKSB8fCAiMToxIjsKICAgICAgICB0aGlzLnBsYWNlID0gb3B0aW9ucy5wbGFjZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5yZWFzb24gPSB0aGlzLm1lc3NhZ2U7CiAgICAgICAgdGhpcy5ydWxlSWQgPSBvcHRpb25zLnJ1bGVJZCB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5zb3VyY2UgPSBvcHRpb25zLnNvdXJjZSB8fCB2b2lkIDA7CiAgICAgICAgdGhpcy5zdGFjayA9IGxlZ2FjeUNhdXNlICYmIG9wdGlvbnMuY2F1c2UgJiYgdHlwZW9mIG9wdGlvbnMuY2F1c2Uuc3RhY2sgPT09ICJzdHJpbmciID8gb3B0aW9ucy5jYXVzZS5zdGFjayA6ICIiOwogICAgICAgIHRoaXMuYWN0dWFsID0gdm9pZCAwOwogICAgICAgIHRoaXMuZXhwZWN0ZWQgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5ub3RlID0gdm9pZCAwOwogICAgICAgIHRoaXMudXJsID0gdm9pZCAwOwogICAgICB9CiAgICB9OwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5maWxlID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLm5hbWUgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUucmVhc29uID0gIiI7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLm1lc3NhZ2UgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc3RhY2sgPSAiIjsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuY29sdW1uID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5saW5lID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5hbmNlc3RvcnMgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLmNhdXNlID0gdm9pZCAwOwogICAgVkZpbGVNZXNzYWdlLnByb3RvdHlwZS5mYXRhbCA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUucGxhY2UgPSB2b2lkIDA7CiAgICBWRmlsZU1lc3NhZ2UucHJvdG90eXBlLnJ1bGVJZCA9IHZvaWQgMDsKICAgIFZGaWxlTWVzc2FnZS5wcm90b3R5cGUuc291cmNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9pbmRleC5qcwp2YXIgaW5pdF92ZmlsZV9tZXNzYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGUtbWVzc2FnZUA0LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUtbWVzc2FnZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucGF0aC5icm93c2VyLmpzCmZ1bmN0aW9uIGJhc2VuYW1lKHBhdGgyLCBleHRuYW1lMikgewogIGlmIChleHRuYW1lMiAhPT0gdm9pZCAwICYmIHR5cGVvZiBleHRuYW1lMiAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJyJleHQiIGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnKTsKICB9CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgZW5kMyA9IC0xOwogIGxldCBpbmRleDIgPSBwYXRoMi5sZW5ndGg7CiAgbGV0IHNlZW5Ob25TbGFzaDsKICBpZiAoZXh0bmFtZTIgPT09IHZvaWQgMCB8fCBleHRuYW1lMi5sZW5ndGggPT09IDAgfHwgZXh0bmFtZTIubGVuZ3RoID4gcGF0aDIubGVuZ3RoKSB7CiAgICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgICAgaWYgKHBhdGgyLmNvZGVQb2ludEF0KGluZGV4MikgPT09IDQ3KSB7CiAgICAgICAgaWYgKHNlZW5Ob25TbGFzaCkgewogICAgICAgICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGVuZDMgPCAwKSB7CiAgICAgICAgc2Vlbk5vblNsYXNoID0gdHJ1ZTsKICAgICAgICBlbmQzID0gaW5kZXgyICsgMTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGVuZDMgPCAwID8gIiIgOiBwYXRoMi5zbGljZShzdGFydCwgZW5kMyk7CiAgfQogIGlmIChleHRuYW1lMiA9PT0gcGF0aDIpIHsKICAgIHJldHVybiAiIjsKICB9CiAgbGV0IGZpcnN0Tm9uU2xhc2hFbmQgPSAtMTsKICBsZXQgZXh0bmFtZUluZGV4ID0gZXh0bmFtZTIubGVuZ3RoIC0gMTsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICBpZiAoc2Vlbk5vblNsYXNoKSB7CiAgICAgICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoZmlyc3ROb25TbGFzaEVuZCA8IDApIHsKICAgICAgICBzZWVuTm9uU2xhc2ggPSB0cnVlOwogICAgICAgIGZpcnN0Tm9uU2xhc2hFbmQgPSBpbmRleDIgKyAxOwogICAgICB9CiAgICAgIGlmIChleHRuYW1lSW5kZXggPiAtMSkgewogICAgICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSBleHRuYW1lMi5jb2RlUG9pbnRBdChleHRuYW1lSW5kZXgtLSkpIHsKICAgICAgICAgIGlmIChleHRuYW1lSW5kZXggPCAwKSB7CiAgICAgICAgICAgIGVuZDMgPSBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV4dG5hbWVJbmRleCA9IC0xOwogICAgICAgICAgZW5kMyA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIGlmIChzdGFydCA9PT0gZW5kMykgewogICAgZW5kMyA9IGZpcnN0Tm9uU2xhc2hFbmQ7CiAgfSBlbHNlIGlmIChlbmQzIDwgMCkgewogICAgZW5kMyA9IHBhdGgyLmxlbmd0aDsKICB9CiAgcmV0dXJuIHBhdGgyLnNsaWNlKHN0YXJ0LCBlbmQzKTsKfQpmdW5jdGlvbiBkaXJuYW1lKHBhdGgyKSB7CiAgYXNzZXJ0UGF0aChwYXRoMik7CiAgaWYgKHBhdGgyLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuICIuIjsKICB9CiAgbGV0IGVuZDMgPSAtMTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCB1bm1hdGNoZWRTbGFzaDsKICB3aGlsZSAoLS1pbmRleDIpIHsKICAgIGlmIChwYXRoMi5jb2RlUG9pbnRBdChpbmRleDIpID09PSA0NykgewogICAgICBpZiAodW5tYXRjaGVkU2xhc2gpIHsKICAgICAgICBlbmQzID0gaW5kZXgyOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9IGVsc2UgaWYgKCF1bm1hdGNoZWRTbGFzaCkgewogICAgICB1bm1hdGNoZWRTbGFzaCA9IHRydWU7CiAgICB9CiAgfQogIHJldHVybiBlbmQzIDwgMCA/IHBhdGgyLmNvZGVQb2ludEF0KDApID09PSA0NyA/ICIvIiA6ICIuIiA6IGVuZDMgPT09IDEgJiYgcGF0aDIuY29kZVBvaW50QXQoMCkgPT09IDQ3ID8gIi8vIiA6IHBhdGgyLnNsaWNlKDAsIGVuZDMpOwp9CmZ1bmN0aW9uIGV4dG5hbWUocGF0aDIpIHsKICBhc3NlcnRQYXRoKHBhdGgyKTsKICBsZXQgaW5kZXgyID0gcGF0aDIubGVuZ3RoOwogIGxldCBlbmQzID0gLTE7CiAgbGV0IHN0YXJ0UGFydCA9IDA7CiAgbGV0IHN0YXJ0RG90ID0gLTE7CiAgbGV0IHByZURvdFN0YXRlID0gMDsKICBsZXQgdW5tYXRjaGVkU2xhc2g7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCBjb2RlNCA9IHBhdGgyLmNvZGVQb2ludEF0KGluZGV4Mik7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGlmICh1bm1hdGNoZWRTbGFzaCkgewogICAgICAgIHN0YXJ0UGFydCA9IGluZGV4MiArIDE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY29udGludWU7CiAgICB9CiAgICBpZiAoZW5kMyA8IDApIHsKICAgICAgdW5tYXRjaGVkU2xhc2ggPSB0cnVlOwogICAgICBlbmQzID0gaW5kZXgyICsgMTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDYpIHsKICAgICAgaWYgKHN0YXJ0RG90IDwgMCkgewogICAgICAgIHN0YXJ0RG90ID0gaW5kZXgyOwogICAgICB9IGVsc2UgaWYgKHByZURvdFN0YXRlICE9PSAxKSB7CiAgICAgICAgcHJlRG90U3RhdGUgPSAxOwogICAgICB9CiAgICB9IGVsc2UgaWYgKHN0YXJ0RG90ID4gLTEpIHsKICAgICAgcHJlRG90U3RhdGUgPSAtMTsKICAgIH0KICB9CiAgaWYgKHN0YXJ0RG90IDwgMCB8fCBlbmQzIDwgMCB8fCAvLyBXZSBzYXcgYSBub24tZG90IGNoYXJhY3RlciBpbW1lZGlhdGVseSBiZWZvcmUgdGhlIGRvdC4KICBwcmVEb3RTdGF0ZSA9PT0gMCB8fCAvLyBUaGUgKHJpZ2h0LW1vc3QpIHRyaW1tZWQgcGF0aCBjb21wb25lbnQgaXMgZXhhY3RseSBgLi5gLgogIHByZURvdFN0YXRlID09PSAxICYmIHN0YXJ0RG90ID09PSBlbmQzIC0gMSAmJiBzdGFydERvdCA9PT0gc3RhcnRQYXJ0ICsgMSkgewogICAgcmV0dXJuICIiOwogIH0KICByZXR1cm4gcGF0aDIuc2xpY2Uoc3RhcnREb3QsIGVuZDMpOwp9CmZ1bmN0aW9uIGpvaW4oLi4uc2VnbWVudHMpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGpvaW5lZDsKICB3aGlsZSAoKytpbmRleDIgPCBzZWdtZW50cy5sZW5ndGgpIHsKICAgIGFzc2VydFBhdGgoc2VnbWVudHNbaW5kZXgyXSk7CiAgICBpZiAoc2VnbWVudHNbaW5kZXgyXSkgewogICAgICBqb2luZWQgPSBqb2luZWQgPT09IHZvaWQgMCA/IHNlZ21lbnRzW2luZGV4Ml0gOiBqb2luZWQgKyAiLyIgKyBzZWdtZW50c1tpbmRleDJdOwogICAgfQogIH0KICByZXR1cm4gam9pbmVkID09PSB2b2lkIDAgPyAiLiIgOiBub3JtYWxpemUyKGpvaW5lZCk7Cn0KZnVuY3Rpb24gbm9ybWFsaXplMihwYXRoMikgewogIGFzc2VydFBhdGgocGF0aDIpOwogIGNvbnN0IGFic29sdXRlID0gcGF0aDIuY29kZVBvaW50QXQoMCkgPT09IDQ3OwogIGxldCB2YWx1ZTIgPSBub3JtYWxpemVTdHJpbmcocGF0aDIsICFhYnNvbHV0ZSk7CiAgaWYgKHZhbHVlMi5sZW5ndGggPT09IDAgJiYgIWFic29sdXRlKSB7CiAgICB2YWx1ZTIgPSAiLiI7CiAgfQogIGlmICh2YWx1ZTIubGVuZ3RoID4gMCAmJiBwYXRoMi5jb2RlUG9pbnRBdChwYXRoMi5sZW5ndGggLSAxKSA9PT0gNDcpIHsKICAgIHZhbHVlMiArPSAiLyI7CiAgfQogIHJldHVybiBhYnNvbHV0ZSA/ICIvIiArIHZhbHVlMiA6IHZhbHVlMjsKfQpmdW5jdGlvbiBub3JtYWxpemVTdHJpbmcocGF0aDIsIGFsbG93QWJvdmVSb290KSB7CiAgbGV0IHJlc3VsdCA9ICIiOwogIGxldCBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgbGV0IGxhc3RTbGFzaCA9IC0xOwogIGxldCBkb3RzID0gMDsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGNvZGU0OwogIGxldCBsYXN0U2xhc2hJbmRleDsKICB3aGlsZSAoKytpbmRleDIgPD0gcGF0aDIubGVuZ3RoKSB7CiAgICBpZiAoaW5kZXgyIDwgcGF0aDIubGVuZ3RoKSB7CiAgICAgIGNvZGU0ID0gcGF0aDIuY29kZVBvaW50QXQoaW5kZXgyKTsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGJyZWFrOwogICAgfSBlbHNlIHsKICAgICAgY29kZTQgPSA0NzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDcpIHsKICAgICAgaWYgKGxhc3RTbGFzaCA9PT0gaW5kZXgyIC0gMSB8fCBkb3RzID09PSAxKSB7CiAgICAgIH0gZWxzZSBpZiAobGFzdFNsYXNoICE9PSBpbmRleDIgLSAxICYmIGRvdHMgPT09IDIpIHsKICAgICAgICBpZiAocmVzdWx0Lmxlbmd0aCA8IDIgfHwgbGFzdFNlZ21lbnRMZW5ndGggIT09IDIgfHwgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gNDYgfHwgcmVzdWx0LmNvZGVQb2ludEF0KHJlc3VsdC5sZW5ndGggLSAyKSAhPT0gNDYpIHsKICAgICAgICAgIGlmIChyZXN1bHQubGVuZ3RoID4gMikgewogICAgICAgICAgICBsYXN0U2xhc2hJbmRleCA9IHJlc3VsdC5sYXN0SW5kZXhPZigiLyIpOwogICAgICAgICAgICBpZiAobGFzdFNsYXNoSW5kZXggIT09IHJlc3VsdC5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgICAgaWYgKGxhc3RTbGFzaEluZGV4IDwgMCkgewogICAgICAgICAgICAgICAgcmVzdWx0ID0gIiI7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHJlc3VsdCA9IHJlc3VsdC5zbGljZSgwLCBsYXN0U2xhc2hJbmRleCk7CiAgICAgICAgICAgICAgICBsYXN0U2VnbWVudExlbmd0aCA9IHJlc3VsdC5sZW5ndGggLSAxIC0gcmVzdWx0Lmxhc3RJbmRleE9mKCIvIik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhc3RTbGFzaCA9IGluZGV4MjsKICAgICAgICAgICAgICBkb3RzID0gMDsKICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQubGVuZ3RoID4gMCkgewogICAgICAgICAgICByZXN1bHQgPSAiIjsKICAgICAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSAwOwogICAgICAgICAgICBsYXN0U2xhc2ggPSBpbmRleDI7CiAgICAgICAgICAgIGRvdHMgPSAwOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGFsbG93QWJvdmVSb290KSB7CiAgICAgICAgICByZXN1bHQgPSByZXN1bHQubGVuZ3RoID4gMCA/IHJlc3VsdCArICIvLi4iIDogIi4uIjsKICAgICAgICAgIGxhc3RTZWdtZW50TGVuZ3RoID0gMjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHJlc3VsdC5sZW5ndGggPiAwKSB7CiAgICAgICAgICByZXN1bHQgKz0gIi8iICsgcGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0ID0gcGF0aDIuc2xpY2UobGFzdFNsYXNoICsgMSwgaW5kZXgyKTsKICAgICAgICB9CiAgICAgICAgbGFzdFNlZ21lbnRMZW5ndGggPSBpbmRleDIgLSBsYXN0U2xhc2ggLSAxOwogICAgICB9CiAgICAgIGxhc3RTbGFzaCA9IGluZGV4MjsKICAgICAgZG90cyA9IDA7CiAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA0NiAmJiBkb3RzID4gLTEpIHsKICAgICAgZG90cysrOwogICAgfSBlbHNlIHsKICAgICAgZG90cyA9IC0xOwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGFzc2VydFBhdGgocGF0aDIpIHsKICBpZiAodHlwZW9mIHBhdGgyICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigKICAgICAgIlBhdGggbXVzdCBiZSBhIHN0cmluZy4gUmVjZWl2ZWQgIiArIEpTT04uc3RyaW5naWZ5KHBhdGgyKQogICAgKTsKICB9Cn0KdmFyIG1pbnBhdGg7CnZhciBpbml0X21pbnBhdGhfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucGF0aC5icm93c2VyLmpzIigpIHsKICAgIG1pbnBhdGggPSB7IGJhc2VuYW1lLCBkaXJuYW1lLCBleHRuYW1lLCBqb2luLCBzZXA6ICIvIiB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW5wcm9jLmJyb3dzZXIuanMKZnVuY3Rpb24gY3dkKCkgewogIHJldHVybiAiLyI7Cn0KdmFyIG1pbnByb2M7CnZhciBpbml0X21pbnByb2NfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWlucHJvYy5icm93c2VyLmpzIigpIHsKICAgIG1pbnByb2MgPSB7IGN3ZCB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuc2hhcmVkLmpzCmZ1bmN0aW9uIGlzVXJsKGZpbGVVcmxPclBhdGgpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIGZpbGVVcmxPclBhdGggIT09IG51bGwgJiYgdHlwZW9mIGZpbGVVcmxPclBhdGggPT09ICJvYmplY3QiICYmICJocmVmIiBpbiBmaWxlVXJsT3JQYXRoICYmIGZpbGVVcmxPclBhdGguaHJlZiAmJiAicHJvdG9jb2wiIGluIGZpbGVVcmxPclBhdGggJiYgZmlsZVVybE9yUGF0aC5wcm90b2NvbCAmJiAvLyBAdHMtZXhwZWN0LWVycm9yOiBpbmRleGluZyBpcyBmaW5lLgogICAgZmlsZVVybE9yUGF0aC5hdXRoID09PSB2b2lkIDAKICApOwp9CnZhciBpbml0X21pbnVybF9zaGFyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS92ZmlsZUA2LjAuMy9ub2RlX21vZHVsZXMvdmZpbGUvbGliL21pbnVybC5zaGFyZWQuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9taW51cmwuYnJvd3Nlci5qcwpmdW5jdGlvbiB1cmxUb1BhdGgocGF0aDIpIHsKICBpZiAodHlwZW9mIHBhdGgyID09PSAic3RyaW5nIikgewogICAgcGF0aDIgPSBuZXcgVVJMKHBhdGgyKTsKICB9IGVsc2UgaWYgKCFpc1VybChwYXRoMikpIHsKICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcigKICAgICAgJ1RoZSAicGF0aCIgYXJndW1lbnQgbXVzdCBiZSBvZiB0eXBlIHN0cmluZyBvciBhbiBpbnN0YW5jZSBvZiBVUkwuIFJlY2VpdmVkIGAnICsgcGF0aDIgKyAiYCIKICAgICk7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX0FSR19UWVBFIjsKICAgIHRocm93IGVycm9yOwogIH0KICBpZiAocGF0aDIucHJvdG9jb2wgIT09ICJmaWxlOiIpIHsKICAgIGNvbnN0IGVycm9yID0gbmV3IFR5cGVFcnJvcigiVGhlIFVSTCBtdXN0IGJlIG9mIHNjaGVtZSBmaWxlIik7CiAgICBlcnJvci5jb2RlID0gIkVSUl9JTlZBTElEX1VSTF9TQ0hFTUUiOwogICAgdGhyb3cgZXJyb3I7CiAgfQogIHJldHVybiBnZXRQYXRoRnJvbVVSTFBvc2l4KHBhdGgyKTsKfQpmdW5jdGlvbiBnZXRQYXRoRnJvbVVSTFBvc2l4KHVybCkgewogIGlmICh1cmwuaG9zdG5hbWUgIT09ICIiKSB7CiAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICdGaWxlIFVSTCBob3N0IG11c3QgYmUgImxvY2FsaG9zdCIgb3IgZW1wdHkgb24gZGFyd2luJwogICAgKTsKICAgIGVycm9yLmNvZGUgPSAiRVJSX0lOVkFMSURfRklMRV9VUkxfSE9TVCI7CiAgICB0aHJvdyBlcnJvcjsKICB9CiAgY29uc3QgcGF0aG5hbWUgPSB1cmwucGF0aG5hbWU7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHBhdGhuYW1lLmxlbmd0aCkgewogICAgaWYgKHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MikgPT09IDM3ICYmIHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MiArIDEpID09PSA1MCkgewogICAgICBjb25zdCB0aGlyZCA9IHBhdGhuYW1lLmNvZGVQb2ludEF0KGluZGV4MiArIDIpOwogICAgICBpZiAodGhpcmQgPT09IDcwIHx8IHRoaXJkID09PSAxMDIpIHsKICAgICAgICBjb25zdCBlcnJvciA9IG5ldyBUeXBlRXJyb3IoCiAgICAgICAgICAiRmlsZSBVUkwgcGF0aCBtdXN0IG5vdCBpbmNsdWRlIGVuY29kZWQgLyBjaGFyYWN0ZXJzIgogICAgICAgICk7CiAgICAgICAgZXJyb3IuY29kZSA9ICJFUlJfSU5WQUxJRF9GSUxFX1VSTF9QQVRIIjsKICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgfQogICAgfQogIH0KICByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHBhdGhuYW1lKTsKfQp2YXIgaW5pdF9taW51cmxfYnJvd3NlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvbWludXJsLmJyb3dzZXIuanMiKCkgewogICAgaW5pdF9taW51cmxfc2hhcmVkKCk7CiAgICBpbml0X21pbnVybF9zaGFyZWQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3ZmaWxlQDYuMC4zL25vZGVfbW9kdWxlcy92ZmlsZS9saWIvaW5kZXguanMKZnVuY3Rpb24gYXNzZXJ0UGFydChwYXJ0LCBuYW1lKSB7CiAgaWYgKHBhcnQgJiYgcGFydC5pbmNsdWRlcyhtaW5wYXRoLnNlcCkpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgImAiICsgbmFtZSArICJgIGNhbm5vdCBiZSBhIHBhdGg6IGRpZCBub3QgZXhwZWN0IGAiICsgbWlucGF0aC5zZXAgKyAiYCIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydE5vbkVtcHR5KHBhcnQsIG5hbWUpIHsKICBpZiAoIXBhcnQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiYCIgKyBuYW1lICsgImAgY2Fubm90IGJlIGVtcHR5Iik7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydFBhdGgyKHBhdGgyLCBuYW1lKSB7CiAgaWYgKCFwYXRoMikgewogICAgdGhyb3cgbmV3IEVycm9yKCJTZXR0aW5nIGAiICsgbmFtZSArICJgIHJlcXVpcmVzIGBwYXRoYCB0byBiZSBzZXQgdG9vIik7CiAgfQp9CmZ1bmN0aW9uIGlzVWludDhBcnJheTModmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICB2YWx1ZTIgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgImJ5dGVMZW5ndGgiIGluIHZhbHVlMiAmJiAiYnl0ZU9mZnNldCIgaW4gdmFsdWUyCiAgKTsKfQp2YXIgb3JkZXIsIFZGaWxlOwp2YXIgaW5pdF9saWI0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3ZmaWxlX21lc3NhZ2UoKTsKICAgIGluaXRfbWlucGF0aF9icm93c2VyKCk7CiAgICBpbml0X21pbnByb2NfYnJvd3NlcigpOwogICAgaW5pdF9taW51cmxfYnJvd3NlcigpOwogICAgb3JkZXIgPSAvKiogQHR5cGUge2NvbnN0fSAqLwogICAgWwogICAgICAiaGlzdG9yeSIsCiAgICAgICJwYXRoIiwKICAgICAgImJhc2VuYW1lIiwKICAgICAgInN0ZW0iLAogICAgICAiZXh0bmFtZSIsCiAgICAgICJkaXJuYW1lIgogICAgXTsKICAgIFZGaWxlID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgbmV3IHZpcnR1YWwgZmlsZS4KICAgICAgICoKICAgICAgICogYG9wdGlvbnNgIGlzIHRyZWF0ZWQgYXM6CiAgICAgICAqCiAgICAgICAqICogICBgc3RyaW5nYCBvciBgVWludDhBcnJheWAg4oCUIGB7dmFsdWU6IG9wdGlvbnN9YAogICAgICAgKiAqICAgYFVSTGAg4oCUIGB7cGF0aDogb3B0aW9uc31gCiAgICAgICAqICogICBgVkZpbGVgIOKAlCBzaGFsbG93IGNvcGllcyBpdHMgZGF0YSBvdmVyIHRvIHRoZSBuZXcgZmlsZQogICAgICAgKiAqICAgYG9iamVjdGAg4oCUIGFsbCBmaWVsZHMgYXJlIHNoYWxsb3cgY29waWVkIG92ZXIgdG8gdGhlIG5ldyBmaWxlCiAgICAgICAqCiAgICAgICAqIFBhdGggcmVsYXRlZCBmaWVsZHMgYXJlIHNldCBpbiB0aGUgZm9sbG93aW5nIG9yZGVyIChsZWFzdCBzcGVjaWZpYyB0bwogICAgICAgKiBtb3N0IHNwZWNpZmljKTogYGhpc3RvcnlgLCBgcGF0aGAsIGBiYXNlbmFtZWAsIGBzdGVtYCwgYGV4dG5hbWVgLAogICAgICAgKiBgZGlybmFtZWAuCiAgICAgICAqCiAgICAgICAqIFlvdSBjYW5ub3Qgc2V0IGBkaXJuYW1lYCBvciBgZXh0bmFtZWAgd2l0aG91dCBzZXR0aW5nIGVpdGhlciBgaGlzdG9yeWAsCiAgICAgICAqIGBwYXRoYCwgYGJhc2VuYW1lYCwgb3IgYHN0ZW1gIHRvby4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ZhbHVlXQogICAgICAgKiAgIEZpbGUgdmFsdWUuCiAgICAgICAqIEByZXR1cm5zCiAgICAgICAqICAgTmV3IGluc3RhbmNlLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IodmFsdWUyKSB7CiAgICAgICAgbGV0IG9wdGlvbnM7CiAgICAgICAgaWYgKCF2YWx1ZTIpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7fTsKICAgICAgICB9IGVsc2UgaWYgKGlzVXJsKHZhbHVlMikpIHsKICAgICAgICAgIG9wdGlvbnMgPSB7IHBhdGg6IHZhbHVlMiB9OwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgfHwgaXNVaW50OEFycmF5Myh2YWx1ZTIpKSB7CiAgICAgICAgICBvcHRpb25zID0geyB2YWx1ZTogdmFsdWUyIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3dkID0gImN3ZCIgaW4gb3B0aW9ucyA/ICIiIDogbWlucHJvYy5jd2QoKTsKICAgICAgICB0aGlzLmRhdGEgPSB7fTsKICAgICAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgICAgICB0aGlzLm1lc3NhZ2VzID0gW107CiAgICAgICAgdGhpcy52YWx1ZTsKICAgICAgICB0aGlzLm1hcDsKICAgICAgICB0aGlzLnJlc3VsdDsKICAgICAgICB0aGlzLnN0b3JlZDsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgb3JkZXIubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBmaWVsZDIgPSBvcmRlcltpbmRleDJdOwogICAgICAgICAgaWYgKGZpZWxkMiBpbiBvcHRpb25zICYmIG9wdGlvbnNbZmllbGQyXSAhPT0gdm9pZCAwICYmIG9wdGlvbnNbZmllbGQyXSAhPT0gbnVsbCkgewogICAgICAgICAgICB0aGlzW2ZpZWxkMl0gPSBmaWVsZDIgPT09ICJoaXN0b3J5IiA/IFsuLi5vcHRpb25zW2ZpZWxkMl1dIDogb3B0aW9uc1tmaWVsZDJdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBsZXQgZmllbGQ7CiAgICAgICAgZm9yIChmaWVsZCBpbiBvcHRpb25zKSB7CiAgICAgICAgICBpZiAoIW9yZGVyLmluY2x1ZGVzKGZpZWxkKSkgewogICAgICAgICAgICB0aGlzW2ZpZWxkXSA9IG9wdGlvbnNbZmllbGRdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChleGFtcGxlOiBgJ2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBCYXNlbmFtZS4KICAgICAgICovCiAgICAgIGdldCBiYXNlbmFtZSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmJhc2VuYW1lKHRoaXMucGF0aCkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCBiYXNlbmFtZSAoaW5jbHVkaW5nIGV4dG5hbWUpIChgJ2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIG51bGxpZmllZCAodXNlIGBmaWxlLnBhdGggPSBmaWxlLmRpcm5hbWVgIGluc3RlYWQpLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYmFzZW5hbWUKICAgICAgICogICBCYXNlbmFtZS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IGJhc2VuYW1lKGJhc2VuYW1lMikgewogICAgICAgIGFzc2VydE5vbkVtcHR5KGJhc2VuYW1lMiwgImJhc2VuYW1lIik7CiAgICAgICAgYXNzZXJ0UGFydChiYXNlbmFtZTIsICJiYXNlbmFtZSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgIiIsIGJhc2VuYW1lMik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZyB8IHVuZGVmaW5lZH0KICAgICAgICogICBEaXJuYW1lLgogICAgICAgKi8KICAgICAgZ2V0IGRpcm5hbWUoKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiB0aGlzLnBhdGggPT09ICJzdHJpbmciID8gbWlucGF0aC5kaXJuYW1lKHRoaXMucGF0aCkgOiB2b2lkIDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgcGFyZW50IHBhdGggKGV4YW1wbGU6IGAnfidgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGRpcm5hbWUKICAgICAgICogICBEaXJuYW1lLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgZGlybmFtZShkaXJuYW1lMikgewogICAgICAgIGFzc2VydFBhdGgyKHRoaXMuYmFzZW5hbWUsICJkaXJuYW1lIik7CiAgICAgICAgdGhpcy5wYXRoID0gbWlucGF0aC5qb2luKGRpcm5hbWUyIHx8ICIiLCB0aGlzLmJhc2VuYW1lKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBleHRuYW1lIChpbmNsdWRpbmcgZG90KSAoZXhhbXBsZTogYCcuanMnYCkuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtzdHJpbmcgfCB1bmRlZmluZWR9CiAgICAgICAqICAgRXh0bmFtZS4KICAgICAgICovCiAgICAgIGdldCBleHRuYW1lKCkgewogICAgICAgIHJldHVybiB0eXBlb2YgdGhpcy5wYXRoID09PSAic3RyaW5nIiA/IG1pbnBhdGguZXh0bmFtZSh0aGlzLnBhdGgpIDogdm9pZCAwOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgdGhlIGV4dG5hbWUgKGluY2x1ZGluZyBkb3QpIChleGFtcGxlOiBgJy5qcydgKS4KICAgICAgICoKICAgICAgICogQ2Fubm90IGNvbnRhaW4gcGF0aCBzZXBhcmF0b3JzIChgJy8nYCBvbiB1bml4LCBtYWNPUywgYW5kIGJyb3dzZXJzLCBgJ1wnYAogICAgICAgKiBvbiB3aW5kb3dzKS4KICAgICAgICogQ2Fubm90IGJlIHNldCBpZiB0aGVyZeKAmXMgbm8gYHBhdGhgIHlldC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCB1bmRlZmluZWR9IGV4dG5hbWUKICAgICAgICogICBFeHRuYW1lLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXQgZXh0bmFtZShleHRuYW1lMikgewogICAgICAgIGFzc2VydFBhcnQoZXh0bmFtZTIsICJleHRuYW1lIik7CiAgICAgICAgYXNzZXJ0UGF0aDIodGhpcy5kaXJuYW1lLCAiZXh0bmFtZSIpOwogICAgICAgIGlmIChleHRuYW1lMikgewogICAgICAgICAgaWYgKGV4dG5hbWUyLmNvZGVQb2ludEF0KDApICE9PSA0NikgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBtdXN0IHN0YXJ0IHdpdGggYC5gIik7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZXh0bmFtZTIuaW5jbHVkZXMoIi4iLCAxKSkgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImBleHRuYW1lYCBjYW5ub3QgY29udGFpbiBtdWx0aXBsZSBkb3RzIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUsIHRoaXMuc3RlbSArIChleHRuYW1lMiB8fCAiIikpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIGZ1bGwgcGF0aCAoZXhhbXBsZTogYCd+L2luZGV4Lm1pbi5qcydgKS4KICAgICAgICoKICAgICAgICogQHJldHVybnMge3N0cmluZ30KICAgICAgICogICBQYXRoLgogICAgICAgKi8KICAgICAgZ2V0IHBhdGgoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlzdG9yeVt0aGlzLmhpc3RvcnkubGVuZ3RoIC0gMV07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNldCB0aGUgZnVsbCBwYXRoIChleGFtcGxlOiBgJ34vaW5kZXgubWluLmpzJ2ApLgogICAgICAgKgogICAgICAgKiBDYW5ub3QgYmUgbnVsbGlmaWVkLgogICAgICAgKiBZb3UgY2FuIHNldCBhIGZpbGUgVVJMIChhIGBVUkxgIG9iamVjdCB3aXRoIGEgYGZpbGU6YCBwcm90b2NvbCkgd2hpY2ggd2lsbAogICAgICAgKiBiZSB0dXJuZWQgaW50byBhIHBhdGggd2l0aCBgdXJsLmZpbGVVUkxUb1BhdGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1VSTCB8IHN0cmluZ30gcGF0aAogICAgICAgKiAgIFBhdGguCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHNldCBwYXRoKHBhdGgyKSB7CiAgICAgICAgaWYgKGlzVXJsKHBhdGgyKSkgewogICAgICAgICAgcGF0aDIgPSB1cmxUb1BhdGgocGF0aDIpOwogICAgICAgIH0KICAgICAgICBhc3NlcnROb25FbXB0eShwYXRoMiwgInBhdGgiKTsKICAgICAgICBpZiAodGhpcy5wYXRoICE9PSBwYXRoMikgewogICAgICAgICAgdGhpcy5oaXN0b3J5LnB1c2gocGF0aDIpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIFN0ZW0uCiAgICAgICAqLwogICAgICBnZXQgc3RlbSgpIHsKICAgICAgICByZXR1cm4gdHlwZW9mIHRoaXMucGF0aCA9PT0gInN0cmluZyIgPyBtaW5wYXRoLmJhc2VuYW1lKHRoaXMucGF0aCwgdGhpcy5leHRuYW1lKSA6IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHRoZSBzdGVtIChiYXNlbmFtZSB3L28gZXh0bmFtZSkgKGV4YW1wbGU6IGAnaW5kZXgubWluJ2ApLgogICAgICAgKgogICAgICAgKiBDYW5ub3QgY29udGFpbiBwYXRoIHNlcGFyYXRvcnMgKGAnLydgIG9uIHVuaXgsIG1hY09TLCBhbmQgYnJvd3NlcnMsIGAnXCdgCiAgICAgICAqIG9uIHdpbmRvd3MpLgogICAgICAgKiBDYW5ub3QgYmUgbnVsbGlmaWVkICh1c2UgYGZpbGUucGF0aCA9IGZpbGUuZGlybmFtZWAgaW5zdGVhZCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdGVtCiAgICAgICAqICAgU3RlbS4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgc2V0IHN0ZW0oc3RlbSkgewogICAgICAgIGFzc2VydE5vbkVtcHR5KHN0ZW0sICJzdGVtIik7CiAgICAgICAgYXNzZXJ0UGFydChzdGVtLCAic3RlbSIpOwogICAgICAgIHRoaXMucGF0aCA9IG1pbnBhdGguam9pbih0aGlzLmRpcm5hbWUgfHwgIiIsIHN0ZW0gKyAodGhpcy5leHRuYW1lIHx8ICIiKSk7CiAgICAgIH0KICAgICAgLy8gTm9ybWFsIHByb3RvdHlwYWwgbWV0aG9kcy4KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhIGZhdGFsIG1lc3NhZ2UgZm9yIGByZWFzb25gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogVGhlIGBmYXRhbGAgZmllbGQgb2YgdGhlIG1lc3NhZ2UgaXMgc2V0IHRvIGB0cnVlYCAoZXJyb3I7IGZpbGUgbm90IHVzYWJsZSkKICAgICAgICogYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC4KICAgICAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc10KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZX0gY2F1c2UKICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7bmV2ZXJ9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtuZXZlcn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlIHwgc3RyaW5nfSBjYXVzZU9yUmVhc29uCiAgICAgICAqICAgUmVhc29uIGZvciBtZXNzYWdlLCBzaG91bGQgdXNlIG1hcmtkb3duLgogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IE1lc3NhZ2VPcHRpb25zIHwgUG9pbnQgfCBQb3NpdGlvbiB8IHN0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcHRpb25zT3JQYXJlbnRPclBsYWNlXQogICAgICAgKiAgIENvbmZpZ3VyYXRpb24gKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiAgIFBsYWNlIGluIGNvZGUgd2hlcmUgdGhlIG1lc3NhZ2Ugb3JpZ2luYXRlcyAoZXhhbXBsZToKICAgICAgICogICBgJ215LXBhY2thZ2U6bXktcnVsZSdgIG9yIGAnbXktcnVsZSdgKS4KICAgICAgICogQHJldHVybnMge25ldmVyfQogICAgICAgKiAgIE5ldmVyLgogICAgICAgKiBAdGhyb3dzIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqICAgTWVzc2FnZS4KICAgICAgICovCiAgICAgIGZhaWwoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZTIgPSB0aGlzLm1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKTsKICAgICAgICBtZXNzYWdlMi5mYXRhbCA9IHRydWU7CiAgICAgICAgdGhyb3cgbWVzc2FnZTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZSBhbiBpbmZvIG1lc3NhZ2UgZm9yIGByZWFzb25gIGFzc29jaWF0ZWQgd2l0aCB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogVGhlIGBmYXRhbGAgZmllbGQgb2YgdGhlIG1lc3NhZ2UgaXMgc2V0IHRvIGB1bmRlZmluZWRgIChpbmZvOyBjaGFuZ2UKICAgICAgICogbGlrZWx5IG5vdCBuZWVkZWQpIGFuZCB0aGUgYGZpbGVgIGZpZWxkIGlzIHNldCB0byB0aGUgY3VycmVudCBmaWxlIHBhdGguCiAgICAgICAqIFRoZSBtZXNzYWdlIGlzIGFkZGVkIHRvIHRoZSBgbWVzc2FnZXNgIGZpZWxkIG9uIGBmaWxlYC4KICAgICAgICoKICAgICAgICogPiDwn6qmICoqTm90ZSoqOiBhbHNvIGhhcyBvYnNvbGV0ZSBzaWduYXR1cmVzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge01lc3NhZ2VPcHRpb25zIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNdCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtQb2ludCB8IFBvc2l0aW9uIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGxhY2UKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge05vZGUgfCBOb2RlTGlrZSB8IG51bGwgfCB1bmRlZmluZWR9IHBhcmVudAogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0Vycm9yIHwgVkZpbGVNZXNzYWdlfSBjYXVzZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2UgfCBzdHJpbmd9IGNhdXNlT3JSZWFzb24KICAgICAgICogICBSZWFzb24gZm9yIG1lc3NhZ2UsIHNob3VsZCB1c2UgbWFya2Rvd24uCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgTWVzc2FnZU9wdGlvbnMgfCBQb2ludCB8IFBvc2l0aW9uIHwgc3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29wdGlvbnNPclBhcmVudE9yUGxhY2VdCiAgICAgICAqICAgQ29uZmlndXJhdGlvbiAob3B0aW9uYWwpLgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqICAgUGxhY2UgaW4gY29kZSB3aGVyZSB0aGUgbWVzc2FnZSBvcmlnaW5hdGVzIChleGFtcGxlOgogICAgICAgKiAgIGAnbXktcGFja2FnZTpteS1ydWxlJ2Agb3IgYCdteS1ydWxlJ2ApLgogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKiAgIE1lc3NhZ2UuCiAgICAgICAqLwogICAgICBpbmZvKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbikgewogICAgICAgIGNvbnN0IG1lc3NhZ2UyID0gdGhpcy5tZXNzYWdlKGNhdXNlT3JSZWFzb24sIG9wdGlvbnNPclBhcmVudE9yUGxhY2UsIG9yaWdpbik7CiAgICAgICAgbWVzc2FnZTIuZmF0YWwgPSB2b2lkIDA7CiAgICAgICAgcmV0dXJuIG1lc3NhZ2UyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBtZXNzYWdlIGZvciBgcmVhc29uYCBhc3NvY2lhdGVkIHdpdGggdGhlIGZpbGUuCiAgICAgICAqCiAgICAgICAqIFRoZSBgZmF0YWxgIGZpZWxkIG9mIHRoZSBtZXNzYWdlIGlzIHNldCB0byBgZmFsc2VgICh3YXJuaW5nOyBjaGFuZ2UgbWF5IGJlCiAgICAgICAqIG5lZWRlZCkgYW5kIHRoZSBgZmlsZWAgZmllbGQgaXMgc2V0IHRvIHRoZSBjdXJyZW50IGZpbGUgcGF0aC4KICAgICAgICogVGhlIG1lc3NhZ2UgaXMgYWRkZWQgdG8gdGhlIGBtZXNzYWdlc2AgZmllbGQgb24gYGZpbGVgLgogICAgICAgKgogICAgICAgKiA+IPCfqqYgKipOb3RlKio6IGFsc28gaGFzIG9ic29sZXRlIHNpZ25hdHVyZXMuCiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7TWVzc2FnZU9wdGlvbnMgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc10KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSByZWFzb24KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBudWxsIHwgdW5kZWZpbmVkfSBwYXJlbnQKICAgICAgICogQHBhcmFtIHtzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3JpZ2luXQogICAgICAgKiBAcmV0dXJucyB7VkZpbGVNZXNzYWdlfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtzdHJpbmd9IHJlYXNvbgogICAgICAgKiBAcGFyYW0ge1BvaW50IHwgUG9zaXRpb24gfCBudWxsIHwgdW5kZWZpbmVkfSBwbGFjZQogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtvcmlnaW5dCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gcmVhc29uCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7Tm9kZSB8IE5vZGVMaWtlIHwgbnVsbCB8IHVuZGVmaW5lZH0gcGFyZW50CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7UG9pbnQgfCBQb3NpdGlvbiB8IG51bGwgfCB1bmRlZmluZWR9IHBsYWNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7RXJyb3IgfCBWRmlsZU1lc3NhZ2V9IGNhdXNlCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogQHJldHVybnMge1ZGaWxlTWVzc2FnZX0KICAgICAgICoKICAgICAgICogQHBhcmFtIHtFcnJvciB8IFZGaWxlTWVzc2FnZSB8IHN0cmluZ30gY2F1c2VPclJlYXNvbgogICAgICAgKiAgIFJlYXNvbiBmb3IgbWVzc2FnZSwgc2hvdWxkIHVzZSBtYXJrZG93bi4KICAgICAgICogQHBhcmFtIHtOb2RlIHwgTm9kZUxpa2UgfCBNZXNzYWdlT3B0aW9ucyB8IFBvaW50IHwgUG9zaXRpb24gfCBzdHJpbmcgfCBudWxsIHwgdW5kZWZpbmVkfSBbb3B0aW9uc09yUGFyZW50T3JQbGFjZV0KICAgICAgICogICBDb25maWd1cmF0aW9uIChvcHRpb25hbCkuCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nIHwgbnVsbCB8IHVuZGVmaW5lZH0gW29yaWdpbl0KICAgICAgICogICBQbGFjZSBpbiBjb2RlIHdoZXJlIHRoZSBtZXNzYWdlIG9yaWdpbmF0ZXMgKGV4YW1wbGU6CiAgICAgICAqICAgYCdteS1wYWNrYWdlOm15LXJ1bGUnYCBvciBgJ215LXJ1bGUnYCkuCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZU1lc3NhZ2V9CiAgICAgICAqICAgTWVzc2FnZS4KICAgICAgICovCiAgICAgIG1lc3NhZ2UoY2F1c2VPclJlYXNvbiwgb3B0aW9uc09yUGFyZW50T3JQbGFjZSwgb3JpZ2luKSB7CiAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBuZXcgVkZpbGVNZXNzYWdlKAogICAgICAgICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogdGhlIG92ZXJsb2FkcyBhcmUgZmluZS4KICAgICAgICAgIGNhdXNlT3JSZWFzb24sCiAgICAgICAgICBvcHRpb25zT3JQYXJlbnRPclBsYWNlLAogICAgICAgICAgb3JpZ2luCiAgICAgICAgKTsKICAgICAgICBpZiAodGhpcy5wYXRoKSB7CiAgICAgICAgICBtZXNzYWdlMi5uYW1lID0gdGhpcy5wYXRoICsgIjoiICsgbWVzc2FnZTIubmFtZTsKICAgICAgICAgIG1lc3NhZ2UyLmZpbGUgPSB0aGlzLnBhdGg7CiAgICAgICAgfQogICAgICAgIG1lc3NhZ2UyLmZhdGFsID0gZmFsc2U7CiAgICAgICAgdGhpcy5tZXNzYWdlcy5wdXNoKG1lc3NhZ2UyKTsKICAgICAgICByZXR1cm4gbWVzc2FnZTI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFNlcmlhbGl6ZSB0aGUgZmlsZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogd2hpY2ggZW5jb2RpbmdzIGFyZSBzdXBwb3J0ZWQgZGVwZW5kcyBvbiB0aGUgZW5naW5lLgogICAgICAgKiA+IEZvciBpbmZvIG9uIE5vZGUuanMsIHNlZToKICAgICAgICogPiA8aHR0cHM6Ly9ub2RlanMub3JnL2FwaS91dGlsLmh0bWwjd2hhdHdnLXN1cHBvcnRlZC1lbmNvZGluZ3M+LgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge3N0cmluZyB8IG51bGwgfCB1bmRlZmluZWR9IFtlbmNvZGluZz0ndXRmOCddCiAgICAgICAqICAgQ2hhcmFjdGVyIGVuY29kaW5nIHRvIHVuZGVyc3RhbmQgYHZhbHVlYCBhcyB3aGVuIGl04oCZcyBhIGBVaW50OEFycmF5YAogICAgICAgKiAgIChkZWZhdWx0OiBgJ3V0Zi04J2ApLgogICAgICAgKiBAcmV0dXJucyB7c3RyaW5nfQogICAgICAgKiAgIFNlcmlhbGl6ZWQgZmlsZS4KICAgICAgICovCiAgICAgIHRvU3RyaW5nKGVuY29kaW5nKSB7CiAgICAgICAgaWYgKHRoaXMudmFsdWUgPT09IHZvaWQgMCkgewogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHRoaXMudmFsdWUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgICAgICB9CiAgICAgICAgY29uc3QgZGVjb2RlcjIgPSBuZXcgVGV4dERlY29kZXIoZW5jb2RpbmcgfHwgdm9pZCAwKTsKICAgICAgICByZXR1cm4gZGVjb2RlcjIuZGVjb2RlKHRoaXMudmFsdWUpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzCnZhciBpbml0X3ZmaWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdmZpbGVANi4wLjMvbm9kZV9tb2R1bGVzL3ZmaWxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliNCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2NhbGxhYmxlLWluc3RhbmNlLmpzCnZhciBDYWxsYWJsZUluc3RhbmNlOwp2YXIgaW5pdF9jYWxsYWJsZV9pbnN0YW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2xpYi9jYWxsYWJsZS1pbnN0YW5jZS5qcyIoKSB7CiAgICBDYWxsYWJsZUluc3RhbmNlID0gLyoqCiAgICAgKiBAdHlwZSB7bmV3IDxQYXJhbWV0ZXJzIGV4dGVuZHMgQXJyYXk8dW5rbm93bj4sIFJlc3VsdD4ocHJvcGVydHk6IHN0cmluZyB8IHN5bWJvbCkgPT4gKC4uLnBhcmFtZXRlcnM6IFBhcmFtZXRlcnMpID0+IFJlc3VsdH0KICAgICAqLwogICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLwogICAgLyoqCiAgICAgKiBAdGhpcyB7RnVuY3Rpb259CiAgICAgKiBAcGFyYW0ge3N0cmluZyB8IHN5bWJvbH0gcHJvcGVydHkKICAgICAqIEByZXR1cm5zIHsoLi4ucGFyYW1ldGVyczogQXJyYXk8dW5rbm93bj4pID0+IHVua25vd259CiAgICAgKi8KICAgIChmdW5jdGlvbihwcm9wZXJ0eTExKSB7CiAgICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgICAgY29uc3QgY29uc3RyID0gc2VsZjIuY29uc3RydWN0b3I7CiAgICAgIGNvbnN0IHByb3RvID0gKAogICAgICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZyB8IHN5bWJvbCwgRnVuY3Rpb24+fSAqLwogICAgICAgIC8vIFByb3RvdHlwZXMgZG8gZXhpc3QuCiAgICAgICAgLy8gdHlwZS1jb3ZlcmFnZTppZ25vcmUtbmV4dC1saW5lCiAgICAgICAgY29uc3RyLnByb3RvdHlwZQogICAgICApOwogICAgICBjb25zdCB2YWx1ZTIgPSBwcm90b1twcm9wZXJ0eTExXTsKICAgICAgY29uc3QgYXBwbHkgPSBmdW5jdGlvbigpIHsKICAgICAgICByZXR1cm4gdmFsdWUyLmFwcGx5KGFwcGx5LCBhcmd1bWVudHMpOwogICAgICB9OwogICAgICBPYmplY3Quc2V0UHJvdG90eXBlT2YoYXBwbHksIHByb3RvKTsKICAgICAgcmV0dXJuIGFwcGx5OwogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9saWIvaW5kZXguanMKZnVuY3Rpb24gYXNzZXJ0UGFyc2VyKG5hbWUsIHZhbHVlMikgewogIGlmICh0eXBlb2YgdmFsdWUyICE9PSAiZnVuY3Rpb24iKSB7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYCIgKyBuYW1lICsgImAgd2l0aG91dCBgcGFyc2VyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRDb21waWxlcihuYW1lLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImZ1bmN0aW9uIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGAiICsgbmFtZSArICJgIHdpdGhvdXQgYGNvbXBpbGVyYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnRVbmZyb3plbihuYW1lLCBmcm96ZW4pIHsKICBpZiAoZnJvemVuKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3QgY2FsbCBgIiArIG5hbWUgKyAiYCBvbiBhIGZyb3plbiBwcm9jZXNzb3IuXG5DcmVhdGUgYSBuZXcgcHJvY2Vzc29yIGZpcnN0LCBieSBjYWxsaW5nIGl0OiB1c2UgYHByb2Nlc3NvcigpYCBpbnN0ZWFkIG9mIGBwcm9jZXNzb3JgLiIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGFzc2VydE5vZGUobm9kZTIpIHsKICBpZiAoIWlzUGxhaW5PYmplY3Qobm9kZTIpIHx8IHR5cGVvZiBub2RlMi50eXBlICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgbm9kZSwgZ290IGAiICsgbm9kZTIgKyAiYCIpOwogIH0KfQpmdW5jdGlvbiBhc3NlcnREb25lKG5hbWUsIGFzeW5jTmFtZSwgY29tcGxldGUpIHsKICBpZiAoIWNvbXBsZXRlKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJgIiArIG5hbWUgKyAiYCBmaW5pc2hlZCBhc3luYy4gVXNlIGAiICsgYXN5bmNOYW1lICsgImAgaW5zdGVhZCIKICAgICk7CiAgfQp9CmZ1bmN0aW9uIHZmaWxlKHZhbHVlMikgewogIHJldHVybiBsb29rc0xpa2VBVkZpbGUodmFsdWUyKSA/IHZhbHVlMiA6IG5ldyBWRmlsZSh2YWx1ZTIpOwp9CmZ1bmN0aW9uIGxvb2tzTGlrZUFWRmlsZSh2YWx1ZTIpIHsKICByZXR1cm4gQm9vbGVhbigKICAgIHZhbHVlMiAmJiB0eXBlb2YgdmFsdWUyID09PSAib2JqZWN0IiAmJiAibWVzc2FnZSIgaW4gdmFsdWUyICYmICJtZXNzYWdlcyIgaW4gdmFsdWUyCiAgKTsKfQpmdW5jdGlvbiBsb29rc0xpa2VBVmFsdWUodmFsdWUyKSB7CiAgcmV0dXJuIHR5cGVvZiB2YWx1ZTIgPT09ICJzdHJpbmciIHx8IGlzVWludDhBcnJheTQodmFsdWUyKTsKfQpmdW5jdGlvbiBpc1VpbnQ4QXJyYXk0KHZhbHVlMikgewogIHJldHVybiBCb29sZWFuKAogICAgdmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiICYmICJieXRlTGVuZ3RoIiBpbiB2YWx1ZTIgJiYgImJ5dGVPZmZzZXQiIGluIHZhbHVlMgogICk7Cn0KdmFyIGltcG9ydF9leHRlbmQsIG93biwgUHJvY2Vzc29yLCB1bmlmaWVkOwp2YXIgaW5pdF9saWI1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pZmllZEAxMS4wLjUvbm9kZV9tb2R1bGVzL3VuaWZpZWQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfYmFpbCgpOwogICAgaW1wb3J0X2V4dGVuZCA9IF9fdG9FU00ocmVxdWlyZV9leHRlbmQoKSwgMSk7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfaXNfcGxhaW5fb2JqKCk7CiAgICBpbml0X3Ryb3VnaCgpOwogICAgaW5pdF92ZmlsZSgpOwogICAgaW5pdF9jYWxsYWJsZV9pbnN0YW5jZSgpOwogICAgb3duID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBQcm9jZXNzb3IgPSBjbGFzcyBfUHJvY2Vzc29yIGV4dGVuZHMgQ2FsbGFibGVJbnN0YW5jZSB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlcigiY29weSIpOwogICAgICAgIHRoaXMuQ29tcGlsZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5QYXJzZXIgPSB2b2lkIDA7CiAgICAgICAgdGhpcy5hdHRhY2hlcnMgPSBbXTsKICAgICAgICB0aGlzLmNvbXBpbGVyID0gdm9pZCAwOwogICAgICAgIHRoaXMuZnJlZXplSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmZyb3plbiA9IHZvaWQgMDsKICAgICAgICB0aGlzLm5hbWVzcGFjZSA9IHt9OwogICAgICAgIHRoaXMucGFyc2VyID0gdm9pZCAwOwogICAgICAgIHRoaXMudHJhbnNmb3JtZXJzID0gdHJvdWdoKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENvcHkgYSBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEBkZXByZWNhdGVkCiAgICAgICAqICAgVGhpcyBpcyBhIHByaXZhdGUgaW50ZXJuYWwgbWV0aG9kIGFuZCBzaG91bGQgbm90IGJlIHVzZWQuCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBOZXcgKnVuZnJvemVuKiBwcm9jZXNzb3IgKHtAbGlua2NvZGUgUHJvY2Vzc29yfSkgdGhhdCBpcwogICAgICAgKiAgIGNvbmZpZ3VyZWQgdG8gd29yayB0aGUgc2FtZSBhcyBpdHMgYW5jZXN0b3IuCiAgICAgICAqICAgV2hlbiB0aGUgZGVzY2VuZGFudCBwcm9jZXNzb3IgaXMgY29uZmlndXJlZCBpbiB0aGUgZnV0dXJlIGl0IGRvZXMgbm90CiAgICAgICAqICAgYWZmZWN0IHRoZSBhbmNlc3RyYWwgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgY29weSgpIHsKICAgICAgICBjb25zdCBkZXN0aW5hdGlvbiA9ICgKICAgICAgICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yPFBhcnNlVHJlZSwgSGVhZFRyZWUsIFRhaWxUcmVlLCBDb21waWxlVHJlZSwgQ29tcGlsZVJlc3VsdD59ICovCiAgICAgICAgICBuZXcgX1Byb2Nlc3NvcigpCiAgICAgICAgKTsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgdGhpcy5hdHRhY2hlcnMubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCBhdHRhY2hlciA9IHRoaXMuYXR0YWNoZXJzW2luZGV4Ml07CiAgICAgICAgICBkZXN0aW5hdGlvbi51c2UoLi4uYXR0YWNoZXIpOwogICAgICAgIH0KICAgICAgICBkZXN0aW5hdGlvbi5kYXRhKCgwLCBpbXBvcnRfZXh0ZW5kLmRlZmF1bHQpKHRydWUsIHt9LCB0aGlzLm5hbWVzcGFjZSkpOwogICAgICAgIHJldHVybiBkZXN0aW5hdGlvbjsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3Igd2l0aCBpbmZvIGF2YWlsYWJsZSB0byBhbGwgcGx1Z2lucy4KICAgICAgICogSW5mb3JtYXRpb24gaXMgc3RvcmVkIGluIGFuIG9iamVjdC4KICAgICAgICoKICAgICAgICogVHlwaWNhbGx5LCBvcHRpb25zIGNhbiBiZSBnaXZlbiB0byBhIHNwZWNpZmljIHBsdWdpbiwgYnV0IHNvbWV0aW1lcyBpdAogICAgICAgKiBtYWtlcyBzZW5zZSB0byBoYXZlIGluZm9ybWF0aW9uIHNoYXJlZCB3aXRoIHNldmVyYWwgcGx1Z2lucy4KICAgICAgICogRm9yIGV4YW1wbGUsIGEgbGlzdCBvZiBIVE1MIGVsZW1lbnRzIHRoYXQgYXJlIHNlbGYtY2xvc2luZywgd2hpY2ggaXMKICAgICAgICogbmVlZGVkIGR1cmluZyBhbGwgcGhhc2VzLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBzZXR0aW5nIGluZm9ybWF0aW9uIGNhbm5vdCBvY2N1ciBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiB0byByZWdpc3RlciBjdXN0b20gZGF0YSBpbiBUeXBlU2NyaXB0LCBhdWdtZW50IHRoZQogICAgICAgKiA+IHtAbGlua2NvZGUgRGF0YX0gaW50ZXJmYWNlLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBzaG93IGhvdyB0byBnZXQgYW5kIHNldCBpbmZvOgogICAgICAgKgogICAgICAgKiAgIGBgYGpzCiAgICAgICAqICAgaW1wb3J0IHt1bmlmaWVkfSBmcm9tICd1bmlmaWVkJwogICAgICAgKgogICAgICAgKiAgIGNvbnN0IHByb2Nlc3NvciA9IHVuaWZpZWQoKS5kYXRhKCdhbHBoYScsICdicmF2bycpCiAgICAgICAqCiAgICAgICAqICAgcHJvY2Vzc29yLmRhdGEoJ2FscGhhJykgLy8gPT4gJ2JyYXZvJwogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKCkgLy8gPT4ge2FscGhhOiAnYnJhdm8nfQogICAgICAgKgogICAgICAgKiAgIHByb2Nlc3Nvci5kYXRhKHtjaGFybGllOiAnZGVsdGEnfSkKICAgICAgICoKICAgICAgICogICBwcm9jZXNzb3IuZGF0YSgpIC8vID0+IHtjaGFybGllOiAnZGVsdGEnfQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge2tleW9mIERhdGF9IEtleQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHJldHVybnMge0RhdGF9CiAgICAgICAqCiAgICAgICAqIEBvdmVybG9hZAogICAgICAgKiBAcGFyYW0ge0RhdGF9IGRhdGFzZXQKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcmV0dXJucyB7RGF0YVtLZXldfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtLZXl9IGtleQogICAgICAgKiBAcGFyYW0ge0RhdGFbS2V5XX0gdmFsdWUKICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0RhdGEgfCBLZXl9IFtrZXldCiAgICAgICAqICAgS2V5IHRvIGdldCBvciBzZXQsIG9yIGVudGlyZSBkYXRhc2V0IHRvIHNldCwgb3Igbm90aGluZyB0byBnZXQgdGhlCiAgICAgICAqICAgZW50aXJlIGRhdGFzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHBhcmFtIHtEYXRhW0tleV19IFt2YWx1ZV0KICAgICAgICogICBWYWx1ZSB0byBzZXQgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge3Vua25vd259CiAgICAgICAqICAgVGhlIGN1cnJlbnQgcHJvY2Vzc29yIHdoZW4gc2V0dGluZywgdGhlIHZhbHVlIGF0IGBrZXlgIHdoZW4gZ2V0dGluZywgb3IKICAgICAgICogICB0aGUgZW50aXJlIGRhdGFzZXQgd2hlbiBnZXR0aW5nIHdpdGhvdXQga2V5LgogICAgICAgKi8KICAgICAgZGF0YShrZXkyLCB2YWx1ZTIpIHsKICAgICAgICBpZiAodHlwZW9mIGtleTIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA9PT0gMikgewogICAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgICAgdGhpcy5uYW1lc3BhY2Vba2V5Ml0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG93bi5jYWxsKHRoaXMubmFtZXNwYWNlLCBrZXkyKSAmJiB0aGlzLm5hbWVzcGFjZVtrZXkyXSB8fCB2b2lkIDA7CiAgICAgICAgfQogICAgICAgIGlmIChrZXkyKSB7CiAgICAgICAgICBhc3NlcnRVbmZyb3plbigiZGF0YSIsIHRoaXMuZnJvemVuKTsKICAgICAgICAgIHRoaXMubmFtZXNwYWNlID0ga2V5MjsKICAgICAgICAgIHJldHVybiB0aGlzOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5uYW1lc3BhY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEZyZWV6ZSBhIHByb2Nlc3Nvci4KICAgICAgICoKICAgICAgICogRnJvemVuIHByb2Nlc3NvcnMgYXJlIG1lYW50IHRvIGJlIGV4dGVuZGVkIGFuZCBub3QgdG8gYmUgY29uZmlndXJlZAogICAgICAgKiBkaXJlY3RseS4KICAgICAgICoKICAgICAgICogV2hlbiBhIHByb2Nlc3NvciBpcyBmcm96ZW4gaXQgY2Fubm90IGJlIHVuZnJvemVuLgogICAgICAgKiBOZXcgcHJvY2Vzc29ycyB3b3JraW5nIHRoZSBzYW1lIHdheSBjYW4gYmUgY3JlYXRlZCBieSBjYWxsaW5nIHRoZQogICAgICAgKiBwcm9jZXNzb3IuCiAgICAgICAqCiAgICAgICAqIEl04oCZcyBwb3NzaWJsZSB0byBmcmVlemUgcHJvY2Vzc29ycyBleHBsaWNpdGx5IGJ5IGNhbGxpbmcgYC5mcmVlemUoKWAuCiAgICAgICAqIFByb2Nlc3NvcnMgZnJlZXplIGF1dG9tYXRpY2FsbHkgd2hlbiBgLnBhcnNlKClgLCBgLnJ1bigpYCwgYC5ydW5TeW5jKClgLAogICAgICAgKiBgLnN0cmluZ2lmeSgpYCwgYC5wcm9jZXNzKClgLCBvciBgLnByb2Nlc3NTeW5jKClgIGFyZSBjYWxsZWQuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICogICBUaGUgY3VycmVudCBwcm9jZXNzb3IuCiAgICAgICAqLwogICAgICBmcmVlemUoKSB7CiAgICAgICAgaWYgKHRoaXMuZnJvemVuKSB7CiAgICAgICAgICByZXR1cm4gdGhpczsKICAgICAgICB9CiAgICAgICAgY29uc3Qgc2VsZjIgPSAoCiAgICAgICAgICAvKiogQHR5cGUge1Byb2Nlc3Nvcn0gKi8KICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgIHRoaXMKICAgICAgICApOwogICAgICAgIHdoaWxlICgrK3RoaXMuZnJlZXplSW5kZXggPCB0aGlzLmF0dGFjaGVycy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IFthdHRhY2hlciwgLi4ub3B0aW9uc10gPSB0aGlzLmF0dGFjaGVyc1t0aGlzLmZyZWV6ZUluZGV4XTsKICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSBmYWxzZSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmIChvcHRpb25zWzBdID09PSB0cnVlKSB7CiAgICAgICAgICAgIG9wdGlvbnNbMF0gPSB2b2lkIDA7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0cmFuc2Zvcm1lciA9IGF0dGFjaGVyLmNhbGwoc2VsZjIsIC4uLm9wdGlvbnMpOwogICAgICAgICAgaWYgKHR5cGVvZiB0cmFuc2Zvcm1lciA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgICB0aGlzLnRyYW5zZm9ybWVycy51c2UodHJhbnNmb3JtZXIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLmZyb3plbiA9IHRydWU7CiAgICAgICAgdGhpcy5mcmVlemVJbmRleCA9IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICAvKioKICAgICAgICogUGFyc2UgdGV4dCB0byBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcGFyc2VgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHBhcnNlYCBwZXJmb3JtcyB0aGUgcGFyc2UgcGhhc2UsIG5vdCB0aGUgcnVuIHBoYXNlIG9yIG90aGVyCiAgICAgICAqID4gcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IFtmaWxlXQogICAgICAgKiAgIGZpbGUgdG8gcGFyc2UgKG9wdGlvbmFsKTsgdHlwaWNhbGx5IGBzdHJpbmdgIG9yIGBWRmlsZWA7IGFueSB2YWx1ZQogICAgICAgKiAgIGFjY2VwdGVkIGFzIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1BhcnNlVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBQYXJzZVRyZWV9CiAgICAgICAqICAgU3ludGF4IHRyZWUgcmVwcmVzZW50aW5nIGBmaWxlYC4KICAgICAgICovCiAgICAgIHBhcnNlKGZpbGUpIHsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgY29uc3QgcGFyc2VyID0gdGhpcy5wYXJzZXIgfHwgdGhpcy5QYXJzZXI7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwYXJzZSIsIHBhcnNlcik7CiAgICAgICAgcmV0dXJuIHBhcnNlcihTdHJpbmcocmVhbEZpbGUpLCByZWFsRmlsZSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc2AgcGVyZm9ybXMgdGhlIHBhcnNlLCBydW4sIGFuZCBzdHJpbmdpZnkgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBmaWxlCiAgICAgICAqIEBwYXJhbSB7UHJvY2Vzc0NhbGxiYWNrPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqIEByZXR1cm5zIHtQcm9taXNlPFZGaWxlV2l0aE91dHB1dDxDb21waWxlUmVzdWx0Pj59CiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSAob3B0aW9uYWwpOyB0eXBpY2FsbHkgYHN0cmluZ2Agb3IgYFZGaWxlYF07IGFueSB2YWx1ZSBhY2NlcHRlZCBhcwogICAgICAgKiAgIGB4YCBpbiBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHBhcmFtIHtQcm9jZXNzQ2FsbGJhY2s8VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+PiB8IHVuZGVmaW5lZH0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VkZpbGU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSBhIHByb21pc2UsIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3MoZmlsZSwgZG9uZSkgewogICAgICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgICAgICB0aGlzLmZyZWV6ZSgpOwogICAgICAgIGFzc2VydFBhcnNlcigicHJvY2VzcyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2VzcyIsIHRoaXMuY29tcGlsZXIgfHwgdGhpcy5Db21waWxlcik7CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIGNvbnN0IHJlYWxGaWxlID0gdmZpbGUoZmlsZSk7CiAgICAgICAgICBjb25zdCBwYXJzZVRyZWUgPSAoCiAgICAgICAgICAgIC8qKiBAdHlwZSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9ICovCiAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgc2VsZjIucGFyc2UocmVhbEZpbGUpCiAgICAgICAgICApOwogICAgICAgICAgc2VsZjIucnVuKHBhcnNlVHJlZSwgcmVhbEZpbGUsIGZ1bmN0aW9uKGVycm9yLCB0cmVlLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIXRyZWUgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHJlYWxEb25lKGVycm9yKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBjb21waWxlVHJlZSA9ICgKICAgICAgICAgICAgICAvKiogQHR5cGUge0NvbXBpbGVUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IENvbXBpbGVUcmVlfSAqLwogICAgICAgICAgICAgIC8qKiBAdHlwZSB7dW5rbm93bn0gKi8KICAgICAgICAgICAgICB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGNvbnN0IGNvbXBpbGVSZXN1bHQgPSBzZWxmMi5zdHJpbmdpZnkoY29tcGlsZVRyZWUsIGZpbGUyKTsKICAgICAgICAgICAgaWYgKGxvb2tzTGlrZUFWYWx1ZShjb21waWxlUmVzdWx0KSkgewogICAgICAgICAgICAgIGZpbGUyLnZhbHVlID0gY29tcGlsZVJlc3VsdDsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBmaWxlMi5yZXN1bHQgPSBjb21waWxlUmVzdWx0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJlYWxEb25lKAogICAgICAgICAgICAgIGVycm9yLAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VkZpbGVXaXRoT3V0cHV0PENvbXBpbGVSZXN1bHQ+fSAqLwogICAgICAgICAgICAgIGZpbGUyCiAgICAgICAgICAgICk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBmaWxlMikgewogICAgICAgICAgICBpZiAoZXJyb3IgfHwgIWZpbGUyKSB7CiAgICAgICAgICAgICAgcmVqZWN0KGVycm9yKTsKICAgICAgICAgICAgfSBlbHNlIGlmIChyZXNvbHZlMikgewogICAgICAgICAgICAgIHJlc29sdmUyKGZpbGUyKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFByb2Nlc3MgdGhlIGdpdmVuIGZpbGUgYXMgY29uZmlndXJlZCBvbiB0aGUgcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBwcm9jZXNzU3luY2AgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcHJvY2Vzc1N5bmNgIHBlcmZvcm1zIHRoZSBwYXJzZSwgcnVuLCBhbmQgc3RyaW5naWZ5IHBoYXNlcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogICBGaWxlIChvcHRpb25hbCk7IHR5cGljYWxseSBgc3RyaW5nYCBvciBgVkZpbGVgOyBhbnkgdmFsdWUgYWNjZXB0ZWQgYXMKICAgICAgICogICBgeGAgaW4gYG5ldyBWRmlsZSh4KWAuCiAgICAgICAqIEByZXR1cm5zIHtWRmlsZVdpdGhPdXRwdXQ8Q29tcGlsZVJlc3VsdD59CiAgICAgICAqICAgVGhlIHByb2Nlc3NlZCBmaWxlLgogICAgICAgKgogICAgICAgKiAgIFRoZSBwYXJzZWQsIHRyYW5zZm9ybWVkLCBhbmQgY29tcGlsZWQgdmFsdWUgaXMgYXZhaWxhYmxlIGF0CiAgICAgICAqICAgYGZpbGUudmFsdWVgIChzZWUgbm90ZSkuCiAgICAgICAqCiAgICAgICAqICAgPiAqKk5vdGUqKjogdW5pZmllZCB0eXBpY2FsbHkgY29tcGlsZXMgYnkgc2VyaWFsaXppbmc6IG1vc3QKICAgICAgICogICA+IGNvbXBpbGVycyByZXR1cm4gYHN0cmluZ2AgKG9yIGBVaW50OEFycmF5YCkuCiAgICAgICAqICAgPiBTb21lIGNvbXBpbGVycywgc3VjaCBhcyB0aGUgb25lIGNvbmZpZ3VyZWQgd2l0aAogICAgICAgKiAgID4gW2ByZWh5cGUtcmVhY3RgXVtyZWh5cGUtcmVhY3RdLCByZXR1cm4gb3RoZXIgdmFsdWVzIChpbiB0aGlzIGNhc2UsIGEKICAgICAgICogICA+IFJlYWN0IHRyZWUpLgogICAgICAgKiAgID4gSWYgeW914oCZcmUgdXNpbmcgYSBjb21waWxlciB0aGF0IGRvZXNu4oCZdCBzZXJpYWxpemUsIGV4cGVjdCBkaWZmZXJlbnQKICAgICAgICogICA+IHJlc3VsdCB2YWx1ZXMuCiAgICAgICAqICAgPgogICAgICAgKiAgID4gVG8gcmVnaXN0ZXIgY3VzdG9tIHJlc3VsdHMgaW4gVHlwZVNjcmlwdCwgYWRkIHRoZW0gdG8KICAgICAgICogICA+IHtAbGlua2NvZGUgQ29tcGlsZVJlc3VsdE1hcH0uCiAgICAgICAqCiAgICAgICAqICAgW3JlaHlwZS1yZWFjdF06IGh0dHBzOi8vZ2l0aHViLmNvbS9yZWh5cGVqcy9yZWh5cGUtcmVhY3QKICAgICAgICovCiAgICAgIHByb2Nlc3NTeW5jKGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgYXNzZXJ0UGFyc2VyKCJwcm9jZXNzU3luYyIsIHRoaXMucGFyc2VyIHx8IHRoaXMuUGFyc2VyKTsKICAgICAgICBhc3NlcnRDb21waWxlcigicHJvY2Vzc1N5bmMiLCB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXIpOwogICAgICAgIHRoaXMucHJvY2VzcyhmaWxlLCByZWFsRG9uZSk7CiAgICAgICAgYXNzZXJ0RG9uZSgicHJvY2Vzc1N5bmMiLCAicHJvY2VzcyIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgZmlsZTIpIHsKICAgICAgICAgIGNvbXBsZXRlID0gdHJ1ZTsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gZmlsZTI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSdW4gKnRyYW5zZm9ybWVycyogb24gYSBzeW50YXggdHJlZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHJ1bmAgZnJlZXplcyB0aGUgcHJvY2Vzc29yIGlmIG5vdCBhbHJlYWR5ICpmcm96ZW4qLgogICAgICAgKgogICAgICAgKiA+ICoqTm90ZSoqOiBgcnVuYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gZG9uZQogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtIZWFkVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBIZWFkVHJlZX0gdHJlZQogICAgICAgKiBAcGFyYW0ge0NvbXBhdGlibGUgfCB1bmRlZmluZWR9IGZpbGUKICAgICAgICogQHBhcmFtIHtSdW5DYWxsYmFjazxUYWlsVHJlZSBleHRlbmRzIHVuZGVmaW5lZCA/IE5vZGUgOiBUYWlsVHJlZT59IGRvbmUKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7SGVhZFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogSGVhZFRyZWV9IHRyZWUKICAgICAgICogQHBhcmFtIHtDb21wYXRpYmxlIHwgdW5kZWZpbmVkfSBbZmlsZV0KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7KAogICAgICAgKiAgIFJ1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPiB8CiAgICAgICAqICAgQ29tcGF0aWJsZQogICAgICAgKiApfSBbZmlsZV0KICAgICAgICogICBGaWxlIGFzc29jaWF0ZWQgd2l0aCBgbm9kZWAgKG9wdGlvbmFsKTsgYW55IHZhbHVlIGFjY2VwdGVkIGFzIGB4YCBpbgogICAgICAgKiAgIGBuZXcgVkZpbGUoeClgLgogICAgICAgKiBAcGFyYW0ge1J1bkNhbGxiYWNrPFRhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlPn0gW2RvbmVdCiAgICAgICAqICAgQ2FsbGJhY2sgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMge1Byb21pc2U8VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWU+IHwgdW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcgaWYgYGRvbmVgIGlzIGdpdmVuLgogICAgICAgKiAgIE90aGVyd2lzZSwgYSBwcm9taXNlIHJlamVjdGVkIHdpdGggYSBmYXRhbCBlcnJvciBvciByZXNvbHZlZCB3aXRoIHRoZQogICAgICAgKiAgIHRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW4odHJlZSwgZmlsZSwgZG9uZSkgewogICAgICAgIGFzc2VydE5vZGUodHJlZSk7CiAgICAgICAgdGhpcy5mcmVlemUoKTsKICAgICAgICBjb25zdCB0cmFuc2Zvcm1lcnMgPSB0aGlzLnRyYW5zZm9ybWVyczsKICAgICAgICBpZiAoIWRvbmUgJiYgdHlwZW9mIGZpbGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGRvbmUgPSBmaWxlOwogICAgICAgICAgZmlsZSA9IHZvaWQgMDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGRvbmUgPyBleGVjdXRvcih2b2lkIDAsIGRvbmUpIDogbmV3IFByb21pc2UoZXhlY3V0b3IpOwogICAgICAgIGZ1bmN0aW9uIGV4ZWN1dG9yKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgIG9rKAogICAgICAgICAgICB0eXBlb2YgZmlsZSAhPT0gImZ1bmN0aW9uIiwKICAgICAgICAgICAgImBmaWxlYCBjYW5cdTIwMTl0IGJlIGEgYGRvbmVgIGFueW1vcmUsIHdlIGNoZWNrZWQiCiAgICAgICAgICApOwogICAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICAgIHRyYW5zZm9ybWVycy5ydW4odHJlZSwgcmVhbEZpbGUsIHJlYWxEb25lKTsKICAgICAgICAgIGZ1bmN0aW9uIHJlYWxEb25lKGVycm9yLCBvdXRwdXRUcmVlLCBmaWxlMikgewogICAgICAgICAgICBjb25zdCByZXN1bHRpbmdUcmVlID0gKAogICAgICAgICAgICAgIC8qKiBAdHlwZSB7VGFpbFRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogVGFpbFRyZWV9ICovCiAgICAgICAgICAgICAgb3V0cHV0VHJlZSB8fCB0cmVlCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChlcnJvcikgewogICAgICAgICAgICAgIHJlamVjdChlcnJvcik7CiAgICAgICAgICAgIH0gZWxzZSBpZiAocmVzb2x2ZTIpIHsKICAgICAgICAgICAgICByZXNvbHZlMihyZXN1bHRpbmdUcmVlKTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBvayhkb25lLCAiYGRvbmVgIGlzIGRlZmluZWQgaWYgYHJlc29sdmVgIGlzIG5vdCIpOwogICAgICAgICAgICAgIGRvbmUodm9pZCAwLCByZXN1bHRpbmdUcmVlLCBmaWxlMik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJ1biAqdHJhbnNmb3JtZXJzKiBvbiBhIHN5bnRheCB0cmVlLgogICAgICAgKgogICAgICAgKiBBbiBlcnJvciBpcyB0aHJvd24gaWYgYXN5bmNocm9ub3VzIHRyYW5zZm9ybXMgYXJlIGNvbmZpZ3VyZWQuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBmcmVlemVzIHRoZSBwcm9jZXNzb3IgaWYgbm90IGFscmVhZHkgKmZyb3plbiouCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBydW5TeW5jYCBwZXJmb3JtcyB0aGUgcnVuIHBoYXNlLCBub3Qgb3RoZXIgcGhhc2VzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0hlYWRUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IEhlYWRUcmVlfSB0cmVlCiAgICAgICAqICAgVHJlZSB0byB0cmFuc2Zvcm0gYW5kIGluc3BlY3QuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge1RhaWxUcmVlIGV4dGVuZHMgdW5kZWZpbmVkID8gTm9kZSA6IFRhaWxUcmVlfQogICAgICAgKiAgIFRyYW5zZm9ybWVkIHRyZWUuCiAgICAgICAqLwogICAgICBydW5TeW5jKHRyZWUsIGZpbGUpIHsKICAgICAgICBsZXQgY29tcGxldGUgPSBmYWxzZTsKICAgICAgICBsZXQgcmVzdWx0OwogICAgICAgIHRoaXMucnVuKHRyZWUsIGZpbGUsIHJlYWxEb25lKTsKICAgICAgICBhc3NlcnREb25lKCJydW5TeW5jIiwgInJ1biIsIGNvbXBsZXRlKTsKICAgICAgICBvayhyZXN1bHQsICJ3ZSBlaXRoZXIgYmFpbGVkIG9uIGFuIGVycm9yIG9yIGhhdmUgYSB0cmVlIik7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICBmdW5jdGlvbiByZWFsRG9uZShlcnJvciwgdHJlZTIpIHsKICAgICAgICAgIGJhaWwoZXJyb3IpOwogICAgICAgICAgcmVzdWx0ID0gdHJlZTI7CiAgICAgICAgICBjb21wbGV0ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDb21waWxlIGEgc3ludGF4IHRyZWUuCiAgICAgICAqCiAgICAgICAqID4gKipOb3RlKio6IGBzdHJpbmdpZnlgIGZyZWV6ZXMgdGhlIHByb2Nlc3NvciBpZiBub3QgYWxyZWFkeSAqZnJvemVuKi4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHN0cmluZ2lmeWAgcGVyZm9ybXMgdGhlIHN0cmluZ2lmeSBwaGFzZSwgbm90IHRoZSBydW4gcGhhc2UKICAgICAgICogPiBvciBvdGhlciBwaGFzZXMuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7Q29tcGlsZVRyZWUgZXh0ZW5kcyB1bmRlZmluZWQgPyBOb2RlIDogQ29tcGlsZVRyZWV9IHRyZWUKICAgICAgICogICBUcmVlIHRvIGNvbXBpbGUuCiAgICAgICAqIEBwYXJhbSB7Q29tcGF0aWJsZSB8IHVuZGVmaW5lZH0gW2ZpbGVdCiAgICAgICAqICAgRmlsZSBhc3NvY2lhdGVkIHdpdGggYG5vZGVgIChvcHRpb25hbCk7IGFueSB2YWx1ZSBhY2NlcHRlZCBhcyBgeGAgaW4KICAgICAgICogICBgbmV3IFZGaWxlKHgpYC4KICAgICAgICogQHJldHVybnMge0NvbXBpbGVSZXN1bHQgZXh0ZW5kcyB1bmRlZmluZWQgPyBWYWx1ZSA6IENvbXBpbGVSZXN1bHR9CiAgICAgICAqICAgVGV4dHVhbCByZXByZXNlbnRhdGlvbiBvZiB0aGUgdHJlZSAoc2VlIG5vdGUpLgogICAgICAgKgogICAgICAgKiAgID4gKipOb3RlKio6IHVuaWZpZWQgdHlwaWNhbGx5IGNvbXBpbGVzIGJ5IHNlcmlhbGl6aW5nOiBtb3N0IGNvbXBpbGVycwogICAgICAgKiAgID4gcmV0dXJuIGBzdHJpbmdgIChvciBgVWludDhBcnJheWApLgogICAgICAgKiAgID4gU29tZSBjb21waWxlcnMsIHN1Y2ggYXMgdGhlIG9uZSBjb25maWd1cmVkIHdpdGgKICAgICAgICogICA+IFtgcmVoeXBlLXJlYWN0YF1bcmVoeXBlLXJlYWN0XSwgcmV0dXJuIG90aGVyIHZhbHVlcyAoaW4gdGhpcyBjYXNlLCBhCiAgICAgICAqICAgPiBSZWFjdCB0cmVlKS4KICAgICAgICogICA+IElmIHlvdeKAmXJlIHVzaW5nIGEgY29tcGlsZXIgdGhhdCBkb2VzbuKAmXQgc2VyaWFsaXplLCBleHBlY3QgZGlmZmVyZW50CiAgICAgICAqICAgPiByZXN1bHQgdmFsdWVzLgogICAgICAgKiAgID4KICAgICAgICogICA+IFRvIHJlZ2lzdGVyIGN1c3RvbSByZXN1bHRzIGluIFR5cGVTY3JpcHQsIGFkZCB0aGVtIHRvCiAgICAgICAqICAgPiB7QGxpbmtjb2RlIENvbXBpbGVSZXN1bHRNYXB9LgogICAgICAgKgogICAgICAgKiAgIFtyZWh5cGUtcmVhY3RdOiBodHRwczovL2dpdGh1Yi5jb20vcmVoeXBlanMvcmVoeXBlLXJlYWN0CiAgICAgICAqLwogICAgICBzdHJpbmdpZnkodHJlZSwgZmlsZSkgewogICAgICAgIHRoaXMuZnJlZXplKCk7CiAgICAgICAgY29uc3QgcmVhbEZpbGUgPSB2ZmlsZShmaWxlKTsKICAgICAgICBjb25zdCBjb21waWxlcjIgPSB0aGlzLmNvbXBpbGVyIHx8IHRoaXMuQ29tcGlsZXI7CiAgICAgICAgYXNzZXJ0Q29tcGlsZXIoInN0cmluZ2lmeSIsIGNvbXBpbGVyMik7CiAgICAgICAgYXNzZXJ0Tm9kZSh0cmVlKTsKICAgICAgICByZXR1cm4gY29tcGlsZXIyKHRyZWUsIHJlYWxGaWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ29uZmlndXJlIHRoZSBwcm9jZXNzb3IgdG8gdXNlIGEgcGx1Z2luLCBhIGxpc3Qgb2YgdXNhYmxlIHZhbHVlcywgb3IgYQogICAgICAgKiBwcmVzZXQuCiAgICAgICAqCiAgICAgICAqIElmIHRoZSBwcm9jZXNzb3IgaXMgYWxyZWFkeSB1c2luZyBhIHBsdWdpbiwgdGhlIHByZXZpb3VzIHBsdWdpbgogICAgICAgKiBjb25maWd1cmF0aW9uIGlzIGNoYW5nZWQgYmFzZWQgb24gdGhlIG9wdGlvbnMgdGhhdCBhcmUgcGFzc2VkIGluLgogICAgICAgKiBJbiBvdGhlciB3b3JkcywgdGhlIHBsdWdpbiBpcyBub3QgYWRkZWQgYSBzZWNvbmQgdGltZS4KICAgICAgICoKICAgICAgICogPiAqKk5vdGUqKjogYHVzZWAgY2Fubm90IGJlIGNhbGxlZCBvbiAqZnJvemVuKiBwcm9jZXNzb3JzLgogICAgICAgKiA+IENhbGwgdGhlIHByb2Nlc3NvciBmaXJzdCB0byBjcmVhdGUgYSBuZXcgdW5mcm96ZW4gcHJvY2Vzc29yLgogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiAgIFRoZXJlIGFyZSBtYW55IHdheXMgdG8gcGFzcyBwbHVnaW5zIHRvIGAudXNlKClgLgogICAgICAgKiAgIFRoaXMgZXhhbXBsZSBnaXZlcyBhbiBvdmVydmlldzoKICAgICAgICoKICAgICAgICogICBgYGBqcwogICAgICAgKiAgIGltcG9ydCB7dW5pZmllZH0gZnJvbSAndW5pZmllZCcKICAgICAgICoKICAgICAgICogICB1bmlmaWVkKCkKICAgICAgICogICAgIC8vIFBsdWdpbiB3aXRoIG9wdGlvbnM6CiAgICAgICAqICAgICAudXNlKHBsdWdpbkEsIHt4OiB0cnVlLCB5OiB0cnVlfSkKICAgICAgICogICAgIC8vIFBhc3NpbmcgdGhlIHNhbWUgcGx1Z2luIGFnYWluIG1lcmdlcyBjb25maWd1cmF0aW9uICh0byBge3g6IHRydWUsIHk6IGZhbHNlLCB6OiB0cnVlfWApOgogICAgICAgKiAgICAgLnVzZShwbHVnaW5BLCB7eTogZmFsc2UsIHo6IHRydWV9KQogICAgICAgKiAgICAgLy8gUGx1Z2luczoKICAgICAgICogICAgIC51c2UoW3BsdWdpbkIsIHBsdWdpbkNdKQogICAgICAgKiAgICAgLy8gVHdvIHBsdWdpbnMsIHRoZSBzZWNvbmQgd2l0aCBvcHRpb25zOgogICAgICAgKiAgICAgLnVzZShbcGx1Z2luRCwgW3BsdWdpbkUsIHt9XV0pCiAgICAgICAqICAgICAvLyBQcmVzZXQgd2l0aCBwbHVnaW5zIGFuZCBzZXR0aW5nczoKICAgICAgICogICAgIC51c2Uoe3BsdWdpbnM6IFtwbHVnaW5GLCBbcGx1Z2luRywge31dXSwgc2V0dGluZ3M6IHtwb3NpdGlvbjogZmFsc2V9fSkKICAgICAgICogICAgIC8vIFNldHRpbmdzIG9ubHk6CiAgICAgICAqICAgICAudXNlKHtzZXR0aW5nczoge3Bvc2l0aW9uOiBmYWxzZX19KQogICAgICAgKiAgIGBgYAogICAgICAgKgogICAgICAgKiBAdGVtcGxhdGUge0FycmF5PHVua25vd24+fSBbUGFyYW1ldGVycz1bXV0KICAgICAgICogQHRlbXBsYXRlIHtOb2RlIHwgc3RyaW5nIHwgdW5kZWZpbmVkfSBbSW5wdXQ9dW5kZWZpbmVkXQogICAgICAgKiBAdGVtcGxhdGUgW091dHB1dD1JbnB1dF0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UHJlc2V0IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3ByZXNldF0KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKgogICAgICAgKiBAb3ZlcmxvYWQKICAgICAgICogQHBhcmFtIHtQbHVnZ2FibGVMaXN0fSBsaXN0CiAgICAgICAqIEByZXR1cm5zIHtQcm9jZXNzb3I8UGFyc2VUcmVlLCBIZWFkVHJlZSwgVGFpbFRyZWUsIENvbXBpbGVUcmVlLCBDb21waWxlUmVzdWx0Pn0KICAgICAgICoKICAgICAgICogQG92ZXJsb2FkCiAgICAgICAqIEBwYXJhbSB7UGx1Z2luPFBhcmFtZXRlcnMsIElucHV0LCBPdXRwdXQ+fSBwbHVnaW4KICAgICAgICogQHBhcmFtIHsuLi4oUGFyYW1ldGVycyB8IFtib29sZWFuXSl9IHBhcmFtZXRlcnMKICAgICAgICogQHJldHVybnMge1VzZVBsdWdpbjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQsIElucHV0LCBPdXRwdXQ+fQogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1BsdWdnYWJsZUxpc3QgfCBQbHVnaW4gfCBQcmVzZXQgfCBudWxsIHwgdW5kZWZpbmVkfSB2YWx1ZQogICAgICAgKiAgIFVzYWJsZSB2YWx1ZS4KICAgICAgICogQHBhcmFtIHsuLi51bmtub3dufSBwYXJhbWV0ZXJzCiAgICAgICAqICAgUGFyYW1ldGVycywgd2hlbiBhIHBsdWdpbiBpcyBnaXZlbiBhcyBhIHVzYWJsZSB2YWx1ZS4KICAgICAgICogQHJldHVybnMge1Byb2Nlc3NvcjxQYXJzZVRyZWUsIEhlYWRUcmVlLCBUYWlsVHJlZSwgQ29tcGlsZVRyZWUsIENvbXBpbGVSZXN1bHQ+fQogICAgICAgKiAgIEN1cnJlbnQgcHJvY2Vzc29yLgogICAgICAgKi8KICAgICAgdXNlKHZhbHVlMiwgLi4ucGFyYW1ldGVycykgewogICAgICAgIGNvbnN0IGF0dGFjaGVycyA9IHRoaXMuYXR0YWNoZXJzOwogICAgICAgIGNvbnN0IG5hbWVzcGFjZTIgPSB0aGlzLm5hbWVzcGFjZTsKICAgICAgICBhc3NlcnRVbmZyb3plbigidXNlIiwgdGhpcy5mcm96ZW4pOwogICAgICAgIGlmICh2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDApIHsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiB2YWx1ZTIgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTIsIHBhcmFtZXRlcnMpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgICAgICAgICAgYWRkTGlzdCh2YWx1ZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUyICsgImAiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgICAgZnVuY3Rpb24gYWRkMyh2YWx1ZTMpIHsKICAgICAgICAgIGlmICh0eXBlb2YgdmFsdWUzID09PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICAgIGFkZFBsdWdpbih2YWx1ZTMsIFtdKTsKICAgICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHZhbHVlMyA9PT0gIm9iamVjdCIpIHsKICAgICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkodmFsdWUzKSkgewogICAgICAgICAgICAgIGNvbnN0IFtwbHVnaW4sIC4uLnBhcmFtZXRlcnMyXSA9ICgKICAgICAgICAgICAgICAgIC8qKiBAdHlwZSB7UGx1Z2luVHVwbGU8QXJyYXk8dW5rbm93bj4+fSAqLwogICAgICAgICAgICAgICAgdmFsdWUzCiAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICBhZGRQbHVnaW4ocGx1Z2luLCBwYXJhbWV0ZXJzMik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgYWRkUHJlc2V0KHZhbHVlMyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHVzYWJsZSB2YWx1ZSwgbm90IGAiICsgdmFsdWUzICsgImAiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkUHJlc2V0KHJlc3VsdCkgewogICAgICAgICAgaWYgKCEoInBsdWdpbnMiIGluIHJlc3VsdCkgJiYgISgic2V0dGluZ3MiIGluIHJlc3VsdCkpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAgICAgICAgICJFeHBlY3RlZCB1c2FibGUgdmFsdWUgYnV0IHJlY2VpdmVkIGFuIGVtcHR5IHByZXNldCwgd2hpY2ggaXMgcHJvYmFibHkgYSBtaXN0YWtlOiBwcmVzZXRzIHR5cGljYWxseSBjb21lIHdpdGggYHBsdWdpbnNgIGFuZCBzb21ldGltZXMgd2l0aCBgc2V0dGluZ3NgLCBidXQgdGhpcyBoYXMgbmVpdGhlciIKICAgICAgICAgICAgKTsKICAgICAgICAgIH0KICAgICAgICAgIGFkZExpc3QocmVzdWx0LnBsdWdpbnMpOwogICAgICAgICAgaWYgKHJlc3VsdC5zZXR0aW5ncykgewogICAgICAgICAgICBuYW1lc3BhY2UyLnNldHRpbmdzID0gKDAsIGltcG9ydF9leHRlbmQuZGVmYXVsdCkodHJ1ZSwgbmFtZXNwYWNlMi5zZXR0aW5ncywgcmVzdWx0LnNldHRpbmdzKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZnVuY3Rpb24gYWRkTGlzdChwbHVnaW5zMykgewogICAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgICAgaWYgKHBsdWdpbnMzID09PSBudWxsIHx8IHBsdWdpbnMzID09PSB2b2lkIDApIHsKICAgICAgICAgIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShwbHVnaW5zMykpIHsKICAgICAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgcGx1Z2luczMubGVuZ3RoKSB7CiAgICAgICAgICAgICAgY29uc3QgdGhpbmcgPSBwbHVnaW5zM1tpbmRleDJdOwogICAgICAgICAgICAgIGFkZDModGhpbmcpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGxpc3Qgb2YgcGx1Z2lucywgbm90IGAiICsgcGx1Z2luczMgKyAiYCIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBhZGRQbHVnaW4ocGx1Z2luLCBwYXJhbWV0ZXJzMikgewogICAgICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICAgICAgbGV0IGVudHJ5SW5kZXggPSAtMTsKICAgICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGF0dGFjaGVycy5sZW5ndGgpIHsKICAgICAgICAgICAgaWYgKGF0dGFjaGVyc1tpbmRleDJdWzBdID09PSBwbHVnaW4pIHsKICAgICAgICAgICAgICBlbnRyeUluZGV4ID0gaW5kZXgyOwogICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBpZiAoZW50cnlJbmRleCA9PT0gLTEpIHsKICAgICAgICAgICAgYXR0YWNoZXJzLnB1c2goW3BsdWdpbiwgLi4ucGFyYW1ldGVyczJdKTsKICAgICAgICAgIH0gZWxzZSBpZiAocGFyYW1ldGVyczIubGVuZ3RoID4gMCkgewogICAgICAgICAgICBsZXQgW3ByaW1hcnksIC4uLnJlc3RdID0gcGFyYW1ldGVyczI7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRQcmltYXJ5ID0gYXR0YWNoZXJzW2VudHJ5SW5kZXhdWzFdOwogICAgICAgICAgICBpZiAoaXNQbGFpbk9iamVjdChjdXJyZW50UHJpbWFyeSkgJiYgaXNQbGFpbk9iamVjdChwcmltYXJ5KSkgewogICAgICAgICAgICAgIHByaW1hcnkgPSAoMCwgaW1wb3J0X2V4dGVuZC5kZWZhdWx0KSh0cnVlLCBjdXJyZW50UHJpbWFyeSwgcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXR0YWNoZXJzW2VudHJ5SW5kZXhdID0gW3BsdWdpbiwgcHJpbWFyeSwgLi4ucmVzdF07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgdW5pZmllZCA9IG5ldyBQcm9jZXNzb3IoKS5mcmVlemUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaWZpZWRAMTEuMC41L25vZGVfbW9kdWxlcy91bmlmaWVkL2luZGV4LmpzCnZhciBpbml0X3VuaWZpZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlmaWVkQDExLjAuNS9ub2RlX21vZHVsZXMvdW5pZmllZC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Njb3VudEAyLjAuMS9ub2RlX21vZHVsZXMvY2NvdW50L2luZGV4LmpzCmZ1bmN0aW9uIGNjb3VudCh2YWx1ZTIsIGNoYXJhY3RlcikgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGlmICh0eXBlb2YgY2hhcmFjdGVyICE9PSAic3RyaW5nIikgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgY2hhcmFjdGVyIik7CiAgfQogIGxldCBjb3VudDIgPSAwOwogIGxldCBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihjaGFyYWN0ZXIpOwogIHdoaWxlIChpbmRleDIgIT09IC0xKSB7CiAgICBjb3VudDIrKzsKICAgIGluZGV4MiA9IHNvdXJjZS5pbmRleE9mKGNoYXJhY3RlciwgaW5kZXgyICsgY2hhcmFjdGVyLmxlbmd0aCk7CiAgfQogIHJldHVybiBjb3VudDI7Cn0KdmFyIGluaXRfY2NvdW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2NvdW50QDIuMC4xL25vZGVfbW9kdWxlcy9jY291bnQvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXIvaW5kZXguanMKZnVuY3Rpb24gYXNjaWlDb250cm9sKGNvZGU0KSB7CiAgcmV0dXJuICgKICAgIC8vIFNwZWNpYWwgd2hpdGVzcGFjZSBjb2RlcyAod2hpY2ggaGF2ZSBuZWdhdGl2ZSB2YWx1ZXMpLCBDMCBhbmQgQ29udHJvbAogICAgLy8gY2hhcmFjdGVyIERFTAogICAgY29kZTQgIT09IG51bGwgJiYgKGNvZGU0IDwgMzIgfHwgY29kZTQgPT09IDEyNykKICApOwp9CmZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgewogIHJldHVybiBjb2RlNCAhPT0gbnVsbCAmJiBjb2RlNCA8IC0yOwp9CmZ1bmN0aW9uIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHsKICByZXR1cm4gY29kZTQgIT09IG51bGwgJiYgKGNvZGU0IDwgMCB8fCBjb2RlNCA9PT0gMzIpOwp9CmZ1bmN0aW9uIG1hcmtkb3duU3BhY2UoY29kZTQpIHsKICByZXR1cm4gY29kZTQgPT09IC0yIHx8IGNvZGU0ID09PSAtMSB8fCBjb2RlNCA9PT0gMzI7Cn0KZnVuY3Rpb24gcmVnZXhDaGVjayhyZWdleCkgewogIHJldHVybiBjaGVjazsKICBmdW5jdGlvbiBjaGVjayhjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ICE9PSBudWxsICYmIGNvZGU0ID4gLTEgJiYgcmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KSk7CiAgfQp9CnZhciBhc2NpaUFscGhhLCBhc2NpaUFscGhhbnVtZXJpYywgYXNjaWlBdGV4dCwgYXNjaWlEaWdpdCwgYXNjaWlIZXhEaWdpdCwgYXNjaWlQdW5jdHVhdGlvbiwgdW5pY29kZVB1bmN0dWF0aW9uLCB1bmljb2RlV2hpdGVzcGFjZTsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2hhcmFjdGVyQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaGFyYWN0ZXIvaW5kZXguanMiKCkgewogICAgYXNjaWlBbHBoYSA9IHJlZ2V4Q2hlY2soL1tBLVphLXpdLyk7CiAgICBhc2NpaUFscGhhbnVtZXJpYyA9IHJlZ2V4Q2hlY2soL1tcZEEtWmEtel0vKTsKICAgIGFzY2lpQXRleHQgPSByZWdleENoZWNrKC9bIy0nKitcLS05PT9BLVpeLX5dLyk7CiAgICBhc2NpaURpZ2l0ID0gcmVnZXhDaGVjaygvXGQvKTsKICAgIGFzY2lpSGV4RGlnaXQgPSByZWdleENoZWNrKC9bXGRBLUZhLWZdLyk7CiAgICBhc2NpaVB1bmN0dWF0aW9uID0gcmVnZXhDaGVjaygvWyEtLzotQFstYHstfl0vKTsKICAgIHVuaWNvZGVQdW5jdHVhdGlvbiA9IHJlZ2V4Q2hlY2soL1xwe1B9fFxwe1N9L3UpOwogICAgdW5pY29kZVdoaXRlc3BhY2UgPSByZWdleENoZWNrKC9ccy8pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9saWIvaW5kZXguanMKZnVuY3Rpb24gYW55RmFjdG9yeSh0ZXN0cykgewogIGNvbnN0IGNoZWNrczIgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgdGVzdHMubGVuZ3RoKSB7CiAgICBjaGVja3MyW2luZGV4Ml0gPSBjb252ZXJ0KHRlc3RzW2luZGV4Ml0pOwogIH0KICByZXR1cm4gY2FzdEZhY3RvcnkoYW55KTsKICBmdW5jdGlvbiBhbnkoLi4ucGFyYW1ldGVycykgewogICAgbGV0IGluZGV4MyA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgzIDwgY2hlY2tzMi5sZW5ndGgpIHsKICAgICAgaWYgKGNoZWNrczJbaW5kZXgzXS5hcHBseSh0aGlzLCBwYXJhbWV0ZXJzKSkgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfQp9CmZ1bmN0aW9uIHByb3BlcnRpZXNGYWN0b3J5KGNoZWNrKSB7CiAgY29uc3QgY2hlY2tBc1JlY29yZCA9ICgKICAgIC8qKiBAdHlwZSB7UmVjb3JkPHN0cmluZywgdW5rbm93bj59ICovCiAgICBjaGVjawogICk7CiAgcmV0dXJuIGNhc3RGYWN0b3J5KGFsbDMpOwogIGZ1bmN0aW9uIGFsbDMobm9kZTIpIHsKICAgIGNvbnN0IG5vZGVBc1JlY29yZCA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8KICAgICAgLyoqIEB0eXBlIHt1bmtub3dufSAqLwogICAgICBub2RlMgogICAgKTsKICAgIGxldCBrZXkyOwogICAgZm9yIChrZXkyIGluIGNoZWNrKSB7CiAgICAgIGlmIChub2RlQXNSZWNvcmRba2V5Ml0gIT09IGNoZWNrQXNSZWNvcmRba2V5Ml0pIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KfQpmdW5jdGlvbiB0eXBlRmFjdG9yeShjaGVjaykgewogIHJldHVybiBjYXN0RmFjdG9yeSh0eXBlNSk7CiAgZnVuY3Rpb24gdHlwZTUobm9kZTIpIHsKICAgIHJldHVybiBub2RlMiAmJiBub2RlMi50eXBlID09PSBjaGVjazsKICB9Cn0KZnVuY3Rpb24gY2FzdEZhY3RvcnkodGVzdEZ1bmN0aW9uKSB7CiAgcmV0dXJuIGNoZWNrOwogIGZ1bmN0aW9uIGNoZWNrKHZhbHVlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICAgIHJldHVybiBCb29sZWFuKAogICAgICBsb29rc0xpa2VBTm9kZSh2YWx1ZTIpICYmIHRlc3RGdW5jdGlvbi5jYWxsKAogICAgICAgIHRoaXMsCiAgICAgICAgdmFsdWUyLAogICAgICAgIHR5cGVvZiBpbmRleDIgPT09ICJudW1iZXIiID8gaW5kZXgyIDogdm9pZCAwLAogICAgICAgIHBhcmVudCB8fCB2b2lkIDAKICAgICAgKQogICAgKTsKICB9Cn0KZnVuY3Rpb24gb2syKCkgewogIHJldHVybiB0cnVlOwp9CmZ1bmN0aW9uIGxvb2tzTGlrZUFOb2RlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgIT09IG51bGwgJiYgdHlwZW9mIHZhbHVlMiA9PT0gIm9iamVjdCIgJiYgInR5cGUiIGluIHZhbHVlMjsKfQp2YXIgaXMsIGNvbnZlcnQ7CnZhciBpbml0X2xpYjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLWlzQDYuMC4xL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLWlzL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpcyA9IC8vIE5vdGU6IG92ZXJsb2FkcyBpbiBKU0RvYyBjYW7igJl0IHlldCB1c2UgZGlmZmVyZW50IGBAdGVtcGxhdGVgcy4KICAgIC8qKgogICAgICogQHR5cGUgeygKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBSZWFkb25seUFycmF5PHN0cmluZz4+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbltudW1iZXJdfSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIEFycmF5PHN0cmluZz4+KG5vZGU6IHVua25vd24sIHRlc3Q6IENvbmRpdGlvbiwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlICYge3R5cGU6IENvbmRpdGlvbltudW1iZXJdfSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIHN0cmluZz4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiB7dHlwZTogQ29uZGl0aW9ufSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPihub2RlOiB1bmtub3duLCB0ZXN0OiBDb25kaXRpb24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIENvbmRpdGlvbikgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFRlc3RGdW5jdGlvbj4obm9kZTogdW5rbm93biwgdGVzdDogQ29uZGl0aW9uLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBQcmVkaWNhdGU8Q29uZGl0aW9uLCBOb2RlPikgJgogICAgICogICAoKG5vZGU/OiBudWxsIHwgdW5kZWZpbmVkKSA9PiBmYWxzZSkgJgogICAgICogICAoKG5vZGU6IHVua25vd24sIHRlc3Q/OiBudWxsIHwgdW5kZWZpbmVkLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUpICYKICAgICAqICAgKChub2RlOiB1bmtub3duLCB0ZXN0PzogVGVzdCwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gYm9vbGVhbikKICAgICAqICl9CiAgICAgKi8KICAgIC8qKgogICAgICogQHBhcmFtIHt1bmtub3dufSBbbm9kZV0KICAgICAqIEBwYXJhbSB7VGVzdH0gW3Rlc3RdCiAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFtpbmRleF0KICAgICAqIEBwYXJhbSB7UGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZH0gW3BhcmVudF0KICAgICAqIEBwYXJhbSB7dW5rbm93bn0gW2NvbnRleHRdCiAgICAgKiBAcmV0dXJucyB7Ym9vbGVhbn0KICAgICAqLwogICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG1heC1wYXJhbXMKICAgIChmdW5jdGlvbihub2RlMiwgdGVzdCwgaW5kZXgyLCBwYXJlbnQsIGNvbnRleHQyKSB7CiAgICAgIGNvbnN0IGNoZWNrID0gY29udmVydCh0ZXN0KTsKICAgICAgaWYgKGluZGV4MiAhPT0gdm9pZCAwICYmIGluZGV4MiAhPT0gbnVsbCAmJiAodHlwZW9mIGluZGV4MiAhPT0gIm51bWJlciIgfHwgaW5kZXgyIDwgMCB8fCBpbmRleDIgPT09IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIHBvc2l0aXZlIGZpbml0ZSBpbmRleCIpOwogICAgICB9CiAgICAgIGlmIChwYXJlbnQgIT09IHZvaWQgMCAmJiBwYXJlbnQgIT09IG51bGwgJiYgKCFpcyhwYXJlbnQpIHx8ICFwYXJlbnQuY2hpbGRyZW4pKSB7CiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBwYXJlbnQgbm9kZSIpOwogICAgICB9CiAgICAgIGlmICgocGFyZW50ID09PSB2b2lkIDAgfHwgcGFyZW50ID09PSBudWxsKSAhPT0gKGluZGV4MiA9PT0gdm9pZCAwIHx8IGluZGV4MiA9PT0gbnVsbCkpIHsKICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIkV4cGVjdGVkIGJvdGggcGFyZW50IGFuZCBpbmRleCIpOwogICAgICB9CiAgICAgIHJldHVybiBsb29rc0xpa2VBTm9kZShub2RlMikgPyBjaGVjay5jYWxsKGNvbnRleHQyLCBub2RlMiwgaW5kZXgyLCBwYXJlbnQpIDogZmFsc2U7CiAgICB9KTsKICAgIGNvbnZlcnQgPSAvLyBOb3RlOiBvdmVybG9hZHMgaW4gSlNEb2MgY2Fu4oCZdCB5ZXQgdXNlIGRpZmZlcmVudCBgQHRlbXBsYXRlYHMuCiAgICAvKioKICAgICAqIEB0eXBlIHsoCiAgICAgKiAgICg8Q29uZGl0aW9uIGV4dGVuZHMgc3RyaW5nPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiB7dHlwZTogQ29uZGl0aW9ufSkgJgogICAgICogICAoPENvbmRpdGlvbiBleHRlbmRzIFByb3BzPih0ZXN0OiBDb25kaXRpb24pID0+IChub2RlOiB1bmtub3duLCBpbmRleD86IG51bWJlciB8IG51bGwgfCB1bmRlZmluZWQsIHBhcmVudD86IFBhcmVudCB8IG51bGwgfCB1bmRlZmluZWQsIGNvbnRleHQ/OiB1bmtub3duKSA9PiBub2RlIGlzIE5vZGUgJiBDb25kaXRpb24pICYKICAgICAqICAgKDxDb25kaXRpb24gZXh0ZW5kcyBUZXN0RnVuY3Rpb24+KHRlc3Q6IENvbmRpdGlvbikgPT4gKG5vZGU6IHVua25vd24sIGluZGV4PzogbnVtYmVyIHwgbnVsbCB8IHVuZGVmaW5lZCwgcGFyZW50PzogUGFyZW50IHwgbnVsbCB8IHVuZGVmaW5lZCwgY29udGV4dD86IHVua25vd24pID0+IG5vZGUgaXMgTm9kZSAmIFByZWRpY2F0ZTxDb25kaXRpb24sIE5vZGU+KSAmCiAgICAgKiAgICgodGVzdD86IG51bGwgfCB1bmRlZmluZWQpID0+IChub2RlPzogdW5rbm93biwgaW5kZXg/OiBudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkLCBwYXJlbnQ/OiBQYXJlbnQgfCBudWxsIHwgdW5kZWZpbmVkLCBjb250ZXh0PzogdW5rbm93bikgPT4gbm9kZSBpcyBOb2RlKSAmCiAgICAgKiAgICgodGVzdD86IFRlc3QpID0+IENoZWNrKQogICAgICogKX0KICAgICAqLwogICAgLyoqCiAgICAgKiBAcGFyYW0ge1Rlc3R9IFt0ZXN0XQogICAgICogQHJldHVybnMge0NoZWNrfQogICAgICovCiAgICAoZnVuY3Rpb24odGVzdCkgewogICAgICBpZiAodGVzdCA9PT0gbnVsbCB8fCB0ZXN0ID09PSB2b2lkIDApIHsKICAgICAgICByZXR1cm4gb2syOwogICAgICB9CiAgICAgIGlmICh0eXBlb2YgdGVzdCA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIHJldHVybiBjYXN0RmFjdG9yeSh0ZXN0KTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJvYmplY3QiKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkodGVzdCkgPyBhbnlGYWN0b3J5KHRlc3QpIDogKAogICAgICAgICAgLy8gQ2FzdCBiZWNhdXNlIGBSZWFkb25seUFycmF5YCBnb2VzIGludG8gdGhlIGFib3ZlIGJ1dCBgaXNBcnJheWAKICAgICAgICAgIC8vIG5hcnJvd3MgdG8gYEFycmF5YC4KICAgICAgICAgIHByb3BlcnRpZXNGYWN0b3J5KAogICAgICAgICAgICAvKiogQHR5cGUge1Byb3BzfSAqLwogICAgICAgICAgICB0ZXN0CiAgICAgICAgICApCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHRlc3QgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIHR5cGVGYWN0b3J5KHRlc3QpOwogICAgICB9CiAgICAgIHRocm93IG5ldyBFcnJvcigiRXhwZWN0ZWQgZnVuY3Rpb24sIHN0cmluZywgb3Igb2JqZWN0IGFzIHRlc3QiKTsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1pc0A2LjAuMS9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1pcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjYoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9jb2xvci5qcwpmdW5jdGlvbiBjb2xvcihkNikgewogIHJldHVybiBkNjsKfQp2YXIgaW5pdF9jb2xvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50c0A2LjAuMi9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzL2xpYi9jb2xvci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXZpc2l0LXBhcmVudHNANi4wLjIvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQtcGFyZW50cy9saWIvaW5kZXguanMKZnVuY3Rpb24gdmlzaXRQYXJlbnRzKHRyZWUsIHRlc3QsIHZpc2l0b3IsIHJldmVyc2UpIHsKICBsZXQgY2hlY2s7CiAgaWYgKHR5cGVvZiB0ZXN0ID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiB2aXNpdG9yICE9PSAiZnVuY3Rpb24iKSB7CiAgICByZXZlcnNlID0gdmlzaXRvcjsKICAgIHZpc2l0b3IgPSB0ZXN0OwogIH0gZWxzZSB7CiAgICBjaGVjayA9IHRlc3Q7CiAgfQogIGNvbnN0IGlzMyA9IGNvbnZlcnQoY2hlY2spOwogIGNvbnN0IHN0ZXAgPSByZXZlcnNlID8gLTEgOiAxOwogIGZhY3RvcnkodHJlZSwgdm9pZCAwLCBbXSkoKTsKICBmdW5jdGlvbiBmYWN0b3J5KG5vZGUyLCBpbmRleDIsIHBhcmVudHMpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICgKICAgICAgLyoqIEB0eXBlIHtSZWNvcmQ8c3RyaW5nLCB1bmtub3duPn0gKi8KICAgICAgbm9kZTIgJiYgdHlwZW9mIG5vZGUyID09PSAib2JqZWN0IiA/IG5vZGUyIDoge30KICAgICk7CiAgICBpZiAodHlwZW9mIHZhbHVlMi50eXBlID09PSAic3RyaW5nIikgewogICAgICBjb25zdCBuYW1lID0gKAogICAgICAgIC8vIGBoYXN0YAogICAgICAgIHR5cGVvZiB2YWx1ZTIudGFnTmFtZSA9PT0gInN0cmluZyIgPyB2YWx1ZTIudGFnTmFtZSA6ICgKICAgICAgICAgIC8vIGB4YXN0YAogICAgICAgICAgdHlwZW9mIHZhbHVlMi5uYW1lID09PSAic3RyaW5nIiA/IHZhbHVlMi5uYW1lIDogdm9pZCAwCiAgICAgICAgKQogICAgICApOwogICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmlzaXQyLCAibmFtZSIsIHsKICAgICAgICB2YWx1ZTogIm5vZGUgKCIgKyBjb2xvcihub2RlMi50eXBlICsgKG5hbWUgPyAiPCIgKyBuYW1lICsgIj4iIDogIiIpKSArICIpIgogICAgICB9KTsKICAgIH0KICAgIHJldHVybiB2aXNpdDI7CiAgICBmdW5jdGlvbiB2aXNpdDIoKSB7CiAgICAgIGxldCByZXN1bHQgPSBlbXB0eTI7CiAgICAgIGxldCBzdWJyZXN1bHQ7CiAgICAgIGxldCBvZmZzZXQ7CiAgICAgIGxldCBncmFuZHBhcmVudHM7CiAgICAgIGlmICghdGVzdCB8fCBpczMobm9kZTIsIGluZGV4MiwgcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdIHx8IHZvaWQgMCkpIHsKICAgICAgICByZXN1bHQgPSB0b1Jlc3VsdCh2aXNpdG9yKG5vZGUyLCBwYXJlbnRzKSk7CiAgICAgICAgaWYgKHJlc3VsdFswXSA9PT0gRVhJVCkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCJjaGlsZHJlbiIgaW4gbm9kZTIgJiYgbm9kZTIuY2hpbGRyZW4pIHsKICAgICAgICBjb25zdCBub2RlQXNQYXJlbnQgPSAoCiAgICAgICAgICAvKiogQHR5cGUge1VuaXN0UGFyZW50fSAqLwogICAgICAgICAgbm9kZTIKICAgICAgICApOwogICAgICAgIGlmIChub2RlQXNQYXJlbnQuY2hpbGRyZW4gJiYgcmVzdWx0WzBdICE9PSBTS0lQKSB7CiAgICAgICAgICBvZmZzZXQgPSAocmV2ZXJzZSA/IG5vZGVBc1BhcmVudC5jaGlsZHJlbi5sZW5ndGggOiAtMSkgKyBzdGVwOwogICAgICAgICAgZ3JhbmRwYXJlbnRzID0gcGFyZW50cy5jb25jYXQobm9kZUFzUGFyZW50KTsKICAgICAgICAgIHdoaWxlIChvZmZzZXQgPiAtMSAmJiBvZmZzZXQgPCBub2RlQXNQYXJlbnQuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgICAgIGNvbnN0IGNoaWxkID0gbm9kZUFzUGFyZW50LmNoaWxkcmVuW29mZnNldF07CiAgICAgICAgICAgIHN1YnJlc3VsdCA9IGZhY3RvcnkoY2hpbGQsIG9mZnNldCwgZ3JhbmRwYXJlbnRzKSgpOwogICAgICAgICAgICBpZiAoc3VicmVzdWx0WzBdID09PSBFWElUKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHN1YnJlc3VsdDsKICAgICAgICAgICAgfQogICAgICAgICAgICBvZmZzZXQgPSB0eXBlb2Ygc3VicmVzdWx0WzFdID09PSAibnVtYmVyIiA/IHN1YnJlc3VsdFsxXSA6IG9mZnNldCArIHN0ZXA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHRvUmVzdWx0KHZhbHVlMikgewogIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGlmICh0eXBlb2YgdmFsdWUyID09PSAibnVtYmVyIikgewogICAgcmV0dXJuIFtDT05USU5VRSwgdmFsdWUyXTsKICB9CiAgcmV0dXJuIHZhbHVlMiA9PT0gbnVsbCB8fCB2YWx1ZTIgPT09IHZvaWQgMCA/IGVtcHR5MiA6IFt2YWx1ZTJdOwp9CnZhciBlbXB0eTIsIENPTlRJTlVFLCBFWElULCBTS0lQOwp2YXIgaW5pdF9saWI3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogICAgaW5pdF9jb2xvcigpOwogICAgZW1wdHkyID0gW107CiAgICBDT05USU5VRSA9IHRydWU7CiAgICBFWElUID0gZmFsc2U7CiAgICBTS0lQID0gInNraXAiOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvaW5kZXguanMKdmFyIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdC1wYXJlbnRzQDYuMC4yL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXZpc2l0LXBhcmVudHMvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI3KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2VAMy4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZmluZEFuZFJlcGxhY2UodHJlZSwgbGlzdDUsIG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgaWdub3JlZCA9IGNvbnZlcnQoc2V0dGluZ3MuaWdub3JlIHx8IFtdKTsKICBjb25zdCBwYWlyczIgPSB0b1BhaXJzKGxpc3Q1KTsKICBsZXQgcGFpckluZGV4ID0gLTE7CiAgd2hpbGUgKCsrcGFpckluZGV4IDwgcGFpcnMyLmxlbmd0aCkgewogICAgdmlzaXRQYXJlbnRzKHRyZWUsICJ0ZXh0IiwgdmlzaXRvcik7CiAgfQogIGZ1bmN0aW9uIHZpc2l0b3Iobm9kZTIsIHBhcmVudHMpIHsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGxldCBncmFuZHBhcmVudDsKICAgIHdoaWxlICgrK2luZGV4MiA8IHBhcmVudHMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IHBhcmVudCA9IHBhcmVudHNbaW5kZXgyXTsKICAgICAgY29uc3Qgc2libGluZ3MyID0gZ3JhbmRwYXJlbnQgPyBncmFuZHBhcmVudC5jaGlsZHJlbiA6IHZvaWQgMDsKICAgICAgaWYgKGlnbm9yZWQoCiAgICAgICAgcGFyZW50LAogICAgICAgIHNpYmxpbmdzMiA/IHNpYmxpbmdzMi5pbmRleE9mKHBhcmVudCkgOiB2b2lkIDAsCiAgICAgICAgZ3JhbmRwYXJlbnQKICAgICAgKSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBncmFuZHBhcmVudCA9IHBhcmVudDsKICAgIH0KICAgIGlmIChncmFuZHBhcmVudCkgewogICAgICByZXR1cm4gaGFuZGxlcjIobm9kZTIsIHBhcmVudHMpOwogICAgfQogIH0KICBmdW5jdGlvbiBoYW5kbGVyMihub2RlMiwgcGFyZW50cykgewogICAgY29uc3QgcGFyZW50ID0gcGFyZW50c1twYXJlbnRzLmxlbmd0aCAtIDFdOwogICAgY29uc3QgZmluZDMgPSBwYWlyczJbcGFpckluZGV4XVswXTsKICAgIGNvbnN0IHJlcGxhY2U1ID0gcGFpcnMyW3BhaXJJbmRleF1bMV07CiAgICBsZXQgc3RhcnQgPSAwOwogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50LmNoaWxkcmVuOwogICAgY29uc3QgaW5kZXgyID0gc2libGluZ3MyLmluZGV4T2Yobm9kZTIpOwogICAgbGV0IGNoYW5nZSA9IGZhbHNlOwogICAgbGV0IG5vZGVzID0gW107CiAgICBmaW5kMy5sYXN0SW5kZXggPSAwOwogICAgbGV0IG1hdGNoMiA9IGZpbmQzLmV4ZWMobm9kZTIudmFsdWUpOwogICAgd2hpbGUgKG1hdGNoMikgewogICAgICBjb25zdCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXg7CiAgICAgIGNvbnN0IG1hdGNoT2JqZWN0ID0gewogICAgICAgIGluZGV4OiBtYXRjaDIuaW5kZXgsCiAgICAgICAgaW5wdXQ6IG1hdGNoMi5pbnB1dCwKICAgICAgICBzdGFjazogWy4uLnBhcmVudHMsIG5vZGUyXQogICAgICB9OwogICAgICBsZXQgdmFsdWUyID0gcmVwbGFjZTUoLi4ubWF0Y2gyLCBtYXRjaE9iamVjdCk7CiAgICAgIGlmICh0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIikgewogICAgICAgIHZhbHVlMiA9IHZhbHVlMi5sZW5ndGggPiAwID8geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfSA6IHZvaWQgMDsKICAgICAgfQogICAgICBpZiAodmFsdWUyID09PSBmYWxzZSkgewogICAgICAgIGZpbmQzLmxhc3RJbmRleCA9IHBvc2l0aW9uMyArIDE7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHN0YXJ0ICE9PSBwb3NpdGlvbjMpIHsKICAgICAgICAgIG5vZGVzLnB1c2goewogICAgICAgICAgICB0eXBlOiAidGV4dCIsCiAgICAgICAgICAgIHZhbHVlOiBub2RlMi52YWx1ZS5zbGljZShzdGFydCwgcG9zaXRpb24zKQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgICAgICAgIG5vZGVzLnB1c2goLi4udmFsdWUyKTsKICAgICAgICB9IGVsc2UgaWYgKHZhbHVlMikgewogICAgICAgICAgbm9kZXMucHVzaCh2YWx1ZTIpOwogICAgICAgIH0KICAgICAgICBzdGFydCA9IHBvc2l0aW9uMyArIG1hdGNoMlswXS5sZW5ndGg7CiAgICAgICAgY2hhbmdlID0gdHJ1ZTsKICAgICAgfQogICAgICBpZiAoIWZpbmQzLmdsb2JhbCkgewogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIG1hdGNoMiA9IGZpbmQzLmV4ZWMobm9kZTIudmFsdWUpOwogICAgfQogICAgaWYgKGNoYW5nZSkgewogICAgICBpZiAoc3RhcnQgPCBub2RlMi52YWx1ZS5sZW5ndGgpIHsKICAgICAgICBub2Rlcy5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUuc2xpY2Uoc3RhcnQpIH0pOwogICAgICB9CiAgICAgIHBhcmVudC5jaGlsZHJlbi5zcGxpY2UoaW5kZXgyLCAxLCAuLi5ub2Rlcyk7CiAgICB9IGVsc2UgewogICAgICBub2RlcyA9IFtub2RlMl07CiAgICB9CiAgICByZXR1cm4gaW5kZXgyICsgbm9kZXMubGVuZ3RoOwogIH0KfQpmdW5jdGlvbiB0b1BhaXJzKHR1cGxlT3JMaXN0KSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgaWYgKCFBcnJheS5pc0FycmF5KHR1cGxlT3JMaXN0KSkgewogICAgdGhyb3cgbmV3IFR5cGVFcnJvcigiRXhwZWN0ZWQgZmluZCBhbmQgcmVwbGFjZSB0dXBsZSBvciBsaXN0IG9mIHR1cGxlcyIpOwogIH0KICBjb25zdCBsaXN0NSA9ICF0dXBsZU9yTGlzdFswXSB8fCBBcnJheS5pc0FycmF5KHR1cGxlT3JMaXN0WzBdKSA/IHR1cGxlT3JMaXN0IDogW3R1cGxlT3JMaXN0XTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgbGlzdDUubGVuZ3RoKSB7CiAgICBjb25zdCB0dXBsZSA9IGxpc3Q1W2luZGV4Ml07CiAgICByZXN1bHQucHVzaChbdG9FeHByZXNzaW9uKHR1cGxlWzBdKSwgdG9GdW5jdGlvbih0dXBsZVsxXSldKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiB0b0V4cHJlc3Npb24oZmluZDMpIHsKICByZXR1cm4gdHlwZW9mIGZpbmQzID09PSAic3RyaW5nIiA/IG5ldyBSZWdFeHAoZXNjYXBlU3RyaW5nUmVnZXhwKGZpbmQzKSwgImciKSA6IGZpbmQzOwp9CmZ1bmN0aW9uIHRvRnVuY3Rpb24ocmVwbGFjZTUpIHsKICByZXR1cm4gdHlwZW9mIHJlcGxhY2U1ID09PSAiZnVuY3Rpb24iID8gcmVwbGFjZTUgOiBmdW5jdGlvbigpIHsKICAgIHJldHVybiByZXBsYWNlNTsKICB9Owp9CnZhciBpbml0X2xpYjggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2VAMy4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZmluZC1hbmQtcmVwbGFjZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9lc2NhcGVfc3RyaW5nX3JlZ2V4cCgpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0X3BhcmVudHMoKTsKICAgIGluaXRfdW5pc3RfdXRpbF9pcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9maW5kX2FuZF9yZXBsYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1maW5kLWFuZC1yZXBsYWNlQDMuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZpbmQtYW5kLXJlcGxhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWI4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHRyYW5zZm9ybXM6IFt0cmFuc2Zvcm1HZm1BdXRvbGlua0xpdGVyYWxzXSwKICAgIGVudGVyOiB7CiAgICAgIGxpdGVyYWxBdXRvbGluazogZW50ZXJMaXRlcmFsQXV0b2xpbmssCiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsOiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlLAogICAgICBsaXRlcmFsQXV0b2xpbmtIdHRwOiBlbnRlckxpdGVyYWxBdXRvbGlua1ZhbHVlLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3c6IGVudGVyTGl0ZXJhbEF1dG9saW5rVmFsdWUKICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGxpdGVyYWxBdXRvbGluazogZXhpdExpdGVyYWxBdXRvbGluaywKICAgICAgbGl0ZXJhbEF1dG9saW5rRW1haWw6IGV4aXRMaXRlcmFsQXV0b2xpbmtFbWFpbCwKICAgICAgbGl0ZXJhbEF1dG9saW5rSHR0cDogZXhpdExpdGVyYWxBdXRvbGlua0h0dHAsCiAgICAgIGxpdGVyYWxBdXRvbGlua1d3dzogZXhpdExpdGVyYWxBdXRvbGlua1d3dwogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtQXV0b2xpbmtMaXRlcmFsVG9NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgdW5zYWZlOiBbCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJAIiwKICAgICAgICBiZWZvcmU6ICJbK1xcLS5cXHddIiwKICAgICAgICBhZnRlcjogIltcXC0uXFx3XSIsCiAgICAgICAgaW5Db25zdHJ1Y3QsCiAgICAgICAgbm90SW5Db25zdHJ1Y3QKICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIi4iLAogICAgICAgIGJlZm9yZTogIltXd10iLAogICAgICAgIGFmdGVyOiAiW1xcLS5cXHddIiwKICAgICAgICBpbkNvbnN0cnVjdCwKICAgICAgICBub3RJbkNvbnN0cnVjdAogICAgICB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiOiIsCiAgICAgICAgYmVmb3JlOiAiW3BzXSIsCiAgICAgICAgYWZ0ZXI6ICJcXC8iLAogICAgICAgIGluQ29uc3RydWN0LAogICAgICAgIG5vdEluQ29uc3RydWN0CiAgICAgIH0KICAgIF0KICB9Owp9CmZ1bmN0aW9uIGVudGVyTGl0ZXJhbEF1dG9saW5rKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJsaW5rIiwgdGl0bGU6IG51bGwsIHVybDogIiIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZW50ZXJMaXRlcmFsQXV0b2xpbmtWYWx1ZSh0b2tlbikgewogIHRoaXMuY29uZmlnLmVudGVyLmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGlua0h0dHAodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5leGl0LmF1dG9saW5rUHJvdG9jb2wuY2FsbCh0aGlzLCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdExpdGVyYWxBdXRvbGlua1d3dyh0b2tlbikgewogIHRoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAibGluayIpOwogIG5vZGUyLnVybCA9ICJodHRwOi8vIiArIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRMaXRlcmFsQXV0b2xpbmtFbWFpbCh0b2tlbikgewogIHRoaXMuY29uZmlnLmV4aXQuYXV0b2xpbmtFbWFpbC5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0TGl0ZXJhbEF1dG9saW5rKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiB0cmFuc2Zvcm1HZm1BdXRvbGlua0xpdGVyYWxzKHRyZWUpIHsKICBmaW5kQW5kUmVwbGFjZSgKICAgIHRyZWUsCiAgICBbCiAgICAgIFsvKGh0dHBzPzpcL1wvfHd3dyg/PVwuKSkoWy0uXHddKykoW14gXHRcclxuXSopL2dpLCBmaW5kVXJsXSwKICAgICAgWy8oPzw9Xnxcc3xccHtQfXxccHtTfSkoWy0uXHcrXSspQChbLVx3XSsoPzpcLlstXHddKykrKS9ndSwgZmluZEVtYWlsXQogICAgXSwKICAgIHsgaWdub3JlOiBbImxpbmsiLCAibGlua1JlZmVyZW5jZSJdIH0KICApOwp9CmZ1bmN0aW9uIGZpbmRVcmwoXzQsIHByb3RvY29sLCBkb21haW4yLCBwYXRoMiwgbWF0Y2gyKSB7CiAgbGV0IHByZWZpeDQgPSAiIjsKICBpZiAoIXByZXZpb3VzKG1hdGNoMikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKC9edy9pLnRlc3QocHJvdG9jb2wpKSB7CiAgICBkb21haW4yID0gcHJvdG9jb2wgKyBkb21haW4yOwogICAgcHJvdG9jb2wgPSAiIjsKICAgIHByZWZpeDQgPSAiaHR0cDovLyI7CiAgfQogIGlmICghaXNDb3JyZWN0RG9tYWluKGRvbWFpbjIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIGNvbnN0IHBhcnRzID0gc3BsaXRVcmwoZG9tYWluMiArIHBhdGgyKTsKICBpZiAoIXBhcnRzWzBdKSByZXR1cm4gZmFsc2U7CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImxpbmsiLAogICAgdGl0bGU6IG51bGwsCiAgICB1cmw6IHByZWZpeDQgKyBwcm90b2NvbCArIHBhcnRzWzBdLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHByb3RvY29sICsgcGFydHNbMF0gfV0KICB9OwogIGlmIChwYXJ0c1sxXSkgewogICAgcmV0dXJuIFtyZXN1bHQsIHsgdHlwZTogInRleHQiLCB2YWx1ZTogcGFydHNbMV0gfV07CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZmluZEVtYWlsKF80LCBhdGV4dCwgbGFiZWwsIG1hdGNoMikgewogIGlmICgKICAgIC8vIE5vdCBhbiBleHBlY3RlZCBwcmV2aW91cyBjaGFyYWN0ZXIuCiAgICAhcHJldmlvdXMobWF0Y2gyLCB0cnVlKSB8fCAvLyBMYWJlbCBlbmRzIGluIG5vdCBhbGxvd2VkIGNoYXJhY3Rlci4KICAgIC9bLVxkX10kLy50ZXN0KGxhYmVsKQogICkgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICByZXR1cm4gewogICAgdHlwZTogImxpbmsiLAogICAgdGl0bGU6IG51bGwsCiAgICB1cmw6ICJtYWlsdG86IiArIGF0ZXh0ICsgIkAiICsgbGFiZWwsCiAgICBjaGlsZHJlbjogW3sgdHlwZTogInRleHQiLCB2YWx1ZTogYXRleHQgKyAiQCIgKyBsYWJlbCB9XQogIH07Cn0KZnVuY3Rpb24gaXNDb3JyZWN0RG9tYWluKGRvbWFpbjIpIHsKICBjb25zdCBwYXJ0cyA9IGRvbWFpbjIuc3BsaXQoIi4iKTsKICBpZiAocGFydHMubGVuZ3RoIDwgMiB8fCBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSAmJiAoL18vLnRlc3QocGFydHNbcGFydHMubGVuZ3RoIC0gMV0pIHx8ICEvW2EtekEtWlxkXS8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSkpIHx8IHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdICYmICgvXy8udGVzdChwYXJ0c1twYXJ0cy5sZW5ndGggLSAyXSkgfHwgIS9bYS16QS1aXGRdLy50ZXN0KHBhcnRzW3BhcnRzLmxlbmd0aCAtIDJdKSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIHRydWU7Cn0KZnVuY3Rpb24gc3BsaXRVcmwodXJsKSB7CiAgY29uc3QgdHJhaWxFeGVjID0gL1shIiYnKSwuOjs8Pj9cXX1dKyQvLmV4ZWModXJsKTsKICBpZiAoIXRyYWlsRXhlYykgewogICAgcmV0dXJuIFt1cmwsIHZvaWQgMF07CiAgfQogIHVybCA9IHVybC5zbGljZSgwLCB0cmFpbEV4ZWMuaW5kZXgpOwogIGxldCB0cmFpbDIgPSB0cmFpbEV4ZWNbMF07CiAgbGV0IGNsb3NpbmdQYXJlbkluZGV4ID0gdHJhaWwyLmluZGV4T2YoIikiKTsKICBjb25zdCBvcGVuaW5nUGFyZW5zID0gY2NvdW50KHVybCwgIigiKTsKICBsZXQgY2xvc2luZ1BhcmVucyA9IGNjb3VudCh1cmwsICIpIik7CiAgd2hpbGUgKGNsb3NpbmdQYXJlbkluZGV4ICE9PSAtMSAmJiBvcGVuaW5nUGFyZW5zID4gY2xvc2luZ1BhcmVucykgewogICAgdXJsICs9IHRyYWlsMi5zbGljZSgwLCBjbG9zaW5nUGFyZW5JbmRleCArIDEpOwogICAgdHJhaWwyID0gdHJhaWwyLnNsaWNlKGNsb3NpbmdQYXJlbkluZGV4ICsgMSk7CiAgICBjbG9zaW5nUGFyZW5JbmRleCA9IHRyYWlsMi5pbmRleE9mKCIpIik7CiAgICBjbG9zaW5nUGFyZW5zKys7CiAgfQogIHJldHVybiBbdXJsLCB0cmFpbDJdOwp9CmZ1bmN0aW9uIHByZXZpb3VzKG1hdGNoMiwgZW1haWwpIHsKICBjb25zdCBjb2RlNCA9IG1hdGNoMi5pbnB1dC5jaGFyQ29kZUF0KG1hdGNoMi5pbmRleCAtIDEpOwogIHJldHVybiAobWF0Y2gyLmluZGV4ID09PSAwIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSB8fCB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpKSAmJiAvLyBJZiBpdOKAmXMgYW4gZW1haWwsIHRoZSBwcmV2aW91cyBjaGFyYWN0ZXIgc2hvdWxkIG5vdCBiZSBhIHNsYXNoLgogICghZW1haWwgfHwgY29kZTQgIT09IDQ3KTsKfQp2YXIgaW5Db25zdHJ1Y3QsIG5vdEluQ29uc3RydWN0Owp2YXIgaW5pdF9saWI5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9jY291bnQoKTsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9maW5kX2FuZF9yZXBsYWNlKCk7CiAgICBpbkNvbnN0cnVjdCA9ICJwaHJhc2luZyI7CiAgICBub3RJbkNvbnN0cnVjdCA9IFsiYXV0b2xpbmsiLCAibGluayIsICJpbWFnZSIsICJsYWJlbCJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV9hdXRvbGlua19saXRlcmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tYXV0b2xpbmstbGl0ZXJhbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLW5vcm1hbGl6ZS1pZGVudGlmaWVyQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllci9pbmRleC5qcwpmdW5jdGlvbiBub3JtYWxpemVJZGVudGlmaWVyKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvW1x0XG5cciBdKy9nLCAiICIpLnJlcGxhY2UoL14gfCAkL2csICIiKS50b0xvd2VyQ2FzZSgpLnRvVXBwZXJDYXNlKCk7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1ub3JtYWxpemUtaWRlbnRpZmllckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtbm9ybWFsaXplLWlkZW50aWZpZXIvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBlbnRlckZvb3Rub3RlQ2FsbFN0cmluZygpIHsKICB0aGlzLmJ1ZmZlcigpOwp9CmZ1bmN0aW9uIGVudGVyRm9vdG5vdGVDYWxsKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJmb290bm90ZVJlZmVyZW5jZSIsIGlkZW50aWZpZXI6ICIiLCBsYWJlbDogIiIgfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGVudGVyRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcoKSB7CiAgdGhpcy5idWZmZXIoKTsKfQpmdW5jdGlvbiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbih0b2tlbikgewogIHRoaXMuZW50ZXIoCiAgICB7IHR5cGU6ICJmb290bm90ZURlZmluaXRpb24iLCBpZGVudGlmaWVyOiAiIiwgbGFiZWw6ICIiLCBjaGlsZHJlbjogW10gfSwKICAgIHRva2VuCiAgKTsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVDYWxsU3RyaW5nKHRva2VuKSB7CiAgY29uc3QgbGFiZWwgPSB0aGlzLnJlc3VtZSgpOwogIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogIG9rKG5vZGUyLnR5cGUgPT09ICJmb290bm90ZVJlZmVyZW5jZSIpOwogIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKAogICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikKICApLnRvTG93ZXJDYXNlKCk7CiAgbm9kZTIubGFiZWwgPSBsYWJlbDsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVDYWxsKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcodG9rZW4pIHsKICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgb2sobm9kZTIudHlwZSA9PT0gImZvb3Rub3RlRGVmaW5pdGlvbiIpOwogIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKAogICAgdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikKICApLnRvTG93ZXJDYXNlKCk7CiAgbm9kZTIubGFiZWwgPSBsYWJlbDsKfQpmdW5jdGlvbiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICJbIjsKfQpmdW5jdGlvbiBmb290bm90ZVJlZmVyZW5jZShub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlteIik7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJmb290bm90ZVJlZmVyZW5jZSIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJyZWZlcmVuY2UiKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxMi5zYWZlKHN0YXRlMTIuYXNzb2NpYXRpb25JZChub2RlMiksIHsgYWZ0ZXI6ICJdIiwgYmVmb3JlOiB2YWx1ZTIgfSkKICApOwogIHN1YmV4aXQoKTsKICBleGl0MygpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl0iKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGdmbUZvb3Rub3RlRnJvbU1hcmtkb3duKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICBnZm1Gb290bm90ZUNhbGxTdHJpbmc6IGVudGVyRm9vdG5vdGVDYWxsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZUNhbGw6IGVudGVyRm9vdG5vdGVDYWxsLAogICAgICBnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZzogZW50ZXJGb290bm90ZURlZmluaXRpb25MYWJlbFN0cmluZywKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uOiBlbnRlckZvb3Rub3RlRGVmaW5pdGlvbgogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgZ2ZtRm9vdG5vdGVDYWxsU3RyaW5nOiBleGl0Rm9vdG5vdGVDYWxsU3RyaW5nLAogICAgICBnZm1Gb290bm90ZUNhbGw6IGV4aXRGb290bm90ZUNhbGwsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBleGl0Rm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmcsCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbjogZXhpdEZvb3Rub3RlRGVmaW5pdGlvbgogICAgfQogIH07Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVUb01hcmtkb3duKG9wdGlvbnMpIHsKICBsZXQgZmlyc3RMaW5lQmxhbmsgPSBmYWxzZTsKICBpZiAob3B0aW9ucyAmJiBvcHRpb25zLmZpcnN0TGluZUJsYW5rKSB7CiAgICBmaXJzdExpbmVCbGFuayA9IHRydWU7CiAgfQogIHJldHVybiB7CiAgICBoYW5kbGVyczogeyBmb290bm90ZURlZmluaXRpb24sIGZvb3Rub3RlUmVmZXJlbmNlIH0sCiAgICAvLyBUaGlzIGlzIG9uIGJ5IGRlZmF1bHQgYWxyZWFkeS4KICAgIHVuc2FmZTogW3sgY2hhcmFjdGVyOiAiWyIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInBocmFzaW5nIiwgInJlZmVyZW5jZSJdIH1dCiAgfTsKICBmdW5jdGlvbiBmb290bm90ZURlZmluaXRpb24obm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogICAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiW14iKTsKICAgIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigiZm9vdG5vdGVEZWZpbml0aW9uIik7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7IGJlZm9yZTogdmFsdWUyLCBhZnRlcjogIl0iIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXToiKTsKICAgIGlmIChub2RlMi5jaGlsZHJlbiAmJiBub2RlMi5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIHRyYWNrZXIuc2hpZnQoNCk7CiAgICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgICAgKGZpcnN0TGluZUJsYW5rID8gIlxuIiA6ICIgIikgKyBzdGF0ZTEyLmluZGVudExpbmVzKAogICAgICAgICAgc3RhdGUxMi5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICAgICAgICBmaXJzdExpbmVCbGFuayA/IG1hcEFsbCA6IG1hcEV4Y2VwdEZpcnN0CiAgICAgICAgKQogICAgICApOwogICAgfQogICAgZXhpdDMoKTsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQp9CmZ1bmN0aW9uIG1hcEV4Y2VwdEZpcnN0KGxpbmUsIGluZGV4MiwgYmxhbmspIHsKICByZXR1cm4gaW5kZXgyID09PSAwID8gbGluZSA6IG1hcEFsbChsaW5lLCBpbmRleDIsIGJsYW5rKTsKfQpmdW5jdGlvbiBtYXBBbGwobGluZSwgaW5kZXgyLCBibGFuaykgewogIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgICAgIikgKyBsaW5lOwp9CnZhciBpbml0X2xpYjEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLWZvb3Rub3RlL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RlZmF1bHQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGZvb3Rub3RlUmVmZXJlbmNlLnBlZWsgPSBmb290bm90ZVJlZmVyZW5jZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fZm9vdG5vdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tZm9vdG5vdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaEZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgY2FuQ29udGFpbkVvbHM6IFsiZGVsZXRlIl0sCiAgICBlbnRlcjogeyBzdHJpa2V0aHJvdWdoOiBlbnRlclN0cmlrZXRocm91Z2ggfSwKICAgIGV4aXQ6IHsgc3RyaWtldGhyb3VnaDogZXhpdFN0cmlrZXRocm91Z2ggfQogIH07Cn0KZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaFRvTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAifiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaAogICAgICB9CiAgICBdLAogICAgaGFuZGxlcnM6IHsgZGVsZXRlOiBoYW5kbGVEZWxldGUgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5lbnRlcih7IHR5cGU6ICJkZWxldGUiLCBjaGlsZHJlbjogW10gfSwgdG9rZW4pOwp9CmZ1bmN0aW9uIGV4aXRTdHJpa2V0aHJvdWdoKHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBoYW5kbGVEZWxldGUobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoInN0cmlrZXRocm91Z2giKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJ+fiIpOwogIHZhbHVlMiArPSBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAuLi50cmFja2VyLmN1cnJlbnQoKSwKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJ+IgogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIn5+Iik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIHBlZWtEZWxldGUoKSB7CiAgcmV0dXJuICJ+IjsKfQp2YXIgY29uc3RydWN0c1dpdGhvdXRTdHJpa2V0aHJvdWdoOwp2YXIgaW5pdF9saWIxMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2hAMi4wLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2luZGV4LmpzIigpIHsKICAgIGNvbnN0cnVjdHNXaXRob3V0U3RyaWtldGhyb3VnaCA9IFsKICAgICAgImF1dG9saW5rIiwKICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICJkZXN0aW5hdGlvblJhdyIsCiAgICAgICJyZWZlcmVuY2UiLAogICAgICAidGl0bGVRdW90ZSIsCiAgICAgICJ0aXRsZUFwb3N0cm9waGUiCiAgICBdOwogICAgaGFuZGxlRGVsZXRlLnBlZWsgPSBwZWVrRGVsZXRlOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV9zdHJpa2V0aHJvdWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaEAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tc3RyaWtldGhyb3VnaC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjExKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tYXJrZG93bi10YWJsZUAzLjAuNC9ub2RlX21vZHVsZXMvbWFya2Rvd24tdGFibGUvaW5kZXguanMKZnVuY3Rpb24gZGVmYXVsdFN0cmluZ0xlbmd0aCh2YWx1ZTIpIHsKICByZXR1cm4gdmFsdWUyLmxlbmd0aDsKfQpmdW5jdGlvbiBtYXJrZG93blRhYmxlKHRhYmxlMiwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBhbGlnbiA9IChzZXR0aW5ncy5hbGlnbiB8fCBbXSkuY29uY2F0KCk7CiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoIHx8IGRlZmF1bHRTdHJpbmdMZW5ndGg7CiAgY29uc3QgYWxpZ25tZW50cyA9IFtdOwogIGNvbnN0IGNlbGxNYXRyaXggPSBbXTsKICBjb25zdCBzaXplTWF0cml4ID0gW107CiAgY29uc3QgbG9uZ2VzdENlbGxCeUNvbHVtbiA9IFtdOwogIGxldCBtb3N0Q2VsbHNQZXJSb3cgPSAwOwogIGxldCByb3dJbmRleCA9IC0xOwogIHdoaWxlICgrK3Jvd0luZGV4IDwgdGFibGUyLmxlbmd0aCkgewogICAgY29uc3Qgcm93MiA9IFtdOwogICAgY29uc3Qgc2l6ZXMyID0gW107CiAgICBsZXQgY29sdW1uSW5kZXgyID0gLTE7CiAgICBpZiAodGFibGUyW3Jvd0luZGV4XS5sZW5ndGggPiBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgICAgbW9zdENlbGxzUGVyUm93ID0gdGFibGUyW3Jvd0luZGV4XS5sZW5ndGg7CiAgICB9CiAgICB3aGlsZSAoKytjb2x1bW5JbmRleDIgPCB0YWJsZTJbcm93SW5kZXhdLmxlbmd0aCkgewogICAgICBjb25zdCBjZWxsMiA9IHNlcmlhbGl6ZSh0YWJsZTJbcm93SW5kZXhdW2NvbHVtbkluZGV4Ml0pOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGNvbnN0IHNpemUgPSBzdHJpbmdMZW5ndGgoY2VsbDIpOwogICAgICAgIHNpemVzMltjb2x1bW5JbmRleDJdID0gc2l6ZTsKICAgICAgICBpZiAobG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleDJdID09PSB2b2lkIDAgfHwgc2l6ZSA+IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXgyXSkgewogICAgICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleDJdID0gc2l6ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgcm93Mi5wdXNoKGNlbGwyKTsKICAgIH0KICAgIGNlbGxNYXRyaXhbcm93SW5kZXhdID0gcm93MjsKICAgIHNpemVNYXRyaXhbcm93SW5kZXhdID0gc2l6ZXMyOwogIH0KICBsZXQgY29sdW1uSW5kZXggPSAtMTsKICBpZiAodHlwZW9mIGFsaWduID09PSAib2JqZWN0IiAmJiAibGVuZ3RoIiBpbiBhbGlnbikgewogICAgd2hpbGUgKCsrY29sdW1uSW5kZXggPCBtb3N0Q2VsbHNQZXJSb3cpIHsKICAgICAgYWxpZ25tZW50c1tjb2x1bW5JbmRleF0gPSB0b0FsaWdubWVudChhbGlnbltjb2x1bW5JbmRleF0pOwogICAgfQogIH0gZWxzZSB7CiAgICBjb25zdCBjb2RlNCA9IHRvQWxpZ25tZW50KGFsaWduKTsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGFsaWdubWVudHNbY29sdW1uSW5kZXhdID0gY29kZTQ7CiAgICB9CiAgfQogIGNvbHVtbkluZGV4ID0gLTE7CiAgY29uc3Qgcm93ID0gW107CiAgY29uc3Qgc2l6ZXMgPSBbXTsKICB3aGlsZSAoKytjb2x1bW5JbmRleCA8IG1vc3RDZWxsc1BlclJvdykgewogICAgY29uc3QgY29kZTQgPSBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XTsKICAgIGxldCBiZWZvcmUgPSAiIjsKICAgIGxldCBhZnRlciA9ICIiOwogICAgaWYgKGNvZGU0ID09PSA5OSkgewogICAgICBiZWZvcmUgPSAiOiI7CiAgICAgIGFmdGVyID0gIjoiOwogICAgfSBlbHNlIGlmIChjb2RlNCA9PT0gMTA4KSB7CiAgICAgIGJlZm9yZSA9ICI6IjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPT09IDExNCkgewogICAgICBhZnRlciA9ICI6IjsKICAgIH0KICAgIGxldCBzaXplID0gc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzID09PSBmYWxzZSA/IDEgOiBNYXRoLm1heCgKICAgICAgMSwKICAgICAgbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0gLSBiZWZvcmUubGVuZ3RoIC0gYWZ0ZXIubGVuZ3RoCiAgICApOwogICAgY29uc3QgY2VsbDIgPSBiZWZvcmUgKyAiLSIucmVwZWF0KHNpemUpICsgYWZ0ZXI7CiAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICBzaXplID0gYmVmb3JlLmxlbmd0aCArIHNpemUgKyBhZnRlci5sZW5ndGg7CiAgICAgIGlmIChzaXplID4gbG9uZ2VzdENlbGxCeUNvbHVtbltjb2x1bW5JbmRleF0pIHsKICAgICAgICBsb25nZXN0Q2VsbEJ5Q29sdW1uW2NvbHVtbkluZGV4XSA9IHNpemU7CiAgICAgIH0KICAgICAgc2l6ZXNbY29sdW1uSW5kZXhdID0gc2l6ZTsKICAgIH0KICAgIHJvd1tjb2x1bW5JbmRleF0gPSBjZWxsMjsKICB9CiAgY2VsbE1hdHJpeC5zcGxpY2UoMSwgMCwgcm93KTsKICBzaXplTWF0cml4LnNwbGljZSgxLCAwLCBzaXplcyk7CiAgcm93SW5kZXggPSAtMTsKICBjb25zdCBsaW5lcyA9IFtdOwogIHdoaWxlICgrK3Jvd0luZGV4IDwgY2VsbE1hdHJpeC5sZW5ndGgpIHsKICAgIGNvbnN0IHJvdzIgPSBjZWxsTWF0cml4W3Jvd0luZGV4XTsKICAgIGNvbnN0IHNpemVzMiA9IHNpemVNYXRyaXhbcm93SW5kZXhdOwogICAgY29sdW1uSW5kZXggPSAtMTsKICAgIGNvbnN0IGxpbmUgPSBbXTsKICAgIHdoaWxlICgrK2NvbHVtbkluZGV4IDwgbW9zdENlbGxzUGVyUm93KSB7CiAgICAgIGNvbnN0IGNlbGwyID0gcm93Mltjb2x1bW5JbmRleF0gfHwgIiI7CiAgICAgIGxldCBiZWZvcmUgPSAiIjsKICAgICAgbGV0IGFmdGVyID0gIiI7CiAgICAgIGlmIChzZXR0aW5ncy5hbGlnbkRlbGltaXRlcnMgIT09IGZhbHNlKSB7CiAgICAgICAgY29uc3Qgc2l6ZSA9IGxvbmdlc3RDZWxsQnlDb2x1bW5bY29sdW1uSW5kZXhdIC0gKHNpemVzMltjb2x1bW5JbmRleF0gfHwgMCk7CiAgICAgICAgY29uc3QgY29kZTQgPSBhbGlnbm1lbnRzW2NvbHVtbkluZGV4XTsKICAgICAgICBpZiAoY29kZTQgPT09IDExNCkgewogICAgICAgICAgYmVmb3JlID0gIiAiLnJlcGVhdChzaXplKTsKICAgICAgICB9IGVsc2UgaWYgKGNvZGU0ID09PSA5OSkgewogICAgICAgICAgaWYgKHNpemUgJSAyKSB7CiAgICAgICAgICAgIGJlZm9yZSA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIgKyAwLjUpOwogICAgICAgICAgICBhZnRlciA9ICIgIi5yZXBlYXQoc2l6ZSAvIDIgLSAwLjUpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgYmVmb3JlID0gIiAiLnJlcGVhdChzaXplIC8gMik7CiAgICAgICAgICAgIGFmdGVyID0gYmVmb3JlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhZnRlciA9ICIgIi5yZXBlYXQoc2l6ZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChzZXR0aW5ncy5kZWxpbWl0ZXJTdGFydCAhPT0gZmFsc2UgJiYgIWNvbHVtbkluZGV4KSB7CiAgICAgICAgbGluZS5wdXNoKCJ8Iik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLnBhZGRpbmcgIT09IGZhbHNlICYmIC8vIERvbuKAmXQgYWRkIHRoZSBvcGVuaW5nIHNwYWNlIGlmIHdl4oCZcmUgbm90IGFsaWduaW5nIGFuZCB0aGUgY2VsbCBpcwogICAgICAvLyBlbXB0eTogdGhlcmUgd2lsbCBiZSBhIGNsb3Npbmcgc3BhY2UuCiAgICAgICEoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzID09PSBmYWxzZSAmJiBjZWxsMiA9PT0gIiIpICYmIChzZXR0aW5ncy5kZWxpbWl0ZXJTdGFydCAhPT0gZmFsc2UgfHwgY29sdW1uSW5kZXgpKSB7CiAgICAgICAgbGluZS5wdXNoKCIgIik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLmFsaWduRGVsaW1pdGVycyAhPT0gZmFsc2UpIHsKICAgICAgICBsaW5lLnB1c2goYmVmb3JlKTsKICAgICAgfQogICAgICBsaW5lLnB1c2goY2VsbDIpOwogICAgICBpZiAoc2V0dGluZ3MuYWxpZ25EZWxpbWl0ZXJzICE9PSBmYWxzZSkgewogICAgICAgIGxpbmUucHVzaChhZnRlcik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLnBhZGRpbmcgIT09IGZhbHNlKSB7CiAgICAgICAgbGluZS5wdXNoKCIgIik7CiAgICAgIH0KICAgICAgaWYgKHNldHRpbmdzLmRlbGltaXRlckVuZCAhPT0gZmFsc2UgfHwgY29sdW1uSW5kZXggIT09IG1vc3RDZWxsc1BlclJvdyAtIDEpIHsKICAgICAgICBsaW5lLnB1c2goInwiKTsKICAgICAgfQogICAgfQogICAgbGluZXMucHVzaCgKICAgICAgc2V0dGluZ3MuZGVsaW1pdGVyRW5kID09PSBmYWxzZSA/IGxpbmUuam9pbigiIikucmVwbGFjZSgvICskLywgIiIpIDogbGluZS5qb2luKCIiKQogICAgKTsKICB9CiAgcmV0dXJuIGxpbmVzLmpvaW4oIlxuIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIgPT09IG51bGwgfHwgdmFsdWUyID09PSB2b2lkIDAgPyAiIiA6IFN0cmluZyh2YWx1ZTIpOwp9CmZ1bmN0aW9uIHRvQWxpZ25tZW50KHZhbHVlMikgewogIGNvbnN0IGNvZGU0ID0gdHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIgPyB2YWx1ZTIuY29kZVBvaW50QXQoMCkgOiAwOwogIHJldHVybiBjb2RlNCA9PT0gNjcgfHwgY29kZTQgPT09IDk5ID8gOTkgOiBjb2RlNCA9PT0gNzYgfHwgY29kZTQgPT09IDEwOCA/IDEwOCA6IGNvZGU0ID09PSA4MiB8fCBjb2RlNCA9PT0gMTE0ID8gMTE0IDogMDsKfQp2YXIgaW5pdF9tYXJrZG93bl90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21hcmtkb3duLXRhYmxlQDMuMC40L25vZGVfbW9kdWxlcy9tYXJrZG93bi10YWJsZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS96d2l0Y2hAMi4wLjQvbm9kZV9tb2R1bGVzL3p3aXRjaC9pbmRleC5qcwpmdW5jdGlvbiB6d2l0Y2goa2V5Miwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBmdW5jdGlvbiBvbmUzKHZhbHVlMiwgLi4ucGFyYW1ldGVycykgewogICAgbGV0IGZuID0gb25lMy5pbnZhbGlkOwogICAgY29uc3QgaGFuZGxlcnMyID0gb25lMy5oYW5kbGVyczsKICAgIGlmICh2YWx1ZTIgJiYgb3duMi5jYWxsKHZhbHVlMiwga2V5MikpIHsKICAgICAgY29uc3QgaWQgPSBTdHJpbmcodmFsdWUyW2tleTJdKTsKICAgICAgZm4gPSBvd24yLmNhbGwoaGFuZGxlcnMyLCBpZCkgPyBoYW5kbGVyczJbaWRdIDogb25lMy51bmtub3duOwogICAgfQogICAgaWYgKGZuKSB7CiAgICAgIHJldHVybiBmbi5jYWxsKHRoaXMsIHZhbHVlMiwgLi4ucGFyYW1ldGVycyk7CiAgICB9CiAgfQogIG9uZTMuaGFuZGxlcnMgPSBzZXR0aW5ncy5oYW5kbGVycyB8fCB7fTsKICBvbmUzLmludmFsaWQgPSBzZXR0aW5ncy5pbnZhbGlkOwogIG9uZTMudW5rbm93biA9IHNldHRpbmdzLnVua25vd247CiAgcmV0dXJuIG9uZTM7Cn0KdmFyIG93bjI7CnZhciBpbml0X3p3aXRjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3p3aXRjaEAyLjAuNC9ub2RlX21vZHVsZXMvendpdGNoL2luZGV4LmpzIigpIHsKICAgIG93bjIgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2NvbmZpZ3VyZS5qcwpmdW5jdGlvbiBjb25maWd1cmUoYmFzZSwgZXh0ZW5zaW9uMikgewogIGxldCBpbmRleDIgPSAtMTsKICBsZXQga2V5MjsKICBpZiAoZXh0ZW5zaW9uMi5leHRlbnNpb25zKSB7CiAgICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb24yLmV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICAgIGNvbmZpZ3VyZShiYXNlLCBleHRlbnNpb24yLmV4dGVuc2lvbnNbaW5kZXgyXSk7CiAgICB9CiAgfQogIGZvciAoa2V5MiBpbiBleHRlbnNpb24yKSB7CiAgICBpZiAob3duMy5jYWxsKGV4dGVuc2lvbjIsIGtleTIpKSB7CiAgICAgIHN3aXRjaCAoa2V5MikgewogICAgICAgIGNhc2UgImV4dGVuc2lvbnMiOiB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgLyogYzggaWdub3JlIG5leHQgNCAqLwogICAgICAgIGNhc2UgInVuc2FmZSI6IHsKICAgICAgICAgIGxpc3QoYmFzZVtrZXkyXSwgZXh0ZW5zaW9uMltrZXkyXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiam9pbiI6IHsKICAgICAgICAgIGxpc3QoYmFzZVtrZXkyXSwgZXh0ZW5zaW9uMltrZXkyXSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiaGFuZGxlcnMiOiB7CiAgICAgICAgICBtYXAzKGJhc2Vba2V5Ml0sIGV4dGVuc2lvbjJba2V5Ml0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGJhc2Uub3B0aW9uc1trZXkyXSA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBiYXNlOwp9CmZ1bmN0aW9uIGxpc3QobGVmdCwgcmlnaHQpIHsKICBpZiAocmlnaHQpIHsKICAgIGxlZnQucHVzaCguLi5yaWdodCk7CiAgfQp9CmZ1bmN0aW9uIG1hcDMobGVmdCwgcmlnaHQpIHsKICBpZiAocmlnaHQpIHsKICAgIE9iamVjdC5hc3NpZ24obGVmdCwgcmlnaHQpOwogIH0KfQp2YXIgb3duMzsKdmFyIGluaXRfY29uZmlndXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvY29uZmlndXJlLmpzIigpIHsKICAgIG93bjMgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9ibG9ja3F1b3RlLmpzCmZ1bmN0aW9uIGJsb2NrcXVvdGUobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJibG9ja3F1b3RlIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICB0cmFja2VyLm1vdmUoIj4gIik7CiAgdHJhY2tlci5zaGlmdCgyKTsKICBjb25zdCB2YWx1ZTIgPSBzdGF0ZTEyLmluZGVudExpbmVzKAogICAgc3RhdGUxMi5jb250YWluZXJGbG93KG5vZGUyLCB0cmFja2VyLmN1cnJlbnQoKSksCiAgICBtYXA0CiAgKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbWFwNChsaW5lLCBfNCwgYmxhbmspIHsKICByZXR1cm4gIj4iICsgKGJsYW5rID8gIiIgOiAiICIpICsgbGluZTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2Jsb2NrcXVvdGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9wYXR0ZXJuLWluLXNjb3BlLmpzCmZ1bmN0aW9uIHBhdHRlcm5JblNjb3BlKHN0YWNrLCBwYXR0ZXJuKSB7CiAgcmV0dXJuIGxpc3RJblNjb3BlKHN0YWNrLCBwYXR0ZXJuLmluQ29uc3RydWN0LCB0cnVlKSAmJiAhbGlzdEluU2NvcGUoc3RhY2ssIHBhdHRlcm4ubm90SW5Db25zdHJ1Y3QsIGZhbHNlKTsKfQpmdW5jdGlvbiBsaXN0SW5TY29wZShzdGFjaywgbGlzdDUsIG5vbmUpIHsKICBpZiAodHlwZW9mIGxpc3Q1ID09PSAic3RyaW5nIikgewogICAgbGlzdDUgPSBbbGlzdDVdOwogIH0KICBpZiAoIWxpc3Q1IHx8IGxpc3Q1Lmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIG5vbmU7CiAgfQogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgIGlmIChzdGFjay5pbmNsdWRlcyhsaXN0NVtpbmRleDJdKSkgewogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CnZhciBpbml0X3BhdHRlcm5faW5fc2NvcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3BhdHRlcm4taW4tc2NvcGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhayhfNCwgXzEsIHN0YXRlMTIsIGluZm8pIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxMi51bnNhZmUubGVuZ3RoKSB7CiAgICBpZiAoc3RhdGUxMi51bnNhZmVbaW5kZXgyXS5jaGFyYWN0ZXIgPT09ICJcbiIgJiYgcGF0dGVybkluU2NvcGUoc3RhdGUxMi5zdGFjaywgc3RhdGUxMi51bnNhZmVbaW5kZXgyXSkpIHsKICAgICAgcmV0dXJuIC9bIFx0XS8udGVzdChpbmZvLmJlZm9yZSkgPyAiIiA6ICIgIjsKICAgIH0KICB9CiAgcmV0dXJuICJcXFxuIjsKfQp2YXIgaW5pdF9icmVhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9icmVhay5qcyIoKSB7CiAgICBpbml0X3BhdHRlcm5faW5fc2NvcGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xvbmdlc3Qtc3RyZWFrQDMuMS4wL25vZGVfbW9kdWxlcy9sb25nZXN0LXN0cmVhay9pbmRleC5qcwpmdW5jdGlvbiBsb25nZXN0U3RyZWFrKHZhbHVlMiwgc3Vic3RyaW5nKSB7CiAgY29uc3Qgc291cmNlID0gU3RyaW5nKHZhbHVlMik7CiAgbGV0IGluZGV4MiA9IHNvdXJjZS5pbmRleE9mKHN1YnN0cmluZyk7CiAgbGV0IGV4cGVjdGVkID0gaW5kZXgyOwogIGxldCBjb3VudDIgPSAwOwogIGxldCBtYXgzID0gMDsKICBpZiAodHlwZW9mIHN1YnN0cmluZyAhPT0gInN0cmluZyIpIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkV4cGVjdGVkIHN1YnN0cmluZyIpOwogIH0KICB3aGlsZSAoaW5kZXgyICE9PSAtMSkgewogICAgaWYgKGluZGV4MiA9PT0gZXhwZWN0ZWQpIHsKICAgICAgaWYgKCsrY291bnQyID4gbWF4MykgewogICAgICAgIG1heDMgPSBjb3VudDI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvdW50MiA9IDE7CiAgICB9CiAgICBleHBlY3RlZCA9IGluZGV4MiArIHN1YnN0cmluZy5sZW5ndGg7CiAgICBpbmRleDIgPSBzb3VyY2UuaW5kZXhPZihzdWJzdHJpbmcsIGV4cGVjdGVkKTsKICB9CiAgcmV0dXJuIG1heDM7Cn0KdmFyIGluaXRfbG9uZ2VzdF9zdHJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sb25nZXN0LXN0cmVha0AzLjEuMC9ub2RlX21vZHVsZXMvbG9uZ2VzdC1zdHJlYWsvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtY29kZS1hcy1pbmRlbnRlZC5qcwpmdW5jdGlvbiBmb3JtYXRDb2RlQXNJbmRlbnRlZChub2RlMiwgc3RhdGUxMikgewogIHJldHVybiBCb29sZWFuKAogICAgc3RhdGUxMi5vcHRpb25zLmZlbmNlcyA9PT0gZmFsc2UgJiYgbm9kZTIudmFsdWUgJiYgLy8gSWYgdGhlcmXigJlzIG5vIGluZm/igKYKICAgICFub2RlMi5sYW5nICYmIC8vIEFuZCB0aGVyZeKAmXMgYSBub24td2hpdGVzcGFjZSBjaGFyYWN0ZXLigKYKICAgIC9bXiBcclxuXS8udGVzdChub2RlMi52YWx1ZSkgJiYgLy8gQW5kIHRoZSB2YWx1ZSBkb2VzbuKAmXQgc3RhcnQgb3IgZW5kIGluIGEgYmxhbmvigKYKICAgICEvXltcdCBdKig/OltcclxuXXwkKXwoPzpefFtcclxuXSlbXHQgXSokLy50ZXN0KG5vZGUyLnZhbHVlKQogICk7Cn0KdmFyIGluaXRfZm9ybWF0X2NvZGVfYXNfaW5kZW50ZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1jb2RlLWFzLWluZGVudGVkLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stZmVuY2UuanMKZnVuY3Rpb24gY2hlY2tGZW5jZShzdGF0ZTEyKSB7CiAgY29uc3QgbWFya2VyID0gc3RhdGUxMi5vcHRpb25zLmZlbmNlIHx8ICJgIjsKICBpZiAobWFya2VyICE9PSAiYCIgJiYgbWFya2VyICE9PSAifiIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgY29kZSB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmZlbmNlYCwgZXhwZWN0ZWQgYGAgYCBgYCBvciBgfmAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2ZlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1mZW5jZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvY29kZS5qcwpmdW5jdGlvbiBjb2RlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrRmVuY2Uoc3RhdGUxMik7CiAgY29uc3QgcmF3MiA9IG5vZGUyLnZhbHVlIHx8ICIiOwogIGNvbnN0IHN1ZmZpeCA9IG1hcmtlciA9PT0gImAiID8gIkdyYXZlQWNjZW50IiA6ICJUaWxkZSI7CiAgaWYgKGZvcm1hdENvZGVBc0luZGVudGVkKG5vZGUyLCBzdGF0ZTEyKSkgewogICAgY29uc3QgZXhpdDQgPSBzdGF0ZTEyLmVudGVyKCJjb2RlSW5kZW50ZWQiKTsKICAgIGNvbnN0IHZhbHVlMyA9IHN0YXRlMTIuaW5kZW50TGluZXMocmF3MiwgbWFwNSk7CiAgICBleGl0NCgpOwogICAgcmV0dXJuIHZhbHVlMzsKICB9CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBzZXF1ZW5jZSA9IG1hcmtlci5yZXBlYXQoTWF0aC5tYXgobG9uZ2VzdFN0cmVhayhyYXcyLCBtYXJrZXIpICsgMSwgMykpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigiY29kZUZlbmNlZCIpOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoc2VxdWVuY2UpOwogIGlmIChub2RlMi5sYW5nKSB7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgY29kZUZlbmNlZExhbmcke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi5sYW5nLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6ICIgIiwKICAgICAgICBlbmNvZGU6IFsiYCJdLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgc3ViZXhpdCgpOwogIH0KICBpZiAobm9kZTIubGFuZyAmJiBub2RlMi5tZXRhKSB7CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgY29kZUZlbmNlZE1ldGEke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIiAiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi5tZXRhLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6ICJcbiIsCiAgICAgICAgZW5jb2RlOiBbImAiXSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHN1YmV4aXQoKTsKICB9CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXG4iKTsKICBpZiAocmF3MikgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShyYXcyICsgIlxuIik7CiAgfQogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoc2VxdWVuY2UpOwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQpmdW5jdGlvbiBtYXA1KGxpbmUsIF80LCBibGFuaykgewogIHJldHVybiAoYmxhbmsgPyAiIiA6ICIgICAgIikgKyBsaW5lOwp9CnZhciBpbml0X2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvY29kZS5qcyIoKSB7CiAgICBpbml0X2xvbmdlc3Rfc3RyZWFrKCk7CiAgICBpbml0X2Zvcm1hdF9jb2RlX2FzX2luZGVudGVkKCk7CiAgICBpbml0X2NoZWNrX2ZlbmNlKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXF1b3RlLmpzCmZ1bmN0aW9uIGNoZWNrUXVvdGUoc3RhdGUxMikgewogIGNvbnN0IG1hcmtlciA9IHN0YXRlMTIub3B0aW9ucy5xdW90ZSB8fCAnIic7CiAgaWYgKG1hcmtlciAhPT0gJyInICYmIG1hcmtlciAhPT0gIiciKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHRpdGxlIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMucXVvdGVgLCBleHBlY3RlZCBgXCJgLCBvciBgJ2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1xdW90ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZGVmaW5pdGlvbi5qcwpmdW5jdGlvbiBkZWZpbml0aW9uKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IHF1b3RlID0gY2hlY2tRdW90ZShzdGF0ZTEyKTsKICBjb25zdCBzdWZmaXggPSBxdW90ZSA9PT0gJyInID8gIlF1b3RlIiA6ICJBcG9zdHJvcGhlIjsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImRlZmluaXRpb24iKTsKICBsZXQgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImxhYmVsIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgdmFsdWUyID0gdHJhY2tlci5tb3ZlKCJbIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7CiAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICBhZnRlcjogIl0iLAogICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgfSkKICApOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIl06ICIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsLCBvcuKApgogICAgIW5vZGUyLnVybCB8fCAvLyBJZiB0aGVyZSBhcmUgY29udHJvbCBjaGFyYWN0ZXJzIG9yIHdoaXRlc3BhY2UuCiAgICAvW1wwLSBcdTAwN0ZdLy50ZXN0KG5vZGUyLnVybCkKICApIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvbkxpdGVyYWwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIjwiKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi51cmwsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiPiIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPiIpOwogIH0gZWxzZSB7CiAgICBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigiZGVzdGluYXRpb25SYXciKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi51cmwsIHsKICAgICAgICBiZWZvcmU6IHZhbHVlMiwKICAgICAgICBhZnRlcjogbm9kZTIudGl0bGUgPyAiICIgOiAiXG4iLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogIH0KICBzdWJleGl0KCk7CiAgaWYgKG5vZGUyLnRpdGxlKSB7CiAgICBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcihgdGl0bGUke3N1ZmZpeH1gKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoIiAiICsgcXVvdGUpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnRpdGxlLCB7CiAgICAgICAgYmVmb3JlOiB2YWx1ZTIsCiAgICAgICAgYWZ0ZXI6IHF1b3RlLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pCiAgICApOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZShxdW90ZSk7CiAgICBzdWJleGl0KCk7CiAgfQogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9kZWZpbml0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2RlZmluaXRpb24uanMiKCkgewogICAgaW5pdF9jaGVja19xdW90ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1lbXBoYXNpcy5qcwpmdW5jdGlvbiBjaGVja0VtcGhhc2lzKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuZW1waGFzaXMgfHwgIioiOwogIGlmIChtYXJrZXIgIT09ICIqIiAmJiBtYXJrZXIgIT09ICJfIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBlbXBoYXNpcyB3aXRoIGAiICsgbWFya2VyICsgImAgZm9yIGBvcHRpb25zLmVtcGhhc2lzYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2VtcGhhc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1lbXBoYXNpcy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2VuY29kZS1jaGFyYWN0ZXItcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShjb2RlNCkgewogIHJldHVybiAiJiN4IiArIGNvZGU0LnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpICsgIjsiOwp9CnZhciBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtY2hhcmFjdGVyLXJlZmVyZW5jZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jbGFzc2lmeS1jaGFyYWN0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3Rlci9pbmRleC5qcwpmdW5jdGlvbiBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCkgewogIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSB8fCB1bmljb2RlV2hpdGVzcGFjZShjb2RlNCkpIHsKICAgIHJldHVybiAxOwogIH0KICBpZiAodW5pY29kZVB1bmN0dWF0aW9uKGNvZGU0KSkgewogICAgcmV0dXJuIDI7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNsYXNzaWZ5LWNoYXJhY3RlckAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2xhc3NpZnktY2hhcmFjdGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2VuY29kZS1pbmZvLmpzCmZ1bmN0aW9uIGVuY29kZUluZm8ob3V0c2lkZSwgaW5zaWRlLCBtYXJrZXIpIHsKICBjb25zdCBvdXRzaWRlS2luZCA9IGNsYXNzaWZ5Q2hhcmFjdGVyKG91dHNpZGUpOwogIGNvbnN0IGluc2lkZUtpbmQgPSBjbGFzc2lmeUNoYXJhY3RlcihpbnNpZGUpOwogIGlmIChvdXRzaWRlS2luZCA9PT0gdm9pZCAwKSB7CiAgICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgICAvLyBMZXR0ZXIgaW5zaWRlOgogICAgICAvLyB3ZSBoYXZlIHRvIGVuY29kZSAqYm90aCogbGV0dGVycyBmb3IgYF9gIGFzIGl0IGlzIGxvb3Nlci4KICAgICAgLy8gaXQgYWxyZWFkeSBmb3JtcyBmb3IgYCpgIChhbmQgR0ZNcyBgfmApLgogICAgICBtYXJrZXIgPT09ICJfIiA/IHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0gOiB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICAgICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgICAvLyBXaGl0ZXNwYWNlIGluc2lkZTogZW5jb2RlIGJvdGggKGxldHRlciwgd2hpdGVzcGFjZSkuCiAgICAgIHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0KICAgICkgOiAoCiAgICAgIC8vIFB1bmN0dWF0aW9uIGluc2lkZTogZW5jb2RlIG91dGVyIChsZXR0ZXIpCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogdHJ1ZSB9CiAgICApOwogIH0KICBpZiAob3V0c2lkZUtpbmQgPT09IDEpIHsKICAgIHJldHVybiBpbnNpZGVLaW5kID09PSB2b2lkIDAgPyAoCiAgICAgIC8vIExldHRlciBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICAgKSA6IGluc2lkZUtpbmQgPT09IDEgPyAoCiAgICAgIC8vIFdoaXRlc3BhY2UgaW5zaWRlOiBlbmNvZGUgYm90aCAod2hpdGVzcGFjZSkuCiAgICAgIHsgaW5zaWRlOiB0cnVlLCBvdXRzaWRlOiB0cnVlIH0KICAgICkgOiAoCiAgICAgIC8vIFB1bmN0dWF0aW9uIGluc2lkZTogYWxyZWFkeSBmb3Jtcy4KICAgICAgeyBpbnNpZGU6IGZhbHNlLCBvdXRzaWRlOiBmYWxzZSB9CiAgICApOwogIH0KICByZXR1cm4gaW5zaWRlS2luZCA9PT0gdm9pZCAwID8gKAogICAgLy8gTGV0dGVyIGluc2lkZTogYWxyZWFkeSBmb3Jtcy4KICAgIHsgaW5zaWRlOiBmYWxzZSwgb3V0c2lkZTogZmFsc2UgfQogICkgOiBpbnNpZGVLaW5kID09PSAxID8gKAogICAgLy8gV2hpdGVzcGFjZSBpbnNpZGU6IGVuY29kZSBpbm5lciAod2hpdGVzcGFjZSkuCiAgICB7IGluc2lkZTogdHJ1ZSwgb3V0c2lkZTogZmFsc2UgfQogICkgOiAoCiAgICAvLyBQdW5jdHVhdGlvbiBpbnNpZGU6IGFscmVhZHkgZm9ybXMuCiAgICB7IGluc2lkZTogZmFsc2UsIG91dHNpZGU6IGZhbHNlIH0KICApOwp9CnZhciBpbml0X2VuY29kZV9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9lbmNvZGUtaW5mby5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2VtcGhhc2lzLmpzCmZ1bmN0aW9uIGVtcGhhc2lzKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrRW1waGFzaXMoc3RhdGUxMik7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJlbXBoYXNpcyIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTEyLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgY29uc3QgYmVmb3JlID0gdHJhY2tlci5tb3ZlKG1hcmtlcik7CiAgbGV0IGJldHdlZW4yID0gdHJhY2tlci5tb3ZlKAogICAgc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICBhZnRlcjogbWFya2VyLAogICAgICBiZWZvcmUsCiAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICB9KQogICk7CiAgY29uc3QgYmV0d2VlbkhlYWQgPSBiZXR3ZWVuMi5jaGFyQ29kZUF0KDApOwogIGNvbnN0IG9wZW4gPSBlbmNvZGVJbmZvKAogICAgaW5mby5iZWZvcmUuY2hhckNvZGVBdChpbmZvLmJlZm9yZS5sZW5ndGggLSAxKSwKICAgIGJldHdlZW5IZWFkLAogICAgbWFya2VyCiAgKTsKICBpZiAob3Blbi5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5IZWFkKSArIGJldHdlZW4yLnNsaWNlKDEpOwogIH0KICBjb25zdCBiZXR3ZWVuVGFpbCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoYmV0d2VlbjIubGVuZ3RoIC0gMSk7CiAgY29uc3QgY2xvc2U3ID0gZW5jb2RlSW5mbyhpbmZvLmFmdGVyLmNoYXJDb2RlQXQoMCksIGJldHdlZW5UYWlsLCBtYXJrZXIpOwogIGlmIChjbG9zZTcuaW5zaWRlKSB7CiAgICBiZXR3ZWVuMiA9IGJldHdlZW4yLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZXR3ZWVuVGFpbCk7CiAgfQogIGNvbnN0IGFmdGVyID0gdHJhY2tlci5tb3ZlKG1hcmtlcik7CiAgZXhpdDMoKTsKICBzdGF0ZTEyLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHsKICAgIGFmdGVyOiBjbG9zZTcub3V0c2lkZSwKICAgIGJlZm9yZTogb3Blbi5vdXRzaWRlCiAgfTsKICByZXR1cm4gYmVmb3JlICsgYmV0d2VlbjIgKyBhZnRlcjsKfQpmdW5jdGlvbiBlbXBoYXNpc1BlZWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIub3B0aW9ucy5lbXBoYXNpcyB8fCAiKiI7Cn0KdmFyIGluaXRfZW1waGFzaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvZW1waGFzaXMuanMiKCkgewogICAgaW5pdF9jaGVja19lbXBoYXNpcygpOwogICAgaW5pdF9lbmNvZGVfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9lbmNvZGVfaW5mbygpOwogICAgZW1waGFzaXMucGVlayA9IGVtcGhhc2lzUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHZpc2l0KHRyZWUsIHRlc3RPclZpc2l0b3IsIHZpc2l0b3JPclJldmVyc2UsIG1heWJlUmV2ZXJzZSkgewogIGxldCByZXZlcnNlOwogIGxldCB0ZXN0OwogIGxldCB2aXNpdG9yOwogIGlmICh0eXBlb2YgdGVzdE9yVmlzaXRvciA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgdmlzaXRvck9yUmV2ZXJzZSAhPT0gImZ1bmN0aW9uIikgewogICAgdGVzdCA9IHZvaWQgMDsKICAgIHZpc2l0b3IgPSB0ZXN0T3JWaXNpdG9yOwogICAgcmV2ZXJzZSA9IHZpc2l0b3JPclJldmVyc2U7CiAgfSBlbHNlIHsKICAgIHRlc3QgPSB0ZXN0T3JWaXNpdG9yOwogICAgdmlzaXRvciA9IHZpc2l0b3JPclJldmVyc2U7CiAgICByZXZlcnNlID0gbWF5YmVSZXZlcnNlOwogIH0KICB2aXNpdFBhcmVudHModHJlZSwgdGVzdCwgb3ZlcmxvYWQsIHJldmVyc2UpOwogIGZ1bmN0aW9uIG92ZXJsb2FkKG5vZGUyLCBwYXJlbnRzKSB7CiAgICBjb25zdCBwYXJlbnQgPSBwYXJlbnRzW3BhcmVudHMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBpbmRleDIgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlMikgOiB2b2lkIDA7CiAgICByZXR1cm4gdmlzaXRvcihub2RlMiwgaW5kZXgyLCBwYXJlbnQpOwogIH0KfQp2YXIgaW5pdF9saWIxMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtdmlzaXRANS4xLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtdmlzaXQvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfdW5pc3RfdXRpbF92aXNpdF9wYXJlbnRzKCk7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXRfcGFyZW50cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcwp2YXIgaW5pdF91bmlzdF91dGlsX3Zpc2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC12aXNpdEA1LjEuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC12aXNpdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjEyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvU3RyaW5nKHZhbHVlMiwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnM7CiAgY29uc3QgaW5jbHVkZUltYWdlQWx0ID0gdHlwZW9mIHNldHRpbmdzLmluY2x1ZGVJbWFnZUFsdCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUltYWdlQWx0IDogdHJ1ZTsKICBjb25zdCBpbmNsdWRlSHRtbCA9IHR5cGVvZiBzZXR0aW5ncy5pbmNsdWRlSHRtbCA9PT0gImJvb2xlYW4iID8gc2V0dGluZ3MuaW5jbHVkZUh0bWwgOiB0cnVlOwogIHJldHVybiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKfQpmdW5jdGlvbiBvbmUodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKSB7CiAgaWYgKG5vZGUodmFsdWUyKSkgewogICAgaWYgKCJ2YWx1ZSIgaW4gdmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIudHlwZSA9PT0gImh0bWwiICYmICFpbmNsdWRlSHRtbCA/ICIiIDogdmFsdWUyLnZhbHVlOwogICAgfQogICAgaWYgKGluY2x1ZGVJbWFnZUFsdCAmJiAiYWx0IiBpbiB2YWx1ZTIgJiYgdmFsdWUyLmFsdCkgewogICAgICByZXR1cm4gdmFsdWUyLmFsdDsKICAgIH0KICAgIGlmICgiY2hpbGRyZW4iIGluIHZhbHVlMikgewogICAgICByZXR1cm4gYWxsKHZhbHVlMi5jaGlsZHJlbiwgaW5jbHVkZUltYWdlQWx0LCBpbmNsdWRlSHRtbCk7CiAgICB9CiAgfQogIGlmIChBcnJheS5pc0FycmF5KHZhbHVlMikpIHsKICAgIHJldHVybiBhbGwodmFsdWUyLCBpbmNsdWRlSW1hZ2VBbHQsIGluY2x1ZGVIdG1sKTsKICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIGFsbCh2YWx1ZXMsIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgdmFsdWVzLmxlbmd0aCkgewogICAgcmVzdWx0W2luZGV4Ml0gPSBvbmUodmFsdWVzW2luZGV4Ml0sIGluY2x1ZGVJbWFnZUFsdCwgaW5jbHVkZUh0bWwpOwogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG5vZGUodmFsdWUyKSB7CiAgcmV0dXJuIEJvb2xlYW4odmFsdWUyICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJvYmplY3QiKTsKfQp2YXIgZW1wdHlPcHRpb25zOwp2YXIgaW5pdF9saWIxMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tc3RyaW5nQDQuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLXN0cmluZy9saWIvaW5kZXguanMiKCkgewogICAgZW1wdHlPcHRpb25zID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLXN0cmluZ0A0LjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1zdHJpbmcvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9mb3JtYXQtaGVhZGluZy1hcy1zZXRleHQuanMKZnVuY3Rpb24gZm9ybWF0SGVhZGluZ0FzU2V0ZXh0KG5vZGUyLCBzdGF0ZTEyKSB7CiAgbGV0IGxpdGVyYWxXaXRoQnJlYWsgPSBmYWxzZTsKICB2aXNpdChub2RlMiwgZnVuY3Rpb24obm9kZTMpIHsKICAgIGlmICgidmFsdWUiIGluIG5vZGUzICYmIC9ccj9cbnxcci8udGVzdChub2RlMy52YWx1ZSkgfHwgbm9kZTMudHlwZSA9PT0gImJyZWFrIikgewogICAgICBsaXRlcmFsV2l0aEJyZWFrID0gdHJ1ZTsKICAgICAgcmV0dXJuIEVYSVQ7CiAgICB9CiAgfSk7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICAoIW5vZGUyLmRlcHRoIHx8IG5vZGUyLmRlcHRoIDwgMykgJiYgdG9TdHJpbmcobm9kZTIpICYmIChzdGF0ZTEyLm9wdGlvbnMuc2V0ZXh0IHx8IGxpdGVyYWxXaXRoQnJlYWspCiAgKTsKfQp2YXIgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Zvcm1hdC1oZWFkaW5nLWFzLXNldGV4dC5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfdmlzaXQoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19zdHJpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9oZWFkaW5nLmpzCmZ1bmN0aW9uIGhlYWRpbmcobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgcmFuayA9IE1hdGgubWF4KE1hdGgubWluKDYsIG5vZGUyLmRlcHRoIHx8IDEpLCAxKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGlmIChmb3JtYXRIZWFkaW5nQXNTZXRleHQobm9kZTIsIHN0YXRlMTIpKSB7CiAgICBjb25zdCBleGl0NCA9IHN0YXRlMTIuZW50ZXIoImhlYWRpbmdTZXRleHQiKTsKICAgIGNvbnN0IHN1YmV4aXQyID0gc3RhdGUxMi5lbnRlcigicGhyYXNpbmciKTsKICAgIGNvbnN0IHZhbHVlMyA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICAgIGJlZm9yZTogIlxuIiwKICAgICAgYWZ0ZXI6ICJcbiIKICAgIH0pOwogICAgc3ViZXhpdDIoKTsKICAgIGV4aXQ0KCk7CiAgICByZXR1cm4gdmFsdWUzICsgIlxuIiArIChyYW5rID09PSAxID8gIj0iIDogIi0iKS5yZXBlYXQoCiAgICAgIC8vIFRoZSB3aG9sZSBzaXpl4oCmCiAgICAgIHZhbHVlMy5sZW5ndGggLSAvLyBNaW51cyB0aGUgcG9zaXRpb24gb2YgdGhlIGNoYXJhY3RlciBhZnRlciB0aGUgbGFzdCBFT0wgKG9yCiAgICAgIC8vIDAgaWYgdGhlcmUgaXMgbm9uZSnigKYKICAgICAgKE1hdGgubWF4KHZhbHVlMy5sYXN0SW5kZXhPZigiXHIiKSwgdmFsdWUzLmxhc3RJbmRleE9mKCJcbiIpKSArIDEpCiAgICApOwogIH0KICBjb25zdCBzZXF1ZW5jZSA9ICIjIi5yZXBlYXQocmFuayk7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJoZWFkaW5nQXR4Iik7CiAgY29uc3Qgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoInBocmFzaW5nIik7CiAgdHJhY2tlci5tb3ZlKHNlcXVlbmNlICsgIiAiKTsKICBsZXQgdmFsdWUyID0gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgYmVmb3JlOiAiIyAiLAogICAgYWZ0ZXI6ICJcbiIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIGlmICgvXltcdCBdLy50ZXN0KHZhbHVlMikpIHsKICAgIHZhbHVlMiA9IGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZSh2YWx1ZTIuY2hhckNvZGVBdCgwKSkgKyB2YWx1ZTIuc2xpY2UoMSk7CiAgfQogIHZhbHVlMiA9IHZhbHVlMiA/IHNlcXVlbmNlICsgIiAiICsgdmFsdWUyIDogc2VxdWVuY2U7CiAgaWYgKHN0YXRlMTIub3B0aW9ucy5jbG9zZUF0eCkgewogICAgdmFsdWUyICs9ICIgIiArIHNlcXVlbmNlOwogIH0KICBzdWJleGl0KCk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CnZhciBpbml0X2hlYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaGVhZGluZy5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X2Zvcm1hdF9oZWFkaW5nX2FzX3NldGV4dCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2h0bWwuanMKZnVuY3Rpb24gaHRtbChub2RlMikgewogIHJldHVybiBub2RlMi52YWx1ZSB8fCAiIjsKfQpmdW5jdGlvbiBodG1sUGVlaygpIHsKICByZXR1cm4gIjwiOwp9CnZhciBpbml0X2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaHRtbC5qcyIoKSB7CiAgICBodG1sLnBlZWsgPSBodG1sUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS5qcwpmdW5jdGlvbiBpbWFnZShub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxMik7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJpbWFnZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIiFbIik7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgIHN0YXRlMTIuc2FmZShub2RlMi5hbHQsIHsgYmVmb3JlOiB2YWx1ZTIsIGFmdGVyOiAiXSIsIC4uLnRyYWNrZXIuY3VycmVudCgpIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdKCIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxl4oCmCiAgICAhbm9kZTIudXJsICYmIG5vZGUyLnRpdGxlIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICI+IiwgLi4udHJhY2tlci5jdXJyZW50KCkgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgfSBlbHNlIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBub2RlMi50aXRsZSA/ICIgIiA6ICIpIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIpIik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGltYWdlUGVlaygpIHsKICByZXR1cm4gIiEiOwp9CnZhciBpbml0X2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2ltYWdlLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICAgIGltYWdlLnBlZWsgPSBpbWFnZVBlZWs7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvaW1hZ2UtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IHR5cGU1ID0gbm9kZTIucmVmZXJlbmNlVHlwZTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImltYWdlUmVmZXJlbmNlIik7CiAgbGV0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJsYWJlbCIpOwogIGNvbnN0IHRyYWNrZXIgPSBzdGF0ZTEyLmNyZWF0ZVRyYWNrZXIoaW5mbyk7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiIVsiKTsKICBjb25zdCBhbHQgPSBzdGF0ZTEyLnNhZmUobm9kZTIuYWx0LCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoYWx0ICsgIl1bIik7CiAgc3ViZXhpdCgpOwogIGNvbnN0IHN0YWNrID0gc3RhdGUxMi5zdGFjazsKICBzdGF0ZTEyLnN0YWNrID0gW107CiAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoInJlZmVyZW5jZSIpOwogIGNvbnN0IHJlZmVyZW5jZSA9IHN0YXRlMTIuc2FmZShzdGF0ZTEyLmFzc29jaWF0aW9uSWQobm9kZTIpLCB7CiAgICBiZWZvcmU6IHZhbHVlMiwKICAgIGFmdGVyOiAiXSIsCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIHN1YmV4aXQoKTsKICBzdGF0ZTEyLnN0YWNrID0gc3RhY2s7CiAgZXhpdDMoKTsKICBpZiAodHlwZTUgPT09ICJmdWxsIiB8fCAhYWx0IHx8IGFsdCAhPT0gcmVmZXJlbmNlKSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKHJlZmVyZW5jZSArICJdIik7CiAgfSBlbHNlIGlmICh0eXBlNSA9PT0gInNob3J0Y3V0IikgewogICAgdmFsdWUyID0gdmFsdWUyLnNsaWNlKDAsIC0xKTsKICB9IGVsc2UgewogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiXSIpOwogIH0KICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGltYWdlUmVmZXJlbmNlUGVlaygpIHsKICByZXR1cm4gIiEiOwp9CnZhciBpbml0X2ltYWdlX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbWFnZS1yZWZlcmVuY2UuanMiKCkgewogICAgaW1hZ2VSZWZlcmVuY2UucGVlayA9IGltYWdlUmVmZXJlbmNlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcwpmdW5jdGlvbiBpbmxpbmVDb2RlKG5vZGUyLCBfNCwgc3RhdGUxMikgewogIGxldCB2YWx1ZTIgPSBub2RlMi52YWx1ZSB8fCAiIjsKICBsZXQgc2VxdWVuY2UgPSAiYCI7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlIChuZXcgUmVnRXhwKCIoXnxbXmBdKSIgKyBzZXF1ZW5jZSArICIoW15gXXwkKSIpLnRlc3QodmFsdWUyKSkgewogICAgc2VxdWVuY2UgKz0gImAiOwogIH0KICBpZiAoL1teIFxyXG5dLy50ZXN0KHZhbHVlMikgJiYgKC9eWyBcclxuXS8udGVzdCh2YWx1ZTIpICYmIC9bIFxyXG5dJC8udGVzdCh2YWx1ZTIpIHx8IC9eYHxgJC8udGVzdCh2YWx1ZTIpKSkgewogICAgdmFsdWUyID0gIiAiICsgdmFsdWUyICsgIiAiOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBzdGF0ZTEyLnVuc2FmZS5sZW5ndGgpIHsKICAgIGNvbnN0IHBhdHRlcm4gPSBzdGF0ZTEyLnVuc2FmZVtpbmRleDJdOwogICAgY29uc3QgZXhwcmVzc2lvbiA9IHN0YXRlMTIuY29tcGlsZVBhdHRlcm4ocGF0dGVybik7CiAgICBsZXQgbWF0Y2gyOwogICAgaWYgKCFwYXR0ZXJuLmF0QnJlYWspIGNvbnRpbnVlOwogICAgd2hpbGUgKG1hdGNoMiA9IGV4cHJlc3Npb24uZXhlYyh2YWx1ZTIpKSB7CiAgICAgIGxldCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXg7CiAgICAgIGlmICh2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMpID09PSAxMCAmJiB2YWx1ZTIuY2hhckNvZGVBdChwb3NpdGlvbjMgLSAxKSA9PT0gMTMpIHsKICAgICAgICBwb3NpdGlvbjMtLTsKICAgICAgfQogICAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgcG9zaXRpb24zKSArICIgIiArIHZhbHVlMi5zbGljZShtYXRjaDIuaW5kZXggKyAxKTsKICAgIH0KICB9CiAgcmV0dXJuIHNlcXVlbmNlICsgdmFsdWUyICsgc2VxdWVuY2U7Cn0KZnVuY3Rpb24gaW5saW5lQ29kZVBlZWsoKSB7CiAgcmV0dXJuICJgIjsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmxpbmUtY29kZS5qcyIoKSB7CiAgICBpbmxpbmVDb2RlLnBlZWsgPSBpbmxpbmVDb2RlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWxpbmstYXMtYXV0b2xpbmsuanMKZnVuY3Rpb24gZm9ybWF0TGlua0FzQXV0b2xpbmsobm9kZTIsIHN0YXRlMTIpIHsKICBjb25zdCByYXcyID0gdG9TdHJpbmcobm9kZTIpOwogIHJldHVybiBCb29sZWFuKAogICAgIXN0YXRlMTIub3B0aW9ucy5yZXNvdXJjZUxpbmsgJiYgLy8gSWYgdGhlcmXigJlzIGEgdXJs4oCmCiAgICBub2RlMi51cmwgJiYgLy8gQW5kIHRoZXJl4oCZcyBhIG5vIHRpdGxl4oCmCiAgICAhbm9kZTIudGl0bGUgJiYgLy8gQW5kIHRoZSBjb250ZW50IG9mIGBub2RlYCBpcyBhIHNpbmdsZSB0ZXh0IG5vZGXigKYKICAgIG5vZGUyLmNoaWxkcmVuICYmIG5vZGUyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMSAmJiBub2RlMi5jaGlsZHJlblswXS50eXBlID09PSAidGV4dCIgJiYgLy8gQW5kIGlmIHRoZSB1cmwgaXMgdGhlIHNhbWUgYXMgdGhlIGNvbnRlbnTigKYKICAgIChyYXcyID09PSBub2RlMi51cmwgfHwgIm1haWx0bzoiICsgcmF3MiA9PT0gbm9kZTIudXJsKSAmJiAvLyBBbmQgdGhhdCBzdGFydHMgdy8gYSBwcm90b2NvbOKApgogICAgL15bYS16XVthLXorLi1dKzovaS50ZXN0KG5vZGUyLnVybCkgJiYgLy8gQW5kIHRoYXQgZG9lc27igJl0IGNvbnRhaW4gQVNDSUkgY29udHJvbCBjb2RlcyAoY2hhcmFjdGVyIGVzY2FwZXMgYW5kCiAgICAvLyByZWZlcmVuY2VzIGRvbuKAmXQgd29yayksIHNwYWNlLCBvciBhbmdsZSBicmFja2V0c+KApgogICAgIS9bXDAtIDw+XHUwMDdGXS8udGVzdChub2RlMi51cmwpCiAgKTsKfQp2YXIgaW5pdF9mb3JtYXRfbGlua19hc19hdXRvbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvZm9ybWF0LWxpbmstYXMtYXV0b2xpbmsuanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpbmsuanMKZnVuY3Rpb24gbGluayhub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBxdW90ZSA9IGNoZWNrUXVvdGUoc3RhdGUxMik7CiAgY29uc3Qgc3VmZml4ID0gcXVvdGUgPT09ICciJyA/ICJRdW90ZSIgOiAiQXBvc3Ryb3BoZSI7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBsZXQgZXhpdDM7CiAgbGV0IHN1YmV4aXQ7CiAgaWYgKGZvcm1hdExpbmtBc0F1dG9saW5rKG5vZGUyLCBzdGF0ZTEyKSkgewogICAgY29uc3Qgc3RhY2sgPSBzdGF0ZTEyLnN0YWNrOwogICAgc3RhdGUxMi5zdGFjayA9IFtdOwogICAgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJhdXRvbGluayIpOwogICAgbGV0IHZhbHVlMyA9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUzICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICAgIGJlZm9yZTogdmFsdWUzLAogICAgICAgIGFmdGVyOiAiPiIsCiAgICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgICAgfSkKICAgICk7CiAgICB2YWx1ZTMgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgICBleGl0MygpOwogICAgc3RhdGUxMi5zdGFjayA9IHN0YWNrOwogICAgcmV0dXJuIHZhbHVlMzsKICB9CiAgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJsaW5rIik7CiAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImxhYmVsIik7CiAgbGV0IHZhbHVlMiA9IHRyYWNrZXIubW92ZSgiWyIpOwogIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICBhZnRlcjogIl0oIiwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdKCIpOwogIHN1YmV4aXQoKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZeKAmXMgbm8gdXJsIGJ1dCB0aGVyZSBpcyBhIHRpdGxl4oCmCiAgICAhbm9kZTIudXJsICYmIG5vZGUyLnRpdGxlIHx8IC8vIElmIHRoZXJlIGFyZSBjb250cm9sIGNoYXJhY3RlcnMgb3Igd2hpdGVzcGFjZS4KICAgIC9bXDAtIFx1MDA3Rl0vLnRlc3Qobm9kZTIudXJsKQogICkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoImRlc3RpbmF0aW9uTGl0ZXJhbCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgiPCIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgeyBiZWZvcmU6IHZhbHVlMiwgYWZ0ZXI6ICI+IiwgLi4udHJhY2tlci5jdXJyZW50KCkgfSkKICAgICk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCI+Iik7CiAgfSBlbHNlIHsKICAgIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJkZXN0aW5hdGlvblJhdyIpOwogICAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSgKICAgICAgc3RhdGUxMi5zYWZlKG5vZGUyLnVybCwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBub2RlMi50aXRsZSA/ICIgIiA6ICIpIiwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICB9CiAgc3ViZXhpdCgpOwogIGlmIChub2RlMi50aXRsZSkgewogICAgc3ViZXhpdCA9IHN0YXRlMTIuZW50ZXIoYHRpdGxlJHtzdWZmaXh9YCk7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIgIiArIHF1b3RlKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUoCiAgICAgIHN0YXRlMTIuc2FmZShub2RlMi50aXRsZSwgewogICAgICAgIGJlZm9yZTogdmFsdWUyLAogICAgICAgIGFmdGVyOiBxdW90ZSwKICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICB9KQogICAgKTsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocXVvdGUpOwogICAgc3ViZXhpdCgpOwogIH0KICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCIpIik7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwp9CmZ1bmN0aW9uIGxpbmtQZWVrKG5vZGUyLCBfNCwgc3RhdGUxMikgewogIHJldHVybiBmb3JtYXRMaW5rQXNBdXRvbGluayhub2RlMiwgc3RhdGUxMikgPyAiPCIgOiAiWyI7Cn0KdmFyIGluaXRfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLmpzIigpIHsKICAgIGluaXRfY2hlY2tfcXVvdGUoKTsKICAgIGluaXRfZm9ybWF0X2xpbmtfYXNfYXV0b2xpbmsoKTsKICAgIGxpbmsucGVlayA9IGxpbmtQZWVrOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpbmstcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGxpbmtSZWZlcmVuY2Uobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgdHlwZTUgPSBub2RlMi5yZWZlcmVuY2VUeXBlOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigibGlua1JlZmVyZW5jZSIpOwogIGxldCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigibGFiZWwiKTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGxldCB2YWx1ZTIgPSB0cmFja2VyLm1vdmUoIlsiKTsKICBjb25zdCB0ZXh0OSA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIHsKICAgIGJlZm9yZTogdmFsdWUyLAogICAgYWZ0ZXI6ICJdIiwKICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgfSk7CiAgdmFsdWUyICs9IHRyYWNrZXIubW92ZSh0ZXh0OSArICJdWyIpOwogIHN1YmV4aXQoKTsKICBjb25zdCBzdGFjayA9IHN0YXRlMTIuc3RhY2s7CiAgc3RhdGUxMi5zdGFjayA9IFtdOwogIHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJyZWZlcmVuY2UiKTsKICBjb25zdCByZWZlcmVuY2UgPSBzdGF0ZTEyLnNhZmUoc3RhdGUxMi5hc3NvY2lhdGlvbklkKG5vZGUyKSwgewogICAgYmVmb3JlOiB2YWx1ZTIsCiAgICBhZnRlcjogIl0iLAogICAgLi4udHJhY2tlci5jdXJyZW50KCkKICB9KTsKICBzdWJleGl0KCk7CiAgc3RhdGUxMi5zdGFjayA9IHN0YWNrOwogIGV4aXQzKCk7CiAgaWYgKHR5cGU1ID09PSAiZnVsbCIgfHwgIXRleHQ5IHx8IHRleHQ5ICE9PSByZWZlcmVuY2UpIHsKICAgIHZhbHVlMiArPSB0cmFja2VyLm1vdmUocmVmZXJlbmNlICsgIl0iKTsKICB9IGVsc2UgaWYgKHR5cGU1ID09PSAic2hvcnRjdXQiKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIuc2xpY2UoMCwgLTEpOwogIH0gZWxzZSB7CiAgICB2YWx1ZTIgKz0gdHJhY2tlci5tb3ZlKCJdIik7CiAgfQogIHJldHVybiB2YWx1ZTI7Cn0KZnVuY3Rpb24gbGlua1JlZmVyZW5jZVBlZWsoKSB7CiAgcmV0dXJuICJbIjsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9saW5rLXJlZmVyZW5jZS5qcyIoKSB7CiAgICBsaW5rUmVmZXJlbmNlLnBlZWsgPSBsaW5rUmVmZXJlbmNlUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LmpzCmZ1bmN0aW9uIGNoZWNrQnVsbGV0KHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuYnVsbGV0IHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiKyIgJiYgbWFya2VyICE9PSAiLSIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgaXRlbXMgd2l0aCBgIiArIG1hcmtlciArICJgIGZvciBgb3B0aW9ucy5idWxsZXRgLCBleHBlY3RlZCBgKmAsIGArYCwgb3IgYC1gIgogICAgKTsKICB9CiAgcmV0dXJuIG1hcmtlcjsKfQp2YXIgaW5pdF9jaGVja19idWxsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLWJ1bGxldC1vdGhlci5qcwpmdW5jdGlvbiBjaGVja0J1bGxldE90aGVyKHN0YXRlMTIpIHsKICBjb25zdCBidWxsZXQgPSBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBjb25zdCBidWxsZXRPdGhlciA9IHN0YXRlMTIub3B0aW9ucy5idWxsZXRPdGhlcjsKICBpZiAoIWJ1bGxldE90aGVyKSB7CiAgICByZXR1cm4gYnVsbGV0ID09PSAiKiIgPyAiLSIgOiAiKiI7CiAgfQogIGlmIChidWxsZXRPdGhlciAhPT0gIioiICYmIGJ1bGxldE90aGVyICE9PSAiKyIgJiYgYnVsbGV0T3RoZXIgIT09ICItIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgYnVsbGV0T3RoZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3RoZXJgLCBleHBlY3RlZCBgKmAsIGArYCwgb3IgYC1gIgogICAgKTsKICB9CiAgaWYgKGJ1bGxldE90aGVyID09PSBidWxsZXQpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkV4cGVjdGVkIGBidWxsZXRgIChgIiArIGJ1bGxldCArICJgKSBhbmQgYGJ1bGxldE90aGVyYCAoYCIgKyBidWxsZXRPdGhlciArICJgKSB0byBiZSBkaWZmZXJlbnQiCiAgICApOwogIH0KICByZXR1cm4gYnVsbGV0T3RoZXI7Cn0KdmFyIGluaXRfY2hlY2tfYnVsbGV0X290aGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3RoZXIuanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stYnVsbGV0LW9yZGVyZWQuanMKZnVuY3Rpb24gY2hlY2tCdWxsZXRPcmRlcmVkKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuYnVsbGV0T3JkZXJlZCB8fCAiLiI7CiAgaWYgKG1hcmtlciAhPT0gIi4iICYmIG1hcmtlciAhPT0gIikiKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIGl0ZW1zIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuYnVsbGV0T3JkZXJlZGAsIGV4cGVjdGVkIGAuYCBvciBgKWAiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX2J1bGxldF9vcmRlcmVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1idWxsZXQtb3JkZXJlZC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMKZnVuY3Rpb24gY2hlY2tSdWxlKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMucnVsZSB8fCAiKiI7CiAgaWYgKG1hcmtlciAhPT0gIioiICYmIG1hcmtlciAhPT0gIi0iICYmIG1hcmtlciAhPT0gIl8iKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoCiAgICAgICJDYW5ub3Qgc2VyaWFsaXplIHJ1bGVzIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMucnVsZWAsIGV4cGVjdGVkIGAqYCwgYC1gLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3J1bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2NoZWNrLXJ1bGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMKZnVuY3Rpb24gbGlzdDIobm9kZTIsIHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigibGlzdCIpOwogIGNvbnN0IGJ1bGxldEN1cnJlbnQgPSBzdGF0ZTEyLmJ1bGxldEN1cnJlbnQ7CiAgbGV0IGJ1bGxldCA9IG5vZGUyLm9yZGVyZWQgPyBjaGVja0J1bGxldE9yZGVyZWQoc3RhdGUxMikgOiBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBjb25zdCBidWxsZXRPdGhlciA9IG5vZGUyLm9yZGVyZWQgPyBidWxsZXQgPT09ICIuIiA/ICIpIiA6ICIuIiA6IGNoZWNrQnVsbGV0T3RoZXIoc3RhdGUxMik7CiAgbGV0IHVzZURpZmZlcmVudE1hcmtlciA9IHBhcmVudCAmJiBzdGF0ZTEyLmJ1bGxldExhc3RVc2VkID8gYnVsbGV0ID09PSBzdGF0ZTEyLmJ1bGxldExhc3RVc2VkIDogZmFsc2U7CiAgaWYgKCFub2RlMi5vcmRlcmVkKSB7CiAgICBjb25zdCBmaXJzdExpc3RJdGVtID0gbm9kZTIuY2hpbGRyZW4gPyBub2RlMi5jaGlsZHJlblswXSA6IHZvaWQgMDsKICAgIGlmICgKICAgICAgLy8gQnVsbGV0IGNvdWxkIGJlIHVzZWQgYXMgYSB0aGVtYXRpYyBicmVhayBtYXJrZXI6CiAgICAgIChidWxsZXQgPT09ICIqIiB8fCBidWxsZXQgPT09ICItIikgJiYgLy8gRW1wdHkgZmlyc3QgbGlzdCBpdGVtOgogICAgICBmaXJzdExpc3RJdGVtICYmICghZmlyc3RMaXN0SXRlbS5jaGlsZHJlbiB8fCAhZmlyc3RMaXN0SXRlbS5jaGlsZHJlblswXSkgJiYgLy8gRGlyZWN0bHkgaW4gdHdvIG90aGVyIGxpc3QgaXRlbXM6CiAgICAgIHN0YXRlMTIuc3RhY2tbc3RhdGUxMi5zdGFjay5sZW5ndGggLSAxXSA9PT0gImxpc3QiICYmIHN0YXRlMTIuc3RhY2tbc3RhdGUxMi5zdGFjay5sZW5ndGggLSAyXSA9PT0gImxpc3RJdGVtIiAmJiBzdGF0ZTEyLnN0YWNrW3N0YXRlMTIuc3RhY2subGVuZ3RoIC0gM10gPT09ICJsaXN0IiAmJiBzdGF0ZTEyLnN0YWNrW3N0YXRlMTIuc3RhY2subGVuZ3RoIC0gNF0gPT09ICJsaXN0SXRlbSIgJiYgLy8gVGhhdCBhcmUgZWFjaCB0aGUgZmlyc3QgY2hpbGQuCiAgICAgIHN0YXRlMTIuaW5kZXhTdGFja1tzdGF0ZTEyLmluZGV4U3RhY2subGVuZ3RoIC0gMV0gPT09IDAgJiYgc3RhdGUxMi5pbmRleFN0YWNrW3N0YXRlMTIuaW5kZXhTdGFjay5sZW5ndGggLSAyXSA9PT0gMCAmJiBzdGF0ZTEyLmluZGV4U3RhY2tbc3RhdGUxMi5pbmRleFN0YWNrLmxlbmd0aCAtIDNdID09PSAwCiAgICApIHsKICAgICAgdXNlRGlmZmVyZW50TWFya2VyID0gdHJ1ZTsKICAgIH0KICAgIGlmIChjaGVja1J1bGUoc3RhdGUxMikgPT09IGJ1bGxldCAmJiBmaXJzdExpc3RJdGVtKSB7CiAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgd2hpbGUgKCsraW5kZXgyIDwgbm9kZTIuY2hpbGRyZW4ubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IG5vZGUyLmNoaWxkcmVuW2luZGV4Ml07CiAgICAgICAgaWYgKGl0ZW0gJiYgaXRlbS50eXBlID09PSAibGlzdEl0ZW0iICYmIGl0ZW0uY2hpbGRyZW4gJiYgaXRlbS5jaGlsZHJlblswXSAmJiBpdGVtLmNoaWxkcmVuWzBdLnR5cGUgPT09ICJ0aGVtYXRpY0JyZWFrIikgewogICAgICAgICAgdXNlRGlmZmVyZW50TWFya2VyID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfQogIH0KICBpZiAodXNlRGlmZmVyZW50TWFya2VyKSB7CiAgICBidWxsZXQgPSBidWxsZXRPdGhlcjsKICB9CiAgc3RhdGUxMi5idWxsZXRDdXJyZW50ID0gYnVsbGV0OwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTIuY29udGFpbmVyRmxvdyhub2RlMiwgaW5mbyk7CiAgc3RhdGUxMi5idWxsZXRMYXN0VXNlZCA9IGJ1bGxldDsKICBzdGF0ZTEyLmJ1bGxldEN1cnJlbnQgPSBidWxsZXRDdXJyZW50OwogIGV4aXQzKCk7CiAgcmV0dXJuIHZhbHVlMjsKfQp2YXIgaW5pdF9saXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QuanMiKCkgewogICAgaW5pdF9jaGVja19idWxsZXQoKTsKICAgIGluaXRfY2hlY2tfYnVsbGV0X290aGVyKCk7CiAgICBpbml0X2NoZWNrX2J1bGxldF9vcmRlcmVkKCk7CiAgICBpbml0X2NoZWNrX3J1bGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stbGlzdC1pdGVtLWluZGVudC5qcwpmdW5jdGlvbiBjaGVja0xpc3RJdGVtSW5kZW50KHN0YXRlMTIpIHsKICBjb25zdCBzdHlsZSA9IHN0YXRlMTIub3B0aW9ucy5saXN0SXRlbUluZGVudCB8fCAib25lIjsKICBpZiAoc3R5bGUgIT09ICJ0YWIiICYmIHN0eWxlICE9PSAib25lIiAmJiBzdHlsZSAhPT0gIm1peGVkIikgewogICAgdGhyb3cgbmV3IEVycm9yKAogICAgICAiQ2Fubm90IHNlcmlhbGl6ZSBpdGVtcyB3aXRoIGAiICsgc3R5bGUgKyAiYCBmb3IgYG9wdGlvbnMubGlzdEl0ZW1JbmRlbnRgLCBleHBlY3RlZCBgdGFiYCwgYG9uZWAsIG9yIGBtaXhlZGAiCiAgICApOwogIH0KICByZXR1cm4gc3R5bGU7Cn0KdmFyIGluaXRfY2hlY2tfbGlzdF9pdGVtX2luZGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stbGlzdC1pdGVtLWluZGVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvbGlzdC1pdGVtLmpzCmZ1bmN0aW9uIGxpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBsaXN0SXRlbUluZGVudCA9IGNoZWNrTGlzdEl0ZW1JbmRlbnQoc3RhdGUxMik7CiAgbGV0IGJ1bGxldCA9IHN0YXRlMTIuYnVsbGV0Q3VycmVudCB8fCBjaGVja0J1bGxldChzdGF0ZTEyKTsKICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAibGlzdCIgJiYgcGFyZW50Lm9yZGVyZWQpIHsKICAgIGJ1bGxldCA9ICh0eXBlb2YgcGFyZW50LnN0YXJ0ID09PSAibnVtYmVyIiAmJiBwYXJlbnQuc3RhcnQgPiAtMSA/IHBhcmVudC5zdGFydCA6IDEpICsgKHN0YXRlMTIub3B0aW9ucy5pbmNyZW1lbnRMaXN0TWFya2VyID09PSBmYWxzZSA/IDAgOiBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihub2RlMikpICsgYnVsbGV0OwogIH0KICBsZXQgc2l6ZSA9IGJ1bGxldC5sZW5ndGggKyAxOwogIGlmIChsaXN0SXRlbUluZGVudCA9PT0gInRhYiIgfHwgbGlzdEl0ZW1JbmRlbnQgPT09ICJtaXhlZCIgJiYgKHBhcmVudCAmJiBwYXJlbnQudHlwZSA9PT0gImxpc3QiICYmIHBhcmVudC5zcHJlYWQgfHwgbm9kZTIuc3ByZWFkKSkgewogICAgc2l6ZSA9IE1hdGguY2VpbChzaXplIC8gNCkgKiA0OwogIH0KICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIHRyYWNrZXIubW92ZShidWxsZXQgKyAiICIucmVwZWF0KHNpemUgLSBidWxsZXQubGVuZ3RoKSk7CiAgdHJhY2tlci5zaGlmdChzaXplKTsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoImxpc3RJdGVtIik7CiAgY29uc3QgdmFsdWUyID0gc3RhdGUxMi5pbmRlbnRMaW5lcygKICAgIHN0YXRlMTIuY29udGFpbmVyRmxvdyhub2RlMiwgdHJhY2tlci5jdXJyZW50KCkpLAogICAgbWFwNwogICk7CiAgZXhpdDMoKTsKICByZXR1cm4gdmFsdWUyOwogIGZ1bmN0aW9uIG1hcDcobGluZSwgaW5kZXgyLCBibGFuaykgewogICAgaWYgKGluZGV4MikgewogICAgICByZXR1cm4gKGJsYW5rID8gIiIgOiAiICIucmVwZWF0KHNpemUpKSArIGxpbmU7CiAgICB9CiAgICByZXR1cm4gKGJsYW5rID8gYnVsbGV0IDogYnVsbGV0ICsgIiAiLnJlcGVhdChzaXplIC0gYnVsbGV0Lmxlbmd0aCkpICsgbGluZTsKICB9Cn0KdmFyIGluaXRfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2xpc3QtaXRlbS5qcyIoKSB7CiAgICBpbml0X2NoZWNrX2J1bGxldCgpOwogICAgaW5pdF9jaGVja19saXN0X2l0ZW1faW5kZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcGFyYWdyYXBoLmpzCmZ1bmN0aW9uIHBhcmFncmFwaChub2RlMiwgXzQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBleGl0MyA9IHN0YXRlMTIuZW50ZXIoInBhcmFncmFwaCIpOwogIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJwaHJhc2luZyIpOwogIGNvbnN0IHZhbHVlMiA9IHN0YXRlMTIuY29udGFpbmVyUGhyYXNpbmcobm9kZTIsIGluZm8pOwogIHN1YmV4aXQoKTsKICBleGl0MygpOwogIHJldHVybiB2YWx1ZTI7Cn0KdmFyIGluaXRfcGFyYWdyYXBoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3BhcmFncmFwaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2xpYi9pbmRleC5qcwp2YXIgcGhyYXNpbmc7CnZhciBpbml0X2xpYjE0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1waHJhc2luZ0A0LjEuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1waHJhc2luZy9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF91bmlzdF91dGlsX2lzKCk7CiAgICBwaHJhc2luZyA9IC8qKiBAdHlwZSB7KG5vZGU/OiB1bmtub3duKSA9PiBub2RlIGlzIEV4Y2x1ZGU8UGhyYXNpbmdDb250ZW50LCBIdG1sPn0gKi8KICAgIGNvbnZlcnQoWwogICAgICAiYnJlYWsiLAogICAgICAiZGVsZXRlIiwKICAgICAgImVtcGhhc2lzIiwKICAgICAgLy8gVG8gZG86IG5leHQgbWFqb3I6IHJlbW92ZWQgc2luY2UgZm9vdG5vdGVzIHdlcmUgYWRkZWQgdG8gR0ZNLgogICAgICAiZm9vdG5vdGUiLAogICAgICAiZm9vdG5vdGVSZWZlcmVuY2UiLAogICAgICAiaW1hZ2UiLAogICAgICAiaW1hZ2VSZWZlcmVuY2UiLAogICAgICAiaW5saW5lQ29kZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWF0aGA6CiAgICAgICJpbmxpbmVNYXRoIiwKICAgICAgImxpbmsiLAogICAgICAibGlua1JlZmVyZW5jZSIsCiAgICAgIC8vIEVuYWJsZWQgYnkgYG1kYXN0LXV0aWwtbWR4YDoKICAgICAgIm1keEpzeFRleHRFbGVtZW50IiwKICAgICAgLy8gRW5hYmxlZCBieSBgbWRhc3QtdXRpbC1tZHhgOgogICAgICAibWR4VGV4dEV4cHJlc3Npb24iLAogICAgICAic3Ryb25nIiwKICAgICAgInRleHQiLAogICAgICAvLyBFbmFibGVkIGJ5IGBtZGFzdC11dGlsLWRpcmVjdGl2ZWA6CiAgICAgICJ0ZXh0RGlyZWN0aXZlIgogICAgXSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfcGhyYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXBocmFzaW5nQDQuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXBocmFzaW5nL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMTQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9yb290LmpzCmZ1bmN0aW9uIHJvb3Qobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgY29uc3QgaGFzUGhyYXNpbmcgPSBub2RlMi5jaGlsZHJlbi5zb21lKGZ1bmN0aW9uKGQ2KSB7CiAgICByZXR1cm4gcGhyYXNpbmcoZDYpOwogIH0pOwogIGNvbnN0IGNvbnRhaW5lciA9IGhhc1BocmFzaW5nID8gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyA6IHN0YXRlMTIuY29udGFpbmVyRmxvdzsKICByZXR1cm4gY29udGFpbmVyLmNhbGwoc3RhdGUxMiwgbm9kZTIsIGluZm8pOwp9CnZhciBpbml0X3Jvb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvcm9vdC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfcGhyYXNpbmcoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stc3Ryb25nLmpzCmZ1bmN0aW9uIGNoZWNrU3Ryb25nKHN0YXRlMTIpIHsKICBjb25zdCBtYXJrZXIgPSBzdGF0ZTEyLm9wdGlvbnMuc3Ryb25nIHx8ICIqIjsKICBpZiAobWFya2VyICE9PSAiKiIgJiYgbWFya2VyICE9PSAiXyIpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgc3Ryb25nIHdpdGggYCIgKyBtYXJrZXIgKyAiYCBmb3IgYG9wdGlvbnMuc3Ryb25nYCwgZXhwZWN0ZWQgYCpgLCBvciBgX2AiCiAgICApOwogIH0KICByZXR1cm4gbWFya2VyOwp9CnZhciBpbml0X2NoZWNrX3N0cm9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stc3Ryb25nLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMKZnVuY3Rpb24gc3Ryb25nKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IG1hcmtlciA9IGNoZWNrU3Ryb25nKHN0YXRlMTIpOwogIGNvbnN0IGV4aXQzID0gc3RhdGUxMi5lbnRlcigic3Ryb25nIik7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBjb25zdCBiZWZvcmUgPSB0cmFja2VyLm1vdmUobWFya2VyICsgbWFya2VyKTsKICBsZXQgYmV0d2VlbjIgPSB0cmFja2VyLm1vdmUoCiAgICBzdGF0ZTEyLmNvbnRhaW5lclBocmFzaW5nKG5vZGUyLCB7CiAgICAgIGFmdGVyOiBtYXJrZXIsCiAgICAgIGJlZm9yZSwKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCkKICAgIH0pCiAgKTsKICBjb25zdCBiZXR3ZWVuSGVhZCA9IGJldHdlZW4yLmNoYXJDb2RlQXQoMCk7CiAgY29uc3Qgb3BlbiA9IGVuY29kZUluZm8oCiAgICBpbmZvLmJlZm9yZS5jaGFyQ29kZUF0KGluZm8uYmVmb3JlLmxlbmd0aCAtIDEpLAogICAgYmV0d2VlbkhlYWQsCiAgICBtYXJrZXIKICApOwogIGlmIChvcGVuLmluc2lkZSkgewogICAgYmV0d2VlbjIgPSBlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UoYmV0d2VlbkhlYWQpICsgYmV0d2VlbjIuc2xpY2UoMSk7CiAgfQogIGNvbnN0IGJldHdlZW5UYWlsID0gYmV0d2VlbjIuY2hhckNvZGVBdChiZXR3ZWVuMi5sZW5ndGggLSAxKTsKICBjb25zdCBjbG9zZTcgPSBlbmNvZGVJbmZvKGluZm8uYWZ0ZXIuY2hhckNvZGVBdCgwKSwgYmV0d2VlblRhaWwsIG1hcmtlcik7CiAgaWYgKGNsb3NlNy5pbnNpZGUpIHsKICAgIGJldHdlZW4yID0gYmV0d2VlbjIuc2xpY2UoMCwgLTEpICsgZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGJldHdlZW5UYWlsKTsKICB9CiAgY29uc3QgYWZ0ZXIgPSB0cmFja2VyLm1vdmUobWFya2VyICsgbWFya2VyKTsKICBleGl0MygpOwogIHN0YXRlMTIuYXR0ZW50aW9uRW5jb2RlU3Vycm91bmRpbmdJbmZvID0gewogICAgYWZ0ZXI6IGNsb3NlNy5vdXRzaWRlLAogICAgYmVmb3JlOiBvcGVuLm91dHNpZGUKICB9OwogIHJldHVybiBiZWZvcmUgKyBiZXR3ZWVuMiArIGFmdGVyOwp9CmZ1bmN0aW9uIHN0cm9uZ1BlZWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIub3B0aW9ucy5zdHJvbmcgfHwgIioiOwp9CnZhciBpbml0X3N0cm9uZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9zdHJvbmcuanMiKCkgewogICAgaW5pdF9jaGVja19zdHJvbmcoKTsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfZW5jb2RlX2luZm8oKTsKICAgIHN0cm9uZy5wZWVrID0gc3Ryb25nUGVlazsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90ZXh0LmpzCmZ1bmN0aW9uIHRleHQobm9kZTIsIF80LCBzdGF0ZTEyLCBpbmZvKSB7CiAgcmV0dXJuIHN0YXRlMTIuc2FmZShub2RlMi52YWx1ZSwgaW5mbyk7Cn0KdmFyIGluaXRfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS90ZXh0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY2hlY2stcnVsZS1yZXBldGl0aW9uLmpzCmZ1bmN0aW9uIGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUxMikgewogIGNvbnN0IHJlcGV0aXRpb24gPSBzdGF0ZTEyLm9wdGlvbnMucnVsZVJlcGV0aXRpb24gfHwgMzsKICBpZiAocmVwZXRpdGlvbiA8IDMpIHsKICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgIkNhbm5vdCBzZXJpYWxpemUgcnVsZXMgd2l0aCByZXBldGl0aW9uIGAiICsgcmVwZXRpdGlvbiArICJgIGZvciBgb3B0aW9ucy5ydWxlUmVwZXRpdGlvbmAsIGV4cGVjdGVkIGAzYCBvciBtb3JlIgogICAgKTsKICB9CiAgcmV0dXJuIHJlcGV0aXRpb247Cn0KdmFyIGluaXRfY2hlY2tfcnVsZV9yZXBldGl0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jaGVjay1ydWxlLXJlcGV0aXRpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL3RoZW1hdGljLWJyZWFrLmpzCmZ1bmN0aW9uIHRoZW1hdGljQnJlYWsoXzQsIF8xLCBzdGF0ZTEyKSB7CiAgY29uc3QgdmFsdWUyID0gKGNoZWNrUnVsZShzdGF0ZTEyKSArIChzdGF0ZTEyLm9wdGlvbnMucnVsZVNwYWNlcyA/ICIgIiA6ICIiKSkucmVwZWF0KGNoZWNrUnVsZVJlcGV0aXRpb24oc3RhdGUxMikpOwogIHJldHVybiBzdGF0ZTEyLm9wdGlvbnMucnVsZVNwYWNlcyA/IHZhbHVlMi5zbGljZSgwLCAtMSkgOiB2YWx1ZTI7Cn0KdmFyIGluaXRfdGhlbWF0aWNfYnJlYWsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9oYW5kbGUvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogICAgaW5pdF9jaGVja19ydWxlX3JlcGV0aXRpb24oKTsKICAgIGluaXRfY2hlY2tfcnVsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvaGFuZGxlL2luZGV4LmpzCnZhciBoYW5kbGU7CnZhciBpbml0X2hhbmRsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2hhbmRsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jsb2NrcXVvdGUoKTsKICAgIGluaXRfYnJlYWsoKTsKICAgIGluaXRfY29kZSgpOwogICAgaW5pdF9kZWZpbml0aW9uKCk7CiAgICBpbml0X2VtcGhhc2lzKCk7CiAgICBpbml0X2hlYWRpbmcoKTsKICAgIGluaXRfaHRtbCgpOwogICAgaW5pdF9pbWFnZSgpOwogICAgaW5pdF9pbWFnZV9yZWZlcmVuY2UoKTsKICAgIGluaXRfaW5saW5lX2NvZGUoKTsKICAgIGluaXRfbGluaygpOwogICAgaW5pdF9saW5rX3JlZmVyZW5jZSgpOwogICAgaW5pdF9saXN0KCk7CiAgICBpbml0X2xpc3RfaXRlbSgpOwogICAgaW5pdF9wYXJhZ3JhcGgoKTsKICAgIGluaXRfcm9vdCgpOwogICAgaW5pdF9zdHJvbmcoKTsKICAgIGluaXRfdGV4dCgpOwogICAgaW5pdF90aGVtYXRpY19icmVhaygpOwogICAgaGFuZGxlID0gewogICAgICBibG9ja3F1b3RlLAogICAgICBicmVhazogaGFyZEJyZWFrLAogICAgICBjb2RlLAogICAgICBkZWZpbml0aW9uLAogICAgICBlbXBoYXNpcywKICAgICAgaGFyZEJyZWFrLAogICAgICBoZWFkaW5nLAogICAgICBodG1sLAogICAgICBpbWFnZSwKICAgICAgaW1hZ2VSZWZlcmVuY2UsCiAgICAgIGlubGluZUNvZGUsCiAgICAgIGxpbmssCiAgICAgIGxpbmtSZWZlcmVuY2UsCiAgICAgIGxpc3Q6IGxpc3QyLAogICAgICBsaXN0SXRlbSwKICAgICAgcGFyYWdyYXBoLAogICAgICByb290LAogICAgICBzdHJvbmcsCiAgICAgIHRleHQsCiAgICAgIHRoZW1hdGljQnJlYWsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9qb2luLmpzCmZ1bmN0aW9uIGpvaW5EZWZhdWx0cyhsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgaWYgKHJpZ2h0LnR5cGUgPT09ICJjb2RlIiAmJiBmb3JtYXRDb2RlQXNJbmRlbnRlZChyaWdodCwgc3RhdGUxMikgJiYgKGxlZnQudHlwZSA9PT0gImxpc3QiIHx8IGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSAmJiBmb3JtYXRDb2RlQXNJbmRlbnRlZChsZWZ0LCBzdGF0ZTEyKSkpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgaWYgKCJzcHJlYWQiIGluIHBhcmVudCAmJiB0eXBlb2YgcGFyZW50LnNwcmVhZCA9PT0gImJvb2xlYW4iKSB7CiAgICBpZiAobGVmdC50eXBlID09PSAicGFyYWdyYXBoIiAmJiAvLyBUd28gcGFyYWdyYXBocy4KICAgIChsZWZ0LnR5cGUgPT09IHJpZ2h0LnR5cGUgfHwgcmlnaHQudHlwZSA9PT0gImRlZmluaXRpb24iIHx8IC8vIFBhcmFncmFwaCBmb2xsb3dlZCBieSBhIHNldGV4dCBoZWFkaW5nLgogICAgcmlnaHQudHlwZSA9PT0gImhlYWRpbmciICYmIGZvcm1hdEhlYWRpbmdBc1NldGV4dChyaWdodCwgc3RhdGUxMikpKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHJldHVybiBwYXJlbnQuc3ByZWFkID8gMSA6IDA7CiAgfQp9CnZhciBqb2luMjsKdmFyIGluaXRfam9pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2pvaW4uanMiKCkgewogICAgaW5pdF9mb3JtYXRfY29kZV9hc19pbmRlbnRlZCgpOwogICAgaW5pdF9mb3JtYXRfaGVhZGluZ19hc19zZXRleHQoKTsKICAgIGpvaW4yID0gW2pvaW5EZWZhdWx0c107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91bnNhZmUuanMKdmFyIGZ1bGxQaHJhc2luZ1NwYW5zLCB1bnNhZmU7CnZhciBpbml0X3Vuc2FmZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3Vuc2FmZS5qcyIoKSB7CiAgICBmdWxsUGhyYXNpbmdTcGFucyA9IFsKICAgICAgImF1dG9saW5rIiwKICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICJkZXN0aW5hdGlvblJhdyIsCiAgICAgICJyZWZlcmVuY2UiLAogICAgICAidGl0bGVRdW90ZSIsCiAgICAgICJ0aXRsZUFwb3N0cm9waGUiCiAgICBdOwogICAgdW5zYWZlID0gWwogICAgICB7IGNoYXJhY3RlcjogIgkiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIJIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiCSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgewogICAgICAgIGNoYXJhY3RlcjogIlxyIiwKICAgICAgICBpbkNvbnN0cnVjdDogWwogICAgICAgICAgImNvZGVGZW5jZWRMYW5nR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRMYW5nVGlsZGUiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiLAogICAgICAgICAgImNvZGVGZW5jZWRNZXRhVGlsZGUiLAogICAgICAgICAgImRlc3RpbmF0aW9uTGl0ZXJhbCIsCiAgICAgICAgICAiaGVhZGluZ0F0eCIKICAgICAgICBdCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJcbiIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTGFuZ1RpbGRlIiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YUdyYXZlQWNjZW50IiwKICAgICAgICAgICJjb2RlRmVuY2VkTWV0YVRpbGRlIiwKICAgICAgICAgICJkZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAgICAgImhlYWRpbmdBdHgiCiAgICAgICAgXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogIiAiLCBhZnRlcjogIltcXHJcXG5dIiwgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIgIiwgYmVmb3JlOiAiW1xcclxcbl0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiICIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6IFsiY29kZUZlbmNlZExhbmdHcmF2ZUFjY2VudCIsICJjb2RlRmVuY2VkTGFuZ1RpbGRlIl0KICAgICAgfSwKICAgICAgLy8gQW4gZXhjbGFtYXRpb24gbWFyayBjYW4gc3RhcnQgYW4gaW1hZ2UsIGlmIGl0IGlzIGZvbGxvd2VkIGJ5IGEgbGluayBvcgogICAgICAvLyBhIGxpbmsgcmVmZXJlbmNlLgogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiISIsCiAgICAgICAgYWZ0ZXI6ICJcXFsiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHF1b3RlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICciJywgaW5Db25zdHJ1Y3Q6ICJ0aXRsZVF1b3RlIiB9LAogICAgICAvLyBBIG51bWJlciBzaWduIGNvdWxkIHN0YXJ0IGFuIEFUWCBoZWFkaW5nIGlmIGl0IHN0YXJ0cyBhIGxpbmUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiIyIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIjIiwgaW5Db25zdHJ1Y3Q6ICJoZWFkaW5nQXR4IiwgYWZ0ZXI6ICIoPzpbXHJcbl18JCkiIH0sCiAgICAgIC8vIERvbGxhciBzaWduIGFuZCBwZXJjZW50YWdlIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93bi4KICAgICAgLy8gQW4gYW1wZXJzYW5kIGNvdWxkIHN0YXJ0IGEgY2hhcmFjdGVyIHJlZmVyZW5jZS4KICAgICAgeyBjaGFyYWN0ZXI6ICImIiwgYWZ0ZXI6ICJbI0EtWmEtel0iLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiB9LAogICAgICAvLyBBbiBhcG9zdHJvcGhlIGNhbiBicmVhayBvdXQgb2YgYSB0aXRsZS4KICAgICAgeyBjaGFyYWN0ZXI6ICInIiwgaW5Db25zdHJ1Y3Q6ICJ0aXRsZUFwb3N0cm9waGUiIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiByYXcuCiAgICAgIHsgY2hhcmFjdGVyOiAiKCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25SYXciIH0sCiAgICAgIC8vIEEgbGVmdCBwYXJlbiBmb2xsb3dlZCBieSBgXWAgY291bGQgbWFrZSBzb21ldGhpbmcgaW50byBhIGxpbmsgb3IgaW1hZ2UuCiAgICAgIHsKICAgICAgICBiZWZvcmU6ICJcXF0iLAogICAgICAgIGNoYXJhY3RlcjogIigiLAogICAgICAgIGluQ29uc3RydWN0OiAicGhyYXNpbmciLAogICAgICAgIG5vdEluQ29uc3RydWN0OiBmdWxsUGhyYXNpbmdTcGFucwogICAgICB9LAogICAgICAvLyBBIHJpZ2h0IHBhcmVuIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtIG9yIGJyZWFrIG91dCBvZiBhIGRlc3RpbmF0aW9uCiAgICAgIC8vIHJhdy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBiZWZvcmU6ICJcXGQrIiwgY2hhcmFjdGVyOiAiKSIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICIpIiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvblJhdyIgfSwKICAgICAgLy8gQW4gYXN0ZXJpc2sgY2FuIHN0YXJ0IHRoZW1hdGljIGJyZWFrcywgbGlzdCBpdGVtcywgZW1waGFzaXMsIHN0cm9uZy4KICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICIqIiwgYWZ0ZXI6ICIoPzpbIAlcclxuKl0pIiB9LAogICAgICB7IGNoYXJhY3RlcjogIioiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIEEgcGx1cyBzaWduIGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIisiLCBhZnRlcjogIig/OlsgCVxyXG5dKSIgfSwKICAgICAgLy8gQSBkYXNoIGNhbiBzdGFydCB0aGVtYXRpYyBicmVha3MsIGxpc3QgaXRlbXMsIGFuZCBzZXRleHQgaGVhZGluZwogICAgICAvLyB1bmRlcmxpbmVzLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIig/OlsgCVxyXG4tXSkiIH0sCiAgICAgIC8vIEEgZG90IGNvdWxkIHN0YXJ0IGEgbGlzdCBpdGVtLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGJlZm9yZTogIlxcZCsiLCBjaGFyYWN0ZXI6ICIuIiwgYWZ0ZXI6ICIoPzpbIAlcclxuXXwkKSIgfSwKICAgICAgLy8gU2xhc2gsIGNvbG9uLCBhbmQgc2VtaWNvbG9uIGFyZSBub3QgdXNlZCBpbiBtYXJrZG93biBmb3IgY29uc3RydWN0cy4KICAgICAgLy8gQSBsZXNzIHRoYW4gY2FuIHN0YXJ0IGh0bWwgKGZsb3cgb3IgdGV4dCkgb3IgYW4gYXV0b2xpbmsuCiAgICAgIC8vIEhUTUwgY291bGQgc3RhcnQgd2l0aCBhbiBleGNsYW1hdGlvbiBtYXJrIChkZWNsYXJhdGlvbiwgY2RhdGEsIGNvbW1lbnQpLAogICAgICAvLyBzbGFzaCAoY2xvc2luZyB0YWcpLCBxdWVzdGlvbiBtYXJrIChpbnN0cnVjdGlvbiksIG9yIGEgbGV0dGVyICh0YWcpLgogICAgICAvLyBBbiBhdXRvbGluayBhbHNvIHN0YXJ0cyB3aXRoIGEgbGV0dGVyLgogICAgICAvLyBGaW5hbGx5LCBpdCBjb3VsZCBicmVhayBvdXQgb2YgYSBkZXN0aW5hdGlvbiBsaXRlcmFsLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjwiLCBhZnRlcjogIlshLz9BLVphLXpdIiB9LAogICAgICB7CiAgICAgICAgY2hhcmFjdGVyOiAiPCIsCiAgICAgICAgYWZ0ZXI6ICJbIS8/QS1aYS16XSIsCiAgICAgICAgaW5Db25zdHJ1Y3Q6ICJwaHJhc2luZyIsCiAgICAgICAgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zCiAgICAgIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiPCIsIGluQ29uc3RydWN0OiAiZGVzdGluYXRpb25MaXRlcmFsIiB9LAogICAgICAvLyBBbiBlcXVhbHMgdG8gY2FuIHN0YXJ0IHNldGV4dCBoZWFkaW5nIHVuZGVybGluZXMuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPSIgfSwKICAgICAgLy8gQSBncmVhdGVyIHRoYW4gY2FuIHN0YXJ0IGJsb2NrIHF1b3RlcyBhbmQgaXQgY2FuIGJyZWFrIG91dCBvZiBhCiAgICAgIC8vIGRlc3RpbmF0aW9uIGxpdGVyYWwuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiPiIgfSwKICAgICAgeyBjaGFyYWN0ZXI6ICI+IiwgaW5Db25zdHJ1Y3Q6ICJkZXN0aW5hdGlvbkxpdGVyYWwiIH0sCiAgICAgIC8vIFF1ZXN0aW9uIG1hcmsgYW5kIGF0IHNpZ24gYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBIGxlZnQgYnJhY2tldCBjYW4gc3RhcnQgZGVmaW5pdGlvbnMsIHJlZmVyZW5jZXMsIGxhYmVscywKICAgICAgeyBhdEJyZWFrOiB0cnVlLCBjaGFyYWN0ZXI6ICJbIiB9LAogICAgICB7IGNoYXJhY3RlcjogIlsiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiWyIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIEEgYmFja3NsYXNoIGNhbiBzdGFydCBhbiBlc2NhcGUgKHdoZW4gZm9sbG93ZWQgYnkgcHVuY3R1YXRpb24pIG9yIGEKICAgICAgLy8gaGFyZCBicmVhayAod2hlbiBmb2xsb3dlZCBieSBhbiBlb2wpLgogICAgICAvLyBOb3RlOiB0eXBpY2FsIGVzY2FwZXMgYXJlIGhhbmRsZWQgaW4gYHNhZmVgIQogICAgICB7IGNoYXJhY3RlcjogIlxcIiwgYWZ0ZXI6ICJbXFxyXFxuXSIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciIH0sCiAgICAgIC8vIEEgcmlnaHQgYnJhY2tldCBjYW4gZXhpdCBsYWJlbHMuCiAgICAgIHsgY2hhcmFjdGVyOiAiXSIsIGluQ29uc3RydWN0OiBbImxhYmVsIiwgInJlZmVyZW5jZSJdIH0sCiAgICAgIC8vIENhcmV0IGlzIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvciBjb25zdHJ1Y3RzLgogICAgICAvLyBBbiB1bmRlcnNjb3JlIGNhbiBzdGFydCBlbXBoYXNpcywgc3Ryb25nLCBvciBhIHRoZW1hdGljIGJyZWFrLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIl8iIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXyIsIGluQ29uc3RydWN0OiAicGhyYXNpbmciLCBub3RJbkNvbnN0cnVjdDogZnVsbFBocmFzaW5nU3BhbnMgfSwKICAgICAgLy8gQSBncmF2ZSBhY2NlbnQgY2FuIHN0YXJ0IGNvZGUgKGZlbmNlZCBvciB0ZXh0KSwgb3IgaXQgY2FuIGJyZWFrIG91dCBvZgogICAgICAvLyBhIGdyYXZlIGFjY2VudCBjb2RlIGZlbmNlLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogImAiIH0sCiAgICAgIHsKICAgICAgICBjaGFyYWN0ZXI6ICJgIiwKICAgICAgICBpbkNvbnN0cnVjdDogWyJjb2RlRmVuY2VkTGFuZ0dyYXZlQWNjZW50IiwgImNvZGVGZW5jZWRNZXRhR3JhdmVBY2NlbnQiXQogICAgICB9LAogICAgICB7IGNoYXJhY3RlcjogImAiLCBpbkNvbnN0cnVjdDogInBocmFzaW5nIiwgbm90SW5Db25zdHJ1Y3Q6IGZ1bGxQaHJhc2luZ1NwYW5zIH0sCiAgICAgIC8vIExlZnQgYnJhY2UsIHZlcnRpY2FsIGJhciwgcmlnaHQgYnJhY2UgYXJlIG5vdCB1c2VkIGluIG1hcmtkb3duIGZvcgogICAgICAvLyBjb25zdHJ1Y3RzLgogICAgICAvLyBBIHRpbGRlIGNhbiBzdGFydCBjb2RlIChmZW5jZWQpLgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIn4iIH0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzCmZ1bmN0aW9uIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMikgewogIGNvbnN0IGNoYXJhY3RlclJlZmVyZW5jZTIgPSAiJiIgKyB2YWx1ZTIgKyAiOyI7CiAgZWxlbWVudC5pbm5lckhUTUwgPSBjaGFyYWN0ZXJSZWZlcmVuY2UyOwogIGNvbnN0IGNoYXJhY3RlciA9IGVsZW1lbnQudGV4dENvbnRlbnQ7CiAgaWYgKGNoYXJhY3Rlci5jaGFyQ29kZUF0KGNoYXJhY3Rlci5sZW5ndGggLSAxKSA9PT0gNTkgJiYgdmFsdWUyICE9PSAic2VtaSIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgcmV0dXJuIGNoYXJhY3RlciA9PT0gY2hhcmFjdGVyUmVmZXJlbmNlMiA/IGZhbHNlIDogY2hhcmFjdGVyOwp9CnZhciBlbGVtZW50Owp2YXIgaW5pdF9pbmRleF9kb20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9kZWNvZGUtbmFtZWQtY2hhcmFjdGVyLXJlZmVyZW5jZUAxLjMuMC9ub2RlX21vZHVsZXMvZGVjb2RlLW5hbWVkLWNoYXJhY3Rlci1yZWZlcmVuY2UvaW5kZXguZG9tLmpzIigpIHsKICAgIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzCmZ1bmN0aW9uIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLCBiYXNlKSB7CiAgY29uc3QgY29kZTQgPSBOdW1iZXIucGFyc2VJbnQodmFsdWUyLCBiYXNlKTsKICBpZiAoCiAgICAvLyBDMCBleGNlcHQgZm9yIEhULCBMRiwgRkYsIENSLCBzcGFjZS4KICAgIGNvZGU0IDwgOSB8fCBjb2RlNCA9PT0gMTEgfHwgY29kZTQgPiAxMyAmJiBjb2RlNCA8IDMyIHx8IC8vIENvbnRyb2wgY2hhcmFjdGVyIChERUwpIG9mIEMwLCBhbmQgQzEgY29udHJvbHMuCiAgICBjb2RlNCA+IDEyNiAmJiBjb2RlNCA8IDE2MCB8fCAvLyBMb25lIGhpZ2ggc3Vycm9nYXRlcyBhbmQgbG93IHN1cnJvZ2F0ZXMuCiAgICBjb2RlNCA+IDU1Mjk1ICYmIGNvZGU0IDwgNTczNDQgfHwgLy8gTm9uY2hhcmFjdGVycy4KICAgIGNvZGU0ID4gNjQ5NzUgJiYgY29kZTQgPCA2NTAwOCB8fCAvKiBlc2xpbnQtZGlzYWJsZSBuby1iaXR3aXNlICovCiAgICAoY29kZTQgJiA2NTUzNSkgPT09IDY1NTM1IHx8IChjb2RlNCAmIDY1NTM1KSA9PT0gNjU1MzQgfHwgLyogZXNsaW50LWVuYWJsZSBuby1iaXR3aXNlICovCiAgICAvLyBPdXQgb2YgcmFuZ2UKICAgIGNvZGU0ID4gMTExNDExMQogICkgewogICAgcmV0dXJuICJcdUZGRkQiOwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlQDIuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1kZWNvZGUtbnVtZXJpYy1jaGFyYWN0ZXItcmVmZXJlbmNlL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmdAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWRlY29kZS1zdHJpbmcvaW5kZXguanMKZnVuY3Rpb24gZGVjb2RlU3RyaW5nKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZShjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSwgZGVjb2RlKTsKfQpmdW5jdGlvbiBkZWNvZGUoJDAsICQxLCAkMjIpIHsKICBpZiAoJDEpIHsKICAgIHJldHVybiAkMTsKICB9CiAgY29uc3QgaGVhZDIgPSAkMjIuY2hhckNvZGVBdCgwKTsKICBpZiAoaGVhZDIgPT09IDM1KSB7CiAgICBjb25zdCBoZWFkMyA9ICQyMi5jaGFyQ29kZUF0KDEpOwogICAgY29uc3QgaGV4MiA9IGhlYWQzID09PSAxMjAgfHwgaGVhZDMgPT09IDg4OwogICAgcmV0dXJuIGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoJDIyLnNsaWNlKGhleDIgPyAyIDogMSksIGhleDIgPyAxNiA6IDEwKTsKICB9CiAgcmV0dXJuIGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKCQyMikgfHwgJDA7Cn0KdmFyIGNoYXJhY3RlckVzY2FwZU9yUmVmZXJlbmNlOwp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfc3RyaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZ0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtZGVjb2RlLXN0cmluZy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfbnVtZXJpY19jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBjaGFyYWN0ZXJFc2NhcGVPclJlZmVyZW5jZSA9IC9cXChbIS0vOi1AWy1gey1+XSl8JigjKD86XGR7MSw3fXx4W1xkYS1mXXsxLDZ9KXxbXGRhLXpdezEsMzF9KTsvZ2k7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzCmZ1bmN0aW9uIGFzc29jaWF0aW9uKG5vZGUyKSB7CiAgaWYgKG5vZGUyLmxhYmVsIHx8ICFub2RlMi5pZGVudGlmaWVyKSB7CiAgICByZXR1cm4gbm9kZTIubGFiZWwgfHwgIiI7CiAgfQogIHJldHVybiBkZWNvZGVTdHJpbmcobm9kZTIuaWRlbnRpZmllcik7Cn0KdmFyIGluaXRfYXNzb2NpYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2Fzc29jaWF0aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX3N0cmluZygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9jb21waWxlLXBhdHRlcm4uanMKZnVuY3Rpb24gY29tcGlsZVBhdHRlcm4ocGF0dGVybikgewogIGlmICghcGF0dGVybi5fY29tcGlsZWQpIHsKICAgIGNvbnN0IGJlZm9yZSA9IChwYXR0ZXJuLmF0QnJlYWsgPyAiW1xcclxcbl1bXFx0IF0qIiA6ICIiKSArIChwYXR0ZXJuLmJlZm9yZSA/ICIoPzoiICsgcGF0dGVybi5iZWZvcmUgKyAiKSIgOiAiIik7CiAgICBwYXR0ZXJuLl9jb21waWxlZCA9IG5ldyBSZWdFeHAoCiAgICAgIChiZWZvcmUgPyAiKCIgKyBiZWZvcmUgKyAiKSIgOiAiIikgKyAoL1t8XFx7fSgpW1xdXiQrKj8uLV0vLnRlc3QocGF0dGVybi5jaGFyYWN0ZXIpID8gIlxcIiA6ICIiKSArIHBhdHRlcm4uY2hhcmFjdGVyICsgKHBhdHRlcm4uYWZ0ZXIgPyAiKD86IiArIHBhdHRlcm4uYWZ0ZXIgKyAiKSIgOiAiIiksCiAgICAgICJnIgogICAgKTsKICB9CiAgcmV0dXJuIHBhdHRlcm4uX2NvbXBpbGVkOwp9CnZhciBpbml0X2NvbXBpbGVfcGF0dGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29tcGlsZS1wYXR0ZXJuLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzCmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGluZGV4U3RhY2sgPSBzdGF0ZTEyLmluZGV4U3RhY2s7CiAgY29uc3QgY2hpbGRyZW4yID0gcGFyZW50LmNoaWxkcmVuIHx8IFtdOwogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGJlZm9yZSA9IGluZm8uYmVmb3JlOwogIGxldCBlbmNvZGVBZnRlcjsKICBpbmRleFN0YWNrLnB1c2goLTEpOwogIGxldCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gY2hpbGRyZW4yW2luZGV4Ml07CiAgICBsZXQgYWZ0ZXI7CiAgICBpbmRleFN0YWNrW2luZGV4U3RhY2subGVuZ3RoIC0gMV0gPSBpbmRleDI7CiAgICBpZiAoaW5kZXgyICsgMSA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgbGV0IGhhbmRsZTMgPSBzdGF0ZTEyLmhhbmRsZS5oYW5kbGVyc1tjaGlsZHJlbjJbaW5kZXgyICsgMV0udHlwZV07CiAgICAgIGlmIChoYW5kbGUzICYmIGhhbmRsZTMucGVlaykgaGFuZGxlMyA9IGhhbmRsZTMucGVlazsKICAgICAgYWZ0ZXIgPSBoYW5kbGUzID8gaGFuZGxlMyhjaGlsZHJlbjJbaW5kZXgyICsgMV0sIHBhcmVudCwgc3RhdGUxMiwgewogICAgICAgIGJlZm9yZTogIiIsCiAgICAgICAgYWZ0ZXI6ICIiLAogICAgICAgIC4uLnRyYWNrZXIuY3VycmVudCgpCiAgICAgIH0pLmNoYXJBdCgwKSA6ICIiOwogICAgfSBlbHNlIHsKICAgICAgYWZ0ZXIgPSBpbmZvLmFmdGVyOwogICAgfQogICAgaWYgKHJlc3VsdHMubGVuZ3RoID4gMCAmJiAoYmVmb3JlID09PSAiXHIiIHx8IGJlZm9yZSA9PT0gIlxuIikgJiYgY2hpbGQudHlwZSA9PT0gImh0bWwiKSB7CiAgICAgIHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXSA9IHJlc3VsdHNbcmVzdWx0cy5sZW5ndGggLSAxXS5yZXBsYWNlKAogICAgICAgIC8oXHI/XG58XHIpJC8sCiAgICAgICAgIiAiCiAgICAgICk7CiAgICAgIGJlZm9yZSA9ICIgIjsKICAgICAgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICAgICAgdHJhY2tlci5tb3ZlKHJlc3VsdHMuam9pbigiIikpOwogICAgfQogICAgbGV0IHZhbHVlMiA9IHN0YXRlMTIuaGFuZGxlKGNoaWxkLCBwYXJlbnQsIHN0YXRlMTIsIHsKICAgICAgLi4udHJhY2tlci5jdXJyZW50KCksCiAgICAgIGFmdGVyLAogICAgICBiZWZvcmUKICAgIH0pOwogICAgaWYgKGVuY29kZUFmdGVyICYmIGVuY29kZUFmdGVyID09PSB2YWx1ZTIuc2xpY2UoMCwgMSkpIHsKICAgICAgdmFsdWUyID0gZW5jb2RlQ2hhcmFjdGVyUmVmZXJlbmNlKGVuY29kZUFmdGVyLmNoYXJDb2RlQXQoMCkpICsgdmFsdWUyLnNsaWNlKDEpOwogICAgfQogICAgY29uc3QgZW5jb2RpbmdJbmZvID0gc3RhdGUxMi5hdHRlbnRpb25FbmNvZGVTdXJyb3VuZGluZ0luZm87CiAgICBzdGF0ZTEyLmF0dGVudGlvbkVuY29kZVN1cnJvdW5kaW5nSW5mbyA9IHZvaWQgMDsKICAgIGVuY29kZUFmdGVyID0gdm9pZCAwOwogICAgaWYgKGVuY29kaW5nSW5mbykgewogICAgICBpZiAocmVzdWx0cy5sZW5ndGggPiAwICYmIGVuY29kaW5nSW5mby5iZWZvcmUgJiYgYmVmb3JlID09PSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV0uc2xpY2UoLTEpKSB7CiAgICAgICAgcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdID0gcmVzdWx0c1tyZXN1bHRzLmxlbmd0aCAtIDFdLnNsaWNlKDAsIC0xKSArIGVuY29kZUNoYXJhY3RlclJlZmVyZW5jZShiZWZvcmUuY2hhckNvZGVBdCgwKSk7CiAgICAgIH0KICAgICAgaWYgKGVuY29kaW5nSW5mby5hZnRlcikgZW5jb2RlQWZ0ZXIgPSBhZnRlcjsKICAgIH0KICAgIHRyYWNrZXIubW92ZSh2YWx1ZTIpOwogICAgcmVzdWx0cy5wdXNoKHZhbHVlMik7CiAgICBiZWZvcmUgPSB2YWx1ZTIuc2xpY2UoLTEpOwogIH0KICBpbmRleFN0YWNrLnBvcCgpOwogIHJldHVybiByZXN1bHRzLmpvaW4oIiIpOwp9CnZhciBpbml0X2NvbnRhaW5lcl9waHJhc2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLXBocmFzaW5nLmpzIigpIHsKICAgIGluaXRfZW5jb2RlX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLWZsb3cuanMKZnVuY3Rpb24gY29udGFpbmVyRmxvdyhwYXJlbnQsIHN0YXRlMTIsIGluZm8pIHsKICBjb25zdCBpbmRleFN0YWNrID0gc3RhdGUxMi5pbmRleFN0YWNrOwogIGNvbnN0IGNoaWxkcmVuMiA9IHBhcmVudC5jaGlsZHJlbiB8fCBbXTsKICBjb25zdCB0cmFja2VyID0gc3RhdGUxMi5jcmVhdGVUcmFja2VyKGluZm8pOwogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaW5kZXhTdGFjay5wdXNoKC0xKTsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlbjIubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IGNoaWxkcmVuMltpbmRleDJdOwogICAgaW5kZXhTdGFja1tpbmRleFN0YWNrLmxlbmd0aCAtIDFdID0gaW5kZXgyOwogICAgcmVzdWx0cy5wdXNoKAogICAgICB0cmFja2VyLm1vdmUoCiAgICAgICAgc3RhdGUxMi5oYW5kbGUoY2hpbGQsIHBhcmVudCwgc3RhdGUxMiwgewogICAgICAgICAgYmVmb3JlOiAiXG4iLAogICAgICAgICAgYWZ0ZXI6ICJcbiIsCiAgICAgICAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogICAgICAgIH0pCiAgICAgICkKICAgICk7CiAgICBpZiAoY2hpbGQudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgIHN0YXRlMTIuYnVsbGV0TGFzdFVzZWQgPSB2b2lkIDA7CiAgICB9CiAgICBpZiAoaW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgcmVzdWx0cy5wdXNoKAogICAgICAgIHRyYWNrZXIubW92ZShiZXR3ZWVuKGNoaWxkLCBjaGlsZHJlbjJbaW5kZXgyICsgMV0sIHBhcmVudCwgc3RhdGUxMikpCiAgICAgICk7CiAgICB9CiAgfQogIGluZGV4U3RhY2sucG9wKCk7CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KZnVuY3Rpb24gYmV0d2VlbihsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgbGV0IGluZGV4MiA9IHN0YXRlMTIuam9pbi5sZW5ndGg7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCByZXN1bHQgPSBzdGF0ZTEyLmpvaW5baW5kZXgyXShsZWZ0LCByaWdodCwgcGFyZW50LCBzdGF0ZTEyKTsKICAgIGlmIChyZXN1bHQgPT09IHRydWUgfHwgcmVzdWx0ID09PSAxKSB7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJudW1iZXIiKSB7CiAgICAgIHJldHVybiAiXG4iLnJlcGVhdCgxICsgcmVzdWx0KTsKICAgIH0KICAgIGlmIChyZXN1bHQgPT09IGZhbHNlKSB7CiAgICAgIHJldHVybiAiXG5cbjwhLS0tLT5cblxuIjsKICAgIH0KICB9CiAgcmV0dXJuICJcblxuIjsKfQp2YXIgaW5pdF9jb250YWluZXJfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvY29udGFpbmVyLWZsb3cuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1tYXJrZG93bkAyLjEuMi9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1tYXJrZG93bi9saWIvdXRpbC9pbmRlbnQtbGluZXMuanMKZnVuY3Rpb24gaW5kZW50TGluZXModmFsdWUyLCBtYXA3KSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgbGluZSA9IDA7CiAgbGV0IG1hdGNoMjsKICB3aGlsZSAobWF0Y2gyID0gZW9sLmV4ZWModmFsdWUyKSkgewogICAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIG1hdGNoMi5pbmRleCkpOwogICAgcmVzdWx0LnB1c2gobWF0Y2gyWzBdKTsKICAgIHN0YXJ0ID0gbWF0Y2gyLmluZGV4ICsgbWF0Y2gyWzBdLmxlbmd0aDsKICAgIGxpbmUrKzsKICB9CiAgb25lMyh2YWx1ZTIuc2xpY2Uoc3RhcnQpKTsKICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwogIGZ1bmN0aW9uIG9uZTModmFsdWUzKSB7CiAgICByZXN1bHQucHVzaChtYXA3KHZhbHVlMywgbGluZSwgIXZhbHVlMykpOwogIH0KfQp2YXIgZW9sOwp2YXIgaW5pdF9pbmRlbnRfbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL2luZGVudC1saW5lcy5qcyIoKSB7CiAgICBlb2wgPSAvXHI/XG58XHIvZzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvc2FmZS5qcwpmdW5jdGlvbiBzYWZlKHN0YXRlMTIsIGlucHV0LCBjb25maWczKSB7CiAgY29uc3QgdmFsdWUyID0gKGNvbmZpZzMuYmVmb3JlIHx8ICIiKSArIChpbnB1dCB8fCAiIikgKyAoY29uZmlnMy5hZnRlciB8fCAiIik7CiAgY29uc3QgcG9zaXRpb25zID0gW107CiAgY29uc3QgcmVzdWx0ID0gW107CiAgY29uc3QgaW5mb3MgPSB7fTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3RhdGUxMi51bnNhZmUubGVuZ3RoKSB7CiAgICBjb25zdCBwYXR0ZXJuID0gc3RhdGUxMi51bnNhZmVbaW5kZXgyXTsKICAgIGlmICghcGF0dGVybkluU2NvcGUoc3RhdGUxMi5zdGFjaywgcGF0dGVybikpIHsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBleHByZXNzaW9uID0gc3RhdGUxMi5jb21waWxlUGF0dGVybihwYXR0ZXJuKTsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAobWF0Y2gyID0gZXhwcmVzc2lvbi5leGVjKHZhbHVlMikpIHsKICAgICAgY29uc3QgYmVmb3JlID0gImJlZm9yZSIgaW4gcGF0dGVybiB8fCBCb29sZWFuKHBhdHRlcm4uYXRCcmVhayk7CiAgICAgIGNvbnN0IGFmdGVyID0gImFmdGVyIiBpbiBwYXR0ZXJuOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBtYXRjaDIuaW5kZXggKyAoYmVmb3JlID8gbWF0Y2gyWzFdLmxlbmd0aCA6IDApOwogICAgICBpZiAocG9zaXRpb25zLmluY2x1ZGVzKHBvc2l0aW9uMykpIHsKICAgICAgICBpZiAoaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgJiYgIWJlZm9yZSkgewogICAgICAgICAgaW5mb3NbcG9zaXRpb24zXS5iZWZvcmUgPSBmYWxzZTsKICAgICAgICB9CiAgICAgICAgaWYgKGluZm9zW3Bvc2l0aW9uM10uYWZ0ZXIgJiYgIWFmdGVyKSB7CiAgICAgICAgICBpbmZvc1twb3NpdGlvbjNdLmFmdGVyID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHBvc2l0aW9ucy5wdXNoKHBvc2l0aW9uMyk7CiAgICAgICAgaW5mb3NbcG9zaXRpb24zXSA9IHsgYmVmb3JlLCBhZnRlciB9OwogICAgICB9CiAgICB9CiAgfQogIHBvc2l0aW9ucy5zb3J0KG51bWVyaWNhbCk7CiAgbGV0IHN0YXJ0ID0gY29uZmlnMy5iZWZvcmUgPyBjb25maWczLmJlZm9yZS5sZW5ndGggOiAwOwogIGNvbnN0IGVuZDMgPSB2YWx1ZTIubGVuZ3RoIC0gKGNvbmZpZzMuYWZ0ZXIgPyBjb25maWczLmFmdGVyLmxlbmd0aCA6IDApOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IHBvc2l0aW9ucy5sZW5ndGgpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHBvc2l0aW9uc1tpbmRleDJdOwogICAgaWYgKHBvc2l0aW9uMyA8IHN0YXJ0IHx8IHBvc2l0aW9uMyA+PSBlbmQzKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgaWYgKHBvc2l0aW9uMyArIDEgPCBlbmQzICYmIHBvc2l0aW9uc1tpbmRleDIgKyAxXSA9PT0gcG9zaXRpb24zICsgMSAmJiBpbmZvc1twb3NpdGlvbjNdLmFmdGVyICYmICFpbmZvc1twb3NpdGlvbjMgKyAxXS5iZWZvcmUgJiYgIWluZm9zW3Bvc2l0aW9uMyArIDFdLmFmdGVyIHx8IHBvc2l0aW9uc1tpbmRleDIgLSAxXSA9PT0gcG9zaXRpb24zIC0gMSAmJiBpbmZvc1twb3NpdGlvbjNdLmJlZm9yZSAmJiAhaW5mb3NbcG9zaXRpb24zIC0gMV0uYmVmb3JlICYmICFpbmZvc1twb3NpdGlvbjMgLSAxXS5hZnRlcikgewogICAgICBjb250aW51ZTsKICAgIH0KICAgIGlmIChzdGFydCAhPT0gcG9zaXRpb24zKSB7CiAgICAgIHJlc3VsdC5wdXNoKGVzY2FwZUJhY2tzbGFzaGVzKHZhbHVlMi5zbGljZShzdGFydCwgcG9zaXRpb24zKSwgIlxcIikpOwogICAgfQogICAgc3RhcnQgPSBwb3NpdGlvbjM7CiAgICBpZiAoL1shLS86LUBbLWB7LX5dLy50ZXN0KHZhbHVlMi5jaGFyQXQocG9zaXRpb24zKSkgJiYgKCFjb25maWczLmVuY29kZSB8fCAhY29uZmlnMy5lbmNvZGUuaW5jbHVkZXModmFsdWUyLmNoYXJBdChwb3NpdGlvbjMpKSkpIHsKICAgICAgcmVzdWx0LnB1c2goIlxcIik7CiAgICB9IGVsc2UgewogICAgICByZXN1bHQucHVzaChlbmNvZGVDaGFyYWN0ZXJSZWZlcmVuY2UodmFsdWUyLmNoYXJDb2RlQXQocG9zaXRpb24zKSkpOwogICAgICBzdGFydCsrOwogICAgfQogIH0KICByZXN1bHQucHVzaChlc2NhcGVCYWNrc2xhc2hlcyh2YWx1ZTIuc2xpY2Uoc3RhcnQsIGVuZDMpLCBjb25maWczLmFmdGVyKSk7CiAgcmV0dXJuIHJlc3VsdC5qb2luKCIiKTsKfQpmdW5jdGlvbiBudW1lcmljYWwoYTUsIGI1KSB7CiAgcmV0dXJuIGE1IC0gYjU7Cn0KZnVuY3Rpb24gZXNjYXBlQmFja3NsYXNoZXModmFsdWUyLCBhZnRlcikgewogIGNvbnN0IGV4cHJlc3Npb24gPSAvXFwoPz1bIS0vOi1AWy1gey1+XSkvZzsKICBjb25zdCBwb3NpdGlvbnMgPSBbXTsKICBjb25zdCByZXN1bHRzID0gW107CiAgY29uc3Qgd2hvbGUgPSB2YWx1ZTIgKyBhZnRlcjsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgbWF0Y2gyOwogIHdoaWxlIChtYXRjaDIgPSBleHByZXNzaW9uLmV4ZWMod2hvbGUpKSB7CiAgICBwb3NpdGlvbnMucHVzaChtYXRjaDIuaW5kZXgpOwogIH0KICB3aGlsZSAoKytpbmRleDIgPCBwb3NpdGlvbnMubGVuZ3RoKSB7CiAgICBpZiAoc3RhcnQgIT09IHBvc2l0aW9uc1tpbmRleDJdKSB7CiAgICAgIHJlc3VsdHMucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnQsIHBvc2l0aW9uc1tpbmRleDJdKSk7CiAgICB9CiAgICByZXN1bHRzLnB1c2goIlxcIik7CiAgICBzdGFydCA9IHBvc2l0aW9uc1tpbmRleDJdOwogIH0KICByZXN1bHRzLnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0KSk7CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KdmFyIGluaXRfc2FmZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvc2FmZS5qcyIoKSB7CiAgICBpbml0X2VuY29kZV9jaGFyYWN0ZXJfcmVmZXJlbmNlKCk7CiAgICBpbml0X3BhdHRlcm5faW5fc2NvcGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL3V0aWwvdHJhY2suanMKZnVuY3Rpb24gdHJhY2soY29uZmlnMykgewogIGNvbnN0IG9wdGlvbnMgPSBjb25maWczIHx8IHt9OwogIGNvbnN0IG5vdzIgPSBvcHRpb25zLm5vdyB8fCB7fTsKICBsZXQgbGluZVNoaWZ0ID0gb3B0aW9ucy5saW5lU2hpZnQgfHwgMDsKICBsZXQgbGluZSA9IG5vdzIubGluZSB8fCAxOwogIGxldCBjb2x1bW4gPSBub3cyLmNvbHVtbiB8fCAxOwogIHJldHVybiB7IG1vdmUsIGN1cnJlbnQsIHNoaWZ0IH07CiAgZnVuY3Rpb24gY3VycmVudCgpIHsKICAgIHJldHVybiB7IG5vdzogeyBsaW5lLCBjb2x1bW4gfSwgbGluZVNoaWZ0IH07CiAgfQogIGZ1bmN0aW9uIHNoaWZ0KHZhbHVlMikgewogICAgbGluZVNoaWZ0ICs9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gbW92ZShpbnB1dCkgewogICAgY29uc3QgdmFsdWUyID0gaW5wdXQgfHwgIiI7CiAgICBjb25zdCBjaHVua3MgPSB2YWx1ZTIuc3BsaXQoL1xyP1xufFxyL2cpOwogICAgY29uc3QgdGFpbCA9IGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV07CiAgICBsaW5lICs9IGNodW5rcy5sZW5ndGggLSAxOwogICAgY29sdW1uID0gY2h1bmtzLmxlbmd0aCA9PT0gMSA/IGNvbHVtbiArIHRhaWwubGVuZ3RoIDogMSArIHRhaWwubGVuZ3RoICsgbGluZVNoaWZ0OwogICAgcmV0dXJuIHZhbHVlMjsKICB9Cn0KdmFyIGluaXRfdHJhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi91dGlsL3RyYWNrLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHRvTWFya2Rvd24odHJlZSwgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBzdGF0ZTEyID0gewogICAgYXNzb2NpYXRpb25JZDogYXNzb2NpYXRpb24sCiAgICBjb250YWluZXJQaHJhc2luZzogY29udGFpbmVyUGhyYXNpbmdCb3VuZCwKICAgIGNvbnRhaW5lckZsb3c6IGNvbnRhaW5lckZsb3dCb3VuZCwKICAgIGNyZWF0ZVRyYWNrZXI6IHRyYWNrLAogICAgY29tcGlsZVBhdHRlcm4sCiAgICBlbnRlciwKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IEdGTSAvIGZyb250bWF0dGVyIGFyZSB0eXBlZCBpbiBgbWRhc3RgIGJ1dCBub3QgZGVmaW5lZAogICAgLy8gaGVyZS4KICAgIGhhbmRsZXJzOiB7IC4uLmhhbmRsZSB9LAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogYWRkIGBoYW5kbGVgIGluIGEgc2Vjb25kLgogICAgaGFuZGxlOiB2b2lkIDAsCiAgICBpbmRlbnRMaW5lcywKICAgIGluZGV4U3RhY2s6IFtdLAogICAgam9pbjogWy4uLmpvaW4yXSwKICAgIG9wdGlvbnM6IHt9LAogICAgc2FmZTogc2FmZUJvdW5kLAogICAgc3RhY2s6IFtdLAogICAgdW5zYWZlOiBbLi4udW5zYWZlXQogIH07CiAgY29uZmlndXJlKHN0YXRlMTIsIHNldHRpbmdzKTsKICBpZiAoc3RhdGUxMi5vcHRpb25zLnRpZ2h0RGVmaW5pdGlvbnMpIHsKICAgIHN0YXRlMTIuam9pbi5wdXNoKGpvaW5EZWZpbml0aW9uKTsKICB9CiAgc3RhdGUxMi5oYW5kbGUgPSB6d2l0Y2goInR5cGUiLCB7CiAgICBpbnZhbGlkLAogICAgdW5rbm93biwKICAgIGhhbmRsZXJzOiBzdGF0ZTEyLmhhbmRsZXJzCiAgfSk7CiAgbGV0IHJlc3VsdCA9IHN0YXRlMTIuaGFuZGxlKHRyZWUsIHZvaWQgMCwgc3RhdGUxMiwgewogICAgYmVmb3JlOiAiXG4iLAogICAgYWZ0ZXI6ICJcbiIsCiAgICBub3c6IHsgbGluZTogMSwgY29sdW1uOiAxIH0sCiAgICBsaW5lU2hpZnQ6IDAKICB9KTsKICBpZiAocmVzdWx0ICYmIHJlc3VsdC5jaGFyQ29kZUF0KHJlc3VsdC5sZW5ndGggLSAxKSAhPT0gMTAgJiYgcmVzdWx0LmNoYXJDb2RlQXQocmVzdWx0Lmxlbmd0aCAtIDEpICE9PSAxMykgewogICAgcmVzdWx0ICs9ICJcbiI7CiAgfQogIHJldHVybiByZXN1bHQ7CiAgZnVuY3Rpb24gZW50ZXIobmFtZSkgewogICAgc3RhdGUxMi5zdGFjay5wdXNoKG5hbWUpOwogICAgcmV0dXJuIGV4aXQzOwogICAgZnVuY3Rpb24gZXhpdDMoKSB7CiAgICAgIHN0YXRlMTIuc3RhY2sucG9wKCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGludmFsaWQodmFsdWUyKSB7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHZhbHVlIGAiICsgdmFsdWUyICsgImAsIGV4cGVjdGVkIG5vZGUiKTsKfQpmdW5jdGlvbiB1bmtub3duKHZhbHVlMikgewogIGNvbnN0IG5vZGUyID0gKAogICAgLyoqIEB0eXBlIHtOb2Rlc30gKi8KICAgIHZhbHVlMgogICk7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgaGFuZGxlIHVua25vd24gbm9kZSBgIiArIG5vZGUyLnR5cGUgKyAiYCIpOwp9CmZ1bmN0aW9uIGpvaW5EZWZpbml0aW9uKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKGxlZnQudHlwZSA9PT0gImRlZmluaXRpb24iICYmIGxlZnQudHlwZSA9PT0gcmlnaHQudHlwZSkgewogICAgcmV0dXJuIDA7CiAgfQp9CmZ1bmN0aW9uIGNvbnRhaW5lclBocmFzaW5nQm91bmQocGFyZW50LCBpbmZvKSB7CiAgcmV0dXJuIGNvbnRhaW5lclBocmFzaW5nKHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gY29udGFpbmVyRmxvd0JvdW5kKHBhcmVudCwgaW5mbykgewogIHJldHVybiBjb250YWluZXJGbG93KHBhcmVudCwgdGhpcywgaW5mbyk7Cn0KZnVuY3Rpb24gc2FmZUJvdW5kKHZhbHVlMiwgY29uZmlnMykgewogIHJldHVybiBzYWZlKHRoaXMsIHZhbHVlMiwgY29uZmlnMyk7Cn0KdmFyIGluaXRfbGliMTUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLW1hcmtkb3duQDIuMS4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLW1hcmtkb3duL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X3p3aXRjaCgpOwogICAgaW5pdF9jb25maWd1cmUoKTsKICAgIGluaXRfaGFuZGxlKCk7CiAgICBpbml0X2pvaW4oKTsKICAgIGluaXRfdW5zYWZlKCk7CiAgICBpbml0X2Fzc29jaWF0aW9uKCk7CiAgICBpbml0X2NvbXBpbGVfcGF0dGVybigpOwogICAgaW5pdF9jb250YWluZXJfcGhyYXNpbmcoKTsKICAgIGluaXRfY29udGFpbmVyX2Zsb3coKTsKICAgIGluaXRfaW5kZW50X2xpbmVzKCk7CiAgICBpbml0X3NhZmUoKTsKICAgIGluaXRfdHJhY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF90b19tYXJrZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8tbWFya2Rvd25AMi4xLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8tbWFya2Rvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNSgpOwogICAgaW5pdF9oYW5kbGUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9saWIvaW5kZXguanMKZnVuY3Rpb24gZ2ZtVGFibGVGcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHRhYmxlOiBlbnRlclRhYmxlLAogICAgICB0YWJsZURhdGE6IGVudGVyQ2VsbCwKICAgICAgdGFibGVIZWFkZXI6IGVudGVyQ2VsbCwKICAgICAgdGFibGVSb3c6IGVudGVyUm93CiAgICB9LAogICAgZXhpdDogewogICAgICBjb2RlVGV4dDogZXhpdENvZGVUZXh0LAogICAgICB0YWJsZTogZXhpdFRhYmxlLAogICAgICB0YWJsZURhdGE6IGV4aXQsCiAgICAgIHRhYmxlSGVhZGVyOiBleGl0LAogICAgICB0YWJsZVJvdzogZXhpdAogICAgfQogIH07Cn0KZnVuY3Rpb24gZW50ZXJUYWJsZSh0b2tlbikgewogIGNvbnN0IGFsaWduID0gdG9rZW4uX2FsaWduOwogIG9rKGFsaWduLCAiZXhwZWN0ZWQgYF9hbGlnbmAgb24gdGFibGUiKTsKICB0aGlzLmVudGVyKAogICAgewogICAgICB0eXBlOiAidGFibGUiLAogICAgICBhbGlnbjogYWxpZ24ubWFwKGZ1bmN0aW9uKGQ2KSB7CiAgICAgICAgcmV0dXJuIGQ2ID09PSAibm9uZSIgPyBudWxsIDogZDY7CiAgICAgIH0pLAogICAgICBjaGlsZHJlbjogW10KICAgIH0sCiAgICB0b2tlbgogICk7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB0cnVlOwp9CmZ1bmN0aW9uIGV4aXRUYWJsZSh0b2tlbikgewogIHRoaXMuZXhpdCh0b2tlbik7CiAgdGhpcy5kYXRhLmluVGFibGUgPSB2b2lkIDA7Cn0KZnVuY3Rpb24gZW50ZXJSb3codG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlUm93IiwgY2hpbGRyZW46IFtdIH0sIHRva2VuKTsKfQpmdW5jdGlvbiBleGl0KHRva2VuKSB7CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBlbnRlckNlbGwodG9rZW4pIHsKICB0aGlzLmVudGVyKHsgdHlwZTogInRhYmxlQ2VsbCIsIGNoaWxkcmVuOiBbXSB9LCB0b2tlbik7Cn0KZnVuY3Rpb24gZXhpdENvZGVUZXh0KHRva2VuKSB7CiAgbGV0IHZhbHVlMiA9IHRoaXMucmVzdW1lKCk7CiAgaWYgKHRoaXMuZGF0YS5pblRhYmxlKSB7CiAgICB2YWx1ZTIgPSB2YWx1ZTIucmVwbGFjZSgvXFwoW1xcfF0pL2csIHJlcGxhY2UpOwogIH0KICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvayhub2RlMi50eXBlID09PSAiaW5saW5lQ29kZSIpOwogIG5vZGUyLnZhbHVlID0gdmFsdWUyOwogIHRoaXMuZXhpdCh0b2tlbik7Cn0KZnVuY3Rpb24gcmVwbGFjZSgkMCwgJDEpIHsKICByZXR1cm4gJDEgPT09ICJ8IiA/ICQxIDogJDA7Cn0KZnVuY3Rpb24gZ2ZtVGFibGVUb01hcmtkb3duKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgcGFkZGluZyA9IHNldHRpbmdzLnRhYmxlQ2VsbFBhZGRpbmc7CiAgY29uc3QgYWxpZ25EZWxpbWl0ZXJzID0gc2V0dGluZ3MudGFibGVQaXBlQWxpZ247CiAgY29uc3Qgc3RyaW5nTGVuZ3RoID0gc2V0dGluZ3Muc3RyaW5nTGVuZ3RoOwogIGNvbnN0IGFyb3VuZCA9IHBhZGRpbmcgPyAiICIgOiAifCI7CiAgcmV0dXJuIHsKICAgIHVuc2FmZTogWwogICAgICB7IGNoYXJhY3RlcjogIlxyIiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIHsgY2hhcmFjdGVyOiAiXG4iLCBpbkNvbnN0cnVjdDogInRhYmxlQ2VsbCIgfSwKICAgICAgLy8gQSBwaXBlLCB3aGVuIGZvbGxvd2VkIGJ5IGEgdGFiIG9yIHNwYWNlIChwYWRkaW5nKSwgb3IgYSBkYXNoIG9yIGNvbG9uCiAgICAgIC8vICh1bnBhZGRlZCBkZWxpbWl0ZXIgcm93KSwgY291bGQgcmVzdWx0IGluIGEgdGFibGUuCiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAifCIsIGFmdGVyOiAiWwkgOi1dIiB9LAogICAgICAvLyBBIHBpcGUgaW4gYSBjZWxsIG11c3QgYmUgZW5jb2RlZC4KICAgICAgeyBjaGFyYWN0ZXI6ICJ8IiwgaW5Db25zdHJ1Y3Q6ICJ0YWJsZUNlbGwiIH0sCiAgICAgIC8vIEEgY29sb24gbXVzdCBiZSBmb2xsb3dlZCBieSBhIGRhc2gsIGluIHdoaWNoIGNhc2UgaXQgY291bGQgc3RhcnQgYQogICAgICAvLyBkZWxpbWl0ZXIgcm93LgogICAgICB7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIjoiLCBhZnRlcjogIi0iIH0sCiAgICAgIC8vIEEgZGVsaW1pdGVyIHJvdyBjYW4gYWxzbyBzdGFydCB3aXRoIGEgZGFzaCwgd2hlbiBmb2xsb3dlZCBieSBtb3JlCiAgICAgIC8vIGRhc2hlcywgYSBjb2xvbiwgb3IgYSBwaXBlLgogICAgICAvLyBUaGlzIGlzIGEgc3RyaWN0ZXIgdmVyc2lvbiB0aGFuIHRoZSBidWlsdCBpbiBjaGVjayBmb3IgbGlzdHMsIHRoZW1hdGljCiAgICAgIC8vIGJyZWFrcywgYW5kIHNldGV4IGhlYWRpbmcgdW5kZXJsaW5lcyB0aG91Z2g6CiAgICAgIC8vIDxodHRwczovL2dpdGh1Yi5jb20vc3ludGF4LXRyZWUvbWRhc3QtdXRpbC10by1tYXJrZG93bi9ibG9iLzUxYTIwMzgvbGliL3Vuc2FmZS5qcyNMNTc+CiAgICAgIHsgYXRCcmVhazogdHJ1ZSwgY2hhcmFjdGVyOiAiLSIsIGFmdGVyOiAiWzp8LV0iIH0KICAgIF0sCiAgICBoYW5kbGVyczogewogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlV2l0aFRhYmxlLAogICAgICB0YWJsZTogaGFuZGxlVGFibGUsCiAgICAgIHRhYmxlQ2VsbDogaGFuZGxlVGFibGVDZWxsLAogICAgICB0YWJsZVJvdzogaGFuZGxlVGFibGVSb3cKICAgIH0KICB9OwogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgcmV0dXJuIHNlcmlhbGl6ZURhdGEoaGFuZGxlVGFibGVBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pLCBub2RlMi5hbGlnbik7CiAgfQogIGZ1bmN0aW9uIGhhbmRsZVRhYmxlUm93KG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3Qgcm93ID0gaGFuZGxlVGFibGVSb3dBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pOwogICAgY29uc3QgdmFsdWUyID0gc2VyaWFsaXplRGF0YShbcm93XSk7CiAgICByZXR1cm4gdmFsdWUyLnNsaWNlKDAsIHZhbHVlMi5pbmRleE9mKCJcbiIpKTsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVDZWxsKG5vZGUyLCBfNCwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3QgZXhpdDMgPSBzdGF0ZTEyLmVudGVyKCJ0YWJsZUNlbGwiKTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJwaHJhc2luZyIpOwogICAgY29uc3QgdmFsdWUyID0gc3RhdGUxMi5jb250YWluZXJQaHJhc2luZyhub2RlMiwgewogICAgICAuLi5pbmZvLAogICAgICBiZWZvcmU6IGFyb3VuZCwKICAgICAgYWZ0ZXI6IGFyb3VuZAogICAgfSk7CiAgICBzdWJleGl0KCk7CiAgICBleGl0MygpOwogICAgcmV0dXJuIHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gc2VyaWFsaXplRGF0YShtYXRyaXgsIGFsaWduKSB7CiAgICByZXR1cm4gbWFya2Rvd25UYWJsZShtYXRyaXgsIHsKICAgICAgYWxpZ24sCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLgogICAgICBhbGlnbkRlbGltaXRlcnMsCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBtYXJrZG93bi10YWJsZWAgdHlwZXMgc2hvdWxkIHN1cHBvcnQgYG51bGxgLgogICAgICBwYWRkaW5nLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBgbWFya2Rvd24tdGFibGVgIHR5cGVzIHNob3VsZCBzdXBwb3J0IGBudWxsYC4KICAgICAgc3RyaW5nTGVuZ3RoCiAgICB9KTsKICB9CiAgZnVuY3Rpb24gaGFuZGxlVGFibGVBc0RhdGEobm9kZTIsIHN0YXRlMTIsIGluZm8pIHsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gW107CiAgICBjb25zdCBzdWJleGl0ID0gc3RhdGUxMi5lbnRlcigidGFibGUiKTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgcmVzdWx0W2luZGV4Ml0gPSBoYW5kbGVUYWJsZVJvd0FzRGF0YShjaGlsZHJlbjJbaW5kZXgyXSwgc3RhdGUxMiwgaW5mbyk7CiAgICB9CiAgICBzdWJleGl0KCk7CiAgICByZXR1cm4gcmVzdWx0OwogIH0KICBmdW5jdGlvbiBoYW5kbGVUYWJsZVJvd0FzRGF0YShub2RlMiwgc3RhdGUxMiwgaW5mbykgewogICAgY29uc3QgY2hpbGRyZW4yID0gbm9kZTIuY2hpbGRyZW47CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBjb25zdCByZXN1bHQgPSBbXTsKICAgIGNvbnN0IHN1YmV4aXQgPSBzdGF0ZTEyLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgICByZXN1bHRbaW5kZXgyXSA9IGhhbmRsZVRhYmxlQ2VsbChjaGlsZHJlbjJbaW5kZXgyXSwgbm9kZTIsIHN0YXRlMTIsIGluZm8pOwogICAgfQogICAgc3ViZXhpdCgpOwogICAgcmV0dXJuIHJlc3VsdDsKICB9CiAgZnVuY3Rpb24gaW5saW5lQ29kZVdpdGhUYWJsZShub2RlMiwgcGFyZW50LCBzdGF0ZTEyKSB7CiAgICBsZXQgdmFsdWUyID0gaGFuZGxlLmlubGluZUNvZGUobm9kZTIsIHBhcmVudCwgc3RhdGUxMik7CiAgICBpZiAoc3RhdGUxMi5zdGFjay5pbmNsdWRlcygidGFibGVDZWxsIikpIHsKICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1x8L2csICJcXCQmIik7CiAgICB9CiAgICByZXR1cm4gdmFsdWUyOwogIH0KfQp2YXIgaW5pdF9saWIxNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21hcmtkb3duX3RhYmxlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbV90YWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtLXRhYmxlQDIuMC4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS10YWJsZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE2KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhc2tMaXN0SXRlbUZyb21NYXJrZG93bigpIHsKICByZXR1cm4gewogICAgZXhpdDogewogICAgICB0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkOiBleGl0Q2hlY2ssCiAgICAgIHRhc2tMaXN0Q2hlY2tWYWx1ZVVuY2hlY2tlZDogZXhpdENoZWNrLAogICAgICBwYXJhZ3JhcGg6IGV4aXRQYXJhZ3JhcGhXaXRoVGFza0xpc3RJdGVtCiAgICB9CiAgfTsKfQpmdW5jdGlvbiBnZm1UYXNrTGlzdEl0ZW1Ub01hcmtkb3duKCkgewogIHJldHVybiB7CiAgICB1bnNhZmU6IFt7IGF0QnJlYWs6IHRydWUsIGNoYXJhY3RlcjogIi0iLCBhZnRlcjogIls6fC1dIiB9XSwKICAgIGhhbmRsZXJzOiB7IGxpc3RJdGVtOiBsaXN0SXRlbVdpdGhUYXNrTGlzdEl0ZW0gfQogIH07Cn0KZnVuY3Rpb24gZXhpdENoZWNrKHRva2VuKSB7CiAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMl07CiAgb2sobm9kZTIudHlwZSA9PT0gImxpc3RJdGVtIik7CiAgbm9kZTIuY2hlY2tlZCA9IHRva2VuLnR5cGUgPT09ICJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIjsKfQpmdW5jdGlvbiBleGl0UGFyYWdyYXBoV2l0aFRhc2tMaXN0SXRlbSh0b2tlbikgewogIGNvbnN0IHBhcmVudCA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICBpZiAocGFyZW50ICYmIHBhcmVudC50eXBlID09PSAibGlzdEl0ZW0iICYmIHR5cGVvZiBwYXJlbnQuY2hlY2tlZCA9PT0gImJvb2xlYW4iKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG9rKG5vZGUyLnR5cGUgPT09ICJwYXJhZ3JhcGgiKTsKICAgIGNvbnN0IGhlYWQyID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICAgIGNvbnN0IHNpYmxpbmdzMiA9IHBhcmVudC5jaGlsZHJlbjsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICBsZXQgZmlyc3RQYXJhZ2hyYXBoOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBzaWJsaW5nczIubGVuZ3RoKSB7CiAgICAgICAgY29uc3Qgc2libGluZyA9IHNpYmxpbmdzMltpbmRleDJdOwogICAgICAgIGlmIChzaWJsaW5nLnR5cGUgPT09ICJwYXJhZ3JhcGgiKSB7CiAgICAgICAgICBmaXJzdFBhcmFnaHJhcGggPSBzaWJsaW5nOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaXJzdFBhcmFnaHJhcGggPT09IG5vZGUyKSB7CiAgICAgICAgaGVhZDIudmFsdWUgPSBoZWFkMi52YWx1ZS5zbGljZSgxKTsKICAgICAgICBpZiAoaGVhZDIudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICBub2RlMi5jaGlsZHJlbi5zaGlmdCgpOwogICAgICAgIH0gZWxzZSBpZiAobm9kZTIucG9zaXRpb24gJiYgaGVhZDIucG9zaXRpb24gJiYgdHlwZW9mIGhlYWQyLnBvc2l0aW9uLnN0YXJ0Lm9mZnNldCA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIGhlYWQyLnBvc2l0aW9uLnN0YXJ0LmNvbHVtbisrOwogICAgICAgICAgaGVhZDIucG9zaXRpb24uc3RhcnQub2Zmc2V0Kys7CiAgICAgICAgICBub2RlMi5wb3NpdGlvbi5zdGFydCA9IE9iamVjdC5hc3NpZ24oe30sIGhlYWQyLnBvc2l0aW9uLnN0YXJ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgdGhpcy5leGl0KHRva2VuKTsKfQpmdW5jdGlvbiBsaXN0SXRlbVdpdGhUYXNrTGlzdEl0ZW0obm9kZTIsIHBhcmVudCwgc3RhdGUxMiwgaW5mbykgewogIGNvbnN0IGhlYWQyID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgY29uc3QgY2hlY2thYmxlID0gdHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIiAmJiBoZWFkMiAmJiBoZWFkMi50eXBlID09PSAicGFyYWdyYXBoIjsKICBjb25zdCBjaGVja2JveCA9ICJbIiArIChub2RlMi5jaGVja2VkID8gIngiIDogIiAiKSArICJdICI7CiAgY29uc3QgdHJhY2tlciA9IHN0YXRlMTIuY3JlYXRlVHJhY2tlcihpbmZvKTsKICBpZiAoY2hlY2thYmxlKSB7CiAgICB0cmFja2VyLm1vdmUoY2hlY2tib3gpOwogIH0KICBsZXQgdmFsdWUyID0gaGFuZGxlLmxpc3RJdGVtKG5vZGUyLCBwYXJlbnQsIHN0YXRlMTIsIHsKICAgIC4uLmluZm8sCiAgICAuLi50cmFja2VyLmN1cnJlbnQoKQogIH0pOwogIGlmIChjaGVja2FibGUpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKC9eKD86WyorLV18XGQrXC4pKFtcclxuXXwgezEsM30pLywgY2hlY2spOwogIH0KICByZXR1cm4gdmFsdWUyOwogIGZ1bmN0aW9uIGNoZWNrKCQwKSB7CiAgICByZXR1cm4gJDAgKyBjaGVja2JveDsKICB9Cn0KdmFyIGluaXRfbGliMTcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGVmYXVsdCgpOwogICAgaW5pdF9tZGFzdF91dGlsX3RvX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFza19saXN0X2l0ZW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWdmbS10YXNrLWxpc3QtaXRlbUAyLjAuMC9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1nZm0tdGFzay1saXN0LWl0ZW0vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIxNygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1nZm1AMy4xLjAvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZ2ZtL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBnZm1Gcm9tTWFya2Rvd24oKSB7CiAgcmV0dXJuIFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbEZyb21NYXJrZG93bigpLAogICAgZ2ZtRm9vdG5vdGVGcm9tTWFya2Rvd24oKSwKICAgIGdmbVN0cmlrZXRocm91Z2hGcm9tTWFya2Rvd24oKSwKICAgIGdmbVRhYmxlRnJvbU1hcmtkb3duKCksCiAgICBnZm1UYXNrTGlzdEl0ZW1Gcm9tTWFya2Rvd24oKQogIF07Cn0KZnVuY3Rpb24gZ2ZtVG9NYXJrZG93bihvcHRpb25zKSB7CiAgcmV0dXJuIHsKICAgIGV4dGVuc2lvbnM6IFsKICAgICAgZ2ZtQXV0b2xpbmtMaXRlcmFsVG9NYXJrZG93bigpLAogICAgICBnZm1Gb290bm90ZVRvTWFya2Rvd24ob3B0aW9ucyksCiAgICAgIGdmbVN0cmlrZXRocm91Z2hUb01hcmtkb3duKCksCiAgICAgIGdmbVRhYmxlVG9NYXJrZG93bihvcHRpb25zKSwKICAgICAgZ2ZtVGFza0xpc3RJdGVtVG9NYXJrZG93bigpCiAgICBdCiAgfTsKfQp2YXIgaW5pdF9saWIxOCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2dmbV9hdXRvbGlua19saXRlcmFsKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX2Zvb3Rub3RlKCk7CiAgICBpbml0X21kYXN0X3V0aWxfZ2ZtX3N0cmlrZXRocm91Z2goKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFibGUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF9nZm1fdGFza19saXN0X2l0ZW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9pbmRleC5qcwp2YXIgaW5pdF9tZGFzdF91dGlsX2dmbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZ2ZtQDMuMS4wL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jaHVua2VkQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1jaHVua2VkL2luZGV4LmpzCmZ1bmN0aW9uIHNwbGljZShsaXN0NSwgc3RhcnQsIHJlbW92ZTIsIGl0ZW1zKSB7CiAgY29uc3QgZW5kMyA9IGxpc3Q1Lmxlbmd0aDsKICBsZXQgY2h1bmtTdGFydCA9IDA7CiAgbGV0IHBhcmFtZXRlcnM7CiAgaWYgKHN0YXJ0IDwgMCkgewogICAgc3RhcnQgPSAtc3RhcnQgPiBlbmQzID8gMCA6IGVuZDMgKyBzdGFydDsKICB9IGVsc2UgewogICAgc3RhcnQgPSBzdGFydCA+IGVuZDMgPyBlbmQzIDogc3RhcnQ7CiAgfQogIHJlbW92ZTIgPSByZW1vdmUyID4gMCA/IHJlbW92ZTIgOiAwOwogIGlmIChpdGVtcy5sZW5ndGggPCAxZTQpIHsKICAgIHBhcmFtZXRlcnMgPSBBcnJheS5mcm9tKGl0ZW1zKTsKICAgIHBhcmFtZXRlcnMudW5zaGlmdChzdGFydCwgcmVtb3ZlMik7CiAgICBsaXN0NS5zcGxpY2UoLi4ucGFyYW1ldGVycyk7CiAgfSBlbHNlIHsKICAgIGlmIChyZW1vdmUyKSBsaXN0NS5zcGxpY2Uoc3RhcnQsIHJlbW92ZTIpOwogICAgd2hpbGUgKGNodW5rU3RhcnQgPCBpdGVtcy5sZW5ndGgpIHsKICAgICAgcGFyYW1ldGVycyA9IGl0ZW1zLnNsaWNlKGNodW5rU3RhcnQsIGNodW5rU3RhcnQgKyAxZTQpOwogICAgICBwYXJhbWV0ZXJzLnVuc2hpZnQoc3RhcnQsIDApOwogICAgICBsaXN0NS5zcGxpY2UoLi4ucGFyYW1ldGVycyk7CiAgICAgIGNodW5rU3RhcnQgKz0gMWU0OwogICAgICBzdGFydCArPSAxZTQ7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHB1c2gobGlzdDUsIGl0ZW1zKSB7CiAgaWYgKGxpc3Q1Lmxlbmd0aCA+IDApIHsKICAgIHNwbGljZShsaXN0NSwgbGlzdDUubGVuZ3RoLCAwLCBpdGVtcyk7CiAgICByZXR1cm4gbGlzdDU7CiAgfQogIHJldHVybiBpdGVtczsKfQp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtY2h1bmtlZEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY2h1bmtlZC9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1jb21iaW5lLWV4dGVuc2lvbnNAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9ucy9pbmRleC5qcwpmdW5jdGlvbiBjb21iaW5lRXh0ZW5zaW9ucyhleHRlbnNpb25zKSB7CiAgY29uc3QgYWxsMyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBleHRlbnNpb25zLmxlbmd0aCkgewogICAgc3ludGF4RXh0ZW5zaW9uKGFsbDMsIGV4dGVuc2lvbnNbaW5kZXgyXSk7CiAgfQogIHJldHVybiBhbGwzOwp9CmZ1bmN0aW9uIHN5bnRheEV4dGVuc2lvbihhbGwzLCBleHRlbnNpb24yKSB7CiAgbGV0IGhvb2s7CiAgZm9yIChob29rIGluIGV4dGVuc2lvbjIpIHsKICAgIGNvbnN0IG1heWJlID0gaGFzT3duUHJvcGVydHkuY2FsbChhbGwzLCBob29rKSA/IGFsbDNbaG9va10gOiB2b2lkIDA7CiAgICBjb25zdCBsZWZ0ID0gbWF5YmUgfHwgKGFsbDNbaG9va10gPSB7fSk7CiAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJbaG9va107CiAgICBsZXQgY29kZTQ7CiAgICBpZiAocmlnaHQpIHsKICAgICAgZm9yIChjb2RlNCBpbiByaWdodCkgewogICAgICAgIGlmICghaGFzT3duUHJvcGVydHkuY2FsbChsZWZ0LCBjb2RlNCkpIGxlZnRbY29kZTRdID0gW107CiAgICAgICAgY29uc3QgdmFsdWUyID0gcmlnaHRbY29kZTRdOwogICAgICAgIGNvbnN0cnVjdHMoCiAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIExvb2tzIGxpa2UgYSBsaXN0LgogICAgICAgICAgbGVmdFtjb2RlNF0sCiAgICAgICAgICBBcnJheS5pc0FycmF5KHZhbHVlMikgPyB2YWx1ZTIgOiB2YWx1ZTIgPyBbdmFsdWUyXSA6IFtdCiAgICAgICAgKTsKICAgICAgfQogICAgfQogIH0KfQpmdW5jdGlvbiBjb25zdHJ1Y3RzKGV4aXN0aW5nLCBsaXN0NSkgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBiZWZvcmUgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCBsaXN0NS5sZW5ndGgpIHsKICAgIDsKICAgIChsaXN0NVtpbmRleDJdLmFkZCA9PT0gImFmdGVyIiA/IGV4aXN0aW5nIDogYmVmb3JlKS5wdXNoKGxpc3Q1W2luZGV4Ml0pOwogIH0KICBzcGxpY2UoZXhpc3RpbmcsIDAsIDAsIGJlZm9yZSk7Cn0KZnVuY3Rpb24gY29tYmluZUh0bWxFeHRlbnNpb25zKGh0bWxFeHRlbnNpb25zKSB7CiAgY29uc3QgaGFuZGxlcnMyID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGh0bWxFeHRlbnNpb25zLmxlbmd0aCkgewogICAgaHRtbEV4dGVuc2lvbihoYW5kbGVyczIsIGh0bWxFeHRlbnNpb25zW2luZGV4Ml0pOwogIH0KICByZXR1cm4gaGFuZGxlcnMyOwp9CmZ1bmN0aW9uIGh0bWxFeHRlbnNpb24oYWxsMywgZXh0ZW5zaW9uMikgewogIGxldCBob29rOwogIGZvciAoaG9vayBpbiBleHRlbnNpb24yKSB7CiAgICBjb25zdCBtYXliZSA9IGhhc093blByb3BlcnR5LmNhbGwoYWxsMywgaG9vaykgPyBhbGwzW2hvb2tdIDogdm9pZCAwOwogICAgY29uc3QgbGVmdCA9IG1heWJlIHx8IChhbGwzW2hvb2tdID0ge30pOwogICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2hvb2tdOwogICAgbGV0IHR5cGU1OwogICAgaWYgKHJpZ2h0KSB7CiAgICAgIGZvciAodHlwZTUgaW4gcmlnaHQpIHsKICAgICAgICBsZWZ0W3R5cGU1XSA9IHJpZ2h0W3R5cGU1XTsKICAgICAgfQogICAgfQogIH0KfQp2YXIgaGFzT3duUHJvcGVydHk7CnZhciBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWNvbWJpbmUtZXh0ZW5zaW9uc0AyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtY29tYmluZS1leHRlbnNpb25zL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaGFzT3duUHJvcGVydHkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWwoKSB7CiAgcmV0dXJuIHsKICAgIHRleHQ6IHRleHQyCiAgfTsKfQpmdW5jdGlvbiB0b2tlbml6ZUVtYWlsQXV0b2xpbmsoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGRvdDsKICBsZXQgZGF0YTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmICghZ2ZtQXRleHQoY29kZTQpIHx8ICFwcmV2aW91c0VtYWlsLmNhbGwoc2VsZjIsIHNlbGYyLnByZXZpb3VzKSB8fCBwcmV2aW91c1VuYmFsYW5jZWQoc2VsZjIuZXZlbnRzKSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpOwogICAgZWZmZWN0cy5lbnRlcigibGl0ZXJhbEF1dG9saW5rRW1haWwiKTsKICAgIHJldHVybiBhdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0ZXh0KGNvZGU0KSB7CiAgICBpZiAoZ2ZtQXRleHQoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBhdGV4dDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsRG9tYWluOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVtYWlsRG9tYWluKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ2KSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGVtYWlsRG9tYWluRG90VHJhaWwsIGVtYWlsRG9tYWluQWZ0ZXIsIGVtYWlsRG9tYWluRG90KShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBlbWFpbERvbWFpbjsKICAgIH0KICAgIHJldHVybiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxEb21haW5Eb3QoY29kZTQpIHsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBkb3QgPSB0cnVlOwogICAgcmV0dXJuIGVtYWlsRG9tYWluOwogIH0KICBmdW5jdGlvbiBlbWFpbERvbWFpbkFmdGVyKGNvZGU0KSB7CiAgICBpZiAoZGF0YSAmJiBkb3QgJiYgYXNjaWlBbHBoYShzZWxmMi5wcmV2aW91cykpIHsKICAgICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmtFbWFpbCIpOwogICAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVd3d0F1dG9saW5rKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiB3d3dTdGFydDsKICBmdW5jdGlvbiB3d3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ICE9PSA4NyAmJiBjb2RlNCAhPT0gMTE5IHx8ICFwcmV2aW91c1d3dy5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgfHwgcHJldmlvdXNVbmJhbGFuY2VkKHNlbGYyLmV2ZW50cykpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmsiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGlua1d3dyIpOwogICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sod3d3UHJlZml4LCBlZmZlY3RzLmF0dGVtcHQoZG9tYWluLCBlZmZlY3RzLmF0dGVtcHQocGF0aCwgd3d3QWZ0ZXIpLCBub2spLCBub2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gd3d3QWZ0ZXIoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgibGl0ZXJhbEF1dG9saW5rV3d3Iik7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUHJvdG9jb2xBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgYnVmZmVyMiA9ICIiOwogIGxldCBzZWVuID0gZmFsc2U7CiAgcmV0dXJuIHByb3RvY29sU3RhcnQ7CiAgZnVuY3Rpb24gcHJvdG9jb2xTdGFydChjb2RlNCkgewogICAgaWYgKChjb2RlNCA9PT0gNzIgfHwgY29kZTQgPT09IDEwNCkgJiYgcHJldmlvdXNQcm90b2NvbC5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykgJiYgIXByZXZpb3VzVW5iYWxhbmNlZChzZWxmMi5ldmVudHMpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpdGVyYWxBdXRvbGluayIpOwogICAgICBlZmZlY3RzLmVudGVyKCJsaXRlcmFsQXV0b2xpbmtIdHRwIik7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21Db2RlUG9pbnQoY29kZTQpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJvdG9jb2xQcmVmaXhJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xQcmVmaXhJbnNpZGUoY29kZTQpIHsKICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSAmJiBidWZmZXIyLmxlbmd0aCA8IDUpIHsKICAgICAgYnVmZmVyMiArPSBTdHJpbmcuZnJvbUNvZGVQb2ludChjb2RlNCk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwcm90b2NvbFByZWZpeEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgY29uc3QgcHJvdG9jb2wgPSBidWZmZXIyLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmIChwcm90b2NvbCA9PT0gImh0dHAiIHx8IHByb3RvY29sID09PSAiaHR0cHMiKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gcHJvdG9jb2xTbGFzaGVzSW5zaWRlOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xTbGFzaGVzSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGlmIChzZWVuKSB7CiAgICAgICAgcmV0dXJuIGFmdGVyUHJvdG9jb2w7CiAgICAgIH0KICAgICAgc2VlbiA9IHRydWU7CiAgICAgIHJldHVybiBwcm90b2NvbFNsYXNoZXNJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJQcm90b2NvbChjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IGFzY2lpQ29udHJvbChjb2RlNCkgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpIHx8IHVuaWNvZGVQdW5jdHVhdGlvbihjb2RlNCkgPyBub2soY29kZTQpIDogZWZmZWN0cy5hdHRlbXB0KGRvbWFpbiwgZWZmZWN0cy5hdHRlbXB0KHBhdGgsIHByb3RvY29sQWZ0ZXIpLCBub2spKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcHJvdG9jb2xBZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJsaXRlcmFsQXV0b2xpbmtIdHRwIik7CiAgICBlZmZlY3RzLmV4aXQoImxpdGVyYWxBdXRvbGluayIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplV3d3UHJlZml4KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiB3d3dQcmVmaXhJbnNpZGU7CiAgZnVuY3Rpb24gd3d3UHJlZml4SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoKGNvZGU0ID09PSA4NyB8fCBjb2RlNCA9PT0gMTE5KSAmJiBzaXplIDwgMykgewogICAgICBzaXplKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB3d3dQcmVmaXhJbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ2ICYmIHNpemUgPT09IDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHd3d1ByZWZpeEFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHd3d1ByZWZpeEFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEb21haW4oZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgdW5kZXJzY29yZUluTGFzdFNlZ21lbnQ7CiAgbGV0IHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudDsKICBsZXQgc2VlbjsKICByZXR1cm4gZG9tYWluSW5zaWRlOwogIGZ1bmN0aW9uIGRvbWFpbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gOTUpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuY2hlY2sodHJhaWwsIGRvbWFpbkFmdGVyLCBkb21haW5BdFB1bmN0dWF0aW9uKShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpIHx8IGNvZGU0ICE9PSA0NSAmJiB1bmljb2RlUHVuY3R1YXRpb24oY29kZTQpKSB7CiAgICAgIHJldHVybiBkb21haW5BZnRlcihjb2RlNCk7CiAgICB9CiAgICBzZWVuID0gdHJ1ZTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZG9tYWluSW5zaWRlOwogIH0KICBmdW5jdGlvbiBkb21haW5BdFB1bmN0dWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk1KSB7CiAgICAgIHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50ID0gdHJ1ZTsKICAgIH0gZWxzZSB7CiAgICAgIHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudCA9IHVuZGVyc2NvcmVJbkxhc3RTZWdtZW50OwogICAgICB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCA9IHZvaWQgMDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZG9tYWluSW5zaWRlOwogIH0KICBmdW5jdGlvbiBkb21haW5BZnRlcihjb2RlNCkgewogICAgaWYgKHVuZGVyc2NvcmVJbkxhc3RMYXN0U2VnbWVudCB8fCB1bmRlcnNjb3JlSW5MYXN0U2VnbWVudCB8fCAhc2VlbikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVBhdGgoZWZmZWN0cywgb2szKSB7CiAgbGV0IHNpemVPcGVuID0gMDsKICBsZXQgc2l6ZUNsb3NlID0gMDsKICByZXR1cm4gcGF0aEluc2lkZTsKICBmdW5jdGlvbiBwYXRoSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQwKSB7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBwYXRoSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0MSAmJiBzaXplQ2xvc2UgPCBzaXplT3BlbikgewogICAgICByZXR1cm4gcGF0aEF0UHVuY3R1YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzMyB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM4IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDQyIHx8IGNvZGU0ID09PSA0NCB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA1OSB8fCBjb2RlNCA9PT0gNjAgfHwgY29kZTQgPT09IDYzIHx8IGNvZGU0ID09PSA5MyB8fCBjb2RlNCA9PT0gOTUgfHwgY29kZTQgPT09IDEyNikgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh0cmFpbCwgb2szLCBwYXRoQXRQdW5jdHVhdGlvbikoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gcGF0aEluc2lkZTsKICB9CiAgZnVuY3Rpb24gcGF0aEF0UHVuY3R1YXRpb24oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgc2l6ZUNsb3NlKys7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHBhdGhJbnNpZGU7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplVHJhaWwoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gdHJhaWwyOwogIGZ1bmN0aW9uIHRyYWlsMihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMyB8fCBjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0MSB8fCBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDQ0IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDU5IHx8IGNvZGU0ID09PSA2MyB8fCBjb2RlNCA9PT0gOTUgfHwgY29kZTQgPT09IDEyNikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWwyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzOCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWxDaGFyYWN0ZXJSZWZlcmVuY2VTdGFydDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRyYWlsQnJhY2tldEFmdGVyOwogICAgfQogICAgaWYgKAogICAgICAvLyBgPGAgaXMgYW4gZW5kLgogICAgICBjb2RlNCA9PT0gNjAgfHwgLy8gU28gaXMgd2hpdGVzcGFjZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgfHwgdW5pY29kZVdoaXRlc3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdHJhaWxCcmFja2V0QWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDAgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpIHx8IHVuaWNvZGVXaGl0ZXNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiB0cmFpbDIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZVN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gYXNjaWlBbHBoYShjb2RlNCkgPyB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdHJhaWwyOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0cmFpbENoYXJhY3RlclJlZmVyZW5jZUluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUVtYWlsRG9tYWluRG90VHJhaWwoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gYWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHByZXZpb3VzV3d3KGNvZGU0KSB7CiAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA0MCB8fCBjb2RlNCA9PT0gNDIgfHwgY29kZTQgPT09IDk1IHx8IGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTMgfHwgY29kZTQgPT09IDEyNiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c1Byb3RvY29sKGNvZGU0KSB7CiAgcmV0dXJuICFhc2NpaUFscGhhKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c0VtYWlsKGNvZGU0KSB7CiAgcmV0dXJuICEoY29kZTQgPT09IDQ3IHx8IGdmbUF0ZXh0KGNvZGU0KSk7Cn0KZnVuY3Rpb24gZ2ZtQXRleHQoY29kZTQpIHsKICByZXR1cm4gY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KTsKfQpmdW5jdGlvbiBwcmV2aW91c1VuYmFsYW5jZWQoZXZlbnRzKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IHJlc3VsdCA9IGZhbHNlOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3QgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmICgodG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsSW1hZ2UiKSAmJiAhdG9rZW4uX2JhbGFuY2VkKSB7CiAgICAgIHJlc3VsdCA9IHRydWU7CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHRva2VuLl9nZm1BdXRvbGlua0xpdGVyYWxXYWxrZWRJbnRvKSB7CiAgICAgIHJlc3VsdCA9IGZhbHNlOwogICAgICBicmVhazsKICAgIH0KICB9CiAgaWYgKGV2ZW50cy5sZW5ndGggPiAwICYmICFyZXN1bHQpIHsKICAgIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uX2dmbUF1dG9saW5rTGl0ZXJhbFdhbGtlZEludG8gPSB0cnVlOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CnZhciB3d3dQcmVmaXgsIGRvbWFpbiwgcGF0aCwgdHJhaWwsIGVtYWlsRG9tYWluRG90VHJhaWwsIHd3d0F1dG9saW5rLCBwcm90b2NvbEF1dG9saW5rLCBlbWFpbEF1dG9saW5rLCB0ZXh0MiwgY29kZTI7CnZhciBpbml0X3N5bnRheCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWxAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWF1dG9saW5rLWxpdGVyYWwvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgd3d3UHJlZml4ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVXd3dQcmVmaXgsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBkb21haW4gPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZURvbWFpbiwKICAgICAgcGFydGlhbDogdHJ1ZQogICAgfTsKICAgIHBhdGggPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVBhdGgsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICB0cmFpbCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplVHJhaWwsCiAgICAgIHBhcnRpYWw6IHRydWUKICAgIH07CiAgICBlbWFpbERvbWFpbkRvdFRyYWlsID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVFbWFpbERvbWFpbkRvdFRyYWlsLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogICAgd3d3QXV0b2xpbmsgPSB7CiAgICAgIG5hbWU6ICJ3d3dBdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVd3d0F1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNXd3cKICAgIH07CiAgICBwcm90b2NvbEF1dG9saW5rID0gewogICAgICBuYW1lOiAicHJvdG9jb2xBdXRvbGluayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVByb3RvY29sQXV0b2xpbmssCiAgICAgIHByZXZpb3VzOiBwcmV2aW91c1Byb3RvY29sCiAgICB9OwogICAgZW1haWxBdXRvbGluayA9IHsKICAgICAgbmFtZTogImVtYWlsQXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVFbWFpbEF1dG9saW5rLAogICAgICBwcmV2aW91czogcHJldmlvdXNFbWFpbAogICAgfTsKICAgIHRleHQyID0ge307CiAgICBjb2RlMiA9IDQ4OwogICAgd2hpbGUgKGNvZGUyIDwgMTIzKSB7CiAgICAgIHRleHQyW2NvZGUyXSA9IGVtYWlsQXV0b2xpbms7CiAgICAgIGNvZGUyKys7CiAgICAgIGlmIChjb2RlMiA9PT0gNTgpIGNvZGUyID0gNjU7CiAgICAgIGVsc2UgaWYgKGNvZGUyID09PSA5MSkgY29kZTIgPSA5NzsKICAgIH0KICAgIHRleHQyWzQzXSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls0NV0gPSBlbWFpbEF1dG9saW5rOwogICAgdGV4dDJbNDZdID0gZW1haWxBdXRvbGluazsKICAgIHRleHQyWzk1XSA9IGVtYWlsQXV0b2xpbms7CiAgICB0ZXh0Mls3Ml0gPSBbZW1haWxBdXRvbGluaywgcHJvdG9jb2xBdXRvbGlua107CiAgICB0ZXh0MlsxMDRdID0gW2VtYWlsQXV0b2xpbmssIHByb3RvY29sQXV0b2xpbmtdOwogICAgdGV4dDJbODddID0gW2VtYWlsQXV0b2xpbmssIHd3d0F1dG9saW5rXTsKICAgIHRleHQyWzExOV0gPSBbZW1haWxBdXRvbGluaywgd3d3QXV0b2xpbmtdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtZW5jb2RlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstdXRpbC1lbmNvZGUvaW5kZXguanMKZnVuY3Rpb24gZW5jb2RlKHZhbHVlMikgewogIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvWyImPD5dL2csIHJlcGxhY2U1KTsKICBmdW5jdGlvbiByZXBsYWNlNSh2YWx1ZTMpIHsKICAgIHJldHVybiAiJiIgKyBjaGFyYWN0ZXJSZWZlcmVuY2VzWwogICAgICAvKiogQHR5cGUge2tleW9mIHR5cGVvZiBjaGFyYWN0ZXJSZWZlcmVuY2VzfSAqLwogICAgICB2YWx1ZTMKICAgIF0gKyAiOyI7CiAgfQp9CnZhciBjaGFyYWN0ZXJSZWZlcmVuY2VzOwp2YXIgaW5pdF9taWNyb21hcmtfdXRpbF9lbmNvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1lbmNvZGVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWVuY29kZS9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJSZWZlcmVuY2VzID0geyAnIic6ICJxdW90IiwgIiYiOiAiYW1wIiwgIjwiOiAibHQiLCAiPiI6ICJndCIgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpL2luZGV4LmpzCmZ1bmN0aW9uIHNhbml0aXplVXJpKHVybCwgcHJvdG9jb2wpIHsKICBjb25zdCB2YWx1ZTIgPSBlbmNvZGUobm9ybWFsaXplVXJpKHVybCB8fCAiIikpOwogIGlmICghcHJvdG9jb2wpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIGNvbnN0IGNvbG9uID0gdmFsdWUyLmluZGV4T2YoIjoiKTsKICBjb25zdCBxdWVzdGlvbk1hcmsgPSB2YWx1ZTIuaW5kZXhPZigiPyIpOwogIGNvbnN0IG51bWJlclNpZ24gPSB2YWx1ZTIuaW5kZXhPZigiIyIpOwogIGNvbnN0IHNsYXNoID0gdmFsdWUyLmluZGV4T2YoIi8iKTsKICBpZiAoCiAgICAvLyBJZiB0aGVyZSBpcyBubyBwcm90b2NvbCwgaXTigJlzIHJlbGF0aXZlLgogICAgY29sb24gPCAwIHx8IC8vIElmIHRoZSBmaXJzdCBjb2xvbiBpcyBhZnRlciBhIGA/YCwgYCNgLCBvciBgL2AsIGl04oCZcyBub3QgYSBwcm90b2NvbC4KICAgIHNsYXNoID4gLTEgJiYgY29sb24gPiBzbGFzaCB8fCBxdWVzdGlvbk1hcmsgPiAtMSAmJiBjb2xvbiA+IHF1ZXN0aW9uTWFyayB8fCBudW1iZXJTaWduID4gLTEgJiYgY29sb24gPiBudW1iZXJTaWduIHx8IC8vIEl0IGlzIGEgcHJvdG9jb2wsIGl0IHNob3VsZCBiZSBhbGxvd2VkLgogICAgcHJvdG9jb2wudGVzdCh2YWx1ZTIuc2xpY2UoMCwgY29sb24pKQogICkgewogICAgcmV0dXJuIHZhbHVlMjsKICB9CiAgcmV0dXJuICIiOwp9CmZ1bmN0aW9uIG5vcm1hbGl6ZVVyaSh2YWx1ZTIpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IHN0YXJ0ID0gMDsKICBsZXQgc2tpcDIgPSAwOwogIHdoaWxlICgrK2luZGV4MiA8IHZhbHVlMi5sZW5ndGgpIHsKICAgIGNvbnN0IGNvZGU0ID0gdmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyKTsKICAgIGxldCByZXBsYWNlNSA9ICIiOwogICAgaWYgKGNvZGU0ID09PSAzNyAmJiBhc2NpaUFscGhhbnVtZXJpYyh2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIgKyAxKSkgJiYgYXNjaWlBbHBoYW51bWVyaWModmFsdWUyLmNoYXJDb2RlQXQoaW5kZXgyICsgMikpKSB7CiAgICAgIHNraXAyID0gMjsKICAgIH0gZWxzZSBpZiAoY29kZTQgPCAxMjgpIHsKICAgICAgaWYgKCEvWyEjJCYtOz0/LVpfYS16fl0vLnRlc3QoU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCkpKSB7CiAgICAgICAgcmVwbGFjZTUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjb2RlNCA+IDU1Mjk1ICYmIGNvZGU0IDwgNTczNDQpIHsKICAgICAgY29uc3QgbmV4dDIgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIgKyAxKTsKICAgICAgaWYgKGNvZGU0IDwgNTYzMjAgJiYgbmV4dDIgPiA1NjMxOSAmJiBuZXh0MiA8IDU3MzQ0KSB7CiAgICAgICAgcmVwbGFjZTUgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0LCBuZXh0Mik7CiAgICAgICAgc2tpcDIgPSAxOwogICAgICB9IGVsc2UgewogICAgICAgIHJlcGxhY2U1ID0gIlx1RkZGRCI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlcGxhY2U1ID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICB9CiAgICBpZiAocmVwbGFjZTUpIHsKICAgICAgcmVzdWx0LnB1c2godmFsdWUyLnNsaWNlKHN0YXJ0LCBpbmRleDIpLCBlbmNvZGVVUklDb21wb25lbnQocmVwbGFjZTUpKTsKICAgICAgc3RhcnQgPSBpbmRleDIgKyBza2lwMiArIDE7CiAgICAgIHJlcGxhY2U1ID0gIiI7CiAgICB9CiAgICBpZiAoc2tpcDIpIHsKICAgICAgaW5kZXgyICs9IHNraXAyOwogICAgICBza2lwMiA9IDA7CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQuam9pbigiIikgKyB2YWx1ZTIuc2xpY2Uoc3RhcnQpOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLXNhbml0aXplLXVyaUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc2FuaXRpemUtdXJpL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2VuY29kZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tYXV0b2xpbmstbGl0ZXJhbC9saWIvaHRtbC5qcwpmdW5jdGlvbiBnZm1BdXRvbGlua0xpdGVyYWxIdG1sKCkgewogIHJldHVybiB7CiAgICBleGl0OiB7CiAgICAgIGxpdGVyYWxBdXRvbGlua0VtYWlsLAogICAgICBsaXRlcmFsQXV0b2xpbmtIdHRwLAogICAgICBsaXRlcmFsQXV0b2xpbmtXd3cKICAgIH0KICB9Owp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua1d3dyh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuLCAiaHR0cDovLyIpOwp9CmZ1bmN0aW9uIGxpdGVyYWxBdXRvbGlua0VtYWlsKHRva2VuKSB7CiAgYW5jaG9yRnJvbVRva2VuLmNhbGwodGhpcywgdG9rZW4sICJtYWlsdG86Iik7Cn0KZnVuY3Rpb24gbGl0ZXJhbEF1dG9saW5rSHR0cCh0b2tlbikgewogIGFuY2hvckZyb21Ub2tlbi5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBhbmNob3JGcm9tVG9rZW4odG9rZW4sIHByb3RvY29sKSB7CiAgY29uc3QgdXJsID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgdGhpcy50YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSgocHJvdG9jb2wgfHwgIiIpICsgdXJsKSArICciPicpOwogIHRoaXMucmF3KHRoaXMuZW5jb2RlKHVybCkpOwogIHRoaXMudGFnKCI8L2E+Iik7Cn0KdmFyIGluaXRfaHRtbDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2xpYi9odG1sLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2F1dG9saW5rX2xpdGVyYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1hdXRvbGluay1saXRlcmFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3ludGF4KCk7CiAgICBpbml0X2h0bWwyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwvaW5kZXguanMKZnVuY3Rpb24gcmVzb2x2ZUFsbChjb25zdHJ1Y3RzMiwgZXZlbnRzLCBjb250ZXh0MikgewogIGNvbnN0IGNhbGxlZCA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBjb25zdHJ1Y3RzMi5sZW5ndGgpIHsKICAgIGNvbnN0IHJlc29sdmUyID0gY29uc3RydWN0czJbaW5kZXgyXS5yZXNvbHZlQWxsOwogICAgaWYgKHJlc29sdmUyICYmICFjYWxsZWQuaW5jbHVkZXMocmVzb2x2ZTIpKSB7CiAgICAgIGV2ZW50cyA9IHJlc29sdmUyKGV2ZW50cywgY29udGV4dDIpOwogICAgICBjYWxsZWQucHVzaChyZXNvbHZlMik7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1yZXNvbHZlLWFsbEAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtcmVzb2x2ZS1hbGwvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXR0ZW50aW9uLmpzCmZ1bmN0aW9uIHJlc29sdmVBbGxBdHRlbnRpb24oZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgb3BlbjsKICBsZXQgZ3JvdXA7CiAgbGV0IHRleHQ5OwogIGxldCBvcGVuaW5nU2VxdWVuY2U7CiAgbGV0IGNsb3NpbmdTZXF1ZW5jZTsKICBsZXQgdXNlOwogIGxldCBuZXh0RXZlbnRzOwogIGxldCBvZmZzZXQ7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIgJiYgZXZlbnRzW2luZGV4Ml1bMV0uX2Nsb3NlKSB7CiAgICAgIG9wZW4gPSBpbmRleDI7CiAgICAgIHdoaWxlIChvcGVuLS0pIHsKICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzBdID09PSAiZXhpdCIgJiYgZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIgJiYgZXZlbnRzW29wZW5dWzFdLl9vcGVuICYmIC8vIElmIHRoZSBtYXJrZXJzIGFyZSB0aGUgc2FtZToKICAgICAgICBjb250ZXh0Mi5zbGljZVNlcmlhbGl6ZShldmVudHNbb3Blbl1bMV0pLmNoYXJDb2RlQXQoMCkgPT09IGNvbnRleHQyLnNsaWNlU2VyaWFsaXplKGV2ZW50c1tpbmRleDJdWzFdKS5jaGFyQ29kZUF0KDApKSB7CiAgICAgICAgICBpZiAoKGV2ZW50c1tvcGVuXVsxXS5fY2xvc2UgfHwgZXZlbnRzW2luZGV4Ml1bMV0uX29wZW4pICYmIChldmVudHNbaW5kZXgyXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQub2Zmc2V0KSAlIDMgJiYgISgoZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0ICsgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCkgJSAzKSkgewogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIHVzZSA9IGV2ZW50c1tvcGVuXVsxXS5lbmQub2Zmc2V0IC0gZXZlbnRzW29wZW5dWzFdLnN0YXJ0Lm9mZnNldCA+IDEgJiYgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA+IDEgPyAyIDogMTsKICAgICAgICAgIGNvbnN0IHN0YXJ0ID0gewogICAgICAgICAgICAuLi5ldmVudHNbb3Blbl1bMV0uZW5kCiAgICAgICAgICB9OwogICAgICAgICAgY29uc3QgZW5kMyA9IHsKICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgIH07CiAgICAgICAgICBtb3ZlUG9pbnQoc3RhcnQsIC11c2UpOwogICAgICAgICAgbW92ZVBvaW50KGVuZDMsIHVzZSk7CiAgICAgICAgICBvcGVuaW5nU2VxdWVuY2UgPSB7CiAgICAgICAgICAgIHR5cGU6IHVzZSA+IDEgPyAic3Ryb25nU2VxdWVuY2UiIDogImVtcGhhc2lzU2VxdWVuY2UiLAogICAgICAgICAgICBzdGFydCwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLmVuZAogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgY2xvc2luZ1NlcXVlbmNlID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZ1NlcXVlbmNlIiA6ICJlbXBoYXNpc1NlcXVlbmNlIiwKICAgICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgICAuLi5ldmVudHNbaW5kZXgyXVsxXS5zdGFydAogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IGVuZDMKICAgICAgICAgIH07CiAgICAgICAgICB0ZXh0OSA9IHsKICAgICAgICAgICAgdHlwZTogdXNlID4gMSA/ICJzdHJvbmdUZXh0IiA6ICJlbXBoYXNpc1RleHQiLAogICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgIC4uLmV2ZW50c1tvcGVuXVsxXS5lbmQKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgICAgLi4uZXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQKICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIGdyb3VwID0gewogICAgICAgICAgICB0eXBlOiB1c2UgPiAxID8gInN0cm9uZyIgOiAiZW1waGFzaXMiLAogICAgICAgICAgICBzdGFydDogewogICAgICAgICAgICAgIC4uLm9wZW5pbmdTZXF1ZW5jZS5zdGFydAogICAgICAgICAgICB9LAogICAgICAgICAgICBlbmQ6IHsKICAgICAgICAgICAgICAuLi5jbG9zaW5nU2VxdWVuY2UuZW5kCiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBldmVudHNbb3Blbl1bMV0uZW5kID0gewogICAgICAgICAgICAuLi5vcGVuaW5nU2VxdWVuY2Uuc3RhcnQKICAgICAgICAgIH07CiAgICAgICAgICBldmVudHNbaW5kZXgyXVsxXS5zdGFydCA9IHsKICAgICAgICAgICAgLi4uY2xvc2luZ1NlcXVlbmNlLmVuZAogICAgICAgICAgfTsKICAgICAgICAgIG5leHRFdmVudHMgPSBbXTsKICAgICAgICAgIGlmIChldmVudHNbb3Blbl1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tvcGVuXVsxXS5zdGFydC5vZmZzZXQpIHsKICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZW50ZXIiLCBldmVudHNbb3Blbl1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml1dKTsKICAgICAgICAgIH0KICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIFtbImVudGVyIiwgZ3JvdXAsIGNvbnRleHQyXSwgWyJlbnRlciIsIG9wZW5pbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImV4aXQiLCBvcGVuaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml1dKTsKICAgICAgICAgIG5leHRFdmVudHMgPSBwdXNoKG5leHRFdmVudHMsIHJlc29sdmVBbGwoY29udGV4dDIucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsLCBldmVudHMuc2xpY2Uob3BlbiArIDEsIGluZGV4MiksIGNvbnRleHQyKSk7CiAgICAgICAgICBuZXh0RXZlbnRzID0gcHVzaChuZXh0RXZlbnRzLCBbWyJleGl0IiwgdGV4dDksIGNvbnRleHQyXSwgWyJlbnRlciIsIGNsb3NpbmdTZXF1ZW5jZSwgY29udGV4dDJdLCBbImV4aXQiLCBjbG9zaW5nU2VxdWVuY2UsIGNvbnRleHQyXSwgWyJleGl0IiwgZ3JvdXAsIGNvbnRleHQyXV0pOwogICAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbaW5kZXgyXVsxXS5zdGFydC5vZmZzZXQpIHsKICAgICAgICAgICAgb2Zmc2V0ID0gMjsKICAgICAgICAgICAgbmV4dEV2ZW50cyA9IHB1c2gobmV4dEV2ZW50cywgW1siZW50ZXIiLCBldmVudHNbaW5kZXgyXVsxXSwgY29udGV4dDJdLCBbImV4aXQiLCBldmVudHNbaW5kZXgyXVsxXSwgY29udGV4dDJdXSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBvZmZzZXQgPSAwOwogICAgICAgICAgfQogICAgICAgICAgc3BsaWNlKGV2ZW50cywgb3BlbiAtIDEsIGluZGV4MiAtIG9wZW4gKyAzLCBuZXh0RXZlbnRzKTsKICAgICAgICAgIGluZGV4MiA9IG9wZW4gKyBuZXh0RXZlbnRzLmxlbmd0aCAtIG9mZnNldCAtIDI7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJhdHRlbnRpb25TZXF1ZW5jZSIpIHsKICAgICAgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9ICJkYXRhIjsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUF0dGVudGlvbihlZmZlY3RzLCBvazMpIHsKICBjb25zdCBhdHRlbnRpb25NYXJrZXJzMiA9IHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuYXR0ZW50aW9uTWFya2Vycy5udWxsOwogIGNvbnN0IHByZXZpb3VzMyA9IHRoaXMucHJldmlvdXM7CiAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMzKTsKICBsZXQgbWFya2VyOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgbWFya2VyID0gY29kZTQ7CiAgICBlZmZlY3RzLmVudGVyKCJhdHRlbnRpb25TZXF1ZW5jZSIpOwogICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc2lkZTsKICAgIH0KICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJhdHRlbnRpb25TZXF1ZW5jZSIpOwogICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCk7CiAgICBjb25zdCBvcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIGJlZm9yZSB8fCBhdHRlbnRpb25NYXJrZXJzMi5pbmNsdWRlcyhjb2RlNCk7CiAgICBjb25zdCBjbG9zZTcgPSAhYmVmb3JlIHx8IGJlZm9yZSA9PT0gMiAmJiBhZnRlciB8fCBhdHRlbnRpb25NYXJrZXJzMi5pbmNsdWRlcyhwcmV2aW91czMpOwogICAgdG9rZW4uX29wZW4gPSBCb29sZWFuKG1hcmtlciA9PT0gNDIgPyBvcGVuIDogb3BlbiAmJiAoYmVmb3JlIHx8ICFjbG9zZTcpKTsKICAgIHRva2VuLl9jbG9zZSA9IEJvb2xlYW4obWFya2VyID09PSA0MiA/IGNsb3NlNyA6IGNsb3NlNyAmJiAoYWZ0ZXIgfHwgIW9wZW4pKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBtb3ZlUG9pbnQocG9pbnQ0LCBvZmZzZXQpIHsKICBwb2ludDQuY29sdW1uICs9IG9mZnNldDsKICBwb2ludDQub2Zmc2V0ICs9IG9mZnNldDsKICBwb2ludDQuX2J1ZmZlckluZGV4ICs9IG9mZnNldDsKfQp2YXIgYXR0ZW50aW9uOwp2YXIgaW5pdF9hdHRlbnRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9hdHRlbnRpb24uanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NsYXNzaWZ5X2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9yZXNvbHZlX2FsbCgpOwogICAgYXR0ZW50aW9uID0gewogICAgICBuYW1lOiAiYXR0ZW50aW9uIiwKICAgICAgcmVzb2x2ZUFsbDogcmVzb2x2ZUFsbEF0dGVudGlvbiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQXR0ZW50aW9uCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXV0b2xpbmsuanMKZnVuY3Rpb24gdG9rZW5pemVBdXRvbGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rIik7CiAgICBlZmZlY3RzLmVudGVyKCJhdXRvbGlua01hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rUHJvdG9jb2wiKTsKICAgIHJldHVybiBvcGVuOwogIH0KICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNjaGVtZU9yRW1haWxBdGV4dDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNjaGVtZU9yRW1haWxBdGV4dChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MyB8fCBjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBzaXplID0gMTsKICAgICAgcmV0dXJuIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dChjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHNjaGVtZUluc2lkZU9yRW1haWxBdGV4dChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplID0gMDsKICAgICAgcmV0dXJuIHVybEluc2lkZTsKICAgIH0KICAgIGlmICgoY29kZTQgPT09IDQzIHx8IGNvZGU0ID09PSA0NSB8fCBjb2RlNCA9PT0gNDYgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSAmJiBzaXplKysgPCAzMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2NoZW1lSW5zaWRlT3JFbWFpbEF0ZXh0OwogICAgfQogICAgc2l6ZSA9IDA7CiAgICByZXR1cm4gZW1haWxBdGV4dChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHVybEluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rUHJvdG9jb2wiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGlua01hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoImF1dG9saW5rIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA2MCB8fCBhc2NpaUNvbnRyb2woY29kZTQpKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB1cmxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGVtYWlsQXRleHQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3Q7CiAgICB9CiAgICBpZiAoYXNjaWlBdGV4dChjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVtYWlsQXRleHQ7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxBdFNpZ25PckRvdChjb2RlNCkgewogICAgcmV0dXJuIGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSA/IGVtYWlsTGFiZWwoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW1haWxMYWJlbChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplID0gMDsKICAgICAgcmV0dXJuIGVtYWlsQXRTaWduT3JEb3Q7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtQcm90b2NvbCIpLnR5cGUgPSAiYXV0b2xpbmtFbWFpbCI7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF1dG9saW5rTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXV0b2xpbmtNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJhdXRvbGluayIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIGVtYWlsVmFsdWUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbWFpbFZhbHVlKGNvZGU0KSB7CiAgICBpZiAoKGNvZGU0ID09PSA0NSB8fCBhc2NpaUFscGhhbnVtZXJpYyhjb2RlNCkpICYmIHNpemUrKyA8IDYzKSB7CiAgICAgIGNvbnN0IG5leHQyID0gY29kZTQgPT09IDQ1ID8gZW1haWxWYWx1ZSA6IGVtYWlsTGFiZWw7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBuZXh0MjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgYXV0b2xpbms7CnZhciBpbml0X2F1dG9saW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYXV0b2xpbmsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGF1dG9saW5rID0gewogICAgICBuYW1lOiAiYXV0b2xpbmsiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVBdXRvbGluawogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXNwYWNlQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1zcGFjZS9pbmRleC5qcwpmdW5jdGlvbiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgb2szLCB0eXBlNSwgbWF4MykgewogIGNvbnN0IGxpbWl0ID0gbWF4MyA/IG1heDMgLSAxIDogTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZOwogIGxldCBzaXplID0gMDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgICAgcmV0dXJuIHByZWZpeDQoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHByZWZpeDQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSAmJiBzaXplKysgPCBsaW1pdCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gcHJlZml4NDsKICAgIH0KICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1zcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2JsYW5rLWxpbmUuanMKZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgImxpbmVQcmVmaXgiKShjb2RlNCkgOiBhZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KfQp2YXIgYmxhbmtMaW5lOwp2YXIgaW5pdF9ibGFua19saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxhbmstbGluZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgYmxhbmtMaW5lID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVCbGFua0xpbmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9ibG9jay1xdW90ZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUJsb2NrUXVvdGVTdGFydChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgY29uc3Qgc3RhdGUxMiA9IHNlbGYyLmNvbnRhaW5lclN0YXRlOwogICAgICBpZiAoIXN0YXRlMTIub3BlbikgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGUiLCB7CiAgICAgICAgICBfY29udGFpbmVyOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgc3RhdGUxMi5vcGVuID0gdHJ1ZTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGVNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlTWFya2VyIik7CiAgICAgIHJldHVybiBhZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImJsb2NrUXVvdGVQcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiKTsKICAgICAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlUHJlZml4Iik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImJsb2NrUXVvdGVQcmVmaXgiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUJsb2NrUXVvdGVDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGNvbnRTdGFydDsKICBmdW5jdGlvbiBjb250U3RhcnQoY29kZTQpIHsKICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGNvbnRCZWZvcmUsICJsaW5lUHJlZml4Iiwgc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSA/IHZvaWQgMCA6IDQpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBjb250QmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udEJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChibG9ja1F1b3RlLCBvazMsIG5vaykoY29kZTQpOwogIH0KfQpmdW5jdGlvbiBleGl0MihlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KCJibG9ja1F1b3RlIik7Cn0KdmFyIGJsb2NrUXVvdGU7CnZhciBpbml0X2Jsb2NrX3F1b3RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvYmxvY2stcXVvdGUuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGJsb2NrUXVvdGUgPSB7CiAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsb2NrUXVvdGVDb250aW51YXRpb24KICAgICAgfSwKICAgICAgZXhpdDogZXhpdDIsCiAgICAgIG5hbWU6ICJibG9ja1F1b3RlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQmxvY2tRdW90ZVN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY2hhcmFjdGVyLWVzY2FwZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUNoYXJhY3RlckVzY2FwZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyRXNjYXBlIik7CiAgICBlZmZlY3RzLmVudGVyKCJlc2NhcGVNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImVzY2FwZU1hcmtlciIpOwogICAgcmV0dXJuIGluc2lkZTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoYXNjaWlQdW5jdHVhdGlvbihjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyRXNjYXBlVmFsdWUiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJFc2NhcGVWYWx1ZSIpOwogICAgICBlZmZlY3RzLmV4aXQoImNoYXJhY3RlckVzY2FwZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBjaGFyYWN0ZXJFc2NhcGU7CnZhciBpbml0X2NoYXJhY3Rlcl9lc2NhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItZXNjYXBlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBjaGFyYWN0ZXJFc2NhcGUgPSB7CiAgICAgIG5hbWU6ICJjaGFyYWN0ZXJFc2NhcGUiLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDaGFyYWN0ZXJFc2NhcGUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIHRva2VuaXplQ2hhcmFjdGVyUmVmZXJlbmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBzaXplID0gMDsKICBsZXQgbWF4MzsKICBsZXQgdGVzdDsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZSIpOwogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXIiKTsKICAgIHJldHVybiBvcGVuOwogIH0KICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImNoYXJhY3RlclJlZmVyZW5jZU1hcmtlck51bWVyaWMiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljIik7CiAgICAgIHJldHVybiBudW1lcmljOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgIG1heDMgPSAzMTsKICAgIHRlc3QgPSBhc2NpaUFscGhhbnVtZXJpYzsKICAgIHJldHVybiB2YWx1ZTIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBudW1lcmljKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDg4IHx8IGNvZGU0ID09PSAxMjApIHsKICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWwiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbCIpOwogICAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgICBtYXgzID0gNjsKICAgICAgdGVzdCA9IGFzY2lpSGV4RGlnaXQ7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZSIpOwogICAgbWF4MyA9IDc7CiAgICB0ZXN0ID0gYXNjaWlEaWdpdDsKICAgIHJldHVybiB2YWx1ZTIoY29kZTQpOwogIH0KICBmdW5jdGlvbiB2YWx1ZTIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNTkgJiYgc2l6ZSkgewogICAgICBjb25zdCB0b2tlbiA9IGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlVmFsdWUiKTsKICAgICAgaWYgKHRlc3QgPT09IGFzY2lpQWxwaGFudW1lcmljICYmICFkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2hhcmFjdGVyUmVmZXJlbmNlIik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICBpZiAodGVzdChjb2RlNCkgJiYgc2l6ZSsrIDwgbWF4MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBjaGFyYWN0ZXJSZWZlcmVuY2U7CnZhciBpbml0X2NoYXJhY3Rlcl9yZWZlcmVuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jaGFyYWN0ZXItcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfaW5kZXhfZG9tKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY2hhcmFjdGVyUmVmZXJlbmNlID0gewogICAgICBuYW1lOiAiY2hhcmFjdGVyUmVmZXJlbmNlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplQ2hhcmFjdGVyUmVmZXJlbmNlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS1mZW5jZWQuanMKZnVuY3Rpb24gdG9rZW5pemVDb2RlRmVuY2VkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IGNsb3NlU3RhcnQgPSB7CiAgICBwYXJ0aWFsOiB0cnVlLAogICAgdG9rZW5pemU6IHRva2VuaXplQ2xvc2VTdGFydAogIH07CiAgbGV0IGluaXRpYWxQcmVmaXggPSAwOwogIGxldCBzaXplT3BlbiA9IDA7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgaW5pdGlhbFByZWZpeCA9IHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgPyB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA6IDA7CiAgICBtYXJrZXIgPSBjb2RlNDsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWQiKTsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZSIpOwogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlU2VxdWVuY2UiKTsKICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47CiAgICB9CiAgICBpZiAoc2l6ZU9wZW4gPCAzKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGluZm9CZWZvcmUsICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogaW5mb0JlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGluZm9CZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uLCBhdE5vbkxhenlCcmVhaywgYWZ0ZXIpKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGluZm8oY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbmZvKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZUZlbmNlZEZlbmNlSW5mbyIpOwogICAgICByZXR1cm4gaW5mb0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWRGZW5jZUluZm8iKTsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBtZXRhQmVmb3JlLCAid2hpdGVzcGFjZSIpKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYgJiYgY29kZTQgPT09IG1hcmtlcikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gaW5mbzsKICB9CiAgZnVuY3Rpb24gbWV0YUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGluZm9CZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZlbmNlZEZlbmNlTWV0YSIpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gbWV0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG1ldGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmVuY2VkRmVuY2VNZXRhIik7CiAgICAgIHJldHVybiBpbmZvQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gOTYgJiYgY29kZTQgPT09IG1hcmtlcikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gbWV0YTsKICB9CiAgZnVuY3Rpb24gYXROb25MYXp5QnJlYWsoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoY2xvc2VTdGFydCwgYWZ0ZXIsIGNvbnRlbnRCZWZvcmUpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGVudEJlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGNvbnRlbnRTdGFydDsKICB9CiAgZnVuY3Rpb24gY29udGVudFN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gaW5pdGlhbFByZWZpeCA+IDAgJiYgbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgYmVmb3JlQ29udGVudENodW5rLCAibGluZVByZWZpeCIsIGluaXRpYWxQcmVmaXggKyAxKShjb2RlNCkgOiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKG5vbkxhenlDb250aW51YXRpb24sIGF0Tm9uTGF6eUJyZWFrLCBhZnRlcikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY29kZUZsb3dWYWx1ZSIpOwogICAgcmV0dXJuIGNvbnRlbnRDaHVuayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRlbnRDaHVuayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlRmxvd1ZhbHVlIik7CiAgICAgIHJldHVybiBiZWZvcmVDb250ZW50Q2h1bmsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250ZW50Q2h1bms7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNvZGVGZW5jZWQiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0b2tlbml6ZUNsb3NlU3RhcnQoZWZmZWN0czIsIG9rNCwgbm9rMikgewogICAgbGV0IHNpemUgPSAwOwogICAgcmV0dXJuIHN0YXJ0QmVmb3JlOwogICAgZnVuY3Rpb24gc3RhcnRCZWZvcmUoY29kZTQpIHsKICAgICAgZWZmZWN0czIuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0czIuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMyLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIHN0YXJ0MjsKICAgIH0KICAgIGZ1bmN0aW9uIHN0YXJ0Mihjb2RlNCkgewogICAgICBlZmZlY3RzMi5lbnRlcigiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzMiwgYmVmb3JlU2VxdWVuY2VDbG9zZSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpIDogYmVmb3JlU2VxdWVuY2VDbG9zZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBiZWZvcmVTZXF1ZW5jZUNsb3NlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgICAgZWZmZWN0czIuZW50ZXIoImNvZGVGZW5jZWRGZW5jZVNlcXVlbmNlIik7CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2UoY29kZTQpOwogICAgICB9CiAgICAgIHJldHVybiBub2syKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgICBzaXplKys7CiAgICAgICAgZWZmZWN0czIuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIHNlcXVlbmNlQ2xvc2U7CiAgICAgIH0KICAgICAgaWYgKHNpemUgPj0gc2l6ZU9wZW4pIHsKICAgICAgICBlZmZlY3RzMi5leGl0KCJjb2RlRmVuY2VkRmVuY2VTZXF1ZW5jZSIpOwogICAgICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzMiwgc2VxdWVuY2VDbG9zZUFmdGVyLCAid2hpdGVzcGFjZSIpKGNvZGU0KSA6IHNlcXVlbmNlQ2xvc2VBZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vazIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gc2VxdWVuY2VDbG9zZUFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0czIuZXhpdCgiY29kZUZlbmNlZEZlbmNlIik7CiAgICAgICAgcmV0dXJuIG9rNChjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vazIoY29kZTQpOwogICAgfQogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZU5vbkxhenlDb250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gbGluZVN0YXJ0OwogIH0KICBmdW5jdGlvbiBsaW5lU3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA/IG5vayhjb2RlNCkgOiBvazMoY29kZTQpOwogIH0KfQp2YXIgbm9uTGF6eUNvbnRpbnVhdGlvbiwgY29kZUZlbmNlZDsKdmFyIGluaXRfY29kZV9mZW5jZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWZlbmNlZC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgbm9uTGF6eUNvbnRpbnVhdGlvbiA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvbgogICAgfTsKICAgIGNvZGVGZW5jZWQgPSB7CiAgICAgIGNvbmNyZXRlOiB0cnVlLAogICAgICBuYW1lOiAiY29kZUZlbmNlZCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVGZW5jZWQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLWluZGVudGVkLmpzCmZ1bmN0aW9uIHRva2VuaXplQ29kZUluZGVudGVkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiY29kZUluZGVudGVkIik7CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAibGluZVByZWZpeCIsIDQgKyAxKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQgPyBhdEJyZWFrKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gYWZ0ZXIoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChmdXJ0aGVyU3RhcnQsIGF0QnJlYWssIGFmdGVyKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlRmxvd1ZhbHVlIik7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVGbG93VmFsdWUiKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNvZGVJbmRlbnRlZCIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplRnVydGhlclN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBmdXJ0aGVyU3RhcnQyOwogIGZ1bmN0aW9uIGZ1cnRoZXJTdGFydDIoY29kZTQpIHsKICAgIGlmIChzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBmdXJ0aGVyU3RhcnQyOwogICAgfQogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCA0ICsgMSkoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlclByZWZpeChjb2RlNCkgewogICAgY29uc3QgdGFpbCA9IHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV07CiAgICByZXR1cm4gdGFpbCAmJiB0YWlsWzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiAmJiB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA+PSA0ID8gb2szKGNvZGU0KSA6IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBmdXJ0aGVyU3RhcnQyKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CnZhciBjb2RlSW5kZW50ZWQsIGZ1cnRoZXJTdGFydDsKdmFyIGluaXRfY29kZV9pbmRlbnRlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvZGUtaW5kZW50ZWQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvZGVJbmRlbnRlZCA9IHsKICAgICAgbmFtZTogImNvZGVJbmRlbnRlZCIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVJbmRlbnRlZAogICAgfTsKICAgIGZ1cnRoZXJTdGFydCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplRnVydGhlclN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvY29kZS10ZXh0LmpzCmZ1bmN0aW9uIHJlc29sdmVDb2RlVGV4dChldmVudHMpIHsKICBsZXQgdGFpbEV4aXRJbmRleCA9IGV2ZW50cy5sZW5ndGggLSA0OwogIGxldCBoZWFkRW50ZXJJbmRleCA9IDM7CiAgbGV0IGluZGV4MjsKICBsZXQgZW50ZXI7CiAgaWYgKChldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCBldmVudHNbaGVhZEVudGVySW5kZXhdWzFdLnR5cGUgPT09ICJzcGFjZSIpICYmIChldmVudHNbdGFpbEV4aXRJbmRleF1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID09PSAic3BhY2UiKSkgewogICAgaW5kZXgyID0gaGVhZEVudGVySW5kZXg7CiAgICB3aGlsZSAoKytpbmRleDIgPCB0YWlsRXhpdEluZGV4KSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiY29kZVRleHREYXRhIikgewogICAgICAgIGV2ZW50c1toZWFkRW50ZXJJbmRleF1bMV0udHlwZSA9ICJjb2RlVGV4dFBhZGRpbmciOwogICAgICAgIGV2ZW50c1t0YWlsRXhpdEluZGV4XVsxXS50eXBlID0gImNvZGVUZXh0UGFkZGluZyI7CiAgICAgICAgaGVhZEVudGVySW5kZXggKz0gMjsKICAgICAgICB0YWlsRXhpdEluZGV4IC09IDI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgaW5kZXgyID0gaGVhZEVudGVySW5kZXggLSAxOwogIHRhaWxFeGl0SW5kZXgrKzsKICB3aGlsZSAoKytpbmRleDIgPD0gdGFpbEV4aXRJbmRleCkgewogICAgaWYgKGVudGVyID09PSB2b2lkIDApIHsKICAgICAgaWYgKGluZGV4MiAhPT0gdGFpbEV4aXRJbmRleCAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAibGluZUVuZGluZyIpIHsKICAgICAgICBlbnRlciA9IGluZGV4MjsKICAgICAgfQogICAgfSBlbHNlIGlmIChpbmRleDIgPT09IHRhaWxFeGl0SW5kZXggfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmciKSB7CiAgICAgIGV2ZW50c1tlbnRlcl1bMV0udHlwZSA9ICJjb2RlVGV4dERhdGEiOwogICAgICBpZiAoaW5kZXgyICE9PSBlbnRlciArIDIpIHsKICAgICAgICBldmVudHNbZW50ZXJdWzFdLmVuZCA9IGV2ZW50c1tpbmRleDIgLSAxXVsxXS5lbmQ7CiAgICAgICAgZXZlbnRzLnNwbGljZShlbnRlciArIDIsIGluZGV4MiAtIGVudGVyIC0gMik7CiAgICAgICAgdGFpbEV4aXRJbmRleCAtPSBpbmRleDIgLSBlbnRlciAtIDI7CiAgICAgICAgaW5kZXgyID0gZW50ZXIgKyAyOwogICAgICB9CiAgICAgIGVudGVyID0gdm9pZCAwOwogICAgfQogIH0KICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHByZXZpb3VzMihjb2RlNCkgewogIHJldHVybiBjb2RlNCAhPT0gOTYgfHwgdGhpcy5ldmVudHNbdGhpcy5ldmVudHMubGVuZ3RoIC0gMV1bMV0udHlwZSA9PT0gImNoYXJhY3RlckVzY2FwZSI7Cn0KZnVuY3Rpb24gdG9rZW5pemVDb2RlVGV4dChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZU9wZW4gPSAwOwogIGxldCBzaXplOwogIGxldCB0b2tlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0Iik7CiAgICBlZmZlY3RzLmVudGVyKCJjb2RlVGV4dFNlcXVlbmNlIik7CiAgICByZXR1cm4gc2VxdWVuY2VPcGVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDk2KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemVPcGVuKys7CiAgICAgIHJldHVybiBzZXF1ZW5jZU9wZW47CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgIHJldHVybiBiZXR3ZWVuMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJldHdlZW4yKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDMyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgic3BhY2UiKTsKICAgICAgcmV0dXJuIGJldHdlZW4yOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5NikgewogICAgICB0b2tlbiA9IGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgICAgc2l6ZSA9IDA7CiAgICAgIHJldHVybiBzZXF1ZW5jZUNsb3NlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMjsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImNvZGVUZXh0RGF0YSIpOwogICAgcmV0dXJuIGRhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDMyIHx8IGNvZGU0ID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY29kZVRleHREYXRhIik7CiAgICAgIHJldHVybiBiZXR3ZWVuMihjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGRhdGE7CiAgfQogIGZ1bmN0aW9uIHNlcXVlbmNlQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTYpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gc2VxdWVuY2VDbG9zZTsKICAgIH0KICAgIGlmIChzaXplID09PSBzaXplT3BlbikgewogICAgICBlZmZlY3RzLmV4aXQoImNvZGVUZXh0U2VxdWVuY2UiKTsKICAgICAgZWZmZWN0cy5leGl0KCJjb2RlVGV4dCIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHRva2VuLnR5cGUgPSAiY29kZVRleHREYXRhIjsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9Cn0KdmFyIGNvZGVUZXh0Owp2YXIgaW5pdF9jb2RlX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9jb2RlLXRleHQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGNvZGVUZXh0ID0gewogICAgICBuYW1lOiAiY29kZVRleHQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMyLAogICAgICByZXNvbHZlOiByZXNvbHZlQ29kZVRleHQsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUNvZGVUZXh0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2xpYi9zcGxpY2UtYnVmZmVyLmpzCmZ1bmN0aW9uIGNodW5rZWRQdXNoKGxpc3Q1LCByaWdodCkgewogIGxldCBjaHVua1N0YXJ0ID0gMDsKICBpZiAocmlnaHQubGVuZ3RoIDwgMWU0KSB7CiAgICBsaXN0NS5wdXNoKC4uLnJpZ2h0KTsKICB9IGVsc2UgewogICAgd2hpbGUgKGNodW5rU3RhcnQgPCByaWdodC5sZW5ndGgpIHsKICAgICAgbGlzdDUucHVzaCguLi5yaWdodC5zbGljZShjaHVua1N0YXJ0LCBjaHVua1N0YXJ0ICsgMWU0KSk7CiAgICAgIGNodW5rU3RhcnQgKz0gMWU0OwogICAgfQogIH0KfQp2YXIgU3BsaWNlQnVmZmVyOwp2YXIgaW5pdF9zcGxpY2VfYnVmZmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2xpYi9zcGxpY2UtYnVmZmVyLmpzIigpIHsKICAgIFNwbGljZUJ1ZmZlciA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7UmVhZG9ubHlBcnJheTxUPiB8IG51bGwgfCB1bmRlZmluZWR9IFtpbml0aWFsXQogICAgICAgKiAgIEluaXRpYWwgaXRlbXMgKG9wdGlvbmFsKS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBTcGxpY2UgYnVmZmVyLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoaW5pdGlhbDIpIHsKICAgICAgICB0aGlzLmxlZnQgPSBpbml0aWFsMiA/IFsuLi5pbml0aWFsMl0gOiBbXTsKICAgICAgICB0aGlzLnJpZ2h0ID0gW107CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFycmF5IGFjY2VzczsKICAgICAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gaW5kZXgKICAgICAgICogICBJbmRleC4KICAgICAgICogQHJldHVybiB7VH0KICAgICAgICogICBJdGVtLgogICAgICAgKi8KICAgICAgZ2V0KGluZGV4MikgewogICAgICAgIGlmIChpbmRleDIgPCAwIHx8IGluZGV4MiA+PSB0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCJDYW5ub3QgYWNjZXNzIGluZGV4IGAiICsgaW5kZXgyICsgImAgaW4gYSBzcGxpY2UgYnVmZmVyIG9mIHNpemUgYCIgKyAodGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoKSArICJgIik7CiAgICAgICAgfQogICAgICAgIGlmIChpbmRleDIgPCB0aGlzLmxlZnQubGVuZ3RoKSByZXR1cm4gdGhpcy5sZWZ0W2luZGV4Ml07CiAgICAgICAgcmV0dXJuIHRoaXMucmlnaHRbdGhpcy5yaWdodC5sZW5ndGggLSBpbmRleDIgKyB0aGlzLmxlZnQubGVuZ3RoIC0gMV07CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBsZW5ndGggb2YgdGhlIHNwbGljZSBidWZmZXIsIG9uZSBncmVhdGVyIHRoYW4gdGhlIGxhcmdlc3QgaW5kZXggaW4gdGhlCiAgICAgICAqIGFycmF5LgogICAgICAgKi8KICAgICAgZ2V0IGxlbmd0aCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5sZWZ0Lmxlbmd0aCArIHRoaXMucmlnaHQubGVuZ3RoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW5kIHJldHVybiBgbGlzdFswXWA7CiAgICAgICAqIG1vdmVzIHRoZSBjdXJzb3IgdG8gYDBgLgogICAgICAgKgogICAgICAgKiBAcmV0dXJucyB7VCB8IHVuZGVmaW5lZH0KICAgICAgICogICBJdGVtLCBvcHRpb25hbC4KICAgICAgICovCiAgICAgIHNoaWZ0KCkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKDApOwogICAgICAgIHJldHVybiB0aGlzLnJpZ2h0LnBvcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTbGljZSB0aGUgYnVmZmVyIHRvIGdldCBhbiBhcnJheTsKICAgICAgICogZG9lcyBub3QgbW92ZSB0aGUgY3Vyc29yLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge251bWJlcn0gc3RhcnQKICAgICAgICogICBTdGFydC4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbZW5kXQogICAgICAgKiAgIEVuZCAob3B0aW9uYWwpLgogICAgICAgKiBAcmV0dXJucyB7QXJyYXk8VD59CiAgICAgICAqICAgQXJyYXkgb2YgaXRlbXMuCiAgICAgICAqLwogICAgICBzbGljZShzdGFydCwgZW5kMykgewogICAgICAgIGNvbnN0IHN0b3AgPSBlbmQzID09PSBudWxsIHx8IGVuZDMgPT09IHZvaWQgMCA/IE51bWJlci5QT1NJVElWRV9JTkZJTklUWSA6IGVuZDM7CiAgICAgICAgaWYgKHN0b3AgPCB0aGlzLmxlZnQubGVuZ3RoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5sZWZ0LnNsaWNlKHN0YXJ0LCBzdG9wKTsKICAgICAgICB9CiAgICAgICAgaWYgKHN0YXJ0ID4gdGhpcy5sZWZ0Lmxlbmd0aCkgewogICAgICAgICAgcmV0dXJuIHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGggLSBzdG9wICsgdGhpcy5sZWZ0Lmxlbmd0aCwgdGhpcy5yaWdodC5sZW5ndGggLSBzdGFydCArIHRoaXMubGVmdC5sZW5ndGgpLnJldmVyc2UoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5zbGljZShzdGFydCkuY29uY2F0KHRoaXMucmlnaHQuc2xpY2UodGhpcy5yaWdodC5sZW5ndGggLSBzdG9wICsgdGhpcy5sZWZ0Lmxlbmd0aCkucmV2ZXJzZSgpKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTWltaWNzIHRoZSBiZWhhdmlvciBvZiBBcnJheS5wcm90b3R5cGUuc3BsaWNlKCkgZXhjZXB0IGZvciB0aGUgY2hhbmdlIG9mCiAgICAgICAqIGludGVyZmFjZSBuZWNlc3NhcnkgdG8gYXZvaWQgc2VnZmF1bHRzIHdoZW4gcGF0Y2hpbmcgaW4gdmVyeSBsYXJnZSBhcnJheXMuCiAgICAgICAqCiAgICAgICAqIFRoaXMgb3BlcmF0aW9uIG1vdmVzIGN1cnNvciBpcyBtb3ZlZCB0byBgc3RhcnRgIGFuZCByZXN1bHRzIGluIHRoZSBjdXJzb3IKICAgICAgICogcGxhY2VkIGFmdGVyIGFueSBpbnNlcnRlZCBpdGVtcy4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IHN0YXJ0CiAgICAgICAqICAgU3RhcnQ7CiAgICAgICAqICAgemVyby1iYXNlZCBpbmRleCBhdCB3aGljaCB0byBzdGFydCBjaGFuZ2luZyB0aGUgYXJyYXk7CiAgICAgICAqICAgbmVnYXRpdmUgbnVtYmVycyBjb3VudCBiYWNrd2FyZHMgZnJvbSB0aGUgZW5kIG9mIHRoZSBhcnJheSBhbmQgdmFsdWVzCiAgICAgICAqICAgdGhhdCBhcmUgb3V0LW9mIGJvdW5kcyBhcmUgY2xhbXBlZCB0byB0aGUgYXBwcm9wcmlhdGUgZW5kIG9mIHRoZSBhcnJheS4KICAgICAgICogQHBhcmFtIHtudW1iZXIgfCBudWxsIHwgdW5kZWZpbmVkfSBbZGVsZXRlQ291bnQ9MF0KICAgICAgICogICBEZWxldGUgY291bnQgKGRlZmF1bHQ6IGAwYCk7CiAgICAgICAqICAgbWF4aW11bSBudW1iZXIgb2YgZWxlbWVudHMgdG8gZGVsZXRlLCBzdGFydGluZyBmcm9tIHN0YXJ0LgogICAgICAgKiBAcGFyYW0ge0FycmF5PFQ+IHwgbnVsbCB8IHVuZGVmaW5lZH0gW2l0ZW1zPVtdXQogICAgICAgKiAgIEl0ZW1zIHRvIGluY2x1ZGUgaW4gcGxhY2Ugb2YgdGhlIGRlbGV0ZWQgaXRlbXMgKGRlZmF1bHQ6IGBbXWApLgogICAgICAgKiBAcmV0dXJuIHtBcnJheTxUPn0KICAgICAgICogICBBbnkgcmVtb3ZlZCBpdGVtcy4KICAgICAgICovCiAgICAgIHNwbGljZShzdGFydCwgZGVsZXRlQ291bnQsIGl0ZW1zKSB7CiAgICAgICAgY29uc3QgY291bnQyID0gZGVsZXRlQ291bnQgfHwgMDsKICAgICAgICB0aGlzLnNldEN1cnNvcihNYXRoLnRydW5jKHN0YXJ0KSk7CiAgICAgICAgY29uc3QgcmVtb3ZlZCA9IHRoaXMucmlnaHQuc3BsaWNlKHRoaXMucmlnaHQubGVuZ3RoIC0gY291bnQyLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIGlmIChpdGVtcykgY2h1bmtlZFB1c2godGhpcy5sZWZ0LCBpdGVtcyk7CiAgICAgICAgcmV0dXJuIHJlbW92ZWQucmV2ZXJzZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYW5kIHJldHVybiB0aGUgaGlnaGVzdC1udW1iZXJlZCBpdGVtIGluIHRoZSBhcnJheSwgc28KICAgICAgICogYGxpc3RbbGlzdC5sZW5ndGggLSAxXWA7CiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYGxlbmd0aGAuCiAgICAgICAqCiAgICAgICAqIEByZXR1cm5zIHtUIHwgdW5kZWZpbmVkfQogICAgICAgKiAgIEl0ZW0sIG9wdGlvbmFsLgogICAgICAgKi8KICAgICAgcG9wKCkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yKE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgcmV0dXJuIHRoaXMubGVmdC5wb3AoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBhIHNpbmdsZSBpdGVtIHRvIHRoZSBoaWdoLW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGBsZW5ndGhgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1R9IGl0ZW0KICAgICAgICogICBJdGVtLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBwdXNoKGl0ZW0pIHsKICAgICAgICB0aGlzLnNldEN1cnNvcihOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpOwogICAgICAgIHRoaXMubGVmdC5wdXNoKGl0ZW0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBJbnNlcnRzIG1hbnkgaXRlbXMgdG8gdGhlIGhpZ2gtbnVtYmVyZWQgc2lkZSBvZiB0aGUgYXJyYXkuCiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYGxlbmd0aGAuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8VD59IGl0ZW1zCiAgICAgICAqICAgSXRlbXMuCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqICAgTm90aGluZy4KICAgICAgICovCiAgICAgIHB1c2hNYW55KGl0ZW1zKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3IoTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICAgICAgICBjaHVua2VkUHVzaCh0aGlzLmxlZnQsIGl0ZW1zKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5zZXJ0cyBhIHNpbmdsZSBpdGVtIHRvIHRoZSBsb3ctbnVtYmVyZWQgc2lkZSBvZiB0aGUgYXJyYXk7CiAgICAgICAqIE1vdmVzIHRoZSBjdXJzb3IgdG8gYDBgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge1R9IGl0ZW0KICAgICAgICogICBJdGVtLgogICAgICAgKiBAcmV0dXJucyB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICB1bnNoaWZ0KGl0ZW0pIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICB0aGlzLnJpZ2h0LnB1c2goaXRlbSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEluc2VydHMgbWFueSBpdGVtcyB0byB0aGUgbG93LW51bWJlcmVkIHNpZGUgb2YgdGhlIGFycmF5OwogICAgICAgKiBtb3ZlcyB0aGUgY3Vyc29yIHRvIGAwYC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtBcnJheTxUPn0gaXRlbXMKICAgICAgICogICBJdGVtcy4KICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICogICBOb3RoaW5nLgogICAgICAgKi8KICAgICAgdW5zaGlmdE1hbnkoaXRlbXMpIHsKICAgICAgICB0aGlzLnNldEN1cnNvcigwKTsKICAgICAgICBjaHVua2VkUHVzaCh0aGlzLnJpZ2h0LCBpdGVtcy5yZXZlcnNlKCkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBNb3ZlIHRoZSBjdXJzb3IgdG8gYSBzcGVjaWZpYyBwb3NpdGlvbiBpbiB0aGUgYXJyYXkuIFJlcXVpcmVzCiAgICAgICAqIHRpbWUgcHJvcG9ydGlvbmFsIHRvIHRoZSBkaXN0YW5jZSBtb3ZlZC4KICAgICAgICoKICAgICAgICogSWYgYG4gPCAwYCwgdGhlIGN1cnNvciB3aWxsIGVuZCB1cCBhdCB0aGUgYmVnaW5uaW5nLgogICAgICAgKiBJZiBgbiA+IGxlbmd0aGAsIHRoZSBjdXJzb3Igd2lsbCBlbmQgdXAgYXQgdGhlIGVuZC4KICAgICAgICoKICAgICAgICogQHBhcmFtIHtudW1iZXJ9IG4KICAgICAgICogICBQb3NpdGlvbi4KICAgICAgICogQHJldHVybiB7dW5kZWZpbmVkfQogICAgICAgKiAgIE5vdGhpbmcuCiAgICAgICAqLwogICAgICBzZXRDdXJzb3IobjEzKSB7CiAgICAgICAgaWYgKG4xMyA9PT0gdGhpcy5sZWZ0Lmxlbmd0aCB8fCBuMTMgPiB0aGlzLmxlZnQubGVuZ3RoICYmIHRoaXMucmlnaHQubGVuZ3RoID09PSAwIHx8IG4xMyA8IDAgJiYgdGhpcy5sZWZ0Lmxlbmd0aCA9PT0gMCkgcmV0dXJuOwogICAgICAgIGlmIChuMTMgPCB0aGlzLmxlZnQubGVuZ3RoKSB7CiAgICAgICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5sZWZ0LnNwbGljZShuMTMsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgICBjaHVua2VkUHVzaCh0aGlzLnJpZ2h0LCByZW1vdmVkLnJldmVyc2UoKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IHJlbW92ZWQgPSB0aGlzLnJpZ2h0LnNwbGljZSh0aGlzLmxlZnQubGVuZ3RoICsgdGhpcy5yaWdodC5sZW5ndGggLSBuMTMsIE51bWJlci5QT1NJVElWRV9JTkZJTklUWSk7CiAgICAgICAgICBjaHVua2VkUHVzaCh0aGlzLmxlZnQsIHJlbW92ZWQucmV2ZXJzZSgpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstdXRpbC1zdWJ0b2tlbml6ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemUvaW5kZXguanMKZnVuY3Rpb24gc3VidG9rZW5pemUoZXZlbnRzQXJyYXkpIHsKICBjb25zdCBqdW1wcyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQgZXZlbnQ7CiAgbGV0IGxpbmVJbmRleDsKICBsZXQgb3RoZXJJbmRleDsKICBsZXQgb3RoZXJFdmVudDsKICBsZXQgcGFyYW1ldGVyczsKICBsZXQgc3ViZXZlbnRzOwogIGxldCBtb3JlOwogIGNvbnN0IGV2ZW50cyA9IG5ldyBTcGxpY2VCdWZmZXIoZXZlbnRzQXJyYXkpOwogIHdoaWxlICgrK2luZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIHdoaWxlIChpbmRleDIgaW4ganVtcHMpIHsKICAgICAgaW5kZXgyID0ganVtcHNbaW5kZXgyXTsKICAgIH0KICAgIGV2ZW50ID0gZXZlbnRzLmdldChpbmRleDIpOwogICAgaWYgKGluZGV4MiAmJiBldmVudFsxXS50eXBlID09PSAiY2h1bmtGbG93IiAmJiBldmVudHMuZ2V0KGluZGV4MiAtIDEpWzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIpIHsKICAgICAgc3ViZXZlbnRzID0gZXZlbnRbMV0uX3Rva2VuaXplci5ldmVudHM7CiAgICAgIG90aGVySW5kZXggPSAwOwogICAgICBpZiAob3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGggJiYgc3ViZXZlbnRzW290aGVySW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nQmxhbmsiKSB7CiAgICAgICAgb3RoZXJJbmRleCArPSAyOwogICAgICB9CiAgICAgIGlmIChvdGhlckluZGV4IDwgc3ViZXZlbnRzLmxlbmd0aCAmJiBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgd2hpbGUgKCsrb3RoZXJJbmRleCA8IHN1YmV2ZW50cy5sZW5ndGgpIHsKICAgICAgICAgIGlmIChzdWJldmVudHNbb3RoZXJJbmRleF1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHN1YmV2ZW50c1tvdGhlckluZGV4XVsxXS50eXBlID09PSAiY2h1bmtUZXh0IikgewogICAgICAgICAgICBzdWJldmVudHNbb3RoZXJJbmRleF1bMV0uX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtID0gdHJ1ZTsKICAgICAgICAgICAgb3RoZXJJbmRleCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfQogICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgIGlmIChldmVudFsxXS5jb250ZW50VHlwZSkgewogICAgICAgIE9iamVjdC5hc3NpZ24oanVtcHMsIHN1YmNvbnRlbnQoZXZlbnRzLCBpbmRleDIpKTsKICAgICAgICBpbmRleDIgPSBqdW1wc1tpbmRleDJdOwogICAgICAgIG1vcmUgPSB0cnVlOwogICAgICB9CiAgICB9IGVsc2UgaWYgKGV2ZW50WzFdLl9jb250YWluZXIpIHsKICAgICAgb3RoZXJJbmRleCA9IGluZGV4MjsKICAgICAgbGluZUluZGV4ID0gdm9pZCAwOwogICAgICB3aGlsZSAob3RoZXJJbmRleC0tKSB7CiAgICAgICAgb3RoZXJFdmVudCA9IGV2ZW50cy5nZXQob3RoZXJJbmRleCk7CiAgICAgICAgaWYgKG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmciIHx8IG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpIHsKICAgICAgICAgIGlmIChvdGhlckV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICAgICAgICBldmVudHMuZ2V0KGxpbmVJbmRleClbMV0udHlwZSA9ICJsaW5lRW5kaW5nQmxhbmsiOwogICAgICAgICAgICB9CiAgICAgICAgICAgIG90aGVyRXZlbnRbMV0udHlwZSA9ICJsaW5lRW5kaW5nIjsKICAgICAgICAgICAgbGluZUluZGV4ID0gb3RoZXJJbmRleDsKICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiIHx8IG90aGVyRXZlbnRbMV0udHlwZSA9PT0gImxpc3RJdGVtSW5kZW50IikgewogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGxpbmVJbmRleCkgewogICAgICAgIGV2ZW50WzFdLmVuZCA9IHsKICAgICAgICAgIC4uLmV2ZW50cy5nZXQobGluZUluZGV4KVsxXS5zdGFydAogICAgICAgIH07CiAgICAgICAgcGFyYW1ldGVycyA9IGV2ZW50cy5zbGljZShsaW5lSW5kZXgsIGluZGV4Mik7CiAgICAgICAgcGFyYW1ldGVycy51bnNoaWZ0KGV2ZW50KTsKICAgICAgICBldmVudHMuc3BsaWNlKGxpbmVJbmRleCwgaW5kZXgyIC0gbGluZUluZGV4ICsgMSwgcGFyYW1ldGVycyk7CiAgICAgIH0KICAgIH0KICB9CiAgc3BsaWNlKGV2ZW50c0FycmF5LCAwLCBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFksIGV2ZW50cy5zbGljZSgwKSk7CiAgcmV0dXJuICFtb3JlOwp9CmZ1bmN0aW9uIHN1YmNvbnRlbnQoZXZlbnRzLCBldmVudEluZGV4KSB7CiAgY29uc3QgdG9rZW4gPSBldmVudHMuZ2V0KGV2ZW50SW5kZXgpWzFdOwogIGNvbnN0IGNvbnRleHQyID0gZXZlbnRzLmdldChldmVudEluZGV4KVsyXTsKICBsZXQgc3RhcnRQb3NpdGlvbiA9IGV2ZW50SW5kZXggLSAxOwogIGNvbnN0IHN0YXJ0UG9zaXRpb25zID0gW107CiAgbGV0IHRva2VuaXplciA9IHRva2VuLl90b2tlbml6ZXI7CiAgaWYgKCF0b2tlbml6ZXIpIHsKICAgIHRva2VuaXplciA9IGNvbnRleHQyLnBhcnNlclt0b2tlbi5jb250ZW50VHlwZV0odG9rZW4uc3RhcnQpOwogICAgaWYgKHRva2VuLl9jb250ZW50VHlwZVRleHRUcmFpbGluZykgewogICAgICB0b2tlbml6ZXIuX2NvbnRlbnRUeXBlVGV4dFRyYWlsaW5nID0gdHJ1ZTsKICAgIH0KICB9CiAgY29uc3QgY2hpbGRFdmVudHMgPSB0b2tlbml6ZXIuZXZlbnRzOwogIGNvbnN0IGp1bXBzID0gW107CiAgY29uc3QgZ2FwcyA9IHt9OwogIGxldCBzdHJlYW07CiAgbGV0IHByZXZpb3VzMzsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGN1cnJlbnQgPSB0b2tlbjsKICBsZXQgYWRqdXN0ID0gMDsKICBsZXQgc3RhcnQgPSAwOwogIGNvbnN0IGJyZWFrcyA9IFtzdGFydF07CiAgd2hpbGUgKGN1cnJlbnQpIHsKICAgIHdoaWxlIChldmVudHMuZ2V0KCsrc3RhcnRQb3NpdGlvbilbMV0gIT09IGN1cnJlbnQpIHsKICAgIH0KICAgIHN0YXJ0UG9zaXRpb25zLnB1c2goc3RhcnRQb3NpdGlvbik7CiAgICBpZiAoIWN1cnJlbnQuX3Rva2VuaXplcikgewogICAgICBzdHJlYW0gPSBjb250ZXh0Mi5zbGljZVN0cmVhbShjdXJyZW50KTsKICAgICAgaWYgKCFjdXJyZW50Lm5leHQpIHsKICAgICAgICBzdHJlYW0ucHVzaChudWxsKTsKICAgICAgfQogICAgICBpZiAocHJldmlvdXMzKSB7CiAgICAgICAgdG9rZW5pemVyLmRlZmluZVNraXAoY3VycmVudC5zdGFydCk7CiAgICAgIH0KICAgICAgaWYgKGN1cnJlbnQuX2lzSW5GaXJzdENvbnRlbnRPZkxpc3RJdGVtKSB7CiAgICAgICAgdG9rZW5pemVyLl9nZm1UYXNrbGlzdEZpcnN0Q29udGVudE9mTGlzdEl0ZW0gPSB0cnVlOwogICAgICB9CiAgICAgIHRva2VuaXplci53cml0ZShzdHJlYW0pOwogICAgICBpZiAoY3VycmVudC5faXNJbkZpcnN0Q29udGVudE9mTGlzdEl0ZW0pIHsKICAgICAgICB0b2tlbml6ZXIuX2dmbVRhc2tsaXN0Rmlyc3RDb250ZW50T2ZMaXN0SXRlbSA9IHZvaWQgMDsKICAgICAgfQogICAgfQogICAgcHJldmlvdXMzID0gY3VycmVudDsKICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgfQogIGN1cnJlbnQgPSB0b2tlbjsKICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZEV2ZW50cy5sZW5ndGgpIHsKICAgIGlmICgKICAgICAgLy8gRmluZCBhIHZvaWQgdG9rZW4gdGhhdCBpbmNsdWRlcyBhIGJyZWFrLgogICAgICBjaGlsZEV2ZW50c1tpbmRleDJdWzBdID09PSAiZXhpdCIgJiYgY2hpbGRFdmVudHNbaW5kZXgyIC0gMV1bMF0gPT09ICJlbnRlciIgJiYgY2hpbGRFdmVudHNbaW5kZXgyXVsxXS50eXBlID09PSBjaGlsZEV2ZW50c1tpbmRleDIgLSAxXVsxXS50eXBlICYmIGNoaWxkRXZlbnRzW2luZGV4Ml1bMV0uc3RhcnQubGluZSAhPT0gY2hpbGRFdmVudHNbaW5kZXgyXVsxXS5lbmQubGluZQogICAgKSB7CiAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgYnJlYWtzLnB1c2goc3RhcnQpOwogICAgICBjdXJyZW50Ll90b2tlbml6ZXIgPSB2b2lkIDA7CiAgICAgIGN1cnJlbnQucHJldmlvdXMgPSB2b2lkIDA7CiAgICAgIGN1cnJlbnQgPSBjdXJyZW50Lm5leHQ7CiAgICB9CiAgfQogIHRva2VuaXplci5ldmVudHMgPSBbXTsKICBpZiAoY3VycmVudCkgewogICAgY3VycmVudC5fdG9rZW5pemVyID0gdm9pZCAwOwogICAgY3VycmVudC5wcmV2aW91cyA9IHZvaWQgMDsKICB9IGVsc2UgewogICAgYnJlYWtzLnBvcCgpOwogIH0KICBpbmRleDIgPSBicmVha3MubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgY29uc3Qgc2xpY2UgPSBjaGlsZEV2ZW50cy5zbGljZShicmVha3NbaW5kZXgyXSwgYnJlYWtzW2luZGV4MiArIDFdKTsKICAgIGNvbnN0IHN0YXJ0MiA9IHN0YXJ0UG9zaXRpb25zLnBvcCgpOwogICAganVtcHMucHVzaChbc3RhcnQyLCBzdGFydDIgKyBzbGljZS5sZW5ndGggLSAxXSk7CiAgICBldmVudHMuc3BsaWNlKHN0YXJ0MiwgMiwgc2xpY2UpOwogIH0KICBqdW1wcy5yZXZlcnNlKCk7CiAgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwganVtcHMubGVuZ3RoKSB7CiAgICBnYXBzW2FkanVzdCArIGp1bXBzW2luZGV4Ml1bMF1dID0gYWRqdXN0ICsganVtcHNbaW5kZXgyXVsxXTsKICAgIGFkanVzdCArPSBqdW1wc1tpbmRleDJdWzFdIC0ganVtcHNbaW5kZXgyXVswXSAtIDE7CiAgfQogIHJldHVybiBnYXBzOwp9CnZhciBpbml0X21pY3JvbWFya191dGlsX3N1YnRva2VuaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtc3VidG9rZW5pemVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLXN1YnRva2VuaXplL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9zcGxpY2VfYnVmZmVyKCk7CiAgICBpbml0X3NwbGljZV9idWZmZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvbnRlbnQuanMKZnVuY3Rpb24gcmVzb2x2ZUNvbnRlbnQoZXZlbnRzKSB7CiAgc3VidG9rZW5pemUoZXZlbnRzKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplQ29udGVudChlZmZlY3RzLCBvazMpIHsKICBsZXQgcHJldmlvdXMzOwogIHJldHVybiBjaHVua1N0YXJ0OwogIGZ1bmN0aW9uIGNodW5rU3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImNvbnRlbnQiKTsKICAgIHByZXZpb3VzMyA9IGVmZmVjdHMuZW50ZXIoImNodW5rQ29udGVudCIsIHsKICAgICAgY29udGVudFR5cGU6ICJjb250ZW50IgogICAgfSk7CiAgICByZXR1cm4gY2h1bmtJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjaHVua0luc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBjb250ZW50RW5kKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGNvbnRpbnVhdGlvbkNvbnN0cnVjdCwgY29udGVudENvbnRpbnVlLCBjb250ZW50RW5kKShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNodW5rSW5zaWRlOwogIH0KICBmdW5jdGlvbiBjb250ZW50RW5kKGNvZGU0KSB7CiAgICBlZmZlY3RzLmV4aXQoImNodW5rQ29udGVudCIpOwogICAgZWZmZWN0cy5leGl0KCJjb250ZW50Iik7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGVudENvbnRpbnVlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJjaHVua0NvbnRlbnQiKTsKICAgIHByZXZpb3VzMy5uZXh0ID0gZWZmZWN0cy5lbnRlcigiY2h1bmtDb250ZW50IiwgewogICAgICBjb250ZW50VHlwZTogImNvbnRlbnQiLAogICAgICBwcmV2aW91czogcHJldmlvdXMzCiAgICB9KTsKICAgIHByZXZpb3VzMyA9IHByZXZpb3VzMy5uZXh0OwogICAgcmV0dXJuIGNodW5rSW5zaWRlOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRpbnVhdGlvbihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnRMb29rYWhlYWQ7CiAgZnVuY3Rpb24gc3RhcnRMb29rYWhlYWQoY29kZTQpIHsKICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtDb250ZW50Iik7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHByZWZpeGVkLCAibGluZVByZWZpeCIpOwogIH0KICBmdW5jdGlvbiBwcmVmaXhlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIGlmICghc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZGlzYWJsZS5udWxsLmluY2x1ZGVzKCJjb2RlSW5kZW50ZWQiKSAmJiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpbmVQcmVmaXgiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID49IDQpIHsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gZWZmZWN0cy5pbnRlcnJ1cHQoc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMuZmxvdywgbm9rLCBvazMpKGNvZGU0KTsKICB9Cn0KdmFyIGNvbnRlbnQsIGNvbnRpbnVhdGlvbkNvbnN0cnVjdDsKdmFyIGluaXRfY29udGVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2NvbnRlbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc3VidG9rZW5pemUoKTsKICAgIGNvbnRlbnQgPSB7CiAgICAgIHJlc29sdmU6IHJlc29sdmVDb250ZW50LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250ZW50CiAgICB9OwogICAgY29udGludWF0aW9uQ29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250aW51YXRpb24KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbkAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktZGVzdGluYXRpb24vaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeURlc3RpbmF0aW9uKGVmZmVjdHMsIG9rMywgbm9rLCB0eXBlNSwgbGl0ZXJhbFR5cGUsIGxpdGVyYWxNYXJrZXJUeXBlLCByYXdUeXBlLCBzdHJpbmdUeXBlLCBtYXgzKSB7CiAgY29uc3QgbGltaXQgPSBtYXgzIHx8IE51bWJlci5QT1NJVElWRV9JTkZJTklUWTsKICBsZXQgYmFsYW5jZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYwKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIodHlwZTUpOwogICAgICBlZmZlY3RzLmVudGVyKGxpdGVyYWxUeXBlKTsKICAgICAgZWZmZWN0cy5lbnRlcihsaXRlcmFsTWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChsaXRlcmFsTWFya2VyVHlwZSk7CiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzIgfHwgY29kZTQgPT09IDQxIHx8IGFzY2lpQ29udHJvbChjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKHR5cGU1KTsKICAgIGVmZmVjdHMuZW50ZXIocmF3VHlwZSk7CiAgICBlZmZlY3RzLmVudGVyKHN0cmluZ1R5cGUpOwogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gcmF3Mihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbE1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQobGl0ZXJhbFR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgZWZmZWN0cy5lbnRlcihzdHJpbmdUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIiwgewogICAgICBjb250ZW50VHlwZTogInN0cmluZyIKICAgIH0pOwogICAgcmV0dXJuIGVuY2xvc2VkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5jbG9zZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5leGl0KCJjaHVua1N0cmluZyIpOwogICAgICBlZmZlY3RzLmV4aXQoc3RyaW5nVHlwZSk7CiAgICAgIHJldHVybiBlbmNsb3NlZEJlZm9yZShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYwIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGVuY2xvc2VkRXNjYXBlIDogZW5jbG9zZWQ7CiAgfQogIGZ1bmN0aW9uIGVuY2xvc2VkRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MiB8fCBjb2RlNCA9PT0gOTIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGVuY2xvc2VkOwogICAgfQogICAgcmV0dXJuIGVuY2xvc2VkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmF3Mihjb2RlNCkgewogICAgaWYgKCFiYWxhbmNlICYmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gNDEgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgZWZmZWN0cy5leGl0KHN0cmluZ1R5cGUpOwogICAgICBlZmZlY3RzLmV4aXQocmF3VHlwZSk7CiAgICAgIGVmZmVjdHMuZXhpdCh0eXBlNSk7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgaWYgKGJhbGFuY2UgPCBsaW1pdCAmJiBjb2RlNCA9PT0gNDApIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYmFsYW5jZSsrOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYmFsYW5jZS0tOwogICAgICByZXR1cm4gcmF3MjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMzIgfHwgY29kZTQgPT09IDQwIHx8IGFzY2lpQ29udHJvbChjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IHJhd0VzY2FwZSA6IHJhdzI7CiAgfQogIGZ1bmN0aW9uIHJhd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0MCB8fCBjb2RlNCA9PT0gNDEgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiByYXcyOwogICAgfQogICAgcmV0dXJuIHJhdzIoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9kZXN0aW5hdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LWRlc3RpbmF0aW9uQDIuMC4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZmFjdG9yeS1kZXN0aW5hdGlvbi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktbGFiZWxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2luZGV4LmpzCmZ1bmN0aW9uIGZhY3RvcnlMYWJlbChlZmZlY3RzLCBvazMsIG5vaywgdHlwZTUsIG1hcmtlclR5cGUsIHN0cmluZ1R5cGUpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IHNpemUgPSAwOwogIGxldCBzZWVuOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICBlZmZlY3RzLmVudGVyKG1hcmtlclR5cGUpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICByZXR1cm4gYXRCcmVhazsKICB9CiAgZnVuY3Rpb24gYXRCcmVhayhjb2RlNCkgewogICAgaWYgKHNpemUgPiA5OTkgfHwgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MyAmJiAhc2VlbiB8fCAvLyBUbyBkbzogcmVtb3ZlIGluIHRoZSBmdXR1cmUgb25jZSB3ZeKAmXZlIHN3aXRjaGVkIGZyb20KICAgIC8vIGBtaWNyb21hcmstZXh0ZW5zaW9uLWZvb3Rub3RlYCB0byBgbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVgLAogICAgLy8gd2hpY2ggZG9lc27igJl0IG5lZWQgdGhpcy4KICAgIC8vIEhpZGRlbiBmb290bm90ZXMgaG9vay4KICAgIC8qIGM4IGlnbm9yZSBuZXh0IDMgKi8KICAgIGNvZGU0ID09PSA5NCAmJiAhc2l6ZSAmJiAiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCIgaW4gc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgZWZmZWN0cy5lbnRlcihtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KG1hcmtlclR5cGUpOwogICAgICBlZmZlY3RzLmV4aXQodHlwZTUpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGF0QnJlYWs7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJjaHVua1N0cmluZyIsIHsKICAgICAgY29udGVudFR5cGU6ICJzdHJpbmciCiAgICB9KTsKICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MyB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpIHx8IHNpemUrKyA+IDk5OSkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rU3RyaW5nIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBpZiAoIXNlZW4pIHNlZW4gPSAhbWFya2Rvd25TcGFjZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gbGFiZWxFc2NhcGUgOiBsYWJlbEluc2lkZTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFc2NhcGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gOTEgfHwgY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBzaXplKys7CiAgICAgIHJldHVybiBsYWJlbEluc2lkZTsKICAgIH0KICAgIHJldHVybiBsYWJlbEluc2lkZShjb2RlNCk7CiAgfQp9CnZhciBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3RvcnktbGFiZWxAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LWxhYmVsL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS10aXRsZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktdGl0bGUvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIG9rMywgbm9rLCB0eXBlNSwgbWFya2VyVHlwZSwgc3RyaW5nVHlwZSkgewogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM0IHx8IGNvZGU0ID09PSAzOSB8fCBjb2RlNCA9PT0gNDApIHsKICAgICAgZWZmZWN0cy5lbnRlcih0eXBlNSk7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgbWFya2VyID0gY29kZTQgPT09IDQwID8gNDEgOiBjb2RlNDsKICAgICAgcmV0dXJuIGJlZ2luMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWdpbjMoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIobWFya2VyVHlwZSk7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdChtYXJrZXJUeXBlKTsKICAgICAgZWZmZWN0cy5leGl0KHR5cGU1KTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoc3RyaW5nVHlwZSk7CiAgICByZXR1cm4gYXRCcmVhayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuZXhpdChzdHJpbmdUeXBlKTsKICAgICAgcmV0dXJuIGJlZ2luMyhtYXJrZXIpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhdEJyZWFrLCAibGluZVByZWZpeCIpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAic3RyaW5nIgogICAgfSk7CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlciB8fCBjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb2RlNCA9PT0gOTIgPyBlc2NhcGUgOiBpbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIgfHwgY29kZTQgPT09IDkyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICByZXR1cm4gaW5zaWRlKGNvZGU0KTsKICB9Cn0KdmFyIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfdGl0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZmFjdG9yeS10aXRsZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3RvcnktdGl0bGUvaW5kZXguanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2VAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1mYWN0b3J5LXdoaXRlc3BhY2UvaW5kZXguanMKZnVuY3Rpb24gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgb2szKSB7CiAgbGV0IHNlZW47CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgcmV0dXJuIHN0YXJ0OwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgc3RhcnQsIHNlZW4gPyAibGluZVByZWZpeCIgOiAibGluZVN1ZmZpeCIpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQp2YXIgaW5pdF9taWNyb21hcmtfZmFjdG9yeV93aGl0ZXNwYWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWZhY3Rvcnktd2hpdGVzcGFjZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvZGVmaW5pdGlvbi5qcwpmdW5jdGlvbiB0b2tlbml6ZURlZmluaXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGlkZW50aWZpZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJkZWZpbml0aW9uIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeUxhYmVsLmNhbGwoCiAgICAgIHNlbGYyLAogICAgICBlZmZlY3RzLAogICAgICBsYWJlbEFmdGVyLAogICAgICAvLyBOb3RlOiB3ZSBkb27igJl0IG5lZWQgdG8gcmVzZXQgdGhlIHdheSBgbWFya2Rvd24tcnNgIGRvZXMuCiAgICAgIG5vaywKICAgICAgImRlZmluaXRpb25MYWJlbCIsCiAgICAgICJkZWZpbml0aW9uTGFiZWxNYXJrZXIiLAogICAgICAiZGVmaW5pdGlvbkxhYmVsU3RyaW5nIgogICAgKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxhYmVsQWZ0ZXIoY29kZTQpIHsKICAgIGlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYyLnNsaWNlU2VyaWFsaXplKHNlbGYyLmV2ZW50c1tzZWxmMi5ldmVudHMubGVuZ3RoIC0gMV1bMV0pLnNsaWNlKDEsIC0xKSk7CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImRlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIHJldHVybiBtYXJrZXJBZnRlcjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBtYXJrZXJBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgZGVzdGluYXRpb25CZWZvcmUpKGNvZGU0KSA6IGRlc3RpbmF0aW9uQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZGVzdGluYXRpb25CZWZvcmUoY29kZTQpIHsKICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oCiAgICAgIGVmZmVjdHMsCiAgICAgIGRlc3RpbmF0aW9uQWZ0ZXIsCiAgICAgIC8vIE5vdGU6IHdlIGRvbuKAmXQgbmVlZCB0byByZXNldCB0aGUgd2F5IGBtYXJrZG93bi1yc2AgZG9lcy4KICAgICAgbm9rLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uIiwKICAgICAgImRlZmluaXRpb25EZXN0aW5hdGlvbkxpdGVyYWwiLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uTGl0ZXJhbE1hcmtlciIsCiAgICAgICJkZWZpbml0aW9uRGVzdGluYXRpb25SYXciLAogICAgICAiZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nIgogICAgKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlc3RpbmF0aW9uQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQodGl0bGVCZWZvcmUsIGFmdGVyLCBhZnRlcikoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyV2hpdGVzcGFjZSwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiBhZnRlcldoaXRlc3BhY2UoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhZnRlcldoaXRlc3BhY2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGVmaW5pdGlvbiIpOwogICAgICBzZWxmMi5wYXJzZXIuZGVmaW5lZC5wdXNoKGlkZW50aWZpZXIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVRpdGxlQmVmb3JlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHRpdGxlQmVmb3JlMjsKICBmdW5jdGlvbiB0aXRsZUJlZm9yZTIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIGJlZm9yZU1hcmtlcikoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlTWFya2VyKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIHRpdGxlQWZ0ZXIsIG5vaywgImRlZmluaXRpb25UaXRsZSIsICJkZWZpbml0aW9uVGl0bGVNYXJrZXIiLCAiZGVmaW5pdGlvblRpdGxlU3RyaW5nIikoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0aXRsZUFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25TcGFjZShjb2RlNCkgPyBmYWN0b3J5U3BhY2UoZWZmZWN0cywgdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZSwgIndoaXRlc3BhY2UiKShjb2RlNCkgOiB0aXRsZUFmdGVyT3B0aW9uYWxXaGl0ZXNwYWNlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGl0bGVBZnRlck9wdGlvbmFsV2hpdGVzcGFjZShjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGRlZmluaXRpb24yLCB0aXRsZUJlZm9yZTsKdmFyIGluaXRfZGVmaW5pdGlvbjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9kZWZpbml0aW9uLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfZGVzdGluYXRpb24oKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfbGFiZWwoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3RvcnlfdGl0bGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfd2hpdGVzcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGRlZmluaXRpb24yID0gewogICAgICBuYW1lOiAiZGVmaW5pdGlvbiIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZURlZmluaXRpb24KICAgIH07CiAgICB0aXRsZUJlZm9yZSA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplVGl0bGVCZWZvcmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcwpmdW5jdGlvbiB0b2tlbml6ZUhhcmRCcmVha0VzY2FwZShlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiaGFyZEJyZWFrRXNjYXBlIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5leGl0KCJoYXJkQnJlYWtFc2NhcGUiKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGhhcmRCcmVha0VzY2FwZTsKdmFyIGluaXRfaGFyZF9icmVha19lc2NhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oYXJkLWJyZWFrLWVzY2FwZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaGFyZEJyZWFrRXNjYXBlID0gewogICAgICBuYW1lOiAiaGFyZEJyZWFrRXNjYXBlIiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSGFyZEJyZWFrRXNjYXBlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaGVhZGluZy1hdHguanMKZnVuY3Rpb24gcmVzb2x2ZUhlYWRpbmdBdHgoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBjb250ZW50RW5kID0gZXZlbnRzLmxlbmd0aCAtIDI7CiAgbGV0IGNvbnRlbnRTdGFydCA9IDM7CiAgbGV0IGNvbnRlbnQzOwogIGxldCB0ZXh0OTsKICBpZiAoZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0udHlwZSA9PT0gIndoaXRlc3BhY2UiKSB7CiAgICBjb250ZW50U3RhcnQgKz0gMjsKICB9CiAgaWYgKGNvbnRlbnRFbmQgLSAyID4gY29udGVudFN0YXJ0ICYmIGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSAid2hpdGVzcGFjZSIpIHsKICAgIGNvbnRlbnRFbmQgLT0gMjsKICB9CiAgaWYgKGV2ZW50c1tjb250ZW50RW5kXVsxXS50eXBlID09PSAiYXR4SGVhZGluZ1NlcXVlbmNlIiAmJiAoY29udGVudFN0YXJ0ID09PSBjb250ZW50RW5kIC0gMSB8fCBjb250ZW50RW5kIC0gNCA+IGNvbnRlbnRTdGFydCAmJiBldmVudHNbY29udGVudEVuZCAtIDJdWzFdLnR5cGUgPT09ICJ3aGl0ZXNwYWNlIikpIHsKICAgIGNvbnRlbnRFbmQgLT0gY29udGVudFN0YXJ0ICsgMSA9PT0gY29udGVudEVuZCA/IDIgOiA0OwogIH0KICBpZiAoY29udGVudEVuZCA+IGNvbnRlbnRTdGFydCkgewogICAgY29udGVudDMgPSB7CiAgICAgIHR5cGU6ICJhdHhIZWFkaW5nVGV4dCIsCiAgICAgIHN0YXJ0OiBldmVudHNbY29udGVudFN0YXJ0XVsxXS5zdGFydCwKICAgICAgZW5kOiBldmVudHNbY29udGVudEVuZF1bMV0uZW5kCiAgICB9OwogICAgdGV4dDkgPSB7CiAgICAgIHR5cGU6ICJjaHVua1RleHQiLAogICAgICBzdGFydDogZXZlbnRzW2NvbnRlbnRTdGFydF1bMV0uc3RhcnQsCiAgICAgIGVuZDogZXZlbnRzW2NvbnRlbnRFbmRdWzFdLmVuZCwKICAgICAgY29udGVudFR5cGU6ICJ0ZXh0IgogICAgfTsKICAgIHNwbGljZShldmVudHMsIGNvbnRlbnRTdGFydCwgY29udGVudEVuZCAtIGNvbnRlbnRTdGFydCArIDEsIFtbImVudGVyIiwgY29udGVudDMsIGNvbnRleHQyXSwgWyJlbnRlciIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZXhpdCIsIHRleHQ5LCBjb250ZXh0Ml0sIFsiZXhpdCIsIGNvbnRlbnQzLCBjb250ZXh0Ml1dKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUhlYWRpbmdBdHgoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nIik7CiAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJhdHhIZWFkaW5nU2VxdWVuY2UiKTsKICAgIHJldHVybiBzZXF1ZW5jZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzUgJiYgc2l6ZSsrIDwgNikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gc2VxdWVuY2VPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZ1NlcXVlbmNlIik7CiAgICAgIHJldHVybiBhdEJyZWFrKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgICByZXR1cm4gc2VxdWVuY2VGdXJ0aGVyKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZyIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiYXR4SGVhZGluZ1RleHQiKTsKICAgIHJldHVybiBkYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gc2VxdWVuY2VGdXJ0aGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDM1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZXF1ZW5jZUZ1cnRoZXI7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoImF0eEhlYWRpbmdTZXF1ZW5jZSIpOwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDM1IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiYXR4SGVhZGluZ1RleHQiKTsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KfQp2YXIgaGVhZGluZ0F0eDsKdmFyIGluaXRfaGVhZGluZ19hdHggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9oZWFkaW5nLWF0eC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBoZWFkaW5nQXR4ID0gewogICAgICBuYW1lOiAiaGVhZGluZ0F0eCIsCiAgICAgIHJlc29sdmU6IHJlc29sdmVIZWFkaW5nQXR4LAogICAgICB0b2tlbml6ZTogdG9rZW5pemVIZWFkaW5nQXR4CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZUAyLjAuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLXV0aWwtaHRtbC10YWctbmFtZS9pbmRleC5qcwp2YXIgaHRtbEJsb2NrTmFtZXMsIGh0bWxSYXdOYW1lczsKdmFyIGluaXRfbWljcm9tYXJrX3V0aWxfaHRtbF90YWdfbmFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWVAMi4wLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay11dGlsLWh0bWwtdGFnLW5hbWUvaW5kZXguanMiKCkgewogICAgaHRtbEJsb2NrTmFtZXMgPSBbCiAgICAgICJhZGRyZXNzIiwKICAgICAgImFydGljbGUiLAogICAgICAiYXNpZGUiLAogICAgICAiYmFzZSIsCiAgICAgICJiYXNlZm9udCIsCiAgICAgICJibG9ja3F1b3RlIiwKICAgICAgImJvZHkiLAogICAgICAiY2FwdGlvbiIsCiAgICAgICJjZW50ZXIiLAogICAgICAiY29sIiwKICAgICAgImNvbGdyb3VwIiwKICAgICAgImRkIiwKICAgICAgImRldGFpbHMiLAogICAgICAiZGlhbG9nIiwKICAgICAgImRpciIsCiAgICAgICJkaXYiLAogICAgICAiZGwiLAogICAgICAiZHQiLAogICAgICAiZmllbGRzZXQiLAogICAgICAiZmlnY2FwdGlvbiIsCiAgICAgICJmaWd1cmUiLAogICAgICAiZm9vdGVyIiwKICAgICAgImZvcm0iLAogICAgICAiZnJhbWUiLAogICAgICAiZnJhbWVzZXQiLAogICAgICAiaDEiLAogICAgICAiaDIiLAogICAgICAiaDMiLAogICAgICAiaDQiLAogICAgICAiaDUiLAogICAgICAiaDYiLAogICAgICAiaGVhZCIsCiAgICAgICJoZWFkZXIiLAogICAgICAiaHIiLAogICAgICAiaHRtbCIsCiAgICAgICJpZnJhbWUiLAogICAgICAibGVnZW5kIiwKICAgICAgImxpIiwKICAgICAgImxpbmsiLAogICAgICAibWFpbiIsCiAgICAgICJtZW51IiwKICAgICAgIm1lbnVpdGVtIiwKICAgICAgIm5hdiIsCiAgICAgICJub2ZyYW1lcyIsCiAgICAgICJvbCIsCiAgICAgICJvcHRncm91cCIsCiAgICAgICJvcHRpb24iLAogICAgICAicCIsCiAgICAgICJwYXJhbSIsCiAgICAgICJzZWFyY2giLAogICAgICAic2VjdGlvbiIsCiAgICAgICJzdW1tYXJ5IiwKICAgICAgInRhYmxlIiwKICAgICAgInRib2R5IiwKICAgICAgInRkIiwKICAgICAgInRmb290IiwKICAgICAgInRoIiwKICAgICAgInRoZWFkIiwKICAgICAgInRpdGxlIiwKICAgICAgInRyIiwKICAgICAgInRyYWNrIiwKICAgICAgInVsIgogICAgXTsKICAgIGh0bWxSYXdOYW1lcyA9IFsicHJlIiwgInNjcmlwdCIsICJzdHlsZSIsICJ0ZXh0YXJlYSJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC1mbG93LmpzCmZ1bmN0aW9uIHJlc29sdmVUb0h0bWxGbG93KGV2ZW50cykgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIHdoaWxlIChpbmRleDItLSkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJodG1sRmxvdyIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIGlmIChpbmRleDIgPiAxICYmIGV2ZW50c1tpbmRleDIgLSAyXVsxXS50eXBlID09PSAibGluZVByZWZpeCIpIHsKICAgIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4MiAtIDJdWzFdLnN0YXJ0OwogICAgZXZlbnRzW2luZGV4MiArIDFdWzFdLnN0YXJ0ID0gZXZlbnRzW2luZGV4MiAtIDJdWzFdLnN0YXJ0OwogICAgZXZlbnRzLnNwbGljZShpbmRleDIgLSAyLCAyKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUh0bWxGbG93KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgbGV0IGNsb3NpbmdUYWc7CiAgbGV0IGJ1ZmZlcjI7CiAgbGV0IGluZGV4MjsKICBsZXQgbWFya2VyQjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIHJldHVybiBiZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImh0bWxGbG93Iik7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvd0RhdGEiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZGVjbGFyYXRpb25PcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBjbG9zaW5nVGFnID0gdHJ1ZTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlU3RhcnQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDM7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIGlmIChhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyID0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdOYW1lOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBtYXJrZXIgPSAyOwogICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IDU7CiAgICAgIGluZGV4MiA9IDA7CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gNDsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCA/IG9rMyA6IGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YU9wZW5JbnNpZGUoY29kZTQpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICJDREFUQVsiOwogICAgaWYgKGNvZGU0ID09PSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIrKykpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgaWYgKGluZGV4MiA9PT0gdmFsdWUyLmxlbmd0aCkgewogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMgOiBjb250aW51YXRpb247CiAgICAgIH0KICAgICAgcmV0dXJuIGNkYXRhT3Blbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgYnVmZmVyMiA9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gdGFnTmFtZTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBjb25zdCBzbGFzaCA9IGNvZGU0ID09PSA0NzsKICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlcjIudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKCFzbGFzaCAmJiAhY2xvc2luZ1RhZyAmJiBodG1sUmF3TmFtZXMuaW5jbHVkZXMobmFtZSkpIHsKICAgICAgICBtYXJrZXIgPSAxOwogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogY29udGludWF0aW9uKGNvZGU0KTsKICAgICAgfQogICAgICBpZiAoaHRtbEJsb2NrTmFtZXMuaW5jbHVkZXMoYnVmZmVyMi50b0xvd2VyQ2FzZSgpKSkgewogICAgICAgIG1hcmtlciA9IDY7CiAgICAgICAgaWYgKHNsYXNoKSB7CiAgICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgICAgcmV0dXJuIGJhc2ljU2VsZkNsb3Npbmc7CiAgICAgICAgfQogICAgICAgIHJldHVybiBzZWxmMi5pbnRlcnJ1cHQgPyBvazMoY29kZTQpIDogY29udGludWF0aW9uKGNvZGU0KTsKICAgICAgfQogICAgICBtYXJrZXIgPSA3OwogICAgICByZXR1cm4gc2VsZjIuaW50ZXJydXB0ICYmICFzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA/IG5vayhjb2RlNCkgOiBjbG9zaW5nVGFnID8gY29tcGxldGVDbG9zaW5nVGFnQWZ0ZXIoY29kZTQpIDogY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdOYW1lOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJhc2ljU2VsZkNsb3NpbmcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHNlbGYyLmludGVycnVwdCA/IG9rMyA6IGNvbnRpbnVhdGlvbjsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUNsb3NpbmdUYWdBZnRlcjsKICAgIH0KICAgIHJldHVybiBjb21wbGV0ZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVFbmQ7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDU4IHx8IGNvZGU0ID09PSA5NSB8fCBhc2NpaUFscGhhKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgY29kZTQgPT09IDQ2IHx8IGNvZGU0ID09PSA1OCB8fCBjb2RlNCA9PT0gOTUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21wbGV0ZUF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQmVmb3JlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NikgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlckIgPSBjb2RlNDsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVVucXVvdGVkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXJCKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlckIgPSBudWxsOwogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MCB8fCBjb2RlNCA9PT0gNjEgfHwgY29kZTQgPT09IDYyIHx8IGNvZGU0ID09PSA5NiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gY29tcGxldGVBdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb21wbGV0ZUF0dHJpYnV0ZVZhbHVlVW5xdW90ZWQ7CiAgfQogIGZ1bmN0aW9uIGNvbXBsZXRlQXR0cmlidXRlVmFsdWVRdW90ZWRBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbXBsZXRlQXR0cmlidXRlTmFtZUJlZm9yZShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVFbmQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29tcGxldGVBZnRlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbXBsZXRlQWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1ICYmIG1hcmtlciA9PT0gMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQ29tbWVudEluc2lkZTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjAgJiYgbWFya2VyID09PSAxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25SYXdUYWdPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MiAmJiBtYXJrZXIgPT09IDQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA2MyAmJiBtYXJrZXIgPT09IDMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkRlY2xhcmF0aW9uSW5zaWRlOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MyAmJiBtYXJrZXIgPT09IDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNkYXRhSW5zaWRlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkgJiYgKG1hcmtlciA9PT0gNiB8fCBtYXJrZXIgPT09IDcpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3dEYXRhIik7CiAgICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGJsYW5rTGluZUJlZm9yZSwgY29udGludWF0aW9uQWZ0ZXIsIGNvbnRpbnVhdGlvblN0YXJ0KShjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImh0bWxGbG93RGF0YSIpOwogICAgICByZXR1cm4gY29udGludWF0aW9uU3RhcnQoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjb250aW51YXRpb247CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvblN0YXJ0KGNvZGU0KSB7CiAgICByZXR1cm4gZWZmZWN0cy5jaGVjayhub25MYXp5Q29udGludWF0aW9uU3RhcnQsIGNvbnRpbnVhdGlvblN0YXJ0Tm9uTGF6eSwgY29udGludWF0aW9uQWZ0ZXIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uU3RhcnROb25MYXp5KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICByZXR1cm4gY29udGludWF0aW9uQmVmb3JlOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25CZWZvcmUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVybiBjb250aW51YXRpb25TdGFydChjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJodG1sRmxvd0RhdGEiKTsKICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25Db21tZW50SW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25SYXdUYWdPcGVuKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ3KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGJ1ZmZlcjIgPSAiIjsKICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvblJhd0VuZFRhZzsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25SYXdFbmRUYWcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjIpIHsKICAgICAgY29uc3QgbmFtZSA9IGJ1ZmZlcjIudG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGh0bWxSYXdOYW1lcy5pbmNsdWRlcyhuYW1lKSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogICAgICB9CiAgICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpICYmIGJ1ZmZlcjIubGVuZ3RoIDwgOCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBidWZmZXIyICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uUmF3RW5kVGFnOwogICAgfQogICAgcmV0dXJuIGNvbnRpbnVhdGlvbihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnRpbnVhdGlvbkNkYXRhSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZTsKICAgIH0KICAgIHJldHVybiBjb250aW51YXRpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25EZWNsYXJhdGlvbkluc2lkZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uQ2xvc2U7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1ICYmIG1hcmtlciA9PT0gMikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29udGludWF0aW9uRGVjbGFyYXRpb25JbnNpZGU7CiAgICB9CiAgICByZXR1cm4gY29udGludWF0aW9uKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGludWF0aW9uQ2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiaHRtbEZsb3dEYXRhIik7CiAgICAgIHJldHVybiBjb250aW51YXRpb25BZnRlcihjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbnRpbnVhdGlvbkNsb3NlOwogIH0KICBmdW5jdGlvbiBjb250aW51YXRpb25BZnRlcihjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJodG1sRmxvdyIpOwogICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0gPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVCbGFua0xpbmVCZWZvcmUoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQoYmxhbmtMaW5lLCBvazMsIG5vayk7CiAgfQp9CnZhciBodG1sRmxvdywgYmxhbmtMaW5lQmVmb3JlLCBub25MYXp5Q29udGludWF0aW9uU3RhcnQ7CnZhciBpbml0X2h0bWxfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2h0bWwtZmxvdy5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9odG1sX3RhZ19uYW1lKCk7CiAgICBpbml0X2JsYW5rX2xpbmUoKTsKICAgIGh0bWxGbG93ID0gewogICAgICBjb25jcmV0ZTogdHJ1ZSwKICAgICAgbmFtZTogImh0bWxGbG93IiwKICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9IdG1sRmxvdywKICAgICAgdG9rZW5pemU6IHRva2VuaXplSHRtbEZsb3cKICAgIH07CiAgICBibGFua0xpbmVCZWZvcmUgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUJsYW5rTGluZUJlZm9yZQogICAgfTsKICAgIG5vbkxhenlDb250aW51YXRpb25TdGFydCA9IHsKICAgICAgcGFydGlhbDogdHJ1ZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTm9uTGF6eUNvbnRpbnVhdGlvblN0YXJ0CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC10ZXh0LmpzCmZ1bmN0aW9uIHRva2VuaXplSHRtbFRleHQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IG1hcmtlcjsKICBsZXQgaW5kZXgyOwogIGxldCByZXR1cm5TdGF0ZTsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImh0bWxUZXh0Iik7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dERhdGEiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAzMykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZGVjbGFyYXRpb25PcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2VTdGFydDsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNjMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluc3RydWN0aW9uOwogICAgfQogICAgaWYgKGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY29tbWVudE9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkxKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGluZGV4MiA9IDA7CiAgICAgIHJldHVybiBjZGF0YU9wZW5JbnNpZGU7CiAgICB9CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRlY2xhcmF0aW9uOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnRPcGVuSW5zaWRlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50RW5kOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbW1lbnQzKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb21tZW50Q2xvc2U7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IGNvbW1lbnQzOwogICAgICByZXR1cm4gbGluZUVuZGluZ0JlZm9yZShjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvbW1lbnQzOwogIH0KICBmdW5jdGlvbiBjb21tZW50Q2xvc2UoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGNvbW1lbnRFbmQ7CiAgICB9CiAgICByZXR1cm4gY29tbWVudDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjb21tZW50RW5kKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IDYyID8gZW5kMyhjb2RlNCkgOiBjb2RlNCA9PT0gNDUgPyBjb21tZW50Q2xvc2UoY29kZTQpIDogY29tbWVudDMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YU9wZW5JbnNpZGUoY29kZTQpIHsKICAgIGNvbnN0IHZhbHVlMiA9ICJDREFUQVsiOwogICAgaWYgKGNvZGU0ID09PSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIrKykpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGluZGV4MiA9PT0gdmFsdWUyLmxlbmd0aCA/IGNkYXRhIDogY2RhdGFPcGVuSW5zaWRlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNkYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjZGF0YUNsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBjZGF0YTsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBjZGF0YTsKICB9CiAgZnVuY3Rpb24gY2RhdGFDbG9zZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gY2RhdGFFbmQ7CiAgICB9CiAgICByZXR1cm4gY2RhdGEoY29kZTQpOwogIH0KICBmdW5jdGlvbiBjZGF0YUVuZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjZGF0YUVuZDsKICAgIH0KICAgIHJldHVybiBjZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRlY2xhcmF0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYyKSB7CiAgICAgIHJldHVybiBlbmQzKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gZGVjbGFyYXRpb247CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZGVjbGFyYXRpb247CiAgfQogIGZ1bmN0aW9uIGluc3RydWN0aW9uKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDYzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnN0cnVjdGlvbkNsb3NlOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSBpbnN0cnVjdGlvbjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBpbnN0cnVjdGlvbjsKICB9CiAgZnVuY3Rpb24gaW5zdHJ1Y3Rpb25DbG9zZShjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA2MiA/IGVuZDMoY29kZTQpIDogaW5zdHJ1Y3Rpb24oY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdDbG9zZVN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoYXNjaWlBbHBoYShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ0Nsb3NlOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ0Nsb3NlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnQ2xvc2U7CiAgICB9CiAgICByZXR1cm4gdGFnQ2xvc2VCZXR3ZWVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnQ2xvc2VCZXR3ZWVuKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ0Nsb3NlQmV0d2VlbjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdDbG9zZUJldHdlZW47CiAgICB9CiAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDUgfHwgYXNjaWlBbHBoYW51bWVyaWMoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA0NyB8fCBjb2RlNCA9PT0gNjIgfHwgbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQmV0d2Vlbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NykgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gZW5kMzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGEoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkJldHdlZW47CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW47CiAgICB9CiAgICByZXR1cm4gZW5kMyhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA0NiB8fCBjb2RlNCA9PT0gNTggfHwgY29kZTQgPT09IDk1IHx8IGFzY2lpQWxwaGFudW1lcmljKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWU7CiAgICB9CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHRhZ09wZW5BdHRyaWJ1dGVOYW1lQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNjEpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHJldHVyblN0YXRlID0gdGFnT3BlbkF0dHJpYnV0ZU5hbWVBZnRlcjsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlTmFtZUFmdGVyOwogICAgfQogICAgcmV0dXJuIHRhZ09wZW5CZXR3ZWVuKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MSB8fCBjb2RlNCA9PT0gNjIgfHwgY29kZTQgPT09IDk2KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgbWFya2VyID0gY29kZTQ7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm5TdGF0ZSA9IHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZUJlZm9yZTsKICAgICAgcmV0dXJuIGxpbmVFbmRpbmdCZWZvcmUoY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVCZWZvcmU7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVVucXVvdGVkOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIG1hcmtlciA9IHZvaWQgMDsKICAgICAgcmV0dXJuIHRhZ09wZW5BdHRyaWJ1dGVWYWx1ZVF1b3RlZEFmdGVyOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuU3RhdGUgPSB0YWdPcGVuQXR0cmlidXRlVmFsdWVRdW90ZWQ7CiAgICAgIHJldHVybiBsaW5lRW5kaW5nQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkOwogIH0KICBmdW5jdGlvbiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IGNvZGU0ID09PSAzNCB8fCBjb2RlNCA9PT0gMzkgfHwgY29kZTQgPT09IDYwIHx8IGNvZGU0ID09PSA2MSB8fCBjb2RlNCA9PT0gOTYpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDQ3IHx8IGNvZGU0ID09PSA2MiB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gdGFnT3BlbkJldHdlZW4oY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiB0YWdPcGVuQXR0cmlidXRlVmFsdWVVbnF1b3RlZDsKICB9CiAgZnVuY3Rpb24gdGFnT3BlbkF0dHJpYnV0ZVZhbHVlUXVvdGVkQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDcgfHwgY29kZTQgPT09IDYyIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiB0YWdPcGVuQmV0d2Vlbihjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZW5kMyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA2MikgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImh0bWxUZXh0RGF0YSIpOwogICAgICBlZmZlY3RzLmV4aXQoImh0bWxUZXh0Iik7CiAgICAgIHJldHVybiBvazM7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGluZUVuZGluZ0JlZm9yZShjb2RlNCkgewogICAgZWZmZWN0cy5leGl0KCJodG1sVGV4dERhdGEiKTsKICAgIGVmZmVjdHMuZW50ZXIoImxpbmVFbmRpbmciKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmciKTsKICAgIHJldHVybiBsaW5lRW5kaW5nQWZ0ZXI7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdBZnRlcihjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGxpbmVFbmRpbmdBZnRlclByZWZpeCwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpIDogbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGluZUVuZGluZ0FmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJodG1sVGV4dERhdGEiKTsKICAgIHJldHVybiByZXR1cm5TdGF0ZShjb2RlNCk7CiAgfQp9CnZhciBodG1sVGV4dDsKdmFyIGluaXRfaHRtbF90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvaHRtbC10ZXh0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBodG1sVGV4dCA9IHsKICAgICAgbmFtZTogImh0bWxUZXh0IiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplSHRtbFRleHQKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9sYWJlbC1lbmQuanMKZnVuY3Rpb24gcmVzb2x2ZUFsbExhYmVsRW5kKGV2ZW50cykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCBuZXdFdmVudHMgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICBjb25zdCB0b2tlbiA9IGV2ZW50c1tpbmRleDJdWzFdOwogICAgbmV3RXZlbnRzLnB1c2goZXZlbnRzW2luZGV4Ml0pOwogICAgaWYgKHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxMaW5rIiB8fCB0b2tlbi50eXBlID09PSAibGFiZWxFbmQiKSB7CiAgICAgIGNvbnN0IG9mZnNldCA9IHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIiA/IDQgOiAyOwogICAgICB0b2tlbi50eXBlID0gImRhdGEiOwogICAgICBpbmRleDIgKz0gb2Zmc2V0OwogICAgfQogIH0KICBpZiAoZXZlbnRzLmxlbmd0aCAhPT0gbmV3RXZlbnRzLmxlbmd0aCkgewogICAgc3BsaWNlKGV2ZW50cywgMCwgZXZlbnRzLmxlbmd0aCwgbmV3RXZlbnRzKTsKICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiByZXNvbHZlVG9MYWJlbEVuZChldmVudHMsIGNvbnRleHQyKSB7CiAgbGV0IGluZGV4MiA9IGV2ZW50cy5sZW5ndGg7CiAgbGV0IG9mZnNldCA9IDA7CiAgbGV0IHRva2VuOwogIGxldCBvcGVuOwogIGxldCBjbG9zZTc7CiAgbGV0IG1lZGlhOwogIHdoaWxlIChpbmRleDItLSkgewogICAgdG9rZW4gPSBldmVudHNbaW5kZXgyXVsxXTsKICAgIGlmIChvcGVuKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAibGluayIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIgJiYgdG9rZW4uX2luYWN0aXZlKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmIHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiKSB7CiAgICAgICAgdG9rZW4uX2luYWN0aXZlID0gdHJ1ZTsKICAgICAgfQogICAgfSBlbHNlIGlmIChjbG9zZTcpIHsKICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiICYmICh0b2tlbi50eXBlID09PSAibGFiZWxJbWFnZSIgfHwgdG9rZW4udHlwZSA9PT0gImxhYmVsTGluayIpICYmICF0b2tlbi5fYmFsYW5jZWQpIHsKICAgICAgICBvcGVuID0gaW5kZXgyOwogICAgICAgIGlmICh0b2tlbi50eXBlICE9PSAibGFiZWxMaW5rIikgewogICAgICAgICAgb2Zmc2V0ID0gMjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAibGFiZWxFbmQiKSB7CiAgICAgIGNsb3NlNyA9IGluZGV4MjsKICAgIH0KICB9CiAgY29uc3QgZ3JvdXAgPSB7CiAgICB0eXBlOiBldmVudHNbb3Blbl1bMV0udHlwZSA9PT0gImxhYmVsTGluayIgPyAibGluayIgOiAiaW1hZ2UiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW5dWzFdLnN0YXJ0CiAgICB9LAogICAgZW5kOiB7CiAgICAgIC4uLmV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kCiAgICB9CiAgfTsKICBjb25zdCBsYWJlbCA9IHsKICAgIHR5cGU6ICJsYWJlbCIsCiAgICBzdGFydDogewogICAgICAuLi5ldmVudHNbb3Blbl1bMV0uc3RhcnQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2Nsb3NlN11bMV0uZW5kCiAgICB9CiAgfTsKICBjb25zdCB0ZXh0OSA9IHsKICAgIHR5cGU6ICJsYWJlbFRleHQiLAogICAgc3RhcnQ6IHsKICAgICAgLi4uZXZlbnRzW29wZW4gKyBvZmZzZXQgKyAyXVsxXS5lbmQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2Nsb3NlNyAtIDJdWzFdLnN0YXJ0CiAgICB9CiAgfTsKICBtZWRpYSA9IFtbImVudGVyIiwgZ3JvdXAsIGNvbnRleHQyXSwgWyJlbnRlciIsIGxhYmVsLCBjb250ZXh0Ml1dOwogIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKG9wZW4gKyAxLCBvcGVuICsgb2Zmc2V0ICsgMykpOwogIG1lZGlhID0gcHVzaChtZWRpYSwgW1siZW50ZXIiLCB0ZXh0OSwgY29udGV4dDJdXSk7CiAgbWVkaWEgPSBwdXNoKG1lZGlhLCByZXNvbHZlQWxsKGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmluc2lkZVNwYW4ubnVsbCwgZXZlbnRzLnNsaWNlKG9wZW4gKyBvZmZzZXQgKyA0LCBjbG9zZTcgLSAzKSwgY29udGV4dDIpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBldmVudHNbY2xvc2U3IC0gMl0sIGV2ZW50c1tjbG9zZTcgLSAxXSwgWyJleGl0IiwgbGFiZWwsIGNvbnRleHQyXV0pOwogIG1lZGlhID0gcHVzaChtZWRpYSwgZXZlbnRzLnNsaWNlKGNsb3NlNyArIDEpKTsKICBtZWRpYSA9IHB1c2gobWVkaWEsIFtbImV4aXQiLCBncm91cCwgY29udGV4dDJdXSk7CiAgc3BsaWNlKGV2ZW50cywgb3BlbiwgZXZlbnRzLmxlbmd0aCwgbWVkaWEpOwogIHJldHVybiBldmVudHM7Cn0KZnVuY3Rpb24gdG9rZW5pemVMYWJlbEVuZChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICBsZXQgbGFiZWxTdGFydDsKICBsZXQgZGVmaW5lZDsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmICgoc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxhYmVsSW1hZ2UiIHx8IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbExpbmsiKSAmJiAhc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uX2JhbGFuY2VkKSB7CiAgICAgIGxhYmVsU3RhcnQgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXTsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKCFsYWJlbFN0YXJ0KSB7CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgaWYgKGxhYmVsU3RhcnQuX2luYWN0aXZlKSB7CiAgICAgIHJldHVybiBsYWJlbEVuZE5vayhjb2RlNCk7CiAgICB9CiAgICBkZWZpbmVkID0gc2VsZjIucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh7CiAgICAgIHN0YXJ0OiBsYWJlbFN0YXJ0LmVuZCwKICAgICAgZW5kOiBzZWxmMi5ub3coKQogICAgfSkpKTsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsRW5kIik7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuZXhpdCgibGFiZWxFbmQiKTsKICAgIHJldHVybiBhZnRlcjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDApIHsKICAgICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChyZXNvdXJjZUNvbnN0cnVjdCwgbGFiZWxFbmRPaywgZGVmaW5lZCA/IGxhYmVsRW5kT2sgOiBsYWJlbEVuZE5vaykoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KHJlZmVyZW5jZUZ1bGxDb25zdHJ1Y3QsIGxhYmVsRW5kT2ssIGRlZmluZWQgPyByZWZlcmVuY2VOb3RGdWxsIDogbGFiZWxFbmROb2spKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBkZWZpbmVkID8gbGFiZWxFbmRPayhjb2RlNCkgOiBsYWJlbEVuZE5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlZmVyZW5jZU5vdEZ1bGwoY29kZTQpIHsKICAgIHJldHVybiBlZmZlY3RzLmF0dGVtcHQocmVmZXJlbmNlQ29sbGFwc2VkQ29uc3RydWN0LCBsYWJlbEVuZE9rLCBsYWJlbEVuZE5vaykoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEVuZE9rKGNvZGU0KSB7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxFbmROb2soY29kZTQpIHsKICAgIGxhYmVsU3RhcnQuX2JhbGFuY2VkID0gdHJ1ZTsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZVJlc291cmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHJlc291cmNlU3RhcnQ7CiAgZnVuY3Rpb24gcmVzb3VyY2VTdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigicmVzb3VyY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJyZXNvdXJjZU1hcmtlciIpOwogICAgcmV0dXJuIHJlc291cmNlQmVmb3JlOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUJlZm9yZShjb2RlNCkgewogICAgcmV0dXJuIG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpID8gZmFjdG9yeVdoaXRlc3BhY2UoZWZmZWN0cywgcmVzb3VyY2VPcGVuKShjb2RlNCkgOiByZXNvdXJjZU9wZW4oY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZU9wZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gNDEpIHsKICAgICAgcmV0dXJuIHJlc291cmNlRW5kKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBmYWN0b3J5RGVzdGluYXRpb24oZWZmZWN0cywgcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyLCByZXNvdXJjZURlc3RpbmF0aW9uTWlzc2luZywgInJlc291cmNlRGVzdGluYXRpb24iLCAicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWwiLCAicmVzb3VyY2VEZXN0aW5hdGlvbkxpdGVyYWxNYXJrZXIiLCAicmVzb3VyY2VEZXN0aW5hdGlvblJhdyIsICJyZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nIiwgMzIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbkFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkgPyBmYWN0b3J5V2hpdGVzcGFjZShlZmZlY3RzLCByZXNvdXJjZUJldHdlZW4pKGNvZGU0KSA6IHJlc291cmNlRW5kKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVzb3VyY2VEZXN0aW5hdGlvbk1pc3NpbmcoY29kZTQpIHsKICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZUJldHdlZW4oY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMzQgfHwgY29kZTQgPT09IDM5IHx8IGNvZGU0ID09PSA0MCkgewogICAgICByZXR1cm4gZmFjdG9yeVRpdGxlKGVmZmVjdHMsIHJlc291cmNlVGl0bGVBZnRlciwgbm9rLCAicmVzb3VyY2VUaXRsZSIsICJyZXNvdXJjZVRpdGxlTWFya2VyIiwgInJlc291cmNlVGl0bGVTdHJpbmciKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gcmVzb3VyY2VFbmQoY29kZTQpOwogIH0KICBmdW5jdGlvbiByZXNvdXJjZVRpdGxlQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSA/IGZhY3RvcnlXaGl0ZXNwYWNlKGVmZmVjdHMsIHJlc291cmNlRW5kKShjb2RlNCkgOiByZXNvdXJjZUVuZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIHJlc291cmNlRW5kKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQxKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInJlc291cmNlTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgicmVzb3VyY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJyZXNvdXJjZSIpOwogICAgICByZXR1cm4gb2szOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUmVmZXJlbmNlRnVsbChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gcmVmZXJlbmNlRnVsbDsKICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsKGNvZGU0KSB7CiAgICByZXR1cm4gZmFjdG9yeUxhYmVsLmNhbGwoc2VsZjIsIGVmZmVjdHMsIHJlZmVyZW5jZUZ1bGxBZnRlciwgcmVmZXJlbmNlRnVsbE1pc3NpbmcsICJyZWZlcmVuY2UiLCAicmVmZXJlbmNlTWFya2VyIiwgInJlZmVyZW5jZVN0cmluZyIpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlRnVsbEFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gc2VsZjIucGFyc2VyLmRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZShzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdWzFdKS5zbGljZSgxLCAtMSkpKSA/IG9rMyhjb2RlNCkgOiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiByZWZlcmVuY2VGdWxsTWlzc2luZyhjb2RlNCkgewogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgcmV0dXJuIHJlZmVyZW5jZUNvbGxhcHNlZFN0YXJ0OwogIGZ1bmN0aW9uIHJlZmVyZW5jZUNvbGxhcHNlZFN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2UiKTsKICAgIGVmZmVjdHMuZW50ZXIoInJlZmVyZW5jZU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgicmVmZXJlbmNlTWFya2VyIik7CiAgICByZXR1cm4gcmVmZXJlbmNlQ29sbGFwc2VkT3BlbjsKICB9CiAgZnVuY3Rpb24gcmVmZXJlbmNlQ29sbGFwc2VkT3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmVudGVyKCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJyZWZlcmVuY2VNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJyZWZlcmVuY2UiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KfQp2YXIgbGFiZWxFbmQsIHJlc291cmNlQ29uc3RydWN0LCByZWZlcmVuY2VGdWxsQ29uc3RydWN0LCByZWZlcmVuY2VDb2xsYXBzZWRDb25zdHJ1Y3Q7CnZhciBpbml0X2xhYmVsX2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLWVuZC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2Rlc3RpbmF0aW9uKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X2xhYmVsKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3RpdGxlKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3doaXRlc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfbm9ybWFsaXplX2lkZW50aWZpZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICAgIGxhYmVsRW5kID0gewogICAgICBuYW1lOiAibGFiZWxFbmQiLAogICAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsTGFiZWxFbmQsCiAgICAgIHJlc29sdmVUbzogcmVzb2x2ZVRvTGFiZWxFbmQsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsRW5kCiAgICB9OwogICAgcmVzb3VyY2VDb25zdHJ1Y3QgPSB7CiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVJlc291cmNlCiAgICB9OwogICAgcmVmZXJlbmNlRnVsbENvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlRnVsbAogICAgfTsKICAgIHJlZmVyZW5jZUNvbGxhcHNlZENvbnN0cnVjdCA9IHsKICAgICAgdG9rZW5pemU6IHRva2VuaXplUmVmZXJlbmNlQ29sbGFwc2VkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtaW1hZ2UuanMKZnVuY3Rpb24gdG9rZW5pemVMYWJlbFN0YXJ0SW1hZ2UoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEltYWdlIik7CiAgICBlZmZlY3RzLmVudGVyKCJsYWJlbEltYWdlTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsYWJlbEltYWdlTWFya2VyIik7CiAgICByZXR1cm4gb3BlbjsKICB9CiAgZnVuY3Rpb24gb3Blbihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSkgewogICAgICBlZmZlY3RzLmVudGVyKCJsYWJlbE1hcmtlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuZXhpdCgibGFiZWxJbWFnZSIpOwogICAgICByZXR1cm4gYWZ0ZXI7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBjb2RlNCA9PT0gOTQgJiYgIl9oaWRkZW5Gb290bm90ZVN1cHBvcnQiIGluIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzID8gbm9rKGNvZGU0KSA6IG9rMyhjb2RlNCk7CiAgfQp9CnZhciBsYWJlbFN0YXJ0SW1hZ2U7CnZhciBpbml0X2xhYmVsX3N0YXJ0X2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtaW1hZ2UuanMiKCkgewogICAgaW5pdF9sYWJlbF9lbmQoKTsKICAgIGxhYmVsU3RhcnRJbWFnZSA9IHsKICAgICAgbmFtZTogImxhYmVsU3RhcnRJbWFnZSIsCiAgICAgIHJlc29sdmVBbGw6IGxhYmVsRW5kLnJlc29sdmVBbGwsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRJbWFnZQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xhYmVsLXN0YXJ0LWxpbmsuanMKZnVuY3Rpb24gdG9rZW5pemVMYWJlbFN0YXJ0TGluayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoImxhYmVsTGluayIpOwogICAgZWZmZWN0cy5lbnRlcigibGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmV4aXQoImxhYmVsTGluayIpOwogICAgcmV0dXJuIGFmdGVyOwogIH0KICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgcmV0dXJuIGNvZGU0ID09PSA5NCAmJiAiX2hpZGRlbkZvb3Rub3RlU3VwcG9ydCIgaW4gc2VsZjIucGFyc2VyLmNvbnN0cnVjdHMgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIGxhYmVsU3RhcnRMaW5rOwp2YXIgaW5pdF9sYWJlbF9zdGFydF9saW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGFiZWwtc3RhcnQtbGluay5qcyIoKSB7CiAgICBpbml0X2xhYmVsX2VuZCgpOwogICAgbGFiZWxTdGFydExpbmsgPSB7CiAgICAgIG5hbWU6ICJsYWJlbFN0YXJ0TGluayIsCiAgICAgIHJlc29sdmVBbGw6IGxhYmVsRW5kLnJlc29sdmVBbGwsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxhYmVsU3RhcnRMaW5rCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvbGluZS1lbmRpbmcuanMKZnVuY3Rpb24gdG9rZW5pemVMaW5lRW5kaW5nKGVmZmVjdHMsIG9rMykgewogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvazMsICJsaW5lUHJlZml4Iik7CiAgfQp9CnZhciBsaW5lRW5kaW5nOwp2YXIgaW5pdF9saW5lX2VuZGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL2xpbmUtZW5kaW5nLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBsaW5lRW5kaW5nID0gewogICAgICBuYW1lOiAibGluZUVuZGluZyIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUxpbmVFbmRpbmcKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi90aGVtYXRpYy1icmVhay5qcwpmdW5jdGlvbiB0b2tlbml6ZVRoZW1hdGljQnJlYWsoZWZmZWN0cywgb2szLCBub2spIHsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IG1hcmtlcjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInRoZW1hdGljQnJlYWsiKTsKICAgIHJldHVybiBiZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIG1hcmtlciA9IGNvZGU0OwogICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG1hcmtlcikgewogICAgICBlZmZlY3RzLmVudGVyKCJ0aGVtYXRpY0JyZWFrU2VxdWVuY2UiKTsKICAgICAgcmV0dXJuIHNlcXVlbmNlKGNvZGU0KTsKICAgIH0KICAgIGlmIChzaXplID49IDMgJiYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgidGhlbWF0aWNCcmVhayIpOwogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBzZXF1ZW5jZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBtYXJrZXIpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gc2VxdWVuY2U7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInRoZW1hdGljQnJlYWtTZXF1ZW5jZSIpOwogICAgcmV0dXJuIG1hcmtkb3duU3BhY2UoY29kZTQpID8gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGF0QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpIDogYXRCcmVhayhjb2RlNCk7CiAgfQp9CnZhciB0aGVtYXRpY0JyZWFrMjsKdmFyIGluaXRfdGhlbWF0aWNfYnJlYWsyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9saWIvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIHRoZW1hdGljQnJlYWsyID0gewogICAgICBuYW1lOiAidGhlbWF0aWNCcmVhayIsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZVRoZW1hdGljQnJlYWsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saXN0LmpzCmZ1bmN0aW9uIHRva2VuaXplTGlzdFN0YXJ0KGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogIGxldCBpbml0aWFsU2l6ZSA9IHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGluZVByZWZpeCIgPyB0YWlsWzJdLnNsaWNlU2VyaWFsaXplKHRhaWxbMV0sIHRydWUpLmxlbmd0aCA6IDA7CiAgbGV0IHNpemUgPSAwOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgY29uc3Qga2luZCA9IHNlbGYyLmNvbnRhaW5lclN0YXRlLnR5cGUgfHwgKGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDMgfHwgY29kZTQgPT09IDQ1ID8gImxpc3RVbm9yZGVyZWQiIDogImxpc3RPcmRlcmVkIik7CiAgICBpZiAoa2luZCA9PT0gImxpc3RVbm9yZGVyZWQiID8gIXNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlNCA9PT0gc2VsZjIuY29udGFpbmVyU3RhdGUubWFya2VyIDogYXNjaWlEaWdpdChjb2RlNCkpIHsKICAgICAgaWYgKCFzZWxmMi5jb250YWluZXJTdGF0ZS50eXBlKSB7CiAgICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUudHlwZSA9IGtpbmQ7CiAgICAgICAgZWZmZWN0cy5lbnRlcihraW5kLCB7CiAgICAgICAgICBfY29udGFpbmVyOiB0cnVlCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaWYgKGtpbmQgPT09ICJsaXN0VW5vcmRlcmVkIikgewogICAgICAgIGVmZmVjdHMuZW50ZXIoImxpc3RJdGVtUHJlZml4Iik7CiAgICAgICAgcmV0dXJuIGNvZGU0ID09PSA0MiB8fCBjb2RlNCA9PT0gNDUgPyBlZmZlY3RzLmNoZWNrKHRoZW1hdGljQnJlYWsyLCBub2ssIGF0TWFya2VyKShjb2RlNCkgOiBhdE1hcmtlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKCFzZWxmMi5pbnRlcnJ1cHQgfHwgY29kZTQgPT09IDQ5KSB7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1QcmVmaXgiKTsKICAgICAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbVZhbHVlIik7CiAgICAgICAgcmV0dXJuIGluc2lkZShjb2RlNCk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChhc2NpaURpZ2l0KGNvZGU0KSAmJiArK3NpemUgPCAxMCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaW5zaWRlOwogICAgfQogICAgaWYgKCghc2VsZjIuaW50ZXJydXB0IHx8IHNpemUgPCAyKSAmJiAoc2VsZjIuY29udGFpbmVyU3RhdGUubWFya2VyID8gY29kZTQgPT09IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA6IGNvZGU0ID09PSA0MSB8fCBjb2RlNCA9PT0gNDYpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1WYWx1ZSIpOwogICAgICByZXR1cm4gYXRNYXJrZXIoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGF0TWFya2VyKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJsaXN0SXRlbU1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1NYXJrZXIiKTsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciA9IHNlbGYyLmNvbnRhaW5lclN0YXRlLm1hcmtlciB8fCBjb2RlNDsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKAogICAgICBibGFua0xpbmUsCiAgICAgIC8vIENhbuKAmXQgYmUgZW1wdHkgd2hlbiBpbnRlcnJ1cHRpbmcuCiAgICAgIHNlbGYyLmludGVycnVwdCA/IG5vayA6IG9uQmxhbmssCiAgICAgIGVmZmVjdHMuYXR0ZW1wdChsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QsIGVuZE9mUHJlZml4LCBvdGhlclByZWZpeCkKICAgICk7CiAgfQogIGZ1bmN0aW9uIG9uQmxhbmsoY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUgPSB0cnVlOwogICAgaW5pdGlhbFNpemUrKzsKICAgIHJldHVybiBlbmRPZlByZWZpeChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG90aGVyUHJlZml4KGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5lbnRlcigibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIik7CiAgICAgIHJldHVybiBlbmRPZlByZWZpeDsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBlbmRPZlByZWZpeChjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuc2l6ZSA9IGluaXRpYWxTaXplICsgc2VsZjIuc2xpY2VTZXJpYWxpemUoZWZmZWN0cy5leGl0KCJsaXN0SXRlbVByZWZpeCIpLCB0cnVlKS5sZW5ndGg7CiAgICByZXR1cm4gb2szKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVMaXN0Q29udGludWF0aW9uKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB2b2lkIDA7CiAgcmV0dXJuIGVmZmVjdHMuY2hlY2soYmxhbmtMaW5lLCBvbkJsYW5rLCBub3RCbGFuayk7CiAgZnVuY3Rpb24gb25CbGFuayhjb2RlNCkgewogICAgc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgPSBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyB8fCBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBvazMsICJsaXN0SXRlbUluZGVudCIsIHNlbGYyLmNvbnRhaW5lclN0YXRlLnNpemUgKyAxKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG5vdEJsYW5rKGNvZGU0KSB7CiAgICBpZiAoc2VsZjIuY29udGFpbmVyU3RhdGUuZnVydGhlckJsYW5rTGluZXMgfHwgIW1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmZ1cnRoZXJCbGFua0xpbmVzID0gdm9pZCAwOwogICAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5pbml0aWFsQmxhbmtMaW5lID0gdm9pZCAwOwogICAgICByZXR1cm4gbm90SW5DdXJyZW50SXRlbShjb2RlNCk7CiAgICB9CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5mdXJ0aGVyQmxhbmtMaW5lcyA9IHZvaWQgMDsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLmluaXRpYWxCbGFua0xpbmUgPSB2b2lkIDA7CiAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGluZGVudENvbnN0cnVjdCwgb2szLCBub3RJbkN1cnJlbnRJdGVtKShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIG5vdEluQ3VycmVudEl0ZW0oY29kZTQpIHsKICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB0cnVlOwogICAgc2VsZjIuaW50ZXJydXB0ID0gdm9pZCAwOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBlZmZlY3RzLmF0dGVtcHQobGlzdDMsIG9rMywgbm9rKSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUluZGVudChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAibGlzdEl0ZW1JbmRlbnQiLCBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplICsgMSk7CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuIHRhaWwgJiYgdGFpbFsxXS50eXBlID09PSAibGlzdEl0ZW1JbmRlbnQiICYmIHRhaWxbMl0uc2xpY2VTZXJpYWxpemUodGFpbFsxXSwgdHJ1ZSkubGVuZ3RoID09PSBzZWxmMi5jb250YWluZXJTdGF0ZS5zaXplID8gb2szKGNvZGU0KSA6IG5vayhjb2RlNCk7CiAgfQp9CmZ1bmN0aW9uIHRva2VuaXplTGlzdEVuZChlZmZlY3RzKSB7CiAgZWZmZWN0cy5leGl0KHRoaXMuY29udGFpbmVyU3RhdGUudHlwZSk7Cn0KZnVuY3Rpb24gdG9rZW5pemVMaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlclByZWZpeCwgImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIsIHNlbGYyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0ICsgMSk7CiAgZnVuY3Rpb24gYWZ0ZXJQcmVmaXgoY29kZTQpIHsKICAgIGNvbnN0IHRhaWwgPSBzZWxmMi5ldmVudHNbc2VsZjIuZXZlbnRzLmxlbmd0aCAtIDFdOwogICAgcmV0dXJuICFtYXJrZG93blNwYWNlKGNvZGU0KSAmJiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImxpc3RJdGVtUHJlZml4V2hpdGVzcGFjZSIgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGxpc3QzLCBsaXN0SXRlbVByZWZpeFdoaXRlc3BhY2VDb25zdHJ1Y3QsIGluZGVudENvbnN0cnVjdDsKdmFyIGluaXRfbGlzdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9saXN0LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X2JsYW5rX2xpbmUoKTsKICAgIGluaXRfdGhlbWF0aWNfYnJlYWsyKCk7CiAgICBsaXN0MyA9IHsKICAgICAgY29udGludWF0aW9uOiB7CiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdENvbnRpbnVhdGlvbgogICAgICB9LAogICAgICBleGl0OiB0b2tlbml6ZUxpc3RFbmQsCiAgICAgIG5hbWU6ICJsaXN0IiwKICAgICAgdG9rZW5pemU6IHRva2VuaXplTGlzdFN0YXJ0CiAgICB9OwogICAgbGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlQ29uc3RydWN0ID0gewogICAgICBwYXJ0aWFsOiB0cnVlLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVMaXN0SXRlbVByZWZpeFdoaXRlc3BhY2UKICAgIH07CiAgICBpbmRlbnRDb25zdHJ1Y3QgPSB7CiAgICAgIHBhcnRpYWw6IHRydWUsCiAgICAgIHRva2VuaXplOiB0b2tlbml6ZUluZGVudAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmtAMi4wLjMvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1jb3JlLWNvbW1vbm1hcmsvbGliL3NldGV4dC11bmRlcmxpbmUuanMKZnVuY3Rpb24gcmVzb2x2ZVRvU2V0ZXh0VW5kZXJsaW5lKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gZXZlbnRzLmxlbmd0aDsKICBsZXQgY29udGVudDM7CiAgbGV0IHRleHQ5OwogIGxldCBkZWZpbml0aW9uMzsKICB3aGlsZSAoaW5kZXgyLS0pIHsKICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImNvbnRlbnQiKSB7CiAgICAgICAgY29udGVudDMgPSBpbmRleDI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJwYXJhZ3JhcGgiKSB7CiAgICAgICAgdGV4dDkgPSBpbmRleDI7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiY29udGVudCIpIHsKICAgICAgICBldmVudHMuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgIH0KICAgICAgaWYgKCFkZWZpbml0aW9uMyAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiZGVmaW5pdGlvbiIpIHsKICAgICAgICBkZWZpbml0aW9uMyA9IGluZGV4MjsKICAgICAgfQogICAgfQogIH0KICBjb25zdCBoZWFkaW5nMyA9IHsKICAgIHR5cGU6ICJzZXRleHRIZWFkaW5nIiwKICAgIHN0YXJ0OiB7CiAgICAgIC4uLmV2ZW50c1tjb250ZW50M11bMV0uc3RhcnQKICAgIH0sCiAgICBlbmQ6IHsKICAgICAgLi4uZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXVsxXS5lbmQKICAgIH0KICB9OwogIGV2ZW50c1t0ZXh0OV1bMV0udHlwZSA9ICJzZXRleHRIZWFkaW5nVGV4dCI7CiAgaWYgKGRlZmluaXRpb24zKSB7CiAgICBldmVudHMuc3BsaWNlKHRleHQ5LCAwLCBbImVudGVyIiwgaGVhZGluZzMsIGNvbnRleHQyXSk7CiAgICBldmVudHMuc3BsaWNlKGRlZmluaXRpb24zICsgMSwgMCwgWyJleGl0IiwgZXZlbnRzW2NvbnRlbnQzXVsxXSwgY29udGV4dDJdKTsKICAgIGV2ZW50c1tjb250ZW50M11bMV0uZW5kID0gewogICAgICAuLi5ldmVudHNbZGVmaW5pdGlvbjNdWzFdLmVuZAogICAgfTsKICB9IGVsc2UgewogICAgZXZlbnRzW2NvbnRlbnQzXVsxXSA9IGhlYWRpbmczOwogIH0KICBldmVudHMucHVzaChbImV4aXQiLCBoZWFkaW5nMywgY29udGV4dDJdKTsKICByZXR1cm4gZXZlbnRzOwp9CmZ1bmN0aW9uIHRva2VuaXplU2V0ZXh0VW5kZXJsaW5lKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGxldCBtYXJrZXI7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBsZXQgaW5kZXgyID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgIGxldCBwYXJhZ3JhcGgzOwogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAibGluZUVuZGluZyIgJiYgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSAhPT0gImxpbmVQcmVmaXgiICYmIHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGUgIT09ICJjb250ZW50IikgewogICAgICAgIHBhcmFncmFwaDMgPSBzZWxmMi5ldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAicGFyYWdyYXBoIjsKICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgaWYgKCFzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSAmJiAoc2VsZjIuaW50ZXJydXB0IHx8IHBhcmFncmFwaDMpKSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lIik7CiAgICAgIG1hcmtlciA9IGNvZGU0OwogICAgICByZXR1cm4gYmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBiZWZvcmUoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKTsKICAgIHJldHVybiBpbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbWFya2VyKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBpbnNpZGU7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2UiKTsKICAgIHJldHVybiBtYXJrZG93blNwYWNlKGNvZGU0KSA/IGZhY3RvcnlTcGFjZShlZmZlY3RzLCBhZnRlciwgImxpbmVTdWZmaXgiKShjb2RlNCkgOiBhZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgbWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoInNldGV4dEhlYWRpbmdMaW5lIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQp9CnZhciBzZXRleHRVbmRlcmxpbmU7CnZhciBpbml0X3NldGV4dF91bmRlcmxpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstY29yZS1jb21tb25tYXJrQDIuMC4zL25vZGVfbW9kdWxlcy9taWNyb21hcmstY29yZS1jb21tb25tYXJrL2xpYi9zZXRleHQtdW5kZXJsaW5lLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBzZXRleHRVbmRlcmxpbmUgPSB7CiAgICAgIG5hbWU6ICJzZXRleHRVbmRlcmxpbmUiLAogICAgICByZXNvbHZlVG86IHJlc29sdmVUb1NldGV4dFVuZGVybGluZSwKICAgICAgdG9rZW5pemU6IHRva2VuaXplU2V0ZXh0VW5kZXJsaW5lCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWNvcmUtY29tbW9ubWFya0AyLjAuMy9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWNvcmUtY29tbW9ubWFyay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2F0dGVudGlvbigpOwogICAgaW5pdF9hdXRvbGluaygpOwogICAgaW5pdF9ibGFua19saW5lKCk7CiAgICBpbml0X2Jsb2NrX3F1b3RlKCk7CiAgICBpbml0X2NoYXJhY3Rlcl9lc2NhcGUoKTsKICAgIGluaXRfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9jb2RlX2ZlbmNlZCgpOwogICAgaW5pdF9jb2RlX2luZGVudGVkKCk7CiAgICBpbml0X2NvZGVfdGV4dCgpOwogICAgaW5pdF9jb250ZW50KCk7CiAgICBpbml0X2RlZmluaXRpb24yKCk7CiAgICBpbml0X2hhcmRfYnJlYWtfZXNjYXBlKCk7CiAgICBpbml0X2hlYWRpbmdfYXR4KCk7CiAgICBpbml0X2h0bWxfZmxvdygpOwogICAgaW5pdF9odG1sX3RleHQoKTsKICAgIGluaXRfbGFiZWxfZW5kKCk7CiAgICBpbml0X2xhYmVsX3N0YXJ0X2ltYWdlKCk7CiAgICBpbml0X2xhYmVsX3N0YXJ0X2xpbmsoKTsKICAgIGluaXRfbGluZV9lbmRpbmcoKTsKICAgIGluaXRfbGlzdDIoKTsKICAgIGluaXRfc2V0ZXh0X3VuZGVybGluZSgpOwogICAgaW5pdF90aGVtYXRpY19icmVhazIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbUZvb3Rub3RlKCkgewogIHJldHVybiB7CiAgICBkb2N1bWVudDogewogICAgICBbOTFdOiB7CiAgICAgICAgbmFtZTogImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIsCiAgICAgICAgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvblN0YXJ0LAogICAgICAgIGNvbnRpbnVhdGlvbjogewogICAgICAgICAgdG9rZW5pemU6IHRva2VuaXplRGVmaW5pdGlvbkNvbnRpbnVhdGlvbgogICAgICAgIH0sCiAgICAgICAgZXhpdDogZ2ZtRm9vdG5vdGVEZWZpbml0aW9uRW5kCiAgICAgIH0KICAgIH0sCiAgICB0ZXh0OiB7CiAgICAgIFs5MV06IHsKICAgICAgICBuYW1lOiAiZ2ZtRm9vdG5vdGVDYWxsIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVHZm1Gb290bm90ZUNhbGwKICAgICAgfSwKICAgICAgWzkzXTogewogICAgICAgIG5hbWU6ICJnZm1Qb3RlbnRpYWxGb290bm90ZUNhbGwiLAogICAgICAgIGFkZDogImFmdGVyIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwsCiAgICAgICAgcmVzb2x2ZVRvOiByZXNvbHZlVG9Qb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVQb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgbGV0IGluZGV4MiA9IHNlbGYyLmV2ZW50cy5sZW5ndGg7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IGxhYmVsU3RhcnQ7CiAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICBjb25zdCB0b2tlbiA9IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdOwogICAgaWYgKHRva2VuLnR5cGUgPT09ICJsYWJlbEltYWdlIikgewogICAgICBsYWJlbFN0YXJ0ID0gdG9rZW47CiAgICAgIGJyZWFrOwogICAgfQogICAgaWYgKHRva2VuLnR5cGUgPT09ICJnZm1Gb290bm90ZUNhbGwiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbExpbmsiIHx8IHRva2VuLnR5cGUgPT09ICJsYWJlbCIgfHwgdG9rZW4udHlwZSA9PT0gImltYWdlIiB8fCB0b2tlbi50eXBlID09PSAibGluayIpIHsKICAgICAgYnJlYWs7CiAgICB9CiAgfQogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKCFsYWJlbFN0YXJ0IHx8ICFsYWJlbFN0YXJ0Ll9iYWxhbmNlZCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh7CiAgICAgIHN0YXJ0OiBsYWJlbFN0YXJ0LmVuZCwKICAgICAgZW5kOiBzZWxmMi5ub3coKQogICAgfSkpOwogICAgaWYgKGlkLmNvZGVQb2ludEF0KDApICE9PSA5NCB8fCAhZGVmaW5lZC5pbmNsdWRlcyhpZC5zbGljZSgxKSkpIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiByZXNvbHZlVG9Qb3RlbnRpYWxHZm1Gb290bm90ZUNhbGwoZXZlbnRzLCBjb250ZXh0MikgewogIGxldCBpbmRleDIgPSBldmVudHMubGVuZ3RoOwogIGxldCBsYWJlbFN0YXJ0OwogIHdoaWxlIChpbmRleDItLSkgewogICAgaWYgKGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsYWJlbEltYWdlIiAmJiBldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICBsYWJlbFN0YXJ0ID0gZXZlbnRzW2luZGV4Ml1bMV07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBldmVudHNbaW5kZXgyICsgMV1bMV0udHlwZSA9ICJkYXRhIjsKICBldmVudHNbaW5kZXgyICsgM11bMV0udHlwZSA9ICJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciI7CiAgY29uc3QgY2FsbCA9IHsKICAgIHR5cGU6ICJnZm1Gb290bm90ZUNhbGwiLAogICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5zdGFydCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uZW5kKQogIH07CiAgY29uc3QgbWFya2VyID0gewogICAgdHlwZTogImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4MiArIDNdWzFdLmVuZCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDIgKyAzXVsxXS5lbmQpCiAgfTsKICBtYXJrZXIuZW5kLmNvbHVtbisrOwogIG1hcmtlci5lbmQub2Zmc2V0Kys7CiAgbWFya2VyLmVuZC5fYnVmZmVySW5kZXgrKzsKICBjb25zdCBzdHJpbmczID0gewogICAgdHlwZTogImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgbWFya2VyLmVuZCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tldmVudHMubGVuZ3RoIC0gMV1bMV0uc3RhcnQpCiAgfTsKICBjb25zdCBjaHVuayA9IHsKICAgIHR5cGU6ICJjaHVua1N0cmluZyIsCiAgICBjb250ZW50VHlwZTogInN0cmluZyIsCiAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgc3RyaW5nMy5zdGFydCksCiAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHN0cmluZzMuZW5kKQogIH07CiAgY29uc3QgcmVwbGFjZW1lbnQgPSBbCiAgICAvLyBUYWtlIHRoZSBgbGFiZWxJbWFnZU1hcmtlcmAgKG5vdyBgZGF0YWAsIHRoZSBgIWApCiAgICBldmVudHNbaW5kZXgyICsgMV0sCiAgICBldmVudHNbaW5kZXgyICsgMl0sCiAgICBbImVudGVyIiwgY2FsbCwgY29udGV4dDJdLAogICAgLy8gVGhlIGBbYAogICAgZXZlbnRzW2luZGV4MiArIDNdLAogICAgZXZlbnRzW2luZGV4MiArIDRdLAogICAgLy8gVGhlIGBeYC4KICAgIFsiZW50ZXIiLCBtYXJrZXIsIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIG1hcmtlciwgY29udGV4dDJdLAogICAgLy8gRXZlcnl0aGluZyBpbiBiZXR3ZWVuLgogICAgWyJlbnRlciIsIHN0cmluZzMsIGNvbnRleHQyXSwKICAgIFsiZW50ZXIiLCBjaHVuaywgY29udGV4dDJdLAogICAgWyJleGl0IiwgY2h1bmssIGNvbnRleHQyXSwKICAgIFsiZXhpdCIsIHN0cmluZzMsIGNvbnRleHQyXSwKICAgIC8vIFRoZSBlbmRpbmcgKGBdYCwgcHJvcGVybHkgcGFyc2VkIGFuZCBsYWJlbGxlZCkuCiAgICBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdLAogICAgZXZlbnRzW2V2ZW50cy5sZW5ndGggLSAxXSwKICAgIFsiZXhpdCIsIGNhbGwsIGNvbnRleHQyXQogIF07CiAgZXZlbnRzLnNwbGljZShpbmRleDIsIGV2ZW50cy5sZW5ndGggLSBpbmRleDIgKyAxLCAuLi5yZXBsYWNlbWVudCk7CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiB0b2tlbml6ZUdmbUZvb3Rub3RlQ2FsbChlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBjb25zdCBkZWZpbmVkID0gc2VsZjIucGFyc2VyLmdmbUZvb3Rub3RlcyB8fCAoc2VsZjIucGFyc2VyLmdmbUZvb3Rub3RlcyA9IFtdKTsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IGRhdGE7CiAgcmV0dXJuIHN0YXJ0OwogIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGwiKTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGxMYWJlbE1hcmtlciIpOwogICAgcmV0dXJuIGNhbGxTdGFydDsKICB9CiAgZnVuY3Rpb24gY2FsbFN0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgIT09IDk0KSByZXR1cm4gbm9rKGNvZGU0KTsKICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbE1hcmtlciIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTWFya2VyIik7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZUNhbGxTdHJpbmciKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rU3RyaW5nIikuY29udGVudFR5cGUgPSAic3RyaW5nIjsKICAgIHJldHVybiBjYWxsRGF0YTsKICB9CiAgZnVuY3Rpb24gY2FsbERhdGEoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YSB8fCAvLyBTcGFjZSBvciB0YWIgaXMgbm90IHN1cHBvcnRlZCBieSBHRk0gZm9yIHNvbWUgcmVhc29uLgogICAgICAvLyBgXG5gIGFuZCBgW2Agbm90IGJlaW5nIHN1cHBvcnRlZCBtYWtlcyBzZW5zZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlQ2FsbFN0cmluZyIpOwogICAgICBpZiAoIWRlZmluZWQuaW5jbHVkZXMobm9ybWFsaXplSWRlbnRpZmllcihzZWxmMi5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKSkgewogICAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlQ2FsbExhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVDYWxsTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZUNhbGwiKTsKICAgICAgcmV0dXJuIG9rMzsKICAgIH0KICAgIGlmICghbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICB9CiAgICBzaXplKys7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGNhbGxFc2NhcGUgOiBjYWxsRGF0YTsKICB9CiAgZnVuY3Rpb24gY2FsbEVzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MSB8fCBjb2RlNCA9PT0gOTIgfHwgY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHNpemUrKzsKICAgICAgcmV0dXJuIGNhbGxEYXRhOwogICAgfQogICAgcmV0dXJuIGNhbGxEYXRhKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gdG9rZW5pemVEZWZpbml0aW9uU3RhcnQoZWZmZWN0cywgb2szLCBub2spIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgZGVmaW5lZCA9IHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgfHwgKHNlbGYyLnBhcnNlci5nZm1Gb290bm90ZXMgPSBbXSk7CiAgbGV0IGlkZW50aWZpZXI7CiAgbGV0IHNpemUgPSAwOwogIGxldCBkYXRhOwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uIikuX2NvbnRhaW5lciA9IHRydWU7CiAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpOwogICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICByZXR1cm4gbGFiZWxBdE1hcmtlcjsKICB9CiAgZnVuY3Rpb24gbGFiZWxBdE1hcmtlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5NCkgewogICAgICBlZmZlY3RzLmVudGVyKCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5lbnRlcigiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxTdHJpbmciKTsKICAgICAgZWZmZWN0cy5lbnRlcigiY2h1bmtTdHJpbmciKS5jb250ZW50VHlwZSA9ICJzdHJpbmciOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gbGFiZWxJbnNpZGUoY29kZTQpIHsKICAgIGlmICgKICAgICAgLy8gVG9vIGxvbmcuCiAgICAgIHNpemUgPiA5OTkgfHwgLy8gQ2xvc2luZyBicmFjZSB3aXRoIG5vdGhpbmcuCiAgICAgIGNvZGU0ID09PSA5MyAmJiAhZGF0YSB8fCAvLyBTcGFjZSBvciB0YWIgaXMgbm90IHN1cHBvcnRlZCBieSBHRk0gZm9yIHNvbWUgcmVhc29uLgogICAgICAvLyBgXG5gIGFuZCBgW2Agbm90IGJlaW5nIHN1cHBvcnRlZCBtYWtlcyBzZW5zZS4KICAgICAgY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDkxIHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDkzKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiY2h1bmtTdHJpbmciKTsKICAgICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nIik7CiAgICAgIGlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHNlbGYyLnNsaWNlU2VyaWFsaXplKHRva2VuKSk7CiAgICAgIGVmZmVjdHMuZW50ZXIoImdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uTGFiZWxNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5leGl0KCJnZm1Gb290bm90ZURlZmluaXRpb25MYWJlbCIpOwogICAgICByZXR1cm4gbGFiZWxBZnRlcjsKICAgIH0KICAgIGlmICghbWFya2Rvd25MaW5lRW5kaW5nT3JTcGFjZShjb2RlNCkpIHsKICAgICAgZGF0YSA9IHRydWU7CiAgICB9CiAgICBzaXplKys7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGxhYmVsRXNjYXBlIDogbGFiZWxJbnNpZGU7CiAgfQogIGZ1bmN0aW9uIGxhYmVsRXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkxIHx8IGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gOTMpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgc2l6ZSsrOwogICAgICByZXR1cm4gbGFiZWxJbnNpZGU7CiAgICB9CiAgICByZXR1cm4gbGFiZWxJbnNpZGUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBsYWJlbEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDU4KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoImRlZmluaXRpb25NYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJkZWZpbml0aW9uTWFya2VyIik7CiAgICAgIGlmICghZGVmaW5lZC5pbmNsdWRlcyhpZGVudGlmaWVyKSkgewogICAgICAgIGRlZmluZWQucHVzaChpZGVudGlmaWVyKTsKICAgICAgfQogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIHdoaXRlc3BhY2VBZnRlciwgImdmbUZvb3Rub3RlRGVmaW5pdGlvbldoaXRlc3BhY2UiKTsKICAgIH0KICAgIHJldHVybiBub2soY29kZTQpOwogIH0KICBmdW5jdGlvbiB3aGl0ZXNwYWNlQWZ0ZXIoY29kZTQpIHsKICAgIHJldHVybiBvazMoY29kZTQpOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZURlZmluaXRpb25Db250aW51YXRpb24oZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZWZmZWN0cy5jaGVjayhibGFua0xpbmUsIG9rMywgZWZmZWN0cy5hdHRlbXB0KGluZGVudDIsIG9rMywgbm9rKSk7Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVEZWZpbml0aW9uRW5kKGVmZmVjdHMpIHsKICBlZmZlY3RzLmV4aXQoImdmbUZvb3Rub3RlRGVmaW5pdGlvbiIpOwp9CmZ1bmN0aW9uIHRva2VuaXplSW5kZW50MihlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyUHJlZml4LCAiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uSW5kZW50IiwgNCArIDEpOwogIGZ1bmN0aW9uIGFmdGVyUHJlZml4KGNvZGU0KSB7CiAgICBjb25zdCB0YWlsID0gc2VsZjIuZXZlbnRzW3NlbGYyLmV2ZW50cy5sZW5ndGggLSAxXTsKICAgIHJldHVybiB0YWlsICYmIHRhaWxbMV0udHlwZSA9PT0gImdmbUZvb3Rub3RlRGVmaW5pdGlvbkluZGVudCIgJiYgdGFpbFsyXS5zbGljZVNlcmlhbGl6ZSh0YWlsWzFdLCB0cnVlKS5sZW5ndGggPT09IDQgPyBvazMoY29kZTQpIDogbm9rKGNvZGU0KTsKICB9Cn0KdmFyIGluZGVudDI7CnZhciBpbml0X3N5bnRheDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19jb3JlX2NvbW1vbm1hcmsoKTsKICAgIGluaXRfbWljcm9tYXJrX2ZhY3Rvcnlfc3BhY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2hhcmFjdGVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbmRlbnQyID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVJbmRlbnQyLAogICAgICBwYXJ0aWFsOiB0cnVlCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGVAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlL2xpYi9odG1sLmpzCmZ1bmN0aW9uIGRlZmF1bHRCYWNrTGFiZWwocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpIHsKICByZXR1cm4gIkJhY2sgdG8gcmVmZXJlbmNlICIgKyAocmVmZXJlbmNlSW5kZXggKyAxKSArIChyZXJlZmVyZW5jZUluZGV4ID4gMSA/ICItIiArIHJlcmVmZXJlbmNlSW5kZXggOiAiIik7Cn0KZnVuY3Rpb24gZ2ZtRm9vdG5vdGVIdG1sKG9wdGlvbnMpIHsKICBjb25zdCBjb25maWczID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnMyOwogIGNvbnN0IGxhYmVsID0gY29uZmlnMy5sYWJlbCB8fCAiRm9vdG5vdGVzIjsKICBjb25zdCBsYWJlbFRhZ05hbWUgPSBjb25maWczLmxhYmVsVGFnTmFtZSB8fCAiaDIiOwogIGNvbnN0IGxhYmVsQXR0cmlidXRlcyA9IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzID09PSBudWxsIHx8IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzID09PSB2b2lkIDAgPyAnY2xhc3M9InNyLW9ubHkiJyA6IGNvbmZpZzMubGFiZWxBdHRyaWJ1dGVzOwogIGNvbnN0IGJhY2tMYWJlbCA9IGNvbmZpZzMuYmFja0xhYmVsIHx8IGRlZmF1bHRCYWNrTGFiZWw7CiAgY29uc3QgY2xvYmJlclByZWZpeCA9IGNvbmZpZzMuY2xvYmJlclByZWZpeCA9PT0gbnVsbCB8fCBjb25maWczLmNsb2JiZXJQcmVmaXggPT09IHZvaWQgMCA/ICJ1c2VyLWNvbnRlbnQtIiA6IGNvbmZpZzMuY2xvYmJlclByZWZpeDsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgZ2ZtRm9vdG5vdGVEZWZpbml0aW9uKCkgewogICAgICAgIGNvbnN0IHN0YWNrID0gdGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIik7CiAgICAgICAgc3RhY2sucHVzaChmYWxzZSk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKCkgewogICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZygpIHsKICAgICAgICB0aGlzLmJ1ZmZlcigpOwogICAgICB9CiAgICB9LAogICAgZXhpdDogewogICAgICBnZm1Gb290bm90ZURlZmluaXRpb24oKSB7CiAgICAgICAgbGV0IGRlZmluaXRpb25zID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZURlZmluaXRpb25zIik7CiAgICAgICAgY29uc3QgZm9vdG5vdGVTdGFjayA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9uU3RhY2siKTsKICAgICAgICBjb25zdCB0aWdodFN0YWNrID0gdGhpcy5nZXREYXRhKCJ0aWdodFN0YWNrIik7CiAgICAgICAgY29uc3QgY3VycmVudCA9IGZvb3Rub3RlU3RhY2sucG9wKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXN1bWUoKTsKICAgICAgICBpZiAoIWRlZmluaXRpb25zKSB7CiAgICAgICAgICB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvbnMiLCBkZWZpbml0aW9ucyA9IHt9KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFvd240LmNhbGwoZGVmaW5pdGlvbnMsIGN1cnJlbnQpKSBkZWZpbml0aW9uc1tjdXJyZW50XSA9IHZhbHVlMjsKICAgICAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgICAgIHRoaXMuc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIiwgdHJ1ZSk7CiAgICAgICAgdGhpcy5zZXREYXRhKCJsYXN0V2FzVGFnIik7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlRGVmaW5pdGlvbkxhYmVsU3RyaW5nKHRva2VuKSB7CiAgICAgICAgbGV0IGZvb3Rub3RlU3RhY2sgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIik7CiAgICAgICAgaWYgKCFmb290bm90ZVN0YWNrKSB7CiAgICAgICAgICB0aGlzLnNldERhdGEoImdmbUZvb3Rub3RlRGVmaW5pdGlvblN0YWNrIiwgZm9vdG5vdGVTdGFjayA9IFtdKTsKICAgICAgICB9CiAgICAgICAgZm9vdG5vdGVTdGFjay5wdXNoKG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICAgICAgICB0aGlzLnJlc3VtZSgpOwogICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgIH0sCiAgICAgIGdmbUZvb3Rub3RlQ2FsbFN0cmluZyh0b2tlbikgewogICAgICAgIGxldCBjYWxscyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiKTsKICAgICAgICBsZXQgY291bnRzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKTsKICAgICAgICBjb25zdCBpZCA9IG5vcm1hbGl6ZUlkZW50aWZpZXIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpOwogICAgICAgIGxldCBjb3VudGVyMjsKICAgICAgICB0aGlzLnJlc3VtZSgpOwogICAgICAgIGlmICghY2FsbHMpIHRoaXMuc2V0RGF0YSgiZ2ZtRm9vdG5vdGVDYWxsT3JkZXIiLCBjYWxscyA9IFtdKTsKICAgICAgICBpZiAoIWNvdW50cykgdGhpcy5zZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiLCBjb3VudHMgPSB7fSk7CiAgICAgICAgY29uc3QgaW5kZXgyID0gY2FsbHMuaW5kZXhPZihpZCk7CiAgICAgICAgY29uc3Qgc2FmZUlkID0gc2FuaXRpemVVcmkoaWQudG9Mb3dlckNhc2UoKSk7CiAgICAgICAgaWYgKGluZGV4MiA9PT0gLTEpIHsKICAgICAgICAgIGNhbGxzLnB1c2goaWQpOwogICAgICAgICAgY291bnRzW2lkXSA9IDE7CiAgICAgICAgICBjb3VudGVyMiA9IGNhbGxzLmxlbmd0aDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY291bnRzW2lkXSsrOwogICAgICAgICAgY291bnRlcjIgPSBpbmRleDIgKyAxOwogICAgICAgIH0KICAgICAgICBjb25zdCByZXVzZUNvdW50ZXIgPSBjb3VudHNbaWRdOwogICAgICAgIHRoaXMudGFnKCc8c3VwPjxhIGhyZWY9IiMnICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkICsgJyIgaWQ9IicgKyBjbG9iYmVyUHJlZml4ICsgImZucmVmLSIgKyBzYWZlSWQgKyAocmV1c2VDb3VudGVyID4gMSA/ICItIiArIHJldXNlQ291bnRlciA6ICIiKSArICciIGRhdGEtZm9vdG5vdGUtcmVmPSIiIGFyaWEtZGVzY3JpYmVkYnk9ImZvb3Rub3RlLWxhYmVsIj4nICsgU3RyaW5nKGNvdW50ZXIyKSArICI8L2E+PC9zdXA+Iik7CiAgICAgIH0sCiAgICAgIG51bGwoKSB7CiAgICAgICAgY29uc3QgY2FsbHMgPSB0aGlzLmdldERhdGEoImdmbUZvb3Rub3RlQ2FsbE9yZGVyIikgfHwgW107CiAgICAgICAgY29uc3QgY291bnRzID0gdGhpcy5nZXREYXRhKCJnZm1Gb290bm90ZUNhbGxDb3VudHMiKSB8fCB7fTsKICAgICAgICBjb25zdCBkZWZpbml0aW9ucyA9IHRoaXMuZ2V0RGF0YSgiZ2ZtRm9vdG5vdGVEZWZpbml0aW9ucyIpIHx8IHt9OwogICAgICAgIGxldCBpbmRleDIgPSAtMTsKICAgICAgICBpZiAoY2FsbHMubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCc8c2VjdGlvbiBkYXRhLWZvb3Rub3Rlcz0iIiBjbGFzcz0iZm9vdG5vdGVzIj48JyArIGxhYmVsVGFnTmFtZSArICcgaWQ9ImZvb3Rub3RlLWxhYmVsIicgKyAobGFiZWxBdHRyaWJ1dGVzID8gIiAiICsgbGFiZWxBdHRyaWJ1dGVzIDogIiIpICsgIj4iKTsKICAgICAgICAgIHRoaXMucmF3KHRoaXMuZW5jb2RlKGxhYmVsKSk7CiAgICAgICAgICB0aGlzLnRhZygiPC8iICsgbGFiZWxUYWdOYW1lICsgIj4iKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPG9sPiIpOwogICAgICAgIH0KICAgICAgICB3aGlsZSAoKytpbmRleDIgPCBjYWxscy5sZW5ndGgpIHsKICAgICAgICAgIGNvbnN0IGlkID0gY2FsbHNbaW5kZXgyXTsKICAgICAgICAgIGNvbnN0IHNhZmVJZCA9IHNhbml0aXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgICAgICAgbGV0IHJlZmVyZW5jZUluZGV4ID0gMDsKICAgICAgICAgIGNvbnN0IHJlZmVyZW5jZXMgPSBbXTsKICAgICAgICAgIHdoaWxlICgrK3JlZmVyZW5jZUluZGV4IDw9IGNvdW50c1tpZF0pIHsKICAgICAgICAgICAgcmVmZXJlbmNlcy5wdXNoKCc8YSBocmVmPSIjJyArIGNsb2JiZXJQcmVmaXggKyAiZm5yZWYtIiArIHNhZmVJZCArIChyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZWZlcmVuY2VJbmRleCA6ICIiKSArICciIGRhdGEtZm9vdG5vdGUtYmFja3JlZj0iIiBhcmlhLWxhYmVsPSInICsgdGhpcy5lbmNvZGUodHlwZW9mIGJhY2tMYWJlbCA9PT0gInN0cmluZyIgPyBiYWNrTGFiZWwgOiBiYWNrTGFiZWwoaW5kZXgyLCByZWZlcmVuY2VJbmRleCkpICsgJyIgY2xhc3M9ImRhdGEtZm9vdG5vdGUtYmFja3JlZiI+XHUyMUE5JyArIChyZWZlcmVuY2VJbmRleCA+IDEgPyAiPHN1cD4iICsgcmVmZXJlbmNlSW5kZXggKyAiPC9zdXA+IiA6ICIiKSArICI8L2E+Iik7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZWZlcmVuY2UgPSByZWZlcmVuY2VzLmpvaW4oIiAiKTsKICAgICAgICAgIGxldCBpbmplY3RlZCA9IGZhbHNlOwogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCc8bGkgaWQ9IicgKyBjbG9iYmVyUHJlZml4ICsgImZuLSIgKyBzYWZlSWQgKyAnIj4nKTsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZyhkZWZpbml0aW9uc1tpZF0ucmVwbGFjZSgvPFwvcD4oPzpccj9cbnxccik/JC8sIGZ1bmN0aW9uKCQwKSB7CiAgICAgICAgICAgIGluamVjdGVkID0gdHJ1ZTsKICAgICAgICAgICAgcmV0dXJuICIgIiArIHJlZmVyZW5jZSArICQwOwogICAgICAgICAgfSkpOwogICAgICAgICAgaWYgKCFpbmplY3RlZCkgewogICAgICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgICAgICB0aGlzLnRhZyhyZWZlcmVuY2UpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L2xpPiIpOwogICAgICAgIH0KICAgICAgICBpZiAoY2FsbHMubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L29sPiIpOwogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8L3NlY3Rpb24+Iik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfTsKfQp2YXIgb3duNCwgZW1wdHlPcHRpb25zMjsKdmFyIGluaXRfaHRtbDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tZm9vdG5vdGUvbGliL2h0bWwuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9ub3JtYWxpemVfaWRlbnRpZmllcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICAgIG93bjQgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGVtcHR5T3B0aW9uczIgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV9mb290bm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLWZvb3Rub3RlQDIuMS4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS1mb290bm90ZS9pbmRleC5qcyIoKSB7CiAgICBpbml0X3N5bnRheDIoKTsKICAgIGluaXRfaHRtbDMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtU3RyaWtldGhyb3VnaEh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGVudGVyOiB7CiAgICAgIHN0cmlrZXRocm91Z2goKSB7CiAgICAgICAgdGhpcy50YWcoIjxkZWw+Iik7CiAgICAgIH0KICAgIH0sCiAgICBleGl0OiB7CiAgICAgIHN0cmlrZXRocm91Z2goKSB7CiAgICAgICAgdGhpcy50YWcoIjwvZGVsPiIpOwogICAgICB9CiAgICB9CiAgfTsKfQp2YXIgaW5pdF9odG1sNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvc3ludGF4LmpzCmZ1bmN0aW9uIGdmbVN0cmlrZXRocm91Z2gob3B0aW9ucykgewogIGNvbnN0IG9wdGlvbnNfID0gb3B0aW9ucyB8fCB7fTsKICBsZXQgc2luZ2xlMiA9IG9wdGlvbnNfLnNpbmdsZVRpbGRlOwogIGNvbnN0IHRva2VuaXplciA9IHsKICAgIG5hbWU6ICJzdHJpa2V0aHJvdWdoIiwKICAgIHRva2VuaXplOiB0b2tlbml6ZVN0cmlrZXRocm91Z2gsCiAgICByZXNvbHZlQWxsOiByZXNvbHZlQWxsU3RyaWtldGhyb3VnaAogIH07CiAgaWYgKHNpbmdsZTIgPT09IG51bGwgfHwgc2luZ2xlMiA9PT0gdm9pZCAwKSB7CiAgICBzaW5nbGUyID0gdHJ1ZTsKICB9CiAgcmV0dXJuIHsKICAgIHRleHQ6IHsKICAgICAgWzEyNl06IHRva2VuaXplcgogICAgfSwKICAgIGluc2lkZVNwYW46IHsKICAgICAgbnVsbDogW3Rva2VuaXplcl0KICAgIH0sCiAgICBhdHRlbnRpb25NYXJrZXJzOiB7CiAgICAgIG51bGw6IFsxMjZdCiAgICB9CiAgfTsKICBmdW5jdGlvbiByZXNvbHZlQWxsU3RyaWtldGhyb3VnaChldmVudHMsIGNvbnRleHQyKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIiAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5IiAmJiBldmVudHNbaW5kZXgyXVsxXS5fY2xvc2UpIHsKICAgICAgICBsZXQgb3BlbiA9IGluZGV4MjsKICAgICAgICB3aGlsZSAob3Blbi0tKSB7CiAgICAgICAgICBpZiAoZXZlbnRzW29wZW5dWzBdID09PSAiZXhpdCIgJiYgZXZlbnRzW29wZW5dWzFdLnR5cGUgPT09ICJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiICYmIGV2ZW50c1tvcGVuXVsxXS5fb3BlbiAmJiAvLyBJZiB0aGUgc2l6ZXMgYXJlIHRoZSBzYW1lOgogICAgICAgICAgZXZlbnRzW2luZGV4Ml1bMV0uZW5kLm9mZnNldCAtIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA9PT0gZXZlbnRzW29wZW5dWzFdLmVuZC5vZmZzZXQgLSBldmVudHNbb3Blbl1bMV0uc3RhcnQub2Zmc2V0KSB7CiAgICAgICAgICAgIGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPSAic3RyaWtldGhyb3VnaFNlcXVlbmNlIjsKICAgICAgICAgICAgZXZlbnRzW29wZW5dWzFdLnR5cGUgPSAic3RyaWtldGhyb3VnaFNlcXVlbmNlIjsKICAgICAgICAgICAgY29uc3Qgc3RyaWtldGhyb3VnaDMgPSB7CiAgICAgICAgICAgICAgdHlwZTogInN0cmlrZXRocm91Z2giLAogICAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uc3RhcnQpLAogICAgICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRzW2luZGV4Ml1bMV0uZW5kKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCB0ZXh0OSA9IHsKICAgICAgICAgICAgICB0eXBlOiAic3RyaWtldGhyb3VnaFRleHQiLAogICAgICAgICAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBldmVudHNbb3Blbl1bMV0uZW5kKSwKICAgICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIGV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zdCBuZXh0RXZlbnRzID0gW1siZW50ZXIiLCBzdHJpa2V0aHJvdWdoMywgY29udGV4dDJdLCBbImVudGVyIiwgZXZlbnRzW29wZW5dWzFdLCBjb250ZXh0Ml0sIFsiZXhpdCIsIGV2ZW50c1tvcGVuXVsxXSwgY29udGV4dDJdLCBbImVudGVyIiwgdGV4dDksIGNvbnRleHQyXV07CiAgICAgICAgICAgIGNvbnN0IGluc2lkZVNwYW4yID0gY29udGV4dDIucGFyc2VyLmNvbnN0cnVjdHMuaW5zaWRlU3Bhbi5udWxsOwogICAgICAgICAgICBpZiAoaW5zaWRlU3BhbjIpIHsKICAgICAgICAgICAgICBzcGxpY2UobmV4dEV2ZW50cywgbmV4dEV2ZW50cy5sZW5ndGgsIDAsIHJlc29sdmVBbGwoaW5zaWRlU3BhbjIsIGV2ZW50cy5zbGljZShvcGVuICsgMSwgaW5kZXgyKSwgY29udGV4dDIpKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBzcGxpY2UobmV4dEV2ZW50cywgbmV4dEV2ZW50cy5sZW5ndGgsIDAsIFtbImV4aXQiLCB0ZXh0OSwgY29udGV4dDJdLCBbImVudGVyIiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0IiwgZXZlbnRzW2luZGV4Ml1bMV0sIGNvbnRleHQyXSwgWyJleGl0Iiwgc3RyaWtldGhyb3VnaDMsIGNvbnRleHQyXV0pOwogICAgICAgICAgICBzcGxpY2UoZXZlbnRzLCBvcGVuIC0gMSwgaW5kZXgyIC0gb3BlbiArIDMsIG5leHRFdmVudHMpOwogICAgICAgICAgICBpbmRleDIgPSBvcGVuICsgbmV4dEV2ZW50cy5sZW5ndGggLSAyOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gInN0cmlrZXRocm91Z2hTZXF1ZW5jZVRlbXBvcmFyeSIpIHsKICAgICAgICBldmVudHNbaW5kZXgyXVsxXS50eXBlID0gImRhdGEiOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZXZlbnRzOwogIH0KICBmdW5jdGlvbiB0b2tlbml6ZVN0cmlrZXRocm91Z2goZWZmZWN0cywgb2szLCBub2spIHsKICAgIGNvbnN0IHByZXZpb3VzMyA9IHRoaXMucHJldmlvdXM7CiAgICBjb25zdCBldmVudHMgPSB0aGlzLmV2ZW50czsKICAgIGxldCBzaXplID0gMDsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIGlmIChwcmV2aW91czMgPT09IDEyNiAmJiBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDFdWzFdLnR5cGUgIT09ICJjaGFyYWN0ZXJFc2NhcGUiKSB7CiAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcigic3RyaWtldGhyb3VnaFNlcXVlbmNlVGVtcG9yYXJ5Iik7CiAgICAgIHJldHVybiBtb3JlKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIG1vcmUoY29kZTQpIHsKICAgICAgY29uc3QgYmVmb3JlID0gY2xhc3NpZnlDaGFyYWN0ZXIocHJldmlvdXMzKTsKICAgICAgaWYgKGNvZGU0ID09PSAxMjYpIHsKICAgICAgICBpZiAoc2l6ZSA+IDEpIHJldHVybiBub2soY29kZTQpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgc2l6ZSsrOwogICAgICAgIHJldHVybiBtb3JlOwogICAgICB9CiAgICAgIGlmIChzaXplIDwgMiAmJiAhc2luZ2xlMikgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgIGNvbnN0IHRva2VuID0gZWZmZWN0cy5leGl0KCJzdHJpa2V0aHJvdWdoU2VxdWVuY2VUZW1wb3JhcnkiKTsKICAgICAgY29uc3QgYWZ0ZXIgPSBjbGFzc2lmeUNoYXJhY3Rlcihjb2RlNCk7CiAgICAgIHRva2VuLl9vcGVuID0gIWFmdGVyIHx8IGFmdGVyID09PSAyICYmIEJvb2xlYW4oYmVmb3JlKTsKICAgICAgdG9rZW4uX2Nsb3NlID0gIWJlZm9yZSB8fCBiZWZvcmUgPT09IDIgJiYgQm9vbGVhbihhZnRlcik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogIH0KfQp2YXIgaW5pdF9zeW50YXgzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaEAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tc3RyaWtldGhyb3VnaC9saWIvc3ludGF4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jbGFzc2lmeV9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfcmVzb2x2ZV9hbGwoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMKdmFyIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fc3RyaWtldGhyb3VnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2hAMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXN0cmlrZXRocm91Z2gvaW5kZXguanMiKCkgewogICAgaW5pdF9odG1sNCgpOwogICAgaW5pdF9zeW50YXgzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtVGFibGVIdG1sKCkgewogIHJldHVybiB7CiAgICBlbnRlcjogewogICAgICB0YWJsZSh0b2tlbikgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0b2tlbi5fYWxpZ247CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRhYmxlPiIpOwogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVBbGlnbiIsIHRhYmxlQWxpZ24pOwogICAgICB9LAogICAgICB0YWJsZUJvZHkoKSB7CiAgICAgICAgdGhpcy50YWcoIjx0Ym9keT4iKTsKICAgICAgfSwKICAgICAgdGFibGVEYXRhKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBjb25zdCBhbGlnbiA9IGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV07CiAgICAgICAgaWYgKGFsaWduID09PSB2b2lkIDApIHsKICAgICAgICAgIHRoaXMuYnVmZmVyKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgICB0aGlzLnRhZygiPHRkIiArIGFsaWduICsgIj4iKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZCgpIHsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8dGhlYWQ+Iik7CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZGVyKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBjb25zdCBhbGlnbiA9IGFsaWdubWVudFt0YWJsZUFsaWduW3RhYmxlQ29sdW1uXV07CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPHRoIiArIGFsaWduICsgIj4iKTsKICAgICAgfSwKICAgICAgdGFibGVSb3coKSB7CiAgICAgICAgdGhpcy5zZXREYXRhKCJ0YWJsZUNvbHVtbiIsIDApOwogICAgICAgIHRoaXMubGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgICAgdGhpcy50YWcoIjx0cj4iKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgLy8gT3ZlcndyaXRlIHRoZSBkZWZhdWx0IGNvZGUgdGV4dCBkYXRhIGhhbmRsZXIgdG8gdW5lc2NhcGUgZXNjYXBlZCBwaXBlcyB3aGVuCiAgICAgIC8vIHRoZXkgYXJlIGluIHRhYmxlcy4KICAgICAgY29kZVRleHREYXRhKHRva2VuKSB7CiAgICAgICAgbGV0IHZhbHVlMiA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgICAgIGlmICh0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKSkgewogICAgICAgICAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoL1xcKFtcXHxdKS9nLCByZXBsYWNlMik7CiAgICAgICAgfQogICAgICAgIHRoaXMucmF3KHRoaXMuZW5jb2RlKHZhbHVlMikpOwogICAgICB9LAogICAgICB0YWJsZSgpIHsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICB0aGlzLnNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKTsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8L3RhYmxlPiIpOwogICAgICB9LAogICAgICB0YWJsZUJvZHkoKSB7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90Ym9keT4iKTsKICAgICAgfSwKICAgICAgdGFibGVEYXRhKCkgewogICAgICAgIGNvbnN0IHRhYmxlQWxpZ24gPSB0aGlzLmdldERhdGEoInRhYmxlQWxpZ24iKTsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICBpZiAodGFibGVDb2x1bW4gaW4gdGFibGVBbGlnbikgewogICAgICAgICAgdGhpcy50YWcoIjwvdGQ+Iik7CiAgICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4gKyAxKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5yZXN1bWUoKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHRhYmxlSGVhZCgpIHsKICAgICAgICB0aGlzLmxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgICAgIHRoaXMudGFnKCI8L3RoZWFkPiIpOwogICAgICB9LAogICAgICB0YWJsZUhlYWRlcigpIHsKICAgICAgICBjb25zdCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICB0aGlzLnRhZygiPC90aD4iKTsKICAgICAgICB0aGlzLnNldERhdGEoInRhYmxlQ29sdW1uIiwgdGFibGVDb2x1bW4gKyAxKTsKICAgICAgfSwKICAgICAgdGFibGVSb3coKSB7CiAgICAgICAgY29uc3QgdGFibGVBbGlnbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVBbGlnbiIpOwogICAgICAgIGxldCB0YWJsZUNvbHVtbiA9IHRoaXMuZ2V0RGF0YSgidGFibGVDb2x1bW4iKTsKICAgICAgICB3aGlsZSAodGFibGVDb2x1bW4gPCB0YWJsZUFsaWduLmxlbmd0aCkgewogICAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICAgIHRoaXMudGFnKCI8dGQiICsgYWxpZ25tZW50W3RhYmxlQWxpZ25bdGFibGVDb2x1bW5dXSArICI+PC90ZD4iKTsKICAgICAgICAgIHRhYmxlQ29sdW1uKys7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2V0RGF0YSgidGFibGVDb2x1bW4iLCB0YWJsZUNvbHVtbik7CiAgICAgICAgdGhpcy5saW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgICAgICB0aGlzLnRhZygiPC90cj4iKTsKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gcmVwbGFjZTIoJDAsICQxKSB7CiAgcmV0dXJuICQxID09PSAifCIgPyAkMSA6ICQwOwp9CnZhciBhbGlnbm1lbnQ7CnZhciBpbml0X2h0bWw1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9odG1sLmpzIigpIHsKICAgIGFsaWdubWVudCA9IHsKICAgICAgbm9uZTogIiIsCiAgICAgIGxlZnQ6ICcgYWxpZ249ImxlZnQiJywKICAgICAgcmlnaHQ6ICcgYWxpZ249InJpZ2h0IicsCiAgICAgIGNlbnRlcjogJyBhbGlnbj0iY2VudGVyIicKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2VkaXQtbWFwLmpzCmZ1bmN0aW9uIGFkZEltcGxlbWVudGF0aW9uKGVkaXRNYXAsIGF0LCByZW1vdmUyLCBhZGQzKSB7CiAgbGV0IGluZGV4MiA9IDA7CiAgaWYgKHJlbW92ZTIgPT09IDAgJiYgYWRkMy5sZW5ndGggPT09IDApIHsKICAgIHJldHVybjsKICB9CiAgd2hpbGUgKGluZGV4MiA8IGVkaXRNYXAubWFwLmxlbmd0aCkgewogICAgaWYgKGVkaXRNYXAubWFwW2luZGV4Ml1bMF0gPT09IGF0KSB7CiAgICAgIGVkaXRNYXAubWFwW2luZGV4Ml1bMV0gKz0gcmVtb3ZlMjsKICAgICAgZWRpdE1hcC5tYXBbaW5kZXgyXVsyXS5wdXNoKC4uLmFkZDMpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpbmRleDIgKz0gMTsKICB9CiAgZWRpdE1hcC5tYXAucHVzaChbYXQsIHJlbW92ZTIsIGFkZDNdKTsKfQp2YXIgRWRpdE1hcDsKdmFyIGluaXRfZWRpdF9tYXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL2VkaXQtbWFwLmpzIigpIHsKICAgIEVkaXRNYXAgPSBjbGFzcyB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBuZXcgZWRpdCBtYXAuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLm1hcCA9IFtdOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYW4gZWRpdDogYSByZW1vdmUgYW5kL29yIGFkZCBhdCBhIGNlcnRhaW4gcGxhY2UuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlCiAgICAgICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBhZGQKICAgICAgICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgICovCiAgICAgIGFkZChpbmRleDIsIHJlbW92ZTIsIGFkZDMpIHsKICAgICAgICBhZGRJbXBsZW1lbnRhdGlvbih0aGlzLCBpbmRleDIsIHJlbW92ZTIsIGFkZDMpOwogICAgICB9CiAgICAgIC8vIFRvIGRvOiBhZGQgdGhpcyB3aGVuIG1vdmluZyB0byBgbWljcm9tYXJrYC4KICAgICAgLy8gLyoqCiAgICAgIC8vICAqIENyZWF0ZSBhbiBlZGl0OiBidXQgaW5zZXJ0IGBhZGRgIGJlZm9yZSBleGlzdGluZyBhZGRpdGlvbnMuCiAgICAgIC8vICAqCiAgICAgIC8vICAqIEBwYXJhbSB7bnVtYmVyfSBpbmRleAogICAgICAvLyAgKiBAcGFyYW0ge251bWJlcn0gcmVtb3ZlCiAgICAgIC8vICAqIEBwYXJhbSB7QXJyYXk8RXZlbnQ+fSBhZGQKICAgICAgLy8gICogQHJldHVybnMge3VuZGVmaW5lZH0KICAgICAgLy8gICovCiAgICAgIC8vIGFkZEJlZm9yZShpbmRleCwgcmVtb3ZlLCBhZGQpIHsKICAgICAgLy8gICBhZGRJbXBsZW1lbnRhdGlvbih0aGlzLCBpbmRleCwgcmVtb3ZlLCBhZGQsIHRydWUpCiAgICAgIC8vIH0KICAgICAgLyoqCiAgICAgICAqIERvbmUsIGNoYW5nZSB0aGUgZXZlbnRzLgogICAgICAgKgogICAgICAgKiBAcGFyYW0ge0FycmF5PEV2ZW50Pn0gZXZlbnRzCiAgICAgICAqIEByZXR1cm5zIHt1bmRlZmluZWR9CiAgICAgICAqLwogICAgICBjb25zdW1lKGV2ZW50cykgewogICAgICAgIHRoaXMubWFwLnNvcnQoZnVuY3Rpb24oYTUsIGI1KSB7CiAgICAgICAgICByZXR1cm4gYTVbMF0gLSBiNVswXTsKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5tYXAubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBpbmRleDIgPSB0aGlzLm1hcC5sZW5ndGg7CiAgICAgICAgY29uc3QgdmVjcyA9IFtdOwogICAgICAgIHdoaWxlIChpbmRleDIgPiAwKSB7CiAgICAgICAgICBpbmRleDIgLT0gMTsKICAgICAgICAgIHZlY3MucHVzaChldmVudHMuc2xpY2UodGhpcy5tYXBbaW5kZXgyXVswXSArIHRoaXMubWFwW2luZGV4Ml1bMV0pLCB0aGlzLm1hcFtpbmRleDJdWzJdKTsKICAgICAgICAgIGV2ZW50cy5sZW5ndGggPSB0aGlzLm1hcFtpbmRleDJdWzBdOwogICAgICAgIH0KICAgICAgICB2ZWNzLnB1c2goZXZlbnRzLnNsaWNlKCkpOwogICAgICAgIGV2ZW50cy5sZW5ndGggPSAwOwogICAgICAgIGxldCBzbGljZSA9IHZlY3MucG9wKCk7CiAgICAgICAgd2hpbGUgKHNsaWNlKSB7CiAgICAgICAgICBmb3IgKGNvbnN0IGVsZW1lbnQ0IG9mIHNsaWNlKSB7CiAgICAgICAgICAgIGV2ZW50cy5wdXNoKGVsZW1lbnQ0KTsKICAgICAgICAgIH0KICAgICAgICAgIHNsaWNlID0gdmVjcy5wb3AoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5tYXAubGVuZ3RoID0gMDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlQDIuMS4xL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZS9saWIvaW5mZXIuanMKZnVuY3Rpb24gZ2ZtVGFibGVBbGlnbihldmVudHMsIGluZGV4MikgewogIGxldCBpbkRlbGltaXRlclJvdyA9IGZhbHNlOwogIGNvbnN0IGFsaWduID0gW107CiAgd2hpbGUgKGluZGV4MiA8IGV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gZXZlbnRzW2luZGV4Ml07CiAgICBpZiAoaW5EZWxpbWl0ZXJSb3cpIHsKICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJ0YWJsZUNvbnRlbnQiKSB7CiAgICAgICAgICBhbGlnbi5wdXNoKGV2ZW50c1tpbmRleDIgKyAxXVsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiID8gImxlZnQiIDogIm5vbmUiKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlQ29udGVudCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4MiAtIDFdWzFdLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlck1hcmtlciIpIHsKICAgICAgICAgIGNvbnN0IGFsaWduSW5kZXggPSBhbGlnbi5sZW5ndGggLSAxOwogICAgICAgICAgYWxpZ25bYWxpZ25JbmRleF0gPSBhbGlnblthbGlnbkluZGV4XSA9PT0gImxlZnQiID8gImNlbnRlciIgOiAicmlnaHQiOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChldmVudFsxXS50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IikgewogICAgICBpbkRlbGltaXRlclJvdyA9IHRydWU7CiAgICB9CiAgICBpbmRleDIgKz0gMTsKICB9CiAgcmV0dXJuIGFsaWduOwp9CnZhciBpbml0X2luZmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2xpYi9pbmZlci5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBnZm1UYWJsZSgpIHsKICByZXR1cm4gewogICAgZmxvdzogewogICAgICBudWxsOiB7CiAgICAgICAgbmFtZTogInRhYmxlIiwKICAgICAgICB0b2tlbml6ZTogdG9rZW5pemVUYWJsZSwKICAgICAgICByZXNvbHZlQWxsOiByZXNvbHZlVGFibGUKICAgICAgfQogICAgfQogIH07Cn0KZnVuY3Rpb24gdG9rZW5pemVUYWJsZShlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICBsZXQgc2l6ZSA9IDA7CiAgbGV0IHNpemVCID0gMDsKICBsZXQgc2VlbjsKICByZXR1cm4gc3RhcnQ7CiAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgIGxldCBpbmRleDIgPSBzZWxmMi5ldmVudHMubGVuZ3RoIC0gMTsKICAgIHdoaWxlIChpbmRleDIgPiAtMSkgewogICAgICBjb25zdCB0eXBlNSA9IHNlbGYyLmV2ZW50c1tpbmRleDJdWzFdLnR5cGU7CiAgICAgIGlmICh0eXBlNSA9PT0gImxpbmVFbmRpbmciIHx8IC8vIE5vdGU6IG1hcmtkb3duLXJzIHVzZXMgYHdoaXRlc3BhY2VgIGluc3RlYWQgb2YgYGxpbmVQcmVmaXhgCiAgICAgIHR5cGU1ID09PSAibGluZVByZWZpeCIpIGluZGV4Mi0tOwogICAgICBlbHNlIGJyZWFrOwogICAgfQogICAgY29uc3QgdGFpbCA9IGluZGV4MiA+IC0xID8gc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA6IG51bGw7CiAgICBjb25zdCBuZXh0MiA9IHRhaWwgPT09ICJ0YWJsZUhlYWQiIHx8IHRhaWwgPT09ICJ0YWJsZVJvdyIgPyBib2R5Um93U3RhcnQgOiBoZWFkUm93QmVmb3JlOwogICAgaWYgKG5leHQyID09PSBib2R5Um93U3RhcnQgJiYgc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbmV4dDIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93QmVmb3JlKGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUhlYWQiKTsKICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlUm93Iik7CiAgICByZXR1cm4gaGVhZFJvd1N0YXJ0KGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd1N0YXJ0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICByZXR1cm4gaGVhZFJvd0JyZWFrKGNvZGU0KTsKICAgIH0KICAgIHNlZW4gPSB0cnVlOwogICAgc2l6ZUIgKz0gMTsKICAgIHJldHVybiBoZWFkUm93QnJlYWsoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkUm93QnJlYWsoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGlmIChzaXplQiA+IDEpIHsKICAgICAgICBzaXplQiA9IDA7CiAgICAgICAgc2VsZjIuaW50ZXJydXB0ID0gdHJ1ZTsKICAgICAgICBlZmZlY3RzLmV4aXQoInRhYmxlUm93Iik7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJTdGFydDsKICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGhlYWRSb3dCcmVhaywgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICBzaXplQiArPSAxOwogICAgaWYgKHNlZW4pIHsKICAgICAgc2VlbiA9IGZhbHNlOwogICAgICBzaXplICs9IDE7CiAgICB9CiAgICBpZiAoY29kZTQgPT09IDEyNCkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhazsKICAgIH0KICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgIHJldHVybiBoZWFkUm93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWRSb3dEYXRhKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwgfHwgY29kZTQgPT09IDEyNCB8fCBtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmV4aXQoImRhdGEiKTsKICAgICAgcmV0dXJuIGhlYWRSb3dCcmVhayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgcmV0dXJuIGNvZGU0ID09PSA5MiA/IGhlYWRSb3dFc2NhcGUgOiBoZWFkUm93RGF0YTsKICB9CiAgZnVuY3Rpb24gaGVhZFJvd0VzY2FwZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MiB8fCBjb2RlNCA9PT0gMTI0KSB7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBoZWFkUm93RGF0YTsKICAgIH0KICAgIHJldHVybiBoZWFkUm93RGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJTdGFydChjb2RlNCkgewogICAgc2VsZjIuaW50ZXJydXB0ID0gZmFsc2U7CiAgICBpZiAoc2VsZjIucGFyc2VyLmxhenlbc2VsZjIubm93KCkubGluZV0pIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZURlbGltaXRlclJvdyIpOwogICAgc2VlbiA9IGZhbHNlOwogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlckJlZm9yZSwgImxpbmVQcmVmaXgiLCBzZWxmMi5wYXJzZXIuY29uc3RydWN0cy5kaXNhYmxlLm51bGwuaW5jbHVkZXMoImNvZGVJbmRlbnRlZCIpID8gdm9pZCAwIDogNCkoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJCZWZvcmUoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1IHx8IGNvZGU0ID09PSA1OCkgewogICAgICByZXR1cm4gaGVhZERlbGltaXRlclZhbHVlQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIHNlZW4gPSB0cnVlOwogICAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZUNlbGxEaXZpZGVyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVDZWxsRGl2aWRlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckNlbGxCZWZvcmU7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlck5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJDZWxsQmVmb3JlKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBoZWFkRGVsaW1pdGVyVmFsdWVCZWZvcmUsICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJWYWx1ZUJlZm9yZShjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA1OCkgewogICAgICBzaXplQiArPSAxOwogICAgICBzZWVuID0gdHJ1ZTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckxlZnRBbGlnbm1lbnRBZnRlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNDUpIHsKICAgICAgc2l6ZUIgKz0gMTsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJMZWZ0QWxpZ25tZW50QWZ0ZXIoY29kZTQpOwogICAgfQogICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyTGVmdEFsaWdubWVudEFmdGVyKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDQ1KSB7CiAgICAgIGVmZmVjdHMuZW50ZXIoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyRmlsbGVyKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gaGVhZERlbGltaXRlckZpbGxlcihjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA0NSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlckZpbGxlcjsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gNTgpIHsKICAgICAgc2VlbiA9IHRydWU7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVEZWxpbWl0ZXJGaWxsZXIiKTsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVEZWxpbWl0ZXJNYXJrZXIiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YWJsZURlbGltaXRlck1hcmtlciIpOwogICAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXI7CiAgICB9CiAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyRmlsbGVyIik7CiAgICByZXR1cm4gaGVhZERlbGltaXRlclJpZ2h0QWxpZ25tZW50QWZ0ZXIoY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyUmlnaHRBbGlnbm1lbnRBZnRlcihjb2RlNCkgewogICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgaGVhZERlbGltaXRlckNlbGxBZnRlciwgIndoaXRlc3BhY2UiKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gaGVhZERlbGltaXRlckNlbGxBZnRlcihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGhlYWREZWxpbWl0ZXJDZWxsQWZ0ZXIoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gMTI0KSB7CiAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyQmVmb3JlKGNvZGU0KTsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGlmICghc2VlbiB8fCBzaXplICE9PSBzaXplQikgewogICAgICAgIHJldHVybiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlRGVsaW1pdGVyUm93Iik7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVIZWFkIik7CiAgICAgIHJldHVybiBvazMoY29kZTQpOwogICAgfQogICAgcmV0dXJuIGhlYWREZWxpbWl0ZXJOb2soY29kZTQpOwogIH0KICBmdW5jdGlvbiBoZWFkRGVsaW1pdGVyTm9rKGNvZGU0KSB7CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd1N0YXJ0KGNvZGU0KSB7CiAgICBlZmZlY3RzLmVudGVyKCJ0YWJsZVJvdyIpOwogICAgcmV0dXJuIGJvZHlSb3dCcmVhayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGJvZHlSb3dCcmVhayhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5lbnRlcigidGFibGVDZWxsRGl2aWRlciIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoInRhYmxlQ2VsbERpdmlkZXIiKTsKICAgICAgcmV0dXJuIGJvZHlSb3dCcmVhazsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFibGVSb3ciKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBib2R5Um93QnJlYWssICJ3aGl0ZXNwYWNlIikoY29kZTQpOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigiZGF0YSIpOwogICAgcmV0dXJuIGJvZHlSb3dEYXRhKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gYm9keVJvd0RhdGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBjb2RlNCA9PT0gMTI0IHx8IG1hcmtkb3duTGluZUVuZGluZ09yU3BhY2UoY29kZTQpKSB7CiAgICAgIGVmZmVjdHMuZXhpdCgiZGF0YSIpOwogICAgICByZXR1cm4gYm9keVJvd0JyZWFrKGNvZGU0KTsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gY29kZTQgPT09IDkyID8gYm9keVJvd0VzY2FwZSA6IGJvZHlSb3dEYXRhOwogIH0KICBmdW5jdGlvbiBib2R5Um93RXNjYXBlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IDkyIHx8IGNvZGU0ID09PSAxMjQpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGJvZHlSb3dEYXRhOwogICAgfQogICAgcmV0dXJuIGJvZHlSb3dEYXRhKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gcmVzb2x2ZVRhYmxlKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgaW5kZXgyID0gLTE7CiAgbGV0IGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gdHJ1ZTsKICBsZXQgcm93S2luZCA9IDA7CiAgbGV0IGxhc3RDZWxsID0gWzAsIDAsIDAsIDBdOwogIGxldCBjZWxsMiA9IFswLCAwLCAwLCAwXTsKICBsZXQgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICBsZXQgbGFzdFRhYmxlRW5kID0gMDsKICBsZXQgY3VycmVudFRhYmxlOwogIGxldCBjdXJyZW50Qm9keTsKICBsZXQgY3VycmVudENlbGw7CiAgY29uc3QgbWFwNyA9IG5ldyBFZGl0TWFwKCk7CiAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICAgIGNvbnN0IHRva2VuID0gZXZlbnRbMV07CiAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJ0YWJsZUhlYWQiKSB7CiAgICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICAgICAgICBpZiAobGFzdFRhYmxlRW5kICE9PSAwKSB7CiAgICAgICAgICBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBsYXN0VGFibGVFbmQsIGN1cnJlbnRUYWJsZSwgY3VycmVudEJvZHkpOwogICAgICAgICAgY3VycmVudEJvZHkgPSB2b2lkIDA7CiAgICAgICAgICBsYXN0VGFibGVFbmQgPSAwOwogICAgICAgIH0KICAgICAgICBjdXJyZW50VGFibGUgPSB7CiAgICAgICAgICB0eXBlOiAidGFibGUiLAogICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KSwKICAgICAgICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgICAgICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgdG9rZW4uZW5kKQogICAgICAgIH07CiAgICAgICAgbWFwNy5hZGQoaW5kZXgyLCAwLCBbWyJlbnRlciIsIGN1cnJlbnRUYWJsZSwgY29udGV4dDJdXSk7CiAgICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlUm93IiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgICAgaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUgPSB0cnVlOwogICAgICAgIGN1cnJlbnRDZWxsID0gdm9pZCAwOwogICAgICAgIGxhc3RDZWxsID0gWzAsIDAsIDAsIDBdOwogICAgICAgIGNlbGwyID0gWzAsIGluZGV4MiArIDEsIDAsIDBdOwogICAgICAgIGlmIChhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdykgewogICAgICAgICAgYWZ0ZXJIZWFkQXdhaXRpbmdGaXJzdEJvZHlSb3cgPSBmYWxzZTsKICAgICAgICAgIGN1cnJlbnRCb2R5ID0gewogICAgICAgICAgICB0eXBlOiAidGFibGVCb2R5IiwKICAgICAgICAgICAgc3RhcnQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLnN0YXJ0KSwKICAgICAgICAgICAgLy8gTm90ZTogY29ycmVjdCBlbmQgaXMgc2V0IGxhdGVyLgogICAgICAgICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHRva2VuLmVuZCkKICAgICAgICAgIH07CiAgICAgICAgICBtYXA3LmFkZChpbmRleDIsIDAsIFtbImVudGVyIiwgY3VycmVudEJvZHksIGNvbnRleHQyXV0pOwogICAgICAgIH0KICAgICAgICByb3dLaW5kID0gdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyUm93IiA/IDIgOiBjdXJyZW50Qm9keSA/IDMgOiAxOwogICAgICB9IGVsc2UgaWYgKHJvd0tpbmQgJiYgKHRva2VuLnR5cGUgPT09ICJkYXRhIiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJNYXJrZXIiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlckZpbGxlciIpKSB7CiAgICAgICAgaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUgPSBmYWxzZTsKICAgICAgICBpZiAoY2VsbDJbMl0gPT09IDApIHsKICAgICAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgICAgICBjZWxsMlswXSA9IGNlbGwyWzFdOwogICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIHZvaWQgMCwgY3VycmVudENlbGwpOwogICAgICAgICAgICBsYXN0Q2VsbCA9IFswLCAwLCAwLCAwXTsKICAgICAgICAgIH0KICAgICAgICAgIGNlbGwyWzJdID0gaW5kZXgyOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAidGFibGVDZWxsRGl2aWRlciIpIHsKICAgICAgICBpZiAoaW5GaXJzdENlbGxBd2FpdGluZ1BpcGUpIHsKICAgICAgICAgIGluRmlyc3RDZWxsQXdhaXRpbmdQaXBlID0gZmFsc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGlmIChsYXN0Q2VsbFsxXSAhPT0gMCkgewogICAgICAgICAgICBjZWxsMlswXSA9IGNlbGwyWzFdOwogICAgICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIHZvaWQgMCwgY3VycmVudENlbGwpOwogICAgICAgICAgfQogICAgICAgICAgbGFzdENlbGwgPSBjZWxsMjsKICAgICAgICAgIGNlbGwyID0gW2xhc3RDZWxsWzFdLCBpbmRleDIsIDAsIDBdOwogICAgICAgIH0KICAgICAgfQogICAgfSBlbHNlIGlmICh0b2tlbi50eXBlID09PSAidGFibGVIZWFkIikgewogICAgICBhZnRlckhlYWRBd2FpdGluZ0ZpcnN0Qm9keVJvdyA9IHRydWU7CiAgICAgIGxhc3RUYWJsZUVuZCA9IGluZGV4MjsKICAgIH0gZWxzZSBpZiAodG9rZW4udHlwZSA9PT0gInRhYmxlUm93IiB8fCB0b2tlbi50eXBlID09PSAidGFibGVEZWxpbWl0ZXJSb3ciKSB7CiAgICAgIGxhc3RUYWJsZUVuZCA9IGluZGV4MjsKICAgICAgaWYgKGxhc3RDZWxsWzFdICE9PSAwKSB7CiAgICAgICAgY2VsbDJbMF0gPSBjZWxsMlsxXTsKICAgICAgICBjdXJyZW50Q2VsbCA9IGZsdXNoQ2VsbChtYXA3LCBjb250ZXh0MiwgbGFzdENlbGwsIHJvd0tpbmQsIGluZGV4MiwgY3VycmVudENlbGwpOwogICAgICB9IGVsc2UgaWYgKGNlbGwyWzFdICE9PSAwKSB7CiAgICAgICAgY3VycmVudENlbGwgPSBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIGNlbGwyLCByb3dLaW5kLCBpbmRleDIsIGN1cnJlbnRDZWxsKTsKICAgICAgfQogICAgICByb3dLaW5kID0gMDsKICAgIH0gZWxzZSBpZiAocm93S2luZCAmJiAodG9rZW4udHlwZSA9PT0gImRhdGEiIHx8IHRva2VuLnR5cGUgPT09ICJ0YWJsZURlbGltaXRlck1hcmtlciIgfHwgdG9rZW4udHlwZSA9PT0gInRhYmxlRGVsaW1pdGVyRmlsbGVyIikpIHsKICAgICAgY2VsbDJbM10gPSBpbmRleDI7CiAgICB9CiAgfQogIGlmIChsYXN0VGFibGVFbmQgIT09IDApIHsKICAgIGZsdXNoVGFibGVFbmQobWFwNywgY29udGV4dDIsIGxhc3RUYWJsZUVuZCwgY3VycmVudFRhYmxlLCBjdXJyZW50Qm9keSk7CiAgfQogIG1hcDcuY29uc3VtZShjb250ZXh0Mi5ldmVudHMpOwogIGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGNvbnRleHQyLmV2ZW50cy5sZW5ndGgpIHsKICAgIGNvbnN0IGV2ZW50ID0gY29udGV4dDIuZXZlbnRzW2luZGV4Ml07CiAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gInRhYmxlIikgewogICAgICBldmVudFsxXS5fYWxpZ24gPSBnZm1UYWJsZUFsaWduKGNvbnRleHQyLmV2ZW50cywgaW5kZXgyKTsKICAgIH0KICB9CiAgcmV0dXJuIGV2ZW50czsKfQpmdW5jdGlvbiBmbHVzaENlbGwobWFwNywgY29udGV4dDIsIHJhbmdlMiwgcm93S2luZCwgcm93RW5kLCBwcmV2aW91c0NlbGwpIHsKICBjb25zdCBncm91cE5hbWUgPSByb3dLaW5kID09PSAxID8gInRhYmxlSGVhZGVyIiA6IHJvd0tpbmQgPT09IDIgPyAidGFibGVEZWxpbWl0ZXIiIDogInRhYmxlRGF0YSI7CiAgY29uc3QgdmFsdWVOYW1lID0gInRhYmxlQ29udGVudCI7CiAgaWYgKHJhbmdlMlswXSAhPT0gMCkgewogICAgcHJldmlvdXNDZWxsLmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzBdKSk7CiAgICBtYXA3LmFkZChyYW5nZTJbMF0sIDAsIFtbImV4aXQiLCBwcmV2aW91c0NlbGwsIGNvbnRleHQyXV0pOwogIH0KICBjb25zdCBub3cyID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCByYW5nZTJbMV0pOwogIHByZXZpb3VzQ2VsbCA9IHsKICAgIHR5cGU6IGdyb3VwTmFtZSwKICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCBub3cyKSwKICAgIC8vIE5vdGU6IGNvcnJlY3QgZW5kIGlzIHNldCBsYXRlci4KICAgIGVuZDogT2JqZWN0LmFzc2lnbih7fSwgbm93MikKICB9OwogIG1hcDcuYWRkKHJhbmdlMlsxXSwgMCwgW1siZW50ZXIiLCBwcmV2aW91c0NlbGwsIGNvbnRleHQyXV0pOwogIGlmIChyYW5nZTJbMl0gIT09IDApIHsKICAgIGNvbnN0IHJlbGF0ZWRTdGFydCA9IGdldFBvaW50KGNvbnRleHQyLmV2ZW50cywgcmFuZ2UyWzJdKTsKICAgIGNvbnN0IHJlbGF0ZWRFbmQgPSBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJhbmdlMlszXSk7CiAgICBjb25zdCB2YWx1ZVRva2VuID0gewogICAgICB0eXBlOiB2YWx1ZU5hbWUsCiAgICAgIHN0YXJ0OiBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkU3RhcnQpLAogICAgICBlbmQ6IE9iamVjdC5hc3NpZ24oe30sIHJlbGF0ZWRFbmQpCiAgICB9OwogICAgbWFwNy5hZGQocmFuZ2UyWzJdLCAwLCBbWyJlbnRlciIsIHZhbHVlVG9rZW4sIGNvbnRleHQyXV0pOwogICAgaWYgKHJvd0tpbmQgIT09IDIpIHsKICAgICAgY29uc3Qgc3RhcnQgPSBjb250ZXh0Mi5ldmVudHNbcmFuZ2UyWzJdXTsKICAgICAgY29uc3QgZW5kMyA9IGNvbnRleHQyLmV2ZW50c1tyYW5nZTJbM11dOwogICAgICBzdGFydFsxXS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBlbmQzWzFdLmVuZCk7CiAgICAgIHN0YXJ0WzFdLnR5cGUgPSAiY2h1bmtUZXh0IjsKICAgICAgc3RhcnRbMV0uY29udGVudFR5cGUgPSAidGV4dCI7CiAgICAgIGlmIChyYW5nZTJbM10gPiByYW5nZTJbMl0gKyAxKSB7CiAgICAgICAgY29uc3QgYTUgPSByYW5nZTJbMl0gKyAxOwogICAgICAgIGNvbnN0IGI1ID0gcmFuZ2UyWzNdIC0gcmFuZ2UyWzJdIC0gMTsKICAgICAgICBtYXA3LmFkZChhNSwgYjUsIFtdKTsKICAgICAgfQogICAgfQogICAgbWFwNy5hZGQocmFuZ2UyWzNdICsgMSwgMCwgW1siZXhpdCIsIHZhbHVlVG9rZW4sIGNvbnRleHQyXV0pOwogIH0KICBpZiAocm93RW5kICE9PSB2b2lkIDApIHsKICAgIHByZXZpb3VzQ2VsbC5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCBnZXRQb2ludChjb250ZXh0Mi5ldmVudHMsIHJvd0VuZCkpOwogICAgbWFwNy5hZGQocm93RW5kLCAwLCBbWyJleGl0IiwgcHJldmlvdXNDZWxsLCBjb250ZXh0Ml1dKTsKICAgIHByZXZpb3VzQ2VsbCA9IHZvaWQgMDsKICB9CiAgcmV0dXJuIHByZXZpb3VzQ2VsbDsKfQpmdW5jdGlvbiBmbHVzaFRhYmxlRW5kKG1hcDcsIGNvbnRleHQyLCBpbmRleDIsIHRhYmxlMiwgdGFibGVCb2R5KSB7CiAgY29uc3QgZXhpdHMgPSBbXTsKICBjb25zdCByZWxhdGVkID0gZ2V0UG9pbnQoY29udGV4dDIuZXZlbnRzLCBpbmRleDIpOwogIGlmICh0YWJsZUJvZHkpIHsKICAgIHRhYmxlQm9keS5lbmQgPSBPYmplY3QuYXNzaWduKHt9LCByZWxhdGVkKTsKICAgIGV4aXRzLnB1c2goWyJleGl0IiwgdGFibGVCb2R5LCBjb250ZXh0Ml0pOwogIH0KICB0YWJsZTIuZW5kID0gT2JqZWN0LmFzc2lnbih7fSwgcmVsYXRlZCk7CiAgZXhpdHMucHVzaChbImV4aXQiLCB0YWJsZTIsIGNvbnRleHQyXSk7CiAgbWFwNy5hZGQoaW5kZXgyICsgMSwgMCwgZXhpdHMpOwp9CmZ1bmN0aW9uIGdldFBvaW50KGV2ZW50cywgaW5kZXgyKSB7CiAgY29uc3QgZXZlbnQgPSBldmVudHNbaW5kZXgyXTsKICBjb25zdCBzaWRlID0gZXZlbnRbMF0gPT09ICJlbnRlciIgPyAic3RhcnQiIDogImVuZCI7CiAgcmV0dXJuIGV2ZW50WzFdW3NpZGVdOwp9CnZhciBpbml0X3N5bnRheDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWJsZUAyLjEuMS9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGUvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9lZGl0X21hcCgpOwogICAgaW5pdF9pbmZlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFibGVAMi4xLjEvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhYmxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDUoKTsKICAgIGluaXRfc3ludGF4NCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvbGliL2luZGV4LmpzCmZ1bmN0aW9uIGdmbVRhZ2ZpbHRlckh0bWwoKSB7CiAgcmV0dXJuIHsKICAgIGV4aXQ6IHsKICAgICAgaHRtbEZsb3dEYXRhKHRva2VuKSB7CiAgICAgICAgZXhpdEh0bWxEYXRhLmNhbGwodGhpcywgdG9rZW4sIHJlRmxvdyk7CiAgICAgIH0sCiAgICAgIGh0bWxUZXh0RGF0YSh0b2tlbikgewogICAgICAgIGV4aXRIdG1sRGF0YS5jYWxsKHRoaXMsIHRva2VuLCByZVRleHQpOwogICAgICB9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBleGl0SHRtbERhdGEodG9rZW4sIGZpbHRlcjIpIHsKICBsZXQgdmFsdWUyID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgaWYgKHRoaXMub3B0aW9ucy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgIHZhbHVlMiA9IHZhbHVlMi5yZXBsYWNlKGZpbHRlcjIsICImbHQ7JDEkMiIpOwogIH0KICB0aGlzLnJhdyh0aGlzLmVuY29kZSh2YWx1ZTIpKTsKfQp2YXIgcmVGbG93LCByZVRleHQ7CnZhciBpbml0X2xpYjE5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFnZmlsdGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXIvbGliL2luZGV4LmpzIigpIHsKICAgIHJlRmxvdyA9IC88KFwvPykoaWZyYW1lfG5vZW1iZWR8bm9mcmFtZXN8cGxhaW50ZXh0fHNjcmlwdHxzdHlsZXx0aXRsZXx0ZXh0YXJlYXx4bXApKD89W1x0XG5cZlxyIC8+XSkvZ2k7CiAgICByZVRleHQgPSBuZXcgUmVnRXhwKCJeIiArIHJlRmxvdy5zb3VyY2UsICJpIik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlci9pbmRleC5qcwp2YXIgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWdmaWx0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YWdmaWx0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhZ2ZpbHRlci9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjE5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2h0bWwuanMKZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtSHRtbCgpIHsKICByZXR1cm4gewogICAgZW50ZXI6IHsKICAgICAgdGFza0xpc3RDaGVjaygpIHsKICAgICAgICB0aGlzLnRhZygnPGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD0iIiAnKTsKICAgICAgfQogICAgfSwKICAgIGV4aXQ6IHsKICAgICAgdGFza0xpc3RDaGVjaygpIHsKICAgICAgICB0aGlzLnRhZygiLz4iKTsKICAgICAgfSwKICAgICAgdGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCgpIHsKICAgICAgICB0aGlzLnRhZygnY2hlY2tlZD0iIiAnKTsKICAgICAgfQogICAgfQogIH07Cn0KdmFyIGluaXRfaHRtbDYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL2h0bWwuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2xpYi9zeW50YXguanMKZnVuY3Rpb24gZ2ZtVGFza0xpc3RJdGVtKCkgewogIHJldHVybiB7CiAgICB0ZXh0OiB7CiAgICAgIFs5MV06IHRhc2tsaXN0Q2hlY2sKICAgIH0KICB9Owp9CmZ1bmN0aW9uIHRva2VuaXplVGFza2xpc3RDaGVjayhlZmZlY3RzLCBvazMsIG5vaykgewogIGNvbnN0IHNlbGYyID0gdGhpczsKICByZXR1cm4gb3BlbjsKICBmdW5jdGlvbiBvcGVuKGNvZGU0KSB7CiAgICBpZiAoCiAgICAgIC8vIEV4aXQgaWYgdGhlcmXigJlzIHN0dWZmIGJlZm9yZS4KICAgICAgc2VsZjIucHJldmlvdXMgIT09IG51bGwgfHwgLy8gRXhpdCBpZiBub3QgaW4gdGhlIGZpcnN0IGNvbnRlbnQgdGhhdCBpcyB0aGUgZmlyc3QgY2hpbGQgb2YgYSBsaXN0CiAgICAgIC8vIGl0ZW0uCiAgICAgICFzZWxmMi5fZ2ZtVGFza2xpc3RGaXJzdENvbnRlbnRPZkxpc3RJdGVtCiAgICApIHsKICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrIik7CiAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICByZXR1cm4gaW5zaWRlOwogIH0KICBmdW5jdGlvbiBpbnNpZGUoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmdPclNwYWNlKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgZWZmZWN0cy5leGl0KCJ0YXNrTGlzdENoZWNrVmFsdWVVbmNoZWNrZWQiKTsKICAgICAgcmV0dXJuIGNsb3NlNzsKICAgIH0KICAgIGlmIChjb2RlNCA9PT0gODggfHwgY29kZTQgPT09IDEyMCkgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrVmFsdWVDaGVja2VkIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja1ZhbHVlQ2hlY2tlZCIpOwogICAgICByZXR1cm4gY2xvc2U3OwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNsb3NlNyhjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSA5MykgewogICAgICBlZmZlY3RzLmVudGVyKCJ0YXNrTGlzdENoZWNrTWFya2VyIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgidGFza0xpc3RDaGVja01hcmtlciIpOwogICAgICBlZmZlY3RzLmV4aXQoInRhc2tMaXN0Q2hlY2siKTsKICAgICAgcmV0dXJuIGFmdGVyOwogICAgfQogICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICByZXR1cm4gb2szKGNvZGU0KTsKICAgIH0KICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICByZXR1cm4gZWZmZWN0cy5jaGVjayh7CiAgICAgICAgdG9rZW5pemU6IHNwYWNlVGhlbk5vblNwYWNlCiAgICAgIH0sIG9rMywgbm9rKShjb2RlNCk7CiAgICB9CiAgICByZXR1cm4gbm9rKGNvZGU0KTsKICB9Cn0KZnVuY3Rpb24gc3BhY2VUaGVuTm9uU3BhY2UoZWZmZWN0cywgb2szLCBub2spIHsKICByZXR1cm4gZmFjdG9yeVNwYWNlKGVmZmVjdHMsIGFmdGVyLCAid2hpdGVzcGFjZSIpOwogIGZ1bmN0aW9uIGFmdGVyKGNvZGU0KSB7CiAgICByZXR1cm4gY29kZTQgPT09IG51bGwgPyBub2soY29kZTQpIDogb2szKGNvZGU0KTsKICB9Cn0KdmFyIHRhc2tsaXN0Q2hlY2s7CnZhciBpbml0X3N5bnRheDUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWdmbS10YXNrLWxpc3QtaXRlbUAyLjEuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW0vbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgdGFza2xpc3RDaGVjayA9IHsKICAgICAgbmFtZTogInRhc2tsaXN0Q2hlY2siLAogICAgICB0b2tlbml6ZTogdG9rZW5pemVUYXNrbGlzdENoZWNrCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX3Rhc2tfbGlzdF9pdGVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm0tdGFzay1saXN0LWl0ZW1AMi4xLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtLXRhc2stbGlzdC1pdGVtL2luZGV4LmpzIigpIHsKICAgIGluaXRfaHRtbDYoKTsKICAgIGluaXRfc3ludGF4NSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm1AMy4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtL2luZGV4LmpzCmZ1bmN0aW9uIGdmbShvcHRpb25zKSB7CiAgcmV0dXJuIGNvbWJpbmVFeHRlbnNpb25zKFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbCgpLAogICAgZ2ZtRm9vdG5vdGUoKSwKICAgIGdmbVN0cmlrZXRocm91Z2gob3B0aW9ucyksCiAgICBnZm1UYWJsZSgpLAogICAgZ2ZtVGFza0xpc3RJdGVtKCkKICBdKTsKfQpmdW5jdGlvbiBnZm1IdG1sKG9wdGlvbnMpIHsKICByZXR1cm4gY29tYmluZUh0bWxFeHRlbnNpb25zKFsKICAgIGdmbUF1dG9saW5rTGl0ZXJhbEh0bWwoKSwKICAgIGdmbUZvb3Rub3RlSHRtbChvcHRpb25zKSwKICAgIGdmbVN0cmlrZXRocm91Z2hIdG1sKCksCiAgICBnZm1UYWJsZUh0bWwoKSwKICAgIGdmbVRhZ2ZpbHRlckh0bWwoKSwKICAgIGdmbVRhc2tMaXN0SXRlbUh0bWwoKQogIF0pOwp9CnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1nZm1AMy4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZ2ZtL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zKCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZ2ZtX2F1dG9saW5rX2xpdGVyYWwoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fZm9vdG5vdGUoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWJsZSgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbV90YWdmaWx0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9nZm1fdGFza19saXN0X2l0ZW0oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1nZm1ANC4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1nZm0vbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0dmbShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSAoCiAgICAvKiogQHR5cGUge1Byb2Nlc3NvcjxSb290Pn0gKi8KICAgIHRoaXMKICApOwogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCBlbXB0eU9wdGlvbnMzOwogIGNvbnN0IGRhdGEgPSBzZWxmMi5kYXRhKCk7CiAgY29uc3QgbWljcm9tYXJrRXh0ZW5zaW9ucyA9IGRhdGEubWljcm9tYXJrRXh0ZW5zaW9ucyB8fCAoZGF0YS5taWNyb21hcmtFeHRlbnNpb25zID0gW10pOwogIGNvbnN0IGZyb21NYXJrZG93bkV4dGVuc2lvbnMgPSBkYXRhLmZyb21NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBjb25zdCB0b01hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgfHwgKGRhdGEudG9NYXJrZG93bkV4dGVuc2lvbnMgPSBbXSk7CiAgbWljcm9tYXJrRXh0ZW5zaW9ucy5wdXNoKGdmbShzZXR0aW5ncykpOwogIGZyb21NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Gcm9tTWFya2Rvd24oKSk7CiAgdG9NYXJrZG93bkV4dGVuc2lvbnMucHVzaChnZm1Ub01hcmtkb3duKHNldHRpbmdzKSk7Cn0KdmFyIGVtcHR5T3B0aW9uczM7CnZhciBpbml0X2xpYjIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX2dmbSgpOwogICAgaW5pdF9taWNyb21hcmtfZXh0ZW5zaW9uX2dmbSgpOwogICAgZW1wdHlPcHRpb25zMyA9IHt9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcwp2YXIgaW5pdF9yZW1hcmtfZ2ZtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWdmbUA0LjAuMS9ub2RlX21vZHVsZXMvcmVtYXJrLWdmbS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjIwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29tcGlsZS5qcwpmdW5jdGlvbiBjb21waWxlKG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgbGV0IHRhZ3MgPSB0cnVlOwogIGNvbnN0IGRlZmluaXRpb25zID0ge307CiAgY29uc3QgYnVmZmVycyA9IFtbXV07CiAgY29uc3QgbWVkaWFTdGFjayA9IFtdOwogIGNvbnN0IHRpZ2h0U3RhY2sgPSBbXTsKICBjb25zdCBkZWZhdWx0SGFuZGxlcnMgPSB7CiAgICBlbnRlcjogewogICAgICBibG9ja1F1b3RlOiBvbmVudGVyYmxvY2txdW90ZSwKICAgICAgY29kZUZlbmNlZDogb25lbnRlcmNvZGVmZW5jZWQsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IGJ1ZmZlcjIsCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IGJ1ZmZlcjIsCiAgICAgIGNvZGVJbmRlbnRlZDogb25lbnRlcmNvZGVpbmRlbnRlZCwKICAgICAgY29kZVRleHQ6IG9uZW50ZXJjb2RldGV4dCwKICAgICAgY29udGVudDogb25lbnRlcmNvbnRlbnQsCiAgICAgIGRlZmluaXRpb246IG9uZW50ZXJkZWZpbml0aW9uLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBlbXBoYXNpczogb25lbnRlcmVtcGhhc2lzLAogICAgICBodG1sRmxvdzogb25lbnRlcmh0bWxmbG93LAogICAgICBodG1sVGV4dDogb25lbnRlcmh0bWwsCiAgICAgIGltYWdlOiBvbmVudGVyaW1hZ2UsCiAgICAgIGxhYmVsOiBidWZmZXIyLAogICAgICBsaW5rOiBvbmVudGVybGluaywKICAgICAgbGlzdEl0ZW1NYXJrZXI6IG9uZW50ZXJsaXN0aXRlbW1hcmtlciwKICAgICAgbGlzdEl0ZW1WYWx1ZTogb25lbnRlcmxpc3RpdGVtdmFsdWUsCiAgICAgIGxpc3RPcmRlcmVkOiBvbmVudGVybGlzdG9yZGVyZWQsCiAgICAgIGxpc3RVbm9yZGVyZWQ6IG9uZW50ZXJsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZW50ZXJwYXJhZ3JhcGgsCiAgICAgIHJlZmVyZW5jZTogYnVmZmVyMiwKICAgICAgcmVzb3VyY2U6IG9uZW50ZXJyZXNvdXJjZSwKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25lbnRlcnJlc291cmNlZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9uZW50ZXJzZXRleHRoZWFkaW5nLAogICAgICBzdHJvbmc6IG9uZW50ZXJzdHJvbmcKICAgIH0sCiAgICBleGl0OiB7CiAgICAgIGF0eEhlYWRpbmc6IG9uZXhpdGF0eGhlYWRpbmcsCiAgICAgIGF0eEhlYWRpbmdTZXF1ZW5jZTogb25leGl0YXR4aGVhZGluZ3NlcXVlbmNlLAogICAgICBhdXRvbGlua0VtYWlsOiBvbmV4aXRhdXRvbGlua2VtYWlsLAogICAgICBhdXRvbGlua1Byb3RvY29sOiBvbmV4aXRhdXRvbGlua3Byb3RvY29sLAogICAgICBibG9ja1F1b3RlOiBvbmV4aXRibG9ja3F1b3RlLAogICAgICBjaGFyYWN0ZXJFc2NhcGVWYWx1ZTogb25leGl0ZGF0YSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VySGV4YWRlY2ltYWw6IG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlciwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYzogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VWYWx1ZTogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNldmFsdWUsCiAgICAgIGNvZGVGZW5jZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlRmVuY2VkRmVuY2U6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZSwKICAgICAgY29kZUZlbmNlZEZlbmNlSW5mbzogb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbywKICAgICAgY29kZUZlbmNlZEZlbmNlTWV0YTogb25yZXN1bWVkcm9wLAogICAgICBjb2RlRmxvd1ZhbHVlOiBvbmV4aXRjb2RlZmxvd3ZhbHVlLAogICAgICBjb2RlSW5kZW50ZWQ6IG9uZXhpdGZsb3djb2RlLAogICAgICBjb2RlVGV4dDogb25leGl0Y29kZXRleHQsCiAgICAgIGNvZGVUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgZGF0YTogb25leGl0ZGF0YSwKICAgICAgZGVmaW5pdGlvbjogb25leGl0ZGVmaW5pdGlvbiwKICAgICAgZGVmaW5pdGlvbkRlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nLAogICAgICBkZWZpbml0aW9uVGl0bGVTdHJpbmc6IG9uZXhpdGRlZmluaXRpb250aXRsZXN0cmluZywKICAgICAgZW1waGFzaXM6IG9uZXhpdGVtcGhhc2lzLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaGFyZEJyZWFrVHJhaWxpbmc6IG9uZXhpdGhhcmRicmVhaywKICAgICAgaHRtbEZsb3c6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IG9uZXhpdGh0bWwsCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IG9uZXhpdG1lZGlhLAogICAgICBsYWJlbDogb25leGl0bGFiZWwsCiAgICAgIGxhYmVsVGV4dDogb25leGl0bGFiZWx0ZXh0LAogICAgICBsaW5lRW5kaW5nOiBvbmV4aXRsaW5lZW5kaW5nLAogICAgICBsaW5rOiBvbmV4aXRtZWRpYSwKICAgICAgbGlzdE9yZGVyZWQ6IG9uZXhpdGxpc3RvcmRlcmVkLAogICAgICBsaXN0VW5vcmRlcmVkOiBvbmV4aXRsaXN0dW5vcmRlcmVkLAogICAgICBwYXJhZ3JhcGg6IG9uZXhpdHBhcmFncmFwaCwKICAgICAgcmVmZXJlbmNlOiBvbnJlc3VtZWRyb3AsCiAgICAgIHJlZmVyZW5jZVN0cmluZzogb25leGl0cmVmZXJlbmNlc3RyaW5nLAogICAgICByZXNvdXJjZTogb25yZXN1bWVkcm9wLAogICAgICByZXNvdXJjZURlc3RpbmF0aW9uU3RyaW5nOiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nLAogICAgICByZXNvdXJjZVRpdGxlU3RyaW5nOiBvbmV4aXRyZXNvdXJjZXRpdGxlc3RyaW5nLAogICAgICBzZXRleHRIZWFkaW5nOiBvbmV4aXRzZXRleHRoZWFkaW5nLAogICAgICBzZXRleHRIZWFkaW5nTGluZVNlcXVlbmNlOiBvbmV4aXRzZXRleHRoZWFkaW5nbGluZXNlcXVlbmNlLAogICAgICBzZXRleHRIZWFkaW5nVGV4dDogb25leGl0c2V0ZXh0aGVhZGluZ3RleHQsCiAgICAgIHN0cm9uZzogb25leGl0c3Ryb25nLAogICAgICB0aGVtYXRpY0JyZWFrOiBvbmV4aXR0aGVtYXRpY2JyZWFrCiAgICB9CiAgfTsKICBjb25zdCBoYW5kbGVyczIgPSAoCiAgICAvKiogQHR5cGUge05vcm1hbGl6ZWRIdG1sRXh0ZW5zaW9ufSAqLwogICAgY29tYmluZUh0bWxFeHRlbnNpb25zKFtkZWZhdWx0SGFuZGxlcnMsIC4uLnNldHRpbmdzLmh0bWxFeHRlbnNpb25zIHx8IFtdXSkKICApOwogIGNvbnN0IGRhdGEgPSB7CiAgICBkZWZpbml0aW9ucywKICAgIHRpZ2h0U3RhY2sKICB9OwogIGNvbnN0IGNvbnRleHQyID0gewogICAgYnVmZmVyOiBidWZmZXIyLAogICAgZW5jb2RlOiBlbmNvZGUyLAogICAgZ2V0RGF0YSwKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCwKICAgIG9wdGlvbnM6IHNldHRpbmdzLAogICAgcmF3OiByYXcyLAogICAgcmVzdW1lLAogICAgc2V0RGF0YSwKICAgIHRhZwogIH07CiAgbGV0IGxpbmVFbmRpbmdTdHlsZSA9IHNldHRpbmdzLmRlZmF1bHRMaW5lRW5kaW5nOwogIHJldHVybiBjb21waWxlMjsKICBmdW5jdGlvbiBjb21waWxlMihldmVudHMpIHsKICAgIGxldCBpbmRleDIgPSAtMTsKICAgIGxldCBzdGFydCA9IDA7CiAgICBjb25zdCBsaXN0U3RhY2sgPSBbXTsKICAgIGxldCBoZWFkMiA9IFtdOwogICAgbGV0IGJvZHkzID0gW107CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmICghbGluZUVuZGluZ1N0eWxlICYmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGluZUVuZGluZyIgfHwgZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpKSB7CiAgICAgICAgbGluZUVuZGluZ1N0eWxlID0gLyoqIEB0eXBlIHtMaW5lRW5kaW5nfSAqLwogICAgICAgIGV2ZW50c1tpbmRleDJdWzJdLnNsaWNlU2VyaWFsaXplKGV2ZW50c1tpbmRleDJdWzFdKTsKICAgICAgfQogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIiB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIpIHsKICAgICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGxpc3RTdGFjay5wdXNoKGluZGV4Mik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHByZXBhcmVMaXN0KGV2ZW50cy5zbGljZShsaXN0U3RhY2sucG9wKCksIGluZGV4MikpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoZXZlbnRzW2luZGV4Ml1bMV0udHlwZSA9PT0gImRlZmluaXRpb24iKSB7CiAgICAgICAgaWYgKGV2ZW50c1tpbmRleDJdWzBdID09PSAiZW50ZXIiKSB7CiAgICAgICAgICBib2R5MyA9IHB1c2goYm9keTMsIGV2ZW50cy5zbGljZShzdGFydCwgaW5kZXgyKSk7CiAgICAgICAgICBzdGFydCA9IGluZGV4MjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaGVhZDIgPSBwdXNoKGhlYWQyLCBldmVudHMuc2xpY2Uoc3RhcnQsIGluZGV4MiArIDEpKTsKICAgICAgICAgIHN0YXJ0ID0gaW5kZXgyICsgMTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhlYWQyID0gcHVzaChoZWFkMiwgYm9keTMpOwogICAgaGVhZDIgPSBwdXNoKGhlYWQyLCBldmVudHMuc2xpY2Uoc3RhcnQpKTsKICAgIGluZGV4MiA9IC0xOwogICAgY29uc3QgcmVzdWx0ID0gaGVhZDI7CiAgICBpZiAoaGFuZGxlcnMyLmVudGVyLm51bGwpIHsKICAgICAgaGFuZGxlcnMyLmVudGVyLm51bGwuY2FsbChjb250ZXh0Mik7CiAgICB9CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXMgPSBoYW5kbGVyczJbcmVzdWx0W2luZGV4Ml1bMF1dOwogICAgICBjb25zdCBraW5kID0gcmVzdWx0W2luZGV4Ml1bMV0udHlwZTsKICAgICAgY29uc3QgaGFuZGxlMyA9IGhhbmRsZXNba2luZF07CiAgICAgIGlmIChoYXNPd25Qcm9wZXJ0eTIuY2FsbChoYW5kbGVzLCBraW5kKSAmJiBoYW5kbGUzKSB7CiAgICAgICAgaGFuZGxlMy5jYWxsKHsKICAgICAgICAgIHNsaWNlU2VyaWFsaXplOiByZXN1bHRbaW5kZXgyXVsyXS5zbGljZVNlcmlhbGl6ZSwKICAgICAgICAgIC4uLmNvbnRleHQyCiAgICAgICAgfSwgcmVzdWx0W2luZGV4Ml1bMV0pOwogICAgICB9CiAgICB9CiAgICBpZiAoaGFuZGxlcnMyLmV4aXQubnVsbCkgewogICAgICBoYW5kbGVyczIuZXhpdC5udWxsLmNhbGwoY29udGV4dDIpOwogICAgfQogICAgcmV0dXJuIGJ1ZmZlcnNbMF0uam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHByZXBhcmVMaXN0KHNsaWNlKSB7CiAgICBjb25zdCBsZW5ndGggPSBzbGljZS5sZW5ndGg7CiAgICBsZXQgaW5kZXgyID0gMDsKICAgIGxldCBjb250YWluZXJCYWxhbmNlID0gMDsKICAgIGxldCBsb29zZSA9IGZhbHNlOwogICAgbGV0IGF0TWFya2VyOwogICAgd2hpbGUgKCsraW5kZXgyIDwgbGVuZ3RoKSB7CiAgICAgIGNvbnN0IGV2ZW50ID0gc2xpY2VbaW5kZXgyXTsKICAgICAgaWYgKGV2ZW50WzFdLl9jb250YWluZXIpIHsKICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgIGNvbnRhaW5lckJhbGFuY2UrKzsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29udGFpbmVyQmFsYW5jZS0tOwogICAgICAgIH0KICAgICAgfSBlbHNlIHN3aXRjaCAoZXZlbnRbMV0udHlwZSkgewogICAgICAgIGNhc2UgImxpc3RJdGVtUHJlZml4IjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZXhpdCIpIHsKICAgICAgICAgICAgYXRNYXJrZXIgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVQcmVmaXgiOiB7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAibGluZUVuZGluZ0JsYW5rIjogewogICAgICAgICAgaWYgKGV2ZW50WzBdID09PSAiZW50ZXIiICYmICFjb250YWluZXJCYWxhbmNlKSB7CiAgICAgICAgICAgIGlmIChhdE1hcmtlcikgewogICAgICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGxvb3NlID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgc2xpY2VbMF1bMV0uX2xvb3NlID0gbG9vc2U7CiAgfQogIGZ1bmN0aW9uIHNldERhdGEoa2V5MiwgdmFsdWUyKSB7CiAgICBkYXRhW2tleTJdID0gdmFsdWUyOwogIH0KICBmdW5jdGlvbiBnZXREYXRhKGtleTIpIHsKICAgIHJldHVybiBkYXRhW2tleTJdOwogIH0KICBmdW5jdGlvbiBidWZmZXIyKCkgewogICAgYnVmZmVycy5wdXNoKFtdKTsKICB9CiAgZnVuY3Rpb24gcmVzdW1lKCkgewogICAgY29uc3QgYnVmID0gYnVmZmVycy5wb3AoKTsKICAgIHJldHVybiBidWYuam9pbigiIik7CiAgfQogIGZ1bmN0aW9uIHRhZyh2YWx1ZTIpIHsKICAgIGlmICghdGFncykgcmV0dXJuOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIsIHRydWUpOwogICAgYnVmZmVyc1tidWZmZXJzLmxlbmd0aCAtIDFdLnB1c2godmFsdWUyKTsKICB9CiAgZnVuY3Rpb24gcmF3Mih2YWx1ZTIpIHsKICAgIHNldERhdGEoImxhc3RXYXNUYWciKTsKICAgIGJ1ZmZlcnNbYnVmZmVycy5sZW5ndGggLSAxXS5wdXNoKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmcyKCkgewogICAgcmF3MihsaW5lRW5kaW5nU3R5bGUgfHwgIlxuIik7CiAgfQogIGZ1bmN0aW9uIGxpbmVFbmRpbmdJZk5lZWRlZCgpIHsKICAgIGNvbnN0IGJ1ZmZlcjMgPSBidWZmZXJzW2J1ZmZlcnMubGVuZ3RoIC0gMV07CiAgICBjb25zdCBzbGljZSA9IGJ1ZmZlcjNbYnVmZmVyMy5sZW5ndGggLSAxXTsKICAgIGNvbnN0IHByZXZpb3VzMyA9IHNsaWNlID8gc2xpY2UuY2hhckNvZGVBdChzbGljZS5sZW5ndGggLSAxKSA6IG51bGw7CiAgICBpZiAocHJldmlvdXMzID09PSAxMCB8fCBwcmV2aW91czMgPT09IDEzIHx8IHByZXZpb3VzMyA9PT0gbnVsbCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBsaW5lRW5kaW5nMigpOwogIH0KICBmdW5jdGlvbiBlbmNvZGUyKHZhbHVlMikgewogICAgcmV0dXJuIGdldERhdGEoImlnbm9yZUVuY29kZSIpID8gdmFsdWUyIDogZW5jb2RlKHZhbHVlMik7CiAgfQogIGZ1bmN0aW9uIG9ucmVzdW1lZHJvcCgpIHsKICAgIHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdG9yZGVyZWQodG9rZW4pIHsKICAgIHRpZ2h0U3RhY2sucHVzaCghdG9rZW4uX2xvb3NlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8b2wiKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdHVub3JkZXJlZCh0b2tlbikgewogICAgdGlnaHRTdGFjay5wdXNoKCF0b2tlbi5fbG9vc2UpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjx1bCIpOwogICAgc2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbXZhbHVlKHRva2VuKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgY29uc3QgdmFsdWUyID0gTnVtYmVyLnBhcnNlSW50KHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLCAxMCk7CiAgICAgIGlmICh2YWx1ZTIgIT09IDEpIHsKICAgICAgICB0YWcoJyBzdGFydD0iJyArIGVuY29kZTIoU3RyaW5nKHZhbHVlMikpICsgJyInKTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBvbmVudGVybGlzdGl0ZW1tYXJrZXIoKSB7CiAgICBpZiAoZ2V0RGF0YSgiZXhwZWN0Rmlyc3RJdGVtIikpIHsKICAgICAgdGFnKCI+Iik7CiAgICB9IGVsc2UgewogICAgICBvbmV4aXRsaXN0aXRlbSgpOwogICAgfQogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxsaT4iKTsKICAgIHNldERhdGEoImV4cGVjdEZpcnN0SXRlbSIpOwogICAgc2V0RGF0YSgibGFzdFdhc1RhZyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsaXN0b3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC9vbD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdHVub3JkZXJlZCgpIHsKICAgIG9uZXhpdGxpc3RpdGVtKCk7CiAgICB0aWdodFN0YWNrLnBvcCgpOwogICAgbGluZUVuZGluZzIoKTsKICAgIHRhZygiPC91bD4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGlzdGl0ZW0oKSB7CiAgICBpZiAoZ2V0RGF0YSgibGFzdFdhc1RhZyIpICYmICFnZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIikpIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB9CiAgICB0YWcoIjwvbGk+Iik7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJibG9ja3F1b3RlKCkgewogICAgdGlnaHRTdGFjay5wdXNoKGZhbHNlKTsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8YmxvY2txdW90ZT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YmxvY2txdW90ZSgpIHsKICAgIHRpZ2h0U3RhY2sucG9wKCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPC9ibG9ja3F1b3RlPiIpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVycGFyYWdyYXBoKCkgewogICAgaWYgKCF0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICAgIHRhZygiPHA+Iik7CiAgICB9CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHBhcmFncmFwaCgpIHsKICAgIGlmICh0aWdodFN0YWNrW3RpZ2h0U3RhY2subGVuZ3RoIC0gMV0pIHsKICAgICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCI8L3A+Iik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb2RlZmVuY2VkKCkgewogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxwcmU+PGNvZGUiKTsKICAgIHNldERhdGEoImZlbmNlc0NvdW50IiwgMCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8oKSB7CiAgICBjb25zdCB2YWx1ZTIgPSByZXN1bWUoKTsKICAgIHRhZygnIGNsYXNzPSJsYW5ndWFnZS0nICsgdmFsdWUyICsgJyInKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlKCkgewogICAgY29uc3QgY291bnQyID0gZ2V0RGF0YSgiZmVuY2VzQ291bnQiKSB8fCAwOwogICAgaWYgKCFjb3VudDIpIHsKICAgICAgdGFnKCI+Iik7CiAgICAgIHNldERhdGEoInNsdXJwT25lTGluZUVuZGluZyIsIHRydWUpOwogICAgfQogICAgc2V0RGF0YSgiZmVuY2VzQ291bnQiLCBjb3VudDIgKyAxKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmNvZGVpbmRlbnRlZCgpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8cHJlPjxjb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRmbG93Y29kZSgpIHsKICAgIGNvbnN0IGNvdW50MiA9IGdldERhdGEoImZlbmNlc0NvdW50Iik7CiAgICBpZiAoY291bnQyICE9PSB2b2lkIDAgJiYgY291bnQyIDwgMiAmJiBkYXRhLnRpZ2h0U3RhY2subGVuZ3RoID4gMCAmJiAhZ2V0RGF0YSgibGFzdFdhc1RhZyIpKSB7CiAgICAgIGxpbmVFbmRpbmcyKCk7CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgiZmxvd0NvZGVTZWVuRGF0YSIpKSB7CiAgICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgfQogICAgdGFnKCI8L2NvZGU+PC9wcmU+Iik7CiAgICBpZiAoY291bnQyICE9PSB2b2lkIDAgJiYgY291bnQyIDwgMikgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICBzZXREYXRhKCJmbG93Q29kZVNlZW5EYXRhIik7CiAgICBzZXREYXRhKCJmZW5jZXNDb3VudCIpOwogICAgc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJpbWFnZSgpIHsKICAgIG1lZGlhU3RhY2sucHVzaCh7CiAgICAgIGltYWdlOiB0cnVlCiAgICB9KTsKICAgIHRhZ3MgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaW5rKCkgewogICAgbWVkaWFTdGFjay5wdXNoKHt9KTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGFiZWx0ZXh0KHRva2VuKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0ubGFiZWxJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbCgpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbCA9IHJlc3VtZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcodG9rZW4pIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5yZWZlcmVuY2VJZCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmVudGVycmVzb3VyY2UoKSB7CiAgICBidWZmZXIyKCk7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0uZGVzdGluYXRpb24gPSAiIjsKICB9CiAgZnVuY3Rpb24gb25lbnRlcnJlc291cmNlZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBidWZmZXIyKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZygpIHsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5kZXN0aW5hdGlvbiA9IHJlc3VtZSgpOwogICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIik7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHJlc291cmNldGl0bGVzdHJpbmcoKSB7CiAgICBtZWRpYVN0YWNrW21lZGlhU3RhY2subGVuZ3RoIC0gMV0udGl0bGUgPSByZXN1bWUoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bWVkaWEoKSB7CiAgICBsZXQgaW5kZXgyID0gbWVkaWFTdGFjay5sZW5ndGggLSAxOwogICAgY29uc3QgbWVkaWEgPSBtZWRpYVN0YWNrW2luZGV4Ml07CiAgICBjb25zdCBpZCA9IG1lZGlhLnJlZmVyZW5jZUlkIHx8IG1lZGlhLmxhYmVsSWQ7CiAgICBjb25zdCBjb250ZXh0MyA9IG1lZGlhLmRlc3RpbmF0aW9uID09PSB2b2lkIDAgPyBkZWZpbml0aW9uc1tub3JtYWxpemVJZGVudGlmaWVyKGlkKV0gOiBtZWRpYTsKICAgIHRhZ3MgPSB0cnVlOwogICAgd2hpbGUgKGluZGV4Mi0tKSB7CiAgICAgIGlmIChtZWRpYVN0YWNrW2luZGV4Ml0uaW1hZ2UpIHsKICAgICAgICB0YWdzID0gdm9pZCAwOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAobWVkaWEuaW1hZ2UpIHsKICAgICAgdGFnKCc8aW1nIHNyYz0iJyArIHNhbml0aXplVXJpKGNvbnRleHQzLmRlc3RpbmF0aW9uLCBzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c1Byb3RvY29sID8gdm9pZCAwIDogcHJvdG9jb2xTb3VyY2UpICsgJyIgYWx0PSInKTsKICAgICAgcmF3MihtZWRpYS5sYWJlbCk7CiAgICAgIHRhZygnIicpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCc8YSBocmVmPSInICsgc2FuaXRpemVVcmkoY29udGV4dDMuZGVzdGluYXRpb24sIHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2wgPyB2b2lkIDAgOiBwcm90b2NvbEhyZWYpICsgJyInKTsKICAgIH0KICAgIHRhZyhjb250ZXh0My50aXRsZSA/ICcgdGl0bGU9IicgKyBjb250ZXh0My50aXRsZSArICciJyA6ICIiKTsKICAgIGlmIChtZWRpYS5pbWFnZSkgewogICAgICB0YWcoIiAvPiIpOwogICAgfSBlbHNlIHsKICAgICAgdGFnKCI+Iik7CiAgICAgIHJhdzIobWVkaWEubGFiZWwpOwogICAgICB0YWcoIjwvYT4iKTsKICAgIH0KICAgIG1lZGlhU3RhY2sucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJkZWZpbml0aW9uKCkgewogICAgYnVmZmVyMigpOwogICAgbWVkaWFTdGFjay5wdXNoKHt9KTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7CiAgICByZXN1bWUoKTsKICAgIG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXS5sYWJlbElkID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBidWZmZXIyKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLmRlc3RpbmF0aW9uID0gcmVzdW1lKCk7CiAgICBzZXREYXRhKCJpZ25vcmVFbmNvZGUiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nKCkgewogICAgbWVkaWFTdGFja1ttZWRpYVN0YWNrLmxlbmd0aCAtIDFdLnRpdGxlID0gcmVzdW1lKCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGRlZmluaXRpb24oKSB7CiAgICBjb25zdCBtZWRpYSA9IG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXTsKICAgIGNvbnN0IGlkID0gbm9ybWFsaXplSWRlbnRpZmllcihtZWRpYS5sYWJlbElkKTsKICAgIHJlc3VtZSgpOwogICAgaWYgKCFoYXNPd25Qcm9wZXJ0eTIuY2FsbChkZWZpbml0aW9ucywgaWQpKSB7CiAgICAgIGRlZmluaXRpb25zW2lkXSA9IG1lZGlhU3RhY2tbbWVkaWFTdGFjay5sZW5ndGggLSAxXTsKICAgIH0KICAgIG1lZGlhU3RhY2sucG9wKCk7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJjb250ZW50KCkgewogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIsIHRydWUpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHsKICAgIGlmIChnZXREYXRhKCJoZWFkaW5nUmFuayIpKSByZXR1cm47CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIsIHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmxlbmd0aCk7CiAgICBsaW5lRW5kaW5nSWZOZWVkZWQoKTsKICAgIHRhZygiPGgiICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJzZXRleHRoZWFkaW5nKCkgewogICAgYnVmZmVyMigpOwogICAgc2V0RGF0YSgic2x1cnBBbGxMaW5lRW5kaW5ncyIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCgpIHsKICAgIHNldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiLCB0cnVlKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXR4aGVhZGluZygpIHsKICAgIHRhZygiPC9oIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ2xpbmVzZXF1ZW5jZSh0b2tlbikgewogICAgc2V0RGF0YSgiaGVhZGluZ1JhbmsiLCB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5jaGFyQ29kZUF0KDApID09PSA2MSA/IDEgOiAyKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHsKICAgIGNvbnN0IHZhbHVlMiA9IHJlc3VtZSgpOwogICAgbGluZUVuZGluZ0lmTmVlZGVkKCk7CiAgICB0YWcoIjxoIiArIGdldERhdGEoImhlYWRpbmdSYW5rIikgKyAiPiIpOwogICAgcmF3Mih2YWx1ZTIpOwogICAgdGFnKCI8L2giICsgZ2V0RGF0YSgiaGVhZGluZ1JhbmsiKSArICI+Iik7CiAgICBzZXREYXRhKCJzbHVycEFsbExpbmVFbmRpbmdzIik7CiAgICBzZXREYXRhKCJoZWFkaW5nUmFuayIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkYXRhKHRva2VuKSB7CiAgICByYXcyKGVuY29kZTIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikgewogICAgaWYgKGdldERhdGEoInNsdXJwQWxsTGluZUVuZGluZ3MiKSkgewogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoZ2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIikpIHsKICAgICAgc2V0RGF0YSgic2x1cnBPbmVMaW5lRW5kaW5nIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChnZXREYXRhKCJpbkNvZGVUZXh0IikpIHsKICAgICAgcmF3MigiICIpOwogICAgICByZXR1cm47CiAgICB9CiAgICByYXcyKGVuY29kZTIodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbikpKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZsb3d2YWx1ZSh0b2tlbikgewogICAgcmF3MihlbmNvZGUyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKSk7CiAgICBzZXREYXRhKCJmbG93Q29kZVNlZW5EYXRhIiwgdHJ1ZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGhhcmRicmVhaygpIHsKICAgIHRhZygiPGJyIC8+Iik7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJodG1sZmxvdygpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgb25lbnRlcmh0bWwoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0aHRtbCgpIHsKICAgIHNldERhdGEoImlnbm9yZUVuY29kZSIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyaHRtbCgpIHsKICAgIGlmIChzZXR0aW5ncy5hbGxvd0Rhbmdlcm91c0h0bWwpIHsKICAgICAgc2V0RGF0YSgiaWdub3JlRW5jb2RlIiwgdHJ1ZSk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJlbXBoYXNpcygpIHsKICAgIHRhZygiPGVtPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyc3Ryb25nKCkgewogICAgdGFnKCI8c3Ryb25nPiIpOwogIH0KICBmdW5jdGlvbiBvbmVudGVyY29kZXRleHQoKSB7CiAgICBzZXREYXRhKCJpbkNvZGVUZXh0IiwgdHJ1ZSk7CiAgICB0YWcoIjxjb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RldGV4dCgpIHsKICAgIHNldERhdGEoImluQ29kZVRleHQiKTsKICAgIHRhZygiPC9jb2RlPiIpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRlbXBoYXNpcygpIHsKICAgIHRhZygiPC9lbT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0c3Ryb25nKCkgewogICAgdGFnKCI8L3N0cm9uZz4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0dGhlbWF0aWNicmVhaygpIHsKICAgIGxpbmVFbmRpbmdJZk5lZWRlZCgpOwogICAgdGFnKCI8aHIgLz4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyKHRva2VuKSB7CiAgICBzZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIiwgdG9rZW4udHlwZSk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZXZhbHVlKHRva2VuKSB7CiAgICBjb25zdCB2YWx1ZTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IGRlY29kZWQgPSBnZXREYXRhKCJjaGFyYWN0ZXJSZWZlcmVuY2VUeXBlIikgPyBkZWNvZGVOdW1lcmljQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMiwgZ2V0RGF0YSgiY2hhcmFjdGVyUmVmZXJlbmNlVHlwZSIpID09PSAiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIgPyAxMCA6IDE2KSA6IGRlY29kZU5hbWVkQ2hhcmFjdGVyUmVmZXJlbmNlKHZhbHVlMik7CiAgICByYXcyKGVuY29kZTIoCiAgICAgIC8qKiBAdHlwZSB7c3RyaW5nfSAqLwogICAgICBkZWNvZGVkCiAgICApKTsKICAgIHNldERhdGEoImNoYXJhY3RlclJlZmVyZW5jZVR5cGUiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtwcm90b2NvbCh0b2tlbikgewogICAgY29uc3QgdXJpID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICB0YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSh1cmksIHNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzUHJvdG9jb2wgPyB2b2lkIDAgOiBwcm90b2NvbEhyZWYpICsgJyI+Jyk7CiAgICByYXcyKGVuY29kZTIodXJpKSk7CiAgICB0YWcoIjwvYT4iKTsKICB9CiAgZnVuY3Rpb24gb25leGl0YXV0b2xpbmtlbWFpbCh0b2tlbikgewogICAgY29uc3QgdXJpID0gdGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbik7CiAgICB0YWcoJzxhIGhyZWY9IicgKyBzYW5pdGl6ZVVyaSgibWFpbHRvOiIgKyB1cmkpICsgJyI+Jyk7CiAgICByYXcyKGVuY29kZTIodXJpKSk7CiAgICB0YWcoIjwvYT4iKTsKICB9Cn0KdmFyIGhhc093blByb3BlcnR5MiwgcHJvdG9jb2xIcmVmLCBwcm90b2NvbFNvdXJjZTsKdmFyIGluaXRfY29tcGlsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9jb21waWxlLmpzIigpIHsKICAgIGluaXRfaW5kZXhfZG9tKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NodW5rZWQoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY29tYmluZV9leHRlbnNpb25zKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2RlY29kZV9udW1lcmljX2NoYXJhY3Rlcl9yZWZlcmVuY2UoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZW5jb2RlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogICAgaGFzT3duUHJvcGVydHkyID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBwcm90b2NvbEhyZWYgPSAvXihodHRwcz98aXJjcz98bWFpbHRvfHhtcHApJC9pOwogICAgcHJvdG9jb2xTb3VyY2UgPSAvXmh0dHBzPyQvaTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2NvbnRlbnQuanMKZnVuY3Rpb24gaW5pdGlhbGl6ZUNvbnRlbnQoZWZmZWN0cykgewogIGNvbnN0IGNvbnRlbnRTdGFydCA9IGVmZmVjdHMuYXR0ZW1wdCh0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmNvbnRlbnRJbml0aWFsLCBhZnRlckNvbnRlbnRTdGFydENvbnN0cnVjdCwgcGFyYWdyYXBoSW5pdGlhbCk7CiAgbGV0IHByZXZpb3VzMzsKICByZXR1cm4gY29udGVudFN0YXJ0OwogIGZ1bmN0aW9uIGFmdGVyQ29udGVudFN0YXJ0Q29uc3RydWN0KGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgcmV0dXJuIGZhY3RvcnlTcGFjZShlZmZlY3RzLCBjb250ZW50U3RhcnQsICJsaW5lUHJlZml4Iik7CiAgfQogIGZ1bmN0aW9uIHBhcmFncmFwaEluaXRpYWwoY29kZTQpIHsKICAgIGVmZmVjdHMuZW50ZXIoInBhcmFncmFwaCIpOwogICAgcmV0dXJuIGxpbmVTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGxpbmVTdGFydChjb2RlNCkgewogICAgY29uc3QgdG9rZW4gPSBlZmZlY3RzLmVudGVyKCJjaHVua1RleHQiLCB7CiAgICAgIGNvbnRlbnRUeXBlOiAidGV4dCIsCiAgICAgIHByZXZpb3VzOiBwcmV2aW91czMKICAgIH0pOwogICAgaWYgKHByZXZpb3VzMykgewogICAgICBwcmV2aW91czMubmV4dCA9IHRva2VuOwogICAgfQogICAgcHJldmlvdXMzID0gdG9rZW47CiAgICByZXR1cm4gZGF0YShjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRhdGEoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICBlZmZlY3RzLmV4aXQoInBhcmFncmFwaCIpOwogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAobWFya2Rvd25MaW5lRW5kaW5nKGNvZGU0KSkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICBlZmZlY3RzLmV4aXQoImNodW5rVGV4dCIpOwogICAgICByZXR1cm4gbGluZVN0YXJ0OwogICAgfQogICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgIHJldHVybiBkYXRhOwogIH0KfQp2YXIgY29udGVudDI7CnZhciBpbml0X2NvbnRlbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvY29udGVudC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgY29udGVudDIgPSB7CiAgICAgIHRva2VuaXplOiBpbml0aWFsaXplQ29udGVudAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2RvY3VtZW50LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVEb2N1bWVudChlZmZlY3RzKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHN0YWNrID0gW107CiAgbGV0IGNvbnRpbnVlZCA9IDA7CiAgbGV0IGNoaWxkRmxvdzsKICBsZXQgY2hpbGRUb2tlbjsKICBsZXQgbGluZVN0YXJ0T2Zmc2V0OwogIHJldHVybiBzdGFydDsKICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgaWYgKGNvbnRpbnVlZCA8IHN0YWNrLmxlbmd0aCkgewogICAgICBjb25zdCBpdGVtID0gc3RhY2tbY29udGludWVkXTsKICAgICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSBpdGVtWzFdOwogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGl0ZW1bMF0uY29udGludWF0aW9uLCBkb2N1bWVudENvbnRpbnVlLCBjaGVja05ld0NvbnRhaW5lcnMpKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBjaGVja05ld0NvbnRhaW5lcnMoY29kZTQpOwogIH0KICBmdW5jdGlvbiBkb2N1bWVudENvbnRpbnVlKGNvZGU0KSB7CiAgICBjb250aW51ZWQrKzsKICAgIGlmIChzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93KSB7CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlLl9jbG9zZUZsb3cgPSB2b2lkIDA7CiAgICAgIGlmIChjaGlsZEZsb3cpIHsKICAgICAgICBjbG9zZUZsb3coKTsKICAgICAgfQogICAgICBjb25zdCBpbmRleEJlZm9yZUV4aXRzID0gc2VsZjIuZXZlbnRzLmxlbmd0aDsKICAgICAgbGV0IGluZGV4QmVmb3JlRmxvdyA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIGxldCBwb2ludDQ7CiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkgewogICAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gImV4aXQiICYmIHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLnR5cGUgPT09ICJjaHVua0Zsb3ciKSB7CiAgICAgICAgICBwb2ludDQgPSBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmQ7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgICAgZXhpdENvbnRhaW5lcnMoY29udGludWVkKTsKICAgICAgbGV0IGluZGV4MiA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIHdoaWxlIChpbmRleDIgPCBzZWxmMi5ldmVudHMubGVuZ3RoKSB7CiAgICAgICAgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uZW5kID0gewogICAgICAgICAgLi4ucG9pbnQ0CiAgICAgICAgfTsKICAgICAgICBpbmRleDIrKzsKICAgICAgfQogICAgICBzcGxpY2Uoc2VsZjIuZXZlbnRzLCBpbmRleEJlZm9yZUZsb3cgKyAxLCAwLCBzZWxmMi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cykpOwogICAgICBzZWxmMi5ldmVudHMubGVuZ3RoID0gaW5kZXgyOwogICAgICByZXR1cm4gY2hlY2tOZXdDb250YWluZXJzKGNvZGU0KTsKICAgIH0KICAgIHJldHVybiBzdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNoZWNrTmV3Q29udGFpbmVycyhjb2RlNCkgewogICAgaWYgKGNvbnRpbnVlZCA9PT0gc3RhY2subGVuZ3RoKSB7CiAgICAgIGlmICghY2hpbGRGbG93KSB7CiAgICAgICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGU0KTsKICAgICAgfQogICAgICBpZiAoY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QgJiYgY2hpbGRGbG93LmN1cnJlbnRDb25zdHJ1Y3QuY29uY3JldGUpIHsKICAgICAgICByZXR1cm4gZmxvd1N0YXJ0KGNvZGU0KTsKICAgICAgfQogICAgICBzZWxmMi5pbnRlcnJ1cHQgPSBCb29sZWFuKGNoaWxkRmxvdy5jdXJyZW50Q29uc3RydWN0ICYmICFjaGlsZEZsb3cuX2dmbVRhYmxlRHluYW1pY0ludGVycnVwdEhhY2spOwogICAgfQogICAgc2VsZjIuY29udGFpbmVyU3RhdGUgPSB7fTsKICAgIHJldHVybiBlZmZlY3RzLmNoZWNrKGNvbnRhaW5lckNvbnN0cnVjdCwgdGhlcmVJc0FOZXdDb250YWluZXIsIHRoZXJlSXNOb05ld0NvbnRhaW5lcikoY29kZTQpOwogIH0KICBmdW5jdGlvbiB0aGVyZUlzQU5ld0NvbnRhaW5lcihjb2RlNCkgewogICAgaWYgKGNoaWxkRmxvdykgY2xvc2VGbG93KCk7CiAgICBleGl0Q29udGFpbmVycyhjb250aW51ZWQpOwogICAgcmV0dXJuIGRvY3VtZW50Q29udGludWVkKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gdGhlcmVJc05vTmV3Q29udGFpbmVyKGNvZGU0KSB7CiAgICBzZWxmMi5wYXJzZXIubGF6eVtzZWxmMi5ub3coKS5saW5lXSA9IGNvbnRpbnVlZCAhPT0gc3RhY2subGVuZ3RoOwogICAgbGluZVN0YXJ0T2Zmc2V0ID0gc2VsZjIubm93KCkub2Zmc2V0OwogICAgcmV0dXJuIGZsb3dTdGFydChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGRvY3VtZW50Q29udGludWVkKGNvZGU0KSB7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZSA9IHt9OwogICAgcmV0dXJuIGVmZmVjdHMuYXR0ZW1wdChjb250YWluZXJDb25zdHJ1Y3QsIGNvbnRhaW5lckNvbnRpbnVlLCBmbG93U3RhcnQpKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gY29udGFpbmVyQ29udGludWUoY29kZTQpIHsKICAgIGNvbnRpbnVlZCsrOwogICAgc3RhY2sucHVzaChbc2VsZjIuY3VycmVudENvbnN0cnVjdCwgc2VsZjIuY29udGFpbmVyU3RhdGVdKTsKICAgIHJldHVybiBkb2N1bWVudENvbnRpbnVlZChjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGZsb3dTdGFydChjb2RlNCkgewogICAgaWYgKGNvZGU0ID09PSBudWxsKSB7CiAgICAgIGlmIChjaGlsZEZsb3cpIGNsb3NlRmxvdygpOwogICAgICBleGl0Q29udGFpbmVycygwKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY2hpbGRGbG93ID0gY2hpbGRGbG93IHx8IHNlbGYyLnBhcnNlci5mbG93KHNlbGYyLm5vdygpKTsKICAgIGVmZmVjdHMuZW50ZXIoImNodW5rRmxvdyIsIHsKICAgICAgX3Rva2VuaXplcjogY2hpbGRGbG93LAogICAgICBjb250ZW50VHlwZTogImZsb3ciLAogICAgICBwcmV2aW91czogY2hpbGRUb2tlbgogICAgfSk7CiAgICByZXR1cm4gZmxvd0NvbnRpbnVlKGNvZGU0KTsKICB9CiAgZnVuY3Rpb24gZmxvd0NvbnRpbnVlKGNvZGU0KSB7CiAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCgiY2h1bmtGbG93IiksIHRydWUpOwogICAgICBleGl0Q29udGFpbmVycygwKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgd3JpdGVUb0NoaWxkKGVmZmVjdHMuZXhpdCgiY2h1bmtGbG93IikpOwogICAgICBjb250aW51ZWQgPSAwOwogICAgICBzZWxmMi5pbnRlcnJ1cHQgPSB2b2lkIDA7CiAgICAgIHJldHVybiBzdGFydDsKICAgIH0KICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICByZXR1cm4gZmxvd0NvbnRpbnVlOwogIH0KICBmdW5jdGlvbiB3cml0ZVRvQ2hpbGQodG9rZW4sIGVuZE9mRmlsZSkgewogICAgY29uc3Qgc3RyZWFtID0gc2VsZjIuc2xpY2VTdHJlYW0odG9rZW4pOwogICAgaWYgKGVuZE9mRmlsZSkgc3RyZWFtLnB1c2gobnVsbCk7CiAgICB0b2tlbi5wcmV2aW91cyA9IGNoaWxkVG9rZW47CiAgICBpZiAoY2hpbGRUb2tlbikgY2hpbGRUb2tlbi5uZXh0ID0gdG9rZW47CiAgICBjaGlsZFRva2VuID0gdG9rZW47CiAgICBjaGlsZEZsb3cuZGVmaW5lU2tpcCh0b2tlbi5zdGFydCk7CiAgICBjaGlsZEZsb3cud3JpdGUoc3RyZWFtKTsKICAgIGlmIChzZWxmMi5wYXJzZXIubGF6eVt0b2tlbi5zdGFydC5saW5lXSkgewogICAgICBsZXQgaW5kZXgyID0gY2hpbGRGbG93LmV2ZW50cy5sZW5ndGg7CiAgICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICAgIGlmICgKICAgICAgICAgIC8vIFRoZSB0b2tlbiBzdGFydHMgYmVmb3JlIHRoZSBsaW5lIGVuZGluZ+KApgogICAgICAgICAgY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLnN0YXJ0Lm9mZnNldCA8IGxpbmVTdGFydE9mZnNldCAmJiAvLyDigKZhbmQgZWl0aGVyIGlzIG5vdCBlbmRlZCB5ZXTigKYKICAgICAgICAgICghY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLmVuZCB8fCAvLyDigKZvciBlbmRzIGFmdGVyIGl0LgogICAgICAgICAgY2hpbGRGbG93LmV2ZW50c1tpbmRleDJdWzFdLmVuZC5vZmZzZXQgPiBsaW5lU3RhcnRPZmZzZXQpCiAgICAgICAgKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IGluZGV4QmVmb3JlRXhpdHMgPSBzZWxmMi5ldmVudHMubGVuZ3RoOwogICAgICBsZXQgaW5kZXhCZWZvcmVGbG93ID0gaW5kZXhCZWZvcmVFeGl0czsKICAgICAgbGV0IHNlZW47CiAgICAgIGxldCBwb2ludDQ7CiAgICAgIHdoaWxlIChpbmRleEJlZm9yZUZsb3ctLSkgewogICAgICAgIGlmIChzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVswXSA9PT0gImV4aXQiICYmIHNlbGYyLmV2ZW50c1tpbmRleEJlZm9yZUZsb3ddWzFdLnR5cGUgPT09ICJjaHVua0Zsb3ciKSB7CiAgICAgICAgICBpZiAoc2VlbikgewogICAgICAgICAgICBwb2ludDQgPSBzZWxmMi5ldmVudHNbaW5kZXhCZWZvcmVGbG93XVsxXS5lbmQ7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgICAgc2VlbiA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIGV4aXRDb250YWluZXJzKGNvbnRpbnVlZCk7CiAgICAgIGluZGV4MiA9IGluZGV4QmVmb3JlRXhpdHM7CiAgICAgIHdoaWxlIChpbmRleDIgPCBzZWxmMi5ldmVudHMubGVuZ3RoKSB7CiAgICAgICAgc2VsZjIuZXZlbnRzW2luZGV4Ml1bMV0uZW5kID0gewogICAgICAgICAgLi4ucG9pbnQ0CiAgICAgICAgfTsKICAgICAgICBpbmRleDIrKzsKICAgICAgfQogICAgICBzcGxpY2Uoc2VsZjIuZXZlbnRzLCBpbmRleEJlZm9yZUZsb3cgKyAxLCAwLCBzZWxmMi5ldmVudHMuc2xpY2UoaW5kZXhCZWZvcmVFeGl0cykpOwogICAgICBzZWxmMi5ldmVudHMubGVuZ3RoID0gaW5kZXgyOwogICAgfQogIH0KICBmdW5jdGlvbiBleGl0Q29udGFpbmVycyhzaXplKSB7CiAgICBsZXQgaW5kZXgyID0gc3RhY2subGVuZ3RoOwogICAgd2hpbGUgKGluZGV4Mi0tID4gc2l6ZSkgewogICAgICBjb25zdCBlbnRyeSA9IHN0YWNrW2luZGV4Ml07CiAgICAgIHNlbGYyLmNvbnRhaW5lclN0YXRlID0gZW50cnlbMV07CiAgICAgIGVudHJ5WzBdLmV4aXQuY2FsbChzZWxmMiwgZWZmZWN0cyk7CiAgICB9CiAgICBzdGFjay5sZW5ndGggPSBzaXplOwogIH0KICBmdW5jdGlvbiBjbG9zZUZsb3coKSB7CiAgICBjaGlsZEZsb3cud3JpdGUoW251bGxdKTsKICAgIGNoaWxkVG9rZW4gPSB2b2lkIDA7CiAgICBjaGlsZEZsb3cgPSB2b2lkIDA7CiAgICBzZWxmMi5jb250YWluZXJTdGF0ZS5fY2xvc2VGbG93ID0gdm9pZCAwOwogIH0KfQpmdW5jdGlvbiB0b2tlbml6ZUNvbnRhaW5lcihlZmZlY3RzLCBvazMsIG5vaykgewogIHJldHVybiBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZG9jdW1lbnQsIG9rMywgbm9rKSwgImxpbmVQcmVmaXgiLCB0aGlzLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcygiY29kZUluZGVudGVkIikgPyB2b2lkIDAgOiA0KTsKfQp2YXIgZG9jdW1lbnQyLCBjb250YWluZXJDb25zdHJ1Y3Q7CnZhciBpbml0X2RvY3VtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvZG9jdW1lbnQuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfZmFjdG9yeV9zcGFjZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaGFyYWN0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfY2h1bmtlZCgpOwogICAgZG9jdW1lbnQyID0gewogICAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZURvY3VtZW50CiAgICB9OwogICAgY29udGFpbmVyQ29uc3RydWN0ID0gewogICAgICB0b2tlbml6ZTogdG9rZW5pemVDb250YWluZXIKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvaW5pdGlhbGl6ZS9mbG93LmpzCmZ1bmN0aW9uIGluaXRpYWxpemVGbG93KGVmZmVjdHMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgY29uc3QgaW5pdGlhbDIgPSBlZmZlY3RzLmF0dGVtcHQoCiAgICAvLyBUcnkgdG8gcGFyc2UgYSBibGFuayBsaW5lLgogICAgYmxhbmtMaW5lLAogICAgYXRCbGFua0VuZGluZywKICAgIC8vIFRyeSB0byBwYXJzZSBpbml0aWFsIGZsb3cgKGVzc2VudGlhbGx5LCBvbmx5IGNvZGUpLgogICAgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvd0luaXRpYWwsIGFmdGVyQ29uc3RydWN0LCBmYWN0b3J5U3BhY2UoZWZmZWN0cywgZWZmZWN0cy5hdHRlbXB0KHRoaXMucGFyc2VyLmNvbnN0cnVjdHMuZmxvdywgYWZ0ZXJDb25zdHJ1Y3QsIGVmZmVjdHMuYXR0ZW1wdChjb250ZW50LCBhZnRlckNvbnN0cnVjdCkpLCAibGluZVByZWZpeCIpKQogICk7CiAgcmV0dXJuIGluaXRpYWwyOwogIGZ1bmN0aW9uIGF0QmxhbmtFbmRpbmcoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nQmxhbmsiKTsKICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICBlZmZlY3RzLmV4aXQoImxpbmVFbmRpbmdCbGFuayIpOwogICAgc2VsZjIuY3VycmVudENvbnN0cnVjdCA9IHZvaWQgMDsKICAgIHJldHVybiBpbml0aWFsMjsKICB9CiAgZnVuY3Rpb24gYWZ0ZXJDb25zdHJ1Y3QoY29kZTQpIHsKICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICByZXR1cm47CiAgICB9CiAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICBzZWxmMi5jdXJyZW50Q29uc3RydWN0ID0gdm9pZCAwOwogICAgcmV0dXJuIGluaXRpYWwyOwogIH0KfQp2YXIgZmxvdzsKdmFyIGluaXRfZmxvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL2Zsb3cuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X21pY3JvbWFya19mYWN0b3J5X3NwYWNlKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgZmxvdyA9IHsKICAgICAgdG9rZW5pemU6IGluaXRpYWxpemVGbG93CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2luaXRpYWxpemUvdGV4dC5qcwpmdW5jdGlvbiBpbml0aWFsaXplRmFjdG9yeShmaWVsZCkgewogIHJldHVybiB7CiAgICByZXNvbHZlQWxsOiBjcmVhdGVSZXNvbHZlcihmaWVsZCA9PT0gInRleHQiID8gcmVzb2x2ZUFsbExpbmVTdWZmaXhlcyA6IHZvaWQgMCksCiAgICB0b2tlbml6ZTogaW5pdGlhbGl6ZVRleHQKICB9OwogIGZ1bmN0aW9uIGluaXRpYWxpemVUZXh0KGVmZmVjdHMpIHsKICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgIGNvbnN0IGNvbnN0cnVjdHMyID0gdGhpcy5wYXJzZXIuY29uc3RydWN0c1tmaWVsZF07CiAgICBjb25zdCB0ZXh0OSA9IGVmZmVjdHMuYXR0ZW1wdChjb25zdHJ1Y3RzMiwgc3RhcnQsIG5vdFRleHQpOwogICAgcmV0dXJuIHN0YXJ0OwogICAgZnVuY3Rpb24gc3RhcnQoY29kZTQpIHsKICAgICAgcmV0dXJuIGF0QnJlYWsoY29kZTQpID8gdGV4dDkoY29kZTQpIDogbm90VGV4dChjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBub3RUZXh0KGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVmZmVjdHMuZW50ZXIoImRhdGEiKTsKICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBmdW5jdGlvbiBkYXRhKGNvZGU0KSB7CiAgICAgIGlmIChhdEJyZWFrKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuZXhpdCgiZGF0YSIpOwogICAgICAgIHJldHVybiB0ZXh0OShjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgcmV0dXJuIGRhdGE7CiAgICB9CiAgICBmdW5jdGlvbiBhdEJyZWFrKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCkgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGNvbnN0IGxpc3Q1ID0gY29uc3RydWN0czJbY29kZTRdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIGlmIChsaXN0NSkgewogICAgICAgIHdoaWxlICgrK2luZGV4MiA8IGxpc3Q1Lmxlbmd0aCkgewogICAgICAgICAgY29uc3QgaXRlbSA9IGxpc3Q1W2luZGV4Ml07CiAgICAgICAgICBpZiAoIWl0ZW0ucHJldmlvdXMgfHwgaXRlbS5wcmV2aW91cy5jYWxsKHNlbGYyLCBzZWxmMi5wcmV2aW91cykpIHsKICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICB9Cn0KZnVuY3Rpb24gY3JlYXRlUmVzb2x2ZXIoZXh0cmFSZXNvbHZlcikgewogIHJldHVybiByZXNvbHZlQWxsVGV4dDsKICBmdW5jdGlvbiByZXNvbHZlQWxsVGV4dChldmVudHMsIGNvbnRleHQyKSB7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICBsZXQgZW50ZXI7CiAgICB3aGlsZSAoKytpbmRleDIgPD0gZXZlbnRzLmxlbmd0aCkgewogICAgICBpZiAoZW50ZXIgPT09IHZvaWQgMCkgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXSAmJiBldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAiZGF0YSIpIHsKICAgICAgICAgIGVudGVyID0gaW5kZXgyOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCFldmVudHNbaW5kZXgyXSB8fCBldmVudHNbaW5kZXgyXVsxXS50eXBlICE9PSAiZGF0YSIpIHsKICAgICAgICBpZiAoaW5kZXgyICE9PSBlbnRlciArIDIpIHsKICAgICAgICAgIGV2ZW50c1tlbnRlcl1bMV0uZW5kID0gZXZlbnRzW2luZGV4MiAtIDFdWzFdLmVuZDsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZW50ZXIgKyAyLCBpbmRleDIgLSBlbnRlciAtIDIpOwogICAgICAgICAgaW5kZXgyID0gZW50ZXIgKyAyOwogICAgICAgIH0KICAgICAgICBlbnRlciA9IHZvaWQgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGV4dHJhUmVzb2x2ZXIgPyBleHRyYVJlc29sdmVyKGV2ZW50cywgY29udGV4dDIpIDogZXZlbnRzOwogIH0KfQpmdW5jdGlvbiByZXNvbHZlQWxsTGluZVN1ZmZpeGVzKGV2ZW50cywgY29udGV4dDIpIHsKICBsZXQgZXZlbnRJbmRleCA9IDA7CiAgd2hpbGUgKCsrZXZlbnRJbmRleCA8PSBldmVudHMubGVuZ3RoKSB7CiAgICBpZiAoKGV2ZW50SW5kZXggPT09IGV2ZW50cy5sZW5ndGggfHwgZXZlbnRzW2V2ZW50SW5kZXhdWzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIikgJiYgZXZlbnRzW2V2ZW50SW5kZXggLSAxXVsxXS50eXBlID09PSAiZGF0YSIpIHsKICAgICAgY29uc3QgZGF0YSA9IGV2ZW50c1tldmVudEluZGV4IC0gMV1bMV07CiAgICAgIGNvbnN0IGNodW5rcyA9IGNvbnRleHQyLnNsaWNlU3RyZWFtKGRhdGEpOwogICAgICBsZXQgaW5kZXgyID0gY2h1bmtzLmxlbmd0aDsKICAgICAgbGV0IGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgIGxldCBzaXplID0gMDsKICAgICAgbGV0IHRhYnM7CiAgICAgIHdoaWxlIChpbmRleDItLSkgewogICAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW2luZGV4Ml07CiAgICAgICAgaWYgKHR5cGVvZiBjaHVuayA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gY2h1bmsubGVuZ3RoOwogICAgICAgICAgd2hpbGUgKGNodW5rLmNoYXJDb2RlQXQoYnVmZmVySW5kZXggLSAxKSA9PT0gMzIpIHsKICAgICAgICAgICAgc2l6ZSsrOwogICAgICAgICAgICBidWZmZXJJbmRleC0tOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGJ1ZmZlckluZGV4KSBicmVhazsKICAgICAgICAgIGJ1ZmZlckluZGV4ID0gLTE7CiAgICAgICAgfSBlbHNlIGlmIChjaHVuayA9PT0gLTIpIHsKICAgICAgICAgIHRhYnMgPSB0cnVlOwogICAgICAgICAgc2l6ZSsrOwogICAgICAgIH0gZWxzZSBpZiAoY2h1bmsgPT09IC0xKSB7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGluZGV4MisrOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjb250ZXh0Mi5fY29udGVudFR5cGVUZXh0VHJhaWxpbmcgJiYgZXZlbnRJbmRleCA9PT0gZXZlbnRzLmxlbmd0aCkgewogICAgICAgIHNpemUgPSAwOwogICAgICB9CiAgICAgIGlmIChzaXplKSB7CiAgICAgICAgY29uc3QgdG9rZW4gPSB7CiAgICAgICAgICB0eXBlOiBldmVudEluZGV4ID09PSBldmVudHMubGVuZ3RoIHx8IHRhYnMgfHwgc2l6ZSA8IDIgPyAibGluZVN1ZmZpeCIgOiAiaGFyZEJyZWFrVHJhaWxpbmciLAogICAgICAgICAgc3RhcnQ6IHsKICAgICAgICAgICAgX2J1ZmZlckluZGV4OiBpbmRleDIgPyBidWZmZXJJbmRleCA6IGRhdGEuc3RhcnQuX2J1ZmZlckluZGV4ICsgYnVmZmVySW5kZXgsCiAgICAgICAgICAgIF9pbmRleDogZGF0YS5zdGFydC5faW5kZXggKyBpbmRleDIsCiAgICAgICAgICAgIGxpbmU6IGRhdGEuZW5kLmxpbmUsCiAgICAgICAgICAgIGNvbHVtbjogZGF0YS5lbmQuY29sdW1uIC0gc2l6ZSwKICAgICAgICAgICAgb2Zmc2V0OiBkYXRhLmVuZC5vZmZzZXQgLSBzaXplCiAgICAgICAgICB9LAogICAgICAgICAgZW5kOiB7CiAgICAgICAgICAgIC4uLmRhdGEuZW5kCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBkYXRhLmVuZCA9IHsKICAgICAgICAgIC4uLnRva2VuLnN0YXJ0CiAgICAgICAgfTsKICAgICAgICBpZiAoZGF0YS5zdGFydC5vZmZzZXQgPT09IGRhdGEuZW5kLm9mZnNldCkgewogICAgICAgICAgT2JqZWN0LmFzc2lnbihkYXRhLCB0b2tlbik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UoZXZlbnRJbmRleCwgMCwgWyJlbnRlciIsIHRva2VuLCBjb250ZXh0Ml0sIFsiZXhpdCIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgICAgICAgZXZlbnRJbmRleCArPSAyOwogICAgICAgIH0KICAgICAgfQogICAgICBldmVudEluZGV4Kys7CiAgICB9CiAgfQogIHJldHVybiBldmVudHM7Cn0KdmFyIHJlc29sdmVyLCBzdHJpbmcsIHRleHQzOwp2YXIgaW5pdF90ZXh0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9pbml0aWFsaXplL3RleHQuanMiKCkgewogICAgcmVzb2x2ZXIgPSB7CiAgICAgIHJlc29sdmVBbGw6IGNyZWF0ZVJlc29sdmVyKCkKICAgIH07CiAgICBzdHJpbmcgPSBpbml0aWFsaXplRmFjdG9yeSgic3RyaW5nIik7CiAgICB0ZXh0MyA9IGluaXRpYWxpemVGYWN0b3J5KCJ0ZXh0Iik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY29uc3RydWN0cy5qcwp2YXIgY29uc3RydWN0c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGNvbnN0cnVjdHNfZXhwb3J0cywgewogIGF0dGVudGlvbk1hcmtlcnM6ICgpID0+IGF0dGVudGlvbk1hcmtlcnMsCiAgY29udGVudEluaXRpYWw6ICgpID0+IGNvbnRlbnRJbml0aWFsLAogIGRpc2FibGU6ICgpID0+IGRpc2FibGUsCiAgZG9jdW1lbnQ6ICgpID0+IGRvY3VtZW50MywKICBmbG93OiAoKSA9PiBmbG93MiwKICBmbG93SW5pdGlhbDogKCkgPT4gZmxvd0luaXRpYWwsCiAgaW5zaWRlU3BhbjogKCkgPT4gaW5zaWRlU3BhbiwKICBzdHJpbmc6ICgpID0+IHN0cmluZzIsCiAgdGV4dDogKCkgPT4gdGV4dDQKfSk7CnZhciBkb2N1bWVudDMsIGNvbnRlbnRJbml0aWFsLCBmbG93SW5pdGlhbCwgZmxvdzIsIHN0cmluZzIsIHRleHQ0LCBpbnNpZGVTcGFuLCBhdHRlbnRpb25NYXJrZXJzLCBkaXNhYmxlOwp2YXIgaW5pdF9jb25zdHJ1Y3RzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL2NvbnN0cnVjdHMuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfY29yZV9jb21tb25tYXJrKCk7CiAgICBpbml0X3RleHQyKCk7CiAgICBkb2N1bWVudDMgPSB7CiAgICAgIFs0Ml06IGxpc3QzLAogICAgICBbNDNdOiBsaXN0MywKICAgICAgWzQ1XTogbGlzdDMsCiAgICAgIFs0OF06IGxpc3QzLAogICAgICBbNDldOiBsaXN0MywKICAgICAgWzUwXTogbGlzdDMsCiAgICAgIFs1MV06IGxpc3QzLAogICAgICBbNTJdOiBsaXN0MywKICAgICAgWzUzXTogbGlzdDMsCiAgICAgIFs1NF06IGxpc3QzLAogICAgICBbNTVdOiBsaXN0MywKICAgICAgWzU2XTogbGlzdDMsCiAgICAgIFs1N106IGxpc3QzLAogICAgICBbNjJdOiBibG9ja1F1b3RlCiAgICB9OwogICAgY29udGVudEluaXRpYWwgPSB7CiAgICAgIFs5MV06IGRlZmluaXRpb24yCiAgICB9OwogICAgZmxvd0luaXRpYWwgPSB7CiAgICAgIFstMl06IGNvZGVJbmRlbnRlZCwKICAgICAgWy0xXTogY29kZUluZGVudGVkLAogICAgICBbMzJdOiBjb2RlSW5kZW50ZWQKICAgIH07CiAgICBmbG93MiA9IHsKICAgICAgWzM1XTogaGVhZGluZ0F0eCwKICAgICAgWzQyXTogdGhlbWF0aWNCcmVhazIsCiAgICAgIFs0NV06IFtzZXRleHRVbmRlcmxpbmUsIHRoZW1hdGljQnJlYWsyXSwKICAgICAgWzYwXTogaHRtbEZsb3csCiAgICAgIFs2MV06IHNldGV4dFVuZGVybGluZSwKICAgICAgWzk1XTogdGhlbWF0aWNCcmVhazIsCiAgICAgIFs5Nl06IGNvZGVGZW5jZWQsCiAgICAgIFsxMjZdOiBjb2RlRmVuY2VkCiAgICB9OwogICAgc3RyaW5nMiA9IHsKICAgICAgWzM4XTogY2hhcmFjdGVyUmVmZXJlbmNlLAogICAgICBbOTJdOiBjaGFyYWN0ZXJFc2NhcGUKICAgIH07CiAgICB0ZXh0NCA9IHsKICAgICAgWy01XTogbGluZUVuZGluZywKICAgICAgWy00XTogbGluZUVuZGluZywKICAgICAgWy0zXTogbGluZUVuZGluZywKICAgICAgWzMzXTogbGFiZWxTdGFydEltYWdlLAogICAgICBbMzhdOiBjaGFyYWN0ZXJSZWZlcmVuY2UsCiAgICAgIFs0Ml06IGF0dGVudGlvbiwKICAgICAgWzYwXTogW2F1dG9saW5rLCBodG1sVGV4dF0sCiAgICAgIFs5MV06IGxhYmVsU3RhcnRMaW5rLAogICAgICBbOTJdOiBbaGFyZEJyZWFrRXNjYXBlLCBjaGFyYWN0ZXJFc2NhcGVdLAogICAgICBbOTNdOiBsYWJlbEVuZCwKICAgICAgWzk1XTogYXR0ZW50aW9uLAogICAgICBbOTZdOiBjb2RlVGV4dAogICAgfTsKICAgIGluc2lkZVNwYW4gPSB7CiAgICAgIG51bGw6IFthdHRlbnRpb24sIHJlc29sdmVyXQogICAgfTsKICAgIGF0dGVudGlvbk1hcmtlcnMgPSB7CiAgICAgIG51bGw6IFs0MiwgOTVdCiAgICB9OwogICAgZGlzYWJsZSA9IHsKICAgICAgbnVsbDogW10KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY3JlYXRlLXRva2VuaXplci5qcwpmdW5jdGlvbiBjcmVhdGVUb2tlbml6ZXIocGFyc2VyLCBpbml0aWFsaXplLCBmcm9tMikgewogIGxldCBwb2ludDQgPSB7CiAgICBfYnVmZmVySW5kZXg6IC0xLAogICAgX2luZGV4OiAwLAogICAgbGluZTogZnJvbTIgJiYgZnJvbTIubGluZSB8fCAxLAogICAgY29sdW1uOiBmcm9tMiAmJiBmcm9tMi5jb2x1bW4gfHwgMSwKICAgIG9mZnNldDogZnJvbTIgJiYgZnJvbTIub2Zmc2V0IHx8IDAKICB9OwogIGNvbnN0IGNvbHVtblN0YXJ0ID0ge307CiAgY29uc3QgcmVzb2x2ZUFsbENvbnN0cnVjdHMgPSBbXTsKICBsZXQgY2h1bmtzID0gW107CiAgbGV0IHN0YWNrID0gW107CiAgbGV0IGNvbnN1bWVkID0gdHJ1ZTsKICBjb25zdCBlZmZlY3RzID0gewogICAgYXR0ZW1wdDogY29uc3RydWN0RmFjdG9yeShvbnN1Y2Nlc3NmdWxjb25zdHJ1Y3QpLAogICAgY2hlY2s6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY2hlY2spLAogICAgY29uc3VtZSwKICAgIGVudGVyLAogICAgZXhpdDogZXhpdDMsCiAgICBpbnRlcnJ1cHQ6IGNvbnN0cnVjdEZhY3Rvcnkob25zdWNjZXNzZnVsY2hlY2ssIHsKICAgICAgaW50ZXJydXB0OiB0cnVlCiAgICB9KQogIH07CiAgY29uc3QgY29udGV4dDIgPSB7CiAgICBjb2RlOiBudWxsLAogICAgY29udGFpbmVyU3RhdGU6IHt9LAogICAgZGVmaW5lU2tpcCwKICAgIGV2ZW50czogW10sCiAgICBub3c6IG5vdzIsCiAgICBwYXJzZXIsCiAgICBwcmV2aW91czogbnVsbCwKICAgIHNsaWNlU2VyaWFsaXplLAogICAgc2xpY2VTdHJlYW0sCiAgICB3cml0ZQogIH07CiAgbGV0IHN0YXRlMTIgPSBpbml0aWFsaXplLnRva2VuaXplLmNhbGwoY29udGV4dDIsIGVmZmVjdHMpOwogIGxldCBleHBlY3RlZENvZGU7CiAgaWYgKGluaXRpYWxpemUucmVzb2x2ZUFsbCkgewogICAgcmVzb2x2ZUFsbENvbnN0cnVjdHMucHVzaChpbml0aWFsaXplKTsKICB9CiAgcmV0dXJuIGNvbnRleHQyOwogIGZ1bmN0aW9uIHdyaXRlKHNsaWNlKSB7CiAgICBjaHVua3MgPSBwdXNoKGNodW5rcywgc2xpY2UpOwogICAgbWFpbigpOwogICAgaWYgKGNodW5rc1tjaHVua3MubGVuZ3RoIC0gMV0gIT09IG51bGwpIHsKICAgICAgcmV0dXJuIFtdOwogICAgfQogICAgYWRkUmVzdWx0KGluaXRpYWxpemUsIDApOwogICAgY29udGV4dDIuZXZlbnRzID0gcmVzb2x2ZUFsbChyZXNvbHZlQWxsQ29uc3RydWN0cywgY29udGV4dDIuZXZlbnRzLCBjb250ZXh0Mik7CiAgICByZXR1cm4gY29udGV4dDIuZXZlbnRzOwogIH0KICBmdW5jdGlvbiBzbGljZVNlcmlhbGl6ZSh0b2tlbiwgZXhwYW5kVGFicykgewogICAgcmV0dXJuIHNlcmlhbGl6ZUNodW5rcyhzbGljZVN0cmVhbSh0b2tlbiksIGV4cGFuZFRhYnMpOwogIH0KICBmdW5jdGlvbiBzbGljZVN0cmVhbSh0b2tlbikgewogICAgcmV0dXJuIHNsaWNlQ2h1bmtzKGNodW5rcywgdG9rZW4pOwogIH0KICBmdW5jdGlvbiBub3cyKCkgewogICAgY29uc3QgewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH0gPSBwb2ludDQ7CiAgICByZXR1cm4gewogICAgICBfYnVmZmVySW5kZXgsCiAgICAgIF9pbmRleCwKICAgICAgbGluZSwKICAgICAgY29sdW1uLAogICAgICBvZmZzZXQKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRlZmluZVNraXAodmFsdWUyKSB7CiAgICBjb2x1bW5TdGFydFt2YWx1ZTIubGluZV0gPSB2YWx1ZTIuY29sdW1uOwogICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICB9CiAgZnVuY3Rpb24gbWFpbigpIHsKICAgIGxldCBjaHVua0luZGV4OwogICAgd2hpbGUgKHBvaW50NC5faW5kZXggPCBjaHVua3MubGVuZ3RoKSB7CiAgICAgIGNvbnN0IGNodW5rID0gY2h1bmtzW3BvaW50NC5faW5kZXhdOwogICAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICAgIGNodW5rSW5kZXggPSBwb2ludDQuX2luZGV4OwogICAgICAgIGlmIChwb2ludDQuX2J1ZmZlckluZGV4IDwgMCkgewogICAgICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCA9IDA7CiAgICAgICAgfQogICAgICAgIHdoaWxlIChwb2ludDQuX2luZGV4ID09PSBjaHVua0luZGV4ICYmIHBvaW50NC5fYnVmZmVySW5kZXggPCBjaHVuay5sZW5ndGgpIHsKICAgICAgICAgIGdvKGNodW5rLmNoYXJDb2RlQXQocG9pbnQ0Ll9idWZmZXJJbmRleCkpOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBnbyhjaHVuayk7CiAgICAgIH0KICAgIH0KICB9CiAgZnVuY3Rpb24gZ28oY29kZTQpIHsKICAgIGNvbnN1bWVkID0gdm9pZCAwOwogICAgZXhwZWN0ZWRDb2RlID0gY29kZTQ7CiAgICBzdGF0ZTEyID0gc3RhdGUxMihjb2RlNCk7CiAgfQogIGZ1bmN0aW9uIGNvbnN1bWUoY29kZTQpIHsKICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgIHBvaW50NC5saW5lKys7CiAgICAgIHBvaW50NC5jb2x1bW4gPSAxOwogICAgICBwb2ludDQub2Zmc2V0ICs9IGNvZGU0ID09PSAtMyA/IDIgOiAxOwogICAgICBhY2NvdW50Rm9yUG90ZW50aWFsU2tpcCgpOwogICAgfSBlbHNlIGlmIChjb2RlNCAhPT0gLTEpIHsKICAgICAgcG9pbnQ0LmNvbHVtbisrOwogICAgICBwb2ludDQub2Zmc2V0Kys7CiAgICB9CiAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA8IDApIHsKICAgICAgcG9pbnQ0Ll9pbmRleCsrOwogICAgfSBlbHNlIHsKICAgICAgcG9pbnQ0Ll9idWZmZXJJbmRleCsrOwogICAgICBpZiAocG9pbnQ0Ll9idWZmZXJJbmRleCA9PT0gLy8gUG9pbnRzIHcvIG5vbi1uZWdhdGl2ZSBgX2J1ZmZlckluZGV4YCByZWZlcmVuY2UKICAgICAgLy8gc3RyaW5ncy4KICAgICAgLyoqIEB0eXBlIHtzdHJpbmd9ICovCiAgICAgIGNodW5rc1twb2ludDQuX2luZGV4XS5sZW5ndGgpIHsKICAgICAgICBwb2ludDQuX2J1ZmZlckluZGV4ID0gLTE7CiAgICAgICAgcG9pbnQ0Ll9pbmRleCsrOwogICAgICB9CiAgICB9CiAgICBjb250ZXh0Mi5wcmV2aW91cyA9IGNvZGU0OwogICAgY29uc3VtZWQgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBlbnRlcih0eXBlNSwgZmllbGRzKSB7CiAgICBjb25zdCB0b2tlbiA9IGZpZWxkcyB8fCB7fTsKICAgIHRva2VuLnR5cGUgPSB0eXBlNTsKICAgIHRva2VuLnN0YXJ0ID0gbm93MigpOwogICAgY29udGV4dDIuZXZlbnRzLnB1c2goWyJlbnRlciIsIHRva2VuLCBjb250ZXh0Ml0pOwogICAgc3RhY2sucHVzaCh0b2tlbik7CiAgICByZXR1cm4gdG9rZW47CiAgfQogIGZ1bmN0aW9uIGV4aXQzKHR5cGU1KSB7CiAgICBjb25zdCB0b2tlbiA9IHN0YWNrLnBvcCgpOwogICAgdG9rZW4uZW5kID0gbm93MigpOwogICAgY29udGV4dDIuZXZlbnRzLnB1c2goWyJleGl0IiwgdG9rZW4sIGNvbnRleHQyXSk7CiAgICByZXR1cm4gdG9rZW47CiAgfQogIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNvbnN0cnVjdChjb25zdHJ1Y3QsIGluZm8pIHsKICAgIGFkZFJlc3VsdChjb25zdHJ1Y3QsIGluZm8uZnJvbSk7CiAgfQogIGZ1bmN0aW9uIG9uc3VjY2Vzc2Z1bGNoZWNrKF80LCBpbmZvKSB7CiAgICBpbmZvLnJlc3RvcmUoKTsKICB9CiAgZnVuY3Rpb24gY29uc3RydWN0RmFjdG9yeShvbnJldHVybiwgZmllbGRzKSB7CiAgICByZXR1cm4gaG9vazsKICAgIGZ1bmN0aW9uIGhvb2soY29uc3RydWN0czIsIHJldHVyblN0YXRlLCBib2d1c1N0YXRlKSB7CiAgICAgIGxldCBsaXN0T2ZDb25zdHJ1Y3RzOwogICAgICBsZXQgY29uc3RydWN0SW5kZXg7CiAgICAgIGxldCBjdXJyZW50Q29uc3RydWN0OwogICAgICBsZXQgaW5mbzsKICAgICAgcmV0dXJuIEFycmF5LmlzQXJyYXkoY29uc3RydWN0czIpID8gKAogICAgICAgIC8qIGM4IGlnbm9yZSBuZXh0IDEgKi8KICAgICAgICBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGNvbnN0cnVjdHMyKQogICAgICApIDogInRva2VuaXplIiBpbiBjb25zdHJ1Y3RzMiA/ICgKICAgICAgICAvLyBMb29rcyBsaWtlIGEgY29uc3RydWN0LgogICAgICAgIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMoWwogICAgICAgICAgLyoqIEB0eXBlIHtDb25zdHJ1Y3R9ICovCiAgICAgICAgICBjb25zdHJ1Y3RzMgogICAgICAgIF0pCiAgICAgICkgOiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMoY29uc3RydWN0czIpOwogICAgICBmdW5jdGlvbiBoYW5kbGVNYXBPZkNvbnN0cnVjdHMobWFwNykgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICAgICAgY29uc3QgbGVmdCA9IGNvZGU0ICE9PSBudWxsICYmIG1hcDdbY29kZTRdOwogICAgICAgICAgY29uc3QgYWxsMyA9IGNvZGU0ICE9PSBudWxsICYmIG1hcDcubnVsbDsKICAgICAgICAgIGNvbnN0IGxpc3Q1ID0gWwogICAgICAgICAgICAvLyBUbyBkbzogYWRkIG1vcmUgZXh0ZW5zaW9uIHRlc3RzLgogICAgICAgICAgICAvKiBjOCBpZ25vcmUgbmV4dCAyICovCiAgICAgICAgICAgIC4uLkFycmF5LmlzQXJyYXkobGVmdCkgPyBsZWZ0IDogbGVmdCA/IFtsZWZ0XSA6IFtdLAogICAgICAgICAgICAuLi5BcnJheS5pc0FycmF5KGFsbDMpID8gYWxsMyA6IGFsbDMgPyBbYWxsM10gOiBbXQogICAgICAgICAgXTsKICAgICAgICAgIHJldHVybiBoYW5kbGVMaXN0T2ZDb25zdHJ1Y3RzKGxpc3Q1KShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIGhhbmRsZUxpc3RPZkNvbnN0cnVjdHMobGlzdDUpIHsKICAgICAgICBsaXN0T2ZDb25zdHJ1Y3RzID0gbGlzdDU7CiAgICAgICAgY29uc3RydWN0SW5kZXggPSAwOwogICAgICAgIGlmIChsaXN0NS5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBib2d1c1N0YXRlOwogICAgICAgIH0KICAgICAgICByZXR1cm4gaGFuZGxlQ29uc3RydWN0KGxpc3Q1W2NvbnN0cnVjdEluZGV4XSk7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gaGFuZGxlQ29uc3RydWN0KGNvbnN0cnVjdCkgewogICAgICAgIHJldHVybiBzdGFydDsKICAgICAgICBmdW5jdGlvbiBzdGFydChjb2RlNCkgewogICAgICAgICAgaW5mbyA9IHN0b3JlKCk7CiAgICAgICAgICBjdXJyZW50Q29uc3RydWN0ID0gY29uc3RydWN0OwogICAgICAgICAgaWYgKCFjb25zdHJ1Y3QucGFydGlhbCkgewogICAgICAgICAgICBjb250ZXh0Mi5jdXJyZW50Q29uc3RydWN0ID0gY29uc3RydWN0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKGNvbnN0cnVjdC5uYW1lICYmIGNvbnRleHQyLnBhcnNlci5jb25zdHJ1Y3RzLmRpc2FibGUubnVsbC5pbmNsdWRlcyhjb25zdHJ1Y3QubmFtZSkpIHsKICAgICAgICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gY29uc3RydWN0LnRva2VuaXplLmNhbGwoCiAgICAgICAgICAgIC8vIElmIHdlIGRvIGhhdmUgZmllbGRzLCBjcmVhdGUgYW4gb2JqZWN0IHcvIGBjb250ZXh0YCBhcyBpdHMKICAgICAgICAgICAgLy8gcHJvdG90eXBlLgogICAgICAgICAgICAvLyBUaGlzIGFsbG93cyBhIOKAnGxpdmUgYmluZGluZ+KAnSwgd2hpY2ggaXMgbmVlZGVkIGZvciBgaW50ZXJydXB0YC4KICAgICAgICAgICAgZmllbGRzID8gT2JqZWN0LmFzc2lnbihPYmplY3QuY3JlYXRlKGNvbnRleHQyKSwgZmllbGRzKSA6IGNvbnRleHQyLAogICAgICAgICAgICBlZmZlY3RzLAogICAgICAgICAgICBvazMsCiAgICAgICAgICAgIG5vawogICAgICAgICAgKShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGZ1bmN0aW9uIG9rMyhjb2RlNCkgewogICAgICAgIGNvbnN1bWVkID0gdHJ1ZTsKICAgICAgICBvbnJldHVybihjdXJyZW50Q29uc3RydWN0LCBpbmZvKTsKICAgICAgICByZXR1cm4gcmV0dXJuU3RhdGU7CiAgICAgIH0KICAgICAgZnVuY3Rpb24gbm9rKGNvZGU0KSB7CiAgICAgICAgY29uc3VtZWQgPSB0cnVlOwogICAgICAgIGluZm8ucmVzdG9yZSgpOwogICAgICAgIGlmICgrK2NvbnN0cnVjdEluZGV4IDwgbGlzdE9mQ29uc3RydWN0cy5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiBoYW5kbGVDb25zdHJ1Y3QobGlzdE9mQ29uc3RydWN0c1tjb25zdHJ1Y3RJbmRleF0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYm9ndXNTdGF0ZTsKICAgICAgfQogICAgfQogIH0KICBmdW5jdGlvbiBhZGRSZXN1bHQoY29uc3RydWN0LCBmcm9tMykgewogICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlQWxsICYmICFyZXNvbHZlQWxsQ29uc3RydWN0cy5pbmNsdWRlcyhjb25zdHJ1Y3QpKSB7CiAgICAgIHJlc29sdmVBbGxDb25zdHJ1Y3RzLnB1c2goY29uc3RydWN0KTsKICAgIH0KICAgIGlmIChjb25zdHJ1Y3QucmVzb2x2ZSkgewogICAgICBzcGxpY2UoY29udGV4dDIuZXZlbnRzLCBmcm9tMywgY29udGV4dDIuZXZlbnRzLmxlbmd0aCAtIGZyb20zLCBjb25zdHJ1Y3QucmVzb2x2ZShjb250ZXh0Mi5ldmVudHMuc2xpY2UoZnJvbTMpLCBjb250ZXh0MikpOwogICAgfQogICAgaWYgKGNvbnN0cnVjdC5yZXNvbHZlVG8pIHsKICAgICAgY29udGV4dDIuZXZlbnRzID0gY29uc3RydWN0LnJlc29sdmVUbyhjb250ZXh0Mi5ldmVudHMsIGNvbnRleHQyKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gc3RvcmUoKSB7CiAgICBjb25zdCBzdGFydFBvaW50ID0gbm93MigpOwogICAgY29uc3Qgc3RhcnRQcmV2aW91cyA9IGNvbnRleHQyLnByZXZpb3VzOwogICAgY29uc3Qgc3RhcnRDdXJyZW50Q29uc3RydWN0ID0gY29udGV4dDIuY3VycmVudENvbnN0cnVjdDsKICAgIGNvbnN0IHN0YXJ0RXZlbnRzSW5kZXggPSBjb250ZXh0Mi5ldmVudHMubGVuZ3RoOwogICAgY29uc3Qgc3RhcnRTdGFjayA9IEFycmF5LmZyb20oc3RhY2spOwogICAgcmV0dXJuIHsKICAgICAgZnJvbTogc3RhcnRFdmVudHNJbmRleCwKICAgICAgcmVzdG9yZQogICAgfTsKICAgIGZ1bmN0aW9uIHJlc3RvcmUoKSB7CiAgICAgIHBvaW50NCA9IHN0YXJ0UG9pbnQ7CiAgICAgIGNvbnRleHQyLnByZXZpb3VzID0gc3RhcnRQcmV2aW91czsKICAgICAgY29udGV4dDIuY3VycmVudENvbnN0cnVjdCA9IHN0YXJ0Q3VycmVudENvbnN0cnVjdDsKICAgICAgY29udGV4dDIuZXZlbnRzLmxlbmd0aCA9IHN0YXJ0RXZlbnRzSW5kZXg7CiAgICAgIHN0YWNrID0gc3RhcnRTdGFjazsKICAgICAgYWNjb3VudEZvclBvdGVudGlhbFNraXAoKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gYWNjb3VudEZvclBvdGVudGlhbFNraXAoKSB7CiAgICBpZiAocG9pbnQ0LmxpbmUgaW4gY29sdW1uU3RhcnQgJiYgcG9pbnQ0LmNvbHVtbiA8IDIpIHsKICAgICAgcG9pbnQ0LmNvbHVtbiA9IGNvbHVtblN0YXJ0W3BvaW50NC5saW5lXTsKICAgICAgcG9pbnQ0Lm9mZnNldCArPSBjb2x1bW5TdGFydFtwb2ludDQubGluZV0gLSAxOwogICAgfQogIH0KfQpmdW5jdGlvbiBzbGljZUNodW5rcyhjaHVua3MsIHRva2VuKSB7CiAgY29uc3Qgc3RhcnRJbmRleCA9IHRva2VuLnN0YXJ0Ll9pbmRleDsKICBjb25zdCBzdGFydEJ1ZmZlckluZGV4ID0gdG9rZW4uc3RhcnQuX2J1ZmZlckluZGV4OwogIGNvbnN0IGVuZEluZGV4ID0gdG9rZW4uZW5kLl9pbmRleDsKICBjb25zdCBlbmRCdWZmZXJJbmRleCA9IHRva2VuLmVuZC5fYnVmZmVySW5kZXg7CiAgbGV0IHZpZXc7CiAgaWYgKHN0YXJ0SW5kZXggPT09IGVuZEluZGV4KSB7CiAgICB2aWV3ID0gW2NodW5rc1tzdGFydEluZGV4XS5zbGljZShzdGFydEJ1ZmZlckluZGV4LCBlbmRCdWZmZXJJbmRleCldOwogIH0gZWxzZSB7CiAgICB2aWV3ID0gY2h1bmtzLnNsaWNlKHN0YXJ0SW5kZXgsIGVuZEluZGV4KTsKICAgIGlmIChzdGFydEJ1ZmZlckluZGV4ID4gLTEpIHsKICAgICAgY29uc3QgaGVhZDIgPSB2aWV3WzBdOwogICAgICBpZiAodHlwZW9mIGhlYWQyID09PSAic3RyaW5nIikgewogICAgICAgIHZpZXdbMF0gPSBoZWFkMi5zbGljZShzdGFydEJ1ZmZlckluZGV4KTsKICAgICAgfSBlbHNlIHsKICAgICAgICB2aWV3LnNoaWZ0KCk7CiAgICAgIH0KICAgIH0KICAgIGlmIChlbmRCdWZmZXJJbmRleCA+IDApIHsKICAgICAgdmlldy5wdXNoKGNodW5rc1tlbmRJbmRleF0uc2xpY2UoMCwgZW5kQnVmZmVySW5kZXgpKTsKICAgIH0KICB9CiAgcmV0dXJuIHZpZXc7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQ2h1bmtzKGNodW5rcywgZXhwYW5kVGFicykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgYXRUYWI7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2h1bmtzLmxlbmd0aCkgewogICAgY29uc3QgY2h1bmsgPSBjaHVua3NbaW5kZXgyXTsKICAgIGxldCB2YWx1ZTI7CiAgICBpZiAodHlwZW9mIGNodW5rID09PSAic3RyaW5nIikgewogICAgICB2YWx1ZTIgPSBjaHVuazsKICAgIH0gZWxzZSBzd2l0Y2ggKGNodW5rKSB7CiAgICAgIGNhc2UgLTU6IHsKICAgICAgICB2YWx1ZTIgPSAiXHIiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTQ6IHsKICAgICAgICB2YWx1ZTIgPSAiXG4iOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGNhc2UgLTM6IHsKICAgICAgICB2YWx1ZTIgPSAiXHJcbiI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtMjogewogICAgICAgIHZhbHVlMiA9IGV4cGFuZFRhYnMgPyAiICIgOiAiCSI7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY2FzZSAtMTogewogICAgICAgIGlmICghZXhwYW5kVGFicyAmJiBhdFRhYikgY29udGludWU7CiAgICAgICAgdmFsdWUyID0gIiAiOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGRlZmF1bHQ6IHsKICAgICAgICB2YWx1ZTIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNodW5rKTsKICAgICAgfQogICAgfQogICAgYXRUYWIgPSBjaHVuayA9PT0gLTI7CiAgICByZXN1bHQucHVzaCh2YWx1ZTIpOwogIH0KICByZXR1cm4gcmVzdWx0LmpvaW4oIiIpOwp9CnZhciBpbml0X2NyZWF0ZV90b2tlbml6ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvY3JlYXRlLXRva2VuaXplci5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9jaHVua2VkKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Jlc29sdmVfYWxsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcGFyc2UuanMKZnVuY3Rpb24gcGFyc2U0KG9wdGlvbnMpIHsKICBjb25zdCBzZXR0aW5ncyA9IG9wdGlvbnMgfHwge307CiAgY29uc3QgY29uc3RydWN0czIgPSAoCiAgICAvKiogQHR5cGUge0Z1bGxOb3JtYWxpemVkRXh0ZW5zaW9ufSAqLwogICAgY29tYmluZUV4dGVuc2lvbnMoW2NvbnN0cnVjdHNfZXhwb3J0cywgLi4uc2V0dGluZ3MuZXh0ZW5zaW9ucyB8fCBbXV0pCiAgKTsKICBjb25zdCBwYXJzZXIgPSB7CiAgICBjb25zdHJ1Y3RzOiBjb25zdHJ1Y3RzMiwKICAgIGNvbnRlbnQ6IGNyZWF0ZTcoY29udGVudDIpLAogICAgZGVmaW5lZDogW10sCiAgICBkb2N1bWVudDogY3JlYXRlNyhkb2N1bWVudDIpLAogICAgZmxvdzogY3JlYXRlNyhmbG93KSwKICAgIGxhenk6IHt9LAogICAgc3RyaW5nOiBjcmVhdGU3KHN0cmluZyksCiAgICB0ZXh0OiBjcmVhdGU3KHRleHQzKQogIH07CiAgcmV0dXJuIHBhcnNlcjsKICBmdW5jdGlvbiBjcmVhdGU3KGluaXRpYWwyKSB7CiAgICByZXR1cm4gY3JlYXRvcjsKICAgIGZ1bmN0aW9uIGNyZWF0b3IoZnJvbTIpIHsKICAgICAgcmV0dXJuIGNyZWF0ZVRva2VuaXplcihwYXJzZXIsIGluaXRpYWwyLCBmcm9tMik7CiAgICB9CiAgfQp9CnZhciBpbml0X3BhcnNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wYXJzZS5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NvbWJpbmVfZXh0ZW5zaW9ucygpOwogICAgaW5pdF9jb250ZW50MigpOwogICAgaW5pdF9kb2N1bWVudCgpOwogICAgaW5pdF9mbG93KCk7CiAgICBpbml0X3RleHQyKCk7CiAgICBpbml0X2NvbnN0cnVjdHMoKTsKICAgIGluaXRfY3JlYXRlX3Rva2VuaXplcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzCmZ1bmN0aW9uIHBvc3Rwcm9jZXNzKGV2ZW50cykgewogIHdoaWxlICghc3VidG9rZW5pemUoZXZlbnRzKSkgewogIH0KICByZXR1cm4gZXZlbnRzOwp9CnZhciBpbml0X3Bvc3Rwcm9jZXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvbGliL3Bvc3Rwcm9jZXNzLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc3VidG9rZW5pemUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFya0A0LjAuMi9ub2RlX21vZHVsZXMvbWljcm9tYXJrL2xpYi9wcmVwcm9jZXNzLmpzCmZ1bmN0aW9uIHByZXByb2Nlc3MoKSB7CiAgbGV0IGNvbHVtbiA9IDE7CiAgbGV0IGJ1ZmZlcjIgPSAiIjsKICBsZXQgc3RhcnQgPSB0cnVlOwogIGxldCBhdENhcnJpYWdlUmV0dXJuOwogIHJldHVybiBwcmVwcm9jZXNzb3I7CiAgZnVuY3Rpb24gcHJlcHJvY2Vzc29yKHZhbHVlMiwgZW5jb2RpbmcsIGVuZDMpIHsKICAgIGNvbnN0IGNodW5rcyA9IFtdOwogICAgbGV0IG1hdGNoMjsKICAgIGxldCBuZXh0MjsKICAgIGxldCBzdGFydFBvc2l0aW9uOwogICAgbGV0IGVuZFBvc2l0aW9uOwogICAgbGV0IGNvZGU0OwogICAgdmFsdWUyID0gYnVmZmVyMiArICh0eXBlb2YgdmFsdWUyID09PSAic3RyaW5nIiA/IHZhbHVlMi50b1N0cmluZygpIDogbmV3IFRleHREZWNvZGVyKGVuY29kaW5nIHx8IHZvaWQgMCkuZGVjb2RlKHZhbHVlMikpOwogICAgc3RhcnRQb3NpdGlvbiA9IDA7CiAgICBidWZmZXIyID0gIiI7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgaWYgKHZhbHVlMi5jaGFyQ29kZUF0KDApID09PSA2NTI3OSkgewogICAgICAgIHN0YXJ0UG9zaXRpb24rKzsKICAgICAgfQogICAgICBzdGFydCA9IHZvaWQgMDsKICAgIH0KICAgIHdoaWxlIChzdGFydFBvc2l0aW9uIDwgdmFsdWUyLmxlbmd0aCkgewogICAgICBzZWFyY2gubGFzdEluZGV4ID0gc3RhcnRQb3NpdGlvbjsKICAgICAgbWF0Y2gyID0gc2VhcmNoLmV4ZWModmFsdWUyKTsKICAgICAgZW5kUG9zaXRpb24gPSBtYXRjaDIgJiYgbWF0Y2gyLmluZGV4ICE9PSB2b2lkIDAgPyBtYXRjaDIuaW5kZXggOiB2YWx1ZTIubGVuZ3RoOwogICAgICBjb2RlNCA9IHZhbHVlMi5jaGFyQ29kZUF0KGVuZFBvc2l0aW9uKTsKICAgICAgaWYgKCFtYXRjaDIpIHsKICAgICAgICBidWZmZXIyID0gdmFsdWUyLnNsaWNlKHN0YXJ0UG9zaXRpb24pOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGlmIChjb2RlNCA9PT0gMTAgJiYgc3RhcnRQb3NpdGlvbiA9PT0gZW5kUG9zaXRpb24gJiYgYXRDYXJyaWFnZVJldHVybikgewogICAgICAgIGNodW5rcy5wdXNoKC0zKTsKICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdm9pZCAwOwogICAgICB9IGVsc2UgewogICAgICAgIGlmIChhdENhcnJpYWdlUmV0dXJuKSB7CiAgICAgICAgICBjaHVua3MucHVzaCgtNSk7CiAgICAgICAgICBhdENhcnJpYWdlUmV0dXJuID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgICBpZiAoc3RhcnRQb3NpdGlvbiA8IGVuZFBvc2l0aW9uKSB7CiAgICAgICAgICBjaHVua3MucHVzaCh2YWx1ZTIuc2xpY2Uoc3RhcnRQb3NpdGlvbiwgZW5kUG9zaXRpb24pKTsKICAgICAgICAgIGNvbHVtbiArPSBlbmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb247CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAoY29kZTQpIHsKICAgICAgICAgIGNhc2UgMDogewogICAgICAgICAgICBjaHVua3MucHVzaCg2NTUzMyk7CiAgICAgICAgICAgIGNvbHVtbisrOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgOTogewogICAgICAgICAgICBuZXh0MiA9IE1hdGguY2VpbChjb2x1bW4gLyA0KSAqIDQ7CiAgICAgICAgICAgIGNodW5rcy5wdXNoKC0yKTsKICAgICAgICAgICAgd2hpbGUgKGNvbHVtbisrIDwgbmV4dDIpIGNodW5rcy5wdXNoKC0xKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIDEwOiB7CiAgICAgICAgICAgIGNodW5rcy5wdXNoKC00KTsKICAgICAgICAgICAgY29sdW1uID0gMTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIGF0Q2FycmlhZ2VSZXR1cm4gPSB0cnVlOwogICAgICAgICAgICBjb2x1bW4gPSAxOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdGFydFBvc2l0aW9uID0gZW5kUG9zaXRpb24gKyAxOwogICAgfQogICAgaWYgKGVuZDMpIHsKICAgICAgaWYgKGF0Q2FycmlhZ2VSZXR1cm4pIGNodW5rcy5wdXNoKC01KTsKICAgICAgaWYgKGJ1ZmZlcjIpIGNodW5rcy5wdXNoKGJ1ZmZlcjIpOwogICAgICBjaHVua3MucHVzaChudWxsKTsKICAgIH0KICAgIHJldHVybiBjaHVua3M7CiAgfQp9CnZhciBzZWFyY2g7CnZhciBpbml0X3ByZXByb2Nlc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9saWIvcHJlcHJvY2Vzcy5qcyIoKSB7CiAgICBzZWFyY2ggPSAvW1wwXHRcblxyXS9nOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrQDQuMC4yL25vZGVfbW9kdWxlcy9taWNyb21hcmsvaW5kZXguanMKZnVuY3Rpb24gbWljcm9tYXJrKHZhbHVlMiwgZW5jb2RpbmcsIG9wdGlvbnMpIHsKICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAic3RyaW5nIikgewogICAgb3B0aW9ucyA9IGVuY29kaW5nOwogICAgZW5jb2RpbmcgPSB2b2lkIDA7CiAgfQogIHJldHVybiBjb21waWxlKG9wdGlvbnMpKHBvc3Rwcm9jZXNzKHBhcnNlNChvcHRpb25zKS5kb2N1bWVudCgpLndyaXRlKHByZXByb2Nlc3MoKSh2YWx1ZTIsIGVuY29kaW5nLCB0cnVlKSkpKTsKfQp2YXIgaW5pdF9taWNyb21hcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmtANC4wLjIvbm9kZV9tb2R1bGVzL21pY3JvbWFyay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NvbXBpbGUoKTsKICAgIGluaXRfcGFyc2UyKCk7CiAgICBpbml0X3Bvc3Rwcm9jZXNzKCk7CiAgICBpbml0X3ByZXByb2Nlc3MoKTsKICAgIGluaXRfY29tcGlsZSgpOwogICAgaW5pdF9wYXJzZTIoKTsKICAgIGluaXRfcG9zdHByb2Nlc3MoKTsKICAgIGluaXRfcHJlcHJvY2VzcygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vbGliL2luZGV4LmpzCmZ1bmN0aW9uIGZyb21NYXJrZG93bih2YWx1ZTIsIGVuY29kaW5nLCBvcHRpb25zKSB7CiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gInN0cmluZyIpIHsKICAgIG9wdGlvbnMgPSBlbmNvZGluZzsKICAgIGVuY29kaW5nID0gdm9pZCAwOwogIH0KICByZXR1cm4gY29tcGlsZXIob3B0aW9ucykocG9zdHByb2Nlc3MocGFyc2U0KG9wdGlvbnMpLmRvY3VtZW50KCkud3JpdGUocHJlcHJvY2VzcygpKHZhbHVlMiwgZW5jb2RpbmcsIHRydWUpKSkpOwp9CmZ1bmN0aW9uIGNvbXBpbGVyKG9wdGlvbnMpIHsKICBjb25zdCBjb25maWczID0gewogICAgdHJhbnNmb3JtczogW10sCiAgICBjYW5Db250YWluRW9sczogWyJlbXBoYXNpcyIsICJmcmFnbWVudCIsICJoZWFkaW5nIiwgInBhcmFncmFwaCIsICJzdHJvbmciXSwKICAgIGVudGVyOiB7CiAgICAgIGF1dG9saW5rOiBvcGVuZXIyKGxpbmszKSwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25lbnRlcmRhdGEsCiAgICAgIGF1dG9saW5rRW1haWw6IG9uZW50ZXJkYXRhLAogICAgICBhdHhIZWFkaW5nOiBvcGVuZXIyKGhlYWRpbmczKSwKICAgICAgYmxvY2tRdW90ZTogb3BlbmVyMihibG9ja1F1b3RlMiksCiAgICAgIGNoYXJhY3RlckVzY2FwZTogb25lbnRlcmRhdGEsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZTogb25lbnRlcmRhdGEsCiAgICAgIGNvZGVGZW5jZWQ6IG9wZW5lcjIoY29kZUZsb3cpLAogICAgICBjb2RlRmVuY2VkRmVuY2VJbmZvOiBidWZmZXIyLAogICAgICBjb2RlRmVuY2VkRmVuY2VNZXRhOiBidWZmZXIyLAogICAgICBjb2RlSW5kZW50ZWQ6IG9wZW5lcjIoY29kZUZsb3csIGJ1ZmZlcjIpLAogICAgICBjb2RlVGV4dDogb3BlbmVyMihjb2RlVGV4dDIsIGJ1ZmZlcjIpLAogICAgICBjb2RlVGV4dERhdGE6IG9uZW50ZXJkYXRhLAogICAgICBkYXRhOiBvbmVudGVyZGF0YSwKICAgICAgY29kZUZsb3dWYWx1ZTogb25lbnRlcmRhdGEsCiAgICAgIGRlZmluaXRpb246IG9wZW5lcjIoZGVmaW5pdGlvbjMpLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIGRlZmluaXRpb25MYWJlbFN0cmluZzogYnVmZmVyMiwKICAgICAgZGVmaW5pdGlvblRpdGxlU3RyaW5nOiBidWZmZXIyLAogICAgICBlbXBoYXNpczogb3BlbmVyMihlbXBoYXNpczMpLAogICAgICBoYXJkQnJlYWtFc2NhcGU6IG9wZW5lcjIoaGFyZEJyZWFrMyksCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBvcGVuZXIyKGhhcmRCcmVhazMpLAogICAgICBodG1sRmxvdzogb3BlbmVyMihodG1sMTgsIGJ1ZmZlcjIpLAogICAgICBodG1sRmxvd0RhdGE6IG9uZW50ZXJkYXRhLAogICAgICBodG1sVGV4dDogb3BlbmVyMihodG1sMTgsIGJ1ZmZlcjIpLAogICAgICBodG1sVGV4dERhdGE6IG9uZW50ZXJkYXRhLAogICAgICBpbWFnZTogb3BlbmVyMihpbWFnZTMpLAogICAgICBsYWJlbDogYnVmZmVyMiwKICAgICAgbGluazogb3BlbmVyMihsaW5rMyksCiAgICAgIGxpc3RJdGVtOiBvcGVuZXIyKGxpc3RJdGVtMyksCiAgICAgIGxpc3RJdGVtVmFsdWU6IG9uZW50ZXJsaXN0aXRlbXZhbHVlLAogICAgICBsaXN0T3JkZXJlZDogb3BlbmVyMihsaXN0NSwgb25lbnRlcmxpc3RvcmRlcmVkKSwKICAgICAgbGlzdFVub3JkZXJlZDogb3BlbmVyMihsaXN0NSksCiAgICAgIHBhcmFncmFwaDogb3BlbmVyMihwYXJhZ3JhcGgzKSwKICAgICAgcmVmZXJlbmNlOiBvbmVudGVycmVmZXJlbmNlLAogICAgICByZWZlcmVuY2VTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlRGVzdGluYXRpb25TdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHJlc291cmNlVGl0bGVTdHJpbmc6IGJ1ZmZlcjIsCiAgICAgIHNldGV4dEhlYWRpbmc6IG9wZW5lcjIoaGVhZGluZzMpLAogICAgICBzdHJvbmc6IG9wZW5lcjIoc3Ryb25nMyksCiAgICAgIHRoZW1hdGljQnJlYWs6IG9wZW5lcjIodGhlbWF0aWNCcmVhazQpCiAgICB9LAogICAgZXhpdDogewogICAgICBhdHhIZWFkaW5nOiBjbG9zZXIoKSwKICAgICAgYXR4SGVhZGluZ1NlcXVlbmNlOiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UsCiAgICAgIGF1dG9saW5rOiBjbG9zZXIoKSwKICAgICAgYXV0b2xpbmtFbWFpbDogb25leGl0YXV0b2xpbmtlbWFpbCwKICAgICAgYXV0b2xpbmtQcm90b2NvbDogb25leGl0YXV0b2xpbmtwcm90b2NvbCwKICAgICAgYmxvY2tRdW90ZTogY2xvc2VyKCksCiAgICAgIGNoYXJhY3RlckVzY2FwZVZhbHVlOiBvbmV4aXRkYXRhLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJIZXhhZGVjaW1hbDogb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlbWFya2VyLAogICAgICBjaGFyYWN0ZXJSZWZlcmVuY2VNYXJrZXJOdW1lcmljOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2VtYXJrZXIsCiAgICAgIGNoYXJhY3RlclJlZmVyZW5jZVZhbHVlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSwKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlOiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2UsCiAgICAgIGNvZGVGZW5jZWQ6IGNsb3NlcihvbmV4aXRjb2RlZmVuY2VkKSwKICAgICAgY29kZUZlbmNlZEZlbmNlOiBvbmV4aXRjb2RlZmVuY2VkZmVuY2UsCiAgICAgIGNvZGVGZW5jZWRGZW5jZUluZm86IG9uZXhpdGNvZGVmZW5jZWRmZW5jZWluZm8sCiAgICAgIGNvZGVGZW5jZWRGZW5jZU1ldGE6IG9uZXhpdGNvZGVmZW5jZWRmZW5jZW1ldGEsCiAgICAgIGNvZGVGbG93VmFsdWU6IG9uZXhpdGRhdGEsCiAgICAgIGNvZGVJbmRlbnRlZDogY2xvc2VyKG9uZXhpdGNvZGVpbmRlbnRlZCksCiAgICAgIGNvZGVUZXh0OiBjbG9zZXIob25leGl0Y29kZXRleHQpLAogICAgICBjb2RlVGV4dERhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRhdGE6IG9uZXhpdGRhdGEsCiAgICAgIGRlZmluaXRpb246IGNsb3NlcigpLAogICAgICBkZWZpbml0aW9uRGVzdGluYXRpb25TdHJpbmc6IG9uZXhpdGRlZmluaXRpb25kZXN0aW5hdGlvbnN0cmluZywKICAgICAgZGVmaW5pdGlvbkxhYmVsU3RyaW5nOiBvbmV4aXRkZWZpbml0aW9ubGFiZWxzdHJpbmcsCiAgICAgIGRlZmluaXRpb25UaXRsZVN0cmluZzogb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nLAogICAgICBlbXBoYXNpczogY2xvc2VyKCksCiAgICAgIGhhcmRCcmVha0VzY2FwZTogY2xvc2VyKG9uZXhpdGhhcmRicmVhayksCiAgICAgIGhhcmRCcmVha1RyYWlsaW5nOiBjbG9zZXIob25leGl0aGFyZGJyZWFrKSwKICAgICAgaHRtbEZsb3c6IGNsb3NlcihvbmV4aXRodG1sZmxvdyksCiAgICAgIGh0bWxGbG93RGF0YTogb25leGl0ZGF0YSwKICAgICAgaHRtbFRleHQ6IGNsb3NlcihvbmV4aXRodG1sdGV4dCksCiAgICAgIGh0bWxUZXh0RGF0YTogb25leGl0ZGF0YSwKICAgICAgaW1hZ2U6IGNsb3NlcihvbmV4aXRpbWFnZSksCiAgICAgIGxhYmVsOiBvbmV4aXRsYWJlbCwKICAgICAgbGFiZWxUZXh0OiBvbmV4aXRsYWJlbHRleHQsCiAgICAgIGxpbmVFbmRpbmc6IG9uZXhpdGxpbmVlbmRpbmcsCiAgICAgIGxpbms6IGNsb3NlcihvbmV4aXRsaW5rKSwKICAgICAgbGlzdEl0ZW06IGNsb3NlcigpLAogICAgICBsaXN0T3JkZXJlZDogY2xvc2VyKCksCiAgICAgIGxpc3RVbm9yZGVyZWQ6IGNsb3NlcigpLAogICAgICBwYXJhZ3JhcGg6IGNsb3NlcigpLAogICAgICByZWZlcmVuY2VTdHJpbmc6IG9uZXhpdHJlZmVyZW5jZXN0cmluZywKICAgICAgcmVzb3VyY2VEZXN0aW5hdGlvblN0cmluZzogb25leGl0cmVzb3VyY2VkZXN0aW5hdGlvbnN0cmluZywKICAgICAgcmVzb3VyY2VUaXRsZVN0cmluZzogb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZywKICAgICAgcmVzb3VyY2U6IG9uZXhpdHJlc291cmNlLAogICAgICBzZXRleHRIZWFkaW5nOiBjbG9zZXIob25leGl0c2V0ZXh0aGVhZGluZyksCiAgICAgIHNldGV4dEhlYWRpbmdMaW5lU2VxdWVuY2U6IG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UsCiAgICAgIHNldGV4dEhlYWRpbmdUZXh0OiBvbmV4aXRzZXRleHRoZWFkaW5ndGV4dCwKICAgICAgc3Ryb25nOiBjbG9zZXIoKSwKICAgICAgdGhlbWF0aWNCcmVhazogY2xvc2VyKCkKICAgIH0KICB9OwogIGNvbmZpZ3VyZTIoY29uZmlnMywgKG9wdGlvbnMgfHwge30pLm1kYXN0RXh0ZW5zaW9ucyB8fCBbXSk7CiAgY29uc3QgZGF0YSA9IHt9OwogIHJldHVybiBjb21waWxlMjsKICBmdW5jdGlvbiBjb21waWxlMihldmVudHMpIHsKICAgIGxldCB0cmVlID0gewogICAgICB0eXBlOiAicm9vdCIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICBzdGFjazogW3RyZWVdLAogICAgICB0b2tlblN0YWNrOiBbXSwKICAgICAgY29uZmlnOiBjb25maWczLAogICAgICBlbnRlciwKICAgICAgZXhpdDogZXhpdDMsCiAgICAgIGJ1ZmZlcjogYnVmZmVyMiwKICAgICAgcmVzdW1lLAogICAgICBkYXRhCiAgICB9OwogICAgY29uc3QgbGlzdFN0YWNrID0gW107CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBldmVudHMubGVuZ3RoKSB7CiAgICAgIGlmIChldmVudHNbaW5kZXgyXVsxXS50eXBlID09PSAibGlzdE9yZGVyZWQiIHx8IGV2ZW50c1tpbmRleDJdWzFdLnR5cGUgPT09ICJsaXN0VW5vcmRlcmVkIikgewogICAgICAgIGlmIChldmVudHNbaW5kZXgyXVswXSA9PT0gImVudGVyIikgewogICAgICAgICAgbGlzdFN0YWNrLnB1c2goaW5kZXgyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY29uc3QgdGFpbCA9IGxpc3RTdGFjay5wb3AoKTsKICAgICAgICAgIGluZGV4MiA9IHByZXBhcmVMaXN0KGV2ZW50cywgdGFpbCwgaW5kZXgyKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCsraW5kZXgyIDwgZXZlbnRzLmxlbmd0aCkgewogICAgICBjb25zdCBoYW5kbGVyMiA9IGNvbmZpZzNbZXZlbnRzW2luZGV4Ml1bMF1dOwogICAgICBpZiAob3duNS5jYWxsKGhhbmRsZXIyLCBldmVudHNbaW5kZXgyXVsxXS50eXBlKSkgewogICAgICAgIGhhbmRsZXIyW2V2ZW50c1tpbmRleDJdWzFdLnR5cGVdLmNhbGwoT2JqZWN0LmFzc2lnbih7CiAgICAgICAgICBzbGljZVNlcmlhbGl6ZTogZXZlbnRzW2luZGV4Ml1bMl0uc2xpY2VTZXJpYWxpemUKICAgICAgICB9LCBjb250ZXh0MiksIGV2ZW50c1tpbmRleDJdWzFdKTsKICAgICAgfQogICAgfQogICAgaWYgKGNvbnRleHQyLnRva2VuU3RhY2subGVuZ3RoID4gMCkgewogICAgICBjb25zdCB0YWlsID0gY29udGV4dDIudG9rZW5TdGFja1tjb250ZXh0Mi50b2tlblN0YWNrLmxlbmd0aCAtIDFdOwogICAgICBjb25zdCBoYW5kbGVyMiA9IHRhaWxbMV0gfHwgZGVmYXVsdE9uRXJyb3I7CiAgICAgIGhhbmRsZXIyLmNhbGwoY29udGV4dDIsIHZvaWQgMCwgdGFpbFswXSk7CiAgICB9CiAgICB0cmVlLnBvc2l0aW9uID0gewogICAgICBzdGFydDogcG9pbnQyKGV2ZW50cy5sZW5ndGggPiAwID8gZXZlbnRzWzBdWzFdLnN0YXJ0IDogewogICAgICAgIGxpbmU6IDEsCiAgICAgICAgY29sdW1uOiAxLAogICAgICAgIG9mZnNldDogMAogICAgICB9KSwKICAgICAgZW5kOiBwb2ludDIoZXZlbnRzLmxlbmd0aCA+IDAgPyBldmVudHNbZXZlbnRzLmxlbmd0aCAtIDJdWzFdLmVuZCA6IHsKICAgICAgICBsaW5lOiAxLAogICAgICAgIGNvbHVtbjogMSwKICAgICAgICBvZmZzZXQ6IDAKICAgICAgfSkKICAgIH07CiAgICBpbmRleDIgPSAtMTsKICAgIHdoaWxlICgrK2luZGV4MiA8IGNvbmZpZzMudHJhbnNmb3Jtcy5sZW5ndGgpIHsKICAgICAgdHJlZSA9IGNvbmZpZzMudHJhbnNmb3Jtc1tpbmRleDJdKHRyZWUpIHx8IHRyZWU7CiAgICB9CiAgICByZXR1cm4gdHJlZTsKICB9CiAgZnVuY3Rpb24gcHJlcGFyZUxpc3QoZXZlbnRzLCBzdGFydCwgbGVuZ3RoKSB7CiAgICBsZXQgaW5kZXgyID0gc3RhcnQgLSAxOwogICAgbGV0IGNvbnRhaW5lckJhbGFuY2UgPSAtMTsKICAgIGxldCBsaXN0U3ByZWFkID0gZmFsc2U7CiAgICBsZXQgbGlzdEl0ZW00OwogICAgbGV0IGxpbmVJbmRleDsKICAgIGxldCBmaXJzdEJsYW5rTGluZUluZGV4OwogICAgbGV0IGF0TWFya2VyOwogICAgd2hpbGUgKCsraW5kZXgyIDw9IGxlbmd0aCkgewogICAgICBjb25zdCBldmVudCA9IGV2ZW50c1tpbmRleDJdOwogICAgICBzd2l0Y2ggKGV2ZW50WzFdLnR5cGUpIHsKICAgICAgICBjYXNlICJsaXN0VW5vcmRlcmVkIjoKICAgICAgICBjYXNlICJsaXN0T3JkZXJlZCI6CiAgICAgICAgY2FzZSAiYmxvY2tRdW90ZSI6IHsKICAgICAgICAgIGlmIChldmVudFswXSA9PT0gImVudGVyIikgewogICAgICAgICAgICBjb250YWluZXJCYWxhbmNlKys7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250YWluZXJCYWxhbmNlLS07CiAgICAgICAgICB9CiAgICAgICAgICBhdE1hcmtlciA9IHZvaWQgMDsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBjYXNlICJsaW5lRW5kaW5nQmxhbmsiOiB7CiAgICAgICAgICBpZiAoZXZlbnRbMF0gPT09ICJlbnRlciIpIHsKICAgICAgICAgICAgaWYgKGxpc3RJdGVtNCAmJiAhYXRNYXJrZXIgJiYgIWNvbnRhaW5lckJhbGFuY2UgJiYgIWZpcnN0QmxhbmtMaW5lSW5kZXgpIHsKICAgICAgICAgICAgICBmaXJzdEJsYW5rTGluZUluZGV4ID0gaW5kZXgyOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgImxpbmVQcmVmaXgiOgogICAgICAgIGNhc2UgImxpc3RJdGVtVmFsdWUiOgogICAgICAgIGNhc2UgImxpc3RJdGVtTWFya2VyIjoKICAgICAgICBjYXNlICJsaXN0SXRlbVByZWZpeCI6CiAgICAgICAgY2FzZSAibGlzdEl0ZW1QcmVmaXhXaGl0ZXNwYWNlIjogewogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGRlZmF1bHQ6IHsKICAgICAgICAgIGF0TWFya2VyID0gdm9pZCAwOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIWNvbnRhaW5lckJhbGFuY2UgJiYgZXZlbnRbMF0gPT09ICJlbnRlciIgJiYgZXZlbnRbMV0udHlwZSA9PT0gImxpc3RJdGVtUHJlZml4IiB8fCBjb250YWluZXJCYWxhbmNlID09PSAtMSAmJiBldmVudFswXSA9PT0gImV4aXQiICYmIChldmVudFsxXS50eXBlID09PSAibGlzdFVub3JkZXJlZCIgfHwgZXZlbnRbMV0udHlwZSA9PT0gImxpc3RPcmRlcmVkIikpIHsKICAgICAgICBpZiAobGlzdEl0ZW00KSB7CiAgICAgICAgICBsZXQgdGFpbEluZGV4ID0gaW5kZXgyOwogICAgICAgICAgbGluZUluZGV4ID0gdm9pZCAwOwogICAgICAgICAgd2hpbGUgKHRhaWxJbmRleC0tKSB7CiAgICAgICAgICAgIGNvbnN0IHRhaWxFdmVudCA9IGV2ZW50c1t0YWlsSW5kZXhdOwogICAgICAgICAgICBpZiAodGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lRW5kaW5nIiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImxpbmVFbmRpbmdCbGFuayIpIHsKICAgICAgICAgICAgICBpZiAodGFpbEV2ZW50WzBdID09PSAiZXhpdCIpIGNvbnRpbnVlOwogICAgICAgICAgICAgIGlmIChsaW5lSW5kZXgpIHsKICAgICAgICAgICAgICAgIGV2ZW50c1tsaW5lSW5kZXhdWzFdLnR5cGUgPSAibGluZUVuZGluZ0JsYW5rIjsKICAgICAgICAgICAgICAgIGxpc3RTcHJlYWQgPSB0cnVlOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB0YWlsRXZlbnRbMV0udHlwZSA9ICJsaW5lRW5kaW5nIjsKICAgICAgICAgICAgICBsaW5lSW5kZXggPSB0YWlsSW5kZXg7CiAgICAgICAgICAgIH0gZWxzZSBpZiAodGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaW5lUHJlZml4IiB8fCB0YWlsRXZlbnRbMV0udHlwZSA9PT0gImJsb2NrUXVvdGVQcmVmaXgiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAiYmxvY2tRdW90ZVByZWZpeFdoaXRlc3BhY2UiIHx8IHRhaWxFdmVudFsxXS50eXBlID09PSAiYmxvY2tRdW90ZU1hcmtlciIgfHwgdGFpbEV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbUluZGVudCIpIHsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKGZpcnN0QmxhbmtMaW5lSW5kZXggJiYgKCFsaW5lSW5kZXggfHwgZmlyc3RCbGFua0xpbmVJbmRleCA8IGxpbmVJbmRleCkpIHsKICAgICAgICAgICAgbGlzdEl0ZW00Ll9zcHJlYWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgICAgbGlzdEl0ZW00LmVuZCA9IE9iamVjdC5hc3NpZ24oe30sIGxpbmVJbmRleCA/IGV2ZW50c1tsaW5lSW5kZXhdWzFdLnN0YXJ0IDogZXZlbnRbMV0uZW5kKTsKICAgICAgICAgIGV2ZW50cy5zcGxpY2UobGluZUluZGV4IHx8IGluZGV4MiwgMCwgWyJleGl0IiwgbGlzdEl0ZW00LCBldmVudFsyXV0pOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICB9CiAgICAgICAgaWYgKGV2ZW50WzFdLnR5cGUgPT09ICJsaXN0SXRlbVByZWZpeCIpIHsKICAgICAgICAgIGNvbnN0IGl0ZW0gPSB7CiAgICAgICAgICAgIHR5cGU6ICJsaXN0SXRlbSIsCiAgICAgICAgICAgIF9zcHJlYWQ6IGZhbHNlLAogICAgICAgICAgICBzdGFydDogT2JqZWN0LmFzc2lnbih7fSwgZXZlbnRbMV0uc3RhcnQpLAogICAgICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZeKAmWxsIGFkZCBgZW5kYCBpbiBhIHNlY29uZC4KICAgICAgICAgICAgZW5kOiB2b2lkIDAKICAgICAgICAgIH07CiAgICAgICAgICBsaXN0SXRlbTQgPSBpdGVtOwogICAgICAgICAgZXZlbnRzLnNwbGljZShpbmRleDIsIDAsIFsiZW50ZXIiLCBpdGVtLCBldmVudFsyXV0pOwogICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICBsZW5ndGgrKzsKICAgICAgICAgIGZpcnN0QmxhbmtMaW5lSW5kZXggPSB2b2lkIDA7CiAgICAgICAgICBhdE1hcmtlciA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBldmVudHNbc3RhcnRdWzFdLl9zcHJlYWQgPSBsaXN0U3ByZWFkOwogICAgcmV0dXJuIGxlbmd0aDsKICB9CiAgZnVuY3Rpb24gb3BlbmVyMihjcmVhdGU3LCBhbmQpIHsKICAgIHJldHVybiBvcGVuOwogICAgZnVuY3Rpb24gb3Blbih0b2tlbikgewogICAgICBlbnRlci5jYWxsKHRoaXMsIGNyZWF0ZTcodG9rZW4pLCB0b2tlbik7CiAgICAgIGlmIChhbmQpIGFuZC5jYWxsKHRoaXMsIHRva2VuKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gYnVmZmVyMigpIHsKICAgIHRoaXMuc3RhY2sucHVzaCh7CiAgICAgIHR5cGU6ICJmcmFnbWVudCIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfSk7CiAgfQogIGZ1bmN0aW9uIGVudGVyKG5vZGUyLCB0b2tlbiwgZXJyb3JIYW5kbGVyKSB7CiAgICBjb25zdCBwYXJlbnQgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQuY2hpbGRyZW47CiAgICBzaWJsaW5nczIucHVzaChub2RlMik7CiAgICB0aGlzLnN0YWNrLnB1c2gobm9kZTIpOwogICAgdGhpcy50b2tlblN0YWNrLnB1c2goW3Rva2VuLCBlcnJvckhhbmRsZXIgfHwgdm9pZCAwXSk7CiAgICBub2RlMi5wb3NpdGlvbiA9IHsKICAgICAgc3RhcnQ6IHBvaW50Mih0b2tlbi5zdGFydCksCiAgICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IGBlbmRgIHdpbGwgYmUgcGF0Y2hlZCBsYXRlci4KICAgICAgZW5kOiB2b2lkIDAKICAgIH07CiAgfQogIGZ1bmN0aW9uIGNsb3NlcihhbmQpIHsKICAgIHJldHVybiBjbG9zZTc7CiAgICBmdW5jdGlvbiBjbG9zZTcodG9rZW4pIHsKICAgICAgaWYgKGFuZCkgYW5kLmNhbGwodGhpcywgdG9rZW4pOwogICAgICBleGl0My5jYWxsKHRoaXMsIHRva2VuKTsKICAgIH0KICB9CiAgZnVuY3Rpb24gZXhpdDModG9rZW4sIG9uRXhpdEVycm9yKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICBjb25zdCBvcGVuID0gdGhpcy50b2tlblN0YWNrLnBvcCgpOwogICAgaWYgKCFvcGVuKSB7CiAgICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiICsgdG9rZW4udHlwZSArICJgICgiICsgc3RyaW5naWZ5UG9zaXRpb24oewogICAgICAgIHN0YXJ0OiB0b2tlbi5zdGFydCwKICAgICAgICBlbmQ6IHRva2VuLmVuZAogICAgICB9KSArICIpOiBpdFx1MjAxOXMgbm90IG9wZW4iKTsKICAgIH0gZWxzZSBpZiAob3BlblswXS50eXBlICE9PSB0b2tlbi50eXBlKSB7CiAgICAgIGlmIChvbkV4aXRFcnJvcikgewogICAgICAgIG9uRXhpdEVycm9yLmNhbGwodGhpcywgdG9rZW4sIG9wZW5bMF0pOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gb3BlblsxXSB8fCBkZWZhdWx0T25FcnJvcjsKICAgICAgICBoYW5kbGVyMi5jYWxsKHRoaXMsIHRva2VuLCBvcGVuWzBdKTsKICAgICAgfQogICAgfQogICAgbm9kZTIucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIHJlc3VtZSgpIHsKICAgIHJldHVybiB0b1N0cmluZyh0aGlzLnN0YWNrLnBvcCgpKTsKICB9CiAgZnVuY3Rpb24gb25lbnRlcmxpc3RvcmRlcmVkKCkgewogICAgdGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJsaXN0aXRlbXZhbHVlKHRva2VuKSB7CiAgICBpZiAodGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSkgewogICAgICBjb25zdCBhbmNlc3RvciA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAyXTsKICAgICAgYW5jZXN0b3Iuc3RhcnQgPSBOdW1iZXIucGFyc2VJbnQodGhpcy5zbGljZVNlcmlhbGl6ZSh0b2tlbiksIDEwKTsKICAgICAgdGhpcy5kYXRhLmV4cGVjdGluZ0ZpcnN0TGlzdEl0ZW1WYWx1ZSA9IHZvaWQgMDsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWZlbmNlZGZlbmNlaW5mbygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubGFuZyA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkZmVuY2VtZXRhKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi5tZXRhID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNvZGVmZW5jZWRmZW5jZSgpIHsKICAgIGlmICh0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUpIHJldHVybjsKICAgIHRoaXMuYnVmZmVyKCk7CiAgICB0aGlzLmRhdGEuZmxvd0NvZGVJbnNpZGUgPSB0cnVlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjb2RlZmVuY2VkKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyLnJlcGxhY2UoL14oXHI/XG58XHIpfChccj9cbnxccikkL2csICIiKTsKICAgIHRoaXMuZGF0YS5mbG93Q29kZUluc2lkZSA9IHZvaWQgMDsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZWluZGVudGVkKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyLnJlcGxhY2UoLyhccj9cbnxccikkL2csICIiKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbmxhYmVsc3RyaW5nKHRva2VuKSB7CiAgICBjb25zdCBsYWJlbCA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLmxhYmVsID0gbGFiZWw7CiAgICBub2RlMi5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcih0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKSkudG9Mb3dlckNhc2UoKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGVmaW5pdGlvbnRpdGxlc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi50aXRsZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRkZWZpbml0aW9uZGVzdGluYXRpb25zdHJpbmcoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdHhoZWFkaW5nc2VxdWVuY2UodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgaWYgKCFub2RlMi5kZXB0aCkgewogICAgICBjb25zdCBkZXB0aCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pLmxlbmd0aDsKICAgICAgbm9kZTIuZGVwdGggPSBkZXB0aDsKICAgIH0KICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZ3RleHQoKSB7CiAgICB0aGlzLmRhdGEuc2V0ZXh0SGVhZGluZ1NsdXJwTGluZUVuZGluZyA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdHNldGV4dGhlYWRpbmdsaW5lc2VxdWVuY2UodG9rZW4pIHsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIuZGVwdGggPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKS5jb2RlUG9pbnRBdCgwKSA9PT0gNjEgPyAxIDogMjsKICB9CiAgZnVuY3Rpb24gb25leGl0c2V0ZXh0aGVhZGluZygpIHsKICAgIHRoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmVudGVyZGF0YSh0b2tlbikgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBjb25zdCBzaWJsaW5nczIgPSBub2RlMi5jaGlsZHJlbjsKICAgIGxldCB0YWlsID0gc2libGluZ3MyW3NpYmxpbmdzMi5sZW5ndGggLSAxXTsKICAgIGlmICghdGFpbCB8fCB0YWlsLnR5cGUgIT09ICJ0ZXh0IikgewogICAgICB0YWlsID0gdGV4dDkoKTsKICAgICAgdGFpbC5wb3NpdGlvbiA9IHsKICAgICAgICBzdGFydDogcG9pbnQyKHRva2VuLnN0YXJ0KSwKICAgICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiB3ZeKAmWxsIGFkZCBgZW5kYCBsYXRlci4KICAgICAgICBlbmQ6IHZvaWQgMAogICAgICB9OwogICAgICBzaWJsaW5nczIucHVzaCh0YWlsKTsKICAgIH0KICAgIHRoaXMuc3RhY2sucHVzaCh0YWlsKTsKICB9CiAgZnVuY3Rpb24gb25leGl0ZGF0YSh0b2tlbikgewogICAgY29uc3QgdGFpbCA9IHRoaXMuc3RhY2sucG9wKCk7CiAgICB0YWlsLnZhbHVlICs9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludDIodG9rZW4uZW5kKTsKICB9CiAgZnVuY3Rpb24gb25leGl0bGluZWVuZGluZyh0b2tlbikgewogICAgY29uc3QgY29udGV4dDIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmF0SGFyZEJyZWFrKSB7CiAgICAgIGNvbnN0IHRhaWwgPSBjb250ZXh0Mi5jaGlsZHJlbltjb250ZXh0Mi5jaGlsZHJlbi5sZW5ndGggLSAxXTsKICAgICAgdGFpbC5wb3NpdGlvbi5lbmQgPSBwb2ludDIodG9rZW4uZW5kKTsKICAgICAgdGhpcy5kYXRhLmF0SGFyZEJyZWFrID0gdm9pZCAwOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIXRoaXMuZGF0YS5zZXRleHRIZWFkaW5nU2x1cnBMaW5lRW5kaW5nICYmIGNvbmZpZzMuY2FuQ29udGFpbkVvbHMuaW5jbHVkZXMoY29udGV4dDIudHlwZSkpIHsKICAgICAgb25lbnRlcmRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICB9CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGhhcmRicmVhaygpIHsKICAgIHRoaXMuZGF0YS5hdEhhcmRCcmVhayA9IHRydWU7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGh0bWxmbG93KCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi52YWx1ZSA9IGRhdGEyOwogIH0KICBmdW5jdGlvbiBvbmV4aXRodG1sdGV4dCgpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudmFsdWUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y29kZXRleHQoKSB7CiAgICBjb25zdCBkYXRhMiA9IHRoaXMucmVzdW1lKCk7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnZhbHVlID0gZGF0YTI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGxpbmsoKSB7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIGlmICh0aGlzLmRhdGEuaW5SZWZlcmVuY2UpIHsKICAgICAgY29uc3QgcmVmZXJlbmNlVHlwZSA9IHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlIHx8ICJzaG9ydGN1dCI7CiAgICAgIG5vZGUyLnR5cGUgKz0gIlJlZmVyZW5jZSI7CiAgICAgIG5vZGUyLnJlZmVyZW5jZVR5cGUgPSByZWZlcmVuY2VUeXBlOwogICAgICBkZWxldGUgbm9kZTIudXJsOwogICAgICBkZWxldGUgbm9kZTIudGl0bGU7CiAgICB9IGVsc2UgewogICAgICBkZWxldGUgbm9kZTIuaWRlbnRpZmllcjsKICAgICAgZGVsZXRlIG5vZGUyLmxhYmVsOwogICAgfQogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGltYWdlKCkgewogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBpZiAodGhpcy5kYXRhLmluUmVmZXJlbmNlKSB7CiAgICAgIGNvbnN0IHJlZmVyZW5jZVR5cGUgPSB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSB8fCAic2hvcnRjdXQiOwogICAgICBub2RlMi50eXBlICs9ICJSZWZlcmVuY2UiOwogICAgICBub2RlMi5yZWZlcmVuY2VUeXBlID0gcmVmZXJlbmNlVHlwZTsKICAgICAgZGVsZXRlIG5vZGUyLnVybDsKICAgICAgZGVsZXRlIG5vZGUyLnRpdGxlOwogICAgfSBlbHNlIHsKICAgICAgZGVsZXRlIG5vZGUyLmlkZW50aWZpZXI7CiAgICAgIGRlbGV0ZSBub2RlMi5sYWJlbDsKICAgIH0KICAgIHRoaXMuZGF0YS5yZWZlcmVuY2VUeXBlID0gdm9pZCAwOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbHRleHQodG9rZW4pIHsKICAgIGNvbnN0IHN0cmluZzMgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IGFuY2VzdG9yID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDJdOwogICAgYW5jZXN0b3IubGFiZWwgPSBkZWNvZGVTdHJpbmcoc3RyaW5nMyk7CiAgICBhbmNlc3Rvci5pZGVudGlmaWVyID0gbm9ybWFsaXplSWRlbnRpZmllcihzdHJpbmczKS50b0xvd2VyQ2FzZSgpOwogIH0KICBmdW5jdGlvbiBvbmV4aXRsYWJlbCgpIHsKICAgIGNvbnN0IGZyYWdtZW50ID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgY29uc3QgdmFsdWUyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgdGhpcy5kYXRhLmluUmVmZXJlbmNlID0gdHJ1ZTsKICAgIGlmIChub2RlMi50eXBlID09PSAibGluayIpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gZnJhZ21lbnQuY2hpbGRyZW47CiAgICAgIG5vZGUyLmNoaWxkcmVuID0gY2hpbGRyZW4yOwogICAgfSBlbHNlIHsKICAgICAgbm9kZTIuYWx0ID0gdmFsdWUyOwogICAgfQogIH0KICBmdW5jdGlvbiBvbmV4aXRyZXNvdXJjZWRlc3RpbmF0aW9uc3RyaW5nKCkgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnJlc3VtZSgpOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2V0aXRsZXN0cmluZygpIHsKICAgIGNvbnN0IGRhdGEyID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIudGl0bGUgPSBkYXRhMjsKICB9CiAgZnVuY3Rpb24gb25leGl0cmVzb3VyY2UoKSB7CiAgICB0aGlzLmRhdGEuaW5SZWZlcmVuY2UgPSB2b2lkIDA7CiAgfQogIGZ1bmN0aW9uIG9uZW50ZXJyZWZlcmVuY2UoKSB7CiAgICB0aGlzLmRhdGEucmVmZXJlbmNlVHlwZSA9ICJjb2xsYXBzZWQiOwogIH0KICBmdW5jdGlvbiBvbmV4aXRyZWZlcmVuY2VzdHJpbmcodG9rZW4pIHsKICAgIGNvbnN0IGxhYmVsID0gdGhpcy5yZXN1bWUoKTsKICAgIGNvbnN0IG5vZGUyID0gdGhpcy5zdGFja1t0aGlzLnN0YWNrLmxlbmd0aCAtIDFdOwogICAgbm9kZTIubGFiZWwgPSBsYWJlbDsKICAgIG5vZGUyLmlkZW50aWZpZXIgPSBub3JtYWxpemVJZGVudGlmaWVyKHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pKS50b0xvd2VyQ2FzZSgpOwogICAgdGhpcy5kYXRhLnJlZmVyZW5jZVR5cGUgPSAiZnVsbCI7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGNoYXJhY3RlcnJlZmVyZW5jZW1hcmtlcih0b2tlbikgewogICAgdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUgPSB0b2tlbi50eXBlOwogIH0KICBmdW5jdGlvbiBvbmV4aXRjaGFyYWN0ZXJyZWZlcmVuY2V2YWx1ZSh0b2tlbikgewogICAgY29uc3QgZGF0YTIgPSB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICAgIGNvbnN0IHR5cGU1ID0gdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGU7CiAgICBsZXQgdmFsdWUyOwogICAgaWYgKHR5cGU1KSB7CiAgICAgIHZhbHVlMiA9IGRlY29kZU51bWVyaWNDaGFyYWN0ZXJSZWZlcmVuY2UoZGF0YTIsIHR5cGU1ID09PSAiY2hhcmFjdGVyUmVmZXJlbmNlTWFya2VyTnVtZXJpYyIgPyAxMCA6IDE2KTsKICAgICAgdGhpcy5kYXRhLmNoYXJhY3RlclJlZmVyZW5jZVR5cGUgPSB2b2lkIDA7CiAgICB9IGVsc2UgewogICAgICBjb25zdCByZXN1bHQgPSBkZWNvZGVOYW1lZENoYXJhY3RlclJlZmVyZW5jZShkYXRhMik7CiAgICAgIHZhbHVlMiA9IHJlc3VsdDsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICB0YWlsLnZhbHVlICs9IHZhbHVlMjsKICB9CiAgZnVuY3Rpb24gb25leGl0Y2hhcmFjdGVycmVmZXJlbmNlKHRva2VuKSB7CiAgICBjb25zdCB0YWlsID0gdGhpcy5zdGFjay5wb3AoKTsKICAgIHRhaWwucG9zaXRpb24uZW5kID0gcG9pbnQyKHRva2VuLmVuZCk7CiAgfQogIGZ1bmN0aW9uIG9uZXhpdGF1dG9saW5rcHJvdG9jb2wodG9rZW4pIHsKICAgIG9uZXhpdGRhdGEuY2FsbCh0aGlzLCB0b2tlbik7CiAgICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICAgIG5vZGUyLnVybCA9IHRoaXMuc2xpY2VTZXJpYWxpemUodG9rZW4pOwogIH0KICBmdW5jdGlvbiBvbmV4aXRhdXRvbGlua2VtYWlsKHRva2VuKSB7CiAgICBvbmV4aXRkYXRhLmNhbGwodGhpcywgdG9rZW4pOwogICAgY29uc3Qgbm9kZTIgPSB0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoIC0gMV07CiAgICBub2RlMi51cmwgPSAibWFpbHRvOiIgKyB0aGlzLnNsaWNlU2VyaWFsaXplKHRva2VuKTsKICB9CiAgZnVuY3Rpb24gYmxvY2tRdW90ZTIoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiYmxvY2txdW90ZSIsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gY29kZUZsb3coKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiY29kZSIsCiAgICAgIGxhbmc6IG51bGwsCiAgICAgIG1ldGE6IG51bGwsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gY29kZVRleHQyKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImlubGluZUNvZGUiLAogICAgICB2YWx1ZTogIiIKICAgIH07CiAgfQogIGZ1bmN0aW9uIGRlZmluaXRpb24zKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImRlZmluaXRpb24iLAogICAgICBpZGVudGlmaWVyOiAiIiwKICAgICAgbGFiZWw6IG51bGwsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiBlbXBoYXNpczMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiZW1waGFzaXMiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGhlYWRpbmczKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImhlYWRpbmciLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yIGBkZXB0aGAgd2lsbCBiZSBzZXQgbGF0ZXIuCiAgICAgIGRlcHRoOiAwLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGhhcmRCcmVhazMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiYnJlYWsiCiAgICB9OwogIH0KICBmdW5jdGlvbiBodG1sMTgoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAiaHRtbCIsCiAgICAgIHZhbHVlOiAiIgogICAgfTsKICB9CiAgZnVuY3Rpb24gaW1hZ2UzKCkgewogICAgcmV0dXJuIHsKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgdGl0bGU6IG51bGwsCiAgICAgIHVybDogIiIsCiAgICAgIGFsdDogbnVsbAogICAgfTsKICB9CiAgZnVuY3Rpb24gbGluazMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGluayIsCiAgICAgIHRpdGxlOiBudWxsLAogICAgICB1cmw6ICIiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIGxpc3Q1KHRva2VuKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIG9yZGVyZWQ6IHRva2VuLnR5cGUgPT09ICJsaXN0T3JkZXJlZCIsCiAgICAgIHN0YXJ0OiBudWxsLAogICAgICBzcHJlYWQ6IHRva2VuLl9zcHJlYWQsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gbGlzdEl0ZW0zKHRva2VuKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAibGlzdEl0ZW0iLAogICAgICBzcHJlYWQ6IHRva2VuLl9zcHJlYWQsCiAgICAgIGNoZWNrZWQ6IG51bGwsCiAgICAgIGNoaWxkcmVuOiBbXQogICAgfTsKICB9CiAgZnVuY3Rpb24gcGFyYWdyYXBoMygpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjaGlsZHJlbjogW10KICAgIH07CiAgfQogIGZ1bmN0aW9uIHN0cm9uZzMoKSB7CiAgICByZXR1cm4gewogICAgICB0eXBlOiAic3Ryb25nIiwKICAgICAgY2hpbGRyZW46IFtdCiAgICB9OwogIH0KICBmdW5jdGlvbiB0ZXh0OSgpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJ0ZXh0IiwKICAgICAgdmFsdWU6ICIiCiAgICB9OwogIH0KICBmdW5jdGlvbiB0aGVtYXRpY0JyZWFrNCgpIHsKICAgIHJldHVybiB7CiAgICAgIHR5cGU6ICJ0aGVtYXRpY0JyZWFrIgogICAgfTsKICB9Cn0KZnVuY3Rpb24gcG9pbnQyKGQ2KSB7CiAgcmV0dXJuIHsKICAgIGxpbmU6IGQ2LmxpbmUsCiAgICBjb2x1bW46IGQ2LmNvbHVtbiwKICAgIG9mZnNldDogZDYub2Zmc2V0CiAgfTsKfQpmdW5jdGlvbiBjb25maWd1cmUyKGNvbWJpbmVkLCBleHRlbnNpb25zKSB7CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IGV4dGVuc2lvbnMubGVuZ3RoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSBleHRlbnNpb25zW2luZGV4Ml07CiAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgIGNvbmZpZ3VyZTIoY29tYmluZWQsIHZhbHVlMik7CiAgICB9IGVsc2UgewogICAgICBleHRlbnNpb24oY29tYmluZWQsIHZhbHVlMik7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGV4dGVuc2lvbihjb21iaW5lZCwgZXh0ZW5zaW9uMikgewogIGxldCBrZXkyOwogIGZvciAoa2V5MiBpbiBleHRlbnNpb24yKSB7CiAgICBpZiAob3duNS5jYWxsKGV4dGVuc2lvbjIsIGtleTIpKSB7CiAgICAgIHN3aXRjaCAoa2V5MikgewogICAgICAgIGNhc2UgImNhbkNvbnRhaW5Fb2xzIjogewogICAgICAgICAgY29uc3QgcmlnaHQgPSBleHRlbnNpb24yW2tleTJdOwogICAgICAgICAgaWYgKHJpZ2h0KSB7CiAgICAgICAgICAgIGNvbWJpbmVkW2tleTJdLnB1c2goLi4ucmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGNhc2UgInRyYW5zZm9ybXMiOiB7CiAgICAgICAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgICBpZiAocmlnaHQpIHsKICAgICAgICAgICAgY29tYmluZWRba2V5Ml0ucHVzaCguLi5yaWdodCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiZW50ZXIiOgogICAgICAgIGNhc2UgImV4aXQiOiB7CiAgICAgICAgICBjb25zdCByaWdodCA9IGV4dGVuc2lvbjJba2V5Ml07CiAgICAgICAgICBpZiAocmlnaHQpIHsKICAgICAgICAgICAgT2JqZWN0LmFzc2lnbihjb21iaW5lZFtrZXkyXSwgcmlnaHQpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGRlZmF1bHRPbkVycm9yKGxlZnQsIHJpZ2h0KSB7CiAgaWYgKGxlZnQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiQ2Fubm90IGNsb3NlIGAiICsgbGVmdC50eXBlICsgImAgKCIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiBsZWZ0LnN0YXJ0LAogICAgICBlbmQ6IGxlZnQuZW5kCiAgICB9KSArICIpOiBhIGRpZmZlcmVudCB0b2tlbiAoYCIgKyByaWdodC50eXBlICsgImAsICIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiByaWdodC5zdGFydCwKICAgICAgZW5kOiByaWdodC5lbmQKICAgIH0pICsgIikgaXMgb3BlbiIpOwogIH0gZWxzZSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjbG9zZSBkb2N1bWVudCwgYSB0b2tlbiAoYCIgKyByaWdodC50eXBlICsgImAsICIgKyBzdHJpbmdpZnlQb3NpdGlvbih7CiAgICAgIHN0YXJ0OiByaWdodC5zdGFydCwKICAgICAgZW5kOiByaWdodC5lbmQKICAgIH0pICsgIikgaXMgc3RpbGwgb3BlbiIpOwogIH0KfQp2YXIgb3duNTsKdmFyIGluaXRfbGliMjEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb20tbWFya2Rvd25AMi4wLjIvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbS1tYXJrZG93bi9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9tZGFzdF91dGlsX3RvX3N0cmluZygpOwogICAgaW5pdF9taWNyb21hcmsoKTsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfZGVjb2RlX251bWVyaWNfY2hhcmFjdGVyX3JlZmVyZW5jZSgpOwogICAgaW5pdF9taWNyb21hcmtfdXRpbF9kZWNvZGVfc3RyaW5nKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX25vcm1hbGl6ZV9pZGVudGlmaWVyKCk7CiAgICBpbml0X2luZGV4X2RvbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3N0cmluZ2lmeV9wb3NpdGlvbigpOwogICAgb3duNSA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9mcm9tX21hcmtkb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9tLW1hcmtkb3duQDIuMC4yL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb20tbWFya2Rvd24vaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2xpYi9pbmRleC5qcwpmdW5jdGlvbiByZW1hcmtQYXJzZShvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIHNlbGYyLnBhcnNlciA9IHBhcnNlcjsKICBmdW5jdGlvbiBwYXJzZXIoZG9jKSB7CiAgICByZXR1cm4gZnJvbU1hcmtkb3duKGRvYywgewogICAgICAuLi5zZWxmMi5kYXRhKCJzZXR0aW5ncyIpLAogICAgICAuLi5vcHRpb25zLAogICAgICAvLyBOb3RlOiB0aGVzZSBvcHRpb25zIGFyZSBub3QgaW4gdGhlIHJlYWRtZS4KICAgICAgLy8gVGhlIGdvYWwgaXMgZm9yIHRoZW0gdG8gYmUgc2V0IGJ5IHBsdWdpbnMgb24gYGRhdGFgIGluc3RlYWQgb2YgYmVpbmcKICAgICAgLy8gcGFzc2VkIGJ5IHVzZXJzLgogICAgICBleHRlbnNpb25zOiBzZWxmMi5kYXRhKCJtaWNyb21hcmtFeHRlbnNpb25zIikgfHwgW10sCiAgICAgIG1kYXN0RXh0ZW5zaW9uczogc2VsZjIuZGF0YSgiZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyIpIHx8IFtdCiAgICB9KTsKICB9Cn0KdmFyIGluaXRfbGliMjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstcGFyc2VAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfbWRhc3RfdXRpbF9mcm9tX21hcmtkb3duKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstcGFyc2VAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstcGFyc2UvaW5kZXguanMKdmFyIGluaXRfcmVtYXJrX3BhcnNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLXBhcnNlQDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXBhcnNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1hdEAwLjIuMi9ub2RlX21vZHVsZXMvZm9ybWF0L2Zvcm1hdC5qcwp2YXIgcmVxdWlyZV9mb3JtYXQgPSBfX2NvbW1vbkpTKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2Zvcm1hdEAwLjIuMi9ub2RlX21vZHVsZXMvZm9ybWF0L2Zvcm1hdC5qcyIoZXhwb3J0cywgbW9kdWxlKSB7CiAgICA7CiAgICAoZnVuY3Rpb24oKSB7CiAgICAgIHZhciBuYW1lc3BhY2UyOwogICAgICBpZiAodHlwZW9mIG1vZHVsZSAhPT0gInVuZGVmaW5lZCIpIHsKICAgICAgICBuYW1lc3BhY2UyID0gbW9kdWxlLmV4cG9ydHMgPSBmb3JtYXQyOwogICAgICB9IGVsc2UgewogICAgICAgIG5hbWVzcGFjZTIgPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gdGhpcyB8fCAoMSwgZXZhbCkoInRoaXMiKTsKICAgICAgICB9KSgpOwogICAgICB9CiAgICAgIG5hbWVzcGFjZTIuZm9ybWF0ID0gZm9ybWF0MjsKICAgICAgbmFtZXNwYWNlMi52c3ByaW50ZiA9IHZzcHJpbnRmOwogICAgICBpZiAodHlwZW9mIGNvbnNvbGUgIT09ICJ1bmRlZmluZWQiICYmIHR5cGVvZiBjb25zb2xlLmxvZyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG5hbWVzcGFjZTIucHJpbnRmID0gcHJpbnRmOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHByaW50ZigpIHsKICAgICAgICBjb25zb2xlLmxvZyhmb3JtYXQyLmFwcGx5KG51bGwsIGFyZ3VtZW50cykpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIHZzcHJpbnRmKGZtdCwgcmVwbGFjZW1lbnRzKSB7CiAgICAgICAgcmV0dXJuIGZvcm1hdDIuYXBwbHkobnVsbCwgW2ZtdF0uY29uY2F0KHJlcGxhY2VtZW50cykpOwogICAgICB9CiAgICAgIGZ1bmN0aW9uIGZvcm1hdDIoZm10KSB7CiAgICAgICAgdmFyIGFyZ0luZGV4ID0gMSwgYXJncyA9IFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzKSwgaTExID0gMCwgbjEzID0gZm10Lmxlbmd0aCwgcmVzdWx0ID0gIiIsIGMxMSwgZXNjYXBlZCA9IGZhbHNlLCBhcmcsIHRtcCwgbGVhZGluZ1plcm8gPSBmYWxzZSwgcHJlY2lzaW9uLCBuZXh0QXJnID0gZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gYXJnc1thcmdJbmRleCsrXTsKICAgICAgICB9LCBzbHVycE51bWJlciA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgdmFyIGRpZ2l0cyA9ICIiOwogICAgICAgICAgd2hpbGUgKC9cZC8udGVzdChmbXRbaTExXSkpIHsKICAgICAgICAgICAgZGlnaXRzICs9IGZtdFtpMTErK107CiAgICAgICAgICAgIGMxMSA9IGZtdFtpMTFdOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIGRpZ2l0cy5sZW5ndGggPiAwID8gcGFyc2VJbnQoZGlnaXRzKSA6IG51bGw7CiAgICAgICAgfTsKICAgICAgICBmb3IgKDsgaTExIDwgbjEzOyArK2kxMSkgewogICAgICAgICAgYzExID0gZm10W2kxMV07CiAgICAgICAgICBpZiAoZXNjYXBlZCkgewogICAgICAgICAgICBlc2NhcGVkID0gZmFsc2U7CiAgICAgICAgICAgIGlmIChjMTEgPT0gIi4iKSB7CiAgICAgICAgICAgICAgbGVhZGluZ1plcm8gPSBmYWxzZTsKICAgICAgICAgICAgICBjMTEgPSBmbXRbKytpMTFdOwogICAgICAgICAgICB9IGVsc2UgaWYgKGMxMSA9PSAiMCIgJiYgZm10W2kxMSArIDFdID09ICIuIikgewogICAgICAgICAgICAgIGxlYWRpbmdaZXJvID0gdHJ1ZTsKICAgICAgICAgICAgICBpMTEgKz0gMjsKICAgICAgICAgICAgICBjMTEgPSBmbXRbaTExXTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBsZWFkaW5nWmVybyA9IHRydWU7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcHJlY2lzaW9uID0gc2x1cnBOdW1iZXIoKTsKICAgICAgICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICAgICAgICBjYXNlICJiIjoKICAgICAgICAgICAgICAgIHJlc3VsdCArPSBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygyKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgImMiOgogICAgICAgICAgICAgICAgYXJnID0gbmV4dEFyZygpOwogICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBhcmcgPT09ICJzdHJpbmciIHx8IGFyZyBpbnN0YW5jZW9mIFN0cmluZykKICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IGFyZzsKICAgICAgICAgICAgICAgIGVsc2UKICAgICAgICAgICAgICAgICAgcmVzdWx0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoYXJnLCAxMCkpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZCI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gcGFyc2VJbnQobmV4dEFyZygpLCAxMCk7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJmIjoKICAgICAgICAgICAgICAgIHRtcCA9IFN0cmluZyhwYXJzZUZsb2F0KG5leHRBcmcoKSkudG9GaXhlZChwcmVjaXNpb24gfHwgNikpOwogICAgICAgICAgICAgICAgcmVzdWx0ICs9IGxlYWRpbmdaZXJvID8gdG1wIDogdG1wLnJlcGxhY2UoL14wLywgIiIpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiaiI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gSlNPTi5zdHJpbmdpZnkobmV4dEFyZygpKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIm8iOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIwIiArIHBhcnNlSW50KG5leHRBcmcoKSwgMTApLnRvU3RyaW5nKDgpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAicyI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gbmV4dEFyZygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAieCI6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gIjB4IiArIHBhcnNlSW50KG5leHRBcmcoKSwgMTApLnRvU3RyaW5nKDE2KTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGNhc2UgIlgiOgogICAgICAgICAgICAgICAgcmVzdWx0ICs9ICIweCIgKyBwYXJzZUludChuZXh0QXJnKCksIDEwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgICByZXN1bHQgKz0gYzExOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0gZWxzZSBpZiAoYzExID09PSAiJSIpIHsKICAgICAgICAgICAgZXNjYXBlZCA9IHRydWU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXN1bHQgKz0gYzExOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vZmF1bHRAMi4wLjEvbm9kZV9tb2R1bGVzL2ZhdWx0L2luZGV4LmpzCmZ1bmN0aW9uIGNyZWF0ZTUoQ29uc3RydWN0b3IpIHsKICBGb3JtYXR0ZWRFcnJvci5kaXNwbGF5TmFtZSA9IENvbnN0cnVjdG9yLmRpc3BsYXlOYW1lIHx8IENvbnN0cnVjdG9yLm5hbWU7CiAgcmV0dXJuIEZvcm1hdHRlZEVycm9yOwogIGZ1bmN0aW9uIEZvcm1hdHRlZEVycm9yKGZvcm1hdDIsIC4uLnZhbHVlcykgewogICAgY29uc3QgcmVhc29uID0gZm9ybWF0MiA/ICgwLCBpbXBvcnRfZm9ybWF0Mi5kZWZhdWx0KShmb3JtYXQyLCAuLi52YWx1ZXMpIDogZm9ybWF0MjsKICAgIHJldHVybiBuZXcgQ29uc3RydWN0b3IocmVhc29uKTsKICB9Cn0KdmFyIGltcG9ydF9mb3JtYXQyLCBmYXVsdDsKdmFyIGluaXRfZmF1bHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9mYXVsdEAyLjAuMS9ub2RlX21vZHVsZXMvZmF1bHQvaW5kZXguanMiKCkgewogICAgaW1wb3J0X2Zvcm1hdDIgPSBfX3RvRVNNKHJlcXVpcmVfZm9ybWF0KCksIDEpOwogICAgZmF1bHQgPSBPYmplY3QuYXNzaWduKGNyZWF0ZTUoRXJyb3IpLCB7CiAgICAgIGV2YWw6IGNyZWF0ZTUoRXZhbEVycm9yKSwKICAgICAgcmFuZ2U6IGNyZWF0ZTUoUmFuZ2VFcnJvciksCiAgICAgIHJlZmVyZW5jZTogY3JlYXRlNShSZWZlcmVuY2VFcnJvciksCiAgICAgIHN5bnRheDogY3JlYXRlNShTeW50YXhFcnJvciksCiAgICAgIHR5cGU6IGNyZWF0ZTUoVHlwZUVycm9yKSwKICAgICAgdXJpOiBjcmVhdGU1KFVSSUVycm9yKQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi90by1tYXR0ZXJzLmpzCmZ1bmN0aW9uIHRvTWF0dGVycyhvcHRpb25zKSB7CiAgY29uc3QgcmVzdWx0ID0gW107CiAgbGV0IGluZGV4MiA9IC0xOwogIGNvbnN0IHByZXNldHNPck1hdHRlcnMgPSBBcnJheS5pc0FycmF5KG9wdGlvbnMpID8gb3B0aW9ucyA6IG9wdGlvbnMgPyBbb3B0aW9uc10gOiBbInlhbWwiXTsKICB3aGlsZSAoKytpbmRleDIgPCBwcmVzZXRzT3JNYXR0ZXJzLmxlbmd0aCkgewogICAgcmVzdWx0W2luZGV4Ml0gPSBtYXR0ZXIocHJlc2V0c09yTWF0dGVyc1tpbmRleDJdKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBtYXR0ZXIob3B0aW9uMikgewogIGxldCByZXN1bHQgPSBvcHRpb24yOwogIGlmICh0eXBlb2YgcmVzdWx0ID09PSAic3RyaW5nIikgewogICAgaWYgKCFvd242LmNhbGwobWFya2VycywgcmVzdWx0KSkgewogICAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBtYXR0ZXIgZGVmaW5pdGlvbiBmb3IgYCVzYCIsIHJlc3VsdCk7CiAgICB9CiAgICByZXN1bHQgPSB7CiAgICAgIHR5cGU6IHJlc3VsdCwKICAgICAgbWFya2VyOiBtYXJrZXJzW3Jlc3VsdF0KICAgIH07CiAgfSBlbHNlIGlmICh0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgewogICAgdGhyb3cgZmF1bHQoIkV4cGVjdGVkIG1hdHRlciB0byBiZSBhbiBvYmplY3QsIG5vdCBgJWpgIiwgcmVzdWx0KTsKICB9CiAgaWYgKCFvd242LmNhbGwocmVzdWx0LCAidHlwZSIpKSB7CiAgICB0aHJvdyBmYXVsdCgiTWlzc2luZyBgdHlwZWAgaW4gbWF0dGVyIGAlamAiLCByZXN1bHQpOwogIH0KICBpZiAoIW93bjYuY2FsbChyZXN1bHQsICJmZW5jZSIpICYmICFvd242LmNhbGwocmVzdWx0LCAibWFya2VyIikpIHsKICAgIHRocm93IGZhdWx0KCJNaXNzaW5nIGBtYXJrZXJgIG9yIGBmZW5jZWAgaW4gbWF0dGVyIGAlamAiLCByZXN1bHQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CnZhciBvd242LCBtYXJrZXJzOwp2YXIgaW5pdF90b19tYXR0ZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvdG8tbWF0dGVycy5qcyIoKSB7CiAgICBpbml0X2ZhdWx0KCk7CiAgICBvd242ID0ge30uaGFzT3duUHJvcGVydHk7CiAgICBtYXJrZXJzID0gewogICAgICB5YW1sOiAiLSIsCiAgICAgIHRvbWw6ICIrIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3N5bnRheC5qcwpmdW5jdGlvbiBmcm9udG1hdHRlcihvcHRpb25zKSB7CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBjb25zdCBmbG93MyA9IHt9OwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGNvbnN0IGNvZGU0ID0gZmVuY2UobWF0dGVyMiwgIm9wZW4iKS5jaGFyQ29kZUF0KDApOwogICAgY29uc3QgY29uc3RydWN0ID0gY3JlYXRlQ29uc3RydWN0KG1hdHRlcjIpOwogICAgY29uc3QgZXhpc3RpbmcgPSBmbG93M1tjb2RlNF07CiAgICBpZiAoQXJyYXkuaXNBcnJheShleGlzdGluZykpIHsKICAgICAgZXhpc3RpbmcucHVzaChjb25zdHJ1Y3QpOwogICAgfSBlbHNlIHsKICAgICAgZmxvdzNbY29kZTRdID0gW2NvbnN0cnVjdF07CiAgICB9CiAgfQogIHJldHVybiB7CiAgICBmbG93OiBmbG93MwogIH07Cn0KZnVuY3Rpb24gY3JlYXRlQ29uc3RydWN0KG1hdHRlcjIpIHsKICBjb25zdCBhbnl3aGVyZSA9IG1hdHRlcjIuYW55d2hlcmU7CiAgY29uc3QgZnJvbnRtYXR0ZXJUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBtYXR0ZXIyLnR5cGUKICApOwogIGNvbnN0IGZlbmNlVHlwZSA9ICgKICAgIC8qKiBAdHlwZSB7VG9rZW5UeXBlfSAqLwogICAgZnJvbnRtYXR0ZXJUeXBlICsgIkZlbmNlIgogICk7CiAgY29uc3Qgc2VxdWVuY2VUeXBlID0gKAogICAgLyoqIEB0eXBlIHtUb2tlblR5cGV9ICovCiAgICBmZW5jZVR5cGUgKyAiU2VxdWVuY2UiCiAgKTsKICBjb25zdCB2YWx1ZVR5cGUgPSAoCiAgICAvKiogQHR5cGUge1Rva2VuVHlwZX0gKi8KICAgIGZyb250bWF0dGVyVHlwZSArICJWYWx1ZSIKICApOwogIGNvbnN0IGNsb3NpbmdGZW5jZUNvbnN0cnVjdCA9IHsKICAgIHRva2VuaXplOiB0b2tlbml6ZUNsb3NpbmdGZW5jZSwKICAgIHBhcnRpYWw6IHRydWUKICB9OwogIGxldCBidWZmZXIyOwogIGxldCBidWZmZXJJbmRleCA9IDA7CiAgcmV0dXJuIHsKICAgIHRva2VuaXplOiB0b2tlbml6ZUZyb250bWF0dGVyLAogICAgY29uY3JldGU6IHRydWUKICB9OwogIGZ1bmN0aW9uIHRva2VuaXplRnJvbnRtYXR0ZXIoZWZmZWN0cywgb2szLCBub2spIHsKICAgIGNvbnN0IHNlbGYyID0gdGhpczsKICAgIHJldHVybiBzdGFydDsKICAgIGZ1bmN0aW9uIHN0YXJ0KGNvZGU0KSB7CiAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHNlbGYyLm5vdygpOwogICAgICBpZiAoCiAgICAgICAgLy8gSW5kZW50IG5vdCBhbGxvd2VkLgogICAgICAgIHBvc2l0aW9uMy5jb2x1bW4gPT09IDEgJiYgLy8gTm9ybWFsbHksIG9ubHkgYWxsb3dlZCBpbiBmaXJzdCBsaW5lLgogICAgICAgIChwb3NpdGlvbjMubGluZSA9PT0gMSB8fCBhbnl3aGVyZSkKICAgICAgKSB7CiAgICAgICAgYnVmZmVyMiA9IGZlbmNlKG1hdHRlcjIsICJvcGVuIik7CiAgICAgICAgYnVmZmVySW5kZXggPSAwOwogICAgICAgIGlmIChjb2RlNCA9PT0gYnVmZmVyMi5jaGFyQ29kZUF0KGJ1ZmZlckluZGV4KSkgewogICAgICAgICAgZWZmZWN0cy5lbnRlcihmcm9udG1hdHRlclR5cGUpOwogICAgICAgICAgZWZmZWN0cy5lbnRlcihmZW5jZVR5cGUpOwogICAgICAgICAgZWZmZWN0cy5lbnRlcihzZXF1ZW5jZVR5cGUpOwogICAgICAgICAgcmV0dXJuIG9wZW5TZXF1ZW5jZShjb2RlNCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBub2soY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlblNlcXVlbmNlKGNvZGU0KSB7CiAgICAgIGlmIChidWZmZXJJbmRleCA9PT0gYnVmZmVyMi5sZW5ndGgpIHsKICAgICAgICBlZmZlY3RzLmV4aXQoc2VxdWVuY2VUeXBlKTsKICAgICAgICBpZiAobWFya2Rvd25TcGFjZShjb2RlNCkpIHsKICAgICAgICAgIGVmZmVjdHMuZW50ZXIoIndoaXRlc3BhY2UiKTsKICAgICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG9wZW5BZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgrKykpIHsKICAgICAgICBlZmZlY3RzLmNvbnN1bWUoY29kZTQpOwogICAgICAgIHJldHVybiBvcGVuU2VxdWVuY2U7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBvcGVuU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIG9wZW5TZXF1ZW5jZVdoaXRlc3BhY2U7CiAgICAgIH0KICAgICAgZWZmZWN0cy5leGl0KCJ3aGl0ZXNwYWNlIik7CiAgICAgIHJldHVybiBvcGVuQWZ0ZXIoY29kZTQpOwogICAgfQogICAgZnVuY3Rpb24gb3BlbkFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KGZlbmNlVHlwZSk7CiAgICAgICAgZWZmZWN0cy5lbnRlcigibGluZUVuZGluZyIpOwogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgZWZmZWN0cy5leGl0KCJsaW5lRW5kaW5nIik7CiAgICAgICAgYnVmZmVyMiA9IGZlbmNlKG1hdHRlcjIsICJjbG9zZSIpOwogICAgICAgIGJ1ZmZlckluZGV4ID0gMDsKICAgICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NpbmdGZW5jZUNvbnN0cnVjdCwgYWZ0ZXIsIGNvbnRlbnRTdGFydCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb250ZW50U3RhcnQoY29kZTQpIHsKICAgICAgaWYgKGNvZGU0ID09PSBudWxsIHx8IG1hcmtkb3duTGluZUVuZGluZyhjb2RlNCkpIHsKICAgICAgICByZXR1cm4gY29udGVudEVuZChjb2RlNCk7CiAgICAgIH0KICAgICAgZWZmZWN0cy5lbnRlcih2YWx1ZVR5cGUpOwogICAgICByZXR1cm4gY29udGVudEluc2lkZShjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjb250ZW50SW5zaWRlKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHZhbHVlVHlwZSk7CiAgICAgICAgcmV0dXJuIGNvbnRlbnRFbmQoY29kZTQpOwogICAgICB9CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIHJldHVybiBjb250ZW50SW5zaWRlOwogICAgfQogICAgZnVuY3Rpb24gY29udGVudEVuZChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IG51bGwpIHsKICAgICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgICAgfQogICAgICBlZmZlY3RzLmVudGVyKCJsaW5lRW5kaW5nIik7CiAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgIGVmZmVjdHMuZXhpdCgibGluZUVuZGluZyIpOwogICAgICByZXR1cm4gZWZmZWN0cy5hdHRlbXB0KGNsb3NpbmdGZW5jZUNvbnN0cnVjdCwgYWZ0ZXIsIGNvbnRlbnRTdGFydCk7CiAgICB9CiAgICBmdW5jdGlvbiBhZnRlcihjb2RlNCkgewogICAgICBlZmZlY3RzLmV4aXQoZnJvbnRtYXR0ZXJUeXBlKTsKICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICB9CiAgfQogIGZ1bmN0aW9uIHRva2VuaXplQ2xvc2luZ0ZlbmNlKGVmZmVjdHMsIG9rMywgbm9rKSB7CiAgICBsZXQgYnVmZmVySW5kZXgyID0gMDsKICAgIHJldHVybiBjbG9zZVN0YXJ0OwogICAgZnVuY3Rpb24gY2xvc2VTdGFydChjb2RlNCkgewogICAgICBpZiAoY29kZTQgPT09IGJ1ZmZlcjIuY2hhckNvZGVBdChidWZmZXJJbmRleDIpKSB7CiAgICAgICAgZWZmZWN0cy5lbnRlcihmZW5jZVR5cGUpOwogICAgICAgIGVmZmVjdHMuZW50ZXIoc2VxdWVuY2VUeXBlKTsKICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZShjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZVNlcXVlbmNlKGNvZGU0KSB7CiAgICAgIGlmIChidWZmZXJJbmRleDIgPT09IGJ1ZmZlcjIubGVuZ3RoKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KHNlcXVlbmNlVHlwZSk7CiAgICAgICAgaWYgKG1hcmtkb3duU3BhY2UoY29kZTQpKSB7CiAgICAgICAgICBlZmZlY3RzLmVudGVyKCJ3aGl0ZXNwYWNlIik7CiAgICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZVdoaXRlc3BhY2UoY29kZTQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gY2xvc2VBZnRlcihjb2RlNCk7CiAgICAgIH0KICAgICAgaWYgKGNvZGU0ID09PSBidWZmZXIyLmNoYXJDb2RlQXQoYnVmZmVySW5kZXgyKyspKSB7CiAgICAgICAgZWZmZWN0cy5jb25zdW1lKGNvZGU0KTsKICAgICAgICByZXR1cm4gY2xvc2VTZXF1ZW5jZTsKICAgICAgfQogICAgICByZXR1cm4gbm9rKGNvZGU0KTsKICAgIH0KICAgIGZ1bmN0aW9uIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlKGNvZGU0KSB7CiAgICAgIGlmIChtYXJrZG93blNwYWNlKGNvZGU0KSkgewogICAgICAgIGVmZmVjdHMuY29uc3VtZShjb2RlNCk7CiAgICAgICAgcmV0dXJuIGNsb3NlU2VxdWVuY2VXaGl0ZXNwYWNlOwogICAgICB9CiAgICAgIGVmZmVjdHMuZXhpdCgid2hpdGVzcGFjZSIpOwogICAgICByZXR1cm4gY2xvc2VBZnRlcihjb2RlNCk7CiAgICB9CiAgICBmdW5jdGlvbiBjbG9zZUFmdGVyKGNvZGU0KSB7CiAgICAgIGlmIChjb2RlNCA9PT0gbnVsbCB8fCBtYXJrZG93bkxpbmVFbmRpbmcoY29kZTQpKSB7CiAgICAgICAgZWZmZWN0cy5leGl0KGZlbmNlVHlwZSk7CiAgICAgICAgcmV0dXJuIG9rMyhjb2RlNCk7CiAgICAgIH0KICAgICAgcmV0dXJuIG5vayhjb2RlNCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIGZlbmNlKG1hdHRlcjIsIHByb3ApIHsKICByZXR1cm4gbWF0dGVyMi5tYXJrZXIgPyBwaWNrKG1hdHRlcjIubWFya2VyLCBwcm9wKS5yZXBlYXQoMykgOiAoCiAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiBUaGV54oCZcmUgbXV0dWFsbHkgZXhjbHVzaXZlLgogICAgcGljayhtYXR0ZXIyLmZlbmNlLCBwcm9wKQogICk7Cn0KZnVuY3Rpb24gcGljayhzY2hlbWEsIHByb3ApIHsKICByZXR1cm4gdHlwZW9mIHNjaGVtYSA9PT0gInN0cmluZyIgPyBzY2hlbWEgOiBzY2hlbWFbcHJvcF07Cn0KdmFyIGluaXRfc3ludGF4NiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXJAMi4wLjAvbm9kZV9tb2R1bGVzL21pY3JvbWFyay1leHRlbnNpb24tZnJvbnRtYXR0ZXIvbGliL3N5bnRheC5qcyIoKSB7CiAgICBpbml0X21pY3JvbWFya191dGlsX2NoYXJhY3RlcigpOwogICAgaW5pdF90b19tYXR0ZXJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2xpYi9odG1sLmpzCnZhciBpbml0X2h0bWw3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlckAyLjAuMC9ub2RlX21vZHVsZXMvbWljcm9tYXJrLWV4dGVuc2lvbi1mcm9udG1hdHRlci9saWIvaHRtbC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyQDIuMC4wL25vZGVfbW9kdWxlcy9taWNyb21hcmstZXh0ZW5zaW9uLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3ludGF4NigpOwogICAgaW5pdF9odG1sNygpOwogICAgaW5pdF90b19tYXR0ZXJzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLWZyb250bWF0dGVyQDIuMC4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBmcm9udG1hdHRlckZyb21NYXJrZG93bihvcHRpb25zKSB7CiAgY29uc3QgbWF0dGVycyA9IHRvTWF0dGVycyhvcHRpb25zKTsKICBjb25zdCBlbnRlciA9IHt9OwogIGNvbnN0IGV4aXQzID0ge307CiAgbGV0IGluZGV4MiA9IC0xOwogIHdoaWxlICgrK2luZGV4MiA8IG1hdHRlcnMubGVuZ3RoKSB7CiAgICBjb25zdCBtYXR0ZXIyID0gbWF0dGVyc1tpbmRleDJdOwogICAgZW50ZXJbbWF0dGVyMi50eXBlXSA9IG9wZW5lcihtYXR0ZXIyKTsKICAgIGV4aXQzW21hdHRlcjIudHlwZV0gPSBjbG9zZTY7CiAgICBleGl0M1ttYXR0ZXIyLnR5cGUgKyAiVmFsdWUiXSA9IHZhbHVlOwogIH0KICByZXR1cm4geyBlbnRlciwgZXhpdDogZXhpdDMgfTsKfQpmdW5jdGlvbiBvcGVuZXIobWF0dGVyMikgewogIHJldHVybiBvcGVuOwogIGZ1bmN0aW9uIG9wZW4odG9rZW4pIHsKICAgIHRoaXMuZW50ZXIoeyB0eXBlOiBtYXR0ZXIyLnR5cGUsIHZhbHVlOiAiIiB9LCB0b2tlbik7CiAgICB0aGlzLmJ1ZmZlcigpOwogIH0KfQpmdW5jdGlvbiBjbG9zZTYodG9rZW4pIHsKICBjb25zdCBkYXRhID0gdGhpcy5yZXN1bWUoKTsKICBjb25zdCBub2RlMiA9IHRoaXMuc3RhY2tbdGhpcy5zdGFjay5sZW5ndGggLSAxXTsKICBvaygidmFsdWUiIGluIG5vZGUyKTsKICB0aGlzLmV4aXQodG9rZW4pOwogIG5vZGUyLnZhbHVlID0gZGF0YS5yZXBsYWNlKC9eKFxyP1xufFxyKXwoXHI/XG58XHIpJC9nLCAiIik7Cn0KZnVuY3Rpb24gdmFsdWUodG9rZW4pIHsKICB0aGlzLmNvbmZpZy5lbnRlci5kYXRhLmNhbGwodGhpcywgdG9rZW4pOwogIHRoaXMuY29uZmlnLmV4aXQuZGF0YS5jYWxsKHRoaXMsIHRva2VuKTsKfQpmdW5jdGlvbiBmcm9udG1hdHRlclRvTWFya2Rvd24ob3B0aW9ucykgewogIGNvbnN0IHVuc2FmZTIgPSBbXTsKICBjb25zdCBoYW5kbGVyczIgPSB7fTsKICBjb25zdCBtYXR0ZXJzID0gdG9NYXR0ZXJzKG9wdGlvbnMpOwogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBtYXR0ZXJzLmxlbmd0aCkgewogICAgY29uc3QgbWF0dGVyMiA9IG1hdHRlcnNbaW5kZXgyXTsKICAgIGhhbmRsZXJzMlttYXR0ZXIyLnR5cGVdID0gaGFuZGxlcihtYXR0ZXIyKTsKICAgIGNvbnN0IG9wZW4gPSBmZW5jZTIobWF0dGVyMiwgIm9wZW4iKTsKICAgIHVuc2FmZTIucHVzaCh7CiAgICAgIGF0QnJlYWs6IHRydWUsCiAgICAgIGNoYXJhY3Rlcjogb3Blbi5jaGFyQXQoMCksCiAgICAgIGFmdGVyOiBlc2NhcGVTdHJpbmdSZWdleHAob3Blbi5jaGFyQXQoMSkpCiAgICB9KTsKICB9CiAgcmV0dXJuIHsgdW5zYWZlOiB1bnNhZmUyLCBoYW5kbGVyczogaGFuZGxlcnMyIH07Cn0KZnVuY3Rpb24gaGFuZGxlcihtYXR0ZXIyKSB7CiAgY29uc3Qgb3BlbiA9IGZlbmNlMihtYXR0ZXIyLCAib3BlbiIpOwogIGNvbnN0IGNsb3NlNyA9IGZlbmNlMihtYXR0ZXIyLCAiY2xvc2UiKTsKICByZXR1cm4gaGFuZGxlMzsKICBmdW5jdGlvbiBoYW5kbGUzKG5vZGUyKSB7CiAgICByZXR1cm4gb3BlbiArIChub2RlMi52YWx1ZSA/ICJcbiIgKyBub2RlMi52YWx1ZSA6ICIiKSArICJcbiIgKyBjbG9zZTc7CiAgfQp9CmZ1bmN0aW9uIGZlbmNlMihtYXR0ZXIyLCBwcm9wKSB7CiAgcmV0dXJuIG1hdHRlcjIubWFya2VyID8gcGljazIobWF0dGVyMi5tYXJrZXIsIHByb3ApLnJlcGVhdCgzKSA6ICgKICAgIC8vIEB0cy1leHBlY3QtZXJyb3I6IFRoZXnigJlyZSBtdXR1YWxseSBleGNsdXNpdmUuCiAgICBwaWNrMihtYXR0ZXIyLmZlbmNlLCBwcm9wKQogICk7Cn0KZnVuY3Rpb24gcGljazIoc2NoZW1hLCBwcm9wKSB7CiAgcmV0dXJuIHR5cGVvZiBzY2hlbWEgPT09ICJzdHJpbmciID8gc2NoZW1hIDogc2NoZW1hW3Byb3BdOwp9CnZhciBpbml0X2xpYjIzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC1mcm9udG1hdHRlckAyLjAuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC1mcm9udG1hdHRlci9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X21pY3JvbWFya19leHRlbnNpb25fZnJvbnRtYXR0ZXIoKTsKICAgIGluaXRfZXNjYXBlX3N0cmluZ19yZWdleHAoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvaW5kZXguanMKdmFyIGluaXRfbWRhc3RfdXRpbF9mcm9udG1hdHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXJAMi4wLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtZnJvbnRtYXR0ZXIvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWZyb250bWF0dGVyQDUuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstZnJvbnRtYXR0ZXIvbGliL2luZGV4LmpzCmZ1bmN0aW9uIHJlbWFya0Zyb250bWF0dGVyKG9wdGlvbnMpIHsKICBjb25zdCBzZWxmMiA9ICgKICAgIC8qKiBAdHlwZSB7UHJvY2Vzc29yfSAqLwogICAgdGhpcwogICk7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczQ7CiAgY29uc3QgZGF0YSA9IHNlbGYyLmRhdGEoKTsKICBjb25zdCBtaWNyb21hcmtFeHRlbnNpb25zID0gZGF0YS5taWNyb21hcmtFeHRlbnNpb25zIHx8IChkYXRhLm1pY3JvbWFya0V4dGVuc2lvbnMgPSBbXSk7CiAgY29uc3QgZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyA9IGRhdGEuZnJvbU1hcmtkb3duRXh0ZW5zaW9ucyB8fCAoZGF0YS5mcm9tTWFya2Rvd25FeHRlbnNpb25zID0gW10pOwogIGNvbnN0IHRvTWFya2Rvd25FeHRlbnNpb25zID0gZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyB8fCAoZGF0YS50b01hcmtkb3duRXh0ZW5zaW9ucyA9IFtdKTsKICBtaWNyb21hcmtFeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXIoc2V0dGluZ3MpKTsKICBmcm9tTWFya2Rvd25FeHRlbnNpb25zLnB1c2goZnJvbnRtYXR0ZXJGcm9tTWFya2Rvd24oc2V0dGluZ3MpKTsKICB0b01hcmtkb3duRXh0ZW5zaW9ucy5wdXNoKGZyb250bWF0dGVyVG9NYXJrZG93bihzZXR0aW5ncykpOwp9CnZhciBlbXB0eU9wdGlvbnM0Owp2YXIgaW5pdF9saWIyNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfZnJvbnRtYXR0ZXIoKTsKICAgIGluaXRfbWljcm9tYXJrX2V4dGVuc2lvbl9mcm9udG1hdHRlcigpOwogICAgZW1wdHlPcHRpb25zNCA9ICJ5YW1sIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19mcm9udG1hdHRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1mcm9udG1hdHRlckA1LjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLWZyb250bWF0dGVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vdHlwZXMuanMKdmFyIFZPSUQsIFBSSU1JVElWRSwgQVJSQVksIE9CSkVDVCwgREFURSwgUkVHRVhQLCBNQVAsIFNFVCwgRVJST1IsIEJJR0lOVDsKdmFyIGluaXRfdHlwZXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS90eXBlcy5qcyIoKSB7CiAgICBWT0lEID0gLTE7CiAgICBQUklNSVRJVkUgPSAwOwogICAgQVJSQVkgPSAxOwogICAgT0JKRUNUID0gMjsKICAgIERBVEUgPSAzOwogICAgUkVHRVhQID0gNDsKICAgIE1BUCA9IDU7CiAgICBTRVQgPSA2OwogICAgRVJST1IgPSA3OwogICAgQklHSU5UID0gODsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vZGVzZXJpYWxpemUuanMKdmFyIGVudiwgZGVzZXJpYWxpemVyLCBkZXNlcmlhbGl6ZTsKdmFyIGluaXRfZGVzZXJpYWxpemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL2Rlc2VyaWFsaXplLmpzIigpIHsKICAgIGluaXRfdHlwZXMyKCk7CiAgICBlbnYgPSB0eXBlb2Ygc2VsZiA9PT0gIm9iamVjdCIgPyBzZWxmIDogZ2xvYmFsVGhpczsKICAgIGRlc2VyaWFsaXplciA9ICgkMywgXzQpID0+IHsKICAgICAgY29uc3QgYXMgPSAob3V0LCBpbmRleDIpID0+IHsKICAgICAgICAkMy5zZXQoaW5kZXgyLCBvdXQpOwogICAgICAgIHJldHVybiBvdXQ7CiAgICAgIH07CiAgICAgIGNvbnN0IHVucGFpciA9IChpbmRleDIpID0+IHsKICAgICAgICBpZiAoJDMuaGFzKGluZGV4MikpCiAgICAgICAgICByZXR1cm4gJDMuZ2V0KGluZGV4Mik7CiAgICAgICAgY29uc3QgW3R5cGU1LCB2YWx1ZTJdID0gXzRbaW5kZXgyXTsKICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICBjYXNlIFBSSU1JVElWRToKICAgICAgICAgIGNhc2UgVk9JRDoKICAgICAgICAgICAgcmV0dXJuIGFzKHZhbHVlMiwgaW5kZXgyKTsKICAgICAgICAgIGNhc2UgQVJSQVk6IHsKICAgICAgICAgICAgY29uc3QgYXJyID0gYXMoW10sIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXgzIG9mIHZhbHVlMikKICAgICAgICAgICAgICBhcnIucHVzaCh1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBhcnI7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE9CSkVDVDogewogICAgICAgICAgICBjb25zdCBvYmplY3QgPSBhcyh7fSwgaW5kZXgyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgaW5kZXgzXSBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgb2JqZWN0W3VucGFpcihrZXkyKV0gPSB1bnBhaXIoaW5kZXgzKTsKICAgICAgICAgICAgcmV0dXJuIG9iamVjdDsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgREFURToKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBEYXRlKHZhbHVlMiksIGluZGV4Mik7CiAgICAgICAgICBjYXNlIFJFR0VYUDogewogICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgZmxhZ3MgfSA9IHZhbHVlMjsKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBSZWdFeHAoc291cmNlLCBmbGFncyksIGluZGV4Mik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE1BUDogewogICAgICAgICAgICBjb25zdCBtYXA3ID0gYXMoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgaW5kZXgyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgaW5kZXgzXSBvZiB2YWx1ZTIpCiAgICAgICAgICAgICAgbWFwNy5zZXQodW5wYWlyKGtleTIpLCB1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBtYXA3OwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBTRVQ6IHsKICAgICAgICAgICAgY29uc3Qgc2V0MyA9IGFzKC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCksIGluZGV4Mik7CiAgICAgICAgICAgIGZvciAoY29uc3QgaW5kZXgzIG9mIHZhbHVlMikKICAgICAgICAgICAgICBzZXQzLmFkZCh1bnBhaXIoaW5kZXgzKSk7CiAgICAgICAgICAgIHJldHVybiBzZXQzOwogICAgICAgICAgfQogICAgICAgICAgY2FzZSBFUlJPUjogewogICAgICAgICAgICBjb25zdCB7IG5hbWUsIG1lc3NhZ2U6IG1lc3NhZ2UyIH0gPSB2YWx1ZTI7CiAgICAgICAgICAgIHJldHVybiBhcyhuZXcgZW52W25hbWVdKG1lc3NhZ2UyKSwgaW5kZXgyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgQklHSU5UOgogICAgICAgICAgICByZXR1cm4gYXMoQmlnSW50KHZhbHVlMiksIGluZGV4Mik7CiAgICAgICAgICBjYXNlICJCaWdJbnQiOgogICAgICAgICAgICByZXR1cm4gYXMoT2JqZWN0KEJpZ0ludCh2YWx1ZTIpKSwgaW5kZXgyKTsKICAgICAgICAgIGNhc2UgIkFycmF5QnVmZmVyIjoKICAgICAgICAgICAgcmV0dXJuIGFzKG5ldyBVaW50OEFycmF5KHZhbHVlMikuYnVmZmVyLCB2YWx1ZTIpOwogICAgICAgICAgY2FzZSAiRGF0YVZpZXciOiB7CiAgICAgICAgICAgIGNvbnN0IHsgYnVmZmVyOiBidWZmZXIyIH0gPSBuZXcgVWludDhBcnJheSh2YWx1ZTIpOwogICAgICAgICAgICByZXR1cm4gYXMobmV3IERhdGFWaWV3KGJ1ZmZlcjIpLCB2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXMobmV3IGVudlt0eXBlNV0odmFsdWUyKSwgaW5kZXgyKTsKICAgICAgfTsKICAgICAgcmV0dXJuIHVucGFpcjsKICAgIH07CiAgICBkZXNlcmlhbGl6ZSA9IChzZXJpYWxpemVkKSA9PiBkZXNlcmlhbGl6ZXIoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgc2VyaWFsaXplZCkoMCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdW5nYXArc3RydWN0dXJlZC1jbG9uZUAxLjMuMC9ub2RlX21vZHVsZXMvQHVuZ2FwL3N0cnVjdHVyZWQtY2xvbmUvZXNtL3NlcmlhbGl6ZS5qcwp2YXIgRU1QVFkyLCB0b1N0cmluZzIsIGtleXMsIHR5cGVPZiwgc2hvdWxkU2tpcCwgc2VyaWFsaXplciwgc2VyaWFsaXplMjsKdmFyIGluaXRfc2VyaWFsaXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9zZXJpYWxpemUuanMiKCkgewogICAgaW5pdF90eXBlczIoKTsKICAgIEVNUFRZMiA9ICIiOwogICAgKHsgdG9TdHJpbmc6IHRvU3RyaW5nMiB9ID0ge30pOwogICAgKHsga2V5cyB9ID0gT2JqZWN0KTsKICAgIHR5cGVPZiA9ICh2YWx1ZTIpID0+IHsKICAgICAgY29uc3QgdHlwZTUgPSB0eXBlb2YgdmFsdWUyOwogICAgICBpZiAodHlwZTUgIT09ICJvYmplY3QiIHx8ICF2YWx1ZTIpCiAgICAgICAgcmV0dXJuIFtQUklNSVRJVkUsIHR5cGU1XTsKICAgICAgY29uc3QgYXNTdHJpbmcgPSB0b1N0cmluZzIuY2FsbCh2YWx1ZTIpLnNsaWNlKDgsIC0xKTsKICAgICAgc3dpdGNoIChhc1N0cmluZykgewogICAgICAgIGNhc2UgIkFycmF5IjoKICAgICAgICAgIHJldHVybiBbQVJSQVksIEVNUFRZMl07CiAgICAgICAgY2FzZSAiT2JqZWN0IjoKICAgICAgICAgIHJldHVybiBbT0JKRUNULCBFTVBUWTJdOwogICAgICAgIGNhc2UgIkRhdGUiOgogICAgICAgICAgcmV0dXJuIFtEQVRFLCBFTVBUWTJdOwogICAgICAgIGNhc2UgIlJlZ0V4cCI6CiAgICAgICAgICByZXR1cm4gW1JFR0VYUCwgRU1QVFkyXTsKICAgICAgICBjYXNlICJNYXAiOgogICAgICAgICAgcmV0dXJuIFtNQVAsIEVNUFRZMl07CiAgICAgICAgY2FzZSAiU2V0IjoKICAgICAgICAgIHJldHVybiBbU0VULCBFTVBUWTJdOwogICAgICAgIGNhc2UgIkRhdGFWaWV3IjoKICAgICAgICAgIHJldHVybiBbQVJSQVksIGFzU3RyaW5nXTsKICAgICAgfQogICAgICBpZiAoYXNTdHJpbmcuaW5jbHVkZXMoIkFycmF5IikpCiAgICAgICAgcmV0dXJuIFtBUlJBWSwgYXNTdHJpbmddOwogICAgICBpZiAoYXNTdHJpbmcuaW5jbHVkZXMoIkVycm9yIikpCiAgICAgICAgcmV0dXJuIFtFUlJPUiwgYXNTdHJpbmddOwogICAgICByZXR1cm4gW09CSkVDVCwgYXNTdHJpbmddOwogICAgfTsKICAgIHNob3VsZFNraXAgPSAoW1RZUEUsIHR5cGU1XSkgPT4gVFlQRSA9PT0gUFJJTUlUSVZFICYmICh0eXBlNSA9PT0gImZ1bmN0aW9uIiB8fCB0eXBlNSA9PT0gInN5bWJvbCIpOwogICAgc2VyaWFsaXplciA9IChzdHJpY3QsIGpzb24sICQzLCBfNCkgPT4gewogICAgICBjb25zdCBhcyA9IChvdXQsIHZhbHVlMikgPT4gewogICAgICAgIGNvbnN0IGluZGV4MiA9IF80LnB1c2gob3V0KSAtIDE7CiAgICAgICAgJDMuc2V0KHZhbHVlMiwgaW5kZXgyKTsKICAgICAgICByZXR1cm4gaW5kZXgyOwogICAgICB9OwogICAgICBjb25zdCBwYWlyID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICgkMy5oYXModmFsdWUyKSkKICAgICAgICAgIHJldHVybiAkMy5nZXQodmFsdWUyKTsKICAgICAgICBsZXQgW1RZUEUsIHR5cGU1XSA9IHR5cGVPZih2YWx1ZTIpOwogICAgICAgIHN3aXRjaCAoVFlQRSkgewogICAgICAgICAgY2FzZSBQUklNSVRJVkU6IHsKICAgICAgICAgICAgbGV0IGVudHJ5ID0gdmFsdWUyOwogICAgICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICAgICAgY2FzZSAiYmlnaW50IjoKICAgICAgICAgICAgICAgIFRZUEUgPSBCSUdJTlQ7CiAgICAgICAgICAgICAgICBlbnRyeSA9IHZhbHVlMi50b1N0cmluZygpOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgY2FzZSAiZnVuY3Rpb24iOgogICAgICAgICAgICAgIGNhc2UgInN5bWJvbCI6CiAgICAgICAgICAgICAgICBpZiAoc3RyaWN0KQogICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJ1bmFibGUgdG8gc2VyaWFsaXplICIgKyB0eXBlNSk7CiAgICAgICAgICAgICAgICBlbnRyeSA9IG51bGw7CiAgICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgICBjYXNlICJ1bmRlZmluZWQiOgogICAgICAgICAgICAgICAgcmV0dXJuIGFzKFtWT0lEXSwgdmFsdWUyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYXMoW1RZUEUsIGVudHJ5XSwgdmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgQVJSQVk6IHsKICAgICAgICAgICAgaWYgKHR5cGU1KSB7CiAgICAgICAgICAgICAgbGV0IHNwcmVhZCA9IHZhbHVlMjsKICAgICAgICAgICAgICBpZiAodHlwZTUgPT09ICJEYXRhVmlldyIpIHsKICAgICAgICAgICAgICAgIHNwcmVhZCA9IG5ldyBVaW50OEFycmF5KHZhbHVlMi5idWZmZXIpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJBcnJheUJ1ZmZlciIpIHsKICAgICAgICAgICAgICAgIHNwcmVhZCA9IG5ldyBVaW50OEFycmF5KHZhbHVlMik7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIFsuLi5zcHJlYWRdXSwgdmFsdWUyKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBhcnIgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGFycl0sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgdmFsdWUyKQogICAgICAgICAgICAgIGFyci5wdXNoKHBhaXIoZW50cnkpKTsKICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgT0JKRUNUOiB7CiAgICAgICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgICAgICAgIGNhc2UgIkJpZ0ludCI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIHZhbHVlMi50b1N0cmluZygpXSwgdmFsdWUyKTsKICAgICAgICAgICAgICAgIGNhc2UgIkJvb2xlYW4iOgogICAgICAgICAgICAgICAgY2FzZSAiTnVtYmVyIjoKICAgICAgICAgICAgICAgIGNhc2UgIlN0cmluZyI6CiAgICAgICAgICAgICAgICAgIHJldHVybiBhcyhbdHlwZTUsIHZhbHVlMi52YWx1ZU9mKCldLCB2YWx1ZTIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoanNvbiAmJiAidG9KU09OIiBpbiB2YWx1ZTIpCiAgICAgICAgICAgICAgcmV0dXJuIHBhaXIodmFsdWUyLnRvSlNPTigpKTsKICAgICAgICAgICAgY29uc3QgZW50cmllcyA9IFtdOwogICAgICAgICAgICBjb25zdCBpbmRleDIgPSBhcyhbVFlQRSwgZW50cmllc10sIHZhbHVlMik7CiAgICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzKHZhbHVlMikpIHsKICAgICAgICAgICAgICBpZiAoc3RyaWN0IHx8ICFzaG91bGRTa2lwKHR5cGVPZih2YWx1ZTJba2V5Ml0pKSkKICAgICAgICAgICAgICAgIGVudHJpZXMucHVzaChbcGFpcihrZXkyKSwgcGFpcih2YWx1ZTJba2V5Ml0pXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgREFURToKICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB2YWx1ZTIudG9JU09TdHJpbmcoKV0sIHZhbHVlMik7CiAgICAgICAgICBjYXNlIFJFR0VYUDogewogICAgICAgICAgICBjb25zdCB7IHNvdXJjZSwgZmxhZ3MgfSA9IHZhbHVlMjsKICAgICAgICAgICAgcmV0dXJuIGFzKFtUWVBFLCB7IHNvdXJjZSwgZmxhZ3MgfV0sIHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgICBjYXNlIE1BUDogewogICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gW107CiAgICAgICAgICAgIGNvbnN0IGluZGV4MiA9IGFzKFtUWVBFLCBlbnRyaWVzXSwgdmFsdWUyKTsKICAgICAgICAgICAgZm9yIChjb25zdCBba2V5MiwgZW50cnldIG9mIHZhbHVlMikgewogICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgIShzaG91bGRTa2lwKHR5cGVPZihrZXkyKSkgfHwgc2hvdWxkU2tpcCh0eXBlT2YoZW50cnkpKSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2goW3BhaXIoa2V5MiksIHBhaXIoZW50cnkpXSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgU0VUOiB7CiAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBbXTsKICAgICAgICAgICAgY29uc3QgaW5kZXgyID0gYXMoW1RZUEUsIGVudHJpZXNdLCB2YWx1ZTIpOwogICAgICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHZhbHVlMikgewogICAgICAgICAgICAgIGlmIChzdHJpY3QgfHwgIXNob3VsZFNraXAodHlwZU9mKGVudHJ5KSkpCiAgICAgICAgICAgICAgICBlbnRyaWVzLnB1c2gocGFpcihlbnRyeSkpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBpbmRleDI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGNvbnN0IHsgbWVzc2FnZTogbWVzc2FnZTIgfSA9IHZhbHVlMjsKICAgICAgICByZXR1cm4gYXMoW1RZUEUsIHsgbmFtZTogdHlwZTUsIG1lc3NhZ2U6IG1lc3NhZ2UyIH1dLCB2YWx1ZTIpOwogICAgICB9OwogICAgICByZXR1cm4gcGFpcjsKICAgIH07CiAgICBzZXJpYWxpemUyID0gKHZhbHVlMiwgeyBqc29uLCBsb3NzeSB9ID0ge30pID0+IHsKICAgICAgY29uc3QgXzQgPSBbXTsKICAgICAgcmV0dXJuIHNlcmlhbGl6ZXIoIShqc29uIHx8IGxvc3N5KSwgISFqc29uLCAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpLCBfNCkodmFsdWUyKSwgXzQ7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHVuZ2FwK3N0cnVjdHVyZWQtY2xvbmVAMS4zLjAvbm9kZV9tb2R1bGVzL0B1bmdhcC9zdHJ1Y3R1cmVkLWNsb25lL2VzbS9pbmRleC5qcwp2YXIgZXNtX2RlZmF1bHQ7CnZhciBpbml0X2VzbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B1bmdhcCtzdHJ1Y3R1cmVkLWNsb25lQDEuMy4wL25vZGVfbW9kdWxlcy9AdW5nYXAvc3RydWN0dXJlZC1jbG9uZS9lc20vaW5kZXguanMiKCkgewogICAgaW5pdF9kZXNlcmlhbGl6ZSgpOwogICAgaW5pdF9zZXJpYWxpemUoKTsKICAgIGVzbV9kZWZhdWx0ID0gdHlwZW9mIHN0cnVjdHVyZWRDbG9uZSA9PT0gImZ1bmN0aW9uIiA/ICgKICAgICAgLyogYzggaWdub3JlIHN0YXJ0ICovCiAgICAgIChhbnksIG9wdGlvbnMpID0+IG9wdGlvbnMgJiYgKCJqc29uIiBpbiBvcHRpb25zIHx8ICJsb3NzeSIgaW4gb3B0aW9ucykgPyBkZXNlcmlhbGl6ZShzZXJpYWxpemUyKGFueSwgb3B0aW9ucykpIDogc3RydWN0dXJlZENsb25lKGFueSkKICAgICkgOiAoYW55LCBvcHRpb25zKSA9PiBkZXNlcmlhbGl6ZShzZXJpYWxpemUyKGFueSwgb3B0aW9ucykpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vdW5pc3QtdXRpbC1wb3NpdGlvbkA1LjAuMC9ub2RlX21vZHVsZXMvdW5pc3QtdXRpbC1wb3NpdGlvbi9saWIvaW5kZXguanMKZnVuY3Rpb24gcG9pbnQzKHR5cGU1KSB7CiAgcmV0dXJuIHBvaW50NDsKICBmdW5jdGlvbiBwb2ludDQobm9kZTIpIHsKICAgIGNvbnN0IHBvaW50NSA9IG5vZGUyICYmIG5vZGUyLnBvc2l0aW9uICYmIG5vZGUyLnBvc2l0aW9uW3R5cGU1XSB8fCB7fTsKICAgIGlmICh0eXBlb2YgcG9pbnQ1LmxpbmUgPT09ICJudW1iZXIiICYmIHBvaW50NS5saW5lID4gMCAmJiB0eXBlb2YgcG9pbnQ1LmNvbHVtbiA9PT0gIm51bWJlciIgJiYgcG9pbnQ1LmNvbHVtbiA+IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBsaW5lOiBwb2ludDUubGluZSwKICAgICAgICBjb2x1bW46IHBvaW50NS5jb2x1bW4sCiAgICAgICAgb2Zmc2V0OiB0eXBlb2YgcG9pbnQ1Lm9mZnNldCA9PT0gIm51bWJlciIgJiYgcG9pbnQ1Lm9mZnNldCA+IC0xID8gcG9pbnQ1Lm9mZnNldCA6IHZvaWQgMAogICAgICB9OwogICAgfQogIH0KfQpmdW5jdGlvbiBwb3NpdGlvbjIobm9kZTIpIHsKICBjb25zdCBzdGFydCA9IHBvaW50U3RhcnQobm9kZTIpOwogIGNvbnN0IGVuZDMgPSBwb2ludEVuZChub2RlMik7CiAgaWYgKHN0YXJ0ICYmIGVuZDMpIHsKICAgIHJldHVybiB7IHN0YXJ0LCBlbmQ6IGVuZDMgfTsKICB9Cn0KdmFyIHBvaW50RW5kLCBwb2ludFN0YXJ0Owp2YXIgaW5pdF9saWIyNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3VuaXN0LXV0aWwtcG9zaXRpb25ANS4wLjAvbm9kZV9tb2R1bGVzL3VuaXN0LXV0aWwtcG9zaXRpb24vbGliL2luZGV4LmpzIigpIHsKICAgIHBvaW50RW5kID0gcG9pbnQzKCJlbmQiKTsKICAgIHBvaW50U3RhcnQgPSBwb2ludDMoInN0YXJ0Iik7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2luZGV4LmpzCnZhciBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS91bmlzdC11dGlsLXBvc2l0aW9uQDUuMC4wL25vZGVfbW9kdWxlcy91bmlzdC11dGlsLXBvc2l0aW9uL2luZGV4LmpzIigpIHsKICAgIGluaXRfbGliMjUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9zY2hlbWEuanMKdmFyIGFyaWEsIGRlZmF1bHRTY2hlbWE7CnZhciBpbml0X3NjaGVtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9zY2hlbWEuanMiKCkgewogICAgYXJpYSA9IFsiYXJpYURlc2NyaWJlZEJ5IiwgImFyaWFMYWJlbCIsICJhcmlhTGFiZWxsZWRCeSJdOwogICAgZGVmYXVsdFNjaGVtYSA9IHsKICAgICAgYW5jZXN0b3JzOiB7CiAgICAgICAgdGJvZHk6IFsidGFibGUiXSwKICAgICAgICB0ZDogWyJ0YWJsZSJdLAogICAgICAgIHRoOiBbInRhYmxlIl0sCiAgICAgICAgdGhlYWQ6IFsidGFibGUiXSwKICAgICAgICB0Zm9vdDogWyJ0YWJsZSJdLAogICAgICAgIHRyOiBbInRhYmxlIl0KICAgICAgfSwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGE6IFsKICAgICAgICAgIC4uLmFyaWEsCiAgICAgICAgICAvLyBOb3RlOiB0aGVzZSAzIGFyZSB1c2VkIGJ5IEdGTSBmb290bm90ZXMsIHRoZXkgZG8gd29yayBvbiBhbGwgbGlua3MuCiAgICAgICAgICAiZGF0YUZvb3Rub3RlQmFja3JlZiIsCiAgICAgICAgICAiZGF0YUZvb3Rub3RlUmVmIiwKICAgICAgICAgIFsiY2xhc3NOYW1lIiwgImRhdGEtZm9vdG5vdGUtYmFja3JlZiJdLAogICAgICAgICAgImhyZWYiCiAgICAgICAgXSwKICAgICAgICBibG9ja3F1b3RlOiBbImNpdGUiXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGNsYXNzIGlzIG5vdCBub3JtYWxseSBhbGxvd2VkIGJ5IEdILCB3aGVuIG1hbnVhbGx5IHdyaXRpbmcKICAgICAgICAvLyBgY29kZWAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBjb2RlOiBbWyJjbGFzc05hbWUiLCAvXmxhbmd1YWdlLS4vXV0sCiAgICAgICAgZGVsOiBbImNpdGUiXSwKICAgICAgICBkaXY6IFsiaXRlbVNjb3BlIiwgIml0ZW1UeXBlIl0sCiAgICAgICAgZGw6IFsuLi5hcmlhXSwKICAgICAgICAvLyBOb3RlOiB0aGlzIGlzIHVzZWQgYnkgR0ZNIGZvb3Rub3Rlcy4KICAgICAgICBoMjogW1siY2xhc3NOYW1lIiwgInNyLW9ubHkiXV0sCiAgICAgICAgaW1nOiBbLi4uYXJpYSwgImxvbmdEZXNjIiwgInNyYyJdLAogICAgICAgIC8vIE5vdGU6IGBpbnB1dGAgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGl0IGluIG1hcmtkb3duLCB0aGV5IGFkZCBpdCBmcm9tIHRhc2tsaXN0cyBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgaW5wdXQ6IFsKICAgICAgICAgIFsiZGlzYWJsZWQiLCB0cnVlXSwKICAgICAgICAgIFsidHlwZSIsICJjaGVja2JveCJdCiAgICAgICAgXSwKICAgICAgICBpbnM6IFsiY2l0ZSJdLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBsaWAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBsaTogW1siY2xhc3NOYW1lIiwgInRhc2stbGlzdC1pdGVtIl1dLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBvbGAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICBvbDogWy4uLmFyaWEsIFsiY2xhc3NOYW1lIiwgImNvbnRhaW5zLXRhc2stbGlzdCJdXSwKICAgICAgICBxOiBbImNpdGUiXSwKICAgICAgICBzZWN0aW9uOiBbImRhdGFGb290bm90ZXMiLCBbImNsYXNzTmFtZSIsICJmb290bm90ZXMiXV0sCiAgICAgICAgc291cmNlOiBbInNyY1NldCJdLAogICAgICAgIHN1bW1hcnk6IFsuLi5hcmlhXSwKICAgICAgICB0YWJsZTogWy4uLmFyaWFdLAogICAgICAgIC8vIE5vdGU6IHRoaXMgY2xhc3MgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGBvbGAgYXMgSFRNTCBpbiBtYXJrZG93biwgdGhleSBhZGRzIGl0IHNvbWUgb3RoZXIgd2F5LgogICAgICAgIC8vIFdlIGNhbuKAmXQgZG8gdGhhdCwgc28gd2UgaGF2ZSB0byBhbGxvdyBpdC4KICAgICAgICB1bDogWy4uLmFyaWEsIFsiY2xhc3NOYW1lIiwgImNvbnRhaW5zLXRhc2stbGlzdCJdXSwKICAgICAgICAiKiI6IFsKICAgICAgICAgICJhYmJyIiwKICAgICAgICAgICJhY2NlcHQiLAogICAgICAgICAgImFjY2VwdENoYXJzZXQiLAogICAgICAgICAgImFjY2Vzc0tleSIsCiAgICAgICAgICAiYWN0aW9uIiwKICAgICAgICAgICJhbGlnbiIsCiAgICAgICAgICAiYWx0IiwKICAgICAgICAgICJheGlzIiwKICAgICAgICAgICJib3JkZXIiLAogICAgICAgICAgImNlbGxQYWRkaW5nIiwKICAgICAgICAgICJjZWxsU3BhY2luZyIsCiAgICAgICAgICAiY2hhciIsCiAgICAgICAgICAiY2hhck9mZiIsCiAgICAgICAgICAiY2hhclNldCIsCiAgICAgICAgICAiY2hlY2tlZCIsCiAgICAgICAgICAiY2xlYXIiLAogICAgICAgICAgImNvbFNwYW4iLAogICAgICAgICAgImNvbG9yIiwKICAgICAgICAgICJjb2xzIiwKICAgICAgICAgICJjb21wYWN0IiwKICAgICAgICAgICJjb29yZHMiLAogICAgICAgICAgImRhdGVUaW1lIiwKICAgICAgICAgICJkaXIiLAogICAgICAgICAgLy8gTm90ZTogYGRpc2FibGVkYCBpcyB0ZWNobmljYWxseSBhbGxvd2VkIG9uIGFsbCBlbGVtZW50cyBieSBHSC4KICAgICAgICAgIC8vIEJ1dCBpdCBpcyB1c2VsZXNzIG9uIGV2ZXJ5dGhpbmcgZXhjZXB0IGBpbnB1dGAuCiAgICAgICAgICAvLyBCZWNhdXNlIGBpbnB1dGBzIGFyZSBub3JtYWxseSBub3QgYWxsb3dlZCwgYnV0IHdlIGFsbG93IHRoZW0gZm9yCiAgICAgICAgICAvLyBjaGVja2JveGVzIGR1ZSB0byB0YXNrbGlzdHMsIHdlIGFsbG93IGBkaXNhYmxlZGAgb25seSB0aGVyZS4KICAgICAgICAgICJlbmNUeXBlIiwKICAgICAgICAgICJmcmFtZSIsCiAgICAgICAgICAiaFNwYWNlIiwKICAgICAgICAgICJoZWFkZXJzIiwKICAgICAgICAgICJoZWlnaHQiLAogICAgICAgICAgImhyZWZMYW5nIiwKICAgICAgICAgICJodG1sRm9yIiwKICAgICAgICAgICJpZCIsCiAgICAgICAgICAiaXNNYXAiLAogICAgICAgICAgIml0ZW1Qcm9wIiwKICAgICAgICAgICJsYWJlbCIsCiAgICAgICAgICAibGFuZyIsCiAgICAgICAgICAibWF4TGVuZ3RoIiwKICAgICAgICAgICJtZWRpYSIsCiAgICAgICAgICAibWV0aG9kIiwKICAgICAgICAgICJtdWx0aXBsZSIsCiAgICAgICAgICAibmFtZSIsCiAgICAgICAgICAibm9IcmVmIiwKICAgICAgICAgICJub1NoYWRlIiwKICAgICAgICAgICJub1dyYXAiLAogICAgICAgICAgIm9wZW4iLAogICAgICAgICAgInByb21wdCIsCiAgICAgICAgICAicmVhZE9ubHkiLAogICAgICAgICAgInJldiIsCiAgICAgICAgICAicm93U3BhbiIsCiAgICAgICAgICAicm93cyIsCiAgICAgICAgICAicnVsZXMiLAogICAgICAgICAgInNjb3BlIiwKICAgICAgICAgICJzZWxlY3RlZCIsCiAgICAgICAgICAic2hhcGUiLAogICAgICAgICAgInNpemUiLAogICAgICAgICAgInNwYW4iLAogICAgICAgICAgInN0YXJ0IiwKICAgICAgICAgICJzdW1tYXJ5IiwKICAgICAgICAgICJ0YWJJbmRleCIsCiAgICAgICAgICAidGl0bGUiLAogICAgICAgICAgInVzZU1hcCIsCiAgICAgICAgICAidkFsaWduIiwKICAgICAgICAgICJ2YWx1ZSIsCiAgICAgICAgICAid2lkdGgiCiAgICAgICAgXQogICAgICB9LAogICAgICBjbG9iYmVyOiBbImFyaWFEZXNjcmliZWRCeSIsICJhcmlhTGFiZWxsZWRCeSIsICJpZCIsICJuYW1lIl0sCiAgICAgIGNsb2JiZXJQcmVmaXg6ICJ1c2VyLWNvbnRlbnQtIiwKICAgICAgcHJvdG9jb2xzOiB7CiAgICAgICAgY2l0ZTogWyJodHRwIiwgImh0dHBzIl0sCiAgICAgICAgaHJlZjogWyJodHRwIiwgImh0dHBzIiwgImlyYyIsICJpcmNzIiwgIm1haWx0byIsICJ4bXBwIl0sCiAgICAgICAgbG9uZ0Rlc2M6IFsiaHR0cCIsICJodHRwcyJdLAogICAgICAgIHNyYzogWyJodHRwIiwgImh0dHBzIl0KICAgICAgfSwKICAgICAgcmVxdWlyZWQ6IHsKICAgICAgICBpbnB1dDogeyBkaXNhYmxlZDogdHJ1ZSwgdHlwZTogImNoZWNrYm94IiB9CiAgICAgIH0sCiAgICAgIHN0cmlwOiBbInNjcmlwdCJdLAogICAgICB0YWdOYW1lczogWwogICAgICAgICJhIiwKICAgICAgICAiYiIsCiAgICAgICAgImJsb2NrcXVvdGUiLAogICAgICAgICJiciIsCiAgICAgICAgImNvZGUiLAogICAgICAgICJkZCIsCiAgICAgICAgImRlbCIsCiAgICAgICAgImRldGFpbHMiLAogICAgICAgICJkaXYiLAogICAgICAgICJkbCIsCiAgICAgICAgImR0IiwKICAgICAgICAiZW0iLAogICAgICAgICJoMSIsCiAgICAgICAgImgyIiwKICAgICAgICAiaDMiLAogICAgICAgICJoNCIsCiAgICAgICAgImg1IiwKICAgICAgICAiaDYiLAogICAgICAgICJociIsCiAgICAgICAgImkiLAogICAgICAgICJpbWciLAogICAgICAgIC8vIE5vdGU6IGBpbnB1dGAgaXMgbm90IG5vcm1hbGx5IGFsbG93ZWQgYnkgR0gsIHdoZW4gbWFudWFsbHkgd3JpdGluZwogICAgICAgIC8vIGl0IGluIG1hcmtkb3duLCB0aGV5IGFkZCBpdCBmcm9tIHRhc2tsaXN0cyBzb21lIG90aGVyIHdheS4KICAgICAgICAvLyBXZSBjYW7igJl0IGRvIHRoYXQsIHNvIHdlIGhhdmUgdG8gYWxsb3cgaXQuCiAgICAgICAgImlucHV0IiwKICAgICAgICAiaW5zIiwKICAgICAgICAia2JkIiwKICAgICAgICAibGkiLAogICAgICAgICJvbCIsCiAgICAgICAgInAiLAogICAgICAgICJwaWN0dXJlIiwKICAgICAgICAicHJlIiwKICAgICAgICAicSIsCiAgICAgICAgInJwIiwKICAgICAgICAicnQiLAogICAgICAgICJydWJ5IiwKICAgICAgICAicyIsCiAgICAgICAgInNhbXAiLAogICAgICAgICJzZWN0aW9uIiwKICAgICAgICAic291cmNlIiwKICAgICAgICAic3BhbiIsCiAgICAgICAgInN0cmlrZSIsCiAgICAgICAgInN0cm9uZyIsCiAgICAgICAgInN1YiIsCiAgICAgICAgInN1bW1hcnkiLAogICAgICAgICJzdXAiLAogICAgICAgICJ0YWJsZSIsCiAgICAgICAgInRib2R5IiwKICAgICAgICAidGQiLAogICAgICAgICJ0Zm9vdCIsCiAgICAgICAgInRoIiwKICAgICAgICAidGhlYWQiLAogICAgICAgICJ0ciIsCiAgICAgICAgInR0IiwKICAgICAgICAidWwiLAogICAgICAgICJ2YXIiCiAgICAgIF0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtc2FuaXRpemVANS4wLjIvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC1zYW5pdGl6ZS9saWIvaW5kZXguanMKZnVuY3Rpb24gc2FuaXRpemUobm9kZTIsIG9wdGlvbnMpIHsKICBsZXQgcmVzdWx0ID0geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiBbXSB9OwogIGNvbnN0IHN0YXRlMTIgPSB7CiAgICBzY2hlbWE6IG9wdGlvbnMgPyB7IC4uLmRlZmF1bHRTY2hlbWEsIC4uLm9wdGlvbnMgfSA6IGRlZmF1bHRTY2hlbWEsCiAgICBzdGFjazogW10KICB9OwogIGNvbnN0IHJlcGxhY2U1ID0gdHJhbnNmb3JtKHN0YXRlMTIsIG5vZGUyKTsKICBpZiAocmVwbGFjZTUpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHJlcGxhY2U1KSkgewogICAgICBpZiAocmVwbGFjZTUubGVuZ3RoID09PSAxKSB7CiAgICAgICAgcmVzdWx0ID0gcmVwbGFjZTVbMF07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmVzdWx0LmNoaWxkcmVuID0gcmVwbGFjZTU7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc3VsdCA9IHJlcGxhY2U1OwogICAgfQogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybShzdGF0ZTEyLCBub2RlMikgewogIGlmIChub2RlMiAmJiB0eXBlb2Ygbm9kZTIgPT09ICJvYmplY3QiKSB7CiAgICBjb25zdCB1bnNhZmUyID0gKAogICAgICAvKiogQHR5cGUge1JlY29yZDxzdHJpbmcsIFJlYWRvbmx5PHVua25vd24+Pn0gKi8KICAgICAgbm9kZTIKICAgICk7CiAgICBjb25zdCB0eXBlNSA9IHR5cGVvZiB1bnNhZmUyLnR5cGUgPT09ICJzdHJpbmciID8gdW5zYWZlMi50eXBlIDogIiI7CiAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgIGNhc2UgImNvbW1lbnQiOiB7CiAgICAgICAgcmV0dXJuIGNvbW1lbnQoc3RhdGUxMiwgdW5zYWZlMik7CiAgICAgIH0KICAgICAgY2FzZSAiZG9jdHlwZSI6IHsKICAgICAgICByZXR1cm4gZG9jdHlwZShzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJlbGVtZW50IjogewogICAgICAgIHJldHVybiBlbGVtZW50MihzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJyb290IjogewogICAgICAgIHJldHVybiByb290MihzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBjYXNlICJ0ZXh0IjogewogICAgICAgIHJldHVybiB0ZXh0NShzdGF0ZTEyLCB1bnNhZmUyKTsKICAgICAgfQogICAgICBkZWZhdWx0OgogICAgfQogIH0KfQpmdW5jdGlvbiBjb21tZW50KHN0YXRlMTIsIHVuc2FmZTIpIHsKICBpZiAoc3RhdGUxMi5zY2hlbWEuYWxsb3dDb21tZW50cykgewogICAgY29uc3QgcmVzdWx0ID0gdHlwZW9mIHVuc2FmZTIudmFsdWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi52YWx1ZSA6ICIiOwogICAgY29uc3QgaW5kZXgyID0gcmVzdWx0LmluZGV4T2YoIi0tPiIpOwogICAgY29uc3QgdmFsdWUyID0gaW5kZXgyIDwgMCA/IHJlc3VsdCA6IHJlc3VsdC5zbGljZSgwLCBpbmRleDIpOwogICAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJjb21tZW50IiwgdmFsdWU6IHZhbHVlMiB9OwogICAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogICAgcmV0dXJuIG5vZGUyOwogIH0KfQpmdW5jdGlvbiBkb2N0eXBlKHN0YXRlMTIsIHVuc2FmZTIpIHsKICBpZiAoc3RhdGUxMi5zY2hlbWEuYWxsb3dEb2N0eXBlcykgewogICAgY29uc3Qgbm9kZTIgPSB7IHR5cGU6ICJkb2N0eXBlIiB9OwogICAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogICAgcmV0dXJuIG5vZGUyOwogIH0KfQpmdW5jdGlvbiBlbGVtZW50MihzdGF0ZTEyLCB1bnNhZmUyKSB7CiAgY29uc3QgbmFtZSA9IHR5cGVvZiB1bnNhZmUyLnRhZ05hbWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi50YWdOYW1lIDogIiI7CiAgc3RhdGUxMi5zdGFjay5wdXNoKG5hbWUpOwogIGNvbnN0IGNvbnRlbnQzID0gKAogICAgLyoqIEB0eXBlIHtBcnJheTxFbGVtZW50Q29udGVudD59ICovCiAgICBjaGlsZHJlbihzdGF0ZTEyLCB1bnNhZmUyLmNoaWxkcmVuKQogICk7CiAgY29uc3QgcHJvcGVydGllc18gPSBwcm9wZXJ0aWVzKHN0YXRlMTIsIHVuc2FmZTIucHJvcGVydGllcyk7CiAgc3RhdGUxMi5zdGFjay5wb3AoKTsKICBsZXQgc2FmZUVsZW1lbnQgPSBmYWxzZTsKICBpZiAobmFtZSAmJiBuYW1lICE9PSAiKiIgJiYgKCFzdGF0ZTEyLnNjaGVtYS50YWdOYW1lcyB8fCBzdGF0ZTEyLnNjaGVtYS50YWdOYW1lcy5pbmNsdWRlcyhuYW1lKSkpIHsKICAgIHNhZmVFbGVtZW50ID0gdHJ1ZTsKICAgIGlmIChzdGF0ZTEyLnNjaGVtYS5hbmNlc3RvcnMgJiYgb3duNy5jYWxsKHN0YXRlMTIuc2NoZW1hLmFuY2VzdG9ycywgbmFtZSkpIHsKICAgICAgY29uc3QgYW5jZXN0b3JzID0gc3RhdGUxMi5zY2hlbWEuYW5jZXN0b3JzW25hbWVdOwogICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgIHNhZmVFbGVtZW50ID0gZmFsc2U7CiAgICAgIHdoaWxlICgrK2luZGV4MiA8IGFuY2VzdG9ycy5sZW5ndGgpIHsKICAgICAgICBpZiAoc3RhdGUxMi5zdGFjay5pbmNsdWRlcyhhbmNlc3RvcnNbaW5kZXgyXSkpIHsKICAgICAgICAgIHNhZmVFbGVtZW50ID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKCFzYWZlRWxlbWVudCkgewogICAgcmV0dXJuIHN0YXRlMTIuc2NoZW1hLnN0cmlwICYmICFzdGF0ZTEyLnNjaGVtYS5zdHJpcC5pbmNsdWRlcyhuYW1lKSA/IGNvbnRlbnQzIDogdm9pZCAwOwogIH0KICBjb25zdCBub2RlMiA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6IG5hbWUsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzXywKICAgIGNoaWxkcmVuOiBjb250ZW50MwogIH07CiAgcGF0Y2gobm9kZTIsIHVuc2FmZTIpOwogIHJldHVybiBub2RlMjsKfQpmdW5jdGlvbiByb290MihzdGF0ZTEyLCB1bnNhZmUyKSB7CiAgY29uc3QgY29udGVudDMgPSAoCiAgICAvKiogQHR5cGUge0FycmF5PFJvb3RDb250ZW50Pn0gKi8KICAgIGNoaWxkcmVuKHN0YXRlMTIsIHVuc2FmZTIuY2hpbGRyZW4pCiAgKTsKICBjb25zdCBub2RlMiA9IHsgdHlwZTogInJvb3QiLCBjaGlsZHJlbjogY29udGVudDMgfTsKICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIHRleHQ1KF80LCB1bnNhZmUyKSB7CiAgY29uc3QgdmFsdWUyID0gdHlwZW9mIHVuc2FmZTIudmFsdWUgPT09ICJzdHJpbmciID8gdW5zYWZlMi52YWx1ZSA6ICIiOwogIGNvbnN0IG5vZGUyID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB2YWx1ZTIgfTsKICBwYXRjaChub2RlMiwgdW5zYWZlMik7CiAgcmV0dXJuIG5vZGUyOwp9CmZ1bmN0aW9uIGNoaWxkcmVuKHN0YXRlMTIsIGNoaWxkcmVuMikgewogIGNvbnN0IHJlc3VsdHMgPSBbXTsKICBpZiAoQXJyYXkuaXNBcnJheShjaGlsZHJlbjIpKSB7CiAgICBjb25zdCBjaGlsZHJlblVua25vd24gPSAoCiAgICAgIC8qKiBAdHlwZSB7QXJyYXk8UmVhZG9ubHk8dW5rbm93bj4+fSAqLwogICAgICBjaGlsZHJlbjIKICAgICk7CiAgICBsZXQgaW5kZXgyID0gLTE7CiAgICB3aGlsZSAoKytpbmRleDIgPCBjaGlsZHJlblVua25vd24ubGVuZ3RoKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHRyYW5zZm9ybShzdGF0ZTEyLCBjaGlsZHJlblVua25vd25baW5kZXgyXSk7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBpZiAoQXJyYXkuaXNBcnJheSh2YWx1ZTIpKSB7CiAgICAgICAgICByZXN1bHRzLnB1c2goLi4udmFsdWUyKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmVzdWx0cy5wdXNoKHZhbHVlMik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiByZXN1bHRzOwp9CmZ1bmN0aW9uIHByb3BlcnRpZXMoc3RhdGUxMiwgcHJvcGVydGllczIpIHsKICBjb25zdCB0YWdOYW1lID0gc3RhdGUxMi5zdGFja1tzdGF0ZTEyLnN0YWNrLmxlbmd0aCAtIDFdOwogIGNvbnN0IGF0dHJpYnV0ZXMgPSBzdGF0ZTEyLnNjaGVtYS5hdHRyaWJ1dGVzOwogIGNvbnN0IHJlcXVpcmVkID0gc3RhdGUxMi5zY2hlbWEucmVxdWlyZWQ7CiAgY29uc3Qgc3BlY2lmaWMgPSBhdHRyaWJ1dGVzICYmIG93bjcuY2FsbChhdHRyaWJ1dGVzLCB0YWdOYW1lKSA/IGF0dHJpYnV0ZXNbdGFnTmFtZV0gOiB2b2lkIDA7CiAgY29uc3QgZGVmYXVsdHMgPSBhdHRyaWJ1dGVzICYmIG93bjcuY2FsbChhdHRyaWJ1dGVzLCAiKiIpID8gYXR0cmlidXRlc1siKiJdIDogdm9pZCAwOwogIGNvbnN0IHByb3BlcnRpZXNfID0gKAogICAgLyoqIEB0eXBlIHtSZWFkb25seTxSZWNvcmQ8c3RyaW5nLCBSZWFkb25seTx1bmtub3duPj4+fSAqLwogICAgcHJvcGVydGllczIgJiYgdHlwZW9mIHByb3BlcnRpZXMyID09PSAib2JqZWN0IiA/IHByb3BlcnRpZXMyIDoge30KICApOwogIGNvbnN0IHJlc3VsdCA9IHt9OwogIGxldCBrZXkyOwogIGZvciAoa2V5MiBpbiBwcm9wZXJ0aWVzXykgewogICAgaWYgKG93bjcuY2FsbChwcm9wZXJ0aWVzXywga2V5MikpIHsKICAgICAgY29uc3QgdW5zYWZlMiA9IHByb3BlcnRpZXNfW2tleTJdOwogICAgICBsZXQgc2FmZTIgPSBwcm9wZXJ0eVZhbHVlKAogICAgICAgIHN0YXRlMTIsCiAgICAgICAgZmluZERlZmluaXRpb24oc3BlY2lmaWMsIGtleTIpLAogICAgICAgIGtleTIsCiAgICAgICAgdW5zYWZlMgogICAgICApOwogICAgICBpZiAoc2FmZTIgPT09IG51bGwgfHwgc2FmZTIgPT09IHZvaWQgMCkgewogICAgICAgIHNhZmUyID0gcHJvcGVydHlWYWx1ZShzdGF0ZTEyLCBmaW5kRGVmaW5pdGlvbihkZWZhdWx0cywga2V5MiksIGtleTIsIHVuc2FmZTIpOwogICAgICB9CiAgICAgIGlmIChzYWZlMiAhPT0gbnVsbCAmJiBzYWZlMiAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmVzdWx0W2tleTJdID0gc2FmZTI7CiAgICAgIH0KICAgIH0KICB9CiAgaWYgKHJlcXVpcmVkICYmIG93bjcuY2FsbChyZXF1aXJlZCwgdGFnTmFtZSkpIHsKICAgIGNvbnN0IHByb3BlcnRpZXMzID0gcmVxdWlyZWRbdGFnTmFtZV07CiAgICBmb3IgKGtleTIgaW4gcHJvcGVydGllczMpIHsKICAgICAgaWYgKG93bjcuY2FsbChwcm9wZXJ0aWVzMywga2V5MikgJiYgIW93bjcuY2FsbChyZXN1bHQsIGtleTIpKSB7CiAgICAgICAgcmVzdWx0W2tleTJdID0gcHJvcGVydGllczNba2V5Ml07CiAgICAgIH0KICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBwcm9wZXJ0eVZhbHVlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIHsKICByZXR1cm4gZGVmaW5pdGlvbjMgPyBBcnJheS5pc0FycmF5KHZhbHVlMikgPyBwcm9wZXJ0eVZhbHVlTWFueShzdGF0ZTEyLCBkZWZpbml0aW9uMywga2V5MiwgdmFsdWUyKSA6IHByb3BlcnR5VmFsdWVQcmltaXRpdmUoc3RhdGUxMiwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlMikgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gcHJvcGVydHlWYWx1ZU1hbnkoc3RhdGUxMiwgZGVmaW5pdGlvbjMsIGtleTIsIHZhbHVlcykgewogIGxldCBpbmRleDIgPSAtMTsKICBjb25zdCByZXN1bHQgPSBbXTsKICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZXMubGVuZ3RoKSB7CiAgICBjb25zdCB2YWx1ZTIgPSBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZXNbaW5kZXgyXSk7CiAgICBpZiAodHlwZW9mIHZhbHVlMiA9PT0gIm51bWJlciIgfHwgdHlwZW9mIHZhbHVlMiA9PT0gInN0cmluZyIpIHsKICAgICAgcmVzdWx0LnB1c2godmFsdWUyKTsKICAgIH0KICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBwcm9wZXJ0eVZhbHVlUHJpbWl0aXZlKHN0YXRlMTIsIGRlZmluaXRpb24zLCBrZXkyLCB2YWx1ZTIpIHsKICBpZiAodHlwZW9mIHZhbHVlMiAhPT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJudW1iZXIiICYmIHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm47CiAgfQogIGlmICghc2FmZVByb3RvY29sKHN0YXRlMTIsIGtleTIsIHZhbHVlMikpIHsKICAgIHJldHVybjsKICB9CiAgaWYgKHR5cGVvZiBkZWZpbml0aW9uMyA9PT0gIm9iamVjdCIgJiYgZGVmaW5pdGlvbjMubGVuZ3RoID4gMSkgewogICAgbGV0IG9rMyA9IGZhbHNlOwogICAgbGV0IGluZGV4MiA9IDA7CiAgICB3aGlsZSAoKytpbmRleDIgPCBkZWZpbml0aW9uMy5sZW5ndGgpIHsKICAgICAgY29uc3QgYWxsb3dlZCA9IGRlZmluaXRpb24zW2luZGV4Ml07CiAgICAgIGlmIChhbGxvd2VkICYmIHR5cGVvZiBhbGxvd2VkID09PSAib2JqZWN0IiAmJiAiZmxhZ3MiIGluIGFsbG93ZWQpIHsKICAgICAgICBpZiAoYWxsb3dlZC50ZXN0KFN0cmluZyh2YWx1ZTIpKSkgewogICAgICAgICAgb2szID0gdHJ1ZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChhbGxvd2VkID09PSB2YWx1ZTIpIHsKICAgICAgICBvazMgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICB9CiAgICBpZiAoIW9rMykgcmV0dXJuOwogIH0KICByZXR1cm4gc3RhdGUxMi5zY2hlbWEuY2xvYmJlciAmJiBzdGF0ZTEyLnNjaGVtYS5jbG9iYmVyUHJlZml4ICYmIHN0YXRlMTIuc2NoZW1hLmNsb2JiZXIuaW5jbHVkZXMoa2V5MikgPyBzdGF0ZTEyLnNjaGVtYS5jbG9iYmVyUHJlZml4ICsgdmFsdWUyIDogdmFsdWUyOwp9CmZ1bmN0aW9uIHNhZmVQcm90b2NvbChzdGF0ZTEyLCBrZXkyLCB2YWx1ZTIpIHsKICBjb25zdCBwcm90b2NvbHMgPSBzdGF0ZTEyLnNjaGVtYS5wcm90b2NvbHMgJiYgb3duNy5jYWxsKHN0YXRlMTIuc2NoZW1hLnByb3RvY29scywga2V5MikgPyBzdGF0ZTEyLnNjaGVtYS5wcm90b2NvbHNba2V5Ml0gOiB2b2lkIDA7CiAgaWYgKCFwcm90b2NvbHMgfHwgcHJvdG9jb2xzLmxlbmd0aCA9PT0gMCkgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGNvbnN0IHVybCA9IFN0cmluZyh2YWx1ZTIpOwogIGNvbnN0IGNvbG9uID0gdXJsLmluZGV4T2YoIjoiKTsKICBjb25zdCBxdWVzdGlvbk1hcmsgPSB1cmwuaW5kZXhPZigiPyIpOwogIGNvbnN0IG51bWJlclNpZ24gPSB1cmwuaW5kZXhPZigiIyIpOwogIGNvbnN0IHNsYXNoID0gdXJsLmluZGV4T2YoIi8iKTsKICBpZiAoY29sb24gPCAwIHx8IC8vIElmIHRoZSBmaXJzdCBjb2xvbiBpcyBhZnRlciBhIGA/YCwgYCNgLCBvciBgL2AsIGl04oCZcyBub3QgYSBwcm90b2NvbC4KICBzbGFzaCA+IC0xICYmIGNvbG9uID4gc2xhc2ggfHwgcXVlc3Rpb25NYXJrID4gLTEgJiYgY29sb24gPiBxdWVzdGlvbk1hcmsgfHwgbnVtYmVyU2lnbiA+IC0xICYmIGNvbG9uID4gbnVtYmVyU2lnbikgewogICAgcmV0dXJuIHRydWU7CiAgfQogIGxldCBpbmRleDIgPSAtMTsKICB3aGlsZSAoKytpbmRleDIgPCBwcm90b2NvbHMubGVuZ3RoKSB7CiAgICBjb25zdCBwcm90b2NvbCA9IHByb3RvY29sc1tpbmRleDJdOwogICAgaWYgKGNvbG9uID09PSBwcm90b2NvbC5sZW5ndGggJiYgdXJsLnNsaWNlKDAsIHByb3RvY29sLmxlbmd0aCkgPT09IHByb3RvY29sKSB7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gcGF0Y2gobm9kZTIsIHVuc2FmZTIpIHsKICBjb25zdCBjbGVhblBvc2l0aW9uID0gcG9zaXRpb24yKAogICAgLy8gQHRzLWV4cGVjdC1lcnJvcjogbG9va3MgbGlrZSBhIG5vZGUuCiAgICB1bnNhZmUyCiAgKTsKICBpZiAodW5zYWZlMi5kYXRhKSB7CiAgICBub2RlMi5kYXRhID0gZXNtX2RlZmF1bHQodW5zYWZlMi5kYXRhKTsKICB9CiAgaWYgKGNsZWFuUG9zaXRpb24pIG5vZGUyLnBvc2l0aW9uID0gY2xlYW5Qb3NpdGlvbjsKfQpmdW5jdGlvbiBmaW5kRGVmaW5pdGlvbihkZWZpbml0aW9ucywga2V5MikgewogIGxldCBkYXRhRGVmYXVsdDsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKGRlZmluaXRpb25zKSB7CiAgICB3aGlsZSAoKytpbmRleDIgPCBkZWZpbml0aW9ucy5sZW5ndGgpIHsKICAgICAgY29uc3QgZW50cnkgPSBkZWZpbml0aW9uc1tpbmRleDJdOwogICAgICBjb25zdCBuYW1lID0gdHlwZW9mIGVudHJ5ID09PSAic3RyaW5nIiA/IGVudHJ5IDogZW50cnlbMF07CiAgICAgIGlmIChuYW1lID09PSBrZXkyKSB7CiAgICAgICAgcmV0dXJuIGVudHJ5OwogICAgICB9CiAgICAgIGlmIChuYW1lID09PSAiZGF0YSoiKSBkYXRhRGVmYXVsdCA9IGVudHJ5OwogICAgfQogIH0KICBpZiAoa2V5Mi5sZW5ndGggPiA0ICYmIGtleTIuc2xpY2UoMCwgNCkudG9Mb3dlckNhc2UoKSA9PT0gImRhdGEiKSB7CiAgICByZXR1cm4gZGF0YURlZmF1bHQ7CiAgfQp9CnZhciBvd243Owp2YXIgaW5pdF9saWIyNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC1zYW5pdGl6ZUA1LjAuMi9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXNhbml0aXplL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3Bvc2l0aW9uKCk7CiAgICBpbml0X3NjaGVtYSgpOwogICAgb3duNyA9IHt9Lmhhc093blByb3BlcnR5OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3Nhbml0aXplID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXNhbml0aXplQDUuMC4yL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtc2FuaXRpemUvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyNigpOwogICAgaW5pdF9zY2hlbWEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcwpmdW5jdGlvbiBibG9ja3F1b3RlMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJibG9ja3F1b3RlIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTIud3JhcChzdGF0ZTEyLmFsbChub2RlMiksIHRydWUpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9ibG9ja3F1b3RlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYmxvY2txdW90ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2JyZWFrLmpzCmZ1bmN0aW9uIGhhcmRCcmVhazIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImJyIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIFtzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KSwgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH1dOwp9CnZhciBpbml0X2JyZWFrMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzCmZ1bmN0aW9uIGNvZGUzKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgdmFsdWUyID0gbm9kZTIudmFsdWUgPyBub2RlMi52YWx1ZSArICJcbiIgOiAiIjsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHt9OwogIGNvbnN0IGxhbmd1YWdlID0gbm9kZTIubGFuZyA/IG5vZGUyLmxhbmcuc3BsaXQoL1xzKy8pIDogW107CiAgaWYgKGxhbmd1YWdlLmxlbmd0aCA+IDApIHsKICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsibGFuZ3VhZ2UtIiArIGxhbmd1YWdlWzBdXTsKICB9CiAgbGV0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJjb2RlIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IHZhbHVlMiB9XQogIH07CiAgaWYgKG5vZGUyLm1ldGEpIHsKICAgIHJlc3VsdC5kYXRhID0geyBtZXRhOiBub2RlMi5tZXRhIH07CiAgfQogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmVzdWx0ID0gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7CiAgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwcmUiLCBwcm9wZXJ0aWVzOiB7fSwgY2hpbGRyZW46IFtyZXN1bHRdIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gcmVzdWx0Owp9CnZhciBpbml0X2NvZGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZGVsZXRlLmpzCmZ1bmN0aW9uIHN0cmlrZXRocm91Z2goc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZGVsIiwKICAgIHByb3BlcnRpZXM6IHt9LAogICAgY2hpbGRyZW46IHN0YXRlMTIuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfZGVsZXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9kZWxldGUuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9lbXBoYXNpcy5qcwpmdW5jdGlvbiBlbXBoYXNpczIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiZW0iLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9lbXBoYXNpczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2VtcGhhc2lzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvZm9vdG5vdGUtcmVmZXJlbmNlLmpzCmZ1bmN0aW9uIGZvb3Rub3RlUmVmZXJlbmNlMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IGNsb2JiZXJQcmVmaXggPSB0eXBlb2Ygc3RhdGUxMi5vcHRpb25zLmNsb2JiZXJQcmVmaXggPT09ICJzdHJpbmciID8gc3RhdGUxMi5vcHRpb25zLmNsb2JiZXJQcmVmaXggOiAidXNlci1jb250ZW50LSI7CiAgY29uc3QgaWQgPSBTdHJpbmcobm9kZTIuaWRlbnRpZmllcikudG9VcHBlckNhc2UoKTsKICBjb25zdCBzYWZlSWQgPSBub3JtYWxpemVVcmkoaWQudG9Mb3dlckNhc2UoKSk7CiAgY29uc3QgaW5kZXgyID0gc3RhdGUxMi5mb290bm90ZU9yZGVyLmluZGV4T2YoaWQpOwogIGxldCBjb3VudGVyMjsKICBsZXQgcmV1c2VDb3VudGVyID0gc3RhdGUxMi5mb290bm90ZUNvdW50cy5nZXQoaWQpOwogIGlmIChyZXVzZUNvdW50ZXIgPT09IHZvaWQgMCkgewogICAgcmV1c2VDb3VudGVyID0gMDsKICAgIHN0YXRlMTIuZm9vdG5vdGVPcmRlci5wdXNoKGlkKTsKICAgIGNvdW50ZXIyID0gc3RhdGUxMi5mb290bm90ZU9yZGVyLmxlbmd0aDsKICB9IGVsc2UgewogICAgY291bnRlcjIgPSBpbmRleDIgKyAxOwogIH0KICByZXVzZUNvdW50ZXIgKz0gMTsKICBzdGF0ZTEyLmZvb3Rub3RlQ291bnRzLnNldChpZCwgcmV1c2VDb3VudGVyKTsKICBjb25zdCBsaW5rMyA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHsKICAgICAgaHJlZjogIiMiICsgY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkLAogICAgICBpZDogY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJldXNlQ291bnRlciA+IDEgPyAiLSIgKyByZXVzZUNvdW50ZXIgOiAiIiksCiAgICAgIGRhdGFGb290bm90ZVJlZjogdHJ1ZSwKICAgICAgYXJpYURlc2NyaWJlZEJ5OiBbImZvb3Rub3RlLWxhYmVsIl0KICAgIH0sCiAgICBjaGlsZHJlbjogW3sgdHlwZTogInRleHQiLCB2YWx1ZTogU3RyaW5nKGNvdW50ZXIyKSB9XQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgbGluazMpOwogIGNvbnN0IHN1cCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJzdXAiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW2xpbmszXQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgc3VwKTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHN1cCk7Cn0KdmFyIGluaXRfZm9vdG5vdGVfcmVmZXJlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9mb290bm90ZS1yZWZlcmVuY2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcwpmdW5jdGlvbiBoZWFkaW5nMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJoIiArIG5vZGUyLmRlcHRoLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9oZWFkaW5nMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaGVhZGluZy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2h0bWwuanMKZnVuY3Rpb24gaHRtbDIoc3RhdGUxMiwgbm9kZTIpIHsKICBpZiAoc3RhdGUxMi5vcHRpb25zLmFsbG93RGFuZ2Vyb3VzSHRtbCkgewogICAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAicmF3IiwgdmFsdWU6IG5vZGUyLnZhbHVlIH07CiAgICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogICAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwogIH0KICByZXR1cm4gdm9pZCAwOwp9CnZhciBpbml0X2h0bWw4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9odG1sLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvcmV2ZXJ0LmpzCmZ1bmN0aW9uIHJldmVydChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHN1YnR5cGUgPSBub2RlMi5yZWZlcmVuY2VUeXBlOwogIGxldCBzdWZmaXggPSAiXSI7CiAgaWYgKHN1YnR5cGUgPT09ICJjb2xsYXBzZWQiKSB7CiAgICBzdWZmaXggKz0gIltdIjsKICB9IGVsc2UgaWYgKHN1YnR5cGUgPT09ICJmdWxsIikgewogICAgc3VmZml4ICs9ICJbIiArIChub2RlMi5sYWJlbCB8fCBub2RlMi5pZGVudGlmaWVyKSArICJdIjsKICB9CiAgaWYgKG5vZGUyLnR5cGUgPT09ICJpbWFnZVJlZmVyZW5jZSIpIHsKICAgIHJldHVybiBbeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiIVsiICsgbm9kZTIuYWx0ICsgc3VmZml4IH1dOwogIH0KICBjb25zdCBjb250ZW50cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBjb25zdCBoZWFkMiA9IGNvbnRlbnRzWzBdOwogIGlmIChoZWFkMiAmJiBoZWFkMi50eXBlID09PSAidGV4dCIpIHsKICAgIGhlYWQyLnZhbHVlID0gIlsiICsgaGVhZDIudmFsdWU7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnVuc2hpZnQoeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiWyIgfSk7CiAgfQogIGNvbnN0IHRhaWwgPSBjb250ZW50c1tjb250ZW50cy5sZW5ndGggLSAxXTsKICBpZiAodGFpbCAmJiB0YWlsLnR5cGUgPT09ICJ0ZXh0IikgewogICAgdGFpbC52YWx1ZSArPSBzdWZmaXg7CiAgfSBlbHNlIHsKICAgIGNvbnRlbnRzLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiBzdWZmaXggfSk7CiAgfQogIHJldHVybiBjb250ZW50czsKfQp2YXIgaW5pdF9yZXZlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL3JldmVydC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2ltYWdlLXJlZmVyZW5jZS5qcwpmdW5jdGlvbiBpbWFnZVJlZmVyZW5jZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxMi5kZWZpbml0aW9uQnlJZC5nZXQoaWQpOwogIGlmICghZGVmaW5pdGlvbjMpIHsKICAgIHJldHVybiByZXZlcnQoc3RhdGUxMiwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkoZGVmaW5pdGlvbjMudXJsIHx8ICIiKSwgYWx0OiBub2RlMi5hbHQgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJpbWciLCBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwgY2hpbGRyZW46IFtdIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfaW1hZ2VfcmVmZXJlbmNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UtcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBpbml0X3JldmVydCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbWFnZS5qcwpmdW5jdGlvbiBpbWFnZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgc3JjOiBub3JtYWxpemVVcmkobm9kZTIudXJsKSB9OwogIGlmIChub2RlMi5hbHQgIT09IG51bGwgJiYgbm9kZTIuYWx0ICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLmFsdCA9IG5vZGUyLmFsdDsKICB9CiAgaWYgKG5vZGUyLnRpdGxlICE9PSBudWxsICYmIG5vZGUyLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gbm9kZTIudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsgdHlwZTogImVsZW1lbnQiLCB0YWdOYW1lOiAiaW1nIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2ltYWdlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW1hZ2UuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvaW5saW5lLWNvZGUuanMKZnVuY3Rpb24gaW5saW5lQ29kZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCB0ZXh0OSA9IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKSB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHRleHQ5KTsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiY29kZSIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBbdGV4dDldCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9pbmxpbmVfY29kZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2lubGluZS1jb2RlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGluay1yZWZlcmVuY2UuanMKZnVuY3Rpb24gbGlua1JlZmVyZW5jZTIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogIGNvbnN0IGRlZmluaXRpb24zID0gc3RhdGUxMi5kZWZpbml0aW9uQnlJZC5nZXQoaWQpOwogIGlmICghZGVmaW5pdGlvbjMpIHsKICAgIHJldHVybiByZXZlcnQoc3RhdGUxMiwgbm9kZTIpOwogIH0KICBjb25zdCBwcm9wZXJ0aWVzMiA9IHsgaHJlZjogbm9ybWFsaXplVXJpKGRlZmluaXRpb24zLnVybCB8fCAiIikgfTsKICBpZiAoZGVmaW5pdGlvbjMudGl0bGUgIT09IG51bGwgJiYgZGVmaW5pdGlvbjMudGl0bGUgIT09IHZvaWQgMCkgewogICAgcHJvcGVydGllczIudGl0bGUgPSBkZWZpbml0aW9uMy50aXRsZTsKICB9CiAgY29uc3QgcmVzdWx0ID0gewogICAgdHlwZTogImVsZW1lbnQiLAogICAgdGFnTmFtZTogImEiLAogICAgcHJvcGVydGllczogcHJvcGVydGllczIsCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9saW5rX3JlZmVyZW5jZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmstcmVmZXJlbmNlLmpzIigpIHsKICAgIGluaXRfbWljcm9tYXJrX3V0aWxfc2FuaXRpemVfdXJpKCk7CiAgICBpbml0X3JldmVydCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saW5rLmpzCmZ1bmN0aW9uIGxpbmsyKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgcHJvcGVydGllczIgPSB7IGhyZWY6IG5vcm1hbGl6ZVVyaShub2RlMi51cmwpIH07CiAgaWYgKG5vZGUyLnRpdGxlICE9PSBudWxsICYmIG5vZGUyLnRpdGxlICE9PSB2b2lkIDApIHsKICAgIHByb3BlcnRpZXMyLnRpdGxlID0gbm9kZTIudGl0bGU7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJhIiwKICAgIHByb3BlcnRpZXM6IHByb3BlcnRpZXMyLAogICAgY2hpbGRyZW46IHN0YXRlMTIuYWxsKG5vZGUyKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfbGluazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL2xpbmsuanMiKCkgewogICAgaW5pdF9taWNyb21hcmtfdXRpbF9zYW5pdGl6ZV91cmkoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC1pdGVtLmpzCmZ1bmN0aW9uIGxpc3RJdGVtMihzdGF0ZTEyLCBub2RlMiwgcGFyZW50KSB7CiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBjb25zdCBsb29zZSA9IHBhcmVudCA/IGxpc3RMb29zZShwYXJlbnQpIDogbGlzdEl0ZW1Mb29zZShub2RlMik7CiAgY29uc3QgcHJvcGVydGllczIgPSB7fTsKICBjb25zdCBjaGlsZHJlbjIgPSBbXTsKICBpZiAodHlwZW9mIG5vZGUyLmNoZWNrZWQgPT09ICJib29sZWFuIikgewogICAgY29uc3QgaGVhZDIgPSByZXN1bHRzWzBdOwogICAgbGV0IHBhcmFncmFwaDM7CiAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gImVsZW1lbnQiICYmIGhlYWQyLnRhZ05hbWUgPT09ICJwIikgewogICAgICBwYXJhZ3JhcGgzID0gaGVhZDI7CiAgICB9IGVsc2UgewogICAgICBwYXJhZ3JhcGgzID0geyB0eXBlOiAiZWxlbWVudCIsIHRhZ05hbWU6ICJwIiwgcHJvcGVydGllczoge30sIGNoaWxkcmVuOiBbXSB9OwogICAgICByZXN1bHRzLnVuc2hpZnQocGFyYWdyYXBoMyk7CiAgICB9CiAgICBpZiAocGFyYWdyYXBoMy5jaGlsZHJlbi5sZW5ndGggPiAwKSB7CiAgICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgIH0KICAgIHBhcmFncmFwaDMuY2hpbGRyZW4udW5zaGlmdCh7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogImlucHV0IiwKICAgICAgcHJvcGVydGllczogeyB0eXBlOiAiY2hlY2tib3giLCBjaGVja2VkOiBub2RlMi5jaGVja2VkLCBkaXNhYmxlZDogdHJ1ZSB9LAogICAgICBjaGlsZHJlbjogW10KICAgIH0pOwogICAgcHJvcGVydGllczIuY2xhc3NOYW1lID0gWyJ0YXNrLWxpc3QtaXRlbSJdOwogIH0KICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgcmVzdWx0cy5sZW5ndGgpIHsKICAgIGNvbnN0IGNoaWxkID0gcmVzdWx0c1tpbmRleDJdOwogICAgaWYgKGxvb3NlIHx8IGluZGV4MiAhPT0gMCB8fCBjaGlsZC50eXBlICE9PSAiZWxlbWVudCIgfHwgY2hpbGQudGFnTmFtZSAhPT0gInAiKSB7CiAgICAgIGNoaWxkcmVuMi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9KTsKICAgIH0KICAgIGlmIChjaGlsZC50eXBlID09PSAiZWxlbWVudCIgJiYgY2hpbGQudGFnTmFtZSA9PT0gInAiICYmICFsb29zZSkgewogICAgICBjaGlsZHJlbjIucHVzaCguLi5jaGlsZC5jaGlsZHJlbik7CiAgICB9IGVsc2UgewogICAgICBjaGlsZHJlbjIucHVzaChjaGlsZCk7CiAgICB9CiAgfQogIGNvbnN0IHRhaWwgPSByZXN1bHRzW3Jlc3VsdHMubGVuZ3RoIC0gMV07CiAgaWYgKHRhaWwgJiYgKGxvb3NlIHx8IHRhaWwudHlwZSAhPT0gImVsZW1lbnQiIHx8IHRhaWwudGFnTmFtZSAhPT0gInAiKSkgewogICAgY2hpbGRyZW4yLnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogIH0KICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogImxpIiwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBjaGlsZHJlbjIgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQpmdW5jdGlvbiBsaXN0TG9vc2Uobm9kZTIpIHsKICBsZXQgbG9vc2UgPSBmYWxzZTsKICBpZiAobm9kZTIudHlwZSA9PT0gImxpc3QiKSB7CiAgICBsb29zZSA9IG5vZGUyLnNwcmVhZCB8fCBmYWxzZTsKICAgIGNvbnN0IGNoaWxkcmVuMiA9IG5vZGUyLmNoaWxkcmVuOwogICAgbGV0IGluZGV4MiA9IC0xOwogICAgd2hpbGUgKCFsb29zZSAmJiArK2luZGV4MiA8IGNoaWxkcmVuMi5sZW5ndGgpIHsKICAgICAgbG9vc2UgPSBsaXN0SXRlbUxvb3NlKGNoaWxkcmVuMltpbmRleDJdKTsKICAgIH0KICB9CiAgcmV0dXJuIGxvb3NlOwp9CmZ1bmN0aW9uIGxpc3RJdGVtTG9vc2Uobm9kZTIpIHsKICBjb25zdCBzcHJlYWQgPSBub2RlMi5zcHJlYWQ7CiAgcmV0dXJuIHNwcmVhZCA9PT0gbnVsbCB8fCBzcHJlYWQgPT09IHZvaWQgMCA/IG5vZGUyLmNoaWxkcmVuLmxlbmd0aCA+IDEgOiBzcHJlYWQ7Cn0KdmFyIGluaXRfbGlzdF9pdGVtMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC1pdGVtLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvbGlzdC5qcwpmdW5jdGlvbiBsaXN0NChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3QgcmVzdWx0cyA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKHR5cGVvZiBub2RlMi5zdGFydCA9PT0gIm51bWJlciIgJiYgbm9kZTIuc3RhcnQgIT09IDEpIHsKICAgIHByb3BlcnRpZXMyLnN0YXJ0ID0gbm9kZTIuc3RhcnQ7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IHJlc3VsdHMubGVuZ3RoKSB7CiAgICBjb25zdCBjaGlsZCA9IHJlc3VsdHNbaW5kZXgyXTsKICAgIGlmIChjaGlsZC50eXBlID09PSAiZWxlbWVudCIgJiYgY2hpbGQudGFnTmFtZSA9PT0gImxpIiAmJiBjaGlsZC5wcm9wZXJ0aWVzICYmIEFycmF5LmlzQXJyYXkoY2hpbGQucHJvcGVydGllcy5jbGFzc05hbWUpICYmIGNoaWxkLnByb3BlcnRpZXMuY2xhc3NOYW1lLmluY2x1ZGVzKCJ0YXNrLWxpc3QtaXRlbSIpKSB7CiAgICAgIHByb3BlcnRpZXMyLmNsYXNzTmFtZSA9IFsiY29udGFpbnMtdGFzay1saXN0Il07CiAgICAgIGJyZWFrOwogICAgfQogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiBub2RlMi5vcmRlcmVkID8gIm9sIiA6ICJ1bCIsCiAgICBwcm9wZXJ0aWVzOiBwcm9wZXJ0aWVzMiwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAocmVzdWx0cywgdHJ1ZSkKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X2xpc3QzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9saXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvcGFyYWdyYXBoLmpzCmZ1bmN0aW9uIHBhcmFncmFwaDIoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAicCIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLmFsbChub2RlMikKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3BhcmFncmFwaDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3BhcmFncmFwaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3Jvb3QuanMKZnVuY3Rpb24gcm9vdDMoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IHN0YXRlMTIud3JhcChzdGF0ZTEyLmFsbChub2RlMikpIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfcm9vdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2hhbmRsZXJzL3Jvb3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9zdHJvbmcuanMKZnVuY3Rpb24gc3Ryb25nMihzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJzdHJvbmciLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF9zdHJvbmcyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9zdHJvbmcuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS5qcwpmdW5jdGlvbiB0YWJsZShzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJvd3MgPSBzdGF0ZTEyLmFsbChub2RlMik7CiAgY29uc3QgZmlyc3RSb3cgPSByb3dzLnNoaWZ0KCk7CiAgY29uc3QgdGFibGVDb250ZW50ID0gW107CiAgaWYgKGZpcnN0Um93KSB7CiAgICBjb25zdCBoZWFkMiA9IHsKICAgICAgdHlwZTogImVsZW1lbnQiLAogICAgICB0YWdOYW1lOiAidGhlYWQiLAogICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgY2hpbGRyZW46IHN0YXRlMTIud3JhcChbZmlyc3RSb3ddLCB0cnVlKQogICAgfTsKICAgIHN0YXRlMTIucGF0Y2gobm9kZTIuY2hpbGRyZW5bMF0sIGhlYWQyKTsKICAgIHRhYmxlQ29udGVudC5wdXNoKGhlYWQyKTsKICB9CiAgaWYgKHJvd3MubGVuZ3RoID4gMCkgewogICAgY29uc3QgYm9keTMgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogInRib2R5IiwKICAgICAgcHJvcGVydGllczoge30sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAocm93cywgdHJ1ZSkKICAgIH07CiAgICBjb25zdCBzdGFydCA9IHBvaW50U3RhcnQobm9kZTIuY2hpbGRyZW5bMV0pOwogICAgY29uc3QgZW5kMyA9IHBvaW50RW5kKG5vZGUyLmNoaWxkcmVuW25vZGUyLmNoaWxkcmVuLmxlbmd0aCAtIDFdKTsKICAgIGlmIChzdGFydCAmJiBlbmQzKSBib2R5My5wb3NpdGlvbiA9IHsgc3RhcnQsIGVuZDogZW5kMyB9OwogICAgdGFibGVDb250ZW50LnB1c2goYm9keTMpOwogIH0KICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAidGFibGUiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi53cmFwKHRhYmxlQ29udGVudCwgdHJ1ZSkKICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS5qcyIoKSB7CiAgICBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGFibGUtcm93LmpzCmZ1bmN0aW9uIHRhYmxlUm93KHN0YXRlMTIsIG5vZGUyLCBwYXJlbnQpIHsKICBjb25zdCBzaWJsaW5nczIgPSBwYXJlbnQgPyBwYXJlbnQuY2hpbGRyZW4gOiB2b2lkIDA7CiAgY29uc3Qgcm93SW5kZXggPSBzaWJsaW5nczIgPyBzaWJsaW5nczIuaW5kZXhPZihub2RlMikgOiAxOwogIGNvbnN0IHRhZ05hbWUgPSByb3dJbmRleCA9PT0gMCA/ICJ0aCIgOiAidGQiOwogIGNvbnN0IGFsaWduID0gcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAidGFibGUiID8gcGFyZW50LmFsaWduIDogdm9pZCAwOwogIGNvbnN0IGxlbmd0aCA9IGFsaWduID8gYWxpZ24ubGVuZ3RoIDogbm9kZTIuY2hpbGRyZW4ubGVuZ3RoOwogIGxldCBjZWxsSW5kZXggPSAtMTsKICBjb25zdCBjZWxsczIgPSBbXTsKICB3aGlsZSAoKytjZWxsSW5kZXggPCBsZW5ndGgpIHsKICAgIGNvbnN0IGNlbGwyID0gbm9kZTIuY2hpbGRyZW5bY2VsbEluZGV4XTsKICAgIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgICBjb25zdCBhbGlnblZhbHVlID0gYWxpZ24gPyBhbGlnbltjZWxsSW5kZXhdIDogdm9pZCAwOwogICAgaWYgKGFsaWduVmFsdWUpIHsKICAgICAgcHJvcGVydGllczIuYWxpZ24gPSBhbGlnblZhbHVlOwogICAgfQogICAgbGV0IHJlc3VsdDIgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZSwgcHJvcGVydGllczogcHJvcGVydGllczIsIGNoaWxkcmVuOiBbXSB9OwogICAgaWYgKGNlbGwyKSB7CiAgICAgIHJlc3VsdDIuY2hpbGRyZW4gPSBzdGF0ZTEyLmFsbChjZWxsMik7CiAgICAgIHN0YXRlMTIucGF0Y2goY2VsbDIsIHJlc3VsdDIpOwogICAgICByZXN1bHQyID0gc3RhdGUxMi5hcHBseURhdGEoY2VsbDIsIHJlc3VsdDIpOwogICAgfQogICAgY2VsbHMyLnB1c2gocmVzdWx0Mik7CiAgfQogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJ0ciIsCiAgICBwcm9wZXJ0aWVzOiB7fSwKICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAoY2VsbHMyLCB0cnVlKQogIH07CiAgc3RhdGUxMi5wYXRjaChub2RlMiwgcmVzdWx0KTsKICByZXR1cm4gc3RhdGUxMi5hcHBseURhdGEobm9kZTIsIHJlc3VsdCk7Cn0KdmFyIGluaXRfdGFibGVfcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1yb3cuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1jZWxsLmpzCmZ1bmN0aW9uIHRhYmxlQ2VsbChzdGF0ZTEyLCBub2RlMikgewogIGNvbnN0IHJlc3VsdCA9IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJ0ZCIsCiAgICAvLyBBc3N1bWUgYm9keSBjZWxsLgogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90YWJsZV9jZWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90YWJsZS1jZWxsLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3RyaW0tbGluZXNAMy4wLjEvbm9kZV9tb2R1bGVzL3RyaW0tbGluZXMvaW5kZXguanMKZnVuY3Rpb24gdHJpbUxpbmVzKHZhbHVlMikgewogIGNvbnN0IHNvdXJjZSA9IFN0cmluZyh2YWx1ZTIpOwogIGNvbnN0IHNlYXJjaDIgPSAvXHI/XG58XHIvZzsKICBsZXQgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgbGV0IGxhc3QzID0gMDsKICBjb25zdCBsaW5lcyA9IFtdOwogIHdoaWxlIChtYXRjaDIpIHsKICAgIGxpbmVzLnB1c2goCiAgICAgIHRyaW1MaW5lKHNvdXJjZS5zbGljZShsYXN0MywgbWF0Y2gyLmluZGV4KSwgbGFzdDMgPiAwLCB0cnVlKSwKICAgICAgbWF0Y2gyWzBdCiAgICApOwogICAgbGFzdDMgPSBtYXRjaDIuaW5kZXggKyBtYXRjaDJbMF0ubGVuZ3RoOwogICAgbWF0Y2gyID0gc2VhcmNoMi5leGVjKHNvdXJjZSk7CiAgfQogIGxpbmVzLnB1c2godHJpbUxpbmUoc291cmNlLnNsaWNlKGxhc3QzKSwgbGFzdDMgPiAwLCBmYWxzZSkpOwogIHJldHVybiBsaW5lcy5qb2luKCIiKTsKfQpmdW5jdGlvbiB0cmltTGluZSh2YWx1ZTIsIHN0YXJ0LCBlbmQzKSB7CiAgbGV0IHN0YXJ0SW5kZXggPSAwOwogIGxldCBlbmRJbmRleCA9IHZhbHVlMi5sZW5ndGg7CiAgaWYgKHN0YXJ0KSB7CiAgICBsZXQgY29kZTQgPSB2YWx1ZTIuY29kZVBvaW50QXQoc3RhcnRJbmRleCk7CiAgICB3aGlsZSAoY29kZTQgPT09IHRhYiB8fCBjb2RlNCA9PT0gc3BhY2UpIHsKICAgICAgc3RhcnRJbmRleCsrOwogICAgICBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChzdGFydEluZGV4KTsKICAgIH0KICB9CiAgaWYgKGVuZDMpIHsKICAgIGxldCBjb2RlNCA9IHZhbHVlMi5jb2RlUG9pbnRBdChlbmRJbmRleCAtIDEpOwogICAgd2hpbGUgKGNvZGU0ID09PSB0YWIgfHwgY29kZTQgPT09IHNwYWNlKSB7CiAgICAgIGVuZEluZGV4LS07CiAgICAgIGNvZGU0ID0gdmFsdWUyLmNvZGVQb2ludEF0KGVuZEluZGV4IC0gMSk7CiAgICB9CiAgfQogIHJldHVybiBlbmRJbmRleCA+IHN0YXJ0SW5kZXggPyB2YWx1ZTIuc2xpY2Uoc3RhcnRJbmRleCwgZW5kSW5kZXgpIDogIiI7Cn0KdmFyIHRhYiwgc3BhY2U7CnZhciBpbml0X3RyaW1fbGluZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90cmltLWxpbmVzQDMuMC4xL25vZGVfbW9kdWxlcy90cmltLWxpbmVzL2luZGV4LmpzIigpIHsKICAgIHRhYiA9IDk7CiAgICBzcGFjZSA9IDMyOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy90ZXh0LmpzCmZ1bmN0aW9uIHRleHQ2KHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgcmVzdWx0ID0geyB0eXBlOiAidGV4dCIsIHZhbHVlOiB0cmltTGluZXMoU3RyaW5nKG5vZGUyLnZhbHVlKSkgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQp2YXIgaW5pdF90ZXh0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGV4dC5qcyIoKSB7CiAgICBpbml0X3RyaW1fbGluZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMKZnVuY3Rpb24gdGhlbWF0aWNCcmVhazMoc3RhdGUxMiwgbm9kZTIpIHsKICBjb25zdCByZXN1bHQgPSB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAiaHIiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogW10KICB9OwogIHN0YXRlMTIucGF0Y2gobm9kZTIsIHJlc3VsdCk7CiAgcmV0dXJuIHN0YXRlMTIuYXBwbHlEYXRhKG5vZGUyLCByZXN1bHQpOwp9CnZhciBpbml0X3RoZW1hdGljX2JyZWFrMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaGFuZGxlcnMvdGhlbWF0aWMtYnJlYWsuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcwpmdW5jdGlvbiBpZ25vcmUoKSB7CiAgcmV0dXJuIHZvaWQgMDsKfQp2YXIgaGFuZGxlcnM7CnZhciBpbml0X2hhbmRsZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9oYW5kbGVycy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2Jsb2NrcXVvdGUyKCk7CiAgICBpbml0X2JyZWFrMigpOwogICAgaW5pdF9jb2RlMigpOwogICAgaW5pdF9kZWxldGUoKTsKICAgIGluaXRfZW1waGFzaXMyKCk7CiAgICBpbml0X2Zvb3Rub3RlX3JlZmVyZW5jZSgpOwogICAgaW5pdF9oZWFkaW5nMigpOwogICAgaW5pdF9odG1sOCgpOwogICAgaW5pdF9pbWFnZV9yZWZlcmVuY2UyKCk7CiAgICBpbml0X2ltYWdlMigpOwogICAgaW5pdF9pbmxpbmVfY29kZTIoKTsKICAgIGluaXRfbGlua19yZWZlcmVuY2UyKCk7CiAgICBpbml0X2xpbmsyKCk7CiAgICBpbml0X2xpc3RfaXRlbTIoKTsKICAgIGluaXRfbGlzdDMoKTsKICAgIGluaXRfcGFyYWdyYXBoMigpOwogICAgaW5pdF9yb290MigpOwogICAgaW5pdF9zdHJvbmcyKCk7CiAgICBpbml0X3RhYmxlKCk7CiAgICBpbml0X3RhYmxlX3JvdygpOwogICAgaW5pdF90YWJsZV9jZWxsKCk7CiAgICBpbml0X3RleHQzKCk7CiAgICBpbml0X3RoZW1hdGljX2JyZWFrMygpOwogICAgaGFuZGxlcnMgPSB7CiAgICAgIGJsb2NrcXVvdGU6IGJsb2NrcXVvdGUyLAogICAgICBicmVhazogaGFyZEJyZWFrMiwKICAgICAgY29kZTogY29kZTMsCiAgICAgIGRlbGV0ZTogc3RyaWtldGhyb3VnaCwKICAgICAgZW1waGFzaXM6IGVtcGhhc2lzMiwKICAgICAgZm9vdG5vdGVSZWZlcmVuY2U6IGZvb3Rub3RlUmVmZXJlbmNlMiwKICAgICAgaGVhZGluZzogaGVhZGluZzIsCiAgICAgIGh0bWw6IGh0bWwyLAogICAgICBpbWFnZVJlZmVyZW5jZTogaW1hZ2VSZWZlcmVuY2UyLAogICAgICBpbWFnZTogaW1hZ2UyLAogICAgICBpbmxpbmVDb2RlOiBpbmxpbmVDb2RlMiwKICAgICAgbGlua1JlZmVyZW5jZTogbGlua1JlZmVyZW5jZTIsCiAgICAgIGxpbms6IGxpbmsyLAogICAgICBsaXN0SXRlbTogbGlzdEl0ZW0yLAogICAgICBsaXN0OiBsaXN0NCwKICAgICAgcGFyYWdyYXBoOiBwYXJhZ3JhcGgyLAogICAgICAvLyBAdHMtZXhwZWN0LWVycm9yOiByb290IGlzIGRpZmZlcmVudCwgYnV0IGhhcmQgdG8gdHlwZS4KICAgICAgcm9vdDogcm9vdDMsCiAgICAgIHN0cm9uZzogc3Ryb25nMiwKICAgICAgdGFibGUsCiAgICAgIHRhYmxlQ2VsbCwKICAgICAgdGFibGVSb3csCiAgICAgIHRleHQ6IHRleHQ2LAogICAgICB0aGVtYXRpY0JyZWFrOiB0aGVtYXRpY0JyZWFrMywKICAgICAgdG9tbDogaWdub3JlLAogICAgICB5YW1sOiBpZ25vcmUsCiAgICAgIGRlZmluaXRpb246IGlnbm9yZSwKICAgICAgZm9vdG5vdGVEZWZpbml0aW9uOiBpZ25vcmUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9tZGFzdC11dGlsLXRvLWhhc3RAMTMuMi4xL25vZGVfbW9kdWxlcy9tZGFzdC11dGlsLXRvLWhhc3QvbGliL2Zvb3Rlci5qcwpmdW5jdGlvbiBkZWZhdWx0Rm9vdG5vdGVCYWNrQ29udGVudChfNCwgcmVyZWZlcmVuY2VJbmRleCkgewogIGNvbnN0IHJlc3VsdCA9IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcdTIxQTkiIH1dOwogIGlmIChyZXJlZmVyZW5jZUluZGV4ID4gMSkgewogICAgcmVzdWx0LnB1c2goewogICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgIHRhZ05hbWU6ICJzdXAiLAogICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IFN0cmluZyhyZXJlZmVyZW5jZUluZGV4KSB9XQogICAgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsKHJlZmVyZW5jZUluZGV4LCByZXJlZmVyZW5jZUluZGV4KSB7CiAgcmV0dXJuICJCYWNrIHRvIHJlZmVyZW5jZSAiICsgKHJlZmVyZW5jZUluZGV4ICsgMSkgKyAocmVyZWZlcmVuY2VJbmRleCA+IDEgPyAiLSIgKyByZXJlZmVyZW5jZUluZGV4IDogIiIpOwp9CmZ1bmN0aW9uIGZvb3RlcihzdGF0ZTEyKSB7CiAgY29uc3QgY2xvYmJlclByZWZpeCA9IHR5cGVvZiBzdGF0ZTEyLm9wdGlvbnMuY2xvYmJlclByZWZpeCA9PT0gInN0cmluZyIgPyBzdGF0ZTEyLm9wdGlvbnMuY2xvYmJlclByZWZpeCA6ICJ1c2VyLWNvbnRlbnQtIjsKICBjb25zdCBmb290bm90ZUJhY2tDb250ZW50ID0gc3RhdGUxMi5vcHRpb25zLmZvb3Rub3RlQmFja0NvbnRlbnQgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0NvbnRlbnQ7CiAgY29uc3QgZm9vdG5vdGVCYWNrTGFiZWwgPSBzdGF0ZTEyLm9wdGlvbnMuZm9vdG5vdGVCYWNrTGFiZWwgfHwgZGVmYXVsdEZvb3Rub3RlQmFja0xhYmVsOwogIGNvbnN0IGZvb3Rub3RlTGFiZWwgPSBzdGF0ZTEyLm9wdGlvbnMuZm9vdG5vdGVMYWJlbCB8fCAiRm9vdG5vdGVzIjsKICBjb25zdCBmb290bm90ZUxhYmVsVGFnTmFtZSA9IHN0YXRlMTIub3B0aW9ucy5mb290bm90ZUxhYmVsVGFnTmFtZSB8fCAiaDIiOwogIGNvbnN0IGZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzID0gc3RhdGUxMi5vcHRpb25zLmZvb3Rub3RlTGFiZWxQcm9wZXJ0aWVzIHx8IHsKICAgIGNsYXNzTmFtZTogWyJzci1vbmx5Il0KICB9OwogIGNvbnN0IGxpc3RJdGVtcyA9IFtdOwogIGxldCByZWZlcmVuY2VJbmRleCA9IC0xOwogIHdoaWxlICgrK3JlZmVyZW5jZUluZGV4IDwgc3RhdGUxMi5mb290bm90ZU9yZGVyLmxlbmd0aCkgewogICAgY29uc3QgZGVmaW5pdGlvbjMgPSBzdGF0ZTEyLmZvb3Rub3RlQnlJZC5nZXQoCiAgICAgIHN0YXRlMTIuZm9vdG5vdGVPcmRlcltyZWZlcmVuY2VJbmRleF0KICAgICk7CiAgICBpZiAoIWRlZmluaXRpb24zKSB7CiAgICAgIGNvbnRpbnVlOwogICAgfQogICAgY29uc3QgY29udGVudDMgPSBzdGF0ZTEyLmFsbChkZWZpbml0aW9uMyk7CiAgICBjb25zdCBpZCA9IFN0cmluZyhkZWZpbml0aW9uMy5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogICAgY29uc3Qgc2FmZUlkID0gbm9ybWFsaXplVXJpKGlkLnRvTG93ZXJDYXNlKCkpOwogICAgbGV0IHJlcmVmZXJlbmNlSW5kZXggPSAwOwogICAgY29uc3QgYmFja1JlZmVyZW5jZXMgPSBbXTsKICAgIGNvbnN0IGNvdW50cyA9IHN0YXRlMTIuZm9vdG5vdGVDb3VudHMuZ2V0KGlkKTsKICAgIHdoaWxlIChjb3VudHMgIT09IHZvaWQgMCAmJiArK3JlcmVmZXJlbmNlSW5kZXggPD0gY291bnRzKSB7CiAgICAgIGlmIChiYWNrUmVmZXJlbmNlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYmFja1JlZmVyZW5jZXMucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgICAgfQogICAgICBsZXQgY2hpbGRyZW4yID0gdHlwZW9mIGZvb3Rub3RlQmFja0NvbnRlbnQgPT09ICJzdHJpbmciID8gZm9vdG5vdGVCYWNrQ29udGVudCA6IGZvb3Rub3RlQmFja0NvbnRlbnQocmVmZXJlbmNlSW5kZXgsIHJlcmVmZXJlbmNlSW5kZXgpOwogICAgICBpZiAodHlwZW9mIGNoaWxkcmVuMiA9PT0gInN0cmluZyIpIHsKICAgICAgICBjaGlsZHJlbjIgPSB7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGNoaWxkcmVuMiB9OwogICAgICB9CiAgICAgIGJhY2tSZWZlcmVuY2VzLnB1c2goewogICAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgICB0YWdOYW1lOiAiYSIsCiAgICAgICAgcHJvcGVydGllczogewogICAgICAgICAgaHJlZjogIiMiICsgY2xvYmJlclByZWZpeCArICJmbnJlZi0iICsgc2FmZUlkICsgKHJlcmVmZXJlbmNlSW5kZXggPiAxID8gIi0iICsgcmVyZWZlcmVuY2VJbmRleCA6ICIiKSwKICAgICAgICAgIGRhdGFGb290bm90ZUJhY2tyZWY6ICIiLAogICAgICAgICAgYXJpYUxhYmVsOiB0eXBlb2YgZm9vdG5vdGVCYWNrTGFiZWwgPT09ICJzdHJpbmciID8gZm9vdG5vdGVCYWNrTGFiZWwgOiBmb290bm90ZUJhY2tMYWJlbChyZWZlcmVuY2VJbmRleCwgcmVyZWZlcmVuY2VJbmRleCksCiAgICAgICAgICBjbGFzc05hbWU6IFsiZGF0YS1mb290bm90ZS1iYWNrcmVmIl0KICAgICAgICB9LAogICAgICAgIGNoaWxkcmVuOiBBcnJheS5pc0FycmF5KGNoaWxkcmVuMikgPyBjaGlsZHJlbjIgOiBbY2hpbGRyZW4yXQogICAgICB9KTsKICAgIH0KICAgIGNvbnN0IHRhaWwgPSBjb250ZW50M1tjb250ZW50My5sZW5ndGggLSAxXTsKICAgIGlmICh0YWlsICYmIHRhaWwudHlwZSA9PT0gImVsZW1lbnQiICYmIHRhaWwudGFnTmFtZSA9PT0gInAiKSB7CiAgICAgIGNvbnN0IHRhaWxUYWlsID0gdGFpbC5jaGlsZHJlblt0YWlsLmNoaWxkcmVuLmxlbmd0aCAtIDFdOwogICAgICBpZiAodGFpbFRhaWwgJiYgdGFpbFRhaWwudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgdGFpbFRhaWwudmFsdWUgKz0gIiAiOwogICAgICB9IGVsc2UgewogICAgICAgIHRhaWwuY2hpbGRyZW4ucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICIgIiB9KTsKICAgICAgfQogICAgICB0YWlsLmNoaWxkcmVuLnB1c2goLi4uYmFja1JlZmVyZW5jZXMpOwogICAgfSBlbHNlIHsKICAgICAgY29udGVudDMucHVzaCguLi5iYWNrUmVmZXJlbmNlcyk7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbTMgPSB7CiAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgdGFnTmFtZTogImxpIiwKICAgICAgcHJvcGVydGllczogeyBpZDogY2xvYmJlclByZWZpeCArICJmbi0iICsgc2FmZUlkIH0sCiAgICAgIGNoaWxkcmVuOiBzdGF0ZTEyLndyYXAoY29udGVudDMsIHRydWUpCiAgICB9OwogICAgc3RhdGUxMi5wYXRjaChkZWZpbml0aW9uMywgbGlzdEl0ZW0zKTsKICAgIGxpc3RJdGVtcy5wdXNoKGxpc3RJdGVtMyk7CiAgfQogIGlmIChsaXN0SXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm47CiAgfQogIHJldHVybiB7CiAgICB0eXBlOiAiZWxlbWVudCIsCiAgICB0YWdOYW1lOiAic2VjdGlvbiIsCiAgICBwcm9wZXJ0aWVzOiB7IGRhdGFGb290bm90ZXM6IHRydWUsIGNsYXNzTmFtZTogWyJmb290bm90ZXMiXSB9LAogICAgY2hpbGRyZW46IFsKICAgICAgewogICAgICAgIHR5cGU6ICJlbGVtZW50IiwKICAgICAgICB0YWdOYW1lOiBmb290bm90ZUxhYmVsVGFnTmFtZSwKICAgICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgICAuLi5lc21fZGVmYXVsdChmb290bm90ZUxhYmVsUHJvcGVydGllcyksCiAgICAgICAgICBpZDogImZvb3Rub3RlLWxhYmVsIgogICAgICAgIH0sCiAgICAgICAgY2hpbGRyZW46IFt7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6IGZvb3Rub3RlTGFiZWwgfV0KICAgICAgfSwKICAgICAgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0sCiAgICAgIHsKICAgICAgICB0eXBlOiAiZWxlbWVudCIsCiAgICAgICAgdGFnTmFtZTogIm9sIiwKICAgICAgICBwcm9wZXJ0aWVzOiB7fSwKICAgICAgICBjaGlsZHJlbjogc3RhdGUxMi53cmFwKGxpc3RJdGVtcywgdHJ1ZSkKICAgICAgfSwKICAgICAgeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0KICAgIF0KICB9Owp9CnZhciBpbml0X2Zvb3RlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvZm9vdGVyLmpzIigpIHsKICAgIGluaXRfZXNtKCk7CiAgICBpbml0X21pY3JvbWFya191dGlsX3Nhbml0aXplX3VyaSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcwpmdW5jdGlvbiBjcmVhdGVTdGF0ZSh0cmVlLCBvcHRpb25zKSB7CiAgY29uc3Qgc2V0dGluZ3MgPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczU7CiAgY29uc3QgZGVmaW5pdGlvbkJ5SWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGZvb3Rub3RlQnlJZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY29uc3QgZm9vdG5vdGVDb3VudHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGNvbnN0IGhhbmRsZXJzMiA9IHsgLi4uaGFuZGxlcnMsIC4uLnNldHRpbmdzLmhhbmRsZXJzIH07CiAgY29uc3Qgc3RhdGUxMiA9IHsKICAgIGFsbDogYWxsMywKICAgIGFwcGx5RGF0YSwKICAgIGRlZmluaXRpb25CeUlkLAogICAgZm9vdG5vdGVCeUlkLAogICAgZm9vdG5vdGVDb3VudHMsCiAgICBmb290bm90ZU9yZGVyOiBbXSwKICAgIGhhbmRsZXJzOiBoYW5kbGVyczIsCiAgICBvbmU6IG9uZTMsCiAgICBvcHRpb25zOiBzZXR0aW5ncywKICAgIHBhdGNoOiBwYXRjaDIsCiAgICB3cmFwOiB3cmFwMwogIH07CiAgdmlzaXQodHJlZSwgZnVuY3Rpb24obm9kZTIpIHsKICAgIGlmIChub2RlMi50eXBlID09PSAiZGVmaW5pdGlvbiIgfHwgbm9kZTIudHlwZSA9PT0gImZvb3Rub3RlRGVmaW5pdGlvbiIpIHsKICAgICAgY29uc3QgbWFwNyA9IG5vZGUyLnR5cGUgPT09ICJkZWZpbml0aW9uIiA/IGRlZmluaXRpb25CeUlkIDogZm9vdG5vdGVCeUlkOwogICAgICBjb25zdCBpZCA9IFN0cmluZyhub2RlMi5pZGVudGlmaWVyKS50b1VwcGVyQ2FzZSgpOwogICAgICBpZiAoIW1hcDcuaGFzKGlkKSkgewogICAgICAgIG1hcDcuc2V0KGlkLCBub2RlMik7CiAgICAgIH0KICAgIH0KICB9KTsKICByZXR1cm4gc3RhdGUxMjsKICBmdW5jdGlvbiBvbmUzKG5vZGUyLCBwYXJlbnQpIHsKICAgIGNvbnN0IHR5cGU1ID0gbm9kZTIudHlwZTsKICAgIGNvbnN0IGhhbmRsZTMgPSBzdGF0ZTEyLmhhbmRsZXJzW3R5cGU1XTsKICAgIGlmIChvd244LmNhbGwoc3RhdGUxMi5oYW5kbGVycywgdHlwZTUpICYmIGhhbmRsZTMpIHsKICAgICAgcmV0dXJuIGhhbmRsZTMoc3RhdGUxMiwgbm9kZTIsIHBhcmVudCk7CiAgICB9CiAgICBpZiAoc3RhdGUxMi5vcHRpb25zLnBhc3NUaHJvdWdoICYmIHN0YXRlMTIub3B0aW9ucy5wYXNzVGhyb3VnaC5pbmNsdWRlcyh0eXBlNSkpIHsKICAgICAgaWYgKCJjaGlsZHJlbiIgaW4gbm9kZTIpIHsKICAgICAgICBjb25zdCB7IGNoaWxkcmVuOiBjaGlsZHJlbjIsIC4uLnNoYWxsb3cgfSA9IG5vZGUyOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGVzbV9kZWZhdWx0KHNoYWxsb3cpOwogICAgICAgIHJlc3VsdC5jaGlsZHJlbiA9IHN0YXRlMTIuYWxsKG5vZGUyKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJldHVybiBlc21fZGVmYXVsdChub2RlMik7CiAgICB9CiAgICBjb25zdCB1bmtub3duMyA9IHN0YXRlMTIub3B0aW9ucy51bmtub3duSGFuZGxlciB8fCBkZWZhdWx0VW5rbm93bkhhbmRsZXI7CiAgICByZXR1cm4gdW5rbm93bjMoc3RhdGUxMiwgbm9kZTIsIHBhcmVudCk7CiAgfQogIGZ1bmN0aW9uIGFsbDMocGFyZW50KSB7CiAgICBjb25zdCB2YWx1ZXMgPSBbXTsKICAgIGlmICgiY2hpbGRyZW4iIGluIHBhcmVudCkgewogICAgICBjb25zdCBub2RlcyA9IHBhcmVudC5jaGlsZHJlbjsKICAgICAgbGV0IGluZGV4MiA9IC0xOwogICAgICB3aGlsZSAoKytpbmRleDIgPCBub2Rlcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSBzdGF0ZTEyLm9uZShub2Rlc1tpbmRleDJdLCBwYXJlbnQpOwogICAgICAgIGlmIChyZXN1bHQpIHsKICAgICAgICAgIGlmIChpbmRleDIgJiYgbm9kZXNbaW5kZXgyIC0gMV0udHlwZSA9PT0gImJyZWFrIikgewogICAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkocmVzdWx0KSAmJiByZXN1bHQudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgcmVzdWx0LnZhbHVlID0gdHJpbU1hcmtkb3duU3BhY2VTdGFydChyZXN1bHQudmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICghQXJyYXkuaXNBcnJheShyZXN1bHQpICYmIHJlc3VsdC50eXBlID09PSAiZWxlbWVudCIpIHsKICAgICAgICAgICAgICBjb25zdCBoZWFkMiA9IHJlc3VsdC5jaGlsZHJlblswXTsKICAgICAgICAgICAgICBpZiAoaGVhZDIgJiYgaGVhZDIudHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICAgICAgICBoZWFkMi52YWx1ZSA9IHRyaW1NYXJrZG93blNwYWNlU3RhcnQoaGVhZDIudmFsdWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgICB2YWx1ZXMucHVzaCguLi5yZXN1bHQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdmFsdWVzLnB1c2gocmVzdWx0KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHJldHVybiB2YWx1ZXM7CiAgfQp9CmZ1bmN0aW9uIHBhdGNoMihmcm9tMiwgdG8yKSB7CiAgaWYgKGZyb20yLnBvc2l0aW9uKSB0bzIucG9zaXRpb24gPSBwb3NpdGlvbjIoZnJvbTIpOwp9CmZ1bmN0aW9uIGFwcGx5RGF0YShmcm9tMiwgdG8yKSB7CiAgbGV0IHJlc3VsdCA9IHRvMjsKICBpZiAoZnJvbTIgJiYgZnJvbTIuZGF0YSkgewogICAgY29uc3QgaE5hbWUgPSBmcm9tMi5kYXRhLmhOYW1lOwogICAgY29uc3QgaENoaWxkcmVuID0gZnJvbTIuZGF0YS5oQ2hpbGRyZW47CiAgICBjb25zdCBoUHJvcGVydGllcyA9IGZyb20yLmRhdGEuaFByb3BlcnRpZXM7CiAgICBpZiAodHlwZW9mIGhOYW1lID09PSAic3RyaW5nIikgewogICAgICBpZiAocmVzdWx0LnR5cGUgPT09ICJlbGVtZW50IikgewogICAgICAgIHJlc3VsdC50YWdOYW1lID0gaE5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gImNoaWxkcmVuIiBpbiByZXN1bHQgPyByZXN1bHQuY2hpbGRyZW4gOiBbcmVzdWx0XTsKICAgICAgICByZXN1bHQgPSB7IHR5cGU6ICJlbGVtZW50IiwgdGFnTmFtZTogaE5hbWUsIHByb3BlcnRpZXM6IHt9LCBjaGlsZHJlbjogY2hpbGRyZW4yIH07CiAgICAgIH0KICAgIH0KICAgIGlmIChyZXN1bHQudHlwZSA9PT0gImVsZW1lbnQiICYmIGhQcm9wZXJ0aWVzKSB7CiAgICAgIE9iamVjdC5hc3NpZ24ocmVzdWx0LnByb3BlcnRpZXMsIGVzbV9kZWZhdWx0KGhQcm9wZXJ0aWVzKSk7CiAgICB9CiAgICBpZiAoImNoaWxkcmVuIiBpbiByZXN1bHQgJiYgcmVzdWx0LmNoaWxkcmVuICYmIGhDaGlsZHJlbiAhPT0gbnVsbCAmJiBoQ2hpbGRyZW4gIT09IHZvaWQgMCkgewogICAgICByZXN1bHQuY2hpbGRyZW4gPSBoQ2hpbGRyZW47CiAgICB9CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gZGVmYXVsdFVua25vd25IYW5kbGVyKHN0YXRlMTIsIG5vZGUyKSB7CiAgY29uc3QgZGF0YSA9IG5vZGUyLmRhdGEgfHwge307CiAgY29uc3QgcmVzdWx0ID0gInZhbHVlIiBpbiBub2RlMiAmJiAhKG93bjguY2FsbChkYXRhLCAiaFByb3BlcnRpZXMiKSB8fCBvd244LmNhbGwoZGF0YSwgImhDaGlsZHJlbiIpKSA/IHsgdHlwZTogInRleHQiLCB2YWx1ZTogbm9kZTIudmFsdWUgfSA6IHsKICAgIHR5cGU6ICJlbGVtZW50IiwKICAgIHRhZ05hbWU6ICJkaXYiLAogICAgcHJvcGVydGllczoge30sCiAgICBjaGlsZHJlbjogc3RhdGUxMi5hbGwobm9kZTIpCiAgfTsKICBzdGF0ZTEyLnBhdGNoKG5vZGUyLCByZXN1bHQpOwogIHJldHVybiBzdGF0ZTEyLmFwcGx5RGF0YShub2RlMiwgcmVzdWx0KTsKfQpmdW5jdGlvbiB3cmFwMyhub2RlcywgbG9vc2UpIHsKICBjb25zdCByZXN1bHQgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgaWYgKGxvb3NlKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHdoaWxlICgrK2luZGV4MiA8IG5vZGVzLmxlbmd0aCkgewogICAgaWYgKGluZGV4MikgcmVzdWx0LnB1c2goeyB0eXBlOiAidGV4dCIsIHZhbHVlOiAiXG4iIH0pOwogICAgcmVzdWx0LnB1c2gobm9kZXNbaW5kZXgyXSk7CiAgfQogIGlmIChsb29zZSAmJiBub2Rlcy5sZW5ndGggPiAwKSB7CiAgICByZXN1bHQucHVzaCh7IHR5cGU6ICJ0ZXh0IiwgdmFsdWU6ICJcbiIgfSk7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gdHJpbU1hcmtkb3duU3BhY2VTdGFydCh2YWx1ZTIpIHsKICBsZXQgaW5kZXgyID0gMDsKICBsZXQgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIHdoaWxlIChjb2RlNCA9PT0gOSB8fCBjb2RlNCA9PT0gMzIpIHsKICAgIGluZGV4MisrOwogICAgY29kZTQgPSB2YWx1ZTIuY2hhckNvZGVBdChpbmRleDIpOwogIH0KICByZXR1cm4gdmFsdWUyLnNsaWNlKGluZGV4Mik7Cn0KdmFyIG93bjgsIGVtcHR5T3B0aW9uczU7CnZhciBpbml0X3N0YXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2xpYi9zdGF0ZS5qcyIoKSB7CiAgICBpbml0X2VzbSgpOwogICAgaW5pdF91bmlzdF91dGlsX3Zpc2l0KCk7CiAgICBpbml0X3VuaXN0X3V0aWxfcG9zaXRpb24oKTsKICAgIGluaXRfaGFuZGxlcnMoKTsKICAgIG93bjggPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGVtcHR5T3B0aW9uczUgPSB7fTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9IYXN0KHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBzdGF0ZTEyID0gY3JlYXRlU3RhdGUodHJlZSwgb3B0aW9ucyk7CiAgY29uc3Qgbm9kZTIgPSBzdGF0ZTEyLm9uZSh0cmVlLCB2b2lkIDApOwogIGNvbnN0IGZvb3QgPSBmb290ZXIoc3RhdGUxMik7CiAgY29uc3QgcmVzdWx0ID0gQXJyYXkuaXNBcnJheShub2RlMikgPyB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IG5vZGUyIH0gOiBub2RlMiB8fCB7IHR5cGU6ICJyb290IiwgY2hpbGRyZW46IFtdIH07CiAgaWYgKGZvb3QpIHsKICAgIG9rKCJjaGlsZHJlbiIgaW4gcmVzdWx0KTsKICAgIHJlc3VsdC5jaGlsZHJlbi5wdXNoKHsgdHlwZTogInRleHQiLCB2YWx1ZTogIlxuIiB9LCBmb290KTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQp2YXIgaW5pdF9saWIyNyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9kZWZhdWx0KCk7CiAgICBpbml0X2Zvb3RlcigpOwogICAgaW5pdF9zdGF0ZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbWRhc3QtdXRpbC10by1oYXN0QDEzLjIuMS9ub2RlX21vZHVsZXMvbWRhc3QtdXRpbC10by1oYXN0L2luZGV4LmpzCnZhciBpbml0X21kYXN0X3V0aWxfdG9faGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL21kYXN0LXV0aWwtdG8taGFzdEAxMy4yLjEvbm9kZV9tb2R1bGVzL21kYXN0LXV0aWwtdG8taGFzdC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2hhbmRsZXJzKCk7CiAgICBpbml0X2xpYjI3KCk7CiAgICBpbml0X2Zvb3RlcigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaHRtbC12b2lkLWVsZW1lbnRzQDMuMC4wL25vZGVfbW9kdWxlcy9odG1sLXZvaWQtZWxlbWVudHMvaW5kZXguanMKdmFyIGh0bWxWb2lkRWxlbWVudHM7CnZhciBpbml0X2h0bWxfdm9pZF9lbGVtZW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2h0bWwtdm9pZC1lbGVtZW50c0AzLjAuMC9ub2RlX21vZHVsZXMvaHRtbC12b2lkLWVsZW1lbnRzL2luZGV4LmpzIigpIHsKICAgIGh0bWxWb2lkRWxlbWVudHMgPSBbCiAgICAgICJhcmVhIiwKICAgICAgImJhc2UiLAogICAgICAiYmFzZWZvbnQiLAogICAgICAiYmdzb3VuZCIsCiAgICAgICJiciIsCiAgICAgICJjb2wiLAogICAgICAiY29tbWFuZCIsCiAgICAgICJlbWJlZCIsCiAgICAgICJmcmFtZSIsCiAgICAgICJociIsCiAgICAgICJpbWFnZSIsCiAgICAgICJpbWciLAogICAgICAiaW5wdXQiLAogICAgICAia2V5Z2VuIiwKICAgICAgImxpbmsiLAogICAgICAibWV0YSIsCiAgICAgICJwYXJhbSIsCiAgICAgICJzb3VyY2UiLAogICAgICAidHJhY2siLAogICAgICAid2JyIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMKdmFyIFNjaGVtYTsKdmFyIGluaXRfc2NoZW1hMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9zY2hlbWEuanMiKCkgewogICAgU2NoZW1hID0gY2xhc3MgewogICAgICAvKioKICAgICAgICogQHBhcmFtIHtTY2hlbWFUeXBlWydwcm9wZXJ0eSddfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge1NjaGVtYVR5cGVbJ25vcm1hbCddfSBub3JtYWwKICAgICAgICogICBOb3JtYWwuCiAgICAgICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV0KICAgICAgICogICBTcGFjZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBTY2hlbWEuCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTExLCBub3JtYWwsIHNwYWNlMikgewogICAgICAgIHRoaXMubm9ybWFsID0gbm9ybWFsOwogICAgICAgIHRoaXMucHJvcGVydHkgPSBwcm9wZXJ0eTExOwogICAgICAgIGlmIChzcGFjZTIpIHsKICAgICAgICAgIHRoaXMuc3BhY2UgPSBzcGFjZTI7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgU2NoZW1hLnByb3RvdHlwZS5ub3JtYWwgPSB7fTsKICAgIFNjaGVtYS5wcm90b3R5cGUucHJvcGVydHkgPSB7fTsKICAgIFNjaGVtYS5wcm90b3R5cGUuc3BhY2UgPSB2b2lkIDA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvbWVyZ2UuanMKZnVuY3Rpb24gbWVyZ2UzKGRlZmluaXRpb25zLCBzcGFjZTIpIHsKICBjb25zdCBwcm9wZXJ0eTExID0ge307CiAgY29uc3Qgbm9ybWFsID0ge307CiAgZm9yIChjb25zdCBkZWZpbml0aW9uMyBvZiBkZWZpbml0aW9ucykgewogICAgT2JqZWN0LmFzc2lnbihwcm9wZXJ0eTExLCBkZWZpbml0aW9uMy5wcm9wZXJ0eSk7CiAgICBPYmplY3QuYXNzaWduKG5vcm1hbCwgZGVmaW5pdGlvbjMubm9ybWFsKTsKICB9CiAgcmV0dXJuIG5ldyBTY2hlbWEocHJvcGVydHkxMSwgbm9ybWFsLCBzcGFjZTIpOwp9CnZhciBpbml0X21lcmdlMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9tZXJnZS5qcyIoKSB7CiAgICBpbml0X3NjaGVtYTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvbm9ybWFsaXplLmpzCmZ1bmN0aW9uIG5vcm1hbGl6ZTModmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi50b0xvd2VyQ2FzZSgpOwp9CnZhciBpbml0X25vcm1hbGl6ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvbm9ybWFsaXplLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9pbmZvLmpzCnZhciBJbmZvOwp2YXIgaW5pdF9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2luZm8uanMiKCkgewogICAgSW5mbyA9IGNsYXNzIHsKICAgICAgLyoqCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlCiAgICAgICAqICAgQXR0cmlidXRlLgogICAgICAgKiBAcmV0dXJucwogICAgICAgKiAgIEluZm8uCiAgICAgICAqLwogICAgICBjb25zdHJ1Y3Rvcihwcm9wZXJ0eTExLCBhdHRyaWJ1dGUpIHsKICAgICAgICB0aGlzLmF0dHJpYnV0ZSA9IGF0dHJpYnV0ZTsKICAgICAgICB0aGlzLnByb3BlcnR5ID0gcHJvcGVydHkxMTsKICAgICAgfQogICAgfTsKICAgIEluZm8ucHJvdG90eXBlLmF0dHJpYnV0ZSA9ICIiOwogICAgSW5mby5wcm90b3R5cGUuYm9vbGVhbmlzaCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuYm9vbGVhbiA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuY29tbWFPclNwYWNlU2VwYXJhdGVkID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5jb21tYVNlcGFyYXRlZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUuZGVmaW5lZCA9IGZhbHNlOwogICAgSW5mby5wcm90b3R5cGUubXVzdFVzZVByb3BlcnR5ID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5udW1iZXIgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLm92ZXJsb2FkZWRCb29sZWFuID0gZmFsc2U7CiAgICBJbmZvLnByb3RvdHlwZS5wcm9wZXJ0eSA9ICIiOwogICAgSW5mby5wcm90b3R5cGUuc3BhY2VTZXBhcmF0ZWQgPSBmYWxzZTsKICAgIEluZm8ucHJvdG90eXBlLnNwYWNlID0gdm9pZCAwOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3R5cGVzLmpzCnZhciB0eXBlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KHR5cGVzX2V4cG9ydHMsIHsKICBib29sZWFuOiAoKSA9PiBib29sZWFuLAogIGJvb2xlYW5pc2g6ICgpID0+IGJvb2xlYW5pc2gsCiAgY29tbWFPclNwYWNlU2VwYXJhdGVkOiAoKSA9PiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgY29tbWFTZXBhcmF0ZWQ6ICgpID0+IGNvbW1hU2VwYXJhdGVkLAogIG51bWJlcjogKCkgPT4gbnVtYmVyLAogIG92ZXJsb2FkZWRCb29sZWFuOiAoKSA9PiBvdmVybG9hZGVkQm9vbGVhbiwKICBzcGFjZVNlcGFyYXRlZDogKCkgPT4gc3BhY2VTZXBhcmF0ZWQKfSk7CmZ1bmN0aW9uIGluY3JlbWVudCgpIHsKICByZXR1cm4gMiAqKiArK3Bvd2VyczsKfQp2YXIgcG93ZXJzLCBib29sZWFuLCBib29sZWFuaXNoLCBvdmVybG9hZGVkQm9vbGVhbiwgbnVtYmVyLCBzcGFjZVNlcGFyYXRlZCwgY29tbWFTZXBhcmF0ZWQsIGNvbW1hT3JTcGFjZVNlcGFyYXRlZDsKdmFyIGluaXRfdHlwZXMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL3R5cGVzLmpzIigpIHsKICAgIHBvd2VycyA9IDA7CiAgICBib29sZWFuID0gaW5jcmVtZW50KCk7CiAgICBib29sZWFuaXNoID0gaW5jcmVtZW50KCk7CiAgICBvdmVybG9hZGVkQm9vbGVhbiA9IGluY3JlbWVudCgpOwogICAgbnVtYmVyID0gaW5jcmVtZW50KCk7CiAgICBzcGFjZVNlcGFyYXRlZCA9IGluY3JlbWVudCgpOwogICAgY29tbWFTZXBhcmF0ZWQgPSBpbmNyZW1lbnQoKTsKICAgIGNvbW1hT3JTcGFjZVNlcGFyYXRlZCA9IGluY3JlbWVudCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2RlZmluZWQtaW5mby5qcwpmdW5jdGlvbiBtYXJrKHZhbHVlcywga2V5MiwgdmFsdWUyKSB7CiAgaWYgKHZhbHVlMikgewogICAgdmFsdWVzW2tleTJdID0gdmFsdWUyOwogIH0KfQp2YXIgY2hlY2tzLCBEZWZpbmVkSW5mbzsKdmFyIGluaXRfZGVmaW5lZF9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2RlZmluZWQtaW5mby5qcyIoKSB7CiAgICBpbml0X2luZm8oKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBjaGVja3MgPSAvKiogQHR5cGUge1JlYWRvbmx5QXJyYXk8a2V5b2YgdHlwZW9mIHR5cGVzPn0gKi8KICAgIE9iamVjdC5rZXlzKHR5cGVzX2V4cG9ydHMpOwogICAgRGVmaW5lZEluZm8gPSBjbGFzcyBleHRlbmRzIEluZm8gewogICAgICAvKioKICAgICAgICogQGNvbnN0cnVjdG9yCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBwcm9wZXJ0eQogICAgICAgKiAgIFByb3BlcnR5LgogICAgICAgKiBAcGFyYW0ge3N0cmluZ30gYXR0cmlidXRlCiAgICAgICAqICAgQXR0cmlidXRlLgogICAgICAgKiBAcGFyYW0ge251bWJlciB8IG51bGwgfCB1bmRlZmluZWR9IFttYXNrXQogICAgICAgKiAgIE1hc2suCiAgICAgICAqIEBwYXJhbSB7U3BhY2UgfCB1bmRlZmluZWR9IFtzcGFjZV0KICAgICAgICogICBTcGFjZS4KICAgICAgICogQHJldHVybnMKICAgICAgICogICBJbmZvLgogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IocHJvcGVydHkxMSwgYXR0cmlidXRlLCBtYXNrLCBzcGFjZTIpIHsKICAgICAgICBsZXQgaW5kZXgyID0gLTE7CiAgICAgICAgc3VwZXIocHJvcGVydHkxMSwgYXR0cmlidXRlKTsKICAgICAgICBtYXJrKHRoaXMsICJzcGFjZSIsIHNwYWNlMik7CiAgICAgICAgaWYgKHR5cGVvZiBtYXNrID09PSAibnVtYmVyIikgewogICAgICAgICAgd2hpbGUgKCsraW5kZXgyIDwgY2hlY2tzLmxlbmd0aCkgewogICAgICAgICAgICBjb25zdCBjaGVjayA9IGNoZWNrc1tpbmRleDJdOwogICAgICAgICAgICBtYXJrKHRoaXMsIGNoZWNrc1tpbmRleDJdLCAobWFzayAmIHR5cGVzX2V4cG9ydHNbY2hlY2tdKSA9PT0gdHlwZXNfZXhwb3J0c1tjaGVja10pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIERlZmluZWRJbmZvLnByb3RvdHlwZS5kZWZpbmVkID0gdHJ1ZTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jcmVhdGUuanMKZnVuY3Rpb24gY3JlYXRlNihkZWZpbml0aW9uMykgewogIGNvbnN0IHByb3BlcnRpZXMyID0ge307CiAgY29uc3Qgbm9ybWFscyA9IHt9OwogIGZvciAoY29uc3QgW3Byb3BlcnR5MTEsIHZhbHVlMl0gb2YgT2JqZWN0LmVudHJpZXMoZGVmaW5pdGlvbjMucHJvcGVydGllcykpIHsKICAgIGNvbnN0IGluZm8gPSBuZXcgRGVmaW5lZEluZm8oCiAgICAgIHByb3BlcnR5MTEsCiAgICAgIGRlZmluaXRpb24zLnRyYW5zZm9ybShkZWZpbml0aW9uMy5hdHRyaWJ1dGVzIHx8IHt9LCBwcm9wZXJ0eTExKSwKICAgICAgdmFsdWUyLAogICAgICBkZWZpbml0aW9uMy5zcGFjZQogICAgKTsKICAgIGlmIChkZWZpbml0aW9uMy5tdXN0VXNlUHJvcGVydHkgJiYgZGVmaW5pdGlvbjMubXVzdFVzZVByb3BlcnR5LmluY2x1ZGVzKHByb3BlcnR5MTEpKSB7CiAgICAgIGluZm8ubXVzdFVzZVByb3BlcnR5ID0gdHJ1ZTsKICAgIH0KICAgIHByb3BlcnRpZXMyW3Byb3BlcnR5MTFdID0gaW5mbzsKICAgIG5vcm1hbHNbbm9ybWFsaXplMyhwcm9wZXJ0eTExKV0gPSBwcm9wZXJ0eTExOwogICAgbm9ybWFsc1tub3JtYWxpemUzKGluZm8uYXR0cmlidXRlKV0gPSBwcm9wZXJ0eTExOwogIH0KICByZXR1cm4gbmV3IFNjaGVtYShwcm9wZXJ0aWVzMiwgbm9ybWFscywgZGVmaW5pdGlvbjMuc3BhY2UpOwp9CnZhciBpbml0X2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jcmVhdGUuanMiKCkgewogICAgaW5pdF9ub3JtYWxpemUoKTsKICAgIGluaXRfZGVmaW5lZF9pbmZvKCk7CiAgICBpbml0X3NjaGVtYTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvYXJpYS5qcwp2YXIgYXJpYTI7CnZhciBpbml0X2FyaWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2FyaWEuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIGluaXRfdHlwZXMzKCk7CiAgICBhcmlhMiA9IGNyZWF0ZTYoewogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgYXJpYUFjdGl2ZURlc2NlbmRhbnQ6IG51bGwsCiAgICAgICAgYXJpYUF0b21pYzogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhQXV0b0NvbXBsZXRlOiBudWxsLAogICAgICAgIGFyaWFCdXN5OiBib29sZWFuaXNoLAogICAgICAgIGFyaWFDaGVja2VkOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFDb2xDb3VudDogbnVtYmVyLAogICAgICAgIGFyaWFDb2xJbmRleDogbnVtYmVyLAogICAgICAgIGFyaWFDb2xTcGFuOiBudW1iZXIsCiAgICAgICAgYXJpYUNvbnRyb2xzOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhQ3VycmVudDogbnVsbCwKICAgICAgICBhcmlhRGVzY3JpYmVkQnk6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFEZXRhaWxzOiBudWxsLAogICAgICAgIGFyaWFEaXNhYmxlZDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhRHJvcEVmZmVjdDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUVycm9yTWVzc2FnZTogbnVsbCwKICAgICAgICBhcmlhRXhwYW5kZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUZsb3dUbzogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYUdyYWJiZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUhhc1BvcHVwOiBudWxsLAogICAgICAgIGFyaWFIaWRkZW46IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYUludmFsaWQ6IG51bGwsCiAgICAgICAgYXJpYUtleVNob3J0Y3V0czogbnVsbCwKICAgICAgICBhcmlhTGFiZWw6IG51bGwsCiAgICAgICAgYXJpYUxhYmVsbGVkQnk6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFyaWFMZXZlbDogbnVtYmVyLAogICAgICAgIGFyaWFMaXZlOiBudWxsLAogICAgICAgIGFyaWFNb2RhbDogYm9vbGVhbmlzaCwKICAgICAgICBhcmlhTXVsdGlMaW5lOiBib29sZWFuaXNoLAogICAgICAgIGFyaWFNdWx0aVNlbGVjdGFibGU6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYU9yaWVudGF0aW9uOiBudWxsLAogICAgICAgIGFyaWFPd25zOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhcmlhUGxhY2Vob2xkZXI6IG51bGwsCiAgICAgICAgYXJpYVBvc0luU2V0OiBudW1iZXIsCiAgICAgICAgYXJpYVByZXNzZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVJlYWRPbmx5OiBib29sZWFuaXNoLAogICAgICAgIGFyaWFSZWxldmFudDogbnVsbCwKICAgICAgICBhcmlhUmVxdWlyZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVJvbGVEZXNjcmlwdGlvbjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXJpYVJvd0NvdW50OiBudW1iZXIsCiAgICAgICAgYXJpYVJvd0luZGV4OiBudW1iZXIsCiAgICAgICAgYXJpYVJvd1NwYW46IG51bWJlciwKICAgICAgICBhcmlhU2VsZWN0ZWQ6IGJvb2xlYW5pc2gsCiAgICAgICAgYXJpYVNldFNpemU6IG51bWJlciwKICAgICAgICBhcmlhU29ydDogbnVsbCwKICAgICAgICBhcmlhVmFsdWVNYXg6IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVNaW46IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVOb3c6IG51bWJlciwKICAgICAgICBhcmlhVmFsdWVUZXh0OiBudWxsLAogICAgICAgIHJvbGU6IG51bGwKICAgICAgfSwKICAgICAgdHJhbnNmb3JtKF80LCBwcm9wZXJ0eTExKSB7CiAgICAgICAgcmV0dXJuIHByb3BlcnR5MTEgPT09ICJyb2xlIiA/IHByb3BlcnR5MTEgOiAiYXJpYS0iICsgcHJvcGVydHkxMS5zbGljZSg0KS50b0xvd2VyQ2FzZSgpOwogICAgICB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvdXRpbC9jYXNlLXNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBhdHRyaWJ1dGUpIHsKICByZXR1cm4gYXR0cmlidXRlIGluIGF0dHJpYnV0ZXMgPyBhdHRyaWJ1dGVzW2F0dHJpYnV0ZV0gOiBhdHRyaWJ1dGU7Cn0KdmFyIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2Utc2Vuc2l0aXZlLXRyYW5zZm9ybS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3V0aWwvY2FzZS1pbnNlbnNpdGl2ZS10cmFuc2Zvcm0uanMKZnVuY3Rpb24gY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtKGF0dHJpYnV0ZXMsIHByb3BlcnR5MTEpIHsKICByZXR1cm4gY2FzZVNlbnNpdGl2ZVRyYW5zZm9ybShhdHRyaWJ1dGVzLCBwcm9wZXJ0eTExLnRvTG93ZXJDYXNlKCkpOwp9CnZhciBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi91dGlsL2Nhc2UtaW5zZW5zaXRpdmUtdHJhbnNmb3JtLmpzIigpIHsKICAgIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2h0bWwuanMKdmFyIGh0bWwzOwp2YXIgaW5pdF9odG1sOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaHRtbC5qcyIoKSB7CiAgICBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF90eXBlczMoKTsKICAgIGh0bWwzID0gY3JlYXRlNih7CiAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICBhY2NlcHRjaGFyc2V0OiAiYWNjZXB0LWNoYXJzZXQiLAogICAgICAgIGNsYXNzbmFtZTogImNsYXNzIiwKICAgICAgICBodG1sZm9yOiAiZm9yIiwKICAgICAgICBodHRwZXF1aXY6ICJodHRwLWVxdWl2IgogICAgICB9LAogICAgICBtdXN0VXNlUHJvcGVydHk6IFsiY2hlY2tlZCIsICJtdWx0aXBsZSIsICJtdXRlZCIsICJzZWxlY3RlZCJdLAogICAgICBwcm9wZXJ0aWVzOiB7CiAgICAgICAgLy8gU3RhbmRhcmQgUHJvcGVydGllcy4KICAgICAgICBhYmJyOiBudWxsLAogICAgICAgIGFjY2VwdDogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgYWNjZXB0Q2hhcnNldDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYWNjZXNzS2V5OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBhY3Rpb246IG51bGwsCiAgICAgICAgYWxsb3c6IG51bGwsCiAgICAgICAgYWxsb3dGdWxsU2NyZWVuOiBib29sZWFuLAogICAgICAgIGFsbG93UGF5bWVudFJlcXVlc3Q6IGJvb2xlYW4sCiAgICAgICAgYWxsb3dVc2VyTWVkaWE6IGJvb2xlYW4sCiAgICAgICAgYWx0OiBudWxsLAogICAgICAgIGFzOiBudWxsLAogICAgICAgIGFzeW5jOiBib29sZWFuLAogICAgICAgIGF1dG9DYXBpdGFsaXplOiBudWxsLAogICAgICAgIGF1dG9Db21wbGV0ZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgYXV0b0ZvY3VzOiBib29sZWFuLAogICAgICAgIGF1dG9QbGF5OiBib29sZWFuLAogICAgICAgIGJsb2NraW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjYXB0dXJlOiBudWxsLAogICAgICAgIGNoYXJTZXQ6IG51bGwsCiAgICAgICAgY2hlY2tlZDogYm9vbGVhbiwKICAgICAgICBjaXRlOiBudWxsLAogICAgICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY29sczogbnVtYmVyLAogICAgICAgIGNvbFNwYW46IG51bGwsCiAgICAgICAgY29udGVudDogbnVsbCwKICAgICAgICBjb250ZW50RWRpdGFibGU6IGJvb2xlYW5pc2gsCiAgICAgICAgY29udHJvbHM6IGJvb2xlYW4sCiAgICAgICAgY29udHJvbHNMaXN0OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBjb29yZHM6IG51bWJlciB8IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGNyb3NzT3JpZ2luOiBudWxsLAogICAgICAgIGRhdGE6IG51bGwsCiAgICAgICAgZGF0ZVRpbWU6IG51bGwsCiAgICAgICAgZGVjb2Rpbmc6IG51bGwsCiAgICAgICAgZGVmYXVsdDogYm9vbGVhbiwKICAgICAgICBkZWZlcjogYm9vbGVhbiwKICAgICAgICBkaXI6IG51bGwsCiAgICAgICAgZGlyTmFtZTogbnVsbCwKICAgICAgICBkaXNhYmxlZDogYm9vbGVhbiwKICAgICAgICBkb3dubG9hZDogb3ZlcmxvYWRlZEJvb2xlYW4sCiAgICAgICAgZHJhZ2dhYmxlOiBib29sZWFuaXNoLAogICAgICAgIGVuY1R5cGU6IG51bGwsCiAgICAgICAgZW50ZXJLZXlIaW50OiBudWxsLAogICAgICAgIGZldGNoUHJpb3JpdHk6IG51bGwsCiAgICAgICAgZm9ybTogbnVsbCwKICAgICAgICBmb3JtQWN0aW9uOiBudWxsLAogICAgICAgIGZvcm1FbmNUeXBlOiBudWxsLAogICAgICAgIGZvcm1NZXRob2Q6IG51bGwsCiAgICAgICAgZm9ybU5vVmFsaWRhdGU6IGJvb2xlYW4sCiAgICAgICAgZm9ybVRhcmdldDogbnVsbCwKICAgICAgICBoZWFkZXJzOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBoZWlnaHQ6IG51bWJlciwKICAgICAgICBoaWRkZW46IG92ZXJsb2FkZWRCb29sZWFuLAogICAgICAgIGhpZ2g6IG51bWJlciwKICAgICAgICBocmVmOiBudWxsLAogICAgICAgIGhyZWZMYW5nOiBudWxsLAogICAgICAgIGh0bWxGb3I6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIGh0dHBFcXVpdjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaWQ6IG51bGwsCiAgICAgICAgaW1hZ2VTaXplczogbnVsbCwKICAgICAgICBpbWFnZVNyY1NldDogbnVsbCwKICAgICAgICBpbmVydDogYm9vbGVhbiwKICAgICAgICBpbnB1dE1vZGU6IG51bGwsCiAgICAgICAgaW50ZWdyaXR5OiBudWxsLAogICAgICAgIGlzOiBudWxsLAogICAgICAgIGlzTWFwOiBib29sZWFuLAogICAgICAgIGl0ZW1JZDogbnVsbCwKICAgICAgICBpdGVtUHJvcDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaXRlbVJlZjogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgaXRlbVNjb3BlOiBib29sZWFuLAogICAgICAgIGl0ZW1UeXBlOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBraW5kOiBudWxsLAogICAgICAgIGxhYmVsOiBudWxsLAogICAgICAgIGxhbmc6IG51bGwsCiAgICAgICAgbGFuZ3VhZ2U6IG51bGwsCiAgICAgICAgbGlzdDogbnVsbCwKICAgICAgICBsb2FkaW5nOiBudWxsLAogICAgICAgIGxvb3A6IGJvb2xlYW4sCiAgICAgICAgbG93OiBudW1iZXIsCiAgICAgICAgbWFuaWZlc3Q6IG51bGwsCiAgICAgICAgbWF4OiBudWxsLAogICAgICAgIG1heExlbmd0aDogbnVtYmVyLAogICAgICAgIG1lZGlhOiBudWxsLAogICAgICAgIG1ldGhvZDogbnVsbCwKICAgICAgICBtaW46IG51bGwsCiAgICAgICAgbWluTGVuZ3RoOiBudW1iZXIsCiAgICAgICAgbXVsdGlwbGU6IGJvb2xlYW4sCiAgICAgICAgbXV0ZWQ6IGJvb2xlYW4sCiAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICBub25jZTogbnVsbCwKICAgICAgICBub01vZHVsZTogYm9vbGVhbiwKICAgICAgICBub1ZhbGlkYXRlOiBib29sZWFuLAogICAgICAgIG9uQWJvcnQ6IG51bGwsCiAgICAgICAgb25BZnRlclByaW50OiBudWxsLAogICAgICAgIG9uQXV4Q2xpY2s6IG51bGwsCiAgICAgICAgb25CZWZvcmVNYXRjaDogbnVsbCwKICAgICAgICBvbkJlZm9yZVByaW50OiBudWxsLAogICAgICAgIG9uQmVmb3JlVG9nZ2xlOiBudWxsLAogICAgICAgIG9uQmVmb3JlVW5sb2FkOiBudWxsLAogICAgICAgIG9uQmx1cjogbnVsbCwKICAgICAgICBvbkNhbmNlbDogbnVsbCwKICAgICAgICBvbkNhblBsYXk6IG51bGwsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCwKICAgICAgICBvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkNsaWNrOiBudWxsLAogICAgICAgIG9uQ2xvc2U6IG51bGwsCiAgICAgICAgb25Db250ZXh0TG9zdDogbnVsbCwKICAgICAgICBvbkNvbnRleHRNZW51OiBudWxsLAogICAgICAgIG9uQ29udGV4dFJlc3RvcmVkOiBudWxsLAogICAgICAgIG9uQ29weTogbnVsbCwKICAgICAgICBvbkN1ZUNoYW5nZTogbnVsbCwKICAgICAgICBvbkN1dDogbnVsbCwKICAgICAgICBvbkRibENsaWNrOiBudWxsLAogICAgICAgIG9uRHJhZzogbnVsbCwKICAgICAgICBvbkRyYWdFbmQ6IG51bGwsCiAgICAgICAgb25EcmFnRW50ZXI6IG51bGwsCiAgICAgICAgb25EcmFnRXhpdDogbnVsbCwKICAgICAgICBvbkRyYWdMZWF2ZTogbnVsbCwKICAgICAgICBvbkRyYWdPdmVyOiBudWxsLAogICAgICAgIG9uRHJhZ1N0YXJ0OiBudWxsLAogICAgICAgIG9uRHJvcDogbnVsbCwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiBudWxsLAogICAgICAgIG9uRW1wdGllZDogbnVsbCwKICAgICAgICBvbkVuZGVkOiBudWxsLAogICAgICAgIG9uRXJyb3I6IG51bGwsCiAgICAgICAgb25Gb2N1czogbnVsbCwKICAgICAgICBvbkZvcm1EYXRhOiBudWxsLAogICAgICAgIG9uSGFzaENoYW5nZTogbnVsbCwKICAgICAgICBvbklucHV0OiBudWxsLAogICAgICAgIG9uSW52YWxpZDogbnVsbCwKICAgICAgICBvbktleURvd246IG51bGwsCiAgICAgICAgb25LZXlQcmVzczogbnVsbCwKICAgICAgICBvbktleVVwOiBudWxsLAogICAgICAgIG9uTGFuZ3VhZ2VDaGFuZ2U6IG51bGwsCiAgICAgICAgb25Mb2FkOiBudWxsLAogICAgICAgIG9uTG9hZGVkRGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRlZE1ldGFkYXRhOiBudWxsLAogICAgICAgIG9uTG9hZEVuZDogbnVsbCwKICAgICAgICBvbkxvYWRTdGFydDogbnVsbCwKICAgICAgICBvbk1lc3NhZ2U6IG51bGwsCiAgICAgICAgb25NZXNzYWdlRXJyb3I6IG51bGwsCiAgICAgICAgb25Nb3VzZURvd246IG51bGwsCiAgICAgICAgb25Nb3VzZUVudGVyOiBudWxsLAogICAgICAgIG9uTW91c2VMZWF2ZTogbnVsbCwKICAgICAgICBvbk1vdXNlTW92ZTogbnVsbCwKICAgICAgICBvbk1vdXNlT3V0OiBudWxsLAogICAgICAgIG9uTW91c2VPdmVyOiBudWxsLAogICAgICAgIG9uTW91c2VVcDogbnVsbCwKICAgICAgICBvbk9mZmxpbmU6IG51bGwsCiAgICAgICAgb25PbmxpbmU6IG51bGwsCiAgICAgICAgb25QYWdlSGlkZTogbnVsbCwKICAgICAgICBvblBhZ2VTaG93OiBudWxsLAogICAgICAgIG9uUGFzdGU6IG51bGwsCiAgICAgICAgb25QYXVzZTogbnVsbCwKICAgICAgICBvblBsYXk6IG51bGwsCiAgICAgICAgb25QbGF5aW5nOiBudWxsLAogICAgICAgIG9uUG9wU3RhdGU6IG51bGwsCiAgICAgICAgb25Qcm9ncmVzczogbnVsbCwKICAgICAgICBvblJhdGVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25SZWplY3Rpb25IYW5kbGVkOiBudWxsLAogICAgICAgIG9uUmVzZXQ6IG51bGwsCiAgICAgICAgb25SZXNpemU6IG51bGwsCiAgICAgICAgb25TY3JvbGw6IG51bGwsCiAgICAgICAgb25TY3JvbGxFbmQ6IG51bGwsCiAgICAgICAgb25TZWN1cml0eVBvbGljeVZpb2xhdGlvbjogbnVsbCwKICAgICAgICBvblNlZWtlZDogbnVsbCwKICAgICAgICBvblNlZWtpbmc6IG51bGwsCiAgICAgICAgb25TZWxlY3Q6IG51bGwsCiAgICAgICAgb25TbG90Q2hhbmdlOiBudWxsLAogICAgICAgIG9uU3RhbGxlZDogbnVsbCwKICAgICAgICBvblN0b3JhZ2U6IG51bGwsCiAgICAgICAgb25TdWJtaXQ6IG51bGwsCiAgICAgICAgb25TdXNwZW5kOiBudWxsLAogICAgICAgIG9uVGltZVVwZGF0ZTogbnVsbCwKICAgICAgICBvblRvZ2dsZTogbnVsbCwKICAgICAgICBvblVuaGFuZGxlZFJlamVjdGlvbjogbnVsbCwKICAgICAgICBvblVubG9hZDogbnVsbCwKICAgICAgICBvblZvbHVtZUNoYW5nZTogbnVsbCwKICAgICAgICBvbldhaXRpbmc6IG51bGwsCiAgICAgICAgb25XaGVlbDogbnVsbCwKICAgICAgICBvcGVuOiBib29sZWFuLAogICAgICAgIG9wdGltdW06IG51bWJlciwKICAgICAgICBwYXR0ZXJuOiBudWxsLAogICAgICAgIHBpbmc6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIHBsYWNlaG9sZGVyOiBudWxsLAogICAgICAgIHBsYXlzSW5saW5lOiBib29sZWFuLAogICAgICAgIHBvcG92ZXI6IG51bGwsCiAgICAgICAgcG9wb3ZlclRhcmdldDogbnVsbCwKICAgICAgICBwb3BvdmVyVGFyZ2V0QWN0aW9uOiBudWxsLAogICAgICAgIHBvc3RlcjogbnVsbCwKICAgICAgICBwcmVsb2FkOiBudWxsLAogICAgICAgIHJlYWRPbmx5OiBib29sZWFuLAogICAgICAgIHJlZmVycmVyUG9saWN5OiBudWxsLAogICAgICAgIHJlbDogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWQ6IGJvb2xlYW4sCiAgICAgICAgcmV2ZXJzZWQ6IGJvb2xlYW4sCiAgICAgICAgcm93czogbnVtYmVyLAogICAgICAgIHJvd1NwYW46IG51bWJlciwKICAgICAgICBzYW5kYm94OiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBzY29wZTogbnVsbCwKICAgICAgICBzY29wZWQ6IGJvb2xlYW4sCiAgICAgICAgc2VhbWxlc3M6IGJvb2xlYW4sCiAgICAgICAgc2VsZWN0ZWQ6IGJvb2xlYW4sCiAgICAgICAgc2hhZG93Um9vdENsb25hYmxlOiBib29sZWFuLAogICAgICAgIHNoYWRvd1Jvb3REZWxlZ2F0ZXNGb2N1czogYm9vbGVhbiwKICAgICAgICBzaGFkb3dSb290TW9kZTogbnVsbCwKICAgICAgICBzaGFwZTogbnVsbCwKICAgICAgICBzaXplOiBudW1iZXIsCiAgICAgICAgc2l6ZXM6IG51bGwsCiAgICAgICAgc2xvdDogbnVsbCwKICAgICAgICBzcGFuOiBudW1iZXIsCiAgICAgICAgc3BlbGxDaGVjazogYm9vbGVhbmlzaCwKICAgICAgICBzcmM6IG51bGwsCiAgICAgICAgc3JjRG9jOiBudWxsLAogICAgICAgIHNyY0xhbmc6IG51bGwsCiAgICAgICAgc3JjU2V0OiBudWxsLAogICAgICAgIHN0YXJ0OiBudW1iZXIsCiAgICAgICAgc3RlcDogbnVsbCwKICAgICAgICBzdHlsZTogbnVsbCwKICAgICAgICB0YWJJbmRleDogbnVtYmVyLAogICAgICAgIHRhcmdldDogbnVsbCwKICAgICAgICB0aXRsZTogbnVsbCwKICAgICAgICB0cmFuc2xhdGU6IG51bGwsCiAgICAgICAgdHlwZTogbnVsbCwKICAgICAgICB0eXBlTXVzdE1hdGNoOiBib29sZWFuLAogICAgICAgIHVzZU1hcDogbnVsbCwKICAgICAgICB2YWx1ZTogYm9vbGVhbmlzaCwKICAgICAgICB3aWR0aDogbnVtYmVyLAogICAgICAgIHdyYXA6IG51bGwsCiAgICAgICAgd3JpdGluZ1N1Z2dlc3Rpb25zOiBudWxsLAogICAgICAgIC8vIExlZ2FjeS4KICAgICAgICAvLyBTZWU6IGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI290aGVyLWVsZW1lbnRzLC1hdHRyaWJ1dGVzLWFuZC1hcGlzCiAgICAgICAgYWxpZ246IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdGV4dC1hbGlnbmAgaW5zdGVhZCwKICAgICAgICBhTGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTphY3RpdmUge2NvbG9yfWAgaW5zdGVhZAogICAgICAgIGFyY2hpdmU6IHNwYWNlU2VwYXJhdGVkLAogICAgICAgIC8vIGA8b2JqZWN0PmAuIExpc3Qgb2YgVVJJcyB0byBhcmNoaXZlcwogICAgICAgIGF4aXM6IG51bGwsCiAgICAgICAgLy8gYDx0ZD5gIGFuZCBgPHRoPmAuIFVzZSBgc2NvcGVgIG9uIGA8dGg+YAogICAgICAgIGJhY2tncm91bmQ6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGJhY2tncm91bmQtaW1hZ2VgIGluc3RlYWQKICAgICAgICBiZ0NvbG9yOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gIGFuZCB0YWJsZSBlbGVtZW50cy4gVXNlIENTUyBgYmFja2dyb3VuZC1jb2xvcmAgaW5zdGVhZAogICAgICAgIGJvcmRlcjogbnVtYmVyLAogICAgICAgIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLXdpZHRoYCBpbnN0ZWFkLAogICAgICAgIGJvcmRlckNvbG9yOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YC4gVXNlIENTUyBgYm9yZGVyLWNvbG9yYCBpbnN0ZWFkLAogICAgICAgIGJvdHRvbU1hcmdpbjogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgY2VsbFBhZGRpbmc6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgY2VsbFNwYWNpbmc6IG51bGwsCiAgICAgICAgLy8gYDx0YWJsZT5gCiAgICAgICAgY2hhcjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBhbGlnbj1jaGFyYCwgc2V0cyB0aGUgY2hhcmFjdGVyIHRvIGFsaWduIG9uCiAgICAgICAgY2hhck9mZjogbnVsbCwKICAgICAgICAvLyBTZXZlcmFsIHRhYmxlIGVsZW1lbnRzLiBXaGVuIGBjaGFyYCwgb2Zmc2V0cyB0aGUgYWxpZ25tZW50CiAgICAgICAgY2xhc3NJZDogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY2xlYXI6IG51bGwsCiAgICAgICAgLy8gYDxicj5gLiBVc2UgQ1NTIGBjbGVhcmAgaW5zdGVhZAogICAgICAgIGNvZGU6IG51bGwsCiAgICAgICAgLy8gYDxvYmplY3Q+YAogICAgICAgIGNvZGVCYXNlOiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBjb2RlVHlwZTogbnVsbCwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgY29sb3I6IG51bGwsCiAgICAgICAgLy8gYDxmb250PmAgYW5kIGA8aHI+YC4gVXNlIENTUyBpbnN0ZWFkCiAgICAgICAgY29tcGFjdDogYm9vbGVhbiwKICAgICAgICAvLyBMaXN0cy4gVXNlIENTUyB0byByZWR1Y2Ugc3BhY2UgYmV0d2VlbiBpdGVtcyBpbnN0ZWFkCiAgICAgICAgZGVjbGFyZTogYm9vbGVhbiwKICAgICAgICAvLyBgPG9iamVjdD5gCiAgICAgICAgZXZlbnQ6IG51bGwsCiAgICAgICAgLy8gYDxzY3JpcHQ+YAogICAgICAgIGZhY2U6IG51bGwsCiAgICAgICAgLy8gYDxmb250PmAuIFVzZSBDU1MgaW5zdGVhZAogICAgICAgIGZyYW1lOiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIGZyYW1lQm9yZGVyOiBudWxsLAogICAgICAgIC8vIGA8aWZyYW1lPmAuIFVzZSBDU1MgYGJvcmRlcmAgaW5zdGVhZAogICAgICAgIGhTcGFjZTogbnVtYmVyLAogICAgICAgIC8vIGA8aW1nPmAgYW5kIGA8b2JqZWN0PmAKICAgICAgICBsZWZ0TWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBsaW5rOiBudWxsLAogICAgICAgIC8vIGA8Ym9keT5gLiBVc2UgQ1NTIGBhOmxpbmsge2NvbG9yOiAqfWAgaW5zdGVhZAogICAgICAgIGxvbmdEZXNjOiBudWxsLAogICAgICAgIC8vIGA8ZnJhbWU+YCwgYDxpZnJhbWU+YCwgYW5kIGA8aW1nPmAuIFVzZSBhbiBgPGE+YAogICAgICAgIGxvd1NyYzogbnVsbCwKICAgICAgICAvLyBgPGltZz5gLiBVc2UgYSBgPHBpY3R1cmU+YAogICAgICAgIG1hcmdpbkhlaWdodDogbnVtYmVyLAogICAgICAgIC8vIGA8Ym9keT5gCiAgICAgICAgbWFyZ2luV2lkdGg6IG51bWJlciwKICAgICAgICAvLyBgPGJvZHk+YAogICAgICAgIG5vUmVzaXplOiBib29sZWFuLAogICAgICAgIC8vIGA8ZnJhbWU+YAogICAgICAgIG5vSHJlZjogYm9vbGVhbiwKICAgICAgICAvLyBgPGFyZWE+YC4gVXNlIG5vIGhyZWYgaW5zdGVhZCBvZiBhbiBleHBsaWNpdCBgbm9ocmVmYAogICAgICAgIG5vU2hhZGU6IGJvb2xlYW4sCiAgICAgICAgLy8gYDxocj5gLiBVc2UgYmFja2dyb3VuZC1jb2xvciBhbmQgaGVpZ2h0IGluc3RlYWQgb2YgYm9yZGVycwogICAgICAgIG5vV3JhcDogYm9vbGVhbiwKICAgICAgICAvLyBgPHRkPmAgYW5kIGA8dGg+YAogICAgICAgIG9iamVjdDogbnVsbCwKICAgICAgICAvLyBgPGFwcGxldD5gCiAgICAgICAgcHJvZmlsZTogbnVsbCwKICAgICAgICAvLyBgPGhlYWQ+YAogICAgICAgIHByb21wdDogbnVsbCwKICAgICAgICAvLyBgPGlzaW5kZXg+YAogICAgICAgIHJldjogbnVsbCwKICAgICAgICAvLyBgPGxpbms+YAogICAgICAgIHJpZ2h0TWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICBydWxlczogbnVsbCwKICAgICAgICAvLyBgPHRhYmxlPmAKICAgICAgICBzY2hlbWU6IG51bGwsCiAgICAgICAgLy8gYDxtZXRhPmAKICAgICAgICBzY3JvbGxpbmc6IGJvb2xlYW5pc2gsCiAgICAgICAgLy8gYDxmcmFtZT5gLiBVc2Ugb3ZlcmZsb3cgaW4gdGhlIGNoaWxkIGNvbnRleHQKICAgICAgICBzdGFuZGJ5OiBudWxsLAogICAgICAgIC8vIGA8b2JqZWN0PmAKICAgICAgICBzdW1tYXJ5OiBudWxsLAogICAgICAgIC8vIGA8dGFibGU+YAogICAgICAgIHRleHQ6IG51bGwsCiAgICAgICAgLy8gYDxib2R5PmAuIFVzZSBDU1MgYGNvbG9yYCBpbnN0ZWFkCiAgICAgICAgdG9wTWFyZ2luOiBudW1iZXIsCiAgICAgICAgLy8gYDxib2R5PmAKICAgICAgICB2YWx1ZVR5cGU6IG51bGwsCiAgICAgICAgLy8gYDxwYXJhbT5gCiAgICAgICAgdmVyc2lvbjogbnVsbCwKICAgICAgICAvLyBgPGh0bWw+YC4gVXNlIGEgZG9jdHlwZS4KICAgICAgICB2QWxpZ246IG51bGwsCiAgICAgICAgLy8gU2V2ZXJhbC4gVXNlIENTUyBgdmVydGljYWwtYWxpZ25gIGluc3RlYWQKICAgICAgICB2TGluazogbnVsbCwKICAgICAgICAvLyBgPGJvZHk+YC4gVXNlIENTUyBgYTp2aXNpdGVkIHtjb2xvcn1gIGluc3RlYWQKICAgICAgICB2U3BhY2U6IG51bWJlciwKICAgICAgICAvLyBgPGltZz5gIGFuZCBgPG9iamVjdD5gCiAgICAgICAgLy8gTm9uLXN0YW5kYXJkIFByb3BlcnRpZXMuCiAgICAgICAgYWxsb3dUcmFuc3BhcmVuY3k6IG51bGwsCiAgICAgICAgYXV0b0NvcnJlY3Q6IG51bGwsCiAgICAgICAgYXV0b1NhdmU6IG51bGwsCiAgICAgICAgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmU6IGJvb2xlYW4sCiAgICAgICAgZGlzYWJsZVJlbW90ZVBsYXliYWNrOiBib29sZWFuLAogICAgICAgIHByZWZpeDogbnVsbCwKICAgICAgICBwcm9wZXJ0eTogbnVsbCwKICAgICAgICByZXN1bHRzOiBudW1iZXIsCiAgICAgICAgc2VjdXJpdHk6IG51bGwsCiAgICAgICAgdW5zZWxlY3RhYmxlOiBudWxsCiAgICAgIH0sCiAgICAgIHNwYWNlOiAiaHRtbCIsCiAgICAgIHRyYW5zZm9ybTogY2FzZUluc2Vuc2l0aXZlVHJhbnNmb3JtCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvc3ZnLmpzCnZhciBzdmc7CnZhciBpbml0X3N2ZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvc3ZnLmpzIigpIHsKICAgIGluaXRfY2FzZV9zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgaW5pdF90eXBlczMoKTsKICAgIHN2ZyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgYWNjZW50SGVpZ2h0OiAiYWNjZW50LWhlaWdodCIsCiAgICAgICAgYWxpZ25tZW50QmFzZWxpbmU6ICJhbGlnbm1lbnQtYmFzZWxpbmUiLAogICAgICAgIGFyYWJpY0Zvcm06ICJhcmFiaWMtZm9ybSIsCiAgICAgICAgYmFzZWxpbmVTaGlmdDogImJhc2VsaW5lLXNoaWZ0IiwKICAgICAgICBjYXBIZWlnaHQ6ICJjYXAtaGVpZ2h0IiwKICAgICAgICBjbGFzc05hbWU6ICJjbGFzcyIsCiAgICAgICAgY2xpcFBhdGg6ICJjbGlwLXBhdGgiLAogICAgICAgIGNsaXBSdWxlOiAiY2xpcC1ydWxlIiwKICAgICAgICBjb2xvckludGVycG9sYXRpb246ICJjb2xvci1pbnRlcnBvbGF0aW9uIiwKICAgICAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiAiY29sb3ItaW50ZXJwb2xhdGlvbi1maWx0ZXJzIiwKICAgICAgICBjb2xvclByb2ZpbGU6ICJjb2xvci1wcm9maWxlIiwKICAgICAgICBjb2xvclJlbmRlcmluZzogImNvbG9yLXJlbmRlcmluZyIsCiAgICAgICAgY3Jvc3NPcmlnaW46ICJjcm9zc29yaWdpbiIsCiAgICAgICAgZGF0YVR5cGU6ICJkYXRhdHlwZSIsCiAgICAgICAgZG9taW5hbnRCYXNlbGluZTogImRvbWluYW50LWJhc2VsaW5lIiwKICAgICAgICBlbmFibGVCYWNrZ3JvdW5kOiAiZW5hYmxlLWJhY2tncm91bmQiLAogICAgICAgIGZpbGxPcGFjaXR5OiAiZmlsbC1vcGFjaXR5IiwKICAgICAgICBmaWxsUnVsZTogImZpbGwtcnVsZSIsCiAgICAgICAgZmxvb2RDb2xvcjogImZsb29kLWNvbG9yIiwKICAgICAgICBmbG9vZE9wYWNpdHk6ICJmbG9vZC1vcGFjaXR5IiwKICAgICAgICBmb250RmFtaWx5OiAiZm9udC1mYW1pbHkiLAogICAgICAgIGZvbnRTaXplOiAiZm9udC1zaXplIiwKICAgICAgICBmb250U2l6ZUFkanVzdDogImZvbnQtc2l6ZS1hZGp1c3QiLAogICAgICAgIGZvbnRTdHJldGNoOiAiZm9udC1zdHJldGNoIiwKICAgICAgICBmb250U3R5bGU6ICJmb250LXN0eWxlIiwKICAgICAgICBmb250VmFyaWFudDogImZvbnQtdmFyaWFudCIsCiAgICAgICAgZm9udFdlaWdodDogImZvbnQtd2VpZ2h0IiwKICAgICAgICBnbHlwaE5hbWU6ICJnbHlwaC1uYW1lIiwKICAgICAgICBnbHlwaE9yaWVudGF0aW9uSG9yaXpvbnRhbDogImdseXBoLW9yaWVudGF0aW9uLWhvcml6b250YWwiLAogICAgICAgIGdseXBoT3JpZW50YXRpb25WZXJ0aWNhbDogImdseXBoLW9yaWVudGF0aW9uLXZlcnRpY2FsIiwKICAgICAgICBocmVmTGFuZzogImhyZWZsYW5nIiwKICAgICAgICBob3JpekFkdlg6ICJob3Jpei1hZHYteCIsCiAgICAgICAgaG9yaXpPcmlnaW5YOiAiaG9yaXotb3JpZ2luLXgiLAogICAgICAgIGhvcml6T3JpZ2luWTogImhvcml6LW9yaWdpbi15IiwKICAgICAgICBpbWFnZVJlbmRlcmluZzogImltYWdlLXJlbmRlcmluZyIsCiAgICAgICAgbGV0dGVyU3BhY2luZzogImxldHRlci1zcGFjaW5nIiwKICAgICAgICBsaWdodGluZ0NvbG9yOiAibGlnaHRpbmctY29sb3IiLAogICAgICAgIG1hcmtlckVuZDogIm1hcmtlci1lbmQiLAogICAgICAgIG1hcmtlck1pZDogIm1hcmtlci1taWQiLAogICAgICAgIG1hcmtlclN0YXJ0OiAibWFya2VyLXN0YXJ0IiwKICAgICAgICBuYXZEb3duOiAibmF2LWRvd24iLAogICAgICAgIG5hdkRvd25MZWZ0OiAibmF2LWRvd24tbGVmdCIsCiAgICAgICAgbmF2RG93blJpZ2h0OiAibmF2LWRvd24tcmlnaHQiLAogICAgICAgIG5hdkxlZnQ6ICJuYXYtbGVmdCIsCiAgICAgICAgbmF2TmV4dDogIm5hdi1uZXh0IiwKICAgICAgICBuYXZQcmV2OiAibmF2LXByZXYiLAogICAgICAgIG5hdlJpZ2h0OiAibmF2LXJpZ2h0IiwKICAgICAgICBuYXZVcDogIm5hdi11cCIsCiAgICAgICAgbmF2VXBMZWZ0OiAibmF2LXVwLWxlZnQiLAogICAgICAgIG5hdlVwUmlnaHQ6ICJuYXYtdXAtcmlnaHQiLAogICAgICAgIG9uQWJvcnQ6ICJvbmFib3J0IiwKICAgICAgICBvbkFjdGl2YXRlOiAib25hY3RpdmF0ZSIsCiAgICAgICAgb25BZnRlclByaW50OiAib25hZnRlcnByaW50IiwKICAgICAgICBvbkJlZm9yZVByaW50OiAib25iZWZvcmVwcmludCIsCiAgICAgICAgb25CZWdpbjogIm9uYmVnaW4iLAogICAgICAgIG9uQ2FuY2VsOiAib25jYW5jZWwiLAogICAgICAgIG9uQ2FuUGxheTogIm9uY2FucGxheSIsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogIm9uY2FucGxheXRocm91Z2giLAogICAgICAgIG9uQ2hhbmdlOiAib25jaGFuZ2UiLAogICAgICAgIG9uQ2xpY2s6ICJvbmNsaWNrIiwKICAgICAgICBvbkNsb3NlOiAib25jbG9zZSIsCiAgICAgICAgb25Db3B5OiAib25jb3B5IiwKICAgICAgICBvbkN1ZUNoYW5nZTogIm9uY3VlY2hhbmdlIiwKICAgICAgICBvbkN1dDogIm9uY3V0IiwKICAgICAgICBvbkRibENsaWNrOiAib25kYmxjbGljayIsCiAgICAgICAgb25EcmFnOiAib25kcmFnIiwKICAgICAgICBvbkRyYWdFbmQ6ICJvbmRyYWdlbmQiLAogICAgICAgIG9uRHJhZ0VudGVyOiAib25kcmFnZW50ZXIiLAogICAgICAgIG9uRHJhZ0V4aXQ6ICJvbmRyYWdleGl0IiwKICAgICAgICBvbkRyYWdMZWF2ZTogIm9uZHJhZ2xlYXZlIiwKICAgICAgICBvbkRyYWdPdmVyOiAib25kcmFnb3ZlciIsCiAgICAgICAgb25EcmFnU3RhcnQ6ICJvbmRyYWdzdGFydCIsCiAgICAgICAgb25Ecm9wOiAib25kcm9wIiwKICAgICAgICBvbkR1cmF0aW9uQ2hhbmdlOiAib25kdXJhdGlvbmNoYW5nZSIsCiAgICAgICAgb25FbXB0aWVkOiAib25lbXB0aWVkIiwKICAgICAgICBvbkVuZDogIm9uZW5kIiwKICAgICAgICBvbkVuZGVkOiAib25lbmRlZCIsCiAgICAgICAgb25FcnJvcjogIm9uZXJyb3IiLAogICAgICAgIG9uRm9jdXM6ICJvbmZvY3VzIiwKICAgICAgICBvbkZvY3VzSW46ICJvbmZvY3VzaW4iLAogICAgICAgIG9uRm9jdXNPdXQ6ICJvbmZvY3Vzb3V0IiwKICAgICAgICBvbkhhc2hDaGFuZ2U6ICJvbmhhc2hjaGFuZ2UiLAogICAgICAgIG9uSW5wdXQ6ICJvbmlucHV0IiwKICAgICAgICBvbkludmFsaWQ6ICJvbmludmFsaWQiLAogICAgICAgIG9uS2V5RG93bjogIm9ua2V5ZG93biIsCiAgICAgICAgb25LZXlQcmVzczogIm9ua2V5cHJlc3MiLAogICAgICAgIG9uS2V5VXA6ICJvbmtleXVwIiwKICAgICAgICBvbkxvYWQ6ICJvbmxvYWQiLAogICAgICAgIG9uTG9hZGVkRGF0YTogIm9ubG9hZGVkZGF0YSIsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogIm9ubG9hZGVkbWV0YWRhdGEiLAogICAgICAgIG9uTG9hZFN0YXJ0OiAib25sb2Fkc3RhcnQiLAogICAgICAgIG9uTWVzc2FnZTogIm9ubWVzc2FnZSIsCiAgICAgICAgb25Nb3VzZURvd246ICJvbm1vdXNlZG93biIsCiAgICAgICAgb25Nb3VzZUVudGVyOiAib25tb3VzZWVudGVyIiwKICAgICAgICBvbk1vdXNlTGVhdmU6ICJvbm1vdXNlbGVhdmUiLAogICAgICAgIG9uTW91c2VNb3ZlOiAib25tb3VzZW1vdmUiLAogICAgICAgIG9uTW91c2VPdXQ6ICJvbm1vdXNlb3V0IiwKICAgICAgICBvbk1vdXNlT3ZlcjogIm9ubW91c2VvdmVyIiwKICAgICAgICBvbk1vdXNlVXA6ICJvbm1vdXNldXAiLAogICAgICAgIG9uTW91c2VXaGVlbDogIm9ubW91c2V3aGVlbCIsCiAgICAgICAgb25PZmZsaW5lOiAib25vZmZsaW5lIiwKICAgICAgICBvbk9ubGluZTogIm9ub25saW5lIiwKICAgICAgICBvblBhZ2VIaWRlOiAib25wYWdlaGlkZSIsCiAgICAgICAgb25QYWdlU2hvdzogIm9ucGFnZXNob3ciLAogICAgICAgIG9uUGFzdGU6ICJvbnBhc3RlIiwKICAgICAgICBvblBhdXNlOiAib25wYXVzZSIsCiAgICAgICAgb25QbGF5OiAib25wbGF5IiwKICAgICAgICBvblBsYXlpbmc6ICJvbnBsYXlpbmciLAogICAgICAgIG9uUG9wU3RhdGU6ICJvbnBvcHN0YXRlIiwKICAgICAgICBvblByb2dyZXNzOiAib25wcm9ncmVzcyIsCiAgICAgICAgb25SYXRlQ2hhbmdlOiAib25yYXRlY2hhbmdlIiwKICAgICAgICBvblJlcGVhdDogIm9ucmVwZWF0IiwKICAgICAgICBvblJlc2V0OiAib25yZXNldCIsCiAgICAgICAgb25SZXNpemU6ICJvbnJlc2l6ZSIsCiAgICAgICAgb25TY3JvbGw6ICJvbnNjcm9sbCIsCiAgICAgICAgb25TZWVrZWQ6ICJvbnNlZWtlZCIsCiAgICAgICAgb25TZWVraW5nOiAib25zZWVraW5nIiwKICAgICAgICBvblNlbGVjdDogIm9uc2VsZWN0IiwKICAgICAgICBvblNob3c6ICJvbnNob3ciLAogICAgICAgIG9uU3RhbGxlZDogIm9uc3RhbGxlZCIsCiAgICAgICAgb25TdG9yYWdlOiAib25zdG9yYWdlIiwKICAgICAgICBvblN1Ym1pdDogIm9uc3VibWl0IiwKICAgICAgICBvblN1c3BlbmQ6ICJvbnN1c3BlbmQiLAogICAgICAgIG9uVGltZVVwZGF0ZTogIm9udGltZXVwZGF0ZSIsCiAgICAgICAgb25Ub2dnbGU6ICJvbnRvZ2dsZSIsCiAgICAgICAgb25VbmxvYWQ6ICJvbnVubG9hZCIsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6ICJvbnZvbHVtZWNoYW5nZSIsCiAgICAgICAgb25XYWl0aW5nOiAib253YWl0aW5nIiwKICAgICAgICBvblpvb206ICJvbnpvb20iLAogICAgICAgIG92ZXJsaW5lUG9zaXRpb246ICJvdmVybGluZS1wb3NpdGlvbiIsCiAgICAgICAgb3ZlcmxpbmVUaGlja25lc3M6ICJvdmVybGluZS10aGlja25lc3MiLAogICAgICAgIHBhaW50T3JkZXI6ICJwYWludC1vcmRlciIsCiAgICAgICAgcGFub3NlMTogInBhbm9zZS0xIiwKICAgICAgICBwb2ludGVyRXZlbnRzOiAicG9pbnRlci1ldmVudHMiLAogICAgICAgIHJlZmVycmVyUG9saWN5OiAicmVmZXJyZXJwb2xpY3kiLAogICAgICAgIHJlbmRlcmluZ0ludGVudDogInJlbmRlcmluZy1pbnRlbnQiLAogICAgICAgIHNoYXBlUmVuZGVyaW5nOiAic2hhcGUtcmVuZGVyaW5nIiwKICAgICAgICBzdG9wQ29sb3I6ICJzdG9wLWNvbG9yIiwKICAgICAgICBzdG9wT3BhY2l0eTogInN0b3Atb3BhY2l0eSIsCiAgICAgICAgc3RyaWtldGhyb3VnaFBvc2l0aW9uOiAic3RyaWtldGhyb3VnaC1wb3NpdGlvbiIsCiAgICAgICAgc3RyaWtldGhyb3VnaFRoaWNrbmVzczogInN0cmlrZXRocm91Z2gtdGhpY2tuZXNzIiwKICAgICAgICBzdHJva2VEYXNoQXJyYXk6ICJzdHJva2UtZGFzaGFycmF5IiwKICAgICAgICBzdHJva2VEYXNoT2Zmc2V0OiAic3Ryb2tlLWRhc2hvZmZzZXQiLAogICAgICAgIHN0cm9rZUxpbmVDYXA6ICJzdHJva2UtbGluZWNhcCIsCiAgICAgICAgc3Ryb2tlTGluZUpvaW46ICJzdHJva2UtbGluZWpvaW4iLAogICAgICAgIHN0cm9rZU1pdGVyTGltaXQ6ICJzdHJva2UtbWl0ZXJsaW1pdCIsCiAgICAgICAgc3Ryb2tlT3BhY2l0eTogInN0cm9rZS1vcGFjaXR5IiwKICAgICAgICBzdHJva2VXaWR0aDogInN0cm9rZS13aWR0aCIsCiAgICAgICAgdGFiSW5kZXg6ICJ0YWJpbmRleCIsCiAgICAgICAgdGV4dEFuY2hvcjogInRleHQtYW5jaG9yIiwKICAgICAgICB0ZXh0RGVjb3JhdGlvbjogInRleHQtZGVjb3JhdGlvbiIsCiAgICAgICAgdGV4dFJlbmRlcmluZzogInRleHQtcmVuZGVyaW5nIiwKICAgICAgICB0cmFuc2Zvcm1PcmlnaW46ICJ0cmFuc2Zvcm0tb3JpZ2luIiwKICAgICAgICB0eXBlT2Y6ICJ0eXBlb2YiLAogICAgICAgIHVuZGVybGluZVBvc2l0aW9uOiAidW5kZXJsaW5lLXBvc2l0aW9uIiwKICAgICAgICB1bmRlcmxpbmVUaGlja25lc3M6ICJ1bmRlcmxpbmUtdGhpY2tuZXNzIiwKICAgICAgICB1bmljb2RlQmlkaTogInVuaWNvZGUtYmlkaSIsCiAgICAgICAgdW5pY29kZVJhbmdlOiAidW5pY29kZS1yYW5nZSIsCiAgICAgICAgdW5pdHNQZXJFbTogInVuaXRzLXBlci1lbSIsCiAgICAgICAgdkFscGhhYmV0aWM6ICJ2LWFscGhhYmV0aWMiLAogICAgICAgIHZIYW5naW5nOiAidi1oYW5naW5nIiwKICAgICAgICB2SWRlb2dyYXBoaWM6ICJ2LWlkZW9ncmFwaGljIiwKICAgICAgICB2TWF0aGVtYXRpY2FsOiAidi1tYXRoZW1hdGljYWwiLAogICAgICAgIHZlY3RvckVmZmVjdDogInZlY3Rvci1lZmZlY3QiLAogICAgICAgIHZlcnRBZHZZOiAidmVydC1hZHYteSIsCiAgICAgICAgdmVydE9yaWdpblg6ICJ2ZXJ0LW9yaWdpbi14IiwKICAgICAgICB2ZXJ0T3JpZ2luWTogInZlcnQtb3JpZ2luLXkiLAogICAgICAgIHdvcmRTcGFjaW5nOiAid29yZC1zcGFjaW5nIiwKICAgICAgICB3cml0aW5nTW9kZTogIndyaXRpbmctbW9kZSIsCiAgICAgICAgeEhlaWdodDogIngtaGVpZ2h0IiwKICAgICAgICAvLyBUaGVzZSB3ZXJlIGNhbWVsY2FzZWQgaW4gVGlueS4gTm93IGxvd2VyY2FzZWQgaW4gU1ZHIDIKICAgICAgICBwbGF5YmFja09yZGVyOiAicGxheWJhY2tvcmRlciIsCiAgICAgICAgdGltZWxpbmVCZWdpbjogInRpbWVsaW5lYmVnaW4iCiAgICAgIH0sCiAgICAgIHByb3BlcnRpZXM6IHsKICAgICAgICBhYm91dDogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIGFjY2VudEhlaWdodDogbnVtYmVyLAogICAgICAgIGFjY3VtdWxhdGU6IG51bGwsCiAgICAgICAgYWRkaXRpdmU6IG51bGwsCiAgICAgICAgYWxpZ25tZW50QmFzZWxpbmU6IG51bGwsCiAgICAgICAgYWxwaGFiZXRpYzogbnVtYmVyLAogICAgICAgIGFtcGxpdHVkZTogbnVtYmVyLAogICAgICAgIGFyYWJpY0Zvcm06IG51bGwsCiAgICAgICAgYXNjZW50OiBudW1iZXIsCiAgICAgICAgYXR0cmlidXRlTmFtZTogbnVsbCwKICAgICAgICBhdHRyaWJ1dGVUeXBlOiBudWxsLAogICAgICAgIGF6aW11dGg6IG51bWJlciwKICAgICAgICBiYW5kd2lkdGg6IG51bGwsCiAgICAgICAgYmFzZWxpbmVTaGlmdDogbnVsbCwKICAgICAgICBiYXNlRnJlcXVlbmN5OiBudWxsLAogICAgICAgIGJhc2VQcm9maWxlOiBudWxsLAogICAgICAgIGJib3g6IG51bGwsCiAgICAgICAgYmVnaW46IG51bGwsCiAgICAgICAgYmlhczogbnVtYmVyLAogICAgICAgIGJ5OiBudWxsLAogICAgICAgIGNhbGNNb2RlOiBudWxsLAogICAgICAgIGNhcEhlaWdodDogbnVtYmVyLAogICAgICAgIGNsYXNzTmFtZTogc3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgY2xpcDogbnVsbCwKICAgICAgICBjbGlwUGF0aDogbnVsbCwKICAgICAgICBjbGlwUGF0aFVuaXRzOiBudWxsLAogICAgICAgIGNsaXBSdWxlOiBudWxsLAogICAgICAgIGNvbG9yOiBudWxsLAogICAgICAgIGNvbG9ySW50ZXJwb2xhdGlvbjogbnVsbCwKICAgICAgICBjb2xvckludGVycG9sYXRpb25GaWx0ZXJzOiBudWxsLAogICAgICAgIGNvbG9yUHJvZmlsZTogbnVsbCwKICAgICAgICBjb2xvclJlbmRlcmluZzogbnVsbCwKICAgICAgICBjb250ZW50OiBudWxsLAogICAgICAgIGNvbnRlbnRTY3JpcHRUeXBlOiBudWxsLAogICAgICAgIGNvbnRlbnRTdHlsZVR5cGU6IG51bGwsCiAgICAgICAgY3Jvc3NPcmlnaW46IG51bGwsCiAgICAgICAgY3Vyc29yOiBudWxsLAogICAgICAgIGN4OiBudWxsLAogICAgICAgIGN5OiBudWxsLAogICAgICAgIGQ6IG51bGwsCiAgICAgICAgZGF0YVR5cGU6IG51bGwsCiAgICAgICAgZGVmYXVsdEFjdGlvbjogbnVsbCwKICAgICAgICBkZXNjZW50OiBudW1iZXIsCiAgICAgICAgZGlmZnVzZUNvbnN0YW50OiBudW1iZXIsCiAgICAgICAgZGlyZWN0aW9uOiBudWxsLAogICAgICAgIGRpc3BsYXk6IG51bGwsCiAgICAgICAgZHVyOiBudWxsLAogICAgICAgIGRpdmlzb3I6IG51bWJlciwKICAgICAgICBkb21pbmFudEJhc2VsaW5lOiBudWxsLAogICAgICAgIGRvd25sb2FkOiBib29sZWFuLAogICAgICAgIGR4OiBudWxsLAogICAgICAgIGR5OiBudWxsLAogICAgICAgIGVkZ2VNb2RlOiBudWxsLAogICAgICAgIGVkaXRhYmxlOiBudWxsLAogICAgICAgIGVsZXZhdGlvbjogbnVtYmVyLAogICAgICAgIGVuYWJsZUJhY2tncm91bmQ6IG51bGwsCiAgICAgICAgZW5kOiBudWxsLAogICAgICAgIGV2ZW50OiBudWxsLAogICAgICAgIGV4cG9uZW50OiBudW1iZXIsCiAgICAgICAgZXh0ZXJuYWxSZXNvdXJjZXNSZXF1aXJlZDogbnVsbCwKICAgICAgICBmaWxsOiBudWxsLAogICAgICAgIGZpbGxPcGFjaXR5OiBudW1iZXIsCiAgICAgICAgZmlsbFJ1bGU6IG51bGwsCiAgICAgICAgZmlsdGVyOiBudWxsLAogICAgICAgIGZpbHRlclJlczogbnVsbCwKICAgICAgICBmaWx0ZXJVbml0czogbnVsbCwKICAgICAgICBmbG9vZENvbG9yOiBudWxsLAogICAgICAgIGZsb29kT3BhY2l0eTogbnVsbCwKICAgICAgICBmb2N1c2FibGU6IG51bGwsCiAgICAgICAgZm9jdXNIaWdobGlnaHQ6IG51bGwsCiAgICAgICAgZm9udEZhbWlseTogbnVsbCwKICAgICAgICBmb250U2l6ZTogbnVsbCwKICAgICAgICBmb250U2l6ZUFkanVzdDogbnVsbCwKICAgICAgICBmb250U3RyZXRjaDogbnVsbCwKICAgICAgICBmb250U3R5bGU6IG51bGwsCiAgICAgICAgZm9udFZhcmlhbnQ6IG51bGwsCiAgICAgICAgZm9udFdlaWdodDogbnVsbCwKICAgICAgICBmb3JtYXQ6IG51bGwsCiAgICAgICAgZnI6IG51bGwsCiAgICAgICAgZnJvbTogbnVsbCwKICAgICAgICBmeDogbnVsbCwKICAgICAgICBmeTogbnVsbCwKICAgICAgICBnMTogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgZzI6IGNvbW1hU2VwYXJhdGVkLAogICAgICAgIGdseXBoTmFtZTogY29tbWFTZXBhcmF0ZWQsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvbkhvcml6b250YWw6IG51bGwsCiAgICAgICAgZ2x5cGhPcmllbnRhdGlvblZlcnRpY2FsOiBudWxsLAogICAgICAgIGdseXBoUmVmOiBudWxsLAogICAgICAgIGdyYWRpZW50VHJhbnNmb3JtOiBudWxsLAogICAgICAgIGdyYWRpZW50VW5pdHM6IG51bGwsCiAgICAgICAgaGFuZGxlcjogbnVsbCwKICAgICAgICBoYW5naW5nOiBudW1iZXIsCiAgICAgICAgaGF0Y2hDb250ZW50VW5pdHM6IG51bGwsCiAgICAgICAgaGF0Y2hVbml0czogbnVsbCwKICAgICAgICBoZWlnaHQ6IG51bGwsCiAgICAgICAgaHJlZjogbnVsbCwKICAgICAgICBocmVmTGFuZzogbnVsbCwKICAgICAgICBob3JpekFkdlg6IG51bWJlciwKICAgICAgICBob3Jpek9yaWdpblg6IG51bWJlciwKICAgICAgICBob3Jpek9yaWdpblk6IG51bWJlciwKICAgICAgICBpZDogbnVsbCwKICAgICAgICBpZGVvZ3JhcGhpYzogbnVtYmVyLAogICAgICAgIGltYWdlUmVuZGVyaW5nOiBudWxsLAogICAgICAgIGluaXRpYWxWaXNpYmlsaXR5OiBudWxsLAogICAgICAgIGluOiBudWxsLAogICAgICAgIGluMjogbnVsbCwKICAgICAgICBpbnRlcmNlcHQ6IG51bWJlciwKICAgICAgICBrOiBudW1iZXIsCiAgICAgICAgazE6IG51bWJlciwKICAgICAgICBrMjogbnVtYmVyLAogICAgICAgIGszOiBudW1iZXIsCiAgICAgICAgazQ6IG51bWJlciwKICAgICAgICBrZXJuZWxNYXRyaXg6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBrZXJuZWxVbml0TGVuZ3RoOiBudWxsLAogICAgICAgIGtleVBvaW50czogbnVsbCwKICAgICAgICAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRAogICAgICAgIGtleVNwbGluZXM6IG51bGwsCiAgICAgICAgLy8gU0VNSV9DT0xPTl9TRVBBUkFURUQKICAgICAgICBrZXlUaW1lczogbnVsbCwKICAgICAgICAvLyBTRU1JX0NPTE9OX1NFUEFSQVRFRAogICAgICAgIGtlcm5pbmc6IG51bGwsCiAgICAgICAgbGFuZzogbnVsbCwKICAgICAgICBsZW5ndGhBZGp1c3Q6IG51bGwsCiAgICAgICAgbGV0dGVyU3BhY2luZzogbnVsbCwKICAgICAgICBsaWdodGluZ0NvbG9yOiBudWxsLAogICAgICAgIGxpbWl0aW5nQ29uZUFuZ2xlOiBudW1iZXIsCiAgICAgICAgbG9jYWw6IG51bGwsCiAgICAgICAgbWFya2VyRW5kOiBudWxsLAogICAgICAgIG1hcmtlck1pZDogbnVsbCwKICAgICAgICBtYXJrZXJTdGFydDogbnVsbCwKICAgICAgICBtYXJrZXJIZWlnaHQ6IG51bGwsCiAgICAgICAgbWFya2VyVW5pdHM6IG51bGwsCiAgICAgICAgbWFya2VyV2lkdGg6IG51bGwsCiAgICAgICAgbWFzazogbnVsbCwKICAgICAgICBtYXNrQ29udGVudFVuaXRzOiBudWxsLAogICAgICAgIG1hc2tVbml0czogbnVsbCwKICAgICAgICBtYXRoZW1hdGljYWw6IG51bGwsCiAgICAgICAgbWF4OiBudWxsLAogICAgICAgIG1lZGlhOiBudWxsLAogICAgICAgIG1lZGlhQ2hhcmFjdGVyRW5jb2Rpbmc6IG51bGwsCiAgICAgICAgbWVkaWFDb250ZW50RW5jb2RpbmdzOiBudWxsLAogICAgICAgIG1lZGlhU2l6ZTogbnVtYmVyLAogICAgICAgIG1lZGlhVGltZTogbnVsbCwKICAgICAgICBtZXRob2Q6IG51bGwsCiAgICAgICAgbWluOiBudWxsLAogICAgICAgIG1vZGU6IG51bGwsCiAgICAgICAgbmFtZTogbnVsbCwKICAgICAgICBuYXZEb3duOiBudWxsLAogICAgICAgIG5hdkRvd25MZWZ0OiBudWxsLAogICAgICAgIG5hdkRvd25SaWdodDogbnVsbCwKICAgICAgICBuYXZMZWZ0OiBudWxsLAogICAgICAgIG5hdk5leHQ6IG51bGwsCiAgICAgICAgbmF2UHJldjogbnVsbCwKICAgICAgICBuYXZSaWdodDogbnVsbCwKICAgICAgICBuYXZVcDogbnVsbCwKICAgICAgICBuYXZVcExlZnQ6IG51bGwsCiAgICAgICAgbmF2VXBSaWdodDogbnVsbCwKICAgICAgICBudW1PY3RhdmVzOiBudWxsLAogICAgICAgIG9ic2VydmVyOiBudWxsLAogICAgICAgIG9mZnNldDogbnVsbCwKICAgICAgICBvbkFib3J0OiBudWxsLAogICAgICAgIG9uQWN0aXZhdGU6IG51bGwsCiAgICAgICAgb25BZnRlclByaW50OiBudWxsLAogICAgICAgIG9uQmVmb3JlUHJpbnQ6IG51bGwsCiAgICAgICAgb25CZWdpbjogbnVsbCwKICAgICAgICBvbkNhbmNlbDogbnVsbCwKICAgICAgICBvbkNhblBsYXk6IG51bGwsCiAgICAgICAgb25DYW5QbGF5VGhyb3VnaDogbnVsbCwKICAgICAgICBvbkNoYW5nZTogbnVsbCwKICAgICAgICBvbkNsaWNrOiBudWxsLAogICAgICAgIG9uQ2xvc2U6IG51bGwsCiAgICAgICAgb25Db3B5OiBudWxsLAogICAgICAgIG9uQ3VlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uQ3V0OiBudWxsLAogICAgICAgIG9uRGJsQ2xpY2s6IG51bGwsCiAgICAgICAgb25EcmFnOiBudWxsLAogICAgICAgIG9uRHJhZ0VuZDogbnVsbCwKICAgICAgICBvbkRyYWdFbnRlcjogbnVsbCwKICAgICAgICBvbkRyYWdFeGl0OiBudWxsLAogICAgICAgIG9uRHJhZ0xlYXZlOiBudWxsLAogICAgICAgIG9uRHJhZ092ZXI6IG51bGwsCiAgICAgICAgb25EcmFnU3RhcnQ6IG51bGwsCiAgICAgICAgb25Ecm9wOiBudWxsLAogICAgICAgIG9uRHVyYXRpb25DaGFuZ2U6IG51bGwsCiAgICAgICAgb25FbXB0aWVkOiBudWxsLAogICAgICAgIG9uRW5kOiBudWxsLAogICAgICAgIG9uRW5kZWQ6IG51bGwsCiAgICAgICAgb25FcnJvcjogbnVsbCwKICAgICAgICBvbkZvY3VzOiBudWxsLAogICAgICAgIG9uRm9jdXNJbjogbnVsbCwKICAgICAgICBvbkZvY3VzT3V0OiBudWxsLAogICAgICAgIG9uSGFzaENoYW5nZTogbnVsbCwKICAgICAgICBvbklucHV0OiBudWxsLAogICAgICAgIG9uSW52YWxpZDogbnVsbCwKICAgICAgICBvbktleURvd246IG51bGwsCiAgICAgICAgb25LZXlQcmVzczogbnVsbCwKICAgICAgICBvbktleVVwOiBudWxsLAogICAgICAgIG9uTG9hZDogbnVsbCwKICAgICAgICBvbkxvYWRlZERhdGE6IG51bGwsCiAgICAgICAgb25Mb2FkZWRNZXRhZGF0YTogbnVsbCwKICAgICAgICBvbkxvYWRTdGFydDogbnVsbCwKICAgICAgICBvbk1lc3NhZ2U6IG51bGwsCiAgICAgICAgb25Nb3VzZURvd246IG51bGwsCiAgICAgICAgb25Nb3VzZUVudGVyOiBudWxsLAogICAgICAgIG9uTW91c2VMZWF2ZTogbnVsbCwKICAgICAgICBvbk1vdXNlTW92ZTogbnVsbCwKICAgICAgICBvbk1vdXNlT3V0OiBudWxsLAogICAgICAgIG9uTW91c2VPdmVyOiBudWxsLAogICAgICAgIG9uTW91c2VVcDogbnVsbCwKICAgICAgICBvbk1vdXNlV2hlZWw6IG51bGwsCiAgICAgICAgb25PZmZsaW5lOiBudWxsLAogICAgICAgIG9uT25saW5lOiBudWxsLAogICAgICAgIG9uUGFnZUhpZGU6IG51bGwsCiAgICAgICAgb25QYWdlU2hvdzogbnVsbCwKICAgICAgICBvblBhc3RlOiBudWxsLAogICAgICAgIG9uUGF1c2U6IG51bGwsCiAgICAgICAgb25QbGF5OiBudWxsLAogICAgICAgIG9uUGxheWluZzogbnVsbCwKICAgICAgICBvblBvcFN0YXRlOiBudWxsLAogICAgICAgIG9uUHJvZ3Jlc3M6IG51bGwsCiAgICAgICAgb25SYXRlQ2hhbmdlOiBudWxsLAogICAgICAgIG9uUmVwZWF0OiBudWxsLAogICAgICAgIG9uUmVzZXQ6IG51bGwsCiAgICAgICAgb25SZXNpemU6IG51bGwsCiAgICAgICAgb25TY3JvbGw6IG51bGwsCiAgICAgICAgb25TZWVrZWQ6IG51bGwsCiAgICAgICAgb25TZWVraW5nOiBudWxsLAogICAgICAgIG9uU2VsZWN0OiBudWxsLAogICAgICAgIG9uU2hvdzogbnVsbCwKICAgICAgICBvblN0YWxsZWQ6IG51bGwsCiAgICAgICAgb25TdG9yYWdlOiBudWxsLAogICAgICAgIG9uU3VibWl0OiBudWxsLAogICAgICAgIG9uU3VzcGVuZDogbnVsbCwKICAgICAgICBvblRpbWVVcGRhdGU6IG51bGwsCiAgICAgICAgb25Ub2dnbGU6IG51bGwsCiAgICAgICAgb25VbmxvYWQ6IG51bGwsCiAgICAgICAgb25Wb2x1bWVDaGFuZ2U6IG51bGwsCiAgICAgICAgb25XYWl0aW5nOiBudWxsLAogICAgICAgIG9uWm9vbTogbnVsbCwKICAgICAgICBvcGFjaXR5OiBudWxsLAogICAgICAgIG9wZXJhdG9yOiBudWxsLAogICAgICAgIG9yZGVyOiBudWxsLAogICAgICAgIG9yaWVudDogbnVsbCwKICAgICAgICBvcmllbnRhdGlvbjogbnVsbCwKICAgICAgICBvcmlnaW46IG51bGwsCiAgICAgICAgb3ZlcmZsb3c6IG51bGwsCiAgICAgICAgb3ZlcmxheTogbnVsbCwKICAgICAgICBvdmVybGluZVBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgb3ZlcmxpbmVUaGlja25lc3M6IG51bWJlciwKICAgICAgICBwYWludE9yZGVyOiBudWxsLAogICAgICAgIHBhbm9zZTE6IG51bGwsCiAgICAgICAgcGF0aDogbnVsbCwKICAgICAgICBwYXRoTGVuZ3RoOiBudW1iZXIsCiAgICAgICAgcGF0dGVybkNvbnRlbnRVbml0czogbnVsbCwKICAgICAgICBwYXR0ZXJuVHJhbnNmb3JtOiBudWxsLAogICAgICAgIHBhdHRlcm5Vbml0czogbnVsbCwKICAgICAgICBwaGFzZTogbnVsbCwKICAgICAgICBwaW5nOiBzcGFjZVNlcGFyYXRlZCwKICAgICAgICBwaXRjaDogbnVsbCwKICAgICAgICBwbGF5YmFja09yZGVyOiBudWxsLAogICAgICAgIHBvaW50ZXJFdmVudHM6IG51bGwsCiAgICAgICAgcG9pbnRzOiBudWxsLAogICAgICAgIHBvaW50c0F0WDogbnVtYmVyLAogICAgICAgIHBvaW50c0F0WTogbnVtYmVyLAogICAgICAgIHBvaW50c0F0WjogbnVtYmVyLAogICAgICAgIHByZXNlcnZlQWxwaGE6IG51bGwsCiAgICAgICAgcHJlc2VydmVBc3BlY3RSYXRpbzogbnVsbCwKICAgICAgICBwcmltaXRpdmVVbml0czogbnVsbCwKICAgICAgICBwcm9wYWdhdGU6IG51bGwsCiAgICAgICAgcHJvcGVydHk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByOiBudWxsLAogICAgICAgIHJhZGl1czogbnVsbCwKICAgICAgICByZWZlcnJlclBvbGljeTogbnVsbCwKICAgICAgICByZWZYOiBudWxsLAogICAgICAgIHJlZlk6IG51bGwsCiAgICAgICAgcmVsOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmV2OiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVuZGVyaW5nSW50ZW50OiBudWxsLAogICAgICAgIHJlcGVhdENvdW50OiBudWxsLAogICAgICAgIHJlcGVhdER1cjogbnVsbCwKICAgICAgICByZXF1aXJlZEV4dGVuc2lvbnM6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICByZXF1aXJlZEZlYXR1cmVzOiBjb21tYU9yU3BhY2VTZXBhcmF0ZWQsCiAgICAgICAgcmVxdWlyZWRGb250czogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlcXVpcmVkRm9ybWF0czogY29tbWFPclNwYWNlU2VwYXJhdGVkLAogICAgICAgIHJlc291cmNlOiBudWxsLAogICAgICAgIHJlc3RhcnQ6IG51bGwsCiAgICAgICAgcmVzdWx0OiBudWxsLAogICAgICAgIHJvdGF0ZTogbnVsbCwKICAgICAgICByeDogbnVsbCwKICAgICAgICByeTogbnVsbCwKICAgICAgICBzY2FsZTogbnVsbCwKICAgICAgICBzZWVkOiBudWxsLAogICAgICAgIHNoYXBlUmVuZGVyaW5nOiBudWxsLAogICAgICAgIHNpZGU6IG51bGwsCiAgICAgICAgc2xvcGU6IG51bGwsCiAgICAgICAgc25hcHNob3RUaW1lOiBudWxsLAogICAgICAgIHNwZWN1bGFyQ29uc3RhbnQ6IG51bWJlciwKICAgICAgICBzcGVjdWxhckV4cG9uZW50OiBudW1iZXIsCiAgICAgICAgc3ByZWFkTWV0aG9kOiBudWxsLAogICAgICAgIHNwYWNpbmc6IG51bGwsCiAgICAgICAgc3RhcnRPZmZzZXQ6IG51bGwsCiAgICAgICAgc3RkRGV2aWF0aW9uOiBudWxsLAogICAgICAgIHN0ZW1oOiBudWxsLAogICAgICAgIHN0ZW12OiBudWxsLAogICAgICAgIHN0aXRjaFRpbGVzOiBudWxsLAogICAgICAgIHN0b3BDb2xvcjogbnVsbCwKICAgICAgICBzdG9wT3BhY2l0eTogbnVsbCwKICAgICAgICBzdHJpa2V0aHJvdWdoUG9zaXRpb246IG51bWJlciwKICAgICAgICBzdHJpa2V0aHJvdWdoVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgc3RyaW5nOiBudWxsLAogICAgICAgIHN0cm9rZTogbnVsbCwKICAgICAgICBzdHJva2VEYXNoQXJyYXk6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICBzdHJva2VEYXNoT2Zmc2V0OiBudWxsLAogICAgICAgIHN0cm9rZUxpbmVDYXA6IG51bGwsCiAgICAgICAgc3Ryb2tlTGluZUpvaW46IG51bGwsCiAgICAgICAgc3Ryb2tlTWl0ZXJMaW1pdDogbnVtYmVyLAogICAgICAgIHN0cm9rZU9wYWNpdHk6IG51bWJlciwKICAgICAgICBzdHJva2VXaWR0aDogbnVsbCwKICAgICAgICBzdHlsZTogbnVsbCwKICAgICAgICBzdXJmYWNlU2NhbGU6IG51bWJlciwKICAgICAgICBzeW5jQmVoYXZpb3I6IG51bGwsCiAgICAgICAgc3luY0JlaGF2aW9yRGVmYXVsdDogbnVsbCwKICAgICAgICBzeW5jTWFzdGVyOiBudWxsLAogICAgICAgIHN5bmNUb2xlcmFuY2U6IG51bGwsCiAgICAgICAgc3luY1RvbGVyYW5jZURlZmF1bHQ6IG51bGwsCiAgICAgICAgc3lzdGVtTGFuZ3VhZ2U6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICB0YWJJbmRleDogbnVtYmVyLAogICAgICAgIHRhYmxlVmFsdWVzOiBudWxsLAogICAgICAgIHRhcmdldDogbnVsbCwKICAgICAgICB0YXJnZXRYOiBudW1iZXIsCiAgICAgICAgdGFyZ2V0WTogbnVtYmVyLAogICAgICAgIHRleHRBbmNob3I6IG51bGwsCiAgICAgICAgdGV4dERlY29yYXRpb246IG51bGwsCiAgICAgICAgdGV4dFJlbmRlcmluZzogbnVsbCwKICAgICAgICB0ZXh0TGVuZ3RoOiBudWxsLAogICAgICAgIHRpbWVsaW5lQmVnaW46IG51bGwsCiAgICAgICAgdGl0bGU6IG51bGwsCiAgICAgICAgdHJhbnNmb3JtQmVoYXZpb3I6IG51bGwsCiAgICAgICAgdHlwZTogbnVsbCwKICAgICAgICB0eXBlT2Y6IGNvbW1hT3JTcGFjZVNlcGFyYXRlZCwKICAgICAgICB0bzogbnVsbCwKICAgICAgICB0cmFuc2Zvcm06IG51bGwsCiAgICAgICAgdHJhbnNmb3JtT3JpZ2luOiBudWxsLAogICAgICAgIHUxOiBudWxsLAogICAgICAgIHUyOiBudWxsLAogICAgICAgIHVuZGVybGluZVBvc2l0aW9uOiBudW1iZXIsCiAgICAgICAgdW5kZXJsaW5lVGhpY2tuZXNzOiBudW1iZXIsCiAgICAgICAgdW5pY29kZTogbnVsbCwKICAgICAgICB1bmljb2RlQmlkaTogbnVsbCwKICAgICAgICB1bmljb2RlUmFuZ2U6IG51bGwsCiAgICAgICAgdW5pdHNQZXJFbTogbnVtYmVyLAogICAgICAgIHZhbHVlczogbnVsbCwKICAgICAgICB2QWxwaGFiZXRpYzogbnVtYmVyLAogICAgICAgIHZNYXRoZW1hdGljYWw6IG51bWJlciwKICAgICAgICB2ZWN0b3JFZmZlY3Q6IG51bGwsCiAgICAgICAgdkhhbmdpbmc6IG51bWJlciwKICAgICAgICB2SWRlb2dyYXBoaWM6IG51bWJlciwKICAgICAgICB2ZXJzaW9uOiBudWxsLAogICAgICAgIHZlcnRBZHZZOiBudW1iZXIsCiAgICAgICAgdmVydE9yaWdpblg6IG51bWJlciwKICAgICAgICB2ZXJ0T3JpZ2luWTogbnVtYmVyLAogICAgICAgIHZpZXdCb3g6IG51bGwsCiAgICAgICAgdmlld1RhcmdldDogbnVsbCwKICAgICAgICB2aXNpYmlsaXR5OiBudWxsLAogICAgICAgIHdpZHRoOiBudWxsLAogICAgICAgIHdpZHRoczogbnVsbCwKICAgICAgICB3b3JkU3BhY2luZzogbnVsbCwKICAgICAgICB3cml0aW5nTW9kZTogbnVsbCwKICAgICAgICB4OiBudWxsLAogICAgICAgIHgxOiBudWxsLAogICAgICAgIHgyOiBudWxsLAogICAgICAgIHhDaGFubmVsU2VsZWN0b3I6IG51bGwsCiAgICAgICAgeEhlaWdodDogbnVtYmVyLAogICAgICAgIHk6IG51bGwsCiAgICAgICAgeTE6IG51bGwsCiAgICAgICAgeTI6IG51bGwsCiAgICAgICAgeUNoYW5uZWxTZWxlY3RvcjogbnVsbCwKICAgICAgICB6OiBudWxsLAogICAgICAgIHpvb21BbmRQYW46IG51bGwKICAgICAgfSwKICAgICAgc3BhY2U6ICJzdmciLAogICAgICB0cmFuc2Zvcm06IGNhc2VTZW5zaXRpdmVUcmFuc2Zvcm0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bGluay5qcwp2YXIgeGxpbms7CnZhciBpbml0X3hsaW5rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bGluay5qcyIoKSB7CiAgICBpbml0X2NyZWF0ZSgpOwogICAgeGxpbmsgPSBjcmVhdGU2KHsKICAgICAgcHJvcGVydGllczogewogICAgICAgIHhMaW5rQWN0dWF0ZTogbnVsbCwKICAgICAgICB4TGlua0FyY1JvbGU6IG51bGwsCiAgICAgICAgeExpbmtIcmVmOiBudWxsLAogICAgICAgIHhMaW5rUm9sZTogbnVsbCwKICAgICAgICB4TGlua1Nob3c6IG51bGwsCiAgICAgICAgeExpbmtUaXRsZTogbnVsbCwKICAgICAgICB4TGlua1R5cGU6IG51bGwKICAgICAgfSwKICAgICAgc3BhY2U6ICJ4bGluayIsCiAgICAgIHRyYW5zZm9ybShfNCwgcHJvcGVydHkxMSkgewogICAgICAgIHJldHVybiAieGxpbms6IiArIHByb3BlcnR5MTEuc2xpY2UoNSkudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3htbG5zLmpzCnZhciB4bWxuczsKdmFyIGluaXRfeG1sbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL3htbG5zLmpzIigpIHsKICAgIGluaXRfY3JlYXRlKCk7CiAgICBpbml0X2Nhc2VfaW5zZW5zaXRpdmVfdHJhbnNmb3JtKCk7CiAgICB4bWxucyA9IGNyZWF0ZTYoewogICAgICBhdHRyaWJ1dGVzOiB7IHhtbG5zeGxpbms6ICJ4bWxuczp4bGluayIgfSwKICAgICAgcHJvcGVydGllczogeyB4bWxuc1hMaW5rOiBudWxsLCB4bWxuczogbnVsbCB9LAogICAgICBzcGFjZTogInhtbG5zIiwKICAgICAgdHJhbnNmb3JtOiBjYXNlSW5zZW5zaXRpdmVUcmFuc2Zvcm0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWwuanMKdmFyIHhtbDsKdmFyIGluaXRfeG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi94bWwuanMiKCkgewogICAgaW5pdF9jcmVhdGUoKTsKICAgIHhtbCA9IGNyZWF0ZTYoewogICAgICBwcm9wZXJ0aWVzOiB7IHhtbEJhc2U6IG51bGwsIHhtbExhbmc6IG51bGwsIHhtbFNwYWNlOiBudWxsIH0sCiAgICAgIHNwYWNlOiAieG1sIiwKICAgICAgdHJhbnNmb3JtKF80LCBwcm9wZXJ0eTExKSB7CiAgICAgICAgcmV0dXJuICJ4bWw6IiArIHByb3BlcnR5MTEuc2xpY2UoMykudG9Mb3dlckNhc2UoKTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2hhc3QtdG8tcmVhY3QuanMKdmFyIGluaXRfaGFzdF90b19yZWFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3Byb3BlcnR5LWluZm9ybWF0aW9uQDcuMS4wL25vZGVfbW9kdWxlcy9wcm9wZXJ0eS1pbmZvcm1hdGlvbi9saWIvaGFzdC10by1yZWFjdC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vbGliL2ZpbmQuanMKZnVuY3Rpb24gZmluZDIoc2NoZW1hLCB2YWx1ZTIpIHsKICBjb25zdCBub3JtYWwgPSBub3JtYWxpemUzKHZhbHVlMik7CiAgbGV0IHByb3BlcnR5MTEgPSB2YWx1ZTI7CiAgbGV0IFR5cGUyID0gSW5mbzsKICBpZiAobm9ybWFsIGluIHNjaGVtYS5ub3JtYWwpIHsKICAgIHJldHVybiBzY2hlbWEucHJvcGVydHlbc2NoZW1hLm5vcm1hbFtub3JtYWxdXTsKICB9CiAgaWYgKG5vcm1hbC5sZW5ndGggPiA0ICYmIG5vcm1hbC5zbGljZSgwLCA0KSA9PT0gImRhdGEiICYmIHZhbGlkLnRlc3QodmFsdWUyKSkgewogICAgaWYgKHZhbHVlMi5jaGFyQXQoNCkgPT09ICItIikgewogICAgICBjb25zdCByZXN0ID0gdmFsdWUyLnNsaWNlKDUpLnJlcGxhY2UoZGFzaCwgY2FtZWxjYXNlKTsKICAgICAgcHJvcGVydHkxMSA9ICJkYXRhIiArIHJlc3QuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyByZXN0LnNsaWNlKDEpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgcmVzdCA9IHZhbHVlMi5zbGljZSg0KTsKICAgICAgaWYgKCFkYXNoLnRlc3QocmVzdCkpIHsKICAgICAgICBsZXQgZGFzaGVzID0gcmVzdC5yZXBsYWNlKGNhcCwga2ViYWIpOwogICAgICAgIGlmIChkYXNoZXMuY2hhckF0KDApICE9PSAiLSIpIHsKICAgICAgICAgIGRhc2hlcyA9ICItIiArIGRhc2hlczsKICAgICAgICB9CiAgICAgICAgdmFsdWUyID0gImRhdGEiICsgZGFzaGVzOwogICAgICB9CiAgICB9CiAgICBUeXBlMiA9IERlZmluZWRJbmZvOwogIH0KICByZXR1cm4gbmV3IFR5cGUyKHByb3BlcnR5MTEsIHZhbHVlMik7Cn0KZnVuY3Rpb24ga2ViYWIoJDApIHsKICByZXR1cm4gIi0iICsgJDAudG9Mb3dlckNhc2UoKTsKfQpmdW5jdGlvbiBjYW1lbGNhc2UoJDApIHsKICByZXR1cm4gJDAuY2hhckF0KDEpLnRvVXBwZXJDYXNlKCk7Cn0KdmFyIGNhcCwgZGFzaCwgdmFsaWQ7CnZhciBpbml0X2ZpbmQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2xpYi9maW5kLmpzIigpIHsKICAgIGluaXRfZGVmaW5lZF9pbmZvKCk7CiAgICBpbml0X2luZm8oKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBjYXAgPSAvW0EtWl0vZzsKICAgIGRhc2ggPSAvLVthLXpdL2c7CiAgICB2YWxpZCA9IC9eZGF0YVstXHcuOl0rJC9pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcHJvcGVydHktaW5mb3JtYXRpb25ANy4xLjAvbm9kZV9tb2R1bGVzL3Byb3BlcnR5LWluZm9ybWF0aW9uL2luZGV4LmpzCnZhciBodG1sNCwgc3ZnMjsKdmFyIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wcm9wZXJ0eS1pbmZvcm1hdGlvbkA3LjEuMC9ub2RlX21vZHVsZXMvcHJvcGVydHktaW5mb3JtYXRpb24vaW5kZXguanMiKCkgewogICAgaW5pdF9tZXJnZTMoKTsKICAgIGluaXRfYXJpYSgpOwogICAgaW5pdF9odG1sOSgpOwogICAgaW5pdF9zdmcoKTsKICAgIGluaXRfeGxpbmsoKTsKICAgIGluaXRfeG1sbnMoKTsKICAgIGluaXRfeG1sKCk7CiAgICBpbml0X2hhc3RfdG9fcmVhY3QoKTsKICAgIGluaXRfZmluZDIoKTsKICAgIGluaXRfbm9ybWFsaXplKCk7CiAgICBodG1sNCA9IG1lcmdlMyhbYXJpYTIsIGh0bWwzLCB4bGluaywgeG1sbnMsIHhtbF0sICJodG1sIik7CiAgICBzdmcyID0gbWVyZ2UzKFthcmlhMiwgc3ZnLCB4bGluaywgeG1sbnMsIHhtbF0sICJzdmciKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzCmZ1bmN0aW9uIGNvcmUodmFsdWUyLCBvcHRpb25zKSB7CiAgdmFsdWUyID0gdmFsdWUyLnJlcGxhY2UoCiAgICBvcHRpb25zLnN1YnNldCA/IGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQob3B0aW9ucy5zdWJzZXQpIDogZGVmYXVsdFN1YnNldFJlZ2V4LAogICAgYmFzaWMKICApOwogIGlmIChvcHRpb25zLnN1YnNldCB8fCBvcHRpb25zLmVzY2FwZU9ubHkpIHsKICAgIHJldHVybiB2YWx1ZTI7CiAgfQogIHJldHVybiB2YWx1ZTIucmVwbGFjZShzdXJyb2dhdGVQYWlyc1JlZ2V4LCBzdXJyb2dhdGUpLnJlcGxhY2UoY29udHJvbENoYXJhY3RlcnNSZWdleCwgYmFzaWMpOwogIGZ1bmN0aW9uIHN1cnJvZ2F0ZShwYWlyLCBpbmRleDIsIGFsbDMpIHsKICAgIHJldHVybiBvcHRpb25zLmZvcm1hdCgKICAgICAgKHBhaXIuY2hhckNvZGVBdCgwKSAtIDU1Mjk2KSAqIDEwMjQgKyBwYWlyLmNoYXJDb2RlQXQoMSkgLSA1NjMyMCArIDY1NTM2LAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMiksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQogIGZ1bmN0aW9uIGJhc2ljKGNoYXJhY3RlciwgaW5kZXgyLCBhbGwzKSB7CiAgICByZXR1cm4gb3B0aW9ucy5mb3JtYXQoCiAgICAgIGNoYXJhY3Rlci5jaGFyQ29kZUF0KDApLAogICAgICBhbGwzLmNoYXJDb2RlQXQoaW5kZXgyICsgMSksCiAgICAgIG9wdGlvbnMKICAgICk7CiAgfQp9CmZ1bmN0aW9uIGNoYXJhY3RlcnNUb0V4cHJlc3Npb25DYWNoZWQoc3Vic2V0KSB7CiAgbGV0IGNhY2hlZCA9IHN1YnNldFRvUmVnZXhDYWNoZS5nZXQoc3Vic2V0KTsKICBpZiAoIWNhY2hlZCkgewogICAgY2FjaGVkID0gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpOwogICAgc3Vic2V0VG9SZWdleENhY2hlLnNldChzdWJzZXQsIGNhY2hlZCk7CiAgfQogIHJldHVybiBjYWNoZWQ7Cn0KZnVuY3Rpb24gY2hhcmFjdGVyc1RvRXhwcmVzc2lvbihzdWJzZXQpIHsKICBjb25zdCBncm91cHMgPSBbXTsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgc3Vic2V0Lmxlbmd0aCkgewogICAgZ3JvdXBzLnB1c2goc3Vic2V0W2luZGV4Ml0ucmVwbGFjZShyZWdleEVzY2FwZVJlZ2V4LCAiXFwkJiIpKTsKICB9CiAgcmV0dXJuIG5ldyBSZWdFeHAoIig/OiIgKyBncm91cHMuam9pbigifCIpICsgIikiLCAiZyIpOwp9CnZhciBkZWZhdWx0U3Vic2V0UmVnZXgsIHN1cnJvZ2F0ZVBhaXJzUmVnZXgsIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXgsIHJlZ2V4RXNjYXBlUmVnZXgsIHN1YnNldFRvUmVnZXhDYWNoZTsKdmFyIGluaXRfY29yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb3JlLmpzIigpIHsKICAgIGRlZmF1bHRTdWJzZXRSZWdleCA9IC9bIiYnPD5gXS9nOwogICAgc3Vycm9nYXRlUGFpcnNSZWdleCA9IC9bXHVEODAwLVx1REJGRl1bXHVEQzAwLVx1REZGRl0vZzsKICAgIGNvbnRyb2xDaGFyYWN0ZXJzUmVnZXggPSAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tY29udHJvbC1yZWdleCwgdW5pY29ybi9uby1oZXgtZXNjYXBlCiAgICAvW1x4MDEtXHRcdlxmXHgwRS1ceDFGXHg3Rlx4ODFceDhEXHg4Rlx4OTBceDlEXHhBMC1cdUZGRkZdL2c7CiAgICByZWdleEVzY2FwZVJlZ2V4ID0gL1t8XFx7fSgpW1xdXiQrKj8uXS9nOwogICAgc3Vic2V0VG9SZWdleENhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC90by1oZXhhZGVjaW1hbC5qcwpmdW5jdGlvbiB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7CiAgcmV0dXJuIG9taXQgJiYgbmV4dDIgJiYgIWhleGFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGhleGFkZWNpbWFsUmVnZXg7CnZhciBpbml0X3RvX2hleGFkZWNpbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8taGV4YWRlY2ltYWwuanMiKCkgewogICAgaGV4YWRlY2ltYWxSZWdleCA9IC9bXGRBLUZhLWZdLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMKZnVuY3Rpb24gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb21pdCkgewogIGNvbnN0IHZhbHVlMiA9ICImIyIgKyBTdHJpbmcoY29kZTQpOwogIHJldHVybiBvbWl0ICYmIG5leHQyICYmICFkZWNpbWFsUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkgPyB2YWx1ZTIgOiB2YWx1ZTIgKyAiOyI7Cn0KdmFyIGRlY2ltYWxSZWdleDsKdmFyIGluaXRfdG9fZGVjaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLWRlY2ltYWwuanMiKCkgewogICAgZGVjaW1hbFJlZ2V4ID0gL1xkLzsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3lAMy4wLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1sZWdhY3kvaW5kZXguanMKdmFyIGNoYXJhY3RlckVudGl0aWVzTGVnYWN5Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeUAzLjAuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWxlZ2FjeS9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0xlZ2FjeSA9IFsKICAgICAgIkFFbGlnIiwKICAgICAgIkFNUCIsCiAgICAgICJBYWN1dGUiLAogICAgICAiQWNpcmMiLAogICAgICAiQWdyYXZlIiwKICAgICAgIkFyaW5nIiwKICAgICAgIkF0aWxkZSIsCiAgICAgICJBdW1sIiwKICAgICAgIkNPUFkiLAogICAgICAiQ2NlZGlsIiwKICAgICAgIkVUSCIsCiAgICAgICJFYWN1dGUiLAogICAgICAiRWNpcmMiLAogICAgICAiRWdyYXZlIiwKICAgICAgIkV1bWwiLAogICAgICAiR1QiLAogICAgICAiSWFjdXRlIiwKICAgICAgIkljaXJjIiwKICAgICAgIklncmF2ZSIsCiAgICAgICJJdW1sIiwKICAgICAgIkxUIiwKICAgICAgIk50aWxkZSIsCiAgICAgICJPYWN1dGUiLAogICAgICAiT2NpcmMiLAogICAgICAiT2dyYXZlIiwKICAgICAgIk9zbGFzaCIsCiAgICAgICJPdGlsZGUiLAogICAgICAiT3VtbCIsCiAgICAgICJRVU9UIiwKICAgICAgIlJFRyIsCiAgICAgICJUSE9STiIsCiAgICAgICJVYWN1dGUiLAogICAgICAiVWNpcmMiLAogICAgICAiVWdyYXZlIiwKICAgICAgIlV1bWwiLAogICAgICAiWWFjdXRlIiwKICAgICAgImFhY3V0ZSIsCiAgICAgICJhY2lyYyIsCiAgICAgICJhY3V0ZSIsCiAgICAgICJhZWxpZyIsCiAgICAgICJhZ3JhdmUiLAogICAgICAiYW1wIiwKICAgICAgImFyaW5nIiwKICAgICAgImF0aWxkZSIsCiAgICAgICJhdW1sIiwKICAgICAgImJydmJhciIsCiAgICAgICJjY2VkaWwiLAogICAgICAiY2VkaWwiLAogICAgICAiY2VudCIsCiAgICAgICJjb3B5IiwKICAgICAgImN1cnJlbiIsCiAgICAgICJkZWciLAogICAgICAiZGl2aWRlIiwKICAgICAgImVhY3V0ZSIsCiAgICAgICJlY2lyYyIsCiAgICAgICJlZ3JhdmUiLAogICAgICAiZXRoIiwKICAgICAgImV1bWwiLAogICAgICAiZnJhYzEyIiwKICAgICAgImZyYWMxNCIsCiAgICAgICJmcmFjMzQiLAogICAgICAiZ3QiLAogICAgICAiaWFjdXRlIiwKICAgICAgImljaXJjIiwKICAgICAgImlleGNsIiwKICAgICAgImlncmF2ZSIsCiAgICAgICJpcXVlc3QiLAogICAgICAiaXVtbCIsCiAgICAgICJsYXF1byIsCiAgICAgICJsdCIsCiAgICAgICJtYWNyIiwKICAgICAgIm1pY3JvIiwKICAgICAgIm1pZGRvdCIsCiAgICAgICJuYnNwIiwKICAgICAgIm5vdCIsCiAgICAgICJudGlsZGUiLAogICAgICAib2FjdXRlIiwKICAgICAgIm9jaXJjIiwKICAgICAgIm9ncmF2ZSIsCiAgICAgICJvcmRmIiwKICAgICAgIm9yZG0iLAogICAgICAib3NsYXNoIiwKICAgICAgIm90aWxkZSIsCiAgICAgICJvdW1sIiwKICAgICAgInBhcmEiLAogICAgICAicGx1c21uIiwKICAgICAgInBvdW5kIiwKICAgICAgInF1b3QiLAogICAgICAicmFxdW8iLAogICAgICAicmVnIiwKICAgICAgInNlY3QiLAogICAgICAic2h5IiwKICAgICAgInN1cDEiLAogICAgICAic3VwMiIsCiAgICAgICJzdXAzIiwKICAgICAgInN6bGlnIiwKICAgICAgInRob3JuIiwKICAgICAgInRpbWVzIiwKICAgICAgInVhY3V0ZSIsCiAgICAgICJ1Y2lyYyIsCiAgICAgICJ1Z3JhdmUiLAogICAgICAidW1sIiwKICAgICAgInV1bWwiLAogICAgICAieWFjdXRlIiwKICAgICAgInllbiIsCiAgICAgICJ5dW1sIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNEAyLjEuMC9ub2RlX21vZHVsZXMvY2hhcmFjdGVyLWVudGl0aWVzLWh0bWw0L2luZGV4LmpzCnZhciBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0Owp2YXIgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfaHRtbDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9jaGFyYWN0ZXItZW50aXRpZXMtaHRtbDRAMi4xLjAvbm9kZV9tb2R1bGVzL2NoYXJhY3Rlci1lbnRpdGllcy1odG1sNC9pbmRleC5qcyIoKSB7CiAgICBjaGFyYWN0ZXJFbnRpdGllc0h0bWw0ID0gewogICAgICBuYnNwOiAiXHhBMCIsCiAgICAgIGlleGNsOiAiXHhBMSIsCiAgICAgIGNlbnQ6ICJceEEyIiwKICAgICAgcG91bmQ6ICJceEEzIiwKICAgICAgY3VycmVuOiAiXHhBNCIsCiAgICAgIHllbjogIlx4QTUiLAogICAgICBicnZiYXI6ICJceEE2IiwKICAgICAgc2VjdDogIlx4QTciLAogICAgICB1bWw6ICJceEE4IiwKICAgICAgY29weTogIlx4QTkiLAogICAgICBvcmRmOiAiXHhBQSIsCiAgICAgIGxhcXVvOiAiXHhBQiIsCiAgICAgIG5vdDogIlx4QUMiLAogICAgICBzaHk6ICJceEFEIiwKICAgICAgcmVnOiAiXHhBRSIsCiAgICAgIG1hY3I6ICJceEFGIiwKICAgICAgZGVnOiAiXHhCMCIsCiAgICAgIHBsdXNtbjogIlx4QjEiLAogICAgICBzdXAyOiAiXHhCMiIsCiAgICAgIHN1cDM6ICJceEIzIiwKICAgICAgYWN1dGU6ICJceEI0IiwKICAgICAgbWljcm86ICJceEI1IiwKICAgICAgcGFyYTogIlx4QjYiLAogICAgICBtaWRkb3Q6ICJceEI3IiwKICAgICAgY2VkaWw6ICJceEI4IiwKICAgICAgc3VwMTogIlx4QjkiLAogICAgICBvcmRtOiAiXHhCQSIsCiAgICAgIHJhcXVvOiAiXHhCQiIsCiAgICAgIGZyYWMxNDogIlx4QkMiLAogICAgICBmcmFjMTI6ICJceEJEIiwKICAgICAgZnJhYzM0OiAiXHhCRSIsCiAgICAgIGlxdWVzdDogIlx4QkYiLAogICAgICBBZ3JhdmU6ICJceEMwIiwKICAgICAgQWFjdXRlOiAiXHhDMSIsCiAgICAgIEFjaXJjOiAiXHhDMiIsCiAgICAgIEF0aWxkZTogIlx4QzMiLAogICAgICBBdW1sOiAiXHhDNCIsCiAgICAgIEFyaW5nOiAiXHhDNSIsCiAgICAgIEFFbGlnOiAiXHhDNiIsCiAgICAgIENjZWRpbDogIlx4QzciLAogICAgICBFZ3JhdmU6ICJceEM4IiwKICAgICAgRWFjdXRlOiAiXHhDOSIsCiAgICAgIEVjaXJjOiAiXHhDQSIsCiAgICAgIEV1bWw6ICJceENCIiwKICAgICAgSWdyYXZlOiAiXHhDQyIsCiAgICAgIElhY3V0ZTogIlx4Q0QiLAogICAgICBJY2lyYzogIlx4Q0UiLAogICAgICBJdW1sOiAiXHhDRiIsCiAgICAgIEVUSDogIlx4RDAiLAogICAgICBOdGlsZGU6ICJceEQxIiwKICAgICAgT2dyYXZlOiAiXHhEMiIsCiAgICAgIE9hY3V0ZTogIlx4RDMiLAogICAgICBPY2lyYzogIlx4RDQiLAogICAgICBPdGlsZGU6ICJceEQ1IiwKICAgICAgT3VtbDogIlx4RDYiLAogICAgICB0aW1lczogIlx4RDciLAogICAgICBPc2xhc2g6ICJceEQ4IiwKICAgICAgVWdyYXZlOiAiXHhEOSIsCiAgICAgIFVhY3V0ZTogIlx4REEiLAogICAgICBVY2lyYzogIlx4REIiLAogICAgICBVdW1sOiAiXHhEQyIsCiAgICAgIFlhY3V0ZTogIlx4REQiLAogICAgICBUSE9STjogIlx4REUiLAogICAgICBzemxpZzogIlx4REYiLAogICAgICBhZ3JhdmU6ICJceEUwIiwKICAgICAgYWFjdXRlOiAiXHhFMSIsCiAgICAgIGFjaXJjOiAiXHhFMiIsCiAgICAgIGF0aWxkZTogIlx4RTMiLAogICAgICBhdW1sOiAiXHhFNCIsCiAgICAgIGFyaW5nOiAiXHhFNSIsCiAgICAgIGFlbGlnOiAiXHhFNiIsCiAgICAgIGNjZWRpbDogIlx4RTciLAogICAgICBlZ3JhdmU6ICJceEU4IiwKICAgICAgZWFjdXRlOiAiXHhFOSIsCiAgICAgIGVjaXJjOiAiXHhFQSIsCiAgICAgIGV1bWw6ICJceEVCIiwKICAgICAgaWdyYXZlOiAiXHhFQyIsCiAgICAgIGlhY3V0ZTogIlx4RUQiLAogICAgICBpY2lyYzogIlx4RUUiLAogICAgICBpdW1sOiAiXHhFRiIsCiAgICAgIGV0aDogIlx4RjAiLAogICAgICBudGlsZGU6ICJceEYxIiwKICAgICAgb2dyYXZlOiAiXHhGMiIsCiAgICAgIG9hY3V0ZTogIlx4RjMiLAogICAgICBvY2lyYzogIlx4RjQiLAogICAgICBvdGlsZGU6ICJceEY1IiwKICAgICAgb3VtbDogIlx4RjYiLAogICAgICBkaXZpZGU6ICJceEY3IiwKICAgICAgb3NsYXNoOiAiXHhGOCIsCiAgICAgIHVncmF2ZTogIlx4RjkiLAogICAgICB1YWN1dGU6ICJceEZBIiwKICAgICAgdWNpcmM6ICJceEZCIiwKICAgICAgdXVtbDogIlx4RkMiLAogICAgICB5YWN1dGU6ICJceEZEIiwKICAgICAgdGhvcm46ICJceEZFIiwKICAgICAgeXVtbDogIlx4RkYiLAogICAgICBmbm9mOiAiXHUwMTkyIiwKICAgICAgQWxwaGE6ICJcdTAzOTEiLAogICAgICBCZXRhOiAiXHUwMzkyIiwKICAgICAgR2FtbWE6ICJcdTAzOTMiLAogICAgICBEZWx0YTogIlx1MDM5NCIsCiAgICAgIEVwc2lsb246ICJcdTAzOTUiLAogICAgICBaZXRhOiAiXHUwMzk2IiwKICAgICAgRXRhOiAiXHUwMzk3IiwKICAgICAgVGhldGE6ICJcdTAzOTgiLAogICAgICBJb3RhOiAiXHUwMzk5IiwKICAgICAgS2FwcGE6ICJcdTAzOUEiLAogICAgICBMYW1iZGE6ICJcdTAzOUIiLAogICAgICBNdTogIlx1MDM5QyIsCiAgICAgIE51OiAiXHUwMzlEIiwKICAgICAgWGk6ICJcdTAzOUUiLAogICAgICBPbWljcm9uOiAiXHUwMzlGIiwKICAgICAgUGk6ICJcdTAzQTAiLAogICAgICBSaG86ICJcdTAzQTEiLAogICAgICBTaWdtYTogIlx1MDNBMyIsCiAgICAgIFRhdTogIlx1MDNBNCIsCiAgICAgIFVwc2lsb246ICJcdTAzQTUiLAogICAgICBQaGk6ICJcdTAzQTYiLAogICAgICBDaGk6ICJcdTAzQTciLAogICAgICBQc2k6ICJcdTAzQTgiLAogICAgICBPbWVnYTogIlx1MDNBOSIsCiAgICAgIGFscGhhOiAiXHUwM0IxIiwKICAgICAgYmV0YTogIlx1MDNCMiIsCiAgICAgIGdhbW1hOiAiXHUwM0IzIiwKICAgICAgZGVsdGE6ICJcdTAzQjQiLAogICAgICBlcHNpbG9uOiAiXHUwM0I1IiwKICAgICAgemV0YTogIlx1MDNCNiIsCiAgICAgIGV0YTogIlx1MDNCNyIsCiAgICAgIHRoZXRhOiAiXHUwM0I4IiwKICAgICAgaW90YTogIlx1MDNCOSIsCiAgICAgIGthcHBhOiAiXHUwM0JBIiwKICAgICAgbGFtYmRhOiAiXHUwM0JCIiwKICAgICAgbXU6ICJcdTAzQkMiLAogICAgICBudTogIlx1MDNCRCIsCiAgICAgIHhpOiAiXHUwM0JFIiwKICAgICAgb21pY3JvbjogIlx1MDNCRiIsCiAgICAgIHBpOiAiXHUwM0MwIiwKICAgICAgcmhvOiAiXHUwM0MxIiwKICAgICAgc2lnbWFmOiAiXHUwM0MyIiwKICAgICAgc2lnbWE6ICJcdTAzQzMiLAogICAgICB0YXU6ICJcdTAzQzQiLAogICAgICB1cHNpbG9uOiAiXHUwM0M1IiwKICAgICAgcGhpOiAiXHUwM0M2IiwKICAgICAgY2hpOiAiXHUwM0M3IiwKICAgICAgcHNpOiAiXHUwM0M4IiwKICAgICAgb21lZ2E6ICJcdTAzQzkiLAogICAgICB0aGV0YXN5bTogIlx1MDNEMSIsCiAgICAgIHVwc2loOiAiXHUwM0QyIiwKICAgICAgcGl2OiAiXHUwM0Q2IiwKICAgICAgYnVsbDogIlx1MjAyMiIsCiAgICAgIGhlbGxpcDogIlx1MjAyNiIsCiAgICAgIHByaW1lOiAiXHUyMDMyIiwKICAgICAgUHJpbWU6ICJcdTIwMzMiLAogICAgICBvbGluZTogIlx1MjAzRSIsCiAgICAgIGZyYXNsOiAiXHUyMDQ0IiwKICAgICAgd2VpZXJwOiAiXHUyMTE4IiwKICAgICAgaW1hZ2U6ICJcdTIxMTEiLAogICAgICByZWFsOiAiXHUyMTFDIiwKICAgICAgdHJhZGU6ICJcdTIxMjIiLAogICAgICBhbGVmc3ltOiAiXHUyMTM1IiwKICAgICAgbGFycjogIlx1MjE5MCIsCiAgICAgIHVhcnI6ICJcdTIxOTEiLAogICAgICByYXJyOiAiXHUyMTkyIiwKICAgICAgZGFycjogIlx1MjE5MyIsCiAgICAgIGhhcnI6ICJcdTIxOTQiLAogICAgICBjcmFycjogIlx1MjFCNSIsCiAgICAgIGxBcnI6ICJcdTIxRDAiLAogICAgICB1QXJyOiAiXHUyMUQxIiwKICAgICAgckFycjogIlx1MjFEMiIsCiAgICAgIGRBcnI6ICJcdTIxRDMiLAogICAgICBoQXJyOiAiXHUyMUQ0IiwKICAgICAgZm9yYWxsOiAiXHUyMjAwIiwKICAgICAgcGFydDogIlx1MjIwMiIsCiAgICAgIGV4aXN0OiAiXHUyMjAzIiwKICAgICAgZW1wdHk6ICJcdTIyMDUiLAogICAgICBuYWJsYTogIlx1MjIwNyIsCiAgICAgIGlzaW46ICJcdTIyMDgiLAogICAgICBub3RpbjogIlx1MjIwOSIsCiAgICAgIG5pOiAiXHUyMjBCIiwKICAgICAgcHJvZDogIlx1MjIwRiIsCiAgICAgIHN1bTogIlx1MjIxMSIsCiAgICAgIG1pbnVzOiAiXHUyMjEyIiwKICAgICAgbG93YXN0OiAiXHUyMjE3IiwKICAgICAgcmFkaWM6ICJcdTIyMUEiLAogICAgICBwcm9wOiAiXHUyMjFEIiwKICAgICAgaW5maW46ICJcdTIyMUUiLAogICAgICBhbmc6ICJcdTIyMjAiLAogICAgICBhbmQ6ICJcdTIyMjciLAogICAgICBvcjogIlx1MjIyOCIsCiAgICAgIGNhcDogIlx1MjIyOSIsCiAgICAgIGN1cDogIlx1MjIyQSIsCiAgICAgIGludDogIlx1MjIyQiIsCiAgICAgIHRoZXJlNDogIlx1MjIzNCIsCiAgICAgIHNpbTogIlx1MjIzQyIsCiAgICAgIGNvbmc6ICJcdTIyNDUiLAogICAgICBhc3ltcDogIlx1MjI0OCIsCiAgICAgIG5lOiAiXHUyMjYwIiwKICAgICAgZXF1aXY6ICJcdTIyNjEiLAogICAgICBsZTogIlx1MjI2NCIsCiAgICAgIGdlOiAiXHUyMjY1IiwKICAgICAgc3ViOiAiXHUyMjgyIiwKICAgICAgc3VwOiAiXHUyMjgzIiwKICAgICAgbnN1YjogIlx1MjI4NCIsCiAgICAgIHN1YmU6ICJcdTIyODYiLAogICAgICBzdXBlOiAiXHUyMjg3IiwKICAgICAgb3BsdXM6ICJcdTIyOTUiLAogICAgICBvdGltZXM6ICJcdTIyOTciLAogICAgICBwZXJwOiAiXHUyMkE1IiwKICAgICAgc2RvdDogIlx1MjJDNSIsCiAgICAgIGxjZWlsOiAiXHUyMzA4IiwKICAgICAgcmNlaWw6ICJcdTIzMDkiLAogICAgICBsZmxvb3I6ICJcdTIzMEEiLAogICAgICByZmxvb3I6ICJcdTIzMEIiLAogICAgICBsYW5nOiAiXHUyMzI5IiwKICAgICAgcmFuZzogIlx1MjMyQSIsCiAgICAgIGxvejogIlx1MjVDQSIsCiAgICAgIHNwYWRlczogIlx1MjY2MCIsCiAgICAgIGNsdWJzOiAiXHUyNjYzIiwKICAgICAgaGVhcnRzOiAiXHUyNjY1IiwKICAgICAgZGlhbXM6ICJcdTI2NjYiLAogICAgICBxdW90OiAnIicsCiAgICAgIGFtcDogIiYiLAogICAgICBsdDogIjwiLAogICAgICBndDogIj4iLAogICAgICBPRWxpZzogIlx1MDE1MiIsCiAgICAgIG9lbGlnOiAiXHUwMTUzIiwKICAgICAgU2Nhcm9uOiAiXHUwMTYwIiwKICAgICAgc2Nhcm9uOiAiXHUwMTYxIiwKICAgICAgWXVtbDogIlx1MDE3OCIsCiAgICAgIGNpcmM6ICJcdTAyQzYiLAogICAgICB0aWxkZTogIlx1MDJEQyIsCiAgICAgIGVuc3A6ICJcdTIwMDIiLAogICAgICBlbXNwOiAiXHUyMDAzIiwKICAgICAgdGhpbnNwOiAiXHUyMDA5IiwKICAgICAgenduajogIlx1MjAwQyIsCiAgICAgIHp3ajogIlx1MjAwRCIsCiAgICAgIGxybTogIlx1MjAwRSIsCiAgICAgIHJsbTogIlx1MjAwRiIsCiAgICAgIG5kYXNoOiAiXHUyMDEzIiwKICAgICAgbWRhc2g6ICJcdTIwMTQiLAogICAgICBsc3F1bzogIlx1MjAxOCIsCiAgICAgIHJzcXVvOiAiXHUyMDE5IiwKICAgICAgc2JxdW86ICJcdTIwMUEiLAogICAgICBsZHF1bzogIlx1MjAxQyIsCiAgICAgIHJkcXVvOiAiXHUyMDFEIiwKICAgICAgYmRxdW86ICJcdTIwMUUiLAogICAgICBkYWdnZXI6ICJcdTIwMjAiLAogICAgICBEYWdnZXI6ICJcdTIwMjEiLAogICAgICBwZXJtaWw6ICJcdTIwMzAiLAogICAgICBsc2FxdW86ICJcdTIwMzkiLAogICAgICByc2FxdW86ICJcdTIwM0EiLAogICAgICBldXJvOiAiXHUyMEFDIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9jb25zdGFudC9kYW5nZXJvdXMuanMKdmFyIGRhbmdlcm91czsKdmFyIGluaXRfZGFuZ2Vyb3VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2NvbnN0YW50L2Rhbmdlcm91cy5qcyIoKSB7CiAgICBkYW5nZXJvdXMgPSBbCiAgICAgICJjZW50IiwKICAgICAgImNvcHkiLAogICAgICAiZGl2aWRlIiwKICAgICAgImd0IiwKICAgICAgImx0IiwKICAgICAgIm5vdCIsCiAgICAgICJwYXJhIiwKICAgICAgInRpbWVzIgogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi91dGlsL3RvLW5hbWVkLmpzCmZ1bmN0aW9uIHRvTmFtZWQoY29kZTQsIG5leHQyLCBvbWl0LCBhdHRyaWJ1dGUpIHsKICBjb25zdCBjaGFyYWN0ZXIgPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGNvZGU0KTsKICBpZiAob3duOS5jYWxsKGNoYXJhY3RlcnMsIGNoYXJhY3RlcikpIHsKICAgIGNvbnN0IG5hbWUgPSBjaGFyYWN0ZXJzW2NoYXJhY3Rlcl07CiAgICBjb25zdCB2YWx1ZTIgPSAiJiIgKyBuYW1lOwogICAgaWYgKG9taXQgJiYgY2hhcmFjdGVyRW50aXRpZXNMZWdhY3kuaW5jbHVkZXMobmFtZSkgJiYgIWRhbmdlcm91cy5pbmNsdWRlcyhuYW1lKSAmJiAoIWF0dHJpYnV0ZSB8fCBuZXh0MiAmJiBuZXh0MiAhPT0gNjEgJiYgbm90QWxwaGFudW1lcmljUmVnZXgudGVzdChTdHJpbmcuZnJvbUNoYXJDb2RlKG5leHQyKSkpKSB7CiAgICAgIHJldHVybiB2YWx1ZTI7CiAgICB9CiAgICByZXR1cm4gdmFsdWUyICsgIjsiOwogIH0KICByZXR1cm4gIiI7Cn0KdmFyIG93bjksIGNoYXJhY3RlcnMsIGtleSwgbm90QWxwaGFudW1lcmljUmVnZXg7CnZhciBpbml0X3RvX25hbWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvdG8tbmFtZWQuanMiKCkgewogICAgaW5pdF9jaGFyYWN0ZXJfZW50aXRpZXNfbGVnYWN5KCk7CiAgICBpbml0X2NoYXJhY3Rlcl9lbnRpdGllc19odG1sNCgpOwogICAgaW5pdF9kYW5nZXJvdXMoKTsKICAgIG93bjkgPSB7fS5oYXNPd25Qcm9wZXJ0eTsKICAgIGNoYXJhY3RlcnMgPSB7fTsKICAgIGZvciAoa2V5IGluIGNoYXJhY3RlckVudGl0aWVzSHRtbDQpIHsKICAgICAgaWYgKG93bjkuY2FsbChjaGFyYWN0ZXJFbnRpdGllc0h0bWw0LCBrZXkpKSB7CiAgICAgICAgY2hhcmFjdGVyc1tjaGFyYWN0ZXJFbnRpdGllc0h0bWw0W2tleV1dID0ga2V5OwogICAgICB9CiAgICB9CiAgICBub3RBbHBoYW51bWVyaWNSZWdleCA9IC9bXlxkQS1aYS16XS87CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9saWIvdXRpbC9mb3JtYXQtc21hcnQuanMKZnVuY3Rpb24gZm9ybWF0U21hcnQoY29kZTQsIG5leHQyLCBvcHRpb25zKSB7CiAgbGV0IG51bWVyaWMgPSB0b0hleGFkZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICBsZXQgbmFtZWQ7CiAgaWYgKG9wdGlvbnMudXNlTmFtZWRSZWZlcmVuY2VzIHx8IG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBuYW1lZCA9IHRvTmFtZWQoCiAgICAgIGNvZGU0LAogICAgICBuZXh0MiwKICAgICAgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zLAogICAgICBvcHRpb25zLmF0dHJpYnV0ZQogICAgKTsKICB9CiAgaWYgKChvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCAhbmFtZWQpICYmIG9wdGlvbnMudXNlU2hvcnRlc3RSZWZlcmVuY2VzKSB7CiAgICBjb25zdCBkZWNpbWFsID0gdG9EZWNpbWFsKGNvZGU0LCBuZXh0Miwgb3B0aW9ucy5vbWl0T3B0aW9uYWxTZW1pY29sb25zKTsKICAgIGlmIChkZWNpbWFsLmxlbmd0aCA8IG51bWVyaWMubGVuZ3RoKSB7CiAgICAgIG51bWVyaWMgPSBkZWNpbWFsOwogICAgfQogIH0KICByZXR1cm4gbmFtZWQgJiYgKCFvcHRpb25zLnVzZVNob3J0ZXN0UmVmZXJlbmNlcyB8fCBuYW1lZC5sZW5ndGggPCBudW1lcmljLmxlbmd0aCkgPyBuYW1lZCA6IG51bWVyaWM7Cn0KdmFyIGluaXRfZm9ybWF0X3NtYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LXNtYXJ0LmpzIigpIHsKICAgIGluaXRfdG9faGV4YWRlY2ltYWwoKTsKICAgIGluaXRfdG9fZGVjaW1hbCgpOwogICAgaW5pdF90b19uYW1lZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzCmZ1bmN0aW9uIGZvcm1hdEJhc2ljKGNvZGU0KSB7CiAgcmV0dXJuICImI3giICsgY29kZTQudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCkgKyAiOyI7Cn0KdmFyIGluaXRfZm9ybWF0X2Jhc2ljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL3V0aWwvZm9ybWF0LWJhc2ljLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3N0cmluZ2lmeS1lbnRpdGllc0A0LjAuNC9ub2RlX21vZHVsZXMvc3RyaW5naWZ5LWVudGl0aWVzL2xpYi9pbmRleC5qcwpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllcyh2YWx1ZTIsIG9wdGlvbnMpIHsKICByZXR1cm4gY29yZSh2YWx1ZTIsIE9iamVjdC5hc3NpZ24oeyBmb3JtYXQ6IGZvcm1hdFNtYXJ0IH0sIG9wdGlvbnMpKTsKfQpmdW5jdGlvbiBzdHJpbmdpZnlFbnRpdGllc0xpZ2h0KHZhbHVlMiwgb3B0aW9ucykgewogIHJldHVybiBjb3JlKHZhbHVlMiwgT2JqZWN0LmFzc2lnbih7IGZvcm1hdDogZm9ybWF0QmFzaWMgfSwgb3B0aW9ucykpOwp9CnZhciBpbml0X2xpYjI4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vc3RyaW5naWZ5LWVudGl0aWVzQDQuMC40L25vZGVfbW9kdWxlcy9zdHJpbmdpZnktZW50aXRpZXMvbGliL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29yZSgpOwogICAgaW5pdF9mb3JtYXRfc21hcnQoKTsKICAgIGluaXRfZm9ybWF0X2Jhc2ljKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcwp2YXIgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zdHJpbmdpZnktZW50aXRpZXNANC4wLjQvbm9kZV9tb2R1bGVzL3N0cmluZ2lmeS1lbnRpdGllcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjI4KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9jb21tZW50LmpzCmZ1bmN0aW9uIGNvbW1lbnQyKG5vZGUyLCBfMSwgXzIyLCBzdGF0ZTEyKSB7CiAgcmV0dXJuIHN0YXRlMTIuc2V0dGluZ3MuYm9ndXNDb21tZW50cyA/ICI8PyIgKyBzdHJpbmdpZnlFbnRpdGllcygKICAgIG5vZGUyLnZhbHVlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIHN1YnNldDogYm9ndXNDb21tZW50RW50aXR5U3Vic2V0CiAgICB9KQogICkgKyAiPiIgOiAiPCEtLSIgKyBub2RlMi52YWx1ZS5yZXBsYWNlKGh0bWxDb21tZW50UmVnZXgsIGVuY29kZTIpICsgIi0tPiI7CiAgZnVuY3Rpb24gZW5jb2RlMigkMCkgewogICAgcmV0dXJuIHN0cmluZ2lmeUVudGl0aWVzKAogICAgICAkMCwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgICAgc3Vic2V0OiBjb21tZW50RW50aXR5U3Vic2V0CiAgICAgIH0pCiAgICApOwogIH0KfQp2YXIgaHRtbENvbW1lbnRSZWdleCwgYm9ndXNDb21tZW50RW50aXR5U3Vic2V0LCBjb21tZW50RW50aXR5U3Vic2V0Owp2YXIgaW5pdF9jb21tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvY29tbWVudC5qcyIoKSB7CiAgICBpbml0X3N0cmluZ2lmeV9lbnRpdGllcygpOwogICAgaHRtbENvbW1lbnRSZWdleCA9IC9ePnxeLT58PCEtLXwtLT58LS0hPnw8IS0kL2c7CiAgICBib2d1c0NvbW1lbnRFbnRpdHlTdWJzZXQgPSBbIj4iXTsKICAgIGNvbW1lbnRFbnRpdHlTdWJzZXQgPSBbIjwiLCAiPiJdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZG9jdHlwZS5qcwpmdW5jdGlvbiBkb2N0eXBlMihfMSwgXzIyLCBfMzIsIHN0YXRlMTIpIHsKICByZXR1cm4gIjwhIiArIChzdGF0ZTEyLnNldHRpbmdzLnVwcGVyRG9jdHlwZSA/ICJET0NUWVBFIiA6ICJkb2N0eXBlIikgKyAoc3RhdGUxMi5zZXR0aW5ncy50aWdodERvY3R5cGUgPyAiIiA6ICIgIikgKyAiaHRtbD4iOwp9CnZhciBpbml0X2RvY3R5cGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9kb2N0eXBlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMvbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMKZnVuY3Rpb24gcGFyc2U1KHZhbHVlMikgewogIGNvbnN0IHRva2VucyA9IFtdOwogIGNvbnN0IGlucHV0ID0gU3RyaW5nKHZhbHVlMiB8fCAiIik7CiAgbGV0IGluZGV4MiA9IGlucHV0LmluZGV4T2YoIiwiKTsKICBsZXQgc3RhcnQgPSAwOwogIGxldCBlbmQzID0gZmFsc2U7CiAgd2hpbGUgKCFlbmQzKSB7CiAgICBpZiAoaW5kZXgyID09PSAtMSkgewogICAgICBpbmRleDIgPSBpbnB1dC5sZW5ndGg7CiAgICAgIGVuZDMgPSB0cnVlOwogICAgfQogICAgY29uc3QgdG9rZW4gPSBpbnB1dC5zbGljZShzdGFydCwgaW5kZXgyKS50cmltKCk7CiAgICBpZiAodG9rZW4gfHwgIWVuZDMpIHsKICAgICAgdG9rZW5zLnB1c2godG9rZW4pOwogICAgfQogICAgc3RhcnQgPSBpbmRleDIgKyAxOwogICAgaW5kZXgyID0gaW5wdXQuaW5kZXhPZigiLCIsIHN0YXJ0KTsKICB9CiAgcmV0dXJuIHRva2VuczsKfQpmdW5jdGlvbiBzdHJpbmdpZnkzKHZhbHVlcywgb3B0aW9ucykgewogIGNvbnN0IHNldHRpbmdzID0gb3B0aW9ucyB8fCB7fTsKICBjb25zdCBpbnB1dCA9IHZhbHVlc1t2YWx1ZXMubGVuZ3RoIC0gMV0gPT09ICIiID8gWy4uLnZhbHVlcywgIiJdIDogdmFsdWVzOwogIHJldHVybiBpbnB1dC5qb2luKAogICAgKHNldHRpbmdzLnBhZFJpZ2h0ID8gIiAiIDogIiIpICsgIiwiICsgKHNldHRpbmdzLnBhZExlZnQgPT09IGZhbHNlID8gIiIgOiAiICIpCiAgKS50cmltKCk7Cn0KdmFyIGluaXRfY29tbWFfc2VwYXJhdGVkX3Rva2VucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2NvbW1hLXNlcGFyYXRlZC10b2tlbnNAMi4wLjMvbm9kZV9tb2R1bGVzL2NvbW1hLXNlcGFyYXRlZC10b2tlbnMvaW5kZXguanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3BhY2Utc2VwYXJhdGVkLXRva2Vuc0AyLjAuMi9ub2RlX21vZHVsZXMvc3BhY2Utc2VwYXJhdGVkLXRva2Vucy9pbmRleC5qcwpmdW5jdGlvbiBwYXJzZTYodmFsdWUyKSB7CiAgY29uc3QgaW5wdXQgPSBTdHJpbmcodmFsdWUyIHx8ICIiKS50cmltKCk7CiAgcmV0dXJuIGlucHV0ID8gaW5wdXQuc3BsaXQoL1sgXHRcblxyXGZdKy9nKSA6IFtdOwp9CmZ1bmN0aW9uIHN0cmluZ2lmeTQodmFsdWVzKSB7CiAgcmV0dXJuIHZhbHVlcy5qb2luKCIgIikudHJpbSgpOwp9CnZhciBpbml0X3NwYWNlX3NlcGFyYXRlZF90b2tlbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9zcGFjZS1zZXBhcmF0ZWQtdG9rZW5zQDIuMC4yL25vZGVfbW9kdWxlcy9zcGFjZS1zZXBhcmF0ZWQtdG9rZW5zL2luZGV4LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC13aGl0ZXNwYWNlQDMuMC4wL25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtd2hpdGVzcGFjZS9saWIvaW5kZXguanMKZnVuY3Rpb24gd2hpdGVzcGFjZSh0aGluZykgewogIHJldHVybiB0eXBlb2YgdGhpbmcgPT09ICJvYmplY3QiID8gdGhpbmcudHlwZSA9PT0gInRleHQiID8gZW1wdHkzKHRoaW5nLnZhbHVlKSA6IGZhbHNlIDogZW1wdHkzKHRoaW5nKTsKfQpmdW5jdGlvbiBlbXB0eTModmFsdWUyKSB7CiAgcmV0dXJuIHZhbHVlMi5yZXBsYWNlKHJlLCAiIikgPT09ICIiOwp9CnZhciByZTsKdmFyIGluaXRfbGliMjkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvbGliL2luZGV4LmpzIigpIHsKICAgIHJlID0gL1sgXHRcblxmXHJdL2c7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3doaXRlc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtd2hpdGVzcGFjZUAzLjAuMC9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXdoaXRlc3BhY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIyOSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzCmZ1bmN0aW9uIHNpYmxpbmdzKGluY3JlbWVudDIpIHsKICByZXR1cm4gc2libGluZzsKICBmdW5jdGlvbiBzaWJsaW5nKHBhcmVudCwgaW5kZXgyLCBpbmNsdWRlV2hpdGVzcGFjZSkgewogICAgY29uc3Qgc2libGluZ3MyID0gcGFyZW50ID8gcGFyZW50LmNoaWxkcmVuIDogZW1wdHlDaGlsZHJlbjsKICAgIGxldCBvZmZzZXQgPSAoaW5kZXgyIHx8IDApICsgaW5jcmVtZW50MjsKICAgIGxldCBuZXh0MiA9IHNpYmxpbmdzMltvZmZzZXRdOwogICAgaWYgKCFpbmNsdWRlV2hpdGVzcGFjZSkgewogICAgICB3aGlsZSAobmV4dDIgJiYgd2hpdGVzcGFjZShuZXh0MikpIHsKICAgICAgICBvZmZzZXQgKz0gaW5jcmVtZW50MjsKICAgICAgICBuZXh0MiA9IHNpYmxpbmdzMltvZmZzZXRdOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gbmV4dDI7CiAgfQp9CnZhciBzaWJsaW5nQWZ0ZXIsIHNpYmxpbmdCZWZvcmUsIGVtcHR5Q2hpbGRyZW47CnZhciBpbml0X3NpYmxpbmdzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9vbWlzc2lvbi91dGlsL3NpYmxpbmdzLmpzIigpIHsKICAgIGluaXRfaGFzdF91dGlsX3doaXRlc3BhY2UoKTsKICAgIHNpYmxpbmdBZnRlciA9IHNpYmxpbmdzKDEpOwogICAgc2libGluZ0JlZm9yZSA9IHNpYmxpbmdzKC0xKTsKICAgIGVtcHR5Q2hpbGRyZW4gPSBbXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb21pc3Npb24uanMKZnVuY3Rpb24gb21pc3Npb24oaGFuZGxlcnMyKSB7CiAgcmV0dXJuIG9taXQ7CiAgZnVuY3Rpb24gb21pdChub2RlMiwgaW5kZXgyLCBwYXJlbnQpIHsKICAgIHJldHVybiBvd24xMC5jYWxsKGhhbmRsZXJzMiwgbm9kZTIudGFnTmFtZSkgJiYgaGFuZGxlcnMyW25vZGUyLnRhZ05hbWVdKG5vZGUyLCBpbmRleDIsIHBhcmVudCk7CiAgfQp9CnZhciBvd24xMDsKdmFyIGluaXRfb21pc3Npb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL29taXNzaW9uLmpzIigpIHsKICAgIG93bjEwID0ge30uaGFzT3duUHJvcGVydHk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL29taXNzaW9uL2Nsb3NpbmcuanMKZnVuY3Rpb24gaGVhZE9yQ29sZ3JvdXBPckNhcHRpb24oXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIsIHRydWUpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiICYmICEobmV4dDIudHlwZSA9PT0gInRleHQiICYmIHdoaXRlc3BhY2UobmV4dDIudmFsdWUuY2hhckF0KDApKSk7Cn0KZnVuY3Rpb24gaHRtbDUoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIGJvZHkoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSAhPT0gImNvbW1lbnQiOwp9CmZ1bmN0aW9uIHA0KF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gbmV4dDIgPyBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJhZGRyZXNzIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiYXJ0aWNsZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImFzaWRlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiYmxvY2txdW90ZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRldGFpbHMiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkaXYiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJkbCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZWxkc2V0IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZmlnY2FwdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZpZ3VyZSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZvb3RlciIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImZvcm0iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoMSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImgyIiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDMiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoNCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImg1IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiaDYiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoZWFkZXIiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJoZ3JvdXAiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJociIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm1haW4iIHx8IG5leHQyLnRhZ05hbWUgPT09ICJtZW51IiB8fCBuZXh0Mi50YWdOYW1lID09PSAibmF2IiB8fCBuZXh0Mi50YWdOYW1lID09PSAib2wiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJwIiB8fCBuZXh0Mi50YWdOYW1lID09PSAicHJlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAic2VjdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRhYmxlIiB8fCBuZXh0Mi50YWdOYW1lID09PSAidWwiKSA6ICFwYXJlbnQgfHwgLy8gQ29uZnVzaW5nIHBhcmVudC4KICAhKHBhcmVudC50eXBlID09PSAiZWxlbWVudCIgJiYgKHBhcmVudC50YWdOYW1lID09PSAiYSIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJhdWRpbyIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJkZWwiIHx8IHBhcmVudC50YWdOYW1lID09PSAiaW5zIiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gIm1hcCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJub3NjcmlwdCIgfHwgcGFyZW50LnRhZ05hbWUgPT09ICJ2aWRlbyIpKTsKfQpmdW5jdGlvbiBsaShfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgbmV4dDIudGFnTmFtZSA9PT0gImxpIjsKfQpmdW5jdGlvbiBkdChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuIEJvb2xlYW4oCiAgICBuZXh0MiAmJiBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJkdCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gImRkIikKICApOwp9CmZ1bmN0aW9uIGRkKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gImR0IiB8fCBuZXh0Mi50YWdOYW1lID09PSAiZGQiKTsKfQpmdW5jdGlvbiBydWJ5RWxlbWVudChfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJycCIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInJ0Iik7Cn0KZnVuY3Rpb24gb3B0Z3JvdXAoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiAhbmV4dDIgfHwgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIG5leHQyLnRhZ05hbWUgPT09ICJvcHRncm91cCI7Cn0KZnVuY3Rpb24gb3B0aW9uKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gIm9wdGlvbiIgfHwgbmV4dDIudGFnTmFtZSA9PT0gIm9wdGdyb3VwIik7Cn0KZnVuY3Rpb24gdGhlYWQoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgbmV4dDIgPSBzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwogIHJldHVybiBCb29sZWFuKAogICAgbmV4dDIgJiYgbmV4dDIudHlwZSA9PT0gImVsZW1lbnQiICYmIChuZXh0Mi50YWdOYW1lID09PSAidGJvZHkiIHx8IG5leHQyLnRhZ05hbWUgPT09ICJ0Zm9vdCIpCiAgKTsKfQpmdW5jdGlvbiB0Ym9keShfNCwgaW5kZXgyLCBwYXJlbnQpIHsKICBjb25zdCBuZXh0MiA9IHNpYmxpbmdBZnRlcihwYXJlbnQsIGluZGV4Mik7CiAgcmV0dXJuICFuZXh0MiB8fCBuZXh0Mi50eXBlID09PSAiZWxlbWVudCIgJiYgKG5leHQyLnRhZ05hbWUgPT09ICJ0Ym9keSIgfHwgbmV4dDIudGFnTmFtZSA9PT0gInRmb290Iik7Cn0KZnVuY3Rpb24gdGZvb3QoXzQsIGluZGV4MiwgcGFyZW50KSB7CiAgcmV0dXJuICFzaWJsaW5nQWZ0ZXIocGFyZW50LCBpbmRleDIpOwp9CmZ1bmN0aW9uIHRyKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBuZXh0Mi50YWdOYW1lID09PSAidHIiOwp9CmZ1bmN0aW9uIGNlbGxzKF80LCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IG5leHQyID0gc2libGluZ0FmdGVyKHBhcmVudCwgaW5kZXgyKTsKICByZXR1cm4gIW5leHQyIHx8IG5leHQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAobmV4dDIudGFnTmFtZSA9PT0gInRkIiB8fCBuZXh0Mi50YWdOYW1lID09PSAidGgiKTsKfQp2YXIgY2xvc2luZzsKdmFyIGluaXRfY2xvc2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vY2xvc2luZy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBpbml0X3NpYmxpbmdzKCk7CiAgICBpbml0X29taXNzaW9uKCk7CiAgICBjbG9zaW5nID0gb21pc3Npb24oewogICAgICBib2R5LAogICAgICBjYXB0aW9uOiBoZWFkT3JDb2xncm91cE9yQ2FwdGlvbiwKICAgICAgY29sZ3JvdXA6IGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uLAogICAgICBkZCwKICAgICAgZHQsCiAgICAgIGhlYWQ6IGhlYWRPckNvbGdyb3VwT3JDYXB0aW9uLAogICAgICBodG1sOiBodG1sNSwKICAgICAgbGksCiAgICAgIG9wdGdyb3VwLAogICAgICBvcHRpb24sCiAgICAgIHA6IHA0LAogICAgICBycDogcnVieUVsZW1lbnQsCiAgICAgIHJ0OiBydWJ5RWxlbWVudCwKICAgICAgdGJvZHksCiAgICAgIHRkOiBjZWxscywKICAgICAgdGZvb3QsCiAgICAgIHRoOiBjZWxscywKICAgICAgdGhlYWQsCiAgICAgIHRyCiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcwpmdW5jdGlvbiBodG1sNihub2RlMikgewogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSk7CiAgcmV0dXJuICFoZWFkMiB8fCBoZWFkMi50eXBlICE9PSAiY29tbWVudCI7Cn0KZnVuY3Rpb24gaGVhZChub2RlMikgewogIGNvbnN0IHNlZW4gPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogIGZvciAoY29uc3QgY2hpbGQyIG9mIG5vZGUyLmNoaWxkcmVuKSB7CiAgICBpZiAoY2hpbGQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiAoY2hpbGQyLnRhZ05hbWUgPT09ICJiYXNlIiB8fCBjaGlsZDIudGFnTmFtZSA9PT0gInRpdGxlIikpIHsKICAgICAgaWYgKHNlZW4uaGFzKGNoaWxkMi50YWdOYW1lKSkgcmV0dXJuIGZhbHNlOwogICAgICBzZWVuLmFkZChjaGlsZDIudGFnTmFtZSk7CiAgICB9CiAgfQogIGNvbnN0IGNoaWxkID0gbm9kZTIuY2hpbGRyZW5bMF07CiAgcmV0dXJuICFjaGlsZCB8fCBjaGlsZC50eXBlID09PSAiZWxlbWVudCI7Cn0KZnVuY3Rpb24gYm9keTIobm9kZTIpIHsKICBjb25zdCBoZWFkMiA9IHNpYmxpbmdBZnRlcihub2RlMiwgLTEsIHRydWUpOwogIHJldHVybiAhaGVhZDIgfHwgaGVhZDIudHlwZSAhPT0gImNvbW1lbnQiICYmICEoaGVhZDIudHlwZSA9PT0gInRleHQiICYmIHdoaXRlc3BhY2UoaGVhZDIudmFsdWUuY2hhckF0KDApKSkgJiYgIShoZWFkMi50eXBlID09PSAiZWxlbWVudCIgJiYgKGhlYWQyLnRhZ05hbWUgPT09ICJtZXRhIiB8fCBoZWFkMi50YWdOYW1lID09PSAibGluayIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInNjcmlwdCIgfHwgaGVhZDIudGFnTmFtZSA9PT0gInN0eWxlIiB8fCBoZWFkMi50YWdOYW1lID09PSAidGVtcGxhdGUiKSk7Cn0KZnVuY3Rpb24gY29sZ3JvdXAobm9kZTIsIGluZGV4MiwgcGFyZW50KSB7CiAgY29uc3QgcHJldmlvdXMzID0gc2libGluZ0JlZm9yZShwYXJlbnQsIGluZGV4Mik7CiAgY29uc3QgaGVhZDIgPSBzaWJsaW5nQWZ0ZXIobm9kZTIsIC0xLCB0cnVlKTsKICBpZiAocGFyZW50ICYmIHByZXZpb3VzMyAmJiBwcmV2aW91czMudHlwZSA9PT0gImVsZW1lbnQiICYmIHByZXZpb3VzMy50YWdOYW1lID09PSAiY29sZ3JvdXAiICYmIGNsb3NpbmcocHJldmlvdXMzLCBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihwcmV2aW91czMpLCBwYXJlbnQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBCb29sZWFuKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAiY29sIik7Cn0KZnVuY3Rpb24gdGJvZHkyKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIGNvbnN0IHByZXZpb3VzMyA9IHNpYmxpbmdCZWZvcmUocGFyZW50LCBpbmRleDIpOwogIGNvbnN0IGhlYWQyID0gc2libGluZ0FmdGVyKG5vZGUyLCAtMSk7CiAgaWYgKHBhcmVudCAmJiBwcmV2aW91czMgJiYgcHJldmlvdXMzLnR5cGUgPT09ICJlbGVtZW50IiAmJiAocHJldmlvdXMzLnRhZ05hbWUgPT09ICJ0aGVhZCIgfHwgcHJldmlvdXMzLnRhZ05hbWUgPT09ICJ0Ym9keSIpICYmIGNsb3NpbmcocHJldmlvdXMzLCBwYXJlbnQuY2hpbGRyZW4uaW5kZXhPZihwcmV2aW91czMpLCBwYXJlbnQpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiBCb29sZWFuKGhlYWQyICYmIGhlYWQyLnR5cGUgPT09ICJlbGVtZW50IiAmJiBoZWFkMi50YWdOYW1lID09PSAidHIiKTsKfQp2YXIgb3BlbmluZzsKdmFyIGluaXRfb3BlbmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvb21pc3Npb24vb3BlbmluZy5qcyIoKSB7CiAgICBpbml0X2hhc3RfdXRpbF93aGl0ZXNwYWNlKCk7CiAgICBpbml0X3NpYmxpbmdzKCk7CiAgICBpbml0X2Nsb3NpbmcoKTsKICAgIGluaXRfb21pc3Npb24oKTsKICAgIG9wZW5pbmcgPSBvbWlzc2lvbih7CiAgICAgIGJvZHk6IGJvZHkyLAogICAgICBjb2xncm91cCwKICAgICAgaGVhZCwKICAgICAgaHRtbDogaHRtbDYsCiAgICAgIHRib2R5OiB0Ym9keTIKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvZWxlbWVudC5qcwpmdW5jdGlvbiBlbGVtZW50Myhub2RlMiwgaW5kZXgyLCBwYXJlbnQsIHN0YXRlMTIpIHsKICBjb25zdCBzY2hlbWEgPSBzdGF0ZTEyLnNjaGVtYTsKICBjb25zdCBvbWl0ID0gc2NoZW1hLnNwYWNlID09PSAic3ZnIiA/IGZhbHNlIDogc3RhdGUxMi5zZXR0aW5ncy5vbWl0T3B0aW9uYWxUYWdzOwogIGxldCBzZWxmQ2xvc2luZyA9IHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgPyBzdGF0ZTEyLnNldHRpbmdzLmNsb3NlRW1wdHlFbGVtZW50cyA6IHN0YXRlMTIuc2V0dGluZ3Mudm9pZHMuaW5jbHVkZXMobm9kZTIudGFnTmFtZS50b0xvd2VyQ2FzZSgpKTsKICBjb25zdCBwYXJ0cyA9IFtdOwogIGxldCBsYXN0MzsKICBpZiAoc2NoZW1hLnNwYWNlID09PSAiaHRtbCIgJiYgbm9kZTIudGFnTmFtZSA9PT0gInN2ZyIpIHsKICAgIHN0YXRlMTIuc2NoZW1hID0gc3ZnMjsKICB9CiAgY29uc3QgYXR0cmlidXRlcyA9IHNlcmlhbGl6ZUF0dHJpYnV0ZXMoc3RhdGUxMiwgbm9kZTIucHJvcGVydGllcyk7CiAgY29uc3QgY29udGVudDMgPSBzdGF0ZTEyLmFsbCgKICAgIHNjaGVtYS5zcGFjZSA9PT0gImh0bWwiICYmIG5vZGUyLnRhZ05hbWUgPT09ICJ0ZW1wbGF0ZSIgPyBub2RlMi5jb250ZW50IDogbm9kZTIKICApOwogIHN0YXRlMTIuc2NoZW1hID0gc2NoZW1hOwogIGlmIChjb250ZW50Mykgc2VsZkNsb3NpbmcgPSBmYWxzZTsKICBpZiAoYXR0cmlidXRlcyB8fCAhb21pdCB8fCAhb3BlbmluZyhub2RlMiwgaW5kZXgyLCBwYXJlbnQpKSB7CiAgICBwYXJ0cy5wdXNoKCI8Iiwgbm9kZTIudGFnTmFtZSwgYXR0cmlidXRlcyA/ICIgIiArIGF0dHJpYnV0ZXMgOiAiIik7CiAgICBpZiAoc2VsZkNsb3NpbmcgJiYgKHNjaGVtYS5zcGFjZSA9PT0gInN2ZyIgfHwgc3RhdGUxMi5zZXR0aW5ncy5jbG9zZVNlbGZDbG9zaW5nKSkgewogICAgICBsYXN0MyA9IGF0dHJpYnV0ZXMuY2hhckF0KGF0dHJpYnV0ZXMubGVuZ3RoIC0gMSk7CiAgICAgIGlmICghc3RhdGUxMi5zZXR0aW5ncy50aWdodFNlbGZDbG9zaW5nIHx8IGxhc3QzID09PSAiLyIgfHwgbGFzdDMgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgICAgcGFydHMucHVzaCgiICIpOwogICAgICB9CiAgICAgIHBhcnRzLnB1c2goIi8iKTsKICAgIH0KICAgIHBhcnRzLnB1c2goIj4iKTsKICB9CiAgcGFydHMucHVzaChjb250ZW50Myk7CiAgaWYgKCFzZWxmQ2xvc2luZyAmJiAoIW9taXQgfHwgIWNsb3Npbmcobm9kZTIsIGluZGV4MiwgcGFyZW50KSkpIHsKICAgIHBhcnRzLnB1c2goIjwvIiArIG5vZGUyLnRhZ05hbWUgKyAiPiIpOwogIH0KICByZXR1cm4gcGFydHMuam9pbigiIik7Cn0KZnVuY3Rpb24gc2VyaWFsaXplQXR0cmlidXRlcyhzdGF0ZTEyLCBwcm9wZXJ0aWVzMikgewogIGNvbnN0IHZhbHVlcyA9IFtdOwogIGxldCBpbmRleDIgPSAtMTsKICBsZXQga2V5MjsKICBpZiAocHJvcGVydGllczIpIHsKICAgIGZvciAoa2V5MiBpbiBwcm9wZXJ0aWVzMikgewogICAgICBpZiAocHJvcGVydGllczJba2V5Ml0gIT09IG51bGwgJiYgcHJvcGVydGllczJba2V5Ml0gIT09IHZvaWQgMCkgewogICAgICAgIGNvbnN0IHZhbHVlMiA9IHNlcmlhbGl6ZUF0dHJpYnV0ZShzdGF0ZTEyLCBrZXkyLCBwcm9wZXJ0aWVzMltrZXkyXSk7CiAgICAgICAgaWYgKHZhbHVlMikgdmFsdWVzLnB1c2godmFsdWUyKTsKICAgICAgfQogICAgfQogIH0KICB3aGlsZSAoKytpbmRleDIgPCB2YWx1ZXMubGVuZ3RoKSB7CiAgICBjb25zdCBsYXN0MyA9IHN0YXRlMTIuc2V0dGluZ3MudGlnaHRBdHRyaWJ1dGVzID8gdmFsdWVzW2luZGV4Ml0uY2hhckF0KHZhbHVlc1tpbmRleDJdLmxlbmd0aCAtIDEpIDogdm9pZCAwOwogICAgaWYgKGluZGV4MiAhPT0gdmFsdWVzLmxlbmd0aCAtIDEgJiYgbGFzdDMgIT09ICciJyAmJiBsYXN0MyAhPT0gIiciKSB7CiAgICAgIHZhbHVlc1tpbmRleDJdICs9ICIgIjsKICAgIH0KICB9CiAgcmV0dXJuIHZhbHVlcy5qb2luKCIiKTsKfQpmdW5jdGlvbiBzZXJpYWxpemVBdHRyaWJ1dGUoc3RhdGUxMiwga2V5MiwgdmFsdWUyKSB7CiAgY29uc3QgaW5mbyA9IGZpbmQyKHN0YXRlMTIuc2NoZW1hLCBrZXkyKTsKICBjb25zdCB4MyA9IHN0YXRlMTIuc2V0dGluZ3MuYWxsb3dQYXJzZUVycm9ycyAmJiBzdGF0ZTEyLnNjaGVtYS5zcGFjZSA9PT0gImh0bWwiID8gMCA6IDE7CiAgY29uc3QgeTUgPSBzdGF0ZTEyLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVycyA/IDAgOiAxOwogIGxldCBxdW90ZSA9IHN0YXRlMTIucXVvdGU7CiAgbGV0IHJlc3VsdDsKICBpZiAoaW5mby5vdmVybG9hZGVkQm9vbGVhbiAmJiAodmFsdWUyID09PSBpbmZvLmF0dHJpYnV0ZSB8fCB2YWx1ZTIgPT09ICIiKSkgewogICAgdmFsdWUyID0gdHJ1ZTsKICB9IGVsc2UgaWYgKChpbmZvLmJvb2xlYW4gfHwgaW5mby5vdmVybG9hZGVkQm9vbGVhbikgJiYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciIHx8IHZhbHVlMiA9PT0gaW5mby5hdHRyaWJ1dGUgfHwgdmFsdWUyID09PSAiIikpIHsKICAgIHZhbHVlMiA9IEJvb2xlYW4odmFsdWUyKTsKICB9CiAgaWYgKHZhbHVlMiA9PT0gbnVsbCB8fCB2YWx1ZTIgPT09IHZvaWQgMCB8fCB2YWx1ZTIgPT09IGZhbHNlIHx8IHR5cGVvZiB2YWx1ZTIgPT09ICJudW1iZXIiICYmIE51bWJlci5pc05hTih2YWx1ZTIpKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIGNvbnN0IG5hbWUgPSBzdHJpbmdpZnlFbnRpdGllcygKICAgIGluZm8uYXR0cmlidXRlLAogICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuCiAgICAgIHN1YnNldDogY29uc3RhbnRzLm5hbWVbeDNdW3k1XQogICAgfSkKICApOwogIGlmICh2YWx1ZTIgPT09IHRydWUpIHJldHVybiBuYW1lOwogIHZhbHVlMiA9IEFycmF5LmlzQXJyYXkodmFsdWUyKSA/IChpbmZvLmNvbW1hU2VwYXJhdGVkID8gc3RyaW5naWZ5MyA6IHN0cmluZ2lmeTQpKHZhbHVlMiwgewogICAgcGFkTGVmdDogIXN0YXRlMTIuc2V0dGluZ3MudGlnaHRDb21tYVNlcGFyYXRlZExpc3RzCiAgfSkgOiBTdHJpbmcodmFsdWUyKTsKICBpZiAoc3RhdGUxMi5zZXR0aW5ncy5jb2xsYXBzZUVtcHR5QXR0cmlidXRlcyAmJiAhdmFsdWUyKSByZXR1cm4gbmFtZTsKICBpZiAoc3RhdGUxMi5zZXR0aW5ncy5wcmVmZXJVbnF1b3RlZCkgewogICAgcmVzdWx0ID0gc3RyaW5naWZ5RW50aXRpZXMoCiAgICAgIHZhbHVlMiwKICAgICAgT2JqZWN0LmFzc2lnbih7fSwgc3RhdGUxMi5zZXR0aW5ncy5jaGFyYWN0ZXJSZWZlcmVuY2VzLCB7CiAgICAgICAgYXR0cmlidXRlOiB0cnVlLAogICAgICAgIHN1YnNldDogY29uc3RhbnRzLnVucXVvdGVkW3gzXVt5NV0KICAgICAgfSkKICAgICk7CiAgfQogIGlmIChyZXN1bHQgIT09IHZhbHVlMikgewogICAgaWYgKHN0YXRlMTIuc2V0dGluZ3MucXVvdGVTbWFydCAmJiBjY291bnQodmFsdWUyLCBxdW90ZSkgPiBjY291bnQodmFsdWUyLCBzdGF0ZTEyLmFsdGVybmF0aXZlKSkgewogICAgICBxdW90ZSA9IHN0YXRlMTIuYWx0ZXJuYXRpdmU7CiAgICB9CiAgICByZXN1bHQgPSBxdW90ZSArIHN0cmluZ2lmeUVudGl0aWVzKAogICAgICB2YWx1ZTIsCiAgICAgIE9iamVjdC5hc3NpZ24oe30sIHN0YXRlMTIuc2V0dGluZ3MuY2hhcmFjdGVyUmVmZXJlbmNlcywgewogICAgICAgIC8vIEFsd2F5cyBlbmNvZGUgd2l0aG91dCBwYXJzZSBlcnJvcnMgaW4gbm9uLUhUTUwuCiAgICAgICAgc3Vic2V0OiAocXVvdGUgPT09ICInIiA/IGNvbnN0YW50cy5zaW5nbGUgOiBjb25zdGFudHMuZG91YmxlKVt4M11beTVdLAogICAgICAgIGF0dHJpYnV0ZTogdHJ1ZQogICAgICB9KQogICAgKSArIHF1b3RlOwogIH0KICByZXR1cm4gbmFtZSArIChyZXN1bHQgPyAiPSIgKyByZXN1bHQgOiByZXN1bHQpOwp9CnZhciBjb25zdGFudHM7CnZhciBpbml0X2VsZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9lbGVtZW50LmpzIigpIHsKICAgIGluaXRfY2NvdW50KCk7CiAgICBpbml0X2NvbW1hX3NlcGFyYXRlZF90b2tlbnMoKTsKICAgIGluaXRfcHJvcGVydHlfaW5mb3JtYXRpb24oKTsKICAgIGluaXRfc3BhY2Vfc2VwYXJhdGVkX3Rva2VucygpOwogICAgaW5pdF9zdHJpbmdpZnlfZW50aXRpZXMoKTsKICAgIGluaXRfY2xvc2luZygpOwogICAgaW5pdF9vcGVuaW5nKCk7CiAgICBjb25zdGFudHMgPSB7CiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS1uYW1lLXN0YXRlPi4KICAgICAgbmFtZTogWwogICAgICAgIFsiCVxuXGZcciAmLz0+Ii5zcGxpdCgiIiksICIJXG5cZlxyIFwiJicvPT5gIi5zcGxpdCgiIildLAogICAgICAgIFtgXDAJClxmXHIgIiYnLzw9PmAuc3BsaXQoIiIpLCAiXDAJXG5cZlxyIFwiJicvPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHVucXVvdGVkKS1zdGF0ZT4uCiAgICAgIHVucXVvdGVkOiBbCiAgICAgICAgWyIJXG5cZlxyICY+Ii5zcGxpdCgiIiksICJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMAlcblxmXHIgXCImJzw9PmAiLnNwbGl0KCIiKSwgIlwwCVxuXGZcciBcIiYnPD0+YCIuc3BsaXQoIiIpXQogICAgICBdLAogICAgICAvLyBTZWU6IDxodHRwczovL2h0bWwuc3BlYy53aGF0d2cub3JnLyNhdHRyaWJ1dGUtdmFsdWUtKHNpbmdsZS1xdW90ZWQpLXN0YXRlPi4KICAgICAgc2luZ2xlOiBbCiAgICAgICAgWyImJyIuc3BsaXQoIiIpLCAiXCImJ2AiLnNwbGl0KCIiKV0sCiAgICAgICAgWyJcMCYnIi5zcGxpdCgiIiksICJcMFwiJidgIi5zcGxpdCgiIildCiAgICAgIF0sCiAgICAgIC8vIFNlZTogPGh0dHBzOi8vaHRtbC5zcGVjLndoYXR3Zy5vcmcvI2F0dHJpYnV0ZS12YWx1ZS0oZG91YmxlLXF1b3RlZCktc3RhdGU+LgogICAgICBkb3VibGU6IFsKICAgICAgICBbJyImJy5zcGxpdCgiIiksICJcIiYnYCIuc3BsaXQoIiIpXSwKICAgICAgICBbJ1wwIiYnLnNwbGl0KCIiKSwgIlwwXCImJ2AiLnNwbGl0KCIiKV0KICAgICAgXQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL3RleHQuanMKZnVuY3Rpb24gdGV4dDcobm9kZTIsIF80LCBwYXJlbnQsIHN0YXRlMTIpIHsKICByZXR1cm4gcGFyZW50ICYmIHBhcmVudC50eXBlID09PSAiZWxlbWVudCIgJiYgKHBhcmVudC50YWdOYW1lID09PSAic2NyaXB0IiB8fCBwYXJlbnQudGFnTmFtZSA9PT0gInN0eWxlIikgPyBub2RlMi52YWx1ZSA6IHN0cmluZ2lmeUVudGl0aWVzKAogICAgbm9kZTIudmFsdWUsCiAgICBPYmplY3QuYXNzaWduKHt9LCBzdGF0ZTEyLnNldHRpbmdzLmNoYXJhY3RlclJlZmVyZW5jZXMsIHsKICAgICAgc3Vic2V0OiB0ZXh0RW50aXR5U3Vic2V0CiAgICB9KQogICk7Cn0KdmFyIHRleHRFbnRpdHlTdWJzZXQ7CnZhciBpbml0X3RleHQ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvdGV4dC5qcyIoKSB7CiAgICBpbml0X3N0cmluZ2lmeV9lbnRpdGllcygpOwogICAgdGV4dEVudGl0eVN1YnNldCA9IFsiPCIsICImIl07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yYXcuanMKZnVuY3Rpb24gcmF3KG5vZGUyLCBpbmRleDIsIHBhcmVudCwgc3RhdGUxMikgewogIHJldHVybiBzdGF0ZTEyLnNldHRpbmdzLmFsbG93RGFuZ2Vyb3VzSHRtbCA/IG5vZGUyLnZhbHVlIDogdGV4dDcobm9kZTIsIGluZGV4MiwgcGFyZW50LCBzdGF0ZTEyKTsKfQp2YXIgaW5pdF9yYXcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yYXcuanMiKCkgewogICAgaW5pdF90ZXh0NCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9oYW5kbGUvcm9vdC5qcwpmdW5jdGlvbiByb290NChub2RlMiwgXzEsIF8yMiwgc3RhdGUxMikgewogIHJldHVybiBzdGF0ZTEyLmFsbChub2RlMik7Cn0KdmFyIGluaXRfcm9vdDMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvbGliL2hhbmRsZS9yb290LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2luZGV4LmpzCmZ1bmN0aW9uIGludmFsaWQyKG5vZGUyKSB7CiAgdGhyb3cgbmV3IEVycm9yKCJFeHBlY3RlZCBub2RlLCBub3QgYCIgKyBub2RlMiArICJgIik7Cn0KZnVuY3Rpb24gdW5rbm93bjIobm9kZV8pIHsKICBjb25zdCBub2RlMiA9ICgKICAgIC8qKiBAdHlwZSB7Tm9kZXN9ICovCiAgICBub2RlXwogICk7CiAgdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY29tcGlsZSB1bmtub3duIG5vZGUgYCIgKyBub2RlMi50eXBlICsgImAiKTsKfQp2YXIgaGFuZGxlMjsKdmFyIGluaXRfaGFuZGxlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaGFuZGxlL2luZGV4LmpzIigpIHsKICAgIGluaXRfendpdGNoKCk7CiAgICBpbml0X2NvbW1lbnQoKTsKICAgIGluaXRfZG9jdHlwZSgpOwogICAgaW5pdF9lbGVtZW50KCk7CiAgICBpbml0X3JhdygpOwogICAgaW5pdF9yb290MygpOwogICAgaW5pdF90ZXh0NCgpOwogICAgaGFuZGxlMiA9IHp3aXRjaCgidHlwZSIsIHsKICAgICAgaW52YWxpZDogaW52YWxpZDIsCiAgICAgIHVua25vd246IHVua25vd24yLAogICAgICBoYW5kbGVyczogeyBjb21tZW50OiBjb21tZW50MiwgZG9jdHlwZTogZG9jdHlwZTIsIGVsZW1lbnQ6IGVsZW1lbnQzLCByYXcsIHJvb3Q6IHJvb3Q0LCB0ZXh0OiB0ZXh0NyB9CiAgICB9KTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2hhc3QtdXRpbC10by1odG1sQDkuMC41L25vZGVfbW9kdWxlcy9oYXN0LXV0aWwtdG8taHRtbC9saWIvaW5kZXguanMKZnVuY3Rpb24gdG9IdG1sKHRyZWUsIG9wdGlvbnMpIHsKICBjb25zdCBvcHRpb25zXyA9IG9wdGlvbnMgfHwgZW1wdHlPcHRpb25zNjsKICBjb25zdCBxdW90ZSA9IG9wdGlvbnNfLnF1b3RlIHx8ICciJzsKICBjb25zdCBhbHRlcm5hdGl2ZSA9IHF1b3RlID09PSAnIicgPyAiJyIgOiAnIic7CiAgaWYgKHF1b3RlICE9PSAnIicgJiYgcXVvdGUgIT09ICInIikgewogICAgdGhyb3cgbmV3IEVycm9yKCJJbnZhbGlkIHF1b3RlIGAiICsgcXVvdGUgKyAiYCwgZXhwZWN0ZWQgYCdgIG9yIGBcImAiKTsKICB9CiAgY29uc3Qgc3RhdGUxMiA9IHsKICAgIG9uZTogb25lMiwKICAgIGFsbDogYWxsMiwKICAgIHNldHRpbmdzOiB7CiAgICAgIG9taXRPcHRpb25hbFRhZ3M6IG9wdGlvbnNfLm9taXRPcHRpb25hbFRhZ3MgfHwgZmFsc2UsCiAgICAgIGFsbG93UGFyc2VFcnJvcnM6IG9wdGlvbnNfLmFsbG93UGFyc2VFcnJvcnMgfHwgZmFsc2UsCiAgICAgIGFsbG93RGFuZ2Vyb3VzQ2hhcmFjdGVyczogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNDaGFyYWN0ZXJzIHx8IGZhbHNlLAogICAgICBxdW90ZVNtYXJ0OiBvcHRpb25zXy5xdW90ZVNtYXJ0IHx8IGZhbHNlLAogICAgICBwcmVmZXJVbnF1b3RlZDogb3B0aW9uc18ucHJlZmVyVW5xdW90ZWQgfHwgZmFsc2UsCiAgICAgIHRpZ2h0QXR0cmlidXRlczogb3B0aW9uc18udGlnaHRBdHRyaWJ1dGVzIHx8IGZhbHNlLAogICAgICB1cHBlckRvY3R5cGU6IG9wdGlvbnNfLnVwcGVyRG9jdHlwZSB8fCBmYWxzZSwKICAgICAgdGlnaHREb2N0eXBlOiBvcHRpb25zXy50aWdodERvY3R5cGUgfHwgZmFsc2UsCiAgICAgIGJvZ3VzQ29tbWVudHM6IG9wdGlvbnNfLmJvZ3VzQ29tbWVudHMgfHwgZmFsc2UsCiAgICAgIHRpZ2h0Q29tbWFTZXBhcmF0ZWRMaXN0czogb3B0aW9uc18udGlnaHRDb21tYVNlcGFyYXRlZExpc3RzIHx8IGZhbHNlLAogICAgICB0aWdodFNlbGZDbG9zaW5nOiBvcHRpb25zXy50aWdodFNlbGZDbG9zaW5nIHx8IGZhbHNlLAogICAgICBjb2xsYXBzZUVtcHR5QXR0cmlidXRlczogb3B0aW9uc18uY29sbGFwc2VFbXB0eUF0dHJpYnV0ZXMgfHwgZmFsc2UsCiAgICAgIGFsbG93RGFuZ2Vyb3VzSHRtbDogb3B0aW9uc18uYWxsb3dEYW5nZXJvdXNIdG1sIHx8IGZhbHNlLAogICAgICB2b2lkczogb3B0aW9uc18udm9pZHMgfHwgaHRtbFZvaWRFbGVtZW50cywKICAgICAgY2hhcmFjdGVyUmVmZXJlbmNlczogb3B0aW9uc18uY2hhcmFjdGVyUmVmZXJlbmNlcyB8fCBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMsCiAgICAgIGNsb3NlU2VsZkNsb3Npbmc6IG9wdGlvbnNfLmNsb3NlU2VsZkNsb3NpbmcgfHwgZmFsc2UsCiAgICAgIGNsb3NlRW1wdHlFbGVtZW50czogb3B0aW9uc18uY2xvc2VFbXB0eUVsZW1lbnRzIHx8IGZhbHNlCiAgICB9LAogICAgc2NoZW1hOiBvcHRpb25zXy5zcGFjZSA9PT0gInN2ZyIgPyBzdmcyIDogaHRtbDQsCiAgICBxdW90ZSwKICAgIGFsdGVybmF0aXZlCiAgfTsKICByZXR1cm4gc3RhdGUxMi5vbmUoCiAgICBBcnJheS5pc0FycmF5KHRyZWUpID8geyB0eXBlOiAicm9vdCIsIGNoaWxkcmVuOiB0cmVlIH0gOiB0cmVlLAogICAgdm9pZCAwLAogICAgdm9pZCAwCiAgKTsKfQpmdW5jdGlvbiBvbmUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCkgewogIHJldHVybiBoYW5kbGUyKG5vZGUyLCBpbmRleDIsIHBhcmVudCwgdGhpcyk7Cn0KZnVuY3Rpb24gYWxsMihwYXJlbnQpIHsKICBjb25zdCByZXN1bHRzID0gW107CiAgY29uc3QgY2hpbGRyZW4yID0gcGFyZW50ICYmIHBhcmVudC5jaGlsZHJlbiB8fCBlbXB0eUNoaWxkcmVuMjsKICBsZXQgaW5kZXgyID0gLTE7CiAgd2hpbGUgKCsraW5kZXgyIDwgY2hpbGRyZW4yLmxlbmd0aCkgewogICAgcmVzdWx0c1tpbmRleDJdID0gdGhpcy5vbmUoY2hpbGRyZW4yW2luZGV4Ml0sIGluZGV4MiwgcGFyZW50KTsKICB9CiAgcmV0dXJuIHJlc3VsdHMuam9pbigiIik7Cn0KdmFyIGVtcHR5T3B0aW9uczYsIGVtcHR5Q2hhcmFjdGVyUmVmZXJlbmNlcywgZW1wdHlDaGlsZHJlbjI7CnZhciBpbml0X2xpYjMwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vaGFzdC11dGlsLXRvLWh0bWxAOS4wLjUvbm9kZV9tb2R1bGVzL2hhc3QtdXRpbC10by1odG1sL2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X2h0bWxfdm9pZF9lbGVtZW50cygpOwogICAgaW5pdF9wcm9wZXJ0eV9pbmZvcm1hdGlvbigpOwogICAgaW5pdF9oYW5kbGUyKCk7CiAgICBlbXB0eU9wdGlvbnM2ID0ge307CiAgICBlbXB0eUNoYXJhY3RlclJlZmVyZW5jZXMgPSB7fTsKICAgIGVtcHR5Q2hpbGRyZW4yID0gW107CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMKdmFyIGluaXRfaGFzdF91dGlsX3RvX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9oYXN0LXV0aWwtdG8taHRtbEA5LjAuNS9ub2RlX21vZHVsZXMvaGFzdC11dGlsLXRvLWh0bWwvaW5kZXguanMiKCkgewogICAgaW5pdF9saWIzMCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrSHRtbChvcHRpb25zKSB7CiAgY29uc3Qgc2VsZjIgPSB0aGlzOwogIGNvbnN0IHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgc2FuaXRpemU6IGNsZWFuLCAuLi50b0h0bWxPcHRpb25zIH0gPSBvcHRpb25zIHx8IGVtcHR5T3B0aW9uczc7CiAgbGV0IGFsbG93RGFuZ2Vyb3VzSHRtbCA9IGZhbHNlOwogIGxldCBzY2hlbWE7CiAgaWYgKHR5cGVvZiBjbGVhbiA9PT0gImJvb2xlYW4iKSB7CiAgICBhbGxvd0Rhbmdlcm91c0h0bWwgPSAhY2xlYW47CiAgfSBlbHNlIGlmIChjbGVhbikgewogICAgc2NoZW1hID0gY2xlYW47CiAgfQogIHNlbGYyLmNvbXBpbGVyID0gY29tcGlsZXIyOwogIGZ1bmN0aW9uIGNvbXBpbGVyMih0cmVlLCBmaWxlKSB7CiAgICBjb25zdCBoYXN0ID0gdG9IYXN0KHRyZWUsIHsgaGFuZGxlcnM6IGhhbmRsZXJzMiwgYWxsb3dEYW5nZXJvdXNIdG1sIH0pOwogICAgY29uc3Qgc2FmZUhhc3QgPSBhbGxvd0Rhbmdlcm91c0h0bWwgPyBoYXN0IDogc2FuaXRpemUoaGFzdCwgc2NoZW1hKTsKICAgIGNvbnN0IHJlc3VsdCA9IHRvSHRtbChzYWZlSGFzdCwgeyAuLi50b0h0bWxPcHRpb25zLCBhbGxvd0Rhbmdlcm91c0h0bWwgfSk7CiAgICBpZiAoZmlsZS5leHRuYW1lKSB7CiAgICAgIGZpbGUuZXh0bmFtZSA9ICIuaHRtbCI7CiAgICB9CiAgICByZXR1cm4gdHJlZSAmJiB0cmVlLnR5cGUgPT09ICJyb290IiAmJiByZXN1bHQgJiYgL1teXHJcbl0vLnRlc3QocmVzdWx0LmNoYXJBdChyZXN1bHQubGVuZ3RoIC0gMSkpID8gcmVzdWx0ICsgIlxuIiA6IHJlc3VsdDsKICB9Cn0KdmFyIGVtcHR5T3B0aW9uczc7CnZhciBpbml0X2xpYjMxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9saWIvaW5kZXguanMiKCkgewogICAgaW5pdF9oYXN0X3V0aWxfc2FuaXRpemUoKTsKICAgIGluaXRfbWRhc3RfdXRpbF90b19oYXN0KCk7CiAgICBpbml0X2hhc3RfdXRpbF90b19odG1sKCk7CiAgICBlbXB0eU9wdGlvbnM3ID0ge307CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstaHRtbEAxNi4wLjEvbm9kZV9tb2R1bGVzL3JlbWFyay1odG1sL2luZGV4LmpzCnZhciBpbml0X3JlbWFya19odG1sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vcmVtYXJrLWh0bWxAMTYuMC4xL25vZGVfbW9kdWxlcy9yZW1hcmstaHRtbC9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMxKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9saWIvaW5kZXguanMKZnVuY3Rpb24gcmVtYXJrU3RyaW5naWZ5KG9wdGlvbnMpIHsKICBjb25zdCBzZWxmMiA9IHRoaXM7CiAgc2VsZjIuY29tcGlsZXIgPSBjb21waWxlcjI7CiAgZnVuY3Rpb24gY29tcGlsZXIyKHRyZWUpIHsKICAgIHJldHVybiB0b01hcmtkb3duKHRyZWUsIHsKICAgICAgLi4uc2VsZjIuZGF0YSgic2V0dGluZ3MiKSwKICAgICAgLi4ub3B0aW9ucywKICAgICAgLy8gTm90ZTogdGhpcyBvcHRpb24gaXMgbm90IGluIHRoZSByZWFkbWUuCiAgICAgIC8vIFRoZSBnb2FsIGlzIGZvciBpdCB0byBiZSBzZXQgYnkgcGx1Z2lucyBvbiBgZGF0YWAgaW5zdGVhZCBvZiBiZWluZwogICAgICAvLyBwYXNzZWQgYnkgdXNlcnMuCiAgICAgIGV4dGVuc2lvbnM6IHNlbGYyLmRhdGEoInRvTWFya2Rvd25FeHRlbnNpb25zIikgfHwgW10KICAgIH0pOwogIH0KfQp2YXIgaW5pdF9saWIzMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2xpYi9pbmRleC5qcyIoKSB7CiAgICBpbml0X21kYXN0X3V0aWxfdG9fbWFya2Rvd24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL3JlbWFyay1zdHJpbmdpZnlAMTEuMC4wL25vZGVfbW9kdWxlcy9yZW1hcmstc3RyaW5naWZ5L2luZGV4LmpzCnZhciBpbml0X3JlbWFya19zdHJpbmdpZnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9yZW1hcmstc3RyaW5naWZ5QDExLjAuMC9ub2RlX21vZHVsZXMvcmVtYXJrLXN0cmluZ2lmeS9pbmRleC5qcyIoKSB7CiAgICBpbml0X2xpYjMyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bkA3LjIuMi9ub2RlX21vZHVsZXMvdHVybmRvd24vbGliL3R1cm5kb3duLmJyb3dzZXIuZXMuanMKZnVuY3Rpb24gZXh0ZW5kMihkZXN0aW5hdGlvbikgewogIGZvciAodmFyIGkxMSA9IDE7IGkxMSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YXIgc291cmNlID0gYXJndW1lbnRzW2kxMV07CiAgICBmb3IgKHZhciBrZXkyIGluIHNvdXJjZSkgewogICAgICBpZiAoc291cmNlLmhhc093blByb3BlcnR5KGtleTIpKSBkZXN0aW5hdGlvbltrZXkyXSA9IHNvdXJjZVtrZXkyXTsKICAgIH0KICB9CiAgcmV0dXJuIGRlc3RpbmF0aW9uOwp9CmZ1bmN0aW9uIHJlcGVhdDIoY2hhcmFjdGVyLCBjb3VudDIpIHsKICByZXR1cm4gQXJyYXkoY291bnQyICsgMSkuam9pbihjaGFyYWN0ZXIpOwp9CmZ1bmN0aW9uIHRyaW1MZWFkaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHJldHVybiBzdHJpbmczLnJlcGxhY2UoL15cbiovLCAiIik7Cn0KZnVuY3Rpb24gdHJpbVRyYWlsaW5nTmV3bGluZXMoc3RyaW5nMykgewogIHZhciBpbmRleEVuZCA9IHN0cmluZzMubGVuZ3RoOwogIHdoaWxlIChpbmRleEVuZCA+IDAgJiYgc3RyaW5nM1tpbmRleEVuZCAtIDFdID09PSAiXG4iKSBpbmRleEVuZC0tOwogIHJldHVybiBzdHJpbmczLnN1YnN0cmluZygwLCBpbmRleEVuZCk7Cn0KZnVuY3Rpb24gdHJpbU5ld2xpbmVzKHN0cmluZzMpIHsKICByZXR1cm4gdHJpbVRyYWlsaW5nTmV3bGluZXModHJpbUxlYWRpbmdOZXdsaW5lcyhzdHJpbmczKSk7Cn0KZnVuY3Rpb24gaXNCbG9jayhub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIGJsb2NrRWxlbWVudHMpOwp9CmZ1bmN0aW9uIGlzVm9pZChub2RlMikgewogIHJldHVybiBpczIobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaGFzVm9pZChub2RlMikgewogIHJldHVybiBoYXMobm9kZTIsIHZvaWRFbGVtZW50cyk7Cn0KZnVuY3Rpb24gaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGlzMihub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBoYXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSB7CiAgcmV0dXJuIGhhcyhub2RlMiwgbWVhbmluZ2Z1bFdoZW5CbGFua0VsZW1lbnRzKTsKfQpmdW5jdGlvbiBpczIobm9kZTIsIHRhZ05hbWVzKSB7CiAgcmV0dXJuIHRhZ05hbWVzLmluZGV4T2Yobm9kZTIubm9kZU5hbWUpID49IDA7Cn0KZnVuY3Rpb24gaGFzKG5vZGUyLCB0YWdOYW1lcykgewogIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSAmJiB0YWdOYW1lcy5zb21lKGZ1bmN0aW9uKHRhZ05hbWUpIHsKICAgIHJldHVybiBub2RlMi5nZXRFbGVtZW50c0J5VGFnTmFtZSh0YWdOYW1lKS5sZW5ndGg7CiAgfSk7Cn0KZnVuY3Rpb24gY2xlYW5BdHRyaWJ1dGUoYXR0cmlidXRlKSB7CiAgcmV0dXJuIGF0dHJpYnV0ZSA/IGF0dHJpYnV0ZS5yZXBsYWNlKC8oXG4rXHMqKSsvZywgIlxuIikgOiAiIjsKfQpmdW5jdGlvbiBSdWxlcyhvcHRpb25zKSB7CiAgdGhpcy5vcHRpb25zID0gb3B0aW9uczsKICB0aGlzLl9rZWVwID0gW107CiAgdGhpcy5fcmVtb3ZlID0gW107CiAgdGhpcy5ibGFua1J1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5ibGFua1JlcGxhY2VtZW50CiAgfTsKICB0aGlzLmtlZXBSZXBsYWNlbWVudCA9IG9wdGlvbnMua2VlcFJlcGxhY2VtZW50OwogIHRoaXMuZGVmYXVsdFJ1bGUgPSB7CiAgICByZXBsYWNlbWVudDogb3B0aW9ucy5kZWZhdWx0UmVwbGFjZW1lbnQKICB9OwogIHRoaXMuYXJyYXkgPSBbXTsKICBmb3IgKHZhciBrZXkyIGluIG9wdGlvbnMucnVsZXMpIHRoaXMuYXJyYXkucHVzaChvcHRpb25zLnJ1bGVzW2tleTJdKTsKfQpmdW5jdGlvbiBmaW5kUnVsZShydWxlczMsIG5vZGUyLCBvcHRpb25zKSB7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcnVsZXMzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhciBydWxlID0gcnVsZXMzW2kxMV07CiAgICBpZiAoZmlsdGVyVmFsdWUocnVsZSwgbm9kZTIsIG9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICB9CiAgcmV0dXJuIHZvaWQgMDsKfQpmdW5jdGlvbiBmaWx0ZXJWYWx1ZShydWxlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBmaWx0ZXIyID0gcnVsZS5maWx0ZXI7CiAgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAic3RyaW5nIikgewogICAgaWYgKGZpbHRlcjIgPT09IG5vZGUyLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpIHJldHVybiB0cnVlOwogIH0gZWxzZSBpZiAoQXJyYXkuaXNBcnJheShmaWx0ZXIyKSkgewogICAgaWYgKGZpbHRlcjIuaW5kZXhPZihub2RlMi5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKSA+IC0xKSByZXR1cm4gdHJ1ZTsKICB9IGVsc2UgaWYgKHR5cGVvZiBmaWx0ZXIyID09PSAiZnVuY3Rpb24iKSB7CiAgICBpZiAoZmlsdGVyMi5jYWxsKHJ1bGUsIG5vZGUyLCBvcHRpb25zKSkgcmV0dXJuIHRydWU7CiAgfSBlbHNlIHsKICAgIHRocm93IG5ldyBUeXBlRXJyb3IoImBmaWx0ZXJgIG5lZWRzIHRvIGJlIGEgc3RyaW5nLCBhcnJheSwgb3IgZnVuY3Rpb24iKTsKICB9Cn0KZnVuY3Rpb24gY29sbGFwc2VXaGl0ZXNwYWNlKG9wdGlvbnMpIHsKICB2YXIgZWxlbWVudDQgPSBvcHRpb25zLmVsZW1lbnQ7CiAgdmFyIGlzQmxvY2syID0gb3B0aW9ucy5pc0Jsb2NrOwogIHZhciBpc1ZvaWQyID0gb3B0aW9ucy5pc1ZvaWQ7CiAgdmFyIGlzUHJlID0gb3B0aW9ucy5pc1ByZSB8fCBmdW5jdGlvbihub2RlMykgewogICAgcmV0dXJuIG5vZGUzLm5vZGVOYW1lID09PSAiUFJFIjsKICB9OwogIGlmICghZWxlbWVudDQuZmlyc3RDaGlsZCB8fCBpc1ByZShlbGVtZW50NCkpIHJldHVybjsKICB2YXIgcHJldlRleHQgPSBudWxsOwogIHZhciBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgdmFyIHByZXYgPSBudWxsOwogIHZhciBub2RlMiA9IG5leHQocHJldiwgZWxlbWVudDQsIGlzUHJlKTsKICB3aGlsZSAobm9kZTIgIT09IGVsZW1lbnQ0KSB7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMgfHwgbm9kZTIubm9kZVR5cGUgPT09IDQpIHsKICAgICAgdmFyIHRleHQ5ID0gbm9kZTIuZGF0YS5yZXBsYWNlKC9bIFxyXG5cdF0rL2csICIgIik7CiAgICAgIGlmICgoIXByZXZUZXh0IHx8IC8gJC8udGVzdChwcmV2VGV4dC5kYXRhKSkgJiYgIWtlZXBMZWFkaW5nV3MgJiYgdGV4dDlbMF0gPT09ICIgIikgewogICAgICAgIHRleHQ5ID0gdGV4dDkuc3Vic3RyKDEpOwogICAgICB9CiAgICAgIGlmICghdGV4dDkpIHsKICAgICAgICBub2RlMiA9IHJlbW92ZShub2RlMik7CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgbm9kZTIuZGF0YSA9IHRleHQ5OwogICAgICBwcmV2VGV4dCA9IG5vZGUyOwogICAgfSBlbHNlIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gMSkgewogICAgICBpZiAoaXNCbG9jazIobm9kZTIpIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQlIiKSB7CiAgICAgICAgaWYgKHByZXZUZXh0KSB7CiAgICAgICAgICBwcmV2VGV4dC5kYXRhID0gcHJldlRleHQuZGF0YS5yZXBsYWNlKC8gJC8sICIiKTsKICAgICAgICB9CiAgICAgICAgcHJldlRleHQgPSBudWxsOwogICAgICAgIGtlZXBMZWFkaW5nV3MgPSBmYWxzZTsKICAgICAgfSBlbHNlIGlmIChpc1ZvaWQyKG5vZGUyKSB8fCBpc1ByZShub2RlMikpIHsKICAgICAgICBwcmV2VGV4dCA9IG51bGw7CiAgICAgICAga2VlcExlYWRpbmdXcyA9IHRydWU7CiAgICAgIH0gZWxzZSBpZiAocHJldlRleHQpIHsKICAgICAgICBrZWVwTGVhZGluZ1dzID0gZmFsc2U7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIG5vZGUyID0gcmVtb3ZlKG5vZGUyKTsKICAgICAgY29udGludWU7CiAgICB9CiAgICB2YXIgbmV4dE5vZGUgPSBuZXh0KHByZXYsIG5vZGUyLCBpc1ByZSk7CiAgICBwcmV2ID0gbm9kZTI7CiAgICBub2RlMiA9IG5leHROb2RlOwogIH0KICBpZiAocHJldlRleHQpIHsKICAgIHByZXZUZXh0LmRhdGEgPSBwcmV2VGV4dC5kYXRhLnJlcGxhY2UoLyAkLywgIiIpOwogICAgaWYgKCFwcmV2VGV4dC5kYXRhKSB7CiAgICAgIHJlbW92ZShwcmV2VGV4dCk7CiAgICB9CiAgfQp9CmZ1bmN0aW9uIHJlbW92ZShub2RlMikgewogIHZhciBuZXh0MiA9IG5vZGUyLm5leHRTaWJsaW5nIHx8IG5vZGUyLnBhcmVudE5vZGU7CiAgbm9kZTIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChub2RlMik7CiAgcmV0dXJuIG5leHQyOwp9CmZ1bmN0aW9uIG5leHQocHJldiwgY3VycmVudCwgaXNQcmUpIHsKICBpZiAocHJldiAmJiBwcmV2LnBhcmVudE5vZGUgPT09IGN1cnJlbnQgfHwgaXNQcmUoY3VycmVudCkpIHsKICAgIHJldHVybiBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKICB9CiAgcmV0dXJuIGN1cnJlbnQuZmlyc3RDaGlsZCB8fCBjdXJyZW50Lm5leHRTaWJsaW5nIHx8IGN1cnJlbnQucGFyZW50Tm9kZTsKfQpmdW5jdGlvbiBjYW5QYXJzZUhUTUxOYXRpdmVseSgpIHsKICB2YXIgUGFyc2VyMiA9IHJvb3Q1LkRPTVBhcnNlcjsKICB2YXIgY2FuUGFyc2UgPSBmYWxzZTsKICB0cnkgewogICAgaWYgKG5ldyBQYXJzZXIyKCkucGFyc2VGcm9tU3RyaW5nKCIiLCAidGV4dC9odG1sIikpIHsKICAgICAgY2FuUGFyc2UgPSB0cnVlOwogICAgfQogIH0gY2F0Y2ggKGUxMSkgewogIH0KICByZXR1cm4gY2FuUGFyc2U7Cn0KZnVuY3Rpb24gY3JlYXRlSFRNTFBhcnNlcigpIHsKICB2YXIgUGFyc2VyMiA9IGZ1bmN0aW9uKCkgewogIH07CiAgewogICAgaWYgKHNob3VsZFVzZUFjdGl2ZVgoKSkgewogICAgICBQYXJzZXIyLnByb3RvdHlwZS5wYXJzZUZyb21TdHJpbmcgPSBmdW5jdGlvbihzdHJpbmczKSB7CiAgICAgICAgdmFyIGRvYyA9IG5ldyB3aW5kb3cuQWN0aXZlWE9iamVjdCgiaHRtbGZpbGUiKTsKICAgICAgICBkb2MuZGVzaWduTW9kZSA9ICJvbiI7CiAgICAgICAgZG9jLm9wZW4oKTsKICAgICAgICBkb2Mud3JpdGUoc3RyaW5nMyk7CiAgICAgICAgZG9jLmNsb3NlKCk7CiAgICAgICAgcmV0dXJuIGRvYzsKICAgICAgfTsKICAgIH0gZWxzZSB7CiAgICAgIFBhcnNlcjIucHJvdG90eXBlLnBhcnNlRnJvbVN0cmluZyA9IGZ1bmN0aW9uKHN0cmluZzMpIHsKICAgICAgICB2YXIgZG9jID0gZG9jdW1lbnQuaW1wbGVtZW50YXRpb24uY3JlYXRlSFRNTERvY3VtZW50KCIiKTsKICAgICAgICBkb2Mub3BlbigpOwogICAgICAgIGRvYy53cml0ZShzdHJpbmczKTsKICAgICAgICBkb2MuY2xvc2UoKTsKICAgICAgICByZXR1cm4gZG9jOwogICAgICB9OwogICAgfQogIH0KICByZXR1cm4gUGFyc2VyMjsKfQpmdW5jdGlvbiBzaG91bGRVc2VBY3RpdmVYKCkgewogIHZhciB1c2VBY3RpdmVYID0gZmFsc2U7CiAgdHJ5IHsKICAgIGRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIikub3BlbigpOwogIH0gY2F0Y2ggKGUxMSkgewogICAgaWYgKHJvb3Q1LkFjdGl2ZVhPYmplY3QpIHVzZUFjdGl2ZVggPSB0cnVlOwogIH0KICByZXR1cm4gdXNlQWN0aXZlWDsKfQpmdW5jdGlvbiBSb290Tm9kZShpbnB1dCwgb3B0aW9ucykgewogIHZhciByb290NjsKICBpZiAodHlwZW9mIGlucHV0ID09PSAic3RyaW5nIikgewogICAgdmFyIGRvYyA9IGh0bWxQYXJzZXIoKS5wYXJzZUZyb21TdHJpbmcoCiAgICAgIC8vIERPTSBwYXJzZXJzIGFycmFuZ2UgZWxlbWVudHMgaW4gdGhlIDxoZWFkPiBhbmQgPGJvZHk+LgogICAgICAvLyBXcmFwcGluZyBpbiBhIGN1c3RvbSBlbGVtZW50IGVuc3VyZXMgZWxlbWVudHMgYXJlIHJlbGlhYmx5IGFycmFuZ2VkIGluCiAgICAgIC8vIGEgc2luZ2xlIGVsZW1lbnQuCiAgICAgICc8eC10dXJuZG93biBpZD0idHVybmRvd24tcm9vdCI+JyArIGlucHV0ICsgIjwveC10dXJuZG93bj4iLAogICAgICAidGV4dC9odG1sIgogICAgKTsKICAgIHJvb3Q2ID0gZG9jLmdldEVsZW1lbnRCeUlkKCJ0dXJuZG93bi1yb290Iik7CiAgfSBlbHNlIHsKICAgIHJvb3Q2ID0gaW5wdXQuY2xvbmVOb2RlKHRydWUpOwogIH0KICBjb2xsYXBzZVdoaXRlc3BhY2UoewogICAgZWxlbWVudDogcm9vdDYsCiAgICBpc0Jsb2NrLAogICAgaXNWb2lkLAogICAgaXNQcmU6IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSA/IGlzUHJlT3JDb2RlIDogbnVsbAogIH0pOwogIHJldHVybiByb290NjsKfQpmdW5jdGlvbiBodG1sUGFyc2VyKCkgewogIF9odG1sUGFyc2VyID0gX2h0bWxQYXJzZXIgfHwgbmV3IEhUTUxQYXJzZXIoKTsKICByZXR1cm4gX2h0bWxQYXJzZXI7Cn0KZnVuY3Rpb24gaXNQcmVPckNvZGUobm9kZTIpIHsKICByZXR1cm4gbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiIHx8IG5vZGUyLm5vZGVOYW1lID09PSAiQ09ERSI7Cn0KZnVuY3Rpb24gTm9kZTIobm9kZTIsIG9wdGlvbnMpIHsKICBub2RlMi5pc0Jsb2NrID0gaXNCbG9jayhub2RlMik7CiAgbm9kZTIuaXNDb2RlID0gbm9kZTIubm9kZU5hbWUgPT09ICJDT0RFIiB8fCBub2RlMi5wYXJlbnROb2RlLmlzQ29kZTsKICBub2RlMi5pc0JsYW5rID0gaXNCbGFuayhub2RlMik7CiAgbm9kZTIuZmxhbmtpbmdXaGl0ZXNwYWNlID0gZmxhbmtpbmdXaGl0ZXNwYWNlKG5vZGUyLCBvcHRpb25zKTsKICByZXR1cm4gbm9kZTI7Cn0KZnVuY3Rpb24gaXNCbGFuayhub2RlMikgewogIHJldHVybiAhaXNWb2lkKG5vZGUyKSAmJiAhaXNNZWFuaW5nZnVsV2hlbkJsYW5rKG5vZGUyKSAmJiAvXlxzKiQvaS50ZXN0KG5vZGUyLnRleHRDb250ZW50KSAmJiAhaGFzVm9pZChub2RlMikgJiYgIWhhc01lYW5pbmdmdWxXaGVuQmxhbmsobm9kZTIpOwp9CmZ1bmN0aW9uIGZsYW5raW5nV2hpdGVzcGFjZShub2RlMiwgb3B0aW9ucykgewogIGlmIChub2RlMi5pc0Jsb2NrIHx8IG9wdGlvbnMucHJlZm9ybWF0dGVkQ29kZSAmJiBub2RlMi5pc0NvZGUpIHsKICAgIHJldHVybiB7IGxlYWRpbmc6ICIiLCB0cmFpbGluZzogIiIgfTsKICB9CiAgdmFyIGVkZ2VzID0gZWRnZVdoaXRlc3BhY2Uobm9kZTIudGV4dENvbnRlbnQpOwogIGlmIChlZGdlcy5sZWFkaW5nQXNjaWkgJiYgaXNGbGFua2VkQnlXaGl0ZXNwYWNlKCJsZWZ0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy5sZWFkaW5nID0gZWRnZXMubGVhZGluZ05vbkFzY2lpOwogIH0KICBpZiAoZWRnZXMudHJhaWxpbmdBc2NpaSAmJiBpc0ZsYW5rZWRCeVdoaXRlc3BhY2UoInJpZ2h0Iiwgbm9kZTIsIG9wdGlvbnMpKSB7CiAgICBlZGdlcy50cmFpbGluZyA9IGVkZ2VzLnRyYWlsaW5nTm9uQXNjaWk7CiAgfQogIHJldHVybiB7IGxlYWRpbmc6IGVkZ2VzLmxlYWRpbmcsIHRyYWlsaW5nOiBlZGdlcy50cmFpbGluZyB9Owp9CmZ1bmN0aW9uIGVkZ2VXaGl0ZXNwYWNlKHN0cmluZzMpIHsKICB2YXIgbTYgPSBzdHJpbmczLm1hdGNoKC9eKChbIFx0XHJcbl0qKShccyopKSg/Oig/PVxTKVtcc1xTXSpcUyk/KChccyo/KShbIFx0XHJcbl0qKSkkLyk7CiAgcmV0dXJuIHsKICAgIGxlYWRpbmc6IG02WzFdLAogICAgLy8gd2hvbGUgc3RyaW5nIGZvciB3aGl0ZXNwYWNlLW9ubHkgc3RyaW5ncwogICAgbGVhZGluZ0FzY2lpOiBtNlsyXSwKICAgIGxlYWRpbmdOb25Bc2NpaTogbTZbM10sCiAgICB0cmFpbGluZzogbTZbNF0sCiAgICAvLyBlbXB0eSBmb3Igd2hpdGVzcGFjZS1vbmx5IHN0cmluZ3MKICAgIHRyYWlsaW5nTm9uQXNjaWk6IG02WzVdLAogICAgdHJhaWxpbmdBc2NpaTogbTZbNl0KICB9Owp9CmZ1bmN0aW9uIGlzRmxhbmtlZEJ5V2hpdGVzcGFjZShzaWRlLCBub2RlMiwgb3B0aW9ucykgewogIHZhciBzaWJsaW5nOwogIHZhciByZWdFeHA7CiAgdmFyIGlzRmxhbmtlZDsKICBpZiAoc2lkZSA9PT0gImxlZnQiKSB7CiAgICBzaWJsaW5nID0gbm9kZTIucHJldmlvdXNTaWJsaW5nOwogICAgcmVnRXhwID0gLyAkLzsKICB9IGVsc2UgewogICAgc2libGluZyA9IG5vZGUyLm5leHRTaWJsaW5nOwogICAgcmVnRXhwID0gL14gLzsKICB9CiAgaWYgKHNpYmxpbmcpIHsKICAgIGlmIChzaWJsaW5nLm5vZGVUeXBlID09PSAzKSB7CiAgICAgIGlzRmxhbmtlZCA9IHJlZ0V4cC50ZXN0KHNpYmxpbmcubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAob3B0aW9ucy5wcmVmb3JtYXR0ZWRDb2RlICYmIHNpYmxpbmcubm9kZU5hbWUgPT09ICJDT0RFIikgewogICAgICBpc0ZsYW5rZWQgPSBmYWxzZTsKICAgIH0gZWxzZSBpZiAoc2libGluZy5ub2RlVHlwZSA9PT0gMSAmJiAhaXNCbG9jayhzaWJsaW5nKSkgewogICAgICBpc0ZsYW5rZWQgPSByZWdFeHAudGVzdChzaWJsaW5nLnRleHRDb250ZW50KTsKICAgIH0KICB9CiAgcmV0dXJuIGlzRmxhbmtlZDsKfQpmdW5jdGlvbiBUdXJuZG93blNlcnZpY2Uob3B0aW9ucykgewogIGlmICghKHRoaXMgaW5zdGFuY2VvZiBUdXJuZG93blNlcnZpY2UpKSByZXR1cm4gbmV3IFR1cm5kb3duU2VydmljZShvcHRpb25zKTsKICB2YXIgZGVmYXVsdHMgPSB7CiAgICBydWxlcywKICAgIGhlYWRpbmdTdHlsZTogInNldGV4dCIsCiAgICBocjogIiogKiAqIiwKICAgIGJ1bGxldExpc3RNYXJrZXI6ICIqIiwKICAgIGNvZGVCbG9ja1N0eWxlOiAiaW5kZW50ZWQiLAogICAgZmVuY2U6ICJgYGAiLAogICAgZW1EZWxpbWl0ZXI6ICJfIiwKICAgIHN0cm9uZ0RlbGltaXRlcjogIioqIiwKICAgIGxpbmtTdHlsZTogImlubGluZWQiLAogICAgbGlua1JlZmVyZW5jZVN0eWxlOiAiZnVsbCIsCiAgICBicjogIiAgIiwKICAgIHByZWZvcm1hdHRlZENvZGU6IGZhbHNlLAogICAgYmxhbmtSZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi5pc0Jsb2NrID8gIlxuXG4iIDogIiI7CiAgICB9LAogICAga2VlcFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBub2RlMi5vdXRlckhUTUwgKyAiXG5cbiIgOiBub2RlMi5vdXRlckhUTUw7CiAgICB9LAogICAgZGVmYXVsdFJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIpIHsKICAgICAgcmV0dXJuIG5vZGUyLmlzQmxvY2sgPyAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIiA6IGNvbnRlbnQzOwogICAgfQogIH07CiAgdGhpcy5vcHRpb25zID0gZXh0ZW5kMih7fSwgZGVmYXVsdHMsIG9wdGlvbnMpOwogIHRoaXMucnVsZXMgPSBuZXcgUnVsZXModGhpcy5vcHRpb25zKTsKfQpmdW5jdGlvbiBwcm9jZXNzMyhwYXJlbnROb2RlKSB7CiAgdmFyIHNlbGYyID0gdGhpczsKICByZXR1cm4gcmVkdWNlMi5jYWxsKHBhcmVudE5vZGUuY2hpbGROb2RlcywgZnVuY3Rpb24ob3V0cHV0LCBub2RlMikgewogICAgbm9kZTIgPSBuZXcgTm9kZTIobm9kZTIsIHNlbGYyLm9wdGlvbnMpOwogICAgdmFyIHJlcGxhY2VtZW50ID0gIiI7CiAgICBpZiAobm9kZTIubm9kZVR5cGUgPT09IDMpIHsKICAgICAgcmVwbGFjZW1lbnQgPSBub2RlMi5pc0NvZGUgPyBub2RlMi5ub2RlVmFsdWUgOiBzZWxmMi5lc2NhcGUobm9kZTIubm9kZVZhbHVlKTsKICAgIH0gZWxzZSBpZiAobm9kZTIubm9kZVR5cGUgPT09IDEpIHsKICAgICAgcmVwbGFjZW1lbnQgPSByZXBsYWNlbWVudEZvck5vZGUuY2FsbChzZWxmMiwgbm9kZTIpOwogICAgfQogICAgcmV0dXJuIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpOwogIH0sICIiKTsKfQpmdW5jdGlvbiBwb3N0UHJvY2VzcyhvdXRwdXQpIHsKICB2YXIgc2VsZjIgPSB0aGlzOwogIHRoaXMucnVsZXMuZm9yRWFjaChmdW5jdGlvbihydWxlKSB7CiAgICBpZiAodHlwZW9mIHJ1bGUuYXBwZW5kID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIG91dHB1dCA9IGpvaW4zKG91dHB1dCwgcnVsZS5hcHBlbmQoc2VsZjIub3B0aW9ucykpOwogICAgfQogIH0pOwogIHJldHVybiBvdXRwdXQucmVwbGFjZSgvXltcdFxyXG5dKy8sICIiKS5yZXBsYWNlKC9bXHRcclxuXHNdKyQvLCAiIik7Cn0KZnVuY3Rpb24gcmVwbGFjZW1lbnRGb3JOb2RlKG5vZGUyKSB7CiAgdmFyIHJ1bGUgPSB0aGlzLnJ1bGVzLmZvck5vZGUobm9kZTIpOwogIHZhciBjb250ZW50MyA9IHByb2Nlc3MzLmNhbGwodGhpcywgbm9kZTIpOwogIHZhciB3aGl0ZXNwYWNlMiA9IG5vZGUyLmZsYW5raW5nV2hpdGVzcGFjZTsKICBpZiAod2hpdGVzcGFjZTIubGVhZGluZyB8fCB3aGl0ZXNwYWNlMi50cmFpbGluZykgY29udGVudDMgPSBjb250ZW50My50cmltKCk7CiAgcmV0dXJuIHdoaXRlc3BhY2UyLmxlYWRpbmcgKyBydWxlLnJlcGxhY2VtZW50KGNvbnRlbnQzLCBub2RlMiwgdGhpcy5vcHRpb25zKSArIHdoaXRlc3BhY2UyLnRyYWlsaW5nOwp9CmZ1bmN0aW9uIGpvaW4zKG91dHB1dCwgcmVwbGFjZW1lbnQpIHsKICB2YXIgczEgPSB0cmltVHJhaWxpbmdOZXdsaW5lcyhvdXRwdXQpOwogIHZhciBzMjIgPSB0cmltTGVhZGluZ05ld2xpbmVzKHJlcGxhY2VtZW50KTsKICB2YXIgbmxzID0gTWF0aC5tYXgob3V0cHV0Lmxlbmd0aCAtIHMxLmxlbmd0aCwgcmVwbGFjZW1lbnQubGVuZ3RoIC0gczIyLmxlbmd0aCk7CiAgdmFyIHNlcGFyYXRvciA9ICJcblxuIi5zdWJzdHJpbmcoMCwgbmxzKTsKICByZXR1cm4gczEgKyBzZXBhcmF0b3IgKyBzMjI7Cn0KZnVuY3Rpb24gY2FuQ29udmVydChpbnB1dCkgewogIHJldHVybiBpbnB1dCAhPSBudWxsICYmICh0eXBlb2YgaW5wdXQgPT09ICJzdHJpbmciIHx8IGlucHV0Lm5vZGVUeXBlICYmIChpbnB1dC5ub2RlVHlwZSA9PT0gMSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gOSB8fCBpbnB1dC5ub2RlVHlwZSA9PT0gMTEpKTsKfQp2YXIgYmxvY2tFbGVtZW50cywgdm9pZEVsZW1lbnRzLCBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMsIHJ1bGVzLCByb290NSwgSFRNTFBhcnNlciwgX2h0bWxQYXJzZXIsIHJlZHVjZTIsIGVzY2FwZXMsIHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdDsKdmFyIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL3R1cm5kb3duQDcuMi4yL25vZGVfbW9kdWxlcy90dXJuZG93bi9saWIvdHVybmRvd24uYnJvd3Nlci5lcy5qcyIoKSB7CiAgICBibG9ja0VsZW1lbnRzID0gWwogICAgICAiQUREUkVTUyIsCiAgICAgICJBUlRJQ0xFIiwKICAgICAgIkFTSURFIiwKICAgICAgIkFVRElPIiwKICAgICAgIkJMT0NLUVVPVEUiLAogICAgICAiQk9EWSIsCiAgICAgICJDQU5WQVMiLAogICAgICAiQ0VOVEVSIiwKICAgICAgIkREIiwKICAgICAgIkRJUiIsCiAgICAgICJESVYiLAogICAgICAiREwiLAogICAgICAiRFQiLAogICAgICAiRklFTERTRVQiLAogICAgICAiRklHQ0FQVElPTiIsCiAgICAgICJGSUdVUkUiLAogICAgICAiRk9PVEVSIiwKICAgICAgIkZPUk0iLAogICAgICAiRlJBTUVTRVQiLAogICAgICAiSDEiLAogICAgICAiSDIiLAogICAgICAiSDMiLAogICAgICAiSDQiLAogICAgICAiSDUiLAogICAgICAiSDYiLAogICAgICAiSEVBREVSIiwKICAgICAgIkhHUk9VUCIsCiAgICAgICJIUiIsCiAgICAgICJIVE1MIiwKICAgICAgIklTSU5ERVgiLAogICAgICAiTEkiLAogICAgICAiTUFJTiIsCiAgICAgICJNRU5VIiwKICAgICAgIk5BViIsCiAgICAgICJOT0ZSQU1FUyIsCiAgICAgICJOT1NDUklQVCIsCiAgICAgICJPTCIsCiAgICAgICJPVVRQVVQiLAogICAgICAiUCIsCiAgICAgICJQUkUiLAogICAgICAiU0VDVElPTiIsCiAgICAgICJUQUJMRSIsCiAgICAgICJUQk9EWSIsCiAgICAgICJURCIsCiAgICAgICJURk9PVCIsCiAgICAgICJUSCIsCiAgICAgICJUSEVBRCIsCiAgICAgICJUUiIsCiAgICAgICJVTCIKICAgIF07CiAgICB2b2lkRWxlbWVudHMgPSBbCiAgICAgICJBUkVBIiwKICAgICAgIkJBU0UiLAogICAgICAiQlIiLAogICAgICAiQ09MIiwKICAgICAgIkNPTU1BTkQiLAogICAgICAiRU1CRUQiLAogICAgICAiSFIiLAogICAgICAiSU1HIiwKICAgICAgIklOUFVUIiwKICAgICAgIktFWUdFTiIsCiAgICAgICJMSU5LIiwKICAgICAgIk1FVEEiLAogICAgICAiUEFSQU0iLAogICAgICAiU09VUkNFIiwKICAgICAgIlRSQUNLIiwKICAgICAgIldCUiIKICAgIF07CiAgICBtZWFuaW5nZnVsV2hlbkJsYW5rRWxlbWVudHMgPSBbCiAgICAgICJBIiwKICAgICAgIlRBQkxFIiwKICAgICAgIlRIRUFEIiwKICAgICAgIlRCT0RZIiwKICAgICAgIlRGT09UIiwKICAgICAgIlRIIiwKICAgICAgIlREIiwKICAgICAgIklGUkFNRSIsCiAgICAgICJTQ1JJUFQiLAogICAgICAiQVVESU8iLAogICAgICAiVklERU8iCiAgICBdOwogICAgcnVsZXMgPSB7fTsKICAgIHJ1bGVzLnBhcmFncmFwaCA9IHsKICAgICAgZmlsdGVyOiAicCIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpbmVCcmVhayA9IHsKICAgICAgZmlsdGVyOiAiYnIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuYnIgKyAiXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuaGVhZGluZyA9IHsKICAgICAgZmlsdGVyOiBbImgxIiwgImgyIiwgImgzIiwgImg0IiwgImg1IiwgImg2Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgaExldmVsID0gTnVtYmVyKG5vZGUyLm5vZGVOYW1lLmNoYXJBdCgxKSk7CiAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGluZ1N0eWxlID09PSAic2V0ZXh0IiAmJiBoTGV2ZWwgPCAzKSB7CiAgICAgICAgICB2YXIgdW5kZXJsaW5lID0gcmVwZWF0MihoTGV2ZWwgPT09IDEgPyAiPSIgOiAiLSIsIGNvbnRlbnQzLmxlbmd0aCk7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgY29udGVudDMgKyAiXG4iICsgdW5kZXJsaW5lICsgIlxuXG4iOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZXR1cm4gIlxuXG4iICsgcmVwZWF0MigiIyIsIGhMZXZlbCkgKyAiICIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5ibG9ja3F1b3RlID0gewogICAgICBmaWx0ZXI6ICJibG9ja3F1b3RlIiwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSB0cmltTmV3bGluZXMoY29udGVudDMpLnJlcGxhY2UoL14vZ20sICI+ICIpOwogICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmxpc3QgPSB7CiAgICAgIGZpbHRlcjogWyJ1bCIsICJvbCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIHBhcmVudCA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICAgICAgaWYgKHBhcmVudC5ub2RlTmFtZSA9PT0gIkxJIiAmJiBwYXJlbnQubGFzdEVsZW1lbnRDaGlsZCA9PT0gbm9kZTIpIHsKICAgICAgICAgIHJldHVybiAiXG4iICsgY29udGVudDM7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiAiXG5cbiIgKyBjb250ZW50MyArICJcblxuIjsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5saXN0SXRlbSA9IHsKICAgICAgZmlsdGVyOiAibGkiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgdmFyIHByZWZpeDQgPSBvcHRpb25zLmJ1bGxldExpc3RNYXJrZXIgKyAiICAgIjsKICAgICAgICB2YXIgcGFyZW50ID0gbm9kZTIucGFyZW50Tm9kZTsKICAgICAgICBpZiAocGFyZW50Lm5vZGVOYW1lID09PSAiT0wiKSB7CiAgICAgICAgICB2YXIgc3RhcnQgPSBwYXJlbnQuZ2V0QXR0cmlidXRlKCJzdGFydCIpOwogICAgICAgICAgdmFyIGluZGV4MiA9IEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwocGFyZW50LmNoaWxkcmVuLCBub2RlMik7CiAgICAgICAgICBwcmVmaXg0ID0gKHN0YXJ0ID8gTnVtYmVyKHN0YXJ0KSArIGluZGV4MiA6IGluZGV4MiArIDEpICsgIi4gICI7CiAgICAgICAgfQogICAgICAgIHZhciBpc1BhcmFncmFwaCA9IC9cbiQvLnRlc3QoY29udGVudDMpOwogICAgICAgIGNvbnRlbnQzID0gdHJpbU5ld2xpbmVzKGNvbnRlbnQzKSArIChpc1BhcmFncmFwaCA/ICJcbiIgOiAiIik7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKC9cbi9nbSwgIlxuIiArICIgIi5yZXBlYXQocHJlZml4NC5sZW5ndGgpKTsKICAgICAgICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgKG5vZGUyLm5leHRTaWJsaW5nID8gIlxuIiA6ICIiKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmluZGVudGVkQ29kZUJsb2NrID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuY29kZUJsb2NrU3R5bGUgPT09ICJpbmRlbnRlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJQUkUiICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIkNPREUiOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuICJcblxuICAgICIgKyBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50LnJlcGxhY2UoL1xuL2csICJcbiAgICAiKSArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmZlbmNlZENvZGVCbG9jayA9IHsKICAgICAgZmlsdGVyOiBmdW5jdGlvbihub2RlMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBvcHRpb25zLmNvZGVCbG9ja1N0eWxlID09PSAiZmVuY2VkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgbm9kZTIuZmlyc3RDaGlsZCAmJiBub2RlMi5maXJzdENoaWxkLm5vZGVOYW1lID09PSAiQ09ERSI7CiAgICAgIH0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuZmlyc3RDaGlsZC5nZXRBdHRyaWJ1dGUoImNsYXNzIikgfHwgIiI7CiAgICAgICAgdmFyIGxhbmd1YWdlID0gKGNsYXNzTmFtZS5tYXRjaCgvbGFuZ3VhZ2UtKFxTKykvKSB8fCBbbnVsbCwgIiJdKVsxXTsKICAgICAgICB2YXIgY29kZTQgPSBub2RlMi5maXJzdENoaWxkLnRleHRDb250ZW50OwogICAgICAgIHZhciBmZW5jZUNoYXIgPSBvcHRpb25zLmZlbmNlLmNoYXJBdCgwKTsKICAgICAgICB2YXIgZmVuY2VTaXplID0gMzsKICAgICAgICB2YXIgZmVuY2VJbkNvZGVSZWdleCA9IG5ldyBSZWdFeHAoIl4iICsgZmVuY2VDaGFyICsgInszLH0iLCAiZ20iKTsKICAgICAgICB2YXIgbWF0Y2gyOwogICAgICAgIHdoaWxlIChtYXRjaDIgPSBmZW5jZUluQ29kZVJlZ2V4LmV4ZWMoY29kZTQpKSB7CiAgICAgICAgICBpZiAobWF0Y2gyWzBdLmxlbmd0aCA+PSBmZW5jZVNpemUpIHsKICAgICAgICAgICAgZmVuY2VTaXplID0gbWF0Y2gyWzBdLmxlbmd0aCArIDE7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHZhciBmZW5jZTMgPSByZXBlYXQyKGZlbmNlQ2hhciwgZmVuY2VTaXplKTsKICAgICAgICByZXR1cm4gIlxuXG4iICsgZmVuY2UzICsgbGFuZ3VhZ2UgKyAiXG4iICsgY29kZTQucmVwbGFjZSgvXG4kLywgIiIpICsgIlxuIiArIGZlbmNlMyArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmhvcml6b250YWxSdWxlID0gewogICAgICBmaWx0ZXI6ICJociIsCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gIlxuXG4iICsgb3B0aW9ucy5ociArICJcblxuIjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmlubGluZUxpbmsgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICByZXR1cm4gb3B0aW9ucy5saW5rU3R5bGUgPT09ICJpbmxpbmVkIiAmJiBub2RlMi5ub2RlTmFtZSA9PT0gIkEiICYmIG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICB9LAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGhyZWYgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgICBpZiAoaHJlZikgaHJlZiA9IGhyZWYucmVwbGFjZSgvKFsoKV0pL2csICJcXCQxIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlLnJlcGxhY2UoLyIvZywgJ1xcIicpICsgJyInOwogICAgICAgIHJldHVybiAiWyIgKyBjb250ZW50MyArICJdKCIgKyBocmVmICsgdGl0bGUgKyAiKSI7CiAgICAgIH0KICAgIH07CiAgICBydWxlcy5yZWZlcmVuY2VMaW5rID0gewogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyLCBvcHRpb25zKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMubGlua1N0eWxlID09PSAicmVmZXJlbmNlZCIgJiYgbm9kZTIubm9kZU5hbWUgPT09ICJBIiAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIHZhciBocmVmID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgdmFyIHRpdGxlID0gY2xlYW5BdHRyaWJ1dGUobm9kZTIuZ2V0QXR0cmlidXRlKCJ0aXRsZSIpKTsKICAgICAgICBpZiAodGl0bGUpIHRpdGxlID0gJyAiJyArIHRpdGxlICsgJyInOwogICAgICAgIHZhciByZXBsYWNlbWVudDsKICAgICAgICB2YXIgcmVmZXJlbmNlOwogICAgICAgIHN3aXRjaCAob3B0aW9ucy5saW5rUmVmZXJlbmNlU3R5bGUpIHsKICAgICAgICAgIGNhc2UgImNvbGxhcHNlZCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVtdIjsKICAgICAgICAgICAgcmVmZXJlbmNlID0gIlsiICsgY29udGVudDMgKyAiXTogIiArIGhyZWYgKyB0aXRsZTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJzaG9ydGN1dCI6CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGNvbnRlbnQzICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgdmFyIGlkID0gdGhpcy5yZWZlcmVuY2VzLmxlbmd0aCArIDE7CiAgICAgICAgICAgIHJlcGxhY2VtZW50ID0gIlsiICsgY29udGVudDMgKyAiXVsiICsgaWQgKyAiXSI7CiAgICAgICAgICAgIHJlZmVyZW5jZSA9ICJbIiArIGlkICsgIl06ICIgKyBocmVmICsgdGl0bGU7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVmZXJlbmNlcy5wdXNoKHJlZmVyZW5jZSk7CiAgICAgICAgcmV0dXJuIHJlcGxhY2VtZW50OwogICAgICB9LAogICAgICByZWZlcmVuY2VzOiBbXSwKICAgICAgYXBwZW5kOiBmdW5jdGlvbihvcHRpb25zKSB7CiAgICAgICAgdmFyIHJlZmVyZW5jZXMgPSAiIjsKICAgICAgICBpZiAodGhpcy5yZWZlcmVuY2VzLmxlbmd0aCkgewogICAgICAgICAgcmVmZXJlbmNlcyA9ICJcblxuIiArIHRoaXMucmVmZXJlbmNlcy5qb2luKCJcbiIpICsgIlxuXG4iOwogICAgICAgICAgdGhpcy5yZWZlcmVuY2VzID0gW107CiAgICAgICAgfQogICAgICAgIHJldHVybiByZWZlcmVuY2VzOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuZW1waGFzaXMgPSB7CiAgICAgIGZpbHRlcjogWyJlbSIsICJpIl0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50Mywgbm9kZTIsIG9wdGlvbnMpIHsKICAgICAgICBpZiAoIWNvbnRlbnQzLnRyaW0oKSkgcmV0dXJuICIiOwogICAgICAgIHJldHVybiBvcHRpb25zLmVtRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLmVtRGVsaW1pdGVyOwogICAgICB9CiAgICB9OwogICAgcnVsZXMuc3Ryb25nID0gewogICAgICBmaWx0ZXI6IFsic3Ryb25nIiwgImIiXSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICAgIGlmICghY29udGVudDMudHJpbSgpKSByZXR1cm4gIiI7CiAgICAgICAgcmV0dXJuIG9wdGlvbnMuc3Ryb25nRGVsaW1pdGVyICsgY29udGVudDMgKyBvcHRpb25zLnN0cm9uZ0RlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmNvZGUgPSB7CiAgICAgIGZpbHRlcjogZnVuY3Rpb24obm9kZTIpIHsKICAgICAgICB2YXIgaGFzU2libGluZ3MgPSBub2RlMi5wcmV2aW91c1NpYmxpbmcgfHwgbm9kZTIubmV4dFNpYmxpbmc7CiAgICAgICAgdmFyIGlzQ29kZUJsb2NrID0gbm9kZTIucGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlBSRSIgJiYgIWhhc1NpYmxpbmdzOwogICAgICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIkNPREUiICYmICFpc0NvZGVCbG9jazsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgaWYgKCFjb250ZW50MykgcmV0dXJuICIiOwogICAgICAgIGNvbnRlbnQzID0gY29udGVudDMucmVwbGFjZSgvXHI/XG58XHIvZywgIiAiKTsKICAgICAgICB2YXIgZXh0cmFTcGFjZSA9IC9eYHxeIC4qP1teIF0uKiAkfGAkLy50ZXN0KGNvbnRlbnQzKSA/ICIgIiA6ICIiOwogICAgICAgIHZhciBkZWxpbWl0ZXIgPSAiYCI7CiAgICAgICAgdmFyIG1hdGNoZXMgPSBjb250ZW50My5tYXRjaCgvYCsvZ20pIHx8IFtdOwogICAgICAgIHdoaWxlIChtYXRjaGVzLmluZGV4T2YoZGVsaW1pdGVyKSAhPT0gLTEpIGRlbGltaXRlciA9IGRlbGltaXRlciArICJgIjsKICAgICAgICByZXR1cm4gZGVsaW1pdGVyICsgZXh0cmFTcGFjZSArIGNvbnRlbnQzICsgZXh0cmFTcGFjZSArIGRlbGltaXRlcjsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzLmltYWdlID0gewogICAgICBmaWx0ZXI6ICJpbWciLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGFsdCA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgiYWx0IikpOwogICAgICAgIHZhciBzcmMgPSBub2RlMi5nZXRBdHRyaWJ1dGUoInNyYyIpIHx8ICIiOwogICAgICAgIHZhciB0aXRsZSA9IGNsZWFuQXR0cmlidXRlKG5vZGUyLmdldEF0dHJpYnV0ZSgidGl0bGUiKSk7CiAgICAgICAgdmFyIHRpdGxlUGFydCA9IHRpdGxlID8gJyAiJyArIHRpdGxlICsgJyInIDogIiI7CiAgICAgICAgcmV0dXJuIHNyYyA/ICIhWyIgKyBhbHQgKyAiXSgiICsgc3JjICsgdGl0bGVQYXJ0ICsgIikiIDogIiI7CiAgICAgIH0KICAgIH07CiAgICBSdWxlcy5wcm90b3R5cGUgPSB7CiAgICAgIGFkZDogZnVuY3Rpb24oa2V5MiwgcnVsZSkgewogICAgICAgIHRoaXMuYXJyYXkudW5zaGlmdChydWxlKTsKICAgICAgfSwKICAgICAga2VlcDogZnVuY3Rpb24oZmlsdGVyMikgewogICAgICAgIHRoaXMuX2tlZXAudW5zaGlmdCh7CiAgICAgICAgICBmaWx0ZXI6IGZpbHRlcjIsCiAgICAgICAgICByZXBsYWNlbWVudDogdGhpcy5rZWVwUmVwbGFjZW1lbnQKICAgICAgICB9KTsKICAgICAgfSwKICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5fcmVtb3ZlLnVuc2hpZnQoewogICAgICAgICAgZmlsdGVyOiBmaWx0ZXIyLAogICAgICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0sCiAgICAgIGZvck5vZGU6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgaWYgKG5vZGUyLmlzQmxhbmspIHJldHVybiB0aGlzLmJsYW5rUnVsZTsKICAgICAgICB2YXIgcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuYXJyYXksIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX2tlZXAsIG5vZGUyLCB0aGlzLm9wdGlvbnMpKSByZXR1cm4gcnVsZTsKICAgICAgICBpZiAocnVsZSA9IGZpbmRSdWxlKHRoaXMuX3JlbW92ZSwgbm9kZTIsIHRoaXMub3B0aW9ucykpIHJldHVybiBydWxlOwogICAgICAgIHJldHVybiB0aGlzLmRlZmF1bHRSdWxlOwogICAgICB9LAogICAgICBmb3JFYWNoOiBmdW5jdGlvbihmbikgewogICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IHRoaXMuYXJyYXkubGVuZ3RoOyBpMTErKykgZm4odGhpcy5hcnJheVtpMTFdLCBpMTEpOwogICAgICB9CiAgICB9OwogICAgcm9vdDUgPSB0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiA/IHdpbmRvdyA6IHt9OwogICAgSFRNTFBhcnNlciA9IGNhblBhcnNlSFRNTE5hdGl2ZWx5KCkgPyByb290NS5ET01QYXJzZXIgOiBjcmVhdGVIVE1MUGFyc2VyKCk7CiAgICByZWR1Y2UyID0gQXJyYXkucHJvdG90eXBlLnJlZHVjZTsKICAgIGVzY2FwZXMgPSBbCiAgICAgIFsvXFwvZywgIlxcXFwiXSwKICAgICAgWy9cKi9nLCAiXFwqIl0sCiAgICAgIFsvXi0vZywgIlxcLSJdLAogICAgICBbL15cKyAvZywgIlxcKyAiXSwKICAgICAgWy9eKD0rKS9nLCAiXFwkMSJdLAogICAgICBbL14oI3sxLDZ9KSAvZywgIlxcJDEgIl0sCiAgICAgIFsvYC9nLCAiXFxgIl0sCiAgICAgIFsvXn5+fi9nLCAiXFx+fn4iXSwKICAgICAgWy9cWy9nLCAiXFxbIl0sCiAgICAgIFsvXF0vZywgIlxcXSJdLAogICAgICBbL14+L2csICJcXD4iXSwKICAgICAgWy9fL2csICJcXF8iXSwKICAgICAgWy9eKFxkKylcLiAvZywgIiQxXFwuICJdCiAgICBdOwogICAgVHVybmRvd25TZXJ2aWNlLnByb3RvdHlwZSA9IHsKICAgICAgLyoqCiAgICAgICAqIFRoZSBlbnRyeSBwb2ludCBmb3IgY29udmVydGluZyBhIHN0cmluZyBvciBET00gbm9kZSB0byBNYXJrZG93bgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEhUTUxFbGVtZW50fSBpbnB1dCBUaGUgc3RyaW5nIG9yIERPTSBub2RlIHRvIGNvbnZlcnQKICAgICAgICogQHJldHVybnMgQSBNYXJrZG93biByZXByZXNlbnRhdGlvbiBvZiB0aGUgaW5wdXQKICAgICAgICogQHR5cGUgU3RyaW5nCiAgICAgICAqLwogICAgICB0dXJuZG93bjogZnVuY3Rpb24oaW5wdXQpIHsKICAgICAgICBpZiAoIWNhbkNvbnZlcnQoaW5wdXQpKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKAogICAgICAgICAgICBpbnB1dCArICIgaXMgbm90IGEgc3RyaW5nLCBvciBhbiBlbGVtZW50L2RvY3VtZW50L2ZyYWdtZW50IG5vZGUuIgogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgaWYgKGlucHV0ID09PSAiIikgcmV0dXJuICIiOwogICAgICAgIHZhciBvdXRwdXQgPSBwcm9jZXNzMy5jYWxsKHRoaXMsIG5ldyBSb290Tm9kZShpbnB1dCwgdGhpcy5vcHRpb25zKSk7CiAgICAgICAgcmV0dXJuIHBvc3RQcm9jZXNzLmNhbGwodGhpcywgb3V0cHV0KTsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEFkZCBvbmUgb3IgbW9yZSBwbHVnaW5zCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtGdW5jdGlvbnxBcnJheX0gcGx1Z2luIFRoZSBwbHVnaW4gb3IgYXJyYXkgb2YgcGx1Z2lucyB0byBhZGQKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIHVzZTogZnVuY3Rpb24ocGx1Z2luKSB7CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGx1Z2luKSkgewogICAgICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgcGx1Z2luLmxlbmd0aDsgaTExKyspIHRoaXMudXNlKHBsdWdpbltpMTFdKTsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwbHVnaW4gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIHBsdWdpbih0aGlzKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcigicGx1Z2luIG11c3QgYmUgYSBGdW5jdGlvbiBvciBhbiBBcnJheSBvZiBGdW5jdGlvbnMiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBBZGRzIGEgcnVsZQogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBrZXkgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHBhcmFtIHtPYmplY3R9IHJ1bGUgVGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGFkZFJ1bGU6IGZ1bmN0aW9uKGtleTIsIHJ1bGUpIHsKICAgICAgICB0aGlzLnJ1bGVzLmFkZChrZXkyLCBydWxlKTsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfSwKICAgICAgLyoqCiAgICAgICAqIEtlZXAgYSBub2RlIChhcyBIVE1MKSB0aGF0IG1hdGNoZXMgdGhlIGZpbHRlcgogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfEFycmF5fEZ1bmN0aW9ufSBmaWx0ZXIgVGhlIHVuaXF1ZSBrZXkgb2YgdGhlIHJ1bGUKICAgICAgICogQHJldHVybnMgVGhlIFR1cm5kb3duIGluc3RhbmNlIGZvciBjaGFpbmluZwogICAgICAgKiBAdHlwZSBPYmplY3QKICAgICAgICovCiAgICAgIGtlZXA6IGZ1bmN0aW9uKGZpbHRlcjIpIHsKICAgICAgICB0aGlzLnJ1bGVzLmtlZXAoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBub2RlIHRoYXQgbWF0Y2hlcyB0aGUgZmlsdGVyCiAgICAgICAqIEBwdWJsaWMKICAgICAgICogQHBhcmFtIHtTdHJpbmd8QXJyYXl8RnVuY3Rpb259IGZpbHRlciBUaGUgdW5pcXVlIGtleSBvZiB0aGUgcnVsZQogICAgICAgKiBAcmV0dXJucyBUaGUgVHVybmRvd24gaW5zdGFuY2UgZm9yIGNoYWluaW5nCiAgICAgICAqIEB0eXBlIE9iamVjdAogICAgICAgKi8KICAgICAgcmVtb3ZlOiBmdW5jdGlvbihmaWx0ZXIyKSB7CiAgICAgICAgdGhpcy5ydWxlcy5yZW1vdmUoZmlsdGVyMik7CiAgICAgICAgcmV0dXJuIHRoaXM7CiAgICAgIH0sCiAgICAgIC8qKgogICAgICAgKiBFc2NhcGVzIE1hcmtkb3duIHN5bnRheAogICAgICAgKiBAcHVibGljCiAgICAgICAqIEBwYXJhbSB7U3RyaW5nfSBzdHJpbmcgVGhlIHN0cmluZyB0byBlc2NhcGUKICAgICAgICogQHJldHVybnMgQSBzdHJpbmcgd2l0aCBNYXJrZG93biBzeW50YXggZXNjYXBlZAogICAgICAgKiBAdHlwZSBTdHJpbmcKICAgICAgICovCiAgICAgIGVzY2FwZTogZnVuY3Rpb24oc3RyaW5nMykgewogICAgICAgIHJldHVybiBlc2NhcGVzLnJlZHVjZShmdW5jdGlvbihhY2N1bXVsYXRvciwgZXNjYXBlKSB7CiAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3IucmVwbGFjZShlc2NhcGVbMF0sIGVzY2FwZVsxXSk7CiAgICAgICAgfSwgc3RyaW5nMyk7CiAgICAgIH0KICAgIH07CiAgICB0dXJuZG93bl9icm93c2VyX2VzX2RlZmF1bHQgPSBUdXJuZG93blNlcnZpY2U7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzCnZhciB0dXJuZG93bl9wbHVnaW5fZ2ZtX2VzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLCB7CiAgZ2ZtOiAoKSA9PiBnZm0yLAogIGhpZ2hsaWdodGVkQ29kZUJsb2NrOiAoKSA9PiBoaWdobGlnaHRlZENvZGVCbG9jaywKICBzdHJpa2V0aHJvdWdoOiAoKSA9PiBzdHJpa2V0aHJvdWdoMiwKICB0YWJsZXM6ICgpID0+IHRhYmxlcywKICB0YXNrTGlzdEl0ZW1zOiAoKSA9PiB0YXNrTGlzdEl0ZW1zCn0pOwpmdW5jdGlvbiBoaWdobGlnaHRlZENvZGVCbG9jayh0dXJuZG93blNlcnZpY2UpIHsKICB0dXJuZG93blNlcnZpY2UuYWRkUnVsZSgiaGlnaGxpZ2h0ZWRDb2RlQmxvY2siLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHZhciBmaXJzdENoaWxkID0gbm9kZTIuZmlyc3RDaGlsZDsKICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiRElWIiAmJiBoaWdobGlnaHRSZWdFeHAudGVzdChub2RlMi5jbGFzc05hbWUpICYmIGZpcnN0Q2hpbGQgJiYgZmlyc3RDaGlsZC5ub2RlTmFtZSA9PT0gIlBSRSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMiwgb3B0aW9ucykgewogICAgICB2YXIgY2xhc3NOYW1lID0gbm9kZTIuY2xhc3NOYW1lIHx8ICIiOwogICAgICB2YXIgbGFuZ3VhZ2UgPSAoY2xhc3NOYW1lLm1hdGNoKGhpZ2hsaWdodFJlZ0V4cCkgfHwgW251bGwsICIiXSlbMV07CiAgICAgIHJldHVybiAiXG5cbiIgKyBvcHRpb25zLmZlbmNlICsgbGFuZ3VhZ2UgKyAiXG4iICsgbm9kZTIuZmlyc3RDaGlsZC50ZXh0Q29udGVudCArICJcbiIgKyBvcHRpb25zLmZlbmNlICsgIlxuXG4iOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIHN0cmlrZXRocm91Z2gyKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS5hZGRSdWxlKCJzdHJpa2V0aHJvdWdoIiwgewogICAgZmlsdGVyOiBbImRlbCIsICJzIiwgInN0cmlrZSJdLAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgIHJldHVybiAifiIgKyBjb250ZW50MyArICJ+IjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBpc0hlYWRpbmdSb3codHIyKSB7CiAgdmFyIHBhcmVudE5vZGUgPSB0cjIucGFyZW50Tm9kZTsKICByZXR1cm4gcGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRIRUFEIiB8fCBwYXJlbnROb2RlLmZpcnN0Q2hpbGQgPT09IHRyMiAmJiAocGFyZW50Tm9kZS5ub2RlTmFtZSA9PT0gIlRBQkxFIiB8fCBpc0ZpcnN0VGJvZHkocGFyZW50Tm9kZSkpICYmIGV2ZXJ5Mi5jYWxsKHRyMi5jaGlsZE5vZGVzLCBmdW5jdGlvbihuMTMpIHsKICAgIHJldHVybiBuMTMubm9kZU5hbWUgPT09ICJUSCI7CiAgfSk7Cn0KZnVuY3Rpb24gaXNGaXJzdFRib2R5KGVsZW1lbnQ0KSB7CiAgdmFyIHByZXZpb3VzU2libGluZyA9IGVsZW1lbnQ0LnByZXZpb3VzU2libGluZzsKICByZXR1cm4gZWxlbWVudDQubm9kZU5hbWUgPT09ICJUQk9EWSIgJiYgKCFwcmV2aW91c1NpYmxpbmcgfHwgcHJldmlvdXNTaWJsaW5nLm5vZGVOYW1lID09PSAiVEhFQUQiICYmIC9eXHMqJC9pLnRlc3QocHJldmlvdXNTaWJsaW5nLnRleHRDb250ZW50KSk7Cn0KZnVuY3Rpb24gY2VsbChjb250ZW50Mywgbm9kZTIpIHsKICB2YXIgaW5kZXgyID0gaW5kZXhPZjIuY2FsbChub2RlMi5wYXJlbnROb2RlLmNoaWxkTm9kZXMsIG5vZGUyKTsKICB2YXIgcHJlZml4NCA9ICIgIjsKICBpZiAoaW5kZXgyID09PSAwKSBwcmVmaXg0ID0gInwgIjsKICByZXR1cm4gcHJlZml4NCArIGNvbnRlbnQzICsgIiB8IjsKfQpmdW5jdGlvbiB0YWJsZXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmtlZXAoZnVuY3Rpb24obm9kZTIpIHsKICAgIHJldHVybiBub2RlMi5ub2RlTmFtZSA9PT0gIlRBQkxFIiAmJiAhaXNIZWFkaW5nUm93KG5vZGUyLnJvd3NbMF0pOwogIH0pOwogIGZvciAodmFyIGtleTIgaW4gcnVsZXMyKSB0dXJuZG93blNlcnZpY2UuYWRkUnVsZShrZXkyLCBydWxlczJba2V5Ml0pOwp9CmZ1bmN0aW9uIHRhc2tMaXN0SXRlbXModHVybmRvd25TZXJ2aWNlKSB7CiAgdHVybmRvd25TZXJ2aWNlLmFkZFJ1bGUoInRhc2tMaXN0SXRlbXMiLCB7CiAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgIHJldHVybiBub2RlMi50eXBlID09PSAiY2hlY2tib3giICYmIG5vZGUyLnBhcmVudE5vZGUubm9kZU5hbWUgPT09ICJMSSI7CiAgICB9LAogICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzLCBub2RlMikgewogICAgICByZXR1cm4gKG5vZGUyLmNoZWNrZWQgPyAiW3hdIiA6ICJbIF0iKSArICIgIjsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiBnZm0yKHR1cm5kb3duU2VydmljZSkgewogIHR1cm5kb3duU2VydmljZS51c2UoWwogICAgaGlnaGxpZ2h0ZWRDb2RlQmxvY2ssCiAgICBzdHJpa2V0aHJvdWdoMiwKICAgIHRhYmxlcywKICAgIHRhc2tMaXN0SXRlbXMKICBdKTsKfQp2YXIgaGlnaGxpZ2h0UmVnRXhwLCBpbmRleE9mMiwgZXZlcnkyLCBydWxlczI7CnZhciBpbml0X3R1cm5kb3duX3BsdWdpbl9nZm1fZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS90dXJuZG93bi1wbHVnaW4tZ2ZtQDEuMC4yL25vZGVfbW9kdWxlcy90dXJuZG93bi1wbHVnaW4tZ2ZtL2xpYi90dXJuZG93bi1wbHVnaW4tZ2ZtLmVzLmpzIigpIHsKICAgIGhpZ2hsaWdodFJlZ0V4cCA9IC9oaWdobGlnaHQtKD86dGV4dHxzb3VyY2UpLShbYS16MC05XSspLzsKICAgIGluZGV4T2YyID0gQXJyYXkucHJvdG90eXBlLmluZGV4T2Y7CiAgICBldmVyeTIgPSBBcnJheS5wcm90b3R5cGUuZXZlcnk7CiAgICBydWxlczIgPSB7fTsKICAgIHJ1bGVzMi50YWJsZUNlbGwgPSB7CiAgICAgIGZpbHRlcjogWyJ0aCIsICJ0ZCJdLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIGNlbGwoY29udGVudDMsIG5vZGUyKTsKICAgICAgfQogICAgfTsKICAgIHJ1bGVzMi50YWJsZVJvdyA9IHsKICAgICAgZmlsdGVyOiAidHIiLAogICAgICByZXBsYWNlbWVudDogZnVuY3Rpb24oY29udGVudDMsIG5vZGUyKSB7CiAgICAgICAgdmFyIGJvcmRlckNlbGxzID0gIiI7CiAgICAgICAgdmFyIGFsaWduTWFwID0geyBsZWZ0OiAiOi0tIiwgcmlnaHQ6ICItLToiLCBjZW50ZXI6ICI6LToiIH07CiAgICAgICAgaWYgKGlzSGVhZGluZ1Jvdyhub2RlMikpIHsKICAgICAgICAgIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IG5vZGUyLmNoaWxkTm9kZXMubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgICB2YXIgYm9yZGVyID0gIi0tLSI7CiAgICAgICAgICAgIHZhciBhbGlnbiA9IChub2RlMi5jaGlsZE5vZGVzW2kxMV0uZ2V0QXR0cmlidXRlKCJhbGlnbiIpIHx8ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoYWxpZ24pIGJvcmRlciA9IGFsaWduTWFwW2FsaWduXSB8fCBib3JkZXI7CiAgICAgICAgICAgIGJvcmRlckNlbGxzICs9IGNlbGwoYm9yZGVyLCBub2RlMi5jaGlsZE5vZGVzW2kxMV0pOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gIlxuIiArIGNvbnRlbnQzICsgKGJvcmRlckNlbGxzID8gIlxuIiArIGJvcmRlckNlbGxzIDogIiIpOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlID0gewogICAgICAvLyBPbmx5IGNvbnZlcnQgdGFibGVzIHdpdGggYSBoZWFkaW5nIHJvdy4KICAgICAgLy8gVGFibGVzIHdpdGggbm8gaGVhZGluZyByb3cgYXJlIGtlcHQgdXNpbmcgYGtlZXBgIChzZWUgYmVsb3cpLgogICAgICBmaWx0ZXI6IGZ1bmN0aW9uKG5vZGUyKSB7CiAgICAgICAgcmV0dXJuIG5vZGUyLm5vZGVOYW1lID09PSAiVEFCTEUiICYmIGlzSGVhZGluZ1Jvdyhub2RlMi5yb3dzWzBdKTsKICAgICAgfSwKICAgICAgcmVwbGFjZW1lbnQ6IGZ1bmN0aW9uKGNvbnRlbnQzKSB7CiAgICAgICAgY29udGVudDMgPSBjb250ZW50My5yZXBsYWNlKCJcblxuIiwgIlxuIik7CiAgICAgICAgcmV0dXJuICJcblxuIiArIGNvbnRlbnQzICsgIlxuXG4iOwogICAgICB9CiAgICB9OwogICAgcnVsZXMyLnRhYmxlU2VjdGlvbiA9IHsKICAgICAgZmlsdGVyOiBbInRoZWFkIiwgInRib2R5IiwgInRmb290Il0sCiAgICAgIHJlcGxhY2VtZW50OiBmdW5jdGlvbihjb250ZW50MykgewogICAgICAgIHJldHVybiBjb250ZW50MzsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9zbWFydG1hcmtkb3duLnBsdWdpbnMuanMKdmFyIHNtYXJ0eWFtbDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24ucGx1Z2lucy5qcyIoKSB7CiAgICBzbWFydHlhbWwgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90czIoKSwgMSk7CiAgICBpbml0X3VuaWZpZWQoKTsKICAgIGluaXRfcmVtYXJrX2dmbSgpOwogICAgaW5pdF9yZW1hcmtfcGFyc2UoKTsKICAgIGluaXRfcmVtYXJrX2Zyb250bWF0dGVyKCk7CiAgICBpbml0X3JlbWFya19odG1sKCk7CiAgICBpbml0X3JlbWFya19zdHJpbmdpZnkoKTsKICAgIGluaXRfdHVybmRvd25fYnJvd3Nlcl9lcygpOwogICAgaW5pdF90dXJuZG93bl9wbHVnaW5fZ2ZtX2VzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydG1hcmtkb3duQDMuMC4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydG1hcmtkb3duL2Rpc3RfdHMvc21hcnRtYXJrZG93bi5jbGFzc2VzLm1kcGFyc2VkcmVzdWx0LmpzCnZhciBNZFBhcnNlZFJlc3VsdDsKdmFyIGluaXRfc21hcnRtYXJrZG93bl9jbGFzc2VzX21kcGFyc2VkcmVzdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL3NtYXJ0bWFya2Rvd24uY2xhc3Nlcy5tZHBhcnNlZHJlc3VsdC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fcGx1Z2lucygpOwogICAgTWRQYXJzZWRSZXN1bHQgPSBjbGFzcyBfTWRQYXJzZWRSZXN1bHQgewogICAgICBzdGF0aWMgYXN5bmMgY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgbWRQYXJzZWRSZXN1bHQgPSBuZXcgX01kUGFyc2VkUmVzdWx0KCk7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQ7CiAgICAgIH0KICAgICAgYXN5bmMgdXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgbGV0IHlhbWxTdHJpbmc7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdW5pZmllZCgpLnVzZShyZW1hcmtQYXJzZSkudXNlKHJlbWFya0dmbSkudXNlKHJlbWFya0Zyb250bWF0dGVyLCBbInlhbWwiLCAidG9tbCJdKS51c2UocmVtYXJrU3RyaW5naWZ5KS51c2UocmVtYXJrSHRtbCkudXNlKCgpID0+ICh0cmVlKSA9PiB7CiAgICAgICAgICBjb25zb2xlLmRpcih0cmVlKTsKICAgICAgICAgIGNvbnN0IHlhbWxDaGlsZCA9IHRyZWUuY2hpbGRyZW4uZmluZCgob2JqZWN0QXJnKSA9PiBvYmplY3RBcmcudHlwZSA9PT0gInlhbWwiKTsKICAgICAgICAgIGlmICh5YW1sQ2hpbGQpIHsKICAgICAgICAgICAgeWFtbFN0cmluZyA9IHlhbWxDaGlsZC52YWx1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5wcm9jZXNzKG1kU3RyaW5nQXJnKTsKICAgICAgICB0aGlzLmh0bWwgPSByZXN1bHQudG9TdHJpbmcoKTsKICAgICAgICBpZiAoeWFtbFN0cmluZykgewogICAgICAgICAgdGhpcy5mcm9udG1hdHRlckRhdGEgPSBhd2FpdCBzbWFydHlhbWwueWFtbFN0cmluZ1RvT2JqZWN0KHlhbWxTdHJpbmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmZyb250bWF0dGVyRGF0YSA9IHt9OwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0bWFya2Rvd25AMy4wLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0bWFya2Rvd24vZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMTcgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMTcsIHsKICBTbWFydE1hcmtkb3duOiAoKSA9PiBTbWFydE1hcmtkb3duCn0pOwp2YXIgU21hcnRNYXJrZG93bjsKdmFyIGluaXRfZGlzdF90czE3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRtYXJrZG93bkAzLjAuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRtYXJrZG93bi9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc21hcnRtYXJrZG93bl9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0bWFya2Rvd25fY2xhc3Nlc19tZHBhcnNlZHJlc3VsdCgpOwogICAgU21hcnRNYXJrZG93biA9IGNsYXNzIF9TbWFydE1hcmtkb3duIHsKICAgICAgc3RhdGljIGFzeW5jIGVhc3lNYXJrZG93blRvSHRtbChtZFN0cmluZ0FyZykgewogICAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBfU21hcnRNYXJrZG93bigpOwogICAgICAgIGNvbnN0IG1kUGFyc2VkUmVzdWx0ID0gYXdhaXQgc21hcnRtYXJrZG93bkluc3RhbmNlLmdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gbWRQYXJzZWRSZXN1bHQuaHRtbDsKICAgICAgfQogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgfQogICAgICAvKioKICAgICAgICogY3JlYXRlIGEgTWRQYXJzZWRSZXN1bHQgZnJvbSBtYXJrZG93bgogICAgICAgKiBAcGFyYW0gbWRTdHJpbmdBcmcKICAgICAgICovCiAgICAgIGFzeW5jIGdldE1kUGFyc2VkUmVzdWx0RnJvbU1hcmtkb3duKG1kU3RyaW5nQXJnKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgTWRQYXJzZWRSZXN1bHQuY3JlYXRlRnJvbU1hcmtkb3duU3RyaW5nKG1kU3RyaW5nQXJnKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIGh0bWxUb01hcmtkb3duKGh0bWxTdHJpbmcpIHsKICAgICAgICBjb25zdCB0dXJuZG93bkluc3RhbmNlID0gbmV3IHR1cm5kb3duX2Jyb3dzZXJfZXNfZGVmYXVsdCh7CiAgICAgICAgICBoZWFkaW5nU3R5bGU6ICJhdHgiLAogICAgICAgICAgY29kZUJsb2NrU3R5bGU6ICJmZW5jZWQiCiAgICAgICAgfSk7CiAgICAgICAgdHVybmRvd25JbnN0YW5jZS51c2UodHVybmRvd25fcGx1Z2luX2dmbV9lc19leHBvcnRzLmdmbSk7CiAgICAgICAgcmV0dXJuIHR1cm5kb3duSW5zdGFuY2UudHVybmRvd24oaHRtbFN0cmluZyk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcwp2YXIgcmVxdWlyZV9kaXN0ID0gX19jb21tb25KUyh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9wYXRoLXRvLXJlZ2V4cEA4LjMuMC9ub2RlX21vZHVsZXMvcGF0aC10by1yZWdleHAvZGlzdC9pbmRleC5qcyIoZXhwb3J0cykgewogICAgInVzZSBzdHJpY3QiOwogICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGV4cG9ydHMsICJfX2VzTW9kdWxlIiwgeyB2YWx1ZTogdHJ1ZSB9KTsKICAgIGV4cG9ydHMuUGF0aEVycm9yID0gZXhwb3J0cy5Ub2tlbkRhdGEgPSB2b2lkIDA7CiAgICBleHBvcnRzLnBhcnNlID0gcGFyc2U4OwogICAgZXhwb3J0cy5jb21waWxlID0gY29tcGlsZTI7CiAgICBleHBvcnRzLm1hdGNoID0gbWF0Y2gyOwogICAgZXhwb3J0cy5wYXRoVG9SZWdleHAgPSBwYXRoVG9SZWdleHA7CiAgICBleHBvcnRzLnN0cmluZ2lmeSA9IHN0cmluZ2lmeTU7CiAgICB2YXIgREVGQVVMVF9ERUxJTUlURVIgPSAiLyI7CiAgICB2YXIgTk9PUF9WQUxVRSA9ICh2YWx1ZTIpID0+IHZhbHVlMjsKICAgIHZhciBJRF9TVEFSVCA9IC9eWyRfXHB7SURfU3RhcnR9XSQvdTsKICAgIHZhciBJRF9DT05USU5VRSA9IC9eWyRcdTIwMGNcdTIwMGRccHtJRF9Db250aW51ZX1dJC91OwogICAgdmFyIFNJTVBMRV9UT0tFTlMgPSB7CiAgICAgIC8vIEdyb3Vwcy4KICAgICAgInsiOiAieyIsCiAgICAgICJ9IjogIn0iLAogICAgICAvLyBSZXNlcnZlZC4KICAgICAgIigiOiAiKCIsCiAgICAgICIpIjogIikiLAogICAgICAiWyI6ICJbIiwKICAgICAgIl0iOiAiXSIsCiAgICAgICIrIjogIisiLAogICAgICAiPyI6ICI/IiwKICAgICAgIiEiOiAiISIKICAgIH07CiAgICBmdW5jdGlvbiBlc2NhcGVUZXh0KHN0cikgewogICAgICByZXR1cm4gc3RyLnJlcGxhY2UoL1t7fSgpXFtcXSs/IToqXFxdL2csICJcXCQmIik7CiAgICB9CiAgICBmdW5jdGlvbiBlc2NhcGUoc3RyKSB7CiAgICAgIHJldHVybiBzdHIucmVwbGFjZSgvWy4rKj9eJHt9KClbXF18L1xcXS9nLCAiXFwkJiIpOwogICAgfQogICAgdmFyIFRva2VuRGF0YSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodG9rZW5zLCBvcmlnaW5hbFBhdGgpIHsKICAgICAgICB0aGlzLnRva2VucyA9IHRva2VuczsKICAgICAgICB0aGlzLm9yaWdpbmFsUGF0aCA9IG9yaWdpbmFsUGF0aDsKICAgICAgfQogICAgfTsKICAgIGV4cG9ydHMuVG9rZW5EYXRhID0gVG9rZW5EYXRhOwogICAgdmFyIFBhdGhFcnJvciA9IGNsYXNzIGV4dGVuZHMgVHlwZUVycm9yIHsKICAgICAgY29uc3RydWN0b3IobWVzc2FnZTIsIG9yaWdpbmFsUGF0aCkgewogICAgICAgIGxldCB0ZXh0OSA9IG1lc3NhZ2UyOwogICAgICAgIGlmIChvcmlnaW5hbFBhdGgpCiAgICAgICAgICB0ZXh0OSArPSBgOiAke29yaWdpbmFsUGF0aH1gOwogICAgICAgIHRleHQ5ICs9IGA7IHZpc2l0IGh0dHBzOi8vZ2l0Lm5ldy9wYXRoVG9SZWdleHBFcnJvciBmb3IgaW5mb2A7CiAgICAgICAgc3VwZXIodGV4dDkpOwogICAgICAgIHRoaXMub3JpZ2luYWxQYXRoID0gb3JpZ2luYWxQYXRoOwogICAgICB9CiAgICB9OwogICAgZXhwb3J0cy5QYXRoRXJyb3IgPSBQYXRoRXJyb3I7CiAgICBmdW5jdGlvbiBwYXJzZTgoc3RyLCBvcHRpb25zID0ge30pIHsKICAgICAgY29uc3QgeyBlbmNvZGVQYXRoID0gTk9PUF9WQUxVRSB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgY2hhcnMgPSBbLi4uc3RyXTsKICAgICAgY29uc3QgdG9rZW5zID0gW107CiAgICAgIGxldCBpbmRleDIgPSAwOwogICAgICBsZXQgcG9zID0gMDsKICAgICAgZnVuY3Rpb24gbmFtZSgpIHsKICAgICAgICBsZXQgdmFsdWUyID0gIiI7CiAgICAgICAgaWYgKElEX1NUQVJULnRlc3QoY2hhcnNbaW5kZXgyXSkpIHsKICAgICAgICAgIGRvIHsKICAgICAgICAgICAgdmFsdWUyICs9IGNoYXJzW2luZGV4MisrXTsKICAgICAgICAgIH0gd2hpbGUgKElEX0NPTlRJTlVFLnRlc3QoY2hhcnNbaW5kZXgyXSkpOwogICAgICAgIH0gZWxzZSBpZiAoY2hhcnNbaW5kZXgyXSA9PT0gJyInKSB7CiAgICAgICAgICBsZXQgcXVvdGVTdGFydCA9IGluZGV4MjsKICAgICAgICAgIHdoaWxlIChpbmRleDIrKyA8IGNoYXJzLmxlbmd0aCkgewogICAgICAgICAgICBpZiAoY2hhcnNbaW5kZXgyXSA9PT0gJyInKSB7CiAgICAgICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICAgICAgcXVvdGVTdGFydCA9IDA7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKGNoYXJzW2luZGV4Ml0gPT09ICJcXCIpCiAgICAgICAgICAgICAgaW5kZXgyKys7CiAgICAgICAgICAgIHZhbHVlMiArPSBjaGFyc1tpbmRleDJdOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHF1b3RlU3RhcnQpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgVW50ZXJtaW5hdGVkIHF1b3RlIGF0IGluZGV4ICR7cXVvdGVTdGFydH1gLCBzdHIpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgdGhyb3cgbmV3IFBhdGhFcnJvcihgTWlzc2luZyBwYXJhbWV0ZXIgbmFtZSBhdCBpbmRleCAke2luZGV4Mn1gLCBzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdmFsdWUyOwogICAgICB9CiAgICAgIHdoaWxlIChpbmRleDIgPCBjaGFycy5sZW5ndGgpIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBjaGFyc1tpbmRleDJdOwogICAgICAgIGNvbnN0IHR5cGU1ID0gU0lNUExFX1RPS0VOU1t2YWx1ZTJdOwogICAgICAgIGlmICh0eXBlNSkgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiB0eXBlNSwgaW5kZXg6IGluZGV4MisrLCB2YWx1ZTogdmFsdWUyIH0pOwogICAgICAgIH0gZWxzZSBpZiAodmFsdWUyID09PSAiXFwiKSB7CiAgICAgICAgICB0b2tlbnMucHVzaCh7IHR5cGU6ICJlc2NhcGUiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBjaGFyc1tpbmRleDIrK10gfSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgPT09ICI6IikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAicGFyYW0iLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBuYW1lKCkgfSk7CiAgICAgICAgfSBlbHNlIGlmICh2YWx1ZTIgPT09ICIqIikgewogICAgICAgICAgdG9rZW5zLnB1c2goeyB0eXBlOiAid2lsZGNhcmQiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiBuYW1lKCkgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogImNoYXIiLCBpbmRleDogaW5kZXgyKyssIHZhbHVlOiB2YWx1ZTIgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRva2Vucy5wdXNoKHsgdHlwZTogImVuZCIsIGluZGV4OiBpbmRleDIsIHZhbHVlOiAiIiB9KTsKICAgICAgZnVuY3Rpb24gY29uc3VtZVVudGlsKGVuZFR5cGUpIHsKICAgICAgICBjb25zdCBvdXRwdXQgPSBbXTsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgY29uc3QgdG9rZW4gPSB0b2tlbnNbcG9zKytdOwogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09IGVuZFR5cGUpCiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJjaGFyIiB8fCB0b2tlbi50eXBlID09PSAiZXNjYXBlIikgewogICAgICAgICAgICBsZXQgcGF0aDIgPSB0b2tlbi52YWx1ZTsKICAgICAgICAgICAgbGV0IGN1ciA9IHRva2Vuc1twb3NdOwogICAgICAgICAgICB3aGlsZSAoY3VyLnR5cGUgPT09ICJjaGFyIiB8fCBjdXIudHlwZSA9PT0gImVzY2FwZSIpIHsKICAgICAgICAgICAgICBwYXRoMiArPSBjdXIudmFsdWU7CiAgICAgICAgICAgICAgY3VyID0gdG9rZW5zWysrcG9zXTsKICAgICAgICAgICAgfQogICAgICAgICAgICBvdXRwdXQucHVzaCh7CiAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgIHZhbHVlOiBlbmNvZGVQYXRoKHBhdGgyKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInBhcmFtIiB8fCB0b2tlbi50eXBlID09PSAid2lsZGNhcmQiKSB7CiAgICAgICAgICAgIG91dHB1dC5wdXNoKHsKICAgICAgICAgICAgICB0eXBlOiB0b2tlbi50eXBlLAogICAgICAgICAgICAgIG5hbWU6IHRva2VuLnZhbHVlCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAieyIpIHsKICAgICAgICAgICAgb3V0cHV0LnB1c2goewogICAgICAgICAgICAgIHR5cGU6ICJncm91cCIsCiAgICAgICAgICAgICAgdG9rZW5zOiBjb25zdW1lVW50aWwoIn0iKQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBVbmV4cGVjdGVkICR7dG9rZW4udHlwZX0gYXQgaW5kZXggJHt0b2tlbi5pbmRleH0sIGV4cGVjdGVkICR7ZW5kVHlwZX1gLCBzdHIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gb3V0cHV0OwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVG9rZW5EYXRhKGNvbnN1bWVVbnRpbCgiZW5kIiksIHN0cik7CiAgICB9CiAgICBmdW5jdGlvbiBjb21waWxlMihwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZW5jb2RlOiBlbmNvZGUyID0gZW5jb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgZGF0YSA9IHR5cGVvZiBwYXRoMiA9PT0gIm9iamVjdCIgPyBwYXRoMiA6IHBhcnNlOChwYXRoMiwgb3B0aW9ucyk7CiAgICAgIGNvbnN0IGZuID0gdG9rZW5zVG9GdW5jdGlvbihkYXRhLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhdGgzKHBhcmFtczIgPSB7fSkgewogICAgICAgIGNvbnN0IFtwYXRoNCwgLi4ubWlzc2luZ10gPSBmbihwYXJhbXMyKTsKICAgICAgICBpZiAobWlzc2luZy5sZW5ndGgpIHsKICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYE1pc3NpbmcgcGFyYW1ldGVyczogJHttaXNzaW5nLmpvaW4oIiwgIil9YCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBwYXRoNDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRva2Vuc1RvRnVuY3Rpb24odG9rZW5zLCBkZWxpbWl0ZXIsIGVuY29kZTIpIHsKICAgICAgY29uc3QgZW5jb2RlcnMgPSB0b2tlbnMubWFwKCh0b2tlbikgPT4gdG9rZW5Ub0Z1bmN0aW9uKHRva2VuLCBkZWxpbWl0ZXIsIGVuY29kZTIpKTsKICAgICAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gWyIiXTsKICAgICAgICBmb3IgKGNvbnN0IGVuY29kZXIyIG9mIGVuY29kZXJzKSB7CiAgICAgICAgICBjb25zdCBbdmFsdWUyLCAuLi5leHRyYXNdID0gZW5jb2RlcjIoZGF0YSk7CiAgICAgICAgICByZXN1bHRbMF0gKz0gdmFsdWUyOwogICAgICAgICAgcmVzdWx0LnB1c2goLi4uZXh0cmFzKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHRva2VuVG9GdW5jdGlvbih0b2tlbiwgZGVsaW1pdGVyLCBlbmNvZGUyKSB7CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAidGV4dCIpCiAgICAgICAgcmV0dXJuICgpID0+IFt0b2tlbi52YWx1ZV07CiAgICAgIGlmICh0b2tlbi50eXBlID09PSAiZ3JvdXAiKSB7CiAgICAgICAgY29uc3QgZm4gPSB0b2tlbnNUb0Z1bmN0aW9uKHRva2VuLnRva2VucywgZGVsaW1pdGVyLCBlbmNvZGUyKTsKICAgICAgICByZXR1cm4gKGRhdGEpID0+IHsKICAgICAgICAgIGNvbnN0IFt2YWx1ZTIsIC4uLm1pc3NpbmddID0gZm4oZGF0YSk7CiAgICAgICAgICBpZiAoIW1pc3NpbmcubGVuZ3RoKQogICAgICAgICAgICByZXR1cm4gW3ZhbHVlMl07CiAgICAgICAgICByZXR1cm4gWyIiXTsKICAgICAgICB9OwogICAgICB9CiAgICAgIGNvbnN0IGVuY29kZVZhbHVlID0gZW5jb2RlMiB8fCBOT09QX1ZBTFVFOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIiAmJiBlbmNvZGUyICE9PSBmYWxzZSkgewogICAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZGF0YVt0b2tlbi5uYW1lXTsKICAgICAgICAgIGlmICh2YWx1ZTIgPT0gbnVsbCkKICAgICAgICAgICAgcmV0dXJuIFsiIiwgdG9rZW4ubmFtZV07CiAgICAgICAgICBpZiAoIUFycmF5LmlzQXJyYXkodmFsdWUyKSB8fCB2YWx1ZTIubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3Rva2VuLm5hbWV9IiB0byBiZSBhIG5vbi1lbXB0eSBhcnJheWApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIFsKICAgICAgICAgICAgdmFsdWUyLm1hcCgodmFsdWUzLCBpbmRleDIpID0+IHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIHZhbHVlMyAhPT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoYEV4cGVjdGVkICIke3Rva2VuLm5hbWV9LyR7aW5kZXgyfSIgdG8gYmUgYSBzdHJpbmdgKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgcmV0dXJuIGVuY29kZVZhbHVlKHZhbHVlMyk7CiAgICAgICAgICAgIH0pLmpvaW4oZGVsaW1pdGVyKQogICAgICAgICAgXTsKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiAoZGF0YSkgPT4gewogICAgICAgIGNvbnN0IHZhbHVlMiA9IGRhdGFbdG9rZW4ubmFtZV07CiAgICAgICAgaWYgKHZhbHVlMiA9PSBudWxsKQogICAgICAgICAgcmV0dXJuIFsiIiwgdG9rZW4ubmFtZV07CiAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZTIgIT09ICJzdHJpbmciKSB7CiAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBFeHBlY3RlZCAiJHt0b2tlbi5uYW1lfSIgdG8gYmUgYSBzdHJpbmdgKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIFtlbmNvZGVWYWx1ZSh2YWx1ZTIpXTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIG1hdGNoMihwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZGVjb2RlOiBkZWNvZGUyID0gZGVjb2RlVVJJQ29tcG9uZW50LCBkZWxpbWl0ZXIgPSBERUZBVUxUX0RFTElNSVRFUiB9ID0gb3B0aW9uczsKICAgICAgY29uc3QgeyByZWdleHAsIGtleXM6IGtleXMyIH0gPSBwYXRoVG9SZWdleHAocGF0aDIsIG9wdGlvbnMpOwogICAgICBjb25zdCBkZWNvZGVycyA9IGtleXMyLm1hcCgoa2V5MikgPT4gewogICAgICAgIGlmIChkZWNvZGUyID09PSBmYWxzZSkKICAgICAgICAgIHJldHVybiBOT09QX1ZBTFVFOwogICAgICAgIGlmIChrZXkyLnR5cGUgPT09ICJwYXJhbSIpCiAgICAgICAgICByZXR1cm4gZGVjb2RlMjsKICAgICAgICByZXR1cm4gKHZhbHVlMikgPT4gdmFsdWUyLnNwbGl0KGRlbGltaXRlcikubWFwKGRlY29kZTIpOwogICAgICB9KTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uIG1hdGNoMyhpbnB1dCkgewogICAgICAgIGNvbnN0IG02ID0gcmVnZXhwLmV4ZWMoaW5wdXQpOwogICAgICAgIGlmICghbTYpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgY29uc3QgcGF0aDMgPSBtNlswXTsKICAgICAgICBjb25zdCBwYXJhbXMyID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgICAgICAgZm9yIChsZXQgaTExID0gMTsgaTExIDwgbTYubGVuZ3RoOyBpMTErKykgewogICAgICAgICAgaWYgKG02W2kxMV0gPT09IHZvaWQgMCkKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICBjb25zdCBrZXkyID0ga2V5czJbaTExIC0gMV07CiAgICAgICAgICBjb25zdCBkZWNvZGVyMiA9IGRlY29kZXJzW2kxMSAtIDFdOwogICAgICAgICAgcGFyYW1zMltrZXkyLm5hbWVdID0gZGVjb2RlcjIobTZbaTExXSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHBhdGg6IHBhdGgzLCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfTsKICAgIH0KICAgIGZ1bmN0aW9uIHBhdGhUb1JlZ2V4cChwYXRoMiwgb3B0aW9ucyA9IHt9KSB7CiAgICAgIGNvbnN0IHsgZGVsaW1pdGVyID0gREVGQVVMVF9ERUxJTUlURVIsIGVuZDogZW5kMyA9IHRydWUsIHNlbnNpdGl2ZSA9IGZhbHNlLCB0cmFpbGluZyA9IHRydWUgfSA9IG9wdGlvbnM7CiAgICAgIGNvbnN0IGtleXMyID0gW107CiAgICAgIGNvbnN0IGZsYWdzID0gc2Vuc2l0aXZlID8gIiIgOiAiaSI7CiAgICAgIGNvbnN0IHNvdXJjZXMgPSBbXTsKICAgICAgZm9yIChjb25zdCBpbnB1dCBvZiBwYXRoc1RvQXJyYXkocGF0aDIsIFtdKSkgewogICAgICAgIGNvbnN0IGRhdGEgPSB0eXBlb2YgaW5wdXQgPT09ICJvYmplY3QiID8gaW5wdXQgOiBwYXJzZTgoaW5wdXQsIG9wdGlvbnMpOwogICAgICAgIGZvciAoY29uc3QgdG9rZW5zIG9mIGZsYXR0ZW4oZGF0YS50b2tlbnMsIDAsIFtdKSkgewogICAgICAgICAgc291cmNlcy5wdXNoKHRvUmVnRXhwU291cmNlKHRva2VucywgZGVsaW1pdGVyLCBrZXlzMiwgZGF0YS5vcmlnaW5hbFBhdGgpKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgbGV0IHBhdHRlcm4gPSBgXig/OiR7c291cmNlcy5qb2luKCJ8Iil9KWA7CiAgICAgIGlmICh0cmFpbGluZykKICAgICAgICBwYXR0ZXJuICs9IGAoPzoke2VzY2FwZShkZWxpbWl0ZXIpfSQpP2A7CiAgICAgIHBhdHRlcm4gKz0gZW5kMyA/ICIkIiA6IGAoPz0ke2VzY2FwZShkZWxpbWl0ZXIpfXwkKWA7CiAgICAgIGNvbnN0IHJlZ2V4cCA9IG5ldyBSZWdFeHAocGF0dGVybiwgZmxhZ3MpOwogICAgICByZXR1cm4geyByZWdleHAsIGtleXM6IGtleXMyIH07CiAgICB9CiAgICBmdW5jdGlvbiBwYXRoc1RvQXJyYXkocGF0aHMsIGluaXQpIHsKICAgICAgaWYgKEFycmF5LmlzQXJyYXkocGF0aHMpKSB7CiAgICAgICAgZm9yIChjb25zdCBwNyBvZiBwYXRocykKICAgICAgICAgIHBhdGhzVG9BcnJheShwNywgaW5pdCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5pdC5wdXNoKHBhdGhzKTsKICAgICAgfQogICAgICByZXR1cm4gaW5pdDsKICAgIH0KICAgIGZ1bmN0aW9uKiBmbGF0dGVuKHRva2VucywgaW5kZXgyLCBpbml0KSB7CiAgICAgIGlmIChpbmRleDIgPT09IHRva2Vucy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4geWllbGQgaW5pdDsKICAgICAgfQogICAgICBjb25zdCB0b2tlbiA9IHRva2Vuc1tpbmRleDJdOwogICAgICBpZiAodG9rZW4udHlwZSA9PT0gImdyb3VwIikgewogICAgICAgIGZvciAoY29uc3Qgc2VxIG9mIGZsYXR0ZW4odG9rZW4udG9rZW5zLCAwLCBpbml0LnNsaWNlKCkpKSB7CiAgICAgICAgICB5aWVsZCogZmxhdHRlbih0b2tlbnMsIGluZGV4MiArIDEsIHNlcSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIGluaXQucHVzaCh0b2tlbik7CiAgICAgIH0KICAgICAgeWllbGQqIGZsYXR0ZW4odG9rZW5zLCBpbmRleDIgKyAxLCBpbml0KTsKICAgIH0KICAgIGZ1bmN0aW9uIHRvUmVnRXhwU291cmNlKHRva2VucywgZGVsaW1pdGVyLCBrZXlzMiwgb3JpZ2luYWxQYXRoKSB7CiAgICAgIGxldCByZXN1bHQgPSAiIjsKICAgICAgbGV0IGJhY2t0cmFjayA9ICIiOwogICAgICBsZXQgaXNTYWZlU2VnbWVudFBhcmFtID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0b2tlbiBvZiB0b2tlbnMpIHsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICByZXN1bHQgKz0gZXNjYXBlKHRva2VuLnZhbHVlKTsKICAgICAgICAgIGJhY2t0cmFjayArPSB0b2tlbi52YWx1ZTsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSB8fCAoaXNTYWZlU2VnbWVudFBhcmFtID0gdG9rZW4udmFsdWUuaW5jbHVkZXMoZGVsaW1pdGVyKSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIgfHwgdG9rZW4udHlwZSA9PT0gIndpbGRjYXJkIikgewogICAgICAgICAgaWYgKCFpc1NhZmVTZWdtZW50UGFyYW0gJiYgIWJhY2t0cmFjaykgewogICAgICAgICAgICB0aHJvdyBuZXcgUGF0aEVycm9yKGBNaXNzaW5nIHRleHQgYmVmb3JlICIke3Rva2VuLm5hbWV9IiAke3Rva2VuLnR5cGV9YCwgb3JpZ2luYWxQYXRoKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0b2tlbi50eXBlID09PSAicGFyYW0iKSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKCR7bmVnYXRlKGRlbGltaXRlciwgaXNTYWZlU2VnbWVudFBhcmFtID8gIiIgOiBiYWNrdHJhY2spfSspYDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdCArPSBgKFtcXHNcXFNdKylgOwogICAgICAgICAgfQogICAgICAgICAga2V5czIucHVzaCh0b2tlbik7CiAgICAgICAgICBiYWNrdHJhY2sgPSAiIjsKICAgICAgICAgIGlzU2FmZVNlZ21lbnRQYXJhbSA9IGZhbHNlOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBmdW5jdGlvbiBuZWdhdGUoZGVsaW1pdGVyLCBiYWNrdHJhY2spIHsKICAgICAgaWYgKGJhY2t0cmFjay5sZW5ndGggPCAyKSB7CiAgICAgICAgaWYgKGRlbGltaXRlci5sZW5ndGggPCAyKQogICAgICAgICAgcmV0dXJuIGBbXiR7ZXNjYXBlKGRlbGltaXRlciArIGJhY2t0cmFjayl9XWA7CiAgICAgICAgcmV0dXJuIGAoPzooPyEke2VzY2FwZShkZWxpbWl0ZXIpfSlbXiR7ZXNjYXBlKGJhY2t0cmFjayl9XSlgOwogICAgICB9CiAgICAgIGlmIChkZWxpbWl0ZXIubGVuZ3RoIDwgMikgewogICAgICAgIHJldHVybiBgKD86KD8hJHtlc2NhcGUoYmFja3RyYWNrKX0pW14ke2VzY2FwZShkZWxpbWl0ZXIpfV0pYDsKICAgICAgfQogICAgICByZXR1cm4gYCg/Oig/ISR7ZXNjYXBlKGJhY2t0cmFjayl9fCR7ZXNjYXBlKGRlbGltaXRlcil9KVtcXHNcXFNdKWA7CiAgICB9CiAgICBmdW5jdGlvbiBzdHJpbmdpZnlUb2tlbnModG9rZW5zKSB7CiAgICAgIGxldCB2YWx1ZTIgPSAiIjsKICAgICAgbGV0IGkxMSA9IDA7CiAgICAgIGZ1bmN0aW9uIG5hbWUodmFsdWUzKSB7CiAgICAgICAgY29uc3QgaXNTYWZlID0gaXNOYW1lU2FmZSh2YWx1ZTMpICYmIGlzTmV4dE5hbWVTYWZlKHRva2Vuc1tpMTFdKTsKICAgICAgICByZXR1cm4gaXNTYWZlID8gdmFsdWUzIDogSlNPTi5zdHJpbmdpZnkodmFsdWUzKTsKICAgICAgfQogICAgICB3aGlsZSAoaTExIDwgdG9rZW5zLmxlbmd0aCkgewogICAgICAgIGNvbnN0IHRva2VuID0gdG9rZW5zW2kxMSsrXTsKICAgICAgICBpZiAodG9rZW4udHlwZSA9PT0gInRleHQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gZXNjYXBlVGV4dCh0b2tlbi52YWx1ZSk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJncm91cCIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgeyR7c3RyaW5naWZ5VG9rZW5zKHRva2VuLnRva2Vucyl9fWA7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgaWYgKHRva2VuLnR5cGUgPT09ICJwYXJhbSIpIHsKICAgICAgICAgIHZhbHVlMiArPSBgOiR7bmFtZSh0b2tlbi5uYW1lKX1gOwogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGlmICh0b2tlbi50eXBlID09PSAid2lsZGNhcmQiKSB7CiAgICAgICAgICB2YWx1ZTIgKz0gYCoke25hbWUodG9rZW4ubmFtZSl9YDsKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIH0KICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKGBVbmtub3duIHRva2VuIHR5cGU6ICR7dG9rZW4udHlwZX1gKTsKICAgICAgfQogICAgICByZXR1cm4gdmFsdWUyOwogICAgfQogICAgZnVuY3Rpb24gc3RyaW5naWZ5NShkYXRhKSB7CiAgICAgIHJldHVybiBzdHJpbmdpZnlUb2tlbnMoZGF0YS50b2tlbnMpOwogICAgfQogICAgZnVuY3Rpb24gaXNOYW1lU2FmZShuYW1lKSB7CiAgICAgIGNvbnN0IFtmaXJzdDIsIC4uLnJlc3RdID0gbmFtZTsKICAgICAgcmV0dXJuIElEX1NUQVJULnRlc3QoZmlyc3QyKSAmJiByZXN0LmV2ZXJ5KChjaGFyKSA9PiBJRF9DT05USU5VRS50ZXN0KGNoYXIpKTsKICAgIH0KICAgIGZ1bmN0aW9uIGlzTmV4dE5hbWVTYWZlKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiAmJiB0b2tlbi50eXBlID09PSAidGV4dCIpCiAgICAgICAgcmV0dXJuICFJRF9DT05USU5VRS50ZXN0KHRva2VuLnZhbHVlWzBdKTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5wbHVnaW5zLmpzCnZhciBwYXRoVG9SZWdFeHA7CnZhciBpbml0X3NtYXJ0cm91dGVyX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czcoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIHBhdGhUb1JlZ0V4cCA9IF9fdG9FU00ocmVxdWlyZV9kaXN0KCksIDEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvc21hcnRyb3V0ZXIuY2xhc3Nlcy5xdWVyeXBhcmFtcy5qcwp2YXIgUXVlcnlQYXJhbXM7CnZhciBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfcXVlcnlwYXJhbXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHJvdXRlckAxLjMuMy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRyb3V0ZXIvZGlzdF90cy9zbWFydHJvdXRlci5jbGFzc2VzLnF1ZXJ5cGFyYW1zLmpzIigpIHsKICAgIGluaXRfc21hcnRyb3V0ZXJfcGx1Z2lucygpOwogICAgUXVlcnlQYXJhbXMgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB9CiAgICAgIGdldEFsbEFzT2JqZWN0KCkgewogICAgICAgIGNvbnN0IHVybFNlYXJjaFBhcmFtcyA9IG5ldyBVUkxTZWFyY2hQYXJhbXMod2luZG93LmxvY2F0aW9uLnNlYXJjaCk7CiAgICAgICAgcmV0dXJuIE9iamVjdC5mcm9tRW50cmllcyh1cmxTZWFyY2hQYXJhbXMuZW50cmllcygpKTsKICAgICAgfQogICAgICBzZXRRdWVyeVBhcmFtKHF1ZXJ5S2V5QXJnLCBxdWVyeUNvbnRlbnRBcmcsIHB1c2hPclJlcGxhY2VBcmcgPSAicmVwbGFjZSIpIHsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHF1ZXJ5UGFyYW1zLnNldChxdWVyeUtleUFyZywgcXVlcnlDb250ZW50QXJnKTsKICAgICAgICBwdXNoT3JSZXBsYWNlQXJnID09PSAicHVzaCIgPyBoaXN0b3J5LnB1c2hTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKSA6IGhpc3RvcnkucmVwbGFjZVN0YXRlKG51bGwsIG51bGwsICI/IiArIHF1ZXJ5UGFyYW1zLnRvU3RyaW5nKCkpOwogICAgICB9CiAgICAgIGRlbGV0ZVF1ZXJ5UGFyYW0ocXVlcnlLZXlBcmcsIHB1c2hPclJlcGxhY2VBcmcgPSAicmVwbGFjZSIpIHsKICAgICAgICB2YXIgcXVlcnlQYXJhbXMgPSBuZXcgVVJMU2VhcmNoUGFyYW1zKHdpbmRvdy5sb2NhdGlvbi5zZWFyY2gpOwogICAgICAgIHF1ZXJ5UGFyYW1zLmRlbGV0ZShxdWVyeUtleUFyZyk7CiAgICAgICAgcHVzaE9yUmVwbGFjZUFyZyA9PT0gInB1c2giID8gaGlzdG9yeS5wdXNoU3RhdGUobnVsbCwgbnVsbCwgIj8iICsgcXVlcnlQYXJhbXMudG9TdHJpbmcoKSkgOiBoaXN0b3J5LnJlcGxhY2VTdGF0ZShudWxsLCBudWxsLCAiPyIgKyBxdWVyeVBhcmFtcy50b1N0cmluZygpKTsKICAgICAgfQogICAgICBnZXRRdWVyeVBhcmFtKHF1ZXJ5UGFyYW1OYW1lKSB7CiAgICAgICAgY29uc3QgcXVlcnlQYXJhbXMgPSB0aGlzLmdldEFsbEFzT2JqZWN0KCk7CiAgICAgICAgcmV0dXJuIHF1ZXJ5UGFyYW1zW3F1ZXJ5UGFyYW1OYW1lXTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMuc21hcnRyb3V0ZXIuanMKdmFyIHJvdXRlTG9nLCBTbWFydFJvdXRlcjsKdmFyIGluaXRfc21hcnRyb3V0ZXJfY2xhc3Nlc19zbWFydHJvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL3NtYXJ0cm91dGVyLmNsYXNzZXMuc21hcnRyb3V0ZXIuanMiKCkgewogICAgaW5pdF9zbWFydHJvdXRlcl9wbHVnaW5zKCk7CiAgICBpbml0X3NtYXJ0cm91dGVyX2NsYXNzZXNfcXVlcnlwYXJhbXMoKTsKICAgIHJvdXRlTG9nID0gKG1lc3NhZ2UyKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGAlY1tSb3V0ZXJdJWMgJHttZXNzYWdlMn1gLCAiY29sb3I6IHJnYigyNTUsIDEwNSwgMTAwKTsiLCAiY29sb3I6IGluaGVyaXQiKTsKICAgIH07CiAgICBTbWFydFJvdXRlciA9IGNsYXNzIF9TbWFydFJvdXRlciB7CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGVzIGFuIGluc3RhbmNlIG9mIFJvdXRlci4KICAgICAgICovCiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcsIGJhc2VQYXRoID0gIiIpIHsKICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICBkZWJ1ZzogZmFsc2UKICAgICAgICB9OwogICAgICAgIHRoaXMucXVlcnlQYXJhbXMgPSBuZXcgUXVlcnlQYXJhbXMoKTsKICAgICAgICB0aGlzLnJvdXRlcyA9IFtdOwogICAgICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgICAgIC4uLnRoaXMub3B0aW9ucywKICAgICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgICB9OwogICAgICAgIHRoaXMuYmFzZVBhdGggPSBiYXNlUGF0aDsKICAgICAgICB0aGlzLnBvcHN0YXRlTGlzdGVuZXIgPSAocG9wU3RhdGVFdmVudEFyZykgPT4gewogICAgICAgICAgcG9wU3RhdGVFdmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpOwogICAgICAgIH07CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInBvcHN0YXRlIiwgdGhpcy5wb3BzdGF0ZUxpc3RlbmVyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQ3JlYXRlIGEgc3ViLXJvdXRlciB3aXRoIGEgc3BlY2lmaWMgcHJlZml4CiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfSBzdWJQYXRoCiAgICAgICAqIEBwYXJhbSB7SVJvdXRlck9wdGlvbnN9IFtvcHRpb25zXQogICAgICAgKi8KICAgICAgY3JlYXRlU3ViUm91dGVyKHN1YlBhdGgsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBuZXdCYXNlUGF0aCA9IGAke3RoaXMuYmFzZVBhdGh9JHtzdWJQYXRofWA7CiAgICAgICAgcmV0dXJuIG5ldyBfU21hcnRSb3V0ZXIoeyAuLi50aGlzLm9wdGlvbnMsIC4uLm9wdGlvbnMgfSwgbmV3QmFzZVBhdGgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBQdXNoIHJvdXRlIHN0YXRlIHRvIGhpc3Rvcnkgc3RhY2sKICAgICAgICovCiAgICAgIGFzeW5jIHB1c2hVcmwodXJsID0gIi8iLCBzdGF0ZTEyID0ge30pIHsKICAgICAgICBjb25zdCBmdWxsVXJsID0gYCR7dGhpcy5iYXNlUGF0aH0ke3VybH1gOwogICAgICAgIGlmIChmdWxsVXJsICE9PSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUpIHsKICAgICAgICAgIHdpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZTEyLCB3aW5kb3cuZG9jdW1lbnQudGl0bGUsIGZ1bGxVcmwpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoc3RhdGUxMiwgd2luZG93LmRvY3VtZW50LnRpdGxlLCBmdWxsVXJsKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5faGFuZGxlUm91dGVTdGF0ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBdHRhY2ggcm91dGUgd2l0aCBoYW5kbGVyCiAgICAgICAqIEBwYXJhbSB7c3RyaW5nfFJlZ0V4cH0gcm91dGVBcmcKICAgICAgICogQHBhcmFtIHtmdW5jdGlvbn0gaGFuZGxlckFyZwogICAgICAgKi8KICAgICAgb24ocm91dGVBcmcsIGhhbmRsZXJBcmcpIHsKICAgICAgICBjb25zdCBmdWxsUm91dGUgPSBgJHt0aGlzLmJhc2VQYXRofSR7cm91dGVBcmd9YDsKICAgICAgICBjb25zdCByb3V0ZU9iamVjdCA9IHsKICAgICAgICAgIG1hdGNoRnVuY3Rpb246IHBhdGhUb1JlZ0V4cC5tYXRjaChmdWxsUm91dGUpLAogICAgICAgICAgaGFuZGxlcjogaGFuZGxlckFyZwogICAgICAgIH07CiAgICAgICAgdGhpcy5yb3V0ZXMucHVzaChyb3V0ZU9iamVjdCk7CiAgICAgICAgY29uc3QgcmVtb3ZlRnVuY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJvdXRlcy5zcGxpY2UodGhpcy5yb3V0ZXMuaW5kZXhPZihyb3V0ZU9iamVjdCksIDEpOwogICAgICAgIH07CiAgICAgICAgcmV0dXJuIHJlbW92ZUZ1bmN0aW9uOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBcHBseSByb3V0ZXMgaGFuZGxlciB0byBjdXJyZW50IHJvdXRlCiAgICAgICAqLwogICAgICBhc3luYyBfaGFuZGxlUm91dGVTdGF0ZSgpIHsKICAgICAgICBjb25zdCBjdXJyZW50TG9jYXRpb24gPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWU7CiAgICAgICAgY29uc3Qgd2FudGVkUm91dGVzID0gdGhpcy5yb3V0ZXMuZmlsdGVyKChyb3V0ZUFyZykgPT4gewogICAgICAgICAgcmV0dXJuICEhcm91dGVBcmcubWF0Y2hGdW5jdGlvbihjdXJyZW50TG9jYXRpb24pOwogICAgICAgIH0pOwogICAgICAgIGZvciAoY29uc3Qgd2FudGVkUm91dGUgb2Ygd2FudGVkUm91dGVzKSB7CiAgICAgICAgICBjb25zdCByb3V0ZVJlc3VsdCA9IHdhbnRlZFJvdXRlLm1hdGNoRnVuY3Rpb24oY3VycmVudExvY2F0aW9uKTsKICAgICAgICAgIHdhbnRlZFJvdXRlLmhhbmRsZXIoewogICAgICAgICAgICAuLi5yb3V0ZVJlc3VsdC52YWx1ZU9mKCksCiAgICAgICAgICAgIHF1ZXJ5UGFyYW1zOiB0aGlzLnF1ZXJ5UGFyYW1zLmdldEFsbEFzT2JqZWN0KCkKICAgICAgICAgICAgLy8gVE9ETyBjaGVjayB3ZXRoZXIgZW50cmllcyBpcyBzdXBwb3J0ZWQgaW4gdHlwaW5ncwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXN0cm95IHRoZSByb3V0ZXIgaW5zdGFuY2UsIHJlbW92aW5nIGFsbCBleHRlcm5hbCByZWZlcmVuY2VzCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJwb3BzdGF0ZSIsIHRoaXMucG9wc3RhdGVMaXN0ZW5lcik7CiAgICAgICAgdGhpcy5yb3V0ZXMgPSBbXTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0cm91dGVyQDEuMy4zL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHJvdXRlci9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMxOCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMxOCwgewogIFNtYXJ0Um91dGVyOiAoKSA9PiBTbWFydFJvdXRlcgp9KTsKdmFyIGluaXRfZGlzdF90czE4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRyb3V0ZXJAMS4zLjMvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0cm91dGVyL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHJvdXRlcl9jbGFzc2VzX3NtYXJ0cm91dGVyKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9wbHVnaW5zLmpzCnZhciBpbml0X3BsdWdpbnMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvcGx1Z2lucy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMxMCgpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0aGFzaEAzLjIuNi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRoYXNoL2Rpc3RfdHNfd2ViL3NoYTI1Ni5mYWxsYmFjay5qcwpmdW5jdGlvbiByb3RyKG4xMywgYjUpIHsKICByZXR1cm4gbjEzID4+PiBiNSB8IG4xMyA8PCAzMiAtIGI1Owp9CmZ1bmN0aW9uIHNoYTI1NlRyYW5zZm9ybShXMiwgSDQpIHsKICBsZXQgYTUgPSBINFswXTsKICBsZXQgYjUgPSBINFsxXTsKICBsZXQgYzExID0gSDRbMl07CiAgbGV0IGQ2ID0gSDRbM107CiAgbGV0IGUxMSA9IEg0WzRdOwogIGxldCBmNyA9IEg0WzVdOwogIGxldCBnNCA9IEg0WzZdOwogIGxldCBoOSA9IEg0WzddOwogIGZvciAobGV0IGo0ID0gMDsgajQgPCA2NDsgajQrKykgewogICAgaWYgKGo0ID49IDE2KSB7CiAgICAgIGNvbnN0IHMwID0gcm90cihXMltqNCAtIDE1XSwgNykgXiByb3RyKFcyW2o0IC0gMTVdLCAxOCkgXiBXMltqNCAtIDE1XSA+Pj4gMzsKICAgICAgY29uc3QgczEgPSByb3RyKFcyW2o0IC0gMl0sIDE3KSBeIHJvdHIoVzJbajQgLSAyXSwgMTkpIF4gVzJbajQgLSAyXSA+Pj4gMTA7CiAgICAgIFcyW2o0XSA9IFcyW2o0IC0gMTZdICsgczAgKyBXMltqNCAtIDddICsgczEgPj4+IDA7CiAgICB9CiAgICBjb25zdCBTMSA9IHJvdHIoZTExLCA2KSBeIHJvdHIoZTExLCAxMSkgXiByb3RyKGUxMSwgMjUpOwogICAgY29uc3QgY2ggPSBlMTEgJiBmNyBeIH5lMTEgJiBnNDsKICAgIGNvbnN0IHRlbXAxID0gaDkgKyBTMSArIGNoICsgS1tqNF0gKyBXMltqNF0gPj4+IDA7CiAgICBjb25zdCBTMCA9IHJvdHIoYTUsIDIpIF4gcm90cihhNSwgMTMpIF4gcm90cihhNSwgMjIpOwogICAgY29uc3QgbWFqID0gYTUgJiBiNSBeIGE1ICYgYzExIF4gYjUgJiBjMTE7CiAgICBjb25zdCB0ZW1wMiA9IFMwICsgbWFqID4+PiAwOwogICAgaDkgPSBnNDsKICAgIGc0ID0gZjc7CiAgICBmNyA9IGUxMTsKICAgIGUxMSA9IGQ2ICsgdGVtcDEgPj4+IDA7CiAgICBkNiA9IGMxMTsKICAgIGMxMSA9IGI1OwogICAgYjUgPSBhNTsKICAgIGE1ID0gdGVtcDEgKyB0ZW1wMiA+Pj4gMDsKICB9CiAgSDRbMF0gPSBINFswXSArIGE1ID4+PiAwOwogIEg0WzFdID0gSDRbMV0gKyBiNSA+Pj4gMDsKICBINFsyXSA9IEg0WzJdICsgYzExID4+PiAwOwogIEg0WzNdID0gSDRbM10gKyBkNiA+Pj4gMDsKICBINFs0XSA9IEg0WzRdICsgZTExID4+PiAwOwogIEg0WzVdID0gSDRbNV0gKyBmNyA+Pj4gMDsKICBINFs2XSA9IEg0WzZdICsgZzQgPj4+IDA7CiAgSDRbN10gPSBINFs3XSArIGg5ID4+PiAwOwp9CmZ1bmN0aW9uIHNoYTI1NkZhbGxiYWNrKGJ5dGVzKSB7CiAgY29uc3QgSF9jb3B5ID0gWy4uLkgyXTsKICBjb25zdCBtc2dMZW4gPSBieXRlcy5sZW5ndGg7CiAgY29uc3QgbXNnQml0TGVuID0gbXNnTGVuICogODsKICBjb25zdCBwYWRMZW4gPSBtc2dMZW4gJSA2NCA8IDU2ID8gNTYgLSBtc2dMZW4gJSA2NCA6IDEyMCAtIG1zZ0xlbiAlIDY0OwogIGNvbnN0IHBhZGRlZCA9IG5ldyBVaW50OEFycmF5KG1zZ0xlbiArIHBhZExlbiArIDgpOwogIHBhZGRlZC5zZXQoYnl0ZXMpOwogIHBhZGRlZFttc2dMZW5dID0gMTI4OwogIGNvbnN0IGRhdGFWaWV3ID0gbmV3IERhdGFWaWV3KHBhZGRlZC5idWZmZXIpOwogIGRhdGFWaWV3LnNldFVpbnQzMihwYWRkZWQubGVuZ3RoIC0gOCwgMCwgZmFsc2UpOwogIGRhdGFWaWV3LnNldFVpbnQzMihwYWRkZWQubGVuZ3RoIC0gNCwgbXNnQml0TGVuID4+PiAwLCBmYWxzZSk7CiAgZm9yIChsZXQgb2Zmc2V0ID0gMDsgb2Zmc2V0IDwgcGFkZGVkLmxlbmd0aDsgb2Zmc2V0ICs9IDY0KSB7CiAgICBjb25zdCBXMiA9IG5ldyBBcnJheSg2NCk7CiAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCAxNjsgaTExKyspIHsKICAgICAgVzJbaTExXSA9IGRhdGFWaWV3LmdldFVpbnQzMihvZmZzZXQgKyBpMTEgKiA0LCBmYWxzZSk7CiAgICB9CiAgICBzaGEyNTZUcmFuc2Zvcm0oVzIsIEhfY29weSk7CiAgfQogIGxldCBoZXgyID0gIiI7CiAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgODsgaTExKyspIHsKICAgIGhleDIgKz0gSF9jb3B5W2kxMV0udG9TdHJpbmcoMTYpLnBhZFN0YXJ0KDgsICIwIik7CiAgfQogIHJldHVybiBoZXgyOwp9CnZhciBLLCBIMjsKdmFyIGluaXRfc2hhMjU2X2ZhbGxiYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvc2hhMjU2LmZhbGxiYWNrLmpzIigpIHsKICAgIEsgPSBbCiAgICAgIDExMTYzNTI0MDgsCiAgICAgIDE4OTk0NDc0NDEsCiAgICAgIDMwNDkzMjM0NzEsCiAgICAgIDM5MjEwMDk1NzMsCiAgICAgIDk2MTk4NzE2MywKICAgICAgMTUwODk3MDk5MywKICAgICAgMjQ1MzYzNTc0OCwKICAgICAgMjg3MDc2MzIyMSwKICAgICAgMzYyNDM4MTA4MCwKICAgICAgMzEwNTk4NDAxLAogICAgICA2MDcyMjUyNzgsCiAgICAgIDE0MjY4ODE5ODcsCiAgICAgIDE5MjUwNzgzODgsCiAgICAgIDIxNjIwNzgyMDYsCiAgICAgIDI2MTQ4ODgxMDMsCiAgICAgIDMyNDgyMjI1ODAsCiAgICAgIDM4MzUzOTA0MDEsCiAgICAgIDQwMjIyMjQ3NzQsCiAgICAgIDI2NDM0NzA3OCwKICAgICAgNjA0ODA3NjI4LAogICAgICA3NzAyNTU5ODMsCiAgICAgIDEyNDkxNTAxMjIsCiAgICAgIDE1NTUwODE2OTIsCiAgICAgIDE5OTYwNjQ5ODYsCiAgICAgIDI1NTQyMjA4ODIsCiAgICAgIDI4MjE4MzQzNDksCiAgICAgIDI5NTI5OTY4MDgsCiAgICAgIDMyMTAzMTM2NzEsCiAgICAgIDMzMzY1NzE4OTEsCiAgICAgIDM1ODQ1Mjg3MTEsCiAgICAgIDExMzkyNjk5MywKICAgICAgMzM4MjQxODk1LAogICAgICA2NjYzMDcyMDUsCiAgICAgIDc3MzUyOTkxMiwKICAgICAgMTI5NDc1NzM3MiwKICAgICAgMTM5NjE4MjI5MSwKICAgICAgMTY5NTE4MzcwMCwKICAgICAgMTk4NjY2MTA1MSwKICAgICAgMjE3NzAyNjM1MCwKICAgICAgMjQ1Njk1NjAzNywKICAgICAgMjczMDQ4NTkyMSwKICAgICAgMjgyMDMwMjQxMSwKICAgICAgMzI1OTczMDgwMCwKICAgICAgMzM0NTc2NDc3MSwKICAgICAgMzUxNjA2NTgxNywKICAgICAgMzYwMDM1MjgwNCwKICAgICAgNDA5NDU3MTkwOSwKICAgICAgMjc1NDIzMzQ0LAogICAgICA0MzAyMjc3MzQsCiAgICAgIDUwNjk0ODYxNiwKICAgICAgNjU5MDYwNTU2LAogICAgICA4ODM5OTc4NzcsCiAgICAgIDk1ODEzOTU3MSwKICAgICAgMTMyMjgyMjIxOCwKICAgICAgMTUzNzAwMjA2MywKICAgICAgMTc0Nzg3Mzc3OSwKICAgICAgMTk1NTU2MjIyMiwKICAgICAgMjAyNDEwNDgxNSwKICAgICAgMjIyNzczMDQ1MiwKICAgICAgMjM2MTg1MjQyNCwKICAgICAgMjQyODQzNjQ3NCwKICAgICAgMjc1NjczNDE4NywKICAgICAgMzIwNDAzMTQ3OSwKICAgICAgMzMyOTMyNTI5OAogICAgXTsKICAgIEgyID0gWwogICAgICAxNzc5MDMzNzAzLAogICAgICAzMTQ0MTM0Mjc3LAogICAgICAxMDEzOTA0MjQyLAogICAgICAyNzczNDgwNzYyLAogICAgICAxMzU5ODkzMTE5LAogICAgICAyNjAwODIyOTI0LAogICAgICA1Mjg3MzQ2MzUsCiAgICAgIDE1NDE0NTkyMjUKICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydGhhc2hAMy4yLjYvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0aGFzaC9kaXN0X3RzX3dlYi9pbmRleC5qcwp2YXIgZGlzdF90c193ZWJfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX3dlYl9leHBvcnRzLCB7CiAgbWQ1RnJvbVN0cmluZzogKCkgPT4gbWQ1RnJvbVN0cmluZywKICBzaGEyNTZGcm9tQnVmZmVyOiAoKSA9PiBzaGEyNTZGcm9tQnVmZmVyLAogIHNoYTI1NkZyb21GaWxlOiAoKSA9PiBzaGEyNTZGcm9tRmlsZSwKICBzaGEyNTZGcm9tU3RyZWFtOiAoKSA9PiBzaGEyNTZGcm9tU3RyZWFtLAogIHNoYTI1NkZyb21TdHJpbmc6ICgpID0+IHNoYTI1NkZyb21TdHJpbmcsCiAgc2hhMjU2RnJvbVN0cmluZ1N5bmM6ICgpID0+IHNoYTI1NkZyb21TdHJpbmdTeW5jLAogIHNoYTI2NUZyb21PYmplY3Q6ICgpID0+IHNoYTI2NUZyb21PYmplY3QKfSk7CnZhciBoZXgsIGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlLCBzaGEyNTZGcm9tU3RyaW5nLCBzaGEyNTZGcm9tU3RyaW5nU3luYywgc2hhMjU2RnJvbUJ1ZmZlciwgc2hhMjY1RnJvbU9iamVjdCwgc2hhMjU2RnJvbVN0cmVhbSwgc2hhMjU2RnJvbUZpbGUsIG1kNUZyb21TdHJpbmc7CnZhciBpbml0X2Rpc3RfdHNfd2ViID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRoYXNoQDMuMi42L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydGhhc2gvZGlzdF90c193ZWIvaW5kZXguanMiKCkgewogICAgaW5pdF9wbHVnaW5zMigpOwogICAgaW5pdF9zaGEyNTZfZmFsbGJhY2soKTsKICAgIGhleCA9IChidWZmZXIyKSA9PiB7CiAgICAgIGNvbnN0IGhleENvZGVzID0gW107CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgRGF0YVZpZXcoYnVmZmVyMik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHZpZXcuYnl0ZUxlbmd0aDsgaTExICs9IDQpIHsKICAgICAgICBjb25zdCB2YWx1ZTIgPSB2aWV3LmdldFVpbnQzMihpMTEpOwogICAgICAgIGNvbnN0IHN0cmluZ1ZhbHVlID0gdmFsdWUyLnRvU3RyaW5nKDE2KTsKICAgICAgICBjb25zdCBwYWRkaW5nID0gIjAwMDAwMDAwIjsKICAgICAgICBjb25zdCBwYWRkZWRWYWx1ZSA9IChwYWRkaW5nICsgc3RyaW5nVmFsdWUpLnNsaWNlKC1wYWRkaW5nLmxlbmd0aCk7CiAgICAgICAgaGV4Q29kZXMucHVzaChwYWRkZWRWYWx1ZSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGhleENvZGVzLmpvaW4oIiIpOwogICAgfTsKICAgIGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlID0gKCkgPT4gewogICAgICByZXR1cm4gdHlwZW9mIGNyeXB0byAhPT0gInVuZGVmaW5lZCIgJiYgY3J5cHRvLnN1YnRsZSAhPT0gdm9pZCAwOwogICAgfTsKICAgIHNoYTI1NkZyb21TdHJpbmcgPSBhc3luYyAoc3RyaW5nQXJnKSA9PiB7CiAgICAgIGNvbnN0IGJ1ZmZlcjIgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoc3RyaW5nQXJnKTsKICAgICAgaWYgKGlzQ3J5cHRvU3VidGxlQXZhaWxhYmxlKCkpIHsKICAgICAgICBjb25zdCBoYXNoID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLCBidWZmZXIyKTsKICAgICAgICBjb25zdCByZXN1bHQgPSBoZXgoaGFzaCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgfSBlbHNlIHsKICAgICAgICByZXR1cm4gc2hhMjU2RmFsbGJhY2soYnVmZmVyMik7CiAgICAgIH0KICAgIH07CiAgICBzaGEyNTZGcm9tU3RyaW5nU3luYyA9IChzdHJpbmdBcmcpID0+IHsKICAgICAgY29uc29sZS53YXJuKCJzaGEyNTZGcm9tU3RyaW5nU3luYyBpcyBub3QgdHJ1bHkgc3luY2hyb25vdXMgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgICB0aHJvdyBuZXcgRXJyb3IoInNoYTI1NkZyb21TdHJpbmdTeW5jIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gVXNlIHNoYTI1NkZyb21TdHJpbmcgaW5zdGVhZC4iKTsKICAgIH07CiAgICBzaGEyNTZGcm9tQnVmZmVyID0gYXN5bmMgKGJ1ZmZlckFyZykgPT4gewogICAgICBpZiAoaXNDcnlwdG9TdWJ0bGVBdmFpbGFibGUoKSkgewogICAgICAgIGxldCBpbnB1dEJ1ZmZlcjsKICAgICAgICBpZiAoYnVmZmVyQXJnIGluc3RhbmNlb2YgVWludDhBcnJheSkgewogICAgICAgICAgY29uc3QgdmlldyA9IGJ1ZmZlckFyZzsKICAgICAgICAgIGlucHV0QnVmZmVyID0gdmlldy5idWZmZXIuc2xpY2Uodmlldy5ieXRlT2Zmc2V0LCB2aWV3LmJ5dGVPZmZzZXQgKyB2aWV3LmJ5dGVMZW5ndGgpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpbnB1dEJ1ZmZlciA9IGJ1ZmZlckFyZzsKICAgICAgICB9CiAgICAgICAgY29uc3QgaGFzaCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZGlnZXN0KCJTSEEtMjU2IiwgaW5wdXRCdWZmZXIpOwogICAgICAgIGNvbnN0IHJlc3VsdCA9IGhleChoYXNoKTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHVpbnQ4QXJyYXkgPSBidWZmZXJBcmcgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gYnVmZmVyQXJnIDogbmV3IFVpbnQ4QXJyYXkoYnVmZmVyQXJnKTsKICAgICAgICByZXR1cm4gc2hhMjU2RmFsbGJhY2sodWludDhBcnJheSk7CiAgICAgIH0KICAgIH07CiAgICBzaGEyNjVGcm9tT2JqZWN0ID0gYXN5bmMgKG9iamVjdEFyZykgPT4gewogICAgICBjb25zdCBzdHJpbmdpZmllZE9iamVjdCA9IGRpc3RfdHNfZXhwb3J0czEyLnN0cmluZ2lmeShvYmplY3RBcmcpOwogICAgICBjb25zdCBoYXNoUmVzdWx0ID0gYXdhaXQgc2hhMjU2RnJvbVN0cmluZyhzdHJpbmdpZmllZE9iamVjdCk7CiAgICAgIHJldHVybiBoYXNoUmVzdWx0OwogICAgfTsKICAgIHNoYTI1NkZyb21TdHJlYW0gPSAoaW5wdXQpID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJzaGEyNTZGcm9tU3RyZWFtIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudCIpOwogICAgfTsKICAgIHNoYTI1NkZyb21GaWxlID0gYXN5bmMgKGZpbGVQYXRoKSA9PiB7CiAgICAgIHRocm93IG5ldyBFcnJvcigic2hhMjU2RnJvbUZpbGUgaXMgbm90IHN1cHBvcnRlZCBpbiBicm93c2VyIGVudmlyb25tZW50Iik7CiAgICB9OwogICAgbWQ1RnJvbVN0cmluZyA9IGFzeW5jIChzdHJpbmdUb0hhc2gpID0+IHsKICAgICAgdGhyb3cgbmV3IEVycm9yKCJtZDVGcm9tU3RyaW5nIGlzIG5vdCBzdXBwb3J0ZWQgaW4gYnJvd3NlciBlbnZpcm9ubWVudC4gV2ViIENyeXB0byBBUEkgZG9lcyBub3Qgc3VwcG9ydCBNRDUuIik7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMKdmFyIGluaXRfc21hcnRzdGF0ZV9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLnBsdWdpbnMuanMiKCkgewogICAgaW5pdF9kaXN0X3RzX3dlYigpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzMTMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnN0YXRlYWN0aW9uLmpzCnZhciBTdGF0ZUFjdGlvbjsKdmFyIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVhY3Rpb24uanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU3RhdGVBY3Rpb24gPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHN0YXRlUGFydFJlZiwgYWN0aW9uRGVmKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRSZWYgPSBzdGF0ZVBhcnRSZWY7CiAgICAgICAgdGhpcy5hY3Rpb25EZWYgPSBhY3Rpb25EZWY7CiAgICAgIH0KICAgICAgdHJpZ2dlcihwYXlsb2FkKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVQYXJ0UmVmLmRpc3BhdGNoQWN0aW9uKHRoaXMsIHBheWxvYWQpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnRzdGF0ZUAyLjAuMjcvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0c3RhdGUvZGlzdF90cy9zbWFydHN0YXRlLmNsYXNzZXMuc3RhdGVwYXJ0LmpzCnZhciBTdGF0ZVBhcnQ7CnZhciBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZXBhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zdGF0ZXBhcnQuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlYWN0aW9uKCk7CiAgICBTdGF0ZVBhcnQgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKG5hbWVBcmcsIHdlYlN0b3JlT3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3RhdGUgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0cy5jdW11bGF0aXZlRGVmZXIoKTsKICAgICAgICB0aGlzLndlYlN0b3JlID0gbnVsbDsKICAgICAgICB0aGlzLm5hbWUgPSBuYW1lQXJnOwogICAgICAgIGlmICh3ZWJTdG9yZU9wdGlvbnNBcmcpIHsKICAgICAgICAgIHRoaXMud2ViU3RvcmVPcHRpb25zID0gd2ViU3RvcmVPcHRpb25zQXJnOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogaW5pdGlhbGl6ZXMgdGhlIHdlYnN0b3JlCiAgICAgICAqLwogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLndlYlN0b3JlT3B0aW9ucykgewogICAgICAgICAgdGhpcy53ZWJTdG9yZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxMy5XZWJTdG9yZSh0aGlzLndlYlN0b3JlT3B0aW9ucyk7CiAgICAgICAgICBhd2FpdCB0aGlzLndlYlN0b3JlLmluaXQoKTsKICAgICAgICAgIGNvbnN0IHN0b3JlZFN0YXRlID0gYXdhaXQgdGhpcy53ZWJTdG9yZS5nZXQoU3RyaW5nKHRoaXMubmFtZSkpOwogICAgICAgICAgaWYgKHN0b3JlZFN0YXRlICYmIHRoaXMudmFsaWRhdGVTdGF0ZShzdG9yZWRTdGF0ZSkpIHsKICAgICAgICAgICAgdGhpcy5zdGF0ZVN0b3JlID0gc3RvcmVkU3RhdGU7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubm90aWZ5Q2hhbmdlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIHRoZSBzdGF0ZSBmcm9tIHRoZSBzdGF0ZSBzdG9yZQogICAgICAgKi8KICAgICAgZ2V0U3RhdGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0cyB0aGUgc3RhdGVTdG9yZSB0byB0aGUgbmV3IHN0YXRlCiAgICAgICAqIEBwYXJhbSBuZXdTdGF0ZUFyZwogICAgICAgKi8KICAgICAgYXN5bmMgc2V0U3RhdGUobmV3U3RhdGVBcmcpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVTdGF0ZShuZXdTdGF0ZUFyZykpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgSW52YWxpZCBzdGF0ZSBzdHJ1Y3R1cmUgZm9yIHN0YXRlIHBhcnQgJyR7dGhpcy5uYW1lfSdgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5zdGF0ZVN0b3JlID0gbmV3U3RhdGVBcmc7CiAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTsKICAgICAgICBpZiAodGhpcy53ZWJTdG9yZSkgewogICAgICAgICAgYXdhaXQgdGhpcy53ZWJTdG9yZS5zZXQoU3RyaW5nKHRoaXMubmFtZSksIG5ld1N0YXRlQXJnKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRoaXMuc3RhdGVTdG9yZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVmFsaWRhdGVzIHN0YXRlIHN0cnVjdHVyZSAtIGNhbiBiZSBvdmVycmlkZGVuIGZvciBjdXN0b20gdmFsaWRhdGlvbgogICAgICAgKiBAcGFyYW0gc3RhdGVBcmcKICAgICAgICovCiAgICAgIHZhbGlkYXRlU3RhdGUoc3RhdGVBcmcpIHsKICAgICAgICByZXR1cm4gc3RhdGVBcmcgIT09IG51bGwgJiYgc3RhdGVBcmcgIT09IHZvaWQgMDsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgb2YgYSBjaGFuZ2Ugb24gdGhlIHN0YXRlCiAgICAgICAqLwogICAgICBhc3luYyBub3RpZnlDaGFuZ2UoKSB7CiAgICAgICAgaWYgKCF0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3JlYXRlU3RhdGVIYXNoID0gYXN5bmMgKHN0YXRlQXJnKSA9PiB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgZGlzdF90c193ZWJfZXhwb3J0cy5zaGEyNTZGcm9tU3RyaW5nKGRpc3RfdHNfZXhwb3J0czEyLnN0YWJsZU9uZVdheVN0cmluZ2lmeShzdGF0ZUFyZykpOwogICAgICAgIH07CiAgICAgICAgY29uc3QgY3VycmVudEhhc2ggPSBhd2FpdCBjcmVhdGVTdGF0ZUhhc2godGhpcy5zdGF0ZVN0b3JlKTsKICAgICAgICBpZiAodGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCAmJiBjdXJyZW50SGFzaCA9PT0gdGhpcy5sYXN0U3RhdGVOb3RpZmljYXRpb25QYXlsb2FkSGFzaCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLmxhc3RTdGF0ZU5vdGlmaWNhdGlvblBheWxvYWRIYXNoID0gY3VycmVudEhhc2g7CiAgICAgICAgfQogICAgICAgIHRoaXMuc3RhdGUubmV4dCh0aGlzLnN0YXRlU3RvcmUpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGEgY3VtdWxhdGl2ZSBub3RpZmljYXRpb24gYnkgYWRkaW5nIGEgY2hhbmdlIG5vdGlmaWNhdGlvbiBhdCB0aGUgZW5kIG9mIHRoZSBjYWxsIHN0YWNrOwogICAgICAgKi8KICAgICAgbm90aWZ5Q2hhbmdlQ3VtdWxhdGl2ZSgpIHsKICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnN0YXRlU3RvcmUpIHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5ub3RpZnlDaGFuZ2UoKTsKICAgICAgICAgIH0KICAgICAgICB9LCAwKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2VsZWN0cyBhIHN0YXRlIG9yIGEgc3Vic3RhdGUKICAgICAgICovCiAgICAgIHNlbGVjdChzZWxlY3RvckZuKSB7CiAgICAgICAgaWYgKCFzZWxlY3RvckZuKSB7CiAgICAgICAgICBzZWxlY3RvckZuID0gKHN0YXRlMTIpID0+IHN0YXRlMTI7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1hcHBlZCA9IHRoaXMuc3RhdGUucGlwZShkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLnN0YXJ0V2l0aCh0aGlzLmdldFN0YXRlKCkpLCBkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLmZpbHRlcigoc3RhdGVBcmcpID0+IHN0YXRlQXJnICE9PSB2b2lkIDApLCBkaXN0X3RzX2V4cG9ydHMyLnJ4anMub3BzLm1hcCgoc3RhdGVBcmcpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHJldHVybiBzZWxlY3RvckZuKHN0YXRlQXJnKTsKICAgICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgICAgfQogICAgICAgIH0pKTsKICAgICAgICByZXR1cm4gbWFwcGVkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjcmVhdGVzIGFuIGFjdGlvbiBjYXBhYmxlIG9mIG1vZGlmeWluZyB0aGUgc3RhdGUKICAgICAgICovCiAgICAgIGNyZWF0ZUFjdGlvbihhY3Rpb25EZWYpIHsKICAgICAgICByZXR1cm4gbmV3IFN0YXRlQWN0aW9uKHRoaXMsIGFjdGlvbkRlZik7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGRpc3BhdGNoZXMgYW4gYWN0aW9uIG9uIHRoZSBzdGF0ZXBhcnQgbGV2ZWwKICAgICAgICovCiAgICAgIGFzeW5jIGRpc3BhdGNoQWN0aW9uKHN0YXRlQWN0aW9uLCBhY3Rpb25QYXlsb2FkKSB7CiAgICAgICAgYXdhaXQgdGhpcy5jdW11bGF0aXZlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdCBuZXdTdGF0ZSA9IGF3YWl0IHN0YXRlQWN0aW9uLmFjdGlvbkRlZih0aGlzLCBhY3Rpb25QYXlsb2FkKTsKICAgICAgICBhd2FpdCB0aGlzLnNldFN0YXRlKG5ld1N0YXRlKTsKICAgICAgICByZXR1cm4gdGhpcy5nZXRTdGF0ZSgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiB3YWl0cyB1bnRpbCBhIGNlcnRhaW4gcGFydCBvZiB0aGUgc3RhdGUgYmVjb21lcyBhdmFpbGFibGUKICAgICAgICogQHBhcmFtIHNlbGVjdG9yRm4KICAgICAgICovCiAgICAgIGFzeW5jIHdhaXRVbnRpbFByZXNlbnQoc2VsZWN0b3JGbikgewogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzZWxlY3RlZE9ic2VydmFibGUgPSB0aGlzLnNlbGVjdChzZWxlY3RvckZuKTsKICAgICAgICBjb25zdCBzdWJzY3JpcHRpb24gPSBzZWxlY3RlZE9ic2VydmFibGUuc3Vic2NyaWJlKGFzeW5jICh2YWx1ZTIpID0+IHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKHZhbHVlMik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgZG9uZS5wcm9taXNlOwogICAgICAgIHN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGlzIGV4ZWN1dGVkCiAgICAgICAqLwogICAgICBhc3luYyBzdGF0ZVNldHVwKGZ1bmNBcmcpIHsKICAgICAgICBjb25zdCByZXN1bHRQcm9taXNlID0gZnVuY0FyZyh0aGlzKTsKICAgICAgICB0aGlzLmN1bXVsYXRpdmVEZWZlcnJlZC5hZGRQcm9taXNlKHJlc3VsdFByb21pc2UpOwogICAgICAgIHRoaXMuc2V0U3RhdGUoYXdhaXQgcmVzdWx0UHJvbWlzZSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHN0YXRlQDIuMC4yNy9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnRzdGF0ZS9kaXN0X3RzL3NtYXJ0c3RhdGUuY2xhc3Nlcy5zbWFydHN0YXRlLmpzCnZhciBTbWFydHN0YXRlOwp2YXIgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc21hcnRzdGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvc21hcnRzdGF0ZS5jbGFzc2VzLnNtYXJ0c3RhdGUuanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX3BsdWdpbnMoKTsKICAgIGluaXRfc21hcnRzdGF0ZV9jbGFzc2VzX3N0YXRlcGFydCgpOwogICAgU21hcnRzdGF0ZSA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5zdGF0ZVBhcnRNYXAgPSB7fTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQWxsb3dzIGdldHRpbmcgYW5kIGluaXRpYWxpemluZyBhIG5ldyBzdGF0ZXBhcnQKICAgICAgICogaW5pdE1vZGUgPT09ICdzb2Z0JyAoZGVmYXVsdCkgLSByZXR1cm5zIGV4aXN0aW5nIHN0YXRlcGFydCBpZiBleGlzdHMsIGNyZWF0ZXMgbmV3IGlmIG5vdAogICAgICAgKiBpbml0TW9kZSA9PT0gJ21hbmRhdG9yeScgLSByZXF1aXJlcyBzdGF0ZXBhcnQgdG8gbm90IGV4aXN0LCBmYWlscyBpZiBpdCBkb2VzCiAgICAgICAqIGluaXRNb2RlID09PSAnZm9yY2UnIC0gYWx3YXlzIGNyZWF0ZXMgbmV3IHN0YXRlcGFydCwgb3ZlcndyaXRpbmcgYW55IGV4aXN0aW5nCiAgICAgICAqIGluaXRNb2RlID09PSAncGVyc2lzdGVudCcgLSBsaWtlICdzb2Z0JyBidXQgd2l0aCB3ZWJzdG9yZSBwZXJzaXN0ZW5jZQogICAgICAgKiBAcGFyYW0gc3RhdGVQYXJ0TmFtZUFyZwogICAgICAgKiBAcGFyYW0gaW5pdGlhbEFyZwogICAgICAgKiBAcGFyYW0gaW5pdE1vZGUKICAgICAgICovCiAgICAgIGFzeW5jIGdldFN0YXRlUGFydChzdGF0ZVBhcnROYW1lQXJnLCBpbml0aWFsQXJnLCBpbml0TW9kZSA9ICJzb2Z0IikgewogICAgICAgIGNvbnN0IGV4aXN0aW5nU3RhdGVQYXJ0ID0gdGhpcy5zdGF0ZVBhcnRNYXBbc3RhdGVQYXJ0TmFtZUFyZ107CiAgICAgICAgaWYgKGV4aXN0aW5nU3RhdGVQYXJ0KSB7CiAgICAgICAgICBzd2l0Y2ggKGluaXRNb2RlKSB7CiAgICAgICAgICAgIGNhc2UgIm1hbmRhdG9yeSI6CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBwYXJ0ICcke3N0YXRlUGFydE5hbWVBcmd9JyBhbHJlYWR5IGV4aXN0cywgYnV0IGluaXRNb2RlIGlzICdtYW5kYXRvcnknYCk7CiAgICAgICAgICAgIGNhc2UgImZvcmNlIjoKICAgICAgICAgICAgICByZXR1cm4gdGhpcy5jcmVhdGVTdGF0ZVBhcnQoc3RhdGVQYXJ0TmFtZUFyZywgaW5pdGlhbEFyZywgaW5pdE1vZGUpOwogICAgICAgICAgICBjYXNlICJzb2Z0IjoKICAgICAgICAgICAgY2FzZSAicGVyc2lzdGVudCI6CiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAgcmV0dXJuIGV4aXN0aW5nU3RhdGVQYXJ0OwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBpZiAoIWluaXRpYWxBcmcpIHsKICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBTdGF0ZSBwYXJ0ICcke3N0YXRlUGFydE5hbWVBcmd9JyBkb2VzIG5vdCBleGlzdCBhbmQgbm8gaW5pdGlhbCBzdGF0ZSBwcm92aWRlZGApOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMuY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWVBcmcsIGluaXRpYWxBcmcsIGluaXRNb2RlKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENyZWF0ZXMgYSBzdGF0ZXBhcnQKICAgICAgICogQHBhcmFtIHN0YXRlUGFydE5hbWUKICAgICAgICogQHBhcmFtIGluaXRpYWxQYXlsb2FkQXJnCiAgICAgICAqIEBwYXJhbSBpbml0TW9kZQogICAgICAgKi8KICAgICAgYXN5bmMgY3JlYXRlU3RhdGVQYXJ0KHN0YXRlUGFydE5hbWUsIGluaXRpYWxQYXlsb2FkQXJnLCBpbml0TW9kZSA9ICJzb2Z0IikgewogICAgICAgIGNvbnN0IG5ld1N0YXRlID0gbmV3IFN0YXRlUGFydChzdGF0ZVBhcnROYW1lLCBpbml0TW9kZSA9PT0gInBlcnNpc3RlbnQiID8gewogICAgICAgICAgZGJOYW1lOiAic21hcnRzdGF0ZSIsCiAgICAgICAgICBzdG9yZU5hbWU6IHN0YXRlUGFydE5hbWUKICAgICAgICB9IDogbnVsbCk7CiAgICAgICAgYXdhaXQgbmV3U3RhdGUuaW5pdCgpOwogICAgICAgIGNvbnN0IGN1cnJlbnRTdGF0ZSA9IG5ld1N0YXRlLmdldFN0YXRlKCk7CiAgICAgICAgYXdhaXQgbmV3U3RhdGUuc2V0U3RhdGUoewogICAgICAgICAgLi4uY3VycmVudFN0YXRlLAogICAgICAgICAgLi4uaW5pdGlhbFBheWxvYWRBcmcKICAgICAgICB9KTsKICAgICAgICB0aGlzLnN0YXRlUGFydE1hcFtzdGF0ZVBhcnROYW1lXSA9IG5ld1N0YXRlOwogICAgICAgIHJldHVybiBuZXdTdGF0ZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czE5ID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czE5LCB7CiAgU21hcnRzdGF0ZTogKCkgPT4gU21hcnRzdGF0ZSwKICBTdGF0ZUFjdGlvbjogKCkgPT4gU3RhdGVBY3Rpb24sCiAgU3RhdGVQYXJ0OiAoKSA9PiBTdGF0ZVBhcnQKfSk7CnZhciBpbml0X2Rpc3RfdHMxOSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0c3RhdGVAMi4wLjI3L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHN0YXRlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc21hcnRzdGF0ZSgpOwogICAgaW5pdF9zbWFydHN0YXRlX2NsYXNzZXNfc3RhdGVwYXJ0KCk7CiAgICBpbml0X3NtYXJ0c3RhdGVfY2xhc3Nlc19zdGF0ZWFjdGlvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwucGx1Z2lucy5qcwp2YXIgaW5pdF9zbWFydHVybF9wbHVnaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvc21hcnR1cmwucGx1Z2lucy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytzbWFydHVybEAzLjEuMC9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvc21hcnR1cmwvZGlzdF90cy9zbWFydHVybC5jbGFzc2VzLnNtYXJ0dXJsLmpzCnZhciBTbWFydHVybDsKdmFyIGluaXRfc21hcnR1cmxfY2xhc3Nlc19zbWFydHVybCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL3NtYXJ0dXJsLmNsYXNzZXMuc21hcnR1cmwuanMiKCkgewogICAgaW5pdF9zbWFydHVybF9wbHVnaW5zKCk7CiAgICBTbWFydHVybCA9IGNsYXNzIF9TbWFydHVybCB7CiAgICAgIC8vIFN0YXRpYyBtZXRob2QgdG8gY3JlYXRlIGEgU21hcnR1cmwgaW5zdGFuY2UgZnJvbSBhIFVSTCBzdHJpbmcKICAgICAgc3RhdGljIGNyZWF0ZUZyb21VcmwodXJsQXJnLCBvcHRpb25zQXJnKSB7CiAgICAgICAgY29uc3QgcGFyc2VkVXJsSW5zdGFuY2UgPSBuZXcgVVJMKHVybEFyZyk7CiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1zID0ge307CiAgICAgICAgY29uc3Qgc2VhcmNoUGFyYW1QYWlycyA9IFtdOwogICAgICAgIGlmIChwYXJzZWRVcmxJbnN0YW5jZS5zZWFyY2gpIHsKICAgICAgICAgIHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaC5yZXBsYWNlKCI/IiwgIiIpLnNwbGl0KCImIikubWFwKChzZWFyY2hQYXJhbVBhaXIpID0+IHsKICAgICAgICAgICAgc2VhcmNoUGFyYW1QYWlycy5wdXNoKHsKICAgICAgICAgICAgICBrZXk6IHNlYXJjaFBhcmFtUGFpci5zcGxpdCgiPSIpWzBdLAogICAgICAgICAgICAgIHZhbHVlOiBzZWFyY2hQYXJhbVBhaXIuc3BsaXQoIj0iKVsxXQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IHNlYXJjaFBhcmFtUGFpciBvZiBzZWFyY2hQYXJhbVBhaXJzKSB7CiAgICAgICAgICBzZWFyY2hQYXJhbXNbc2VhcmNoUGFyYW1QYWlyLmtleV0gPSBzZWFyY2hQYXJhbVBhaXIudmFsdWU7CiAgICAgICAgfQogICAgICAgIGlmIChvcHRpb25zQXJnPy5zZWFyY2hQYXJhbXMpIHsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiBPYmplY3Qua2V5cyhvcHRpb25zQXJnLnNlYXJjaFBhcmFtcykpIHsKICAgICAgICAgICAgc2VhcmNoUGFyYW1zW2tleTJdID0gb3B0aW9uc0FyZy5zZWFyY2hQYXJhbXNba2V5Ml07CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGxldCBwYXRoMiA9IHBhcnNlZFVybEluc3RhbmNlLnBhdGhuYW1lIHx8ICIiOwogICAgICAgIGlmIChPYmplY3Qua2V5cyhzZWFyY2hQYXJhbXMpLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHBhdGgyICs9ICI/IjsKICAgICAgICAgIGxldCBmaXJzdDIgPSB0cnVlOwogICAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIE9iamVjdC5rZXlzKHNlYXJjaFBhcmFtcykpIHsKICAgICAgICAgICAgaWYgKGZpcnN0MikgewogICAgICAgICAgICAgIGZpcnN0MiA9IGZhbHNlOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHBhdGgyICs9ICImIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBwYXRoMiArPSBgJHtrZXkyfT0ke3NlYXJjaFBhcmFtc1trZXkyXX1gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBjb25zdCBwYXJzZWRVcmwgPSB7CiAgICAgICAgICAuLi5wYXJzZWRVcmxJbnN0YW5jZSwKICAgICAgICAgIGhyZWY6IHBhcnNlZFVybEluc3RhbmNlLmhyZWYsCiAgICAgICAgICBvcmlnaW46IHBhcnNlZFVybEluc3RhbmNlLm9yaWdpbiwKICAgICAgICAgIHByb3RvY29sOiBwYXJzZWRVcmxJbnN0YW5jZS5wcm90b2NvbCwKICAgICAgICAgIHVzZXJuYW1lOiBwYXJzZWRVcmxJbnN0YW5jZS51c2VybmFtZSwKICAgICAgICAgIHBhc3N3b3JkOiBwYXJzZWRVcmxJbnN0YW5jZS5wYXNzd29yZCwKICAgICAgICAgIGhvc3Q6IHBhcnNlZFVybEluc3RhbmNlLmhvc3QsCiAgICAgICAgICBob3N0bmFtZTogcGFyc2VkVXJsSW5zdGFuY2UuaG9zdG5hbWUsCiAgICAgICAgICBwb3J0OiBwYXJzZWRVcmxJbnN0YW5jZS5wb3J0LAogICAgICAgICAgcGF0aDogcGF0aDIsCiAgICAgICAgICBwYXRobmFtZTogcGFyc2VkVXJsSW5zdGFuY2UucGF0aG5hbWUsCiAgICAgICAgICBzZWFyY2g6IHBhcnNlZFVybEluc3RhbmNlLnNlYXJjaCwKICAgICAgICAgIHNlYXJjaFBhcmFtcywKICAgICAgICAgIGhhc2g6IHBhcnNlZFVybEluc3RhbmNlLmhhc2gKICAgICAgICB9OwogICAgICAgIGlmICghcGFyc2VkVXJsLnBvcnQgJiYgcGFyc2VkVXJsLnByb3RvY29sID09PSAiaHR0cHM6IikgewogICAgICAgICAgcGFyc2VkVXJsLnBvcnQgPSAiNDQzIjsKICAgICAgICB9CiAgICAgICAgaWYgKCFwYXJzZWRVcmwucG9ydCAmJiBwYXJzZWRVcmwucHJvdG9jb2wgPT09ICJodHRwOiIpIHsKICAgICAgICAgIHBhcnNlZFVybC5wb3J0ID0gIjgwIjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcmV0dXJuU21hcnR1cmwgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXR1cm5TbWFydHVybCwgcGFyc2VkVXJsKTsKICAgICAgICByZXR1cm4gcmV0dXJuU21hcnR1cmw7CiAgICAgIH0KICAgICAgLy8gU3RhdGljIG1ldGhvZCB0byBjcmVhdGUgYSBTbWFydHVybCBpbnN0YW5jZSBmcm9tIGFuIGV4aXN0aW5nIElVcmxPYmplY3QKICAgICAgc3RhdGljIGNyZWF0ZUZyb21QYXJzZWRVcmwocGFyc2VkVXJsQXJnKSB7CiAgICAgICAgY29uc3QgcmV0dXJuU21hcnR1cmwgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihyZXR1cm5TbWFydHVybCwgcGFyc2VkVXJsQXJnKTsKICAgICAgICByZXR1cm4gcmV0dXJuU21hcnR1cmw7CiAgICAgIH0KICAgICAgLy8gQ29uc3RydWN0b3IgaW5pdGlhbGl6ZXMgc2VhcmNoUGFyYW1zIGFzIGFuIGVtcHR5IG9iamVjdAogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLnNlYXJjaFBhcmFtcyA9IHt9OwogICAgICB9CiAgICAgIC8vIE1ldGhvZCB0byBjcmVhdGUgYW4gaW5kZXBlbmRlbnQgY2xvbmUgb2YgdGhlIGN1cnJlbnQgU21hcnR1cmwgaW5zdGFuY2UKICAgICAgY2xvbmUoKSB7CiAgICAgICAgY29uc3QgY2xvbmVkSW5zdGFuY2UgPSBuZXcgX1NtYXJ0dXJsKCk7CiAgICAgICAgT2JqZWN0LmFzc2lnbihjbG9uZWRJbnN0YW5jZSwgdGhpcyk7CiAgICAgICAgY2xvbmVkSW5zdGFuY2Uuc2VhcmNoUGFyYW1zID0geyAuLi50aGlzLnNlYXJjaFBhcmFtcyB9OwogICAgICAgIHJldHVybiBjbG9uZWRJbnN0YW5jZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogVHlwZWQgbWV0aG9kIHRvIHNldCBhIHByb3BlcnR5IGFuZCByZXR1cm4gdGhlIGluc3RhbmNlIGZvciBjaGFpbmluZy4KICAgICAgICogQHBhcmFtIHByb3AgLSBUaGUgcHJvcGVydHkgbmFtZSB0byBzZXQgKG11c3QgYmUgYSBrZXkgb2YgU21hcnR1cmwpCiAgICAgICAqIEBwYXJhbSB2YWx1ZSAtIFRoZSB2YWx1ZSB0byBhc3NpZ24gdG8gdGhlIHByb3BlcnR5CiAgICAgICAqIEByZXR1cm5zIFRoZSBTbWFydHVybCBpbnN0YW5jZSBmb3IgbWV0aG9kIGNoYWluaW5nCiAgICAgICAqLwogICAgICBzZXQocHJvcCwgdmFsdWUyKSB7CiAgICAgICAgdGhpc1twcm9wXSA9IHZhbHVlMjsKICAgICAgICByZXR1cm4gdGhpczsKICAgICAgfQogICAgICAvLyBNZXRob2QgdG8gY29udmVydCB0aGUgU21hcnR1cmwgaW5zdGFuY2UgYmFjayBpbnRvIGEgVVJMIHN0cmluZwogICAgICB0b1N0cmluZygpIHsKICAgICAgICBsZXQgdXNlcnBhcnQgPSBgYDsKICAgICAgICBpZiAodGhpcy51c2VybmFtZSAmJiAhdGhpcy5wYXNzd29yZCkgewogICAgICAgICAgdXNlcnBhcnQgPSBgJHt0aGlzLnVzZXJuYW1lfUBgOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy51c2VybmFtZSAmJiB0aGlzLnBhc3N3b3JkKSB7CiAgICAgICAgICB1c2VycGFydCA9IGAke3RoaXMudXNlcm5hbWV9OiR7dGhpcy5wYXNzd29yZH1AYDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGAke3RoaXMucHJvdG9jb2x9Ly8ke3VzZXJwYXJ0fSR7dGhpcy5ob3N0bmFtZX06JHt0aGlzLnBvcnR9JHt0aGlzLnBhdGh9YDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3NtYXJ0dXJsQDMuMS4wL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9zbWFydHVybC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMCwgewogIFNtYXJ0dXJsOiAoKSA9PiBTbWFydHVybAp9KTsKdmFyIGluaXRfZGlzdF90czIwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrc21hcnR1cmxAMy4xLjAvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3NtYXJ0dXJsL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHVybF9jbGFzc2VzX3NtYXJ0dXJsKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaHJvY2tzK3NtYXJ0cHJvbWlzZUA0LjAuMi9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydHByb21pc2UvZGlzdF90cy9zbWFydHByb21pc2UuY2xhc3Nlcy5kZWZlcnJlZC5qcwp2YXIgRGVmZXJyZWQyLCBkZWZlcjM7CnZhciBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmRlZmVycmVkLmpzIigpIHsKICAgIERlZmVycmVkMiA9IGNsYXNzIHsKICAgICAgY2xhaW0oKSB7CiAgICAgICAgaWYgKHRoaXMuY2xhaW1lZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJEZWZlcnJlZCBhbHJlYWR5IGNsYWltZWQiKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5jbGFpbWVkID0gdHJ1ZTsKICAgICAgfQogICAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc3RvcHBlZEF0KSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5zdG9wcGVkQXQgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIERhdGUubm93KCkgLSB0aGlzLnN0YXJ0ZWRBdDsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5jbGFpbWVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5wcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgICAgIHRoaXMucmVzb2x2ZSA9ICh2YWx1ZUFyZykgPT4gewogICAgICAgICAgICB0aGlzLnN0YXR1cyA9ICJmdWxmaWxsZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlc29sdmUyKHZhbHVlQXJnKTsKICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnJlamVjdCA9IChyZWFzb24pID0+IHsKICAgICAgICAgICAgdGhpcy5zdGF0dXMgPSAicmVqZWN0ZWQiOwogICAgICAgICAgICB0aGlzLnN0b3BwZWRBdCA9IERhdGUubm93KCk7CiAgICAgICAgICAgIHJlamVjdChyZWFzb24pOwogICAgICAgICAgfTsKICAgICAgICAgIHRoaXMuc3RhcnRlZEF0ID0gRGF0ZS5ub3coKTsKICAgICAgICAgIHRoaXMuc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZGVmZXIzID0gKCkgPT4gewogICAgICByZXR1cm4gbmV3IERlZmVycmVkMigpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcwp2YXIgQ3VtdWxhdGl2ZURlZmVycmVkMiwgY3VtdWxhdGl2ZURlZmVyMjsKdmFyIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL3NtYXJ0cHJvbWlzZS5jbGFzc2VzLmN1bXVsYXRpdmVkZWZlcnJlZC5qcyIoKSB7CiAgICBpbml0X3NtYXJ0cHJvbWlzZV9jbGFzc2VzX2RlZmVycmVkMigpOwogICAgQ3VtdWxhdGl2ZURlZmVycmVkMiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzID0gW107CiAgICAgICAgdGhpcy5kZWZlcnJlZCA9IGRlZmVyMygpOwogICAgICAgIHRoaXMucHJvbWlzZSA9IHRoaXMuZGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIHdoaWxlICh0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBwb3BwZWRQcm9taXNlID0gdGhpcy5hY2N1bXVsYXRlZFByb21pc2VzLnNoaWZ0KCk7CiAgICAgICAgICAgIGF3YWl0IHBvcHBlZFByb21pc2U7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgICB9LCAwKTsKICAgICAgfQogICAgICBhZGRQcm9taXNlKHByb21pc2VBcmcpIHsKICAgICAgICB0aGlzLmFjY3VtdWxhdGVkUHJvbWlzZXMucHVzaChwcm9taXNlQXJnKTsKICAgICAgfQogICAgfTsKICAgIGN1bXVsYXRpdmVEZWZlcjIgPSAoKSA9PiB7CiAgICAgIHJldHVybiBuZXcgQ3VtdWxhdGl2ZURlZmVycmVkMigpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRwcm9taXNlQDQuMC4yL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0cHJvbWlzZS9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyMSA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyMSwgewogIEN1bXVsYXRpdmVEZWZlcnJlZDogKCkgPT4gQ3VtdWxhdGl2ZURlZmVycmVkMiwKICBEZWZlcnJlZDogKCkgPT4gRGVmZXJyZWQyLAogIGN1bXVsYXRpdmVEZWZlcjogKCkgPT4gY3VtdWxhdGl2ZURlZmVyMiwKICBkZWZlcjogKCkgPT4gZGVmZXIzLAogIGdldEZpcnN0VHJ1ZU9yRmFsc2U6ICgpID0+IGdldEZpcnN0VHJ1ZU9yRmFsc2UyLAogIG1hcDogKCkgPT4gbWFwNiwKICByZWplY3RlZFByb21pc2U6ICgpID0+IHJlamVjdGVkUHJvbWlzZTIsCiAgcmVzb2x2ZWRQcm9taXNlOiAoKSA9PiByZXNvbHZlZFByb21pc2UyLAogIHRpbWVvdXRBbmRDb250aW51ZTogKCkgPT4gdGltZW91dEFuZENvbnRpbnVlMiwKICB0aW1lb3V0V3JhcDogKCkgPT4gdGltZW91dFdyYXAyCn0pOwp2YXIgcmVzb2x2ZWRQcm9taXNlMiwgcmVqZWN0ZWRQcm9taXNlMiwgbWFwNiwgdGltZW91dFdyYXAyLCB0aW1lb3V0QW5kQ29udGludWUyLCBnZXRGaXJzdFRydWVPckZhbHNlMjsKdmFyIGluaXRfZGlzdF90czIxID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydHByb21pc2VANC4wLjIvbm9kZV9tb2R1bGVzL0BwdXNocm9ja3Mvc21hcnRwcm9taXNlL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIGluaXRfc21hcnRwcm9taXNlX2NsYXNzZXNfY3VtdWxhdGl2ZWRlZmVycmVkMigpOwogICAgaW5pdF9zbWFydHByb21pc2VfY2xhc3Nlc19kZWZlcnJlZDIoKTsKICAgIHJlc29sdmVkUHJvbWlzZTIgPSAodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodmFsdWUyKTsKICAgIH07CiAgICByZWplY3RlZFByb21pc2UyID0gKGVycikgPT4gewogICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QoZXJyKTsKICAgIH07CiAgICBtYXA2ID0gYXN5bmMgKGlucHV0QXJnLCBmdW5jdGlvbkFyZykgPT4gewogICAgICBjb25zdCBwcm9taXNlQXJyYXkgPSBbXTsKICAgICAgY29uc3QgcmVzdWx0QXJyYXkgPSBbXTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGlucHV0QXJnKSB7CiAgICAgICAgY29uc3QgcHJvbWlzZSA9IGZ1bmN0aW9uQXJnKGl0ZW0pOwogICAgICAgIHByb21pc2VBcnJheS5wdXNoKHByb21pc2UpOwogICAgICAgIHByb21pc2UudGhlbigoeDMpID0+IHsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goeDMpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VBcnJheSk7CiAgICAgIHJldHVybiByZXN1bHRBcnJheTsKICAgIH07CiAgICB0aW1lb3V0V3JhcDIgPSBhc3luYyAocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIHJlamVjdEFyZyA9IHRydWUpID0+IHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMiwgcmVqZWN0KSA9PiB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAocmVqZWN0QXJnKSB7CiAgICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoInRpbWVvdXQiKSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB0aW1lb3V0SW5Nc0FyZyk7CiAgICAgICAgcHJvbWlzZUFyZy50aGVuKHJlc29sdmUyLCByZWplY3QpOwogICAgICB9KTsKICAgIH07CiAgICB0aW1lb3V0QW5kQ29udGludWUyID0gYXN5bmMgKHByb21pc2VBcmcsIHRpbWVvdXRJbk1zQXJnID0gNmU0KSA9PiB7CiAgICAgIHJldHVybiB0aW1lb3V0V3JhcDIocHJvbWlzZUFyZywgdGltZW91dEluTXNBcmcsIGZhbHNlKTsKICAgIH07CiAgICBnZXRGaXJzdFRydWVPckZhbHNlMiA9IGFzeW5jIChwcm9taXNlc0FyZykgPT4gewogICAgICBjb25zdCBkb25lID0gZGVmZXIzKCk7CiAgICAgIGZvciAoY29uc3QgcHJvbWlzZUFyZyBvZiBwcm9taXNlc0FyZykgewogICAgICAgIHByb21pc2VBcmcudGhlbigocmVzdWx0QXJnKSA9PiB7CiAgICAgICAgICBpZiAocmVzdWx0QXJnID09PSB0cnVlKSB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICBQcm9taXNlLmFsbChwcm9taXNlc0FyZykudGhlbigoKSA9PiB7CiAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgfSk7CiAgICAgIHJldHVybiBkb25lLnByb21pc2U7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2hyb2NrcytzbWFydGRlbGF5QDMuMC4xL25vZGVfbW9kdWxlcy9AcHVzaHJvY2tzL3NtYXJ0ZGVsYXkvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjIgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjIsIHsKICBUaW1lb3V0OiAoKSA9PiBUaW1lb3V0MiwKICBkZWxheUZvcjogKCkgPT4gZGVsYXlGb3IyLAogIGRlbGF5Rm9yUmFuZG9tOiAoKSA9PiBkZWxheUZvclJhbmRvbTIKfSk7CnZhciBkZWxheUZvcjIsIGRlbGF5Rm9yUmFuZG9tMiwgVGltZW91dDI7CnZhciBpbml0X2Rpc3RfdHMyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNocm9ja3Mrc21hcnRkZWxheUAzLjAuMS9ub2RlX21vZHVsZXMvQHB1c2hyb2Nrcy9zbWFydGRlbGF5L2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9kaXN0X3RzMjEoKTsKICAgIGRlbGF5Rm9yMiA9IGFzeW5jICh0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uQXJnLCB1bnJlZmVkQXJnID0gZmFsc2UpID0+IHsKICAgICAgY29uc3QgdGltZW91dDIgPSBuZXcgVGltZW91dDIodGltZUluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICBhd2FpdCB0aW1lb3V0Mi5wcm9taXNlOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIGRlbGF5Rm9yUmFuZG9tMiA9IGFzeW5jICh0aW1lTWluSW5NaWxsaXNlY29uZEFyZywgdGltZU1heEluTWlsbGlzZWNvbmRBcmcsIHBhc3NPbkFyZywgdW5yZWZlZEFyZyA9IGZhbHNlKSA9PiB7CiAgICAgIGF3YWl0IGRlbGF5Rm9yMihNYXRoLnJhbmRvbSgpICogKHRpbWVNYXhJbk1pbGxpc2Vjb25kQXJnIC0gdGltZU1pbkluTWlsbGlzZWNvbmRBcmcpICsgdGltZU1pbkluTWlsbGlzZWNvbmRBcmcsIG51bGwsIHVucmVmZWRBcmcpOwogICAgICByZXR1cm4gcGFzc09uQXJnOwogICAgfTsKICAgIFRpbWVvdXQyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0aW1lSW5NaWxsaXNlY29uZEFyZywgcGFzc09uLCB1bnJlZmVkQXJnID0gZmFsc2UpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLnRpbWVvdXRJbk1pbGxpcyA9IHRpbWVJbk1pbGxpc2Vjb25kQXJnOwogICAgICAgIHRoaXMuX2RlZmVycmVkID0gZGVmZXIzKCk7CiAgICAgICAgdGhpcy5wcm9taXNlID0gdGhpcy5fZGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLl90aW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAoIXRoaXMuX2NhbmNlbGxlZCkgewogICAgICAgICAgICB0aGlzLl9kZWZlcnJlZC5yZXNvbHZlKHBhc3NPbik7CiAgICAgICAgICB9CiAgICAgICAgfSwgdGltZUluTWlsbGlzZWNvbmRBcmcpOwogICAgICAgIHRoaXMuc3RhcnRlZCA9IERhdGUubm93KCk7CiAgICAgICAgaWYgKHVucmVmZWRBcmcpIHsKICAgICAgICAgIHRoaXMubWFrZVVucmVmZWQoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHVucmVmZmluZyBhIHRpbWVvdXQgY2F1c2VzIHRoZSBub2RlIHByb2Nlc3MgdG8gbm90IHdhaXQgZm9yIGNvbXBsZXRpb24gYmVmb3JlIGV4aXQKICAgICAgICovCiAgICAgIG1ha2VVbnJlZmVkKCkgewogICAgICAgIHRoaXMuX3RpbWVvdXQudW5yZWYoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2FuY2VscyB0aGUgdGltZXIKICAgICAgICovCiAgICAgIGNhbmNlbCgpIHsKICAgICAgICB0aGlzLl9jYW5jZWxsZWQgPSB0cnVlOwogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl90aW1lb3V0KTsKICAgICAgfQogICAgICBnZXRUaW1lTGVmdCgpIHsKICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLnN0YXJ0ZWQgKyB0aGlzLnRpbWVvdXRJbk1pbGxpcyAtIERhdGUubm93KCk7CiAgICAgICAgcmV0dXJuIHJlc3VsdCA+IDAgPyByZXN1bHQgOiAwOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2FkZHJlc3MuanMKdmFyIGluaXRfYWRkcmVzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9hZGRyZXNzLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb21wYW55LmpzCnZhciBpbml0X2NvbXBhbnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvY29tcGFueS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2NvbnRhY3QuanMKdmFyIGluaXRfY29udGFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9jb250YWN0LmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY2hlY2tpbmdhY2NvdW50LmpzCnZhciBpbml0X2NoZWNraW5nYWNjb3VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL2NoZWNraW5nYWNjb3VudC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyMygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvY3VycmVuY3kuanMKdmFyIGluaXRfY3VycmVuY3kgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9jdXJyZW5jeS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9leHBlbnNlLmpzCnZhciBpbml0X2V4cGVuc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9leHBlbnNlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbnZvaWNlLmpzCnZhciBpbml0X2ludm9pY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9pbnZvaWNlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9wYXltZW50LmpzCnZhciBpbml0X3BheW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZmluYW5jZS9wYXltZW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9maW5hbmNlL3RyYW5zYWN0aW9uLmpzCnZhciBpbml0X3RyYW5zYWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvdHJhbnNhY3Rpb24uanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMKdmFyIGZpbmFuY2VfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9maW5hbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMiKCkgewogICAgaW5pdF9jaGVja2luZ2FjY291bnQoKTsKICAgIGluaXRfY3VycmVuY3koKTsKICAgIGluaXRfZXhwZW5zZSgpOwogICAgaW5pdF9pbnZvaWNlKCk7CiAgICBpbml0X3BheW1lbnQoKTsKICAgIGluaXRfdHJhbnNhY3Rpb24oKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9qb2IuanMKdmFyIElKb2I7CnZhciBpbml0X2pvYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9qb2IuanMiKCkgewogICAgaW5pdF9maW5hbmNlKCk7CiAgICBpbml0X2NvbXBhbnkoKTsKICAgIGluaXRfY29udGFjdCgpOwogICAgSUpvYiA9IGNsYXNzIHsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvbW9uZ29kZXNjcmlwdG9yLmpzCnZhciBpbml0X21vbmdvZGVzY3JpcHRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9tb25nb2Rlc2NyaXB0b3IuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdGFjdGlvbi5qcwp2YXIgaW5pdF9vYmplY3RhY3Rpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvb2JqZWN0YWN0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kYXRhYmFzZS9vYmplY3RzdGF0dXMuanMKdmFyIGluaXRfb2JqZWN0c3RhdHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL29iamVjdHN0YXR1cy5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvd3JhcHBlZGRhdGEuanMKdmFyIGluaXRfd3JhcHBlZGRhdGEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2Uvd3JhcHBlZGRhdGEuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL2luZGV4LmpzCnZhciBkYXRhYmFzZV9leHBvcnRzID0ge307CnZhciBpbml0X2RhdGFiYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2RhdGFiYXNlL2luZGV4LmpzIigpIHsKICAgIGluaXRfbW9uZ29kZXNjcmlwdG9yKCk7CiAgICBpbml0X29iamVjdGFjdGlvbigpOwogICAgaW5pdF9vYmplY3RzdGF0dXMoKTsKICAgIGluaXRfd3JhcHBlZGRhdGEoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9sZXR0ZXIuanMKdmFyIGluaXRfbGV0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2xldHRlci5qcyIoKSB7CiAgICBpbml0X2J1c2luZXNzKCk7CiAgICBpbml0X2ZpbmFuY2UoKTsKICAgIGluaXRfZGF0YWJhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZGYuanMKdmFyIGluaXRfcGRmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3BkZi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcGVyc29uLmpzCnZhciBpbml0X3BlcnNvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9wZXJzb24uanMiKCkgewogICAgaW5pdF9jb250YWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvYnVzaW5lc3MvcHJvamVjdC5qcwp2YXIgaW5pdF9wcm9qZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL3Byb2plY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2J1c2luZXNzL2luZGV4LmpzCnZhciBidXNpbmVzc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGJ1c2luZXNzX2V4cG9ydHMsIHsKICBJSm9iOiAoKSA9PiBJSm9iCn0pOwp2YXIgaW5pdF9idXNpbmVzcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2FkZHJlc3MoKTsKICAgIGluaXRfY29tcGFueSgpOwogICAgaW5pdF9jb250YWN0KCk7CiAgICBpbml0X2pvYigpOwogICAgaW5pdF9sZXR0ZXIoKTsKICAgIGluaXRfcGRmKCk7CiAgICBpbml0X3BlcnNvbigpOwogICAgaW5pdF9wcm9qZWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9jb21taXRpbmZvLmpzCnZhciBpbml0X2NvbW1pdGluZm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9jb21taXRpbmZvLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL3N0YXR1c29iamVjdC5qcwp2YXIgaW5pdF9zdGF0dXNvYmplY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9zdGF0dXNvYmplY3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvZGUvaW5kZXguanMKdmFyIGNvZGVfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb2RlMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb2RlL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29tbWl0aW5mbygpOwogICAgaW5pdF9zdGF0dXNvYmplY3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvY29udGFpbmVyLmpzCnZhciBpbml0X2NvbnRhaW5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvY29udGFpbmVyLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvdm9sdW1lbW91bnQuanMKdmFyIGluaXRfdm9sdW1lbW91bnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL3ZvbHVtZW1vdW50LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMKdmFyIGNvbnRhaW5lcl9leHBvcnRzID0ge307CnZhciBpbml0X2NvbnRhaW5lcjIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGFpbmVyL2luZGV4LmpzIigpIHsKICAgIGluaXRfY29udGFpbmVyKCk7CiAgICBpbml0X3ZvbHVtZW1vdW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hcnRpY2xlLmpzCnZhciBpbml0X2FydGljbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hcnRpY2xlLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9hdXRob3IuanMKdmFyIGluaXRfYXV0aG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvYXV0aG9yLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9kb2N1bWVudGF0aW9uc2V0LmpzCnZhciBpbml0X2RvY3VtZW50YXRpb25zZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29udGVudC9kb2N1bWVudGF0aW9uc2V0LmpzIigpIHsKICAgIGluaXRfYXJ0aWNsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2NvbnRlbnQvaW5kZXguanMKdmFyIGNvbnRlbnRfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF9jb250ZW50MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzIigpIHsKICAgIGluaXRfYXJ0aWNsZSgpOwogICAgaW5pdF9hdXRob3IoKTsKICAgIGluaXRfZG9jdW1lbnRhdGlvbnNldCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvZGF0ZS5qcwp2YXIgaW5pdF9kYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvZGF0ZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC90aW1lLmpzCnZhciBpbml0X3RpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZ2VuZXJhbC90aW1lLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2luZGV4LmpzCnZhciBnZW5lcmFsX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfZ2VuZXJhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9nZW5lcmFsL2luZGV4LmpzIigpIHsKICAgIGluaXRfZGF0ZSgpOwogICAgaW5pdF90aW1lKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jZXJ0LmpzCnZhciBpbml0X2NlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9jZXJ0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NuYW1lLmpzCnZhciBJQ25hbWVEZXNjcmlwdG9yOwp2YXIgaW5pdF9jbmFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2NuYW1lLmpzIigpIHsKICAgIGluaXRfY2VydCgpOwogICAgSUNuYW1lRGVzY3JpcHRvciA9IGNsYXNzIHsKICAgIH07CiAgICA7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kZXZpY2UuanMKdmFyIGluaXRfZGV2aWNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZGV2aWNlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Rucy5qcwp2YXIgaW5pdF9kbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kbnMuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvZG5zY2hhbGxlbmdlLmpzCnZhciBpbml0X2Ruc2NoYWxsZW5nZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2Ruc2NoYWxsZW5nZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kb21haW5kZWxlZ2F0aW9uLmpzCnZhciBpbml0X2RvbWFpbmRlbGVnYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9kb21haW5kZWxlZ2F0aW9uLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL2p3dC5qcwp2YXIgaW5pdF9qd3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9qd3QuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvbmV0d29ya25vZGUuanMKdmFyIGluaXRfbmV0d29ya25vZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9uZXR3b3Jrbm9kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXF1ZXN0LmpzCnZhciBpbml0X3JlcXVlc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXF1ZXN0LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3JldmVyc2Vwcm94eS5qcwp2YXIgaW5pdF9yZXZlcnNlcHJveHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9yZXZlcnNlcHJveHkuanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvc3NoLmpzCnZhciBpbml0X3NzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9uZXR3b3JrL3NzaC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcwp2YXIgbmV0d29ya19leHBvcnRzID0ge307Cl9fZXhwb3J0KG5ldHdvcmtfZXhwb3J0cywgewogIElDbmFtZURlc2NyaXB0b3I6ICgpID0+IElDbmFtZURlc2NyaXB0b3IKfSk7CnZhciBpbml0X25ldHdvcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NlcnQoKTsKICAgIGluaXRfY25hbWUoKTsKICAgIGluaXRfZGV2aWNlKCk7CiAgICBpbml0X2RucygpOwogICAgaW5pdF9kbnNjaGFsbGVuZ2UoKTsKICAgIGluaXRfZG9tYWluZGVsZWdhdGlvbigpOwogICAgaW5pdF9qd3QoKTsKICAgIGluaXRfbmV0d29ya25vZGUoKTsKICAgIGluaXRfcmVxdWVzdCgpOwogICAgaW5pdF9yZXZlcnNlcHJveHkoKTsKICAgIGluaXRfc3NoKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9wcm9kdWN0LmpzCnZhciBpbml0X3Byb2R1Y3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc2Fhcy9wcm9kdWN0LmpzIigpIHsKICAgIGluaXRfY29tcGFueSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvc3Vic2NyaXB0aW9ucGxhbi5qcwp2YXIgaW5pdF9zdWJzY3JpcHRpb25wbGFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3NhYXMvc3Vic2NyaXB0aW9ucGxhbi5qcyIoKSB7CiAgICBpbml0X3Byb2R1Y3QoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzCnZhciBzYWFzX2V4cG9ydHMgPSB7fTsKdmFyIGluaXRfc2FhcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzIigpIHsKICAgIGluaXRfc3Vic2NyaXB0aW9ucGxhbigpOwogICAgaW5pdF9wcm9kdWN0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcwp2YXIgc3RvcmFnZV9leHBvcnRzID0ge307CnZhciBpbml0X3N0b3JhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvc3RvcmFnZS9pbmRleC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rLmpzCnZhciBpbml0X2xpbmszID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvbGluay5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9tZW51aXRlbS5qcwp2YXIgaW5pdF9tZW51aXRlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL21lbnVpdGVtLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy93ZWJzaXRlL2xpbmtibG9jay5qcwp2YXIgaW5pdF9saW5rYmxvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9saW5rYmxvY2suanMiKCkgewogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvaW5kZXguanMKdmFyIHdlYnNpdGVfZXhwb3J0cyA9IHt9Owp2YXIgaW5pdF93ZWJzaXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3dlYnNpdGUvaW5kZXguanMiKCkgewogICAgaW5pdF9saW5rMygpOwogICAgaW5pdF9tZW51aXRlbSgpOwogICAgaW5pdF9saW5rYmxvY2soKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NANC40LjQvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy90eXBlZmVzdC5vd24uanMKdmFyIGluaXRfdHlwZWZlc3Rfb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A0LjQuNC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3R5cGVmZXN0Lm93bi5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMKdmFyIGRpc3RfdHNfZXhwb3J0czIzID0ge307Cl9fZXhwb3J0KGRpc3RfdHNfZXhwb3J0czIzLCB7CiAgYnVzaW5lc3M6ICgpID0+IGJ1c2luZXNzX2V4cG9ydHMsCiAgY29kZTogKCkgPT4gY29kZV9leHBvcnRzLAogIGNvbnRhaW5lcjogKCkgPT4gY29udGFpbmVyX2V4cG9ydHMsCiAgY29udGVudDogKCkgPT4gY29udGVudF9leHBvcnRzLAogIGRhdGFiYXNlOiAoKSA9PiBkYXRhYmFzZV9leHBvcnRzLAogIGZpbmFuY2U6ICgpID0+IGZpbmFuY2VfZXhwb3J0cywKICBnZW5lcmFsOiAoKSA9PiBnZW5lcmFsX2V4cG9ydHMsCiAgbmV0d29yazogKCkgPT4gbmV0d29ya19leHBvcnRzLAogIHNhYXM6ICgpID0+IHNhYXNfZXhwb3J0cywKICBzdG9yYWdlOiAoKSA9PiBzdG9yYWdlX2V4cG9ydHMsCiAgd2Vic2l0ZTogKCkgPT4gd2Vic2l0ZV9leHBvcnRzCn0pOwp2YXIgaW5pdF9kaXN0X3RzMjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDQuNC40L25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvaW5kZXguanMiKCkgewogICAgaW5pdF9idXNpbmVzcygpOwogICAgaW5pdF9jb2RlMygpOwogICAgaW5pdF9jb250YWluZXIyKCk7CiAgICBpbml0X2RhdGFiYXNlKCk7CiAgICBpbml0X2ZpbmFuY2UoKTsKICAgIGluaXRfY29udGVudDMoKTsKICAgIGluaXRfZ2VuZXJhbCgpOwogICAgaW5pdF9uZXR3b3JrKCk7CiAgICBpbml0X3NhYXMoKTsKICAgIGluaXRfc3RvcmFnZSgpOwogICAgaW5pdF93ZWJzaXRlKCk7CiAgICBpbml0X3R5cGVmZXN0X293bigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLnBsdWdpbnMuanMKdmFyIGluaXRfd2Vic2V0dXBfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czIyKCk7CiAgICBpbml0X2Rpc3RfdHMyMSgpOwogICAgaW5pdF9kaXN0X3RzMjMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy9pbnRlcmZhY2VzL2luZGV4LmpzCnZhciBpbml0X2ludGVyZmFjZXMyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanMKdmFyIFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBUYWcgPSBjbGFzcyB7CiAgICAgIGFwcGVuZFRvRG9tKCkgewogICAgICAgIGlmICghdGhpcy5lbGVtZW50UmVmLnBhcmVudEVsZW1lbnQgJiYgIXRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlKSB7CiAgICAgICAgICBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgiaGVhZCIpWzBdLmFwcGVuZENoaWxkKHRoaXMuZWxlbWVudFJlZik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlbW92ZUZyb21Eb20oKSB7CiAgICAgICAgaWYgKHRoaXMuZWxlbWVudFJlZi5wYXJlbnRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLmVsZW1lbnRSZWYucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzLmVsZW1lbnRSZWYpOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5lbGVtZW50UmVmLnBhcmVudE5vZGUpIHsKICAgICAgICAgIHRoaXMuZWxlbWVudFJlZi5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMuZWxlbWVudFJlZik7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLmpzb25sZHRhZy5qcwp2YXIgSnNvbkxkVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2Nrcyt3ZWJzZXR1cEAzLjAuMTkvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL3dlYnNldHVwL2Rpc3RfdHMvd2Vic2V0dXAuY2xhc3Nlcy50YWcuanNvbmxkdGFnLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgaW5pdF9pbnRlcmZhY2VzMigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgSnNvbkxkVGFnID0gY2xhc3MgX0pzb25MZFRhZyBleHRlbmRzIFRhZyB7CiAgICAgIHN0YXRpYyBjcmVhdGVDb21wYW55SnNvbkxkKGNvbXBhbnlEYXRhQXJnKSB7CiAgICAgICAgY29uc3QgY29tcGFueUxkID0gewogICAgICAgICAgIkBjb250ZXh0IjogImh0dHBzOi8vc2NoZW1hLm9yZyIsCiAgICAgICAgICAiQHR5cGUiOiAiQ29ycG9yYXRpb24iLAogICAgICAgICAgbmFtZTogY29tcGFueURhdGFBcmcubmFtZSwKICAgICAgICAgIGFsdGVybmF0ZU5hbWU6IGNvbXBhbnlEYXRhQXJnLm5hbWUucmVwbGFjZSgiIEdtYkgiLCAiIiksCiAgICAgICAgICB1cmw6IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3Qud2Vic2l0ZSwKICAgICAgICAgIGxvZ286IGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCwKICAgICAgICAgIGNvbnRhY3RQb2ludDogewogICAgICAgICAgICAiQHR5cGUiOiAiQ29udGFjdFBvaW50IiwKICAgICAgICAgICAgdGVsZXBob25lOiBjb21wYW55RGF0YUFyZy5jb250YWN0LnBob25lLAogICAgICAgICAgICBjb250YWN0VHlwZTogImN1c3RvbWVyIHNlcnZpY2UiLAogICAgICAgICAgICBhcmVhU2VydmVkOiAiREUiLAogICAgICAgICAgICBhdmFpbGFibGVMYW5ndWFnZTogWyJlbiIsICJHZXJtYW4iXQogICAgICAgICAgfSwKICAgICAgICAgIHNhbWVBczogW10KICAgICAgICB9OwogICAgICAgIGlmIChjb21wYW55RGF0YUFyZy5jb250YWN0LmZhY2Vib29rVXJsKSB7CiAgICAgICAgICBjb21wYW55TGQuc2FtZUFzLnB1c2goY29tcGFueURhdGFBcmcuY29udGFjdC5mYWNlYm9va1VybCk7CiAgICAgICAgfQogICAgICAgIGlmIChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpIHsKICAgICAgICAgIGNvbXBhbnlMZC5zYW1lQXMucHVzaChjb21wYW55RGF0YUFyZy5jb250YWN0LnR3aXR0ZXJVcmwpOwogICAgICAgIH0KICAgICAgICBjb25zdCBsZFRhZyA9IG5ldyBfSnNvbkxkVGFnKGNvbXBhbnlMZCk7CiAgICAgICAgcmV0dXJuIGxkVGFnOwogICAgICB9CiAgICAgIHN0YXRpYyBjcmVhdGVOZXdzQXJ0aWNsZUpzb25MZChuZXdzQXJ0aWNsZUFyZykgewogICAgICAgIGNvbnN0IG5ld3NBcnRpY2xlTGQgPSB7CiAgICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAgICJAdHlwZSI6ICJOZXdzQXJ0aWNsZSIsCiAgICAgICAgICBtYWluRW50aXR5T2ZQYWdlOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJXZWJQYWdlIiwKICAgICAgICAgICAgIkBpZCI6IHdpbmRvdy5sb2NhdGlvbi5ocmVmCiAgICAgICAgICB9LAogICAgICAgICAgaGVhZGxpbmU6ICJBcnRpY2xlIGhlYWRsaW5lIiwKICAgICAgICAgIGltYWdlOiBbbmV3c0FydGljbGVBcmcuZmVhdHVyZWRJbWFnZVVybF0sCiAgICAgICAgICBkYXRlUHVibGlzaGVkOiBuZXcgRGF0ZShuZXdzQXJ0aWNsZUFyZy50aW1lc3RhbXApLnRvSVNPU3RyaW5nKCksCiAgICAgICAgICBkYXRlTW9kaWZpZWQ6IG5ldyBEYXRlKG5ld3NBcnRpY2xlQXJnLnRpbWVzdGFtcCkudG9JU09TdHJpbmcoKSwKICAgICAgICAgIGF1dGhvcjogewogICAgICAgICAgICAiQHR5cGUiOiAiUGVyc29uIiwKICAgICAgICAgICAgbmFtZTogYCR7bmV3c0FydGljbGVBcmcuYXV0aG9yLmZpcnN0TmFtZX0gJHtuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZX1gCiAgICAgICAgICB9LAogICAgICAgICAgcHVibGlzaGVyOiB7CiAgICAgICAgICAgICJAdHlwZSI6ICJPcmdhbml6YXRpb24iLAogICAgICAgICAgICBuYW1lOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZSwKICAgICAgICAgICAgbG9nbzogewogICAgICAgICAgICAgICJAdHlwZSI6ICJJbWFnZU9iamVjdCIsCiAgICAgICAgICAgICAgdXJsOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3Iuc3VyTmFtZQogICAgICAgICAgICAgIC8vIFRPRE8KICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiBuZXdzQXJ0aWNsZUFyZy5hdXRob3IuZmlyc3ROYW1lCiAgICAgICAgfTsKICAgICAgICBjb25zdCBsZFRhZyA9IG5ldyBfSnNvbkxkVGFnKG5ld3NBcnRpY2xlTGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICBzdGF0aWMgY3JlYXRlUHJvZHVjdEpzb25MZChwcm9kdWN0QXJnLCBwdWJsaXNoZXJBcmcpIHsKICAgICAgICBjb25zdCBwcm9kdWN0TGQgPSB7CiAgICAgICAgICAiQGNvbnRleHQiOiAiaHR0cHM6Ly9zY2hlbWEub3JnIiwKICAgICAgICAgICJAdHlwZSI6ICJTb2Z0d2FyZUFwcGxpY2F0aW9uIiwKICAgICAgICAgIG5hbWU6IHByb2R1Y3RBcmcubmFtZSwKICAgICAgICAgIGRlc2NyaXB0aW9uOiBwcm9kdWN0QXJnLmRlc2NyaXB0aW9uLAogICAgICAgICAgb3BlcmF0aW5nU3lzdGVtOiBwcm9kdWN0QXJnLm9zLAogICAgICAgICAgYXBwbGljYXRpb25DYXRlZ29yeTogcHJvZHVjdEFyZy5jYXRlZ29yeSwKICAgICAgICAgIG9mZmVyczogewogICAgICAgICAgICAiQHR5cGUiOiAiT2ZmZXIiLAogICAgICAgICAgICBuYW1lOiAiVXNlci1iYXNlZCBQbGFuIiwKICAgICAgICAgICAgcHJpY2VTcGVjaWZpY2F0aW9uOiB7CiAgICAgICAgICAgICAgIkB0eXBlIjogIlByb3BlcnR5VmFsdWVTcGVjaWZpY2F0aW9uIiwKICAgICAgICAgICAgICB2YWx1ZU5hbWU6ICJOdW1iZXIgb2YgVXNlcnMiLAogICAgICAgICAgICAgIHZhbHVlUmVxdWlyZWQ6IHRydWUsCiAgICAgICAgICAgICAgcHJpY2U6ICI0Ljk5IiwKICAgICAgICAgICAgICBwcmljZUN1cnJlbmN5OiAiRVVSIgogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgcHVibGlzaGVyOiB0aGlzLmNyZWF0ZUNvbXBhbnlKc29uTGQocHVibGlzaGVyQXJnKS5lbGVtZW50UmVmLnRleHRDb250ZW50LAogICAgICAgICAgc2NyZWVuc2hvdDogImh0dHBzOi8vd3d3LnNvY2lhbC5pby9zY3JlZW5zaG90LnBuZyIsCiAgICAgICAgICB1cmw6ICJodHRwczovL3d3dy5zb2NpYWwuaW8vIgogICAgICAgIH07CiAgICAgICAgY29uc3QgbGRUYWcgPSBuZXcgX0pzb25MZFRhZyhwcm9kdWN0TGQpOwogICAgICAgIHJldHVybiBsZFRhZzsKICAgICAgfQogICAgICAvLyBJTlNUQU5DRQogICAgICBjb25zdHJ1Y3RvcihsZE9iamVjdEFyZykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgY29uc3QganNvbkxkRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOwogICAgICAgIGpzb25MZEVsZW1lbnQudHlwZSA9ICJhcHBsaWNhdGlvbi9sZCtqc29uIjsKICAgICAgICBqc29uTGRFbGVtZW50LnRleHQgPSBKU09OLnN0cmluZ2lmeShsZE9iamVjdEFyZyk7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0ganNvbkxkRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5vcGVuZ3JhcGh0YWcuanMKdmFyIE9wZW5ncmFwaFRhZzsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm9wZW5ncmFwaHRhZy5qcyIoKSB7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIE9wZW5ncmFwaFRhZyA9IGNsYXNzIF9PcGVuZ3JhcGhUYWcgZXh0ZW5kcyBUYWcgewogICAgICBzdGF0aWMgY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MobmV3c0FydGljbGVBcmcpIHsKICAgICAgICBjb25zdCB0YWdBcnJheSA9IFtdOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnVybCIsIG5ld3NBcnRpY2xlQXJnLnVybCkpOwogICAgICAgIHRhZ0FycmF5LnB1c2gobmV3IF9PcGVuZ3JhcGhUYWcoIm9nOnRpdGxlIiwgbmV3c0FydGljbGVBcmcudGl0bGUpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzpkZXNjcmlwdGlvbiIsIG5ld3NBcnRpY2xlQXJnLmNvbnRlbnQpKTsKICAgICAgICB0YWdBcnJheS5wdXNoKG5ldyBfT3BlbmdyYXBoVGFnKCJvZzppbWFnZSIsIG5ld3NBcnRpY2xlQXJnLmZlYXR1cmVkSW1hZ2VVcmwpKTsKICAgICAgICByZXR1cm4gdGFnQXJyYXk7CiAgICAgIH0KICAgICAgc3RhdGljIGNyZWF0ZVByb2R1Y3RPZ1RhZ3MocHJvZHVjdEFyZykgewogICAgICAgIGNvbnN0IHRhZ0FycmF5ID0gW107CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dXJsIiwgZ2xvYmFsVGhpcy5sb2NhdGlvbi5ocmVmKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6dGl0bGUiLCBgJHtwcm9kdWN0QXJnLm5hbWV9IC0gJHtwcm9kdWN0QXJnLnNsb2dhbn1gKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6c2l0ZV9uYW1lIiwgcHJvZHVjdEFyZy5uYW1lKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6ZGVzY3JpcHRpb24iLCBwcm9kdWN0QXJnLmRlc2NyaXB0aW9uKSk7CiAgICAgICAgdGFnQXJyYXkucHVzaChuZXcgX09wZW5ncmFwaFRhZygib2c6aW1hZ2UiLCBwcm9kdWN0QXJnLmxvZ29MaW5rKSk7CiAgICAgICAgcmV0dXJuIHRhZ0FycmF5OwogICAgICB9CiAgICAgIGNvbnN0cnVjdG9yKHByb3BlcnR5TmFtZUFyZywgY29udGVudEFyZykgewogICAgICAgIHN1cGVyKCk7CiAgICAgICAgY29uc3Qgb3BlbkdyYXBoRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTsKICAgICAgICBvcGVuR3JhcGhFbGVtZW50LnNldEF0dHJpYnV0ZSgicHJvcGVydHkiLCBwcm9wZXJ0eU5hbWVBcmcpOwogICAgICAgIG9wZW5HcmFwaEVsZW1lbnQuY29udGVudCA9IGNvbnRlbnRBcmc7CiAgICAgICAgdGhpcy5lbGVtZW50UmVmID0gb3BlbkdyYXBoRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ2xldmVsLmpzCnZhciBUYWdMZXZlbDsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdsZXZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ2xldmVsLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfanNvbmxkdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ21hbmFnZXIoKTsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGFnTGV2ZWwgPSBjbGFzcyB7CiAgICAgIHNldCB0aXRsZSh0aXRsZUFyZykgewogICAgICAgIHRoaXMudGl0bGVTdG9yZSA9IHRpdGxlQXJnOwogICAgICAgIGlmICh0aGlzLnN0YXRlID09PSAiZW5hYmxlZCIpIHsKICAgICAgICAgIGRvY3VtZW50LnRpdGxlID0gdGhpcy50aXRsZVN0b3JlOwogICAgICAgIH0KICAgICAgfQogICAgICBnZXQgdGl0bGUoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudGl0bGVTdG9yZTsKICAgICAgfQogICAgICBjb25zdHJ1Y3Rvcih0YWdNYW5hZ2VyUmVmQXJnLCBsZXZlbFR5cGUpIHsKICAgICAgICB0aGlzLnRhZ3MgPSBbXTsKICAgICAgICB0aGlzLnN0YXRlID0gImRpc2FibGVkIjsKICAgICAgICB0aGlzLnRhZ01hbmFnZXJSZWYgPSB0YWdNYW5hZ2VyUmVmQXJnOwogICAgICB9CiAgICAgIGFkZFRhZyh0YWdBcmcpIHsKICAgICAgICBpZiAodGFnQXJnIGluc3RhbmNlb2YgQXJyYXkpIHsKICAgICAgICAgIGZvciAoY29uc3QgdGFnQXJnMiBvZiB0YWdBcmcpIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcodGFnQXJnMik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMudGFncy5wdXNoKHRhZ0FyZyk7CiAgICAgICAgICBpZiAodGhpcy5zdGF0ZSA9PT0gImVuYWJsZWQiKSB7CiAgICAgICAgICAgIHRhZ0FyZy5hcHBlbmRUb0RvbSgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBhZGRDb21wYW55SW5mbyhjb21wYW55RGF0YUFyZykgewogICAgICAgIHRoaXMuYWRkVGFnKEpzb25MZFRhZy5jcmVhdGVDb21wYW55SnNvbkxkKGNvbXBhbnlEYXRhQXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygib2c6dHlwZSIsICJidXNpbmVzcy5idXNpbmVzcyIpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzp0aXRsZSIsIGNvbXBhbnlEYXRhQXJnLm5hbWUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzp1cmwiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LndlYnNpdGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJvZzppbWFnZSIsIGNvbXBhbnlEYXRhQXJnLmNvbnRhY3QubG9nb1VybCkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpzdHJlZXRfYWRkcmVzcyIsIGAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5zdHJlZXROYW1lfSAke2NvbXBhbnlEYXRhQXJnLmNvbnRhY3QuYWRkcmVzcy5ob3VzZU51bWJlcn1gKSk7CiAgICAgICAgdGhpcy5hZGRUYWcobmV3IE9wZW5ncmFwaFRhZygiYnVzaW5lc3M6Y29udGFjdF9kYXRhOmxvY2FsaXR5IiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLnBvc3RhbENvZGUpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6cmVnaW9uIiwgY29tcGFueURhdGFBcmcuY29udGFjdC5hZGRyZXNzLmNpdHkpKTsKICAgICAgICB0aGlzLmFkZFRhZyhuZXcgT3BlbmdyYXBoVGFnKCJidXNpbmVzczpjb250YWN0X2RhdGE6cG9zdGFsX2NvZGUiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MucG9zdGFsQ29kZSkpOwogICAgICAgIHRoaXMuYWRkVGFnKG5ldyBPcGVuZ3JhcGhUYWcoImJ1c2luZXNzOmNvbnRhY3RfZGF0YTpjb3VudHJ5X25hbWUiLCBjb21wYW55RGF0YUFyZy5jb250YWN0LmFkZHJlc3MuY291bnRyeSkpOwogICAgICB9CiAgICAgIGFkZE5ld3NBcnRpY2xlSW5mbyhhcnRpY2xlQXJnKSB7CiAgICAgICAgdGhpcy5hZGRUYWcoSnNvbkxkVGFnLmNyZWF0ZU5ld3NBcnRpY2xlSnNvbkxkKGFydGljbGVBcmcpKTsKICAgICAgICB0aGlzLmFkZFRhZyhPcGVuZ3JhcGhUYWcuY3JlYXRlTmV3c0FydGljbGVPZ1RhZ3MoYXJ0aWNsZUFyZykpOwogICAgICB9CiAgICAgIGFkZFByb2R1Y3RJbmZvKHByb2R1Y3RBcmcsIGNvbXBhbnlBcmcpIHsKICAgICAgICB0aGlzLmFkZFRhZyhKc29uTGRUYWcuY3JlYXRlUHJvZHVjdEpzb25MZChwcm9kdWN0QXJnLCBjb21wYW55QXJnKSk7CiAgICAgICAgdGhpcy5hZGRUYWcoT3BlbmdyYXBoVGFnLmNyZWF0ZVByb2R1Y3RPZ1RhZ3MocHJvZHVjdEFyZykpOwogICAgICB9CiAgICAgIGFzeW5jIGVuYWJsZSgpIHsKICAgICAgICBpZiAodGhpcy50aXRsZSkgewogICAgICAgICAgZG9jdW1lbnQudGl0bGUgPSB0aGlzLnRpdGxlOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IHRhZ0FyZyBvZiB0aGlzLnRhZ3MpIHsKICAgICAgICAgIHRhZ0FyZy5hcHBlbmRUb0RvbSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImVuYWJsZWQiOwogICAgICB9CiAgICAgIGFzeW5jIGRpc2FibGUoKSB7CiAgICAgICAgZm9yIChjb25zdCB0YWdBcmcgb2YgdGhpcy50YWdzKSB7CiAgICAgICAgICB0YWdBcmcucmVtb3ZlRnJvbURvbSgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRpc2FibGVkIjsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZy5tZXRhdGFnLmpzCnZhciBNZXRhVGFnOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19tZXRhdGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMudGFnLm1ldGF0YWcuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZygpOwogICAgTWV0YVRhZyA9IGNsYXNzIGV4dGVuZHMgVGFnIHsKICAgICAgY29uc3RydWN0b3IobWV0YU5hbWVBcmcsIGNvbnRlbnRBcmcpIHsKICAgICAgICBzdXBlcigpOwogICAgICAgIGNvbnN0IG1ldGFFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibWV0YSIpOwogICAgICAgIG1ldGFFbGVtZW50Lm5hbWUgPSBtZXRhTmFtZUFyZzsKICAgICAgICBtZXRhRWxlbWVudC5jb250ZW50ID0gY29udGVudEFyZzsKICAgICAgICB0aGlzLmVsZW1lbnRSZWYgPSBtZXRhRWxlbWVudDsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ21hbmFnZXIuanMKdmFyIFRhZ01hbmFnZXI7CnZhciBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRhZ21hbmFnZXIuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ2xldmVsKCk7CiAgICBpbml0X3dlYnNldHVwX3BsdWdpbnMoKTsKICAgIGluaXRfaW50ZXJmYWNlczIoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfbWV0YXRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190YWdfb3BlbmdyYXBodGFnKCk7CiAgICBUYWdNYW5hZ2VyID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICB0aGlzLmdsb2JhbExldmVsID0gbmV3IFRhZ0xldmVsKHRoaXMsICJnbG9iYWwiKTsKICAgICAgICB0aGlzLmJhc2VMZXZlbCA9IG5ldyBUYWdMZXZlbCh0aGlzLCAiYmFzZSIpOwogICAgICB9CiAgICAgIGFzeW5jIHNldHVwKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygiZ29vZ2xlIiwgIm5vdHJhbnNsYXRlIikpOwogICAgICAgIHRoaXMuZ2xvYmFsTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJyZXZpc2l0LWFmdGVyIiwgIjEgZGF5cyIpKTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSB7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpjYXJkIiwgInN1bW1hcnlfbGFyZ2VfaW1hZ2UiKSk7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpzaXRlIiwgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7CiAgICAgICAgICB0aGlzLmdsb2JhbExldmVsLmFkZFRhZyhuZXcgTWV0YVRhZygidHdpdHRlcjpjcmVhdG9yIiwgbWV0YU9iamVjdEFyZy50d2l0dGVySGFuZGxlKSk7CiAgICAgICAgfQogICAgICAgIHRoaXMuYmFzZUxldmVsLnRpdGxlID0gbWV0YU9iamVjdEFyZy50aXRsZTsKICAgICAgICBpZiAobWV0YU9iamVjdEFyZy5kZXNjcmlwdGlvbikgewogICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJkZXNjcmlwdGlvbiIsIG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pKTsKICAgICAgICB9CiAgICAgICAgaWYgKG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSB7CiAgICAgICAgICB0aGlzLmJhc2VMZXZlbC5hZGRUYWcobmV3IE1ldGFUYWcoImNhbm9uaWNhbCIsIG1ldGFPYmplY3RBcmcuY2Fub25pY2FsRG9tYWluKSk7CiAgICAgICAgfQogICAgICAgIHN3aXRjaCAodHJ1ZSkgewogICAgICAgICAgY2FzZSAobWV0YU9iamVjdEFyZy5sZENvbXBhbnkgJiYgIW1ldGFPYmplY3RBcmcubGRQcm9kdWN0KToKICAgICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkQ29tcGFueUluZm8obWV0YU9iamVjdEFyZy5sZENvbXBhbnkpOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgISFtZXRhT2JqZWN0QXJnLmxkUHJvZHVjdDoKICAgICAgICAgICAgdGhpcy5iYXNlTGV2ZWwuYWRkUHJvZHVjdEluZm8obWV0YU9iamVjdEFyZy5sZFByb2R1Y3QsIG1ldGFPYmplY3RBcmcubGRDb21wYW55KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMuZ2xvYmFsTGV2ZWwuZW5hYmxlKCk7CiAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHRoaXMuYmFzZUxldmVsOwogICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7CiAgICAgIH0KICAgICAgYXN5bmMgc2V0U3ViUGFnZUxldmVsKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBzdWJQYWdlTGV2ZWwgPSBuZXcgVGFnTGV2ZWwodGhpcywgInN1YnBhZ2UiKTsKICAgICAgICBzdWJQYWdlTGV2ZWwudGl0bGUgPSBtZXRhT2JqZWN0QXJnLnRpdGxlOwogICAgICAgIGlmIChtZXRhT2JqZWN0QXJnLmRlc2NyaXB0aW9uKSB7CiAgICAgICAgICBzdWJQYWdlTGV2ZWwuYWRkVGFnKG5ldyBNZXRhVGFnKCJkZXNjcmlwdGlvbiIsIG1ldGFPYmplY3RBcmcuZGVzY3JpcHRpb24pKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5hY3RpdmVMZXZlbC5kaXNhYmxlKCk7CiAgICAgICAgdGhpcy5hY3RpdmVMZXZlbCA9IHN1YlBhZ2VMZXZlbDsKICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmVuYWJsZSgpOwogICAgICAgIHJldHVybiBzdWJQYWdlTGV2ZWw7CiAgICAgIH0KICAgICAgYXN5bmMgcmV2ZXJ0VG9CYXNlTGV2ZWwoKSB7CiAgICAgICAgaWYgKHRoaXMuYWN0aXZlTGV2ZWwgIT09IHRoaXMuYmFzZUxldmVsKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmFjdGl2ZUxldmVsLmRpc2FibGUoKTsKICAgICAgICAgIHRoaXMuYWN0aXZlTGV2ZWwgPSB0aGlzLmJhc2VMZXZlbDsKICAgICAgICAgIGF3YWl0IHRoaXMuYWN0aXZlTGV2ZWwuZW5hYmxlKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMud2Vic2V0dXAuanMKdmFyIFdlYlNldHVwOwp2YXIgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3dlYnNldHVwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL3dlYnNldHVwLmNsYXNzZXMud2Vic2V0dXAuanMiKCkgewogICAgaW5pdF93ZWJzZXR1cF9wbHVnaW5zKCk7CiAgICBpbml0X2ludGVyZmFjZXMyKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnbWFuYWdlcigpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ2xldmVsKCk7CiAgICBXZWJTZXR1cCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3Iob3B0aW9uc0FyZykgewogICAgICAgIHRoaXMudGFnTWFuYWdlciA9IG5ldyBUYWdNYW5hZ2VyKCk7CiAgICAgICAgdGhpcy5yZWFkeURlZmVycmVkID0gZGlzdF90c19leHBvcnRzMjEuZGVmZXIoKTsKICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czIxLmRlZmVyKCk7CiAgICAgICAgdGhpcy5yZWFkeVByb21pc2UgPSB0aGlzLnJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JQcm9taXNlID0gdGhpcy5yZWFkeUZvclNtYXJ0c3NyRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICB0aGlzLm9wdGlvbnMgPSBvcHRpb25zQXJnOwogICAgICAgIHRoaXMuc2V0dXAoKS50aGVuKCgpID0+IHsKICAgICAgICAgIHRoaXMucmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbCkgewogICAgICAgICAgICB0aGlzLnJlYWR5Rm9yU21hcnRzc3JEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFuIGFzeW5jIHNldHVwIGNhbGxlZCBieSB0aGUgY29uc3RydWN0b3IKICAgICAgICovCiAgICAgIGFzeW5jIHNldHVwKG9wdGlvbnNBcmcpIHsKICAgICAgICBpZiAob3B0aW9uc0FyZykgewogICAgICAgICAgdGhpcy5vcHRpb25zID0gb3B0aW9uc0FyZzsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy50YWdNYW5hZ2VyLnNldHVwKHRoaXMub3B0aW9ucy5tZXRhT2JqZWN0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogcmV2ZXJ0cyB0aGUgYWN0aXZlIGxldmVsIGFuZCByZXR1cm5zIHRvIHRoZSBiYXNlIGxldmVsCiAgICAgICAqLwogICAgICByZXZlcnRUb0Jhc2VMZXZlbCgpIHsKICAgICAgICB0aGlzLnRhZ01hbmFnZXIucmV2ZXJ0VG9CYXNlTGV2ZWwoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0cyBhIHN1YnBhZ2UKICAgICAgICogQHBhcmFtIG1ldGFPYmplY3RBcmcKICAgICAgICovCiAgICAgIGFzeW5jIHNldFN1YkxldmVsKG1ldGFPYmplY3RBcmcpIHsKICAgICAgICBjb25zdCBzdWJMZXZlbCA9IGF3YWl0IHRoaXMudGFnTWFuYWdlci5zZXRTdWJQYWdlTGV2ZWwobWV0YU9iamVjdEFyZyk7CiAgICAgICAgcmV0dXJuIHN1YkxldmVsOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmbGFzaGVzIHRoZSB0aXRsZSB3aXRoIHRoZSBnaXZlbiB0ZXh0CiAgICAgICAqIEBwYXJhbSBmbGFzaFRleHRBcmcKICAgICAgICovCiAgICAgIGZsYXNoVGl0bGUoZmxhc2hUZXh0QXJnKSB7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGluZm9ybXMgc21hcnRzc3IgdGhhdCB0aGUgcGFnZSBpcyByZWFkeSB0byBiZSByZW5kZXJlZAogICAgICAgKi8KICAgICAgaW5mb3JtUmVhZHlGb3JTbWFydHNzcigpIHsKICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5zbWFydHNzcldhaXRGb3JSZWFkeVNpZ25hbCkgewogICAgICAgICAgY29uc29sZS5lcnJvcihgWW91IGhhdmUgbm90IGluZGljYXRlZCB0aGF0IHlvdSBpbmZvcm0gc21hcnRzc3IgYnkgYSBkZWRpY2F0ZWQgc2lnbmFsISBQbGVhc2UgY29uc2lkZXIgZG9pbmcgc28hYCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVhZHlGb3JTbWFydHNzckRlZmVycmVkLnJlc29sdmUoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRpdGxlLmpzCnZhciBUaXRsZTsKdmFyIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190aXRsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK3dlYnNldHVwQDMuMC4xOS9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3Mvd2Vic2V0dXAvZGlzdF90cy93ZWJzZXR1cC5jbGFzc2VzLnRpdGxlLmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfcGx1Z2lucygpOwogICAgVGl0bGUgPSBjbGFzcyB7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyNCA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyNCwgewogIEpzb25MZFRhZzogKCkgPT4gSnNvbkxkVGFnLAogIE1ldGFUYWc6ICgpID0+IE1ldGFUYWcsCiAgT3BlbmdyYXBoVGFnOiAoKSA9PiBPcGVuZ3JhcGhUYWcsCiAgVGl0bGU6ICgpID0+IFRpdGxlLAogIFdlYlNldHVwOiAoKSA9PiBXZWJTZXR1cAp9KTsKdmFyIGluaXRfZGlzdF90czI0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3Mrd2Vic2V0dXBAMy4wLjE5L25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy93ZWJzZXR1cC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc193ZWJzZXR1cCgpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19tZXRhdGFnKCk7CiAgICBpbml0X3dlYnNldHVwX2NsYXNzZXNfdGFnX29wZW5ncmFwaHRhZygpOwogICAgaW5pdF93ZWJzZXR1cF9jbGFzc2VzX3RhZ19qc29ubGR0YWcoKTsKICAgIGluaXRfd2Vic2V0dXBfY2xhc3Nlc190aXRsZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsucGx1Z2lucy5qcwp2YXIgaW1wb3J0X3N5bWJvbF90cmVlMjsKdmFyIGluaXRfbGlrX3BsdWdpbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AcHVzaC5yb2NrcytsaWtANi4yLjIvbm9kZV9tb2R1bGVzL0BwdXNoLnJvY2tzL2xpay9kaXN0X3RzL2xpay5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czMoKTsKICAgIGluaXRfZGlzdF90czUoKTsKICAgIGluaXRfZGlzdF90cygpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgaW5pdF9kaXN0X3RzNigpOwogICAgaW1wb3J0X3N5bWJvbF90cmVlMiA9IF9fdG9FU00ocmVxdWlyZV9TeW1ib2xUcmVlKCksIDEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuZmFzdG1hcC5qcwp2YXIgRmFzdE1hcDI7CnZhciBpbml0X2xpa19mYXN0bWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuZmFzdG1hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBGYXN0TWFwMiA9IGNsYXNzIF9GYXN0TWFwIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5tYXBPYmplY3QgPSB7fTsKICAgICAgfQogICAgICBpc1VuaXF1ZUtleShrZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5tYXBPYmplY3Rba2V5QXJnXSA/IGZhbHNlIDogdHJ1ZTsKICAgICAgfQogICAgICBhZGRUb01hcChrZXlBcmcsIG9iamVjdEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIGlmICh0aGlzLmlzVW5pcXVlS2V5KGtleUFyZykgfHwgb3B0aW9uc0FyZyAmJiBvcHRpb25zQXJnLmZvcmNlKSB7CiAgICAgICAgICB0aGlzLm1hcE9iamVjdFtrZXlBcmddID0gb2JqZWN0QXJnOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZ2V0QnlLZXkoa2V5QXJnKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubWFwT2JqZWN0W2tleUFyZ107CiAgICAgIH0KICAgICAgcmVtb3ZlRnJvbU1hcChrZXlBcmcpIHsKICAgICAgICBjb25zdCByZW1vdmVkSXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5QXJnKTsKICAgICAgICBkZWxldGUgdGhpcy5tYXBPYmplY3Rba2V5QXJnXTsKICAgICAgICByZXR1cm4gcmVtb3ZlZEl0ZW07CiAgICAgIH0KICAgICAgZ2V0S2V5cygpIHsKICAgICAgICBjb25zdCBrZXlzMiA9IFtdOwogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIGluIHRoaXMubWFwT2JqZWN0KSB7CiAgICAgICAgICBpZiAodGhpcy5tYXBPYmplY3Rba2V5QXJnXSkgewogICAgICAgICAgICBrZXlzMi5wdXNoKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBrZXlzMjsKICAgICAgfQogICAgICBjbGVhbigpIHsKICAgICAgICB0aGlzLm1hcE9iamVjdCA9IHt9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IEZhc3RtYXAgdGhhdCBpbmNsdWRlcyBhbGwgdmFsdWVzIGZyb20gdGhpcyBhbmQgYWxsIGZyb20gdGhlIGZhc3RtYXAgaW4gdGhlIGFyZ3VtZW50CiAgICAgICAqLwogICAgICBjb25jYXQoZmFzdE1hcEFyZykgewogICAgICAgIGNvbnN0IGNvbmNhdGVkRmFzdG1hcCA9IG5ldyBfRmFzdE1hcCgpOwogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uY2F0ZWRGYXN0bWFwLmFkZFRvTWFwKGtleTIsIHRoaXMuZ2V0QnlLZXkoa2V5MikpOwogICAgICAgIH0KICAgICAgICBmb3IgKGNvbnN0IGtleTIgb2YgZmFzdE1hcEFyZy5nZXRLZXlzKCkpIHsKICAgICAgICAgIGNvbmNhdGVkRmFzdG1hcC5hZGRUb01hcChrZXkyLCBmYXN0TWFwQXJnLmdldEJ5S2V5KGtleTIpLCB7CiAgICAgICAgICAgIGZvcmNlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGNvbmNhdGVkRmFzdG1hcDsKICAgICAgfQogICAgICAvKioKICAgICAgICogdHJpZXMgdG8gbWVyZ2UgYW5vdGhlciBGYXN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIGZhc3RNYXBBcmcKICAgICAgICovCiAgICAgIGFkZEFsbEZyb21PdGhlcihmYXN0TWFwQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGZhc3RNYXBBcmcuZ2V0S2V5cygpKSB7CiAgICAgICAgICB0aGlzLmFkZFRvTWFwKGtleTIsIGZhc3RNYXBBcmcuZ2V0QnlLZXkoa2V5MiksIHsKICAgICAgICAgICAgZm9yY2U6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyBmaW5kKGZpbmRGdW5jdGlvbkFyZykgewogICAgICAgIGZvciAoY29uc3Qga2V5MiBvZiB0aGlzLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMuZ2V0QnlLZXkoa2V5Mik7CiAgICAgICAgICBjb25zdCBmaW5kRnVuY3Rpb25SZXN1bHQgPSBhd2FpdCBmaW5kRnVuY3Rpb25BcmcoaXRlbSk7CiAgICAgICAgICBpZiAoZmluZEZ1bmN0aW9uUmVzdWx0KSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLm9iamVjdG1hcC5qcwp2YXIgdW5pMiwgT2JqZWN0TWFwMjsKdmFyIGluaXRfbGlrX29iamVjdG1hcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BwdXNoLnJvY2tzK2xpa0A2LjIuMi9ub2RlX21vZHVsZXMvQHB1c2gucm9ja3MvbGlrL2Rpc3RfdHMvbGlrLm9iamVjdG1hcC5qcyIoKSB7CiAgICBpbml0X2xpa19wbHVnaW5zKCk7CiAgICBpbml0X2xpa19mYXN0bWFwKCk7CiAgICB1bmkyID0gKHByZWZpeDQgPSAidW5pIikgPT4gewogICAgICByZXR1cm4gYCR7cHJlZml4NH14eHh4eHh4eHh4eGAucmVwbGFjZSgvW3h5XS9nLCAoYzExKSA9PiB7CiAgICAgICAgY29uc3QgcjExID0gTWF0aC5yYW5kb20oKSAqIDE2IHwgMDsKICAgICAgICBjb25zdCB2NSA9IGMxMSA9PT0gIngiID8gcjExIDogcjExICYgMyB8IDg7CiAgICAgICAgcmV0dXJuIHY1LnRvU3RyaW5nKDE2KTsKICAgICAgfSk7CiAgICB9OwogICAgT2JqZWN0TWFwMiA9IGNsYXNzIF9PYmplY3RNYXAgewogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIG5ldyBpbnN0YW5jZQogICAgICAgKi8KICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5mYXN0TWFwID0gbmV3IEZhc3RNYXAyKCk7CiAgICAgICAgdGhpcy5ldmVudFN1YmplY3QgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlN1YmplY3QoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkcyBhbiBvYmplY3QgbWFwcGVkIHRvIGEgc3RyaW5nCiAgICAgICAqIHRoZSBzdHJpbmcgbXVzdCBiZSB1bmlxdWUKICAgICAgICovCiAgICAgIGFkZE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRUb01hcCh1bmlxdWVLZXlBcmcsIG9iamVjdEFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGZhc3Rlc3Qgd2F5IHRvIGdldCBhbiBvYmplY3QgZnJvbSB0aGUgbWFwCiAgICAgICAqIEBwYXJhbSB1bmlxdWVLZXkKICAgICAgICovCiAgICAgIGdldE1hcHBlZFVuaXF1ZSh1bmlxdWVLZXlBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KHVuaXF1ZUtleUFyZyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBrZXkKICAgICAgICogQHBhcmFtIGZ1bmN0aW9uQXJnCiAgICAgICAqLwogICAgICByZW1vdmVNYXBwZWRVbmlxdWUodW5pcXVlS2V5KSB7CiAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5nZXRNYXBwZWRVbmlxdWUodW5pcXVlS2V5KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIG9iamVjdCB0byBPYmplY3RtYXAKICAgICAgICogcmV0dXJucyBmYWxzZSBpZiB0aGUgb2JqZWN0IGlzIGFscmVhZHkgaW4gdGhlIG1hcAogICAgICAgKiByZXR1cm5zIHRydWUgaWYgdGhlIG9iamVjdCB3YXMgYWRkZWQgc3VjY2Vzc2Z1bGx5CiAgICAgICAqLwogICAgICBhZGQob2JqZWN0QXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgY29uc3Qgb2JqZWN0ID0gdGhpcy5mYXN0TWFwLmdldEJ5S2V5KGtleUFyZyk7CiAgICAgICAgICBpZiAob2JqZWN0ID09PSBvYmplY3RBcmcpIHsKICAgICAgICAgICAgcmV0dXJuIGtleUFyZzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgdW5pcXVlS2V5ID0gdW5pMigia2V5Iik7CiAgICAgICAgdGhpcy5hZGRNYXBwZWRVbmlxdWUodW5pcXVlS2V5LCBvYmplY3RBcmcpOwogICAgICAgIHRoaXMuZXZlbnRTdWJqZWN0Lm5leHQoewogICAgICAgICAgb3BlcmF0aW9uOiAiYWRkIiwKICAgICAgICAgIHBheWxvYWQ6IG9iamVjdEFyZwogICAgICAgIH0pOwogICAgICAgIHJldHVybiB1bmlxdWVLZXk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGxpa2UgLmFkZCBidXQgYWRkcyBhbiB3aG9sZSBhcnJheSBvZiBvYmplY3RzCiAgICAgICAqLwogICAgICBhZGRBcnJheShvYmplY3RBcnJheUFyZykgewogICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiBvYmplY3RBcnJheUFyZykgewogICAgICAgICAgdGhpcy5hZGQoaXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBvYmplY3QgaXMgaW4gT2JqZWN0bWFwCiAgICAgICAqLwogICAgICBjaGVja0Zvck9iamVjdChvYmplY3RBcmcpIHsKICAgICAgICByZXR1cm4gISF0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXQga2V5IGZvciBvYmplY3QKICAgICAgICogQHBhcmFtIGZpbmRGdW5jdGlvbgogICAgICAgKi8KICAgICAgZ2V0S2V5Rm9yT2JqZWN0KG9iamVjdEFyZykgewogICAgICAgIGxldCBmb3VuZEtleSA9IG51bGw7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgaWYgKCFmb3VuZEtleSAmJiB0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSA9PT0gb2JqZWN0QXJnKSB7CiAgICAgICAgICAgIGZvdW5kS2V5ID0ga2V5QXJnOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZEtleTsKICAgICAgfQogICAgICAvKioKICAgICAgICogZmluZCBvYmplY3QKICAgICAgICovCiAgICAgIGFzeW5jIGZpbmQoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZmFzdE1hcC5maW5kKGZpbmRGdW5jdGlvbik7CiAgICAgIH0KICAgICAgZmluZFN5bmMoZmluZEZ1bmN0aW9uKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgaWYgKGZpbmRGdW5jdGlvbih0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSkpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuZ2V0TWFwcGVkVW5pcXVlKGtleUFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBmaW5kcyBhIHNwZWNpZmljIGVsZW1lbnQgYW5kIHRoZW4gcmVtb3ZlcyBpdAogICAgICAgKi8KICAgICAgYXN5bmMgZmluZE9uZUFuZFJlbW92ZShmaW5kRnVuY3Rpb24pIHsKICAgICAgICBjb25zdCBmb3VuZEVsZW1lbnQgPSBhd2FpdCB0aGlzLmZpbmQoZmluZEZ1bmN0aW9uKTsKICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLnJlbW92ZShmb3VuZEVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50OwogICAgICB9CiAgICAgIGZpbmRPbmVBbmRSZW1vdmVTeW5jKGZpbmRGdW5jdGlvbikgewogICAgICAgIGNvbnN0IGZvdW5kRWxlbWVudCA9IHRoaXMuZmluZFN5bmMoZmluZEZ1bmN0aW9uKTsKICAgICAgICBpZiAoZm91bmRFbGVtZW50KSB7CiAgICAgICAgICB0aGlzLnJlbW92ZShmb3VuZEVsZW1lbnQpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gZm91bmRFbGVtZW50OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBydW4gZnVuY3Rpb24gZm9yIGVhY2ggaXRlbSBpbiBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGFzeW5jIGZvckVhY2goZnVuY3Rpb25BcmcpIHsKICAgICAgICBmb3IgKGNvbnN0IGtleUFyZyBvZiB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpKSB7CiAgICAgICAgICBhd2FpdCBmdW5jdGlvbkFyZyh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBnZXRzIGFuIG9iamVjdCBpbiB0aGUgT2JzZXJ2YWJsZW1hcCBhbmQgcmVtb3ZlcyBpdCwgc28gaXQgY2FuJ3QgYmUgcmV0cmlldmVkIGFnYWluCiAgICAgICAqLwogICAgICBnZXRPbmVBbmRSZW1vdmUoKSB7CiAgICAgICAgY29uc3Qga2V5czIgPSB0aGlzLmZhc3RNYXAuZ2V0S2V5cygpOwogICAgICAgIGlmIChrZXlzMi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBrZXlUb1VzZSA9IGtleXMyWzBdOwogICAgICAgICAgY29uc3QgcmVtb3ZlZEl0ZW0gPSB0aGlzLmZhc3RNYXAucmVtb3ZlRnJvbU1hcChrZXlUb1VzZSk7CiAgICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgICAgb3BlcmF0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgcGF5bG9hZDogcmVtb3ZlZEl0ZW0KICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHJlbW92ZWRJdGVtOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogcmV0dXJucyBhIGNsb25lZCBhcnJheSBvZiBhbGwgdGhlIG9iamVjdHMgY3VycmVudGx5IGluIHRoZSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIGdldEFycmF5KCkgewogICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgb2YgdGhpcy5mYXN0TWFwLmdldEtleXMoKSkgewogICAgICAgICAgcmV0dXJuQXJyYXkucHVzaCh0aGlzLmZhc3RNYXAuZ2V0QnlLZXkoa2V5QXJnKSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXR1cm5BcnJheTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2sgaWYgT2JqZWN0bWFwIGlzdCBlbXB0eQogICAgICAgKi8KICAgICAgaXNFbXB0eSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5mYXN0TWFwLmdldEtleXMoKS5sZW5ndGggPT09IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHJlbW92ZSBvYmplY3QgZnJvbSBPYmplY3RtYXAKICAgICAgICovCiAgICAgIHJlbW92ZShvYmplY3RBcmcpIHsKICAgICAgICBpZiAodGhpcy5jaGVja0Zvck9iamVjdChvYmplY3RBcmcpKSB7CiAgICAgICAgICBjb25zdCBrZXlBcmcgPSB0aGlzLmdldEtleUZvck9iamVjdChvYmplY3RBcmcpOwogICAgICAgICAgY29uc3QgcmVtb3ZlZE9iamVjdCA9IHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleUFyZyk7CiAgICAgICAgICB0aGlzLmV2ZW50U3ViamVjdC5uZXh0KHsKICAgICAgICAgICAgb3BlcmF0aW9uOiAicmVtb3ZlIiwKICAgICAgICAgICAgcGF5bG9hZDogcmVtb3ZlZE9iamVjdAogICAgICAgICAgfSk7CiAgICAgICAgICByZXR1cm4gcmVtb3ZlZE9iamVjdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHdpcGUgT2JqZWN0bWFwCiAgICAgICAqLwogICAgICB3aXBlKCkgewogICAgICAgIGZvciAoY29uc3Qga2V5QXJnIG9mIHRoaXMuZmFzdE1hcC5nZXRLZXlzKCkpIHsKICAgICAgICAgIHRoaXMuZmFzdE1hcC5yZW1vdmVGcm9tTWFwKGtleUFyZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZXR1cm5zIGEgbmV3IE9iamVjdG1hcCB0aGF0IGluY2x1ZGVzCiAgICAgICAqLwogICAgICBjb25jYXQob2JqZWN0TWFwQXJnKSB7CiAgICAgICAgY29uc3QgY29uY2F0dGVkT2JqZWN0TWFwID0gbmV3IF9PYmplY3RNYXAoKTsKICAgICAgICBjb25jYXR0ZWRPYmplY3RNYXAuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIodGhpcy5mYXN0TWFwKTsKICAgICAgICBjb25jYXR0ZWRPYmplY3RNYXAuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnLmZhc3RNYXApOwogICAgICAgIHJldHVybiBjb25jYXR0ZWRPYmplY3RNYXA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHRyaWVzIHRvIG1lcmdlIGFub3RoZXIgT2JqZWN0bWFwCiAgICAgICAqIE5vdGU6IHVuaXF1ZUtleUNvbGxpc2lvbnMgd2lsbCBjYXVzZSBvdmVyd3JpdGUKICAgICAgICogQHBhcmFtIG9iamVjdE1hcEFyZwogICAgICAgKi8KICAgICAgYWRkQWxsRnJvbU90aGVyKG9iamVjdE1hcEFyZykgewogICAgICAgIHRoaXMuZmFzdE1hcC5hZGRBbGxGcm9tT3RoZXIob2JqZWN0TWFwQXJnLmZhc3RNYXApOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuc3RyaW5nbWFwLmpzCnZhciBTdHJpbmdtYXAyOwp2YXIgaW5pdF9saWtfc3RyaW5nbWFwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHB1c2gucm9ja3MrbGlrQDYuMi4yL25vZGVfbW9kdWxlcy9AcHVzaC5yb2Nrcy9saWsvZGlzdF90cy9saWsuc3RyaW5nbWFwLmpzIigpIHsKICAgIGluaXRfbGlrX3BsdWdpbnMoKTsKICAgIFN0cmluZ21hcDIgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuX3N0cmluZ0FycmF5ID0gW107CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkgPSBbXTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWRkIGEgc3RyaW5nIHRvIHRoZSBTdHJpbmdtYXAKICAgICAgICovCiAgICAgIGFkZFN0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheS5wdXNoKHN0cmluZ0FyZyk7CiAgICAgICAgdGhpcy5ub3RpZnlUcmlnZ2VyKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGxpa2UgYWRkU3RyaW5nLCBidXQgYWNjZXB0cyBhbiBhcnJheSBvZiBzdHJpbmdzCiAgICAgICAqLwogICAgICBhZGRTdHJpbmdBcnJheShzdHJpbmdBcnJheUFyZykgewogICAgICAgIGZvciAoY29uc3Qgc3RyaW5nSXRlbSBvZiBzdHJpbmdBcnJheUFyZykgewogICAgICAgICAgdGhpcy5hZGRTdHJpbmcoc3RyaW5nSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiByZW1vdmVzIGEgc3RyaW5nIGZyb20gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICByZW1vdmVTdHJpbmcoc3RyaW5nQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXlBcmcgaW4gdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmICh0aGlzLl9zdHJpbmdBcnJheVtrZXlBcmddID09PSBzdHJpbmdBcmcpIHsKICAgICAgICAgICAgdGhpcy5fc3RyaW5nQXJyYXkuc3BsaWNlKHBhcnNlSW50KGtleUFyZyksIDEpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLm5vdGlmeVRyaWdnZXIoKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogd2lwZXMgdGhlIFN0cmluZ21hcAogICAgICAgKi8KICAgICAgd2lwZSgpIHsKICAgICAgICB0aGlzLl9zdHJpbmdBcnJheSA9IFtdOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVjayBpZiBzdHJpbmcgaXMgaW4gU3RyaW5nbWFwCiAgICAgICAqLwogICAgICBjaGVja1N0cmluZyhzdHJpbmdBcmcpIHsKICAgICAgICByZXR1cm4gdGhpcy5fc3RyaW5nQXJyYXkuaW5kZXhPZihzdHJpbmdBcmcpICE9PSAtMTsKICAgICAgfQogICAgICAvKioKICAgICAgICogY2hlY2tzIHN0cmluZ1ByZXNlbmNlIHdpdGggbWluaW1hdGNoCiAgICAgICAqLwogICAgICBjaGVja01pbmltYXRjaChtaW5pTWF0Y2hTdHJpbmdBcmcpIHsKICAgICAgICBjb25zdCBzbWFydE1hdGNoSW5zdGFuY2UgPSBuZXcgZGlzdF90c19leHBvcnRzNS5TbWFydE1hdGNoKG1pbmlNYXRjaFN0cmluZ0FyZyk7CiAgICAgICAgbGV0IGZvdW5kTWF0Y2ggPSBmYWxzZTsKICAgICAgICBmb3IgKGNvbnN0IHN0cmluZ0l0ZW0gb2YgdGhpcy5fc3RyaW5nQXJyYXkpIHsKICAgICAgICAgIGlmIChzbWFydE1hdGNoSW5zdGFuY2UubWF0Y2goc3RyaW5nSXRlbSkpIHsKICAgICAgICAgICAgZm91bmRNYXRjaCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3VuZE1hdGNoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBjaGVja3MgaWYgdGhlIFN0cmluZ21hcCBpcyBlbXB0eQogICAgICAgKi8KICAgICAgY2hlY2tJc0VtcHR5KCkgewogICAgICAgIHJldHVybiB0aGlzLl9zdHJpbmdBcnJheS5sZW5ndGggPT09IDA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGdldHMgYSBjbG9uZWQgY29weSBvZiB0aGUgY3VycmVudCBzdHJpbmcgQXJyYXkKICAgICAgICovCiAgICAgIGdldFN0cmluZ0FycmF5KCkgewogICAgICAgIGNvbnN0IHJldHVybkFycmF5ID0gW107CiAgICAgICAgZm9yIChjb25zdCBzdHJpbmdJdGVtIG9mIHRoaXMuX3N0cmluZ0FycmF5KSB7CiAgICAgICAgICByZXR1cm5BcnJheS5wdXNoKHN0cmluZ0l0ZW0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmV0dXJuQXJyYXk7CiAgICAgIH0KICAgICAgLy8gdHJpZ2dlciByZWdpc3RlcmluZwogICAgICAvKioKICAgICAgICogcmVnaXN0ZXIgYSBuZXcgdHJpZ2dlcgogICAgICAgKi8KICAgICAgcmVnaXN0ZXJVbnRpbFRydWUoZnVuY3Rpb25BcmcsIGNhbGxiYWNrQXJnKSB7CiAgICAgICAgY29uc3QgdHJ1ZURlZmVycmVkID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgICAgdGhpcy5fdHJpZ2dlclVudGlsVHJ1ZUZ1bmN0aW9uQXJyYXkucHVzaCgoKSA9PiB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBmdW5jdGlvbkFyZyh0aGlzLmdldFN0cmluZ0FycmF5KCkpOwogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdHJ1ZSkgewogICAgICAgICAgICBpZiAoY2FsbGJhY2tBcmcpIHsKICAgICAgICAgICAgICBjYWxsYmFja0FyZygpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRydWVEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICAgIH0pOwogICAgICAgIHRoaXMubm90aWZ5VHJpZ2dlcigpOwogICAgICAgIHJldHVybiB0cnVlRGVmZXJyZWQucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogbm90aWZpZXMgdHJpZ2dlcnMKICAgICAgICovCiAgICAgIG5vdGlmeVRyaWdnZXIoKSB7CiAgICAgICAgY29uc3QgZmlsdGVyZWRBcnJheSA9IHRoaXMuX3RyaWdnZXJVbnRpbFRydWVGdW5jdGlvbkFycmF5LmZpbHRlcigoZnVuY3Rpb25BcmcpID0+IHsKICAgICAgICAgIHJldHVybiAhZnVuY3Rpb25BcmcoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLl90cmlnZ2VyVW50aWxUcnVlRnVuY3Rpb25BcnJheSA9IGZpbHRlcmVkQXJyYXk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCtsZW5pc0AxLjMuMjAvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L2xlbmlzL2Rpc3QvbGVuaXMubWpzCmZ1bmN0aW9uIGNsYW1wMihtaW4zLCBpbnB1dCwgbWF4MykgewogIHJldHVybiBNYXRoLm1heChtaW4zLCBNYXRoLm1pbihpbnB1dCwgbWF4MykpOwp9CmZ1bmN0aW9uIGxlcnAoeDMsIHk1LCB0OSkgewogIHJldHVybiAoMSAtIHQ5KSAqIHgzICsgdDkgKiB5NTsKfQpmdW5jdGlvbiBkYW1wKHgzLCB5NSwgbGFtYmRhLCBkZWx0YVRpbWUpIHsKICByZXR1cm4gbGVycCh4MywgeTUsIDEgLSBNYXRoLmV4cCgtbGFtYmRhICogZGVsdGFUaW1lKSk7Cn0KZnVuY3Rpb24gbW9kdWxvKG4xMywgZDYpIHsKICByZXR1cm4gKG4xMyAlIGQ2ICsgZDYpICUgZDY7Cn0KZnVuY3Rpb24gZGVib3VuY2UyKGNhbGxiYWNrLCBkZWxheTIpIHsKICBsZXQgdGltZXIyOwogIHJldHVybiBmdW5jdGlvbiguLi5hcmdzKSB7CiAgICBsZXQgY29udGV4dDIgPSB0aGlzOwogICAgY2xlYXJUaW1lb3V0KHRpbWVyMik7CiAgICB0aW1lcjIgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGltZXIyID0gdm9pZCAwOwogICAgICBjYWxsYmFjay5hcHBseShjb250ZXh0MiwgYXJncyk7CiAgICB9LCBkZWxheTIpOwogIH07Cn0KdmFyIHZlcnNpb24sIEFuaW1hdGUsIERpbWVuc2lvbnMsIEVtaXR0ZXIsIExJTkVfSEVJR0hULCBsaXN0ZW5lck9wdGlvbnMsIFZpcnR1YWxTY3JvbGwsIGRlZmF1bHRFYXNpbmcsIExlbmlzOwp2YXIgaW5pdF9sZW5pcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K2xlbmlzQDEuMy4yMC9ub2RlX21vZHVsZXMvQHRlbXBmaXgvbGVuaXMvZGlzdC9sZW5pcy5tanMiKCkgewogICAgdmVyc2lvbiA9ICIxLjMuMTciOwogICAgQW5pbWF0ZSA9IGNsYXNzIHsKICAgICAgaXNSdW5uaW5nID0gZmFsc2U7CiAgICAgIHZhbHVlID0gMDsKICAgICAgZnJvbSA9IDA7CiAgICAgIHRvID0gMDsKICAgICAgY3VycmVudFRpbWUgPSAwOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBmcm9tVG8gbWV0aG9kCiAgICAgIGxlcnA7CiAgICAgIGR1cmF0aW9uOwogICAgICBlYXNpbmc7CiAgICAgIG9uVXBkYXRlOwogICAgICAvKioKICAgICAgICogQWR2YW5jZSB0aGUgYW5pbWF0aW9uIGJ5IHRoZSBnaXZlbiBkZWx0YSB0aW1lCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBkZWx0YVRpbWUgLSBUaGUgdGltZSBpbiBzZWNvbmRzIHRvIGFkdmFuY2UgdGhlIGFuaW1hdGlvbgogICAgICAgKi8KICAgICAgYWR2YW5jZShkZWx0YVRpbWUpIHsKICAgICAgICBpZiAoIXRoaXMuaXNSdW5uaW5nKSByZXR1cm47CiAgICAgICAgbGV0IGNvbXBsZXRlZCA9IGZhbHNlOwogICAgICAgIGlmICh0aGlzLmR1cmF0aW9uICYmIHRoaXMuZWFzaW5nKSB7CiAgICAgICAgICB0aGlzLmN1cnJlbnRUaW1lICs9IGRlbHRhVGltZTsKICAgICAgICAgIGNvbnN0IGxpbmVhclByb2dyZXNzID0gY2xhbXAyKDAsIHRoaXMuY3VycmVudFRpbWUgLyB0aGlzLmR1cmF0aW9uLCAxKTsKICAgICAgICAgIGNvbXBsZXRlZCA9IGxpbmVhclByb2dyZXNzID49IDE7CiAgICAgICAgICBjb25zdCBlYXNlZFByb2dyZXNzID0gY29tcGxldGVkID8gMSA6IHRoaXMuZWFzaW5nKGxpbmVhclByb2dyZXNzKTsKICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLmZyb20gKyAodGhpcy50byAtIHRoaXMuZnJvbSkgKiBlYXNlZFByb2dyZXNzOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5sZXJwKSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gZGFtcCh0aGlzLnZhbHVlLCB0aGlzLnRvLCB0aGlzLmxlcnAgKiA2MCwgZGVsdGFUaW1lKTsKICAgICAgICAgIGlmIChNYXRoLnJvdW5kKHRoaXMudmFsdWUpID09PSB0aGlzLnRvKSB7CiAgICAgICAgICAgIHRoaXMudmFsdWUgPSB0aGlzLnRvOwogICAgICAgICAgICBjb21wbGV0ZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy50bzsKICAgICAgICAgIGNvbXBsZXRlZCA9IHRydWU7CiAgICAgICAgfQogICAgICAgIGlmIChjb21wbGV0ZWQpIHsKICAgICAgICAgIHRoaXMuc3RvcCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLm9uVXBkYXRlPy4odGhpcy52YWx1ZSwgY29tcGxldGVkKTsKICAgICAgfQogICAgICAvKiogU3RvcCB0aGUgYW5pbWF0aW9uICovCiAgICAgIHN0b3AoKSB7CiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSBmYWxzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHVwIHRoZSBhbmltYXRpb24gZnJvbSBhIHN0YXJ0aW5nIHZhbHVlIHRvIGFuIGVuZGluZyB2YWx1ZQogICAgICAgKiB3aXRoIG9wdGlvbmFsIHBhcmFtZXRlcnMgZm9yIGxlcnBpbmcsIGR1cmF0aW9uLCBlYXNpbmcsIGFuZCBvblVwZGF0ZSBjYWxsYmFjawogICAgICAgKgogICAgICAgKiBAcGFyYW0gZnJvbSAtIFRoZSBzdGFydGluZyB2YWx1ZQogICAgICAgKiBAcGFyYW0gdG8gLSBUaGUgZW5kaW5nIHZhbHVlCiAgICAgICAqIEBwYXJhbSBvcHRpb25zIC0gT3B0aW9ucyBmb3IgdGhlIGFuaW1hdGlvbgogICAgICAgKi8KICAgICAgZnJvbVRvKGZyb20yLCB0bzIsIHsgbGVycDogbGVycDIsIGR1cmF0aW9uLCBlYXNpbmcsIG9uU3RhcnQsIG9uVXBkYXRlIH0pIHsKICAgICAgICB0aGlzLmZyb20gPSB0aGlzLnZhbHVlID0gZnJvbTI7CiAgICAgICAgdGhpcy50byA9IHRvMjsKICAgICAgICB0aGlzLmxlcnAgPSBsZXJwMjsKICAgICAgICB0aGlzLmR1cmF0aW9uID0gZHVyYXRpb247CiAgICAgICAgdGhpcy5lYXNpbmcgPSBlYXNpbmc7CiAgICAgICAgdGhpcy5jdXJyZW50VGltZSA9IDA7CiAgICAgICAgdGhpcy5pc1J1bm5pbmcgPSB0cnVlOwogICAgICAgIG9uU3RhcnQ/LigpOwogICAgICAgIHRoaXMub25VcGRhdGUgPSBvblVwZGF0ZTsKICAgICAgfQogICAgfTsKICAgIERpbWVuc2lvbnMgPSBjbGFzcyB7CiAgICAgIGNvbnN0cnVjdG9yKHdyYXBwZXIsIGNvbnRlbnQzLCB7IGF1dG9SZXNpemUgPSB0cnVlLCBkZWJvdW5jZTogZGVib3VuY2VWYWx1ZSA9IDI1MCB9ID0ge30pIHsKICAgICAgICB0aGlzLndyYXBwZXIgPSB3cmFwcGVyOwogICAgICAgIHRoaXMuY29udGVudCA9IGNvbnRlbnQzOwogICAgICAgIGlmIChhdXRvUmVzaXplKSB7CiAgICAgICAgICB0aGlzLmRlYm91bmNlZFJlc2l6ZSA9IGRlYm91bmNlMih0aGlzLnJlc2l6ZSwgZGVib3VuY2VWYWx1ZSk7CiAgICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLmRlYm91bmNlZFJlc2l6ZSwgZmFsc2UpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5kZWJvdW5jZWRSZXNpemUpOwogICAgICAgICAgICB0aGlzLndyYXBwZXJSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMud3JhcHBlcik7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcih0aGlzLmRlYm91bmNlZFJlc2l6ZSk7CiAgICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMuY29udGVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMucmVzaXplKCk7CiAgICAgIH0KICAgICAgd2lkdGggPSAwOwogICAgICBoZWlnaHQgPSAwOwogICAgICBzY3JvbGxIZWlnaHQgPSAwOwogICAgICBzY3JvbGxXaWR0aCA9IDA7CiAgICAgIC8vIFRoZXNlIGFyZSBpbnN0YW5jaWF0ZWQgaW4gdGhlIGNvbnN0cnVjdG9yIGFzIHRoZXkgbmVlZCBpbmZvcm1hdGlvbiBmcm9tIHRoZSBvcHRpb25zCiAgICAgIGRlYm91bmNlZFJlc2l6ZTsKICAgICAgd3JhcHBlclJlc2l6ZU9ic2VydmVyOwogICAgICBjb250ZW50UmVzaXplT2JzZXJ2ZXI7CiAgICAgIGRlc3Ryb3koKSB7CiAgICAgICAgdGhpcy53cmFwcGVyUmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLmNvbnRlbnRSZXNpemVPYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICAgIGlmICh0aGlzLndyYXBwZXIgPT09IHdpbmRvdyAmJiB0aGlzLmRlYm91bmNlZFJlc2l6ZSkgewogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMuZGVib3VuY2VkUmVzaXplLCBmYWxzZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJlc2l6ZSA9ICgpID0+IHsKICAgICAgICB0aGlzLm9uV3JhcHBlclJlc2l6ZSgpOwogICAgICAgIHRoaXMub25Db250ZW50UmVzaXplKCk7CiAgICAgIH07CiAgICAgIG9uV3JhcHBlclJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLndpZHRoID0gd2luZG93LmlubmVyV2lkdGg7CiAgICAgICAgICB0aGlzLmhlaWdodCA9IHdpbmRvdy5pbm5lckhlaWdodDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy53aWR0aCA9IHRoaXMud3JhcHBlci5jbGllbnRXaWR0aDsKICAgICAgICAgIHRoaXMuaGVpZ2h0ID0gdGhpcy53cmFwcGVyLmNsaWVudEhlaWdodDsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uQ29udGVudFJlc2l6ZSA9ICgpID0+IHsKICAgICAgICBpZiAodGhpcy53cmFwcGVyIGluc3RhbmNlb2YgV2luZG93KSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMuY29udGVudC5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy5jb250ZW50LnNjcm9sbFdpZHRoOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNjcm9sbEhlaWdodCA9IHRoaXMud3JhcHBlci5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICB0aGlzLnNjcm9sbFdpZHRoID0gdGhpcy53cmFwcGVyLnNjcm9sbFdpZHRoOwogICAgICAgIH0KICAgICAgfTsKICAgICAgZ2V0IGxpbWl0KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICB4OiB0aGlzLnNjcm9sbFdpZHRoIC0gdGhpcy53aWR0aCwKICAgICAgICAgIHk6IHRoaXMuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5oZWlnaHQKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgRW1pdHRlciA9IGNsYXNzIHsKICAgICAgZXZlbnRzID0ge307CiAgICAgIC8qKgogICAgICAgKiBFbWl0IGFuIGV2ZW50IHdpdGggdGhlIGdpdmVuIGRhdGEKICAgICAgICogQHBhcmFtIGV2ZW50IEV2ZW50IG5hbWUKICAgICAgICogQHBhcmFtIGFyZ3MgRGF0YSB0byBwYXNzIHRvIHRoZSBldmVudCBoYW5kbGVycwogICAgICAgKi8KICAgICAgZW1pdChldmVudCwgLi4uYXJncykgewogICAgICAgIGxldCBjYWxsYmFja3MgPSB0aGlzLmV2ZW50c1tldmVudF0gfHwgW107CiAgICAgICAgZm9yIChsZXQgaTExID0gMCwgbGVuZ3RoID0gY2FsbGJhY2tzLmxlbmd0aDsgaTExIDwgbGVuZ3RoOyBpMTErKykgewogICAgICAgICAgY2FsbGJhY2tzW2kxMV0/LiguLi5hcmdzKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEFkZCBhIGNhbGxiYWNrIHRvIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2IgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICogQHJldHVybnMgVW5zdWJzY3JpYmUgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9uKGV2ZW50LCBjYikgewogICAgICAgIHRoaXMuZXZlbnRzW2V2ZW50XT8ucHVzaChjYikgfHwgKHRoaXMuZXZlbnRzW2V2ZW50XSA9IFtjYl0pOwogICAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYiAhPT0gaTExKTsKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZW1vdmUgYSBjYWxsYmFjayBmcm9tIHRoZSBldmVudAogICAgICAgKiBAcGFyYW0gZXZlbnQgRXZlbnQgbmFtZQogICAgICAgKiBAcGFyYW0gY2FsbGJhY2sgQ2FsbGJhY2sgZnVuY3Rpb24KICAgICAgICovCiAgICAgIG9mZihldmVudCwgY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmV2ZW50c1tldmVudF0gPSB0aGlzLmV2ZW50c1tldmVudF0/LmZpbHRlcigoaTExKSA9PiBjYWxsYmFjayAhPT0gaTExKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUmVtb3ZlIGFsbCBldmVudCBsaXN0ZW5lcnMgYW5kIGNsZWFuIHVwCiAgICAgICAqLwogICAgICBkZXN0cm95KCkgewogICAgICAgIHRoaXMuZXZlbnRzID0ge307CiAgICAgIH0KICAgIH07CiAgICBMSU5FX0hFSUdIVCA9IDEwMCAvIDY7CiAgICBsaXN0ZW5lck9wdGlvbnMgPSB7IHBhc3NpdmU6IGZhbHNlIH07CiAgICBWaXJ0dWFsU2Nyb2xsID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3RvcihlbGVtZW50NCwgb3B0aW9ucyA9IHsgd2hlZWxNdWx0aXBsaWVyOiAxLCB0b3VjaE11bHRpcGxpZXI6IDEgfSkgewogICAgICAgIHRoaXMuZWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgIHRoaXMub3B0aW9ucyA9IG9wdGlvbnM7CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInJlc2l6ZSIsIHRoaXMub25XaW5kb3dSZXNpemUsIGZhbHNlKTsKICAgICAgICB0aGlzLm9uV2luZG93UmVzaXplKCk7CiAgICAgICAgdGhpcy5lbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5hZGRFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hlbmQiLCB0aGlzLm9uVG91Y2hFbmQsIGxpc3RlbmVyT3B0aW9ucyk7CiAgICAgIH0KICAgICAgdG91Y2hTdGFydCA9IHsKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAKICAgICAgfTsKICAgICAgbGFzdERlbHRhID0gewogICAgICAgIHg6IDAsCiAgICAgICAgeTogMAogICAgICB9OwogICAgICB3aW5kb3cgPSB7CiAgICAgICAgd2lkdGg6IDAsCiAgICAgICAgaGVpZ2h0OiAwCiAgICAgIH07CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvKioKICAgICAgICogQWRkIGFuIGV2ZW50IGxpc3RlbmVyIGZvciB0aGUgZ2l2ZW4gZXZlbnQgYW5kIGNhbGxiYWNrCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBldmVudCBFdmVudCBuYW1lCiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBDYWxsYmFjayBmdW5jdGlvbgogICAgICAgKi8KICAgICAgb24oZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vbihldmVudCwgY2FsbGJhY2spOwogICAgICB9CiAgICAgIC8qKiBSZW1vdmUgYWxsIGV2ZW50IGxpc3RlbmVycyBhbmQgY2xlYW4gdXAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHdpbmRvdy5yZW1vdmVFdmVudExpc3RlbmVyKCJyZXNpemUiLCB0aGlzLm9uV2luZG93UmVzaXplLCBmYWxzZSk7CiAgICAgICAgdGhpcy5lbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIndoZWVsIiwgdGhpcy5vbldoZWVsLCBsaXN0ZW5lck9wdGlvbnMpOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNoc3RhcnQiLAogICAgICAgICAgdGhpcy5vblRvdWNoU3RhcnQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICAgIHRoaXMuZWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgInRvdWNobW92ZSIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hNb3ZlLAogICAgICAgICAgbGlzdGVuZXJPcHRpb25zCiAgICAgICAgKTsKICAgICAgICB0aGlzLmVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJ0b3VjaGVuZCIsCiAgICAgICAgICB0aGlzLm9uVG91Y2hFbmQsCiAgICAgICAgICBsaXN0ZW5lck9wdGlvbnMKICAgICAgICApOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFdmVudCBoYW5kbGVyIGZvciAndG91Y2hzdGFydCcgZXZlbnQKICAgICAgICoKICAgICAgICogQHBhcmFtIGV2ZW50IFRvdWNoIGV2ZW50CiAgICAgICAqLwogICAgICBvblRvdWNoU3RhcnQgPSAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB7IGNsaWVudFgsIGNsaWVudFkgfSA9IGV2ZW50LnRhcmdldFRvdWNoZXMgPyBldmVudC50YXJnZXRUb3VjaGVzWzBdIDogZXZlbnQ7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnggPSBjbGllbnRYOwogICAgICAgIHRoaXMudG91Y2hTdGFydC55ID0gY2xpZW50WTsKICAgICAgICB0aGlzLmxhc3REZWx0YSA9IHsKICAgICAgICAgIHg6IDAsCiAgICAgICAgICB5OiAwCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYOiAwLAogICAgICAgICAgZGVsdGFZOiAwLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqIEV2ZW50IGhhbmRsZXIgZm9yICd0b3VjaG1vdmUnIGV2ZW50ICovCiAgICAgIG9uVG91Y2hNb3ZlID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgeyBjbGllbnRYLCBjbGllbnRZIH0gPSBldmVudC50YXJnZXRUb3VjaGVzID8gZXZlbnQudGFyZ2V0VG91Y2hlc1swXSA6IGV2ZW50OwogICAgICAgIGNvbnN0IGRlbHRhWCA9IC0oY2xpZW50WCAtIHRoaXMudG91Y2hTdGFydC54KSAqIHRoaXMub3B0aW9ucy50b3VjaE11bHRpcGxpZXI7CiAgICAgICAgY29uc3QgZGVsdGFZID0gLShjbGllbnRZIC0gdGhpcy50b3VjaFN0YXJ0LnkpICogdGhpcy5vcHRpb25zLnRvdWNoTXVsdGlwbGllcjsKICAgICAgICB0aGlzLnRvdWNoU3RhcnQueCA9IGNsaWVudFg7CiAgICAgICAgdGhpcy50b3VjaFN0YXJ0LnkgPSBjbGllbnRZOwogICAgICAgIHRoaXMubGFzdERlbHRhID0gewogICAgICAgICAgeDogZGVsdGFYLAogICAgICAgICAgeTogZGVsdGFZCiAgICAgICAgfTsKICAgICAgICB0aGlzLmVtaXR0ZXIuZW1pdCgic2Nyb2xsIiwgewogICAgICAgICAgZGVsdGFYLAogICAgICAgICAgZGVsdGFZLAogICAgICAgICAgZXZlbnQKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgb25Ub3VjaEVuZCA9IChldmVudCkgPT4gewogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7CiAgICAgICAgICBkZWx0YVg6IHRoaXMubGFzdERlbHRhLngsCiAgICAgICAgICBkZWx0YVk6IHRoaXMubGFzdERlbHRhLnksCiAgICAgICAgICBldmVudAogICAgICAgIH0pOwogICAgICB9OwogICAgICAvKiogRXZlbnQgaGFuZGxlciBmb3IgJ3doZWVsJyBldmVudCAqLwogICAgICBvbldoZWVsID0gKGV2ZW50KSA9PiB7CiAgICAgICAgbGV0IHsgZGVsdGFYLCBkZWx0YVksIGRlbHRhTW9kZSB9ID0gZXZlbnQ7CiAgICAgICAgY29uc3QgbXVsdGlwbGllclggPSBkZWx0YU1vZGUgPT09IDEgPyBMSU5FX0hFSUdIVCA6IGRlbHRhTW9kZSA9PT0gMiA/IHRoaXMud2luZG93LndpZHRoIDogMTsKICAgICAgICBjb25zdCBtdWx0aXBsaWVyWSA9IGRlbHRhTW9kZSA9PT0gMSA/IExJTkVfSEVJR0hUIDogZGVsdGFNb2RlID09PSAyID8gdGhpcy53aW5kb3cuaGVpZ2h0IDogMTsKICAgICAgICBkZWx0YVggKj0gbXVsdGlwbGllclg7CiAgICAgICAgZGVsdGFZICo9IG11bHRpcGxpZXJZOwogICAgICAgIGRlbHRhWCAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIGRlbHRhWSAqPSB0aGlzLm9wdGlvbnMud2hlZWxNdWx0aXBsaWVyOwogICAgICAgIHRoaXMuZW1pdHRlci5lbWl0KCJzY3JvbGwiLCB7IGRlbHRhWCwgZGVsdGFZLCBldmVudCB9KTsKICAgICAgfTsKICAgICAgb25XaW5kb3dSZXNpemUgPSAoKSA9PiB7CiAgICAgICAgdGhpcy53aW5kb3cgPSB7CiAgICAgICAgICB3aWR0aDogd2luZG93LmlubmVyV2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHdpbmRvdy5pbm5lckhlaWdodAogICAgICAgIH07CiAgICAgIH07CiAgICB9OwogICAgZGVmYXVsdEVhc2luZyA9ICh0OSkgPT4gTWF0aC5taW4oMSwgMS4wMDEgLSBNYXRoLnBvdygyLCAtMTAgKiB0OSkpOwogICAgTGVuaXMgPSBjbGFzcyB7CiAgICAgIF9pc1Njcm9sbGluZyA9IGZhbHNlOwogICAgICAvLyB0cnVlIHdoZW4gc2Nyb2xsIGlzIGFuaW1hdGluZwogICAgICBfaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgIC8vIHRydWUgaWYgdXNlciBzaG91bGQgbm90IGJlIGFibGUgdG8gc2Nyb2xsIC0gZW5hYmxlL2Rpc2FibGUgcHJvZ3JhbW1hdGljYWxseQogICAgICBfaXNMb2NrZWQgPSBmYWxzZTsKICAgICAgLy8gc2FtZSBhcyBpc1N0b3BwZWQgYnV0IGVuYWJsZWQvZGlzYWJsZWQgd2hlbiBzY3JvbGwgcmVhY2hlcyB0YXJnZXQKICAgICAgX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gbnVsbDsKICAgICAgX3JhZklkID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFdoZXRoZXIgb3Igbm90IHRoZSB1c2VyIGlzIHRvdWNoaW5nIHRoZSBzY3JlZW4KICAgICAgICovCiAgICAgIGlzVG91Y2hpbmc7CiAgICAgIC8qKgogICAgICAgKiBUaGUgdGltZSBpbiBtcyBzaW5jZSB0aGUgbGVuaXMgaW5zdGFuY2Ugd2FzIGNyZWF0ZWQKICAgICAgICovCiAgICAgIHRpbWUgPSAwOwogICAgICAvKioKICAgICAgICogVXNlciBkYXRhIHRoYXQgd2lsbCBiZSBmb3J3YXJkZWQgdGhyb3VnaCB0aGUgc2Nyb2xsIGV2ZW50CiAgICAgICAqCiAgICAgICAqIEBleGFtcGxlCiAgICAgICAqIGxlbmlzLnNjcm9sbFRvKDEwMCwgewogICAgICAgKiAgIHVzZXJEYXRhOiB7CiAgICAgICAqICAgICBmb286ICdiYXInCiAgICAgICAqICAgfQogICAgICAgKiB9KQogICAgICAgKi8KICAgICAgdXNlckRhdGEgPSB7fTsKICAgICAgLyoqCiAgICAgICAqIFRoZSBsYXN0IHZlbG9jaXR5IG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGxhc3RWZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgY3VycmVudCB2ZWxvY2l0eSBvZiB0aGUgc2Nyb2xsCiAgICAgICAqLwogICAgICB2ZWxvY2l0eSA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgZGlyZWN0aW9uIG9mIHRoZSBzY3JvbGwKICAgICAgICovCiAgICAgIGRpcmVjdGlvbiA9IDA7CiAgICAgIC8qKgogICAgICAgKiBUaGUgb3B0aW9ucyBwYXNzZWQgdG8gdGhlIGxlbmlzIGluc3RhbmNlCiAgICAgICAqLwogICAgICBvcHRpb25zOwogICAgICAvKioKICAgICAgICogVGhlIHRhcmdldCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIHRhcmdldFNjcm9sbDsKICAgICAgLyoqCiAgICAgICAqIFRoZSBhbmltYXRlZCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGFuaW1hdGVkU2Nyb2xsOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGhlcmUgYXMgdGhleSBkb24ndCBuZWVkIGluZm9ybWF0aW9uIGZyb20gdGhlIG9wdGlvbnMKICAgICAgYW5pbWF0ZSA9IG5ldyBBbmltYXRlKCk7CiAgICAgIGVtaXR0ZXIgPSBuZXcgRW1pdHRlcigpOwogICAgICAvLyBUaGVzZSBhcmUgaW5zdGFuY2lhdGVkIGluIHRoZSBjb25zdHJ1Y3RvciBhcyB0aGV5IG5lZWQgaW5mb3JtYXRpb24gZnJvbSB0aGUgb3B0aW9ucwogICAgICBkaW1lbnNpb25zOwogICAgICAvLyBUaGlzIGlzIG5vdCBwcml2YXRlIGJlY2F1c2UgaXQncyB1c2VkIGluIHRoZSBTbmFwIGNsYXNzCiAgICAgIHZpcnR1YWxTY3JvbGw7CiAgICAgIGNvbnN0cnVjdG9yKHsKICAgICAgICB3cmFwcGVyID0gd2luZG93LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzID0gZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LAogICAgICAgIGV2ZW50c1RhcmdldCA9IHdyYXBwZXIsCiAgICAgICAgc21vb3RoV2hlZWwgPSB0cnVlLAogICAgICAgIHN5bmNUb3VjaCA9IGZhbHNlLAogICAgICAgIHN5bmNUb3VjaExlcnAgPSAwLjA3NSwKICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCA9IDEuNywKICAgICAgICBkdXJhdGlvbiwKICAgICAgICAvLyBpbiBzZWNvbmRzCiAgICAgICAgZWFzaW5nLAogICAgICAgIGxlcnA6IGxlcnAyID0gMC4xLAogICAgICAgIGluZmluaXRlID0gZmFsc2UsCiAgICAgICAgb3JpZW50YXRpb24gPSAidmVydGljYWwiLAogICAgICAgIC8vIHZlcnRpY2FsLCBob3Jpem9udGFsCiAgICAgICAgZ2VzdHVyZU9yaWVudGF0aW9uID0gb3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiA/ICJib3RoIiA6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgLy8gdmVydGljYWwsIGhvcml6b250YWwsIGJvdGgKICAgICAgICB0b3VjaE11bHRpcGxpZXIgPSAxLAogICAgICAgIHdoZWVsTXVsdGlwbGllciA9IDEsCiAgICAgICAgYXV0b1Jlc2l6ZSA9IHRydWUsCiAgICAgICAgcHJldmVudCwKICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgIG92ZXJzY3JvbGwgPSB0cnVlLAogICAgICAgIGF1dG9SYWYgPSBmYWxzZSwKICAgICAgICBhbmNob3JzID0gZmFsc2UsCiAgICAgICAgYXV0b1RvZ2dsZSA9IGZhbHNlLAogICAgICAgIC8vIGh0dHBzOi8vY2FuaXVzZS5jb20vP3NlYXJjaD10cmFuc2l0aW9uLWJlaGF2aW9yCiAgICAgICAgYWxsb3dOZXN0ZWRTY3JvbGwgPSBmYWxzZSwKICAgICAgICAvLyBAdHMtaWdub3JlOiB0aGlzIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgZnV0dXJlCiAgICAgICAgX19leHBlcmltZW50YWxfX25haXZlRGltZW5zaW9ucyA9IGZhbHNlLAogICAgICAgIG5haXZlRGltZW5zaW9ucyA9IF9fZXhwZXJpbWVudGFsX19uYWl2ZURpbWVuc2lvbnMsCiAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlID0gZmFsc2UKICAgICAgfSA9IHt9KSB7CiAgICAgICAgd2luZG93LmxlbmlzVmVyc2lvbiA9IHZlcnNpb247CiAgICAgICAgaWYgKCF3cmFwcGVyIHx8IHdyYXBwZXIgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkgewogICAgICAgICAgd3JhcHBlciA9IHdpbmRvdzsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBkdXJhdGlvbiA9PT0gIm51bWJlciIgJiYgdHlwZW9mIGVhc2luZyAhPT0gImZ1bmN0aW9uIikgewogICAgICAgICAgZWFzaW5nID0gZGVmYXVsdEVhc2luZzsKICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlYXNpbmcgPT09ICJmdW5jdGlvbiIgJiYgdHlwZW9mIGR1cmF0aW9uICE9PSAibnVtYmVyIikgewogICAgICAgICAgZHVyYXRpb24gPSAxOwogICAgICAgIH0KICAgICAgICB0aGlzLm9wdGlvbnMgPSB7CiAgICAgICAgICB3cmFwcGVyLAogICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICBldmVudHNUYXJnZXQsCiAgICAgICAgICBzbW9vdGhXaGVlbCwKICAgICAgICAgIHN5bmNUb3VjaCwKICAgICAgICAgIHN5bmNUb3VjaExlcnAsCiAgICAgICAgICB0b3VjaEluZXJ0aWFFeHBvbmVudCwKICAgICAgICAgIGR1cmF0aW9uLAogICAgICAgICAgZWFzaW5nLAogICAgICAgICAgbGVycDogbGVycDIsCiAgICAgICAgICBpbmZpbml0ZSwKICAgICAgICAgIGdlc3R1cmVPcmllbnRhdGlvbiwKICAgICAgICAgIG9yaWVudGF0aW9uLAogICAgICAgICAgdG91Y2hNdWx0aXBsaWVyLAogICAgICAgICAgd2hlZWxNdWx0aXBsaWVyLAogICAgICAgICAgYXV0b1Jlc2l6ZSwKICAgICAgICAgIHByZXZlbnQsCiAgICAgICAgICB2aXJ0dWFsU2Nyb2xsLAogICAgICAgICAgb3ZlcnNjcm9sbCwKICAgICAgICAgIGF1dG9SYWYsCiAgICAgICAgICBhbmNob3JzLAogICAgICAgICAgYXV0b1RvZ2dsZSwKICAgICAgICAgIGFsbG93TmVzdGVkU2Nyb2xsLAogICAgICAgICAgbmFpdmVEaW1lbnNpb25zLAogICAgICAgICAgc3RvcEluZXJ0aWFPbk5hdmlnYXRlCiAgICAgICAgfTsKICAgICAgICB0aGlzLmRpbWVuc2lvbnMgPSBuZXcgRGltZW5zaW9ucyh3cmFwcGVyLCBjb250ZW50MywgeyBhdXRvUmVzaXplIH0pOwogICAgICAgIHRoaXMudXBkYXRlQ2xhc3NOYW1lKCk7CiAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigic2Nyb2xsIiwgdGhpcy5vbk5hdGl2ZVNjcm9sbCwgZmFsc2UpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoInNjcm9sbGVuZCIsIHRoaXMub25TY3JvbGxFbmQsIHsKICAgICAgICAgIGNhcHR1cmU6IHRydWUKICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmFuY2hvcnMgfHwgdGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICAgImNsaWNrIiwKICAgICAgICAgICAgdGhpcy5vbkNsaWNrLAogICAgICAgICAgICBmYWxzZQogICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigKICAgICAgICAgICJwb2ludGVyZG93biIsCiAgICAgICAgICB0aGlzLm9uUG9pbnRlckRvd24sCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy52aXJ0dWFsU2Nyb2xsID0gbmV3IFZpcnR1YWxTY3JvbGwoZXZlbnRzVGFyZ2V0LCB7CiAgICAgICAgICB0b3VjaE11bHRpcGxpZXIsCiAgICAgICAgICB3aGVlbE11bHRpcGxpZXIKICAgICAgICB9KTsKICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwub24oInNjcm9sbCIsIHRoaXMub25WaXJ0dWFsU2Nyb2xsKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIHsKICAgICAgICAgIHRoaXMuY2hlY2tPdmVyZmxvdygpOwogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgdGhpcy5vblRyYW5zaXRpb25FbmQsIHsKICAgICAgICAgICAgcGFzc2l2ZTogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1JhZikgewogICAgICAgICAgdGhpcy5fcmFmSWQgPSByZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yYWYpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogRGVzdHJveSB0aGUgbGVuaXMgaW5zdGFuY2UsIHJlbW92ZSBhbGwgZXZlbnQgbGlzdGVuZXJzIGFuZCBjbGVhbiB1cCB0aGUgY2xhc3MgbmFtZQogICAgICAgKi8KICAgICAgZGVzdHJveSgpIHsKICAgICAgICB0aGlzLmVtaXR0ZXIuZGVzdHJveSgpOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAic2Nyb2xsIiwKICAgICAgICAgIHRoaXMub25OYXRpdmVTY3JvbGwsCiAgICAgICAgICBmYWxzZQogICAgICAgICk7CiAgICAgICAgdGhpcy5vcHRpb25zLndyYXBwZXIucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2Nyb2xsZW5kIiwgdGhpcy5vblNjcm9sbEVuZCwgewogICAgICAgICAgY2FwdHVyZTogdHJ1ZQogICAgICAgIH0pOwogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnJlbW92ZUV2ZW50TGlzdGVuZXIoCiAgICAgICAgICAicG9pbnRlcmRvd24iLAogICAgICAgICAgdGhpcy5vblBvaW50ZXJEb3duLAogICAgICAgICAgZmFsc2UKICAgICAgICApOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYW5jaG9ycyB8fCB0aGlzLm9wdGlvbnMuc3RvcEluZXJ0aWFPbk5hdmlnYXRlKSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5yZW1vdmVFdmVudExpc3RlbmVyKAogICAgICAgICAgICAiY2xpY2siLAogICAgICAgICAgICB0aGlzLm9uQ2xpY2ssCiAgICAgICAgICAgIGZhbHNlCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICB0aGlzLnZpcnR1YWxTY3JvbGwuZGVzdHJveSgpOwogICAgICAgIHRoaXMuZGltZW5zaW9ucy5kZXN0cm95KCk7CiAgICAgICAgdGhpcy5jbGVhblVwQ2xhc3NOYW1lKCk7CiAgICAgICAgaWYgKHRoaXMuX3JhZklkKSB7CiAgICAgICAgICBjYW5jZWxBbmltYXRpb25GcmFtZSh0aGlzLl9yYWZJZCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIG9uKGV2ZW50LCBjYWxsYmFjaykgewogICAgICAgIHJldHVybiB0aGlzLmVtaXR0ZXIub24oZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvZmYoZXZlbnQsIGNhbGxiYWNrKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZW1pdHRlci5vZmYoZXZlbnQsIGNhbGxiYWNrKTsKICAgICAgfQogICAgICBvblNjcm9sbEVuZCA9IChlMTEpID0+IHsKICAgICAgICBpZiAoIShlMTEgaW5zdGFuY2VvZiBDdXN0b21FdmVudCkpIHsKICAgICAgICAgIGlmICh0aGlzLmlzU2Nyb2xsaW5nID09PSAic21vb3RoIiB8fCB0aGlzLmlzU2Nyb2xsaW5nID09PSBmYWxzZSkgewogICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9OwogICAgICBkaXNwYXRjaFNjcm9sbGVuZEV2ZW50ID0gKCkgPT4gewogICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoInNjcm9sbGVuZCIsIHsKICAgICAgICAgICAgYnViYmxlczogdGhpcy5vcHRpb25zLndyYXBwZXIgPT09IHdpbmRvdywKICAgICAgICAgICAgLy8gY2FuY2VsYWJsZTogZmFsc2UsCiAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgIGxlbmlzU2Nyb2xsRW5kOiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pCiAgICAgICAgKTsKICAgICAgfTsKICAgICAgZ2V0IG92ZXJmbG93KCkgewogICAgICAgIGNvbnN0IHByb3BlcnR5MTEgPSB0aGlzLmlzSG9yaXpvbnRhbCA/ICJvdmVyZmxvdy14IiA6ICJvdmVyZmxvdy15IjsKICAgICAgICByZXR1cm4gZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJvb3RFbGVtZW50KVtwcm9wZXJ0eTExXTsKICAgICAgfQogICAgICBjaGVja092ZXJmbG93KCkgewogICAgICAgIGlmIChbImhpZGRlbiIsICJjbGlwIl0uaW5jbHVkZXModGhpcy5vdmVyZmxvdykpIHsKICAgICAgICAgIHRoaXMuaW50ZXJuYWxTdG9wKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuaW50ZXJuYWxTdGFydCgpOwogICAgICAgIH0KICAgICAgfQogICAgICBvblRyYW5zaXRpb25FbmQgPSAoZXZlbnQpID0+IHsKICAgICAgICBpZiAoZXZlbnQucHJvcGVydHlOYW1lLmluY2x1ZGVzKCJvdmVyZmxvdyIpKSB7CiAgICAgICAgICB0aGlzLmNoZWNrT3ZlcmZsb3coKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHNldFNjcm9sbChzY3JvbGwpIHsKICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHsKICAgICAgICAgIHRoaXMub3B0aW9ucy53cmFwcGVyLnNjcm9sbFRvKHsgbGVmdDogc2Nyb2xsLCBiZWhhdmlvcjogImluc3RhbnQiIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLm9wdGlvbnMud3JhcHBlci5zY3JvbGxUbyh7IHRvcDogc2Nyb2xsLCBiZWhhdmlvcjogImluc3RhbnQiIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBvbkNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgICAgY29uc3QgcGF0aDIgPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBjb25zdCBhbmNob3JFbGVtZW50cyA9IHBhdGgyLmZpbHRlcigKICAgICAgICAgIChub2RlMikgPT4gbm9kZTIgaW5zdGFuY2VvZiBIVE1MQW5jaG9yRWxlbWVudCAmJiBub2RlMi5nZXRBdHRyaWJ1dGUoImhyZWYiKQogICAgICAgICk7CiAgICAgICAgaWYgKHRoaXMub3B0aW9ucy5hbmNob3JzKSB7CiAgICAgICAgICBjb25zdCBhbmNob3IgPSBhbmNob3JFbGVtZW50cy5maW5kKAogICAgICAgICAgICAobm9kZTIpID0+IG5vZGUyLmdldEF0dHJpYnV0ZSgiaHJlZiIpPy5pbmNsdWRlcygiIyIpCiAgICAgICAgICApOwogICAgICAgICAgaWYgKGFuY2hvcikgewogICAgICAgICAgICBjb25zdCBocmVmID0gYW5jaG9yLmdldEF0dHJpYnV0ZSgiaHJlZiIpOwogICAgICAgICAgICBpZiAoaHJlZikgewogICAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB0eXBlb2YgdGhpcy5vcHRpb25zLmFuY2hvcnMgPT09ICJvYmplY3QiICYmIHRoaXMub3B0aW9ucy5hbmNob3JzID8gdGhpcy5vcHRpb25zLmFuY2hvcnMgOiB2b2lkIDA7CiAgICAgICAgICAgICAgY29uc3QgdGFyZ2V0ID0gYCMke2hyZWYuc3BsaXQoIiMiKVsxXX1gOwogICAgICAgICAgICAgIHRoaXMuc2Nyb2xsVG8odGFyZ2V0LCBvcHRpb25zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5vcHRpb25zLnN0b3BJbmVydGlhT25OYXZpZ2F0ZSkgewogICAgICAgICAgY29uc3QgaW50ZXJuYWxMaW5rID0gYW5jaG9yRWxlbWVudHMuZmluZCgKICAgICAgICAgICAgKG5vZGUyKSA9PiBub2RlMi5ob3N0ID09PSB3aW5kb3cubG9jYXRpb24uaG9zdAogICAgICAgICAgKTsKICAgICAgICAgIGlmIChpbnRlcm5hbExpbmspIHsKICAgICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfTsKICAgICAgb25Qb2ludGVyRG93biA9IChldmVudCkgPT4gewogICAgICAgIGlmIChldmVudC5idXR0b24gPT09IDEpIHsKICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIG9uVmlydHVhbFNjcm9sbCA9IChkYXRhKSA9PiB7CiAgICAgICAgaWYgKHR5cGVvZiB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbCA9PT0gImZ1bmN0aW9uIiAmJiB0aGlzLm9wdGlvbnMudmlydHVhbFNjcm9sbChkYXRhKSA9PT0gZmFsc2UpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSA9IGRhdGE7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInZpcnR1YWwtc2Nyb2xsIiwgeyBkZWx0YVgsIGRlbHRhWSwgZXZlbnQgfSk7CiAgICAgICAgaWYgKGV2ZW50LmN0cmxLZXkpIHJldHVybjsKICAgICAgICBpZiAoZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24pIHJldHVybjsKICAgICAgICBjb25zdCBpc1RvdWNoID0gZXZlbnQudHlwZS5pbmNsdWRlcygidG91Y2giKTsKICAgICAgICBjb25zdCBpc1doZWVsID0gZXZlbnQudHlwZS5pbmNsdWRlcygid2hlZWwiKTsKICAgICAgICB0aGlzLmlzVG91Y2hpbmcgPSBldmVudC50eXBlID09PSAidG91Y2hzdGFydCIgfHwgZXZlbnQudHlwZSA9PT0gInRvdWNobW92ZSI7CiAgICAgICAgY29uc3QgaXNDbGlja09yVGFwID0gZGVsdGFYID09PSAwICYmIGRlbHRhWSA9PT0gMDsKICAgICAgICBjb25zdCBpc1RhcFRvU3RvcCA9IHRoaXMub3B0aW9ucy5zeW5jVG91Y2ggJiYgaXNUb3VjaCAmJiBldmVudC50eXBlID09PSAidG91Y2hzdGFydCIgJiYgaXNDbGlja09yVGFwICYmICF0aGlzLmlzU3RvcHBlZCAmJiAhdGhpcy5pc0xvY2tlZDsKICAgICAgICBpZiAoaXNUYXBUb1N0b3ApIHsKICAgICAgICAgIHRoaXMucmVzZXQoKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNVbmtub3duR2VzdHVyZSA9IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIgJiYgZGVsdGFZID09PSAwIHx8IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiBkZWx0YVggPT09IDA7CiAgICAgICAgaWYgKGlzQ2xpY2tPclRhcCB8fCBpc1Vua25vd25HZXN0dXJlKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGxldCBjb21wb3NlZFBhdGggPSBldmVudC5jb21wb3NlZFBhdGgoKTsKICAgICAgICBjb21wb3NlZFBhdGggPSBjb21wb3NlZFBhdGguc2xpY2UoMCwgY29tcG9zZWRQYXRoLmluZGV4T2YodGhpcy5yb290RWxlbWVudCkpOwogICAgICAgIGNvbnN0IHByZXZlbnQgPSB0aGlzLm9wdGlvbnMucHJldmVudDsKICAgICAgICBpZiAoISFjb21wb3NlZFBhdGguZmluZCgKICAgICAgICAgIChub2RlMikgPT4gbm9kZTIgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiAodHlwZW9mIHByZXZlbnQgPT09ICJmdW5jdGlvbiIgJiYgcHJldmVudD8uKG5vZGUyKSB8fCBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50IikgfHwgaXNUb3VjaCAmJiBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXRvdWNoIikgfHwgaXNXaGVlbCAmJiBub2RlMi5oYXNBdHRyaWJ1dGU/LigiZGF0YS1sZW5pcy1wcmV2ZW50LXdoZWVsIikgfHwgdGhpcy5vcHRpb25zLmFsbG93TmVzdGVkU2Nyb2xsICYmIHRoaXMuY2hlY2tOZXN0ZWRTY3JvbGwobm9kZTIsIHsgZGVsdGFYLCBkZWx0YVkgfSkpCiAgICAgICAgKSkKICAgICAgICAgIHJldHVybjsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5pc0xvY2tlZCkgewogICAgICAgICAgaWYgKGV2ZW50LmNhbmNlbGFibGUpIHsKICAgICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNTbW9vdGggPSB0aGlzLm9wdGlvbnMuc3luY1RvdWNoICYmIGlzVG91Y2ggfHwgdGhpcy5vcHRpb25zLnNtb290aFdoZWVsICYmIGlzV2hlZWw7CiAgICAgICAgaWYgKCFpc1Ntb290aCkgewogICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJuYXRpdmUiOwogICAgICAgICAgdGhpcy5hbmltYXRlLnN0b3AoKTsKICAgICAgICAgIGV2ZW50LmxlbmlzU3RvcFByb3BhZ2F0aW9uID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgbGV0IGRlbHRhID0gZGVsdGFZOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiYm90aCIpIHsKICAgICAgICAgIGRlbHRhID0gTWF0aC5hYnMoZGVsdGFZKSA+IE1hdGguYWJzKGRlbHRhWCkgPyBkZWx0YVkgOiBkZWx0YVg7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLm9wdGlvbnMuZ2VzdHVyZU9yaWVudGF0aW9uID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICAgIGRlbHRhID0gZGVsdGFYOwogICAgICAgIH0KICAgICAgICBpZiAoIXRoaXMub3B0aW9ucy5vdmVyc2Nyb2xsIHx8IHRoaXMub3B0aW9ucy5pbmZpbml0ZSB8fCB0aGlzLm9wdGlvbnMud3JhcHBlciAhPT0gd2luZG93ICYmIHRoaXMubGltaXQgPiAwICYmICh0aGlzLmFuaW1hdGVkU2Nyb2xsID4gMCAmJiB0aGlzLmFuaW1hdGVkU2Nyb2xsIDwgdGhpcy5saW1pdCB8fCB0aGlzLmFuaW1hdGVkU2Nyb2xsID09PSAwICYmIGRlbHRhWSA+IDAgfHwgdGhpcy5hbmltYXRlZFNjcm9sbCA9PT0gdGhpcy5saW1pdCAmJiBkZWx0YVkgPCAwKSkgewogICAgICAgICAgZXZlbnQubGVuaXNTdG9wUHJvcGFnYXRpb24gPSB0cnVlOwogICAgICAgIH0KICAgICAgICBpZiAoZXZlbnQuY2FuY2VsYWJsZSkgewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXNTeW5jVG91Y2ggPSBpc1RvdWNoICYmIHRoaXMub3B0aW9ucy5zeW5jVG91Y2g7CiAgICAgICAgY29uc3QgaXNUb3VjaEVuZCA9IGlzVG91Y2ggJiYgZXZlbnQudHlwZSA9PT0gInRvdWNoZW5kIjsKICAgICAgICBjb25zdCBoYXNUb3VjaEluZXJ0aWEgPSBpc1RvdWNoRW5kOwogICAgICAgIGlmIChoYXNUb3VjaEluZXJ0aWEpIHsKICAgICAgICAgIGRlbHRhID0gTWF0aC5zaWduKHRoaXMudmVsb2NpdHkpICogTWF0aC5wb3coTWF0aC5hYnModGhpcy52ZWxvY2l0eSksIHRoaXMub3B0aW9ucy50b3VjaEluZXJ0aWFFeHBvbmVudCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuc2Nyb2xsVG8odGhpcy50YXJnZXRTY3JvbGwgKyBkZWx0YSwgewogICAgICAgICAgcHJvZ3JhbW1hdGljOiBmYWxzZSwKICAgICAgICAgIC4uLmlzU3luY1RvdWNoID8gewogICAgICAgICAgICBsZXJwOiBoYXNUb3VjaEluZXJ0aWEgPyB0aGlzLm9wdGlvbnMuc3luY1RvdWNoTGVycCA6IDEKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIGxlcnA6IHRoaXMub3B0aW9ucy5sZXJwLAogICAgICAgICAgICBkdXJhdGlvbjogdGhpcy5vcHRpb25zLmR1cmF0aW9uLAogICAgICAgICAgICBlYXNpbmc6IHRoaXMub3B0aW9ucy5lYXNpbmcKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfTsKICAgICAgLyoqCiAgICAgICAqIEZvcmNlIGxlbmlzIHRvIHJlY2FsY3VsYXRlIHRoZSBkaW1lbnNpb25zCiAgICAgICAqLwogICAgICByZXNpemUoKSB7CiAgICAgICAgdGhpcy5kaW1lbnNpb25zLnJlc2l6ZSgpOwogICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIGVtaXQoKSB7CiAgICAgICAgdGhpcy5lbWl0dGVyLmVtaXQoInNjcm9sbCIsIHRoaXMpOwogICAgICB9CiAgICAgIG9uTmF0aXZlU2Nyb2xsID0gKCkgPT4gewogICAgICAgIGlmICh0aGlzLl9yZXNldFZlbG9jaXR5VGltZW91dCAhPT0gbnVsbCkgewogICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0KTsKICAgICAgICAgIHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQpIHsKICAgICAgICAgIHRoaXMuX3ByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcgPT09IGZhbHNlIHx8IHRoaXMuaXNTY3JvbGxpbmcgPT09ICJuYXRpdmUiKSB7CiAgICAgICAgICBjb25zdCBsYXN0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgPSB0aGlzLnRhcmdldFNjcm9sbCA9IHRoaXMuYWN0dWFsU2Nyb2xsOwogICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgdGhpcy52ZWxvY2l0eSA9IHRoaXMuYW5pbWF0ZWRTY3JvbGwgLSBsYXN0U2Nyb2xsOwogICAgICAgICAgdGhpcy5kaXJlY3Rpb24gPSBNYXRoLnNpZ24oCiAgICAgICAgICAgIHRoaXMuYW5pbWF0ZWRTY3JvbGwgLSBsYXN0U2Nyb2xsCiAgICAgICAgICApOwogICAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgewogICAgICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gIm5hdGl2ZSI7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgIGlmICh0aGlzLnZlbG9jaXR5ICE9PSAwKSB7CiAgICAgICAgICAgIHRoaXMuX3Jlc2V0VmVsb2NpdHlUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5OwogICAgICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSAwOwogICAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSBmYWxzZTsKICAgICAgICAgICAgICB0aGlzLmVtaXQoKTsKICAgICAgICAgICAgfSwgNDAwKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH07CiAgICAgIHJlc2V0KCkgewogICAgICAgIHRoaXMuaXNMb2NrZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmlzU2Nyb2xsaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hY3R1YWxTY3JvbGw7CiAgICAgICAgdGhpcy5sYXN0VmVsb2NpdHkgPSB0aGlzLnZlbG9jaXR5ID0gMDsKICAgICAgICB0aGlzLmFuaW1hdGUuc3RvcCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTdGFydCBsZW5pcyBzY3JvbGwgYWZ0ZXIgaXQgaGFzIGJlZW4gc3RvcHBlZAogICAgICAgKi8KICAgICAgc3RhcnQoKSB7CiAgICAgICAgaWYgKCF0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgewogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgib3ZlcmZsb3ciKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5pbnRlcm5hbFN0YXJ0KCk7CiAgICAgIH0KICAgICAgaW50ZXJuYWxTdGFydCgpIHsKICAgICAgICBpZiAoIXRoaXMuaXNTdG9wcGVkKSByZXR1cm47CiAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgIHRoaXMuaXNTdG9wcGVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5lbWl0KCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFN0b3AgbGVuaXMgc2Nyb2xsCiAgICAgICAqLwogICAgICBzdG9wKCkgewogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLm9wdGlvbnMuYXV0b1RvZ2dsZSkgewogICAgICAgICAgdGhpcy5yb290RWxlbWVudC5zdHlsZS5zZXRQcm9wZXJ0eSgib3ZlcmZsb3ciLCAiY2xpcCIpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICB0aGlzLmludGVybmFsU3RvcCgpOwogICAgICB9CiAgICAgIGludGVybmFsU3RvcCgpIHsKICAgICAgICBpZiAodGhpcy5pc1N0b3BwZWQpIHJldHVybjsKICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgdGhpcy5pc1N0b3BwZWQgPSB0cnVlOwogICAgICAgIHRoaXMuZW1pdCgpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZXF1ZXN0QW5pbWF0aW9uRnJhbWUgZm9yIGxlbmlzCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSB0aW1lIFRoZSB0aW1lIGluIG1zIGZyb20gYW4gZXh0ZXJuYWwgY2xvY2sgbGlrZSBgcmVxdWVzdEFuaW1hdGlvbkZyYW1lYCBvciBUZW1wdXMKICAgICAgICovCiAgICAgIHJhZiA9ICh0aW1lKSA9PiB7CiAgICAgICAgY29uc3QgZGVsdGFUaW1lID0gdGltZSAtICh0aGlzLnRpbWUgfHwgdGltZSk7CiAgICAgICAgdGhpcy50aW1lID0gdGltZTsKICAgICAgICB0aGlzLmFuaW1hdGUuYWR2YW5jZShkZWx0YVRpbWUgKiAxZS0zKTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9SYWYpIHsKICAgICAgICAgIHRoaXMuX3JhZklkID0gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmFmKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIC8qKgogICAgICAgKiBTY3JvbGwgdG8gYSB0YXJnZXQgdmFsdWUKICAgICAgICoKICAgICAgICogQHBhcmFtIHRhcmdldCBUaGUgdGFyZ2V0IHZhbHVlIHRvIHNjcm9sbCB0bwogICAgICAgKiBAcGFyYW0gb3B0aW9ucyBUaGUgb3B0aW9ucyBmb3IgdGhlIHNjcm9sbAogICAgICAgKgogICAgICAgKiBAZXhhbXBsZQogICAgICAgKiBsZW5pcy5zY3JvbGxUbygxMDAsIHsKICAgICAgICogICBvZmZzZXQ6IDEwMCwKICAgICAgICogICBkdXJhdGlvbjogMSwKICAgICAgICogICBlYXNpbmc6ICh0KSA9PiAxIC0gTWF0aC5jb3MoKHQgKiBNYXRoLlBJKSAvIDIpLAogICAgICAgKiAgIGxlcnA6IDAuMSwKICAgICAgICogICBvblN0YXJ0OiAoKSA9PiB7CiAgICAgICAqICAgICBjb25zb2xlLmxvZygnb25TdGFydCcpCiAgICAgICAqICAgfSwKICAgICAgICogICBvbkNvbXBsZXRlOiAoKSA9PiB7CiAgICAgICAqICAgICBjb25zb2xlLmxvZygnb25Db21wbGV0ZScpCiAgICAgICAqICAgfSwKICAgICAgICogfSkKICAgICAgICovCiAgICAgIHNjcm9sbFRvKHRhcmdldCwgewogICAgICAgIG9mZnNldCA9IDAsCiAgICAgICAgaW1tZWRpYXRlID0gZmFsc2UsCiAgICAgICAgbG9jayA9IGZhbHNlLAogICAgICAgIHByb2dyYW1tYXRpYyA9IHRydWUsCiAgICAgICAgLy8gY2FsbGVkIGZyb20gb3V0c2lkZSBvZiB0aGUgY2xhc3MKICAgICAgICBsZXJwOiBsZXJwMiA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5sZXJwIDogdm9pZCAwLAogICAgICAgIGR1cmF0aW9uID0gcHJvZ3JhbW1hdGljID8gdGhpcy5vcHRpb25zLmR1cmF0aW9uIDogdm9pZCAwLAogICAgICAgIGVhc2luZyA9IHByb2dyYW1tYXRpYyA/IHRoaXMub3B0aW9ucy5lYXNpbmcgOiB2b2lkIDAsCiAgICAgICAgb25TdGFydCwKICAgICAgICBvbkNvbXBsZXRlLAogICAgICAgIGZvcmNlID0gZmFsc2UsCiAgICAgICAgLy8gc2Nyb2xsIGV2ZW4gaWYgc3RvcHBlZAogICAgICAgIHVzZXJEYXRhCiAgICAgIH0gPSB7fSkgewogICAgICAgIGlmICgodGhpcy5pc1N0b3BwZWQgfHwgdGhpcy5pc0xvY2tlZCkgJiYgIWZvcmNlKSByZXR1cm47CiAgICAgICAgaWYgKHR5cGVvZiB0YXJnZXQgPT09ICJzdHJpbmciICYmIFsidG9wIiwgImxlZnQiLCAic3RhcnQiLCAiIyJdLmluY2x1ZGVzKHRhcmdldCkpIHsKICAgICAgICAgIHRhcmdldCA9IDA7CiAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgdGFyZ2V0ID09PSAic3RyaW5nIiAmJiBbImJvdHRvbSIsICJyaWdodCIsICJlbmQiXS5pbmNsdWRlcyh0YXJnZXQpKSB7CiAgICAgICAgICB0YXJnZXQgPSB0aGlzLmxpbWl0OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBsZXQgbm9kZTI7CiAgICAgICAgICBpZiAodHlwZW9mIHRhcmdldCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgbm9kZTIgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7CiAgICAgICAgICAgIGlmICghbm9kZTIpIHsKICAgICAgICAgICAgICBpZiAodGFyZ2V0ID09PSAiI3RvcCIpIHsKICAgICAgICAgICAgICAgIHRhcmdldCA9IDA7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUud2FybigiTGVuaXM6IFRhcmdldCBub3QgZm91bmQiLCB0YXJnZXQpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBlbHNlIGlmICh0YXJnZXQgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCAmJiB0YXJnZXQ/Lm5vZGVUeXBlKSB7CiAgICAgICAgICAgIG5vZGUyID0gdGFyZ2V0OwogICAgICAgICAgfQogICAgICAgICAgaWYgKG5vZGUyKSB7CiAgICAgICAgICAgIGlmICh0aGlzLm9wdGlvbnMud3JhcHBlciAhPT0gd2luZG93KSB7CiAgICAgICAgICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSB0aGlzLnJvb3RFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIG9mZnNldCAtPSB0aGlzLmlzSG9yaXpvbnRhbCA/IHdyYXBwZXJSZWN0LmxlZnQgOiB3cmFwcGVyUmVjdC50b3A7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVjdCA9IG5vZGUyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICB0YXJnZXQgPSAodGhpcy5pc0hvcml6b250YWwgPyByZWN0LmxlZnQgOiByZWN0LnRvcCkgKyB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIHRhcmdldCAhPT0gIm51bWJlciIpIHJldHVybjsKICAgICAgICB0YXJnZXQgKz0gb2Zmc2V0OwogICAgICAgIHRhcmdldCA9IE1hdGgucm91bmQodGFyZ2V0KTsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmluZmluaXRlKSB7CiAgICAgICAgICBpZiAocHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGhpcy5hbmltYXRlZFNjcm9sbCA9IHRoaXMuc2Nyb2xsOwogICAgICAgICAgICBjb25zdCBkaXN0YW5jZSA9IHRhcmdldCAtIHRoaXMuYW5pbWF0ZWRTY3JvbGw7CiAgICAgICAgICAgIGlmIChkaXN0YW5jZSA+IHRoaXMubGltaXQgLyAyKSB7CiAgICAgICAgICAgICAgdGFyZ2V0ID0gdGFyZ2V0IC0gdGhpcy5saW1pdDsKICAgICAgICAgICAgfSBlbHNlIGlmIChkaXN0YW5jZSA8IC10aGlzLmxpbWl0IC8gMikgewogICAgICAgICAgICAgIHRhcmdldCA9IHRhcmdldCArIHRoaXMubGltaXQ7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGFyZ2V0ID0gY2xhbXAyKDAsIHRhcmdldCwgdGhpcy5saW1pdCk7CiAgICAgICAgfQogICAgICAgIGlmICh0YXJnZXQgPT09IHRoaXMudGFyZ2V0U2Nyb2xsKSB7CiAgICAgICAgICBvblN0YXJ0Py4odGhpcyk7CiAgICAgICAgICBvbkNvbXBsZXRlPy4odGhpcyk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMudXNlckRhdGEgPSB1c2VyRGF0YSA/PyB7fTsKICAgICAgICBpZiAoaW1tZWRpYXRlKSB7CiAgICAgICAgICB0aGlzLmFuaW1hdGVkU2Nyb2xsID0gdGhpcy50YXJnZXRTY3JvbGwgPSB0YXJnZXQ7CiAgICAgICAgICB0aGlzLnNldFNjcm9sbCh0aGlzLnNjcm9sbCk7CiAgICAgICAgICB0aGlzLnJlc2V0KCk7CiAgICAgICAgICB0aGlzLnByZXZlbnROZXh0TmF0aXZlU2Nyb2xsRXZlbnQoKTsKICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgb25Db21wbGV0ZT8uKHRoaXMpOwogICAgICAgICAgdGhpcy51c2VyRGF0YSA9IHt9OwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaFNjcm9sbGVuZEV2ZW50KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKCFwcm9ncmFtbWF0aWMpIHsKICAgICAgICAgIHRoaXMudGFyZ2V0U2Nyb2xsID0gdGFyZ2V0OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIGR1cmF0aW9uID09PSAibnVtYmVyIiAmJiB0eXBlb2YgZWFzaW5nICE9PSAiZnVuY3Rpb24iKSB7CiAgICAgICAgICBlYXNpbmcgPSBkZWZhdWx0RWFzaW5nOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIGVhc2luZyA9PT0gImZ1bmN0aW9uIiAmJiB0eXBlb2YgZHVyYXRpb24gIT09ICJudW1iZXIiKSB7CiAgICAgICAgICBkdXJhdGlvbiA9IDE7CiAgICAgICAgfQogICAgICAgIHRoaXMuYW5pbWF0ZS5mcm9tVG8odGhpcy5hbmltYXRlZFNjcm9sbCwgdGFyZ2V0LCB7CiAgICAgICAgICBkdXJhdGlvbiwKICAgICAgICAgIGVhc2luZywKICAgICAgICAgIGxlcnA6IGxlcnAyLAogICAgICAgICAgb25TdGFydDogKCkgPT4gewogICAgICAgICAgICBpZiAobG9jaykgdGhpcy5pc0xvY2tlZCA9IHRydWU7CiAgICAgICAgICAgIHRoaXMuaXNTY3JvbGxpbmcgPSAic21vb3RoIjsKICAgICAgICAgICAgb25TdGFydD8uKHRoaXMpOwogICAgICAgICAgfSwKICAgICAgICAgIG9uVXBkYXRlOiAodmFsdWUyLCBjb21wbGV0ZWQpID0+IHsKICAgICAgICAgICAgdGhpcy5pc1Njcm9sbGluZyA9ICJzbW9vdGgiOwogICAgICAgICAgICB0aGlzLmxhc3RWZWxvY2l0eSA9IHRoaXMudmVsb2NpdHk7CiAgICAgICAgICAgIHRoaXMudmVsb2NpdHkgPSB2YWx1ZTIgLSB0aGlzLmFuaW1hdGVkU2Nyb2xsOwogICAgICAgICAgICB0aGlzLmRpcmVjdGlvbiA9IE1hdGguc2lnbih0aGlzLnZlbG9jaXR5KTsKICAgICAgICAgICAgdGhpcy5hbmltYXRlZFNjcm9sbCA9IHZhbHVlMjsKICAgICAgICAgICAgdGhpcy5zZXRTY3JvbGwodGhpcy5zY3JvbGwpOwogICAgICAgICAgICBpZiAocHJvZ3JhbW1hdGljKSB7CiAgICAgICAgICAgICAgdGhpcy50YXJnZXRTY3JvbGwgPSB2YWx1ZTI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCFjb21wbGV0ZWQpIHRoaXMuZW1pdCgpOwogICAgICAgICAgICBpZiAoY29tcGxldGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5yZXNldCgpOwogICAgICAgICAgICAgIHRoaXMuZW1pdCgpOwogICAgICAgICAgICAgIG9uQ29tcGxldGU/Lih0aGlzKTsKICAgICAgICAgICAgICB0aGlzLnVzZXJEYXRhID0ge307CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTY3JvbGxlbmRFdmVudCgpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHRoaXMucHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCgpIHsKICAgICAgICB0aGlzLl9wcmV2ZW50TmV4dE5hdGl2ZVNjcm9sbEV2ZW50ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgdGhpcy5fcHJldmVudE5leHROYXRpdmVTY3JvbGxFdmVudCA9IGZhbHNlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGNoZWNrTmVzdGVkU2Nyb2xsKG5vZGUyLCB7IGRlbHRhWCwgZGVsdGFZIH0pIHsKICAgICAgICBjb25zdCB0aW1lID0gRGF0ZS5ub3coKTsKICAgICAgICBjb25zdCBjYWNoZSA9IG5vZGUyLl9sZW5pcyA/Pz0ge307CiAgICAgICAgbGV0IGhhc092ZXJmbG93WCwgaGFzT3ZlcmZsb3dZLCBpc1Njcm9sbGFibGVYLCBpc1Njcm9sbGFibGVZLCBzY3JvbGxXaWR0aCwgc2Nyb2xsSGVpZ2h0LCBjbGllbnRXaWR0aCwgY2xpZW50SGVpZ2h0OwogICAgICAgIGNvbnN0IGdlc3R1cmVPcmllbnRhdGlvbiA9IHRoaXMub3B0aW9ucy5nZXN0dXJlT3JpZW50YXRpb247CiAgICAgICAgaWYgKHRpbWUgLSAoY2FjaGUudGltZSA/PyAwKSA+IDJlMykgewogICAgICAgICAgY2FjaGUudGltZSA9IERhdGUubm93KCk7CiAgICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUobm9kZTIpOwogICAgICAgICAgY2FjaGUuY29tcHV0ZWRTdHlsZSA9IGNvbXB1dGVkU3R5bGU7CiAgICAgICAgICBjb25zdCBvdmVyZmxvd1hTdHJpbmcgPSBjb21wdXRlZFN0eWxlLm92ZXJmbG93WDsKICAgICAgICAgIGNvbnN0IG92ZXJmbG93WVN0cmluZyA9IGNvbXB1dGVkU3R5bGUub3ZlcmZsb3dZOwogICAgICAgICAgaGFzT3ZlcmZsb3dYID0gWyJhdXRvIiwgIm92ZXJsYXkiLCAic2Nyb2xsIl0uaW5jbHVkZXMob3ZlcmZsb3dYU3RyaW5nKTsKICAgICAgICAgIGhhc092ZXJmbG93WSA9IFsiYXV0byIsICJvdmVybGF5IiwgInNjcm9sbCJdLmluY2x1ZGVzKG92ZXJmbG93WVN0cmluZyk7CiAgICAgICAgICBjYWNoZS5oYXNPdmVyZmxvd1ggPSBoYXNPdmVyZmxvd1g7CiAgICAgICAgICBjYWNoZS5oYXNPdmVyZmxvd1kgPSBoYXNPdmVyZmxvd1k7CiAgICAgICAgICBpZiAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAoZ2VzdHVyZU9yaWVudGF0aW9uID09PSAidmVydGljYWwiICYmICFoYXNPdmVyZmxvd1kpIHJldHVybiBmYWxzZTsKICAgICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiAhaGFzT3ZlcmZsb3dYKSByZXR1cm4gZmFsc2U7CiAgICAgICAgICBzY3JvbGxXaWR0aCA9IG5vZGUyLnNjcm9sbFdpZHRoOwogICAgICAgICAgc2Nyb2xsSGVpZ2h0ID0gbm9kZTIuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2xpZW50V2lkdGggPSBub2RlMi5jbGllbnRXaWR0aDsKICAgICAgICAgIGNsaWVudEhlaWdodCA9IG5vZGUyLmNsaWVudEhlaWdodDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZVggPSBzY3JvbGxXaWR0aCA+IGNsaWVudFdpZHRoOwogICAgICAgICAgaXNTY3JvbGxhYmxlWSA9IHNjcm9sbEhlaWdodCA+IGNsaWVudEhlaWdodDsKICAgICAgICAgIGNhY2hlLmlzU2Nyb2xsYWJsZVggPSBpc1Njcm9sbGFibGVYOwogICAgICAgICAgY2FjaGUuaXNTY3JvbGxhYmxlWSA9IGlzU2Nyb2xsYWJsZVk7CiAgICAgICAgICBjYWNoZS5zY3JvbGxXaWR0aCA9IHNjcm9sbFdpZHRoOwogICAgICAgICAgY2FjaGUuc2Nyb2xsSGVpZ2h0ID0gc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY2FjaGUuY2xpZW50V2lkdGggPSBjbGllbnRXaWR0aDsKICAgICAgICAgIGNhY2hlLmNsaWVudEhlaWdodCA9IGNsaWVudEhlaWdodDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaXNTY3JvbGxhYmxlWCA9IGNhY2hlLmlzU2Nyb2xsYWJsZVg7CiAgICAgICAgICBpc1Njcm9sbGFibGVZID0gY2FjaGUuaXNTY3JvbGxhYmxlWTsKICAgICAgICAgIGhhc092ZXJmbG93WCA9IGNhY2hlLmhhc092ZXJmbG93WDsKICAgICAgICAgIGhhc092ZXJmbG93WSA9IGNhY2hlLmhhc092ZXJmbG93WTsKICAgICAgICAgIHNjcm9sbFdpZHRoID0gY2FjaGUuc2Nyb2xsV2lkdGg7CiAgICAgICAgICBzY3JvbGxIZWlnaHQgPSBjYWNoZS5zY3JvbGxIZWlnaHQ7CiAgICAgICAgICBjbGllbnRXaWR0aCA9IGNhY2hlLmNsaWVudFdpZHRoOwogICAgICAgICAgY2xpZW50SGVpZ2h0ID0gY2FjaGUuY2xpZW50SGVpZ2h0OwogICAgICAgIH0KICAgICAgICBpZiAoIWhhc092ZXJmbG93WCAmJiAhaGFzT3ZlcmZsb3dZIHx8ICFpc1Njcm9sbGFibGVYICYmICFpc1Njcm9sbGFibGVZKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIgJiYgKCFoYXNPdmVyZmxvd1kgfHwgIWlzU2Nyb2xsYWJsZVkpKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIiAmJiAoIWhhc092ZXJmbG93WCB8fCAhaXNTY3JvbGxhYmxlWCkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgbGV0IG9yaWVudGF0aW9uOwogICAgICAgIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIikgewogICAgICAgICAgb3JpZW50YXRpb24gPSAieCI7CiAgICAgICAgfSBlbHNlIGlmIChnZXN0dXJlT3JpZW50YXRpb24gPT09ICJ2ZXJ0aWNhbCIpIHsKICAgICAgICAgIG9yaWVudGF0aW9uID0gInkiOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1ggPSBkZWx0YVggIT09IDA7CiAgICAgICAgICBjb25zdCBpc1Njcm9sbGluZ1kgPSBkZWx0YVkgIT09IDA7CiAgICAgICAgICBpZiAoaXNTY3JvbGxpbmdYICYmIGhhc092ZXJmbG93WCAmJiBpc1Njcm9sbGFibGVYKSB7CiAgICAgICAgICAgIG9yaWVudGF0aW9uID0gIngiOwogICAgICAgICAgfQogICAgICAgICAgaWYgKGlzU2Nyb2xsaW5nWSAmJiBoYXNPdmVyZmxvd1kgJiYgaXNTY3JvbGxhYmxlWSkgewogICAgICAgICAgICBvcmllbnRhdGlvbiA9ICJ5IjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCFvcmllbnRhdGlvbikgcmV0dXJuIGZhbHNlOwogICAgICAgIGxldCBzY3JvbGwsIG1heFNjcm9sbCwgZGVsdGEsIGhhc092ZXJmbG93LCBpc1Njcm9sbGFibGU7CiAgICAgICAgaWYgKG9yaWVudGF0aW9uID09PSAieCIpIHsKICAgICAgICAgIHNjcm9sbCA9IG5vZGUyLnNjcm9sbExlZnQ7CiAgICAgICAgICBtYXhTY3JvbGwgPSBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoOwogICAgICAgICAgZGVsdGEgPSBkZWx0YVg7CiAgICAgICAgICBoYXNPdmVyZmxvdyA9IGhhc092ZXJmbG93WDsKICAgICAgICAgIGlzU2Nyb2xsYWJsZSA9IGlzU2Nyb2xsYWJsZVg7CiAgICAgICAgfSBlbHNlIGlmIChvcmllbnRhdGlvbiA9PT0gInkiKSB7CiAgICAgICAgICBzY3JvbGwgPSBub2RlMi5zY3JvbGxUb3A7CiAgICAgICAgICBtYXhTY3JvbGwgPSBzY3JvbGxIZWlnaHQgLSBjbGllbnRIZWlnaHQ7CiAgICAgICAgICBkZWx0YSA9IGRlbHRhWTsKICAgICAgICAgIGhhc092ZXJmbG93ID0gaGFzT3ZlcmZsb3dZOwogICAgICAgICAgaXNTY3JvbGxhYmxlID0gaXNTY3JvbGxhYmxlWTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjb25zdCB3aWxsU2Nyb2xsID0gZGVsdGEgPiAwID8gc2Nyb2xsIDwgbWF4U2Nyb2xsIDogc2Nyb2xsID4gMDsKICAgICAgICByZXR1cm4gd2lsbFNjcm9sbCAmJiBoYXNPdmVyZmxvdyAmJiBpc1Njcm9sbGFibGU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSByb290IGVsZW1lbnQgb24gd2hpY2ggbGVuaXMgaXMgaW5zdGFuY2VkCiAgICAgICAqLwogICAgICBnZXQgcm9vdEVsZW1lbnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMub3B0aW9ucy53cmFwcGVyID09PSB3aW5kb3cgPyBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQgOiB0aGlzLm9wdGlvbnMud3JhcHBlcjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGxpbWl0IHdoaWNoIGlzIHRoZSBtYXhpbXVtIHNjcm9sbCB2YWx1ZQogICAgICAgKi8KICAgICAgZ2V0IGxpbWl0KCkgewogICAgICAgIGlmICh0aGlzLm9wdGlvbnMubmFpdmVEaW1lbnNpb25zKSB7CiAgICAgICAgICBpZiAodGhpcy5pc0hvcml6b250YWwpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdEVsZW1lbnQuc2Nyb2xsV2lkdGggLSB0aGlzLnJvb3RFbGVtZW50LmNsaWVudFdpZHRoOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMucm9vdEVsZW1lbnQuc2Nyb2xsSGVpZ2h0IC0gdGhpcy5yb290RWxlbWVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB0aGlzLmRpbWVuc2lvbnMubGltaXRbdGhpcy5pc0hvcml6b250YWwgPyAieCIgOiAieSJdOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogV2hldGhlciBvciBub3QgdGhlIHNjcm9sbCBpcyBob3Jpem9udGFsCiAgICAgICAqLwogICAgICBnZXQgaXNIb3Jpem9udGFsKCkgewogICAgICAgIHJldHVybiB0aGlzLm9wdGlvbnMub3JpZW50YXRpb24gPT09ICJob3Jpem9udGFsIjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIGFjdHVhbCBzY3JvbGwgdmFsdWUKICAgICAgICovCiAgICAgIGdldCBhY3R1YWxTY3JvbGwoKSB7CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMub3B0aW9ucy53cmFwcGVyOwogICAgICAgIHJldHVybiB0aGlzLmlzSG9yaXpvbnRhbCA/IHdyYXBwZXIuc2Nyb2xsWCA/PyB3cmFwcGVyLnNjcm9sbExlZnQgOiB3cmFwcGVyLnNjcm9sbFkgPz8gd3JhcHBlci5zY3JvbGxUb3A7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBjdXJyZW50IHNjcm9sbCB2YWx1ZQogICAgICAgKi8KICAgICAgZ2V0IHNjcm9sbCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmluZmluaXRlID8gbW9kdWxvKHRoaXMuYW5pbWF0ZWRTY3JvbGwsIHRoaXMubGltaXQpIDogdGhpcy5hbmltYXRlZFNjcm9sbDsKICAgICAgfQogICAgICAvKioKICAgICAgICogVGhlIHByb2dyZXNzIG9mIHRoZSBzY3JvbGwgcmVsYXRpdmUgdG8gdGhlIGxpbWl0CiAgICAgICAqLwogICAgICBnZXQgcHJvZ3Jlc3MoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMubGltaXQgPT09IDAgPyAxIDogdGhpcy5zY3JvbGwgLyB0aGlzLmxpbWl0OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDdXJyZW50IHNjcm9sbCBzdGF0ZQogICAgICAgKi8KICAgICAgZ2V0IGlzU2Nyb2xsaW5nKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc1Njcm9sbGluZzsKICAgICAgfQogICAgICBzZXQgaXNTY3JvbGxpbmcodmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzU2Nyb2xsaW5nICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzU2Nyb2xsaW5nID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIHN0b3BwZWQKICAgICAgICovCiAgICAgIGdldCBpc1N0b3BwZWQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuX2lzU3RvcHBlZDsKICAgICAgfQogICAgICBzZXQgaXNTdG9wcGVkKHZhbHVlMikgewogICAgICAgIGlmICh0aGlzLl9pc1N0b3BwZWQgIT09IHZhbHVlMikgewogICAgICAgICAgdGhpcy5faXNTdG9wcGVkID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIGxvY2tlZAogICAgICAgKi8KICAgICAgZ2V0IGlzTG9ja2VkKCkgewogICAgICAgIHJldHVybiB0aGlzLl9pc0xvY2tlZDsKICAgICAgfQogICAgICBzZXQgaXNMb2NrZWQodmFsdWUyKSB7CiAgICAgICAgaWYgKHRoaXMuX2lzTG9ja2VkICE9PSB2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuX2lzTG9ja2VkID0gdmFsdWUyOwogICAgICAgICAgdGhpcy51cGRhdGVDbGFzc05hbWUoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENoZWNrIGlmIGxlbmlzIGlzIHNtb290aCBzY3JvbGxpbmcKICAgICAgICovCiAgICAgIGdldCBpc1Ntb290aCgpIHsKICAgICAgICByZXR1cm4gdGhpcy5pc1Njcm9sbGluZyA9PT0gInNtb290aCI7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBjbGFzcyBuYW1lIGFwcGxpZWQgdG8gdGhlIHdyYXBwZXIgZWxlbWVudAogICAgICAgKi8KICAgICAgZ2V0IGNsYXNzTmFtZSgpIHsKICAgICAgICBsZXQgY2xhc3NOYW1lID0gImxlbmlzIjsKICAgICAgICBpZiAodGhpcy5vcHRpb25zLmF1dG9Ub2dnbGUpIGNsYXNzTmFtZSArPSAiIGxlbmlzLWF1dG9Ub2dnbGUiOwogICAgICAgIGlmICh0aGlzLmlzU3RvcHBlZCkgY2xhc3NOYW1lICs9ICIgbGVuaXMtc3RvcHBlZCI7CiAgICAgICAgaWYgKHRoaXMuaXNMb2NrZWQpIGNsYXNzTmFtZSArPSAiIGxlbmlzLWxvY2tlZCI7CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcpIGNsYXNzTmFtZSArPSAiIGxlbmlzLXNjcm9sbGluZyI7CiAgICAgICAgaWYgKHRoaXMuaXNTY3JvbGxpbmcgPT09ICJzbW9vdGgiKSBjbGFzc05hbWUgKz0gIiBsZW5pcy1zbW9vdGgiOwogICAgICAgIHJldHVybiBjbGFzc05hbWU7CiAgICAgIH0KICAgICAgdXBkYXRlQ2xhc3NOYW1lKCkgewogICAgICAgIHRoaXMuY2xlYW5VcENsYXNzTmFtZSgpOwogICAgICAgIHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lID0gYCR7dGhpcy5yb290RWxlbWVudC5jbGFzc05hbWV9ICR7dGhpcy5jbGFzc05hbWV9YC50cmltKCk7CiAgICAgIH0KICAgICAgY2xlYW5VcENsYXNzTmFtZSgpIHsKICAgICAgICB0aGlzLnJvb3RFbGVtZW50LmNsYXNzTmFtZSA9IHRoaXMucm9vdEVsZW1lbnQuY2xhc3NOYW1lLnJlcGxhY2UoL2xlbmlzKC1cdyspPy9nLCAiIikudHJpbSgpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vc3dlZXQtc2Nyb2xsQDQuMC4wL25vZGVfbW9kdWxlcy9zd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzCnZhciByZXF1aXJlX3N3ZWV0X3Njcm9sbCA9IF9fY29tbW9uSlMoewogICJub2RlX21vZHVsZXMvLnBucG0vc3dlZXQtc2Nyb2xsQDQuMC4wL25vZGVfbW9kdWxlcy9zd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzIihleHBvcnRzLCBtb2R1bGUpIHsKICAgIChmdW5jdGlvbihnbG9iYWwyLCBmYWN0b3J5KSB7CiAgICAgIHR5cGVvZiBleHBvcnRzID09PSAib2JqZWN0IiAmJiB0eXBlb2YgbW9kdWxlICE9PSAidW5kZWZpbmVkIiA/IG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpIDogdHlwZW9mIGRlZmluZSA9PT0gImZ1bmN0aW9uIiAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDogKGdsb2JhbDIgPSBnbG9iYWwyIHx8IHNlbGYsIGdsb2JhbDIuU3dlZXRTY3JvbGwgPSBmYWN0b3J5KCkpOwogICAgfSkoZXhwb3J0cywgZnVuY3Rpb24oKSB7CiAgICAgICJ1c2Ugc3RyaWN0IjsKICAgICAgdmFyIF9fYXNzaWduMiA9IGZ1bmN0aW9uKCkgewogICAgICAgIF9fYXNzaWduMiA9IE9iamVjdC5hc3NpZ24gfHwgZnVuY3Rpb24gX19hc3NpZ24zKHQ5KSB7CiAgICAgICAgICBmb3IgKHZhciBzOSwgaTExID0gMSwgbjEzID0gYXJndW1lbnRzLmxlbmd0aDsgaTExIDwgbjEzOyBpMTErKykgewogICAgICAgICAgICBzOSA9IGFyZ3VtZW50c1tpMTFdOwogICAgICAgICAgICBmb3IgKHZhciBwNyBpbiBzOSkgaWYgKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChzOSwgcDcpKSB0OVtwN10gPSBzOVtwN107CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdDk7CiAgICAgICAgfTsKICAgICAgICByZXR1cm4gX19hc3NpZ24yLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7CiAgICAgIH07CiAgICAgIHZhciBjYW5Vc2VET00gPSAhISh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIiAmJiB3aW5kb3cuZG9jdW1lbnQgJiYgd2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpOwogICAgICB2YXIgY2FuVXNlSGlzdG9yeSA9ICFjYW5Vc2VET00gPyBmYWxzZSA6IHdpbmRvdy5oaXN0b3J5ICYmICJwdXNoU3RhdGUiIGluIHdpbmRvdy5oaXN0b3J5ICYmIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCAhPT0gImZpbGU6IjsKICAgICAgdmFyIGNhblVzZVBhc3NpdmVPcHRpb24gPSAoZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIHN1cHBvcnQgPSBmYWxzZTsKICAgICAgICBpZiAoIWNhblVzZURPTSkgewogICAgICAgICAgcmV0dXJuIHN1cHBvcnQ7CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgd2luID0gd2luZG93OwogICAgICAgICAgdmFyIG9wdHMgPSBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICJwYXNzaXZlIiwgewogICAgICAgICAgICBnZXQ6IGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIHN1cHBvcnQgPSB0cnVlOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICAgIHdpbi5hZGRFdmVudExpc3RlbmVyKCJ0ZXN0IiwgbnVsbCwgb3B0cyk7CiAgICAgICAgICB3aW4ucmVtb3ZlRXZlbnRMaXN0ZW5lcigidGVzdCIsIG51bGwsIG9wdHMpOwogICAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIH0KICAgICAgICByZXR1cm4gc3VwcG9ydDsKICAgICAgfSkoKTsKICAgICAgdmFyIGlzU3RyaW5nMiA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiB0eXBlb2Ygb2JqID09PSAic3RyaW5nIjsKICAgICAgfTsKICAgICAgdmFyIGlzRnVuY3Rpb24yID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuIHR5cGVvZiBvYmogPT09ICJmdW5jdGlvbiI7CiAgICAgIH07CiAgICAgIHZhciBpc0FycmF5MyA9IGZ1bmN0aW9uKG9iaikgewogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KG9iaik7CiAgICAgIH07CiAgICAgIHZhciBpc051bWVyaWMgPSBmdW5jdGlvbihvYmopIHsKICAgICAgICByZXR1cm4gIWlzQXJyYXkzKG9iaikgJiYgb2JqIC0gcGFyc2VGbG9hdChvYmopICsgMSA+PSAwOwogICAgICB9OwogICAgICB2YXIgaGFzUHJvcCA9IGZ1bmN0aW9uKG9iaiwga2V5MikgewogICAgICAgIHJldHVybiBvYmogJiYgb2JqLmhhc093blByb3BlcnR5KGtleTIpOwogICAgICB9OwogICAgICB2YXIgcmFmID0gY2FuVXNlRE9NID8gd2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZS5iaW5kKHdpbmRvdykgOiBudWxsOwogICAgICB2YXIgY2FmID0gY2FuVXNlRE9NID8gd2luZG93LmNhbmNlbEFuaW1hdGlvbkZyYW1lLmJpbmQod2luZG93KSA6IG51bGw7CiAgICAgIHZhciBjb3MgPSBNYXRoLmNvcywgc2luID0gTWF0aC5zaW4sIHBvdyA9IE1hdGgucG93LCBzcXJ0ID0gTWF0aC5zcXJ0LCBQSSA9IE1hdGguUEk7CiAgICAgIHZhciBlYXNpbmdzID0gewogICAgICAgIGxpbmVhcjogZnVuY3Rpb24ocDcpIHsKICAgICAgICAgIHJldHVybiBwNzsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1YWQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VPdXRRdWFkOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqICh0OSAvPSBkNikgKiAodDkgLSAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVhZDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IGMxMSAvIDIgKiB0OSAqIHQ5ICsgYjUgOiAtYzExIC8gMiAqICgtLXQ5ICogKHQ5IC0gMikgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluQ3ViaWM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKiB0OSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dEN1YmljOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKyAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0Q3ViaWM6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICsgYjUgOiBjMTEgLyAyICogKCh0OSAtPSAyKSAqIHQ5ICogdDkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluUXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAodDkgLz0gZDYpICogdDkgKiB0OSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVhcnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAtYzExICogKCh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5ICogdDkgKiB0OSAtIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRRdWFydDogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IGMxMSAvIDIgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1IDogLWMxMSAvIDIgKiAoKHQ5IC09IDIpICogdDkgKiB0OSAqIHQ5IC0gMikgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJblF1aW50OiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gYzExICogKHQ5IC89IGQ2KSAqIHQ5ICogdDkgKiB0OSAqIHQ5ICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0UXVpbnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiBjMTEgKiAoKHQ5ID0gdDkgLyBkNiAtIDEpICogdDkgKiB0OSAqIHQ5ICogdDkgKyAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0UXVpbnQ6IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiAodDkgLz0gZDYgLyAyKSA8IDEgPyBjMTEgLyAyICogdDkgKiB0OSAqIHQ5ICogdDkgKiB0OSArIGI1IDogYzExIC8gMiAqICgodDkgLT0gMikgKiB0OSAqIHQ5ICogdDkgKiB0OSArIDIpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5TaW5lOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAqIGNvcyh0OSAvIGQ2ICogKFBJIC8gMikpICsgYzExICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0U2luZTogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqIHNpbih0OSAvIGQ2ICogKFBJIC8gMikpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlSW5PdXRTaW5lOiBmdW5jdGlvbihfNCwgdDksIGI1LCBjMTEsIGQ2KSB7CiAgICAgICAgICByZXR1cm4gLWMxMSAvIDIgKiAoY29zKFBJICogdDkgLyBkNikgLSAxKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluRXhwbzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIHQ5ID09PSAwID8gYjUgOiBjMTEgKiBwb3coMiwgMTAgKiAodDkgLyBkNiAtIDEpKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZU91dEV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIHJldHVybiB0OSA9PT0gZDYgPyBiNSArIGMxMSA6IGMxMSAqICgtcG93KDIsIC0xMCAqIHQ5IC8gZDYpICsgMSkgKyBiNTsKICAgICAgICB9LAogICAgICAgIGVhc2VJbk91dEV4cG86IGZ1bmN0aW9uKF80LCB0OSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICAgIGlmICh0OSA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuIGI1OwogICAgICAgICAgaWYgKHQ5ID09PSBkNikKICAgICAgICAgICAgcmV0dXJuIGI1ICsgYzExOwogICAgICAgICAgaWYgKCh0OSAvPSBkNiAvIDIpIDwgMSkKICAgICAgICAgICAgcmV0dXJuIGMxMSAvIDIgKiBwb3coMiwgMTAgKiAodDkgLSAxKSkgKyBiNTsKICAgICAgICAgIHJldHVybiBjMTEgLyAyICogKC1wb3coMiwgLTEwICogLS10OSkgKyAyKSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluQ2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIC1jMTEgKiAoc3FydCgxIC0gKHQ5IC89IGQ2KSAqIHQ5KSAtIDEpICsgYjU7CiAgICAgICAgfSwKICAgICAgICBlYXNlT3V0Q2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuIGMxMSAqIHNxcnQoMSAtICh0OSA9IHQ5IC8gZDYgLSAxKSAqIHQ5KSArIGI1OwogICAgICAgIH0sCiAgICAgICAgZWFzZUluT3V0Q2lyYzogZnVuY3Rpb24oXzQsIHQ5LCBiNSwgYzExLCBkNikgewogICAgICAgICAgcmV0dXJuICh0OSAvPSBkNiAvIDIpIDwgMSA/IC1jMTEgLyAyICogKHNxcnQoMSAtIHQ5ICogdDkpIC0gMSkgKyBiNSA6IGMxMSAvIDIgKiAoc3FydCgxIC0gKHQ5IC09IDIpICogdDkpICsgMSkgKyBiNTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHZhciAkJCA9IGZ1bmN0aW9uKHNlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKCFzZWxlY3RvciA/IFtdIDogZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbChzZWxlY3RvcikpOwogICAgICB9OwogICAgICB2YXIgJDMgPSBmdW5jdGlvbihzZWxlY3RvcikgewogICAgICAgIHJldHVybiAkJChzZWxlY3Rvcikuc2hpZnQoKSB8fCBudWxsOwogICAgICB9OwogICAgICB2YXIgaXNFbGVtZW50ID0gZnVuY3Rpb24ob2JqKSB7CiAgICAgICAgcmV0dXJuIG9iaiBpbnN0YW5jZW9mIEVsZW1lbnQ7CiAgICAgIH07CiAgICAgIHZhciBpc1dpbmRvdyA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiAkZWwgPT09IHdpbmRvdzsKICAgICAgfTsKICAgICAgdmFyIGlzUm9vdENvbnRhaW5lciA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiAkZWwgPT09IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCB8fCAkZWwgPT09IGRvY3VtZW50LmJvZHk7CiAgICAgIH07CiAgICAgIHZhciBtYXRjaGVzID0gZnVuY3Rpb24oJGVsLCBzZWxlY3RvcikgewogICAgICAgIGlmIChpc0VsZW1lbnQoc2VsZWN0b3IpKSB7CiAgICAgICAgICByZXR1cm4gJGVsID09PSBzZWxlY3RvcjsKICAgICAgICB9CiAgICAgICAgdmFyIHJlc3VsdHMgPSAkJChzZWxlY3Rvcik7CiAgICAgICAgdmFyIGkxMSA9IHJlc3VsdHMubGVuZ3RoOwogICAgICAgIHdoaWxlICgtLWkxMSA+PSAwICYmIHJlc3VsdHNbaTExXSAhPT0gJGVsKSB7CiAgICAgICAgfQogICAgICAgIHJldHVybiBpMTEgPiAtMTsKICAgICAgfTsKICAgICAgdmFyIGdldEhlaWdodCA9IGZ1bmN0aW9uKCRlbCkgewogICAgICAgIHJldHVybiBNYXRoLm1heCgkZWwuc2Nyb2xsSGVpZ2h0LCAkZWwuY2xpZW50SGVpZ2h0LCAkZWwub2Zmc2V0SGVpZ2h0KTsKICAgICAgfTsKICAgICAgdmFyIGdldFdpZHRoID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgcmV0dXJuIE1hdGgubWF4KCRlbC5zY3JvbGxXaWR0aCwgJGVsLmNsaWVudFdpZHRoLCAkZWwub2Zmc2V0V2lkdGgpOwogICAgICB9OwogICAgICB2YXIgZ2V0U2l6ZTIgPSBmdW5jdGlvbigkZWwpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgd2lkdGg6IGdldFdpZHRoKCRlbCksCiAgICAgICAgICBoZWlnaHQ6IGdldEhlaWdodCgkZWwpCiAgICAgICAgfTsKICAgICAgfTsKICAgICAgdmFyIGdldFZpZXdwb3J0QW5kRWxlbWVudFNpemVzID0gZnVuY3Rpb24oJGVsKSB7CiAgICAgICAgdmFyIGlzUm9vdCA9IGlzV2luZG93KCRlbCkgfHwgaXNSb290Q29udGFpbmVyKCRlbCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHZpZXdwb3J0OiB7CiAgICAgICAgICAgIHdpZHRoOiBpc1Jvb3QgPyBNYXRoLm1pbih3aW5kb3cuaW5uZXJXaWR0aCwgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudFdpZHRoKSA6ICRlbC5jbGllbnRXaWR0aCwKICAgICAgICAgICAgaGVpZ2h0OiBpc1Jvb3QgPyB3aW5kb3cuaW5uZXJIZWlnaHQgOiAkZWwuY2xpZW50SGVpZ2h0CiAgICAgICAgICB9LAogICAgICAgICAgc2l6ZTogaXNSb290ID8gewogICAgICAgICAgICB3aWR0aDogTWF0aC5tYXgoZ2V0V2lkdGgoZG9jdW1lbnQuYm9keSksIGdldFdpZHRoKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpLAogICAgICAgICAgICBoZWlnaHQ6IE1hdGgubWF4KGdldEhlaWdodChkb2N1bWVudC5ib2R5KSwgZ2V0SGVpZ2h0KGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkpCiAgICAgICAgICB9IDogZ2V0U2l6ZTIoJGVsKQogICAgICAgIH07CiAgICAgIH07CiAgICAgIHZhciBkaXJlY3Rpb25NZXRob2RNYXAgPSB7CiAgICAgICAgeTogInNjcm9sbFRvcCIsCiAgICAgICAgeDogInNjcm9sbExlZnQiCiAgICAgIH07CiAgICAgIHZhciBkaXJlY3Rpb25Qcm9wTWFwID0gewogICAgICAgIHk6ICJwYWdlWU9mZnNldCIsCiAgICAgICAgeDogInBhZ2VYT2Zmc2V0IgogICAgICB9OwogICAgICB2YXIgZ2V0U2Nyb2xsID0gZnVuY3Rpb24oJGVsLCBkaXJlY3Rpb24pIHsKICAgICAgICByZXR1cm4gaXNXaW5kb3coJGVsKSA/ICRlbFtkaXJlY3Rpb25Qcm9wTWFwW2RpcmVjdGlvbl1dIDogJGVsW2RpcmVjdGlvbk1ldGhvZE1hcFtkaXJlY3Rpb25dXTsKICAgICAgfTsKICAgICAgdmFyIHNldFNjcm9sbCA9IGZ1bmN0aW9uKCRlbCwgb2Zmc2V0LCBkaXJlY3Rpb24pIHsKICAgICAgICBpZiAoaXNXaW5kb3coJGVsKSkgewogICAgICAgICAgdmFyIHRvcF8xID0gZGlyZWN0aW9uID09PSAieSI7CiAgICAgICAgICAkZWwuc2Nyb2xsVG8oIXRvcF8xID8gb2Zmc2V0IDogJGVsLnBhZ2VYT2Zmc2V0LCB0b3BfMSA/IG9mZnNldCA6ICRlbC5wYWdlWU9mZnNldCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICRlbFtkaXJlY3Rpb25NZXRob2RNYXBbZGlyZWN0aW9uXV0gPSBvZmZzZXQ7CiAgICAgICAgfQogICAgICB9OwogICAgICB2YXIgZ2V0T2Zmc2V0ID0gZnVuY3Rpb24oJGVsLCAkY29udGV4dCkgewogICAgICAgIHZhciByZWN0ID0gJGVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGlmIChyZWN0LndpZHRoIHx8IHJlY3QuaGVpZ2h0KSB7CiAgICAgICAgICB2YXIgc2Nyb2xsXzEgPSB7IHRvcDogMCwgbGVmdDogMCB9OwogICAgICAgICAgdmFyICRjdHggPSB2b2lkIDA7CiAgICAgICAgICBpZiAoaXNXaW5kb3coJGNvbnRleHQpIHx8IGlzUm9vdENvbnRhaW5lcigkY29udGV4dCkpIHsKICAgICAgICAgICAgJGN0eCA9IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudDsKICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gd2luZG93W2RpcmVjdGlvblByb3BNYXAueV07CiAgICAgICAgICAgIHNjcm9sbF8xLmxlZnQgPSB3aW5kb3dbZGlyZWN0aW9uUHJvcE1hcC54XTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICRjdHggPSAkY29udGV4dDsKICAgICAgICAgICAgdmFyIGNSZWN0ID0gJGN0eC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgc2Nyb2xsXzEudG9wID0gY1JlY3QudG9wICogLTEgKyAkY3R4W2RpcmVjdGlvbk1ldGhvZE1hcC55XTsKICAgICAgICAgICAgc2Nyb2xsXzEubGVmdCA9IGNSZWN0LmxlZnQgKiAtMSArICRjdHhbZGlyZWN0aW9uTWV0aG9kTWFwLnhdOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdG9wOiByZWN0LnRvcCArIHNjcm9sbF8xLnRvcCAtICRjdHguY2xpZW50VG9wLAogICAgICAgICAgICBsZWZ0OiByZWN0LmxlZnQgKyBzY3JvbGxfMS5sZWZ0IC0gJGN0eC5jbGllbnRMZWZ0CiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVjdDsKICAgICAgfTsKICAgICAgdmFyIHdoZWVsRXZlbnROYW1lID0gKGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghY2FuVXNlRE9NKSB7CiAgICAgICAgICByZXR1cm4gIndoZWVsIjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuICJvbndoZWVsIiBpbiBkb2N1bWVudCA/ICJ3aGVlbCIgOiAibW91c2V3aGVlbCI7CiAgICAgIH0pKCk7CiAgICAgIHZhciBldmVudE5hbWUgPSBmdW5jdGlvbihuYW1lKSB7CiAgICAgICAgcmV0dXJuIG5hbWUgPT09ICJ3aGVlbCIgPyB3aGVlbEV2ZW50TmFtZSA6IG5hbWU7CiAgICAgIH07CiAgICAgIHZhciBhcHBseSA9IGZ1bmN0aW9uKCRlbCwgbWV0aG9kLCBldmVudCwgbGlzdGVuZXIyLCBwYXNzaXZlKSB7CiAgICAgICAgZXZlbnQuc3BsaXQoIiAiKS5mb3JFYWNoKGZ1bmN0aW9uKG5hbWUpIHsKICAgICAgICAgICRlbFttZXRob2RdKGV2ZW50TmFtZShuYW1lKSwgbGlzdGVuZXIyLCBjYW5Vc2VQYXNzaXZlT3B0aW9uID8geyBwYXNzaXZlIH0gOiBmYWxzZSk7CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHZhciBhZGRFdmVudCA9IGZ1bmN0aW9uKCRlbCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIHJldHVybiBhcHBseSgkZWwsICJhZGRFdmVudExpc3RlbmVyIiwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSk7CiAgICAgIH07CiAgICAgIHZhciByZW1vdmVFdmVudCA9IGZ1bmN0aW9uKCRlbCwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSkgewogICAgICAgIHJldHVybiBhcHBseSgkZWwsICJyZW1vdmVFdmVudExpc3RlbmVyIiwgZXZlbnQsIGxpc3RlbmVyMiwgcGFzc2l2ZSk7CiAgICAgIH07CiAgICAgIHZhciByZVJlbGF0aXZlVG9rZW4gPSAvXihcK3wtKT0oXGQrKD86XC5cZCspPykkLzsKICAgICAgdmFyIHBhcnNlQ29vcmRpbmF0ZSA9IGZ1bmN0aW9uKGNvb3JkaW5hdGUsIGVuYWJsZVZlcnRpY2FsKSB7CiAgICAgICAgdmFyIHJlcyA9IHsgdG9wOiAwLCBsZWZ0OiAwLCByZWxhdGl2ZTogZmFsc2UgfTsKICAgICAgICBpZiAoaGFzUHJvcChjb29yZGluYXRlLCAidG9wIikgfHwgaGFzUHJvcChjb29yZGluYXRlLCAibGVmdCIpKSB7CiAgICAgICAgICByZXMgPSBfX2Fzc2lnbjIoe30sIHJlcywgY29vcmRpbmF0ZSk7CiAgICAgICAgfSBlbHNlIGlmIChpc0FycmF5Myhjb29yZGluYXRlKSkgewogICAgICAgICAgaWYgKGNvb3JkaW5hdGUubGVuZ3RoID4gMSkgewogICAgICAgICAgICByZXMudG9wID0gY29vcmRpbmF0ZVswXTsKICAgICAgICAgICAgcmVzLmxlZnQgPSBjb29yZGluYXRlWzFdOwogICAgICAgICAgfSBlbHNlIGlmIChjb29yZGluYXRlLmxlbmd0aCA9PT0gMSkgewogICAgICAgICAgICByZXMudG9wID0gZW5hYmxlVmVydGljYWwgPyBjb29yZGluYXRlWzBdIDogMDsKICAgICAgICAgICAgcmVzLmxlZnQgPSAhZW5hYmxlVmVydGljYWwgPyBjb29yZGluYXRlWzBdIDogMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSBpZiAoaXNOdW1lcmljKGNvb3JkaW5hdGUpKSB7CiAgICAgICAgICBpZiAoZW5hYmxlVmVydGljYWwpIHsKICAgICAgICAgICAgcmVzLnRvcCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXMubGVmdCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChpc1N0cmluZzIoY29vcmRpbmF0ZSkpIHsKICAgICAgICAgIHZhciBtNiA9IGNvb3JkaW5hdGUudHJpbSgpLm1hdGNoKHJlUmVsYXRpdmVUb2tlbik7CiAgICAgICAgICBpZiAoIW02KSB7CiAgICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgICAgfQogICAgICAgICAgdmFyIG9wID0gbTZbMV07CiAgICAgICAgICB2YXIgdmFsID0gcGFyc2VJbnQobTZbMl0sIDEwKTsKICAgICAgICAgIGlmIChvcCA9PT0gIisiKSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IHZhbCA6IDA7CiAgICAgICAgICAgIHJlcy5sZWZ0ID0gIWVuYWJsZVZlcnRpY2FsID8gdmFsIDogMDsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlcy50b3AgPSBlbmFibGVWZXJ0aWNhbCA/IC12YWwgOiAwOwogICAgICAgICAgICByZXMubGVmdCA9ICFlbmFibGVWZXJ0aWNhbCA/IC12YWwgOiAwOwogICAgICAgICAgfQogICAgICAgICAgcmVzLnJlbGF0aXZlID0gdHJ1ZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXM7CiAgICAgIH07CiAgICAgIHZhciBkZWZhdWx0T3B0aW9uczIgPSB7CiAgICAgICAgdHJpZ2dlcjogIltkYXRhLXNjcm9sbF0iLAogICAgICAgIGhlYWRlcjogIltkYXRhLXNjcm9sbC1oZWFkZXJdIiwKICAgICAgICBkdXJhdGlvbjogMWUzLAogICAgICAgIGVhc2luZzogImVhc2VPdXRRdWludCIsCiAgICAgICAgb2Zmc2V0OiAwLAogICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgIGhvcml6b250YWw6IGZhbHNlLAogICAgICAgIGNhbmNlbGxhYmxlOiB0cnVlLAogICAgICAgIHVwZGF0ZVVSTDogZmFsc2UsCiAgICAgICAgcHJldmVudERlZmF1bHQ6IHRydWUsCiAgICAgICAgc3RvcFByb3BhZ2F0aW9uOiB0cnVlLAogICAgICAgIC8vIENhbGxiYWNrcwogICAgICAgIGJlZm9yZTogbnVsbCwKICAgICAgICBhZnRlcjogbnVsbCwKICAgICAgICBjYW5jZWw6IG51bGwsCiAgICAgICAgY29tcGxldGU6IG51bGwsCiAgICAgICAgc3RlcDogbnVsbAogICAgICB9OwogICAgICB2YXIgQ09OVEFJTkVSX0NMSUNLX0VWRU5UID0gImNsaWNrIjsKICAgICAgdmFyIENPTlRBSU5FUl9TVE9QX0VWRU5UID0gIndoZWVsIHRvdWNoc3RhcnQgdG91Y2htb3ZlIjsKICAgICAgdmFyIFN3ZWV0U2Nyb2xsMyA9ICgKICAgICAgICAvKiogQGNsYXNzICovCiAgICAgICAgKGZ1bmN0aW9uKCkgewogICAgICAgICAgZnVuY3Rpb24gU3dlZXRTY3JvbGw0KG9wdGlvbnMsIGNvbnRhaW5lcikgewogICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgICB0aGlzLiRlbCA9IG51bGw7CiAgICAgICAgICAgIHRoaXMuY3R4ID0gewogICAgICAgICAgICAgICR0cmlnZ2VyOiBudWxsLAogICAgICAgICAgICAgIG9wdHM6IG51bGwsCiAgICAgICAgICAgICAgcHJvZ3Jlc3M6IGZhbHNlLAogICAgICAgICAgICAgIHBvczogbnVsbCwKICAgICAgICAgICAgICBzdGFydFBvczogbnVsbCwKICAgICAgICAgICAgICBlYXNpbmc6IG51bGwsCiAgICAgICAgICAgICAgc3RhcnQ6IDAsCiAgICAgICAgICAgICAgaWQ6IDAsCiAgICAgICAgICAgICAgY2FuY2VsOiBmYWxzZSwKICAgICAgICAgICAgICBoYXNoOiBudWxsCiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHRoaXMubG9vcCA9IGZ1bmN0aW9uKHRpbWUpIHsKICAgICAgICAgICAgICB2YXIgX2ExNCA9IF90aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgICAgaWYgKCFjdHguc3RhcnQpIHsKICAgICAgICAgICAgICAgIGN0eC5zdGFydCA9IHRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmICghY3R4LnByb2dyZXNzIHx8ICEkZWwpIHsKICAgICAgICAgICAgICAgIF90aGlzLnN0b3AoKTsKICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMyID0gY3R4Lm9wdHM7CiAgICAgICAgICAgICAgdmFyIG9mZnNldCA9IGN0eC5wb3M7CiAgICAgICAgICAgICAgdmFyIHN0YXJ0ID0gY3R4LnN0YXJ0OwogICAgICAgICAgICAgIHZhciBzdGFydE9mZnNldCA9IGN0eC5zdGFydFBvczsKICAgICAgICAgICAgICB2YXIgZWFzaW5nID0gY3R4LmVhc2luZzsKICAgICAgICAgICAgICB2YXIgZHVyYXRpb24gPSBvcHRpb25zMi5kdXJhdGlvbjsKICAgICAgICAgICAgICB2YXIgZGlyZWN0aW9uTWFwID0geyB0b3A6ICJ5IiwgbGVmdDogIngiIH07CiAgICAgICAgICAgICAgdmFyIHRpbWVFbGFwc2VkID0gdGltZSAtIHN0YXJ0OwogICAgICAgICAgICAgIHZhciB0OSA9IE1hdGgubWluKDEsIE1hdGgubWF4KHRpbWVFbGFwc2VkIC8gZHVyYXRpb24sIDApKTsKICAgICAgICAgICAgICBPYmplY3Qua2V5cyhvZmZzZXQpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICAgICAgdmFyIHZhbHVlMiA9IG9mZnNldFtrZXkyXTsKICAgICAgICAgICAgICAgIHZhciBpbml0aWFsMiA9IHN0YXJ0T2Zmc2V0W2tleTJdOwogICAgICAgICAgICAgICAgdmFyIGRlbHRhID0gdmFsdWUyIC0gaW5pdGlhbDI7CiAgICAgICAgICAgICAgICBpZiAoZGVsdGEgIT09IDApIHsKICAgICAgICAgICAgICAgICAgdmFyIHZhbCA9IGVhc2luZyh0OSwgZHVyYXRpb24gKiB0OSwgMCwgMSwgZHVyYXRpb24pOwogICAgICAgICAgICAgICAgICBzZXRTY3JvbGwoJGVsLCBNYXRoLnJvdW5kKGluaXRpYWwyICsgZGVsdGEgKiB2YWwpLCBkaXJlY3Rpb25NYXBba2V5Ml0pOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIGlmICh0aW1lRWxhcHNlZCA8PSBkdXJhdGlvbikgewogICAgICAgICAgICAgICAgX3RoaXMuaG9vayhvcHRpb25zMiwgInN0ZXAiLCB0OSk7CiAgICAgICAgICAgICAgICBjdHguaWQgPSBTd2VldFNjcm9sbDQucmFmKF90aGlzLmxvb3ApOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5oYW5kbGVDbGljayA9IGZ1bmN0aW9uKGUxMSkgewogICAgICAgICAgICAgIHZhciBvcHRzID0gX3RoaXMub3B0czsKICAgICAgICAgICAgICB2YXIgJGVsID0gZTExLnRhcmdldDsKICAgICAgICAgICAgICBmb3IgKDsgJGVsICYmICRlbCAhPT0gZG9jdW1lbnQ7ICRlbCA9ICRlbC5wYXJlbnROb2RlKSB7CiAgICAgICAgICAgICAgICBpZiAoIW1hdGNoZXMoJGVsLCBvcHRzLnRyaWdnZXIpKSB7CiAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdmFyIGRhdGFPcHRpb25zID0gSlNPTi5wYXJzZSgkZWwuZ2V0QXR0cmlidXRlKCJkYXRhLXNjcm9sbC1vcHRpb25zIikgfHwgInt9Iik7CiAgICAgICAgICAgICAgICB2YXIgZGF0YSA9ICRlbC5nZXRBdHRyaWJ1dGUoImRhdGEtc2Nyb2xsIik7CiAgICAgICAgICAgICAgICB2YXIgdG8yID0gZGF0YSB8fCAkZWwuZ2V0QXR0cmlidXRlKCJocmVmIik7CiAgICAgICAgICAgICAgICB2YXIgb3B0aW9uczIgPSBfX2Fzc2lnbjIoe30sIG9wdHMsIGRhdGFPcHRpb25zKTsKICAgICAgICAgICAgICAgIHZhciBwcmV2ZW50RGVmYXVsdCA9IG9wdGlvbnMyLnByZXZlbnREZWZhdWx0LCBzdG9wUHJvcGFnYXRpb24gPSBvcHRpb25zMi5zdG9wUHJvcGFnYXRpb24sIHZlcnRpY2FsID0gb3B0aW9uczIudmVydGljYWwsIGhvcml6b250YWwgPSBvcHRpb25zMi5ob3Jpem9udGFsOwogICAgICAgICAgICAgICAgaWYgKHByZXZlbnREZWZhdWx0KSB7CiAgICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgaWYgKHN0b3BQcm9wYWdhdGlvbikgewogICAgICAgICAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBfdGhpcy5jdHguJHRyaWdnZXIgPSAkZWw7CiAgICAgICAgICAgICAgICBpZiAoaG9yaXpvbnRhbCAmJiB2ZXJ0aWNhbCkgewogICAgICAgICAgICAgICAgICBfdGhpcy50byh0bzIsIG9wdGlvbnMyKTsKICAgICAgICAgICAgICAgIH0gZWxzZSBpZiAodmVydGljYWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9Ub3AodG8yLCBvcHRpb25zMik7CiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGhvcml6b250YWwpIHsKICAgICAgICAgICAgICAgICAgX3RoaXMudG9MZWZ0KHRvMiwgb3B0aW9uczIpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9OwogICAgICAgICAgICB0aGlzLmhhbmRsZVN0b3AgPSBmdW5jdGlvbihlMTEpIHsKICAgICAgICAgICAgICB2YXIgY3R4ID0gX3RoaXMuY3R4OwogICAgICAgICAgICAgIHZhciBvcHRzID0gY3R4Lm9wdHM7CiAgICAgICAgICAgICAgaWYgKG9wdHMgJiYgb3B0cy5jYW5jZWxsYWJsZSkgewogICAgICAgICAgICAgICAgY3R4LmNhbmNlbCA9IHRydWU7CiAgICAgICAgICAgICAgICBfdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5vcHRzID0gX19hc3NpZ24yKHt9LCBkZWZhdWx0T3B0aW9uczIsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9IG51bGw7CiAgICAgICAgICAgIGlmIChjYW5Vc2VET00pIHsKICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbnRhaW5lciA9PT0gInN0cmluZyIpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSAkMyhjb250YWluZXIpOwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoY29udGFpbmVyICE9IG51bGwpIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSBjb250YWluZXI7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICRjb250YWluZXIgPSB3aW5kb3c7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuJGVsID0gJGNvbnRhaW5lcjsKICAgICAgICAgICAgaWYgKCRjb250YWluZXIpIHsKICAgICAgICAgICAgICB0aGlzLmJpbmQodHJ1ZSwgZmFsc2UpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBTd2VldFNjcm9sbDQuY3JlYXRlID0gZnVuY3Rpb24ob3B0aW9ucywgY29udGFpbmVyKSB7CiAgICAgICAgICAgIHJldHVybiBuZXcgU3dlZXRTY3JvbGw0KG9wdGlvbnMsIGNvbnRhaW5lcik7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS50byA9IGZ1bmN0aW9uKGRpc3RhbmNlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIGlmICghY2FuVXNlRE9NKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIGN0eCA9IF9hMTQuY3R4LCBjdXJyZW50T3B0aW9ucyA9IF9hMTQub3B0czsKICAgICAgICAgICAgdmFyICR0cmlnZ2VyID0gY3R4LiR0cmlnZ2VyOwogICAgICAgICAgICB2YXIgb3B0cyA9IF9fYXNzaWduMih7fSwgY3VycmVudE9wdGlvbnMsIG9wdGlvbnMgfHwge30pOwogICAgICAgICAgICB2YXIgb3B0T2Zmc2V0ID0gb3B0cy5vZmZzZXQsIHZlcnRpY2FsID0gb3B0cy52ZXJ0aWNhbCwgaG9yaXpvbnRhbCA9IG9wdHMuaG9yaXpvbnRhbDsKICAgICAgICAgICAgdmFyICRoZWFkZXIgPSBpc0VsZW1lbnQob3B0cy5oZWFkZXIpID8gb3B0cy5oZWFkZXIgOiAkMyhvcHRzLmhlYWRlcik7CiAgICAgICAgICAgIHZhciByZWcgPSAvXiMvOwogICAgICAgICAgICB2YXIgaGFzaCA9IGlzU3RyaW5nMihkaXN0YW5jZSkgJiYgcmVnLnRlc3QoZGlzdGFuY2UpID8gZGlzdGFuY2UgOiBudWxsOwogICAgICAgICAgICBjdHgub3B0cyA9IG9wdHM7CiAgICAgICAgICAgIGN0eC5jYW5jZWwgPSBmYWxzZTsKICAgICAgICAgICAgY3R4Lmhhc2ggPSBoYXNoOwogICAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgICAgaWYgKCEkZWwpIHsKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIG9mZnNldCA9IHBhcnNlQ29vcmRpbmF0ZShvcHRPZmZzZXQsIHZlcnRpY2FsKTsKICAgICAgICAgICAgdmFyIGNvb3JkaW5hdGUgPSBwYXJzZUNvb3JkaW5hdGUoZGlzdGFuY2UsIHZlcnRpY2FsKTsKICAgICAgICAgICAgdmFyIHNjcm9sbCA9IHsgdG9wOiAwLCBsZWZ0OiAwIH07CiAgICAgICAgICAgIGlmIChjb29yZGluYXRlKSB7CiAgICAgICAgICAgICAgaWYgKGNvb3JkaW5hdGUucmVsYXRpdmUpIHsKICAgICAgICAgICAgICAgIHZhciBjdXJyZW50ID0gZ2V0U2Nyb2xsKCRlbCwgdmVydGljYWwgPyAieSIgOiAieCIpOwogICAgICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IHZlcnRpY2FsID8gY3VycmVudCArIGNvb3JkaW5hdGUudG9wIDogY29vcmRpbmF0ZS50b3A7CiAgICAgICAgICAgICAgICBzY3JvbGwubGVmdCA9ICF2ZXJ0aWNhbCA/IGN1cnJlbnQgKyBjb29yZGluYXRlLmxlZnQgOiBjb29yZGluYXRlLmxlZnQ7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIHNjcm9sbCA9IGNvb3JkaW5hdGU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGlzU3RyaW5nMihkaXN0YW5jZSkgJiYgZGlzdGFuY2UgIT09ICIjIikgewogICAgICAgICAgICAgIHZhciAkdGFyZ2V0ID0gJDMoZGlzdGFuY2UpOwogICAgICAgICAgICAgIGlmICghJHRhcmdldCkgewogICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzY3JvbGwgPSBnZXRPZmZzZXQoJHRhcmdldCwgJGVsKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAob2Zmc2V0KSB7CiAgICAgICAgICAgICAgc2Nyb2xsLnRvcCArPSBvZmZzZXQudG9wOwogICAgICAgICAgICAgIHNjcm9sbC5sZWZ0ICs9IG9mZnNldC5sZWZ0OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkaGVhZGVyKSB7CiAgICAgICAgICAgICAgc2Nyb2xsLnRvcCA9IE1hdGgubWF4KDAsIHNjcm9sbC50b3AgLSBnZXRTaXplMigkaGVhZGVyKS5oZWlnaHQpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHZhciBfYiA9IGdldFZpZXdwb3J0QW5kRWxlbWVudFNpemVzKCRlbCksIHZpZXdwb3J0ID0gX2Iudmlld3BvcnQsIHNpemUgPSBfYi5zaXplOwogICAgICAgICAgICBzY3JvbGwudG9wID0gdmVydGljYWwgPyBNYXRoLm1heCgwLCBNYXRoLm1pbihzaXplLmhlaWdodCAtIHZpZXdwb3J0LmhlaWdodCwgc2Nyb2xsLnRvcCkpIDogZ2V0U2Nyb2xsKCRlbCwgInkiKTsKICAgICAgICAgICAgc2Nyb2xsLmxlZnQgPSBob3Jpem9udGFsID8gTWF0aC5tYXgoMCwgTWF0aC5taW4oc2l6ZS53aWR0aCAtIHZpZXdwb3J0LndpZHRoLCBzY3JvbGwubGVmdCkpIDogZ2V0U2Nyb2xsKCRlbCwgIngiKTsKICAgICAgICAgICAgaWYgKHRoaXMuaG9vayhvcHRzLCAiYmVmb3JlIiwgc2Nyb2xsLCAkdHJpZ2dlcikgPT09IGZhbHNlKSB7CiAgICAgICAgICAgICAgY3R4Lm9wdHMgPSBudWxsOwogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjdHgucG9zID0gc2Nyb2xsOwogICAgICAgICAgICB0aGlzLnN0YXJ0KG9wdHMpOwogICAgICAgICAgICB0aGlzLmJpbmQoZmFsc2UsIHRydWUpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG9Ub3AgPSBmdW5jdGlvbihkaXN0YW5jZSwgb3B0aW9ucykgewogICAgICAgICAgICB0aGlzLnRvKGRpc3RhbmNlLCBfX2Fzc2lnbjIoe30sIG9wdGlvbnMgfHwge30sIHsgdmVydGljYWw6IHRydWUsIGhvcml6b250YWw6IGZhbHNlIH0pKTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnRvTGVmdCA9IGZ1bmN0aW9uKGRpc3RhbmNlLCBvcHRpb25zKSB7CiAgICAgICAgICAgIHRoaXMudG8oZGlzdGFuY2UsIF9fYXNzaWduMih7fSwgb3B0aW9ucyB8fCB7fSwgeyB2ZXJ0aWNhbDogZmFsc2UsIGhvcml6b250YWw6IHRydWUgfSkpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudG9FbGVtZW50ID0gZnVuY3Rpb24oJGVsZW1lbnQsIG9wdGlvbnMpIHsKICAgICAgICAgICAgdmFyICRlbCA9IHRoaXMuJGVsOwogICAgICAgICAgICBpZiAoIWNhblVzZURPTSB8fCAhJGVsKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMudG8oZ2V0T2Zmc2V0KCRlbGVtZW50LCAkZWwpLCBvcHRpb25zIHx8IHt9KTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLnN0b3AgPSBmdW5jdGlvbihnb3RvRW5kKSB7CiAgICAgICAgICAgIGlmIChnb3RvRW5kID09PSB2b2lkIDApIHsKICAgICAgICAgICAgICBnb3RvRW5kID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgIHZhciBwb3MgPSBjdHgucG9zOwogICAgICAgICAgICBpZiAoISRlbCB8fCAhY3R4LnByb2dyZXNzKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5jYWYoY3R4LmlkKTsKICAgICAgICAgICAgY3R4LnByb2dyZXNzID0gZmFsc2U7CiAgICAgICAgICAgIGN0eC5zdGFydCA9IDA7CiAgICAgICAgICAgIGN0eC5pZCA9IDA7CiAgICAgICAgICAgIGlmIChnb3RvRW5kICYmIHBvcykgewogICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIHBvcy5sZWZ0LCAieCIpOwogICAgICAgICAgICAgIHNldFNjcm9sbCgkZWwsIHBvcy50b3AsICJ5Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5jb21wbGV0ZSgpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudXBkYXRlID0gZnVuY3Rpb24ob3B0aW9ucykgewogICAgICAgICAgICBpZiAodGhpcy4kZWwpIHsKICAgICAgICAgICAgICB2YXIgb3B0cyA9IF9fYXNzaWduMih7fSwgdGhpcy5vcHRzLCBvcHRpb25zKTsKICAgICAgICAgICAgICB0aGlzLnN0b3AoKTsKICAgICAgICAgICAgICB0aGlzLnVuYmluZCh0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICB0aGlzLm9wdHMgPSBvcHRzOwogICAgICAgICAgICAgIHRoaXMuYmluZCh0cnVlLCBmYWxzZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLmRlc3Ryb3kgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgaWYgKHRoaXMuJGVsKSB7CiAgICAgICAgICAgICAgdGhpcy5zdG9wKCk7CiAgICAgICAgICAgICAgdGhpcy51bmJpbmQodHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAgdGhpcy4kZWwgPSBudWxsOwogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkJlZm9yZSA9IGZ1bmN0aW9uKF80LCBfXykgewogICAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICAgIH07CiAgICAgICAgICBTd2VldFNjcm9sbDQucHJvdG90eXBlLm9uU3RlcCA9IGZ1bmN0aW9uKF80KSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkFmdGVyID0gZnVuY3Rpb24oXzQsIF9fKSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5vbkNhbmNlbCA9IGZ1bmN0aW9uKCkgewogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUub25Db21wbGV0ZSA9IGZ1bmN0aW9uKF80KSB7CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnByb3RvdHlwZS5zdGFydCA9IGZ1bmN0aW9uKG9wdHMpIHsKICAgICAgICAgICAgdmFyIGN0eCA9IHRoaXMuY3R4OwogICAgICAgICAgICBjdHgub3B0cyA9IG9wdHM7CiAgICAgICAgICAgIGN0eC5wcm9ncmVzcyA9IHRydWU7CiAgICAgICAgICAgIGN0eC5lYXNpbmcgPSBpc0Z1bmN0aW9uMihvcHRzLmVhc2luZykgPyBvcHRzLmVhc2luZyA6IGVhc2luZ3Nbb3B0cy5lYXNpbmddOwogICAgICAgICAgICB2YXIgJGNvbnRhaW5lciA9IHRoaXMuJGVsOwogICAgICAgICAgICB2YXIgc3RhcnQgPSB7CiAgICAgICAgICAgICAgdG9wOiBnZXRTY3JvbGwoJGNvbnRhaW5lciwgInkiKSwKICAgICAgICAgICAgICBsZWZ0OiBnZXRTY3JvbGwoJGNvbnRhaW5lciwgIngiKQogICAgICAgICAgICB9OwogICAgICAgICAgICBjdHguc3RhcnRQb3MgPSBzdGFydDsKICAgICAgICAgICAgY3R4LmlkID0gU3dlZXRTY3JvbGw0LnJhZih0aGlzLmxvb3ApOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuY29tcGxldGUgPSBmdW5jdGlvbigpIHsKICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgY3R4ID0gX2ExNC5jdHg7CiAgICAgICAgICAgIHZhciBoYXNoID0gY3R4Lmhhc2gsIGNhbmNlbCA9IGN0eC5jYW5jZWwsIG9wdHMgPSBjdHgub3B0cywgcG9zID0gY3R4LnBvcywgJHRyaWdnZXIgPSBjdHguJHRyaWdnZXI7CiAgICAgICAgICAgIGlmICghJGVsIHx8ICFvcHRzKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmIChoYXNoICE9IG51bGwgJiYgaGFzaCAhPT0gd2luZG93LmxvY2F0aW9uLmhhc2gpIHsKICAgICAgICAgICAgICB2YXIgdXBkYXRlVVJMID0gb3B0cy51cGRhdGVVUkw7CiAgICAgICAgICAgICAgaWYgKGNhblVzZURPTSAmJiBjYW5Vc2VIaXN0b3J5ICYmIHVwZGF0ZVVSTCAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgICAgIHdpbmRvdy5oaXN0b3J5W3VwZGF0ZVVSTCA9PT0gInJlcGxhY2UiID8gInJlcGxhY2VTdGF0ZSIgOiAicHVzaFN0YXRlIl0obnVsbCwgIiIsIGhhc2gpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICB0aGlzLnVuYmluZChmYWxzZSwgdHJ1ZSk7CiAgICAgICAgICAgIGN0eC5vcHRzID0gbnVsbDsKICAgICAgICAgICAgY3R4LiR0cmlnZ2VyID0gbnVsbDsKICAgICAgICAgICAgaWYgKGNhbmNlbCkgewogICAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiY2FuY2VsIik7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgdGhpcy5ob29rKG9wdHMsICJhZnRlciIsIHBvcywgJHRyaWdnZXIpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHRoaXMuaG9vayhvcHRzLCAiY29tcGxldGUiLCBjYW5jZWwpOwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuaG9vayA9IGZ1bmN0aW9uKG9wdGlvbnMsIHR5cGU1KSB7CiAgICAgICAgICAgIHZhciBhcmdzID0gW107CiAgICAgICAgICAgIGZvciAodmFyIF9pID0gMjsgX2kgPCBhcmd1bWVudHMubGVuZ3RoOyBfaSsrKSB7CiAgICAgICAgICAgICAgYXJnc1tfaSAtIDJdID0gYXJndW1lbnRzW19pXTsKICAgICAgICAgICAgfQogICAgICAgICAgICB2YXIgX2ExNDsKICAgICAgICAgICAgdmFyIGNhbGxiYWNrID0gb3B0aW9uc1t0eXBlNV07CiAgICAgICAgICAgIHZhciBjYWxsYmFja1Jlc3VsdDsKICAgICAgICAgICAgdmFyIG1ldGhvZFJlc3VsdDsKICAgICAgICAgICAgaWYgKGlzRnVuY3Rpb24yKGNhbGxiYWNrKSkgewogICAgICAgICAgICAgIGNhbGxiYWNrUmVzdWx0ID0gY2FsbGJhY2suYXBwbHkodGhpcywgYXJncy5jb25jYXQoW3RoaXNdKSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgbWV0aG9kUmVzdWx0ID0gKF9hMTQgPSB0aGlzKVsib24iICsgKHR5cGU1WzBdLnRvVXBwZXJDYXNlKCkgKyB0eXBlNS5zbGljZSgxKSldLmFwcGx5KF9hMTQsIGFyZ3MpOwogICAgICAgICAgICByZXR1cm4gY2FsbGJhY2tSZXN1bHQgIT09IHZvaWQgMCA/IGNhbGxiYWNrUmVzdWx0IDogbWV0aG9kUmVzdWx0OwogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUuYmluZCA9IGZ1bmN0aW9uKGNsaWNrLCBzdG9wKSB7CiAgICAgICAgICAgIHZhciBfYTE0ID0gdGhpcywgJGVsID0gX2ExNC4kZWwsIG9wdHMgPSBfYTE0LmN0eC5vcHRzOwogICAgICAgICAgICBpZiAoJGVsKSB7CiAgICAgICAgICAgICAgaWYgKGNsaWNrKSB7CiAgICAgICAgICAgICAgICBhZGRFdmVudCgkZWwsIENPTlRBSU5FUl9DTElDS19FVkVOVCwgdGhpcy5oYW5kbGVDbGljaywgZmFsc2UpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBpZiAoc3RvcCkgewogICAgICAgICAgICAgICAgYWRkRXZlbnQoJGVsLCBDT05UQUlORVJfU1RPUF9FVkVOVCwgdGhpcy5oYW5kbGVTdG9wLCBvcHRzID8gb3B0cy5jYW5jZWxsYWJsZSA6IHRydWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfTsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5wcm90b3R5cGUudW5iaW5kID0gZnVuY3Rpb24oY2xpY2ssIHN0b3ApIHsKICAgICAgICAgICAgdmFyIF9hMTQgPSB0aGlzLCAkZWwgPSBfYTE0LiRlbCwgb3B0cyA9IF9hMTQuY3R4Lm9wdHM7CiAgICAgICAgICAgIGlmICgkZWwpIHsKICAgICAgICAgICAgICBpZiAoY2xpY2spIHsKICAgICAgICAgICAgICAgIHJlbW92ZUV2ZW50KCRlbCwgQ09OVEFJTkVSX0NMSUNLX0VWRU5ULCB0aGlzLmhhbmRsZUNsaWNrLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGlmIChzdG9wKSB7CiAgICAgICAgICAgICAgICByZW1vdmVFdmVudCgkZWwsIENPTlRBSU5FUl9TVE9QX0VWRU5ULCB0aGlzLmhhbmRsZVN0b3AsIG9wdHMgPyBvcHRzLmNhbmNlbGxhYmxlIDogdHJ1ZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgICAgU3dlZXRTY3JvbGw0LnJhZiA9IHJhZjsKICAgICAgICAgIFN3ZWV0U2Nyb2xsNC5jYWYgPSBjYWY7CiAgICAgICAgICByZXR1cm4gU3dlZXRTY3JvbGw0OwogICAgICAgIH0pKCkKICAgICAgKTsKICAgICAgcmV0dXJuIFN3ZWV0U2Nyb2xsMzsKICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLnBsdWdpbnMuanMKdmFyIGltcG9ydF9zd2VldF9zY3JvbGwsIGxpazsKdmFyIGluaXRfZG9tdG9vbHNfcGx1Z2lucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5wbHVnaW5zLmpzIigpIHsKICAgIGluaXRfZGlzdF90czE2KCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9kaXN0X3RzMygpOwogICAgaW5pdF9kaXN0X3RzMTIoKTsKICAgIGluaXRfZGlzdF90czE3KCk7CiAgICBpbml0X2Rpc3RfdHMoKTsKICAgIGluaXRfZGlzdF90czE4KCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBpbml0X2Rpc3RfdHMxOSgpOwogICAgaW5pdF9kaXN0X3RzMTEoKTsKICAgIGluaXRfZGlzdF90czIwKCk7CiAgICBpbml0X2Rpc3RfdHMxNCgpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZGlzdF90czEzKCk7CiAgICBpbml0X2xpa19vYmplY3RtYXAoKTsKICAgIGluaXRfbGlrX3N0cmluZ21hcCgpOwogICAgaW5pdF9saWtfZmFzdG1hcCgpOwogICAgaW5pdF9sZW5pcygpOwogICAgaW1wb3J0X3N3ZWV0X3Njcm9sbCA9IF9fdG9FU00ocmVxdWlyZV9zd2VldF9zY3JvbGwoKSwgMSk7CiAgICBsaWsgPSB7CiAgICAgIE9iamVjdE1hcDogT2JqZWN0TWFwMiwKICAgICAgU3RyaW5nbWFwOiBTdHJpbmdtYXAyLAogICAgICBGYXN0TWFwOiBGYXN0TWFwMgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMKdmFyIGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLCB7CiAgY3NzRm9yRGVza3RvcDogKCkgPT4gY3NzRm9yRGVza3RvcCwKICBjc3NGb3JOb3RlYm9vazogKCkgPT4gY3NzRm9yTm90ZWJvb2ssCiAgY3NzRm9yUGhhYmxldDogKCkgPT4gY3NzRm9yUGhhYmxldCwKICBjc3NGb3JQaG9uZTogKCkgPT4gY3NzRm9yUGhvbmUsCiAgY3NzRm9yVGFibGV0OiAoKSA9PiBjc3NGb3JUYWJsZXQsCiAgZGVza3RvcDogKCkgPT4gZGVza3RvcCwKICBub3RlYm9vazogKCkgPT4gbm90ZWJvb2ssCiAgcGhhYmxldDogKCkgPT4gcGhhYmxldCwKICBwaG9uZTogKCkgPT4gcGhvbmUsCiAgdGFibGV0OiAoKSA9PiB0YWJsZXQKfSk7CnZhciBkZXNrdG9wLCBub3RlYm9vaywgdGFibGV0LCBwaGFibGV0LCBwaG9uZSwgY3NzRm9yRGVza3RvcCwgY3NzRm9yTm90ZWJvb2ssIGNzc0ZvclRhYmxldCwgY3NzRm9yUGhhYmxldCwgY3NzRm9yUGhvbmU7CnZhciBpbml0X2RvbXRvb2xzX2Nzc19icmVha3BvaW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYnJlYWtwb2ludHMuanMiKCkgewogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2xpdCgpOwogICAgZGVza3RvcCA9IDE2MDA7CiAgICBub3RlYm9vayA9IDEyNDA7CiAgICB0YWJsZXQgPSAxMDI0OwogICAgcGhhYmxldCA9IDYwMDsKICAgIHBob25lID0gNDAwOwogICAgY3NzRm9yRGVza3RvcCA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtaW4td2lkdGg6ICR7ZGVza3RvcH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtaW4td2lkdGg6ICR7ZGVza3RvcH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0Zvck5vdGVib29rID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtub3RlYm9va31weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7bm90ZWJvb2t9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgICBjc3NGb3JUYWJsZXQgPSAoY3NzQXJnKSA9PiB7CiAgICAgIHJldHVybiByKGAKICAgIEBjb250YWluZXIgd2NjVG9vbHNWaWV3cG9ydCAobWF4LXdpZHRoOiAke3RhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7dGFibGV0fXB4KSB7CiAgICAgICR7Y3NzQXJnLmNzc1RleHR9CiAgICB9CiAgYCk7CiAgICB9OwogICAgY3NzRm9yUGhhYmxldCA9IChjc3NBcmcpID0+IHsKICAgICAgcmV0dXJuIHIoYAogICAgQGNvbnRhaW5lciB3Y2NUb29sc1ZpZXdwb3J0IChtYXgtd2lkdGg6ICR7cGhhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7cGhhYmxldH1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogIGApOwogICAgfTsKICAgIGNzc0ZvclBob25lID0gKGNzc0FyZykgPT4gewogICAgICByZXR1cm4gcihgCiAgICBAY29udGFpbmVyIHdjY1Rvb2xzVmlld3BvcnQgKG1heC13aWR0aDogJHtwaG9uZX1weCkgewogICAgICAke2Nzc0FyZy5jc3NUZXh0fQogICAgfQogICAgQG1lZGlhIChtYXgtd2lkdGg6ICR7cGhvbmV9cHgpIHsKICAgICAgJHtjc3NBcmcuY3NzVGV4dH0KICAgIH0KICBgKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcwp2YXIgU2Nyb2xsZXI7CnZhciBpbml0X2RvbXRvb2xzX2NsYXNzZXNfc2Nyb2xsZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMuY2xhc3Nlcy5zY3JvbGxlci5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX3BsdWdpbnMoKTsKICAgIFNjcm9sbGVyID0gY2xhc3MgewogICAgICBkb210b29sc0luc3RhbmNlOwogICAgICAvLyBBcnJheSB0byBzdG9yZSBzY3JvbGwgY2FsbGJhY2sgZnVuY3Rpb25zLgogICAgICBzY3JvbGxDYWxsYmFja3MgPSBbXTsKICAgICAgLy8gTGVuaXMgaW5zdGFuY2UgKGlmIGFjdGl2YXRlZCkgb3IgbnVsbC4KICAgICAgbGVuaXNJbnN0YW5jZSA9IG51bGw7CiAgICAgIC8vIEJvdW5kIGhhbmRsZXJzIHRvIGFsbG93IHJlbW92YWwgZnJvbSBldmVudCBsaXN0ZW5lcnMuCiAgICAgIGhhbmRsZU5hdGl2ZVNjcm9sbCA9IChldmVudCkgPT4gewogICAgICAgIHRoaXMuZXhlY3V0ZVNjcm9sbENhbGxiYWNrcygpOwogICAgICB9OwogICAgICBoYW5kbGVMZW5pc1Njcm9sbCA9IChpbmZvKSA9PiB7CiAgICAgICAgdGhpcy5leGVjdXRlU2Nyb2xsQ2FsbGJhY2tzKCk7CiAgICAgIH07CiAgICAgIGNvbnN0cnVjdG9yKGRvbXRvb2xzSW5zdGFuY2VBcmcpIHsKICAgICAgICB0aGlzLmRvbXRvb2xzSW5zdGFuY2UgPSBkb210b29sc0luc3RhbmNlQXJnOwogICAgICAgIHRoaXMuYXR0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgfQogICAgICBzd2VldFNjcm9sbGVyID0gbmV3IGltcG9ydF9zd2VldF9zY3JvbGwuZGVmYXVsdCh7fSk7CiAgICAgIC8qKgogICAgICAgKiBTY3JvbGxzIHRvIGEgZ2l2ZW4gZWxlbWVudCB3aXRoIG9wdGlvbnMuCiAgICAgICAqLwogICAgICBhc3luYyB0b0VsZW1lbnQoZWxlbWVudEFyZywgb3B0aW9uc0FyZykgewogICAgICAgIHRoaXMuc3dlZXRTY3JvbGxlci50b0VsZW1lbnQoZWxlbWVudEFyZywgb3B0aW9uc0FyZyk7CiAgICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMy5kZWxheUZvcihvcHRpb25zQXJnLmR1cmF0aW9uKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRGV0ZWN0cyB3aGV0aGVyIG5hdGl2ZSBzbW9vdGggc2Nyb2xsaW5nIGlzIGVuYWJsZWQuCiAgICAgICAqLwogICAgICBhc3luYyBkZXRlY3ROYXRpdmVTbW9vdGhTY3JvbGwoKSB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IHNhbXBsZVNpemUgPSAxMDA7CiAgICAgICAgY29uc3QgYWNjZXB0YWJsZURlbHRhRGlmZmVyZW5jZSA9IDM7CiAgICAgICAgY29uc3QgbWluaW11bVNtb290aFJhdGlvID0gMC43NTsKICAgICAgICBjb25zdCBldmVudERlbHRhcyA9IFtdOwogICAgICAgIGZ1bmN0aW9uIG9uV2hlZWwoZXZlbnQpIHsKICAgICAgICAgIGV2ZW50RGVsdGFzLnB1c2goZXZlbnQuZGVsdGFZKTsKICAgICAgICAgIGlmIChldmVudERlbHRhcy5sZW5ndGggPj0gc2FtcGxlU2l6ZSkgewogICAgICAgICAgICB3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigid2hlZWwiLCBvbldoZWVsKTsKICAgICAgICAgICAgYW5hbHl6ZUV2ZW50cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmdW5jdGlvbiBhbmFseXplRXZlbnRzKCkgewogICAgICAgICAgY29uc3QgdG90YWxEaWZmcyA9IGV2ZW50RGVsdGFzLmxlbmd0aCAtIDE7CiAgICAgICAgICBsZXQgc21hbGxEaWZmQ291bnQgPSAwOwogICAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdG90YWxEaWZmczsgaTExKyspIHsKICAgICAgICAgICAgY29uc3QgZGlmZiA9IE1hdGguYWJzKGV2ZW50RGVsdGFzW2kxMSArIDFdIC0gZXZlbnREZWx0YXNbaTExXSk7CiAgICAgICAgICAgIGlmIChkaWZmIDw9IGFjY2VwdGFibGVEZWx0YURpZmZlcmVuY2UpIHsKICAgICAgICAgICAgICBzbWFsbERpZmZDb3VudCsrOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBzbW9vdGhSYXRpbyA9IHNtYWxsRGlmZkNvdW50IC8gdG90YWxEaWZmczsKICAgICAgICAgIGlmIChzbW9vdGhSYXRpbyA+PSBtaW5pbXVtU21vb3RoUmF0aW8pIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIlNtb290aCBzY3JvbGxpbmcgZGV0ZWN0ZWQuIik7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSh0cnVlKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTbW9vdGggc2Nyb2xsaW5nIE5PVCBkZXRlY3RlZC4iKTsKICAgICAgICAgICAgZG9uZS5yZXNvbHZlKGZhbHNlKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIndoZWVsIiwgb25XaGVlbCk7CiAgICAgICAgcmV0dXJuIGRvbmUucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogRW5hYmxlcyBMZW5pcyBzY3JvbGxpbmcuCiAgICAgICAqIElmIG9wdGlvbnNBcmcuZGlzYWJsZU9uTmF0aXZlU21vb3RoU2Nyb2xsIGlzIHRydWUgYW5kIG5hdGl2ZSBzbW9vdGggc2Nyb2xsaW5nIGlzIGRldGVjdGVkLAogICAgICAgKiBMZW5pcyB3aWxsIGJlIGRlc3Ryb3llZCBpbW1lZGlhdGVseS4KICAgICAgICovCiAgICAgIGFzeW5jIGVuYWJsZUxlbmlzU2Nyb2xsKG9wdGlvbnNBcmcpIHsKICAgICAgICBjb25zdCBsZW5pcyA9IG5ldyBMZW5pcyh7CiAgICAgICAgICBhdXRvUmFmOiB0cnVlCiAgICAgICAgfSk7CiAgICAgICAgaWYgKG9wdGlvbnNBcmc/LmRpc2FibGVPbk5hdGl2ZVNtb290aFNjcm9sbCkgewogICAgICAgICAgaWYgKGF3YWl0IHRoaXMuZGV0ZWN0TmF0aXZlU21vb3RoU2Nyb2xsKCkpIHsKICAgICAgICAgICAgbGVuaXMuZGVzdHJveSgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZSA9IGxlbmlzOwogICAgICAgIHRoaXMuZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICB0aGlzLmF0dGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKTsKICAgICAgICBjb25zdCBvcmlnaW5hbERlc3Ryb3kgPSBsZW5pcy5kZXN0cm95LmJpbmQobGVuaXMpOwogICAgICAgIGxlbmlzLmRlc3Ryb3kgPSAoKSA9PiB7CiAgICAgICAgICBvcmlnaW5hbERlc3Ryb3koKTsKICAgICAgICAgIHRoaXMuZGV0YWNoTGVuaXNTY3JvbGxMaXN0ZW5lcigpOwogICAgICAgICAgdGhpcy5hdHRhY2hOYXRpdmVTY3JvbGxMaXN0ZW5lcigpOwogICAgICAgICAgdGhpcy5sZW5pc0luc3RhbmNlID0gbnVsbDsKICAgICAgICB9OwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBSZWdpc3RlcnMgYSBjYWxsYmFjayB0byBiZSBleGVjdXRlZCBvbiBzY3JvbGwuCiAgICAgICAqIEBwYXJhbSBjYWxsYmFjayBBIGZ1bmN0aW9uIHRvIGV4ZWN1dGUgb24gZWFjaCBzY3JvbGwgZXZlbnQuCiAgICAgICAqLwogICAgICBvblNjcm9sbChjYWxsYmFjaykgewogICAgICAgIHRoaXMuc2Nyb2xsQ2FsbGJhY2tzLnB1c2goY2FsbGJhY2spOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBFeGVjdXRlcyBhbGwgcmVnaXN0ZXJlZCBzY3JvbGwgY2FsbGJhY2tzIGNvbmN1cnJlbnRseS4KICAgICAgICovCiAgICAgIGV4ZWN1dGVTY3JvbGxDYWxsYmFja3MoKSB7CiAgICAgICAgdGhpcy5zY3JvbGxDYWxsYmFja3MuZm9yRWFjaCgoY2FsbGJhY2spID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNhbGxiYWNrKCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBpbiBzY3JvbGwgY2FsbGJhY2s6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBBdHRhY2hlcyB0aGUgbmF0aXZlIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGF0dGFjaE5hdGl2ZVNjcm9sbExpc3RlbmVyKCkgewogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLCB0aGlzLmhhbmRsZU5hdGl2ZVNjcm9sbCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGFjaGVzIHRoZSBuYXRpdmUgc2Nyb2xsIGV2ZW50IGxpc3RlbmVyLgogICAgICAgKi8KICAgICAgZGV0YWNoTmF0aXZlU2Nyb2xsTGlzdGVuZXIoKSB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNjcm9sbCIsIHRoaXMuaGFuZGxlTmF0aXZlU2Nyb2xsKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQXR0YWNoZXMgdGhlIExlbmlzIHNjcm9sbCBldmVudCBsaXN0ZW5lci4KICAgICAgICovCiAgICAgIGF0dGFjaExlbmlzU2Nyb2xsTGlzdGVuZXIoKSB7CiAgICAgICAgaWYgKHRoaXMubGVuaXNJbnN0YW5jZSkgewogICAgICAgICAgdGhpcy5sZW5pc0luc3RhbmNlLm9uKCJzY3JvbGwiLCB0aGlzLmhhbmRsZUxlbmlzU2Nyb2xsKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIERldGFjaGVzIHRoZSBMZW5pcyBzY3JvbGwgZXZlbnQgbGlzdGVuZXIuCiAgICAgICAqLwogICAgICBkZXRhY2hMZW5pc1Njcm9sbExpc3RlbmVyKCkgewogICAgICAgIGlmICh0aGlzLmxlbmlzSW5zdGFuY2UpIHsKICAgICAgICAgIHRoaXMubGVuaXNJbnN0YW5jZS5vZmYoInNjcm9sbCIsIHRoaXMuaGFuZGxlTGVuaXNTY3JvbGwpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLnRoZW1lbWFuYWdlci5qcwp2YXIgVGhlbWVNYW5hZ2VyOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX3RoZW1lbWFuYWdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLnRoZW1lbWFuYWdlci5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgVGhlbWVNYW5hZ2VyID0gY2xhc3MgewogICAgICBkb210b29sc1JlZjsKICAgICAgZ29CcmlnaHRCb29sZWFuID0gZmFsc2U7CiAgICAgIHByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaCA9IHdpbmRvdy5tYXRjaE1lZGlhKCIocHJlZmVycy1jb2xvci1zY2hlbWU6IGxpZ2h0KSIpOwogICAgICB0aGVtZU9ic2VydmFibGUgPSBuZXcgZGlzdF90c19leHBvcnRzMi5yeGpzLlJlcGxheVN1YmplY3QoMSk7CiAgICAgIGNvbnN0cnVjdG9yKGRvbXRvb2xzUmVmQXJnKSB7CiAgICAgICAgdGhpcy5kb210b29sc1JlZiA9IGRvbXRvb2xzUmVmQXJnOwogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gdGhpcy5wcmVmZXJyZWRDb2xvclNjaGVtZU1lZGlhTWF0Y2gubWF0Y2hlczsKICAgICAgICB0aGlzLnByZWZlcnJlZENvbG9yU2NoZW1lTWVkaWFNYXRjaC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gZXZlbnRBcmcubWF0Y2hlczsKICAgICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgICAgYXN5bmMgZW5hYmxlQXV0b21hdGljR2xvYmFsVGhlbWVDaGFuZ2UoKSB7CiAgICAgICAgaWYgKGRvY3VtZW50LmJvZHkgJiYgZG9jdW1lbnQuYm9keS5zdHlsZSkgewogICAgICAgICAgdGhpcy50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKHsKICAgICAgICAgICAgbmV4dDogKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5iYWNrZ3JvdW5kID0gZ29CcmlnaHQgPyAiI2ZmZiIgOiAiIzAwMCI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhc3luYyB1cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpIHsKICAgICAgICB0aGlzLnRoZW1lT2JzZXJ2YWJsZS5uZXh0KHRoaXMuZ29CcmlnaHRCb29sZWFuKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogc2V0IHRoZSB0aGVtZSBvZiB0aGUgd2Vic2l0ZSB0byBicmlnaHQKICAgICAgICovCiAgICAgIGdvQnJpZ2h0KCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gdHJ1ZTsKICAgICAgICB0aGlzLnVwZGF0ZUFsbENvbm5lY3RlZEVsZW1lbnRzKCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIHNldCB0aGUgdGhlbWUgb2YgdGhlIHdlYnNpdGUgdG8gZGFyawogICAgICAgKi8KICAgICAgZ29EYXJrKCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gZmFsc2U7CiAgICAgICAgdGhpcy51cGRhdGVBbGxDb25uZWN0ZWRFbGVtZW50cygpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBzaW1wbHkgdG9nZ2xlIGJldHdlZW4gYnJpZ2h0IGFuZCBkYXJrCiAgICAgICAqLwogICAgICB0b2dnbGVEYXJrQnJpZ2h0KCkgewogICAgICAgIHRoaXMuZ29CcmlnaHRCb29sZWFuID0gIXRoaXMuZ29CcmlnaHRCb29sZWFuOwogICAgICAgIHRoaXMudXBkYXRlQWxsQ29ubmVjdGVkRWxlbWVudHMoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmtleWJvYXJkLmpzCnZhciBLZXksIEtleWJvYXJkOwp2YXIgaW5pdF9kb210b29sc19jbGFzc2VzX2tleWJvYXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNsYXNzZXMua2V5Ym9hcmQuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICAoZnVuY3Rpb24oS2V5MykgewogICAgICBLZXkzW0tleTNbIkJhY2tzcGFjZSJdID0gOF0gPSAiQmFja3NwYWNlIjsKICAgICAgS2V5M1tLZXkzWyJUYWIiXSA9IDldID0gIlRhYiI7CiAgICAgIEtleTNbS2V5M1siRW50ZXIiXSA9IDEzXSA9ICJFbnRlciI7CiAgICAgIEtleTNbS2V5M1siU2hpZnQiXSA9IDE2XSA9ICJTaGlmdCI7CiAgICAgIEtleTNbS2V5M1siQ3RybCJdID0gMTddID0gIkN0cmwiOwogICAgICBLZXkzW0tleTNbIkFsdCJdID0gMThdID0gIkFsdCI7CiAgICAgIEtleTNbS2V5M1siUGF1c2VCcmVhayJdID0gMTldID0gIlBhdXNlQnJlYWsiOwogICAgICBLZXkzW0tleTNbIkNhcHNMb2NrIl0gPSAyMF0gPSAiQ2Fwc0xvY2siOwogICAgICBLZXkzW0tleTNbIkVzY2FwZSJdID0gMjddID0gIkVzY2FwZSI7CiAgICAgIEtleTNbS2V5M1siU3BhY2UiXSA9IDMyXSA9ICJTcGFjZSI7CiAgICAgIEtleTNbS2V5M1siUGFnZVVwIl0gPSAzM10gPSAiUGFnZVVwIjsKICAgICAgS2V5M1tLZXkzWyJQYWdlRG93biJdID0gMzRdID0gIlBhZ2VEb3duIjsKICAgICAgS2V5M1tLZXkzWyJFbmQiXSA9IDM1XSA9ICJFbmQiOwogICAgICBLZXkzW0tleTNbIkhvbWUiXSA9IDM2XSA9ICJIb21lIjsKICAgICAgS2V5M1tLZXkzWyJMZWZ0QXJyb3ciXSA9IDM3XSA9ICJMZWZ0QXJyb3ciOwogICAgICBLZXkzW0tleTNbIlVwQXJyb3ciXSA9IDM4XSA9ICJVcEFycm93IjsKICAgICAgS2V5M1tLZXkzWyJSaWdodEFycm93Il0gPSAzOV0gPSAiUmlnaHRBcnJvdyI7CiAgICAgIEtleTNbS2V5M1siRG93bkFycm93Il0gPSA0MF0gPSAiRG93bkFycm93IjsKICAgICAgS2V5M1tLZXkzWyJJbnNlcnQiXSA9IDQ1XSA9ICJJbnNlcnQiOwogICAgICBLZXkzW0tleTNbIkRlbGV0ZSJdID0gNDZdID0gIkRlbGV0ZSI7CiAgICAgIEtleTNbS2V5M1siWmVybyJdID0gNDhdID0gIlplcm8iOwogICAgICBLZXkzW0tleTNbIkNsb3NlZFBhcmVuIl0gPSA0OF0gPSAiQ2xvc2VkUGFyZW4iOwogICAgICBLZXkzW0tleTNbIk9uZSJdID0gNDldID0gIk9uZSI7CiAgICAgIEtleTNbS2V5M1siRXhjbGFtYXRpb25NYXJrIl0gPSA0OV0gPSAiRXhjbGFtYXRpb25NYXJrIjsKICAgICAgS2V5M1tLZXkzWyJUd28iXSA9IDUwXSA9ICJUd28iOwogICAgICBLZXkzW0tleTNbIkF0U2lnbiJdID0gNTBdID0gIkF0U2lnbiI7CiAgICAgIEtleTNbS2V5M1siVGhyZWUiXSA9IDUxXSA9ICJUaHJlZSI7CiAgICAgIEtleTNbS2V5M1siUG91bmRTaWduIl0gPSA1MV0gPSAiUG91bmRTaWduIjsKICAgICAgS2V5M1tLZXkzWyJIYXNoIl0gPSA1MV0gPSAiSGFzaCI7CiAgICAgIEtleTNbS2V5M1siRm91ciJdID0gNTJdID0gIkZvdXIiOwogICAgICBLZXkzW0tleTNbIkRvbGxhclNpZ24iXSA9IDUyXSA9ICJEb2xsYXJTaWduIjsKICAgICAgS2V5M1tLZXkzWyJGaXZlIl0gPSA1M10gPSAiRml2ZSI7CiAgICAgIEtleTNbS2V5M1siUGVyY2VudFNpZ24iXSA9IDUzXSA9ICJQZXJjZW50U2lnbiI7CiAgICAgIEtleTNbS2V5M1siU2l4Il0gPSA1NF0gPSAiU2l4IjsKICAgICAgS2V5M1tLZXkzWyJDYXJldCJdID0gNTRdID0gIkNhcmV0IjsKICAgICAgS2V5M1tLZXkzWyJIYXQiXSA9IDU0XSA9ICJIYXQiOwogICAgICBLZXkzW0tleTNbIlNldmVuIl0gPSA1NV0gPSAiU2V2ZW4iOwogICAgICBLZXkzW0tleTNbIkFtcGVyc2FuZCJdID0gNTVdID0gIkFtcGVyc2FuZCI7CiAgICAgIEtleTNbS2V5M1siRWlnaHQiXSA9IDU2XSA9ICJFaWdodCI7CiAgICAgIEtleTNbS2V5M1siU3RhciJdID0gNTZdID0gIlN0YXIiOwogICAgICBLZXkzW0tleTNbIkFzdGVyaWsiXSA9IDU2XSA9ICJBc3RlcmlrIjsKICAgICAgS2V5M1tLZXkzWyJOaW5lIl0gPSA1N10gPSAiTmluZSI7CiAgICAgIEtleTNbS2V5M1siT3BlblBhcmVuIl0gPSA1N10gPSAiT3BlblBhcmVuIjsKICAgICAgS2V5M1tLZXkzWyJBIl0gPSA2NV0gPSAiQSI7CiAgICAgIEtleTNbS2V5M1siQiJdID0gNjZdID0gIkIiOwogICAgICBLZXkzW0tleTNbIkMiXSA9IDY3XSA9ICJDIjsKICAgICAgS2V5M1tLZXkzWyJEIl0gPSA2OF0gPSAiRCI7CiAgICAgIEtleTNbS2V5M1siRSJdID0gNjldID0gIkUiOwogICAgICBLZXkzW0tleTNbIkYiXSA9IDcwXSA9ICJGIjsKICAgICAgS2V5M1tLZXkzWyJHIl0gPSA3MV0gPSAiRyI7CiAgICAgIEtleTNbS2V5M1siSCJdID0gNzJdID0gIkgiOwogICAgICBLZXkzW0tleTNbIkkiXSA9IDczXSA9ICJJIjsKICAgICAgS2V5M1tLZXkzWyJKIl0gPSA3NF0gPSAiSiI7CiAgICAgIEtleTNbS2V5M1siSyJdID0gNzVdID0gIksiOwogICAgICBLZXkzW0tleTNbIkwiXSA9IDc2XSA9ICJMIjsKICAgICAgS2V5M1tLZXkzWyJNIl0gPSA3N10gPSAiTSI7CiAgICAgIEtleTNbS2V5M1siTiJdID0gNzhdID0gIk4iOwogICAgICBLZXkzW0tleTNbIk8iXSA9IDc5XSA9ICJPIjsKICAgICAgS2V5M1tLZXkzWyJQIl0gPSA4MF0gPSAiUCI7CiAgICAgIEtleTNbS2V5M1siUSJdID0gODFdID0gIlEiOwogICAgICBLZXkzW0tleTNbIlIiXSA9IDgyXSA9ICJSIjsKICAgICAgS2V5M1tLZXkzWyJTIl0gPSA4M10gPSAiUyI7CiAgICAgIEtleTNbS2V5M1siVCJdID0gODRdID0gIlQiOwogICAgICBLZXkzW0tleTNbIlUiXSA9IDg1XSA9ICJVIjsKICAgICAgS2V5M1tLZXkzWyJWIl0gPSA4Nl0gPSAiViI7CiAgICAgIEtleTNbS2V5M1siVyJdID0gODddID0gIlciOwogICAgICBLZXkzW0tleTNbIlgiXSA9IDg4XSA9ICJYIjsKICAgICAgS2V5M1tLZXkzWyJZIl0gPSA4OV0gPSAiWSI7CiAgICAgIEtleTNbS2V5M1siWiJdID0gOTBdID0gIloiOwogICAgICBLZXkzW0tleTNbIkxlZnRXaW5kb3dLZXkiXSA9IDkxXSA9ICJMZWZ0V2luZG93S2V5IjsKICAgICAgS2V5M1tLZXkzWyJSaWdodFdpbmRvd0tleSJdID0gOTJdID0gIlJpZ2h0V2luZG93S2V5IjsKICAgICAgS2V5M1tLZXkzWyJTZWxlY3RLZXkiXSA9IDkzXSA9ICJTZWxlY3RLZXkiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDAiXSA9IDk2XSA9ICJOdW1wYWQwIjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQxIl0gPSA5N10gPSAiTnVtcGFkMSI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkMiJdID0gOThdID0gIk51bXBhZDIiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDMiXSA9IDk5XSA9ICJOdW1wYWQzIjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQ0Il0gPSAxMDBdID0gIk51bXBhZDQiOwogICAgICBLZXkzW0tleTNbIk51bXBhZDUiXSA9IDEwMV0gPSAiTnVtcGFkNSI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkNiJdID0gMTAyXSA9ICJOdW1wYWQ2IjsKICAgICAgS2V5M1tLZXkzWyJOdW1wYWQ3Il0gPSAxMDNdID0gIk51bXBhZDciOwogICAgICBLZXkzW0tleTNbIk51bXBhZDgiXSA9IDEwNF0gPSAiTnVtcGFkOCI7CiAgICAgIEtleTNbS2V5M1siTnVtcGFkOSJdID0gMTA1XSA9ICJOdW1wYWQ5IjsKICAgICAgS2V5M1tLZXkzWyJNdWx0aXBseSJdID0gMTA2XSA9ICJNdWx0aXBseSI7CiAgICAgIEtleTNbS2V5M1siQWRkIl0gPSAxMDddID0gIkFkZCI7CiAgICAgIEtleTNbS2V5M1siU3VidHJhY3QiXSA9IDEwOV0gPSAiU3VidHJhY3QiOwogICAgICBLZXkzW0tleTNbIkRlY2ltYWxQb2ludCJdID0gMTEwXSA9ICJEZWNpbWFsUG9pbnQiOwogICAgICBLZXkzW0tleTNbIkRpdmlkZSJdID0gMTExXSA9ICJEaXZpZGUiOwogICAgICBLZXkzW0tleTNbIkYxIl0gPSAxMTJdID0gIkYxIjsKICAgICAgS2V5M1tLZXkzWyJGMiJdID0gMTEzXSA9ICJGMiI7CiAgICAgIEtleTNbS2V5M1siRjMiXSA9IDExNF0gPSAiRjMiOwogICAgICBLZXkzW0tleTNbIkY0Il0gPSAxMTVdID0gIkY0IjsKICAgICAgS2V5M1tLZXkzWyJGNSJdID0gMTE2XSA9ICJGNSI7CiAgICAgIEtleTNbS2V5M1siRjYiXSA9IDExN10gPSAiRjYiOwogICAgICBLZXkzW0tleTNbIkY3Il0gPSAxMThdID0gIkY3IjsKICAgICAgS2V5M1tLZXkzWyJGOCJdID0gMTE5XSA9ICJGOCI7CiAgICAgIEtleTNbS2V5M1siRjkiXSA9IDEyMF0gPSAiRjkiOwogICAgICBLZXkzW0tleTNbIkYxMCJdID0gMTIxXSA9ICJGMTAiOwogICAgICBLZXkzW0tleTNbIkYxMSJdID0gMTIyXSA9ICJGMTEiOwogICAgICBLZXkzW0tleTNbIkYxMiJdID0gMTIzXSA9ICJGMTIiOwogICAgICBLZXkzW0tleTNbIk51bUxvY2siXSA9IDE0NF0gPSAiTnVtTG9jayI7CiAgICAgIEtleTNbS2V5M1siU2Nyb2xsTG9jayJdID0gMTQ1XSA9ICJTY3JvbGxMb2NrIjsKICAgICAgS2V5M1tLZXkzWyJTZW1pQ29sb24iXSA9IDE4Nl0gPSAiU2VtaUNvbG9uIjsKICAgICAgS2V5M1tLZXkzWyJFcXVhbHMiXSA9IDE4N10gPSAiRXF1YWxzIjsKICAgICAgS2V5M1tLZXkzWyJDb21tYSJdID0gMTg4XSA9ICJDb21tYSI7CiAgICAgIEtleTNbS2V5M1siRGFzaCJdID0gMTg5XSA9ICJEYXNoIjsKICAgICAgS2V5M1tLZXkzWyJQZXJpb2QiXSA9IDE5MF0gPSAiUGVyaW9kIjsKICAgICAgS2V5M1tLZXkzWyJVbmRlclNjb3JlIl0gPSAxODldID0gIlVuZGVyU2NvcmUiOwogICAgICBLZXkzW0tleTNbIlBsdXNTaWduIl0gPSAxODddID0gIlBsdXNTaWduIjsKICAgICAgS2V5M1tLZXkzWyJGb3J3YXJkU2xhc2giXSA9IDE5MV0gPSAiRm9yd2FyZFNsYXNoIjsKICAgICAgS2V5M1tLZXkzWyJUaWxkZSJdID0gMTkyXSA9ICJUaWxkZSI7CiAgICAgIEtleTNbS2V5M1siR3JhdmVBY2NlbnQiXSA9IDE5Ml0gPSAiR3JhdmVBY2NlbnQiOwogICAgICBLZXkzW0tleTNbIk9wZW5CcmFja2V0Il0gPSAyMTldID0gIk9wZW5CcmFja2V0IjsKICAgICAgS2V5M1tLZXkzWyJDbG9zZWRCcmFja2V0Il0gPSAyMjFdID0gIkNsb3NlZEJyYWNrZXQiOwogICAgICBLZXkzW0tleTNbIlF1b3RlIl0gPSAyMjJdID0gIlF1b3RlIjsKICAgIH0pKEtleSB8fCAoS2V5ID0ge30pKTsKICAgIEtleWJvYXJkID0gY2xhc3MgewogICAgICBkb21Ob2RlOwogICAgICBtYXBDb21ib3NUb0hhbmRsZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgICAgcHJlc3NlZEtleXMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICBjb25zdHJ1Y3Rvcihkb21Ob2RlKSB7CiAgICAgICAgdGhpcy5kb21Ob2RlID0gZG9tTm9kZTsKICAgICAgICB0aGlzLnN0YXJ0TGlzdGVuaW5nKCk7CiAgICAgIH0KICAgICAga2V5RW51bSA9IEtleTsKICAgICAgb24oa2V5czIpIHsKICAgICAgICBjb25zdCBzdWJqZWN0ID0gbmV3IGRpc3RfdHNfZXhwb3J0czIucnhqcy5TdWJqZWN0KCk7CiAgICAgICAgdGhpcy5yZWdpc3RlcktleXMoa2V5czIsIHN1YmplY3QpOwogICAgICAgIHJldHVybiBzdWJqZWN0OwogICAgICB9CiAgICAgIHRyaWdnZXJLZXlQcmVzcyhrZXlzQXJnKSB7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXNBcmcpIHsKICAgICAgICAgIHRoaXMucHJlc3NlZEtleXMuYWRkKGtleTIpOwogICAgICAgIH0KICAgICAgICB0aGlzLmNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKCk7CiAgICAgICAgZm9yIChjb25zdCBrZXkyIG9mIGtleXNBcmcpIHsKICAgICAgICAgIHRoaXMucHJlc3NlZEtleXMuZGVsZXRlKGtleTIpOwogICAgICAgIH0KICAgICAgfQogICAgICBzdGFydExpc3RlbmluZygpIHsKICAgICAgICB0aGlzLmRvbU5vZGUuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5RG93bik7CiAgICAgICAgdGhpcy5kb21Ob2RlLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5oYW5kbGVLZXlVcCk7CiAgICAgIH0KICAgICAgc3RvcExpc3RlbmluZygpIHsKICAgICAgICB0aGlzLmRvbU5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5RG93bik7CiAgICAgICAgdGhpcy5kb21Ob2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleXVwIiwgdGhpcy5oYW5kbGVLZXlVcCk7CiAgICAgIH0KICAgICAgY2xlYXIoKSB7CiAgICAgICAgdGhpcy5zdG9wTGlzdGVuaW5nKCk7CiAgICAgICAgdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmNsZWFyKCk7CiAgICAgICAgdGhpcy5wcmVzc2VkS2V5cy5jbGVhcigpOwogICAgICB9CiAgICAgIGhhbmRsZUtleURvd24gPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmFkZChldmVudC5rZXlDb2RlKTsKICAgICAgICB0aGlzLmNoZWNrTWF0Y2hpbmdLZXlib2FyZFN1YmplY3RzKGV2ZW50KTsKICAgICAgfTsKICAgICAgY2hlY2tNYXRjaGluZ0tleWJvYXJkU3ViamVjdHMocGF5bG9hZEFyZykgewogICAgICAgIHRoaXMubWFwQ29tYm9zVG9IYW5kbGVycy5mb3JFYWNoKChzdWJqZWN0QXJnLCBrZXlzQXJnKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5hcmVBbGxLZXlzUHJlc3NlZChrZXlzQXJnKSkgewogICAgICAgICAgICBzdWJqZWN0QXJnLm5leHQocGF5bG9hZEFyZyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgaGFuZGxlS2V5VXAgPSAoZXZlbnQpID0+IHsKICAgICAgICB0aGlzLnByZXNzZWRLZXlzLmRlbGV0ZShldmVudC5rZXlDb2RlKTsKICAgICAgfTsKICAgICAgYXJlQWxsS2V5c1ByZXNzZWQoa2V5c0FyZykgewogICAgICAgIGxldCByZXN1bHQgPSB0cnVlOwogICAgICAgIGtleXNBcmcuZm9yRWFjaCgoa2V5MikgPT4gewogICAgICAgICAgaWYgKCF0aGlzLnByZXNzZWRLZXlzLmhhcyhrZXkyKSkgewogICAgICAgICAgICByZXN1bHQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICByZXR1cm4gcmVzdWx0OwogICAgICB9CiAgICAgIHJlZ2lzdGVyS2V5cyhrZXlzQXJnLCBzdWJqZWN0QXJnKSB7CiAgICAgICAgaWYgKCF0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuaGFzKGtleXNBcmcpKSB7CiAgICAgICAgICB0aGlzLm1hcENvbWJvc1RvSGFuZGxlcnMuc2V0KGtleXNBcmcsIHN1YmplY3RBcmcpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBzdWJqZWN0ID0gdGhpcy5tYXBDb21ib3NUb0hhbmRsZXJzLmdldChrZXlzQXJnKTsKICAgICAgICAgIHJldHVybiBzdWJqZWN0OwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmRvbXRvb2xzLmpzCnZhciBEb21Ub29sczsKdmFyIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19kb210b29scyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jbGFzc2VzLmRvbXRvb2xzLmpzIigpIHsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2lucygpOwogICAgaW5pdF9kb210b29sc19jc3NfYnJlYWtwb2ludHMoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19zY3JvbGxlcigpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc190aGVtZW1hbmFnZXIoKTsKICAgIGluaXRfZG9tdG9vbHNfY2xhc3Nlc19rZXlib2FyZCgpOwogICAgRG9tVG9vbHMgPSBjbGFzcyBfRG9tVG9vbHMgewogICAgICAvLyA9PT09PT0KICAgICAgLy8gU1RBVElDCiAgICAgIC8vID09PT09PQogICAgICBzdGF0aWMgaW5pdGlhbGl6YXRpb25Qcm9taXNlID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIHNldHVwcyBkb210b29scwogICAgICAgKi8KICAgICAgc3RhdGljIGFzeW5jIHNldHVwRG9tVG9vbHMob3B0aW9uc0FyZyA9IHt9KSB7CiAgICAgICAgaWYgKCFvcHRpb25zQXJnLmlnbm9yZUdsb2JhbCAmJiBfRG9tVG9vbHMuaW5pdGlhbGl6YXRpb25Qcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gYXdhaXQgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKCFvcHRpb25zQXJnLmlnbm9yZUdsb2JhbCkgewogICAgICAgICAgX0RvbVRvb2xzLmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGxldCBkb21Ub29sc0luc3RhbmNlOwogICAgICAgICAgICBpZiAoIWdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzKSB7CiAgICAgICAgICAgICAgZ2xvYmFsVGhpcy5kZWVzRG9tVG9vbHMgPSBuZXcgX0RvbVRvb2xzKG9wdGlvbnNBcmcpOwogICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICAgICAgICBjb25zdCByZWFkeVN0YXRlQ2hhbmdlZEZ1bmMgPSAoKSA9PiB7CiAgICAgICAgICAgICAgICBpZiAoZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImludGVyYWN0aXZlIiB8fCBkb2N1bWVudC5yZWFkeVN0YXRlID09PSAiY29tcGxldGUiKSB7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZWxlbWVudHMuaGVhZEVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJoZWFkIik7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZWxlbWVudHMuYm9keUVsZW1lbnQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJib2R5Iik7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2Uua2V5Ym9hcmQgPSBuZXcgS2V5Ym9hcmQoZG9jdW1lbnQuYm9keSk7CiAgICAgICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UuZG9tUmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH07CiAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJpbnRlcmFjdGl2ZSIgfHwgZG9jdW1lbnQucmVhZHlTdGF0ZSA9PT0gImNvbXBsZXRlIikgewogICAgICAgICAgICAgICAgcmVhZHlTdGF0ZUNoYW5nZWRGdW5jKCk7CiAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInJlYWR5c3RhdGVjaGFuZ2UiLCByZWFkeVN0YXRlQ2hhbmdlZEZ1bmMpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBkb21Ub29sc0luc3RhbmNlLmRvbVRvb2xzUmVhZHkucmVzb2x2ZSgpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGRvbVRvb2xzSW5zdGFuY2UgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICAgICAgfQogICAgICAgICAgICBhd2FpdCBkb21Ub29sc0luc3RhbmNlLmRvbVRvb2xzUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgcmV0dXJuIGRvbVRvb2xzSW5zdGFuY2U7CiAgICAgICAgICB9KSgpOwogICAgICAgICAgcmV0dXJuIGF3YWl0IF9Eb21Ub29scy5pbml0aWFsaXphdGlvblByb21pc2U7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGRvbVRvb2xzSW5zdGFuY2UgPSBuZXcgX0RvbVRvb2xzKG9wdGlvbnNBcmcpOwogICAgICAgICAgcmV0dXJuIGRvbVRvb2xzSW5zdGFuY2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBpZiB5b3UgY2FuLCB1c2UgdGhlIHN0YXRpYyBhc3lzbmMgLnNldHVwRG9tVG9vbHMoKSBmdW5jdGlvbiBpbnN0ZWFkIHNpbmNlIGl0IGlzIHNhZmVyIHRvIHVzZS4KICAgICAgICovCiAgICAgIHN0YXRpYyBnZXRHbG9iYWxEb21Ub29sc1N5bmMoKSB7CiAgICAgICAgY29uc3QgZ2xvYmFsRG9tVG9vbHMgPSBnbG9iYWxUaGlzLmRlZXNEb21Ub29sczsKICAgICAgICBpZiAoIWdsb2JhbERvbVRvb2xzKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIllvdSB0cmllZCB0byBhY2Nlc3MgZG9tdG9vbHMgc3luY2hyb25vdXNseSB0b28gZWFybHkiKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdsb2JhbFRoaXMuZGVlc0RvbVRvb2xzOwogICAgICB9CiAgICAgIC8vID09PT09PT09CiAgICAgIC8vIElOU1RBTkNFCiAgICAgIC8vID09PT09PT09CiAgICAgIC8vIGVsZW1lbnRzCiAgICAgIGVsZW1lbnRzID0gewogICAgICAgIGhlYWRFbGVtZW50OiBudWxsLAogICAgICAgIGJvZHlFbGVtZW50OiBudWxsCiAgICAgIH07CiAgICAgIHdlYnNldHVwID0gbmV3IFdlYlNldHVwKHsKICAgICAgICBtZXRhT2JqZWN0OiB7CiAgICAgICAgICB0aXRsZTogImxvYWRpbmcuLi4iCiAgICAgICAgfQogICAgICB9KTsKICAgICAgc21hcnRzdGF0ZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxOS5TbWFydHN0YXRlKCk7CiAgICAgIGRvbVRvb2xzU3RhdGVQYXJ0ID0gdGhpcy5zbWFydHN0YXRlLmdldFN0YXRlUGFydCgiZG9tdG9vbHMiLCB7CiAgICAgICAgdmlydHVhbFZpZXdwb3J0OiAibmF0aXZlIiwKICAgICAgICBqd3Q6IG51bGwKICAgICAgfSk7CiAgICAgIHJvdXRlciA9IG5ldyBkaXN0X3RzX2V4cG9ydHMxOC5TbWFydFJvdXRlcih7CiAgICAgICAgZGVidWc6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb252ZW5pZW5jZSA9IHsKICAgICAgICB0eXBlZHJlcXVlc3Q6IGRpc3RfdHNfZXhwb3J0czE1LAogICAgICAgIHNtYXJ0ZGVsYXk6IGRpc3RfdHNfZXhwb3J0czMsCiAgICAgICAgc21hcnRqc29uOiBkaXN0X3RzX2V4cG9ydHMxMiwKICAgICAgICBzbWFydHVybDogZGlzdF90c19leHBvcnRzMjAKICAgICAgfTsKICAgICAgZGVlc0NvbW1zID0gbmV3IGRpc3RfdHNfZXhwb3J0czE2LkRlZXNDb21tcygpOwogICAgICBzY3JvbGxlciA9IG5ldyBTY3JvbGxlcih0aGlzKTsKICAgICAgdGhlbWVNYW5hZ2VyID0gbmV3IFRoZW1lTWFuYWdlcih0aGlzKTsKICAgICAga2V5Ym9hcmQgPSBudWxsOwogICAgICAvLyBJbml0aWFsaXplZCBhZnRlciBET00gcmVhZHkgdG8gYXZvaWQgYWNjZXNzaW5nIGRvY3VtZW50LmJvZHkgYmVmb3JlIGl0IGV4aXN0cwogICAgICBkb21Ub29sc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGRvbVJlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGdsb2JhbFN0eWxlc1JlYWR5ID0gZGlzdF90c19leHBvcnRzLmRlZmVyKCk7CiAgICAgIGNvbnN0cnVjdG9yKG9wdGlvbnNBcmcpIHsKICAgICAgfQogICAgICBydW5PbmNlVHJhY2tlclN0cmluZ01hcCA9IG5ldyBsaWsuU3RyaW5nbWFwKCk7CiAgICAgIHJ1bk9uY2VSZXN1bHRNYXAgPSBuZXcgbGlrLkZhc3RNYXAoKTsKICAgICAgcnVuT25jZUVycm9yTWFwID0gbmV3IGxpay5GYXN0TWFwKCk7CiAgICAgIC8qKgogICAgICAgKiBydW4gYSBmdW5jdGlvbiBvbmNlIGFuZCBhbHdheXMgZ2V0IHRoZSBQcm9taXNlIG9mIHRoZSBmaXJzdCBleGVjdXRpb24KICAgICAgICogQHBhcmFtIGlkZW50aWZpZXJBcmcgdGhlIGluZGVudGlmaWVyIGFyZyBpZGVudGlmaWVzIGZ1bmN0aW9ucy4gZnVuY3Rpb25zIHdpdGggdGhlIHNhbWUgaWRlbnRpZmllciBhcmUgY29uc2lkZXJlZCBlcXVhbAogICAgICAgKiBAcGFyYW0gZnVuY0FyZyB0aGUgYWN0dWFsIGZ1bmMgYXJnIHRvIHJ1bgogICAgICAgKi8KICAgICAgYXN5bmMgcnVuT25jZShpZGVudGlmaWVyQXJnLCBmdW5jQXJnKSB7CiAgICAgICAgY29uc3QgcnVubmluZ0lkID0gYCR7aWRlbnRpZmllckFyZ30rcnVubmluZ0NoZWNrYDsKICAgICAgICBpZiAoIXRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuY2hlY2tTdHJpbmcoaWRlbnRpZmllckFyZykpIHsKICAgICAgICAgIHRoaXMucnVuT25jZVRyYWNrZXJTdHJpbmdNYXAuYWRkU3RyaW5nKGlkZW50aWZpZXJBcmcpOwogICAgICAgICAgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5hZGRTdHJpbmcocnVubmluZ0lkKTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGZ1bmNBcmcoKTsKICAgICAgICAgICAgdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmFkZFRvTWFwKGlkZW50aWZpZXJBcmcsIHJlc3VsdCk7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VFcnJvck1hcC5hZGRUb01hcChpZGVudGlmaWVyQXJnLCBlcnJvcik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLnJ1bk9uY2VUcmFja2VyU3RyaW5nTWFwLnJlbW92ZVN0cmluZyhydW5uaW5nSWQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5ydW5PbmNlVHJhY2tlclN0cmluZ01hcC5yZWdpc3RlclVudGlsVHJ1ZSgoc3RyaW5nTWFwKSA9PiB7CiAgICAgICAgICByZXR1cm4gIXN0cmluZ01hcC5pbmNsdWRlcyhydW5uaW5nSWQpOwogICAgICAgIH0sICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVycm9yID0gdGhpcy5ydW5PbmNlRXJyb3JNYXAuZ2V0QnlLZXkoaWRlbnRpZmllckFyZyk7CiAgICAgICAgICBpZiAoZXJyb3IpIHsKICAgICAgICAgICAgdGhyb3cgZXJyb3I7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGhpcy5ydW5PbmNlUmVzdWx0TWFwLmdldEJ5S2V5KGlkZW50aWZpZXJBcmcpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8vIHNldFN0dWZmCiAgICAgIC8qKgogICAgICAgKiBhbGxvd3MgdG8gc2V0IGdsb2JhbCBzdHlsZXMKICAgICAgICogQHBhcmFtIHN0eWxlc1RleHQgdGhlIGNzcyB0ZXh0IHlvdSB3YW50IHRvIHNldAogICAgICAgKi8KICAgICAgYXN5bmMgc2V0R2xvYmFsU3R5bGVzKHN0eWxlc1RleHQpIHsKICAgICAgICBhd2FpdCB0aGlzLmRvbVJlYWR5LnByb21pc2U7CiAgICAgICAgY29uc3Qgc3R5bGVFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTsKICAgICAgICBzdHlsZUVsZW1lbnQudHlwZSA9ICJ0ZXh0L2NzcyI7CiAgICAgICAgc3R5bGVFbGVtZW50LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHN0eWxlc1RleHQpKTsKICAgICAgICB0aGlzLmVsZW1lbnRzLmhlYWRFbGVtZW50LmFwcGVuZENoaWxkKHN0eWxlRWxlbWVudCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIGFsbG93cyB0byBzZXQgZ2xvYmFsIHN0eWxlcwogICAgICAgKiBAcGFyYW0gc3R5bGVzVGV4dCB0aGUgY3NzIHRleHQgeW91IHdhbnQgdG8gc2V0CiAgICAgICAqLwogICAgICBhc3luYyBzZXRFeHRlcm5hbFNjcmlwdChzY3JpcHRMaW5rQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgIGNvbnN0IGRvbmUgPSBkaXN0X3RzX2V4cG9ydHMuZGVmZXIoKTsKICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0TGlua0FyZzsKICAgICAgICBzY3JpcHQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZCIsIGZ1bmN0aW9uKCkgewogICAgICAgICAgZG9uZS5yZXNvbHZlKCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgcGFyZW50Tm9kZSA9IGRvY3VtZW50LmhlYWQgfHwgZG9jdW1lbnQuYm9keTsKICAgICAgICBwYXJlbnROb2RlLmFwcGVuZChzY3JpcHQpOwogICAgICAgIGF3YWl0IGRvbmUucHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgZXh0ZXJuYWwgY3NzIGZpbGVzCiAgICAgICAqIEBwYXJhbSBjc3NMaW5rQXJnIGEgdXJsIHRvIGFuIGV4dGVybmFsIHN0eWxlc2hlZXQKICAgICAgICovCiAgICAgIGFzeW5jIHNldEV4dGVybmFsQ3NzKGNzc0xpbmtBcmcpIHsKICAgICAgICBjb25zdCBjc3NUYWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJsaW5rIik7CiAgICAgICAgY3NzVGFnLnJlbCA9ICJzdHlsZXNoZWV0IjsKICAgICAgICBjc3NUYWcuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKICAgICAgICBjc3NUYWcuaHJlZiA9IGNzc0xpbmtBcmc7CiAgICAgICAgZG9jdW1lbnQuaGVhZC5hcHBlbmQoY3NzVGFnKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogYWxsb3dzIHNldHRpbmcgb2Ygd2Vic2l0ZSBpbmZvcwogICAgICAgKiBAcGFyYW0gb3B0aW9uc0FyZyB0aGUgd2Vic2l0ZSBpbmZvCiAgICAgICAqLwogICAgICBhc3luYyBzZXRXZWJzaXRlSW5mbyhvcHRpb25zQXJnKSB7CiAgICAgICAgYXdhaXQgdGhpcy53ZWJzZXR1cC5zZXR1cChvcHRpb25zQXJnKTsKICAgICAgICBhd2FpdCB0aGlzLndlYnNldHVwLnJlYWR5UHJvbWlzZTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcwp2YXIgc2Nyb2xsQmFyU3R5bGVzLCBnbG9iYWxCYXNlU3R5bGVzOwp2YXIgaW5pdF9kb210b29sc19jc3NfYmFzZXN0eWxlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5jc3MuYmFzZXN0eWxlcy5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzY3JvbGxCYXJTdHlsZXMgPSAoKCkgPT4gewogICAgICBjb25zdCByZXR1cm5TdHlsZXNPbGQgPSBuYXZpZ2F0b3IudXNlckFnZW50LmluZGV4T2YoIk1hYyBPUyBYIikgPT09IC0xID8gaWBgLmNzc1RleHQgOiBgYDsKICAgICAgY29uc3QgcmV0dXJuU3R5bGVzID0gaWAKICAgIC8qIHdpZHRoICovCiAgICA6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgd2lkdGg6IDBweDsKICAgIH0KICAgIGJvZHkgewogICAgICBzY3JvbGxiYXItd2lkdGg6IG5vbmU7CiAgICB9CiAgYC5jc3NUZXh0OwogICAgICByZXR1cm4gcmV0dXJuU3R5bGVzOwogICAgfSkoKTsKICAgIGdsb2JhbEJhc2VTdHlsZXMgPSBpYAogIC8qCiAgQGZvbnQtZmFjZSB7CiAgICBmb250LWZhbWlseTogJ01hdGVyaWFsIEljb25zJzsKICAgIGZvbnQtc3R5bGU6IG5vcm1hbDsKICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICBzcmM6IHVybChodHRwczovL2ZvbnRzLmdzdGF0aWMuY29tL3MvbWF0ZXJpYWxpY29ucy92NDIvZmxVaFJxNnR6WmNsUUVKLVZkZy1JdWlhRHNOY0loUTh0US53b2ZmMikKICAgICAgZm9ybWF0KCd3b2ZmMicpOwogIH0gKi8KCiAgLyogZ2xvYmFsIGJvZHkgc3R5bGVzICovCiAgYm9keSB7CiAgICBtYXJnaW46IDBweDsKICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIHNhbnMtc2VyaWY7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogc2Nyb2xsIGJhciBzdHlsZXMgKi8KICAke3Ioc2Nyb2xsQmFyU3R5bGVzKX0KYC5jc3NUZXh0OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmVsZW1lbnRiYXNpYy5qcwp2YXIgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMsIHsKICBzZXR1cDogKCkgPT4gc2V0dXAsCiAgc3RhdGljU3R5bGVzOiAoKSA9PiBzdGF0aWNTdHlsZXMsCiAgc3R5bGVzOiAoKSA9PiBzdHlsZXMKfSk7CnZhciBzdGF0aWNTdHlsZXMsIHN0eWxlcywgc2V0dXA7CnZhciBpbml0X2RvbXRvb2xzX2VsZW1lbnRiYXNpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9kb210b29scy5lbGVtZW50YmFzaWMuanMiKCkgewogICAgaW5pdF9kb210b29sc19wbHVnaW5zKCk7CiAgICBpbml0X2RvbXRvb2xzX2NsYXNzZXNfZG9tdG9vbHMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2Jhc2VzdHlsZXMoKTsKICAgIGluaXRfbGl0KCk7CiAgICBzdGF0aWNTdHlsZXMgPSBpYAogICogewogICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICB9CgogIDpob3N0IHsKICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCBzYW5zLXNlcmlmOwogIH0KCiAgJHtyKHNjcm9sbEJhclN0eWxlcyl9CmA7CiAgICBzdHlsZXMgPSBiMmAKICA8c3R5bGU+CiAgICAqIHsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzLCBjb2xvciAwLjFzOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgfQoKICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgc2Fucy1zZXJpZjsKICAgIH0KCiAgICAke3Njcm9sbEJhclN0eWxlc30KICA8L3N0eWxlPgpgOwogICAgc2V0dXAgPSBhc3luYyAoZWxlbWVudEFyZywgb3B0aW9uc0FyZyA9IHt9KSA9PiB7CiAgICAgIGNvbnN0IGRvbVRvb2xzID0gYXdhaXQgRG9tVG9vbHMuc2V0dXBEb21Ub29scyhvcHRpb25zQXJnKTsKICAgICAgaWYgKGVsZW1lbnRBcmcpIHsKICAgICAgfQogICAgICBkb21Ub29scy5ydW5PbmNlKCJlbGVtZW50QmFzaWNTZXR1cCIsIGFzeW5jICgpID0+IHsKICAgICAgICBkb21Ub29scy5zZXRHbG9iYWxTdHlsZXMoZ2xvYmFsQmFzZVN0eWxlcyk7CiAgICAgIH0pOwogICAgICByZXR1cm4gZG9tVG9vbHM7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcwp2YXIgZG9tdG9vbHNfY3NzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZG9tdG9vbHNfY3NzX2V4cG9ydHMsIHsKICBjc3NHcmlkQ29sdW1uczogKCkgPT4gY3NzR3JpZENvbHVtbnMKfSk7CnZhciBjc3NHcmlkQ29sdW1uczsKdmFyIGluaXRfZG9tdG9vbHNfY3NzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1kb210b29sc0AyLjMuNy9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1kb210b29scy9kaXN0X3RzL2RvbXRvb2xzLmNzcy5qcyIoKSB7CiAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgbGV0IHJldHVyblN0cmluZyA9IGBgOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBhbW91bnRPZkNvbHVtbnNBcmc7IGkxMSsrKSB7CiAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgIH0KICAgICAgcmV0dXJuIHJldHVyblN0cmluZzsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcwp2YXIgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzID0ge307Cl9fZXhwb3J0KGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cywgewogIFN3ZWV0U2Nyb2xsOiAoKSA9PiBpbXBvcnRfc3dlZXRfc2Nyb2xsMi5kZWZhdWx0LAogIHNtYXJ0ZGVsYXk6ICgpID0+IGRpc3RfdHNfZXhwb3J0czMsCiAgc21hcnRtYXJrZG93bjogKCkgPT4gZGlzdF90c19leHBvcnRzMTcsCiAgc21hcnRwcm9taXNlOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMsCiAgc21hcnRyb3V0ZXI6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE4LAogIHNtYXJ0cng6ICgpID0+IGRpc3RfdHNfZXhwb3J0czIsCiAgc21hcnRzdGF0ZTogKCkgPT4gZGlzdF90c19leHBvcnRzMTksCiAgc21hcnRzdHJpbmc6ICgpID0+IGRpc3RfdHNfZXhwb3J0czExLAogIHNtYXJ0dXJsOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyMCwKICB0eXBlZHJlcXVlc3Q6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE1Cn0pOwp2YXIgaW1wb3J0X3N3ZWV0X3Njcm9sbDI7CnZhciBpbml0X2RvbXRvb2xzX3BsdWdpbmV4cG9ydHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWRvbXRvb2xzQDIuMy43L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzL2Rpc3RfdHMvZG9tdG9vbHMucGx1Z2luZXhwb3J0cy5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMzKCk7CiAgICBpbml0X2Rpc3RfdHMxNygpOwogICAgaW5pdF9kaXN0X3RzKCk7CiAgICBpbXBvcnRfc3dlZXRfc2Nyb2xsMiA9IF9fdG9FU00ocmVxdWlyZV9zd2VldF9zY3JvbGwoKSwgMSk7CiAgICBpbml0X2Rpc3RfdHMxOSgpOwogICAgaW5pdF9kaXN0X3RzMTgoKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfZGlzdF90czExKCk7CiAgICBpbml0X2Rpc3RfdHMyMCgpOwogICAgaW5pdF9kaXN0X3RzMTUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjUgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjUsIHsKICBEb21Ub29sczogKCkgPT4gRG9tVG9vbHMsCiAgVHlwZWRSZXF1ZXN0OiAoKSA9PiBUeXBlZFJlcXVlc3QsCiAgYnJlYWtwb2ludHM6ICgpID0+IGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLAogIGNzczogKCkgPT4gZG9tdG9vbHNfY3NzX2V4cG9ydHMsCiAgZWxlbWVudEJhc2ljOiAoKSA9PiBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cywKICBwbHVnaW5zOiAoKSA9PiBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMKfSk7CnZhciBpbml0X2Rpc3RfdHMyNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZG9tdG9vbHNAMi4zLjcvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZG9tdG9vbHMvZGlzdF90cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2RvbXRvb2xzX2NvbG9ycygpOwogICAgaW5pdF9kb210b29sc19lbGVtZW50YmFzaWMoKTsKICAgIGluaXRfZG9tdG9vbHNfY3NzX2JyZWFrcG9pbnRzKCk7CiAgICBpbml0X2RvbXRvb2xzX2NzcygpOwogICAgaW5pdF9kb210b29sc19jbGFzc2VzX2RvbXRvb2xzKCk7CiAgICBpbml0X2Rpc3RfdHMxNSgpOwogICAgaW5pdF9kaXN0X3RzMjQoKTsKICAgIGluaXRfZG9tdG9vbHNfcGx1Z2luZXhwb3J0cygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzCnZhciBpc291bmlxdWUzLCBsaXQ7CnZhciBpbml0X3BsdWdpbnMzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9wbHVnaW5zLmpzIigpIHsKICAgIGlzb3VuaXF1ZTMgPSBfX3RvRVNNKHJlcXVpcmVfZGlzdF90cygpLCAxKTsKICAgIGluaXRfZGlzdF90czIoKTsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X3Byb3BlcnR5MigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGxpdCA9IHsKICAgICAgY3NzOiBpLAogICAgICB1bnNhZmVDU1M6IHIsCiAgICAgIExpdEVsZW1lbnQ6IGk0LAogICAgICBwcm9wZXJ0eTogbjUKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2NsYXNzZXMuY3NzbWFuYWdlci5qcwp2YXIgQ3NzTWFuYWdlcjsKdmFyIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmNzc21hbmFnZXIuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfcGx1Z2luczMoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBDc3NNYW5hZ2VyID0gY2xhc3MgX0Nzc01hbmFnZXIgewogICAgICAvLyBTVEFUSUMKICAgICAgc3RhdGljIGluc3RhbmNlID0gbnVsbDsKICAgICAgLyoqCiAgICAgICAqIFJldHVybnMgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBDc3NNYW5hZ2VyCiAgICAgICAqLwogICAgICBzdGF0aWMgZ2V0U2luZ2xldG9uKCkgewogICAgICAgIGlmICghX0Nzc01hbmFnZXIuaW5zdGFuY2UpIHsKICAgICAgICAgIF9Dc3NNYW5hZ2VyLmluc3RhbmNlID0gbmV3IF9Dc3NNYW5hZ2VyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfQ3NzTWFuYWdlci5pbnN0YW5jZTsKICAgICAgfQogICAgICAvLyBJTlNUQU5DRQogICAgICBkb210b29sc1Byb21pc2UgPSBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGdvQnJpZ2h0ID0gZmFsc2U7CiAgICAgIGJkVmFyVHJpcGxldFN0b3JlID0gW107CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oYXN5bmMgKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICBkb210b29sc0FyZy50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZShhc3luYyAoZ29CcmlnaHRBcmcpID0+IHsKICAgICAgICAgICAgdGhpcy5nb0JyaWdodCA9IGdvQnJpZ2h0QXJnOwogICAgICAgICAgICBhd2FpdCBkb210b29sc0FyZy5kb21SZWFkeS5wcm9taXNlOwogICAgICAgICAgICBmb3IgKGNvbnN0IGJkVHJpcGxldEFyZyBvZiB0aGlzLmJkVmFyVHJpcGxldFN0b3JlKSB7CiAgICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShiZFRyaXBsZXRBcmcuY3NzVmFyTmFtZSwgdGhpcy5nb0JyaWdodCA/IGJkVHJpcGxldEFyZy5icmlnaHRWYWx1ZSA6IGJkVHJpcGxldEFyZy5kYXJrVmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBnZXQgZGVmYXVsdFN0eWxlcygpIHsKICAgICAgICByZXR1cm4gZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc3RhdGljU3R5bGVzOwogICAgICB9CiAgICAgIGNzc0ZvckRlc2t0b3AoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvckRlc2t0b3AoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0Zvck5vdGVib29rKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JOb3RlYm9vayhjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgY3NzRm9yVGFibGV0KGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JUYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBoYWJsZXQoY29udGVudEFyZykgewogICAgICAgIHJldHVybiByKGRvbXRvb2xzX2Nzc19icmVha3BvaW50c19leHBvcnRzLmNzc0ZvclBoYWJsZXQoY29udGVudEFyZykpOwogICAgICB9CiAgICAgIGNzc0ZvclBob25lKGNvbnRlbnRBcmcpIHsKICAgICAgICByZXR1cm4gcihkb210b29sc19jc3NfYnJlYWtwb2ludHNfZXhwb3J0cy5jc3NGb3JQaG9uZShjb250ZW50QXJnKSk7CiAgICAgIH0KICAgICAgYmRUaGVtZShicmlnaHRWYWx1ZUFyZywgZGFya1ZhbHVlQXJnKSB7CiAgICAgICAgbGV0IHJldHVybkNzc1ZhcjsKICAgICAgICBsZXQgZGVmYXVsdFZhbHVlOwogICAgICAgIGlmIChEb21Ub29scy5nZXRHbG9iYWxEb21Ub29sc1N5bmMoKSkgewogICAgICAgICAgZGVmYXVsdFZhbHVlID0gRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCkudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbiA/IGJyaWdodFZhbHVlQXJnIDogZGFya1ZhbHVlQXJnOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBkZWZhdWx0VmFsdWUgPSBkYXJrVmFsdWVBcmc7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGV4aXN0aW5nVHJpcGxldCA9IHRoaXMuYmRWYXJUcmlwbGV0U3RvcmUuZmluZCgodHJpcGxldEFyZykgPT4gdHJpcGxldEFyZy5kYXJrVmFsdWUgPT09IGRhcmtWYWx1ZUFyZyAmJiB0cmlwbGV0QXJnLmJyaWdodFZhbHVlID09PSBicmlnaHRWYWx1ZUFyZyk7CiAgICAgICAgaWYgKGV4aXN0aW5nVHJpcGxldCkgewogICAgICAgICAgcmV0dXJuQ3NzVmFyID0gZXhpc3RpbmdUcmlwbGV0LmNzc1Zhck5hbWU7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld1RyaXBsZXQgPSB7CiAgICAgICAgICAgIGNzc1Zhck5hbWU6IGAtLSR7aXNvdW5pcXVlMy51bmkoKX1gLAogICAgICAgICAgICBicmlnaHRWYWx1ZTogYnJpZ2h0VmFsdWVBcmcsCiAgICAgICAgICAgIGRhcmtWYWx1ZTogZGFya1ZhbHVlQXJnCiAgICAgICAgICB9OwogICAgICAgICAgdGhpcy5iZFZhclRyaXBsZXRTdG9yZS5wdXNoKG5ld1RyaXBsZXQpOwogICAgICAgICAgdGhpcy5kb210b29sc1Byb21pc2UudGhlbihhc3luYyAoZG9tdG9vbHNBcmcpID0+IHsKICAgICAgICAgICAgYXdhaXQgZG9tdG9vbHNBcmcuZG9tUmVhZHkucHJvbWlzZTsKICAgICAgICAgICAgZG9jdW1lbnQuYm9keS5zdHlsZS5zZXRQcm9wZXJ0eShuZXdUcmlwbGV0LmNzc1Zhck5hbWUsIGRlZmF1bHRWYWx1ZSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybkNzc1ZhciA9IG5ld1RyaXBsZXQuY3NzVmFyTmFtZTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGxpdC51bnNhZmVDU1MoYHZhcigke3JldHVybkNzc1Zhcn0sICR7ZGVmYXVsdFZhbHVlfSlgKTsKICAgICAgfQogICAgICBjc3NHcmlkQ29sdW1ucyA9IChhbW91bnRPZkNvbHVtbnNBcmcsIGdhcFNpemVBcmcpID0+IHsKICAgICAgICBsZXQgcmV0dXJuU3RyaW5nID0gYGA7CiAgICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYW1vdW50T2ZDb2x1bW5zQXJnOyBpMTErKykgewogICAgICAgICAgcmV0dXJuU3RyaW5nICs9IGAgY2FsYygoMTAwJS8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pIC0gKCR7Z2FwU2l6ZUFyZyAqIChhbW91bnRPZkNvbHVtbnNBcmcgLSAxKX1weC8ke2Ftb3VudE9mQ29sdW1uc0FyZ30pKWA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBsaXQudW5zYWZlQ1NTKHJldHVyblN0cmluZyk7CiAgICAgIH07CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcwp2YXIgYTMsIG83LCBzNCwgaTUsIGwzLCBuNywgdTMsIGM0LCAkMjsKdmFyIGluaXRfc3RhdGljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL3N0YXRpYy5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBhMyA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2wuZm9yKCIiKSwgbzcgPSAodDkpID0+IHsKICAgICAgaWYgKHQ5Py5yID09PSBhMykgcmV0dXJuIHQ5Py5fJGxpdFN0YXRpYyQ7CiAgICB9LCBzNCA9ICh0OSkgPT4gKHsgXyRsaXRTdGF0aWMkOiB0OSwgcjogYTMgfSksIGk1ID0gKHQ5LCAuLi5yMTEpID0+ICh7IF8kbGl0U3RhdGljJDogcjExLnJlZHVjZSgocjEyLCBlMTEsIGE1KSA9PiByMTIgKyAoKHQxMCkgPT4gewogICAgICBpZiAodm9pZCAwICE9PSB0MTAuXyRsaXRTdGF0aWMkKSByZXR1cm4gdDEwLl8kbGl0U3RhdGljJDsKICAgICAgdGhyb3cgRXJyb3IoYFZhbHVlIHBhc3NlZCB0byAnbGl0ZXJhbCcgZnVuY3Rpb24gbXVzdCBiZSBhICdsaXRlcmFsJyByZXN1bHQ6ICR7dDEwfS4gVXNlICd1bnNhZmVTdGF0aWMnIHRvIHBhc3Mgbm9uLWxpdGVyYWwgdmFsdWVzLCBidXQKICAgICAgICAgICAgdGFrZSBjYXJlIHRvIGVuc3VyZSBwYWdlIHNlY3VyaXR5LmApOwogICAgfSkoZTExKSArIHQ5W2E1ICsgMV0sIHQ5WzBdKSwgcjogYTMgfSksIGwzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSwgbjcgPSAodDkpID0+IChyMTEsIC4uLmUxMSkgPT4gewogICAgICBjb25zdCBhNSA9IGUxMS5sZW5ndGg7CiAgICAgIGxldCBzOSwgaTExOwogICAgICBjb25zdCBuMTMgPSBbXSwgdTcgPSBbXTsKICAgICAgbGV0IGMxMSwgJDMgPSAwLCBmNyA9IGZhbHNlOwogICAgICBmb3IgKDsgJDMgPCBhNTsgKSB7CiAgICAgICAgZm9yIChjMTEgPSByMTFbJDNdOyAkMyA8IGE1ICYmIHZvaWQgMCAhPT0gKGkxMSA9IGUxMVskM10sIHM5ID0gbzcoaTExKSk7ICkgYzExICs9IHM5ICsgcjExWysrJDNdLCBmNyA9IHRydWU7CiAgICAgICAgJDMgIT09IGE1ICYmIHU3LnB1c2goaTExKSwgbjEzLnB1c2goYzExKSwgJDMrKzsKICAgICAgfQogICAgICBpZiAoJDMgPT09IGE1ICYmIG4xMy5wdXNoKHIxMVthNV0pLCBmNykgewogICAgICAgIGNvbnN0IHQxMCA9IG4xMy5qb2luKCIkJGxpdCQkIik7CiAgICAgICAgdm9pZCAwID09PSAocjExID0gbDMuZ2V0KHQxMCkpICYmIChuMTMucmF3ID0gbjEzLCBsMy5zZXQodDEwLCByMTEgPSBuMTMpKSwgZTExID0gdTc7CiAgICAgIH0KICAgICAgcmV0dXJuIHQ5KHIxMSwgLi4uZTExKTsKICAgIH0sIHUzID0gbjcoYjIpLCBjNCA9IG43KHcpLCAkMiA9IG43KFQpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvc3RhdGljLWh0bWwuanMKdmFyIGluaXRfc3RhdGljX2h0bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9zdGF0aWMtaHRtbC5qcyIoKSB7CiAgICBpbml0X3N0YXRpYygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcwp2YXIgdDMsIGU0LCBpNjsKdmFyIGluaXRfZGlyZWN0aXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS5qcyIoKSB7CiAgICB0MyA9IHsgQVRUUklCVVRFOiAxLCBDSElMRDogMiwgUFJPUEVSVFk6IDMsIEJPT0xFQU5fQVRUUklCVVRFOiA0LCBFVkVOVDogNSwgRUxFTUVOVDogNiB9LCBlNCA9ICh0OSkgPT4gKC4uLmUxMSkgPT4gKHsgXyRsaXREaXJlY3RpdmUkOiB0OSwgdmFsdWVzOiBlMTEgfSk7CiAgICBpNiA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IodDkpIHsKICAgICAgfQogICAgICBnZXQgXyRBVSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fJEFNLl8kQVU7CiAgICAgIH0KICAgICAgXyRBVCh0OSwgZTExLCBpMTEpIHsKICAgICAgICB0aGlzLl8kQ3QgPSB0OSwgdGhpcy5fJEFNID0gZTExLCB0aGlzLl8kQ2kgPSBpMTE7CiAgICAgIH0KICAgICAgXyRBUyh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudXBkYXRlKHQ5LCBlMTEpOwogICAgICB9CiAgICAgIHVwZGF0ZSh0OSwgZTExKSB7CiAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyKC4uLmUxMSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnNhZmUtaHRtbC5qcwp2YXIgZTUsIG84Owp2YXIgaW5pdF91bnNhZmVfaHRtbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBlNSA9IGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcihpMTEpIHsKICAgICAgICBpZiAoc3VwZXIoaTExKSwgdGhpcy5pdCA9IEEsIGkxMS50eXBlICE9PSB0My5DSElMRCkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbiBvbmx5IGJlIHVzZWQgaW4gY2hpbGQgYmluZGluZ3MiKTsKICAgICAgfQogICAgICByZW5kZXIocjExKSB7CiAgICAgICAgaWYgKHIxMSA9PT0gQSB8fCBudWxsID09IHIxMSkgcmV0dXJuIHRoaXMuX3QgPSB2b2lkIDAsIHRoaXMuaXQgPSByMTE7CiAgICAgICAgaWYgKHIxMSA9PT0gRSkgcmV0dXJuIHIxMTsKICAgICAgICBpZiAoInN0cmluZyIgIT0gdHlwZW9mIHIxMSkgdGhyb3cgRXJyb3IodGhpcy5jb25zdHJ1Y3Rvci5kaXJlY3RpdmVOYW1lICsgIigpIGNhbGxlZCB3aXRoIGEgbm9uLXN0cmluZyB2YWx1ZSIpOwogICAgICAgIGlmIChyMTEgPT09IHRoaXMuaXQpIHJldHVybiB0aGlzLl90OwogICAgICAgIHRoaXMuaXQgPSByMTE7CiAgICAgICAgY29uc3QgczkgPSBbcjExXTsKICAgICAgICByZXR1cm4gczkucmF3ID0gczksIHRoaXMuX3QgPSB7IF8kbGl0VHlwZSQ6IHRoaXMuY29uc3RydWN0b3IucmVzdWx0VHlwZSwgc3RyaW5nczogczksIHZhbHVlczogW10gfTsKICAgICAgfQogICAgfTsKICAgIGU1LmRpcmVjdGl2ZU5hbWUgPSAidW5zYWZlSFRNTCIsIGU1LnJlc3VsdFR5cGUgPSAxOwogICAgbzggPSBlNChlNSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3Vuc2FmZS1odG1sLmpzCnZhciBpbml0X3Vuc2FmZV9odG1sMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanMiKCkgewogICAgaW5pdF91bnNhZmVfaHRtbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcwp2YXIgdDQ7CnZhciBpbml0X2N1c3RvbV9lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcyIoKSB7CiAgICB0NCA9ICh0OSkgPT4gKGUxMSwgbzEzKSA9PiB7CiAgICAgIHZvaWQgMCAhPT0gbzEzID8gbzEzLmFkZEluaXRpYWxpemVyKCgpID0+IHsKICAgICAgICBjdXN0b21FbGVtZW50cy5kZWZpbmUodDksIGUxMSk7CiAgICAgIH0pIDogY3VzdG9tRWxlbWVudHMuZGVmaW5lKHQ5LCBlMTEpOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMvY3VzdG9tLWVsZW1lbnQuanMKdmFyIGluaXRfY3VzdG9tX2VsZW1lbnQyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGVjb3JhdG9ycy9jdXN0b20tZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X2N1c3RvbV9lbGVtZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3N0YXRlLmpzCmZ1bmN0aW9uIHI1KHIxMSkgewogIHJldHVybiBuNSh7IC4uLnIxMSwgc3RhdGU6IHRydWUsIGF0dHJpYnV0ZTogZmFsc2UgfSk7Cn0KdmFyIGluaXRfc3RhdGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qcyIoKSB7CiAgICBpbml0X3Byb3BlcnR5KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2V2ZW50LW9wdGlvbnMuanMKZnVuY3Rpb24gdDUodDkpIHsKICByZXR1cm4gKG4xMywgbzEzKSA9PiB7CiAgICBjb25zdCBjMTEgPSAiZnVuY3Rpb24iID09IHR5cGVvZiBuMTMgPyBuMTMgOiBuMTNbbzEzXTsKICAgIE9iamVjdC5hc3NpZ24oYzExLCB0OSk7CiAgfTsKfQp2YXIgaW5pdF9ldmVudF9vcHRpb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9ldmVudC1vcHRpb25zLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvYmFzZS5qcwp2YXIgZTY7CnZhciBpbml0X2Jhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2Jhc2UuanMiKCkgewogICAgZTYgPSAoZTExLCB0OSwgYzExKSA9PiAoYzExLmNvbmZpZ3VyYWJsZSA9IHRydWUsIGMxMS5lbnVtZXJhYmxlID0gdHJ1ZSwgUmVmbGVjdC5kZWNvcmF0ZSAmJiAib2JqZWN0IiAhPSB0eXBlb2YgdDkgJiYgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgdDksIGMxMSksIGMxMSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzCmZ1bmN0aW9uIGU3KGUxMSwgcjExKSB7CiAgcmV0dXJuIChuMTMsIHM5LCBpMTEpID0+IHsKICAgIGNvbnN0IG8xMyA9ICh0OSkgPT4gdDkucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihlMTEpID8/IG51bGw7CiAgICBpZiAocjExKSB7CiAgICAgIGNvbnN0IHsgZ2V0OiBlMTIsIHNldDogcjEyIH0gPSAib2JqZWN0IiA9PSB0eXBlb2YgczkgPyBuMTMgOiBpMTEgPz8gLyogQF9fUFVSRV9fICovICgoKSA9PiB7CiAgICAgICAgY29uc3QgdDkgPSAvKiBAX19QVVJFX18gKi8gU3ltYm9sKCk7CiAgICAgICAgcmV0dXJuIHsgZ2V0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXNbdDldOwogICAgICAgIH0sIHNldChlMTMpIHsKICAgICAgICAgIHRoaXNbdDldID0gZTEzOwogICAgICAgIH0gfTsKICAgICAgfSkoKTsKICAgICAgcmV0dXJuIGU2KG4xMywgczksIHsgZ2V0KCkgewogICAgICAgIGxldCB0OSA9IGUxMi5jYWxsKHRoaXMpOwogICAgICAgIHJldHVybiB2b2lkIDAgPT09IHQ5ICYmICh0OSA9IG8xMyh0aGlzKSwgKG51bGwgIT09IHQ5IHx8IHRoaXMuaGFzVXBkYXRlZCkgJiYgcjEyLmNhbGwodGhpcywgdDkpKSwgdDk7CiAgICAgIH0gfSk7CiAgICB9CiAgICByZXR1cm4gZTYobjEzLCBzOSwgeyBnZXQoKSB7CiAgICAgIHJldHVybiBvMTModGhpcyk7CiAgICB9IH0pOwogIH07Cn0KdmFyIGluaXRfcXVlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hbGwuanMKZnVuY3Rpb24gcjYocjExKSB7CiAgcmV0dXJuIChuMTMsIG8xMykgPT4gZTYobjEzLCBvMTMsIHsgZ2V0KCkgewogICAgcmV0dXJuICh0aGlzLnJlbmRlclJvb3QgPz8gKGU4ID8/PSBkb2N1bWVudC5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCkpKS5xdWVyeVNlbGVjdG9yQWxsKHIxMSk7CiAgfSB9KTsKfQp2YXIgZTg7CnZhciBpbml0X3F1ZXJ5X2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYWxsLmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qcwpmdW5jdGlvbiByNyhyMTEpIHsKICByZXR1cm4gKG4xMywgZTExKSA9PiBlNihuMTMsIGUxMSwgeyBhc3luYyBnZXQoKSB7CiAgICByZXR1cm4gYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZSwgdGhpcy5yZW5kZXJSb290Py5xdWVyeVNlbGVjdG9yKHIxMSkgPz8gbnVsbDsKICB9IH0pOwp9CnZhciBpbml0X3F1ZXJ5X2FzeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3luYy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BsaXQrcmVhY3RpdmUtZWxlbWVudEAyLjEuMi9ub2RlX21vZHVsZXMvQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXNzaWduZWQtZWxlbWVudHMuanMKZnVuY3Rpb24gbzkobzEzKSB7CiAgcmV0dXJuIChlMTEsIG4xMykgPT4gewogICAgY29uc3QgeyBzbG90OiByMTEsIHNlbGVjdG9yOiBzOSB9ID0gbzEzID8/IHt9LCBjMTEgPSAic2xvdCIgKyAocjExID8gYFtuYW1lPSR7cjExfV1gIDogIjpub3QoW25hbWVdKSIpOwogICAgcmV0dXJuIGU2KGUxMSwgbjEzLCB7IGdldCgpIHsKICAgICAgY29uc3QgdDkgPSB0aGlzLnJlbmRlclJvb3Q/LnF1ZXJ5U2VsZWN0b3IoYzExKSwgZTEyID0gdDk/LmFzc2lnbmVkRWxlbWVudHMobzEzKSA/PyBbXTsKICAgICAgcmV0dXJuIHZvaWQgMCA9PT0gczkgPyBlMTIgOiBlMTIuZmlsdGVyKCh0MTApID0+IHQxMC5tYXRjaGVzKHM5KSk7CiAgICB9IH0pOwogIH07Cn0KdmFyIGluaXRfcXVlcnlfYXNzaWduZWRfZWxlbWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AbGl0K3JlYWN0aXZlLWVsZW1lbnRAMi4xLjIvbm9kZV9tb2R1bGVzL0BsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLWVsZW1lbnRzLmpzIigpIHsKICAgIGluaXRfYmFzZSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qcwpmdW5jdGlvbiBuOChuMTMpIHsKICByZXR1cm4gKG8xMywgcjExKSA9PiB7CiAgICBjb25zdCB7IHNsb3Q6IGUxMSB9ID0gbjEzID8/IHt9LCBzOSA9ICJzbG90IiArIChlMTEgPyBgW25hbWU9JHtlMTF9XWAgOiAiOm5vdChbbmFtZV0pIik7CiAgICByZXR1cm4gZTYobzEzLCByMTEsIHsgZ2V0KCkgewogICAgICBjb25zdCB0OSA9IHRoaXMucmVuZGVyUm9vdD8ucXVlcnlTZWxlY3RvcihzOSk7CiAgICAgIHJldHVybiB0OT8uYXNzaWduZWROb2RlcyhuMTMpID8/IFtdOwogICAgfSB9KTsKICB9Owp9CnZhciBpbml0X3F1ZXJ5X2Fzc2lnbmVkX25vZGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGxpdCtyZWFjdGl2ZS1lbGVtZW50QDIuMS4yL25vZGVfbW9kdWxlcy9AbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1ub2Rlcy5qcyIoKSB7CiAgICBpbml0X2Jhc2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMuanMKdmFyIGluaXRfZGVjb3JhdG9ycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RlY29yYXRvcnMuanMiKCkgewogICAgaW5pdF9jdXN0b21fZWxlbWVudCgpOwogICAgaW5pdF9wcm9wZXJ0eSgpOwogICAgaW5pdF9zdGF0ZTIoKTsKICAgIGluaXRfZXZlbnRfb3B0aW9ucygpOwogICAgaW5pdF9xdWVyeSgpOwogICAgaW5pdF9xdWVyeV9hbGwoKTsKICAgIGluaXRfcXVlcnlfYXN5bmMoKTsKICAgIGluaXRfcXVlcnlfYXNzaWduZWRfZWxlbWVudHMoKTsKICAgIGluaXRfcXVlcnlfYXNzaWduZWRfbm9kZXMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvY2xhc3Nlcy5kZWVzLWVsZW1lbnQuanMKdmFyIF9fZXNEZWNvcmF0ZTIsIF9fcnVuSW5pdGlhbGl6ZXJzMywgRGVlc0VsZW1lbnQ7CnZhciBpbml0X2NsYXNzZXNfZGVlc19lbGVtZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9jbGFzc2VzLmRlZXMtZWxlbWVudC5qcyIoKSB7CiAgICBpbml0X3BsdWdpbnMzKCk7CiAgICBfX2VzRGVjb3JhdGUyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgICAgIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogICAgICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICAgICAgfQogICAgICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7CiAgICB9OwogICAgRGVlc0VsZW1lbnQgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzU3VwZXIgPSBsaXQuTGl0RWxlbWVudDsKICAgICAgbGV0IF9nb0JyaWdodF9kZWNvcmF0b3JzOwogICAgICBsZXQgX2dvQnJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2dvQnJpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfZG9tdG9vbHNfZGVjb3JhdG9yczsKICAgICAgbGV0IF9kb210b29sc19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9kb210b29sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICByZXR1cm4gY2xhc3MgRGVlc0VsZW1lbnQgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2dvQnJpZ2h0X2RlY29yYXRvcnMgPSBbbGl0LnByb3BlcnR5KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfZG9tdG9vbHNfZGVjb3JhdG9ycyA9IFtsaXQucHJvcGVydHkoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGUyKHRoaXMsIG51bGwsIF9nb0JyaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnb0JyaWdodCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZ29CcmlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ29CcmlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5nb0JyaWdodCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ29CcmlnaHRfaW5pdGlhbGl6ZXJzLCBfZ29CcmlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlMih0aGlzLCBudWxsLCBfZG9tdG9vbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZG9tdG9vbHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvbXRvb2xzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRvbXRvb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZG9tdG9vbHMgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RvbXRvb2xzX2luaXRpYWxpemVycywgX2RvbXRvb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczModGhpcywgX2dvQnJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgZ2V0IGdvQnJpZ2h0KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBnb0JyaWdodCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2dvQnJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIGRvbXRvb2xzCiAgICAgICAgZG9tdG9vbHNQcm9taXNlID0gX19ydW5Jbml0aWFsaXplcnMzKHRoaXMsIF9nb0JyaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgI2RvbXRvb2xzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczModGhpcywgX2RvbXRvb2xzX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgICAgICBnZXQgZG9tdG9vbHMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZG9tdG9vbHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGRvbXRvb2xzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZG9tdG9vbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgcnhTdWJzY3JpcHRpb25zID0gKF9fcnVuSW5pdGlhbGl6ZXJzMyh0aGlzLCBfZG9tdG9vbHNfZXh0cmFJbml0aWFsaXplcnMpLCBbXSk7CiAgICAgICAgdGhlbWVTdWJzY3JpcHRpb247CiAgICAgICAgZWxlbWVudERvbVJlYWR5RGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgICAgIGVsZW1lbnREb21SZWFkeSA9IHRoaXMuZWxlbWVudERvbVJlYWR5RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdHJ1Y3RvcihvcHRpb25zQXJnID0ge30pIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLmRvbXRvb2xzUHJvbWlzZSA9IGRpc3RfdHNfZXhwb3J0czI1LmVsZW1lbnRCYXNpYy5zZXR1cCh0aGlzLCBvcHRpb25zQXJnKTsKICAgICAgICAgIHRoaXMuZG9tdG9vbHNQcm9taXNlLnRoZW4oKGRvbXRvb2xzQXJnKSA9PiB7CiAgICAgICAgICAgIHRoaXMuZG9tdG9vbHMgPSBkb210b29sc0FyZzsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgICAgdGhpcy50aGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzLnRoZW1lTWFuYWdlci50aGVtZU9ic2VydmFibGUuc3Vic2NyaWJlKChnb0JyaWdodEFyZykgPT4gewogICAgICAgICAgICB0aGlzLmdvQnJpZ2h0ID0gZ29CcmlnaHRBcmc7CiAgICAgICAgICAgIGlmICh0aGlzLnRoZW1lQ2hhbmdlZCkgewogICAgICAgICAgICAgIHRoaXMudGhlbWVDaGFuZ2VkKGdvQnJpZ2h0QXJnKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgICB0aGlzLnJ4U3Vic2NyaXB0aW9ucy5wdXNoKHRoaXMudGhlbWVTdWJzY3JpcHRpb24pOwogICAgICAgICAgZm9yIChjb25zdCBzdGFydHVwRnVuY3Rpb24gb2YgdGhpcy5zdGFydHVwRnVuY3Rpb25zKSB7CiAgICAgICAgICAgIGF3YWl0IHN0YXJ0dXBGdW5jdGlvbigpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGVlc0VsZW1lbnRDb25uZWN0ZWQiKSk7CiAgICAgICAgfQogICAgICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICAgICAgdGhpcy5lbGVtZW50RG9tUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfQogICAgICAgIHN0YXJ0dXBGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlclN0YXJ0dXBGdW5jdGlvbihzdGFydHVwRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuc3RhcnR1cEZ1bmN0aW9ucy5wdXNoKHN0YXJ0dXBGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGdhcmJhZ2VGdW5jdGlvbnMgPSBbXTsKICAgICAgICByZWdpc3RlckdhcmJhZ2VGdW5jdGlvbihnYXJiYWdlRnVuY3Rpb25BcmcpIHsKICAgICAgICAgIHRoaXMuZ2FyYmFnZUZ1bmN0aW9ucy5wdXNoKGdhcmJhZ2VGdW5jdGlvbkFyZyk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgZm9yIChjb25zdCBzdWJzY3JpcHRpb24gb2YgdGhpcy5yeFN1YnNjcmlwdGlvbnMpIHsKICAgICAgICAgICAgc3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBmb3IgKGNvbnN0IGdhcmJhZ2VGdW5jdGlvbiBvZiB0aGlzLmdhcmJhZ2VGdW5jdGlvbnMpIHsKICAgICAgICAgICAgYXdhaXQgZ2FyYmFnZUZ1bmN0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJkZWVzRWxlbWVudERpc2Nvbm5lY3RlZCIpKTsKICAgICAgICB9CiAgICAgIH07CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzCnZhciB0NiwgaTcsIG45LCBlOSwgbDQsIGQ0LCBjNSwgZjQsIHI4LCBzNSwgdjMsIHU0LCBtMywgcDUsIE0yLCBoNCwgajI7CnZhciBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZS1oZWxwZXJzLmpzIigpIHsKICAgIGluaXRfbGl0X2h0bWwoKTsKICAgICh7IEk6IHQ2IH0gPSBqKSwgaTcgPSAobzEzKSA9PiBvMTMsIG45ID0gKG8xMykgPT4gbnVsbCA9PT0gbzEzIHx8ICJvYmplY3QiICE9IHR5cGVvZiBvMTMgJiYgImZ1bmN0aW9uIiAhPSB0eXBlb2YgbzEzLCBlOSA9IHsgSFRNTDogMSwgU1ZHOiAyLCBNQVRITUw6IDMgfSwgbDQgPSAobzEzLCB0OSkgPT4gdm9pZCAwID09PSB0OSA/IHZvaWQgMCAhPT0gbzEzPy5fJGxpdFR5cGUkIDogbzEzPy5fJGxpdFR5cGUkID09PSB0OSwgZDQgPSAobzEzKSA9PiBudWxsICE9IG8xMz8uXyRsaXRUeXBlJD8uaCwgYzUgPSAobzEzKSA9PiB2b2lkIDAgIT09IG8xMz8uXyRsaXREaXJlY3RpdmUkLCBmNCA9IChvMTMpID0+IG8xMz8uXyRsaXREaXJlY3RpdmUkLCByOCA9IChvMTMpID0+IHZvaWQgMCA9PT0gbzEzLnN0cmluZ3MsIHM1ID0gKCkgPT4gZG9jdW1lbnQuY3JlYXRlQ29tbWVudCgiIiksIHYzID0gKG8xMywgbjEzLCBlMTEpID0+IHsKICAgICAgY29uc3QgbDYgPSBvMTMuXyRBQS5wYXJlbnROb2RlLCBkNiA9IHZvaWQgMCA9PT0gbjEzID8gbzEzLl8kQUIgOiBuMTMuXyRBQTsKICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSB7CiAgICAgICAgY29uc3QgaTExID0gbDYuaW5zZXJ0QmVmb3JlKHM1KCksIGQ2KSwgbjE0ID0gbDYuaW5zZXJ0QmVmb3JlKHM1KCksIGQ2KTsKICAgICAgICBlMTEgPSBuZXcgdDYoaTExLCBuMTQsIG8xMywgbzEzLm9wdGlvbnMpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHQ5ID0gZTExLl8kQUIubmV4dFNpYmxpbmcsIG4xNCA9IGUxMS5fJEFNLCBjMTEgPSBuMTQgIT09IG8xMzsKICAgICAgICBpZiAoYzExKSB7CiAgICAgICAgICBsZXQgdDEwOwogICAgICAgICAgZTExLl8kQVE/LihvMTMpLCBlMTEuXyRBTSA9IG8xMywgdm9pZCAwICE9PSBlMTEuXyRBUCAmJiAodDEwID0gbzEzLl8kQVUpICE9PSBuMTQuXyRBVSAmJiBlMTEuXyRBUCh0MTApOwogICAgICAgIH0KICAgICAgICBpZiAodDkgIT09IGQ2IHx8IGMxMSkgewogICAgICAgICAgbGV0IG8xNCA9IGUxMS5fJEFBOwogICAgICAgICAgZm9yICg7IG8xNCAhPT0gdDk7ICkgewogICAgICAgICAgICBjb25zdCB0MTAgPSBpNyhvMTQpLm5leHRTaWJsaW5nOwogICAgICAgICAgICBpNyhsNikuaW5zZXJ0QmVmb3JlKG8xNCwgZDYpLCBvMTQgPSB0MTA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBlMTE7CiAgICB9LCB1NCA9IChvMTMsIHQ5LCBpMTEgPSBvMTMpID0+IChvMTMuXyRBSSh0OSwgaTExKSwgbzEzKSwgbTMgPSB7fSwgcDUgPSAobzEzLCB0OSA9IG0zKSA9PiBvMTMuXyRBSCA9IHQ5LCBNMiA9IChvMTMpID0+IG8xMy5fJEFILCBoNCA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKSwgbzEzLl8kQUEucmVtb3ZlKCk7CiAgICB9LCBqMiA9IChvMTMpID0+IHsKICAgICAgbzEzLl8kQVIoKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzCmZ1bmN0aW9uIGg1KGkxMSkgewogIHZvaWQgMCAhPT0gdGhpcy5fJEFOID8gKG8xMCh0aGlzKSwgdGhpcy5fJEFNID0gaTExLCByOSh0aGlzKSkgOiB0aGlzLl8kQU0gPSBpMTE7Cn0KZnVuY3Rpb24gbjEwKGkxMSwgdDkgPSBmYWxzZSwgZTExID0gMCkgewogIGNvbnN0IHIxMSA9IHRoaXMuXyRBSCwgaDkgPSB0aGlzLl8kQU47CiAgaWYgKHZvaWQgMCAhPT0gaDkgJiYgMCAhPT0gaDkuc2l6ZSkgaWYgKHQ5KSBpZiAoQXJyYXkuaXNBcnJheShyMTEpKSBmb3IgKGxldCBpMTIgPSBlMTE7IGkxMiA8IHIxMS5sZW5ndGg7IGkxMisrKSBzNihyMTFbaTEyXSwgZmFsc2UpLCBvMTAocjExW2kxMl0pOwogIGVsc2UgbnVsbCAhPSByMTEgJiYgKHM2KHIxMSwgZmFsc2UpLCBvMTAocjExKSk7CiAgZWxzZSBzNih0aGlzLCBpMTEpOwp9CnZhciBzNiwgbzEwLCByOSwgYzYsIGY1Owp2YXIgaW5pdF9hc3luY19kaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvYXN5bmMtZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgczYgPSAoaTExLCB0OSkgPT4gewogICAgICBjb25zdCBlMTEgPSBpMTEuXyRBTjsKICAgICAgaWYgKHZvaWQgMCA9PT0gZTExKSByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgaTEyIG9mIGUxMSkgaTEyLl8kQU8/Lih0OSwgZmFsc2UpLCBzNihpMTIsIHQ5KTsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9LCBvMTAgPSAoaTExKSA9PiB7CiAgICAgIGxldCB0OSwgZTExOwogICAgICBkbyB7CiAgICAgICAgaWYgKHZvaWQgMCA9PT0gKHQ5ID0gaTExLl8kQU0pKSBicmVhazsKICAgICAgICBlMTEgPSB0OS5fJEFOLCBlMTEuZGVsZXRlKGkxMSksIGkxMSA9IHQ5OwogICAgICB9IHdoaWxlICgwID09PSBlMTE/LnNpemUpOwogICAgfSwgcjkgPSAoaTExKSA9PiB7CiAgICAgIGZvciAobGV0IHQ5OyB0OSA9IGkxMS5fJEFNOyBpMTEgPSB0OSkgewogICAgICAgIGxldCBlMTEgPSB0OS5fJEFOOwogICAgICAgIGlmICh2b2lkIDAgPT09IGUxMSkgdDkuXyRBTiA9IGUxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgZWxzZSBpZiAoZTExLmhhcyhpMTEpKSBicmVhazsKICAgICAgICBlMTEuYWRkKGkxMSksIGM2KHQ5KTsKICAgICAgfQogICAgfTsKICAgIGM2ID0gKGkxMSkgPT4gewogICAgICBpMTEudHlwZSA9PSB0My5DSElMRCAmJiAoaTExLl8kQVAgPz89IG4xMCwgaTExLl8kQVEgPz89IGg1KTsKICAgIH07CiAgICBmNSA9IGNsYXNzIGV4dGVuZHMgaTYgewogICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICBzdXBlciguLi5hcmd1bWVudHMpLCB0aGlzLl8kQU4gPSB2b2lkIDA7CiAgICAgIH0KICAgICAgXyRBVChpMTEsIHQ5LCBlMTEpIHsKICAgICAgICBzdXBlci5fJEFUKGkxMSwgdDksIGUxMSksIHI5KHRoaXMpLCB0aGlzLmlzQ29ubmVjdGVkID0gaTExLl8kQVU7CiAgICAgIH0KICAgICAgXyRBTyhpMTEsIHQ5ID0gdHJ1ZSkgewogICAgICAgIGkxMSAhPT0gdGhpcy5pc0Nvbm5lY3RlZCAmJiAodGhpcy5pc0Nvbm5lY3RlZCA9IGkxMSwgaTExID8gdGhpcy5yZWNvbm5lY3RlZD8uKCkgOiB0aGlzLmRpc2Nvbm5lY3RlZD8uKCkpLCB0OSAmJiAoczYodGhpcywgaTExKSwgbzEwKHRoaXMpKTsKICAgICAgfQogICAgICBzZXRWYWx1ZSh0OSkgewogICAgICAgIGlmIChyOCh0aGlzLl8kQ3QpKSB0aGlzLl8kQ3QuXyRBSSh0OSwgdGhpcyk7CiAgICAgICAgZWxzZSB7CiAgICAgICAgICBjb25zdCBpMTEgPSBbLi4udGhpcy5fJEN0Ll8kQUhdOwogICAgICAgICAgaTExW3RoaXMuXyRDaV0gPSB0OSwgdGhpcy5fJEN0Ll8kQUkoaTExLCB0aGlzLCAwKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvYXN5bmMtZGlyZWN0aXZlLmpzCnZhciBpbml0X2FzeW5jX2RpcmVjdGl2ZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9hc3luYy1kaXJlY3RpdmUuanMiKCkgewogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnJlc29sdmVkaXJlY3RpdmUuanMKdmFyIFJlc29sdmVEaXJlY3RpdmUsIHJlc29sdmUsIHJlc29sdmVFeGVjOwp2YXIgaW5pdF9jbGFzc2VzX3Jlc29sdmVkaXJlY3RpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5yZXNvbHZlZGlyZWN0aXZlLmpzIigpIHsKICAgIGluaXRfbGl0KCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZTIoKTsKICAgIFJlc29sdmVEaXJlY3RpdmUgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgcHJvbWlzZTsKICAgICAgaGFzUHJvbWlzZVNldHRsZWQgPSBmYWxzZTsKICAgICAgcmVuZGVyKHByb21pc2UpIHsKICAgICAgICBpZiAodGhpcy5wcm9taXNlICE9PSBwcm9taXNlKSB7CiAgICAgICAgICB0aGlzLnByb21pc2UgPSBwcm9taXNlOwogICAgICAgICAgaWYgKHRoaXMuaXNDb25uZWN0ZWQpIHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVQcm9taXNlKHByb21pc2UpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBoYW5kbGVQcm9taXNlKHByb21pc2UpIHsKICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gZmFsc2U7CiAgICAgICAgcHJvbWlzZS50aGVuKCh2YWx1ZTIpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnByb21pc2UgPT09IHByb21pc2UgJiYgIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2YWx1ZTIpOwogICAgICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgIGlmICh0aGlzLnByb21pc2UgPT09IHByb21pc2UgJiYgIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgICAgdGhpcy5zZXRWYWx1ZShlcnJvcik7CiAgICAgICAgICAgIHRoaXMuaGFzUHJvbWlzZVNldHRsZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3RlZCgpIHsKICAgICAgICB0aGlzLmhhc1Byb21pc2VTZXR0bGVkID0gdHJ1ZTsKICAgICAgfQogICAgICByZWNvbm5lY3RlZCgpIHsKICAgICAgICBpZiAoIXRoaXMuaGFzUHJvbWlzZVNldHRsZWQpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlUHJvbWlzZSh0aGlzLnByb21pc2UpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIHJlc29sdmUgPSBlNChSZXNvbHZlRGlyZWN0aXZlKTsKICAgIHJlc29sdmVFeGVjID0gKGZ1bmNBcmcpID0+IHsKICAgICAgcmV0dXJuIHJlc29sdmUoZnVuY0FyZygpKTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmVkaXJlY3RpdmUuanMKdmFyIFN1YnNjcmliZURpcmVjdGl2ZSwgc3Vic2NyaWJlOwp2YXIgaW5pdF9jbGFzc2VzX3N1YnNjcmliZWRpcmVjdGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9jbGFzc2VzLnN1YnNjcmliZWRpcmVjdGl2ZS5qcyIoKSB7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUyKCk7CiAgICBpbml0X2Rpc3RfdHMyKCk7CiAgICBTdWJzY3JpYmVEaXJlY3RpdmUgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgb2JzZXJ2YWJsZTsKICAgICAgc3ViID0gbnVsbDsKICAgICAgcmVuZGVyKG9ic2VydmFibGUyKSB7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2YWJsZSAhPT0gb2JzZXJ2YWJsZTIpIHsKICAgICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICAgICAgdGhpcy5vYnNlcnZhYmxlID0gb2JzZXJ2YWJsZTI7CiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICAgICAgICB0aGlzLnN1YnNjcmliZShvYnNlcnZhYmxlMik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBFOwogICAgICB9CiAgICAgIHN1YnNjcmliZShvYnNlcnZhYmxlMikgewogICAgICAgIHRoaXMuc3ViID0gb2JzZXJ2YWJsZTIuc3Vic2NyaWJlKCh2NSkgPT4gewogICAgICAgICAgdGhpcy5zZXRWYWx1ZSh2NSk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3Vic2NyaWJlKHRoaXMub2JzZXJ2YWJsZSk7CiAgICAgIH0KICAgIH07CiAgICBzdWJzY3JpYmUgPSBlNChTdWJzY3JpYmVEaXJlY3RpdmUpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2NsYXNzZXMuc3Vic2NyaWJld2l0aHRlbXBsYXRlLmpzCnZhciBTdWJzY3JpYmVXaXRoVGVtcGxhdGVEaXJlY3RpdmUsIHN1YnNjcmliZVdpdGhUZW1wbGF0ZTsKdmFyIGluaXRfY2xhc3Nlc19zdWJzY3JpYmV3aXRodGVtcGxhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2RpcmVjdGl2ZXMvY2xhc3Nlcy5zdWJzY3JpYmV3aXRodGVtcGxhdGUuanMiKCkgewogICAgaW5pdF9saXQoKTsKICAgIGluaXRfYXN5bmNfZGlyZWN0aXZlMigpOwogICAgaW5pdF9kaXN0X3RzMigpOwogICAgU3Vic2NyaWJlV2l0aFRlbXBsYXRlRGlyZWN0aXZlID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIG9ic2VydmFibGU7CiAgICAgIHRlbXBsYXRlRm47CiAgICAgIHN1YiA9IG51bGw7CiAgICAgIHJlbmRlcihvYnNlcnZhYmxlMiwgdGVtcGxhdGVGbikgewogICAgICAgIGNvbnN0IGNoYW5nZWQgPSB0aGlzLm9ic2VydmFibGUgIT09IG9ic2VydmFibGUyIHx8IHRoaXMudGVtcGxhdGVGbiAhPT0gdGVtcGxhdGVGbjsKICAgICAgICBpZiAoY2hhbmdlZCkgewogICAgICAgICAgdGhpcy5zdWI/LnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICB0aGlzLm9ic2VydmFibGUgPSBvYnNlcnZhYmxlMjsKICAgICAgICAgIHRoaXMudGVtcGxhdGVGbiA9IHRlbXBsYXRlRm47CiAgICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCkgewogICAgICAgICAgICB0aGlzLnN0YXJ0U3Vic2NyaXB0aW9uKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBFOwogICAgICB9CiAgICAgIHN0YXJ0U3Vic2NyaXB0aW9uKCkgewogICAgICAgIHRoaXMuc3ViID0gdGhpcy5vYnNlcnZhYmxlLnN1YnNjcmliZSgodjUpID0+IHsKICAgICAgICAgIGNvbnN0IG91dCA9IHRoaXMudGVtcGxhdGVGbih2NSk7CiAgICAgICAgICB0aGlzLnNldFZhbHVlKG91dCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgZGlzY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3ViPy51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIHJlY29ubmVjdGVkKCkgewogICAgICAgIHRoaXMuc3RhcnRTdWJzY3JpcHRpb24oKTsKICAgICAgfQogICAgfTsKICAgIHN1YnNjcmliZVdpdGhUZW1wbGF0ZSA9IGU0KFN1YnNjcmliZVdpdGhUZW1wbGF0ZURpcmVjdGl2ZSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanMKdmFyIHQ3LCBzNywgaTg7CnZhciBpbml0X3ByaXZhdGVfYXN5bmNfaGVscGVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL3ByaXZhdGUtYXN5bmMtaGVscGVycy5qcyIoKSB7CiAgICB0NyA9IGFzeW5jICh0OSwgczkpID0+IHsKICAgICAgZm9yIGF3YWl0IChjb25zdCBpMTEgb2YgdDkpIGlmIChmYWxzZSA9PT0gYXdhaXQgczkoaTExKSkgcmV0dXJuOwogICAgfTsKICAgIHM3ID0gY2xhc3MgewogICAgICBjb25zdHJ1Y3Rvcih0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRpc2Nvbm5lY3QoKSB7CiAgICAgICAgdGhpcy5HID0gdm9pZCAwOwogICAgICB9CiAgICAgIHJlY29ubmVjdCh0OSkgewogICAgICAgIHRoaXMuRyA9IHQ5OwogICAgICB9CiAgICAgIGRlcmVmKCkgewogICAgICAgIHJldHVybiB0aGlzLkc7CiAgICAgIH0KICAgIH07CiAgICBpOCA9IGNsYXNzIHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgdGhpcy5ZID0gdm9pZCAwLCB0aGlzLlogPSB2b2lkIDA7CiAgICAgIH0KICAgICAgZ2V0KCkgewogICAgICAgIHJldHVybiB0aGlzLlk7CiAgICAgIH0KICAgICAgcGF1c2UoKSB7CiAgICAgICAgdGhpcy5ZID8/PSBuZXcgUHJvbWlzZSgodDkpID0+IHRoaXMuWiA9IHQ5KTsKICAgICAgfQogICAgICByZXN1bWUoKSB7CiAgICAgICAgdGhpcy5aPy4oKSwgdGhpcy5ZID0gdGhpcy5aID0gdm9pZCAwOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanMKdmFyIG4xMSwgaDYsIGM3LCBtNDsKdmFyIGluaXRfdW50aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy91bnRpbC5qcyIoKSB7CiAgICBpbml0X2xpdF9odG1sKCk7CiAgICBpbml0X2RpcmVjdGl2ZV9oZWxwZXJzKCk7CiAgICBpbml0X2FzeW5jX2RpcmVjdGl2ZSgpOwogICAgaW5pdF9wcml2YXRlX2FzeW5jX2hlbHBlcnMoKTsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBuMTEgPSAodDkpID0+ICFuOSh0OSkgJiYgImZ1bmN0aW9uIiA9PSB0eXBlb2YgdDkudGhlbiwgaDYgPSAxMDczNzQxODIzOwogICAgYzcgPSBjbGFzcyBleHRlbmRzIGY1IHsKICAgICAgY29uc3RydWN0b3IoKSB7CiAgICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKSwgdGhpcy5fJEN3dCA9IGg2LCB0aGlzLl8kQ2J0ID0gW10sIHRoaXMuXyRDSyA9IG5ldyBzNyh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKC4uLnM5KSB7CiAgICAgICAgcmV0dXJuIHM5LmZpbmQoKHQ5KSA9PiAhbjExKHQ5KSkgPz8gRTsKICAgICAgfQogICAgICB1cGRhdGUoczksIGkxMSkgewogICAgICAgIGNvbnN0IGUxMSA9IHRoaXMuXyRDYnQ7CiAgICAgICAgbGV0IHIxMSA9IGUxMS5sZW5ndGg7CiAgICAgICAgdGhpcy5fJENidCA9IGkxMTsKICAgICAgICBjb25zdCBvMTMgPSB0aGlzLl8kQ0ssIGMxMSA9IHRoaXMuXyRDWDsKICAgICAgICB0aGlzLmlzQ29ubmVjdGVkIHx8IHRoaXMuZGlzY29ubmVjdGVkKCk7CiAgICAgICAgZm9yIChsZXQgdDkgPSAwOyB0OSA8IGkxMS5sZW5ndGggJiYgISh0OSA+IHRoaXMuXyRDd3QpOyB0OSsrKSB7CiAgICAgICAgICBjb25zdCBzMTAgPSBpMTFbdDldOwogICAgICAgICAgaWYgKCFuMTEoczEwKSkgcmV0dXJuIHRoaXMuXyRDd3QgPSB0OSwgczEwOwogICAgICAgICAgdDkgPCByMTEgJiYgczEwID09PSBlMTFbdDldIHx8ICh0aGlzLl8kQ3d0ID0gaDYsIHIxMSA9IDAsIFByb21pc2UucmVzb2x2ZShzMTApLnRoZW4oYXN5bmMgKHQxMCkgPT4gewogICAgICAgICAgICBmb3IgKDsgYzExLmdldCgpOyApIGF3YWl0IGMxMS5nZXQoKTsKICAgICAgICAgICAgY29uc3QgaTEyID0gbzEzLmRlcmVmKCk7CiAgICAgICAgICAgIGlmICh2b2lkIDAgIT09IGkxMikgewogICAgICAgICAgICAgIGNvbnN0IGUxMiA9IGkxMi5fJENidC5pbmRleE9mKHMxMCk7CiAgICAgICAgICAgICAgZTEyID4gLTEgJiYgZTEyIDwgaTEyLl8kQ3d0ICYmIChpMTIuXyRDd3QgPSBlMTIsIGkxMi5zZXRWYWx1ZSh0MTApKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSkpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgbTQgPSBlNChjNyk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL3VudGlsLmpzCnZhciBpbml0X3VudGlsMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvdW50aWwuanMiKCkgewogICAgaW5pdF91bnRpbCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS5qcwp2YXIgbzExLCBoNzsKdmFyIGluaXRfYXN5bmNfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdC1odG1sQDMuMy4yL25vZGVfbW9kdWxlcy9saXQtaHRtbC9kaXJlY3RpdmVzL2FzeW5jLXJlcGxhY2UuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9hc3luY19kaXJlY3RpdmUoKTsKICAgIGluaXRfcHJpdmF0ZV9hc3luY19oZWxwZXJzKCk7CiAgICBpbml0X2RpcmVjdGl2ZSgpOwogICAgbzExID0gY2xhc3MgZXh0ZW5kcyBmNSB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMuXyRDSyA9IG5ldyBzNyh0aGlzKSwgdGhpcy5fJENYID0gbmV3IGk4KCk7CiAgICAgIH0KICAgICAgcmVuZGVyKGkxMSwgczkpIHsKICAgICAgICByZXR1cm4gRTsKICAgICAgfQogICAgICB1cGRhdGUoaTExLCBbczksIHIxMV0pIHsKICAgICAgICBpZiAodGhpcy5pc0Nvbm5lY3RlZCB8fCB0aGlzLmRpc2Nvbm5lY3RlZCgpLCBzOSA9PT0gdGhpcy5fJENKKSByZXR1cm4gRTsKICAgICAgICB0aGlzLl8kQ0ogPSBzOTsKICAgICAgICBsZXQgbjEzID0gMDsKICAgICAgICBjb25zdCB7IF8kQ0s6IG8xMywgXyRDWDogaDkgfSA9IHRoaXM7CiAgICAgICAgcmV0dXJuIHQ3KHM5LCBhc3luYyAodDkpID0+IHsKICAgICAgICAgIGZvciAoOyBoOS5nZXQoKTsgKSBhd2FpdCBoOS5nZXQoKTsKICAgICAgICAgIGNvbnN0IGkxMiA9IG8xMy5kZXJlZigpOwogICAgICAgICAgaWYgKHZvaWQgMCAhPT0gaTEyKSB7CiAgICAgICAgICAgIGlmIChpMTIuXyRDSiAhPT0gczkpIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgdm9pZCAwICE9PSByMTEgJiYgKHQ5ID0gcjExKHQ5LCBuMTMpKSwgaTEyLmNvbW1pdFZhbHVlKHQ5LCBuMTMpLCBuMTMrKzsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pLCBFOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHQ5LCBpMTEpIHsKICAgICAgICB0aGlzLnNldFZhbHVlKHQ5KTsKICAgICAgfQogICAgICBkaXNjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLmRpc2Nvbm5lY3QoKSwgdGhpcy5fJENYLnBhdXNlKCk7CiAgICAgIH0KICAgICAgcmVjb25uZWN0ZWQoKSB7CiAgICAgICAgdGhpcy5fJENLLnJlY29ubmVjdCh0aGlzKSwgdGhpcy5fJENYLnJlc3VtZSgpOwogICAgICB9CiAgICB9OwogICAgaDcgPSBlNChvMTEpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzCnZhciBjODsKdmFyIGluaXRfYXN5bmNfYXBwZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzIigpIHsKICAgIGluaXRfZGlyZWN0aXZlKCk7CiAgICBpbml0X2FzeW5jX3JlcGxhY2UoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGM4ID0gZTQoY2xhc3MgZXh0ZW5kcyBvMTEgewogICAgICBjb25zdHJ1Y3RvcihyMTEpIHsKICAgICAgICBpZiAoc3VwZXIocjExKSwgcjExLnR5cGUgIT09IHQzLkNISUxEKSB0aHJvdyBFcnJvcigiYXN5bmNBcHBlbmQgY2FuIG9ubHkgYmUgdXNlZCBpbiBjaGlsZCBleHByZXNzaW9ucyIpOwogICAgICB9CiAgICAgIHVwZGF0ZShyMTEsIGUxMSkgewogICAgICAgIHJldHVybiB0aGlzLl8kQ3R0ID0gcjExLCBzdXBlci51cGRhdGUocjExLCBlMTEpOwogICAgICB9CiAgICAgIGNvbW1pdFZhbHVlKHIxMSwgZTExKSB7CiAgICAgICAgMCA9PT0gZTExICYmIGoyKHRoaXMuXyRDdHQpOwogICAgICAgIGNvbnN0IHM5ID0gdjModGhpcy5fJEN0dCk7CiAgICAgICAgdTQoczksIHIxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanMKdmFyIGluaXRfYXN5bmNfYXBwZW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvYXN5bmMtYXBwZW5kLmpzIigpIHsKICAgIGluaXRfYXN5bmNfYXBwZW5kKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9rZXllZC5qcwp2YXIgaTk7CnZhciBpbml0X2tleWVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIGk5ID0gZTQoY2xhc3MgZXh0ZW5kcyBpNiB7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyksIHRoaXMua2V5ID0gQTsKICAgICAgfQogICAgICByZW5kZXIocjExLCB0OSkgewogICAgICAgIHJldHVybiB0aGlzLmtleSA9IHIxMSwgdDk7CiAgICAgIH0KICAgICAgdXBkYXRlKHIxMSwgW3Q5LCBlMTFdKSB7CiAgICAgICAgcmV0dXJuIHQ5ICE9PSB0aGlzLmtleSAmJiAocDUocjExKSwgdGhpcy5rZXkgPSB0OSksIGUxMTsKICAgICAgfQogICAgfSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9saXRAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC9kaXJlY3RpdmVzL2tleWVkLmpzCnZhciBpbml0X2tleWVkMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMva2V5ZWQuanMiKCkgewogICAgaW5pdF9rZXllZCgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0LWh0bWxAMy4zLjIvbm9kZV9tb2R1bGVzL2xpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzCnZhciB1NSwgYzk7CnZhciBpbml0X3JlcGVhdDIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9saXQtaHRtbEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0LWh0bWwvZGlyZWN0aXZlcy9yZXBlYXQuanMiKCkgewogICAgaW5pdF9saXRfaHRtbCgpOwogICAgaW5pdF9kaXJlY3RpdmUoKTsKICAgIGluaXRfZGlyZWN0aXZlX2hlbHBlcnMoKTsKICAgIHU1ID0gKGUxMSwgczksIHQ5KSA9PiB7CiAgICAgIGNvbnN0IHIxMSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIGZvciAobGV0IGw2ID0gczk7IGw2IDw9IHQ5OyBsNisrKSByMTEuc2V0KGUxMVtsNl0sIGw2KTsKICAgICAgcmV0dXJuIHIxMTsKICAgIH0sIGM5ID0gZTQoY2xhc3MgZXh0ZW5kcyBpNiB7CiAgICAgIGNvbnN0cnVjdG9yKGUxMSkgewogICAgICAgIGlmIChzdXBlcihlMTEpLCBlMTEudHlwZSAhPT0gdDMuQ0hJTEQpIHRocm93IEVycm9yKCJyZXBlYXQoKSBjYW4gb25seSBiZSB1c2VkIGluIHRleHQgZXhwcmVzc2lvbnMiKTsKICAgICAgfQogICAgICBkdChlMTEsIHM5LCB0OSkgewogICAgICAgIGxldCByMTE7CiAgICAgICAgdm9pZCAwID09PSB0OSA/IHQ5ID0gczkgOiB2b2lkIDAgIT09IHM5ICYmIChyMTEgPSBzOSk7CiAgICAgICAgY29uc3QgbDYgPSBbXSwgbzEzID0gW107CiAgICAgICAgbGV0IGkxMSA9IDA7CiAgICAgICAgZm9yIChjb25zdCBzMTAgb2YgZTExKSBsNltpMTFdID0gcjExID8gcjExKHMxMCwgaTExKSA6IGkxMSwgbzEzW2kxMV0gPSB0OShzMTAsIGkxMSksIGkxMSsrOwogICAgICAgIHJldHVybiB7IHZhbHVlczogbzEzLCBrZXlzOiBsNiB9OwogICAgICB9CiAgICAgIHJlbmRlcihlMTEsIHM5LCB0OSkgewogICAgICAgIHJldHVybiB0aGlzLmR0KGUxMSwgczksIHQ5KS52YWx1ZXM7CiAgICAgIH0KICAgICAgdXBkYXRlKHM5LCBbdDksIHIxMSwgYzExXSkgewogICAgICAgIGNvbnN0IGQ2ID0gTTIoczkpLCB7IHZhbHVlczogcDcsIGtleXM6IGE1IH0gPSB0aGlzLmR0KHQ5LCByMTEsIGMxMSk7CiAgICAgICAgaWYgKCFBcnJheS5pc0FycmF5KGQ2KSkgcmV0dXJuIHRoaXMudXQgPSBhNSwgcDc7CiAgICAgICAgY29uc3QgaDkgPSB0aGlzLnV0ID8/PSBbXSwgdjUgPSBbXTsKICAgICAgICBsZXQgbTYsIHk1LCB4MyA9IDAsIGo0ID0gZDYubGVuZ3RoIC0gMSwgazQgPSAwLCB3MyA9IHA3Lmxlbmd0aCAtIDE7CiAgICAgICAgZm9yICg7IHgzIDw9IGo0ICYmIGs0IDw9IHczOyApIGlmIChudWxsID09PSBkNlt4M10pIHgzKys7CiAgICAgICAgZWxzZSBpZiAobnVsbCA9PT0gZDZbajRdKSBqNC0tOwogICAgICAgIGVsc2UgaWYgKGg5W3gzXSA9PT0gYTVbazRdKSB2NVtrNF0gPSB1NChkNlt4M10sIHA3W2s0XSksIHgzKyssIGs0Kys7CiAgICAgICAgZWxzZSBpZiAoaDlbajRdID09PSBhNVt3M10pIHY1W3czXSA9IHU0KGQ2W2o0XSwgcDdbdzNdKSwgajQtLSwgdzMtLTsKICAgICAgICBlbHNlIGlmIChoOVt4M10gPT09IGE1W3czXSkgdjVbdzNdID0gdTQoZDZbeDNdLCBwN1t3M10pLCB2MyhzOSwgdjVbdzMgKyAxXSwgZDZbeDNdKSwgeDMrKywgdzMtLTsKICAgICAgICBlbHNlIGlmIChoOVtqNF0gPT09IGE1W2s0XSkgdjVbazRdID0gdTQoZDZbajRdLCBwN1trNF0pLCB2MyhzOSwgZDZbeDNdLCBkNltqNF0pLCBqNC0tLCBrNCsrOwogICAgICAgIGVsc2UgaWYgKHZvaWQgMCA9PT0gbTYgJiYgKG02ID0gdTUoYTUsIGs0LCB3MyksIHk1ID0gdTUoaDksIHgzLCBqNCkpLCBtNi5oYXMoaDlbeDNdKSkgaWYgKG02LmhhcyhoOVtqNF0pKSB7CiAgICAgICAgICBjb25zdCBlMTEgPSB5NS5nZXQoYTVbazRdKSwgdDEwID0gdm9pZCAwICE9PSBlMTEgPyBkNltlMTFdIDogbnVsbDsKICAgICAgICAgIGlmIChudWxsID09PSB0MTApIHsKICAgICAgICAgICAgY29uc3QgZTEyID0gdjMoczksIGQ2W3gzXSk7CiAgICAgICAgICAgIHU0KGUxMiwgcDdbazRdKSwgdjVbazRdID0gZTEyOwogICAgICAgICAgfSBlbHNlIHY1W2s0XSA9IHU0KHQxMCwgcDdbazRdKSwgdjMoczksIGQ2W3gzXSwgdDEwKSwgZDZbZTExXSA9IG51bGw7CiAgICAgICAgICBrNCsrOwogICAgICAgIH0gZWxzZSBoNChkNltqNF0pLCBqNC0tOwogICAgICAgIGVsc2UgaDQoZDZbeDNdKSwgeDMrKzsKICAgICAgICBmb3IgKDsgazQgPD0gdzM7ICkgewogICAgICAgICAgY29uc3QgZTExID0gdjMoczksIHY1W3czICsgMV0pOwogICAgICAgICAgdTQoZTExLCBwN1trNF0pLCB2NVtrNCsrXSA9IGUxMTsKICAgICAgICB9CiAgICAgICAgZm9yICg7IHgzIDw9IGo0OyApIHsKICAgICAgICAgIGNvbnN0IGUxMSA9IGQ2W3gzKytdOwogICAgICAgICAgbnVsbCAhPT0gZTExICYmIGg0KGUxMSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiB0aGlzLnV0ID0gYTUsIHA1KHM5LCB2NSksIEU7CiAgICAgIH0KICAgIH0pOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbGl0QDMuMy4yL25vZGVfbW9kdWxlcy9saXQvZGlyZWN0aXZlcy9yZXBlYXQuanMKdmFyIGluaXRfcmVwZWF0MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2xpdEAzLjMuMi9ub2RlX21vZHVsZXMvbGl0L2RpcmVjdGl2ZXMvcmVwZWF0LmpzIigpIHsKICAgIGluaXRfcmVwZWF0MigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9kaXJlY3RpdmVzL2luZGV4LmpzCnZhciBkaXJlY3RpdmVzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoZGlyZWN0aXZlc19leHBvcnRzLCB7CiAgYXN5bmNBcHBlbmQ6ICgpID0+IGM4LAogIGtleWVkOiAoKSA9PiBpOSwKICByZXBlYXQ6ICgpID0+IGM5LAogIHJlc29sdmU6ICgpID0+IHJlc29sdmUsCiAgcmVzb2x2ZUV4ZWM6ICgpID0+IHJlc29sdmVFeGVjLAogIHN1YnNjcmliZTogKCkgPT4gc3Vic2NyaWJlLAogIHN1YnNjcmliZVdpdGhUZW1wbGF0ZTogKCkgPT4gc3Vic2NyaWJlV2l0aFRlbXBsYXRlLAogIHVudGlsOiAoKSA9PiBtNAp9KTsKdmFyIGluaXRfZGlyZWN0aXZlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtZWxlbWVudEAyLjEuNS9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50L2Rpc3RfdHMvZGlyZWN0aXZlcy9pbmRleC5qcyIoKSB7CiAgICBpbml0X2NsYXNzZXNfcmVzb2x2ZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZWRpcmVjdGl2ZSgpOwogICAgaW5pdF9jbGFzc2VzX3N1YnNjcmliZXdpdGh0ZW1wbGF0ZSgpOwogICAgaW5pdF91bnRpbDIoKTsKICAgIGluaXRfYXN5bmNfYXBwZW5kMigpOwogICAgaW5pdF9rZXllZDIoKTsKICAgIGluaXRfcmVwZWF0MygpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1lbGVtZW50QDIuMS41L25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWVsZW1lbnQvZGlzdF90cy9pbmRleC5qcwp2YXIgZGlzdF90c19leHBvcnRzMjYgPSB7fTsKX19leHBvcnQoZGlzdF90c19leHBvcnRzMjYsIHsKICBEZWVzRWxlbWVudDogKCkgPT4gRGVlc0VsZW1lbnQsCiAgY3NzOiAoKSA9PiBpLAogIGNzc01hbmFnZXI6ICgpID0+IGNzc01hbmFnZXIsCiAgY3VzdG9tRWxlbWVudDogKCkgPT4gdDQsCiAgZGlyZWN0aXZlczogKCkgPT4gZGlyZWN0aXZlc19leHBvcnRzLAogIGRvbXRvb2xzOiAoKSA9PiBkaXN0X3RzX2V4cG9ydHMyNSwKICBodG1sOiAoKSA9PiBiMiwKICBwcm9wZXJ0eTogKCkgPT4gbjUsCiAgcXVlcnk6ICgpID0+IGU3LAogIHF1ZXJ5QWxsOiAoKSA9PiByNiwKICBxdWVyeUFzeW5jOiAoKSA9PiByNywKICByZW5kZXI6ICgpID0+IEQsCiAgc3RhdGU6ICgpID0+IHI1LAogIHN0YXRpYzogKCkgPT4gdTMsCiAgdW5zYWZlQ1NTOiAoKSA9PiByLAogIHVuc2FmZUhUTUw6ICgpID0+IG84LAogIHVuc2FmZVN0YXRpYzogKCkgPT4gczQKfSk7CnZhciBjc3NNYW5hZ2VyOwp2YXIgaW5pdF9kaXN0X3RzMjYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWVsZW1lbnRAMi4xLjUvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudC9kaXN0X3RzL2luZGV4LmpzIigpIHsKICAgIGluaXRfY2xhc3Nlc19jc3NtYW5hZ2VyKCk7CiAgICBpbml0X2xpdCgpOwogICAgaW5pdF9zdGF0aWNfaHRtbCgpOwogICAgaW5pdF91bnNhZmVfaHRtbDIoKTsKICAgIGluaXRfY3VzdG9tX2VsZW1lbnQyKCk7CiAgICBpbml0X2RlY29yYXRvcnMoKTsKICAgIGluaXRfZGlzdF90czI1KCk7CiAgICBpbml0X2NsYXNzZXNfZGVlc19lbGVtZW50KCk7CiAgICBpbml0X2RpcmVjdGl2ZXMoKTsKICAgIGNzc01hbmFnZXIgPSBDc3NNYW5hZ2VyLmdldFNpbmdsZXRvbigpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwdGhlbWUuanMKdmFyIHRoZW1lRGVmYXVsdHMsIHRoZW1lRGVmYXVsdFN0eWxlczsKdmFyIGluaXRfdGhlbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDB0aGVtZS5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgdGhlbWVEZWZhdWx0cyA9IHsKICAgICAgY29sb3JzOiB7CiAgICAgICAgbGlnaHQ6IHsKICAgICAgICAgIGJnUHJpbWFyeTogIiNmZmZmZmYiLAogICAgICAgICAgYmdTZWNvbmRhcnk6ICIjZmFmYWZhIiwKICAgICAgICAgIGJnVGVydGlhcnk6ICIjZjRmNGY1IiwKICAgICAgICAgIHRleHRQcmltYXJ5OiAiIzA5MDkwYiIsCiAgICAgICAgICB0ZXh0U2Vjb25kYXJ5OiAiIzM3NDE1MSIsCiAgICAgICAgICB0ZXh0TXV0ZWQ6ICIjNzE3MTdhIiwKICAgICAgICAgIGJvcmRlckRlZmF1bHQ6ICIjZTVlN2ViIiwKICAgICAgICAgIGJvcmRlclN1YnRsZTogIiNmNGY0ZjUiLAogICAgICAgICAgYm9yZGVyU3Ryb25nOiAiI2QxZDVkYiIsCiAgICAgICAgICBhY2NlbnRQcmltYXJ5OiAiIzNiODJmNiIsCiAgICAgICAgICBhY2NlbnRTdWNjZXNzOiAiIzIyYzU1ZSIsCiAgICAgICAgICBhY2NlbnRXYXJuaW5nOiAiI2Y1OWUwYiIsCiAgICAgICAgICBhY2NlbnRFcnJvcjogIiNlZjQ0NDQiCiAgICAgICAgfSwKICAgICAgICBkYXJrOiB7CiAgICAgICAgICBiZ1ByaW1hcnk6ICIjMDkwOTBiIiwKICAgICAgICAgIGJnU2Vjb25kYXJ5OiAiIzBhMGEwYSIsCiAgICAgICAgICBiZ1RlcnRpYXJ5OiAiIzE4MTgxYiIsCiAgICAgICAgICB0ZXh0UHJpbWFyeTogIiNmYWZhZmEiLAogICAgICAgICAgdGV4dFNlY29uZGFyeTogIiNkNGQ0ZDgiLAogICAgICAgICAgdGV4dE11dGVkOiAiI2ExYTFhYSIsCiAgICAgICAgICBib3JkZXJEZWZhdWx0OiAiIzI3MjcyYSIsCiAgICAgICAgICBib3JkZXJTdWJ0bGU6ICIjMWExYTFhIiwKICAgICAgICAgIGJvcmRlclN0cm9uZzogIiMzZjNmNDYiLAogICAgICAgICAgYWNjZW50UHJpbWFyeTogIiMzYjgyZjYiLAogICAgICAgICAgYWNjZW50U3VjY2VzczogIiMyMmM1NWUiLAogICAgICAgICAgYWNjZW50V2FybmluZzogIiNmNTllMGIiLAogICAgICAgICAgYWNjZW50RXJyb3I6ICIjZWY0NDQ0IgogICAgICAgIH0KICAgICAgfSwKICAgICAgc3BhY2luZzogewogICAgICAgIHhzOiAiNHB4IiwKICAgICAgICBzbTogIjhweCIsCiAgICAgICAgbWQ6ICIxMnB4IiwKICAgICAgICBsZzogIjE2cHgiLAogICAgICAgIHhsOiAiMjRweCIsCiAgICAgICAgIjJ4bCI6ICIzMnB4IiwKICAgICAgICAiM3hsIjogIjQ4cHgiCiAgICAgIH0sCiAgICAgIHJhZGl1czogewogICAgICAgIHhzOiAiMnB4IiwKICAgICAgICBzbTogIjRweCIsCiAgICAgICAgbWQ6ICI2cHgiLAogICAgICAgIGxnOiAiOHB4IiwKICAgICAgICB4bDogIjEycHgiLAogICAgICAgIGZ1bGw6ICI5OTlweCIKICAgICAgfSwKICAgICAgc2hhZG93czogewogICAgICAgIHhzOiAiMCAxcHggMnB4IDAgcmdiKDAgMCAwIC8gMC4wNSkiLAogICAgICAgIHNtOiAiMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSIsCiAgICAgICAgbWQ6ICIwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KSIsCiAgICAgICAgbGc6ICIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiCiAgICAgIH0sCiAgICAgIHRyYW5zaXRpb25zOiB7CiAgICAgICAgZmFzdDogIjAuMXMiLAogICAgICAgIGRlZmF1bHQ6ICIwLjE1cyIsCiAgICAgICAgc2xvdzogIjAuMnMiLAogICAgICAgIHNsb3dlcjogIjAuM3MiCiAgICAgIH0sCiAgICAgIGNvbnRyb2xIZWlnaHRzOiB7CiAgICAgICAgc206ICIzMnB4IiwKICAgICAgICBtZDogIjM2cHgiLAogICAgICAgIGxnOiAiNDBweCIsCiAgICAgICAgeGw6ICI0OHB4IgogICAgICB9CiAgICB9OwogICAgdGhlbWVEZWZhdWx0U3R5bGVzID0gaWAKICA6aG9zdCB7CiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTcGFjaW5nIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc3BhY2luZy14czogNHB4OwogICAgLS1kZWVzLXNwYWNpbmctc206IDhweDsKICAgIC0tZGVlcy1zcGFjaW5nLW1kOiAxMnB4OwogICAgLS1kZWVzLXNwYWNpbmctbGc6IDE2cHg7CiAgICAtLWRlZXMtc3BhY2luZy14bDogMjRweDsKICAgIC0tZGVlcy1zcGFjaW5nLTJ4bDogMzJweDsKICAgIC0tZGVlcy1zcGFjaW5nLTN4bDogNDhweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBCb3JkZXIgUmFkaXVzIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtcmFkaXVzLXhzOiAycHg7CiAgICAtLWRlZXMtcmFkaXVzLXNtOiA0cHg7CiAgICAtLWRlZXMtcmFkaXVzLW1kOiA2cHg7CiAgICAtLWRlZXMtcmFkaXVzLWxnOiA4cHg7CiAgICAtLWRlZXMtcmFkaXVzLXhsOiAxMnB4OwogICAgLS1kZWVzLXJhZGl1cy1mdWxsOiA5OTlweDsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBTaGFkb3cgRWxldmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtc2hhZG93LXhzOiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgIC0tZGVlcy1zaGFkb3ctc206IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAtLWRlZXMtc2hhZG93LW1kOiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgIC0tZGVlcy1zaGFkb3ctbGc6IDAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKCiAgICAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAgKiBUcmFuc2l0aW9uIER1cmF0aW9uIFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0OiAwLjFzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDogMC4xNXM7CiAgICAtLWRlZXMtdHJhbnNpdGlvbi1zbG93OiAwLjJzOwogICAgLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyOiAwLjNzOwoKICAgIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgICAqIENvbnRyb2wgSGVpZ2h0IFNjYWxlCiAgICAgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtc206IDMycHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbWQ6IDM2cHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtbGc6IDQwcHg7CiAgICAtLWRlZXMtY29udHJvbC1oZWlnaHQteGw6IDQ4cHg7CiAgfQpgOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZvbnRhd2Vzb21lLXN2Zy1jb3JlQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZm9udGF3ZXNvbWUtc3ZnLWNvcmUvaW5kZXgubWpzCmZ1bmN0aW9uIF9hcnJheUxpa2VUb0FycmF5KHIxMSwgYTUpIHsKICAobnVsbCA9PSBhNSB8fCBhNSA+IHIxMS5sZW5ndGgpICYmIChhNSA9IHIxMS5sZW5ndGgpOwogIGZvciAodmFyIGUxMSA9IDAsIG4xMyA9IEFycmF5KGE1KTsgZTExIDwgYTU7IGUxMSsrKSBuMTNbZTExXSA9IHIxMVtlMTFdOwogIHJldHVybiBuMTM7Cn0KZnVuY3Rpb24gX2FycmF5V2l0aEhvbGVzKHIxMSkgewogIGlmIChBcnJheS5pc0FycmF5KHIxMSkpIHJldHVybiByMTE7Cn0KZnVuY3Rpb24gX2FycmF5V2l0aG91dEhvbGVzKHIxMSkgewogIGlmIChBcnJheS5pc0FycmF5KHIxMSkpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyMTEpOwp9CmZ1bmN0aW9uIF9jbGFzc0NhbGxDaGVjayhhNSwgbjEzKSB7CiAgaWYgKCEoYTUgaW5zdGFuY2VvZiBuMTMpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKTsKfQpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydGllcyhlMTEsIHIxMSkgewogIGZvciAodmFyIHQ5ID0gMDsgdDkgPCByMTEubGVuZ3RoOyB0OSsrKSB7CiAgICB2YXIgbzEzID0gcjExW3Q5XTsKICAgIG8xMy5lbnVtZXJhYmxlID0gbzEzLmVudW1lcmFibGUgfHwgZmFsc2UsIG8xMy5jb25maWd1cmFibGUgPSB0cnVlLCAidmFsdWUiIGluIG8xMyAmJiAobzEzLndyaXRhYmxlID0gdHJ1ZSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlMTEsIF90b1Byb3BlcnR5S2V5KG8xMy5rZXkpLCBvMTMpOwogIH0KfQpmdW5jdGlvbiBfY3JlYXRlQ2xhc3MoZTExLCByMTEsIHQ5KSB7CiAgcmV0dXJuIHIxMSAmJiBfZGVmaW5lUHJvcGVydGllcyhlMTEucHJvdG90eXBlLCByMTEpLCB0OSAmJiBfZGVmaW5lUHJvcGVydGllcyhlMTEsIHQ5KSwgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgInByb3RvdHlwZSIsIHsKICAgIHdyaXRhYmxlOiBmYWxzZQogIH0pLCBlMTE7Cn0KZnVuY3Rpb24gX2NyZWF0ZUZvck9mSXRlcmF0b3JIZWxwZXIocjExLCBlMTEpIHsKICB2YXIgdDkgPSAidW5kZWZpbmVkIiAhPSB0eXBlb2YgU3ltYm9sICYmIHIxMVtTeW1ib2wuaXRlcmF0b3JdIHx8IHIxMVsiQEBpdGVyYXRvciJdOwogIGlmICghdDkpIHsKICAgIGlmIChBcnJheS5pc0FycmF5KHIxMSkgfHwgKHQ5ID0gX3Vuc3VwcG9ydGVkSXRlcmFibGVUb0FycmF5KHIxMSkpIHx8IGUxMSAmJiByMTEgJiYgIm51bWJlciIgPT0gdHlwZW9mIHIxMS5sZW5ndGgpIHsKICAgICAgdDkgJiYgKHIxMSA9IHQ5KTsKICAgICAgdmFyIG4xMyA9IDAsIEYyID0gZnVuY3Rpb24oKSB7CiAgICAgIH07CiAgICAgIHJldHVybiB7CiAgICAgICAgczogRjIsCiAgICAgICAgbjogZnVuY3Rpb24oKSB7CiAgICAgICAgICByZXR1cm4gbjEzID49IHIxMS5sZW5ndGggPyB7CiAgICAgICAgICAgIGRvbmU6IHRydWUKICAgICAgICAgIH0gOiB7CiAgICAgICAgICAgIGRvbmU6IGZhbHNlLAogICAgICAgICAgICB2YWx1ZTogcjExW24xMysrXQogICAgICAgICAgfTsKICAgICAgICB9LAogICAgICAgIGU6IGZ1bmN0aW9uKHIxMikgewogICAgICAgICAgdGhyb3cgcjEyOwogICAgICAgIH0sCiAgICAgICAgZjogRjIKICAgICAgfTsKICAgIH0KICAgIHRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBpdGVyYXRlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKICB9CiAgdmFyIG8xMywgYTUgPSB0cnVlLCB1NyA9IGZhbHNlOwogIHJldHVybiB7CiAgICBzOiBmdW5jdGlvbigpIHsKICAgICAgdDkgPSB0OS5jYWxsKHIxMSk7CiAgICB9LAogICAgbjogZnVuY3Rpb24oKSB7CiAgICAgIHZhciByMTIgPSB0OS5uZXh0KCk7CiAgICAgIHJldHVybiBhNSA9IHIxMi5kb25lLCByMTI7CiAgICB9LAogICAgZTogZnVuY3Rpb24ocjEyKSB7CiAgICAgIHU3ID0gdHJ1ZSwgbzEzID0gcjEyOwogICAgfSwKICAgIGY6IGZ1bmN0aW9uKCkgewogICAgICB0cnkgewogICAgICAgIGE1IHx8IG51bGwgPT0gdDkucmV0dXJuIHx8IHQ5LnJldHVybigpOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIGlmICh1NykgdGhyb3cgbzEzOwogICAgICB9CiAgICB9CiAgfTsKfQpmdW5jdGlvbiBfZGVmaW5lUHJvcGVydHkoZTExLCByMTEsIHQ5KSB7CiAgcmV0dXJuIChyMTEgPSBfdG9Qcm9wZXJ0eUtleShyMTEpKSBpbiBlMTEgPyBPYmplY3QuZGVmaW5lUHJvcGVydHkoZTExLCByMTEsIHsKICAgIHZhbHVlOiB0OSwKICAgIGVudW1lcmFibGU6IHRydWUsCiAgICBjb25maWd1cmFibGU6IHRydWUsCiAgICB3cml0YWJsZTogdHJ1ZQogIH0pIDogZTExW3IxMV0gPSB0OSwgZTExOwp9CmZ1bmN0aW9uIF9pbmhlcml0cyh0OSwgZTExKSB7CiAgaWYgKCJmdW5jdGlvbiIgIT0gdHlwZW9mIGUxMSAmJiBudWxsICE9PSBlMTEpIHRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7CiAgdDkucHJvdG90eXBlID0gT2JqZWN0LmNyZWF0ZShlMTEgJiYgZTExLnByb3RvdHlwZSwgewogICAgY29uc3RydWN0b3I6IHsKICAgICAgdmFsdWU6IHQ5LAogICAgICB3cml0YWJsZTogdHJ1ZSwKICAgICAgY29uZmlndXJhYmxlOiB0cnVlCiAgICB9CiAgfSksIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0OSwgInByb3RvdHlwZSIsIHsKICAgIHdyaXRhYmxlOiBmYWxzZQogIH0pLCBlMTEgJiYgX3NldFByb3RvdHlwZU9mKHQ5LCBlMTEpOwp9CmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXkocjExKSB7CiAgaWYgKCJ1bmRlZmluZWQiICE9IHR5cGVvZiBTeW1ib2wgJiYgbnVsbCAhPSByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCBudWxsICE9IHIxMVsiQEBpdGVyYXRvciJdKSByZXR1cm4gQXJyYXkuZnJvbShyMTEpOwp9CmZ1bmN0aW9uIF9pdGVyYWJsZVRvQXJyYXlMaW1pdChyMTEsIGw2KSB7CiAgdmFyIHQ5ID0gbnVsbCA9PSByMTEgPyBudWxsIDogInVuZGVmaW5lZCIgIT0gdHlwZW9mIFN5bWJvbCAmJiByMTFbU3ltYm9sLml0ZXJhdG9yXSB8fCByMTFbIkBAaXRlcmF0b3IiXTsKICBpZiAobnVsbCAhPSB0OSkgewogICAgdmFyIGUxMSwgbjEzLCBpMTEsIHU3LCBhNSA9IFtdLCBmNyA9IHRydWUsIG8xMyA9IGZhbHNlOwogICAgdHJ5IHsKICAgICAgaWYgKGkxMSA9ICh0OSA9IHQ5LmNhbGwocjExKSkubmV4dCwgMCA9PT0gbDYpIHsKICAgICAgICBpZiAoT2JqZWN0KHQ5KSAhPT0gdDkpIHJldHVybjsKICAgICAgICBmNyA9IGZhbHNlOwogICAgICB9IGVsc2UgZm9yICg7ICEoZjcgPSAoZTExID0gaTExLmNhbGwodDkpKS5kb25lKSAmJiAoYTUucHVzaChlMTEudmFsdWUpLCBhNS5sZW5ndGggIT09IGw2KTsgZjcgPSB0cnVlKSA7CiAgICB9IGNhdGNoIChyMTIpIHsKICAgICAgbzEzID0gdHJ1ZSwgbjEzID0gcjEyOwogICAgfSBmaW5hbGx5IHsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWY3ICYmIG51bGwgIT0gdDkucmV0dXJuICYmICh1NyA9IHQ5LnJldHVybigpLCBPYmplY3QodTcpICE9PSB1NykpIHJldHVybjsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICBpZiAobzEzKSB0aHJvdyBuMTM7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBhNTsKICB9Cn0KZnVuY3Rpb24gX25vbkl0ZXJhYmxlUmVzdCgpIHsKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlLlxuSW4gb3JkZXIgdG8gYmUgaXRlcmFibGUsIG5vbi1hcnJheSBvYmplY3RzIG11c3QgaGF2ZSBhIFtTeW1ib2wuaXRlcmF0b3JdKCkgbWV0aG9kLiIpOwp9CmZ1bmN0aW9uIF9ub25JdGVyYWJsZVNwcmVhZCgpIHsKICB0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZS5cbkluIG9yZGVyIHRvIGJlIGl0ZXJhYmxlLCBub24tYXJyYXkgb2JqZWN0cyBtdXN0IGhhdmUgYSBbU3ltYm9sLml0ZXJhdG9yXSgpIG1ldGhvZC4iKTsKfQpmdW5jdGlvbiBvd25LZXlzMihlMTEsIHIxMSkgewogIHZhciB0OSA9IE9iamVjdC5rZXlzKGUxMSk7CiAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHsKICAgIHZhciBvMTMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKGUxMSk7CiAgICByMTEgJiYgKG8xMyA9IG8xMy5maWx0ZXIoZnVuY3Rpb24ocjEyKSB7CiAgICAgIHJldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUxMSwgcjEyKS5lbnVtZXJhYmxlOwogICAgfSkpLCB0OS5wdXNoLmFwcGx5KHQ5LCBvMTMpOwogIH0KICByZXR1cm4gdDk7Cn0KZnVuY3Rpb24gX29iamVjdFNwcmVhZDIoZTExKSB7CiAgZm9yICh2YXIgcjExID0gMTsgcjExIDwgYXJndW1lbnRzLmxlbmd0aDsgcjExKyspIHsKICAgIHZhciB0OSA9IG51bGwgIT0gYXJndW1lbnRzW3IxMV0gPyBhcmd1bWVudHNbcjExXSA6IHt9OwogICAgcjExICUgMiA/IG93bktleXMyKE9iamVjdCh0OSksIHRydWUpLmZvckVhY2goZnVuY3Rpb24ocjEyKSB7CiAgICAgIF9kZWZpbmVQcm9wZXJ0eShlMTEsIHIxMiwgdDlbcjEyXSk7CiAgICB9KSA6IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzID8gT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZTExLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyh0OSkpIDogb3duS2V5czIoT2JqZWN0KHQ5KSkuZm9yRWFjaChmdW5jdGlvbihyMTIpIHsKICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGUxMSwgcjEyLCBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHQ5LCByMTIpKTsKICAgIH0pOwogIH0KICByZXR1cm4gZTExOwp9CmZ1bmN0aW9uIF9zZXRQcm90b3R5cGVPZih0OSwgZTExKSB7CiAgcmV0dXJuIF9zZXRQcm90b3R5cGVPZiA9IE9iamVjdC5zZXRQcm90b3R5cGVPZiA/IE9iamVjdC5zZXRQcm90b3R5cGVPZi5iaW5kKCkgOiBmdW5jdGlvbih0MTAsIGUxMikgewogICAgcmV0dXJuIHQxMC5fX3Byb3RvX18gPSBlMTIsIHQxMDsKICB9LCBfc2V0UHJvdG90eXBlT2YodDksIGUxMSk7Cn0KZnVuY3Rpb24gX3NsaWNlZFRvQXJyYXkocjExLCBlMTEpIHsKICByZXR1cm4gX2FycmF5V2l0aEhvbGVzKHIxMSkgfHwgX2l0ZXJhYmxlVG9BcnJheUxpbWl0KHIxMSwgZTExKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExLCBlMTEpIHx8IF9ub25JdGVyYWJsZVJlc3QoKTsKfQpmdW5jdGlvbiBfdG9Db25zdW1hYmxlQXJyYXkocjExKSB7CiAgcmV0dXJuIF9hcnJheVdpdGhvdXRIb2xlcyhyMTEpIHx8IF9pdGVyYWJsZVRvQXJyYXkocjExKSB8fCBfdW5zdXBwb3J0ZWRJdGVyYWJsZVRvQXJyYXkocjExKSB8fCBfbm9uSXRlcmFibGVTcHJlYWQoKTsKfQpmdW5jdGlvbiBfdG9QcmltaXRpdmUodDksIHIxMSkgewogIGlmICgib2JqZWN0IiAhPSB0eXBlb2YgdDkgfHwgIXQ5KSByZXR1cm4gdDk7CiAgdmFyIGUxMSA9IHQ5W1N5bWJvbC50b1ByaW1pdGl2ZV07CiAgaWYgKHZvaWQgMCAhPT0gZTExKSB7CiAgICB2YXIgaTExID0gZTExLmNhbGwodDksIHIxMSB8fCAiZGVmYXVsdCIpOwogICAgaWYgKCJvYmplY3QiICE9IHR5cGVvZiBpMTEpIHJldHVybiBpMTE7CiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCJAQHRvUHJpbWl0aXZlIG11c3QgcmV0dXJuIGEgcHJpbWl0aXZlIHZhbHVlLiIpOwogIH0KICByZXR1cm4gKCJzdHJpbmciID09PSByMTEgPyBTdHJpbmcgOiBOdW1iZXIpKHQ5KTsKfQpmdW5jdGlvbiBfdG9Qcm9wZXJ0eUtleSh0OSkgewogIHZhciBpMTEgPSBfdG9QcmltaXRpdmUodDksICJzdHJpbmciKTsKICByZXR1cm4gInN5bWJvbCIgPT0gdHlwZW9mIGkxMSA/IGkxMSA6IGkxMSArICIiOwp9CmZ1bmN0aW9uIF90eXBlb2YobzEzKSB7CiAgIkBiYWJlbC9oZWxwZXJzIC0gdHlwZW9mIjsKICByZXR1cm4gX3R5cGVvZiA9ICJmdW5jdGlvbiIgPT0gdHlwZW9mIFN5bWJvbCAmJiAic3ltYm9sIiA9PSB0eXBlb2YgU3ltYm9sLml0ZXJhdG9yID8gZnVuY3Rpb24obzE0KSB7CiAgICByZXR1cm4gdHlwZW9mIG8xNDsKICB9IDogZnVuY3Rpb24obzE0KSB7CiAgICByZXR1cm4gbzE0ICYmICJmdW5jdGlvbiIgPT0gdHlwZW9mIFN5bWJvbCAmJiBvMTQuY29uc3RydWN0b3IgPT09IFN5bWJvbCAmJiBvMTQgIT09IFN5bWJvbC5wcm90b3R5cGUgPyAic3ltYm9sIiA6IHR5cGVvZiBvMTQ7CiAgfSwgX3R5cGVvZihvMTMpOwp9CmZ1bmN0aW9uIF91bnN1cHBvcnRlZEl0ZXJhYmxlVG9BcnJheShyMTEsIGE1KSB7CiAgaWYgKHIxMSkgewogICAgaWYgKCJzdHJpbmciID09IHR5cGVvZiByMTEpIHJldHVybiBfYXJyYXlMaWtlVG9BcnJheShyMTEsIGE1KTsKICAgIHZhciB0OSA9IHt9LnRvU3RyaW5nLmNhbGwocjExKS5zbGljZSg4LCAtMSk7CiAgICByZXR1cm4gIk9iamVjdCIgPT09IHQ5ICYmIHIxMS5jb25zdHJ1Y3RvciAmJiAodDkgPSByMTEuY29uc3RydWN0b3IubmFtZSksICJNYXAiID09PSB0OSB8fCAiU2V0IiA9PT0gdDkgPyBBcnJheS5mcm9tKHIxMSkgOiAiQXJndW1lbnRzIiA9PT0gdDkgfHwgL14oPzpVaXxJKW50KD86OHwxNnwzMikoPzpDbGFtcGVkKT9BcnJheSQvLnRlc3QodDkpID8gX2FycmF5TGlrZVRvQXJyYXkocjExLCBhNSkgOiB2b2lkIDA7CiAgfQp9CmZ1bmN0aW9uIF93cmFwUmVnRXhwKCkgewogIF93cmFwUmVnRXhwID0gZnVuY3Rpb24oZTEyLCByMTIpIHsKICAgIHJldHVybiBuZXcgQmFiZWxSZWdFeHAoZTEyLCB2b2lkIDAsIHIxMik7CiAgfTsKICB2YXIgZTExID0gUmVnRXhwLnByb3RvdHlwZSwgcjExID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgZnVuY3Rpb24gQmFiZWxSZWdFeHAoZTEyLCB0OSwgcDcpIHsKICAgIHZhciBvMTMgPSBSZWdFeHAoZTEyLCB0OSk7CiAgICByZXR1cm4gcjExLnNldChvMTMsIHA3IHx8IHIxMS5nZXQoZTEyKSksIF9zZXRQcm90b3R5cGVPZihvMTMsIEJhYmVsUmVnRXhwLnByb3RvdHlwZSk7CiAgfQogIGZ1bmN0aW9uIGJ1aWxkR3JvdXBzKGUxMiwgdDkpIHsKICAgIHZhciBwNyA9IHIxMS5nZXQodDkpOwogICAgcmV0dXJuIE9iamVjdC5rZXlzKHA3KS5yZWR1Y2UoZnVuY3Rpb24ocjEyLCB0MTApIHsKICAgICAgdmFyIG8xMyA9IHA3W3QxMF07CiAgICAgIGlmICgibnVtYmVyIiA9PSB0eXBlb2YgbzEzKSByMTJbdDEwXSA9IGUxMltvMTNdOwogICAgICBlbHNlIHsKICAgICAgICBmb3IgKHZhciBpMTEgPSAwOyB2b2lkIDAgPT09IGUxMltvMTNbaTExXV0gJiYgaTExICsgMSA8IG8xMy5sZW5ndGg7ICkgaTExKys7CiAgICAgICAgcjEyW3QxMF0gPSBlMTJbbzEzW2kxMV1dOwogICAgICB9CiAgICAgIHJldHVybiByMTI7CiAgICB9LCAvKiBAX19QVVJFX18gKi8gT2JqZWN0LmNyZWF0ZShudWxsKSk7CiAgfQogIHJldHVybiBfaW5oZXJpdHMoQmFiZWxSZWdFeHAsIFJlZ0V4cCksIEJhYmVsUmVnRXhwLnByb3RvdHlwZS5leGVjID0gZnVuY3Rpb24ocjEyKSB7CiAgICB2YXIgdDkgPSBlMTEuZXhlYy5jYWxsKHRoaXMsIHIxMik7CiAgICBpZiAodDkpIHsKICAgICAgdDkuZ3JvdXBzID0gYnVpbGRHcm91cHModDksIHRoaXMpOwogICAgICB2YXIgcDcgPSB0OS5pbmRpY2VzOwogICAgICBwNyAmJiAocDcuZ3JvdXBzID0gYnVpbGRHcm91cHMocDcsIHRoaXMpKTsKICAgIH0KICAgIHJldHVybiB0OTsKICB9LCBCYWJlbFJlZ0V4cC5wcm90b3R5cGVbU3ltYm9sLnJlcGxhY2VdID0gZnVuY3Rpb24odDksIHA3KSB7CiAgICBpZiAoInN0cmluZyIgPT0gdHlwZW9mIHA3KSB7CiAgICAgIHZhciBvMTMgPSByMTEuZ2V0KHRoaXMpOwogICAgICByZXR1cm4gZTExW1N5bWJvbC5yZXBsYWNlXS5jYWxsKHRoaXMsIHQ5LCBwNy5yZXBsYWNlKC9cJDwoW14+XSspKD58JCkvZywgZnVuY3Rpb24oZTEyLCByMTIsIHQxMCkgewogICAgICAgIGlmICgiIiA9PT0gdDEwKSByZXR1cm4gZTEyOwogICAgICAgIHZhciBwOCA9IG8xM1tyMTJdOwogICAgICAgIHJldHVybiBBcnJheS5pc0FycmF5KHA4KSA/ICIkIiArIHA4LmpvaW4oIiQiKSA6ICJudW1iZXIiID09IHR5cGVvZiBwOCA/ICIkIiArIHA4IDogIiI7CiAgICAgIH0pKTsKICAgIH0KICAgIGlmICgiZnVuY3Rpb24iID09IHR5cGVvZiBwNykgewogICAgICB2YXIgaTExID0gdGhpczsKICAgICAgcmV0dXJuIGUxMVtTeW1ib2wucmVwbGFjZV0uY2FsbCh0aGlzLCB0OSwgZnVuY3Rpb24oKSB7CiAgICAgICAgdmFyIGUxMiA9IGFyZ3VtZW50czsKICAgICAgICByZXR1cm4gIm9iamVjdCIgIT0gdHlwZW9mIGUxMltlMTIubGVuZ3RoIC0gMV0gJiYgKGUxMiA9IFtdLnNsaWNlLmNhbGwoZTEyKSkucHVzaChidWlsZEdyb3VwcyhlMTIsIGkxMSkpLCBwNy5hcHBseSh0aGlzLCBlMTIpOwogICAgICB9KTsKICAgIH0KICAgIHJldHVybiBlMTFbU3ltYm9sLnJlcGxhY2VdLmNhbGwodGhpcywgdDksIHA3KTsKICB9LCBfd3JhcFJlZ0V4cC5hcHBseSh0aGlzLCBhcmd1bWVudHMpOwp9CmZ1bmN0aW9uIGZhbWlseVByb3h5KG9iaikgewogIHJldHVybiBuZXcgUHJveHkob2JqLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIodGFyZ2V0LCBwcm9wKSB7CiAgICAgIHJldHVybiBwcm9wIGluIHRhcmdldCA/IHRhcmdldFtwcm9wXSA6IHRhcmdldFtpMTBdOwogICAgfQogIH0pOwp9CmZ1bmN0aW9uIGdldEF0dHJDb25maWcoYXR0cikgewogIHZhciBlbGVtZW50NCA9IERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IoInNjcmlwdFsiICsgYXR0ciArICJdIik7CiAgaWYgKGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0QXR0cmlidXRlKGF0dHIpOwogIH0KfQpmdW5jdGlvbiBjb2VyY2UodmFsKSB7CiAgaWYgKHZhbCA9PT0gIiIpIHJldHVybiB0cnVlOwogIGlmICh2YWwgPT09ICJmYWxzZSIpIHJldHVybiBmYWxzZTsKICBpZiAodmFsID09PSAidHJ1ZSIpIHJldHVybiB0cnVlOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gb25DaGFuZ2UoY2IpIHsKICBfb25DaGFuZ2VDYi5wdXNoKGNiKTsKICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICBfb25DaGFuZ2VDYi5zcGxpY2UoX29uQ2hhbmdlQ2IuaW5kZXhPZihjYiksIDEpOwogIH07Cn0KZnVuY3Rpb24gaW5zZXJ0Q3NzKGNzczEzKSB7CiAgaWYgKCFjc3MxMyB8fCAhSVNfRE9NKSB7CiAgICByZXR1cm47CiAgfQogIHZhciBzdHlsZSA9IERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgc3R5bGUuc2V0QXR0cmlidXRlKCJ0eXBlIiwgInRleHQvY3NzIik7CiAgc3R5bGUuaW5uZXJIVE1MID0gY3NzMTM7CiAgdmFyIGhlYWRDaGlsZHJlbiA9IERPQ1VNRU5ULmhlYWQuY2hpbGROb2RlczsKICB2YXIgYmVmb3JlQ2hpbGQgPSBudWxsOwogIGZvciAodmFyIGkxMSA9IGhlYWRDaGlsZHJlbi5sZW5ndGggLSAxOyBpMTEgPiAtMTsgaTExLS0pIHsKICAgIHZhciBjaGlsZCA9IGhlYWRDaGlsZHJlbltpMTFdOwogICAgdmFyIHRhZ05hbWUgPSAoY2hpbGQudGFnTmFtZSB8fCAiIikudG9VcHBlckNhc2UoKTsKICAgIGlmIChbIlNUWUxFIiwgIkxJTksiXS5pbmRleE9mKHRhZ05hbWUpID4gLTEpIHsKICAgICAgYmVmb3JlQ2hpbGQgPSBjaGlsZDsKICAgIH0KICB9CiAgRE9DVU1FTlQuaGVhZC5pbnNlcnRCZWZvcmUoc3R5bGUsIGJlZm9yZUNoaWxkKTsKICByZXR1cm4gY3NzMTM7Cn0KZnVuY3Rpb24gbmV4dFVuaXF1ZUlkKCkgewogIHZhciBzaXplID0gMTI7CiAgdmFyIGlkID0gIiI7CiAgd2hpbGUgKHNpemUtLSA+IDApIHsKICAgIGlkICs9IGlkUG9vbFtNYXRoLnJhbmRvbSgpICogNjIgfCAwXTsKICB9CiAgcmV0dXJuIGlkOwp9CmZ1bmN0aW9uIHRvQXJyYXkyKG9iaikgewogIHZhciBhcnJheSA9IFtdOwogIGZvciAodmFyIGkxMSA9IChvYmogfHwgW10pLmxlbmd0aCA+Pj4gMDsgaTExLS07ICkgewogICAgYXJyYXlbaTExXSA9IG9ialtpMTFdOwogIH0KICByZXR1cm4gYXJyYXk7Cn0KZnVuY3Rpb24gY2xhc3NBcnJheShub2RlMikgewogIGlmIChub2RlMi5jbGFzc0xpc3QpIHsKICAgIHJldHVybiB0b0FycmF5Mihub2RlMi5jbGFzc0xpc3QpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gKG5vZGUyLmdldEF0dHJpYnV0ZSgiY2xhc3MiKSB8fCAiIikuc3BsaXQoIiAiKS5maWx0ZXIoZnVuY3Rpb24oaTExKSB7CiAgICAgIHJldHVybiBpMTE7CiAgICB9KTsKICB9Cn0KZnVuY3Rpb24gaHRtbEVzY2FwZShzdHIpIHsKICByZXR1cm4gIiIuY29uY2F0KHN0cikucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC8iL2csICImcXVvdDsiKS5yZXBsYWNlKC8nL2csICImIzM5OyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKS5yZXBsYWNlKC8+L2csICImZ3Q7Iik7Cn0KZnVuY3Rpb24gam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcykgewogIHJldHVybiBPYmplY3Qua2V5cyhhdHRyaWJ1dGVzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBhdHRyaWJ1dGVOYW1lKSB7CiAgICByZXR1cm4gYWNjICsgIiIuY29uY2F0KGF0dHJpYnV0ZU5hbWUsICc9IicpLmNvbmNhdChodG1sRXNjYXBlKGF0dHJpYnV0ZXNbYXR0cmlidXRlTmFtZV0pLCAnIiAnKTsKICB9LCAiIikudHJpbSgpOwp9CmZ1bmN0aW9uIGpvaW5TdHlsZXMoc3R5bGVzMykgewogIHJldHVybiBPYmplY3Qua2V5cyhzdHlsZXMzIHx8IHt9KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBzdHlsZU5hbWUpIHsKICAgIHJldHVybiBhY2MgKyAiIi5jb25jYXQoc3R5bGVOYW1lLCAiOiAiKS5jb25jYXQoc3R5bGVzM1tzdHlsZU5hbWVdLnRyaW0oKSwgIjsiKTsKICB9LCAiIik7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpIHsKICByZXR1cm4gdHJhbnNmb3JtMi5zaXplICE9PSBtZWFuaW5nbGVzc1RyYW5zZm9ybS5zaXplIHx8IHRyYW5zZm9ybTIueCAhPT0gbWVhbmluZ2xlc3NUcmFuc2Zvcm0ueCB8fCB0cmFuc2Zvcm0yLnkgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnkgfHwgdHJhbnNmb3JtMi5yb3RhdGUgIT09IG1lYW5pbmdsZXNzVHJhbnNmb3JtLnJvdGF0ZSB8fCB0cmFuc2Zvcm0yLmZsaXBYIHx8IHRyYW5zZm9ybTIuZmxpcFk7Cn0KZnVuY3Rpb24gdHJhbnNmb3JtRm9yU3ZnKF9yZWYyKSB7CiAgdmFyIHRyYW5zZm9ybTIgPSBfcmVmMi50cmFuc2Zvcm0sIGNvbnRhaW5lcldpZHRoID0gX3JlZjIuY29udGFpbmVyV2lkdGgsIGljb25XaWR0aCA9IF9yZWYyLmljb25XaWR0aDsKICB2YXIgb3V0ZXIgPSB7CiAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoY29udGFpbmVyV2lkdGggLyAyLCAiIDI1NikiKQogIH07CiAgdmFyIGlubmVyVHJhbnNsYXRlID0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggKiAzMiwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAqIDMyLCAiKSAiKTsKICB2YXIgaW5uZXJTY2FsZSA9ICJzY2FsZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnNpemUgLyAxNiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFkgPyAtMSA6IDEpLCAiKSAiKTsKICB2YXIgaW5uZXJSb3RhdGUgPSAicm90YXRlKCIuY29uY2F0KHRyYW5zZm9ybTIucm90YXRlLCAiIDAgMCkiKTsKICB2YXIgaW5uZXIgPSB7CiAgICB0cmFuc2Zvcm06ICIiLmNvbmNhdChpbm5lclRyYW5zbGF0ZSwgIiAiKS5jb25jYXQoaW5uZXJTY2FsZSwgIiAiKS5jb25jYXQoaW5uZXJSb3RhdGUpCiAgfTsKICB2YXIgcGF0aDIgPSB7CiAgICB0cmFuc2Zvcm06ICJ0cmFuc2xhdGUoIi5jb25jYXQoaWNvbldpZHRoIC8gMiAqIC0xLCAiIC0yNTYpIikKICB9OwogIHJldHVybiB7CiAgICBvdXRlciwKICAgIGlubmVyLAogICAgcGF0aDogcGF0aDIKICB9Owp9CmZ1bmN0aW9uIHRyYW5zZm9ybUZvckNzcyhfcmVmMikgewogIHZhciB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBfcmVmMiR3aWR0aCA9IF9yZWYyLndpZHRoLCB3aWR0aCA9IF9yZWYyJHdpZHRoID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkd2lkdGgsIF9yZWYyJGhlaWdodCA9IF9yZWYyLmhlaWdodCwgaGVpZ2h0ID0gX3JlZjIkaGVpZ2h0ID09PSB2b2lkIDAgPyBVTklUU19JTl9HUklEIDogX3JlZjIkaGVpZ2h0LCBfcmVmMiRzdGFydENlbnRlcmVkID0gX3JlZjIuc3RhcnRDZW50ZXJlZCwgc3RhcnRDZW50ZXJlZCA9IF9yZWYyJHN0YXJ0Q2VudGVyZWQgPT09IHZvaWQgMCA/IGZhbHNlIDogX3JlZjIkc3RhcnRDZW50ZXJlZDsKICB2YXIgdmFsID0gIiI7CiAgaWYgKHN0YXJ0Q2VudGVyZWQgJiYgSVNfSUUpIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKCIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiAtIHdpZHRoIC8gMiwgImVtLCAiKS5jb25jYXQodHJhbnNmb3JtMi55IC8gZCQyIC0gaGVpZ2h0IC8gMiwgImVtKSAiKTsKICB9IGVsc2UgaWYgKHN0YXJ0Q2VudGVyZWQpIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKGNhbGMoLTUwJSArICIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiwgImVtKSwgY2FsYygtNTAlICsgIikuY29uY2F0KHRyYW5zZm9ybTIueSAvIGQkMiwgImVtKSkgIik7CiAgfSBlbHNlIHsKICAgIHZhbCArPSAidHJhbnNsYXRlKCIuY29uY2F0KHRyYW5zZm9ybTIueCAvIGQkMiwgImVtLCAiKS5jb25jYXQodHJhbnNmb3JtMi55IC8gZCQyLCAiZW0pICIpOwogIH0KICB2YWwgKz0gInNjYWxlKCIuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIGQkMiAqICh0cmFuc2Zvcm0yLmZsaXBYID8gLTEgOiAxKSwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIGQkMiAqICh0cmFuc2Zvcm0yLmZsaXBZID8gLTEgOiAxKSwgIikgIik7CiAgdmFsICs9ICJyb3RhdGUoIi5jb25jYXQodHJhbnNmb3JtMi5yb3RhdGUsICJkZWcpICIpOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gY3NzKCkgewogIHZhciBkY3AgPSBERUZBVUxUX0NTU19QUkVGSVg7CiAgdmFyIGRyYyA9IERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1M7CiAgdmFyIGZwID0gY29uZmlnMi5jc3NQcmVmaXg7CiAgdmFyIHJjID0gY29uZmlnMi5yZXBsYWNlbWVudENsYXNzOwogIHZhciBzOSA9IGJhc2VTdHlsZXM7CiAgaWYgKGZwICE9PSBkY3AgfHwgcmMgIT09IGRyYykgewogICAgdmFyIGRQYXR0ID0gbmV3IFJlZ0V4cCgiXFwuIi5jb25jYXQoZGNwLCAiXFwtIiksICJnIik7CiAgICB2YXIgY3VzdG9tUHJvcFBhdHQgPSBuZXcgUmVnRXhwKCJcXC0tIi5jb25jYXQoZGNwLCAiXFwtIiksICJnIik7CiAgICB2YXIgclBhdHQgPSBuZXcgUmVnRXhwKCJcXC4iLmNvbmNhdChkcmMpLCAiZyIpOwogICAgczkgPSBzOS5yZXBsYWNlKGRQYXR0LCAiLiIuY29uY2F0KGZwLCAiLSIpKS5yZXBsYWNlKGN1c3RvbVByb3BQYXR0LCAiLS0iLmNvbmNhdChmcCwgIi0iKSkucmVwbGFjZShyUGF0dCwgIi4iLmNvbmNhdChyYykpOwogIH0KICByZXR1cm4gczk7Cn0KZnVuY3Rpb24gZW5zdXJlQ3NzKCkgewogIGlmIChjb25maWcyLmF1dG9BZGRDc3MgJiYgIV9jc3NJbnNlcnRlZCkgewogICAgaW5zZXJ0Q3NzKGNzcygpKTsKICAgIF9jc3NJbnNlcnRlZCA9IHRydWU7CiAgfQp9CmZ1bmN0aW9uIGRvbXJlYWR5KGZuKSB7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICBsb2FkZWQgPyBzZXRUaW1lb3V0KGZuLCAwKSA6IGZ1bmN0aW9ucy5wdXNoKGZuKTsKfQpmdW5jdGlvbiB0b0h0bWwyKGFic3RyYWN0Tm9kZXMpIHsKICB2YXIgdGFnID0gYWJzdHJhY3ROb2Rlcy50YWcsIF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9IGFic3RyYWN0Tm9kZXMuYXR0cmlidXRlcywgYXR0cmlidXRlcyA9IF9hYnN0cmFjdE5vZGVzJGF0dHJpYiA9PT0gdm9pZCAwID8ge30gOiBfYWJzdHJhY3ROb2RlcyRhdHRyaWIsIF9hYnN0cmFjdE5vZGVzJGNoaWxkciA9IGFic3RyYWN0Tm9kZXMuY2hpbGRyZW4sIGNoaWxkcmVuMiA9IF9hYnN0cmFjdE5vZGVzJGNoaWxkciA9PT0gdm9pZCAwID8gW10gOiBfYWJzdHJhY3ROb2RlcyRjaGlsZHI7CiAgaWYgKHR5cGVvZiBhYnN0cmFjdE5vZGVzID09PSAic3RyaW5nIikgewogICAgcmV0dXJuIGh0bWxFc2NhcGUoYWJzdHJhY3ROb2Rlcyk7CiAgfSBlbHNlIHsKICAgIHJldHVybiAiPCIuY29uY2F0KHRhZywgIiAiKS5jb25jYXQoam9pbkF0dHJpYnV0ZXMoYXR0cmlidXRlcyksICI+IikuY29uY2F0KGNoaWxkcmVuMi5tYXAodG9IdG1sMikuam9pbigiIiksICI8LyIpLmNvbmNhdCh0YWcsICI+Iik7CiAgfQp9CmZ1bmN0aW9uIGljb25Gcm9tTWFwcGluZyhtYXBwaW5nLCBwcmVmaXg0LCBpY29uTmFtZSkgewogIGlmIChtYXBwaW5nICYmIG1hcHBpbmdbcHJlZml4NF0gJiYgbWFwcGluZ1twcmVmaXg0XVtpY29uTmFtZV0pIHsKICAgIHJldHVybiB7CiAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgaWNvbk5hbWUsCiAgICAgIGljb246IG1hcHBpbmdbcHJlZml4NF1baWNvbk5hbWVdCiAgICB9OwogIH0KfQpmdW5jdGlvbiB0b0hleCh1bmljb2RlKSB7CiAgaWYgKF90b0NvbnN1bWFibGVBcnJheSh1bmljb2RlKS5sZW5ndGggIT09IDEpIHJldHVybiBudWxsOwogIHJldHVybiB1bmljb2RlLmNvZGVQb2ludEF0KDApLnRvU3RyaW5nKDE2KTsKfQpmdW5jdGlvbiBub3JtYWxpemVJY29ucyhpY29uczUpIHsKICByZXR1cm4gT2JqZWN0LmtleXMoaWNvbnM1KS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBpY29uTmFtZSkgewogICAgdmFyIGljb24zID0gaWNvbnM1W2ljb25OYW1lXTsKICAgIHZhciBleHBhbmRlZCA9ICEhaWNvbjMuaWNvbjsKICAgIGlmIChleHBhbmRlZCkgewogICAgICBhY2NbaWNvbjMuaWNvbk5hbWVdID0gaWNvbjMuaWNvbjsKICAgIH0gZWxzZSB7CiAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uMzsKICAgIH0KICAgIHJldHVybiBhY2M7CiAgfSwge30pOwp9CmZ1bmN0aW9uIGRlZmluZUljb25zKHByZWZpeDQsIGljb25zNSkgewogIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDIgJiYgYXJndW1lbnRzWzJdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMl0gOiB7fTsKICB2YXIgX3BhcmFtcyRza2lwSG9va3MgPSBwYXJhbXMyLnNraXBIb29rcywgc2tpcEhvb2tzID0gX3BhcmFtcyRza2lwSG9va3MgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwSG9va3M7CiAgdmFyIG5vcm1hbGl6ZWQgPSBub3JtYWxpemVJY29ucyhpY29uczUpOwogIGlmICh0eXBlb2YgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2sgPT09ICJmdW5jdGlvbiIgJiYgIXNraXBIb29rcykgewogICAgbmFtZXNwYWNlLmhvb2tzLmFkZFBhY2socHJlZml4NCwgbm9ybWFsaXplSWNvbnMoaWNvbnM1KSk7CiAgfSBlbHNlIHsKICAgIG5hbWVzcGFjZS5zdHlsZXNbcHJlZml4NF0gPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgbmFtZXNwYWNlLnN0eWxlc1twcmVmaXg0XSB8fCB7fSksIG5vcm1hbGl6ZWQpOwogIH0KICBpZiAocHJlZml4NCA9PT0gImZhcyIpIHsKICAgIGRlZmluZUljb25zKCJmYSIsIGljb25zNSk7CiAgfQp9CmZ1bmN0aW9uIGlzUmVzZXJ2ZWQobmFtZSkgewogIHJldHVybiB+UkVTRVJWRURfQ0xBU1NFUy5pbmRleE9mKG5hbWUpOwp9CmZ1bmN0aW9uIGdldEljb25OYW1lKGNzc1ByZWZpeCwgY2xzKSB7CiAgdmFyIHBhcnRzID0gY2xzLnNwbGl0KCItIik7CiAgdmFyIHByZWZpeDQgPSBwYXJ0c1swXTsKICB2YXIgaWNvbk5hbWUgPSBwYXJ0cy5zbGljZSgxKS5qb2luKCItIik7CiAgaWYgKHByZWZpeDQgPT09IGNzc1ByZWZpeCAmJiBpY29uTmFtZSAhPT0gIiIgJiYgIWlzUmVzZXJ2ZWQoaWNvbk5hbWUpKSB7CiAgICByZXR1cm4gaWNvbk5hbWU7CiAgfSBlbHNlIHsKICAgIHJldHVybiBudWxsOwogIH0KfQpmdW5jdGlvbiBieVVuaWNvZGUocHJlZml4NCwgdW5pY29kZSkgewogIHJldHVybiAoX2J5VW5pY29kZVtwcmVmaXg0XSB8fCB7fSlbdW5pY29kZV07Cn0KZnVuY3Rpb24gYnlMaWdhdHVyZShwcmVmaXg0LCBsaWdhdHVyZSkgewogIHJldHVybiAoX2J5TGlnYXR1cmVbcHJlZml4NF0gfHwge30pW2xpZ2F0dXJlXTsKfQpmdW5jdGlvbiBieUFsaWFzKHByZWZpeDQsIGFsaWFzKSB7CiAgcmV0dXJuIChfYnlBbGlhc1twcmVmaXg0XSB8fCB7fSlbYWxpYXNdOwp9CmZ1bmN0aW9uIGJ5T2xkTmFtZShuYW1lKSB7CiAgcmV0dXJuIF9ieU9sZE5hbWVbbmFtZV0gfHwgewogICAgcHJlZml4OiBudWxsLAogICAgaWNvbk5hbWU6IG51bGwKICB9Owp9CmZ1bmN0aW9uIGJ5T2xkVW5pY29kZSh1bmljb2RlKSB7CiAgdmFyIG9sZFVuaWNvZGUgPSBfYnlPbGRVbmljb2RlW3VuaWNvZGVdOwogIHZhciBuZXdVbmljb2RlID0gYnlVbmljb2RlKCJmYXMiLCB1bmljb2RlKTsKICByZXR1cm4gb2xkVW5pY29kZSB8fCAobmV3VW5pY29kZSA/IHsKICAgIHByZWZpeDogImZhcyIsCiAgICBpY29uTmFtZTogbmV3VW5pY29kZQogIH0gOiBudWxsKSB8fCB7CiAgICBwcmVmaXg6IG51bGwsCiAgICBpY29uTmFtZTogbnVsbAogIH07Cn0KZnVuY3Rpb24gZ2V0RGVmYXVsdFVzYWJsZVByZWZpeCgpIHsKICByZXR1cm4gX2RlZmF1bHRVc2FibGVQcmVmaXg7Cn0KZnVuY3Rpb24gZ2V0RmFtaWx5SWQodmFsdWVzKSB7CiAgdmFyIGZhbWlseSA9IGkxMDsKICB2YXIgZmFtUHJvcHMgPSBGQU1JTFlfTkFNRVMucmVkdWNlKGZ1bmN0aW9uKGFjYywgZmFtaWx5SWQpIHsKICAgIGFjY1tmYW1pbHlJZF0gPSAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGZhbWlseUlkKTsKICAgIHJldHVybiBhY2M7CiAgfSwge30pOwogIHJ0LmZvckVhY2goZnVuY3Rpb24oZmFtaWx5SWQpIHsKICAgIGlmICh2YWx1ZXMuaW5jbHVkZXMoZmFtUHJvcHNbZmFtaWx5SWRdKSB8fCB2YWx1ZXMuc29tZShmdW5jdGlvbih2JCQxKSB7CiAgICAgIHJldHVybiBQUkVGSVhFU19GT1JfRkFNSUxZW2ZhbWlseUlkXS5pbmNsdWRlcyh2JCQxKTsKICAgIH0pKSB7CiAgICAgIGZhbWlseSA9IGZhbWlseUlkOwogICAgfQogIH0pOwogIHJldHVybiBmYW1pbHk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlT3JQcmVmaXgpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkZmFtaWx5ID0gcGFyYW1zMi5mYW1pbHksIGZhbWlseSA9IF9wYXJhbXMkZmFtaWx5ID09PSB2b2lkIDAgPyBpMTAgOiBfcGFyYW1zJGZhbWlseTsKICB2YXIgc3R5bGUgPSBQUkVGSVhfVE9fU1RZTEVbZmFtaWx5XVtzdHlsZU9yUHJlZml4XTsKICBpZiAoZmFtaWx5ID09PSB0OCAmJiAhc3R5bGVPclByZWZpeCkgewogICAgcmV0dXJuICJmYWQiOwogIH0KICB2YXIgcHJlZml4NCA9IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlT3JQcmVmaXhdIHx8IFNUWUxFX1RPX1BSRUZJWFtmYW1pbHldW3N0eWxlXTsKICB2YXIgZGVmaW5lZCA9IHN0eWxlT3JQcmVmaXggaW4gbmFtZXNwYWNlLnN0eWxlcyA/IHN0eWxlT3JQcmVmaXggOiBudWxsOwogIHZhciByZXN1bHQgPSBwcmVmaXg0IHx8IGRlZmluZWQgfHwgbnVsbDsKICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIG1vdmVOb25GYUNsYXNzZXNUb1Jlc3QoY2xhc3NOYW1lcykgewogIHZhciByZXN0ID0gW107CiAgdmFyIGljb25OYW1lID0gbnVsbDsKICBjbGFzc05hbWVzLmZvckVhY2goZnVuY3Rpb24oY2xzKSB7CiAgICB2YXIgcmVzdWx0ID0gZ2V0SWNvbk5hbWUoY29uZmlnMi5jc3NQcmVmaXgsIGNscyk7CiAgICBpZiAocmVzdWx0KSB7CiAgICAgIGljb25OYW1lID0gcmVzdWx0OwogICAgfSBlbHNlIGlmIChjbHMpIHsKICAgICAgcmVzdC5wdXNoKGNscyk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHsKICAgIGljb25OYW1lLAogICAgcmVzdAogIH07Cn0KZnVuY3Rpb24gc29ydGVkVW5pcXVlVmFsdWVzKGFycikgewogIHJldHVybiBhcnIuc29ydCgpLmZpbHRlcihmdW5jdGlvbih2YWx1ZTIsIGluZGV4MiwgYXJyMikgewogICAgcmV0dXJuIGFycjIuaW5kZXhPZih2YWx1ZTIpID09PSBpbmRleDI7CiAgfSk7Cn0KZnVuY3Rpb24gZ2V0Q2Fub25pY2FsSWNvbih2YWx1ZXMpIHsKICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDoge307CiAgdmFyIF9wYXJhbXMkc2tpcExvb2t1cHMgPSBwYXJhbXMyLnNraXBMb29rdXBzLCBza2lwTG9va3VwcyA9IF9wYXJhbXMkc2tpcExvb2t1cHMgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRza2lwTG9va3VwczsKICB2YXIgZ2l2ZW5QcmVmaXggPSBudWxsOwogIHZhciBmYVN0eWxlT3JGYW1pbHlDbGFzc2VzID0gc29ydGVkVW5pcXVlVmFsdWVzKHZhbHVlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICByZXR1cm4gX2ZhQ29tYmluZWRDbGFzc2VzLmluY2x1ZGVzKGNscyk7CiAgfSkpOwogIHZhciBub25TdHlsZU9yRmFtaWx5Q2xhc3NlcyA9IHNvcnRlZFVuaXF1ZVZhbHVlcyh2YWx1ZXMuZmlsdGVyKGZ1bmN0aW9uKGNscykgewogICAgcmV0dXJuICFfZmFDb21iaW5lZENsYXNzZXMuaW5jbHVkZXMoY2xzKTsKICB9KSk7CiAgdmFyIGZhU3R5bGVzID0gZmFTdHlsZU9yRmFtaWx5Q2xhc3Nlcy5maWx0ZXIoZnVuY3Rpb24oY2xzKSB7CiAgICBnaXZlblByZWZpeCA9IGNsczsKICAgIHJldHVybiAhUS5pbmNsdWRlcyhjbHMpOwogIH0pOwogIHZhciBfZmFTdHlsZXMgPSBfc2xpY2VkVG9BcnJheShmYVN0eWxlcywgMSksIF9mYVN0eWxlcyQgPSBfZmFTdHlsZXNbMF0sIHN0eWxlRnJvbVZhbHVlcyA9IF9mYVN0eWxlcyQgPT09IHZvaWQgMCA/IG51bGwgOiBfZmFTdHlsZXMkOwogIHZhciBmYW1pbHkgPSBnZXRGYW1pbHlJZChmYVN0eWxlT3JGYW1pbHlDbGFzc2VzKTsKICB2YXIgY2Fub25pY2FsID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1vdmVOb25GYUNsYXNzZXNUb1Jlc3Qobm9uU3R5bGVPckZhbWlseUNsYXNzZXMpKSwge30sIHsKICAgIHByZWZpeDogZ2V0Q2Fub25pY2FsUHJlZml4KHN0eWxlRnJvbVZhbHVlcywgewogICAgICBmYW1pbHkKICAgIH0pCiAgfSk7CiAgcmV0dXJuIF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBjYW5vbmljYWwpLCBnZXREZWZhdWx0Q2Fub25pY2FsUHJlZml4KHsKICAgIHZhbHVlcywKICAgIGZhbWlseSwKICAgIHN0eWxlczogc3R5bGVzMiwKICAgIGNvbmZpZzogY29uZmlnMiwKICAgIGNhbm9uaWNhbCwKICAgIGdpdmVuUHJlZml4CiAgfSkpLCBhcHBseVNoaW1BbmRBbGlhcyhza2lwTG9va3VwcywgZ2l2ZW5QcmVmaXgsIGNhbm9uaWNhbCkpOwp9CmZ1bmN0aW9uIGFwcGx5U2hpbUFuZEFsaWFzKHNraXBMb29rdXBzLCBnaXZlblByZWZpeCwgY2Fub25pY2FsKSB7CiAgdmFyIHByZWZpeDQgPSBjYW5vbmljYWwucHJlZml4LCBpY29uTmFtZSA9IGNhbm9uaWNhbC5pY29uTmFtZTsKICBpZiAoc2tpcExvb2t1cHMgfHwgIXByZWZpeDQgfHwgIWljb25OYW1lKSB7CiAgICByZXR1cm4gewogICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgIGljb25OYW1lCiAgICB9OwogIH0KICB2YXIgc2hpbSA9IGdpdmVuUHJlZml4ID09PSAiZmEiID8gYnlPbGROYW1lKGljb25OYW1lKSA6IHt9OwogIHZhciBhbGlhc0ljb25OYW1lID0gYnlBbGlhcyhwcmVmaXg0LCBpY29uTmFtZSk7CiAgaWNvbk5hbWUgPSBzaGltLmljb25OYW1lIHx8IGFsaWFzSWNvbk5hbWUgfHwgaWNvbk5hbWU7CiAgcHJlZml4NCA9IHNoaW0ucHJlZml4IHx8IHByZWZpeDQ7CiAgaWYgKHByZWZpeDQgPT09ICJmYXIiICYmICFzdHlsZXMyWyJmYXIiXSAmJiBzdHlsZXMyWyJmYXMiXSAmJiAhY29uZmlnMi5hdXRvRmV0Y2hTdmcpIHsKICAgIHByZWZpeDQgPSAiZmFzIjsKICB9CiAgcmV0dXJuIHsKICAgIHByZWZpeDogcHJlZml4NCwKICAgIGljb25OYW1lCiAgfTsKfQpmdW5jdGlvbiBnZXREZWZhdWx0Q2Fub25pY2FsUHJlZml4KHByZWZpeE9wdGlvbnMpIHsKICB2YXIgdmFsdWVzID0gcHJlZml4T3B0aW9ucy52YWx1ZXMsIGZhbWlseSA9IHByZWZpeE9wdGlvbnMuZmFtaWx5LCBjYW5vbmljYWwgPSBwcmVmaXhPcHRpb25zLmNhbm9uaWNhbCwgX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QID0gcHJlZml4T3B0aW9ucy5naXZlblByZWZpeCwgZ2l2ZW5QcmVmaXggPSBfcHJlZml4T3B0aW9ucyRnaXZlblAgPT09IHZvaWQgMCA/ICIiIDogX3ByZWZpeE9wdGlvbnMkZ2l2ZW5QLCBfcHJlZml4T3B0aW9ucyRzdHlsZXMgPSBwcmVmaXhPcHRpb25zLnN0eWxlcywgc3R5bGVzMyA9IF9wcmVmaXhPcHRpb25zJHN0eWxlcyA9PT0gdm9pZCAwID8ge30gOiBfcHJlZml4T3B0aW9ucyRzdHlsZXMsIF9wcmVmaXhPcHRpb25zJGNvbmZpZyA9IHByZWZpeE9wdGlvbnMuY29uZmlnLCBjb25maWckJDEgPSBfcHJlZml4T3B0aW9ucyRjb25maWcgPT09IHZvaWQgMCA/IHt9IDogX3ByZWZpeE9wdGlvbnMkY29uZmlnOwogIHZhciBpc0R1b3RvbmVGYW1pbHkgPSBmYW1pbHkgPT09IHQ4OwogIHZhciB2YWx1ZXNIYXNEdW90b25lID0gdmFsdWVzLmluY2x1ZGVzKCJmYS1kdW90b25lIikgfHwgdmFsdWVzLmluY2x1ZGVzKCJmYWQiKTsKICB2YXIgZGVmYXVsdEZhbWlseUlzRHVvdG9uZSA9IGNvbmZpZyQkMS5mYW1pbHlEZWZhdWx0ID09PSAiZHVvdG9uZSI7CiAgdmFyIGNhbm9uaWNhbFByZWZpeElzRHVvdG9uZSA9IGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYWQiIHx8IGNhbm9uaWNhbC5wcmVmaXggPT09ICJmYS1kdW90b25lIjsKICBpZiAoIWlzRHVvdG9uZUZhbWlseSAmJiAodmFsdWVzSGFzRHVvdG9uZSB8fCBkZWZhdWx0RmFtaWx5SXNEdW90b25lIHx8IGNhbm9uaWNhbFByZWZpeElzRHVvdG9uZSkpIHsKICAgIGNhbm9uaWNhbC5wcmVmaXggPSAiZmFkIjsKICB9CiAgaWYgKHZhbHVlcy5pbmNsdWRlcygiZmEtYnJhbmRzIikgfHwgdmFsdWVzLmluY2x1ZGVzKCJmYWIiKSkgewogICAgY2Fub25pY2FsLnByZWZpeCA9ICJmYWIiOwogIH0KICBpZiAoIWNhbm9uaWNhbC5wcmVmaXggJiYgbmV3Q2Fub25pY2FsRmFtaWxpZXMuaW5jbHVkZXMoZmFtaWx5KSkgewogICAgdmFyIHZhbGlkUHJlZml4ID0gT2JqZWN0LmtleXMoc3R5bGVzMykuZmluZChmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBuZXdDYW5vbmljYWxTdHlsZXMuaW5jbHVkZXMoa2V5Mik7CiAgICB9KTsKICAgIGlmICh2YWxpZFByZWZpeCB8fCBjb25maWckJDEuYXV0b0ZldGNoU3ZnKSB7CiAgICAgIHZhciBkZWZhdWx0UHJlZml4ID0gVXQuZ2V0KGZhbWlseSkuZGVmYXVsdFNob3J0UHJlZml4SWQ7CiAgICAgIGNhbm9uaWNhbC5wcmVmaXggPSBkZWZhdWx0UHJlZml4OwogICAgICBjYW5vbmljYWwuaWNvbk5hbWUgPSBieUFsaWFzKGNhbm9uaWNhbC5wcmVmaXgsIGNhbm9uaWNhbC5pY29uTmFtZSkgfHwgY2Fub25pY2FsLmljb25OYW1lOwogICAgfQogIH0KICBpZiAoY2Fub25pY2FsLnByZWZpeCA9PT0gImZhIiB8fCBnaXZlblByZWZpeCA9PT0gImZhIikgewogICAgY2Fub25pY2FsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKSB8fCAiZmFzIjsKICB9CiAgcmV0dXJuIGNhbm9uaWNhbDsKfQpmdW5jdGlvbiByZWdpc3RlclBsdWdpbnMobmV4dFBsdWdpbnMsIF9yZWYyKSB7CiAgdmFyIG9iaiA9IF9yZWYyLm1peG91dHNUbzsKICBfcGx1Z2lucyA9IG5leHRQbHVnaW5zOwogIF9ob29rcyA9IHt9OwogIE9iamVjdC5rZXlzKHByb3ZpZGVycykuZm9yRWFjaChmdW5jdGlvbihrNCkgewogICAgaWYgKGRlZmF1bHRQcm92aWRlcktleXMuaW5kZXhPZihrNCkgPT09IC0xKSB7CiAgICAgIGRlbGV0ZSBwcm92aWRlcnNbazRdOwogICAgfQogIH0pOwogIF9wbHVnaW5zLmZvckVhY2goZnVuY3Rpb24ocGx1Z2luKSB7CiAgICB2YXIgbWl4b3V0OCA9IHBsdWdpbi5taXhvdXQgPyBwbHVnaW4ubWl4b3V0KCkgOiB7fTsKICAgIE9iamVjdC5rZXlzKG1peG91dDgpLmZvckVhY2goZnVuY3Rpb24odGspIHsKICAgICAgaWYgKHR5cGVvZiBtaXhvdXQ4W3RrXSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG9ialt0a10gPSBtaXhvdXQ4W3RrXTsKICAgICAgfQogICAgICBpZiAoX3R5cGVvZihtaXhvdXQ4W3RrXSkgPT09ICJvYmplY3QiKSB7CiAgICAgICAgT2JqZWN0LmtleXMobWl4b3V0OFt0a10pLmZvckVhY2goZnVuY3Rpb24oc2spIHsKICAgICAgICAgIGlmICghb2JqW3RrXSkgewogICAgICAgICAgICBvYmpbdGtdID0ge307CiAgICAgICAgICB9CiAgICAgICAgICBvYmpbdGtdW3NrXSA9IG1peG91dDhbdGtdW3NrXTsKICAgICAgICB9KTsKICAgICAgfQogICAgfSk7CiAgICBpZiAocGx1Z2luLmhvb2tzKSB7CiAgICAgIHZhciBob29rczggPSBwbHVnaW4uaG9va3MoKTsKICAgICAgT2JqZWN0LmtleXMoaG9va3M4KS5mb3JFYWNoKGZ1bmN0aW9uKGhvb2spIHsKICAgICAgICBpZiAoIV9ob29rc1tob29rXSkgewogICAgICAgICAgX2hvb2tzW2hvb2tdID0gW107CiAgICAgICAgfQogICAgICAgIF9ob29rc1tob29rXS5wdXNoKGhvb2tzOFtob29rXSk7CiAgICAgIH0pOwogICAgfQogICAgaWYgKHBsdWdpbi5wcm92aWRlcykgewogICAgICBwbHVnaW4ucHJvdmlkZXMocHJvdmlkZXJzKTsKICAgIH0KICB9KTsKICByZXR1cm4gb2JqOwp9CmZ1bmN0aW9uIGNoYWluSG9va3MoaG9vaywgYWNjdW11bGF0b3IpIHsKICBmb3IgKHZhciBfbGVuID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuID4gMiA/IF9sZW4gLSAyIDogMCksIF9rZXkgPSAyOyBfa2V5IDwgX2xlbjsgX2tleSsrKSB7CiAgICBhcmdzW19rZXkgLSAyXSA9IGFyZ3VtZW50c1tfa2V5XTsKICB9CiAgdmFyIGhvb2tGbnMgPSBfaG9va3NbaG9va10gfHwgW107CiAgaG9va0Zucy5mb3JFYWNoKGZ1bmN0aW9uKGhvb2tGbikgewogICAgYWNjdW11bGF0b3IgPSBob29rRm4uYXBwbHkobnVsbCwgW2FjY3VtdWxhdG9yXS5jb25jYXQoYXJncykpOwogIH0pOwogIHJldHVybiBhY2N1bXVsYXRvcjsKfQpmdW5jdGlvbiBjYWxsSG9va3MoaG9vaykgewogIGZvciAodmFyIF9sZW4yID0gYXJndW1lbnRzLmxlbmd0aCwgYXJncyA9IG5ldyBBcnJheShfbGVuMiA+IDEgPyBfbGVuMiAtIDEgOiAwKSwgX2tleTIgPSAxOyBfa2V5MiA8IF9sZW4yOyBfa2V5MisrKSB7CiAgICBhcmdzW19rZXkyIC0gMV0gPSBhcmd1bWVudHNbX2tleTJdOwogIH0KICB2YXIgaG9va0ZucyA9IF9ob29rc1tob29rXSB8fCBbXTsKICBob29rRm5zLmZvckVhY2goZnVuY3Rpb24oaG9va0ZuKSB7CiAgICBob29rRm4uYXBwbHkobnVsbCwgYXJncyk7CiAgfSk7CiAgcmV0dXJuIHZvaWQgMDsKfQpmdW5jdGlvbiBjYWxsUHJvdmlkZWQoKSB7CiAgdmFyIGhvb2sgPSBhcmd1bWVudHNbMF07CiAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsIDEpOwogIHJldHVybiBwcm92aWRlcnNbaG9va10gPyBwcm92aWRlcnNbaG9va10uYXBwbHkobnVsbCwgYXJncykgOiB2b2lkIDA7Cn0KZnVuY3Rpb24gZmluZEljb25EZWZpbml0aW9uKGljb25Mb29rdXApIHsKICBpZiAoaWNvbkxvb2t1cC5wcmVmaXggPT09ICJmYSIpIHsKICAgIGljb25Mb29rdXAucHJlZml4ID0gImZhcyI7CiAgfQogIHZhciBpY29uTmFtZSA9IGljb25Mb29rdXAuaWNvbk5hbWU7CiAgdmFyIHByZWZpeDQgPSBpY29uTG9va3VwLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgaWYgKCFpY29uTmFtZSkgcmV0dXJuOwogIGljb25OYW1lID0gYnlBbGlhcyhwcmVmaXg0LCBpY29uTmFtZSkgfHwgaWNvbk5hbWU7CiAgcmV0dXJuIGljb25Gcm9tTWFwcGluZyhsaWJyYXJ5LmRlZmluaXRpb25zLCBwcmVmaXg0LCBpY29uTmFtZSkgfHwgaWNvbkZyb21NYXBwaW5nKG5hbWVzcGFjZS5zdHlsZXMsIHByZWZpeDQsIGljb25OYW1lKTsKfQpmdW5jdGlvbiBkb21WYXJpYW50cyh2YWwsIGFic3RyYWN0Q3JlYXRvcikgewogIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh2YWwsICJhYnN0cmFjdCIsIHsKICAgIGdldDogYWJzdHJhY3RDcmVhdG9yCiAgfSk7CiAgT2JqZWN0LmRlZmluZVByb3BlcnR5KHZhbCwgImh0bWwiLCB7CiAgICBnZXQ6IGZ1bmN0aW9uIGdldDIoKSB7CiAgICAgIHJldHVybiB2YWwuYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgcmV0dXJuIHRvSHRtbDIoYTUpOwogICAgICB9KTsKICAgIH0KICB9KTsKICBPYmplY3QuZGVmaW5lUHJvcGVydHkodmFsLCAibm9kZSIsIHsKICAgIGdldDogZnVuY3Rpb24gZ2V0MigpIHsKICAgICAgaWYgKCFJU19ET00pIHJldHVybiB2b2lkIDA7CiAgICAgIHZhciBjb250YWluZXIgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9IHZhbC5odG1sOwogICAgICByZXR1cm4gY29udGFpbmVyLmNoaWxkcmVuOwogICAgfQogIH0pOwogIHJldHVybiB2YWw7Cn0KZnVuY3Rpb24gYXNJY29uKF9yZWYyKSB7CiAgdmFyIGNoaWxkcmVuMiA9IF9yZWYyLmNoaWxkcmVuLCBtYWluID0gX3JlZjIubWFpbiwgbWFzayA9IF9yZWYyLm1hc2ssIGF0dHJpYnV0ZXMgPSBfcmVmMi5hdHRyaWJ1dGVzLCBzdHlsZXMzID0gX3JlZjIuc3R5bGVzLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtOwogIGlmICh0cmFuc2Zvcm1Jc01lYW5pbmdmdWwodHJhbnNmb3JtMikgJiYgbWFpbi5mb3VuZCAmJiAhbWFzay5mb3VuZCkgewogICAgdmFyIHdpZHRoID0gbWFpbi53aWR0aCwgaGVpZ2h0ID0gbWFpbi5oZWlnaHQ7CiAgICB2YXIgb2Zmc2V0ID0gewogICAgICB4OiB3aWR0aCAvIGhlaWdodCAvIDIsCiAgICAgIHk6IDAuNQogICAgfTsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBqb2luU3R5bGVzKF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBzdHlsZXMzKSwge30sIHsKICAgICAgInRyYW5zZm9ybS1vcmlnaW4iOiAiIi5jb25jYXQob2Zmc2V0LnggKyB0cmFuc2Zvcm0yLnggLyAxNiwgImVtICIpLmNvbmNhdChvZmZzZXQueSArIHRyYW5zZm9ybTIueSAvIDE2LCAiZW0iKQogICAgfSkpOwogIH0KICByZXR1cm4gW3sKICAgIHRhZzogInN2ZyIsCiAgICBhdHRyaWJ1dGVzLAogICAgY2hpbGRyZW46IGNoaWxkcmVuMgogIH1dOwp9CmZ1bmN0aW9uIGFzU3ltYm9sKF9yZWYyKSB7CiAgdmFyIHByZWZpeDQgPSBfcmVmMi5wcmVmaXgsIGljb25OYW1lID0gX3JlZjIuaWNvbk5hbWUsIGNoaWxkcmVuMiA9IF9yZWYyLmNoaWxkcmVuLCBhdHRyaWJ1dGVzID0gX3JlZjIuYXR0cmlidXRlcywgc3ltYm9sID0gX3JlZjIuc3ltYm9sOwogIHZhciBpZCA9IHN5bWJvbCA9PT0gdHJ1ZSA/ICIiLmNvbmNhdChwcmVmaXg0LCAiLSIpLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoaWNvbk5hbWUpIDogc3ltYm9sOwogIHJldHVybiBbewogICAgdGFnOiAic3ZnIiwKICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgc3R5bGU6ICJkaXNwbGF5OiBub25lOyIKICAgIH0sCiAgICBjaGlsZHJlbjogW3sKICAgICAgdGFnOiAic3ltYm9sIiwKICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGF0dHJpYnV0ZXMpLCB7fSwgewogICAgICAgIGlkCiAgICAgIH0pLAogICAgICBjaGlsZHJlbjogY2hpbGRyZW4yCiAgICB9XQogIH1dOwp9CmZ1bmN0aW9uIGlzTGFiZWxlZChhdHRyaWJ1dGVzKSB7CiAgdmFyIGxhYmVscyA9IFsiYXJpYS1sYWJlbCIsICJhcmlhLWxhYmVsbGVkYnkiLCAidGl0bGUiLCAicm9sZSJdOwogIHJldHVybiBsYWJlbHMuc29tZShmdW5jdGlvbihsYWJlbCkgewogICAgcmV0dXJuIGxhYmVsIGluIGF0dHJpYnV0ZXM7CiAgfSk7Cn0KZnVuY3Rpb24gbWFrZUlubGluZVN2Z0Fic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgX3BhcmFtcyRpY29ucyA9IHBhcmFtczIuaWNvbnMsIG1haW4gPSBfcGFyYW1zJGljb25zLm1haW4sIG1hc2sgPSBfcGFyYW1zJGljb25zLm1hc2ssIHByZWZpeDQgPSBwYXJhbXMyLnByZWZpeCwgaWNvbk5hbWUgPSBwYXJhbXMyLmljb25OYW1lLCB0cmFuc2Zvcm0yID0gcGFyYW1zMi50cmFuc2Zvcm0sIHN5bWJvbCA9IHBhcmFtczIuc3ltYm9sLCBtYXNrSWQgPSBwYXJhbXMyLm1hc2tJZCwgZXh0cmEgPSBwYXJhbXMyLmV4dHJhLCBfcGFyYW1zJHdhdGNoYWJsZSA9IHBhcmFtczIud2F0Y2hhYmxlLCB3YXRjaGFibGUgPSBfcGFyYW1zJHdhdGNoYWJsZSA9PT0gdm9pZCAwID8gZmFsc2UgOiBfcGFyYW1zJHdhdGNoYWJsZTsKICB2YXIgX3JlZjIgPSBtYXNrLmZvdW5kID8gbWFzayA6IG1haW4sIHdpZHRoID0gX3JlZjIud2lkdGgsIGhlaWdodCA9IF9yZWYyLmhlaWdodDsKICB2YXIgYXR0ckNsYXNzID0gW2NvbmZpZzIucmVwbGFjZW1lbnRDbGFzcywgaWNvbk5hbWUgPyAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KGljb25OYW1lKSA6ICIiXS5maWx0ZXIoZnVuY3Rpb24oYzExKSB7CiAgICByZXR1cm4gZXh0cmEuY2xhc3Nlcy5pbmRleE9mKGMxMSkgPT09IC0xOwogIH0pLmZpbHRlcihmdW5jdGlvbihjMTEpIHsKICAgIHJldHVybiBjMTEgIT09ICIiIHx8ICEhYzExOwogIH0pLmNvbmNhdChleHRyYS5jbGFzc2VzKS5qb2luKCIgIik7CiAgdmFyIGNvbnRlbnQzID0gewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGV4dHJhLmF0dHJpYnV0ZXMpLCB7fSwgewogICAgICAiZGF0YS1wcmVmaXgiOiBwcmVmaXg0LAogICAgICAiZGF0YS1pY29uIjogaWNvbk5hbWUsCiAgICAgICJjbGFzcyI6IGF0dHJDbGFzcywKICAgICAgInJvbGUiOiBleHRyYS5hdHRyaWJ1dGVzLnJvbGUgfHwgImltZyIsCiAgICAgICJ2aWV3Qm94IjogIjAgMCAiLmNvbmNhdCh3aWR0aCwgIiAiKS5jb25jYXQoaGVpZ2h0KQogICAgfSkKICB9OwogIGlmICghaXNMYWJlbGVkKGV4dHJhLmF0dHJpYnV0ZXMpICYmICFleHRyYS5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdKSB7CiAgICBjb250ZW50My5hdHRyaWJ1dGVzWyJhcmlhLWhpZGRlbiJdID0gInRydWUiOwogIH0KICBpZiAod2F0Y2hhYmxlKSB7CiAgICBjb250ZW50My5hdHRyaWJ1dGVzW0RBVEFfRkFfSTJTVkddID0gIiI7CiAgfQogIHZhciBhcmdzID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIGNvbnRlbnQzKSwge30sIHsKICAgIHByZWZpeDogcHJlZml4NCwKICAgIGljb25OYW1lLAogICAgbWFpbiwKICAgIG1hc2ssCiAgICBtYXNrSWQsCiAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICBzeW1ib2wsCiAgICBzdHlsZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5zdHlsZXMpCiAgfSk7CiAgdmFyIF9yZWYyMiA9IG1hc2suZm91bmQgJiYgbWFpbi5mb3VuZCA/IGNhbGxQcm92aWRlZCgiZ2VuZXJhdGVBYnN0cmFjdE1hc2siLCBhcmdzKSB8fCB7CiAgICBjaGlsZHJlbjogW10sCiAgICBhdHRyaWJ1dGVzOiB7fQogIH0gOiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlQWJzdHJhY3RJY29uIiwgYXJncykgfHwgewogICAgY2hpbGRyZW46IFtdLAogICAgYXR0cmlidXRlczoge30KICB9LCBjaGlsZHJlbjIgPSBfcmVmMjIuY2hpbGRyZW4sIGF0dHJpYnV0ZXMgPSBfcmVmMjIuYXR0cmlidXRlczsKICBhcmdzLmNoaWxkcmVuID0gY2hpbGRyZW4yOwogIGFyZ3MuYXR0cmlidXRlcyA9IGF0dHJpYnV0ZXM7CiAgaWYgKHN5bWJvbCkgewogICAgcmV0dXJuIGFzU3ltYm9sKGFyZ3MpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gYXNJY29uKGFyZ3MpOwogIH0KfQpmdW5jdGlvbiBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgY29udGVudDMgPSBwYXJhbXMyLmNvbnRlbnQsIHdpZHRoID0gcGFyYW1zMi53aWR0aCwgaGVpZ2h0ID0gcGFyYW1zMi5oZWlnaHQsIHRyYW5zZm9ybTIgPSBwYXJhbXMyLnRyYW5zZm9ybSwgZXh0cmEgPSBwYXJhbXMyLmV4dHJhLCBfcGFyYW1zJHdhdGNoYWJsZTIgPSBwYXJhbXMyLndhdGNoYWJsZSwgd2F0Y2hhYmxlID0gX3BhcmFtcyR3YXRjaGFibGUyID09PSB2b2lkIDAgPyBmYWxzZSA6IF9wYXJhbXMkd2F0Y2hhYmxlMjsKICB2YXIgYXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgIGNsYXNzOiBleHRyYS5jbGFzc2VzLmpvaW4oIiAiKQogIH0pOwogIGlmICh3YXRjaGFibGUpIHsKICAgIGF0dHJpYnV0ZXNbREFUQV9GQV9JMlNWR10gPSAiIjsKICB9CiAgdmFyIHN0eWxlczMgPSBfb2JqZWN0U3ByZWFkMih7fSwgZXh0cmEuc3R5bGVzKTsKICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpKSB7CiAgICBzdHlsZXMzWyJ0cmFuc2Zvcm0iXSA9IHRyYW5zZm9ybUZvckNzcyh7CiAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgc3RhcnRDZW50ZXJlZDogdHJ1ZSwKICAgICAgd2lkdGgsCiAgICAgIGhlaWdodAogICAgfSk7CiAgICBzdHlsZXMzWyItd2Via2l0LXRyYW5zZm9ybSJdID0gc3R5bGVzM1sidHJhbnNmb3JtIl07CiAgfQogIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoc3R5bGVzMyk7CiAgaWYgKHN0eWxlU3RyaW5nLmxlbmd0aCA+IDApIHsKICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICB9CiAgdmFyIHZhbCA9IFtdOwogIHZhbC5wdXNoKHsKICAgIHRhZzogInNwYW4iLAogICAgYXR0cmlidXRlcywKICAgIGNoaWxkcmVuOiBbY29udGVudDNdCiAgfSk7CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBtYWtlTGF5ZXJzQ291bnRlckFic3RyYWN0KHBhcmFtczIpIHsKICB2YXIgY29udGVudDMgPSBwYXJhbXMyLmNvbnRlbnQsIGV4dHJhID0gcGFyYW1zMi5leHRyYTsKICB2YXIgYXR0cmlidXRlcyA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBleHRyYS5hdHRyaWJ1dGVzKSwge30sIHsKICAgIGNsYXNzOiBleHRyYS5jbGFzc2VzLmpvaW4oIiAiKQogIH0pOwogIHZhciBzdHlsZVN0cmluZyA9IGpvaW5TdHlsZXMoZXh0cmEuc3R5bGVzKTsKICBpZiAoc3R5bGVTdHJpbmcubGVuZ3RoID4gMCkgewogICAgYXR0cmlidXRlc1sic3R5bGUiXSA9IHN0eWxlU3RyaW5nOwogIH0KICB2YXIgdmFsID0gW107CiAgdmFsLnB1c2goewogICAgdGFnOiAic3BhbiIsCiAgICBhdHRyaWJ1dGVzLAogICAgY2hpbGRyZW46IFtjb250ZW50M10KICB9KTsKICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGFzRm91bmRJY29uKGljb24zKSB7CiAgdmFyIHdpZHRoID0gaWNvbjNbMF07CiAgdmFyIGhlaWdodCA9IGljb24zWzFdOwogIHZhciBfaWNvbiRzbGljZSA9IGljb24zLnNsaWNlKDQpLCBfaWNvbiRzbGljZTIgPSBfc2xpY2VkVG9BcnJheShfaWNvbiRzbGljZSwgMSksIHZlY3RvckRhdGEgPSBfaWNvbiRzbGljZTJbMF07CiAgdmFyIGVsZW1lbnQ0ID0gbnVsbDsKICBpZiAoQXJyYXkuaXNBcnJheSh2ZWN0b3JEYXRhKSkgewogICAgZWxlbWVudDQgPSB7CiAgICAgIHRhZzogImciLAogICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgY2xhc3M6ICIiLmNvbmNhdChjb25maWcyLmNzc1ByZWZpeCwgIi0iKS5jb25jYXQoRFVPVE9ORV9DTEFTU0VTLkdST1VQKQogICAgICB9LAogICAgICBjaGlsZHJlbjogW3sKICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICBjbGFzczogIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLSIpLmNvbmNhdChEVU9UT05FX0NMQVNTRVMuU0VDT05EQVJZKSwKICAgICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgZDogdmVjdG9yRGF0YVswXQogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIHRhZzogInBhdGgiLAogICAgICAgIGF0dHJpYnV0ZXM6IHsKICAgICAgICAgIGNsYXNzOiAiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikuY29uY2F0KERVT1RPTkVfQ0xBU1NFUy5QUklNQVJZKSwKICAgICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgICAgZDogdmVjdG9yRGF0YVsxXQogICAgICAgIH0KICAgICAgfV0KICAgIH07CiAgfSBlbHNlIHsKICAgIGVsZW1lbnQ0ID0gewogICAgICB0YWc6ICJwYXRoIiwKICAgICAgYXR0cmlidXRlczogewogICAgICAgIGZpbGw6ICJjdXJyZW50Q29sb3IiLAogICAgICAgIGQ6IHZlY3RvckRhdGEKICAgICAgfQogICAgfTsKICB9CiAgcmV0dXJuIHsKICAgIGZvdW5kOiB0cnVlLAogICAgd2lkdGgsCiAgICBoZWlnaHQsCiAgICBpY29uOiBlbGVtZW50NAogIH07Cn0KZnVuY3Rpb24gbWF5YmVOb3RpZnlNaXNzaW5nKGljb25OYW1lLCBwcmVmaXg0KSB7CiAgaWYgKCFQUk9EVUNUSU9OICYmICFjb25maWcyLnNob3dNaXNzaW5nSWNvbnMgJiYgaWNvbk5hbWUpIHsKICAgIGNvbnNvbGUuZXJyb3IoJ0ljb24gd2l0aCBuYW1lICInLmNvbmNhdChpY29uTmFtZSwgJyIgYW5kIHByZWZpeCAiJykuY29uY2F0KHByZWZpeDQsICciIGlzIG1pc3NpbmcuJykpOwogIH0KfQpmdW5jdGlvbiBmaW5kSWNvbihpY29uTmFtZSwgcHJlZml4NCkgewogIHZhciBnaXZlblByZWZpeCA9IHByZWZpeDQ7CiAgaWYgKHByZWZpeDQgPT09ICJmYSIgJiYgY29uZmlnMi5zdHlsZURlZmF1bHQgIT09IG51bGwpIHsKICAgIHByZWZpeDQgPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgfQogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICBpZiAoZ2l2ZW5QcmVmaXggPT09ICJmYSIpIHsKICAgICAgdmFyIHNoaW0gPSBieU9sZE5hbWUoaWNvbk5hbWUpIHx8IHt9OwogICAgICBpY29uTmFtZSA9IHNoaW0uaWNvbk5hbWUgfHwgaWNvbk5hbWU7CiAgICAgIHByZWZpeDQgPSBzaGltLnByZWZpeCB8fCBwcmVmaXg0OwogICAgfQogICAgaWYgKGljb25OYW1lICYmIHByZWZpeDQgJiYgc3R5bGVzJDFbcHJlZml4NF0gJiYgc3R5bGVzJDFbcHJlZml4NF1baWNvbk5hbWVdKSB7CiAgICAgIHZhciBpY29uMyA9IHN0eWxlcyQxW3ByZWZpeDRdW2ljb25OYW1lXTsKICAgICAgcmV0dXJuIHJlc29sdmUyKGFzRm91bmRJY29uKGljb24zKSk7CiAgICB9CiAgICBtYXliZU5vdGlmeU1pc3NpbmcoaWNvbk5hbWUsIHByZWZpeDQpOwogICAgcmVzb2x2ZTIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1pc3NpbmdJY29uUmVzb2x1dGlvbk1peGluKSwge30sIHsKICAgICAgaWNvbjogY29uZmlnMi5zaG93TWlzc2luZ0ljb25zICYmIGljb25OYW1lID8gY2FsbFByb3ZpZGVkKCJtaXNzaW5nSWNvbkFic3RyYWN0IikgfHwge30gOiB7fQogICAgfSkpOwogIH0pOwp9CmZ1bmN0aW9uIGlzV2F0Y2hlZChub2RlMikgewogIHZhciBpMnN2ZzIgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9GQV9JMlNWRykgOiBudWxsOwogIHJldHVybiB0eXBlb2YgaTJzdmcyID09PSAic3RyaW5nIjsKfQpmdW5jdGlvbiBoYXNQcmVmaXhBbmRJY29uKG5vZGUyKSB7CiAgdmFyIHByZWZpeDQgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9QUkVGSVgpIDogbnVsbDsKICB2YXIgaWNvbjMgPSBub2RlMi5nZXRBdHRyaWJ1dGUgPyBub2RlMi5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSA6IG51bGw7CiAgcmV0dXJuIHByZWZpeDQgJiYgaWNvbjM7Cn0KZnVuY3Rpb24gaGFzQmVlblJlcGxhY2VkKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyICYmIG5vZGUyLmNsYXNzTGlzdCAmJiBub2RlMi5jbGFzc0xpc3QuY29udGFpbnMgJiYgbm9kZTIuY2xhc3NMaXN0LmNvbnRhaW5zKGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzcyk7Cn0KZnVuY3Rpb24gZ2V0TXV0YXRvcigpIHsKICBpZiAoY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9PT0gdHJ1ZSkgewogICAgcmV0dXJuIG11dGF0b3JzLnJlcGxhY2U7CiAgfQogIHZhciBtdXRhdG9yID0gbXV0YXRvcnNbY29uZmlnMi5hdXRvUmVwbGFjZVN2Z107CiAgcmV0dXJuIG11dGF0b3IgfHwgbXV0YXRvcnMucmVwbGFjZTsKfQpmdW5jdGlvbiBjcmVhdGVFbGVtZW50TlModGFnKSB7CiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCB0YWcpOwp9CmZ1bmN0aW9uIGNyZWF0ZUVsZW1lbnQodGFnKSB7CiAgcmV0dXJuIERPQ1VNRU5ULmNyZWF0ZUVsZW1lbnQodGFnKTsKfQpmdW5jdGlvbiBjb252ZXJ0U1ZHKGFic3RyYWN0T2JqKSB7CiAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogIHZhciBfcGFyYW1zJGNlRm4gPSBwYXJhbXMyLmNlRm4sIGNlRm4gPSBfcGFyYW1zJGNlRm4gPT09IHZvaWQgMCA/IGFic3RyYWN0T2JqLnRhZyA9PT0gInN2ZyIgPyBjcmVhdGVFbGVtZW50TlMgOiBjcmVhdGVFbGVtZW50IDogX3BhcmFtcyRjZUZuOwogIGlmICh0eXBlb2YgYWJzdHJhY3RPYmogPT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gRE9DVU1FTlQuY3JlYXRlVGV4dE5vZGUoYWJzdHJhY3RPYmopOwogIH0KICB2YXIgdGFnID0gY2VGbihhYnN0cmFjdE9iai50YWcpOwogIE9iamVjdC5rZXlzKGFic3RyYWN0T2JqLmF0dHJpYnV0ZXMgfHwgW10pLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgdGFnLnNldEF0dHJpYnV0ZShrZXkyLCBhYnN0cmFjdE9iai5hdHRyaWJ1dGVzW2tleTJdKTsKICB9KTsKICB2YXIgY2hpbGRyZW4yID0gYWJzdHJhY3RPYmouY2hpbGRyZW4gfHwgW107CiAgY2hpbGRyZW4yLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpIHsKICAgIHRhZy5hcHBlbmRDaGlsZChjb252ZXJ0U1ZHKGNoaWxkLCB7CiAgICAgIGNlRm4KICAgIH0pKTsKICB9KTsKICByZXR1cm4gdGFnOwp9CmZ1bmN0aW9uIG5vZGVBc0NvbW1lbnQobm9kZTIpIHsKICB2YXIgY29tbWVudDMgPSAiICIuY29uY2F0KG5vZGUyLm91dGVySFRNTCwgIiAiKTsKICBjb21tZW50MyA9ICIiLmNvbmNhdChjb21tZW50MywgIkZvbnQgQXdlc29tZSBmb250YXdlc29tZS5jb20gIik7CiAgcmV0dXJuIGNvbW1lbnQzOwp9CmZ1bmN0aW9uIHBlcmZvcm1PcGVyYXRpb25TeW5jKG9wKSB7CiAgb3AoKTsKfQpmdW5jdGlvbiBwZXJmb3JtKG11dGF0aW9ucywgY2FsbGJhY2spIHsKICB2YXIgY2FsbGJhY2tGdW5jdGlvbiA9IHR5cGVvZiBjYWxsYmFjayA9PT0gImZ1bmN0aW9uIiA/IGNhbGxiYWNrIDogbm9vcCQyOwogIGlmIChtdXRhdGlvbnMubGVuZ3RoID09PSAwKSB7CiAgICBjYWxsYmFja0Z1bmN0aW9uKCk7CiAgfSBlbHNlIHsKICAgIHZhciBmcmFtZSA9IHBlcmZvcm1PcGVyYXRpb25TeW5jOwogICAgaWYgKGNvbmZpZzIubXV0YXRlQXBwcm9hY2ggPT09IE1VVEFUSU9OX0FQUFJPQUNIX0FTWU5DKSB7CiAgICAgIGZyYW1lID0gV0lORE9XLnJlcXVlc3RBbmltYXRpb25GcmFtZSB8fCBwZXJmb3JtT3BlcmF0aW9uU3luYzsKICAgIH0KICAgIGZyYW1lKGZ1bmN0aW9uKCkgewogICAgICB2YXIgbXV0YXRvciA9IGdldE11dGF0b3IoKTsKICAgICAgdmFyIG1hcmsyID0gcGVyZi5iZWdpbigibXV0YXRlIik7CiAgICAgIG11dGF0aW9ucy5tYXAobXV0YXRvcik7CiAgICAgIG1hcmsyKCk7CiAgICAgIGNhbGxiYWNrRnVuY3Rpb24oKTsKICAgIH0pOwogIH0KfQpmdW5jdGlvbiBkaXNhYmxlT2JzZXJ2YXRpb24oKSB7CiAgZGlzYWJsZWQgPSB0cnVlOwp9CmZ1bmN0aW9uIGVuYWJsZU9ic2VydmF0aW9uKCkgewogIGRpc2FibGVkID0gZmFsc2U7Cn0KZnVuY3Rpb24gb2JzZXJ2ZShvcHRpb25zKSB7CiAgaWYgKCFNVVRBVElPTl9PQlNFUlZFUikgewogICAgcmV0dXJuOwogIH0KICBpZiAoIWNvbmZpZzIub2JzZXJ2ZU11dGF0aW9ucykgewogICAgcmV0dXJuOwogIH0KICB2YXIgX29wdGlvbnMkdHJlZUNhbGxiYWNrID0gb3B0aW9ucy50cmVlQ2FsbGJhY2ssIHRyZWVDYWxsYmFjayA9IF9vcHRpb25zJHRyZWVDYWxsYmFjayA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkdHJlZUNhbGxiYWNrLCBfb3B0aW9ucyRub2RlQ2FsbGJhY2sgPSBvcHRpb25zLm5vZGVDYWxsYmFjaywgbm9kZUNhbGxiYWNrID0gX29wdGlvbnMkbm9kZUNhbGxiYWNrID09PSB2b2lkIDAgPyBub29wJDIgOiBfb3B0aW9ucyRub2RlQ2FsbGJhY2ssIF9vcHRpb25zJHBzZXVkb0VsZW1lbiA9IG9wdGlvbnMucHNldWRvRWxlbWVudHNDYWxsYmFjaywgcHNldWRvRWxlbWVudHNDYWxsYmFjayA9IF9vcHRpb25zJHBzZXVkb0VsZW1lbiA9PT0gdm9pZCAwID8gbm9vcCQyIDogX29wdGlvbnMkcHNldWRvRWxlbWVuLCBfb3B0aW9ucyRvYnNlcnZlTXV0YXQgPSBvcHRpb25zLm9ic2VydmVNdXRhdGlvbnNSb290LCBvYnNlcnZlTXV0YXRpb25zUm9vdCA9IF9vcHRpb25zJG9ic2VydmVNdXRhdCA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfb3B0aW9ucyRvYnNlcnZlTXV0YXQ7CiAgbW8gPSBuZXcgTVVUQVRJT05fT0JTRVJWRVIoZnVuY3Rpb24ob2JqZWN0cykgewogICAgaWYgKGRpc2FibGVkKSByZXR1cm47CiAgICB2YXIgZGVmYXVsdFByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTsKICAgIHRvQXJyYXkyKG9iamVjdHMpLmZvckVhY2goZnVuY3Rpb24obXV0YXRpb25SZWNvcmQpIHsKICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJjaGlsZExpc3QiICYmIG11dGF0aW9uUmVjb3JkLmFkZGVkTm9kZXMubGVuZ3RoID4gMCAmJiAhaXNXYXRjaGVkKG11dGF0aW9uUmVjb3JkLmFkZGVkTm9kZXNbMF0pKSB7CiAgICAgICAgaWYgKGNvbmZpZzIuc2VhcmNoUHNldWRvRWxlbWVudHMpIHsKICAgICAgICAgIHBzZXVkb0VsZW1lbnRzQ2FsbGJhY2sobXV0YXRpb25SZWNvcmQudGFyZ2V0KTsKICAgICAgICB9CiAgICAgICAgdHJlZUNhbGxiYWNrKG11dGF0aW9uUmVjb3JkLnRhcmdldCk7CiAgICAgIH0KICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJhdHRyaWJ1dGVzIiAmJiBtdXRhdGlvblJlY29yZC50YXJnZXQucGFyZW50Tm9kZSAmJiBjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzKSB7CiAgICAgICAgcHNldWRvRWxlbWVudHNDYWxsYmFjayhbbXV0YXRpb25SZWNvcmQudGFyZ2V0XSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLnR5cGUgPT09ICJhdHRyaWJ1dGVzIiAmJiBpc1dhdGNoZWQobXV0YXRpb25SZWNvcmQudGFyZ2V0KSAmJiB+QVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTi5pbmRleE9mKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUpKSB7CiAgICAgICAgaWYgKG11dGF0aW9uUmVjb3JkLmF0dHJpYnV0ZU5hbWUgPT09ICJjbGFzcyIgJiYgaGFzUHJlZml4QW5kSWNvbihtdXRhdGlvblJlY29yZC50YXJnZXQpKSB7CiAgICAgICAgICB2YXIgX2dldENhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKGNsYXNzQXJyYXkobXV0YXRpb25SZWNvcmQudGFyZ2V0KSksIHByZWZpeDQgPSBfZ2V0Q2Fub25pY2FsSWNvbi5wcmVmaXgsIGljb25OYW1lID0gX2dldENhbm9uaWNhbEljb24uaWNvbk5hbWU7CiAgICAgICAgICBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfUFJFRklYLCBwcmVmaXg0IHx8IGRlZmF1bHRQcmVmaXgpOwogICAgICAgICAgaWYgKGljb25OYW1lKSBtdXRhdGlvblJlY29yZC50YXJnZXQuc2V0QXR0cmlidXRlKERBVEFfSUNPTiwgaWNvbk5hbWUpOwogICAgICAgIH0gZWxzZSBpZiAoaGFzQmVlblJlcGxhY2VkKG11dGF0aW9uUmVjb3JkLnRhcmdldCkpIHsKICAgICAgICAgIG5vZGVDYWxsYmFjayhtdXRhdGlvblJlY29yZC50YXJnZXQpOwogICAgICAgIH0KICAgICAgfQogICAgfSk7CiAgfSk7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICBtby5vYnNlcnZlKG9ic2VydmVNdXRhdGlvbnNSb290LCB7CiAgICBjaGlsZExpc3Q6IHRydWUsCiAgICBhdHRyaWJ1dGVzOiB0cnVlLAogICAgY2hhcmFjdGVyRGF0YTogdHJ1ZSwKICAgIHN1YnRyZWU6IHRydWUKICB9KTsKfQpmdW5jdGlvbiBkaXNjb25uZWN0KCkgewogIGlmICghbW8pIHJldHVybjsKICBtby5kaXNjb25uZWN0KCk7Cn0KZnVuY3Rpb24gc3R5bGVQYXJzZXIobm9kZTIpIHsKICB2YXIgc3R5bGUgPSBub2RlMi5nZXRBdHRyaWJ1dGUoInN0eWxlIik7CiAgdmFyIHZhbCA9IFtdOwogIGlmIChzdHlsZSkgewogICAgdmFsID0gc3R5bGUuc3BsaXQoIjsiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBzdHlsZTIpIHsKICAgICAgdmFyIHN0eWxlczMgPSBzdHlsZTIuc3BsaXQoIjoiKTsKICAgICAgdmFyIHByb3AgPSBzdHlsZXMzWzBdOwogICAgICB2YXIgdmFsdWUyID0gc3R5bGVzMy5zbGljZSgxKTsKICAgICAgaWYgKHByb3AgJiYgdmFsdWUyLmxlbmd0aCA+IDApIHsKICAgICAgICBhY2NbcHJvcF0gPSB2YWx1ZTIuam9pbigiOiIpLnRyaW0oKTsKICAgICAgfQogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogIH0KICByZXR1cm4gdmFsOwp9CmZ1bmN0aW9uIGNsYXNzUGFyc2VyKG5vZGUyKSB7CiAgdmFyIGV4aXN0aW5nUHJlZml4ID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLXByZWZpeCIpOwogIHZhciBleGlzdGluZ0ljb25OYW1lID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWljb24iKTsKICB2YXIgaW5uZXJUZXh0ID0gbm9kZTIuaW5uZXJUZXh0ICE9PSB2b2lkIDAgPyBub2RlMi5pbm5lclRleHQudHJpbSgpIDogIiI7CiAgdmFyIHZhbCA9IGdldENhbm9uaWNhbEljb24oY2xhc3NBcnJheShub2RlMikpOwogIGlmICghdmFsLnByZWZpeCkgewogICAgdmFsLnByZWZpeCA9IGdldERlZmF1bHRVc2FibGVQcmVmaXgoKTsKICB9CiAgaWYgKGV4aXN0aW5nUHJlZml4ICYmIGV4aXN0aW5nSWNvbk5hbWUpIHsKICAgIHZhbC5wcmVmaXggPSBleGlzdGluZ1ByZWZpeDsKICAgIHZhbC5pY29uTmFtZSA9IGV4aXN0aW5nSWNvbk5hbWU7CiAgfQogIGlmICh2YWwuaWNvbk5hbWUgJiYgdmFsLnByZWZpeCkgewogICAgcmV0dXJuIHZhbDsKICB9CiAgaWYgKHZhbC5wcmVmaXggJiYgaW5uZXJUZXh0Lmxlbmd0aCA+IDApIHsKICAgIHZhbC5pY29uTmFtZSA9IGJ5TGlnYXR1cmUodmFsLnByZWZpeCwgbm9kZTIuaW5uZXJUZXh0KSB8fCBieVVuaWNvZGUodmFsLnByZWZpeCwgdG9IZXgobm9kZTIuaW5uZXJUZXh0KSk7CiAgfQogIGlmICghdmFsLmljb25OYW1lICYmIGNvbmZpZzIuYXV0b0ZldGNoU3ZnICYmIG5vZGUyLmZpcnN0Q2hpbGQgJiYgbm9kZTIuZmlyc3RDaGlsZC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgIHZhbC5pY29uTmFtZSA9IG5vZGUyLmZpcnN0Q2hpbGQuZGF0YTsKICB9CiAgcmV0dXJuIHZhbDsKfQpmdW5jdGlvbiBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUyKSB7CiAgdmFyIGV4dHJhQXR0cmlidXRlcyA9IHRvQXJyYXkyKG5vZGUyLmF0dHJpYnV0ZXMpLnJlZHVjZShmdW5jdGlvbihhY2MsIGF0dHIpIHsKICAgIGlmIChhY2MubmFtZSAhPT0gImNsYXNzIiAmJiBhY2MubmFtZSAhPT0gInN0eWxlIikgewogICAgICBhY2NbYXR0ci5uYW1lXSA9IGF0dHIudmFsdWU7CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIHt9KTsKICByZXR1cm4gZXh0cmFBdHRyaWJ1dGVzOwp9CmZ1bmN0aW9uIGJsYW5rTWV0YSgpIHsKICByZXR1cm4gewogICAgaWNvbk5hbWU6IG51bGwsCiAgICBwcmVmaXg6IG51bGwsCiAgICB0cmFuc2Zvcm06IG1lYW5pbmdsZXNzVHJhbnNmb3JtLAogICAgc3ltYm9sOiBmYWxzZSwKICAgIG1hc2s6IHsKICAgICAgaWNvbk5hbWU6IG51bGwsCiAgICAgIHByZWZpeDogbnVsbCwKICAgICAgcmVzdDogW10KICAgIH0sCiAgICBtYXNrSWQ6IG51bGwsCiAgICBleHRyYTogewogICAgICBjbGFzc2VzOiBbXSwKICAgICAgc3R5bGVzOiB7fSwKICAgICAgYXR0cmlidXRlczoge30KICAgIH0KICB9Owp9CmZ1bmN0aW9uIHBhcnNlTWV0YShub2RlMikgewogIHZhciBwYXJzZXIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHsKICAgIHN0eWxlUGFyc2VyOiB0cnVlCiAgfTsKICB2YXIgX2NsYXNzUGFyc2VyID0gY2xhc3NQYXJzZXIobm9kZTIpLCBpY29uTmFtZSA9IF9jbGFzc1BhcnNlci5pY29uTmFtZSwgcHJlZml4NCA9IF9jbGFzc1BhcnNlci5wcmVmaXgsIGV4dHJhQ2xhc3NlcyA9IF9jbGFzc1BhcnNlci5yZXN0OwogIHZhciBleHRyYUF0dHJpYnV0ZXMgPSBhdHRyaWJ1dGVzUGFyc2VyKG5vZGUyKTsKICB2YXIgcGx1Z2luTWV0YSA9IGNoYWluSG9va3MoInBhcnNlTm9kZUF0dHJpYnV0ZXMiLCB7fSwgbm9kZTIpOwogIHZhciBleHRyYVN0eWxlcyA9IHBhcnNlci5zdHlsZVBhcnNlciA/IHN0eWxlUGFyc2VyKG5vZGUyKSA6IFtdOwogIHJldHVybiBfb2JqZWN0U3ByZWFkMih7CiAgICBpY29uTmFtZSwKICAgIHByZWZpeDogcHJlZml4NCwKICAgIHRyYW5zZm9ybTogbWVhbmluZ2xlc3NUcmFuc2Zvcm0sCiAgICBtYXNrOiB7CiAgICAgIGljb25OYW1lOiBudWxsLAogICAgICBwcmVmaXg6IG51bGwsCiAgICAgIHJlc3Q6IFtdCiAgICB9LAogICAgbWFza0lkOiBudWxsLAogICAgc3ltYm9sOiBmYWxzZSwKICAgIGV4dHJhOiB7CiAgICAgIGNsYXNzZXM6IGV4dHJhQ2xhc3NlcywKICAgICAgc3R5bGVzOiBleHRyYVN0eWxlcywKICAgICAgYXR0cmlidXRlczogZXh0cmFBdHRyaWJ1dGVzCiAgICB9CiAgfSwgcGx1Z2luTWV0YSk7Cn0KZnVuY3Rpb24gZ2VuZXJhdGVNdXRhdGlvbihub2RlMikgewogIHZhciBub2RlTWV0YSA9IGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09ICJuZXN0IiA/IHBhcnNlTWV0YShub2RlMiwgewogICAgc3R5bGVQYXJzZXI6IGZhbHNlCiAgfSkgOiBwYXJzZU1ldGEobm9kZTIpOwogIGlmICh+bm9kZU1ldGEuZXh0cmEuY2xhc3Nlcy5pbmRleE9mKExBWUVSU19URVhUX0NMQVNTTkFNRSkpIHsKICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlTGF5ZXJzVGV4dCIsIG5vZGUyLCBub2RlTWV0YSk7CiAgfSBlbHNlIHsKICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImdlbmVyYXRlU3ZnUmVwbGFjZW1lbnRNdXRhdGlvbiIsIG5vZGUyLCBub2RlTWV0YSk7CiAgfQp9CmZ1bmN0aW9uIGdldEtub3duUHJlZml4ZXMoKSB7CiAgcmV0dXJuIFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoWXQpLCBfdG9Db25zdW1hYmxlQXJyYXkoWnQkMSkpOwp9CmZ1bmN0aW9uIG9uVHJlZShyb290NikgewogIHZhciBjYWxsYmFjayA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogbnVsbDsKICBpZiAoIUlTX0RPTSkgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogIHZhciBodG1sQ2xhc3NMaXN0ID0gRE9DVU1FTlQuZG9jdW1lbnRFbGVtZW50LmNsYXNzTGlzdDsKICB2YXIgaGNsQWRkID0gZnVuY3Rpb24gaGNsQWRkMihzdWZmaXgpIHsKICAgIHJldHVybiBodG1sQ2xhc3NMaXN0LmFkZCgiIi5jb25jYXQoSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCAiLSIpLmNvbmNhdChzdWZmaXgpKTsKICB9OwogIHZhciBoY2xSZW1vdmUgPSBmdW5jdGlvbiBoY2xSZW1vdmUyKHN1ZmZpeCkgewogICAgcmV0dXJuIGh0bWxDbGFzc0xpc3QucmVtb3ZlKCIiLmNvbmNhdChIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MsICItIikuY29uY2F0KHN1ZmZpeCkpOwogIH07CiAgdmFyIHByZWZpeGVzID0gY29uZmlnMi5hdXRvRmV0Y2hTdmcgPyBnZXRLbm93blByZWZpeGVzKCkgOiBRLmNvbmNhdChPYmplY3Qua2V5cyhzdHlsZXMkMikpOwogIGlmICghcHJlZml4ZXMuaW5jbHVkZXMoImZhIikpIHsKICAgIHByZWZpeGVzLnB1c2goImZhIik7CiAgfQogIHZhciBwcmVmaXhlc0RvbVF1ZXJ5ID0gWyIuIi5jb25jYXQoTEFZRVJTX1RFWFRfQ0xBU1NOQU1FLCAiOm5vdChbIikuY29uY2F0KERBVEFfRkFfSTJTVkcsICJdKSIpXS5jb25jYXQocHJlZml4ZXMubWFwKGZ1bmN0aW9uKHAkJDEpIHsKICAgIHJldHVybiAiLiIuY29uY2F0KHAkJDEsICI6bm90KFsiKS5jb25jYXQoREFUQV9GQV9JMlNWRywgIl0pIik7CiAgfSkpLmpvaW4oIiwgIik7CiAgaWYgKHByZWZpeGVzRG9tUXVlcnkubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBjYW5kaWRhdGVzID0gW107CiAgdHJ5IHsKICAgIGNhbmRpZGF0ZXMgPSB0b0FycmF5Mihyb290Ni5xdWVyeVNlbGVjdG9yQWxsKHByZWZpeGVzRG9tUXVlcnkpKTsKICB9IGNhdGNoIChlJCQxKSB7CiAgfQogIGlmIChjYW5kaWRhdGVzLmxlbmd0aCA+IDApIHsKICAgIGhjbEFkZCgicGVuZGluZyIpOwogICAgaGNsUmVtb3ZlKCJjb21wbGV0ZSIpOwogIH0gZWxzZSB7CiAgICByZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCk7CiAgfQogIHZhciBtYXJrMiA9IHBlcmYuYmVnaW4oIm9uVHJlZSIpOwogIHZhciBtdXRhdGlvbnMgPSBjYW5kaWRhdGVzLnJlZHVjZShmdW5jdGlvbihhY2MsIG5vZGUyKSB7CiAgICB0cnkgewogICAgICB2YXIgbXV0YXRpb24gPSBnZW5lcmF0ZU11dGF0aW9uKG5vZGUyKTsKICAgICAgaWYgKG11dGF0aW9uKSB7CiAgICAgICAgYWNjLnB1c2gobXV0YXRpb24pOwogICAgICB9CiAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgIGlmICghUFJPRFVDVElPTikgewogICAgICAgIGlmIChlJCQxLm5hbWUgPT09ICJNaXNzaW5nSWNvbiIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSQkMSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICByZXR1cm4gYWNjOwogIH0sIFtdKTsKICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgUHJvbWlzZS5hbGwobXV0YXRpb25zKS50aGVuKGZ1bmN0aW9uKHJlc29sdmVkTXV0YXRpb25zKSB7CiAgICAgIHBlcmZvcm0ocmVzb2x2ZWRNdXRhdGlvbnMsIGZ1bmN0aW9uKCkgewogICAgICAgIGhjbEFkZCgiYWN0aXZlIik7CiAgICAgICAgaGNsQWRkKCJjb21wbGV0ZSIpOwogICAgICAgIGhjbFJlbW92ZSgicGVuZGluZyIpOwogICAgICAgIGlmICh0eXBlb2YgY2FsbGJhY2sgPT09ICJmdW5jdGlvbiIpIGNhbGxiYWNrKCk7CiAgICAgICAgbWFyazIoKTsKICAgICAgICByZXNvbHZlMigpOwogICAgICB9KTsKICAgIH0pLmNhdGNoKGZ1bmN0aW9uKGUkJDEpIHsKICAgICAgbWFyazIoKTsKICAgICAgcmVqZWN0KGUkJDEpOwogICAgfSk7CiAgfSk7Cn0KZnVuY3Rpb24gb25Ob2RlKG5vZGUyKSB7CiAgdmFyIGNhbGxiYWNrID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiBudWxsOwogIGdlbmVyYXRlTXV0YXRpb24obm9kZTIpLnRoZW4oZnVuY3Rpb24obXV0YXRpb24pIHsKICAgIGlmIChtdXRhdGlvbikgewogICAgICBwZXJmb3JtKFttdXRhdGlvbl0sIGNhbGxiYWNrKTsKICAgIH0KICB9KTsKfQpmdW5jdGlvbiByZXNvbHZlSWNvbnMobmV4dDIpIHsKICByZXR1cm4gZnVuY3Rpb24obWF5YmVJY29uRGVmaW5pdGlvbikgewogICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgdmFyIGljb25EZWZpbml0aW9uID0gKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pLmljb24gPyBtYXliZUljb25EZWZpbml0aW9uIDogZmluZEljb25EZWZpbml0aW9uKG1heWJlSWNvbkRlZmluaXRpb24gfHwge30pOwogICAgdmFyIG1hc2sgPSBwYXJhbXMyLm1hc2s7CiAgICBpZiAobWFzaykgewogICAgICBtYXNrID0gKG1hc2sgfHwge30pLmljb24gPyBtYXNrIDogZmluZEljb25EZWZpbml0aW9uKG1hc2sgfHwge30pOwogICAgfQogICAgcmV0dXJuIG5leHQyKGljb25EZWZpbml0aW9uLCBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgcGFyYW1zMiksIHt9LCB7CiAgICAgIG1hc2sKICAgIH0pKTsKICB9Owp9CmZ1bmN0aW9uIGhleFZhbHVlRnJvbUNvbnRlbnQoY29udGVudDMpIHsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgcmV0dXJuIHRvSGV4KF90b0NvbnN1bWFibGVBcnJheShjbGVhbmVkKVswXSB8fCAiIik7Cn0KZnVuY3Rpb24gaXNTZWNvbmRhcnlMYXllcihzdHlsZXMzKSB7CiAgdmFyIGhhc1N0eWxpc3RpY1NldCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC1mZWF0dXJlLXNldHRpbmdzIikuaW5jbHVkZXMoInNzMDEiKTsKICB2YXIgY29udGVudDMgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICB2YXIgY2xlYW5lZCA9IGNvbnRlbnQzLnJlcGxhY2UoQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCAiIik7CiAgdmFyIGNvZGVQb2ludCA9IGNsZWFuZWQuY29kZVBvaW50QXQoMCk7CiAgdmFyIGlzUHJlcGVuZFRlbiA9IGNvZGVQb2ludCA+PSBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRVswXSAmJiBjb2RlUG9pbnQgPD0gU0VDT05EQVJZX1VOSUNPREVfUkFOR0VbMV07CiAgdmFyIGlzRG91YmxlZCA9IGNsZWFuZWQubGVuZ3RoID09PSAyID8gY2xlYW5lZFswXSA9PT0gY2xlYW5lZFsxXSA6IGZhbHNlOwogIHJldHVybiBpc1ByZXBlbmRUZW4gfHwgaXNEb3VibGVkIHx8IGhhc1N0eWxpc3RpY1NldDsKfQpmdW5jdGlvbiBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCkgewogIHZhciBmb250RmFtaWx5U2FuaXRpemVkID0gZm9udEZhbWlseS5yZXBsYWNlKC9eWyciXXxbJyJdJC9nLCAiIikudG9Mb3dlckNhc2UoKTsKICB2YXIgZm9udFdlaWdodEludGVnZXIgPSBwYXJzZUludChmb250V2VpZ2h0KTsKICB2YXIgZm9udFdlaWdodFNhbml0aXplZCA9IGlzTmFOKGZvbnRXZWlnaHRJbnRlZ2VyKSA/ICJub3JtYWwiIDogZm9udFdlaWdodEludGVnZXI7CiAgcmV0dXJuIChGT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2ZvbnRGYW1pbHlTYW5pdGl6ZWRdIHx8IHt9KVtmb250V2VpZ2h0U2FuaXRpemVkXSB8fCBGT05UX0ZBTUlMWV9XRUlHSFRfRkFMTEJBQ0tbZm9udEZhbWlseVNhbml0aXplZF07Cn0KZnVuY3Rpb24gcmVwbGFjZUZvclBvc2l0aW9uKG5vZGUyLCBwb3NpdGlvbjMpIHsKICB2YXIgcGVuZGluZ0F0dHJpYnV0ZSA9ICIiLmNvbmNhdChEQVRBX0ZBX1BTRVVET19FTEVNRU5UX1BFTkRJTkcpLmNvbmNhdChwb3NpdGlvbjMucmVwbGFjZSgiOiIsICItIikpOwogIHJldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlMiwgcmVqZWN0KSB7CiAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUpICE9PSBudWxsKSB7CiAgICAgIHJldHVybiByZXNvbHZlMigpOwogICAgfQogICAgdmFyIGNoaWxkcmVuMiA9IHRvQXJyYXkyKG5vZGUyLmNoaWxkcmVuKTsKICAgIHZhciBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudCA9IGNoaWxkcmVuMi5maWx0ZXIoZnVuY3Rpb24oYyQkMSkgewogICAgICByZXR1cm4gYyQkMS5nZXRBdHRyaWJ1dGUoREFUQV9GQV9QU0VVRE9fRUxFTUVOVCkgPT09IHBvc2l0aW9uMzsKICAgIH0pWzBdOwogICAgdmFyIHN0eWxlczMgPSBXSU5ET1cuZ2V0Q29tcHV0ZWRTdHlsZShub2RlMiwgcG9zaXRpb24zKTsKICAgIHZhciBmb250RmFtaWx5ID0gc3R5bGVzMy5nZXRQcm9wZXJ0eVZhbHVlKCJmb250LWZhbWlseSIpOwogICAgdmFyIGZvbnRGYW1pbHlNYXRjaCA9IGZvbnRGYW1pbHkubWF0Y2goRk9OVF9GQU1JTFlfUEFUVEVSTik7CiAgICB2YXIgZm9udFdlaWdodCA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiZm9udC13ZWlnaHQiKTsKICAgIHZhciBjb250ZW50MyA9IHN0eWxlczMuZ2V0UHJvcGVydHlWYWx1ZSgiY29udGVudCIpOwogICAgaWYgKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50ICYmICFmb250RmFtaWx5TWF0Y2gpIHsKICAgICAgbm9kZTIucmVtb3ZlQ2hpbGQoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpOwogICAgICByZXR1cm4gcmVzb2x2ZTIoKTsKICAgIH0gZWxzZSBpZiAoZm9udEZhbWlseU1hdGNoICYmIGNvbnRlbnQzICE9PSAibm9uZSIgJiYgY29udGVudDMgIT09ICIiKSB7CiAgICAgIHZhciBfY29udGVudDIgPSBzdHlsZXMzLmdldFByb3BlcnR5VmFsdWUoImNvbnRlbnQiKTsKICAgICAgdmFyIHByZWZpeDQgPSBnZXRQcmVmaXgoZm9udEZhbWlseSwgZm9udFdlaWdodCk7CiAgICAgIHZhciBoZXhWYWx1ZSA9IGhleFZhbHVlRnJvbUNvbnRlbnQoX2NvbnRlbnQyKTsKICAgICAgdmFyIGlzVjQgPSBmb250RmFtaWx5TWF0Y2hbMF0uc3RhcnRzV2l0aCgiRm9udEF3ZXNvbWUiKTsKICAgICAgdmFyIGlzU2Vjb25kYXJ5ID0gaXNTZWNvbmRhcnlMYXllcihzdHlsZXMzKTsKICAgICAgdmFyIGljb25OYW1lID0gYnlVbmljb2RlKHByZWZpeDQsIGhleFZhbHVlKTsKICAgICAgdmFyIGljb25JZGVudGlmaWVyID0gaWNvbk5hbWU7CiAgICAgIGlmIChpc1Y0KSB7CiAgICAgICAgdmFyIGljb25OYW1lNCA9IGJ5T2xkVW5pY29kZShoZXhWYWx1ZSk7CiAgICAgICAgaWYgKGljb25OYW1lNC5pY29uTmFtZSAmJiBpY29uTmFtZTQucHJlZml4KSB7CiAgICAgICAgICBpY29uTmFtZSA9IGljb25OYW1lNC5pY29uTmFtZTsKICAgICAgICAgIHByZWZpeDQgPSBpY29uTmFtZTQucHJlZml4OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoaWNvbk5hbWUgJiYgIWlzU2Vjb25kYXJ5ICYmICghYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQgfHwgYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQuZ2V0QXR0cmlidXRlKERBVEFfUFJFRklYKSAhPT0gcHJlZml4NCB8fCBhbHJlYWR5UHJvY2Vzc2VkUHNldWRvRWxlbWVudC5nZXRBdHRyaWJ1dGUoREFUQV9JQ09OKSAhPT0gaWNvbklkZW50aWZpZXIpKSB7CiAgICAgICAgbm9kZTIuc2V0QXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUsIGljb25JZGVudGlmaWVyKTsKICAgICAgICBpZiAoYWxyZWFkeVByb2Nlc3NlZFBzZXVkb0VsZW1lbnQpIHsKICAgICAgICAgIG5vZGUyLnJlbW92ZUNoaWxkKGFscmVhZHlQcm9jZXNzZWRQc2V1ZG9FbGVtZW50KTsKICAgICAgICB9CiAgICAgICAgdmFyIG1ldGEgPSBibGFua01ldGEoKTsKICAgICAgICB2YXIgZXh0cmEgPSBtZXRhLmV4dHJhOwogICAgICAgIGV4dHJhLmF0dHJpYnV0ZXNbREFUQV9GQV9QU0VVRE9fRUxFTUVOVF0gPSBwb3NpdGlvbjM7CiAgICAgICAgZmluZEljb24oaWNvbk5hbWUsIHByZWZpeDQpLnRoZW4oZnVuY3Rpb24obWFpbikgewogICAgICAgICAgdmFyIGFic3RyYWN0ID0gbWFrZUlubGluZVN2Z0Fic3RyYWN0KF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtZXRhKSwge30sIHsKICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICBtYWluLAogICAgICAgICAgICAgIG1hc2s6IGVtcHR5Q2Fub25pY2FsSWNvbigpCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWU6IGljb25JZGVudGlmaWVyLAogICAgICAgICAgICBleHRyYSwKICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgICB2YXIgZWxlbWVudDQgPSBET0NVTUVOVC5jcmVhdGVFbGVtZW50TlMoImh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiwgInN2ZyIpOwogICAgICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gIjo6YmVmb3JlIikgewogICAgICAgICAgICBub2RlMi5pbnNlcnRCZWZvcmUoZWxlbWVudDQsIG5vZGUyLmZpcnN0Q2hpbGQpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgICAgICAgfQogICAgICAgICAgZWxlbWVudDQub3V0ZXJIVE1MID0gYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGEkJDEpIHsKICAgICAgICAgICAgcmV0dXJuIHRvSHRtbDIoYSQkMSk7CiAgICAgICAgICB9KS5qb2luKCJcbiIpOwogICAgICAgICAgbm9kZTIucmVtb3ZlQXR0cmlidXRlKHBlbmRpbmdBdHRyaWJ1dGUpOwogICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICB9KS5jYXRjaChyZWplY3QpOwogICAgICB9IGVsc2UgewogICAgICAgIHJlc29sdmUyKCk7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIHJlc29sdmUyKCk7CiAgICB9CiAgfSk7Cn0KZnVuY3Rpb24gcmVwbGFjZTQobm9kZTIpIHsKICByZXR1cm4gUHJvbWlzZS5hbGwoW3JlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgIjo6YmVmb3JlIiksIHJlcGxhY2VGb3JQb3NpdGlvbihub2RlMiwgIjo6YWZ0ZXIiKV0pOwp9CmZ1bmN0aW9uIHByb2Nlc3NhYmxlKG5vZGUyKSB7CiAgcmV0dXJuIG5vZGUyLnBhcmVudE5vZGUgIT09IGRvY3VtZW50LmhlYWQgJiYgIX5UQUdOQU1FU19UT19TS0lQX0ZPUl9QU0VVRE9FTEVNRU5UUy5pbmRleE9mKG5vZGUyLnRhZ05hbWUudG9VcHBlckNhc2UoKSkgJiYgIW5vZGUyLmdldEF0dHJpYnV0ZShEQVRBX0ZBX1BTRVVET19FTEVNRU5UKSAmJiAoIW5vZGUyLnBhcmVudE5vZGUgfHwgbm9kZTIucGFyZW50Tm9kZS50YWdOYW1lICE9PSAic3ZnIik7Cn0KZnVuY3Rpb24gc2VhcmNoUHNldWRvRWxlbWVudHMocm9vdDYpIHsKICB2YXIgdXNlQXNOb2RlTGlzdCA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogZmFsc2U7CiAgaWYgKCFJU19ET00pIHJldHVybjsKICB2YXIgbm9kZUxpc3Q7CiAgaWYgKHVzZUFzTm9kZUxpc3QpIHsKICAgIG5vZGVMaXN0ID0gcm9vdDY7CiAgfSBlbHNlIGlmIChjb25maWcyLnNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4pIHsKICAgIG5vZGVMaXN0ID0gcm9vdDYucXVlcnlTZWxlY3RvckFsbCgiKiIpOwogIH0gZWxzZSB7CiAgICB2YXIgc2VsZWN0b3JTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgdmFyIF9pdGVyYXRvcjIgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihkb2N1bWVudC5zdHlsZVNoZWV0cyksIF9zdGVwMjsKICAgIHRyeSB7CiAgICAgIGZvciAoX2l0ZXJhdG9yMi5zKCk7ICEoX3N0ZXAyID0gX2l0ZXJhdG9yMi5uKCkpLmRvbmU7ICkgewogICAgICAgIHZhciBzdHlsZXNoZWV0ID0gX3N0ZXAyLnZhbHVlOwogICAgICAgIHRyeSB7CiAgICAgICAgICB2YXIgX2l0ZXJhdG9yMyA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHN0eWxlc2hlZXQuY3NzUnVsZXMpLCBfc3RlcDM7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBmb3IgKF9pdGVyYXRvcjMucygpOyAhKF9zdGVwMyA9IF9pdGVyYXRvcjMubigpKS5kb25lOyApIHsKICAgICAgICAgICAgICB2YXIgcnVsZSA9IF9zdGVwMy52YWx1ZTsKICAgICAgICAgICAgICB2YXIgcGFyc2VkU2VsZWN0b3JzID0gcGFyc2VDU1NSdWxlRm9yUHNldWRvcyhydWxlLnNlbGVjdG9yVGV4dCk7CiAgICAgICAgICAgICAgdmFyIF9pdGVyYXRvcjQgPSBfY3JlYXRlRm9yT2ZJdGVyYXRvckhlbHBlcihwYXJzZWRTZWxlY3RvcnMpLCBfc3RlcDQ7CiAgICAgICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgICAgIGZvciAoX2l0ZXJhdG9yNC5zKCk7ICEoX3N0ZXA0ID0gX2l0ZXJhdG9yNC5uKCkpLmRvbmU7ICkgewogICAgICAgICAgICAgICAgICB2YXIgc2VsZWN0b3IgPSBfc3RlcDQudmFsdWU7CiAgICAgICAgICAgICAgICAgIHNlbGVjdG9yU2V0LmFkZChzZWxlY3Rvcik7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgICAgICBfaXRlcmF0b3I0LmUoZXJyKTsKICAgICAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICAgICAgX2l0ZXJhdG9yNC5mKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgICAgX2l0ZXJhdG9yMy5lKGVycik7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICBfaXRlcmF0b3IzLmYoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlJCQxKSB7CiAgICAgICAgICBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50c1dhcm5pbmdzKSB7CiAgICAgICAgICAgIGNvbnNvbGUud2FybigiRm9udCBBd2Vzb21lOiBjYW5ub3QgcGFyc2Ugc3R5bGVzaGVldDogIi5jb25jYXQoc3R5bGVzaGVldC5ocmVmLCAiICgiKS5jb25jYXQoZSQkMS5tZXNzYWdlLCAnKVxuSWYgaXQgZGVjbGFyZXMgYW55IEZvbnQgQXdlc29tZSBDU1MgcHNldWRvLWVsZW1lbnRzLCB0aGV5IHdpbGwgbm90IGJlIHJlbmRlcmVkIGFzIFNWRyBpY29ucy4gQWRkIGNyb3Nzb3JpZ2luPSJhbm9ueW1vdXMiIHRvIHRoZSA8bGluaz4sIGVuYWJsZSBzZWFyY2hQc2V1ZG9FbGVtZW50c0Z1bGxTY2FuIGZvciBzbG93ZXIgYnV0IG1vcmUgdGhvcm91Z2ggRE9NIHBhcnNpbmcsIG9yIHN1cHByZXNzIHRoaXMgd2FybmluZyBieSBzZXR0aW5nIHNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MgdG8gZmFsc2UuJykpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIF9pdGVyYXRvcjIuZShlcnIpOwogICAgfSBmaW5hbGx5IHsKICAgICAgX2l0ZXJhdG9yMi5mKCk7CiAgICB9CiAgICBpZiAoIXNlbGVjdG9yU2V0LnNpemUpIHJldHVybjsKICAgIHZhciBjbGVhblNlbGVjdG9ycyA9IEFycmF5LmZyb20oc2VsZWN0b3JTZXQpLmpvaW4oIiwgIik7CiAgICB0cnkgewogICAgICBub2RlTGlzdCA9IHJvb3Q2LnF1ZXJ5U2VsZWN0b3JBbGwoY2xlYW5TZWxlY3RvcnMpOwogICAgfSBjYXRjaCAoX3VudXNlZCkgewogICAgfQogIH0KICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZTIsIHJlamVjdCkgewogICAgdmFyIG9wZXJhdGlvbnMgPSB0b0FycmF5Mihub2RlTGlzdCkuZmlsdGVyKHByb2Nlc3NhYmxlKS5tYXAocmVwbGFjZTQpOwogICAgdmFyIGVuZDMgPSBwZXJmLmJlZ2luKCJzZWFyY2hQc2V1ZG9FbGVtZW50cyIpOwogICAgZGlzYWJsZU9ic2VydmF0aW9uKCk7CiAgICBQcm9taXNlLmFsbChvcGVyYXRpb25zKS50aGVuKGZ1bmN0aW9uKCkgewogICAgICBlbmQzKCk7CiAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgIHJlc29sdmUyKCk7CiAgICB9KS5jYXRjaChmdW5jdGlvbigpIHsKICAgICAgZW5kMygpOwogICAgICBlbmFibGVPYnNlcnZhdGlvbigpOwogICAgICByZWplY3QoKTsKICAgIH0pOwogIH0pOwp9CmZ1bmN0aW9uIGZpbGxCbGFjayhhYnN0cmFjdCkgewogIHZhciBmb3JjZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAxICYmIGFyZ3VtZW50c1sxXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzFdIDogdHJ1ZTsKICBpZiAoYWJzdHJhY3QuYXR0cmlidXRlcyAmJiAoYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsIHx8IGZvcmNlKSkgewogICAgYWJzdHJhY3QuYXR0cmlidXRlcy5maWxsID0gImJsYWNrIjsKICB9CiAgcmV0dXJuIGFic3RyYWN0Owp9CmZ1bmN0aW9uIGRlR3JvdXAoYWJzdHJhY3QpIHsKICBpZiAoYWJzdHJhY3QudGFnID09PSAiZyIpIHsKICAgIHJldHVybiBhYnN0cmFjdC5jaGlsZHJlbjsKICB9IGVsc2UgewogICAgcmV0dXJuIFthYnN0cmFjdF07CiAgfQp9CnZhciBub29wMiwgX1dJTkRPVywgX0RPQ1VNRU5ULCBfTVVUQVRJT05fT0JTRVJWRVIsIF9QRVJGT1JNQU5DRSwgX3JlZiwgX3JlZiR1c2VyQWdlbnQsIHVzZXJBZ2VudCwgV0lORE9XLCBET0NVTUVOVCwgTVVUQVRJT05fT0JTRVJWRVIsIFBFUkZPUk1BTkNFLCBJU19CUk9XU0VSLCBJU19ET00sIElTX0lFLCBfZHQsIEUyLCBfMywgcSwgSDMsIFEsIGkxMCwgdDgsIGQ1LCBsNSwgZjYsIG4xMiwgaDgsIG8xMiwgdTYsIGczLCBzOCwgeTQsIG01LCBlMTAsIHA2LCBhNCwgdzIsIHgyLCBiNCwgYzEwLCBJMiwgRiwgdjQsIFM0LCBBMiwgUDMsIGozLCBCMiwgTjMsIGszLCBEMywgVDIsIEMyLCBXLCBLMiwgUjMsIHJ0LCBkdDIsIGd0LCBDdCwgVXQsIF90LCBZdCwgcXQsIEh0LCBMMiwgcjEwLCBVLCBKLCAkdCwgb2wsIGRsLCBmbCwgdWwsIF9tbCwgbCQxLCBmJDEsIG4kMSwgbyQxLCB1JDEsIHMkMSwgaCQxLCBnJDEsIHkkMSwgZSQxLCBtJDEsIHAkMSwgYSQxLCB3JDEsIGIkMSwgciQxLCBjJDEsIGkkMSwgeCQxLCBJJDEsIEYkMSwgdiQxLCBTJDEsIEEkMSwgUCQxLCBqJDEsIEIkMSwgTiQxLCBrJDEsIEQkMSwgQyQxLCBUJDEsIEwkMSwgVyQxLCBSJDEsIEskMSwgVSQxLCBKJDEsIG1sJDEsIEUkMSwgZCQxLCBfJDEsIE0kMSwgcnQkMSwgJHQkMSwgejIsIEh0JDEsIFkkMSwgWnQkMSwgRyQxLCBPJDEsIFYkMSwgJCQxLCB0bywgcm8sIE5BTUVTUEFDRV9JREVOVElGSUVSLCBVTklUU19JTl9HUklELCBERUZBVUxUX0NTU19QUkVGSVgsIERFRkFVTFRfUkVQTEFDRU1FTlRfQ0xBU1MsIERBVEFfRkFfSTJTVkcsIERBVEFfRkFfUFNFVURPX0VMRU1FTlQsIERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORywgREFUQV9QUkVGSVgsIERBVEFfSUNPTiwgSFRNTF9DTEFTU19JMlNWR19CQVNFX0NMQVNTLCBNVVRBVElPTl9BUFBST0FDSF9BU1lOQywgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMsIFBTRVVET19FTEVNRU5UUywgUFJPRFVDVElPTiwgX1BSRUZJWF9UT19TVFlMRSwgUFJFRklYX1RPX1NUWUxFLCBfU1RZTEVfVE9fUFJFRklYLCBTVFlMRV9UT19QUkVGSVgsIF9QUkVGSVhfVE9fTE9OR19TVFlMRSwgUFJFRklYX1RPX0xPTkdfU1RZTEUsIF9MT05HX1NUWUxFX1RPX1BSRUZJWCwgTE9OR19TVFlMRV9UT19QUkVGSVgsIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOLCBMQVlFUlNfVEVYVF9DTEFTU05BTUUsIEZPTlRfRkFNSUxZX1BBVFRFUk4sIF9GT05UX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfV0VJR0hUX1RPX1BSRUZJWCwgQVRUUklCVVRFU19XQVRDSEVEX0ZPUl9NVVRBVElPTiwgRFVPVE9ORV9DTEFTU0VTLCBSRVNFUlZFRF9DTEFTU0VTLCBpbml0aWFsLCBfZGVmYXVsdCwgX2NvbmZpZywgY29uZmlnMiwgX29uQ2hhbmdlQ2IsIGQkMiwgbWVhbmluZ2xlc3NUcmFuc2Zvcm0sIGlkUG9vbCwgYmFzZVN0eWxlcywgX2Nzc0luc2VydGVkLCBJbmplY3RDU1MsIHckMiwgbmFtZXNwYWNlLCBmdW5jdGlvbnMsIF9saXN0ZW5lciwgbG9hZGVkLCBiaW5kSW50ZXJuYWw0LCByZWR1Y2UzLCBNT05PLCBEVU8sIG1vZGVybk1hdGNoZXMsIGxlZ2FjeU1hdGNoZXMsIHN0eWxlczIsIHNoaW1zLCBGQU1JTFlfTkFNRVMsIFBSRUZJWEVTX0ZPUl9GQU1JTFksIF9kZWZhdWx0VXNhYmxlUHJlZml4LCBfYnlVbmljb2RlLCBfYnlMaWdhdHVyZSwgX2J5T2xkTmFtZSwgX2J5T2xkVW5pY29kZSwgX2J5QWxpYXMsIGJ1aWxkLCBlbXB0eUNhbm9uaWNhbEljb24sIF9mYUNvbWJpbmVkQ2xhc3NlcywgbmV3Q2Fub25pY2FsRmFtaWxpZXMsIG5ld0Nhbm9uaWNhbFN0eWxlcywgTGlicmFyeSwgX3BsdWdpbnMsIF9ob29rcywgcHJvdmlkZXJzLCBkZWZhdWx0UHJvdmlkZXJLZXlzLCBsaWJyYXJ5LCBub0F1dG8sIGRvbSwgcGFyc2U3LCBhcGksIGF1dG9SZXBsYWNlLCBzdHlsZXMkMSwgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4sIG5vb3AkMSwgcCQyLCBwcmVhbWJsZSwgYmVnaW4sIGVuZCwgcGVyZiwgbm9vcCQyLCBtdXRhdG9ycywgZGlzYWJsZWQsIG1vLCBzdHlsZXMkMiwgcmVuZGVyLCBSZXBsYWNlRWxlbWVudHMsIExheWVycywgTGF5ZXJzQ291bnRlciwgTGF5ZXJzVGV4dCwgQ0xFQU5fQ09OVEVOVF9QQVRURVJOLCBTRUNPTkRBUllfVU5JQ09ERV9SQU5HRSwgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVgsIEZPTlRfRkFNSUxZX1dFSUdIVF9GQUxMQkFDSywgaGFzUHNldWRvRWxlbWVudCwgcGFyc2VDU1NSdWxlRm9yUHNldWRvcywgUHNldWRvRWxlbWVudHMsIF91bndhdGNoZWQsIE11dGF0aW9uT2JzZXJ2ZXIkMSwgcGFyc2VUcmFuc2Zvcm1TdHJpbmcsIFBvd2VyVHJhbnNmb3JtcywgQUxMX1NQQUNFLCBNYXNrcywgTWlzc2luZ0ljb25JbmRpY2F0b3IsIFN2Z1N5bWJvbHMsIHBsdWdpbnMsIG5vQXV0byQxLCBjb25maWckMSwgbGlicmFyeSQxLCBkb20kMSwgcGFyc2UkMSwgZmluZEljb25EZWZpbml0aW9uJDEsIHRvSHRtbCQxLCBpY29uMiwgbGF5ZXIsIHRleHQ4LCBjb3VudGVyLCBhdHRyczsKdmFyIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZm9udGF3ZXNvbWUtc3ZnLWNvcmVANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mb250YXdlc29tZS1zdmctY29yZS9pbmRleC5tanMiKCkgewogICAgbm9vcDIgPSBmdW5jdGlvbiBub29wMygpIHsKICAgIH07CiAgICBfV0lORE9XID0ge307CiAgICBfRE9DVU1FTlQgPSB7fTsKICAgIF9NVVRBVElPTl9PQlNFUlZFUiA9IG51bGw7CiAgICBfUEVSRk9STUFOQ0UgPSB7CiAgICAgIG1hcms6IG5vb3AyLAogICAgICBtZWFzdXJlOiBub29wMgogICAgfTsKICAgIHRyeSB7CiAgICAgIGlmICh0eXBlb2Ygd2luZG93ICE9PSAidW5kZWZpbmVkIikgX1dJTkRPVyA9IHdpbmRvdzsKICAgICAgaWYgKHR5cGVvZiBkb2N1bWVudCAhPT0gInVuZGVmaW5lZCIpIF9ET0NVTUVOVCA9IGRvY3VtZW50OwogICAgICBpZiAodHlwZW9mIE11dGF0aW9uT2JzZXJ2ZXIgIT09ICJ1bmRlZmluZWQiKSBfTVVUQVRJT05fT0JTRVJWRVIgPSBNdXRhdGlvbk9ic2VydmVyOwogICAgICBpZiAodHlwZW9mIHBlcmZvcm1hbmNlICE9PSAidW5kZWZpbmVkIikgX1BFUkZPUk1BTkNFID0gcGVyZm9ybWFuY2U7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgIH0KICAgIF9yZWYgPSBfV0lORE9XLm5hdmlnYXRvciB8fCB7fSwgX3JlZiR1c2VyQWdlbnQgPSBfcmVmLnVzZXJBZ2VudCwgdXNlckFnZW50ID0gX3JlZiR1c2VyQWdlbnQgPT09IHZvaWQgMCA/ICIiIDogX3JlZiR1c2VyQWdlbnQ7CiAgICBXSU5ET1cgPSBfV0lORE9XOwogICAgRE9DVU1FTlQgPSBfRE9DVU1FTlQ7CiAgICBNVVRBVElPTl9PQlNFUlZFUiA9IF9NVVRBVElPTl9PQlNFUlZFUjsKICAgIFBFUkZPUk1BTkNFID0gX1BFUkZPUk1BTkNFOwogICAgSVNfQlJPV1NFUiA9ICEhV0lORE9XLmRvY3VtZW50OwogICAgSVNfRE9NID0gISFET0NVTUVOVC5kb2N1bWVudEVsZW1lbnQgJiYgISFET0NVTUVOVC5oZWFkICYmIHR5cGVvZiBET0NVTUVOVC5hZGRFdmVudExpc3RlbmVyID09PSAiZnVuY3Rpb24iICYmIHR5cGVvZiBET0NVTUVOVC5jcmVhdGVFbGVtZW50ID09PSAiZnVuY3Rpb24iOwogICAgSVNfSUUgPSB+dXNlckFnZW50LmluZGV4T2YoIk1TSUUiKSB8fCB+dXNlckFnZW50LmluZGV4T2YoIlRyaWRlbnQvIik7CiAgICBFMiA9IC9mYShrfGtkfHN8cnxsfHR8ZHxkcnxkbHxkdHxifHNscnxzbHByfHdzYnx0bHxuc3xuZHN8ZXN8anJ8amZyfGpkcnx1c2J8dWZzYnx1ZHNifGNyfHNzfHNyfHNsfHN0fHNkc3xzZHJ8c2RsfHNkdCk/W1wtXCBdLywgXzMgPSAvRm9udCA/QXdlc29tZSA/KFs1NjcgXSopKFNvbGlkfFJlZ3VsYXJ8TGlnaHR8VGhpbnxEdW90b25lfEJyYW5kc3xGcmVlfFByb3xTaGFycCBEdW90b25lfFNoYXJwfEtpdHxOb3Rkb2cgRHVvfE5vdGRvZ3xDaGlzZWx8RXRjaHxUaHVtYnByaW50fEplbGx5IEZpbGx8SmVsbHkgRHVvfEplbGx5fFV0aWxpdHl8VXRpbGl0eSBGaWxsfFV0aWxpdHkgRHVvfFNsYWIgUHJlc3N8U2xhYnxXaGl0ZWJvYXJkKT8uKi9pOwogICAgcSA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgIGZhOiAic29saWQiLAogICAgICAgIGZhczogInNvbGlkIiwKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhbDogImxpZ2h0IiwKICAgICAgICAiZmEtbGlnaHQiOiAibGlnaHQiLAogICAgICAgIGZhdDogInRoaW4iLAogICAgICAgICJmYS10aGluIjogInRoaW4iLAogICAgICAgIGZhYjogImJyYW5kcyIsCiAgICAgICAgImZhLWJyYW5kcyI6ICJicmFuZHMiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYWQ6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICAiZmEtZHVvdG9uZSI6ICJzb2xpZCIsCiAgICAgICAgZmFkcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhZGw6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYWR0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICBmYTogInNvbGlkIiwKICAgICAgICBmYXNzOiAic29saWQiLAogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFzcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2w6ICJsaWdodCIsCiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXN0OiAidGhpbiIsCiAgICAgICAgImZhLXRoaW4iOiAidGhpbiIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgZmE6ICJzb2xpZCIsCiAgICAgICAgZmFzZHM6ICJzb2xpZCIsCiAgICAgICAgImZhLXNvbGlkIjogInNvbGlkIiwKICAgICAgICBmYXNkcjogInJlZ3VsYXIiLAogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhc2RsOiAibGlnaHQiLAogICAgICAgICJmYS1saWdodCI6ICJsaWdodCIsCiAgICAgICAgZmFzZHQ6ICJ0aGluIiwKICAgICAgICAiZmEtdGhpbiI6ICJ0aGluIgogICAgICB9LAogICAgICBzbGFiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFzbHI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYXNscHI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgImZhLWxpZ2h0IjogImxpZ2h0IiwKICAgICAgICBmYXRsOiAibGlnaHQiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhd3NiOiAic2VtaWJvbGQiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgICJmYS1zb2xpZCI6ICJzb2xpZCIsCiAgICAgICAgZmFuczogInNvbGlkIgogICAgICB9LAogICAgICAibm90ZG9nLWR1byI6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhbmRzOiAic29saWQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICAiZmEtc29saWQiOiAic29saWQiLAogICAgICAgIGZhZXM6ICJzb2xpZCIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJyZWd1bGFyIiwKICAgICAgICBmYWpyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWZpbGwiOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFqZnI6ICJyZWd1bGFyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgICJmYS1yZWd1bGFyIjogInJlZ3VsYXIiLAogICAgICAgIGZhamRyOiAicmVndWxhciIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgImZhLXJlZ3VsYXIiOiAicmVndWxhciIsCiAgICAgICAgZmFjcjogInJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHV0aWxpdHk6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdXNiOiAic2VtaWJvbGQiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAic2VtaWJvbGQiLAogICAgICAgIGZhdWRzYjogInNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgICJmYS1zZW1pYm9sZCI6ICJzZW1pYm9sZCIsCiAgICAgICAgZmF1ZnNiOiAic2VtaWJvbGQiCiAgICAgIH0KICAgIH0sIEgzID0gewogICAgICBHUk9VUDogImR1b3RvbmUtZ3JvdXAiLAogICAgICBTV0FQX09QQUNJVFk6ICJzd2FwLW9wYWNpdHkiLAogICAgICBQUklNQVJZOiAicHJpbWFyeSIsCiAgICAgIFNFQ09OREFSWTogInNlY29uZGFyeSIKICAgIH0sIFEgPSBbImZhLWNsYXNzaWMiLCAiZmEtZHVvdG9uZSIsICJmYS1zaGFycCIsICJmYS1zaGFycC1kdW90b25lIiwgImZhLXRodW1icHJpbnQiLCAiZmEtd2hpdGVib2FyZCIsICJmYS1ub3Rkb2ciLCAiZmEtbm90ZG9nLWR1byIsICJmYS1jaGlzZWwiLCAiZmEtZXRjaCIsICJmYS1qZWxseSIsICJmYS1qZWxseS1maWxsIiwgImZhLWplbGx5LWR1byIsICJmYS1zbGFiIiwgImZhLXNsYWItcHJlc3MiLCAiZmEtdXRpbGl0eSIsICJmYS11dGlsaXR5LWR1byIsICJmYS11dGlsaXR5LWZpbGwiXTsKICAgIGkxMCA9ICJjbGFzc2ljIiwgdDggPSAiZHVvdG9uZSIsIGQ1ID0gInNoYXJwIiwgbDUgPSAic2hhcnAtZHVvdG9uZSIsIGY2ID0gImNoaXNlbCIsIG4xMiA9ICJldGNoIiwgaDggPSAiamVsbHkiLCBvMTIgPSAiamVsbHktZHVvIiwgdTYgPSAiamVsbHktZmlsbCIsIGczID0gIm5vdGRvZyIsIHM4ID0gIm5vdGRvZy1kdW8iLCB5NCA9ICJzbGFiIiwgbTUgPSAic2xhYi1wcmVzcyIsIGUxMCA9ICJ0aHVtYnByaW50IiwgcDYgPSAidXRpbGl0eSIsIGE0ID0gInV0aWxpdHktZHVvIiwgdzIgPSAidXRpbGl0eS1maWxsIiwgeDIgPSAid2hpdGVib2FyZCIsIGI0ID0gIkNsYXNzaWMiLCBjMTAgPSAiRHVvdG9uZSIsIEkyID0gIlNoYXJwIiwgRiA9ICJTaGFycCBEdW90b25lIiwgdjQgPSAiQ2hpc2VsIiwgUzQgPSAiRXRjaCIsIEEyID0gIkplbGx5IiwgUDMgPSAiSmVsbHkgRHVvIiwgajMgPSAiSmVsbHkgRmlsbCIsIEIyID0gIk5vdGRvZyIsIE4zID0gIk5vdGRvZyBEdW8iLCBrMyA9ICJTbGFiIiwgRDMgPSAiU2xhYiBQcmVzcyIsIFQyID0gIlRodW1icHJpbnQiLCBDMiA9ICJVdGlsaXR5IiwgVyA9ICJVdGlsaXR5IER1byIsIEsyID0gIlV0aWxpdHkgRmlsbCIsIFIzID0gIldoaXRlYm9hcmQiLCBydCA9IFtpMTAsIHQ4LCBkNSwgbDUsIGY2LCBuMTIsIGg4LCBvMTIsIHU2LCBnMywgczgsIHk0LCBtNSwgZTEwLCBwNiwgYTQsIHcyLCB4Ml0sIGR0MiA9IChfZHQgPSB7fSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kdCwgaTEwLCBiNCksIHQ4LCBjMTApLCBkNSwgSTIpLCBsNSwgRiksIGY2LCB2NCksIG4xMiwgUzQpLCBoOCwgQTIpLCBvMTIsIFAzKSwgdTYsIGozKSwgZzMsIEIyKSwgX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZHQsIHM4LCBOMyksIHk0LCBrMyksIG01LCBEMyksIGUxMCwgVDIpLCBwNiwgQzIpLCBhNCwgVyksIHcyLCBLMiksIHgyLCBSMykpOwogICAgZ3QgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiLAogICAgICAgIDEwMDogImZhdCIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgIDkwMDogImZhZCIsCiAgICAgICAgNDAwOiAiZmFkciIsCiAgICAgICAgMzAwOiAiZmFkbCIsCiAgICAgICAgMTAwOiAiZmFkdCIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICA5MDA6ICJmYXNzIiwKICAgICAgICA0MDA6ICJmYXNyIiwKICAgICAgICAzMDA6ICJmYXNsIiwKICAgICAgICAxMDA6ICJmYXN0IgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICA5MDA6ICJmYXNkcyIsCiAgICAgICAgNDAwOiAiZmFzZHIiLAogICAgICAgIDMwMDogImZhc2RsIiwKICAgICAgICAxMDA6ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgIDQwMDogImZhc2xyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICA0MDA6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICA2MDA6ICJmYXdzYiIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIDMwMDogImZhdGwiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgIDkwMDogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIDkwMDogImZhbmRzIgogICAgICB9LAogICAgICBldGNoOiB7CiAgICAgICAgOTAwOiAiZmFlcyIKICAgICAgfSwKICAgICAgY2hpc2VsOiB7CiAgICAgICAgNDAwOiAiZmFjciIKICAgICAgfSwKICAgICAgamVsbHk6IHsKICAgICAgICA0MDA6ICJmYWpyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICA0MDA6ICJmYWpmciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICA0MDA6ICJmYWpkciIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIDYwMDogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgNjAwOiAiZmF1ZHNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgIDYwMDogImZhdWZzYiIKICAgICAgfQogICAgfTsKICAgIEN0ID0gewogICAgICAiRm9udCBBd2Vzb21lIDcgRnJlZSI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFBybyI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiLAogICAgICAgIDEwMDogImZhdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEJyYW5kcyI6IHsKICAgICAgICA0MDA6ICJmYWIiLAogICAgICAgIG5vcm1hbDogImZhYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFkIiwKICAgICAgICA0MDA6ICJmYWRyIiwKICAgICAgICBub3JtYWw6ICJmYWRyIiwKICAgICAgICAzMDA6ICJmYWRsIiwKICAgICAgICAxMDA6ICJmYWR0IgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOiB7CiAgICAgICAgOTAwOiAiZmFzcyIsCiAgICAgICAgNDAwOiAiZmFzciIsCiAgICAgICAgbm9ybWFsOiAiZmFzciIsCiAgICAgICAgMzAwOiAiZmFzbCIsCiAgICAgICAgMTAwOiAiZmFzdCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOiB7CiAgICAgICAgOTAwOiAiZmFzZHMiLAogICAgICAgIDQwMDogImZhc2RyIiwKICAgICAgICBub3JtYWw6ICJmYXNkciIsCiAgICAgICAgMzAwOiAiZmFzZGwiLAogICAgICAgIDEwMDogImZhc2R0IgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgSmVsbHkiOiB7CiAgICAgICAgNDAwOiAiZmFqciIsCiAgICAgICAgbm9ybWFsOiAiZmFqciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IEplbGx5IEZpbGwiOiB7CiAgICAgICAgNDAwOiAiZmFqZnIiLAogICAgICAgIG5vcm1hbDogImZhamZyIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRHVvIjogewogICAgICAgIDQwMDogImZhamRyIiwKICAgICAgICBub3JtYWw6ICJmYWpkciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFNsYWIiOiB7CiAgICAgICAgNDAwOiAiZmFzbHIiLAogICAgICAgIG5vcm1hbDogImZhc2xyIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgU2xhYiBQcmVzcyI6IHsKICAgICAgICA0MDA6ICJmYXNscHIiLAogICAgICAgIG5vcm1hbDogImZhc2xwciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFRodW1icHJpbnQiOiB7CiAgICAgICAgMzAwOiAiZmF0bCIsCiAgICAgICAgbm9ybWFsOiAiZmF0bCIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IE5vdGRvZyI6IHsKICAgICAgICA5MDA6ICJmYW5zIiwKICAgICAgICBub3JtYWw6ICJmYW5zIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byI6IHsKICAgICAgICA5MDA6ICJmYW5kcyIsCiAgICAgICAgbm9ybWFsOiAiZmFuZHMiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBFdGNoIjogewogICAgICAgIDkwMDogImZhZXMiLAogICAgICAgIG5vcm1hbDogImZhZXMiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBDaGlzZWwiOiB7CiAgICAgICAgNDAwOiAiZmFjciIsCiAgICAgICAgbm9ybWFsOiAiZmFjciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFdoaXRlYm9hcmQiOiB7CiAgICAgICAgNjAwOiAiZmF3c2IiLAogICAgICAgIG5vcm1hbDogImZhd3NiIgogICAgICB9LAogICAgICAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSI6IHsKICAgICAgICA2MDA6ICJmYXVzYiIsCiAgICAgICAgbm9ybWFsOiAiZmF1c2IiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI6IHsKICAgICAgICA2MDA6ICJmYXVkc2IiLAogICAgICAgIG5vcm1hbDogImZhdWRzYiIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA3IFV0aWxpdHkgRmlsbCI6IHsKICAgICAgICA2MDA6ICJmYXVmc2IiLAogICAgICAgIG5vcm1hbDogImZhdWZzYiIKICAgICAgfQogICAgfTsKICAgIFV0ID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoW1siY2xhc3NpYyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIiwgImJyYW5kcyJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbImR1b3RvbmUiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFkIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIiwgInJlZ3VsYXIiLCAibGlnaHQiLCAidGhpbiJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNoYXJwIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhc3MiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsic2hhcnAtZHVvdG9uZSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNkcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCIsICJyZWd1bGFyIiwgImxpZ2h0IiwgInRoaW4iXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJjaGlzZWwiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFjciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJldGNoIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhZXMiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNvbGlkIiwKICAgICAgc3R5bGVJZHM6IFsic29saWQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogOTAwCiAgICB9XSwgWyJqZWxseSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbImplbGx5LWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYWpkciIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAicmVndWxhciIsCiAgICAgIHN0eWxlSWRzOiBbInJlZ3VsYXIiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNDAwCiAgICB9XSwgWyJqZWxseS1maWxsIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhamZyIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJyZWd1bGFyIiwKICAgICAgc3R5bGVJZHM6IFsicmVndWxhciJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA0MDAKICAgIH1dLCBbIm5vdGRvZyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYW5zIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzb2xpZCIsCiAgICAgIHN0eWxlSWRzOiBbInNvbGlkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDkwMAogICAgfV0sIFsibm90ZG9nLWR1byIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYW5kcyIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic29saWQiLAogICAgICBzdHlsZUlkczogWyJzb2xpZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA5MDAKICAgIH1dLCBbInNsYWIiLCB7CiAgICAgIGRlZmF1bHRTaG9ydFByZWZpeElkOiAiZmFzbHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsic2xhYi1wcmVzcyIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXNscHIiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInJlZ3VsYXIiLAogICAgICBzdHlsZUlkczogWyJyZWd1bGFyIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDQwMAogICAgfV0sIFsidGh1bWJwcmludCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXRsIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJsaWdodCIsCiAgICAgIHN0eWxlSWRzOiBbImxpZ2h0Il0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDMwMAogICAgfV0sIFsidXRpbGl0eSIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dLCBbInV0aWxpdHktZHVvIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhdWRzYiIsCiAgICAgIGRlZmF1bHRTdHlsZUlkOiAic2VtaWJvbGQiLAogICAgICBzdHlsZUlkczogWyJzZW1pYm9sZCJdLAogICAgICBmdXR1cmVTdHlsZUlkczogW10sCiAgICAgIGRlZmF1bHRGb250V2VpZ2h0OiA2MDAKICAgIH1dLCBbInV0aWxpdHktZmlsbCIsIHsKICAgICAgZGVmYXVsdFNob3J0UHJlZml4SWQ6ICJmYXVmc2IiLAogICAgICBkZWZhdWx0U3R5bGVJZDogInNlbWlib2xkIiwKICAgICAgc3R5bGVJZHM6IFsic2VtaWJvbGQiXSwKICAgICAgZnV0dXJlU3R5bGVJZHM6IFtdLAogICAgICBkZWZhdWx0Rm9udFdlaWdodDogNjAwCiAgICB9XSwgWyJ3aGl0ZWJvYXJkIiwgewogICAgICBkZWZhdWx0U2hvcnRQcmVmaXhJZDogImZhd3NiIiwKICAgICAgZGVmYXVsdFN0eWxlSWQ6ICJzZW1pYm9sZCIsCiAgICAgIHN0eWxlSWRzOiBbInNlbWlib2xkIl0sCiAgICAgIGZ1dHVyZVN0eWxlSWRzOiBbXSwKICAgICAgZGVmYXVsdEZvbnRXZWlnaHQ6IDYwMAogICAgfV1dKSwgX3QgPSB7CiAgICAgIGNoaXNlbDogewogICAgICAgIHJlZ3VsYXI6ICJmYWNyIgogICAgICB9LAogICAgICBjbGFzc2ljOiB7CiAgICAgICAgYnJhbmRzOiAiZmFiIiwKICAgICAgICBsaWdodDogImZhbCIsCiAgICAgICAgcmVndWxhcjogImZhciIsCiAgICAgICAgc29saWQ6ICJmYXMiLAogICAgICAgIHRoaW46ICJmYXQiCiAgICAgIH0sCiAgICAgIGR1b3RvbmU6IHsKICAgICAgICBsaWdodDogImZhZGwiLAogICAgICAgIHJlZ3VsYXI6ICJmYWRyIiwKICAgICAgICBzb2xpZDogImZhZCIsCiAgICAgICAgdGhpbjogImZhZHQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICBzb2xpZDogImZhZXMiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgcmVndWxhcjogImZhanIiCiAgICAgIH0sCiAgICAgICJqZWxseS1kdW8iOiB7CiAgICAgICAgcmVndWxhcjogImZhamRyIgogICAgICB9LAogICAgICAiamVsbHktZmlsbCI6IHsKICAgICAgICByZWd1bGFyOiAiZmFqZnIiCiAgICAgIH0sCiAgICAgIG5vdGRvZzogewogICAgICAgIHNvbGlkOiAiZmFucyIKICAgICAgfSwKICAgICAgIm5vdGRvZy1kdW8iOiB7CiAgICAgICAgc29saWQ6ICJmYW5kcyIKICAgICAgfSwKICAgICAgc2hhcnA6IHsKICAgICAgICBsaWdodDogImZhc2wiLAogICAgICAgIHJlZ3VsYXI6ICJmYXNyIiwKICAgICAgICBzb2xpZDogImZhc3MiLAogICAgICAgIHRoaW46ICJmYXN0IgogICAgICB9LAogICAgICAic2hhcnAtZHVvdG9uZSI6IHsKICAgICAgICBsaWdodDogImZhc2RsIiwKICAgICAgICByZWd1bGFyOiAiZmFzZHIiLAogICAgICAgIHNvbGlkOiAiZmFzZHMiLAogICAgICAgIHRoaW46ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgIHJlZ3VsYXI6ICJmYXNsciIKICAgICAgfSwKICAgICAgInNsYWItcHJlc3MiOiB7CiAgICAgICAgcmVndWxhcjogImZhc2xwciIKICAgICAgfSwKICAgICAgdGh1bWJwcmludDogewogICAgICAgIGxpZ2h0OiAiZmF0bCIKICAgICAgfSwKICAgICAgdXRpbGl0eTogewogICAgICAgIHNlbWlib2xkOiAiZmF1c2IiCiAgICAgIH0sCiAgICAgICJ1dGlsaXR5LWR1byI6IHsKICAgICAgICBzZW1pYm9sZDogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICBzZW1pYm9sZDogImZhdWZzYiIKICAgICAgfSwKICAgICAgd2hpdGVib2FyZDogewogICAgICAgIHNlbWlib2xkOiAiZmF3c2IiCiAgICAgIH0KICAgIH07CiAgICBZdCA9IFsiZmFrIiwgImZhLWtpdCIsICJmYWtkIiwgImZhLWtpdC1kdW90b25lIl0sIHF0ID0gewogICAgICBraXQ6IHsKICAgICAgICBmYWs6ICJraXQiLAogICAgICAgICJmYS1raXQiOiAia2l0IgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgZmFrZDogImtpdC1kdW90b25lIiwKICAgICAgICAiZmEta2l0LWR1b3RvbmUiOiAia2l0LWR1b3RvbmUiCiAgICAgIH0KICAgIH0sIEh0ID0gWyJraXQiXTsKICAgIEwyID0gImtpdCIsIHIxMCA9ICJraXQtZHVvdG9uZSIsIFUgPSAiS2l0IiwgSiA9ICJLaXQgRHVvdG9uZSIsICR0ID0gX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eSh7fSwgTDIsIFUpLCByMTAsIEopOwogICAgb2wgPSB7CiAgICAgIGtpdDogewogICAgICAgICJmYS1raXQiOiAiZmFrIgogICAgICB9LAogICAgICAia2l0LWR1b3RvbmUiOiB7CiAgICAgICAgImZhLWtpdC1kdW90b25lIjogImZha2QiCiAgICAgIH0KICAgIH07CiAgICBkbCA9IHsKICAgICAgIkZvbnQgQXdlc29tZSBLaXQiOiB7CiAgICAgICAgNDAwOiAiZmFrIiwKICAgICAgICBub3JtYWw6ICJmYWsiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgS2l0IER1b3RvbmUiOiB7CiAgICAgICAgNDAwOiAiZmFrZCIsCiAgICAgICAgbm9ybWFsOiAiZmFrZCIKICAgICAgfQogICAgfSwgZmwgPSB7CiAgICAgIGtpdDogewogICAgICAgIGZhazogImZhLWtpdCIKICAgICAgfSwKICAgICAgImtpdC1kdW90b25lIjogewogICAgICAgIGZha2Q6ICJmYS1raXQtZHVvdG9uZSIKICAgICAgfQogICAgfTsKICAgIHVsID0gewogICAgICBraXQ6IHsKICAgICAgICBraXQ6ICJmYWsiCiAgICAgIH0sCiAgICAgICJraXQtZHVvdG9uZSI6IHsKICAgICAgICAia2l0LWR1b3RvbmUiOiAiZmFrZCIKICAgICAgfQogICAgfTsKICAgIGwkMSA9IHsKICAgICAgR1JPVVA6ICJkdW90b25lLWdyb3VwIiwKICAgICAgU1dBUF9PUEFDSVRZOiAic3dhcC1vcGFjaXR5IiwKICAgICAgUFJJTUFSWTogInByaW1hcnkiLAogICAgICBTRUNPTkRBUlk6ICJzZWNvbmRhcnkiCiAgICB9LCBmJDEgPSBbImZhLWNsYXNzaWMiLCAiZmEtZHVvdG9uZSIsICJmYS1zaGFycCIsICJmYS1zaGFycC1kdW90b25lIiwgImZhLXRodW1icHJpbnQiLCAiZmEtd2hpdGVib2FyZCIsICJmYS1ub3Rkb2ciLCAiZmEtbm90ZG9nLWR1byIsICJmYS1jaGlzZWwiLCAiZmEtZXRjaCIsICJmYS1qZWxseSIsICJmYS1qZWxseS1maWxsIiwgImZhLWplbGx5LWR1byIsICJmYS1zbGFiIiwgImZhLXNsYWItcHJlc3MiLCAiZmEtdXRpbGl0eSIsICJmYS11dGlsaXR5LWR1byIsICJmYS11dGlsaXR5LWZpbGwiXTsKICAgIG4kMSA9ICJjbGFzc2ljIiwgbyQxID0gImR1b3RvbmUiLCB1JDEgPSAic2hhcnAiLCBzJDEgPSAic2hhcnAtZHVvdG9uZSIsIGgkMSA9ICJjaGlzZWwiLCBnJDEgPSAiZXRjaCIsIHkkMSA9ICJqZWxseSIsIGUkMSA9ICJqZWxseS1kdW8iLCBtJDEgPSAiamVsbHktZmlsbCIsIHAkMSA9ICJub3Rkb2ciLCBhJDEgPSAibm90ZG9nLWR1byIsIHckMSA9ICJzbGFiIiwgYiQxID0gInNsYWItcHJlc3MiLCByJDEgPSAidGh1bWJwcmludCIsIGMkMSA9ICJ1dGlsaXR5IiwgaSQxID0gInV0aWxpdHktZHVvIiwgeCQxID0gInV0aWxpdHktZmlsbCIsIEkkMSA9ICJ3aGl0ZWJvYXJkIiwgRiQxID0gIkNsYXNzaWMiLCB2JDEgPSAiRHVvdG9uZSIsIFMkMSA9ICJTaGFycCIsIEEkMSA9ICJTaGFycCBEdW90b25lIiwgUCQxID0gIkNoaXNlbCIsIGokMSA9ICJFdGNoIiwgQiQxID0gIkplbGx5IiwgTiQxID0gIkplbGx5IER1byIsIGskMSA9ICJKZWxseSBGaWxsIiwgRCQxID0gIk5vdGRvZyIsIEMkMSA9ICJOb3Rkb2cgRHVvIiwgVCQxID0gIlNsYWIiLCBMJDEgPSAiU2xhYiBQcmVzcyIsIFckMSA9ICJUaHVtYnByaW50IiwgUiQxID0gIlV0aWxpdHkiLCBLJDEgPSAiVXRpbGl0eSBEdW8iLCBVJDEgPSAiVXRpbGl0eSBGaWxsIiwgSiQxID0gIldoaXRlYm9hcmQiLCBtbCQxID0gKF9tbCA9IHt9LCBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21sLCBuJDEsIEYkMSksIG8kMSwgdiQxKSwgdSQxLCBTJDEpLCBzJDEsIEEkMSksIGgkMSwgUCQxKSwgZyQxLCBqJDEpLCB5JDEsIEIkMSksIGUkMSwgTiQxKSwgbSQxLCBrJDEpLCBwJDEsIEQkMSksIF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KF9kZWZpbmVQcm9wZXJ0eShfZGVmaW5lUHJvcGVydHkoX21sLCBhJDEsIEMkMSksIHckMSwgVCQxKSwgYiQxLCBMJDEpLCByJDEsIFckMSksIGMkMSwgUiQxKSwgaSQxLCBLJDEpLCB4JDEsIFUkMSksIEkkMSwgSiQxKSk7CiAgICBFJDEgPSAia2l0IiwgZCQxID0gImtpdC1kdW90b25lIiwgXyQxID0gIktpdCIsIE0kMSA9ICJLaXQgRHVvdG9uZSIsIHJ0JDEgPSBfZGVmaW5lUHJvcGVydHkoX2RlZmluZVByb3BlcnR5KHt9LCBFJDEsIF8kMSksIGQkMSwgTSQxKTsKICAgICR0JDEgPSB7CiAgICAgIGNsYXNzaWM6IHsKICAgICAgICAiZmEtYnJhbmRzIjogImZhYiIsCiAgICAgICAgImZhLWR1b3RvbmUiOiAiZmFkIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFsIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXIiLAogICAgICAgICJmYS1zb2xpZCI6ICJmYXMiLAogICAgICAgICJmYS10aGluIjogImZhdCIKICAgICAgfSwKICAgICAgZHVvdG9uZTogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhZHIiLAogICAgICAgICJmYS1saWdodCI6ICJmYWRsIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYWR0IgogICAgICB9LAogICAgICBzaGFycDogewogICAgICAgICJmYS1zb2xpZCI6ICJmYXNzIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNyIiwKICAgICAgICAiZmEtbGlnaHQiOiAiZmFzbCIsCiAgICAgICAgImZhLXRoaW4iOiAiZmFzdCIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhc2RzIiwKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNkciIsCiAgICAgICAgImZhLWxpZ2h0IjogImZhc2RsIiwKICAgICAgICAiZmEtdGhpbiI6ICJmYXNkdCIKICAgICAgfSwKICAgICAgc2xhYjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhc2xyIgogICAgICB9LAogICAgICAic2xhYi1wcmVzcyI6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYXNscHIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAiZmF3c2IiCiAgICAgIH0sCiAgICAgIHRodW1icHJpbnQ6IHsKICAgICAgICAiZmEtbGlnaHQiOiAiZmF0bCIKICAgICAgfSwKICAgICAgbm90ZG9nOiB7CiAgICAgICAgImZhLXNvbGlkIjogImZhbnMiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgICJmYS1zb2xpZCI6ICJmYW5kcyIKICAgICAgfSwKICAgICAgZXRjaDogewogICAgICAgICJmYS1zb2xpZCI6ICJmYWVzIgogICAgICB9LAogICAgICBqZWxseTogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhanIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhamZyIgogICAgICB9LAogICAgICAiamVsbHktZHVvIjogewogICAgICAgICJmYS1yZWd1bGFyIjogImZhamRyIgogICAgICB9LAogICAgICBjaGlzZWw6IHsKICAgICAgICAiZmEtcmVndWxhciI6ICJmYWNyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdXNiIgogICAgICB9LAogICAgICAidXRpbGl0eS1kdW8iOiB7CiAgICAgICAgImZhLXNlbWlib2xkIjogImZhdWRzYiIKICAgICAgfSwKICAgICAgInV0aWxpdHktZmlsbCI6IHsKICAgICAgICAiZmEtc2VtaWJvbGQiOiAiZmF1ZnNiIgogICAgICB9CiAgICB9LCB6MiA9IHsKICAgICAgY2xhc3NpYzogWyJmYXMiLCAiZmFyIiwgImZhbCIsICJmYXQiLCAiZmFkIl0sCiAgICAgIGR1b3RvbmU6IFsiZmFkciIsICJmYWRsIiwgImZhZHQiXSwKICAgICAgc2hhcnA6IFsiZmFzcyIsICJmYXNyIiwgImZhc2wiLCAiZmFzdCJdLAogICAgICAic2hhcnAtZHVvdG9uZSI6IFsiZmFzZHMiLCAiZmFzZHIiLCAiZmFzZGwiLCAiZmFzZHQiXSwKICAgICAgc2xhYjogWyJmYXNsciJdLAogICAgICAic2xhYi1wcmVzcyI6IFsiZmFzbHByIl0sCiAgICAgIHdoaXRlYm9hcmQ6IFsiZmF3c2IiXSwKICAgICAgdGh1bWJwcmludDogWyJmYXRsIl0sCiAgICAgIG5vdGRvZzogWyJmYW5zIl0sCiAgICAgICJub3Rkb2ctZHVvIjogWyJmYW5kcyJdLAogICAgICBldGNoOiBbImZhZXMiXSwKICAgICAgamVsbHk6IFsiZmFqciJdLAogICAgICAiamVsbHktZmlsbCI6IFsiZmFqZnIiXSwKICAgICAgImplbGx5LWR1byI6IFsiZmFqZHIiXSwKICAgICAgY2hpc2VsOiBbImZhY3IiXSwKICAgICAgdXRpbGl0eTogWyJmYXVzYiJdLAogICAgICAidXRpbGl0eS1kdW8iOiBbImZhdWRzYiJdLAogICAgICAidXRpbGl0eS1maWxsIjogWyJmYXVmc2IiXQogICAgfSwgSHQkMSA9IHsKICAgICAgY2xhc3NpYzogewogICAgICAgIGZhYjogImZhLWJyYW5kcyIsCiAgICAgICAgZmFkOiAiZmEtZHVvdG9uZSIsCiAgICAgICAgZmFsOiAiZmEtbGlnaHQiLAogICAgICAgIGZhcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhczogImZhLXNvbGlkIiwKICAgICAgICBmYXQ6ICJmYS10aGluIgogICAgICB9LAogICAgICBkdW90b25lOiB7CiAgICAgICAgZmFkcjogImZhLXJlZ3VsYXIiLAogICAgICAgIGZhZGw6ICJmYS1saWdodCIsCiAgICAgICAgZmFkdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgIHNoYXJwOiB7CiAgICAgICAgZmFzczogImZhLXNvbGlkIiwKICAgICAgICBmYXNyOiAiZmEtcmVndWxhciIsCiAgICAgICAgZmFzbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXN0OiAiZmEtdGhpbiIKICAgICAgfSwKICAgICAgInNoYXJwLWR1b3RvbmUiOiB7CiAgICAgICAgZmFzZHM6ICJmYS1zb2xpZCIsCiAgICAgICAgZmFzZHI6ICJmYS1yZWd1bGFyIiwKICAgICAgICBmYXNkbDogImZhLWxpZ2h0IiwKICAgICAgICBmYXNkdDogImZhLXRoaW4iCiAgICAgIH0sCiAgICAgIHNsYWI6IHsKICAgICAgICBmYXNscjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJzbGFiLXByZXNzIjogewogICAgICAgIGZhc2xwcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIHdoaXRlYm9hcmQ6IHsKICAgICAgICBmYXdzYjogImZhLXNlbWlib2xkIgogICAgICB9LAogICAgICB0aHVtYnByaW50OiB7CiAgICAgICAgZmF0bDogImZhLWxpZ2h0IgogICAgICB9LAogICAgICBub3Rkb2c6IHsKICAgICAgICBmYW5zOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgICJub3Rkb2ctZHVvIjogewogICAgICAgIGZhbmRzOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgIGV0Y2g6IHsKICAgICAgICBmYWVzOiAiZmEtc29saWQiCiAgICAgIH0sCiAgICAgIGplbGx5OiB7CiAgICAgICAgZmFqcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgICJqZWxseS1maWxsIjogewogICAgICAgIGZhamZyOiAiZmEtcmVndWxhciIKICAgICAgfSwKICAgICAgImplbGx5LWR1byI6IHsKICAgICAgICBmYWpkcjogImZhLXJlZ3VsYXIiCiAgICAgIH0sCiAgICAgIGNoaXNlbDogewogICAgICAgIGZhY3I6ICJmYS1yZWd1bGFyIgogICAgICB9LAogICAgICB1dGlsaXR5OiB7CiAgICAgICAgZmF1c2I6ICJmYS1zZW1pYm9sZCIKICAgICAgfSwKICAgICAgInV0aWxpdHktZHVvIjogewogICAgICAgIGZhdWRzYjogImZhLXNlbWlib2xkIgogICAgICB9LAogICAgICAidXRpbGl0eS1maWxsIjogewogICAgICAgIGZhdWZzYjogImZhLXNlbWlib2xkIgogICAgICB9CiAgICB9LCBZJDEgPSBbImZhLXNvbGlkIiwgImZhLXJlZ3VsYXIiLCAiZmEtbGlnaHQiLCAiZmEtdGhpbiIsICJmYS1kdW90b25lIiwgImZhLWJyYW5kcyIsICJmYS1zZW1pYm9sZCJdLCBadCQxID0gWyJmYSIsICJmYXMiLCAiZmFyIiwgImZhbCIsICJmYXQiLCAiZmFkIiwgImZhZHIiLCAiZmFkbCIsICJmYWR0IiwgImZhYiIsICJmYXNzIiwgImZhc3IiLCAiZmFzbCIsICJmYXN0IiwgImZhc2RzIiwgImZhc2RyIiwgImZhc2RsIiwgImZhc2R0IiwgImZhc2xyIiwgImZhc2xwciIsICJmYXdzYiIsICJmYXRsIiwgImZhbnMiLCAiZmFuZHMiLCAiZmFlcyIsICJmYWpyIiwgImZhamZyIiwgImZhamRyIiwgImZhY3IiLCAiZmF1c2IiLCAiZmF1ZHNiIiwgImZhdWZzYiJdLmNvbmNhdChmJDEsIFkkMSksIEckMSA9IFsic29saWQiLCAicmVndWxhciIsICJsaWdodCIsICJ0aGluIiwgImR1b3RvbmUiLCAiYnJhbmRzIiwgInNlbWlib2xkIl0sIE8kMSA9IFsxLCAyLCAzLCA0LCA1LCA2LCA3LCA4LCA5LCAxMF0sIFYkMSA9IE8kMS5jb25jYXQoWzExLCAxMiwgMTMsIDE0LCAxNSwgMTYsIDE3LCAxOCwgMTksIDIwXSksICQkMSA9IFsiYXciLCAiZnciLCAicHVsbC1sZWZ0IiwgInB1bGwtcmlnaHQiXSwgdG8gPSBbXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KE9iamVjdC5rZXlzKHoyKSksIEckMSwgJCQxLCBbIjJ4cyIsICJ4cyIsICJzbSIsICJsZyIsICJ4bCIsICIyeGwiLCAiYmVhdCIsICJib3JkZXIiLCAiZmFkZSIsICJiZWF0LWZhZGUiLCAiYm91bmNlIiwgImZsaXAtYm90aCIsICJmbGlwLWhvcml6b250YWwiLCAiZmxpcC12ZXJ0aWNhbCIsICJmbGlwIiwgImludmVyc2UiLCAibGF5ZXJzIiwgImxheWVycy1ib3R0b20tbGVmdCIsICJsYXllcnMtYm90dG9tLXJpZ2h0IiwgImxheWVycy1jb3VudGVyIiwgImxheWVycy10ZXh0IiwgImxheWVycy10b3AtbGVmdCIsICJsYXllcnMtdG9wLXJpZ2h0IiwgImxpIiwgInB1bGwtZW5kIiwgInB1bGwtc3RhcnQiLCAicHVsc2UiLCAicm90YXRlLTE4MCIsICJyb3RhdGUtMjcwIiwgInJvdGF0ZS05MCIsICJyb3RhdGUtYnkiLCAic2hha2UiLCAic3Bpbi1wdWxzZSIsICJzcGluLXJldmVyc2UiLCAic3BpbiIsICJzdGFjay0xeCIsICJzdGFjay0yeCIsICJzdGFjayIsICJ1bCIsICJ3aWR0aC1hdXRvIiwgIndpZHRoLWZpeGVkIiwgbCQxLkdST1VQLCBsJDEuU1dBUF9PUEFDSVRZLCBsJDEuUFJJTUFSWSwgbCQxLlNFQ09OREFSWV0pLmNvbmNhdChPJDEubWFwKGZ1bmN0aW9uKHQ5KSB7CiAgICAgIHJldHVybiAiIi5jb25jYXQodDksICJ4Iik7CiAgICB9KSkuY29uY2F0KFYkMS5tYXAoZnVuY3Rpb24odDkpIHsKICAgICAgcmV0dXJuICJ3LSIuY29uY2F0KHQ5KTsKICAgIH0pKTsKICAgIHJvID0gewogICAgICAiRm9udCBBd2Vzb21lIDUgRnJlZSI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIKICAgICAgfSwKICAgICAgIkZvbnQgQXdlc29tZSA1IFBybyI6IHsKICAgICAgICA5MDA6ICJmYXMiLAogICAgICAgIDQwMDogImZhciIsCiAgICAgICAgbm9ybWFsOiAiZmFyIiwKICAgICAgICAzMDA6ICJmYWwiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBCcmFuZHMiOiB7CiAgICAgICAgNDAwOiAiZmFiIiwKICAgICAgICBub3JtYWw6ICJmYWIiCiAgICAgIH0sCiAgICAgICJGb250IEF3ZXNvbWUgNSBEdW90b25lIjogewogICAgICAgIDkwMDogImZhZCIKICAgICAgfQogICAgfTsKICAgIE5BTUVTUEFDRV9JREVOVElGSUVSID0gIl9fX0ZPTlRfQVdFU09NRV9fXyI7CiAgICBVTklUU19JTl9HUklEID0gMTY7CiAgICBERUZBVUxUX0NTU19QUkVGSVggPSAiZmEiOwogICAgREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUyA9ICJzdmctaW5saW5lLS1mYSI7CiAgICBEQVRBX0ZBX0kyU1ZHID0gImRhdGEtZmEtaTJzdmciOwogICAgREFUQV9GQV9QU0VVRE9fRUxFTUVOVCA9ICJkYXRhLWZhLXBzZXVkby1lbGVtZW50IjsKICAgIERBVEFfRkFfUFNFVURPX0VMRU1FTlRfUEVORElORyA9ICJkYXRhLWZhLXBzZXVkby1lbGVtZW50LXBlbmRpbmciOwogICAgREFUQV9QUkVGSVggPSAiZGF0YS1wcmVmaXgiOwogICAgREFUQV9JQ09OID0gImRhdGEtaWNvbiI7CiAgICBIVE1MX0NMQVNTX0kyU1ZHX0JBU0VfQ0xBU1MgPSAiZm9udGF3ZXNvbWUtaTJzdmciOwogICAgTVVUQVRJT05fQVBQUk9BQ0hfQVNZTkMgPSAiYXN5bmMiOwogICAgVEFHTkFNRVNfVE9fU0tJUF9GT1JfUFNFVURPRUxFTUVOVFMgPSBbIkhUTUwiLCAiSEVBRCIsICJTVFlMRSIsICJTQ1JJUFQiXTsKICAgIFBTRVVET19FTEVNRU5UUyA9IFsiOjpiZWZvcmUiLCAiOjphZnRlciIsICI6YmVmb3JlIiwgIjphZnRlciJdOwogICAgUFJPRFVDVElPTiA9IChmdW5jdGlvbigpIHsKICAgICAgdHJ5IHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0gY2F0Y2ggKGUkJDEpIHsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgIH0pKCk7CiAgICBfUFJFRklYX1RPX1NUWUxFID0gX29iamVjdFNwcmVhZDIoe30sIHEpOwogICAgX1BSRUZJWF9UT19TVFlMRVtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgImZhLWR1b3RvbmUiOiAiZHVvdG9uZSIKICAgIH0pLCBxW2kxMF0pLCBxdFsia2l0Il0pLCBxdFsia2l0LWR1b3RvbmUiXSk7CiAgICBQUkVGSVhfVE9fU1RZTEUgPSBmYW1pbHlQcm94eShfUFJFRklYX1RPX1NUWUxFKTsKICAgIF9TVFlMRV9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMih7fSwgX3QpOwogICAgX1NUWUxFX1RPX1BSRUZJWFtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIHsKICAgICAgZHVvdG9uZTogImZhZCIKICAgIH0pLCBfU1RZTEVfVE9fUFJFRklYW2kxMF0pLCB1bFsia2l0Il0pLCB1bFsia2l0LWR1b3RvbmUiXSk7CiAgICBTVFlMRV9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfU1RZTEVfVE9fUFJFRklYKTsKICAgIF9QUkVGSVhfVE9fTE9OR19TVFlMRSA9IF9vYmplY3RTcHJlYWQyKHt9LCBIdCQxKTsKICAgIF9QUkVGSVhfVE9fTE9OR19TVFlMRVtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9QUkVGSVhfVE9fTE9OR19TVFlMRVtpMTBdKSwgZmxbImtpdCJdKTsKICAgIFBSRUZJWF9UT19MT05HX1NUWUxFID0gZmFtaWx5UHJveHkoX1BSRUZJWF9UT19MT05HX1NUWUxFKTsKICAgIF9MT05HX1NUWUxFX1RPX1BSRUZJWCA9IF9vYmplY3RTcHJlYWQyKHt9LCAkdCQxKTsKICAgIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdID0gX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIF9MT05HX1NUWUxFX1RPX1BSRUZJWFtpMTBdKSwgb2xbImtpdCJdKTsKICAgIExPTkdfU1RZTEVfVE9fUFJFRklYID0gZmFtaWx5UHJveHkoX0xPTkdfU1RZTEVfVE9fUFJFRklYKTsKICAgIElDT05fU0VMRUNUSU9OX1NZTlRBWF9QQVRURVJOID0gRTI7CiAgICBMQVlFUlNfVEVYVF9DTEFTU05BTUUgPSAiZmEtbGF5ZXJzLXRleHQiOwogICAgRk9OVF9GQU1JTFlfUEFUVEVSTiA9IF8zOwogICAgX0ZPTlRfV0VJR0hUX1RPX1BSRUZJWCA9IF9vYmplY3RTcHJlYWQyKHt9LCBndCk7CiAgICBGT05UX1dFSUdIVF9UT19QUkVGSVggPSBmYW1pbHlQcm94eShfRk9OVF9XRUlHSFRfVE9fUFJFRklYKTsKICAgIEFUVFJJQlVURVNfV0FUQ0hFRF9GT1JfTVVUQVRJT04gPSBbImNsYXNzIiwgImRhdGEtcHJlZml4IiwgImRhdGEtaWNvbiIsICJkYXRhLWZhLXRyYW5zZm9ybSIsICJkYXRhLWZhLW1hc2siXTsKICAgIERVT1RPTkVfQ0xBU1NFUyA9IEgzOwogICAgUkVTRVJWRURfQ0xBU1NFUyA9IFtdLmNvbmNhdChfdG9Db25zdW1hYmxlQXJyYXkoSHQpLCBfdG9Db25zdW1hYmxlQXJyYXkodG8pKTsKICAgIGluaXRpYWwgPSBXSU5ET1cuRm9udEF3ZXNvbWVDb25maWcgfHwge307CiAgICBpZiAoRE9DVU1FTlQgJiYgdHlwZW9mIERPQ1VNRU5ULnF1ZXJ5U2VsZWN0b3IgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgYXR0cnMgPSBbWyJkYXRhLWZhbWlseS1wcmVmaXgiLCAiZmFtaWx5UHJlZml4Il0sIFsiZGF0YS1jc3MtcHJlZml4IiwgImNzc1ByZWZpeCJdLCBbImRhdGEtZmFtaWx5LWRlZmF1bHQiLCAiZmFtaWx5RGVmYXVsdCJdLCBbImRhdGEtc3R5bGUtZGVmYXVsdCIsICJzdHlsZURlZmF1bHQiXSwgWyJkYXRhLXJlcGxhY2VtZW50LWNsYXNzIiwgInJlcGxhY2VtZW50Q2xhc3MiXSwgWyJkYXRhLWF1dG8tcmVwbGFjZS1zdmciLCAiYXV0b1JlcGxhY2VTdmciXSwgWyJkYXRhLWF1dG8tYWRkLWNzcyIsICJhdXRvQWRkQ3NzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzIl0sIFsiZGF0YS1zZWFyY2gtcHNldWRvLWVsZW1lbnRzLXdhcm5pbmdzIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzV2FybmluZ3MiXSwgWyJkYXRhLXNlYXJjaC1wc2V1ZG8tZWxlbWVudHMtZnVsbC1zY2FuIiwgInNlYXJjaFBzZXVkb0VsZW1lbnRzRnVsbFNjYW4iXSwgWyJkYXRhLW9ic2VydmUtbXV0YXRpb25zIiwgIm9ic2VydmVNdXRhdGlvbnMiXSwgWyJkYXRhLW11dGF0ZS1hcHByb2FjaCIsICJtdXRhdGVBcHByb2FjaCJdLCBbImRhdGEta2VlcC1vcmlnaW5hbC1zb3VyY2UiLCAia2VlcE9yaWdpbmFsU291cmNlIl0sIFsiZGF0YS1tZWFzdXJlLXBlcmZvcm1hbmNlIiwgIm1lYXN1cmVQZXJmb3JtYW5jZSJdLCBbImRhdGEtc2hvdy1taXNzaW5nLWljb25zIiwgInNob3dNaXNzaW5nSWNvbnMiXV07CiAgICAgIGF0dHJzLmZvckVhY2goZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICB2YXIgX3JlZjIyID0gX3NsaWNlZFRvQXJyYXkoX3JlZjIsIDIpLCBhdHRyID0gX3JlZjIyWzBdLCBrZXkyID0gX3JlZjIyWzFdOwogICAgICAgIHZhciB2YWwgPSBjb2VyY2UoZ2V0QXR0ckNvbmZpZyhhdHRyKSk7CiAgICAgICAgaWYgKHZhbCAhPT0gdm9pZCAwICYmIHZhbCAhPT0gbnVsbCkgewogICAgICAgICAgaW5pdGlhbFtrZXkyXSA9IHZhbDsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgX2RlZmF1bHQgPSB7CiAgICAgIHN0eWxlRGVmYXVsdDogInNvbGlkIiwKICAgICAgZmFtaWx5RGVmYXVsdDogaTEwLAogICAgICBjc3NQcmVmaXg6IERFRkFVTFRfQ1NTX1BSRUZJWCwKICAgICAgcmVwbGFjZW1lbnRDbGFzczogREVGQVVMVF9SRVBMQUNFTUVOVF9DTEFTUywKICAgICAgYXV0b1JlcGxhY2VTdmc6IHRydWUsCiAgICAgIGF1dG9BZGRDc3M6IHRydWUsCiAgICAgIHNlYXJjaFBzZXVkb0VsZW1lbnRzOiBmYWxzZSwKICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHNXYXJuaW5nczogdHJ1ZSwKICAgICAgc2VhcmNoUHNldWRvRWxlbWVudHNGdWxsU2NhbjogZmFsc2UsCiAgICAgIG9ic2VydmVNdXRhdGlvbnM6IHRydWUsCiAgICAgIG11dGF0ZUFwcHJvYWNoOiAiYXN5bmMiLAogICAgICBrZWVwT3JpZ2luYWxTb3VyY2U6IHRydWUsCiAgICAgIG1lYXN1cmVQZXJmb3JtYW5jZTogZmFsc2UsCiAgICAgIHNob3dNaXNzaW5nSWNvbnM6IHRydWUKICAgIH07CiAgICBpZiAoaW5pdGlhbC5mYW1pbHlQcmVmaXgpIHsKICAgICAgaW5pdGlhbC5jc3NQcmVmaXggPSBpbml0aWFsLmZhbWlseVByZWZpeDsKICAgIH0KICAgIF9jb25maWcgPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgX2RlZmF1bHQpLCBpbml0aWFsKTsKICAgIGlmICghX2NvbmZpZy5hdXRvUmVwbGFjZVN2ZykgX2NvbmZpZy5vYnNlcnZlTXV0YXRpb25zID0gZmFsc2U7CiAgICBjb25maWcyID0ge307CiAgICBPYmplY3Qua2V5cyhfZGVmYXVsdCkuZm9yRWFjaChmdW5jdGlvbihrZXkyKSB7CiAgICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcyLCBrZXkyLCB7CiAgICAgICAgZW51bWVyYWJsZTogdHJ1ZSwKICAgICAgICBzZXQ6IGZ1bmN0aW9uIHNldDModmFsKSB7CiAgICAgICAgICBfY29uZmlnW2tleTJdID0gdmFsOwogICAgICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbihjYikgewogICAgICAgICAgICByZXR1cm4gY2IoY29uZmlnMik7CiAgICAgICAgICB9KTsKICAgICAgICB9LAogICAgICAgIGdldDogZnVuY3Rpb24gZ2V0MigpIHsKICAgICAgICAgIHJldHVybiBfY29uZmlnW2tleTJdOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjb25maWcyLCAiZmFtaWx5UHJlZml4IiwgewogICAgICBlbnVtZXJhYmxlOiB0cnVlLAogICAgICBzZXQ6IGZ1bmN0aW9uIHNldDIodmFsKSB7CiAgICAgICAgX2NvbmZpZy5jc3NQcmVmaXggPSB2YWw7CiAgICAgICAgX29uQ2hhbmdlQ2IuZm9yRWFjaChmdW5jdGlvbihjYikgewogICAgICAgICAgcmV0dXJuIGNiKGNvbmZpZzIpOwogICAgICAgIH0pOwogICAgICB9LAogICAgICBnZXQ6IGZ1bmN0aW9uIGdldCgpIHsKICAgICAgICByZXR1cm4gX2NvbmZpZy5jc3NQcmVmaXg7CiAgICAgIH0KICAgIH0pOwogICAgV0lORE9XLkZvbnRBd2Vzb21lQ29uZmlnID0gY29uZmlnMjsKICAgIF9vbkNoYW5nZUNiID0gW107CiAgICBkJDIgPSBVTklUU19JTl9HUklEOwogICAgbWVhbmluZ2xlc3NUcmFuc2Zvcm0gPSB7CiAgICAgIHNpemU6IDE2LAogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICByb3RhdGU6IDAsCiAgICAgIGZsaXBYOiBmYWxzZSwKICAgICAgZmxpcFk6IGZhbHNlCiAgICB9OwogICAgaWRQb29sID0gIjAxMjM0NTY3ODlhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ekFCQ0RFRkdISUpLTE1OT1BRUlNUVVZXWFlaIjsKICAgIGJhc2VTdHlsZXMgPSBgOnJvb3QsIDpob3N0IHsKICAtLWZhLWZvbnQtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEZyZWUiOwogIC0tZmEtZm9udC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBGcmVlIjsKICAtLWZhLWZvbnQtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFBybyI7CiAgLS1mYS1mb250LXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFBybyI7CiAgLS1mYS1mb250LWR1b3RvbmU6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOwogIC0tZmEtZm9udC1kdW90b25lLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IER1b3RvbmUiOwogIC0tZmEtZm9udC1kdW90b25lLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtZHVvdG9uZS10aGluOiBub3JtYWwgMTAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBEdW90b25lIjsKICAtLWZhLWZvbnQtYnJhbmRzOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBCcmFuZHMiOwogIC0tZmEtZm9udC1zaGFycC1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAiOwogIC0tZmEtZm9udC1zaGFycC1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLWxpZ2h0OiBub3JtYWwgMzAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBTaGFycCI7CiAgLS1mYS1mb250LXNoYXJwLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIjsKICAtLWZhLWZvbnQtc2hhcnAtZHVvdG9uZS1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgU2hhcnAgRHVvdG9uZSI7CiAgLS1mYS1mb250LXNoYXJwLWR1b3RvbmUtbGlnaHQ6IG5vcm1hbCAzMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zaGFycC1kdW90b25lLXRoaW46IG5vcm1hbCAxMDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNoYXJwIER1b3RvbmUiOwogIC0tZmEtZm9udC1zbGFiLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNsYWIiOwogIC0tZmEtZm9udC1zbGFiLXByZXNzLXJlZ3VsYXI6IG5vcm1hbCA0MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IFNsYWIgUHJlc3MiOwogIC0tZmEtZm9udC13aGl0ZWJvYXJkLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBXaGl0ZWJvYXJkIjsKICAtLWZhLWZvbnQtdGh1bWJwcmludC1saWdodDogbm9ybWFsIDMwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVGh1bWJwcmludCI7CiAgLS1mYS1mb250LW5vdGRvZy1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIjsKICAtLWZhLWZvbnQtbm90ZG9nLWR1by1zb2xpZDogbm9ybWFsIDkwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgTm90ZG9nIER1byI7CiAgLS1mYS1mb250LWV0Y2gtc29saWQ6IG5vcm1hbCA5MDAgMWVtLzEgIkZvbnQgQXdlc29tZSA3IEV0Y2giOwogIC0tZmEtZm9udC1qZWxseS1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBKZWxseSI7CiAgLS1mYS1mb250LWplbGx5LWZpbGwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgSmVsbHkgRmlsbCI7CiAgLS1mYS1mb250LWplbGx5LWR1by1yZWd1bGFyOiBub3JtYWwgNDAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBKZWxseSBEdW8iOwogIC0tZmEtZm9udC1jaGlzZWwtcmVndWxhcjogbm9ybWFsIDQwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgQ2hpc2VsIjsKICAtLWZhLWZvbnQtdXRpbGl0eS1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSI7CiAgLS1mYS1mb250LXV0aWxpdHktZHVvLXNlbWlib2xkOiBub3JtYWwgNjAwIDFlbS8xICJGb250IEF3ZXNvbWUgNyBVdGlsaXR5IER1byI7CiAgLS1mYS1mb250LXV0aWxpdHktZmlsbC1zZW1pYm9sZDogbm9ybWFsIDYwMCAxZW0vMSAiRm9udCBBd2Vzb21lIDcgVXRpbGl0eSBGaWxsIjsKfQoKLnN2Zy1pbmxpbmUtLWZhIHsKICBib3gtc2l6aW5nOiBjb250ZW50LWJveDsKICBkaXNwbGF5OiB2YXIoLS1mYS1kaXNwbGF5LCBpbmxpbmUtYmxvY2spOwogIGhlaWdodDogMWVtOwogIG92ZXJmbG93OiB2aXNpYmxlOwogIHZlcnRpY2FsLWFsaWduOiAtMC4xMjVlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgsIDEuMjVlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4cyB7CiAgdmVydGljYWwtYWxpZ246IDAuMWVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14cyB7CiAgdmVydGljYWwtYWxpZ246IDBlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtc20gewogIHZlcnRpY2FsLWFsaWduOiAtMC4wNzE0Mjg1NzE0ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxnIHsKICB2ZXJ0aWNhbC1hbGlnbjogLTAuMmVtOwp9Ci5zdmctaW5saW5lLS1mYS5mYS14bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjI1ZW07Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLTJ4bCB7CiAgdmVydGljYWwtYWxpZ246IC0wLjMxMjVlbTsKfQouc3ZnLWlubGluZS0tZmEuZmEtcHVsbC1sZWZ0LAouc3ZnLWlubGluZS0tZmEgLmZhLXB1bGwtc3RhcnQgewogIGZsb2F0OiBpbmxpbmUtc3RhcnQ7CiAgbWFyZ2luLWlubGluZS1lbmQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXB1bGwtcmlnaHQsCi5zdmctaW5saW5lLS1mYSAuZmEtcHVsbC1lbmQgewogIGZsb2F0OiBpbmxpbmUtZW5kOwogIG1hcmdpbi1pbmxpbmUtc3RhcnQ6IHZhcigtLWZhLXB1bGwtbWFyZ2luLCAwLjNlbSk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLWxpIHsKICB3aWR0aDogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSk7CiAgaW5zZXQtaW5saW5lLXN0YXJ0OiBjYWxjKC0xICogdmFyKC0tZmEtbGktd2lkdGgsIDJlbSkpOwogIGluc2V0LWJsb2NrLXN0YXJ0OiAwLjI1ZW07IC8qIHN5bmNpbmcgdmVydGljYWwgYWxpZ25tZW50IHdpdGggV2ViIEZvbnQgcmVuZGVyaW5nICovCn0KCi5mYS1sYXllcnMtY291bnRlciwgLmZhLWxheWVycy10ZXh0IHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgcG9zaXRpb246IGFic29sdXRlOwogIHRleHQtYWxpZ246IGNlbnRlcjsKfQoKLmZhLWxheWVycyB7CiAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogIGhlaWdodDogMWVtOwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgdmVydGljYWwtYWxpZ246IC0wLjEyNWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCwgMS4yNWVtKTsKfQouZmEtbGF5ZXJzIC5zdmctaW5saW5lLS1mYSB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLXRleHQgewogIGxlZnQ6IDUwJTsKICB0b3A6IDUwJTsKICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBjZW50ZXIgY2VudGVyOwp9CgouZmEtbGF5ZXJzLWNvdW50ZXIgewogIGJhY2tncm91bmQtY29sb3I6IHZhcigtLWZhLWNvdW50ZXItYmFja2dyb3VuZC1jb2xvciwgI2ZmMjUzYSk7CiAgYm9yZGVyLXJhZGl1czogdmFyKC0tZmEtY291bnRlci1ib3JkZXItcmFkaXVzLCAxZW0pOwogIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgY29sb3I6IHZhcigtLWZhLWludmVyc2UsICNmZmYpOwogIGxpbmUtaGVpZ2h0OiB2YXIoLS1mYS1jb3VudGVyLWxpbmUtaGVpZ2h0LCAxKTsKICBtYXgtd2lkdGg6IHZhcigtLWZhLWNvdW50ZXItbWF4LXdpZHRoLCA1ZW0pOwogIG1pbi13aWR0aDogdmFyKC0tZmEtY291bnRlci1taW4td2lkdGgsIDEuNWVtKTsKICBvdmVyZmxvdzogaGlkZGVuOwogIHBhZGRpbmc6IHZhcigtLWZhLWNvdW50ZXItcGFkZGluZywgMC4yNWVtIDAuNWVtKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWNvdW50ZXItc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLXJpZ2h0IHsKICBib3R0b206IHZhcigtLWZhLWJvdHRvbSwgMCk7CiAgcmlnaHQ6IHZhcigtLWZhLXJpZ2h0LCAwKTsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gcmlnaHQ7Cn0KCi5mYS1sYXllcnMtYm90dG9tLWxlZnQgewogIGJvdHRvbTogdmFyKC0tZmEtYm90dG9tLCAwKTsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IGF1dG87CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiBib3R0b20gbGVmdDsKfQoKLmZhLWxheWVycy10b3AtcmlnaHQgewogIHRvcDogdmFyKC0tZmEtdG9wLCAwKTsKICByaWdodDogdmFyKC0tZmEtcmlnaHQsIDApOwogIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtbGF5ZXJzLXNjYWxlLCAwLjI1KSk7CiAgdHJhbnNmb3JtLW9yaWdpbjogdG9wIHJpZ2h0Owp9CgouZmEtbGF5ZXJzLXRvcC1sZWZ0IHsKICBsZWZ0OiB2YXIoLS1mYS1sZWZ0LCAwKTsKICByaWdodDogYXV0bzsKICB0b3A6IHZhcigtLWZhLXRvcCwgMCk7CiAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1sYXllcnMtc2NhbGUsIDAuMjUpKTsKICB0cmFuc2Zvcm0tb3JpZ2luOiB0b3AgbGVmdDsKfQoKLmZhLTF4IHsKICBmb250LXNpemU6IDFlbTsKfQoKLmZhLTJ4IHsKICBmb250LXNpemU6IDJlbTsKfQoKLmZhLTN4IHsKICBmb250LXNpemU6IDNlbTsKfQoKLmZhLTR4IHsKICBmb250LXNpemU6IDRlbTsKfQoKLmZhLTV4IHsKICBmb250LXNpemU6IDVlbTsKfQoKLmZhLTZ4IHsKICBmb250LXNpemU6IDZlbTsKfQoKLmZhLTd4IHsKICBmb250LXNpemU6IDdlbTsKfQoKLmZhLTh4IHsKICBmb250LXNpemU6IDhlbTsKfQoKLmZhLTl4IHsKICBmb250LXNpemU6IDllbTsKfQoKLmZhLTEweCB7CiAgZm9udC1zaXplOiAxMGVtOwp9CgouZmEtMnhzIHsKICBmb250LXNpemU6IGNhbGMoMTAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMTBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAxMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMTAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteHMgewogIGZvbnQtc2l6ZTogY2FsYygxMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAxMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDEyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAxMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS1zbSB7CiAgZm9udC1zaXplOiBjYWxjKDE0IC8gMTYgKiAxZW0pOyAvKiBjb252ZXJ0cyBhIDE0cHggc2l6ZSBpbnRvIGFuIGVtLWJhc2VkIHZhbHVlIHRoYXQncyByZWxhdGl2ZSB0byB0aGUgc2NhbGUncyAxNnB4IGJhc2UgKi8KICBsaW5lLWhlaWdodDogY2FsYygxIC8gMTQgKiAxZW0pOyAvKiBzZXRzIHRoZSBsaW5lLWhlaWdodCBvZiB0aGUgaWNvbiBiYWNrIHRvIHRoYXQgb2YgaXQncyBwYXJlbnQgKi8KICB2ZXJ0aWNhbC1hbGlnbjogY2FsYygoNiAvIDE0IC0gMC4zNzUpICogMWVtKTsgLyogdmVydGljYWxseSBjZW50ZXJzIHRoZSBpY29uIHRha2luZyBpbnRvIGFjY291bnQgdGhlIHN1cnJvdW5kaW5nIHRleHQncyBkZXNjZW5kZXIgKi8KfQoKLmZhLWxnIHsKICBmb250LXNpemU6IGNhbGMoMjAgLyAxNiAqIDFlbSk7IC8qIGNvbnZlcnRzIGEgMjBweCBzaXplIGludG8gYW4gZW0tYmFzZWQgdmFsdWUgdGhhdCdzIHJlbGF0aXZlIHRvIHRoZSBzY2FsZSdzIDE2cHggYmFzZSAqLwogIGxpbmUtaGVpZ2h0OiBjYWxjKDEgLyAyMCAqIDFlbSk7IC8qIHNldHMgdGhlIGxpbmUtaGVpZ2h0IG9mIHRoZSBpY29uIGJhY2sgdG8gdGhhdCBvZiBpdCdzIHBhcmVudCAqLwogIHZlcnRpY2FsLWFsaWduOiBjYWxjKCg2IC8gMjAgLSAwLjM3NSkgKiAxZW0pOyAvKiB2ZXJ0aWNhbGx5IGNlbnRlcnMgdGhlIGljb24gdGFraW5nIGludG8gYWNjb3VudCB0aGUgc3Vycm91bmRpbmcgdGV4dCdzIGRlc2NlbmRlciAqLwp9CgouZmEteGwgewogIGZvbnQtc2l6ZTogY2FsYygyNCAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAyNHB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDI0ICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAyNCAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS0yeGwgewogIGZvbnQtc2l6ZTogY2FsYygzMiAvIDE2ICogMWVtKTsgLyogY29udmVydHMgYSAzMnB4IHNpemUgaW50byBhbiBlbS1iYXNlZCB2YWx1ZSB0aGF0J3MgcmVsYXRpdmUgdG8gdGhlIHNjYWxlJ3MgMTZweCBiYXNlICovCiAgbGluZS1oZWlnaHQ6IGNhbGMoMSAvIDMyICogMWVtKTsgLyogc2V0cyB0aGUgbGluZS1oZWlnaHQgb2YgdGhlIGljb24gYmFjayB0byB0aGF0IG9mIGl0J3MgcGFyZW50ICovCiAgdmVydGljYWwtYWxpZ246IGNhbGMoKDYgLyAzMiAtIDAuMzc1KSAqIDFlbSk7IC8qIHZlcnRpY2FsbHkgY2VudGVycyB0aGUgaWNvbiB0YWtpbmcgaW50byBhY2NvdW50IHRoZSBzdXJyb3VuZGluZyB0ZXh0J3MgZGVzY2VuZGVyICovCn0KCi5mYS13aWR0aC1hdXRvIHsKICAtLWZhLXdpZHRoOiBhdXRvOwp9CgouZmEtZncsCi5mYS13aWR0aC1maXhlZCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwp9CgouZmEtdWwgewogIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1saS1tYXJnaW4sIDIuNWVtKTsKICBwYWRkaW5nLWlubGluZS1zdGFydDogMDsKfQouZmEtdWwgPiBsaSB7CiAgcG9zaXRpb246IHJlbGF0aXZlOwp9CgouZmEtbGkgewogIGluc2V0LWlubGluZS1zdGFydDogY2FsYygtMSAqIHZhcigtLWZhLWxpLXdpZHRoLCAyZW0pKTsKICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgdGV4dC1hbGlnbjogY2VudGVyOwogIHdpZHRoOiB2YXIoLS1mYS1saS13aWR0aCwgMmVtKTsKICBsaW5lLWhlaWdodDogaW5oZXJpdDsKfQoKLyogSGVhZHMgVXA6IEJvcmRlcmVkIEljb25zIHdpbGwgbm90IGJlIHN1cHBvcnRlZCBpbiB0aGUgZnV0dXJlIQogIC0gVGhpcyBmZWF0dXJlIHdpbGwgYmUgZGVwcmVjYXRlZCBpbiB0aGUgbmV4dCBtYWpvciByZWxlYXNlIG9mIEZvbnQgQXdlc29tZSAodjgpIQogIC0gWW91IG1heSBjb250aW51ZSB0byB1c2UgaXQgaW4gdGhpcyB2ZXJzaW9uICp2NyksIGJ1dCBpdCB3aWxsIG5vdCBiZSBzdXBwb3J0ZWQgaW4gRm9udCBBd2Vzb21lIHY4LgoqLwovKiBOb3RlczoKKiAtLUB7di4kY3NzLXByZWZpeH0tYm9yZGVyLXdpZHRoID0gMS8xNiBieSBkZWZhdWx0ICh0byByZW5kZXIgYXMgfjFweCBiYXNlZCBvbiBhIDE2cHggZGVmYXVsdCBmb250LXNpemUpCiogLS1Ae3YuJGNzcy1wcmVmaXh9LWJvcmRlci1wYWRkaW5nID0KICAqKiAzLzE2IGZvciB2ZXJ0aWNhbCBwYWRkaW5nICh0byBnaXZlIH4ycHggb2YgdmVydGljYWwgd2hpdGVzcGFjZSBhcm91bmQgYW4gaWNvbiBjb25zaWRlcmluZyBpdCdzIHZlcnRpY2FsIGFsaWdubWVudCkKICAqKiA0LzE2IGZvciBob3Jpem9udGFsIHBhZGRpbmcgKHRvIGdpdmUgfjRweCBvZiBob3Jpem9udGFsIHdoaXRlc3BhY2UgYXJvdW5kIGFuIGljb24pCiovCi5mYS1ib3JkZXIgewogIGJvcmRlci1jb2xvcjogdmFyKC0tZmEtYm9yZGVyLWNvbG9yLCAjZWVlKTsKICBib3JkZXItcmFkaXVzOiB2YXIoLS1mYS1ib3JkZXItcmFkaXVzLCAwLjFlbSk7CiAgYm9yZGVyLXN0eWxlOiB2YXIoLS1mYS1ib3JkZXItc3R5bGUsIHNvbGlkKTsKICBib3JkZXItd2lkdGg6IHZhcigtLWZhLWJvcmRlci13aWR0aCwgMC4wNjI1ZW0pOwogIGJveC1zaXppbmc6IHZhcigtLWZhLWJvcmRlci1ib3gtc2l6aW5nLCBjb250ZW50LWJveCk7CiAgcGFkZGluZzogdmFyKC0tZmEtYm9yZGVyLXBhZGRpbmcsIDAuMTg3NWVtIDAuMjVlbSk7Cn0KCi5mYS1wdWxsLWxlZnQsCi5mYS1wdWxsLXN0YXJ0IHsKICBmbG9hdDogaW5saW5lLXN0YXJ0OwogIG1hcmdpbi1pbmxpbmUtZW5kOiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtcHVsbC1yaWdodCwKLmZhLXB1bGwtZW5kIHsKICBmbG9hdDogaW5saW5lLWVuZDsKICBtYXJnaW4taW5saW5lLXN0YXJ0OiB2YXIoLS1mYS1wdWxsLW1hcmdpbiwgMC4zZW0pOwp9CgouZmEtYmVhdCB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQ7CiAgYW5pbWF0aW9uLWRlbGF5OiB2YXIoLS1mYS1hbmltYXRpb24tZGVsYXksIDBzKTsKICBhbmltYXRpb24tZGlyZWN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZGlyZWN0aW9uLCBub3JtYWwpOwogIGFuaW1hdGlvbi1kdXJhdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWR1cmF0aW9uLCAxcyk7CiAgYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudDogdmFyKC0tZmEtYW5pbWF0aW9uLWl0ZXJhdGlvbi1jb3VudCwgaW5maW5pdGUpOwogIGFuaW1hdGlvbi10aW1pbmctZnVuY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi10aW1pbmcsIGVhc2UtaW4tb3V0KTsKfQoKLmZhLWJvdW5jZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJvdW5jZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuMjgsIDAuODQsIDAuNDIsIDEpKTsKfQoKLmZhLWZhZGUgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1mYWRlOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMXMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjYsIDEpKTsKfQoKLmZhLWJlYXQtZmFkZSB7CiAgYW5pbWF0aW9uLW5hbWU6IGZhLWJlYXQtZmFkZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC42LCAxKSk7Cn0KCi5mYS1mbGlwIHsKICBhbmltYXRpb24tbmFtZTogZmEtZmxpcDsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgZWFzZS1pbi1vdXQpOwp9CgouZmEtc2hha2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zaGFrZTsKICBhbmltYXRpb24tZGVsYXk6IHZhcigtLWZhLWFuaW1hdGlvbi1kZWxheSwgMHMpOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgbGluZWFyKTsKfQoKLmZhLXNwaW4gewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIGFuaW1hdGlvbi1kZWxheTogdmFyKC0tZmEtYW5pbWF0aW9uLWRlbGF5LCAwcyk7CiAgYW5pbWF0aW9uLWRpcmVjdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLWRpcmVjdGlvbiwgbm9ybWFsKTsKICBhbmltYXRpb24tZHVyYXRpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kdXJhdGlvbiwgMnMpOwogIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IHZhcigtLWZhLWFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQsIGluZmluaXRlKTsKICBhbmltYXRpb24tdGltaW5nLWZ1bmN0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tdGltaW5nLCBsaW5lYXIpOwp9CgouZmEtc3Bpbi1yZXZlcnNlIHsKICAtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb246IHJldmVyc2U7Cn0KCi5mYS1wdWxzZSwKLmZhLXNwaW4tcHVsc2UgewogIGFuaW1hdGlvbi1uYW1lOiBmYS1zcGluOwogIGFuaW1hdGlvbi1kaXJlY3Rpb246IHZhcigtLWZhLWFuaW1hdGlvbi1kaXJlY3Rpb24sIG5vcm1hbCk7CiAgYW5pbWF0aW9uLWR1cmF0aW9uOiB2YXIoLS1mYS1hbmltYXRpb24tZHVyYXRpb24sIDFzKTsKICBhbmltYXRpb24taXRlcmF0aW9uLWNvdW50OiB2YXIoLS1mYS1hbmltYXRpb24taXRlcmF0aW9uLWNvdW50LCBpbmZpbml0ZSk7CiAgYW5pbWF0aW9uLXRpbWluZy1mdW5jdGlvbjogdmFyKC0tZmEtYW5pbWF0aW9uLXRpbWluZywgc3RlcHMoOCkpOwp9CgpAbWVkaWEgKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkgewogIC5mYS1iZWF0LAogIC5mYS1ib3VuY2UsCiAgLmZhLWZhZGUsCiAgLmZhLWJlYXQtZmFkZSwKICAuZmEtZmxpcCwKICAuZmEtcHVsc2UsCiAgLmZhLXNoYWtlLAogIC5mYS1zcGluLAogIC5mYS1zcGluLXB1bHNlIHsKICAgIGFuaW1hdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJlYXQgewogIDAlLCA5MCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNDUlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUodmFyKC0tZmEtYmVhdC1zY2FsZSwgMS4yNSkpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLWJvdW5jZSB7CiAgMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSgxLCAxKSB0cmFuc2xhdGVZKDApOwogIH0KICAxMCUgewogICAgdHJhbnNmb3JtOiBzY2FsZSh2YXIoLS1mYS1ib3VuY2Utc3RhcnQtc2NhbGUteCwgMS4xKSwgdmFyKC0tZmEtYm91bmNlLXN0YXJ0LXNjYWxlLXksIDAuOSkpIHRyYW5zbGF0ZVkoMCk7CiAgfQogIDMwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXgsIDAuOSksIHZhcigtLWZhLWJvdW5jZS1qdW1wLXNjYWxlLXksIDEuMSkpIHRyYW5zbGF0ZVkodmFyKC0tZmEtYm91bmNlLWhlaWdodCwgLTAuNWVtKSk7CiAgfQogIDUwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJvdW5jZS1sYW5kLXNjYWxlLXgsIDEuMDUpLCB2YXIoLS1mYS1ib3VuY2UtbGFuZC1zY2FsZS15LCAwLjk1KSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgNTclIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSh2YXIoLS1mYS1ib3VuY2UtcmVib3VuZCwgLTAuMTI1ZW0pKTsKICB9CiAgNjQlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMSwgMSkgdHJhbnNsYXRlWSgwKTsKICB9CiAgMTAwJSB7CiAgICB0cmFuc2Zvcm06IHNjYWxlKDEsIDEpIHRyYW5zbGF0ZVkoMCk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtZmFkZSB7CiAgNTAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWZhZGUtb3BhY2l0eSwgMC40KTsKICB9Cn0KQGtleWZyYW1lcyBmYS1iZWF0LWZhZGUgewogIDAlLCAxMDAlIHsKICAgIG9wYWNpdHk6IHZhcigtLWZhLWJlYXQtZmFkZS1vcGFjaXR5LCAwLjQpOwogICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICB9CiAgNTAlIHsKICAgIG9wYWNpdHk6IDE7CiAgICB0cmFuc2Zvcm06IHNjYWxlKHZhcigtLWZhLWJlYXQtZmFkZS1zY2FsZSwgMS4xMjUpKTsKICB9Cn0KQGtleWZyYW1lcyBmYS1mbGlwIHsKICA1MCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUzZCh2YXIoLS1mYS1mbGlwLXgsIDApLCB2YXIoLS1mYS1mbGlwLXksIDEpLCB2YXIoLS1mYS1mbGlwLXosIDApLCB2YXIoLS1mYS1mbGlwLWFuZ2xlLCAtMTgwZGVnKSk7CiAgfQp9CkBrZXlmcmFtZXMgZmEtc2hha2UgewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKC0xNWRlZyk7CiAgfQogIDQlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDE1ZGVnKTsKICB9CiAgOCUsIDI0JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMThkZWcpOwogIH0KICAxMiUsIDI4JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxOGRlZyk7CiAgfQogIDE2JSB7CiAgICB0cmFuc2Zvcm06IHJvdGF0ZSgtMjJkZWcpOwogIH0KICAyMCUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoMjJkZWcpOwogIH0KICAzMiUgewogICAgdHJhbnNmb3JtOiByb3RhdGUoLTEyZGVnKTsKICB9CiAgMzYlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDEyZGVnKTsKICB9CiAgNDAlLCAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KfQpAa2V5ZnJhbWVzIGZhLXNwaW4gewogIDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOwogIH0KICAxMDAlIHsKICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgfQp9Ci5mYS1yb3RhdGUtOTAgewogIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKfQoKLmZhLXJvdGF0ZS0xODAgewogIHRyYW5zZm9ybTogcm90YXRlKDE4MGRlZyk7Cn0KCi5mYS1yb3RhdGUtMjcwIHsKICB0cmFuc2Zvcm06IHJvdGF0ZSgyNzBkZWcpOwp9CgouZmEtZmxpcC1ob3Jpem9udGFsIHsKICB0cmFuc2Zvcm06IHNjYWxlKC0xLCAxKTsKfQoKLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoMSwgLTEpOwp9CgouZmEtZmxpcC1ib3RoLAouZmEtZmxpcC1ob3Jpem9udGFsLmZhLWZsaXAtdmVydGljYWwgewogIHRyYW5zZm9ybTogc2NhbGUoLTEsIC0xKTsKfQoKLmZhLXJvdGF0ZS1ieSB7CiAgdHJhbnNmb3JtOiByb3RhdGUodmFyKC0tZmEtcm90YXRlLWFuZ2xlLCAwKSk7Cn0KCi5zdmctaW5saW5lLS1mYSAuZmEtcHJpbWFyeSB7CiAgZmlsbDogdmFyKC0tZmEtcHJpbWFyeS1jb2xvciwgY3VycmVudENvbG9yKTsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogdmFyKC0tZmEtc2Vjb25kYXJ5LWNvbG9yLCBjdXJyZW50Q29sb3IpOwogIG9wYWNpdHk6IHZhcigtLWZhLXNlY29uZGFyeS1vcGFjaXR5LCAwLjQpOwp9Cgouc3ZnLWlubGluZS0tZmEuZmEtc3dhcC1vcGFjaXR5IC5mYS1wcmltYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1zZWNvbmRhcnktb3BhY2l0eSwgMC40KTsKfQoKLnN2Zy1pbmxpbmUtLWZhLmZhLXN3YXAtb3BhY2l0eSAuZmEtc2Vjb25kYXJ5IHsKICBvcGFjaXR5OiB2YXIoLS1mYS1wcmltYXJ5LW9wYWNpdHksIDEpOwp9Cgouc3ZnLWlubGluZS0tZmEgbWFzayAuZmEtcHJpbWFyeSwKLnN2Zy1pbmxpbmUtLWZhIG1hc2sgLmZhLXNlY29uZGFyeSB7CiAgZmlsbDogYmxhY2s7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1pbnZlcnNlIHsKICBmaWxsOiB2YXIoLS1mYS1pbnZlcnNlLCAjZmZmKTsKfQoKLmZhLXN0YWNrIHsKICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgaGVpZ2h0OiAyZW07CiAgbGluZS1oZWlnaHQ6IDJlbTsKICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICB3aWR0aDogMi41ZW07Cn0KCi5mYS1pbnZlcnNlIHsKICBjb2xvcjogdmFyKC0tZmEtaW52ZXJzZSwgI2ZmZik7Cn0KCi5zdmctaW5saW5lLS1mYS5mYS1zdGFjay0xeCB7CiAgLS1mYS13aWR0aDogMS4yNWVtOwogIGhlaWdodDogMWVtOwogIHdpZHRoOiB2YXIoLS1mYS13aWR0aCk7Cn0KLnN2Zy1pbmxpbmUtLWZhLmZhLXN0YWNrLTJ4IHsKICAtLWZhLXdpZHRoOiAyLjVlbTsKICBoZWlnaHQ6IDJlbTsKICB3aWR0aDogdmFyKC0tZmEtd2lkdGgpOwp9CgouZmEtc3RhY2stMXgsCi5mYS1zdGFjay0yeCB7CiAgaW5zZXQ6IDA7CiAgbWFyZ2luOiBhdXRvOwogIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICB6LWluZGV4OiB2YXIoLS1mYS1zdGFjay16LWluZGV4LCBhdXRvKTsKfWA7CiAgICBfY3NzSW5zZXJ0ZWQgPSBmYWxzZTsKICAgIEluamVjdENTUyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGRvbTogewogICAgICAgICAgICBjc3MsCiAgICAgICAgICAgIGluc2VydENzczogZW5zdXJlQ3NzCiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzKCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmVET01FbGVtZW50Q3JlYXRpb246IGZ1bmN0aW9uIGJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbigpIHsKICAgICAgICAgICAgZW5zdXJlQ3NzKCk7CiAgICAgICAgICB9LAogICAgICAgICAgYmVmb3JlSTJzdmc6IGZ1bmN0aW9uIGJlZm9yZUkyc3ZnKCkgewogICAgICAgICAgICBlbnN1cmVDc3MoKTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgdyQyID0gV0lORE9XIHx8IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdID0ge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc3R5bGVzKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLnN0eWxlcyA9IHt9OwogICAgaWYgKCF3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLmhvb2tzKSB3JDJbTkFNRVNQQUNFX0lERU5USUZJRVJdLmhvb2tzID0ge307CiAgICBpZiAoIXckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMpIHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl0uc2hpbXMgPSBbXTsKICAgIG5hbWVzcGFjZSA9IHckMltOQU1FU1BBQ0VfSURFTlRJRklFUl07CiAgICBmdW5jdGlvbnMgPSBbXTsKICAgIF9saXN0ZW5lciA9IGZ1bmN0aW9uIGxpc3RlbmVyKCkgewogICAgICBET0NVTUVOVC5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Db250ZW50TG9hZGVkIiwgX2xpc3RlbmVyKTsKICAgICAgbG9hZGVkID0gMTsKICAgICAgZnVuY3Rpb25zLm1hcChmdW5jdGlvbihmbikgewogICAgICAgIHJldHVybiBmbigpOwogICAgICB9KTsKICAgIH07CiAgICBsb2FkZWQgPSBmYWxzZTsKICAgIGlmIChJU19ET00pIHsKICAgICAgbG9hZGVkID0gKERPQ1VNRU5ULmRvY3VtZW50RWxlbWVudC5kb1Njcm9sbCA/IC9ebG9hZGVkfF5jLyA6IC9ebG9hZGVkfF5pfF5jLykudGVzdChET0NVTUVOVC5yZWFkeVN0YXRlKTsKICAgICAgaWYgKCFsb2FkZWQpIERPQ1VNRU5ULmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBfbGlzdGVuZXIpOwogICAgfQogICAgYmluZEludGVybmFsNCA9IGZ1bmN0aW9uIGJpbmRJbnRlcm5hbDQyKGZ1bmMsIHRoaXNDb250ZXh0KSB7CiAgICAgIHJldHVybiBmdW5jdGlvbihhNSwgYjUsIGMxMSwgZDYpIHsKICAgICAgICByZXR1cm4gZnVuYy5jYWxsKHRoaXNDb250ZXh0LCBhNSwgYjUsIGMxMSwgZDYpOwogICAgICB9OwogICAgfTsKICAgIHJlZHVjZTMgPSBmdW5jdGlvbiBmYXN0UmVkdWNlT2JqZWN0KHN1YmplY3QsIGZuLCBpbml0aWFsVmFsdWUsIHRoaXNDb250ZXh0KSB7CiAgICAgIHZhciBrZXlzMiA9IE9iamVjdC5rZXlzKHN1YmplY3QpLCBsZW5ndGggPSBrZXlzMi5sZW5ndGgsIGl0ZXJhdG9yMiA9IHRoaXNDb250ZXh0ICE9PSB2b2lkIDAgPyBiaW5kSW50ZXJuYWw0KGZuLCB0aGlzQ29udGV4dCkgOiBmbiwgaTExLCBrZXkyLCByZXN1bHQ7CiAgICAgIGlmIChpbml0aWFsVmFsdWUgPT09IHZvaWQgMCkgewogICAgICAgIGkxMSA9IDE7CiAgICAgICAgcmVzdWx0ID0gc3ViamVjdFtrZXlzMlswXV07CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaTExID0gMDsKICAgICAgICByZXN1bHQgPSBpbml0aWFsVmFsdWU7CiAgICAgIH0KICAgICAgZm9yICg7IGkxMSA8IGxlbmd0aDsgaTExKyspIHsKICAgICAgICBrZXkyID0ga2V5czJbaTExXTsKICAgICAgICByZXN1bHQgPSBpdGVyYXRvcjIocmVzdWx0LCBzdWJqZWN0W2tleTJdLCBrZXkyLCBzdWJqZWN0KTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIE1PTk8gPSAxOwogICAgRFVPID0gMjsKICAgIG1vZGVybk1hdGNoZXMgPSBbW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIG9wYWNpdHk9IihbXiJdKikiLipkPSIoW14iXSopIi4qcGF0aC4qZD0iKFteIl0qKSIvLCB7CiAgICAgIGQyOiAyLAogICAgICBkMTogMwogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggb3BhY2l0eT0iKFteIl0qKSIuKmQ9IihbXiJdKikiLywgewogICAgICBkMjogMgogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGZpbGw9ImN1cnJlbnRDb2xvciIuKmQ9IihbXiJdKykiLywgewogICAgICBkMTogMQogICAgfSldXTsKICAgIGxlZ2FjeU1hdGNoZXMgPSBbW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi4qcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMjogMSwKICAgICAgZDI6IDIsCiAgICAgIGF0dHIxOiAzLAogICAgICBkMTogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggY2xhc3M9IihbXiJdKnByaW1hcnlbXiJdKikiLipkPSIoW14iXSspIi4qcGF0aCBjbGFzcz0iKFteIl0qc2Vjb25kYXJ5W14iXSopIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIxOiAxLAogICAgICBkMTogMiwKICAgICAgYXR0cjI6IDMsCiAgICAgIGQyOiA0CiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKmQ9IihbXiJdKykiLywgewogICAgICBhdHRyMTogMSwKICAgICAgZDE6IDIKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLipkPSIoW14iXSspIi8sIHsKICAgICAgYXR0cjI6IDEsCiAgICAgIGQyOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8sIHsKICAgICAgZDI6IDEsCiAgICAgIGF0dHIyOiAyLAogICAgICBkMTogMywKICAgICAgYXR0cjE6IDQKICAgIH0pXSwgW0RVTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLipjbGFzcz0iKFteIl0qcHJpbWFyeVteIl0qKSIuKnBhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpzZWNvbmRhcnlbXiJdKikiLywgewogICAgICBkMTogMSwKICAgICAgYXR0cjE6IDIsCiAgICAgIGQyOiAzLAogICAgICBhdHRyMjogNAogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKmNsYXNzPSIoW14iXSpwcmltYXJ5W14iXSopIi8sIHsKICAgICAgZDE6IDEsCiAgICAgIGF0dHIxOiAyCiAgICB9KV0sIFtEVU8sIC8qIEBfX1BVUkVfXyAqLyBfd3JhcFJlZ0V4cCgvcGF0aCBkPSIoW14iXSspIi4qY2xhc3M9IihbXiJdKnNlY29uZGFyeVteIl0qKSIvLCB7CiAgICAgIGQyOiAxLAogICAgICBhdHRyMjogMgogICAgfSldLCBbRFVPLCAvKiBAX19QVVJFX18gKi8gX3dyYXBSZWdFeHAoL3BhdGggZD0iKFteIl0rKSIuKnBhdGggZD0iKFteIl0rKSIvLCB7CiAgICAgIGQxOiAxLAogICAgICBkMjogMgogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIGQ9IihbXiJdKykiLywgewogICAgICBkMTogMQogICAgfSldLCBbTU9OTywgLyogQF9fUFVSRV9fICovIF93cmFwUmVnRXhwKC9wYXRoIHN0eWxlPSIoW14iXSspIi4qZD0iKFteIl0rKSIvLCB7CiAgICAgIGF0dHIxOiAxLAogICAgICBkMTogMgogICAgfSldXTsKICAgIHN0eWxlczIgPSBuYW1lc3BhY2Uuc3R5bGVzLCBzaGltcyA9IG5hbWVzcGFjZS5zaGltczsKICAgIEZBTUlMWV9OQU1FUyA9IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFKTsKICAgIFBSRUZJWEVTX0ZPUl9GQU1JTFkgPSBGQU1JTFlfTkFNRVMucmVkdWNlKGZ1bmN0aW9uKGFjYywgZmFtaWx5SWQpIHsKICAgICAgYWNjW2ZhbWlseUlkXSA9IE9iamVjdC5rZXlzKFBSRUZJWF9UT19MT05HX1NUWUxFW2ZhbWlseUlkXSk7CiAgICAgIHJldHVybiBhY2M7CiAgICB9LCB7fSk7CiAgICBfZGVmYXVsdFVzYWJsZVByZWZpeCA9IG51bGw7CiAgICBfYnlVbmljb2RlID0ge307CiAgICBfYnlMaWdhdHVyZSA9IHt9OwogICAgX2J5T2xkTmFtZSA9IHt9OwogICAgX2J5T2xkVW5pY29kZSA9IHt9OwogICAgX2J5QWxpYXMgPSB7fTsKICAgIGJ1aWxkID0gZnVuY3Rpb24gYnVpbGQyKCkgewogICAgICB2YXIgbG9va3VwID0gZnVuY3Rpb24gbG9va3VwMihyZWR1Y2VyKSB7CiAgICAgICAgcmV0dXJuIHJlZHVjZTMoc3R5bGVzMiwgZnVuY3Rpb24obyQkMSwgc3R5bGUsIHByZWZpeDQpIHsKICAgICAgICAgIG8kJDFbcHJlZml4NF0gPSByZWR1Y2UzKHN0eWxlLCByZWR1Y2VyLCB7fSk7CiAgICAgICAgICByZXR1cm4gbyQkMTsKICAgICAgICB9LCB7fSk7CiAgICAgIH07CiAgICAgIF9ieVVuaWNvZGUgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICBpZiAoaWNvbjNbM10pIHsKICAgICAgICAgIGFjY1tpY29uM1szXV0gPSBpY29uTmFtZTsKICAgICAgICB9CiAgICAgICAgaWYgKGljb24zWzJdKSB7CiAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdLmZpbHRlcihmdW5jdGlvbihhJCQxKSB7CiAgICAgICAgICAgIHJldHVybiB0eXBlb2YgYSQkMSA9PT0gIm51bWJlciI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGFsaWFzZXMuZm9yRWFjaChmdW5jdGlvbihhbGlhcykgewogICAgICAgICAgICBhY2NbYWxpYXMudG9TdHJpbmcoMTYpXSA9IGljb25OYW1lOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0pOwogICAgICBfYnlMaWdhdHVyZSA9IGxvb2t1cChmdW5jdGlvbihhY2MsIGljb24zLCBpY29uTmFtZSkgewogICAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uTmFtZTsKICAgICAgICBpZiAoaWNvbjNbMl0pIHsKICAgICAgICAgIHZhciBhbGlhc2VzID0gaWNvbjNbMl0uZmlsdGVyKGZ1bmN0aW9uKGEkJDEpIHsKICAgICAgICAgICAgcmV0dXJuIHR5cGVvZiBhJCQxID09PSAic3RyaW5nIjsKICAgICAgICAgIH0pOwogICAgICAgICAgYWxpYXNlcy5mb3JFYWNoKGZ1bmN0aW9uKGFsaWFzKSB7CiAgICAgICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgX2J5QWxpYXMgPSBsb29rdXAoZnVuY3Rpb24oYWNjLCBpY29uMywgaWNvbk5hbWUpIHsKICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdOwogICAgICAgIGFjY1tpY29uTmFtZV0gPSBpY29uTmFtZTsKICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgIGFjY1thbGlhc10gPSBpY29uTmFtZTsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gYWNjOwogICAgICB9KTsKICAgICAgdmFyIGhhc1JlZ3VsYXIgPSAiZmFyIiBpbiBzdHlsZXMyIHx8IGNvbmZpZzIuYXV0b0ZldGNoU3ZnOwogICAgICB2YXIgc2hpbUxvb2t1cHMgPSByZWR1Y2UzKHNoaW1zLCBmdW5jdGlvbihhY2MsIHNoaW0pIHsKICAgICAgICB2YXIgbWF5YmVOYW1lTWF5YmVVbmljb2RlID0gc2hpbVswXTsKICAgICAgICB2YXIgcHJlZml4NCA9IHNoaW1bMV07CiAgICAgICAgdmFyIGljb25OYW1lID0gc2hpbVsyXTsKICAgICAgICBpZiAocHJlZml4NCA9PT0gImZhciIgJiYgIWhhc1JlZ3VsYXIpIHsKICAgICAgICAgIHByZWZpeDQgPSAiZmFzIjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5hbWVNYXliZVVuaWNvZGUgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICBhY2MubmFtZXNbbWF5YmVOYW1lTWF5YmVVbmljb2RlXSA9IHsKICAgICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgICBpY29uTmFtZQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBtYXliZU5hbWVNYXliZVVuaWNvZGUgPT09ICJudW1iZXIiKSB7CiAgICAgICAgICBhY2MudW5pY29kZXNbbWF5YmVOYW1lTWF5YmVVbmljb2RlLnRvU3RyaW5nKDE2KV0gPSB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHsKICAgICAgICBuYW1lczoge30sCiAgICAgICAgdW5pY29kZXM6IHt9CiAgICAgIH0pOwogICAgICBfYnlPbGROYW1lID0gc2hpbUxvb2t1cHMubmFtZXM7CiAgICAgIF9ieU9sZFVuaWNvZGUgPSBzaGltTG9va3Vwcy51bmljb2RlczsKICAgICAgX2RlZmF1bHRVc2FibGVQcmVmaXggPSBnZXRDYW5vbmljYWxQcmVmaXgoY29uZmlnMi5zdHlsZURlZmF1bHQsIHsKICAgICAgICBmYW1pbHk6IGNvbmZpZzIuZmFtaWx5RGVmYXVsdAogICAgICB9KTsKICAgIH07CiAgICBvbkNoYW5nZShmdW5jdGlvbihjJCQxKSB7CiAgICAgIF9kZWZhdWx0VXNhYmxlUHJlZml4ID0gZ2V0Q2Fub25pY2FsUHJlZml4KGMkJDEuc3R5bGVEZWZhdWx0LCB7CiAgICAgICAgZmFtaWx5OiBjb25maWcyLmZhbWlseURlZmF1bHQKICAgICAgfSk7CiAgICB9KTsKICAgIGJ1aWxkKCk7CiAgICBlbXB0eUNhbm9uaWNhbEljb24gPSBmdW5jdGlvbiBlbXB0eUNhbm9uaWNhbEljb24yKCkgewogICAgICByZXR1cm4gewogICAgICAgIHByZWZpeDogbnVsbCwKICAgICAgICBpY29uTmFtZTogbnVsbCwKICAgICAgICByZXN0OiBbXQogICAgICB9OwogICAgfTsKICAgIF9mYUNvbWJpbmVkQ2xhc3NlcyA9IFp0JDEuY29uY2F0KFl0KTsKICAgIG5ld0Nhbm9uaWNhbEZhbWlsaWVzID0gcnQuZmlsdGVyKGZ1bmN0aW9uKGZhbWlseUlkKSB7CiAgICAgIHJldHVybiBmYW1pbHlJZCAhPT0gaTEwIHx8IGZhbWlseUlkICE9PSB0ODsKICAgIH0pOwogICAgbmV3Q2Fub25pY2FsU3R5bGVzID0gT2JqZWN0LmtleXMoSHQkMSkuZmlsdGVyKGZ1bmN0aW9uKGtleTIpIHsKICAgICAgcmV0dXJuIGtleTIgIT09IGkxMDsKICAgIH0pLm1hcChmdW5jdGlvbihrZXkyKSB7CiAgICAgIHJldHVybiBPYmplY3Qua2V5cyhIdCQxW2tleTJdKTsKICAgIH0pLmZsYXQoKTsKICAgIExpYnJhcnkgPSAvKiBAX19QVVJFX18gKi8gKGZ1bmN0aW9uKCkgewogICAgICBmdW5jdGlvbiBMaWJyYXJ5MygpIHsKICAgICAgICBfY2xhc3NDYWxsQ2hlY2sodGhpcywgTGlicmFyeTMpOwogICAgICAgIHRoaXMuZGVmaW5pdGlvbnMgPSB7fTsKICAgICAgfQogICAgICByZXR1cm4gX2NyZWF0ZUNsYXNzKExpYnJhcnkzLCBbewogICAgICAgIGtleTogImFkZCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIGFkZDMoKSB7CiAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzOwogICAgICAgICAgZm9yICh2YXIgX2xlbiA9IGFyZ3VtZW50cy5sZW5ndGgsIGRlZmluaXRpb25zID0gbmV3IEFycmF5KF9sZW4pLCBfa2V5ID0gMDsgX2tleSA8IF9sZW47IF9rZXkrKykgewogICAgICAgICAgICBkZWZpbml0aW9uc1tfa2V5XSA9IGFyZ3VtZW50c1tfa2V5XTsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBhZGRpdGlvbnMgPSBkZWZpbml0aW9ucy5yZWR1Y2UodGhpcy5fcHVsbERlZmluaXRpb25zLCB7fSk7CiAgICAgICAgICBPYmplY3Qua2V5cyhhZGRpdGlvbnMpLmZvckVhY2goZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBfdGhpcy5kZWZpbml0aW9uc1trZXkyXSB8fCB7fSksIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGRlZmluZUljb25zKGtleTIsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIHZhciBsb25nUHJlZml4ID0gUFJFRklYX1RPX0xPTkdfU1RZTEVbaTEwXVtrZXkyXTsKICAgICAgICAgICAgaWYgKGxvbmdQcmVmaXgpIGRlZmluZUljb25zKGxvbmdQcmVmaXgsIGFkZGl0aW9uc1trZXkyXSk7CiAgICAgICAgICAgIGJ1aWxkKCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICBrZXk6ICJyZXNldCIsCiAgICAgICAgdmFsdWU6IGZ1bmN0aW9uIHJlc2V0KCkgewogICAgICAgICAgdGhpcy5kZWZpbml0aW9ucyA9IHt9OwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIGtleTogIl9wdWxsRGVmaW5pdGlvbnMiLAogICAgICAgIHZhbHVlOiBmdW5jdGlvbiBfcHVsbERlZmluaXRpb25zKGFkZGl0aW9ucywgZGVmaW5pdGlvbjMpIHsKICAgICAgICAgIHZhciBub3JtYWxpemVkID0gZGVmaW5pdGlvbjMucHJlZml4ICYmIGRlZmluaXRpb24zLmljb25OYW1lICYmIGRlZmluaXRpb24zLmljb24gPyB7CiAgICAgICAgICAgIDA6IGRlZmluaXRpb24zCiAgICAgICAgICB9IDogZGVmaW5pdGlvbjM7CiAgICAgICAgICBPYmplY3Qua2V5cyhub3JtYWxpemVkKS5tYXAoZnVuY3Rpb24oa2V5MikgewogICAgICAgICAgICB2YXIgX25vcm1hbGl6ZWQka2V5ID0gbm9ybWFsaXplZFtrZXkyXSwgcHJlZml4NCA9IF9ub3JtYWxpemVkJGtleS5wcmVmaXgsIGljb25OYW1lID0gX25vcm1hbGl6ZWQka2V5Lmljb25OYW1lLCBpY29uMyA9IF9ub3JtYWxpemVkJGtleS5pY29uOwogICAgICAgICAgICB2YXIgYWxpYXNlcyA9IGljb24zWzJdOwogICAgICAgICAgICBpZiAoIWFkZGl0aW9uc1twcmVmaXg0XSkgYWRkaXRpb25zW3ByZWZpeDRdID0ge307CiAgICAgICAgICAgIGlmIChhbGlhc2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICBhbGlhc2VzLmZvckVhY2goZnVuY3Rpb24oYWxpYXMpIHsKICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgYWxpYXMgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgICAgICAgIGFkZGl0aW9uc1twcmVmaXg0XVthbGlhc10gPSBpY29uMzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfQogICAgICAgICAgICBhZGRpdGlvbnNbcHJlZml4NF1baWNvbk5hbWVdID0gaWNvbjM7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiBhZGRpdGlvbnM7CiAgICAgICAgfQogICAgICB9XSk7CiAgICB9KSgpOwogICAgX3BsdWdpbnMgPSBbXTsKICAgIF9ob29rcyA9IHt9OwogICAgcHJvdmlkZXJzID0ge307CiAgICBkZWZhdWx0UHJvdmlkZXJLZXlzID0gT2JqZWN0LmtleXMocHJvdmlkZXJzKTsKICAgIGxpYnJhcnkgPSBuZXcgTGlicmFyeSgpOwogICAgbm9BdXRvID0gZnVuY3Rpb24gbm9BdXRvMigpIHsKICAgICAgY29uZmlnMi5hdXRvUmVwbGFjZVN2ZyA9IGZhbHNlOwogICAgICBjb25maWcyLm9ic2VydmVNdXRhdGlvbnMgPSBmYWxzZTsKICAgICAgY2FsbEhvb2tzKCJub0F1dG8iKTsKICAgIH07CiAgICBkb20gPSB7CiAgICAgIGkyc3ZnOiBmdW5jdGlvbiBpMnN2ZygpIHsKICAgICAgICB2YXIgcGFyYW1zMiA9IGFyZ3VtZW50cy5sZW5ndGggPiAwICYmIGFyZ3VtZW50c1swXSAhPT0gdm9pZCAwID8gYXJndW1lbnRzWzBdIDoge307CiAgICAgICAgaWYgKElTX0RPTSkgewogICAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVJMnN2ZyIsIHBhcmFtczIpOwogICAgICAgICAgY2FsbFByb3ZpZGVkKCJwc2V1ZG9FbGVtZW50czJzdmciLCBwYXJhbXMyKTsKICAgICAgICAgIHJldHVybiBjYWxsUHJvdmlkZWQoImkyc3ZnIiwgcGFyYW1zMik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIk9wZXJhdGlvbiByZXF1aXJlcyBhIERPTSBvZiBzb21lIGtpbmQuIikpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgd2F0Y2g6IGZ1bmN0aW9uIHdhdGNoKCkgewogICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgICB2YXIgYXV0b1JlcGxhY2VTdmdSb290ID0gcGFyYW1zMi5hdXRvUmVwbGFjZVN2Z1Jvb3Q7CiAgICAgICAgaWYgKGNvbmZpZzIuYXV0b1JlcGxhY2VTdmcgPT09IGZhbHNlKSB7CiAgICAgICAgICBjb25maWcyLmF1dG9SZXBsYWNlU3ZnID0gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgY29uZmlnMi5vYnNlcnZlTXV0YXRpb25zID0gdHJ1ZTsKICAgICAgICBkb21yZWFkeShmdW5jdGlvbigpIHsKICAgICAgICAgIGF1dG9SZXBsYWNlKHsKICAgICAgICAgICAgYXV0b1JlcGxhY2VTdmdSb290CiAgICAgICAgICB9KTsKICAgICAgICAgIGNhbGxIb29rcygid2F0Y2giLCBwYXJhbXMyKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIHBhcnNlNyA9IHsKICAgICAgaWNvbjogZnVuY3Rpb24gaWNvbihfaWNvbikgewogICAgICAgIGlmIChfaWNvbiA9PT0gbnVsbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChfdHlwZW9mKF9pY29uKSA9PT0gIm9iamVjdCIgJiYgX2ljb24ucHJlZml4ICYmIF9pY29uLmljb25OYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9pY29uLnByZWZpeCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMoX2ljb24ucHJlZml4LCBfaWNvbi5pY29uTmFtZSkgfHwgX2ljb24uaWNvbk5hbWUKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICAgIGlmIChBcnJheS5pc0FycmF5KF9pY29uKSAmJiBfaWNvbi5sZW5ndGggPT09IDIpIHsKICAgICAgICAgIHZhciBpY29uTmFtZSA9IF9pY29uWzFdLmluZGV4T2YoImZhLSIpID09PSAwID8gX2ljb25bMV0uc2xpY2UoMykgOiBfaWNvblsxXTsKICAgICAgICAgIHZhciBwcmVmaXg0ID0gZ2V0Q2Fub25pY2FsUHJlZml4KF9pY29uWzBdKTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHByZWZpeDogcHJlZml4NCwKICAgICAgICAgICAgaWNvbk5hbWU6IGJ5QWxpYXMocHJlZml4NCwgaWNvbk5hbWUpIHx8IGljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIiAmJiAoX2ljb24uaW5kZXhPZigiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItIikpID4gLTEgfHwgX2ljb24ubWF0Y2goSUNPTl9TRUxFQ1RJT05fU1lOVEFYX1BBVFRFUk4pKSkgewogICAgICAgICAgdmFyIGNhbm9uaWNhbEljb24gPSBnZXRDYW5vbmljYWxJY29uKF9pY29uLnNwbGl0KCIgIiksIHsKICAgICAgICAgICAgc2tpcExvb2t1cHM6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgcHJlZml4OiBjYW5vbmljYWxJY29uLnByZWZpeCB8fCBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCksCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKGNhbm9uaWNhbEljb24ucHJlZml4LCBjYW5vbmljYWxJY29uLmljb25OYW1lKSB8fCBjYW5vbmljYWxJY29uLmljb25OYW1lCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICBpZiAodHlwZW9mIF9pY29uID09PSAic3RyaW5nIikgewogICAgICAgICAgdmFyIF9wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICBwcmVmaXg6IF9wcmVmaXgsCiAgICAgICAgICAgIGljb25OYW1lOiBieUFsaWFzKF9wcmVmaXgsIF9pY29uKSB8fCBfaWNvbgogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBhcGkgPSB7CiAgICAgIG5vQXV0bywKICAgICAgY29uZmlnOiBjb25maWcyLAogICAgICBkb20sCiAgICAgIHBhcnNlOiBwYXJzZTcsCiAgICAgIGxpYnJhcnksCiAgICAgIGZpbmRJY29uRGVmaW5pdGlvbiwKICAgICAgdG9IdG1sOiB0b0h0bWwyCiAgICB9OwogICAgYXV0b1JlcGxhY2UgPSBmdW5jdGlvbiBhdXRvUmVwbGFjZTIoKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDAgJiYgYXJndW1lbnRzWzBdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMF0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkYXV0b1JlcGxhY2VTdiA9IHBhcmFtczIuYXV0b1JlcGxhY2VTdmdSb290LCBhdXRvUmVwbGFjZVN2Z1Jvb3QgPSBfcGFyYW1zJGF1dG9SZXBsYWNlU3YgPT09IHZvaWQgMCA/IERPQ1VNRU5UIDogX3BhcmFtcyRhdXRvUmVwbGFjZVN2OwogICAgICBpZiAoKE9iamVjdC5rZXlzKG5hbWVzcGFjZS5zdHlsZXMpLmxlbmd0aCA+IDAgfHwgY29uZmlnMi5hdXRvRmV0Y2hTdmcpICYmIElTX0RPTSAmJiBjb25maWcyLmF1dG9SZXBsYWNlU3ZnKSBhcGkuZG9tLmkyc3ZnKHsKICAgICAgICBub2RlOiBhdXRvUmVwbGFjZVN2Z1Jvb3QKICAgICAgfSk7CiAgICB9OwogICAgc3R5bGVzJDEgPSBuYW1lc3BhY2Uuc3R5bGVzOwogICAgbWlzc2luZ0ljb25SZXNvbHV0aW9uTWl4aW4gPSB7CiAgICAgIGZvdW5kOiBmYWxzZSwKICAgICAgd2lkdGg6IDUxMiwKICAgICAgaGVpZ2h0OiA1MTIKICAgIH07CiAgICBub29wJDEgPSBmdW5jdGlvbiBub29wNCgpIHsKICAgIH07CiAgICBwJDIgPSBjb25maWcyLm1lYXN1cmVQZXJmb3JtYW5jZSAmJiBQRVJGT1JNQU5DRSAmJiBQRVJGT1JNQU5DRS5tYXJrICYmIFBFUkZPUk1BTkNFLm1lYXN1cmUgPyBQRVJGT1JNQU5DRSA6IHsKICAgICAgbWFyazogbm9vcCQxLAogICAgICBtZWFzdXJlOiBub29wJDEKICAgIH07CiAgICBwcmVhbWJsZSA9ICdGQSAiNy4xLjAiJzsKICAgIGJlZ2luID0gZnVuY3Rpb24gYmVnaW4yKG5hbWUpIHsKICAgICAgcCQyLm1hcmsoIiIuY29uY2F0KHByZWFtYmxlLCAiICIpLmNvbmNhdChuYW1lLCAiIGJlZ2lucyIpKTsKICAgICAgcmV0dXJuIGZ1bmN0aW9uKCkgewogICAgICAgIHJldHVybiBlbmQobmFtZSk7CiAgICAgIH07CiAgICB9OwogICAgZW5kID0gZnVuY3Rpb24gZW5kMihuYW1lKSB7CiAgICAgIHAkMi5tYXJrKCIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgICBwJDIubWVhc3VyZSgiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUpLCAiIi5jb25jYXQocHJlYW1ibGUsICIgIikuY29uY2F0KG5hbWUsICIgYmVnaW5zIiksICIiLmNvbmNhdChwcmVhbWJsZSwgIiAiKS5jb25jYXQobmFtZSwgIiBlbmRzIikpOwogICAgfTsKICAgIHBlcmYgPSB7CiAgICAgIGJlZ2luLAogICAgICBlbmQKICAgIH07CiAgICBub29wJDIgPSBmdW5jdGlvbiBub29wNSgpIHsKICAgIH07CiAgICBtdXRhdG9ycyA9IHsKICAgICAgcmVwbGFjZTogZnVuY3Rpb24gcmVwbGFjZTMobXV0YXRpb24pIHsKICAgICAgICB2YXIgbm9kZTIgPSBtdXRhdGlvblswXTsKICAgICAgICBpZiAobm9kZTIucGFyZW50Tm9kZSkgewogICAgICAgICAgbXV0YXRpb25bMV0uZm9yRWFjaChmdW5jdGlvbihhYnN0cmFjdCkgewogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLmluc2VydEJlZm9yZShjb252ZXJ0U1ZHKGFic3RyYWN0KSwgbm9kZTIpOwogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAobm9kZTIuZ2V0QXR0cmlidXRlKERBVEFfRkFfSTJTVkcpID09PSBudWxsICYmIGNvbmZpZzIua2VlcE9yaWdpbmFsU291cmNlKSB7CiAgICAgICAgICAgIHZhciBjb21tZW50MyA9IERPQ1VNRU5ULmNyZWF0ZUNvbW1lbnQobm9kZUFzQ29tbWVudChub2RlMikpOwogICAgICAgICAgICBub2RlMi5wYXJlbnROb2RlLnJlcGxhY2VDaGlsZChjb21tZW50Mywgbm9kZTIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbm9kZTIucmVtb3ZlKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICBuZXN0OiBmdW5jdGlvbiBuZXN0KG11dGF0aW9uKSB7CiAgICAgICAgdmFyIG5vZGUyID0gbXV0YXRpb25bMF07CiAgICAgICAgdmFyIGFic3RyYWN0ID0gbXV0YXRpb25bMV07CiAgICAgICAgaWYgKH5jbGFzc0FycmF5KG5vZGUyKS5pbmRleE9mKGNvbmZpZzIucmVwbGFjZW1lbnRDbGFzcykpIHsKICAgICAgICAgIHJldHVybiBtdXRhdG9ycy5yZXBsYWNlKG11dGF0aW9uKTsKICAgICAgICB9CiAgICAgICAgdmFyIGZvclN2ZyA9IG5ldyBSZWdFeHAoIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLS4qIikpOwogICAgICAgIGRlbGV0ZSBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmlkOwogICAgICAgIGlmIChhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzKSB7CiAgICAgICAgICB2YXIgc3BsaXRDbGFzc2VzID0gYWJzdHJhY3RbMF0uYXR0cmlidXRlcy5jbGFzcy5zcGxpdCgiICIpLnJlZHVjZShmdW5jdGlvbihhY2MsIGNscykgewogICAgICAgICAgICBpZiAoY2xzID09PSBjb25maWcyLnJlcGxhY2VtZW50Q2xhc3MgfHwgY2xzLm1hdGNoKGZvclN2ZykpIHsKICAgICAgICAgICAgICBhY2MudG9TdmcucHVzaChjbHMpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGFjYy50b05vZGUucHVzaChjbHMpOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgICB9LCB7CiAgICAgICAgICAgIHRvTm9kZTogW10sCiAgICAgICAgICAgIHRvU3ZnOiBbXQogICAgICAgICAgfSk7CiAgICAgICAgICBhYnN0cmFjdFswXS5hdHRyaWJ1dGVzLmNsYXNzID0gc3BsaXRDbGFzc2VzLnRvU3ZnLmpvaW4oIiAiKTsKICAgICAgICAgIGlmIChzcGxpdENsYXNzZXMudG9Ob2RlLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBub2RlMi5yZW1vdmVBdHRyaWJ1dGUoImNsYXNzIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoImNsYXNzIiwgc3BsaXRDbGFzc2VzLnRvTm9kZS5qb2luKCIgIikpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB2YXIgbmV3SW5uZXJIVE1MID0gYWJzdHJhY3QubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICByZXR1cm4gdG9IdG1sMihhNSk7CiAgICAgICAgfSkuam9pbigiXG4iKTsKICAgICAgICBub2RlMi5zZXRBdHRyaWJ1dGUoREFUQV9GQV9JMlNWRywgIiIpOwogICAgICAgIG5vZGUyLmlubmVySFRNTCA9IG5ld0lubmVySFRNTDsKICAgICAgfQogICAgfTsKICAgIGRpc2FibGVkID0gZmFsc2U7CiAgICBtbyA9IG51bGw7CiAgICBzdHlsZXMkMiA9IG5hbWVzcGFjZS5zdHlsZXM7CiAgICByZW5kZXIgPSBmdW5jdGlvbiByZW5kZXIyKGljb25EZWZpbml0aW9uKSB7CiAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgdmFyIF9wYXJhbXMkdHJhbnNmb3JtID0gcGFyYW1zMi50cmFuc2Zvcm0sIHRyYW5zZm9ybTIgPSBfcGFyYW1zJHRyYW5zZm9ybSA9PT0gdm9pZCAwID8gbWVhbmluZ2xlc3NUcmFuc2Zvcm0gOiBfcGFyYW1zJHRyYW5zZm9ybSwgX3BhcmFtcyRzeW1ib2wgPSBwYXJhbXMyLnN5bWJvbCwgc3ltYm9sID0gX3BhcmFtcyRzeW1ib2wgPT09IHZvaWQgMCA/IGZhbHNlIDogX3BhcmFtcyRzeW1ib2wsIF9wYXJhbXMkbWFzayA9IHBhcmFtczIubWFzaywgbWFzayA9IF9wYXJhbXMkbWFzayA9PT0gdm9pZCAwID8gbnVsbCA6IF9wYXJhbXMkbWFzaywgX3BhcmFtcyRtYXNrSWQgPSBwYXJhbXMyLm1hc2tJZCwgbWFza0lkID0gX3BhcmFtcyRtYXNrSWQgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJG1hc2tJZCwgX3BhcmFtcyRjbGFzc2VzID0gcGFyYW1zMi5jbGFzc2VzLCBjbGFzc2VzID0gX3BhcmFtcyRjbGFzc2VzID09PSB2b2lkIDAgPyBbXSA6IF9wYXJhbXMkY2xhc3NlcywgX3BhcmFtcyRhdHRyaWJ1dGVzID0gcGFyYW1zMi5hdHRyaWJ1dGVzLCBhdHRyaWJ1dGVzID0gX3BhcmFtcyRhdHRyaWJ1dGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkYXR0cmlidXRlcywgX3BhcmFtcyRzdHlsZXMgPSBwYXJhbXMyLnN0eWxlcywgc3R5bGVzMyA9IF9wYXJhbXMkc3R5bGVzID09PSB2b2lkIDAgPyB7fSA6IF9wYXJhbXMkc3R5bGVzOwogICAgICBpZiAoIWljb25EZWZpbml0aW9uKSByZXR1cm47CiAgICAgIHZhciBwcmVmaXg0ID0gaWNvbkRlZmluaXRpb24ucHJlZml4LCBpY29uTmFtZSA9IGljb25EZWZpbml0aW9uLmljb25OYW1lLCBpY29uMyA9IGljb25EZWZpbml0aW9uLmljb247CiAgICAgIHJldHVybiBkb21WYXJpYW50cyhfb2JqZWN0U3ByZWFkMih7CiAgICAgICAgdHlwZTogImljb24iCiAgICAgIH0sIGljb25EZWZpbml0aW9uKSwgZnVuY3Rpb24oKSB7CiAgICAgICAgY2FsbEhvb2tzKCJiZWZvcmVET01FbGVtZW50Q3JlYXRpb24iLCB7CiAgICAgICAgICBpY29uRGVmaW5pdGlvbiwKICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgIH0pOwogICAgICAgIHJldHVybiBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgbWFpbjogYXNGb3VuZEljb24oaWNvbjMpLAogICAgICAgICAgICBtYXNrOiBtYXNrID8gYXNGb3VuZEljb24obWFzay5pY29uKSA6IHsKICAgICAgICAgICAgICBmb3VuZDogZmFsc2UsCiAgICAgICAgICAgICAgd2lkdGg6IG51bGwsCiAgICAgICAgICAgICAgaGVpZ2h0OiBudWxsLAogICAgICAgICAgICAgIGljb246IHt9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICBzeW1ib2wsCiAgICAgICAgICBtYXNrSWQsCiAgICAgICAgICBleHRyYTogewogICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgIGNsYXNzZXMKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9OwogICAgUmVwbGFjZUVsZW1lbnRzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDIoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGljb246IHJlc29sdmVJY29ucyhyZW5kZXIpCiAgICAgICAgfTsKICAgICAgfSwKICAgICAgaG9va3M6IGZ1bmN0aW9uIGhvb2tzMigpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrczogZnVuY3Rpb24gbXV0YXRpb25PYnNlcnZlckNhbGxiYWNrcyhhY2N1bXVsYXRvcikgewogICAgICAgICAgICBhY2N1bXVsYXRvci50cmVlQ2FsbGJhY2sgPSBvblRyZWU7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm5vZGVDYWxsYmFjayA9IG9uTm9kZTsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIHByb3ZpZGVzOiBmdW5jdGlvbiBwcm92aWRlcyhwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuaTJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGUsIF9wYXJhbXMkY2FsbGJhY2sgPSBwYXJhbXMyLmNhbGxiYWNrLCBjYWxsYmFjayA9IF9wYXJhbXMkY2FsbGJhY2sgPT09IHZvaWQgMCA/IGZ1bmN0aW9uKCkgewogICAgICAgICAgfSA6IF9wYXJhbXMkY2FsbGJhY2s7CiAgICAgICAgICByZXR1cm4gb25UcmVlKG5vZGUyLCBjYWxsYmFjayk7CiAgICAgICAgfTsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVTdmdSZXBsYWNlbWVudE11dGF0aW9uID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgaWNvbk5hbWUgPSBub2RlTWV0YS5pY29uTmFtZSwgcHJlZml4NCA9IG5vZGVNZXRhLnByZWZpeCwgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgc3ltYm9sID0gbm9kZU1ldGEuc3ltYm9sLCBtYXNrID0gbm9kZU1ldGEubWFzaywgbWFza0lkID0gbm9kZU1ldGEubWFza0lkLCBleHRyYSA9IG5vZGVNZXRhLmV4dHJhOwogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUyLCByZWplY3QpIHsKICAgICAgICAgICAgUHJvbWlzZS5hbGwoW2ZpbmRJY29uKGljb25OYW1lLCBwcmVmaXg0KSwgbWFzay5pY29uTmFtZSA/IGZpbmRJY29uKG1hc2suaWNvbk5hbWUsIG1hc2sucHJlZml4KSA6IFByb21pc2UucmVzb2x2ZSh7CiAgICAgICAgICAgICAgZm91bmQ6IGZhbHNlLAogICAgICAgICAgICAgIHdpZHRoOiA1MTIsCiAgICAgICAgICAgICAgaGVpZ2h0OiA1MTIsCiAgICAgICAgICAgICAgaWNvbjoge30KICAgICAgICAgICAgfSldKS50aGVuKGZ1bmN0aW9uKF9yZWYyKSB7CiAgICAgICAgICAgICAgdmFyIF9yZWYyMiA9IF9zbGljZWRUb0FycmF5KF9yZWYyLCAyKSwgbWFpbiA9IF9yZWYyMlswXSwgbWFzazIgPSBfcmVmMjJbMV07CiAgICAgICAgICAgICAgcmVzb2x2ZTIoW25vZGUyLCBtYWtlSW5saW5lU3ZnQWJzdHJhY3QoewogICAgICAgICAgICAgICAgaWNvbnM6IHsKICAgICAgICAgICAgICAgICAgbWFpbiwKICAgICAgICAgICAgICAgICAgbWFzazogbWFzazIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBwcmVmaXg6IHByZWZpeDQsCiAgICAgICAgICAgICAgICBpY29uTmFtZSwKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNmb3JtMiwKICAgICAgICAgICAgICAgIHN5bWJvbCwKICAgICAgICAgICAgICAgIG1hc2tJZCwKICAgICAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICAgICAgd2F0Y2hhYmxlOiB0cnVlCiAgICAgICAgICAgICAgfSldKTsKICAgICAgICAgICAgfSkuY2F0Y2gocmVqZWN0KTsKICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgICAgcHJvdmlkZXJzJCQxLmdlbmVyYXRlQWJzdHJhY3RJY29uID0gZnVuY3Rpb24oX3JlZjMpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMy5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYzLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMy5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjMudHJhbnNmb3JtLCBzdHlsZXMzID0gX3JlZjMuc3R5bGVzOwogICAgICAgICAgdmFyIHN0eWxlU3RyaW5nID0gam9pblN0eWxlcyhzdHlsZXMzKTsKICAgICAgICAgIGlmIChzdHlsZVN0cmluZy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIGF0dHJpYnV0ZXNbInN0eWxlIl0gPSBzdHlsZVN0cmluZzsKICAgICAgICAgIH0KICAgICAgICAgIHZhciBuZXh0Q2hpbGQ7CiAgICAgICAgICBpZiAodHJhbnNmb3JtSXNNZWFuaW5nZnVsKHRyYW5zZm9ybTIpKSB7CiAgICAgICAgICAgIG5leHRDaGlsZCA9IGNhbGxQcm92aWRlZCgiZ2VuZXJhdGVBYnN0cmFjdFRyYW5zZm9ybUdyb3VwaW5nIiwgewogICAgICAgICAgICAgIG1haW4sCiAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2Zvcm0yLAogICAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYWluLndpZHRoLAogICAgICAgICAgICAgIGljb25XaWR0aDogbWFpbi53aWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIGNoaWxkcmVuMi5wdXNoKG5leHRDaGlsZCB8fCBtYWluLmljb24pOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgY2hpbGRyZW46IGNoaWxkcmVuMiwKICAgICAgICAgICAgYXR0cmlidXRlcwogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgTGF5ZXJzID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGxheWVyOiBmdW5jdGlvbiBsYXllcjIoYXNzZW1ibGVyKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkY2xhc3NlcyA9IHBhcmFtczIuY2xhc3NlcywgY2xhc3NlcyA9IF9wYXJhbXMkY2xhc3NlcyA9PT0gdm9pZCAwID8gW10gOiBfcGFyYW1zJGNsYXNzZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImxheWVyIgogICAgICAgICAgICB9LCBmdW5jdGlvbigpIHsKICAgICAgICAgICAgICBjYWxsSG9va3MoImJlZm9yZURPTUVsZW1lbnRDcmVhdGlvbiIsIHsKICAgICAgICAgICAgICAgIGFzc2VtYmxlciwKICAgICAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBbXTsKICAgICAgICAgICAgICBhc3NlbWJsZXIoZnVuY3Rpb24oYXJncykgewogICAgICAgICAgICAgICAgQXJyYXkuaXNBcnJheShhcmdzKSA/IGFyZ3MubWFwKGZ1bmN0aW9uKGE1KSB7CiAgICAgICAgICAgICAgICAgIGNoaWxkcmVuMiA9IGNoaWxkcmVuMi5jb25jYXQoYTUuYWJzdHJhY3QpOwogICAgICAgICAgICAgICAgfSkgOiBjaGlsZHJlbjIgPSBjaGlsZHJlbjIuY29uY2F0KGFyZ3MuYWJzdHJhY3QpOwogICAgICAgICAgICAgIH0pOwogICAgICAgICAgICAgIHJldHVybiBbewogICAgICAgICAgICAgICAgdGFnOiAic3BhbiIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgICAgIGNsYXNzOiBbIiIuY29uY2F0KGNvbmZpZzIuY3NzUHJlZml4LCAiLWxheWVycyIpXS5jb25jYXQoX3RvQ29uc3VtYWJsZUFycmF5KGNsYXNzZXMpKS5qb2luKCIgIikKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBjaGlsZHJlbjogY2hpbGRyZW4yCiAgICAgICAgICAgICAgfV07CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBMYXllcnNDb3VudGVyID0gewogICAgICBtaXhvdXQ6IGZ1bmN0aW9uIG1peG91dDQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGNvdW50ZXI6IGZ1bmN0aW9uIGNvdW50ZXIyKGNvbnRlbnQzKSB7CiAgICAgICAgICAgIHZhciBwYXJhbXMyID0gYXJndW1lbnRzLmxlbmd0aCA+IDEgJiYgYXJndW1lbnRzWzFdICE9PSB2b2lkIDAgPyBhcmd1bWVudHNbMV0gOiB7fTsKICAgICAgICAgICAgdmFyIF9wYXJhbXMkdGl0bGUgPSBwYXJhbXMyLnRpdGxlLCB0aXRsZSA9IF9wYXJhbXMkdGl0bGUgPT09IHZvaWQgMCA/IG51bGwgOiBfcGFyYW1zJHRpdGxlLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogImNvdW50ZXIiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc0NvdW50ZXJBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50My50b1N0cmluZygpLAogICAgICAgICAgICAgICAgdGl0bGUsCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLWNvdW50ZXIiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIExheWVyc1RleHQgPSB7CiAgICAgIG1peG91dDogZnVuY3Rpb24gbWl4b3V0NSgpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgdGV4dDogZnVuY3Rpb24gdGV4dDkoY29udGVudDMpIHsKICAgICAgICAgICAgdmFyIHBhcmFtczIgPSBhcmd1bWVudHMubGVuZ3RoID4gMSAmJiBhcmd1bWVudHNbMV0gIT09IHZvaWQgMCA/IGFyZ3VtZW50c1sxXSA6IHt9OwogICAgICAgICAgICB2YXIgX3BhcmFtcyR0cmFuc2Zvcm0gPSBwYXJhbXMyLnRyYW5zZm9ybSwgdHJhbnNmb3JtMiA9IF9wYXJhbXMkdHJhbnNmb3JtID09PSB2b2lkIDAgPyBtZWFuaW5nbGVzc1RyYW5zZm9ybSA6IF9wYXJhbXMkdHJhbnNmb3JtLCBfcGFyYW1zJGNsYXNzZXMgPSBwYXJhbXMyLmNsYXNzZXMsIGNsYXNzZXMgPSBfcGFyYW1zJGNsYXNzZXMgPT09IHZvaWQgMCA/IFtdIDogX3BhcmFtcyRjbGFzc2VzLCBfcGFyYW1zJGF0dHJpYnV0ZXMgPSBwYXJhbXMyLmF0dHJpYnV0ZXMsIGF0dHJpYnV0ZXMgPSBfcGFyYW1zJGF0dHJpYnV0ZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRhdHRyaWJ1dGVzLCBfcGFyYW1zJHN0eWxlcyA9IHBhcmFtczIuc3R5bGVzLCBzdHlsZXMzID0gX3BhcmFtcyRzdHlsZXMgPT09IHZvaWQgMCA/IHt9IDogX3BhcmFtcyRzdHlsZXM7CiAgICAgICAgICAgIHJldHVybiBkb21WYXJpYW50cyh7CiAgICAgICAgICAgICAgdHlwZTogInRleHQiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzCiAgICAgICAgICAgIH0sIGZ1bmN0aW9uKCkgewogICAgICAgICAgICAgIGNhbGxIb29rcygiYmVmb3JlRE9NRWxlbWVudENyZWF0aW9uIiwgewogICAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgICBwYXJhbXM6IHBhcmFtczIKICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgICByZXR1cm4gbWFrZUxheWVyc1RleHRBYnN0cmFjdCh7CiAgICAgICAgICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIG1lYW5pbmdsZXNzVHJhbnNmb3JtKSwgdHJhbnNmb3JtMiksCiAgICAgICAgICAgICAgICBleHRyYTogewogICAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzLAogICAgICAgICAgICAgICAgICBzdHlsZXM6IHN0eWxlczMsCiAgICAgICAgICAgICAgICAgIGNsYXNzZXM6IFsiIi5jb25jYXQoY29uZmlnMi5jc3NQcmVmaXgsICItbGF5ZXJzLXRleHQiKV0uY29uY2F0KF90b0NvbnN1bWFibGVBcnJheShjbGFzc2VzKSkKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9KTsKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMihwcm92aWRlcnMkJDEpIHsKICAgICAgICBwcm92aWRlcnMkJDEuZ2VuZXJhdGVMYXllcnNUZXh0ID0gZnVuY3Rpb24obm9kZTIsIG5vZGVNZXRhKSB7CiAgICAgICAgICB2YXIgdHJhbnNmb3JtMiA9IG5vZGVNZXRhLnRyYW5zZm9ybSwgZXh0cmEgPSBub2RlTWV0YS5leHRyYTsKICAgICAgICAgIHZhciB3aWR0aCA9IG51bGw7CiAgICAgICAgICB2YXIgaGVpZ2h0ID0gbnVsbDsKICAgICAgICAgIGlmIChJU19JRSkgewogICAgICAgICAgICB2YXIgY29tcHV0ZWRGb250U2l6ZSA9IHBhcnNlSW50KGdldENvbXB1dGVkU3R5bGUobm9kZTIpLmZvbnRTaXplLCAxMCk7CiAgICAgICAgICAgIHZhciBib3VuZGluZ0NsaWVudFJlY3QgPSBub2RlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgICAgd2lkdGggPSBib3VuZGluZ0NsaWVudFJlY3Qud2lkdGggLyBjb21wdXRlZEZvbnRTaXplOwogICAgICAgICAgICBoZWlnaHQgPSBib3VuZGluZ0NsaWVudFJlY3QuaGVpZ2h0IC8gY29tcHV0ZWRGb250U2l6ZTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUoW25vZGUyLCBtYWtlTGF5ZXJzVGV4dEFic3RyYWN0KHsKICAgICAgICAgICAgY29udGVudDogbm9kZTIuaW5uZXJIVE1MLAogICAgICAgICAgICB3aWR0aCwKICAgICAgICAgICAgaGVpZ2h0LAogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGV4dHJhLAogICAgICAgICAgICB3YXRjaGFibGU6IHRydWUKICAgICAgICAgIH0pXSk7CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIENMRUFOX0NPTlRFTlRfUEFUVEVSTiA9IG5ldyBSZWdFeHAoJyInLCAidWciKTsKICAgIFNFQ09OREFSWV9VTklDT0RFX1JBTkdFID0gWzExMDU5MjAsIDExMTIzMTldOwogICAgX0ZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgewogICAgICBGb250QXdlc29tZTogewogICAgICAgIG5vcm1hbDogImZhcyIsCiAgICAgICAgNDAwOiAiZmFzIgogICAgICB9CiAgICB9KSwgQ3QpLCBybyksIGRsKTsKICAgIEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVggPSBPYmplY3Qua2V5cyhfRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywga2V5MikgewogICAgICBhY2Nba2V5Mi50b0xvd2VyQ2FzZSgpXSA9IF9GT05UX0ZBTUlMWV9XRUlHSFRfVE9fUFJFRklYW2tleTJdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgRk9OVF9GQU1JTFlfV0VJR0hUX0ZBTExCQUNLID0gT2JqZWN0LmtleXMoRk9OVF9GQU1JTFlfV0VJR0hUX1RPX1BSRUZJWCkucmVkdWNlKGZ1bmN0aW9uKGFjYywgZm9udEZhbWlseSkgewogICAgICB2YXIgd2VpZ2h0cyA9IEZPTlRfRkFNSUxZX1dFSUdIVF9UT19QUkVGSVhbZm9udEZhbWlseV07CiAgICAgIGFjY1tmb250RmFtaWx5XSA9IHdlaWdodHNbOTAwXSB8fCBfdG9Db25zdW1hYmxlQXJyYXkoT2JqZWN0LmVudHJpZXMod2VpZ2h0cykpWzBdWzFdOwogICAgICByZXR1cm4gYWNjOwogICAgfSwge30pOwogICAgaGFzUHNldWRvRWxlbWVudCA9IGZ1bmN0aW9uIGhhc1BzZXVkb0VsZW1lbnQyKHNlbGVjdG9yKSB7CiAgICAgIHJldHVybiAhIXNlbGVjdG9yICYmIFBTRVVET19FTEVNRU5UUy5zb21lKGZ1bmN0aW9uKHBzZXVkb1NlbGVjdG9yKSB7CiAgICAgICAgcmV0dXJuIHNlbGVjdG9yLmluY2x1ZGVzKHBzZXVkb1NlbGVjdG9yKTsKICAgICAgfSk7CiAgICB9OwogICAgcGFyc2VDU1NSdWxlRm9yUHNldWRvcyA9IGZ1bmN0aW9uIHBhcnNlQ1NTUnVsZUZvclBzZXVkb3MyKHNlbGVjdG9yVGV4dCkgewogICAgICBpZiAoIXNlbGVjdG9yVGV4dCkgcmV0dXJuIFtdOwogICAgICB2YXIgc2VsZWN0b3JTZXQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICB2YXIgc2VsZWN0b3JzID0gc2VsZWN0b3JUZXh0LnNwbGl0KC8sKD8hW14oKV0qXCkpLykubWFwKGZ1bmN0aW9uKHMkJDEpIHsKICAgICAgICByZXR1cm4gcyQkMS50cmltKCk7CiAgICAgIH0pOwogICAgICBzZWxlY3RvcnMgPSBzZWxlY3RvcnMuZmxhdE1hcChmdW5jdGlvbihzZWxlY3RvcjIpIHsKICAgICAgICByZXR1cm4gc2VsZWN0b3IyLmluY2x1ZGVzKCIoIikgPyBzZWxlY3RvcjIgOiBzZWxlY3RvcjIuc3BsaXQoIiwiKS5tYXAoZnVuY3Rpb24ocyQkMSkgewogICAgICAgICAgcmV0dXJuIHMkJDEudHJpbSgpOwogICAgICAgIH0pOwogICAgICB9KTsKICAgICAgdmFyIF9pdGVyYXRvciA9IF9jcmVhdGVGb3JPZkl0ZXJhdG9ySGVscGVyKHNlbGVjdG9ycyksIF9zdGVwOwogICAgICB0cnkgewogICAgICAgIGZvciAoX2l0ZXJhdG9yLnMoKTsgIShfc3RlcCA9IF9pdGVyYXRvci5uKCkpLmRvbmU7ICkgewogICAgICAgICAgdmFyIHNlbGVjdG9yID0gX3N0ZXAudmFsdWU7CiAgICAgICAgICBpZiAoaGFzUHNldWRvRWxlbWVudChzZWxlY3RvcikpIHsKICAgICAgICAgICAgdmFyIHNlbGVjdG9yV2l0aG91dFBzZXVkbyA9IFBTRVVET19FTEVNRU5UUy5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBwc2V1ZG9TZWxlY3RvcikgewogICAgICAgICAgICAgIHJldHVybiBhY2MucmVwbGFjZShwc2V1ZG9TZWxlY3RvciwgIiIpOwogICAgICAgICAgICB9LCBzZWxlY3Rvcik7CiAgICAgICAgICAgIGlmIChzZWxlY3RvcldpdGhvdXRQc2V1ZG8gIT09ICIiICYmIHNlbGVjdG9yV2l0aG91dFBzZXVkbyAhPT0gIioiKSB7CiAgICAgICAgICAgICAgc2VsZWN0b3JTZXQuYWRkKHNlbGVjdG9yV2l0aG91dFBzZXVkbyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgIF9pdGVyYXRvci5lKGVycik7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgX2l0ZXJhdG9yLmYoKTsKICAgICAgfQogICAgICByZXR1cm4gc2VsZWN0b3JTZXQ7CiAgICB9OwogICAgUHNldWRvRWxlbWVudHMgPSB7CiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczMoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3M6IGZ1bmN0aW9uIG11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MoYWNjdW11bGF0b3IpIHsKICAgICAgICAgICAgYWNjdW11bGF0b3IucHNldWRvRWxlbWVudHNDYWxsYmFjayA9IHNlYXJjaFBzZXVkb0VsZW1lbnRzOwogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzMyhwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5wc2V1ZG9FbGVtZW50czJzdmcgPSBmdW5jdGlvbihwYXJhbXMyKSB7CiAgICAgICAgICB2YXIgX3BhcmFtcyRub2RlID0gcGFyYW1zMi5ub2RlLCBub2RlMiA9IF9wYXJhbXMkbm9kZSA9PT0gdm9pZCAwID8gRE9DVU1FTlQgOiBfcGFyYW1zJG5vZGU7CiAgICAgICAgICBpZiAoY29uZmlnMi5zZWFyY2hQc2V1ZG9FbGVtZW50cykgewogICAgICAgICAgICBzZWFyY2hQc2V1ZG9FbGVtZW50cyhub2RlMik7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIF91bndhdGNoZWQgPSBmYWxzZTsKICAgIE11dGF0aW9uT2JzZXJ2ZXIkMSA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBkb206IHsKICAgICAgICAgICAgdW53YXRjaDogZnVuY3Rpb24gdW53YXRjaCgpIHsKICAgICAgICAgICAgICBkaXNhYmxlT2JzZXJ2YXRpb24oKTsKICAgICAgICAgICAgICBfdW53YXRjaGVkID0gdHJ1ZTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0sCiAgICAgIGhvb2tzOiBmdW5jdGlvbiBob29rczQoKSB7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJvb3RzdHJhcDogZnVuY3Rpb24gYm9vdHN0cmFwKCkgewogICAgICAgICAgICBvYnNlcnZlKGNoYWluSG9va3MoIm11dGF0aW9uT2JzZXJ2ZXJDYWxsYmFja3MiLCB7fSkpOwogICAgICAgICAgfSwKICAgICAgICAgIG5vQXV0bzogZnVuY3Rpb24gbm9BdXRvMygpIHsKICAgICAgICAgICAgZGlzY29ubmVjdCgpOwogICAgICAgICAgfSwKICAgICAgICAgIHdhdGNoOiBmdW5jdGlvbiB3YXRjaDIocGFyYW1zMikgewogICAgICAgICAgICB2YXIgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QgPSBwYXJhbXMyLm9ic2VydmVNdXRhdGlvbnNSb290OwogICAgICAgICAgICBpZiAoX3Vud2F0Y2hlZCkgewogICAgICAgICAgICAgIGVuYWJsZU9ic2VydmF0aW9uKCk7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgb2JzZXJ2ZShjaGFpbkhvb2tzKCJtdXRhdGlvbk9ic2VydmVyQ2FsbGJhY2tzIiwgewogICAgICAgICAgICAgICAgb2JzZXJ2ZU11dGF0aW9uc1Jvb3QKICAgICAgICAgICAgICB9KSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgcGFyc2VUcmFuc2Zvcm1TdHJpbmcgPSBmdW5jdGlvbiBwYXJzZVRyYW5zZm9ybVN0cmluZzIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgIHZhciB0cmFuc2Zvcm0yID0gewogICAgICAgIHNpemU6IDE2LAogICAgICAgIHg6IDAsCiAgICAgICAgeTogMCwKICAgICAgICBmbGlwWDogZmFsc2UsCiAgICAgICAgZmxpcFk6IGZhbHNlLAogICAgICAgIHJvdGF0ZTogMAogICAgICB9OwogICAgICByZXR1cm4gdHJhbnNmb3JtU3RyaW5nLnRvTG93ZXJDYXNlKCkuc3BsaXQoIiAiKS5yZWR1Y2UoZnVuY3Rpb24oYWNjLCBuMTMpIHsKICAgICAgICB2YXIgcGFydHMgPSBuMTMudG9Mb3dlckNhc2UoKS5zcGxpdCgiLSIpOwogICAgICAgIHZhciBmaXJzdDIgPSBwYXJ0c1swXTsKICAgICAgICB2YXIgcmVzdCA9IHBhcnRzLnNsaWNlKDEpLmpvaW4oIi0iKTsKICAgICAgICBpZiAoZmlyc3QyICYmIHJlc3QgPT09ICJoIikgewogICAgICAgICAgYWNjLmZsaXBYID0gdHJ1ZTsKICAgICAgICAgIHJldHVybiBhY2M7CiAgICAgICAgfQogICAgICAgIGlmIChmaXJzdDIgJiYgcmVzdCA9PT0gInYiKSB7CiAgICAgICAgICBhY2MuZmxpcFkgPSB0cnVlOwogICAgICAgICAgcmV0dXJuIGFjYzsKICAgICAgICB9CiAgICAgICAgcmVzdCA9IHBhcnNlRmxvYXQocmVzdCk7CiAgICAgICAgaWYgKGlzTmFOKHJlc3QpKSB7CiAgICAgICAgICByZXR1cm4gYWNjOwogICAgICAgIH0KICAgICAgICBzd2l0Y2ggKGZpcnN0MikgewogICAgICAgICAgY2FzZSAiZ3JvdyI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInNocmluayI6CiAgICAgICAgICAgIGFjYy5zaXplID0gYWNjLnNpemUgLSByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImxlZnQiOgogICAgICAgICAgICBhY2MueCA9IGFjYy54IC0gcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJyaWdodCI6CiAgICAgICAgICAgIGFjYy54ID0gYWNjLnggKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVwIjoKICAgICAgICAgICAgYWNjLnkgPSBhY2MueSAtIHJlc3Q7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiZG93biI6CiAgICAgICAgICAgIGFjYy55ID0gYWNjLnkgKyByZXN0OwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInJvdGF0ZSI6CiAgICAgICAgICAgIGFjYy5yb3RhdGUgPSBhY2Mucm90YXRlICsgcmVzdDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhY2M7CiAgICAgIH0sIHRyYW5zZm9ybTIpOwogICAgfTsKICAgIFBvd2VyVHJhbnNmb3JtcyA9IHsKICAgICAgbWl4b3V0OiBmdW5jdGlvbiBtaXhvdXQ3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZTogewogICAgICAgICAgICB0cmFuc2Zvcm06IGZ1bmN0aW9uIHRyYW5zZm9ybTIodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHBhcnNlVHJhbnNmb3JtU3RyaW5nKHRyYW5zZm9ybVN0cmluZyk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBob29rczogZnVuY3Rpb24gaG9va3M1KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgdHJhbnNmb3JtU3RyaW5nID0gbm9kZTIuZ2V0QXR0cmlidXRlKCJkYXRhLWZhLXRyYW5zZm9ybSIpOwogICAgICAgICAgICBpZiAodHJhbnNmb3JtU3RyaW5nKSB7CiAgICAgICAgICAgICAgYWNjdW11bGF0b3IudHJhbnNmb3JtID0gcGFyc2VUcmFuc2Zvcm1TdHJpbmcodHJhbnNmb3JtU3RyaW5nKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm4gYWNjdW11bGF0b3I7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgfSwKICAgICAgcHJvdmlkZXM6IGZ1bmN0aW9uIHByb3ZpZGVzNChwcm92aWRlcnMyKSB7CiAgICAgICAgcHJvdmlkZXJzMi5nZW5lcmF0ZUFic3RyYWN0VHJhbnNmb3JtR3JvdXBpbmcgPSBmdW5jdGlvbihfcmVmMikgewogICAgICAgICAgdmFyIG1haW4gPSBfcmVmMi5tYWluLCB0cmFuc2Zvcm0yID0gX3JlZjIudHJhbnNmb3JtLCBjb250YWluZXJXaWR0aCA9IF9yZWYyLmNvbnRhaW5lcldpZHRoLCBpY29uV2lkdGggPSBfcmVmMi5pY29uV2lkdGg7CiAgICAgICAgICB2YXIgb3V0ZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChjb250YWluZXJXaWR0aCAvIDIsICIgMjU2KSIpCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGlubmVyVHJhbnNsYXRlID0gInRyYW5zbGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnggKiAzMiwgIiwgIikuY29uY2F0KHRyYW5zZm9ybTIueSAqIDMyLCAiKSAiKTsKICAgICAgICAgIHZhciBpbm5lclNjYWxlID0gInNjYWxlKCIuY29uY2F0KHRyYW5zZm9ybTIuc2l6ZSAvIDE2ICogKHRyYW5zZm9ybTIuZmxpcFggPyAtMSA6IDEpLCAiLCAiKS5jb25jYXQodHJhbnNmb3JtMi5zaXplIC8gMTYgKiAodHJhbnNmb3JtMi5mbGlwWSA/IC0xIDogMSksICIpICIpOwogICAgICAgICAgdmFyIGlubmVyUm90YXRlID0gInJvdGF0ZSgiLmNvbmNhdCh0cmFuc2Zvcm0yLnJvdGF0ZSwgIiAwIDApIik7CiAgICAgICAgICB2YXIgaW5uZXIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogIiIuY29uY2F0KGlubmVyVHJhbnNsYXRlLCAiICIpLmNvbmNhdChpbm5lclNjYWxlLCAiICIpLmNvbmNhdChpbm5lclJvdGF0ZSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgcGF0aDIgPSB7CiAgICAgICAgICAgIHRyYW5zZm9ybTogInRyYW5zbGF0ZSgiLmNvbmNhdChpY29uV2lkdGggLyAyICogLTEsICIgLTI1NikiKQogICAgICAgICAgfTsKICAgICAgICAgIHZhciBvcGVyYXRpb25zID0gewogICAgICAgICAgICBvdXRlciwKICAgICAgICAgICAgaW5uZXIsCiAgICAgICAgICAgIHBhdGg6IHBhdGgyCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKHt9LCBvcGVyYXRpb25zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFt7CiAgICAgICAgICAgICAgdGFnOiAiZyIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIG9wZXJhdGlvbnMuaW5uZXIpLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiBtYWluLmljb24udGFnLAogICAgICAgICAgICAgICAgY2hpbGRyZW46IG1haW4uaWNvbi5jaGlsZHJlbiwKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluLmljb24uYXR0cmlidXRlcyksIG9wZXJhdGlvbnMucGF0aCkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9XQogICAgICAgICAgfTsKICAgICAgICB9OwogICAgICB9CiAgICB9OwogICAgQUxMX1NQQUNFID0gewogICAgICB4OiAwLAogICAgICB5OiAwLAogICAgICB3aWR0aDogIjEwMCUiLAogICAgICBoZWlnaHQ6ICIxMDAlIgogICAgfTsKICAgIE1hc2tzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M2KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgbWFza0RhdGEgPSBub2RlMi5nZXRBdHRyaWJ1dGUoImRhdGEtZmEtbWFzayIpOwogICAgICAgICAgICB2YXIgbWFzayA9ICFtYXNrRGF0YSA/IGVtcHR5Q2Fub25pY2FsSWNvbigpIDogZ2V0Q2Fub25pY2FsSWNvbihtYXNrRGF0YS5zcGxpdCgiICIpLm1hcChmdW5jdGlvbihpMTEpIHsKICAgICAgICAgICAgICByZXR1cm4gaTExLnRyaW0oKTsKICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBpZiAoIW1hc2sucHJlZml4KSB7CiAgICAgICAgICAgICAgbWFzay5wcmVmaXggPSBnZXREZWZhdWx0VXNhYmxlUHJlZml4KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYWNjdW11bGF0b3IubWFzayA9IG1hc2s7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yLm1hc2tJZCA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1tYXNrLWlkIik7CiAgICAgICAgICAgIHJldHVybiBhY2N1bXVsYXRvcjsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICB9LAogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM1KHByb3ZpZGVyczIpIHsKICAgICAgICBwcm92aWRlcnMyLmdlbmVyYXRlQWJzdHJhY3RNYXNrID0gZnVuY3Rpb24oX3JlZjIpIHsKICAgICAgICAgIHZhciBjaGlsZHJlbjIgPSBfcmVmMi5jaGlsZHJlbiwgYXR0cmlidXRlcyA9IF9yZWYyLmF0dHJpYnV0ZXMsIG1haW4gPSBfcmVmMi5tYWluLCBtYXNrID0gX3JlZjIubWFzaywgZXhwbGljaXRNYXNrSWQgPSBfcmVmMi5tYXNrSWQsIHRyYW5zZm9ybTIgPSBfcmVmMi50cmFuc2Zvcm07CiAgICAgICAgICB2YXIgbWFpbldpZHRoID0gbWFpbi53aWR0aCwgbWFpblBhdGggPSBtYWluLmljb247CiAgICAgICAgICB2YXIgbWFza1dpZHRoID0gbWFzay53aWR0aCwgbWFza1BhdGggPSBtYXNrLmljb247CiAgICAgICAgICB2YXIgdHJhbnMgPSB0cmFuc2Zvcm1Gb3JTdmcoewogICAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zZm9ybTIsCiAgICAgICAgICAgIGNvbnRhaW5lcldpZHRoOiBtYXNrV2lkdGgsCiAgICAgICAgICAgIGljb25XaWR0aDogbWFpbldpZHRoCiAgICAgICAgICB9KTsKICAgICAgICAgIHZhciBtYXNrUmVjdCA9IHsKICAgICAgICAgICAgdGFnOiAicmVjdCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTExfU1BBQ0UpLCB7fSwgewogICAgICAgICAgICAgIGZpbGw6ICJ3aGl0ZSIKICAgICAgICAgICAgfSkKICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluID0gbWFpblBhdGguY2hpbGRyZW4gPyB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBtYWluUGF0aC5jaGlsZHJlbi5tYXAoZmlsbEJsYWNrKQogICAgICAgICAgfSA6IHt9OwogICAgICAgICAgdmFyIG1hc2tJbm5lckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLmlubmVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFtmaWxsQmxhY2soX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgIHRhZzogbWFpblBhdGgudGFnLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBtYWluUGF0aC5hdHRyaWJ1dGVzKSwgdHJhbnMucGF0aCkKICAgICAgICAgICAgfSwgbWFza0lubmVyR3JvdXBDaGlsZHJlbk1peGluKSldCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIG1hc2tPdXRlckdyb3VwID0gewogICAgICAgICAgICB0YWc6ICJnIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoe30sIHRyYW5zLm91dGVyKSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrSW5uZXJHcm91cF0KICAgICAgICAgIH07CiAgICAgICAgICB2YXIgbWFza0lkID0gIm1hc2stIi5jb25jYXQoZXhwbGljaXRNYXNrSWQgfHwgbmV4dFVuaXF1ZUlkKCkpOwogICAgICAgICAgdmFyIGNsaXBJZCA9ICJjbGlwLSIuY29uY2F0KGV4cGxpY2l0TWFza0lkIHx8IG5leHRVbmlxdWVJZCgpKTsKICAgICAgICAgIHZhciBtYXNrVGFnID0gewogICAgICAgICAgICB0YWc6ICJtYXNrIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFMTF9TUEFDRSksIHt9LCB7CiAgICAgICAgICAgICAgaWQ6IG1hc2tJZCwKICAgICAgICAgICAgICBtYXNrVW5pdHM6ICJ1c2VyU3BhY2VPblVzZSIsCiAgICAgICAgICAgICAgbWFza0NvbnRlbnRVbml0czogInVzZXJTcGFjZU9uVXNlIgogICAgICAgICAgICB9KSwKICAgICAgICAgICAgY2hpbGRyZW46IFttYXNrUmVjdCwgbWFza091dGVyR3JvdXBdCiAgICAgICAgICB9OwogICAgICAgICAgdmFyIGRlZnMgPSB7CiAgICAgICAgICAgIHRhZzogImRlZnMiLAogICAgICAgICAgICBjaGlsZHJlbjogW3sKICAgICAgICAgICAgICB0YWc6ICJjbGlwUGF0aCIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogewogICAgICAgICAgICAgICAgaWQ6IGNsaXBJZAogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgY2hpbGRyZW46IGRlR3JvdXAobWFza1BhdGgpCiAgICAgICAgICAgIH0sIG1hc2tUYWddCiAgICAgICAgICB9OwogICAgICAgICAgY2hpbGRyZW4yLnB1c2goZGVmcywgewogICAgICAgICAgICB0YWc6ICJyZWN0IiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoewogICAgICAgICAgICAgICJmaWxsIjogImN1cnJlbnRDb2xvciIsCiAgICAgICAgICAgICAgImNsaXAtcGF0aCI6ICJ1cmwoIyIuY29uY2F0KGNsaXBJZCwgIikiKSwKICAgICAgICAgICAgICAibWFzayI6ICJ1cmwoIyIuY29uY2F0KG1hc2tJZCwgIikiKQogICAgICAgICAgICB9LCBBTExfU1BBQ0UpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGNoaWxkcmVuOiBjaGlsZHJlbjIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXMKICAgICAgICAgIH07CiAgICAgICAgfTsKICAgICAgfQogICAgfTsKICAgIE1pc3NpbmdJY29uSW5kaWNhdG9yID0gewogICAgICBwcm92aWRlczogZnVuY3Rpb24gcHJvdmlkZXM2KHByb3ZpZGVyczIpIHsKICAgICAgICB2YXIgcmVkdWNlTW90aW9uID0gZmFsc2U7CiAgICAgICAgaWYgKFdJTkRPVy5tYXRjaE1lZGlhKSB7CiAgICAgICAgICByZWR1Y2VNb3Rpb24gPSBXSU5ET1cubWF0Y2hNZWRpYSgiKHByZWZlcnMtcmVkdWNlZC1tb3Rpb246IHJlZHVjZSkiKS5tYXRjaGVzOwogICAgICAgIH0KICAgICAgICBwcm92aWRlcnMyLm1pc3NpbmdJY29uQWJzdHJhY3QgPSBmdW5jdGlvbigpIHsKICAgICAgICAgIHZhciBnQ2hpbGRyZW4gPSBbXTsKICAgICAgICAgIHZhciBGSUxMID0gewogICAgICAgICAgICBmaWxsOiAiY3VycmVudENvbG9yIgogICAgICAgICAgfTsKICAgICAgICAgIHZhciBBTklNQVRJT05fQkFTRSA9IHsKICAgICAgICAgICAgYXR0cmlidXRlVHlwZTogIlhNTCIsCiAgICAgICAgICAgIHJlcGVhdENvdW50OiAiaW5kZWZpbml0ZSIsCiAgICAgICAgICAgIGR1cjogIjJzIgogICAgICAgICAgfTsKICAgICAgICAgIGdDaGlsZHJlbi5wdXNoKHsKICAgICAgICAgICAgdGFnOiAicGF0aCIsCiAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICBkOiAiTTE1Ni41LDQ0Ny43bC0xMi42LDI5LjVjLTE4LjctOS41LTM1LjktMjEuMi01MS41LTM0LjlsMjIuNy0yMi43QzEyNy42LDQzMC41LDE0MS41LDQ0MCwxNTYuNSw0NDcuN3ogTTQwLjYsMjcySDguNSBjMS40LDIxLjIsNS40LDQxLjcsMTEuNyw2MS4xTDUwLDMyMS4yQzQ1LjEsMzA1LjUsNDEuOCwyODksNDAuNiwyNzJ6IE00MC42LDI0MGMxLjQtMTguOCw1LjItMzcsMTEuMS01NC4xbC0yOS41LTEyLjYgQzE0LjcsMTk0LjMsMTAsMjE2LjcsOC41LDI0MEg0MC42eiBNNjQuMywxNTYuNWM3LjgtMTQuOSwxNy4yLTI4LjgsMjguMS00MS41TDY5LjcsOTIuM2MtMTMuNywxNS42LTI1LjUsMzIuOC0zNC45LDUxLjUgTDY0LjMsMTU2LjV6IE0zOTcsNDE5LjZjLTEzLjksMTItMjkuNCwyMi4zLTQ2LjEsMzAuNGwxMS45LDI5LjhjMjAuNy05LjksMzkuOC0yMi42LDU2LjktMzcuNkwzOTcsNDE5LjZ6IE0xMTUsOTIuNCBjMTMuOS0xMiwyOS40LTIyLjMsNDYuMS0zMC40bC0xMS45LTI5LjhjLTIwLjcsOS45LTM5LjgsMjIuNi01Ni44LDM3LjZMMTE1LDkyLjR6IE00NDcuNywzNTUuNWMtNy44LDE0LjktMTcuMiwyOC44LTI4LjEsNDEuNSBsMjIuNywyMi43YzEzLjctMTUuNiwyNS41LTMyLjksMzQuOS01MS41TDQ0Ny43LDM1NS41eiBNNDcxLjQsMjcyYy0xLjQsMTguOC01LjIsMzctMTEuMSw1NC4xbDI5LjUsMTIuNiBjNy41LTIxLjEsMTIuMi00My41LDEzLjYtNjYuOEg0NzEuNHogTTMyMS4yLDQ2MmMtMTUuNyw1LTMyLjIsOC4yLTQ5LjIsOS40djMyLjFjMjEuMi0xLjQsNDEuNy01LjQsNjEuMS0xMS43TDMyMS4yLDQ2MnogTTI0MCw0NzEuNGMtMTguOC0xLjQtMzctNS4yLTU0LjEtMTEuMWwtMTIuNiwyOS41YzIxLjEsNy41LDQzLjUsMTIuMiw2Ni44LDEzLjZWNDcxLjR6IE00NjIsMTkwLjhjNSwxNS43LDguMiwzMi4yLDkuNCw0OS4yaDMyLjEgYy0xLjQtMjEuMi01LjQtNDEuNy0xMS43LTYxLjFMNDYyLDE5MC44eiBNOTIuNCwzOTdjLTEyLTEzLjktMjIuMy0yOS40LTMwLjQtNDYuMWwtMjkuOCwxMS45YzkuOSwyMC43LDIyLjYsMzkuOCwzNy42LDU2LjkgTDkyLjQsMzk3eiBNMjcyLDQwLjZjMTguOCwxLjQsMzYuOSw1LjIsNTQuMSwxMS4xbDEyLjYtMjkuNUMzMTcuNywxNC43LDI5NS4zLDEwLDI3Miw4LjVWNDAuNnogTTE5MC44LDUwIGMxNS43LTUsMzIuMi04LjIsNDkuMi05LjRWOC41Yy0yMS4yLDEuNC00MS43LDUuNC02MS4xLDExLjdMMTkwLjgsNTB6IE00NDIuMyw5Mi4zTDQxOS42LDExNWMxMiwxMy45LDIyLjMsMjkuNCwzMC41LDQ2LjEgbDI5LjgtMTEuOUM0NzAsMTI4LjUsNDU3LjMsMTA5LjQsNDQyLjMsOTIuM3ogTTM5Nyw5Mi40bDIyLjctMjIuN2MtMTUuNi0xMy43LTMyLjgtMjUuNS01MS41LTM0LjlsLTEyLjYsMjkuNSBDMzcwLjQsNzIuMSwzODQuNCw4MS41LDM5Nyw5Mi40eiIKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pOwogICAgICAgICAgdmFyIE9QQUNJVFlfQU5JTUFURSA9IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBBTklNQVRJT05fQkFTRSksIHt9LCB7CiAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJvcGFjaXR5IgogICAgICAgICAgfSk7CiAgICAgICAgICB2YXIgZG90ID0gewogICAgICAgICAgICB0YWc6ICJjaXJjbGUiLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgRklMTCksIHt9LCB7CiAgICAgICAgICAgICAgY3g6ICIyNTYiLAogICAgICAgICAgICAgIGN5OiAiMzY0IiwKICAgICAgICAgICAgICByOiAiMjgiCiAgICAgICAgICAgIH0pLAogICAgICAgICAgICBjaGlsZHJlbjogW10KICAgICAgICAgIH07CiAgICAgICAgICBpZiAoIXJlZHVjZU1vdGlvbikgewogICAgICAgICAgICBkb3QuY2hpbGRyZW4ucHVzaCh7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEFOSU1BVElPTl9CQVNFKSwge30sIHsKICAgICAgICAgICAgICAgIGF0dHJpYnV0ZU5hbWU6ICJyIiwKICAgICAgICAgICAgICAgIHZhbHVlczogIjI4OzE0OzI4OzI4OzE0OzI4OyIKICAgICAgICAgICAgICB9KQogICAgICAgICAgICB9LCB7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MTsxOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBnQ2hpbGRyZW4ucHVzaChkb3QpOwogICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICB0YWc6ICJwYXRoIiwKICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIEZJTEwpLCB7fSwgewogICAgICAgICAgICAgIG9wYWNpdHk6ICIxIiwKICAgICAgICAgICAgICBkOiAiTTI2My43LDMxMmgtMTZjLTYuNiwwLTEyLTUuNC0xMi0xMmMwLTcxLDc3LjQtNjMuOSw3Ny40LTEwNy44YzAtMjAtMTcuOC00MC4yLTU3LjQtNDAuMmMtMjkuMSwwLTQ0LjMsOS42LTU5LjIsMjguNyBjLTMuOSw1LTExLjEsNi0xNi4yLDIuNGwtMTMuMS05LjJjLTUuNi0zLjktNi45LTExLjgtMi42LTE3LjJjMjEuMi0yNy4yLDQ2LjQtNDQuNyw5MS4yLTQ0LjdjNTIuMywwLDk3LjQsMjkuOCw5Ny40LDgwLjIgYzAsNjcuNi03Ny40LDYzLjUtNzcuNCwxMDcuOEMyNzUuNywzMDYuNiwyNzAuMywzMTIsMjYzLjcsMzEyeiIKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIGNoaWxkcmVuOiByZWR1Y2VNb3Rpb24gPyBbXSA6IFt7CiAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgYXR0cmlidXRlczogX29iamVjdFNwcmVhZDIoX29iamVjdFNwcmVhZDIoe30sIE9QQUNJVFlfQU5JTUFURSksIHt9LCB7CiAgICAgICAgICAgICAgICB2YWx1ZXM6ICIxOzA7MDswOzA7MTsiCiAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgfV0KICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZWR1Y2VNb3Rpb24pIHsKICAgICAgICAgICAgZ0NoaWxkcmVuLnB1c2goewogICAgICAgICAgICAgIHRhZzogInBhdGgiLAogICAgICAgICAgICAgIGF0dHJpYnV0ZXM6IF9vYmplY3RTcHJlYWQyKF9vYmplY3RTcHJlYWQyKHt9LCBGSUxMKSwge30sIHsKICAgICAgICAgICAgICAgIG9wYWNpdHk6ICIwIiwKICAgICAgICAgICAgICAgIGQ6ICJNMjMyLjUsMTM0LjVsNywxNjhjMC4zLDYuNCw1LjYsMTEuNSwxMiwxMS41aDljNi40LDAsMTEuNy01LjEsMTItMTEuNWw3LTE2OGMwLjMtNi44LTUuMi0xMi41LTEyLTEyLjVoLTIzIEMyMzcuNywxMjIsMjMyLjIsMTI3LjcsMjMyLjUsMTM0LjV6IgogICAgICAgICAgICAgIH0pLAogICAgICAgICAgICAgIGNoaWxkcmVuOiBbewogICAgICAgICAgICAgICAgdGFnOiAiYW5pbWF0ZSIsCiAgICAgICAgICAgICAgICBhdHRyaWJ1dGVzOiBfb2JqZWN0U3ByZWFkMihfb2JqZWN0U3ByZWFkMih7fSwgT1BBQ0lUWV9BTklNQVRFKSwge30sIHsKICAgICAgICAgICAgICAgICAgdmFsdWVzOiAiMDswOzE7MTswOzA7IgogICAgICAgICAgICAgICAgfSkKICAgICAgICAgICAgICB9XQogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHRhZzogImciLAogICAgICAgICAgICBhdHRyaWJ1dGVzOiB7CiAgICAgICAgICAgICAgY2xhc3M6ICJtaXNzaW5nIgogICAgICAgICAgICB9LAogICAgICAgICAgICBjaGlsZHJlbjogZ0NoaWxkcmVuCiAgICAgICAgICB9OwogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBTdmdTeW1ib2xzID0gewogICAgICBob29rczogZnVuY3Rpb24gaG9va3M3KCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBwYXJzZU5vZGVBdHRyaWJ1dGVzOiBmdW5jdGlvbiBwYXJzZU5vZGVBdHRyaWJ1dGVzKGFjY3VtdWxhdG9yLCBub2RlMikgewogICAgICAgICAgICB2YXIgc3ltYm9sRGF0YSA9IG5vZGUyLmdldEF0dHJpYnV0ZSgiZGF0YS1mYS1zeW1ib2wiKTsKICAgICAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbERhdGEgPT09IG51bGwgPyBmYWxzZSA6IHN5bWJvbERhdGEgPT09ICIiID8gdHJ1ZSA6IHN5bWJvbERhdGE7CiAgICAgICAgICAgIGFjY3VtdWxhdG9yWyJzeW1ib2wiXSA9IHN5bWJvbDsKICAgICAgICAgICAgcmV0dXJuIGFjY3VtdWxhdG9yOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgIH07CiAgICBwbHVnaW5zID0gW0luamVjdENTUywgUmVwbGFjZUVsZW1lbnRzLCBMYXllcnMsIExheWVyc0NvdW50ZXIsIExheWVyc1RleHQsIFBzZXVkb0VsZW1lbnRzLCBNdXRhdGlvbk9ic2VydmVyJDEsIFBvd2VyVHJhbnNmb3JtcywgTWFza3MsIE1pc3NpbmdJY29uSW5kaWNhdG9yLCBTdmdTeW1ib2xzXTsKICAgIHJlZ2lzdGVyUGx1Z2lucyhwbHVnaW5zLCB7CiAgICAgIG1peG91dHNUbzogYXBpCiAgICB9KTsKICAgIG5vQXV0byQxID0gYXBpLm5vQXV0bzsKICAgIGNvbmZpZyQxID0gYXBpLmNvbmZpZzsKICAgIGxpYnJhcnkkMSA9IGFwaS5saWJyYXJ5OwogICAgZG9tJDEgPSBhcGkuZG9tOwogICAgcGFyc2UkMSA9IGFwaS5wYXJzZTsKICAgIGZpbmRJY29uRGVmaW5pdGlvbiQxID0gYXBpLmZpbmRJY29uRGVmaW5pdGlvbjsKICAgIHRvSHRtbCQxID0gYXBpLnRvSHRtbDsKICAgIGljb24yID0gYXBpLmljb247CiAgICBsYXllciA9IGFwaS5sYXllcjsKICAgIHRleHQ4ID0gYXBpLnRleHQ7CiAgICBjb3VudGVyID0gYXBpLmNvdW50ZXI7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZm9ydGF3ZXNvbWUrZnJlZS1icmFuZHMtc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1icmFuZHMtc3ZnLWljb25zL2luZGV4Lm1qcwp2YXIgcHJlZml4LCBmYVNxdWFyZUdpdGh1YiwgZmFHaXRodWJTcXVhcmUsIGZhVGhpbmtQZWFrcywgZmFHb29nbGVEcml2ZSwgZmFBdXRvcHJlZml4ZXIsIGZhU3F1YXJlVmlhZGVvLCBmYVZpYWRlb1NxdWFyZSwgZmFDcGFuZWwsIGZhTWVuZGVsZXksIGZhRHJhZnQyZGlnaXRhbCwgZmFSZXBseWQsIGZhRW1waXJlLCBmYUFjY2Vzc2libGVJY29uLCBmYVF1b3JhLCBmYUNjSmNiLCBmYUZlZG9yYSwgZmFEdW9saW5nbywgZmFGaXJzdGRyYWZ0LCBmYUZyZWVic2QsIGZhT2R5c2VlLCBmYUdnQ2lyY2xlLCBmYUNsb3VkZmxhcmUsIGZhSGFja2VycmFuaywgZmFTa3lhdGxhcywgZmFEZXNrcHJvLCBmYVJlc29sdmluZywgZmFCbGFja2JlcnJ5LCBmYVN0cmlwZVMsIGZhU3F1YXJlQmVoYW5jZSwgZmFCZWhhbmNlU3F1YXJlLCBmYVNlcnZpY2VzdGFjaywgZmFSb2NrZXRjaGF0LCBmYVJlYmVsLCBmYVNxdWFyZVdlYkF3ZXNvbWUsIGZhTGlua3RyZWUsIGZhU2ltcGx5YnVpbHQsIGZhU3R1YmJlciwgZmFBcHBlciwgZmFHb29nbGVTY2hvbGFyLCBmYVlhcm4sIGZhU3RhY2tPdmVyZmxvdywgZmFCbHVldG9vdGgsIGZhQ3JlYXRpdmVDb21tb25zTmNKcCwgZmFSZWRkaXQsIGZhQ29ubmVjdGRldmVsb3AsIGZhUmVzZWFyY2hnYXRlLCBmYVNpZ25hbE1lc3NlbmdlciwgZmFYaW5nLCBmYVNxdWFyZUpzLCBmYUpzU3F1YXJlLCBmYUZvbnRpY29ucywgZmFVcHMsIGZhQW1hem9uUGF5LCBmYVBhbmRvcmEsIGZhT3BlbmlkLCBmYVZzY28sIGZhVWJ1bnR1LCBmYVZpYWNvaW4sIGZhWmhpaHUsIGZhWWFuZGV4LCBmYVBpeGl2LCBmYU9wZW5haSwgZmFTaXRoLCBmYU5mY0RpcmVjdGlvbmFsLCBmYUNyZWF0aXZlQ29tbW9uc0J5LCBmYVVtYnJhY28sIGZhSG9vbGksIGZhU3F1YXJlR2l0LCBmYUdpdFNxdWFyZSwgZmFPZG5va2xhc3NuaWtpLCBmYURydXBhbCwgZmFCbG9nZ2VyQiwgZmFJbnZpc2lvbiwgZmFGYWNlYm9va0YsIGZhQ2VudG9zLCBmYUNjQW1hem9uUGF5LCBmYUViYXksIGZhQ29udGFvLCBmYUVsbG8sIGZhU2lzdHJpeCwgZmFQZXJpc2NvcGUsIGZhRXhwZWRpdGVkc3NsLCBmYU5hcHN0ZXIsIGZhRGVsaWNpb3VzLCBmYUd1aWxkZWQsIGZhWGJveCwgZmFVbnRhcHBkLCBmYUdvb2dsZVBsdXNHLCBmYUdpdGh1YkFsdCwgZmFHZXRQb2NrZXQsIGZhR2xpZGUsIGZhQml0eSwgZmFXcGV4cGxvcmVyLCBmYU1lZ2Fwb3J0LCBmYU1kYiwgZmFQYWdlNCwgZmFUaGVSZWRZZXRpLCBmYUppcmEsIGZhRmVkZXgsIGZhRXZlcm5vdGUsIGZhVXNiLCBmYUFuZ3J5Y3JlYXRpdmUsIGZhTWl6dW5pLCBmYUl0Y2hJbywgZmFXaW5kb3dzLCBmYVN0dW1ibGV1cG9uLCBmYUdvb2dsZSwgZmFEaXNjb3JkLCBmYUhhY2tlck5ld3MsIGZhRWxldmVudHksIGZhMTF0eSwgZmFUZWFtc3BlYWssIGZhU3VwcGxlLCBmYVNxdWFyZVR3aXR0ZXIsIGZhVHdpdHRlclNxdWFyZSwgZmFGb250QXdlc29tZSwgZmFGb250QXdlc29tZUZsYWcsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCwgZmFXaXJzaW5kaGFuZHdlcmssIGZhV3NoLCBmYUNvbmZsdWVuY2UsIGZhRGlnZywgZmFUaHJlYWRzLCBmYVdwcmVzc3IsIGZhUmVuZGFjdCwgZmFZb2FzdCwgZmFOaW1ibHIsIGZhUGl4ZWxmZWQsIGZhWWFob28sIGZhQmx1ZXNreSwgZmFTY3JpYmQsIGZhQ3JlYXRpdmVDb21tb25zUGQsIGZhRWFybHliaXJkcywgZmFTcXVhcmVPZG5va2xhc3NuaWtpLCBmYU9kbm9rbGFzc25pa2lTcXVhcmUsIGZhTWFya2Rvd24sIGZhVHlwbzMsIGZhSm9vbWxhLCBmYVdlaXhpbiwgZmFHcnVudCwgZmFSb2Nrcm1zLCBmYVVuc3BsYXNoLCBmYVNxdWFyZUluc3RhZ3JhbSwgZmFJbnN0YWdyYW1TcXVhcmUsIGZhRmlyc3RPcmRlckFsdCwgZmFGdWxjcnVtLCBmYUJyYXZlUmV2ZXJzZSwgZmFBdmlhbmV4LCBmYU5zOCwgZmFTcXVhcmVQaW50ZXJlc3QsIGZhUGludGVyZXN0U3F1YXJlLCBmYUJsdWV0b290aEIsIGZhR3JpcGZpcmUsIGZhU3F1YXJlR29vZ2xlUGx1cywgZmFHb29nbGVQbHVzU3F1YXJlLCBmYUFwcFN0b3JlLCBmYVdpeCwgZmFJbnRlcmNvbSwgZmFSZWFjdGV1cm9wZSwgZmFXYXplLCBmYUNyZWF0aXZlQ29tbW9uc1JlbWl4LCBmYUJhbmRjYW1wLCBmYVNxdWFyZVdlYkF3ZXNvbWVTdHJva2UsIGZhVmltZW9WLCBmYVN0cmF2YSwgZmFVbmlyZWdpc3RyeSwgZmFDY0RpbmVyc0NsdWIsIGZhUGludGVyZXN0LCBmYUFsZ29saWEsIGZhU3RhY2twYXRoLCBmYU9jdG9wdXNEZXBsb3ksIGZhWWFtbWVyLCBmYU1vZHgsIGZhU3F1YXJlVGhyZWFkcywgZmFPbGRSZXB1YmxpYywgZmFTdXNlLCBmYUFwcFN0b3JlSW9zLCBmYVNxdWFyZURyaWJiYmxlLCBmYURyaWJiYmxlU3F1YXJlLCBmYVVpa2l0LCBmYVN1cGVycG93ZXJzLCBmYVlvdXR1YmUsIGZhRW1iZXIsIGZhQm9vdHN0cmFwLCBmYUl0dW5lcywgZmFTcXVhcmVYaW5nLCBmYVhpbmdTcXVhcmUsIGZhQ3NzM0FsdCwgZmFTcXVhcmVzcGFjZSwgZmFUcmVsbG8sIGZhVmlhZGVvLCBmYVNlYXJjaGVuZ2luLCBmYVBheXBhbCwgZmFTcXVhcmVCbHVlc2t5LCBmYURBbmREQmV5b25kLCBmYU1pY3Jvc29mdCwgZmFGbHksIGZhQ2NTdHJpcGUsIGZhV29yZHByZXNzU2ltcGxlLCBmYVNlbGxzeSwgZmFEYXNoY3ViZSwgZmFHaXR0ZXIsIGZhV29sZlBhY2tCYXR0YWxpb24sIGZhTGFzdGZtLCBmYVNob3B3YXJlLCBmYUJsb2dnZXIsIGZhRWRnZSwgZmFJb3hob3N0LCBmYVNjaGxpeCwgZmFEQW5kRCwgZmFWdWVqcywgZmFNZXRhLCBmYUNyZWF0aXZlQ29tbW9uc1NoYXJlLCBmYVN0dWRpb3ZpbmFyaSwgZmFCaXRidWNrZXQsIGZhVmssIGZhR2l0aHViLCBmYUNvZGllcGllLCBmYVBpZWRQaXBlciwgZmFSYXNwYmVycnlQaSwgZmFDc3MzLCBmYUh1YnNwb3QsIGZhQ21wbGlkLCBmYUR5YWxvZywgZmFFbGVtZW50b3IsIGZhRmlyc3RPcmRlciwgZmFEcmliYmJsZSwgZmFMaW5rZWRpbiwgZmFDY1BheXBhbCwgZmFEaGwsIGZhVGV4LCBmYVNob3BpZnksIGZhU3F1YXJlUmVkZGl0LCBmYVJlZGRpdFNxdWFyZSwgZmFDcmVhdGl2ZUNvbW1vbnNOYywgZmFHYWxhY3RpY1JlcHVibGljLCBmYUZhY2Vib29rLCBmYUdpdGxhYiwgZmFRcSwgZmFTdHJpcGUsIGZhRGFpbHltb3Rpb24sIGZhU3RlYW0sIGZhU25hcGNoYXQsIGZhU25hcGNoYXRHaG9zdCwgZmFHYWxhY3RpY1NlbmF0ZSwgZmFQaG9lbml4RnJhbWV3b3JrLCBmYUdpdCwgZmFPcHRpbk1vbnN0ZXIsIGZhSmVua2lucywgZmFTbGlkZXNoYXJlLCBmYVViZXIsIGZhRGlnaXRhbE9jZWFuLCBmYVNvdW5kY2xvdWQsIGZhU3F1YXJlRmlnbWEsIGZhQ3JlYXRpdmVDb21tb25zU2EsIGZhQ2hyb21lLCBmYVRyYWRlRmVkZXJhdGlvbiwgZmFWYWFkaW4sIGZhRGV2aWFudGFydCwgZmFNZWRpdW0sIGZhTWVkaXVtTSwgZmFPcGVuY2FydCwgZmFZQ29tYmluYXRvciwgZmFMaW5lLCBmYUFtaWxpYSwgZmFBc3ltbWV0cmlrLCBmYVBoYWJyaWNhdG9yLCBmYUJvdHMsIGZhVmluZSwgZmFNZWRydCwgZmFPc2ksIGZhR2csIGZhQnV5c2VsbGFkcywgZmFHb29nbGVQbHVzLCBmYVNjcmVlbnBhbCwgZmFCaXRjb2luLCBmYVN3aWZ0LCBmYUZpbGVzUGlud2hlZWwsIGZhTGFyYXZlbCwgZmFXcGZvcm1zLCBmYVNwZWFrZXJEZWNrLCBmYUZsaWNrciwgZmFDY1Zpc2EsIGZhVXB3b3JrLCBmYUtha2FvVGFsaywgZmFGbHV0dGVyLCBmYUJ1ZmZlciwgZmFHcmF0aXBheSwgZmFHb29nbGVQYXksIGZhQXBwbGUsIGZhVHVtYmxyLCBmYVBob2VuaXhTcXVhZHJvbiwgZmFDZW50ZXJjb2RlLCBmYURlYmlhbiwgZmFNYXN0b2RvbiwgZmFTa2V0Y2gsIGZhV2ViQXdlc29tZSwgZmFTYXNzLCBmYVNxdWFyZVdoYXRzYXBwLCBmYVdoYXRzYXBwU3F1YXJlLCBmYVNreXBlLCBmYUFuZ3VsYXIsIGZhT3BlbnN1c2UsIGZhRHJvcGJveCwgZmFEZWV6ZXIsIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmcsIGZhSmVkaU9yZGVyLCBmYVJQcm9qZWN0LCBmYUluc3RhbG9kLCBmYUNhbmFkaWFuTWFwbGVMZWFmLCBmYUV0aGVyZXVtLCBmYUhvdXp6LCBmYVZpYmVyLCBmYUtpY2tzdGFydGVyLCBmYVNxdWFyZUtpY2tzdGFydGVyLCBmYVNwb3RpZnksIGZhTGVhbnB1YiwgZmFKYXZhLCBmYU5mY1N5bWJvbCwgZmFXb2R1LCBmYVNxdWFyZVN0ZWFtLCBmYVN0ZWFtU3F1YXJlLCBmYUNyZWF0aXZlQ29tbW9uc05jRXUsIGZhTnBtLCBmYUNsb3Vkc2NhbGUsIGZhVGhlbWVjbywgZmFHb29nbGVQbGF5LCBmYUtvcnZ1ZSwgZmFXM2MsIGZhR3JhdiwgZmFBd3MsIGZhR2xpZGVHLCBmYUpzZmlkZGxlLCBmYUtleWJhc2UsIGZhTHVtb25Ecm9wLCBmYVdlZWJseSwgZmFEb2NrZXIsIGZhTWFnZW50bywgZmFHaXRBbHQsIGZhRmlyZWZveEJyb3dzZXIsIGZhQ2xvdWRzbWl0aCwgZmFXaXphcmRzT2ZUaGVDb2FzdCwgZmFDcmVhdGl2ZUNvbW1vbnNOZCwgZmFVc3BzLCBmYVNxdWFyZUxldHRlcmJveGQsIGZhTWFuZGFsb3JpYW4sIGZhU2xhY2ssIGZhU2xhY2tIYXNoLCBmYUFuZ2VsbGlzdCwgZmFBbmRyb2lkLCBmYU1lZXR1cCwgZmFGb250aWNvbnNGaSwgZmFQYWxmZWQsIGZhV3BiZWdpbm5lciwgZmFEaWFzcG9yYSwgZmFQcm9kdWN0SHVudCwgZmFTcXVhcmVVcHdvcmssIGZhQ3V0dGxlZmlzaCwgZmFNZWRhcHBzLCBmYVBpeCwgZmFTcXVhcmVUdW1ibHIsIGZhVHVtYmxyU3F1YXJlLCBmYVJlYWN0LCBmYUp4bCwgZmFTcXVhcmVMaW5rZWRpbiwgZmFDc3MsIGZhSGFzaG5vZGUsIGZhUmVkZGl0QWxpZW4sIGZhVGlrdG9rLCBmYVdvcmRwcmVzcywgZmFJZGVhbCwgZmFQaWVkUGlwZXJQcCwgZmFVc3N1bm5haCwgZmFGb3J0QXdlc29tZUFsdCwgZmFCdXJvbW9iZWxleHBlcnRlLCBmYUJpbGliaWxpLCBmYU5lb3MsIGZhRGV2LCBmYUhvdGphciwgZmFEb2NodWIsIGZhVmltZW8sIGZhTWF4Y2RuLCBmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlLCBmYUZvbnRBd2Vzb21lQWx0LCBmYVNwZWFrYXAsIGZhRmFudGFzeUZsaWdodEdhbWVzLCBmYUxpbnV4LCBmYUNvdHRvbkJ1cmVhdSwgZmFHb29nbGVXYWxsZXQsIGZhRm91cnNxdWFyZSwgZmFTaGlydHNpbmJ1bGssIGZhTWludGJpdCwgZmFTdGF5bGlua2VkLCBmYVdlYmZsb3csIGZhUmVucmVuLCBmYVJldiwgZmFLZXljZG4sIGZhSGlyZUFIZWxwZXIsIGZhU3F1YXJlSGFja2VyTmV3cywgZmFIYWNrZXJOZXdzU3F1YXJlLCBmYUNyZWF0aXZlQ29tbW9uc1BkQWx0LCBmYU9yY2lkLCBmYUJlaGFuY2UsIGZhTW9uZXJvLCBmYUZpZ21hLCBmYUluc3RhZ3JhbSwgZmFQZXJieXRlLCBmYVNxdWFyZVZpbWVvLCBmYVZpbWVvU3F1YXJlLCBmYVB1c2hlZCwgZmFNaXhjbG91ZCwgZmFZYW5kZXhJbnRlcm5hdGlvbmFsLCBmYUhpdmUsIGZhQ3JlYXRpdmVDb21tb25zWmVybywgZmFTcXVhcmVTbmFwY2hhdCwgZmFTbmFwY2hhdFNxdWFyZSwgZmFUaGVtZWlzbGUsIGZhRGFydExhbmcsIGZhRGVwbG95ZG9nLCBmYUZsaXBib2FyZCwgZmFCdXlOTGFyZ2UsIGZhV2F0Y2htYW5Nb25pdG9yaW5nLCBmYUhpcHMsIGZhQ2xvdWR2ZXJzaWZ5LCBmYUdvb2RyZWFkcywgZmFUaWRhbCwgZmFVbml0eSwgZmFUZW5jZW50V2VpYm8sIGZhRnJlZUNvZGVDYW1wLCBmYVhUd2l0dGVyLCBmYVN0aWNrZXJNdWxlLCBmYVR3aXRjaCwgZmFLaWNrc3RhcnRlckssIGZhQ3JpdGljYWxSb2xlLCBmYVN0ZWFtU3ltYm9sLCBmYU1haWxjaGltcCwgZmFMdW1vbiwgZmFOdXRyaXRpb25peCwgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZ1BsdXMsIGZhUmVkaGF0LCBmYVNxdWFyZVBpZWRQaXBlciwgZmFQaWVkUGlwZXJTcXVhcmUsIGZhV2hhdHNhcHAsIGZhSW1kYiwgZmFQeXRob24sIGZhQ2FzaEFwcCwgZmFQaW50ZXJlc3RQLCBmYVdobWNzLCBmYUpvZ2V0LCBmYVNxdWFyZVlvdXR1YmUsIGZhWW91dHViZVNxdWFyZSwgZmFBdGxhc3NpYW4sIGZhUGllZFBpcGVySGF0LCBmYUludGVybmV0RXhwbG9yZXIsIGZhQWlyYm5iLCBmYUpzLCBmYVF1aW5zY2FwZSwgZmFBZHZlcnNhbCwgZmFDcmVhdGl2ZUNvbW1vbnMsIGZhTm90aW9uLCBmYUNocm9tZWNhc3QsIGZhV2lraXBlZGlhVywgZmFTaXRyb3gsIGZhU3F1YXJlR2l0bGFiLCBmYUdpdGxhYlNxdWFyZSwgZmFTaG9lbGFjZSwgZmFTZWxsY2FzdCwgZmFNaXgsIGZhQ2NBcHBsZVBheSwgZmFCcmF2ZSwgZmFFdHN5LCBmYUJ0YywgZmFBZG4sIGZhU3F1YXJlWFR3aXR0ZXIsIGZhU3F1YXJlRm9udEF3ZXNvbWUsIGZhRm9ydW1iZWUsIGZhNDJHcm91cCwgZmFJbm5vc29mdCwgZmFTdHVtYmxldXBvbkNpcmNsZSwgZmFTeW1mb255LCBmYVNhbGVzZm9yY2UsIGZhU291cmNldHJlZSwgZmFMaW5rZWRpbkluLCBmYUh0bWw1LCBmYVJ1c3QsIGZhSG9ybmJpbGwsIGZhUGhwLCBmYURpc3F1cywgZmE1MDBweCwgZmFBZmZpbGlhdGV0aGVtZSwgZmFSZWRSaXZlciwgZmFUd2l0dGVyLCBmYUZvcnRBd2Vzb21lLCBmYU1peGVyLCBmYUx5ZnQsIGZhQXBwbGVQYXksIGZhQXJ0c3RhdGlvbiwgZmFOb2RlSnMsIGZhVW5jaGFydGVkLCBmYVBsYXlzdGF0aW9uLCBmYU1pY3JvYmxvZywgZmFHaXRrcmFrZW4sIGZhVGVsZWdyYW0sIGZhVGVsZWdyYW1QbGFuZSwgZmFJdHVuZXNOb3RlLCBmYUxlc3MsIGZhRmlyZWZveCwgZmFLYWdnbGUsIGZhRmFjZWJvb2tNZXNzZW5nZXIsIGZhQXVkaWJsZSwgZmFQYXRyZW9uLCBmYVZudiwgZmFQYWdlbGluZXMsIGZhQW1hem9uLCBmYUVudmlyYSwgZmFMaW5vZGUsIGZhQWNjdXNvZnQsIGZhRXJsYW5nLCBmYUNjRGlzY292ZXIsIGZhU2FmYXJpLCBmYVNwYWNlQXdlc29tZSwgZmFOb2RlLCBmYUNvZGVwZW4sIGZhUmF2ZWxyeSwgZmFBbGlwYXksIGZhQ2NBbWV4LCBmYVBpZWRQaXBlckFsdCwgZmFMZXR0ZXJib3hkLCBmYU9wZXJhLCBmYVdlaWJvLCBmYVJlYWRtZSwgZmFHb2xhbmcsIGZhU3RhY2tFeGNoYW5nZSwgZmFHdWxwLCBmYVllbHAsIGZhR29mb3JlLCBmYUF2aWF0bywgZmFQYWRsZXQsIGZhRWRnZUxlZ2FjeSwgZmFTcXVhcmVMYXN0Zm0sIGZhTGFzdGZtU3F1YXJlLCBmYUdvb2RyZWFkc0csIGZhQ2NNYXN0ZXJjYXJkLCBmYURpc2NvdXJzZSwgZmFCbGFja1RpZSwgZmFTcXVhcmVGYWNlYm9vaywgZmFGYWNlYm9va1NxdWFyZSwgZmFCYXR0bGVOZXQsIGZhQmltb2JqZWN0LCBpY29uczsKdmFyIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtYnJhbmRzLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanMiKCkgewogICAgcHJlZml4ID0gImZhYiI7CiAgICBmYVNxdWFyZUdpdGh1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ2l0aHViIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdpdGh1Yi1zcXVhcmUiXSwgImYwOTIiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yNjUuOCA0MDcuN2MwLTEuOCAwLTYgLjEtMTEuNiAuMS0xMS40IC4xLTI4LjggLjEtNDMuNyAwLTE1LjYtNS4yLTI1LjUtMTEuMy0zMC43IDM3LTQuMSA3Ni05LjIgNzYtNzMuMSAwLTE4LjItNi41LTI3LjMtMTcuMS0zOSAxLjctNC4zIDcuNC0yMi0xLjctNDUtMTMuOS00LjMtNDUuNyAxNy45LTQ1LjcgMTcuOS0yNi42LTcuNS01Ni42LTcuNS04My4yIDAgMCAwLTMxLjgtMjIuMi00NS43LTE3LjktOS4xIDIyLjktMy41IDQwLjYtMS43IDQ1LTEwLjYgMTEuNy0xNS42IDIwLjgtMTUuNiAzOSAwIDYzLjYgMzcuMyA2OSA3NC4zIDczLjEtNC44IDQuMy05LjEgMTEuNy0xMC42IDIyLjMtOS41IDQuMy0zMy44IDExLjctNDguMy0xMy45LTkuMS0xNS44LTI1LjUtMTcuMS0yNS41LTE3LjEtMTYuMi0uMi0xLjEgMTAuMi0xLjEgMTAuMiAxMC44IDUgMTguNCAyNC4yIDE4LjQgMjQuMiA5LjcgMjkuNyA1Ni4xIDE5LjcgNTYuMSAxOS43IDAgOSAuMSAyMS43IC4xIDMwLjYgMCA0LjggLjEgOC42IC4xIDEwIDAgNC4zLTMgOS41LTExLjUgOC02Ni0yMi4xLTExMi4yLTg0LjktMTEyLjItMTU4LjMgMC05MS44IDcwLjItMTYxLjUgMTYyLTE2MS41UzM4OCAxNjUuNiAzODggMjU3LjRjLjEgNzMuNC00NC43IDEzNi4zLTExMC43IDE1OC4zLTguNCAxLjUtMTEuNS0zLjctMTEuNS04em0tOTAuNS01NC44Yy0uMi0xLjUgMS4xLTIuOCAzLTMuMiAxLjktLjIgMy43IC42IDMuOSAxLjkgLjMgMS4zLTEgMi42LTMgMy0xLjkgLjQtMy43LS40LTMuOS0xLjd6bS05LjEgMy4yYy0yLjIgLjItMy43LS45LTMuNy0yLjQgMC0xLjMgMS41LTIuNCAzLjUtMi40IDEuOS0uMiAzLjcgLjkgMy43IDIuNCAwIDEuMy0xLjUgMi40LTMuNSAyLjR6bS0xNC4zLTIuMmMtMS45LS40LTMuMi0xLjktMi44LTMuMnMyLjQtMS45IDQuMS0xLjVjMiAuNiAzLjMgMi4xIDIuOCAzLjQtLjQgMS4zLTIuNCAxLjktNC4xIDEuM3ptLTEyLjUtNy4zYy0xLjUtMS4zLTEuOS0zLjItLjktNC4xIC45LTEuMSAyLjgtLjkgNC4zIC42IDEuMyAxLjMgMS44IDMuMyAuOSA0LjEtLjkgMS4xLTIuOCAuOS00LjMtLjZ6bS04LjUtMTBjLTEuMS0xLjUtMS4xLTMuMiAwLTMuOSAxLjEtLjkgMi44LS4yIDMuNyAxLjMgMS4xIDEuNSAxLjEgMy4zIDAgNC4xLS45IC42LTIuNiAwLTMuNy0xLjV6bS02LjMtOC44Yy0xLjEtMS4zLTEuMy0yLjgtLjQtMy41IC45LS45IDIuNC0uNCAzLjUgLjYgMS4xIDEuMyAxLjMgMi44IC40IDMuNS0uOSAuOS0yLjQgLjQtMy41LS42em0tNi02LjRjLTEuMy0uNi0xLjktMS43LTEuNS0yLjYgLjQtLjYgMS41LS45IDIuOC0uNCAxLjMgLjcgMS45IDEuOCAxLjUgMi42LS40IC45LTEuNyAxLjEtMi44IC40eiJdCiAgICB9OwogICAgZmFHaXRodWJTcXVhcmUgPSBmYVNxdWFyZUdpdGh1YjsKICAgIGZhVGhpbmtQZWFrcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aGluay1wZWFrcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzMxIiwgIk00NjUuNCA0MDkuNGw4Ny4xLTE1MC4yLTMyLS4zLTU1LjEgOTUtMjA2LjItMzUzLjktMjM2LjIgNDA3LjQgMzIgLjMgMjA0LjItMzUyLjEgMjA2LjIgMzUzLjh6TTExMC4xIDM2NS4zbDMyLjEgMCAxMTcuNC0yMDIuNSAyMDMuNCAzNDkuMSAzMi41IC4xLTIzNS44LTQwNC42LTE0OS42IDI1Ny45eiJdCiAgICB9OwogICAgZmFHb29nbGVEcml2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtZHJpdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNhYSIsICJNMzM5IDMxNC45TDE3NS40IDMyIDMzNi42IDMyIDUwMC4yIDMxNC45IDMzOSAzMTQuOXpNMjAxLjUgMzM4LjVsLTgwLjYgMTQxLjUgMzEwLjUgMCA4MC42LTE0MS41LTMxMC41IDB6TTE1NC4xIDY3LjRMMCAzMzguNSA4MC42IDQ4MCAyMzcgMjA4LjggMTU0LjEgNjcuNHoiXQogICAgfTsKICAgIGZhQXV0b3ByZWZpeGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF1dG9wcmVmaXhlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDFjIiwgIk0zMTguNCAxNmwtMTYxIDQ4MCA3Ny41IDAgMjUuNC04MS40IDExOS41IDAgMjUuMiA4MS40IDc3LjUgMC0xNjQuMS00ODB6TTI3OC4xIDM1Ny45bDQxLjItMTMwLjQgMS41IDAgNDAuOSAxMzAuNC04My42IDB6TTY0MCA0MDVMNjMwIDM3My42IDQ2Mi4xIDM1OCA0ODEuNSA0MTQuNSA2NDAgNDA1ek0xNzcuOSAzNThMMTAgMzczLjcgMCA0MDUgMTU4LjUgNDE0LjQgMTc3LjkgMzU4eiJdCiAgICB9OwogICAgZmFTcXVhcmVWaWFkZW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpYWRlbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ2aWFkZW8tc3F1YXJlIl0sICJmMmFhIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTE4LjMgMzgxLjJjLTY4LTczLjYtMTkuOC0xOTYuMSA4MS4yLTE5Ni4xIDEzLjMgMCAyNi42IDIuMSAzOS4xIDYuNy00LjMgOC40LTcuMyAxNy42LTguNCAyNy4xLTkuNy00LjEtMjAuMi02LTMwLjctNi00OC44IDAtODQuNiA0MS43LTg0LjYgODguOSAwIDQzIDI4LjUgNzguNyA2OS41IDg1LjkgNjEuNS0yNCA3Mi45LTExNy42IDcyLjktMTc1IDAtNy4zIDAtMTQuOC0uNi0yMi4xLTExLjItMzIuOS0yNi42LTY0LjYtNDQuMi05NC41IDI3LjEgMTguMyA0MS45IDYyLjUgNDQuMiA5NC4xbDAgLjRjNy43IDIyLjUgMTEuOCA0Ni4yIDExLjggNzAgMCA1NC4xLTIxLjkgOTktNjguMyAxMjguMmwtMi40IC4yYzUwIDEgODYuMi0zOC42IDg2LjItODcuMiAwLTEyLjItMi4xLTI0LjMtNi45LTM1LjcgOS41LTEuOSAxOC41LTUuNiAyNi40LTEwLjUgMTUuMyAzNi42IDEyLjYgODcuMy0yMi44IDEyNS42LTQyLjQgNDYuMi0xMjAgNDYuNi0xNjIuNCAwek0yNzQuNiAyMTcuNmMyMS45LTEyIDQ5LjYtMzAuNyA2Mi4zLTUzIDEuNS0zIDQuMS04LjYgNC41LTEyLTEyLjUgMjcuOS00NC4yIDQ5LjgtNzMuOSA1Ni43LTQuNy03LjMtNy41LTE1LjUtNy41LTI0LjMgMC0xMC4zIDUuMi0yNC4xIDEyLjktMzEuNiA4LjMtNy45IDE4LTEwLjkgMjcuOS0xNC4xIDE2LTUuMSAzMi41LTEwLjMgNDQuNS0zNS45IDMyLjUgNDYuMiAxMy4xIDEzMC4zLTM2LjMgMTMwLjMtMTMuMyAwLTI1LjEtNy4xLTM0LjQtMTYuMXoiXQogICAgfTsKICAgIGZhVmlhZGVvU3F1YXJlID0gZmFTcXVhcmVWaWFkZW87CiAgICBmYUNwYW5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcGFuZWwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM4OCIsICJNMjEwLjMgMjIwLjJjLTUuNi0yNC44LTI2LjktNDEuMi01MS00MS4ybC0zNyAwYy03LjEgMC0xMi41IDQuNS0xNC4zIDEwLjlMNzMuMSAzMjAgOTcuOCAzMTkuOWM2LjggMCAxMi4zLTQuNSAxNC4yLTEwLjdsMjUuOC05NS43IDE5LjggMGM4LjQgMCAxNi4yIDUuNiAxOC4zIDE0LjggMi41IDEwLjktNS45IDIyLjYtMTguMyAyMi42bC0xMC4zIDBjLTcgMC0xMi41IDQuNi0xNC4zIDEwLjhsLTYuNCAyMy44IDMyIDBjMzcuMiAwIDU4LjMtMzYuMiA1MS43LTY1LjN6bS0xNTYuNSAyOGwxOC42IDBjNi45IDAgMTIuNC00LjQgMTQuMy0xMC45bDYuMi0yMy42LTQwIDBDMzAgMjEzLjcgOSAyMjcuOCAxLjcgMjU0LjgtNyAyODguNiAxOC41IDMyMCA1MiAzMjBsMTIuNCAwIDcuMS0yNi4xYzEuMi00LjQtMi4yLTguMy02LjQtOC4zbC0xMS4zIDBjLTI0LjcgMC0yNC45LTM3LjQgMC0zNy40em0yNDcuNS0zNC44bC03Ny45IDAtMy41IDEzLjRjLTIuNCA5LjYgNC41IDE4LjUgMTQuMiAxOC41bDU3LjUgMGM0IDAgMi40IDQuMyAyLjEgNS4zbC04LjYgMzEuOGMtLjQgMS40LS45IDUuMy01LjUgNS4zbC0zNC45IDBjLTUuMyAwLTUuMy03LjkgMC03LjlsMjEuNiAwYzYuOCAwIDEyLjMtNC42IDE0LjItMTAuOGwzLjUtMTMuMi00OC40IDBjLTM5LjIgMC00My42IDYzLjgtLjcgNjMuOGw1Ny41IC4yYzExLjIgMCAyMC42LTcuMiAyMy40LTE3LjhsMTQtNTEuOGM0LjgtMTkuMi05LjctMzYuOC0yOC41LTM2Ljh6TTYzMy4xIDE3OWwtMTguOSAwYy00LjkgMC05LjIgMy4yLTEwLjQgNy45TDU2OC4yIDMyMGMyMC43IDAgMzkuOC0xMy44IDQ0LjktMzQuNWwyNi41LTk4LjJjMS4yLTQuMy0yLTguMy02LjUtOC4zek0zOTYuOCAyMTMuN2wwIC4xLTQ4LjMgMC0yNi4yIDk4Yy0xLjIgNC40IDIuMiA4LjMgNi40IDguM2wxOC45IDBjNC44IDAgOS4yLTMgMTAuNC03LjhsMTcuMi02NCAxOS44IDBjMTIuNSAwIDIxLjQgMTEuOCAxOC4xIDIzLjRsLTEwLjYgNDBjLTEuMiA0LjMgMS45IDguMyA2LjQgOC4zbDE5LjEgMGM0LjYgMCA5LjEtMi45IDEwLjMtNy44bDguOC0zMy4xYzktMzMuMS0xNS45LTY1LjQtNTAuMy02NS40em05OC4zIDc0LjZjLTMuNiAwLTYtMy40LTUuMS02LjdsOC0zMGMuOS0zLjkgMy43LTYgNy44LTZsMzIuOSAwYzIuNiAwIDQuNiAyLjQgMy45IDUuMWwtLjcgMi42Yy0uNiAyLTEuOSAzLTMuOSAzbC0yMS42IDBjLTcgMC0xMi42IDQuNi0xNC4yIDEwLjhsLTMuNSAxMyA1My40IDBjMTAuNSAwIDIwLjMtNi42IDIzLjItMTcuNmwzLjItMTJjNC45LTE5LjEtOS4zLTM2LjgtMjguMy0zNi44bC00Ny4zIDBjLTE3LjkgMC0zMy44IDEyLTM4LjYgMjkuNmwtMTAuOCA0MGMtNSAxNy43IDguMyAzNi43IDI4LjMgMzYuN2w2Ni43IDBjNi44IDAgMTIuMy00LjUgMTQuMi0xMC43bDUuNy0yMS03My4zIDB6Il0KICAgIH07CiAgICBmYU1lbmRlbGV5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lbmRlbGV5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3YjMiLCAiTTYyNC42IDMyNS4yYy0xMi4zLTEyLjQtMjkuNy0xOS4yLTQ4LjQtMTcuMi00My4zLTEtNDkuNy0zNC45LTM3LjUtOTguOCAyMi44LTU3LjUtMTQuOS0xMzEuNS04Ny40LTEzMC44LTc3LjQgLjctODEuNyA4Mi0xMzAuOSA4Mi00OC4xIDAtNTQtODEuMy0xMzAuOS04Mi03Mi45LS44LTExMC4xIDczLjMtODcuNCAxMzAuOCAxMi4yIDYzLjkgNS44IDk3LjgtMzcuNSA5OC44LTIxLjItMi4zLTM3IDYuNS01MyAyMi41LTE5LjkgMTkuNy0xOS4zIDk0LjggNDIuNiAxMDIuNiA0Ny4xIDUuOSA4MS42LTQyLjkgNjEuMi04Ny44LTQ3LjMtMTAzLjcgMTg1LjktMTA2LjEgMTQ2LjUtOC4yLS4xIC4xLS4yIC4yLS4zIC40LTI2LjggNDIuOCA2LjggOTcuNCA1OC44IDk1LjIgNTIuMSAyLjEgODUuNC01Mi42IDU4LjgtOTUuMi0uMS0uMi0uMi0uMy0uMy0uNC0zOS40LTk3LjkgMTkzLjgtOTUuNSAxNDYuNSA4LjItNC42IDEwLTYuNyAyMS4zLTUuNyAzMyA0LjkgNTMuNCA2OC43IDc0LjEgMTA0LjkgMzUuMiAxNy44LTE0LjggMjMuMS02NS42IDAtODguM3pNMzIwLjcgMzA2LjFsLS42IDBjLTQzLjQgMC02Mi44LTM3LjUtNjIuOC02Mi44IDAtMzQuNyAyOC4yLTYyLjggNjIuOC02Mi44bC42IDBjMzQuNyAwIDYyLjggMjguMSA2Mi44IDYyLjggMCAyNS0xOS4yIDYyLjgtNjIuOCA2Mi44eiJdCiAgICB9OwogICAgZmFEcmFmdDJkaWdpdGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRyYWZ0MmRpZ2l0YWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM5NiIsICJNNDk2IDM5OC4xbC0xNDQtODIuMiAwIDY0LjctOTEuMyAwYzMwLjgtMzUgODEuOC05NS45IDExMS44LTE0OS4zIDM1LjItNjIuNiAxNi4xLTEyMy40LTEyLjgtMTUzLjMtNC40LTQuNi02Mi4yLTYyLjktMTY2LTQxLjItNTkuMSAxMi40LTg5LjQgNDMuNC0xMDQuMyA2Ny4zLTEzLjEgMjAuOS0xNyAzOS44LTE4LjIgNDcuNy01LjUgMzMgMTkuNCA2Ny4xIDU2LjcgNjcuMSAzMS43IDAgNTcuMy0yNS43IDU3LjMtNTcuNCAwLTI3LjEtMTkuNy01Mi4xLTQ4LTU2LjggMS44LTcuMyAxNy43LTIxLjEgMjYuMy0yNC43IDQxLjEtMTcuMyA3OCA1LjIgODMuMyAzMy41IDguMyA0NC4zLTM3LjEgOTAuNC02OS43IDEyNy42LTc2LjYgODctMTQyLjggMTU1LjctMTYxLjEgMTc0LjhsMzM2LS4xIDAgNjQuMiAxNDQtODEuOXpNMzg1LjkgMzcxbDQ3LjEgMjcuMi00Ny4xIDI3LjIgMC01NC40ek0xMDUuNCAxNjEuNGEyMi40IDIyLjQgMCAxIDEgNDQuOCAwIDIyLjQgMjIuNCAwIDEgMSAtNDQuOCAwek05OC41IDM4MC41YzI1LjYtMjcuNCA5Ny43LTEwNC43IDE1MC44LTE2OS45IDM1LjEtNDMuMSA0MC4zLTgyLjQgMjguNC0xMTIuNy03LjQtMTguOC0xNy41LTMwLjItMjQuMy0zNS43IDQ1LjMgMi4xIDY4IDIzLjQgODIuMiAzOC4zIDAgMCA0Mi40IDQ4LjIgNS44IDExMy4zLTM3IDY1LjktMTEwLjkgMTQ3LjUtMTI4LjUgMTY2LjdsLTExNC40IDB6Il0KICAgIH07CiAgICBmYVJlcGx5ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlNiIsICJNMzIwIDQ4MGwtMTkyIDBDNTcuNiA0ODAgMCA0MjIuNCAwIDM1MkwwIDE2MEMwIDg5LjYgNTcuNiAzMiAxMjggMzJsMTkyIDBjNzAuNCAwIDEyOCA1Ny42IDEyOCAxMjhsMCAxOTJjMCA3MC40LTU3LjYgMTI4LTEyOCAxMjh6TTE5My40IDI3My4yYy02LjEtMi0xMS42LTMuMS0xNi40LTMuMS03LjIgMC0xMy41IDEuOS0xOC45IDUuNnMtOS42IDktMTIuOCAxNS44bC0xLjEgMC00LjItMTguMy0yOCAwIDAgMTM4LjkgMzYuMSAwIDAtODkuN2MxLjUtNS40IDQuNC05LjggOC43LTEzLjJzOS44LTUuMSAxNi4yLTUuMWM0LjYgMCA5LjggMSAxNS42IDMuMWw0LjgtMzR6TTMwOC42IDM3Ni42Yy0zLjIgMi40LTcuNyA0LjgtMTMuNyA3LjFzLTEyLjggMy41LTIwLjQgMy41Yy0xMi4yIDAtMjEuMS0zLTI2LjUtOC45LTUuNS01LjktOC41LTE0LjctOS0yNi40bDgzLjMgMGMuOS00LjggMS42LTkuNCAyLjEtMTMuOSAuNS00LjQgLjctOC42IC43LTEyLjUgMC0xMC43LTEuNi0xOS43LTQuNy0yNi45LTMuMi03LjItNy4zLTEzLTEyLjUtMTcuMi01LjItNC4zLTExLjEtNy4zLTE3LjgtOS4yLTYuNy0xLjgtMTMuNS0yLjgtMjAuNi0yLjgtMjEuMSAwLTM3LjUgNi4xLTQ5LjIgMTguM3MtMTcuNSAzMC41LTE3LjUgNTVjMCAyMi44IDUuMiA0MC43IDE1LjYgNTMuNyAxMC40IDEzLjEgMjYuOCAxOS42IDQ5LjIgMTkuNiAxMC43IDAgMjAuOS0xLjUgMzAuNC00LjZzMTcuMS02LjggMjIuNi0xMS4ybC0xMi0yMy42em0tMjEuOC03MC4zYzMuOCA1LjQgNS4zIDEzLjEgNC42IDIzLjFsLTUxLjcgMGMuOS05LjQgMy43LTE3IDguMi0yMi42czExLjUtOC41IDIxLTguNWM4LjItLjEgMTQuMSAyLjYgMTcuOSA4em03OS45IDIuNWM0LjEgMy45IDkuNCA1LjggMTYuMSA1LjggNyAwIDEyLjYtMS45IDE2LjctNS44czYuMS05LjEgNi4xLTE1LjYtMi0xMS42LTYuMS0xNS40LTkuNi01LjctMTYuNy01LjdjLTYuNyAwLTEyIDEuOS0xNi4xIDUuN3MtNi4xIDguOS02LjEgMTUuNCAyIDExLjcgNi4xIDE1LjZ6bTAgMTAwLjVjNC4xIDMuOSA5LjQgNS44IDE2LjEgNS44IDcgMCAxMi42LTEuOSAxNi43LTUuOHM2LjEtOS4xIDYuMS0xNS42LTItMTEuNi02LjEtMTUuNC05LjYtNS43LTE2LjctNS43Yy02LjcgMC0xMiAxLjktMTYuMSA1LjdzLTYuMSA4LjktNi4xIDE1LjRjMCA2LjYgMiAxMS43IDYuMSAxNS42eiJdCiAgICB9OwogICAgZmFFbXBpcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZW1waXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxZDEiLCAiTTI5NS42IDU0LjJjLTEwLjgtMi4yLTIyLjEtMy4zLTMzLjUtMy42bDAtMTguMmM3OC4xIDIuMiAxNDYuMSA0NCAxODQuNiAxMDYuNmwtMTUuOCA5LjFjLTYuMS05LjctMTIuNy0xOC44LTIwLjItMjcuMWwtMTggMTUuNWMtMjYtMjkuNi02MS40LTUwLjctMTAxLjktNTguNGw0LjgtMjMuOXpNNjEuNCAzMjIuNGwyMy03LjdjLTYuNC0xOC4zLTEwLTM4LjItMTAtNTguN3MzLjMtNDAuNCA5LjctNTguN2wtMjIuNy03LjdjMy42LTEwLjggOC4zLTIxLjMgMTMuNi0zMWwtMTUuOC05LjFDNDIgMTgxIDMyLjEgMjE3LjUgMzIuMSAyNTZzMTAgNzUgMjcuMSAxMDYuNkw3NSAzNTMuNWMtNS4zLTEwLTkuNy0yMC4zLTEzLjYtMzEuMXpNMjIxLjEgNDM0Yy00MC40LTgtNzUuOC0yOS4xLTEwMS45LTU4LjdsLTE4IDE1LjhjLTcuNS04LjYtMTQuNC0xNy43LTIwLjItMjcuNGwtMTYgOS40YzM4LjUgNjIuMyAxMDYuOCAxMDQuMyAxODQuOSAxMDYuNmwwLTE4LjNjLTExLjMtLjMtMjIuNy0xLjctMzMuNS0zLjZsNC43LTIzLjh6TTEwMS4zIDEyMC45bDE4IDE1LjVjMjYtMjkuNiA2MS40LTUwLjcgMTAxLjktNTguNGwtNC43LTIzLjhjMTAuOC0yLjIgMjIuMS0zLjMgMzMuNS0zLjZsMC0xOC4yQzE3MS45IDM0LjYgMTAzLjkgNzYuNCA2NS40IDEzOWwxNS44IDkuMWM2LTkuNyAxMi42LTE4LjkgMjAuMS0yNy4yek00MTAuNyAzOTEuMWwtMTgtMTUuOGMtMjYgMjkuNi02MS40IDUwLjctMTAxLjkgNTguN2w0LjcgMjMuOGMtMTAuOCAxLjktMjIuMSAzLjMtMzMuNSAzLjZsMCAxOC4zYzc4LjEtMi4yIDE0Ni40LTQ0LjMgMTg0LjktMTA2LjZsLTE2LjEtOS40Yy01LjcgOS43LTEyLjYgMTguOC0yMC4xIDI3LjR6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQ4My44IDBhMjM1LjggMjM1LjggMCAxIDAgLTQ3MS42IDAgMjM1LjggMjM1LjggMCAxIDAgNDcxLjYgMHptLTM5LTEwNi42TDQzNyAxNTguNWM1LjMgOS43IDEwIDIwLjIgMTMuNiAzMWwtMjIuNyA3LjdjNi40IDE4LjMgOS43IDM4LjIgOS43IDU4LjdzLTMuNiA0MC40LTEwIDU4LjdsMjMgNy43Yy0zLjkgMTAuOC04LjMgMjEtMTMuNiAzMWwxNS44IDkuMUM0NzAgMzMxIDQ3OS45IDI5NC41IDQ3OS45IDI1NnMtOS45LTc1LTI3LjEtMTA2LjZ6bS0xODMgMTc3LjdjMTYuMy0zLjMgMzAuNC0xMS42IDQwLjctMjMuNWw1MS4yIDQ0LjhjMTEuOS0xMy42IDIxLjMtMjkuMyAyNy4xLTQ2LjhsLTY0LjItMjIuMWMyLjUtNy41IDMuOS0xNS4yIDMuOS0yMy41cy0xLjQtMTYuMS0zLjktMjMuNWw2NC41LTIyLjFjLTYuMS0xNy40LTE1LjUtMzMuMi0yNy40LTQ2LjhsLTUxLjIgNDQuOGMtMTAuMi0xMS45LTI0LjQtMjAuNS00MC43LTIzLjhsMTMuMy02Ni40Yy04LjYtMS45LTE3LjctMi44LTI3LjEtMi44cy0xOC41IC44LTI3LjEgMi44bDEzLjMgNjYuNGMtMTYuMyAzLjMtMzAuNCAxMS45LTQwLjcgMjMuOGwtNTEuMi00NC44Yy0xMS45IDEzLjYtMjEuMyAyOS4zLTI3LjQgNDYuOGw2NC41IDIyLjFjLTIuNSA3LjUtMy45IDE1LjItMy45IDIzLjVzMS40IDE2LjEgMy45IDIzLjVsLTY0LjIgMjIuMWM1LjggMTcuNCAxNS4yIDMzLjIgMjcuMSA0Ni44bDUxLjItNDQuOGMxMC4yIDExLjkgMjQuNCAyMC4yIDQwLjcgMjMuNWwtMTMuMyA2Ni43YzguNiAxLjcgMTcuNyAyLjggMjcuMSAyLjhzMTguNS0xLjEgMjcuMS0yLjhsLTEzLjMtNjYuN3oiXQogICAgfTsKICAgIGZhQWNjZXNzaWJsZUljb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWNjZXNzaWJsZS1pY29uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjIxMDddLCAiZjM2OCIsICJNNDIzLjkgMjU1LjhMNDExIDQxMy4xYy0zLjMgNDAuNy02My45IDM1LjEtNjAuNi00LjlsMTAtMTIyLjUtNDEuMSAyLjNjMTAuMSAyMC43IDE1LjggNDMuOSAxNS44IDY4LjUgMCA0MS4yLTE2LjEgNzguNy00Mi4zIDEwNi41bC0zOS4zLTM5LjNjNTcuOS02My43IDEzLjEtMTY3LjItNzQtMTY3LjItMjUuOSAwLTQ5LjUgOS45LTY3LjIgMjZMNzMgMjQzLjJjMjItMjAuNyA1MC4xLTM1LjEgODEuNC00MC4ybDc1LjMtODUuNy00Mi42LTI0LjgtNTEuNiA0NkMxMDUuNSAxNjUuMyA2NC45IDEyMCA5NSA5My4xbDY4LTYwLjdjOS44LTguOCAyNC4xLTEwLjIgMzUuNS0zLjYgMCAwIDEzOS4zIDgwLjkgMTM5LjUgODEuMSAxNi4yIDEwLjEgMjAuNyAzNiA2LjEgNTIuNmwtNTguNCA2Ni41IDEwNi4xLTUuOWMxOC41LTEuMSAzMy42IDE0LjQgMzIuMSAzMi43ek0zNTkgMTAxLjhBNTAuOSA1MC45IDAgMSAwIDM1OSAwIDUwLjkgNTAuOSAwIDEgMCAzNTkgMTAxLjh6TTE3OS42IDQ1Ni41Yy04MC42IDAtMTI3LjQtOTAuNi04Mi43LTE1Ni4xTDU3LjIgMjYwLjdDMzYuNCAyODcgMjQgMzIwLjMgMjQgMzU2LjQgMjQgNDg3LjEgMTc0LjcgNTU3LjggMjc1LjQgNDc4LjlsLTM5LjctMzkuN2MtMTYgMTAuOS0zNS4zIDE3LjMtNTYuMSAxNy4zeiJdCiAgICB9OwogICAgZmFRdW9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxdW9yYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmM0IiwgIk00NDAuNyAzODYuN2wtMjkuMyAwYy0xLjUgMTMuNS0xMC41IDMwLjgtMzMgMzAuOC0yMC41IDAtMzUuMy0xNC4yLTQ5LjUtMzUuOCA0NC4yLTM0LjIgNzQuNy04Ny41IDc0LjctMTUzIC4xLTExNy41LTk2LjYtMTk2LjctMTk4LjQtMTk2LjctOTkuNyAwLTE5Ny43IDc5LjctMTk3LjcgMTk2LjcgMCAxMzQuMSAxMzEuMyAyMjEuNiAyNDkgMTg5IDE5LjcgMzMuNiA0NS43IDYyLjMgOTUuMiA2Mi4zIDgxLjggMCA5MC44LTc1LjMgODktOTMuM3pNMjk3LjIgMzI5LjJjLTE5LjUtMjkuMi00My43LTUyLjItOTEuNS01Mi4yLTMwLjUgMC01NC4zIDEwLTY5IDIyLjhsMTIuMiAyNC4zYzYuMi0zIDEzLTQgMTkuOC00IDM1LjUgMCA1My43IDMwLjggNjkuMiA2MS4zLTEwIDMtMjAuNyA0LjItMzIuNyA0LjItNzUgMC0xMDcuNS01My0xMDcuNS0xNTYuNyAwLTEwNC40IDMyLjUtMTU3LjkgMTA3LjUtMTU3LjkgNzYuMiAwIDEwOC43IDUzLjUgMTA4LjcgMTU3LjcgLjEgNDEuOC01LjQgNzUuNi0xNi43IDEwMC41eiJdCiAgICB9OwogICAgZmFDY0pjYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1qY2IiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjI0YiIsICJNNDMxLjUgMjQ0LjNsMC0zMi4zYzQxLjIgMCAzOC41IC4yIDM4LjUgLjIgNy4zIDEuMyAxMy4zIDcuMyAxMy4zIDE2IDAgOC44LTYgMTQuNS0xMy4zIDE1LjgtMS4yIC40LTMuMyAuMy0zOC41IC4zem00Mi44IDIwLjJjLTIuOC0uNy0zLjMtLjUtNDIuOC0uNWwwIDM1YzM5LjYgMCA0MCAuMiA0Mi44LS41IDcuNS0xLjUgMTMuNS04IDEzLjUtMTcgMC04LjctNi0xNS41LTEzLjUtMTd6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE4MiAxOTIuM2wtNTcgMGMwIDY3LjEgMTAuNyAxMDkuNy0zNS44IDEwOS43LTE5LjUgMC0zOC44LTUuNy01Ny4yLTE0LjhsMCAyOGMzMCA4LjMgNjggOC4zIDY4IDguMyA5Ny45IDAgODItNDcuNyA4Mi0xMzEuMnptMTc4LjUgNC41Yy02My40LTE2LTE2NS0xNC45LTE2NSA1OS4zIDAgNzcuMSAxMDguMiA3My42IDE2NSA1OS4ybDAtMjguM0MzMTIuOSAzMTEuNyAyNTMgMzA5IDI1MyAyNTZzNTkuOC01NS42IDEwNy41LTMxLjJsMC0yOHpNNTQ0IDI4Ni41YzAtMTguNS0xNi41LTMwLjUtMzgtMzJsMC0uOGMxOS41LTIuNyAzMC4zLTE1LjUgMzAuMy0zMC4yIDAtMTktMTUuNy0zMC0zNy0zMSAwIDAgNi4zLS4zLTEyMC4zLS4zbDAgMTI3LjUgMTIyLjcgMGMyNC4zIC4xIDQyLjMtMTIuOSA0Mi4zLTMzLjJ6Il0KICAgIH07CiAgICBmYUZlZG9yYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmZWRvcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc5OCIsICJNMCAyNTUuOEMuMSAxMzIuMiAxMDAuMyAzMiAyMjQgMzJTNDQ4IDEzMi4zIDQ0OCAyNTYgMzQ3LjggNDc5LjkgMjI0LjEgNDgwTDUwLjkgNDgwQzIyLjggNDgwIC4xIDQ1Ny4zIDAgNDI5LjJsMCAwIDAtMTczLjQgMCAwem0zNDIuNi02My4xYzAtMzkuNy0zNS42LTY4LjUtNzMuMi02OC41LTM0LjkgMC02NS44IDI2LjMtNzAuMSA1OS45LS4yIDMuOC0uNCA1LS40IDguNS0uMSAyMS4xIDAgNDIuOC0uOCA2NC40IC45IDI2LjEgMSA1Mi4xIDAgNzYuNiAwIDI3LjEtMTkuNCA0NS41LTQ0LjcgNDUuNXMtNDUuOC0yMC4yLTQ1LjgtNDUuNWMuNS0yNy43IDIyLjYtNDUuMyA0OC41LTQ2LjFsLjIgMCAyNi4zLS4yIDAtMzcuMy0yNi4zIC4yYy00Ny4xLS40LTg0LjYgMzYuNS04NS45IDgzLjQgMCA0NS42IDM3LjUgODIuOSA4MyA4Mi45IDQzIDAgNzguNy0zMy42IDgyLjYtNzUuNmwuMi01My41IDMyLjYtLjNjMjUuMyAuMiAyNS0zNy44LS4yLTM3LjNsLTMyLjQgLjNjMC02LjQgLjEtMTIuOCAuMS0xOS4yIC4xLTEyLjcgLjEtMjUuNC0uMS0zOC4yIC4xLTE2LjUgMTUuOC0zMS4yIDMzLjItMzEuMiAxNy41IDAgMzUuOSA4LjcgMzUuOSAzMS4yIDAgMy4yLS4xIDUuMS0uMyA2LjMtMS45IDEwLjUgNS4yIDIwLjQgMTUuNyAyMS45IDEwLjYgMS41IDIwLjItNi4xIDIxLjItMTYuNiAuNi00LjIgLjctNy45IC43LTExLjZ6Il0KICAgIH07CiAgICBmYUR1b2xpbmdvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImR1b2xpbmdvIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU4MTIiLCAiTTUwNC4zIDIzMC41YzEwLjQgODguNS00My40IDE3Mi4xLTEyOC4yIDE5OXMtMTc2LjYtMTAuMy0yMTguOS04OC43Yy03MiAzLTEzNy40LTM5LjgtMTYzLjItMTA1LjUtMi42LTYuNi0xLjktMTQgMS45LTE5LjlzMTAuMi05LjcgMTcuMi0xMC4xbDk2LjEtNi0yMy44LTc1LjljLTYuMy0yMC0yLjItNDEuOSAxMS01OC4zczMzLjctMjUgNTQuNS0yM2M1Mi4yIDUgODYuOCA0LjggMTA0LS42UzMwMCAxNi43IDMzOS0xNi45YzE1LjktMTMuNyAzNy43LTE4LjUgNTcuOC0xMi43czM2LjEgMjEuMyA0Mi40IDQxLjRMNDYyLjggODcgNTQzLjYgMzcuM2M2LTMuNyAxMy40LTQuMyAxOS45LTEuNnMxMS4zIDguMyAxMi45IDE1LjJjMTYuMiA2OC4yLTEyLjQgMTQwLjMtNzIuMSAxNzkuNXpNMjU4LjUgNDc1LjlsMCAwYzE1LjEgNy41IDIxLjUgMjUuOCAxNC4yIDQxcy0yNS40IDIxLjktNDAuNyAxNC45bC00My45LTIxYy0xNS4xLTcuNS0yMS41LTI1LjgtMTQuMi00MXMyNS40LTIxLjkgNDAuNy0xNC45bDQzLjggMjF6TTU2NC42IDM0NS43YzE0LjggOC40IDIwIDI3LjMgMTEuNiA0Mi4ybC0yMy45IDQyLjRjLTguNyAxNC4zLTI3LjEgMTkuMi00MS42IDEwLjlzLTE5LjktMjYuNi0xMi00MS40bDIzLjktNDIuNGM0LTcuMSAxMC43LTEyLjQgMTguNi0xNC42czE2LjMtMS4yIDIzLjQgMi45eiJdCiAgICB9OwogICAgZmFGaXJzdGRyYWZ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcnN0ZHJhZnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjNhMSIsICJNMzg0IDE5MmwtNjQgMCAwIDEyOC0xMjggMCAwIDEyOC0xOTIgMCAwLTI1LjYgMTY2LjQgMCAwLTEyOCAxMjggMCAwLTEyOCA4OS42IDAgMCAyNS42em0tMjUuNiAzOC40bDAgMTI4LTEyOCAwIDAgMTI4LTE2Ni40IDAgMCAyNS42IDE5MiAwIDAtMTI4IDEyOCAwIDAtMTUzLjYtMjUuNiAwem0yNS42IDE5MmwtODkuNiAwIDAgODkuNiAyNS42IDAgMC02NCA2NCAwIDAtMjUuNnpNMCAwbDAgMzg0IDEyOCAwIDAtMTI4IDEyOCAwIDAtMTI4IDEyOCAwIDAtMTI4LTM4NCAweiJdCiAgICB9OwogICAgZmFGcmVlYnNkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZyZWVic2QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNhNCIsICJNMzAzLjcgOTYuMmMxMS4xLTExLjEgMTE1LjUtNzcgMTM5LjItNTMuMiAyMy43IDIzLjctNDIuMSAxMjguMS01My4yIDEzOS4ycy0zOS40IC45LTYzLjEtMjIuOWMtMjMuOC0yMy43LTM0LjEtNTItMjIuOS02My4xek0xMDkuOSA2OC4xQzczLjYgNDcuNSAyMiAyNC42IDUuNiA0MS4xLTExIDU3LjcgMTIuNyAxMTAuNSAzMy41IDE0Ni44IDUyIDExNC42IDc4LjMgODcuNSAxMDkuOSA2OC4xek00MDYuNyAxNzRjMy4zIDExLjMgMi43IDIwLjctMi43IDI2LjEtMjAuMyAyMC4zLTg3LjUtMjctMTA5LjMtNzAuMS0xOC0zMi4zLTExLjEtNTMuNCAxNC45LTQ4LjcgNS43LTMuNiAxMi4zLTcuNiAxOS42LTExLjYtMjkuOC0xNS41LTYzLjYtMjQuMy05OS41LTI0LjMtMTE5LjEgMC0yMTUuNiA5Ni41LTIxNS42IDIxNS42IDAgMTE5IDk2LjUgMjE1LjYgMjE1LjYgMjE1LjZTNDQ1LjMgMzgwLjEgNDQ1LjMgMjYxYzAtMzguNC0xMC4xLTc0LjUtMjcuNy0xMDUuOC0zLjkgNy03LjYgMTMuMy0xMC45IDE4Ljh6Il0KICAgIH07CiAgICBmYU9keXNlZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvZHlzZWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTVjNiIsICJNNDA2LjcgNDYzYy00Mi4zIDMwLjgtOTQuNCA0OS0xNTAuNyA0OS0xMTEuMSAwLTIwNS43LTcwLjgtMjQxLjEtMTY5LjggMi40IDEuNyA1LjkgMy42IDcuOSA0LjQgMTYuMyA3LjQgNDAuMS01LjQgNjIuOS0yOC43IDYuOS02LjkgMTQuNC0xMi40IDIyLjgtMTcuMyAxOC4zLTExLjkgMzcuNi0yMC44IDU4LjQtMjcuMiAwIDAgMjIuMyAzNC4yIDQzLjEgNzQuOHMtMjIuMyA1NC0yNy4yIDU0Yy0uMyAwLS44IDAtMS41LS4xLTExLS41LTcwLTMtNTYgNTEuMSAxNC45IDU3LjQgOTcuNSAzNi42IDEzOS42IDguOXMzMS43LTExOC4zIDMxLjctMTE4LjNjNDEuMS02LjQgNTQgMzcuMSA1Ny45IDU5LjQgLjggNC42IDEuMSA5LjkgMS40IDE1LjUgMS4xIDIxLjIgMi4zIDQ1LjYgMzUuMyA0Ni40IDUuMyAwIDEwLjYtLjggMTUuNS0ybDAtLjF6bS05NS4zLTIzLjdjLTItLjUtMy41LTIuNS0zLTUgMS0yLjUgMy0zLjUgNS0zczMuNSAzIDMgNS0yLjUgMy41LTUgM3ptLTIwNy05NS42YzEuNS0uNSAzLjUgMSA0IDMgMCAyLTEgNC0zIDQtMS41IC41LTMuNS0xLTQtMy0uNS0xLjUgMS0zLjUgMy00ek00NTEuOCA0MjFjMzcuNS00NC42IDYwLjItMTAyLjIgNjAuMi0xNjUgMC02Ny41LTI2LjEtMTI4LjktNjguOC0xNzQuNy0uMSAyMy41LTYuMSA0OC4yLTE2LjggNjkuMi0xMS45IDIwLjMtNDkgNTguOS02OS44IDc4LjctLjcgLjMtMS4xIC45LTEuNSAxLjQtLjIgLjItLjMgLjQtLjUgLjYtNSA2LjktNCAxNi44IDMgMjEuOCAyMS4zIDE1LjggNTYuNCA0NS42IDU5LjQgNzIuOCAzLjUgMzQuOSAyNy45IDc1LjYgMzQuMiA4Ni4yIC44IDEuMyAxLjMgMi4xIDEuNCAyLjQgMCAyLjItLjQgNC4zLS44IDYuNWwwIC4xek0zOTAuNyAyNTFjLS41IDMgMSA1LjkgNCA2LjRzNS45LTEgNi40LTQtMS01LjktNC02LjRjLTMtMS01LjkgMS02LjQgNHptNjEuNC02MC45bC0xMS40IDUuNC0zIDEyLjktNS40LTExLjQtMTIuOS0zIDExLjQtNS40IDMtMTIuOSA1LjQgMTEuNCAxMi45IDN6TTM5NS41IDQxLjNjLTE2LjIgOC4yLTIyLjEgMzIuOC0yOSA2MS40LS4zIDEuNC0uNyAyLjgtMSA0LjItOS41IDM4LjUtMzAuNiAzNy42LTQxLjcgMzcuMi0xLjEgMC0yLS4xLTIuOS0uMS01LjEgMC02LTQtOC45LTE3LjEtMi42LTEyLjEtNi45LTMyLTE3LjktNjMuNi0yMi43LTY1LjgtODIuNy00OS40LTEyOC4yLTIyLjItNTUuMyAzMy4xLTM0LjQgMTAxLjktMTkuOCAxNDkuNCAuNyAyLjIgMS40IDQuNCAyIDYuNi00IDQtMTMuOCA3LjUtMjYgMTEuOS0xMi4xIDQuMy0yNi42IDkuNS00MC4zIDE2LjktMzMuOSAxOC03MC4zIDQ5LTc5LjggNjIuNi0xLjMtMTAuNy0yLTIxLjUtMi0zMi41IDAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgNTEuNCAwIDk5LjQgMTUuMiAxMzkuNSA0MS4zek01OC45IDE4OS42Yy0xLjUtMi00LjUtMy02LjQtMS41cy0zIDQuNS0xLjUgNi40IDQuNSAzIDYuNCAxLjVjMi41LTEuNSAzLTQuNSAxLjUtNi40ek0zMjcuMyA2NC45YzItMS41IDUtLjUgNi40IDEuNSAxLjUgMi41IDEgNS40LTEuNSA2LjQtMiAxLjUtNSAuNS02LjQtMS41cy0uNS01IDEuNS02LjR6TTk1LjEgMTA1Yy0uNSAxLjUgLjUgMyAyIDMgMS41IC41IDMtLjUgMy0yIC41LTEuNS0uNS0zLTItM3MtMyAuNS0zIDJ6bTg0LjctLjVjLTMuNS00My4xIDM3LjEtNTQgMzcuMS01NCA0NC4xLTE1LjQgNTYgNS45IDY2LjQgMzcuNnMzIDQyLjYtMzguNiA1OC45LTYxLjktNC41LTY0LjktNDIuNmwwIC4xem04OS42IDE0LjlsMSAwYzIuNSAwIDUtMiA1LTUgMi02LjkgMS0xNC40LTItMjAuOC0xLjUtMi00LTMuNS02LjQtMi41LTMgMS00LjUgNC0zLjUgNi45IDIgNC41IDMgOS45IDEuNSAxNC45LS41IDMgMS41IDUuOSA0LjUgNi40bC0uMSAuMXptLTkuOS00MS42Yy0yIDAtNC0xLTUtM3MtMi0zLjUtMy01Yy0yLTItMi01LjQgMC03LjRzNS40LTIgNy40IDBjMiAyLjUgMy41IDUgNSA3LjRzLjUgNS45LTIuNSA3LjRjLS42IDAtMSAuMi0xLjMgLjMtLjIgLjEtLjQgLjItLjYgLjJsMCAuMXoiXQogICAgfTsKICAgIGZhR2dDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2ctY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjEiLCAiTTI1Ny41IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0yMDggMzgyLjhsLTEyNS43LTEyNS43IDEyNS43LTEyNS43IDM1LjIgMzUuNC0yNC4yIDI0LjItMTEuMS0xMS4xLTc3LjIgNzcuMiA3Ny4yIDc3LjIgMjYuNi0yNi42LTUzLjEtNTIuOSAyNC40LTI0LjQgNzcuMiA3Ny4yLTc1IDc1LjJ6bTk5LTIuMmwtMzUuMi0zNS4yIDI0LjEtMjQuNCAxMS4xIDExLjEgNzcuMi03Ny4yLTc3LjItNzcuMi0yNi41IDI2LjUgNTMuMSA1Mi45LTI0LjQgMjQuNC03Ny4yLTc3LjIgNzUtNzUgMTI1LjcgMTI1LjctMTI1LjcgMTI1LjZ6Il0KICAgIH07CiAgICBmYUNsb3VkZmxhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRmbGFyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDdkIiwgIk00MDcuOSAzMTkuOUwxNzcuMSAzMTdjLS43IDAtMS40LS4yLTItLjVzLTEuMi0uOC0xLjYtMS40Yy0uNC0uNi0uNy0xLjMtLjctMnMwLTEuNCAuMi0yLjFjLjQtMS4xIDEuMS0yLjEgMi4xLTIuOHMyLjEtMS4yIDMuMy0xLjJsMjMyLjktMi45YzI3LjYtMS4zIDU3LjUtMjMuNiA2OC01MC44bDEzLjMtMzQuNWMuNC0uOSAuNS0xLjkgLjUtMi45IDAtLjUtLjEtMS4xLS4yLTEuNi03LjQtMzIuMi0yNS02MS4xLTUwLjMtODIuM3MtNTYuNy0zMy43LTg5LjctMzUuNS02NS42IDcuMy05MyAyNS43LTQ4IDQ1LjMtNTguOCA3Ni41Yy0xMS4zLTguNS0yNC45LTEzLjMtMzktMTMuN3MtMjggMy41LTM5LjggMTEuNC0yMC44IDE5LjEtMjUuOSAzMi4zLTUuOSAyNy42LTIuNCA0MS4zYy01Mi4zIDEuNS05NC4yIDQ0LjEtOTQuMiA5Ni41IDAgNC43IC4zIDkuMyAxIDE0IC4yIDEuMSAuNyAyLjEgMS41IDIuOHMxLjkgMS4xIDIuOSAxLjFsNDI2LjEgLjFjMCAwIC4xIDAgLjEgMCAxLjIgMCAyLjMtLjQgMy4zLTEuMXMxLjYtMS43IDItMi45bDMuMy0xMS4zYzMuOS0xMy40IDIuNC0yNS44LTQuMS0zNC45LTYtOC40LTE2LjEtMTMuMy0yOC4yLTEzLjl6bTEwNS45LTk4LjhjLTIuMSAwLTQuMyAuMS02LjQgLjItLjggLjEtMS41IC4zLTIuMSAuOHMtMSAxLjEtMS4zIDEuOGwtOS4xIDMxLjJjLTMuOSAxMy40LTIuNCAyNS44IDQuMSAzNC45IDYgOC40IDE2LjEgMTMuMyAyOC4yIDEzLjlsNDkuMiAyLjljLjcgMCAxLjQgLjIgMiAuNXMxLjEgLjggMS41IDEuNGMuNCAuNiAuNyAxLjMgLjggMnMwIDEuNS0uMiAyLjFjLS40IDEuMS0xLjEgMi4xLTIuMSAyLjhzLTIuMSAxLjItMy4zIDEuMmwtNTEuMSAyLjljLTI3LjggMS4zLTU3LjcgMjMuNi02OC4xIDUwLjhsLTMuNyA5LjZjLS4yIC40LS4yIC44LS4yIDEuM3MuMiAuOCAuNCAxLjIgLjYgLjcgLjkgLjkgLjggLjMgMS4yIC4zYzAgMCAuMSAwIC4xIDBsMTc1LjkgMGMxIDAgMi0uMyAyLjgtLjlzMS40LTEuNSAxLjctMi40YzMuMS0xMS4xIDQuNy0yMi41IDQuNy0zNCAwLTY5LjMtNTYuNS0xMjUuNS0xMjYuMS0xMjUuNXoiXQogICAgfTsKICAgIGZhSGFja2VycmFuayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJoYWNrZXJyYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1ZjciLCAiTTQ3Ny45IDEyOEM0NjMuNCAxMDMgMjg1LjUgMCAyNTYuNSAwcy0yMDYuOSAxMDIuOC0yMjEuMyAxMjgtMTQuNSAyMzAuOCAwIDI1NiAxOTIuNCAxMjggMjIxLjMgMTI4IDIwNi44LTEwMi45IDIyMS4zLTEyOCAxNC41LTIzMSAwLTI1NnpNMzE2LjUgNDE0LjJjLTQgMC00MC45LTM1LjgtMzgtMzguNyAuOS0uOSA2LjMtMS41IDE3LjUtMS44IDAtMjYuMiAuNi02OC42IC45LTg2LjMgMC0yLS40LTMuNC0uNC01LjhsLTc5LjkgMGMwIDcuMS0uNSAzNi4yIDEuNCA3Mi45IC4yIDQuNS0xLjYgNi01LjcgNS45LTEwLjEgMC0yMC4zLS4xLTMwLjQtLjEtNC4xIDAtNS45LTEuNS01LjctNi4xIC45LTMzLjQgMy04NC0uMi0yMTIuN2wwLTMuMmMtOS43LS40LTE2LjQtMS0xNy4zLTEuOC0yLjktMi45IDM0LjUtMzguNyAzOC41LTM4LjdzNDEuMiAzNS44IDM4LjMgMzguN2MtLjkgLjktNy45IDEuNS0xNi44IDEuOGwwIDMuMmMtMi40IDI1LjgtMiA3OS42LTIuNiAxMDUuNGw4MC4zIDBjMC00LjYgLjQtMzQuNy0xLjItODMuNi0uMS0zLjQgMS01LjIgNC4yLTUuMiAxMS4xLS4xIDIyLjItLjEgMzMuMi0uMSAzLjUgMCA0LjYgMS43IDQuNSA1LjQtMy43IDE5MS4zLS43IDE3Ny45LS43IDIxMC4zIDguOSAuNCAxNi44IDEgMTcuNyAxLjggMi45IDIuOS0zMy42IDM4LjctMzcuNiAzOC43bDAgMHoiXQogICAgfTsKICAgIGZhU2t5YXRsYXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2t5YXRsYXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjIxNiIsICJNNjQwIDMyOS4zYzAgNjUuOS01Mi41IDExNC40LTExNy41IDExNC40LTE2NS45IDAtMTk2LjYtMjQ5LjctMzU5LjctMjQ5LjctMTQ2LjkgMC0xNDcuMSAyMTIuMiA1LjYgMjEyLjIgNDIuNSAwIDkwLjktMTcuOCAxMjUuMy00Mi41IDUuNi00LjEgMTYuOS0xNi4zIDIyLjgtMTYuM3MxMC45IDUgMTAuOSAxMC45YzAgNy44LTEzLjEgMTkuMS0xOC43IDI0LjEtNDAuOSAzNS42LTEwMC4zIDYxLjItMTU0LjcgNjEuMi04My40IC4xLTE1NC01OS0xNTQtMTQ0LjlTNjcuNSAxNDkuNiAxNTIuOCAxNDkuNmMxODUuMyAwIDIyMi41IDI0NS45IDM2MS45IDI0NS45IDk5LjkgMCA5NC44LTEzOS43IDMuNC0xMzkuNy0xNy41IDAtMzUgMTEuNi00Ni45IDExLjYtOC40IDAtMTUuOS03LjItMTUuOS0xNS42IDAtMTEuNiA1LjMtMjMuNyA1LjMtMzYuMyAwLTY2LjYtNTAuOS0xMTQuNy0xMTYuOS0xMTQuNy01My4xIDAtODAgMzYuOS04OC44IDM2LjktNi4yIDAtMTEuMi01LTExLjItMTEuMiAwLTUuNiA0LjEtMTAuMyA3LjgtMTQuNCAyNS4zLTI4LjggNjQuNy00My43IDEwMi44LTQzLjcgNzkuNCAwIDEzOS4xIDU4LjQgMTM5LjEgMTM3LjggMCA2LjktLjMgMTMuNy0xLjIgMjAuNiAxMS45LTMuMSAyNC4xLTQuNyAzNS45LTQuNyA2MC43IDAgMTExLjkgNDUuMyAxMTEuOSAxMDcuMnoiXQogICAgfTsKICAgIGZhRGVza3BybyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXNrcHJvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOGYiLCAiTTIyMiA1MTJsMzEuMS0zOC40YzEyLjMtLjIgMjUuNi0xLjQgMzYuNS02LjYgMzguOS0xOC42IDM4LjQtNjEuOSAzOC4zLTYzLjgtLjEtNS0uOC00LjQtMjguOS0zNy40bDc5LjEgMGMtLjIgNTAuMS03LjMgNjguNS0xMC4yIDc1LjctOS40IDIzLjctNDMuOSA2Mi44LTk1LjIgNjkuNC04LjcgMS4xLTMyLjggMS4yLTUwLjcgMS4xek00MjIuNCAzNDQuM2MzOC42IDAgNTguNS0xMy42IDczLjctMzAuOWwtMTc1LjUtLjMtMTcuNCAzMS4zIDExOS4yLS4xek0zNzguOCAxMjAuNGwwIDE2OC4zLTczLjUgMC0zMi43IDU1LjUtNi41IDBjLTUyLjMgMC01OC4xLTU2LjUtNTguMy01OC45LTEuMi0xMy4yLTIxLjMtMTEuNi0yMC4xIDEuOCAxLjQgMTUuOCA4LjggNDAgMjYuNCA1Ny4xbC05MSAwYy0yNS41IDAtMTEwLjgtMjYuOC0xMDctMTE0bDAtMjEzLjNjMC0xNiA5LjctMTYuNiAxNS0xNi44bDgyIDBjLjIgMCAuMyAuMSAuNSAuMSA0LjMtLjQgNTAuMS0yLjEgNTAuMSA0My43IDAgMTMuMyAyMC4yIDEzLjQgMjAuMiAwIDAtMTguMi01LjUtMzIuOC0xNS44LTQzLjdsODQuMiAwQzM2MS0uMiAzNzguOCA3OS42IDM3OC44IDEyMC40em0tMTMyLjUgNTZsNjQgMjkuM2MxMy4zLTQ1LjUtNDIuMi03MS43LTY0LTI5LjN6Il0KICAgIH07CiAgICBmYVJlc29sdmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNvbHZpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNlNyIsICJNMjg5LjIgMjc4LjJjNDYtMTMuMyA0OS42LTIzLjUgNDQtNDMuNEwzMjIgMTk1LjVjLTYuMS0yMC45LTE4LjQtMjguMS03MS4xLTEyLjhsLTE4OC4yIDU0LjEgMjguNiA5OC42IDE5Ny45LTU3LjJ6TTI1Ni41IDhDMTM5LjQgOCA0MS4yIDg4LjcgMTUuMiAxOTcuNWwyMjEuOS02My45YzM0LjgtMTAuMiA1NC4yLTExLjcgNzkuMy04LjIgMzYuMyA2LjEgNTIuNyAyNSA2MS40IDU1LjJsMTAuNyAzNy44YzguMiAyOC4xIDEgNTAuNi0yMy41IDczLjYtMTkuNCAxNy40LTMxLjIgMjQuNS02MS40IDMzLjJsLTkyLjYgMjYuNiAyMjAuNCAyNy4xIDkuNyAzNC4yLTQ4LjEgMTMuMy0yODYuOC0zNy4zIDIzIDgwLjJDMTY2IDQ5MS4zIDIwOS41IDUwNCAyNTUuNSA1MDQgMzkyLjUgNTA0IDUwNCAzOTIuNiA1MDQgMjU1LjcgNTA1IDExOS40IDM5My41IDggMjU2LjUgOHpNNDYuMyAzODguNkw4IDI1Ni44YzAgNDguNSAxNC4zIDkzLjQgMzguMyAxMzEuOHoiXQogICAgfTsKICAgIGZhQmxhY2tiZXJyeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibGFja2JlcnJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzN2IiLCAiTTE2NiAxMTYuOWMwIDIzLjQtMTYuNCA0OS4xLTcyLjUgNDkuMWwtNzAuMSAwIDIxLTg4LjggNjcuOCAwYzQyLjEgMCA1My44IDIzLjMgNTMuOCAzOS43ek0yOTIuMiA3Ny4ybC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1My44IDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi40LTExLjYtMzkuNy01My43LTM5Ljd6TTg4LjggMjA4LjFsLTY3LjggMC0yMSA4OC44IDcwLjEgMGM1Ni4xIDAgNzIuNS0yMy40IDcyLjUtNDkuMSAwLTE2LjMtMTEuNy0zOS43LTUzLjgtMzkuN3ptMTgwLjEgMGwtNjcuOCAwLTE4LjcgODguOCA3MC4xIDBjNTMuOCAwIDcwLjEtMjMuNCA3MC4xLTQ5LjEgMC0xNi4zLTExLjctMzkuNy01My43LTM5Ljd6bTE4OS4zLTUzLjhsLTY3LjggMC0xOC43IDg4LjggNzAuMSAwYzUzLjggMCA3MC4xLTIzLjQgNzAuMS00OS4xIC4xLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3ptLTI4IDEzNy45bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yMy40IDcwLjEtNDkuMSAwLTE2LjMtMTEuNi0zOS43LTUzLjctMzkuN3pNMjQwLjggMzQ2bC02Ny44IDAtMTguNyA4OC44IDcwLjEgMGM1Ni4xIDAgNzAuMS0yNS43IDcwLjEtNDkuMSAuMS0xNi4zLTExLjYtMzkuNy01My43LTM5Ljd6Il0KICAgIH07CiAgICBmYVN0cmlwZVMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyaXBlLXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQyYSIsICJNMTU1LjYgMTU0LjZjMC0yMi4zIDE4LjYtMzAuOSA0OC40LTMwLjkgNDMuNCAwIDk4LjUgMTMuMyAxNDEuOSAzNi43bDAtMTM0LjNjLTQ3LjMtMTguOS05NC41LTI2LjEtMTQxLjgtMjYuMS0xMTUuNyAwLTE5Mi44IDYwLjQtMTkyLjggMTYxLjQgMCAxNTcuOSAyMTYuOCAxMzIuMyAyMTYuOCAyMDAuNCAwIDI2LjQtMjIuOSAzNC45LTU0LjcgMzQuOS00Ny4yIDAtMTA4LjItMTkuNS0xNTYuMS00NS41bDAgMTI4LjVjNDkuMyAyMS4zIDEwMi4zIDMyLjMgMTU2IDMyLjQgMTE4LjYgMCAyMDAuMy01MSAyMDAuMy0xNTMuNiAwLTE3MC4yLTIxOC0xMzkuNy0yMTgtMjAzLjl6Il0KICAgIH07CiAgICBmYVNxdWFyZUJlaGFuY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJlaGFuY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYmVoYW5jZS1zcXVhcmUiXSwgImYxYjUiLCAiTTE1NS4zIDMxOC40YzE3LjIgMCAzMS4yLTYuMSAzMS4yLTI1LjQgMC0xOS43LTExLjctMjcuNC0zMC4zLTI3LjVsLTQ2IDAgMCA1Mi45IDQ1LjEgMHptLTUuNC0xMjkuNmwtMzkuNiAwIDAgNDQuOCA0Mi43IDBjMTUuMSAwIDI1LjgtNi42IDI1LjgtMjIuOSAwLTE3LjctMTMuNy0yMS45LTI4LjktMjEuOXptMTI5LjUgNzQuOGw2Mi4yIDBjLTEuNy0xOC41LTExLjMtMjkuNy0zMC41LTI5LjctMTguMyAwLTMwLjUgMTEuNC0zMS43IDI5Ljd6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0zNDkuNSAxODVsLTc3LjggMCAwLTE4LjkgNzcuOCAwIDAgMTguOXpNMTkzLjcgMjQzLjdjMjMuNiA2LjcgMzUgMjcuNSAzNSA1MS42IDAgMzktMzIuNyA1NS43LTY3LjYgNTUuOWwtOTMuMSAwIDAtMTkyIDkwLjUgMGMzMi45IDAgNjEuNCA5LjMgNjEuNCA0Ny41IDAgMTkuMy05IDI4LjgtMjYuMiAzN3ptMTE4LjctMzguNmM0My41IDAgNjcuNiAzNC4zIDY3LjYgNzUuNCAwIDEuNi0uMSAzLjMtLjIgNSAwIC44LS4xIDEuNS0uMSAyLjJsLTEwMC4yIDBjMCAyMi4yIDExLjcgMzUuMyAzNC4xIDM1LjMgMTEuNiAwIDI2LjUtNi4yIDMwLjItMTguMWwzMy43IDBjLTEwLjQgMzEuOS0zMS45IDQ2LjgtNjUuMSA0Ni44LTQzLjggMC03MS4xLTI5LjctNzEuMS03MyAwLTQxLjggMjguNy03My42IDcxLjEtNzMuNnoiXQogICAgfTsKICAgIGZhQmVoYW5jZVNxdWFyZSA9IGZhU3F1YXJlQmVoYW5jZTsKICAgIGZhU2VydmljZXN0YWNrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlcnZpY2VzdGFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2VjIiwgIk05NiAyMTZjODEuNyAxMC4yIDI3My43IDEwMi4zIDMwNCAyMzJMOCA0NDhjOTkuNS04LjEgMTg0LjUtMTM3IDg4LTIzMnpNMTI4IDY0YzMyLjMgMzUuNiA0Ny43IDgzLjkgNDYuNCAxMzMuNiA4Mi45IDMzLjcgMjA3LjMgMTIzLjcgMjMzLjYgMjUwLjRsOTYgMEM0NjMuMyAyMzEuOSAyMzAuOCA3OS41IDEyOCA2NHoiXQogICAgfTsKICAgIGZhUm9ja2V0Y2hhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXRjaGF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZTgiLCAiTTI4NC41IDIyNC44Yy02LjcgMC0xMy4zIDIuMS0xOC45IDUuOHMtOS45IDkuMS0xMi41IDE1LjQtMy4yIDEzLjEtMS45IDE5LjcgNC42IDEyLjcgOS40IDE3LjQgMTAuOSA4IDE3LjUgOS4zIDEzLjUgLjYgMTkuNy0yIDExLjUtNyAxNS4zLTEyLjYgNS43LTEyLjIgNS43LTE4LjljMC05LjEtMy43LTE3LjgtMTAuMS0yNC4ycy0xNS4xLTEwLTI0LjItOS45em0tMTEwLjQgMGMtNi43IDAtMTMuMyAyLjEtMTguOSA1LjhzLTkuOSA5LjEtMTIuNSAxNS40LTMuMiAxMy4xLTEuOSAxOS43IDQuNiAxMi43IDkuNCAxNy40IDEwLjkgOCAxNy41IDkuMyAxMy41IC42IDE5LjctMiAxMS41LTcgMTUuMy0xMi42IDUuNy0xMi4yIDUuNy0xOC45YzAtOS4xLTMuNy0xNy44LTEwLjEtMjQuMnMtMTUuMS0xMC0yNC4yLTEwbDAgMHptMjIwLjkgMGEzNC4xIDM0LjEgMCAxIDAgLjQgNjguMiAzNC4xIDM0LjEgMCAxIDAgLS40LTY4LjJ6bTE1My44LTU1LjNjLTE1LjUtMjQuMi0zNy4zLTQ1LjYtNjQuNy02My42LTUyLjktMzQuOC0xMjIuNC01NC0xOTUuNy01NC0yNC4yIDAtNDguMyAyLjEtNzIgNi40LTE0LjktMTQuMy0zMS41LTI2LjYtNDkuNS0zNi42LTY2LjgtMzMuMy0xMjUuNi0yMC45LTE1NS4zLTEwLjItMi4zIC44LTQuMyAyLjEtNS45IDMuOXMtMi43IDMuOS0zLjMgNi4yLS41IDQuNyAuMSA3LjEgMS44IDQuNCAzLjUgNi4xQzI3IDU2LjUgNjEuNiA5OS4zIDUzLjEgMTM4LjMgMjAgMTcyLjIgMiAyMTMgMiAyNTUuNiAyIDI5OSAyMCAzMzkuOCA1My4xIDM3My43IDYxLjYgNDEyLjcgMjcgNDU1LjYgNiA0NzcuMiA0LjMgNDc5IDMuMiA0ODEuMSAyLjUgNDgzLjRzLS43IDQuNy0uMSA3IDEuNyA0LjUgMy4zIDYuMiAzLjYgMy4xIDUuOSAzLjljMjkuNyAxMC43IDg4LjUgMjMuMSAxNTUuMy0xMC4yIDE4LTEwIDM0LjctMjIuMyA0OS41LTM2LjYgMjMuOCA0LjMgNDcuOSA2LjQgNzIgNi40IDczLjMgMCAxNDIuOC0xOS4yIDE5NS43LTU0IDI3LjQtMTggNDkuMS0zOS40IDY0LjctNjMuNiAxNy4zLTI2LjkgMjYuMS01NS45IDI2LjEtODYuMSAwLTMxLTguOC02MC0yNi4xLTg2LjlsMCAwek0yODUuNCA0MDkuOWMtMzAuMiAuMS02MC4zLTMuOC04OS40LTExLjVsLTIwLjEgMTkuNGMtMTEuMiAxMC43LTIzLjYgMjAtMzcuMSAyNy42LTE2LjQgOC4yLTM0LjIgMTMuMy01Mi41IDE0LjkgMS0xLjggMS45LTMuNiAyLjgtNS40IDIwLjItMzcuMSAyNS42LTcwLjUgMTYuMy0xMDAuMS0zMy0yNi01Mi44LTU5LjItNTIuOC05NS40IDAtODMuMSAxMDQuMy0xNTAuNSAyMzIuOC0xNTAuNXMyMzIuOSA2Ny40IDIzMi45IDE1MC41YzAgODMuMS0xMDQuMyAxNTAuNS0yMzIuOSAxNTAuNXoiXQogICAgfTsKICAgIGZhUmViZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmViZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFkMCIsICJNMjU2LjkgNTA0Yy0xMzkuMyAwLTI0Ny41LTExNi4yLTI0My4zLTI1NC4xIDIuOC03OS4yIDQzLjItMTUyLjIgMTE2LjUtMjAwLjQgLjMgMCAxLjktLjYgMS4xIC44LTUuOCA1LjUtMTExLjMgMTI5LjgtMTQuMSAyMjYuNCA0OS44IDQ5LjUgOTAgMi41IDkwIDIuNSAzOC41LTUwLjEtLjYtMTI1LjktLjYtMTI1LjktMTAtMjQuOS00NS43LTQwLjEtNDUuNy00MC4xbDI4LjgtMzEuOGMyNC40IDEwLjUgNDMuMiAzOC43IDQzLjIgMzguNyAuOC0yOS42LTIxLjktNjEuNC0yMS45LTYxLjRMMjU1LjUgOCAyOTkuOCA1OC4xYy0yMC41IDI4LjgtMjEuOSA2Mi42LTIxLjkgNjIuNiAxMy44LTIzIDQzLjUtMzkuMyA0My41LTM5LjNsMjguNSAzMS44Yy0yNy40IDguOS00NS40IDM5LjktNDUuNCAzOS45LTE1LjggMjguNS0yNy4xIDg5LjQgLjYgMTI3LjMgMzIuNCA0NC42IDg3LjctMi44IDg3LjctMi44IDEwMi43LTkxLjktMTAuNS0yMjUtMTAuNS0yMjUtNi4xLTUuNSAuOC0yLjggLjgtMi44IDUwLjEgMzYuNSAxMTQuNiA4NC40IDExNi4yIDIwNC44IDIgMTQ1LjYtOTkuOSAyNDkuNC0yNDIuNCAyNDkuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlV2ViQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2ViLWF3ZXNvbWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY4MyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjM1IDE3Ny42bDUzIDQ2LjQgNTIuMi0xMC40Yy0yLjYtMy45LTQuMi04LjUtNC4yLTEzLjYgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDEzLTEwLjMgMjMuNi0yMy4yIDI0TDMwNC41IDM0OS4xYy01LjIgMTEuNS0xNi42IDE4LjktMjkuMiAxOC45bC0xMDIuNiAwYy0xMi42IDAtMjQtNy40LTI5LjItMTguOUw4Ny4yIDIyNGMtMTIuOS0uNC0yMy4yLTExLTIzLjItMjQgMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGMwIDUtMS41IDkuNy00LjIgMTMuNkwxNjAgMjI0IDIxMy4xIDE3Ny42Yy04LjktNC4xLTE1LTEzLjEtMTUtMjMuNiAwLTE0LjQgMTEuNi0yNiAyNi0yNnMyNiAxMS42IDI2IDI2YzAgMTAuNS02LjIgMTkuNS0xNS4xIDIzLjZ6Il0KICAgIH07CiAgICBmYUxpbmt0cmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmt0cmVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDgiLCAiTTMyIDE3My40bDEyNS44IDAtODkuNC04NS40IDQ5LjUtNTEgODUuMiA4Ny44IDAtMTI0LjggNzMuOSAwIDAgMTI0LjggODUuMi04Ny42IDQ5LjQgNTAuOC04OS40IDg1LjIgMTI1LjcgMCAwIDcwLjUtMTI2LjQgMCA5MCA4Ny42LTQ5LjMgNDkuOC0xMjIuMi0xMjMtMTIyLjIgMTIzLTQ5LjUtNDkuNiA5MC04Ny42LTEyNi40IDAgMC03MC41ek0yMDIuOSAzNDQuOGw3My45IDAgMCAxNjcuMi03My45IDAgMC0xNjcuMnoiXQogICAgfTsKICAgIGZhU2ltcGx5YnVpbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2ltcGx5YnVpbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIxNSIsICJNNDgxLjYgNjRsLTEwNiAwQzM2MS4xIDY0IDM0OSA3NS44IDM0OSA5MC4zbDAgMzkuNi0xODUuMyAwIDAtMzkuNmMwLTE0LjUtMTItMjYuMy0yNi42LTI2LjNsLTEwNiAwQzE2LjUgNjQgNC43IDc1LjggNC43IDkwLjNsMCAzMzEuNGMwIDE0LjUgMTEuOCAyNi4zIDI2LjYgMjYuM2w0NTAuNCAwYzE0LjggMCAyNi42LTExLjggMjYuNi0yNi4zbDAtMzMxLjRjLS4yLTE0LjUtMTItMjYuMy0yNi43LTI2LjN6TTE1MC41IDIyMi43YTY2LjUgNjYuNSAwIDEgMSAtLjMgMTMzLjEgNjYuNSA2Ni41IDAgMSAxIC4zLTEzMy4xem0yMTEuOSAuMWE2Ni41IDY2LjUgMCAxIDEgLjMgMTMyLjkgNjYuNSA2Ni41IDAgMSAxIC0uMy0xMzIuOXoiXQogICAgfTsKICAgIGZhU3R1YmJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHViYmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1YzciLCAiTTEzNi41IDI5NC4ybDU4LjggMjIuOWM5LjEtMzYuOCAyNS40LTYxLjEgNTUtNjEuMSA0OS40IDAgNzEuNCA2My42IDE0Mi40IDYzLjYgMTUuNiAwIDM1LjktMi44IDU1LjMtMTMuM2wwIDYxLjdjMCA2MS44LTUwLjQgMTEyLTExMi4zIDExMkwwIDQ4MCA0MS44IDQyNCAwIDM2OCA0MS43IDMxMiAwIDI1Ni4xIDQxLjggMjAwLjEgMCAxNDQuMSA0MS44IDg4IDAgMzIgMzM1LjcgMzJDMzk3LjYgMzIgNDQ4IDgyLjMgNDQ4IDE0NC4xbDAgNTEuM2MtOS4yIDM2LjMtMjUuOSA2MC42LTU1IDYwLjYtNDkuNiAwLTcxLjYtNjMuNS0xNDIuNC02My41LTM1LjkgMC05NS4yIDE0LjYtMTE0LjEgMTAxLjZsMCAuMXoiXQogICAgfTsKICAgIGZhQXBwZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXBwZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM3MSIsICJNNDIuMSAyMzkuMWMyMi4yIDAgMjkgMi44IDMzLjUgMTQuNmwuOCAwIDAtMjIuOWMwLTExLjMtNC44LTE1LjQtMTcuOS0xNS40LTExLjMgMC0xNC40IDIuNS0xNS4xIDEyLjhsLTM4LjYgMGMuMy0xMy45IDEuNS0xOS4xIDUuOC0yNC40IDcuMy04LjggMTguOS0xMS44IDQ2LjEtMTEuOCAzMyAwIDQ3LjEgNSA1My45IDE4LjkgMiA0LjMgNCAxNS42IDQgMjMuN2wwIDc2LjMtMzguMyAwIDEuMy0xOS4xLTEgMGMtNS4zIDE1LjYtMTMuNiAyMC40LTM1LjUgMjAuNC0zMC4zIDAtNDEuMS0xMC4xLTQxLjEtMzcuMyAwLTI1LjIgMTIuMy0zNS44IDQyLjEtMzUuOHptMTcuMSA0OC4xYzEzLjEgMCAxNi45LTMgMTYuOS0xMy40IDAtOS4xLTQuMy0xMS42LTE5LjYtMTEuNi0xMy4xIDAtMTcuOSAzLTE3LjkgMTIuMS0uMSAxMC40IDMuNyAxMi45IDIwLjYgMTIuOXpNMTM3IDE5Mi4zbDM4LjMgMC0xLjUgMjAuNiAuOCAwYzkuMS0xNy4xIDE1LjktMjAuOSAzNy41LTIwLjkgMTQuNCAwIDI0LjcgMyAzMS41IDkuMSA5LjggOC42IDEyLjggMjAuNCAxMi44IDQ4LjEgMCAzMC0zIDQzLjEtMTIuMSA1Mi45LTYuOCA3LjMtMTYuNCAxMC4xLTMzLjIgMTAuMS0yMC40IDAtMjkuMi01LjUtMzMuOC0yMS4ybC0uOCAwIDAgNzAuMy0zOS41IDAgMC0xNjl6TTIxNy45IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTU3LjktNjAuN2wzOC4zIDAtMS41IDIwLjYgLjggMGM5LjEtMTcuMSAxNS45LTIwLjkgMzcuNS0yMC45IDE0LjQgMCAyNC43IDMgMzEuNSA5LjEgOS44IDguNiAxMi44IDIwLjQgMTIuOCA0OC4xIDAgMzAtMyA0My4xLTEyLjEgNTIuOS02LjggNy4zLTE2LjQgMTAuMS0zMy4zIDEwLjEtMjAuNCAwLTI5LjItNS41LTMzLjgtMjEuMmwtLjggMCAwIDcwLjMtMzkuNSAwIDAtMTY5IC4xIDB6TTM1Ni43IDI1M2MwLTI3LjUtMy4zLTMyLjUtMjAuNy0zMi41LTE2LjkgMC0yMC43IDUtMjAuNyAyOC43IDAgMjggMy41IDMzLjUgMjEuMiAzMy41IDE2LjQgMCAyMC4yLTUuNiAyMC4yLTI5Ljd6bTUzLjgtMy44YzAtMjUuNCAzLjMtMzcuOCAxMi4zLTQ1LjggOC44LTguMSAyMi4yLTExLjMgNDUuMS0xMS4zIDQyLjggMCA1NS43IDEyLjggNTUuNyA1NS43bDAgMTEuMS03NS4zIDBjLS4zIDItLjMgNC0uMyA0LjggMCAxNi45IDQuNSAyMS45IDIwLjEgMjEuOSAxMy45IDAgMTcuOS0zIDE3LjktMTMuOWwzNy41IDAgMCAyLjNjMCA5LjgtMi41IDE4LjktNi44IDI0LjctNy4zIDkuOC0xOS42IDEzLjYtNDQuMyAxMy42LTI3LjUgMC00MS42LTMuMy01MC42LTEyLjMtOC41LTguNS0xMS4zLTIxLjMtMTEuMy01MC44em03Ni40LTExLjZjLS4zLTEuOC0uMy0zLjMtLjMtMy44IDAtMTIuMy0zLjMtMTQuNi0xOS42LTE0LjYtMTQuNCAwLTE3LjEgMy0xOC4xIDE1LjFsLS4zIDMuMyAzOC4zIDB6bTU1LjYtNDUuM2wzOC4zIDAtMS44IDE5LjkgLjcgMGM2LjgtMTQuOSAxNC40LTIwLjIgMjkuNy0yMC4yIDEwLjggMCAxOS4xIDMuMyAyMy40IDkuMyA1LjMgNy4zIDYuOCAxNC40IDYuOCAzNCAwIDEuNSAwIDUgLjIgOS4zbC0zNSAwYy4zLTEuOCAuMy0zLjMgLjMtNCAwLTE1LjQtMi0xOS40LTEwLjMtMTkuNC02LjMgMC0xMC44IDMuMy0xMy4xIDkuMy0xIDMtMSA0LjMtMSAxMi4zbDAgNjgtMzguMyAwIDAtMTE4LjUgLjEgMHoiXQogICAgfTsKICAgIGZhR29vZ2xlU2Nob2xhciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnb29nbGUtc2Nob2xhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjNiIiwgIk0zOTAuOSAyOTguNXMwIC4xIC4xIC4xYzkuMiAxOS40IDE0LjQgNDEuMSAxNC40IDY0LS4xIDgyLjUtNjYuOSAxNDkuNC0xNDkuNCAxNDkuNFMxMDYuNyA0NDUuMSAxMDYuNyAzNjIuN2MwLTIyLjkgNS4yLTQ0LjYgMTQuNC02NCAxLjctMy42IDMuNi03LjIgNS42LTEwLjcgNC40LTcuNiA5LjQtMTQuNyAxNS0yMS4zIDI3LjQtMzIuNiA2OC41LTUzLjMgMTE0LjQtNTMuMyAzMy42IDAgNjQuNiAxMS4xIDg5LjYgMjkuOSA5LjEgNi45IDE3LjQgMTQuNyAyNC44IDIzLjUgNS42IDYuNiAxMC42IDEzLjggMTUgMjEuMyAyIDMuNCAzLjggNyA1LjUgMTAuNWwtLjEtLjF6bTI2LjQtMTguOGMtMzAuMS01OC40LTkxLTk4LjQtMTYxLjMtOTguNHMtMTMxLjIgNDAtMTYxLjMgOTguNGwtOTQuNy03NyAyNTYtMjAyLjcgMjU2IDIwMi43LTk0LjcgNzcuMSAwLS4xeiJdCiAgICB9OwogICAgZmFZYXJuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhcm4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlMyIsICJNNDAxLjkgMzQ1LjJjLTM5IDkuMy00OC40IDMyLjEtMTA0IDQ3LjQgMCAwLTIuNyA0LTEwLjQgNS44LTEzLjQgMy4zLTYzLjkgNi02OC41IDYuMS0xMi40IC4xLTE5LjktMy4yLTIyLTguMi02LjQtMTUuMyA5LjItMjIgOS4yLTIyLTguMS01LTktOS45LTkuOC04LjEtMi40IDUuOC0zLjYgMjAuMS0xMC4xIDI2LjUtOC44IDguOS0yNS41IDUuOS0zNS4zIC44LTEwLjgtNS43IC44LTE5LjIgLjgtMTkuMnMtNS44IDMuNC0xMC41LTMuNmMtNi05LjMtMTcuMS0zNy4zIDExLjUtNjItMS4zLTEwLjEtNC42LTUzLjcgNDAuNi04NS42IDAgMC0yMC42LTIyLjgtMTIuOS00My4zIDUtMTMuNCA3LTEzLjMgOC42LTEzLjkgNS43LTIuMiAxMS4zLTQuNiAxNS40LTkuMSAyMC42LTIyLjIgNDYuOC0xOCA0Ni44LTE4czEyLjQtMzcuOCAyMy45LTMwLjRjMy41IDIuMyAxNi4zIDMwLjYgMTYuMyAzMC42czEzLjYtNy45IDE1LjEtNWM4LjIgMTYgOS4yIDQ2LjUgNS42IDY1LjEtNi4xIDMwLjYtMjEuNCA0Ny4xLTI3LjYgNTcuNS0xLjQgMi40IDE2LjUgMTAgMjcuOCA0MS4zIDEwLjQgMjguNiAxLjEgNTIuNyAyLjggNTUuMyAuOCAxLjQgMTMuNyAuOCAzNi40LTEzLjIgMTIuOC03LjkgMjguMS0xNi45IDQ1LjQtMTcgMTYuNy0uNSAxNy42IDE5LjIgNC45IDIyLjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTQxNi43IDc1LjJjLTEuNy0xMy42LTEzLjItMjMtMjgtMjIuOC0yMiAuMy00MC41IDExLjctNTIuOCAxOS4yLTQuOCAzLTguOSA1LjItMTIuNCA2LjggMy4xLTQ0LjUtMjIuNS03My4xLTI4LjctNzkuNCA3LjgtMTEuMyAxOC40LTI3LjggMjMuNC01My4yIDQuMy0yMS43IDMtNTUuNS02LjktNzQuNS0xLjYtMy4xLTcuNC0xMS4yLTIxLTcuNC05LjctMjAtMTMtMjIuMS0xNS42LTIzLjgtMS4xLS43LTIzLjYtMTYuNC00MS40IDI4LTEyLjIgLjktMzEuMyA1LjMtNDcuNSAyMi44LTIgMi4yLTUuOSAzLjgtMTAuMSA1LjRsLjEgMGMtOC40IDMtMTIuMyA5LjktMTYuOSAyMi4zLTYuNSAxNy40IC4yIDM0LjYgNi44IDQ1LjctMTcuOCAxNS45LTM3IDM5LjgtMzUuNyA4Mi41LTM0IDM2LTExLjggNzMtNS42IDc5LjYtMS42IDExLjEgMy43IDE5LjQgMTIgMjMuOCAxMi42IDYuNyAzMC4zIDkuNiA0My45IDIuOCA0LjkgNS4yIDEzLjggMTAuMSAzMCAxMC4xIDYuOCAwIDU4LTIuOSA3Mi42LTYuNSA2LjgtMS42IDExLjUtNC41IDE0LjYtNy4xIDkuOC0zLjEgMzYuOC0xMi4zIDYyLjItMjguNyAxOC0xMS43IDI0LjItMTQuMiAzNy42LTE3LjQgMTIuOS0zLjIgMjEtMTUuMSAxOS40LTI4LjJ6Il0KICAgIH07CiAgICBmYVN0YWNrT3ZlcmZsb3cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stb3ZlcmZsb3ciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2YyIsICJNMjkxIDMxMWwtMTk1LjctNDEuMy04LjIgMzkuMyAxOTUuNyA0MSA4LjItMzl6bTUxLTg3TDE4OC41IDk1LjcgMTYzIDEyNi41IDMxNi41IDI1NC44IDM0MiAyMjR6bS0zMS4yIDM5LjdMMTI5LjUgMTc5IDExMi44IDIxNS41IDI5NCAzMDAgMzEwLjggMjYzLjd6TTI2Mi4zIDMybC0zMiAyNCAxMTkuMyAxNjAuMyAzMi0yNC0xMTkuMy0xNjAuM3ptMjAuNSAzMjhsLTIwMCAwIDAgMzkuNyAyMDAgMCAwLTM5Ljd6bTM5LjcgODBsLTI3OS41IDAgMC0xMjAtNDAgMCAwIDE2MCAzNTkuNSAwIDAtMTYwLTQwIDAgMCAxMjB6Il0KICAgIH07CiAgICBmYUJsdWV0b290aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibHVldG9vdGgiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjI5MyIsICJNMjYwLjYgMTcxLjFsLTQyLjkgNDIuOS0uMy04NiA0My4yIDQzLjF6TTIxNy40IDM5MC45bDQzLjEtNDMuMS00Mi45LTQyLjktLjIgODZ6TTM4NCAyNTkuNEMzODQgNDY1IDMxMi4xIDUxMiAxOTguOSA1MTJTMCA0NjUgMCAyNTkuNCA4My40IDAgMTk2LjYgMCAzODQgNTMuOSAzODQgMjU5LjR6bS0xNTguNSAwbDc5LjQtODguNi0xMjUuMS0xMzQuMyAwIDE3Ni45LTczLjgtNzMuOC0yNyAyNi45IDkyLjcgOTMtOTIuNyA5MyAyNi45IDI2LjkgNzMuOC03My44IDIuMyAxNzAgMTI3LjQtMTI3LjUtODMuOS04OC43eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0pwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtanAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuNCAxMTkuOCA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjIgNTA0IDI1NiA1MDQgMTE3LjIgMzk2LjUgOCAyNTUuNyA4em0uNiA0NTAuN2MtMTEyIDAtMjAzLjYtOTIuNS0yMDMuNi0yMDIuNyAwLTIxLjEgMy00MS4yIDktNjAuM2wxMjcgNTYuNS0yNy45IDAgMCAzOC42IDU4LjEgMCA1LjcgMTEuOCAwIDE4LjctNjMuOCAwIDAgMzguNyA2My44IDAgMCA1NiA2MS43IDAgMC01NiA2NC4yIDAgMC0zNS43IDgxIDM2LjFjLTEuNSAyLjItNTcuMSA5OC4zLTE3NS4yIDk4LjN6bTg3LjYtMTM3LjNsLTU3LjYgMCAwLTE4LjcgMi45LTUuNiA1NC43IDI0LjN6bTYuNS01MS40bDAtMTcuOC0zOC42IDAgNjMtMTE2LTY1LjggMC00My40IDk2LTIzLTEwLjItMzkuNi04NS43LTY1LjggMCAyNy4zIDUxLTgxLjktMzYuNWMyNy44LTQ0LjEgODIuNi05OC4xIDE3My43LTk4LjEgMTEyLjggMCAyMDMgOTAgMjAzIDIwMy40IDAgMjEtMi43IDQwLjYtNy45IDU5TDM1MC40IDI3MHoiXQogICAgfTsKICAgIGZhUmVkZGl0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWExIiwgIk0wIDI1NkMwIDExNC42IDExNC42IDAgMjU2IDBTNTEyIDExNC42IDUxMiAyNTYgMzk3LjQgNTEyIDI1NiA1MTJMMzcuMSA1MTJjLTEzLjcgMC0yMC41LTE2LjUtMTAuOS0yNi4yTDc1IDQzN0MyOC43IDM5MC43IDAgMzI2LjcgMCAyNTZ6TTM0OS42IDE1My42YzIzLjYgMCA0Mi43LTE5LjEgNDIuNy00Mi43cy0xOS4xLTQyLjctNDIuNy00Mi43Yy0yMC42IDAtMzcuOCAxNC42LTQxLjggMzQtMzQuNSAzLjctNjEuNCAzMy02MS40IDY4LjRsMCAuMmMtMzcuNSAxLjYtNzEuOCAxMi4zLTk5IDI5LjEtMTAuMS03LjgtMjIuOC0xMi41LTM2LjUtMTIuNS0zMyAwLTU5LjggMjYuOC01OS44IDU5LjggMCAyNCAxNC4xIDQ0LjYgMzQuNCA1NC4xIDIgNjkuNCA3Ny42IDEyNS4yIDE3MC42IDEyNS4yczE2OC43LTU1LjkgMTcwLjYtMTI1LjNjMjAuMi05LjYgMzQuMS0zMC4yIDM0LjEtNTQgMC0zMy0yNi44LTU5LjgtNTkuOC01OS44LTEzLjcgMC0yNi4zIDQuNi0zNi40IDEyLjQtMjcuNC0xNy02Mi4xLTI3LjctMTAwLTI5LjFsMC0uMmMwLTI1LjQgMTguOS00Ni41IDQzLjQtNDkuOSA0LjQgMTguOCAyMS4zIDMyLjggNDEuNSAzMi44bC4xIC4yek0xNzcuMSAyNDYuOWMxNi43IDAgMjkuNSAxNy42IDI4LjUgMzkuM3MtMTMuNSAyOS42LTMwLjMgMjkuNi0zMS40LTguOC0zMC40LTMwLjUgMTUuNC0zOC4zIDMyLjEtMzguM2wuMS0uMXptMTkwLjEgMzguM2MxIDIxLjctMTMuNyAzMC41LTMwLjQgMzAuNXMtMjkuMy03LjktMzAuMy0yOS42IDExLjgtMzkuMyAyOC41LTM5LjMgMzEuMiAxNi42IDMyLjEgMzguM2wuMSAuMXptLTQ4LjEgNTYuN2MtMTAuMyAyNC42LTM0LjYgNDEuOS02MyA0MS45cy01Mi43LTE3LjMtNjMtNDEuOWMtMS4yLTIuOSAuOC02LjIgMy45LTYuNSAxOC40LTEuOSAzOC4zLTIuOSA1OS4xLTIuOXM0MC43IDEgNTkuMSAyLjljMy4xIC4zIDUuMSAzLjYgMy45IDYuNXoiXQogICAgfTsKICAgIGZhQ29ubmVjdGRldmVsb3AgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29ubmVjdGRldmVsb3AiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwZSIsICJNNTUwLjggMjQxbC01MC4xLTg2LjhjMS4xLTIuMSAxLjktNC42IDEuOS03LjIgMC04LTYuNy0xNC43LTE0LjctMTVMNDMyLjQgMzYuMWMuNS0xLjYgMS4xLTMuMiAxLjEtNC44IDAtOC42LTctMTUuMy0xNS4zLTE1LjMtNC44IDAtOC44IDIuMS0xMS44IDUuNmwtMTA2LjYgMGMtMi43LTMuNS02LjctNS42LTExLjUtNS42cy04LjggMi4xLTExLjUgNS42bC0xMDYuMSAwYy0yLjktMy41LTctNS42LTExLjgtNS42LTguMyAwLTE1LjMgNi43LTE1LjMgMTUuMyAwIDEuNiAuNSAzLjUgMS4xIDQuOGwtNTYgOTcuMmMtNS40IDIuNC05LjEgNy41LTkuMSAxMy43IDAgLjUgLjMgMS4xIC4zIDEuNkwyNi42IDI0MC43Yy03LjIgMS4zLTEyLjYgNy41LTEyLjYgMTUgMCA3LjIgNS4xIDEzLjQgMTIuMSAxNWw1NS4yIDk1LjRjLS41IDEuNi0uOCAyLjktLjggNC44IDAgNy4yIDUuMSAxMy40IDEyLjEgMTQuN2w1MS43IDg5LjdjLS41IDEuNi0xLjEgMy41LTEuMSA1LjQgMCA4LjYgNyAxNS4zIDE1LjMgMTUuMyA0LjggMCA4LjgtMi4xIDExLjUtNS40bDEwNi45IDBjMi43IDMuMiA3IDUuNCAxMS41IDUuNHM4LjgtMi4xIDExLjUtNS40bDEwNy4xIDBjMi43IDIuOSA2LjcgNC44IDExIDQuOCA4LjYgMCAxNS4zLTcgMTUuMy0xNS4zIDAtMS42LS4zLTIuOS0uOC00LjNsNTEuNy05MC4zYzctMS4zIDEyLjEtNy41IDEyLjEtMTQuNyAwLTEuNi0uMy0zLjItLjgtNC44bDU0LjktOTUuNGM3LTEuMyAxMi4zLTcuNSAxMi4zLTE1IDAtNy4yLTUuMS0xMy40LTExLjgtMTQuN3ptLTM5NyAyMDkuN2wtNDMuNy03NS44IDQzLjcgMCAwIDc1Ljh6bTAtODMuOGwtNDMuNyAwYy0uMy0xLjEtLjgtMi4xLTEuMy0zLjJsNDUtNDcuNCAwIDUwLjZ6bTAtNjIuNGwtNTAuNCA1My4zYy0xLjMtLjUtMi43LTEuMy00LTEuNkw0My43IDI1OS44Yy41LTEuMyAuNS0yLjcgLjUtNHMwLTIuNC0uMy0zLjVsNTItOTBjMi43LS4zIDUuNC0xLjEgNy44LTIuN2w1MC4xIDUyIDAgOTIuOXptMC0xMDIuM0wxMDggMTU0LjhjMS4zLTIuMSAyLjEtNC44IDIuMS03LjggMC0uMy0uMy0uOC0uMy0xLjFsNDMuOS0xNS44IDAgNzIuMXptMC04MC42bC00My43IDE1LjggNDMuNy03NS41IDAgNTkuN3ptMzI2LjUgMzkuMWwuOCAxLjMtMzUuNCAxNjcuMS02My44LTY3LjIgOTgtMTAxLjUgLjMgLjN6TTI5Mi4xIDM1NS4xbDExLjUgMTEuOC0yMi44IDAgMTEuMy0xMS44em0tLjMtMTEuM2wtODMuMy04NS40IDc5LjYtODQuNCA4MyA4Ny42LTc5LjMgODIuMnptNS40IDUuOWw3OS4zLTgyLjIgNjcuNSA3MS4zLTUuOSAyOC4xLTEyNCAwLTE2LjktMTcuMXpNNDEwLjcgNDQuNGMxLjEgLjUgMi4xIDEuMSAzLjUgMS4zbDU3LjkgMTAwLjcgMCAuNWMwIDIuOSAuOCA1LjYgMi4xIDcuOGwtOTcuNSAxMDEuMi04My04Ny42IDExNy4xLTEyNHptLTkuMS0yLjFsLTExMy42IDEyMC4zLTU3LjEtNjAuMyAxNjYuMy02MCA0LjMgMHptLTEyMy41IDBjMi43IDIuNyA2LjIgNC4zIDEwLjIgNC4zczcuNS0xLjYgMTAuMi00LjNsNzUgMC0xNDguNCA1My42LTUwLjktNTMuNiAxMDMuOSAwek0xNjEuOSA0Ny45bDEuMS0yLjFjLjktLjIgMS44LS41IDIuNy0uOGw1MS4yIDUzLjgtNTQuOSAxOS44IDAtNzAuN3ptMCA3OS4zbDYwLjgtMjIgNTkuNyA2My4yLTc5LjYgODQuMS00MS00Mi4xIDAtODMuM3ptMCA5Mi43bDM2LjQgMzcuOC0zNi40IDM4LjMgMC03Ni4xem0wIDg3LjlsNDIuMS00NC41IDgyLjggODYtMTcuMSAxNy43LTEwNy43IDAgMC01OS4yem03IDE2Mi4xYy0xLjYtMS42LTMuNS0yLjctNS45LTMuNWwtMS4xLTEuNiAwLTg5LjcgOTkuOSAwLTkxLjYgOTQuOC0xLjMgMHptMTI5LjkgMGMtMi43LTIuNC02LjQtNC4zLTEwLjQtNC4zcy03LjggMS45LTEwLjQgNC4zbC05Ni40IDAgOTEuNi05NC44IDM4LjMgMCA5MS42IDk0LjgtMTA0LjIgMHptMTIwLTExLjhsLTQuMyA3LjVjLTEuMyAuMy0yLjQgLjgtMy41IDEuM2wtODkuMi05MS45IDExNC40IDAtMTcuNCA4M3ptMTIuOS0yMi4ybDEyLjktNjAuOCAyMiAwLTM0LjggNjAuOHptMzQuOC02OC44bC0yMC40IDAgNC42LTIxLjIgMTcuMSAxOC4yYy0uNSAuOC0xLjEgMS45LTEuMyAyLjl6bTY2LjItMTA3LjRsLTU1LjQgOTYuN2MtMS4zIC41LTIuNyAxLjEtNCAxLjlsLTIwLjYtMjIgMzQuNi0xNjMuOSA0NS44IDc5LjNjLS4zIDEuMy0uOCAyLjctLjggNC4zIDAgMS4zIC4zIDIuNCAuNSAzLjd6Il0KICAgIH07CiAgICBmYVJlc2VhcmNoZ2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZXNlYXJjaGdhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmOCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjYyLjIgMzY2LjRjLTYuNiAzLTMzLjIgNi01MC0xNC4yLTkuMi0xMC42LTI1LjMtMzMuMy00Mi4yLTYzLjYtOC45IDAtMTQuNyAwLTIxLjQtLjZsMCA0Ni40YzAgMjMuNSA2IDIxLjIgMjUuOCAyMy45bDAgOC4xYy02LjktLjMtMjMuMS0uOC0zNS42LS44LTEzLjEgMC0yNi4xIC42LTMzLjYgLjhsMC04LjFjMTUuNS0yLjkgMjItMS4zIDIyLTIzLjlsMC0xMDkuNGMwLTIyLjYtNi40LTIxLTIyLTIzLjlsMC04LjFjMjUuOCAxIDUzLjEtLjYgNzAuOS0uNiAzMS43IDAgNTUuOSAxNC40IDU1LjkgNDUuNiAwIDIxLjEtMTYuNyA0Mi4yLTM5LjIgNDcuNSAxMy42IDI0LjIgMzAgNDUuNiA0Mi4yIDU4LjkgNy4yIDcuOCAxNy4yIDE0LjcgMjcuMiAxNC43bDAgNy4zem0yMi45LTEzNWMtMjMuMyAwLTMyLjItMTUuNy0zMi4yLTMyLjJsMC0zMi4yYzAtMTIuMiA4LjgtMzAuNCAzNC0zMC40czMwLjQgMTcuOSAzMC40IDE3LjlsLTEwLjcgNy4ycy01LjUtMTIuNS0xOS43LTEyLjVjLTcuOSAwLTE5LjcgNy4zLTE5LjcgMTkuN2wwIDI2LjhjMCAxMy40IDYuNiAyMy4zIDE3LjkgMjMuMyAxNC4xIDAgMjEuNS0xMC45IDIxLjUtMjYuOGwtMTcuOSAwIDAtMTAuNyAzMC40IDBjMCAyMC41IDQuNyA0OS45LTM0IDQ5Ljl6TTE2OC42IDI3Ni4xYy05LjQgMC0xMy42LS4zLTIwLS44bDAtNjkuN2M2LjQtLjYgMTUtLjYgMjIuNS0uNiAyMy4zIDAgMzcuMiAxMi4yIDM3LjIgMzQuNSAwIDIxLjktMTUgMzYuNi0zOS43IDM2LjZ6Il0KICAgIH07CiAgICBmYVNpZ25hbE1lc3NlbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaWduYWwtbWVzc2VuZ2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2NjMiLCAiTTI1NiAwYy0xMy4zIDAtMjYuMyAxLTM5LjEgM2wzLjcgMjMuN0MyMzIuMSAyNC45IDI0NCAyNCAyNTYgMjRzMjMuOSAuOSAzNS40IDIuN0wyOTUuMSAzQzI4Mi4zIDEgMjY5LjMgMCAyNTYgMHptNjAuOCA3LjNsLTUuNyAyMy4zYzIzLjQgNS43IDQ1LjQgMTQuOSA2NS40IDI3LjFsMTIuNS0yMC41Yy0yMi4xLTEzLjQtNDYuNC0yMy42LTcyLjItMjkuOXptNzYuNCA2MS42YzE5LjEgMTQgMzYgMzAuOSA1MC4xIDUwLjFsMTkuNC0xNC4yQzQ0NyA4My42IDQyOC40IDY1IDQwNy4zIDQ5LjVMMzkzLjEgNjguOHptODEuNyA1NC4ybC0yMC41IDEyLjVjMTIuMiAyMCAyMS40IDQyIDI3LjEgNjUuNGwyMy4zLTUuN2MtNi4zLTI1LjgtMTYuNS01MC4xLTI5LjktNzIuMnptMTAuNSA5Ny41YzEuOCAxMS41IDIuNyAyMy40IDIuNyAzNS40cy0uOSAyMy45LTIuNyAzNS40bDIzLjcgMy43YzEuOS0xMi43IDMtMjUuOCAzLTM5LjFzLTEtMjYuMy0zLTM5LjFsLTIzLjcgMy43em0tMzEgMTU1LjlsMjAuNSAxMi41YzEzLjQtMjIuMSAyMy42LTQ2LjQgMjkuOS03Mi4ybC0yMy4zLTUuN2MtNS43IDIzLjQtMTQuOSA0NS40LTI3LjEgNjUuNHptOC4yIDMwLjhsLTE5LjQtMTQuMmMtMTQgMTkuMS0zMC45IDM2LTUwLjEgNTAuMWwxNC4yIDE5LjRjMjEuMS0xNS41IDM5LjgtMzQuMSA1NS4yLTU1LjJ6bS04Ni4xIDQ3Yy0yMCAxMi4yLTQyIDIxLjQtNjUuNCAyNy4xbDUuNyAyMy4zYzI1LjgtNi4zIDUwLjEtMTYuNSA3Mi4yLTI5LjlsLTEyLjUtMjAuNXpNMjk1LjEgNTA5bC0zLjctMjMuN0MyNzkuOSA0ODcuMSAyNjggNDg4IDI1NiA0ODhzLTIzLjktLjktMzUuNC0yLjdMMjE2LjkgNTA5YzEyLjcgMS45IDI1LjggMyAzOS4xIDNzMjYuMy0xIDM5LjEtM3ptLTk0LjEtMjcuNmMtMTcuNi00LjMtMzQuNC0xMC42LTUwLjEtMTguNmwtNy44LTQtMzIuOCA3LjcgNS41IDIzLjQgMjQuMy01LjdjMTcuNCA4LjkgMzUuOSAxNS44IDU1LjMgMjAuNWw1LjctMjMuM3pNOTUuNCA0OTQuNkw5MCA0NzEuMyA0OC4zIDQ4MWMtMTAuNCAyLjQtMTkuNy02LjktMTcuMy0xNy4zbDkuNy00MS42LTIzLjQtNS41LTkuNyA0MS42QzEuMiA0ODYgMjYgNTEwLjggNTMuOCA1MDQuNGw0MS42LTkuN3ptLTUwLTkyLjlsNy43LTMyLjgtNC03LjhjLTgtMTUuNy0xNC4zLTMyLjUtMTguNi01MC4xTDcuMyAzMTYuN0MxMiAzMzYuMSAxOC45IDM1NC43IDI3LjcgMzcybC01LjcgMjQuMyAyMy40IDUuNXpNMyAyOTUuMWwyMy43LTMuN0MyNC45IDI3OS45IDI0IDI2OCAyNCAyNTZzLjktMjMuOSAyLjctMzUuNEwzIDIxNi45QzEgMjI5LjcgMCAyNDIuNyAwIDI1NnMxIDI2LjMgMyAzOS4xem0yNy42LTk0LjFjNS43LTIzLjQgMTQuOS00NS40IDI3LjEtNjUuNEwzNy4yIDEyMy4xYy0xMy40IDIyLjEtMjMuNiA0Ni40LTI5LjkgNzIuMmwyMy4zIDUuN3ptMTguOS05Ni4ybDE5LjQgMTQuMmMxNC0xOS4xIDMwLjktMzYgNTAuMS01MC4xTDEwNC43IDQ5LjVDODMuNiA2NSA2NSA4My42IDQ5LjUgMTA0Ljd6bTg2LjEtNDdjMjAtMTIuMiA0Mi0yMS40IDY1LjQtMjcuMUwxOTUuMiA3LjNjLTI1LjggNi4zLTUwLjEgMTYuNS03Mi4yIDI5LjlsMTIuNSAyMC41ek0yNTYgNDY0YzExNC45IDAgMjA4LTkzLjEgMjA4LTIwOFMzNzAuOSA0OCAyNTYgNDggNDggMTQxLjEgNDggMjU2YzAgMzYuNCA5LjQgNzAuNyAyNS44IDEwMC41IDEuNiAyLjkgMi4xIDYuMiAxLjQgOS40bC0yMS42IDkyLjUgOTIuNS0yMS42YzMuMi0uNyA2LjUtLjIgOS40IDEuNCAyOS44IDE2LjUgNjQgMjUuOCAxMDAuNSAyNS44eiJdCiAgICB9OwogICAgZmFYaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInhpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE2OCIsICJNMTYyLjcgMjEwYy0xLjggMy4zLTI1LjIgNDQuNC03MC4xIDEyMy41LTQuOSA4LjMtMTAuOCAxMi41LTE3LjcgMTIuNUw5LjggMzQ2Yy03LjcgMC0xMi4xLTcuNS04LjUtMTQuNGw2OS0xMjEuM2MuMiAwIC4yLS4xIDAtLjNMMjYuNCAxMzQuNGMtNC4zLTcuOCAuMy0xNC4xIDguNS0xNC4xbDY1LjEgMGM3LjMgMCAxMy4zIDQuMSAxOCAxMi4yTDE2Mi43IDIxMHpNMzgyLjYgNDYuMWwtMTQ0IDI1MyAwIC4zIDkxLjYgMTY2LjZjMy45IDcuMSAuMiAxNC4xLTguNSAxNC4xbC02NS4yIDBjLTcuNiAwLTEzLjYtNC0xOC0xMi4yTDE0Ni4xIDI5OS40YzMuMy01LjggNTEuNS05MC44IDE0NC44LTI1NS4yIDQuNi04LjEgMTAuNC0xMi4yIDE3LjUtMTIuMmw2NS43IDBjOCAwIDEyLjMgNi43IDguNSAxNC4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVKcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsianMtc3F1YXJlIl0sICJmM2I5IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTgwLjkgNDQ0LjljLTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41TDE1MiAzODUuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVsMC0xNDMuMSA0Mi4xIDAgMCAxNDMuN2MwIDQzLjYtMjUuNiA2My41LTYyLjkgNjMuNXptODUuOC00M0wzMDEgMzgyLjFjOSAxNC43IDIwLjggMjUuNiA0MS41IDI1LjYgMTcuNCAwIDI4LjYtOC43IDI4LjYtMjAuOCAwLTE0LjQtMTEuNC0xOS41LTMwLjctMjhsLTEwLjUtNC41Yy0zMC40LTEyLjktNTAuNS0yOS4yLTUwLjUtNjMuNSAwLTMxLjYgMjQuMS01NS42IDYxLjYtNTUuNiAyNi44IDAgNDYgOS4zIDU5LjggMzMuN0wzNjggMjkwYy03LjItMTIuOS0xNS0xOC0yNy4xLTE4LTEyLjMgMC0yMC4xIDcuOC0yMC4xIDE4IDAgMTIuNiA3LjggMTcuNyAyNS45IDI1LjZsMTAuNSA0LjVjMzUuOCAxNS4zIDU1LjkgMzEgNTUuOSA2Ni4yIDAgMzcuOC0yOS44IDU4LjYtNjkuNyA1OC42LTM5LjEgMC02NC40LTE4LjYtNzYuNy00M3oiXQogICAgfTsKICAgIGZhSnNTcXVhcmUgPSBmYVNxdWFyZUpzOwogICAgZmFGb250aWNvbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9udGljb25zIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyODAiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTE4NyAxNzIuOWMtMTguNCAwLTE5IDkuOS0xOSAyNy40bDAgMjMuM2MwIDIuNC0zLjUgNC40LS42IDQuNGw2Ny40IDAtMTEuMSAzNy4zLTU1LjcgMCAwIDExMi45YzAgNS44LTIgNi43IDMuMiA3LjNsNDMuNSA0LjEgMCAyNS4xLTEzMC43IDAgMC0yNS43IDIxLjMtMmM1LjItLjYgNi43LTIuMyA2LjctNy45bDAtMTExLjRjMC0yLjMtMi45LTIuMy01LjgtMi4zbC0yMi4yIDAgMC0zNy40IDI4IDAgMC0yMWMwLTQ5LjYgMjYuNS03MCA3Ny4zLTcwIDM0LjEgMCA2NC43IDguMiA2NC43IDUyLjhsLTUwLjcgNi4xYy4zLTE4LjctNC40LTIzLTE2LjMtMjN6bTc0LjMgMjQxLjhsMC0yNS4xIDIwLjQtMi42YzUuMi0uNiA3LjYtMS43IDcuNi03LjNsMC0xMDcuOWMwLTQuMS0yLjktNi43LTYuNy03LjlsLTI0LjItNi40IDYuNy0yOS41IDgwLjIgMCAwIDE1MS43YzAgNS44LTIuNiA2LjQgMi45IDcuM2wxNS43IDIuNiAwIDI1LjEtMTAyLjYgMHptODAuOC0yNTUuNWw5IDMzLjItNy4zIDcuMy0zMS4yLTE2LjYtMzEuMiAxNi42LTcuMy03LjMgOS0zMy4yLTIxLjgtMjQuMiAzLjUtOS42IDI3LjcgMCAxNS41LTI4IDkuMyAwIDE1LjUgMjggMjcuNyAwIDMuNSA5LjYtMjEuOSAyNC4yeiJdCiAgICB9OwogICAgZmFVcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXBzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3ZTAiLCAiTTEwMy4yIDMwM2MtNS4yIDMuNi0zMi42IDEzLjEtMzIuNi0xOWwwLTEwNC0zMi43IDAgMCAxMDIuNmMwIDc0LjkgODAuMiA1MS4xIDk3LjkgMzlsMC0xNDEuNi0zMi42IDAgMCAxMjN6TTQgNzQuOEw0IDI5NS43YzAgMTAzLjcgNzQuOSAxMzUuMiAxODcuNyAxODQuMSAxMTIuNC00OC45IDE4Ny43LTgwLjIgMTg3LjctMTg0LjFsMC0yMjAuOUMyNjMuMSAxMy4yIDk3LjYgMjUuMiA0IDc0Ljh6TTM2Mi4xIDI5NS43YzAgODYuNi01My4yIDExMy42LTE3MC40IDE2NS4zLTExNy41LTUxLjgtMTcwLjUtNzguNy0xNzAuNS0xNjUuM2wwLTEyNi40YzEwMi4zLTkzLjggMjMxLjYtMTAwIDM0MC45LTg5LjhsMCAyMTYuMnpNMTUyLjUgMTg4LjNsMCAyMTIuOCAzMi43IDAgMC02OC43YzI0LjQgNy4zIDcxLjctMi42IDcxLjctNzguNSAwLTk3LjQtODAuNy04MC45LTEwNC40LTY1LjZ6bTMyLjcgMTE3LjNsMC0xMDAuM2M4LjQtNC4yIDM4LjQtMTIuNyAzOC40IDQ5LjMgMCA2Ny45LTM2LjQgNTEuOC0zOC40IDUxem03OS4xLTg2LjRjLjEgNDcuMyA1MS42IDQyLjUgNTIuMiA3MC40IC42IDIzLjUtMzAuNCAyMy01MC44IDQuOWwwIDMwLjFjMzYuMiAyMS41IDgxLjkgOC4xIDgzLjItMzMuNSAxLjctNTEuNS01NC4xLTQ2LjYtNTMuNC03My4yIC42LTIwLjMgMzAuNi0yMC41IDQ4LjUtMi4ybDAtMjguNGMtMjguNS0yMi03OS45LTkuMi03OS43IDMxLjl6Il0KICAgIH07CiAgICBmYUFtYXpvblBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWF6b24tcGF5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MmMiLCAiTTE0IDMyNS4zYzIuMy00LjIgNS4yLTQuOSA5LjctMi41IDEwLjQgNS42IDIwLjYgMTEuNCAzMS4yIDE2LjcgNDAuNiAyMC4yIDgzLjMgMzUuOCAxMjcuNCA0Ni4zIDIwLjggNSA0MS45IDkgNjMuMiAxMS44IDMxLjUgNC4yIDYzLjIgNiA5NSA1LjIgMTcuNC0uNCAzNC44LTEuOCA1Mi4xLTMuOCA1Ni4yLTYuNiAxMTEuMS0yMSAxNjMuMy00Mi44IDIuOS0xLjIgNS45LTIgOS4xLTEuMiA2LjcgMS44IDkgOSA0LjEgMTMuOS0zIDIuNy02LjIgNS4yLTkuNiA3LjQtMzAuNyAyMS4xLTY0LjIgMzYuNC05OS42IDQ3LjktMjQuNSA3LjktNDkuNiAxMy44LTc1LjEgMTcuNi0xNy42IDIuNy0zNS40IDQuMy01My4yIDQuOC0uOCAwLTEuNyAuMi0yLjUgLjNsLTIxLjEgMGMtLjgtLjEtMS43LS4yLTIuNS0uMy0zLjYtLjItNy4yLS4zLTEwLjctLjQtMTYuOS0uOC0zMy43LTIuNS01MC40LTUuMy0yNy40LTQuNS01NC4zLTExLjUtODAuNC0yMC45LTUzLjctMTkuNC0xMDMuMS00OC45LTE0NS42LTg3LTEuOC0xLjYtMy0zLjgtNC40LTUuN2wwLTJ6TTE3MiA2NS4xbC00LjMgLjZjLTEzLjggMS43LTI2LjggNi45LTM4IDE1LjEtMi40IDEuNy00LjYgMy41LTcuMSA1LjQtLjItLjQtLjMtLjktLjQtMS40LS40LTIuNy0uOC01LjUtMS4zLTguMi0uNy00LjYtMy02LjYtNy42LTYuNmwtMTEuNSAwYy02LjkgMC04LjIgMS4zLTguMiA4LjJsMCAyMDkuM2MwIDEgMCAyIC4xIDMgLjIgMyAyIDQuOSA0LjkgNSA3IC4xIDE0LjEgLjEgMjEuMSAwIDIuOSAwIDQuNy0yIDUtNSAuMS0xIC4xLTIgLjEtM2wwLTcyLjRjMS4xIC45IDEuNyAxLjQgMi4yIDEuOSAxNy45IDE0LjkgMzguNSAxOS44IDYxIDE1LjQgMjAuNC00IDM0LjYtMTYuNSA0My44LTM0LjkgNy0xMy45IDkuOS0yOC43IDEwLjMtNDQuMSAuNS0xNy4xLTEuMi0zMy45LTguMS00OS44LTguNS0xOS42LTIyLjYtMzIuNS00My45LTM2LjktMy4yLS43LTYuNS0xLTkuOC0xLjUtMi44LS4xLTUuNS0uMS04LjMtLjF6TTEyNC42IDEwN2MtLjEtLjcgLjEtMS4zIC40LTEuOXMuOC0xLjEgMS4zLTEuNGMxMy43LTkuNSAyOC44LTE0LjUgNDUuNi0xMy4yIDE0LjkgMS4xIDI3LjEgOC40IDMzLjUgMjUuOSAzLjkgMTAuNyA0LjkgMjEuOCA0LjkgMzMgMCAxMC40LS44IDIwLjYtNCAzMC42LTYuOCAyMS4zLTIyLjQgMjkuNC00Mi42IDI4LjUtMTQtLjYtMjYuMi02LTM3LjQtMTMuOS0uNi0uMy0xLS44LTEuMy0xLjRzLS40LTEuMi0uNC0xLjljLjEtMTQuMSAwLTI4LjEgMC00Mi4ycy4xLTI4IDAtNDIuMXpNMzMwLjMgNjUuMWMtMSAuMS0yIC4zLTIuOSAuNC05LjcgLjQtMTkuNCAxLjgtMjguOSA0LjEtNi4xIDEuNi0xMiAzLjgtMTcuOSA1LjgtMy42IDEuMi01LjQgMy44LTUuMyA3LjcgLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA0LjggMi4xIDYuMSA2LjggNC45IDcuOC0yIDE1LjYtNC4yIDIzLjUtNS43IDEyLjMtMi4zIDI0LjctMy4zIDM3LjItMS40IDYuNSAxIDEyLjYgMi45IDE2LjggOC40IDMuNyA0LjggNS4xIDEwLjUgNS4zIDE2LjQgLjMgOC4zIC4yIDE2LjYgLjMgMjQuOSAwIC41LS4xIC45LS4yIDEuNC0uNS0uMS0uOSAwLTEuMy0uMS0xMC41LTIuNi0yMS4yLTQuMi0zMi00LjktMTEuMy0uNi0yMi41IC4xLTMzLjMgMy45LTEyLjkgNC41LTIzLjMgMTIuMy0yOS40IDI0LjktNC43IDkuOC01LjQgMjAuMi0zLjkgMzAuNyAyIDE0IDkgMjQuOCAyMS40IDMxLjcgMTEuOSA2LjYgMjQuOCA3LjQgMzcuOSA1LjQgMTUuMS0yLjMgMjguNS04LjcgNDAuMy0xOC40IC41LS40IDEtLjggMS42LTEuMSAuNiAzLjggMS4xIDcuNCAxLjggMTEgLjYgMy4xIDIuNSA1LjEgNS40IDUuMiA1LjQgLjEgMTAuOSAuMSAxNi4zIDAgMS4zIDAgMi41LS41IDMuNC0xLjRzMS40LTIuMSAxLjUtMy4zYy4xLS45IC4xLTEuOSAuMS0yLjhsMC0xMDZjMC00LjMtLjMtOC42LS45LTEyLjktMS45LTEyLjktNy40LTIzLjUtMTktMzAuNC02LjctNC0xNC4xLTYtMjEuOC03LjEtMy42LS41LTcuMi0uOC0xMC44LTEuMy0zLjkgLjEtNy45IC4xLTExLjkgLjF6bTM1IDEyNy43YzAgLjYtLjEgMS4yLS4zIDEuN3MtLjcgMS0xLjIgMS4zYy0xMS4yIDguMS0yMy41IDEzLjUtMzcuNCAxNC45LTUuNyAuNi0xMS40IC40LTE2LjgtMS44LTMtMS4xLTUuNi0yLjktNy44LTUuMnMtMy43LTUuMS00LjYtOC4xYy0yLTYuMy0yLTEzLjEtLjEtMTkuNCAyLjUtOC4zIDguNC0xMyAxNi40LTE1LjYgOC0yLjQgMTYuNS0zLjIgMjQuOC0yLjIgOC40IC43IDE2LjYgMi4zIDI1IDMuNCAxLjYgLjIgMi4xIDEgMi4xIDIuNi0uMSA0LjggMCA5LjUgMCAxNC4zcy0uMiA5LjQtLjEgMTQuMXpNNjI1LjIgMzIyLjJjLTEtNS00LjgtNi45LTkuMS04LjMtNi44LTIuMS0xMy45LTMuNS0yMS0zLjktMTMuMS0xLjEtMjYuMy0uNS0zOS4yIDEuOS0xNC4zIDIuNy0yNy45IDcuMy00MCAxNS42LTEuNCAuOS0yLjcgMi4xLTMuNyAzLjUtLjQgLjYtLjYgMS4zLS43IDEuOXMwIDEuNCAuMiAyLjFjLjQgMS41IDIuMSAxLjkgMy42IDEuOCAuNyAwIDEuNSAwIDIuMi0uMSA3LjgtLjggMTUuNS0xLjcgMjMuMy0yLjUgMTEuNC0xLjEgMjIuOS0xLjggMzQuMy0uOSA0LjkgLjQgOS43IDEuMyAxNC40IDIuNyA1LjEgMS40IDcuNCA1LjIgNy42IDEwLjQgLjQgOC0xLjQgMTUuNy0zLjUgMjMuMy00LjEgMTUuNC0xMCAzMC4zLTE1LjggNDUuMS0uNCAxLS44IDItMSAzLS41IDIuOSAxLjIgNC44IDQuMSA0LjEgMS44LS40IDMuNC0xLjMgNC44LTIuNSA0LjUtNC4yIDguOC04LjcgMTIuNy0xMy40IDEyLjgtMTYuNCAyMC4zLTM1LjMgMjQuNy01NS42IC44LTMuNiAxLjQtNy4zIDIuMS0xMC45bDAtMTcuM3pNNDkzLjEgMTk5Yy0xMi45LTM1LjctMjUuOC03MS40LTM4LjctMTA3LjItMi01LjctNC4yLTExLjMtNi4zLTE2LjktMS4xLTIuOS0zLjItNC44LTYuNC00LjgtNy42LS4xLTE1LjItLjItMjIuOS0uMS0yLjUgMC0zLjcgMi0zLjIgNC41IC41IDIuMSAxLjEgNC4xIDEuOSA2LjEgMTkuNiA0OC41IDM5LjMgOTcgNTkuMSAxNDUuNSAxLjcgNC4xIDIuMSA3LjYgLjIgMTEuOC0zLjMgNy4zLTUuOSAxNS05LjMgMjIuMy0zIDYuNS04IDExLjQtMTUuMiAxMy4zLTUgMS4zLTEwLjIgMS43LTE1LjQgMS4xLTIuNS0uMi01LS44LTcuNS0xLTMuNC0uMi01LjEgMS4zLTUuMiA0LjgtLjEgMy4zLS4xIDYuNiAwIDkuOSAuMSA1LjUgMiA4IDcuNCA4LjkgNS42IDEuMSAxMS4yIDEuOCAxNi45IDIgMTcuMSAuNCAzMC43LTYuNSAzOS41LTIxLjQgMy41LTUuOSA2LjYtMTIgOS4yLTE4LjQgMjMuNy01OS44IDQ3LjItMTE5LjcgNzAuNi0xNzkuNiAuNy0xLjggMS4zLTMuNiAxLjYtNS41IC40LTIuOC0uOS00LjQtMy43LTQuNC02LjYtLjEtMTMuMyAwLTE5LjkgMC0xLjctLjEtMy40IC4zLTQuNyAxLjNzLTIuNCAyLjMtMyAzLjljLS41IDEuNC0xLjEgMi43LTEuNiA0LjFsLTM0LjggMTAwYy0yLjUgNy4yLTUuMSAxNC41LTcuNyAyMi4yLS40LTEuMS0uNi0xLjctLjktMi40eiJdCiAgICB9OwogICAgZmFQYW5kb3JhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhbmRvcmEiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTdkYSIsICJNMjAxLjMgMzJMMCAzMiAwIDQ4MCAxMjAuMiA0ODBjMTEuMiAwIDIwLjMtOS4xIDIwLjMtMjAuM2wwLTg2LjEgMzAuMSAwYzE0Ny4xIDAgMjA3LjMtODIuOSAyMDcuMy0xNzkuOSAwLTExOS43LTkwLjktMTYxLjgtMTc2LjUtMTYxLjh6Il0KICAgIH07CiAgICBmYU9wZW5pZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuaWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE5YiIsICJNMjcxLjUgNDMybC02OCAzMkM4OC41IDQ1My43IDAgMzkyLjUgMCAzMTguMiAwIDI0Ni43IDgyLjUgMTg3LjIgMTkxLjcgMTczLjlsMCA0M2MtNzEuNSAxMi41LTEyNCA1My0xMjQgMTAxLjMgMCA1MSA1OC41IDkzLjMgMTM1LjcgMTAzbDAtMzQwIDY4LTMzLjIgMCAzODQgLjEgMHpNNDQ4IDI5MWwtMTMxLjMtMjguNSAzNi44LTIwLjdjLTE5LjUtMTEuNS00My41LTIwLTcwLTI0LjhsMC00M2M0Ni4yIDUuNSA4Ny43IDE5LjUgMTIwLjMgMzkuM2wzNS0xOS44IDkuMiA5Ny41eiJdCiAgICB9OwogICAgZmFWc2NvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZzY28iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdkZCIsICJNMzU3LjYgMjU2YzAtMjcuMS0xMC42LTUyLjUtMjkuNy03MS43cy00NC42LTI5LjctNzEuNy0yOS43bC0uMSAwYy0yNy4xIDAtNTIuNiAxMC42LTcxLjcgMjkuN3MtMjkuNyA0NC42LTI5LjcgNzEuN2MwIDI3LjEgMTAuNiA1Mi41IDI5LjcgNzEuNyAxOS4yIDE5LjIgNDQuNiAyOS43IDcxLjcgMjkuN2wuMSAwYzI3LjEgMCA1Mi42LTEwLjYgNzEuNy0yOS43IDE5LjItMTkuMiAyOS43LTQ0LjYgMjkuNy03MS43ek0xNzYuMyA0ODIuMWMyMyA4LjEgNDcgMTIuNiA3MS42IDEzLjRsMC01OS4xYy0xNy4xLS43LTMzLjUtMy44LTQ5LTguOWwtMjIuNiA1NC42em0xMzctNTQuNmMtMTUuNSA1LjEtMzIgOC4yLTQ5IDguOWwwIDU5LjFjMjQuNi0uOCA0OC42LTUuMyA3MS42LTEzLjRsLTIyLjYtNTQuNnpNOTIuNSA0MzEuMmMyMC4yIDE4LjkgNDMuMyAzNCA2OC43IDQ1bDIyLjUtNTQuNWMtMTguMy03LjktMzUuMS0xOC44LTQ5LjgtMzEuOUw5Mi41IDQzMS4yem0yODUuOS00MS40Yy0xNC42IDEzLjItMzEuNCAyNC00OS44IDMxLjlsMjIuNSA1NC41YzI1LjQtMTEgNDguNC0yNi4xIDY4LjctNDVsLTQxLjQtNDEuNHpNMTQ1LjQgMzc4LjJjMTMuNiAxMi4xIDI5IDIxLjkgNDUuOCAyOSAxOCA3LjYgMzcuMSAxMiA1Ni43IDEyLjlsMC00Ni44Yy0yNi40LTEuOC01MC4zLTEyLjMtNjkuMS0yOC42bC0zMy40IDMzLjR6bTE4OC0zMy40Yy0xOC44IDE2LjMtNDIuNyAyNi44LTY5LjEgMjguNmwwIDQ2LjhjMTkuNi0uOSAzOC43LTUuMyA1Ni43LTEyLjkgMTYuOC03LjEgMzIuMi0xNi45IDQ1LjgtMjlsLTMzLjQtMzMuNHpNMzguNSAzNTYuNmMxMC43IDIzLjIgMjUgNDQuMyA0Mi41IDYzLjFsNDEuMy00MS4zYy0xMi40LTEzLjQtMjIuOS0yOC42LTMwLjktNDUuMkwzOC41IDM1Ni42em0zODIuNC0yMy41Yy04IDE2LjYtMTguNSAzMS45LTMwLjkgNDUuMmw0MS4zIDQxLjNjMTcuNS0xOC43IDMxLjgtMzkuOSA0Mi41LTYzLjFsLTUyLjktMjMuNXptLTMzMS02OWMxLjEgMTguOCA1LjQgMzcuMiAxMi44IDU0LjUgNy41IDE3LjggMTggMzQgMzEuMiA0OC4ybDMzLjUtMzMuNWMtMTYuNC0xOC44LTI2LjktNDIuOC0yOC43LTY5LjJsLTQ4LjggMHptMjgzLjcgMGMtMS44IDI2LjQtMTIuMyA1MC40LTI4LjcgNjkuMmwzMy41IDMzLjVjMTMuMS0xNC4yIDIzLjYtMzAuNCAzMS4yLTQ4LjIgNy4zLTE3LjQgMTEuNi0zNS43IDEyLjctNTQuNWwtNDguNyAwem0tMzU3LjEgMGMuOSAyNi43IDYuMSA1Mi43IDE1LjYgNzcuNUw4NSAzMTguMmMtNi40LTE3LTEwLjMtMzUuMS0xMS4zLTU0bC01Ny4xIDB6bTQyMi4xIDBjLTEgMTguOS01IDM3LjEtMTEuMyA1NGw1Mi44IDIzLjVjOS41LTI0LjggMTQuNy01MC44IDE1LjYtNzcuNWwtNTcuMSAwek0zMi4xIDE3MC40Yy05LjUgMjQuOC0xNC43IDUwLjgtMTUuNiA3Ny41bDU3LjEgMGMxLTE4LjkgNS0zNy4xIDExLjMtNTRMMzIuMSAxNzAuNHptMTAxLjctMjUuMmMtMTMuMSAxNC4yLTIzLjYgMzAuNC0zMS4yIDQ4LjItNy4zIDE3LjQtMTEuNiAzNS43LTEyLjggNTQuNWw0OC44IDBjMS44LTI2LjQgMTIuMy01MC40IDI4LjctNjkuMmwtMzMuNS0zMy41em0yMTEuMSAzMy41YzE2LjQgMTguOCAyNi45IDQyLjggMjguNyA2OS4ybDQ4LjcgMGMtMS4xLTE4LjgtNS40LTM3LjItMTIuNy01NC41LTcuNS0xNy44LTE4LTM0LTMxLjItNDguMmwtMzMuNSAzMy41em04Mi40IDE1LjJjNi40IDE3IDEwLjMgMzUuMSAxMS4zIDU0bDU3LjEgMGMtLjktMjYuNy02LjEtNTIuNy0xNS42LTc3LjVsLTUyLjggMjMuNXpNODEgOTIuM0M2My40IDExMSA0OS4yIDEzMi4yIDM4LjUgMTU1LjRsNTIuOSAyMy41YzgtMTYuNiAxOC41LTMxLjkgMzAuOS00NS4yTDgxIDkyLjN6bTMwOSA0MS4zYzEyLjQgMTMuNCAyMi45IDI4LjYgMzAuOSA0NS4ybDUyLjktMjMuNWMtMTAuNy0yMy4yLTI1LTQ0LjMtNDIuNS02My4xTDM5MCAxMzMuN3pNMjQ4IDkxLjhjLTE5LjYgLjktMzguNyA1LjMtNTYuNyAxMi45LTE2LjggNy4xLTMyLjIgMTYuOS00NS44IDI5bDMzLjQgMzMuNGMxOC44LTE2LjMgNDIuNy0yNi44IDY5LjEtMjguNmwwLTQ2Ljd6bTE2LjMgNDYuN2MyNi40IDEuOCA1MC4zIDEyLjMgNjkuMSAyOC42bDMzLjQtMzMuNGMtMTMuNi0xMi4xLTI5LTIxLjktNDUuOC0yOS0xOC03LjYtMzcuMS0xMi01Ni43LTEyLjlsMCA0Ni43ek0xNjEuMiAzNS44Yy0yNS40IDExLTQ4LjQgMjYuMS02OC43IDQ1bDQxLjQgNDEuNGMxNC43LTEzLjIgMzEuNC0yNCA0OS44LTMxLjlMMTYxLjIgMzUuOHpNMzI4LjYgOTAuM2MxOC4zIDcuOSAzNS4xIDE4LjggNDkuOCAzMS45bDQxLjQtNDEuNGMtMjAuMi0xOC45LTQzLjMtMzQtNjguNy00NUwzMjguNiA5MC4zek0yNDggMTYuNGMtMjQuNiAuOC00OC42IDUuMy03MS42IDEzLjRsMjIuNiA1NC42YzE1LjUtNS4xIDMyLTguMiA0OS04LjlsMC01OS4xem0xNi4zIDU5LjFjMTcuMSAuNyAzMy41IDMuOCA0OSA4LjlsMjIuNi01NC42Yy0yMy04LjEtNDctMTIuNi03MS42LTEzLjRsMCA1OS4xek01MTIuMiAyNjQuMmwtLjIgMEM1MDcuOCAzOTkgMzk5LjIgNTA3LjcgMjY0LjMgNTExLjlsMCAuMS0xNi4zIDAgMC0uMUMxMTMuMSA1MDcuNyA0LjUgMzk5IC4yIDI2NC4xbC0uMiAwIDAtMTYuMyAuMiAwQzQuNSAxMTMgMTEzLjEgNC4zIDI0OCAuMWwwLS4xIDE2LjMgMCAwIC4xQzM5OS4yIDQuMyA1MDcuOCAxMTMgNTEyIDI0Ny45bC4yIDAgMCAxNi4zeiJdCiAgICB9OwogICAgZmFVYnVudHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidWJ1bnR1IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3ZGYiLCAiTTQ2OS4yIDc1YzAtMjAuMS04LTM5LjMtMjIuMi01My41cy0zMy40LTIyLjItNTMuNS0yMi4yLTM5LjMgOC01My41IDIyLjItMjIuMiAzMy40LTIyLjIgNTMuNWMwIDIwLjEgOCAzOS4zIDIyLjEgNTMuNXMzMy40IDIyLjEgNTMuNSAyMi4xIDM5LjMtOCA1My41LTIyLjEgMjIuMS0zMy40IDIyLjEtNTMuNWwuMSAwem0tMzE1IDE2NS43YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNTcgMzQ2YzE4LjYgNDYuOSA1MSA4NyA5MyAxMTUuMXM5MS41IDQyLjYgMTQyIDQxLjdjLTE0LjctMTguNi0yMi45LTQxLjUtMjMuMi02NS4yLTYuOC0uOS0xMy4zLTIuMS0xOS41LTMuNC0yNi44LTUuNy01MS45LTE3LjMtNzMuNi0zNHMtMzkuMy0zOC4xLTUxLjctNjIuNWMtMjAuOSA5LjktNDQuNSAxMi44LTY3LjEgOC4ybC4xIC4xem0zOTUuMSA4OS44YTc1LjYgNzUuNiAwIDEgMCAtMTUxLjIgMCA3NS42IDc1LjYgMCAxIDAgMTUxLjIgMHpNNDQ0IDM1MS42YzE4LjUgMTQuOCAzMS42IDM1LjIgMzcuMiA1OC4yIDMzLjMtNDEuMyA1Mi42LTkyLjIgNTQuOC0xNDUuMnMtMTIuNS0xMDUuNC00Mi4yLTE0OS40Yy04LjYgMjEuNS0yNCAzOS42LTQzLjggNTEuNiAxNS40IDI4LjYgMjIuOSA2MC44IDIxLjkgOTMuMnMtMTAuNyA2NC0yOCA5MS42bC4xIDB6TTEwMS4xIDEzNS40YzEyLjQgMi43IDI0LjMgNy41IDM1LjEgMTQuMyAxNi42LTI0LjIgMzguOS00NC4xIDY0LjgtNThTMjU1LjggNzAuNCAyODUuMiA3MGMuMi01LjkgLjktMTEuOSAyLTE3LjcgMy42LTE2LjcgMTEuMS0zMi4zIDIxLjgtNDUuNS00Ny43LTMuOC05NS40IDYtMTM3LjYgMjguNVM5NC4zIDkxLjcgNzAuOCAxMzMuNGMyLjctLjIgNS4zLS4zIDgtLjMgNy41IDAgMTUgLjggMjIuNCAyLjNsLS4xIDB6Il0KICAgIH07CiAgICBmYVZpYWNvaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmlhY29pbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjM3IiwgIk0zODQgMzJsLTY0IDAtODAuNyAxOTItOTQuNSAwLTgwLjgtMTkyLTY0IDAgNDggMTEyLTQ4IDAgMCA0OCA2OC41IDAgMTMuOCAzMi04Mi4zIDAgMCA0OCAxMDIuOCAwIDg5LjIgMjA4IDg5LjItMjA4IDEwMi44IDAgMC00OC04Mi4zIDAgMTMuOC0zMiA2OC41IDAgMC00OC00OCAwIDQ4LTExMnpNMTkyIDMzNmwtMjctNjQgNTQgMC0yNyA2NHoiXQogICAgfTsKICAgIGZhWmhpaHUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiemhpaHUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjYzZiIsICJNMTcwLjUgMTQ4LjFsMCAyMTcuNSAyMy40IDAgNy43IDI2LjQgNDItMjYuNCA0OS41IDAgMC0yMTcuNS0xMjIuNyAwem05Ny44IDE5My45bC0yNy45IDAtMjcuOSAxNy41LTUuMS0xNy41LTExLjkgMCAwLTE3MC4zIDcyLjggMCAwIDE3MC4zek0xNDkuOCAyNDcuN2wtNTIuMyAwYzEuNy0yNy4xIDIuMi01MS42IDIuMi03My41bDUxLjIgMHMyLTIyLjYtOC42LTIyLjNsLTg4LjUgMGMzLjUtMTMuMSA3LjktMjYuNyAxMy4xLTQwLjcgMCAwLTI0LjEgMC0zMi4zIDIxLjYtMy40IDguOS0xMy4yIDQzLjEtMzAuNyA3OC4xIDUuOS0uNiAyNS40LTEuMiAzNi44LTIyLjIgMi4xLTUuOSAyLjUtNi43IDUuMS0xNC41bDI4LjkgMGMwIDEwLjUtMS4yIDY2LjktMS43IDczLjRsLTUyLjMgMGMtMTEuNyAwLTE1LjYgMjMuNi0xNS42IDIzLjZsNjUuNiAwYy00LjQgNDkuOS0yOCA5MS45LTcwLjggMTI1LjEgMjAuNSA1LjkgNDAuOS0uOSA1MS05LjkgMCAwIDIzLTIwLjkgMzUuNi02OS4zbDU0IDY0LjlzNy45LTI2LjktMS4yLTQwYy03LjYtOC45LTI4LjEtMzMuMS0zNi44LTQxLjhMODcuOSAzMTJjNC40LTE0IDctMjcuNiA3LjktNDAuN2w2MS42IDBzLS4xLTIzLjYtNy42LTIzLjZsMCAwem00MTItMS42YzIwLjgtMjUuNiA0NS01OC42IDQ1LTU4LjZzLTE4LjYtMTQuOC0yNy40LTQuMWMtNiA4LjItMzYuOCA0OC4yLTM2LjggNDguMmwxOS4yIDE0LjR6TTQxMS44IDE4N2MtOS04LjItMjUuOSAyLjEtMjUuOSAyLjFzMzkuNSA1NSA0MS4xIDU3LjRsMTkuNS0xMy43cy0yNS43LTM3LjYtMzQuNy00NS45bDAgMCAwIDB6TTY0MCAyNTguNGMtMTkuOCAwLTEzMC45IC45LTEzMS4xIC45bDAtMTAxYzQuOCAwIDEyLjQtLjQgMjIuOC0xLjIgNDAuOS0yLjQgNzAuMS00IDg3LjgtNC44IDAgMCAxMi4yLTI3LjItLjYtMzMuNC0zLjEtMS4yLTIzLjIgNC42LTIzLjIgNC42cy0xNjUuMiAxNi41LTIzMi40IDE4YzEuNiA4LjggNy42IDE3LjEgMTUuOCAxOS42IDEzLjMgMy41IDIyLjcgMS43IDQ5LjIgLjkgMjQuOC0xLjYgNDMuNy0yLjQgNTYuNS0yLjRsMCA5OS44LTEzMy41IDBzMi44IDIyLjMgMjUuNSAyMi45bDEwNy45IDAgMCA3MC45YzAgMTQtMTEuMiAyMi0yNC41IDIxLjEtMTQuMSAuMS0yNi4xLTEuMS00MS43LTEuOCAyIDQgNi4zIDE0LjQgMTkuMyAyMS44IDkuOSA0LjggMTYuMiA2LjYgMjYgNi42IDI5LjYgMCA0NS43LTE3LjMgNDQuOS00NS4zbDAtNzMuMyAxMjIuNCAwYzkuNyAwIDguNy0yMy44IDguNy0yMy44bDAgMHoiXQogICAgfTsKICAgIGZhWWFuZGV4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbmRleCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNDEzIiwgIk0xNTMuMSAzMTUuOEw2NS43IDUxMiAyIDUxMiA5OCAzMDIuMkM1Mi45IDI3OS4zIDIyLjggMjM3LjggMjIuOCAxNjEuMSAyMi43IDUzLjcgOTAuOCAwIDE3MS43IDBsODIuMyAwIDAgNTEyLTU1LjEgMCAwLTE5Ni4yLTQ1LjggMHpNMTk4LjkgNDYuNWwtMjkuNCAwYy00NC40IDAtODcuNCAyOS40LTg3LjQgMTE0LjYgMCA4Mi4zIDM5LjQgMTA4LjggODcuNCAxMDguOGwyOS40IDAgMC0yMjMuNHoiXQogICAgfTsKICAgIGZhUGl4aXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGl4aXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY0MCIsICJNOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDI1NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05Nkw5NiAzMnptNzcuNyAyMTcuM2E2MC4xIDYwLjEgMCAxIDAgMTIwLjMgMCA2MC4xIDYwLjEgMCAxIDAgLTEyMC4zIDB6TTExOS4xIDM4Ny44Yy0uMy0uOC0uNS0xLjctLjUtMi42bDAtMjQ0LjNjMC0xLjggLjctMy42IDItNC45czMtMiA0LjktMmwxNi45IDBjMS4yIDAgMi4zIC4zIDMuMyAuOHMxLjkgMS4zIDIuNSAyLjNsMTQgMjEuOGMxOS43LTE1LjYgNDQuNS0yNSA3MS42LTI1IDYzLjYgMCAxMTUuMiA1MS42IDExNS4yIDExNS4yUzI5Ny41IDM2NC41IDIzMy44IDM2NC41Yy0yMiAwLTQyLjYtNi4yLTYwLjEtMTYuOWwwIDM3LjZjMCAuOS0uMiAxLjgtLjUgMi42cy0uOSAxLjYtMS41IDIuMi0xLjQgMS4xLTIuMiAxLjUtMS43IC41LTIuNiAuNWwtNDEuMyAwYy0uOSAwLTEuOC0uMi0yLjYtLjVzLTEuNi0uOS0yLjItMS41LTEuMS0xLjQtMS41LTIuMnoiXQogICAgfTsKICAgIGZhT3BlbmFpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9wZW5haSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlN2NmIiwgIk0xOTYuNCAxODUuOGwwLTQ4LjZjMC00LjEgMS41LTcuMiA1LjEtOS4ybDk3LjgtNTYuM2MxMy4zLTcuNyAyOS4yLTExLjMgNDUuNi0xMS4zIDYxLjQgMCAxMDAuNCA0Ny42IDEwMC40IDk4LjMgMCAzLjYgMCA3LjctLjUgMTEuOEwzNDMuMyAxMTEuMWMtNi4xLTMuNi0xMi4zLTMuNi0xOC40IDBMMTk2LjQgMTg1Ljh6TTQyNC43IDM3NS4ybDAtMTE2LjJjMC03LjItMy4xLTEyLjMtOS4yLTE1LjlMMjg3IDE2OC40IDMyOSAxNDQuM2MzLjYtMiA2LjctMiAxMC4yIDBMNDM3IDIwMC43YzI4LjIgMTYuNCA0Ny4xIDUxLjIgNDcuMSA4NSAwIDM4LjktMjMgNzQuOC01OS40IDg5LjZsMCAwek0xNjYuMiAyNzIuOGwtNDItMjQuNmMtMy42LTItNS4xLTUuMS01LjEtOS4ybDAtMTEyLjZjMC01NC44IDQyLTk2LjMgOTguOC05Ni4zIDIxLjUgMCA0MS41IDcuMiA1OC40IDIwTDE3NS40IDEwOC41Yy02LjEgMy42LTkuMiA4LjctOS4yIDE1LjlsMCAxNDguNSAwIDB6bTkwLjQgNTIuMmwtNjAuMi0zMy44IDAtNzEuNyA2MC4yLTMzLjggNjAuMiAzMy44IDAgNzEuNy02MC4yIDMzLjh6bTM4LjcgMTU1LjdjLTIxLjUgMC00MS41LTcuMi01OC40LTIwbDEwMC45LTU4LjRjNi4xLTMuNiA5LjItOC43IDkuMi0xNS45bDAtMTQ4LjUgNDIuNSAyNC42YzMuNiAyIDUuMSA1LjEgNS4xIDkuMmwwIDExMi42YzAgNTQuOC00Mi41IDk2LjMtOTkuMyA5Ni4zbDAgMHpNMTczLjggMzY2LjVMNzYuMSAzMTAuMmMtMjguMi0xNi40LTQ3LjEtNTEuMi00Ny4xLTg1IDAtMzkuNCAyMy42LTc0LjggNTkuOS04OS42bDAgMTE2LjdjMCA3LjIgMy4xIDEyLjMgOS4yIDE1LjlsMTI4IDc0LjItNDIgMjQuMWMtMy42IDItNi43IDItMTAuMiAwem0tNS42IDg0Yy01Ny45IDAtMTAwLjQtNDMuNS0xMDAuNC05Ny4zIDAtNC4xIC41LTguMiAxLTEyLjNsMTAwLjkgNTguNGM2LjEgMy42IDEyLjMgMy42IDE4LjQgMGwxMjguNS03NC4yIDAgNDguNmMwIDQuMS0xLjUgNy4yLTUuMSA5LjJsLTk3LjggNTYuM2MtMTMuMyA3LjctMjkuMiAxMS4zLTQ1LjYgMTEuM2wwIDB6bTEyNyA2MC45YzYyIDAgMTEzLjctNDQgMTI1LjQtMTAyLjQgNTcuMy0xNC45IDk0LjItNjguNiA5NC4yLTEyMy40IDAtMzUuOC0xNS40LTcwLjctNDMtOTUuNyAyLjYtMTAuOCA0LjEtMjEuNSA0LjEtMzIuMyAwLTczLjItNTkuNC0xMjgtMTI4LTEyOC0xMy44IDAtMjcuMSAyLTQwLjQgNi43LTIzLTIyLjUtNTQuOC0zNi45LTg5LjYtMzYuOS02MiAwLTExMy43IDQ0LTEyNS40IDEwMi40LTU3LjMgMTQuOC05NC4yIDY4LjYtOTQuMiAxMjMuNCAwIDM1LjggMTUuNCA3MC43IDQzIDk1LjctMi42IDEwLjgtNC4xIDIxLjUtNC4xIDMyLjMgMCA3My4yIDU5LjQgMTI4IDEyOCAxMjggMTMuOCAwIDI3LjEtMiA0MC40LTYuNyAyMyAyMi41IDU0LjggMzYuOSA4OS42IDM2Ljl6Il0KICAgIH07CiAgICBmYVNpdGggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2l0aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTEyIiwgIk0wIDMybDY5LjcgMTE4LjgtNTguOS0xMS41IDY5LjggOTFjLTMgMTctMyAzNC40IDAgNTEuNGwtNjkuOCA5MSA1OC45LTExLjUtNjkuNyAxMTguOCAxMTguOC02OS43LTExLjUgNTguOSA5MS02OS44YzE3IDMgMzQuNSAzIDUxLjUgMGw5MSA2OS44LTExLjUtNTguOSAxMTguNyA2OS43LTY5LjctMTE4LjggNTguOSAxMS41LTY5LjgtOTFjMy0xNyAzLTM0LjQgMC01MS40bDY5LjgtOTEtNTguOSAxMS41IDY5LjctMTE4LjgtMTE4LjcgNjkuNyAxMS41LTU4LjktOTEuMSA2OS45Yy04LjUtMS41LTE3LjEtMi4zLTI1LjctMi4zcy0xNy4yIC44LTI1LjcgMi4zTDEwNy4yIDQyLjggMTE4LjggMTAxLjcgMCAzMnpNMjI0IDM4MC4yYTEyNC4yIDEyNC4yIDAgMSAxIDAtMjQ4LjQgMTI0LjIgMTI0LjIgMCAxIDEgMCAyNDguNHptMC0yMTEuOGE4Ny42IDg3LjYgMCAxIDAgMCAxNzUuMSA4Ny42IDg3LjYgMCAxIDAgMC0xNzUuMXoiXQogICAgfTsKICAgIGZhTmZjRGlyZWN0aW9uYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmZjLWRpcmVjdGlvbmFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MzAiLCAiTTIxMS44IDQ4OC42YzEuNiAyLjUgMi4xIDUuNiAxLjQgOC41LS42IDIuOS0yLjQgNS41LTQuOSA3LjEtMi42IDEuNi01LjYgMi4xLTguNiAxLjUtNjEuNC0xMy45LTExNS42LTQ5LjktMTUyLjItMTAxLjJTLTUuNCAyOTAuMyAxLjYgMjI3LjdjNy02Mi43IDM2LjgtMTIwLjUgODMuNy0xNjIuNSA0Ni45LTQyIDEwNy43LTY1LjIgMTcwLjctNjUuMiAxLjUgMCAyLjEgLjMgNC4zIC45IDEuNCAuNiAxLjggMS40IDMuNyAyLjUgMS4xIDEuMSAxLjkgMi4zIDIuNSAzLjcgLjUgMS40IC44IDIuOCAuOCA0LjNsMCAxMDEgMjQuNS0yNS45YzEtMS4xIDIuMi0yIDMuNi0yLjYgMS4zLS42IDIuOC0uOSA0LjMtMSAxLjUtLjEgMi45IC4yIDQuMyAuN3MyLjcgMS4zIDMuOCAyLjRjMSAxIDEuOSAyLjIgMi41IDMuNiAuNiAxLjMgMSAyLjggMSA0LjNzLS4yIDMtLjcgNC4zYy0uNiAxLjQtMS40IDIuNi0yLjQgMy43bC00NCA0Ni42Yy0xLjEgMS4xLTIuMyAyLTMuNyAyLjYtMS41IC42LTMgLjktNS40IC45LS42IDAtMi4yLS4zLTMuNi0uOXMtMi43LTEuNS0zLjctMi42bC00NC4xLTQ2LjZjLTItMi4yLTMuMS01LjEtMy04LjEgMC0zIDEuMy02LjcgMy41LTcuOSAyLjItMi4xIDUuMS0zLjIgOC4xLTMuMSAzIC4xIDUuOCAxLjMgNy45IDMuNWwyNC41IDI2IDAtODkuNWMtNTYuNCAyLjgtMTA5LjggMjUuOC0xNTAuNSA2NS00MC42IDM5LjEtNjUuNyA5MS43LTcwLjYgMTQ3LjlTMzQuNCAzNDguMSA2Ny43IDM5My43YzMyLjQgNDUuNSA4MiA3Ny41IDEzNyA4OS45IDIuOSAuNyA1LjUgMi41IDcuMSA1ek0xNzEuNCAxMjYuMWMtLjggMS4zLTEuOSAyLjQtMy4xIDMuMi0yMC41IDEzLjktMzcuMiAzMi42LTQ4LjggNTQuNXMtMTcuNyA0Ni4zLTE3LjcgNzEuMSA2LjEgNDkuMiAxNy43IDcwLjJjMTEuNiAyMi44IDI4LjMgNDEuNSA0OC44IDU1LjQgMi41IDEuNyA0LjIgNC4zIDQuNyA3LjMgLjYgMi45LS45IDYtMS43IDguNC0xLjcgMi41LTUuMiA0LjItNy4zIDMuOS0yLjkgMS40LTYgLjgtOC40LS45LTIzLjYtMTYtNDIuOC0zNy41LTU2LjEtNjIuNy0xMy4zLTI1LjEtMjAuMy01My4xLTIwLjMtODEuNiAwLTI4LjQgNy01Ni41IDIwLjMtODEuNiAxMy4zLTI1LjIgMzIuNS00Ni43IDU2LjEtNjIuNyAxLjItLjggMi42LTEuNCA0LTEuOCAxLjUtLjMgMy0uMyA0LjUgMCAxLjQgLjIgMi44IC44IDQuMSAxLjZzMi4zIDEuOSAzLjIgMy4xYy44IDEuMiAxLjQgMi42IDEuNyA0LjFzLjMgMyAwIDQuNGMtLjMgMS41LS44IDIuOS0xLjcgNC4xek0zNDAuOSAzODMuNWMuOC0xLjIgMS45LTIuMyAyLjItMy4xbDAtLjFjMjEuMy0xNCAzOC0zMi43IDQ5LjYtNTQuNiAxMS41LTIxLjggMTcuNS00Ni4yIDE3LjUtNzAuOXMtNi00OS4xLTE3LjUtNzFjLTExLjYtMjIuNy0yOC4zLTQwLjUtNDkuNi01NC41LS4zLS44LTEuNC0xLjktMi4yLTMuMS0uOC0xLjMtMS40LTIuNy0xLjYtNC4xLTEuMi0xLjUtLjMtMyAwLTQuNCAuMy0xLjUgLjktMi45IDEuNy00LjEgLjktMS4yIDEuMS0yLjMgMy4yLTMuMSAxLjItLjggMi42LTEuMyA0LjEtMS42czIuOS0uMyA0LjQgMCAyLjggLjkgNC4xIDEuOGMyMy40IDE2IDQyLjcgMzcuNSA1NS45IDYyLjYgMTMuMyAyNS4xIDE5LjQgNTMuMSAxOS40IDgxLjUgMCAyOC41LTYuMSA1Ni41LTE5LjQgODEuNi0xMy4yIDI1LjEtMzIuNSA0Ni42LTU1LjkgNjIuNi0xLjMgLjktMi42IDEuNS00LjEgMS44cy0yLjkgLjMtNC40IDAtMi45LTEuNy00LjEtMS42Yy0yLjEtLjgtMi4zLTEuOS0zLjItMy4xLS44LTEuMi0xLjQtMi42LTEuNy00LjEtLjMtMS40LTEuMi0yLjkgMC00LjQgLjItMS40IC44LTIuOCAxLjYtNC4xek0zMTIuMyA2LjNjNTYuMiAxMi43IDEwNi40IDQ0IDE0Mi43IDg4LjcgMzAuNCAzNy42IDQ5LjYgODMgNTUuMyAxMzEgNS42IDQ4LTIuNCA5Ni43LTIzLjIgMTQwLjMtMjAuOSA0My42LTUzLjYgODAuNS05NC41IDEwNi4zLTQwLjkgMjUuNy04OC4yIDM5LjQtMTM2LjYgMzkuNC0xLjUgMC0yLjktLjMtNC4zLS45LTEuNC0uNS0yLjYtMS40LTMuNy0yLjQtMS45LTEuMS0xLjktMi4zLTIuNC0zLjctLjYtMS40LS45LTIuOC0uOS00LjNsMC05OS4yLTI0LjUgMjZjLTIuMSAyLjItNC45IDIuNi03LjkgMy42LTMgLjEtNS45LTEuMS04LjEtNC0yLjItMS4yLTMuNS00LTMuNS03LS4xLTMgMS01LjkgMy04LjFsNDQuMS00Ni42YzEuMy0yLjIgNS4xLTMuNCA3LjMtMy40IDQgMCA2LjkgMS4yIDkuMSAzLjRsNDQgNDYuNmMyLjEgMi4yIDMuMiA1LjEgMy4xIDguMXMtMS40IDUuOC0zLjUgN2MtMi4yIDIuOS01LjEgNC4xLTguMSA0LTMtMS01LjktMS40LTcuOS0zLjZsLTI0LjUtMjUuOSAwIDg3LjVjNTYuNC0yLjggMTA5LjgtMjUuOCAxNTAuNS02NSA0MC43LTQwIDY1LjgtOTEuNyA3MC43LTE0Ny45IDQuOC01Ny4xLTEwLjgtMTEyLjMtNDQuMS0xNTcuOS0zMy4zLTQ1LjYtODItNzcuNS0xMzctODkuOS0xLjUtLjMtMi44LS45LTQuMS0xLjgtMS4yLS45LTIuMi0xLjktMy0zLjItLjgtMS4yLTIuMi0yLjYtMS42LTQuMS0uMi0xLjUtLjItMyAuMS00LjQgLjQtMS40IDEtMi44IDEuOC00IC45LTEuMiAyLTIuMiAzLjItMyAxLjMtLjggMi43LTEuMyA0LjEtMS42IDEuNS0uMyAzLS4yIDQuNCAuMXptNDAuOCAyNDkuOGMwIDMxLjQtMTcuNSA2MS4xLTQ5LjMgODMuNS0yLjEgMS41LTQuOCAyLjMtNy40IDItMi43LS4yLTUuMi0xLjMtNy0zLjJsLTcwLjEtNjkuOGMtMi4yLTIuMS00LjItNS0zLjQtOCAwLTMgMS4yLTUuOSAzLjMtOCAyLjItMi4xIDUtMy4zIDgtMy4zczUuOSAxLjIgOCAzLjNsNjMuMSA2Mi44YzIwLjgtMTcuMSAzMi4yLTM3LjkgMzIuMi01OS4zIDAtMjMuOS0xNC4xLTQ3LTM5LjctNjUuMS0yLjUtMS43LTQuMS00LjMtNC42LTcuMy0uNS0yLjkgLjEtNiAxLjktOC40IDEuNy0yLjUgNC4zLTQuMSA3LjMtNC42IDIuOS0uNSA2IC4xIDguNCAxLjkgMzEuOCAyMi40IDQ5LjMgNTIuMSA0OS4zIDgzLjV6TTIxNi43IDM0MS41Yy0zIC41LTYtLjItOC41LTEuOS0zMS43LTIyLjQtNTAuMS01Mi4xLTUwLjEtODMuNXMxOC40LTYxLjEgNTAuMS04My41YzIuMi0xLjYgNC45LTIuMyA3LjUtMi4xIDIuNyAuMyA1LjEgMS40IDcgMy4zbDcwLjEgNjkuOGMyLjEgMi4xIDMuMyA1IDMuMyA4cy0yIDUuOC0zLjMgOGMtMi4xIDIuMS01IDMuMy03LjkgMy4zLTMgMC02LjgtMS4yLTgtMy4zbC02My4xLTYyLjljLTIwLjkgMTcuMy0zMi4yIDM4LTMyLjIgNTkuNCAwIDIzIDE0LjEgNDcgMzkuNyA2NSAyLjQgMS44IDQuMSA0LjQgNC42IDcuNCAuNSAyLjktLjIgNS45LTEuOSA4LjQtMS43IDIuNC00LjQgNC4xLTcuMyA0LjZ6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc0J5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtYnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlNyIsICJNMzIyLjkgMTk0LjRsMCAxMDEuNC0yOC4zIDAgMCAxMjAuNS03Ny4xIDAgMC0xMjAuNC0yOC4zIDAgMC0xMDEuNWMwLTQuNCAxLjYtOC4yIDQuNi0xMS4zIDMuMS0zLjEgNi45LTQuNyAxMS4zLTQuN2wxMDEuOSAwYzQuMSAwIDcuOCAxLjYgMTEuMSA0LjcgMy4xIDMuMiA0LjggNi45IDQuOCAxMS4zem0tMzIuNS02NC41YTM0LjUgMzQuNSAwIDEgMSAtNjkgLjggMzQuNSAzNC41IDAgMSAxIDY5LS44ek0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6Il0KICAgIH07CiAgICBmYVVtYnJhY28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW1icmFjbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmOGU4IiwgIk0yNTYuMyA4YTI0OCAyNDggMCAxIDAgLS43IDQ5NiAyNDggMjQ4IDAgMSAwIC43LTQ5NnptMTQ1IDI2NmMtLjggMjcuMS01LjQgNDguOC0xNCA2NXMtMjMuMSAyNy45LTQzLjUgMzVjLTIwLjQgNy4xLTQ4LjkgMTAuNi04NS40IDEwLjVsLTQuNiAwYy0zNi41IC4xLTY1LTMuMy04NS40LTEwLjVzLTM0LjktMTguOC00My41LTM1Yy04LjYtMTYuMi0xMy4yLTM3LjktMTQtNjUtLjctMTAuMi0uNy0yMC41IDAtMzAuNyAuNC0xNC43IDEuNi0yOS4zIDMuNi00My45IDEuOS0xMy40IDMuNi0yMi42IDUuNC0zMiAxLTQuOSAxLjMtNi40IDEuOC04LjQgLjMtMS4xIC45LTIuMSAxLjgtMi44czItMS4xIDMuMS0xLjFsLjcgMCAzMiA1YzEuMiAuMiAyLjIgLjggMyAxLjdzMS4yIDIuMSAxLjIgMy4zYzAgLjMgMCAuNSAwIC44bC0xLjcgOC44Yy0xLjYgOC44LTMuMiAyMC4xLTQuOCAzMy43LTEuNyAxNC0yLjUgMjguMS0yLjYgNDIuMi0uMiAyNyAyLjUgNDYuOSA4LjEgNTkuOCAyLjggNi40IDcuMiAxMiAxMi42IDE2LjRzMTEuOSA3LjQgMTguNyA4LjhjMTguOCA0IDM4LjEgNS43IDU3LjMgNS4xbDEwLjMgMGMxOS4yIC42IDM4LjUtMS4yIDU3LjMtNS4yIDYuOC0xLjQgMTMuMi00LjUgMTguNi04LjhzOS43LTEwIDEyLjUtMTYuNGM1LjctMTIuOSA4LjQtMzIuOSA4LjEtNTkuOC0uMS0xNC4xLTEtMjguMi0yLjYtNDIuMS0xLjctMTMuNi0zLjMtMjQuOC00LjktMzMuN2wtMS43LTguOGMwLS4zIDAtLjUgMC0uOCAwLTEuMiAuNC0yLjQgMS4yLTMuM3MxLjgtMS41IDMtMS43bDMyLTUgLjggMGMxLjEgMCAyLjIgLjQgMy4xIDEuMXMxLjUgMS43IDEuOCAyLjhjLjYgMiAuOCAzLjYgMS44IDguNCAxLjggOS42IDMuNSAxOC44IDUuNCAzMiAyIDE0LjYgMy4yIDI5LjIgMy42IDQzLjkgLjcgMTAuMiAuNyAyMC41IDAgMzAuN2wwIDB6Il0KICAgIH07CiAgICBmYUhvb2xpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvb2xpIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MjciLCAiTTE0NC41IDM1MmwzOC4zIC44Yy0xMy4yLTQuNi0yNi0xMC4yLTM4LjMtMTYuOGwwIDE2em01Ny43LTUuM2wwIDUuMy0xOS40IC44YzM2LjUgMTIuNSA2OS45IDE0LjIgOTQuNyA3LjItMTkuOSAuMi00NS44LTIuNi03NS4zLTEzLjN6TTYxMS4xIDIzMS41YzE1LjkgMCAyOC45LTEyLjkgMjguOS0yOC45cy0xMi45LTI0LjUtMjguOS0yNC41Yy0xNS45IDAtMjguOSA4LjYtMjguOSAyNC41czEyLjkgMjguOSAyOC45IDI4Ljl6TTU4Mi4xIDM1Mmw1Ny45IDAgMC0xMTAuNS01Ny45IDAgMCAxMTAuNXptLTczLjcgMGw1Ny45IDAgMC0xOTUuMy01Ny45IDI3LjMgMCAxNjh6bS0zMS0xMTkuNGMtMTguMi0xOC4yLTUwLjQtMTcuMS01MC40LTE3LjFzLTMyLjMtMS4xLTUwLjQgMTcuMWMtMTguMiAxOC4yLTE2LjggMzMuOS0xNi44IDUyLjZzLTEuNCAzNC4zIDE2LjggNTIuNSA1MC40IDE3LjEgNTAuNCAxNy4xIDMyLjMgMS4xIDUwLjQtMTcuMWMxOC4yLTE4LjIgMTYuOC0zMy44IDE2LjgtNTIuNS0uMS0xOC44IDEuMy0zNC41LTE2LjgtNTIuNnptLTM5LjggNzEuOWMwIDMuNi0xLjggMTIuNS0xMC43IDEyLjVzLTEwLjctOC45LTEwLjctMTIuNWwwLTQwLjRjMC04LjcgNy4zLTEwLjkgMTAuNy0xMC45czEwLjcgMi4xIDEwLjcgMTAuOWwwIDQwLjR6TTMzMS40IDIzMi42Yy0xOC4yLTE4LjItNTAuNC0xNy4xLTUwLjQtMTcuMXMtMzIuMi0xLjEtNTAuNCAxNy4xYy0xLjkgMS45LTMuNyAzLjktNS4zIDYtMzguMi0yOS42LTcyLjUtNDYuNS0xMDIuMS02MS4xbDAtMjAuNy0yMi41IDEwLjZjLTU0LjQtMjIuMS04OS0xOC4yLTk3LjMgLjEgMCAwLTI0LjkgMzIuOCA2MS44IDExMC44bDAgNzMuNyA1Ny45IDAgMC0yOC42Yy02LjUtNC4yLTEzLTguNy0xOS40LTEzLjYtMTQuOC0xMS4yLTI3LjQtMjEuNi0zOC40LTMxLjRsMC0zMWMxMy4xIDE0LjcgMzAuNSAzMS40IDUzLjQgNTAuM2w0LjUgMy42IDAtMjkuOGMwLTYuOSAxLjctMTguMiAxMC44LTE4LjJzMTAuNiA2LjkgMTAuNiAxNWwwIDQ4LjdjMTggMTIuMiAzNy4zIDIyLjEgNTcuNyAyOS42bDAtOTMuOWMwLTE4LjctMTMuNC0zNy40LTQwLjYtMzcuNC0xNS44LS4xLTMwLjUgOC4yLTM4LjUgMjEuOWwwLTU0LjNjNDEuOSAyMC45IDgzLjkgNDYuNSA5OS45IDU4LjMtMTAuMiAxNC42LTkuMyAyOC4xLTkuMyA0My43IDAgMTguNy0xLjQgMzQuMyAxNi44IDUyLjVzNTAuNCAxNy4xIDUwLjQgMTcuMSAzMi4zIDEuMSA1MC40LTE3LjFjMTguMi0xOC4yIDE2LjctMzMuOCAxNi43LTUyLjUgMC0xOC41IDEuNS0zNC4yLTE2LjctNTIuM3pNNjUuMiAxODRsMCA2My4zYy00OC43LTU0LjUtMzguOS03Ni0zNS4yLTc5LjEgMTMuNS0xMS40IDM3LjUtOCA2NC40IDIuMUw2NS4yIDE4NHpNMjkxLjcgMzA0LjVjMCAzLjYtMS44IDEyLjUtMTAuNyAxMi41cy0xMC43LTguOS0xMC43LTEyLjVsMC00MC40YzAtOC43IDcuMy0xMC45IDEwLjctMTAuOXMxMC43IDIuMSAxMC43IDEwLjlsMCA0MC40eiJdCiAgICB9OwogICAgZmFTcXVhcmVHaXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWdpdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJnaXQtc3F1YXJlIl0sICJmMWQyIiwgIk0xMjAuOCAzMzUuNWMtNS45LS40LTEyLjYtLjgtMjAuMi0xLjMtMy4zIDQuMS02LjYgOC40LTYuNiAxMy41IDAgMTguNSA2NS41IDE4LjUgNjUuNS0xLjUgMC04LjMtNy40LTguNy0zOC44LTEwLjdsLjEgMHptNy44LTExNy45Yy0zMi4zIDAtMzMuNyA0NC41LS43IDQ0LjUgMzIuNSAwIDMxLjctNDQuNSAuNy00NC41ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjQzLjkgMTcyLjJjLTE0LjUgMC0yMi45LTguNC0yMi45LTIyLjlzOC40LTIyLjMgMjIuOS0yMi4zYzE0LjcgMCAyMy4xIDcuOCAyMy4xIDIyLjNzLTguNCAyMi45LTIzLjEgMjIuOXpNMTQ5LjYgMTk1bDQ5LjUgMCAwIDIxLjYtMjMuNCAxLjhjNC42IDUuOCA5LjQgMTQgOS40IDI1LjcgMCA0OC43LTU3LjIgNDcuMi03NC4yIDQyLjRsLTguNCAxMy40YzUgLjMgOS44IC42IDE0LjMgLjggNTYuMyAzLjIgODAuNSA0LjYgODAuNSAzOC41IDAgMjkuMi0yNS43IDQ1LjctNjkuOSA0NS43LTQ2IDAtNjMuNS0xMS42LTYzLjUtMzEuNyAwLTExLjQgNS4xLTE3LjUgMTQtMjUuOS04LjQtMy41LTExLjItOS45LTExLjItMTYuOCAwLTkuNiA3LjQtMTYuMyAyMy0zMC42bC4yLS4yYy0xMi40LTYuMS0yMS44LTE5LjMtMjEuOC0zOC4xIDAtNTEuNiA1Ni42LTUzLjMgODEuNi00Ni44bC0uMSAuMnpNMjcwLjUgMzAzLjFsMTMgMS44IDAgMjAuMS03Mi40IDAgMC0yMC4xYzIuNy0uNCA1LS43IDYuOS0uOSA5LjktMS4yIDEwLjEtMS4zIDEwLjEtNmwwLTc0LjdjMC00LjQtLjktNC43LTEwLjEtNy44LTEuOS0uNy00LjItMS40LTYuOS0yLjRsMi44LTIwLjYgNTIuNiAwIDAgMTA1LjVjMCA0LjEgLjIgNC42IDQuMSA1LjFsLS4xIDB6bTEwNi42LTEwLjRMMzg0IDMxNWMtMTAuOSA1LjQtMjYuOSAxMC4yLTQxLjQgMTAuMi0zMC4yIDAtNDEuNy0xMi4yLTQxLjctNDAuOWwwLTY2LjZjMC0uOCAwLTEuNC0uMi0xLjgtLjgtMS4yLTQuMi0uNy0xOS42LS43bDAtMjIuNmMyMi4zLTIuNSAzMS4yLTEzLjcgMzQtNDEuNGwyNC4yIDBjMCAzMy4zLS42IDM4IC43IDM4LjYgLjMgLjEgLjcgMCAxLjMgMGwzNS44IDAgMCAyNS40LTM3LjggMCAwIDYxLjZjLS4yIDYuMy0uOSAzMC40IDM3LjkgMTUuOWwtLjEgMHoiXQogICAgfTsKICAgIGZhR2l0U3F1YXJlID0gZmFTcXVhcmVHaXQ7CiAgICBmYU9kbm9rbGFzc25pa2kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2Rub2tsYXNzbmlraSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMjYzIiwgIk0yNzUuMSAzMzRjLTI3LjQgMTcuNC02NS4xIDI0LjMtOTAgMjYuOWwyMC45IDIwLjYgNzYuMyA3Ni4zYzI3LjkgMjguNi0xNy41IDczLjMtNDUuNyA0NS43LTE5LjEtMTkuNC00Ny4xLTQ3LjQtNzYuMy03Ni42TDg0IDUwMy40Yy0yOC4yIDI3LjUtNzMuNi0xNy42LTQ1LjQtNDUuNyAxOS40LTE5LjQgNDcuMS00Ny40IDc2LjMtNzYuM2wyMC42LTIwLjZjLTI0LjYtMi42LTYyLjktOS4xLTkwLjYtMjYuOS0zMi42LTIxLTQ2LjktMzMuMy0zNC4zLTU5IDcuNC0xNC42IDI3LjctMjYuOSA1NC42LTUuNyAwIDAgMzYuMyAyOC45IDk0LjkgMjguOVMyNTUgMjY5LjIgMjU1IDI2OS4yYzI2LjktMjEuMSA0Ny4xLTguOSA1NC42IDUuNyAxMi40IDI1LjctMS45IDM4LTM0LjUgNTkuMXptMTQuNi0yMDQuN2ExMjkuNyAxMjkuNyAwIDEgMSAtMjU5LjQgLjQgMTI5LjcgMTI5LjcgMCAxIDEgMjU5LjQtLjR6bS0xOTMuNCAuNGE2My43IDYzLjcgMCAxIDAgMTI3LjQtLjQgNjMuNyA2My43IDAgMSAwIC0xMjcuNCAuNHoiXQogICAgfTsKICAgIGZhRHJ1cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRydXBhbCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWE5IiwgIk0yNzIuMyAxMDguMUMyMzYuNSA3Mi41IDIwMi41IDM4LjQgMTkyLjQgMCAxODIuNCAzOC40IDE0OC4xIDcyLjUgMTEyLjQgMTA4LjEgNTguOCAxNjEuNy0xLjkgMjIyLjQtMS45IDMxMy40LTQuMyA0MjAuNyA4MC44IDUwOS42IDE4OC4xIDUxMnMxOTYuMi04Mi44IDE5OC41LTE5MC4xYy4xLTIuOCAuMS01LjYgMC04LjUgMC05MS4xLTYwLjgtMTUxLjctMTE0LjMtMjA1LjN6TTk4IDMzMS4xYy01LjkgNy41LTExIDE1LjYtMTUuMiAyNC4yLS4zIC43LS44IDEuMy0xLjMgMS44cy0xLjIgLjgtMiAxbC0xLjcgMGMtNC4zIDAtOS4yLTguNS05LjItOC41LTEuMy0yLTIuNS00LjItMy43LTYuNGwtLjgtMS44Yy0xMS4yLTI1LjctMS41LTYyLjMtMS41LTYyLjMgNC44LTE3LjggMTIuNy0zNC43IDIzLjItNDkuOSA2LjQtOS42IDEzLjUtMTguOSAyMS0yNy43bDkuMiA5LjIgNDMuNSA0NC40Yy44IC45IDEuMyAyLjEgMS4zIDMuM3MtLjUgMi40LTEuMyAzLjNMMTE0LjEgMzEyLjMgOTggMzMxLjF6bTk2LjYgMTI3LjNjLTEyLjktLjEtMjUuNi0zLjktMzYuNC0xMXMtMTkuNC0xNy4xLTI0LjYtMjguOS03LTI0LjktNS0zNy43IDcuNi0yNC43IDE2LjItMzQuNGMxNC4yLTE2LjkgMzEuNS0zMy41IDUwLjMtNTUuMyAyMi4zIDIzLjggMzYuOSA0MC4xIDUxLjIgNTggMS4xIDEuNCAyLjEgMi45IDMgNC40IDcuOCAxMS4xIDEyIDI0LjQgMTIgMzggMCA4LjgtMS43IDE3LjQtNSAyNS41cy04LjIgMTUuNS0xNC40IDIxLjctMTMuNSAxMS4xLTIxLjYgMTQuNS0xNi43IDUuMS0yNS41IDUuMWwtLjIgMHpNMzIwLjcgMzUxLjZjLS40IDEuNC0xLjIgMi42LTIuMyAzLjZzLTIuNCAxLjYtMy44IDEuOGwtMS4zIDBjLTIuNi0uOS00LjktMi43LTYuMy01LjEtMTEuNi0xNy41LTI0LjktMzMuOS0zOS41LTQ5bC0xNy44LTE4LjQtNTkuMS02MS4zYy0xMi40LTExLjUtMjQuMi0yMy42LTM1LjQtMzYuMy0uMy0uNS0uNi0uOS0uOS0xLjQtMi0yLjgtMy42LTUuOS00LjctOS4ybDAtMS44Yy0uOC01LS40LTEwLjEgMS4yLTE1czQuNC05LjIgOC0xMi43YzExLjQtMTEuNCAyMy0yMyAzMy44LTM0LjkgMTIgMTMuMyAyNC44IDI2IDM3LjQgMzguNiAyNS44IDI0IDQ5LjEgNTAuNSA2OS42IDc5LjEgMTcuMyAyNC41IDI2LjcgNTMuOCAyNyA4My44LS4xIDEyLjktMi4yIDI1LjgtNiAzOC4yeiJdCiAgICB9OwogICAgZmFCbG9nZ2VyQiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibG9nZ2VyLWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3ZCIsICJNNDQ2LjYgMjIyLjdjLTEuOC04LTYuOC0xNS40LTEyLjUtMTguNS0xLjgtMS0xMy0yLjItMjUtMi43LTIwLjEtLjktMjIuMy0xLjMtMjguNy01LTEwLjEtNS45LTEyLjgtMTIuMy0xMi45LTI5LjUtLjEtMzMtMTMuOC02My43LTQwLjktOTEuMy0xOS4zLTE5LjctNDAuOS0zMy02NS41LTQwLjUtNS45LTEuOC0xOS4xLTIuNC02My4zLTIuOS02OS40LS44LTg0LjggLjYtMTA4LjQgMTAtNDMuNSAxNy4yLTc0LjcgNTMuOC04Ni4xIDEwMC42LTIuMSA4LjgtMi42IDIyLjktMy4xIDEwMy45LS42IDEwMS41IC4xIDExNi40IDYuNCAxMzYuNSAxNS42IDQ5LjYgNTkuOSA4Ni4zIDEwNC40IDk0LjMgMTQuOCAyLjcgMTk3LjMgMy4zIDIxNiAuOCAzMi41LTQuNCA1OC0xNy41IDgxLjktNDEuOSAxNy4zLTE3LjcgMjguMS0zNi44IDM1LjItNjIuMSA0LjktMTcuNiA0LjUtMTQyLjggMi41LTE1MS43ek0xMjQuNSAxNTkuMWM3LjgtNy45IDEwLTguMiA1OC44LTguMiA0My45IDAgNDUuNCAuMSA1MS44IDMuNCA5LjMgNC43IDEzLjQgMTEuMyAxMy40IDIxLjkgMCA5LjUtMy44IDE2LjItMTIuMyAyMS42LTQuNiAyLjktNy4zIDMuMS01MC4zIDMuMy0yNi41IC4yLTQ3LjctLjQtNTAuOC0xLjItMTYuNi00LjctMjIuOC0yOC41LTEwLjYtNDAuOHpNMzE2LjMgMzU4LjlsLTE0LjkgMi40LTc3LjUgLjljLTY4LjEgLjgtODcuMy0uNC05MC45LTItNy4xLTMuMS0xMy44LTExLjctMTQuOS0xOS40LTEuMS03LjMgMi42LTE3LjMgOC4yLTIyLjQgNy4xLTYuNCAxMC4yLTYuNiA5Ny4zLTYuNyA4OS42LS4xIDg5LjEtLjEgOTcuNiA3LjggMTIuMSAxMS4zIDkuNSAzMS4yLTQuOSAzOS40eiJdCiAgICB9OwogICAgZmFJbnZpc2lvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnZpc2lvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2IwIiwgIk00MDcuNCAzMkw0MC42IDMyQzE4LjIgMzIgMCA1MC4yIDAgNzIuNkwwIDQzOS40QzAgNDYxLjggMTguMiA0ODAgNDAuNiA0ODBsMzY2LjggMGMyMi40IDAgNDAuNi0xOC4yIDQwLjYtNDAuNmwwLTM2Ni44QzQ0OCA1MC4yIDQyOS44IDMyIDQwNy40IDMyek0xNzYuMSAxNDUuNmMuNCAyMy40LTIyLjQgMjcuMy0yNi42IDI3LjQtMTQuOSAwLTI3LjEtMTItMjcuMS0yNyAuMS0zNS4yIDUzLjEtMzUuNSA1My43LS40ek0zMzIuOCAzNzdjLTY1LjYgMC0zNC4xLTc0LTI1LTEwNi42IDE0LjEtNDYuNC00NS4yLTU5LTU5LjkgLjdsLTI1LjggMTAzLjMtNDUuMSAwIDguMS0zMi41Yy0zMS41IDUxLjgtOTQuNiA0NC40LTk0LjYtNC4zIC4xLTE0LjMgLjktMTQgMjMtMTA0LjFsLTMxLjggMCA5LjctMzUuNiA3Ni40IDBjLTMzLjYgMTMzLjctMzIuNiAxMjYuOS0zMi45IDEzOC4yIDAgMjAuOSA0MC45IDEzLjUgNTcuNC0yMy4ybDE5LjgtNzkuNC0zMi4zIDAgOS43LTM1LjYgNjguOCAwLTguOSA0MC41YzQwLjUtNzUuNSAxMjcuOS00Ny44IDEwMS44IDM4LTE0LjIgNTEuMS0xNC42IDUwLjctMTQuOSA1OC44IDAgMTUuNSAxNy41IDIyLjYgMzEuOC0xNi45TDM4NiAzMjVjLTEwLjUgMzYuNy0yOS40IDUyLTUzLjIgNTJ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rRiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlYm9vay1mIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzOWUiLCAiTTgwIDI5OS4zbDAgMjEyLjcgMTE2IDAgMC0yMTIuNyA4Ni41IDAgMTgtOTcuOC0xMDQuNSAwIDAtMzQuNmMwLTUxLjcgMjAuMy03MS41IDcyLjctNzEuNSAxNi4zIDAgMjkuNCAuNCAzNyAxLjJsMC04OC43QzI5MS40IDQgMjU2LjQgMCAyMzYuMiAwIDEyOS4zIDAgODAgNTAuNSA4MCAxNTkuNGwwIDQyLjEtNjYgMCAwIDk3LjggNjYgMHoiXQogICAgfTsKICAgIGZhQ2VudG9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNlbnRvcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg5IiwgIk0yODkuNiA5Ny41bDMxLjYgMzEuNy03Ni4zIDc2LjUgMC0xMDguMiA0NC43IDB6TTEyNy4yIDEyOS4ybDc2LjMgNzYuNSAwLTEwOC4yLTQ0LjcgMC0zMS42IDMxLjd6bTQxLjUtNDEuNmw0NC43IDAgMCAxMjcuOSAxMC44IDEwLjggMTAuOC0xMC44IDAtMTI3LjkgNDQuNyAwLTU1LjUtNTUuNi01NS41IDU1LjZ6bTI2LjIgMTY4LjFsLTEwLjgtMTAuOC0xMjguNiAwIDAtNDQuOC01NS41IDU1LjYgNTUuNSA1NS42IDAtNDQuOCAxMjguNiAwIDEwLjgtMTAuOHpNMjc0LjIgMjM1bDEwNy45IDAgMC00NC44LTMxLjYtMzEuNy03Ni4zIDc2LjV6bTE3My4zIDIwLjdsLTU1LjUtNTUuNiAwIDQ0LjgtMTI3LjcgMC0xMC44IDEwLjggMTAuOCAxMC44IDEyNy43IDAgMCA0NC44IDU1LjUtNTUuNnpNNjUuNCAxNzYuMmwzMi41LTMxLjcgOTAuMyA5MC41IDE1LjMgMCAwLTE1LjMtOTAuMy05MC41IDMxLjYtMzEuNy03OS40IDAgMCA3OC43ek0zODIuMSA5Ny41bC03OC41IDAgMzEuNiAzMS43LTkwLjMgOTAuNSAwIDE1LjMgMTUuMyAwIDkwLjMtOTAuNSAzMS42IDMxLjcgMC03OC43ek0yMDMuNSA0MTMuOWwwLTEwOC4xLTc2LjMgNzYuNSAzMS42IDMxLjcgNDQuNyAwIDAtLjF6TTY1LjQgMjM1bDEwOC44IDAtNzYuMy03Ni41LTMyLjUgMzEuNyAwIDQ0Ljh6TTM4Mi4xIDMzNS4ybC0zMS42IDMxLjctOTAuMy05MC41LTE1LjMgMCAwIDE1LjMgOTAuMyA5MC41LTMxLjYgMzEuNyA3OC41IDAgMC03OC43em0wLTU4LjhsLTEwNy45IDAgNzYuMyA3Ni41IDMxLjYtMzEuNyAwLTQ0Ljh6TTMyMS4yIDM4Mi4ybC03Ni4zLTc2LjUgMCAxMDguMSA0NC43IDAgMzEuNi0zMS42ek05Ny45IDM1Mi45bDc2LjMtNzYuNS0xMDguOCAwIDAgNDQuOCAzMi41IDMxLjd6bTE4MS44IDcwLjlsLTQ0LjcgMCAwLTEyNy45LTEwLjgtMTAuOC0xMC44IDEwLjggMCAxMjcuOS00NC43IDAgNTUuNSA1NS42IDU1LjUtNTUuNnpNMTEzLjIgMzgyLjJsOTAuMy05MC41IDAtMTUuMy0xNS4zIDAtOTAuMyA5MC41LTMyLjUtMzEuNyAwIDc4LjcgNzkuNCAwLTMxLjYtMzEuN3oiXQogICAgfTsKICAgIGZhQ2NBbWF6b25QYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1hem9uLXBheSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNDJkIiwgIk0xMjQuNyAyMDEuOGMuMS0xMS44IDAtMjMuNSAwLTM1LjNsMC0zNS4zYzAtMS4zIC40LTIgMS40LTIuNyAxMS41LTggMjQuMS0xMi4xIDM4LjItMTEuMSAxMi41IC45IDIyLjcgNyAyOC4xIDIxLjcgMy4zIDguOSA0LjEgMTguMiA0LjEgMjcuNyAwIDguNy0uNyAxNy4zLTMuNCAyNS42LTUuNyAxNy44LTE4LjcgMjQuNy0zNS43IDIzLjktMTEuNy0uNS0yMS45LTUtMzEuNC0xMS43LS45LS44LTEuNC0xLjYtMS4zLTIuOHptMTU0LjkgMTQuNmM0LjYgMS44IDkuMyAyIDE0LjEgMS41IDExLjYtMS4yIDIxLjktNS43IDMxLjMtMTIuNSAuOS0uNiAxLjMtMS4zIDEuMy0yLjUtLjEtMy45IDAtNy45IDAtMTEuOCAwLTQtLjEtOCAwLTEyIDAtMS40LS40LTItMS44LTIuMi03LS45LTEzLjktMi4yLTIwLjktMi45LTctLjYtMTQtLjMtMjAuOCAxLjktNi43IDIuMi0xMS43IDYuMi0xMy43IDEzLjEtMS42IDUuNC0xLjYgMTAuOCAuMSAxNi4yIDEuNiA1LjUgNS4yIDkuMiAxMC40IDExLjJ6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM2OC41IDEwMy45Yy40IDEuNyAuOSAzLjQgMS42IDUuMSAxNi41IDQwLjYgMzIuOSA4MS4zIDQ5LjUgMTIxLjkgMS40IDMuNSAxLjcgNi40IC4yIDkuOS0yLjggNi4yLTQuOSAxMi42LTcuOCAxOC43LTIuNiA1LjUtNi43IDkuNS0xMi43IDExLjItNC4yIDEuMS04LjUgMS4zLTEyLjkgLjktMi4xLS4yLTQuMi0uNy02LjMtLjgtMi44LS4yLTQuMiAxLjEtNC4zIDQtLjEgMi44LS4xIDUuNiAwIDguMyAuMSA0LjYgMS42IDYuNyA2LjIgNy41IDQuNyAuOCA5LjQgMS42IDE0LjIgMS43IDE0LjMgLjMgMjUuNy01LjQgMzMuMS0xNy45IDIuOS00LjkgNS42LTEwLjEgNy43LTE1LjQgMTkuOC01MC4xIDM5LjUtMTAwLjMgNTkuMi0xNTAuNSAuNi0xLjUgMS4xLTMgMS4zLTQuNiAuNC0yLjQtLjctMy42LTMuMS0zLjctNS42LS4xLTExLjEgMC0xNi43IDAtMy4xIDAtNS4zIDEuNC02LjQgNC4zLS40IDEuMS0uOSAyLjMtMS4zIDMuNGwtMjkuMSA4My43Yy0yLjEgNi4xLTQuMiAxMi4xLTYuNSAxOC42LS40LS45LS42LTEuNC0uOC0xLjktMTAuOC0yOS45LTIxLjYtNTkuOS0zMi40LTg5LjgtMS43LTQuNy0zLjUtOS41LTUuMy0xNC4yLS45LTIuNS0yLjctNC01LjQtNC02LjQtLjEtMTIuOC0uMi0xOS4yLS4xLTIuMiAwLTMuMyAxLjYtMi44IDMuN3pNMjQyLjQgMjA2YzEuNyAxMS43IDcuNiAyMC44IDE4IDI2LjYgOS45IDUuNSAyMC43IDYuMiAzMS43IDQuNiAxMi43LTEuOSAyMy45LTcuMyAzMy44LTE1LjUgLjQtLjMgLjgtLjYgMS40LTEgLjUgMy4yIC45IDYuMiAxLjUgOS4yIC41IDIuNiAyLjEgNC4zIDQuNSA0LjQgNC42IC4xIDkuMSAuMSAxMy43IDAgMi4zLS4xIDMuOC0xLjYgNC0zLjkgLjEtLjggLjEtMS42IC4xLTIuM2wwLTg4LjhjMC0zLjYtLjItNy4yLS43LTEwLjgtMS42LTEwLjgtNi4yLTE5LjctMTUuOS0yNS40LTUuNi0zLjMtMTEuOC01LTE4LjItNS45LTMtLjQtNi0uNy05LjEtMS4xbC0xMCAwYy0uOCAuMS0xLjYgLjMtMi41IC4zLTguMiAuNC0xNi4zIDEuNC0yNC4yIDMuNS01LjEgMS4zLTEwIDMuMi0xNSA0LjktMyAxLTQuNSAzLjItNC40IDYuNSAuMSAyLjgtLjEgNS42IDAgOC4zIC4xIDQuMSAxLjggNS4yIDUuNyA0LjEgNi41LTEuNyAxMy4xLTMuNSAxOS43LTQuOCAxMC4zLTEuOSAyMC43LTIuNyAzMS4xLTEuMiA1LjQgLjggMTAuNSAyLjQgMTQuMSA3IDMuMSA0IDQuMiA4LjggNC40IDEzLjcgLjMgNi45IC4yIDEzLjkgLjMgMjAuOCAwIC40LS4xIC43LS4yIDEuMi0uNCAwLS44IDAtMS4xLS4xLTguOC0yLjEtMTcuNy0zLjYtMjYuOC00LjEtOS41LS41LTE4LjkgLjEtMjcuOSAzLjItMTAuOCAzLjgtMTkuNSAxMC4zLTI0LjYgMjAuOC00LjEgOC4zLTQuNiAxNy0zLjQgMjUuOHpNOTguNyAxMDYuOWwwIDE3NS4zYzAgLjggMCAxLjcgLjEgMi41IC4yIDIuNSAxLjcgNC4xIDQuMSA0LjIgNS45IC4xIDExLjggLjEgMTcuNyAwIDIuNSAwIDQtMS43IDQuMS00LjEgLjEtLjggLjEtMS43IC4xLTIuNWwwLTYwLjdjLjkgLjcgMS40IDEuMiAxLjkgMS42IDE1IDEyLjUgMzIuMiAxNi42IDUxLjEgMTIuOSAxNy4xLTMuNCAyOC45LTEzLjkgMzYuNy0yOS4yIDUuOC0xMS42IDguMy0yNC4xIDguNy0zNyAuNS0xNC4zLTEtMjguNC02LjgtNDEuNy03LjEtMTYuNC0xOC45LTI3LjMtMzYuNy0zMC45LTIuNy0uNi01LjUtLjgtOC4yLTEuMmwtNyAwYy0xLjIgLjItMi40IC4zLTMuNiAuNS0xMS43IDEuNC0yMi4zIDUuOC0zMS44IDEyLjctMiAxLjQtMy45IDMtNS45IDQuNS0uMS0uNS0uMy0uOC0uNC0xLjItLjQtMi4zLS43LTQuNi0xLjEtNi45LS42LTMuOS0yLjUtNS41LTYuNC01LjZsLTkuNyAwYy01LjktLjEtNi45IDEtNi45IDYuOHpNNDkzLjYgMzM5Yy0yLjctLjctNS4xIDAtNy42IDEtNDMuOSAxOC40LTg5LjUgMzAuMi0xMzYuOCAzNS44LTE0LjUgMS43LTI5LjEgMi44LTQzLjcgMy4yLTI2LjYgLjctNTMuMi0uOC03OS42LTQuMy0xNy44LTIuNC0zNS41LTUuNy01My05LjktMzctOC45LTcyLjctMjEuNy0xMDYuNy0zOC44LTguOC00LjQtMTcuNC05LjMtMjYuMS0xNC0zLjgtMi4xLTYuMi0xLjUtOC4yIDIuMWwwIDEuN2MxLjIgMS42IDIuMiAzLjQgMy43IDQuOCAzNiAzMi4yIDc2LjYgNTYuNSAxMjIgNzIuOSAyMS45IDcuOSA0NC40IDEzLjcgNjcuMyAxNy41IDE0IDIuMyAyOCAzLjggNDIuMiA0LjUgMyAuMSA2IC4yIDkgLjQgLjcgMCAxLjQgLjIgMi4xIC4zbDE3LjcgMGMuNy0uMSAxLjQtLjMgMi4xLS4zIDE0LjktLjQgMjkuOC0xLjggNDQuNi00IDIxLjQtMy4yIDQyLjQtOC4xIDYyLjktMTQuNyAyOS42LTkuNiA1Ny43LTIyLjQgODMuNC00MC4xIDIuOC0xLjkgNS43LTMuOCA4LTYuMiA0LjMtNC40IDIuMy0xMC40LTMuMy0xMS45ek01NDQgMzExLjNjLS44LTQuMi00LTUuOC03LjYtNy01LjctMS45LTExLjYtMi44LTE3LjYtMy4zLTExLS45LTIyLS40LTMyLjggMS42LTEyIDIuMi0yMy40IDYuMS0zMy41IDEzLjEtMS4yIC44LTIuNCAxLjgtMy4xIDMtLjYgLjktLjcgMi4zLS41IDMuNCAuMyAxLjMgMS43IDEuNiAzIDEuNSAuNiAwIDEuMiAwIDEuOC0uMWwxOS41LTIuMWM5LjYtLjkgMTkuMi0xLjUgMjguOC0uOCA0LjEgLjMgOC4xIDEuMiAxMiAyLjIgNC4zIDEuMSA2LjIgNC40IDYuNCA4LjcgLjMgNi43LTEuMiAxMy4xLTIuOSAxOS41LTMuNSAxMi45LTguMyAyNS40LTEzLjMgMzcuOC0uMyAuOC0uNyAxLjctLjggMi41LS40IDIuNSAxIDQgMy40IDMuNSAxLjQtLjMgMy0xLjEgNC0yLjEgMy43LTMuNiA3LjUtNy4yIDEwLjYtMTEuMiAxMC43LTEzLjggMTctMjkuNiAyMC43LTQ2LjYgLjctMyAxLjItNi4xIDEuNy05LjEgLjItNC43IC4yLTkuNiAuMi0xNC41eiJdCiAgICB9OwogICAgZmFFYmF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImViYXkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRmNCIsICJNNjA2LjUgMTg5LjVsLTU0LjggMTA5LjktNTQuOS0xMDkuOS0zNy41IDAgMTAuOSAyMC42Yy0xMS41LTE5LTM1LjktMjYtNjMuMy0yNi0zMS44IDAtNjcuOSA4LjctNzEuNSA0My4xbDMzLjcgMGMxLjQtMTMuOCAxNS43LTIxLjggMzUtMjEuOCAyNiAwIDQxIDkuNiA0MSAzM2wwIDMuNGMtMTIuNyAwLTI4IC4xLTQxLjcgLjQtNDIuNCAuOS02OS42IDEwLTc2LjcgMzQuNCAxLTUuMiAxLjUtMTAuNiAxLjUtMTYuMiAwLTUyLjEtMzkuNy03Ni4yLTc1LjQtNzYuMi0yMS4zIDAtNDMgNS41LTU4LjcgMjQuMmwwLTgwLjYtMzIuMSAwIDAgMTY5LjVjMCAxMC4zLS42IDIyLjktMS4xIDMzLjFsMzEuNSAwYy43LTYuMyAxLjEtMTIuOSAxLjEtMTkuNSAxMy42IDE2LjYgMzUuNCAyNC45IDU4LjcgMjQuOSAzNi45IDAgNjQuOS0yMS45IDczLjMtNTQuMi0uNSAyLjgtLjcgNS44LS43IDkgMCAyNC4xIDIxLjEgNDUgNjAuNiA0NSAyNi42IDAgNDUuOC01LjcgNjEuOS0yNS41IDAgNi42IC4zIDEzLjMgMS4xIDIwLjJsMjkuOCAwYy0uNy04LjItMS0xNy41LTEtMjYuOGwwLTY1LjZjMC05LjMtMS43LTE3LjItNC44LTIzLjhsNjEuNSAxMTYuMS0yOC41IDU0LjEgMzUuOSAwIDk5LjItMTk0LjgtMzQgMHpNMjQ0LjIgMzEzLjhjLTI5LjYgMC01MC4yLTIxLjUtNTAuMi01My44IDAtMzIuNCAyMC42LTUzLjggNTAuMi01My44IDI5LjggMCA1MC4yIDIxLjQgNTAuMiA1My44IDAgMzIuMy0yMC40IDUzLjgtNTAuMiA1My44em0yMDAuOS00Ny4zYzAgMzAtMTcuOSA0OC40LTUxLjYgNDguNC0yNS4xIDAtMzUtMTMuNC0zNS0yNS44IDAtMTkuMSAxOC4xLTI0LjQgNDcuMi0yNS4zIDEzLjEtLjUgMjcuNi0uNiAzOS40LS42bDAgMy4zek0zMy4yIDI2OC4xbDEyOC44IDAgMC04LjVjMC01MS43LTMzLjEtNzUuNC03OC40LTc1LjQtNTYuOCAwLTgzIDMwLjgtODMgNzcuNiAwIDQyLjUgMjUuMyA3NCA4Mi41IDc0IDMxLjQgMCA2OC0xMS43IDc0LjQtNDYuMWwtMzMuMSAwYy0xMiAzNS44LTg3LjcgMzYuNy05MS4yLTIxLjZ6bTk1LTIxLjRsLTk0LjQgMGM2LjktNTYuNiA5Mi4xLTU0LjcgOTQuNCAweiJdCiAgICB9OwogICAgZmFDb250YW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29udGFvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNmQiLCAiTTQ1LjQgMzA1YzE0LjQgNjcuMSAyNi40IDEyOSA2OC4yIDE3NUwzNCA0ODBjLTE4LjcgMC0zNC0xNS4yLTM0LTM0TDAgNjZDMCA0Ny4zIDE1LjIgMzIgMzQgMzJsNTcuNyAwYy0xMy44IDEyLjYtMjYuMSAyNy4yLTM2LjkgNDMuNi00NS40IDcwLTI3IDE0Ni44LTkuNCAyMjkuNHpNNDc4IDMybC05MC4yIDBjMjEuNCAyMS40IDM5LjIgNDkuNSA1Mi43IDg0LjFMMzAzLjQgMTQ1LjRjLTE0LjktMjktMzcuOC01My4zLTgyLjYtNDMuOS0yNC42IDUuMy00MSAxOS4zLTQ4LjMgMzQuNi04LjggMTguNy0xMy4yIDM5LjggOC4yIDE0MC4zIDIxLjEgMTAwLjIgMzMuNyAxMTcuNyA0OS41IDEzMS4yIDEyLjkgMTEuMSAzMy40IDE3IDU4LjMgMTEuNyA0NC41LTkuNCA1NS43LTQwLjcgNTcuNC03My4ybDEzNy40LTI5LjZjMy4yIDcxLjUtMTguNyAxMjUuMi01Ny40IDE2My42bDUyLjEgMGMxOC43IDAgMzQtMTUuMiAzNC0zNEw1MTIgNjZjMC0xOC44LTE1LjItMzQtMzQtMzR6Il0KICAgIH07CiAgICBmYUVsbG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZWxsbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWYxIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM5OS44IDI5My4yQzM4My4zIDM1OC41IDMyMy44IDQwNC44IDI1NiA0MDQuOFMxMjguNyAzNTguNSAxMTIuMiAyOTMuMmMtMS42LTcuNCAyLjUtMTUuNyA5LjktMTcuNHMxNS43IDIuNSAxNy40IDkuOWMxNCA1Mi45IDYyIDkwLjEgMTE2LjYgOTAuMXMxMDIuNS0zNy4yIDExNi42LTkwLjFjMS43LTcuNCA5LjktMTIuNCAxNy40LTkuOSA3LjQgMS43IDEyLjQgOS45IDkuOSAxNy40eiJdCiAgICB9OwogICAgZmFTaXN0cml4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNpc3RyaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlZSIsICJNNDQ4IDQ0OUwzMDEuMiAzMDAuMmMyMC0yNy45IDMxLjktNjIuMiAzMS45LTk5LjIgMC05My4xLTc0LjctMTY4LjktMTY2LjUtMTY4LjktOTEuOS0uMS0xNjYuNiA3NS43LTE2Ni42IDE2OC44Uzc0LjcgMzY5LjggMTY2LjUgMzY5LjhjMzkuOCAwIDc2LjMtMTQuMiAxMDUtMzcuOUw0MTcuNSA0ODAgNDQ4IDQ0OXpNMTY2LjUgMzMwLjhjLTcwLjYgMC0xMjguMS01OC4zLTEyOC4xLTEyOS45Uzk1LjkgNzEgMTY2LjUgNzEgMjk0LjYgMTI5LjMgMjk0LjYgMjAwLjkgMjM3LjIgMzMwLjggMTY2LjUgMzMwLjh6Il0KICAgIH07CiAgICBmYVBlcmlzY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwZXJpc2NvcGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNkYSIsICJNMzcwIDYzLjZjLTM4LjYtNDEtODkuNS02My42LTE0My40LTYzLjYtMTE0LjcgMC0yMDguMSA5Ni4yLTIwOC4xIDIxNC40IDAgNzUuMSA1Ny44IDE1OS44IDgyLjcgMTkyLjcgMzYuNiA0OC40IDkxLjQgMTA0LjkgMTI1LjQgMTA0LjkgNDEuNiAwIDExMi45LTk0LjIgMTIwLjktMTA1IDI0LjYtMzMuMSA4Mi0xMTguMyA4Mi0xOTIuNiAwLTU2LjUtMjEuMS0xMTAuMS01OS41LTE1MC44ek0yMjYuNiA0OTMuOWMtNDIuNSAwLTE5MC0xNjcuMy0xOTAtMjc5LjQgMC0xMDcuNCA4My45LTE5Ni4zIDE5MC0xOTYuMyAxMDAuOCAwIDE4NC43IDg5IDE4NC43IDE5Ni4zIC4xIDExMi4xLTE0Ny40IDI3OS40LTE4NC43IDI3OS40ek0zMzggMjA2LjhjMCA1OS4xLTUxLjEgMTA5LjctMTEwLjggMTA5LjctMTAwLjYgMC0xNTAuNy0xMDguMi05Mi45LTE4MS44bDAgLjRjMCAyNC41IDIwLjEgNDQuNCA0NC44IDQ0LjRzNDQuOC0xOS45IDQ0LjgtNDQuNGMwLTE4LjItMTEuMS0zMy44LTI2LjktNDAuNyA3Ni42LTE5LjIgMTQxIDM5LjMgMTQxIDExMi40eiJdCiAgICB9OwogICAgZmFFeHBlZGl0ZWRzc2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZXhwZWRpdGVkc3NsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyM2UiLCAiTTI1NiA0My40YTIxMi42IDIxMi42IDAgMSAwIDAgNDI1LjIgMjEyLjYgMjEyLjYgMCAxIDAgMC00MjUuMnpNMTU4LjYgMTc2LjNjMC01My43IDQzLjctOTcuNCA5Ny40LTk3LjRzOTcuNCA0My43IDk3LjQgOTcuNGwwIDI2LjZjMCA1LTMuOSA4LjktOC45IDguOWwtMTcuNyAwYy01IDAtOC45LTMuOS04LjktOC45bDAtMjYuNmMwLTgyLjEtMTI0LTgyLjEtMTI0IDBsMCAyNi42YzAgNS0zLjkgOC45LTguOSA4LjlsLTE3LjcgMGMtNSAwLTguOS0zLjktOC45LTguOWwwLTI2LjYgLjIgMHpNMzk3LjcgMzgwYzAgOS43LTggMTcuNy0xNy43IDE3LjdsLTI0OCAwYy05LjcgMC0xNy43LTgtMTcuNy0xNy43bDAtMTQxLjdjMC05LjcgOC0xNy43IDE3LjctMTcuN2wyNDggMGM5LjcgMCAxNy43IDggMTcuNyAxNy43bDAgMTQxLjd6bS0yNDgtMTM3LjNsMCAxMzIuOWMwIDIuNS0xLjkgNC40LTQuNCA0LjRsLTguOSAwYy0yLjUgMC00LjQtMS45LTQuNC00LjRsMC0xMzIuOWMwLTIuNSAxLjktNC40IDQuNC00LjRsOC45IDBjMi41IDAgNC40IDEuOSA0LjQgNC40em0xNDEuNyA0OC43YzAgMTMtNy4yIDI0LjQtMTcuNyAzMC40bDAgMzEuNmMwIDUtMy45IDguOS04LjkgOC45bC0xNy43IDBjLTUgMC04LjktMy45LTguOS04LjlsMC0zMS42Yy0xMC41LTYuMS0xNy43LTE3LjQtMTcuNy0zMC40IDAtMTkuNyAxNS44LTM1LjQgMzUuNC0zNS40czM1LjUgMTUuOCAzNS41IDM1LjR6TTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCAxNy43YTIzMC4zIDIzMC4zIDAgMSAxIDAgNDYwLjYgMjMwLjMgMjMwLjMgMCAxIDEgMC00NjAuNnoiXQogICAgfTsKICAgIGZhTmFwc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuYXBzdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZDIiLCAiTTMwNi4zIDM3My42Yy0xNC4yIDEzLjYtMzEuMyAyNC4xLTUwLjQgMzAuNS0xOS02LjQtMzYuMi0xNi45LTUwLjMtMzAuNWwxMDAuNyAwem00NC0xOTkuNmMyMC0xNi45IDQzLjYtMjkuMiA2OS42LTM2LjJsMCAxNjEuMmMwIDIxOS40LTMyOCAyMTcuNi0zMjggLjNsMC0xNjEuNmMyNS45IDYuOSA0OS42IDE5LjYgNjkuNSAzNi40IDU2LjgtNDAgMTMyLjUtMzkuOSAxODguOS0uMXpNMTQxLjUgMTE1LjVjNjQuNC02MCAxNjQuMy02MC4xIDIyOC45LS4yLTcuMSAzLjUtMTMuOSA3LjMtMjAuNiAxMS41LTU4LjctMzAuNS0xMjkuMi0zMC40LTE4Ny45IC4xLTYuMy00LTEzLjktOC4yLTIwLjQtMTEuNHpNNTEuOCA5My4ybDAgNjkuM2MtNTguNCAzNi41LTU4LjQgMTIxLjEgLjEgMTU4LjMgMjYuNCAyNDUuMSAzODEuNyAyNDAuMyA0MDcuNiAxLjVsLjMtMS43YzU4LjctMzYuMyA1OC45LTEyMS43IC4yLTE1OC4ybDAtNjkuMmMtMTcuMyAuNS0zNCAzLTUwLjEgNy40LTgyLTkxLjUtMjI1LjUtOTEuNS0zMDcuNSAuMS0xNi4zLTQuNC0zMy4xLTctNTAuNi03LjV6TTI2Ny4yIDM1MnMzNi0uMyA2MS4zLTEuNWMxMC4yLS41IDIxLjEtNCAyNS41LTYuNSAyNi4zLTE1LjEgMjUuNC0zOS4yIDI2LjItNDcuNC03OS41LS42LTk5LjktMy45LTExMyA1NS40ek0xMzEuNyAyOTYuN2MuOCA4LjItLjEgMzIuMyAyNi4yIDQ3LjQgNC40IDIuNSAxNS4yIDYgMjUuNSA2LjUgMjUuMyAxLjEgNjEuMyAxLjUgNjEuMyAxLjUtMTMuMi01OS40LTMzLjctNTYuMS0xMTMtNTUuNHpNMzAwLjggNDIwLjFjLTMuMi01LjMtNi45LTcuMy02LjktNy4zLTI0LjggNy4zLTUyLjIgNi45LTc1LjkgMCAwIDAtMi45IDEuNS02LjQgNi42LTIuOCA0LjEtMy43IDkuNi0zLjcgOS42IDI5LjEgMTcuNiA2Ny4xIDE3LjYgOTYuMiAwLS4xLS4xLS4zLTQtMy4zLTguOXoiXQogICAgfTsKICAgIGZhRGVsaWNpb3VzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRlbGljaW91cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE1IiwgIk00NDYuNiA2OGMtLjQtMS41LS45LTMtMS40LTQuNS0uOS0yLjUtMi00LjgtMy4zLTcuMS0xLjQtMi40LTMtNC44LTQuNy02LjktMi4xLTIuNS00LjQtNC44LTYuOS02LjgtMS4xLS45LTIuMi0xLjctMy4zLTIuNS0xLjMtLjktMi42LTEuNy00LTIuNC0xLjgtMS0zLjYtMS44LTUuNS0yLjUtMS43LS43LTMuNS0xLjMtNS40LTEuNy0zLjgtMS03LjktMS41LTEyLTEuNWwtMzUyIDBDMjEuNiAzMiAuMSA1My41IC4xIDgwbDAgMzUyYzAgNC4xIC41IDguMiAxLjUgMTIgMiA3LjcgNS44IDE0LjYgMTEgMjAuMyAxIDEuMSAyLjEgMi4yIDMuMyAzLjMgNS43IDUuMiAxMi42IDkgMjAuMyAxMSAzLjggMSA3LjkgMS41IDEyIDEuNWwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1Mi4xYy0uMS00LjEtLjYtOC4yLTEuNi0xMnpNNDE2LjEgNDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC0xOTItMTkyIDAgMC0xNzZjMC04LjggNy4yLTE2IDE2LTE2bDE3NiAwIDAgMTkyIDE5MiAwIDAgMTc2eiJdCiAgICB9OwogICAgZmFHdWlsZGVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImd1aWxkZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3ZSIsICJNNDQzLjkgNjRMNSA2NGMwIDEwMy4zIDIyLjIgMTgwLjEgNDMuNCAyMjIuNCA2NC4xIDEyNy44IDE3NiAxNjEuNiAxNzcuMyAxNjEuNiA1NS43LTIwLjUgMTA0LjUtNTYuMyAxNDAuNi0xMDMuNSAyNS45LTMzLjkgNTMuMS04Ny4yIDY1LjktMTQ1LjhsLTI1OS45IDBjNC4xIDM2LjQgMjIuMiA2Ny45IDQ1LjEgODYuOWw4OC42IDBjLTE3IDI4LjItNDguMiA1NC40LTgwLjUgNjkuNS0zMS4yLTEzLjMtNjkuMS00Ni41LTk2LjUtOTguNC0yNi43LTUzLjgtMjcuMS0xMDUuOS0yNy4xLTEwNS45bDMzNi4xIDBjNC0yOC44IDUuOS01Ny45IDUuOS04Ni45eiJdCiAgICB9OwogICAgZmFYYm94ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInhib3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQxMiIsICJNMzY5LjkgMzE4LjJjNDQuMyA1NC4zIDY0LjcgOTguOCA1NC40IDExOC43LTcuOSAxNS4xLTU2LjcgNDQuNi05Mi42IDU1LjktMjkuNiA5LjMtNjguNCAxMy4zLTEwMC40IDEwLjItMzguMi0zLjctNzYuOS0xNy40LTExMC4xLTM5LTI3LjktMTguMi0zNC4yLTI1LjctMzQuMi00MC42IDAtMjkuOSAzMi45LTgyLjMgODkuMi0xNDIuMSAzMi0zMy45IDc2LjUtNzMuNyA4MS40LTcyLjYgOS40IDIuMSA4NC4zIDc1LjEgMTEyLjMgMTA5LjV6TTE4OC42IDE0My44Yy0yOS43LTI2LjktNTguMS01My45LTg2LjQtNjMuNC0xNS4yLTUuMS0xNi4zLTQuOC0yOC43IDguMS0yOS4yIDMwLjQtNTMuNSA3OS43LTYwLjMgMTIyLjQtNS40IDM0LjItNi4xIDQzLjgtNC4yIDYwLjUgNS42IDUwLjUgMTcuMyA4NS40IDQwLjUgMTIwLjkgOS41IDE0LjYgMTIuMSAxNy4zIDkuMyA5LjktNC4yLTExLS4zLTM3LjUgOS41LTY0IDE0LjMtMzkgNTMuOS0xMTIuOSAxMjAuMy0xOTQuNHptMzExLjYgNjMuNWMtMTYuOS04MC02Ny41LTEzMC4zLTc0LjYtMTMwLjMtNy4zIDAtMjQuMiA2LjUtMzYgMTMuOS0yMy4zIDE0LjUtNDEgMzEuNC02NC4zIDUyLjggNDIuNCA1My4zIDEwMi4yIDEzOS40IDEyMi45IDIwMi4zIDYuOCAyMC43IDkuNyA0MS4xIDcuNCA1Mi4zLTEuNyA4LjUtMS43IDguNSAxLjQgNC42IDYuMS03LjcgMTkuOS0zMS4zIDI1LjQtNDMuNSA3LjQtMTYuMiAxNS00MC4yIDE4LjYtNTguNyA0LjMtMjIuNSAzLjktNzAuOC0uOC05My40ek0xNDEuMyA0M2M0Ny43LTIuNSAxMDkuNyAzNC41IDExNC4zIDM1LjQgLjcgLjEgMTAuNC00LjIgMjEuNi05LjcgNjMuOS0zMS4xIDk0LTI1LjggMTA3LjQtMjUuMi02My45LTM5LjMtMTUyLjctNTAtMjMzLjktMTEuNy0yMy40IDExLjEtMjQgMTEuOS05LjQgMTEuMnoiXQogICAgfTsKICAgIGZhVW50YXBwZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bnRhcHBkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MDUiLCAiTTQwMS41IDQ5LjlDMzIxLjcgMjEwIDMxNi45IDIwMi40IDMxMy42IDIyMy4xbC01LjIgMzIuOGMtMS45IDEyLTYuNiAyMy41LTEzLjcgMzMuNEwxNDUuOCA0OTcuMWMtNy42IDEwLjYtMjAuNCAxNi4yLTMzLjQgMTQuNi00MC4zLTUtNzcuOC0zMi4yLTk1LjMtNjguNS01LjctMTEuOC00LjUtMjUuOCAzLjEtMzYuNEwxNjkuMSAxOTguOWM3LjEtOS45IDE2LjQtMTggMjcuMi0yMy43bDI5LjMtMTUuNWMxOC41LTkuOCA5LjctMTEuOSAxMzUuNi0xMzguOSAxLTQuOCAxLTcuMyAzLjYtOCAzLS43IDYuNi0xIDYuMy00LjZsLS40LTQuNmMtLjItMS45IDEuMy0zLjYgMy4yLTMuNiA0LjUtLjEgMTMuMiAxLjIgMjUuNiAxMCAxMi4zIDguOSAxNi40IDE2LjggMTcuNyAyMS4xIC42IDEuOC0uNiAzLjctMi40IDQuMmwtNC41IDEuMWMtMy40IC45LTIuNSA0LjQtMi4zIDcuNCAuMSAyLjgtMi4zIDMuNi02LjUgNi4xek0yMzAuMyAzNi40YzMuNCAuOSAyLjUgNC40IDIuMyA3LjQtLjIgMi43IDIuMSAzLjUgNi40IDYgNy45IDE1LjkgMTUuMyAzMC41IDIyLjIgNDQgLjcgMS4zIDIuMyAxLjUgMy4zIC41IDExLjItMTIgMjQuNi0yNi4yIDQwLjUtNDIuNiAxLjMtMS40IDEuNC0zLjUgLjEtNC45LTgtOC4yLTE2LjUtMTYuOS0yNS42LTI2LjEtMS00LjctMS03LjMtMy42LTgtMy0uOC02LjYtMS02LjMtNC42IC4zLTMuMyAxLjQtOC4xLTIuOC04LjItNC41LS4xLTEzLjIgMS4xLTI1LjYgMTAtMTIuMyA4LjktMTYuNCAxNi44LTE3LjcgMjEuMS0xLjQgNC4yIDMuNiA0LjYgNi44IDUuNHpNNjIwLjIgNDA2LjdMNDcxLjQgMTk4LjhjLTEzLjItMTguNS0yNi42LTIzLjQtNTYuNC0zOS4xLTExLjItNS45LTE0LjItMTAuOS0zMC41LTI4LjktMS0xLjEtMi45LS45LTMuNiAuNS00Ni4zIDg4LjgtNDcuMSA4Mi44LTQ5IDk0LjgtMS43IDEwLjctMS4zIDIwIC4zIDI5LjggMS45IDEyIDYuNiAyMy41IDEzLjcgMzMuNEw0OTQuOCA0OTcuMmM3LjYgMTAuNiAyMC4yIDE2LjIgMzMuMSAxNC43IDQwLjMtNC45IDc4LTMyIDk1LjctNjguNiA1LjQtMTEuOSA0LjMtMjUuOS0zLjQtMzYuNnoiXQogICAgfTsKICAgIGZhR29vZ2xlUGx1c0cgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsdXMtZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMGQ1IiwgIk0zODYuMyAyMjguNWMxLjggOS43IDMuMSAxOS40IDMuMSAzMiAwIDEwOS44LTczLjYgMTg3LjUtMTg0LjQgMTg3LjUtMTA2LjEgMC0xOTItODUuOS0xOTItMTkyUzk4LjkgNjQgMjA1IDY0YzUxLjkgMCA5NS4xIDE4LjkgMTI4LjYgNTAuM2wtNTIuMSA1MGMtMTQuMS0xMy42LTM5LTI5LjYtNzYuNS0yOS42LTY1LjUgMC0xMTguOSA1NC4yLTExOC45IDEyMS4zUzEzOS41IDM3Ny4zIDIwNSAzNzcuM2M3NiAwIDEwNC41LTU0LjcgMTA5LTgyLjhsLTEwOSAwIDAtNjYgMTgxLjMgMCAwIDB6bTE4NS40IDYuNGwwLTU1LjctNTYgMCAwIDU1LjctNTUuNyAwIDAgNTYgNTUuNyAwIDAgNTUuNyA1NiAwIDAtNTUuNyA1NS43IDAgMC01Ni01NS43IDB6Il0KICAgIH07CiAgICBmYUdpdGh1YkFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXRodWItYWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMTMiLCAiTTIwMi4xIDMyOC43YzAgMjAuOS0xMC45IDU1LjEtMzYuNyA1NS4xcy0zNi43LTM0LjItMzYuNy01NS4xIDEwLjktNTUuMSAzNi43LTU1LjEgMzYuNyAzNC4yIDM2LjcgNTUuMXpNNDk2IDI3OC4yYzAgMzEuOS0zLjIgNjUuNy0xNy41IDk1LTM3LjkgNzYuNi0xNDIuMSA3NC44LTIxNi43IDc0LjgtNzUuOCAwLTE4Ni4yIDIuNy0yMjUuNi03NC44LTE0LjYtMjktMjAuMi02My4xLTIwLjItOTUgMC00MS45IDEzLjktODEuNSA0MS41LTExMy42LTUuMi0xNS44LTcuNy0zMi40LTcuNy00OC44IDAtMjEuNSA0LjktMzIuMyAxNC42LTUxLjggNDUuMyAwIDc0LjMgOSAxMDguOCAzNiAyOS02LjkgNTguOC0xMCA4OC43LTEwIDI3IDAgNTQuMiAyLjkgODAuNCA5LjIgMzQtMjYuNyA2My0zNS4yIDEwNy44LTM1LjIgOS44IDE5LjUgMTQuNiAzMC4zIDE0LjYgNTEuOCAwIDE2LjQtMi42IDMyLjctNy43IDQ4LjIgMjcuNSAzMi40IDM5IDcyLjMgMzkgMTE0LjJ6bS02NC4zIDUwLjVjMC00My45LTI2LjctODIuNi03My41LTgyLjYtMTguOSAwLTM3IDMuNC01NiA2LTE0LjkgMi4zLTI5LjggMy4yLTQ1LjEgMy4yLTE1LjIgMC0zMC4xLS45LTQ1LjEtMy4yLTE4LjctMi42LTM3LTYtNTYtNi00Ni44IDAtNzMuNSAzOC43LTczLjUgODIuNiAwIDg3LjggODAuNCAxMDEuMyAxNTAuNCAxMDEuM2w0OC4yIDBjNzAuMyAwIDE1MC42LTEzLjQgMTUwLjYtMTAxLjN6bS04Mi42LTU1LjFjLTI1LjggMC0zNi43IDM0LjItMzYuNyA1NS4xczEwLjkgNTUuMSAzNi43IDU1LjEgMzYuNy0zNC4yIDM2LjctNTUuMS0xMC45LTU1LjEtMzYuNy01NS4xeiJdCiAgICB9OwogICAgZmFHZXRQb2NrZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2V0LXBvY2tldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjY1IiwgIk00MDcuNiA2NGwtMzY3IDBDMTguNSA2NCAwIDgyLjUgMCAxMDQuNkwwIDIzOS44QzAgMzY0LjUgOTkuNyA0NjQgMjI0LjIgNDY0IDM0OC4yIDQ2NCA0NDggMzY0LjUgNDQ4IDIzOS44bDAtMTM1LjJDNDQ4IDgyLjIgNDMwLjMgNjQgNDA3LjYgNjR6bS0xNjIgMjY4LjVjLTEyLjQgMTEuOC0zMS40IDExLjEtNDIuNCAwLTExMy43LTEwOC45LTExNC45LTEwNS4xLTExNC45LTEyMy4yIDAtMTYuOSAxMy44LTMwLjcgMzAuNy0zMC43IDE3IDAgMTYuMSAzLjggMTA1LjIgODkuMyA5MC42LTg2LjkgODguNi04OS4zIDEwNS41LTg5LjNzMzAuNyAxMy44IDMwLjcgMzAuN2MwIDE3LjgtMi45IDE1LjctMTE0LjggMTIzLjJ6Il0KICAgIH07CiAgICBmYUdsaWRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdsaWRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTUiLCAiTTI1Mi44IDE0OC42YzAgOC44LTEuNiAxNy43LTMuNCAyNi40LTUuOCAyNy44LTExLjYgNTUuOC0xNy4zIDgzLjYtMS40IDYuMy04LjMgNC45LTEzLjcgNC45LTIzLjggMC0zMC41LTI2LTMwLjUtNDUuNSAwLTI5LjMgMTEuMi02OC4xIDM4LjUtODMuMSA0LjMtMi41IDkuMi00LjIgMTQuMS00LjIgMTEuNCAwIDEyLjMgOC4zIDEyLjMgMTcuOXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMzg0IDI2N2MwLTUuMS0yMC44LTM3LjctMjUuNS0zOS41LTIuMi0uOS03LjItMi4zLTkuNi0yLjMtMjMuMSAwLTM4LjcgMTAuNS01OC4yIDIxLjVsLS41LS41YzQuMy0yOS40IDE0LjYtNTcuMiAxNC42LTg3LjQgMC00NC42LTIzLjgtNjIuNy02Ny41LTYyLjctNzEuNyAwLTEwOCA3MC44LTEwOCAxMjMuNSAwIDU0LjcgMzIgODUgODYuMyA4NSA3LjUgMCA2LjktLjYgNi45IDIuMy0xMC41IDgwLjMtNTYuNSA4Mi45LTU2LjUgNTguOSAwLTI0LjQgMjgtMzYuNSAyOC4zLTM4LS4yLTcuNi0yOS4zLTE3LjItMzYuNy0xNy4yLTIxLjEgMC0zMi43IDMzLTMyLjcgNTAuNiAwIDMyLjMgMjAuNCA1NC43IDUzLjMgNTQuNyA0OC4yIDAgODMuNC00OS43IDk0LjMtOTEuNyA5LjQtMzcuNyA3LTM5LjQgMTIuMy00Mi4xIDIwLTEwLjEgMzUuOC0xNi44IDU4LjQtMTYuOCAxMS4xIDAgMTkgMi4zIDM2LjcgNS4yIDEuOCAuMSA0LjEtMS43IDQuMS0zLjV6Il0KICAgIH07CiAgICBmYUJpdHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYml0eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzdhIiwgIk04Ni41IDY3LjJjOTUuNC04OS4yIDI0Ni4xLTkxLjIgMzQzLjEgMy44IDE0LjMgMTQuMS02LjQgMzcuMS0yMi40IDIxLjUtODQuOC04Mi40LTIxNS44LTgwLjMtMjk4LjktMy4yLTE2LjMgMTUuMS0zNi41LTguMy0yMS44LTIyLjF6bTk4LjkgNDE4LjZjMTkuMyA1LjcgMjkuMy0yMy42IDcuOS0zMC0xMTIuMi0zMy45LTE3NS44LTE0OS43LTE0Ny41LTI2MSA1LTE5LjYtMjQuOS0yOC4xLTMwLjItNy4xLTMyLjEgMTI3LjQgNDEuMSAyNTkuOCAxNjkuOCAyOTguMXptMTQ4LjEtMmMxMjEuOS00MC4yIDE5Mi45LTE2Ni45IDE2NC40LTI5MS00LjUtMTkuNy0zNC45LTEzLjgtMzAgNy45IDI0LjIgMTA3LjctMzcuMSAyMTcuOS0xNDMuMiAyNTMuNC0yMS4yIDctMTAuNCAzNiA4LjggMjkuN3ptLTYyLjktNzlsLjItNzEuOGMwLTguMi02LjYtMTQuOC0xNC44LTE0LjhzLTE0LjggNi43LTE0LjggMTQuOGwtLjIgNzEuOGMwIDguMiA2LjYgMTQuOCAxNC44IDE0LjhzMTQuOC02LjYgMTQuOC0xNC44em03MS0yNjljMi4xIDkwLjkgNC43IDEzMS45LTg1LjUgMTMyLjUtOTIuNS0uNy04Ni45LTQ0LjMtODUuNS0xMzIuNSAwLTIxLjgtMzIuNS0xOS42LTMyLjUgMGwwIDcxLjZjMCA2OS4zIDYwLjcgOTAuOSAxMTggOTAuMSA1Ny4zIC44IDExOC0yMC44IDExOC05MC4xbDAtNzEuNmMwLTE5LjYtMzIuNS0yMS44LTMyLjUgMHoiXQogICAgfTsKICAgIGZhV3BleHBsb3JlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGV4cGxvcmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZGUiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTQ4MCAwYTIyNCAyMjQgMCAxIDAgLTQ0OCAwIDIyNCAyMjQgMCAxIDAgNDQ4IDB6TTE2MC45IDEyNC42bDg2LjkgMzcuMS0zNy4xIDg2LjktODYuOS0zNy4xIDM3LjEtODYuOXptMTEwIDE2OS4xbDQ2LjYgOTQtMTQuNiAwLTUwLTEwMC00OC45IDEwMC0xNCAwIDUxLjEtMTA2LjktMjIuMy05LjQgNi0xNCA2OC42IDI5LjEtNiAxNC4zLTE2LjUtNy4xek0yNTkuMSAxNzcuNGw2OC42IDI5LjQtMjkuNCA2OC4zLTY4LjMtMjkuMSAyOS4xLTY4LjZ6bTgwLjMgNDIuOWw1NC42IDIzLjEtMjMuNCA1NC4zLTU0LjMtMjMuMSAyMy4xLTU0LjN6Il0KICAgIH07CiAgICBmYU1lZ2Fwb3J0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1lZ2Fwb3J0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTMiLCAiTTIyMi41IDIwOS42bDAgNjYuMiAzMy41IDMzLjUgMzMuMy0zMy4zIDAtNjYuNC0zMy40LTMzLjQtMzMuNCAzMy40ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQwMS4xIDQyMi40bC0yNi4xIDE5LjItMjYtMTkuMiAwLTY1LjUtMzMuNC0zMy40LTMzLjQgMzMuNCAwIDY1LjUtMjYuMiAxOS4yLTI2LjEtMTkuMiAwLTY1LjUtMzMuNC0zMy40LTMzLjUgMzMuNCAwIDY1LjUtMjYuMSAxOS4yLTI2LjEtMTkuMiAwLTg3IDU5LjUtNTkuNSAwLTg3LjkgNTkuNS01OS41IDAtNzUuNiAyNi4xLTE5LjIgMjYuMSAxOS4yIDAgNzUuNiA1OS41IDU5LjUgMCA4Ny42IDU5LjcgNTkuNyAwIDg3LjEtLjEgMHoiXQogICAgfTsKICAgIGZhTWRiID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1kYiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmOGNhIiwgIk0xNy40IDE2MC40bC0xMC40IDE5MS42IDQzLjkgMCA1LjYtNzkuOCAyNy45IDc5LjggNDQuNyAwIDI1LjUtNzcuNCA0LjggNzcuNCA0NS41IDAtMTIuOC0xOTEuNi00NS41IDAtNDAuNyAxMTcuMy00Mi4zLTExNy4zLTQ2LjMgMHptMjgxIDBsLTQ3LjkgMCAwIDE5MS42IDQ3LjkgMHM5NSAuOCA5NC4yLTk1LjhjLS44LTk0LjItOTQuMi05NS44LTk0LjItOTUuOGwwIDB6bS0xLjIgMTQ2LjVsMC0xMDIuMXM0NiA0LjMgNDYuOCA1MC42LTQ2LjggNTEuNS00Ni44IDUxLjVsMCAwem0yMzguMy03NC4yYzcuMi0xMS40IDEwLTI1IDgtMzguMy01LjMtMzUuOC01NS4xLTM0LjMtNTUuMS0zNC4zbC01MS45IDAgMCAxOTEuNiA0NS41IDBzODcgNC44IDg3LTYzLjhjMC00My4xLTMzLjUtNTUuMS0zMy41LTU1LjFsMCAwem0tNTEuOS0zMS45czEzLjYtMS42IDE2IDkuNmMxLjQgNi43LTQgMTItNCAxMmwtMTIgMCAwLTIxLjZ6bS0uMSAxMDkuNWwuMS0yNC45IDAtMTguMiAuMSAwczQxLjYtNC43IDQxLjIgMjIuNGMtLjMgMjUuNy00MS4zIDIwLjctNDEuMyAyMC43bDAgMHoiXQogICAgfTsKICAgIGZhUGFnZTQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFnZTQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNkNyIsICJNMjU2IDUwNEMxMTkgNTA0IDggMzkzIDggMjU2UzExOSA4IDI1NiA4YzIwLjkgMCA0MS4zIDIuNiA2MC43IDcuNUw1MC4zIDM5MiAyNTYgMzkyIDI1NiA1MDR6bTAtMTQzLjZsMC0yMTMuNi0xNDkuNCAyMTMuNiAxNDkuNCAwek0zNTIgMzkybDAgOTIuN2M0NS43LTE5LjIgODQuNS01MS43IDExMS40LTkyLjdMMzUyIDM5MnptNTcuNC0xMzguMmwtMjEuMiA4LjQgMjEuMiA4LjMgMC0xNi43em0tMjAuMyA1NC41Yy02LjcgMC04IDYuMy04IDEyLjlsMCA3LjcgMTYuMiAwIDAtMTBjMC01LjktMi4zLTEwLjYtOC4yLTEwLjZ6TTUwNCAyNTZjMCAzNy4zLTguMiA3Mi43LTIzIDEwNC40bC0xMjkgMCAwLTMzMy4xQzQ0MS4zIDY0LjggNTA0IDE1My4xIDUwNCAyNTZ6TTM2OC40IDE0My42bDY4LjIgMCAwLTQ3LjYtMTMuOSAwIDAgMzIuNi0xMy45IDAgMC0yOS42LTEzLjkgMCAwIDI5LjYtMTIuNyAwIDAtMzIuNi0xMy45IDAgMCA0Ny42IC4xIDB6bTY4LjEgMTg1LjNsLTI2LjUgMCAwLTExYzAtMTUuNC01LjYtMjUuMi0yMC45LTI1LjItMTUuNCAwLTIwLjcgMTAuNi0yMC43IDI1LjlsMCAyNS4zIDY4LjIgMCAwLTE1LS4xIDB6bTAtMTAzbC02OC4yIDI5LjcgMCAxMi40IDY4LjIgMjkuNSAwLTE2LjYtMTQuNC01LjcgMC0yNi41IDE0LjQtNS45IDAtMTYuOXptLTQuOC02OC41bC0zNS42IDAgMCAyNi42IDEzLjkgMCAwLTEyLjIgMTEgMGM4LjYgMTUuOCAxLjMgMzUuMy0xOC42IDM1LjMtMjIuNSAwLTI4LjMtMjUuMy0xNS41LTM3LjdsLTExLjYtMTAuNmMtMTYuMiAxNy41LTEyLjIgNjMuOSAyNy4xIDYzLjkgMzQgMCA0NC43LTM1LjkgMjkuMy02NS4zeiJdCiAgICB9OwogICAgZmFUaGVSZWRZZXRpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZS1yZWQteWV0aSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjlkIiwgIk00ODguNyAyNDEuN2wyMC43IDcuMWMtOS42LTIzLjktMjMuOS0zNy0zMS43LTQ0LjhsNy4xLTE4LjJjLjIgMCAxMi4zLTI3LjgtMi41LTMwLjctLjYtMTEuMy02LjYtMjctMTguNC0yNy03LjYtMTAuNi0xNy43LTEyLjMtMzAuNy01LjktOS4xIDQuNC0xNy42IDEwLTI1LjMgMTYuNS01LjMtNi40LTMgLjQtMy0yOS44LTM3LjEtMjQuMy00NS40LTExLjctNzQuOCAzbC41IC41Yy0yMi03LjctNDUuMS0xMi4yLTY4LjQtMTMuMy01LjUtOC43LTE4LjYtMTkuMS0yNS4xLTI1LjFsMjQuOCA3LjFjLTUuNS01LjUtMjYuOC0xMi45LTM0LjItMTUuMiAxOC4yLTQuMSAyOS44LTIwLjggNDIuNS0zMy0zNC45LTEwLjEtNjcuOS01LjktOTcuOSAxMS44bDEyLTQ0LjItMS44LS41Yy0zMS42IDI0LjItMzMgNDEuOS0zMy43IDQ1LjUtLjktMi40LTYuMy0xOS42LTE1LjItMjctMy4zIDguMS0zLjUgMTcuMS0uNSAyNS4zIDMgOC40IDUuOSAxNC44IDguNCAxOC45LTE2LTMuMy0yOC4zLTQuOS00OS4yIDBsLTMuNyAwIDMzIDE0LjNjLTIwLjIgMTguOS0zNi4xIDQxLjktNDYuNyA2Ny40bC0xLjcgOC40IDEuNyAxLjcgNy42LTQuN2MtMy4zIDExLjYtNS4zIDE5LjQtNi42IDI1LjgtMTAuOSAxMi4yLTIwLjIgMjUuOC0yNy44IDQwLjMtMTUgMS0zMS44IDEwLjgtNDAuMyAxNC4zbDMgMy40IDI4LjggMWMtLjUgMS0uNyAyLjItMS4yIDMuMi03LjMgNi40LTM5LjggMzcuNy0zMyA4MC43bDIwLjItMjIuNGMuNSAxLjcgLjcgMy40IDEuMiA1LjIgMCAyNS41IC40IDg5LjYgNjQuOSAxNTAuNSA0My42IDQwIDk2IDYwLjIgMTU3LjUgNjAuMiAxMjEuNyAwIDIyMy04Ny4zIDIyMy0yMTEuNSA2LjgtOS43LTEuMiAzIDE2LjctMjUuMWwxMyAxNC4zIDIuNS0uNWMtMS44LTExLjctNC44LTIzLjEtOC45LTM0LjItMS41LTQuOC0zLjgtOS4zLTYuOC0xMy4zbDAgMHpNMzk4LjUgMTExLjJsLS41IDIxLjljNS41IDE4LjEgMTYuOSAxNy4yIDIyLjQgMTcuMmwtMy40LTQuNyAyMi40LTUuNGMtOSAuNS0xOCAuNS0yNyAwIDEyLjgtMi4xIDMzLjMtMjkgNDMtMTEuMyAzLjQgNy42IDYuNCAxNy4yIDkuMyAyNy44bDEuNy01LjljLTEuMy01LTEuOC0xMC4xLTEuNy0xNS4yIDUuNCAuNSA4LjggMy40IDkuMyAxMC4xIC41IDYuNCAxLjcgMTQuOCAzLjQgMjUuM2w0LjctMTEuM2M0LjYgMCA0LjUtMy42LTIuNSAyMC43LTIwLjktOC43LTM1LjEtOC40LTQ2LjUtOC40bDE4LjItMTZjLTI1LjMgOC4yLTMzIDEwLjgtNTQuOCAyMC45LTEuMS01LjQtNS0xMy41LTE2LTE5LjktMy4yIDMuOC0yLjggLjktLjcgMTQuOGwtMi41IDBjLTEuMi04LjItNC4xLTE2LTguNC0yMy4xbDQuMi0zLjRjOC40LTcuMSAxMS44LTE0LjMgMTAuNi0yMS45LS41LTYuNC01LjQtMTMuNS0xMy41LTIwLjcgNS42LTMuNCAxNS4yLS40IDI4LjMgOC41em0tMzkuNi0xMC4xYzIuNyAxLjkgMTEuNCA1LjQgMTguOSAxNy4yIDQuMiA4LjQgNCA5LjggMy40IDExLjEtLjUgMi40LS41IDQuMy0zIDcuMS0xLjcgMi41LTUuNCA0LjctMTEuOCA3LjYtNy42LTEzLTE2LjUtMjMuNi0yNy44LTMxLjJsMjAuMy0xMS44em0tMjY3LjQgNDJsMS4yLTEuN2MxLjItMi45IDQuMi03LjYgOS4zLTE1LjJsMi41LTMuNC0xMyAxMi4zIDUuNC00LjctMTAuMSA5LjMtNC4yIDEuMmMxMi4zLTI0LjEgMjMuMS00MS4zIDMyLjUtNTAuMiA5LjMtOS4zIDE2LTE2IDIwLjItMTkuNGwtNi40IDEuMmMtMTEuMy00LjItMTkuNC03LjEtMjQuOC04LjQgMi41LS41IDMuNy0uNSAzLjItLjUgMTAuMyAwIDE3LjUgLjUgMjAuOSAxLjIgNS4yIDEuNyAxMC42IDIuNSAxNiAyLjVsLjUtMS43LTguNC0zNS44IDEzLjUgMjljMi44LTQuNCA0LjgtOS4yIDUuOS0xNC4zIDEuNy02LjQgNS40LTEzIDEwLjEtMTkuNHM3LjYtMTAuNiA5LjMtMTEuM2MtMi42IDguMy00LjcgMTYuOC02LjQgMjUuM2wtMS43IDcuMS0uNSA0LjcgMi41IDIuNWMyMS45LTEzLjUgNDUuNS0xOS40IDcxLjMtMTguOWwyMS4xIC41Yy0xMS44IDEzLjUtMjcuOCAyMS45LTQ4LjUgMjQuOC03LjcgMS40LTE1LjYgMi40LTIzLjQgMi45bC0uMi0uNS0yLjUtMS4yYy00LjgtMS05LjctLjMtMTQgMi0yLjUtLjItNC45LS41LTcuMS0uN2wtMi41IDEuNyAuNSAxLjJjMiAuMiAzLjkgLjUgNi4yIC43bC0yIDMuNCAzLjQtLjUtMTAuNiAxMS4zYy00LjIgMy01LjQgNi40LTQuMiA5LjNsNS40LTMuNCAxLjIgMGM2LjEtOC4yIDE1LjItMTMuNiAyNS4zLTE1LjJsMC0zYzYuNCAuNSAxMyAxIDE5LjQgMS4yIDYuNCAwIDguNCAuNSA1LjQgMS4yIDcuMiA0IDE0LjEgOC42IDIwLjcgMTMuNSAxMy41IDEwLjEgMjMuNiAyMS45IDMwIDM1LjQgOC44IDE4LjIgMTMuNSAzNy4xIDEzLjUgNTYuNiAwIDkuNS0xIDE5LTMgMjguMy0zLjUgMTUuOS04LjkgMzEuMy0xNiA0NmwyLjUgLjVjMTguMi0xOS43IDQxLjktMTYgNDkuMi0xNmwtNi40IDUuOSAyMi40IDE3LjctMS43IDMwLjdjLTUuNC0xMi4zLTE2LjUtMjEuMS0zMy0yNy44IDE2LjUgMTQuOCAyMy42IDIxLjEgMjEuOSAyMC4yLTQuOC0yLjgtMy41LTEuOS0xMC44LTMuNyA0LjEgNC4xIDE3LjUgMTguOCAxOC4yIDIwLjdsLjIgLjItLjIgLjJjMCAxLjggMS42LTEuMi0xNCAyMi45LTc1LjItMTUuMy0xMDYuMy00Mi43LTE0MS4yLTYzLjJsMTEuOCAxLjJjLTExLjgtMTguNS0xNS42LTE3LjctMzguNC0yNi4xbDEwLjYtOC40Yy04LjgtMy0xOC4yLTMtMjguMyAuNWw3LjYtMTAuNi0xLjItMS43Yy0xNC45IDQuMy0xOS44IDkuMi0yMi42IDExLjMtMS4xLTUuNS0yLjgtMTIuNC0xMi4zLTI4LjhsLTEuMiAyNy0xMy4yLTVjMS41LTI1LjIgNS40LTUwLjUgMTMuMi03NC42ek0zNjggNDczLjFjLTQ5LjkgMjUtNTYuMSAyMi40LTU5IDIzLjktMjkuOC0xMS44LTUwLjktMzEuNy02My41LTU4LjhsMzAgMTYuNWMtOS44LTkuMy0xOC4zLTE2LjUtMzguNC00NC4zbDExLjggMjMuMS0xNy43LTcuNmMxNC4yIDIxLjEgMjMuNSA1MS43IDY2LjYgNzMuNS0xMjAuOCAyNC4yLTE5OS03Mi4xLTIwMC45LTc0LjMgMTEuMSA5LjIgMjIuOSAxNy41IDM1LjQgMjQuOCAzLjQgMS43IDcuMSAyLjUgMTAuMSAxLjJsLTE2LTIwLjdjOS4yIDQuMiA5LjUgNC41IDY5LjEgMjktNDIuNS0yMC43LTczLjgtNDAuOC05My4yLTYwLjItLjUgNi40LTEuMiAxMC4xLTEuMiAxMC4xIDguNyA3LjMgMTUuOCAxNi40IDIwLjcgMjYuNi0zOS0xOC45LTU3LjYtNDcuNi03MS4zLTgyLjYgNDkuOSA1NS4xIDExOC45IDM3LjUgMTIwLjUgMzcuMSAzNC44IDE2LjQgNjkuOSAyMy42IDExMy45IDEwLjYgMy4zIDAgMjAuMyAxNyAyNS4zIDM5LjFsNC4yLTMtMi41LTIzLjZjOSA5IDI0LjkgMjIuNiAzNC40IDEzLTE1LjYtNS4zLTIzLjUtOS41LTI5LjUtMzEuNyA0LjYgNC4yIDcuNiA5IDI3LjggMTVsMS4yLTEuMi0xMC41LTE0LjJjMTEuNy00LjgtMy41IDEgMzItMTAuOCA0LjMgMzQuMyA5IDQ5LjIgLjcgODkuNXpNNDgzLjMgMjU4LjdsLTIuNSAuNSAzIDkuM2MtMy41IDUuOS0yMy43IDQ0LjMtNzEuNiA3OS43LTM5LjUgMjkuOC03Ni42IDM5LjEtODAuOSA0MC4zbC03LjYtNy4xLTEuMiAzIDE0LjMgMTYtNy4xLTQuNyAzLjQgNC4yLTEuMiAwLTIxLjktMTMuNSA5LjMgMjYuNi0xOS0yNy45LTEuMiAyLjUgNy42IDI5Yy02LjEtOC4yLTIxLTMyLjYtNTYuOC0zOS42bDMyLjUgMjEuMmMtMzEuMiA0LjctNjMgMi41LTkzLjItNi40LTQuMi0xLjItOC45LTIuNS0xMy41LTQuMmwxLjItMy00NC44LTIyLjQgMjYuMSAyMi40Yy01Ny43IDkuMS0xMTMtMjUuNC0xMjYuNC04My40TDI5LjMgMjg0LjggNyAzMDcuMWMxOS41LTU3LjUgMjUuNi01Ny45IDUxLjQtNzAuMS05LjEtNS4zLTEuNi0zLjMtMzguNC05LjMgMTUuOC01LjggMzMtMTUuNCA3MyA1LjIgMS4yLS43IDIuNC0xLjMgMy43LTEuNyAuNi0zLjIgLjQtLjggMS0xMS44IDMuOSAxMCAzLjYgOC43IDMgOS4zbDEuNyAuNWMxMi43LTYuNSA4LjktNC41IDE3LTguOWwtNS40IDEzLjUgMjIuMy01LjgtOC40IDguNCAyLjUgMi41YzQuNS0xLjggMzAuMyAzLjQgNDAuOCAxNmwtMjMuNi0yLjVjMzkuNCAyMyA1MS41IDU0IDU1LjggNjkuNmwxLjctMS4yYy0yLjgtMjIuMy0xMi40LTMzLjktMTYtNDAuMSA0LjIgNSAzOS4yIDM0LjYgMTEwLjQgNDYtMTEuMy0uNS0yMy4xIDUuNC0zNC45IDE4LjlsNDYuNy0yMC4yLTkuMyAyMS45YzcuNi0xMC4xIDE0LjgtMjMuNiAyMS4yLTM5LjZsMC0uNSAxLjItMy0xLjIgMTZjMTMuNS00MS44IDI1LjMtNzguNSAzNS40LTEwOS43bDEzLjUtMjcuOCAwLTItNS40LTQuMiAxMC4xIDAgNS45IDQuMiAyLjUtMS4yLTMuNC0xNiAxMi4zIDE4LjkgNDEuOC0yMC4yLTE0LjggMTMgLjUgMi45IDE3LjctLjVjMTEuMSAuNCAyMi4xIDEuOCAzMyA0LjJsLTIzLjYgMi41LTEuMiAzIDI2LjYgMjMuMWM5LjkgOS45IDE4LjkgMjAuNiAyNyAzMi0xMS4yLTMuMy0xMC4zLTMuNC0yMS4yLTMuNGwxMi4zIDMyLjUtOC45LTEyLjh6bS02LjEtNzEuM2wtMy45IDEzLTE0LjMtMTEuOCAxOC4yLTEuMnptLTI1NC44IDcuMWMxLjcgMTAuNiA0LjcgMTcuNyA4LjggMjEuOS05LjMgNi42LTI3LjUgMTMuOS00Ni41IDE2bC41IDEuMmM4LjMgMS4zIDE2LjkgLjQgMjQuOC0yLjVsLTcuMSAxM2M0LjItMS43IDEwLjEtNy4xIDE3LjctMTQuOCAxMS45LTUuNSAxMi43LTUuMSAyMC4yLTE2LTEyLjctNi40LTE1LjctMTMuNy0xOC40LTE4Ljh6bTMuNy0xMDIuM2MtNi40LTMuNC0xMC42IDMtMTIuMyAxOC45czIuNSAyOS41IDExLjggMzkuNiAxOC4yIDEwLjYgMjYuMSAzIDMuNC0yMy42LTExLjMtNDcuN2MtMy41LTUuNy04LjQtMTAuNS0xNC4zLTEzLjhsMCAwem0tNC43IDQ2LjNjNS40IDIuMiAxMC41IDEuOSAxMi4zLTEwLjZsMC00LjctMS4yIC41Yy00LjMtMy4xLTIuNS00LjUtMS43LTYuMmwuNS0uNWMtLjktMS4yLTUtOC4xLTEyLjUgNC43LS41LTEzLjUgLjUtMjEuOSAzLTI0LjggMS4yLTIuNSA0LjctMS4yIDExLjMgNC4yIDYuNCA1LjQgMTEuMyAxNiAxNS4yIDMyLjUgNi41IDI4LTE5LjggMjYuMi0yNi45IDQuOXptLTQ1LTUuNWMxLjYgLjMgOS4zLTEuMSA5LjMtMTQuOGwtLjUgMGMtNS40LTEuMS0yLjItNS41LS43LTUuOS0xLjctMy0zLjQtNC4yLTUuNC00LjctOC4xIDAtMTEuNiAxMi43LTguMSAyMS4yIC41IDEuMSAxLjMgMiAyLjIgMi44czIgMS4yIDMuMiAxLjRsMCAwem00MC4xLTUwLjFsLTIuNSAuNSAuNSAzYzkuMS0uNSAxOC4xIDEuNSAyNi4xIDUuOS0yLjUtNS41LTEwLTE0LjMtMjguMy0xNC4zbC41IDIuNSAzLjcgMi40em0tNzEuOCA0OS40YzIxLjcgMTYuOCAxNi41IDIxLjQgNDYuNSAyMy42bC0yLjktNC43YzguNC03LjIgMTMuNy0xNy4zIDE0LjgtMjguMyAxLjctMTYtMS4yLTI5LjUtOC44LTQxLjNsMTMtNy42YzAtLjMgMC0uNi0uMS0uOXMtLjItLjYtLjQtLjhjLTIuMi0uOS00LjYtMS4yLTctLjlzLTQuNiAxLjItNi41IDIuNmMtMTIuNyA2LjctMjggMjAuOS0yOSAyMi40LTEuNyAxLjctMy40IDUuOS01LjQgMTMuNS0xLjkgNy43LTIuOSAxNS42LTIuOSAyMy42LTQuNy04LTEwLjUtNi40LTE5LjktNS45bDcuMSA3LjZjLTE2LjUgMC0yMy4zIDE1LjQtMjMuNiAxNiA2LjggMCA0LjYtNy42IDMwLTEyLjMtNC4zLTYuMy0zLjMtNS00LjktNi42em0xOC43LTE4LjdjMS4yLTcuNiAzLjQtMTMgNi40LTE3LjIgNS40LTYuNCAxMC42LTEwLjEgMTYtMTEuOCA0LjItMS43IDcuMSAxLjIgMTAuMSA5LjMgMi41IDguMiAzLjUgMTYuOCAzIDI1LjMtLjUgOS4zLTMuNCAxNy4yLTguNCAyMy4xLTIuOSAzLjQtNS40IDUuOS02LjQgNy42LTMuOCAuNC03LjYgLjItMTEuMy0uNWwtNy4xLTMuNC01LjQtNi40Yy44LTEwIDEuMy0xOC44IDMuMS0yNnptNDIgNTYuMWMtMzQuOCAxNC40LTM0LjcgMTQtMzYuMSAxNC4zLTIwLjggNC43LTE5LTI0LjQtMTguOS0yNC44bDUuOS0xLjItLjUtMi41Yy0yMC4yLTIuNi0zMSA0LjItMzIuNSA0LjkgLjUgLjUgMyAzLjQgNS45IDkuMyA0LjItNi40IDguOC0xMC4xIDE1LjItMTAuNi0xLjcgMTEuMi0xLjIgMjIuNyAxLjcgMzMuNyAuMSAuNSAyLjYgMTcuNCAyNy41IDI0LjEgMTEuMyAzIDI3IDEuMiA0OC45LTUuNGwtOS4yIC41Yy00LjItMTQuOC02LjQtMjQuOC01LjktMjkuNSAxMS4zLTguOCAyMS45LTExLjMgMzAuNy03LjZsMi41IDAtMTEuOC03LjYtNy4xIC41Yy01LjkgMS4yLTEyLjMgNC4yLTE5LjQgOC40bDMuMS02LjV6Il0KICAgIH07CiAgICBmYUppcmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamlyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2IxIiwgIk00OTguNSAyNDEuN2MtNzIuOS03Mi43LTE2OS40LTE2OS45LTI0MS41LTI0MS43LTE2NS41IDE2NC45LTI0Mi41IDI0MS43LTI0Mi41IDI0MS43LTcuOSA3LjktNy45IDIwLjcgMCAyOC43IDEzMi44IDEzMi4zIDYxLjggNjEuNSAyNDIuNSAyNDEuNiAzNzkuNC0zNzggMTUuNy0xNi43IDI0MS41LTI0MS43IDgtNy45IDgtMjAuNyAwLTI4LjZ6TTI1NyAzMzEuN2wtNzYtNzUuNyA3Ni03NS43IDc2IDc1LjctNzYgNzUuN3oiXQogICAgfTsKICAgIGZhRmVkZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmVkZXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5NyIsICJNNTg2IDI4NC41bDUzLjMtNTkuOS02Mi40IDAtMjEuNyAyNC44LTIyLjUtMjQuOC0xMTguNyAwIDAtMTYgNTYuMSAwIDAtNDguMS0xNTEuMiAwIDAgNzUuNS0uNSAwYy05LjYtMTEtMjEuNS0xNC44LTM1LjQtMTQuOC0yOC40IDAtNDkuOCAxOS40LTU3LjMgNDQuOS0xOC01OS40LTk3LjQtNTcuNi0xMjEuOS0xNGwwLTI0LjItNTQuOCAwIDAtMjYuMiA2MCAwIDAtNDEuMS0xMDkgMCAwIDE4NC40IDQ5IDAgMC03Ny41IDQ4LjkgMGMtMS41IDUuNy0yLjMgMTEuOC0yLjMgMTguMiAwIDczLjEgMTAyLjYgOTEuNCAxMzAuMiAyMy43bC00MiAwYy0xNC43IDIwLjktNDUuOCA4LjktNDUuOC0xNC42bDg1LjUgMGMzLjcgMzAuNSAyNy40IDU2LjkgNjAuMSA1Ni45IDE0LjEgMCAyNy02LjkgMzQuOS0xOC42bC41IDAgMCAxMS45IDIxMi4yIDAgMjIuMS0yNSAyMi4zIDI1IDY0LjQgMC01NC02MC41ek0xMzkuMyAyNjcuOWM2LjEtMjYuMyA0MS43LTI1LjYgNDYuNSAwbC00Ni41IDB6bTE1My40IDQ4LjljLTM0LjYgMC0zNC02Mi44IDAtNjIuOCAzMi42IDAgMzQuNSA2Mi44IDAgNjIuOHptMTY3LjggMTkuMWwtOTQuNCAwIDAtMTY2LjUgOTUgMCAwIDMwLjItNTYuMSAwIDAgMzMuOSA1NS41IDAgMCAyOC4xLTU2LjEgMCAwIDQ0LjcgNTYuMSAwIDAgMjkuNnptLTQ1LjktMzkuOGwwLTI0LjQgNTYuMSAwIDAtNDQgNTAuNyA1Ny01MC43IDU3IDAtNDUuNi01Ni4xIDB6bTEzOC42IDEwLjNsLTI2LjEgMjkuNS0zOC4xIDAgNDUuNi01MS4yLTQ1LjYtNTEuMiAzOS43IDAgMjYuNiAyOS4zIDI1LjYtMjkuMyAzOC41IDAtNDUuNCA1MSA0NiA1MS40LTQwLjUgMC0yNi4zLTI5LjV6Il0KICAgIH07CiAgICBmYUV2ZXJub3RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV2ZXJub3RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY4MzkiLCAiTTEyMS4xIDEzMi4yYzEuNiAyMi4zLTE3LjYgMjEuNi0yMS42IDIxLjYtNjguOSAwLTczLjYtMS04My42IDMuMy0uNiAuMi0uNyAwLS40LS40TDEyNC4xIDQ2LjRjLjQtLjQgLjYtLjIgLjQgLjQtNC40IDEwLTMuNCAxNS4xLTMuNCA4NS40em03OSAzMDhjLTE0LjctMzcuMSAxMy03Ni45IDUyLjUtNzYuNiAxNy41IDAgMjIuNiAyMy4yIDcuOSAzMS40LTYuMiAzLjMtMjQuOSAxLjctMjUuMSAxOS4yIDAgMTcuMSAxOS43IDI1IDMxLjIgMjQuOSA2IDAgMTEuOS0xLjIgMTcuNS0zLjVzMTAuNi01LjcgMTQuOC05LjkgNy42LTkuMyA5LjktMTQuOCAzLjUtMTEuNSAzLjUtMTcuNWwwLS4xYzAtMTEuNi03LjgtNDcuMi00Ny41LTU1LjMtNy43LTEuNS02NS02LjMtNjguNC01MC41LTMuNyAxNi45LTE3LjQgNjMuNS00My4xIDY5LjEtOC43IDEuOS02OS43IDcuNi0xMTIuOS0zNi44IDAgMC0xOC42LTE1LjItMjguMi01OC0zLjQtMTUuNy05LjMtMzkuNy0xMS4xLTYyIDAtMTggMTEuMS0zMC40IDI1LjEtMzIuMiA4MSAwIDkwIDIuMyAxMDEtNy44IDkuOC05LjIgNy44LTE1LjUgNy44LTEwMi44IDEtOC4zIDcuOC0zMC44IDUzLjQtMjQuMSA2IC45IDMxLjkgNC4yIDM3LjUgMzAuNkwyOTAgNzQuOGMyMC40IDMuNyA3MC45IDcgODAuNiA1Ny45IDIyLjcgMTIxLjEgOC45IDIzOC41IDcuOCAyMzguNS0xNiAxMTQuNC0xMTEuMSAxMDguOS0xMTEuMSAxMDguOS0xOS0uMi01NC4yLTkuNC02Ny4zLTM5LjhsMCAwek0yODEgMjM1LjRjLTEgMS45LTIuMiA2IC45IDcgMTQuMSA0LjkgMzkuOCA2LjggNDUuOSA1LjUgMy4xLS4yIDMuMS00LjQgMi41LTYuNi0zLjUtMjEuOC00MC44LTI2LjUtNDkuMi01LjlsMCAweiJdCiAgICB9OwogICAgZmFVc2IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXNiIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyODciLCAiTTYzMy41IDI1NmMwIDMuMS0xLjcgNi4xLTQuNSA3LjVMNTM5LjkgMzE3Yy0xLjQgLjgtMi44IDEuNC00LjUgMS40LTEuNCAwLTMuMS0uMy00LjUtMS4xLTIuOC0xLjctNC41LTQuNS00LjUtNy44bDAtMzUuNi0yMzAuNyAwYzI1LjMgMzkuNiA0MC41IDEwNi45IDY5LjYgMTA2LjlsMjYuNyAwIDAtMjYuOGMwLTUgMy45LTguOSA4LjktOC45bDg5LjEgMGM1IDAgOC45IDMuOSA4LjkgOC45bDAgODkuMWMwIDUtMy45IDguOS04LjkgOC45bC04OS4xIDBjLTUgMC04LjktMy45LTguOS04LjlsMC0yNi43LTI2LjcgMGMtNzUuNCAwLTgxLjEtMTQyLjUtMTI0LjctMTQyLjVsLTEwMC4zIDBjLTguMSAzMC42LTM1LjkgNTMuNS02OSA1My41LTM5LjMtLjEtNzEuMy0zMi4xLTcxLjMtNzEuNHMzMi03MS4zIDcxLjMtNzEuM2MzMy4xIDAgNjEgMjIuOCA2OSA1My41IDM5LjEgMCA0My45IDkuNSA3NC42LTYwLjQgNDAuMS04OS4xIDU4LjEtODIuMSAxMDguOS04Mi4xIDcuNS0yMC45IDI3LTM1LjYgNTAuNC0zNS42IDI5LjUgMCA1My41IDIzLjkgNTMuNSA1My41cy0yMy45IDUzLjUtNTMuNSA1My41Yy0yMy40IDAtNDIuOS0xNC44LTUwLjQtMzUuNmwtMjkuOCAwYy0yOS4xIDAtNDQuMyA2Ny40LTY5LjYgMTA2LjlsMzAyLjEgMCAwLTM1LjZjMC0zLjMgMS43LTYuMSA0LjUtNy44czYuNC0xLjQgOC45IC4zTDYyOSAyNDguOGMyLjggMS4xIDQuNSA0LjEgNC41IDcuMnoiXQogICAgfTsKICAgIGZhQW5ncnljcmVhdGl2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmdyeWNyZWF0aXZlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNmUiLCAiTTY0MCAyMzguMmwtMy4yIDI4LjItMzQuNSAyLjMtMiAxOC4xIDM0LjUtMi4zLTMuMiAyOC4yLTM0LjQgMi4yLTIuMyAyMC4xIDM0LjQtMi4yLTMgMjYuMS02NC43IDQuMSAxMi43LTExMy4yLTQ3LjMgMTE1LjQtMzEuOSAyLTIzLjgtMTE3LjggMzAuMy0yIDEzLjYgNzkuNCAzMS43LTgyLjQgOTMuMS02LjJ6TTQyNi44IDM3MS41bDI4LjMtMS44IDEyLjktMTIwLjEtMjguNCAxLjktMTIuOCAxMjB6TTE2MiAzODguMWwtMTkuNC0zNi0zLjUgMzcuNC0yOC4yIDEuNyAyLjctMjkuMWMtMTEgMTgtMzIgMzQuMy01Ni45IDM1LjgtMzIuOCAyLTU5LjctMjAuOS01Ni40LTU4LjIgMi42LTI5LjMgMjYuNy02Mi44IDY3LjUtNjUuNCAzNy43LTIuNCA0Ny42IDIzLjIgNTEuMyAyOC44bDIuOC0zMC44IDM4LjktMi41YzIwLjEtMS4zIDM4LjcgMy43IDQyLjUgMjMuN2wyLjYtMjYuNiA2NC44LTQuMi0yLjcgMjcuOS0zNi40IDIuNC0xLjcgMTcuOSAzNi40LTIuMy0yLjcgMjcuOS0zNi40IDIuMy0xLjkgMTkuOSAzNi4zLTIuMy0yLjEgMjAuOCA1NS0xMTcuMiAyMy44LTEuNiAzMi4xIDExMC42IDguOS04NS42LTIyLjMgMS40IDIuOS0yNy45IDc1LTQuOS0zIDI4LTI0LjMgMS42LTkuNyA5MS45LTU4IDMuNy00LjMtMTUuNi0zOS40IDIuNS04IDE2LjMtMTI2LjIgNy43em0tNDQuMy03MC4ybC0yNi40IDEuN2MtNi43LTEyLjQtMTQuNC0xNi42LTI2LjMtMTUuOC0xOSAxLjItMzMuMyAxNy41LTM0LjYgMzMuMy0xLjQgMTYgNy4zIDMyLjUgMjguNyAzMS4yIDEyLjgtLjggMjEuMy04LjYgMjguOS0xOC45bDI3LTEuNyAyLjctMjkuOHptNTYuMS03LjdjMS4yLTEyLjktNy42LTEzLjYtMjYuMS0xMi40TDE0NSAzMjYuM2MxNC4yLS45IDI3LjUtMi4xIDI4LjgtMTYuMXpNMTk0LjkgMzgxbDUuOC02MGMtNSAxMy41LTE0LjcgMjEuMS0yNy45IDI2LjZMMTk0LjkgMzgxem0xMzUuNC00NWwtNy45LTM3LjgtMTUuOCAzOS4zIDIzLjctMS41ek0xNjAuMiAyNjEuNGwtNC4zLTE3LjUtMzkuNiAyLjYtOC4xIDE4LjItMzEuOSAyLjEgNTctMTIxLjkgMjMuOS0xLjYgMzAuNyAxMDIgOS45LTEwNC43IDI3LTEuOCAzNy44IDYzLjYgNi41LTY2LjYgMjguNS0xLjktNCA0MS4yYzcuNC0xMy41IDIyLjktNDQuNyA2My42LTQ3LjUgNDAuNS0yLjggNTIuNCAyOS4zIDUzLjQgMzAuM2wzLjMtMzIgMzkuMy0yLjdjMTIuNy0uOSAyNy44IC4zIDM2LjMgOS43bC00LjQtMTEuOSAzMi4yLTIuMiAxMi45IDQzLjIgMjMtNDUuNyAzMS0yLjItNDMuNiA3OC40LTQuOCA0NC4zLTI4LjQgMS45IDQuOC00NC4zLTE1LjgtNDNjMSAyMi4zLTkuMiA0MC4xLTMyIDQ5LjZsMjUuMiAzOC44LTM2LjQgMi40LTE5LjItMzYuOC00IDM4LjMtMjguNCAxLjkgMy4zLTMxLjVjLTYuNyA5LjMtMTkuNyAzNS40LTU5LjYgMzgtMjYuMiAxLjctNDUuNi0xMC4zLTU1LjQtMzkuMmwtNCA0MC4zLTI1IDEuNi0zNy42LTYzLjMtNi4zIDY2LjItNTYuOCAzLjd6bTI3Ni42LTgyLjFjMTAuMi0uNyAxNy41LTIuMSAyMS42LTQuMyA0LjUtMi40IDctNi40IDcuNi0xMi4xIC42LTUuMy0uNi04LjgtMy40LTEwLjQtMy42LTIuMS0xMC42LTIuOC0yMi45LTJsLTIuOSAyOC44ek0zMjcuNyAyMTRjNS42IDUuOSAxMi43IDguNSAyMS4zIDcuOSA0LjctLjMgOS4xLTEuOCAxMy4zLTQuMSA1LjUtMyAxMC42LTggMTUuMS0xNC4zbC0zNC4yIDIuMyAyLjQtMjMuOSA2My4xLTQuMyAxLjItMTItMzEuMiAyLjFjLTQuMS0zLjctNy44LTYuNi0xMS4xLTguMS00LTEuNy04LjEtMi44LTEyLjItMi41LTggLjUtMTUuMyAzLjYtMjIgOS4yLTcuNyA2LjQtMTIgMTQuNS0xMi45IDI0LjQtMS4xIDkuNiAxLjQgMTcuMyA3LjIgMjMuM3ptLTIwMS4zIDguMmwyMy44LTEuNi04LjMtMzcuNi0xNS41IDM5LjJ6Il0KICAgIH07CiAgICBmYU1penVuaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXp1bmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjYyIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0xNzYgMzU5LjljLTMxLjQgMTAuNi01OC44IDI3LjMtODAgNDguMkw5NiAxMzZjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDIyMy45ek0yOTYgMzUwYy0xMi45LTItMjYuMi0zLjEtMzkuOC0zLjEtMTMuOCAwLTI3LjIgMS4xLTQwLjIgMy4xbDAtMjE0YzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAyMTR6bTEyMCA1Ny43Yy0yMS4yLTIwLjgtNDguNi0zNy40LTgwLTQ4TDMzNiAxMzZjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDI3MS43eiJdCiAgICB9OwogICAgZmFJdGNoSW8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaXRjaC1pbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNhIiwgIk03MS45IDM0LjhDNTAuMiA0Ny43IDcuNCA5Ni44IDcgMTA5LjdsMCAyMS4zYzAgMjcuMSAyNS4zIDUwLjggNDguMiA1MC44IDI3LjYgMCA1MC41LTIyLjggNTAuNS01MCAwIDI3LjEgMjIuMiA1MCA0OS44IDUwczQ5LTIyLjggNDktNTBjMCAyNy4xIDIzLjYgNTAgNTEuMiA1MGwuNSAwYzI3LjYgMCA1MS4yLTIyLjggNTEuMi01MCAwIDI3LjEgMjEuNSA1MCA0OSA1MHM0OS44LTIyLjggNDkuOC01MGMwIDI3LjEgMjMgNTAgNTAuNSA1MCAyMyAwIDQ4LjMtMjMuOCA0OC4zLTUwLjhsMC0yMS4zYy0uNC0xMi45LTQzLjItNjIuMS02NC45LTc1LTY3LjQtMi4zLTExNC4yLTIuNy0xODQtMi43UzkxLjEgMzMuMSA3MS45IDM0Ljh6TTIwNC4yIDE2OS4yYy0yMiAzOC40LTc3LjkgMzguNy05OS44IC4yLTEzLjIgMjMuMS00My4yIDMyLjEtNTYgMjcuNy0zLjkgNDAuMi0xMy43IDIzNy4xIDE3LjcgMjY5LjIgODAgMTguNyAzMDIuMSAxOC4xIDM3OS44IDAgMzEuNi0zMi4zIDIxLjMtMjMyIDE3LjctMjY5LjItMTIuOSA0LjQtNDIuOS00LjYtNTYtMjcuNy0yMiAzOC41LTc3LjggMzguMS05OS44LS4yLTcuMSAxMi41LTIzIDI4LjktNTEuOCAyOC45LTEwLjQgLjMtMjAuOC0yLjItMjkuOS03LjNzLTE2LjctMTIuNi0yMS45LTIxLjZsMCAwem0tNDEuNiA1My44YzE2LjUgMCAzMS4xIDAgNDkuMiAxOS44IDI5LjMtMyA1OC45LTMgODguMiAwIDE4LjItMTkuNyAzMi44LTE5LjcgNDkuMi0xOS43IDUyLjMgMCA2NS4yIDc3LjUgODMuOSAxNDQuNCAxNy4zIDYyLjItNS41IDYzLjctMzQgNjMuNy00Mi4xLTEuNi02NS41LTMyLjItNjUuNS02Mi44LTM5LjMgNi40LTEwMS45IDguOC0xNTUuNiAwIDAgMzAuNi0yMy4zIDYxLjItNjUuNSA2Mi44LTI4LjQtLjEtNTEuMi0xLjYtMzMuOS02My43IDE4LjctNjcgMzEuNi0xNDQuNCA4My45LTE0NC40bDAtLjF6TTI1NiAyNzAuOHMtNDQuNCA0MC44LTUyLjQgNTUuMmwyOS0xLjIgMCAyNS4zYzAgMS41IDIxLjMgLjIgMjMuMyAuMiAxMS42IC41IDIzLjMgMSAyMy4zLS4ybDAtMjUuMyAyOSAxLjJjLTgtMTQuNS01Mi40LTU1LjItNTIuNC01NS4ybC4xIDB6Il0KICAgIH07CiAgICBmYVdpbmRvd3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2luZG93cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTdhIiwgIk0wIDkzLjdsMTgzLjYtMjUuMyAwIDE3Ny40LTE4My42IDAgMC0xNTIuMXpNMCA0MTguM2wxODMuNiAyNS4zIDAtMTc1LjItMTgzLjYgMCAwIDE0OS45em0yMDMuOCAyOGwyNDQuMiAzMy43IDAtMjExLjYtMjQ0LjIgMCAwIDE3Ny45em0wLTM4MC42bDAgMTgwLjEgMjQ0LjIgMCAwLTIxMy44LTI0NC4yIDMzLjd6Il0KICAgIH07CiAgICBmYVN0dW1ibGV1cG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0dW1ibGV1cG9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTQiLCAiTTUwMi45IDI2NmwwIDY5LjdjMCA2Mi4xLTUwLjMgMTEyLjQtMTEyLjQgMTEyLjQtNjEuOCAwLTExMi40LTQ5LjgtMTEyLjQtMTExLjNsMC03MC4yIDM0LjMgMTYgNTEuMS0xNS4yIDAgNzAuNmMwIDE0LjcgMTIgMjYuNSAyNi43IDI2LjVTNDE3IDM1Mi43IDQxNyAzMzhsMC03MiA4NS45IDB6TTI3OC4yIDIwNy44bDM0LjMgMTYgNTEuMS0xNS4yIDAtMzUuNmMwLTYwLjUtNTEuMS0xMDktMTEyLjEtMTA5LTYwLjggMC0xMTIuMSA0OC4yLTExMi4xIDEwOC4ybDAgMTYyLjRjMCAxNC45LTEyIDI2LjctMjYuNyAyNi43Uzg2IDM0OS41IDg2IDMzNC42bDAtNjguNi04NiAwIDAgNjkuN2MwIDYyIDUwLjMgMTEyLjMgMTEyLjQgMTEyLjMgNjEuNiAwIDExMi40LTQ5LjUgMTEyLjQtMTEwLjhsMC0xNjAuM2MwLTE0LjcgMTItMjYuNyAyNi43LTI2LjdzMjYuNyAxMiAyNi43IDI2LjdsMCAzMC45eiJdCiAgICB9OwogICAgZmFHb29nbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTAiLCAiTTUwMCAyNjEuOEM1MDAgNDAzLjMgNDAzLjEgNTA0IDI2MCA1MDQgMTIyLjggNTA0IDEyIDM5My4yIDEyIDI1NlMxMjIuOCA4IDI2MCA4YzY2LjggMCAxMjMgMjQuNSAxNjYuMyA2NC45bC02Ny41IDY0LjljLTg4LjMtODUuMi0yNTIuNS0yMS4yLTI1Mi41IDExOC4yIDAgODYuNSA2OS4xIDE1Ni42IDE1My43IDE1Ni42IDk4LjIgMCAxMzUtNzAuNCAxNDAuOC0xMDYuOWwtMTQwLjggMCAwLTg1LjMgMjM2LjEgMGMyLjMgMTIuNyAzLjkgMjQuOSAzLjkgNDEuNHoiXQogICAgfTsKICAgIGZhRGlzY29yZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNjb3JkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzOTIiLCAiTTQ5Mi41IDY5LjhjLS4yLS4zLS40LS42LS44LS43LTM4LjEtMTcuNS03OC40LTMwLTExOS43LTM3LjEtLjQtLjEtLjggMC0xLjEgLjFzLS42IC40LS44IC44Yy01LjUgOS45LTEwLjUgMjAuMi0xNC45IDMwLjYtNDQuNi02LjgtODkuOS02LjgtMTM0LjQgMC00LjUtMTAuNS05LjUtMjAuNy0xNS4xLTMwLjYtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4yLTEuMS0uMmMtNDEuMyA3LjEtODEuNiAxOS42LTExOS43IDM3LjEtLjMgLjEtLjYgLjQtLjggLjctNzYuMiAxMTMuOC05Ny4xIDIyNC45LTg2LjkgMzM0LjUgMCAuMyAuMSAuNSAuMiAuOHMuMyAuNCAuNSAuNmM0NC40IDMyLjkgOTQgNTggMTQ2LjggNzQuMiAuNCAuMSAuOCAuMSAxLjEgMHMuNy0uNCAuOS0uN2MxMS4zLTE1LjQgMjEuNC0zMS44IDMwLTQ4LjggLjEtLjIgLjItLjUgLjItLjhzMC0uNS0uMS0uOC0uMi0uNS0uNC0uNi0uNC0uMy0uNy0uNGMtMTUuOC02LjEtMzEuMi0xMy40LTQ1LjktMjEuOS0uMy0uMi0uNS0uNC0uNy0uNnMtLjMtLjYtLjMtLjkgMC0uNiAuMi0uOSAuMy0uNSAuNi0uN2MzLjEtMi4zIDYuMi00LjcgOS4xLTcuMSAuMy0uMiAuNi0uNCAuOS0uNHMuNyAwIDEgLjFjOTYuMiA0My45IDIwMC40IDQzLjkgMjk1LjUgMCAuMy0uMSAuNy0uMiAxLS4ycy43IC4yIC45IC40YzIuOSAyLjQgNiA0LjkgOS4xIDcuMiAuMiAuMiAuNCAuNCAuNiAuN3MuMiAuNiAuMiAuOS0uMSAuNi0uMyAuOS0uNCAuNS0uNiAuNmMtMTQuNyA4LjYtMzAgMTUuOS00NS45IDIxLjgtLjIgLjEtLjUgLjItLjcgLjRzLS4zIC40LS40IC43LS4xIC41LS4xIC44IC4xIC41IC4yIC44YzguOCAxNyAxOC44IDMzLjMgMzAgNDguOCAuMiAuMyAuNiAuNiAuOSAuN3MuOCAuMSAxLjEgMGM1Mi45LTE2LjIgMTAyLjYtNDEuMyAxNDcuMS03NC4yIC4yLS4yIC40LS40IC41LS42cy4yLS41IC4yLS44YzEyLjMtMTI2LjgtMjAuNS0yMzYuOS04Ni45LTMzNC41em0tMzAyIDI2Ny43Yy0yOSAwLTUyLjgtMjYuNi01Mi44LTU5LjJzMjMuNC01OS4yIDUyLjgtNTkuMmMyOS43IDAgNTMuMyAyNi44IDUyLjggNTkuMiAwIDMyLjctMjMuNCA1OS4yLTUyLjggNTkuMnptMTk1LjQgMGMtMjkgMC01Mi44LTI2LjYtNTIuOC01OS4yczIzLjQtNTkuMiA1Mi44LTU5LjJjMjkuNyAwIDUzLjMgMjYuOCA1Mi44IDU5LjIgMCAzMi43LTIzLjIgNTkuMi01Mi44IDU5LjJ6Il0KICAgIH07CiAgICBmYUhhY2tlck5ld3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFja2VyLW5ld3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFkNCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMjEuMiAyMjkuMmwtLjIgMGMuMS0uMSAuMi0uMyAuMy0uNCAwIC4xIDAgLjMtLjEgLjR6bTIxOCA1My45bDAgMTAwLjktMzEuNCAwIDAtMTAyLjctNzkuOC0xNTMuMyAzNy4zIDBjNTIuNSA5OC4zIDQ5LjIgMTAxLjIgNTkuMyAxMjUuNiAxMi4zLTI3IDUuOC0yNC40IDYwLjYtMTI1LjZsMzQuOCAwLTgwLjggMTU1LjF6Il0KICAgIH07CiAgICBmYUVsZXZlbnR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsZXZlbnR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbIjExdHkiXSwgImU3ZDYiLCAiTTYxNS4zIDE2OC41YzIuMyAwIDQuNiAuNyA2LjYgMi4yIDEuOSAxLjQgMy4xIDMuMyAzLjggNSAxLjQgMy4zIDEuOCA3LjMgMS44IDExLjMgMCAyLjItLjMgNC45LS43IDcuNmwwIC40LTUwLjkgMjY0LjkgMCAwYy00IDIyLjEtOC41IDM5LjQtMTMuNiA1MS43LTUgMTIuMS0xMC45IDIxLjYtMTguNiAyN2wwIDBjLTcuNSA1LjMtMTYuOSA3LjctMjcuNiA4bC0zIDBjLTE2IDAtMjkuMy00LjItMzYuOS0xNC44LS4xLS4xLS4xLS4xLS4yLS4yLS4xLS4yLS4zLS40LS41LS42bDAgMGMtMS44LTIuNC0yLjUtNS4yLTIuOS03LjQtLjUtMi44LS43LTYuMS0uNy05LjggMC03LjMgLjYtMTMuNSAyLjEtMTguMiAxLjQtNC40IDQuOC0xMC40IDEyLjItMTAuNGwxLjMgLjFjLjIgMCAuNCAuMSAuNSAuMSAuMyAuMSAuNiAuMSAuOCAuMiAuNiAuMSAxLjMgLjMgMi4yIC42bDcuNiAyLjIgLjEgMCA3LjYgMi4xYy45IC4yIDEuNyAuNCAyLjIgLjUgLjQgLjEgLjYgLjEgLjcgLjEgMCAwIC4xIDAgLjItLjEgLjEtLjEgLjQtLjIgLjgtLjYgLjktLjkgMi4yLTIuNiAzLjYtNS43IDIuNi01LjggNC4yLTE0LjcgNC4yLTI3LjQgMC0uNy0uMy0zLjQtMS4zLTguOS0uOS01LjEtMi4zLTEyLjItNC4yLTIxLjFsLTU2LTIzMi45LS4xLS40IDAtLjNjLS40LTIuNy0uNy01LjMtLjctNy4zIDAtMy43IC40LTcuNSAxLjctMTAuNiAuNy0xLjYgMS44LTMuNCAzLjUtNC45IDEuOS0xLjUgNC4yLTIuMyA2LjUtMi4zbDM0LjYgMGM0LjYgMCA4LjcgMS43IDExLjkgNWwxLjMgMS41YzEuMiAxLjYgMiAzLjQgMi43IDUuMiAuOSAyLjQgMS41IDUuMSAyIDguMWwzMC40IDE2MS4yIDIzLjgtMTYwYy44LTUuOCAyLjItMTEuNCA1LjEtMTUuMSAzLTMuOCA3LjItNS44IDEyLTUuOGwyNCAwek0zNzUuMSAzNC42YzIuNiAwIDUuMSAuNyA3LjQgMi4zIDIuMiAxLjUgMy43IDMuNiA0LjcgNS43IDEuOSA0IDIuNSA5LjEgMi41IDE0LjVsMCAxMTEuMmMwIC4xIDAgLjIgMCAuM2wzMi40IDBjMi41IDAgNSAuNiA3LjIgMi4xIDIuMiAxLjQgMy43IDMuNCA0LjggNS41IDIgMy45IDIuNiA4LjggMi42IDEzLjlsMCAxNS40YzAgNS0uNiA5LjgtMi42IDEzLjctMS4xIDItMi42IDQtNC44IDUuNC0yLjIgMS40LTQuNyAyLTcuMSAybC0zMi41IDAgMCAxNDUuOGMwIDEwLjggLjcgMTkuNSAyIDI2LjIgMS40IDYuOSAzLjEgMTAuOSA0LjcgMTIuOSAxLjIgMS41IDIuMiAyLjUgMy4xIDMuMmwyLjIgMS40IC4xIC4xIDIuOSAuOGMxLjIgLjIgMi42IC4zIDQuMyAuM2wyMC4zIDBjNC41IDAgOC45IDEuNyAxMS44IDUuOCAyLjYgMy42IDMuMyA4LjEgMy4zIDEyLjJsMCAxNy4yYzAgNC41LS44IDkuMy0zLjQgMTMuMS0zIDQuMi03LjUgNi0xMi4zIDZsMCAwLTI5LjEgLjFjLTggMC0xNS0uNi0yMS4yLTEuNy02LjctMS4zLTEzLjQtNC4xLTIwLjEtOC4xLTcuMi00LjQtMTMtMTAuMy0xNy41LTE3LjgtNC41LTcuNS03LjktMTcuNS0xMC41LTI5LjUtMi42LTEyLjItMy45LTI2LjYtMy45LTQzbDAtMTQ0LjktMTMuNCAwYy0yLjQgMC00LjktLjYtNy4xLTItMi4yLTEuNC0zLjctMy40LTQuOC01LjQtMi0zLjktMi42LTguNy0yLjYtMTMuN2wwLTE1LjRjMC01LjEgLjYtMTAgMi42LTEzLjkgMS4xLTIuMSAyLjYtNCA0LjgtNS41IDIuMi0xLjUgNC43LTIuMSA3LjItMi4xbDEzLjQgMCAwLS42IDUuMi0xMTEuMiAwLS4xIC4zLTMuOWMuNS0zLjggMS4zLTcuNCAyLjctMTAuMyAyLjEtNC4yIDYtNy45IDExLjgtNy45bDI4LjYgMHptLTI2OCAxMS43YzEuOCAuMyAzLjYgLjkgNS4zIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMyA4LjQgMi4zIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMSAwIDAtLjIgMC0uMyAwIDAgMC0uMiAwLS40IDBsMCAwYy0uMSAwLS4zIDAtLjQgMC0uMSAwLS4yIDAtLjIgMC0yLjIgLjEtNC41LS40LTYuNi0xLjctMi4zLTEuNC0zLjgtMy40LTQuNy01LjMtMS44LTMuNy0yLjMtOC40LTIuMy0xM2wwLTI3LjRjMC00LjQgLjctOC44IDIuNi0xMi40IDIuMS0zLjkgNS41LTYuNiA5LjgtNy42bDc1LjUtMTkuNWMxLjQtLjQgMi45LS41IDQuNC0uNWwxLjggLjF6bTE0My44LS41YzEuOCAuMyAzLjYgLjkgNS4yIDIuMSAyLjEgMS41IDMuNSAzLjUgNC40IDUuNCAxLjcgMy43IDIuMiA4LjQgMi4yIDEzLjJsMCAzNzcuOGMwIDYuNy0uNiAxMi42LTIuNCAxNy4xLS45IDIuMy0yLjMgNC43LTQuNCA2LjUtMi4zIDItNS4xIDMtOC4xIDNsLTQzLjcgMGMtMyAwLTUuOC0xLjEtOC4xLTMuMS0yLjEtMS45LTMuNC00LjMtNC4yLTYuNS0xLjctNC41LTIuMy0xMC4zLTIuMy0xN2wwLTMxNS44Yy00LjggMS4yLTguNyAyLjItMTEuNSAyLjktMS45IC41LTMuNCAuOC00LjQgMS4xLS41IC4xLS45IC4yLTEuMiAuMy0uMSAwLS4zIC4xLS41IC4xLS4xIDAtLjIgMC0uMyAuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjIgMC0uNCAwbDAgMGMtLjEgMC0uMiAwLS4zIDAtLjEgMC0uMiAwLS4zIDAtMi4yIC4xLTQuNS0uNC02LjYtMS43LTIuMy0xLjQtMy44LTMuNC00LjctNS4zLTEuOC0zLjctMi4zLTguMy0yLjMtMTNsMC0yNy40YzAtNC40IC43LTguNyAyLjYtMTIuNCAyLjEtMy45IDUuNS02LjYgOS44LTcuNmw3NS40LTE5LjRjMS40LS40IDIuOS0uNSA0LjQtLjVsMS44IC4xeiJdCiAgICB9OwogICAgZmExMXR5ID0gZmFFbGV2ZW50eTsKICAgIGZhVGVhbXNwZWFrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRlYW1zcGVhayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGY5IiwgIk0xNTIuOCAzNy4yYy0zMi4yIDM4LjEtNTYuMSA4Mi42LTY5LjkgMTMwLjUgMCAuMi0uMSAuMy0uMSAuNS0zOS4zIDE2LjItNjYuOCA1NC44LTY2LjggOTkuOCAwIDU5LjYgNDguNCAxMDggMTA4IDEwOHMxMDgtNDguNCAxMDgtMTA4YzAtNTMuNS0zOC45LTk3LjktOTAtMTA2LjUgMTUuNy00MS44IDQwLjQtNzkuNiA3Mi4zLTExMC43IDEuOC0xLjYgNC0yLjYgNi4zLTMuMSAzNy4yLTExLjUgNzYuNy0xMy4zIDExNC44LTUuMiAxMTkuMyAyNS4xIDE5OC42IDEzOC4yIDE4MS43IDI1OC44LTguNCA2Mi42LTM4LjYgMTEyLjctODcuNyAxNTEuNC01MC4xIDM5LjctMTA3LjUgNTQuMy0xNzAuMiA1Mi4ybC0yNC0xYzEyLjQgMi44IDI1IDQuOSAzNy42IDYuMyA0MC43IDQuMiA4MS40IDIuMSAxMjAuMS0xMi41IDk0LTM1LjUgMTQ5LjMtMTAyLjMgMTYyLjktMjAyLjUgNC44LTUyLjYtNS44LTEwNS40LTMwLjgtMTUyLTcwLjQtMTMxLjktMjM0LjItMTgxLjYtMzY2LTExMS4yLTIuNCAxLjQtNC41IDMuMS02LjMgNS4ybC4xIDB6TTMwOS40IDQzMy45Yy0yLjEgMTEuNS00LjIgMjEuOS0xNC42IDMxLjMgNTMuMi0xIDEyMy4yLTI5LjIgMTYxLjgtOTcuMSAzOS43LTY5LjkgMzcuNi0xMzkuOS02LjMtMjA3LjgtMzYuNS01NS4zLTg5LjgtODIuNC0xNTYuNi04Ni42IDEuNSAyLjMgMy4yIDQuNCA1LjIgNi4zbDUuMiA2LjNjMjUuMSAzMS4zIDM3LjYgNjcuOSA0Mi44IDEwNy41IDIuMSAxNS43LTEgMzAuMy0xMy42IDQxLjgtNC4yIDMuMS01LjIgNi4zLTQuMiAxMC40bDcuMyAxNy43IDI5LjMgNTQuM2M1LjIgMTEuNSA0LjIgMTkuOC02LjMgMjguMi0zLjIgMi41LTYuNyA0LjYtMTAuNCA2LjNsLTE4LjggOC40IDMuMSAxMy42YzMuMSA2LjMgMSAxMi41LTMuMSAxNy43LTIuNSAyLjQtMy44IDUuOS0zLjEgOS40IDIuMSAxMS41LTIuMSAxOS44LTEyLjUgMjUuMS0yLjEgMS00LjIgNS4yLTUuMiA3LjNsMC0uMXptLTEzMy42LTMuMWMxNi43IDExLjUgMzQuNSAyMC45IDUzLjIgMjYuMSAyNCA1LjIgNDEuOC02LjMgNDQuOS0zMC4zIDEtOC40IDUuMi0xNC42IDEyLjUtMTcuNyA3LjMtNC4yIDguNC03LjMgMi4xLTEzLjZsLTkuNC04LjQgMTMuNi00LjJjNi4zLTIuMSA3LjMtNS4yIDUuMi0xMS41LTEuNC0zLTIuNC02LjItMy4xLTkuNC0zLjEtMTQuNi0yLjEtMTUuNyAxMS41LTE4LjggOC40LTMuMSAxNS43LTYuMyAyMS45LTEyLjUgMy4xLTIuMSAzLjEtNC4yIDEtOC40bC0xNi43LTMwLjNjLTEtMS45LTIuMS0zLjgtMy4xLTUuNy02LjQtMTEuNy0xMy0yMy42LTE1LjctMzcuMS0yLjEtOS40LTEtMTcuNyA4LjQtMjQgNS4yLTQuMiA4LjQtOS40IDguNC0xNi43LS40LTEwLjEtMS41LTIwLjMtMy4xLTMwLjMtNi4zLTM3LjYtMjMtNjguOS01MS4yLTk1LTUuMi00LjItOS40LTYuMy0xNi43LTQuMmwtMzUuNiAxMi43IDYgMy42YzYuMyAzLjcgMTIuMiA3LjMgMTcgMTIuMSAzMC4zIDI2LjEgNDEuOCA2MS42IDQ1LjkgMTAwLjIgMSA4LjQgMCAxNi43LTcuMyAyMS45LTguNCA1LjItMTAuNCAxMi41LTcuMyAyMC45IDQuOSAxMy4yIDEwLjQgMjYgMTYuNyAzOC42TDI5MS42IDMxOGMtNi4zIDguNC0xMy42IDExLjUtMjEuOSAxNC42LTEyLjUgMy4xLTE0LjYgNy4zLTEwLjQgMjAuOSAuNiAxLjUgMS40IDIuOCAyLjEgNC4yIDIuMSA1LjIgMSA4LjQtNC4yIDEwLjRsLTEyLjUgMy4xIDUuMiA0LjIgNC4yIDQuMmM0LjIgNS4yIDQuMiA4LjQtMi4xIDEwLjQtNy4zIDQuMi0xMS41IDkuNC0xMS41IDE3LjcgMCAxMi41LTcuMyAxOS44LTE4LjggMjQtMy44IDEtNy42IDEuNS0xMS41IDFsLTM0LjUtMi4xIC4xIC4yeiJdCiAgICB9OwogICAgZmFTdXBwbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3VwcGxlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZjkiLCAiTTY0MCAyNjIuNWMwIDY0LjEtMTA5IDExNi4xLTI0My41IDExNi4xLTI0LjggMC00OC42LTEuOC03MS4xLTUgNy43IC40IDE1LjUgLjYgMjMuNCAuNiAxMzQuNSAwIDI0My41LTU2LjkgMjQzLjUtMTI3LjEgMC0yOS40LTE5LjEtNTYuNC01MS4yLTc4IDYwIDIxLjEgOTguOSA1NS4xIDk4LjkgOTMuNHpNNDcuNyAyMjcuOWMtLjEtNzAuMiAxMDguOC0xMjcuMyAyNDMuMy0xMjcuNiA3LjkgMCAxNS42IC4yIDIzLjMgLjUtMjIuNS0zLjItNDYuMy00LjktNzEtNC45LTEzNC41IC40LTI0My40IDUyLjYtMjQzLjMgMTE2LjcgLjEgMzguMyAzOS4xIDcyLjMgOTkuMyA5My4zLTMyLjMtMjEuNS01MS41LTQ4LjYtNTEuNi03OHptNjAuMiAzOS45UzExOC40IDI4MSAxMzcuMiAyODFjMTcuOSAwIDI4LjQtMTEuNSAyOC40LTI1LjEgMC0yOC00MC4yLTI1LjEtNDAuMi0zOS43IDAtNS40IDUuMy05LjEgMTIuNS05LjEgNS43IDAgMTEuMyAyLjYgMTEuMyA2LjZsMCAzLjkgMTQuMiAwIDAtNy45YzAtMTIuMS0xNS40LTE2LjgtMjUuNC0xNi44LTE2LjUgMC0yOC41IDEwLjItMjguNSAyNC4xIDAgMjYuNiA0MC4yIDI1LjQgNDAuMiAzOS45IDAgNi42LTUuOCAxMC4xLTEyLjMgMTAuMS0xMS45IDAtMjAuNy0xMC4xLTIwLjctMTAuMWwtOC44IDEwLjl6bTEyMC44LTczLjZsMCA1NC40YzAgMTEuMy03LjEgMTcuOC0xNy44IDE3LjhzLTE3LjgtNi41LTE3LjgtMTcuN2wwLTU0LjUtMTUuOCAwIDAgNTVjMCAxOC45IDEzLjQgMzEuOSAzMy43IDMxLjkgMjAuMSAwIDMzLjQtMTMgMzMuNC0zMS45bDAtNTUtMTUuNyAwem0zNC40IDg1LjRsMTUuOCAwIDAtMjkuNSAxNS41IDBjMTYgMCAyNy4yLTExLjUgMjcuMi0yOC4xcy0xMS4yLTI3LjgtMjcuMi0yNy44bC0zOS4xIDAgMCAxMy40IDcuOCAwIDAgNzJ6bTE1LjgtNDNsMC0yOS4xIDEyLjkgMGM4LjcgMCAxMy43IDUuNyAxMy43IDE0LjQgMCA4LjktNS4xIDE0LjctMTQgMTQuN2wtMTIuNiAwem01NyA0M2wxNS44IDAgMC0yOS41IDE1LjUgMGMxNiAwIDI3LjItMTEuNSAyNy4yLTI4LjFzLTExLjItMjcuOC0yNy4yLTI3LjhsLTM5LjEgMCAwIDEzLjQgNy44IDAgMCA3MnptMTUuNy00M2wwLTI5LjEgMTIuOSAwYzguNyAwIDEzLjcgNS43IDEzLjcgMTQuNCAwIDguOS01IDE0LjctMTQgMTQuN2wtMTIuNiAwem01Ny4xIDM0LjhjMCA1LjggMi40IDguMiA4LjIgOC4ybDM3LjYgMGM1LjggMCA4LjItMi40IDguMi04LjJsMC0xMy0xNC4zIDAgMCA1LjJjMCAxLjctMSAyLjYtMi42IDIuNmwtMTguNiAwYy0xLjcgMC0yLjYtMS0yLjYtMi42bDAtNjEuMmMwLTUuNy0yLjQtOC4yLTguMi04LjJsLTE1LjQgMCAwIDEzLjQgNS4yIDBjMS43IDAgMi42IDEgMi42IDIuNmwwIDYxLjItLjEgMHptNjMuNCAwYzAgNS44IDIuNCA4LjIgOC4yIDguMmwzOC43IDBjNS43IDAgOC4yLTIuNCA4LjItOC4ybDAtMTMtMTQuMyAwIDAgNS4yYzAgMS43LTEgMi42LTIuNiAyLjZsLTE5LjcgMGMtMS43IDAtMi42LTEtMi42LTIuNmwwLTIwLjMgMjcuNyAwIDAtMTMuNC0yNy43IDAgMC0yMi40IDE5LjIgMGMxLjcgMCAyLjYgMSAyLjYgMi42bDAgNS4yIDE0LjIgMCAwLTEzYzAtNS43LTIuNS04LjItOC4yLTguMmwtNTEuNiAwIDAgMTMuNCA3LjggMCAwIDYzLjkgLjEgMHptNTguOS03NmwwIDUuOSAxLjYgMCAwLTUuOSAyLjcgMCAwLTEuMi03IDAgMCAxLjIgMi43IDB6bTUuNy0xLjJsMCA3LjEgMS41IDAgMC01LjcgMi4zIDUuNyAxLjMgMCAyLjMtNS43IDAgNS43IDEuNSAwIDAtNy4xLTIuMyAwLTIuMSA1LjEtMi4xLTUuMS0yLjQgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdHdpdHRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0d2l0dGVyLXNxdWFyZSJdLCAiZjA4MSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzUxLjMgMTk5LjNjMCA4Ni43LTY2IDE4Ni42LTE4Ni42IDE4Ni42LTM3LjIgMC03MS43LTEwLjgtMTAwLjctMjkuNCA1LjMgLjYgMTAuNCAuOCAxNS44IC44IDMwLjcgMCA1OC45LTEwLjQgODEuNC0yOC0yOC44LS42LTUzLTE5LjUtNjEuMy00NS41IDEwLjEgMS41IDE5LjIgMS41IDI5LjYtMS4yLTMwLTYuMS01Mi41LTMyLjUtNTIuNS02NC40bDAtLjhjOC43IDQuOSAxOC45IDcuOSAyOS42IDguMy05LTYtMTYuNC0xNC4xLTIxLjUtMjMuNnMtNy44LTIwLjItNy43LTMxYzAtMTIuMiAzLjItMjMuNCA4LjktMzMuMSAzMi4zIDM5LjggODAuOCA2NS44IDEzNS4yIDY4LjYtOS4zLTQ0LjUgMjQtODAuNiA2NC04MC42IDE4LjkgMCAzNS45IDcuOSA0Ny45IDIwLjcgMTQuOC0yLjggMjktOC4zIDQxLjYtMTUuOC00LjkgMTUuMi0xNS4yIDI4LTI4LjggMzYuMSAxMy4yLTEuNCAyNi01LjEgMzcuOC0xMC4yLTguOSAxMy4xLTIwLjEgMjQuNy0zMi45IDM0IC4yIDIuOCAuMiA1LjcgLjIgOC41eiJdCiAgICB9OwogICAgZmFUd2l0dGVyU3F1YXJlID0gZmFTcXVhcmVUd2l0dGVyOwogICAgZmFGb250QXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjUwMSwgNjI2OTQsICJmb250LWF3ZXNvbWUtZmxhZyIsICJmb250LWF3ZXNvbWUtbG9nby1mdWxsIl0sICJmMmI0IiwgIk05MS43IDk2QzEwNi4zIDg2LjggMTE2IDcwLjUgMTE2IDUyIDExNiAyMy4zIDkyLjcgMCA2NCAwUzEyIDIzLjMgMTIgNTJjMCAxNi43IDcuOCAzMS41IDIwIDQxbDAgNDE5IDY0IDAgMC02NCAzNzMuNiAwYzE0LjYgMCAyNi40LTExLjggMjYuNC0yNi40IDAtMy43LS44LTcuMy0yLjMtMTAuN0w0MzIgMjcyIDQ5My43IDEzMy4xYzEuNS0zLjQgMi4zLTcgMi4zLTEwLjcgMC0xNC42LTExLjgtMjYuNC0yNi40LTI2LjRMOTEuNyA5NnoiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWVGbGFnID0gZmFGb250QXdlc29tZTsKICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbCA9IGZhRm9udEF3ZXNvbWU7CiAgICBmYVdpcnNpbmRoYW5kd2VyayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aXJzaW5kaGFuZHdlcmsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid3NoIl0sICJlMmQwIiwgIk0xOC45IDQ3OS44bDgzLjQgMCAwLTExMi04My40IDQ3IDAgNjV6bTMyOSAwbDgyLjQgMCAwLTY1LTgyLjQtNDcgMCAxMTJ6bTAtNDQ4bDAgMjE5LjgtMTIzLjYtNzIuNC0xMjEuNyA3Mi40IDAtMjE5LjgtODMuNyAwIDAgMzYwLjggMjA1LjQtMTIyLjMgMjA2IDEyMi4zIDAtMzYwLjgtODIuMyAweiJdCiAgICB9OwogICAgZmFXc2ggPSBmYVdpcnNpbmRoYW5kd2VyazsKICAgIGZhQ29uZmx1ZW5jZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb25mbHVlbmNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3OGQiLCAiTTIuOCA0MTIuMmMtNC41IDcuNi0yLjEgMTcuNSA1LjUgMjIuMmwxMDUuOSA2NS4yYzcuNyA0LjcgMTcuNyAyLjQgMjIuNC01LjMgMC0uMSAuMS0uMiAuMS0uMiA2Ny4xLTExMi4yIDgwLjUtOTUuOSAyODAuOS0uNyA4LjEgMy45IDE3LjggLjQgMjEuNy03LjcgLjEtLjEgLjEtLjMgLjItLjRsNTAuNC0xMTQuMWMzLjYtOC4xLS4xLTE3LjYtOC4xLTIxLjMtMjIuMi0xMC40LTY2LjItMzEuMi0xMDUuOS01MC4zLTI0Ny45LTEyMC42LTMzMC44IDQ1LjctMzczLjEgMTEyLjZ6TTUxMC4yIDEwMC4xYzQuNS03LjYgMi4xLTE3LjUtNS41LTIyLjJMMzk4LjkgMTIuOGMtNy41LTUtMTcuNi0zLjEtMjIuNiA0LjQtLjIgLjMtLjQgLjYtLjYgMS02Ny4zIDExMi42LTgxLjEgOTUuNi0yODAuNiAuOS04LjEtMy45LTE3LjgtLjQtMjEuNyA3LjctLjEgLjEtLjEgLjMtLjIgLjRMMjIuNyAxNDEuM2MtMy42IDguMSAuMSAxNy42IDguMSAyMS4zIDIyLjIgMTAuNCA2Ni4zIDMxLjIgMTA2IDUwLjQgMjQ4IDEyMCAzMzAuOC00NS40IDM3My40LTExMi45eiJdCiAgICB9OwogICAgZmFEaWdnID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpZ2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFhNiIsICJNODEuNyAxNzIuM2wtODEuNyAwIDAgMTc0LjQgMTMyLjcgMCAwLTI1MC43LTUxIDAgMCA3Ni4zem0wIDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6TTM3OC45IDE3Mi4zbDAgMTc0LjQgODEuOCAwIDAgMjguNS04MS44IDAgMCA0MC44IDEzMy4xIDAgMC0yNDMuNy0xMzMuMSAwem04MS44IDEzMy40bC0zMC44IDAgMC05Mi4zIDMwLjggMCAwIDkyLjN6bS0yMzUuNiA0MWw4Mi4xIDAgMCAyOC41LTgyLjEgMCAwIDQwLjggMTMzLjMgMCAwLTI0My43LTEzMy4zIDAgMCAxNzQuNHptNTEuMi0xMzMuM2wzMC44IDAgMCA5Mi4zLTMwLjggMCAwLTkyLjN6TTE1My4zIDk2bDUxLjMgMCAwIDUxLTUxLjMgMCAwLTUxem0wIDc2LjNsNTEuMyAwIDAgMTc0LjQtNTEuMyAwIDAtMTc0LjR6Il0KICAgIH07CiAgICBmYVRocmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE4IiwgIk0zMzEuNSAyMzUuN2MyLjIgLjkgNC4yIDEuOSA2LjMgMi44IDI5LjIgMTQuMSA1MC42IDM1LjIgNjEuOCA2MS40IDE1LjcgMzYuNSAxNy4yIDk1LjgtMzAuMyAxNDMuMi0zNi4yIDM2LjItODAuMyA1Mi41LTE0Mi42IDUzbC0uMyAwYy03MC4yLS41LTEyNC4xLTI0LjEtMTYwLjQtNzAuMi0zMi4zLTQxLTQ4LjktOTguMS00OS41LTE2OS42bDAtLjVDMTcgMTg0LjMgMzMuNiAxMjcuMiA2NS45IDg2LjIgMTAyLjIgNDAuMSAxNTYuMiAxNi41IDIyNi40IDE2bC4zIDBjNzAuMyAuNSAxMjQuOSAyNCAxNjIuMyA2OS45IDE4LjQgMjIuNyAzMiA1MCA0MC42IDgxLjdsLTQwLjQgMTAuOGMtNy4xLTI1LjgtMTcuOC00Ny44LTMyLjItNjUuNC0yOS4yLTM1LjgtNzMtNTQuMi0xMzAuNS01NC42LTU3IC41LTEwMC4xIDE4LjgtMTI4LjIgNTQuNC0yNi4yIDMzLjMtMzkuOCA4MS41LTQwLjMgMTQzLjIgLjUgNjEuNyAxNC4xIDEwOS45IDQwLjMgMTQzLjMgMjggMzUuNiA3MS4yIDUzLjkgMTI4LjIgNTQuNCA1MS40LS40IDg1LjQtMTIuNiAxMTMuNy00MC45IDMyLjMtMzIuMiAzMS43LTcxLjggMjEuNC05NS45LTYuMS0xNC4yLTE3LjEtMjYtMzEuOS0zNC45LTMuNyAyNi45LTExLjggNDguMy0yNC43IDY0LjgtMTcuMSAyMS44LTQxLjQgMzMuNi03Mi43IDM1LjMtMjMuNiAxLjMtNDYuMy00LjQtNjMuOS0xNi0yMC44LTEzLjgtMzMtMzQuOC0zNC4zLTU5LjMtMi41LTQ4LjMgMzUuNy04MyA5NS4yLTg2LjQgMjEuMS0xLjIgNDAuOS0uMyA1OS4yIDIuOC0yLjQtMTQuOC03LjMtMjYuNi0xNC42LTM1LjItMTAtMTEuNy0yNS42LTE3LjctNDYuMi0xNy44bC0uNyAwYy0xNi42IDAtMzkgNC42LTUzLjMgMjYuM2wtMzQuNC0yMy42YzE5LjItMjkuMSA1MC4zLTQ1LjEgODcuOC00NS4xbC44IDBjNjIuNiAuNCA5OS45IDM5LjUgMTAzLjcgMTA3LjdsLS4yIC4yIC4xIDB6bS0xNTYgNjguOGMxLjMgMjUuMSAyOC40IDM2LjggNTQuNiAzNS4zIDI1LjYtMS40IDU0LjYtMTEuNCA1OS41LTczLjItMTMuMi0yLjktMjcuOC00LjQtNDMuNC00LjQtNC44IDAtOS42IC4xLTE0LjQgLjQtNDIuOSAyLjQtNTcuMiAyMy4yLTU2LjIgNDEuOGwtLjEgLjF6Il0KICAgIH07CiAgICBmYVdwcmVzc3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid3ByZXNzciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJyZW5kYWN0Il0sICJmM2U0IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQyNy4zIDE2Ni42Yy0xNS4yIDM0LjUtMzAuNCA2OS00NS42IDEwMy41LTIuNCA1LjUtNi45IDguMi0xMyA4LjItMjMgMC00NiAuMS02OSAwLTUuMSAwLTguMiAxLjktMTAuMyA2LjctMTAuMiAyMy42LTIwLjYgNDctMzEgNzAuNS0xLjUgMy41LTQuMSA1LjMtNy45IDUuMy00NS45IDAtOTEuOSAwLTEzNy44IDAtMy4xIDAtNS42LTEuMS03LjctMy40LTExLjItMTIuMy0yMi41LTI0LjYtMzMuNy0zNi45LTIuNy0zLTIuOC02LjItMS4yLTkuNyA4LjctMTkuNSAxNy4zLTM5LjEgMjUuOS01OC43IDEyLjktMjkuNCAyNS45LTU4LjcgMzguNy04OC4xIDEuNy0zLjkgNC4zLTUuNyA4LjUtNS43IDE0LjIgLjEgMjguNSAwIDQyLjcgMCA2LjIgMCA5LjIgNC44IDYuNyAxMC42LTEzLjYgMzAuOC0yNy4yIDYxLjYtNDAuNyA5Mi4zLTUuNyAxMy0xMS40IDI2LTE3LjEgMzktMy45IDkgNy4xIDEyIDExIDUuNiAuMi0uNC0xLjQgNC4yIDMwLTY3LjcgMS40LTMuMSAzLjQtNC40IDYuOC00LjQgMTUuMiAuMSAzMC40IDAgNDUuNiAwIDUuNiAwIDcuOSAzLjYgNS43IDguNy04LjMgMTktMTYuNyAzNy45LTI1IDU2LjktNSAxMS40IDguMSAxMi41IDExLjMgNS4zIDAtLjEgMjcuOS02My4zIDMyLjItNzMuMiAyLTQuNiA1LjQtNi41IDEwLjMtNi41IDI2LjQgLjEgNTIuOSAwIDc5LjMgMCAxMi40IDAgMTMuOS0xMy42IDMuOS0xMy42LTI1LjMgMC01MC41IDAtNzUuOCAwLTYuMyAwLTcuOC0yLjUtNS4zLTguMyA1LjgtMTMuMSAxMS42LTI2LjEgMTcuMy0zOS4yIDEuNy00IDQuNS01LjggOC44LTUuOCAyMy4xIC4xIDI2IDAgMTMwLjggMCA2LjEgMCA4IDIuOCA1LjYgOC4zeiJdCiAgICB9OwogICAgZmFSZW5kYWN0ID0gZmFXcHJlc3NyOwogICAgZmFZb2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5b2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmIxIiwgIk05MS4zIDc2bDE4NiAwLTcgMTguOS0xNzkgMGMtMzkuNyAwLTcxLjkgMzEuNi03MS45IDcwLjNsMCAyMDUuNGMwIDM1LjQgMjQuOSA3MC4zIDg0IDcwLjNsMCAxOS4xLTEyLjEgMEM0MS4yIDQ2MCAwIDQxOS44IDAgMzcwLjVMMCAxNjUuMkMwIDExNS45IDQwLjcgNzYgOTEuMyA3NnpNMzIwLjQgMjBsNjYuNSAwYy0xNDMuOCAzNzguMS0xNDUuNyAzOTguOS0xODQuNyA0MzkuMy0yMC44IDIxLjYtNDkuMyAzMS43LTc4LjMgMzIuN2wwLTUxLjFjNDkuMi03LjcgNjQuNi00OS45IDY0LjYtNzUuMyAwLTIwLjEgLjYtMTIuNi04Mi4xLTIyMy4ybDYxLjQgMCA1MC40IDE1Ni42IDEwMi4yLTI3OXpNNDQ4IDE2MS41bDAgMjk4LjUtMjE0IDBjNi42LTkuNiAxMC43LTE2LjMgMTIuMS0xOS40bDE4Mi41IDAgMC0yNzkuMWMwLTMyLjUtMTcuMS01MS45LTQ4LjItNjIuOUwzODcuMSA4MWM0MS43IDEzLjYgNjAuOSA0My4xIDYwLjkgODAuNXoiXQogICAgfTsKICAgIGZhTmltYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5pbWJsciIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWE4IiwgIk0yNDYuNiAzNTMuM2EyNyAyNyAwIDEgMSAwLTU0IDI3IDI3IDAgMSAxIDAgNTR6bS03OS40LTI3YTI3LjEgMjcuMSAwIDEgMSAtNTQuMyAwIDI3LjEgMjcuMSAwIDEgMSA1NC4zIDB6TTE5MS44IDE1OUMxNTcgMTU5IDg5LjQgMTc4LjggNTkuMiAyMjdMMTQgMCAxNCAzMzUuNUMxNCA0MzMuMSA5My42IDUxMiAxOTEuOCA1MTJTMzY5LjUgNDMzIDM2OS41IDMzNS41IDI5MC4xIDE1OSAxOTEuOCAxNTl6bTAgMzA4LjFjLTczLjMgMC0xMzIuNS01OC45LTEzMi41LTEzMS42czU5LjItMTMxLjYgMTMyLjUtMTMxLjYgMTMyLjUgNTguOSAxMzIuNSAxMzEuNS01OS4zIDEzMS42LTEzMi41IDEzMS42bDAgLjF6Il0KICAgIH07CiAgICBmYVBpeGVsZmVkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpeGVsZmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU3ZGIiLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjM1LjcgMzExLjlsNDcgMGM0NC4yIDAgODAuMS0zNC45IDgwLjEtNzhzLTM1LjktNzgtODAuMS03OGwtNjcuOCAwYy0yNS41IDAtNDYuMiAyMC4xLTQ2LjIgNDVsMCAxNzUuMSA2Ny02NC4xeiJdCiAgICB9OwogICAgZmFZYWhvbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5YWhvbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTllIiwgIk0yMjMuOCAxNDEuMWwtNTYuNyAxNDMuMi01Ni0xNDMuMi05Ni4xIDAgMTA1LjggMjQ5LjEtMzguNiA4OS44IDk0LjIgMCAxNDAuOS0zMzguOS05My42IDB6TTMyOS4yIDI3Ni45YTU4LjIgNTguMiAwIDEgMCAwIDExNi40IDU4LjIgNTguMiAwIDEgMCAwLTExNi40ek0zOTQuNyAzMmwtOTMgMjIzLjUgMTA0LjggMCA5Mi42LTIyMy41LTEwNC40IDB6Il0KICAgIH07CiAgICBmYUJsdWVza3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmx1ZXNreSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNjcxIiwgIk00MDcuOCAyOTQuN2MtMy4zLS40LTYuNy0uOC0xMC0xLjMgMy40IC40IDYuNyAuOSAxMCAxLjN6TTI4OCAyMjcuMUMyNjEuOSAxNzYuNCAxOTAuOSA4MS45IDEyNC45IDM1LjMgNjEuNi05LjQgMzcuNS0xLjcgMjEuNiA1LjUgMy4zIDEzLjggMCA0MS45IDAgNTguNFM5LjEgMTk0IDE1IDIxMy45YzE5LjUgNjUuNyA4OS4xIDg3LjkgMTUzLjIgODAuNyAzLjMtLjUgNi42LS45IDEwLTEuNC0zLjMgLjUtNi42IDEtMTAgMS40LTkzLjkgMTQtMTc3LjMgNDguMi02Ny45IDE2OS45IDEyMC4zIDEyNC42IDE2NC44LTI2LjcgMTg3LjctMTAzLjQgMjIuOSA3Ni43IDQ5LjIgMjIyLjUgMTg1LjYgMTAzLjQgMTAyLjQtMTAzLjQgMjguMS0xNTYtNjUuOC0xNjkuOS0zLjMtLjQtNi43LS44LTEwLTEuMyAzLjQgLjQgNi43IC45IDEwIDEuMyA2NC4xIDcuMSAxMzMuNi0xNS4xIDE1My4yLTgwLjcgNS45LTE5LjkgMTUtMTM4LjkgMTUtMTU1LjVzLTMuMy00NC43LTIxLjYtNTIuOWMtMTUuOC03LjEtNDAtMTQuOS0xMDMuMiAyOS44LTY2LjEgNDYuNi0xMzcuMSAxNDEuMS0xNjMuMiAxOTEuOHoiXQogICAgfTsKICAgIGZhU2NyaWJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjcmliZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjhhIiwgIk00Mi42IDI1Mi43Yy0xNi4xLTE5LTI0LjctNDUuOS0yNC44LTc5LjkgMC0xMDAuNCA3NS4yLTE1My4xIDE2Ny4yLTE1My4xIDk4LjYtMS42IDE1Ni44IDQ5IDE4NC4zIDcwLjZsLTUwLjUgNzIuMS0zNy4zLTI0LjYgMjYuOS0zOC42Yy0zNi41LTI0LTc5LjQtMzYuNS0xMjMtMzUuOC01MC43LS44LTExMS43IDI3LjItMTExLjcgNzYuMiAwIDE4LjcgMTEuMiAyMC43IDI4LjYgMTUuNiAyMy4zLTUuMyA0MS45IC42IDU1LjggMTQgMjYuNCAyNC4zIDIzLjIgNjcuNi0uNyA5MS45LTI5LjIgMjkuNS04NS4yIDI3LjMtMTE0LjgtOC40em0zMTcuNyA1LjljLTE1LjUtMTguOC0zOC45LTI5LjQtNjMuMi0yOC42LTM4LjEtMi03MS4xIDI4LTcwLjUgNjcuMi0uNyAxNi44IDYgMzMgMTguNCA0NC4zIDE0LjEgMTMuOSAzMyAxOS43IDU2LjMgMTQuNCAxNy40LTUuMSAyOC42LTMuMSAyOC42IDE1LjYgMCA0LjMtLjUgOC41LTEuNCAxMi43LTE2LjcgNDAuOS01OS41IDY0LjQtMTIxLjQgNjQuNC01MS45IC4yLTEwMi40LTE2LjQtMTQ0LjEtNDcuM2wzMy43LTM5LjQtMzUuNi0yNy40LTYwLjggNzEuOCAxNS40IDEzLjhjNTIuNSA0Ni44IDEyMC40IDcyLjUgMTkwLjcgNzIuMiA1MS40IDAgOTQuNC0xMC41IDEzMy42LTQ0LjEgNTcuMS01MS40IDU0LjItMTQ5LjIgMjAuMy0xODkuNnoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zUGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1wZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6bTAgNDQ5LjVjLTEzOS4yIDAtMjM1LjgtMTM4LTE5MC4yLTI2Ny45bDc4LjggMzUuMWMtMi4xIDEwLjUtMy4zIDIxLjUtMy4zIDMyLjkgMCA5OSA3My45IDEyNi45IDEyMC40IDEyNi45IDIyLjkgMCA1My41LTYuNyA3OS40LTI5LjVMMzA1IDMxMS4xYy01LjUgNi4zLTE3LjYgMTYuNy0zNi4zIDE2LjctMzcuOCAwLTUzLjctMzkuOS01My45LTcxLjkgMjMwLjQgMTAyLjYgMjE2LjUgOTYuNSAyMTcuOSA5Ni44LTM0LjMgNjIuNC0xMDAuNiAxMDQuOC0xNzYuNyAxMDQuOHptMTk0LjItMTUwbC0yMjQtMTAwYzE4LjgtMzQgNTQuOS0zMC43IDc0LjctMTFsNDAuNC00MS42Yy0yNy4xLTIzLjMtNTgtMjcuNS03OC4xLTI3LjUtNDcuNCAwLTgwLjkgMjAuNS0xMDAuNyA1MS42TDg3LjYgMTQ1LjZjMzYuMS01NC45IDk4LjEtOTEuMiAxNjguNS05MS4yIDExMS4xIDAgMjAxLjUgOTAuNCAyMDEuNSAyMDEuNSAwIDE4LTIuNCAzNS40LTYuOCA1Mi0uMy0uMS0uNC0uMi0uNi0uNHoiXQogICAgfTsKICAgIGZhRWFybHliaXJkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlYXJseWJpcmRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOWEiLCAiTTMyOS4zIDQ3LjVjMS4yLTEzIDIxLjMtMTQgMzYuNi04LjcgLjkgLjMgMjYuMiA5LjcgMTkgMTUuMi0yNy45LTcuNC01Ni40IDE4LjItNTUuNi02LjV6bS0yMDEgNi45YzMwLjctOC4xIDYyIDIwIDYxLjEtNy4xLTEuMy0xNC4yLTIzLjQtMTUuMy00MC4yLTkuNi0xIC4zLTI4LjcgMTAuNS0yMC45IDE2Ljd6TTMzNS41IDE2MGExNiAxNiAwIDEgMCAwIDMyIDE2IDE2IDAgMSAwIDAtMzJ6bS0xNTkuNyAwYTE2IDE2IDAgMSAwIDAgMzIgMTYgMTYgMCAxIDAgMC0zMnpNNDk0LjMgMzIzLjJjLTkuOSAyNC00MC43IDExLTYzLjktMS4yLTEzLjUgNjkuMS01OC4xIDExMS40LTEyNi4zIDEyNC4yIC4zIC45LTItLjEgMjQgMSAzMy42IDEuNCA2My44LTMuMSA5Ny40LTgtMTkuOC0xMy44LTExLjQtMzcuMS05LjgtMzguMSAxLjQtLjkgMTQuNyAxLjcgMjEuNiAxMS41IDguNi0xMi41IDI4LjQtMTQuOCAzMC4yLTEzLjYgMS42IDEuMSA2LjYgMjAuOS02LjkgMzQuNiA0LjctLjkgOC4yLTEuNiA5LjgtMi4xIDIuNi0uOCAxNy43IDExLjMgMy4xIDEzLjMtMTQuMyAyLjMtMjIuNiA1LjEtNDcuMSAxMC44LTQ1LjkgMTAuNy04NS45IDExLjgtMTE3LjcgMTIuOGwxIDExLjZjMy44IDE4LjEtMjMuNCAyNC4zLTI3LjYgNi4yIC44IDE3LjktMjcuMSAyMS44LTI4LjQtMWwtLjUgNS4zYy0uNyAxOC40LTI4LjQgMTcuOS0yOC4zLS42LTcuNSAxMy41LTI4LjEgNi44LTI2LjQtOC41bDEuMi0xMi40Yy0zNi43IC45LTU5LjcgMy4xLTYxLjggMy4xLTIwLjkgMC0yMC45LTMxLjYgMC0zMS42IDIuNCAwIDI3LjcgMS4zIDYzLjIgMi44LTYxLjEtMTUuNS0xMDMuNy01NS0xMTQuOS0xMTguMi0yNSAxMi44LTU3LjUgMjYuOC02OC4yIC44LTEwLjUtMjUuNCAyMS41LTQyLjYgNjYuOC03My40IC43LTYuNiAxLjYtMTMuMyAyLjctMTkuOC0xNC40LTE5LjYtMTEuNi0zNi4zLTE2LjEtNjAuNC0xNi44IDIuNC0yMy4yLTkuMS0yMy42LTIzLjEgLjMtNy4zIDIuMS0xNC45IDIuNC0xNS40IDEuMS0xLjggMTAuMS0yIDEyLjctMi42IDYtMzEuNyA1MC42LTMzLjIgOTAuOS0zNC41IDE5LjctMjEuOCA0NS4yLTQxLjUgODAuOS00OC4zLTE1LjMtMTkuNC0zLjQtMzkuOS0yLjQtNDAuNCAxLjctLjggMjEuMiA0LjMgMjYuMyAyMy4yIDUuMi04LjggMTguMy0xMS40IDE5LjYtMTAuNyAxLjEgLjYgNi40IDE1LTQuOSAyNS45IDQwLjMgMy41IDcyLjIgMjQuNyA5NiA1MC43IDM2LjEgMS41IDcxLjggNS45IDc3LjEgMzQgMi43IC42IDExLjYgLjggMTIuNyAyLjYgLjMgLjUgMi4xIDguMSAyLjQgMTUuNC0uNSAxMy45LTYuOCAyNS40LTIzLjYgMjMuMS0zLjIgMTcuMy0yLjcgMzIuOS04LjcgNDcuNyAyLjQgMTEuNyA0IDIzLjggNC44IDM2LjQgMzcgMjUuNCA3MC4zIDQyLjUgNjAuMyA2Ni45ek0yMjMuNSAxNTkuOWMuOS00NC0zNy45LTQyLjItNzguNi00MC4zLTIxLjcgMS0zOC45IDEuOS00NS41IDEzLjktMTEuNCAyMC45IDUuOSA5Mi45IDIzLjIgMTAxLjIgOS44IDQuNyA3My40IDcuOSA4Ni4zLTcuMSA4LjItOS40IDE1LTQ5LjQgMTQuNi02Ny43em01MiA1OC4zYy00LjMtMTIuNC02LTMwLjEtMTUuMy0zMi43LTItLjUtOS0uNS0xMSAwLTEwIDIuOC0xMC44IDIyLjEtMTcgMzcuMiAxNS40IDAgMTkuMyA5LjcgMjMuNyA5LjcgNC4zIDAgNi4zLTExLjMgMTkuNi0xNC4yem0xMzUuNy04NC43Yy02LjYtMTIuMS0yNC44LTEyLjktNDYuNS0xMy45LTQwLjItMS45LTc4LjItMy44LTc3LjMgNDAuMy0uNSAxOC4zIDUgNTguMyAxMy4yIDY3LjggMTMgMTQuOSA3Ni42IDExLjggODYuMyA3LjEgMTUuOC03LjYgMzYuNS03OC45IDI0LjMtMTAxLjN6Il0KICAgIH07CiAgICBmYVNxdWFyZU9kbm9rbGFzc25pa2kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW9kbm9rbGFzc25pa2kiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsib2Rub2tsYXNzbmlraS1zcXVhcmUiXSwgImYyNjQiLCAiTTIyNCAxMzcuMWMtNS40LS4zLTEwLjggLjYtMTUuOSAyLjRzLTkuNyA0LjgtMTMuNiA4LjUtNyA4LjItOS4yIDEzLjItMy4yIDEwLjMtMy4yIDE1LjcgMS4xIDEwLjggMy4yIDE1LjcgNS4zIDkuNSA5LjIgMTMuMiA4LjYgNi42IDEzLjYgOC41IDEwLjUgMi43IDE1LjkgMi40YzUuNCAuMyAxMC44LS42IDE1LjktMi40czkuNy00LjggMTMuNi04LjUgNy04LjIgOS4yLTEzLjIgMy4yLTEwLjMgMy4yLTE1LjctMS4xLTEwLjgtMy4yLTE1LjctNS4zLTkuNS05LjItMTMuMi04LjYtNi42LTEzLjYtOC41LTEwLjUtMi43LTE1LjktMi40ek0zODQgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NHpNMjI0IDI1OGE4MSA4MSAwIDEgMSAwLTE2Mi4xIDgxIDgxIDAgMSAxIDAgMTYyLjF6bTU5LjMgNi4yYzE2LjgtMTMuMiAyOS41LTUuNSAzNC4xIDMuNiA3LjggMTYtMS4xIDIzLjctMjEuNSAzNy0xNy4xIDEwLjktNDAuNyAxNS4yLTU2LjIgMTYuOGwxMyAxMi45IDQ3LjcgNDcuN2MxNy40IDE3LjktMTEgNDUuOC0yOC42IDI4LjYtMTItMTIuMi0yOS41LTI5LjctNDcuNy00Ny45bC00Ny43IDQ3LjljLTE3LjcgMTcuMi00Ni0xMS0yOC40LTI4LjYgMy43LTMuNyA3LjktNy45IDEyLjUtMTIuNSAxMC40LTEwLjQgMjIuNi0yMi43IDM1LjItMzUuMmwxMi45LTEyLjljLTE1LjQtMS42LTM5LjMtNS43LTU2LjYtMTYuOC0yMC4zLTEzLjMtMjkuMy0yMC45LTIxLjQtMzcgNC42LTkuMSAxNy4zLTE2LjggMzQuMS0zLjYgMCAwIDIyLjcgMTggNTkuMyAxOHM1OS4zLTE4IDU5LjMtMTh6Il0KICAgIH07CiAgICBmYU9kbm9rbGFzc25pa2lTcXVhcmUgPSBmYVNxdWFyZU9kbm9rbGFzc25pa2k7CiAgICBmYU1hcmtkb3duID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hcmtkb3duIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2MGYiLCAiTTU5My44IDU5LjFsLTU0Ny42IDBDMjAuNyA1OS4xIDAgNzkuOCAwIDEwNS4yTDAgNDA2LjdjMCAyNS41IDIwLjcgNDYuMiA0Ni4yIDQ2LjJsNTQ3LjcgMGMyNS41IDAgNDYuMi0yMC43IDQ2LjEtNDYuMWwwLTMwMS42YzAtMjUuNC0yMC43LTQ2LjEtNDYuMi00Ni4xek0zMzguNSAzNjAuNmwtNjEuNSAwIDAtMTIwLTYxLjUgNzYuOS02MS41LTc2LjkgMCAxMjAtNjEuNyAwIDAtMjA5LjIgNjEuNSAwIDYxLjUgNzYuOSA2MS41LTc2LjkgNjEuNSAwIDAgMjA5LjIgLjIgMHptMTM1LjMgMy4xbC05Mi4zLTEwNy43IDYxLjUgMCAwLTEwNC42IDYxLjUgMCAwIDEwNC42IDYxLjUgMC05Mi4yIDEwNy43eiJdCiAgICB9OwogICAgZmFUeXBvMyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0eXBvMyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDJiIiwgIk0xNzguNyA3OC40YzAtMjQuNyA1LjQtMzIuNCAxMy45LTM5LjQtNjkuNSA4LjUtMTQ5LjMgMzQtMTc2LjMgNjYuNC01LjQgNy43LTkuMyAyMC44LTkuMyAzNy4xIDAgMTAzLjUgMTA2LjggMzM3LjUgMTg0LjEgMzM3LjUgMzYuMyAwIDk3LjMtNTkuNSAxNDYuNy0xMzktNyAyLjMtMTEuNiAyLjMtMTguNSAyLjMtNTcuMiAwLTE0MC42LTE5OC41LTE0MC42LTI2NC45ek0zMDEuNSAzMmMtMzAuMSAwLTQxLjcgNS40LTQxLjcgMzYuMyAwIDY2LjQgNTMuOCAxOTguNSAxMDEuNyAxOTguNSAyNi4zIDAgNzguOC05OS43IDc4LjgtMTgyLjMgMC00MC45LTY3LTUyLjUtMTM4LjgtNTIuNXoiXQogICAgfTsKICAgIGZhSm9vbWxhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpvb21sYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWFhIiwgIk0uNiA5Mi4xYzAtMzMuMyAyNi44LTYwLjEgNTkuOC02MC4xIDMwIDAgNTQuNSAyMS45IDU5LjIgNTAuMiAzMi42LTcuNiA2Ny4xIC42IDk2LjUgMzBsLTQ0LjMgNDQuM2MtMjAuNS0yMC41LTQyLjYtMTYuMy01NS40LTMuNS0xNC4zIDE0LjMtMTQuMyAzNy45IDAgNTIuMmw5OS41IDk5LjUtNDQgNDQuM2MtODcuNy04Ny4yLTQ5LjctNDkuNy05OS44LTk5LjctMjYuOC0yNi41LTM1LTY0LjgtMjQuOC05OC45LTI2LjktNS44LTQ2LjctMjkuNy00Ni43LTU4LjN6TTEzMC4xIDIwOC41bDQ0LjMgNDQuM2MxMC0xMCA4OS43LTg5LjcgOTkuNy05OS44IDE0LjMtMTQuMyAzNy42LTE0LjMgNTEuOSAwIDEyLjggMTIuOCAxNyAzNS0zLjUgNTUuNGw0NCA0NC4zYzMxLjItMzEuMiAzOC41LTY3LjYgMjguOS0xMDEuMiAyOS4yLTQuMSA1MS45LTI5LjIgNTEuOS01OS41IDAtMzMuMi0yNi44LTYwLjEtNTkuOC02MC4xLTMwLjMgMC01NS40IDIyLjUtNTkuNSA1MS42LTMzLjgtOS45LTcxLjctMS41LTk4LjMgMjUuMS0xOC4zIDE5LjEtNzEuMSA3MS41LTk5LjYgOTkuOXpNMzk2LjQgMzYwLjdjOC4yLTMyLjctLjktNjguNS0yNi4zLTkzLjktMTEuOC0xMi4yIDUgNC43LTk5LjUtOTkuN2wtNDQuMyA0NC4zIDk5LjcgOTkuN2MxNC4zIDE0LjMgMTQuMyAzNy42IDAgNTEuOS0xMi44IDEyLjgtMzUgMTctNTUuNC0zLjVsLTQ0IDQ0LjNjMjcuNiAzMC4yIDY4IDM4LjggMTAyLjcgMjggNS41IDI3LjQgMjkuNyA0OC4xIDU4LjkgNDguMSAzMyAwIDU5LjgtMjYuOCA1OS44LTYwLjEgMC0zMC4yLTIyLjUtNTUtNTEuNi01OS4xem0tODQuMy01My4xbC00NC00NC4zYy04NyA4Ni40LTUwLjQgNTAuNC05OS43IDk5LjgtMTQuMyAxNC4zLTM3LjYgMTQuMy01MS45IDAtMTMuMS0xMy40LTE2LjktMzUuMyAzLjItNTUuNGwtNDQtNDQuM2MtMzAuMiAzMC4yLTM4IDY1LjItMjkuNSA5OC4zLTI2LjcgNi00Ni4yIDI5LjktNDYuMiA1OC4yIDAgMzMuMyAyNi44IDYwLjEgNTkuOCA2MC4xIDI4LjYgMCA1Mi41LTE5LjggNTguNi00Ni43IDMyLjcgOC4yIDY4LjUtLjYgOTQuMi0yNiAzMi4xLTMyIDEyLjItMTIuNCA5OS41LTk5Ljd6Il0KICAgIH07CiAgICBmYVdlaXhpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWl4aW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFkNyIsICJNMzg1LjIgMTY3LjZjNi40IDAgMTIuNiAuMyAxOC44IDEuMS0xNi42LTc4LjQtMTAwLjctMTM2LjctMTk2LjMtMTM2LjctMTA3LjIgMC0xOTQuNyA3Mi44LTE5NC43IDE2NS40IDAgNTMuNCAyOS4zIDk3LjUgNzcuOSAxMzEuNmwtMTkuMyA1OC42IDY4LTM0LjFjMjQuNCA0LjggNDMuOCA5LjcgNjguMiA5LjcgNi4yIDAgMTIuMS0uMyAxOC4zLS44LTQtMTIuOS02LjItMjYuNi02LjItNDAuOC0uMS04NC45IDcyLjktMTU0IDE2NS4zLTE1NHpNMjgwLjcgMTE0LjdjMTQuNSAwIDI0LjIgOS43IDI0LjIgMjQuNCAwIDE0LjUtOS43IDI0LjItMjQuMiAyNC4yLTE0LjggMC0yOS4zLTkuNy0yOS4zLTI0LjIgLjEtMTQuNyAxNC42LTI0LjQgMjkuMy0yNC40ek0xNDQuMyAxNjMuM2MtMTQuNSAwLTI5LjMtOS43LTI5LjMtMjQuMiAwLTE0LjggMTQuOC0yNC40IDI5LjMtMjQuNCAxNC44IDAgMjQuNCA5LjcgMjQuNCAyNC40IDAgMTQuNi05LjYgMjQuMi0yNC40IDI0LjJ6TTU2MyAzMTkuNGMwLTc3LjktNzcuOS0xNDEuMy0xNjUuNC0xNDEuMy05Mi43IDAtMTY1LjQgNjMuNC0xNjUuNCAxNDEuM1MzMDUgNDYwLjcgMzk3LjYgNDYwLjdjMTkuMyAwIDM4LjktNS4xIDU4LjYtOS45bDUzLjQgMjkuMy0xNC44LTQ4LjZDNTM0IDQwMi4xIDU2MyAzNjMuMiA1NjMgMzE5LjR6TTM0My45IDI5NC45Yy05LjcgMC0xOS4zLTkuNy0xOS4zLTE5LjYgMC05LjcgOS43LTE5LjMgMTkuMy0xOS4zIDE0LjggMCAyNC40IDkuNyAyNC40IDE5LjMgMCAxMC05LjcgMTkuNi0yNC40IDE5LjZ6bTEwNy4xIDBjLTkuNyAwLTE5LjMtOS43LTE5LjMtMTkuNiAwLTkuNyA5LjctMTkuMyAxOS4zLTE5LjMgMTQuNSAwIDI0LjQgOS43IDI0LjQgMTkuMyAuMSAxMC05LjkgMTkuNi0yNC40IDE5LjZ6Il0KICAgIH07CiAgICBmYUdydW50ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdydW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYWQiLCAiTTYxLjYgMTg5LjNjLTEuMSAxMCA1LjIgMTkuMSA1LjIgMTkuMSAuNy03LjUgMi4yLTEyLjggNC0xNi42IC40IDEwLjMgMy4yIDIzLjUgMTIuOCAzNC4xIDYuOSA3LjYgMzUuNiAyMy4zIDU0LjkgNi4xIDEgMi40IDIuMSA1LjMgMyA4LjUgMi45IDEwLjMtMi43IDI1LjMtMi43IDI1LjNzMTUuMS0xNy4xIDEzLjktMzIuNWMxMC44LS41IDIxLjQtOC40IDIxLjEtMTkuNSAwIDAtMTguOSAxMC40LTM1LjUtOC44LTkuNy0xMS4yLTQwLjktNDItODMuMS0zMS44IDQuMyAxIDguOSAyLjQgMTMuNSA0LjFsLS4xIDBjLTQuMiAyLTYuNSA3LjEtNyAxMnptMjguMy0xLjhjMTkuNSAxMSAzNy40IDI1LjcgNDQuOSAzNy01LjcgMy4zLTIxLjcgMTAuNC0zOC0xLjctMTAuMy03LjYtOS44LTI2LjItNi45LTM1LjN6TTIzMiAyMzMuM2MtMS4yIDE1LjUgMTMuOSAzMi41IDEzLjkgMzIuNXMtNS42LTE1LTIuNy0yNS4zYy45LTMuMiAyLTYgMy04LjUgMTkuMyAxNy4zIDQ4IDEuNSA1NC44LTYuMSA5LjYtMTAuNiAxMi4zLTIzLjggMTIuOC0zNC4xIDEuOCAzLjggMy40IDkuMSA0IDE2LjYgMCAwIDYuNC05LjEgNS4yLTE5LjEtLjYtNS0yLjktMTAtNy0xMS44bC0uMSAwYzQuNi0xLjggOS4yLTMuMiAxMy41LTQuMS00Mi4zLTEwLjItNzMuNCAyMC42LTgzLjEgMzEuOC0xNi43IDE5LjItMzUuNSA4LjgtMzUuNSA4LjgtLjIgMTAuOSAxMC40IDE4LjkgMjEuMiAxOS4zem02Mi43LTQ1LjhjMyA5LjEgMy40IDI3LjctNyAzNS40LTE2LjMgMTIuMS0zMi4yIDUtMzcuOSAxLjYgNy41LTExLjQgMjUuNC0yNiA0NC45LTM3em0tMTM0LjQgMjMxbC0yOS40IDBjLTUuNSAwLTguMiAxLjYtOS41IDIuOS0xLjkgMi0yLjIgNC43LS45IDguMSAzLjUgOS4xIDExLjQgMTYuNSAxMy43IDE4LjYgMy4xIDIuNyA3LjUgNC4zIDExLjggNC4zIDQuNCAwIDguMy0xLjcgMTEtNC42IDcuNS04LjIgMTEuOS0xNy4xIDEzLTE5LjggLjYtMS41IDEuMy00LjUtLjktNi44LTEuOC0xLjgtNC43LTIuNy04LjgtMi43ek0zNDkuNSAzMTcuM2MtMi40IDE3LjktMTMgMzMuOC0yNC42IDQzLjctMy4xLTIyLjctMy43LTU1LjUtMy43LTYyLjQgMC0xNC43IDkuNS0yNC41IDEyLjItMjYuMSAyLjUtMS41IDUuNC0zIDguMy00LjYgMTgtOS42IDQwLjQtMjEuNiA0MC40LTQzLjcgMC0xNi4yLTkuMy0yMy4yLTE1LjQtMjcuOC0uOC0uNi0xLjUtMS4xLTIuMi0xLjctMi4xLTEuNy0zLjctMy00LjMtNC40LTQuNC05LjgtMy42LTM0LjItMS43LTM3LjYgLjYtLjYgMTYuNy0yMC45IDExLjgtMzkuMi0yLTcuNC02LjktMTMuMy0xNC4xLTE3LTUuMy0yLjctMTEuOS00LjItMTkuNS00LjUtLjEtMi0uNS0zLjktLjktNS45LS42LTIuNi0xLjEtNS4zLS45LTguMSAuNC00LjcgLjgtOSAyLjItMTEuMyA4LjQtMTMuMyAyOC44LTE3LjYgMjktMTcuNmwxMi4zLTIuNC04LjEtOS41Yy0uMS0uMi0xNy4zLTE3LjUtNDYuMy0xNy41LTcuOSAwLTE2IDEuMy0yNC4xIDMuOS0yNC4yIDcuOC00Mi45IDMwLjUtNDkuNCAzOS4zLTMuMS0xLTYuMy0xLjktOS42LTIuNy00LjItMTUuOCA5LTM4LjUgOS0zOC41cy0xMy42LTMtMzMuNyAxNS4yYy0yLjYtNi41LTguMS0yMC41LTEuOC0zNy4yLTI5LjUgMTAuNC0zNi45IDI2LjMtMzkuMSA0MC43LTcuNi01LjQtNi43LTIzLjEtNy4yLTI3LjYtNy41IC45LTI5LjIgMjEuOS0yOC4yIDQ4LjMtMiAuNS0zLjkgMS4xLTUuOSAxLjctNi41LTguOC0yNS4xLTMxLjUtNDkuNC0zOS4zLTcuOS0yLjItMTYtMy41LTIzLjktMy41LTI5IDAtNDYuMSAxNy4zLTQ2LjMgMTcuNWwtOC4xIDkuNCAxMi4zIDIuNGMuMiAwIDIwLjYgNC4zIDI5IDE3LjYgMS40IDIuMiAxLjggNi42IDIuMiAxMS4zIC4yIDIuOC0uNCA1LjUtLjkgOC4xLS40IDEuOS0uOCAzLjktLjkgNS45LTcuNyAuMy0xNC4yIDEuOC0xOS41IDQuNS03LjIgMy43LTEyLjEgOS42LTE0LjEgMTctNSAxOC4yIDExLjIgMzguNSAxMS44IDM5LjIgMS45IDMuNCAyLjcgMjcuOC0xLjcgMzcuNi0uNiAxLjQtMi4yIDIuNy00LjMgNC40LS43IC41LTEuNCAxLjEtMi4yIDEuNy02LjEgNC42LTE1LjQgMTEuNy0xNS40IDI3LjggMCAyMi4xIDIyLjQgMzQuMSA0MC40IDQzLjcgMyAxLjYgNS44IDMuMSA4LjMgNC42IDIuNyAxLjYgMTIuMiAxMS40IDEyLjIgMjYuMSAwIDYuOS0uNiAzOS43LTMuNyA2Mi40LTExLjYtOS45LTIyLjItMjUuOS0yNC42LTQzLjggMCAwLTI5LjIgMjIuNi0yMC42IDcwLjggNS4yIDI5LjUgMjMuMiA0Ni4xIDQ3IDU0LjcgOC44IDE5LjEgMjkuNCA0NS43IDY3LjMgNDkuNiAxNC40IDExLjggMzQuNCAxOS41IDYzLjYgMTkuNWwuMiAwYzI5LjEgMCA0OS4xLTcuNyA2My42LTE5LjUgMzcuOS0zLjkgNTguNS0zMC41IDY3LjMtNDkuNiAyMy44LTguNyA0MS43LTI1LjIgNDctNTQuNyA4LjItNDguNC0yMS4xLTcwLjktMjEuMS03MC45ek0zMDYgMzcuN2M1LjYtMS44IDExLjYtMi43IDE3LjctMi43IDExIDAgMTkuOSAzIDI0LjcgNS0zLjEgMS40LTYuNCAzLjItOS43IDUuMy0yLjQtLjQtNS42LS44LTkuMi0uOC0xMC41IDAtMjAuNSAzLjEtMjguNyA4LjktMTIuMyA4LjctMTggMTYuOS0yMC43IDIyLjQtMi4yLTEuMy00LjUtMi41LTcuMS0zLjctMS42LS44LTMuMS0xLjUtNC43LTIuMiA2LjEtOS4xIDE5LjktMjYuNSAzNy43LTMyLjJ6bTIxIDE4LjJjLS44IDEtMS42IDIuMS0yLjMgMy4yLTMuMyA1LjItMy45IDExLjYtNC40IDE3LjgtLjUgNi40LTEuMSAxMi41LTQuNCAxNy00LjIgLjgtOC4xIDEuNy0xMS41IDIuNy0yLjMtMy4xLTUuNi03LTEwLjUtMTEuMiAxLjQtNC44IDUuNS0xNi4xIDEzLjUtMjIuNSA1LjYtNC4zIDEyLjItNi43IDE5LjYtN3pNNDUuOSA0NS4zYy0zLjMtMi4yLTYuNi00LTkuNy01LjMgNC44LTIgMTMuNy01IDI0LjctNSA2LjEgMCAxMiAuOSAxNy43IDIuNyAxNy44IDUuOCAzMS42IDIzLjIgMzcuNyAzMi4xLTEuNiAuNy0zLjIgMS40LTQuOCAyLjItMi41IDEuMi00LjkgMi41LTcuMSAzLjctMi42LTUuNC04LjMtMTMuNy0yMC43LTIyLjQtOC4zLTUuOC0xOC4yLTguOS0yOC44LTguOS0zLjQgLjEtNi42IC41LTkgLjl6TTkwLjYgODUuNGMtNC45IDQuMi04LjMgOC0xMC41IDExLjItMy40LS45LTcuMy0xLjktMTEuNS0yLjctMy4zLTQuNC0zLjgtMTAuNS00LjMtMTYuOS0uNS02LjItMS4xLTEyLjYtNC40LTE3LjgtLjctMS4xLTEuNS0yLjItMi4zLTMuMiA3LjQgLjMgMTQgMi42IDE5LjUgNyA4IDYuMyAxMi4xIDE3LjYgMTMuNSAyMi40ek01OC40IDI1OS45Yy0yLjctMS42LTUuNi0zLjEtOC40LTQuNi0xNC45LTgtMzAuMi0xNi4zLTMwLjItMzAuNSAwLTExLjEgNC4zLTE0LjYgOC45LTE4LjJsLjUtLjRjLjctLjYgMS40LTEuMiAyLjItMS44LS45IDcuMi0xLjkgMTMuMy0yLjcgMTQuOSAwIDAgMTIuMS0xNSAxNS43LTQ0LjMgMS40LTExLjUtMS4xLTM0LjMtNS4xLTQzIC4yIDQuOSAwIDkuOC0uMyAxNC40LS40LS44LS44LTEuNi0xLjMtMi4yLTMuMi00LTExLjgtMTcuNS05LjQtMjYuNiAuOS0zLjUgMy4xLTYgNi43LTcuOCAzLjgtMS45IDguOC0yLjkgMTUuMS0yLjkgMTIuMyAwIDI1LjkgMy43IDMyLjkgNiAyNS4xIDggNTUuNCAzMC45IDY0LjEgMzcuNyAuMiAuMiAuNCAuMyAuNCAuM2w1LjYgMy45LTMuNS01LjhjLS4yLS4zLTE5LjEtMzEuNC01My4yLTQ2LjUgMi0yLjkgNy40LTguMSAyMS42LTE1LjEgMjEuNC0xMC41IDQ2LjUtMTUuOCA3NC4zLTE1LjggMjcuOSAwIDUyLjkgNS4zIDc0LjMgMTUuOCAxNC4yIDYuOSAxOS42IDEyLjIgMjEuNiAxNS4xLTM0IDE1LjEtNTIuOSA0Ni4yLTUzLjEgNDYuNWwtMy41IDUuOCA1LjYtMy45cy4yLS4xIC40LS4zYzguNy02LjggMzktMjkuOCA2NC4xLTM3LjcgNy0yLjIgMjAuNi02IDMyLjktNiA2LjMgMCAxMS4zIDEgMTUuMSAyLjkgMy41IDEuOCA1LjcgNC40IDYuNyA3LjggMi41IDkuMS02LjEgMjIuNi05LjQgMjYuNi0uNSAuNi0uOSAxLjMtMS4zIDIuMi0uMy00LjYtLjUtOS41LS4zLTE0LjQtNCA4LjgtNi41IDMxLjUtNS4xIDQzIDMuNiAyOS4zIDE1LjcgNDQuMyAxNS43IDQ0LjMtLjgtMS42LTEuOC03LjctMi43LTE0LjkgLjcgLjYgMS41IDEuMiAyLjIgMS44bC41IC40YzQuNiAzLjcgOC45IDcuMSA4LjkgMTguMiAwIDE0LjItMTUuNCAyMi41LTMwLjIgMzAuNS0yLjkgMS41LTUuNyAzLjEtOC40IDQuNi04LjcgNS0xOCAxNi43LTE5LjEgMzQuMi0uOSAxNC42IC45IDQ5LjkgMy40IDc1LjktMTIuNCA0LjgtMjYuNyA2LjQtMzkuNyA2LjgtMi00LjEtMy45LTguNS01LjUtMTMuMS0uNy0yLTE5LjYtNTEuMS0yNi40LTYyLjIgNS41IDM5IDE3LjUgNzMuNyAyMy41IDg5LjYtMy41LS41LTcuMy0uNy0xMS43LS43bC0xMTcgMGMtNC40IDAtOC4zIC4zLTExLjcgLjcgNi0xNS45IDE4LjEtNTAuNiAyMy41LTg5LjYtNi44IDExLjItMjUuNyA2MC4zLTI2LjQgNjIuMi0xLjYgNC42LTMuNSA5LTUuNSAxMy4xLTEzLS40LTI3LjItMi0zOS43LTYuOCAyLjUtMjYgNC4zLTYxLjIgMy40LTc1LjktLjktMTcuNC0xMC4zLTI5LjItMTktMzQuMnpNMzUuMSA0MDQuNmMtMTIuMS0yMC04LjctNTQuMS0zLjctNTkuMSAxMC45IDM0LjQgNDcuMiA0NC4zIDc0LjQgNDUuNC0yLjcgNC4yLTUuMiA3LjYtNyAxMGwtMS40IDEuNGMtNy4yIDcuOC04LjYgMTguNS00LjEgMzEuOC0yMi43LS4xLTQ2LjMtOS44LTU4LjItMjkuNXptNDUuNyA0My41YzYgMS4xIDEyLjIgMS45IDE4LjYgMi40IDMuNSA4IDcuNCAxNS45IDEyLjMgMjMuMS0xNC40LTUuOS0yNC40LTE2LTMwLjktMjUuNXptMTExLjUgNTAuMWMtNjAuNi0uMS03OC4zLTQ1LjgtODQuOS02NC43LTMuNy0xMC41LTMuNC0xOC4yIC45LTIzLjEgMi45LTMuMyA5LjUtNy4yIDI0LjYtNy4ybDExOC44IDBjMTUuMSAwIDIxLjggMy45IDI0LjYgNy4yIDQuMiA0LjggNC41IDEyLjYgLjkgMjMuMS02LjYgMTguOC0yNC4zIDY0LjYtODQuOSA2NC43em04MC42LTI0LjZjNC45LTcuMiA4LjgtMTUuMSAxMi4zLTIzLjEgNi40LS41IDEyLjYtMS4zIDE4LjYtMi40LTYuNSA5LjUtMTYuNSAxOS42LTMwLjkgMjUuNXptNzYuNi02OWMtMTIgMTkuNy0zNS42IDI5LjMtNTguMSAyOS43IDQuNS0xMy4zIDMuMS0yNC4xLTQuMS0zMS44LS40LS41LS45LTEtMS40LTEuNS0xLjgtMi40LTQuMy01LjgtNy0xMCAyNy4yLTEuMiA2My41LTExIDc0LjQtNDUuNCA1IDUgOC40IDM5LjEtMy44IDU5ek0xOTIuMiAxODcuN2wuMiAwYzEyLjctLjEgMjcuMi0xNy44IDI3LjItMTcuOC05LjkgNi0xOC44IDguMS0yNy4zIDguMy04LjUtLjItMTcuNC0yLjMtMjcuMy04LjMgMCAwIDE0LjUgMTcuNiAyNy4yIDE3Ljh6bTYxLjcgMjMwLjdsLTI5LjQgMGMtNC4yIDAtNy4yIC45LTguOSAyLjctMi4yIDIuMy0xLjUgNS4yLS45IDYuNyAxIDIuNiA1LjUgMTEuMyAxMyAxOS4zIDIuNyAyLjkgNi42IDQuNSAxMSA0LjVzOC43LTEuNiAxMS44LTQuMmMyLjMtMiAxMC4yLTkuMiAxMy43LTE4LjEgMS4zLTMuMyAxLTYtLjktNy45LTEuMy0xLjMtNC0yLjktOS40LTN6Il0KICAgIH07CiAgICBmYVJvY2tybXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicm9ja3JtcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2U5IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMy40IDQyNy41bC05MCAwLTExMi0xMzEuM2MtMTcuOS0yMC40LTMuOS01Ni4xIDI2LjYtNTYuMWw3NS4zIDAtODQuNi05OS4zLTg0LjMgOTguOS05MCAwIDE0Ny4xLTE3Mi41YzE0LjQtMTguNCA0MS4zLTE3LjMgNTQuNSAwTDQxMy43IDI1Mi4zYzE5IDIyLjggMiA1Ny4yLTI3LjYgNTYuMS0uNiAwLTc0LjIgLjItNzQuMiAuMkw0MTMuNCA0MjcuNXoiXQogICAgfTsKICAgIGZhVW5zcGxhc2ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5zcGxhc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YyIsICJNNDQ4IDIzMC4ybDAgMjQ5LjgtNDQ4IDAgMC0yNDkuOCAxNDEuMSAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45IDE0MS4xIDB6TTMwNi45IDMybC0xNjUuNyAwIDAgMTI0LjkgMTY1LjcgMCAwLTEyNC45eiJdCiAgICB9OwogICAgZmFTcXVhcmVJbnN0YWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWluc3RhZ3JhbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJpbnN0YWdyYW0tc3F1YXJlIl0sICJlMDU1IiwgIk0xOTQuNCAyMTEuN2E1My4zIDUzLjMgMCAxIDAgNTkuMiA4OC42IDUzLjMgNTMuMyAwIDEgMCAtNTkuMi04OC42em0xNDIuMy02OC40Yy01LjItNS4yLTExLjUtOS4zLTE4LjQtMTItMTguMS03LjEtNTcuNi02LjgtODMuMS02LjUtNC4xIDAtNy45IC4xLTExLjIgLjFzLTcuMiAwLTExLjQtLjFjLTI1LjUtLjMtNjQuOC0uNy04Mi45IDYuNS02LjkgMi43LTEzLjEgNi44LTE4LjQgMTJzLTkuMyAxMS41LTEyIDE4LjRjLTcuMSAxOC4xLTYuNyA1Ny43LTYuNSA4My4yIDAgNC4xIC4xIDcuOSAuMSAxMS4xczAgNy0uMSAxMS4xYy0uMiAyNS41LS42IDY1LjEgNi41IDgzLjIgMi43IDYuOSA2LjggMTMuMSAxMiAxOC40czExLjUgOS4zIDE4LjQgMTJjMTguMSA3LjEgNTcuNiA2LjggODMuMSA2LjUgNC4xIDAgNy45LS4xIDExLjItLjFzNy4yIDAgMTEuNCAuMWMyNS41IC4zIDY0LjggLjcgODIuOS02LjUgNi45LTIuNyAxMy4xLTYuOCAxOC40LTEyczkuMy0xMS41IDEyLTE4LjRjNy4yLTE4IDYuOC01Ny40IDYuNS04MyAwLTQuMi0uMS04LjEtLjEtMTEuNHMwLTcuMSAuMS0xMS40Yy4zLTI1LjUgLjctNjQuOS02LjUtODMtMi43LTYuOS02LjgtMTMuMS0xMi0xOC40bDAgLjJ6bS02Ny4xIDQ0LjVjMTguMSAxMi4xIDMwLjYgMzAuOSAzNC45IDUyLjJzLS4yIDQzLjUtMTIuMyA2MS42Yy02IDktMTMuNyAxNi42LTIyLjYgMjIuNnMtMTkgMTAuMS0yOS42IDEyLjJjLTIxLjMgNC4yLTQzLjUtLjItNjEuNi0xMi4zcy0zMC42LTMwLjktMzQuOS01Mi4yIC4yLTQzLjUgMTIuMi02MS42IDMwLjktMzAuNiA1Mi4yLTM0LjkgNDMuNSAuMiA2MS42IDEyLjJsLjEgMHptMjkuMi0xLjNjLTMuMS0yLjEtNS42LTUuMS03LjEtOC42cy0xLjgtNy4zLTEuMS0xMS4xIDIuNi03LjEgNS4yLTkuOCA2LjEtNC41IDkuOC01LjIgNy42LS40IDExLjEgMS4xIDYuNSAzLjkgOC42IDcgMy4yIDYuOCAzLjIgMTAuNmMwIDIuNS0uNSA1LTEuNCA3LjNzLTIuNCA0LjQtNC4xIDYuMi0zLjkgMy4yLTYuMiA0LjItNC44IDEuNS03LjMgMS41Yy0zLjggMC03LjUtMS4xLTEwLjYtMy4ybC0uMSAwek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzU3IDM4OWMtMTguNyAxOC43LTQxLjQgMjQuNi02NyAyNS45LTI2LjQgMS41LTEwNS42IDEuNS0xMzIgMC0yNS42LTEuMy00OC4zLTcuMi02Ny0yNS45cy0yNC42LTQxLjQtMjUuOC02N2MtMS41LTI2LjQtMS41LTEwNS42IDAtMTMyIDEuMy0yNS42IDcuMS00OC4zIDI1LjgtNjdzNDEuNS0yNC42IDY3LTI1LjhjMjYuNC0xLjUgMTA1LjYtMS41IDEzMiAwIDI1LjYgMS4zIDQ4LjMgNy4xIDY3IDI1LjhzMjQuNiA0MS40IDI1LjggNjdjMS41IDI2LjMgMS41IDEwNS40IDAgMTMxLjktMS4zIDI1LjYtNy4xIDQ4LjMtMjUuOCA2N2wwIC4xeiJdCiAgICB9OwogICAgZmFJbnN0YWdyYW1TcXVhcmUgPSBmYVNxdWFyZUluc3RhZ3JhbTsKICAgIGZhRmlyc3RPcmRlckFsdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJzdC1vcmRlci1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUwYSIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2em0wIDcuOGEyNDAuMiAyNDAuMiAwIDEgMSAwIDQ4MC40IDI0MC4yIDI0MC4yIDAgMSAxIDAtNDgwLjR6bTAgMjAuNWEyMTkuNyAyMTkuNyAwIDEgMCAwIDQzOS40IDIxOS43IDIxOS43IDAgMSAwIDAtNDM5LjR6bTAgOC4yYTIxMS41IDIxMS41IDAgMSAxIDAgNDIzIDIxMS41IDIxMS41IDAgMSAxIDAtNDIzem0xODYuMiAyNjBjLTQuNCAxNy4xLTExLjIgMzMuNS0yMC4xIDQ4LjdsLTc0LjEtMzUuOSA2MS41IDU0LjhjLTEwLjYgMTQuMS0yMy4yIDI2LjYtMzcuMiAzNy4zbC01NC44LTYxLjYgMzUuOSA3NC4zYy0xNS4yIDktMzEuNiAxNS44LTQ4LjYgMjAuMmwtMjcuMy03OC41IDQuOCA4Mi45Yy04LjYgMS4yLTE3LjQgMS44LTI2LjMgMS44cy0xNy43LS42LTI2LjMtMS44bDQuOC04Mi41LTI3LjIgNzhjLTE3LjEtNC41LTMzLjQtMTEuMy00OC43LTIwLjJsMzUuOS03NC4zLTU0LjkgNjEuNmMtMTQtMTAuNy0yNi42LTIzLjItMzcuMi0zNy4zbDYxLjYtNTQuOS03NC4zIDM1LjlDODAuNyAzMzggNzQgMzIxLjcgNjkuNSAzMDQuNmw3Ny44LTI3LjEtODIuMiA0LjhjLTEuMi04LjYtMS44LTE3LjMtMS44LTI2LjIgMC05IC42LTE3LjggMS44LTI2LjVsODIuNCA0LjgtNzcuOS0yNy4yYzQuNS0xNy4xIDExLjMtMzMuNSAyMC4yLTQ4LjdsNzQuMiAzNS45LTYxLjUtNTQuOWMxMC43LTE0IDIzLjItMjYuNiAzNy4zLTM3LjJsNTQuOCA2MS41LTM1LjgtNzQuMmMxNS4yLTguOSAzMS42LTE1LjcgNDguNi0yMC4xbDI2LjkgNzcuMi00LjctODEuNmM4LjYtMS4yIDE3LjQtMS44IDI2LjMtMS44czE3LjcgLjYgMjYuMyAxLjhsLTQuNyA4Mi4yIDI3LTc3LjhjMTcuMyA0LjUgMzMuNiAxMS40IDQ4LjYgMjAuMmwtMzUuOCA3NC4xIDU0LjctNjEuNWMxNC4xIDEwLjcgMjYuNiAyMy4yIDM3LjIgMzcuMmwtNjEuNCA1NC44IDc0LjEtMzUuOWM4LjkgMTUuMiAxNS43IDMxLjYgMjAuMiA0OC42bC03Ny44IDI3LjEgODIuMi00LjdjMS4yIDguNyAxLjggMTcuNSAxLjggMjYuNSAwIDguOS0uNiAxNy42LTEuOCAyNi4ybC04Mi4xLTQuNyA3Ny43IDI3LjF6Il0KICAgIH07CiAgICBmYUZ1bGNydW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZnVsY3J1bSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmNTBiIiwgIk02My44IDE2NC4xTDI4LjQgMjA3LjctNyAxNjQuMSAyOC40IDEyMC42IDYzLjggMTY0LjF6TTExMi4yIDBsLTIwLjUgMTk4LjItNTEgNTcuOCA1MSA1Ny44IDIwLjUgMTk4LjIgMC0yMTEuMS00MS4xLTQ0LjkgNDEuMS00NC45IDAtMjExLjF6bTc5LjcgMTY0LjFsMzUuNCA0My42IDM1LjQtNDMuNi0zNS40LTQzLjUtMzUuNCA0My41em0tNDguNSA0N2w0MS4xIDQ0LjktNDEuMSA0NC45IDAgMjExLjEgMjAuNi0xOTguMiA1MS01Ny44LTUxLTU3LjgtMjAuNi0xOTguMiAwIDIxMS4xeiJdCiAgICB9OwogICAgZmFCcmF2ZVJldmVyc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnJhdmUtcmV2ZXJzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjNkIiwgIk0yOTguNSAwYzMgMCA1LjggMS4zIDcuOCAzLjZsMzguMSA0NGMuNS0uMSAxLS4yIDEuNS0uMyA5LjItMS42IDE4LjYtMi4yIDI3LjctMS4yIDExLjYgMS40IDIxLjUgNS40IDI4LjkgMTIuOSA3LjcgNy44IDE1LjQgMTUuOCAyMi42IDIzLjYgMi41IDIuNyA0LjkgNS4yIDYuOSA3LjQgLjcgLjggMS40IDEuNSAxLjkgMiAzLjQgMy43IDQuMiA4LjEgMi43IDExLjlsLTkuOCAyNC42IDEzLjEgMzguMWMuNyAyIC44IDQuMSAuMiA2LjItLjEgLjQtLjEgLjQtLjUgMi4xbC0xLjUgNS44Yy0xLjYgNi4zLTMuNSAxMy4zLTUuNCAyMC45LTUuNiAyMS42LTExLjIgNDMuMi0xNi40IDYzLjQtMTIuOSA0OS45LTIxLjQgODIuNy0yMy40IDkwLjktMTEuMSA0NC41LTE5LjkgNjAtNDguMyA4MC4zLTI0LjkgMTcuOC03Ni44IDUzLjYtODYuOCA2MC0xIC42LTIgMS4zLTMuNCAyLjMtLjUgLjQtMy4yIDIuMi0zLjkgMi43LTQuOSAzLjMtOC4zIDUuNS0xMi4xIDcuMy00LjcgMi4yLTkuMyAzLjUtMTMuOSAzLjVzLTkuMS0xLjItMTMuOS0zLjVjLTMuNy0xLjgtNy4yLTMuOS0xMi4xLTcuMy0uOC0uNS0zLjQtMi40LTMuOS0yLjctMS40LTEtMi41LTEuNy0zLjQtMi4zLTEwLTYuNC02MS45LTQyLjEtODYuOC02MC0yOC40LTIwLjQtMzcuMi0zNS44LTQ4LjMtODAuMy0yLTguMi0xMC41LTQxLTIzLjMtOTAuNS01LjMtMjAuNi0xMC45LTQyLjItMTYuNS02My44LTItNy42LTMuOC0xNC42LTUuNC0yMC45bC0xLjUtNS44LS41LTIuMWMtLjUtMi0uNC00LjIgLjItNi4ybDEzLjEtMzguMS05LjktMjQuNWMtMS41LTMuOC0uNy04LjIgMi0xMS4yIDEuMi0xLjMgMS44LTIgMi42LTIuOCAyLTIuMiA0LjQtNC43IDYuOS03LjQgNy4zLTcuNyAxNS0xNS43IDIyLjctMjMuNSA3LjQtNy41IDE3LjMtMTEuNiAyOC45LTEyLjkgOS4xLTEuMSAxOC41LS41IDI3LjcgMS4yIC41IC4xIDEgLjIgMS41IC4zbDM4LjEtNDRjMi0yLjQgNC44LTMuNyA3LjgtMy43bDE0OCAwem0tNC43IDIxLjFsLTEzOC42IDAtMzkuMSA0NS4xYy0yLjYgMy02LjcgNC4zLTEwLjYgMy4yLS4yLS4xLS43LS4yLTEuNS0uNC0xLjMtLjMtMi45LS42LTQuNS0uOS03LjQtMS4zLTE0LjktMS44LTIxLjctMS03LjMgLjktMTMgMy4yLTE2LjYgNi45LTcuNiA3LjctMTUuMiAxNS42LTIyLjMgMjMuMy0xLjcgMS44LTMuMyAzLjUtNC44IDUuMWw4LjggMjJjMSAyLjQgMSA1IC4yIDcuNUwyOS43IDE3MC42Yy40IDEuNCAuNSAxLjkgMS4yIDQuOCAxLjYgNi4zIDMuNSAxMy4zIDUuNCAyMC45IDUuNiAyMS42IDExLjIgNDMuMiAxNi40IDYzLjQgMTIuOSA1MCAyMS40IDgyLjggMjMuNCA5MSAxMC4xIDQwLjEgMTYuNCA1MS4zIDQwLjIgNjguMyAyNC42IDE3LjYgNzYuMyA1My4yIDg1LjkgNTkuMyAxLjIgLjggMi41IDEuNiA0IDIuNyAuNiAuNCAzLjIgMi4yIDMuOSAyLjcgNCAyLjggNi43IDQuNCA5LjIgNS42IDIuMiAxIDMuOSAxLjUgNS4xIDEuNXMyLjktLjUgNS4xLTEuNWMyLjUtMS4yIDUuMi0yLjggOS4yLTUuNiAuNy0uNSAzLjMtMi4zIDMuOS0yLjcgMS42LTEuMSAyLjgtMS45IDQtMi43IDkuNi02LjEgNjEuMy00MS43IDg1LjktNTkuMyAyMy44LTE3LjEgMzAuMi0yOC4yIDQwLjEtNjguMyAyLjEtOC4zIDEwLjUtNDEuMSAyMy4zLTkwLjcgNS4zLTIwLjYgMTAuOS00Mi4yIDE2LjUtNjMuOCAyLTcuNiAzLjgtMTQuNiA1LjQtMjAuOSAuNy0yLjkgLjktMy40IDEuMi00LjhsLTEzLjMtMzguOGMtLjgtMi40LS44LTUuMSAuMi03LjVsOC44LTIyYy0xLjUtMS42LTMuMS0zLjMtNC44LTUuMS03LjItNy42LTE0LjctMTUuNS0yMi4zLTIzLjMtMy43LTMuNy05LjMtNi0xNi42LTYuOS02LjgtLjgtMTQuNC0uMy0yMS43IDEtMS43IC4zLTMuMiAuNi00LjUgLjktLjggLjItMS4zIC4zLTEuNSAuNC0zLjggMS4xLTcuOS0uMi0xMC42LTMuMkwyOTMuOCAyMS4xek0yMjQuNSAzMTZjMi44IDAgMjAuOSA2LjUgMzUuNCAxNC4xczI1IDEzIDI4LjMgMTUuMiAxLjMgNi4yLTEuNyA4LjQtNDQuMSAzNC42LTQ4LjEgMzguMi05LjggOS41LTEzLjggOS41LTkuOC01LjktMTMuOC05LjUtNDUuMS0zNi00OC4xLTM4LjItNS4xLTYuMi0xLjctOC40IDEzLjktNy41IDI4LjMtMTUuMiAzMi41LTE0LjEgMzUuNC0xNC4xbC0uMiAwem0uMS0yMzAuN2MuNyAwIDguOCAuMiAyMC41IDQuMiAxMi4zIDQuMiAyNS43IDkuNCAzMS45IDkuNHM1MS45LTguOSA1MS45LTguOSA1NC4yIDY2LjcgNTQuMiA4MS02LjggMTgtMTMuNyAyNS40LTM2LjggMzkuOC00MC43IDQzLjktMTEuOSAxMC41LTcuMSAyMS44IDExLjcgMjUuOCAzLjkgNDAuNC0yMSAyNC40LTI5LjQgMjIuOC0yOC40LTEyLjItMzUuNy0xNy4xLTMwLjUtMjQuMy0zMC41LTMxLjggMjQtMjAuOCAyOC40LTIzLjkgMjQuNy0xNC44IDI1LjEtMTkuNCAuMy02LTUuNy0xNy40LTE2LjctMjYuNy0xNC45LTM2LjggMTkuMS0xNS40IDMxLjUtMjAuMiAzNi4yLTEzLjcgMzkuMi0xNS4xIDIuMi0yLjctNi44LTMuNi0zNC42LTQuMy00Ni4xLTEuMS0zMS4yIDguMi0zMi44IDEwLjktMyAyLjctMS40IDExLjggMTAuMSA1Mi44IDEwLjkgNjAuNiAyLjQgMTIuOS01LjggMTQuOC0yMi4xIDUuMi0yNi44IDUuMi0xOC42LTMuMy0yNi44LTUuMi02LjYtNy01LjgtMTQuOCA5LjMtNTEuNSAxMC45LTYwLjYgLjItOS4yLTEuNC0xMS44LTIxLjMtNy42LTMyLjgtMTAuOS0zNy4xIC4yLTQ2LjEgMS4xLTkuOCAyLjItNi44IDMuNiAyNi44IDEwLjQgMzkuMiAxNS4xIDI5LjcgMTAgMzEuNSAyMC4yLTkgMjUuNC0xNC45IDM2LjgtNi4xIDEyLjgtNS43IDE3LjQgMjAuNiAxNi40IDI1LjEgMTkuNCAyOC40IDE2LjQgMjguNCAyMy45LTIzLjIgMjctMzAuNSAzMS44LTI3LjIgMTUuNC0zNS43IDE3LjEtMjEuNy04LjItMjkuNC0yMi44LS44LTI5LjEgMy45LTQwLjQtMy4zLTE3LjctNy4xLTIxLjgtMzMuOC0zNi41LTQwLjctNDMuOS0xMy43LTExLjItMTMuNy0yNS40IDU0LjItODEgNTQuMi04MSA0NS44IDguOSA1MS45IDguOSAxOS41LTUuMiAzMS45LTkuNCAyMC42LTQuMiAyMC42LTQuMmwtLjMgMHoiXQogICAgfTsKICAgIGZhQXZpYW5leCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhdmlhbmV4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzNzQiLCAiTTQ1My4yIDMybC0zMTIgMEMxMDIuMyAzMiA2NSA2My4yIDU3LjkgMTAxLjdMMS4zIDQxMC4zQy01LjggNDQ4LjggMjAgNDgwIDU5IDQ4MGwzMTIgMGMzOC45IDAgNzYuMi0zMS4yIDgzLjMtNjkuN0w1MTEgMTAxLjhDNTE4IDYzLjIgNDkyLjIgMzIgNDUzLjIgMzJ6TTM5NSAzNzkuM2wtMzIgMTMuNS0xMTUuNC0xMTBjLTE0LjcgMTAtMjkuMiAxOS41LTQxLjcgMjcuMWwyMi4xIDY0LjItMTcuOSAxMi43LTQwLjYtNjEtNTIuNC00OC4xIDE1LjctMTUuNCA1OCAzMS4xYzkuMy0xMC41IDIwLjgtMjIuNiAzMi44LTM0LjlsLTIwLjUtMjkuNi02OC44LTk5LjggMTguOC0yOC45IDguOS00LjggMTAzLjEgMTEyLjQgNC45IDQuNWMxOS40LTE4LjggMzMuOC0zMi40IDMzLjgtMzIuNCA3LjctNi41IDIxLjUtMi45IDMwLjcgNy45IDkgMTAuNSAxMC42IDI0LjcgMi43IDMxLjMtMS44IDEuMy0xNS41IDExLjQtMzUuMyAyNS42bDQuNSA3LjMgOTQuOSAxMTkuNC02LjMgNy45eiJdCiAgICB9OwogICAgZmFOczggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibnM4IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzZDUiLCAiTTEwNC4zIDI2OS4ybDI2LjEgMCAwLTI2LjItMjYuMSAwIDAgMjYuMnpNMTU2LjggMjQzbC0uMS0yNi4yIDAtLjljLS4yLTEwLjQtNC40LTIwLjMtMTEuOS0yNy42cy0xNy41LTExLjMtMjcuOS0xMS4xLTIwLjMgNC40LTI3LjYgMTEuOC0xMS4zIDE3LjUtMTEuMiAyNy45bDAgLjIgMjYuNCAwIDAtLjJjLjEtMy40IDEuNS02LjYgMy45LTlzNS43LTMuNyA5LjEtMy43IDYuNyAxLjMgOS4xIDMuNyAzLjggNS42IDMuOSA5bDAgMjYuMiAyNi4zIDB6bTUyLjQgMjUuOGMwIDEyLTIuNCAyMy44LTYuOSAzNC45cy0xMS4zIDIxLjEtMTkuNyAyOS42LTE4LjUgMTUuMi0yOS42IDE5LjctMjIuOSA2LjktMzQuOSA2LjlsLS42IDBjLTI0LjIgMC00Ny4zLTkuNi02NC40LTI2LjdTMjYuMyAyOTMgMjYuMyAyNjguOGwtMjYuMyAwIDAgLjJjMCAxNS40IDMuMSAzMC43IDkgNDQuOXMxNC42IDI3LjIgMjUuNSAzOC4xIDIzLjkgMTkuNSAzOC4xIDI1LjQgMjkuNSA4LjkgNDQuOSA4LjlsLjggMGMxNS40IDAgMzAuNy0zIDQ0LjktOXMyNy4yLTE0LjYgMzguMS0yNS41IDE5LjUtMjMuOCAyNS40LTM4LjEgOC45LTI5LjUgOC45LTQ0LjlsMC0yNi0yNi4zIDAgMCAyNnptLTE1Ny4yIDBjLjEgMTcuMyA3IDMzLjkgMTkuMiA0Ni4xczI4LjggMTkuMSA0Ni4xIDE5LjEgMzMuOS02LjkgNDYuMS0xOS4xIDE5LjItMjguOCAxOS4yLTQ2LjFsLTI2LjMgMGMtLjIgMTAuMi00LjQgMjAtMTEuNyAyNy4ycy0xNy4xIDExLjItMjcuNCAxMS4yLTIwLjEtNC0yNy40LTExLjItMTEuNS0xNi45LTExLjctMjcuMmwwLTI2LTI2LjMgMCAwLTI2LjZjLjMtMTcuMyA3LjQtMzMuOCAxOS43LTQ1LjhzMjktMTguOCA0Ni4zLTE4LjYgMzMuOCA3LjIgNDUuOSAxOS41IDE4LjkgMjguOSAxOC45IDQ2LjJsMCAyNS4zIDI2LjMgMCAwLTI1LjNjMC0yNC4zLTkuNy00Ny43LTI2LjktNjQuOXMtNDAuNS0yNi45LTY0LjktMjYuOS00Ny43IDkuNy02NC45IDI2LjktMjYuOSA0MC41LTI2LjkgNjQuOWwwIDI1LjQgMjYuMyAwIDAgMjZ6bTQxOC40LTcxLjJjMTMuNyAwIDI0LjYgNi42IDMwLjEgMTguM2wuNyAxLjUgMjMuMi0xMS41LS42LTEuNGMtOC0xOS4zLTI4LjUtMzEuMy01My40LTMxLjMtMjMuMSAwLTQzLjYgMTEuNC01MSAyOC40LS4xIDI2LjktLjIgMjMuOSAwIDI0LjggNC43IDExIDE0LjYgMTkuNCAyOC43IDI0LjIgNi41IDIgMTMuMSAzLjMgMTkuOCA0IDUuNSAuNyAxMC42IDEuNCAxNS44IDMuMSA2LjQgMi4xIDEwLjUgNS4zIDEyLjggOS44bDAgOS45Yy0zLjcgNy41LTEzLjggMTIuMy0yNS44IDEyLjMtMTQuMyAwLTI2LTYuOS0zMS45LTE5bC0uNy0xLjUtMjMgMTEuNSAuNiAxLjRjNy45IDE5LjQgMjkuNiAzMiA1NS4zIDMyIDIzLjYgMCA0NC42LTExLjQgNTIuMy0yOC40bC4yLTI1LjktLjItLjdjLTQuOS0xMS0xNS4yLTE5LjYtMjguOS0yNC4yLTcuNy0yLjctMTQuMy0zLjYtMjAuNy00LjQtNS0uNS0xMC0xLjUtMTQuOC0yLjktNi4zLTEuOS0xMC40LTUuMS0xMi42LTkuNmwwLTguNGMzLjQtNy40IDEyLjktMTIuMSAyNC4yLTEyLjFsMCAwek0yODcuNiAzMTEuM2wyNi4xIDAgMC02OC40LTI2LjEgMCAwIDY4LjR6TTYzOS44IDI1OGMtMi45LTYuMy04LjMtMTItMTUuNC0xNi43IDUuNi0zLjggMTAuMS05LjEgMTMtMTUuM2wuMi0yNS4zLS4yLS43Yy03LjQtMTYtMjYuNy0yNi43LTQ4LjItMjYuN1M1NDguNSAxODQgNTQxLjEgMjAwbC0uMiAyNS4zIC4yIC43YzIuOSA2LjEgNy40IDExLjQgMTMgMTUuMy03LjIgNC43LTEyLjUgMTAuNS0xNS40IDE2LjdsLS4yIDI4LjkgLjIgLjdjNy42IDE2IDI3LjkgMjYuNyA1MC42IDI2LjdzNDMuMS0xMC43IDUwLjYtMjYuN2wuMi0yOC45LS4yLS43em0tNzMuMi01MC44YzMuNi02LjMgMTIuNi0xMC41IDIyLjYtMTAuNXMxOSA0LjIgMjIuNiAxMC41bDAgMTMuN2MtMy41IDYuMi0xMi42IDEwLjMtMjIuNiAxMC4zcy0xOS4xLTQuMi0yMi42LTEwLjNsMC0xMy43em00Ny4zIDcyLjJjLTMuOCA2LjYtMTMuMyAxMC45LTI0LjcgMTAuOS0xMS4xIDAtMjEtNC40LTI0LjctMTAuOWwwLTE2LjJjMy43LTYuMyAxMy41LTEwLjUgMjQuNy0xMC41IDExLjMgMCAyMC45IDQuMSAyNC43IDEwLjVsMCAxNi4yek0zNzYuNCAyNjZsLTU5LjgtODkuNy0yOSAwIDAgNDAuNiAyNi41IDAgMCAuNCA2Mi41IDk0LjEgMjUuNyAwIDAtMTM1LjEtMjUuOSAwIDAgODkuN3oiXQogICAgfTsKICAgIGZhU3F1YXJlUGludGVyZXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waW50ZXJlc3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicGludGVyZXN0LXNxdWFyZSJdLCAiZjBkMyIsICJNMzg0IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNzIuNiAwLTIuMi0uOGMtNS40LTQ4LjEtMy4xLTU3LjUgMTUuNy0xMzQuNyAzLjktMTYgOC41LTM1IDEzLjktNTcuOSAwIDAtNy4zLTE0LjgtNy4zLTM2LjUgMC03MC43IDc1LjUtNzggNzUuNS0yNSAwIDEzLjUtNS40IDMxLjEtMTEuMiA0OS44LTMuMyAxMC42LTYuNiAyMS41LTkuMSAzMi01LjcgMjQuNSAxMi4zIDQ0LjQgMzYuNCA0NC40IDQzLjcgMCA3Ny4yLTQ2IDc3LjItMTEyLjQgMC01OC44LTQyLjMtOTkuOS0xMDIuNi05OS45LTY5LjkgMC0xMTAuOSA1Mi40LTExMC45IDEwNi42IDAgMjEuMSA4LjIgNDMuNyAxOC4zIDU2IDIgMi40IDIuMyA0LjUgMS43IDctMS4xIDQuNy0zLjEgMTIuOS00LjcgMTkuMi0xIDQtMS44IDcuMy0yLjEgOC42LTEuMSA0LjUtMy41IDUuNS04LjIgMy4zLTMwLjYtMTQuMy00OS44LTU5LjEtNDkuOC05NS4xIDAtNzcuNSA1Ni4yLTE0OC42IDE2Mi4yLTE0OC42IDg1LjIgMCAxNTEuNCA2MC43IDE1MS40IDE0MS44IDAgODQuNi01My4zIDE1Mi43LTEyNy40IDE1Mi43LTI0LjkgMC00OC4zLTEyLjktNTYuMy0yOC4yIDAgMC0xMi4zIDQ2LjktMTUuMyA1OC40LTUgMTkuMy0xNy42IDQyLjktMjcuNCA1OS4zTDM4NCA0ODBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdFNxdWFyZSA9IGZhU3F1YXJlUGludGVyZXN0OwogICAgZmFCbHVldG9vdGhCID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJsdWV0b290aC1iIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYyOTQiLCAiTTE2NC45IDI2MEwyNTcuNSAxNTYuNyAxMTEuNiAwIDExMS42IDIwNi4zIDI1LjQgMTIwLjItNiAxNTEuNiAxMDIuMSAyNjAtNiAzNjguNCAyNS40IDM5OS44IDExMS42IDMxMy43IDExNC4zIDUxMiAyNjIuOCAzNjMuNCAxNjQuOSAyNjB6bTQwLjktMTAzbC01MCA1MC0uMy0xMDAuMyA1MC4zIDUwLjN6bS01MCAxNTZsNTAgNTAtNTAuMyA1MC4zIC4zLTEwMC4zeiJdCiAgICB9OwogICAgZmFHcmlwZmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJncmlwZmlyZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2FjIiwgIk04MC41IDMwMS40YzAtNzMuOCAxMDUuMS0xMjIuNSAxMDUuMS0yMDMgMC00Ny4xLTM0LTg4LTM5LjEtOTAuNCAuNCAzLjMgLjYgNi43IC42IDEwIDAgOTIuMS0xNDcuMSAxNTMuOS0xNDcuMSAyNjguNiAwIDQ5LjggMzIuMiA3OS4yIDY2LjUgMTA4LjMgNjUuMSA0Ni43IDc4LjEgNzEuNCA3OC4xIDg2LjYgMCAxMC4xLTQuOCAxNy00LjggMjIuMyAxMy4xLTE2LjcgMTcuNC0zMS45IDE3LjUtNDYuNCAwLTI5LjYtMjEuNy01Ni4zLTQ0LjItODYuNS0xNi0yMi4zLTMyLjYtNDIuNi0zMi42LTY5LjV6bTIwNS4zLTM5Yy0xMi4xLTY2LjgtNzgtMTI0LjQtOTQuNy0xMzAuOWw0IDcuMmMyLjQgNS4xIDMuNCAxMC45IDMuNCAxNy4xIDAgNDQuNy01NC4yIDExMS4yLTU2LjYgMTE2LjctMi4yIDUuMS0zLjIgMTAuNS0zLjIgMTUuOCAwIDIwLjEgMTUuMiA0Mi4xIDE3LjkgNDIuMSAyLjQgMCA1Ni42LTU1LjQgNTguMS04Ny43IDYuNCAxMS43IDkuMSAyMi42IDkuMSAzMy40IDAgNDEuMi00MS44IDk2LjktNDEuOCA5Ni45IDAgMTEuNiAzMS45IDUzLjIgMzUuNSA1My4yIDEgMCAyLjItMS40IDMuMi0yLjQgMzcuOS0zOS4zIDY3LjMtODUgNjcuMy0xMzYuOCAwLTgtLjctMTYuMi0yLjItMjQuNnoiXQogICAgfTsKICAgIGZhU3F1YXJlR29vZ2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ29vZ2xlLXBsdXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiZ29vZ2xlLXBsdXMtc3F1YXJlIl0sICJmMGQ0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNNjQgMjU2YzAtNTUuMyA0NC43LTEwMCAxMDAtMTAwIDI3IDAgNDkuNSA5LjggNjcgMjYuMmwtMjcuMSAyNi4xYy03LjQtNy4xLTIwLjMtMTUuNC0zOS44LTE1LjQtMzQuMSAwLTYxLjkgMjguMi02MS45IDYzLjIgMCAzNC45IDI3LjggNjMuMiA2MS45IDYzLjIgMzkuNiAwIDU0LjQtMjguNSA1Ni44LTQzLjFsLTU2LjkgMCAwLTM0LjQgOTQuNCAwYzEgNSAxLjYgMTAuMSAxLjYgMTYuNiAwIDU3LjEtMzguMyA5Ny42LTk2IDk3LjYtNTUuMyAwLTEwMC00NC43LTEwMC0xMDB6bTI5MSAxOC4ybDAgMjktMjkuMiAwIDAtMjktMjkgMCAwLTI5LjIgMjkgMCAwLTI5IDI5LjIgMCAwIDI5IDI5IDAgMCAyOS4yLTI5IDB6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsdXNTcXVhcmUgPSBmYVNxdWFyZUdvb2dsZVBsdXM7CiAgICBmYUFwcFN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcC1zdG9yZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzZmIiwgIk0yNTUuOSAxMjAuOWw5LjEtMTUuN2M1LjYtOS44IDE4LjEtMTMuMSAyNy45LTcuNXMxMy4xIDE4LjEgNy41IDI3LjlsLTg3LjUgMTUxLjUgNjMuMyAwYzIwLjUgMCAzMiAyNC4xIDIzLjEgNDAuOGwtMTg1LjUgMGMtMTEuMyAwLTIwLjQtOS4xLTIwLjQtMjAuNHM5LjEtMjAuNCAyMC40LTIwLjRsNTIgMCA2Ni42LTExNS40LTIwLjgtMzYuMWMtNS42LTkuOC0yLjMtMjIuMiA3LjUtMjcuOSA5LjgtNS42IDIyLjItMi4zIDI3LjkgNy41bDguOSAxNS43em0tNzguNyAyMThsLTE5LjYgMzRjLTUuNiA5LjgtMTguMSAxMy4xLTI3LjkgNy41cy0xMy4xLTE4LjEtNy41LTI3LjlsMTQuNi0yNS4yYzE2LjQtNS4xIDI5LjgtMS4yIDQwLjQgMTEuNnptMTY4LjktNjEuN2w1My4xIDBjMTEuMyAwIDIwLjQgOS4xIDIwLjQgMjAuNFM0MTAuNSAzMTggMzk5LjIgMzE4bC0yOS41IDAgMTkuOSAzNC41YzUuNiA5LjggMi4zIDIyLjItNy41IDI3LjktOS44IDUuNi0yMi4yIDIuMy0yNy45LTcuNS0zMy41LTU4LjEtNTguNy0xMDEuNi03NS40LTEzMC42LTE3LjEtMjkuNS00LjktNTkuMSA3LjItNjkuMSAxMy40IDIzIDMzLjQgNTcuNyA2MC4xIDEwNHpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MCAyNTZhMjE2IDIxNiAwIDEgMSA0MzIgMCAyMTYgMjE2IDAgMSAxIC00MzIgMHoiXQogICAgfTsKICAgIGZhV2l4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpeCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWNmIiwgIk0zOTMuNCAxMzEuN2MwIDEzIDIuMSAzMi43LTI4LjcgNDMuOC05LjUgMy40LTE2IDkuNy0xNiA5LjcgMC0zMSA0LjctNDIuMiAxNy40LTQ4LjkgOS44LTUuMSAyNy4yLTQuNiAyNy4yLTQuNnpNMjc3LjYgMTY3LjJsLTM0LjIgMTMyLjctMjguNS0xMDguNmMtNy43LTMyLTIwLjgtNDguNS00OC40LTQ4LjUtMjcuNCAwLTQwLjcgMTYuMi00OC40IDQ4LjVMODkuNSAyOTkuOSA1NS4zIDE2Ny4yQzQ5LjcgMTQwLjUgMjMuOSAxMjkgMCAxMzJMNjUuNiAzNzkuOXMyMS42IDEuNiAzMi41LTRjMTQuMi03LjIgMjEtMTIuOCAyOS42LTQ2LjYgNy43LTMwLjEgMjkuMS0xMTguNCAzMS4xLTEyNC43IDQuOC0xNC45IDExLjEtMTMuOCAxNS40IDAgMiA2LjMgMjMuNSA5NC42IDMxLjEgMTI0LjcgOC42IDMzLjcgMTUuNCAzOS4zIDI5LjYgNDYuNiAxMC44IDUuNSAzMi41IDQgMzIuNSA0TDMzMi45IDEzMmMtMjQuNC0zLjEtNDkuOCA4LjktNTUuMyAzNS4zem0xMTUuOCA1LjJzLTQuMSA2LjMtMTMuNSAxMS42Yy02IDMuNC0xMS44IDUuNi0xOCA4LjYtMTUuMSA3LjMtMTMuMiAxMy45LTEzLjIgMzUuMmwwIDE1Mi4xczE2LjYgMi4xIDI3LjQtMy40YzEzLjktNy4xIDE3LjEtMTQgMTcuMy00NC44bDAtMTUwLjMgMCAwIDAtOXptMTYzLjQgODQuMUw2NDAgMTMyLjhzLTM1LjEtNi01Mi41IDkuOGMtMTMuMyAxMi4xLTI0LjQgMjkuNi01NC4yIDcyLjUtLjUgLjctNi4zIDEwLjUtMTMuMSAwLTI5LjMtNDIuMi00MC44LTYwLjMtNTQuMi03Mi41LTE3LjQtMTUuOC01Mi41LTkuOC01Mi41LTkuOGw4My4yIDEyMy43LTgzIDEyMy40czM2LjYgNC42IDU0LTExLjJjMTEuNS0xMC41IDE3LjYtMjAuNCA1Mi41LTcwLjcgNi44LTEwLjUgMTIuNi0uOCAxMy4xIDAgMjkuNCA0Mi40IDM5LjIgNTguMSA1My4xIDcwLjcgMTcuNCAxNS44IDUzLjMgMTEuMiA1My4zIDExLjJsLTgzLTEyMy40eiJdCiAgICB9OwogICAgZmFJbnRlcmNvbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnRlcmNvbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2FmIiwgIk0zOTIgMzJMNTYgMzJDMjUuMSAzMiAwIDU3LjEgMCA4OEwwIDQyNGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMzYgMGMzMC45IDAgNTYtMjUuMSA1Ni01NmwwLTMzNmMwLTMwLjktMjUuMS01Ni01Ni01NnpNMjgzLjcgMTE0LjFjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxOTkuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTE5OS41em0tNzQuNi03LjVjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAyMTYuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTIxNi41em0tNzQuNyA3LjVjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxOTkuNWMwIDE5LjgtMjkuOSAxOS44LTI5LjkgMGwwLTE5OS41ek01OS43IDE0NGMwLTE5LjggMjkuOS0xOS44IDI5LjkgMGwwIDEzNC4zYzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTM0LjN6TTM4My4xIDM3MS44Yy03Mi44IDYzLTI0MS43IDY1LjQtMzE4LjEgMC0xNS0xMi44IDQuNC0zNS41IDE5LjQtMjIuNyA2NS45IDU1LjMgMjE2LjEgNTMuOSAyNzkuMyAwIDE0LjktMTIuOSAzNC4zIDkuOCAxOS40IDIyLjd6bTUuMi05My41YzAgMTkuOC0yOS45IDE5LjgtMjkuOSAwbDAtMTM0LjNjMC0xOS44IDI5LjktMTkuOCAyOS45IDBsMCAxMzQuM3oiXQogICAgfTsKICAgIGZhUmVhY3RldXJvcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVhY3RldXJvcGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1ZCIsICJNMjUwLjcgMjExLjdsNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjEtLjEtMi4zLTYuOC0yLjMgNi44LTcuMiAuMSA1LjcgNC4zLTIgNi44em02My43IDBsNS44LTQuMSA1LjggNC4xLTIuMS02LjggNS43LTQuMy03LjItLjEtMi4zLTYuOC0yLjMgNi44LTcuMiAuMSA1LjcgNC4zLTEuOSA2Ljh6bS05MS4zIDUwLjVsLTMuNCAwYy00LjggMC0zLjggNC0zLjggMTIuMSAwIDQuNy0yLjMgNi4xLTUuOCA2LjFzLTUuOC0xLjQtNS44LTYuMWwwLTM2LjZjMC00LjcgMi4zLTYuMSA1LjgtNi4xczUuOCAxLjQgNS44IDYuMWMwIDcuMi0uNyAxMC41IDMuOCAxMC41bDMuNCAwYzQuNy0uMSAzLjgtMy45IDMuOC0xMi4zIDAtOS45LTYuNy0xNC4xLTE2LjgtMTQuMWwtLjIgMGMtMTAuMSAwLTE2LjggNC4yLTE2LjggMTQuMWwwIDQwLjFjMCAxMC40IDYuNyAxNC4xIDE2LjggMTQuMWwuMiAwYzEwLjEgMCAxNi44LTMuOCAxNi44LTE0LjEgMC05LjkgMS4xLTEzLjgtMy44LTEzLjh6bS04MC43IDE3LjRsLTE0LjcgMCAwLTE5LjMgMTEuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTExLjQgMCAwLTE4LjMgMTQuNCAwYzIuNSAwIDMuOC0xLjMgMy44LTMuOGwwLTIuMWMwLTIuNS0xLjMtMy44LTMuOC0zLjhsLTIxLjcgMGMtMi40LS4xLTMuNyAxLjMtMy43IDMuOGwwIDU5LjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDIxLjkgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yLjFjMC0yLjUtMS4zLTMuOC0zLjgtMy44em0tNDItMTguNWM0LjYtMiA3LjMtNiA3LjMtMTIuNGwwLTExLjljMC0xMC4xLTYuNy0xNC4xLTE2LjgtMTQuMWwtMTMuNCAwYy0yLjUgMC0zLjggMS4zLTMuOCAzLjhsMCA1OS4xYzAgMi41IDEuMyAzLjggMy44IDMuOGwzLjQgMGMyLjUgMCAzLjgtMS4zIDMuOC0zLjhsMC0yMi45IDUuNiAwIDcuNCAyMy41Yy4yIDEgLjggMS44IDEuNiAyLjRzMS44IC45IDIuNyAuOGwzLjMgMGMyLjggMCA0LTEuOCAzLjItNC40bC04LjEtMjMuOXptLTMuOC0xNGMwIDQuOC0yLjUgNi4xLTYuMSA2LjFsLTUuOCAwIDAtMjAuOSA1LjggMGMzLjYgMCA2LjEgMS4zIDYuMSA2LjFsMCA4Ljd6TTE3Ni4xIDIyNmMtLjEtLjUtLjItMS0uNC0xLjRzLS42LS44LTEtMS4xLS44LS42LTEuMy0uNy0xLS4yLTEuNS0uMWwtNi45IDBjLS41IDAtMSAwLTEuNCAuMnMtLjkgLjQtMS4zIC43LS43IC43LS45IDEuMS0uNCAuOS0uNCAxLjRsLTExIDU5LjJjLS41IDIuNyAuOSA0LjEgMy40IDQuMWwzIDBjLjUgLjEgMSAwIDEuNS0uMnMuOS0uNCAxLjMtLjcgLjctLjcgLjktMS4yIC40LS45IC40LTEuNGwxLjgtMTEuMyAxMi4yIDAgMS44IDExLjNjMCAuNSAuMiAxIC40IDEuNHMuNSAuOSAuOSAxLjIgLjggLjYgMS4zIC43IDEgLjIgMS41IC4ybDMuNSAwYzIuNiAwIDMuOS0xLjQgMy40LTQuMUwxNzYuMSAyMjZ6bS0xMi4zIDM5LjNsNC43LTI5LjcgNC43IDI5LjctOS40IDB6bTg5LjMgMjAuMmwwLTUzLjIgNy41IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAtMi4xYzAtMi41LTEuMy0zLjgtMy44LTMuOGwtMjUuOCAwYy0yLjUgMC0zLjggMS4zLTMuOCAzLjhsMCAyLjFjMCAyLjUgMS4zIDMuOCAzLjggMy44bDcuMyAwIDAgNTMuMmMwIDIuNSAxLjMgMy44IDMuOCAzLjhsMy40IDBjMi41IDAgMy44LTEuMyAzLjgtMy44bDAgMHptMjQ4LS44bC0xOS40IDAgMC0yNi43IDE2LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0xNi4xIDAgMC0yNS44IDE5LjEgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjcgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbC0yMi4yIDBjLS4zLS4xLS41LS4xLS44IDBzLS41IC4yLS43IC40LS4zIC40LS40IC43LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDIyLjUgMGMuMyAwIC41IDAgLjgtLjFzLjUtLjIgLjctLjQgLjMtLjQgLjQtLjYgLjEtLjUgLjEtLjhsMC0uOGMwLS4zIDAtLjUtLjEtLjhzLS4yLS41LS40LS43LS40LS4zLS43LS40LS41LS4xLS44LS4xbDAgMHpNNDA4IDIyMS44bC0uOCAwYy0xMC4xIDAtMTUuMyA0LjctMTUuMyAxNC4xbDAgNDAuMWMwIDkuMyA1LjIgMTQuMSAxNS4zIDE0LjFsLjggMGMxMC4xIDAgMTUuMy00LjggMTUuMy0xNC4xbDAtNDAuMWMwLTkuNC01LjItMTQuMS0xNS4zLTE0LjFsMCAwem0xMC4yIDUyLjRjLS4xIDgtMyAxMS4xLTEwLjUgMTEuMXMtMTAuNS0zLjEtMTAuNS0xMS4xbDAtMzYuNmMwLTcuOSAzLTExLjEgMTAuNS0xMS4xczEwLjUgMy4yIDEwLjUgMTEuMWwwIDM2LjZ6bS00Ni41LTE0LjVjNi4xLTEuNiA5LjItNi4xIDkuMi0xMy4zbDAtOS43YzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMWwtMTMuNyAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS43IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDEuMiAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNi0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLTI2LjkgMTEuNiAwIDEwLjQgMjcuMmMuMiAuNSAuNSAuOSAuOSAxLjFzLjkgLjQgMS40IC40bDEuNSAwYzEuNCAwIDItMSAxLjUtMi4zbC0xMC42LTI3LjN6bS02LjQtMy45bC0xMC4yIDAgMC0yOC41IDEwLjIgMGM3LjUgMCAxMC41IDMuMSAxMC41IDExLjFsMCA2LjRjMCA3LjgtMyAxMS0xMC41IDExbDAgMHptODUuOS0zMy4xbC0xMy43IDBjLS4zLS4xLS41LS4xLS44IDBzLS41IC4yLS43IC40LS4zIC40LS40IC43LS4xIC41LS4xIC44bDAgNjNjMCAuMyAwIC41IC4xIC44cy4yIC41IC40IC42IC40IC4zIC43IC40IC41IC4xIC44IC4xbDEuMiAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNi0uNCAuMy0uNCAuNC0uNiAuMS0uNSAuMS0uOGwwLTI2LjEgMTAuNiAwYzEwLjEgMCAxNS4zLTQuOCAxNS4zLTE0LjFsMC0xMC41YzAtOS40LTUuMi0xNC4xLTE1LjMtMTQuMXptMTAuMiAyMi44YzAgNy45LTMgMTEuMS0xMC41IDExLjFsLTEwLjIgMCAwLTI5LjIgMTAuMiAwYzcuNS0uMSAxMC41IDMuMSAxMC41IDExbDAgNy4xek0yNTkuNiAzMDhsLTIuMy02LjgtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xek00ODcuMiAxNzEuOWMtMTEuNy00LjQtMjMuNS04LjEtMzUuNi0xMS4zIDE5LjYtNzggMTEuNi0xMzQuNy0yMi4zLTE1My45LTM0LjUtMTkuNC04NS45IDQuMy0xMzguMiA1NS4yIDMuNCAzLjMgNi44IDYuNyAxMC4yIDEwLjIgODIuNS04MCAxMTkuNi01My41IDEyMC45LTUyLjggMjIuNCAxMi43IDM2IDU1LjggMTUuNSAxMzcuOC0yNy44LTYuNC01Ni4xLTEwLjctODQuNi0xMy03MS45LTEwMC41LTE0MC42LTE0Mi4xLTE4Mi4yLTE0Mi4xLTMwLjggMC00My44IDIxLTQ3LjYgMjcuNy0xOC4xIDMyLTEzLjMgODQuMiAuMSAxMzMuOC03MC41IDIwLjMtMTIwLjcgNTQuMS0xMjAuMyA5NSAuNSA1OS42IDEwMy4yIDg3LjggMTIyLjEgOTIuOC0yMC41IDgxLjktMTAuMSAxMzUuNiAyMi4zIDE1My45IDI4IDE1LjggNzUuMSA2IDEzOC4yLTU1LjItMy40LTMuMy02LjgtNi43LTEwLjItMTAuMi04Mi41IDgwLTExOS43IDUzLjUtMTIwLjkgNTIuOC0yMi4zLTEyLjYtMzYtNTUuNi0xNS41LTEzNy45IDEyLjQgMi45IDQxLjggOS41IDg0LjYgMTMgNzEuOSAxMDAuNCAxNDAuNiAxNDIgMTgyLjEgMTQyIDMwLjggMCA0My44LTIxIDQ3LjYtMjcuNyAxOC0zMS45IDEzLjMtODQuMS0uMS0xMzMuOCAxNTIuMy00My44IDE1Ni4yLTEzMC4yIDMzLjktMTc2LjNsMCAwek0xMzYgMzYuOGMyLjktNS4xIDExLjktMjAuMyAzNC45LTIwLjMgMzYuOCAwIDk4LjggMzkuNiAxNjMuMyAxMjYuMi0zMS4zLTEuOC02Mi43LTEuNS05My45IC45IDEzLTE4LjMgMjcuMS0zNS44IDQyLjItNTIuNC0zLjQtMy41LTYuOC02LjktMTAuMi0xMC4yLTE4LjMgMjAuMi0zNS4zIDQxLjctNTAuNyA2NC4yLTI4LjUgMi43LTU2LjcgNy42LTg0LjQgMTQuNi0uMi0xLjQtMjQuMy04Mi4yLTEuMi0xMjNsMCAwek00NDAuOCA0NzUuMWMtMi45IDUuMS0xMS44IDIwLjMtMzQuOSAyMC4zLTM2LjcgMC05OC43LTM5LjQtMTYzLjMtMTI2LjIgMzEuMyAxLjggNjIuNyAxLjUgOTMuOS0uOS0xMyAxOC4zLTI3LjEgMzUuOC00Mi4yIDUyLjQgMy40IDMuNSA2LjggNi45IDEwLjIgMTAuMiAxOC40LTIwLjIgMzUuMy00MS43IDUwLjctNjQuMiA0Ny4zLTQuNyA4MC4zLTEzLjUgODQuNC0xNC42IDIyLjcgODQuNCA0LjUgMTE3IDEuMiAxMjN6bTkuMS0xMzguNmMtMy42LTExLjktNy43LTI0LjEtMTIuNC0zNi40LTIuMSAwLTQuMi0uNS02LjEtMS41cy0zLjUtMi40LTQuNi00LjJsLS4xIC4xYy0xLjYgMS41LTMuNCAyLjctNS40IDMuNiA1LjcgMTQuMyAxMC42IDI4LjQgMTQuNyA0Mi4yLTIzLjcgNi00Ny43IDEwLjMtNzIgMTMgMy41LTUuMyAxNy4yLTI2LjIgMzIuMi01NC4yLTIuMS0uOC00LjItMS45LTYtMy4yLTEuMSAxLjItMy42IDQuMi0xMC45IDQuMi02LjIgMTEuMi0xNy40IDMwLjktMzMuOSA1NS4yLTM3LjQgMy4zLTc1IDMuNi0xMTIuNCAxLTcuOS0xMS4yLTIxLjUtMzEuMS0zNi44LTU3LjgtMS0uNC0yLS45LTMtMS41LTEuOSAxLjYtMy45IDMuMi0xMi42IDMuMiA2LjMgMTEuMiAxNy41IDMwLjcgMzMuOCA1NC42LTI0LjMtMi4zLTQ4LjQtNi4yLTcyLjItMTEuNyAzLjktMTQgOC42LTI4LjMgMTQuMS00Mi45LTMuMiAwLTUuNCAuMi04LjQtMS0yLjIgLjgtNC42IDEuMS02LjkgMS00LjkgMTMuNC05LjEgMjYuNS0xMi43IDM5LjQtMTU5LjktNDIuNi0xNDAuMy0xMjMuNi0xLjUtMTY0IDMuNiAxMS45IDcuNyAyNC4xIDEyLjQgMzYuNCAxMC40IDAgMTIuOSAzLjQgMTQuNCA1LjMgLjctLjggMS40LTEuNiAyLjMtMi4yLTUuOC0xNC43LTEwLjktMjkuMi0xNS4yLTQzLjMgNy0xLjggMzIuNC04LjQgNzItMTMtMTUuOSAyNC4zLTI2LjcgNDMuOS0zMi44IDU1LjMgMy4xIDEuOCA1LjMgNC42IDYuNCA4IDIuNS0zLjcgNi4xLTYuNiAxMC4yLTguNCA2LjUtMTEuNyAxNy45LTMxLjkgMzQuOC01Ni45IDM3LjQtMy4zIDc1LTMuNiAxMTIuNC0xIDMxLjUgNDQuNiAyOC45IDQ4LjEgNDIuNSA2NC41IDIuNi0zLjUgNi4zLTYgMTAuNC03LjQtNi40LTExLjQtMTcuNi0zMS0zNC4zLTU1LjUgNDAuNCA0LjEgNjUgMTAgNzIuMiAxMS43LTQgMTQuNC04LjkgMjkuMi0xNC42IDQ0LjIgMi41IDEgNC44IDIuNCA2LjggNC4zbC4xIC4xYzEtMS41IDIuMy0yLjggMy44LTMuOHMzLjMtMS42IDUuMS0xLjhjNC45LTEzLjQgOS4yLTI2LjYgMTIuOC0zOS41IDExLjcgMy4xIDIzLjIgNi44IDM0LjUgMTEgMTA2LjEgMzkuOSA3NCA4Ny45IDcyLjYgOTAuNC0xOS44IDM1LjEtODAuMSA1NS4yLTEwNS43IDYyLjV6bS0xMTQuNC0xMTRsLTEuMiAwYy0uMyAwLS41IDAtLjggLjFzLS41IC4yLS42IC40LS4zIC40LS40IC42LS4xIC41LS4xIC44bDAgNDkuOGMwIDcuOS0yLjYgMTEuMS0xMC4xIDExLjFzLTEwLjEtMy4xLTEwLjEtMTEuMWwwLTQ5LjhjMC0uMyAwLS41LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMWwtMS4yIDBjLS4zIDAtLjUgMC0uOCAuMXMtLjUgLjItLjcgLjQtLjMgLjQtLjQgLjYtLjEgLjUtLjEgLjhsMCA1MS41YzAgOS42IDUgMTQuMSAxNS4xIDE0LjFsLjQgMGMxMC4xIDAgMTUuMS00LjYgMTUuMS0xNC4xbDAtNTEuNWMwLS4zLS4xLS41LS4yLS44cy0uMy0uNS0uNS0uNi0uNC0uMy0uNy0uNC0uNS0uMS0uOC0uMXpNMzIxLjggMzA4bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXptLTMxLjEgNy40bC0yLjMtNi44LTIuMyA2LjgtNy4xIC4xIDUuNyA0LjMtMi4xIDYuOCA1LjgtNC4xIDUuOCA0LjEtMi4xLTYuOCA1LjctNC4zLTcuMS0uMXptNS4xLTMwLjhsLTE5LjQgMCAwLTI2LjcgMTYuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTE2LjEgMCAwLTI1LjggMTkuMSAwYy4zIDAgLjUgMCAuOC0uMXMuNS0uMiAuNy0uNCAuMy0uNCAuNC0uNyAuMS0uNSAuMS0uOGwwLS44YzAtLjMgMC0uNS0uMS0uOHMtLjItLjUtLjQtLjctLjQtLjMtLjctLjQtLjUtLjEtLjgtLjFsLTIyLjIgMGMtLjMgMC0uNSAwLS44IC4xcy0uNSAuMi0uNyAuNC0uMyAuNC0uNCAuNi0uMSAuNS0uMSAuOGwwIDYzYzAgLjMgMCAuNSAuMSAuOHMuMiAuNSAuNCAuNiAuNCAuMyAuNyAuNCAuNSAuMSAuOCAuMWwyMi41IDBjLjMgMCAuNSAwIC44LS4xcy41LS4yIC43LS40IC4zLS40IC40LS43IC4xLS41IC4xLS44bDAtLjhjMC0uMyAwLS42LS4xLS44cy0uMi0uNS0uNC0uNy0uNC0uNC0uNy0uNC0uNS0uMS0uOC0uMWwwIDB6bS03LjQtOTkuNGwtMi4zIDYuOC03LjEgLjEgNS43IDQuMy0yLjEgNi44IDUuOC00LjEgNS44IDQuMS0yLjEtNi44IDUuNy00LjMtNy4xLS4xLTIuMy02Ljh6Il0KICAgIH07CiAgICBmYVdhemUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2F6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNmIiwgIk01MDIuNiAyMDEuN2MxNC41IDg1LjktMzAuOSAxNjcuOS0xMTMuMiAyMDguMSAxMyAzNC4xLTEyLjQgNzAuMi00OC4zIDcwLjItMTMuMiAwLTI2LTUuMS0zNS42LTE0LjJzLTE1LjMtMjEuNi0xNi0zNC44Yy02LjQgLjItNjQuMiAwLTc2LjMtLjYtLjMgNi44LTEuOSAxMy41LTQuNyAxOS42cy02LjkgMTEuNy0xMS45IDE2LjMtMTAuOCA4LjItMTcuMiAxMC41LTEzLjIgMy40LTE5LjkgMy4xYy0zMy45LTEuNC01OC0zNC44LTQ3LTY3LjktMzcuMi0xMy4xLTcyLjUtMzQuOS05OS42LTcwLjgtMTMtMTcuMy0uNS00MS44IDIwLjgtNDEuOCA0Ni4zIDAgMzIuMi01NC4yIDQzLjItMTEwLjMgMTguNC05My45IDExNi44LTE1Ny4xIDIxMS43LTE1Ny4xIDEwMi41IDAgMTk3LjIgNzAuNyAyMTQuMSAxNjkuN3pNMzczLjkgMzg4LjNjNDItMTkuMiA4MS4zLTU2LjcgOTYuMy0xMDIuMSA0MC41LTEyMy4xLTY0LjItMjI4LTE4MS43LTIyOC04My40IDAtMTcwLjMgNTUuNC0xODYuMSAxMzYtOS41IDQ4LjkgNSAxMzEuNC02OC43IDEzMS40IDI0LjkgMzMuMSA1OC4zIDUyLjYgOTMuNyA2NCAyNC43LTIxLjggNjMuOS0xNS41IDc5LjggMTQuMyAxNC4yIDEgNzkuMiAxLjIgODcuOSAuOCAzLjUtNi45IDguNS0xMi45IDE0LjctMTcuNXMxMy4yLTcuOSAyMC44LTkuNSAxNS40LTEuNCAyMi45IC40IDE0LjUgNS4zIDIwLjUgMTAuMnpNMjA1LjUgMTg3LjFjMC0zNC43IDUwLjgtMzQuNyA1MC44IDBzLTUwLjggMzQuNy01MC44IDB6bTExNi42IDBjMC0zNC43IDUwLjktMzQuNyA1MC45IDBzLTUwLjkgMzQuOC01MC45IDB6TTE5OS41IDI1Ny44Yy0zLjQtMTYuOSAyMi4yLTIyLjIgMjUuNi01LjJsLjEgLjNjNC4xIDIxLjQgMjkuOCA0NCA2NC4xIDQzLjEgMzUuNy0uOSA1OS4zLTIyLjIgNjQuMS00Mi44IDQuNS0xNi4xIDI4LjYtMTAuNCAyNS41IDYtNS4yIDIyLjItMzEuMiA2Mi05MS41IDYyLjktNDIuNiAwLTgwLjktMjcuOC04Ny45LTY0LjJsMCAweiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXJlbWl4IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZWUiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3pNNDE4LjEgMjYwLjRsNC45IDIuMiAwIDcwYy03LjIgMy42LTYzLjQgMjcuNS02Ny4zIDI4LjgtNi41LTEuOC0xMTMuNy00Ni44LTEzNy4zLTU2LjJsLTY0LjIgMjYuNi02My4zLTI3LjUgMC02My44IDU5LjMtMjQuOGMtLjctLjctLjQgNS0uNC03MC40bDY3LjMtMjkuNyAxNTEuOSA2Mi45IDAgNjEuNiA0OS4xIDIwLjN6bS03MC40IDgxLjVsMC00My44LS40IDAgMC0xLjgtMTEzLjgtNDYuNSAwIDQ1LjIgMTEzLjggNDYuOSAwLS40IC40IC40em03LjUtNTcuNmwzOS45LTE2LjQtMzYuOC0xNS41LTM5IDE2LjQgMzUuOSAxNS41em01Mi4zIDM4LjFsMC00My00NC4zIDE4LjYgMCA0My40IDQ0LjMtMTl6Il0KICAgIH07CiAgICBmYUJhbmRjYW1wID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJhbmRjYW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyZDUiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptNDguMiAzMjYuMWwtMTgxIDAgODQuNy0xNTYuMSAxODEgMC04NC43IDE1Ni4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS13ZWItYXdlc29tZS1zdHJva2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY4NCIsICJNNjQgNjRDNDYuMyA2NCAzMiA3OC4zIDMyIDk2bDAgMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDY0IDY0ek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMjM1IDgxLjZsNTMgNDYuNCA1Mi4yLTEwLjRjLTIuNi0zLjktNC4yLTguNS00LjItMTMuNiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgMTMtMTAuMyAyMy42LTIzLjIgMjRMMzA0LjUgMzQ5LjFjLTUuMiAxMS41LTE2LjYgMTguOS0yOS4yIDE4LjlsLTEwMi42IDBjLTEyLjYgMC0yNC03LjQtMjkuMi0xOC45TDg3LjIgMjI0Yy0xMi45LS40LTIzLjItMTEtMjMuMi0yNCAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0YzAgNS0xLjUgOS43LTQuMiAxMy42TDE2MCAyMjQgMjEzLjEgMTc3LjZjLTguOS00LjEtMTUtMTMuMS0xNS0yMy42IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZjMCAxMC41LTYuMiAxOS41LTE1LjEgMjMuNnoiXQogICAgfTsKICAgIGZhVmltZW9WID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpbWVvLXYiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3ZCIsICJNNDQ3LjggMTUzLjZjLTIgNDMuNi0zMi40IDEwMy4zLTkxLjQgMTc5LjEtNjAuOSA3OS4yLTExMi40IDExOC44LTE1NC42IDExOC44LTI2LjEgMC00OC4yLTI0LjEtNjYuMy03Mi4zLTM1LjItMTI5LjItNTAuMi0yMDQuOS03OS4zLTIwNC45LTMuNCAwLTE1LjEgNy4xLTM1LjIgMjEuMUwwIDE2OC4yYzUxLjYtNDUuMyAxMDAuOS05NS43IDEzMS44LTk4LjUgMzQuOS0zLjQgNTYuMyAyMC41IDY0LjQgNzEuNSAyOC43IDE4MS41IDQxLjQgMjA4LjkgOTMuNiAxMjYuNyAxOC43LTI5LjYgMjguOC01Mi4xIDMwLjItNjcuNiA0LjgtNDUuOS0zNS44LTQyLjgtNjMuMy0zMSAyMi03Mi4xIDY0LjEtMTA3LjEgMTI2LjItMTA1LjEgNDUuOCAxLjIgNjcuNSAzMS4xIDY0LjkgODkuNHoiXQogICAgfTsKICAgIGZhU3RyYXZhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0cmF2YSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDI4IiwgIk0xNTguNCAwTDcgMjkyIDk2LjIgMjkyIDE1OC40IDE3NS45IDIyMC4xIDI5MiAzMDguNiAyOTIgMTU4LjQgMHpNMzA4LjYgMjkybC00My45IDg4LjItNDQuNi04OC4yLTY3LjYgMCAxMTIuMiAyMjAgMTExLjUtMjIwLTY3LjYgMHoiXQogICAgfTsKICAgIGZhVW5pcmVnaXN0cnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidW5pcmVnaXN0cnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQwNCIsICJNMTkyIDQ4MGMzOS41IDAgNzYuMi0xMS44IDEwNi44LTMyLjJsLTIxMy41IDBDMTE1LjggNDY4LjIgMTUyLjUgNDgwIDE5MiA0ODB6TTEwMi45IDI4Ni45bDAtMTIuNC0xMDIuOSAwIDAgMTIuNGMwIDIuNSAwIDUgLjEgNy40bDEwMy4xIDBjLS4yLTIuNC0uMy00LjktLjMtNy40em0yMC41IDU3bC0xMTQuOSAwYzIuNiA4LjUgNS44IDE2LjggOS42IDI0LjhsMTM4LjMgMGMtMTIuOS01LjctMjQuMS0xNC4yLTMzLTI0Ljh6bS0xNy43LTM0LjdsLTEwNC40IDBjLjkgNy42IDIuMiAxNSAzLjkgMjIuM2wxMDkuNyAwYy00LTYuOS03LjItMTQuNC05LjItMjIuM3ptLTIuOC02OS4zbC0xMDIuOSAwIDAgMTcuMyAxMDIuOSAwIDAtMTcuM3ptMC0xNzMuMmwtMTAyLjkgMCAwIDQuOSAxMDIuOSAwIDAtNC45em0wLTM0LjdsLTEwMi45IDAgMCAyLjUgMTAyLjkgMCAwLTIuNXptMCA2OS4zbC0xMDIuOSAwIDAgNy40IDEwMi45IDAgMC03LjR6bTAgMTA0bC0xMDIuOSAwIDAgMTQuOCAxMDIuOSAwIDAtMTQuOHptMC02OS4zbC0xMDIuOSAwIDAgOS45IDEwMi45IDAgMC05Ljl6bTAgMzQuNmwtMTAyLjkgMCAwIDEyLjQgMTAyLjkgMCAwLTEyLjR6TTI2OS4xIDMzMS41bDEwOS43IDBjMS44LTcuMyAzLjEtMTQuNyAzLjktMjIuM2wtMTA0LjQgMGMtMi4xIDcuOS01LjIgMTUuNC05LjIgMjIuM3ptMTItMTg1LjdsMTAyLjkgMCAwLTkuOC0xMDIuOSAwIDAgOS44em0wIDM3LjJsMTAyLjkgMCAwLTEyLjQtMTAyLjkgMCAwIDEyLjR6bTAtNzQuM2wxMDIuOSAwIDAtNy40LTEwMi45IDAgMCA3LjR6bTAtNzYuN2wwIDIuNSAxMDIuOSAwIDAtMi41LTEwMi45IDB6TTc4LjEgNDQyLjlsMjI3LjcgMGMxMS44LTguNyAyMi43LTE4LjYgMzIuMi0yOS43bC0yOTMuMSAwYzkuNiAxMSAyMS40IDIxIDMzLjIgMjkuN3ptMjAzLTM3MS4zbDEwMi45IDAgMC00LjktMTAyLjkgMCAwIDQuOXptMCAxNDguNWwxMDIuOSAwIDAtMTQuOC0xMDIuOSAwIDAgMTQuOHpNMzguOCA0MDUuN2wzMDUuMyAwYzYuNy04LjUgMTIuNi0xNy42IDE3LjgtMjcuMkwyMyAzNzguNWM1LjIgOS42IDkuMiAxOC43IDE1LjggMjcuMnptMTg4LjgtMzcuMWwxMzkuNCAwYzMuNy04IDUuOC0xNi4yIDguNS0yNC44bC0xMTUgMGMtOC44IDEwLjctMjAuMSAxOS4yLTMyLjkgMjQuOHptNTMuNS04MS43YzAgMi41LS4xIDUtLjQgNy40bDEwMy4xIDBjLjEtMi41IC4yLTQuOSAuMi03LjRsMC0xMi40LTEwMi45IDAgMCAxMi40em0wLTI5LjdsMTAyLjkgMCAwLTE3LjMtMTAyLjkgMCAwIDE3LjN6Il0KICAgIH07CiAgICBmYUNjRGluZXJzQ2x1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1kaW5lcnMtY2x1YiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjRjIiwgIk0yMzkuNyA3OS45YTE3NS44IDE3NS44IDAgMSAwIDAgMzUxLjYgMTc1LjggMTc1LjggMCAxIDAgMC0zNTEuNnpNMTk5LjggMzU5LjVjLTQxLjctMTUuOS03MS40LTU2LjQtNzEuNC0xMDMuOHMyOS43LTg3LjkgNzEuNC0xMDQuMWwwIDIwNy45em03OS44IC4zbDAtMjA4LjJjNDEuNyAxNi4yIDcxLjQgNTYuNyA3MS40IDEwNC4xcy0yOS43IDg3LjktNzEuNCAxMDQuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTMyOS43IDQ0OGwtOTAuMyAwQzEzMy4yIDQ0OCA0NS42IDM2Mi41IDQ1LjYgMjU3LjggNDUuNiAxNDMuMiAxMzMuMiA2NCAyMzkuNCA2NGw5MC4zIDBjMTA1IDAgMjAwLjcgNzkuMiAyMDAuNyAxOTMuOCAwIDEwNC43LTk1LjcgMTkwLjItMjAwLjcgMTkwLjJ6Il0KICAgIH07CiAgICBmYVBpbnRlcmVzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaW50ZXJlc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBkMiIsICJNNTA0IDI1NmMwIDEzNy0xMTEgMjQ4LTI0OCAyNDgtMjUuNiAwLTUwLjItMy45LTczLjQtMTEuMSAxMC4xLTE2LjUgMjUuMi00My41IDMwLjgtNjUgMy0xMS42IDE1LjQtNTkgMTUuNC01OSA4LjEgMTUuNCAzMS43IDI4LjUgNTYuOCAyOC41IDc0LjggMCAxMjguNy02OC44IDEyOC43LTE1NC4zIDAtODEuOS02Ni45LTE0My4yLTE1Mi45LTE0My4yLTEwNyAwLTE2My45IDcxLjgtMTYzLjkgMTUwLjEgMCAzNi40IDE5LjQgODEuNyA1MC4zIDk2LjEgNC43IDIuMiA3LjIgMS4yIDguMy0zLjMgLjgtMy40IDUtMjAuMyA2LjktMjguMSAuNi0yLjUgLjMtNC43LTEuNy03LjEtMTAuMS0xMi41LTE4LjMtMzUuMy0xOC4zLTU2LjYgMC01NC43IDQxLjQtMTA3LjYgMTEyLTEwNy42IDYwLjkgMCAxMDMuNiA0MS41IDEwMy42IDEwMC45IDAgNjcuMS0zMy45IDExMy42LTc4IDExMy42LTI0LjMgMC00Mi42LTIwLjEtMzYuNy00NC44IDctMjkuNSAyMC41LTYxLjMgMjAuNS04Mi42IDAtMTktMTAuMi0zNC45LTMxLjQtMzQuOS0yNC45IDAtNDQuOSAyNS43LTQ0LjkgNjAuMiAwIDIyIDcuNCAzNi44IDcuNCAzNi44cy0yNC41IDEwMy44LTI5IDEyMy4yQzE2MS41IDQzNy4yIDE2My41IDQ2Ny40IDE2NS42IDQ4NyA3My40IDQ1MC45IDggMzYxLjEgOCAyNTYgOCAxMTkgMTE5IDggMjU2IDhTNTA0IDExOSA1MDQgMjU2eiJdCiAgICB9OwogICAgZmFBbGdvbGlhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFsZ29saWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YyIsICJNMjU2IDBjLTEzOS45IDAtMjU0IDExMi43LTI1NiAyNTIuMS0yIDE0MS41IDExMi45IDI1OC43IDI1NC41IDI1OS41IDQzLjcgLjMgODUuOS0xMC40IDEyMy4zLTMwLjcgMy42LTIgNC4yLTcgMS4xLTkuN2wtMjQtMjEuMmMtNC45LTQuMy0xMS44LTUuNS0xNy44LTMtMjYuMSAxMS4xLTU0LjUgMTYuOC04My43IDE2LjQtMTE0LjQtMS41LTIwNi45LTk2LjYtMjA1LjEtMjExIDEuOC0xMTIuOSA5NC4zLTIwNC4yIDIwNy43LTIwNC4ybDIwNy43IDAgMCAzNjktMTE3LjgtMTA0LjdjLTMuOC0zLjQtOS43LTIuNy0xMi43IDEuMy0xOC45IDI1LTQ5LjcgNDAuNi04My45IDM4LjItNDcuNS0zLjMtODUuOS00MS41LTg5LjUtODguOS00LjItNTYuNiA0MC42LTEwMy45IDk2LjMtMTAzLjkgNTAuNCAwIDkxLjkgMzguOCA5Ni4yIDg4IC40IDQuNCAyLjQgOC41IDUuNyAxMS40bDMwLjcgMjcuMmMzLjUgMy4xIDkgMS4yIDkuOS0zLjQgMi4yLTExLjggMy0yNC4yIDIuMS0zNi44LTQuOS03Mi02My4zLTEzMC0xMzUuNC0xMzQuNC04Mi43LTUuMS0xNTEuOCA1OS41LTE1NCAxNDAuNi0yLjEgNzguOSA2Mi42IDE0NyAxNDEuNiAxNDguNyAzMyAuNyA2My42LTkuNiA4OC4zLTI3LjZMNDk1IDUwOS40YzYuNiA1LjggMTcgMS4yIDE3LTcuN2wwLTQ5MmMwLTUuNC00LjQtOS43LTkuNy05LjdMMjU2IDB6Il0KICAgIH07CiAgICBmYVN0YWNrcGF0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGFja3BhdGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg0MiIsICJNMjQ0LjYgMjMyLjRjMCA4LjUtNC4zIDIwLjUtMjEuMyAyMC41bC0xOS42IDAgMC00MS41IDE5LjYgMGMxNy4xIDAgMjEuMyAxMi40IDIxLjMgMjF6TTQ0OCAzMmwwIDQ0OC00NDggMCAwLTQ0OCA0NDggMHpNMTUxLjMgMjg3LjhjMC0yMS4yLTEyLjEtMzQuNS00Ni43LTQ0LjgtMjAuNi03LjQtMjYtMTAuOS0yNi0xOC42czctMTQuNiAyMC40LTE0LjZjMTQuMSAwIDIwLjggOC40IDIwLjggMTguNGwzMC43IDAgLjItLjZjLjUtMTkuNi0xNS4xLTQxLjYtNTEuMS00MS42LTIzLjQgMC01Mi42IDEwLjgtNTIuNiAzOC4zIDAgMTkuNCA5LjIgMzEuMyA1MC43IDQ0LjQgMTcuMyA2LjIgMjEuOSAxMC40IDIxLjkgMTkuNSAwIDE1LjItMTkuMSAxNC4yLTE5LjUgMTQuMi0yMC40IDAtMjUuNy05LjEtMjUuNy0yMS45bC0zMC44IDAtLjIgLjZjLS43IDMxLjMgMjguNCA0NS4yIDU2LjYgNDUuMiAzMCAwIDUxLjEtMTMuNiA1MS4xLTM4LjN6bTEyNS40LTU1LjZjMC0yNS4zLTE4LjQtNDUuNS01My40LTQ1LjVsLTUxLjggMCAwIDEzOC4yIDMyLjIgMCAwLTQ3LjQgMTkuNiAwYzMwLjMgMCA1My40LTE2IDUzLjQtNDUuNHpNMjk3LjkgMzI1bDQ5LjEtMTM4LjItMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwek00MDQuNSAxODYuOGwtMzEuMSAwLTQ3LjkgMTM4LjIgMjkuOSAwIDQ5LjEtMTM4LjJ6Il0KICAgIH07CiAgICBmYU9jdG9wdXNEZXBsb3kgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2N0b3B1cy1kZXBsb3kiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4MiIsICJNNDU1LjcgMzQ5LjJjLTQ1LjktMzkuMS0zNi43LTc3LjktMTYuMS0xMjguMSAzNS43LTg3LTIzLjUtMTg2LjktMTA5LjYtMjEyLjgtOTIuOS0yNy45LTE5NS43IDE2LTIzMC4zIDEwOC44LTguNyAyMy41LTEyLjUgNDguNS0xMSA3My41IDEuNyAyOS41IDE0LjcgNTMgMjQuMSA4MC4zIDE3LjIgNTAuMi0yOC4xIDkyLjctNjYuNyAxMTcuNi00Ni44IDMwLjItMzYuMyAzOS45LTguNCA0MS45IDIzLjQgMS43IDQ0LjUtNC41IDY1LjMtMTUgOS4yLTQuNiA0MC43LTE4LjkgNDUuMS0yOC42LTEyLjIgMjYuNi0zNyA3Mi43LTIxLjUgMTAyLjEgMTkuMSAzNi4yIDY3LjEtMzEuOCA3Ni43LTQ1LjggOC42LTEyLjYgNDMtODEuMyA2My42LTQ2LjkgMTguOSAzMS40IDguNiA3Ni40IDM1LjcgMTA0LjYgMzIuOSAzNC4yIDUxLjItMTguMyA1MS40LTQ0LjIgLjItMTYuNC02LjEtOTUuOSAyOS45LTU5LjkgMjEuNCAyMS40IDUyLjkgNzEuMiA4OC42IDY3IDM4LjctNC41LTIyLjEtNjgtMjguMy03OC43IDUuNCA0LjMgNTMuNyAzNC4xIDUzLjggOS41IC4xLTE4LjgtMzAuMS0zNC43LTQyLjUtNDUuM3oiXQogICAgfTsKICAgIGZhWWFtbWVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInlhbW1lciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODQwIiwgIk01MDAuNyAxNTkuNWMtLjQtMS44LTEuMi0zLjQtMi4zLTQuOHMtMi41LTIuNi00LjEtMy41Yy0zLjEtMS42LTYuNy0yLTEwLjEtMS4xbC0yNi40IDYuNiAwLS4yLTIyLjMgNS44LTEuMiAuMy0uNi0yLjJjLTE1LjUtNTguMy00NS0xMTEuOS04Ni4xLTE1Ni4yLTIuNi0yLjctNi4xLTQuMi05LjgtNC4zcy03LjMgMS4zLTEwIDMuOGwtMTAyLjkgMTAyLjctMTk5LjkgMGMtNi42IDAtMTIuOSAyLjYtMTcuNiA3LjNTMCAxMjQuOCAwIDEzMS40bDAgMjQ5QzAgMzg3IDIuNiAzOTMuMyA3LjMgMzk4czExIDcuMyAxNy42IDcuM0wyMjUgNDA1LjMgMzI4LjEgNTA4YzIuNiAyLjYgNiA0IDkuNyA0czcuMS0xLjQgOS43LTRjLjEtLjEgLjItLjMgLjQtLjQgMjkuMy0zMS41IDUyLjgtNjcuOCA2OS42LTEwNy40IDYuOS0xNi41IDEyLjctMzMuNSAxNy4zLTUwLjhsMCAwIDIwLjQgNS4zIDAtLjEgMjguMyA3LjNjLjkgLjIgMS43IC40IDIuNiAuNSAxLjQgLjIgMi44IC4yIDQuMS0uMSAyLjUtLjUgNC44LTEuNyA2LjctMy40czMuMi00IDMuOC02LjVjMTUuMi02My40IDE1LjItMTI5LjYgLjEtMTkzbDAgMHpNMzM3LjEgMjQuN2wwIDAgMCAwIDAgMHpNMjI2LjkgMTg5LjhsLTUyLjYgOTEuM2MtMSAxLjctMS41IDMuNy0xLjUgNS43bDAgNDYuMmMwIDUuOC0yLjMgMTEuNC02LjUgMTUuNnMtOS43IDYuNC0xNS42IDYuNGwtMy40IDBjLTUuOCAwLTExLjQtMi4zLTE1LjYtNi40cy02LjUtOS43LTYuNS0xNS42bDAtNDUuN2MwLTEuOS0uNS0zLjgtMS40LTUuNUw3Mi4zIDE4OS42Yy0xLjktMy40LTIuOC03LjEtMi44LTExczEuMS03LjYgMy0xMC45IDQuNy02LjEgOC4xLTggNy4xLTIuOSAxMS0yLjlsMy4zIDBjNCAwIDggMS4xIDExLjUgMy4yczYuMyA1LjEgOC4xIDguN2wzNi40IDcwLjMgMzcuNS03MC41YzEuOC0zLjUgNC42LTYuNCA3LjktOC40czcuMi0zLjIgMTEuMS0zLjIgNy44IC45IDExLjIgMi44IDYuMyA0LjcgOC4yIDguMWMyIDMuMyAzIDcuMSAzIDExcy0xIDcuNy0zIDExbDAgMHpNMzM3LjEgMjQuN2MzNS45IDQwLjYgNjEuOSA4OSA3NS44IDE0MS4zbC42IDItMTE0LjEgMjkuNiAwLTY2LjFjMC02LjYtMi43LTEyLjktNy4zLTE3LjZzLTExLTcuMy0xNy42LTcuM2wtMTkuNCAwIDgyLjEtODEuOHpNMzk3LjYgMzkybDAgMCAwIDBjLTE0LjcgMzQuOC0zNS4xIDY3LTYwLjIgOTUuMmwtODIuMi04MS45IDE5LjIgMGM2LjYgMCAxMi45LTIuNiAxNy42LTcuM3M3LjMtMTEgNy4zLTE3LjZsMC02Ni4yIDExNC42IDI5LjljLTQuNCAxNi4zLTkuOCAzMi4zLTE2LjMgNDcuOWwwIDB6bTg0LTUyLjRsMCAwLTUwLjYtMTMuMS0xMzEuNy0zNC4zIDAtNzIuNSAxMTkuNy0zMSA0LjUtMS4yYzI5LjktNy43IDQ5LjItMTIuOCA1OC4xLTE1LjEgMTIgNTUuMSAxMiAxMTIuMSAwIDE2Ny4yeiJdCiAgICB9OwogICAgZmFNb2R4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1vZHgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI4NSIsICJNMzU2IDI0MS44bDM2LjcgMjMuNyAwIDIxNC41LTEzMy04My44IDk2LjMtMTU0LjR6TTQ0MCA3NWwtMjEzLjcgMC0yMyAzNy44IDE1My41IDk2LjUgODMuMi0xMzQuM3pNMzUxIDIxNy44bC0yOTUuOC0xODUuOCAwIDIxNC41IDQ2IDI5IDI0OS44LTU3Ljd6TTk3IDI5NC4yTDggNDM3IDIyMS43IDQzNyAzNDYuNyAyMzYuNSA5NyAyOTQuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlVGhyZWFkcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdGhyZWFkcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjE5IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yOTQuMiAyNDQuM2MxOS41IDkuMyAzMy43IDIzLjUgNDEuMiA0MC45IDEwLjQgMjQuMyAxMS40IDYzLjktMjAuMiA5NS40LTI0LjIgMjQuMS01My41IDM1LTk1LjEgMzUuM2wtLjIgMGMtNDYuOC0uMy04Mi44LTE2LjEtMTA2LjktNDYuOC0yMS41LTI3LjMtMzIuNi02NS40LTMzLTExMy4xbDAtLjJjLjQtNDcuNyAxMS41LTg1LjcgMzMtMTEzLjEgMjQuMi0zMC43IDYwLjItNDYuNSAxMDYuOS00Ni44bC4yIDBjNDYuOSAuMyA4My4zIDE2IDEwOC4yIDQ2LjYgMTIuMyAxNS4xIDIxLjMgMzMuMyAyNyA1NC40bC0yNi45IDcuMmMtNC43LTE3LjItMTEuOS0zMS45LTIxLjQtNDMuNi0xOS40LTIzLjktNDguNy0zNi4xLTg3LTM2LjQtMzggLjMtNjYuOCAxMi41LTg1LjUgMzYuMi0xNy41IDIyLjMtMjYuNiA1NC40LTI2LjkgOTUuNSAuMyA0MS4xIDkuNCA3My4zIDI2LjkgOTUuNSAxOC43IDIzLjggNDcuNCAzNiA4NS41IDM2LjIgMzQuMy0uMyA1Ni45LTguNCA3NS44LTI3LjMgMjEuNS0yMS41IDIxLjEtNDcuOSAxNC4yLTY0LTQtOS40LTExLjQtMTcuMy0yMS4zLTIzLjMtMi40IDE4LTcuOSAzMi4yLTE2LjUgNDMuMi0xMS40IDE0LjUtMjcuNyAyMi40LTQ4LjQgMjMuNS0xNS43IC45LTMwLjgtMi45LTQyLjYtMTAuNy0xMy45LTkuMi0yMi0yMy4yLTIyLjktMzkuNS0xLjctMzIuMiAyMy44LTU1LjMgNjMuNS01Ny42IDE0LjEtLjggMjcuMy0uMiAzOS41IDEuOS0xLjYtOS45LTQuOS0xNy43LTkuOC0yMy40LTYuNy03LjgtMTcuMS0xMS44LTMwLjgtMTEuOWwtLjQgMGMtMTEgMC0yNiAzLjEtMzUuNiAxNy42bC0yMy0xNS44YzEyLjgtMTkuNCAzMy42LTMwLjEgNTguNS0zMC4xbC42IDBjNDEuOCAuMyA2Ni42IDI2LjMgNjkuMSA3MS44IDEuNCAuNiAyLjggMS4yIDQuMiAxLjlsLjEgLjV6bS03MS44IDY3LjVjMTctLjkgMzYuNC03LjYgMzkuNy00OC44LTguOC0xLjktMTguNi0yLjktMjktMi45LTMuMiAwLTYuNCAuMS05LjYgLjMtMjguNiAxLjYtMzguMSAxNS41LTM3LjQgMjcuOSAuOSAxNi43IDE5IDI0LjUgMzYuNCAyMy42bC0uMS0uMXoiXQogICAgfTsKICAgIGZhT2xkUmVwdWJsaWMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib2xkLXJlcHVibGljIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTAiLCAiTTI0My44IDEwLjJjNy41LS4zIDE1LS4zIDIyLjUtLjEgMy42IC4xIDcuMiAuNCAxMC44IC43IDQuOSAuMyA5LjggMSAxNC43IDEuNiAyLjkgLjQgNS44IDEgOC43IDEuNSA3LjkgMS4zIDE1LjcgMy4zIDIzLjQgNS40IDEyLjIgMy41IDI0LjIgNy45IDM1LjggMTMuMiAyNi42IDEyLjIgNTAuOSAyOS4yIDcxLjYgNDkuOSAyMCAyMC4xIDM2LjcgNDMuNSA0OC45IDY5LjIgMS4xIDIuNiAyLjQgNS4xIDMuNSA3LjcgMi44IDYuNCA1LjQgMTMgNy42IDE5LjYgNC4xIDEyLjMgNy4zIDI1IDkuNCAzNy44IC42IDMuMSAxIDYuMyAxLjQgOS41IC41IDMuOCAuOSA3LjcgMS4yIDExLjYgLjggOC4zIC44IDE2LjcgLjggMjUuMS0uMSA1LS4zIDkuOS0uNyAxNC45LS4yIDMuNC0uNSA2LjgtMSAxMC4xLS40IDIuNy0uNiA1LjUtMS4xIDguMi0uOSA1LjEtMS43IDEwLjMtMi45IDE1LjQtNC4xIDE4LjUtMTAuMyAzNi42LTE4LjUgNTMuNi0xNS44IDMyLjgtMzguOCA2Mi4yLTY3LjEgODUuMS0xNy4zIDE0LjEtMzYuNCAyNS45LTU2LjkgMzQuOS02LjIgMi43LTEyLjUgNS4zLTE4LjkgNy40LTMuNSAxLjItNyAyLjQtMTAuNiAzLjQtNi42IDEuOS0xMy4zIDMuNi0yMCA1LTQuNyAuOS05LjMgMS43LTE0IDIuNS01LjMgLjctMTAuNSAxLjQtMTUuOCAxLjctNi43IC43LTEzLjQgLjgtMjAuMSAuOC02LjggMC0xMy42LS4xLTIwLjQtLjgtMy4zLS4yLTYuNi0uNS05LjgtMS0yLjctLjQtNS41LS42LTguMi0xLjEtNC4xLS43LTguMi0xLjQtMTIuNC0yLjItNC4yLS45LTguNS0xLjktMTIuNy0zLTguNi0yLjItMTcuMS01LTI1LjQtOC4xLTEwLjUtNC4xLTIwLjgtOC43LTMwLjYtMTQuMi0yLjEtMS4yLTQuMy0yLjMtNi40LTMuNi0xMS4yLTYuNi0yMS45LTE0LjEtMzEuOS0yMi4zLTM0LjctMjguNC02MS40LTY2LjQtNzYuNC0xMDguNy0zLjEtOC43LTUuNy0xNy42LTcuOC0yNi43LTEuNS02LjItMi41LTEyLjQtMy42LTE4LjctLjQtMi4zLS42LTQuNy0xLTcuMS0uNi00LS44LTgtMS4yLTExLjktLjgtOS41LS43LTE5LS41LTI4LjUgLjEtMy41IC4zLTcgLjctMTAuNSAuMy0zLjIgLjUtNi40IC45LTkuNSAuNC0yLjggLjctNS42IDEuMi04LjQgLjctMy45IDEuMy03LjkgMi4xLTExLjggMy40LTE2LjUgOC41LTMyLjcgMTUuMy00OC4yIDEuMi0yLjkgMi42LTUuNyAzLjktOC42IDguMS0xNi43IDE3LjktMzIuNiAyOS41LTQ3LjEgMjAtMjUuNCA0NS4xLTQ2LjcgNzMuMy02Mi41IDcuNS00LjIgMTUuMi04IDIzLjEtMTEuNCAxNS44LTYuOSAzMi40LTEyIDQ5LjMtMTUuNCAzLjUtLjcgNy0xLjIgMTAuNi0xLjggMi42LS41IDUuMy0uNyA3LjktMS4xIDMuNS0uNSA3LjEtLjcgMTAuNi0xIDIuNS0uMiA0LjktLjQgNy40LS41em04LjYgMjQuNGMtOS4yIC4xLTE4LjQgMS0yNy42IDIuMi03LjMgMS4xLTE0LjUgMi42LTIxLjcgNC4zLTEzLjkgMy41LTI3LjUgOC4zLTQwLjUgMTQuNC0xMC41IDUtMjAuNiAxMC43LTMwLjIgMTcuMi00LjIgMi45LTguNCA1LjgtMTIuMyA5LTUuMSA0LTEwIDguMi0xNC43IDEyLjYtMi41IDIuMi00LjggNC43LTcuMiA3LjEtMjguMiAyOC44LTQ4LjQgNjUuNC01Ny41IDEwNC43LTIgOC40LTMuNSAxNy00LjQgMjUuNi0xLjEgOC45LTEuNCAxNy45LTEuNCAyNi44IC4xIDcuMSAuNCAxNC4zIDEuMiAyMS40IC42IDcuMSAxLjkgMTQuMiAzLjIgMjEuMiAxLjEgNC42IDIgOS4zIDMuMyAxMy45IDYuMyAyMy40IDE2LjUgNDUuNyAzMC4xIDY1LjggOC42IDEzIDE4LjggMjQuOSAzMCAzNS44IDE2LjMgMTUuOCAzNSAyOSA1NS4zIDM5LjIgNy4zIDMuNSAxNC43IDYuOSAyMi4zIDkuNiA1IDEuOCAxMC4xIDMuNiAxNS4yIDUgMTEuMyAzLjIgMjIuOCA1LjYgMzQuNCA3LjEgMi45IC4zIDUuOCAuNiA4LjcgLjkgMTMuOCAxLjEgMjcuNyAxIDQxLjUtLjQgNC40LS42IDguOS0xIDEzLjMtMS44IDMuNi0uNyA3LjMtMS4yIDEwLjktMi4xIDQuMS0xIDguMy0xLjkgMTIuNC0zLjEgMjYuNS03LjMgNTEuNi0xOS43IDczLjYtMzYuMiAxNS44LTExLjggMzAtMjUuOCA0Mi4xLTQxLjMgMy4zLTQgNi4yLTguMyA5LjEtMTIuNiAzLjQtNS4xIDYuNi0xMC4yIDkuNi0xNS41IDIuNC00LjQgNC43LTguOSA3LTEzLjQgNS43LTEyLjEgMTAuMy0yNC42IDEzLjgtMzcuNSAyLjYtMTAgNC43LTIwLjIgNS45LTMwLjQgMS44LTEzLjUgMS45LTI3LjEgMS4zLTQwLjctLjMtMy45LS43LTcuOC0xLTExLjctMi4yLTE5LjEtNi44LTM3LjktMTMuOC01NS44LTYtMTUuMS0xMy41LTI5LjYtMjIuNi00My4xLTEyLjctMTguOC0yOC4yLTM1LjctNDYtNDkuOC0yNS0yMC01NC41LTM0LjUtODUuNi00Mi4xLTcuOC0xLjktMTUuNy0zLjMtMjMuNi00LjQtMy45LS42LTcuOC0uOC0xMS44LTEuMi03LjQtLjYtMTQuOC0uNy0yMi4yLS42ek0xNDcuMyA4My41YzEzLjMtOC45IDI4LjEtMTUuNCA0My4zLTIwLjItMy4yIDEuOC02LjQgMy40LTkuNSA1LjMtMTEuMiA2LjctMjEuNSAxNC45LTMwLjQgMjQuNS02LjggNy40LTEyLjggMTUuNy0xNyAyNC45LTMuMyA2LjktNS42IDE0LjItNi45IDIxLjctLjkgNC44LTEuMyA5LjgtMS4yIDE0LjggLjEgMTMuNyA0LjQgMjcuMSAxMS4zIDM4LjggNS45IDEwLjIgMTMuNiAxOS4zIDIyLjQgMjcuMyA0LjkgNC40IDEwLjIgOC4xIDE1IDEyLjYgMi4zIDIuMiA0LjUgNC40IDYuNCA2LjkgMi42IDMuMyA0LjkgNyA2IDExLjEgLjkgMyAuNyA2LjIgLjcgOS4zIDAgNC4xIDAgOC4yIDAgMTIuMyAuMSAzLjUgMCA3LjEgLjEgMTAuNiAuMSAyLjQgMCA0LjggLjEgNy4xIC4yIDUuOCAuMSAxMS41IC4xIDE3LjMgLjEgMi45IDAgNS44IC4xIDguNyAwIDEuNiAuMSAzLjMgMCA0LjktLjkgLjEtMS44IC4yLTIuNyAuMi0xMSAwLTIxLjktMi42LTMyLTYuOS02LTIuNy0xMS44LTUuOS0xNy4xLTkuOC01LjgtNC4yLTExLjEtOS0xNS44LTE0LjMtNi41LTcuMi0xMi0xNS40LTE2LjYtMjMuOS0xLjEtMi0yLjItNC0zLjItNi4xLTEuMi0yLjYtMi42LTUuMS0zLjctNy44LTQtOS43LTYuNi0xOS45LTguMS0zMC4zLS41LTQuNC0xLjEtOC45LTEuMi0xMy4zLS43LTE1LjcgLjgtMzEuNiA0LjctNDYuOCAyLjEtOC4yIDQuOC0xNi4yIDguMy0yMy44IDYuMy0xNC4yIDE1LjMtMjcuMiAyNi4zLTM4LjIgNi4zLTYuMiAxMy4xLTExLjggMjAuNS0xNi43ek0zMjIuNyA2My40YzIuNyAuNyA1LjQgMS43IDguMSAyLjcgNi40IDIuMyAxMi43IDQuOCAxOC43IDggMTMuMSA2LjQgMjUuMyAxNC44IDM1LjggMjUgMTAuMiAxMCAxOC43IDIxLjYgMjUuMSAzNC4zIDEuMyAyLjcgMi42IDUuNSAzLjggOC4zIDYuMyAxNS4xIDEwIDMxLjMgMTEuMiA0Ny42IC40IDQuNSAuNCA5LjEgLjUgMTMuNiAuMSAxMS42LTEuNSAyMy4zLTQuMyAzNC41LTIgNy4zLTQuMyAxNC41LTcuOSAyMS4yLTMuMiA2LjYtNi43IDEzLjItMTAuOCAxOS4yLTYuOSAxMC41LTE1LjYgMTkuOS0yNS44IDI3LjItMTAuNSA3LjYtMjIuNiAxMy0zNS40IDE1LjQtMy41IC43LTcuMSAxLjEtMTAuNyAxLjItMS44IC4xLTMuNyAuMi01LjYtLjEtLjMtMi4xIDAtNC4zIDAtNi41IDAtMy43IC4xLTcuNCAuMS0xMS4yIC4yLTcgMC0xNC4xIC4yLTIxLjEgMC0yLjQgMC00LjggMC03LjEgLjItNS4xIDAtMTAuMSAuMS0xNS4yIC4xLTMtLjItNiAuNS05IC43LTIuNSAxLjgtNC45IDMuMS03LjEgNC41LTcuMyAxMS4xLTEzIDE3LjctMTguMyA1LjQtNC4yIDEwLjUtOC44IDE1LTEzLjggNy43LTguNCAxNC4yLTE3LjkgMTguOC0yOC4zIDIuNS01LjkgNC41LTEyLjEgNS41LTE4LjUgLjktNC40IDEuMS04LjggMS0xMy4zIDAtNy44LTEuNC0xNS42LTMuNi0yMy4yLTEuOC01LjctNC4zLTExLjItNy4xLTE2LjQtMy45LTYuOS04LjYtMTMuMy0xNC0xOS4yLTkuOS0xMC44LTIxLjgtMTkuOS0zNC42LTI3LjEtMS44LTEtMy44LTEuOC01LjYtM3pNMjIxLjkgMTIxLjljMS0xLjIgMi0yLjMgMy4xLTMuNC0uNiAuOS0xLjMgMS44LTIgMi43LTMuMSAzLjktNS41IDguMy03IDEzLjEtLjkgMy4zLTEuNyA2LjYtMS43IDEwLS4xIDIuNS0uMSA1LjEgLjMgNy42IDEuMSA3LjYgNC4zIDE0LjkgOC44IDIxLjEgMiAyLjcgNC4yIDUuMyA2LjkgNy4zIDEuNiAxLjMgMy41IDIuMSA1LjMgMyAzLjEgMS43IDYuMyAzLjIgOS4xIDUuNSAyLjcgMi4xIDQuNiA1LjMgNC40IDguOCAwIDczLjcgMCAxNDcuMyAwIDIyMSAwIDEuNC0uMSAyLjcgMCA0IC4xIDEuNSAuOCAyLjggMS41IDQuMSAuOSAxLjcgMS44IDMuMyAzLjIgNC42IC45IC44IDIgMS40IDMuMiAxLjIgMS41LS4yIDIuNy0xLjQgMy40LTIuNiAxLTEuNSAxLjctMy4yIDIuMy00LjkgLjgtMi4xIC40LTQuNCAuNS02LjYgLjEtNCAwLTguMSAuMS0xMi4xIDAtNS45IDAtMTEuOCAuMS0xNy43IC4xLTMuNiAwLTcuMiAuMS0xMC45IC4yLTQgMC04LjEgLjEtMTIuMSAwLTYgMC0xMiAuMS0xOCAuMS0zLjYgMC03LjIgLjEtMTAuOSAuMS0zLjkgMC03LjkgLjEtMTEuOCAwLTYgMC0xMiAuMS0xOCAuMi0zLjkgMC03LjkgLjItMTEuOCAuMyAxLjQgLjEgMi45IC4yIDQuNCAuMiAzLjYgLjQgNy4yIC44IDEwLjggLjMgMy40IC40IDYuOSAuOSAxMC4zIC40IDMuMSAuNSA2LjIgMSA5LjMgLjYgNC4xIC45IDguMiAxLjUgMTIuMyAxLjUgOSAyLjggMTguMSA1LjEgMjcgMS4xIDQuOCAyLjQgOS42IDQgMTQuMyAyLjUgNy45IDUuNyAxNS43IDEwLjMgMjIuNiAxLjcgMi42IDMuOSA1IDYuMSA3LjIgLjMgLjIgLjYgLjUgLjkgLjcgLjYgLjMgMS4zLS4xIDEuNy0uNiAuNy0uOSAxLjItMS45IDEuNy0yLjkgNC4xLTcuOCA4LjItMTUuNiAxMi4zLTIzLjMgLjctMS4zIDEuNC0yLjYgMi42LTMuNiAxLjgtMS42IDMuOC0yLjcgNi0zLjYgMi45LTEuMiA1LjktMi4yIDktMi40IDYuNi0uNiAxMy4xIC43IDE5LjYgMS44IDMuNyAuNiA3LjQgMS4yIDExLjEgMS40IDMuNyAuMSA3LjUgLjEgMTEuMi0uMyA4LjYtLjkgMTctMyAyNC45LTYuMiA1LjMtMi4yIDEwLjUtNC44IDE1LjMtNy45IDExLjUtNy4yIDIxLjUtMTYuNiAzMC0yNyAxLjItMS40IDIuMi0yLjkgMy41LTQuMy0xLjIgMy4yLTIuNyA2LjQtNC4yIDkuNS0xLjMgMi45LTIuOCA1LjYtNC4zIDguNC01LjIgOS42LTExIDE4LjktMTcuOCAyNy41LTQgNS4yLTguNSAxMC4xLTEzLjMgMTQuNi02LjYgNi4xLTE0LjEgMTEuNC0yMi40IDE0LjgtOC4yIDMuNC0xNy4zIDQuNi0yNi4xIDMuMy0zLjYtLjYtNy0xLjctMTAuNC0yLjktMi44LTEtNS40LTIuNC04LTMuNy0zLjQtMS43LTYuNi0zLjgtOS43LTYuMSAyLjcgMy4xIDUuNyA1LjkgOC43IDguNiA0LjMgMy44IDguNyA3LjMgMTMuNiAxMC4yIDQgMi41IDguMyA0LjQgMTIuOCA1LjUgMS41IC40IDMgLjUgNC41IC42LTEuMyAxLjEtMi42IDItNCAzLTkuNiA2LjUtMjAgMTEuOS0zMC43IDE2LjQtMjAuOSA4LjctNDMuMiAxNC02NS43IDE1LjMtNC43IC4yLTkuMyAuNC0xNCAuNC01LS4xLTEwLS4xLTE0LjktLjctMTEuMi0uOC0yMi4zLTIuNy0zMy4yLTUuNC0xMC40LTIuNy0yMC42LTYuMS0zMC4zLTEwLjYtOC43LTMuOS0xNy4xLTguNC0yNS0xMy44LTEuOC0xLjMtMy43LTIuNS01LjQtNC4xIDYuNi0xLjIgMTMtMy40IDE5LTYuNSA1LjctMi45IDExLTYuNyAxNS42LTExLjEgMi4yLTIuMiA0LjMtNC42IDYuMi03LjEtMy40IDIuMS02LjkgNC4yLTEwLjYgNS44LTQuNCAyLjItOS4xIDMuOC0xMy44IDUtNS43IDEuNS0xMS43IDEuNy0xNy42IDEuMS04LjEtMS0xNS45LTQuMy0yMi41LTktNC4zLTIuOS04LjItNi40LTEyLTEwLjEtOS45LTEwLjItMTguMi0yMS44LTI1LjctMzMuOS0zLjktNi4zLTcuNS0xMi43LTExLjEtMTkuMi0xLTItMi4xLTQuMS0zLjItNi4xIDIuOCAyLjkgNS42IDYgOC40IDguOSAxOS4yIDE5LjIgMzcuNiAzMi4zIDUzLjcgMzUuNSAzLjEgLjcgNi4zIC41IDkuNSAuOCAyLjggLjMgNS42IC4yIDguMyAuMyA1IC4xIDEwLjEgMCAxNS4yLS4yIDMuNi0uMiA3LjMtLjcgMTAuOS0xLjEgMi4xLS4yIDQuMS0uNyA2LjEtMS4yIDMuOS0xIDguMS0xIDExLjggLjYgNC44IDEuOCA4LjQgNS42IDExLjQgOS43IDIuMiAzIDQuMSA2LjIgNS43IDkuNiAxLjIgMi40IDIuNSA0LjggMy42IDcuMyAxIDIuMiAyLjIgNC40IDMuNCA2LjUgLjcgMSAxLjQgMi4yIDIuNiAyLjYgMS4xLS44IDEuNy0xLjkgMi4zLTMgMi4xLTQuMiAzLjQtOC42IDQuOS0xMyAyLTYuNiAzLjgtMTMuMyA1LjItMjAgMi4yLTkuMyAzLjItMTguNyA0LjUtMjguMSAuNi00IC44LTggMS4zLTEyIC45LTEwLjYgMS45LTIxLjMgMi4yLTMxLjkgLjEtMS45IC4yLTMuNyAuMy01LjYgMC00LjMgLjItOC43IC4yLTEzIDAtMi40IDAtNC44IDAtNy4xIDAtNS4xLS4yLTEwLjEtLjItMTUuMi0uMi02LjYtLjctMTMuMi0xLjMtMTkuOC0uNy01LjktMS41LTExLjgtMy4xLTE3LjUtMi03LjctNS42LTE1LTkuOC0yMS44LTMuMi01LjEtNi44LTkuOS0xMS4xLTE0LTMuOS0zLjktOC42LTcuMS0xMy45LTguNC0xLjUtLjQtMy4xLS40LTQuNi0uNiAuMS0zIC43LTUuOSAxLjMtOC44IDEuNi03LjcgMy44LTE1LjMgNi44LTIyLjYgMS41LTQgMy40LTcuOSA1LjQtMTEuNyAzLjQtNi42IDcuNi0xMi44IDEyLjUtMTguNXptMzEuMyAxLjdjLjQtLjEgLjctLjEgMS4xLS4yIC4yIDEuOCAuMSAzLjYgLjEgNS40bDAgMzguMWMwIDEuNyAuMSAzLjUtLjIgNS4yLS40IDAtLjcgMC0xLjEgMC0uOS0zLjgtMS43LTcuNi0yLjYtMTEuMy0uNC0xLjUtLjYtMy4xLTEuMS00LjYtMS43LS4yLTMuNC0uMi01LjItLjItNS4xIDAtMTAuMSAwLTE1LjIgMC0xLjcgMC0zLjMgLjEtNSAwIDAtLjQtLjMtLjkgLjItMS4yIDEuMy0uNyAyLjctLjkgNC4xLTEuNCAzLjQtMS4xIDYuOS0yLjIgMTAuMy0zLjMgMS40LS41IDIuOS0uNyA0LjItMS41IDAtLjYgMC0xLjEgMC0xLjctMS4yLS42LTIuNS0uOS0zLjgtMS4zLTMuMS0xLTYuMy0yLTkuNC0zLTEuOC0uNi0zLjctMS01LjQtMS44IDAtLjQtLjEtLjctLjEtMS4xIDUuMS0uMiAxMC4yIC4xIDE1LjMtLjEgMy40LS4xIDYuNyAuMSAxMC4xLS4xIC4xLS40IC4zLS44IC40LTEuMiAxLjEtNC45IDIuMy05LjggMy40LTE0Ljd6bTYtLjJjLjQgMCAuNyAuMSAxLjEgLjIgMSAzLjggMS43IDcuOCAyLjcgMTEuNiAuNCAxLjQgLjYgMi45IDEgNC4zIDIuNSAuMiA1LjEgMCA3LjYgMCA1LjIgLjEgMTAuMyAuMSAxNS41IC4xIC44IDAgMS41IDAgMi4zIC4xIDAgLjQtLjEgLjctLjEgMS4xLTEuOCAuOC0zLjggMS4yLTUuNyAxLjktMy43IDEuMi03LjUgMi40LTExLjIgMy42LS42IC4yLTEuMSAuNC0xLjcgLjYtLjIgLjYtLjIgMS4xLS4xIDEuNyAuOSAuNSAxLjggLjggMi44IDEuMSA0LjkgMS41IDkuNyAzLjEgMTQuNiA0LjYgLjQgLjEgLjggLjMgMS4xIC41IC40IC4zIC4yIC44IC4yIDEuMi0xLjcgLjEtMy4zIDAtNSAwLTUuMiAwLTEwLjMgMC0xNS41IDAtMS42IDAtMy4yIDAtNC44IC4yLS41IDEuNy0uNyAzLjQtMS4yIDUuMS0uOSAzLjYtMS41IDcuMi0yLjUgMTAuOC0uNCAwLS43IDAtMS4xIC4xLS4zLTEuNy0uMi0zLjUtLjItNS4ybDAtMzguMWMwLTEuOC0uMS0zLjYgLjEtNS40em0tMTg2IDQ1YzEuMS0yLjIgMi4xLTQuNCAzLjQtNi41LTEuOCA3LjYtMi45IDE1LjMtMy42IDIzLS44IDcuNy0uOCAxNS41LS41IDIzLjIgMS4xIDE5LjkgNS41IDM5LjggMTQuMiA1Ny45IDMgNiA2LjQgMTEuOCAxMC41IDE3LjEgNi4xIDcuNSAxMi41IDE0LjggMTkuOCAyMS4xIDQuOCA0LjEgMTAgNy44IDE1LjUgMTAuOCAzLjMgMS43IDYuNSAzLjQgOS45IDQuNyA1IDIgMTAuMiAzLjYgMTUuNCA0LjkgMy44IDEgNy44IDEuNCAxMS41IDIuNyA1IDEuNiA5LjUgNC42IDEzIDguNCA0LjkgNS4yIDguMSAxMS45IDEwLjIgMTguNyAxIDIuOSAxLjYgNS45IDIuMiA4LjkgLjIgLjggLjIgMS41IC4yIDIuMy02LjUgMi44LTEzLjMgNS4xLTIwLjMgNi4yLTQuMSAuOC04LjMgMS0xMi41IDEuMS0xMC4yIC4yLTIwLjUtMS44LTMwLjEtNS4xLTMuNy0xLjQtNy41LTIuOS0xMS00LjctOC4xLTMuOC0xNS42LTguNy0yMi41LTE0LjUtMi45LTIuNi01LjgtNS4xLTguNC04LTkuMi05LjgtMTYuMy0yMS40LTIxLjgtMzMuNy0yLjQtNS41LTQuNi0xMS4yLTYuNC0xNy0xLjItMy45LTIuNC03LjktMy4zLTExLjktLjctMi45LTEuMi01LjktMS45LTguOS0uNS0yLjEtLjctNC4zLTEtNi41LS44LTUuNC0xLjMtMTAuOS0xLjMtMTYuNCAuMS02LjIgLjItMTIuNCAxLjEtMTguNSAuNC0yLjkgLjctNS43IDEuMi04LjYgMS01LjcgMi4xLTExLjQgMy43LTE2LjkgMy4xLTExLjYgNy41LTIzIDEyLjctMzMuOHptMzYzLjctNi40YzEuMSAxLjcgMS45IDMuNSAyLjggNS4zIDIuMSA0LjUgNC4yIDguOSA2IDEzLjUgNy42IDE4LjggMTIuMyAzOC44IDEzIDU5IDAgMS44IC4xIDMuNSAuMSA1LjMgLjEgOS42LTEuMyAxOS4xLTMuMiAyOC41LS43IDMuNi0xLjUgNy4yLTIuNiAxMC43LTQgMTQuNy0xMCAyOS0xOC40IDQxLjgtOC4yIDEyLjYtMTkgMjMuNS0zMS44IDMxLjQtNS43IDMuNi0xMS44IDYuNi0xOCA5LjItNS44IDIuMi0xMS43IDQtMTcuOCA1LjEtNi40IDEtMTIuOSAxLjUtMTkuNCAxLjItNy45LS41LTE1LjgtMi4xLTIzLjItNC44LTEuOS0uOC0zLjktMS41LTUuOC0yLjMtLjItMS41IC4yLTMgLjUtNC41IDEuMi01LjcgMy0xMS40IDUuNy0xNi42IDIuNC00LjUgNS41LTguNyA5LjUtMTEuOSAyLjQtMi4xIDUuMi0zLjYgOC4yLTQuOCAzLjYtMS41IDcuNS0yIDExLjItMi44IDcuMi0xLjcgMTQuNC0zLjkgMjEuMi03IDEwLjMtNC43IDE5LjctMTEuNCAyNy42LTE5LjUgMS42LTEuNiAzLjItMy4yIDQuNy00LjkgMy40LTMuOCA2LjctNy42IDkuOC0xMS41IDcuNS0xMC4xIDEyLjgtMjEuNiAxNi43LTMzLjUgMS42LTUuMyAzLjItMTAuNiA0LjItMTYuMSAuNi0yLjkgMS01LjggMS41LTguNyAuOS02LjEgMS42LTEyLjIgMS43LTE4LjQgLjEtNi42IC4xLTEzLjMtLjUtMTkuOS0uNy04LTEuOS0xNi0zLjctMjMuOHoiXQogICAgfTsKICAgIGZhU3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdXNlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3ZDYiLCAiTTYwNC41IDIxMGExMC40IDEwLjQgMCAxIDEgLTExLjQtMTcuNCAxMC40IDEwLjQgMCAxIDEgMTEuNCAxNy40ek02MjEgMTg3LjJhMzguNSAzOC41IDAgMSAxIC03NSAxNy42IDM4LjUgMzguNSAwIDEgMSA3NS0xNy42ek00MzMuNyAzMzYuN2MzLjIgNC42IDUuOCA5IDcuMyAxMy40IDEgMy4xIDIuNCA3LjMgNS41IDguOSAuMiAuMSAuMyAuMiAuNSAuMiA1LjcgMi4xIDIwLjMgMS43IDIwLjMgMS43bDI2LjggMGMyLjMgMCAyMi40IDAgMjEuOS0yLjMtMi40LTEwLjgtMTQuOS0xMi43LTI0LjQtMTguMy04LjctNS4yLTE3LTExLjEtMjAuOC0yMS4zLTItNS4yLS44LTE3LjQgMi42LTIxLjggMi41LTMuMiA2LjEtNS4zIDEwLTYuMiA0LjMtLjkgOC44LS4xIDEzLjEgLjMgNS4zIC41IDEwLjYgMS41IDE1LjkgMi4yIDEwLjMgMS4zIDIwLjYgMS45IDMxIDEuNiAxNy4xLS41IDM0LjItMy4yIDUwLjQtOC43IDExLjMtMy44IDIyLjQtOC45IDMyLTE2LjEgMTAuOS04LjEgOC4xLTcuNC0zLTYuMi0xMy4zIDEuNC0yNi42IDEuNi0zOS45IC44LTEyLjQtLjctMjQuNy0yLjItMzUuOS03LjktOC44LTQuNi0xNi40LTkuMS0yMy40LTE2LjItMS0xLjEtMS43LTQuMiAuMi02LjIgMS45LTEuOSA1LjgtLjggNyAuMiAxMi4yIDEwLjIgMzAuNSAxOC42IDQ5LjMgMTkuNSAxMC4yIC41IDIwLjEgLjcgMzAuNCAuMyA1LjEtLjIgMTIuOC0uMiAxNy45LS4zIDIuNiAwIDkuOCAuNyAxMS4yLTIuMSAuNC0uOCAuNC0xLjggLjMtMi43LTEuNS00MC45LTQuNS04Ni45LTQ3LjMtMTA2LjUtMzEuOS0xNC42LTc5LjctMzcuMi05OS45LTQ2LjYtNC43LTIuMi0xMC4yIDEuMy0xMC4yIDYuNSAwIDEzLjYgLjcgMzMuMyAuNyA1MS4xLTkuNy05LjktMjYtMTYuMS0zOC40LTIxLjgtMTQuMS02LjUtMjguNy0xMi00My41LTE2LjYtMjkuOC05LjItNjAuNy0xNC45LTkxLjctMTgtMzUuMi0zLjUtNzEtMS44LTEwNS43IDUuMy01Ni45IDEyLjItMTEzLjEgMzkuNy0xNTUuNyA3OS44LTI2LjEgMjQuNi00Ni42IDU5LjctNDggOTUuMi0yIDUwLjMgMTIuMSA3Ny4zIDM4IDEwNS4yIDQxLjMgNDQuNCAxMzAuMiA1MC42IDE2Ni4yLTIgMTYuMi0yMy43IDE5LjctNTUuOCA4LTgyLTExLjgtMjYuMi0zOC44LTQ1LjEtNjcuNC00Ni0yMi4yLS43LTQ1LjkgMTAuNi01NC41IDMxLjEtNi41IDE1LjctMi44IDM1LjEgOSA0Ny4zIDQuNiA0LjggMTAuOSA4LjcgMTcuNyA3LjEgNC0uOSA3LjQtMy45IDgtOCAuOS02LTQuNC05LjktNy42LTE0LjUtNS44LTguMy00LjctMjAuOSAyLjctMjcuOSA2LjItNiAxNS4zLTcuOCAyMy45LTcuNyA4IDAgMTYuMiAxLjQgMjMuMSA1LjUgOS43IDUuNyAxNi4yIDE2LjIgMTguNCAyNy4yIDYuNyAzMy0yMC4yIDU5LjktNTYuNiA2Mi0xOC42IDEuMS0zNy42LTMuOC01Mi4xLTE1LjUtMzYuOS0yOS44LTQ1LjktOTAuMy0zLjgtMTIyLjcgNDAtMzAuNyA5MC40LTIyLjggMTIwLjItNi44IDIzLjggMTIuOCA0MS41IDMzLjYgNTUgNTYuNyA2LjcgMTEuNiAxMi41IDIzLjcgMTcuOCAzNi4xIDUuMSAxMS44IDkuOSAyMy44IDIwLjIgMzIuNSA2LjggNS44IDE1LjIgNS42IDI0LjEgNS42bDUwLjggMGM2LjkgMCA1LjItNC42IDIuMi03LjctNi43LTYuOS0xNi40LTguNC0yNS40LTEwLjktMjAuNS01LjYtMTguNC0zMi44LTEyLjctMzIuOCAxOC4zIDAgMTguOSAuNiAzNC45IC4zIDIzLjItLjMgMzAuMi0xLjcgNDguMyA1IDkuNyAzLjYgMTkgMTMuMSAyNS4xIDIxLjd6Il0KICAgIH07CiAgICBmYUFwcFN0b3JlSW9zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcC1zdG9yZS1pb3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3MCIsICJNNDAwIDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyNyAzODQuNWMtNS41IDkuNi0xNy44IDEyLjgtMjcuMyA3LjMtOS42LTUuNS0xMi44LTE3LjgtNy4zLTI3LjNsMTQuMy0yNC43YzE2LjEtNC45IDI5LjMtMS4xIDM5LjYgMTEuNEwxMjcgMzg0LjV6bTEzOC45LTUzLjlMODQgMzMwLjZjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDUxIDAgNjUuNC0xMTMuMi0yMC41LTM1LjRjLTUuNS05LjYtMi4yLTIxLjggNy4zLTI3LjMgOS42LTUuNSAyMS44LTIuMiAyNy4zIDcuM2w4LjkgMTUuNCA4LjktMTUuNGM1LjUtOS42IDE3LjgtMTIuOCAyNy4zLTcuMyA5LjYgNS41IDEyLjggMTcuOCA3LjMgMjcuM2wtODUuOCAxNDguNiA2Mi4xIDBjMjAuMiAwIDMxLjUgMjMuNyAyMi43IDQwem05OC4xIDBsLTI5IDAgMTkuNiAzMy45YzUuNSA5LjYgMi4yIDIxLjgtNy4zIDI3LjMtOS42IDUuNS0yMS44IDIuMi0yNy4zLTcuMy0zMi45LTU2LjktNTcuNS05OS43LTc0LTEyOC4xLTE2LjctMjktNC44LTU4IDcuMS02Ny44IDEzLjEgMjIuNyAzMi43IDU2LjcgNTguOSAxMDJsNTIgMGMxMSAwIDIwIDkgMjAgMjAgMCAxMS4xLTkgMjAtMjAgMjB6Il0KICAgIH07CiAgICBmYVNxdWFyZURyaWJiYmxlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1kcmliYmJsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJkcmliYmJsZS1zcXVhcmUiXSwgImYzOTciLCAiTTE2NS45IDEzMi41Yy0zOC4zIDE4LTY2LjggNTMuMy03NS43IDk1LjcgNi4xIC4xIDYyLjQgLjMgMTI2LjQtMTYuNy0yMi43LTQwLjItNDcuMS03NC4xLTUwLjctNzl6bTI2LjEtOS4xYzMuOCA1LjEgMjguNiAzOC45IDUxIDgwIDQ4LjYtMTguMyA2OS4xLTQ1LjkgNzEuNi00OS40LTMzLjYtMjkuOC03OS4zLTQxLjEtMTIyLjYtMzAuNnpNMjc3LjQgMzgyYy0yLTEyLTEwLTUzLjgtMjkuMi0xMDMuNi01NS4xIDE4LjgtOTMuOCA1Ni40LTEwOC4xIDg1LjYgNDAuNSAzMS42IDkzLjMgMzYuNyAxMzcuMyAxOHpNMjI3LjggMjMyLjZDMTU5LjYgMjUzIDkzLjQgMjUyLjIgODcuNCAyNTJsMCA0LjJjMCAzNS4xIDEzLjMgNjcuMSAzNS4xIDkxLjQgMjIuMi0zNy45IDY3LjEtNzcuOSAxMTYuNS05MS44LTMuNC03LjgtNy4yLTE1LjUtMTEuMS0yMy4ybC0uMSAwem03Mi41IDEzNi45YzMwLjctMjAuNyA1Mi41LTUzLjYgNTguNi05MS42LTQuNi0xLjUtNDIuMy0xMi43LTg1LjEtNS44IDE3LjkgNDkuMSAyNS4xIDg5LjEgMjYuNSA5Ny40em0tMzQuOC0xMTljNDUuNS01LjcgOTAuNyAzLjQgOTUuMiA0LjQtLjMtMzIuMy0xMS44LTYxLjktMzAuOS04NS4xLTIuOSAzLjktMjUuOCAzMy4yLTc2LjMgNTMuOSA0LjggOS44IDguMyAxNy44IDEyIDI2Ljh6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0yMjQgOTZhMTYwIDE2MCAwIDEgMSAwIDMyMCAxNjAgMTYwIDAgMSAxIDAtMzIweiJdCiAgICB9OwogICAgZmFEcmliYmJsZVNxdWFyZSA9IGZhU3F1YXJlRHJpYmJibGU7CiAgICBmYVVpa2l0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVpa2l0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDMiLCAiTTQ0My45IDEyOGwwIDI1Ni0yMjUuOSAxMjgtMjE4LTEyOCAwLTIxNC4zIDg3LjYgNDUuMSAwIDExNyAxMzMuNSA3NS41IDEzNS44LTc1LjUgMC0xNTEtMTAxLjEtNTcuNiA4Ny42LTUzLjEgMTAwLjUgNTcuOXpNMzA4LjYgNDkuMWwtODQuOC00OS4xLTg4LjYgNTQuOCA4NiA0Ny4zIDg3LjQtNTN6Il0KICAgIH07CiAgICBmYVN1cGVycG93ZXJzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN1cGVycG93ZXJzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyZGQiLCAiTTQ0OCAzMmMtODMuMyAxMS0xNjYuOCAyMi0yNTAgMzMtOTIgMTIuNS0xNjMuMyA4Ni43LTE2OSAxODAtMy4zIDU1LjUgMTggMTA5LjUgNTcuOCAxNDguMkwwIDQ4MGM4My4zLTExIDE2Ni41LTIyIDI0OS44LTMzIDkxLjgtMTIuNSAxNjMuMy04Ni44IDE2OC43LTE3OS44IDMuNS01NS41LTE4LTEwOS41LTU3LjctMTQ4LjJMNDQ4IDMyek0zNjguMyAyNjQuM2MtNC4yIDc5LjUtNzQgMTM5LjItMTUyLjggMTM0LjUtNzkuNS00LjctMTQwLjctNzEtMTM2LjMtMTUxIDQuNS03OS4yIDc0LjMtMTM5LjMgMTUzLTEzNC41IDc5LjMgNC43IDE0MC41IDcxIDEzNi4xIDE1MXoiXQogICAgfTsKICAgIGZhWW91dHViZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ5b3V0dWJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE4MDJdLCAiZjE2NyIsICJNNTQ5LjcgMTI0LjFDNTQzLjUgMTAwLjQgNTI0LjkgODEuOCA1MDEuNCA3NS41IDQ1OC45IDY0IDI4OC4xIDY0IDI4OC4xIDY0UzExNy4zIDY0IDc0LjcgNzUuNUM1MS4yIDgxLjggMzIuNyAxMDAuNCAyNi40IDEyNC4xIDE1IDE2NyAxNSAyNTYuNCAxNSAyNTYuNHMwIDg5LjQgMTEuNCAxMzIuM2M2LjMgMjMuNiAyNC44IDQxLjUgNDguMyA0Ny44IDQyLjYgMTEuNSAyMTMuNCAxMS41IDIxMy40IDExLjVzMTcwLjggMCAyMTMuNC0xMS41YzIzLjUtNi4zIDQyLTI0LjIgNDguMy00Ny44IDExLjQtNDIuOSAxMS40LTEzMi4zIDExLjQtMTMyLjNzMC04OS40LTExLjQtMTMyLjN6TTIzMi4yIDMzNy42bDAtMTYyLjQgMTQyLjcgODEuMi0xNDIuNyA4MS4yeiJdCiAgICB9OwogICAgZmFFbWJlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbWJlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDIzIiwgIk02MzkuOSAyNTQuNmMtMS4xLTEwLjctMTAuNy02LjgtMTAuNy02LjhzLTE1LjYgMTIuMS0yOS4zIDEwLjdjLTEzLjctMS4zLTkuNC0zMi05LjQtMzJzMy0yOC4xLTUuMS0zMC40Yy04LjEtMi40LTE4IDcuMy0xOCA3LjNzLTEyLjQgMTMuNy0xOC4zIDMxLjJsLTEuNiAuNXMxLjktMzAuNi0uMy0zNy42Yy0xLjYtMy41LTE2LjQtMy4yLTE4LjggM3MtMTQuMiA0OS4yLTE1IDY3LjJjMCAwLTIzLjEgMTkuNi00My4zIDIyLjhzLTI1LTkuNC0yNS05LjQgNTQuOC0xNS4zIDUyLjktNTkuMS00NC4yLTI3LjYtNDktMjRjLTQuNiAzLjUtMjkuNCAxOC40LTM2LjYgNTkuNy0uMiAxLjQtLjcgNy41LS43IDcuNXMtMjEuMiAxNC4yLTMzIDE4YzAgMCAzMy01NS42LTcuMy04MC45LTExLjQtNi44LTIxLjMtLjUtMjcuMiA1LjMgMTMuNi0xNy4zIDQ2LjQtNjQuMiAzNi45LTEwNS4yLTUuOC0yNC40LTE4LTI3LjEtMjkuMi0yMy4xLTE3IDYuNy0yMy41IDE2LjctMjMuNSAxNi43cy0yMiAzMi0yNy4xIDc5LjUtMTIuNiAxMDUuMS0xMi42IDEwNS4xLTEwLjUgMTAuMi0yMC4yIDEwLjctNS40LTI4LjctNS40LTI4LjcgNy41LTQ0LjYgNy01Mi4xLTEuMS0xMS42LTkuOS0xNC4yYy04LjktMi43LTE4LjUgOC42LTE4LjUgOC42cy0yNS41IDM4LjctMjcuNyA0NC42bC0xLjMgMi40LTEuMy0xLjZzMTgtNTIuNyAuOC01My41LTI4LjUgMTguOC0yOC41IDE4LjgtMTkuNiAzMi44LTIwLjQgMzYuNWwtMS4zLTEuNnM4LjEtMzguMiA2LjQtNDcuNmMtMS42LTkuNC0xMC41LTcuNS0xMC41LTcuNXMtMTEuMy0xLjMtMTQuMiA1LjktMTMuNyA1NS4zLTE1IDcwLjdjMCAwLTI4LjIgMjAuMi00Ni44IDIwLjQtMTguNSAuMy0xNi43LTExLjgtMTYuNy0xMS44czY4LTIzLjMgNDkuNC02OS4yYy04LjMtMTEuOC0xOC0xNS41LTMxLjctMTUuMy0xMy43IC4zLTMwLjMgOC42LTQxLjMgMzMuMy01LjMgMTEuOC02LjggMjMtNy44IDMxLjUgMCAwLTEyLjMgMi40LTE4LjgtMi45cy0xMCAwLTEwIDAtMTEuMiAxNC0uMSAxOC4zIDI4LjEgNi4xIDI4LjEgNi4xYzEuNiA3LjUgNi4yIDE5LjUgMTkuNiAyOS43IDIwLjIgMTUuMyA1OC44LTEuMyA1OC44LTEuM2wxNS45LTguOHMuNSAxNC42IDEyLjEgMTYuNyAxNi40IDEgMzYuNS00Ny45YzExLjgtMjUgMTIuNi0yMy42IDEyLjYtMjMuNmwxLjMtLjNzLTkuMSA0Ni44LTUuNiA1OS43QzE4Ny43IDMxOS40IDIwMyAzMTggMjAzIDMxOHM4LjMgMi40IDE1LTIxLjIgMTkuNi00OS45IDE5LjYtNDkuOWwxLjYgMHMtNS42IDQ4LjEgMyA2My43IDMwLjkgNS4zIDMwLjkgNS4zIDE1LjYtNy44IDE4LTEwLjJjMCAwIDE4LjUgMTUuOCA0NC42IDEyLjkgNTguMy0xMS41IDc5LjEtMjUuOSA3OS4xLTI1LjlzMTAgMjQuNCA0MS4xIDI2LjdjMzUuNSAyLjcgNTQuOC0xOC42IDU0LjgtMTguNnMtLjMgMTMuNSAxMi4xIDE4LjYgMjAuNy0yMi44IDIwLjctMjIuOGwyMC43LTU3LjIgMS45IDBzMS4xIDM3LjMgMjEuNSA0My4yIDQ3LTEzLjcgNDctMTMuNyA2LjQtMy41IDUuMy0xNC4zem0tNTc4IDUuM2MuOC0zMiAyMS44LTQ1LjkgMjktMzkgNy4zIDcgNC42IDIyLTkuMSAzMS40LTEzLjcgOS41LTE5LjkgNy42LTE5LjkgNy42ek0zMzQuNyAxMzYuMXMxOS4xLTQ5LjcgMjMuNi0yNS41LTQwIDk2LjItNDAgOTYuMmMuNS0xNi4yIDE2LjQtNzAuNyAxNi40LTcwLjd6bTIyLjggMTM4LjRjLTEyLjYgMzMtNDMuMyAxOS42LTQzLjMgMTkuNnMtMy41LTExLjggNi40LTQ0LjkgMzMuMy0yMC4yIDMzLjMtMjAuMiAxNi4yIDEyLjQgMy42IDQ1LjV6bTg0LjYtMTQuNnMtMy0xMC41IDguMS0zMC42YzExLTIwLjIgMTkuNi05LjEgMTkuNi05LjFzOS40IDEwLjItMS4zIDI1LjUtMjYuNCAxNC4yLTI2LjQgMTQuMnoiXQogICAgfTsKICAgIGZhQm9vdHN0cmFwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJvb3RzdHJhcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmODM2IiwgIk0zMzMuNSAyMDEuNGMwLTIyLjEtMTUuNi0zNC4zLTQzLTM0LjNsLTUwLjQgMCAwIDcxLjIgNDIuNSAwYzMyLjgtLjEgNTAuOS0xMy4zIDUwLjktMzYuOXpNNTE3IDE4OC42Yy05LjUtMzAuOS0xMC45LTY4LjgtOS44LTk4LjEgMS4xLTMwLjUtMjIuNy01OC41LTU0LjctNTguNUwxMjMuNyAzMmMtMzIuMSAwLTU1LjggMjguMS01NC43IDU4LjUgMSAyOS4zLS4zIDY3LjItOS44IDk4LjEtOS42IDMxLTI1LjcgNTAuNi01Mi4yIDUzLjFsMCAyOC41YzI2LjQgMi41IDQyLjYgMjIuMSA1Mi4yIDUzLjEgOS41IDMwLjkgMTAuOSA2OC44IDkuOCA5OC4xLTEuMSAzMC41IDIyLjcgNTguNSA1NC43IDU4LjVsMzI4LjcgMGMzMi4xIDAgNTUuOC0yOC4xIDU0LjctNTguNS0xLTI5LjMgLjMtNjcuMiA5LjgtOTguMSA5LjYtMzEgMjUuNy01MC42IDUyLjEtNTMuMWwwLTI4LjVjLTI2LjMtMi41LTQyLjUtMjIuMS01Mi01My4xek0zMDAuMiAzNzUuMWwtOTcuOSAwIDAtMjM4LjMgOTcuNCAwYzQzLjMgMCA3MS43IDIzLjQgNzEuNyA1OS40IDAgMjUuMy0xOS4xIDQ3LjktNDMuNSA1MS44bDAgMS4zYzMzLjIgMy42IDU1LjUgMjYuNiA1NS41IDU4LjMgMCA0Mi4xLTMxLjMgNjcuNS04My4yIDY3LjV6bS0xMC0xMDguN2wtNTAuMSAwIDAgNzguNCA1Mi4zIDBjMzQuMiAwIDUyLjMtMTMuNyA1Mi4zLTM5LjUgMC0yNS43LTE4LjYtMzguOS01NC41LTM4Ljl6Il0KICAgIH07CiAgICBmYUl0dW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpdHVuZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiNCIsICJNMjIzLjYgODAuM2ExNzEuMyAxNzEuMyAwIDEgMCAuMiAzNDIuNSAxNzEuMyAxNzEuMyAwIDEgMCAtLjItMzQyLjV6bTc5LjQgMjQwYy0zLjIgMTMuNi0xMy41IDIxLjItMjcuMyAyMy44LTEyLjEgMi4yLTIyLjIgMi44LTMxLjktNS0xMS44LTEwLTEyLTI2LjQtMS40LTM2LjggOC40LTggMjAuMy05LjYgMzgtMTIuOCAzLS41IDUuNi0xLjIgNy43LTMuNyAzLjItMy42IDIuMi0yIDIuMi04MC44IDAtNS42LTIuNy03LjEtOC40LTYuMS00IC43LTkxLjkgMTcuMS05MS45IDE3LjEtNSAxLjEtNi43IDIuNi02LjcgOC4zIDAgMTE2LjEgLjUgMTEwLjgtMS4yIDExOC41LTIuMSA5LTcuNiAxNS44LTE0LjkgMTkuNi04LjMgNC42LTIzLjQgNi42LTMxLjQgNS4yLTIxLjQtNC0yOC45LTI4LjctMTQuNC00Mi45IDguNC04IDIwLjMtOS42IDM4LTEyLjggMy0uNSA1LjYtMS4yIDcuNy0zLjcgNS01LjcgLjktMTI3IDIuNi0xMzMuNyAuNC0yLjYgMS41LTQuOCAzLjUtNi40IDIuMS0xLjcgNS44LTIuNyA2LjctMi43IDEwMS0xOSAxMTMuMy0yMS40IDExNS4xLTIxLjQgNS43LS40IDkgMyA5IDguNy0uMSAxNzAuNiAuNCAxNjEuNC0xIDE2Ny42ek0zNDUuMiAzMkwxMDIuOCAzMkM0NS45IDMyIDAgNzcuOSAwIDEzNC44TDAgMzc3LjJDMCA0MzQuMSA0NS45IDQ4MCAxMDIuOCA0ODBsMjQyLjQgMGM1NyAwIDEwMi44LTQ1LjkgMTAyLjgtMTAyLjhsMC0yNDIuNEM0NDggNzcuOSA0MDIuMSAzMiAzNDUuMiAzMnpNMjIzLjYgNTlhMTkyLjUgMTkyLjUgMCAxIDEgMCAzODUgMTkyLjUgMTkyLjUgMCAxIDEgMC0zODV6Il0KICAgIH07CiAgICBmYVNxdWFyZVhpbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXhpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsieGluZy1zcXVhcmUiXSwgImYxNjkiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek05My44IDMyMC4yYy01LjUgMC04LjctNS4zLTYtMTAuM2w0OS4zLTg2LjdjLjEgMCAuMS0uMSAwLS4ybC0zMS40LTU0Yy0zLTUuNiAuMi0xMC4xIDYtMTAuMWw0Ni42IDBjNS4yIDAgOS41IDIuOSAxMi45IDguN2wzMS45IDU1LjNjLTEuMyAyLjMtMTggMzEuNy01MC4xIDg4LjItMy41IDYuMi03LjcgOS4xLTEyLjYgOS4xbC00Ni42IDB6bTE2My41LTMzLjRsMCAuMiA2NS41IDExOWMyLjggNS4xIC4xIDEwLjEtNiAxMC4xbC00Ni42IDBjLTUuNSAwLTkuNy0yLjktMTIuOS04LjdsLTY2LTEyMC4zYzEuOC0zLjIgMjIuOS00MC40IDYzLjMtMTExLjYgMTEuNy0yMC43IDI1LjEtNDQuMyA0MC4xLTcwLjggMy4zLTUuOCA3LjQtOC43IDEyLjUtOC43bDQ2LjkgMGM1LjctLjEgOC44IDQuNyA2IDEwTDI1Ny4zIDI4Ni44eiJdCiAgICB9OwogICAgZmFYaW5nU3F1YXJlID0gZmFTcXVhcmVYaW5nOwogICAgZmFDc3MzQWx0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNzczMtYWx0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzOGIiLCAiTTAgMzJMMzQuOSA0MjcuOCAxOTIgNDgwIDM0OS4xIDQyNy44IDM4NCAzMiAwIDMyem0zMTMuMSA4MGwtNC44IDQ3LjMtMTE1LjMgNDkuMy0uMyAuMSAxMTEuNSAwLTEyLjggMTQ2LjYtOTguMiAyOC43LTk4LjgtMjkuMi02LjQtNzMuOSA0OC45IDAgMy4yIDM4LjMgNTIuNiAxMy4zIDU0LjctMTUuNCAzLjctNjEuNi0xNjYuMy0uNSAwLS4xLS4yIC4xLTMuNi00Ni4zIDExMi4xLTQ2LjcgNi41LTIuNy0xMjIuOSAwLTUuOC00Ny4zIDI0Mi4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZXNwYWNlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZXNwYWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmUiLCAiTTE4Ni4xIDM0My4zYy05LjcgOS43LTkuNyAyNS4zIDAgMzQuOXMyNS4zIDkuNiAzNC45IDBMMzc4LjMgMjIxLjFjMTkuMy0xOS4zIDUwLjYtMTkuMyA2OS45IDBzMTkuMyA1MC42IDAgNjkuOUwyOTQgNDQ1LjFjMTkuMyAxOS4zIDUwLjUgMTkuMyA2OS44IDBsMCAwIDExOS4zLTExOS4yYzM4LjYtMzguNiAzOC42LTEwMS4xIDAtMTM5LjctMzguNi0zOC42LTEwMS4yLTM4LjYtMTM5LjcgMEwxODYuMSAzNDMuM3pNNDMwLjcgMjM4LjVjLTkuNy05LjctMjUuMy05LjctMzQuOSAwTDIzOC41IDM5NS43Yy0xOS4zIDE5LjMtNTAuNSAxOS4zLTY5LjggMGwwIDBjLTkuNi05LjYtMjUuMy05LjctMzQuOSAwbDAgMGMtOS43IDkuNi05LjcgMjUuMyAwIDM0LjlsMCAwYzM4LjYgMzguNiAxMDEuMSAzOC42IDEzOS43IDBMNDMwLjcgMjczLjVjOS42LTkuNyA5LjYtMjUuMyAwLTM0Ljl6bS0yNjIgODcuM0wzMjUuOSAxNjguN2M5LjYtOS42IDkuNi0yNS4zIDAtMzQuOS05LjYtOS42LTI1LjMtOS42LTM0LjkgMEwxMzMuNyAyOTAuOWMtMTkuMyAxOS4zLTUwLjYgMTkuMy02OS45IDBsMCAwYy0xOS4zLTE5LjMtMTkuMy01MC41IDAtNjkuOGwwIDAgMTU0LjItMTU0LjJjLTE5LjMtMTkuMy01MC41LTE5LjMtNjkuOCAwbDAgMC0xMTkuMiAxMTkuM2MtMzguNiAzOC42LTM4LjYgMTAxLjEgMCAxMzkuNyAzOC42IDM4LjYgMTAxLjEgMzguNiAxMzkuNyAwek04MS4zIDI3My41YzkuNiA5LjYgMjUuMyA5LjYgMzQuOSAwTDI3My41IDExNi4zYzE5LjMtMTkuMyA1MC42LTE5LjMgNjkuOCAwbDAgMGM5LjcgOS42IDI1LjMgOS42IDM0LjkgMHM5LjYtMjUuMyAwLTM0LjljLTM4LjYtMzguNi0xMDEuMS0zOC42LTEzOS43IDBMODEuMyAyMzguNWMtOS42IDkuNi05LjYgMjUuMyAwIDM0LjlsMCAweiJdCiAgICB9OwogICAgZmFUcmVsbG8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHJlbGxvIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxODEiLCAiTTM5Mi4zIDMyTDU2LjEgMzJjLTMxIDAtNTYuMSAyNS4xLTU2LjEgNTYtLjEgMCAwLTQgMCAzMzYgMCAzMC45IDI1LjEgNTYgNTYgNTZsMzM2LjIgMGMzMC44LS4yIDU1LjctMjUuMiA1NS43LTU2bDAtMzM2Yy4xLTMwLjgtMjQuOC01NS44LTU1LjYtNTZ6TTE5NyAzNzEuM2MtLjIgMTQuNy0xMi4xIDI2LjYtMjYuOSAyNi42bC04Mi43IDBjLTE0LjggLjEtMjYuOS0xMS44LTI3LTI2LjZsMC0yNTQuMmMwLTE0LjggMTItMjYuOSAyNi45LTI2LjlsODIuOSAwYzE0LjggMCAyNi45IDEyIDI2LjkgMjYuOWwwIDI1NC4yLS4xIDB6bTE5My4xLTExMmMwIDE0LjgtMTIgMjYuOS0yNi45IDI2LjlsLTgxIDBjLTE0LjggMC0yNi45LTEyLTI2LjktMjYuOWwwLTE0Mi4xYzAtMTQuOCAxMi0yNi45IDI2LjgtMjYuOWw4MS4xIDBjMTQuOCAwIDI2LjkgMTIgMjYuOSAyNi45bDAgMTQyLjF6Il0KICAgIH07CiAgICBmYVZpYWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFkZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJhOSIsICJNMjc2LjQgMTUwLjVsMCAuN2MtMTcuOS01Mi42LTQyLjYtMTAzLjQtNzAuOC0xNTEuMiA0My4zIDI5LjIgNjcgMTAwIDcwLjggMTUwLjV6bTMyLjcgMTIxLjdjNy42IDE4LjIgMTEgMzcuNSAxMSA1NyAwIDc3LjctNTcuOCAxNDEtMTM3LjggMTM5LjRsMy44LS4zYzc0LjItNDYuNyAxMDkuMy0xMTguNiAxMDkuMy0yMDUuMSAwLTM4LjEtNi41LTc1LjktMTguOS0xMTIgMSAxMS43IDEgMjMuNyAxIDM1LjQgMCA5MS44LTE4LjEgMjQxLjYtMTE2LjYgMjgwLTY1LjctMTEuNC0xMTEuMy02OC42LTExMS4zLTEzNy40IDAtNzUuNiA1Ny40LTE0Mi4zIDEzNS40LTE0Mi4zIDE2LjggMCAzMy43IDMuMSA0OS4xIDkuNiAxLjctMTUuMSA2LjUtMjkuOSAxMy40LTQzLjMtMTkuOS03LjItNDEuMi0xMC43LTYyLjUtMTAuNy0xNjEuNSAwLTIzOC43IDE5NS45LTEyOS45IDMxMy43IDY3LjkgNzQuNiAxOTIgNzMuOSAyNTkuOCAwIDU2LjYtNjEuMyA2MC45LTE0Mi40IDM2LjQtMjAxLTEyLjcgOC0yNy4xIDEzLjktNDIuMiAxN3pNNDE4LjMgMTEuN2MtMzEgNjYuNS04MS4zIDQ3LjItMTE1LjggODAuMS0xMi40IDEyLTIwLjYgMzQtMjAuNiA1MC41IDAgMTQuMSA0LjUgMjcuMSAxMiAzOC44IDQ3LjQtMTEgOTguMy00NiAxMTguMi05MC43LS43IDUuNS00LjggMTQuNC03LjIgMTkuMi0yMC4zIDM1LjctNjQuNiA2NS42LTk5LjcgODQuOSAxNC44IDE0LjQgMzMuNyAyNS44IDU1IDI1LjggNzkgMCAxMTAuMS0xMzQuNiA1OC4xLTIwOC42eiJdCiAgICB9OwogICAgZmFTZWFyY2hlbmdpbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWFyY2hlbmdpbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2ViIiwgIk0yMTQuNiAxMzAuM2wtNjcuMiAyOC4yIDAtMTE1LjMtNTQuNyAxOTAuMyA1NC43LTI0LjIgMCAxMzAuMyA2Ny4yLTIwOS4zek0xMzEuNCAzMy42bC0xLjMgNC43LTE1LjIgNTIuOUM3NC42IDEwNi43IDQ2IDE0NS44IDQ2IDE5MS41IDQ2IDI0My44IDgwLjMgMjg3LjQgMTI5LjQgMjk3bDAgNTMuNkM1MS41IDM0MC4xLTYgMjcyLjQtNiAxOTEuNi02IDExMS4xIDUzLjggNDQuNCAxMzEuNCAzMy42ek00NDIuOCA0ODAuOGMtMTEuMiAxMS4yLTIzLjEgMTIuMy0yOC42IDEwLjUtNS40LTEuOC0yNy4xLTE5LjktNjAuNC00NC40LTMzLjMtMjQuNi0zMy42LTM1LjctNDMtNTYuNy05LjQtMjAuOS0zMC40LTQyLjYtNTcuNS01Mi40bC05LjctMTQuN2MtMjQuNyAxNi45LTUzIDI2LjktODEuMyAyOC43bDIuMS02LjYgMTUuOS00OS41YzQ2LjUtMTEuOSA4MC45LTU0IDgwLjktMTA0LjIgMC01NC41LTM4LjQtMTAyLjEtOTYtMTA3LjFsMC01Mi4xYzgzLjIgNS4xIDE0OC44IDc0LjUgMTQ4LjggMTU5LjMgMCAzMy42LTExLjIgNjQuNy0yOSA5MC40bDE0LjYgOS42YzkuOCAyNy4xIDMxLjUgNDggNTIuNCA1Ny40czMyLjIgOS43IDU2LjggNDNjMjQuNiAzMy4yIDQyLjcgNTQuOSA0NC41IDYwLjNzLjcgMTcuMy0xMC41IDI4LjV6bS05LjktMTcuOWMwLTQuNC0zLjYtOC04LThzLTggMy42LTggOCAzLjYgOCA4IDggOC0zLjYgOC04eiJdCiAgICB9OwogICAgZmFQYXlwYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGF5cGFsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxZWQiLCAiTTExMS45IDI5NS45Yy0zLjUgMTkuMi0xNy40IDEwOC43LTIxLjUgMTM0LS4zIDEuOC0xIDIuNS0zIDIuNWwtNzQuNiAwYy03LjYgMC0xMy4xLTYuNi0xMi4xLTEzLjlMNTkuMyA0Ni42YzEuNS05LjYgMTAuMS0xNi45IDIwLTE2LjkgMTUyLjMgMCAxNjUuMS0zLjcgMjA0IDExLjQgNjAuMSAyMy4zIDY1LjYgNzkuNSA0NCAxNDAuMy0yMS41IDYyLjYtNzIuNSA4OS41LTE0MC4xIDkwLjMtNDMuNCAuNy02OS41LTctNzUuMyAyNC4yek0zNTcuNiAxNTJjLTEuOC0xLjMtMi41LTEuOC0zIDEuMy0yIDExLjQtNS4xIDIyLjUtOC44IDMzLjYtMzkuOSAxMTMuOC0xNTAuNSAxMDMuOS0yMDQuNSAxMDMuOS02LjEgMC0xMC4xIDMuMy0xMC45IDkuNC0yMi42IDE0MC40LTI3LjEgMTY5LjctMjcuMSAxNjkuNy0xIDcuMSAzLjUgMTIuOSAxMC42IDEyLjlsNjMuNSAwYzguNiAwIDE1LjctNi4zIDE3LjQtMTQuOSAuNy01LjQtMS4xIDYuMSAxNC40LTkxLjMgNC42LTIyIDE0LjMtMTkuNyAyOS4zLTE5LjcgNzEgMCAxMjYuNC0yOC44IDE0Mi45LTExMi4zIDYuNS0zNC44IDQuNi03MS40LTIzLjgtOTIuNnoiXQogICAgfTsKICAgIGZhU3F1YXJlQmx1ZXNreSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtYmx1ZXNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNmEzIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMjQgMjQ3LjRjMTQuNS0zMCA1NC04NS44IDkwLjctMTEzLjMgMjYuNS0xOS45IDY5LjMtMzUuMiA2OS4zIDEzLjcgMCA5LjgtNS42IDgyLjEtOC45IDkzLjgtMTEuNCA0MC44LTUzIDUxLjItOTAgNDQuOSA2NC43IDExIDgxLjIgNDcuNSA0NS42IDg0LTY3LjUgNjkuMy05Ny0xNy40LTEwNC42LTM5LjZsLS4zLS45Yy0uOS0yLjYtMS40LTQuMS0xLjgtNC4xcy0uOSAxLjUtMS44IDQuMWMtLjEgLjMtLjIgLjYtLjMgLjktNy42IDIyLjItMzcuMSAxMDguOC0xMDQuNiAzOS42LTM1LjUtMzYuNS0xOS4xLTczIDQ1LjYtODQtMzcgNi4zLTc4LjYtNC4xLTkwLTQ0LjktMy4zLTExLjctOC45LTg0LTguOS05My44IDAtNDguOSA0Mi45LTMzLjUgNjkuMy0xMy43IDM2LjcgMjcuNSA3Ni4yIDgzLjQgOTAuNyAxMTMuM3oiXQogICAgfTsKICAgIGZhREFuZERCZXlvbmQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZC1hbmQtZC1iZXlvbmQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjZjYSIsICJNMzEzLjggMjQxLjVjMTMuOCAwIDIxLTEwLjEgMjQuOC0xNy45LTEtMS4xLTUtNC4yLTcuNC02LjYtMi40IDQuMy04LjIgMTAuNy0xMy45IDEwLjctMTAuMiAwLTE1LjQtMTQuNy0zLjItMjYuNi0uNS0uMi00LjMtMS44LTggMi40IDAtMyAxLTUuMSAyLjEtNi42LTMuNSAxLjMtOS44IDUuNi0xMS40IDcuOSAuMi01LjggMS42LTcuNSAuNi05bC0uMi0uMnMtOC41IDUuNi05LjMgMTQuN2MwIDAgMS4xLTEuNiAyLjEtMS45IC42LS4zIDEuMyAwIC42IDEuOS0uMiAuNi01LjggMTUuNyA1LjEgMjYtLjYtMS42LTEuOS03LjYgMi40LTEuOS0uMyAuMSA1LjggNy4xIDE1LjcgNy4xem01Mi40LTIxLjFjMC00LTQuOS00LjQtNS42LTQuNSAyIDMuOSAuOSA3LjUgLjIgOSAyLjUtLjQgNS40LTEuNiA1LjQtNC41em0xMC4zIDUuMmMwLTYuNC02LjItMTEuNC0xMy41LTEwLjcgOCAxLjMgNS42IDEzLjgtNSAxMS40IDMuNy0yLjYgMy4yLTkuOS0xLjMtMTIuNSAxLjQgNC4yLTMgOC4yLTcuNCA0LjYtMi40LTEuOS04LTYuNi0xMC42LTguNi0yLjQtMi4xLTUuNS0xLTYuNi0xLjgtMS4zLTEuMS0uNS0zLjgtMi4yLTUtMS42LS44LTMtLjMtNC44LTEtMS42LS42LTIuNy0xLjktMi42LTMuNS0yLjUgNC40IDMuNCA2LjMgNC41IDguNSAxIDEuOS0uOCA0LjggNCA4LjUgMTQuOCAxMS42IDkuMSA4IDEwLjQgMTguMSAuNiA0LjMgNC4yIDYuNyA2LjQgNy40LTIuMS0xLjktMi45LTYuNCAwLTkuMyAwIDEzLjkgMTkuMiAxMy4zIDIzLjEgNi40LTIuNCAxLjEtNy0uMi05LTEuOSA3LjcgMSAxNC4yLTQuMSAxNC42LTEwLjZ6bS0zOS40LTE4LjRjMiAuOCAxLjYgLjcgNi40IDQuNSAxMC4yLTI0LjUgMjEuNy0xNS43IDIyLTE1LjUgMi4yLTEuOSA5LjgtMy44IDEzLjgtMi43LTIuNC0yLjctNy41LTYuMi0xMy4zLTYuMi00LjcgMC03LjQgMi4yLTggMS4zLS44LTEuNCAzLjItMy40IDMuMi0zLjQtNS40IC4yLTkuNiA2LjctMTEuMiA1LjktMS4xLS41IDEuNC0zLjcgMS40LTMuNy01LjEgMi45LTkuMyA5LjEtMTAuMiAxMyA0LjYtNS44IDEzLjgtOS44IDE5LjctOS0xMC41IC41LTE5LjUgOS43LTIzLjggMTUuOHptMjQyLjUgNTEuOWMtMjAuNyAwLTQwIDEuMy01MC4zIDIuMWw3LjQgOC4yIDAgNzcuMi03LjQgOC4yYzEwLjQgLjggMzAuOSAyLjEgNTEuNiAyLjEgNDIuMSAwIDU5LjEtMjAuNyA1OS4xLTQ4LjkgMC0yOS4zLTIzLjItNDguOS02MC40LTQ4Ljl6bS0xNS4xIDc1LjZsMC01My4zYzMwLjEtMy4zIDQ2LjggMy44IDQ2LjggMjYuMyAwIDI1LjYtMjEuNCAzMC4yLTQ2LjggMjd6TTMwMS42IDE4MWMtMS0zLjQtLjItNi45IDEuMS05LjQgMSAzIDIuNiA2LjQgNy41IDktLjUtMi40LS4yLTUuNiAuNS04LTEuNC01LjQgMi4xLTkuOSA2LjQtOS45IDYuOSAwIDguNSA4LjggNC43IDE0LjQgMi4xIDMuMiA1LjUgNS42IDcuNyA3LjggMy4yLTMuNyA1LjUtOS41IDUuNS0xMy44IDAtOC4yLTUuNS0xNS45LTE2LjctMTYuNS0yMC0uOS0yMC4yIDE2LjYtMjAgMTguOSAuNSA1LjIgMy40IDcuOCAzLjMgNy41em0tLjQgNmMtLjUgMS44LTcgMy43LTEwLjIgNi45IDQuOC0xIDctLjIgNy44IDEuOCAuNSAxLjQtLjIgMy40LS41IDUuNiAxLjYtMS44IDctNS41IDExLTYuMi0xLS4zLTMuNC0uOC00LjMtLjggMi45LTMuNCA5LjMtNC41IDEyLjgtMy43LTIuMi0uMi02LjcgMS4xLTguNSAyLjYgMS42IC4zIDMgLjYgNC4zIDEuMS0yLjEgLjgtNC44IDMuNC01LjggNi4xIDctNSAxMy4xIDUuMiA3IDguMiAuOCAuMiAyLjcgMCAzLjUtLjUtLjMgMS4xLTEuOSAzLTMgMy40IDIuOSAwIDctMS45IDguMi00LjYgMCAwLTEuOCAuNi0yLjYtLjJzLjMtNC4zIC4zLTQuM2MtMi4zIDIuOS0zLjQtMS4zLTEuMy00LjItMS0uMy0zLjUtLjYtNC42LS41IDMuMi0xLjEgMTAuNC0xLjggMTEuMi0uMyAuNiAxLjEtMSAzLjQtMSAzLjQgNC0uNSA4LjMgMS4xIDYuNyA1LjEgMi45LTEuNCA1LjUtNS45IDQuOC0xMC40LS4zIDEtMS42IDIuNC0yLjkgMi43IC4yLTEuNC0xLTIuMi0xLjktMi42IDEuNy05LjYtMTQuNi0xNC4yLTE0LjEtMjMuOS0xIDEuMy0xLjggNS0uOCA3LjEgMi43IDMuMiA4LjcgNi43IDEwLjEgMTIuMi0yLjYtNi40LTE1LjEtMTEuNC0xNC42LTIwLjItMS42IDEuNi0yLjYgNy44LTEuMyAxMSAyLjQgMS40IDQuNSAzLjggNC44IDYuMS0yLjItNS4xLTExLjQtNi4xLTEzLjktMTIuMi0uNiAyLjItLjMgNSAxIDYuNyAwIDAtMi4yLS44LTctLjYgMS43IC42IDUuMSAzLjUgNC44IDUuMnptMjUuOSA3LjRjLTIuNyAwLTMuNS0yLjEtNC4yLTQuMyAzLjMgMS4zIDQuMiA0LjMgNC4yIDQuM3ptMzguOSAzLjdsLTEtLjZjLTEuMS0xLTIuOS0xLjQtNC43LTEuNC0yLjkgMC01LjggMS4zLTcuNSAzLjQtLjggLjgtMS40IDEuOC0yLjEgMi42bDAgMTUuN2MzLjUgMi42IDcuMS0yLjkgMy03LjIgMS41IC4zIDQuNiAyLjcgNS4xIDMuMiAwIDAgMi42LS41IDUtLjUgMi4xIDAgMy45IC4zIDUuNiAxLjFsMC0xOC40Yy0xLjEgLjUtMi4yIDEtMi43IDEuNGwtLjcgLjd6TTc5LjkgMzA1LjljMTcuMi00LjYgMTYuMi0xOCAxNi4yLTE5LjkgMC0yMC42LTI0LjEtMjUtMzctMjVsLTU2LjEgMCA4LjMgOC42IDAgMjkuNS0xMS4zIDAgMTEuNCAxNC42IDAgMzIuMy04LjQgOC42YzYxLjcgMCA3My44IDEuNSA4Ni40LTUuOSA2LjctNCA5LjktOS44IDkuOS0xNy42IDAtNS4xIDIuNi0xOC44LTE5LjQtMjUuMnpNMzguNiAyNzguNGMyMCAwIDI5LjYtLjggMjkuNiA5LjFsMCAzYzAgMTIuMS0xOSA4LjgtMjkuNiA4LjhsMC0yMC45em0wIDU5LjJsMC0yMi42YzEyLjIgMCAzMi43LTIuMyAzMi43IDguOGwwIDQuNSAuMiAwYzAgMTEuMi0xMi41IDkuMy0zMi45IDkuM3ptMTAxLjItMTkuM2wyMy4xIC4yIDAtLjIgMTQuMS0yMS4yLTM3LjIgMCAwLTE0LjkgNTIuNCAwLTE0LjEtMjEgMC0uMi03My41IC4yIDcuNCA4LjIgMCA3Ny4xLTcuNCA4LjIgODEuMiAwIDE0LjEtMjEuMi02MC4xIC4yIDAtMTUuNHptMjE0LjctNjAuMWMtNzMuOSAwLTc3LjUgOTkuMy0uMyA5OS4zIDc3LjkgMCA3NC4xLTk5LjMgLjMtOTkuM3ptLS4zIDc3LjVjLTM3LjQgMC0zNi45LTU1LjMgLjItNTUuMyAzNi44IC4xIDM4LjggNTUuMy0uMiA1NS4zem0tOTEuMy04LjNsNDQuMS02Ni4yLTQxLjcgMCA2LjEgNy4yLTIwLjUgMzcuMi0uMyAwLTIxLTM3LjIgNi40LTcuMi00NC45IDAgNDQuMSA2NS44IC4yIDE5LjQtNy43IDguMiA0Mi42IDAtNy4yLTguMi0uMi0xOXpNMjM0LjUgMTc2LjFjMS42IDEuMyAyLjkgMi40IDIuOSA2LjZsMCAzOC44YzAgNC4yLS44IDUuMy0yLjcgNi40LS4xIC4xLTcuNSA0LjUtNy45IDQuNmwzNS4xIDBjMTAgMCAxNy40LTEuNSAyNi04LjYtLjYtNSAuMi05LjUgLjgtMTIgMC0uMi0xLjggMS40LTIuNyAzLjUgMC01LjcgMS42LTE1LjQgOS42LTIwLjUtLjEgMC0zLjctLjgtOSAxLjEgMi0zLjEgMTAtNy45IDEwLjQtNy45LTguMi0yNi0zOC0yMi45LTMyLjItMjIuOS0zMC45IDAtMzIuNiAuMy0zOS45LTQgLjEgLjggLjUgOC4yIDkuNiAxNC45em0yMS41IDUuNWM0LjYgMCAyMy4xLTMuMyAyMy4xIDE3LjMgMCAyMC43LTE4LjQgMTcuMy0yMy4xIDE3LjNsMC0zNC42em0yMjguOSA3OS42bDcgOC4zIDAgNDIuNS0uMyAwYy01LjQtMTQuNC00Mi4zLTQxLjUtNDUuMi01MC45bC0zMS42IDAgNy40IDguNSAwIDc2LjktNy4yIDguMyAzOSAwLTcuNC04LjIgMC00Ny40IC4zIDBjMy43IDEwLjYgNDQuNSA0Mi45IDQ4LjUgNTUuNmwyMS4zIDAgMC04NS4yIDcuNC04LjMtMzkuMi0uMXpNMzc4LjIgMTY1LjFjLTMyLjIgMC0zMi44IC4yLTM5LjktNCAuMSAuNyAuNSA4LjMgOS42IDE0LjkgMy4xIDIgMi45IDQuMyAyLjkgOS41IDEuOC0xLjEgMy44LTIuMiA2LjEtMy0xLjEgMS4xLTIuNyAyLjctMy41IDQuNSAxLTEuMSA3LjUtNS4xIDE0LjYtMy41LTEuNiAuMy00IDEuMS02LjEgMi45IC4xIDAgMi4xLTEuMSA3LjUtLjNsMC00LjNjNC43IDAgMjMuMS0zLjQgMjMuMSAxNy4zIDAgMjAuNS0xOC41IDE3LjMtMTkuNyAxNy4zIDUuNyA0LjQgNS44IDEyIDIuMiAxNi4zbC4zIDBjMzMuNCAwIDM2LjctMjcuMyAzNi43LTM0IDAtMy44LTEuMS0zMi0zMy44LTMzLjZ6Il0KICAgIH07CiAgICBmYU1pY3Jvc29mdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb3NvZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjYSIsICJNMCAzMmwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42em0yMzMuNCAwbDIxNC42IDAgMCAyMTQuNi0yMTQuNiAwIDAtMjE0LjZ6TTAgMjY1LjRsMjE0LjYgMCAwIDIxNC42LTIxNC42IDAgMC0yMTQuNnptMjMzLjQgMGwyMTQuNiAwIDAgMjE0LjYtMjE0LjYgMCAwLTIxNC42eiJdCiAgICB9OwogICAgZmFGbHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmx5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MTciLCAiTTE2NS45IDQyNy44YzEyLjkgMTEuNyAzMy43IDMzLjMgMzMuMiA1MC43IDAgLjgtLjEgMS42LS4xIDIuNS0xLjggMTkuOC0xOC44IDMxLjEtMzkuMSAzMS0yNS0uMS0zOS45LTE2LjgtMzguNy0zNS44IDEtMTYuMiAyMC41LTM2LjcgMzIuNC00Ny42IDIuMy0yLjEgMi43LTIuNyA1LjYtMy42IDMuNCAwIDMuOSAuMyA2LjcgMi44ek0zMDAgNjcuM2MtMTYuMy0yNS43LTM4LjYtNDAuNi02My4zLTUyLjEtMjUuNS0xMC43LTU0LjYtMTUuNC03Ni42LTE1LjItNDQuMSAwLTcxLjIgMTMuMi04MS4xIDE3LjMtNTMuNiAyNy45LTg0LjQgNjkuOS04Mi45IDE0MS4zIDcuMSA4Mi4yIDk3IDE3NiAxNTUuOCAyMzMuOCAxLjcgMS42IDQuNSA0LjUgNi4yIDUuMWwzLjMgLjFjMi4xLS43IDEuOC0uNSAzLjUtMi4xIDUyLjMtNDkuMiAxNDAuNy0xNDUuOCAxNTUuOS0yMTUuNyA3LTM5LjIgMy4xLTcyLjUtMjAuOC0xMTIuNXpNMTU0LjkgMzUxLjljLTI4LTUxLjEtNjUuMi0xMzAuNy02OS4zLTE4OS0zLjQtNDcuNSAxMS40LTEzMS4yIDY5LjMtMTM2LjdsMCAzMjUuN3pNMjk2LjggMTgwYy0xNi40IDU2LjgtNzcuMyAxMjgtMTE4LjkgMTcwLjMgMjcuOC01MS45IDY1LjItMTMzLjMgNjcuMi0xOTEuOSAxLjYtNDUuOS05LjgtMTA1LjgtNDgtMTMxLjQgODguOCAxOC4zIDExNS41IDk4LjEgOTkuNyAxNTN6Il0KICAgIH07CiAgICBmYUNjU3RyaXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLXN0cmlwZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWY1IiwgIk00OTIuNCAyMjAuOGMtOC45IDAtMTguNyA2LjctMTguNyAyMi43bDM2LjcgMGMwLTE2LTkuMy0yMi43LTE4LTIyLjd6TTM3NSAyMjMuNGMtOC4yIDAtMTMuMyAyLjktMTcgN2wuMiA1Mi44YzMuNSAzLjcgOC41IDYuNyAxNi44IDYuNyAxMy4xIDAgMjEuOS0xNC4zIDIxLjktMzMuNCAwLTE4LjYtOS0zMy4yLTIxLjktMzMuMXpNNTI4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDh6TTEyMi4yIDI4MS4xYzAgMjUuNi0yMC4zIDQwLjEtNDkuOSA0MC4zLTEyLjIgMC0yNS42LTIuNC0zOC44LTguMWwwLTMzLjljMTIgNi40IDI3LjEgMTEuMyAzOC45IDExLjMgNy45IDAgMTMuNi0yLjEgMTMuNi04LjcgMC0xNy01NC0xMC42LTU0LTQ5LjkgMC0yNS4yIDE5LjItNDAuMiA0OC00MC4yIDExLjggMCAyMy41IDEuOCAzNS4zIDYuNWwwIDMzLjRjLTEwLjgtNS44LTI0LjUtOS4xLTM1LjMtOS4xLTcuNSAwLTEyLjEgMi4yLTEyLjEgNy43IDAgMTYgNTQuMyA4LjQgNTQuMyA1MC43ek0xOTEgMjI0LjVsLTI3IDAgMCA1MC41YzAgMjAuOSAyMi41IDE0LjQgMjcgMTIuNmwwIDI4LjljLTQuNyAyLjYtMTMuMyA0LjctMjQuOSA0LjctMjEuMSAwLTM2LjktMTUuNS0zNi45LTM2LjVsLjItMTEzLjkgMzQuNy03LjQgMCAzMC44IDI2LjkgMCAwIDMwLjN6bTc0IDIuNGMtNC41LTEuNS0xOC43LTMuNi0yNy4xIDcuNGwwIDg0LjQtMzUuNSAwIDAtMTI0LjUgMzAuNyAwIDIuMiAxMC41YzguMy0xNS4zIDI0LjktMTIuMiAyOS42LTEwLjVsLjEgMCAwIDMyLjd6bTQ0LjEgOTEuOGwtMzUuNyAwIDAtMTI0LjUgMzUuNyAwIDAgMTI0LjV6bTAtMTQyLjlsLTM1LjcgNy42IDAtMjguOSAzNS43LTcuNiAwIDI4Ljl6bTc0LjEgMTQ1LjVjLTEyLjQgMC0yMC01LjMtMjUuMS05bC0uMSA0MC4yLTM1LjUgNy41IDAtMTY1LjggMzEuMyAwIDEuOCA4LjhjNC45LTQuNSAxMy45LTExLjEgMjcuOC0xMS4xIDI0LjkgMCA0OC40IDIyLjUgNDguNCA2My44IDAgNDUuMS0yMy4yIDY1LjUtNDguNiA2NS42em0xNjAuNC01MS41bC02OS41IDBjMS42IDE2LjYgMTMuOCAyMS41IDI3LjYgMjEuNSAxNC4xIDAgMjUuMi0zIDM0LjktNy45bDAgMjguNmMtOS43IDUuMy0yMi40IDkuMi0zOS40IDkuMi0zNC42IDAtNTguOC0yMS43LTU4LjgtNjQuNSAwLTM2LjIgMjAuNS02NC45IDU0LjMtNjQuOSAzMy43IDAgNTEuMyAyOC43IDUxLjMgNjUuMSAwIDMuNS0uMyAxMC45LS40IDEyLjl6Il0KICAgIH07CiAgICBmYVdvcmRwcmVzc1NpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b3JkcHJlc3Mtc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MTEiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzMgMjU2YzAtMzIuMyA2LjktNjMgMTkuMy05MC43TDE1OC43IDQ1Ni43Qzg0LjMgNDIwLjUgMzMgMzQ0LjIgMzMgMjU2ek0yNTYgNDc5Yy0yMS45IDAtNDMtMy4yLTYzLTkuMWw2Ni45LTE5NC40IDY4LjUgMTg3LjhjLjUgMS4xIDEgMi4xIDEuNiAzLjEtMjMuMSA4LjEtNDggMTIuNi03NCAxMi42em0zMC43LTMyNy41YzEzLjQtLjcgMjUuNS0yLjEgMjUuNS0yLjEgMTItMS40IDEwLjYtMTkuMS0xLjQtMTguNCAwIDAtMzYuMSAyLjgtNTkuNCAyLjgtMjEuOSAwLTU4LjctMi44LTU4LjctMi44LTEyLS43LTEzLjQgMTcuNy0xLjQgMTguNCAwIDAgMTEuNCAxLjQgMjMuNCAyLjFsMzQuNyA5NS4yLTQ4LjggMTQ2LjMtODEuMi0yNDEuNWMxMy40LS43IDI1LjUtMi4xIDI1LjUtMi4xIDEyLTEuNCAxMC42LTE5LjEtMS40LTE4LjQgMCAwLTM2LjEgMi44LTU5LjQgMi44LTQuMiAwLTkuMS0uMS0xNC40LS4zIDM5LjktNjAuNSAxMDguNC0xMDAuNSAxODYuMy0xMDAuNSA1OCAwIDExMC45IDIyLjIgMTUwLjYgNTguNS0xLS4xLTEuOS0uMi0yLjktLjItMjEuOSAwLTM3LjQgMTkuMS0zNy40IDM5LjYgMCAxOC40IDEwLjYgMzMuOSAyMS45IDUyLjMgOC41IDE0LjggMTguNCAzMy45IDE4LjQgNjEuNSAwIDE5LjEtNy4zIDQxLjItMTcgNzIuMWwtMjIuMiA3NC4zLTgwLjctMjM5LjZ6bTgxLjQgMjk3LjJsNjguMS0xOTYuOWMxMi43LTMxLjggMTctNTcuMiAxNy03OS45IDAtOC4yLS41LTE1LjgtMS41LTIyLjkgMTcuNCAzMS44IDI3LjMgNjguMiAyNy4zIDEwNyAwIDgyLjMtNDQuNiAxNTQuMS0xMTAuOSAxOTIuN3oiXQogICAgfTsKICAgIGZhU2VsbHN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNlbGxzeSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjEzIiwgIk01NDAgMjM3LjNjMy4xLTEyLjMgNC4zLTI0LjggNC4zLTM3LjQgMC05Mi41LTc1LjQtMTY3LjktMTY3LjktMTY3LjktNzcuMiAwLTE0NC42IDUzLTE2MyAxMjcuOC0xNS4zLTEzLjItMzQuOS0yMC41LTU1LjItMjAuNS00Ni4zIDAtODQgMzcuNy04NCA4NCAwIDcuNCAuOSAxNSAzLjEgMjIuNC00Mi45IDIwLjItNzAuOCA2My43LTcwLjggMTExLjIgMCA2OCA1NS41IDEyMy4yIDEyMy4yIDEyMy4ybDM4MS4yIDBjNjcuNyAwIDEyMy4yLTU1LjIgMTIzLjItMTIzLjIgMC01Ni40LTM4LjktMTA2LTk0LjEtMTE5LjV6TTIwMC4yIDQwMS42YzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTExMC45YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMTAuOXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMwLjkgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTEzMS41YzAtOC4zIDctMTUuMyAxNS4zLTE1LjNsMzAuOSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjNsMCAxMzEuNXptODkuNSAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTMxIDBjLTguMyAwLTE1LjMtNy0xNS4zLTE1LjNsMC0xNjIuN2MwLTguMyA3LTE1LjMgMTUuMy0xNS4zbDMxIDBjOC4zIDAgMTUuMyA3IDE1LjMgMTUuM2wwIDE2Mi43em04NyAwYzAgOC4zLTcgMTUuMy0xNS4zIDE1LjNsLTI4LjUgMGMtOC4zIDAtMTUuMy03LTE1LjMtMTUuM2wwLTIyNC42YzAtOC42IDctMTUuNiAxNS4zLTE1LjZsMjguNSAwYzguMyAwIDE1LjMgNyAxNS4zIDE1LjZsMCAyMjQuNnoiXQogICAgfTsKICAgIGZhRGFzaGN1YmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGFzaGN1YmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxMCIsICJNMzI2LjkgMTA0bC0yMTYuMiAwYy01MS4xIDAtOTEuMiA0My4zLTkxLjIgOTMuNWwwIDIyOS41YzAgNTAuNSA0MC4xIDg1IDkxLjIgODVsMjI3LjIgMGM1MS4xIDAgOTEuMi0zNC41IDkxLjItODVsMC00MjctMTAyLjIgMTA0ek0xNTQuMiA0MTYuNWMtMTcuNyAwLTMyLjQtMTUuMS0zMi40LTMyLjhsMC0xNDIuOWMwLTE3LjcgMTQuNy0zMi41IDMyLjQtMzIuNWwxNDAuNyAwYzE3LjcgMCAzMiAxNC44IDMyIDMyLjVsMCAxMjMuNSA1MS4xIDUyLjMtMjIzLjggMCAwLS4xeiJdCiAgICB9OwogICAgZmFHaXR0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0dGVyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY0MjYiLCAiTTY2LjQgMzIyLjVsLTUwLjQgMCAwLTMyMi41IDUwLjQgMCAwIDMyMi41ek0xNjYuOSA3Ni4xbC01MC40IDAgMCA0MzUuOSA1MC40IDAgMC00MzUuOXptMTAwLjYgMGwtNTAuNCAwIDAgNDM1LjkgNTAuNCAwIDAtNDM1Ljl6TTM2OCA3NmwtNTAuNCAwIDAgMjQ3IDUwLjQgMCAwLTI0N3oiXQogICAgfTsKICAgIGZhV29sZlBhY2tCYXR0YWxpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29sZi1wYWNrLWJhdHRhbGlvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTE0IiwgIk0yMzYuMiA0NzEuNWwxMC42IDE1LjggNS4zLTEyLjMgNS4zIDcgMCAyOS45YzIxLjEtNy45IDIxLjEtNjYuOSAyNS41LTk3LjIgNC42LTMxLjktLjktOTIuOCA4MS40LTE0OS4xLTguOS0yMy42LTEyLTQ5LjQtMi42LTgwIDI3LjkgMy40IDUzLjkgMTAuNiA2My4zIDU0LjFsLTMwLjMgOC40YzExLjEgMjMgMTcgNDYuOCAxMy4yIDcyLjFsLTI3LjMtNy02LjIgMzMuNC0xOC41LTctOC44IDMzLjQtMTkuNC03IDI2LjQgMjEuMSA4LjgtMjguMiAyNC42IDUuMiA3LTM1LjYgMjYuNCAxNC41Yy4yLTIwIDctNTguMS04LjgtODQuNWwyNi40IDUuM2M0LTIyLjEtMi40LTM5LjItNy45LTU2LjdsMjIuNCA5LjdjLS40LTI1LjEtMjkuOS01Ni44LTYxLjYtNTguNS0yMC4yLTEuMS01Ni43LTI1LjItNTQuMS01MS45IDItMTkuOSAxNy40LTQyLjYgNDMuMS00OS43LTQ0IDM2LjUtOS43IDY3LjMgNS4zIDczLjUgNC40LTExLjQgMTcuNS02OS4xIDAtMTMwLjItNDAuNCAyMi45LTg5LjcgNjUuMS05My4yIDE0Ny44bC01OCAzOC43LTMuNSA5My4yIDEwNy4zLTU5LjggNyA3LTE3LjYgMy41LTQ0IDM4LjctMTUuOC01LjMtMjguMSA0OS4zLTMuNSAxMTkuNiAyMS4xIDE1LjgtMzIuNSAxNS44LTMyLjYtMTUuOCAyMS4xLTE1LjgtMy41LTExOS42LTI4LjItNDkuMy0xNS44IDUuMy00NC0zOC43LTE3LjYtMy41IDctNyAxMDcuMyA1OS44LTMuNS05My4zLTU4LjEtMzguN2MtMy41LTgyLjgtNTIuNy0xMjUtOTMuMi0xNDcuOS0xNy41IDYxLjEtNC40IDExOC44IDAgMTMwLjIgMTUtNi4yIDQ5LjMtMzcgNS4zLTczLjUgMjUuNyA3LjEgNDEuMSAyOS44IDQzLjEgNDkuNyAyLjYgMjYuNy0zMy45IDUwLjgtNTQuMSA1MS45LTMxLjcgMS43LTYxLjIgMzMuNC02MS42IDU4LjVsMjIuNC05LjdDMTMuNCAyMjQuNyA3IDI0MS44IDExIDI2My45bDI2LjQtNS4zYy0xNS44IDI2LjQtOS4xIDY0LjQtOC44IDg0LjRsMjYuNC0xNC41IDcgMzUuNiAyNC42LTUuMyA4LjggMjguMiAyNi40LTIxLjEtMTkuNCA3LTguOC0zMy40LTE4LjUgNy02LjItMzMuNC0yNy4zIDdDMzggMjk0LjggNDMuOCAyNzEgNTUgMjQ4bC0zMC4zLTguNGM5LjQtNDMuNSAzNS41LTUwLjggNjMuMy01NC4xIDkuNCAzMC42IDYuMiA1Ni41LTIuNiA4MC4xIDgyLjMgNTYuMyA3Ni44IDExNy4yIDgxLjQgMTQ5LjEgNC40IDMwLjMgNC40IDg5LjMgMjUuNSA5Ny4ybDAtMjkuOCA1LjMtNyA1LjMgMTIuMyAxMC42LTE1LjggMTEuNCAyMS4xIDExLjQtMjEuMSAwIDB6bTc5LjItOTVMMjk5LjUgMzY2YzcuNS00LjQgMTMuOC04LjQgMTkuNC0xMi4zLS42IDcuMi0uMyAxMy44LTMuNSAyMi44bDAgMHptMjguMi00OS4zYy0uNCAxMC45LS45IDIxLjctMS44IDMxLjctNy44LTEuOS0xNS42LTMuOC0yMS4xLTcgOC4yLTcuOSAxNS42LTE2LjMgMjIuOS0yNC43bDAgMHptMjQuNiA1LjNjMC0xMy40LTIuMS0yNC4yLTUuMy0zMy40LTUuNSA5LjUtMTEuNyAxOC42LTE4LjUgMjcuM2wyMy44IDYuMnptMy41LTgwLjljMTkuNCAxMi44IDI3LjggMzMuNyAyOS45IDU2LjMtMTIuMy00LjUtMjQuNi05LjMtMzctMTAuNiA1LjEtMTIgNi42LTI4LjEgNy00NS43bDAgMHptLTEuOC00NS43Yy44IDE0LjMgMS44IDI4LjggMS44IDQyLjIgMTkuMi04LjEgMjkuOC05LjcgNDQtMTQuMS0xMC42LTE5LTI3LjItMjUuNS00NS44LTI4LjJsMCAwek0xMzQuMiAzNzYuNUwxNTAgMzY2Yy03LjUtNC40LTEzLjgtOC40LTE5LjQtMTIuMyAuNiA3LjMgLjMgMTMuOSAzLjUgMjIuOWwwIDB6TTEwNiAzMjcuM2MuNCAxMC45IC45IDIxLjcgMS44IDMxLjcgNy44LTEuOSAxNS42LTMuOCAyMS4xLTctOC4yLTcuOS0xNS42LTE2LjMtMjIuOS0yNC43em0tMjQuNiA1LjNjMC0xMy40IDItMjQuMiA1LjMtMzMuNCA1LjUgOS41IDExLjcgMTguNiAxOC41IDI3LjNsLTIzLjggNi4yem0tMy41LTgwLjljLTE5LjQgMTIuOC0yNy44IDMzLjctMjkuOSA1Ni4zIDEyLjMtNC41IDI0LjYtOS4zIDM3LTEwLjYtNS0xMi02LjYtMjguMS03LTQ1LjdsLS4xIDB6bTEuOC00NS43Yy0uOCAxNC4zLTEuOCAyOC44LTEuOCA0Mi4yLTE5LjItOC4xLTI5LjgtOS43LTQ0LTE0LjEgMTAuNi0xOSAyNy4yLTI1LjUgNDUuOC0yOC4xeiJdCiAgICB9OwogICAgZmFMYXN0Zm0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGFzdGZtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMDIiLCAiTTIyNS44IDM2Ny4xbC0xOC44LTUxcy0zMC41IDM0LTc2LjIgMzRjLTQwLjUgMC02OS4yLTM1LjItNjkuMi05MS41IDAtNzIuMSAzNi40LTk3LjkgNzIuMS05Ny45IDY2LjUgMCA3NC44IDUzLjMgMTAwLjkgMTM0LjkgMTguOCA1Ni45IDU0IDEwMi42IDE1NS40IDEwMi42IDcyLjcgMCAxMjItMjIuMyAxMjItODAuOSAwLTcyLjktNjIuNy04MC42LTExNS05Mi4xLTI1LjgtNS45LTMzLjQtMTYuNC0zMy40LTM0IDAtMTkuOSAxNS44LTMxLjcgNDEuNi0zMS43IDI4LjIgMCA0My40IDEwLjYgNDUuNyAzNS44bDU4LjYtN2MtNC43LTUyLjgtNDEuMS03NC41LTEwMC45LTc0LjUtNTIuOCAwLTEwNC40IDE5LjktMTA0LjQgODMuOSAwIDM5LjkgMTkuNCA2NS4xIDY4IDc2LjggNDQuOSAxMC42IDc5LjggMTMuOCA3OS44IDQ1LjcgMCAyMS43LTIxLjEgMzAuNS02MSAzMC41LTU5LjIgMC04My45LTMxLjEtOTcuOS03My45LTMyLTk2LjgtNDMuNi0xNjMtMTYxLjMtMTYzLTg2LjEgMC0xMzEuOCA1NC41LTEzMS44IDE0Ny4yIDAgODkuMSA0NS43IDEzNy4yIDEyNy45IDEzNy4yIDY2LjIgMCA5Ny45LTMxLjEgOTcuOS0zMS4xeiJdCiAgICB9OwogICAgZmFTaG9wd2FyZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wd2FyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNWI1IiwgIk00MDMuNSA0NTUuNGMtNDIuNiAzMS43LTk0LjQgNDguNy0xNDcuNSA0OC42LTEzNy4yIDAtMjQ4LTExMS0yNDgtMjQ4IDAtMTM3LjIgMTExLTI0OCAyNDgtMjQ4IDYxLjItLjEgMTIwLjIgMjIuNiAxNjUuNyA2My41IC42IC41IC45IDEuMiAxLjEgMS45cy4xIDEuNS0uMyAyLjItLjggMS4zLTEuNSAxLjYtMS40IC41LTIuMiAuNGMtMTguOC0yLjUtMzcuNy0zLjctNTYuNy0zLjctMTI5LjQgMC0yMjIuNCA1My41LTIyMi40IDE1NS40IDAgMTA5IDkyLjEgMTQ1LjkgMTc2LjggMTc4LjcgMzMuNiAxMyA2NS40IDI1LjQgODcgNDEuNiAuNCAuMyAuOCAuOCAxLjEgMS4zcy40IDEgLjQgMS42LS4xIDEuMS0uNCAxLjYtLjYgLjktMS4xIDEuM2wtLjEgMHpNNTAzIDIzMy4xYy0uMS0uOS0uNS0xLjgtMS4zLTIuNC01MS44LTQzLTkzLjYtNjAuNS0xNDQuNS02MC41LTg0LjEgMC04MC4zIDUyLjItODAuMyA1My42IDAgNDIuNiA1Mi4xIDYyIDExMi4zIDg0LjUgMzEuMSAxMS42IDYzLjIgMjMuNiA5Mi43IDM5LjkgLjQgLjIgLjkgLjQgMS40IC40czEgMCAxLjUtLjIgLjktLjQgMS4zLS44IC42LS44IC44LTEuMmMxNC4xLTM2IDE5LjUtNzQuOCAxNi0xMTMuM3oiXQogICAgfTsKICAgIGZhQmxvZ2dlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJibG9nZ2VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzN2MiLCAiTTE2Mi40IDE5NmM0LjgtNC45IDYuMi01LjEgMzYuNC01LjEgMjcuMiAwIDI4LjEgLjEgMzIuMSAyLjEgNS44IDIuOSA4LjMgNyA4LjMgMTMuNiAwIDUuOS0yLjQgMTAtNy42IDEzLjQtMi44IDEuOC00LjUgMS45LTMxLjEgMi4xLTE2LjQgLjEtMjkuNS0uMi0zMS41LS44LTEwLjMtMi45LTE0LjEtMTcuNy02LjYtMjUuM3ptNjEuNCA5NC41Yy01My45IDAtNTUuOCAuMi02MC4yIDQuMS0zLjUgMy4xLTUuNyA5LjQtNS4xIDEzLjkgLjcgNC43IDQuOCAxMC4xIDkuMiAxMiAyLjIgMSAxNC4xIDEuNyA1Ni4zIDEuMmw0Ny45LS42IDkuMi0xLjVjOS01LjEgMTAuNS0xNy40IDMuMS0yNC40LTUuMy00LjctNS00LjctNjAuNC00Ljd6TTQ0Ny4yIDQyMC42Yy0zLjUgMjguNC0yMyA1MC40LTUxLjEgNTcuNS03LjIgMS44LTkuNyAxLjktMTcyLjkgMS44LTE1Ny44IDAtMTY1LjktLjEtMTcyLTEuOC04LjQtMi4yLTE1LjYtNS41LTIyLjMtMTAtNS42LTMuOC0xMy45LTExLjgtMTctMTYuNC0zLjgtNS42LTguMi0xNS4zLTEwLTIyUzAgNDIwLjMgMCAyNTYuM2MwLTE2My4xIDAtMTY2LjYgMS44LTE3My43IDYuMy0yNC43IDI1LjktNDMuNiA1MS4yLTQ5LjIgNy4zLTEuNiAzMzIuMS0xLjkgMzQwLS4zIDIxLjIgNC4zIDM3LjkgMTcuMSA0Ny42IDM2LjQgNy43IDE1LjMgNy0xLjUgNy4zIDE4MC42IC4yIDExNS44IDAgMTY0LjUtLjcgMTcwLjV6TTM2MS44IDIzNS40Yy0xLjEtNS00LjItOS42LTcuNy0xMS41LTEuMS0uNi04LTEuMy0xNS41LTEuNy0xMi40LS42LTEzLjgtLjgtMTcuOC0zLjEtNi4yLTMuNi03LjktNy42LTgtMTguMyAwLTIwLjQtOC41LTM5LjQtMjUuMy01Ni41LTEyLTEyLjItMjUuMy0yMC41LTQwLjYtMjUuMS0zLjYtMS4xLTExLjgtMS41LTM5LjItMS44LTQyLjktLjUtNTIuNSAuNC02Ny4xIDYuMi0yNyAxMC43LTQ2LjMgMzMuNC01My40IDYyLjQtMS4zIDUuNC0xLjYgMTQuMi0xLjkgNjQuMy0uNCA2Mi44IDAgNzIuMSA0IDg0LjUgOS43IDMwLjcgMzcuMSA1My40IDY0LjYgNTguNCA5LjIgMS43IDEyMi4yIDIuMSAxMzMuNyAuNSAyMC4xLTIuNyAzNS45LTEwLjggNTAuNy0yNS45IDEwLjctMTAuOSAxNy40LTIyLjggMjEuOC0zOC41IDMuMi0xMC45IDIuOS04OC40IDEuNy05My45eiJdCiAgICB9OwogICAgZmFFZGdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVkZ2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4MiIsICJNMTIwLjEgMzcuNGM0MS0yNS4yIDg3LjYtMzguMiAxMzQuOS0zNy40IDE2OCAwIDI1NyAxMjMuOCAyNTcgMjE5LjUtLjEgMzIuNy0xMyA2My45LTM1LjkgODcuMi0yMi45IDIzLjItNTQgMzYuNS04Ni43IDM3LTc1LjIgMC05MS41LTIzLjEtOTEuNS0zMiAwLTMuOCAxLjItNi4yIDQuOC05LjRsMS0xLjIgLjQtMS42YzEwLjUtMTEuNSAxNS45LTI2LjIgMTUuOS00MS42IDAtNzguNy04Mi4yLTE0Mi43LTE4NC0xNDIuNy0zNy41LS4zLTc0LjUgOC45LTEwNy41IDI2LjkgMjctNTcuNSA4Mi43LTk3LjYgOTEuMy0xMDMuOCAuOC0uNiAuMy0uOCAuMy0uOHptMTUuNiAzMTguMWMtMS40IDMwIDQuNiA2MCAxNi40IDg3LjIgMTMuNiAyNi40IDMyLjcgNTEgNTYuNSA2OS4zLTU5LjUtMTEuNS0xMTEuNS00My45LTE0OS40LTg5LjMtMzguMS00Ni40LTU5LjItMTA0LjMtNTkuMi0xNjQuOCAwLTUxLjIgNjIuNC05NC40IDEzNi05NC40IDM2LjYtLjYgNzIuNCAxMC45IDEwMS44IDMyLjdsLTMuNiAxLjJjLTUxLjUgMTcuNi05OC41IDkwLjctOTguNSAxNTguMXpNNDY5LjggNDAwbC0uNyAuMWMtMTEuOCAxOC44LTI1LjkgMzUuMS00Mi4yIDQ5LjUtMzAuOCAyOC02OC4xIDQ1LjUtMTA4LjggNDkuOS0xOC42IC4zLTM2LjgtMy4yLTUzLjgtMTEuNC0yNS42LTEwLjMtNDcuMS0zMC02MS42LTUzLTE0LjQtMjMuOS0yMS4xLTUxLjctMTktNzkuNi0uNi0yMC4xIDUuNC00MC4zIDE1LTU4LjIgMTMuOSAzMy4xIDM3LjUgNjEuMyA2Ny42IDgwLjhzNjUuNSAyOS41IDEwMS40IDI4LjZjMzEgLjMgNjIuMS02LjcgOTAuMi0yMC41bDEuOS0uOWMzLjktMi4zIDcuNy0zLjkgMTEuNiAwIDQuNSA0LjkgMS44IDkuMi0xLjIgMTQtLjIgLjItLjMgLjUtLjQgLjd6Il0KICAgIH07CiAgICBmYUlveGhvc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW94aG9zdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjA4IiwgIk02MTYgMTYwbC02Ny4zIDBDNTExLjIgNzAuNyA0MjIuOSA4IDMyMCA4IDE4MyA4IDcyIDExOSA3MiAyNTYgNzIgMjcyLjQgNzMuNiAyODguNSA3Ni43IDMwNEwyNCAzMDRjLTEzLjMgMC0yNCAxMC44LTI0IDI0IDAgMTMuMyAxMC43IDI0IDI0IDI0bDY3LjMgMGMzNy41IDg5LjMgMTI1LjggMTUyIDIyOC43IDE1MiAxMzcgMCAyNDgtMTExIDI0OC0yNDggMC0xNi40LTEuNi0zMi41LTQuNy00OGw1Mi43IDBjMTMuMyAwIDI0LTEwLjggMjQtMjQgMC0xMy4zLTEwLjctMjQtMjQtMjR6bS05NiA5NmMwIDExMC41LTg5LjUgMjAwLTIwMCAyMDAtNzUuNyAwLTE0MS42LTQyLTE3NS41LTEwNEw0MjQgMzUyYzEzLjMgMCAyNC0xMC44IDI0LTI0IDAtMTMuMy0xMC43LTI0LTI0LTI0bC0yOTguMiAwYy0zLjgtMTUuNC01LjgtMzEuNC01LjgtNDggMC0xMTAuNSA4OS41LTIwMCAyMDAtMjAwIDc1LjcgMCAxNDEuNiA0MiAxNzUuNSAxMDRMMjE2IDE2MGMtMTMuMyAwLTI0IDEwLjgtMjQgMjQgMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjk4LjIgMGMzLjggMTUuNCA1LjggMzEuNCA1LjggNDh6TTIxNiAyMzJsMjA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjQgMCAxMy4yLTEwLjcgMjQtMjQgMjRsLTIwOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEzLjIgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU2NobGl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNjaGxpeCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2VhIiwgIk0zNTAuNSAxNTcuN2wtNTQuMi00Ni4xIDczLjQtMzkgNzguMyA0NC4yLTk3LjUgNDAuOXpNMTkyIDEyMi4xbDQ1LjctMjguMiAzNC43IDM0LjYtNTUuNCAyOS0yNS0zNS40em0tNjUuMSA2LjZsMzEuOS0yMi4xIDE3LjIgMjguNC0zNi43IDIyLjUtMTIuNC0yOC44em0tMjMuMyA4OC4ybC04LjgtMzQuOCAyOS42LTE4LjMgMTMuMSAzNS4zLTMzLjkgMTcuOHpNODIuNCAxMzMuMmwyMy45LTE4LjEgOC45IDI0LTI2LjcgMTguMy02LjEtMjQuMnpNNTkgMjA2LjVsLTMuNi0yOC40IDIyLjMtMTUuNSA2LjEgMjguNy0yNC44IDE1LjJ6TTI4LjQgMjIzLjFsMjAuOC0xMi44IDMuMyAzMy40LTIyLjkgMTItMS4yLTMyLjZ6TTEuNCAyNjhMMjAuNiAyNTcuOCAyMSAyOTYgMCAzMDQuOCAxLjQgMjY4em01OS4xIDU5LjNsLTI4LjMgOC4zLTEuNi00Ni44IDI1LjEtMTAuNyA0LjggNDkuMnpNOTkgMjYzLjJsLTMxLjEgMTMtNS4yLTQwLjggMjcuNC0xNC40IDguOSA0Mi4yek0xMjMuMiAzNzdsLTQxLjYgNS45LTguMS02My41IDM1LjItMTAuOCAxNC41IDY4LjR6bTI4LjUtMTM5LjlsMjEuMiA1Ny4xLTQ2LjIgMTMuNi0xMy43LTU0LjEgMzguNy0xNi42em04NS43IDIzMC41bC03MC45LTMuMy0yNC4zLTk1LjggNTUuMi04LjYgNDAgMTA3Ljd6TTE1Mi41IDE4Ny45bDQyLjItMjIuNCAyOCA0NS45LTUwLjggMjEuMy0xOS40LTQ0Ljh6bTQxIDk0LjlsNjEuMy0xOC43IDUyLjggODYuNi03OS44IDExLjMtMzQuMy03OS4yem01MS40LTg1LjZsNjcuMy0yOC44IDY1LjUgNjUuNC04OC42IDI2LjItNDQuMi02Mi44eiJdCiAgICB9OwogICAgZmFEQW5kRCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkLWFuZC1kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzOGQiLCAiTTgyLjkgOTguOWMtLjYtMTcuMiAyLTMzLjggMTIuNy00OC4yIC4zIDcuNCAxLjIgMTQuNSA0LjIgMjEuNiA1LjktMjcuNSAxOS43LTQ5LjMgNDIuMy02NS41LTEuOSA1LjktMy41IDExLjgtMyAxNy43IDguNy03LjQgMTguOC0xNy44IDQ0LjQtMjIuNyAxNC43LTIuOCAyOS43LTIgNDIuMSAxIDM4LjUgOS4zIDYxIDM0LjMgNjkuNyA3Mi4zIDUuMyAyMy4xIC43IDQ1LTguMyA2Ni40LTUuMiAxMi40LTEyIDI0LjQtMjAuNyAzNS4xLTItMS45LTMuOS0zLjgtNS44LTUuNi00Mi44LTQwLjgtMjYuOC0yNS4yLTM3LjQtMzcuNC0xLjEtMS4yLTEtMi4yLS4xLTMuNiA4LjMtMTMuNSAxMS44LTI4LjIgMTAtNDQtMS4xLTkuOC00LjMtMTguOS0xMS4zLTI2LjItMTQuNS0xNS4zLTM5LjItMTUtNTMuNSAuNi0xMS40IDEyLjUtMTQuMSAyNy40LTEwLjkgNDMuNiAuMiAxLjMgLjQgMi43IDAgMy45LTMuNCAxMy43LTQuNiAyNy42LTIuNSA0MS42IC4xIC41IC4xIDEuMSAuMSAxLjYgMCAuMy0uMSAuNS0uMiAxLjEtMjEuOC0xMS0zNi0yOC4zLTQzLjItNTIuMi04LjMgMTcuOC0xMS4xIDM1LjUtNi42IDU0LjEtMTUuNi0xNS4yLTIxLjMtMzQuMy0yMi01NS4yek01NTIuNSAyMjIuMWMtMTEuNi0xMS42LTI1LTIwLjQtNDAuMS0yNi42LTEyLjgtNS4yLTI2LTcuOS0zOS45LTcuMS0xMCAuNi0xOS42IDMuMS0yOSA2LjQtMi41IC45LTUuMSAxLjYtNy43IDIuMi00LjkgMS4yLTcuMy0zLjEtNC43LTYuOCAzLjItNC42IDMuNC00LjIgMTUtMTIgLjYtLjQgMS4yLS44IDIuMi0xLjVsLTIuNSAwYy0uNiAwLTEuMiAuMi0xLjkgLjMtMTkuMyAzLjMtMzAuNyAxNS41LTQ4LjkgMjkuNi0xMC40IDguMS0xMy44IDMuOC0xMi0uNSAxLjQtMy41IDMuMy02LjcgNS4xLTEwIDEtMS44IDIuMy0zLjQgMy41LTUuMS0uMi0uMi0uNS0uMy0uNy0uNS0yNyAxOC4zLTQ2LjcgNDIuNC01Ny43IDczLjMgLjMgLjMgLjcgLjYgMSAuOSAuMy0uNiAuNS0xLjIgLjktMS43IDEwLjQtMTIuMSAyMi44LTIxLjggMzYuNi0yOS44IDE4LjItMTAuNiAzNy41LTE4LjMgNTguNy0yMC4yIDQuMy0uNCA4LjctLjEgMTMuMS0uMS0xLjggLjctMy41IC45LTUuMyAxLjEtMTguNSAyLjQtMzUuNSA5LTUxLjUgMTguNS0zMC4yIDE3LjktNTQuNSA0Mi4yLTc1LjEgNzAuNC0uMyAuNC0uNCAuOS0uNyAxLjMgMTQuNSA1LjMgMjQgMTcuMyAzNi4xIDI1LjYgLjItLjEgLjMtLjIgLjQtLjRsMS4yLTIuN2MxMi4yLTI2LjkgMjctNTIuMyA0Ni43LTc0LjUgMTYuNy0xOC44IDM4LTI1LjMgNjIuNS0yMCA1LjkgMS4zIDExLjQgNC40IDE3LjIgNi44IDIuMy0xLjQgNS4xLTMuMiA4LTQuNyA4LjQtNC4zIDE3LjQtNyAyNi43LTkgMTQuNy0zLjEgMjkuNS00LjkgNDQuNS0xLjNsMC0uNWMtLjUtLjQtMS4yLS44LTEuNy0xLjR6TTMxNy4xIDM5Ny42Yy0zOS40LTMzLTIyLjgtMTkuNS00Mi43LTM1LjYtLjggLjkgMC0uMi0xLjkgMy0xMS4yIDE5LjEtMjUuNSAzNS4zLTQ0IDQ3LjYtMTAuMyA2LjgtMjEuNSAxMS44LTM0LjEgMTEuOC0yMS42IDAtMzguMi05LjUtNDkuNC0yNy44LTEyLTE5LjUtMTMuMy00MC43LTguMi02Mi42IDcuOC0zMy44IDMwLjEtNTUuMiAzOC42LTY0LjMtMTguNy02LjItMzMgMS43LTQ2LjQgMTMuOSAuOC0xMy45IDQuMy0yNi4yIDExLjgtMzcuMy0yNC4zIDEwLjYtNDUuOSAyNS02NC44IDQzLjktLjMtNS44IDUuNC00My43IDUuNi00NC43IC4zLTIuNy0uNi01LjMtMy03LjQtMjQuMiAyNC43LTQ0LjUgNTEuOC01Ni4xIDg0LjYgNy40LTUuOSAxNC45LTExLjQgMjMuNi0xNi4yLTguMyAyMi4zLTE5LjYgNTIuOC03LjggMTAxLjEgNC42IDE5IDExLjkgMzYuOCAyNC4xIDUyLjMgMi45IDMuNyA2LjMgNi45IDkuNSAxMC4zIC4yLS4yIC40LS4zIC42LS41LTEuNC03LTIuMi0xNC4xLTEuNS0yMS45IDIuMiAzLjIgMy45IDYgNS45IDguNiAxMi42IDE2IDI4LjcgMjcuNCA0Ny4yIDM1LjYgMjUgMTEuMyA1MS4xIDEzLjMgNzcuOSA4LjYgNTQuOS05LjcgOTAuNy00OC42IDExNi05OC44IDEtMS44IC42LTIuOS0uOS00LjJ6bTE3Mi00Ni40Yy05LjUtMy4xLTIyLjItNC4yLTI4LjctMi45IDkuOSA0IDE0LjEgNi42IDE4LjggMTIgMTIuNiAxNC40IDEwLjQgMzQuNy01LjQgNDUuNi0xMS43IDguMS0yNC45IDEwLjUtMzguOSA5LjEtMS4yLS4xLTIuMy0uNC0zLS42IDIuOC0zLjcgNi03IDguMS0xMC44IDkuNC0xNi44IDUuNC00Mi4xLTguNy01Ni4xLTIuMS0yLjEtNC42LTMuOS03LTUuOS0uMyAxLjMtLjEgMi4xIC4xIDIuOCA0LjIgMTYuNi04LjEgMzIuNC0yNC44IDMxLjgtNy42LS4zLTEzLjktMy44LTE5LjYtOC41LTE5LjUtMTYuMS0zOS4xLTMyLjEtNTguNS00OC4zLTUuOS00LjktMTIuNS04LjEtMjAuMS04LjctNC42LS40LTkuMy0uNi0xMy45LS45LTUuOS0uNC04LjgtMi44LTEwLjQtOC40LS45LTMuNC0xLjUtNi44LTIuMi0xMC4yLTEuNS04LjEtNi4yLTEzLTE0LjMtMTQuMi00LjQtLjctOC45LTEtMTMuMy0xLjUtMTMtMS40LTE5LjgtNy40LTIyLjYtMjAuMy01IDExLTEuNiAyMi40IDcuMyAyOS45IDQuNSAzLjggOS4zIDcuMyAxMy44IDExLjIgNC42IDMuOCA3LjQgOC43IDcuOSAxNC44IC40IDQuNyAuOCA5LjUgMS44IDE0LjEgMi4yIDEwLjYgOC45IDE4LjQgMTcgMjUuMSAxNi41IDEzLjcgMzMgMjcuMyA0OS41IDQxLjEgMTcuOSAxNSAxMy45IDMyLjggMTMgNTYtLjkgMjIuOSAxMi4yIDQyLjkgMzMuNSA1MS4yIDEgLjQgMiAuNiAzLjYgMS4xLTE1LjctMTguMi0xMC4xLTQ0LjEgLjctNTIuMyAuMyAyLjIgLjQgNC4zIC45IDYuNCA5LjQgNDQuMSA0NS40IDY0LjIgODUgNTYuOSAxNi0yLjkgMzAuNi04LjkgNDIuOS0xOS44IDItMS44IDMuNy00LjEgNS45LTYuNS0xOS4zIDQuNi0zNS44IC4xLTUwLjktMTAuNiAuNy0uMyAxLjMtLjMgMS45LS4zIDIxLjMgMS44IDQwLjYtMy40IDU3LTE3LjQgMTkuNS0xNi42IDI2LjYtNDIuOSAxNy40LTY2LTguMy0yMC4xLTIzLjYtMzIuMy00My44LTM4Ljl6TTk5LjggMTc5LjNjLTUuMy05LjItMTMuMi0xNS42LTIyLjEtMjEuMyAxMy43LS41IDI2LjYgLjIgMzkuNiAzLjctNy0xMi4yLTguNS0yNC43LTUtMzguNyA1LjMgMTEuOSAxMy43IDIwLjEgMjMuNiAyNi44IDE5LjcgMTMuMiAzNS43IDE5LjYgNDYuNyAzMC4yIDMuNCAzLjMgNi4zIDcuMSA5LjYgMTAuOS0uOC0yLjEtMS40LTQuMS0yLjItNi01LTEwLjYtMTMtMTguNi0yMi42LTI1LTEuOC0xLjItMi44LTIuNS0zLjQtNC41LTMuMy0xMi41LTMtMjUuMS0uNy0zNy42IDEtNS41IDIuOC0xMC45IDQuNS0xNi4zIC44LTIuNCAyLjMtNC42IDQtNi42IC42IDYuOSAwIDI1LjUgMTkuNiA0NiAxMC44IDExLjMgMjIuNCAyMS45IDMzLjkgMzIuNyA5IDguNSAxOC4zIDE2LjcgMjUuNSAyNi44IDEuMSAxLjYgMi4yIDMuMyAzLjggNC43LTUtMTMtMTQuMi0yNC4xLTI0LjItMzMuOC05LjYtOS4zLTE5LjQtMTguNC0yOS4yLTI3LjQtMy4zLTMtNC42LTYuNy01LjEtMTAuOS0xLjItMTAuNCAwLTIwLjYgNC4zLTMwLjIgLjUtMSAxLjEtMiAxLjktMy4zIC41IDQuMiAuNiA3LjkgMS40IDExLjYgNC44IDIzLjEgMjAuNCAzNi4zIDQ5LjMgNjMuNSAxMCA5LjQgMTkuMyAxOS4yIDI1LjYgMzEuNiA0LjggOS4zIDcuMyAxOSA1LjcgMjkuNi0uMSAuNiAuNSAxLjcgMS4xIDIgNi4yIDIuNiAxMCA2LjkgOS43IDE0LjMgNy43LTIuNiAxMi41LTggMTYuNC0xNC41IDQuMiAyMC4yLTkuMSA1MC4zLTI3LjIgNTguNyAuNC00LjUgNS0yMy40LTE2LjUtMjcuNy02LjgtMS4zLTEyLjgtMS4zLTIyLjktMi4xIDQuNy05IDEwLjQtMjAuNiAuNS0yMi40LTI0LjktNC42LTUyLjggMS45LTU3LjggNC42IDguMiAuNCAxNi4zIDEgMjMuNSAzLjMtMiA2LjUtNCAxMi43LTUuOCAxOC45LTEuOSA2LjUgMi4xIDE0LjYgOS4zIDkuNiAxLjItLjkgMi4zLTEuOSAzLjMtMi43LTMuMSAxNy45LTIuOSAxNS45LTIuOCAxOC4zIC4zIDEwLjIgOS41IDcuOCAxNS43IDcuMy0yLjUgMTEuOC0yOS41IDI3LjMtNDUuNCAyNS44IDctNC43IDEyLjctMTAuMyAxNS45LTE3LjktNi41IC44LTEyLjkgMS42LTE5LjIgMi40bC0uMy0uOWM0LjctMy40IDgtNy44IDEwLjItMTMuMSA4LjctMjEuMS0zLjYtMzgtMjUtMzkuOS05LjEtLjgtMTcuOCAuOC0yNS45IDUuNSA2LjItMTUuNiAxNy4yLTI2LjYgMzIuNi0zNC41LTE1LjItNC4zLTguOS0yLjctMjQuNi02LjMgMTQuNi05LjMgMzAuMi0xMy4yIDQ2LjUtMTQuNi01LjItMy4yLTQ4LjEtMy42LTcwLjIgMjAuOSA3LjkgMS40IDE1LjUgMi44IDIzLjIgNC4yLTIzLjggNy00NCAxOS43LTYyLjQgMzUuNiAxLjEtNC44IDIuNy05LjUgMy4zLTE0LjMgLjYtNC41IC44LTkuMiAuMS0xMy42LTEuNS05LjQtOC45LTE1LjEtMTkuNy0xNi4zLTcuOS0uOS0xNS42IC4xLTIzLjMgMS4zLS45IC4xLTEuNyAuMy0yLjkgMCAxNS44LTE0LjggMzYtMjEuNyA1My4xLTMzLjUgNi00LjUgNi44LTguMiAzLTE0Ljl6bTEyOC40IDI2LjhjMy4zIDE2IDEyLjYgMjUuNSAyMy44IDI0LjMtNC42LTExLjMtMTIuMS0xOS41LTIzLjgtMjQuM3oiXQogICAgfTsKICAgIGZhVnVlanMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidnVlanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQxZiIsICJNMzU2LjkgNjQuM2wtNzYuOSAwLTU2IDg4LjYtNDgtODguNi0xNzYgMCAyMjQgMzgzLjcgMjI0LTM4My43LTkxLjEgMHpNNTUuNyA5Ni4zbDUzLjggMCAxMTQuNSAxOTguMiAxMTQuNC0xOTguMiA1My44IDAtMTY4LjIgMjg4LjItMTY4LjMtMjg4LjJ6Il0KICAgIH07CiAgICBmYU1ldGEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWV0YSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNDliIiwgIk02NDAgMzE3LjljMCA5MS4zLTM5LjQgMTQ4LjUtMTEwLjMgMTQ4LjUtNjIuNiAwLTk1LjgtMzQuNi0xNTYuOS0xMzYuNmwtMzEuNC01Mi42Yy04LjMtMTIuNS0xNC41LTI0LjItMjEuMi0zNS0yMC4xIDMzLjgtNDcuMSA4My00Ny4xIDgzLTY3IDExNi42LTEwNC42IDE0MS4yLTE1Ni45IDE0MS4yLTcyLjggMC0xMTYuMi01Ny4zLTExNi4yLTE0NS45IDAtMTQzIDc5LjgtMjc4LjEgMTgzLjktMjc4LjEgNTAuMiAwIDkzLjggMjQuNyAxNDQuOCA4OS41IDM3LjEtNTAuMSA3OC4xLTg5LjUgMTMwLjYtODkuNSA5OS4xIDAgMTgwLjcgMTI1LjcgMTgwLjcgMjc1LjV6TTI4Ny40IDE5Mi4yYy00Mi45LTYyLjEtNzAuOS04MC41LTEwNC40LTgwLjUtNjEuOSAwLTExMy44IDEwNi4xLTExMy44IDIxMCAwIDQ4LjUgMTguNSA3NS43IDQ5LjYgNzUuNyAzMC4yIDAgNDktMTkgMTAzLjItMTAzLjggMCAwIDI0LjctMzkuMSA2NS40LTEwMS40ek01MzEuMiAzOTcuNGMzMi4yIDAgNDYuOS0yNy41IDQ2LjktNzQuOSAwLTEyNC4yLTU0LjMtMjI1LjQtMTIzLjItMjI1LjQtMzMuMiAwLTYxLjEgMjUuOS05NC45IDc4IDkuNCAxMy44IDE5LjEgMjkgMjkuMyA0NS40bDM3LjUgNjIuNGM1OC43IDk0LjEgNzMuNSAxMTQuNSAxMDQuNCAxMTQuNXoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGYyIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6bTEwMSAxMzIuNGM3LjggMCAxMy43IDYuMSAxMy43IDEzLjdsMCAxODIuNWMwIDcuNy02LjEgMTMuNy0xMy43IDEzLjdsLTEzNS4xIDBjLTcuNyAwLTEzLjctNi0xMy43LTEzLjdsMC01NC01NCAwYy03LjggMC0xMy43LTYtMTMuNy0xMy43bDAtMTgyLjVjMC04LjIgNi42LTEyLjcgMTIuNC0xMy43bDEzNi40IDBjNy43IDAgMTMuNyA2IDEzLjcgMTMuN2wwIDU0IDU0IDB6TTE2Ny45IDMwMC4zbDQwLjcgMCAwLTEwMS40YzAtNy40IDUuOC0xMi42IDEyLTEzLjdsNTUuOCAwIDAtNDAuMy0xMDguNSAwIDAgMTU1LjR6bTE3Ni4yLTg4LjFsLTEwOC41IDAgMCAxNTUuNCAxMDguNSAwIDAtMTU1LjR6Il0KICAgIH07CiAgICBmYVN0dWRpb3ZpbmFyaSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdHVkaW92aW5hcmkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNmOCIsICJNNDgwLjcgMTg3LjdsNC4yIDI4IDAgMjgtMjUuMSA0NC4xLTM5LjggNzguNC01Ni4xIDY3LjUtNzkuMSAzNy44LTE3LjcgMjQuNS03LjcgMTItOS42IDRzMTcuMy02My42IDE5LjQtNjMuNiAyMC4zIC43IDIwLjMgLjdsNjYuNy0zOC42LTkyLjUgMjYuMS01NS45IDM2LjgtMjIuOCAyOC02LjYgMS40IDIwLjgtNzMuNiA2LjktNS41IDIwLjcgMTIuOSA4OC4zLTQ1LjIgNTYuOC01MS41IDE0LjgtNjguNC0xMjUuNCAyMy4zIDE1LjItMTguMi0xNzMuNC01My4zIDgxLjktMTAuNS0xNjYtMTIyLjkgMTE0LjkgMTguMS0xMDEuMy0xMDggMjUyLjkgMTI2LjYtMzEuNS0zOCAxMjQuNCA3NC40LTE0My4zLTk5IDE4LjcgMzguNC00OS42LTE4LjEtNDUuNS04NC4zIDE5NC42IDEyMi00Mi45LTU1LjggMTA4IDk2LjQgMTItOC45LTIxLTE2LjQgNC4yLTM3LjggMzcuOC0xMC40IDI5LjIgMjQuNyAxMS41IDQuMi03IDYuMiA4LjUgMTItMTMuMSA3LjQtMTAuMyAyMC4yIDEwLjUgMjMuOXoiXQogICAgfTsKICAgIGZhQml0YnVja2V0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpdGJ1Y2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODEwXSwgImYxNzEiLCAiTTIyLjIgMzJjLTIuMSAwLTQuMiAuNC02LjEgMS4xcy0zLjcgMS45LTUuMiAzLjQtMi43IDMuMi0zLjUgNS4xLTEuMyA0LTEuMyA2LjFjMCAuOSAuMSAxLjkgLjIgMi44TDc0LjEgNDYyLjdjLjggNS4xIDMuNCA5LjcgNy4zIDEzczguOCA1LjIgMTQgNS4ybDMyNS43IDBjMy44IC4xIDcuNS0xLjMgMTAuNS0zLjdzNC45LTUuOSA1LjUtOS43TDUwNSA1MC43Yy43LTQuMi0uMy04LjQtMi44LTExLjlzLTYuMi01LjctMTAuNC02LjRjLS45LS4xLTEuOS0uMi0yLjgtLjJMMjIuMiAzMnpNMzA4LjEgMzI5LjhsLTEwNCAwLTI4LjEtMTQ3IDE1Ny4zIDAtMjUuMiAxNDd6Il0KICAgIH07CiAgICBmYVZrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxODkiLCAiTTMxLjUgNjMuNUMwIDk1IDAgMTQ1LjcgMCAyNDdMMCAyNjVDMCAzNjYuMyAwIDQxNyAzMS41IDQ0OC41UzExMy43IDQ4MCAyMTUgNDgwbDE3LjkgMGMxMDEuNCAwIDE1Mi4xIDAgMTgzLjUtMzEuNVM0NDggMzY2LjMgNDQ4IDI2NWwwLTE3LjljMC0xMDEuNCAwLTE1Mi4xLTMxLjUtMTgzLjVTMzM0LjMgMzIgMjMzIDMyTDIxNSAzMkMxMTMuNyAzMiA2MyAzMiAzMS41IDYzLjV6TTc1LjYgMTY4LjNsNTEuMSAwYzEuNyA4NS41IDM5LjQgMTIxLjcgNjkuMyAxMjkuMmwwLTEyOS4yIDQ4LjIgMCAwIDczLjdjMjkuNS0zLjIgNjAuNS0zNi44IDcwLjktNzMuN2w0OC4yIDBjLTMuOSAxOS4yLTExLjggMzcuMy0yMy4xIDUzLjNzLTI1LjcgMjkuNS00Mi41IDM5LjZjMTguNyA5LjMgMzUuMiAyMi40IDQ4LjQgMzguNXMyMi45IDM0LjkgMjguMyA1NWwtNTMgMGMtNC45LTE3LjUtMTQuOC0zMy4xLTI4LjYtNDVzLTMwLjctMTkuNC00OC43LTIxLjZsMCA2Ni42LTUuOCAwYy0xMDIuMSAwLTE2MC4zLTcwLTE2Mi44LTE4Ni41eiJdCiAgICB9OwogICAgZmFHaXRodWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0aHViIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwOWIiLCAiTTE3My45IDM5Ny40YzAgMi0yLjMgMy42LTUuMiAzLjYtMy4zIC4zLTUuNi0xLjMtNS42LTMuNiAwLTIgMi4zLTMuNiA1LjItMy42IDMtLjMgNS42IDEuMyA1LjYgMy42em0tMzEuMS00LjVjLS43IDIgMS4zIDQuMyA0LjMgNC45IDIuNiAxIDUuNiAwIDYuMi0ycy0xLjMtNC4zLTQuMy01LjJjLTIuNi0uNy01LjUgLjMtNi4yIDIuM3ptNDQuMi0xLjdjLTIuOSAuNy00LjkgMi42LTQuNiA0LjkgLjMgMiAyLjkgMy4zIDUuOSAyLjYgMi45LS43IDQuOS0yLjYgNC42LTQuNi0uMy0xLjktMy0zLjItNS45LTIuOXpNMjUyLjggOGMtMTM4LjcgMC0yNDQuOCAxMDUuMy0yNDQuOCAyNDQgMCAxMTAuOSA2OS44IDIwNS44IDE2OS41IDIzOS4yIDEyLjggMi4zIDE3LjMtNS42IDE3LjMtMTIuMSAwLTYuMi0uMy00MC40LS4zLTYxLjQgMCAwLTcwIDE1LTg0LjctMjkuOCAwIDAtMTEuNC0yOS4xLTI3LjgtMzYuNiAwIDAtMjIuOS0xNS43IDEuNi0xNS40IDAgMCAyNC45IDIgMzguNiAyNS44IDIxLjkgMzguNiA1OC42IDI3LjUgNzIuOSAyMC45IDIuMy0xNiA4LjgtMjcuMSAxNi0zMy43LTU1LjktNi4yLTExMi4zLTE0LjMtMTEyLjMtMTEwLjUgMC0yNy41IDcuNi00MS4zIDIzLjYtNTguOS0yLjYtNi41LTExLjEtMzMuMyAyLjYtNjcuOSAyMC45LTYuNSA2OSAyNyA2OSAyNyAyMC01LjYgNDEuNS04LjUgNjIuOC04LjVzNDIuOCAyLjkgNjIuOCA4LjVjMCAwIDQ4LjEtMzMuNiA2OS0yNyAxMy43IDM0LjcgNS4yIDYxLjQgMi42IDY3LjkgMTYgMTcuNyAyNS44IDMxLjUgMjUuOCA1OC45IDAgOTYuNS01OC45IDEwNC4yLTExNC44IDExMC41IDkuMiA3LjkgMTcgMjIuOSAxNyA0Ni40IDAgMzMuNy0uMyA3NS40LS4zIDgzLjYgMCA2LjUgNC42IDE0LjQgMTcuMyAxMi4xIDEwMC0zMy4yIDE2Ny44LTEyOC4xIDE2Ny44LTIzOSAwLTEzOC43LTExMi41LTI0NC0yNTEuMi0yNDR6TTEwNS4yIDM1Mi45Yy0xLjMgMS0xIDMuMyAuNyA1LjIgMS42IDEuNiAzLjkgMi4zIDUuMiAxIDEuMy0xIDEtMy4zLS43LTUuMi0xLjYtMS42LTMuOS0yLjMtNS4yLTF6bS0xMC44LTguMWMtLjcgMS4zIC4zIDIuOSAyLjMgMy45IDEuNiAxIDMuNiAuNyA0LjMtLjcgLjctMS4zLS4zLTIuOS0yLjMtMy45LTItLjYtMy42LS4zLTQuMyAuN3ptMzIuNCAzNS42Yy0xLjYgMS4zLTEgNC4zIDEuMyA2LjIgMi4zIDIuMyA1LjIgMi42IDYuNSAxIDEuMy0xLjMgLjctNC4zLTEuMy02LjItMi4yLTIuMy01LjItMi42LTYuNS0xem0tMTEuNC0xNC43Yy0xLjYgMS0xLjYgMy42IDAgNS45czQuMyAzLjMgNS42IDIuM2MxLjYtMS4zIDEuNi0zLjkgMC02LjItMS40LTIuMy00LTMuMy01LjYtMnoiXQogICAgfTsKICAgIGZhQ29kaWVwaWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY29kaWVwaWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI4NCIsICJNNDQyLjUgMjAyLjljMzAuNyAwIDMzLjUgNTMuMS0uMyA1My4xbC0xMC44IDAgMCA0NC4zLTI2LjYgMCAwLTk3LjQgMzcuNyAwek00OTIgMzUyLjZDNDQ5LjkgNDQ0LjUgMzcwLjQgNTA0IDI2OCA1MDQgMTMxIDUwNCAyMCAzOTMgMjAgMjU2UzEzMSA4IDI2OCA4Yzk3LjQgMCAxNzIuOCA1My43IDIxOC4yIDEzOC40TDMwMC4yIDI1NS4yIDQ5MiAzNTIuNnptLTM4LjUgMTIuNWwtNjAuMy0zMC43Yy0yNy4xIDQ0LjMtNzAuNCA3MS40LTEyMi40IDcxLjQtODIuNSAwLTE0OS4yLTY2LjctMTQ5LjItMTQ4LjkgMC04Mi41IDY2LjctMTQ5LjIgMTQ5LjItMTQ5LjIgNDguNCAwIDg4LjkgMjMuNSAxMTYuOSA2My40bDU5LjUtMzQuNkM0MDYuNSA3My45IDM0Mi41IDM2LjUgMjY4IDM2LjUgMTQ2LjggMzYuNSA0OC41IDEzNC44IDQ4LjUgMjU2UzE0Ni44IDQ3NS41IDI2OCA0NzUuNWM3OC42IDAgMTQ2LjUtNDIuMSAxODUuNS0xMTAuNHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBpZWQtcGlwZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjJhZSIsICJNNDQwLjIgMjMuMmMtMjYuNyA2LjgtNjguMSAyOC41LTExNC42IDY3LjUtMzAuOS0xNy41LTY1LjgtMjYuNy0xMDEuNC0yNi43LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4IDIwOC05My4xIDIwOC0yMDhjLjEtNTQuMS0yMS0xMDYuMS01OC43LTE0NC44LTYuNiA4LjUtMTIuMyAxNy43LTE3IDI3LjQgMjguOSAzMi4zIDQ0LjggNzQuMSA0NC45IDExNy40IDAgOTcuNy03OS40IDE3Ny4xLTE3Ny4xIDE3Ny4xLTMwLjggMC02MS04LjEtODcuNi0yMy40IDgyLjktMTA3LjMgMTUwLjgtMzcuOCAxODQuMy0yMjYuNiA1LjgtMzIuNiAyOC05NC4zIDEyNi4yLTE2MC4yIDguMS01LjQgMi40LTE4LjEtNy0xNS43ek0xMDkuMyA0MDYuNEM4OS44IDM4OS44IDc0LjIgMzY5LjIgNjMuNSAzNDZzLTE2LjMtNDguNS0xNi4zLTc0YzAtOTcuNyA3OS40LTE3Ny4xIDE3Ny4xLTE3Ny4xIDI2LjYgMCA1Mi44IDYuMSA3Ni42IDE3LjgtNjYgNjIuMS0xMjYuOSAxNTIuOS0xOTEuNiAyOTMuOHoiXQogICAgfTsKICAgIGZhUmFzcGJlcnJ5UGkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmFzcGJlcnJ5LXBpIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YmIiLCAiTTM5Mi41IDIzMi41bC0zLjctNi41Yy4xLTQ2LjQtMjEuNC02NS4zLTQ2LjUtNzkuNyA3LjYtMiAxNS40LTMuNiAxNy42LTEzLjIgMTMuMS0zLjMgMTUuOC05LjQgMTcuMS0xNS44IDMuNC0yLjMgMTQuOC04LjcgMTMuNi0xOS43IDYuNC00LjQgMTAtMTAuMSA4LjEtMTguMSA2LjktNy41IDguNy0xMy43IDUuOC0xOS40IDguMy0xMC4zIDQuNi0xNS42IDEuMS0yMC45IDYuMi0xMS4yIC43LTIzLjItMTYuNi0yMS4yLTYuOS0xMC4xLTIxLjktNy44LTI0LjItNy44LTIuNi0zLjItNi02LTE2LjUtNC43LTYuOC02LjEtMTQuNC01LTIyLjMtMi4xLTkuMy03LjMtMTUuNS0xLjQtMjIuNiAuOC0xMS4zLTMuNi0xMy45IDEuMy0xOS40IDMuNC0xMi4zLTIuNi0xNi4xIDMtMjIgOC45bC02LjktLjFjLTE4LjYgMTAuOC0yNy44IDMyLjgtMzEuMSA0NC4xLTMuMy0xMS4zLTEyLjUtMzMuMy0zMS4xLTQ0LjFsLTYuOSAuMWMtNS45LTUuOS05LjctMTEuNS0yMi04LjktNS42LTItOC4xLTctMTkuNC0zLjQtNC42LTEuNC04LjktNC40LTEzLjktNC4zLTIuNiAuMS01LjUgMS04LjcgMy41LTcuOS0zLTE1LjUtNC0yMi4zIDIuMS0xMC41LTEuMy0xNCAxLjQtMTYuNSA0LjctMi4zIDAtMTcuMy0yLjMtMjQuMiA3LjgtMTcuMy0yLTIyLjcgMTAtMTYuNSAyMS4yLTMuNSA1LjQtNy4yIDEwLjcgMS4xIDIwLjktMi45IDUuNy0xLjEgMTEuOSA1LjggMTkuNC0xLjggOCAxLjggMTMuNyA4LjEgMTguMS0xLjIgMTEgMTAuMiAxNy40IDEzLjYgMTkuNyAxLjMgNi40IDQgMTIuNCAxNy4xIDE1LjggMi4yIDkuNSAxMCAxMS4yIDE3LjYgMTMuMi0yNS4xIDE0LjQtNDYuNiAzMy4zLTQ2LjUgNzkuN2wtMy43IDYuNWMtMjguOCAxNy4yLTU0LjcgNzIuNy0xNC4yIDExNy43IDIuNiAxNC4xIDcuMSAyNC4yIDExIDM1LjQgNS45IDQ1LjIgNDQuNSA2Ni4zIDU0LjYgNjguOCAxNC45IDExLjIgMzAuOCAyMS44IDUyLjIgMjkuMiAyMC4zIDIwLjYgNDIuMyAyOC40IDY0LjMgMjguNGwxIDBjMjIuMSAwIDQ0LTcuOCA2NC4yLTI4LjQgMjEuNS03LjQgMzcuMy0xOCA1Mi4yLTI5LjIgMTAuMi0yLjUgNDguNy0yMy42IDU0LjYtNjguOCAzLjktMTEuMiA4LjQtMjEuMyAxMS0zNS40IDQwLjYtNDUuMSAxNC43LTEwMC41LTE0LTExNy43em0tMjIuMi04Yy0xLjUgMTguNy05OC45LTY1LjEtODIuMS02Ny45IDQ1LjctNy41IDgzLjYgMTkuMiA4Mi4xIDY3Ljl6bS00MyA5My4xYy0yNC41IDE1LjgtNTkuOCA1LjYtNzguOC0yMi44cy0xNC42LTY0LjIgOS45LTgwIDU5LjgtNS42IDc4LjggMjIuOCAxNC42IDY0LjItOS45IDgwek0yNTkuNCAyOS4zYy44IDQuMiAxLjggNi44IDIuOSA3LjYgNS40LTUuOCA5LjgtMTEuNyAxNi44LTE3LjMgMCAzLjMtMS43IDYuOCAyLjUgOS40IDMuNy01IDguOC05LjUgMTUuNS0xMy4zLTMuMiA1LjYtLjYgNy4zIDEuMiA5LjYgNS4xLTQuNCAxMC04LjggMTkuNC0xMi4zLTIuNiAzLjEtNi4yIDYuMi0yLjQgOS44IDUuMy0zLjMgMTAuNi02LjYgMjMuMS04LjktMi44IDMuMS04LjcgNi4zLTUuMSA5LjQgNi42LTIuNSAxNC00LjQgMjIuMS01LjQtMy45IDMuMi03LjEgNi4zLTMuOSA4LjggNy4xLTIuMiAxNi45LTUuMSAyNi40LTIuNmwtNiA2LjFjLS43IC44IDE0LjEgLjYgMjMuOSAuOC0zLjYgNS03LjIgOS43LTkuMyAxOC4yIDEgMSA1LjggLjQgMTAuNCAwLTQuNyA5LjktMTIuOCAxMi4zLTE0LjcgMTYuNiAyLjkgMi4yIDYuOCAxLjYgMTEuMiAuMS0zLjQgNi45LTEwLjQgMTEuNy0xNiAxNy4zIDEuNCAxIDMuOSAxLjYgOS43IC45LTUuMiA1LjUtMTEuNCAxMC41LTE4LjggMTUgMS4zIDEuNSA1LjggMS41IDEwIDEuNi02LjcgNi41LTE1LjMgOS45LTIzLjQgMTQuMiA0IDIuNyA2LjkgMi4xIDEwIDIuMS01LjcgNC43LTE1LjQgNy4xLTI0LjQgMTAgMS43IDIuNyAzLjQgMy40IDcuMSA0LjEtOS41IDUuMy0yMy4yIDIuOS0yNyA1LjYgLjkgMi43IDMuNiA0LjQgNi43IDUuOC0xNS40IC45LTU3LjMtLjYtNjUuNC0zMi4zIDE1LjctMTcuMyA0NC40LTM3LjUgOTMuNy02Mi42LTM4LjQgMTIuOC03MyAzMC0xMDIgNTMuNS0zNC4zLTE1LjktMTAuOC01NS45IDUuOC03MS44ek0yMjUgMTQzLjljMjQuMi0uMyA1NC4xIDE3LjggNTQgMzQuNy0uMSAxNS0yMSAyNy4xLTUzLjggMjYuOS0zMi4xLS40LTUzLjctMTUuMi01My42LTI5LjggMC0xMS45IDI2LjItMzIuNSA1My40LTMxLjh6TTEwMiAxMzEuMWMzLjctLjcgNS40LTEuNSA3LjEtNC4xLTktMi44LTE4LjctNS4zLTI0LjQtMTAgMy4xIDAgNiAuNyAxMC0yLjEtOC4xLTQuMy0xNi43LTcuNy0yMy40LTE0LjIgNC4yLS4xIDguNyAwIDEwLTEuNi03LjQtNC41LTEzLjYtOS41LTE4LjgtMTUgNS44IC43IDguMyAuMSA5LjctLjktNS42LTUuNi0xMi43LTEwLjQtMTYtMTcuMyA0LjMgMS41IDguMyAyIDExLjItLjEtMS45LTQuMi0xMC02LjctMTQuNy0xNi42IDQuNiAuNCA5LjQgMSAxMC40IDAtMi4xLTguNS01LjgtMTMuMy05LjMtMTguMiA5LjgtLjEgMjQuNiAwIDIzLjktLjhsLTYtNi4xYzkuNS0yLjUgMTkuMyAuNCAyNi40IDIuNiAzLjItMi41LS4xLTUuNi0zLjktOC44IDguMSAxLjEgMTUuNCAyLjkgMjIuMSA1LjQgMy41LTMuMS0yLjMtNi4zLTUuMS05LjQgMTIuNSAyLjMgMTcuOCA1LjYgMjMuMSA4LjkgMy44LTMuNiAuMi02LjctMi40LTkuOCA5LjQgMy40IDE0LjMgNy45IDE5LjQgMTIuMyAxLjctMi4zIDQuNC00IDEuMi05LjYgNi43IDMuOCAxMS44IDguMyAxNS41IDEzLjMgNC4xLTIuNiAyLjUtNi4yIDIuNS05LjQgNyA1LjYgMTEuNCAxMS41IDE2LjggMTcuMyAxLjEtLjggMi0zLjQgMi45LTcuNiAxNi42IDE1LjkgNDAuMSA1NS45IDYgNzEuOC0yOS0yMy41LTYzLjYtNDAuNy0xMDItNTMuNSA0OS4zIDI1IDc4IDQ1LjMgOTMuNyA2Mi42LTggMzEuOC01MCAzMy4yLTY1LjQgMzIuMyAzLjEtMS40IDUuOC0zLjIgNi43LTUuOC00LTIuOC0xNy42LS40LTI3LjItNS42em02MC4xIDI0LjFjMTYuOCAyLjgtODAuNiA4Ni41LTgyLjEgNjcuOS0xLjUtNDguNyAzNi41LTc1LjUgODIuMS02Ny45ek01OC43IDM0MmMtMjMuNy0xOC44LTMxLjMtNzMuNyAxMi42LTk4LjMgMjYuNS03IDkgMTA3LjgtMTIuNiA5OC4zem05MSA5OC4yYy0xMy4zIDcuOS00NS44IDQuNy02OC44LTI3LjktMTUuNS0yNy40LTEzLjUtNTUuMi0yLjYtNjMuNCAxNi4zLTkuOCA0MS41IDMuNCA2MC45IDI1LjYgMTYuOSAyMCAyNC42IDU1LjMgMTAuNSA2NS43ek0xMjMuMyAzMjAuNWMtMjQuNS0xNS44LTI4LjktNTEuNi05LjktODBzNTQuMy0zOC42IDc4LjgtMjIuOCAyOC45IDUxLjYgOS45IDgwYy0xOS4xIDI4LjQtNTQuNCAzOC42LTc4LjggMjIuOHpNMjI1LjUgNDk2Yy0yOS40IDEuMi01OC4yLTIzLjctNTcuOC0zMi4zLS40LTEyLjcgMzUuOC0yMi42IDU5LjMtMjIgMjMuNy0xIDU1LjYgNy41IDU1LjcgMTguOSAuNSAxMS0yOC44IDM1LjktNTcuMiAzNS40em01OC45LTEyNC45Yy4yIDI5LjctMjYuMiA1My44LTU4LjggNTRzLTU5LjItMjMuOC01OS40LTUzLjRsMC0uNmMtLjItMjkuNyAyNi4yLTUzLjggNTguOC01NHM1OS4yIDIzLjggNTkuNCA1My40bDAgLjZ6bTgyLjIgNDIuN2MtMjUuMyAzNC42LTU5LjYgMzUuOS03Mi4zIDI2LjMtMTMuMy0xMi40LTMuMi01MC45IDE1LjEtNzIgMjAuOS0yMy4zIDQzLjMtMzguNSA1OC45LTI2LjYgMTAuNSAxMC4zIDE2LjcgNDkuMS0xLjcgNzIuM3ptMjIuOS03My4yYy0yMS41IDkuNC0zOS0xMDUuMy0xMi42LTk4LjMgNDMuOSAyNC43IDM2LjMgNzkuNiAxMi42IDk4LjN6Il0KICAgIH07CiAgICBmYUNzczMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzMyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTNjIiwgIk00ODAgMzJsLTY0IDM2OC0yMjMuMyA4MC0xOTIuNy04MCAxOS42LTk0LjggODIgMC04IDQwLjYgMTE2LjQgNDQuNCAxMzQuMS00NC40IDE4LjgtOTcuMS0zMzMuNCAwIDE2LTgyIDMzMy43IDAgMTAuNS01Mi43LTMzMy40IDAgMTYuMy04MiA0MDcuNCAweiJdCiAgICB9OwogICAgZmFIdWJzcG90ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImh1YnNwb3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiMiIsICJNMjM1LjggMjExLjZjLTI1LjEgMjMuNy00MC44IDU3LjMtNDAuOCA5NC42IDAgMjkuMyA5LjcgNTYuMyAyNiA3OEwxNzEuNSA0MzRjLTQuNC0xLjYtOS4xLTIuNS0xNC0yLjUtMTAuOCAwLTIwLjkgNC4yLTI4LjUgMTEuOHMtMTEuOCAxNy44LTExLjggMjguNiA0LjIgMjAuOSAxMS44IDI4LjUgMTcuOCAxMS42IDI4LjUgMTEuNmMxMC44IDAgMjAuOS0zLjkgMjguNi0xMS42IDcuNi03LjYgMTEuOC0xNy44IDExLjgtMjguNSAwLTQuMi0uNi04LjItMS45LTEyLjFsNTAtNTAuMmMyMiAxNi45IDQ5LjQgMjYuOSA3OS4zIDI2LjkgNzEuOSAwIDEzMC01OC4zIDEzMC0xMzAuMiAwLTY1LjItNDcuNy0xMTkuMi0xMTAuMi0xMjguN2wwLTYxLjZjMTcuNS03LjQgMjguMi0yMy44IDI4LjItNDIuOSAwLTI2LjEtMjAuOS00Ny45LTQ3LTQ3LjlTMjc5LjYgNDcgMjc5LjYgNzMuMWMwIDE5LjEgMTAuNyAzNS41IDI4LjIgNDIuOWwwIDYxLjJjLTE1LjIgMi4xLTI5LjYgNi43LTQyLjcgMTMuNi0yNy42LTIwLjktMTE3LjUtODUuNy0xNjguOS0xMjQuOCAxLjItNC40IDItOSAyLTEzLjggMC0yOC44LTIzLjUtNTIuMi01Mi40LTUyLjItMjguOCAwLTUyLjIgMjMuNC01Mi4yIDUyLjIgMCAyOC45IDIzLjQgNTIuMyA1Mi4yIDUyLjMgOS44IDAgMTguOS0yLjkgMjYuOC03LjZMMjM1LjggMjExLjZ6bTg5LjUgMjUuNmE2OSA2OSAwIDEgMSAwIDEzOCA2OSA2OSAwIDEgMSAwLTEzOHoiXQogICAgfTsKICAgIGZhQ21wbGlkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNtcGxpZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMzYwIiwgIk0yMjYuMSAzODguMmMwLS43LS4yLTEuNS0uNi0yLjFzLTEtMS4xLTEuNy0xLjRjLS41LS4yLTEuMS0uNC0xLjYtLjRsLTE0OS42IDBjLTMuMSAwLTYuMi0uOC04LjktMi4ycy01LjEtMy41LTYuOS02LjEtMi45LTUuNS0zLjMtOC42IDAtNi4yIDEuMS05LjFMODEuNiAyNTUuN2MyLTcuMiA2LjItMTMuNSAxMi0xOC4yczEyLjktNy40IDIwLjQtNy44bDE0OC42IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuNC0xIC4zLTItLjEtMi45cy0xLjItMS42LTIuMS0yYy0uNC0uMi0uOS0uMy0xLjQtLjMtLjEgMC0uMSAwLS4yIDBsLTE0OC41IDBjLTIyLjIgMS4yLTQzLjQgOS4yLTYwLjggMjNzLTMwIDMyLjctMzYuMiA1NC4xTDMuNSAzNTguOGMtMy4yIDguNy00LjIgMTgtMyAyNy4xczQuNiAxNy45IDkuOSAyNS41IDEyLjMgMTMuOCAyMC41IDE4IDE3LjMgNi41IDI2LjUgNi42YzEgMCAxLjkgMCAyLjktLjFsMTQ4LjYgMGMxLjUtLjEgMi45LS43IDQtMS42czItMi4yIDIuNC0zLjZsMTAuNy00MS4xYy4yLS41IC4zLS45IC4zLTEuNHptODAuNS0zMDdjLjItLjQgLjMtLjkgLjMtMS40IDAtLjUtLjEtMS0uMy0xLjVzLS41LS45LS44LTEuMi0uOC0uNi0xLjItLjgtMS0uMy0xLjUtLjNsLTQxLjIgMGMtMS41IC4xLTIuOSAuNi00IDEuNnMtMiAyLjItMi40IDMuNmwtMjEuMyA4MC45IDUxLjEgMCAyMS40LTgwLjl6bS0xMjYuMyAyODdsNTEuMSAwIDMyLTEyMi42LTUxLjEgMC0zMiAxMjIuNnpNNTExLjkgNzkuN2MwLTEtLjUtMS45LTEuMi0yLjZzLTEuNy0xLjEtMi42LTEuMWMtLjEgMC0uMSAwLS4yIDBsLTQxIDBjLTEuNSAuMS0yLjkgLjYtNC4xIDEuNXMtMiAyLjItMi41IDMuNkwzNjguOSA0MzAuNmMtLjIgLjQtLjMgLjktLjMgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjIgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNTExLjUgODEuMmMuMi0uNSAuMy0xIC4zLTEuNXpNMzI0LjYgMzg0LjVsLTQxIDBjLTEuNSAuMS0yLjkgLjctNCAxLjZzLTIgMi4yLTIuNCAzLjZsLTEwLjcgNDEuMWMtLjIgLjQtLjMgLjktLjMgMS40IDAgLjUgLjEgMSAuMyAxLjVzLjUgLjkgLjggMS4yIC44IC42IDEuMiAuOCAxIC4zIDEuNSAuM2MuMSAwIC4yIDAgLjMgMGw0MC45IDBjMS41LS4xIDIuOS0uNiA0LTEuNnMyLTIuMiAyLjQtMy42bDEwLjgtNDEuMWMuMi0uNiAuMy0xLjIgLjMtMS44cy0uMy0xLjItLjYtMS43LS44LS45LTEuMy0xLjItMS4yLS40LTEuOC0uNGMtLjEgMC0uMiAwLS4zIDBsMCAwek02MzYgNzYuMWwtNDEgMGMtMS41IC4xLTIuOSAuNi00IDEuNXMtMiAyLjItMi40IDMuNkw0OTcuMSA0MzAuNmMtLjIgLjQtLjIgLjktLjIgMS4zIDAgMSAuNCAyIDEuMSAyLjdzMS43IDEuMSAyLjcgMS4xbDQxLjEgMGMxLjUtLjEgMi45LS42IDQtMS42czItMi4yIDIuNC0zLjZMNjM5LjcgODEuMmMuMi0uNSAuMy0xIC4zLTEuNS0uMS0xLS41LTEuOS0xLjItMi41cy0xLjYtMS0yLjYtMWMtLjEgMC0uMSAwLS4yIDBsMC0uMXpNMzcxLjYgMjI1LjJsMTAuOC00MS4xYy4yLS40IC4yLS45IC4yLTEuNCAwLTEtLjQtMi0xLjEtMi43cy0xLjctMS4xLTIuNy0xLjFsLTQxLjMgMGMtMS41IC4xLTIuOSAuNy00IDEuNnMtMiAyLjItMi40IDMuNmwtMTAuOCA0MS4xYy0uMiAuNS0uMyAxLS4zIDEuNWwwIC4yYy4xIDEgLjUgMS44IDEuMiAyLjVzMS42IDEgMi42IDFjLjEgMCAuMiAwIC4zIDBsNDEuMSAwYzEuNS0uMSAyLjktLjYgNC0xLjZzMi0yLjIgMi40LTMuNnoiXQogICAgfTsKICAgIGZhRHlhbG9nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImR5YWxvZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzk5IiwgIk0xNiAzMmwwIDExOS4yIDY0IDAgMC01NS4yIDEwNy4yIDBDMzAwLjYgOTYgMzY4IDE3Ni4yIDM2OCAyNTUuOSAzNjggMzMyIDMwOS40IDQxNiAxODcuMiA0MTZsLTE3MS4yIDAgMCA2NCAxNzEuMiAwQzM0Ny45IDQ4MCA0MzIgMzY3LjMgNDMyIDI1NS45IDQzMiAxOTcuMiA0MDkuOSAxNDIuNSAzNjkuNyAxMDEuNiAzMjQuOSA1NiAyNjEuNyAzMiAxODcuMiAzMkwxNiAzMnoiXQogICAgfTsKICAgIGZhRWxlbWVudG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVsZW1lbnRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDMwIiwgIk0uNSAyNTZjMCAxNDEgMTEzLjYgMjU1IDI1NC42IDI1NSAxNDIgMCAyNTYtMTE0IDI1Ni0yNTUgMC0xNDAtMTE0LTI1My45LTI1Ni0yNTMuOS0xNDEgMC0yNTQuNiAxMTMuOS0yNTQuNiAyNTMuOXpNMTkyLjEgMTUwbDAgMjEzLTQzIDAgMC0yMTMgNDMgMHptNDIgMGwxMjggMCAwIDQzLTEyOCAwIDAtNDN6bTEyOCA4NWwwIDQzLTEyOCAwIDAtNDMgMTI4IDB6bS0xMjggODVsMTI4IDAgMCA0My0xMjggMCAwLTQzeiJdCiAgICB9OwogICAgZmFGaXJzdE9yZGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpcnN0LW9yZGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYjAiLCAiTTEzLjMgMjI5LjJjLjEtLjEgLjItLjMgLjMtLjQgMCAuMSAwIC4zLS4xIC40bC0uMiAwek0yMjQuNCA5Ni42Yy03LjEgMC0xNC42IC42LTIxLjQgMS43bDMuNyA2Ny40LTIyLTY0Yy0xNC4zIDMuNy0yNy43IDkuNC00MCAxNi42bDI5LjQgNjEuNC00NS4xLTUwLjljLTExLjQgOC45LTIxLjcgMTkuMS0zMC42IDMwLjlsNTAuNiA0NS40LTYxLjEtMjkuN2MtNy4xIDEyLjMtMTIuOSAyNS43LTE2LjYgNDBsNjQuMyAyMi42LTY4LTRjLS45IDcuMS0xLjQgMTQuNi0xLjQgMjJzLjYgMTQuNiAxLjQgMjEuN2w2Ny43LTQtNjQgMjIuNmMzLjcgMTQuMyA5LjQgMjcuNyAxNi42IDQwLjNMMTQ5IDMwNi45IDk4LjEgMzUyYzguOSAxMS43IDE5LjEgMjIuMyAzMC45IDMwLjlsNDQuOS01MC45LTI5LjUgNjEuNGMxMi4zIDcuNCAyNS43IDEzLjEgNDAgMTYuOWwyMi4zLTY0LjYtNCA2OGM3LjEgMS4xIDE0LjYgMS43IDIxLjcgMS43IDcuNCAwIDE0LjYtLjYgMjEuNy0xLjdsLTQtNjguNiAyMi42IDY1LjFjMTQuMy00IDI3LjctOS40IDQwLTE2LjlsLTI5LjQtNjEuMyA0NC45IDUwLjljMTEuNy04LjkgMjItMTkuMSAzMC42LTMwLjlsLTUwLjYtNDUuMSA2MS4xIDI5LjRjNy4xLTEyLjMgMTIuOS0yNS43IDE2LjYtNDAuM2wtNjQtMjIuMyA2Ny40IDRjMS4xLTcuMSAxLjQtMTQuMyAxLjQtMjEuN3MtLjMtMTQuOS0xLjQtMjJsLTY3LjcgNCA2NC0yMi4zYy0zLjctMTQuMy05LjEtMjgtMTYuNi00MC4zbC02MC45IDI5LjcgNTAuNi00NS40Yy04LjktMTEuNy0xOS4xLTIyLTMwLjYtMzAuOWwtNDUuMSA1MC45IDI5LjQtNjEuMWMtMTIuMy03LjQtMjUuNy0xMy4xLTQwLTE2LjlsLTIyLjMgNjQuMyA0LTY3LjdjLTcuMS0xLjItMTQuMy0xLjctMjEuNy0xLjd6TTQ0My44IDEyOEw0NDMuOCAzODQgMjI0LjQgNTEyIDUgMzg0IDUgMTI4IDIyNC40IDAgNDQzLjggMTI4em0tMTcuMSAxMC4zbC0yMDIuMy0xMTcuNC0yMDIuMyAxMTcuNCAwIDIzNS4xIDIwMi4zIDExNy43IDIwMi4zLTExNy43IDAtMjM1LjF6TTIyNC40IDM3LjFsMTg3LjcgMTA5LjQgMCAyMTguOS0xODcuNyAxMDkuNS0xODcuNy0xMDkuNSAwLTIxOC44IDE4Ny43LTEwOS41em0wIDUwLjljLTkyLjMgMC0xNjYuOSA3NS4xLTE2Ni45IDE2OCAwIDkyLjYgNzQuNiAxNjcuNyAxNjYuOSAxNjcuNyA5MiAwIDE2Ni45LTc1LjEgMTY2LjktMTY3LjcgMC05Mi45LTc0LjktMTY4LTE2Ni45LTE2OHoiXQogICAgfTsKICAgIGZhRHJpYmJibGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHJpYmJibGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE3ZCIsICJNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek00MjAgMTIyLjRjMjkuNSAzNiA0Ny40IDgyIDQ3LjggMTMyLTctMS41LTc3LTE1LjctMTQ3LjUtNi44LTUuOC0xNC0xMS4yLTI2LjQtMTguNi00MS42IDc4LjMtMzIgMTEzLjgtNzcuNSAxMTguMy04My41ek0zOTYuNCA5Ny45Yy0zLjggNS40LTM1LjcgNDguMy0xMTEgNzYuNS0zNC43LTYzLjgtNzMuMi0xMTYuMi03OS0xMjQgNjcuMi0xNi4yIDEzOCAxLjMgMTkwLjEgNDcuNXpNMTY1LjkgNjQuNmM1LjYgNy43IDQzLjQgNjAuMSA3OC41IDEyMi41LTk5LjEgMjYuMy0xODYuNCAyNS45LTE5NS44IDI1LjggMTMuNy02NS43IDU4LTEyMC40IDExNy4zLTE0OC4zek00NC4yIDI1Ni4zYzAtMi4yIDAtNC4zIC4xLTYuNSA5LjMgLjIgMTExLjkgMS41IDIxNy43LTMwLjEgNi4xIDExLjkgMTEuOSAyMy45IDE3LjIgMzUuOS03Ni42IDIxLjYtMTQ2LjIgODMuNS0xODAuNSAxNDIuMy0zMy44LTM3LjYtNTQuNS04Ny4yLTU0LjUtMTQxLjZ6TTEyNiA0MjMuNGMyMi4xLTQ1LjIgODIuMi0xMDMuNiAxNjcuNi0xMzIuOCAyOS43IDc3LjMgNDIgMTQyLjEgNDUuMiAxNjAuNi02OC4xIDI5LTE1MCAyMS4xLTIxMi44LTI3Ljl6bTI0OC40IDguNWMtMi4yLTEyLjktMTMuNC03NC45LTQxLjItMTUxIDY2LjQtMTAuNiAxMjQuNyA2LjggMTMxLjkgOS4xLTkuNCA1OC45LTQzLjMgMTA5LjgtOTAuOCAxNDJ6Il0KICAgIH07CiAgICBmYUxpbmtlZGluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmtlZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwOGMiLCAiTTQxNiAzMkwzMS45IDMyQzE0LjMgMzIgMCA0Ni41IDAgNjQuM0wwIDQ0Ny43QzAgNDY1LjUgMTQuMyA0ODAgMzEuOSA0ODBMNDE2IDQ4MGMxNy42IDAgMzItMTQuNSAzMi0zMi4zbDAtMzgzLjRDNDQ4IDQ2LjUgNDMzLjYgMzIgNDE2IDMyek0xMzUuNCA0MTZsLTY2LjQgMCAwLTIxMy44IDY2LjUgMCAwIDIxMy44LS4xIDB6TTEwMi4yIDk2YTM4LjUgMzguNSAwIDEgMSAwIDc3IDM4LjUgMzguNSAwIDEgMSAwLTc3ek0zODQuMyA0MTZsLTY2LjQgMCAwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjJ6Il0KICAgIH07CiAgICBmYUNjUGF5cGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLXBheXBhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWY0IiwgIk0xODYuMyAyNTguMmMwIDEyLjItOS43IDIxLjUtMjIgMjEuNS05LjIgMC0xNi01LjItMTYtMTUgMC0xMi4yIDkuNS0yMiAyMS43LTIyIDkuMyAwIDE2LjMgNS43IDE2LjMgMTUuNXpNODAuNSAyMDkuN2wtNC43IDBjLTEuNSAwLTMgMS0zLjIgMi43bC00LjMgMjYuNyA4LjItLjNjMTEgMCAxOS41LTEuNSAyMS41LTE0LjIgMi4zLTEzLjQtNi4yLTE0LjktMTcuNS0xNC45em0yODQgMGwtNC41IDBjLTEuOCAwLTMgMS0zLjIgMi43bC00LjIgMjYuNyA4LS4zYzEzIDAgMjItMyAyMi0xOC0uMS0xMC42LTkuNi0xMS4xLTE4LjEtMTEuMXpNNTc2IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmw0ODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTI4LjMgMjE1LjRjMC0yMS0xNi4yLTI4LTM0LjctMjhsLTQwIDBjLTIuNSAwLTUgMi01LjIgNC43TDMyIDI5NC4yYy0uMyAyIDEuMiA0IDMuMiA0bDE5IDBjMi43IDAgNS4yLTIuOSA1LjUtNS43bDQuNS0yNi42YzEtNy4yIDEzLjItNC43IDE4LTQuNyAyOC42IDAgNDYuMS0xNyA0Ni4xLTQ1Ljh6bTg0LjIgOC44bC0xOSAwYy0zLjggMC00IDUuNS00LjIgOC4yLTUuOC04LjUtMTQuMi0xMC0yMy43LTEwLTI0LjUgMC00My4yIDIxLjUtNDMuMiA0NS4yIDAgMTkuNSAxMi4yIDMyLjIgMzEuNyAzMi4yIDkgMCAyMC4yLTQuOSAyNi41LTExLjktLjUgMS41LTEgNC43LTEgNi4yIDAgMi4zIDEgNCAzLjIgNGwxNy4yIDBjMi43IDAgNS0yLjkgNS41LTUuN2wxMC4yLTY0LjNjLjMtMS45LTEuMi0zLjktMy4yLTMuOXpNMjUzIDMyMi4xbDYzLjctOTIuNmMuNS0uNSAuNS0xIC41LTEuNyAwLTEuNy0xLjUtMy41LTMuMi0zLjVsLTE5LjIgMGMtMS43IDAtMy41IDEtNC41IDIuNWwtMjYuNSAzOS0xMS0zNy41Yy0uOC0yLjItMy00LTUuNS00bC0xOC43IDBjLTEuNyAwLTMuMiAxLjgtMy4yIDMuNSAwIDEuMiAxOS41IDU2LjggMjEuMiA2Mi4xLTIuNyAzLjgtMjAuNSAyOC42LTIwLjUgMzEuNiAwIDEuOCAxLjUgMy4yIDMuMiAzLjJsMTkuMiAwYzEuOC0uMSAzLjUtMS4xIDQuNS0yLjZ6TTQxMi4zIDIxNS40YzAtMjEtMTYuMi0yOC0zNC43LTI4bC0zOS43IDBjLTIuNyAwLTUuMiAyLTUuNSA0LjdsLTE2LjIgMTAyYy0uMiAyIDEuMyA0IDMuMiA0bDIwLjUgMGMyIDAgMy41LTEuNSA0LTMuMmw0LjUtMjljMS03LjIgMTMuMi00LjcgMTgtNC43IDI4LjQgMCA0NS45LTE3IDQ1LjktNDUuOHptODQuMiA4LjhsLTE5IDBjLTMuOCAwLTQgNS41LTQuMyA4LjItNS41LTguNS0xNC0xMC0yMy43LTEwLTI0LjUgMC00My4yIDIxLjUtNDMuMiA0NS4yIDAgMTkuNSAxMi4yIDMyLjIgMzEuNyAzMi4yIDkuMyAwIDIwLjUtNC45IDI2LjUtMTEuOS0uMyAxLjUtMSA0LjctMSA2LjIgMCAyLjMgMSA0IDMuMiA0bDE3LjMgMGMyLjcgMCA1LTIuOSA1LjUtNS43bDEwLjItNjQuM2MuMy0xLjktMS4yLTMuOS0zLjItMy45ek01NDQgMTkwLjljMC0yLTEuNS0zLjUtMy4yLTMuNWwtMTguNSAwYy0xLjUgMC0zIDEuMi0zLjIgMi43bC0xNi4yIDEwNC0uMyAuNWMwIDEuOCAxLjUgMy41IDMuNSAzLjVsMTYuNSAwYzIuNSAwIDUtMi45IDUuMi01LjdsMTYuMi0xMDEuMiAwLS4zem0tOTAgNTEuOGMtMTIuMiAwLTIxLjcgOS43LTIxLjcgMjIgMCA5LjcgNyAxNSAxNi4yIDE1IDEyIDAgMjEuNy05LjIgMjEuNy0yMS41IC4xLTkuOC02LjktMTUuNS0xNi4yLTE1LjV6Il0KICAgIH07CiAgICBmYURobCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaGwiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjc5MCIsICJNMjM4IDMwMS4ybDU4LjcgMCAyMi4zLTMwLjItNTguNyAwLTIyLjMgMzAuMnpNMCAyODIuOWwwIDYuNCA4MS44IDAgNC43LTYuNC04Ni41IDB6TTE3Mi45IDI3MWMtOC43IDAtNi0zLjYtNC42LTUuNSAyLjgtMy44IDcuNi0xMC40IDEwLjQtMTQuMXMyLjgtNS45LTIuOC01LjlsLTUxIDAtNDEuMSA1NS44IDEwMC4xIDBjMzMuMSAwIDUxLjUtMjIuNSA1Ny4yLTMwLjNsLTY4LjIgMHptMzE3LjUtNi45bDM5LjMtNTMuNC02Mi4yIDAtMzkuMyA1My40IDYyLjIgMHpNOTUuMyAyNzFsLTk1LjMgMCAwIDYuNCA5MC42IDAgNC43LTYuNHptMTExLTI2LjZjLTIuOCAzLjgtNy41IDEwLjQtMTAuMyAxNC4yLTEuNCAyLTQuMSA1LjUgNC42IDUuNWw0NS42IDBzNy4zLTEwIDEzLjUtMTguNGM4LjQtMTEuNCAuNy0zNS0yOS4yLTM1bC0xMTcuOSAwLTIwLjQgMjcuOCAxMTEuNCAwYzUuNiAwIDUuNSAyLjIgMi43IDUuOXpNMCAzMDEuMmw3My4xIDAgNC43LTYuNC03Ny44IDAgMCA2LjR6bTMyMyAwbDU4LjcgMCAyMi4zLTMwLjItNTguNyAwYy0uMSAwLTIyLjMgMzAuMi0yMi4zIDMwLjJ6bTIyMiAuMWw5NSAwIDAtNi40LTkwLjMgMC00LjcgNi40ek01NjcuMyAyNzFsLTQuNyA2LjQgNzcuNCAwIDAtNi40LTcyLjcgMHptLTEzLjUgMTguM2w4Ni4yIDAgMC02LjQtODEuNSAwLTQuNyA2LjR6TTM4OS42IDIxMC43bC0yMi41IDMwLjYtMjYuMiAwIDIyLjUtMzAuNi01OC43IDAtMzkuMyA1My40IDE0My42IDAgMzkuMy01My40LTU4LjcgMHpNNDIzLjEgMjcxcy00LjMgNS45LTYuNCA4LjdjLTcuNCAxMC0uOSAyMS42IDIzLjIgMjEuNmw5NC4zIDAgMjIuMy0zMC4zLTEzMy40IDB6Il0KICAgIH07CiAgICBmYVRleCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXgiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTdmZiIsICJNNjIwLjggOTUuNGMtMzAuOCAuNC00Mi4xIDE2LjYtNDcuNyAyNC41bC0uMSAuMS01NS43IDgwLjUgODIuOCAxMjEuMWM3LjUgMTAuNiAxMS4zIDEyLjUgMzUuNCAxMi41bDAgOS4xYy05LjEtLjctMjgtLjctMzcuNy0uNy0xMi40IDAtMzAuOCAwLTQyLjkgLjdsMC05LjFjMTMuMi0uOCAxNi42LTcuMyAxNi42LTEwLjIgMC0xLjEgMC0yLjMtMy02LjRsLTY1LjUtOTYuMy02MC4yIDg3LjljLTEuOSAyLjctMy44IDUuNC0zLjggMTAuMiAwIDYuMSAzLjQgMTMuNiAxNSAxNC43bDAgOS4xYy05LjQtLjctMjcuMS0uNy0zNy4yLS43bC0yLjggMC0xMS43IDgyLjYtMTk1LjkgMCAwLTkuMWMyNi43IDAgMzAuOSAwIDMwLjktMTYuOWwwLTIwMy4yYzAtMTYuOS00LjMtMTYuOS0zMC45LTE2LjlsMC0xMC4zIDE5LjggMGMtNC44LTYxLjEtMTAuOC03MS43LTY4LTcxLjhsLTIwLjcgMGMtNi44IDEuNS02LjggNi4xLTYuOCAxNC40bDAgMjA1YzAgMTMuNiAxLjEgMTcuOCAzMi40IDE3LjhsMTAuNSAwIDAgOS4xLS40IDBjLTE3LjktLjMtMzYuNy0uNy01NC45LS43cy0zNi45IC4zLTU0LjggLjdsLS42IDAgMC05LjEgMTAuNyAwYzMxLjcgMCAzMi44LTQuMSAzMi44LTE3LjhsMC0yMDVjMC04LjcgMC0xMy4yLTcuMi0xNC4zbC0yMC44IDBjLTU4LjQgMC02My43IDEwLjktNjguNiA3My4zbC02LjggMCA2LjMtODMuMyAyMTcuNSAwIDYuMSA4MS44IDE2NC4xIDAgOSA4My4zLTYuOCAwYy01LjMtNDkuOC0xMi4xLTczLTcwLjMtNzNsLTUxLjUgMGMtMTUgMC0xNS44IDEuOS0xNS44IDE0LjZsMCA5My4zIDM1LjUgMGMzNS41IDAgMzguOS0xMi44IDM4LjktNDRsNiAwIDAgOTcuOS02IDBjMC0zMS44LTMuNC00NC44LTM4LjktNDQuOGwtMzUuNSAwIDAgMTA1LjJjMCAxMyAuNyAxNC44IDE1LjggMTQuOGw1Mi4yIDBjNjEuMSAwIDY5LjktMjUuOCA3Ny40LTczLjYtNy43IDAtMTYuMyAuMi0yMi4yIC43bDAtOS4xYzcuMiAwIDMxLjctLjQgNDcuOC0yMy44bDY1LjUtOTUuNy03Mi43LTEwNi43Yy04LjMtMTEuNy0xNS4xLTEyLjUtMzUuOC0xMi41bDAtOS4xYzkuMSAuNyAyNy45IC43IDM3LjcgLjcgMTIuNCAwIDMwLjggMCA0Mi45LS43bDAgOS4xYy0xMi41IC40LTE2LjYgNi44LTE2LjYgMTAuMiAwIDEuMSAuNCAyLjMgMyA2LjRsNTUuNyA4MS42IDQ5LjctNzIuMWMyLjctMy43IDQuNS02LjggNC41LTExLjMgMC02LjEtMy0xMy42LTE1LTE0LjhsMC05LjFjOS40IC43IDI0LjggLjcgMzcuMiAuNyA5IDAgMjMuMyAwIDMyLS43bDAgOS4xeiJdCiAgICB9OwogICAgZmFTaG9waWZ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNob3BpZnkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA1NyIsICJNMzg4LjUgMTA0LjFjLS4yLTEuMS0uNy0yLjEtMS41LTIuOHMtMS44LTEuMi0yLjktMS4yYy0yIDAtMzcuMi0uOC0zNy4yLS44cy0yMS42LTIwLjgtMjkuNi0yOC44bDAgNDMyLjcgMTI1LjctMzEuMnMtNTQtMzY1LjUtNTQuNC0zNjcuOXpNMjg4LjkgNzAuNWMtMS45LTYuMS00LjMtMTEuOS03LjItMTcuNi0xMC40LTIwLTI2LTMwLjktNDQuNC0zMC45LTEuMyAwLTIuNyAuMS00IC40LS40LS44LTEuMi0xLjItMS42LTItOC04LjgtMTguNC0xMi44LTMwLjgtMTIuNC0yNCAuOC00OCAxOC02Ny4yIDQ4LjgtMTMuNiAyMS42LTI0IDQ4LjgtMjYuOCA3MC4xLTI3LjYgOC40LTQ2LjggMTQuNC00Ny4yIDE0LjgtMTQgNC40LTE0LjQgNC44LTE2IDE4LTEuMiAxMC0zOCAyOTEuOC0zOCAyOTEuOGwzMDIuNiA1Mi41IDAtNDM4LjNjLTEuNSAuMS0yLjkgLjItNC40IC40IDAgMC01LjYgMS42LTE0LjggNC40ek0yMzMuNiA4Ny43Yy0xNiA0LjgtMzMuNiAxMC40LTUwLjggMTUuNiA0LjgtMTguOCAxNC40LTM3LjYgMjUuNi01MCA0LjQtNC40IDEwLjQtOS42IDE3LjItMTIuOCA2LjggMTQuNCA4LjQgMzQgOCA0Ny4yek0yMDAuOCAyNC40YzUtLjIgMTAgMS4xIDE0LjQgMy42LTYuNCAzLjItMTIuOCA4LjQtMTguOCAxNC40LTE1LjIgMTYuNC0yNi44IDQyLTMxLjYgNjYuNS0xNC40IDQuNC0yOC44IDguOC00MiAxMi44IDguOC0zOC40IDQxLjItOTYuNCA3OC05Ny4yek0xNTQuNCAyNDQuNmMxLjYgMjUuNiA2OS4yIDMxLjIgNzMuMiA5MS43IDIuOCA0Ny42LTI1LjIgODAuMS02NS42IDgyLjUtNDguOCAzLjItNzUuNi0yNS42LTc1LjYtMjUuNmwxMC40LTQ0czI2LjggMjAuNCA0OC40IDE4LjhjMTQtLjggMTkuMi0xMi40IDE4LjgtMjAuNC0yLTMzLjYtNTcuMi0zMS42LTYwLjgtODYuOS0zLjItNDYuNCAyNy4yLTkzLjMgOTQuNS05Ny43IDI2LTEuNiAzOS4yIDQuOCAzOS4yIDQuOGwtMTUuMiA1Ny42cy0xNy4yLTgtMzcuNi02LjRjLTI5LjYgMi0zMCAyMC44LTI5LjYgMjUuNnpNMjQ5LjYgODIuOWMwLTEyLTEuNi0yOS4yLTcuMi00My42IDE4LjQgMy42IDI3LjIgMjQgMzEuMiAzNi40LTcuMiAyLTE1LjIgNC40LTI0IDcuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlUmVkZGl0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1yZWRkaXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicmVkZGl0LXNxdWFyZSJdLCAiZjFhMiIsICJNNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMyek0zMDUuOSAxNjYuNGMyMC42IDAgMzcuMy0xNi43IDM3LjMtMzcuM3MtMTYuNy0zNy4zLTM3LjMtMzcuM2MtMTggMC0zMy4xIDEyLjgtMzYuNiAyOS44LTMwLjIgMy4yLTUzLjggMjguOC01My44IDU5LjlsMCAuMmMtMzIuOCAxLjQtNjIuOCAxMC43LTg2LjYgMjUuNS04LjgtNi44LTE5LjktMTAuOS0zMi0xMC45LTI4LjkgMC01Mi4zIDIzLjQtNTIuMyA1Mi4zIDAgMjEgMTIuMyAzOSAzMC4xIDQ3LjQgMS43IDYwLjcgNjcuOSAxMDkuNiAxNDkuMyAxMDkuNnMxNDcuNi00OC45IDE0OS4zLTEwOS43YzE3LjctOC40IDI5LjktMjYuNCAyOS45LTQ3LjMgMC0yOC45LTIzLjQtNTIuMy01Mi4zLTUyLjMtMTIgMC0yMyA0LTMxLjkgMTAuOC0yNC0xNC45LTU0LjMtMjQuMi04Ny41LTI1LjRsMC0uMWMwLTIyLjIgMTYuNS00MC43IDM3LjktNDMuNyAzLjkgMTYuNSAxOC43IDI4LjcgMzYuMyAyOC43bC4yLS4yek0xNTUgMjQ4LjFjMTQuNiAwIDI1LjggMTUuNCAyNSAzNC40cy0xMS44IDI1LjktMjYuNSAyNS45LTI3LjUtNy43LTI2LjYtMjYuNyAxMy41LTMzLjUgMjguMS0zMy41bDAtLjF6bTE2Ni40IDMzLjVjLjkgMTktMTIgMjYuNy0yNi42IDI2LjdzLTI1LjYtNi45LTI2LjUtMjUuOSAxMC4zLTM0LjQgMjUtMzQuNCAyNy4zIDE0LjYgMjguMSAzMy41bDAgLjF6bS00Mi4xIDQ5LjZjLTkgMjEuNS0zMC4zIDM2LjctNTUuMSAzNi43cy00Ni4xLTE1LjEtNTUuMS0zNi43Yy0xLjEtMi42IC43LTUuNCAzLjQtNS43IDE2LjEtMS42IDMzLjUtMi41IDUxLjctMi41czM1LjYgLjkgNTEuNyAyLjVjMi43IC4zIDQuNSAzLjEgMy40IDUuN3oiXQogICAgfTsKICAgIGZhUmVkZGl0U3F1YXJlID0gZmFTcXVhcmVSZWRkaXQ7CiAgICBmYUNyZWF0aXZlQ29tbW9uc05jID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlOCIsICJNMjU1LjYgOEMzOTUuNCA4IDUwNCAxMTUuOSA1MDQgMjU2IDUwNCA0MDMuMiAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS4xIDUwNCA4IDM5My4yIDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4ek02My44IDE4OS4xYy03LjQgMjAuNC0xMS4xIDQyLjctMTEuMSA2Ni45IDAgMTEwLjkgOTIuMSAyMDIuNCAyMDMuNyAyMDIuNCAxMjIuNCAwIDE3Ny4yLTEwMS44IDE3OC41LTEwNC4xbC05My40LTQxLjZjLTcuNyAzNy4xLTQxLjIgNTMtNjguMiA1NS40bDAgMzguMS0yOC44IDAgMC0zOC4yYy0yNy41LS4zLTUyLjYtMTAuMi03NS4zLTI5LjdsMzQuMS0zNC41YzMxLjcgMjkuNCA4Ni40IDMxLjggODYuNC0yLjIgMC02LjItMi4yLTExLjItNi42LTE1LjEtMTQuMi02LTEuOC0uMS0yMTkuMy05Ny40ek0yNTYuNCA1Mi4zQzIxOCA1Mi4zIDE0NCA2MSA4NS45IDE0NS4zbDk0LjggNDIuNWMxMC0zMS4zIDQwLjQtNDIuOSA2My44LTQ0LjNsMC0zOC4xIDI4LjggMCAwIDM4LjFjMjIuNyAxLjIgNDMuNCA4LjkgNjIgMjNMMzAzIDE5OS43Yy00Mi43LTI5LjktODMuNS04LTcwIDExLjEgNTMuNCAyNC4xIDQzLjggMTkuOCA5MyA0MS42bDEyNy4xIDU2LjdjNC4xLTE3LjQgNi4yLTM1LjEgNi4yLTUzLjEgMC01Ny0xOS44LTEwNS01OS4zLTE0My45LTM5LjMtMzkuOS04Ny4yLTU5LjgtMTQzLjYtNTkuOHoiXQogICAgfTsKICAgIGZhR2FsYWN0aWNSZXB1YmxpYyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnYWxhY3RpYy1yZXB1YmxpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTBjIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAxIDAgNDk2IDI0OCAyNDggMCAxIDEgMC00OTZ6bTAgMTYuNWEyMzEuNSAyMzEuNSAwIDEgMCAwIDQ2Mi45IDIzMS41IDIzMS41IDAgMSAwIDAtNDYyLjl6bTI3LjYgMjEuOGwwIDI0LjZjMzAuMyA0LjUgNTkgMTYuMyA4My42IDM0LjVsMTcuNC0xNy40Yy0yOC43LTIyLjEtNjMuMy0zNi45LTEwMS00MS44em0tNTUuNCAuMWMtMzcuNiA0LjktNzIuMiAxOS44LTEwMC45IDQxLjlsMTcuMyAxNy40IC4xIDBjMjQuMS0xNy44IDUyLjYtMzAuMSA4My41LTM0LjdsMC0yNC41em0xMi4yIDUwLjJsMCA4Mi45Yy0xMCAyLTE5LjQgNS45LTI3LjcgMTEuNGwtNTguNi01OC42LTIxLjkgMjEuOSA1OC43IDU4LjdjLTUuNSA4LjItOS40IDE3LjYtMTEuNSAyNy42bC04Mi45IDAgMCAzMSA4Mi45IDBjMiAxMCA2IDE5LjMgMTEuNSAyNy41bC01OC43IDU4LjcgMjEuOSAyMS45IDU4LjYtNTguNmM4LjQgNS42IDE3LjggOS41IDI3LjcgMTEuNWwwIDgyLjkgMzEgMCAwLTgyLjljMTAtMiAxOS40LTYuMSAyNy42LTExLjVsNTguNyA1OC43IDIxLjktMjEuOS01OC43LTU4LjdjNS41LTguMiA5LjUtMTcuNSAxMS41LTI3LjVsODIuOSAwIDAtMzEtODIuOSAwYy0yLTEwLTYtMTkuNC0xMS41LTI3LjZsNTguNy01OC43LTIxLjktMjEuOS01OC43IDU4LjdjLTguMi01LjUtMTcuNi05LjUtMjcuNi0xMS41bDAtODIuOS0zMSAwem0xODMuMiAzMC43bC0xNy40IDE3LjRjMTguMyAyNC42IDMwLjIgNTMuNCAzNC43IDgzLjdsMjQuNiAwYy01LTM3LjctMTkuOC03Mi4zLTQxLjktMTAxem0tMzM1LjYgLjFjLTIyLjEgMjguNy0zNi45IDYzLjMtNDEuOCAxMDAuOWwyNC42IDBjNC42LTMxIDE2LjgtNTkuNCAzNC42LTgzLjVMODguMiAxMjcuNHpNNDYuMyAyODMuN2M0LjkgMzcuNiAxOS43IDcyLjIgNDEuOCAxMDAuOWwxNy40LTE3LjRDODcuNyAzNDMuMSA3NS42IDMxNC42IDcxIDI4My43bC0yNC42IDAgMCAwem0zOTQuNyAwYy00LjYgMzEtMTYuOCA1OS41LTM0LjcgODMuNmwxNy40IDE3LjRjMjIuMS0yOC43IDM3LTYzLjMgNDEuOS0xMDFsLTI0LjYgMHpNMTQ0LjcgNDA2LjRsLTE3LjQgMTcuNGMyOC43IDIyLjEgNjMuMyAzNyAxMDEgNDEuOWwwLTI0LjZjLTMxLTQuNi01OS41LTE2LjgtODMuNi0zNC42em0yMjIuNSAwYy0yNC4xIDE3LjgtNTIuNiAzMC4xLTgzLjYgMzQuN2wwIDI0LjZjMzcuNy00LjkgNzIuMi0xOS44IDEwMS00MS44bC0xNy4zLTE3LjQtLjEgMHoiXQogICAgfTsKICAgIGZhRmFjZWJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmFjZWJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MmUzXSwgImYwOWEiLCAiTTUxMiAyNTZDNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3NiA4Mi43IDQ3Ni44IDE5NC4yIDUwNC41bDAtMTcwLjMtNTIuOCAwIDAtNzguMiA1Mi44IDAgMC0zMy43YzAtODcuMSAzOS40LTEyNy41IDEyNS0xMjcuNSAxNi4yIDAgNDQuMiAzLjIgNTUuNyA2LjRsMCA3MC44Yy02LS42LTE2LjUtMS0yOS42LTEtNDIgMC01OC4yIDE1LjktNTguMiA1Ny4ybDAgMjcuOCA4My42IDAtMTQuNCA3OC4yLTY5LjMgMCAwIDE3NS45QzQxMy44IDQ5NC44IDUxMiAzODYuOSA1MTIgMjU2eiJdCiAgICB9OwogICAgZmFHaXRsYWIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0bGFiIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOTYiLCAiTTUwNCAyMDQuNmwtLjctMS44LTY5LjctMTgxLjhjLTEuNC0zLjYtMy45LTYuNi03LjItOC42LTIuNC0xLjYtNS4xLTIuNS04LTIuOHMtNS43IC4xLTguNCAxLjEtNS4xIDIuNy03LjEgNC44Yy0xLjkgMi4xLTMuMyA0LjctNC4xIDcuNGwtNDcgMTQ0LTE5MC41IDAtNDcuMS0xNDRjLS44LTIuOC0yLjItNS4zLTQuMS03LjQtMi0yLjEtNC40LTMuNy03LjEtNC44LTIuNi0xLTUuNS0xLjQtOC40LTEuMXMtNS42IDEuMi04IDIuOGMtMy4yIDItNS44IDUuMS03LjIgOC42TDkuOCAyMDIuOCA5IDIwNC42Yy0xMCAyNi4yLTExLjMgNTUtMy41IDgyIDcuNyAyNi45IDI0IDUwLjcgNDYuNCA2Ny42bC4zIC4yIC42IC40IDEwNiA3OS41YzM4LjUgMjkuMSA2Ni43IDUwLjMgODQuNiA2My45IDMuNyAxLjkgOC4zIDQuMyAxMyA0LjNzOS4zLTIuNCAxMy00LjNjMTcuOS0xMy41IDQ2LjEtMzQuOSA4NC42LTYzLjlsMTA2LjctNzkuOSAuMy0uM2MyMi40LTE2LjkgMzguNy00MC42IDQ1LjYtNjcuNSA4LjYtMjcgNy40LTU1LjgtMi42LTgyeiJdCiAgICB9OwogICAgZmFRcSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJxcSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWQ2IiwgIk00MzQuMSA0MjAuNGMtMTEuNSAxLjQtNDQuOS01Mi43LTQ0LjktNTIuNyAwIDMxLjMtMTYuMSA3Mi4yLTUxIDEwMS44IDE2LjggNS4yIDU0LjggMTkuMiA0NS44IDM0LjQtNy4zIDEyLjMtMTI1LjUgNy45LTE1OS42IDQtMzQuMSAzLjgtMTUyLjMgOC4zLTE1OS42LTQtOS0xNS4yIDI4LjktMjkuMiA0NS44LTM0LjQtMzQuOS0yOS41LTUxLjEtNzAuNC01MS4xLTEwMS44IDAgMC0zMy4zIDU0LjEtNDQuOSA1Mi43LTUuNC0uNi0xMi40LTI5LjYgOS4zLTk5LjcgMTAuMy0zMyAyMi02MC41IDQwLjEtMTA1LjgtMy4xLTExNi45IDQ1LjItMjE1IDE2MC4zLTIxNSAxMTMuNyAwIDE2My4yIDk2LjEgMTYwLjMgMjE1IDE4LjEgNDUuMiAyOS45IDcyLjkgNDAuMSAxMDUuOCAyMS44IDcwLjEgMTQuNyA5OS4xIDkuMyA5OS43eiJdCiAgICB9OwogICAgZmFTdHJpcGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RyaXBlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MjkiLCAiTTE2NSAxNDQuN2wtNDMuMyA5LjItLjIgMTQyLjRjMCAyNi4zIDE5LjggNDMuMyA0Ni4xIDQzLjMgMTQuNiAwIDI1LjMtMi43IDMxLjItNS45bDAtMzMuOGMtNS43IDIuMy0zMy43IDEwLjUtMzMuNy0xNS43bDAtNjMuMiAzMy43IDAgMC0zNy44LTMzLjcgMC0uMS0zOC41em04OS4xIDUxLjZsLTIuNy0xMy4xLTM4LjQgMCAwIDE1My4yIDQ0LjMgMCAwLTEwMy4xYzEwLjUtMTMuOCAyOC4yLTExLjEgMzMuOS05LjNsMC00MC44Yy02LTIuMS0yNi43LTYtMzcuMSAxMy4xek0zNDYuNCAxMjRsLTQ0LjYgOS41IDAgMzYuMiA0NC42LTkuNSAwLTM2LjJ6TTQ0LjkgMjI4LjNjMC02LjkgNS44LTkuNiAxNS4xLTkuNyAxMy41IDAgMzAuNyA0LjEgNDQuMiAxMS40bDAtNDEuOGMtMTQuNy01LjgtMjkuNC04LjEtNDQuMS04LjEtMzYgMC02MCAxOC44LTYwIDUwLjIgMCA0OS4yIDY3LjUgNDEuMiA2Ny41IDYyLjQgMCA4LjItNy4xIDEwLjktMTcgMTAuOS0xNC43IDAtMzMuNy02LjEtNDguNi0xNC4ybDAgNDBjMTYuNSA3LjEgMzMuMiAxMC4xIDQ4LjUgMTAuMSAzNi45IDAgNjIuMy0xNS44IDYyLjMtNDcuOCAwLTUyLjktNjcuOS00My40LTY3LjktNjMuNHpNNjQwIDI2MS42YzAtNDUuNS0yMi04MS40LTY0LjItODEuNHMtNjcuOSAzNS45LTY3LjkgODEuMWMwIDUzLjUgMzAuMyA3OC4yIDczLjUgNzguMiAyMS4yIDAgMzcuMS00LjggNDkuMi0xMS41bDAtMzMuNGMtMTIuMSA2LjEtMjYgOS44LTQzLjYgOS44LTE3LjMgMC0zMi41LTYuMS0zNC41LTI2LjlsODYuOSAwYy4yLTIuMyAuNi0xMS42IC42LTE1Ljl6bS04Ny45LTE2LjhjMC0yMCAxMi4zLTI4LjQgMjMuNC0yOC40IDEwLjkgMCAyMi41IDguNCAyMi41IDI4LjRsLTQ1LjkgMHpNNDM5LjIgMTgwLjJjLTE3LjQgMC0yOC42IDguMi0zNC44IDEzLjlsLTIuMy0xMS0zOS4xIDAgMCAyMDQuOCA0NC40LTkuNCAuMS01MC4yYzYuNCA0LjcgMTUuOSAxMS4yIDMxLjQgMTEuMiAzMS44IDAgNjAuOC0yMy4yIDYwLjgtNzkuNiAuMS01MS42LTI5LjMtNzkuNy02MC41LTc5Ljd6TTQyOC42IDMwMi43Yy0xMC40IDAtMTYuNi0zLjgtMjAuOS04LjRsLS4zLTY2YzQuNi01LjEgMTEtOC44IDIxLjItOC44IDE2LjIgMCAyNy40IDE4LjIgMjcuNCA0MS40IC4xIDIzLjktMTAuOSA0MS44LTI3LjQgNDEuOHpNMzAxLjkgMzM2LjRsNDQuNiAwIDAtMTUzLjItNDQuNiAwIDAgMTUzLjJ6Il0KICAgIH07CiAgICBmYURhaWx5bW90aW9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRhaWx5bW90aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNTIiLCAiTTI5OC45IDI2N2MtNy40LTQuMi0xNS44LTYuMy0yNC40LTYuMi0xMy4yIDAtMjQuNCA0LjQtMzMuNCAxMy4zcy0xMy42IDIwLTEzLjYgMzMuNGMwIDE0LjEgNC40IDI1LjYgMTMuMyAzNC42czIwIDEzLjQgMzMuNCAxMy40YzEzLjcgMCAyNS00LjYgMzQuMS0xMy44UzMyMiAzMjEuMSAzMjIgMzA3LjVjMC04LjItMi4xLTE2LjMtNi4xLTIzLjUtNC03LjEtOS44LTEzLTE3LTE3ek0wIDMybDAgNDQ4IDQ0OCAwIDAtNDQ4LTQ0OCAwek0zNzQuNyA0MDUuM2wtNTMuMSAwIDAtMjMuOS0uNyAwYy0xMC41IDE3LjUtMjkuMSAyNi4yLTU1LjggMjYuMi0xOC40IDAtMzQuNy00LjQtNDguOS0xMy4xLTE0LjEtOC42LTI1LjUtMjEtMzIuOS0zNS44LTcuNy0xNS4xLTExLjYtMzIuMS0xMS42LTUwLjkgMC0xOC40IDMuOS0zNS4xIDExLjgtNTAuMiA3LjUtMTQuNyAxOC45LTI3LjEgMzIuOS0zNS44IDE0LjEtOC43IDMwLTEzLjEgNDcuNy0xMy4xIDEwLjItLjEgMjAuMiAxLjYgMjkuNyA1LjIgOC45IDMuNSAxNy4yIDkuMSAyNSAxN2wwLTc3LjkgNTUuOC0xMi4xIDAgMjY0LjR6Il0KICAgIH07CiAgICBmYVN0ZWFtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInN0ZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjYiLCAiTTUwNCAyNTZjMCAxMzctMTExLjIgMjQ4LTI0OC40IDI0OC0xMTMuOCAwLTIwOS42LTc2LjMtMjM5LTE4MC40bDk1LjIgMzkuM2M2LjQgMzIuMSAzNC45IDU2LjQgNjguOSA1Ni40IDM5LjIgMCA3MS45LTMyLjQgNzAuMi03My41bDg0LjUtNjAuMmM1Mi4xIDEuMyA5NS44LTQwLjkgOTUuOC05My41IDAtNTEuNi00Mi05My41LTkzLjctOTMuNXMtOTMuNyA0Mi05My43IDkzLjVsMCAxLjItNTkuMiA4NS43Yy0xNS41LS45LTMwLjcgMy40LTQzLjUgMTIuMUw4IDIzNi4xQzE4LjIgMTA4LjQgMTI1LjEgOCAyNTUuNiA4IDM5Mi44IDggNTA0IDExOSA1MDQgMjU2ek0xNjMuNyAzODQuM2wtMzAuNS0xMi42YzUuNiAxMS42IDE1LjMgMjAuOCAyNy4yIDI1LjggMjYuOSAxMS4yIDU3LjgtMS42IDY5LTI4LjQgNS40LTEzIDUuNS0yNy4zIC4xLTQwLjNTMjE0IDMwNS42IDIwMSAzMDAuMmMtMTIuOS01LjQtMjYuNy01LjItMzguOS0uNmwzMS41IDEzYzE5LjggOC4yIDI5LjIgMzAuOSAyMC45IDUwLjctOC4zIDE5LjktMzEgMjkuMi01MC44IDIxek0zMzcuNSAxMjkuOGE2Mi4zIDYyLjMgMCAxIDEgMCAxMjQuNiA2Mi4zIDYyLjMgMCAxIDEgMC0xMjQuNnptLjEgMTA5YTQ2LjggNDYuOCAwIDEgMCAwLTkzLjYgNDYuOCA0Ni44IDAgMSAwIDAgOTMuNnoiXQogICAgfTsKICAgIGZhU25hcGNoYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic25hcGNoYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEyNCwgInNuYXBjaGF0LWdob3N0Il0sICJmMmFiIiwgIk00OTcuMSAzNjYuNmMtMy40LTkuMi05LjgtMTQuMS0xNy4xLTE4LjItMS40LS44LTIuNi0xLjUtMy43LTEuOS0yLjItMS4xLTQuNC0yLjItNi42LTMuNC0yMi44LTEyLjEtNDAuNi0yNy4zLTUzLTQ1LjQtMy41LTUuMS02LjYtMTAuNS05LjEtMTYuMS0xLjEtMy0xLTQuNy0uMi02LjMgLjgtMS4yIDEuNy0yLjIgMi45LTMgMy45LTIuNiA4LTUuMiAxMC43LTcgNC45LTMuMiA4LjgtNS43IDExLjItNy40IDkuNC02LjUgMTUuOS0xMy41IDIwLTIxLjMgMi45LTUuNCA0LjUtMTEuMyA0LjktMTcuNHMtLjYtMTIuMi0yLjgtMTcuOGMtNi4yLTE2LjMtMjEuNi0yNi40LTQwLjMtMjYuNC0zLjkgMC03LjkgLjQtMTEuNyAxLjItMSAuMi0yLjEgLjUtMy4xIC43IC4yLTExLjItLjEtMjIuOS0xLjEtMzQuNS0zLjUtNDAuOC0xNy44LTYyLjEtMzIuNy03OS4yLTkuNS0xMC43LTIwLjctMTkuNy0zMy4yLTI2LjctMjIuNi0xMi45LTQ4LjItMTkuNC03Ni4xLTE5LjRzLTUzLjQgNi41LTc2IDE5LjRjLTEyLjUgNy0yMy43IDE2LjEtMzMuMyAyNi44LTE0LjkgMTctMjkuMiAzOC40LTMyLjcgNzkuMi0xIDExLjYtMS4yIDIzLjQtMS4xIDM0LjUtMS0uMy0yLS41LTMuMS0uNy0zLjktLjgtNy44LTEuMi0xMS43LTEuMi0xOC43IDAtMzQuMSAxMC4xLTQwLjMgMjYuNC0yLjIgNS43LTMuMiAxMS44LTIuOCAxNy44czIgMTIgNC45IDE3LjRjNC4xIDcuOCAxMC43IDE0LjcgMjAgMjEuMyAyLjUgMS43IDYuNCA0LjIgMTEuMiA3LjQgMi42IDEuNyA2LjUgNC4yIDEwLjMgNi43IDEuMyAuOSAyLjQgMiAzLjMgMy4zIC44IDEuNiAuOCAzLjQtLjQgNi42LTIuNSA1LjUtNS41IDEwLjgtOC45IDE1LjgtMTIuMSAxNy43LTI5LjQgMzIuNi01MS40IDQ0LjYtMTEuNyA2LjItMjMuOSAxMC4zLTI5IDI0LjMtMy45IDEwLjUtMS4zIDIyLjUgOC41IDMyLjYgMy42IDMuOCA3LjggNi45IDEyLjQgOS40IDkuNiA1LjMgMTkuOCA5LjMgMzAuMyAxMi4xIDIuMiAuNiA0LjMgMS41IDYuMSAyLjcgMy42IDMuMSAzLjEgNy45IDcuOCAxNC44IDIuNCAzLjYgNS40IDYuNyA5IDkuMSAxMCA2LjkgMjEuMyA3LjQgMzMuMiA3LjggMTAuOCAuNCAyMyAuOSAzNi45IDUuNSA1LjggMS45IDExLjggNS42IDE4LjcgOS45IDE2LjcgMTAuMyAzOS42IDI0LjMgNzcuOCAyNC4zczYxLjMtMTQuMSA3OC4xLTI0LjRjNi45LTQuMiAxMi45LTcuOSAxOC41LTkuOCAxMy45LTQuNiAyNi4yLTUuMSAzNi45LTUuNSAxMS45LS41IDIzLjItLjkgMzMuMi03LjggNC4yLTIuOSA3LjctNi43IDEwLjItMTEuMiAzLjQtNS44IDMuNC05LjkgNi42LTEyLjggMS44LTEuMiAzLjctMi4xIDUuOC0yLjYgMTAuNy0yLjggMjEtNi45IDMwLjgtMTIuMiA0LjktMi42IDkuMy02LjEgMTMtMTAuMmwuMS0uMmM5LjItOS45IDExLjUtMjEuNSA3LjgtMzEuOHptLTM0IDE4LjNjLTIwLjcgMTEuNS0zNC41IDEwLjItNDUuMyAxNy4xLTkuMSA1LjktMy43IDE4LjUtMTAuMyAyMy4xLTguMSA1LjYtMzIuMi0uNC02My4yIDkuOS0yNS42IDguNS00MiAzMi44LTg4IDMyLjhzLTYyLTI0LjMtODguMS0zMi45Yy0zMS0xMC4zLTU1LjEtNC4yLTYzLjItOS45LTYuNi00LjYtMS4yLTE3LjItMTAuMy0yMy4xLTEwLjctNi45LTI0LjUtNS43LTQ1LjMtMTcuMS0xMy4yLTcuMy01LjctMTEuOC0xLjMtMTMuOSA3NS4xLTM2LjQgODcuMS05Mi42IDg3LjctOTYuNyAuNi01IDEuNC05LTQuMi0xNC4xLTUuNC01LTI5LjItMTkuNy0zNS44LTI0LjMtMTAuOS03LjYtMTUuNy0xNS4zLTEyLjItMjQuNiAyLjUtNi41IDguNS04LjkgMTQuOS04LjkgMiAwIDQgLjIgNiAuNyAxMiAyLjYgMjMuNyA4LjYgMzAuNCAxMC4yIC44IC4yIDEuNiAuMyAyLjUgLjMgMy42IDAgNC45LTEuOCA0LjYtNS45LS44LTEzLjEtMi42LTM4LjctLjYtNjIuNiAyLjgtMzIuOSAxMy40LTQ5LjIgMjYtNjMuNiA2LjEtNi45IDM0LjUtMzcgODguOS0zN1MzMzkgNzQuMiAzNDUgODEuMWMxMi42IDE0LjQgMjMuMiAzMC43IDI2IDYzLjYgMi4xIDIzLjkgLjMgNDkuNS0uNiA2Mi42LS4zIDQuMyAxIDUuOSA0LjYgNS45IC44IDAgMS43LS4xIDIuNS0uMyA2LjctMS42IDE4LjQtNy42IDMwLjQtMTAuMiAyLS40IDQtLjcgNi0uNyA2LjQgMCAxMi40IDIuNSAxNC45IDguOSAzLjUgOS40LTEuMiAxNy0xMi4yIDI0LjYtNi42IDQuNi0zMC40IDE5LjMtMzUuOCAyNC4zLTUuNiA1LjEtNC44IDkuMS00LjIgMTQuMiAuNSA0LjIgMTIuNSA2MC40IDg3LjcgOTYuNyA0LjQgMi4yIDExLjkgNi43LTEuMyAxNC4xeiJdCiAgICB9OwogICAgZmFTbmFwY2hhdEdob3N0ID0gZmFTbmFwY2hhdDsKICAgIGZhR2FsYWN0aWNTZW5hdGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2FsYWN0aWMtc2VuYXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MGQiLCAiTTI0OS45IDMzLjVsMCAyNi4xYy0xMy42IDIwLjYtMjMuOSAxMDguNi0yNC41IDIxNS4zIDExLjctMTUuNiAxOS4xLTMzLjMgMTkuMS00OC4ybDAtMTYuOWMwLTUuMyAuOC0xMC41IDIuMi0xNS42IC42LTIuMSAxLjQtNC4xIDIuNi01LjhzMy40LTMuOCA2LjctMy44IDUuNCAyLjEgNi43IDMuOGMxLjIgMS44IDIgMy43IDIuNiA1LjggMS40IDUuMSAyLjIgMTAuMyAyLjIgMTUuNmwwIDE2LjljMCAxNC45IDcuNCAzMi42IDE5LjEgNDguMi0uNi0xMDYuOC0xMC45LTE5NC43LTI0LjUtMjE1LjNsMC0yNi4xLTEyLjMgMHpNMjIzLjUgMTgxLjNjLTkuNSAyLjEtMTguNyA1LjItMjcuNSA5LjEgOC45IDE2LjEgOS44IDMyLjYgMS43IDM3LjMtOCA0LjYtMjEuOC00LjItMzEuNC0xOS44LTExLjYgOC44LTIxLjkgMTkuMy0zMC42IDMxLjEgMTQuNyA5LjYgMjIuOSAyMi45IDE4LjMgMzAuNy00LjUgNy43LTIwIDcuMS0zNS41LTEtNS44IDEzLjItOS43IDI3LjUtMTEuNiA0Mi40IDkuNyAuMiAxOC43IDIuNCAyNi4yIDYgMTcuOC0uMyAzMi44LTIgNDAuNS00LjIgNS42LTI2LjQgMjMtNDguMiA0Ni4zLTU5LjUgLjctMjUuNiAxLjktNDkuNyAzLjUtNzIuMXptNjUgMGMxLjYgMjIuNCAyLjcgNDYuNSAzLjUgNzIuMSAyMy4zIDExLjMgNDAuOCAzMy4yIDQ2LjMgNTkuNSA3LjcgMi4zIDIyLjcgMy45IDQwLjUgNC4yIDcuNS0zLjcgMTYuNS01LjggMjYuMi02LTEuOS0xNC45LTUuOS0yOS4yLTExLjctNDIuNC0xNS40IDguMS0zMC45IDguNy0zNS41IDEtNC42LTcuNyAzLjYtMjEuMSAxOC4zLTMwLjctOC43LTExLjgtMTktMjIuMy0zMC42LTMxLjEtOS41IDE1LjYtMjMuNCAyNC40LTMxLjQgMTkuOC04LjEtNC42LTcuMi0yMS4yIDEuNy0zNy4zLTguOC0zLjktMTgtNy0yNy40LTkuMXpNMjU2IDE4OS45Yy0zLjIgMC01LjkgOC44LTYuMSAxOS45bDAgMCAwIDE2LjljMCA0MS40LTQ5IDk1LTkzLjUgOTUtNTIgMC0xMjIuOC0xLjQtMTU2LjQgMjkuMmwwIDIuNWM5LjQgMTcuMSAyMC42IDMzLjIgMzMuMiA0OCAxMi41LTIxLjEgNTEuNi00MSAxMDgtNDEuNCA0NS43IDEgNzkgMjAuMyA5MC44IDQwLjkgMCAwIDAgMCAwIC4xIDcuNyAyLjEgMTUuOCAzLjIgMjQgMy4yIDguMiAwIDE2LjQtMS4xIDI0LTMuMiAwIDAgMCAwIDAtLjEgMTEuNy0yMC41IDQ1LjEtMzkuOCA5MC44LTQwLjkgNTYuNCAuNCA5NS41IDIwLjMgMTA4IDQxLjQgMTIuNi0xNC44IDIzLjgtMzAuOSAzMy4yLTQ4bDAtMi41Yy0zMy42LTMwLjYtMTA0LjQtMjkuMi0xNTYuNC0yOS4yLTQ0LjUgMC05My41LTUzLjYtOTMuNS05NWwwLTE2LjktLjEgMGMtLjItMTEuMS0yLjktMTkuOS02LjEtMTkuOXptMCAxNzcuOWE0MC42IDQwLjYgMCAxIDEgMC04MS4zIDQwLjYgNDAuNiAwIDEgMSAwIDgxLjN6bTAtNzMuNmEzMyAzMyAwIDEgMCAwIDY1LjkgMzMgMzMgMCAxIDAgMC02NS45em0wIDU5LjhhMjYuOCAyNi44IDAgMSAxIDAtNTMuNiAyNi44IDI2LjggMCAxIDEgMCA1My42em0tMTE0LjggMTNjLTEwLjIgLjEtMjEuNiAuNC0zMC41IDEuNyAuNCA0LjQgMS41IDE4LjYgNy4xIDI5LjggOS4xLTIuNiAxOC40LTMuOSAyNy42LTMuOSA0MS4zIC45IDcxLjUgMzQuNCA3OC4zIDc0LjVsLjEgNC43YzEwLjQgMS45IDIxLjIgMi45IDMyLjIgMi45IDExIDAgMjEuOC0xIDMyLjItMi45bC4xLTQuN2M2LjgtNDAuMSAzNy03My41IDc4LjMtNzQuNSA5LjMgMCAxOC41IDEuMyAyNy42IDMuOSA1LjYtMTEuMSA2LjctMjUuMyA3LjEtMjkuOC04LjktMS4zLTIwLjMtMS42LTMwLjUtMS43LTE4LjggLjQtMzUuMiA0LjItNDguNiA5LjctMTIuNSAxNi0yOS4yIDMwLTQ5LjYgMzMuMS0uMSAwLS4yIDAtLjMgMCAwIDAtLjEgMC0uMiAuMS01LjIgMS4xLTEwLjYgMS42LTE2LjIgMS42LTUuNSAwLTEwLjktLjUtMTYuMi0xLjYtLjEgMC0uMSAwLS4yLS4xLS4xIDAtLjIgMC0uMyAwLTIwLjQtMy0zNy0xNy00OS42LTMzLjEtMTMuNC01LjUtMjkuOS05LjItNDguNi05Ljd6Il0KICAgIH07CiAgICBmYVBob2VuaXhGcmFtZXdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGhvZW5peC1mcmFtZXdvcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjNkYyIsICJNMjEyLjkgMzQ0LjNjMy44LS4xIDIyLjgtMS40IDI1LjYtMi4yLTIuNC0yLjYtNDMuNi0xLTY4LTQ5LjYtNC4zLTguNi03LjUtMTcuNi02LjQtMjcuNiAyLjktMjUuNSAzMi45LTMwIDUyLTE4LjUgMzYgMjEuNiA2My4zIDkxLjMgMTEzLjcgOTcuNSAzNyA0LjUgODQuNi0xNyAxMDguMi00NS40LS42LS4xLS44LS4yLTEtLjEtLjQgLjEtLjggLjItMS4xIC4zLTMzLjMgMTIuMS05NC4zIDkuNy0xMzQuNy0xNC44LTM3LjYtMjIuOC01My4xLTU4LjctNTEuOC03NC42IDEuOC0yMS4zIDIyLjktMjMuMiAzNS45LTE5LjYgMTQuNCAzLjkgMjQuNCAxNy42IDM4LjkgMjcuNCAxNS42IDEwLjQgMzIuOSAxMy43IDUxLjMgMTAuMyAxNC45LTIuNyAzNC40LTEyLjMgMzYuNS0xNC41LTEuMS0uMS0xLjgtLjEtMi41LS4yLTYuMi0uNi0xMi40LS44LTE4LjUtMS43LTExMS4yLTE2LjUtMTI4LjktMTYzLjYtMjUyLjUtMTczLjEtNDQuMy0zLjQtOTkuNCA4LjEtMTM2LjMgMzUtLjggLjYtMS41IDEuMi0yLjIgMS44IC4xIC4yIC4xIC4zIC4yIC41IC44IDAgMS42LS4xIDIuNC0uMiA2LjMtMSAxMi41LS44IDE4LjcgLjMgMjMuOCA0LjMgNDcuNyAyMy4xIDU1LjkgNzYuNSA1LjMgMzQuMy0uNyA1MC44IDggODYuMSAxOSA3Ny4xIDkxIDEwNy42IDEyNy43IDEwNi40ek03NS4zIDY0LjljLS45LTEtLjktMS4yLTEuMy0yIDEyLjEtMi42IDI0LjItNC4xIDM2LjYtNC44LTEuMSAxNC43LTIyLjIgMjEuMy0zNS4zIDYuOHpNMjcyLjIgNDE1LjRjLTQyLjggMS4yLTkyLTI2LjctMTIzLjUtNjEuNC00LjYtNS0xNi44LTIwLjItMTguNi0yMy40bC40LS40YzYuNiA0LjEgMjUuNyAxOC42IDU0LjggMjcgMjQuMiA3IDQ4LjEgNi4zIDcxLjYtMy4zIDIyLjctOS4zIDQxLS41IDQzLjEgMi45LTE4LjUgMy44LTIwLjEgNC40LTI0IDcuOS01LjEgNC40LTQuNiAxMS43IDcgMTcuMiAyNi4yIDEyLjQgNjMtMi44IDk3LjIgMjUuNCAyLjQgMiA4LjEgNy44IDEwLjEgMTAuNy0uMSAuMi0uMyAuMy0uNCAuNS00LjgtMS41LTE2LjQtNy41LTQwLjItOS4zLTI0LjctMi00Ni4zIDUuMy03Ny41IDYuMnpNNDQ3IDE2My40YzE2LjQtNS4yIDQxLjMtMTMuNCA2Ni41LTMuMyAxNi4xIDYuNSAyNi4yIDE4LjcgMzIuMSAzNC42IDMuNSA5LjQgNS4xIDE5LjcgNS4xIDI4LjctLjIgMC0uNCAwLS42IC4xLS4yLS40LS40LS45LS41LTEuMy01LTIyLTI5LjktNDMuOC02Ny42LTI5LjktNTAuMiAxOC42LTEzMC40IDkuNy0xNzYuOS00OC0uNy0uOS0yLjQtMS43LTEuMy0zLjIgLjEtLjIgMi4xIC42IDMgMS4zIDE4LjEgMTMuNCAzOC4zIDIxLjkgNjAuMyAyNi4yIDMwLjUgNi4xIDU0LjYgMi45IDc5LjktNS4yek01NDkuNyAyODAuOWMtMzIuNCAuMi0zMy44IDUwLjEtMTAzLjYgNjQuNC0xOC4yIDMuNy0zOC43IDQuNi00NC45IDQuMmwwLS40YzIuOC0xLjUgMTQuNy0yLjYgMjkuNy0xNi42IDcuOS03LjMgMTUuMy0xNS4xIDIyLjgtMjIuOSAxOS41LTIwLjIgNDEuNC00Mi4yIDgxLjktMzkgMjMuMSAxLjggMjkuMyA4LjIgMzYuMSAxMi43IC4zIC4yIC40IC41IC43IC45LS41IDAtLjcgLjEtLjkgMC03LTIuNy0xNC4zLTMuMy0yMS44LTMuM3ptLTEyLjMtMjQuMWMtLjEgLjItLjEgLjQtLjIgLjYtMjguOS00LjQtNDgtNy45LTY4LjUgNC0xNyA5LjktMzEuNCAyMC41LTYyIDI0LjQtMjcuMSAzLjQtNDUuMSAyLjQtNjYuMS04LS4zLS4yLS42LS40LTEtLjYgMC0uMiAuMS0uMyAuMS0uNSAyNC45IDMuOCAzNi40IDUuMSA1NS41LTUuOCAyMi4zLTEyLjkgNDAuMS0yNi42IDcxLjMtMzEgMjkuNi00LjEgNTEuMyAyLjUgNzAuOSAxNi45ek0yNjguNiA5Ny4zYy0uNi0uNi0xLjEtMS4yLTIuMS0yLjMgNy42IDAgMjkuNy0xLjIgNTMuNCA4LjQgMTkuNyA4IDMyLjIgMjEgNTAuMiAzMi45IDExLjEgNy4zIDIzLjQgOS4zIDM2LjQgOC4xIDQuMy0uNCA4LjUtMS4yIDEyLjgtMS43IC40LS4xIC45IDAgMS41IC4zLS42IC40LTEuMiAuOS0xLjggMS4yLTguMSA0LTE2LjcgNi4zLTI1LjYgNy4xLTI2LjEgMi42LTUwLjMtMy43LTczLjQtMTUuNC0xOS4zLTkuOS0zNi40LTIyLjktNTEuNC0zOC42ek02NDAgMzM1LjdjLTMuNSAzLjEtMjIuNyAxMS42LTQyLjcgNS4zLTEyLjMtMy45LTE5LjUtMTQuOS0zMS42LTI0LjEtMTAtNy42LTIwLjktNy45LTI4LjEtOC40IC42LS44IC45LTEuMiAxLjItMS40IDE0LjgtOS4yIDMwLjUtMTIuMiA0Ny4zLTYuNSAxMi41IDQuMiAxOS4yIDEzLjUgMzAuNCAyNC4yIDEwLjggMTAuNCAyMSA5LjkgMjMuMSAxMC41IC4xLS4xIC4yIDAgLjQgLjR6bS0yMTIuNSAxMzdjMi4yIDEuMiAxLjYgMS41IDEuNSAyLTE4LjUtMS40LTMzLjktNy42LTQ2LjgtMjIuMi0yMS44LTI0LjctNDEuNy0yNy45LTQ4LjYtMjkuNyAuNS0uMiAuOC0uNCAxLjEtLjQgMTMuMSAuMSAyNi4xIC43IDM4LjkgMy45IDI1LjMgNi40IDM1IDI1LjQgNDEuNiAzNS4zIDMuMiA0LjggNy4zIDguMyAxMi4zIDExLjF6Il0KICAgIH07CiAgICBmYUdpdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFkMyIsICJNMjE2LjMgMTU4LjRsLTc5LjMgMGMtNDAtMTAuNS0xMzAuNS03LjgtMTMwLjUgNzQuOCAwIDMwLjEgMTUgNTEuMiAzNSA2MS0yNS4xIDIzLTM3IDMzLjgtMzcgNDkuMiAwIDExIDQuNSAyMS4xIDE3LjkgMjYuOC0xNC4zIDEzLjQtMjIuNCAyMy4xLTIyLjQgNDEuNCAwIDMyLjEgMjggNTAuOCAxMDEuNiA1MC44IDcwLjggMCAxMTEuOC0yNi40IDExMS44LTczLjIgMC01OC43LTQ1LjItNTYuNS0xNTEuNi02M2wxMy40LTIxLjZjMjcuMyA3LjYgMTE4LjcgMTAgMTE4LjctNjcuOSAwLTE4LjctNy43LTMxLjctMTUtNDEuMWwzNy40LTIuOCAwLTM0LjV6TTE1Mi45IDQwMC4zYzAgMzIuMS0xMDQuOSAzMi4xLTEwNC45IDIuNCAwLTguMSA1LjMtMTUgMTAuNi0yMS41IDc3LjcgNS4zIDk0LjMgMy40IDk0LjMgMTkuMXpNMTAyLjEgMjY1LjdjLTUyLjggMC01MC41LTcxLjIgMS4yLTcxLjIgNDkuNSAwIDUwLjggNzEuMi0xLjIgNzEuMnpNMjM1LjQgMzY2LjJsMC0zMi4xYzI2LjctMy43IDI3LjItMiAyNy4yLTExbDAtMTE5LjVjMC04LjUtMi4xLTcuNC0yNy4yLTE2LjNsNC41LTMyLjkgODQuMiAwIDAgMTY4LjdjMCA2LjUgLjQgNy4zIDYuNSA4LjFsMjAuNyAyLjggMCAzMi4xLTExNS45IDB6bTUyLjUtMjQ0LjNjLTIzLjIgMC0zNi42LTEzLjQtMzYuNi0zNi42czEzLjQtMzUuOCAzNi42LTM1LjhjMjMuNiAwIDM3IDEyLjYgMzcgMzUuOHMtMTMuNCAzNi42LTM3IDM2LjZ6TTUxMiAzNTAuNWMtMTcuNSA4LjUtNDMuMSAxNi4zLTY2LjMgMTYuMy00OC40IDAtNjYuNy0xOS41LTY2LjctNjUuNWwwLTEwNi41YzAtNS40IDEtNC4xLTMxLjctNC4xbDAtMzYuMmMzNS44LTQuMSA1MC0yMiA1NC41LTY2LjNsMzguNiAwYzAgNjUuOC0xLjMgNjEuOCAzLjMgNjEuOGw1Ny4zIDAgMCA0MC42LTYwLjYgMCAwIDk3LjFjMCA2LjktNC45IDUxLjQgNjAuNiAyNi44bDExIDM1Ljh6Il0KICAgIH07CiAgICBmYU9wdGluTW9uc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcHRpbi1tb25zdGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyM2MiLCAiTTU3Mi44IDQyMS40YzUuNi05LjUgNC43LTE1LjItNS40LTExLjYtMy00LjktNy05LjUtMTEuMS0xMy44IDIuOS05LjctLjctMTQuMi0xMC44LTkuMi00LjYtMy4yLTEwLjMtNi41LTE1LjktOS4yIDAtMTUuMS0xMS42LTExLjYtMTcuNi01LjctMTAuNC0xLjUtMTguNy0uMy0yNi44IDUuNyAuMy02LjUgLjMtMTMgLjMtMTkuNyAxMi42IDAgNDAuMi0xMSA0NS45LTM2LjIgMS40LTYuOCAxLjYtMTMuOC0uMy0yMS45LTMtMTMuNS0xNC4zLTIxLjMtMjUuMS0yNS43LS44LTUuOS03LjYtMTQuMy0xNC45LTE1LjlzLTEyLjQgNC45LTE0LjEgMTAuM2MtOC41IDAtMTkuMiAyLjgtMjEuMSA4LjQtNS40LS41LTExLjEtMS40LTE2LjgtMS45IDIuNy0xLjkgNS40LTMuNSA4LjQtNC42IDUuNC05LjIgMTQuNi0xMS40IDI1LjctMTEuNmwwLTIuOGMxOS41LS41IDQzLTUuOSA1My44LTE4LjEgMTIuNy0xMy44IDE0LjYtMzcuMyAxMi40LTU1LjEtMi40LTE3LjMtOS43LTM3LjYtMjQuNi00OC4xLTguNC01LjktMjEuNi0uOC0yMi43IDkuNS0yLjIgMTkuNiAxLjIgMzAtMzguNiAyNS4xLTEwLjMtMjMuOC0yNC42LTQ0LjYtNDIuNy02MC02OS42LTU5LjctMTY3LjctNTMuOC0yNDQuMi0zNy42IDE5LjcgNC42IDQxLjEgOC42IDU5LjcgMTYuNS0yNi4yIDIuNC01Mi43IDExLjMtNzYuMiAyMy4yLTMyLjggMTctNDQgMjkuOS01Ni43IDQyLjQgMTQuOS0yLjIgMjguOS01LjEgNDMuOC0zLjgtOS43IDUuNC0xOC40IDEyLjItMjYuNSAyMC0yNS44IC45LTIzLjgtNS4zLTI2LjItMjUuOS0xLjEtMTAuNS0xNC4zLTE1LjQtMjIuNy05LjctMjguMSAxOS45LTMzLjUgNzkuOS0xMi4yIDEwMy41IDEwLjggMTIuMiAzNS4xIDE3LjMgNTQuOSAxNy44LS4zIDEuMS0uMyAxLjktLjMgMi43IDEwLjggLjUgMTkuNSAyLjcgMjQuNiAxMS42IDMgMS4xIDUuNyAyLjcgOC4xIDQuNi01LjQgLjUtMTEuMSAxLjQtMTYuNSAxLjktMy4zLTYuNi0xMy43LTguMS0yMS4xLTguMS0xLjYtNS43LTYuNS0xMi4yLTE0LjEtMTAuMy02LjggMS45LTE0LjEgMTAtMTQuOSAxNS45LTIyLjUgOS41LTMwLjEgMjYuOC0yNS4xIDQ3LjYgNS4zIDI0LjggMzMgMzYuMiA0NS45IDM2LjJsMCAxOS43Yy02LjYtNS0xNC4zLTcuNS0yNi44LTUuNy01LjUtNS41LTE3LjMtMTAuMS0xNy4zIDUuNy01LjkgMi43LTExLjQgNS45LTE1LjkgOS4yLTkuOC00LjktMTMuNi0xLjctMTEuMSA5LjItNC4xIDQuMy03LjggOC42LTExLjEgMTMuOC0xMC4yLTMuNy0xMSAyLjItNS40IDExLjYtMS4xIDMuNS0xLjYgNy0xLjkgMTAuOC0uNSAzMS42IDQ0LjYgNjQgNzMuNSA2NS4xIDE3LjMgLjUgMzQuNi04LjQgNDMtMjMuNSAxMTMuMiA0LjkgMjI2LjcgNC4xIDM0MC4yIDAgOC4xIDE1LjEgMjUuNCAyNC4zIDQyLjcgMjMuNSAyOS4yLTEuMSA3NC4zLTMzLjUgNzMuNS02NS4xIC4yLTMuNy0uNy03LjItMS43LTEwLjd6TTQ5OSAxNjcuNGMxLjEtMyAyLjQtOC40IDIuNC0xNC42IDAtNS45IDYuOC04LjEgMTQuMS0uOCAxMS4xIDExLjYgMTQuOSA0MC41IDEzLjggNTEuMS00LjEtMTMuNi0xMy0yOS0zMC4zLTM1Ljd6bS00LjYgNi43YzE5LjUgNi4yIDI4LjYgMjcuNiAyOS43IDQ4LjktMS4xIDIuNy0zIDUuNC00LjkgNy42LTUuNyA1LjktMTUuNCAxMC0yNi4yIDEyLjIgNC4zLTIxLjMgLjMtNDcuMy0xMi43LTYzIDQuOS0uOCAxMC45LTIuNCAxNC4xLTUuN3ptLTI0LjEgNi44YzEzLjggMTEuOSAyMCAzOS4yIDE0LjEgNjMuNS00LjEgLjUtOC4xIC44LTExLjYgLjgtMS45LTIxLjktNi44LTQ0LTE0LjMtNjQuNiAzLjcgLjMgOC4xIC4zIDExLjggLjN6TTQ3LjcgMjAzYy0xLjEtMTAuNSAyLjQtMzkuNSAxMy44LTUxLjEgNy03LjMgMTQuMS01LjEgMTQuMSAuOCAwIDYuMiAxLjQgMTEuNiAyLjQgMTQuNi0xNy4zIDYuOC0yNi4yIDIyLjItMzAuMyAzNS43em05LjcgMjcuNmMtMS45LTIuMi0zLjUtNC45LTQuOS03LjYgMS40LTIxLjMgMTAuMy00Mi43IDI5LjctNDguOSAzLjIgMy4yIDkuMiA0LjkgMTQuMSA1LjctMTMgMTUuNy0xNyA0MS42LTEyLjcgNjMtMTAuOC0yLjItMjAuNS02LTI2LjItMTIuMnptNDcuOSAxNC42Yy00LjEgMC04LjEtLjMtMTIuNy0uOC00LjYtMTguNi0xLjktMzguOSA1LjQtNTNsMCAuMyAxMi4yLTUuMWM0LjktMS45IDkuNy0zLjggMTQuOS00LjktMTAuNyAxOS43LTE3LjQgNDEuMy0xOS44IDYzLjV6bTE4NC0xMC41YTc2LjEgNzYuMSAwIDEgMSAwLTE1Mi4yIDc2LjEgNzYuMSAwIDEgMSAwIDE1Mi4yem0xMTUuNiAyMi4xYy0uMyAxNy44LTcgNDguOS0yMyA1Ny0xMy4yIDYuNi02LjUtNy41LTE2LjUtNTguMSAxMy4zIC4zIDI2LjYgLjMgMzkuNSAxLjF6bS01NC0xLjZjLjggNC45IDMuOCA0MC4zLTEuNiA0MS45LTExLjYgMy41LTQwIDQuMy01MS4xLTEuMS00LjEtMy00LjYtMzUuOS00LjMtNDEuMWwwIC4zYzE4LjktLjMgMzguMS0uMyA1NyAwek0yNzguNSAzMDljLTEzIDMuNS00MS42IDQuMS01NC42LTEuNi02LjUtMi43LTMuOC00Mi40LTEuOS01MS42IDE5LjItLjUgMzguNC0uNSA1Ny44LS44bDAgLjNjMS4xIDguMyAzLjMgNTEuMi0xLjMgNTMuN3pNMTcyIDI1Ny45YzEyLjItLjggMjQuNi0xLjQgMzYuOC0xLjYtMi40IDE1LjQtMyA0My41LTQuOSA1Mi4yLTEuMSA2LjgtNC4zIDYuOC05LjcgNC4zLTIxLjktOS44LTI3LjYtMzUuMi0yMi4yLTU0Ljl6bS0zNS40IDMxLjNjNy44LTEuMSAxNS43LTEuOSAyMy41LTIuNyAxLjYgNi4yIDMuOCAxMS45IDcgMTcuNiAxMCAxNyA0NCAzNS43IDQ1LjEgNyA2LjIgMTQuOSA0MC44IDEyLjIgNTQuOSAxMC44IDE1LjctMS40IDIzLjgtMS40IDI2LjgtMTQuMyAxMi40IDQuMyAzMC44IDQuMSA0NCAzIDExLjMtLjggMjAuOC0uNSAyNC42LTguOSAxLjEgNS4xIDEuOSAxMS42IDQuNiAxNi44IDEwLjggMjEuMyAzNy4zIDEuNCA0Ni44LTMxLjYgOC42IC44IDE3LjYgMS45IDI2LjUgMi43LS40IDEuMy0zLjggNy4zIDcuMyAxMS42LTQ3LjYgNDctOTUuNyA4Ny44LTE2My4yIDEwNy02My4yLTIwLjgtMTEyLjEtNTkuNS0xNTUuOS0xMDYuNSA5LjYtMy40IDEwLjQtOC44IDgtMTIuNXpNMTE1IDQ2MS43Yy0zLjggMTcuOC0yMS45IDI5LjctMzkuNyAyOC45LTE5LjItLjgtNDYuNS0xNy01OS4yLTM2LjUtMi43LTMxLjEgNDMuOC02MS4zIDY2LjItNTQuNiAxNC45IDQuMyAyNy44IDMwLjggMzMuNSA1NCAwIDMtLjMgNS43LS44IDguMnptLTguNy02NmMtLjUtMTMuNS0uNS0yNy0uMy00MC41bC4zIDBjMi43LTEuNiA1LjctMy44IDcuOC02LjUgNi41LTEuNiAxMy01LjEgMTUuMS05LjIgMy4zLTcuMS03LTcuNS01LjQtMTIuNCAyLjctMS4xIDUuNy0yLjIgNy44LTMuNSAyOS4yIDI5LjIgNTguNiA1Ni41IDk3LjMgNzctMzYuOCAxMS4zLTcyLjQgMjcuNi0xMDUuOSA0Ny0xLjItMTguNi03LjctMzUuOS0xNi43LTUxLjl6bTMzNy42IDY0LjZjLTEwMyAzLjUtMjA2LjIgNC4xLTMwOS40IDAgMCAuMyAwIC4zLS4zIC4zbDAtLjMgLjMgMGMzNS4xLTIxLjYgNzIuMi0zOS4yIDExMi40LTUwLjggMTEuNiA1LjEgMjMgOS41IDM0LjkgMTMuMiAyLjIgLjggMi4yIC44IDQuMyAwIDE0LjMtNC4xIDI4LjQtOS4yIDQyLjItMTUuNCA0MS41IDExLjcgNzguOCAzMS43IDExNS42IDUzem0xMC41LTEyLjRjLTM1LjktMTkuNS03My0zNS45LTExMS45LTQ3LjYgMzguMS0yMCA3MS45LTQ3LjMgMTAzLjUtNzYuNyAyLjIgMS40IDQuNiAyLjQgNy42IDMuMiAwIC44IC4zIDEuOSAuNSAyLjQtNC42IDIuNy03LjggNi4yLTUuOSAxMC4zIDIuMiAzLjggOC42IDcuNiAxNS4xIDguOSAyLjQgMi43IDUuMSA1LjEgOC4xIDYuOCAwIDEzLjgtLjMgMjcuNi0uOCA0MS4zbC4zLS4zYy05LjMgMTUuOS0xNS41IDM3LTE2LjUgNTEuN3ptMTA1LjkgNi4yYy0xMi43IDE5LjUtNDAgMzUuNy01OS4yIDM2LjUtMTkuMyAuOS00MC41LTEzLjItNDAuNS0zNyA1LjctMjMuMiAxOC45LTQ5LjcgMzMuNS01NCAyMi43LTYuOSA2OS4yIDIzLjQgNjYuMiA1NC41ek0zNzMuMSA3NS4yYy0zLjgtNzIuMS0xMDAuOC03OS43LTEyNi0yMy41IDQ0LjYtMjQuMyA5MC4zLTE1LjcgMTI2IDIzLjV6TTc1IDQwNy4xYy0xNS43IDEuNi00OS41IDI1LjQtNDkuNSA0My4yIDAgMTEuNiAxNS43IDE5LjUgMzIuMiAxNC45IDEyLjItMy4yIDMxLjEtMTcuNiAzNS45LTI3LjMgNi0xMS42LTMuNy0zMi43LTE4LjYtMzAuOHpNMjkwLjkgMjMwLjljMjguNiAwIDUxLjktMjEuNiA1MS45LTQ4LjQgMC0zNi4xLTQwLjUtNTguMS03Mi4yLTQ0LjMgOS41IDMgMTYuNSAxMS42IDE2LjUgMjEuNiAwIDIzLjMtMzMuMyAzMi00Ni41IDExLjMtNy4zIDM0LjEgMTkuNCA1OS44IDUwLjMgNTkuOHpNNjguMiA0NzQuMWMuNSA2LjUgMTIuMiAxMi43IDIxLjYgOS41IDYuOC0yLjcgMTQuNi0xMC41IDE3LjMtMTYuMiAzLTctMS4xLTIwLTkuNy0xOC40LTguOSAxLjYtMjkuNyAxNi43LTI5LjIgMjUuMXptNDMzLjItNjdjLTE0LjktMS45LTI0LjYgMTkuMi0xOC45IDMwLjggNC45IDkuNyAyNC4xIDI0LjEgMzYuMiAyNy4zIDE2LjUgNC42IDMyLjItMy4yIDMyLjItMTQuOSAwLTE3LjgtMzMuOC00MS42LTQ5LjUtNDMuMnpNNDc5IDQ0OWMtOC40LTEuNi0xMi40IDExLjMtOS41IDE4LjQgMi40IDUuNyAxMC4zIDEzLjUgMTcuMyAxNi4yIDkuMiAzLjIgMjEuMS0zIDIxLjMtOS41IC45LTguNC0yMC4yLTIzLjUtMjkuMS0yNS4xeiJdCiAgICB9OwogICAgZmFKZW5raW5zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImplbmtpbnMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNiNiIsICJNNDU1LjQgNDI1Yy0xLjQtMTEuMi0xOS0yMy4xLTI4LjItMzEuOS01LjEtNS0yOS0yMy4xLTMwLjQtMjkuOS0xLjQtNi42IDkuNy0yMS41IDEzLjMtMjguOSA1LjEtMTAuNyA4LjgtMjMuNyAxMS4zLTMyLjYgMTguOC02Ni4xIDIwLjctMTU2LjktNi4yLTIxMS4yLTEwLjItMjAuNi0zOC42LTQ5LTU2LjQtNjIuNS00Mi0zMS43LTExOS42LTM1LjMtMTcwLjEtMTYuNi0xNC4xIDUuMi0yNy44IDkuOC00MC4xIDE3LjEtMzMuMSAxOS40LTY4LjMgMzIuNS03OC4xIDcxLjYtMjQuMiAxMC44LTMxLjUgNDEuOC0zMC4zIDc3LjggLjIgNyA0LjEgMTUuOCAyLjcgMjIuNC0uNyAzLjMtNS4yIDcuNi02LjEgOS44LTExLjYgMjcuNy0yLjMgNjQgMTEuMSA4My43IDguMSAxMS45IDIxLjUgMjIuNCAzOS4yIDI1LjIgLjcgMTAuNiAzLjMgMTkuNyA4LjIgMzAuNCAzLjEgNi44IDE0LjcgMTkgMTAuNCAyNy43LTIuMiA0LjQtMjEgMTMuOC0yNy4zIDE3LjYtMjEuMSAxMi41LTM2LjQgMjAuMy01NS45IDM0LjMtMTIuNiA5LTMyLjMgMTAuMi0yOS4yIDMxLjEgMi4xIDE0LjEgMTAuMSAzMS42IDE0LjcgNDUuOCAuNyAyIDEuNCA0LjEgMi4xIDZsNDIyIDBjNC45LTE1LjMgOS43LTMwLjkgMTQuNi00Ny4yIDMuNC0xMS40IDEwLjItMjcuOCA4LjctMzkuN3pNMTc0LjIgMzMuN2MxLjgtLjUgMy40IC43IDQuOSAyLjQtLjIgNS4yLTUuNCA1LjEtOC45IDYuOC01LjQgNi43LTEzLjQgOS44LTIwIDE3LjItNi44IDcuNS0xNC40IDI3LjctMjMuNCAzMC00LjUgMS4xLTkuNy0uOC0xMy42LS41LTEwLjQgLjctMTcuNyA2LTI4LjMgNy41IDEzLjYtMjkuOSA1Ni4xLTU0IDg5LjMtNjMuNHpNNjkuNCAxMjcuM2MxMy41LTE0LjkgMzIuMS0yNC4xIDU0LjgtMjUuOSAxMS43IDI5LjctOC40IDY1LS45IDk3LjYgMi4zIDkuOSAxMC4yIDI1LjQtMi40IDI1LjcgLjMtMjguMy0zNC44LTQ2LjMtNjEuMy0yOS42LTEuOC0yMS41LTQuOS01MS43IDkuOC02Ny44em0zNi43IDIwMC4yYy0xLTQuMS0yLjctMTIuOS0yLjMtMTUuMSAxLjYtOC43IDE3LjEtMTIuNSAxMS0yNC43LTExLjMtLjEtMTMuOCAxMC4yLTI0LjEgMTEuMy0yNi43IDIuNi00NS42LTM1LjQtNDQuNC01OC40IDEtMTkuNSAxNy42LTM4LjIgNDAuMS0zNS44IDE2IDEuOCAyMS40IDE5LjIgMjQuNSAzNC43IDkuMiAuNSAyMi41LS40IDI2LjktNy42LS42LTE3LjUtOC44LTMxLjYtOC4yLTQ3LjcgMS0zMC4zIDE3LjUtNTcuNiA0LjgtODcuNCAxMy42LTMwLjkgNTMuNS01NS4zIDgzLjEtNzAgMzYuNi0xOC4zIDk0LjktMy43IDEyOS4zIDE1LjggMTkuNyAxMS4xIDM0LjQgMzIuNyA0OC4zIDUwLjctMTkuNS01LjgtMzYuMSA0LjItMzMuMSAyMC4zIDE2LjMtMTQuOSA0NC4yLS4yIDUyLjUgMTYuNCA3LjkgMTUuOCA3LjggMzkuMyA5IDYyLjggMi45IDU3LTEwLjQgMTE1LjktMzkuMSAxNTcuMS03LjcgMTEtMTQuMSAyMy0yNC45IDMwLjYtMjYgMTguMi02NS40IDM0LjctOTkuMiAyMy40LTQ0LjctMTUtNjUtNDQuOC04OS41LTc4LjggLjcgMTguNyAxMy44IDM0LjEgMjYuOCA0OC40IDExLjMgMTIuNSAyNSAyNi42IDM5LjcgMzIuNC0xMi4zLTIuOS0zMS4xLTMuOC0zNi4yIDcuMi0yOC42LTEuOS01NS4xLTQuOC02OC43LTI0LjItMTAuNi0xNS40LTIxLjQtNDEuNC0yNi4zLTYxLjR6bTIyMiAxMjQuMWM0LjEtMyAxMS4xLTIuOSAxNy40LTMuNi01LjQtMi43LTEzLTMuNy0xOS4zLTIuMi0uMS00LjItMi02LjgtMy4yLTEwLjIgMTAuNi0zLjggMzUuNS0yOC41IDQ5LjYtMjAuMyA2LjcgMy45IDkuNSAyNi4yIDEwLjEgMzcgLjQgOS0uOCAxOC00LjUgMjIuOC0xOC44LS42LTM1LjgtMi44LTUwLjctNyAuOS02LjEtMS0xMi4xIC42LTE2LjV6bS0xNy4yLTIwYy0xNi44IC44LTI2LTEuMi0zOC4zLTEwLjggLjItLjggMS40LS41IDEuNS0xLjQgMTggOCA0MC44LTMuMyA1OS00LjktNy45IDUuMS0xNC42IDExLjYtMjIuMiAxNy4xem0tMTIuMSAzMy4yYy0xLjYtOS40LTMuNS0xMi0yLjgtMjAuMiAyNS0xNi42IDI5LjcgMjguNiAyLjggMjAuMnpNMTk0LjMgNDM4LjZjLTExLjYtLjctNDguMS0xNC0zOC41LTIzLjcgOS40IDYuNSAyNy41IDQuOSA0MS4zIDcuMyAuOCA0LjQtMi44IDEwLjItMi44IDE2LjR6TTI2IDQ5Ny4xYy00LjMtMTIuNy05LjItMjUuMS0xNC44LTM2LjkgMzAuOC0yMy44IDY1LjMtNDguOSAxMDIuMi02My41IDIuOC0xLjEgMjMuMiAyNS40IDI2LjIgMjcuNiAxNi41IDExLjcgMzcgMjEgNTYuMiAzMC4yIDEuMiA4LjggMy45IDIwLjIgOC43IDM1LjUgLjcgMi4zIDEuNCA0LjcgMi4yIDcuMmwtMTgwLjcgMCAwLS4xem0yNDAuNiA1LjdsLS44IDBjLjMtLjIgLjUtLjQgLjgtLjVsMCAuNXptNy41LTUuN2MyLjEtMS40IDQuMy0yLjggNi40LTQuMyAxLjEgMS40IDIuMiAyLjggMy4yIDQuM2wtOS42IDB6bTE1LjEtMjQuN2MtMTAuOCA3LjMtMjAuNiAxOC4zLTMzLjMgMjUuMi02IDMuMy0yNyAxMS43LTMzLjQgMTAuMi0zLjYtLjgtMy45LTUuMy01LjQtOS41LTMuMS05LTEwLjEtMjMuNC0xMC44LTM3LS44LTE3LjItMi41LTQ2IDE2LTQyLjQgMTQuOSAyLjkgMzIuMyA5LjcgNDMuOSAxNi4xIDcuMSAzLjkgMTEuMSA4LjYgMjEuOSA5LjUtLjEgMS40LS4xIDIuOC0uMiA0LjMtNS45IDMuOS0xNS4zIDMuOC0yMS44IDcuMSA5LjUgLjQgMTcgMi43IDIzLjUgNS45LS4xIDMuNC0uMyA3LS40IDEwLjZ6bTUzLjQgMjQuN2wtMTQgMGMtLjEtMy4yLTIuOC01LjgtNi4xLTUuOHMtNS45IDIuNi02LjEgNS44bC0xNy40IDBjLTIuOC00LjQtNS43LTguNi04LjktMTIuNSAyLjEtMi4yIDQtNC43IDYtNi45IDkgMy43IDE0LjgtNC45IDIxLjctNC4yIDcuOSAuOCAxNC4yIDExLjcgMjUuNCAxMWwtLjYgMTIuNnptOC43IDBjLjItNCAuNC03LjggLjYtMTEuNSAxNS42LTcuMyAyOSAxLjMgMzUuNyAxMS41bC0zNi4zIDB6bTgzLjQtMzdjLTIuMyAxMS4yLTUuOCAyNC05LjkgMzcuMS0uMi0uMS0uNC0uMS0uNi0uMWwtMjcuOSAwYy42LTEuMSAxLjItMi4yIDEuOS0zLjMtMi42LTYuMS05LTguNy0xMC45LTE1LjUgMTIuMS0yMi43IDYuNS05My40LTI0LjItNzguNSA0LjMtNi4zIDE1LjYtMTEuNSAyMC44LTE5LjMgMTMgMTAuNCAyMC44IDIwLjMgMzMuMiAzMS40IDYuOCA2IDIwIDEzLjMgMjEuNCAyMy4xIC44IDUuNS0yLjYgMTguOS0zLjggMjUuMXpNMTkwLjUgMTMwLjVjNS40LTE0LjkgMjcuMi0zNC43IDQ1LTMyIDcuNyAxLjIgMTggOC4yIDEyLjIgMTcuNy0zMC4yLTctNDUuMiAxMi42LTU0LjQgMzMuMS04LjEtMi00LjktMTMuMS0yLjgtMTguOHptMTg0LjEgNjMuMWM4LjItMy42IDIyLjQtLjcgMjkuNi01LjMtNC4yLTExLjUtMTAuMy0yMS40LTkuMy0zNy43IC41IDAgMSAwIDEuNCAuMSA2LjggMTQuMiAxMi43IDI5LjIgMjEuNCA0MS43LTUuNyAxMy41LTQzLjYgMjUuNC00My4xIDEuMnptLTk2LjggMi43Yy02LjgtMTAuOS0xOS0zMi41LTE0LjUtNDUuMyA2LjUgMTEuOSA4LjYgMjQuNCAxNy44IDMzLjMgNC4xIDQgMTIuMiA5IDguMiAyMC4yLS45IDIuNy03LjggOC42LTExLjcgOS43LTE0LjQgNC4zLTQ3LjkgLjktMzYuNi0xNy4xIDExLjkgLjcgMjcuOSA3LjggMzYuOC0uOHptMjcuMyA3MGMzLjggNi42IDEuNCAxOC43IDEyLjEgMjAuNiAyMC4yIDMuNCA0My42LTEyLjMgNTguMS0xNy44IDktMTUuMi0uOC0yMC43LTguOS0zMC41LTE2LjYtMjAtMzguOC00NC44LTM4LTc0LjcgNi43LTQuOSA3LjMgNy40IDguMiA5LjcgOC43IDIwLjMgMzAuNCA0Ni4yIDQ2LjMgNjMuNSAzLjkgNC4zIDEwLjMgOC40IDExIDExLjIgMi4xIDguMi01LjQgMTgtNC41IDIzLjUtMjEuNyAxMy45LTQ1LjggMjkuMS04MS40IDI1LjYtNy40LTYuNy0xMC4zLTIxLjQtMi45LTMxLjF6bS0yMDEuMy05LjJjLTYuOC0zLjktOC40LTIxLTE2LjQtMjEuNC0xMS40LS43LTkuMyAyMi4yLTkuMyAzNS41LTcuOC03LjEtOS4yLTI5LjEtMy41LTQwLjMtNi42LTMuMi05LjUgMy42LTEzLjEgNS45IDQuNy0zNC4xIDQ5LjgtMTUuOCA0Mi4zIDIwLjN6bTI5OS42IDI4LjhjLTEwLjEgMTkuMi0yNC40IDQwLjQtNTQgNDEtLjYtNi4yLTEuMS0xNS42IDAtMTkuNCAyMi43LTIuMiAzNi42LTEzLjcgNTQtMjEuNnpNMjYxLjUgMjk4LjNjMTguOSA5LjkgNTMuNiAxMSA3OS4zIDEwLjIgMS40IDUuNiAxLjMgMTIuNiAxLjQgMTkuNC0zMyAxLjgtNzItNi40LTgwLjctMjkuNnpNMzUzLjcgMzQ1Yy0xLjcgNC4zLTUuMyA5LjMtOS44IDExLjEtMTIuMSA0LjktNDUuNiA4LjctNjIuNC0uMy0xMC43LTUuNy0xNy41LTE4LjUtMjMuNC0yNi0yLjgtMy42LTE2LjktMTIuOS0uMi0xMi45IDEzLjEgMzIuNyA1OCAyOSA5NS44IDI4LjF6Il0KICAgIH07CiAgICBmYVNsaWRlc2hhcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2xpZGVzaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWU3IiwgIk0xODcuOSAxNTMuN2MtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43czYxLjctMjYgNjEuNy01Ny43YzAtMzItMjcuNy01Ny43LTYxLjctNTcuN3ptMTQzLjQgMGMtMzQgMC02MS43IDI1LjctNjEuNyA1Ny43IDAgMzEuNyAyNy43IDU3LjcgNjEuNyA1Ny43IDM0LjMgMCA2MS43LTI2IDYxLjctNTcuNyAuMS0zMi0yNy40LTU3LjctNjEuNy01Ny43em0xNTYuNiA5MGwtNiA0LjMgMC0xOTguM2MwLTI3LjQtMjAuNi00OS43LTQ2LTQ5LjdMNzYuOCAwYy0yNS40IDAtNDYgMjIuMy00NiA0OS43bDAgMTk4LjNjLTItMS40LTQuMy0yLjktNi4zLTQuMy0xNS4xLTEwLjYtMjUuMSA0LTE2IDE3LjcgMTguMyAyMi42IDUzLjEgNTAuMyAxMDYuMyA3Mi01Ni4zIDE5MS43IDEzNy40IDIyMi4zIDEzNC4zIDEyNC4xIDAtLjcgLjMtNTYuNiAuMy05Ni42IDUuMSAxLjEgOS40IDIuMyAxMy43IDMuMSAwIDM5LjcgLjMgOTIuOCAuMyA5My41LTMuMSA5OC4zIDE5MC42IDY3LjcgMTM0LjMtMTI0IDUzLjEtMjEuNyA4OC00OS40IDEwNi4zLTcyIDkuMS0xMy44LS45LTI4LjMtMTYuMS0xNy44em0tMzAuNSAxOS4yYy02OC45IDM3LjQtMTI4LjMgMzEuMS0xNjAuNiAyOS43LTIzLjctLjktMzIuNiA5LjEtMzMuNyAyNC45LTEwLjMtNy43LTE4LjYtMTUuNS0yMC4zLTE3LjEtNS4xLTUuNC0xMy43LTgtMjcuMS03LjctMzEuNyAxLjEtODkuNyA3LjQtMTU3LjQtMjhsMC0xOTIuNGMwLTM0LjkgOC45LTQ1LjcgNDAuNi00NS43bDMxNy43IDBjMzAuMyAwIDQwLjkgMTIuOSA0MC45IDQ1LjdsMCAxOTAuNi0uMSAweiJdCiAgICB9OwogICAgZmFVYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInViZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQwMiIsICJNNDE0LjEgMzJMMzMuOSAzMkMxNS4yIDMyIDAgNDcuMiAwIDY1LjlMMCA0NDZjMCAxOC44IDE1LjIgMzQgMzMuOSAzNEw0MTQgNDgwYzE4LjcgMCAzMy45LTE1LjIgMzMuOS0zMy45bDAtMzgwLjJDNDQ4IDQ3LjIgNDMyLjggMzIgNDE0LjEgMzJ6TTIzNy42IDM5MS4xQzE2MyAzOTguNiA5Ni40IDM0NC4yIDg4LjkgMjY5LjZsOTQuNCAwIDAgMjAuNGMwIDMuNyAzIDYuOCA2LjggNi44bDY3LjkgMGMzLjcgMCA2LjgtMyA2LjgtNi44bDAtNjcuOWMwLTMuNy0zLTYuOC02LjgtNi44bC02Ny45IDBjLTMuNyAwLTYuOCAzLTYuOCA2LjhsMCAyMC40LTk0LjQgMGM3LTY5LjQgNjUuNC0xMjIuMiAxMzUuMS0xMjIuMnMxMjguMSA1Mi44IDEzNS4xIDEyMi4yYzcuNSA3NC41LTQ2LjkgMTQxLjEtMTIxLjUgMTQ4LjZ6Il0KICAgIH07CiAgICBmYURpZ2l0YWxPY2VhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaWdpdGFsLW9jZWFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzOTEiLCAiTTg3IDQ4MS44bDczLjcgMCAwLTczLjYtNzMuNyAwIDAgNzMuNnpNMjUuNCAzNDYuNmwwIDYxLjYgNjEuNiAwIDAtNjEuNi02MS42IDB6TTQ5MS42IDE3Ni45QzQ2OC42IDEwMi43IDQwOS4yIDQzLjYgMzM1IDIwLjMgMTY0LjktMzIuOCA4IDkzLjcgOCAyNTUuOWw5NS44IDBjMC0xMDEuOCAxMDEtMTgwLjUgMjA4LjEtMTQxLjcgMzkuNyAxNC4zIDcxLjUgNDYuMSA4NS44IDg1LjcgMzkuMSAxMDctMzkuNyAyMDcuOC0xNDEuNCAyMDhsMCAuMy0uMyAwIDAgOTUuOGMxNjIuNiAwIDI4OC44LTE1Ni44IDIzNS42LTMyNy4xem0tMjM1LjMgMjMxbDAtOTUuMy05NS42IDAgMCA5NS42IDk1LjMgMCAwLS4zIC4zIDB6Il0KICAgIH07CiAgICBmYVNvdW5kY2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic291bmRjbG91ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMWJlIiwgIk02NDAuMiAyOTguNmMtMS4zIDIzLjEtMTEuNSA0NC44LTI4LjQgNjAuNXMtMzkuMiAyNC40LTYyLjMgMjQuMWwtMjE4IDBjLTQuOCAwLTkuNC0yLTEyLjgtNS40cy01LjMtOC01LjMtMTIuOGwwLTIzNC44Yy0uMi00IC45LTggMy4xLTExLjRzNS4zLTYuMSA5LTcuN2MwIDAgMjAuMS0xMy45IDYyLjMtMTMuOSAyNS44IDAgNTEuMSA2LjkgNzMuMyAyMC4xIDE3LjMgMTAuMiAzMi4zIDIzLjggNDQuMSA0MC4xczIwIDM0LjggMjQuMiA1NC40YzcuNS0yLjEgMTUuMy0zLjIgMjMuMS0zLjIgMTEuNy0uMSAyMy4zIDIuMiAzNC4yIDYuN3MyMC41IDExLjMgMjguNyAxOS43IDE0LjYgMTguMyAxOC45IDI5LjMgNi4zIDIyLjYgNS45IDM0LjN6bS0zNTQtMTUzLjVjLjEtMSAwLTItLjMtMi45cy0uOC0xLjgtMS41LTIuNi0xLjUtMS4zLTIuNC0xLjdjLTEuOC0uOC00LS44LTUuOCAwLS45IC40LTEuNyAxLTIuNCAxLjdzLTEuMiAxLjYtMS41IDIuNi0uNCAxLjktLjMgMi45Yy02IDc4LjktMTAuNiAxNTIuOSAwIDIzMS42IC4yIDEuNyAxIDMuMyAyLjMgNC41IDIuNiAyLjQgNi44IDIuNCA5LjQgMCAxLjMtMS4yIDIuMS0yLjggMi4zLTQuNSAxMS4zLTc5LjQgNi42LTE1MiAwLTIzMS42bC4yIDB6bS00NCAyNy4zYy0uMi0xLjgtMS4xLTMuNS0yLjQtNC43cy0zLjEtMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjIgMi45LTIuNCA0LjdjLTcuOSA2Ny45LTcuOSAxMzYuNSAwIDIwNC40IC4zIDEuOCAxLjIgMy40IDIuNSA0LjVzMy4xIDEuOCA0LjggMS44IDMuNS0uNiA0LjgtMS44IDIuMi0yLjggMi41LTQuNWM4LjgtNjcuOCA4LjgtMTM2LjUgLjEtMjA0LjRsLjEgMHptLTQ0LjMtNi45Yy0uMi0xLjgtMS0zLjQtMi4zLTQuNnMtMy0xLjgtNC44LTEuOC0zLjUgLjctNC44IDEuOC0yLjEgMi44LTIuMyA0LjZjLTYuNyA3Mi0xMC4yIDEzOS4zIDAgMjExLjEgMCAxLjkgLjcgMy43IDIuMSA1czMuMSAyLjEgNSAyLjEgMy43LS43IDUtMi4xIDIuMS0zLjEgMi4xLTVjMTAuNS03Mi44IDcuMy0xMzguMiAuMS0yMTEuMWwtLjEgMHptLTQ0IDIwLjZjMC0xLjktLjgtMy44LTIuMS01LjJzLTMuMi0yLjEtNS4yLTIuMS0zLjggLjgtNS4yIDIuMS0yLjEgMy4yLTIuMSA1LjJjLTguMSA2My4zLTguMSAxMjcuNSAwIDE5MC44IC4yIDEuOCAxIDMuNCAyLjQgNC42czMuMSAxLjkgNC44IDEuOSAzLjUtLjcgNC44LTEuOSAyLjItMi44IDIuNC00LjZjOC44LTYzLjMgOC45LTEyNy41IC4zLTE5MC44bC0uMSAwem0tNDQuNSA0Ny42YzAtMS45LS44LTMuOC0yLjEtNS4xcy0zLjItMi4xLTUuMS0yLjEtMy44IC44LTUuMSAyLjEtMi4xIDMuMi0yLjEgNS4xYy0xMC41IDQ5LjItNS41IDkzLjkgLjQgMTQzLjYgLjMgMS42IDEuMSAzLjEgMi4zIDQuMnMyLjggMS43IDQuNSAxLjcgMy4yLS42IDQuNS0xLjcgMi4xLTIuNSAyLjMtNC4yYzYuNi01MC40IDExLjYtOTQuMSAuNC0xNDMuNnptLTQ0LjEtNy41Yy0uMi0xLjgtMS4xLTMuNS0yLjQtNC44cy0zLjItMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjIgMi45LTIuNCA0LjhjLTkuMyA1MC4yLTYuMiA5NC40IC4zIDE0NC41IC43IDcuNiAxMy42IDcuNSAxNC40IDAgNy4yLTUwLjkgMTAuNS05My44IC4zLTE0NC41bC0uMiAwek0yMC43IDI1MC44Yy0uMi0xLjgtMS4xLTMuNS0yLjQtNC44cy0zLjItMS45LTUtMS45LTMuNiAuNy01IDEuOS0yLjMgMi45LTIuNCA0LjhjLTguNSAzMy43LTUuOSA2MS42IC42IDk1LjQgLjIgMS43IDEgMy4zIDIuMyA0LjRzMi45IDEuOCA0LjcgMS44IDMuNC0uNiA0LjctMS44IDIuMS0yLjcgMi4zLTQuNGM3LjUtMzQuNSAxMS4yLTYxLjggLjQtOTUuNGwtLjIgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlRmlnbWEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZpZ21hIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZTQiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTE3My43IDk2Yy0zMyAwLTU5LjggMjYuOC01OS44IDU5LjggMCAyMSAxMC44IDM5LjQgMjcuMiA1MC4xLTE2LjQgMTAuNy0yNy4yIDI5LjEtMjcuMiA1MC4xczEwLjggMzkuNSAyNy4yIDUwLjFjLTE2LjQgMTAuNy0yNy4yIDI5LjEtMjcuMiA1MC4xIDAgMzMuMSAyNy4xIDU5LjggNjAuMSA1OS44IDMzLjIgMCA2MC42LTI2LjkgNjAuNi02MC4zbDAtNTUuN2MxMC42IDkuOCAyNC44IDE1LjggNDAuNCAxNS44bDEuMSAwYzMzIDAgNTkuOC0yNi44IDU5LjgtNTkuOCAwLTIxLTEwLjgtMzkuNS0yNy4yLTUwLjEgMTYuNC0xMC43IDI3LjItMjkuMSAyNy4yLTUwLjEgMC0zMy0yNi44LTU5LjgtNTkuOC01OS44TDE3My43IDk2em00MS42IDIxOS44bDAgMzkuOWMwIDIyLjYtMTguNiA0MS00MS4zIDQxLTIyLjQgMC00MC43LTE4LjItNDAuNy00MC41IDAtMjIuMyAxOC4xLTQwLjQgNDAuMy00MC40bDQxLjcgMHptMC0xMDAuM2wwIDgwLjktNDEuNyAwYy0yMi4zLS4xLTQwLjMtMTguMi00MC4zLTQwLjUgMC0yMi4zIDE4LjEtNDAuNSA0MC41LTQwLjVsNDEuNiAwem02MC44IDBjMjIuMyAwIDQwLjUgMTguMSA0MC41IDQwLjVzLTE4LjEgNDAuNS00MC41IDQwLjVsLTEuMSAwYy0yMi4zIDAtNDAuNC0xOC4xLTQwLjQtNDAuNXMxOC4xLTQwLjUgNDAuNC00MC41bDEuMSAwem0tNjAuOC0xOS4zbC00MS42IDBjLTIyLjMgMC00MC41LTE4LjEtNDAuNS00MC40czE4LjEtNDAuNSA0MC41LTQwLjVsNDEuNiAwIDAgODAuOXptNjAuOC04MC45YzIyLjMgMCA0MC41IDE4LjEgNDAuNSA0MC41cy0xOC4xIDQwLjQtNDAuNSA0MC40bC00MS41IDAgMC04MC45IDQxLjUgMHoiXQogICAgfTsKICAgIGZhQ3JlYXRpdmVDb21tb25zU2EgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNGVmIiwgIk0yNTUuNiA4QzM5Ny40IDggNTA0IDExOC4xIDUwNCAyNTYgNTA0IDQwMy4xIDM4NS41IDUwNCAyNTUuNiA1MDQgMTIxLjYgNTA0IDggMzk0LjUgOCAyNTYgOCAxMjMuMSAxMTIuNyA4IDI1NS42IDh6bS44IDQ0LjdjLTExOC4yIDAtMjAzLjcgOTcuOS0yMDMuNyAyMDMuMyAwIDEwOS44IDkxLjIgMjAyLjggMjAzLjcgMjAyLjggMTAzLjIgMCAyMDIuOC04MS4xIDIwMi44LTIwMi44IC4xLTExMy44LTkwLjItMjAzLjMtMjAyLjgtMjAzLjN6TTE0NS43IDIyMWMxMy04My45IDgwLjUtOTUuNyAxMDguOS05NS43IDk5LjggMCAxMjcuNSA4Mi41IDEyNy41IDEzNC4yIDAgNjMuNi00MSAxMzIuOS0xMjguOSAxMzIuOS0zOC45IDAtOTkuMS0yMC0xMDkuNC05N2w2Mi41IDBjMS41IDMwLjEgMTkuNiA0NS4yIDU0LjUgNDUuMiAyMy4zIDAgNTgtMTguMiA1OC04Mi44IDAtODIuNS00OS4xLTgwLjYtNTYuNy04MC42LTMzLjEgMC01MS43IDE0LjYtNTUuOCA0My44bDE4LjIgMC00OS4yIDQ5LjItNDktNDkuMiAxOS40IDB6Il0KICAgIH07CiAgICBmYUNocm9tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjaHJvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI2OCIsICJNMCAyNTZjMC00Ni42IDEyLjUtOTAuNCAzNC4zLTEyOC45TDE0NC4xIDMxOC4zYzIxLjkgMzkuMiA2My44IDY1LjcgMTExLjkgNjUuNyAxNC4zIDAgMjcuMS0yLjMgNDAuOC02LjZMMjIwLjUgNTA5LjZDOTUuOSA0OTIuMyAwIDM4NS4zIDAgMjU2em0zNjUuMSA2NS42YzEyLjMtMTkuMiAxOC45LTQyLjUgMTguOS02NS42IDAtMzguMi0xNi44LTcyLjUtNDMuMy05NmwxNTIuNyAwYzEyIDI5LjYgMTguNiA2Mi4xIDE4LjYgOTYgMCAxNDEuNC0xMTQuNiAyNTUuMS0yNTYgMjU2TDM2NS4xIDMyMS42ek00NzcuOCAxMjhMMjU2IDEyOGMtNjIuOSAwLTExMy43IDQ0LjEtMTI1LjUgMTAyLjdMNTQuMiA5OC41QzEwMSAzOC41IDE3NCAwIDI1NiAwIDM1MC44IDAgNDMzLjUgNTEuNSA0NzcuOCAxMjh6TTM0NCAyNTZhODggODggMCAxIDEgLTE3NiAwIDg4IDg4IDAgMSAxIDE3NiAweiJdCiAgICB9OwogICAgZmFUcmFkZUZlZGVyYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidHJhZGUtZmVkZXJhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTEzIiwgIk0yNTYgOC44YTI0Ny4yIDI0Ny4yIDAgMSAwIDAgNDk0LjQgMjQ3LjIgMjQ3LjIgMCAxIDAgMC00OTQuNHptMCAxMS42YTIzNS42IDIzNS42IDAgMSAxIDAgNDcxLjIgMjM1LjYgMjM1LjYgMCAxIDEgMC00NzEuMnpNNDExLjEgMTYzLjFsMC00Ni44LTE5My44IDAgMCA4MS43LTE1NS4xIDAgMzYuNyA0NiAxMTcuNyAwIDAgMTk2LjggNDguOCAwIDAtMTk1LjggODMuMyAwIDAtNDctODMuMyAwIDAtMzQuOCAxNDUuNyAwIDAtLjF6bS03My4zIDQ1LjFsMCAyMy45LTgyLjkgMCAwIDE5Ny40LTI2LjggMCAwLTE5Ny40LTEyMy44IDAtMjAuMS0yMy45IDE0My45IDAgMC04MC42IDE3MS44IDAgMCAyNC40LTE0NSAwIDAgNTYuMiA4Mi45IDB6bS0xNjEuMy02OWwtMTIuNC0yMC43IDIuMSAyMy44LTIzLjUgNS40IDIzLjMgNS40LTIuMSAyNCAxMi4zLTIwLjUgMjIuMiA5LjUtMTUuNy0xOC4xIDE1LjgtMTguMS0yMiA5LjN6bS0yOS42LTE5LjdsOS4zLTExLjUtMTIuNyA1LjktOC0xMi40IDEuNyAxMy45LTE0LjMgMy44IDEzLjcgMi43LS44IDE0LjcgNi44LTEyLjIgMTMuOCA1LjMtOS41LTEwLjJ6TTMxMi4zIDI2NC43bC0xMy4xIDUuNi03LjMtMTIuMiAxLjMgMTQuMi0xMy45IDMuMiAxMy45IDMuMi0xLjIgMTQuMiA3LjMtMTIuMiAxMy4xIDUuNS05LjQtMTAuNyA5LjMtMTAuOHptMTA2LjktNzcuMmwtMjAuOSA5LjEtMTItMTkuNiAyLjIgMjIuNy0yMi4zIDUuNCAyMi4yIDQuOS0xLjggMjIuOSAxMS41LTE5LjYgMjEuMiA4LjgtMTUuMS0xNyAxNS0xNy42ek0yNTYgMjkuOWEyMjYuMSAyMjYuMSAwIDEgMCAwIDQ1Mi4yIDIyNi4xIDIyNi4xIDAgMSAwIDAtNDUyLjJ6TTM1MC42IDE5NmwwIDUxLTgzLjMgMCAwIDE5NS43LTUyLjcgMCAwLTE5Ni44LTExNi43IDAtNDAtNDkuOSAxNTcuNCAwIDAtODEuNiAxOTcuOCAwIDAgNTAuNy0xNDUuNyAwIDAgMzAuOSA4My4yIDB6TTI1NiA0My4yYzYwLjMgMCAxMTQuOCAyNSAxNTMuNiA2NS4ybC0xOTkuMSAwIDAgODEuNi0xNTcuNCAwQzgxLjEgMTA0LjggMTYxLjQgNDMuMiAyNTYgNDMuMnptMCA0MjcuMWMtMTE3LjkgMC0yMTMuNi05NS42LTIxMy42LTIxMy41IDAtMjEuMiAzLjEtNDEuOCA4LjktNjEuMWw0My44IDU2LjMgMTE0LjcgMCAwIDE5Ni44IDY0LjYgMCAwLTE5NS44IDgzLjMgMCAwLTYyLjctODMuMiAwIDAtMTkuMiAxNDUuNiAwIDAtNTAuOGMzMC44IDM3IDQ5LjMgODQuNiA0OS4zIDEzNi41IC4xIDExNy45LTk1LjUgMjEzLjUtMjEzLjQgMjEzLjV6TTE4Ni44IDI3NWwtMTEtMjEuNCAxLjcgMjQuNS0yMy43IDMuOSAyMy44IDUuOS0zLjcgMjMuOCAxMy0yMC45IDIxLjUgMTAuOC0xNS44LTE4LjggMTYuOS0xNy4xLTIyLjcgOS4zeiJdCiAgICB9OwogICAgZmFWYWFkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidmFhZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MDgiLCAiTTIyNC41IDE0MC43QzIyNiAxMjMuMSAyMjkuNCA4OCAyNzQuMyA4OGw5OC42IDBjMjAuNyAwIDMyLjEtNy44IDMyLjEtMjEuNmwwLTEyLjNjMC0xMi4yIDkuMy0yMi4xIDIxLjUtMjIuMVM0NDggNDEuOSA0NDggNTQuMWwwIDM2LjVjMCA0Mi45LTIxLjUgNjItNjYuOCA2MmwtMTAwLjUgMGMtMzAuMSAwLTMzIDE0LjctMzMgMjcuMSAwIDEuMy0uMSAyLjUtLjIgMy43LS43IDEyLjMtMTAuOSAyMi4yLTIzLjQgMjIuMnMtMjIuNy05LjgtMjMuNC0yMi4yYy0uMS0xLjItLjItMi40LS4yLTMuNyAwLTEyLjMtMy0yNy4xLTMzLTI3LjFsLTEwMC43IDBDMjEuNSAxNTIuNiAwIDEzMy41IDAgOTAuNkwwIDU0LjFDMCA0MS45IDkuNCAzMiAyMS42IDMyczIxLjUgOS45IDIxLjUgMjIuMWwwIDEyLjNDNDMuMSA4MC4yIDU0LjUgODggNzUuMiA4OGw5OC42IDBjNDQuOCAwIDQ4LjMgMzUuMSA0OS44IDUyLjdsLjkgMHpNMjI0IDQ1NmMxMS41IDAgMjEuNC03IDI1LjctMTYuMyAxLjEtMS44IDk3LjEtMTY5LjYgOTguMi0xNzEuNCAxMS45LTE5LjYtMy4yLTQ0LjMtMjcuMi00NC4zLTEzLjkgMC0yMy4zIDYuNC0yOS44IDIwLjNMMjI0IDM2MiAxNTcuMSAyNDQuM2MtNi40LTEzLjktMTUuOS0yMC4zLTI5LjgtMjAuMy0yNCAwLTM5LjEgMjQuNi0yNy4yIDQ0LjMgMS4xIDEuOSA5Ny4xIDE2OS42IDk4LjIgMTcxLjQgNC4zIDkuMyAxNC4yIDE2LjMgMjUuNyAxNi4zeiJdCiAgICB9OwogICAgZmFEZXZpYW50YXJ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRldmlhbnRhcnQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjFiZCIsICJNMzIwIDkzLjJsLTk4LjIgMTc5LjEgNy40IDkuNSA5MC44IDAgMCAxMjcuNy0xNjAuOSAwLTEzLjUgOS4yLTQzLjcgODRjLS4zIDAtOC42IDguNi05LjIgOS4ybC05Mi43IDAgMC05My4yIDkzLjItMTc5LjQtNy40LTkuMi04NS44IDAgMC0xMjcuNiAxNTYgMCAxMy41LTkuMiA0My43LTg0Yy4zIDAgOC42LTguNiA5LjItOS4ybDk3LjYgMCAwIDkzLjF6Il0KICAgIH07CiAgICBmYU1lZGl1bSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWRpdW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MjQwNywgIm1lZGl1bS1tIl0sICJmMjNhIiwgIk0zNjkuNCAzMmM0My40IDAgNzguNiAzNS4yIDc4LjYgNzguNmwwIDgzLjhjLTEuOS0uMS0zLjgtLjItNS43LS4ybC0uNCAwYy0xMCAwLTIyLjMgMi40LTMxLjEgNi44LTEwIDQuNi0xOC43IDExLjUtMjYgMjAuNi0xMS44IDE0LjYtMTguOSAzNC4zLTIwLjYgNTYuNC0uMSAuNy0uMSAxLjMtLjIgMnMtLjEgMS4yLS4xIDEuOWMtLjEgMS4yLS4xIDIuNC0uMSAzLjYgMCAxLjktLjEgMy44IDAgNS44IDEuMiA1MC4xIDI4LjIgOTAuMiA3Ni4zIDkwLjIgMi43IDAgNS4zLS4xIDcuOS0uNGwwIDIwLjRjMCA0My40LTM1LjIgNzguNi03OC42IDc4LjZMNzguNiA0ODBDMzUuMiA0ODAgMCA0NDQuOCAwIDQwMS40TDAgMTEwLjZDMCA2Ny4yIDM1LjIgMzIgNzguNiAzMmwyOTAuOCAwek04Mi4zIDEzOC45bC4zIC4xYzEzLjIgMyAxOS44IDcuNCAxOS44IDIzLjRsMCAxODcuMmMwIDE2LTYuNyAyMC40LTE5LjkgMjMuNGwtLjMgLjEgMCAyLjggNTIuOCAwIDAtMi44LS4zLS4xYy0xMy4yLTMtMTkuOS03LjQtMTkuOS0yMy40bDAtMTc2LjMgODYuMSAyMDIuNSA0LjkgMCA4OC42LTIwOC4yIDAgMTg2LjZjLTEuMSAxMi42LTcuOCAxNi41LTE5LjcgMTkuMmwtLjMgLjEgMCAyLjcgOTEuOSAwIDAtMi43LS4zLS4xYy0xMS45LTIuNy0xOC43LTYuNi0xOS45LTE5LjJsLS4xLTE5MS44IC4xIDBjMC0xNiA2LjctMjAuNCAxOS45LTIzLjRsLjMtLjEgMC0yLjctNzIuMiAwLTY3IDE1Ny40LTY3LTE1Ny40LTc3LjggMCAwIDIuN3pNNDQ4IDM0MC4zYy0yNS4xLTcuNC00My0zNS4xLTQxLjItNjcuOGwwIDAgNDEuMSAwIDAgNjcuOHptLTYuNC0xMzUuNmMyLjMgMCA0LjQgLjMgNi40IC45bDAgNTcuNC00MC4yIDBjMS41LTMzLjYgMTMuNi01Ny45IDMzLjgtNTguM3oiXQogICAgfTsKICAgIGZhTWVkaXVtTSA9IGZhTWVkaXVtOwogICAgZmFPcGVuY2FydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVuY2FydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjNkIiwgIk0zMzEuOCA0NDAuNGE0NS44IDQ1LjggMCAxIDEgOTEuNSAuMyA0NS44IDQ1LjggMCAxIDEgLTkxLjUtLjN6TTE2OS40IDM5NC45YTQ1LjcgNDUuNyAwIDEgMCAuMyA5MS4zIDQ1LjcgNDUuNyAwIDEgMCAtLjMtOTEuM3ptMjkxLjctMjcwYy0zMDIuMiAwLTM3OS4yLTEyLjgtNDYxLjEtOTkuMiAzNC40IDUxLjcgNTMuMyAxNDguOSAzNzMuMSAxNDQuMiAzMzMuMy01IDEzMCA4Ni4xIDcwLjggMTg4LjkgMTg2LjctMTY2LjcgMzE5LjQtMjMzLjkgMTcuMi0yMzMuOXoiXQogICAgfTsKICAgIGZhWUNvbWJpbmF0b3IgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieS1jb21iaW5hdG9yIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyM2IiLCAiTTQ0OCAzMmwwIDQ0OC00NDggMCAwLTQ0OCA0NDggMHpNMjM2IDI4Ny41bDc3LjUtMTQ1LjUtMzIuNyAwLTQ1LjggOTFjLTQuNyA5LjMtOSAxOC4zLTEyLjggMjYuOGwtMTIuMi0yNi44LTQ1LjItOTEtMzUgMCA3Ni43IDE0My44IDAgOTQuNSAyOS41IDAgMC05Mi44eiJdCiAgICB9OwogICAgZmFMaW5lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjMCIsICJNMzExIDE5Ni44bDAgODEuM2MwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTEuMyAwLTIuNC0uNy0zLTEuNUwyNTQgMjMwIDI1NCAyNzguMmMwIDIuMS0xLjYgMy43LTMuNyAzLjdsLTEzIDBjLTIuMSAwLTMuNy0xLjYtMy43LTMuN2wwLTgxLjNjMC0yLjEgMS42LTMuNyAzLjctMy43bDEyLjkgMGMxLjEgMCAyLjQgLjYgMyAxLjZsMzcuMyA1MC4zIDAtNDguMmMwLTIuMSAxLjYtMy43IDMuNy0zLjdsMTMgMGMyLjEtLjEgMy44IDEuNiAzLjggMy41bDAgLjF6bS05My43LTMuN2wtMTMgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMTMgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC04MS4zYzAtMS45LTEuNi0zLjctMy43LTMuN3ptLTMxLjQgNjguMWwtMzUuNiAwIDAtNjQuNGMwLTIuMS0xLjYtMy43LTMuNy0zLjdsLTEzIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDgxLjNjMCAxIC4zIDEuOCAxIDIuNSAuNyAuNiAxLjUgMSAyLjUgMWw1Mi4yIDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjMC0xLjktMS42LTMuNy0zLjUtMy43bC4xIDB6bTE5My43LTY4LjFsLTUyLjMgMGMtMS45IDAtMy43IDEuNi0zLjcgMy43bDAgODEuM2MwIDEuOSAxLjYgMy43IDMuNyAzLjdsNTIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTEzLjFjMC0yLjEtMS42LTMuNy0zLjctMy43bC0zNS41IDAgMC0xMy42IDM1LjUgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC0xMy4xYzAtMi4xLTEuNi0zLjctMy43LTMuN2wtMzUuNSAwIDAtMTMuNyAzNS41IDBjMi4xIDAgMy43LTEuNiAzLjctMy43bDAtMTNjLS4xLTEuOS0xLjctMy43LTMuNy0zLjdsLjEgMHpNNTEyIDkzLjRsMCAzMjZjLS4xIDUxLjItNDIuMSA5Mi43LTkzLjQgOTIuNmwtMzI2IDBDNDEuNCA1MTEuOS0uMSA0NjkuOCAwIDQxOC42bDAtMzI2Qy4xIDQxLjQgNDIuMi0uMSA5My40IDBsMzI2IDBjNTEuMiAuMSA5Mi43IDQyLjEgOTIuNiA5My40ek00NDEuNiAyMzMuNWMwLTgzLjQtODMuNy0xNTEuMy0xODYuNC0xNTEuM1M2OC44IDE1MC4xIDY4LjggMjMzLjVjMCA3NC43IDY2LjMgMTM3LjQgMTU1LjkgMTQ5LjMgMjEuOCA0LjcgMTkuMyAxMi43IDE0LjQgNDIuMS0uOCA0LjctMy44IDE4LjQgMTYuMSAxMC4xczEwNy4zLTYzLjIgMTQ2LjUtMTA4LjJjMjctMjkuNyAzOS45LTU5LjggMzkuOS05My4xbDAtLjJ6Il0KICAgIH07CiAgICBmYUFtaWxpYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWlsaWEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM2ZCIsICJNMjQwLjIgMzJjLTYxLjkgMC0xMzEuNSAxNi45LTE4NC4yIDU1LjQtNS4xIDMuMS05LjEgOS4yLTcuMiAxOS40IDEuMSA1LjEgNS4xIDI3LjQgMTAuMiAzOS42IDQuMSAxMC4yIDE0LjIgMTAuMiAyMC4zIDYuMSAzMi41LTIyLjMgOTYuNS00Ny43IDE1Mi4zLTQ3LjcgNTcuOSAwIDU4LjkgMjguNCA1OC45IDczLjFsMCAzOC41QzIwMy4xIDIyNy43IDc4LjMgMjUxIDQ2LjggMjY0LjIgMTEuMyAyODAuNSAxNi40IDM1Ny43IDE2LjQgMzc2UzMxLjYgNDgwIDE0MS4zIDQ4MGM0Ny44IDAgMTEzLjctMjAuNyAxNTMuMy00Mi4xbDAgMjUuNGMwIDMgMi4xIDguMiA2LjEgOS4xIDMuMSAxIDUwLjcgMiA1OS45IDJzNjIuNSAuMyA2Ni41LS43YzQuMS0xIDUuMS02LjEgNS4xLTkuMWwwLTI5Ni42Yy0uMS04MC4zLTU3LjktMTM2LTE5Mi0xMzZ6bTUwLjIgMzQ4Yy0yMS40IDEzLjItNDguNyAyNC40LTc5LjEgMjQuNC01Mi44IDAtNTguOS0zMy41LTU5LTQ0LjcgMC0xMi4yLTMtNDIuNyAxOC4zLTUyLjkgMjQuMy0xMy4yIDc1LjEtMjkuNCAxMTkuOC0zMy41bDAgMTA2Ljd6Il0KICAgIH07CiAgICBmYUFzeW1tZXRyaWsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXN5bW1ldHJpayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzcyIiwgIk01MTcuNSAzMDkuMmMzOC44LTQwIDU4LjEtODAgNTguNS0xMTYuMSAuOC02NS41LTU5LjQtMTE4LjItMTY5LjQtMTM1LTEyOC43LTE5LjctMjg4LjUgMTUuNS00MDYuNiA4Mi40IDUyLTI2LjUgMTEwLjYtNDguMiAxNzAuNy01OC4yIDc0LjUtMjAuNSAxNTMtMjUuNCAyMjEuMy0xNC44IDE1Mi41IDIzLjggMTk2LjggMTI3LjUgOTguOCAyMzEuNy0xMC4yIDEwLjgtMjIgMjEuMS0zNSAzMC42TDMwNC45IDEwMy40IDExNC43IDM4OC45Yy02NS42LTI5LjQtNzYuNS05MC4yLTE5LjEtMTUxLjIgMjAuOC0yMi4yIDQ4LjMtNDEuOSA3OS41LTU4LjEgMjAtMTIuMiAzOS43LTIyLjYgNjItMzAuNy02NS4xIDIwLjMtMTIyLjcgNTIuOS0xNjEuNiA5Mi45LTI3LjcgMjguNi00MS40IDU3LjEtNDEuNyA4Mi45LS41IDM1LjEgMjMuNCA2NS4xIDY4LjQgODNsLTM0LjUgNTEuNyAxMDEuNiAwIDIyLTM0LjRjMjIuMiAxIDQ1LjMgMCA2OC42LTIuN2wtMjIuOCAzNy4xIDEzNS41IDAtMzIuNi01My4xYzE4LjYtNS4zIDM2LjktMTEuNSA1NC41LTE4LjdsNDUuOSA3MS44IDEwMS42IDAtNzMuNC0xMTAuNGMxOC41LTEyLjEgMzUtMjUuNSA0OC45LTM5Ljh6TTMyOS45IDM4OS43bC0yNS00MC42LTMyLjcgNTMuM2MtMjMuNCAzLjUtNDYuNyA1LjEtNjkuMiA0LjRsMTAxLjktMTU5LjMgNzguNyAxMjNjLTE3LjIgNy40LTM1LjMgMTMuOS01My43IDE5LjJ6Il0KICAgIH07CiAgICBmYVBoYWJyaWNhdG9yID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBoYWJyaWNhdG9yIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzZGIiLCAiTTMzMS4xIDI2Mi4xbC0uMS0xM3MyMS43LTE5LjggMjEuMS0yMS4ybC05LjUtMjBjLS42LTEuNC0yOS41LS41LTI5LjUtLjVsLTkuNC05LjNzLjItMjguNS0xLjItMjkuMWwtMjAuMS05LjJjLTEuNC0uNi0yMC43IDIxLTIwLjcgMjFsLTEzLjEtLjJzLTIwLjUtMjEuNC0yMS45LTIwLjhsLTIwIDguM2MtMS40IC41IC4yIDI4LjkgLjIgMjguOWwtOS4xIDkuMXMtMjkuMi0uOS0yOS43IC40TDE2MCAyMjYuM2MtLjYgMS40IDIxIDIxIDIxIDIxbC4xIDEyLjlTMTU5LjQgMjgwIDE2MCAyODEuNGw5LjUgMjBjLjYgMS40IDI5LjUgLjUgMjkuNSAuNWw5LjQgOS4zcy0uMiAzMS44IDEuMiAzMi4zbDIwLjEgOC4zYzEuNCAuNiAyMC43LTIzLjUgMjAuNy0yMy41bDEzLjEgLjJzMjAuNSAyMy44IDIxLjggMjMuM2wyMC03LjVjMS40LS42LS4yLTMyLjEtLjItMzIuMWw5LjEtOS4xczI5LjIgLjkgMjkuNy0uNWw4LjEtMTkuOGMuNy0xLjEtMjAuOS0yMC43LTIwLjktMjAuN3ptLTQ0LjktOC43Yy43IDE3LjEtMTIuOCAzMS42LTMwLjEgMzIuNHMtMzIuMS0xMi41LTMyLjgtMjkuNiAxMi44LTMxLjYgMzAuMS0zMi4zYzE3LjMtLjggMzIuMSAxMi41IDMyLjggMjkuNXptMjAxLjItMzcuOWwtOTctOTctLjEgLjFjLTc1LjEtNzMuMy0xOTUuNC03Mi44LTI2OS44IDEuNi01MC45IDUxLTI3LjggMjcuOS05NS43IDk1LjMtMjIuMyAyMi4zLTIyLjMgNTguNyAwIDgxIDY5LjkgNjkuNCA0Ni40IDQ2IDk3LjQgOTdsLjEtLjFjNzUuMSA3My4zIDE5NS40IDcyLjkgMjY5LjgtMS42IDUxLTUwLjkgMjcuOS0yNy45IDk1LjMtOTUuMyAyMi4zLTIyLjMgMjIuMy01OC43IDAtODF6TTM2My41IDE0OC4yYTE1Mi4zIDE1Mi4zIDAgMSAxIC0yMTUgMjE1LjYgMTUyLjMgMTUyLjMgMCAxIDEgMjE1LTIxNS42eiJdCiAgICB9OwogICAgZmFCb3RzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJvdHMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTM0MCIsICJNODYuMyAxOTcuOGMtOC0uMS0xNS45IDEuNy0yMy4xIDUuMXMtMTMuNSA4LjYtMTguNCAxNC45bDAtNjEuOWMwLTIuMi0uOS00LjMtMi40LTUuOHMtMy42LTIuNC01LjgtMi40bC0yOC40IDBjLTIuMiAwLTQuMyAuOS01LjggMi40UzAgMTUzLjggMCAxNTZMMCAzMzMuNmMwIDEuMSAuMiAyLjEgLjYgMy4xczEgMS45IDEuOCAyLjcgMS43IDEuNCAyLjcgMS44IDIuMSAuNiAzLjEgLjZsMjguNCAwYzEuMSAwIDIuMS0uMiAzLjEtLjZzMS45LTEgMi43LTEuOCAxLjQtMS43IDEuOC0yLjcgLjYtMi4xIC42LTMuMWwwLTguMWMxMS42IDEzLjQgMjUuOSAxOS44IDQxLjYgMTkuOCAzNC42IDAgNjEuOS0yNi4yIDYxLjktNzMuOCAwLTQ1LjktMjctNzMuNi02MS45LTczLjZ6TTcxLjUgMzA1LjdjLTkuNiAwLTIxLjItNC45LTI2LjctMTIuNWwwLTQzYzUuNS03LjYgMTcuMi0xMi44IDI2LjctMTIuOCAxNy43IDAgMzEuMSAxMy4xIDMxLjEgMzQgMCAyMS4yLTEzLjQgMzQuMy0zMS4xIDM0LjN6bTE1Ni40LTU5YTE3LjQgMTcuNCAwIDEgMCAwIDM0LjggMTcuNCAxNy40IDAgMSAwIDAtMzQuOHptNDYuMS05MGwwLTQ0LjdjMi44LTEuMiA1LjItMy4zIDYuNi02czEuOS01LjggMS4zLTguOS0yLjItNS43LTQuNi03LjctNS40LTMtOC40LTMtNi4xIDEuMS04LjQgMy00IDQuNy00LjYgNy43LS4xIDYuMSAxLjMgOC45IDMuOCA0LjggNi42IDZsMCA0NC43Yy0yOCAxLjMtNTQuNCAxMy42LTczLjYgMzQuMXMtMjkuNSA0Ny43LTI4LjggNzUuOCAxMi4zIDU0LjcgMzIuNCA3NC4zIDQ3IDMwLjYgNzUuMSAzMC42IDU1LTExIDc1LjEtMzAuNiAzMS43LTQ2LjMgMzIuNC03NC4zLTkuNy01NS4zLTI4LjgtNzUuOC00NS41LTMyLjgtNzMuNi0zNC4xem04NiAxMDcuNGMwIDMwLjUtNDAuOCA1NS4zLTkxLjEgNTUuM3MtOTEuMS0yNC43LTkxLjEtNTUuMyA0MC44LTU1LjMgOTEuMS01NS4zIDkxLjEgMjQuNyA5MS4xIDU1LjNsMCAwem0tNTAuMiAxNy40YzMuNCAwIDYuOC0xIDkuNy0yLjlzNS4xLTQuNiA2LjQtNy44IDEuNy02LjcgMS0xMC4xLTIuMy02LjUtNC44LTguOS01LjUtNC4xLTguOS00LjgtNi45LS4zLTEwLjEgMS01LjkgMy41LTcuOCA2LjQtMi45IDYuMi0yLjkgOS43YzAgNC42IDEuOCA5IDUuMSAxMi4zczcuNyA1LjEgMTIuMyA1LjFsMCAwem0yNzAuOS0zMWMtMTQuOC0yLjYtMjIuNC0zLjgtMjIuNC05LjkgMC01LjUgNy4zLTkuOSAxNy43LTkuOSAxMi4yIC4xIDI0LjIgMy42IDM0LjUgMTAuMSAxLjggMS4yIDQgMS42IDYuMiAxLjFzNC0xLjcgNS4xLTMuNmMuMS0uMSAuMS0uMiAuMi0uM2w4LjYtMTQuOWMxLjEtMS45IDEuNC00LjEgLjgtNi4xcy0xLjktMy45LTMuNy01Yy0xNS43LTkuNC0zMy43LTE0LjMtNTItMTQuMS0zOSAwLTYwLjIgMjEuNS02MC4yIDQ2LjIgMCAzNi4zIDMzLjcgNDEuOSA1Ny42IDQ1LjYgMTMuNCAyLjMgMjQuMSA0LjQgMjQuMSAxMSAwIDYuNC01LjUgMTAuOC0xOC45IDEwLjgtMTMuNiAwLTMxLTYuMi00Mi42LTEzLjYtLjktLjYtMS45LTEtMy0xLjJzLTIuMS0uMi0zLjIgLjEtMi4xIC43LTIuOSAxLjMtMS42IDEuNC0yLjIgMi4zYzAgLjEtLjEgLjEtLjEgLjJsLTEwLjIgMTYuOWMtMS4xIDEuOC0xLjQgNC0xIDZzMS43IDMuOSAzLjUgNWMxNS4yIDEwLjMgMzcuNyAxNi43IDU5LjQgMTYuNyA0MC40IDAgNjQtMTkuOCA2NC00Ni41IDAtMzguMS0zNS41LTQzLjktNTkuMy00OC4zem0tOTUuOSA2MC44Yy0uNS0yLTEuOC0zLjctMy42LTQuOHMtMy45LTEuNS01LjktMS4xYy0xLjQgLjMtMi44IC40LTQuMiAuNC03LjggMC0xMi41LTYuMS0xMi41LTE0LjJsMC01MS4yIDIwLjMgMGMyLjIgMCA0LjItLjkgNS44LTIuNHMyLjQtMy42IDIuNC01LjhsMC0yMi43YzAtMi4yLS45LTQuMi0yLjQtNS44cy0zLjYtMi40LTUuOC0yLjRsLTIwLjMgMCAwLTMwLjJjMC0yLjItLjktNC4yLTIuNC01LjhzLTMuNi0yLjQtNS44LTIuNGwtMjguMiAwYy0yLjIgMC00LjIgLjktNS44IDIuNHMtMi40IDMuNi0yLjQgNS44bDAgMzAuMi0xNS4xIDBjLTEuMSAwLTIuMSAuMi0zLjEgLjZzLTEuOSAxLTIuNiAxLjgtMS40IDEuNy0xLjggMi42LS42IDItLjYgMy4xbDAgMjIuN2MwIDEuMSAuMiAyLjEgLjYgMy4xczEgMS45IDEuOCAyLjYgMS43IDEuNCAyLjYgMS44IDIgLjYgMy4xIC42bDE1LjEgMCAwIDYzLjdjMCAyNyAxNS40IDQxLjMgNDMuOSA0MS4zIDEyLjIgMCAyMS40LTIuMiAyNy42LTUuNCAxLjYtLjggMi45LTIuMiAzLjctMy45cy45LTMuNiAuNS01LjRsLTUtMTkuM3oiXQogICAgfTsKICAgIGZhVmluZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW5lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxY2EiLCAiTTM4NCAyNTQuN2wwIDUyLjFjLTE4LjQgNC4yLTM2LjkgNi4xLTUyLjEgNi4xLTM2LjkgNzcuNC0xMDMgMTQzLjgtMTI1LjEgMTU2LjItMTQgNy45LTI3LjEgOC40LTQyLjctLjgtMjcuMS0xNi4zLTEyOS45LTEwMC42LTE2NC4xLTM2NS42bDc0LjUgMGMxOC43IDE1OS4xIDY0LjUgMjQwLjcgMTE0LjggMzAxLjggMjcuOS0yNy45IDU0LjgtNjUuMSA3NS42LTEwNi45LTQ5LjgtMjUuMy04MC4xLTgwLjktODAuMS0xNDUuNiAwLTY1LjYgMzcuNy0xMTUuMSAxMDIuMi0xMTUuMSAxMTQuOSAwIDEwNi4yIDEyNy45IDgxLjYgMTgxLjUgMCAwLTQ2LjQgOS4yLTYzLjUtMjAuNSAzLjQtMTEuMyA4LjItMzAuOCA4LjItNDguNSAwLTMxLjMtMTEuMy00Ni42LTI4LjQtNDYuNi0xOC4yIDAtMzAuOCAxNy4xLTMwLjggNTAgLjEgNzkuMiA1OS40IDExOC43IDEyOS45IDEwMS45eiJdCiAgICB9OwogICAgZmFNZWRydCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtZWRydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2M4IiwgIk0xMjkuNyAyNTZjMCAxMjEuOCA4My45IDIyMi44IDE5My41IDI0MS4xLTE4LjcgNC41LTM4LjIgNi45LTU4LjIgNi45LTEzNy42IDAtMjQ5LTExMS0yNDktMjQ4UzEyNy40IDggMjY0LjkgOGMyMC4xIDAgMzkuNiAyLjQgNTguMiA2LjktMTA5LjYgMTguMy0xOTMuNCAxMTkuMy0xOTMuNCAyNDEuMXpNNDI3LjEgMzU2LjNjLTc3LjcgNTUuNC0xNzkuNiA0Ny41LTI0MC40LTE0LjYgNS41IDE0LjEgMTIuNyAyNy43IDIxLjcgNDAuNSA2MS42IDg4LjIgMTgyLjQgMTA5LjMgMjY5LjcgNDdzMTA4LjEtMTg0LjMgNDYuNS0yNzIuNmMtOS0xMi45LTE5LjMtMjQuMy0zMC41LTM0LjIgMzcuNCA3OC44IDEwLjcgMTc4LjUtNjcgMjMzLjl6bS0yMTguOC0yNDRjLTEuNCAxLTIuNyAyLjEtNCAzLjEgNjQuMy0xNy44IDEzNS45IDQgMTc4LjkgNjAuNSAzNS43IDQ3IDQyLjkgMTA2LjYgMjQuNCAxNTggNTYuNy01Ni4yIDY3LjYtMTQyLjEgMjIuMy0yMDEuOC01MC02NS41LTE0OS4xLTc0LjQtMjIxLjYtMTkuOHpNMzEyIDIyNGMtNC40IDAtOC0zLjYtOC04bDAtNDBjMC00LjQtMy42LTgtOC04bC00OCAwYy00LjQgMC04IDMuNi04IDhsMCA0MGMwIDQuNC0zLjYgOC04IDhsLTQwIDBjLTQuNCAwLTggMy42LTggOGwwIDQ4YzAgNC40IDMuNiA4IDggOGw0MCAwYzQuNCAwIDggMy42IDggOGwwIDQwYzAgNC40IDMuNiA4IDggOGw0OCAwYzQuNCAwIDgtMy42IDgtOGwwLTQwYzAtNC40IDMuNi04IDgtOGw0MCAwYzQuNCAwIDgtMy42IDgtOGwwLTQ4YzAtNC40LTMuNi04LTgtOGwtNDAgMHoiXQogICAgfTsKICAgIGZhT3NpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm9zaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDFhIiwgIk04IDI2Ni40YzIuMy0xMzUuOCA5Ny40LTIzMi40IDIxMy44LTI0OC4xIDEzOC44LTE4LjYgMjU1LjYgNzUuOCAyNzggMjAxLjEgMjEuMyAxMTguOC00NCAyMzAtMTUxLjYgMjc0LTkuMyAzLjgtMTQuNCAxLjctMTgtNy43LTE3LjgtNDYuMy0zNS42LTkyLjYtNTMuNC0xMzktMy4xLTguMS0xLTEzLjIgNy0xNi44IDI0LjItMTEgMzkuMy0yOS40IDQzLjMtNTUuOCAxLjUtOS43IDEtMTkuNi0xLjUtMjkuMXMtNi45LTE4LjQtMTIuOS0yNi4xLTEzLjYtMTQuMS0yMi4yLTE4LjgtMTguMS03LjUtMjcuOS04LjNjLTM5LTMuNC03MS44IDIzLjctNzcuNSA1OS43LTUuMiAzMyAxMS4xIDYzLjcgNDEuOSA3Ny43IDkuNiA0LjQgMTEuNSA4LjYgNy44IDE4LjQtMTcuOSA0Ni42LTM1LjggOTMuMi01My43IDEzOS45LTIuNiA2LjktOC4zIDkuMy0xNS41IDYuNS01Mi42LTIwLjMtMTAxLjQtNjEtMTMwLjgtMTE5LTI0LjktNDkuMi0yNS4yLTg3LjctMjYuOC0xMDguN3ptMjAuOS0xLjljLjQgNi42IC42IDE0LjMgMS4zIDIyLjEgNi4zIDcxLjkgNDkuNiAxNDMuNSAxMzEgMTgzLjEgMy4yIDEuNSA0LjQgLjggNS42LTIuMyAxNC45LTM5LjEgMjkuOS03OC4yIDQ1LTExNy4zIDEuMy0zLjMgLjYtNC44LTIuNC02LjctMzEuNi0xOS45LTQ3LjMtNDguNS00NS42LTg2IDEtMjEuNiA5LjMtNDAuNSAyMy44LTU2LjMgMzAtMzIuNyA3Ny0zOS44IDExNS41LTE3LjYgMTUuNiA5IDI4LjIgMjIuMyAzNi4yIDM4LjRzMTEuMiAzNC4yIDkgNTJjLTMuNiAzMC42LTE5LjMgNTMuOS00NS43IDY5LjgtMi43IDEuNi0zLjUgMi45LTIuMyA2IDE1LjIgMzkuMiAzMC4zIDc4LjQgNDUuMiAxMTcuNyAxLjIgMy4xIDIuNCAzLjggNS42IDIuMyAzNS41LTE2LjYgNjUuMi00MC4zIDg4LjEtNzIgMzQuOC00OC4yIDQ5LjEtMTAxLjkgNDIuMy0xNjEtMTMuNy0xMTcuNS0xMTkuNC0yMTQuOC0yNTUuNS0xOTgtMTA2LjEgMTMtMTk1LjMgMTAyLjUtMTk3LjEgMjI1Ljh6Il0KICAgIH07CiAgICBmYUdnID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjAiLCAiTTE3OS4yIDIzMC40bDEwMi40IDEwMi40LTEwMi40IDEwMi40LTE3OS4yLTE3OS4yIDE3OS4yLTE3OS4yIDQ0LjggNDQuOC0yNS42IDI1LjYtMTkuMi0xOS4yLTEyOCAxMjggMTI4IDEyOCA1MS41LTUxLjUtNzcuMS03Ni41IDI1LjYtMjUuNnpNMzMyLjggNzYuOGwtMTAyLjQgMTAyLjQgMTAyLjQgMTAyLjQgMjUuNi0yNS42LTc3LjEtNzYuNSA1MS41LTUxLjUgMTI4IDEyOC0xMjggMTI4LTE5LjItMTkuMi0yNS42IDI1LjYgNDQuOCA0NC44IDE3OS4yLTE3OS4yLTE3OS4yLTE3OS4yeiJdCiAgICB9OwogICAgZmFCdXlzZWxsYWRzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1eXNlbGxhZHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIwZCIsICJNMjI0IDE1MC43bDQyLjkgMTYwLjctODUuOCAwIDQyLjktMTYwLjd6TTQ0OCA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTM4Mi43IDQwNS4zbC05NC41LTI5OC43LTEyOC40IDAtOTQuNSAyOTguNyA5MC43IDAgMTExLjctOTEuNiAyNC4yIDkxLjYgOTAuOCAweiJdCiAgICB9OwogICAgZmFHb29nbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2dsZS1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyYjMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMTg1LjMgMzgwYy0zMi45IDAtNjQuNC0xMy4xLTg3LjctMzYuM3MtMzYuMy01NC44LTM2LjMtODcuNyAxMy4xLTY0LjQgMzYuMy04Ny43IDU0LjgtMzYuMyA4Ny43LTM2LjNjMzEuMyAwIDYwLjEgMTEgODMgMzIuM2wtMzMuNiAzMi42Yy0xMy4yLTEyLjktMzEuMy0xOS4xLTQ5LjQtMTkuMS00Mi45IDAtNzcuMiAzNS41LTc3LjIgNzguMVMxNDIuMyAzMzQgMTg1LjMgMzM0YzMyLjYgMCA2NC45LTE5LjEgNzAuMS01My4zbC03MC4xIDAgMC00Mi42IDExNi45IDBjMS4zIDYuOCAxLjkgMTMuOCAxLjkgMjAuNyAwIDcwLjgtNDcuNSAxMjEuMi0xMTguOCAxMjEuMnpNNDE1LjUgMjczLjhsMCAzNS41LTM1LjUgMCAwLTM1LjUtMzUuNSAwIDAtMzUuNSAzNS41IDAgMC0zNS41IDM1LjUgMCAwIDM1LjUgMzUuMiAwIDAgMzUuNS0zNS4yIDB6Il0KICAgIH07CiAgICBmYVNjcmVlbnBhbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzY3JlZW5wYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MCIsICJNMjc4LjYgMjIuNWEyMi41IDIyLjUgMCAxIDEgLTQ1IDAgMjIuNSAyMi41IDAgMSAxIDQ1IDB6TTE5OC43IDI1OWE1Ny40IDU3LjQgMCAxIDEgMTE0LjggMCA1Ny40IDU3LjQgMCAxIDEgLTExNC44IDB6bTEzOC42IDkxYzIyLjMtMTkuOSAzNi41LTQ3LjMgMzkuOS03N2wxMTkuNSAwYy0zLjUgNjEuNC0zMC40IDExOS4yLTc1LjIgMTYxLjQtNDQuNyA0Mi4yLTEwMy45IDY1LjgtMTY1LjQgNjUuOFMxMzUuNCA0NzYuNiA5MC43IDQzNC40QzQ1LjkgMzkyLjIgMTkuMSAzMzQuNCAxNS41IDI3M2wxMTkuNyAwYzMuNCAyOS43IDE3LjYgNTcuMSAzOS45IDc3czUxLjIgMzAuOSA4MS4xIDMwLjljMjkgMCA1OC43LTExIDgxLjEtMzAuOXpNMjguMyAxNDEuN2EyMi41IDIyLjUgMCAxIDEgNDUtMS40IDIyLjUgMjIuNSAwIDEgMSAtNDUgMS40em00NTUuNi0uN2EyMi40IDIyLjQgMCAxIDEgLTQ0LjkgMCAyMi40IDIyLjQgMCAxIDEgNDQuOSAwek0zMTggOTUuM2MtMTcuMyAxMy44LTM5LjIgMjIuOC02MS45IDIyLjhzLTQ0LjYtOS02MS45LTIyLjhjLTE3LjMtMTQuNy0yOC44LTM1LjEtMzIuNC01Ny41IDE1LjEtNi40IDMwLjgtMTEuMyA0Ni45LTE0LjUgMCAxMi42IDUgMjQuNiAxMy45IDMzLjVzMjAuOSAxMy45IDMzLjUgMTMuOSAyNC42LTUgMzMuNS0xMy45IDEzLjktMjAuOSAxMy45LTMzLjVjMTYuMSAzLjIgMzEuOCA4LjEgNDYuOSAxNC41LTMuNiAyMi40LTE1LjEgNDIuOC0zMi40IDU3LjV6TTgyLjkgMjMxYy0yMS40IDcuNi00NC43IDcuNC02NS45LS42IDItMTYuMyA1LjYtMzIuMyAxMC44LTQ3LjkgNS40IDMuMSAxMS4zIDUuMSAxNy41IDYgNi4yIC44IDEyLjQgLjQgMTguNS0xLjIgNi0xLjcgMTEuNi00LjQgMTYuNi04LjJzOS4xLTguNSAxMi4yLTEzLjkgNS4xLTExLjQgNi0xNy41Yy44LTYuMiAuNC0xMi41LTEuMi0xOC41cy00LjQtMTEuNi04LjItMTYuNmMtMy44LTQuOS04LjUtOS4xLTEzLjktMTIuMiAxMC44LTEyLjMgMjIuOS0yMy41IDM2LTMzLjMgMTcuNiAxNC4zIDI5LjUgMzQuNSAzMy42IDU2LjhzLjEgNDUuNC0xMS4yIDY1Yy0xMS40IDE5LjYtMjkuNCAzNC41LTUwLjcgNDIuMXptMzQ2LjQgLjFjLTIxLjMtNy42LTM5LjMtMjIuNi01MC43LTQyLjItMTEuMy0xOS42LTE1LjItNDIuNy0xMS4xLTY1IDQuMS0yMi4yIDE2LTQyLjQgMzMuNS01Ni43IDEzLjEgOS44IDI1LjIgMjEgMzYgMzMuMy0xMC43IDYuNC0xOC40IDE2LjctMjEuNSAyOC44LTMuMiAxMi0yLjMgMjQuOCA0LjggMzUuNiA2LjIgMTAuOCAxNi40IDE4LjcgMjguNCAyMnMyNC45IDEuNyAzNS43LTQuM2M1LjMgMTUuNSA4LjkgMzEuNiAxMC45IDQ3LjgtMjIuMSA4LjEtNDQuNiA4LjMtNjYgLjd6Il0KICAgIH07CiAgICBmYUJpdGNvaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYml0Y29pbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzc5IiwgIk04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem0zNTQuMy0zNS4zYzQuOS0zMy0yMC4yLTUwLjctNTQuNi02Mi42bDExLjEtNDQuNy0yNy4yLTYuOC0xMC45IDQzLjVjLTcuMi0xLjgtMTQuNS0zLjUtMjEuOC01LjFsMTAuOS00My44LTI3LjItNi44LTExLjIgNDQuN2MtNS45LTEuMy0xMS43LTIuNy0xNy40LTQuMWwwLS4xLTM3LjUtOS40LTcuMiAyOS4xczIwLjIgNC42IDE5LjggNC45YzExIDIuOCAxMyAxMCAxMi43IDE1LjhsLTEyLjcgNTAuOWMuOCAuMiAxLjcgLjUgMi44IC45LS45LS4yLTEuOS0uNS0yLjktLjdsLTE3LjggNzEuM2MtMS4zIDMuMy00LjggOC40LTEyLjUgNi41IC4zIC40LTE5LjgtNC45LTE5LjgtNC45bC0xMy41IDMxLjEgMzUuNCA4LjhjNi42IDEuNyAxMyAzLjQgMTkuNCA1bC0xMS4zIDQ1LjIgMjcuMiA2LjggMTEuMi00NC43YzcuMiAyIDE0LjQgMy44IDIxLjcgNS42bC0xMS4xIDQ0LjUgMjcuMiA2LjggMTEuMy00NS4xYzQ2LjQgOC44IDgxLjMgNS4yIDk2LTM2LjcgMTEuOC0zMy44LS42LTUzLjMtMjUtNjYgMTcuOC00LjEgMzEuMi0xNS44IDM0LjctMzkuOXptLTYyLjIgODcuMmMtOC40IDMzLjgtNjUuMyAxNS41LTgzLjggMTAuOWwxNC45LTU5LjljMTguNCA0LjYgNzcuNiAxMy43IDY4LjggNDl6bTguNC04Ny43Yy03LjcgMzAuNy01NSAxNS4xLTcwLjQgMTEuM2wxMy41LTU0LjNjMTUuNCAzLjggNjQuOCAxMSA1Ni44IDQzeiJdCiAgICB9OwogICAgZmFTd2lmdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzd2lmdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmOGUxIiwgIk00NDggMTU2LjFjMC00LjUtLjEtOS0uMi0xMy41LS4xLTkuOS0xLTE5LjctMi42LTI5LjQtMS43LTkuNy00LjgtMTkuMi05LjItMjgtOS0xNy43LTIzLjQtMzIuMS00MS4yLTQxLjEtOC44LTQuNS0xOC4zLTcuNi0yOC05LjItOS43LTEuNi0xOS42LTIuNS0yOS40LTIuNi00LjUtLjEtOS0uMi0xMy41LS4yTDEyNC4xIDMyYy00LjUgMC05IC4xLTEzLjUgLjItMi40IC4xLTQuOSAuMi03LjQgLjMtNy40IC4zLTE0LjggMS4xLTIyLjEgMi4zLTcuMyAxLjMtMTQuNCAzLjMtMjEuMiA2LjEtMi4zIDEtNC42IDItNi44IDMuMS02LjYgMy40LTEyLjggNy41LTE4LjQgMTIuMy0xLjkgMS42LTMuNyAzLjMtNS40IDUtNyA3LTEyLjkgMTUtMTcuNCAyMy44LTQuNCA4LjgtNy42IDE4LjMtOS4yIDI4LTEuNiA5LjctMi40IDE5LjYtMi41IDI5LjQtLjEgNC41LS4yIDktLjIgMTMuNUwwIDM1NS45YzAgNC41IC4xIDkgLjIgMTMuNSAuMSA5LjkgMSAxOS43IDIuNiAyOS40IDEuNyA5LjcgNC44IDE5LjIgOS4yIDI4IDkgMTcuNyAyMy40IDMyLjEgNDEuMSA0MS4xIDguOCA0LjQgMTguMyA3LjUgMjggOS4yIDkuNyAxLjYgMTkuNiAyLjUgMjkuNCAyLjYgNC41IC4xIDkgLjIgMTMuNSAuMmwxOTkuOCAwYzQuNSAwIDktLjEgMTMuNS0uMiA5LjktLjEgMTkuNy0xIDI5LjQtMi42IDkuNy0xLjcgMTkuMi00LjggMjgtOS4yIDE3LjctOSAzMi4xLTIzLjQgNDEuMS00MS4yIDQuNC04LjggNy42LTE4LjMgOS4yLTI4IDEuNi05LjcgMi41LTE5LjYgMi42LTI5LjQgLjEtNC41IC4yLTkgLjItMTMuNWwwLTE4My44YzAtNS40IDAtMTAuNyAwLTE2em0tNjkuOSAyNDFjLTIwLTM4LjktNTcuMi0yOS4zLTc2LjMtMTkuNS0xLjcgMS0zLjUgMi01LjIgM2wtLjQgLjJjLTM5LjUgMjEtOTIuNSAyMi41LTE0NS44LS40LTQzLjQtMTguOC04MC4xLTUwLjMtMTA1LjMtOTAuNCAxMi4zIDkuMSAyNS40IDE2LjkgMzkuMiAyMy40IDU2LjQgMjYuNCAxMTMgMjQuNSAxNTMgMC01Ny00My44LTEwNC42LTEwMS0xNDEuMS0xNDcuMi03LTguMS0xMy4yLTE2LjgtMTguOC0yNS45IDQzLjcgNDAgMTEyLjcgOTAuMiAxMzcuNSAxMDQuMS01Mi42LTU1LjUtOTguOS0xMjMuOS05Ni43LTEyMS43IDgyLjggODMuNCAxNTkuMiAxMzAuNiAxNTkuMiAxMzAuNiAyLjkgMS42IDUgMi44IDYuNyA0IDEuNi00LjEgMy04LjIgNC4yLTEyLjUgMTMuMi00OC4zLTEuNy0xMDMuNi0zNS4zLTE0OS4yIDc2LjggNDYuMSAxMjIuMiAxMzMuNyAxMDMuNiAyMDcuOC0uNCAxLjctMSAzLjQtMS40IDUuMSAzOC41IDQ3LjQgMjggOTguMiAyMy4xIDg4LjZsMCAweiJdCiAgICB9OwogICAgZmFGaWxlc1BpbndoZWVsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpbGVzLXBpbndoZWVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OWYiLCAiTTI1My41IDI0Ni40TDEzNy4yIDEzMC4yYy0uNi0uNi0xLTEuMy0xLjQtMnMtLjUtMS42LS41LTIuNCAuMi0xLjYgLjUtMi40IC44LTEuNCAxLjQtMkwyNTMuNiA1LjFjLjktLjkgMi0xLjUgMy4yLTEuN3MyLjUtLjEgMy42IC4zIDIuMSAxLjMgMi44IDIuMyAxLjEgMi4yIDEuMSAzLjVsMCAyMzIuNWMwIDEuMy0uMyAyLjUtMSAzLjZzLTEuNyAxLjktMi45IDIuNC0yLjUgLjYtMy43IC4zLTIuNC0uOS0zLjItMS45em00MC4zLTQuNGwwLTEzNC40YzAtLjggLjEtMS42IC41LTIuNHMuOC0xLjUgMS4zLTIuMSAxLjMtMS4xIDItMS40IDEuNi0uNSAyLjQtLjVsMTM0LjQgMGMxLjIgMCAyLjUgLjQgMy41IDEuMXMxLjggMS43IDIuMyAyLjggLjYgMi40IC4zIDMuNi0uOSAyLjMtMS43IDMuMkwzMDQuMyAyNDYuNGMtLjkgLjgtMiAxLjQtMy4yIDEuNnMtMi40IC4xLTMuNS0uNC0yLjEtMS4zLTIuOC0yLjMtMS4xLTIuMi0xLjEtMy40bC4xIC4xem0zMC42IDM1Yy0xLjIgMC0yLjUtLjMtMy41LTFzLTEuOS0xLjYtMi40LTIuOC0uNi0yLjQtLjQtMy42IC44LTIuMyAxLjctMy4yTDQwNCAxODIuMmMuNi0uNiAxLjMtMSAyLTEuNHMxLjYtLjUgMi40LS41IDEuNiAuMiAyLjQgLjUgMS40IC44IDIgMS40bDg0LjQgODQuMmMuOSAuOSAxLjUgMiAxLjcgMy4ycy4xIDIuNS0uMyAzLjYtMS4zIDIuMS0yLjMgMi44LTIuMiAxLjEtMy41IDEuMWwtMTY4LjUgMCAuMS0uMXptOTAuNyAxMzFsLTk1LjMtOTUuMmMtLjktLjktMS41LTItMS43LTMuMnMtLjEtMi41IC40LTMuNyAxLjMtMi4xIDIuNC0yLjggMi4zLTEgMy41LTFsOTUuMiAwYzEuNyAwIDMuMiAuNyA0LjQgMS44czEuOCAyLjggMS44IDQuNGwwIDk1LjNjMCAxLjItLjQgMi41LTEuMSAzLjVzLTEuNyAxLjgtMi44IDIuMy0yLjQgLjYtMy42IC4zLTIuMy0uOS0zLjItMS43ek0xNi44IDMwMi4xbDIxNi45IDBjMS4yIDAgMi41IC40IDMuNSAxLjFzMS44IDEuNyAyLjMgMi44IC42IDIuNCAuMyAzLjYtLjggMi4zLTEuNyAzLjJMMTI5LjcgNDIxLjJjLS42IC42LTEuMyAxLTIgMS40cy0xLjYgLjUtMi40IC41LTEuNi0uMi0yLjQtLjUtMS40LS44LTItMS40TDEyLjMgMzEyLjhjLS45LS45LTEuNS0yLTEuNy0zLjJzLS4xLTIuNSAuNC0zLjYgMS4zLTIuMSAyLjMtMi44IDIuMy0xIDMuNS0xbDAtLjF6TTI2NC4zIDQ2NS4zYzAgLjgtLjIgMS42LS41IDIuNHMtLjggMS41LTEuNCAyLTEuMyAxLTIgMS40LTEuNiAuNS0yLjQgLjVsLTEyOCAwYy0xLjIgMC0yLjUtLjQtMy41LTEuMXMtMS44LTEuNy0yLjMtMi44LS42LTIuNC0uMy0zLjYgLjgtMi4zIDEuNy0zLjJsMTI4LTEyOGMuOS0uOSAyLTEuNSAzLjItMS43czIuNS0uMSAzLjYgLjMgMi4xIDEuMyAyLjggMi4zIDEuMSAyLjIgMS4xIDMuNWwwIDEyOHptNDAtMTMyLjVsODIuOCA4Mi43Yy42IC42IDEgMS4zIDEuNCAycy41IDEuNiAuNSAyLjQtLjIgMS42LS41IDIuNC0uOCAxLjQtMS40IDJMMzA0LjMgNTA3Yy0uOSAuOS0yIDEuNS0zLjIgMS43cy0yLjUgLjEtMy42LS4zLTIuMS0xLjMtMi44LTIuMy0xLjEtMi4yLTEuMS0zLjVsMC0xNjUuNGMwLTEuMiAuNC0yLjUgMS4xLTMuNXMxLjctMS44IDIuOC0yLjMgMi40LS42IDMuNi0uMyAyLjMgLjggMy4yIDEuN3pNNzkgMTIyLjRjMC0xLjIgLjMtMi41IDEtMy41czEuNy0xLjggMi44LTIuMyAyLjQtLjYgMy42LS40IDIuMyAuOCAzLjIgMS43TDIzOC4xIDI2Ni40Yy45IC45IDEuNSAyIDEuNyAzLjJzLjEgMi41LS4zIDMuNi0xLjMgMi4xLTIuMyAyLjgtMi4yIDEuMS0zLjUgMS4xbC0xNDguNCAwYy0xLjcgMC0zLjItLjctNC40LTEuOHMtMS44LTIuOC0xLjgtNC40bDAtMTQ4LjQtLjEtLjF6Il0KICAgIH07CiAgICBmYUxhcmF2ZWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGFyYXZlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2JkIiwgIk01MDQuNiAxMTUuOGMtLjEtLjItLjItLjUtLjMtLjctLjEtLjQtLjMtLjgtLjUtMS4yLS4yLS4yLS4zLS41LS41LS43LS4yLS4zLS41LS42LS43LS45LS4yLS4yLS41LS40LS44LS42LS4zLS4yLS42LS41LS45LS43TDQwNC42IDU1LjVjLTEuMi0uNy0yLjYtMS4xLTQtMS4xcy0yLjggLjQtNCAxLjFMMzAwLjMgMTExYy0uMyAuMi0uNiAuNC0uOSAuNy0uMyAuMi0uNSAuNC0uOCAuNi0uMyAuMy0uNSAuNi0uNyAuOS0uMiAuMi0uNCAuNC0uNSAuNy0uMiAuNC0uNCAuOC0uNSAxLjItLjEgLjItLjIgLjQtLjMgLjctLjIgLjctLjMgMS40LS4zIDIuMWwwIDEwNS4yLTgwLjIgNDYuMiAwLTIwNS45YzAtLjctLjEtMS40LS4zLTIuMS0uMS0uMi0uMi0uNC0uMy0uNy0uMS0uNC0uMy0uOC0uNS0xLjItLjEtLjMtLjQtLjUtLjUtLjctLjItLjMtLjUtLjYtLjctLjktLjItLjItLjUtLjQtLjgtLjYtLjMtLjItLjYtLjUtLjktLjdMMTE1LjggMS4xYy0xLjItLjctMi42LTEuMS00LTEuMXMtMi44IC40LTQgMS4xTDExLjUgNTYuNWMtLjMgLjItLjYgLjQtLjkgLjctLjMgLjItLjUgLjQtLjggLjYtLjMgLjMtLjUgLjYtLjcgLjktLjIgLjMtLjQgLjUtLjYgLjctLjIgLjQtLjQgLjgtLjUgMS4yLS4xIC4yLS4yIC40LS4zIC43LS4yIC43LS4zIDEuNC0uMyAyLjFsMCAzMjkuN2MwIDEuNCAuNCAyLjggMS4xIDRzMS43IDIuMiAyLjkgMi45TDIwNCA1MTAuOWMuNCAuMiAuOSAuNCAxLjMgLjUgLjIgLjEgLjQgLjIgLjYgLjMgMS4zIC40IDIuOCAuNCA0LjEgMCAuMi0uMSAuNC0uMiAuNi0uMiAuNS0uMiAxLS4zIDEuNC0uNkw0MDQuNiA0MDAuMWMxLjItLjcgMi4yLTEuNyAyLjktMi45czEuMS0yLjYgMS4xLTRsMC0xMDUuMyA5Mi4yLTUzLjFjMS4yLS43IDIuMi0xLjcgMi45LTNzMS4xLTIuNiAxLjEtNGwwLTEwOS44YzAtLjctLjEtMS40LS4yLTIuMXpNMTExLjggMTcuM2w4MC4yIDQ2LjEtODAuMiA0Ni4yLTgwLjItNDYuMiA4MC4yLTQ2LjJ6bTg4LjIgNjBsMCAyMDEuM2MtMzMuMiAxOS4xLTU5LjkgMzQuNS04MC4yIDQ2LjJsMC0yMDEuM0MxNTMgMTA0LjQgMTc5LjcgODkgMjAwIDc3LjN6bTAgNDEyLjhMMjMuNSAzODguNSAyMy41IDc3LjNjMjAuMyAxMS43IDQ3LjEgMjcuMSA4MC4yIDQ2LjJsMCAyMTUuMmMwIC4zIC4xIC42IC4xIC45IDAgLjQgLjEgLjggLjIgMS4yIC4xIC4zIC4yIC42IC40IC45IC4xIC4zIC4zIC43IC40IDEgLjIgLjMgLjQgLjUgLjYgLjggLjIgLjMgLjQgLjYgLjcgLjggLjIgLjIgLjUgLjQgLjggLjYgLjMgLjIgLjYgLjUgLjkgLjdsOTIuMiA1Mi4yIC4xIDkyLjR6bTgtMTA2LjJMMTI4IDMzOC42YzU0LjctMzEuNSAxMTMuNS02NS4zIDE3Ni4zLTEwMS41bDgwLjEgNDYuMUMzNTUgMzAwIDI5Ni4yIDMzMy41IDIwOCAzODMuOXptMTg0LjUgNC42bC0xNzYuNSAxMDEuNiAwLTkyLjNDMzE3LjQgMzQwIDM3Ni4yIDMwNi40IDM5Mi41IDI5N2wwIDkxLjR6bTAtMTE5LjFjLTIwLjMtMTEuNi00Ny4xLTI3LTgwLjItNDYuMWwwLTkxLjRjMjAuMyAxMS43IDQ3LjEgMjcuMSA4MC4yIDQ2LjJsMCA5MS4zem04LTEwNS4zbC04MC4yLTQ2LjIgODAuMi00Ni4yIDgwLjIgNDYuMS04MC4yIDQ2LjJ6bTggMTA1LjNsMC05MS4zYzMzLjItMTkuMSA2MC0zNC41IDgwLjMtNDYuMmwwIDkxLjQtODAuMyA0Ni4yeiJdCiAgICB9OwogICAgZmFXcGZvcm1zID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndwZm9ybXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI5OCIsICJNNDQ4IDc1LjJsMCAzNjEuN2MwIDI0LjMtMTkgNDMuMi00My4yIDQzLjJsLTM2MS42IDBDMTkuMyA0ODAgMCA0NjEuNCAwIDQzNi44TDAgNzUuMkMwIDUxLjEgMTguOCAzMiA0My4yIDMybDM2MS43IDBjMjQgMCA0My4xIDE4LjggNDMuMSA0My4yek00MTAuNyA0MzYuOGwwLTM2MS42YzAtMy0yLjYtNS44LTUuOC01LjhsLTkuMyAwLTExMC4zIDc0LjYtNjEuMy00OS45LTYxLjIgNDkuOS0xMTAuMy03NC43LTkuMyAwYy0zLjIgMC01LjggMi44LTUuOCA1LjhsMCAzNjEuN2MwIDMgMi42IDUuOCA1LjggNS44bDM2MS43IDBjMy4yIC4xIDUuOC0yLjcgNS44LTUuOHpNMTUwLjIgMTg2bDAgMzctNzMuNSAwIDAtMzcgNzMuNSAwem0wIDc0LjRsMCAzNy4zLTczLjUgMCAwLTM3LjMgNzMuNSAwem0xMS4xLTE0Ny4zbDU0LTQzLjctMTE4LjUgMCA2NC41IDQzLjd6bTIxMCA3Mi45bDAgMzctMTk2IDAgMC0zNyAxOTYgMHptMCA3NC40bDAgMzcuMy0xOTYgMCAwLTM3LjMgMTk2IDB6TTI4Ni43IDExMy4xbDY0LjUtNDMuNy0xMTguNCAwIDUzLjkgNDMuN3pNMzcxLjMgMzM1bDAgMzcuMy05OS40IDAgMC0zNy4zIDk5LjQgMHoiXQogICAgfTsKICAgIGZhU3BlYWtlckRlY2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3BlYWtlci1kZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2MiLCAiTTIxMy45IDI5NkwxMDAgMjk2Yy0yNi41IDAtNTItMTAuNS03MC43LTI5LjNTMCAyMjIuNSAwIDE5NiAxMC41IDE0NCAyOS4zIDEyNS4zIDczLjUgOTYgMTAwIDk2bDEzMi44IDBjMTAuNiAwIDIwLjggNC4yIDI4LjMgMTEuN3MxMS43IDE3LjcgMTEuNyAyOC4zLTQuMiAyMC44LTExLjcgMjguMy0xNy43IDExLjctMjguMyAxMS43TDk4IDE3NmMtMjYuNSAwLTI2LjQgNDAgMCA0MGwxMTMuOCAwYzI2LjUgMCA1MiAxMC41IDcwLjcgMjkuM3MyOS4zIDQ0LjIgMjkuMyA3MC43LTEwLjUgNTItMjkuMyA3MC43LTQ0LjIgMjkuMy03MC43IDI5LjNMNDAgNDE2Yy0xMC42IDAtMjAuOC00LjItMjguMy0xMS43UzAgMzg2LjYgMCAzNzYgNC4yIDM1NS4yIDExLjcgMzQ3LjcgMjkuNCAzMzYgNDAgMzM2bDE3My45IDBjMjYuNSAwIDI2LjUtNDAgMC00MHpNMjk4IDQxNmMxMy41LTkuMiAyNS0yMSAzMy44LTM0LjdzMTQuNy0yOS4yIDE3LjMtNDUuM2w2NC42IDBjMi42IDAgNS4yLS42IDcuNi0xLjZzNC42LTIuNSA2LjQtNC40IDMuMy00LjEgNC4yLTYuNSAxLjUtNSAxLjQtNy42bDAtMTIwYzAtMi42LS41LTUuMi0xLjQtNy42cy0yLjQtNC42LTQuMi02LjUtNC0zLjMtNi40LTQuNC01LTEuNi03LjYtMS42bC0xMTcuMiAwYzkuNy0xMS4xIDE1LTI1LjMgMTUtNDBzLTUuMy0yOC45LTE1LTQwbDEzNi45IDBjNDMuNCAwIDc4LjYgMzUuOCA3OC42IDgwbDAgMTYwYzAgNDQuMi0zNS4yIDgwLTc4LjYgODBMMjk4IDQxNnoiXQogICAgfTsKICAgIGZhRmxpY2tyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZsaWNrciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTZlIiwgIk00MDAgMzJMNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzNTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OHpNMTQ0LjUgMTkyYTYzLjUgNjMuNSAwIDEgMSAwIDEyNyA2My41IDYzLjUgMCAxIDEgMC0xMjd6bTE1OSAwYTYzLjUgNjMuNSAwIDEgMSAwIDEyNyA2My41IDYzLjUgMCAxIDEgMC0xMjd6Il0KICAgIH07CiAgICBmYUNjVmlzYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy12aXNhIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjAiLCAiTTQ3MC4xIDIzMS4zczcuNiAzNy4yIDkuMyA0NWwtMzMuNCAwYzMuMy04LjkgMTYtNDMuNSAxNi00My41LS4yIC4zIDMuMy05LjEgNS4zLTE0LjlsMi44IDEzLjR6TTU3NiA4MGwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTE1Mi41IDMzMS4ybDYzLjItMTU1LjItNDIuNSAwLTM5LjMgMTA2LTQuMy0yMS41LTE0LTcxLjRjLTIuMy05LjktOS40LTEyLjctMTguMi0xMy4xbC02NC43IDAtLjcgMy4xYzE1LjggNCAyOS45IDkuOCA0Mi4yIDE3LjFsMzUuOCAxMzUgNDIuNSAwem05NC40IC4ybDI1LjItMTU1LjQtNDAuMiAwLTI1LjEgMTU1LjQgNDAuMSAwem0xMzkuOS01MC44Yy4yLTE3LjctMTAuNi0zMS4yLTMzLjctNDIuMy0xNC4xLTcuMS0yMi43LTExLjktMjIuNy0xOS4yIC4yLTYuNiA3LjMtMTMuNCAyMy4xLTEzLjQgMTMuMS0uMyAyMi43IDIuOCAyOS45IDUuOWwzLjYgMS43IDUuNS0zMy42Yy03LjktMy4xLTIwLjUtNi42LTM2LTYuNi0zOS43IDAtNjcuNiAyMS4yLTY3LjggNTEuNC0uMyAyMi4zIDIwIDM0LjcgMzUuMiA0Mi4yIDE1LjUgNy42IDIwLjggMTIuNiAyMC44IDE5LjMtLjIgMTAuNC0xMi42IDE1LjItMjQuMSAxNS4yLTE2IDAtMjQuNi0yLjUtMzcuNy04LjNsLTUuMy0yLjUtNS42IDM0LjljOS40IDQuMyAyNi44IDguMSA0NC44IDguMyA0Mi4yIC4xIDY5LjctMjAuOCA3MC01M3pNNTI4IDMzMS40bC0zMi40LTE1NS40LTMxLjEgMGMtOS42IDAtMTYuOSAyLjgtMjEgMTIuOWwtNTkuNyAxNDIuNSA0Mi4yIDBzNi45LTE5LjIgOC40LTIzLjNsNTEuNiAwYzEuMiA1LjUgNC44IDIzLjMgNC44IDIzLjNsMzcuMiAweiJdCiAgICB9OwogICAgZmFVcHdvcmsgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidXB3b3JrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2NDEiLCAiTTQ5My45IDI5NS42Yy01MC4zIDAtODMuNS0zOC45LTkyLjgtNTMuOSAxMS45LTk1LjMgNDYuOC0xMjUuNCA5Mi44LTEyNS40IDQ1LjUgMCA4MC45IDM2LjQgODAuOSA4OS43cy0zNS40IDg5LjctODAuOSA4OS43bDAtLjF6bTAtMjM3LjhjLTgxLjkgMC0xMjcuOCA1My40LTE0MSAxMDguNC0xNC45LTI4LTI1LjktNjUuNS0zNC41LTEwMC4zbC0xMTMuMiAwIDAgMTQxYzAgNTEuMS0yMy4zIDg5LTY4LjggODlzLTcxLjYtMzcuOC03MS42LTg5bC41LTE0MS02NS4zIDAgMCAxNDFjMCA0MS4xIDEzLjMgNzguNCAzNy42IDEwNS4xIDI1IDI3LjUgNTkuMiA0MS44IDk4LjggNDEuOCA3OC44IDAgMTMzLjgtNjAuNCAxMzMuOC0xNDYuOWwwLTk0LjhjOC4yIDMxLjIgMjcuOCA5MS4xIDY1LjMgMTQzLjZsLTM1IDE5OS40IDY2LjQgMCAyMy4xLTE0MS4zYzcuNiA2LjMgMTUuNyAxMiAyNC4yIDE3IDIyLjIgMTQgNDcuNyAyMS45IDczLjkgMjIuOCAwIDAgNCAuMiA2LjEgLjIgODEuMiAwIDE0NS45LTYyLjkgMTQ1LjktMTQ3LjhTNTc1LjMgNTcuOSA0OTQuMSA1Ny45bC0uMi0uMXoiXQogICAgfTsKICAgIGZhS2FrYW9UYWxrID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImtha2FvLXRhbGsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTdkNyIsICJNMjg4IDIuNWMxNTkuMSAwIDI4OCAxMDEuNyAyODggMjI3LjEgMCAxMjUuNC0xMjguOSAyMjcuMS0yODggMjI3LjEtMTcuNSAwLTM0LjYtMS4yLTUxLjItMy42LTE2LjYgMTEuNy0xMTIuNiA3OS4xLTEyMS43IDgwLjQgMCAwLTMuNyAxLjQtNi45LS40cy0yLjYtNi43LTIuNi02LjdDMTA2LjYgNTE5LjggMTMwLjYgNDM3LjIgMTM1IDQyMS45IDUzLjkgMzgxLjggMCAzMTAuNiAwIDIyOS41IDAgMTA0LjEgMTI4LjkgMi41IDI4OCAyLjV6TTg2LjIgMTYxLjdjLTkgMC0xNi4zIDcuMy0xNi4zIDE2LjNzNy4zIDE2LjMgMTYuMyAxNi4zbDI1LjkgMCAwIDk4LjdjMCA4LjggNy41IDE1LjkgMTYuNiAxNS45czE2LjYtNy4xIDE2LjYtMTUuOWwwLTk4LjcgMjUuOSAwYzkgMCAxNi4zLTcuMyAxNi4zLTE2LjNzLTcuMy0xNi4zLTE2LjMtMTYuM2wtODUuMSAwem0xNDAuOCAwYy0xMC44IC4yLTE5LjMgOC40LTIyLjEgMTYuNEwxNjUuMiAyODIuN2MtNSAxNS43LS42IDIxLjUgMy45IDIzLjYgMy4yIDEuNSA2LjkgMi4zIDEwLjYgMi4zIDYuOSAwIDEyLjItMi44IDEzLjgtNy4zbDguMi0yMS42IDUwLjcgMCA4LjIgMjEuNWMxLjYgNC41IDYuOSA3LjMgMTMuOCA3LjMgMy43IDAgNy4zLS44IDEwLjYtMi4zIDQuNi0yLjEgOS03LjkgMy45LTIzLjZMMjQ5LjIgMTc4LjFjLTIuOC04LTExLjMtMTYuMi0yMi4yLTE2LjR6bTE4MC45IDBjLTkuMiAwLTE2LjYgNy41LTE2LjYgMTYuNmwwIDExMy43YzAgOS4yIDcuNSAxNi42IDE2LjYgMTYuNnMxNi42LTcuNSAxNi42LTE2LjZsMC0zNi4yIDUuOC01LjggMzguOSA1MS42YzMuMiA0LjIgOCA2LjYgMTMuMyA2LjYgMy42IDAgNy4xLTEuMSAxMC0zLjMgMy41LTIuNyA1LjgtNi42IDYuNC0xMXMtLjUtOC44LTMuMi0xMi4zbC00MC45LTU0LjIgMzcuOS0zNy44YzIuNi0yLjYgMy45LTYuMiAzLjctMTAuMS0uMi0zLjktMi03LjYtNC45LTEwLjUtMy4xLTMuMS03LjMtNC45LTExLjQtNC45LTMuNiAwLTYuOCAxLjMtOS4yIDMuN2wtNDYuMyA0Ni40IDAtMzUuN2MwLTkuMi03LjUtMTYuNi0xNi42LTE2LjZ6bS05MS4zIDBjLTkuMyAwLTE2LjkgNy41LTE2LjkgMTYuNmwwIDExMi44YzAgOC40IDcuMSAxNS4yIDE1LjkgMTUuM2w1My4zIDBjOC44IDAgMTUuOS02LjkgMTUuOS0xNS4zcy03LjItMTUuMi0xNS45LTE1LjJsLTM1LjMgMCAwLTk3LjZjMC05LjItNy42LTE2LjYtMTctMTYuNnptLTczIDg4LjZsLTMzLjIgMCAxNi42LTQ3LjEgMTYuNiA0Ny4xeiJdCiAgICB9OwogICAgZmFGbHV0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZsdXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTY5NCIsICJNNDI5LjUgMjM2LjNMMjkxLjcgMzc0LjEgNDI5LjUgNTEyIDI3MiA1MTJjLTM2LjEtMzYuMS04Mi4xLTgyLjEtMTM3LjktMTM3LjlsMTM3LjktMTM3LjggMTU3LjUgMHpNMjcyIDBMMTYgMjU2IDk0LjggMzM0LjggNDI5LjUgMCAyNzIgMHoiXQogICAgfTsKICAgIGZhQnVmZmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1ZmZlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODM3IiwgIk00MjguMiAzODAuN0wyMzEuNyA0NzguNWMtMi4zIDEtNC44IDEuNS03LjMgMS41cy01LS41LTcuMy0xLjVMMjAuNSAzODAuN2MtNC0yLTQtNS4zIDAtNy4zTDY3LjYgMzUwYzIuMy0xIDQuOC0xLjUgNy4zLTEuNXM1IC41IDcuMyAxLjVsMTM0LjggNjdjMi4zIDEgNC44IDEuNSA3LjMgMS41czUtLjUgNy4zLTEuNWwxMzQuOC02N2MyLjMtMSA0LjgtMS41IDcuMy0xLjVzNSAuNSA3LjMgMS41bDQ3LjEgMjMuNGM0IDIgNCA1LjIgMCA3LjJ6bTAtMTM2LjVsLTQ3LjEtMjMuNGMtMi4zLTEtNC44LTEuNS03LjMtMS41cy01IC41LTcuMyAxLjVMMjMxLjcgMjg3LjhjLTIuMyAxLTQuOCAxLjUtNy4zIDEuNXMtNS0uNS03LjMtMS41TDgyLjMgMjIwLjdjLTIuMy0xLTQuOC0xLjUtNy4zLTEuNXMtNSAuNS03LjMgMS41TDIwLjUgMjQ0LjFjLTQgMi00IDUuMyAwIDcuM2wxOTYuNSA5Ny44YzIuMyAxIDQuOCAxLjUgNy4zIDEuNXM1LS41IDcuMy0xLjVsMTk2LjUtOTcuOGM0LTIgNC01LjMgMC03LjN6TTIwLjUgMTMwLjRMMjE3IDIyMC43YzQuNyAxLjkgMTAgMS45IDE0LjcgMGwxOTYuNS05MC4zYzQtMS45IDQtNC45IDAtNi43TDIzMS43IDMzLjRjLTQuNy0xLjktMTAtMS45LTE0LjcgMEwyMC41IDEyMy43Yy00IDEuOC00IDQuOSAwIDYuN3oiXQogICAgfTsKICAgIGZhR3JhdGlwYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JhdGlwYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE4NCIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0zNzQuMyAyMzMuN0wyNTcuNyAzOTEuMyAxNDEuMyAyMzMuN2MtOS0xMi4zLTE5LjctNTIgMTQtNzQuMyAyOS0xOC43IDU2LjQtNC4zIDcwLjcgMTIuMyAxNi40IDE4LjUgNDguMSAxNy40IDYzLjcgMCAxNC4zLTE2LjYgNDEuNy0zMSA3MC4zLTEyLjMgMzQgMjIuMyAyMy4zIDYxLjkgMTQuMiA3NC4zeiJdCiAgICB9OwogICAgZmFHb29nbGVQYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDc5IiwgIk0xMDUuNyAyMTVsMCA0MS4yIDU3LjEgMGMtMS4yIDYuNi0zLjYgMTIuOS03LjIgMTguNXMtOC40IDEwLjQtMTMuOSAxNC4xYy05LjUgNi42LTIxLjcgMTAuMy0zNiAxMC4zLTI3LjYgMC01MC45LTE4LjktNTkuMy00NC4yLTQuNC0xMy4zLTQuNC0yNy43IDAtNDEgOC40LTI1LjUgMzEuNy00NC40IDU5LjMtNDQuNCA3LjUtLjEgMTQuOSAxLjIgMjEuOSA0czEzLjMgNi45IDE4LjYgMTIuMUwxNzYuNSAxNTVjLTE5LjEtMTguMS00NC40LTI4LjEtNzAuNy0yNy44LTE5LjcgLjEtMzguOSA1LjctNTUuNiAxNi4xcy0zMC4xIDI1LjMtMzguOCA0M0MzLjkgMjAxLjIgMCAyMTcuNyAwIDIzNC40czMuOSAzMy4yIDExLjMgNDguMWwwIC4yYzguNyAxNy43IDIyLjEgMzIuNSAzOC44IDQzczM1LjkgMTYgNTUuNiAxNmMyOC41IDAgNTIuNS05LjUgNzAtMjUuOSAyMC0xOC42IDMxLjQtNDYuMiAzMS40LTc4LjkgMC03LjMtLjYtMTQuNi0xLjgtMjEuOGwtOTkuNyAwem0zODkuNC00Yy0xMC4xLTkuNC0yMy45LTE0LjEtNDEuNC0xNC4xLTIyLjUgMC0zOS4zIDguMy01MC41IDI0LjlMNDI0LjEgMjM1YzcuNi0xMS4zIDE4LjEtMTcgMzEuMy0xNyA4LjQgMCAxNi41IDMuMiAyMi43IDguOCAzIDIuNiA1LjUgNS45IDcuMSA5LjZzMi41IDcuNiAyLjUgMTEuN2wwIDUuNWMtOS4xLTUuMS0yMC42LTcuOC0zNC42LTcuOC0xNi40IDAtMjkuNiAzLjktMzkuNSAxMS44cy0xNC44IDE4LjMtMTQuOCAzMS42Yy0uMiA1LjkgMSAxMS44IDMuNCAxNy4yczYgMTAuMiAxMC41IDE0LjFjOS4yIDguMyAyMSAxMi41IDM0LjggMTIuNSAxNi4zIDAgMjkuMi03LjMgMzktMjEuOWwxIDAgMCAxNy43IDIyLjYgMCAwLTc4LjdjLjEtMTYuNi00LjktMjkuNy0xNS0zOXptLTE5LjIgODkuM2MtMy41IDMuNS03LjYgNi4zLTEyLjIgOC4ycy05LjUgMi45LTE0LjQgMi45Yy02LjcgLjEtMTMuMS0yLjEtMTguMy02LjItMi40LTEuOC00LjQtNC4yLTUuNy02LjlzLTItNS43LTItOC43YzAtNyAzLjItMTIuOCA5LjUtMTcuNHMxNC41LTcgMjQuMS03YzEzLjItLjIgMjMuNSAyLjggMzAuOCA4LjggMCAxMC4xLTQgMTguOS0xMS43IDI2LjR6bS05My43LTE0MmMtNS4zLTUuMy0xMS42LTkuNS0xOC42LTEyLjNzLTE0LjQtNC4yLTIxLjktNGwtNjIuNyAwIDAgMTg2LjcgMjMuNiAwIDAtNzUuNiAzOSAwYzE2IDAgMjkuNS01LjQgNDAuNS0xNS45IC45LS45IDEuOC0xLjggMi42LTIuNyA5LjYtMTAuNSAxNC44LTI0LjQgMTQuMy0zOC42cy02LjYtMjcuNy0xNi45LTM3LjZsMCAwem0tMTYuNiA2Mi4yYy0zIDMuMi02LjYgNS43LTEwLjYgNy40cy04LjQgMi41LTEyLjcgMi4zbC0zOS42IDAgMC02NS4yIDM5LjYgMGM4LjUgMCAxNi42IDMuMyAyMi42IDkuMiA2LjEgNi4xIDkuNiAxNC4zIDkuOCAyM3MtMy4xIDE3LTkgMjMuM2wwIDB6TTYxNC4zIDIwMWwtMzYuNSA5MS43LS41IDAtMzcuNC05MS43LTI1LjcgMCA1MS44IDExOS42LTI5LjQgNjQuMyAyNC4zIDAgNzktMTgzLjktMjUuNyAweiJdCiAgICB9OwogICAgZmFBcHBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhcHBsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTc5IiwgIk0zMTkuMSAyNjguN2MtLjItMzYuNyAxNi40LTY0LjQgNTAtODQuOC0xOC44LTI2LjktNDcuMi00MS43LTg0LjctNDQuNi0zNS41LTIuOC03NC4zIDIwLjctODguNSAyMC43LTE1IDAtNDkuNC0xOS43LTc2LjQtMTkuNy01NS44IC45LTExNS4xIDQ0LjUtMTE1LjEgMTMzLjIgMCAyNi4yIDQuOCA1My4zIDE0LjQgODEuMiAxMi44IDM2LjcgNTkgMTI2LjcgMTA3LjIgMTI1LjIgMjUuMi0uNiA0My0xNy45IDc1LjgtMTcuOSAzMS44IDAgNDguMyAxNy45IDc2LjQgMTcuOSA0OC42LS43IDkwLjQtODIuNSAxMDIuNi0xMTkuMy02NS4yLTMwLjctNjEuNy05MC02MS43LTkxLjl6TTI2Mi41IDEwNC41YzI3LjMtMzIuNCAyNC44LTYxLjkgMjQtNzIuNS0yNC4xIDEuNC01MiAxNi40LTY3LjkgMzQuOS0xNy41IDE5LjgtMjcuOCA0NC4zLTI1LjYgNzEuOSAyNi4xIDIgNDkuOS0xMS40IDY5LjUtMzQuM3oiXQogICAgfTsKICAgIGZhVHVtYmxyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInR1bWJsciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMTczIiwgIk0zMDkuOSA0ODAuM2MtMTMuNiAxNC41LTUwIDMxLjctOTcuNCAzMS43LTEyMC44IDAtMTQ3LTg4LjgtMTQ3LTE0MC42bDAtMTQ0LTQ3LjUgMGMtNS41IDAtMTAtNC41LTEwLTEwbDAtNjhjMC03LjIgNC41LTEzLjYgMTEuMy0xNiA2Mi0yMS44IDgxLjUtNzYgODQuMy0xMTcuMSAuOC0xMSA2LjUtMTYuMyAxNi4xLTE2LjNsNzAuOSAwYzUuNSAwIDEwIDQuNSAxMCAxMGwwIDExNS4yIDgzIDBjNS41IDAgMTAgNC40IDEwIDkuOWwwIDgxLjdjMCA1LjUtNC41IDEwLTEwIDEwbC04My40IDAgMCAxMzMuMmMwIDM0LjIgMjMuNyA1My42IDY4IDM1LjggNC44LTEuOSA5LTMuMiAxMi43LTIuMiAzLjUgLjkgNS44IDMuNCA3LjQgNy45bDIyIDY0LjNjMS44IDUgMy4zIDEwLjYtLjQgMTQuNXoiXQogICAgfTsKICAgIGZhUGhvZW5peFNxdWFkcm9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBob2VuaXgtc3F1YWRyb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjUxMSIsICJNOTYgNjMuNGM0Ni41LTM2LjEgMTA1LjYtNTYuMSAxNjQuNS01NC42IDI5LjYtLjQgNTkuMSA1LjQgODYuOSAxNS4zLTI0LjEtNC42LTQ5LTYuMy03My40LTIuNS00Mi45IDUuMy04MyAyNy4yLTExMS44IDU5LjIgNS43LTEgMTAuOC0zLjcgMTYtNS45IDE4LjEtNy45IDM3LjUtMTMuMyA1Ny4yLTE0LjggMTkuNy0yLjEgMzkuNi0uNCA1OS4zIDEuOS0xNC40IDIuOC0yOS4xIDQuNi00MyA5LjYtMzQuNCAxMS4xLTY1LjMgMzMuMi04Ni4zIDYyLjYtMTMuOCAxOS43LTIzLjYgNDIuOS0yNC43IDY3LjEtLjQgMTYuNSA1LjIgMzQuOCAxOS44IDQ0IDExLjIgNi44IDI0LjYgOS4yIDM3LjUgNi43IDE1LjQtMi41IDMwLjEtOC42IDQzLjYtMTYuMyAxMS41LTYuOCAyMi43LTE0LjYgMzItMjQuMyAzLjgtMy4yIDIuNS04LjQgMi42LTEyLjgtMi4xLS4zLTQuNC0xLjEtNi4zIC4zLTExLjQgNi4zLTIzLjQgMTEuNC0zNS44IDE1LjQtMjAgNi4yLTQyLjIgOC41LTYyLjEgLjggMTIuOCAxLjcgMjYuMSAuMyAzNy43LTUuNCAyMC4yLTkuNyAzNi44LTI1LjIgNTQuNC0zOC44IDI3LjctMjEuMyA1Ny41LTM5LjkgODguOS01NS4zIDI1LjctMTIgNTIuOS0yMi44IDgxLjYtMjQuMS0xNS42IDEzLjctMzIuMSAyNi41LTQ2LjggNDEuNC0xNC41IDE0LTI3LjUgMjkuNS00MC4xIDQ1LjItMy41IDQuNi05IDYuOS0xMy42IDEwLjItMjIuNCAxNS00MC4zIDM1LjgtNTEuOSA2MC4xLTkuMyAxOS43LTE0LjUgNDEuOS0xMS44IDYzLjYgMS45IDEzLjcgOC43IDI3LjYgMjAuOSAzNC45IDEyLjkgOCAyOSA4LjEgNDMuNSA1LjEgMzIuOC03LjQgNjEuNC0yOC45IDgxLTU1LjggMjAuNC0yNy41IDMwLjUtNjIuMiAyOS4yLTk2LjMtLjUtNy41LTEuNi0xNS0xLjctMjIuNSA4IDE5LjUgMTQuOCAzOS43IDE2LjYgNjAuOCAyIDE0LjMgLjcgMjguOC0xLjYgNDIuOS0xLjkgMTEtNS43IDIxLjUtNy44IDMyLjQgMjAuNC0yMi45IDM0LTUwLjkgMzkuMy04MS4xIDUuNi0zNS41IC43LTcxLjktMTQuMi0xMDQuNiAyMC44IDMyIDMyLjMgNjkuNiAzNS43IDEwNy41IC41IDEyLjcgLjUgMjUuNSAwIDM4LjItMi44IDM0LjMtMTIuOSA2Ny42LTI5LjYgOTcuOC0yNi4xIDQ3LjMtNjggODUuNi0xMTcuMiAxMDgtNzguMyAzNi4yLTE3NC43IDMxLjMtMjQ4LTE0LjctMzktMjMuOC03MC42LTU4LTkxLjQtOTguNy0xNC43LTI4LjktMjMuMy02MC41LTI1LjQtOTIuOWwwLTMxLjNDMy45IDE3MiA0MC45IDEwNS44IDk2IDYzLjR6bTIyMiA4MC4zYzUuNS0uOSAxMC44LTIuNCAxNi00LjUgNS0xLjggOS4yLTUuOSAxMC4zLTExLjItOSA1LTE4IDkuOS0yNi4zIDE1Ljd6Il0KICAgIH07CiAgICBmYUNlbnRlcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2VudGVyY29kZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzgwIiwgIk0yMDEuOCAyNTQuOGE2NC4xIDY0LjEgMCAxIDEgMTI3LjQgMTMuOCA2NC4xIDY0LjEgMCAxIDEgLTEyNy40LTEzLjh6bTQxLjYgMjQ4LjlDOTYuNyA0OTYtOC4yIDM2NS41IDEwLjEgMjI0LjMgMjEuMyAxMzcuNyA3NS45IDY3LjQgMTQ5LjIgMzIuMyAzMTAuMi00NC44IDQ5OC45IDY5LjcgNTAzLjkgMjQ4LjkgNTA4IDM5NS45IDM4NS41IDUxMS4xIDI0My40IDUwMy43em0xNzkuOS0xODBjMjcuOS0xMTgtMTYwLjUtMjA1LjktMjM3LjItMjM0LjItNTcuNSA1Ni4zLTY5LjEgMTg4LjYtMzMuOCAzNDQuNCA2OC44IDE1LjggMTY5LjEtMjYuNCAyNzEtMTEwLjJ6Il0KICAgIH07CiAgICBmYURlYmlhbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZWJpYW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYwYiIsICJNMzgwLjQgMjQ1LjZjMy03LjYgNS41LTE0IDUuMi0yNC40bC00LjMgOWM0LjQtMTMuMiA0LTI3LjEgMy42LTQwLjQtLjItNi0uMy0xMS44IDAtMTcuNGwtMS44LS41Yy0xLjUtNDUuMi00MC42LTkzLjEtNzUuMy0xMDkuNC0zMC0xMy44LTc2LjEtMTYuMi05Ny4zLTUuOCAxLjMtMS4xIDQuMi0yIDYuOC0yLjdsLjMtLjFjMy4zLTEgNi0xLjcgNC0yLjktMTkuMiAxLjktMjQuOSA1LjUtMzEuMSA5LjRsLS4xIDBjLTQuNiAyLjktOS41IDYtMjAuMyA4LjctMy41IDMuNCAxLjcgMiA1LjggLjlzNy4yLTEuOS0uMSAyLjRjLTMuNSAxLTYuNiAxLjMtOS42IDEuNmwtLjEgMGMtOC4zIC44LTE1LjggMS42LTMwLjcgMTcgLjggMS4zIDMuNC0uMiA1LjMtMS4zbC4xLS4xYzIuMy0xLjQgMy40LTItMS43IDQuNC0xOS4xLTIuNC02MC4zIDQzLjctNjkuMSA1OWw0LjYgLjhjLTMuMiA4LTYuOCAxNC44LTEwIDIwLjgtNC4zIDguMS03LjkgMTQuOS04LjcgMjEuMy0uMyA1LjEtMSAxMS0xLjcgMTcuMy0uMSAxLS4yIDItLjMgM2wtLjEgLjZjLTMgMjcuMy02LjcgNjAuOCAzLjkgNzNsLTEuMyAxM2MuNiAxLjIgMS4xIDIuMyAxLjYgMy41IC4yIC40IC40IC44IC41IDEuMSAxIDIuMSAyIDQuMiAzLjMgNi4ybC0zIC4yYzcgMjIuMSAxMC44IDIyLjUgMTUuMSAyMi45IDQuNCAuNCA5LjMgLjkgMTguNyAyNC4yLTIuNy0uOS01LjUtMS45LTkuNC03LjItLjUgNC4xIDUuOCAxNi4zIDEzLjEgMjUuOGwtMy4xIDMuNmMyLjEgMy43IDQuOCA2LjIgNy42IDguOCAxIC45IDIuMSAxLjkgMy4xIDIuOS0xMS45LTYuNSAzLjIgMTMuNyAxMS45IDI1LjIgLjggMS4xIDEuNSAyIDIuMiAyLjkgMS40IDEuOSAyLjUgMy40IDIuOSA0LjFsMi40LTQuMmMtLjMgNi4xIDQuMyAxMy45IDEzLjEgMjQuN2w3LjMtLjNjMyA2IDE0IDE2LjcgMjAuNyAxNy4ybC00LjQgNS44YzguMSAyLjYgMTAuMyA0LjMgMTIuNyA2LjIgMi42IDIuMSA1LjQgNC4zIDE2LjEgOC4xbC00LjItNy40YzMuNSAzIDYuMiA1LjkgOC44IDguN2wuMSAuMWM1LjIgNS42IDkuOSAxMC42IDE5LjcgMTUuMyAxMC43IDMuNyAxNi42IDQuNyAyMi43IDUuOCAuMyAwIC42IC4xIC45IC4xIDUuNCAuOCAxMS4yIDEuOCAyMC44IDQuNS0xLjEtLjEtMi4yLS4xLTMuMy0uMS0yLjMtLjEtNC43LS4xLTctLjEtMTQuNC0uMi0yOS4yLS40LTQyLjctNS4yLTk2LjYtMjUuNy0xODQuOS0xMzktMTc4LjQtMjU1LjYtLjYtOS45LS4zLTIwLjkgMC0zMC43IC40LTEzLjUgLjctMjQuOC0xLjYtMjguM2wxLTMuMWM1LjMtMTcuNCAxMS43LTM4LjIgMjMuOC02Mi44bC0uMS0uMiAwLS4xYy40IC40IDMuNCAzLjQgOC44LTUuOCAuOC0xLjggMS42LTMuNyAyLjQtNS42IC41LTEuMSAuOS0yLjIgMS40LTMuMiAyLjUtNi4xIDUuMS0xMi4zIDguNC0xNy45bDIuNi0uNmMxLjctMTAuMSAxNy0yMy44IDI5LjgtMzUuMmwxLjEtMWM1LjctNS4xIDEwLjctOS43IDEzLjYtMTMuMWwuNyA0LjRjMTctMTUuOSA0NC42LTI3LjUgNjUuNi0zNi40bC41LS4yYzQuOC0yIDkuMy0zLjkgMTMuMy01LjctMy40IDMuOCAyLjIgMi43IDEwIDEgNC44LTEgMTAuNC0yLjEgMTUuMy0yLjRsLTMuOSAyLjFjLTIuNyAxLjQtNS40IDIuOC04IDQuNiA4LjEtMiAxMS43LTEuNCAxNS43LS44bC4zIDBjMy41IC42IDcuMyAxLjIgMTQuNiAuMi01LjYgLjgtMTIuMyAzLTExLjIgMy44IDcuOSAuOSAxMi44LS4xIDE3LjItMWwuMiAwYzUuNS0xLjEgMTAuMy0yIDE5LjMgLjlsLTEtNC44YzcuMyAyLjYgMTIuNyA0LjMgMTcuNSA1LjhsLjUgLjFjMTAgMyAxNy42IDUuMyAzNC4yIDE0LjEgMy4yIC4yIDUuMy0uNSA3LjQtMS4ybC4xIDBjMy42LTEuMSA3LTIuMSAxNS4yIDEuMiAuMyAuNSAuNSAxIC43IDEuNCAuMSAuMiAuMiAuNSAuMyAuN2wwIC4xYzEgMi42IDEuOCA0LjYgMTQuNiAxMi4xIDEuNy0uNy0yLjctNC43LTYuNC04LjJsLS4xLS4xYy0uMi0uMS0uMy0uMy0uNS0uNCAzMi4yIDE3LjMgNjcuMyA1NC4xIDc4IDkzLjUtNi0xMS4xLTUuMi01LjUtNC4zIC41IC42IDQgMS4yIDguMS0uMiA3LjUgNC41IDEyLjEgOC4xIDI0LjUgMTAuNCAzNy40bC0uOC0yLjktLjEtLjNjLTMuMy0xMS45LTkuNi0zNC4zLTE5LjktNDkuMy0uNCA0LjMtMi44IDMuOS01LjIgMy41bC0uMSAwYy0zLjMtLjYtNi4yLTEuMS0xLjkgMTIuNiAyLjYgMy44IDMuMSAyLjQgMy41IDEuMSAuNS0xLjUgLjktMi43IDQuNyA1LjIgLjEgNC4xIDEgOC4yIDIuMSAxMi43bC4xIC42Yy4xIC4zIC4xIC41IC4yIC44bC4xIC42Yy42IDIuNiAxLjMgNS40IDEuOCA4LjQtMS4xLS4yLTIuMy0yLjItMy40LTQuMi0xLjQtMi40LTIuOC00LjctMy43LTMuMiAyLjQgMTEuNSA2LjUgMTcuNCA4IDE4LjMtLjMgLjYtLjYgLjctMS4xIC43LS44IDAtMS44IC4xLTEuOSA1LjMgLjcgMTMuNyAzLjMgMTIuNSA1LjMgMTEuNiAuNi0uMyAxLjItLjYgMS43LS40LS42IDIuNS0xLjYgNS4xLTIuNyA3LjktMi44IDcuMS02IDE1LjQtMy40IDI2LjEtLjgtMy0yLTYtMy4xLTguOWwtLjEtLjRjLS4yLS41LS40LTEtLjYtMS41LS4zLS44LS42LTEuNi0uOS0yLjMtLjYgNC40LS4zIDcuNy0uMSAxMC42bDAgLjdjLjQgNS4zIC43IDEwLTMgMTkuOSA0LjMtMTQuMiAzLjgtMjYuOS0uMi0yMC44IDEgMTAuOS0zLjcgMjAuNC04IDI4LjlsLS4xIC4yYy0zLjYgNy4xLTYuOCAxMy41LTUuOSAxOS4zbC01LjItNy4xYy03LjUgMTAuOS03IDEzLjMtNi41IDE1LjVsMCAuMWMuNSAxLjkgMSAzLjgtMy40IDEwLjggMS43LTIuOSAxLjMtMy42IDEtNC4yLS40LS44LS43LTEuNSAxLjctNS4xLTEuNiAuMS01LjUgMy45LTEwLjEgOC41LTMuOSAzLjktOC41IDguNC0xMi44IDExLjgtMzcuNSAzMC4xLTgyLjMgMzQtMTI1LjYgMTcuOCAuMi0xLS4yLTIuMS0zLjEtNC4xLTM2LjgtMjguMi01OC41LTUyLjEtNTAuOS0xMDcuNSAyLjEtMS42IDMuNi01LjggNS4zLTEwLjhsLjItLjQgLjEtLjMgMC0uMWMyLjktOC40IDYuNS0xOC44IDE0LjMtMjMuOCA3LjgtMTcuMyAzMS4zLTMzLjMgNTYuNC0zMy43IDI1LjYtMS40IDQ3LjIgMTMuNyA1OC4xIDI3LjktMTkuOC0xOC40LTUyLjEtMjQtNzkuNy0xMC40LTI4LjIgMTIuNy00NSA0My44LTQyLjUgNzQuNyAuMy0uNCAuNi0uNiAuOS0uOGwuMi0uMmMuNi0uNSAxLjEtLjkgMS40LTMuMy0uOSA2MC4yIDY0LjggMTA0LjMgMTEyLjEgODJsLjYgMS4zYzEyLjctMy41IDE1LjktNi41IDIwLjMtMTAuN2wuMS0uMWMyLjItMi4xIDQuNy00LjUgOC45LTcuMy0uMyAuNy0xLjMgMS43LTIuNCAyLjctMi4yIDIuMS00LjYgNC41LTEuNiA0LjYgNS0xLjMgMTguNS0xMy40IDI4LjUtMjIuMyAuNi0uNSAxLjItMSAxLjctMS41IDEuNS0xLjMgMi44LTIuNSA0LTMuNmwuMy0uM2MxLjktNC4yIDEuNi01LjYgMS4zLTdsMC0uMWMtLjQtMS42LS44LTMuMyAyLjQtOS42bDcuMy0zLjdjLjgtMi4xIDEuNS00LjEgMi4yLTYgLjItLjYgLjUtMS4yIC43LTEuOGwtLjQtLjItLjEtLjF6TTI0OCAzMzQuMWMtNi0zLTEzLjctOC45LTE0LjgtMTEuNGwtLjQgLjNjLS4zIC42LS41IDEuMy0uMiAyLjItMTIuMi01LjctMjMuNC0xNC4zLTMyLjYtMjQuOSA0LjkgNy4xIDEwLjEgMTQuMSAxNyAxOS41LTYuOS0yLjMtMTUuMS0xMS44LTIxLjYtMTkuM2wtLjEtLjFjLTQuMy01LTcuOS05LjEtOS43LTkuNSAxOS44IDM1LjUgODAuNSA2Mi4zIDExMi4zIDQ5LTE0LjcgLjUtMzMuNCAuMy00OS45LTUuOHptNzkuMy0xMTkuN2wtLjEtLjJjLS41LTEuNS0xLjEtMy4xLTEuNy0zLjQgMS40LTUuOCA1LjQtMTAuNyA0LjQgNC42LTEgMy44LTEuOCAxLjUtMi42LTF6bS00LjIgMjIuMmMtMS4zIDcuOS01IDE1LjUtMTAuMSAyMi41IC4yLTItMS4yLTIuNC0yLjYtMi44LTIuOS0uOC01LjktMS42IDUuNi0xNi4xLS41IDEuOS0yLjEgNC42LTMuNyA3LjNsLS4zIC40Yy0zLjYgNS45LTYuNyAxMSA0IDQuM2wxLTEuOGMyLjYtNC41IDUtOC44IDYtMTMuOGwuMSAwem0tNTUuNiAzMy45YzcuMSAuNiAxNC4xIC42IDIxLTEuMS0yLjUgMi40LTUuMiA0LjgtOC4zIDcuMi0xMS4xLTEuNy0yMS4yLTYtMTIuNy02LjF6bS05Mi42IDExLjZjMy42IDcuMSA2LjQgMTEuNSA5IDE1LjdsLjEgLjJjMi4zIDMuNyA0LjQgNy4xIDYuOCAxMS43LTUuMS00LjItOC43LTkuNS0xMi41LTE1bC0uMy0uNWMtMS40LTIuMS0yLjgtNC4yLTQuNC02LjJsMS4yLTUuOSAuMSAwem03LjUtOS42YzEuNiAzLjMgMy4yIDYuNCA1LjcgOS4xbDIuNiA3LjctMS4zLTIuMWMtMy4yLTUuMy02LjMtMTAuNi04LTE2LjdsMSAyem0yMzguOS00MS42Yy0yLjMgMTcuNC03LjcgMzQuNi0xNiA1MC4zIDcuNi0xNC45IDEyLjUtMzAuOSAxNC44LTQ3LjJsMS4yLTMuMXpNMzUuOCAxMTAuNmMuNCAuOCAxLjQgLjUgMi4zIC4zIDEuOS0uNSAzLjYtLjktLjEgNy42LS41IC4zLTEgLjctMS41IDEtMS40IC45LTIuOCAxLjktMy45IDMgMS45LTMuOCAzLjUtNy40IDMuMi0xMS45ek0yNS41IDE1Mi4zYy0uNyAzLjctMS41IDcuOS0zLjQgMTMuOSAuMi0xLjkgMC0zLjUtLjItNC45bDAtLjFjLS40LTMuNC0uNy02LjMgNC4zLTEyLjgtLjMgMS4yLS41IDIuNS0uNyAzLjhsMCAuMXoiXQogICAgfTsKICAgIGZhTWFzdG9kb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFzdG9kb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjRmNiIsICJNNDMzIDE3OS4xYzAtOTcuMi02My43LTEyNS43LTYzLjctMTI1LjctNjIuNS0yOC43LTIyOC42LTI4LjQtMjkwLjUgMCAwIDAtNjMuNyAyOC41LTYzLjcgMTI1LjcgMCAxMTUuNy02LjYgMjU5LjQgMTA1LjYgMjg5LjEgNDAuNSAxMC43IDc1LjMgMTMgMTAzLjMgMTEuNCA1MC44LTIuOCA3OS4zLTE4LjEgNzkuMy0xOC4xbC0xLjctMzYuOXMtMzYuMyAxMS40LTc3LjEgMTAuMWMtNDAuNC0xLjQtODMtNC40LTg5LjYtNTQtLjYtNC42LS45LTkuMy0uOS0xMy45IDg1LjYgMjAuOSAxNTguNyA5LjEgMTc4LjcgNi43IDU2LjEtNi43IDEwNS00MS4zIDExMS4yLTcyLjkgOS44LTQ5LjggOS0xMjEuNSA5LTEyMS41ek0zNTcuOSAzMDQuM2wtNDYuNiAwIDAtMTE0LjJjMC00OS43LTY0LTUxLjYtNjQgNi45bDAgNjIuNS00Ni4zIDAgMC02Mi41YzAtNTguNS02NC01Ni42LTY0LTYuOWwwIDExNC4yLTQ2LjcgMGMwLTEyMi4xLTUuMi0xNDcuOSAxOC40LTE3NSAyNS45LTI4LjkgNzkuOC0zMC44IDEwMy44IDYuMWwxMS42IDE5LjUgMTEuNi0xOS41YzI0LjEtMzcuMSA3OC4xLTM0LjggMTAzLjgtNi4xIDIzLjcgMjcuMyAxOC40IDUzIDE4LjQgMTc1bDAgMHoiXQogICAgfTsKICAgIGZhU2tldGNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNrZXRjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2M2IiwgIk0yNy44IDE2Mi4ybC0xOC41IDI0LjkgOTAuNSAwIDYuOS0xMzAuNy03OC45IDEwNS44ek0zOTYuNiA0NS43TDI2OCAzMiA0MDMuNyAxNzkuMiAzOTYuNiA0NS43ek0xMTIuNSAyMTguM2wtMTEuMi0yMi05MS4xIDAgMjI0LjkgMjYxLjctMTIyLjYtMjM5Ljd6bTItMzEuMmwyODQgMEMzNDAuNiAxMjQuMyAyOTMuMyA3Mi45IDI1Ni42IDMzTDExNC41IDE4Ny4xem0yOTcuMyA5LjFsLTEzMy45IDI2MS44IDIyNC44LTI2MS43LTkwLjkgMCAwLS4xek00MTUuNyA2OWwtOS40LTEyLjYgLjkgMTcuMyA2LjEgMTEzLjQgOTAuMyAwLTg3LjktMTE4LjF6TTExMy44IDkzLjVMMTA5LjIgMTc5LjEgMjQ1IDMyIDExNi40IDQ1LjcgMTEzLjggOTMuNXpNNDAxLjUgMTk2LjJsLTI5MCAwYzE4LjIgMzUuNiA2Ni42IDEzMC4yIDE0NS4xIDI4My44TDQwMS41IDE5Ni4yeiJdCiAgICB9OwogICAgZmFXZWJBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2ODIiLCAiTTM3Mi4yIDUyYzAgMjAuOS0xMi40IDM5LTMwLjIgNDcuMkw0NDggMTkyIDU1Mi40IDE3MS4xYy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDQgMCAxMTcuNSAyMS41IDk2IDQ4IDk2czQ4IDIxLjUgNDggNDhjMCAxMC4xLTMuMSAxOS40LTguNCAyNy4xTDE5MiAxOTIgMjk4LjEgOTkuMWMtMTcuNy04LjMtMzAtMjYuMy0zMC00Ny4xIDAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsLjEgMHoiXQogICAgfTsKICAgIGZhU2FzcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzYXNzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MWUiLCAiTTMwMS44IDM3OC45bDAgMHptMjQ5LjEtODdjLTIwLjEgMC00MCA0LjYtNTggMTMuNS01LjktMTEuOS0xMi0yMi4zLTEzLTMwLjEtMS4yLTkuMS0yLjUtMTQuNS0xLjEtMjUuM3M3LjctMjYuMSA3LjYtMjcuMi0xLjQtNi42LTE0LjMtNi43LTI0IDIuNS0yNS4zIDUuOWMtMi4zIDYuMi00LjEgMTIuNi01LjMgMTkuMS0yLjMgMTEuNy0yNS44IDUzLjUtMzkuMSA3NS4zLTQuNC04LjUtOC4xLTE2LTguOS0yMi0xLjItOS4xLTIuNS0xNC41LTEuMS0yNS4zczcuNy0yNi4xIDcuNi0yNy4yLTEuNC02LjYtMTQuMy02LjctMjQgMi41LTI1LjMgNS45LTIuNyAxMS40LTUuMyAxOS4xLTMzLjkgNzcuMy00Mi4xIDk1LjRjLTQuMiA5LjItNy44IDE2LjYtMTAuNCAyMS42LS40IC44LS43IDEuMy0uOSAxLjcgLjMtLjUgLjUtMSAuNS0uOC0yLjIgNC4zLTMuNSA2LjctMy41IDYuN2wwIC4xYy0xLjcgMy4yLTMuNiA2LjEtNC41IDYuMS0uNiAwLTEuOS04LjQgLjMtMTkuOSA0LjctMjQuMiAxNS44LTYxLjggMTUuNy02My4xLS4xLS43IDIuMS03LjItNy4zLTEwLjctOS4xLTMuMy0xMi40IDIuMi0xMy4yIDIuMnMtMS40IDItMS40IDIgMTAuMS00Mi40LTE5LjQtNDIuNGMtMTguNCAwLTQ0IDIwLjItNTYuNiAzOC41LTcuOSA0LjMtMjUgMTMuNi00MyAyMy41LTYuOSAzLjgtMTQgNy43LTIwLjcgMTEuNC0uNS0uNS0uOS0xLTEuNC0xLjUtMzUuOC0zOC4yLTEwMS45LTY1LjItOTkuMS0xMTYuNSAxLTE4LjcgNy41LTY3LjggMTI3LjEtMTI3LjQgOTgtNDguOCAxNzYuMy0zNS40IDE4OS44LTUuNiAxOS40IDQyLjUtNDEuOSAxMjEuNi0xNDMuNyAxMzMtMzguOCA0LjMtNTkuMi0xMC43LTY0LjMtMTYuMy01LjMtNS45LTYuMS02LjItOC4xLTUuMS0zLjMgMS44LTEuMiA3IDAgMTAuMSAzIDcuOSAxNS41IDIxLjkgMzYuOCAyOC45IDE4LjcgNi4xIDY0LjIgOS41IDExOS4yLTExLjggNjEuOC0yMy44IDEwOS45LTkwLjEgOTUuOC0xNDUuNi0xNC40LTU2LjQtMTA3LjktNzQuOS0xOTYuMy00My41LTUyLjcgMTguNy0xMDkuNyA0OC4xLTE1MC43IDg2LjQtNDguNyA0NS42LTU2LjUgODUuMy01My4zIDEwMS45IDExLjQgNTguOSA5Mi42IDk3LjMgMTI1LjEgMTI1LjctMS42IC45LTMuMSAxLjctNC41IDIuNS0xNi4zIDguMS03OC4yIDQwLjUtOTMuNyA3NC43LTE3LjUgMzguOCAyLjkgNjYuNiAxNi4zIDcwLjQgNDEuOCAxMS42IDg0LjYtOS4zIDEwNy42LTQzLjZzMjAuMi03OS4xIDkuNi05OS41Yy0uMS0uMy0uMy0uNS0uNC0uOCA0LjItMi41IDguNS01IDEyLjgtNy41IDguMy00LjkgMTYuNC05LjQgMjMuNS0xMy4zLTQgMTAuOC02LjkgMjMuOC04LjQgNDIuNi0xLjggMjIgNy4zIDUwLjUgMTkuMSA2MS43IDUuMiA0LjkgMTEuNSA1IDE1LjQgNSAxMy44IDAgMjAtMTEuNCAyNi45LTI1IDguNS0xNi42IDE2LTM1LjkgMTYtMzUuOXMtOS40IDUyLjIgMTYuMyA1Mi4yYzkuNCAwIDE4LjgtMTIuMSAyMy0xOC4zbDAgLjFzLjItLjQgLjctMS4yYzEtMS41IDEuNS0yLjQgMS41LTIuNGwwLS4zYzMuOC02LjUgMTIuMS0yMS40IDI0LjYtNDYgMTYuMi0zMS44IDMxLjctNzEuNSAzMS43LTcxLjUgMS41IDguNyAzLjYgMTcuMyA2LjIgMjUuOCAyLjggOS41IDguNyAxOS45IDEzLjQgMzAtMy44IDUuMi02LjEgOC4yLTYuMSA4LjIgMCAuMSAwIC4xIC4xIC4yLTMgNC02LjQgOC4zLTkuOSAxMi41LTEyLjggMTUuMi0yOCAzMi42LTMwIDM3LjYtMi40IDUuOS0xLjggMTAuMyAyLjggMTMuNyAzLjQgMi42IDkuNCAzIDE1LjcgMi41IDExLjUtLjggMTkuNi0zLjYgMjMuNS01LjQgNy4yLTIuNiAxNC02LjEgMjAuMi0xMC42IDEyLjUtOS4yIDIwLjEtMjIuNCAxOS40LTM5LjgtLjQtOS42LTMuNS0xOS4yLTcuMy0yOC4yIDEuMS0xLjYgMi4zLTMuMyAzLjQtNSAxOS44LTI4LjkgMzUuMS02MC42IDM1LjEtNjAuNiAxLjUgOC43IDMuNiAxNy4zIDYuMiAyNS44IDIuNCA4LjEgNy4xIDE3IDExLjQgMjUuNy0xOC42IDE1LjEtMzAuMSAzMi42LTM0LjEgNDQuMS03LjQgMjEuMy0xLjYgMzAuOSA5LjMgMzMuMSA0LjkgMSAxMS45LTEuMyAxNy4xLTMuNSA3LjctMi42IDE1LTYuMyAyMS42LTExLjEgMTIuNS05LjIgMjQuNi0yMi4xIDIzLjgtMzkuNi0uMy03LjktMi41LTE1LjgtNS40LTIzLjQgMTUuNy02LjYgMzYuMS0xMC4yIDYyLjEtNy4yIDU1LjcgNi41IDY2LjYgNDEuMyA2NC41IDU1LjhzLTEzLjggMjIuNi0xNy43IDI1LTUuMSAzLjMtNC44IDUuMWMuNSAyLjYgMi4zIDIuNSA1LjYgMS45IDQuNi0uOCAyOS4yLTExLjggMzAuMy0zOC43IDEuNi0zNC0zMS4xLTcxLjQtODktNzEuMWwwIDB6TTEyMS44IDQzNi42Yy0xOC40IDIwLjEtNDQuMiAyNy43LTU1LjMgMjEuMy0xMS45LTYuOS03LjItMzYuNSAxNS41LTU3LjkgMTMuOC0xMyAzMS42LTI1IDQzLjQtMzIuNCAyLjctMS42IDYuNi00IDExLjQtNi45IC44LS41IDEuMi0uNyAxLjItLjcgLjktLjYgMS45LTEuMSAyLjktMS43IDguMyAzMC40IC4zIDU3LjItMTkuMSA3OC4zbDAgMHptMTM0LjQtOTEuNGMtNi40IDE1LjctMTkuOSA1NS43LTI4LjEgNTMuNi03LTEuOC0xMS4zLTMyLjMtMS40LTYyLjMgNS0xNS4xIDE1LjYtMzMuMSAyMS45LTQwLjEgMTAuMS0xMS4zIDIxLjItMTQuOSAyMy44LTEwLjQgMy41IDUuOS0xMi4yIDQ5LjQtMTYuMiA1OS4yem0xMTEgNTNjLTIuNyAxLjQtNS4yIDIuMy02LjQgMS42LS45LS41IDEuMS0yLjQgMS4xLTIuNHMxMy45LTE0LjkgMTkuNC0yMS43YzMuMi00IDYuOS04LjcgMTAuOS0xMy45IDAgLjUgLjEgMSAuMSAxLjYtLjEgMTcuOS0xNy4zIDMwLTI1LjEgMzQuOGwwIDB6bTg1LjYtMTkuNWMtMi0xLjQtMS43LTYuMSA1LTIwLjcgMi42LTUuNyA4LjYtMTUuMyAxOS0yNC41IDEuMiAzLjUgMS44IDcuMSAxLjkgMTAuOC0uMSAyMi41LTE2LjIgMzAuOS0yNS45IDM0LjRsMCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVXaGF0c2FwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtd2hhdHNhcHAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2hhdHNhcHAtc3F1YXJlIl0sICJmNDBjIiwgIk05Mi4xIDI1NC42YzAgMjQuOSA3IDQ5LjIgMjAuMiA3MC4xbDMuMSA1LTEzLjMgNDguNiA0OS45LTEzLjEgNC44IDIuOWMyMC4yIDEyIDQzLjQgMTguNCA2Ny4xIDE4LjRsLjEgMGM3Mi42IDAgMTMzLjMtNTkuMSAxMzMuMy0xMzEuOCAwLTM1LjItMTUuMi02OC4zLTQwLjEtOTMuMi0yNS0yNS01OC0zOC43LTkzLjItMzguNy03Mi43IDAtMTMxLjggNTkuMS0xMzEuOSAxMzEuOHpNMjc0LjggMzMwYy0xMi42IDEuOS0yMi40IC45LTQ3LjUtOS45LTM2LjgtMTUuOS02MS44LTUxLjUtNjYuOS01OC43LS40LS42LS43LS45LS44LTEuMS0yLTIuNi0xNi4yLTIxLjUtMTYuMi00MSAwLTE4LjQgOS0yNy45IDEzLjItMzIuMyAuMy0uMyAuNS0uNSAuNy0uOCAzLjYtNCA3LjktNSAxMC42LTUgMi42IDAgNS4zIDAgNy42IC4xbC44IDBjMi4zIDAgNS4yIDAgOC4xIDYuOCAxLjIgMi45IDMgNy4zIDQuOSAxMS44IDMuMyA4IDYuNyAxNi4zIDcuMyAxNy42IDEgMiAxLjcgNC4zIC4zIDYuOS0zLjQgNi44LTYuOSAxMC40LTkuMyAxMy0zLjEgMy4yLTQuNSA0LjctMi4zIDguNiAxNS4zIDI2LjMgMzAuNiAzNS40IDUzLjkgNDcuMSA0IDIgNi4zIDEuNyA4LjYtMSAyLjMtMi42IDkuOS0xMS42IDEyLjUtMTUuNSAyLjYtNCA1LjMtMy4zIDguOS0yczIzLjEgMTAuOSAyNy4xIDEyLjljLjggLjQgMS41IC43IDIuMSAxIDIuOCAxLjQgNC43IDIuMyA1LjUgMy42IC45IDEuOSAuOSA5LjktMi40IDE5LjEtMy4zIDkuMy0xOS4xIDE3LjctMjYuNyAxOC44ek00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMTQ4LjEgMzkzLjlMNjQgNDE2IDg2LjUgMzMzLjhjLTEzLjktMjQtMjEuMi01MS4zLTIxLjItNzkuMyAuMS04Ny40IDcxLjItMTU4LjUgMTU4LjYtMTU4LjUgNDIuNCAwIDgyLjIgMTYuNSAxMTIuMiA0Ni41IDI5LjkgMzAgNDcuOSA2OS44IDQ3LjkgMTEyLjIgMCA4Ny40LTcyLjcgMTU4LjUtMTYwLjEgMTU4LjUtMjYuNiAwLTUyLjctNi43LTc1LjgtMTkuM3oiXQogICAgfTsKICAgIGZhV2hhdHNhcHBTcXVhcmUgPSBmYVNxdWFyZVdoYXRzYXBwOwogICAgZmFTa3lwZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJza3lwZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTdlIiwgIk00MjQuNyAyOTkuOGMyLjktMTQgNC43LTI4LjkgNC43LTQzLjggMC0xMTMuNS05MS45LTIwNS4zLTIwNS4zLTIwNS4zLTE0LjkgMC0yOS43IDEuNy00My44IDQuNy0xOS0xNC43LTQyLjYtMjMuNC02OC4zLTIzLjQtNjEuOCAwLTExMiA1MC4yLTExMiAxMTIgMCAyNS43IDguNyA0OS4zIDIzLjMgNjguMi0yLjkgMTQtNC43IDI4LjktNC43IDQzLjggMCAxMTMuNSA5MS45IDIwNS4zIDIwNS4zIDIwNS4zIDE0LjkgMCAyOS43LTEuNyA0My44LTQuNyAxOSAxNC42IDQyLjYgMjMuMyA2OC4yIDIzLjMgNjEuOCAwIDExMi01MC4yIDExMi0xMTIgLjEtMjUuNi04LjYtNDkuMi0yMy4yLTY4LjF6TTIzMC4xIDM5MS4zYy02NS42IDAtMTIwLjUtMjkuMi0xMjAuNS02NSAwLTE2IDktMzAuNiAyOS41LTMwLjYgMzEuMiAwIDM0LjEgNDQuOSA4OC4xIDQ0LjkgMjUuNyAwIDQyLjMtMTEuNCA0Mi4zLTI2LjMgMC0xOC43LTE2LTIxLjYtNDItMjgtNjIuNS0xNS40LTExNy44LTIyLTExNy44LTg3LjIgMC01OS4yIDU4LjYtODEuMSAxMDkuMS04MS4xIDU1LjEgMCAxMTAuOCAyMS45IDExMC44IDU1LjQgMCAxNi45LTExLjQgMzEuOC0zMC4zIDMxLjgtMjguMyAwLTI5LjItMzMuNS03NS0zMy41LTI1LjcgMC00MiA3LTQyIDIyLjUgMCAxOS44IDIwLjggMjEuOCA2OS4xIDMzIDQxLjQgOS4zIDkwLjcgMjYuOCA5MC43IDc3LjYgMCA1OS4xLTU3LjEgODYuNS0xMTIgODYuNXoiXQogICAgfTsKICAgIGZhQW5ndWxhciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbmd1bGFyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MjAiLCAiTTE4NS43IDI2OC4xbDc2LjIgMC0zOC4xLTkxLjYtMzguMSA5MS42ek0yMjMuOCAzMkwxNiAxMDYuNCA0Ny44IDM4Mi4xIDIyMy44IDQ4MCAzOTkuOCAzODIuMSA0MzEuNiAxMDYuNCAyMjMuOCAzMnpNMzU0IDM3My44bC00OC42IDAtMjYuMi02NS40LTExMC42IDAtMjYuMiA2NS40LTQ4LjcgMCAxMzAuMS0yOTIuMyAxMzAuMiAyOTIuM3oiXQogICAgfTsKICAgIGZhT3BlbnN1c2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3BlbnN1c2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTYyYiIsICJNNDcxLjEgMTAyLjdzLS4zIDE4LjMtLjMgMjAuM2MtOS4xLTMtNzQuNC0yNC4xLTEzNS43LTI2LjMtNTEuOS0xLjgtMTIyLjgtNC4zLTIyMyA1Ny4zLTE5LjQgMTIuNC03My45IDQ2LjEtOTkuNiAxMDkuNy01LjUgMTMuMy0xMi42IDQzLjMtNS41IDcxLjQgMy4zIDEyLjggOC45IDI0LjkgMTYuNSAzNS43IDE3LjQgMjUgNDYuNiA0MS42IDc4LjEgNDQuNCA0NC40IDMuOSA3OC4xLTE2IDkwLTUzLjMgOC4yLTI1LjggMC02My42LTMxLjUtODIuOS0yNS42LTE1LjctNTMuMy0xMi4xLTY5LjItMS42LTEzLjkgOS4yLTIxLjggMjMuNS0yMS42IDM5LjIgLjMgMjcuOCAyNC4zIDQyLjYgNDEuNSA0Mi42IDUuNCAwIDEwLjctLjkgMTUuOC0yLjcgNi41LTEuOCAxMy4zLTYuNSAxMy4zLTE0LjkgMC0xMi4xLTExLjYtMTQuOC0xNi44LTEzLjktMi45IC41LTQuNSAyLTExLjggMi40LTItLjItMTItMy4xLTEyLTE0bDAtLjFjLjItMTIuMyAxMy4yLTE4IDI1LjUtMTYuOSAzMi4zIDIuOCA0Ny43IDQwLjcgMjguNSA2NS43LTE4LjMgMjMuNy03Ni42IDIzLjItOTkuNy0yMC40LTI2LTQ5LjIgMTIuNy0xMTEuMiA4Ny05OC40IDMzLjIgNS43IDgzLjYgMzUuNSAxMDIuNCAxMDQuM2w0NS45IDBjLTUuNy0xNy42LTguOS02OC4zIDQyLjctNjguMyA1Ni43IDAgNjMuOSAzOS45IDc5LjggNjguM2w0OC42IDBjLTEyLjgtMTguMy0yMS43LTM4LjctMTguOS01NS44IDUuNi0zMy44IDM5LjctMTguNCA4Mi40LTE3LjQgNjYuNSAuNCAxMDIuMS0yNyAxMDMuMS0yOCAzLjctMy4xIDYuNS0xNS44IDctMTcuNyAxLjMtNS4xLTMuMi0yLjQtMy4yLTIuNC04LjcgNS4yLTMwLjUgMTUuMi01MC45IDE1LjYtMjUuMyAuNS03Ni4yLTI1LjQtODEuNi0yOC4yLS4zLS40IC4xIDEuMi0xMS0yNS41IDg4LjQgNTguMyAxMTguMyA0MC41IDE0NS4yIDIxLjcgLjgtLjYgNC4zLTIuOSAzLjYtNS43LTEzLjgtNDguMS0yMi40LTYyLjctMzQuNS02OS42LTM3LTIxLjYtMTI1LTM0LjctMTI5LjItMzUuMyAuMS0uMS0uOS0uMy0uOSAuN3ptNjAuNCA3Mi44YTM3LjYgMzcuNiAwIDEgMSA3NS4yIDIuNiAzNy42IDM3LjYgMCAxIDEgLTc1LjItMi42em0zOC42LTI1LjNjLTMuNi0uMy03LjEgLjEtMTAuNSAxLjJzLTYuNSAyLjktOS4yIDUuMy00LjggNS4zLTYuMyA4LjUtMi40IDYuNy0yLjUgMTAuMyAuNSA3LjEgMS44IDEwLjQgMy4zIDYuMyA1LjggOC45IDUuNSA0LjUgOC44IDUuOSA2LjkgMiAxMC40IDEuOWMzLjYgLjMgNy4xLS4xIDEwLjUtMS4yczYuNS0yLjkgOS4yLTUuMyA0LjgtNS4zIDYuMy04LjUgMi40LTYuNyAyLjUtMTAuMy0uNS03LjEtMS44LTEwLjQtMy4zLTYuMy01LjgtOC45LTUuNS00LjUtOC44LTUuOS02LjktMi0xMC40LTEuOXptNC4zIDI4LjhjLTE1LjQgMC0xNS40LTE1LjYgMC0xNS42czE1LjQgMTUuNiAwIDE1LjZ6Il0KICAgIH07CiAgICBmYURyb3Bib3ggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZHJvcGJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTZiIiwgIk0yODguNCAxMTYuM2wtMTMyIDg0LjMgMTMyIDg0LjMtMTMyIDg0LjMtMTMyLjQtODUuMSAxMzIuMy04NC4zLTEzMi4zLTgzLjUgMTMyLjMtODQuMyAxMzIuMSA4NC4zek0xNTUuNiAzOTUuN2wxMzItODQuMyAxMzIgODQuMy0xMzIgODQuMy0xMzItODQuM3pNMjg4LjQgMjg0LjFsMTMyLTg0LjMtMTMyLTgzLjYgMTMxLjMtODQuMiAxMzIuMyA4NC4zLTEzMi4zIDg0LjMgMTMyLjMgODQuMi0xMzIuMyA4NC4zLTEzMS4zLTg1eiJdCiAgICB9OwogICAgZmFEZWV6ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZGVlemVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwNzciLCAiTTE0LjggMTAxLjFDNi42IDEwMS4xIDAgMTI3LjYgMCAxNjAuM3M2LjYgNTkuMiAxNC44IDU5LjIgMTQuOC0yNi41IDE0LjgtNTkuMi02LjYtNTkuMi0xNC44LTU5LjJ6TTQ0OC43IDQwLjljLTcuNyAwLTE0LjUgMTcuMS0xOS40IDQ0LjEtNy43LTQ2LjctMjAuMi03Ny0zNC4yLTc3LTE2LjggMC0zMS4xIDQyLjktMzggMTA1LjQtNi42LTQ1LjQtMTYuOC03NC4yLTI4LjMtNzQuMi0xNi4xIDAtMjkuNiA1Ni45LTM0LjcgMTM2LjItOS40LTQwLjgtMjMuMi02Ni4zLTM4LjMtNjYuM3MtMjguOCAyNS41LTM4LjMgNjYuM2MtNS4xLTc5LjMtMTguNi0xMzYuMi0zNC43LTEzNi4yLTExLjUgMC0yMS43IDI4LjgtMjguMyA3NC4yLTYuNi02Mi41LTIxLjItMTA1LjQtMzcuOC0xMDUuNC0xNCAwLTI2LjUgMzAuNC0zNC4yIDc3LTQuOC0yNy0xMS43LTQ0LjEtMTkuNC00NC4xLTE0LjMgMC0yNiA1OS4yLTI2IDEzMi4xUzQ5IDMwNS4yIDYzLjMgMzA1LjJjNS45IDAgMTEuNS05LjkgMTUuOC0yNi44IDYuOSA2MS43IDIxLjIgMTA0LjEgMzggMTA0LjEgMTMgMCAyNC41LTI1LjUgMzIuMS02NS42IDUuNCA3Ni4zIDE4LjYgMTMwLjQgMzQuMiAxMzAuNCA5LjcgMCAxOC42LTIxLjQgMjUuMy01Ni40IDcuOSA3Mi4yIDI2LjMgMTIyLjcgNDcuNyAxMjIuN3MzOS41LTUwLjUgNDcuNy0xMjIuN2M2LjYgMzUgMTUuNiA1Ni40IDI1LjMgNTYuNCAxNS42IDAgMjguOC01NC4xIDM0LjItMTMwLjQgNy43IDQwLjEgMTkuNCA2NS42IDMyLjEgNjUuNiAxNi42IDAgMzAuOS00Mi4zIDM4LTEwNC4xIDQuMyAxNi44IDkuNyAyNi44IDE1LjggMjYuOCAxNC4zIDAgMjYtNTkuMiAyNi0xMzIuMVM0NjMgNDAuOSA0NDguNyA0MC45em00OC41IDYwLjJjLTguMiAwLTE0LjggMjYuNS0xNC44IDU5LjJzNi42IDU5LjIgMTQuOCA1OS4yIDE0LjgtMjYuNSAxNC44LTU5LjItNi42LTU5LjItMTQuOC01OS4yeiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjcmVhdGl2ZS1jb21tb25zLXNhbXBsaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjAiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMy42IDUzLjJjMi44LS4zIDExLjUgMSAxMS41IDExLjVsNi42IDEwNy4yIDQuOS01OS4zYzAtNiA0LjctMTAuNiAxMC42LTEwLjZzMTAuNiA0LjcgMTAuNiAxMC42YzAgMi41LS41LTUuNyA1LjcgODEuNWw1LjgtNjQuMmMuMy0yLjkgMi45LTkuMyAxMC4yLTkuMyAzLjggMCA5LjkgMi4zIDEwLjYgOC45bDExLjUgOTYuNSA1LjMtMTIuOGMxLjgtNC40IDUuMi02LjYgMTAuMi02LjZsNTggMCAwIDIxLjMtNTAuOSAwLTE4LjIgNDQuM2MtMy45IDkuOS0xOS41IDkuMS0yMC44LTMuMWwtNC0zMS45LTcuNSA5Mi42Yy0uMyAzLTMgOS4zLTEwLjIgOS4zLTMgMC05LjgtMi4xLTEwLjYtOS4zIDAtMS45IC42IDUuOC02LjItNzcuOWwtNS4zIDcyLjJjLTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0yLjkgMC05LjgtMi0xMC42LTkuMyAwLTEuOSAuNSA2LjctNS44LTg3LjdMMjU1IDM4My45YzAgNi4zLTMuNiAxMi40LTEwLjYgMTIuNC01LjIgMC0xMC42LTQuMS0xMC42LTEyTDIyOCAyOTYuNmMtNS44IDkyLjUtNS4zIDg0LTUuMyA4NS45LTEuMSA0LjgtNC44IDkuMy0xMC42IDkuMy0zIDAtOS44LTIuMS0xMC42LTkuMyAwLS43LS40LTEuMS0uNC0yLjZsLTYuMi04OC42LTQuOSA1Ni43Yy0uNyA2LjUtNi43IDkuMy0xMC42IDkuMy01LjggMC05LjYtNC4xLTEwLjYtOC45TDE1Ny43IDI3MmMtMiA0LTMuNSA4LjQtMTEuMSA4LjRsLTUxLjQgMCAwLTIxLjMgNDQuOCAwIDEzLjctMjcuOWM0LjQtOS45IDE4LjItNy4yIDE5LjkgMi43bDMuMSAyMC40IDguNC05Ny45YzAtNiA0LjgtMTAuNiAxMC42LTEwLjYgLjUgMCAxMC42LS4yIDEwLjYgMTIuNGw0LjkgNjkuMSA2LjYtOTIuNmMwLTEwLjEgOS41LTEwLjYgMTAuMi0xMC42IC42IDAgMTAuNiAuNyAxMC42IDEwLjZsNS4zIDgwLjYgNi4yLTk3LjljLjEtMS4xLS42LTEwLjMgOS45LTExLjV6Il0KICAgIH07CiAgICBmYUplZGlPcmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqZWRpLW9yZGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MGUiLCAiTTM5OC45IDM3My42Yzk1LjktMTIyLjEgMTcuMi0yMzMuMSAxNy4yLTIzMy4xIDQ1LjQgODUuOC00MS40IDE3MC41LTQxLjQgMTcwLjUgMTA1LTE3MS41LTYwLjUtMjcxLjUtNjAuNS0yNzEuNSA5Ni45IDcyLjctMTAuMSAxOTAuNy0xMC4xIDE5MC43IDg1LjggMTU4LjQtNjguNiAyMzAuMS02OC42IDIzMC4xcy0uNC0xNi45LTIuMi04NS43YzQuMyA0LjUgMzQuNSAzNi4yIDM0LjUgMzYuMmwtMjQuMi00Ny40IDYyLjYtOS4xLTYyLjYtOS4xIDIwLjItNTUuNS0zMS40IDQ1LjljLTIuMi04Ny43LTcuOC0zMDUuMS03LjktMzA2LjkgMCAxLTUuNiAyMTktNy45IDMwNi45bC0zMS40LTQ1LjkgMjAuMiA1NS41LTYyLjYgOS4xIDYyLjYgOS4xLTI0LjIgNDcuNCAzNC41LTM2LjJjLTEuOCA2OC44LTIuMiA4NS43LTIuMiA4NS43UzU5LjEgMzg4LjYgMTQ0LjkgMjMwLjJjMCAwLTEwNy0xMTguMS0xMC4xLTE5MC43IDAgMC0xNjUuNSA5OS45LTYwLjUgMjcxLjUgMCAwLTg2LjgtODQuOC00MS40LTE3MC41IDAgMC03OC43IDExMSAxNy4yIDIzMy4xIDAgMC0yNi4yLTE2LjEtNDkuNC03Ny43IDAgMCAxNi45IDE4My4zIDIyMiAxODUuN2w0LjEgMGMyMDUtMi40IDIyMi0xODUuNyAyMjItMTg1LjctMjMuNiA2MS41LTQ5LjkgNzcuNy00OS45IDc3Ljd6Il0KICAgIH07CiAgICBmYVJQcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInItcHJvamVjdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGY3IiwgIk01NzguNSAyMjYuNkM1NzguNSAxMTkuMSA0NDguNCAzMiAyODggMzJTLTIuNSAxMTkuMS0yLjUgMjI2LjZjMCA5NS44IDEwMy4zIDE3NS40IDIzOS40IDE5MS41bDAgNjEuOSA5OS4xIDAgMC02MS41YzI0LjMtMi43IDQ3LjYtNy40IDY5LjQtMTMuOWw0MC4xIDc1LjQgMTEyIDAtNjcuNC0xMTMuN2M1NC41LTM1LjQgODguNC04NC45IDg4LjQtMTM5Ljd6TTExMS43IDI0MS4xYzAtNzMuNSA5OC45LTEzMyAyMjAuOC0xMzNzMjExLjkgNDAuNyAyMTEuOSAxMzNjMCA1MC4xLTI2LjUgODUtNzAuMyAxMDYuNC0yLjQtMS42LTQuNy0yLjktNi40LTMuNy0xMC4yLTUuMi0yNy44LTEwLjUtMjcuOC0xMC41czg2LjYtNi40IDg2LjYtOTIuNy05MC42LTg3LjktOTAuNi04Ny45bC0xOTkgMCAwIDIwOC4zYy03NC4xLTIxLjUtMTI1LjItNjcuMS0xMjUuMi0xMTkuOXptMjI1LjEgMzguM2wwLTU1LjZjNTcuOCAwIDg3LjgtNi44IDg3LjggMjcuMyAwIDM2LjUtMzguMiAyOC4zLTg3LjggMjguM3ptLS45IDcyLjVsMjYuNiAwYzEwLjggMCAxOC45IDExLjcgMjQgMTkuMi0xNi4xIDEuOS0zMyAyLjgtNTAuNiAyLjlsMC0yMi4xeiJdCiAgICB9OwogICAgZmFJbnN0YWxvZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJpbnN0YWxvZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDgxIiwgIk0xNTMuNiA0ODBsMjMzLjcgMCAxMTUuNC0yMDQuMi0yOTguMyA1Ny40LTUwLjggMTQ2Ljh6TTUwNSAyNDAuMUwzODcuNCAzMiAxNTUuOSAzMiAzNjAuNSAyNjcuOSA1MDUgMjQwLjF6TTEyNC42IDQ4LjhMNy41IDI1NiAxMjMuNSA0NjEuMiAyMjUuOSAxNjUuNiAxMjQuNiA0OC44eiJdCiAgICB9OwogICAgZmFDYW5hZGlhbk1hcGxlTGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYW5hZGlhbi1tYXBsZS1sZWFmIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODUiLCAiTTM4My44IDM1MS43YzIuNS0yLjUgMTA1LjItOTIuNCAxMDUuMi05Mi40bC0xNy41LTcuNWMtMTAtNC45LTcuNC0xMS41LTUtMTcuNCAyLjQtNy42IDIwLjEtNjcuMyAyMC4xLTY3LjNzLTQ3LjcgMTAtNTcuNyAxMi41Yy03LjUgMi40LTEwLTIuNS0xMi41LTcuNXMtMTUtMzIuNC0xNS0zMi40LTUyLjYgNTkuOS01NS4xIDYyLjNjLTEwIDcuNS0yMC4xIDAtMTcuNi0xMCAwLTEwIDI3LjYtMTI5LjYgMjcuNi0xMjkuNnMtMzAuMSAxNy40LTQwLjEgMjIuNGMtNy41IDUtMTIuNiA1LTE3LjYtNS01LjEtNy41LTQyLjctNzkuOC00Mi43LTc5LjhzLTM3LjUgNzIuMy00Mi41IDc5LjhjLTUgMTAtMTAgMTAtMTcuNiA1LTEwLTUtNDAuMS0yMi40LTQwLjEtMjIuNFMxODMuMyAxODIgMTgzLjMgMTkyYzIuNSAxMC03LjUgMTcuNS0xNy42IDEwLTIuNS0yLjUtNTUuMS02Mi4zLTU1LjEtNjIuM3MtMTIuNSAyNy4zLTE1IDMyLjMtNSA5LjktMTIuNSA3LjVDNzMgMTc3IDI1LjQgMTY3IDI1LjQgMTY3UzQzIDIyNi43IDQ1LjUgMjM0LjNjMi40IDYgNSAxMi41LTUgMTcuNEwyMyAyNTkuM3MxMDIuNiA4OS45IDEwNS4yIDkyLjRjNS4xIDUgMTAgNy41IDUuMSAyMi41LTUuMSAxNS0xMC4xIDM1LjEtMTAuMSAzNS4xczk1LjItMjAuMSAxMDUuMy0yMi42YzguNy0uOSAxOC4zIDIuNSAxOC4zIDEyLjVTMjQxIDUxMiAyNDEgNTEybDMwIDBzLTUuOC0xMDIuNy01LjgtMTEyLjggOS41LTEzLjQgMTguNC0xMi41YzEwIDIuNSAxMDUuMiAyMi42IDEwNS4yIDIyLjZzLTUtMjAuMS0xMC0zNS4xIDAtMTcuNSA1LTIyLjV6Il0KICAgIH07CiAgICBmYUV0aGVyZXVtID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV0aGVyZXVtIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY0MmUiLCAiTTMxMS45IDI2MC44TDE2MCAzNTMuNiA4IDI2MC44IDE2MCAwIDMxMS45IDI2MC44ek0xNjAgMzgzLjRMOCAyOTAuNiAxNjAgNTEyIDMxMiAyOTAuNiAxNjAgMzgzLjR6Il0KICAgIH07CiAgICBmYUhvdXp6ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvdXp6IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2MiLCAiTTI3NiAzMzAuN2wtMTA0LjYgMCAwIDE0OS4zLTE1NC4zIDAgMC00NDggMTA5LjUgMCAwIDEwNC41IDMwNS4xIDg1LjYgMCAyNTcuOS0xNTUuNyAwIDAtMTQ5LjN6Il0KICAgIH07CiAgICBmYVZpYmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInZpYmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDkiLCAiTTQ0NC4zIDQ5LjljLTEyLjctMTEuNy02NC4xLTQ5LTE3OC43LTQ5LjUgMCAwLTEzNS4xLTguMS0yMDAuOSA1Mi4zLTM2LjYgMzYuNi00OS41IDkwLjMtNTAuOSAxNTYuOHMtMy4xIDE5MS4xIDExNyAyMjQuOWwuMSAwLS4xIDUxLjZzLS44IDIwLjkgMTMgMjUuMWMxNi42IDUuMiAyNi40LTEwLjcgNDIuMy0yNy44IDguNy05LjQgMjAuNy0yMy4yIDI5LjgtMzMuNyA4Mi4yIDYuOSAxNDUuMy04LjkgMTUyLjUtMTEuMiAxNi42LTUuNCAxMTAuNS0xNy40IDEyNS43LTE0MiAxNS44LTEyOC42LTcuNi0yMDkuOC00OS44LTI0Ni41ek00NTguMiAyODdjLTEyLjkgMTA0LTg5IDExMC42LTEwMyAxMTUuMS02IDEuOS02MS41IDE1LjctMTMxLjIgMTEuMiAwIDAtNTIgNjIuNy02OC4yIDc5LTUuMyA1LjMtMTEuMSA0LjgtMTEtNS43IDAtNi45IC40LTg1LjcgLjQtODUuN2wwIDBDNDMuNCAzNzIuNyA0OS40IDI2Ni42IDUwLjUgMjExLjFzMTEuNi0xMDEgNDIuNi0xMzEuNmM1NS43LTUwLjUgMTcwLjQtNDMgMTcwLjQtNDMgOTYuOSAuNCAxNDMuMyAyOS42IDE1NC4xIDM5LjQgMzUuNyAzMC42IDUzLjkgMTAzLjggNDAuNiAyMTEuMXptLTEzOS04MC44Yy40IDguNi0xMi41IDkuMi0xMi45IC42LTEuMS0yMi0xMS40LTMyLjctMzIuNi0zMy45LTguNi0uNS03LjgtMTMuNCAuNy0xMi45IDI3LjkgMS41IDQzLjQgMTcuNSA0NC44IDQ2LjJ6bTIwLjMgMTEuM2MxLTQyLjQtMjUuNS03NS42LTc1LjgtNzkuMy04LjUtLjYtNy42LTEzLjUgLjktMTIuOSA1OCA0LjIgODguOSA0NC4xIDg3LjggOTIuNS0uMSA4LjYtMTMuMSA4LjItMTIuOS0uM3ptNDcgMTMuNGMuMSA4LjYtMTIuOSA4LjctMTIuOSAuMS0uNi04MS41LTU0LjktMTI1LjktMTIwLjgtMTI2LjQtOC41LS4xLTguNS0xMi45IDAtMTIuOSA3My43IC41IDEzMyA1MS40IDEzMy43IDEzOS4yek0zNzUuMiAzMjlsMCAuMmMtMTAuOCAxOS0zMSA0MC01MS44IDMzLjNsLS4yLS4zYy0yMS4xLTUuOS03MC44LTMxLjUtMTAyLjItNTYuNS0xNi4yLTEyLjgtMzEtMjcuOS00Mi40LTQyLjQtMTAuMy0xMi45LTIwLjctMjguMi0zMC44LTQ2LjYtMjEuMy0zOC41LTI2LTU1LjctMjYtNTUuNy02LjctMjAuOCAxNC4yLTQxIDMzLjMtNTEuOGwuMiAwYzkuMi00LjggMTgtMy4yIDIzLjkgMy45IDAgMCAxMi40IDE0LjggMTcuNyAyMi4xIDUgNi44IDExLjcgMTcuNyAxNS4yIDIzLjggNi4xIDEwLjkgMi4zIDIyLTMuNyAyNi42bC0xMiA5LjZjLTYuMSA0LjktNS4zIDE0LTUuMyAxNHMxNy44IDY3LjMgODQuMyA4NC4zYzAgMCA5LjEgLjggMTQtNS4zbDkuNi0xMmM0LjYtNiAxNS43LTkuOCAyNi42LTMuNyAxNC43IDguMyAzMy40IDIxLjIgNDUuOCAzMi45IDcgNS43IDguNiAxNC40IDMuOCAyMy42eiJdCiAgICB9OwogICAgZmFLaWNrc3RhcnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJraWNrc3RhcnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzcXVhcmUta2lja3N0YXJ0ZXIiXSwgImYzYmIiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyMC44IDIzM2wtMjMuMyAyMy4xIDIzLjMgMjIuOWMyNC4xIDIzLjkgMjQuMSA2MyAwIDg2LjlzLTYzLjQgMjMuOS04Ny42IDBsLTguNS04LjRjLTExLjMgMTYtMjkuNyAyNi41LTUwLjkgMjYuNS0zNC4xIDAtNjEuOS0yNy41LTYxLjktNjEuNGwwLTEzMy4yYzAtMzMuOCAyNy43LTYxLjQgNjEuOS02MS40IDIxLjEgMCAzOS42IDEwLjUgNTAuOSAyNi41bDguNS04LjRjMjQuMS0yMy45IDYzLjQtMjMuOSA4Ny42IDBzMjQuMSA2MyAwIDg2Ljl6Il0KICAgIH07CiAgICBmYVNxdWFyZUtpY2tzdGFydGVyID0gZmFLaWNrc3RhcnRlcjsKICAgIGZhU3BvdGlmeSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcG90aWZ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYmMiLCAiTTI1NiA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnpNMzU2LjcgMzcyLjljLTQuMiAwLTYuOC0xLjMtMTAuNy0zLjYtNjIuNC0zNy42LTEzNS0zOS4yLTIwNi43LTI0LjUtMy45IDEtOSAyLjYtMTEuOSAyLjYtOS43IDAtMTUuOC03LjctMTUuOC0xNS44IDAtMTAuMyA2LjEtMTUuMiAxMy42LTE2LjggODEuOS0xOC4xIDE2NS42LTE2LjUgMjM3IDI2LjIgNi4xIDMuOSA5LjcgNy40IDkuNyAxNi41cy03LjEgMTUuNC0xNS4yIDE1LjR6bTI2LjktNjUuNmMtNS4yIDAtOC43LTIuMy0xMi4zLTQuMi02Mi41LTM3LTE1NS43LTUxLjktMjM4LjYtMjkuNC00LjggMS4zLTcuNCAyLjYtMTEuOSAyLjYtMTAuNyAwLTE5LjQtOC43LTE5LjQtMTkuNHM1LjItMTcuOCAxNS41LTIwLjdjMjcuOC03LjggNTYuMi0xMy42IDk3LjgtMTMuNiA2NC45IDAgMTI3LjYgMTYuMSAxNzcgNDUuNSA4LjEgNC44IDExLjMgMTEgMTEuMyAxOS43LS4xIDEwLjgtOC41IDE5LjUtMTkuNCAxOS41em0zMS03Ni4yYy01LjIgMC04LjQtMS4zLTEyLjktMy45LTcxLjItNDIuNS0xOTguNS01Mi43LTI4MC45LTI5LjctMy42IDEtOC4xIDIuNi0xMi45IDIuNi0xMy4yIDAtMjMuMy0xMC4zLTIzLjMtMjMuNiAwLTEzLjYgOC40LTIxLjMgMTcuNC0yMy45IDM1LjItMTAuMyA3NC42LTE1LjIgMTE3LjUtMTUuMiA3MyAwIDE0OS41IDE1LjIgMjA1LjQgNDcuOCA3LjggNC41IDEyLjkgMTAuNyAxMi45IDIyLjYgMCAxMy42LTExIDIzLjMtMjMuMiAyMy4zeiJdCiAgICB9OwogICAgZmFMZWFucHViID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxlYW5wdWIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIxMiIsICJNMzg2LjYgMTExLjVsMTUuMSAyNDktMTEtLjNjLTM2LjItLjgtNzEuNiA4LjgtMTAyLjcgMjgtMzEtMTkuMi02Ni40LTI4LTEwMi43LTI4LTQ1LjYgMC04Mi4xIDEwLjctMTIzLjUgMjcuN0w5My4yIDEyOS42YzI4LjUtMTEuOCA2MS41LTE4LjEgOTIuMi0xOC4xIDQxLjIgMCA3My44IDEzLjIgMTAyLjcgNDIuNSAyNy43LTI4LjMgNTktNDEuNyA5OC41LTQyLjV6TTU2OS4yIDQ0OGMtMjUuNSAwLTQ3LjUtNS4yLTcwLjUtMTUuNi0zNC4zLTE1LjYtNzAtMjUtMTA3LjktMjUtMzkgMC03NC45IDEyLjktMTAyLjcgNDAuNi0yNy43LTI3LjctNjMuNy00MC42LTEwMi43LTQwLjYtMzcuOSAwLTczLjYgOS4zLTEwNy45IDI1LTIyLjIgOS45LTQ0LjcgMTUuNi02OS4yIDE1LjZMNyA0NDggNDkuNiA5OC45YzM5LjMtMjIuMiA4Ny0zNC45IDEzMi4zLTM0LjkgMzcuMSAwIDc1LjIgNy43IDEwNi4yIDI5LjEgMzEtMjEuNCA2OS4yLTI5LjEgMTA2LjItMjkuMSA0NS4zIDAgOTMgMTIuNiAxMzIuMyAzNC45TDU2OS4yIDQ0OHptLTQzLjQtNDQuN0w0OTEuOCAxMjNjLTMwLjctMTQtNjcuMi0yMS40LTEwMS0yMS40LTM4LjQgMC03NC40IDEyLjEtMTAyLjcgMzguNy0yOC4zLTI2LjYtNjQuMi0zOC43LTEwMi43LTM4LjctMzMuOCAwLTcwLjMgNy40LTEwMSAyMS40bC0zNCAyODAuMmM0Ny4yLTE5LjUgODIuOS0zMy41IDEzNS0zMy41IDM3LjYgMCA3MC44IDkuNiAxMDIuNyAyOS42IDMxLjgtMjAgNjUuMS0yOS42IDEwMi43LTI5LjYgNTIuMiAwIDg3LjggMTQgMTM1IDMzLjV6Il0KICAgIH07CiAgICBmYUphdmEgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiamF2YSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNGU0IiwgIk0yNzcuOCAzMTIuOWM5LjgtNi43IDIzLjQtMTIuNSAyMy40LTEyLjVzLTM4LjcgNy03Ny4yIDEwLjJjLTQ3LjEgMy45LTk3LjcgNC43LTEyMy4xIDEuMy02MC4xLTggMzMtMzAuMSAzMy0zMC4xcy0zNi4xLTIuNC04MC42IDE5Yy01Mi41IDI1LjQgMTMwIDM3IDIyNC41IDEyLjF6bS04NS40LTMyLjFjLTE5LTQyLjctODMuMS04MC4yIDAtMTQ1LjggMTAzLjctODEuOCA1MC41LTEzNSA1MC41LTEzNSAyMS41IDg0LjUtNzUuNiAxMTAuMS0xMTAuNyAxNjIuNi0yMy45IDM1LjkgMTEuNyA3NC40IDYwLjIgMTE4LjJ6TTMwNyAxMDQuNmMuMSAwLTE3NS4yIDQzLjgtOTEuNSAxNDAuMiAyNC43IDI4LjQtNi41IDU0LTYuNSA1NHM2Mi43LTMyLjQgMzMuOS03Mi45QzIxNiAxODguMSAxOTUuNCAxNjkuMyAzMDcgMTA0LjZ6bS02LjEgMjcwLjVjLS41IDEtMS4yIDEuOC0yIDIuNiAxMjguMy0zMy43IDgxLjEtMTE4LjkgMTkuOC05Ny4zLTMuMyAxLjItNi4yIDMuNC04LjIgNi4zIDMuNi0xLjMgNy4zLTIuMyAxMS0zIDMxLTYuNSA3NS41IDQxLjUtMjAuNiA5MS40ek0zNDggNDM3LjRzMTQuNSAxMS45LTE1LjkgMjEuMmMtNTcuOSAxNy41LTI0MC44IDIyLjgtMjkxLjYgLjctMTguMy03LjkgMTYtMTkgMjYuOC0yMS4zIDExLjItMi40IDE3LjctMiAxNy43LTItMjAuMy0xNC4zLTEzMS4zIDI4LjEtNTYuNCA0MC4yIDIwNC4yIDMzLjIgMzcyLjQtMTQuOSAzMTkuNC0zOC44ek0xMjQuNSAzOTZjLTc4LjcgMjIgNDcuOSA2Ny40IDE0OC4xIDI0LjUtOS44LTMuOC0xOS4yLTguNC0yOC4yLTEzLjgtNDQuNyA4LjUtNjUuNCA5LjEtMTA2IDQuNS0zMy41LTMuOC0xMy45LTE1LjItMTMuOS0xNS4yem0xNzkuOCA5Ny4yYy03OC43IDE0LjgtMTc1LjggMTMuMS0yMzMuMyAzLjYgMC0uMSAxMS44IDkuNyA3Mi40IDEzLjYgOTIuMiA1LjkgMjMzLjgtMy4zIDIzNy4xLTQ2LjkgMCAwLTYuNCAxNi41LTc2LjIgMjkuN3pNMjYwLjcgMzUzYy01OS4yIDExLjQtOTMuNSAxMS4xLTEzNi44IDYuNi0zMy41LTMuNS0xMS42LTE5LjctMTEuNi0xOS43LTg2LjggMjguOCA0OC4yIDYxLjQgMTY5LjUgMjUuOS03LjgtMi44LTE1LTcuMS0yMS4xLTEyLjh6Il0KICAgIH07CiAgICBmYU5mY1N5bWJvbCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJuZmMtc3ltYm9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MzEiLCAiTTM2MC45IDMyLjRjNy43LTEuMyAxNS43IC41IDIxLjIgNSA4NC4xIDU4LjcgMTI5LjkgMTM2LjMgMTI5LjkgMjE3LjcgMCA4My4xLTQ1LjggMTYwLjgtMTI5LjkgMjE5LjUtNC44IDQtMTEuNyA1LjktMTguNiA1LjMtNy0uNi0xMy41LTMuNi0xOC40LTguNUwxNjEuNyAyODguN2MtNS42LTUuNS04LjctMTMtOS42LTIwLjkgMC03LjggNC0xNS4zIDkuNS0yMC45IDUuNi01LjUgMTMuMS04LjcgMjAuOS04LjcgNy45IDAgMTUuNCAzLjEgMjAuOSA4LjZMMzY4LjUgNDExLjJjNTQuNi00NC43IDg0LjMtOTkuMiA4NC4zLTE1Ni4xIDAtNjEuNi0zNi45LTEyMi4yLTEwMy45LTE2OS4zLTYuNC00LjUtMTAuOC0xMS40LTEyLjEtMTkuMS0xLjQtNy43IC40LTE1LjcgNS0yMi4xIDQuNS02LjQgMTEuNC0xMC44IDE5LjEtMTIuMXptLTIwNiA0NDcuMmMtNy43IDEuMy0xNS42LS41LTIyLjEtNS04My4xLTU4LjctMTI5LTEzNi40LTEyOS0yMTkuNSAwLTgxLjQgNDUuOC0xNTkgMTI5LTIxNy43IDUuNy00IDEyLjYtNS45IDE5LjYtNS4zIDYuOSAuNiAxMy40IDMuNiAxOC4zIDguNUwzNTQuMSAyMjMuM2M1LjYgNS41IDguNyAxMyA4LjcgMjAuOSAuMSA2LjktMyAxNS4zLTguNiAyMC45LTUuNSA1LjUtMTMgOC43LTIwLjkgOC43LTcuOCAwLTE2LjItMy4xLTIwLjktOC42TDE0Ny4zIDEwMC43Yy01NC42IDQ1LjItODQuMyA5OS4yLTg0LjMgMTU0LjQgMCA2My40IDM2LjkgMTI0IDEwMy4xIDE3MS4xIDcuMyA0LjYgMTEuNiAxMS40IDEzIDE5LjIgMS4zIDcuNy0uNSAxNS43LTUgMjIuMXMtMTEuNCAxMC43LTE5LjIgMTIuMXoiXQogICAgfTsKICAgIGZhV29kdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3b2R1IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwODgiLCAiTTE3OC40IDMzOS43bC0zNy4zIDAtMjguOS0xMTYuMi0uNSAwLTI4LjUgMTE2LjItMzggMC00NS4yLTE3MC44IDM3LjUgMCAyNyAxMTYuMiAuNSAwIDI5LjctMTE2LjIgMzUuMiAwIDI5LjIgMTE3LjcgLjUgMCAyOC0xMTcuNyAzNi44IDAtNDUuOSAxNzAuOHptOTMtMTI3YzM5IDAgNjQuMSAyNS44IDY0LjEgNjUuMyAwIDM5LjItMjUuMSA2NS02NC4xIDY1LTM4LjcgMC02My45LTI1LjgtNjMuOS02NSAwLTM5LjUgMjUuMS02NS4zIDYzLjktNjUuM3ptMCAxMDQuOGMyMy4yIDAgMzAuMS0xOS45IDMwLjEtMzkuNSAwLTE5LjktNi45LTM5LjctMzAuMS0zOS43LTI3LjcgMC0yOS45IDE5LjktMjkuOSAzOS43IDAgMTkuNiA2LjkgMzkuNSAyOS45IDM5LjV6bTE2My43IDYuNWwtLjUgMGMtNy45IDEzLjQtMjEuOCAxOS4xLTM3LjUgMTkuMS0zNy4zIDAtNTUuNS0zMi01NS41LTY2LjIgMC0zMy4yIDE4LjQtNjQuMSA1NC44LTY0LjEgMTQuNiAwIDI4LjkgNi4yIDM2LjggMTguNGwuMiAwIDAtNjIuMiAzNCAwIDAgMTcwLjgtMzIuMyAwIDAtMTUuOHptLTI5LjctODUuNmMtMjIuMiAwLTI5LjkgMTkuMS0yOS45IDM5LjUgMCAxOS40IDguOCAzOS43IDI5LjkgMzkuNyAyMi41IDAgMjkuMi0xOS42IDI5LjItMzkuOSAwLTIwLjEtNy4yLTM5LjItMjkuMi0zOS4yek01OTMgMzM5LjdsLTMyLjMgMCAwLTE3LjItLjcgMGMtOC42IDEzLjktMjMuNCAyMC42LTM3LjggMjAuNi0zNi4xIDAtNDUuMi0yMC4zLTQ1LjItNTAuOWwwLTc2LjEgMzQgMCAwIDY5LjhjMCAyMC4zIDYgMzAuNCAyMS44IDMwLjQgMTguNCAwIDI2LjMtMTAuMyAyNi4zLTM1LjRsMC02NC44IDM0IDAgMCAxMjMuNnptOS41LTM2LjhsMzcuNSAwIDAgMzYuOC0zNy41IDAgMC0zNi44eiJdCiAgICB9OwogICAgZmFTcXVhcmVTdGVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc3RlYW0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic3RlYW0tc3F1YXJlIl0sICJmMWI3IiwgIk0xNjUuNiAzMDkuMWMxOC42IDcuNyAyNy4zIDI4LjkgMTkuNiA0Ny40cy0yOSAyNy4yLTQ3LjYgMTkuNGwtMjguNS0xMS44YzUgMTAuNiAxMy44IDE5LjQgMjUuNCAyNC4yIDI1LjIgMTAuNSA1NC4xLTEuNCA2NC42LTI2LjUgNS4xLTEyLjEgNS4xLTI1LjUgLjEtMzcuNy01LjEtMTIuMS0xNC41LTIxLjYtMjYuNy0yNi43LTEyLjEtNS0yNS00LjgtMzYuNC0uNWwyOS41IDEyLjJ6TTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgMTQ0LjcgMTE2LjYgNDguMWMxMi04LjIgMjYuMi0xMi4xIDQwLjctMTEuM2w1NS40LTgwLjIgMC0xLjFjMC00OC4yIDM5LjMtODcuNSA4Ny42LTg3LjVzODcuNiAzOS4zIDg3LjYgODcuNWMwIDQ5LjItNDAuOSA4OC43LTg5LjYgODcuNWwtNzkgNTYuM2MxLjYgMzguNS0yOS4xIDY4LjgtNjUuNyA2OC44LTMxLjggMC01OC41LTIyLjctNjQuNS01Mi43TDAgMzE5LjIgMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI0MS45IDE5Ni4yYTU4LjQgNTguNCAwIDEgMCAxMTYuOCAwIDU4LjQgNTguNCAwIDEgMCAtMTE2LjggMHptMTAyLjQtLjFhNDMuOSA0My45IDAgMSAxIC04Ny44IDAgNDMuOSA0My45IDAgMSAxIDg3LjggMHoiXQogICAgfTsKICAgIGZhU3RlYW1TcXVhcmUgPSBmYVNxdWFyZVN0ZWFtOwogICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmMtZXUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlOSIsICJNMjU1LjcgOEMxMTEuNiA4IDggMTI0LjggOCAyNTYgOCAzOTIuMyAxMTkuNyA1MDQgMjU1LjcgNTA0IDM4NS45IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE3IDM5Ni40IDggMjU1LjcgOHptLjYgNDUwLjdjLTExMiAwLTIwMy42LTkyLjUtMjAzLjYtMjAyLjcgMC0yMy4yIDMuNy00NS4yIDEwLjktNjZsNjUuNyAyOS4xLTQuNyAwIDAgMjkuNSAyMy4zIDBjMCA2LjItLjQgMy4yLS40IDE5LjVsLTIyLjggMCAwIDI5LjUgMjcgMGMxMS40IDY3IDY3LjIgMTAxLjMgMTI0LjYgMTAxLjMgMjYuNiAwIDUwLjYtNy45IDY0LjgtMTUuOGwtMTAtNDYuMWMtOC43IDQuNi0yOC4yIDEwLjgtNDcuMyAxMC44LTI4LjIgMC01OC4xLTEwLjktNjcuMy01MC4ybDkwLjMgMCAxMjguMyA1Ni44Yy0xLjUgMi4xLTU2LjIgMTA0LjMtMTc4LjggMTA0LjN6TTIzOS42IDI2OC4xbC0uNS0uNCAuOSAuNC0uNCAwem03Ny4yLTE5LjVsMy43IDAgMC0yOS41LTcwLjMgMC0yOC42LTEyLjZjMi41LTUuNSA1LjQtMTAuNSA4LjgtMTQuMyAxMi45LTE1LjggMzEuMS0yMi40IDUxLjEtMjIuNCAxOC4zIDAgMzUuMyA1LjQgNDYuMSAxMGwxMS42LTQ3LjNjLTE1LTYuNi0zNy0xMi40LTYyLjMtMTIuNC0zOSAwLTcyLjIgMTUuOC05NS45IDQyLjMtNS4zIDYuMS05LjggMTIuOS0xMy45IDIwLjFMODUuNSAxNDYuNGM2NC42LTk2LjggMTU3LjctOTMuNiAxNzAuNy05My42IDExMyAwIDIwMyA5MC4yIDIwMyAyMDMuNCAwIDE4LjctMi4xIDM2LjMtNi4zIDUyLjlMMzE2LjggMjQ4LjZ6Il0KICAgIH07CiAgICBmYU5wbSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJucG0iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkNCIsICJNMjg4IDI4OGwtMzIgMCAwLTY0IDMyIDAgMCA2NHpNNTc2IDE2MGwwIDE5Mi0yODggMCAwIDMyLTEyOCAwIDAtMzItMTYwIDAgMC0xOTIgNTc2IDB6TTE2MCAxOTJsLTEyOCAwIDAgMTI4IDY0IDAgMC05NiAzMiAwIDAgOTYgMzIgMCAwLTEyOHptMTYwIDBsLTEyOCAwIDAgMTYwIDY0IDAgMC0zMiA2NCAwIDAtMTI4em0yMjQgMGwtMTkyIDAgMCAxMjggNjQgMCAwLTk2IDMyIDAgMCA5NiAzMiAwIDAtOTYgMzIgMCAwIDk2IDMyIDAgMC0xMjh6Il0KICAgIH07CiAgICBmYUNsb3Vkc2NhbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2xvdWRzY2FsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzgzIiwgIk0zMTguMSAxNTRsLTkuNCA3LjZjLTIyLjUtMTkuMy01MS41LTMzLjYtODMuMy0zMy42LTcxLjYgMC0xMjkuNCA2MC44LTEyOS40IDEzMi4zIDAgNi42IC40IDEzLjEgMS40IDE5LjQtMi01NiA0MS44LTk3LjQgOTIuNi05Ny40IDI0LjIgMCA0Ni4yIDkuNCA2Mi42IDI0LjdsLTI1LjIgMjAuNGMtOC4zLS45LTE2LjggMS44LTIzLjEgOC4xLTExLjEgMTEtMTEuMSAyOC45IDAgNDAgMTEuMSAxMSAyOC45IDExIDQwIDAgNi4zLTYuMyA5LTE0LjkgOC4xLTIzLjFsNzUuMi04OC44YzYuMy02LjUtMy4zLTE1LjktOS41LTkuNnpNMjEzLjcgMjQ2LjVhMTQgMTQgMCAxIDEgMjAuNiAxOSAxNCAxNCAwIDEgMSAtMjAuNi0xOXpNMjI0IDMyYTIyNCAyMjQgMCAxIDAgMCA0NDggMjI0IDIyNCAwIDEgMCAwLTQ0OHptMCA2NGExNjAgMTYwIDAgMSAxIDAgMzIwIDE2MCAxNjAgMCAxIDEgMC0zMjB6Il0KICAgIH07CiAgICBmYVRoZW1lY28gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGhlbWVjbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWM2IiwgIk0yMDIuOSA4LjRjOS45LTUuNyAyNi01LjggMzYtLjJMNDMwIDExNS45YzEwIDUuNiAxOCAxOS40IDE4IDMwLjlMNDQ4IDM2NGMwIDExLjQtOC4xIDI1LjMtMTggMzFMMjM4LjggNTAzLjdjLTkuOSA1LjctMjYgNS42LTM1LjgtLjJMMTcuOSAzOTUuMUM4IDM4OS4zIDAgMzc1LjQgMCAzNjRMMCAxNDYuN2MwLTExLjQgOC0yNS40IDE3LjktMzEuMUwyMDIuOSA4LjR6TTEyNS41IDIwOC4zYy0xNS45IDAtMzEuOSAuMS00Ny44IC4xbDAgMTAxLjQgMTkuMSAwIDAtMjkuOCAyOC43IDBjNDkuNyAwIDQ5LjYtNzEuNyAwLTcxLjd6TTI2NS42IDMwOC42bC0zMC43LTM0LjZjMzctNy41IDM0LjgtNjUuMi0xMC45LTY1LjUtMTYuMSAwLTMyLjItLjEtNDguMy0uMWwwIDEwMS42IDE5LjEgMCAwLTMzLjkgMTguNCAwIDI5LjYgMzMuOSAyMi44IDAgMC0xLjN6bS00MS42LTgyLjNjMjMuMyAwIDIzLjMgMzIuNSAwIDMyLjVsLTI5LjEgMCAwLTMyLjUgMjkuMSAwem0tOTUuNi0xLjZjMjEuMiAwIDIxLjEgMzguOSAwIDM4LjlsLTMyLjMgMCAwLTM4LjggMzIuMyAwem0xOTIuNi0xOC4yYy02OC41IDAtNzEgMTA1LjggMCAxMDUuOCA2OS41IDAgNjkuNC0xMDUuOCAwLTEwNS44em0wIDE3LjRjNDQuMSAwIDQ0LjggNzAuOSAwIDcwLjlzLTQ0LjQtNzAuOSAwLTcwLjl6Il0KICAgIH07CiAgICBmYUdvb2dsZVBsYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXBsYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNhYiIsICJNMjkzLjYgMjM0LjNMNzIuOSAxMyAzNTMuNyAxNzQuMiAyOTMuNiAyMzQuM3pNMTUuMyAwQzIuMyA2LjgtNi40IDE5LjItNi40IDM1LjNsMCA0NDEuM2MwIDE2LjEgOC43IDI4LjUgMjEuNyAzNS4zTDI3MS45IDI1NS45IDE1LjMgMHpNNDQwLjUgMjI1LjZsLTU4LjktMzQuMS02NS43IDY0LjUgNjUuNyA2NC41IDYwLjEtMzQuMWMxOC0xNC4zIDE4LTQ2LjUtMS4yLTYwLjh6TTcyLjkgNDk5TDM1My43IDMzNy44IDI5My42IDI3Ny43IDcyLjkgNDk5eiJdCiAgICB9OwogICAgZmFLb3J2dWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia29ydnVlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0MmYiLCAiTTM4Ny42IDM0bC0zMjcgMEMyNy45IDM0IDEuMSA2MC44IDEuMSA5My41bDAgMzI3LjFjMCAzMi42IDI2LjggNTkuNCA1OS41IDU5LjRsMzI3LjEgMGMzMyAwIDU5LjUtMjYuOCA1OS41LTU5LjVsMC0zMjdDNDQ3LjEgNjAuOCA0MjAuMyAzNCAzODcuNiAzNHpNODguMiAxMjAuOGw5NiAwIDAgMTE2IDYxLjgtMTE2IDExMC45IDAtODEuMiAxMzItMTg3LjUgMCAwLTEzMnpNMjUwIDM5Mi45bC02NS43LTExMy42IDAgMTEzLjYtOTYgMCAwLTEzMC44IDE5MS41IDAgODguNiAxMzAuOC0xMTguNCAweiJdCiAgICB9OwogICAgZmFXM2MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidzNjIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZGUiLCAiTTEwNS4yIDMwNS4zbDMwLjktMTA0LjdjNy45LTI2LjcgOC42LTQwLjYgLjItNjguOGwtMTAuMS0zMy45IDQ0LjEgMCA2MSAyMDcuNCA0NS43LTE1NS41YzEzLjMtNDUuMyAyMS4xLTUxLjkgNTkuNC01MS45bDEzMi44IDBjLTI0LjIgNDIuOS00OS4zIDg1LjItNzMuOSAxMjcuOSAyLjYgLjggNS4yIDEuOCA3LjcgMi44IDE3LjMgNy4xIDMyLjIgMTkuNCA0MiAzNS41IDExLjIgMTguNSAxNi44IDQwLjIgMTYuOCA2NS4yIDAgMzAuOC04LjIgNTYuOC0yNC42IDc3LjgtMTQuNSAxOC42LTM1IDI5LjUtNTguMiAzMS4yIDAgLjMtNS4yIC40LTUuOCAuNC0zOS43LS4xLTcwLjgtMzIuMS04My4xLTY4LjdsNDIuOSAwYzMuNSA1LjMgNi44IDEwLjcgMTEuMiAxNS41IDguMSA3LjMgMTguNSAxMC45IDI5LjMgMTEuMSAxMy4xIDAgMjMuMy05LjEgMjkuOS0xOS44IDguMS0xMy4yIDEyLjItMjkgMTIuMi00Ny41IDAtMTMuMS0xLjgtMjQuMy01LjMtMzMuNi0uOS0yLjMtMS45LTQuNS0zLTYuNi0xLjQtMi42LTIuOS01LjEtNC43LTcuNC0xMC4xLTEzLjItMjkuMy0xOS43LTQ3LjUtMTkuOGwtMjguMiAwIDcwLjMtMTIyLTM1LjYgMGMtNDMuMSAwLTM1LjktNS40LTUwLjQgNDMuM2wtNzUuNyAyNTUuMy00LjIgMC02My4xLTIxMS4xLTYzLjEgMjExLjEtNC4yIDAtMTAxLTM0MC43IDQ0LjIgMCA2MSAyMDcuNHpNNDY3IDMzNS43Yy4zIC42IDExLjMgMjAuMyAxOC4zIDMwLjMgNy4xIDEwLjEgMTkuOCAyMC45IDI0LjggMjQuNnMxOS4xIDEyLjUgMzQuMyAxMy45YzE1LjIgMS41IDIzLjMgLjIgMzguNy02LjYgMTUuNC02LjggMjcuOS0yMC40IDM0LjktMjguMSA2LjktNy42IDE3LjktMjcuMyAxOC4yLTI3LjdsMy4zIDE2LjhjMS43IDktMSAyMy43LTQuMSAzMC00LjMgOC42LTcuNiAxMy41LTE0IDIwLjMtNi4xIDYuNS0xNi43IDEzLjUtMjEuMyAxNi40LTQuNiAyLjktMjMuMSAxNS4xLTUwLjEgMTAuM3MtNDQuNy0yNS45LTUzLjktMzguMmMtOS44LTEzLjItMTYuNy0yOC4zLTE5LTMzLjItMy44LTguNC05LjktMjguMi0xMC4xLTI4Ljh6bTE2OS43LTIxOGMzLjMgMjAuMy0uMSAyOC43LTkuMSA0NmwtMTIuNyAyNC4yYy0uMy0uNi0xMC0yMC43LTI1LjktMzEuOS0xMy42LTkuNi0yMi41LTExLjctMzYuMy04LjgtMTcuOCAzLjctMzggMjUtNDYuOCA1MS4yLTEwLjUgMzEuNC0xMC43IDQ2LjYtMTEgNjAuNi0uNiAyMi40IDIuOSAzNS42IDIuOSAzNS42cy0xNS40LTI4LjUtMTUuMi03MC4xYy4xLTI5LjcgNC44LTU2LjcgMTguNS04My4zIDEyLjEtMjMuNCAzMC4xLTM3LjQgNDYuMS0zOS4xIDE2LjUtMS43IDI5LjYgNi4zIDM5LjcgMTQuOSAxMC42IDkgMjEuMyAyOC44IDIxLjMgMjguOGwyNC45LTQ5LjggMy42IDIxLjh6Il0KICAgIH07CiAgICBmYUdyYXYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3JhdiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ2IiwgIk0zMDIuNiAyMTAuNmM0LjUgNC41IDQuNSAxMi4zIDAgMTYuOGwtMTAgMTBjLTQuNSA0LjktMTIuMyA0LjktMTcuMSAwbC0xMC44LTEwLjhjLTQuNS00LjktNC41LTEyLjMgMC0xNy4xbDEwLTEwYzQuNS00LjUgMTIuMy00LjUgMTcuMSAwbDEwLjggMTEuMXptLTMxLjItMjAuM2E3LjcgNy43IDAgMSAwIC0xMC42LTExIDcuNyA3LjcgMCAxIDAgMTAuNiAxMXptLTI2LjggNS41YTcuNSA3LjUgMCAxIDAgMTAuNyAxMC41IDcuNSA3LjUgMCAxIDAgLTEwLjctMTAuNXpNMzE5LjQgMTgyYy0yMC41LTE0LjktMzQuOS00NC42LTEyLjMtNzAuMyAyMi4zLTI1LjcgNDItMTcuOCA2MS43IC44IDEyLjMgMTEuNyAzMC4yIDI1LjcgMTcuOCA0OS44LTEyLjkgMjQuMy00Ni42IDM0LjMtNjcuMiAxOS43em00OS4yLTQ1LjljLTkuMi0xMC4zLTI0LjEgNy4xLTE2IDE2LjYgNy42IDkuMyAzMy4xIDIuNSAxNi0xNi42ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem00NDMuNyA0NGMyLjYtMTYuNi0yMC45LTE3LjEtMjYtMjYuNS0xNC0yNC45LTI4LjYtMzgtNTYuMy0zMS40IDEyLTguMyAyNC4zLTYuMyAyNC4zLTYuMyAuMy02LjYgMC0xMy40LTkuNy0yNS43IDQtMTIuOSAuMy0yMy4xIC4zLTIzLjEgMTYtOC45IDI3LjctMjUuMiAzMC00NC42IDMuNy0zMi0xOS40LTYxLjEtNTEuNC02NC44LTIyLjgtMi42LTQ1LjEgNy45LTU2LjEgMjYuNS0yMy45IDQxLjQgMS40IDczLjIgMjMuMSA4NC0xNC45LTEuNC0zNS40LTEyLjMtNDEuNC0zNS40LTYuOC0yNi41IDIuOS01MS40IDkuMi02My40IDAgMC00LjUtNi04LjMtOS4yIDAgMC0xNC4yIDAtMjUuNCA1LjUgMTIuMy0xNS43IDI2LTE0LjkgMjYtMTQuOSAwLTYuNi0uNi0xNS40LTMuNy0yMi4zLTUuNi0xMS40LTI0LjYtMTMuMy0zMi43IDIuOSAuMS0uMiAuMy0uNCAuNC0uNS01LjIgMTIuMy0xLjEgNTcuNyAxNy40IDkwLTIuNiAxLjQtOS40IDYuMy0xMy40IDEwLjMtMjIuMyAxMC01OCA2Mi4yLTU4IDYyLjItMjkuMSAxMS4xLTc5LjcgNTIuNS03Mi45IDgyLjMgLjMgMy4xIDEuNCA1LjcgMy4xIDcuNy0yLjkgMi4zLTUuNyA1LjItOC42IDguNi0xMi4zIDE0LjItNS41IDM2LjMgMTguMyAyNS4yIDE2LjMtNy40IDMwLjYtMjAuOSAzNy41LTMxLjQgMCAwLTUuNy01LjItMTYuOC00LjUgMjguNi02LjggMzUuNC05LjcgNDcuNy05LjQgOC4zIDQgOC4zLTM1LjQgOC4zLTM1LjQgMC0xNS4yLTIuMy0zMi0xMS41LTQyLjggMTIuOSAxMi42IDMwIDMzLjggMjguOSA2Mi42LS44IDE4LjktMTUuNyAyMy43LTE1LjcgMjMuNy05LjQgMTcuMS00NC42IDY4LTMxLjQgMTA5LjQgMCAwLTEwLTE1LjQtMTAuNS0yMi44LTE4IDIwLTQ4IDU0LTI1LjQgNjYuNiAyNy41IDE1LjIgMTEyLjMtOTEuNSAxMzAuMy0xNDYuOSAzNS43LTIxLjUgNTcuMi00OC44IDY2LTY3LjEgMjIuNyA0NC45IDk4LjQgOTcuNSAxMDQuNCA2MC45eiJdCiAgICB9OwogICAgZmFBd3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXdzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYzNzUiLCAiTTE4MC40IDIwM2MtLjcgMjIuNiAxMC42IDMyLjcgMTAuOSAzOS0uMSAxLjMtLjYgMi41LTEuMyAzLjZzLTEuNyAyLTIuOCAyLjZsLTEyLjggOWMtMS43IDEuMi0zLjYgMS44LTUuNiAxLjktLjQgMC04LjIgMS44LTIwLjUtMjUuNi03LjUgOS40LTE3IDE2LjktMjcuOSAyMnMtMjIuNyA3LjctMzQuNyA3LjVjLTE2LjMgLjktNjAuNC05LjItNTguMS01Ni4yLTEuNi0zOC4zIDM0LjEtNjIuMSA3MC45LTYwIDcuMSAwIDIxLjYgLjQgNDcgNi4zbDAtMTUuNmMyLjctMjYuNS0xNC43LTQ3LTQ0LjgtNDMuOS0yLjQgMC0xOS40LS41LTQ1LjggMTAuMS03LjQgMy40LTguMyAyLjgtMTAuOCAyLjgtNy40IDAtNC40LTIxLjUtMi45LTI0LjIgNS4yLTYuNCAzNS45LTE4LjQgNjUuOS0xOC4yIDIwLjEtMS44IDQwLjEgNC40IDU1LjcgMTcuMyA2LjMgNy4xIDExLjIgMTUuNCAxNC4yIDI0LjRzNC4yIDE4LjUgMy41IDI4bDAgNjkuM3pNOTQgMjM1LjRjMzIuNC0uNSA0Ni4yLTIwIDQ5LjMtMzAuNSAyLjUtMTAuMSAyLjEtMTYuNCAyLjEtMjcuNC05LjctMi4zLTIzLjYtNC45LTM5LjYtNC45LTE1LjItMS4xLTQyLjggNS42LTQxLjcgMzIuMy0xLjIgMTYuOCAxMS4xIDMxLjQgMzAgMzAuNXptMTcwLjkgMjMuMWMtNy45IC43LTExLjUtNC45LTEyLjctMTAuNEwyMDIuNCA4My40Yy0xLTIuOC0xLjYtNS42LTEuOS04LjYtLjItMS4yIC4xLTIuNCAuOC0zLjRzMS44LTEuNiAzLTEuOGMuMiAwLTIuMSAwIDIyLjIgMCA4LjgtLjkgMTEuNiA2IDEyLjYgMTAuNEwyNzQuOSAyMjAuOCAzMDguMSA4MGMuNS0zLjIgMi45LTExLjEgMTIuOC0xMC4ybDE3LjIgMGMyLjItLjIgMTEuMS0uNSAxMi43IDEwLjRMMzg0LjEgMjIyLjcgNDIxIDgwLjFjLjUtMi4yIDIuNy0xMS40IDEyLjctMTAuNGwxOS43IDBjLjktLjEgNi4yLS44IDUuMyA4LjYtLjQgMS44IDMuNC0xMC43LTUyLjggMTY5LjktMS4xIDUuNS00LjggMTEuMS0xMi43IDEwLjRsLTE4LjcgMGMtMTAuOSAxLjItMTIuNS05LjctMTIuNy0xMC43bC0zMy4yLTEzNy4xLTMyLjggMTM3Yy0uMiAxLjEtMS43IDExLjktMTIuNyAxMC43bC0xOC4zIDAgMCAwem0yNzMuNSA1LjZjLTUuOSAwLTMzLjktLjMtNTcuNC0xMi4zLTIuMy0xLTQuMy0yLjYtNS43LTQuOHMtMi4xLTQuNi0yLjEtNy4xbDAtMTAuN2MwLTguNSA2LjItNi45IDguOC01LjkgMTAgNC4xIDE2LjUgNy4xIDI4LjggOS42IDM2LjcgNy41IDUyLjgtMi4zIDU2LjctNC41IDEzLjItNy44IDE0LjItMjUuNyA1LjMtMzQuOS0xMC41LTguOC0xNS41LTkuMS01My4xLTIxLTQuNi0xLjMtNDMuNy0xMy42LTQzLjgtNTIuNC0uNi0yOC4yIDI1LTU2LjIgNjkuNS01NiAxMi43IDAgNDYuNCA0LjEgNTUuNiAxNS42IDEuNCAyLjEgMiA0LjYgMS45IDdsMCAxMC4xYzAgNC40LTEuNiA2LjctNC45IDYuNy03LjctLjktMjEuNC0xMS4yLTQ5LjItMTAuOC02LjktLjQtMzkuOSAuOS0zOC40IDI1LS40IDE5IDI2LjYgMjYuMSAyOS43IDI2LjkgMzYuNSAxMSA0OC42IDEyLjggNjMuMSAyOS42IDE3LjEgMjIuMiA3LjkgNDguMyA0LjMgNTUuNC0xOS4xIDM3LjUtNjguNCAzNC40LTY5LjMgMzQuNHptNDAuMiAxMDQuOWMtNzAgNTEuNy0xNzEuNyA3OS4yLTI1OC41IDc5LjItMTE3LjEgLjgtMjMwLjMtNDIuMy0zMTcuMy0xMjAuNy02LjUtNS45LS44LTE0IDcuMi05LjUgOTYuNSA1NS4yIDIwNS43IDg0LjIgMzE2LjkgODQuMSA4My0uNCAxNjUuMS0xNy4zIDI0MS42LTQ5LjUgMTEuOC01IDIxLjggNy44IDEwLjEgMTYuNHptMjkuMi0zMy4zYy05LTExLjUtNTkuMy01LjQtODEuOC0yLjctNi44IC44LTcuOS01LjEtMS44LTkuNSA0MC4xLTI4LjIgMTA1LjktMjAuMSAxMTMuNC0xMC42IDcuNSA5LjUtMi4xIDc1LjQtMzkuNiAxMDYuOS01LjggNC45LTExLjMgMi4zLTguNy00LjEgOC40LTIxLjMgMjcuNC02OC41IDE4LjQtODB6Il0KICAgIH07CiAgICBmYUdsaWRlRyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJnbGlkZS1nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyYTYiLCAiTTQwNy4xIDIxMS4yYy0zLjUtMS40LTExLjYtMy44LTE1LjQtMy44LTM3LjEgMC02Mi4yIDE2LjgtOTMuNSAzNC41bC0uOS0uOWM3LTQ3LjMgMjMuNS05MS45IDIzLjUtMTQwLjQgMC03MS41LTM4LjItMTAwLjYtMTA4LjQtMTAwLjYtMTE1LjEgMC0xNzMuNCAxMTMuNy0xNzMuNCAxOTguNCAwIDg3LjkgNTEuMyAxMzYuNiAxMzguNiAxMzYuNiAxMiAwIDExLTEgMTEgMy44LTE2LjkgMTI4LjktOTAuOCAxMzMuMS05MC44IDk0LjYgMC0zOS4yIDQ1LTU4LjYgNDUuNS02MS0uMy0xMi4yLTQ3LTI3LjYtNTguOS0yNy42LTMzLjkgLjEtNTIuNCA1MS4yLTUyLjQgNzkuMyAwIDUxLjkgMzIuOCA4Ny45IDg1LjUgODcuOSA3Ny40IDAgMTM0LTc3LjggMTUxLjQtMTQ1LjQgMTUuMS02MC41IDExLjItNjMuMyAxOS43LTY3LjYgMzIuMi0xNi4yIDU3LjUtMjcgOTMuOC0yNyAxNy44IDAgMzAuNSAzLjcgNTguOSA4LjQgMi45IDAgNi43LTIuOSA2LjctNS44IDAtOC0zMy40LTYwLjUtNDAuOS02My40ek0yMzEuOCAxMjYuOGMtOS4zIDQ0LjctMTguNiA4OS42LTI3LjggMTM0LjMtMi4zIDEwLjItMTMuMyA3LjgtMjIgNy44LTM4LjMgMC00OS00MS44LTQ5LTczLjEgMC00NyAxOC0xMDkuMyA2MS44LTEzMy40IDctNC4xIDE0LjgtNi43IDIyLjYtNi43IDE4LjYgMCAyMCAxMy4zIDIwIDI4LjctLjEgMTQuMy0yLjcgMjguNS01LjYgNDIuNHoiXQogICAgfTsKICAgIGZhSnNmaWRkbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianNmaWRkbGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFjYyIsICJNNTExLjEgMjM3LjVjLTQuNy0yLjYtNS43LTUuNy02LjQtMTAuOC0yLjQtMTYuNS0zLjUtMzMuNi05LjEtNDkuMS0zNS45LTEwMC0xNTQtMTQzLjQtMjQ2LjgtOTEuNi0yNy40IDE1LjItNDkgMzYuNC02NS41IDYzLjktMy4yLTEuNS01LjUtMi43LTcuOC0zLjctMzAuMS0xMi40LTU5LTEwLjEtODUuMyA5LjItMjUuNSAxOC43LTM2LjQgNDQuNS0zMi43IDc2LjQgLjQgMy0yIDcuNi00LjUgOS41LTM5LjcgMzAtNTYgNzguMS00MS45IDEyNC42IDEzLjggNDUuNiA1Ny41IDc5LjggMTA1LjYgODEuNCAzMC4zIDEgNjAuNiAuNSA5MSAuNSA4NCAwIDE2OC4xIC41IDI1Mi4xLS41IDUyLjctLjYgOTYuMS0zNi45IDEwOC4yLTg3LjMgMTEuNS00OC4xLTExLjEtOTcuMy01Ni44LTEyMi42em0yMS4xIDE1Ni45Yy0xOC4yIDIyLjQtNDIuMyAzNS4zLTcxLjMgMzUuNy01Ni45IC44LTExMy44IC4yLTE3MC43IC4yIDAgLjctMTYzIC4yLTE2My43IC4yLTQzLjktLjMtNzYuNy0xOS44LTk1LjItNjAtMTguOS00MS4yLTQtOTAuOCAzNC4yLTExNi4xIDkuMi02LjEgMTIuNS0xMS42IDEwLjEtMjMuMS01LjUtMjYuNCA0LjUtNDggMjYuNC02MyAyMy0xNS43IDQ3LjQtMTYuMSA3Mi0zLjEgMTAuMyA1LjQgMTQuNiAxMS42IDIyLjItMi41IDE0LjItMjYuNCAzNC42LTQ2LjcgNjAuNy02MS4zIDk3LjUtNTQuNCAyMjguNCA3LjYgMjMwLjIgMTMyLjcgLjEgOC4yIDIuNCAxMi40IDkuOCAxNS45IDU3LjYgMjYuOCA3NC41IDk2LjEgMzUuMSAxNDQuNXptLTg3LjgtODAuNWMtNS44IDMxLjItMzQuNiA1NS4xLTY2LjcgNTUuMS0xNyAwLTMyLjEtNi41LTQ0LjEtMTcuNy0yNy43LTI1LjctNzEuMS03NS05NS45LTkzLjQtMjAuMS0xNC45LTQyLTEyLjMtNjAuMyAzLjgtNTAgNDQuMSAxNS45IDEyMS44IDY3LjEgNzcuMiA0LjUtNCA3LjgtOS41IDEyLjctMTIuOCA4LjItNS41IDIwLjgtLjkgMTMuMiAxMC42LTE3LjQgMjYuMy00OS4zIDM4LjItNzguOSAyOS4zLTI4LjktOC43LTQ4LjgtMzYtNDguNi03MC4yIDEuMi0yMi41IDEyLjQtNDMuMSAzNS40LTU2IDIyLjYtMTIuNiA0Ni40LTEzLjEgNjcgMi41IDUwLjggMzguNSA3NS42IDgxLjcgMTA3LjMgMTAxLjIgMjQuNiAxNS4xIDU0LjMgNy40IDY4LjgtMTcuNSAyOC44LTQ5LjItMzQuNi0xMDUtNzguOS02My41LTQgMy43LTYuOSA4LjktMTEuNCAxMS43LTExIDYuOC0xNy4zLTQuMS0xMi44LTEwLjQgMjAuNy0yOC42IDUwLjUtNDAuNCA4My4zLTI4LjIgMzEuNCAxMS43IDQ5LjEgNDQuNCA0Mi44IDc4LjJ6Il0KICAgIH07CiAgICBmYUtleWJhc2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2V5YmFzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGY1IiwgIk0yODYuMiA0MTlhMTggMTggMCAxIDAgMCAzNiAxOCAxOCAwIDEgMCAwLTM2ek0zOTguMSAyNzEuNGMtOS41LTE0LjYtMzkuNC01Mi40LTg3LjMtNzMuNy02LjEtMi43LTEyLjItNS4xLTE4LjQtNy4zIDQuMS05LjkgNi0yMC42IDUuOC0zMS40cy0yLjctMjEuMy03LjItMzEuMS0xMC45LTE4LjUtMTguOS0yNS43LTE3LjQtMTIuNi0yNy42LTE2Yy0xMi40LTQuMS0yMy4zLTYtMzIuNC01LjgtLjYtMi0xLjktMTEgOS40LTM1bC0yMi45LTEzLjUtNS41IDcuNmMtOC43IDEyLjEtMTYuOSAyMy42LTI0LjMgMzQuOS0yLjctLjYtNS41LTEuMS04LjMtMS4yLTQxLjUtMi40LTM5LTIuMy00MS4xLTIuMy01MC42IDAtNTAuOCA1Mi4xLTUwLjggNDUuOWwtMi40IDM2LjdjLTEuNiAyNyAxOS44IDUwLjIgNDcuNiA1MS44bDguOSAuNUMxMDYgMjE1LjUgOTAuNCAyMjcuNSA3Ni42IDI0MS40IDE0IDMwNC43IDE0IDM3NCAxNCA0MjkuOGwwIDMzLjYgMjMuMy0yOS44YzMuMSAxMy4xIDggMjUuOCAxNC42IDM3LjYgNS44IDEwLjEgMTQuOSA5LjQgMTkuNiA3LjMgNC4yLTEuOSAxMC02LjkgMy44LTIwLjEtOC0xNi44LTEzLjMtMzQuNy0xNS44LTUzLjFsNDYuOC01OS44LTI0LjcgNzQuMWM1OC4yLTQyLjQgMTU3LjQtNjEuOCAyMzYuMi0zOC42IDM0LjIgMTAuMSA2Ny40IC43IDg0LjctMjMuOCAuNy0xIDEuMi0yLjIgMS44LTMuMiAxLjggOS40IDIuNyAxOC45IDIuOCAyOC40IDAgMjMuMy0zLjcgNTIuOS0xNC45IDgxLjYtMi41IDYuNSAxLjggMTQuNSA4LjYgMTUuNyA3LjQgMS42IDE1LjMtMy4xIDE4LjQtMTEuMSA5LjYtMjUuNSAxNC42LTU0LjYgMTQuNi04Ni4yIDAtMzguNi0xMy03Ny41LTM1LjktMTEwLjl6TTE0Mi40IDEyOC42bC0xNS43LS45LTEuNCAyMS44IDEzLjEgLjhjLS42IDYuNS0uNSAxMy4xIC4zIDE5LjZsLTIyLjQtMS4zYy0xLjYtLjEtMy4yLS41LTQuNy0xLjFzLTIuOC0xLjYtMy45LTIuOC0xLjktMi42LTIuNS00LjEtLjgtMy4xLS43LTQuN0wxMDcgMTE5YzEtMTIuMiAxMy45LTExLjMgMTMuMy0xMS4zbDI5LjEgMS43Yy0yLjggNi4yLTUuMSAxMi42LTcgMTkuMnpNMjkwLjggMzAwLjhjLTIuMSAxLjYtNC44IDIuNC03LjUgMi4ycy01LjEtMS41LTYuOS0zLjVsLTkuNy0xMS41LTM0LjQgMjdjLTEuNiAxLjMtMy43IDEuOS01LjggMS43cy00LTEuMi01LjMtMi44bC0xNS44LTE4LjZjLTEuMi0xLjYtMS43LTMuNS0xLjUtNS40czEuMy0zLjcgMi44LTQuOWwzNC42LTI3LjItMTQuMS0xNi43LTE3LjEgMTMuNWMtMS42IDEuMi0zLjUgMS44LTUuNSAxLjZzLTMuOC0xLjEtNS4xLTIuNmMwIDAtMy43LTQuNC0zLjgtNC41LTEuMi0xLjYtMS43LTMuNS0xLjUtNS41czEuMy0zLjcgMi44LTQuOUwyMTQgMjI1LjJzLTE4LjUtMjItMTguNi0yMi4xYy0uOC0xLTEuMy0yLjEtMS43LTMuM3MtLjQtMi41LS4zLTMuNyAuNi0yLjQgMS4yLTMuNSAxLjUtMiAyLjUtMi44YzIuMS0xLjcgNC44LTIuNCA3LjQtMi4yczUuMSAxLjUgNi45IDMuNmw4MS4xIDk2LjNjLjggMSAxLjMgMi4xIDEuNyAzLjNzLjQgMi41IC4zIDMuNy0uNiAyLjUtMS4yIDMuNS0xLjUgMi4xLTIuNSAyLjh6TTE4Ny40IDQxOWExOCAxOCAwIDEgMCAwIDM2IDE4IDE4IDAgMSAwIDAtMzZ6Il0KICAgIH07CiAgICBmYUx1bW9uRHJvcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsdW1vbi1kcm9wIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3ZTMiLCAiTTQ4MCAzMmM1MyAwIDk2IDQzIDk2IDk2bDAgMjI0YzAgNTMtNDMgOTYtOTYgOTZMOTYgNDQ4Yy01MyAwLTk2LTQzLTk2LTk2TDAgMTI4QzAgNzUgNDMgMzIgOTYgMzJsMzg0IDB6TTMwMi40IDExNC43Yy05LjgtMTYuNC0yMC41LTE2LjQtMjkuNiAwbC02OC45IDExNGMtMTAuNyAxNS42LTE2LjQgMzIuOC0xNi40IDUyLjUgMCA1MC45IDQ0LjMgOTQuMyAxMDAuMSA5NC4zIDU1IDAgMTAwLjktNDMuNSAxMDAuOS05NC4zIDAtMTkuNy02LjYtMzcuOC0xNy4yLTUyLjVsLTY4LjktMTE0eiJdCiAgICB9OwogICAgZmFXZWVibHkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid2VlYmx5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1Y2MiLCAiTTQyNS4xIDY1LjhjLTM5LjkgMC03My4zIDI1LjctODMuNyA2NC4zLTE4LjItNTguMS02NS41LTY0LjMtODUtNjQuMy0xOS44IDAtNjYuOCA2LjMtODUuMyA2NC4zLTEwLjQtMzguNi00My40LTY0LjMtODMuNy02NC4zLTQ5IDAtODcuNSAzMy45LTg3LjUgNzcuMiAwIDI5IDQuMiAzMy4zIDc3LjIgMjMzLjUgMjIuNCA2MC42IDY3LjggNjkuNCA5Mi43IDY5LjQgMzkuMiAwIDcwLTE5LjUgODUuOS01NCAxNS45IDM0LjggNDYuNyA1NC4zIDg1LjkgNTQuMyAyNSAwIDcwLjQtOS4xIDkyLjctNjkuNyA3Ni42LTIwOC42IDc3LjUtMjA1LjYgNzcuNS0yMjcuMiAuNi00OC4zLTM2LTgzLjUtODYuOS04My41em0yNi4zIDExNC44TDM4NS45IDM1Ny4xYy03LjkgMjEuNS0yMS4yIDM3LjItNDYuMiAzNy4yLTIzLjQgMC0zNy40LTEyLjQtNDQtMzMuOWwtMzkuMy0xMTcuNC0xIDAtMzkuMyAxMTcuNGMtNyAyMS41LTIwLjkgMzMuNi00NCAzMy42LTI1IDAtMzguMy0xNS43LTQ2LjItMzcuMkw2MC45IDE4MS42Yy01LjQtMTQuOC03LjktMjMuOS03LjktMzQuNSAwLTE2LjMgMTUuOC0yOS40IDM4LjMtMjkuNCAxOC43IDAgMzIgMTEuOCAzNi4xIDI5LjFsNDQgMTM5LjggMSAwIDQ0LjctMTM2LjhjNi0xOS43IDE2LjUtMzIuMSAzOS0zMi4xczMyLjkgMTIuMSAzOSAzMi4xbDQ0LjcgMTM2LjggMSAwIDQ0LTEzOS44YzQuMS0xNy4yIDE3LjQtMjkuMSAzNi4xLTI5LjEgMjIuMiAwIDM4LjMgMTMuMyAzOC4zIDM1LjctLjMgNy45LTQuMSAxNi03LjYgMjcuMnoiXQogICAgfTsKICAgIGZhRG9ja2VyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRvY2tlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzk1IiwgIk0zNDkuOSAyMzYuM2wtNjYuMSAwIDAtNTkuNCA2Ni4xIDAgMCA1OS40em0wLTIwNC4zbC02Ni4xIDAgMCA2MC43IDY2LjEgMCAwLTYwLjd6bTc4LjIgMTQ0LjhsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHpNMjcxLjggMTA0LjdsLTY2LjEgMCAwIDYwLjEgNjYuMSAwIDAtNjAuMXptNzguMSAwbC02Ni4xIDAgMCA2MC4xIDY2LjEgMCAwLTYwLjF6bTI3Ni44IDEwMGMtMTQuNC05LjctNDcuNi0xMy4yLTczLjEtOC40LTMuMy0yNC0xNi43LTQ0LjktNDEuMS02My43bC0xNC05LjMtOS4zIDE0Yy0xOC40IDI3LjgtMjMuNCA3My42LTMuNyAxMDMuOC04LjcgNC43LTI1LjggMTEuMS00OC40IDEwLjdsLTQzNC43IDBjLTguNyA1MC44IDUuOCAxMTYuOCA0NCAxNjIuMSAzNy4xIDQzLjkgOTIuNyA2Ni4yIDE2NS40IDY2LjIgMTU3LjQgMCAyNzMuOS03Mi41IDMyOC40LTIwNC4yIDIxLjQgLjQgNjcuNiAuMSA5MS4zLTQ1LjIgMS41LTIuNSA2LjYtMTMuMiA4LjUtMTcuMWwtMTMuMy04Ljl6TTExNS42IDE3Ni44bC02NiAwIDAgNTkuNCA2Ni4xIDAgMC01OS40LS4xIDB6bTc4LjEgMGwtNjYuMSAwIDAgNTkuNCA2Ni4xIDAgMC01OS40em03OC4xIDBsLTY2LjEgMCAwIDU5LjQgNjYuMSAwIDAtNTkuNHptLTc4LjEtNzIuMWwtNjYuMSAwIDAgNjAuMSA2Ni4xIDAgMC02MC4xeiJdCiAgICB9OwogICAgZmFNYWdlbnRvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1hZ2VudG8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNjNCIsICJNNDQ1LjkgMTI3LjlsMCAyNTYuMS02My40IDM2LjUgMC0yNTUuOC0xNTguNS05MS42LTE1OC42IDkxLjYgLjQgMjU1LjktNjMuMy0zNi42IDAtMjU1LjkgMjIxLjktMTI4LjEgMjIxLjUgMTI3Ljl6TTI1NS44IDQyMC41bC0zMS42IDE4LjQtMzEuOC0xOC4yIDAtMjU2LTYzLjMgMzYuNiAuMSAyNTUuOSA5NC45IDU0LjkgOTUuMS01NC45IDAtMjU2LTYzLjQtMzYuNiAwIDI1NS45eiJdCiAgICB9OwogICAgZmFHaXRBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0LWFsdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODQxIiwgIk00MzkuNiAyMzYuMUwyNDQgNDAuNUMyMzguNiAzNSAyMzEuMiAzMiAyMjMuNiAzMnMtMTUgMy0yMC40IDguNGwtNDAuNyA0MC42IDUxLjUgNTEuNWMyNy4xLTkuMSA1Mi43IDE2LjggNDMuNCA0My43bDQ5LjcgNDkuN2MzNC4yLTExLjggNjEuMiAzMSAzNS41IDU2LjctMjYuNSAyNi41LTcwLjItMi45LTU2LTM3LjNsLTQ2LjMtNDYuMyAwIDEyMS45YzI1LjMgMTIuNSAyMi4zIDQxLjggOS4xIDU1LTYuNCA2LjQtMTUuMiAxMC4xLTI0LjMgMTAuMXMtMTcuOC0zLjYtMjQuMy0xMC4xYy0xNy42LTE3LjYtMTEuMS00Ni45IDExLjItNTZsMC0xMjNjLTIwLjgtOC41LTI0LjYtMzAuNy0xOC42LTQ1TDE0Mi42IDEwMSA4LjUgMjM1LjFDMyAyNDAuNiAwIDI0Ny45IDAgMjU1LjVzMyAxNSA4LjUgMjAuNEwyMDQuMSA0NzEuNmM1LjQgNS40IDEyLjcgOC40IDIwLjQgOC40czE1LTMgMjAuNC04LjRMNDM5LjYgMjc2LjljNS40LTUuNCA4LjQtMTIuOCA4LjQtMjAuNHMtMy0xNS04LjQtMjAuNHoiXQogICAgfTsKICAgIGZhRmlyZWZveEJyb3dzZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZmlyZWZveC1icm93c2VyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMDciLCAiTTEzMC4yIDEyNy41bDAgMHptMzUxLjQgNDUuNGMtMTAuNi0yNS41LTMyLjEtNTMtNDguOS02MS43IDEzLjcgMjYuOSAyMS43IDUzLjkgMjQuNyA3NCAwIC4xIDAgLjMgLjEgLjQtMjcuNi02OC44LTc0LjQtOTYuNS0xMTIuNi0xNTYuOC0xNS0yMy43LTEwLjktMjUuMi0xMy4xLTI0LjdsLS4xIC4xYy00Ni43IDI2LTc1LjMgNzguNC04Mi42IDEyMi43LTE2LjYgLjktMzIuOSA1LTQ3LjkgMTIuMS0xLjQgLjYtMi41IDEuNy0zLjEgM3MtLjkgMi44LS42IDQuM2MuMiAuOCAuNiAxLjYgMS4xIDIuM3MxLjIgMS4zIDEuOSAxLjcgMS42IC43IDIuNCAuOCAxLjcgMCAyLjUtLjNsLjUtLjJjMTUuNS03LjMgMzIuNC0xMS4yIDQ5LjUtMTEuMyA2Mi44LS42IDk3LjIgNDQgMTA3LjYgNjIuMy0xMy05LjItMzYuNC0xOC4yLTU4LjgtMTQuMyA4Ny43IDQzLjkgNjQuMiAxOTQuNS01Ny40IDE4OS4yLTU5LjUtMi42LTk3LjEtNTEtMTAwLjUtOTAuOCAwIDAgMTEuMi00MS45IDgwLjYtNDEuOSA3LjUgMCAyOC45LTIwLjkgMjkuMy0yNy0uMS0yLTQyLjUtMTguOS01OS4xLTM1LjItOC44LTguNy0xMy4xLTEyLjktMTYuOC0xNi4xLTItMS43LTQuMS0zLjMtNi4zLTQuOC01LjYtMTkuNS01LjgtNDAtLjctNTkuNi0yNS4xIDExLjQtNDQuNiAyOS40LTU4LjcgNDUuNGwtLjEgMGMtOS43LTEyLjItOS01Mi42LTguNC02MS4xLS4xLS41LTcuMiAzLjctOC4yIDQuMy04LjYgNi4xLTE2LjUgMTIuOS0yMy44IDIwLjQtMTYuMyAxNi42LTQ0LjEgNTAuMi01NS41IDEwMS4yLTQuNSAyMC40LTYuOCA0NC40LTYuOCA1Mi4zIDAgMTM0LjcgMTA5LjIgMjQzLjkgMjQzLjkgMjQzLjkgMTIwLjYgMCAyMjMtODcuMiAyNDAuNC0yMDIuNiAxMS42LTc2LjctMTQuNy0xMzEuMS0xNC43LTEzMnoiXQogICAgfTsKICAgIGZhQ2xvdWRzbWl0aCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZHNtaXRoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzODQiLCAiTTUxMiAyMjcuNkw1MTIgMjg0LjUgMjg0LjQgNTEyIDIyNy42IDUxMiAwIDI4NC40IDAgMjI3LjYgMjI3LjYgMCAyODQuNSAwIDUxMiAyMjcuNnptLTI1NiAxNjJjMTcuOCAuNSAzNS42LTIuNiA1Mi4yLTkuMXMzMS44LTE2LjIgNDQuNi0yOC43IDIzLTI3LjMgMjkuOS00My44IDEwLjUtMzQuMSAxMC41LTUyLTMuNi0zNS41LTEwLjUtNTItMTcuMS0zMS4zLTI5LjktNDMuOC0yOC0yMi4yLTQ0LjYtMjguNy0zNC40LTkuNi01Mi4yLTkuMWMtMTcuOC0uNS0zNS42IDIuNi01Mi4yIDkuMXMtMzEuOCAxNi4zLTQ0LjYgMjguNy0yMyAyNy4zLTI5LjkgNDMuOC0xMC41IDM0LjEtMTAuNSA1MiAzLjYgMzUuNSAxMC41IDUyIDE3LjEgMzEuMyAyOS45IDQzLjggMjggMjIuMiA0NC42IDI4LjcgMzQuNCA5LjYgNTIuMiA5LjF6Il0KICAgIH07CiAgICBmYVdpemFyZHNPZlRoZUNvYXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndpemFyZHMtb2YtdGhlLWNvYXN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY3MzAiLCAiTTIxOS4yIDM0NS43Yy0xLjkgMS40LTExLjEgOC40LS4zIDIzLjYgNC42IDYuNCAxNC4xIDEyLjggMjEuNyA2LjYgNi41LTQuOSA3LjQtMTIuOSAuMy0yMy01LjUtNy44LTE0LjMtMTIuOS0yMS43LTcuMXptMzM2LjggNzUuOWMtLjMgMS43LS42IDEuNyAuOCAwIDIuMS00LjIgNC4yLTEwLjIgNS0xOS45IDMuMS0zOC41LTQwLjMtNzEuNS0xMDEuMy03OC01NC43LTYtMTI0LjQgOS4yLTE4OC44IDYwLjVsLS4zIDEuNmMyLjYgNSA1IDEwLjcgMy40IDIxLjJsLjggLjNjNjMuOS01OC40IDEzMS4yLTc3LjIgMTg0LjQtNzMuOCA1OC40IDMuNyAxMDAgMzQgMTAwIDY4LjEgMCAxMC0yLjYgMTUuNy0zLjkgMjAuMnpNMzkyLjMgMjQwLjRjLjggNy4xIDQuMiAxMC4yIDkuMiAxMC41IDUuNSAuMyA5LjQtMi42IDEwLjUtNi42IC44LTMuNCAyLjEtMjkuOCAyLjEtMjkuOFM0MDIuOCAyMjEgMzk5LjEgMjI1Yy0zLjcgMy43LTcuMyA4LjQtNi44IDE1LjV6bS01MC0xNTEuMWMtMjA0LjUgMC0zMjkuMiAxMzcuNS0zNDEuNSAxNTEuOS0xIC41LTEuMyAuOCAuOCAxLjMgNjAuNSAxNi41IDE1NS44IDgxLjIgMTk2LjEgMjAyLjJsMSAuM2M1NS4yLTY5LjkgMTQwLjktMTI4LjEgMjM3LTEyOC4xIDgwLjkgMCAxMzAuMiA0Mi4yIDEzMC4yIDgwLjQgMCAxOC4zLTYuNiAzMy41LTIyLjMgNDYuMyAwIDEtLjIgLjggLjggLjggMTQuNy0xMC43IDI3LjUtMjguOCAyNy41LTQ4LjIgMC0yMi44LTEyLjEtMzguMi0xMi4xLTM4LjIgNy4xIDcuMSAxMC43IDE2LjIgMTAuNyAxNi4yIDUuOC00MC45IDI3LTYyLjMgMjctNjIuMy0yLjQtOS43LTYuOC0xNy44LTYuOC0xNy44IDcuNiA4LjEgMTQuNCAyNy41IDE0LjQgNDEuNCAwIDEwLjUtMy40IDIyLjgtMTIuNiAzMS45bC4zIC41YzguMS01IDE2LjUtMTYuOCAxNi41LTM4IDAtMTUuNy00LjctMjUuOS00LjctMjUuOSA1LjgtNS4yIDExLjMtOS4yIDE2LTExLjggLjggMy40IDIuMSA5LjcgMi40IDE0LjkgMCAxIC44IDEuOCAxIDAgLjgtNS44LS4zLTE2LjItLjMtMTYuNSA2LTMuMSA5LjctNC41IDkuNy00LjUtMTUuNy0xMTAuMy0xNDQtMTk2LjktMjkxLjItMTk2Ljl6TTI0MyAzNzguOWMtMTEuMSA5LTI0LjIgNC4xLTMwLjYtNC4yLTcuNC05LjYtNi44LTI0LjEgNC4yLTMyLjUgMTQuOC0xMS40IDI3LjEtLjUgMzEuMiA1LjUgLjMgLjQgMTIuMSAxNi42LTQuNyAzMS4yem0yLjEtMTM2LjRsOS40LTE3LjggMTEuOCA3MS0xMi42IDYtMjQuNi0yOC44IDE0LjEtMjYuNyAzLjcgNC40LTEuOC04LjF6bTE4LjYgMTE3LjZsLS4zLS4zYzItNC4xLTIuNS02LjYtMTcuNS0zMS43LTEuMy0yLjQtMy4xLTIuOS00LjQtMi42bC0uMy0uNWM3LjktNS44IDE1LjQtMTAuMiAyNS40LTE1LjdsLjUgLjNjMS4zIDEuOCAyLjEgMi45IDMuNCA0LjdsLS4zIC41Yy0xLS4zLTIuNC0uOC01LjIgLjMtMi4xIC44LTcuOSAzLjctMTIuMyA3LjZsMCAxLjNjMS42IDIuNCAzLjkgNi42IDUuOCA5LjdsLjMgMGMxMC02LjMgNy42LTQuNSAxMS41LTcuOWwuMyAwYy41IDEuOCAuNSAxLjggMS44IDUuNWwtLjMgLjNjLTMuMSAuNi00LjcgLjMtMTEuNSA1LjVsMCAuM2M5LjUgMTcgMTEgMTYuOCAxMi42IDE2bC4zIC4zYy0yLjMgMS42LTYuMyA0LjItOS43IDYuNnpNMzE5IDMyNy42Yy0zLjEgMS42LTYgMi45LTEwIDVsLS4zLS4zYzEuMy0yLjYgMS4yLTIuNy0xMS44LTMyLjVsLS4zLS4zYy0uMiAwLTguOSAzLjctMTAgNy4zbC0uNSAwLTEtNS44IC4zLS41YzcuMy00LjYgMjUuNS0xMS42IDI3LjgtMTIuNmwuNSAuMyAzLjEgNS0uMyAuNWMtMy41LTEuOC03LjQgLjgtMTIuMyAyLjZsMCAuM2MxMi4zIDMyIDEyLjcgMzAuNiAxNC43IDMwLjZsMCAuMnptNDQuOC0xNi41Yy00LjIgMS01LjIgMS4zLTkuNyAyLjlsLS4zLS4zIC41LTQuNWMtMS0zLjQtMy4xLTExLjUtMy43LTEzLjZsLS4zLS4zYy0zLjQgLjgtOC45IDIuNi0xMi44IDMuOWwtLjMgLjNjLjggMi42IDMuMSA5LjkgNC4yIDEzLjkgLjggMi40IDEuOCAyLjkgMi45IDMuMWwwIC41Yy0zLjcgMS03LjEgMi42LTEwLjIgMy45bC0uMy0uM2MxLTEuMyAxLTIuOSAuMy01LTEtMy4xLTguMS0yMy44LTkuMi0yNy4yLS41LTEuOC0xLjYtMy4xLTIuNi0zLjFsMC0uNWMzLjEtMSA2LTIuMSAxMC43LTMuNGwuMyAuMy0uMyA0LjdjMS4zIDMuOSAyLjQgNy42IDMuMSA5LjdsLjMgMGMzLjktMS4zIDkuNC0yLjkgMTIuOC0zLjlsLjMtLjMtMi42LTkuNGMtLjUtMS44LTEtMy40LTIuNi0zLjlsMC0uM2M0LjQtMSA3LjMtMS44IDEwLjctMi40bC4zIC4zYy0xIDEuMy0xIDIuOS0uNSA0LjQgMS42IDYuMyA0LjcgMjAuNCA2LjMgMjYuNSAuNSAyLjYgMS44IDMuNCAyLjYgMy45em0zMi4yLTYuOGwtLjMgLjNjLTQuNyAuNS0xNC4xIDIuNC0yMi41IDQuMmwtLjMtLjMgLjgtNC4yYy0xLjYtNy45LTMuNC0xOC42LTUtMjYuMi0uMy0xLjgtLjgtMi45LTIuNi0zLjdsLjgtLjVjOS4yLTEuNiAyMC4yLTIuNCAyNC45LTIuNmwuMyAuM2MuNSAyLjQgLjggMy4xIDEuNiA1LjVsLS4zIC4zYy0xLjEtMS4xLTMuMy0zLjItMTYuMi0uOGwtLjMgLjNjLjMgMS42IDEgNi42IDEuNiA5LjlsLjMgLjNjOS41LTEuNyA0LjgtLjEgMTAuNy0yLjRsLjMgMGMwIDEuNi0uMyAxLjgtLjMgNS4ybC0uMyAwYy00LjgtMS0yLjItLjktMTAuMiAwbC0uMyAuM2MuMyAyLjEgMS42IDkuNCAyLjEgMTIuNmwuMyAuM2MxLjIgLjQgMTQuMi0uNiAxNi4yLTQuN2wuMyAwYy0uNSAyLjQtMSA0LjItMS42IDZ6bTEwLjctNDQuNWMtNC41IDIuNC04LjEgMi45LTExIDIuOS0uMiAwLTExLjQgMS4xLTE3LjUtMTAtNi43LTEwLjgtMS0yNS4yIDUuNS0zMS43IDguOC04LjEgMjMuNC0xMC4xIDI4LjUtMTcgOC0xMC4zLTEzLTIyLjMtMjkuNi01LjhsLTIuNi0yLjkgNS4yLTE2LjJjMjUuNi0xLjYgNDUuMi0zIDUwIDE2LjIgLjggMy4xIDAgOS40LS4zIDEyLjEgMCAyLjYtMS44IDE4LjgtMi4xIDIzLS41IDQuMi0uOCAxOC4zLS44IDIwLjcgLjMgMi40IC41IDQuMiAxLjYgNS41IDEuNiAxLjggNS44IDEuOCA1LjggMS44bC0uOCA0LjdjLTExLjgtMS4xLTEwLjMtLjYtMjAuNC0xLTMuMi01LjEtMi4yLTMuMy00LjItNy45IDAgMC00LjIgMy45LTcuMyA1LjV6TTQ0My45IDI4MWMtNi40LTEwLjYtMTkuOC03LjItMjEuNyA1LjUtMi42IDE3LjEgMTQuMyAxOS44IDIwLjcgMTAuMmwuMyAuM2MtLjUgMS44LTEuOCA2LTEuOCA2LjNsLS41IC41Yy0xMC4zIDYuOS0yOC41LTIuNS0yNS43LTE4LjYgMS45LTEwLjkgMTQuNC0xOC45IDI4LjgtOS45bC4zIC41YzAgMS4xLS4zIDMuNC0uMyA1LjN6bTUuOC04Ny43bDAtNi42Yy43IDAgMTkuNiAzLjMgMjcuOCA3LjNsLTEuNiAxNy41czEwLjItOS40IDE1LjQtMTAuN2M1LjItMS42IDE0LjkgNy4zIDE0LjkgNy4zbC0xMS4zIDExLjNjLTEyLjEtNi40LTE5LjYtLjEtMjAuNyAuOC01LjMgMzguNy04LjYgNDIuMiA0LjQgNDYuMWwtLjUgNC43Yy0xNy42LTQuMy0xOC41LTQuNS0zNi45LTcuM2wuOC00LjdjNy4zIDAgNy41LTUuMyA3LjYtNi44IDAgMCA1LTUzLjIgNS01NS4zIDAtMi45LTUtMy43LTUtMy43em0xMSAxMTQuNGMtOC4xLTIuMS0xNC4xLTExLTEwLjctMjAuNyAzLjEtOS40IDEyLjMtMTIuMyAxOC45LTEwLjIgOS4yIDIuNiAxMi44IDExLjggMTAuNyAxOS40LTIuNiA4LjktOS40IDEzLjktMTguOSAxMS41em00Mi4yIDkuN2MtMi40LS41LTcuMS0yLjQtOC42LTIuOWwwLS4zIDEuNi0xLjhjLjYtOC4yIC42LTcuMyAuMy03LjYtNC44LTEuOC02LjctMi40LTcuMS0yLjQtMS4zIDEuOC0yLjkgNC41LTMuNyA1LjVsLS44IDMuNCAwIC4zYy0xLjMtLjMtMy45LTEuMy02LTEuNmwwLS4zIDIuNi0xLjhjMy40LTQuNyAxMC0xNC4xIDEzLjktMjAuMmwwLTIuMSAuNS0uM2MyLjEgLjggNS41IDIuMSA3LjYgMi45IC41IC41IC4yLTEuOS0xIDI1LjEtLjIgMS44IDAgMi42IC44IDMuOXptLTQuNy04OS44YzExLjMtMTguMyAzMC44LTE2LjIgMzQtMy40bDcuNi0yNi4yYzIuMy02LjItMi44LTkuOS00LjUtMTEuM2wxLjgtMy43YzEyLjIgMTAuNCAxNi40IDE0IDIyLjUgMjAuNC0yNS45IDczLjEtMzAuOCA4MC44LTI0LjYgODQuM2wtMS44IDQuNGMtNi40LTMuMy04LjktNC40LTE3LjgtOC42bDIuMS02LjhjLS4zLS4zLTMuOSAzLjktOS43IDMuNy0xOS4xLTEuMy0yMi45LTMxLjctOS43LTUyLjl6bTI5LjMgNzkuM2MwLTUuNy02LjMtNy45LTcuOS01LjItMS4zIDIuMSAxIDUgMi45IDguNCAxLjYgMi42IDIuNiA2LjMgMSA5LjQtMi42IDYuMy0xMi40IDUuMy0xNS40LS44IDAtLjctLjMgLjEgMS44LTQuN2wuOC0uM2MtLjYgNS43IDYuMSA5LjYgOC40IDUgMS0yLjEtLjUtNS41LTIuMS04LjQtMS42LTIuNi0zLjctNi4zLTEuOC05LjcgMi43LTUuMSAxMS4zLTQuNSAxNC43IDIuNGwwIC41LTIuNCAzLjR6bTIxLjIgMTMuNGMtMi0zLjMtLjktMi4xLTQuNS00LjdsLS4zIDBjLTIuNCA0LjItNS44IDEwLjUtOC42IDE2LjItMS4zIDIuNC0xIDMuNC0uOCAzLjlsLS4zIC4zLTUuOC00LjQgLjMtLjMgMi4xLTEuM2MzLjEtNS44IDYuNi0xMi4xIDkuMi0xN2wwLS4zYy0yLjYtMi0xLjItMS41LTYtMS44bDAtLjMgMy4xLTMuNCAuMyAwYzMuNyAyLjQgMTAgNi44IDEyLjMgOC45bC4zIC4zLTEuMyAzLjl6TTU3NS44IDI3NmwtMi45LTIuOWMuOC0yLjQgMS44LTUgMi4xLTcuNiAuNy05LjctMTEuNS0xMS44LTExLjUtNSAwIDUgNy45IDE5LjQgNy45IDI3LjggMCAxMC4yLTUuOCAxNS43LTEzLjkgMTYuNS04LjQgLjgtMjAuMi0xMC41LTIwLjItMTAuNWw1LTE0LjQgMi45IDIuMWMtMyAxNy44IDE3LjcgMjAuNCAxMy4zIDUuMi0xLjEtNC0xOC43LTM0LjIgMi4xLTM4LjIgMTMuNi0yLjQgMjMgMTYuNSAyMyAxNi41TDU3NS44IDI3NnptMzUuNi0xMC4yYy0xMS0zMC40LTYwLjUtMTI3LjUtMTkyLTEyOS42LTUzLjQtMS05NC4zIDE1LjQtMTMyLjggMzhsODUuNi05LjItOTEuNCAyMC43IDI1LjEgMTkuNi0zLjktMTYuNWM3LjUtMS43IDM5LjEtOC41IDY2LjgtOC45bC0yMi4zIDgwLjRjMTMuNi0uNyAxOS05IDE5LjYtMjIuOGw1LTEgLjMgMjYuN2MtMjIuNSAzLjItMzcuMyA2LjctNDkuNSA5LjlsMTMuMS00My4yLTYxLjUtMzYuNyAyLjQgOC4xIDEwLjIgNWM2LjMgMTguNiAxOS40IDU2LjYgMjAuNCA1OC43IDIgNC4zIDMuMiA1LjggMTIgNC41bDEuMSA1Yy0xNi4xIDQuOS0yMy43IDcuNi0zOSAxNC40bC0yLjQtNC43YzQuNC0yLjkgOC43LTMuOSA1LjUtMTIuOC0yMy43LTYyLjUtMjEuNS01OC4xLTIyLjgtNTkuNGwyLjQtNC40IDMzLjUgNjcuM2MtMy44LTExLjkgMS43IDEuNy0zMy03OC44bC00MS45IDg4LjUgNC43LTEzLjktMzUuOS00Mi4yIDI3LjggOTMuNS0xMS44IDguNGMtMTExLjktMTAxLjctMTA1LjgtOTguNC0xMTMuNy05OC43LTUuNS0uMy0xMy42IDUuNS0xMy42IDUuNWwtNS02YzMwLjYtMjMuNSAzMS42LTI0LjMgNTguNC00Mi43bDQuMiA3LjFzLTUuOCA0LjItNy45IDcuMWMtNS45IDkuMyAxLjcgMTMuMyA2MS44IDc1LjdsLTE4LjgtNTguOSAzOS44LTEwLjIgMjUuNyAzMC42IDQuNC0xMi4zLTUtMjQuNiAxMy4xLTMuNCAuNSAzLjEgMy43LTEwLjUtOTQuMyAyOS4zIDExLjMtNS0xMy42LTQyLjQgMTcuMy05LjIgMzAuMSAzNi4xIDI4LjUtMTMuMWMtMS40LTcuNS0yLjUtMTQuNS00LjctMTkuNmwxNy4zIDEzLjkgNC43LTIuMS01OS4yLTQyLjcgMjMuMSAxMS41YzE5LTYuMSAyNS4yLTcuNSAzMi4yLTkuN2wyLjYgMTFjLTEyLjYgMTIuNiAxLjQgMTYuOCA2LjUgMTkuNGwtMTMuNi02MSAxMiAyOC4zYzQuMi0xLjMgNy4zLTIuMSA3LjMtMi4xbDIuNiA4LjZzLTMuMSAxLTYuMyAyLjFsOC45IDIxIDMzLjgtNjUuNy0yMC43IDYxYzQyLjQtMjQuMSA4MS40LTM2LjcgMTMyLTM1LjkgNjcgMSAxNjcuMyA0MC44IDE5OS44IDEzOS44IC44IDIuMSAwIDIuNi0uOCAuM3ptLTQwOC0xMTMuNHMxLjgtLjUgNC4yLTEuM2w5LjQgNy42Yy0uNCAwLTMuNC0uMy0xMS4zIDIuNGwtMi40LTguNnptMTQzLjggMzguNWMtMS42LS42LTI2LjUtNC44LTMzLjMgMjAuN2wyMS43IDE3IDExLjUtMzcuN3pNMzE4LjQgNjcuMWMtNTguNCAwLTEwNi4xIDEyLTExNSAxNC40bDAgLjhjOC40IDIuMSAxNC40IDQuMiAyMS4yIDExLjhsMS42IC4zYzYuNi0xLjggNDktMTMuOSAxMTAuMi0xMy45IDE4MC4yIDAgMzAxLjcgMTE2LjggMzAxLjcgMjIzLjRsMCAxMGMwIDEuMyAuOCAyLjYgMS4xIC41IC41LTIuMSAuOC04LjYgLjgtMTkuNiAuMy04My44LTk2LjYtMjI3LjYtMzIxLjYtMjI3LjZ6TTUyOS41IDIzNi44YzEuMy01LjggMC0xMi4zLTcuMy0xMy4xLTkuNi0xLjEtMTYuMSAyMy44LTE3IDMzLjUtLjggNS41LTEuMyAxNC45IDYgMTQuOSA0LjcgMCA5LjctLjkgMTguMy0zNS40ek00NjggMjc5LjdjLTIuNi0uOC05LjQtLjgtMTIuNiAxMC41LTEuOCA2LjggLjUgMTMuNCA2IDE0LjcgMy43IDEuMSA4LjkgLjUgMTEuOC0xMC43IDIuNi05LjktMS44LTEzLjYtNS4yLTE0LjR6bTIzIDIxYzEuOCAuNSAzLjEgMSA1LjggMS44IDAtMS44IC41LTguNCAuOC0xMi4xLTEgMS4zLTUuNSA4LjEtNi42IDEwbDAgLjN6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc05kID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyZWF0aXZlLWNvbW1vbnMtbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlYiIsICJNMjU1LjYgOEMzOTcuNCA4IDUwNCAxMTguMSA1MDQgMjU2IDUwNCA0MDMuMSAzODUuNSA1MDQgMjU1LjYgNTA0IDEyMS42IDUwNCA4IDM5NC41IDggMjU2IDggMTIzLjEgMTEyLjcgOCAyNTUuNiA4em0uOCA0NC43Yy0xMTguMiAwLTIwMy43IDk3LjktMjAzLjcgMjAzLjMgMCAxMDkuOCA5MS4yIDIwMi44IDIwMy43IDIwMi44IDEwMy4yIDAgMjAyLjgtODEuMSAyMDIuOC0yMDIuOCAuMS0xMTMuOC05MC4yLTIwMy4zLTIwMi44LTIwMy4zem05NCAxNDQuM2wwIDQyLjUtMTgwLjMgMCAwLTQyLjUgMTgwLjMgMHptMCA3OS44bDAgNDIuNS0xODAuMyAwIDAtNDIuNSAxODAuMyAweiJdCiAgICB9OwogICAgZmFVc3BzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzcHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlMSIsICJNNDI4LjMgMjQxLjdjMjUuOC00MS4zIDE1LjItNDguOC0xMS43LTQ4LjhsLTI3IDBjLS4xIDAtMS41LTEuNC0xMC45IDgtMTEuMiA1LjYtMzcuOSA2LjMtMzcuOSA4LjcgMCA0LjUgNzAuMy0zLjEgODguMSAwIDkuNSAxLjUtMS41IDIwLjQtNC40IDMyLS41IDQuNSAyLjQgMi4zIDMuOCAuMXpNMzE2LjIgMjY0LjNjNjQtMjEuMyA5Ny4zLTIzLjkgMTAyLTI2LjIgNC40LTIuOS00LjQtNi42LTI2LjItNS44LTUxLjcgMi4yLTEzNy42IDM3LjEtMTcyLjYgNTMuOWwtMzAuNy05My4zIDE5Ni42IDBjLTIuNy0yOC4yLTE1Mi45LTIyLjYtMzM3LjktMjIuNkwtNSA0MTUuOGMxOTYuNC05Ny4zIDI1OC45LTEzMC4zIDMyMS4yLTE1MS41ek02Mi43IDk2YzI1My4zIDUzLjcgMzMwIDY1LjcgMzMyLjEgODUuMiAzNi40IDAgNDUuOSAwIDUyLjQgNi42IDIxLjEgMTkuNy0xNC42IDY3LjctMTQuNiA2Ny43LTQuNCAyLjktNDA2LjQgMTYwLjItNDA2LjQgMTYwLjJMNDQ5LjMgNDE1LjcgNTE3IDk2IDYyLjcgOTZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUxldHRlcmJveGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxldHRlcmJveGQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYyZSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMTA1LjEgMTg3QzY2LjQgMTg3IDM1IDIxOC4zIDM1IDI1N3MzMS40IDcwIDcwLjEgNzBjMjQuOCAwIDQ2LjUtMTIuOCA1OS0zMi4ybC41LS43LS40LS42Yy02LjUtMTAuNi0xMC4yLTIzLjEtMTAuMi0zNi41IDAtMTMuNiAzLjktMjYuMyAxMC42LTM3LjEtMTIuNC0xOS44LTM0LjQtMzIuOS01OS41LTMyLjl6TTIyNCAxODdjLTI0LjggMC00Ni41IDEyLjgtNTkgMzIuMmwtLjUgLjcgLjQgLjZjNi41IDEwLjYgMTAuMiAyMy4xIDEwLjIgMzYuNSAwIDEzLjYtMy45IDI2LjMtMTAuNiAzNy4xIDEyLjQgMTkuNyAzNC40IDMyLjkgNTkuNSAzMi45IDI0LjggMCA0Ni41LTEyLjggNTktMzIuMmwuNS0uNy0uNC0uNmMtNi41LTEwLjYtMTAuMi0yMy4xLTEwLjItMzYuNSAwLTEzLjYgMy45LTI2LjMgMTAuNi0zNy4xLTEyLjQtMTkuNy0zNC40LTMyLjktNTkuNS0zMi45em0xMTguOSAwYy0yNC44IDAtNDYuNSAxMi44LTU5IDMyLjJsLS41IC43IC40IC42YzYuNSAxMC42IDEwLjIgMjMuMSAxMC4yIDM2LjUgMCAxMy42LTMuOSAyNi4zLTEwLjYgMzcuMSAxMi40IDE5LjggMzQuNCAzMi45IDU5LjUgMzIuOSAzOC43IDAgNzAuMS0zMS4zIDcwLjEtNzBzLTMxLjQtNzAtNzAuMS03MHoiXQogICAgfTsKICAgIGZhTWFuZGFsb3JpYW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWFuZGFsb3JpYW4iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjUwZiIsICJNMjAwLjYgNTExLjljLTEtMy4zLTEuNy0xNS44LTEuNC0yNC42IC42LTE1LjkgMS0yNC43IDEuNC0yOC44IC42LTYuMiAyLjktMjAuNyAzLjMtMjEuNCAuNi0xIC40LTI3LjktLjItMzMuMS0uMy0yLjYtLjYtMTEuOS0uNy0yMC43LS4xLTE2LjUtLjUtMjAuMS0yLjctMjQuOC0xLjEtMi4zLTEuMi0zLjgtMS0xMS40IC4yLTQuMiAuMS04LjUtLjMtMTIuNy0yLTEzLTMuNS0yNy43LTMuMi0zMy45cy40LTcuMSAyLjEtOS43YzMuMS00LjcgNi41LTE0IDguNi0yMy4zIDIuMy05LjkgMy45LTE3LjIgNC42LTIwLjcgMS4xLTUuMSAyLjYtMTAuMSA0LjQtMTUuMSAyLjMtNi4yIDIuNS0xNS40IC40LTE1LjQtLjMgMC0xLjQgMS4yLTIuNCAyLjdzLTQuOCA0LjgtOC4zIDcuNGMtOC40IDYuMS0xMS43IDkuNC0xMi43IDEyLjZzLTEgNy4yLS4yIDcuOGMuMyAuMiAxLjMgMi40IDIuMSA0LjkgMS42IDUgMS45IDEwLjMgLjcgMTUuNC0uNCAxLjgtMSA1LjUtMS41IDguMnMtMSA2LjUtMS4zIDguMmMtLjIgMS41LS43IDMtMS41IDQuMy0xIDEtMS4xIC45LTIuMS0uNS0uNy0xLjUtMS4yLTMuMS0xLjQtNC43LS4yLTEuNy0xLjYtNy4xLTMuMS0xMS45LTMuMy0xMC45LTMuNS0xNi4yLTEtMjEgLjgtMS40IDEuNC0zIDEuNy00LjYgMC0yLjQtMi4yLTUuMy03LjQtOS45LTctNi4yLTguNi03LjktMTAuMi0xMS4zLTEuNy0zLjYtMy4xLTQuMS00LjUtMS41LTEuOCAzLTIuNiA5LjEtMyAyMmwtLjMgMTIuMiAyIDIuMmMzLjIgMy43IDEyLjEgMTYuNSAxMy44IDE5LjggMy40IDYuNyA0LjMgMTEuNyA0LjQgMjMuNnMxIDIyLjggMiAyNC43Yy40IC43IC41IDEuNCAuMyAxLjVzLjQgMi4xIDEuMyA0LjNjMSAyLjkgMS43IDUuOSAyLjEgOSAuNCAzLjUgLjkgNyAxLjcgMTAuNCAyLjIgOS42IDIuOCAxNC4xIDIuNCAyMC4xLS4yIDMuMy0uNSAxMS4xLS43IDE3LjMtMS4zIDQxLjgtMS44IDU4LTIgNjEuMi0uMSAyLS40IDExLjUtLjYgMjEuMS0uNCAxNi4zLTEuMyAyNy40LTIuNCAyOC42LS42IC43LTguMS00LjktMTIuNS05LjUtMy44LTMuOS00LTQuOC0yLjgtOS45IC43LTMgMi4zLTE4LjMgMy4zLTMyLjYgLjQtNC44IC44LTEwLjUgMS0xMi43IC44LTkuNCAxLjctMjAuMyAyLjYtMzQuOCAuNi04LjUgMS4zLTE2LjQgMS43LTE3LjdzLjktOS45IDEuMS0xOS4xbC40LTE2LjgtMi4zLTQuM2MtMS43LTMuMy00LjktNi45LTEzLjItMTUuMy02LTYuMS0xMS44LTEyLjMtMTIuOS0xMy44bC0yLTIuOCAuOC0xMC45YzEuMS0xNS43IDEuMS00OC42IDAtNTkuMWwtLjktOC43LTMuMy00LjVjLTUuOS04LjEtNS44LTcuNy02LjItMzMuMy0uMS02LjEtLjQtMTEuNS0uNi0xMi4xLS44LTEuOS0zLTIuNy04LjUtMy04LjktLjYtMTEtMS45LTIzLjgtMTQuNi02LjItNi0xMi4zLTEyLTEzLjgtMTMuMi0yLjgtMi40LTIuOC0yLS42LTkuNmwxLjQtNC42LTEuNy0zYy0uOC0xLjQtMS42LTIuOC0yLjYtNC4xLTEuMy0xLjUtNS41LTEwLjktNi0xMy41LS4yLS43LS4yLTEuNC0uMS0yLjFzLjUtMS4zIC45LTEuOGMyLjItMi45IDMuNC01LjcgNC41LTEwLjcgMi4zLTExLjIgNy43LTI2LjEgMTAuNi0yOS4yIDMuMi0zLjUgNy43LTEgOS40IDUgMS4zIDQuOCAxLjQgOS44IC4xIDE4LjYtLjUgMy43LS45IDcuNC0xIDExLjEgMCA0IC4yIDQuNyAyLjMgNy40IDMuMyA0LjQgNy43IDcuNCAxNS4yIDEwLjUgMS43IC43IDMuMyAxLjcgNC43IDIuOCAxMS4yIDEwLjcgMTguNiAxNi4yIDIyLjkgMTYuOSA1LjIgLjggOCA0LjUgMTAgMTMuNCAxLjMgNS43IDQgMTEuMSA1LjUgMTEuMSAxLjItLjIgMi4zLS43IDMuMy0xLjQgMi0xLjIgMi4yLTEuNyAyLjItNC4yLS4zLTYtLjktMTEuOS0yLTE3LjgtLjQtMS43LS44LTQuMS0uOS01LjRzLS42LTMuOC0xLTUuN2MtMi42LTExLjItMy42LTE1LjUtNC4xLTE2LTEuNi0yLTQuMS0xMC4yLTQuOS0xNS45LTEuNi0xMS4xLTQtMTQuMi0xMi45LTE3LjQtNC45LTEuOC05LjQtNC41LTEzLjMtNy45LTEuMi0xLTQtMy4yLTYuNC01LjFzLTQuNC0zLjUtNC42LTMuOGMtLjgtLjctMS43LTEuNC0yLjctMi02LjItNC4yLTguOC03LTExLjMtMTJsLTIuNC01Yy0uMS04LjctLjMtMTcuMy0uNC0yNmw2LjktNi42YzQtMy44IDguNS03LjQgMTAuNi04LjQgMy4zLTEuNyA0LjQtMS45IDExLjQtMiA4LjUtLjIgMTAuMSAwIDExLjcgMS42czEuNCA2LjQtLjMgOC41Yy0uNiAuNy0xLjEgMS41LTEuMyAyLjMgMCAuNi0yLjYgNC45LTUuNCA5LTEuMSAyLjItMS45IDQuNS0yLjQgNi44IDIwLjQgMTMuNCAyMS42IDMuOCAxNC4xIDI5bDExLjQgMi41YzMuMS04LjcgNi41LTE3LjMgOC42LTI2LjIgLjMtNy42LTEyLTQuMi0xNS40LTguNy0yLjMtNS45IDMuMS0xNC4yIDYuMS0xOS4yIDEuNi0yLjMgNi42LTQuNyA4LjgtNC4xIC45IC4yIDQuMi0uNCA3LjQtMS4zIDIuNS0uOCA1LTEuMyA3LjUtMS43IDItLjIgNC4xLS43IDYtMS4zIDMuNy0xLjEgNC41LTEuMiA2LjMtLjQgMS45IC42IDMuOCAxLjEgNS44IDEuNCAyLjEgLjMgNC4xIC45IDYgMS45IDEuNiAuOSAzLjMgMS43IDUgMi4yIDIuNSAuNyAzIC42IDctMS43TDIyNiA1LjQgMjM2LjcgNWMxMC40LS40IDEwLjgtLjUgMTUuMy0yLjdMMjU2LjUgMCAyNTkgMS40YzEuOCAxIDMuMSAyLjcgNC45IDYgMi40IDQuNSAyLjQgNC42IDEuNCA3LjQtLjkgMi40LS45IDMuMy0uMSA2LjQgLjUgMiAxLjIgNCAyLjEgNS45IC42IDEuMyAxLjEgMi42IDEuMyA0IC4zIDQuMyAwIDUuMy0yLjQgNi45LTIuMiAxLjUtNyA3LjktNyA5LjMtLjIgMS0uNiAyLTEuMSAzLTUgMTEuNS02LjggMTMuNi0xNC4zIDE3LTkuMiA0LjItMTIuMyA1LjItMTYuMiA1LjItMy4xIDAtNCAuMi00LjUgMS4zLTEuMiAxLjQtMi41IDIuNy00LjEgMy43LTEuOCAxLjItMy4zIDIuOS00LjQgNC44LS41IDEuMi0xLjQgMi4yLTIuNSAyLjktLjkgLjQtMS44IDEtMi41IDEuNy0yLjIgMS45LTQuNiAzLjctNyA1LjQtMy4zIDIuMy02LjkgNS03LjkgNi0uNyAuNy0xLjUgMS4zLTIuNCAxLjctLjggLjQtMS42IC45LTIuMSAxLjYtMS4zIDEuNC0xLjUgMi4xLTEuMSA0LjYgLjMgMiAuOCA0IDEuNCA1LjkgMS4zIDMuOCAxLjMgNy45IDAgMTAuNnMtLjkgNi43IDEuNCA5LjZjMiAyLjYgMi4yIDQuNiAuNyA4LjgtLjggMi45LTEuMSA1LjktMS4xIDguOSAwIDQuOSAuMiA2LjMgMS41IDguNHMxLjggMi41IDMuMiAyLjNjMi0uMiAyLjMtMS4xIDQuNy0xMi4xIDIuMi0xMCAzLjctMTEuOSAxMy44LTE3LjEgMi45LTEuNSA3LjUtNCAxMC01LjRzNi44LTMuNyA5LjQtNC45YzUuOS0yLjYgMTEuMi02LjYgMTUuMi0xMS43IDcuMS04LjggMTAtMTYuMiAxMi44LTMzLjMgLjQtMi44IDEuMy01LjQgMi45LTcuNyAxLjQtMi4yIDIuNC00LjcgMi45LTcuMyAxLTUuMyAyLjktOS4xIDUuNi0xMS41IDQuNy00LjIgNi0xLjEgNC42IDEwLjktLjUgMy45LTEuMSAxMC4zLTEuNCAxNC40bC0uNiA3LjRjMyAyLjcgNS45IDUuNSA4LjkgOC4ybC4xIDguNGMuMSA0LjYgLjUgOS41IC45IDEwLjlsLjggMi41LTYuNCA2LjNjLTguNSA4LjMtMTIuOSAxMy45LTE2LjggMjEuNi0xLjggMy41LTMuNyA3LjEtNC40IDgtMi4yIDMuMS02LjUgMTMtOC44IDIwLjNsLTIuMyA3LjItNyA2LjVjLTMuOCAzLjYtOCA3LjItOS4yIDguMi0zIDIuMy00LjMgNS4xLTQuMyAxMC0uMSAyLjUgLjQgNSAxLjYgNy4zIC44IDEuNiAxLjUgMy4yIDIuMSA0LjggLjMgMSAuOSAyIDEuNiAyLjkgMS40IDEuNiAxLjkgMTYuMSAuOCAyMy4yLS43IDQuNS0zLjYgMTItNC43IDEyLTEuOCAwLTQuMSA5LjMtNS4xIDIwLjctLjIgMi0uNiA1LjktMSA4LjdzLTEgMTAtMS40IDE2Yy0uOCAxMi4yLS4yIDE4LjggMiAyMy4yIDMuNCA2LjcgLjUgMTIuNy0xMSAyMi44bC00IDMuNSAuMSA1LjJjLjEgMyAuNCA2IDEuMSA4LjkgNC42IDE2IDQuNyAxNi45IDQuNCAzNy4xLS41IDI2LjQtLjMgNDAuMyAuNiA0NC4yIC41IDIuMyAuOSA0LjYgMS4xIDcgLjIgMiAuNyA1LjMgMS4xIDcuNCAuNSAyLjMgLjggMTEgLjggMjIuN2wwIDE5LjEtMS44IDIuNmMtMi43IDMuOS0xNS4xIDEzLjUtMTUuNSAxMi4zbC4xIDB6bTI5LjUtNDUuMWMtLjItLjMtLjMtNi45LS4zLTE0LjYgMC0xNC4xLS45LTI3LjUtMi4zLTM0LjQtLjQtMi0uOC05LjctLjktMTcuMS0uMi0xMS45LTEuNC0yNC40LTIuNi0yNi40LS43LTEuMS0zLTE3LjctMy0yMS4zIDAtNC4yIDEtNiA1LjMtOS4xczQuOS0zLjEgNS41LS43Yy4zIDEuMSAxLjQgNS42IDIuNiAxMCAzLjkgMTUuMSA0LjEgMTYuMyA0IDIxLjctLjEgNS44LS4xIDYuMS0xLjcgMTcuNy0xIDcuMS0xLjIgMTIuNC0xIDI4LjQgLjIgMTkuNC0uNiAzNS43LTIgNDEuMy0uNyAyLjgtMi44IDUuNS0zLjQgNC40bC0uMSAwem0tNzEtMzcuNmMtLjgtMy42LTEuMy03LjItMS43LTEwLjhzLTEtNy4yLTEuNy0xMC44Yy0uNS0yLjEtLjktNC4zLTEtNi41LS4zLTMuMi0uOS03LjUtMS4zLTkuNS0xLTQuOC0zLjMtMTkuNC0zLjQtMjEuMSAwLS43LS4zLTQtLjctNy40LS43LTYuMi0uOC0yNy43LS4yLTI4LjMgMS0xIDYuNiAyLjggMTEuMyA3LjRsNS4zIDUuMy0uNCA2LjVjLS4yIDMuNi0uNiAxMC4yLS44IDE0LjgtLjUgMTMuMy0uNyA4LjctMS42IDI4LjQtLjggMTcuNC0xLjkgMzEuMy0yLjYgMzItLjEgLjEtLjIgLjEtLjIgLjJzLS4yIDAtLjMgMC0uMiAwLS4zLS4xLS4xLS4xLS4yLS4ybDAgMHpNNzIgMTYyLjZjMjEuMSAxMi44IDE3LjggMTQuMiAyOC41IDE3LjcgMTMgNC4zIDE4LjkgNy4xIDIzLjIgMTYuOS00My43IDM2LjEtNjkgNTcuOS03Ni43IDcwLjktMzEgNTItNiAxMDEuNiA2Mi44IDg3LjItMTQuMiAyOS4yLTc4IDI4LjYtOTguNy00LjktMjQuNy00MC0yMi4xLTExOC4zIDYxLTE4Ny43bDAgMHptMjEwLjggMTc5YzU2LjcgNi45IDgyLjMtMzcuNyA0Ni41LTg5LjIgMCAwLTI2LjktMjkuMy02NC4zLTY4IDMtMTUuNSA5LjUtMzIuMSAzMC42LTUzLjggODkuMiA2My41IDkyIDE0MS42IDkyLjUgMTQ5LjQgNC4zIDcwLjYtNzguNyA5MS4yLTEwNS4zIDYxLjdsMCAweiJdCiAgICB9OwogICAgZmFTbGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzbGFjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyNDQ3LCAic2xhY2staGFzaCJdLCAiZjE5OCIsICJNOTQuMSAzMTUuMWMwIDI1LjktMjEuMiA0Ny4xLTQ3LjEgNDcuMVMwIDM0MSAwIDMxNS4xIDIxLjIgMjY4IDQ3LjEgMjY4bDQ3LjEgMCAwIDQ3LjF6bTIzLjcgMGMwLTI1LjkgMjEuMi00Ny4xIDQ3LjEtNDcuMVMyMTIgMjg5LjIgMjEyIDMxNS4xbDAgMTE3LjhjMCAyNS45LTIxLjIgNDcuMS00Ny4xIDQ3LjFzLTQ3LjEtMjEuMi00Ny4xLTQ3LjFsMC0xMTcuOHptNDcuMS0xODljLTI1LjkgMC00Ny4xLTIxLjItNDcuMS00Ny4xUzEzOSAzMiAxNjQuOSAzMiAyMTIgNTMuMiAyMTIgNzkuMWwwIDQ3LjEtNDcuMSAwem0wIDIzLjdjMjUuOSAwIDQ3LjEgMjEuMiA0Ny4xIDQ3LjFTMTkwLjggMjQ0IDE2NC45IDI0NEw0Ny4xIDI0NEMyMS4yIDI0NCAwIDIyMi44IDAgMTk2LjlzMjEuMi00Ny4xIDQ3LjEtNDcuMWwxMTcuOCAwem0xODkgNDcuMWMwLTI1LjkgMjEuMi00Ny4xIDQ3LjEtNDcuMVM0NDggMTcxIDQ0OCAxOTYuOSA0MjYuOCAyNDQgNDAwLjkgMjQ0bC00Ny4xIDAgMC00Ny4xem0tMjMuNyAwYzAgMjUuOS0yMS4yIDQ3LjEtNDcuMSA0Ny4xUzIzNiAyMjIuOCAyMzYgMTk2LjlsMC0xMTcuOEMyMzYgNTMuMiAyNTcuMiAzMiAyODMuMSAzMnM0Ny4xIDIxLjIgNDcuMSA0Ny4xbDAgMTE3Ljh6bS00Ny4xIDE4OWMyNS45IDAgNDcuMSAyMS4yIDQ3LjEgNDcuMVMzMDkgNDgwIDI4My4xIDQ4MCAyMzYgNDU4LjggMjM2IDQzMi45bDAtNDcuMSA0Ny4xIDB6bTAtMjMuN2MtMjUuOSAwLTQ3LjEtMjEuMi00Ny4xLTQ3LjFTMjU3LjIgMjY4IDI4My4xIDI2OGwxMTcuOCAwYzI1LjkgMCA0Ny4xIDIxLjIgNDcuMSA0Ny4xcy0yMS4yIDQ3LjEtNDcuMSA0Ny4xbC0xMTcuOCAweiJdCiAgICB9OwogICAgZmFTbGFja0hhc2ggPSBmYVNsYWNrOwogICAgZmFBbmdlbGxpc3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYW5nZWxsaXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyMDkiLCAiTTMxNS42IDIxNS40YzExLjctMzIuNiA0NS40LTEyNi45IDQ1LjQtMTU3LjEgMC0yNi42LTE1LjctNDguOS00My43LTQ4LjktNDQuNiAwLTg0LjYgMTMxLjctOTcuMSAxNjMuMS05LjctMjguNS01NS4xLTE3Mi41LTk1LjEtMTcyLjUtMzEuMSAwLTQ1LjcgMjIuOS00NS43IDUxLjcgMCAzNS4zIDM0LjIgMTI2LjggNDYuNiAxNjItNi4zLTIuMy0xMy4xLTQuMy0yMC00LjMtMjMuNCAwLTQ4LjMgMjkuMS00OC4zIDUyLjYgMCA4LjkgNC45IDIxLjQgOCAyOS43LTM2LjkgMTAtNTEuMSAzNC42LTUxLjEgNzEuNy0uMSA3Mi4yIDY4LjMgMTQ4LjYgMTY0LjUgMTQ4LjYgMTE4IDAgMTkxLjQtODguNiAxOTEuNC0yMDIuOSAwLTQzLjEtNi45LTgyLTU0LjktOTMuN3pNMjgwLjIgMTA4YzQtMTIuMyAyMS4xLTY0LjMgMzcuMS02NC4zIDguNiAwIDEwLjkgOC45IDEwLjkgMTYgMCAxOS4xLTM4LjYgMTI0LjYtNDcuMSAxNDhsLTM0LTYgMzMuMS05My43ek0xMTAuOCA0OC4zYzAtMTEuOSAxNC41LTQ1LjcgNDYuMyA0Ny4xbDM0LjYgMTAwLjNjLTE1LjYtMS4zLTI3LjctMy0zNS40IDEuNC0xMC45LTI4LjgtNDUuNS0xMTkuNy00NS41LTE0OC44ek0xMDguNSAyNDRjMjkuMyAwIDY3LjEgOTQuNiA2Ny4xIDEwNy40IDAgNS4xLTQuOSAxMS40LTEwLjYgMTEuNC0yMC45IDAtNzYuOS03Ni45LTc2LjktOTcuNyAuMS03LjcgMTIuNy0yMS4xIDIwLjQtMjEuMXpNMjkyLjggNDMwLjNjLTI5LjEgMzItNjYuMyA0OC42LTEwOS43IDQ4LjYtNTkuNCAwLTEwNi4zLTMyLjYtMTI4LjktODguMy0xNy4xLTQzLjQgMy44LTY4LjMgMjAuNi02OC4zIDExLjQgMCA1NC4zIDYwLjMgNTQuMyA3My4xIDAgNC45LTcuNyA4LjMtMTEuNyA4LjMtMTYuMSAwLTIyLjQtMTUuNS01MS4xLTUxLjQtMjkuNyAyOS43IDIwLjUgODYuOSA1OC4zIDg2LjkgMjYuMSAwIDQzLjEtMjQuMiAzOC00MiAzLjcgMCA4LjMgLjMgMTEuNy0uNiAxLjEgMjcuMSA5LjEgNTkuNCA0MS43IDYxLjcgMC0uOSAyLTcuMSAyLTcuNCAwLTE3LjQtMTAuNi0zMi42LTEwLjYtNTAuMyAwLTI4LjMgMjEuNy01NS43IDQzLjctNzEuNyA4LTYgMTcuNy05LjcgMjcuMS0xMy4xIDkuNy0zLjcgMjAtOCAyNy40LTE1LjQtMS4xLTExLjItNS43LTIxLjEtMTYuOS0yMS4xLTI3LjcgMC0xMjAuNiA0LTEyMC42LTM5LjcgMC02LjcgLjEtMTMuMSAxNy40LTEzLjEgMzIuMyAwIDExNC4zIDggMTM4LjMgMjkuMSAxOC4xIDE2LjEgMjQuMyAxMTMuMi0zMSAxNzQuN3ptLTk4LjYtMTI2YzkuNyAzLjEgMTkuNyA0IDI5LjcgNi03LjQgNS40LTE0IDEyLTIwLjMgMTkuMS0yLjgtOC41LTYuMi0xNi44LTkuNC0yNS4xeiJdCiAgICB9OwogICAgZmFBbmRyb2lkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFuZHJvaWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE3YiIsICJNNDIwLjUgMjUzLjlhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tMjY1LjEgMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTI3My43LTk2LjVsNDcuOS04M2MuOC0xLjEgMS4zLTIuNCAxLjUtMy44cy4yLTIuNy0uMS00LjEtLjktMi42LTEuNy0zLjctMS44LTItMy0yLjctMi41LTEuMS0zLjktMS4zLTIuNyAwLTQgLjQtMi41IDEuMS0zLjYgMS45LTEuOSAyLTIuNSAzLjJsLTQ4LjUgODQuMWMtMzguOC0xNy40LTgwLjgtMjYuNC0xMjMuMy0yNi40cy04NC41IDktMTIzLjMgMjYuNEwxMTYuMiA2NC40Yy0uNi0xLjItMS41LTIuMy0yLjUtMy4ycy0yLjMtMS41LTMuNi0xLjktMi43LS41LTQtLjQtMi43IC42LTMuOSAxLjMtMi4yIDEuNi0zIDIuNy0xLjQgMi40LTEuNyAzLjctLjMgMi43LS4xIDQuMSAuOCAyLjYgMS41IDMuOGw0Ny45IDgzQzY0LjUgMjAyLjIgOC4yIDI4NS41IDAgMzg0bDU3NiAwYy04LjItOTguNS02NC41LTE4MS44LTE0Ni45LTIyNi42eiJdCiAgICB9OwogICAgZmFNZWV0dXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVldHVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyZTAiLCAiTTEzMS4xIDQxNC4zYzEuMSA1LjctMi4zIDExLjEtOCAxMi4zLTUuNCAxLjEtMTAuOS0yLjMtMTItOC0xLjEtNS40IDIuMy0xMS4xIDcuNy0xMi4zczExLjEgMi4zIDEyLjMgOHptMTQzLjEgNzEuNGMtNi4zIDQuNi04IDEzLjQtMy43IDIwIDQuNiA2LjYgMTMuNCA4LjMgMjAgMy43IDYuMy00LjYgOC0xMy40IDMuNC0yMC00LjItNi41LTEzLjEtOC4zLTE5LjctMy43em0tODYtNDYyLjNhMTEuOCAxMS44IDAgMSAwIC00LjktMjMgMTEuOCAxMS44IDAgMSAwIDQuOSAyM3pNNjYuNSAyMjYuM2EyMi4yIDIyLjIgMCAxIDAgLTI0LjcgMzYuOSAyMi4yIDIyLjIgMCAxIDAgMjQuNy0zNi45em0yNzItMTcwLjlhMjIuMSAyMi4xIDAgMSAwIC0yMi40LTM4IDIyLjEgMjIuMSAwIDEgMCAyMi40IDM4em0tMTkxLjEgNThhMTYuOSAxNi45IDAgMSAwIC0xOC44LTI4IDE2LjkgMTYuOSAwIDEgMCAxOC44IDI4em0zNzIuMyAxNTZjLTcuNCAxLjctMTIuMyA5LjEtMTAuNiAxNi45IDEuNCA3LjQgOC45IDEyLjMgMTYuMyAxMC42IDcuNC0xLjQgMTIuMy04LjkgMTAuNi0xNi42LTEuNS03LjQtOC45LTEyLjMtMTYuMy0xMC45em0zOS43LTU2LjhhMTAuMSAxMC4xIDAgMSAwIC0xOS44IDQuMyAxMC4xIDEwLjEgMCAxIDAgMTkuOC00LjN6bS04MC4zLTczLjdhMTguOCAxOC44IDAgMSAwIDIwLjcgMzEuMyAxOC44IDE4LjggMCAxIDAgLTIwLjctMzEuM3ptLTYuMyAxMzkuNGMyNi4zIDQzLjEgMTUuMSAxMDAtMjYuMyAxMjkuMS0xNy40IDEyLjMtMzcuMSAxNy43LTU2LjkgMTcuMS0xMiA0Ny4xLTY5LjQgNjQuNi0xMDUuMSAzMi42LTEuMSAuOS0yLjYgMS43LTMuNyAyLjktMzkuMSAyNy4xLTkyLjMgMTcuNC0xMTkuNC0yMi4zLTkuNy0xNC4zLTE0LjYtMzAuNi0xNS4xLTQ2LjktNjUuNC0xMC45LTkwLTk0LTQxLjEtMTM5LjctMjguMy00Ni45IC42LTEwNy40IDUzLjQtMTE0LjkgMjUuMS02Ni4yIDEwNy42LTk3LjYgMTYzLjYtNTQuMiA2Ny40LTIyLjMgMTM2LjMgMjkuNCAxMzAuOSAxMDEuMSA0MS4xIDEyLjYgNTIuOCA2Ni45IDE5LjcgOTUuMnptLTcwIDc0LjNjLTMuMS0yMC42LTQwLjktNC42LTQzLjEtMjcuMS0zLjEtMzIgNDMuNy0xMDEuMSA0MC0xMjgtMy40LTI0LTE5LjQtMjkuMS0zMy40LTI5LjQtMTMuNC0uMy0xNi45IDItMjEuNCA0LjYtMi45IDEuNy02LjYgNC45LTExLjctLjMtNi4zLTYtMTEuMS0xMS43LTE5LjQtMTIuOS0xMi4zLTItMTcuNyAyLTI2LjYgOS43LTMuNCAyLjktMTIgMTIuOS0yMCA5LjEtMy40LTEuNy0xNS40LTcuNy0yNC0xMS40LTE2LjMtNy4xLTQwIDQuNi00OC42IDIwLTEyLjkgMjIuOS0zOCAxMTMuMS00MS43IDEyNS4xLTguNiAyNi42IDEwLjkgNDguNiAzNi45IDQ3LjEgMTEuMS0uNiAxOC4zLTQuNiAyNS40LTE3LjQgNC03LjQgNDEuNy0xMDcuNyA0NC42LTExMi42IDItMy40IDguOS04IDE0LjYtNS4xIDUuNyAzLjEgNi45IDkuNCA2IDE1LjEtMS4xIDkuNy0yOCA3MC45LTI4LjkgNzcuNy0zLjQgMjIuOSAyNi45IDI2LjYgMzguNiA0IDMuNy03LjEgNDUuNy05Mi42IDQ5LjQtOTguMyA0LjMtNi4zIDcuNC04LjMgMTEuNy04IDMuMSAwIDguMyAuOSA3LjEgMTAuOS0xLjQgOS40LTM1LjEgNzIuMy0zOC45IDg3LjctNC42IDIwLjYgNi42IDQxLjQgMjQuOSA1MC42IDExLjQgNS43IDYyLjUgMTUuNyA1OC41LTExLjF6bTUuNyA5Mi4zYTIzLjMgMjMuMyAwIDEgMCAyNi4yIDM4LjQgMjMuMyAyMy4zIDAgMSAwIC0yNi4yLTM4LjR6Il0KICAgIH07CiAgICBmYUZvbnRpY29uc0ZpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvbnRpY29ucy1maSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmM2EyIiwgIk0xMTQuNCAyMjRsOTIuNCAwLTE1LjIgNTEuMi03Ni40IDAgMCAxNTcuOGMwIDgtMi44IDkuMiA0LjQgMTBsNTkuNiA1LjYgMCAzNC40LTE3OS4yIDAgMC0zNS4yIDI5LjItMi44YzcuMi0uOCA5LjItMy4yIDkuMi0xMC44bDAtMTU1LjhjMC0zLjItNC0zLjItOC0zLjJsLTMwLjQgMCAwLTUxLjIgMzguNCAwIDAtMjguOGMwLTY4IDM2LjQtOTYgMTA2LTk2IDQ2LjggMCA4OC44IDExLjIgODguOCA3Mi40TDE2My42IDE4MGMuNC0yNS42LTYtMzEuNi0yMi40LTMxLjYtMjUuMiAwLTI2IDEzLjYtMjYgMzcuNmwwIDMyYzAgMy4yLTQuOCA2LS44IDZ6TTM4NCA0ODNsLTE0MC44IDAgMC0zNC40IDI4LTMuNmM3LjItLjggMTAuNC0yLjQgMTAuNC0xMGwwLTE0OGMwLTUuNi00LTkuMi05LjItMTAuOGwtMzMuMi04LjggOS4yLTQwLjQgMTEwIDAgMCAyMDhjMCA4LTMuNiA4LjggNCAxMGwyMS42IDMuNiAwIDM0LjR6TTM1NCAxMzUuOGwxMi40IDQ1LjYtMTAgMTAtNDIuOC0yMi44LTQyLjggMjIuOC0xMC0xMCAxMi40LTQ1LjYtMzAtMzYuNCA0LjgtMTAgMzggMCAyMS4yLTM4LjQgMTIuOCAwIDIxLjIgMzguNCAzOCAwIDQuOCAxMy4yLTMwIDMzLjJ6Il0KICAgIH07CiAgICBmYVBhbGZlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwYWxmZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjNkOCIsICJNMzg0LjkgMTkzLjljMC00Ny40LTU1LjItNDQuMi05NS40LTI5LjgtMS4zIDM5LjQtMi41IDgwLjctMyAxMTkuOCAuNyAyLjggMi42IDYuMiAxNS4xIDYuMiAzNi44IDAgODMuNC00Mi44IDgzLjMtOTYuMnpNMTkwLjQgMjY2LjFjLjIgMCA2LjUtMi43IDExLjItMi43IDI2LjYgMCAyMC43IDQ0LjEtMTQuNCA0NC4xLTIxLjUgMC0zNy4xLTE4LjEtMzcuMS00MyAwLTQyIDQyLjktOTUuNiAxMDAuNy0xMjYuNSAxLTEyLjQgMy0yMiAxMC41LTI4LjIgMTEuMi05IDI2LjYtMy41IDI5LjUgMTEuMSA3Mi4yLTIyLjIgMTM1LjIgMSAxMzUuMiA3MiAwIDc3LjktNzkuMyAxNTIuNi0xNDAuMSAxMzguMi0uMSAzOS40IC45IDc0LjQgMi43IDEwMGwwIC4yYy4yIDMuNCAuNiAxMi41LTUuMyAxOS4xLTkuNiAxMC42LTMzLjQgMTAtMzYuNC0yMi4zLTQuMS00NC40IC4yLTIwNi4xIDEuNC0yNDIuNS0yMS41IDE1LTU4LjUgNTAuMy01OC41IDc1LjkgLjIgMi41IC40IDQgLjYgNC42ek04IDE4MS4xcy0uMSAzNy40IDM4LjQgMzcuNGwzMCAwIDIyLjQgMjE3LjJzMCA0NC4zIDQ0LjcgNDQuM2wyODguOSAwczQ0LjctLjQgNDQuNy00NC4zbDIyLjQtMjE3LjIgMzAgMHMzOC40IDEuMiAzOC40LTM3LjRjMCAwIC4xLTM3LjQtMzguNC0zNy40bC0zMC4xIDBjLTcuMy0yNS42LTMwLjItNzQuMy0xMTkuNC03NC4zbC0yOCAwIDAtMTkuMXMtMi43LTE4LjQtMjEuMS0xOC40bC04NS44IDBTMjI0IDMxLjkgMjI0IDUwLjNsMCAxOS4xLTI4LjEgMHMtMTA1IDQuMi0xMjAuNSA3NC4zbC0yOSAwUzggMTQyLjUgOCAxODEuMXoiXQogICAgfTsKICAgIGZhV3BiZWdpbm5lciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3cGJlZ2lubmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyOTciLCAiTTQ2My4yIDMyMi40YzU2LjIgNjQuMyA0LjIgMTU3LjYtOTEuOSAxNTcuNi0zOS42IDAtNzguOC0xNy43LTEwMC4xLTUwLTYuOSAuNC0yMi43IC40LTI5LjYgMC0yMS40IDMyLjQtNjAuNiA1MC0xMDAuMSA1MC05NS41IDAtMTQ4LjMtOTMtOTEuOS0xNTcuNi03OS4xLTEzMS45IDMxLjMtMjkwLjQgMjA2LjgtMjkwLjQgMTc1LjYgMCAyODUuOSAxNTguNiAyMDYuOCAyOTAuNHptLTMzOS42LTgzbDQxLjUgMCAwLTU4LjEtNDEuNSAwIDAgNTguMXptMjE3LjIgODYuMWwwLTIzLjhjLTYwLjUgMjAuOS0xMzIuNCA5LjItMTg3LjYtMzRsLjIgMjQuOWM1MS4xIDQ2LjQgMTMxLjcgNTcuOSAxODcuMyAzMi45ek0xOTAgMjM5LjRsMTY2LjEgMCAwLTU4LjEtMTY2LjEgMCAwIDU4LjF6Il0KICAgIH07CiAgICBmYURpYXNwb3JhID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRpYXNwb3JhIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3OTEiLCAiTTIxOS43IDM1NC42Yy0xLjQgMC04OCAxMTkuOS04OC43IDExOS45UzQ0LjQgNDE0IDQ0IDQxMy4zIDEzMC42IDI4Ny41IDEzMC42IDI4NS44YzAtMi4yLTEyOS42LTQ0LTEzNy42LTQ3LjEtMS4zLS41IDMxLjQtMTAxLjggMzEuNy0xMDIuMSAuNi0uNyAxNDQuNCA0NyAxNDUuNSA0NyAuNCAwIC45LS42IDEtMS4zIC40LTIgMS0xNDguNiAxLjctMTQ5LjYgLjgtMS4yIDEwNC41LS43IDEwNS4xLS4zIDEuNSAxIDMuNSAxNTYuMSA2LjEgMTU2LjEgMS40IDAgMTM4LjctNDcgMTM5LjMtNDYuMyAuOCAuOSAzMS45IDEwMi4yIDMxLjUgMTAyLjYtLjkgLjktMTQwLjIgNDcuMS0xNDAuNiA0OC44LS4zIDEuNCA4Mi44IDEyMi4xIDgyLjUgMTIyLjlzLTg1LjUgNjMuNS04Ni4zIDYzLjVjLTEtLjItODktMTI1LjUtOTAuOS0xMjUuNWwwIDB6Il0KICAgIH07CiAgICBmYVByb2R1Y3RIdW50ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInByb2R1Y3QtaHVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjg4IiwgIk0zMjYuMyAyMTguOGMwIDIwLjUtMTYuNyAzNy4yLTM3LjIgMzcuMmwtNzAuMyAwIDAtNzQuNCA3MC4zIDBjMjAuNSAwIDM3LjIgMTYuNyAzNy4yIDM3LjJ6TTggMjU2YTI0OCAyNDggMCAxIDEgNDk2IDAgMjQ4IDI0OCAwIDEgMSAtNDk2IDB6bTM2Ny45LTM3LjJjMC00Ny45LTM4LjktODYuOC04Ni44LTg2LjhsLTExOS45IDAgMCAyNDggNDkuNiAwIDAtNzQuNCA3MC4zIDBjNDcuOSAwIDg2LjgtMzguOSA4Ni44LTg2Ljh6Il0KICAgIH07CiAgICBmYVNxdWFyZVVwd29yayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdXB3b3JrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2N2MiLCAiTTU2IDMybDMzNiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgMzM2YzAgMzAuOS0yNS4xIDU2LTU2IDU2TDU2IDQ4MGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCA4OEMwIDU3LjEgMjUuMSAzMiA1NiAzMnpNMjcwLjkgMjc0LjJjNi42LTUyLjkgMjUuOS02OS41IDUxLjQtNjkuNSAyNS4zIDAgNDQuOSAyMC4yIDQ0LjkgNDkuN3MtMTkuNyA0OS43LTQ0LjkgNDkuN2MtMjcuOSAwLTQ2LjMtMjEuNS01MS40LTI5Ljl6bS0yNi43LTQxLjhjLTguMi0xNS41LTE0LjMtMzYuMy0xOS4yLTU1LjZsLTYyLjkgMCAwIDc4LjFjMCAyOC40LTEyLjkgNDkuNC0zOC4yIDQ5LjRTODQuMSAyODMuNCA4NC4xIDI1NWwuMy03OC4xLTM2LjIgMCAwIDc4LjFjMCAyMi44IDcuNCA0My41IDIwLjkgNTguMiAxMy45IDE1LjIgMzIuOCAyMy4yIDU0LjggMjMuMiA0My43IDAgNzQuMi0zMy41IDc0LjItODEuNWwwLTUyLjVjNC42IDE3LjMgMTUuNCA1MC41IDM2LjIgNzkuN2wtMTkuMyAxMTAuNSAzNi44IDAgMTIuOC03OC40YzQuMiAzLjUgOC43IDYuNiAxMy40IDkuNCAxMi4zIDcuOCAyNi40IDEyLjIgNDAuOSAxMi42bDMuNCAwYzQ1LjEgMCA4MC45LTM0LjkgODAuOS04MS45cy0zNS45LTgyLjItODAuOS04Mi4yYy00NS40IDAtNzAuOSAyOS43LTc4LjEgNjAuMWwwIC4yeiJdCiAgICB9OwogICAgZmFDdXR0bGVmaXNoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImN1dHRsZWZpc2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM4YyIsICJNMzQ4IDMwNS41Yy0xNy41IDMxLjYtNTcuNCA1NC41LTk2IDU0LjUtNTYuNiAwLTEwNC00Ny40LTEwNC0xMDRzNDcuNC0xMDQgMTA0LTEwNGMzOC42IDAgNzguNSAyMi45IDk2IDU0LjUgMTMuNy01MC45IDQxLjctOTMuMyA4Ny0xMTcuOC00NS4zLTQ5LjYtMTEwLjUtODAuNy0xODMtODAuNy0xMzcgMC0yNDggMTExLTI0OCAyNDhTMTE1IDUwNCAyNTIgNTA0YzcyLjUgMCAxMzcuNy0zMS4xIDE4My04MC43LTQ1LjMtMjQuNS03My4zLTY2LjktODctMTE3Ljh6Il0KICAgIH07CiAgICBmYU1lZGFwcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibWVkYXBwcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmM2M2IiwgIk0xMTguMyAyMzguNGMzLjUtMTIuNSA2LjktMzMuNiAxMy4yLTMzLjYgOC4zIDEuOCA5LjYgMjMuNCAxOC42IDM2LjYgNC42LTIzLjUgNS4zLTg1LjEgMTQuMS04Ni43IDktLjcgMTkuNyA2Ni41IDIyIDc3LjUgOS45IDQuMSA0OC45IDYuNiA0OC45IDYuNiAxLjkgNy4zLTI0IDcuNi00MCA3LjgtNC42IDE0LjgtNS40IDI3LjctMTEuNCAyOC00LjcgLjItOC4yLTI4LjgtMTcuNS00OS42bC05LjQgNjUuNWMtNC40IDEzLTE1LjUtMjIuNS0yMS45LTM5LjMtMy4zLS4xLTYyLjQtMS42LTQ3LjYtNy44bDMxLTV6TTIyOCA0NDhjMjEuMiAwIDIxLjItMzIgMC0zMkw5MiA0MTZjLTIxLjIgMC0yMS4yIDMyIDAgMzJsMTM2IDB6bS0yNCA2NGMyMS4yIDAgMjEuMi0zMiAwLTMybC04OCAwYy0yMS4yIDAtMjEuMiAzMiAwIDMybDg4IDB6bTM0LjItMTQxLjVjMy4yLTE4LjkgNS4yLTM2LjQgMTEuOS00OC44IDcuOS0xNC43IDE2LjEtMjguMSAyNC00MSAyNC42LTQwLjQgNDUuOS03NS4yIDQ1LjktMTI1LjUgMC04NS42LTcxLjgtMTU1LjItMTYwLTE1NS4yUzAgNjkuNiAwIDE1NS4yYzAgNTAuMiAyMS4zIDg1LjEgNDUuOSAxMjUuNSA3LjkgMTIuOSAxNiAyNi4zIDI0IDQxIDYuNyAxMi41IDguNyAyOS44IDExLjkgNDguOSAzLjUgMjEgMzYuMSAxNS43IDMyLjYtNS4xLTMuNi0yMS43LTUuNi00MC43LTE1LjMtNTguNi0zMi42LTYwLjQtNjYuMS05NS42LTY2LjEtMTUxLjcgMC02Ny45IDU3LTEyMy4yIDEyNy0xMjMuMlMyODcgODcuMyAyODcgMTU1LjJjMCA1Ni4xLTMzLjUgOTEuMy02Ni4xIDE1MS42LTkuNyAxOC0xMS43IDM3LjQtMTUuMyA1OC42LTMuNCAyMC42IDI5IDI2LjQgMzIuNiA1LjF6Il0KICAgIH07CiAgICBmYVBpeCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaXgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQzYSIsICJNMjQyLjQgMjkyLjVjNS40LTUuNCAxNC43LTUuNCAyMC4xIDBsNzcgNzdjMTQuMiAxNC4yIDMzLjEgMjIgNTMuMSAyMmwxNS4xIDAtOTcuMSA5Ny4xYy0zMC4zIDI5LjUtNzkuNSAyOS41LTEwOS44IDBsLTk3LjUtOTcuNCA5LjMgMGMyMCAwIDM4LjktNy44IDUzLjEtMjJsNzYuNy03Ni43em0yMC4xLTczLjZjLTYuNCA1LjUtMTQuNiA1LjYtMjAuMSAwbC03Ni43LTc2LjdjLTE0LjItMTUuMS0zMy4xLTIyLTUzLjEtMjJsLTkuMyAwIDk3LjQtOTcuNGMzMC40LTMwLjMgNzkuNi0zMC4zIDEwOS45IDBsOTcuMiA5Ny4xLTE1LjIgMGMtMjAgMC0zOC45IDcuOC01My4xIDIybC03NyA3N3pNMTEyLjYgMTQyLjdjMTMuOCAwIDI2LjUgNS42IDM3LjEgMTUuNGw3Ni43IDc2LjdjNy4yIDYuMyAxNi42IDEwLjggMjYuMSAxMC44IDkuNCAwIDE4LjgtNC41IDI2LTEwLjhsNzctNzdjOS44LTkuNyAyMy4zLTE1LjMgMzcuMS0xNS4zbDM3LjcgMCA1OC4zIDU4LjNjMzAuMyAzMC4zIDMwLjMgNzkuNSAwIDEwOS44bC01OC4zIDU4LjMtMzcuNyAwYy0xMy44IDAtMjcuMy01LjYtMzcuMS0xNS40bC03Ny03N2MtMTMuOS0xMy45LTM4LjItMTMuOS01Mi4xIC4xbC03Ni43IDc2LjZjLTEwLjYgOS44LTIzLjMgMTUuNC0zNy4xIDE1LjRsLTMxLjggMC01OC01OGMtMzAuMy0zMC4zLTMwLjMtNzkuNSAwLTEwOS44bDU4LTU4LjEgMzEuOCAweiJdCiAgICB9OwogICAgZmFTcXVhcmVUdW1ibHIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXR1bWJsciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0dW1ibHItc3F1YXJlIl0sICJmMTc0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjU2LjggNDE2Yy03NS41IDAtOTEuOS01NS41LTkxLjktODcuOWwwLTkwLTI5LjcgMGMtMy40IDAtNi4yLTIuOC02LjItNi4ybDAtNDIuNWMwLTQuNSAyLjgtOC41IDcuMS0xMCAzOC44LTEzLjcgNTAuOS00Ny41IDUyLjctNzMuMiAuNS02LjkgNC4xLTEwLjIgMTAtMTAuMmw0NC4zIDBjMy40IDAgNi4yIDIuOCA2LjIgNi4ybDAgNzIgNTEuOSAwYzMuNCAwIDYuMiAyLjggNi4yIDYuMmwwIDUxLjFjMCAzLjQtMi44IDYuMi02LjIgNi4ybC01Mi4xIDAgMCA4My4zYzAgMjEuNCAxNC44IDMzLjUgNDIuNSAyMi40IDMtMS4yIDUuNi0yIDgtMS40IDIuMiAuNSAzLjYgMi4xIDQuNiA0LjlMMzE4IDM4Ny4xYzEgMy4yIDIgNi43LS4zIDkuMS04LjUgOS4xLTMxLjIgMTkuOC02MC45IDE5Ljh6Il0KICAgIH07CiAgICBmYVR1bWJsclNxdWFyZSA9IGZhU3F1YXJlVHVtYmxyOwogICAgZmFSZWFjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFjdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDFiIiwgIk00MTguMiAxNzcuMmMtNS40LTEuOC0xMC44LTMuNS0xNi4yLTUuMSAuOS0zLjcgMS43LTcuNCAyLjUtMTEuMSAxMi4zLTU5LjYgNC4yLTEwNy41LTIzLjEtMTIzLjMtMjYuMy0xNS4xLTY5LjIgLjYtMTEyLjYgMzguNC00LjMgMy43LTguNSA3LjYtMTIuNSAxMS41LTIuNy0yLjYtNS41LTUuMi04LjMtNy43LTQ1LjUtNDAuNC05MS4xLTU3LjQtMTE4LjQtNDEuNS0yNi4yIDE1LjItMzQgNjAuMy0yMyAxMTYuNyAxLjEgNS42IDIuMyAxMS4xIDMuNyAxNi43LTYuNCAxLjgtMTIuNyAzLjgtMTguNiA1LjktNTMuNCAxOC41LTkxLjcgNDcuNy05MS43IDc3LjkgMCAzMS4yIDQwLjggNjIuNSA5Ni4zIDgxLjUgNC41IDEuNSA5IDMgMTMuNiA0LjMtMS41IDYtMi44IDExLjktNCAxOC0xMC41IDU1LjUtMi4zIDk5LjUgMjMuOSAxMTQuNiAyNyAxNS42IDcyLjQtLjQgMTE2LjYtMzkuMSAzLjUtMy4xIDctNi4zIDEwLjUtOS43IDQuNCA0LjMgOSA4LjQgMTMuNiAxMi40IDQyLjggMzYuOCA4NS4xIDUxLjcgMTExLjIgMzYuNiAyNy0xNS42IDM1LjgtNjIuOSAyNC40LTEyMC41LS45LTQuNC0xLjktOC45LTMtMTMuNSAzLjItLjkgNi4zLTEuOSA5LjQtMi45IDU3LjctMTkuMSA5OS41LTUwIDk5LjUtODEuNyAwLTMwLjMtMzkuNC01OS43LTkzLjgtNzguNHpNMjgyLjkgOTIuM2MzNy4yLTMyLjQgNzEuOS00NS4xIDg3LjctMzYgMTYuOSA5LjcgMjMuNCA0OC45IDEyLjggMTAwLjQtLjcgMy40LTEuNCA2LjctMi4zIDEwLTIyLjItNS00NC43LTguNi02Ny4zLTEwLjYtMTMtMTguNi0yNy4yLTM2LjQtNDIuNi01My4xIDMuOS0zLjcgNy43LTcuMiAxMS43LTEwLjd6TTE2Ny4yIDMwNy41YzUuMSA4LjcgMTAuMyAxNy40IDE1LjggMjUuOS0xNS42LTEuNy0zMS4xLTQuMi00Ni40LTcuNSA0LjQtMTQuNCA5LjktMjkuMyAxNi4zLTQ0LjUgNC42IDguOCA5LjMgMTcuNSAxNC4zIDI2LjF6TTEzNi45IDE4Ny4yYzE0LjQtMy4yIDI5LjctNS44IDQ1LjYtNy44LTUuMyA4LjMtMTAuNSAxNi44LTE1LjQgMjUuNC00LjkgOC41LTkuNyAxNy4yLTE0LjIgMjYtNi4zLTE0LjktMTEuNi0yOS41LTE2LTQzLjZ6bTI3LjQgNjguOWM2LjYtMTMuOCAxMy44LTI3LjMgMjEuNC00MC42czE1LjgtMjYuMiAyNC40LTM4LjljMTUtMS4xIDMwLjMtMS43IDQ1LjktMS43czMxIC42IDQ1LjkgMS43YzguNSAxMi42IDE2LjYgMjUuNSAyNC4zIDM4LjdzMTQuOSAyNi43IDIxLjcgNDAuNGMtNi43IDEzLjgtMTMuOSAyNy40LTIxLjYgNDAuOC03LjYgMTMuMy0xNS43IDI2LjItMjQuMiAzOS0xNC45IDEuMS0zMC40IDEuNi00Ni4xIDEuNnMtMzAuOS0uNS00NS42LTEuNGMtOC43LTEyLjctMTYuOS0yNS43LTI0LjYtMzlzLTE0LjgtMjYuOC0yMS41LTQwLjZ6bTE4MC42IDUxLjJjNS4xLTguOCA5LjktMTcuNyAxNC42LTI2LjcgNi40IDE0LjUgMTIgMjkuMiAxNi45IDQ0LjMtMTUuNSAzLjUtMzEuMiA2LjItNDcgOCA1LjQtOC40IDEwLjUtMTcgMTUuNS0yNS42em0xNC40LTc2LjVjLTQuNy04LjgtOS41LTE3LjYtMTQuNS0yNi4yLTQuOS04LjUtMTAtMTYuOS0xNS4zLTI1LjIgMTYuMSAyIDMxLjUgNC43IDQ1LjkgOC00LjYgMTQuOC0xMCAyOS4yLTE2LjEgNDMuNHpNMjU2LjIgMTE4LjNjMTAuNSAxMS40IDIwLjQgMjMuNCAyOS42IDM1LjgtMTkuOC0uOS0zOS43LS45LTU5LjUgMCA5LjgtMTIuOSAxOS45LTI0LjkgMjkuOS0zNS44ek0xNDAuMiA1N2MxNi44LTkuOCA1NC4xIDQuMiA5My40IDM5IDIuNSAyLjIgNSA0LjYgNy42IDctMTUuNSAxNi43LTI5LjggMzQuNS00Mi45IDUzLjEtMjIuNiAyLTQ1IDUuNS02Ny4yIDEwLjQtMS4zLTUuMS0yLjQtMTAuMy0zLjUtMTUuNS05LjQtNDguNC0zLjItODQuOSAxMi42LTk0ek0xMTUuNyAzMjAuNmMtNC4yLTEuMi04LjMtMi41LTEyLjQtMy45LTIxLjMtNi43LTQ1LjUtMTcuMy02My0zMS4yLTEwLjEtNy0xNi45LTE3LjgtMTguOC0yOS45IDAtMTguMyAzMS42LTQxLjcgNzcuMi01Ny42IDUuNy0yIDExLjUtMy44IDE3LjMtNS41IDYuOCAyMS43IDE1IDQzIDI0LjUgNjMuNi05LjYgMjAuOS0xNy45IDQyLjUtMjQuOCA2NC41em0xMTYuNiA5OGMtMTYuNSAxNS4xLTM1LjYgMjcuMS01Ni40IDM1LjMtMTEuMSA1LjMtMjMuOSA1LjgtMzUuMyAxLjMtMTUuOS05LjItMjIuNS00NC41LTEzLjUtOTIgMS4xLTUuNiAyLjMtMTEuMiAzLjctMTYuNyAyMi40IDQuOCA0NSA4LjEgNjcuOSA5LjggMTMuMiAxOC43IDI3LjcgMzYuNiA0My4yIDUzLjQtMy4yIDMuMS02LjQgNi4xLTkuNiA4Ljl6bTI0LjUtMjQuM2MtMTAuMi0xMS0yMC40LTIzLjItMzAuMy0zNi4zIDkuNiAuNCAxOS41IC42IDI5LjUgLjYgMTAuMyAwIDIwLjQtLjIgMzAuNC0uNy05LjIgMTIuNy0xOS4xIDI0LjgtMjkuNiAzNi40em0xMzAuNyAzMGMtLjkgMTIuMi02LjkgMjMuNi0xNi41IDMxLjMtMTUuOSA5LjItNDkuOC0yLjgtODYuNC0zNC4yLTQuMi0zLjYtOC40LTcuNS0xMi43LTExLjUgMTUuMy0xNi45IDI5LjQtMzQuOCA0Mi4yLTUzLjYgMjIuOS0xLjkgNDUuNy01LjQgNjguMi0xMC41IDEgNC4xIDEuOSA4LjIgMi43IDEyLjIgNC45IDIxLjYgNS43IDQ0LjEgMi41IDY2LjN6bTE4LjItMTA3LjVjLTIuOCAuOS01LjYgMS44LTguNSAyLjYtNy0yMS44LTE1LjYtNDMuMS0yNS41LTYzLjggOS42LTIwLjQgMTcuNy00MS40IDI0LjUtNjIuOSA1LjIgMS41IDEwLjIgMy4xIDE1IDQuNyA0Ni42IDE2IDc5LjMgMzkuOCA3OS4zIDU4IDAgMTkuNi0zNC45IDQ0LjktODQuOCA2MS40ek0yNTYgMzAxLjhhNDUuOCA0NS44IDAgMSAwIDAtOTEuNiA0NS44IDQ1LjggMCAxIDAgMCA5MS42eiJdCiAgICB9OwogICAgZmFKeGwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAianhsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2N2IiLCAiTTQxMi4yIDMyTDM1LjggMzJDMTYgMzIgMCA0OCAwIDY3LjhMMCA0NDQuMkMwIDQ2NCAxNiA0ODAgMzUuOCA0ODBsMzc2LjQgMGMxOS44IDAgMzUuOC0xNiAzNS44LTM1LjhsMC0zNzYuNEM0NDggNDggNDMyIDMyIDQxMi4yIDMyek0zNzguNiAzMzMuN2MwIDQwLjItMzIuNiA3Mi44LTcyLjggNzIuOGwtMjM1LjYgMGMwLTQwLjIgMzIuNi03Mi44IDcyLjgtNzIuOGwyMzUuNiAwem0wLTExMy45YzAgNDAuMi0zMi42IDcyLjgtNzIuOCA3Mi44bC0yMzUuNiAwYzAtNDAuMiAzMi42LTcyLjggNzIuOC03Mi44bDIzNS42IDB6bTAtMTEzLjljMCA0MC4yLTMyLjYgNzIuOC03Mi44IDcyLjhsLTIzNS42IDBjMC00MC4yIDMyLjYtNzIuOCA3Mi44LTcyLjhsMjM1LjYgMHoiXQogICAgfTsKICAgIGZhU3F1YXJlTGlua2VkaW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxpbmtlZGluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU3ZDAiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTUgMTcwLjJsNjYuNSAwIDAgMjEzLjgtNjYuNSAwIDAtMjEzLjh6bTcxLjctNjcuN2EzOC41IDM4LjUgMCAxIDEgLTc3IDAgMzguNSAzOC41IDAgMSAxIDc3IDB6TTMxNy45IDQxNmwwLTEwNGMwLTI0LjgtLjUtNTYuNy0zNC41LTU2LjctMzQuNiAwLTM5LjkgMjctMzkuOSA1NC45bDAgMTA1LjgtNjYuNCAwIDAtMjEzLjggNjMuNyAwIDAgMjkuMiAuOSAwYzguOS0xNi44IDMwLjYtMzQuNSA2Mi45LTM0LjUgNjcuMiAwIDc5LjcgNDQuMyA3OS43IDEwMS45bDAgMTE3LjItNjYuNCAweiJdCiAgICB9OwogICAgZmFDc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3NzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2YTIiLCAiTTM3Ni4zIDMyTDAgMzIgMCA0MDguM2MwIDE5IDcuNiAzNy4yIDIxIDUwLjdzMzEuNyAyMSA1MC43IDIxbDMwNC42IDBjMTkgMCAzNy4yLTcuNiA1MC43LTIxczIxLTMxLjcgMjEtNTAuN2wwLTMwNC42YzAtMTktNy42LTM3LjItMjEtNTAuN3MtMzEuNy0yMS01MC43LTIxek0zMzIuNCA0MzEuNGMtNy43LTguNS0xMS43LTIwLjctMTItMzYuNmwzMS4zIDBjLjIgMTQuMSA1LjEgMjEuMSAxNC44IDIxLjFjNC45IDAgOC40LTEuNiAxMC41LTQuN2MyLTMuMSAzLTggMy0xNC44YzAtNS40LTEuMy05LjktNC0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMzUxLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNSAxMi41YzcuNSA4LjQgMTEuNSAyMC4zIDExLjggMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQgMjcuNC0xMi4zIDM1LjdjLTguMiA4LjMtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTAxIDBjLTcuNy04LjUtMTEuNy0yMC43LTEyLTM2LjZsMzEuMyAwYy4yIDE0LjEgNS4xIDIxLjEgMTQuOCAyMS4xYzQuOSAwIDguNC0xLjYgMTAuNC00LjdjMi0zLjEgMy04IDMtMTQuOGMwLTUuNC0xLjMtOS45LTMuOS0xMy40Yy0zLjUtNC4yLTguMS03LjUtMTMuMi05LjVMMjUwLjIgMzY4Yy0xMC4zLTQuOS0xNy44LTEwLjgtMjIuNS0xNy42Yy00LjUtNi44LTYuNy0xNi4zLTYuNy0yOC40YzAtMTMuNiA0LTI0LjYgMTEuOC0zMy4xYzguMS04LjUgMTkuMS0xMi43IDMzLjItMTIuN2MxMy42IDAgMjQuMSA0LjIgMzEuNCAxMi41YzcuNiA4LjQgMTEuNSAyMC4zIDExLjkgMzUuOWwtMzAuMSAwYy4yLTUuMS0uOS0xMC4yLTMtMTQuOGMtMS43LTMuNC01LTUuMS0xMC01LjFjLTguOCAwLTEzLjIgNS4yLTEzLjIgMTUuN2MwIDUuMyAxLjEgOS40IDMuMiAxMi42YzMuMSAzLjUgNyA2LjIgMTEuNCA3LjhsMTEuMSA0LjljMTEuNSA1LjMgMTkuNyAxMS43IDI0LjggMTkuNGM1LjEgNy43IDcuNiAxOCA3LjYgMzFjMCAxNS41LTQuMSAyNy40LTEyLjMgMzUuN3MtMTkuNSAxMi41LTM0LjEgMTIuNXMtMjUuNi00LjItMzMuNC0xMi43em0tMTA1LjYgMS4xYy04LjQtNy43LTEyLjUtMTkuMi0xMi41LTM0LjVsMC03NS40YzAtMTUuMiA0LjQtMjYuNyAxMy4yLTM0LjZjOC45LTcuOCAyMC43LTExLjggMzUuMi0xMS44YzE0LjEgMCAyNS4yIDQgMzMuNCAxMmM4LjMgOCAxMi41IDIwIDEyLjUgMzUuOWwwIDYtMzMuMSAwIDAtNS44YzAtNi4xLTEuMy0xMC43LTQtMTMuNmMtMS4xLTEuNS0yLjYtMi43LTQuMy0zLjVzLTMuNS0xLjItNS40LTEuMWMtNS40IDAtOS4yIDEuOC0xMS40IDUuNmMtMi4zIDUuMi0zLjMgMTAuOC0zIDE2LjRsMCA2NS41YzAgMTMuNyA0LjggMjAuNiAxNC40IDIwLjhjNC41IDAgNy45LTEuNiAxMC4yLTQuOGMyLjUtNC4xIDMuNy04LjggMy41LTEzLjZsMC00LjkgMzMuMSAwIDAgNS4xYzAgMTAuNi0yLjEgMTkuNS02LjIgMjYuNmMtNCA2LjktOS45IDEyLjUtMTcuMSAxNmMtNy43IDMuNy0xNi4xIDUuNS0yNC42IDUuM2MtMTQuMiAwLTI1LjUtMy45LTMzLjgtMTEuNnoiXQogICAgfTsKICAgIGZhSGFzaG5vZGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGFzaG5vZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTQ5OSIsICJNMzUuNyAxNzEuMWMtNDYuOSA0Ni00Ni45IDEyMi45IDAgMTY5LjhMMTcxLjYgNDc2LjhjNDYgNDYuOSAxMjIuOSA0Ni45IDE2OS44IDBMNDc3LjMgMzQwLjljNDYuOS00Ni45IDQ2LjktMTIzLjggMC0xNjkuOEwzNDEuNCAzNS4yYy00Ni45LTQ2LjktMTIzLjgtNDYuOS0xNjkuOCAwTDM1LjcgMTcxLjF6TTE5NiAxOTYuNWE4NC41IDg0LjUgMCAxIDEgMTIwIDExOSA4NC41IDg0LjUgMCAxIDEgLTEyMC0xMTl6Il0KICAgIH07CiAgICBmYVJlZGRpdEFsaWVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlZGRpdC1hbGllbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjgxIiwgIk0zNzMgMTM4LjZjLTI1LjIgMC00Ni4zLTE3LjUtNTEuOS00MS0zMC42IDQuMy01NC4yIDMwLjctNTQuMiA2Mi40bDAgLjJjNDcuNCAxLjggOTAuNiAxNS4xIDEyNC45IDM2LjMgMTIuNi05LjcgMjguNC0xNS41IDQ1LjUtMTUuNSA0MS4zIDAgNzQuNyAzMy40IDc0LjcgNzQuNyAwIDI5LjgtMTcuNCA1NS41LTQyLjcgNjcuNS0yLjQgODYuOC05NyAxNTYuNi0yMTMuMiAxNTYuNlM0NS41IDQxMC4xIDQzIDMyMy40Yy0yNS40LTExLjktNDMtMzcuNy00My02Ny43IDAtNDEuMyAzMy40LTc0LjcgNzQuNy03NC43IDE3LjIgMCAzMyA1LjggNDUuNyAxNS42IDM0LTIxLjEgNzYuOC0zNC40IDEyMy43LTM2LjRsMC0uM2MwLTQ0LjMgMzMuNy04MC45IDc2LjgtODUuNSA0LjktMjQuMiAyNi4zLTQyLjQgNTIuMS00Mi40IDI5LjQgMCA1My4zIDIzLjkgNTMuMyA1My4zcy0yMy45IDUzLjMtNTMuMyA1My4zek0xNTcuNSAyNTUuM2MtMjAuOSAwLTM4LjkgMjAuOC00MC4yIDQ3LjlzMTcuMSAzOC4xIDM4IDM4LjEgMzYuNi05LjggMzcuOC0zNi45LTE0LjctNDkuMS0zNS43LTQ5LjFsLjEgMHpNMzk1IDMwMy4xYy0xLjItMjcuMS0xOS4yLTQ3LjktNDAuMi00Ny45cy0zNi45IDIyLTM1LjcgNDkuMSAxNi45IDM2LjkgMzcuOCAzNi45IDM5LjMtMTEgMzgtMzguMWwuMSAwem0tNjAuMSA3MC44YzEuNS0zLjYtMS03LjctNC45LTguMS0yMy0yLjMtNDcuOS0zLjYtNzMuOC0zLjZzLTUwLjggMS4zLTczLjggMy42Yy0zLjkgLjQtNi40IDQuNS00LjkgOC4xIDEyLjkgMzAuOCA0My4zIDUyLjQgNzguNyA1Mi40czY1LjgtMjEuNiA3OC43LTUyLjR6Il0KICAgIH07CiAgICBmYVRpa3RvayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0aWt0b2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA3YiIsICJNNDQ4LjUgMjA5LjljLTQ0IC4xLTg3LTEzLjYtMTIyLjgtMzkuMmwwIDE3OC43YzAgMzMuMS0xMC4xIDY1LjQtMjkgOTIuNnMtNDUuNiA0OC03Ni42IDU5LjYtNjQuOCAxMy41LTk2LjkgNS4zLTYwLjktMjUuOS04Mi43LTUwLjgtMzUuMy01Ni0zOS04OC45IDIuOS02Ni4xIDE4LjYtOTUuMiA0MC01Mi43IDY5LjYtNjcuNyA2Mi45LTIwLjUgOTUuNy0xNmwwIDg5LjljLTE1LTQuNy0zMS4xLTQuNi00NiAuNHMtMjcuOSAxNC42LTM3IDI3LjMtMTQgMjguMS0xMy45IDQzLjkgNS4yIDMxIDE0LjUgNDMuNyAyMi40IDIyLjEgMzcuNCAyNi45IDMxLjEgNC44IDQ2LS4xIDI4LTE0LjQgMzcuMi0yNy4xIDE0LjItMjguMSAxNC4yLTQzLjhsMC0zNDkuNCA4OCAwYy0uMSA3LjQgLjYgMTQuOSAxLjkgMjIuMiAzLjEgMTYuMyA5LjQgMzEuOSAxOC43IDQ1LjdzMjEuMyAyNS42IDM1LjIgMzQuNmMxOS45IDEzLjEgNDMuMiAyMC4xIDY3IDIwLjFsMCA4Ny40eiJdCiAgICB9OwogICAgZmFXb3JkcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAid29yZHByZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxOWEiLCAiTTYxLjcgMTY5LjRsMTAxLjUgMjc4Yy03MS0zNC40LTExOS45LTEwNy4yLTExOS45LTE5MS40IDAtMzAuOSA2LjYtNjAuMSAxOC40LTg2LjZ6bTMzNy45IDc1LjljMC0yNi4zLTkuNC00NC41LTE3LjUtNTguNy0xMC44LTE3LjUtMjAuOS0zMi40LTIwLjktNDkuOSAwLTE5LjYgMTQuOC0zNy44IDM1LjctMzcuOCAuOSAwIDEuOCAuMSAyLjggLjItMzcuOS0zNC43LTg4LjMtNTUuOS0xNDMuNy01NS45LTc0LjMgMC0xMzkuNyAzOC4xLTE3Ny44IDk1LjkgNSAuMiA5LjcgLjMgMTMuNyAuMyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ny41IDIzMC40IDQ2LjYtMTM5LjYtMzMuMS05MC44Yy0xMS41LS43LTIyLjMtMi0yMi4zLTItMTEuNS0uNy0xMC4xLTE4LjIgMS4zLTE3LjUgMCAwIDM1LjEgMi43IDU2IDIuNyAyMi4yIDAgNTYuNy0yLjcgNTYuNy0yLjcgMTEuNS0uNyAxMi44IDE2LjIgMS40IDE3LjUgMCAwLTExLjUgMS4zLTI0LjMgMmw3Ni45IDIyOC43IDIxLjItNzAuOWM5LTI5LjQgMTYtNTAuNSAxNi02OC43ek0yNTkuNyAyNzQuNkwxOTUuOSA0NjAuMWMxOS4xIDUuNiAzOS4yIDguNyA2MC4xIDguNyAyNC44IDAgNDguNS00LjMgNzAuNi0xMi4xLS42LS45LTEuMS0xLjktMS41LTIuOUwyNTkuNyAyNzQuNnptMTgzLTEyMC43Yy45IDYuOCAxLjQgMTQgMS40IDIxLjkgMCAyMS42LTQgNDUuOC0xNi4yIDc2LjJsLTY1IDE4Ny45YzYzLjMtMzYuOSAxMDUuOC0xMDUuNCAxMDUuOC0xODMuOSAwLTM3LTkuNC03MS44LTI2LTEwMi4xek04IDI1NmEyNDggMjQ4IDAgMSAxIDQ5NiAwIDI0OCAyNDggMCAxIDEgLTQ5NiAwem00ODQuNiAwYTIzNi42IDIzNi42IDAgMSAwIC00NzMuMiAwIDIzNi42IDIzNi42IDAgMSAwIDQ3My4yIDB6Il0KICAgIH07CiAgICBmYUlkZWFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImlkZWFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMTMiLCAiTTkzLjggMTY1LjVhNDkuMSA0OS4xIDAgMSAwIDAgOTguMSA0OS4xIDQ5LjEgMCAxIDAgMC05OC4xek01NC4zIDQyNS44bDc4LjkgMCAwLTE0MC41LTc4LjkgMCAwIDE0MC41ek0yMDUuOCAyMTQuMmMwLTIwLTEwLTIyLjUtMTguNy0yMi41bC0xNCAwIDAgNDUuOCAxNCAwYzkuNyAwIDE4LjctMi44IDE4LjctMjMuM3ptMjAxLjcgNDZsMC05MS4zIDIyLjggMCAwIDY4LjYgMzMuNyAwQzQ1NC42IDExMy4xIDM1Ni44IDg2LjIgMjY3LjggODYuMmwtOTQuOCAwIDAgODIuOCAxNCAwYzI1LjYgMCA0MS41IDE3LjQgNDEuNSA0NS4zIDAgMjguOC0xNS41IDQ2LTQxLjUgNDZsLTE0IDAgMCAxNjUuNiA5NC44IDBjMTQ0LjYgMCAxOTQuOS02Ny4yIDE5Ni43LTE2NS42bC01Ny4xIDB6bS0xMDkuOCAwbC01Ni4yIDAgMC05MS4yIDU0LjQgMCAwIDIyLjctMzEuNyAwIDAgMTAuNiAzMCAwIDAgMjIuNy0zMCAwIDAgMTIuNSAzMy41IDAgMCAyMi43em03NC43IDBsLTUuMi0xNy43LTI5LjcgMC01LjIgMTcuNy0yMy43IDAgMjcuNS05MS4zIDMyLjMgMCAyNy41IDkxLjMtMjMuNyAwek0yNjcuOCAzMkwuMSAzMiAuMSA0ODAgMjY3LjggNDgwYzE2MS44IDAgMjUxLTc5LjcgMjUxLTIyNC41IDAtODMuNS0zMi42LTIyMy41LTI1MS0yMjMuNXptMCA0MjYuOWwtMjQ2LjYgMCAwLTQwNS45IDI0Ni42IDBjMTQyLjEgMCAyMjkuOSA2NC42IDIyOS45IDIwMi40IDAgMTM0LjEtODEgMjAzLjQtMjI5LjkgMjAzLjR6bTgzLjktMjY0LjlsLTcuNSAyNS44IDE2LjQgMC03LjUtMjUuOC0xLjQgMHoiXQogICAgfTsKICAgIGZhUGllZFBpcGVyUHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1wcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWE3IiwgIk0yMDUuMyAxNzQuNmMwIDIxLjEtMTQuMiAzOC4xLTMxLjcgMzguMS03LjEgMC0xMi44LTEuMi0xNy4yLTMuN2wwLTY4YzQuNC0yLjcgMTAuMS00LjIgMTcuMi00LjIgMTcuNSAwIDMxLjcgMTYuOSAzMS43IDM3Ljh6bTUyLjYgNjdjLTcuMSAwLTEyLjggMS41LTE3LjIgNC4ybDAgNjhjNC40IDIuNSAxMC4xIDMuNyAxNy4yIDMuNyAxNy40IDAgMzEuNy0xNi45IDMxLjctMzcuOCAwLTIxLjEtMTQuMy0zOC4xLTMxLjctMzguMXpNNDQ4IDgwbDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MEMwIDUzLjUgMjEuNSAzMiA0OCAzMmwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHpNMTg1IDI1NS4xYzQxIDAgNzQuMi0zNS42IDc0LjItNzkuNlMyMjYgOTUuOSAxODUgOTUuOWMtMTIgMC0yNC4xIDMuMi0zNC42IDguOGwtNDUuNyAwIDAgMjA2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4xIDE4LjEgNC44IDI4LjUgNC44em0xNTguNCAyNS4zYzAtNDQtMzMuMi03OS42LTczLjktNzkuNi0zLjIgMC02LjQgLjItOS42IC43LTMuNyAxMi41LTEwLjEgMjMuOC0xOS4yIDMzLjQtMTMuOCAxNS0zMi4yIDIzLjgtNTEuOCAyNC44bDAgMTU2LjMgNTEuOC0xMC4xIDAtNTAuNmM4LjYgMy4yIDE4LjIgNC43IDI4LjcgNC43IDQwLjggMCA3NC0zNS42IDc0LTc5LjZ6Il0KICAgIH07CiAgICBmYVVzc3VubmFoID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVzc3VubmFoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MDciLCAiTTQ5Ni45IDI2OC4xYzAgNjMuOS0yNS40IDEyNS4yLTcwLjYgMTcwLjNTMzE5LjkgNTA5IDI1NiA1MDkgMTMwLjggNDgzLjUgODUuNyA0MzguNCAxNS4xIDMzMS45IDE1LjEgMjY4YzAtNjMuOSAyNS40LTEyNS4yIDcwLjYtMTcwLjRTMTkyLjIgMjcuMSAyNTYuMSAyNy4xIDM4MS4zIDUyLjQgNDI2LjUgOTcuNiA0OTcgMjA0LjEgNDk3IDI2OGwtLjEgLjF6TTM5LjUgMjY4Yy0uNiAyOC44IDQuNSA1Ny41IDE1LjEgODQuM3MyNi40IDUxLjIgNDYuNiA3MS44IDQ0LjIgMzcgNzAuOCA0OC4xIDU1LjEgMTYuOSA4My45IDE2LjkgNTcuNC01LjggODMuOS0xNi45IDUwLjYtMjcuNSA3MC44LTQ4LjEgMzYtNDUgNDYuNi03MS44IDE1LjctNTUuNSAxNS4xLTg0LjNjLjYtMjguOC00LjUtNTcuNS0xNS4xLTg0LjNzLTI2LjQtNTEuMi00Ni42LTcxLjgtNDQuMi0zNy03MC44LTQ4LjEtNTUuMS0xNi45LTgzLjktMTYuOS01Ny40IDUuOC04My45IDE2LjktNTAuNiAyNy41LTcwLjggNDguMS0zNiA0NS00Ni42IDcxLjgtMTUuNyA1NS41LTE1LjEgODQuM3ptMzg1LjkgNjMuM2MtMTIuNyAwLTIxLjYtMS45LTI2LjctNS45LTUuNS00LjMtOC4yLTEyLjMtOC4yLTIzLjhsMC05Ni41YzAtNi41LTUuMi0yMC4yLTE1LjctNDEuMiA3IDAgMTctOS4xIDMwLTI3LjJsMCAxNDcuOGMwIDExIDIuNCAxOS40IDcgMjUuMyAzLjcgNC43IDEwLjEgOC45IDE5IDEyLjYgMS4yIC40IDIuNiAuOSA0LjEgMS40IDIuOSAuOSA2LjMgMi4xIDEwLjMgMy41LTEuOCAyLjctOC4zIDQtMTkuOSA0bC4xIDB6bS0yMTkgMGMtMS4zIDIuNC0zLjYgNS41LTYuOCA5LjRsLTE4LjUgMjIuNWMtMS02LjEtNC0xMy05LjMtMjAuNnMtOS43LTExLjQtMTMuNC0xMS40bC04OS44IDBjMy4zLTUuMyA0LjktOC44IDQuOS0xMC44cy0uOC01LjMtMi40LTkuN2MtMS41LTQuNC0yLjQtOC41LTIuNC0xMi40IDAtNy40IDIuMS0xMy45IDYuMy0xOS4zbDIwLTI1LjYtNy4xLTE3LjcgMTYuMS0xOS44IDYuNyAxNi44IDgtMTAuM2MtMS44IDYuNC0yLjYgMTIuMy0yLjYgMTcuNyAwIDQuMiAyLjggMTMuMyA4LjMgMjcuM2wxNi4yIDQwLjcgMTcuNyAwYzIuOCAuNCA3LjcgNSAxNC42IDEzLjkgMS44IDIuNCA0LjMgNS44IDcuNyAxMC4yIDEuNCAxLjkgMi45IDMuOSA0LjYgNi4xIDEuMy0yLjMgMi00LjYgMi03LjEgMC0yLTEuMy02LjYtNC0xMy40TDE3OCAzMDQuMWMtNC0xMC42LTYuMS0xNy43LTYuMS0yMS4zIDAtNi4zIDEuOS0xMi4zIDUuOC0xNy45IC41LS42IDEtMS4zIDEuNS0xLjkgNC40LTUuNiA4LjgtMTEuMSAxMy4zLTE2LjUtMS4xIDQuNi0xLjcgOC43LTEuNyAxMiAwIDMuNyAxLjcgOS45IDUuMSAxOC44bDcuOSAyMC40YzEuOSA0LjcgMyA4LjIgMy43IDEwLjNsMjUuOSAwLS45LTIuNmMtMS40LTMuOS00LTctNy43LTkuM2wxNS42LTIwLjEgMTIuMyAzMiAxMy40IDAtNi4xLTE1LjhjLTEuNS0zLjktNC03LTcuNy05LjNsMTUuNy0yMC4xIDE3LjMgNDUuMiAxMy40IDAtMTEuNC0yOS40Yy0xLjUtMy45LTQtNy03LjctOS4zbDE1LjYtMjAgMjIuNCA1OC43IDI2LjIgMGMxLjUgMCAzLTEuMSA0LjUtMy4xczIuMi00LjEgMi4yLTYuM2wwLTkzLjVjMC02LjUtNC41LTIwLjMtMTMuNy00MS4yIDUuNCAwIDE0LjEtOS4xIDI2LjItMjcuMmwwIDE2My41YzAgNy4yIC42IDEyIDEuNyAxNC42IDEuNiAzLjQgNS4zIDYuMiAxMS4xIDguMi0zLjkgNS42LTguNyA4LjUtMTQuNSA4LjVsLTE1NC44IDAtLjEtLjJ6bS05OC00NGMtMi43LTYuNy00LTExLjctNC0xNS0uNiAxLjItMi40IDMuNy01LjQgNy42LTEuNCAxLjktMi4yIDMuNy0yLjIgNS4zIDAgMi42IC44IDUuNyAyLjIgOS4zbDUuNiAxMy45YzUgMCA5IDAgMTEuOS0uMWwtOC4yLTIwLjkgLjEtLjF6bTEzLjUtNzIuNGMtMy01LjItNy05LjMtMTEuOS0xMS45LTMuNS0xLjktNS4zLTQuMy01LjMtNy40IDAtMi40IDQuNi04LjYgMTQtMTguMyAuMiAzLjggMS45IDcuNiA0LjkgMTEuMiAzLjEgMy42IDQuNiA3IDQuNiAxMC4xIDAgMi42LTIuMSA4LTYuMiAxNi4zbC0uMSAwem0tMjcuNiAwYy0zLTUuMi03LTkuMy0xMS45LTExLjktMy41LTEuOS01LjMtNC4zLTUuMy03LjQgMC0yLjQgNC42LTguNiAxNC0xOC4zIC4yIDMuOCAxLjkgNy42IDQuOSAxMS4yIDMuMSAzLjYgNC42IDcgNC42IDEwLjEgMCAyLjYtMi4xIDgtNi4yIDE2LjNsLS4xIDB6bTg3IDI3LjVjLTMtNS4yLTctOS4zLTExLjktMTEuOS0zLjUtMS45LTUuMy00LjMtNS4zLTcuNCAwLTIuNCA0LjYtOC42IDE0LTE4LjMgLjIgMy44IDEuOSA3LjYgNC45IDExLjIgMy4xIDMuNiA0LjYgNyA0LjYgMTAuMSAwIDIuNi0yLjEgOC02LjIgMTYuM2wtLjEgMHoiXQogICAgfTsKICAgIGZhRm9ydEF3ZXNvbWVBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydC1hd2Vzb21lLWFsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2EzIiwgIk0yMDggMjM3LjRsLTIyLjIgMGMtMi4xIDAtMy43IDEuNi0zLjcgMy43bDAgNTEuN2MwIDIuMSAxLjYgMy43IDMuNyAzLjdsMjIuMiAwYzIuMSAwIDMuNy0xLjYgMy43LTMuN2wwLTUxLjdjMC0yLjEtMS42LTMuNy0zLjctMy43em0xMTguMiAwbC0yMi4yIDBjLTIuMSAwLTMuNyAxLjYtMy43IDMuN2wwIDUxLjdjMCAyLjEgMS42IDMuNyAzLjcgMy43bDIyLjIgMGMyLjEgMCAzLjctMS42IDMuNy0zLjdsMC01MS43Yy0uMS0yLjEtMS43LTMuNy0zLjctMy43em0xMzItMTI1LjFjLTIuMy0zLjItNC42LTYuNC03LjEtOS41LTkuOC0xMi41LTIwLjgtMjQtMzIuOC0zNC40LTQuNS0zLjktOS4xLTcuNi0xMy45LTExLjItMS42LTEuMi0zLjItMi4zLTQuOC0zLjUtMjcuNi0xOS42LTU5LjMtMzMuNy05My42LTQwLjctMTYuMi0zLjMtMzIuOS01LTUwLTVzLTMzLjkgMS43LTUwIDVjLTM0LjMgNy4xLTY2IDIxLjItOTMuMyA0MC44LTEuNiAxLjEtMy4yIDIuMy00LjggMy41LTQuOCAzLjYtOS40IDcuMy0xMy45IDExLjItMyAyLjYtNS45IDUuMy04LjggOHMtNS43IDUuNS04LjQgOC40Yy01LjUgNS43LTEwLjcgMTEuOC0xNS42IDE4LTIuNCAzLjEtNC44IDYuMy03LjEgOS41LTI4LjkgNDAuNi00NS44IDkwLjEtNDUuOCAxNDMuNiAwIDIgLjEgNCAuMSA2IC4xIC43IC4xIDEuMyAuMSAyIC4xIDEuMyAuMSAyLjcgLjIgNCAwIC44IC4xIDEuNSAuMSAyLjMgMCAxLjMgLjEgMi41IC4yIDMuNyAuMSAuOCAuMSAxLjYgLjIgMi40IC4xIDEuMSAuMiAyLjMgLjMgMy41IDAgLjggLjEgMS42IC4yIDIuNCAuMSAxLjIgLjMgMi40IC40IDMuNiAuMSAuOCAuMiAxLjUgLjMgMi4zIC4xIDEuMyAuMyAyLjYgLjUgMy45IC4xIC42IC4yIDEuMyAuMyAxLjlsLjkgNS43Yy4xIC42IC4yIDEuMSAuMyAxLjcgLjMgMS4zIC41IDIuNyAuOCA0IC4yIC44IC4zIDEuNiAuNSAyLjQgLjIgMSAuNSAyLjEgLjcgMy4yIC4yIC45IC40IDEuNyAuNiAyLjYgLjIgMSAuNCAyIC43IDMgLjIgLjkgLjUgMS44IC43IDIuNyAuMyAxIC41IDEuOSAuOCAyLjkgLjMgLjkgLjUgMS44IC44IDIuNyAuMiAuOSAuNSAxLjkgLjggMi44cy41IDEuOCAuOCAyLjdjLjMgMSAuNiAxLjkgLjkgMi44IC42IDEuNiAxLjEgMy4zIDEuNyA0LjkgLjQgMSAuNyAxLjkgMSAyLjggLjMgMSAuNyAyIDEuMSAzIC4zIC44IC42IDEuNSAuOSAyLjNsMS4yIDNjLjMgLjcgLjYgMS41IC45IDIuMiAuNCAxIC45IDIgMS4zIDNsLjkgMi4xYy41IDEgLjkgMiAxLjQgMyAuMyAuNyAuNiAxLjMgLjkgMiAuNSAxIDEgMi4xIDEuNSAzLjEgLjIgLjYgLjUgMS4xIC44IDEuNyAuNiAxLjEgMS4xIDIuMiAxLjcgMy4zIC4xIC4yIC4yIC4zIC4zIC41IDIuMiA0LjEgNC40IDguMiA2LjggMTIuMiAuMiAuNCAuNSAuOCAuNyAxLjIgLjcgMS4xIDEuMyAyLjIgMiAzLjMgLjMgLjUgLjYgLjkgLjkgMS40IC42IDEuMSAxLjMgMi4xIDIgMy4yIC4zIC41IC42IC45IC45IDEuNCAuNyAxLjEgMS40IDIuMSAyLjEgMy4yIC4yIC40IC41IC44IC44IDEuMiAuNyAxLjEgMS41IDIuMiAyLjMgMy4zIC4yIC4yIC4zIC41IC41IC43IDM3LjUgNTEuNyA5NC40IDg4LjUgMTYwIDk5LjQgLjkgLjEgMS43IC4zIDIuNiAuNCAxIC4yIDIuMSAuNCAzLjEgLjVzMS45IC4zIDIuOCAuNGMxIC4yIDIgLjMgMyAuNCAuOSAuMSAxLjkgLjIgMi45IC4zczEuOSAuMiAyLjkgLjMgMi4xIC4yIDMuMSAuM2MuOSAuMSAxLjggLjEgMi43IC4yIDEuMSAuMSAyLjMgLjEgMy40IC4yIC44IDAgMS43IC4xIDIuNSAuMSAxLjMgMCAyLjYgLjEgMy45IC4xIC43IC4xIDEuNCAuMSAyLjEgLjEgMiAuMSA0IC4xIDYgLjFzNC0uMSA2LS4xYy43IDAgMS40LS4xIDIuMS0uMSAxLjMgMCAyLjYgMCAzLjktLjEgLjggMCAxLjctLjEgMi41LS4xIDEuMS0uMSAyLjMtLjEgMy40LS4yIC45IDAgMS44LS4xIDIuNy0uMiAxLS4xIDIuMS0uMiAzLjEtLjNzMS45LS4yIDIuOS0uM2MuOS0uMSAxLjktLjIgMi45LS4zczItLjMgMy0uNCAxLjktLjMgMi44LS40YzEtLjIgMi4xLS4zIDMuMS0uNSAuOS0uMSAxLjctLjMgMi42LS40IDY1LjYtMTEgMTIyLjUtNDcuNyAxNjAuMS0xMDIuNCAuMi0uMiAuMy0uNSAuNS0uNyAuOC0xLjEgMS41LTIuMiAyLjMtMy4zIC4yLS40IC41LS44IC44LTEuMiAuNy0xLjEgMS40LTIuMSAyLjEtMy4yIC4zLS41IC42LS45IC45LTEuNCAuNi0xLjEgMS4zLTIuMSAyLTMuMiAuMy0uNSAuNi0uOSAuOS0xLjQgLjctMS4xIDEuMy0yLjIgMi0zLjMgLjItLjQgLjUtLjggLjctMS4yIDIuNC00IDQuNi04LjEgNi44LTEyLjIgLjEtLjIgLjItLjMgLjMtLjUgLjYtMS4xIDEuMS0yLjIgMS43LTMuMyAuMi0uNiAuNS0xLjEgLjgtMS43IC41LTEgMS0yLjEgMS41LTMuMSAuMy0uNyAuNi0xLjMgLjktMiAuNS0xIDEtMiAxLjQtM2wuOS0yLjFjLjUtMSAuOS0yIDEuMy0zIC4zLS43IC42LTEuNSAuOS0yLjJsMS4yLTNjLjMtLjggLjYtMS41IC45LTIuMyAuNC0xIC43LTIgMS4xLTNzLjctMS45IDEtMi44Yy42LTEuNiAxLjItMy4zIDEuNy00LjkgLjMtMSAuNi0xLjkgLjktMi44cy41LTEuOCAuOC0yLjdjLjItLjkgLjUtMS45IC44LTIuOHMuNi0xLjggLjgtMi43Yy4zLTEgLjUtMS45IC44LTIuOSAuMi0uOSAuNS0xLjggLjctMi43IC4yLTEgLjUtMiAuNy0zIC4yLS45IC40LTEuNyAuNi0yLjYgLjItMSAuNS0yLjEgLjctMy4yIC4yLS44IC4zLTEuNiAuNS0yLjQgLjMtMS4zIC42LTIuNyAuOC00IC4xLS42IC4yLTEuMSAuMy0xLjdsLjktNS43Yy4xLS42IC4yLTEuMyAuMy0xLjkgLjEtMS4zIC4zLTIuNiAuNS0zLjkgLjEtLjggLjItMS41IC4zLTIuMyAuMS0xLjIgLjMtMi40IC40LTMuNiAwLS44IC4xLTEuNiAuMi0yLjQgLjEtMS4xIC4yLTIuMyAuMy0zLjUgLjEtLjggLjEtMS42IC4yLTIuNCAuMSAxLjcgLjEgLjUgLjItLjcgMC0uOCAuMS0xLjUgLjEtMi4zIC4xLTEuMyAuMi0yLjcgLjItNCAuMS0uNyAuMS0xLjMgLjEtMiAuMS0yIC4xLTQgLjEtNiAwLTUzLjUtMTYuOS0xMDMtNDUuOC0xNDMuN3pNNDQ4IDM3MS41Yy05LjQgMTUuNS0yMC42IDI5LjktMzMuNiA0Mi45LTIwLjYgMjAuNi00NC41IDM2LjctNzEuMiA0OC0xMy45IDUuOC0yOC4yIDEwLjMtNDIuOSAxMy4ybDAtNzUuOGMwLTU4LjYtODguNi01OC42LTg4LjYgMGwwIDc1LjhjLTE0LjctMi45LTI5LTcuMy00Mi45LTEzLjItMjYuNy0xMS4zLTUwLjYtMjcuNC03MS4yLTQ4LTEzLTEzLTI0LjItMjcuNC0zMy42LTQyLjlsMC03MS4zYzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOCAyOS42IDAgMC0xNDRjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjEgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCAyNS45IDI5LjUgMCAwLTI1LjljMC00LjggNi41LTMuNyA5LjUtMy43bDAtOTAuMmMtNC40LTItNy40LTYuNy03LjQtMTEuNSAwLTE2LjggMjUuNC0xNi44IDI1LjQgMCAwIDQuOC0zIDkuNC03LjQgMTEuNWwwIDMuOWM2LjMtMS40IDEyLjctMi4zIDE5LjItMi4zIDkuNCAwIDE4LjQgMy41IDI2LjMgMy41IDcuMiAwIDE1LjItMy41IDE5LjQtMy41IDIuMSAwIDMuNyAxLjYgMy43IDMuN2wwIDQ4LjRjMCA1LjYtMTguNyA2LjUtMjIuNCA2LjUtOC42IDAtMTYuNi0zLjUtMjUuNC0zLjUtNyAwLTE0LjEgMS4yLTIwLjggMi44bDAgMzAuN2MzIDAgOS41LTEuMSA5LjUgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4yIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMjUuOSAyOS41IDAgMC0yNS45YzAtMi4xIDEuNi0zLjcgMy43LTMuN2wyMi4xIDBjMi4xIDAgMy43IDEuNiAzLjcgMy43bDAgMTQ0IDI5LjUgMCAwLTI1LjhjMC0yLjEgMS42LTMuNyAzLjctMy43bDIyLjIgMGMyLjEgMCAzLjcgMS42IDMuNyAzLjdsMCA3MS4zeiJdCiAgICB9OwogICAgZmFCdXJvbW9iZWxleHBlcnRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1cm9tb2JlbGV4cGVydGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3ZiIsICJNMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMTIwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTE2MCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNMjgwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTMyMCAzMmwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHpNNDQwIDE1MmwtMTEyIDAgMC0xMTIgMTEyIDAgMCAxMTJ6TTAgMTkybDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0xMjAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek0yODAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnptNDAtMTIwbDAgMTI4IDEyOCAwIDAtMTI4LTEyOCAwek00NDAgMzEybC0xMTIgMCAwLTExMiAxMTIgMCAwIDExMnpNMCAzNTJsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTEyMCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6TTI4MCA0NzJsLTExMiAwIDAtMTEyIDExMiAwIDAgMTEyem00MC0xMjBsMCAxMjggMTI4IDAgMC0xMjgtMTI4IDB6Il0KICAgIH07CiAgICBmYUJpbGliaWxpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJpbGliaWxpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUzZDkiLCAiTTQ4OC42IDEwNC4xYzE2LjcgMTguMSAyNC40IDM5LjcgMjMuMyA2NS43bDAgMjAyLjRjLS40IDI2LjQtOS4yIDQ4LjEtMjYuNSA2NS4xLTE3LjIgMTctMzkuMSAyNS45LTY1LjUgMjYuN0w5MiA0NjRjLTI2LjQtLjgtNDguMi05LjgtNjUuMy0yNy4yLTE3LjEtMTcuNC0yNi00MC4zLTI2LjctNjguNkwwIDE2OS44Yy44LTI2IDkuNy00Ny42IDI2LjctNjUuNyAxNy4xLTE2LjMgMzguOC0yNS4zIDY1LjMtMjYuMWwyOS40IDAtMjUuNC0yNS44Yy01LjctNS43LTguNi0xMy04LjYtMjEuOHMyLjktMTYuMSA4LjYtMjEuOCAxMy04LjYgMjEuOS04LjYgMTYuMSAyLjkgMjEuOSA4LjZsNzMuMyA2OS40IDg4IDAgNzQuNS02OS40QzM4MS43IDIuOSAzODkuMiAwIDM5OCAwczE2LjEgMi45IDIxLjkgOC42YzUuNyA1LjcgOC42IDEzIDguNiAyMS44cy0yLjkgMTYuMS04LjYgMjEuOEwzOTQuNiA3OCA0MjMuOSA3OGMyNi40IC44IDQ4IDkuOCA2NC43IDI2LjF6bS0zOC44IDY5LjdjLS40LTkuNi0zLjctMTcuNC0xMC43LTIzLjUtNS4yLTYuMS0xNC05LjQtMjIuNy05LjhsLTMyMC40IDBjLTkuNiAuNC0xNy40IDMuNy0yMy42IDkuOC02LjEgNi4xLTkuNCAxMy45LTkuOCAyMy41bDAgMTk0LjRjMCA5LjIgMy4zIDE3IDkuOCAyMy41czE0LjQgOS44IDIzLjYgOS44bDMyMC40IDBjOS4yIDAgMTctMy4zIDIzLjMtOS44czkuNy0xNC4zIDEwLjEtMjMuNWwwLTE5NC40ek0xODUuNSAyMTYuNWM2LjMgNi4zIDkuNyAxNC4xIDEwLjEgMjMuMmwwIDMzLjNjLS40IDkuMi0zLjcgMTYuOS05LjggMjMuMi02LjIgNi4zLTE0IDkuNS0yMy42IDkuNXMtMTcuNS0zLjItMjMuNi05LjUtOS40LTE0LTkuOC0yMy4ybDAtMzMuM2MuNC05LjEgMy44LTE2LjkgMTAuMS0yMy4yczEzLjItOS42IDIzLjMtMTBjOS4yIC40IDE3IDMuNyAyMy4zIDEwem0xOTEuNSAwYzYuMyA2LjMgOS43IDE0LjEgMTAuMSAyMy4ybDAgMzMuM2MtLjQgOS4yLTMuNyAxNi45LTkuOCAyMy4ycy0xNCA5LjUtMjMuNiA5LjUtMTcuNC0zLjItMjMuNi05LjVjLTctNi4zLTkuNC0xNC05LjctMjMuMmwwLTMzLjNjLjMtOS4xIDMuNy0xNi45IDEwLTIzLjJzMTQuMS05LjYgMjMuMy0xMGM5LjIgLjQgMTcgMy43IDIzLjMgMTB6Il0KICAgIH07CiAgICBmYU5lb3MgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibmVvcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNjEyIiwgIk0zODMuOCA1MTJsLTk1LjEgMC0xMDguMi0xNTQuNSAwIDkxLjEtODYuNCA2My40LTk3LjcgMCAwLTQ4Mi4yIDQwLjUtMjkuOCAxMDggMCAxMjMuNyAxNzYuMSAwLTExMi43IDg2LjQtNjMuNCA5Ny43IDAgMCA0NjEuNS02OC45IDUwLjV6TTcuMiAzNS4zbDAgNDYwLjcgNzItNTIuOSAwLTI0OS4xIDIxNS41IDMwNy42IDg0LjggMCA1Mi40LTM4LjItNzguMyAwLTMxNi4xLTQ1MC41LTMwLjIgMjIuM3pNODkuNyA1MDEuOWw4MC01OC44IDAtMTAxLTc5LjgtMTE0LjQgMCAyMjAuOS03Mi42IDUzLjMgNzIuMyAwIDAgMHpNNDkgMTAuOGwzMTAuNiA0NDIuNiA4Mi40IDAgMC00NDIuNi03OS44IDAgMCAzMTcuNi0yMjIuOS0zMTcuNi05MC4zIDB6TTI3OS40IDE5MS42bDcyIDEwMi44IDAtMjc4LjUtNzIgNTMgMCAxMjIuN3oiXQogICAgfTsKICAgIGZhRGV2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImRldiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNmNjIiwgIk0xMjAuMSAyMDguM2MtMy45LTIuOS03LjgtNC4zLTExLjYtNC4zbC0xNy40IDAgMCAxMDQuNSAxNy40IDBjMy45IDAgNy44LTEuNCAxMS42LTQuM3M1LjgtNy4zIDUuOC0xMy4xbDAtNjkuN2MwLTUuOC0yLTEwLjItNS44LTEzLjF6TTQwNC4xIDMyTDQzLjkgMzJDMTkuNyAzMiAuMSA1MS42IDAgNzUuOEwwIDQzNi4yQy4xIDQ2MC40IDE5LjcgNDgwIDQzLjkgNDgwbDM2MC4yIDBjMjQuMiAwIDQzLjgtMTkuNiA0My45LTQzLjhsMC0zNjAuNEM0NDcuOSA1MS42IDQyOC4zIDMyIDQwNC4xIDMyek0xNTQuMiAyOTEuMmMwIDE4LjgtMTEuNiA0Ny4zLTQ4LjQgNDcuM2wtNDYuNCAwIDAtMTY1LjUgNDcuNCAwYzM1LjQgMCA0Ny40IDI4LjUgNDcuNCA0Ny4zbDAgNzAuOXptMTAwLjctODguN2wtNTMuMyAwIDAgMzguNCAzMi42IDAgMCAyOS42LTMyLjYgMCAwIDM4LjQgNTMuMyAwIDAgMjkuNi02Mi4yIDBjLTExLjIgLjMtMjAuNC04LjUtMjAuNy0xOS43bDAtMTI1LjFjLS4zLTExLjEgOC42LTIwLjQgMTkuNy0yMC43bDYzLjIgMCAwIDI5LjV6TTM1OC41IDMxNy44Yy0xMy4yIDMwLjctMzYuOCAyNC42LTQ3LjQgMGwtMzguNS0xNDQuOCAzMi42IDAgMjkuNyAxMTMuNyAyOS42LTExMy43IDMyLjYgMC0zOC41IDE0NC44eiJdCiAgICB9OwogICAgZmFIb3RqYXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaG90amFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYjEiLCAiTTM2MS44IDBjMCAxMzEuNi04MC43IDE3Ni44LTE0MC4yIDIwOS40LS42IC4zLTEuMSAuNi0xLjYgLjktNTMuOCAzMC4yLTg4LjcgNDkuOC04OS42IDEyMmwtOTguMSAwYzAtMTMxLjUgODAuNy0xNzYuNyAxNDAuMi0yMDkuMyA1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OSAwek0zMDEuMyAzMDIuNmM1NC44LTI5LjggOTAuMy01MCA5MC4zLTEyM2w5OCAwYzAgMTMxLjYtODAuNyAxNzYuNy0xNDAuMiAyMDkuNC01NC44IDI5LjgtOTAuMyA1MC05MC4zIDEyM2wtOTggMGMwLTEzMS42IDgwLjctMTc2LjggMTQwLjItMjA5LjR6Il0KICAgIH07CiAgICBmYURvY2h1YiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkb2NodWIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5NCIsICJNNDEzLjkgMTYwTDI3MiAxNjAgMjcyIDE5LjYgNDEzLjkgMTYwek0zMjAgMTkybDAgMTMwYzAgNjYuOC0zNi41IDEwMC4xLTExMy4zIDEwMC4xbC05NC43IDAgMC0zMzcuMyA5NC43IDBjMTIgMCAyMy4xIC44IDMzLjEgMi41bDAtODRDMjI4LjkgMS4xIDIxNy40IDAgMjA1LjIgMEwxNiAwIDE2IDUxMiAyMDUuMiA1MTJDMzQ1LjcgNTEyIDQxNiA0NDcuNCA0MTYgMzE4LjFsMC0xMjYuMS05NiAweiJdCiAgICB9OwogICAgZmFWaW1lbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ2aW1lbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDBhIiwgIk00MDMuMiAzMkw0NC44IDMyQzIwLjEgMzIgMCA1Mi4xIDAgNzYuOEwwIDQzNS4yQzAgNDU5LjkgMjAuMSA0ODAgNDQuOCA0ODBsMzU4LjQgMGMyNC43IDAgNDQuOC0yMC4xIDQ0LjgtNDQuOGwwLTM1OC40QzQ0OCA1Mi4xIDQyNy45IDMyIDQwMy4yIDMyek0zNzcgMTgwLjhjLTEuNCAzMS41LTIzLjQgNzQuNy02NiAxMjkuNC00NCA1Ny4yLTgxLjMgODUuOC0xMTEuNyA4NS44LTE4LjkgMC0zNC44LTE3LjQtNDcuOS01Mi4zLTI1LjUtOTMuMy0zNi40LTE0OC01Ny40LTE0OC0yLjQgMC0xMC45IDUuMS0yNS40IDE1LjJMNTMuNCAxOTEuM2MzNy4zLTMyLjggNzIuOS02OS4yIDk1LjItNzEuMiAyNS4yLTIuNCA0MC43IDE0LjggNDYuNSA1MS43IDIwLjcgMTMxLjIgMjkuOSAxNTEgNjcuNiA5MS42IDEzLjUtMjEuNCAyMC44LTM3LjcgMjEuOC00OC45IDMuNS0zMy4yLTI1LjktMzAuOS00NS44LTIyLjQgMTUuOS01Mi4xIDQ2LjMtNzcuNCA5MS4yLTc2IDMzLjMgLjkgNDkgMjIuNSA0Ny4xIDY0Ljd6Il0KICAgIH07CiAgICBmYU1heGNkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYXhjZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNiIsICJNNDYxLjEgNDQyLjdsLTk3LjQgMCA1MS45LTI0Mi43YzIuMy0xMC4yIC45LTE5LjUtNC40LTI1LjctNS02LjEtMTMuNy05LjYtMjQuMi05LjZsLTQ5LjMgMC01OS41IDI3OC05Ny40IDAgNTkuNS0yNzgtODMuNCAwLTU5LjUgMjc4LTk3LjQgMCA1OS41LTI3OC00NC42LTk1LjQgMzcyLjEgMGMzOS40IDAgNzUuMyAxNi4zIDk4LjMgNDQuOSAyMy4zIDI4LjYgMzEuOCA2Ny40IDIzLjYgMTA1LjlMNDYxLjEgNDQyLjd6Il0KICAgIH07CiAgICBmYVNxdWFyZUZvbnRBd2Vzb21lU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mb250LWF3ZXNvbWUtc3Ryb2tlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZvbnQtYXdlc29tZS1hbHQiXSwgImYzNWMiLCAiTTY0IDY0QzQ2LjMgNjQgMzIgNzguMyAzMiA5NmwwIDMyMGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyMGMwLTE3LjctMTQuMy0zMi0zMi0zMkw2NCA2NHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTE1NCA1OGMwIDkuMy00LjggMTcuNC0xMi4xIDIybDE4OC45IDBjNy4zIDAgMTMuMiA1LjkgMTMuMiAxMy4yIDAgMS44LS40IDMuNy0xLjEgNS40TDMxMiAyNjQgMzQyLjkgMzMzLjRjLjggMS43IDEuMSAzLjUgMS4xIDUuNCAwIDcuMy01LjkgMTMuMi0xMy4yIDEzLjJsLTE4Ni44IDAgMCAzMi0zMiAwIDAtMjA5LjVjLTYuMS00LjgtMTAtMTIuMi0xMC0yMC41IDAtMTQuNCAxMS42LTI2IDI2LTI2czI2IDExLjYgMjYgMjZ6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lQWx0ID0gZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZTsKICAgIGZhU3BlYWthcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGVha2FwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjMiLCAiTTY0LjQgMzkxLjhDLTE1IDMwMy42LTcuNiAxNjcuNCA4MS4xIDg3LjZzMjI0LjgtNzMgMzA0LjIgMTUuMiA3MiAyMjQuNC0xNi42IDMwNC4xYy0xOC43IDE2LjkgNjQgNDMuMSA0MiA1Mi4zLTgyLjEgMzQuMi0yNTMuOSAzNS0zNDYuMi02Ny41bDAgMHpNMjc3LjcgMTgwLjJsMzguNS00MC45Yy05LjYtOC45LTMyLTI2LjgtNzYuMi0yNy42LTUyLjMtLjktOTUuOSAyOC4zLTk2LjggODAtLjIgMTEuMyAuMyAzNi43IDI5LjQgNTQuOCAzNC41IDIxLjQgODYuNSAyMS41IDg2IDUyLjMtLjQgMjEuMy0yNi40IDI1LjgtMzguNiAyNS42LTMgMC0zMC4yLS41LTQ3LjYtMjQuNmwtNDAgNDIuNmMyOC4yIDI3IDU5IDMyLjYgODMuNSAzMyAxMC4yIC4yIDk2LjQgLjMgOTcuOC04MSAuMy0xNS44LTIuMS0zOS43LTI4LjktNTYuNi0zNC40LTIxLjYtODUtMTkuNC04NC40LTQ5LjcgLjQtMjMuMyAzMS0yNS40IDM3LjUtMjUuMyAuNCAwIDI2LjYgLjMgMzkuNiAxNy40bDAgMHoiXQogICAgfTsKICAgIGZhRmFudGFzeUZsaWdodEdhbWVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZhbnRhc3ktZmxpZ2h0LWdhbWVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZGMiLCAiTTI1NiAzMi45TDMyLjkgMjU2IDI1NiA0NzkuMSA0NzkuMSAyNTYgMjU2IDMyLjl6TTg4LjMgMjU1LjhjMi0yIDExLjktMTIuMyA5Ni41LTk3LjUgNDEuNC00MS44IDg2LjItNDMuOCAxMTkuOC0xOC43IDI0LjYgMTguNCA2Mi4xIDU4LjkgNjIuMSA1OSAuNyAuNyAxLjEgMi45IC42IDMuNC0xMS4zIDExLjgtMjIuNyAyMy41LTMzLjUgMzQuNy0zNC4yLTMyLjMtNDAuNS0zOC4yLTQ4LjUtNDQtMTcuOC0xMi43LTQxLjQtMTAuMS01NyA1LjEtMi4yIDIuMS0xLjggMy40IC4xIDUuNCAyLjkgMi45IDI4LjEgMjguMyAzNS4xIDM1LjgtMTEuOSAxMS42LTIzLjcgMjMtMzUuNyAzNC43LTEyLTEyLjUtMjQuNS0yNS41LTM2LjUtMzguMS0yMS40IDIxLjEtNDEuNyA0MS4xLTYxLjggNjFMODguMyAyNTUuOHpNMzIzLjIgMzU3LjRjLTM1LjUgMzUuNC03OC4xIDM4LjEtMTA3IDIwLjUtMjIuMS0xMy41LTM5LjQtMzIuMS03Mi45LTY2LjggMTItMTIuNCAyMy44LTI0LjQgMzUuNC0zNi4zIDMzIDMxLjkgMzcuMSAzNiA0NC43IDQyLjEgMTguNSAxNC43IDQyLjUgMTMuNyA1OS4zLTEuOCAzLjctMy40IDMuNy0zLjYgLjEtNy4yLTEwLjYtMTAuNy0yMS4yLTIxLjQtMzEuOC0zMi4yLTEuMy0xLjMtMy0yLjUtLjgtNC43IDEwLjgtMTAuNyAyMS41LTIxLjUgMzIuMi0zMi4zIC4zLS4zIC42LS40IDEuOS0xLjEgMTIuNCAxMi45IDI0LjkgMjUuOSAzNy4yIDM4LjggMjEtMjAuNyA0MS4yLTQwLjcgNjEuMy02MC40IDEzLjcgMTMuNCAyNy4xIDI2LjYgNDAuOSA0MC0yMC4yIDIwLjktODEuNyA4Mi43LTEwMC41IDEwMS41ek0yNTYgMEwwIDI1NiAyNTYgNTEyIDUxMiAyNTYgMjU2IDB6TTE2IDI1NkwyNTYgMTYgNDk2IDI1NiAyNTYgNDk2IDE2IDI1NnoiXQogICAgfTsKICAgIGZhTGludXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGludXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE3YyIsICJNMjIwLjkgMTIzLjNjMSAuNSAxLjggMS43IDMgMS43IDEuMSAwIDIuOC0uNCAyLjktMS41IC4yLTEuNC0xLjktMi4zLTMuMi0yLjktMS43LS43LTMuOS0xLTUuNS0uMS0uNCAuMi0uOCAuNy0uNiAxLjEgLjMgMS4zIDIuMyAxLjEgMy40IDEuN3pNMTk5IDEyNWMxLjIgMCAyLTEuMiAzLTEuNyAxLjEtLjYgMy4xLS40IDMuNS0xLjYgLjItLjQtLjItLjktLjYtMS4xLTEuNi0uOS0zLjgtLjYtNS41IC4xLTEuMyAuNi0zLjQgMS41LTMuMiAyLjkgLjEgMSAxLjggMS41IDIuOCAxLjR6TTQyMCA0MDMuOGMtMy42LTQtNS4zLTExLjYtNy4yLTE5LjctMS44LTguMS0zLjktMTYuOC0xMC41LTIyLjQtMS4zLTEuMS0yLjYtMi4xLTQtMi45LTEuMy0uOC0yLjctMS41LTQuMS0yIDkuMi0yNy4zIDUuNi01NC41LTMuNy03OS4xLTExLjQtMzAuMS0zMS4zLTU2LjQtNDYuNS03NC40LTE3LjEtMjEuNS0zMy43LTQxLjktMzMuNC03MiAuNS00NS45IDUuMS0xMzEuMi03NS44LTEzMS4zLTEwMi40LS4yLTc2LjggMTAzLjQtNzcuOSAxMzUuMi0xLjcgMjMuNC02LjQgNDEuOC0yMi41IDY0LjctMTguOSAyMi41LTQ1LjUgNTguOC01OC4xIDk2LjctNiAxNy45LTguOCAzNi4xLTYuMiA1My4zLTYuNSA1LjgtMTEuNCAxNC43LTE2LjYgMjAuMi00LjIgNC4zLTEwLjMgNS45LTE3IDguM3MtMTQgNi0xOC41IDE0LjVjLTIuMSAzLjktMi44IDguMS0yLjggMTIuNCAwIDMuOSAuNiA3LjkgMS4yIDExLjggMS4yIDguMSAyLjUgMTUuNyAuOCAyMC44LTUuMiAxNC40LTUuOSAyNC40LTIuMiAzMS43IDMuOCA3LjMgMTEuNCAxMC41IDIwLjEgMTIuMyAxNy4zIDMuNiA0MC44IDIuNyA1OS4zIDEyLjUgMTkuOCAxMC40IDM5LjkgMTQuMSA1NS45IDEwLjQgMTEuNi0yLjYgMjEuMS05LjYgMjUuOS0yMC4yIDEyLjUtLjEgMjYuMy01LjQgNDguMy02LjYgMTQuOS0xLjIgMzMuNiA1LjMgNTUuMSA0LjEgLjYgMi4zIDEuNCA0LjYgMi41IDYuN2wwIC4xYzguMyAxNi43IDIzLjggMjQuMyA0MC4zIDIzIDE2LjYtMS4zIDM0LjEtMTEgNDguMy0yNy45IDEzLjYtMTYuNCAzNi0yMy4yIDUwLjktMzIuMiA3LjQtNC41IDEzLjQtMTAuMSAxMy45LTE4LjMgLjQtOC4yLTQuNC0xNy4zLTE1LjUtMjkuN3pNMjIzLjggODcuM2M5LjgtMjIuMiAzNC4yLTIxLjggNDQtLjQgNi41IDE0LjIgMy42IDMwLjktNC4zIDQwLjQtMS42LS44LTUuOS0yLjYtMTIuNi00LjkgMS4xLTEuMiAzLjEtMi43IDMuOS00LjYgNC44LTExLjgtLjItMjctOS4xLTI3LjMtNy4zLS41LTEzLjkgMTAuOC0xMS44IDIzLTQuMS0yLTkuNC0zLjUtMTMtNC40LTEtNi45LS4zLTE0LjYgMi45LTIxLjh6TTE4My4xIDc1LjhjMTAuMSAwIDIwLjggMTQuMiAxOS4xIDMzLjUtMy41IDEtNy4xIDIuNS0xMC4yIDQuNiAxLjItOC45LTMuMy0yMC4xLTkuNi0xOS42LTguNCAuNy05LjggMjEuMi0xLjggMjguMSAxIC44IDEuOS0uMi01LjkgNS41LTE1LjYtMTQuNi0xMC41LTUyLjEgOC40LTUyLjF6bS0xMy42IDYwLjdjNi4yLTQuNiAxMy42LTEwIDE0LjEtMTAuNSA0LjctNC40IDEzLjUtMTQuMiAyNy45LTE0LjIgNy4xIDAgMTUuNiAyLjMgMjUuOSA4LjkgNi4zIDQuMSAxMS4zIDQuNCAyMi42IDkuMyA4LjQgMy41IDEzLjcgOS43IDEwLjUgMTguMi0yLjYgNy4xLTExIDE0LjQtMjIuNyAxOC4xLTExLjEgMy42LTE5LjggMTYtMzguMiAxNC45LTMuOS0uMi03LTEtOS42LTIuMS04LTMuNS0xMi4yLTEwLjQtMjAtMTUtOC42LTQuOC0xMy4yLTEwLjQtMTQuNy0xNS4zLTEuNC00LjkgMC05IDQuMi0xMi4zem0zLjMgMzM0Yy0yLjcgMzUuMS00My45IDM0LjQtNzUuMyAxOC0yOS45LTE1LjgtNjguNi02LjUtNzYuNS0yMS45LTIuNC00LjctMi40LTEyLjcgMi42LTI2LjRsMC0uMmMyLjQtNy42IC42LTE2LS42LTIzLjktMS4yLTcuOC0xLjgtMTUgLjktMjAgMy41LTYuNyA4LjUtOS4xIDE0LjgtMTEuMyAxMC4zLTMuNyAxMS44LTMuNCAxOS42LTkuOSA1LjUtNS43IDkuNS0xMi45IDE0LjMtMTggNS4xLTUuNSAxMC04LjEgMTcuNy02LjkgOC4xIDEuMiAxNS4xIDYuOCAyMS45IDE2bDE5LjYgMzUuNmM5LjUgMTkuOSA0My4xIDQ4LjQgNDEgNjguOXptLTEuNC0yNS45Yy00LjEtNi42LTkuNi0xMy42LTE0LjQtMTkuNiA3LjEgMCAxNC4yLTIuMiAxNi43LTguOSAyLjMtNi4yIDAtMTQuOS03LjQtMjQuOS0xMy41LTE4LjItMzguMy0zMi41LTM4LjMtMzIuNS0xMy41LTguNC0yMS4xLTE4LjctMjQuNi0yOS45cy0zLTIzLjMtLjMtMzUuMmM1LjItMjIuOSAxOC42LTQ1LjIgMjcuMi01OS4yIDIuMy0xLjcgLjggMy4yLTguNyAyMC44LTguNSAxNi4xLTI0LjQgNTMuMy0yLjYgODIuNCAuNi0yMC43IDUuNS00MS44IDEzLjgtNjEuNSAxMi0yNy40IDM3LjMtNzQuOSAzOS4zLTExMi43IDEuMSAuOCA0LjYgMy4yIDYuMiA0LjEgNC42IDIuNyA4LjEgNi43IDEyLjYgMTAuMyAxMi40IDEwIDI4LjUgOS4yIDQyLjQgMS4yIDYuMi0zLjUgMTEuMi03LjUgMTUuOS05IDkuOS0zLjEgMTcuOC04LjYgMjIuMy0xNSA3LjcgMzAuNCAyNS43IDc0LjMgMzcuMiA5NS43IDYuMSAxMS40IDE4LjMgMzUuNSAyMy42IDY0LjYgMy4zLS4xIDcgLjQgMTAuOSAxLjQgMTMuOC0zNS43LTExLjctNzQuMi0yMy4zLTg0LjktNC43LTQuNi00LjktNi42LTIuNi02LjUgMTIuNiAxMS4yIDI5LjIgMzMuNyAzNS4yIDU5IDIuOCAxMS42IDMuMyAyMy43IC40IDM1LjcgMTYuNCA2LjggMzUuOSAxNy45IDMwLjcgMzQuOC0yLjItLjEtMy4yIDAtNC4yIDAgMy4yLTEwLjEtMy45LTE3LjYtMjIuOC0yNi4xLTE5LjYtOC42LTM2LTguNi0zOC4zIDEyLjUtMTIuMSA0LjItMTguMyAxNC43LTIxLjQgMjcuMy0yLjggMTEuMi0zLjYgMjQuNy00LjQgMzkuOS0uNSA3LjctMy42IDE4LTYuOCAyOS0zMi4xIDIyLjktNzYuNyAzMi45LTExNC4zIDcuMnptMjU3LjQtMTEuNWMtLjkgMTYuOC00MS4yIDE5LjktNjMuMiA0Ni41LTEzLjIgMTUuNy0yOS40IDI0LjQtNDMuNiAyNS41cy0yNi41LTQuOC0zMy43LTE5LjNjLTQuNy0xMS4xLTIuNC0yMy4xIDEuMS0zNi4zIDMuNy0xNC4yIDkuMi0yOC44IDkuOS00MC42IC44LTE1LjIgMS43LTI4LjUgNC4yLTM4LjcgMi42LTEwLjMgNi42LTE3LjIgMTMuNy0yMS4xIC4zLS4yIC43LS4zIDEtLjUgLjggMTMuMiA3LjMgMjYuNiAxOC44IDI5LjUgMTIuNiAzLjMgMzAuNy03LjUgMzguNC0xNi4zIDktLjMgMTUuNy0uOSAyMi42IDUuMSA5LjkgOC41IDcuMSAzMC4zIDE3LjEgNDEuNiAxMC42IDExLjYgMTQgMTkuNSAxMy43IDI0LjZ6TTE3My40IDE0OC43YzIgMS45IDQuNyA0LjUgOCA3LjEgNi42IDUuMiAxNS44IDEwLjYgMjcuMyAxMC42IDExLjYgMCAyMi41LTUuOSAzMS44LTEwLjggNC45LTIuNiAxMC45LTcgMTQuOC0xMC40czUuOS02LjMgMy4xLTYuNi0yLjYgMi42LTYgNS4xYy00LjQgMy4yLTkuNyA3LjQtMTMuOSA5LjgtNy40IDQuMi0xOS41IDEwLjItMjkuOSAxMC4ycy0xOC43LTQuOC0yNC45LTkuN2MtMy4xLTIuNS01LjctNS03LjctNi45LTEuNS0xLjQtMS45LTQuNi00LjMtNC45LTEuNC0uMS0xLjggMy43IDEuNyA2LjV6Il0KICAgIH07CiAgICBmYUNvdHRvbkJ1cmVhdSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjb3R0b24tYnVyZWF1IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4OWUiLCAiTTQ3NC4zIDMzMC40QzQ1MC42IDQyMi4zIDM4MC4xIDQ3NSAyNzIuNCA0NzguOGwwLTQ5LjJjMC00OCAyNi40LTc0LjQgNzQuNC03NC40IDYyIDAgOTkuMi0zNy4yIDk5LjItOTkuMiAwLTYxLjQtMzYuNS05OC4zLTk3LjQtOTkuMS0zMy02OS4zLTE0Ni41LTY0LjctMTc3LjIgMC02MC45IC44LTk3LjQgMzcuNy05Ny40IDk5LjEgMCA2Mi4xIDM3LjMgOTkuNCA5OS40IDk5LjQgNDggMCA3NC42IDI2LjIgNzQuNiA3NC40bDAgNDkuMmMtMTM0LjQtNS0yMTEuMS04NS4xLTIxMS4xLTIyMyAwLTE0MS44IDgxLjQtMjIzLjIgMjIzLjItMjIzLjIgMTE0LjggMCAxODkuOCA1My4yIDIxNC43IDE0OC44bDI1LjMgMEM0NzMuOSA3MS41IDM4OC4yIDggMjU5LjggOCAxMDUgOCAxMiAxMDEuMiAxMiAyNTUuOCAxMiA0MTEuMSAxMDUuMiA1MDQuMyAyNTkuOCA1MDQgMzg4LjEgNTA0IDQ3My43IDQ0MC4yIDQ5OS41IDMzMC40bC0yNS4yIDB6TTM1NyAxODIuM2M0MS40IDMuNCA2NC4yIDI5IDY0LjIgNzMuNyAwIDQ4LTI2LjQgNzQuNC03NC40IDc0LjQtMjguNiAwLTQ5LjMtOS42LTYxLjYtMjcuMyA4My4xLTE2LjUgNzUuNi05OS43IDcxLjgtMTIwLjd6bS04MS43IDk3LjRjLTIuNS0xMC4zLTE2LjMtODcgNTYuMi05NyAyLjMgMTAuMSAxNi41IDg3LjEtNTYuMyA5N2wwIDB6TTI2MCAxMzJjMjguNiAwIDQ5IDkuNyA2MS40IDI3LjYtMjguNCA1LjUtNDkuNCAyMC42LTYxLjYgNDMuNC0xMi4yLTIyLjktMzMuMi0zOC02MS42LTQzLjQgMTIuNC0xNy43IDMzLjMtMjcuNCA2MS42LTI3LjRsLjItLjN6bS03MS41IDUwLjdjNzMuMiAxMC42IDU4LjkgODYuOCA1Ni41IDk3LTcyLjQtOS44LTU5LTg3LTU2LjItOTdsLS4yIDB6TTE3My4yIDMzMC40Yy00OCAwLTc0LjQtMjYuNC03NC40LTc0LjQgMC00NC40IDIyLjktNzAgNjQuMi03My43LTYuOCAzNy4yLTEuNCAxMDYuNSA3MS42IDEyMC43LTEyLjEgMTcuNi0zMi44IDI3LjMtNjEuMSAyNy4zbC0uMyAwem01My4yIDEyLjRjMTQuMy03LjYgMjYtMTkuMyAzMy42LTMzLjUgNy44IDE0LjUgMTkuMyAyNS41IDMzLjggMzMuNS0xNC40IDcuNi0yNi4xIDE5LjQtMzMuNiAzMy44LTgtMTQuNS0xOS4xLTI2LjItMzMuNi0zMy44bC0uMyAweiJdCiAgICB9OwogICAgZmFHb29nbGVXYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZ2xlLXdhbGxldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWVlIiwgIk0xNTYuOCAxMjYuOGMzNy42IDYwLjYgNjQuMiAxMTMuMSA4NC4zIDE2Mi41LTguMyAzMy44LTE4LjggNjYuNS0zMS4zIDk4LjMtMTMuMi01Mi4zLTI2LjUtMTAxLjMtNTYtMTQ4LjUgNi41LTM2LjQgMi4zLTczLjYgMy0xMTIuM3pNMTA5LjMgMjAwbC05My4yIDBjLTYuNSAwLTEwLjUgNy41LTYuNSAxMi43IDQyLjIgNTQuMyA3MS43IDExNy44IDkxLjcgMTg3LjNsMTAzLjUgMGMtMTYuMi02OS43LTM4LjctMTMzLjctODIuNS0xOTMuNS0zLTQtOC02LjUtMTMtNi41em00Ny44LTg4YzY4LjUgMTA4IDEzMCAyMzQuNSAxMzguMiAzNjhMNDA5IDQ4MGMtMTItMTM4LTY4LjQtMjY1LTE0My4yLTM2OGwtMTA4LjcgMHpNNDA4LjkgNDMuNWMtMS44LTYuOC04LjItMTEuNS0xNS4yLTExLjVsLTg4LjMgMGMtNS4zIDAtOSA1LTcuOCAxMC4zIDEzLjIgNDYuNSAyMi4zIDk1LjUgMjYuNSAxNDYgNDguMiA4Ni4yIDc5LjcgMTc4LjMgOTAuNiAyNzAuOCAxNS44LTYwLjUgMjUuMy0xMzMuNSAyNS4zLTIwMyAwLTczLjYtMTIuMS0xNDUuMS0zMS4xLTIxMi42eiJdCiAgICB9OwogICAgZmFGb3Vyc3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZvdXJzcXVhcmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjE4MCIsICJNMzMxLjEgM0w1Ny45IDNDMjAuNCAzIDggMzEuMyA4IDQ5LjFMOCA0ODIuOWMwIDIwLjMgMTIuMSAyNy43IDE4LjIgMzAuMSA2LjIgMi41IDIyLjggNC42IDMyLjktNy4xIDEyOC45LTE0OS40IDEzMS4xLTE1MS45IDEzMS4xLTE1MS45IDMuMS0zLjQgMy40LTMuMSA2LjgtMy4xbDgzLjQgMGMzNS4xIDAgNDAuNi0yNS4yIDQ0LjMtMzkuN2w0OC42LTI0M0MzODEuOCAyNS44IDM3MS4xIDMgMzMxLjEgM3pNMzE0LjggNzYuOGwtMTEuNCA1OS43Yy0xLjIgNi41LTkuNSAxMy4yLTE2LjkgMTMuMmwtMTA2LjQgMGMtMTIgMC0yMC42IDguMy0yMC42IDIwLjNsMCAxM2MwIDEyIDguNiAyMC42IDIwLjYgMjAuNmw5MC40IDBjOC4zIDAgMTYuNiA5LjIgMTQuOCAxOC4yLTEuOCA4LjktMTAuNSA1My44LTExLjQgNTguOC0uOSA0LjktNi44IDEzLjUtMTYuOSAxMy41bC03My41IDBjLTEzLjUgMC0xNy4yIDEuOC0yNi41IDEyLjYgMCAwLTguOSAxMS40LTg5LjUgMTA4LjMtLjkgLjktMS44IC42LTEuOC0uM2wwLTMzOC44YzAtNy43IDYuOC0xNi42IDE2LjYtMTYuNmwyMTkgMGM4LjIgMCAxNS42IDcuNyAxMy41IDE3LjV6Il0KICAgIH07CiAgICBmYVNoaXJ0c2luYnVsayA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaGlydHNpbmJ1bGsiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxNCIsICJNMTAwIDQxMC4zbDMwLjYgMTMuNCA0LjQtOS45LTMwLjYtMTMuNC00LjQgOS45em0zOS40IDE3LjVsMzAuNiAxMy40IDQuNC05LjktMzAuNi0xMy40LTQuNCA5Ljl6bTE3Mi4xLTE0bDQuNCA5LjkgMzAuNi0xMy40LTQuNC05LjktMzAuNiAxMy40ek0xNzkuMSA0NDVsMzAuMyAxMy43IDQuNC05LjktMzAuMy0xMy40LTQuNCA5LjZ6TTYwLjQgMzkyLjhsMzAuNiAxMy40IDQuNC05LjYtMzAuNi0xMy43LTQuNCA5Ljl6bTIxMS40IDM4LjVsNC40IDkuOSAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjR6bS0zOS4zIDE3LjVsNC40IDkuOSAzMC42LTEzLjctNC40LTkuNi0zMC42IDEzLjR6bTExOC40LTUyLjJsNC40IDkuNiAzMC42LTEzLjQtNC40LTkuOS0zMC42IDEzLjd6TTE3MCA0Ni42bC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bS00Ny4yIDBsLTMzLjYgMCAwIDEwLjUgMzMuNSAwIC4xLTEwLjV6bS00Ny4zIDBsLTMzLjIgMCAwIDEwLjUgMzMuMyAwLS4xLTEwLjV6bTE0MS41IDBsLTMzLjIgMCAwIDEwLjUgMzMuMiAwIDAtMTAuNXptOTQuNSAwbC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em0tOTQuNiAwbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTE0MS41IDBsLTMzLjMgMCAwIDEwLjUgMzMuMyAwIDAtMTAuNXpNNTIuOCAzNTEuMWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em03MC0yMTUuOWwtMzMuNiAwIDAgMTAuNSAzMy41IDAgLjEtMTAuNXptLTcwIDEwLjZsMjIuOCAwIDAtMTAuNS0zMy42IDAgMCAzMy41IDEwLjggMCAwLTIzek0yMjEuNyAzNzQuNGE5MS4zIDkxLjMgMCAxIDAgMC0xODIuNiA5MS4zIDkxLjMgMCAxIDAgMCAxODIuNnpNMTczLjUgMjYzLjNjMC0yNS40IDI5LjUtMzEuOCA0OS42LTMxLjggMTYuOSAwIDI5LjIgNS44IDQ0LjMgMTJsLTguOCAxNi45LS45IDBjLTYuNC05LjktMjQuOC0xMy4xLTM1LjYtMTMuMS05IDAtMjkuOCAxLjgtMjkuOCAxNC45IDAgMjEuNiA3OC41LTEwLjIgNzguNSAzNy45IDAgMjUuNC0zMS41IDMxLjItNTEgMzEuMi0xOC4xIDAtMzIuNC0yLjktNDcuMi0xMi4ybDktMTguNCAuOSAwYzYuMSAxMi4yIDIzLjYgMTQuOSAzNS45IDE0LjkgOC43IDAgMzIuNy0xLjIgMzIuNy0xNC4zIDAtMjYuMS03Ny42IDYuMy03Ny42LTM4ek01Mi44IDE3OC40bC0xMC44IDAgMCAzMy42IDEwLjggMCAwLTMzLjZ6TTM5NS4yIDM4NC42bDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNNTIuOCAzMDcuOWwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41ek0wIDMuN2wwIDQwNiAyMjEuNyA5OC42IDIyNi4zLTk4LjYgMC00MDYtNDQ4IDB6TTQxOC44IDM5MC44bC0xOTYuOCA4NS43LTE5Mi44LTg1LjcgMC0yNzAuMSAzODkuNyAwIDAgMjcwLjEtLjEgMHptMC0yOTkuM2wtMzg5LjYgMCAwLTU4LjYgMzg5LjcgMCAwIDU4LjYtLjEgMHpNNTIuOCAyMjEuNmwtMTAuOCAwIDAgMzMuNSAxMC44IDAgMC0zMy41em0wIDQzLjJsLTEwLjggMCAwIDMzLjUgMTAuOCAwIDAtMzMuNXpNMTcwIDEzNS4ybC0zMy41IDAgMCAxMC41IDMzLjUgMCAwLTEwLjV6TTM5NS4yIDI5OC4zbDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXptMC00My4ybDEwLjggMCAwLTMzLjUtMTAuOCAwIDAgMzMuNXpNMjE3IDEzNS4ybC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6TTM5NS4yIDIxMmwxMC44IDAgMC0zMy41LTEwLjggMCAwIDMzLjV6bTAgMTI5LjVsMTAuOCAwIDAtMzMuNS0xMC44IDAgMCAzMy41em0tMTMxLTIwNi4zbC0zMy4yIDAgMCAxMC41IDMzLjIgMCAwLTEwLjV6bTQ3LjMgMGwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41em04My43IDMzLjZsMTAuOCAwIDAtMzMuNS0zMy41IDAgMCAxMC41IDIyLjggMC0uMSAyM3ptLTM2LjQtMzMuNmwtMzMuNSAwIDAgMTAuNSAzMy41IDAgMC0xMC41eiJdCiAgICB9OwogICAgZmFNaW50Yml0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1pbnRiaXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTYyZiIsICJNNzMuMiA1MTJsMC03My4xIDI5Mi41IDAgMC03My4yIDczLjIgMCAwLTE0Ni4zIDczLjEgMCAwLTIxOS40LTIxOS40IDAgMCA3My4xLTE0Ni4zIDAgMCA3My4yLTczLjEgMCAwIDI5Mi42LTczLjIgMCAwIDczLjEgNzMuMiAwem03My4xLTIxOS40bDczLjIgMCAwIDczLjEtNzMuMiAwIDAtNzMuMXptNzMuMi03My4xbDczLjEgMCAwIDczLjEtNzMuMiAwIDAtNzMuMiAuMSAuMXptNzMuMSAwbDAtNzMuMiA3My4yIDAgMCA3My4xLTczLjIgMCAwIC4xek0zNjUuNyA3My4xbDczLjIgMCAwIDczLjItNzMuMiAwIDAtNzMuMnoiXQogICAgfTsKICAgIGZhU3RheWxpbmtlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzdGF5bGlua2VkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjUiLCAiTTM4Ni43IDI5Mi41bDIuNyAyLjctMTcwLTE2Ny4zYy0zLjUtMy41LTkuNy0zLjctMTMuOC0uNUwxNDguMyAxNzFjLTQuMiAzLjItNC42IDguNy0xLjEgMTIuMmw2OC4xIDY0LjNjMy42IDMuNSA5LjkgMy43IDE0IC41bC4xLS4xYzQuMS0zLjIgMTAuNC0zIDE0IC41bDg0IDgxLjNjMy42IDMuNSAzLjIgOS0uOSAxMi4ybC05My4yIDc0Yy00LjIgMy4zLTEwLjUgMy4xLTE0LjItLjRMNjcuMiAyNjhjLTMuNS0zLjUtOS43LTMuNy0xMy45LS41TDcuNSAzMDIuNGMtNC4yIDMuMi00LjcgOC43LTEuMiAxMi4yTDIxNSA1MTAuN3M3LjQgNi44IDE3LjMtLjhMNDMwLjMgMzQ2YzQtMy4yIDQuNC04LjcgLjctMTIuMmwtNDQuMy00MS4zem01NC41LTgzLjRMMjMwLjcgMi41Yy0xLjUtMS4yLTgtNS41LTE2LjMgMS4xTDcuNiAxNjUuN2MtNC4yIDMuMi00LjggOC43LTEuMiAxMi4ybDQyLjMgNDEuNyAxNzEuNyAxNjUuMWMzLjcgMy41IDEwLjEgMy43IDE0LjMgLjRsNTAuMi0zOC44LS4zLS4zIDcuNy02YzQuMi0zLjIgNC42LTguNyAuOS0xMi4ybC01Ny4xLTU0LjRjLTMuNi0zLjUtMTAtMy43LTE0LjItLjVsLS4xIC4xYy00LjIgMy4yLTEwLjUgMy4xLTE0LjItLjRMMTEzIDE4MC44Yy0zLjYtMy41LTMuMS04LjkgMS4xLTEyLjJsOTIuMi03MS41YzQuMS0zLjIgMTAuMy0zIDEzLjkgLjVsMTYwLjQgMTU5YzMuNyAzLjUgMTAgMy43IDE0LjEgLjVsNDUuOC0zNS44YzQuMS0zLjIgNC40LTguNyAuNy0xMi4yeiJdCiAgICB9OwogICAgZmFXZWJmbG93ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndlYmZsb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY1YyIsICJNNjQwIDY0bC0yMDQuMiAzOTkuMi0xOTEuOCAwIDg1LjUtMTY1LjUtMy44IDBDMjU1LjEgMzg5LjMgMTQ5LjkgNDQ5LjUgMCA0NjMuMkwwIDMwMC4xczk1LjktNS43IDE1Mi4zLTY0LjlsLTE1Mi4zIDAgMC0xNzEuMiAxNzEuMSAwIDAgMTQwLjggMy44IDAgNzAtMTQwLjggMTI5LjQgMCAwIDEzOS45IDMuOCAwIDcyLjYtMTM5LjkgMTg5LjMgMHoiXQogICAgfTsKICAgIGZhUmVucmVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJlbnJlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMThiIiwgIk0yMTQgMTY5LjFDMjE0IDI3OS41IDE1MyAzNzQuNSA2Ni40IDQxNi41IDMwIDM3My4yIDggMzE3LjcgOCAyNTYuNiA4IDEzMy45IDk3LjEgMzIuMiAyMTQgMTIuNWwwIDE1Ni42ek0yNTUgNTA0Yy00Mi45IDAtODMuMy0xMS0xMTguNS0zMC40IDU3LjItMzYuMSAxMDMuNC05MC43IDExOC41LTE1NC42IDE1LjUgNjMuOSA2MS43IDExOC41IDExOC44IDE1NC43LTM1LjEgMTkuMy03NS41IDMwLjMtMTE4LjggMzAuM3ptMTkwLjYtODcuNUMzNTkgMzc0LjUgMjk4IDI3OS42IDI5OCAxNjkuMWwwLTE1Ni42YzExNi45IDE5LjcgMjA2IDEyMS40IDIwNiAyNDQuMSAwIDYxLjEtMjIgMTE2LjYtNTguNCAxNTkuOXoiXQogICAgfTsKICAgIGZhUmV2ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInJldiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNWIyIiwgIk0xNTguNyAyNzQuOWE2NS42IDY1LjYgMCAxIDEgMTMxLjIgMCA2NS42IDY1LjYgMCAxIDEgLTEzMS4yIDB6bTI3MC43LTUuMWwtLjEgMGMtLjctMjkuMy03LjctNTguMi0yMC41LTg0LjZzLTMxLjItNDkuNy01My44LTY4LjRMMzA5LjYgMTQzYzIyIDE0LjIgNDAuMSAzMy44IDUyLjcgNTYuOHMxOS4xIDQ4LjggMTkuMSA3NS4xYzAgODYuNi03MC41IDE1Ny4xLTE1Ny4xIDE1Ny4xUzY3LjIgMzYxLjUgNjcuMiAyNzQuOWMwLTgxLjkgNjMtMTQ5LjMgMTQzLTE1Ni40bDAgMzkuMSAxMDguOC02Mi44LTEwOC44LTYyLjggMCAzOC4zYy0xMDYuNyA3LjItMTkxIDk2LTE5MSAyMDQuNiAwIDExMS42IDg5LjEgMjAyLjMgMjAwLjEgMjA1bDAgLjEgMjEwLjIgMCAwLTIxMC4yeiJdCiAgICB9OwogICAgZmFLZXljZG4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAia2V5Y2RuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYzYmEiLCAiTTYzLjggNDA5LjNsNjAuNS01OWMzMi4xIDQyLjggNzEuMSA2NiAxMjYuNiA2Ny40IDMwLjUgLjcgNjAuMy03IDg2LjQtMjIuNCA1LjEgNS4zIDE4LjUgMTkuNSAyMC45IDIyLTMyLjIgMjAuNy02OS42IDMxLjEtMTA4LjEgMzAuMi00My4zLTEuMS04NC42LTE2LjctMTE3LjctNDQuNCAuMy0uNi0zOC4yIDM3LjUtMzguNiAzNy45IDkuNSAyOS44LTEzLjEgNjIuNC00Ni4zIDYyLjQtMjYuOC0uMS00Ny41LTIxLjctNDcuNS00OC41IDAtMzQuMyAzMy4xLTU2LjYgNjMuOC00NS42ek00MTguNyAxNTYuOWMxOS4xIDMxLjMgMjkuNiA2Ny40IDI4LjcgMTA0LTEuMSA0NC44LTE5IDg3LjUtNDguNiAxMjEgLjMgLjMgMjMuOCAyNS4yIDI0LjEgMjUuNSA5LjYtMS4zIDE5LjIgMiAyNS45IDkuMSAxMS4zIDEyIDEwLjkgMzAuOS0xLjEgNDIuNC0xMiAxMS4zLTMwLjkgMTAuOS00Mi40LTEuMS02LjctNy05LjQtMTYuOC03LjYtMjYuMy0yNC45LTI2LjYtNDQuNC00Ny4yLTQ0LjQtNDcuMiA0Mi43LTM0LjEgNjMuMy03OS42IDY0LjQtMTI0LjIgLjctMjguOS03LjItNTcuMi0yMS4xLTgyLjJsMjIuMS0yMXpNMTA0IDUzLjFjNi43IDcgOS40IDE2LjggNy42IDI2LjNsNDUuOSA0OC4xYy00LjcgMy44LTEzLjMgMTAuNC0yMi44IDIxLjMtMjUuNCAyOC41LTM5LjYgNjQuOC00MC43IDEwMi45LS43IDI4LjkgNi4xIDU3LjIgMjAgODIuNEw5MiAzNTUuNmMtMTkuMy0zMS42LTI4LjktNjcuNy0yNy44LTEwNC43IDEtNDQuNiAxOC4zLTg3LjYgNDcuNS0xMjEuMUw4Ni40IDEwMy40Yy05LjYgMS4zLTE5LjItMi0yNS45LTkuMS0xMS4zLTEyLTEwLjktMzAuOSAxLjEtNDIuNCAxMS45LTExLjIgMzAuNi0xMC45IDQyLjQgMS4yek00NjQuOSA4YzI2IDAgNDcuMSAyMi40IDQ3LjEgNDguM1M0OTAuOSAxMDQgNDY0LjkgMTA0Yy02LjMgLjEtMTQtMS4xLTE1LjktMS44bC02Mi45IDU5LjdjLTMyLjctNDMuNi03Ni43LTY1LjktMTI2LjktNjcuMi0zMC41LS43LTYwLjMgNi44LTg2LjIgMjIuNGwtMjEuMS0yMkMxODQuMSA3NC4zIDIyMS41IDY0IDI2MCA2NC45IDMwMy4zIDY2IDM0NC42IDgxLjYgMzc3LjcgMTA5LjVsNDEuMS0zOC42Yy0xLjUtNC43LTIuMi05LjYtMi4yLTE0LjUtLjEtMjYuNyAyMi4zLTQ4LjQgNDguMy00OC40ek0yNTYuNyAxMTMuNGM1LjUgMCAxMC45IC40IDE2LjQgMS4xIDc4LjEgOS44IDEzMy40IDgxLjEgMTIzLjggMTU5LjEtOS44IDc4LjEtODEuMSAxMzMuNC0xNTkuMSAxMjMuOC03OC4xLTkuOC0xMzMuNC04MS4xLTEyMy44LTE1OS4yIDkuMy03Mi40IDcwLjEtMTI0LjYgMTQyLjctMTI0Ljh6bS01OSAxMTkuNGMuNiAyMi43IDEyLjIgNDEuOCAzMi40IDUyLjJsLTExIDUxLjcgNzMuNyAwLTExLTUxLjdjMjAuMS0xMC45IDMyLjEtMjkgMzIuNC01Mi4yLS40LTMyLjgtMjUuOC01Ny41LTU4LjMtNTguMy0zMi4xIC44LTU3LjMgMjQuOC01OC4yIDU4LjN6Il0KICAgIH07CiAgICBmYUhpcmVBSGVscGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpcmUtYS1oZWxwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNiMCIsICJNNDQzLjEgMEw3MS45IDBDNjcuOSAzNy4zIDM3LjQgNjcuOCAwIDcxLjdMMCA0NDMuMmMzNy40IDQuOSA2NiAzMi40IDcxLjkgNjguOGwzNzIuMiAwYzMtMzYuNCAzMi41LTY1LjggNjcuOS02OS44bDAtMzcwLjVDNDc1LjYgNjUuOCA0NDcgMzYuNCA0NDMuMSAwem0tMzcgNDA0LjljLTM2LjMgMC0xOC44LTItNTUuMS0yLTM1LjggMC0yMSAyLTU2LjEgMi01LjkgMC00LjktOC4yIDAtOS44IDIyLjgtNy42IDIyLjktMTAuMiAyNC42LTEyLjggMTAuNC0xNS42IDUuOS04MyA1LjktMTEzIDAtNS4zLTYuNC0xMi44LTEzLjgtMTIuOGwtMTExLjIgMGMtNy40IDAtMTMuOCA3LjUtMTMuOCAxMi44IDAgMzAtNC41IDk3LjQgNS45IDExMyAxLjcgMi41IDEuOCA1LjIgMjQuNiAxMi44IDQuOSAxLjYgNiA5LjggMCA5LjgtMzUuMSAwLTIwLjMtMi01Ni4xLTItMzYuMyAwLTE4LjggMi01NS4xIDItNy45IDAtNS44LTEwLjggMC0xMC44IDEwLjItMy40IDEzLjUtMy41IDIxLjctMTMuOCA3LjctMTIuOSA3LjktNDQuNCA3LjktMTI3LjhsMC0xMDEuMmMwLTIyLjItMTIuMi0yOC4zLTI4LjYtMzIuNC04LjgtMi4yLTQtMTEuOCAxLTExLjggMzYuNSAwIDIwLjYgMiA1Ny4xIDIgMzIuNyAwIDE2LjUtMiA0OS4yLTIgMy4zIDAgOC41IDguMyAxIDEwLjgtNC45IDEuNi0yNy42IDMuNy0yNy42IDM5LjMgMCA0NS42LS4yIDU1LjggMSA2OC44IDAgMS4zIDIuMyAxMi44IDEyLjggMTIuOGwxMDkuMiAwYzEwLjUgMCAxMi44LTExLjUgMTIuOC0xMi44IDEuMi0xMyAxLTIzLjIgMS02OC44IDAtMzUuNi0yMi43LTM3LjctMjcuNi0zOS4zLTcuNS0yLjUtMi4zLTEwLjggMS0xMC44IDMyLjcgMCAxNi41IDIgNDkuMiAyIDM2LjUgMCAyMC42LTIgNTcuMS0yIDQuOSAwIDkuOSA5LjYgMSAxMS44LTE2LjQgNC4xLTI4LjYgMTAuMy0yOC42IDMyLjRsMCAxMDEuMmMwIDgzLjQgLjEgMTE0LjkgNy45IDEyNy44IDguMiAxMC4yIDExLjQgMTAuNCAyMS43IDEzLjggNS44IDAgNy44IDEwLjggMCAxMC44eiJdCiAgICB9OwogICAgZmFTcXVhcmVIYWNrZXJOZXdzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1oYWNrZXItbmV3cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJoYWNrZXItbmV3cy1zcXVhcmUiXSwgImYzYWYiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwek0yMSAyMjkuMnMuMS0uMSAuMS0uMiAuMS0uMiAuMi0uMmMwIC4xIDAgLjMtLjEgLjRsLS4yIDB6TTIzOS4yIDM4NGwtMzEuNCAwIDAtMTAyLjctNzkuOC0xNTMuMyAzNy4zIDBjNDEuNSA3Ny43IDQ4LjEgOTUuOCA1NC4xIDExMiAxLjYgNC4zIDMuMSA4LjUgNS4yIDEzLjYgMy4yLTcgNS4xLTExLjkgNy4xLTE3LjMgNS45LTE1LjMgMTIuOC0zMy4yIDUzLjUtMTA4LjNsMzQuOCAwLTgwLjggMTU1LjEgMCAxMDAuOXoiXQogICAgfTsKICAgIGZhSGFja2VyTmV3c1NxdWFyZSA9IGZhU3F1YXJlSGFja2VyTmV3czsKICAgIGZhQ3JlYXRpdmVDb21tb25zUGRBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1wZC1hbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRlZCIsICJNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYgOCAzOTQuNSAxMjEuNiA1MDQgMjU1LjYgNTA0IDM4NS41IDUwNCA1MDQgNDAzLjEgNTA0IDI1NiA1MDQgMTE4LjEgMzk3LjQgOCAyNTUuNiA4em0uOCA0NTAuOGMtMTEyLjUgMC0yMDMuNy05My0yMDMuNy0yMDIuOCAwLTEwNS40IDg1LjUtMjAzLjMgMjAzLjctMjAzLjMgMTEyLjYgMCAyMDIuOSA4OS41IDIwMi44IDIwMy4zIDAgMTIxLjctOTkuNiAyMDIuOC0yMDIuOCAyMDIuOHpNMzI0LjcgMTg2bC01My4yIDAgMCAxMzcuMiA1My4yIDBjMjEuNCAwIDcwLTUuMSA3MC02OC42IDAtNjMuNC00OC42LTY4LjYtNzAtNjguNnptLjggMTA4LjVsLTE5LjkgMCAwLTc5LjcgMTkuNC0uMWMzLjggMCAzNS0yLjEgMzUgMzkuOSAwIDI0LjYtMTAuNSAzOS45LTM0LjUgMzkuOXpNMjExLjcgMTg2bC02OC4yIDAgMCAxMzcuMyAzNC42IDAgMC00NC4zIDI3IDBjNTQuMSAwIDU3LjEtMzcuNSA1Ny4xLTQ2LjUgMC0zMS0xNi44LTQ2LjUtNTAuNS00Ni41em0tNC45IDY3LjNsLTI5LjIgMCAwLTQxLjYgMjguMyAwYzMwLjkgMCAyOC44IDQxLjYgLjkgNDEuNnoiXQogICAgfTsKICAgIGZhT3JjaWQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAib3JjaWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjhkMiIsICJNMjk0LjcgMTg4LjJsLTQ1LjkgMCAwIDE1My44IDQ3LjUgMGM2Ny42IDAgODMuMS01MS4zIDgzLjEtNzYuOSAwLTQxLjYtMjYuNS03Ni45LTg0LjctNzYuOXpNMjU2IDhhMjQ4IDI0OCAwIDEgMCAwIDQ5NiAyNDggMjQ4IDAgMSAwIDAtNDk2ek0xNzUuMiAzNjguOGwtMjkuOCAwIDAtMjA3LjUgMjkuOCAwIDAgMjA3LjV6TTE2MC4zIDk4LjVhMTkuNiAxOS42IDAgMSAxIDAgMzkuMiAxOS42IDE5LjYgMCAxIDEgMC0zOS4yek0zMDAgMzY5bC04MSAwIDAtMjA3LjcgODAuNiAwYzc2LjcgMCAxMTAuNCA1NC44IDExMC40IDEwMy45IDAgNTMuMy00MS43IDEwMy45LTExMCAxMDMuOXoiXQogICAgfTsKICAgIGZhQmVoYW5jZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiZWhhbmNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxYjQiLCAiTTIzMiAyMzcuMmMzMS44LTE1LjIgNDguNC0zOC4yIDQ4LjQtNzQgMC03MC42LTUyLjYtODcuOC0xMTMuMy04Ny44bC0xNjcuMSAwIDAgMzU0LjQgMTcxLjggMGM2NC40IDAgMTI0LjktMzAuOSAxMjQuOS0xMDIuOSAwLTQ0LjUtMjEuMS03Ny40LTY0LjctODkuN3pNNzcuOSAxMzUuOWw3My4xIDBjMjguMSAwIDUzLjQgNy45IDUzLjQgNDAuNSAwIDMwLjEtMTkuNyA0Mi4yLTQ3LjUgNDIuMmwtNzkgMCAwLTgyLjd6bTgzLjMgMjMzLjdsLTgzLjMgMCAwLTk3LjYgODQuOSAwYzM0LjMgMCA1NiAxNC4zIDU2IDUwLjYgMCAzNS44LTI1LjkgNDctNTcuNiA0N3pNNTE5LjcgMTI4LjlsLTE0My43IDAgMC0zNC45IDE0My43IDAgMCAzNC45ek01NzYgMzA1LjJjMC03NS45LTQ0LjQtMTM5LjItMTI0LjktMTM5LjItNzguMiAwLTEzMS4zIDU4LjgtMTMxLjMgMTM1LjggMCA3OS45IDUwLjMgMTM0LjcgMTMxLjMgMTM0LjcgNjEuMyAwIDEwMS0yNy42IDEyMC4xLTg2LjNsLTYyLjIgMGMtNi43IDIxLjktMzQuMyAzMy41LTU1LjcgMzMuNS00MS4zIDAtNjMtMjQuMi02My02NS4zbDE4NS4xIDBjLjMtNC4yIC42LTguNyAuNi0xMy4yek0zOTAuNCAyNzRjMi4zLTMzLjcgMjQuNy01NC44IDU4LjUtNTQuOCAzNS40IDAgNTMuMiAyMC44IDU2LjIgNTQuOGwtMTE0LjcgMHoiXQogICAgfTsKICAgIGZhTW9uZXJvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1vbmVybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2QwIiwgIk0zNjAgMzg0bDEwOC40IDBDNDI1IDQ1NS45IDM0Ni4xIDUwNCAyNTYgNTA0Uzg3IDQ1NS45IDQzLjYgMzg0bDEwOC40IDAgMC0xMjcuOCAxMDQgMTA0LjggMTA0LTEwNSAwIDEyOHpNOTYgMzM2bDAtMjA4IDE1OS40IDE1OS40IDE2MC42LTE1OS40IDAgMjA4IDc0LjggMGM4LjUtMjUuMSAxMy4yLTUyIDEzLjItODAgMC0xMzctMTExLTI0OC0yNDgtMjQ4UzggMTE5IDggMjU2YzAgMjggNC42IDU0LjkgMTMuMiA4MEw5NiAzMzZ6Il0KICAgIH07CiAgICBmYUZpZ21hID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImZpZ21hIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3OTkiLCAiTTE0IDk1LjhDMTQgNDIuOSA1Ni45IDAgMTA5LjggMEwyNzQuMiAwYzUyLjkgMCA5NS44IDQyLjkgOTUuOCA5NS44IDAgMzMuNS0xNy4yIDYzLTQzLjIgODAuMSAyNiAxNy4xIDQzLjIgNDYuNiA0My4yIDgwLjEgMCA1Mi45LTQyLjkgOTUuOC05NS44IDk1LjhsLTIuMSAwYy0yNC44IDAtNDcuNC05LjQtNjQuNC0yNC45bDAgODguM2MwIDUzLjYtNDQgOTYuOC05Ny40IDk2LjgtNTIuOCAwLTk2LjMtNDIuOC05Ni4zLTk1LjggMC0zMy41IDE3LjItNjMgNDMuMi04MC4xLTI2LTE3LjEtNDMuMi00Ni42LTQzLjItODAuMXMxNy4yLTYzIDQzLjItODAuMUMzMS4yIDE1OC44IDE0IDEyOS4zIDE0IDk1Ljh6bTE2Mi4zIDk1LjhsLTY2LjUgMGMtMzUuNiAwLTY0LjQgMjguOC02NC40IDY0LjQgMCAzNS40IDI4LjYgNjQuMiA2NCA2NC40bDY2LjkgMCAwLTEyOC44ek0yMDcuNyAyNTZjMCAzNS42IDI4LjggNjQuNCA2NC40IDY0LjRsMi4xIDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTIuMSAwYy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHptLTk3LjkgOTUuOGwtLjQgMGMtMzUuNCAuMi02NCAyOS02NCA2NC40czI5LjIgNjQuNCA2NC45IDY0LjRjMzYuMyAwIDY2LTI5LjQgNjYtNjUuNWwwLTYzLjQtNjYuNSAwem0wLTMyMC40Yy0zNS42IDAtNjQuNCAyOC44LTY0LjQgNjQuNHMyOC44IDY0LjQgNjQuNCA2NC40bDY2LjUgMCAwLTEyOC44LTY2LjUgMHptOTcuOSAxMjguOGw2Ni41IDBjMzUuNiAwIDY0LjQtMjguOCA2NC40LTY0LjRzLTI4LjgtNjQuNC02NC40LTY0LjRsLTY2LjUgMCAwIDEyOC44eiJdCiAgICB9OwogICAgZmFJbnN0YWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYxNmQiLCAiTTIyNC4zIDE0MWExMTUgMTE1IDAgMSAwIC0uNiAyMzAgMTE1IDExNSAwIDEgMCAuNi0yMzB6bS0uNiA0MC40YTc0LjYgNzQuNiAwIDEgMSAuNiAxNDkuMiA3NC42IDc0LjYgMCAxIDEgLS42LTE0OS4yem05My40LTQ1LjFhMjYuOCAyNi44IDAgMSAxIDUzLjYgMCAyNi44IDI2LjggMCAxIDEgLTUzLjYgMHptMTI5LjcgMjcuMmMtMS43LTM1LjktOS45LTY3LjctMzYuMi05My45LTI2LjItMjYuMi01OC0zNC40LTkzLjktMzYuMi0zNy0yLjEtMTQ3LjktMi4xLTE4NC45IDAtMzUuOCAxLjctNjcuNiA5LjktOTMuOSAzNi4xcy0zNC40IDU4LTM2LjIgOTMuOWMtMi4xIDM3LTIuMSAxNDcuOSAwIDE4NC45IDEuNyAzNS45IDkuOSA2Ny43IDM2LjIgOTMuOXM1OCAzNC40IDkzLjkgMzYuMmMzNyAyLjEgMTQ3LjkgMi4xIDE4NC45IDAgMzUuOS0xLjcgNjcuNy05LjkgOTMuOS0zNi4yIDI2LjItMjYuMiAzNC40LTU4IDM2LjItOTMuOSAyLjEtMzcgMi4xLTE0Ny44IDAtMTg0Ljh6TTM5OSAzODhjLTcuOCAxOS42LTIyLjkgMzQuNy00Mi42IDQyLjYtMjkuNSAxMS43LTk5LjUgOS0xMzIuMSA5cy0xMDIuNyAyLjYtMTMyLjEtOWMtMTkuNi03LjgtMzQuNy0yMi45LTQyLjYtNDIuNi0xMS43LTI5LjUtOS05OS41LTktMTMyLjFzLTIuNi0xMDIuNyA5LTEzMi4xYzcuOC0xOS42IDIyLjktMzQuNyA0Mi42LTQyLjYgMjkuNS0xMS43IDk5LjUtOSAxMzIuMS05czEwMi43LTIuNiAxMzIuMSA5YzE5LjYgNy44IDM0LjcgMjIuOSA0Mi42IDQyLjYgMTEuNyAyOS41IDkgOTkuNSA5IDEzMi4xczIuNyAxMDIuNy05IDEzMi4xeiJdCiAgICB9OwogICAgZmFQZXJieXRlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBlcmJ5dGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4MyIsICJNMzA1LjMgMjg0LjZsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41ek0xNDkuNCAxMjguN2wtNTguNyAwIDAgOTguNyA1OC43IDBjMTYuMyAwIDI5LTQuNiAzOC4yLTEzLjhzMTMuOC0yMS4yIDEzLjgtMzYuMWMwLTE0LjYtNC43LTI2LjMtMTQtMzUuM3MtMjItMTMuNS0zNy45LTEzLjV6TTM2Ni42IDMyTDgxLjQgMzJjLTIxLjYgMC00Mi4yIDguNi01Ny41IDIzLjlTMCA5MS44IDAgMTEzLjRMMCAzOTguNmMwIDIxLjYgOC42IDQyLjIgMjMuOSA1Ny41UzU5LjggNDgwIDgxLjQgNDgwbDI4NS4zIDBjMjEuNiAwIDQyLjItOC42IDU3LjUtMjMuOVM0NDggNDIwLjIgNDQ4IDM5OC42bDAtMjg1LjNjMC0yMS42LTguNi00Mi4yLTIzLjktNTcuNVMzODguMiAzMiAzNjYuNiAzMnptNjMuNiAzNjYuNmMwIDE2LjktNi43IDMzLTE4LjcgNDVzLTI4LjEgMTguNi00NSAxOC43bC0yODUuMyAwYy0xNi45IDAtMzMtNi43LTQ1LTE4LjdzLTE4LjYtMjguMS0xOC43LTQ1bDAtMjg1LjNjMC0xNi45IDYuNy0zMyAxOC43LTQ1czI4LjEtMTguNiA0NS0xOC43bDI4NS4zIDBjMTYuOSAwIDMzIDYuNyA0NSAxOC43czE4LjYgMjguMSAxOC43IDQ1bDAgMjg1LjN6bS0xMjUtMjY5LjlsLTU4LjcgMCAwIDk4LjcgNTguNyAwYzE2LjMgMCAyOS00LjYgMzguMi0xMy44czEzLjgtMjEuMiAxMy44LTM2LjFjMC0xNC42LTQuNy0yNi4zLTE0LTM1LjNzLTIyLTEzLjUtMzcuOS0xMy41eiJdCiAgICB9OwogICAgZmFTcXVhcmVWaW1lbyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtdmltZW8iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidmltZW8tc3F1YXJlIl0sICJmMTk0IiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzE4LjUgMzA5LjVjLTQzLjUgNTYuNS04MC4zIDg0LjgtMTEwLjQgODQuOC0xOC43IDAtMzQuNC0xNy4yLTQ3LjMtNTEuNi0zLjgtMTMuOS03LjMtMjYuOS0xMC41LTM5LTE4LjItNjguMy0yOC42LTEwNy40LTQ2LjItMTA3LjQtMi40IDAtMTAuOCA1LTI1LjEgMTUuMUw2NCAxOTJjNy02LjEgMTMuOS0xMi40IDIwLjYtMTguNSAyOS4xLTI2LjMgNTUuNi01MC4zIDczLjUtNTEuOSAyNC45LTIuNCA0MC4yIDE0LjYgNDYgNTEuMSAyMC41IDEyOS42IDI5LjYgMTQ5LjIgNjYuOCA5MC41IDEzLjQtMjEuMiAyMC42LTM3LjIgMjEuNS00OC4zIDMuNC0zMi44LTI1LjYtMzAuNi00NS4yLTIyLjIgMTUuNy01MS41IDQ1LjgtNzYuNSA5MC4xLTc1LjEgMzIuOSAxIDQ4LjQgMjIuNCA0Ni41IDY0LTEuNCAzMS4xLTIzLjIgNzMuOC02NS4zIDEyNy45eiJdCiAgICB9OwogICAgZmFWaW1lb1NxdWFyZSA9IGZhU3F1YXJlVmltZW87CiAgICBmYVB1c2hlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwdXNoZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNlMSIsICJNNDE1LjEgMTExLjlsLTk4LjUtOSAxNC0zMy40YzEwLjQtMjMuNS0xMC44LTQwLjQtMjguNy0zN0wzMC42IDc2LjljLTE1LjEgMi43LTI2IDE4LjMtMjEuNCAzNi42TDExNC4zIDQ2MS44YzYuNSAyMS4zIDM2LjcgMjQuMiA0Ny43IDdMMTk3LjMgMzg4IDQzMi41IDE1Ni43YzE2LjQtMTYuOCA0LjMtNDIuOS0xNy40LTQ0Ljh6TTMwNS43IDUzLjZjNS4xLS43IDcuNSAyLjUgNS4yIDcuNGwtMTYuOCAzOS45LTE3Ny40LTE2LjMgMTg5LTMxek0zMC44IDEwNy45Yy0zLjEtNS4xIDEtMTAgNi4xLTkuMWwyNDguNyAyMi43LTk2LjkgMjMwLjctMTU3LjktMjQ0LjN6TTE0NC4xIDQ1Ni40Yy0yLjYgNC03LjkgMy4xLTkuNC0xLjJMNTEuNiAxNzkuNyAxNzkuMyAzNzcuM2MtNyAxNS0zNS4yIDc5LjEtMzUuMiA3OS4xek00MTYuOSAxNDEuOWwtMTk4LjcgMTk1LjQgODkuNy0yMTMuNyAxMDYuNCA5LjdjNCAxLjEgNS43IDUuMyAyLjYgOC42eiJdCiAgICB9OwogICAgZmFNaXhjbG91ZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXhjbG91ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjg5IiwgIk0yMTMgMzQ2LjZsLTMzLjIgMCAwLTE1MS41IDYuMi0yMS42LTEwLjcgMC0zOC4xIDE3My4xLTYxIDAtMzguNC0xNzMuMS0xMC41IDAgNS45IDIxLjYgMCAxNTEuNS0zMy4yIDAgMC0xODEuNiA2NS43IDAgMzYuNiAxNzMuMSA4LjUgMCAzNi42LTE3My4xIDY1LjcgMCAwIDE4MS42em0zMzEuNS02M2wtODYgNjIuMSAwLTM4LjEgNzIuOS01MS44LTcyLjktNTEuOCAwLTM4LjEgODYgNjIuMyA5LjMgMCA4Ni4zLTYyLjMgMCAzOC4xLTczLjEgNTEuOCA3My4xIDUxLjggMCAzOC4xLTg2LjMtNjIuMS05LjMgMHpNNDMwLjIgMjcyLjNsLTE4MiAwIDAtMzMuMSAxODIgMCAwIDMzLjF6Il0KICAgIH07CiAgICBmYVlhbmRleEludGVybmF0aW9uYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAieWFuZGV4LWludGVybmF0aW9uYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZjQxNCIsICJNMTI5LjUgNTEybDAtMTY2LjEtMTExLTI5Ny45IDU1LjggMCA4MS44IDIyOS43IDk0LjEtMjc3LjcgNTEuMyAwLTEyMC43IDM0Ny44IDAgMTY0LjItNTEuMyAweiJdCiAgICB9OwogICAgZmFIaXZlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhpdmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3ZiIsICJNMjYwLjQgMjU0LjlMMTMxLjUgMzMuMWMtLjItLjMtLjUtLjYtLjgtLjhzLS43LS4zLTEuMS0uMy0uOCAuMS0xLjEgLjMtLjYgLjUtLjggLjhMLjMgMjU0LjljLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjFMMTI5LjEgNDc4LjljLjIgLjMgLjUgLjYgLjggLjhzLjcgLjMgMS4xIC4zIC44LS4xIDEuMS0uMyAuNi0uNSAuOC0uOEwyNjAuNCAyNTcuMWMuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMXptMzkuMS0yNS43Yy4yIC4zIC41IC42IC44IC44cy43IC4zIDEuMSAuM2w2Ni41IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjggLjMtLjcgLjMtMS4xLS4xLS44LS4zLTEuMUwyNTkuMSAzMy4xYy0uMi0uMy0uNS0uNi0uOC0uOHMtLjctLjMtMS4xLS4zbC02Ni41IDBjLS40IDAtLjggLjEtMS4xIC4zcy0uNiAuNS0uOCAuOC0uMyAuNy0uMyAxLjEgLjEgLjggLjMgMS4xTDI5OS40IDIyOS4yem0yMTIuMyAyNS43TDM4NC45IDMzLjFjLS4yLS4zLS41LS42LS44LS44cy0uNy0uMy0xLjEtLjNsLTY2LjYgMGMtLjQgMC0uOCAuMS0xLjEgLjNzLS42IC41LS44IC44LS4zIC43LS4zIDEuMSAuMSAuOCAuMyAxLjFMNDQwLjcgMjU2IDMxNC41IDQ3Ni43Yy0uMiAuMy0uMyAuNy0uMyAxLjFzLjEgLjggLjMgMS4xIC41IC42IC44IC44IC43IC4zIDEuMSAuM2w2Ni42IDBjLjQgMCAuOC0uMSAxLjEtLjNzLjYtLjUgLjgtLjhMNTExLjcgMjU3LjFjLjItLjMgLjMtLjcgLjMtMS4xcy0uMS0uOC0uMy0xLjF6TTM2NiAyODQuOWwtNjYuNSAwYy0uNCAwLS44IC4xLTEuMSAuM3MtLjYgLjUtLjggLjhMMTg4LjggNDc2LjdjLS4yIC4zLS4zIC43LS4zIDEuMXMuMSAuOCAuMyAxLjEgLjUgLjYgLjggLjggLjcgLjMgMS4xIC4zbDY2LjUgMGMuNCAwIC44LS4xIDEuMS0uM3MuNi0uNSAuOC0uOEwzNjcuOSAyODguM2MuMi0uMyAuMy0uNyAuMy0xLjFzLS4xLS44LS4zLTEuMS0uNS0uNi0uOC0uOC0uNy0uMy0xLjEtLjN6Il0KICAgIH07CiAgICBmYUNyZWF0aXZlQ29tbW9uc1plcm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy16ZXJvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjMiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptLS40IDYwLjVjLTgxLjkgMC0xMDIuNSA3Ny4zLTEwMi41IDE0Mi44UzE3NC4xIDM5OC44IDI1NiAzOTguOCAzNTguNSAzMjEuNSAzNTguNSAyNTYgMzM3LjkgMTEzLjIgMjU2IDExMy4yem0wIDUzLjljMy4zIDAgNi40IC41IDkuMiAxLjIgNS45IDUuMSA4LjggMTIuMSAzLjEgMjEuOUwyMTMuOCAyOTAuNGMtMS43LTEyLjctMS45LTI1LjEtMS45LTM0LjQgMC0yOC44IDItODguOSA0NC4xLTg4Ljl6bTQwLjggNDYuMmMyLjkgMTUuNCAzLjMgMzEuNCAzLjMgNDIuNyAwIDI4LjktMiA4OC45LTQ0LjEgODguOS0xMy41IDAtMzIuNi03LjctMjAuMS0yNi40bDYwLjktMTA1LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVNuYXBjaGF0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1zbmFwY2hhdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJzbmFwY2hhdC1zcXVhcmUiXSwgImYyYWQiLCAiTTM4NCAzMkw2NCAzMmMtMTcgMC0zMy4zIDYuNy00NS4zIDE4LjdTMCA3OSAwIDk2TDAgNDE2YzAgMTcgNi43IDMzLjMgMTguNyA0NS4zUzQ3IDQ4MCA2NCA0ODBsMzIwIDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdTNDQ4IDQzMyA0NDggNDE2bDAtMzIwYzAtMTctNi43LTMzLjMtMTguNy00NS4zUzQwMSAzMiAzODQgMzJ6bS0zLjkgMzE5LjNsLS4xIC4xYy0yLjUgMi44LTUuNCA1LjEtOC43IDYuOC02LjUgMy42LTEzLjQgNi4zLTIwLjYgOC4yLTEuNCAuNC0yLjcgMS0zLjkgMS44LTIuMiAxLjktMi4xIDQuNi00LjQgOC42LTEuNyAzLTQgNS41LTYuOCA3LjUtNi43IDQuNi0xNC4yIDQuOS0yMi4yIDUuMi03LjIgLjMtMTUuNCAuNi0yNC43IDMuNy0zLjggMS4yLTcuOCAzLjctMTIuNCA2LjUtMTEuMyA2LjktMjYuNyAxNi40LTUyLjMgMTYuNHMtNDAuOS05LjQtNTIuMS0xNi4zYy00LjctMi45LTguNy01LjQtMTIuNS02LjYtOS4zLTMuMS0xNy41LTMuNC0yNC43LTMuNy04LS4zLTE1LjUtLjYtMjIuMi01LjItMi40LTEuNi00LjQtMy43LTYtNi4xLTMuMi00LjYtMi45LTcuOC01LjMtOS45LTEuMy0uOC0yLjYtMS41LTQuMS0xLjgtNy4xLTEuOS0xMy45LTQuNi0yMC4zLTguMS0zLjEtMS42LTUuOS0zLjgtOC4zLTYuMy02LjYtNi44LTguMy0xNC44LTUuNy0yMS44IDMuNC05LjMgMTEuNi0xMi4xIDE5LjQtMTYuMyAxNC44LTggMjYuMy0xOC4xIDM0LjQtMjkuOSAyLjMtMy4zIDQuMy02LjkgNi0xMC42IC44LTIuMiAuOC0zLjMgLjItNC40LS42LS45LTEuMy0xLjYtMi4yLTIuMi0yLjUtMS43LTUuMS0zLjQtNi45LTQuNS0zLjMtMi4xLTUuOS0zLjgtNy41LTUtNi4zLTQuNC0xMC42LTktMTMuNC0xNC4yLTEuOS0zLjYtMy03LjYtMy4zLTExLjZzLjQtOC4xIDEuOS0xMS45YzQuMS0xMC45IDE0LjUtMTcuNyAyNy0xNy43IDIuNiAwIDUuMyAuMyA3LjggLjggLjcgLjIgMS40IC4zIDIgLjUtLjEtNy40IC4xLTE1LjQgLjctMjMuMSAyLjQtMjcuMyAxMS45LTQxLjYgMjEuOS01MyA2LjQtNy4yIDEzLjktMTMuMiAyMi4zLTE3LjkgMTUuMS04LjYgMzIuMi0xMyA1MC45LTEzczM1LjggNC40IDUwLjkgMTNjOC4zIDQuNyAxNS45IDEwLjggMjIuMiAxNy45IDEwIDExLjQgMTkuNSAyNS43IDIxLjkgNTMgLjYgNy43IC45IDE1LjQgLjcgMjMuMSAuNy0uMiAxLjQtLjMgMi4xLS41IDIuNi0uNiA1LjItLjggNy44LS44IDEyLjUgMCAyMi44IDYuOCAyNyAxNy43IDEuNSAzLjggMi4xIDcuOSAxLjkgMTEuOXMtMS40IDgtMy4zIDExLjZjLTIuNyA1LjItNy4xIDkuOS0xMy40IDE0LjItMS43IDEuMi00LjMgMi45LTcuNSA1LTEuOCAxLjItNC41IDIuOS03LjIgNC43LS44IC41LTEuNCAxLjItMS45IDItLjUgMS0uNSAyLjIgLjIgNC4yIDEuNyAzLjggMy43IDcuNCA2LjEgMTAuOCA4LjMgMTIuMSAyMC4yIDIyLjMgMzUuNSAzMC40IDEuNSAuOCAzIDEuNSA0LjQgMi4zIC43IC4zIDEuNiAuOCAyLjUgMS4zIDQuOSAyLjcgOS4yIDYgMTEuNSAxMi4yIDIuNSA2LjkgMSAxNC43LTUuMiAyMS4zem0tMTYuNy0xOC41Yy01MC4zLTI0LjMtNTguMy02MS45LTU4LjctNjQuNy0uNC0zLjQtLjktNiAyLjgtOS41IDMuNi0zLjMgMTkuNS0xMy4yIDI0LTE2LjMgNy4zLTUuMSAxMC41LTEwLjIgOC4yLTE2LjUtMS43LTQuMy01LjctNi0xMC02LTEuMyAwLTIuNyAuMi00IC40LTggMS43LTE1LjggNS44LTIwLjQgNi45LS41IC4xLTEuMSAuMi0xLjcgLjItMi40IDAtMy4zLTEuMS0zLjEtNCAuNi04LjggMS44LTI1LjkgLjQtNDEuOS0xLjktMjItOS0zMi45LTE3LjQtNDIuNi00LjEtNC42LTIzLjEtMjQuNy01OS41LTI0LjdzLTU1LjQgMjAuMS01OS41IDI0LjhjLTguNCA5LjctMTUuNSAyMC42LTE3LjQgNDIuNi0xLjQgMTYtLjEgMzMuMSAuNCA0MS45IC4yIDIuOC0uNyA0LTMuMSA0LS42IDAtMS4xLS4xLTEuNy0uMi00LjUtMS4xLTEyLjMtNS4xLTIwLjMtNi45LTEuMy0uMy0yLjYtLjQtNC0uNC00LjMgMC04LjMgMS42LTEwIDYtMi40IDYuMyAuOCAxMS40IDguMiAxNi41IDQuNCAzLjEgMjAuNCAxMyAyNCAxNi4zIDMuNyAzLjQgMy4yIDYuMSAyLjggOS41LS40IDIuOC04LjQgNDAuNC01OC43IDY0LjctMi45IDEuNC04IDQuNCAuOSA5LjMgMTMuOSA3LjYgMjMuMSA2LjggMzAuMyAxMS40IDYuMSAzLjkgMi41IDEyLjQgNi45IDE1LjQgNS41IDMuOCAyMS42LS4zIDQyLjMgNi42IDE3LjQgNS43IDI4LjEgMjIgNTkgMjJzNDEuOC0xNi4zIDU4LjktMjJjMjAuOC02LjkgMzYuOS0yLjggNDIuMy02LjYgNC40LTMuMSAuOC0xMS41IDYuOS0xNS40IDcuMi00LjYgMTYuNC0zLjggMzAuMy0xMS41IDguOC00LjkgMy44LTcuOSAuOS05LjR6Il0KICAgIH07CiAgICBmYVNuYXBjaGF0U3F1YXJlID0gZmFTcXVhcmVTbmFwY2hhdDsKICAgIGZhVGhlbWVpc2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRoZW1laXNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmIyIiwgIk0yMDggODguM2MwLTEwIDYuMy0yMS43IDE3LjctMjEuNyAxMS4xIDAgMTcuNyAxMS43IDE3LjcgMjEuNyAwIDEwLjMtNi42IDIxLjctMTcuNyAyMS43LTExLjQgMC0xNy43LTExLjQtMTcuNy0yMS43em0zMDQgMTYwYzAgMzYtMTEuNCAxMDIuMy0zNi4zIDEyOS43LTIyLjkgMjQuOS04Ny40IDYxLjEtMTIwLjkgNzAuNmwtMS4xIC4zIDAgMzIuNmMwIDE2LjMtMTIuNiAzMC42LTI5LjEgMzAuNi0xMCAwLTE5LjQtNS43LTI0LjYtMTQuMy01LjQgOC42LTE0LjkgMTQuMy0yNC45IDE0LjNzLTE5LjQtNS43LTI0LjktMTQuM2MtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTEwLjMgMC0xOS40LTUuNy0yNC45LTE0LjMtNS4xIDguNi0xNC42IDE0LjMtMjQuNiAxNC4zLTE4LjkgMC0yOS40LTE1LjctMjkuNC0zMi45LTE2LjMgMTIuMy0zNS43IDE5LjQtNTYuNiAxOS40LTIyIDAtNDMuNC04LjMtNjAuMy0yMi45IDEwLjMtLjMgMjAuNi0yLjMgMzAuMy01LjctMjAuOS01LjctMzkuNC0xOC45LTUyLTM2LjMgMjEuNCA0LjYgNDYuMiAxLjcgNjcuMS0xMS4xLTIyLTIyLTU2LjYtNTguOS02OC42LTg3LjQtNS43LTEzLjQtNi45LTMxLjQtNi45LTQ1LjcgMC00OS43IDIwLjMtMTYwIDg2LjMtMTYwIDEwLjYgMCAxOC45IDQuOSAyMy4xIDE0LjkgMy43LTUuNCA3LjctMTAuNSAxMi0xNS40IDItMi42IDUuNy01LjQgNy4xLTguMyA4LTEyLjYgMTEuNy0yMS4xIDIxLjctMzQgMzIuMy00MS4xIDgxLjctNjkuNCAxMzQuOS02OS40IDYgMCAxMiAuMyAxNy43IDEuMSAxMC45LTExLjcgMjYtMTguMyA0MS43LTE4LjMgMTQuNiAwIDI5LjcgNiA0MCAxNi4zIC45IC45IDEuNCAyLjMgMS40IDMuNCAwIDMuNy0xMC4zIDEzLjQtMTIuOSAxNi4zIDQuMyAxLjQgMTUuNyA2LjkgMTUuNyAxMiAwIDIuOS0yLjkgNS4xLTQuNiA3LjEgMzEuNCAyNy43IDQ5LjQgNjcuMSA1Ni4zIDEwOCA0LjMtNS4xIDEwLjMtOC42IDE3LjEtOC42IDEwLjYgMCAyMC45IDcuMSAyOC42IDE0IDIwLjkgMTguNiAyNS43IDUzLjEgMjUuNyA3OS43ek0xODggODkuNGMwIDE4LjMgMTIuNiAzNy4xIDMyLjMgMzcuMXMzMi4zLTE4LjkgMzIuMy0zNy4xYzAtMTgtMTIuNi0zNi45LTMyLjMtMzYuOVMxODggNzEuNCAxODggODkuNHpNMjM3LjcgMTk0YzAtMTkuNyAzLjctMzkuMSA4LjYtNTguMy01MiA3OS41LTEzLjUgMTg0LjYgNjguOSAxODQuNiAyMS40IDAgNDIuNi03LjcgNjAtMjAgMi03LjQgMy43LTE0LjkgMy43LTIyLjYgMC0xNC4zLTYuMy0yMS40LTIwLjYtMjEuNC00LjYgMC05LjEgLjktMTMuNCAxLjctNjMuMyAxMi43LTEwNy4xIDMuNy0xMDcuMS02NHpNMTk2LjYgNDQ4LjljMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAgOS43LTIwIDIwLjlsMCAzMi42YzAgMTEuMSA4LjYgMjEuMSAyMCAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjEgMGMwLTExLjEtOC42LTIwLjktMjAtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLTEwIDIwLTIxLjFsMC0zMi42em00OS43IDBjMC0xMS4xLTguOS0yMC45LTIwLjMtMjAuOXMtMjAuMyA5LjctMjAuMyAyMC45bDAgMzIuNmMwIDExLjEgOC45IDIxLjEgMjAuMyAyMS4xczIwLjMtOS43IDIwLjMtMjEuMWwwLTMyLjZ6bTQ5LjcgMGMwLTExLjEtOC45LTIwLjktMjAuMy0yMC45cy0yMC4zIDkuNy0yMC4zIDIwLjlsMCAzMi42YzAgMTEuMSA4LjkgMjEuMSAyMC4zIDIxLjFzMjAuMy0xMCAyMC4zLTIxLjFsMC0zMi42ek00MjEuNyAyODZjLTMwLjkgNTkuMS05MC4zIDEwMi42LTE1OC42IDEwMi42LTk2LjYgMC0xNjAuNi04NC42LTE2MC42LTE3Ni42IDAtMTYuOSAyLTMzLjQgNi00OS43LTIwIDMzLjctMjkuNyA3Mi42LTI5LjcgMTExLjQgMCA2MC4zIDI0LjkgMTIxLjcgNzEuNCAxNjAuOSA1LjEtOS43IDE0LjktMTYuMyAyNi0xNi4zIDEwIDAgMTkuNCA1LjcgMjQuNiAxNC4zIDUuNC04LjYgMTQuNi0xNC4zIDI0LjktMTQuMyAxMCAwIDE5LjQgNS43IDI0LjYgMTQuMyA1LjQtOC42IDE0LjktMTQuMyAyNC45LTE0LjNzMTkuNCA1LjcgMjQuOSAxNC4zYzUuMS04LjYgMTQuNi0xNC4zIDI0LjYtMTQuMyAxMC45IDAgMjAuOSA2LjYgMjUuNyAxNiA0My40LTM2LjMgNjguNi05MiA3MS40LTE0OC4zem0xMC42LTk5LjdjMC01My43LTM0LjYtMTA1LjctOTIuNi0xMDUuNy0zMC4zIDAtNTguNiAxNS4xLTc4LjkgMzYuOS0yMCA2Ni40LTI3LjQgMTM2LjYgNDEuNCAxMzYuNiAyOC44IDAgOTcuNC0yOC41IDg0LjMgMzYuOSAyOC45LTI2IDQ1LjctNjUuNyA0NS43LTEwNC42eiJdCiAgICB9OwogICAgZmFEYXJ0TGFuZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkYXJ0LWxhbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTY5MyIsICJNMzc4LjYgNzguOWMtMi44LS4xLTUuNi0uMi04LjUtLjJsLTI2NC4xIDAgMTQzLjItNzJjNy40LTQuNCAxOC44LTYuNyAzMC40LTYuNyAxMy41IDAgMjkuNCA5LjIgMzcgMTYuOGw2MiA2MiAwIC4xek0xMDcuMyA5Ni41bDI2Mi44IDBjMTYgMCAyNS40IDEuNCAzNS40IDkuM2wxMDYuNSAxMDYuNCAwIDIwOC44LTc5LjMgLjctMzI1LjQtMzI1LjJ6TTk2LjUgMzczbDAtMjYyLjIgMzIzLjggMzIzLjggLjcgNzcuNC0yMTIuMiAwLTk4LjEtOTguMkM5OS40IDQwMi41IDk2LjUgMzk4LjUgOTYuNSAzNzN6TTc4LjcgMTA1LjNsMCAyNjcuN2MwIDMuMyAuMSA2LjMgLjIgOS4xbC02Mi02MkM2LjUgMzA5LjMgMCAyOTQuMyAwIDI3OS42IDAgMjcyLjggMy45IDI2Mi4xIDYuNyAyNTZsNzItMTUwLjd6Il0KICAgIH07CiAgICBmYURlcGxveWRvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkZXBsb3lkb2ciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM4ZSIsICJNMzgyLjIgMTM2bDUxLjcgMCAwIDIzOS42LTUxLjcgMCAwLTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlsMC0xMDMuOXpNMzE3LjUgMjk3LjhhMzMuMiAzMy4yIDAgMSAwIDY2LjQgMSAzMy4yIDMzLjIgMCAxIDAgLTY2LjQtMXpNMTg4LjUgMTM2bDUxLjcgMCAwIDIzOS42LTUxLjcgMCAwLTIwLjdjLTE5LjggMjQuOC01Mi44IDI0LjEtNzMuOCAxNC43LTI2LjItMTEuNy00NC4zLTM4LjEtNDQuMy03MS44IDAtMjkuOCAxNC44LTU3LjkgNDMuMy03MC44IDIwLjItOS4xIDUyLjctMTAuNiA3NC44IDEyLjlsMC0xMDMuOXpNMTIzLjggMjk3LjhhMzMuMiAzMy4yIDAgMSAwIDY2LjQgMSAzMy4yIDMzLjIgMCAxIDAgLTY2LjQtMXpNNDQ4IDk2YzE3LjUgMCAzMiAxNC40IDMyIDMybDAgMjU2YzAgMTcuNS0xNC40IDMyLTMyIDMyTDY0IDQxNmMtMTcuNSAwLTMyLTE0LjQtMzItMzJsMC0yNTZjMC0xNy41IDE0LjQtMzIgMzItMzJsMzg0IDB6bTAtMzJMNjQgNjRDMjguOCA2NCAwIDkyLjggMCAxMjhMMCAzODRjMCAzNS4yIDI4LjggNjQgNjQgNjRsMzg0IDBjMzUuMiAwIDY0LTI4LjggNjQtNjRsMC0yNTZjMC0zNS4yLTI4LjgtNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYUZsaXBib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmbGlwYm9hcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjQ0ZCIsICJNMCAzMmwwIDQ0OCA0NDggMCAwLTQ0OC00NDggMHpNMzU4LjQgMjExLjJsLTg5LjYgMCAwIDg5LjYtODkuNiAwIDAgODkuNi04OS42IDAgMC0yNjguOCAyNjguOCAwIDAgODkuNnoiXQogICAgfTsKICAgIGZhQnV5TkxhcmdlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJ1eS1uLWxhcmdlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4YTYiLCAiTTI4OC4yIDMyQzEzMy41IDMyIDggMTMyLjMgOCAyNTZTMTMzLjUgNDgwIDI4OC4yIDQ4MCA1NjguNCAzNzkuNyA1NjguNCAyNTYgNDQyLjkgMzIgMjg4LjIgMzJ6TTIwMi44IDM4OS4ybC0xMzguNSAxLjQgNzcuMi0yOTAuNyAxMzMuNCAwYzYzLjIgMCA4NC45IDI4LjYgNzggNzIuOC0uNCAyLjMtLjkgNC42LTEuNSA2LjktNS42LTEuMy0xMS40LTEuOS0xNy4yLTEuOS00Mi4zIDAtNzYuNyAzMy45LTc2LjcgNzUuNyAwIDM3LjEgMjcuMSA2OCA2Mi45IDc0LjUtMTguMiAzNy4yLTU2LjIgNjAuOS0xMTcuNyA2MS41ek0zNTguMiAyMDcuMWwzMiAwLTIyLjIgOTAuMy0zNS40IDAtMTEuMi0zNS42LTcuOCAzNS42LTM3LjggMCAyNi42LTkwLjMgMzEuMyAwIDE1IDM2LjggOS40LTM2Ljh6TTUwNC4xIDM4OS4ybC0xOTcuMSAwIDE1LjgtNjEuMmMzLjggLjYgNy42IC44IDExLjUgLjggNDIuMyAwIDc2LjctMzMuOSA3Ni43LTc1LjYgMC0zMi42LTIxLTYwLjUtNTAuNC03MS4xbDIxLjMtODIuNCA5Mi41IDAtNTMgMjA1LjQgMTAzLjkgMC0yMS4yIDg0LjF6TTIxMS45IDI2OS40bC0yNC43IDAtMTMuOCA1Ni41IDI0LjcgMGMxNi4xIDAgMzIuMS0zLjIgMzcuOS0yNi42IDUuNi0yMi4zLTgtMjkuOC0yNC4xLTI5Ljh6TTIzMy4yIDE3MGwtMjEuMyAwLTExLjcgNDcuNyAyMS40IDBjMTggMCAzNS40LTE0LjYgMzkuMi0zMC4xIDQuNi0xOC45LTkuNS0xNy42LTI3LjYtMTcuNnoiXQogICAgfTsKICAgIGZhV2F0Y2htYW5Nb25pdG9yaW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIndhdGNobWFuLW1vbml0b3JpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA4NyIsICJNMjU2IDE2YTI0MCAyNDAgMCAxIDAgMCA0ODAgMjQwIDI0MCAwIDEgMCAwLTQ4MHpNMTIxLjcgNDI5LjFjLTUxLjYtNDAuMi04NC45LTEwMi44LTg0LjktMTczLjEgMC0yMS43IDMuMi00My4zIDkuNi02NC4xbDEwMi45LTE3LjktLjEgMTEtMTMuOSAycy0uMSAxMi41LS4xIDE5LjVjMCAyIC40IDQgMS4yIDUuOHMyLjEgMy40IDMuNyA0LjZsOS41IDcuNC0yNy43IDIwNC45ek0yMjcuNCAxNDUuOWw4LjUtNy42czYuOS01LjQtLjEtOS4zYy03LjItNC0zOS41LTM0LjUtMzkuNS0zNC41LTUuMy01LjUtOC4zLTcuMy0xNS41IDAgMCAwLTMyLjMgMzAuNS0zOS41IDM0LjUtNy4xIDQtLjEgOS4zLS4xIDkuM2w4LjUgNy42IDAgNC40LTczLjUtMTkuMmMzOS42LTU2LjkgMTA1LjUtOTQuMyAxODAtOTQuMyAzMS4zIDAgNjIuMiA2LjcgOTAuNiAxOS42czUzLjggMzEuOCA3NC4zIDU1LjRsLTE5My41IDM3LjcgMC0zLjZ6bTM0LjEgMzI5LjNsLTMzLjktMjUwLjkgOS41LTcuNGMxLjYtMS4yIDIuOC0yLjggMy43LTQuNnMxLjMtMy44IDEuMi01LjhjMC03LS4xLTE5LjUtLjEtMTkuNWwtMTMuOS0yLS4xLTEwLjUgMjQxLjcgMzEuNGMzLjkgMTYuNCA1LjggMzMuMyA1LjggNTAuMSAwIDExOS4xLTk1LjQgMjE2LjItMjEzLjggMjE5LjF6Il0KICAgIH07CiAgICBmYUhpcHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaGlwcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDUyIiwgIk0yNTEuNiAxNTcuNmMwLTEuOS0uOS0yLjgtMi44LTIuOGwtNDAuOSAwYy0xLjYgMC0yLjcgMS40LTIuNyAyLjhsMCAyMDEuOGMwIDEuNCAxLjEgMi44IDIuNyAyLjhsNDAuOSAwYzEuOSAwIDIuOC0uOSAyLjgtMi44bDAtMjAxLjh6TTE1Ni41IDE2OGMtMTYuMS0xMS44LTM2LjMtMTcuOS02MC4zLTE4LTE4LjEtLjEtMzQuNiAzLjctNDkuOCAxMS40bDAtODEuMmMwLTEuOC0uOS0yLjctMi44LTIuN2wtNDAuOSAwQy45IDc3LjUgMCA3OC40IDAgODAuMkwwIDM1OS40YzAgMS45IC45IDIuOCAyLjcgMi44bDQxIDBjMS45IDAgMi44LS45IDIuOC0yLjhsMC0xMzYuMWMwLS44LTIuOC0yNyA0NS44LTI3IDQ4LjUgMCA0NS44IDI2LjEgNDUuOCAyN2wwIDEyMi42YzAgOSA3LjMgMTYuMyAxNi40IDE2LjNsMjcuMyAwYzEuOCAwIDIuNy0uOSAyLjctMi44bDAtMTM2LjFjMC0yMy40LTkuMy00MS44LTI4LTU1LjN6TTYzNC45IDI3OC4xYy02LjgtMTUuNy0xOC40LTI3LTM0LjktMzQuMWwtNTcuNi0yNS4zYy04LjYtMy42LTkuMi0xMS4yLTIuNi0xNi4xIDcuNC01LjUgNDQuMy0xMy45IDg0IDYuOCAxLjcgMSA0LS4zIDQtMi40bDAtNDQuN2MwLTEuMy0uNi0yLjEtMS45LTIuNi0xNy43LTYuNi0zNi4xLTkuOS01NS4xLTkuOS0yNi41IDAtNDUuMyA1LjgtNTguNSAxNS40LS41IC40LTI4LjQgMjAtMjIuNyA1My43IDMuNCAxOS42IDE1LjggMzQuMiAzNy4yIDQzLjZMNTgwLjQgMjg2YzExLjYgNS4xIDE1LjIgMTMuMyAxMi4yIDIxLjItMy43IDkuMS0xMy4yIDEzLjYtMzYuNSAxMy42LTI0LjMgMC00NC43LTguOS01OC40LTE5LjEtMi4xLTEuNC00LjQgLjItNC40IDIuM2wwIDM0LjRjMCAxMC40IDQuOSAxNy4zIDE0LjYgMjAuNyAxNS42IDUuNSAzMS42IDguMiA0OC4yIDguMiAxMi43IDAgMjUuOC0xLjIgMzYuMy00LjMgLjctLjMgMzYtOC45IDQ1LjYtNDUuOCAzLjUtMTMuNSAyLjQtMjYuNS0zLjEtMzkuMXpNMzc2LjIgMTQ5LjhjLTMxLjcgMC0xMDQuMiAyMC4xLTEwNC4yIDEwMy41bDAgMTgzLjVjMCAuOCAuNiAyLjcgMi43IDIuN2w0MC45IDBjMS45IDAgMi44LS45IDIuOC0yLjdsMC04OC44YzE2LjUgMTIuNyAzNS44IDE5LjEgNTcuNyAxOS4xIDYwLjUgMCAxMDguNy00OC41IDEwOC43LTEwOC43IC4xLTYwLjMtNDguMi0xMDguNi0xMDguNi0xMDguNnptMCA0Ni42YTYyLjIgNjIuMiAwIDEgMSAwIDEyNC4zIDYyLjIgNjIuMiAwIDEgMSAwLTEyNC4zek0yMjguMyA3Mi41Yy0xNS45IDAtMjguOCAxMi45LTI4LjkgMjguOSAwIDE1LjYgMTIuNyAyOC45IDI4LjkgMjguOXMyOC45LTEzLjEgMjguOS0yOC45YzAtMTYuMi0xMy0yOC45LTI4LjktMjguOXoiXQogICAgfTsKICAgIGZhQ2xvdWR2ZXJzaWZ5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNsb3VkdmVyc2lmeSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzg1IiwgIk0xNjAuNiAzMDRjOC4yIDY4LjUgNjcuNCAxMTUuNSAxNDYgMTExLjMgNTEuMiA0My4zIDEzNi44IDQ1LjggMTg2LjQtNS42IDY5LjIgMS4xIDExOC41LTQ0LjYgMTMxLjUtOTkuNSAxNC44LTYyLjUtMTguMi0xMzIuNS05Mi4xLTE1NS4xLTMzLTg4LjEtMTMxLjQtMTAxLjUtMTg2LjUtODUtNTcuMyAxNy4zLTg0LjMgNTMuMi05OS4zIDEwOS43LTcuOCAyLjctMjYuNSA4LjktNDUgMjQuMSAxMS43IDAgMTUuMiA4LjkgMTUuMiAxOS41bDAgMjAuNGMwIDEwLjctOC43IDE5LjUtMTkuNSAxOS41bC0yMC4yIDBjLTEwLjcgMC0xOS41LTYtMTkuNS0xNi43bDAtNi42LTQ2LjggMGMtMy44IDAtMTAuOCA0LjMtMTAuOCAxMS45bDAgNDAuNGMwIDYuNCA1LjMgMTEuOCAxMS43IDExLjhsNDguOSAwIDAtLjF6TTM4OCAzMTJjLTEwLjcgNDYuMyAyMS43IDcyLjQgNTUuMyA4Ni44LTEwNy4yIDMzLjgtMTcxLjYtNTAuOC0xMzUuMy0xMTAuOC0zMy4yIDIxLjYtMzMuNyA3MS4yLTI5LjIgOTIuOS0xNy45LTEyLjQtNTMuOC0zMi40LTU3LjQtNzkuOC0zLTM5LjkgMjEuNS03NS43IDU3LTkzLjkgMzAuNi0xNS44IDEwMy41LTguNSAxMzMuNiA0MC44LTE0LjEtNDgtNTMuOC03MC4xLTEwMS44LTc0LjggMzAuOS0zMC43IDY0LjQtNTAuMyAxMTQuMi00My43IDY5LjggOS4zIDEzMy4yIDgyLjggNjcuNyAxNTAuNSAzNS0xNi4zIDQ4LjctNTQuNCA0Ny41LTc2LjlsMTAuNSAxOS42YzExLjggMjIgMTUuMiA0Ny42IDkuNCA3Mi05LjIgMzktNDAuNiA2OC44LTc5LjcgNzYuNS0zMi4xIDYuMy04My4xLTUuMS05MS44LTU5LjJ6TTE0MCAyMDhsLTM5LjggMGMtOC45IDAtMTYuMi03LjMtMTYuMi0xNi4ybDAtMzkuNmMwLTguOSA3LjMtMTYuMiAxNi4yLTE2LjJsMzkuOCAwYzguOSAwIDE2LjIgNy4zIDE2LjIgMTYuMmwwIDM5LjZjMCA4LjktNy4zIDE2LjItMTYuMiAxNi4yek0yMi4xIDE2OGMtNS42IDAtMTAuMS00LjUtMTAuMS0xMC4xbDAtMjcuOGMwLTUuNiA0LjUtMTAuMSAxMC4xLTEwLjFsMjcuNyAwYzUuNSAwIDEwLjEgNC41IDEwLjEgMTAuMWwwIDI3LjhjMCA1LjYtNC41IDEwLjEtMTAuMSAxMC4xbC0yNy43IDB6TTE4MCAxNDIuN2wwLTIxLjRjMC01LjEgNC4yLTkuMyA5LjMtOS4zbDIxLjQgMGM1LjEgMCA5LjMgNC4yIDkuMyA5LjNsMCAyMS40YzAgNS4xLTQuMiA5LjMtOS4zIDkuM2wtMjEuNCAwYy01LjEgMC05LjMtNC4yLTkuMy05LjN6TTY4IDIzNS41bDAgMjVjMCA2LjMtNS4xIDExLjUtMTEuNCAxMS41bC0yNS4yIDBjLTYuMyAwLTExLjQtNS4yLTExLjQtMTEuNWwwLTI1YzAtNi4zIDUuMS0xMS41IDExLjQtMTEuNWwyNS4xIDBjNi40IDAgMTEuNSA1LjIgMTEuNSAxMS41eiJdCiAgICB9OwogICAgZmFHb29kcmVhZHMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29vZHJlYWRzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTgiLCAiTTI5OS45IDE5MS4yYzUuMSAzNy4zLTQuNyA3OS0zNS45IDEwMC43LTIyLjMgMTUuNS01Mi44IDE0LjEtNzAuOCA1LjctMzcuMS0xNy4zLTQ5LjUtNTguNi00Ni44LTk3LjIgNC4zLTYwLjkgNDAuOS04Ny45IDc1LjMtODcuNSA0Ni45LS4yIDcxLjggMzEuOCA3OC4yIDc4LjN6TTQ0OCA4OGwwIDMzNmMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA0ODBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgODhDMCA1Ny4xIDI1LjEgMzIgNTYgMzJsMzM2IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZ6TTMzMCAzMTMuMnMtLjEtMzQtLjEtMjE3LjNsLTI5IDAgMCA0MC4zYy0uOCAuMy0xLjItLjUtMS42LTEuMi05LjYtMjAuNy0zNS45LTQ2LjMtNzYtNDYtNTEuOSAuNC04Ny4yIDMxLjItMTAwLjYgNzcuOC00LjMgMTQuOS01LjggMzAuMS01LjUgNDUuNiAxLjcgNzcuOSA0NS4xIDExNy44IDExMi40IDExNS4yIDI4LjktMS4xIDU0LjUtMTcgNjktNDUuMiAuNS0xIDEuMS0xLjkgMS43LTIuOSAuMiAuMSAuNCAuMSAuNiAuMiAuMyAzLjggLjIgMzAuNyAuMSAzNC41LS4yIDE0LjgtMiAyOS41LTcuMiA0My41LTcuOCAyMS0yMi4zIDM0LjctNDQuNSAzOS41LTE3LjggMy45LTM1LjYgMy44LTUzLjItMS4yLTIxLjUtNi4xLTM2LjUtMTktNDEuMS00MS44LS4zLTEuNi0xLjMtMS4zLTIuMy0xLjNsLTI2LjggMGMuOCAxMC42IDMuMiAyMC4zIDguNSAyOS4yIDI0LjIgNDAuNSA4Mi43IDQ4LjUgMTI4LjIgMzcuNCA0OS45LTEyLjMgNjcuMy01NC45IDY3LjQtMTA2LjN6Il0KICAgIH07CiAgICBmYVRpZGFsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInRpZGFsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU3ZGMiLCAiTTEwNy4yIDQ4bC0xLjMgMGMtMzIuMyAzMy4xLTY1LjQgNjUuNS05OCA5OC41LTIuNiAyLjgtNi4xIDUuMS03LjkgOC42IDM1LjYgMzUuNCA3MSA3MSAxMDYuNiAxMDYuNCAzNS40LTM1LjMgNzAuNy03MC44IDEwNi4xLTEwNi4xbDAtMS4zLTczLjItNzMuMkMxMjguOCA2OS44IDExNy4zIDU5LjYgMTA3LjIgNDh6bTIxMy41IDBsLTEuMyAwYy0zNC45IDM2LjEtNzEuNSA3MS0xMDYuMyAxMDcuMiAzNS45IDM1LjEgNzEgNzEgMTA2LjcgMTA2LjMgMzQuMy0zNC4xIDY4LjQtNjguNCAxMDIuNi0xMDIuNCAxLjUtMS41IDMuMy0yLjggNC4xLTQuOC0zNC42LTMzLjgtNjguNC02OC4yLTEwMi42LTEwMi4xLTEuMy0xLjMtMi4zLTIuNi0zLjMtNC4xem0yMTMuNSAwbC0xLjMgMGMtMTcuMiAxOC0zNS4xIDM1LjMtNTIuNiA1My0xNy45IDE3LjctMzUuNCAzNS43LTUzLjUgNTMuMyAuOCAyLjMgMyAzLjYgNC42IDUuNUw1MzMuMyAyNjEuNWMzNi4xLTM0LjkgNzAuOC03MS4yIDEwNi43LTEwNi4xLS41LTIuMi0yLjYtMy41LTQtNUw1NTUuOCA3MC4yYy03LjEtNy40LTE0LjktMTQuMi0yMS41LTIyLjJ6TTMxOS42IDI2MS43Yy0zNC45IDM1LjEtNzAgNzAtMTA0LjkgMTA0LjktLjMgLjctLjcgMS43LTEgMi4zIDI0IDIzLjcgNDcuNyA0Ny41IDcxLjUgNzEuMyAxMS44IDExLjMgMjIuOCAyMy41IDM0LjkgMzQuNCA4LjQtNy40IDE2LjQtMTYuNCAyNC43LTI0LjMgMjUuNS0yNS4zIDUxLTUxIDc2LjUtNzYuMyAxLjgtMi4yIDQuMy0zLjYgNS41LTYuMy0zNS40LTM0LjktNzAuNS03MC4yLTEwNS42LTEwNS40bC0xLjUtLjd6Il0KICAgIH07CiAgICBmYVVuaXR5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInVuaXR5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNDkiLCAiTTI0My42IDkxLjZsODAuMSA0Ni44YzIuOSAxLjYgMyA2LjIgMCA3LjhsLTk1LjIgNTUuNmMtMi45IDEuNy02LjMgMS42LTkgMGwtOTUuMi01NS42Yy0yLjktMS42LTMtNi4zIDAtNy44bDgwLjEtNDYuOCAwLTkxLjYtMjA0LjQgMTE5LjQgMCAyMzguOCA3OC40LTQ1LjggMC05My42Yy0uMS0zLjMgMy44LTUuNyA2LjctMy45bDk1LjIgNTUuNmMyLjkgMS43IDQuNSA0LjcgNC41IDcuOGwwIDExMS4yYy4xIDMuMy0zLjggNS43LTYuNyAzLjlMOTggMzQ2LjggMTkuNiAzOTIuNiAyMjQgNTEyIDQyOC40IDM5Mi42IDM1MCAzNDYuOCAyNjkuOSAzOTMuNmMtMi44IDEuNy02LjgtLjUtNi43LTMuOWwwLTExMS4yYzAtMy4zIDEuOC02LjMgNC41LTcuOEwzNjIuOSAyMTVjMi44LTEuNyA2LjggLjUgNi43IDMuOWwwIDkzLjYgNzguNCA0NS44IDAtMjM4LjgtMjA0LjQtMTE5LjQgMCA5MS42eiJdCiAgICB9OwogICAgZmFUZW5jZW50V2VpYm8gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGVuY2VudC13ZWlibyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMWQ1IiwgIk00MC41IDQ5NS44YzEuNCAxOS45LTI3LjYgMjIuMi0yOS43IDIuOS0xMS42LTEyOS45IDMxLjEtMjM5LjUgMTAxLjQtMzEzLjItMTUuNi0zNCA5LjItNzcuMSA1MC42LTc3LjEgMzAuMyAwIDU1LjEgMjQuNiA1NS4xIDU1LjEgMCA0NC00OS41IDcwLjgtODYuOSA0NS4xLTY1LjcgNzEuMy0xMDEuNCAxNjkuOC05MC41IDI4Ny4yek0xNjAuMiAuMWMtMTI1LjkgMC0yMDQuMyAxMzQuMi0xNDguMyAyNDIuMyA4LjcgMTcuNCAzNS4zIDQuNSAyNi4zLTEzLjQtNDYuMy05Mi42IDIxLTE5OS4yIDEyMi0xOTkuMiA3NS40IDAgMTM2LjkgNjEuNCAxMzYuOSAxMzYuOSAwIDkwLjgtODYuOSAxNTMuOS0xNjcuNyAxMzMuMS0xOS4xLTQuMS0yNS42IDI0LjQtNi42IDI5LjEgMTEwLjcgMjMuMiAyMDQtNjAgMjA0LTE2Mi4zIDAtOTEuOS03NC42LTE2Ni41LTE2Ni42LTE2Ni41eiJdCiAgICB9OwogICAgZmFGcmVlQ29kZUNhbXAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZnJlZS1jb2RlLWNhbXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJjNSIsICJNOTcuNCA5Ni4yYzEwLjQtMTAuNiAxNi0xNy4xIDE2LTIxLjkgMC0yLjgtMS45LTUuNS0zLjgtNy40LTIuNC0xLjgtNS40LTIuOC04LjQtMi44LTguNSAwLTIwLjkgOC44LTM1LjggMjUuNy00MS41IDQ3LjMtNjIuNyA5My4xLTYxLjggMTYwLjZTMjEgMzY3LjMgNTcuNiA0MTIuMmMxOC44IDIzLjYgMzMuMiAzNS44IDQzLjUgMzUuOCAzLjItLjMgNi4xLTEuNiA4LjQtMy44IDEuOS0yLjggMy44LTUuNiAzLjgtOC40IDAtNS42LTMuOS0xMi4yLTEzLjItMjAuNi00NC41LTQyLjMtNjcuMy05Ny02Ny41LTE2NS0uMi02MS40IDIxLjYtMTEyLjQgNjQuOC0xNTR6TTIzOS42IDQyMC4xYy42IC40IC45IC42IC45IC42bC0uOS0uNnptOTMuOCAuNmwuMi0uMWMtLjIgLjEtLjMgLjItLjIgLjF6bTMuMS0xNTguMmMtMTYuMi00LjIgNTAuNC04Mi45LTY4LjEtMTc3LjIgMCAwIDE1LjUgNDkuNC02Mi44IDE1OS42LTc0LjMgMTA0LjQgMjMuNSAxNjguNyAzNCAxNzUuMi02LjctNC4zLTQ3LjQtMzUuNyA5LjYtMTI4LjYgMTEtMTguMyAyNS41LTM0LjkgNDMuNS03Mi4yIDAgMCAxNS45IDIyLjQgNy42IDcxLjEtMTIuNSA3My42IDUzLjggNTIuNSA1NC44IDUzLjUgMjIuOCAyNi44LTE3LjcgNzMuNS0yMS42IDc2LjYgNS41LTMuNyAxMTcuNy03OCAzMy0xODguMS02IDYtMTMuOCAzNC4yLTMwIDMwLjF6TTUxMSA4OS43Yy0xNC45LTE2LjktMjcuNC0yNS43LTM1LjktMjUuNy0zIC4xLTUuOSAxLjEtOC40IDIuOC0xLjkgMS45LTMuOCA0LjctMy44IDcuNCAwIDQuOCA1LjYgMTEuMyAxNiAyMS45IDQzLjIgNDEuNiA2NSA5Mi42IDY0LjggMTU0LjEtLjIgNjgtMjMgMTIyLjYtNjcuNSAxNjUtOS4zIDguNC0xMy4yIDE0LjktMTMuMiAyMC42IDAgMi43IDEuOSA1LjYgMy44IDguNCAyLjMgMi4yIDUuMiAzLjYgOC40IDMuOCAxMC4zIDAgMjQuNy0xMi4xIDQzLjUtMzUuOCAzNi42LTQ0LjkgNTMuMS05NC40IDU0LjEtMTYxLjlTNTUyLjUgMTM3IDUxMSA4OS43eiJdCiAgICB9OwogICAgZmFYVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ4LXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxYiIsICJNMzU3LjIgNDhMNDI3LjggNDggMjczLjYgMjI0LjIgNDU1IDQ2NCAzMTMgNDY0IDIwMS43IDMxOC42IDc0LjUgNDY0IDMuOCA0NjQgMTY4LjcgMjc1LjUtNS4yIDQ4IDE0MC40IDQ4IDI0MC45IDE4MC45IDM1Ny4yIDQ4ek0zMzIuNCA0MjEuOGwzOS4xIDAtMjUyLjQtMzMzLjgtNDIgMCAyNTUuMyAzMzMuOHoiXQogICAgfTsKICAgIGZhU3RpY2tlck11bGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RpY2tlci1tdWxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZjciLCAiTTU2MS43IDE5OS42bDAgMHptLTYuMi03Ny40Yy03LjctMjIuMy01LjEtNy4yLTEzLjQtMzYuOS0xLjYtNi41LTMuNi0xNC41LTYuMi0yMC00LjQtOC43LTQuNi03LjUtNC42LTkuNSAwLTUuMyAzMC43LTQ1LjMgMTktNDYuOS01LjctLjYtMTIuMiAxMS42LTIwLjYgMTctOC42IDQuMi04IDUtMTAuMyA1LTIuNiAwLTUuNy0zLTYuMi01LTItNS43IDEuOS0yNS45LTMuNi0yNS45LTMuNiAwLTEyLjMgMjQuOC0xNyAyNS44LTUuMiAxLjMtMjcuOS0xMS40LTc1LjEgMTgtMjUuMyAxMy4yLTg2LjkgNjUuMi04NyA2NS4zLTYuNyA0LjctMjAgNC43LTM1LjUgMTYtNDQuNCAzMC4xLTEwOS42IDkuNC0xMTAuNyA5LTExMC42LTI2LjgtMTI4LTE1LjItMTU5IDExLjUtMjAuOCAxNy45LTIzLjcgMzYuNS0yNC4yIDM4LjktNC4yIDIwLjQgNS4yIDQ4LjMgNi43IDY0LjMgMS44IDE5LjMtMi43IDE3LjcgNy43IDk4LjMgLjUgMSA0LjEgMCA1LjEgMS41IDAgOC40LTMuOCAxMi4xLTQuMSAxMy0xLjUgNC41LTEuNSAxMC41IDAgMTYgMi4zIDguMiA4LjIgMzcuMiA4LjIgNDYuOSAwIDQxLjggLjQgNDQgMi42IDQ5LjQgMy45IDEwIDEyLjUgOS4xIDE3IDEyIDMuMSAzLjUtLjUgOC41IDEgMTIuNSAuNSAyIDMuNiA0IDYuMiA1IDkuMiAzLjYgMjcgLjMgMjkuOS0yLjUgMS42LTEuNSAuNS00LjUgMy4xLTUgNS4xIDAgMTAuOC0uNSAxNC40LTIuNSA1LjEtMi41IDQuMS02IDEuNS0xMC41LS40LS44LTctMTMuMy05LjgtMTYtMi4xLTItNS4xLTMtNy4yLTQuNS01LjgtNC45LTEwLjMtMTkuNC0xMC4zLTE5LjUtNC42LTE5LjQtMTAuMy00Ni4zLTQuMS02Ni44IDQuNi0xNy4yIDM5LjUtODcuNyAzOS42LTg3LjggNC4xLTYuNSAxNy0xMS41IDI3LjMtNyA2IDEuOSAxOS4zIDIyIDY1LjQgMzAuOSA0Ny45IDguNyA5Ny40LTIgMTEyLjItMiAyLjggMi0xLjkgMTMtLjUgMzguOSAwIDI2LjQtLjQgMTMuNy00LjEgMjkuOS0yLjIgOS43IDMuNCAyMy4yLTEuNSA0Ni45LTEuNCA5LjgtOS45IDMyLjctOC4yIDQzLjQgLjUgMSAxIDIgMS41IDMuNSAuNSA0LjUgMS41IDguNSA0LjYgMTAgNy4zIDMuNiAxMi0zLjUgOS44IDExLjUtLjcgMy4xLTIuNiAxMiAxLjUgMTUgNC40IDMuNyAzMC42IDMuNCAzNi41IC41IDIuNi0xLjUgMS42LTQuNSA2LjQtNy40IDEuOS0uOSAxMS4zLS40IDExLjMtNi41IC4zLTEuOC05LjItMTkuOS05LjMtMjAtMi42LTMuNS05LjItNC41LTExLjMtOC02LjktMTAuMS0xLjctNTIuNiAuNS01OS40IDMtMTEgNS42LTIyLjQgOC43LTMyLjQgMTEtNDIuNSAxMC4zLTUwLjYgMTYuNS02OC4zIC44LTEuOCA2LjQtMjMuMSAxMC4zLTI5LjkgOS4zLTE3IDIxLjctMzIuNCAzMy41LTQ3LjQgMTgtMjIuOSAzNC00Ni45IDUyLTY5LjggNi4xLTcgOC4yLTEzLjcgMTgtOCAxMC44IDUuNyAyMS42IDcgMzEuOSAxNyAxNC42IDEyLjggMTAuMiAxOC4yIDExLjggMjIuOSAxLjUgNSA3LjcgMTAuNSAxNC45IDkuNSAxMC40LTIgMTMtMi41IDEzLjQtMi41IDIuNi0uNSA1LjctNSA3LjItOCAzLjEtNS41IDcuMi05IDcuMi0xNi41IDAtNy43LS40LTIuOC0yMC42LTUyLjl6Il0KICAgIH07CiAgICBmYVR3aXRjaCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0d2l0Y2giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjFlOCIsICJNMzU5LjQgMTAzLjVsLTM4LjYgMCAwIDEwOS43IDM4LjYgMCAwLTEwOS43ek0yNTMuMiAxMDNsLTM4LjYgMCAwIDEwOS44IDM4LjYgMCAwLTEwOS44ek04OSAwbC05Ni41IDkxLjQgMCAzMjkuMiAxMTUuOCAwIDAgOTEuNCA5Ni41LTkxLjQgNzcuMyAwIDE3My44LTE2NC42IDAtMjU2LTM2Ni45IDB6TTQxNy4zIDIzNy44bC03Ny4yIDczLjEtNzcuMiAwLTY3LjYgNjQgMC02NC04Ni45IDAgMC0yNzQuMyAzMDguOSAwIDAgMjAxLjJ6Il0KICAgIH07CiAgICBmYUtpY2tzdGFydGVySyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJraWNrc3RhcnRlci1rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYmMiLCAiTTM1Ni43IDI1Ni4ybDQwLjgtNDAuNWM0Mi4yLTQxLjkgNDIuMi0xMTAuMyAwLTE1Mi4xcy0xMTEtNDEuOS0xNTMuMiAwTDIyOS4zIDc4LjRDMjA5LjYgNTAuMyAxNzcuMSAzMiAxNDAuMiAzMiA4MC41IDMyIDMyIDgwLjIgMzIgMTM5LjVsMCAyMzNjMCA1OS40IDQ4LjUgMTA3LjUgMTA4LjIgMTA3LjUgMzcuMSAwIDY5LjMtMTguMyA4OS00Ni40bDE0LjkgMTQuN2M0Mi4yIDQxLjkgMTExIDQxLjkgMTUzLjIgMHM0Mi4yLTExMC4zIDAtMTUyLjFsLTQwLjgtNDAgLjEgMHoiXQogICAgfTsKICAgIGZhQ3JpdGljYWxSb2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNyaXRpY2FsLXJvbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjZjOSIsICJNMjI1LjggMGMuMyAuMiAyMTYuNiAxMjQuNSAyMTcuMSAxMjQuNyAzIDEuMiAzLjcgMy41IDMuNyA2LjYtLjEgODMuNC0uMSAxNjYuOSAwIDI1MC40IC4xIDEuMi0uMiAyLjQtLjggMy40cy0xLjUgMS45LTIuNiAyLjRjLTIxLjQgMTItMjA3LjkgMTE4LjMtMjE4LjkgMTI0LjZsLTMgMGMtNzkuMy00NS43LTIxOC4zLTEyNS40LTIxOC40LTEyNS41LS42LS4zLTEuMS0uNy0xLjQtMS4zcy0uNS0xLjItLjQtMS45YzAtLjkgMC0yMjUuOS0uMS0yNTMuMS0uMS0xIC4yLTIgLjctMi45czEuMy0xLjYgMi4yLTJDMjcuMiAxMTIuMSAyMTMuMiA2IDIyNC4xIDBsMS44IDB6TTIxNS40IDIwLjRsLS4yLS4yYy02NC43IDM2LjktMTI5LjUgNzMuNy0xOTQuMiAxMTAuNiAwIC4xIC4xIC4yIC4xIC40TDUyIDE0Mi45Yy03LjcgNi04LjMgNi0xMC42IDUuMS0uMSAwLTI0LjItOS4zLTI2LjgtMTBsMCAyMzAuNGMuOS0xLjQgNjQuMS0xMTAuOSA2NC4xLTExMSAxLjYtMi44IDMtMS45IDkuMS0xLjUgMS40IC4xIDEuNSAuMiAuOCAxLjQtNDEuMiA3MS4zLTM2LjQgNjMtNjcuNSAxMTYuOS0uOCAxLjQtLjYgMS4xIDEuMiAxLjFsMTg2LjUgMGMxLjQgMCAxLjctLjIgMS43LTEuNmwwLTguOWMwLTEuMyAyLjQtLjgtMTguNC0xLTcuNS0uMS0xNC4xLTMuMi0yMS40LTEyLjctNy40LTkuNy0xNC42LTE5LjQtMjEuOC0yOS4yLTIuMy0zLjEtMy40LTIuNC0xNi44LTIuNC0xLjggMC0xLjggMC0xLjggMS44IC4zIDI2LjIgLjIgMjUuMyAxIDMyLjcgLjUgNC40IDIuMiA0LjIgOS43IDQuOCAzLjEgLjMgMy45IDQuMSAuNSA0LjktMS42IC40LTMxLjYgLjUtMzMuNy0uMS0uNS0uMS0xLS41LTEuMy0uOXMtLjUtMS0uNC0xLjYgLjMtMS4xIC42LTEuNSAuOS0uNyAxLjQtLjhjMy4zLS44IDYuMiAuOCA2LjctNC40IDEuMy0xMy43IDEuMi05IDEuMS03OS40IDAtMTAuOC0uNC0xMi42LTUuNC0xMy42LTEuMi0uMi0zLjUtLjItNC43LS42LTIuOS0xLTItNC44IDEuOC00LjggMzMuNyAwIDQ2LjEtMS4xIDU2LjEgNC45IDcuNyA0LjYgMTIgMTEuNSAxMi41IDIwLjQgLjkgMTQuNi02LjUgMjIuMy0xNSAzMi42LS4yIC4xLS4zIC4zLS40IC41cy0uMSAuNC0uMSAuNiAwIC40IC4xIC42IC4yIC40IC40IC41YzIuNiAzLjIgNSA2LjYgNy43IDkuOCAyNy42IDMzLjIgMjQuMSAzMC41IDQxLjMgMzMuMSAuOSAuMSAxLS40IDEtMS4ybDAtMTFjMC0xIC4zLTEuNCAxLjQtMS4zIDcuOCAxLjIgMTUuOCAxLjEgMjMuNi0uMyAxLjEtLjEgMS41IC4yIDEuNSAxLjMgMCAuMSAuOSAyNi43IC45IDI2LjggMCAxLjUgLjcgMS42IDEuOSAxLjZsMTg2LjcgMGMtMjcuMi00Ny01NC4yLTk0LTgxLjItMTQwLjggMi4zLS43LS40IDAgNi43LTEuNCAyLS40IDIuMS0uNCAzLjEgMS40IDcuMyAxMi42IDc3LjMgMTM0IDc3LjQgMTM0LjFsMC0yMzAuNGMtMS43IC41LTEwMy4zIDM4LjctMTA1LjggMzkuNy0xLjEgLjQtMS41IC4yLTEuOS0uOS0uNi0xLjktMS4zLTMuOC0yLjEtNS42LS4zLS44LS4xLTEuMSAuNi0xLjQgLjEgMCA5NS41LTM1LjggMTAzLTM4LjgtNjUuNC0zNy42LTEzMC42LTc1LTE5Ni0xMTIuNmw4Ni44IDE1MC40LS4zIC4zYy05LjYtLjktMTAuNS0xLjYtMTEuOC0zLjktMS0xLjctNzMuNS0xMjcuNy04Mi0xNDIuMi05LjEgMTQuNy04My42IDE0Ni4yLTg1LjQgMTQ2LjMtMi45IC4yLTUuOSAuMS05LjIgLjEgMjguOC00OS44IDU3LjYtOTkuNSA4Ni4yLTE0OWwwIDB6bTUxLjkgMTI5LjljMS45LS4xIDMuNy0uNCA1LjUtLjggMS43LS4zIDIuNSAuMiAyLjYgMS45IDAgLjEgLjEgMTkuMS0uOSAyMC41cy0xLjkgMS4yLTIuNi0uMmMtNS05LjcgNi4yLTkuNy0zOS4xLTEyLS43IDAtMSAuMi0xIC45IDAgLjEgMy43IDEyMiAzLjcgMTIyLjEgMCAuOSAuNSAxLjIgMS4yIDEuNSAzIDEuMiA1LjkgMi41IDguNyA0IDcuMyA0LjMgMTEuNCAxMC44IDEyLjQgMTkuMyAxLjQgMTEuOC0yLjggMzUuOC0zMi4yIDM3LjEtMi44IC4xLTI4LjMgMS4xLTM0LjEtMjMuMy00LjctMTkuMyA4LjMtMzIuNyAxOS45LTM2LjQgLjYtLjEgMS4yLS40IDEuNS0uOXMuNS0xLjEgLjUtMS43Yy4xLTUuNiAzLTEwNy4xIDMuNy0xMjEuMyAwLTEuMS0uNi0xLjItMS40LTEuMS0zMi4zIC41LTM2LjctLjMtNDAuMiA4LjUtMi40IDYuMi00LjEgMS4zLTQgLjIgMS4xLTYgMi4yLTEyIDMuMy0xOCAuNC0yLjEgMS40LTIuNiAzLjQtMS45IDUuNiAyLjEgNi43IDEuNyAzNy4yIDEuOSAxLjcgMCAxLjgtLjEgMS44LTEuOCAuNy0yNy41IC42LTIyLjYgMS0yOS42IC4xLS42LS4xLTEuMi0uMy0xLjdzLS43LS45LTEuMy0xLjFjLTUuNi0yLjktOC44LTcuNi04LjktMTMuOS0uNC0xNC44IDE3LjctMjEuNyAyNy40LTExLjUgNi44IDcuMiA1LjggMTguOS0yLjUgMjQuMi0uOCAuNC0xLjQgMS4xLTEuOCAxLjhzLS42IDEuNi0uNCAyLjVjMCAuNi0uMS00LjMgMSAzMCAwIC45IC40IDEuMSAxLjIgMS4xIC4xIDAgMjMtLjEgMzQuNS0uNGwwLS4xek02OC4zIDE0MS43YzE5LjgtNC41IDMyLjctLjYgNTIuNSAxLjcgMi44IC4zIDMuNyAxLjIgMy42IDQtLjIgNS0xLjIgMjIuMy0xLjIgMjMuMSAwIC41LS4yIDEtLjUgMS40cy0uNyAuNy0xLjIgLjljLTQuMSAxLjctMy42LTQuNC00LTcuMy0zLjEtMjIuNC03My45LTMyLjctNzQuNiAyNS40LS4zIDIzLjkgMTcgNTMuNiA1NC4xIDUwLjkgMjcuMi0yIDE5LTIwLjIgMjQuOC0yMC41IC40LS4xIC45IDAgMS4zIC4xcy44IC40IDEuMSAuNyAuNSAuNyAuNiAxLjIgLjEgLjkgMCAxLjNjLTEuOCAxMC44LTMuNCAxOS0zLjQgMTkuMi0xLjUgOS4yLTg2LjcgMjIuMS05My40LTQyLjEtMi43LTI1LjggMTAuNC01My40IDQwLjMtNjAuMnptODAgODcuN2wtMTkuNSAwYy0uNiAwLTEuMi0uMS0xLjYtLjRzLS44LS44LTEtMS40YzIuNC0zLjggNS45IC45IDUuOS02LjEtLjEtMjUuOCAuMi0zOCAuMi00MC4xIDAtMy40LS41LTQuNi0zLjMtNC45LTctLjctMy4xLTMuNC0xLjEtMy40IDExLjgtLjEgMjIuNi0uMiAzMCAuNyA4LjggMS4xIDE2LjcgMTIuNiA3LjkgMjIuNi0yIDIuMi00IDQuNC02LjEgNi43IDEgMS4yIDYuOSA4LjggMTcuMyAxOS43IDIuNyAyLjggNi4yIDMuNSA5LjkgMy4xIC42IDAgMS4xLS4yIDEuNS0uNnMuNy0uOSAuNy0xLjVjLjMtMy40IC4zIDQuNyAuNC00MC42IDAtNS42LS4zLTYuNi0zLjItNi44LTQtLjQtNC0yLjMtLjctMy40bDE5LjEtLjFjLjMgMCA0LjUgLjUgMSAzLjQgMCAwLS4yIDAtLjIgMC0zLjYgLjMtMy45IDEtNCA0LjYtLjMgNDMuOSAuMSA0MC4yIC40IDQyLjggLjEgLjggLjMgMi4yIDUuMSAyLjEgMi41IDAgMy45IDMuNCAwIDMuNC0xMC40IC4xLTIwLjcgMC0zMS4xIC4xLTEwLjcgMC0xMy41LTYuMi0yNC4yLTIwLjgtMS42LTIuMi04LjMtMi40LTguMi0uNCAuOSAxNi41IDAgMTcuOCA0IDE3LjcgNC44LS4xIDQuNyAzLjYgLjggMy41bC4xIDB6bTI3NS0xMC4xYy0xLjIgNy4xIC4yIDEwLjQtNS4zIDEwLjMtNjEuNS0uNC00Ny44LS4yLTUwLjctLjMtMS4yLS4xLTIuNC0uNC0zLjYtLjctMi41LS42IDEuNS0xLjItLjQtNS42LTEuNC0zLjQtMi44LTYuOC00LjEtMTAuMi0uMS0uNC0uNC0uOC0uNy0xLjFzLS44LS40LTEuMy0uNGMtNC45LS4yLTkuNy0uMi0xNC42IC4xLS4zIDAtLjYgLjItLjkgLjNzLS41IC40LS43IC43Yy0xLjYgMy42LTMuMSA3LjMtNC41IDExLTEuMyAzLjIgNy45IDEuMyAxMi4yIDIuMiAzIC42IDQuNSAzLjcgLjcgMy43bC0yNi40IDBjLTIuOSAwLTMuMS0zLjItLjctMy4yIDEuMiAuMSAyLjQtLjIgMy41LS45czEuOS0xLjUgMi40LTIuNmMxLjUtMyAyLjgtNiA0LjEtOS4xIDE4LjItNDIuMSAxNy4xLTQwLjIgMTguNC00MS42IC4yLS4yIC40LS40IC43LS42cy42LS4yIC44LS4yIC42IC4xIC44IC4yIC41IC4zIC43IC42YzIuOSAzLjMgMTguNCA0NC43IDIzLjYgNTEuOSAyIDIuNyA1LjcgMiA2LjQgMiAzLjYgLjEgNC0xLjEgNC4xLTQuMyAuMS0xLjkgLjEgMS4yIC4xLTQxLjIgMC00LjUtMi40LTMuNy01LjYtNC4zLS4zIDAtMi42LS42LS4xLTMuMSAuMi0uMi0uOS0uMiAyMS43LS4yIDIuMyAwIDUuMyAyLjgtMS4yIDMuNC0uNCAwLS43IDAtMS4xIC4ycy0uNiAuMy0uOSAuNi0uNCAuNi0uNiAuOS0uMiAuNy0uMSAxLjFjLS4xIDEuNi0uMiAzOC45IC4zIDQxLjIgLjIgLjcgLjYgMS40IDEuMiAxLjhzMS4zIC43IDIuMSAuNmMxMy4zIC40IDE0LjkgLjQgMTYtMy40IDEuNy01LjggNC4xLTIuNSAzLjctLjJsMCAuMXpNMzE4LjYgMjgzLjZjLTQuMiAwLTQuNC0zLjQtLjYtMy40IDM1LjktLjIgMjguMSAuNCAzNy4yLS42IDEuNy0uMiAyLjQgLjIgMi4zIDEuOS0uMyAzLjQtLjYgNi44LTEgMTAuMi0uMiAyLjItMy4yIDIuNi0zLjQtLjItLjQtNS4zLTIuMi00LjUtMTUuNi01LjEtMS42LS4xLTEuNiAwLTEuNiAxLjVsMCAxNi4xYzAgMS43IDAgMS42IDEuNiAxLjUgMy4xLS4yIDEwLjMgLjMgMTUuNy0xLjUgLjUtLjIgMy4zLTEuOCAzLjEgMS44IDAgLjItLjggMTAuNC0xLjIgMTEuNC0uNSAxLjMtMS45IDEuNS0yLjYgLjMtMS4yLTIgMC01LjEtMy43LTUuMy0xNS40LS45LTEyLjktMi41LTEyLjkgNiAwIDEyLjMtLjggMTYuMSAzLjkgMTYuMiAxNi42IC41IDE0LjQgMCAxNi40LTUuNyAuOC0yLjQgMy41LTEuOCAzLjIgLjYtLjQgMy4yLS44IDYuNC0xLjIgOS42IDAgLjQtLjIgMi40LTQuNyAyLjQtMzcuMi0uMS0zNC41LS4yLTM1LjItLjMtMi43LS41LTIuMi0zIC4yLTMuNCAxLjEtLjIgNCAuNSA0LjItMi42IDIuNC01Ni4yLS4xLTUxLjMtMy45LTUxLjNsMCAwem0tLjQtMTA5LjVjMi41IC42IDMuMSAxLjggMyA0LjYtLjMgNS4zLS4zIDktLjYgOS43LS43IDIuMi0zLjEgMi4xLTMuMy0uMy0uNC00LjgtMy03LjgtNy42LTkuMS0yNi4zLTcuNy0zMi44IDE1LjUtMjcuMiAzMC4yIDUuOSAxNS40IDIyIDE1LjkgMjguOSAxMy44IDUuOS0xLjkgNS45LTYuNSA2LjktNy42IDEuMi0xLjMgMi4yLTEuOCAzLjEgMS4xIDAgLjEgLjYgMTEuOS02IDEyLjctMS42IC4yLTE5LjQgMy43LTMyLjctMy40LTIxLTExLjItMTYuNy0zNS41LTYuOS00NS4zIDE0LTE0LjEgMzkuOS03LjEgNDIuMy02LjVsMCAwek0yODkuOCAyODAuMWMzLjMgMCAzLjcgMyAuMiAzLjQtMi42IC4zLTUtLjQtNSA1LjUgMCAyLS4yIDI5IC40IDQxLjQgLjEgMi4zIDEuMiAzLjUgMy40IDMuNyAyMiAxLjIgMTUtMS43IDE4LjgtNi4zIDEuOC0yLjIgMi44IC44IDIuOCAxLjEgLjMgMTMuNi00IDEyLjQtNS4yIDEyLjRsLTM4LjItLjJjLTEuOS0uMi0yLjEtMy0uNC0zLjQgMi0uNSA0LjkgLjQgNS4xLTIuOCAxLTE1LjkgLjYtNDQuNiAuMy00Ny44LS4zLTMuOC0yLjgtMy4zLTUuNy0zLjctMi41LS40LTItMy4yIC4zLTMuMiAxLjQgMCAxOCAwIDIzLjEgMHptLTMxLjYtNTcuOGMuMSA0LjEgMi45IDMuNSA2IDMuNiAyLjYgLjEgMi41IDMuNC0uMSAzLjQtNi41IDAtMTMuNyAwLTIxLjYtLjEtMy44IDAtMy40LTMuNCAwLTMuNCA0LjUgMCAzLjIgMS42IDMuNC00NS41IDAtNS4xLTMuMy0zLjUtNC43LTQuMi0yLjYtMS4yLTEuNC0zLjEgLjQtMy4yIDEuMyAwIDIwLjItLjQgMjEuMiAuMnMxLjkgMS42LS40IDIuOWMtMSAuNS0zLjktLjMtNC4yIDIuNSAwIC4yLS44IDEuNi0uMSA0My44bDAgMHpNMjIxLjMgNDk2LjZjLjUgLjMgMSAuNSAxLjYgLjVzMS4xLS4yIDEuNi0uNWMxNy05LjggMTgyLTEwMy42IDE5Ny40LTExMi41LS4xLS40IDExLjMtLjItMTgxLjUtLjMtMS4yIDAtMS42IC40LTEuNSAxLjYgMCAuMSAxLjMgNDQuNSAxLjIgNTAuNC0uMSAyLjYtLjYgNS4yLTEuNCA3LjctLjYgMS44IC40LS41LTEzLjUgMzIuMi0uNyAxLjctMSAyLjItMi0uMS00LjItMTAuMy04LjMtMjAuNy0xMi42LTMxLTEuNS0zLjQtMi4yLTcuMS0yLTEwLjggLjItMi41IC44LTE2LjEgMS41LTQ4IDAtMS45IDAtMi0yLTJsLTE4MyAwYzIuNiAxLjYgMTc4LjMgMTAyLjYgMTk2IDExMi44bC4xIDB6TTEzMC40IDMwNy45YzAgMi40IC40IDIuOCAyLjggMyAxMS41IDEuMiAyMSAzLjcgMjUuNi03LjMgNi0xNC41IDIuNy0zNC40LTEyLjUtMzguOC0yLS42LTE2LTIuOC0xNS45IDEuNSAwIDggMCAxMS42IDAgNDEuNnptMTA1LjgtMTVjMCAyLjEgMS4xIDM4LjcgMS4xIDM5LjEgLjMgOS45LTI1LjYgNS44LTI1LjItMi42IC4xLTIgMS40LTM3LjQgMS4xLTM5LjQtMTQuMSA3LjQtMTQuNCA0MC4yIDYuNCA0OC44IDQgMS43IDguNCAxLjkgMTIuNSAuNnM3LjYtNCA5LjktNy43YzQuOS03LjggNi44LTI5LjUtNS40LTM5LS4xIC4xLS4yIC4xLS40IC4xbDAgMHptLTEyLjMtMTk4Yy05LjggMC05LjcgMTQuOC0uMSAxNC45czEwLjEtMTQuOSAuMS0xNC45bDAgMHpNMTQzLjcgMTk4LjZjMCAxLjggLjQgMi40IDIuMiAyLjYgMTMuNiAxLjQgMTIuNS0xMSAxMi4yLTEzLjQtMS43LTExLjItMTQuNC0xMC4yLTE0LjQtNy44IDAgNC41IDAgMTMuNyAwIDE4LjZ6TTM1NiAyMDVsLTYuMS0xNS44Yy0yLjIgNS41LTQuMiAxMC42LTYuMiAxNS44bDEyLjMgMHoiXQogICAgfTsKICAgIGZhU3RlYW1TeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RlYW0tc3ltYm9sIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZjYiLCAiTTI3My41IDE3Ny41YTYxIDYxIDAgMSAxIDEyMiAwIDYxIDYxIDAgMSAxIC0xMjIgMHptMTc0LjUgLjJjMCA2My01MSAxMTMuOC0xMTMuNyAxMTMuOEwyMjUgMzcxLjNjLTQgNDMtNDAuNSA3Ni44LTg0LjUgNzYuOC00MC41IDAtNzQuNy0yOC44LTgzLTY3TDAgMzU4IDAgMjUwLjcgOTcuMiAyOTBjMTUuMS05LjIgMzIuMi0xMy4zIDUyLTExLjVsNzEtMTAxLjdDMjIwLjcgMTE0LjUgMjcxLjcgNjQgMzM0LjIgNjQgMzk3IDY0IDQ0OCAxMTUgNDQ4IDE3Ny43ek0yMDMgMzYzYzAtMzQuNy0yNy44LTYyLjUtNjIuNS02Mi41LTQuNSAwLTkgLjUtMTMuNSAxLjVsMjYgMTAuNWMyNS41IDEwLjIgMzggMzkgMjcuNyA2NC41LTEwLjIgMjUuNS0zOS4yIDM4LTY0LjcgMjcuNS0xMC4yLTQtMjAuNS04LjMtMzAuNy0xMi4yIDEwLjUgMTkuNyAzMS4yIDMzLjIgNTUuMiAzMy4yIDM0LjcgMCA2Mi41LTI3LjggNjIuNS02Mi41ek00MTAuNSAxNzcuN2E3Ni40IDc2LjQgMCAxIDAgLTE1Mi44IDAgNzYuNCA3Ni40IDAgMSAwIDE1Mi44IDB6Il0KICAgIH07CiAgICBmYU1haWxjaGltcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtYWlsY2hpbXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU5ZSIsICJNMzMxIDI0My41YzMuMS0uNCA2LjItLjQgOS4zIDAgMS43LTMuOCAyLTEwLjQgLjUtMTcuNi0yLjItMTAuNy01LjMtMTcuMS0xMS41LTE2LjFzLTYuNSA4LjctNC4yIDE5LjRjMS4zIDYgMy41IDExLjEgNiAxNC4zbDAgMHpNMjc3LjQgMjUyYzQuNSAyIDcuMiAzLjMgOC4zIDIuMSAxLjktMS45LTMuNS05LjQtMTIuMS0xMy4xLTUtMi4xLTEwLjQtMi44LTE1LjgtMi4ycy0xMC41IDIuNy0xNC44IDUuOGMtMyAyLjItNS44IDUuMi01LjQgNy4xIC45IDMuNyAxMC0yLjcgMjIuNi0zLjUgNy0uNCAxMi44IDEuOCAxNy4zIDMuN2wwIDB6bS05IDUuMWMtOS4xIDEuNC0xNSA2LjUtMTMuNSAxMC4xIC45IC4zIDEuMiAuOCA1LjItLjggNi0yLjMgMTIuNC0yLjkgMTguNy0xLjkgMi45IC4zIDQuMyAuNSA0LjktLjUgMS41LTIuMi01LjctOC0xNS40LTYuOWwwIDB6bTU0LjIgMTcuMWMzLjQtNi45LTEwLjktMTMuOS0xNC4zLTdzMTAuOSAxMy45IDE0LjMgN2wwIDB6bTE1LjctMjAuNWMtNy43LS4xLTggMTUuOC0uMyAxNS45czgtMTUuOCAuMy0xNmwwIDB6TTExOS41IDMzMi43Yy0xLjMgLjMtNiAxLjUtOC41LTIuMy01LjItOCAxMS4xLTIwLjQgMy0zNS44LTkuMS0xNy41LTI3LjgtMTMuNS0zNS01LjUtOC43IDkuNi04LjcgMjMuNS01IDI0LjEgNC4zIC42IDQuMS02LjUgNy40LTExLjYgLjktMS40IDIuMS0yLjYgMy41LTMuNnMzLTEuNiA0LjYtMiAzLjQtLjQgNSAwIDMuMyAxIDQuNyAxLjljMTEuNiA3LjYgMS40IDE3LjggMi4zIDI4LjYgMS40IDE2LjcgMTguNCAxNi40IDIxLjYgOSAuMi0uNCAuMy0uOCAuMy0xLjJzLS4yLS44LS41LTEuMWMwIC45IC43LTEuMy0zLjQtLjRsMCAwem0yOTkuNy0xNy4xYy0zLjMtMTEuNy0yLjYtOS4yLTYuOC0yMC41IDIuNC0zLjcgMTUuMy0yNC0zLjEtNDMuMy0xMC40LTEwLjktMzMuOS0xNi41LTQxLjEtMTguNS0xLjUtMTEuNCA0LjYtNTguNy0yMS41LTgzIDIwLjgtMjEuNiAzMy44LTQ1LjMgMzMuNy02NS43LS4xLTM5LjItNDguMi01MS0xMDcuNC0yNi41bC0xMi41IDUuM2MtLjEgMC0yMi43LTIyLjMtMjMuMS0yMi42LTY3LjUtNTguOS0yNzguOCAxNzUuOS0yMTEuMyAyMzIuOWwxNC44IDEyLjVjLTQgMTAuNy01LjQgMjIuMi00LjEgMzMuNSAzLjQgMzMuNCAzNiA2MC40IDY3LjUgNjAuNCA1Ny43IDEzMy4xIDI2Ny45IDEzMy4zIDMyMi4zIDMgMS43LTQuNSA5LjEtMjQuNiA5LjEtNDIuNHMtMTAuMS0yNS4zLTE2LjUtMjUuM2wwIDB6bS0zMTYgNDguMmMtMjIuOC0uNi00Ny41LTIxLjEtNDkuOS00NS41LTYuMi02MS4zIDc0LjMtNzUuMyA4NC0xMi4zIDQuNSAyOS42LTQuNyA1OC41LTM0LjEgNTcuOGwwIDB6TTg0LjcgMjQ5LjZjLTE1LjIgMy0yOC41IDExLjUtMzYuNyAyMy41LTQuOS00LjEtMTQtMTItMTUuNi0xNS0xMy0yNC44IDE0LjItNzMgMzMuMy0xMDAuMiA0Ny4xLTY3LjIgMTIwLjktMTE4LjEgMTU1LTEwOC45IDUuNSAxLjYgMjMuOSAyMi45IDIzLjkgMjIuOXMtMzQuMSAxOC45LTY1LjggNDUuM0MxMzYuMiAxNTAgMTA0IDE5Ny43IDg0LjcgMjQ5LjZ6TTMyMy42IDM1MC43cy0zNS43IDUuMy02OS41LTcuMWM2LjItMjAuMiAyNyA2LjEgOTYuNC0xMy44IDE1LjMtNC40IDM1LjQtMTMgNTEtMjUuNCAzLjQgNy44IDUuOCAxNS45IDcuMSAyNC4zIDMuNy0uNyAxNC4yLS41IDExLjQgMTguMS0zLjMgMTkuOS0xMS43IDM2LTI1LjkgNTAuOC04LjkgOS42LTE5LjQgMTcuNS0zMS4yIDIzLjMtNi41IDMuNC0xMy4zIDYuMy0yMC4zIDguNi01My41IDE3LjUtMTA4LjMtMS43LTEyNi00My0xLjQtMy4xLTIuNi02LjQtMy42LTkuNy03LjUtMjcuMi0xLjEtNTkuOCAxOC44LTgwLjQgMS4yLTEuMyAyLjUtMi45IDIuNS00LjgtLjItMS43LS44LTMuMy0xLjktNC41LTctMTAuMS0zMS4yLTI3LjQtMjYuMy02MC44IDMuNS0yNCAyNC41LTQwLjkgNDQuMS0zOS45bDUgLjNjOC41IC41IDE1LjkgMS42IDIyLjkgMS45IDExLjcgLjUgMjIuMi0xLjIgMzQuNi0xMS42IDQuMi0zLjUgNy42LTYuNSAxMy4zLTcuNSAyLjMtLjYgNC43LS43IDctLjNzNC42IDEuMiA2LjYgMi41YzEwIDYuNiAxMS40IDIyLjcgMTEuOSAzNC41IC4zIDYuNyAxLjEgMjMgMS40IDI3LjYgLjYgMTAuNyAzLjQgMTIuMiA5LjEgMTQgMy4yIDEgNi4yIDEuOCAxMC41IDMuMSAxMy4yIDMuNyAyMSA3LjUgMjYgMTIuMyAyLjUgMi41IDQuMiA1LjggNC43IDkuMyAxLjYgMTEuNC04LjggMjUuNC0zNi4zIDM4LjItNDYuNyAyMS43LTkzLjcgMTQuNC0xMDAuNSAxMy43LTIwLjItMi43LTMxLjYgMjMuMy0xOS41IDQxLjEgMjIuNiAzMy40IDEyMi40IDIwIDE1MS40LTIxLjQgLjctMSAuMS0xLjYtLjctMS00MS44IDI4LjYtOTcuMSAzOC4yLTEyOC41IDI2LTQuOC0xLjgtMTQuNy02LjQtMTUuOS0xNi43IDQzLjYgMTMuNSA3MSAuNyA3MSAuN3MyLTIuOC0uNi0yLjV6TTE3MS43IDE1Ny41YzE2LjctMTkuNCAzNy40LTM2LjIgNTUuOC00NS42IC4xLS4xIC4zLS4xIC41LS4xcy4zIC4xIC40IC4yIC4yIC4zIC4yIC40IDAgLjMtLjEgLjVjLTEuNSAyLjctNC4zIDguMy01LjIgMTIuNyAwIC4xIDAgLjMgMCAuNHMuMiAuMyAuMyAuNCAuMyAuMSAuNCAuMSAuMyAwIC40LS4xYzExLjUtNy44IDMxLjUtMTYuMiA0OS0xNy4zIC4yIDAgLjMgMCAuNSAuMXMuMiAuMiAuMyAuNCAuMSAuMyAwIC41LS4xIC4zLS4zIC40Yy0yLjkgMi4yLTUuNSA0LjgtNy43IDcuNy0uMSAuMS0uMSAuMi0uMSAuNHMwIC4zIC4xIC40IC4yIC4yIC4zIC4zIC4yIC4xIC40IC4xYzEyLjMgLjEgMjkuNyA0LjQgNDEgMTAuNyAuOCAuNCAuMiAxLjktLjYgMS43LTY5LjUtMTUuOS0xMjMuMSAxOC41LTEzNC41IDI2LjgtLjIgLjEtLjMgLjEtLjUgLjFzLS4zLS4xLS41LS4yLS4yLS4zLS4yLS41IC4xLS40IC4yLS41bC0uMSAweiJdCiAgICB9OwogICAgZmFMdW1vbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsdW1vbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlN2UyIiwgIk00NTIuNSAyMjMuNWM5LjggMCAxNi41IDYuMyAxNi41IDE2LjZsMCAzMS44YzAgMTAuMy02LjYgMTYuNi0xNi42IDE2LjZsLTU2LjIgMGMtOS44IDAtMTYuNS02LjMtMTYuNS0xNi42bDAtMzEuOGMwLTEwLjMgNi43LTE2LjYgMTYuNS0xNi42bDU2LjMgMHptLTI1LjcgMTMuMWMtMS41LTIuNi0zLjItMi42LTQuNiAwbC0xMC43IDE3LjZjLTEuNyAyLjQtMi42IDUuMS0yLjYgOC4yIDAgNy45IDYuOSAxNC42IDE1LjYgMTQuNiA4LjUgMCAxNS42LTYuNyAxNS42LTE0LjYgMC0zLTEtNS44LTIuNy04LjJsLTEwLjctMTcuNnpNODUuOCAyMjMuOGMxIDAgMS41IC42IDEuNSAxLjVsMCA1MC4zIDY0LjYgMGMxIDAgMS42IC42IDEuNiAxLjVsMCA5LjdjMCAuOS0uNiAxLjUtMS42IDEuNWwtNzguNCAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTIuMyAwem04OC4zIDBjMSAwIDEuNSAuNiAxLjUgMS41bDAgNDVjMCA0IDIgNS4yIDUuNyA1LjJsNDYuOSAwYzMuOCAwIDUuNy0xLjMgNS43LTUuMmwwLTQ1YzAtLjkgLjUtMS41IDEuNS0xLjVsMTIuMyAwYzEgMCAxLjYgLjYgMS42IDEuNWwwIDQ2YzAgMTAuNS01LjMgMTYuOC0xNy42IDE2LjhsLTU0IDBjLTEyLjMgMC0xNy42LTYuMy0xNy42LTE2LjhsMC00NmMwLS45IC42LTEuNSAxLjYtMS41bDEyLjMgMHptMTA4LjIgMGMxIDAgMS42IC41IDIuMiAxLjRsMzAuNSA0Ni40IDEuNCAwIDMwLjUtNDYuNGMuNi0uOSAxLjItMS40IDIuMi0xLjRsMTggMGMxIDAgMS41IC42IDEuNSAxLjVsMCA2MS40YzAgLjktLjUgMS41LTEuNSAxLjVsLTEyLjMgMGMtMSAwLTEuNi0uNi0xLjYtMS41bDAtNDMuOC0xLjEgMC0yOC43IDQzLjhjLS42IC45LTEuMyAxLjUtMi40IDEuNWwtMTAuNyAwYy0xIDAtMS43LS42LTIuMy0xLjVsLTI4LjctNDMuOC0xLjEgMCAwIDQzLjhjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTcuOSAwem0yMTQuNCAwYy45IDAgMS4zIC40IDIuMiAxLjFsNTIuNyA0Ni4zIDEuMyAwIDAtNDZjMC0uOSAuNi0xLjUgMS42LTEuNWwxMi4zIDBjMSAwIDEuNiAuNiAxLjYgMS41bDAgNjEuNGMwIC45LS42IDEuNS0xLjYgMS41bC0xNC40IDBjLTEgMC0xLjQtLjQtMi4zLTEuMWwtNTIuNi00Ni4zLTEuNCAwIDAgNDZjMCAuOS0uNSAxLjUtMS41IDEuNWwtMTIuMyAwYy0xIDAtMS42LS42LTEuNi0xLjVsMC02MS40YzAtLjkgLjYtMS41IDEuNi0xLjVsMTQuNCAwek0zMjAgMTE0LjFjODcuOSAwIDE2Ny43IDE1LjcgMjI1LjUgNDFsMi43IDEuMkM1ODcuMSAxNzMuOCA2NDAgMjA2LjUgNjQwIDI1NnMtNTIuOSA4Mi4yLTkxLjggOTkuNmwtMi43IDEuMmMtNTcuOCAyNS40LTEzNy42IDQxLTIyNS41IDQxLTc2LjIgMC0xNTUuMS0xMC41LTIyNS41LTQxLTM5LjYtMTcuNC05NC41LTUwLjMtOTQuNS0xMDAuOHM1NC45LTgzLjUgOTQuNS0xMDAuOGM3MC40LTMwLjUgMTQ5LjMtNDEgMjI1LjUtNDF6bS04OC45IDIyOWMyMC4zIDI5IDUyLjggNDkuNiA4OC45IDQ5LjYgMzYuMiAwIDY4LjctMjAuNiA4OS00OS43bC0xNzcuOSAuMXptLTk2LjEgMGM0My4zIDI5LjcgOTYuNyA0My41IDE0OC40IDQ4LTI0LjItOS4xLTQ0LjQtMjYuNy01OC42LTQ4LjFsLTg5LjkgMHptMjgwLjMtLjFjLTE0LjIgMjEuNC0zNC40IDM5LjEtNTguNiA0OC4xIDUxLjgtNC41IDEwNS4zLTE4LjMgMTQ4LjYtNDguMmwtOTAgMHptLTMzNy40IC4xYzQ0LjEgMjMuMSA5My43IDM1LjQgMTQyLjcgNDIuNi0zMy40LTguNi02Ni41LTIxLjktOTQuNC00Mi42bC00OC4zIDB6bTQzNi4yLS4yYy0yNy45IDIwLjgtNjEuMSAzNC4yLTk0LjYgNDIuOCA0Ny4zLTYuOSA4OS42LTE4LjUgMTIzLjktMzMuNmwxLjctLjhjNi4xLTIuNyAxMS45LTUuNSAxNy40LTguNGwtNDguNSAwek01MjAgMTczLjZjMTAuNyA4LjcgMTkuOCAxOC4xIDI3IDI4LjIgLjQgLjYgLjUgMS4zIC4xIDJzLTEgMS0xLjcgMWwtMS42IDBjLS42IDAtMS4yLS4zLTEuNS0uOC03LjktMTAuOS0xOC4yLTIxLjEtMzAuNi0zMC40bC05My41IDBjNS40IDguOCA5LjkgMTguNSAxMy40IDI4LjYgLjIgLjYgLjEgMS4yLS4yIDEuN3MtLjkgLjgtMS42IC44bC0xLjQgMGMtLjggMC0xLjUtLjUtMS44LTEuMy0zLjgtMTAuNy04LjctMjAuOC0xNC41LTI5LjlsLTE4NC4zIC4xYy01LjggOS4xLTEwLjcgMTkuMS0xNC40IDI5LjgtLjMgLjgtMSAxLjMtMS44IDEuM2wtMS40IDBjLS42IDAtMS4yLS4zLTEuNi0uOHMtLjUtMS4xLS4yLTEuN2MzLjUtMTAuMiA4LTE5LjcgMTMuNC0yOC42bC05My42IDBjLTEyLjMgOS4zLTIyLjYgMTkuNC0zMC40IDMwLjMtLjQgLjUtLjkgLjgtMS41IC44bC0xLjYgMGMtLjcgMC0xLjQtLjQtMS43LTFzLS4zLTEuNCAuMS0yYzcuNi0xMC41IDE2LjctMTkuOSAyNi44LTI4bC01MSAwYy0yOC45IDE2LjYtNjIgNDMuMy02My41IDc5LjdsNDQuNyAwYy41IDAgMSAuMiAxLjMgLjZzLjYgLjggLjYgMS4zbDAgMS4zYzAgMS4xLS45IDEuOS0xLjkgMS45bC00NC43IDBDNi44IDI5NSA0MCAzMjEuNyA2OSAzMzguM2w1MC45IDBjLTEwLjMtOC40LTE5LjEtMTcuNC0yNi4xLTI3bC0uOC0xLjFjLS40LS42LS41LTEuMy0uMS0yczEtMSAxLjctMWwxLjYgMCAuMiAwYy41IC4xIDEgLjMgMS4zIC44IDcuOSAxMC45IDE4LjEgMjEgMzAuNSAzMC4zbDkzLjYgMGMtNS4zLTguOC05LjgtMTguNC0xMy40LTI4LjUtLjItLjYtLjEtMS4yIC4yLTEuN3MuOS0uOCAxLjYtLjhsMS40IDAgLjIgMGMuNyAuMSAxLjQgLjYgMS43IDEuMyAzLjggMTAuNyA4LjYgMjAuNyAxNC40IDI5LjhsMTg0LjUtLjFjNS44LTkuMSAxMC42LTE5LjEgMTQuNC0yOS43bC4xLS4xYy4zLS43IDEtMS4xIDEuNy0xLjFsMS40IDBjLjYgMCAxLjIgLjMgMS42IC44cy41IDEuMiAuMiAxLjdjLTMuNSAxMC4xLTggMTkuNy0xMy4zIDI4LjVsOTMuNyAwYzEyLjMtOS4zIDIyLjUtMTkuNCAzMC4zLTMwLjJsLjEtLjJjLjQtLjQgLjktLjYgMS40LS42bDEuNiAwYy43IDAgMS40IC40IDEuNyAxcy4zIDEuNC0uMSAyYy03LjEgMTAtMTYuMSAxOS4zLTI2LjcgMjcuOWw1MS4xIDBjMjguOC0xNi42IDYxLjgtNDMuMyA2My40LTc5LjZsLTQ0LjcgMGMtMSAwLTEuOS0uOS0xLjktMS45bDAtMS4zYzAtMS4xIC45LTEuOSAxLjktMS45bDQ0LjcgMGMtMS42LTM2LjUtMzQuOS02My4zLTYzLjktNzkuOWwtNTAuOSAwek0yMjAuNSAxMjYuMmMtNDkuMSA3LjEtOTguNyAxOS41LTE0MyA0Mi43bDQ4LjQgMGMyNy45LTIwLjggNjEtMzQuMSA5NC41LTQyLjd6bTYyLjgtNS40Yy01MS44IDQuNS0xMDUuMiAxOC4zLTE0OC42IDQ4LjFsOTAgMGMxNC4yLTIxLjQgMzQuNC0zOSA1OC42LTQ4LjF6bTM2LjYtMS42Yy0zNi4yIDAtNjguNyAyMC42LTg5IDQ5LjdsMTc3LjktLjFjLTIwLjMtMjkuMS01Mi43LTQ5LjYtODguOS00OS42em0zNi42IDEuNmMyNC4yIDkuMSA0NC40IDI2LjYgNTguNSA0OGw4OS44IDBjLTQzLjMtMjkuNy05Ni42LTQzLjUtMTQ4LjMtNDh6bTYyLjggNS40YzMzLjQgOC41IDY2LjQgMjEuOSA5NC4zIDQyLjVsNDguMyAwYy00NC4xLTIzLjEtOTMuNi0zNS40LTE0Mi42LTQyLjV6Il0KICAgIH07CiAgICBmYU51dHJpdGlvbml4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm51dHJpdGlvbml4IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZDYiLCAiTTExMiA4LjFTMjQ1LjQtLjEgMjMzIDExMi41YzAgMCAxOS4xLTc0LjkgMTAzLTQwLjYgMCAwLTE3LjcgNzQtODggNTYgMCAwIDE0LjYtNTQuNiA2Ni4xLTU2LjYgMCAwLTM5LjktMTAuMy04Mi4xIDQ4LjggMCAwLTE5LjgtOTQuNS05My42LTk5LjcgMCAwIDc1LjIgMTkuNCA3Ny42IDEwNy41IDAgLjEtMTA2LjQgNy0xMDQtMTE5Ljh6TTQyNCAzMjMuN2MwIDQ4LjUtOS43IDk1LjMtMzIgMTMyLjMtNDIuMiAzMC45LTEwNSA0OC0xNjggNDgtNjIuOSAwLTEyNS44LTE3LjEtMTY4LTQ4LTIyLjMtMzctMzItODMuOC0zMi0xMzIuMyAwLTQ4LjQgMTcuNy05NC43IDQwLTEzMS43IDQyLjItMzAuOSA5Ny4xLTQ4LjYgMTYwLTQ4LjYgNjMgMCAxMTcuOCAxNy42IDE2MCA0OC42IDIyLjMgMzcgNDAgODMuMyA0MCAxMzEuN3pNMTQ0IDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTIxNiA0MjhhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwek0yODggNDI4YTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6bTAtNjYuMmEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMzYwIDQyOGEyOCAyOCAwIDEgMCAtNTYgMCAyOCAyOCAwIDEgMCA1NiAwem0wLTY2LjJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHptMC02Ni4yYTI4IDI4IDAgMSAwIC01NiAwIDI4IDI4IDAgMSAwIDU2IDB6TTM4NCAyNTZjLTQuOC0yMi4zLTcuNC0zNi45LTE2LTU2LTM4LjgtMTkuOS05MC41LTMyLTE0NC0zMlMxMTguOCAxODAuMSA4MCAyMDBjLTguOCAxOS41LTExLjIgMzMuOS0xNiA1NiA0Mi4yLTcuOSA5OC43LTE0LjggMTYwLTE0LjhzMTE3LjggNi45IDE2MCAxNC44eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnNTYW1wbGluZ1BsdXMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucy1zYW1wbGluZy1wbHVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ZjEiLCAiTTI1NS42IDhDMzk3LjQgOCA1MDQgMTE4LjEgNTA0IDI1NiA1MDQgNDAzLjEgMzg1LjUgNTA0IDI1NS42IDUwNCAxMjEuNiA1MDQgOCAzOTQuNSA4IDI1NiA4IDEyMy4xIDExMi43IDggMjU1LjYgOHptLjggNDQuN2MtMTE4LjIgMC0yMDMuNyA5Ny45LTIwMy43IDIwMy4zIDAgMTA5LjggOTEuMiAyMDIuOCAyMDMuNyAyMDIuOCAxMDMuMiAwIDIwMi44LTgxLjEgMjAyLjgtMjAyLjggLjEtMTEzLjgtOTAuMi0yMDMuMy0yMDIuOC0yMDMuM3ptMTA3IDIwNS42Yy00LjcgMC05IDIuOC0xMC43IDcuMmwtNCA5LjUtMTEtOTIuOGMtMS43LTEzLjktMjItMTMuNC0yMy4xIC40bC00LjMgNTEuNC01LjItNjguOGMtMS4xLTE0LjMtMjIuMS0xNC4yLTIzLjIgMGwtMy41IDQ0LjktNS45LTk0LjNjLS45LTE0LjUtMjIuMy0xNC40LTIzLjIgMGwtNS4xIDgzLjctNC4zLTY2LjNjLS45LTE0LjQtMjIuMi0xNC40LTIzLjIgMGwtNS4zIDgwLjItNC4xLTU3Yy0xLjEtMTQuMy0yMi0xNC4zLTIzLjItLjJsLTcuNyA4OS44LTEuOC0xMi4yYy0xLjctMTEuNC0xNy4xLTEzLjYtMjItMy4zbC0xMy4yIDI3LjctNDMuOSAwIDAgMjMuMiA1MS4zIDBjNC40IDAgOC40LTIuNSAxMC40LTYuNGwxMC43IDczLjFjMiAxMy41IDIxLjkgMTMgMjMuMS0uN2wzLjgtNDMuNiA1LjcgNzguM2MxLjEgMTQuNCAyMi4zIDE0LjIgMjMuMi0uMWw0LjYtNzAuNCA0LjggNzMuM2MuOSAxNC40IDIyLjMgMTQuNCAyMy4yLS4xbDQuOS04MC41IDQuNSA3MS44Yy45IDE0LjMgMjIuMSAxNC41IDIzLjIgLjJsNC42LTU4LjYgNC45IDY0LjRjMS4xIDE0LjMgMjIgMTQuMiAyMy4xIC4xbDYuOC04MyAyLjcgMjIuM2MxLjQgMTEuOCAxNy43IDE0LjEgMjIuMyAzLjFsMTgtNDMuNCA1MC41IDAgMC0yMy4yLTU4LjQgLjN6bS03OCA1LjJsLTIxLjkgMCAwIDIxLjljMCA0LjEtMy4zIDcuNS03LjUgNy41LTQuMSAwLTcuNS0zLjMtNy41LTcuNWwwLTIxLjktMjEuOSAwYy00LjEgMC03LjUtMy4zLTcuNS03LjUgMC00LjEgMy40LTcuNSA3LjUtNy41bDIxLjkgMCAwLTIxLjljMC00LjEgMy40LTcuNSA3LjUtNy41czcuNSAzLjMgNy41IDcuNWwwIDIxLjkgMjEuOSAwYzQuMSAwIDcuNSAzLjMgNy41IDcuNSAwIDQuMS0zLjQgNy41LTcuNSA3LjV6Il0KICAgIH07CiAgICBmYVJlZGhhdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWRoYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdiYyIsICJNMzQxLjUgMjg1LjZjMzMuNyAwIDgyLjMtNi45IDgyLjMtNDcgLjItNi43IC45LTEuOC0yMC45LTk2LjItNC42LTE5LjEtOC43LTI3LjgtNDIuMy00NC42LTI2LjEtMTMuMy04Mi45LTM1LjQtOTkuNy0zNS40LTE1LjcgMC0yMC4yIDIwLjItMzguOSAyMC4yLTE4IDAtMzEuMy0xNS4xLTQ4LjEtMTUuMS0xNi4xIDAtMjYuNyAxMS0zNC44IDMzLjYtMjcuNSA3Ny42LTI2LjMgNzQuMy0yNi4xIDc4LjMgMCAyNC44IDk3LjYgMTA2LjEgMjI4LjUgMTA2LjF6TTQyOSAyNTQuOGM0LjcgMjIgNC43IDI0LjMgNC43IDI3LjIgMCAzNy43LTQyLjMgNTguNi05OCA1OC42LTEyNS43IC4xLTIzNS45LTczLjYtMjM1LjktMTIyLjMgMC02LjggMS40LTEzLjUgNC4xLTE5LjctNDUuMiAyLjMtMTAzLjggMTAuMy0xMDMuOCA2MiAwIDg0LjcgMjAwLjYgMTg5IDM1OS41IDE4OSAxMjEuOCAwIDE1Mi41LTU1LjEgMTUyLjUtOTguNiAwLTM0LjItMjkuNi03My04Mi45LTk2LjJ6Il0KICAgIH07CiAgICBmYVNxdWFyZVBpZWRQaXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGllZC1waXBlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaWVkLXBpcGVyLXNxdWFyZSJdLCAiZTAxZSIsICJNMzIuMSA0MTlsLTMyIDYwLjIgLjgtMzI4Qy45IDg1LjMgNTQuMSAzMiAxMjAuMSAzMmwzMjcuMiAwQzM1NC4zIDYwLjkgMjU3LjQgMTI2LjIgMTkzLjQgMjAwLjYgMTIyLjggMjgyIDgyLjcgMzM4IDMyLjEgNDE5em00MTYtMzg3UzMwNS4zIDk4LjggMjYxLjcgMTk5LjFjLTIzLjIgNTMuNi0yOC45IDExOC4xLTcxIDE1OC42LTI4LjkgMjcuOC02OS44IDM4LjItMTA1LjMgNTYuMy0yMy4yIDEyLTY2LjQgNDAuNS04NC45IDY2bDMyOC40IDBjNjYgMCAxMTkuMy01My4zIDExOS4zLTExOS4yLS4xIDAtLjEtMzI4LjgtLjEtMzI4Ljh6Il0KICAgIH07CiAgICBmYVBpZWRQaXBlclNxdWFyZSA9IGZhU3F1YXJlUGllZFBpcGVyOwogICAgZmFXaGF0c2FwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aGF0c2FwcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjMyIiwgIk0zODAuOSA5Ny4xYy00MS45LTQyLTk3LjctNjUuMS0xNTctNjUuMS0xMjIuNCAwLTIyMiA5OS42LTIyMiAyMjIgMCAzOS4xIDEwLjIgNzcuMyAyOS42IDExMUwwIDQ4MCAxMTcuNyA0NDkuMWMzMi40IDE3LjcgNjguOSAyNyAxMDYuMSAyN2wuMSAwYzEyMi4zIDAgMjI0LjEtOTkuNiAyMjQuMS0yMjIgMC01OS4zLTI1LjItMTE1LTY3LjEtMTU3em0tMTU3IDM0MS42Yy0zMy4yIDAtNjUuNy04LjktOTQtMjUuN2wtNi43LTQtNjkuOCAxOC4zIDE4LjYtNjguMS00LjQtN2MtMTguNS0yOS40LTI4LjItNjMuMy0yOC4yLTk4LjIgMC0xMDEuNyA4Mi44LTE4NC41IDE4NC42LTE4NC41IDQ5LjMgMCA5NS42IDE5LjIgMTMwLjQgNTQuMXM1Ni4yIDgxLjIgNTYuMSAxMzAuNWMwIDEwMS44LTg0LjkgMTg0LjYtMTg2LjYgMTg0LjZ6TTMyNS4xIDMwMC41Yy01LjUtMi44LTMyLjgtMTYuMi0zNy45LTE4LTUuMS0xLjktOC44LTIuOC0xMi41IDIuOHMtMTQuMyAxOC0xNy42IDIxLjhjLTMuMiAzLjctNi41IDQuMi0xMiAxLjQtMzIuNi0xNi4zLTU0LTI5LjEtNzUuNS02Ni01LjctOS44IDUuNy05LjEgMTYuMy0zMC4zIDEuOC0zLjcgLjktNi45LS41LTkuN3MtMTIuNS0zMC4xLTE3LjEtNDEuMmMtNC41LTEwLjgtOS4xLTkuMy0xMi41LTkuNS0zLjItLjItNi45LS4yLTEwLjYtLjJzLTkuNyAxLjQtMTQuOCA2LjljLTUuMSA1LjYtMTkuNCAxOS0xOS40IDQ2LjNzMTkuOSA1My43IDIyLjYgNTcuNGMyLjggMy43IDM5LjEgNTkuNyA5NC44IDgzLjggMzUuMiAxNS4yIDQ5IDE2LjUgNjYuNiAxMy45IDEwLjctMS42IDMyLjgtMTMuNCAzNy40LTI2LjRzNC42LTI0LjEgMy4yLTI2LjRjLTEuMy0yLjUtNS0zLjktMTAuNS02LjZ6Il0KICAgIH07CiAgICBmYUltZGIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiaW1kYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmQ4IiwgIk04OS41IDMyMy42bC0zNS42IDAgMC0xMzcuNCAzNS42IDAgMCAxMzcuNHptNjYuNi03My4xbDkuMS02NC4zIDQ2LjMgMCAwIDEzNy40LTMxIDAgMC05Mi43LTEzLjQgOTIuNy0yMS4zIDAtMTMtOTAuNy0uMSA5MC43LTMxLjIgMCAwLTEzNy40IDQ2LjEgMGMuNSA4LjMgMi44IDE4LjEgNC4zIDI5LjRsNC4yIDM0Ljl6bTY3LjYgNzMuMWwwLTEzNy40IDI2LjYgMGMxNyAwIDI3IC45IDMzIDIuNCA2LjEgMS43IDEwLjcgNC4yIDEzLjkgNy45IDMuMSAzLjMgNS4xIDYuNiA1LjggMTIgLjkgNC40IDEuNCAxMy4xIDEuNCAyNi4ybDAgNDguMmMwIDEyLjMtLjcgMjAuNS0xLjkgMjQuNy0xLjEgNC4xLTMuMSA3LjQtNiA5LjctMi44IDIuNC02LjQgNC4xLTEwLjcgNS00LjIgLjgtMTAuNiAxLjMtMTkuMSAxLjNsLTQzIDB6bTM1LjUtMTEzLjlsMCA4OS40YzUuMSAwIDguMy0xIDkuNC0yLjMgMS4xLTIgMS44LTcuNiAxLjgtMTYuN2wwLTUzLjNjMC02LjItLjEtMTAuMi0uNy0xMi0uMy0xLjgtMS4yLTMtMi42LTQuNy0xLjQgMC00LjEtLjQtNy45LS40em01Ny4zIDExMy45bDAtMTM3LjQgMzQuMSAwIDAgNDMuOWMyLjktMi40IDYuMS00LjkgOS41LTYuNiAzLjYtMS41IDguOC0yLjQgMTIuOC0yLjQgNC44IDAgOC45IC44IDEyLjMgMi4yIDMuNCAxLjUgNiAzLjUgOCA2LjIgMS43IDIuNiAyLjcgNS4zIDMuMSA3LjggLjQgMi42LS4yIDgtLjIgMTYuMmwwIDM4LjZjMCA4LjIgLjIgMTQuMy0uOCAxOC40LTEuMSA0LTMuOCA3LjYtNy44IDkuNi00LjEgMy45LTguOSA1LjMtMTQuNiA1LjMtNCAwLTkuMi0uOS0xMi43LTIuNS0zLjUtMS44LTYuNy00LjUtOS42LThsLTIuMSA4LjctMzIgMHptNDUuMS0yMC43Yy43LTEuOCAxLTYgMS0xMi41bDAtMzUuNGMwLTUuNi0uMy05LjUtMS4xLTExLjItLjctMS45LTMuNy0yLjctNS44LTIuNy0yIDAtMy40IC44LTQuMSAyLjMtLjYgMS41LTEgNS40LTEgMTEuNmwwIDM2LjRjMCA2LjEgLjQgMTAgMS4yIDExLjYgLjYgMS43IDIuMSAyLjUgNC4xIDIuNSAyLjIgMCA0LjItLjggNS43LTIuNnpNNDE4LjQgMzJjMTUuNyAxLjIgMjguNyAxNS4yIDI4LjcgMzEuOWwwIDM4NC4yYzAgMTYuNC0xMS45IDMwLjQtMjguMiAzMS0uMyAwLS41IC45LS44IC45TDI5LjkgNDgwYy0uMyAwLS42LS45LS44LS4xLTE1LjctMS40LTI3LjktMTMuOC0yOS0zMC4yTDAgNjEuOEMxLjEgNDUuOSAxMy44IDMzLjEgMzAuMyAzMS4xbDM4Ny40IDBjLjIgMCAuNSAuOSAuNyAuOXpNMzAuMyA0MS4zQzE5IDQyIDEwIDUxIDkuMyA2Mi40bDAgMzg3LjNjLjQgNS40IDIuNyAxMC41IDYuNCAxNC4zIDMuOCAzLjkgOC44IDYuMyAxNC4yIDYuN2wzODguMiAwYzExLjUtMSAyMC42LTExLjYgMjAuNi0yMi42bDAtMzg0LjJjMC01LjctMi4xLTExLjMtNi0xNS41cy05LjMtNi44LTE1LTcuMmwtMzg3LjQgMHoiXQogICAgfTsKICAgIGZhUHl0aG9uID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInB5dGhvbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2UyIiwgIk00MzkuOCAyMDAuNWMtNy43LTMwLjktMjIuMy01NC4yLTUzLjQtNTQuMmwtNDAuMSAwIDAgNDcuNGMwIDM2LjgtMzEuMiA2Ny44LTY2LjggNjcuOGwtMTA2LjggMGMtMjkuMiAwLTUzLjQgMjUtNTMuNCA1NC4zbDAgMTAxLjhjMCAyOSAyNS4yIDQ2IDUzLjQgNTQuMyAzMy44IDkuOSA2Ni4zIDExLjcgMTA2LjggMCAyNi45LTcuOCA1My40LTIzLjUgNTMuNC01NC4zbDAtNDAuNy0xMDYuNyAwIDAtMTMuNiAxNjAuMiAwYzMxLjEgMCA0Mi42LTIxLjcgNTMuNC01NC4yIDExLjItMzMuNSAxMC43LTY1LjcgMC0xMDguNnpNMjg2LjIgNDQ0LjdhMjAuNCAyMC40IDAgMSAxIDAtNDAuNyAyMC40IDIwLjQgMCAxIDEgMCA0MC43ek0xNjcuOCAyNDguMWwxMDYuOCAwYzI5LjcgMCA1My40LTI0LjUgNTMuNC01NC4zbDAtMTAxLjljMC0yOS0yNC40LTUwLjctNTMuNC01NS42LTM1LjgtNS45LTc0LjctNS42LTEwNi44IC4xLTQ1LjIgOC01My40IDI0LjctNTMuNCA1NS42bDAgNDAuNyAxMDYuOSAwIDAgMTMuNi0xNDcgMGMtMzEuMSAwLTU4LjMgMTguNy02Ni44IDU0LjItOS44IDQwLjctMTAuMiA2Ni4xIDAgMTA4LjYgNy42IDMxLjYgMjUuNyA1NC4yIDU2LjggNTQuMmwzNi43IDAgMC00OC44YzAtMzUuMyAzMC41LTY2LjQgNjYuOC02Ni40ek0xNjEuMiA2NC43YTIwLjQgMjAuNCAwIDEgMSAwIDQwLjggMjAuNCAyMC40IDAgMSAxIDAtNDAuOHoiXQogICAgfTsKICAgIGZhQ2FzaEFwcCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYXNoLWFwcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlN2Q0IiwgIk00NDAuMyA5Ni45Yy05LjQtMjYuNS0zMC4zLTQ3LjQtNTYuOC01Ny0yNC4xLTcuOS00Ni4zLTcuOS05MS42LTcuOUwxNTYgMzJjLTQ0LjggMC02Ny4yIDAtOTEuMyA3LjUtMjYuNSA5LjYtNDcuNCAzMC41LTU3IDU3LTcuNyAyNC4zLTcuNyA0Ni43LTcuNyA5MS43TDAgMzIzLjhjMCA0NS4yIDAgNjcuNCA3LjUgOTEuNSA5LjYgMjYuNSAzMC41IDQ3LjQgNTcgNTcgMjQuMyA3LjcgNDYuNyA3LjcgOTEuNiA3LjdsMTM1LjcgMGM0NSAwIDY3LjQgMCA5MS42LTcuNyAyNi41LTkuNiA0Ny40LTMwLjUgNTctNTcgNy43LTI0LjMgNy43LTQ2LjcgNy43LTkxLjVsMC0xMzUuNWMwLTQ1IDAtNjcuNC03LjctOTEuNXpNMzIzLjEgMTg1LjRsLTI1LjggMjEuMWMtMi4zIDEuOS01LjUgMS41LTcuMy0uOS0xMy4yLTE2LjItMzMuNy0yNS40LTU2LjEtMjUuNC0yNSAwLTQwLjYgMTAuOS00MC42IDI2LjItLjQgMTIuOCAxMS43IDE5LjYgNDkuMSAyNy43IDQ3LjIgMTAgNjguNyAyOS43IDY4LjcgNjIuNyAwIDQxLjQtMzMuNyA3MS45LTg2LjQgNzUuM2wtNS4xIDI0LjVjLS40IDIuMy0yLjYgNC4xLTUuMSA0LjFsLTQwLjYgMGMtMy40IDAtNS44LTMuMi01LjEtNi40bDYuNC0yNy4zYy0yNi03LjUtNDcuMi0yMi01OS4zLTM5LjctMS41LTIuMy0xLjEtNS4zIDEuMS03bDI4LjItMjJjMi4zLTEuOSA1LjgtMS4zIDcuNSAxLjEgMTQuOSAyMC45IDM4IDMzLjMgNjUuNyAzMy4zIDI1IDAgNDMuOC0xMi4yIDQzLjgtMjkuNyAwLTEzLjQtOS40LTE5LjYtNDEuMi0yNi4yLTU0LjItMTEuNy03NS44LTMxLjgtNzUuOC02NC45IDAtMzguNCAzMi4yLTY3LjIgODAuOS03MWw1LjMtMjUuNGMuNC0yLjMgMi42LTQuMSA1LjEtNC4xbDM5LjkgMGMzLjIgMCA1LjggMyA1LjEgNi4ybC02LjIgMjguNGMyMC45IDYuNCAzOCAxNy45IDQ4LjcgMzIuMiAxLjcgMi4xIDEuMyA1LjMtLjkgN3oiXQogICAgfTsKICAgIGZhUGludGVyZXN0UCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaW50ZXJlc3QtcCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjMxIiwgIk0yMDQgNi41Yy0xMDIuNiAwLTIwNCA2OC40LTIwNCAxNzkuMSAwIDcwLjQgMzkuNiAxMTAuNCA2My42IDExMC40IDkuOSAwIDE1LjYtMjcuNiAxNS42LTM1LjQgMC05LjMtMjMuNy0yOS4xLTIzLjctNjcuOCAwLTgwLjQgNjEuMi0xMzcuNCAxNDAuNC0xMzcuNCA2OC4xIDAgMTE4LjUgMzguNyAxMTguNSAxMDkuOCAwIDUzLjEtMjEuMyAxNTIuNy05MC4zIDE1Mi43LTI0LjkgMC00Ni4yLTE4LTQ2LjItNDMuOCAwLTM3LjggMjYuNC03NC40IDI2LjQtMTEzLjQgMC02Ni4yLTkzLjktNTQuMi05My45IDI1LjggMCAxNi44IDIuMSAzNS40IDkuNiA1MC43LTEzLjggNTkuNC00MiAxNDcuOS00MiAyMDkuMSAwIDE4LjkgMi43IDM3LjUgNC41IDU2LjQgMy40IDMuOCAxLjcgMy40IDYuOSAxLjUgNTAuNC02OSA0OC42LTgyLjUgNzEuNC0xNzIuOCAxMi4zIDIzLjQgNDQuMSAzNiA2OS4zIDM2IDEwNi4yIDAgMTUzLjktMTAzLjUgMTUzLjktMTk2LjggMC05OS4zLTg1LjgtMTY0LjEtMTgwLTE2NC4xeiJdCiAgICB9OwogICAgZmFXaG1jcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aG1jcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNDBkIiwgIk00NDggMTYxbDAtMjEuMy0yOC41LTguOC0yLjItMTAuNCAyMC4xLTIwLjctMTAuNC0xOS40LTI5IDcuNS03LjItNy41IDcuNS0yOC4yLTE5LjEtMTEuNi0yMS4zIDIxLTEwLjctMy4yLTctMjYuNC0yMi42IDAtNi4yIDI2LjQtMTIuMSAzLjItMTkuNy0yMS0xOS40IDExIDguMSAyNy43LTguMSA4LjQtMjguNS03LjUtMTEgMTkuMSAyMC43IDIxLTIuOSAxMC40LTI4LjUgNy44LS4zIDIxLjcgMjguOCA3LjUgMi40IDEyLjEtMjAuMSAxOS45IDEwLjQgMTguNSAyOS42LTcuNSA3LjIgOC42LTguMSAyNi45IDE5LjkgMTEuNiAxOS40LTIwLjQgMTEuNiAyLjkgNi43IDI4LjUgMjIuNiAuMyA2LjctMjguOCAxMS42LTMuNSAyMC43IDIxLjYgMjAuNC0xMi4xLTguOC0yOCA3LjgtOC4xIDI4LjggOC44IDEwLjMtMjAuMS0yMC45LTE4LjggMi4yLTEyLjEgMjkuMS03ek0zMjguOCA5Mi42YTU2LjggNTYuOCAwIDEgMSAwIDExMy42IDU2LjggNTYuOCAwIDEgMSAwLTExMy42em03Mi4zIDEzMGw0Ni45IDE0LjUgMCAzOS45LTU1LjEgMTMuNC00LjEgMjIuNyAzOC45IDM1LjMtMTkuMiAzNy45LTU0LTE2LjctMTQuNiAxNS4yIDE2LjcgNTIuNS0zOC4zIDIyLjctMzguOS00MC41LTIxLjcgNi42LTEyLjYgNTQtNDIuNC0uNS0xMi42LTUzLjYtMjEuNy01LjYtMzYuNCAzOC40LTM3LjQtMjEuNyAxNS4yLTUwLjUtMTMuNy0xNi4xLTU1LjUgMTQuMS0xOS43LTM0LjggMzcuOS0zNy40LTQuOC0yMi44LTU0LTE0LjEgLjUtNDAuOSA1My41LTE0LjcgNS43LTE5LjctMzguOS0zOS40IDIwLjctMzUuOCA1My42IDE0LjEgMTUuMi0xNS43LTE1LjItNTIgMzYuNC0yMC43IDM2LjggMzkuNCAyMi43LTYuMSAxMS42LTUyIDQyLjQgMCAxMS42IDQ1LjktMjIuNi01LjktNi4zLTEuNy0zLjMgNS43LTExIDE5LjEtMy4zIDUuNiA0LjYgNC42IDE3LjIgMTcuNC0uMyAxLTIzLjggNi41LTYuMiAxLjdjMCAzLjItLjEgOS42LS4zIDE5LjMtNDcuNSAxMC40LTgzLjMgNTIuOC04My4zIDEwMy41IDAgNTguMyA0Ny4zIDEwNS43IDEwNS43IDEwNS43IDUwLjUgMCA5Mi43LTM1LjQgMTAzLjItODIuOCA5LjkgLjEgMTYuNiAuMiAyMC4xIC4zbDEuNi02LjcgNS42LTI0IDEuOS0uNiAxNy4xIDE3LjggNC43IDQuOSA1LjgtMy40IDIwLjQtMTIuMSA1LjgtMy41LTItNi41LTYuOC0yMS4yeiJdCiAgICB9OwogICAgZmFKb2dldCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJqb2dldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2I3IiwgIk0zODYuMSA0NUMzNDUuNiAxOS45IDMwMC42IDggMjU2LjIgOCAxNzMgOCA5MS44IDQ5LjkgNDQuOSAxMjUuOS0yNyAyNDIuNSA5LjMgMzk1LjIgMTI1LjkgNDY3LjFzMjY5LjMgMzUuNiAzNDEuMi04MC45QzUzOSAyNjkuNiA1MDIuNyAxMTYuOCAzODYuMSA0NXptNTEuOCAzMjMuMmMtNDAuNCA2NS41LTExMC40IDEwMS41LTE4MiAxMDEuNS02LjggMC0xMy42LS40LTIwLjQtMS05LTEzLjYtMTkuOS0zMy4zLTIzLjctNDIuNC01LjctMTMuNy0yNy4yLTQ1LjYgMzEuMi02Ny4xIDUxLjctMTkuMSAxNzYuNy0xNi41IDIwOC44LTE3LjYtNCA5LTguNiAxNy45LTEzLjkgMjYuNnpNMjM3LjEgMjgxLjljLTU1LjUtMS40LTgxLjctMjAuOC01OC41LTQ4LjJzNTEuMS00MC43IDY4LjktNTEuMmMxNy45LTEwLjUgMjcuMy0zMy43LTIzLjYtMjkuNy0xMjguNiA4LjctMTY3LjMgOTkuMy0xNzguMyAxNDAuMi04LjgtNDkuNy0uMS0xMDIuNyAyOC41LTE0OS4xIDYxLjktMTAwLjUgMTkzLjUtMTMxLjcgMjk0LTY5LjggNzQuOCA0Ni4xIDExMS4yIDEzMC45IDk5LjMgMjEyLjctMjQuOS0uNS0xNzkuMy0zLjYtMjMwLjMtNC45em0xODMuOC01NC44Yy0yMi43LTYtNTcgMTEuMy04Ni43IDI3LjItMjkuNyAxNS44LTMxLjEgOC4yLTMxLjEgOC4yczQwLjItMjguMSA1MC43LTM0LjUgMzEuOS0xNCAxMy40LTI0LjZjLTMuMi0xLjgtNi43LTIuNy0xMC40LTIuNy0xNy44IDAtNDEuNSAxOC43LTY3LjUgMzUuNi0zMS41IDIwLjUtNjUuMyAzMS4zLTY1LjMgMzEuM0wzOTMuNSAyNjYgNDQwIDI0Mi42czMuNi05LjUtMTkuMS0xNS41eiJdCiAgICB9OwogICAgZmFTcXVhcmVZb3V0dWJlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS15b3V0dWJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3OTgsICJ5b3V0dWJlLXNxdWFyZSJdLCAiZjQzMSIsICJNMjgyIDI1Ni4ybC05NS4yLTU0LjEgMCAxMDguMiA5NS4yLTU0LjF6TTM4NCAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0em0xNC40IDEzNi4xYzcuNiAyOC42IDcuNiA4OC4yIDcuNiA4OC4yczAgNTkuNi03LjYgODguMWMtNC4yIDE1LjgtMTYuNSAyNy43LTMyLjIgMzEuOS0yOC4zIDcuNy0xNDIuMiA3LjctMTQyLjIgNy43cy0xMTMuOSAwLTE0Mi4yLTcuNmMtMTUuNy00LjItMjgtMTYuMS0zMi4yLTMxLjktNy42LTI4LjYtNy42LTg4LjItNy42LTg4LjJzMC01OS43IDcuNi04OC4yYzQuMi0xNS44IDE2LjUtMjguMiAzMi4yLTMyLjQgMjguMy03LjcgMTQyLjItNy43IDE0Mi4yLTcuN3MxMTMuOSAwIDE0Mi4yIDcuN2MxNS43IDQuMiAyOCAxNi42IDMyLjIgMzIuNHoiXQogICAgfTsKICAgIGZhWW91dHViZVNxdWFyZSA9IGZhU3F1YXJlWW91dHViZTsKICAgIGZhQXRsYXNzaWFuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF0bGFzc2lhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzdiIiwgIk0xNTIuMiAyMzYuNGMtNy43LTguMi0xOS43LTcuNy0yNC44IDIuOEwxLjYgNDkwLjJjLTUgMTAgMi40IDIxLjcgMTMuNCAyMS43bDE3NSAwYzUuOCAuMSAxMS0zLjIgMTMuNC04LjQgMzcuOS03Ny44IDE1LjEtMTk2LjMtNTEuMi0yNjcuMXpNMjQ0LjQgOC4xYy0xMjIuMyAxOTMuNC04LjUgMzQ4LjYgNjUgNDk1LjUgMi41IDUuMSA3LjcgOC40IDEzLjQgOC40TDQ5NyA1MTJjMTEuMiAwIDE4LjQtMTEuOCAxMy40LTIxLjcgMCAwLTIzNC41LTQ3MC42LTI0MC40LTQ4Mi4zLTUuMy0xMC42LTE4LjgtMTAuOC0yNS42IC4xeiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJIYXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1oYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjRlNSIsICJNNjQwIDI0LjljLTgwLjggNTMuNi04OS40IDkyLjUtOTYuNCAxMDQuNC02LjcgMTIuMi0xMS43IDYwLjMtMjMuMyA4My42LTExLjcgMjMuNi01NC4yIDQyLjItNjYuMSA1MC0xMS43IDcuOC0yOC4zIDM4LjEtNDEuOSA2NC4yLTEwOC4xLTQuNC0xNjcuNCAzOC44LTI1OS4yIDkzLjYgMjkuNC05LjcgNDMuMy0xNi43IDQzLjMtMTYuNyA5NC4yLTM2IDEzOS4zLTY4LjMgMjgxLjEtNDkuMiAxLjEgMCAxLjkgLjYgMi44IC44IDMuOSAyLjIgNS4zIDYuOSAzLjEgMTAuOGwtNTMuOSA5NS44Yy0yLjUgNC43LTcuOCA3LjItMTMuMSA2LjEtMTI2LjgtMjMuOC0yMjYuOSAxNy4zLTMxOC45IDE4LjYtNzMuNCAxLjEtOTcuNS0zMy41LTk3LjUtMzUuMSAwLTEuMSAuNi0xLjcgMS43LTEuNyAwIDAgMzguMyAwIDEwMy4xLTE1LjMgNzMuNi0xNDAuMyAxMzkuMi0xODkuNCAyMTAuNi0xODkuNCAwIDAgNzEuNyAwIDkwLjYgNjEuOSAyMi44LTM5LjcgMjguMy00OS4yIDI4LjMtNDkuMiA1LjMtOS40IDM1LTc3LjIgODYuNC0xNDEuNCA1MS41LTY0IDkwLjQtNzkuOSAxMTkuMy05MS44eiJdCiAgICB9OwogICAgZmFJbnRlcm5ldEV4cGxvcmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImludGVybmV0LWV4cGxvcmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNmIiLCAiTTQ4My4xIDE1OS43YzEwLjktMjQuNiAyMS40LTYwLjQgMjEuNC04Ny45IDAtNzIuNy03OS42LTk4LjQtMjA5LjctMzguNi0xMDcuNi03LjItMjExLjIgNzMuNy0yMzcuMSAxODYuNSAzMC45LTM0LjkgNzguMy04Mi4zIDEyMi0xMDEuMi01NC4zIDQ4LjMtMTAwLjYgMTA5LjQtMTM1LjcgMTczLjItMjAuNyAzNy45LTQ0IDk5LjItNDQgMTQ1IDAgOTguNiA5Mi45IDg2LjUgMTgwLjMgNDIgMzEuNCAxNS40IDY2LjYgMTUuNiAxMDEuNyAxNS42IDk3LjEgMCAxODQuMi01NC4zIDIxNi44LTE0NmwtMTIwLjggMGMtNTIuNSA4OC42LTE5Ni44IDUzLTE5Ni44LTQ3LjRsMzI4LjggMGM2LjQtNDMuNi0xLjctOTUuNy0yNi45LTE0MS4yek02NC42IDM0Ni45QzgyLjMgMzk4IDExOC4zIDQ0Mi43IDE2NC44IDQ3MC4yIDc2LjEgNTE5LjEtOC40IDQ5OS4zIDY0LjYgMzQ2Ljl6TTE4MC41IDIzOGMyLTU1LjIgNTAuMy05NC45IDEwNC05NC45IDUzLjQgMCAxMDIgMzkuNyAxMDQgOTQuOWwtMjA4IDB6TTM2NS4xIDUwLjRjMjEuNC0xMC4zIDQ4LjYtMjIgNzIuNi0yMiAzMS40IDAgNTQuMyAyMS43IDU0LjMgNTMuNyAwIDIwLTcuNCA0OS0xNC42IDY3LjktMjYuMy00Mi4zLTY2LTgxLjYtMTEyLjMtOTkuNnoiXQogICAgfTsKICAgIGZhQWlyYm5iID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFpcmJuYiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODM0IiwgIk0yMjQuNSAzNzMuMWMtMjUuMi0zMS43LTQwLjEtNTkuNC00NS04My4yLTIyLjUtODggMTEyLjYtODggOTAuMSAwLTUuNCAyNC4yLTIwLjMgNTItNDUgODMuMmwtLjEgMHptMTM4LjIgNzMuMmMtNDIuMSAxOC4zLTgzLjctMTAuOS0xMTkuMy01MC41IDEwMy45LTEzMC4xIDQ2LjEtMjAwLTE4LjgtMjAwLTU0LjkgMC04NS4yIDQ2LjUtNzMuMyAxMDAuNSA2LjkgMjkuMiAyNS4yIDYyLjQgNTQuNCA5OS41LTMyLjUgMzYtNjAuNSA1Mi43LTg1LjIgNTQuOS01MCA3LjQtODkuMS00MS4xLTcxLjMtOTEuMSAxNS4xLTM5LjIgMTExLjctMjMxLjIgMTE1LjktMjQxLjYgMTUuOC0zMC4xIDI1LjYtNTcuNCA1OS40LTU3LjQgMzIuMyAwIDQzLjQgMjUuOSA2MC40IDU5LjkgMzYgNzAuNiA4OS40IDE3Ny41IDExNC44IDIzOS4xIDEzLjIgMzMuMS0xLjQgNzEuMy0zNyA4Ni42em00Ny0xMzYuMWMtMTI4LjktMjc0LjMtMTM2LTI3OC4yLTE4NS4xLTI3OC4yLTQ1LjUgMC02NC45IDMxLjctODQuNyA3Mi44LTEwNi4yIDIxMi4zLTExNi40IDI0Mi40LTExNy4zIDI0NS0yNS4yIDY5LjMgMjYuNyAxMzAuMiA4OS42IDEzMC4yIDIxLjcgMCA2MC42LTYuMSAxMTIuNC02Mi40IDU4LjcgNjMuOCAxMDEuMyA2Mi40IDExMi40IDYyLjQgNjIuOSAuMSAxMTQuOS02MC45IDg5LjYtMTMwLjIgMC0zLjktMTYuOC0zOC45LTE2LjgtMzkuNmwwIDB6Il0KICAgIH07CiAgICBmYUpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImpzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYjgiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTI0My44IDM4MS40YzAgNDMuNi0yNS42IDYzLjUtNjIuOSA2My41LTMzLjcgMC01My4yLTE3LjQtNjMuMi0zOC41TDE1MiAzODUuN2M2LjYgMTEuNyAxMi42IDIxLjYgMjcuMSAyMS42IDEzLjggMCAyMi42LTUuNCAyMi42LTI2LjVsMC0xNDMuMSA0Mi4xIDAgMCAxNDMuN3ptOTkuNiA2My41Yy0zOS4xIDAtNjQuNC0xOC42LTc2LjctNDNMMzAxIDM4Mi4xYzkgMTQuNyAyMC44IDI1LjYgNDEuNSAyNS42IDE3LjQgMCAyOC42LTguNyAyOC42LTIwLjggMC0xNC40LTExLjQtMTkuNS0zMC43LTI4bC0xMC41LTQuNWMtMzAuNC0xMi45LTUwLjUtMjkuMi01MC41LTYzLjUgMC0zMS42IDI0LjEtNTUuNiA2MS42LTU1LjYgMjYuOCAwIDQ2IDkuMyA1OS44IDMzLjdMMzY4IDI5MGMtNy4yLTEyLjktMTUtMTgtMjcuMS0xOC0xMi4zIDAtMjAuMSA3LjgtMjAuMSAxOCAwIDEyLjYgNy44IDE3LjcgMjUuOSAyNS42bDEwLjUgNC41YzM1LjggMTUuMyA1NS45IDMxIDU1LjkgNjYuMiAwIDM3LjgtMjkuOCA1OC42LTY5LjcgNTguNnoiXQogICAgfTsKICAgIGZhUXVpbnNjYXBlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInF1aW5zY2FwZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDU5IiwgIk0zMTMuNyA0NzQuNmwtMSAwYy00MS45IDAtODIuMS0xNi43LTExMS44LTQ2LjNzLTQ2LjMtNjkuOS00Ni4zLTExMS44IDE2LjctODIuMSA0Ni4zLTExMS44IDY5LjktNDYuMyAxMTEuOC00Ni4zYzk0LjkgMCAxNjguMiA4My4xIDE1NyAxNzYuNiA0IDUuMSA4LjIgOS42IDExLjIgMTUuMyAxMy40LTMwLjMgMjAuMy02Mi40IDIwLjMtOTcuNyAwLTEzNS4xLTEwOS41LTI0NC42LTI0NC42LTI0NC42UzEyLjEgMTE3LjUgMTIuMSAyNTIuNiAxMjEuNiA0OTcuMiAyNTYuNiA0OTcuMmMyMy44IC4yIDQ3LjYtMy4yIDcwLjQtMTAuMS01LjItMy41LTguOS04LjEtMTMuMy0xMi41em03OC4zLTE2OWE5OS4yIDk5LjIgMCAxIDAgMCAxOTguNCA5OS4yIDk5LjIgMCAxIDAgMC0xOTguNHoiXQogICAgfTsKICAgIGZhQWR2ZXJzYWwgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWR2ZXJzYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM2YSIsICJNNDgyLjEgMzJMMjguNyAzMkM1LjggMzIgMCAzNy45IDAgNjAuOUwwIDQ1MS4xQzAgNDc0LjQgNS44IDQ4MCAyOC43IDQ4MGw0NTMuNCAwYzI0LjQgMCAyOS45LTUuMiAyOS45LTI5LjdsMC0zODguMWMwLTI0LjYtNS40LTMwLjItMjkuOS0zMC4yek0xNzguNCAyMjAuM2MtMjcuNS0yMC4yLTcyLjEtOC43LTg0LjIgMjMuNC00LjMgMTEuMS05LjMgOS41LTE3LjUgOC4zLTkuNy0xLjUtMTcuMi0zLjItMjIuNS01LjUtMjguOC0xMS40IDguNi01NS4zIDI0LjktNjQuMyA0MS4xLTIxLjQgODMuNC0yMi4yIDEyNS4zLTQuOCA0MC45IDE2LjggMzQuNSA1OS4yIDM0LjUgMTI4LjUgMi43IDI1LjgtNC4zIDU4LjMgOS4zIDg4LjggMS45IDQuNCAuNCA3LjktMi43IDEwLjctOC40IDYuNy0zOS4zIDIuMi00Ni42LTcuNC0xLjktMi4yLTEuOC0zLjYtMy45LTYuMi0zLjYtMy45LTcuMy0yLjItMTEuOSAxLTU3LjQgMzYuNC0xNDAuMyAyMS40LTE0Ny00My4zLTMuMS0yOS4zIDEyLjQtNTcuMSAzOS42LTcxIDM4LjItMTkuNSAxMTIuMi0xMS44IDExNC0zMC45IDEuMS0xMC4yLTEuOS0yMC4xLTExLjMtMjcuM3ptMjg2LjcgMjIyYzAgMTUuMS0xMS4xIDkuOS0xNy44IDkuOWwtMzk0LjkgMGMtNy40IDAtMTguMiA0LjgtMTcuOC0xMC43IC40LTEzLjkgMTAuNS05LjEgMTcuMS05LjEgMTMyLjMtLjQgMjY0LjUtLjQgMzk2LjggMCA2LjggMCAxNi42LTQuNCAxNi42IDkuOXptMy44LTM0MC41bDAgMjkxYzAgNS43LS43IDEzLjktOC4xIDEzLjktMTIuNC0uNC0yNy41IDcuMS0zNi4xLTUuNi01LjgtOC43LTcuOC00LTEyLjQtMS4yLTUzLjQgMjkuNy0xMjguMSA3LjEtMTQ0LjQtODUuMi02LjEtMzMuNC0uNy02Ny4xIDE1LjctMTAwIDExLjgtMjMuOSA1Ni45LTc2LjEgMTM2LjEtMzAuNWwwLTcxYzAtMjYuMi0uMS0yNi4yIDI2LTI2LjIgMy4xIDAgNi42IC40IDkuNyAwIDEwLjEtLjggMTMuNiA0LjQgMTMuNiAxNC4zLS4xIC4yLS4xIC4zLS4xIC41ek00MTcuNCAzMzQuMWMtMTkuNSA0Ny42LTcyLjkgNDMuMy05MCA1LjItMTUuMS0zMy4zLTE1LjUtNjguMiAuNC0xMDEuNSAxNi4zLTM0LjEgNTkuNy0zNS43IDgxLjUtNC44IDIwLjYgMjguOCAxNC45IDg0LjYgOC4xIDEwMS4xek0xMjIuNiAzNjkuNGMtNy41LTEuMy0zMy0zLjMtMzMuNy0yNy44LS40LTEzLjkgNy44LTIzIDE5LjgtMjUuOCAyNC40LTUuOSA0OS4zLTkuOSA3My43LTE0LjcgOC45LTIgNy40IDQuNCA3LjggOS41IDEuNCAzMy0yNi4xIDU5LjItNjcuNiA1OC44eiJdCiAgICB9OwogICAgZmFDcmVhdGl2ZUNvbW1vbnMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY3JlYXRpdmUtY29tbW9ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjVlIiwgIk0yNTMuOCAyMTQuOWwtMzMuMiAxNy4zYy05LjQtMTkuNi0yNS4yLTE5LjktMjcuNS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNiA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNSAwIDI0LjYtNy4xIDMwLjYtMjEuM2wzMC42IDE1LjVjLTYuMiAxMS41LTI1LjcgMzktNjUuMSAzOS0yMi42IDAtNzQtMTAuMy03NC03NyAwLTU4LjcgNDMtNzcuMSA3Mi42LTc3LjEgMzAuNyAwIDUyLjcgMTEuOSA2NiAzNS45em0xNDMgMGwtMzIuOCAxNy4zYy05LjUtMTkuOC0yNS43LTE5LjktMjcuOS0xOS45LTIyLjEgMC0zMy4yIDE0LjYtMzMuMiA0My44IDAgMjMuNSA5LjIgNDMuOCAzMy4yIDQzLjggMTQuNCAwIDI0LjYtNy4xIDMwLjUtMjEuM2wzMSAxNS41Yy0yLjEgMy44LTIxLjQgMzktNjUuMSAzOS0yMi43IDAtNzQtOS45LTc0LTc3IDAtNTguNyA0My03Ny4xIDcyLjYtNzcuMSAzMC43IDAgNTIuNiAxMS45IDY1LjYgMzUuOXpNMjU1LjYgOEMxMTIuNyA4IDggMTIzLjEgOCAyNTYuMSA4IDM5NC41IDEyMS42IDUwNC4xIDI1NS42IDUwNC4xIDM4NS41IDUwNC4xIDUwNCA0MDMuMiA1MDQgMjU2LjEgNTA0IDExOC4yIDM5Ny40IDggMjU1LjYgOHptLjkgNDUwLjhjLTExMi41IDAtMjAzLjctOTMtMjAzLjctMjAyLjggMC0xMDUuNCA4NS40LTIwMy4zIDIwMy43LTIwMy4zIDExMi41IDAgMjAyLjggODkuNSAyMDIuOCAyMDMuMyAwIDEyMS43LTk5LjcgMjAyLjgtMjAyLjggMjAyLjh6Il0KICAgIH07CiAgICBmYU5vdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub3Rpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTdkOSIsICJNOTQuOSAxMDAuMmMxNC45IDEyLjEgMjAuNSAxMS4yIDQ4LjYgOS4zTDQwNy44IDkzLjZjNS42IDAgLjktNS42LS45LTYuNUwzNjIuOSA1NS40Yy04LjQtNi41LTE5LjYtMTQtNDEuMS0xMi4xTDY1LjkgNjEuOWMtOS4zIC45LTExLjIgNS42LTcuNSA5LjNsMzYuNCAyOC45em0xNS45IDYxLjZsMCAyNzguMWMwIDE0LjkgNy41IDIwLjUgMjQuMyAxOS42bDI5MC41LTE2LjhjMTYuOC0uOSAxOC43LTExLjIgMTguNy0yMy4zbDAtMjc2LjJjMC0xMi4xLTQuNy0xOC43LTE1LTE3LjdMMTI1LjcgMTQzLjFjLTExLjIgLjktMTQuOSA2LjUtMTQuOSAxOC43em0yODYuNyAxNC45YzEuOSA4LjQgMCAxNi44LTguNCAxNy44bC0xNCAyLjggMCAyMDUuM2MtMTIuMiA2LjUtMjMuNCAxMC4zLTMyLjcgMTAuMy0xNSAwLTE4LjctNC43LTI5LjktMTguN2wtOTEuNS0xNDMuNyAwIDEzOSAyOSA2LjVzMCAxNi44LTIzLjQgMTYuOGwtNjQuNCAzLjdjLTEuOS0zLjcgMC0xMy4xIDYuNS0xNC45bDE2LjgtNC43IDAtMTgzLjgtMjMuMy0xLjljLTEuOS04LjQgMi44LTIwLjUgMTUuOS0yMS41bDY5LjEtNC43IDk1LjMgMTQ1LjYgMC0xMjguOC0yNC4zLTIuOGMtMS45LTEwLjMgNS42LTE3LjcgMTQuOS0xOC43bDY0LjUtMy44ek00NC40IDM2LjdMMzEwLjYgMTcuMWMzMi43LTIuOCA0MS4xLS45IDYxLjYgMTRsODUgNTkuN2MxNCAxMC4zIDE4LjcgMTMuMSAxOC43IDI0LjNsMCAzMjcuNmMwIDIwLjUtNy41IDMyLjctMzMuNiAzNC41TDEzMy4yIDQ5NS44Yy0xOS42IC45LTI5LTEuOS0zOS4yLTE0LjlMMzEuNCAzOTkuN2MtMTEuMi0xNC45LTE1LjktMjYuMS0xNS45LTM5LjJsMC0yOTEuMmMwLTE2LjggNy41LTMwLjggMjguOS0zMi43eiJdCiAgICB9OwogICAgZmFDaHJvbWVjYXN0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNocm9tZWNhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzOCIsICJNNDQ4IDY0TDY0LjIgNjRjLTIzLjYgMC00Mi43IDE5LjEtNDIuNyA0Mi43bDAgNjMuOSA0Mi43IDAgMC02My45IDM4My44IDAgMCAyOTguNi0xNDkuMiAwIDAgNDIuNyAxNDkuNCAwYzIzLjYgMCA0Mi43LTE5LjEgNDIuNy00Mi43bDAtMjk4LjZDNDkwLjkgODMuMSA0NzEuNiA2NCA0NDggNjR6TTIxLjUgMzgzLjZsMCA2My45IDYzLjkgMGMwLTM1LjMtMjguNi02My45LTYzLjktNjMuOXptMC04NWwwIDQyLjRjNTguOSAwIDEwNi42IDQ4LjEgMTA2LjYgMTA3bDQyLjcgMGMuMS04Mi40LTY2LjktMTQ5LjMtMTQ5LjMtMTQ5LjR6TTIxMy42IDQ0OGw0Mi43IDBDMjU1LjggMzE4LjUgMTUxIDIxMy43IDIxLjUgMjEzLjRsMCA0Mi40YzEwNi0uMiAxOTIgODYuMiAxOTIuMSAxOTIuMnoiXQogICAgfTsKICAgIGZhV2lraXBlZGlhVyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3aWtpcGVkaWEtdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjY2IiwgIk02NDAgNTEuMmwtLjMgMTIuMmMtMjguMSAuOC00NSAxNS44LTU1LjggNDAuMy0yNSA1Ny44LTEwMy4zIDI0MC0xNTUuMyAzNTguNmwtMTMuNiAwLTgxLjktMTkzLjFjLTMyLjUgNjMuNi02OC4zIDEzMC05OS4yIDE5My4xLS4zIC4zLTE1IDAtMTUtLjMtNDYuOS0xMDkuNy05Ni4xLTIxOC42LTE0My4xLTMyOC42LTExLjQtMjYuNy00OS40LTcwLTc1LjYtNjkuNyAwLTMuMS0uMy0xMC0uMy0xNC4ybDE2MS45IDAgMCAxMy45Yy0xOS4yIDEuMS01Mi44IDEzLjMtNDMuMyAzNC4yIDIxLjkgNDkuNyAxMDMuNiAyNDAuMyAxMjUuNiAyODguNiAxNS0yOS43IDU3LjgtMTA5LjIgNzUuMy0xNDIuOC0xMy45LTI4LjMtNTguNi0xMzMuOS03Mi44LTE2MC05LjctMTcuOC0zNi4xLTE5LjQtNTUuOC0xOS43bDAtMTMuOSAxNDIuNSAuMyAwIDEzLjFjLTE5LjQgLjYtMzguMSA3LjgtMjkuNCAyNi4xIDE4LjkgNDAgMzAuNiA2OC4xIDQ4LjEgMTA0LjcgNS42LTEwLjggMzQuNy02OS40IDQ4LjEtMTAwLjggOC45LTIwLjYtMy45LTI4LjYtMzguNi0yOS40IC4zLTMuNiAwLTEwLjMgLjMtMTMuNiA0NC40LS4zIDExMS4xLS4zIDEyMy4xLS42bDAgMTMuNkM0NjIuNCA2NCA0MzkuMSA3NiA0MjYuOCA5NC45TDM2Ny42IDIxNy43YzYuNCAxNi4xIDYzLjMgMTQyLjggNjkuMiAxNTYuN0w1NTkuMiA5MS44Yy04LjYtMjMuMS0zNi40LTI4LjEtNDcuMi0yOC4zbDAtMTMuOSAxMjcuOCAxLjEgLjIgLjV6Il0KICAgIH07CiAgICBmYVNpdHJveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaXRyb3giLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTQ0YSIsICJNMjEyLjQgMGwwIDAgMjM1LjYgMCAwIDEyOC0zODQgMEM2NCA1Ny42IDE0MS44IC41IDIxMi40IDB6bTI0LjggMTkybDAgMGM2OS45IC41IDE0Ni43IDU3LjYgMTQ2LjcgMTI4bC0xNzMuMiAwIDAgMEMxNDAuOSAzMTkuNiA2NCAyNjIuNCA2NCAxOTJsMTczLjMgMHptLTEuNyAzMjBjNzAuNy0uNSAxNDguNC01Ny42IDE0OC40LTEyOGwtMzg0IDAgMCAxMjggMjM1LjYgMCAwIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUdpdGxhYiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZ2l0bGFiIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImdpdGxhYi1zcXVhcmUiXSwgImU1YWUiLCAiTTAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NnptMzM3LjUgMTIuNWw0NC42IDExNi40IC40IDEuMmM1LjYgMTYuOCA3LjIgMzUuMiAyLjMgNTIuNS01IDE3LjItMTUuNCAzMi40LTI5LjggNDMuM2wtLjIgLjEtNjguNCA1MS4yLTU0LjEgNDAuOWMtLjUgLjItMS4xIC41LTEuNyAuOC0yIDEtNC40IDItNi43IDItMyAwLTYuOC0xLjgtOC4zLTIuOGwtNTQuMi00MC45LTY3LjktNTAuOS0uNC0uMy0uMi0uMWMtMTQuMy0xMC44LTI0LjgtMjYtMjkuNy00My4zcy00LjItMzUuNyAyLjItNTIuNWwuNS0xLjIgNDQuNy0xMTYuNGMuOS0yLjMgMi41LTQuMyA0LjUtNS42IDEuNi0xIDMuNC0xLjYgNS4yLTEuOCAxLjMtLjcgMi4xLS40IDMuNCAuMSAuNiAuMiAxLjIgLjUgMiAuNyAxIC40IDEuNiAuOSAyLjQgMS41IC42IC40IDEuMiAxIDIuMSAxLjUgMS4yIDEuNCAyLjIgMyAyLjcgNC44bDI5LjIgOTIuMiAxMjIuOSAwIDMwLjItOTIuMmMuNS0xLjggMS40LTMuNCAyLjYtNC44czIuOC0yLjQgNC41LTMuMWMxLjctLjYgMy42LS45IDUuNC0uN3MzLjYgLjggNS4yIDEuOGMyIDEuMyAzLjcgMy4zIDQuNiA1LjZ6Il0KICAgIH07CiAgICBmYUdpdGxhYlNxdWFyZSA9IGZhU3F1YXJlR2l0bGFiOwogICAgZmFTaG9lbGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzaG9lbGFjZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNjBjIiwgIk00MDUuMiAzMzFjMi4yLTEuMSA0LjQtMi4zIDYuNS0zLjdsOC4zLTQuOGMxLjUtMS4xIDQuNC0zLjQgOC43LTYuN2wuNS0uNWMzLjQtMy40IDcuMi01IDExLjMtNC45IDEuOCAwIDMuOSAuNSA2LjQgMS41bDMxLTI3LjVjLjktLjcgMS43LTEuMyAyLjYtMS44bC4yIDBjMy4zLTEuOSA2LTEuOCA4LjIgLjQgMy45IDIuMSA0LjIgNS42IC45IDEwLjZMNDU3LjIgMzIyYy4yIC41IC40IDEgLjQgMS41IC41IDIuMiAuMyA0LjQtLjUgNi42LS43IDEuNS0xLjggMi45LTMuMSA0LjItMS40IDEuNC0yLjcgMi44LTQuMiA0LjJMNDMxIDM1Mi4yYy0xLjcgMS4yLTMuNCAyLjMtNS4xIDMuMy0yLjEgMS4zLTQuMyAyLjUtNi42IDMuNi0xIC40LTEuOSAuOS0yLjkgMS4zLTUuOSAyLjUtMTEuOSA0LjItMTguMiA1LTIuOSAyNC41LTExLjMgNDcuMS0yNS4xIDY3LjgtMTcuNSAyNS43LTQxLjQgNDUuNC03MS44IDU4LjgtMzAuMiAxMy41LTYzIDIwLjItOTguMiAyMC4yLTQ4LjYtLjUtODgtMTEuNC0xMTguMi0zMi44LTM1LjEtMjUtNTIuNi01Ny45LTUyLjYtOTkuMWwwLTUuNmMxLjItMjguMSA5LjUtNTQuNiAyNC44LTc5LjggMTUuMS0yNC45IDM3LjEtNDEuNyA2Ni4xLTUwLjUgMTQuOS00LjQgMjkuOS02LjYgNDUtNi42IDE1LjUgMCAzMS42IDIuOSA0OC4xIDguNnMzNS4yIDE1LjUgNTUuOSAyOS41bDU0LjEgMzYuM2MxNS4xIDkuOCAyOC44IDE2LjUgNDEuMiAyMC0yLjYtMjUuMS0xMS43LTQ2LjYtMjcuMy02NC41LTE1LjctMTguMS0zNS42LTMxLjMtNTkuOS0zOS43TDI1NyAyMjBjLTIxLjQtNy41LTM3LjMtMTQuOS00Ny43LTIyLjItMjguMi0xOS4xLTQzLjgtNDUuMi00Ny03OC41bC0uNS05LjhjMC0zMi4xIDEzLTU4LjkgMzktODAuNSAyMy0xOS4zIDUwLjYtMjkgODIuNS0yOSAyNCAwIDQ1LjYgNi45IDY0LjcgMjAuOCAxOS4yIDE0IDMwLjEgMzMuOCAzMi42IDU5LjRsLjUgMTBjMCAxOC42LTQuOCAzNC41LTE0LjQgNDcuNy05LjggMTMuMi0xOC41IDE5LjktMjYgMTkuOS0xLjYtLjEtMy4xLS4zLTQuNS0uNmwtMzQgMzJjLTUuNSAzLTkuMiAyLjUtMTEuMS0xLjYtMS45LTIuMi0xLjgtNC45IC41LTguMmwuMi0uMmMuNS0uNyAxLjItMS41IDItMi40bDMxLjYtMzBjLS40LTEuNS0uNi0zLjEtLjYtNC44IDAtNC4xIDEuNi03LjYgNC45LTEwLjQgMTMuOC0xMi40IDIwLjgtMjYuNyAyMC44LTQyLjggMC0xNi02LjEtMjkuNS0xOC4yLTQwLjRzLTI4LjctMTYuNS00OS43LTE2LjhjLTI2LjIgMC00Ny44IDcuOS02NC43IDIzLjdTMTkyLjYgODkuOSAxOTIuNiAxMTJjMCAxNy44IDYuOSAzMy45IDIwLjYgNDguMyAxMy42IDE0LjIgMzQuNiAyNS40IDYzIDMzLjUgMzkuOCAxMS41IDcwLjIgMzEgOTEuMyA1OC4zIDE4LjcgMjQuMiAyOS4xIDUxLjMgMzEuMyA4MS40IDIuMi0uNyA0LjMtMS41IDYuNS0yLjZsLS4xIC4xek0yOTQuNCAxNzguN2MwIDEuMSAuNiAxLjYgMS44IDEuNiAuMSAwIDkuNy04LjkgMjguOC0yNi42IDAtMi40LTUuMSAuOS0xNS4zIDEwLTEwLjIgOS4yLTE1LjMgMTQuMi0xNS4zIDE0LjlsMCAuMXptOCA2LjRjMC0xLS41LTEuNS0xLjUtMS41LTEuMSAwLTIuMSAuNS0yLjkgMS42LTEuOS0uMS0zLjMgLjEtNC4yIC43LS40IC4yLS41IC41LS41IC43IDAgLjcgLjUgMS4zIDEuNSAxLjZsMy4zIDBjMi45LTEuMSA0LjQtMi4yIDQuNC0zLjNsLS4xIC4yek0zMjUgMTY1LjJjMC0yLjgtMS42LTIuOC00LjkgMC0xLjYgMS41LTMuNiAzLjUtNiA2LjItLjggLjYtMi42IDIuMi01LjMgNC45LTIuOCAyLjktNC4yIDQuNy00LjIgNS4zbC4yIDEuM2MuNyAuMiAxLjIgLjQgMS41IC40IC4xIDAgMy4zLTIuOSA5LjUtOC43czkuMy04LjkgOS4zLTkuM2wtLjEtLjF6bTE1OS43IDEyMGwtMzAuNiAyN2MxLjggMSAzLjIgMi40IDQgNC4ybDMwLjItMjdjLjItMS4yIC4xLTIuMi0uNS0yLjktLjYtLjUtMS42LS45LTMuMS0xLjN6bS0xLjYtLjlsLS43LS43LTI3IDIxLjkgMS42IDIgMjYtMjMuMSAuMS0uMXpNMzY2LjkgMzYzLjljLTgtMi4xLTE1LjQtNC42LTIyLjItNy41LTE1LjMtNi4yLTM0LjMtMTctNTctMzIuNGwtMzcuNC0yNS4zYy0xNS44LTEwLjEtMzAuMi0xNy42LTQzLjItMjIuNi0xMy4xLTQuOS0yNi03LjMtMzguNi03LjNsLTUuNSAwYy0zMi4yIDEuNy01Ny4yIDEzLjgtNzUgMzYuMi0xNi42IDIwLjgtMjUgNDUuMy0yNSA3My42IDAgMzEuOCAxMi44IDU2LjcgMzguMiA3NC43IDI1LjQgMTguMSA2MC4yIDI3LjEgMTA0LjQgMjcuMSAzNC43IDAgNjQtNi4yIDg3LjgtMTguNiAyMy43LTEyLjQgNDIuMS0yOC44IDU1LjItNDkuMiA5LjgtMTUuNSAxNS45LTMxLjggMTguMi00OC44bC4xIC4xeiJdCiAgICB9OwogICAgZmFTZWxsY2FzdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzZWxsY2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmRhIiwgIk0zNTMuNSAzMkw5NC44IDMyQzQyLjcgMzIgLjEgNzQuNiAuMSAxMjYuNmwwIDI1OC43Qy4xIDQzNy40IDQyLjcgNDgwIDk0LjggNDgwbDI1OC43IDBjNTIuMSAwIDk0LjctNDIuNiA5NC43LTk0LjZsMC0yNTguOGMwLTUyLTQyLjYtOTQuNi05NC43LTk0LjZ6bS01MCAzMTYuNGMtMjcuOSA0OC4yLTg5LjkgNjQuOS0xMzguMiAzNy4yLTIyLjkgMzkuOC01NC45IDguNi00Mi4zLTEzLjJsMTUuNy0yNy4yYzUuOS0xMC4zIDE5LjItMTMuOSAyOS41LTcuOSAxOC42IDEwLjgtLjEtLjEgMTguNSAxMC43IDI3LjYgMTUuOSA2My40IDYuMyA3OS40LTIxLjMgMTUuOS0yNy42IDYuMy02My40LTIxLjMtNzkuNC0xNy44LTEwLjItLjYtLjQtMTguNi0xMC42LTI0LjYtMTQuMi0zLjQtNTEuOSAyMS42LTM3LjUgMTguNiAxMC44LS4xLS4xIDE4LjUgMTAuNyA0OC40IDI4IDY1LjEgOTAuMyAzNy4yIDEzOC41em0yMS44LTIwOC44Yy0xNyAyOS41LTE2LjMgMjguOC0xOSAzMS41LTYuNSA2LjUtMTYuMyA4LjctMjYuNSAzLjYtMTguNi0xMC44IC4xIC4xLTE4LjUtMTAuNy0yNy42LTE1LjktNjMuNC02LjMtNzkuNCAyMS4zcy02LjMgNjMuNCAyMS4zIDc5LjRjMCAwIDE4LjUgMTAuNiAxOC42IDEwLjYgMjQuNiAxNC4yIDMuNCA1MS45LTIxLjYgMzcuNS0xOC42LTEwLjggLjEgLjEtMTguNS0xMC43LTQ4LjItMjcuOC02NC45LTkwLjEtMzcuMS0xMzguNCAyNy45LTQ4LjIgODkuOS02NC45IDEzOC4yLTM3LjJsNC44LTguNGMxNC4zLTI0LjkgNTItMy4zIDM3LjcgMjEuNXoiXQogICAgfTsKICAgIGZhTWl4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm1peCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmM2NiIiwgIk0wIDY0TDAgNDEyLjljMCA1Ni4yIDg4IDU4LjEgODggMGwwLTIzOC42YzcuOS01Mi45IDg4LTUwLjQgODggNi41bDAgMTc1LjNjMCA1Ny45IDk2IDU4IDk2IDBMMjcyIDI0MGM1LjMtNTQuNyA4OC01Mi41IDg4IDQuM2wwIDIzLjhjMCA1OS45IDg4IDU2LjYgODggMEw0NDggNjQgMCA2NHoiXQogICAgfTsKICAgIGZhQ2NBcHBsZVBheSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJjYy1hcHBsZS1wYXkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQxNiIsICJNMzAyLjIgMjE4LjRjMCAxNy4yLTEwLjUgMjcuMS0yOSAyNy4xbC0yNC4zIDAgMC01NC4yIDI0LjQgMGMxOC40IDAgMjguOSA5LjggMjguOSAyNy4xek0zNDkuNyAyODFjMCA4LjMgNy4yIDEzLjcgMTguNSAxMy43IDE0LjQgMCAyNS4yLTkuMSAyNS4yLTIxLjlsMC03LjctMjMuNSAxLjVjLTEzLjMgLjktMjAuMiA1LjgtMjAuMiAxNC40ek01NzYgNzlsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDc5Yy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDc5QzAgNTIuNSAyMS41IDMxIDQ4IDMxbDQ4MCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek0xMjcuOCAxOTcuMmM4LjQgLjcgMTYuOC00LjIgMjIuMS0xMC40IDUuMi02LjQgOC42LTE1IDcuNy0yMy43LTcuNCAuMy0xNi42IDQuOS0yMS45IDExLjMtNC44IDUuNS04LjkgMTQuNC03LjkgMjIuOHptNjAuNiA3NC41Yy0uMi0uMi0xOS42LTcuNi0xOS44LTMwLS4yLTE4LjcgMTUuMy0yNy43IDE2LTI4LjItOC44LTEzLTIyLjQtMTQuNC0yNy4xLTE0LjctMTIuMi0uNy0yMi42IDYuOS0yOC40IDYuOS01LjkgMC0xNC43LTYuNi0yNC4zLTYuNC0xMi41IC4yLTI0LjIgNy4zLTMwLjUgMTguNi0xMy4xIDIyLjYtMy40IDU2IDkuMyA3NC40IDYuMiA5LjEgMTMuNyAxOS4xIDIzLjUgMTguNyA5LjMtLjQgMTMtNiAyNC4yLTYgMTEuMyAwIDE0LjUgNiAyNC4zIDUuOSAxMC4yLS4yIDE2LjUtOS4xIDIyLjgtMTguMiA2LjktMTAuNCA5LjgtMjAuNCAxMC0yMXptMTM1LjQtNTMuNGMwLTI2LjYtMTguNS00NC44LTQ0LjktNDQuOGwtNTEuMiAwIDAgMTM2LjQgMjEuMiAwIDAtNDYuNiAyOS4zIDBjMjYuOCAwIDQ1LjYtMTguNCA0NS42LTQ1em05MCAyMy43YzAtMTkuNy0xNS44LTMyLjQtNDAtMzIuNC0yMi41IDAtMzkuMSAxMi45LTM5LjcgMzAuNWwxOS4xIDBjMS42LTguNCA5LjQtMTMuOSAyMC0xMy45IDEzIDAgMjAuMiA2IDIwLjIgMTcuMmwwIDcuNS0yNi40IDEuNmMtMjQuNiAxLjUtMzcuOSAxMS42LTM3LjkgMjkuMSAwIDE3LjcgMTMuNyAyOS40IDMzLjQgMjkuNCAxMy4zIDAgMjUuNi02LjcgMzEuMi0xNy40bC40IDAgMCAxNi40IDE5LjYgMCAwLTY4IC4xIDB6TTUxNiAyMTAuOWwtMjEuNSAwLTI0LjkgODAuNi0uNCAwLTI0LjktODAuNi0yMi4zIDAgMzUuOSA5OS4zLTEuOSA2Yy0zLjIgMTAuMi04LjUgMTQuMi0xNy45IDE0LjItMS43IDAtNC45LS4yLTYuMi0uM2wwIDE2LjRjMS4yIC40IDYuNSAuNSA4LjEgLjUgMjAuNyAwIDMwLjQtNy45IDM4LjktMzEuOEw1MTYgMjEwLjl6Il0KICAgIH07CiAgICBmYUJyYXZlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJyYXZlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2M2MiLCAiTTE0NS42IDBsMTU3IDAgNDQuNyA1MC44czM5LjMtMTAuOSA1Ny44IDcuNiAzMy44IDM0LjkgMzMuOCAzNC45bC0xMiAyOS41IDE1LjMgNDMuN3MtNDQuOSAxNzAuMi01MC4xIDE5MWMtMTAuNCA0MC45LTE3LjQgNTYuOC00Ni45IDc3LjVzLTgyLjkgNTYuOC05MS42IDYyLjJjLTEuOSAxLjItMy45IDIuNS01LjkgMy45LTcuNSA1LjEtMTUuOCAxMC44LTIzLjUgMTAuOHMtMTYuMS01LjctMjMuNS0xMC44Yy0yLTEuNC00LTIuOC01LjktMy45LTguNy01LjUtNjIuMS00MS41LTkxLjYtNjIuMnMtMzYuNS0zNi42LTQ2LjktNzcuNWMtNS4zLTIwLjgtNTAuMS0xOTEtNTAuMS0xOTFMMjEuNSAxMjIuOCA5LjMgOTMuM3MxNS4zLTE2LjQgMzMuOC0zNC45IDU3LjgtNy42IDU3LjgtNy42TDE0NS42IDB6bTc4LjUgNDA3LjZjMy43IDAgOC45LTQuNyAxMy04LjQgLjYtLjUgMS4yLTEuMSAxLjctMS41IDQuMi0zLjcgNDcuOC0zNy41IDUxLTM5LjhzNS40LTYuNSAxLjktOC43Yy0yLjgtMS43LTEwLTUuNS0yMC4zLTEwLjgtMy0xLjYtNi4zLTMuMi05LjctNS0xNS40LTgtMzQuNS0xNC43LTM3LjUtMTQuN3MtMjIuMSA2LjgtMzcuNSAxNC43Yy0zLjUgMS44LTYuNyAzLjUtOS43IDUtMTAuMyA1LjMtMTcuNiA5LjEtMjAuMyAxMC44LTMuNiAyLjItMS40IDYuNCAxLjkgOC43czQ2LjggMzYuMSA1MSAzOS44Yy41IC41IDEuMSAxIDEuNyAxLjUgNC4xIDMuNyA5LjMgOC40IDEzIDguNGwtLjIgMHptMC0xNjUuN2M0LjcgMCAxNy42LTMgMjYuNC01bDItLjVjNy44LTEuOCA3LjMtNi4zIDYuNC0xMy0uMS0uOC0uMi0xLjYtLjMtMi40LS42LTYuMS01LjgtMzMuMS05LjEtNTAuMy0xLjEtNS44LTItMTAuNS0yLjQtMTIuOS0xLjUtOC4xLS42LTkuNCAuNy0xMS4zIC4yLS4zIC41LS43IC43LTEuMSAxLjQtMi4zIDE2LTYuMiAyNy45LTkuNSAyLjUtLjcgNC44LTEuMyA2LjktMS45IDEwLjYtMyAzMi40LS42IDQ0LjIgLjYgMS44IC4yIDMuNCAuNCA0LjcgLjUgOS42IC45IDEwLjQgMi4zIDcuMiAzLjgtMi4zIDEuMS0xNi4yIDYuMy0yOC43IDEwLjktNC43IDEuOC05LjIgMy41LTEyLjggNC44LTEuNSAuNS0zIDEuMS00LjUgMS43LTEyLjUgNC42LTI3LjIgMTAtMjguOSAxOS40LTEuNSA4LjMgNS4yIDE5LjkgMTEuMyAzMC4zIDEuNiAyLjggMy4yIDUuNSA0LjYgOC4xIDYuMyAxMS45IDYuNSAxMy4zIDYuMSAxOC4xLS40IDMuOS0xNC41IDEyLjctMjIuNCAxNy42LTEuOCAxLjEtMy4zIDIuMS00LjIgMi43LS44IC41LTIuMSAxLjQtMy44IDIuNC04LjYgNS4yLTI2LjMgMTYtMjYuMyAyMi41IDAgNy44IDI0LjYgMjguMSAzMi40IDMzLjJzMjguOSAxNi4xIDM3LjkgMTcuOCAyMy04LjUgMzEuMi0yMy44YzcuNy0xNC40IDEuNy0yOC41LTMuMi00MGwtLjktMi4yYy00LjUtMTAuNiAxLjktMTcgNi4yLTIxLjMgLjUtLjUgMS0xIDEuNC0xLjRsNDMtNDUuN2MxLjMtMS4zIDIuNS0yLjYgMy43LTMuOCA1LjgtNS43IDEwLjgtMTAuNSAxMC44LTIyLjggMC0xNC45LTU3LjUtODQuNS01Ny41LTg0LjVzLTQ4LjUgOS4zLTU1LjEgOS4zYy01LjIgMC0xNS4zLTMuNS0yNS44LTcuMS0yLjctLjktNS40LTEuOS04LTIuNy0xMy00LjMtMjEuOC00LjQtMjEuOC00LjRzLTguNyAwLTIxLjggNC40Yy0yLjcgLjktNS40IDEuOC04IDIuNy0xMC41IDMuNi0yMC42IDcuMS0yNS44IDcuMS02LjUgMC01NS4xLTkuMy01NS4xLTkuM3MtNTcuNSA2OS42LTU3LjUgODQuNWMwIDEyLjMgNC45IDE3LjEgMTAuOCAyMi44IDEuMiAxLjIgMi41IDIuNCAzLjcgMy44bDQzLjEgNDUuOGMuNCAuNSAuOSAuOSAxLjQgMS40IDQuMyA0LjMgMTAuNiAxMC43IDYuMiAyMS4zbC0uOSAyLjJjLTQuOSAxMS41LTExIDI1LjYtMy4yIDQwIDguMiAxNS4zIDIyLjIgMjUuNSAzMS4yIDIzLjhzMzAuMS0xMi43IDM3LjktMTcuOCAzMi40LTI1LjQgMzIuNC0zMy4yYzAtNi41LTE3LjctMTcuMy0yNi4zLTIyLjUtMS43LTEtMy4xLTEuOS0zLjgtMi40LS45LS42LTIuNC0xLjUtNC4yLTIuNy03LjktNC45LTIyLTEzLjctMjIuNC0xNy42LS40LTQuOC0uMy02LjIgNi4xLTE4LjEgMS4zLTIuNSAyLjktNS4zIDQuNi04LjEgNi0xMC40IDEyLjgtMjIgMTEuMy0zMC4zLTEuNy05LjQtMTYuNC0xNC44LTI4LjktMTkuNC0xLjYtLjYtMy4xLTEuMS00LjUtMS43LTMuNi0xLjQtOC4xLTMuMS0xMi44LTQuOGwtLjEgMGMtMTIuNS00LjctMjYuNC05LjktMjguNy0xMC45LTMuMi0xLjUtMi4zLTIuOCA3LjItMy44IDEuMy0uMSAyLjktLjMgNC43LS41IDExLjgtMS4zIDMzLjYtMy42IDQ0LjItLjYgMi4xIC42IDQuNCAxLjIgNi45IDEuOSAxMS45IDMuMiAyNi41IDcuMiAyNy45IDkuNSAuMiAuNCAuNSAuNyAuNyAxLjEgMS4zIDEuOSAyLjIgMy4yIC43IDExLjMtLjQgMi40LTEuMyA3LjEtMi40IDEyLjktMy4zIDE3LjItOC41IDQ0LjItOS4xIDUwLjMtLjEgLjgtLjIgMS43LS4zIDIuNC0uOCA2LjctMS40IDExLjIgNi40IDEzbDIgLjVjOC44IDIgMjEuOCA1IDI2LjQgNWwwLS4xeiJdCiAgICB9OwogICAgZmFFdHN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImV0c3kiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJkNyIsICJNMzg0IDM0OGMtMS44IDEwLjctMTMuOCAxMTAtMTUuNSAxMzItMTE3LjktNC4zLTIxOS45LTQuNy0zNjguNSAwbDAtMjUuNWM0NS41LTguOSA2MC42LTggNjEtMzUuMiAxLjgtNzIuMyAzLjUtMjQ0LjEgMC0zMjItMS0yOC41LTEyLjEtMjYuOC02MS0zNkwwIDM1LjhjNzMuOSAyLjQgMjU1LjkgOC42IDM2My0zLjgtMy41IDM4LjItNy44IDEyNi41LTcuOCAxMjYuNWwtMjMuMiAwQzMyMC45IDExNS43IDMxMy4yIDY4IDI3Ny4zIDY4bC0xMzcgMGMtMTAuMiAwLTEwLjcgMy41LTEwLjcgOS44bDAgMTYzLjhjNTggLjUgODguNS0yLjUgODguNS0yLjUgMjkuOC0xIDI3LjYtOC41IDQwLjctNjUuM2wyNS44IDBjLTQuNCAxMDEuNC0zLjkgNjEuOC0xLjggMTYwLjNMMjU3IDMzNGMtOS4yLTQwLjEtOS4xLTYxLTM5LjUtNjEuNSAwIDAtMjEuNS0yLTg4LTJsMCAxMzljMCAyNiAxNC4zIDM4LjMgNDQuMyAzOC4zbDg5LjMgMGM2My42IDAgNjYuNi0yNSA5OC43LTk5LjhsMjIuMiAweiJdCiAgICB9OwogICAgZmFCdGMgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYnRjIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxNWEiLCAiTTMxMC40IDI0Mi42YzI3LjctMTQuMiA0NS40LTM5LjQgNDEuMy04MS4zLTUuNC01Ny40LTUyLjUtNzYuNi0xMTQuOC04MS45bDAtNzkuNC00OC41IDAgMCA3Ny4yYy0xMi42IDAtMjUuNSAuMy0zOC40IC42bDAtNzcuOC00OC41IDAgMCA3OS40Yy0xNy44IC41LTM4LjYgLjMtOTcuNCAwbDAgNTEuN2MzOC4zLS43IDU4LjQtMy4xIDYzIDIxLjRsMCAyMTcuNGMtMi45IDE5LjUtMTguNSAxNi43LTUzLjMgMTYuMUw0IDQ0My43Yzg4LjUgMCA5Ny40IC4zIDk3LjQgLjNsMCA2OCA0OC41IDAgMC02Ny4xYzEzLjIgLjMgMjYuMiAuMyAzOC40IC4zbDAgNjYuNyA0OC41IDAgMC02OGM4MS4zLTQuNCAxMzUuNi0yNC45IDE0Mi45LTEwMS41IDUuNy02MS40LTIzLjMtODguOS02OS4zLTk5Ljl6TTE1MC44IDEzNC42YzI3LjQgMCAxMTMuMS04LjUgMTEzLjEgNDguNSAwIDU0LjUtODUuNyA0OC4yLTExMy4xIDQ4LjJsMC05Ni43em0wIDI1MS44bDAtMTA2LjVjMzIuOCAwIDEzMy4xLTkuMSAxMzMuMSA1My4zIDAgNjAuMi0xMDAuNCA1My4zLTEzMy4xIDUzLjN6Il0KICAgIH07CiAgICBmYUFkbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhZG4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjE3MCIsICJNMjU2IDE2Ny41bDY0LjkgOTguOC0xMjkuOCAwIDY0LjktOTguOHpNOCAyNTZhMjQ4IDI0OCAwIDEgMSA0OTYgMCAyNDggMjQ4IDAgMSAxIC00OTYgMHptMzk2LjIgODIuN2wtMTQ4LjItMjIzLjItMTQ4LjIgMjIzLjIgMzAuNCAwIDMzLjYtNTEuNyAxNjguNiAwIDMzLjYgNTEuNyAzMC4yIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVhUd2l0dGVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14LXR3aXR0ZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTYxYSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptMjk3LjEgODRsLTEwMy44IDExOC42IDEyMi4xIDE2MS40LTk1LjYgMC03NC44LTk3LjktODUuNyA5Ny45LTQ3LjUgMCAxMTEtMTI2LjktMTE3LjEtMTUzLjEgOTggMCA2Ny43IDg5LjUgNzguMi04OS41IDQ3LjUgMHpNMzIzLjMgMzY3LjZsLTE2OS45LTIyNC43LTI4LjMgMCAxNzEuOCAyMjQuNyAyNi40IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUZvbnRBd2Vzb21lID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mb250LWF3ZXNvbWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTVhZCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTAgMTIyYzAgOS4zLTQuOCAxNy40LTEyLjEgMjJsMTg4LjkgMGM3LjMgMCAxMy4yIDUuOSAxMy4yIDEzLjIgMCAxLjgtLjQgMy43LTEuMSA1LjRMMzEyIDI2NCAzNDIuOSAzMzMuNGMuNyAxLjcgMS4xIDMuNSAxLjEgNS40IDAgNy4zLTUuOSAxMy4yLTEzLjIgMTMuMmwtMTg2LjggMCAwIDMyLTMyIDAgMC0yMDkuNWMtNi4xLTQuOC0xMC0xMi4yLTEwLTIwLjUgMC0xNC40IDExLjYtMjYgMjYtMjZzMjYgMTEuNiAyNiAyNnoiXQogICAgfTsKICAgIGZhRm9ydW1iZWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydW1iZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjIxMSIsICJNNS44IDMwOS43QzIgMjkyLjcgMCAyNzUuNSAwIDI1OC4zIDAgMTM1IDk5LjggMzUgMjIzLjEgMzUgMjM5LjcgMzUgMjU2LjQgMzcgMjcyLjQgNDAuNSAxNDkgODcuNSA1MS45IDE4NiA1LjggMzA5Ljd6TTM5OC43IDEyMC41Yy0xMy43LTE3LjUtMjkuNy0zMi43LTQ3LjgtNDUuMy0xNDkuNiA0NC4zLTI2Ni4zIDE2Mi4xLTMwOS43IDMxMiAxMi41IDE4LjEgMjggMzUuNiA0NS4yIDQ5IDQzLjEtMTUxLjMgMTYxLjItMjcxLjcgMzEyLjMtMzE1Ljd6bTE1LjggMjUyLjdjMTUuMi0yNS4xIDI1LjQtNTMuNyAyOS41LTgyLjgtNzkuNCA0Mi45LTE0NSAxMTAuNi0xODcuNiAxOTAuMyAzMC00LjQgNTguOS0xNS4zIDg0LjYtMzEuMyAzNSAxMy4xIDcwLjkgMjQuMyAxMDcgMzMuNi05LjMtMzYuNS0yMC40LTc0LjUtMzMuNS0xMDkuOHptMjkuNy0xNDUuNWMtMi42LTE5LjUtNy45LTM4LjctMTUuOC01Ni44LTEzNy45IDQ1LjgtMjQ2LjQgMTU2LjYtMjkxLjMgMjk1LjEgMTguMSA3LjYgMzcgMTIuNSA1Ni42IDE1LjIgNDYuMy0xMTQuMSAxMzYuOC0yMDYuOCAyNTAuNS0yNTMuNXoiXQogICAgfTsKICAgIGZhNDJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICI0Mi1ncm91cCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJpbm5vc29mdCJdLCAiZTA4MCIsICJNMzIwIDk2bDAgMzIwYzIxIDAgNDEuOC00LjEgNjEuMi0xMi4yczM3LTE5LjggNTEuOS0zNC43IDI2LjYtMzIuNSAzNC43LTUxLjkgMTIuMi00MC4yIDEyLjItNjEuMi00LjEtNDEuOC0xMi4yLTYxLjItMTkuOC0zNy4xLTM0LjctNTEuOS0zMi41LTI2LjYtNTEuOS0zNC43LTQwLjItMTIuMi02MS4yLTEyLjJ6TTAgMjU2TDE2MCA0MTYgMzIwIDI1NiAxNjAgOTYgMCAyNTZ6bTQ4MCAwYzAgMjEgNC4xIDQxLjggMTIuMiA2MS4yczE5LjggMzcgMzQuNyA1MS45IDMyLjUgMjYuNiA1MS45IDM0LjcgNDAuMiAxMi4yIDYxLjIgMTIuMmwwLTMyMGMtNDIuNCAwLTgzLjEgMTYuOS0xMTMuMSA0Ni45UzQ4MCAyMTMuNiA0ODAgMjU2eiJdCiAgICB9OwogICAgZmFJbm5vc29mdCA9IGZhNDJHcm91cDsKICAgIGZhU3R1bWJsZXVwb25DaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3R1bWJsZXVwb24tY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYTMiLCAiTTI2NCA4YTI0OCAyNDggMCAxIDAgMCA0OTYgMjQ4IDI0OCAwIDEgMCAwLTQ5NnptMCAxNzcuNWMtOS44IDAtMTcuOCA4LTE3LjggMTcuOGwwIDEwNi45YzAgNDAuOS0zMy45IDczLjktNzQuOSA3My45LTQxLjQgMC03NC45LTMzLjUtNzQuOS03NC45bDAtNDYuNSA1Ny4zIDAgMCA0NS44YzAgMTAgOCAxNy44IDE3LjggMTcuOHMxNy44LTcuOSAxNy44LTE3LjhsMC0xMDguNGMwLTQwIDM0LjItNzIuMSA3NC43LTcyLjEgNDAuNyAwIDc0LjcgMzIuMyA3NC43IDcyLjZsMCAyMy43LTM0LjEgMTAuMS0yMi45LTEwLjcgMC0yMC42Yy4xLTkuNi03LjktMTcuNi0xNy43LTE3LjZ6TTQzMS42IDMwOS4xYzAgNDEuNC0zMy41IDc0LjktNzQuOSA3NC45LTQxLjIgMC03NC45LTMzLjItNzQuOS03NC4ybDAtNDYuOCAyMi45IDEwLjcgMzQuMS0xMC4xIDAgNDcuMWMwIDkuOCA4IDE3LjYgMTcuOCAxNy42czE3LjgtNy45IDE3LjgtMTcuNmwwLTQ4IDU3LjMgMGMtLjEgNDUuOS0uMSA0Ni40LS4xIDQ2LjR6Il0KICAgIH07CiAgICBmYVN5bWZvbnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3ltZm9ueSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmODNkIiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM4OS43IDE1MS41Yy0xMS41IC40LTE5LjQtNi40LTE5LjgtMTYuOS0uMy05LjIgNi43LTEzLjQgNi41LTE4LjktLjItNi41LTEwLjItNi44LTEyLjktNi43LTM5LjggMS4zLTQ4LjYgNTctNTguOSAxMTMuOCAyMS40IDMuMiAzNi42LS43IDQ1LjEtNi4yIDEyLTcuNy0zLjMtMTUuNy0xLjQtMjQuNiA0LTE4LjIgMzIuNi0xOSAzMiA1LjMtLjQgMTcuOS0yNS45IDQxLjgtNzcuNiAzNS43LTEwLjggNTkuNS0xOC40IDExNS01OC4yIDE2MS43LTI5IDM0LjUtNTguNCAzOS44LTcxLjYgNDAuMy0yNC42IC45LTQxLTEyLjMtNDEuNi0yOS44LS42LTE3IDE0LjQtMjYuMyAyNC4zLTI2LjYgMjEuOS0uOCAzMC4xIDI1LjcgMTQuOSAzNC0xMi4xIDkuNyAuMSAxMi42IDIuMSAxMi42IDEwLjQtLjQgMTcuMy01LjUgMjIuMi05IDI0LTIwIDMzLjItNTQuOSA0NS40LTExOC4zIDguMi00OS43IDE3LTc4IDE4LjItODItMTYuOS0xMi43LTI3LjEtMjguNi00OS44LTM0LjctMTUuNi00LjItMjUuMS0uNi0zMS44IDcuOC03LjkgMTAtNS4zIDIzIDIuNCAzMC43bDEyLjYgMTRjMTUuNSAxNy45IDI0IDMxLjkgMjAuOCA1MC42LTUuMSAyOS45LTQwLjcgNTIuOS04Mi45IDM5LjktMzYtMTEuMS00Mi43LTM2LjYtMzguNC01MC42IDcuNS0yNC4yIDQyLjQtMTEuNyAzNC42IDEzLjYtMi44IDguNi00LjkgOC43LTYuMyAxMy4xLTQuNiAxNC44IDQxLjggMjguNCA1MS0xLjQgNC41LTE0LjUtNS4zLTIxLjctMjIuMi0zOS45LTI4LjUtMzEuNy0xNi02NS41IDIuOS03OS43IDUyLjgtMzkuNCAxMDAuNSAxNy41IDExMC42IDI1LjggMzcuMi0xMDkgMTAwLjUtMTA1LjUgMTAyLjQtMTA1LjUgMjUuMi0uOCA0NC4yIDEwLjYgNDQuOCAyOC42IC4yIDcuNy00LjIgMjIuNi0xOS41IDIzLjF6Il0KICAgIH07CiAgICBmYVNhbGVzZm9yY2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic2FsZXNmb3JjZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODNiIiwgIk0yNDkuNCAyNDUuNmwtMjYuNCAwYy43LTUuMiAzLjMtMTQuMSAxMy42LTE0LjEgNi44IDAgMTIgMy44IDEyLjcgMTQuMXpNMzg2IDIzMS44Yy0uNSAwLTE0LjEtMS44LTE0LjEgMjBzMTMuNiAyMCAxNC4xIDIwYzEzIDAgMTQuMS0xMy41IDE0LjEtMjAgMC0yMS44LTEzLjctMjAtMTQuMS0yMHpNMTQyLjggMjU1LjVjLTEuMSAuOS0yIDItMi41IDMuMnMtLjggMi43LS43IDRjMCA0LjggMi4xIDYuMSAzLjMgNyA0LjcgMy43IDE1LjEgMi4xIDIwLjkgMWwwLTE2LjljLTUuMy0xLjEtMTYuNy0yLTIwLjkgMS42ek02NDAuNSAyMzJjMCA4Ny42LTgwIDE1NC40LTE2NS40IDEzNi40LTE4LjQgMzMtNzAuNyA3MC44LTEzMi4yIDQxLjYtNDEuMiA5Ni0xNzcuOSA5Mi4yLTIxMy44LTUuMi0xMTkuNyAyMy45LTE3OC44LTEzOC40LTc1LjMtMTk5LjMtMzQuOC03OS40IDIyLjYtMTczLjYgMTE0LjMtMTczLjYgMTkuMSAwIDM3LjkgNC40IDU1IDEyLjlzMzIgMjAuNyA0My42IDM1LjhjMjAuNy0yMS40IDQ5LjQtMzQuOCA4MS4xLTM0LjggNDIuMyAwIDc5IDIzLjUgOTguOCA1OC42IDkyLjgtNDAuNyAxOTMuOCAyOC4yIDE5My44IDEyNy41ek0xMjAuOSAyNjMuOGMwLTExLjgtMTEuNy0xNS4yLTE3LjktMTcuMi01LjMtMi4xLTEzLjQtMy41LTEzLjQtOC45IDAtOS41IDE3LTYuNyAyNS4yLTIuMSAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy0xMi4zLTcuNi00MC43LTguNS00MC43IDEyLjcgMCAxMi41IDExLjUgMTUuNCAxNy45IDE3LjIgNC43IDEuNiAxMy4yIDMgMTMuMiA4LjcgMCA0LTMuNSA3LjEtOS4yIDcuMS02LjkgMC0xMy41LTIuMi0xOS02LjMtLjUtLjItMS40LS43LTEuNiAuN2wtMi40IDcuNWMtLjUgLjkgLjIgMS4yIC4yIDEuNCAxLjggMS40IDEwLjMgNi42IDIyLjggNi42IDEzLjIgMCAyMS40LTcuMSAyMS40LTE4LjFsMCAwem0zMi00Mi42Yy0xMC4xIDAtMTguNyAzLjItMjEuNCA1LjItLjEgLjEtLjIgLjItLjMgLjNzLS4xIC4yLS4xIC40IDAgLjMgMCAuNCAuMSAuMyAuMiAuNGwyLjYgNy4xYy4xIC4yIC4yIC41IC41IC42cy41IC4yIC43IC4xYy42IDAgNi44LTQgMTYuOS00IDQgMCA3LjEgLjcgOS4yIDIuNCAzLjYgMi44IDMuMSA4LjMgMy4xIDEwLjYtNC44LS4zLTE5LjEtMy40LTI5LjQgMy44LTIuMyAxLjYtNC4zIDMuOC01LjUgNi4zcy0xLjkgNS40LTEuOCA4LjJjMCA1LjkgMS41IDEwLjQgNi42IDE0LjQgMTIuMiA4LjIgMzYuMyAyIDM4LjEgMS40IDEuNi0uMyAzLjUtLjcgMy41LTEuOWwwLTMzLjljMC00LjYgLjMtMjEuNi0yMi44LTIxLjZsMCAuMXptNDYuNi0yMWMwLS4yIDAtLjMtLjEtLjVzLS4xLS4zLS4zLS40LS4yLS4yLS40LS4zLS4zLS4xLS41LS4xbC05LjggMGMtLjIgMC0uMyAwLS41IC4xcy0uMyAuMS0uNCAuMy0uMiAuMi0uMyAuNC0uMSAuMy0uMSAuNWwwIDc5YzAgLjIgMCAuMyAuMSAuNXMuMSAuMyAuMyAuNCAuMiAuMiAuNCAuMyAuMyAuMSAuNSAuMWw5LjkgMGMuMiAwIC4zIDAgLjUtLjFzLjMtLjEgLjQtLjMgLjItLjIgLjMtLjQgLjEtLjMgLjEtLjVsLS4xLTc5em01NS43IDI4LjljLTIuMS0yLjMtNi44LTcuNS0xNy42LTcuNS0zLjUgMC0xNC4yIC4yLTIwLjcgOC45LTYuNCA3LjYtNi42IDE4LjEtNi42IDIxLjQgMCAzLjEgLjIgMTQuMyA3LjEgMjEuMiAyLjYgMi45IDkuMSA4LjIgMjIuOCA4LjIgMTAuOCAwIDE2LjUtMi4zIDE4LjYtMy44IC41LS4yIC43LS43IC4yLTEuOWwtMi4zLTYuOGMtLjEtLjMtLjMtLjUtLjYtLjZzLS41LS4yLS44LS4xYy0yLjYgLjktNi4zIDIuOC0xNS4zIDIuOC0xNy40IDAtMTYuOC0xNC43LTE2LjktMTYuN2wzNy4yIDBjLjMgMCAuNS0uMSAuNy0uM3MuNC0uNCAuNC0uN2MtLjMgMCAyLjEtMTQuNy02LjEtMjQuMmwwIDB6bTM2LjcgNTIuN2MxMy4yIDAgMjEuNC03LjEgMjEuNC0xOC4xIDAtMTEuOC0xMS43LTE1LjItMTcuOS0xNy4yLTQuMS0xLjctMTMuNC0zLjQtMTMuNC04LjkgMC0zLjggMy4zLTYuNCA4LjUtNi40IDUuOCAuMSAxMS41IDEuNiAxNi43IDQuMiAwIDAgMS4yIC43IDEuNi0uNSAuMi0uNyAyLjQtNi42IDIuNi03LjMgLjEtLjMgLjEtLjYtLjEtLjhzLS40LS41LS42LS42Yy03LjktNC45LTE2LjctNC45LTIwLjItNC45LTEyIDAtMjAuNSA3LjMtMjAuNSAxNy42IDAgMTIuNSAxMS41IDE1LjQgMTcuOSAxNy4yIDYuMSAyIDEzLjIgMy4zIDEzLjIgOC43IDAgNC0zLjUgNy4xLTkuMiA3LjEtNi45IDAtMTMuNS0yLjItMTktNi40LS4xLS4xLS4zLS4yLS41LS4ycy0uNCAwLS41IC4xLS4zIC4yLS40IC4zLS4yIC4zLS4yIC41bC0yLjMgNy41Yy0uNSAuOSAuMiAxLjIgLjIgMS40IDEuNyAxLjQgMTAuMyA2LjYgMjIuOCA2LjZsMCAwek0zNTcuNiAyMjRjMC0uNy0uMi0xLjItMS4yLTEuMmwtMTEuOCAwYzAtLjEgLjktOC45IDQuNS0xMi41IDQuMi00LjIgMTEuOC0xLjYgMTItMS42IDEuMiAuNSAxLjQgMCAxLjYtLjVsMi44LTcuOGMuNy0uOSAwLTEuMi0uMi0xLjQtNS4xLTItMTcuNC0yLjktMjQuNSA0LjItNS41IDUuNS03IDEzLjktOCAxOS41bC04LjUgMGMtLjMgMC0uNiAuMi0uOCAuNHMtLjMgLjUtLjQgLjhsLTEuNCA3LjhjMCAuNyAuMiAxLjIgMS4yIDEuMmw4LjIgMGMtOC41IDQ3LjktOC43IDUwLjItMTAuMyA1NS41LTEuMSAzLjYtMy4zIDYuOS01LjkgNy44LS4xIDAtMy45IDEuNy05LjYtLjIgMCAwLS45LS41LTEuNCAuNy0uMiAuNy0yLjYgNi44LTIuOCA3LjVzMCAxLjQgLjUgMS40YzUuMSAyIDEzIDEuOCAxNy45IDAgNi4zLTIuMyA5LjctNy45IDExLjUtMTIuOSAyLjgtNy43IDIuOC05LjggMTEuOC01OS43bDEyLjIgMGMuMyAwIC42LS4yIC44LS40cy4zLS41IC40LS44bDEuNC03Ljh6TTQxMSAyNDBjLS42LTEuNy01LjEtMTguMS0yNS4yLTE4LjEtMTUuMiAwLTIzIDEwLTI1LjIgMTguMS0xIDMtMy4yIDE0IDAgMjMuNSAuMSAuMyA0LjQgMTguMSAyNS4yIDE4LjEgMTUgMCAyMi45LTkuNiAyNS4yLTE4LjEgMy4yLTkuNiAxLTIwLjUgMC0yMy41em00NS40LTE2LjdjLTUtMS43LTE2LjYtMS45LTIyLjEgNS40bDAtNC41YzAtLjIgMC0uMy0uMS0uNXMtLjEtLjMtLjMtLjQtLjItLjItLjQtLjMtLjMtLjEtLjUtLjFsLTkuNCAwYy0uMiAwLS4zIDAtLjUgLjFzLS4zIC4xLS40IC4zLS4yIC4yLS4zIC40LS4xIC4zLS4xIC41bDAgNTUuM2MwIC4yIDAgLjMgLjEgLjVzLjEgLjMgLjMgLjQgLjIgLjIgLjQgLjMgLjMgLjEgLjUgLjFsOS42IDBjLjIgMCAuMyAwIC41LS4xcy4zLS4xIC40LS4zIC4yLS4yIC4zLS40IC4xLS4zIC4xLS41bDAtMjcuOGMwLTIuOSAuMS0xMS40IDQuNS0xNS4xIDQuOS00LjkgMTItMy40IDEzLjQtMy4xIC4zIDAgLjYtLjEgLjgtLjNzLjQtLjQgLjYtLjdjMS4yLTIuNiAyLjItNS4zIDMuMS04IC4xLS4zIC4xLS41IDAtLjhzLS4zLS41LS41LS42bDAgMHptNDYuOCA1NC4xbC0yLjEtNy4zYy0uNS0xLjItMS40LS43LTEuNC0uNy00LjIgMS44LTEwLjEgMS45LTExLjMgMS45LTQuNiAwLTE3LjItMS4xLTE3LjItMTkuOCAwLTYuMiAxLjgtMTkuOCAxNi41LTE5LjggMy45LS4xIDcuOCAuNSAxMS41IDEuNiAwIDAgLjkgLjUgMS4yLS43IC45LTIuNiAxLjYtNC41IDIuNi03LjUgLjItLjktLjUtMS4yLS43LTEuMi0xMS42LTMuOS0yMi4zLTIuNS0yNy44IDAtMS42IC43LTE2LjIgNi41LTE2LjIgMjcuNSAwIDIuOS0uNiAzMC4xIDI4LjkgMzAuMSA1LjMgMCAxMC42LTEgMTUuNS0yLjggLjItLjIgLjQtLjQgLjUtLjZzLjEtLjUgMC0uOGwwIDB6bTUzLjktMzkuNWMtLjgtMy01LjQtMTYuMi0yMi4zLTE2LjItMTYgMC0yMy41IDEwLjEtMjUuNiAxOC42LTEuMiAzLjgtMS43IDcuOC0xLjcgMTEuOCAwIDI1LjkgMTguOCAyOS40IDI5LjkgMjkuNCAxMC44IDAgMTYuNS0yLjMgMTguNi0zLjggLjUtLjIgLjctLjcgLjItMS45bC0yLjQtNi44Yy0uMS0uMy0uMy0uNS0uNi0uNnMtLjYtLjItLjgtLjFjLTIuNiAuOS02LjMgMi44LTE1LjMgMi44LTE3LjQgMC0xNi45LTE0LjctMTYuOS0xNi43bDM3LjIgMGMuMyAwIC41LS4xIC43LS4zcy40LS40IC40LS43Yy0uMiAwIC45LTcuMS0xLjQtMTUuNWwwIDB6bS0yMy4zLTYuNGMtMTAuMyAwLTEzIDktMTMuNiAxNC4xbDI2LjQgMGMtLjktMTEuOS03LjYtMTQuMS0xMi43LTE0LjFsMCAweiJdCiAgICB9OwogICAgZmFTb3VyY2V0cmVlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNvdXJjZXRyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdkMyIsICJNNDI3LjQgMjAzYzAtMTEyLjEtOTAuOS0yMDMtMjAzLTIwMy0xMTIuMS0uMi0yMDMgOTAuNi0yMDMuMiAyMDIuNi0uMSA0MyAxMy41IDg0LjggMzguNyAxMTkuNnM2MC45IDYwLjYgMTAxLjggNzMuOGwwIDEwMS43YzAgMy44IDEuNSA3LjQgNC4yIDEwLjFzNi4zIDQuMiAxMC4xIDQuMmw5Ni40IDBjMy44IDAgNy40LTEuNSAxMC4xLTQuMnM0LjItNi4zIDQuMi0xMC4xbDAtMTAxLjZjNDAuOC0xMy4yIDc2LjUtMzkgMTAxLjctNzMuN3MzOC45LTc2LjUgMzktMTE5LjR6bS0yNzEuNiAwYzAtOTAuOCAxMzcuMy05MC44IDEzNy4zIDAtLjEgODkuOS0xMzcuMyA5MS0xMzcuMyAweiJdCiAgICB9OwogICAgZmFMaW5rZWRpbkluID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbmtlZGluLWluIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwZTEiLCAiTTEwMC4zIDQ0OGwtOTIuOSAwIDAtMjk5LjEgOTIuOSAwIDAgMjk5LjF6TTUzLjggMTA4LjFDMjQuMSAxMDguMSAwIDgzLjUgMCA1My44IDAgMzkuNSA1LjcgMjUuOSAxNS44IDE1LjhzMjMuOC0xNS44IDM4LTE1LjggMjcuOSA1LjcgMzggMTUuOCAxNS44IDIzLjggMTUuOCAzOGMwIDI5LjctMjQuMSA1NC4zLTUzLjggNTQuM3pNNDQ3LjkgNDQ4bC05Mi43IDAgMC0xNDUuNmMwLTM0LjctLjctNzkuMi00OC4zLTc5LjItNDguMyAwLTU1LjcgMzcuNy01NS43IDc2LjdsMCAxNDguMS05Mi44IDAgMC0yOTkuMSA4OS4xIDAgMCA0MC44IDEuMyAwYzEyLjQtMjMuNSA0Mi43LTQ4LjMgODcuOS00OC4zIDk0IDAgMTExLjMgNjEuOSAxMTEuMyAxNDIuM2wwIDE2NC4zLS4xIDB6Il0KICAgIH07CiAgICBmYUh0bWw1ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImh0bWw1IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxM2IiLCAiTTAgMzJMMzQuOSA0MjcuOCAxOTEuNSA0ODAgMzQ5LjEgNDI3LjggMzg0IDMyIDAgMzJ6TTMwOC4yIDE1OS45bC0xODMuOCAwIDQuMSA0OS40IDE3NS42IDAtMTMuNiAxNDguNC05Ny45IDI3IDAgLjMtMS4xIDAtOTguNy0yNy4zLTYtNzUuOCA0Ny43IDAgMy41IDM4LjEgNTMuNSAxNC41IDUzLjctMTQuNSA2LTYyLjItMTY2LjkgMC0xMi44LTE0NS42IDI0MS4xIDAtNC40IDQ3Ljd6Il0KICAgIH07CiAgICBmYVJ1c3QgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicnVzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDdhIiwgIk01MDguNSAyNDkuOGwtMjEuOC0xMy41Yy0uMi0yLS4zLTMuOS0uNS01LjlsMTguNy0xNy41Yy45LS45IDEuNi0xLjkgMi0zLjFzLjUtMi41IC4yLTMuNy0uOC0yLjQtMS42LTMuMy0xLjgtMS43LTMtMi4xbC0yNC05Yy0uNS0xLjktMS4xLTMuOC0xLjctNS42bDE1LTIwLjhjLjctMSAxLjItMi4yIDEuMy0zLjRzMC0yLjUtLjUtMy43LTEuMi0yLjItMi4yLTIuOS0yLjEtMS4zLTMuNC0xLjVsLTI1LjQtNC4yYy0uOS0xLjctMS44LTMuNC0yLjctNS4ybDEwLjctMjMuNGMuNS0xLjEgLjctMi40IC42LTMuNnMtLjUtMi40LTEuMi0zLjUtMS42LTEuOS0yLjgtMi41LTIuNC0uOC0zLjYtLjhsLTI1LjggLjljLTEuMi0xLjUtMi40LTIuOS0zLjYtNC40TDQzOSA4MS44Yy4zLTEuMiAuMy0yLjUtLjEtMy43cy0xLTIuMy0xLjktMy4yLTItMS41LTMuMi0xLjktMi41LS40LTMuNy0uMUw0MDUgNzguOWMtMS40LTEuMi0yLjktMi40LTQuNC0zLjZsLjktMjUuOGMuMS0xLjMtLjItMi41LS44LTMuNnMtMS40LTIuMS0yLjUtMi44LTIuMi0xLjEtMy41LTEuMi0yLjUgLjEtMy43IC42TDM2Ny43IDUzLjJjLTEuNy0uOS0zLjQtMS44LTUuMS0yLjdsLTQuMi0yNS40Yy0uMi0xLjItLjctMi40LTEuNS0zLjRzLTEuOC0xLjctMi45LTIuMi0yLjQtLjctMy43LS41LTIuNCAuNi0zLjQgMS4zTDMyNiAzNS4zYy0xLjktLjYtMy44LTEuMS01LjYtMS43bC05LTI0Yy0uNC0xLjItMS4yLTIuMi0yLjEtM3MtMi4xLTEuNC0zLjMtMS42LTIuNS0uMi0zLjcgLjItMi4zIDEuMS0zLjEgMkwyODEuNiAyNS45Yy0yLS4yLTMuOS0uNC01LjktLjVMMjYyLjMgMy41Yy0uNy0xLjEtMS42LTEuOS0yLjctMi42cy0yLjMtLjktMy42LS45LTIuNSAuMy0zLjYgLjktMiAxLjUtMi43IDIuNkwyMzYuMiAyNS4zYy0yIC4yLTMuOSAuMy01LjkgLjZMMjEyLjkgNy4xYy0uOS0uOS0xLjktMS42LTMuMS0ycy0yLjUtLjUtMy43LS4yLTIuNCAuOC0zLjMgMS42LTEuNyAxLjgtMi4xIDNsLTkgMjRjLTEuOSAuNi0zLjggMS4xLTUuNyAxLjdsLTIwLjgtMTVjLTEtLjctMi4yLTEuMi0zLjQtMS4zcy0yLjUgMC0zLjcgLjUtMi4yIDEuMi0yLjkgMi4yLTEuMyAyLjEtMS41IDMuNGwtNC4yIDI1LjRjLTEuNyAuOS0zLjQgMS44LTUuMiAyLjdMMTIwLjkgNDIuNmMtMS4xLS41LTIuNC0uNy0zLjctLjZzLTIuNSAuNS0zLjUgMS4yLTEuOSAxLjctMi41IDIuOC0uOCAyLjQtLjggMy42bC45IDI1LjhjLTEuNSAxLjItMyAyLjQtNC40IDMuNkw4MS44IDczYy0xLjItLjMtMi41LS4zLTMuNyAuMXMtMi4zIDEtMy4yIDEuOS0xLjUgMi0xLjkgMy4yLS40IDIuNS0uMSAzLjdMNzguOSAxMDdjLTEuMiAxLjQtMi40IDIuOS0zLjYgNC40bC0yNS44LS45Yy0xLjMgMC0yLjUgLjItMy42IC44cy0yLjEgMS40LTIuOCAyLjQtMS4xIDIuMi0xLjIgMy41IC4xIDIuNSAuNiAzLjZsMTAuNyAyMy40Yy0uOSAxLjctMS44IDMuNC0yLjcgNS4ybC0yNS40IDQuMWMtMS4yIC4yLTIuNCAuNy0zLjQgMS41cy0xLjcgMS44LTIuMiAyLjktLjcgMi40LS41IDMuNyAuNiAyLjQgMS4zIDMuNGwxNSAyMC44Yy0uNiAxLjktMS4xIDMuOC0xLjcgNS43bC0yNCA5Yy0xLjIgLjQtMi4yIDEuMi0zIDIuMXMtMS40IDIuMS0xLjYgMy4zLS4yIDIuNSAuMiAzLjcgMS4xIDIuMyAyIDMuMWwxOC43IDE3LjVjLS4yIDItLjQgMy45LS42IDUuOUwzLjUgMjQ5LjhjLTEuMSAuNy0xLjkgMS42LTIuNiAyLjdzLS45IDIuMy0uOSAzLjYgLjMgMi41IC45IDMuNiAxLjUgMiAyLjYgMi43bDIxLjggMTMuNWMuMiAyIC4zIDMuOSAuNiA1LjlMNy4xIDI5OS4xYy0uOSAuOS0xLjYgMS45LTIgMy4xcy0uNSAyLjUtLjIgMy43IC44IDIuNCAxLjYgMy4zIDEuOCAxLjcgMyAyLjFsMjQgOWMuNiAxLjkgMS4xIDMuOCAxLjcgNS42bC0xNSAyMC44Yy0uNyAxLTEuMiAyLjItMS4zIDMuNHMwIDIuNSAuNSAzLjcgMS4yIDIuMiAyLjIgMi45IDIuMSAxLjMgMy40IDEuNWwyNS40IDQuMmMuOSAxLjcgMS44IDMuNCAyLjcgNS4xTDQyLjYgMzkxLjFjLS41IDEuMS0uNyAyLjQtLjYgMy42cy41IDIuNSAxLjIgMy41Yy43IDEuMSAxLjYgMS45IDIuNyAyLjVzMi40IC44IDMuNiAuOGwyNS44LS45YzEuMiAxLjUgMi40IDIuOSAzLjYgNC40TDczIDQzMC4yYy0uMyAxLjItLjMgMi41IC4xIDMuN3MxIDIuMyAxLjkgMy4yIDIgMS41IDMuMiAxLjkgMi41IC40IDMuNyAuMWwyNS4yLTUuOWMxLjUgMS4yIDIuOSAyLjQgNC40IDMuNmwtLjkgMjUuOGMwIDEuMyAuMiAyLjUgLjggMy42czEuNCAyLjEgMi41IDIuOCAyLjIgMS4xIDMuNSAxLjIgMi41LS4xIDMuNi0uNmwyMy40LTEwLjdjMS43IC45IDMuNCAxLjggNS4xIDIuN2w0LjIgMjUuNGMuMiAxLjIgLjcgMi40IDEuNSAzLjRzMS44IDEuOCAyLjkgMi4yIDIuNCAuNyAzLjcgLjUgMi40LS42IDMuNC0xLjNsMjAuOC0xNWMxLjkgLjYgMy44IDEuMSA1LjYgMS43bDkgMjRjLjQgMS4yIDEuMiAyLjIgMi4xIDNzMi4xIDEuNCAzLjMgMS42IDIuNSAuMiAzLjctLjIgMi4zLTEuMSAzLjEtMmwxNy41LTE4LjdjMiAuMiAzLjkgLjQgNS45IC42bDEzLjUgMjEuOGMuNyAxLjEgMS42IDEuOSAyLjcgMi42czIuMyAuOSAzLjYgLjkgMi41LS4zIDMuNi0uOSAyLTEuNSAyLjctMi42bDEzLjUtMjEuOGMyLS4yIDMuOS0uMyA1LjktLjZsMTcuNSAxOC43Yy45IC45IDEuOSAxLjYgMy4xIDJzMi41IC41IDMuNyAuMiAyLjQtLjggMy4zLTEuNiAxLjctMS44IDIuMS0zbDktMjRjMS45LS42IDMuOC0xLjEgNS42LTEuN2wyMC44IDE1YzEgLjcgMi4yIDEuMiAzLjQgMS4zczIuNSAwIDMuNy0uNSAyLjItMS4yIDIuOS0yLjIgMS4zLTIuMSAxLjUtMy40bDQuMi0yNS40YzEuNy0uOSAzLjQtMS44IDUuMS0yLjdsMjMuNCAxMC43YzEuMSAuNSAyLjQgLjcgMy42IC42czIuNC0uNSAzLjUtMS4yIDEuOS0xLjYgMi41LTIuOCAuOC0yLjQgLjgtMy42bC0uOS0yNS44YzEuNS0xLjIgMi45LTIuNCA0LjQtMy42bDI1LjIgNS45YzEuMiAuMyAyLjUgLjMgMy43LS4xczIuMy0xIDMuMi0xLjkgMS41LTIgMS45LTMuMiAuNC0yLjUgLjEtMy43TDQzMy4xIDQwNWMxLjItMS40IDIuNC0yLjkgMy42LTQuNGwyNS44IC45YzEuMyAuMSAyLjUtLjIgMy42LS44czIuMS0xLjQgMi44LTIuNWMuNy0xIDEuMS0yLjIgMS4yLTMuNXMtLjEtMi41LS42LTMuNmwtMTAuNy0yMy40Yy45LTEuNyAxLjgtMy40IDIuNy01LjFsMjUuNC00LjJjMS4yLS4yIDIuNC0uNyAzLjQtMS41czEuOC0xLjggMi4yLTIuOSAuNy0yLjQgLjUtMy43LS42LTIuNC0xLjMtMy40bC0xNS0yMC44Yy42LTEuOSAxLjEtMy44IDEuNy01LjZsMjQtOWMxLjItLjQgMi4yLTEuMiAzLTIuMXMxLjQtMi4xIDEuNi0zLjMgLjItMi41LS4yLTMuNy0xLjEtMi4zLTItMy4xbC0xOC43LTE3LjVjLjItMS45IC40LTMuOSAuNi01LjlsMjEuOC0xMy41YzEuMS0uNyAxLjktMS42IDIuNi0yLjdzLjktMi4zIC45LTMuNi0uMy0yLjUtLjktMy42LTEuNS0yLTIuNi0yLjdsMCAwem0tMTUxIDEyOS4xYy0zLjYtLjgtNy40LS4xLTEwLjUgMS45cy01LjMgNS4yLTYgOC44bC03LjYgMzUuN2MtMjQuNiAxMS4xLTUxLjMgMTYuOC03OC4zIDE2LjdzLTUzLjYtNi4xLTc4LjEtMTcuNGwtNy42LTM1LjdjLS40LTEuOC0xLjEtMy41LTIuMS01cy0yLjQtMi44LTMuOS0zLjgtMy4yLTEuNy01LTItMy42LS4zLTUuNCAuMWwtMzEuNSA2LjhjLTUuOC02LTExLjMtMTIuNS0xNi4zLTE5LjJsMTUzLjIgMGMxLjcgMCAyLjktLjMgMi45LTEuOWwwLTU0LjJjMC0xLjYtMS4yLTEuOS0yLjktMS45bC00NC44IDAgMC0zNC40IDQ4LjUgMGM0LjQgMCAyMy43IDEuMyAyOS44IDI1LjkgMS45IDcuNSA2LjIgMzIuMSA5LjEgNDAgMi45IDguOCAxNC42IDI2LjUgMjcuMSAyNi41bDc5IDBjLTUuMyA3LjEtMTEuMSAxMy44LTE3LjMgMjAuMWwtMzIuMS02Ljl6bTI1LjggMzQuNWMwIDMtLjkgNi0yLjYgOC41cy00IDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjgtOC44IDMuMS01LjIgNS42LTYuOSA1LjQtMi42IDguNS0yLjZsLjQgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwem0tMjI1LjYtLjdjMCAzLS45IDYtMi42IDguNXMtNC4xIDQuNS02LjggNS42LTUuOCAxLjUtOC44IC45LTUuNy0yLTcuOC00LjItMy42LTQuOC00LjItNy44LS4zLTYgLjktOC44IDMuMS01LjIgNS42LTYuOCA1LjQtMi42IDguNS0yLjZsLjUgMGM0IC4xIDcuNyAxLjggMTAuNSA0LjZzNC4zIDYuNyA0LjMgMTAuNmwuMSAwek02OS42IDIzNC4ybDMyLjgtMTQuNmMxLjctLjcgMy4yLTEuOCA0LjQtMy4xczIuMi0yLjkgMi45LTQuNiAxLTMuNSAuOS01LjMtLjUtMy42LTEuMi01LjNsLTYuOC0xNS4yIDI2LjYgMCAwIDExOS43LTUzLjYgMGMtNi42LTIzLjItOC43LTQ3LjYtNi4xLTcxLjZ6TTU4LjMgMTk4LjFjMC0yIC40LTQgMS4yLTUuOHMxLjktMy41IDMuMy00LjkgMy4xLTIuNSA0LjktMy4zIDMuOC0xLjIgNS44LTEuMmwuNSAwYzMgLjEgNS45IDEgOC4zIDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQuMS02IC4yLTguNy0uOS01LjEtMy4xLTYuOC01LjYtMi41LTUuNC0yLjUtOC40bDAgMHptMTU1LjIgMjQuNWwwLTM1LjMgNjMuMyAwYzMuMyAwIDIzLjEgMy44IDIzLjEgMTguNiAwIDEyLjMtMTUuMiAxNi43LTI3LjcgMTYuN2wtNTguNyAwek0zOTkgMzA2LjdjLTkuOCAxLjEtMjAuNi00LjEtMjItMTAuMS01LjgtMzIuNS0xNS40LTM5LjQtMzAuNi01MS40IDE4LjktMTIgMzguNS0yOS42IDM4LjUtNTMuMyAwLTI1LjUtMTcuNS00MS42LTI5LjQtNDkuNS0xNi44LTExLTM1LjMtMTMuMi00MC4zLTEzLjJsLTE5OC45IDBjMjcuNS0zMC43IDY0LjQtNTEuNSAxMDQuOS01OS4ybDIzLjUgMjQuNmMxLjMgMS4zIDIuOCAyLjQgNC40IDMuMXMzLjUgMS4xIDUuMyAxLjIgMy42LS4zIDUuMy0uOSAzLjItMS43IDQuNi0yLjlsMjYuMy0yNWMyNi44IDUgNTIuMSAxNS44IDc0LjMgMzEuNnM0MC42IDM2LjIgNTQuMSA1OS45bC0xOCA0MC42Yy0xLjUgMy40LTEuNSA3LjItLjIgMTAuNnMzLjkgNi4yIDcuMyA3LjdsMzQuNiAxNS4zYzEuMSAxMC44IDEuMiAyMS43IC40IDMyLjVsLTE5LjMgMGMtMS45IDAtMi43IDEuMy0yLjcgMy4xbDAgOC44YzAgMjAuOC0xMS43IDI1LjMtMjIgMjYuNXpNMjQwIDYwLjJjMC00IDEuNi03LjkgNC41LTEwLjdzNi43LTQuNSAxMC43LTQuNWwuNCAwYzMgLjEgNS45IDEgOC40IDIuOHM0LjMgNC4xIDUuNCA2LjkgMS4zIDUuOCAuNyA4LjgtMi4xIDUuNi00LjMgNy43LTQuOSAzLjUtNy44IDQtNiAuMi04LjctLjktNS4xLTMuMS02LjgtNS42LTIuNS01LjQtMi41LTguNHpNNDM2LjggMjE0Yy0yIDAtNC0uNC01LjgtMS4ycy0zLjUtMS45LTQuOS0zLjMtMi41LTMuMS0zLjMtNC45LTEuMi0zLjgtMS4yLTUuOCAuNC00IDEuMi01LjggMS45LTMuNSAzLjMtNC45IDMuMS0yLjUgNC45LTMuMyAzLjgtMS4yIDUuOC0xLjJsLjQgMGM0IC4xIDcuOSAxLjcgMTAuNyA0LjZzNC40IDYuOCA0LjMgMTAuOC0xLjcgNy45LTQuNiAxMC43LTYuOCA0LjQtMTAuOCA0LjN6Il0KICAgIH07CiAgICBmYUhvcm5iaWxsID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImhvcm5iaWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1OTIiLCAiTTc2LjggMzcwLjNjMSA3LjgtLjQgMTUuOC00LjEgMjIuOHMtOS42IDEyLjYtMTYuNyAxNi4xLTE1LjEgNC43LTIyLjkgMy4zLTE1LTUuMS0yMC42LTEwLjctOS4yLTEyLjktMTAuNS0yMC43IDAtMTUuOCAzLjYtMjIuOSA5LjMtMTIuOCAxNi4zLTE2LjUgMTUtNSAyMi45LTMuOWMtNzguMy0xMTEuMyA1Mi0xOTAuNSA1Mi0xOTAuNS01LjkgNDMtOC4yIDkxLjItOC4yIDkxLjItNjcuMyA0MS41IC45IDY0LjEgMzkuOCA3Mi45IDkuOSAyNyAyNy44IDUwLjIgNTEuNCA2Ni43czUxLjYgMjUuMyA4MC4zIDI1LjNjMS45IDAgMy44LS4yIDUuNy0uM2wuMSAxOC45Yy05OS4yIDEuNC0xNTguNy0yOS4xLTE4OC45LTUxLjZ6bTEwOC0zMjcuN2MuOS03LjItLjItMTQuNi0zLjQtMjEuMi0zLTYuMi03LjYtMTEuNS0xMy40LTE1LjNzLTEyLjUtNS45LTE5LjQtNi4yLTEzLjggMS40LTE5LjggNC43LTExLjEgOC4zLTE0LjUgMTQuMy01LjIgMTIuOC01IDE5LjcgMi4yIDEzLjcgNS45IDE5LjUgOC45IDEwLjYgMTUuMSAxMy42IDEzLjEgNC40IDIwIDMuOWMtMjIuNiAyOS45LTUzLjggODkuNi01Mi40IDE5MGwyMS44LS4yYzAtLjktLjEtMS44LS4xLTIuNyAwLTI4IDguNC01NS4zIDI0LjEtNzguNXMzNy45LTQxLjIgNjMuOC01MS42YzgtMzcuNyAzMC43LTExNC4zIDczLjgtNDQuMyAwIDAgNDguMSAyLjQgOTEuMiA4LjIgMCAwLTc3LjgtMTI4LTE4Ny42LTU0LjFsMCAwek00ODkgMTc2LjhjNi4zLTMgMTEuNy03LjcgMTUuNS0xMy42czUuOS0xMi43IDYuMS0xOS44LTEuNi0xNC01LjItMjAtOC43LTExLTE0LjktMTQuMy0xMy4yLTQuOC0yMC4yLTQuNC0xMy44IDIuOC0xOS41IDYuOS0xMC4yIDkuNi0xMyAxNi4xLTMuNyAxMy42LTIuNyAyMC41Yy0zMS43LTIxLjktODkuOC00OS4xLTE4My40LTQ3LjdsLjEgMjIuNWMyLjctLjIgNS40LS40IDguMS0uNCAyOC4xIDAgNTUuNiA4LjUgNzguOSAyNC4zczQxLjIgMzguMyA1MS42IDY0LjVjMzkuMSA5IDEwNS4xIDMxLjYgMzguNSA3Mi41IDAgMC0yLjMgNDguMS04LjIgOTEuMiAwIDAgMTMzLjQtODEuMiA0OS0xOTQuNiA2LjYgLjYgMTMuMy0uNiAxOS4zLTMuNWwwIDB6TTM3NC40IDQzNi4yYzIxLjQtMzIuNSA0Ni40LTg5LjcgNDUuMS0xNzkuN2wtMTkuNSAuMWMuMSAyLjEgLjMgNC4xIC4zIDYuMiAwIDI4LjYtOC44IDU2LjUtMjUuMSA4MHMtMzkuNSA0MS40LTY2LjMgNTEuNGMtOC45IDM5LTMxLjQgMTA2LjctNzIuOCAzOS41IDAgMC00OC4xLTIuMy05MS4yLTguMiAwIDAgNzkuOSAxMzEuMyAxOTEuOSA1MSAuMyA0LjkgMS41IDkuNiAzLjYgMTQgMi45IDYuMSA3LjUgMTEuNCAxMy4xIDE1LjFzMTIuMiA2IDE5IDYuNCAxMy42LTEuMSAxOS42LTQuMiAxMS4xLTcuOCAxNC43LTEzLjYgNS42LTEyLjQgNS43LTE5LjItMS41LTEzLjUtNC44LTE5LjQtOC4yLTEwLjktMTQuMS0xNC4zLTEyLjYtNS4yLTE5LjQtNS4xbDAtLjF6Il0KICAgIH07CiAgICBmYVBocCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwaHAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjQ1NyIsICJNMzIwIDEwNC41YzE3MS40IDAgMzAzLjIgNzIuMiAzMDMuMiAxNTEuNVM0OTEuMyA0MDcuNSAzMjAgNDA3LjVDMTQ4LjYgNDA3LjUgMTYuOCAzMzUuMyAxNi44IDI1NlMxNDguNyAxMDQuNSAzMjAgMTA0LjV6bTAtMTYuOEMxNDMuMyA4Ny43IDAgMTYzIDAgMjU2UzE0My4zIDQyNC4zIDMyMCA0MjQuMyA2NDAgMzQ5IDY0MCAyNTYgNDk2LjcgODcuNyAzMjAgODcuN3pNMjE4LjIgMjQyLjVjLTcuOSA0MC41LTM1LjggMzYuMy03MC4xIDM2LjNsMTMuNy03MC42YzM4IDAgNjMuOC00LjEgNTYuNCAzNC4zek05Ny40IDM1MC4zbDM2LjcgMCA4LjctNDQuOGM0MS4xIDAgNjYuNiAzIDkwLjItMTkuMSAyNi4xLTI0IDMyLjktNjYuNyAxNC4zLTg4LjEtOS43LTExLjItMjUuMy0xNi43LTQ2LjUtMTYuN2wtNzAuNyAwLTMyLjcgMTY4Ljd6TTI4My4xIDEzNi43bDM2LjUgMC04LjcgNDQuOGMzMS41IDAgNjAuNy0yLjMgNzQuOCAxMC43IDE0LjggMTMuNiA3LjcgMzEtOC4zIDExMy4xbC0zNyAwYzE1LjQtNzkuNCAxOC4zLTg2IDEyLjctOTItNS40LTUuOC0xNy43LTQuNi00Ny40LTQuNmwtMTguOCA5Ni42LTM2LjUgMCAzMi43LTE2OC42ek01MDUgMjQyLjVjLTggNDEuMS0zNi43IDM2LjMtNzAuMSAzNi4zbDEzLjctNzAuNmMzOC4yIDAgNjMuOC00LjEgNTYuNCAzNC4zek0zODQuMiAzNTAuM2wzNi44IDAgOC43LTQ0LjhjNDMuMiAwIDY3LjEgMi41IDkwLjItMTkuMSAyNi4xLTI0IDMyLjktNjYuNyAxNC4zLTg4LjEtOS43LTExLjItMjUuMy0xNi43LTQ2LjUtMTYuN2wtNzAuNyAwLTMyLjggMTY4Ljd6Il0KICAgIH07CiAgICBmYURpc3F1cyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNxdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTdkNSIsICJNMjkwLjIgNTEyYy02Mi42IDAtMTE5LjktMjIuOS0xNjQuMi02MC44TDE3IDQ2Ni4xIDU5LjEgMzYyLjJjLTE0LjctMzIuNC0yMi45LTY4LjMtMjIuOS0xMDYuMiAwLTE0MS40IDExMy43LTI1NiAyNTQtMjU2IDE0MC4zIDAgMjU0IDExNC42IDI1NCAyNTYgMCAxNDEuNC0xMTMuNyAyNTYtMjU0IDI1NnpNNDI4LjkgMjU1LjNsMC0uN0M0MjguOSAxODAuNyAzNzYuOCAxMjggMjg3IDEyOGwtOTcgMCAwIDI1NiA5NS42IDBjOTAuNSAwIDE0My40LTU0LjkgMTQzLjQtMTI4Ljd6TTI4OCAzMjEuMWwtMjguNCAwIDAtMTMwLjIgMjguNCAwYzQxLjcgMCA2OS4zIDIzLjggNjkuMyA2NC43bDAgLjdjMCA0MS4zLTI3LjcgNjQuNy02OS4zIDY0Ljd6Il0KICAgIH07CiAgICBmYTUwMHB4ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIjUwMHB4IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYyNmUiLCAiTTcxLjggMzQ0LjNjLTYuNS0xNC4yLTYuOS0xOC4zIDcuNC0yMy4xIDI1LjYtOCA4IDkuMiA0My4yIDQ5LjJsLjMgMCAwLTkzLjljMS4yLTUwLjIgNDQtOTIuMiA5Ny43LTkyLjIgNTMuOSAwIDk3LjcgNDMuNSA5Ny43IDk2LjggMCA2My40LTYwLjggMTEzLjItMTI4LjUgOTMuMy0xMC41LTQuMi0yLjEtMzEuNyA4LjUtMjguNiA1MyAwIDg5LjQtMTAuMSA4OS40LTY0LjQgMC02MS03Ny4xLTg5LjYtMTE2LjktNDQuNi0yMy41IDI2LjQtMTcuNiA0Mi4xLTE3LjYgMTU3LjYgNTAuNyAzMSAxMTguMyAyMiAxNjAuNC0yMC4xIDI0LjgtMjQuOCAzOC41LTU4IDM4LjUtOTMgMC0zNS4yLTEzLjgtNjguMi0zOC44LTkzLjMtMjQuOC0yNC44LTU3LjgtMzguNS05My4zLTM4LjVTMTUxIDE2My4zIDEyNi4zIDE4OGMtLjMgLjMtMTYgMTYuNS0yMS4yIDIzLjlsLS41IC42Yy0zLjMgNC43LTYuMyA5LjEtMjAuMSA2LjEtNi45LTEuNy0xNC4zLTUuOC0xNC4zLTExLjhMNzAuMiAyMGMwLTUgMy45LTEwLjUgMTAuNS0xMC41TDMyMiA5LjVjOC4zIDAgOC4zIDExLjYgOC4zIDE1LjEgMCAzLjkgMCAxNS4xLTguMyAxNS4xbC0yMjMuMiAwIDAgMTMyLjkgLjMgMGMxMDQuMi0xMDkuOCAyODIuOC0zNiAyODIuOCAxMDguOSAwIDE3OC4xLTI0NC44IDIyMC4zLTMxMC4xIDYyLjh6TTEzNS4xIDgzLjVjLS41IDQuMiA0LjYgMjQuNSAxNC42IDIwLjYgMTI0LjgtNDcuNSAyMDIuOCA0MC40IDIwOS40IDQwLjQgNC44IDAgMjIuOC0xNS4zIDE0LjMtMjIuOC05My4yLTg5LTIzNC41LTU3LTIzOC4zLTM4LjJ6TTM2MS41IDQxNC43Yy0xMTAgMTA5LjktMjk5IDYwLjgtMzMyLTEwNC4yIDAtMTIuMi0zMC40LTcuNC0yOC45IDMuMyAyNCAxNzMuNCAyNDYgMjU2LjkgMzgxLjYgMTIxLjMgNi45LTcuOC0xMi42LTI4LjQtMjAuNy0yMC40ek0xODIuMSAzMDYuNmMwIDQgNC4zIDcuMyA1LjUgOC41IDMgMyA2LjEgNC40IDguNSA0LjQgMy44IDAgMi42IC4yIDIyLjMtMTkuNSAxOS42IDE5LjMgMTkuMSAxOS41IDIyLjMgMTkuNSA1LjQgMCAxOC41LTEwLjQgMTAuNy0xOC4ybC0xNy4zLTE3LjMgMTguMi0xOC4yYzYuMy02LjgtMTAuMS0yMS44LTE2LjItMTUuN0wyMTguMiAyNjhjLTE4LjYtMTguOC0xOC40LTE5LjUtMjEuNS0xOS41LTUgMC0xOCAxMS43LTEyLjQgMTcuM0wyMDIuNSAyODRjLTE4LjEgMTcuOS0yMC40IDE5LjItMjAuNCAyMi42eiJdCiAgICB9OwogICAgZmFBZmZpbGlhdGV0aGVtZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhZmZpbGlhdGV0aGVtZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMzZiIiwgIk0xNTkuNyAyMzcuNEMxMDguNCAzMDguMyA0My4xIDM0OC4yIDE0IDMyNi42LTE1LjIgMzA0LjkgMi44IDIzMCA1NC4yIDE1OS4xIDEwNS41IDg4LjIgMTcwLjggNDguMyAxOTkuOSA2OS45czExLjEgOTYuNi00MC4yIDE2Ny41em0zNTEuMi01Ny4zYy03My44IDEyMy40LTE5MS45IDE4Ny43LTI2NC41IDE0My42LTI1LTE1LjItNDEuMy00MS4yLTQ5LTczLjgtMzMuNiA2NC44LTkyLjggMTEzLjgtMTY0LjEgMTMzLjIgNDkuOCA1OS4zIDEyNC4xIDk2LjkgMjA3IDk2LjkgMTUwIDAgMjcxLjYtMTIzLjEgMjcxLjYtMjc0LjkgLjEtOC41LS4zLTE2LjgtMS0yNXoiXQogICAgfTsKICAgIGZhUmVkUml2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmVkLXJpdmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzZTMiLCAiTTM1My4yIDMyTDk0LjggMzJDNDIuNCAzMiAwIDc0LjQgMCAxMjYuOEwwIDM4NS4yQzAgNDM3LjYgNDIuNCA0ODAgOTQuOCA0ODBsMjU4LjQgMGM1Mi40IDAgOTQuOC00Mi40IDk0LjgtOTQuOGwwLTI1OC40QzQ0OCA3NC40IDQwNS42IDMyIDM1My4yIDMyek0xNDQuOSAyMDAuOWwwIDU2LjNjMCAyNy0yMS45IDQ4LjktNDguOSA0OC45bDAtMTU0LjJjMC0xMy4yIDEwLjctMjMuOSAyMy45LTIzLjlsMTU0LjIgMGMwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsLTU2LjMgMGMtMTIuMy0uNi0yNC42IDExLjYtMjQgMjR6bTE3Ni4zIDcybC01Ni4zIDBjLTEyLjMtLjYtMjQuNiAxMS42LTI0IDI0bDAgNTYuM2MwIDI3LTIxLjkgNDguOS00OC45IDQ4LjlsMC0xNTQuMmMwLTEzLjIgMTAuNy0yMy45IDIzLjktMjMuOWwxNTQuMiAwYzAgMjctMjEuOSA0OC45LTQ4LjkgNDguOXoiXQogICAgfTsKICAgIGZhVHdpdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ0d2l0dGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwOTkiLCAiTTQ1OS40IDE1MS43Yy4zIDQuNSAuMyA5LjEgLjMgMTMuNiAwIDEzOC43LTEwNS42IDI5OC42LTI5OC42IDI5OC42LTU5LjUgMC0xMTQuNy0xNy4yLTE2MS4xLTQ3LjEgOC40IDEgMTYuNiAxLjMgMjUuMyAxLjMgNDkuMSAwIDk0LjItMTYuNiAxMzAuMy00NC44LTQ2LjEtMS04NC44LTMxLjItOTguMS03Mi44IDYuNSAxIDEzIDEuNiAxOS44IDEuNiA5LjQgMCAxOC44LTEuMyAyNy42LTMuNi00OC4xLTkuNy04NC4xLTUyLTg0LjEtMTAzbDAtMS4zYzE0IDcuOCAzMC4yIDEyLjcgNDcuNCAxMy4zLTI4LjMtMTguOC00Ni44LTUxLTQ2LjgtODcuNCAwLTE5LjUgNS4yLTM3LjQgMTQuMy01MyA1MS43IDYzLjcgMTI5LjMgMTA1LjMgMjE2LjQgMTA5LjgtMS42LTcuOC0yLjYtMTUuOS0yLjYtMjQgMC01Ny44IDQ2LjgtMTA0LjkgMTA0LjktMTA0LjkgMzAuMiAwIDU3LjUgMTIuNyA3Ni43IDMzLjEgMjMuNy00LjUgNDYuNS0xMy4zIDY2LjYtMjUuMy03LjggMjQuNC0yNC40IDQ0LjgtNDYuMSA1Ny44IDIxLjEtMi4zIDQxLjYtOC4xIDYwLjQtMTYuMi0xNC4zIDIwLjgtMzIuMiAzOS4zLTUyLjYgNTQuM3oiXQogICAgfTsKICAgIGZhRm9ydEF3ZXNvbWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZm9ydC1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyODYiLCAiTTQ4OS41IDI4Ny45bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0xNzguM2MwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTIuNi0yLTQuNi00LjYtNC42bC0yNy40IDBjLTIuNiAwLTQuNiAyLTQuNiA0LjZsMCAzMi0zNi42IDAgMC0zMmMwLTYtOC00LjYtMTEuNy00LjZsMC0zOGM4LjMtMiAxNy4xLTMuNCAyNS43LTMuNCAxMC45IDAgMjAuOSA0LjMgMzEuNCA0LjMgNC42IDAgMjcuNy0xLjEgMjcuNy04bDAtNjBjMC0yLjYtMi00LjYtNC42LTQuNi01LjEgMC0xNS4xIDQuMy0yNCA0LjMtOS43IDAtMjAuOS00LjMtMzIuNi00LjMtOCAwLTE2IDEuMS0yMy43IDIuOWwwLTQuOWM1LjQtMi42IDkuMS04LjMgOS4xLTE0LjMgMC0yMC43LTMxLjQtMjAuOC0zMS40IDAgMCA2IDMuNyAxMS43IDkuMSAxNC4zbDAgMTExLjdjLTMuNyAwLTExLjctMS40LTExLjcgNC42bDAgMzItMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMzItMzYuMyAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMTc4LjMtMzYuNiAwIDAtMzJjMC0yLjYtMi00LjYtNC42LTQuNmwtMjcuNCAwYy0yLjYgMC00LjYgMi00LjYgNC42bDAgMjE5LjUgMTgyLjkgMCAwLTk2YzAtNzIuNiAxMDkuNy03Mi42IDEwOS43IDBsMCA5NiAxODIuOSAwIDAtMjE5LjVjLjEtMi42LTEuOS00LjYtNC41LTQuNnptLTI4OC4xLTQuNWMwIDIuNi0yIDQuNi00LjYgNC42bC0yNy40IDBjLTIuNiAwLTQuNi0yLTQuNi00LjZsMC02NGMwLTIuNiAyLTQuNiA0LjYtNC42bDI3LjQgMGMyLjYgMCA0LjYgMiA0LjYgNC42bDAgNjR6bTE0Ni40IDBjMCAyLjYtMiA0LjYtNC42IDQuNmwtMjcuNCAwYy0yLjYgMC00LjYtMi00LjYtNC42bDAtNjRjMC0yLjYgMi00LjYgNC42LTQuNmwyNy40IDBjMi42IDAgNC42IDIgNC42IDQuNmwwIDY0eiJdCiAgICB9OwogICAgZmFNaXhlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaXhlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDU2IiwgIk04Mi42IDc2LjFjLTMuOC01LjEtOC43LTkuNC0xNC4yLTEyLjVzLTExLjctNS4xLTE4LjEtNS43LTEyLjggLjEtMTguOCAyLjItMTEuNiA1LjMtMTYuMyA5LjZjLTE3LjYgMTYuMi0xOSA0My41LTQuOCA2Mi44bDkxLjggMTIzLTkyLjMgMTI0LjFjLTE0LjIgMTkuMy0xMy4xIDQ2LjYgNC43IDYyLjggNC43IDQuMyAxMC4zIDcuNiAxNi4zIDkuNnMxMi41IDIuOCAxOC44IDIuMiAxMi41LTIuNSAxOC4xLTUuNyAxMC40LTcuNCAxNC4yLTEyLjVMMjEwLjkgMjYyLjdjMS41LTIuMSAyLjMtNC42IDIuMy03LjFzLS44LTUtMi4zLTcuMUw4Mi42IDc2LjF6TTQzOC4yIDM3OS42bC05Mi4zLTEyNC4xIDkxLjgtMTIzYzE0LjItMTkuMiAxMi44LTQ2LjYtNC43LTYyLjgtNC43LTQuMy0xMC4zLTcuNi0xNi4zLTkuNnMtMTIuNS0yLjgtMTguOC0yLjItMTIuNSAyLjUtMTguMSA1LjctMTAuNCA3LjQtMTQuMiAxMi41bC0xMjggMTcyLjFjLTEuNSAyLjEtMi4zIDQuNi0yLjMgNy4xcy44IDUgMi4zIDcuMUwzNjYgNDM1LjljMy44IDUuMSA4LjcgOS40IDE0LjIgMTIuNXMxMS43IDUuMSAxOC4xIDUuNyAxMi44LS4xIDE4LjgtMi4yIDExLjYtNS4zIDE2LjMtOS42YzE3LjgtMTYuMiAxOS00My41IDQuNy02Mi44eiJdCiAgICB9OwogICAgZmFMeWZ0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImx5ZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjNjMyIsICJNMCA4MS4xbDc3LjggMCAwIDIwOC43YzAgMzMuMSAxNSA1Mi44IDI3LjIgNjEtMTIuNyAxMS4xLTUxLjIgMjAuOS04MC4yLTIuOC0xNy0xNC0yNC44LTM3LjMtMjQuOC01OUwwIDgxLjF6TTQ4NS45IDI1NC42bDAtMjIgMjMuOCAwIDAtNzYuOC0yNi4xIDBjLTEwLjEtNDYuMy01MS4yLTgwLjctMTAwLjMtODAuNy01Ni42IDAtMTAyLjcgNDYtMTAyLjcgMTAyLjdsMCAxNzkuMmMxNiAyLjMgMzUuNC0uMyA1MS43LTE0IDE3LjEtMTQgMjQuOC0zNy4yIDI0LjgtNTlsMC02LjcgMzguOCAwIDAtNzYuOC0zOC44IDAgMC0yMy4zYzAtMzQuNiA1Mi4yLTM0LjYgNTIuMiAwbDAgNzcuMWMwIDU2LjYgNDYgMTAyLjcgMTAyLjcgMTAyLjdsMC03Ni41Yy0xNC41IDAtMjYuMS0xMS43LTI2LjEtMjUuOXptLTI5NC4zLTk5bDAgMTEzYzAgMTUuNC0yMy44IDE1LjQtMjMuOCAwbDAtMTEzLTc2LjggMCAwIDEzMi43YzAgMjMuOCA4IDU0IDQ1IDYzLjkgMzcgOS44IDU4LjItMTAuNiA1OC4yLTEwLjYtMi4xIDEzLjQtMTQuNSAyMy4zLTM0LjkgMjUuMy0xNS41IDEuNi0zNS4yLTMuNi00NS03LjhsMCA3MC4zYzI1LjEgNy41IDUxLjUgOS44IDc3LjYgNC43IDQ3LjEtOS4xIDc2LjgtNDguNCA3Ni44LTEwMC44bDAtMTc4LjItNzcuMSAwIDAgLjV6Il0KICAgIH07CiAgICBmYUFwcGxlUGF5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImFwcGxlLXBheSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDE1IiwgIk0xMTYuOSAxNTguNWMtNy41IDguOS0xOS41IDE1LjktMzEuNSAxNC45LTEuNS0xMiA0LjQtMjQuOCAxMS4zLTMyLjYgNy41LTkuMSAyMC42LTE1LjYgMzEuMy0xNi4xIDEuMiAxMi40LTMuNyAyNC43LTExLjEgMzMuOHptMTAuOSAxNy4yYy0xNy40LTEtMzIuMyA5LjktNDAuNSA5LjktOC40IDAtMjEtOS40LTM0LjgtOS4xLTE3LjkgLjMtMzQuNSAxMC40LTQzLjYgMjYuNS0xOC44IDMyLjMtNC45IDgwIDEzLjMgMTA2LjMgOC45IDEzIDE5LjUgMjcuMyAzMy41IDI2LjggMTMuMy0uNSAxOC41LTguNiAzNC41LTguNiAxNi4xIDAgMjAuOCA4LjYgMzQuOCA4LjQgMTQuNS0uMyAyMy42LTEzIDMyLjUtMjYgMTAuMS0xNC44IDE0LjMtMjkuMSAxNC41LTI5LjktLjMtLjMtMjgtMTAuOS0yOC4zLTQyLjktLjMtMjYuOCAyMS45LTM5LjUgMjIuOS00MC4zLTEyLjUtMTguNi0zMi0yMC42LTM4LjgtMjEuMXptMTAwLjQtMzYuMmwwIDE5NC45IDMwLjMgMCAwLTY2LjYgNDEuOSAwYzM4LjMgMCA2NS4xLTI2LjMgNjUuMS02NC4zcy0yNi40LTY0LTY0LjEtNjRsLTczLjIgMHpNMjU4LjUgMTY1bDM0LjkgMGMyNi4zIDAgNDEuMyAxNCA0MS4zIDM4LjZzLTE1IDM4LjgtNDEuNCAzOC44bC0zNC44IDAgMC03Ny40ek00MjAuNyAzMzUuOWMxOSAwIDM2LjYtOS42IDQ0LjYtMjQuOWwuNiAwIDAgMjMuNCAyOCAwIDAtOTdjMC0yOC4xLTIyLjUtNDYuMy01Ny4xLTQ2LjMtMzIuMSAwLTU1LjkgMTguNC01Ni44IDQzLjZsMjcuMyAwYzIuMy0xMiAxMy40LTE5LjkgMjguNi0xOS45IDE4LjUgMCAyOC45IDguNiAyOC45IDI0LjVsMCAxMC44LTM3LjggMi4zYy0zNS4xIDIuMS01NC4xIDE2LjUtNTQuMSA0MS41IC4xIDI1LjIgMTkuNyA0MiA0Ny44IDQyem04LjItMjMuMWMtMTYuMSAwLTI2LjQtNy44LTI2LjQtMTkuNiAwLTEyLjMgOS45LTE5LjQgMjguOC0yMC41bDMzLjYtMi4xIDAgMTFjMCAxOC4yLTE1LjUgMzEuMi0zNiAzMS4yem0xMDIuNSA3NC42YzI5LjUgMCA0My40LTExLjMgNTUuNS00NS40bDUzLjEtMTQ5LTMwLjggMC0zNS42IDExNS4xLS42IDAtMzUuNi0xMTUuMS0zMS42IDAgNTEuMiAxNDEuOS0yLjggOC42Yy00LjYgMTQuNi0xMi4xIDIwLjMtMjUuNSAyMC4zLTIuNCAwLTctLjMtOC45LS41bDAgMjMuNGMxLjggLjQgOS4zIC43IDExLjYgLjd6Il0KICAgIH07CiAgICBmYUFydHN0YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXJ0c3RhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzdhIiwgIk0yLjEgMzc3LjRsNDMgNzQuM2M0LjMgOC41IDEwLjggMTUuNyAxOC45IDIwLjdzMTcuNCA3LjYgMjcgNy42bDI4NS40IDAtNTkuMi0xMDIuNi0zMTUuMSAwek01MDEuOSAzNTBMMzM1LjcgNTkuM2MtNC40LTguMi0xMC45LTE1LjEtMTguOS0yMFMyOTkuNyAzMiAyOTAuNCAzMmwtODguNCAwIDI1Ny4zIDQ0Ny42IDQwLjctNzAuNWMxLjktMy4yIDIxLTI5LjcgMi01OS4xek0yNzUuMiAzMDQuNWwtMTE1LjUtMjAwLTExNS41IDIwMCAyMzEgMHoiXQogICAgfTsKICAgIGZhTm9kZUpzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIm5vZGUtanMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjNkMyIsICJNMjI0LjUgNTA4Yy02LjcgMC0xMy41LTEuOC0xOS40LTUuMmwtNjEuNy0zNi41Yy05LjItNS4yLTQuNy03LTEuNy04IDEyLjMtNC4zIDE0LjgtNS4yIDI3LjktMTIuNyAxLjQtLjggMy4yLS41IDQuNiAuNGw0Ny40IDI4LjFjMS43IDEgNC4xIDEgNS43IDBMNDEyIDM2Ny41YzEuNy0xIDIuOC0zIDIuOC01bDAtMjEzLjJjMC0yLjEtMS4xLTQtMi45LTUuMUwyMjcuMyAzNy43Yy0xLjctMS00LTEtNS43IDBMMzcuMSAxNDQuM2MtMS44IDEtMi45IDMtMi45IDUuMWwwIDIxMy4xYzAgMiAxLjEgNCAyLjkgNC45bDUwLjYgMjkuMmMyNy41IDEzLjcgNDQuMy0yLjQgNDQuMy0xOC43bDAtMjEwLjRjMC0zIDIuNC01LjMgNS40LTUuM2wyMy40IDBjMi45IDAgNS40IDIuMyA1LjQgNS4zbDAgMjEwLjVjMCAzNi42LTIwIDU3LjYtNTQuNyA1Ny42LTEwLjcgMC0xOS4xIDAtNDIuNS0xMS42TDIwLjYgMzk2LjFjLTEyLTYuOS0xOS40LTE5LjgtMTkuNC0zMy43bDAtMjEzLjFjMC0xMy44IDcuNC0yNi44IDE5LjQtMzMuN0wyMDUuMSA5YzExLjctNi42IDI3LjItNi42IDM4LjggMEw0MjguNiAxMTUuN2MxMiA2LjkgMTkuNCAxOS44IDE5LjQgMzMuN2wwIDIxMy4xYzAgMTMuOC03LjQgMjYuNy0xOS40IDMzLjdMMjQzLjkgNTAyLjhjLTUuOSAzLjQtMTIuNiA1LjItMTkuNCA1LjJ6TTM3My42IDI5Ny45YzAtMzkuOS0yNy01MC41LTgzLjctNTgtNTcuNC03LjYtNjMuMi0xMS41LTYzLjItMjQuOSAwLTExLjEgNC45LTI1LjkgNDcuNC0yNS45IDM3LjkgMCA1MS45IDguMiA1Ny43IDMzLjggLjUgMi40IDIuNyA0LjIgNS4yIDQuMmwyNCAwYzEuNSAwIDIuOS0uNiAzLjktMS43czEuNS0yLjYgMS40LTQuMWMtMy43LTQ0LjEtMzMtNjQuNi05Mi4yLTY0LjYtNTIuNyAwLTg0LjEgMjIuMi04NC4xIDU5LjUgMCA0MC40IDMxLjMgNTEuNiA4MS44IDU2LjYgNjAuNSA1LjkgNjUuMiAxNC44IDY1LjIgMjYuNyAwIDIwLjYtMTYuNiAyOS40LTU1LjUgMjkuNC00OC45IDAtNTkuNi0xMi4zLTYzLjItMzYuNi0uNC0yLjYtMi42LTQuNS01LjMtNC41bC0yMy45IDBjLTMgMC01LjMgMi40LTUuMyA1LjMgMCAzMS4xIDE2LjkgNjguMiA5Ny44IDY4LjIgNTguNC0uMSA5Mi0yMy4yIDkyLTYzLjR6Il0KICAgIH07CiAgICBmYVVuY2hhcnRlZCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ1bmNoYXJ0ZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NCIsICJNMTcxLjggMjMyLjhjMS4xIDAgMi4xLS4zIDMtLjlzMS42LTEuNCAyLTIuNGMyLjItOS44IDcuNC0xOC42IDE0LjktMjUuMyAxLjItLjggMS43LTIuNSAxLjctNC4xLS4xLS43LS4zLTEuMy0uNi0xLjlzLS45LTEuMS0xLjQtMS40TDc0LjUgMTI4LjUgMTQ5LjEgODVjMS41LS44IDIuNy0yIDMuNi0zLjVzMS40LTMuMSAxLjQtNC44YzAtMS43LS40LTMuNC0xLjMtNC45cy0yLjItMi43LTMuNy0zLjRMMTI2LjcgNTUuNmMtMS41LS44LTMuMS0xLjItNC44LTEuMnMtMy4zIC40LTQuOCAxLjJMMTcgMTEzLjZjLTEuNSAuOC0yLjcgMi0zLjYgMy41cy0xLjQgMy4xLTEuNCA0LjhMMTIgMjM3YzAgMS43IC40IDMuNCAxLjMgNC45czIuMiAyLjcgMy43IDMuNGwyMi40IDEyLjhjMS41IC45IDMuMiAxLjMgNSAxLjIgMi40IC4xIDQuOC0uOCA2LjYtMi41IDEuOC0xLjkgMi44LTQuNCAyLjktN2wwLTg1LjMgMTE1LjkgNjcuOWMuNiAuMyAxLjQgLjQgMi4xIC40ek0zMjMuNCAzNzcuN2MtMS43IC4xLTMuNCAuNS01IDEuMmwtNzQuNSA0My4xIDAtMTM0LjJjMC0yLjktMi45LTUuOC02LjItNC42LTkuNCAyLjgtMTkuNSAzLTI5IC40LS43LS4yLTEuNS0uMi0yLjItLjFzLTEuNCAuNC0yIC45LTEuMSAxLTEuNCAxLjctLjUgMS40LS41IDIuMWwwIDEzMy4zLTc0LjUtNDMuMWMtMS41LS45LTMuMi0xLjMtNS0xLjItMi41IDAtNC45IDEtNi43IDIuOHMtMi44IDQuMi0yLjggNi43bDAgMjYuMWMwIDEuNyAuNCAzLjQgMS4zIDQuOXMyLjIgMi43IDMuNyAzLjRsMTAwLjIgNTcuNmMxLjUgLjkgMy4yIDEuMyA1IDEuMiAxLjcgMCAzLjQtLjQgNS0xLjJsMTAwLjItNTcuNmMxLjUtLjggMi43LTIgMy42LTMuNXMxLjQtMy4xIDEuNC00LjhsMC0yNi4xYy0uOC00LjYtNS40LTkuMS0xMC40LTkuMXpNMjg2LjEgNzhhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em02My42LTEwLjFhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em02My4yIDgzLjdhMjMgMjMgMCAxIDAgMC00NiAyMyAyMyAwIDEgMCAwIDQ2em0tNjMuMi05LjJhMjMgMjMgMCAxIDAgMCA0NiAyMyAyMyAwIDEgMCAwLTQ2em0tNjMuNiA4My4yYzQuNSAwIDktMS4zIDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjggOC44czIuOSA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwek0yMjQgMjYyYzQuNSAwIDktMS40IDEyLjgtMy45czYuNy02LjEgOC41LTEwLjMgMi4yLTguOCAxLjMtMTMuMy0zLjEtOC42LTYuMy0xMS44LTcuMy01LjQtMTEuOC02LjMtOS4xLS40LTEzLjMgMS4zLTcuOCA0LjctMTAuMyA4LjUtMy45IDguMi0zLjkgMTIuOGMwIDMgLjYgNiAxLjcgOC44czIuOCA1LjMgNSA3LjUgNC43IDMuOCA3LjUgNSA1LjggMS44IDguOCAxLjhsMCAwem0xODguOS04Mi40Yy00LjYgMC05IDEuMy0xMi44IDMuOXMtNi43IDYuMS04LjUgMTAuMy0yLjIgOC44LTEuMyAxMy4zIDMuMSA4LjYgNi4zIDExLjggNy4zIDUuNCAxMS44IDYuMyA5LjEgLjQgMTMuMy0xLjMgNy44LTQuNyAxMC4zLTguNSAzLjktOC4yIDMuOS0xMi44YzAtNi4xLTIuNC0xMS45LTYuNy0xNi4zcy0xMC4yLTYuNy0xNi4zLTYuN2wwIDB6bTAgNzIuM2MtNC42IDAtOSAxLjMtMTIuOCAzLjlzLTYuNyA2LjEtOC41IDEwLjMtMi4yIDguOC0xLjMgMTMuMyAzLjEgOC42IDYuMyAxMS44IDcuMyA1LjQgMTEuOCA2LjMgOS4xIC40IDEzLjMtMS4zIDcuOC00LjcgMTAuMy04LjUgMy45LTguMiAzLjktMTIuOGMwLTYuMS0yLjQtMTEuOS02LjctMTYuM3MtMTAuMi02LjctMTYuMy02LjdsMCAweiJdCiAgICB9OwogICAgZmFQbGF5c3RhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJwbGF5c3RhdGlvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2RmIiwgIk01NzEgMzcyLjNjLTExLjMgMTQuMi0zOC44IDI0LjMtMzguOCAyNC4zbC0yMDUuMSA3My42IDAtNTQuMyAxNTAuOS01My44YzE3LjEtNi4xIDE5LjgtMTQuOCA1LjgtMTkuNC0xMy45LTQuNi0zOS4xLTMuMy01Ni4yIDIuOWwtMTAwLjUgMzUuNSAwLTU2LjRjMjMuMi03LjggNDcuMS0xMy42IDc1LjctMTYuOCA0MC45LTQuNSA5MC45IC42IDEzMC4yIDE1LjUgNDQuMiAxNCA0OS4yIDM0LjcgMzggNDguOXpNMzQ2LjYgMjc5LjhsMC0xMzljMC0xNi4zLTMtMzEuMy0xOC4zLTM1LjYtMTEuNy0zLjgtMTkgNy4xLTE5IDIzLjRsMCAzNDcuOS05My44LTI5LjggMC00MTQuN2MzOS45IDcuNCA5OCAyNC45IDEyOS4yIDM1LjQgNzkuNSAyNy4zIDEwNi40IDYxLjMgMTA2LjQgMTM3LjggMCA3NC41LTQ2IDEwMi44LTEwNC41IDc0LjZ6TTQzLjMgNDEwLjJjLTQ1LjQtMTIuOC01My0zOS41LTMyLjMtNTQuOCAxOS4xLTE0LjIgNTEuNy0yNC45IDUxLjctMjQuOWwxMzQuNS00Ny44IDAgNTQuNS05Ni44IDM0LjZjLTE3LjEgNi4xLTE5LjcgMTQuOC01LjggMTkuNHMzOS4xIDMuMyA1Ni4yLTIuOWw0Ni40LTE2LjkgMCA0OC44Yy01MS42IDkuMy0xMDEuNCA3LjMtMTUzLjktMTB6Il0KICAgIH07CiAgICBmYU1pY3JvYmxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb2Jsb2ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTAxYSIsICJNMzk5LjggMzYyLjJjMjkuNS0zNC43IDQ3LjEtNzguMyA0Ny4xLTEyNS44IDAtMTEzLTk5LjYtMjA0LjQtMjIyLjUtMjA0LjRTMiAxMjMuNSAyIDIzNi40IDEwMS42IDQ0MC45IDIyNC41IDQ0MC45YzI3IDAgNTMuOS00LjUgNzkuNC0xMy40IDEuNC0uNSAzLS41IDQuNS0uMXMyLjcgMS40IDMuNiAyLjZjMTguNiAyNS4xIDQ3LjYgNDIuNyA3OS45IDQ5LjkgMS4xIC4yIDIuMyAwIDMuMy0uNnMxLjctMS42IDEuOS0yLjhjLjEtLjYgLjEtMS4zIDAtMS45cy0uNC0xLjItLjgtMS43Yy0xMi4zLTE2LTE4LjctMzUuOC0xOC01NnM4LjQtMzkuNSAyMS43LTU0LjdsLS4yIC4xek0zMzAgMjEyLjRsLTU3LjMgNDMuNSAyMC44IDY4LjljLjQgMS4zIC40IDIuNy0uMSA0cy0xLjIgMi40LTIuMyAzLjItMi40IDEuMi0zLjggMS4yLTIuNy0uNC0zLjgtMS4ybC01OS4xLTQxLTU5LjEgNDEuMWMtMS4xIC44LTIuNCAxLjItMy44IDEuMnMtMi43LS40LTMuOC0xLjItMS45LTEuOS0yLjMtMy4yLS41LTIuNy0uMS00bDIwLjgtNjguOS01Ny4zLTQzLjVjLTEuMS0uOC0xLjktMS45LTIuMy0zLjJzLS40LTIuNyAwLTQgMS4yLTIuNCAyLjMtMy4yIDIuNC0xLjMgMy43LTEuM2w3MS45LTEuNSAyMy43LTY3LjljLjQtMS4zIDEuMy0yLjQgMi40LTMuMnMyLjQtMS4yIDMuOC0xLjIgMi43IC40IDMuOCAxLjIgMS45IDEuOSAyLjQgMy4ybDIzLjcgNjcuOSA3MS45IDEuNWMxLjQgMCAyLjcgLjQgMy44IDEuMnMxLjkgMS45IDIuMyAzLjIgLjQgMi43IDAgNC0xLjIgMi40LTIuMyAzLjNsMCAweiJdCiAgICB9OwogICAgZmFHaXRrcmFrZW4gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ2l0a3Jha2VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzYTYiLCAiTTU1Ny43IDExOC4xYy0yLjMtNi4xLTkuMy05LjItMTUuMy02LjYtNS43IDIuNC04LjUgOC45LTYuMyAxNC42IDEwLjkgMjkgMTYuOSA2MC41IDE2LjkgOTMuMyAwIDEzNC42LTEwMC4zIDI0NS43LTIzMC4yIDI2Mi43bDAtMTIzLjdjNy45LTEuNSAxNS41LTMuNiAyMy02LjJsMCAxMDRjMTA2LjctMjUuOSAxODUuOS0xMjIuMSAxODUuOS0yMzYuOCAwLTkxLjgtNTAuOC0xNzEuOC0xMjUuOC0yMTMuMy01LjctMy4yLTEzLS45LTE1LjkgNS0yLjcgNS41LS42IDEyLjIgNC43IDE1LjEgNjcuOSAzNy42IDExMy45IDExMCAxMTMuOSAxOTMuMiAwIDkzLjMtNTcuOSAxNzMuMS0xMzkuOCAyMDUuNGwwLTkyLjJjMTQuMi00LjUgMjQuOS0xNy43IDI0LjktMzMuNSAwLTEzLjEtNi44LTI0LjQtMTcuMy0zMC41IDguMy03OS41IDQ0LjUtNTguNiA0NC41LTgzLjlsMC0xNC43YzAtMzgtODcuOS0xNjEuOC0xMjktMTY0LjctMi41LS4yLTUtLjItNy42IDAtNDEuMiAzLTEyOS4xIDEyNi43LTEyOS4xIDE2NC43bDAgMTQuOGMwIDI1LjMgMzYuMyA0LjMgNDQuNSA4My45LTEwLjYgNi4xLTE3LjMgMTcuNC0xNy4zIDMwLjUgMCAxNS44IDEwLjYgMjkgMjQuOCAzMy41bDAgOTIuMmMtODEuOS0zMi4yLTEzOS44LTExMi0xMzkuOC0yMDUuNCAwLTgzLjEgNDYtMTU1LjUgMTEzLjktMTkzLjIgNS40LTMgNy40LTkuNiA0LjctMTUuMS0yLjktNS45LTEwLjEtOC4yLTE1LjktNS03NSA0MS41LTEyNS44IDEyMS41LTEyNS44IDIxMy4zIDAgMTE0LjcgNzkuMiAyMTAuOCAxODUuOSAyMzYuOGwwLTEwNGM3LjYgMi41IDE1LjEgNC42IDIzIDYuMmwwIDEyMy43Yy0xMjkuOC0xNy0yMzAuMi0xMjguMS0yMzAuMi0yNjIuNyAwLTMyLjggNi02NC4zIDE2LjktOTMuMyAyLjItNS44LS42LTEyLjItNi4zLTE0LjYtNi0yLjYtMTMgLjQtMTUuMyA2LjYtMTEuOCAzMS41LTE4LjMgNjUuNi0xOC4zIDEwMS4zIDAgMTU1LjEgMTIyLjYgMjgxLjYgMjc2LjMgMjg3LjhsMC0xNDUuOWM2LjggLjQgMTUgLjUgMjMuNCAwbDAgMTQ1LjhjMTUzLjctNi4xIDI3Ni4zLTEzMi42IDI3Ni4zLTI4Ny43IDAtMzUuNy02LjUtNjkuOC0xOC4zLTEwMS40ek0zNTcuOSAzMjIuOWEyMy43IDIzLjcgMCAxIDEgMC00Ny40IDIzLjcgMjMuNyAwIDEgMSAwIDQ3LjR6TTIxOC4xIDI3NS40YTIzLjcgMjMuNyAwIDEgMSAwIDQ3LjQgMjMuNyAyMy43IDAgMSAxIDAtNDcuNHoiXQogICAgfTsKICAgIGZhVGVsZWdyYW0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidGVsZWdyYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjQ2MiwgInRlbGVncmFtLXBsYW5lIl0sICJmMmM2IiwgIk0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTM3MSAxNzYuN2MtMy43IDM5LjItMTkuOSAxMzQuNC0yOC4xIDE3OC4zLTMuNSAxOC42LTEwLjMgMjQuOC0xNi45IDI1LjQtMTQuNCAxLjMtMjUuMy05LjUtMzkuMy0xOC43LTIxLjgtMTQuMy0zNC4yLTIzLjItNTUuMy0zNy4yLTI0LjUtMTYuMS04LjYtMjUgNS4zLTM5LjUgMy43LTMuOCA2Ny4xLTYxLjUgNjguMy02Ni43IC4yLS43IC4zLTMuMS0xLjItNC40cy0zLjYtLjgtNS4xLS41Yy0yLjIgLjUtMzcuMSAyMy41LTEwNC42IDY5LjEtOS45IDYuOC0xOC45IDEwLjEtMjYuOSA5LjktOC45LS4yLTI1LjktNS0zOC42LTkuMS0xNS41LTUtMjcuOS03LjctMjYuOC0xNi4zIC42LTQuNSA2LjctOSAxOC40LTEzLjcgNzIuMy0zMS41IDEyMC41LTUyLjMgMTQ0LjYtNjIuMyA2OC45LTI4LjYgODMuMi0zMy42IDkyLjUtMzMuOCAyLjEgMCA2LjYgLjUgOS42IDIuOSAyIDEuNyAzLjIgNC4xIDMuNSA2LjcgLjUgMy4yIC42IDYuNSAuNCA5Ljh6Il0KICAgIH07CiAgICBmYVRlbGVncmFtUGxhbmUgPSBmYVRlbGVncmFtOwogICAgZmFJdHVuZXNOb3RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogIml0dW5lcy1ub3RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYzYjUiLCAiTTM4MS45IDM4OC4yYy02LjQgMjcuNC0yNy4yIDQyLjgtNTUuMSA0OC0yNC41IDQuNS00NC45IDUuNi02NC41LTEwLjItMjMuOS0yMC4xLTI0LjItNTMuNC0yLjctNzQuNCAxNy0xNi4yIDQwLjktMTkuNSA3Ni44LTI1LjggNi0xLjEgMTEuMi0yLjUgMTUuNi03LjQgNi40LTcuMiA0LjQtNC4xIDQuNC0xNjMuMiAwLTExLjItNS41LTE0LjMtMTctMTIuMy04LjIgMS40LTE4NS43IDM0LjYtMTg1LjcgMzQuNi0xMC4yIDIuMi0xMy40IDUuMi0xMy40IDE2LjcgMCAyMzQuNyAxLjEgMjIzLjktMi41IDIzOS41LTQuMiAxOC4yLTE1LjQgMzEuOS0zMC4yIDM5LjUtMTYuOCA5LjMtNDcuMiAxMy40LTYzLjQgMTAuNC00My4yLTguMS01OC40LTU4LTI5LjEtODYuNiAxNy0xNi4yIDQwLjktMTkuNSA3Ni44LTI1LjggNi0xLjEgMTEuMi0yLjUgMTUuNi03LjQgMTAuMS0xMS41IDEuOC0yNTYuNiA1LjItMjcwLjIgLjgtNS4yIDMtOS42IDcuMS0xMi45IDQuMi0zLjUgMTEuOC01LjUgMTMuNC01LjUgMjA0LTM4LjIgMjI4LjktNDMuMSAyMzIuNC00My4xIDExLjUtLjggMTguMSA2IDE4LjEgMTcuNiAuMiAzNDQuNSAxLjEgMzI2LTEuOCAzMzguNXoiXQogICAgfTsKICAgIGZhTGVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MWQiLCAiTTYxMy4yIDIxOWMwLTIwLjUgMy4yLTMyLjYgMy4yLTU0LjYgMC0zNC4yLTEyLjYtNDUuMi00MC41LTQ1LjJsLTIwLjUgMCAwIDI0LjIgNi4zIDBjMTQuMiAwIDE3LjMgNC43IDE3LjMgMjIuMSAwIDE2LjMtMS42IDMyLjYtMS42IDUxLjUgMCAyNC4yIDcuOSAzMy42IDIzLjYgMzcuM2wwIDEuNmMtMTUuOCAzLjctMjMuNiAxMy4xLTIzLjYgMzcuMyAwIDE4LjkgMS42IDM0LjIgMS42IDUxLjUgMCAxNy45LTMuNyAyMi42LTE3LjMgMjIuNmwwIC41LTYuMyAwIDAgMjUuMiAyMC41IDBjMjcuOCAwIDQwLjUtMTEgNDAuNS00NS4yIDAtMjIuNi0zLjItMzQuMi0zLjItNTQuNiAwLTExIDYuOC0yMi42IDI3LjMtMjMuNmwwLTI3LjNjLTIwLjUtLjctMjcuMy0xMi4zLTI3LjMtMjMuM3pNNTA3LjYgMjUxYy0xNS44LTYuMy0zMC41LTEwLTMwLjUtMjAuNSAwLTcuOSA2LjMtMTIuNiAxNy45LTEyLjZzMjIuMSA0LjcgMzMuNiAxMy4xbDIxLTI3LjhjLTEzLjEtMTAtMzEtMjAuNS01NS4yLTIwLjUtMzUuNyAwLTU5LjkgMjAuNS01OS45IDQ5LjQgMCAyNS43IDIyLjYgMzguOSA0MS41IDQ2LjIgMTYuMyA2LjMgMzIuMSAxMS42IDMyLjEgMjIuMSAwIDcuOS02LjMgMTMuMS0yMC41IDEzLjEtMTMuMSAwLTI2LjMtNS4zLTQwLjUtMTYuM2wtMjEgMzAuNWMxNS44IDEzLjEgMzkuOSAyMi4xIDU5LjkgMjIuMSA0MiAwIDY0LjYtMjIuMSA2NC42LTUxcy0yMi41LTQxLTQzLTQ3Ljh6TTE0OC43IDMxMC40Yy0zLjcgMC04LjQtMy4yLTguNC0xMy4xbDAtMTc4LjItNzQuNiAwYy0yOC40IDAtNDEgMTEtNDEgNDUuMiAwIDIyLjYgMy4yIDM1LjIgMy4yIDU0LjYgMCAxMS02LjggMjIuNi0yNy4zIDIzLjZsMCAyNy4zYzIwLjUgLjUgMjcuMyAxMi4xIDI3LjMgMjMuMSAwIDE5LjQtMy4yIDMxLTMuMiA1My42IDAgMzQuMiAxMi42IDQ1LjIgNDAuNSA0NS4ybDIwLjUgMCAwLTI0LjItNi4zIDBjLTEzLjEgMC0xNy4zLTUuMy0xNy4zLTIyLjZzMS42LTMyLjEgMS42LTUxLjVjMC0yNC4yLTcuOS0zMy42LTIzLjYtMzcuM2wwLTEuNmMxNS44LTMuNyAyMy42LTEzLjEgMjMuNi0zNy4zIDAtMTguOS0xLjYtMzQuMi0xLjYtNTEuNXMzLjctMjIuMSAxNy4zLTIyLjFsMTQuMSAwIDAgMTUwLjhjMCAzMi4xIDExIDUzLjEgNDMuMSA1My4xIDEwIDAgMTcuOS0xLjYgMjMuNi0zLjdsLTUuMy0zNC4yYy0zLjEgLjgtNC42IC44LTYuMiAuOHpNMzgwLjQgMjUxYy0xNi4zLTYuMy0zMS0xMC0zMS0yMC41IDAtNy45IDYuMy0xMi42IDE3LjktMTIuNnMyMi4xIDQuNyAzMy42IDEzLjFsMjEtMjcuOGMtMTMuMS0xMC0zMS0yMC41LTU1LjItMjAuNS0zNS43IDAtNTkuOSAyMC41LTU5LjkgNDkuNCAwIDI1LjcgMjIuNiAzOC45IDQxLjUgNDYuMiAxNi4zIDYuMyAzMi4xIDExLjYgMzIuMSAyMi4xIDAgNy45LTYuMyAxMy4xLTIwLjUgMTMuMS0xMy4xIDAtMjYuMy01LjMtNDAuNS0xNi4zbC0yMC41IDMwLjVjMTUuOCAxMy4xIDM5LjkgMjIuMSA1OS45IDIyLjEgNDIgMCA2NC42LTIyLjEgNjQuNi01MSAuMS0yOC45LTIyLjUtNDEtNDMtNDcuOHptLTE1NS02OC44Yy0zOC40IDAtNzUuMSAzMi4xLTc0LjEgODIuNSAwIDUyIDM0LjIgODIuNSA3OS4zIDgyLjUgMTguOSAwIDM5LjktNi44IDU2LjItMTcuOUwyNzEgMzAxLjVjLTExLjYgNi44LTIyLjYgMTAtMzQuMiAxMC0yMSAwLTM3LjMtMTAtNDEuNS0zNC4ybDk1LjIgMGMuNS0zLjcgMS42LTExIDEuNi0xOS40IC42LTQyLjYtMjIuNi03NS43LTY2LjctNzUuN3ptLTMwIDY2LjJjMy4yLTIxIDE1LjgtMzEgMzAuNS0zMSAxOC45IDAgMjYuMyAxMy4xIDI2LjMgMzFsLTU2LjggMHoiXQogICAgfTsKICAgIGZhRmlyZWZveCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlZm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNjkiLCAiTTUwMy41IDI0MS41Yy0uMS0xLjYtLjItMy4xLS4yLTQuN2wwLS4xLS40LTQuNyAwLS4xYy0xLjMtMTMuOS0zLjctMjcuNy03LjMtNDEuMiAwLS4xIDAtLjEtLjEtLjJsLTEuMS00Yy0uMS0uMi0uMS0uNS0uMi0uNi0uNC0xLjItLjctMi41LTEuMS0zLjctLjEtLjItLjEtLjYtLjItLjgtLjQtMS4yLS43LTIuNC0xLjEtMy41LS4xLS40LS4yLS42LS40LTEtLjQtMS4yLS43LTIuMy0xLjItMy41bC0uNC0xLjFjLS40LTEuMS0uOC0yLjMtMS4yLTMuNC0uMS0uMy0uMi0uNy0uNC0xLS41LTEuMS0uOC0yLjMtMS4zLTMuNC0uMS0uMi0uMi0uNi0uNC0uOC0uNS0xLjItMS0yLjMtMS40LTMuNSAwLS4xLS4xLS4yLS4xLS40LTEuNi0zLjgtMy4yLTcuNy01LTExLjRsLS40LS43Yy0uNS0xLS44LTEuOC0xLjMtMi42LS4yLS41LS41LTEuMS0uNy0xLjYtLjQtLjgtLjgtMS42LTEuMi0yLjQtLjQtLjYtLjYtMS4yLTEtMS44cy0uOC0xLjQtMS4yLTIuM2MtLjQtLjYtLjctMS4zLTEuMS0xLjlzLS44LTEuNC0xLjItMi4yYy0uNC0uNy0uOC0xLjQtMS4yLTItLjQtLjctLjgtMS4zLTEuMi0ycy0uOC0xLjMtMS4yLTItLjgtMS4zLTEuMi0xLjktLjgtMS40LTEuMy0yLjJjLS40LS42LS44LTEuMi0xLjItMS44bC0xLjQtMi4xYy0uNC0uNi0uOC0xLjItMS4yLTEuOC0uNS0uNy0xLjEtMS42LTEuNi0yLjMtLjQtLjUtLjctMS4xLTEuMS0xLjZsLTEuOC0yLjVjLS40LS41LS42LS44LTEtMS4zLTEtMS4zLTEuOC0yLjUtMi44LTMuNy03LjItOS40LTE1LTE4LjMtMjMuNS0yNi42LTUuNy02LTExLjgtMTEuNS0xOC4zLTE2LjctNC0zLjUtOC4yLTYuNy0xMi41LTkuOC03LjctNS44LTE2LTEwLjgtMjQuNi0xNS4xLTIuNC0xLjMtNC44LTIuNS03LjItMy43LTE3LjctOC42LTM2LjMtMTUuMi01NS40LTE5LjYtMS45LS40LTMuOC0uOC01LjYtMS4ybC0uMSAwYy0xLS4xLTEuOC0uNC0yLjgtLjUtMTIuNS0yLjQtMjUuMi0zLjctMzgtNGwtMTAuNiAwYy0xNS4zIC4yLTMwLjUgMS45LTQ1LjUgNS0zMy42IDcuMS02My4yIDIxLjItODIuOSAzOS0xLjEgMS0xLjkgMS43LTIuNCAyLjJsLS41IC41IC4xIDBjMCAwIC4xIDAgLjEgMHMwLS4xIDAtLjFsLS4xIC4xYy4xLS4xIC4xLS4xIC4yLS4xIDE0LjYtOC44IDM0LjktMTYgNDkuNC0xOS42bDUuOS0xLjRjLjQtLjEgLjgtLjEgMS4yLS4yIDEuNy0uNCAzLjQtLjcgNS4yLTEuMSAuMiAwIC42LS4xIC44LS4xIDY0LjItMTEuNyAxMzIuNiA3LjUgMTgwLjIgNTMgMTAuMyA5LjggMTkuMyAyMC44IDI2LjkgMzIuOCAzMC40IDQ5LjIgMjcuNSAxMTEuMSAzLjggMTQ3LjYtMzQuNCA1My0xMTEuNCA3MS4zLTE1OSAyNC44LTE2LTE1LjUtMjUuMi0zNi43LTI1LjYtNTktLjItMTAuNyAyLTIxLjIgNi4yLTMxIDEuNy0zLjggMTMuMS0yNS43IDE4LjItMjQuNi0xMy4xLTIuOC0zNy41IDIuNi01NC43IDI4LjItMTUuNCAyMi45LTE0LjUgNTguMi01IDgzLjMtNi0xMi40LTEwLjEtMjUuNi0xMi4xLTM5LjItMTIuMi04Mi42IDQzLjMtMTUzIDk0LjMtMTcwLjUtMjcuNS0yNC05Ni41LTIyLjMtMTQ3LjcgMTUuNC0yOS45IDIyLTUxLjIgNTMuMi02Mi41IDkwLjQgMS43LTIwLjkgOS42LTUyLjEgMjUuOC04My45LTE3LjIgOC45LTM5IDM3LTQ5LjggNjIuOS0xNS42IDM3LjQtMjEgODIuMi0xNi4xIDEyNC44IC40IDMuMiAuNyA2LjQgMS4xIDkuNiAxOS45IDExNy4xIDEyMiAyMDYuNCAyNDQuOCAyMDYuNCAxMzcuMSAwIDI0OC4zLTExMS4yIDI0OC4zLTI0OC40LS4xLTQuNS0uMi05LjEtLjUtMTMuNXoiXQogICAgfTsKICAgIGZhS2FnZ2xlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImthZ2dsZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmNWZhIiwgIk0zMDQuMiA1MDEuNUwxNTguNCAzMjAuMyAyOTguMiAxODVjMi42LTIuNyAxLjctMTAuNS01LjMtMTAuNWwtNjkuMiAwYy0zLjUgMC03IDEuOC0xMC41IDUuM2wtMTMyLjMgMTMzLjcgMC0zMDZjMC01LTIuNS03LjUtNy41LTcuNUwyMS41IDBDMTYuNSAwIDE0IDIuNSAxNCA3LjVsMCA0OTdjMCA1IDIuNSA3LjUgNy41IDcuNWw1MS45IDBjNSAwIDcuNS0yLjUgNy41LTcuNWwwLTEwOSAzMC44LTI5LjMgMTEwLjUgMTQwLjZjMyAzLjUgNi41IDUuMyAxMC41IDUuM2w2Ni45IDBjMy41IDAgNS41LTEgNi0zbC0xLjQtNy42eiJdCiAgICB9OwogICAgZmFGYWNlYm9va01lc3NlbmdlciA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlYm9vay1tZXNzZW5nZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjM5ZiIsICJNMjU2LjYgOGMtMTQwIDAtMjQ4LjYgMTAyLjMtMjQ4LjYgMjQwLjYgMCA3Mi4zIDI5LjcgMTM0LjggNzguMSAxNzcuOSA4LjMgNy41IDYuNiAxMS45IDggNTguMiAuMSAzLjIgMSA2LjQgMi42IDkuMnMzLjkgNS4yIDYuNyA2LjkgNS45IDIuOCA5LjEgMyA2LjUtLjMgOS41LTEuNkMxNzQuOSA0NzkgMTc1LjYgNDc3LjIgMTg0LjYgNDc5LjYgMzM3LjggNTIxLjggNTA0IDQyMy43IDUwNCAyNDguNiA1MDQgMTEwLjMgMzk2LjYgOCAyNTYuNiA4ek00MDUuOCAxOTMuMWwtNzMgMTE1LjZjLTIuOCA0LjMtNi40IDguMS0xMC42IDExcy05LjEgNC44LTE0LjEgNS44LTEwLjMgLjgtMTUuMy0uNC05LjctMy40LTEzLjgtNi40bC01OC4xLTQzLjVjLTIuNi0xLjktNS44LTMtOS0zcy02LjQgMS4xLTkgM2wtNzguNCA1OS40Yy0xMC41IDcuOS0yNC4yLTQuNi0xNy4xLTE1LjdsNzMtMTE1LjZjMi44LTQuMyA2LjQtOC4xIDEwLjYtMTFzOS4xLTQuOCAxNC4xLTUuOCAxMC4zLS44IDE1LjMgLjQgOS43IDMuNCAxMy45IDYuNGw1OC4xIDQzLjVjMi42IDEuOSA1LjggMyA5IDNzNi40LTEuMSA5LTNsNzguNC01OS40YzEwLjQtOCAyNC4xIDQuNSAxNy4xIDE1LjZ6Il0KICAgIH07CiAgICBmYUF1ZGlibGUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYXVkaWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzczIiwgIk02NDAgMTk5LjlsMCA1NC0zMjAgMjAwLTMyMC0xOTkuOSAwLTU0IDMyMCAyMDAgMzIwLTIwMC4xem0tMTk0LjUgNzJsNDcuMS0yOS40Yy0zNy4yLTU1LjgtMTAwLjctOTIuNi0xNzIuNy05Mi42cy0xMzUuNSAzNi43LTE3Mi42IDkyLjRsLjMgMGMyLjUtMi4zIDUuMS00LjUgNy43LTYuNyA4OS43LTc0LjQgMjE5LjQtNTguMSAyOTAuMiAzNi4zek0yMjUuNCAyOTAuN2MxNi45LTExLjkgMzYuNS0xOC43IDU3LjQtMTguNyAzNC40IDAgNjUuMiAxOC40IDg2LjQgNDcuNmw0NS40LTI4LjRjLTIwLjktMjkuOS01NS42LTQ5LjUtOTQuOC00OS41LTM4LjkgMC03My40IDE5LjQtOTQuNCA0OXpNMTAzLjYgMTYxLjFDMjM1LjQgNTYuOCA0MjEuOCA4NC43IDUyMS4xIDIyMy4ybC43IDEgNDguOC0zMC40Yy01My41LTgxLjctMTQ1LjgtMTM1LjctMjUwLjctMTM1LjctMTAzLjUgMC0xOTYuNiA1My41LTI1MC41IDEzNS42IDkuOS0xMC41IDIyLjctMjMuNSAzNC4yLTMyLjZ6Il0KICAgIH07CiAgICBmYVBhdHJlb24gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGF0cmVvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmM2Q5IiwgIk00OTAgMTUzLjhjLS4xLTY1LjQtNTEtMTE5LTExMC43LTEzOC4zLTc0LjItMjQtMTcyLTIwLjUtMjQyLjkgMTIuOS04NS44IDQwLjUtMTEyLjggMTI5LjMtMTEzLjggMjE3LjgtLjggNzIuOCA2LjQgMjY0LjQgMTE0LjYgMjY1LjggODAuMyAxIDkyLjMtMTAyLjUgMTI5LjUtMTUyLjMgMjYuNC0zNS41IDYwLjUtNDUuNSAxMDIuNC01NS45IDcyLTE3LjggMTIxLjEtNzQuNyAxMjEtMTUwbC0uMSAweiJdCiAgICB9OwogICAgZmFWbnYgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAidm52IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MGIiLCAiTTEwNC45IDM1MmMtMzQuMSAwLTQ2LjQtMzAuNC00Ni40LTMwLjRMMi42IDIxMC4xUy03LjggMTkyIDEzIDE5MmwzMi44IDBjMTAuNCAwIDEzLjIgOC43IDE4LjggMTguMWwzNi43IDc0LjVzNS4yIDEzLjEgMjEuMSAxMy4xIDIxLjEtMTMuMSAyMS4xLTEzLjFsMzYuNy03NC41YzUuNi05LjUgOC40LTE4LjEgMTguOC0xOC4xbDMyLjggMGMyMC44IDAgMTAuNCAxOC4xIDEwLjQgMTguMUwxODYuNCAzMjEuNlMxNzQuMiAzNTIgMTQwIDM1MmwtMzUuMSAwem0zOTUgMGMtMzQuMSAwLTQ2LjQtMzAuNC00Ni40LTMwLjRMMzk3LjYgMjEwLjFTMzg3LjIgMTkyIDQwOCAxOTJsMzIuOCAwYzEwLjQgMCAxMy4yIDguNyAxOC44IDE4LjFsMzYuNyA3NC41czUuMiAxMy4xIDIxLjEgMTMuMSAyMS4xLTEzLjEgMjEuMS0xMy4xbDM2LjgtNzQuNWM1LjYtOS41IDguNC0xOC4xIDE4LjgtMTguMWwzMi45IDBjMjAuOCAwIDEwLjQgMTguMSAxMC40IDE4LjFMNTgxLjUgMzIxLjZTNTY5LjMgMzUyIDUzNS4xIDM1MmwtMzUuMiAwek0zMzcuNiAxOTJjMzQuMSAwIDQ2LjQgMzAuNCA0Ni40IDMwLjRsNTUuOSAxMTEuNVM0NTAuMyAzNTIgNDI5LjUgMzUybC0zMi44IDBjLTEwLjQgMC0xMy4yLTguNy0xOC44LTE4LjFsLTM2LjctNzQuNXMtNS4yLTEzLjEtMjEuMS0xMy4xLTIxLjEgMTMuMS0yMS4xIDEzLjFsLTM2LjcgNzQuNWMtNS42IDkuNC04LjQgMTguMS0xOC44IDE4LjFsLTMyLjkgMGMtMjAuOCAwLTEwLjQtMTguMS0xMC40LTE4LjFsNTUuOS0xMTEuNVMyNjguMyAxOTIgMzAyLjUgMTkybDM1LjEgMHoiXQogICAgfTsKICAgIGZhUGFnZWxpbmVzID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInBhZ2VsaW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMThjIiwgIk0zODQuMSAzMTIuN2MtNTUuMSAxMzYuNy0xODcuMSA1NC0xODcuMSA1NC00MC41IDgxLjgtMTA3LjQgMTM0LjQtMTg0LjYgMTM0LjctMTYuMSAwLTE2LjYtMjQuNCAwLTI0LjQgNjQuNC0uMyAxMjAuNS00Mi43IDE1Ny4yLTExMC4xLTQxLjEgMTUuOS0xMTguNiAyNy45LTE2MS42LTgyLjIgMTA5LTQ0LjkgMTU5LjEgMTEuMiAxNzguMyA0NS41IDkuOS0yNC40IDE3LTUwLjkgMjEuNi03OS43IDAgMC0xMzkuNyAyMS45LTE0OS41LTk4LjEgMTE5LjEtNDcuOSAxNTIuNiA3Ni43IDE1Mi42IDc2LjcgMS42LTE2LjcgMy4zLTUyLjYgMy4zLTUzLjQgMCAwLTEwNi4zLTczLjctMzguMS0xNjUuMiAxMjQuNiA0MyA2MS40IDE2Mi40IDYxLjQgMTYyLjQgLjUgMS42IC41IDIzLjggMCAzMy40IDAgMCA0NS4yLTg5IDEzNi40LTU3LjUtNC4yIDEzNC0xNDEuOSAxMDYuNC0xNDEuOSAxMDYuNC00LjQgMjcuNC0xMS4yIDUzLjQtMjAgNzcuNSAwIDAgODMtOTEuOCAxNzItMjB6Il0KICAgIH07CiAgICBmYUFtYXpvbiA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJhbWF6b24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI3MCIsICJNMjU3LjcgMTYyLjdjLTQ4LjcgMS44LTE2OS41IDE1LjUtMTY5LjUgMTE3LjUgMCAxMDkuNSAxMzguMyAxMTQgMTgzLjUgNDMuMiA2LjUgMTAuMiAzNS40IDM3LjUgNDUuMyA0Ni44bDU2LjgtNTZzLTMyLjMtMjUuMy0zMi4zLTUyLjhsMC0xNDcuMUMzNDEuNSA4OSAzMTcgMzIgMjI5LjIgMzIgMTQxLjIgMzIgOTQuNSA4NyA5NC41IDEzNi4zbDczLjUgNi44YzE2LjMtNDkuNSA1NC4yLTQ5LjUgNTQuMi00OS41IDQwLjctLjEgMzUuNSAyOS44IDM1LjUgNjkuMXptMCA4Ni44YzAgODAtODQuMiA2OC04NC4yIDE3LjIgMC00Ny4yIDUwLjUtNTYuNyA4NC4yLTU3LjhsMCA0MC42ek0zOTMuNyA0MTNjLTcuNyAxMC03MCA2Ny0xNzQuNSA2N1MzNC43IDQwOC41IDEwLjIgMzc5Yy02LjgtNy43IDEtMTEuMyA1LjUtOC4zIDczLjMgNDQuNSAxODcuOCAxMTcuOCAzNzIuNSAzMC4zIDcuNS0zLjcgMTMuMyAyIDUuNSAxMnptMzkuOCAyLjJjLTYuNSAxNS44LTE2IDI2LjgtMjEuMiAzMS01LjUgNC41LTkuNSAyLjctNi41LTMuOHMxOS4zLTQ2LjUgMTIuNy01NWMtNi41LTguMy0zNy00LjMtNDgtMy4yLTEwLjggMS0xMyAyLTE0LS4zLTIuMy01LjcgMjEuNy0xNS41IDM3LjUtMTcuNSAxNS43LTEuOCA0MS0uOCA0NiA1LjcgMy43IDUuMSAwIDI3LjEtNi41IDQzLjF6Il0KICAgIH07CiAgICBmYUVudmlyYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJlbnZpcmEiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjI5OSIsICJNMCAzMmM0NzcuNiAwIDM2Ni42IDMxNy4zIDM2Ny4xIDM2Ni4zbDgwLjkgODEuNy0yNiAwLTcwLjQtNzEuMkMzMTIuNiA0MTMgMjI3LjIgNDQzLjMgMTM3LjIgMzcxLjggNDcgMzAwLjMgNTIgMjE0LjcgMCAzMnpNNzkuNyA3OGMtNDkuNy0yMy41LTUuMiA5LjItNS4yIDkuMiA0NS4yIDMxLjIgNjYgNzMuNyA5MC4yIDExOS45IDMxLjUgNjAuMiA3OSAxMzkuNyAxNDQuMiAxNjcuNyA2NSAyOCAzNC4yIDEyLjUgNi04LjUtMjguMi0yMS4yLTY4LjItODctOTEtMTMwLjItMzEuNy02MC02MS0xMTguNi0xNDQuMi0xNTguMXoiXQogICAgfTsKICAgIGZhTGlub2RlID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImxpbm9kZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmI4IiwgIk0zNjYuMyAxODYuOWwtNTkuNSAzNi45LS44IDM2LjktMjkuMy0xOS4zLTM5LjQgMjQuM2MyLjIgNTUuMiAyLjUgNTkuMyAyLjUgNTkuNWwtOTcuMiA2NS40LTE1LjEtMTA0LjcgMTA4LjEtNjItNDAuMi0yNi03NS40IDM4LjUtMjEtMTQzLjMgMTI5LTQ5LjQtOTEuMy00My42LTEyNS43IDM5LjQgMjcuNyAxMzQuOSA0MS45IDMyLjctMzEuOCAxNS4xIDIwLjkgMTAxLjQgMjkuMyAyNy43LTIwLjkgMTIuNiAxNi44IDc4LjggNjYuMiA2OS42Yy0xMC44LTc0LjgtMTEuNy03OC42LTExLjctNzguOGw3Ny45LTU1LjNDMjQ0IDM2NS40IDI0Mi4zIDM2NyAyNDIuMyAzNjdsLjggMjQuMyAzMy41IDI4LjUtLjgtNzcuMSA0Ni45LTMzLjUgMjYuOC0xOC40LTIuNSAzNiAyNS4xIDE3LjYgNi43LTc0LjYgNTguNy00My42LTcxLjItMzkuNHoiXQogICAgfTsKICAgIGZhQWNjdXNvZnQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWNjdXNvZnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjM2OSIsICJNMzIyLjEgMjUybDAtMS01MS4yLTY1LjhzLTEyIDEuNi0yNSAxNS4xYy05IDkuMy0yNDIuMSAyMzkuMS0yNDMuNCAyNDAuOS03IDEwIDEuNiA2LjggMTUuNyAxLjcgLjggMCAxMTQuNS0zNi42IDExNC41LTM2LjYgLjUtLjYtLjEtLjEgLjYtLjYtLjQtNS4xLS44LTI2LjItMS0yNy43LS42LTUuMiAyLjItNi45IDctOC45bDkyLjYtMzMuOGMuNi0uOCA4OC41LTgxLjcgOTAuMi04My4zek00ODIuMiAzNzIuMWMxMy4zIDE2LjEgMjAuNyAxMy4zIDMwLjggOS4zIDMuMi0xLjIgMTE1LjQtNDcuNiAxMTcuOC00OC45IDgtNC4zLTEuNy0xNi43LTcuMi0yMy40LTIuMS0yLjUtMjA1LjEtMjQ1LjYtMjA3LjItMjQ4LjMtOS43LTEyLjItMTQuMy0xMi45LTM4LjQtMTIuOC0xMC4yIDAtMTA2LjggLjUtMTE2LjUgLjYtMTkuMiAuMS0zMi45LS4zLTE5LjIgMTYuOSA3LjcgOS41IDIzNC4yIDI5OS43IDIzOS45IDMwNi42em0xNTIuNyAxLjZjLTIuMy0uMy0yNC42LTQuNy0zOC03LjIgMCAwLTExNSA1MC40LTExNy41IDUxLjYtMTYgNy4zLTI2LjktMy4yLTM2LjctMTQuNmwtNTcuMS03NGMtNS40LS45LTYwLjQtOS42LTY1LjMtOS4zLTMuMSAuMi05LjYgLjgtMTQuNCAyLjktNC45IDIuMS0xNDUuMiA1Mi44LTE1MC4yIDU0LjctNS4xIDItMTEuNCAzLjYtMTEuMSA3LjYgLjIgMi41IDIgMi42IDQuNiAzLjUgMi43IC44IDMwMC45IDY3LjYgMzA4IDY5LjEgMTUuNiAzLjMgMzguNSAxMC41IDUzLjYgMS43IDIuMS0xLjIgMTIzLjgtNzYuNCAxMjUuOC03Ny44IDUuNC00IDQuMy02LjgtMS43LTguMnoiXQogICAgfTsKICAgIGZhRXJsYW5nID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVybGFuZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMzlkIiwgIk04Ny4yIDUzLjVsLTg3LjIgMCAwIDQwNSAxMDAuNCAwYy00OS43LTUyLjYtNzguOC0xMjUuMy03OC43LTIxMi4xLS4xLTc2LjcgMjQtMTQyLjcgNjUuNS0xOTIuOXptMjM4LjIgOS43Yy00NS45IC4xLTg1LjEgMzMuNS04OS4yIDgzLjJsMTY5LjkgMGMtMS4xLTQ5LjctMzQuNS04My4xLTgwLjctODMuMnptMjMwLjctOS42bC4zIDAtLjEtLjEtLjIgLjF6bS4zIDBjMzEuNCA0Mi43IDQ4LjcgOTcuNSA0Ni4yIDE2Mi43IC41IDYgLjUgMTEuNyAwIDI0LjFsLTM3Mi40IDBjLS4yIDEwOS43IDM4LjkgMTk0LjkgMTM4LjYgMTk1LjMgNjguNS0uMyAxMTgtNTEgMTUxLjktMTA2LjFsOTYuNCA0OC4yYy0xNy40IDMwLjktMzYuNSA1Ny44LTU3LjkgODAuOGw4MC44IDAgMC00MDUtODMuNiAweiJdCiAgICB9OwogICAgZmFDY0Rpc2NvdmVyID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLWRpc2NvdmVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxZjIiLCAiTTUyMC40IDE5Ni4xYzAtNy45LTUuNS0xMi4xLTE1LjYtMTIuMWwtNC45IDAgMCAyNC45IDQuNyAwYzEwLjMgMCAxNS44LTQuNCAxNS44LTEyLjh6TTUyOCAzMkw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQ4MCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek00ODMuOSAxNzAuOWMyMi42IDAgNTIuOS00LjEgNTIuOSAyNC40IDAgMTIuNi02LjYgMjAuNy0xOC43IDIzLjJsMjUuOCAzNC40LTE5LjYgMC0yMi4yLTMyLjgtMi4yIDAgMCAzMi44LTE2IDAgMC04MnpNNDI4IDE3MWw0NS4zIDAgMCAxNC0yOS4zIDAgMCAxOC4yIDI4LjMgMCAwIDEzLjgtMjguMyAwIDAgMjIuMiAyOS4zIDAgMCAxMy44LTQ1LjMgMCAwLTgyem0tNjguNyAwbDIxLjkgNTUuMiAyMi4yLTU1LjIgMTcuNSAwLTM1LjUgODQuMi04LjYgMC0zNS04NC4yIDE3LjUgMHptLTU1LjkgODYuMmE0NC42IDQ0LjYgMCAxIDEgMC04OS4yIDQ0LjYgNDQuNiAwIDEgMSAwIDg5LjJ6bS00OS4zLTgzLjFsMCAxOWMtMjAuMS0yMC4xLTQ2LjgtNC43LTQ2LjggMTkgMCAyNSAyNy41IDM4LjUgNDYuOCAxOS4ybDAgMTljLTI5LjcgMTQuMy02My4zLTUuNy02My4zLTM4LjIgMC0zMS4yIDMzLjEtNTMgNjMuMy0zOHptLTk3LjIgNjYuM2MxMS40IDAgMjIuNC0xNS4zLTMuMy0yNC40LTE1LTUuNS0yMC4yLTExLjQtMjAuMi0yMi43IDAtMjMuMiAzMC42LTMxLjQgNDkuNy0xNC4zbC04LjQgMTAuOGMtMTAuNC0xMS42LTI0LjktNi4yLTI0LjkgMi41IDAgNC40IDIuNyA2LjkgMTIuMyAxMC4zIDE4LjIgNi42IDIzLjYgMTIuNSAyMy42IDI1LjYgMCAyOS41LTM4LjggMzcuNC01Ni42IDExLjNsMTAuMy05LjljMy43IDcuMSA5LjkgMTAuOCAxNy41IDEwLjh6TTU1LjQgMjUzbC0yMy40IDAgMC04MiAyMy40IDBjMjYuMSAwIDQ0LjEgMTcgNDQuMSA0MS4xIDAgMTguNS0xMy4yIDQwLjktNDQuMSA0MC45em02Ny41IDBsLTE2IDAgMC04MiAxNiAwIDAgODJ6TTU0NCA0MzNjMCA4LjItNi44IDE1LTE1IDE1bC00MDEgMGMxODkuNi0zNS42IDM4Mi43LTEzOS4yIDQxNi0xNjBsMCAxNDV6TTc0LjEgMTkxLjZjLTUuMi00LjktMTEuNi02LjYtMjEuOS02LjZsLTQuMiAwIDAgNTQuMiA0LjIgMGMxMC4zIDAgMTctMiAyMS45LTYuNCA1LjctNS4yIDguOS0xMi44IDguOS0yMC43cy0zLjItMTUuNS04LjktMjAuNXoiXQogICAgfTsKICAgIGZhU2FmYXJpID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInNhZmFyaSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjY3IiwgIk0yNzQuNyAyNzQuN0wyMzcuMyAyMzcuMyAxNjYgMzQ2IDI3NC43IDI3NC43ek0yNTYgOGEyNDggMjQ4IDAgMSAwIDAgNDk2IDI0OCAyNDggMCAxIDAgMC00OTZ6TTQxMS44IDE4Mi44bDE0LjgtNi4xYzEtLjQgMi0uNiAzLjEtLjZzMi4xIC4yIDMuMSAuNiAxLjggMSAyLjYgMS43IDEuMyAxLjYgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjYgMy4xLTEgMS45LTEuNyAyLjYtMS42IDEuMy0yLjYgMS43TDQxOCAxOTcuNmMtMiAuOC00LjIgLjgtNi4xIDBzLTMuNS0yLjQtNC4zLTQuMy0uOC00LjIgMC02LjEgMi40LTMuNSA0LjMtNC4zek0zMTQuNCA5NGw2LjEtMTQuOGMuOC0yIDIuNC0zLjUgNC4zLTQuM3M0LjItLjggNi4xIDAgMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMWwtNi4xIDE0LjhjLS44IDItMi40IDMuNS00LjMgNC4zcy00LjIgLjgtNi4xIDBjLTEtLjQtMS45LTEtMi42LTEuN3MtMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjF6TTI1NiA2MGMyLjEgMCA0LjIgLjggNS43IDIuM1MyNjQgNjUuOSAyNjQgNjhsMCAxNmMwIDIuMS0uOCA0LjItMi4zIDUuN3MtMy41IDIuMy01LjcgMi4zLTQuMi0uOC01LjctMi4zLTIuMy0zLjUtMi4zLTUuN2wwLTE2YzAtMi4xIC44LTQuMiAyLjMtNS43UzI1My45IDYwIDI1NiA2MHpNMTgxIDc0LjljMS0uNCAyLS42IDMuMS0uNnMyLjEgLjIgMy4xIC42IDEuOSAxIDIuNiAxLjcgMS4zIDEuNiAxLjcgMi42TDE5Ny42IDk0Yy40IDEgLjcgMiAuNyAzLjFzLS4yIDIuMS0uNiAzLjEtMSAxLjktMS43IDIuNi0xLjYgMS40LTIuNiAxLjgtMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS44LTEuMy0xLjctMS43LTIuN2wtNi4xLTE0LjhjLS44LTItLjgtNC4yIDAtNi4xczIuNC0zLjUgNC4zLTQuM3ptLTYzLjYgNDIuNWMxLjUtMS41IDMuNS0yLjMgNS43LTIuM3M0LjIgLjggNS43IDIuM0wxNDAgMTI4LjdjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42Yy0xLjUgMS41LTMuNSAyLjMtNS43IDIuM3MtNC4yLS44LTUuNy0yLjNsLTExLjMtMTEuM2MtMS41LTEuNS0yLjMtMy41LTIuMy01LjZzLjgtNC4xIDIuMy01LjZsMCAwek02MCAyNTZjMC0yLjEgLjgtNC4yIDIuMy01LjdTNjUuOSAyNDggNjggMjQ4bDE2IDBjMi4xIDAgNC4yIC44IDUuNyAyLjNzMi4zIDMuNSAyLjMgNS43LS44IDQuMi0yLjMgNS43LTMuNSAyLjMtNS43IDIuM2wtMTYgMGMtMi4xIDAtNC4yLS44LTUuNy0yLjNTNjAgMjU4LjEgNjAgMjU2em00MC4yIDczLjJsLTE0LjggNi4xYy0xIC40LTIgLjYtMy4xIC42cy0yLjEtLjItMy4xLS42LTEuOS0xLTIuNi0xLjctMS4zLTEuNi0xLjctMi42LS42LTItLjYtMy4xIC4yLTIuMSAuNi0zLjEgMS0xLjkgMS43LTIuNiAxLjYtMS4zIDIuNi0xLjdMOTQgMzE0LjRjMi0uOCA0LjItLjggNi4xIDBzMy41IDIuNCA0LjMgNC4zIC44IDQuMiAwIDYuMS0yLjQgMy41LTQuMyA0LjN6bTQuMy0xMzZjLS40IDEtMSAxLjktMS43IDIuNnMtMS42IDEuMy0yLjYgMS43LTIgLjYtMy4xIC42LTIuMS0uMi0zLjEtLjZsLTE0LjgtNi4xYy0yLS44LTMuNS0yLjQtNC4zLTQuM3MtLjgtNC4yIDAtNi4xIDIuNC0zLjUgNC4zLTQuMyA0LjItLjggNi4xIDBsMTQuOCA2LjFjMiAuOCAzLjUgMi40IDQuMyA0LjNzLjggNC4yIDAgNi4xbDAgMHpNMTk3LjYgNDE4bC02LjEgMTQuOGMtLjQgMS0xIDEuOS0xLjcgMi42cy0xLjYgMS4zLTIuNiAxLjctMiAuNi0zLjEgLjYtMi4xLS4yLTMuMS0uNi0xLjktMS0yLjYtMS43LTEuMy0xLjYtMS43LTIuNi0uNi0yLS42LTMuMSAuMi0yLjEgLjYtMy4xbDYuMS0xNC44Yy40LTEgMS0xLjkgMS43LTIuN3MxLjYtMS40IDIuNi0xLjggMi0uNiAzLjEtLjYgMi4xIC4yIDMuMSAuNiAxLjkgMSAyLjYgMS44IDEuMyAxLjcgMS43IDIuNiAuNiAyIC42IDMuMS0uMiAyLjEtLjcgMy4xek0yNjQgNDQ0YzAgMi4xLS44IDQuMi0yLjMgNS43cy0zLjUgMi4zLTUuNyAyLjMtNC4yLS44LTUuNy0yLjMtMi4zLTMuNS0yLjMtNS43bDAtMTZjMC0yLjEgLjgtNC4yIDIuMy01LjdzMy41LTIuMyA1LjctMi4zIDQuMiAuOCA1LjcgMi4zIDIuMyAzLjUgMi4zIDUuN2wwIDE2em02Ny02LjljLTEgLjQtMiAuNi0zLjEgLjZzLTIuMS0uMi0zLjEtLjYtMS45LTEtMi42LTEuNy0xLjMtMS42LTEuNy0yLjZMMzE0LjQgNDE4Yy0uOC0yLS44LTQuMiAwLTYuMXMyLjQtMy41IDQuMy00LjMgNC4yLS44IDYuMSAwIDMuNSAyLjQgNC4zIDQuM2w2LjEgMTQuOGMuOCAyIC44IDQuMiAwIDYuMXMtMi40IDMuNS00LjMgNC4zem02My42LTQyLjVjLTEuNSAxLjUtMy41IDIuMy01LjcgMi4zcy00LjItLjgtNS43LTIuM0wzNzIgMzgzLjNjLTEuNS0xLjUtMi4zLTMuNS0yLjMtNS42cy44LTQuMSAyLjMtNS42IDMuNS0yLjMgNS43LTIuMyA0LjIgLjggNS43IDIuM2wxMS4zIDExLjNjMS41IDEuNSAyLjMgMy41IDIuMyA1LjZzLS44IDQuMS0yLjMgNS42bDAgMHpNMjg2LjIgMjg2LjJMMTEwLjMgNDAxLjcgMjI1LjggMjI1LjggNDAxLjcgMTEwLjMgMjg2LjIgMjg2LjJ6TTQzNy4xIDMzMWMtLjggMi0yLjQgMy41LTQuMyA0LjNzLTQuMiAuOC02LjEgMGwtMTQuOC02LjFjLTItLjgtMy41LTIuNC00LjMtNC4zcy0uOC00LjIgMC02LjFjLjQtMSAxLTEuOSAxLjctMi42czEuNi0xLjMgMi42LTEuNyAyLS42IDMuMS0uNiAyLjEgLjIgMy4xIC42bDE0LjggNi4xYzIgLjggMy41IDIuNCA0LjMgNC4zcy44IDQuMiAwIDYuMXptNi45LTY3bC0xNiAwYy0yLjEgMC00LjItLjgtNS43LTIuM3MtMi4zLTMuNS0yLjMtNS43IC44LTQuMiAyLjMtNS43IDMuNS0yLjMgNS43LTIuM2wxNiAwYzIuMSAwIDQuMiAuOCA1LjcgMi4zczIuMyAzLjUgMi4zIDUuNy0uOCA0LjItMi4zIDUuNy0zLjUgMi4zLTUuNyAyLjN6Il0KICAgIH07CiAgICBmYVNwYWNlQXdlc29tZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJzcGFjZS1hd2Vzb21lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1YWMiLCAiTTk2IDI1NmwzMiAwIDAgMjU2LTEyOCAwIDAtMTYwIDMyIDAgMC0zMiAzMiAwIDAtMzIgMzIgMCAwLTMyem00MTYgOTZsMCAxNjAtMTI4IDAgMC0yNTYgMzIgMCAwIDMyIDMyIDAgMCAzMiAzMiAwIDAgMzIgMzIgMHpNMzIwIDY0bDMyIDAgMCAzODQtMzIgMCAwLTMyLTEyOCAwIDAgMzItMzIgMCAwLTM4NCAzMiAwIDAtMzIgMzIgMCAwLTMyIDY0IDAgMCAzMiAzMiAwIDAgMzJ6bS0zMiA2NGwtNjQgMCAwIDY0IDY0IDAgMC02NHoiXQogICAgfTsKICAgIGZhTm9kZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJub2RlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0MTkiLCAiTTMxNi4zIDQ1MmMtMi4xIDAtNC4yLS42LTYuMS0xLjZMMjkxIDQzOWMtMi45LTEuNi0xLjUtMi4yLS41LTIuNSAzLjgtMS4zIDQuNi0xLjYgOC43LTQgLjQtLjIgMS0uMSAxLjQgLjFsMTQuOCA4LjhjLjUgLjMgMS4zIC4zIDEuOCAwTDM3NSA0MDhjLjUtLjMgLjktLjkgLjktMS42bDAtNjYuN2MwLS43LS4zLTEuMy0uOS0xLjZsLTU3LjgtMzMuM2MtLjUtLjMtMS4yLS4zLTEuOCAwbC01Ny44IDMzLjNjLS42IC4zLS45IDEtLjkgMS42bDAgNjYuN2MwIC42IC40IDEuMiAuOSAxLjVsMTUuOCA5LjFjOC42IDQuMyAxMy45LS44IDEzLjktNS44bDAtNjUuOWMwLS45IC43LTEuNyAxLjctMS43bDcuMyAwYy45IDAgMS43IC43IDEuNyAxLjdsMCA2NS45YzAgMTEuNS02LjIgMTgtMTcuMSAxOC0zLjMgMC02IDAtMTMuMy0zLjZsLTE1LjItOC43Yy0zLjctMi4yLTYuMS02LjItNi4xLTEwLjVsMC02Ni43YzAtNC4zIDIuMy04LjQgNi4xLTEwLjVsNTcuOC0zMy40YzMuNy0yLjEgOC41LTIuMSAxMi4xIDBsNTcuOCAzMy40YzMuNyAyLjIgNi4xIDYuMiA2LjEgMTAuNWwwIDY2LjdjMCA0LjMtMi4zIDguNC02LjEgMTAuNWwtNTcuOCAzMy40Yy0xLjcgMS4xLTMuOCAxLjctNiAxLjd6TTM2MyAzODYuMmMwLTEyLjUtOC40LTE1LjgtMjYuMi0xOC4yLTE4LTIuNC0xOS44LTMuNi0xOS44LTcuOCAwLTMuNSAxLjUtOC4xIDE0LjgtOC4xIDExLjkgMCAxNi4zIDIuNiAxOC4xIDEwLjYgLjIgLjggLjggMS4zIDEuNiAxLjNsNy41IDBjLjUgMCAuOS0uMiAxLjItLjUgLjMtLjQgLjUtLjggLjQtMS4zLTEuMi0xMy44LTEwLjMtMjAuMi0yOC44LTIwLjItMTYuNSAwLTI2LjMgNy0yNi4zIDE4LjYgMCAxMi43IDkuOCAxNi4xIDI1LjYgMTcuNyAxOC45IDEuOSAyMC40IDQuNiAyMC40IDguMyAwIDYuNS01LjIgOS4yLTE3LjQgOS4yLTE1LjMgMC0xOC43LTMuOC0xOS44LTExLjQtLjEtLjgtLjgtMS40LTEuNy0xLjRsLTcuNSAwYy0uOSAwLTEuNyAuNy0xLjcgMS43IDAgOS43IDUuMyAyMS4zIDMwLjYgMjEuMyAxOC41IDAgMjktNy4yIDI5LTE5Ljh6bTU0LjUtNTAuMWMwIDYuMS01IDExLjEtMTEuMSAxMS4xcy0xMS4xLTUtMTEuMS0xMS4xYzAtNi4zIDUuMi0xMS4xIDExLjEtMTEuMSA2LS4xIDExLjEgNC44IDExLjEgMTEuMXptLTEuOCAwYzAtNS4yLTQuMi05LjMtOS40LTkuMy01LjEgMC05LjMgNC4xLTkuMyA5LjNzNC4yIDkuNCA5LjMgOS40YzUuMi0uMSA5LjQtNC4zIDkuNC05LjR6bS00LjUgNi4ybC0yLjYgMGMtLjEtLjYtLjUtMy44LS41LTMuOS0uMi0uNy0uNC0xLjEtMS4zLTEuMWwtMi4yIDAgMCA1LTIuNCAwIDAtMTIuNSA0LjMgMGMxLjUgMCA0LjQgMCA0LjQgMy4zIDAgMi4zLTEuNSAyLjgtMi40IDMuMSAxLjcgLjEgMS44IDEuMiAyLjEgMi44IC4xIDEgLjMgMi43IC42IDMuM3ptLTIuOC04LjhjMC0xLjctMS4yLTEuNy0xLjgtMS43bC0yIDAgMCAzLjUgMS45IDBjMS42IDAgMS45LTEuMSAxLjktMS44ek0xMzcuMyAxOTFjMC0yLjctMS40LTUuMS0zLjctNi40TDcyLjMgMTQ5LjNjLTEtLjYtMi4yLS45LTMuNC0xbC0uNiAwYy0xLjIgMC0yLjMgLjQtMy40IDFMMy43IDE4NC42QzEuNCAxODUuOSAwIDE4OC40IDAgMTkxbC4xIDk1YzAgMS4zIC43IDIuNSAxLjggMy4yczIuNSAuNyAzLjcgMEw0MiAyNjguM2MyLjMtMS40IDMuNy0zLjggMy43LTYuNGwwLTQ0LjRjMC0yLjYgMS40LTUuMSAzLjctNi40bDE1LjUtOC45YzEuMi0uNyAyLjQtMSAzLjctMXMyLjYgLjMgMy43IDFsMTUuNSA4LjljMi4zIDEuMyAzLjcgMy44IDMuNyA2LjRsMCA0NC40YzAgMi42IDEuNCA1LjEgMy43IDYuNGwzNi40IDIwLjljMS4xIC43IDIuNiAuNyAzLjcgMCAxLjEtLjYgMS44LTEuOSAxLjgtMy4ybC4yLTk1ek00NzIuNSA4Ny4zbDAgMTc2LjRjMCAyLjYtMS40IDUuMS0zLjcgNi40bC02MS4zIDM1LjRjLTIuMyAxLjMtNS4xIDEuMy03LjQgMGwtNjEuMy0zNS40Yy0yLjMtMS4zLTMuNy0zLjgtMy43LTYuNGwwLTcwLjhjMC0yLjYgMS40LTUuMSAzLjctNi40bDYxLjMtMzUuNGMyLjMtMS4zIDUuMS0xLjMgNy40IDBsMTUuMyA4LjhjMS43IDEgMy45LS4zIDMuOS0yLjJsMC05NGMwLTIuOCAzLTQuNiA1LjUtMy4ybDM2LjUgMjAuNGMyLjMgMS4yIDMuOCAzLjcgMy44IDYuNHptLTQ2IDEyOC45YzAtLjctLjQtMS4zLS45LTEuNmwtMjEtMTIuMmMtLjYtLjMtMS4zLS4zLTEuOSAwbC0yMSAxMi4yYy0uNiAuMy0uOSAuOS0uOSAxLjZsMCAyNC4zYzAgLjcgLjQgMS4zIC45IDEuNmwyMSAxMi4xYy42IC4zIDEuMyAuMyAxLjggMGwyMS0xMi4xYy42LS4zIC45LS45IC45LTEuNmwwLTI0LjMgLjEgMHptMjA5LjgtLjdjMi4zLTEuMyAzLjctMy44IDMuNy02LjRsMC0xNy4xYzAtMi42LTEuNC01LjEtMy43LTYuNGwtNjAuOS0zNS40Yy0yLjMtMS4zLTUuMS0xLjMtNy40IDBsLTYxLjMgMzUuNGMtMi4zIDEuMy0zLjcgMy44LTMuNyA2LjRsMCA3MC44YzAgMi43IDEuNCA1LjEgMy43IDYuNGw2MC45IDM0LjdjMi4yIDEuMyA1IDEuMyA3LjMgMGwzNi44LTIwLjVjMi41LTEuNCAyLjUtNSAwLTYuNEw1NTAgMjQxLjZjLTEuMi0uNy0xLjktMS45LTEuOS0zLjJsMC0yMi4yYzAtMS4zIC43LTIuNSAxLjktMy4ybDE5LjItMTEuMWMxLjEtLjcgMi42LS43IDMuNyAwTDU5Mi4xIDIxM2MxLjEgLjcgMS45IDEuOSAxLjkgMy4ybDAgMTcuNGMwIDIuOCAzLjEgNC42IDUuNiAzLjJsMzYuNy0yMS4zek01NTkgMjE5Yy0uNCAuMy0uNyAuNy0uNyAxLjJsMCAxMy42YzAgLjUgLjMgMSAuNyAxLjJsMTEuOCA2LjhjLjQgLjMgMSAuMyAxLjQgMEw1ODQgMjM1Yy40LS4zIC43LS43IC43LTEuMmwwLTEzLjZjMC0uNS0uMy0xLS43LTEuMmwtMTEuOC02LjhjLS40LS4zLTEtLjMtMS40IDBMNTU5IDIxOXpNMzA0LjggMjYyLjVsMC03MC40YzAtMi42LTEuNi01LjEtMy45LTYuNGwtNjEuMS0zNS4yYy0yLjEtMS4yLTUtMS40LTcuNCAwbC02MS4xIDM1LjJjLTIuMyAxLjMtMy45IDMuNy0zLjkgNi40bDAgNzAuNGMwIDIuOCAxLjkgNS4yIDQgNi40bDYxLjIgMzUuMmMyLjQgMS40IDUuMiAxLjMgNy40IDBsNjEtMzUuMmMxLjgtMSAzLjEtMi43IDMuNi00LjcgLjEtLjUgLjItMS4xIC4yLTEuN3pNMjMwLjUgMTM3LjZsLS44IC41IDEuMSAwLS4zLS41em03Ni4yIDEzMC4ybC0uNC0uNyAwIC45IC40LS4yeiJdCiAgICB9OwogICAgZmFDb2RlcGVuID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNvZGVwZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjYiIsICJNNTAyLjMgMTU5LjdsLTIzNC0xNTZjLTgtNC45LTE2LjUtNS0yNC42IDBsLTIzNCAxNTZjLTYgNC05LjcgMTEuMS05LjcgMTguM0wwIDMzNGMwIDcuMSAzLjcgMTQuMyA5LjcgMTguM2wyMzQgMTU2YzggNC45IDE2LjUgNSAyNC42IDBsMjM0LTE1NmM2LTQgOS43LTExLjEgOS43LTE4LjNsMC0xNTZjMC03LjEtMy43LTE0LjMtOS43LTE4LjN6TTI3OCA2My4xbDE3Mi4zIDExNC45LTc2LjkgNTEuNC05NS40LTYzLjcgMC0xMDIuNnptLTQ0IDBMMjM0IDE2NS43IDEzOC42IDIyOS40IDYxLjcgMTc4IDIzNCA2My4xek00NCAyMTkuMUw5OS4xIDI1NiA0NCAyOTIuOCA0NCAyMTkuMXpNMjM0IDQ0OC44TDYxLjcgMzM0IDEzOC42IDI4Mi42IDIzNCAzNDYuMyAyMzQgNDQ4Ljh6TTI1NiAzMDhsLTc3LjctNTIgNzcuNy01MiA3Ny43IDUyLTc3LjcgNTJ6bTIyIDE0MC45bDAtMTAyLjYgOTUuNC02My43IDc2LjkgNTEuNC0xNzIuMyAxMTQuOXptMTkwLTE1NmwtNTUuMS0zNi45IDU1LjEtMzYuOSAwIDczLjd6Il0KICAgIH07CiAgICBmYVJhdmVscnkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicmF2ZWxyeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMmQ5IiwgIk00OTguNiAyMzQuMmMtMS4yLTEwLjMtMS43LTIwLjgtMy43LTMxLTIuNS0xMi40LTUuNy0yNC42LTkuNi0zNi42LTYuOC0yMC45LTE3LjItNDAuMy0zMC45LTU3LjUtNS45LTcuNi0xMi4xLTE0LjgtMTguOC0yMS43LTE0LjEtMTQtMzAtMjYuMS00Ny4xLTM2LjEtMTcuOC0xMC42LTM2LjgtMTguOS01Ni43LTI0LjctMTEtMy4xLTIyLjMtNS40LTMzLjUtNy42LTYuOC0xLjMtMTMuNy0xLjctMjAuNi0yLjUtLjMgMC0uNi0uNC0uOS0uNi0xMC44IDAtMjEuNSAwLTMyLjMgMC0yLjQgLjQtNC44IC45LTcuMiAxLjItMTEuNiAxLjItMjMuMSAzLjYtMzQuMyA3LjEtMTMuOCA0LjEtMjcuMSA5LjYtMzkuOCAxNi40LTEzLjMgNy0yNi4xIDE1LjEtMzguMSAyNC4yLTYuMiA0LjYtMTIuMyA5LjQtMTggMTQuNS0xMC4yIDkuMi0yMC40IDE4LjQtMjkuOSAyOC4zLTEyLjggMTMuMy0yNC4xIDI4LjEtMzMuNiA0NC04LjYgMTQtMTUuNSAyOS0yMC41IDQ0LjYtNy4yIDIyLjctMTAuMyA0Ni42LTkuMiA3MC4zIC42IDEzLjUgMiAyNi45IDQuNCA0MC4yIDMuNCAxOC40IDkgMzYuMyAxNi43IDUzLjMgMTMuNiAyOS4yIDMyLjEgNTEuNSA1MC40IDY3LjkgMTIuOCAxMS42IDI2LjggMjEuOSA0MS44IDMwLjYgMTcuNyAxMC40IDM2LjQgMTguOSA1NS45IDI1LjMgMTMuMyA0LjMgMjYuOSA3LjYgNDAuNiA5LjggNi4xIDEgMTIuMyAxLjMgMTguNCAxLjkgLjQgLjEgLjggLjMgMS4yIC42bDMyLjMgMGMyLjUtLjQgNS0uOSA3LjUtMS4xIDE2LjMtMS4zIDMyLjEtNS4zIDQ3LjUtMTAuNyAxNy4yLTUuOSAzMy43LTEzLjkgNDktMjMuOCA5LjctNi40IDE5LjQtMTMuMSAyOC43LTIwLjEgNS44LTQuMyAxMS05LjUgMTYuMy0xNC41IDQtMy43IDcuOC03LjYgMTEuNS0xMS41IDEyLTEyLjcgMjIuNi0yNi42IDMxLjQtNDEuNiA5LjUtMTYgMTcuNC0zMi45IDIyLjMtNTAuOSAyLjktMTAuNCA0LjktMjEgNy0zMS43IDEtNS4zIDEuMy0xMC43IDEuOS0xNi4xIDAtLjMgLjQtLjYgLjYtLjlsMC0zNy4xYy0uMi0uNi0uNC0xLjItLjYtMS44em0tMTYxLjEtMS4ycy0xNi42LTMtMjguNS0zYy0yNy4yIDAtMzMuNiAxNC45LTMzLjYgMzdsMCA5My43LTczLjUgMCAwLTE5MC43IDczLjUgMCAwIDMxLjljOC45LTI2LjggMjYuOC0zNi4yIDYyLTM2LjJsMCA2Ny4zeiJdCiAgICB9OwogICAgZmFBbGlwYXkgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYWxpcGF5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY2NDIiLCAiTTM3Ny43IDMyTDcwLjMgMzJDMzEuNCAzMiAwIDYzLjQgMCAxMDIuM0wwIDQwOS43QzAgNDQ4LjYgMzEuNCA0ODAgNzAuMyA0ODBsMzA3LjUgMGMzOC41IDAgNjkuOC0zMS4xIDcwLjMtNjkuNi00Ni0yNS42LTExMC42LTYwLjMtMTcxLjYtODguNC0zMi4xIDQ0LTg0LjEgODEtMTQ4LjYgODEtNzAuNiAwLTkzLjctNDUuMy05Ny03Ni40LTQtMzkgMTQuOS04MS41IDk5LjUtODEuNSAzNS40IDAgNzkuNCAxMC4yIDEyNy4xIDI1IDE2LjUtMzAuMSAyNi41LTYwLjMgMjYuNS02MC4zbC0xNzguMiAwIDAtMTYuNyA5Mi4xIDAgMC0zMS4yLTEwOS40IDAgMC0xOSAxMDkuNCAwIDAtNTAuNCA1MC45IDAgMCA1MC40IDEwOS40IDAgMCAxOS0xMDkuNCAwIDAgMzEuMiA4OC44IDBzLTE1LjIgNDYuNi0zOC4zIDkwLjljNDguOSAxNi43IDEwMCAzNiAxNDguNiA1Mi43bDAtMjM0LjRjLjItMzguNy0zMS4yLTcwLjMtNjkuOS03MC4zek00Ny4zIDMyM2MxIDIwLjIgMTAuMiA1My43IDY5LjkgNTMuNyA1Mi4xIDAgOTIuNi0zOS43IDExNy45LTcyLjktNDQuNi0xOC43LTg0LjUtMzEuNC0xMDkuNC0zMS40LTY3LjQgMC03OS40IDMzLjEtNzguNCA1MC42eiJdCiAgICB9OwogICAgZmFDY0FtZXggPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiY2MtYW1leCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWYzIiwgIk0wIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0ODAgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEuMS02MS43IDAtMzEuOS0zNS4xLTMxLjkgMzUuMS0yMDMuNyAwIDAtMTYzLjgtNjUuOCAwIDgxLjctMTg0LjcgNzguNiAwIDI4LjEgNjMuMiAwLTYzLjIgOTcuMiAwIDE2LjkgNDcuNiAxNy00Ny42IDc1LjUgMCAwLTIuNGMwLTI2LjUtMjEuNS00OC00OC00OEw0OCAzMkMyMS41IDMyIDAgNTMuNSAwIDgwTDAgNDMyem00NDAuNC0yMS43bDQyLjItNDYuMyA0MiA0Ni4zIDUxLjQgMC02OC03Mi4xIDY4LTcyLjEtNTAuNiAwLTQyIDQ2LjctNDEuNS00Ni43LTUxLjQgMCA2Ny41IDcyLjUtNjcuNCA3MS42IDAtMzMuMS04MyAwIDAtMjIuMiA4MC45IDAgMC0zMi4zLTgwLjkgMCAwLTIyLjQgODMgMCAwLTMzLjEtMTIyIDAgMCAxNDMuMiAxNzEuOCAwem05Ni4zLTcybDM5LjMgNDEuOSAwLTgzLjMtMzkuMyA0MS40em0tMzYuMy05MmwzNi45LTEwMC42IDAgMTAwLjYgMzguNyAwIDAtMTQzLjMtNjAuMiAwLTMyLjIgODkuMy0zMS45LTg5LjMtNjEuMiAwIDAgMTQzLjEtNjMuMi0xNDMuMS01MS4yIDAtNjIuNCAxNDMuMyA0MyAwIDExLjktMjguNyA2NS45IDAgMTIgMjguNyA4Mi43IDAgMC0xMDAuMyAzNi44IDEwMC4zIDM0LjQgMHpNMjgyIDE4NS40bDE5LjUtNDYuOSAxOS40IDQ2LjktMzguOSAweiJdCiAgICB9OwogICAgZmFQaWVkUGlwZXJBbHQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGllZC1waXBlci1hbHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFhOCIsICJNMjQ0IDI0NmMtMy4yLTItNi4zLTIuOS0xMC4xLTIuOS02LjYgMC0xMi42IDMuMi0xOS4zIDMuN2wxLjcgNC45IDI3LjctNS43ek0zNzkuOSA0NDMuOWMtMTkgMC02NC4xIDkuNS03OS45IDE5LjhsNi45IDQ1LjFjMzUuNyA2LjEgNzAuMSAzLjYgMTA2LTkuOC00LjgtMTAtMjMuNS01NS4xLTMzLTU1LjF6TTM0MC44IDE3N2M2LjYgMi44IDExLjUgOS4yIDIyLjcgMjIuMSAyLTEuNCA3LjUtNS4yIDcuNS04LjYgMC00LjktMTEuOC0xMy4yLTEzLjItMjMgMTEuMi01LjcgMjUuMi02IDM3LjYtOC45IDY4LjEtMTYuNCAxMTYuMy01Mi45IDE0Ni44LTExNi43IDYuMS0xMi42IDExLjgtMjUuOCAxMi40LTM5LjlsLTIgMi42Yy0yOC40IDUwLTMzIDYzLjItODEuMyAxMDAtMzEuOSAyNC40LTY5LjIgNDAuMi0xMDYuNiA1NC42bC02LjMtLjMgMC0yMS44Yy0xOS42IDEuNi0xOS43LTE0LjYtMzEuNi0yMy0xOC43IDIwLjYtMzEuNiA0MC44LTU4LjkgNTEuMS0xMi43IDQuOC0xOS42IDEwLTI1LjkgMjEuOCAzNC45LTE2LjQgOTEuMi0xMy41IDk4LjgtMTB6TTU1NS41IDBsLS42IDEuMS0uMyAuOSAuNi0uNiAuMy0xLjR6TTQ5Ni4zIDM4Mi4xYy0zMy45LTU2LjktNzUuMy0xMTguNC0xNTAtMTE1LjVsLS4zLTZjLTEuMS0xMy41IDMyLjggMy4yIDM1LjEtMzFsLTE0LjQgNy4yYy0xOS44LTQ1LjctOC42LTU0LjMtNjUuNS01NC4zLTE0LjcgMC0yNi43IDEuNy00MS40IDQuNiAyLjkgMTguNiAyLjIgMzYuNy0xMC45IDUwLjNsMTkuNSA1LjVjLTEuNyAzLjItMi45IDYuMy0yLjkgOS44IDAgMjEgNDIuOCAyLjkgNDIuOCAzMy42IDAgMTguNC0zNi44IDYwLjEtNTQuOSA2MC4xLTggMC01My43LTUwLTUzLjQtNjAuMWwuMy00LjYgNTIuMy0xMS41YzEzLTIuNiAxMi4zLTIyLjctMi45LTIyLjctMy43IDAtNDMuMSA5LjItNDkuNCAxMC42LTItNS4yLTcuNS0xNC4xLTEzLjgtMTQuMS0zLjIgMC02LjMgMy4yLTkuNSA0LTkuMiAyLjYtMzEgMi45LTIxLjUgMjAuMUwxNS45IDI5OC41Yy01LjUgMS4xLTguOSA2LjMtOC45IDExLjggMCA2IDUuNSAxMC45IDExLjUgMTAuOSA4IDAgMTMxLjMtMjguNCAxNDcuNC0zMi4yIDIuNiAzLjIgNC42IDYuMyA3LjggOC42IDIwLjEgMTQuNCA1OS44IDg1LjkgNzYuNCA4NS45IDI0LjEgMCA1OC0yMi40IDcxLjMtNDEuOSAzLjItNC4zIDYuOS03LjUgMTIuNC02LjkgLjYgMTMuOC0zMS42IDM0LjItMzMgNDMuNy0xLjQgMTAuMi0xIDM1LjItLjMgNDEuMSAyNi43IDguMSA1Mi0zLjYgNzcuOS0yLjkgNC4zLTIxIDEwLjYtNDEuOSA5LjgtNjMuNWwtLjMtOS41Yy0xLjQtMzQuMi0xMC45LTM4LjUtMzQuOC01OC42LTEuMS0xLjEtMi42LTIuNi0zLjctNCAyLjItMS40IDEuMS0xIDQuNi0xLjcgODguNSAwIDU2LjMgMTgzLjYgMTExLjUgMjI5LjkgMzMuMS0xNSA3Mi41LTI3LjkgMTAzLjUtNDcuMi0yOS0yNS42LTUyLjYtNDUuNy03Mi43LTc5Ljl6TTMwMC4xIDQyOC4ybDAgMjcuMiAxMS44LTMuNC0yLjktMjMuOC04LjkgMHpNMjMxLjQgMjc3LjhsMjQuMSA2MS4yIDIxLTEzLjgtMzEuMy01MC45LTEzLjggMy41em04NC40IDE1NC45bDIgMTIuNGM5LTEuNSA1OC40LTYuNiA1OC40LTE0LjEgMC0xLjQtLjYtMy4yLS45LTQuNi0yNi44IDAtMzYuOSAzLjgtNTkuNSA2LjN6Il0KICAgIH07CiAgICBmYUxldHRlcmJveGQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAibGV0dGVyYm94ZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjJkIiwgIk01MjEuMyAxMjhDNTg2LjkgMTI4IDY0MCAxODEuMSA2NDAgMjQ2LjZTNTg2LjkgMzY1LjIgNTIxLjMgMzY1LjJjLTQyLjUgMC03OS43LTIyLjMtMTAwLjctNTUuOCAxMS40LTE4LjIgMTgtMzkuNyAxOC02Mi44cy02LjYtNDQuNi0xOC02Mi44bC44LTEuMmMyMC44LTMyLjMgNTYuOC01My45IDk3LjktNTQuNmwyIDB6TTMyMCAxMjhjNDIuNSAwIDc5LjcgMjIuMyAxMDAuNyA1NS44LTExLjQgMTguMi0xOCAzOS43LTE4IDYyLjhzNi42IDQ0LjYgMTggNjIuOGwtLjggMS4yYy0yMC44IDMyLjMtNTYuOCA1My45LTk3LjkgNTQuNmwtMiAwYy00Mi41IDAtNzkuNy0yMi4zLTEwMC43LTU1LjggMTEuNC0xOC4yIDE4LTM5LjcgMTgtNjIuOHMtNi42LTQ0LjYtMTgtNjIuOGwuOC0xLjJjMjAuOC0zMi4zIDU2LjgtNTMuOSA5Ny45LTU0LjZsMiAwem0tMjAxLjMgMGM0Mi41IDAgNzkuNyAyMi4zIDEwMC43IDU1LjgtMTEuNCAxOC4yLTE4IDM5LjctMTggNjIuOHM2LjYgNDQuNiAxOCA2Mi44bC0uOCAxLjJjLTIwLjggMzIuMy01Ni44IDUzLjktOTcuOSA1NC42bC0yIDBDNTMuMSAzNjUuMSAwIDMxMi4xIDAgMjQ2LjZTNTMuMSAxMjggMTE4LjcgMTI4eiJdCiAgICB9OwogICAgZmFPcGVyYSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJvcGVyYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjZhIiwgIk0zMjEuOSAzMi43Yy0xNzAuMiAwLTI1Mi42IDIyMy44LTE0Ny41IDM1NS4xIDM2LjUgNDUuNCA4OC42IDc1LjYgMTQ3LjUgNzUuNiAzNi4zIDAgNzAuMy0xMS4xIDk5LjQtMzAuNC00My44IDM5LjItMTAxLjkgNjMtMTY1LjMgNjMtMy45IDAtOCAwLTExLjktLjMtMTMxLjUtNi4xLTIzNi4xLTExNC42LTIzNi4xLTI0Ny43IDAtMTM3IDExMS0yNDggMjQ4LTI0OGwuOCAwYzYzLjEgLjMgMTIwLjcgMjQuMSAxNjQuNCA2My4xLTI5LTE5LjQtNjMuMS0zMC40LTk5LjMtMzAuNHpNNDIzLjcgNDMwLjRjLTQwLjkgMjQuNy05MC43IDIzLjYtMTMyLTUuOCA1Ni4yLTIwLjUgOTcuNy05MS42IDk3LjctMTc2LjYgMC04NC43LTQxLjItMTU1LjgtOTcuNC0xNzYuNiA0MS44LTI5LjIgOTEuMi0zMC4zIDEzMi45LTUgMTA1LjkgOTguNyAxMDUuNSAyNjUuNy0xLjIgMzY0eiJdCiAgICB9OwogICAgZmFXZWlibyA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJ3ZWlibyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMThhIiwgIk00MDcgMTc3LjZjNy42LTI0LTEzLjQtNDYuOC0zNy40LTQxLjctMjIgNC44LTI4LjgtMjguMS03LjEtMzIuOCA1MC4xLTEwLjkgOTIuMyAzNy4xIDc2LjUgODQuOC02LjggMjEuMi0zOC44IDEwLjgtMzItMTAuM3pNMjE0LjggNDQ2LjdjLTEwNi4zIDAtMjE0LjgtNTEuNC0yMTQuOC0xMzYuMyAwLTQ0LjMgMjgtOTUuNCA3Ni4zLTE0My43IDk5LjctOTkuNyAyMDMuMi0xMDAuOSAxNzMuNi01LjctNCAxMy4xIDEyLjMgNS43IDEyLjMgNiA3OS41LTMzLjYgMTQwLjUtMTYuOCAxMTQgNTEuNC0zLjcgOS40IDEuMSAxMC45IDguMyAxMy4xIDEzNS43IDQyLjMgMzQuOCAyMTUuMi0xNjkuNyAyMTUuMnpNMzU4LjUgMzAwLjRjLTUuNC01NS43LTc4LjUtOTQtMTYzLjQtODUuNy04NC44IDguNi0xNDguOCA2MC4zLTE0My40IDExNnM3OC41IDk0IDE2My40IDg1LjdjODQuOC04LjYgMTQ4LjgtNjAuMyAxNDMuNC0xMTZ6TTM0Ny45IDM1LjFjLTI1LjkgNS42LTE2LjggNDMuNyA4LjMgMzguMyA3Mi4zLTE1LjIgMTM0LjggNTIuOCAxMTEuNyAxMjQtNy40IDI0LjIgMjkuMSAzNyAzNy40IDEyIDMxLjktOTkuOC01NS4xLTE5NS45LTE1Ny40LTE3NC4zem0tNzguNSAzMTFjLTE3LjEgMzguOC02Ni44IDYwLTEwOS4xIDQ2LjMtNDAuOC0xMy4xLTU4LTUzLjQtNDAuMy04OS43IDE3LjctMzUuNCA2My4xLTU1LjQgMTAzLjQtNDUuMSA0MiAxMC44IDYzLjEgNTAuMiA0NiA4OC41em0tODYuMy0zMGMtMTIuOS01LjQtMzAgLjMtMzggMTIuOS04LjMgMTIuOS00LjMgMjggOC42IDM0IDEzLjEgNiAzMC44IC4zIDM5LjEtMTIuOSA4LTEzLjEgMy43LTI4LjMtOS43LTM0em0zMi42LTEzLjRjLTUuMS0xLjctMTEuNCAuNi0xNC4zIDUuNC0yLjkgNS4xLTEuNCAxMC42IDMuNyAxMi45IDUuMSAyIDExLjctLjMgMTQuNi01LjQgMi44LTUuMiAxLjEtMTAuOS00LTEyLjl6Il0KICAgIH07CiAgICBmYVJlYWRtZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJyZWFkbWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjRkNSIsICJNNTI4LjMgNDYuNWwtMTM5LjggMGMtNDguMSAwLTg5LjkgMzMuMy0xMDAuNCA4MC4zLTEwLjYtNDctNTIuMy04MC4zLTEwMC40LTgwLjNMNDggNDYuNUMyMS41IDQ2LjUgMCA2OCAwIDk0LjVMMCAzNDAuM2MwIDI2LjUgMjEuNSA0OCA0OCA0OGw4OS43IDBjMTAyLjIgMCAxMzIuNyAyNC40IDE0Ny4zIDc1IC43IDIuOCA1LjIgMi44IDYgMCAxNC43LTUwLjYgNDUuMi03NSAxNDcuMy03NWw4OS43IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNDUuN2MwLTI2LjQtMjEuMy00Ny45LTQ3LjctNDguMXpNMjQyIDMxMS45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjljMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOS0uMSAwem0wLTYwLjljMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHpNNTAxLjMgMzExLjhjMCAxLjktMS41IDMuNS0zLjUgMy41bC0xNjAuMyAwYy0xLjkgMC0zLjUtMS41LTMuNS0zLjVsMC0yMi45YzAtMS45IDEuNS0zLjUgMy41LTMuNWwxNjAuNCAwYzEuOSAwIDMuNSAxLjUgMy41IDMuNWwwIDIyLjktLjEgMHptMC02MC45YzAgMS45LTEuNSAzLjUtMy41IDMuNWwtMTYwLjMgMGMtMS45IDAtMy41LTEuNS0zLjUtMy41bDAtMjIuOWMwLTEuOSAxLjUtMy41IDMuNS0zLjVsMTYwLjQgMGMxLjkgMCAzLjUgMS41IDMuNSAzLjVsMCAyMi45LS4xIDB6bTAtNjAuOWMwIDEuOS0xLjUgMy41LTMuNSAzLjVsLTE2MC4zIDBjLTEuOSAwLTMuNS0xLjUtMy41LTMuNWwwLTIyLjhjMC0xLjkgMS41LTMuNSAzLjUtMy41bDE2MC40IDBjMS45IDAgMy41IDEuNSAzLjUgMy41bDAgMjIuOC0uMSAweiJdCiAgICB9OwogICAgZmFHb2xhbmcgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29sYW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0MGYiLCAiTTQwMC4xIDE5NC44Yy0xMC45IDIuOC0xOS45IDQuMy0yOS4xIDcuNi03LjMgMS45LTE0LjcgMy45LTIzLjIgNi4xbC0uNiAuMWMtNC4yIDEuMi00LjYgMS4zLTguNS0zLjItNC43LTUuMy04LjEtOC43LTE0LjYtMTEuOS0xOS43LTkuNi0zOC43LTYuOC01Ni40IDQuNy0yMS4yIDEzLjctMzIuMSAzNC0zMS44IDU5LjIgLjMgMjUgMTcuNCA0NS41IDQxLjIgNDguOSAyMiAyLjggMzkuOC00LjYgNTMuOC0yMC41IDIuMS0yLjYgNC01LjMgNi4xLTguMyAuOC0xIDEuNS0yLjEgMi4zLTMuM2wtNjAuMSAwYy02LjUgMC04LjEtNC01LjktOS4zIDQtOS43IDExLjUtMjUuOSAxNS45LTM0IC45LTEuOCAzLjEtNS44IDYuOS01LjhsMTAxLjEgMGM0LjUtMTMuNCAxMS44LTI2LjkgMjEuNi0zOS43IDIyLjctMjkuOSA0OS4zLTQ1LjUgODcuMi01MiAzMS44LTUuNiA2MS43LTIuNSA4OC45IDE1LjkgMjQuNiAxNi44IDM5LjggMzkuNiA0My45IDY5LjUgNS4zIDQyLjEtNi45IDc2LjMtMzYuNyAxMDUuNi0xOS43IDIwLjktNDQuOSAzNC03My45IDM5LjktNS42IDEtMTEuMSAxLjUtMTYuNSAyLTIuOSAuMi01LjcgLjUtOC41IC44LTI4LjMtLjYtNTQuMi04LjctNzYtMjcuNC0xNS4zLTEzLjMtMjUuOS0yOS42LTMxLjEtNDguNS0zLjcgNy4zLTggMTQuNC0xNCAyMS4xLTIxLjYgMjkuNi01MC45IDQ4LTg3LjkgNTIuOS0zMC42IDQuMS01OC45LTEuOC04My45LTIwLjUtMjMtMTcuNS0zNi4xLTQwLjUtMzkuNS02OS4yLTQuMS0zNCA1LjktNjUuNCAyNi40LTkxLjMgMjIuMi0yOSA1MS41LTQ3LjQgODcuMy01My45IDI5LjMtNi4yIDU3LjMtMS45IDgyLjYgMTUuMyAxNi41IDEwLjkgMjguMyAyNS44IDM2LjEgNDMuOSAxLjkgMi44IC42IDQuNC0zLjEgNS4zek00OC4zIDIwMC40Yy0xLjMgMC0xLjYtLjYtLjktMS42bDYuNi04LjRjLjYtLjkgMi4yLTEuNSAzLjQtMS41bDExMS4zIDBjMS4yIDAgMS41IC45IC45IDEuOGwtNS4zIDguMWMtLjYgMS0yLjIgMS45LTMuMSAxLjlsLTExMi44LS4zek0xLjIgMjI5LjFjLTEuMiAwLTEuNi0uNy0uOS0xLjZsNi41LTguNGMuNi0uOSAyLjItMS42IDMuNC0xLjZsMTQyLjEgMGMxLjIgMCAxLjggMSAxLjUgMS45bC0yLjUgNy41Yy0uMyAxLjItMS41IDEuOS0yLjggMS45TDEuMiAyMjkuMXptNzQuNSAyNi44Yy0uNiAuOS0uMyAxLjggLjkgMS44bDY4IC4zYy45IDAgMi4yLS45IDIuMi0yLjFsLjYtNy41YzAtMS4zLS42LTIuMi0xLjktMi4ybC02Mi4zIDBjLTEuMiAwLTIuNSAuOS0zLjEgMS45bC00LjQgNy44em01MDEuNS0xOGMtLjItMi42LS4zLTQuOC0uNy03LTUuNi0zMC44LTM0LTQ4LjMtNjMuNi00MS40LTI5IDYuNS00Ny43IDI0LjktNTQuNSA1NC4yLTUuNiAyNC4zIDYuMiA0OC45IDI4LjYgNTguOSAxNy4yIDcuNSAzNC4zIDYuNiA1MC44LTEuOSAyNC42LTEzLjYgMzgtMzIuNyAzOS42LTU5LjUtLjEtMS4yLS4xLTIuMy0uMi0zLjN6Il0KICAgIH07CiAgICBmYVN0YWNrRXhjaGFuZ2UgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3RhY2stZXhjaGFuZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjE4ZCIsICJNMTguMSAzMzIuM2w0MTIuNyAwIDAgMjJjMCAzNy43LTI5LjMgNjgtNjUuMyA2OGwtMTkgMC04Ni44IDg5LjcgMC04OS43LTE3Ni4zIDBjLTM2IDAtNjUuMy0zMC4zLTY1LjMtNjhsMC0yMnptMC0yMy42bDQxMi43IDAgMC04NS00MTIuNyAwIDAgODV6bTAtMTA5LjRsNDEyLjcgMCAwLTg1LTQxMi43IDAgMCA4NXpNMzY1LjQgMEw4My40IDBjLTM2IDAtNjUuMyAzMC4zLTY1LjMgNjcuN2wwIDIyLjMgNDEyLjcgMCAwLTIyLjNDNDMwLjcgMzAuMyA0MDEuNCAwIDM2NS40IDB6Il0KICAgIH07CiAgICBmYUd1bHAgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ3VscCIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICJmM2FlIiwgIk0yMTAgMzkxLjFsLTE0LjEgMjQuNi00LjYgODAuMmMwIDguOS0yOC4zIDE2LjEtNjMuMSAxNi4xcy02My4xLTcuMi02My4xLTE2LjFsLTUuOC03OS40LTE0LjktMjUuNGM0MS4yIDE3LjMgMTI2IDE2LjcgMTY1LjYgMHpNMTQgMTM3LjhMMjcuNiAyNjMuM2M1LjktMjAgMjAuOC00NyA0MC01NS4yIDYuMy0yLjcgMTIuNy0yLjcgMTguNyAuOSA1LjIgMyA5LjYgOS4zIDEwLjEgMTEuOCAxLjIgNi41LTIgOS4xLTQuNSA5LjEtMyAwLTUuMy00LjYtNi44LTcuMy00LjEtNy4zLTEwLjMtNy42LTE2LjktMi44LTYuOSA1LTEyLjkgMTMuNC0xNy4xIDIwLjctNS4xIDguOC05LjQgMTguNS0xMiAyOC4yLTEuNSA1LjYtMi45IDE0LjYtLjYgMTkuOSAxIDIuMiAyLjUgMy42IDQuOSAzLjYgNSAwIDEyLjMtNi42IDE1LjgtMTAuMSA0LjUtNC41IDEwLjMtMTEuNSAxMi41LTE2bDUuMi0xNS41YzIuNi02LjggOS45LTUuNiA5LjkgMCAwIDEwLjItMy43IDEzLjYtMTAgMzQuNy01LjggMTkuNS03LjYgMjUuOC03LjYgMjUuOC0uNyAyLjgtMy40IDcuNS02LjMgNy41LTEuMiAwLTIuMS0uNC0yLjYtMS4yLTEtMS40LS45LTUuMy0uOC02LjMgLjItMy4yIDYuMy0yMi4yIDcuMy0yNS4yLTIgMi4yLTQuMSA0LjQtNi40IDYuNi01LjQgNS4xLTE0LjEgMTEuOC0yMS41IDExLjgtMy40IDAtNS42LS45LTcuNy0yLjRsNy42IDc5LjZjMiA1IDM5LjIgMTcuMSA4OC4yIDE3LjEgNDkuMSAwIDg2LjMtMTIuMiA4OC4yLTE3LjFsMTAuOS05NC42Yy01LjcgNS4yLTEyLjMgMTEuNi0xOS42IDE0LjgtNS40IDIuMy0xNy40IDMuOC0xNy40LTUuNyAwLTUuMiA5LjEtMTQuOCAxNC40LTIxLjUgMS40LTEuNyA0LjctNS45IDQuNy04LjEgMC0yLjktNi0yLjItMTEuNyAyLjUtMy4yIDIuNy02LjIgNi4zLTguNyA5LjctNC4zIDYtNi42IDExLjItOC41IDE1LjUtNi4yIDE0LjItNC4xIDguNi05LjEgMjItNSAxMy4zLTQuMiAxMS44LTUuMiAxNC0uOSAxLjktMi4yIDMuNS00IDQuNS0xLjkgMS00LjUgLjktNi4xLS4zLS45LS42LTEuMy0xLjktMS4zLTMuNyAwLS45IC4xLTEuOCAuMy0yLjcgMS41LTYuMSA3LjgtMTguMSAxNS0zNC4zIDEuNi0zLjcgMS0yLjYgLjgtMi4zLTYuMiA2LTEwLjkgOC45LTE0LjQgMTAuNS01LjggMi42LTEzIDIuNi0xNC41LTQuMS0uMS0uNC0uMS0uOC0uMi0xLjItMTEuOCA5LjItMjQuMyAxMS43LTIwLTguMS00LjYgOC4yLTEyLjYgMTQuOS0yMi40IDE0LjktNC4xIDAtNy4xLTEuNC04LjYtNS4xLTIuMy01LjUgMS4zLTE0LjkgNC42LTIzLjggMS43LTQuNSA0LTkuOSA3LjEtMTYuMiAxLjYtMy40IDQuMi01LjQgNy42LTQuNSAuNiAuMiAxLjEgLjQgMS42IC43IDIuNiAxLjggMS42IDQuNSAuMyA3LjItMy44IDcuNS03LjEgMTMtOS4zIDIwLjgtLjkgMy4zLTIgOSAxLjUgOSAyLjQgMCA0LjctLjggNi45LTIuNCA0LjYtMy40IDguMy04LjUgMTEuMS0xMy41IDItMy42IDQuNC04LjMgNS42LTEyLjMgLjUtMS43IDEuMS0zLjMgMS44LTQuOCAxLjEtMi41IDIuNi01LjEgNS4yLTUuMSAxLjMgMCAyLjQgLjUgMy4yIDEuNSAxLjcgMi4yIDEuMyA0LjUgLjQgNi45LTIgNS42LTQuNyAxMC42LTYuOSAxNi43LTEuMyAzLjUtMi43IDgtMi43IDExLjcgMCAzLjQgMy43IDIuNiA2LjggMS4yIDIuNC0xLjEgNC44LTIuOCA2LjgtNC41IDEuMi00LjkgLjktMy44IDI2LjQtNjguMiAxLjMtMy4zIDMuNy00LjcgNi4xLTQuNyAxLjIgMCAyLjIgLjQgMy4yIDEuMSAxLjcgMS4zIDEuNyA0LjEgMSA2LjItLjcgMS45LS42IDEuMy00LjUgMTAuNS01LjIgMTIuMS04LjYgMjAuOC0xMy4yIDMxLjktMS45IDQuNi03LjcgMTguOS04LjcgMjIuMy0uNiAyLjItMS4zIDUuOCAxIDUuOCA1LjQgMCAxOS4zLTEzLjEgMjMuMS0xNyAuMi0uMyAuNS0uNCAuOS0uNiAuNi0xLjkgMS4yLTMuNyAxLjctNS41IDEuNC0zLjggMi43LTguMiA1LjMtMTEuMyAuOC0xIDEuNy0xLjYgMi43LTEuNiAyLjggMCA0LjIgMS4yIDQuMiA0IDAgMS4xLS43IDUuMS0xLjEgNi4yIDEuNC0xLjUgMi45LTMgNC41LTQuNSAxNS0xMy45IDI1LjctNi44IDI1LjcgLjIgMCA3LjQtOC45IDE3LjctMTMuOCAyMy40LTEuNiAxLjktNC45IDUuNC01IDYuNCAwIDEuMyAuOSAxLjggMi4yIDEuOCAyIDAgNi40LTMuNSA4LTQuNyA1LTMuOSAxMS44LTkuOSAxNi42LTE0LjFsMTQuOC0xMzYuOGMtMzAuNSAxNy4xLTE5Ny42IDE3LjItMjI4LjMgLjJ6bTIyOS43LTguNWMwIDIxLTIzMS4yIDIxLTIzMS4yIDAgMC04LjggNTEuOC0xNS45IDExNS42LTE1LjkgOSAwIDE3LjggLjEgMjYuMyAuNEwxNjcgNjUuMSAyMjguMyAuNmMxLjQtMS40IDUuOC0uMiA5LjkgMy41czYuNiA3LjkgNS4zIDkuM2wtLjEgLjEtNTcuMyA2MC41LTEwIDQwLjdjMzkuOSAyLjYgNjcuNiA4LjEgNjcuNiAxNC42em0tNjkuNCA0LjZjMC0uOC0uOS0xLjUtMi41LTIuMWwtLjIgLjhjMCAxLjMtNSAyLjQtMTEuMSAyLjRzLTExLjEtMS4xLTExLjEtMi40YzAtLjEgMC0uMiAuMS0uM2wuMi0uN2MtMS44IC42LTMgMS40LTMgMi4zIDAgMi4xIDYuMiAzLjcgMTMuNyAzLjcgNy43IC4xIDEzLjktMS42IDEzLjktMy43eiJdCiAgICB9OwogICAgZmFZZWxwID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogInllbHAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFlOSIsICJNNDIuOSAyNDAuM2w5OS42IDQ4LjZjMTkuMiA5LjQgMTYuMiAzNy41LTQuNSA0Mi43TDMwLjUgMzU4LjVjLTMuMiAuOC02LjQgLjktOS42IC4zcy02LjItMS44LTguOS0zLjctNC45LTQuMy02LjYtNy4xLTIuNy01LjktMy4xLTkuMmMtMy4zLTI4LjgtLjItNTcuOSA5LTg1LjMgMS0zLjEgMi43LTUuOSA0LjktOC4zczQuOS00LjIgNy45LTUuNSA2LjItMS44IDkuNS0xLjggNi40IC45IDkuMyAyLjN6bTQ0IDIzOS4zYzIzLjggMTYuMyA1MC45IDI3LjMgNzkuNCAzMi4xIDMuMiAuNiA2LjUgLjQgOS42LS40czYuMS0yLjMgOC42LTQuNCA0LjYtNC42IDYtNy41IDIuMy02LjEgMi40LTkuNGwzLjktMTEwLjhjLjctMjEuMy0yNS41LTMxLjktMzkuOC0xNi4xTDgyLjggNDQ1LjVjLTIuMiAyLjQtMy44IDUuMy00LjggOC40cy0xLjMgNi40LS45IDkuNiAxLjUgNi4zIDMuMSA5LjEgMy45IDUuMiA2LjYgN2wwIDB6TTIzMi4yIDM2OS43bDU4LjggOTRjMS43IDIuOCA0IDUuMSA2LjggNi45czUuOCAzIDkgMy41IDYuNSAuMyA5LjctLjUgNi4xLTIuNCA4LjYtNC40YzIyLjMtMTguNCA0MC4zLTQxLjUgNTIuNy02Ny42IDEuNC0yLjkgMi4xLTYuMSAyLjItOS40cy0uNi02LjUtMS45LTkuNC0zLjItNS43LTUuNi03LjgtNS4yLTMuOS04LjMtNC45TDI1OC43IDMzNS43Yy0yMC4zLTYuNS0zNy44IDE1LjgtMjYuNSAzMy45ek0zODAuNiAyMzcuNGMtMTEuNS0yNi41LTI4LjctNTAuMi01MC40LTY5LjMtMi40LTIuMS01LjMtMy43LTguNC00LjdzLTYuNC0xLjItOS42LS44LTYuMyAxLjUtOS4xIDMuMi01LjEgNC02LjkgNi43bC02MiA5MS45Yy0xMS45IDE3LjcgNC43IDQwLjYgMjUuMiAzNC43TDM2NiAyNjguNmMzLjEtLjkgNi0yLjUgOC41LTQuNnM0LjUtNC43IDUuOC03LjcgMi4xLTYuMiAyLjItOS40LS42LTYuNS0xLjktOS41bDAgMHpNNjIuMSAzMC4yYy0yLjggMS40LTUuNCAzLjMtNy40IDUuN3MtMy42IDUuMi00LjUgOC4yLTEuMiA2LjItLjkgOS4zIDEuMyA2LjEgMi45IDguOUwxNTYuMyAyNDIuNmMxMS43IDIwLjIgNDIuNiAxMS45IDQyLjYtMTEuNGwwLTIwOC4zYzAtMy4xLS42LTYuMy0xLjgtOS4ycy0zLjEtNS41LTUuNC03LjYtNS0zLjgtOC00LjgtNi4xLTEuNC05LjMtMS4yYy0zOSAzLjEtNzcgMTMuMy0xMTIuMyAzMC4xeiJdCiAgICB9OwogICAgZmFHb2ZvcmUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiZ29mb3JlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYzYTciLCAiTTM0OCAzMTkuOGwtMTMuMiAwIDAgMzQuN2MtMjQuNSAyMy4xLTU2LjMgMzUuOC04OS45IDM1LjgtNzMuMiAwLTEzMi40LTYwLjItMTMyLjQtMTM0LjQgMC03NC4xIDU5LjItMTM0LjQgMTMyLjQtMTM0LjQgMzUuMyAwIDY4LjYgMTQgOTMuNiAzOS40bDYyLjMtNjMuM2MtNDEuOC00Mi4zLTk3LjEtNjUuNi0xNTYuMS02NS42LTEyMi43IDAtMjIwLjcgMTAwLjYtMjIwLjcgMjI0IDAgMTIyLjUgOTcgMjI0IDIyMC43IDIyNCA2My4yIDAgMTI0LjUtMjYuMiAxNzEtODIuNS0yLTI3LjYtMTMuNC03Ny43LTY3LjctNzcuN3pNMzM1LjkgMjA3LjNsLTEwNi4zIDAgMCA4OSAxMTguNCAwYzMzLjUgMCA2MC41IDE1LjEgNzYgNDEuOGwwLTMwLjZjMC02NS4yLTQwLjQtMTAwLjItODguMS0xMDAuMnoiXQogICAgfTsKICAgIGZhQXZpYXRvID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImF2aWF0byIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDIxIiwgIk0xMDcuMiAyODMuNWwtMTktNDEuOC01Mi4xIDAtMTkgNDEuOC0xNy4xIDAgNjIuMi0xMzEuNCA2Mi4yIDEzMS40LTE3LjIgMHptLTQ1LTk4LjFsLTE5LjYgNDIuNSAzOS4yIDAtMTkuNi00Mi41ek0xNzQuOSAyODcuOGwtNjIuMi0xMzEuNCAxNy4xIDAgNDUuMSA5NiA0NS4xLTk2IDE3IDAtNjIuMSAxMzEuNHptODAuNi00LjNsMC0xMjcuMSAxNS41IDAgMCAxMjcuMS0xNS41IDB6TTQ2NC42IDE2Ny45bDAgMTE1LjYtMTcuMyAwIDAtMTE1LjYtNDEuMiAwIDAtMTEuNSA5OS42IDAgMCAxMS41LTQxLjEgMHpNNjQwIDIxOC44YzAgOS4yLTEuNyAxNy44LTUuMSAyNS44cy04LjIgMTUuMS0xNC4yIDIxLjEtMTMuMSAxMC44LTIxLjEgMTQuMi0xNi42IDUuMS0yNS44IDUuMS0xNy44LTEuNy0yNS44LTUuMS0xNS4xLTguMi0yMS4xLTE0LjItMTAuOC0xMy0xNC4yLTIxLjFjLTMuNC04LTUuMS0xNi42LTUuMS0yNS44czEuNy0xNy44IDUuMS0yNS44IDguMi0xNS4xIDE0LjItMjEuMSAxMy04LjQgMjEuMS0xMS45YzgtMy40IDE2LjYtNS4xIDI1LjgtNS4xczE3LjggMS43IDI1LjggNS4xIDE1LjEgNS44IDIxLjEgMTEuOWM2IDYgMTAuNyAxMy4xIDE0LjIgMjEuMSAzLjQgOCA1LjEgMTYuNiA1LjEgMjUuOHptLTE1LjUgMGMwLTcuMy0xLjMtMTQtMy45LTIwLjNzLTYuMi0xMS43LTEwLjgtMTYuMy0xMC04LjItMTYuMi0xMC45LTEyLjgtNC0xOS44LTQtMTMuNiAxLjMtMTkuOCA0LTExLjYgNi4zLTE2LjIgMTAuOS04LjIgMTAtMTAuOCAxNi4zLTMuOSAxMy4xLTMuOSAyMC4zYzAgNy4zIDEuMyAxNCAzLjkgMjAuM3M2LjIgMTEuNyAxMC44IDE2LjMgMTAgOC4yIDE2LjIgMTAuOSAxMi44IDQgMTkuOCA0IDEzLjYtMS4zIDE5LjgtNCAxMS42LTYuMyAxNi4yLTEwLjkgOC4yLTEwIDEwLjgtMTYuMyAzLjktMTMuMSAzLjktMjAuM3ptLTk0LjggOTYuN2wwLTYuMyA4OC45LTEwLTI0Mi45IDEzLjRjLjYtMi4yIDEuMS00LjYgMS40LTcuMiAuMy0yIC41LTQuMiAuNi02LjVsNjQuOC04LjEtNjQuOSAxLjljMC0uNC0uMS0uNy0uMS0xLjEtMi44LTE3LjItMjUuNS0yMy43LTI1LjUtMjMuN2wtMS4xLTI2LjMgMjMuOCAwIDE5IDQxLjggMTcuMSAwLTYyLjItMTMxLjQtNjIuMiAxMzEuNCAxNy4xIDAgMTktNDEuOCAyMy42IDAtMS4xIDI2LjRzLTIyLjcgNi41LTI1LjUgMjMuN2MtLjEgLjMtLjEgLjctLjEgMS4xbC02NC45LTEuOSA2NC44IDguMWMuMSAyLjMgLjMgNC40IC42IDYuNSAuMyAyLjYgLjggNSAxLjQgNy4ybC0yNDIuOS0xMy41IDg4LjkgMTAgMCA2LjNjLTUuOSAuOS0xMC41IDYtMTAuNSAxMi4yIDAgNi44IDUuNiAxMi40IDEyLjQgMTIuNHMxMi40LTUuNiAxMi40LTEyLjRjMC02LjItNC42LTExLjMtMTAuNS0xMi4ybDAtNS44IDgwLjMgOSAwIDUuNGMtNS43IDEuMS05LjkgNi4yLTkuOSAxMi4xIDAgNi44IDUuNiAxMC4yIDEyLjQgMTAuMnMxMi40LTMuNCAxMi40LTEwLjJjMC02LTQuMy0xMS05LjktMTIuMWwwLTQuOSAyOC40IDMuMiAwIDIzLjctNS45IDAgMCAxMy45IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy4yIDM4LjMgNC4zYzguMSAxMS40IDE5IDEzLjYgMTkgMTMuNmwtLjEgNi43LTUuMSAuMi0uMSAxMi4xIDQuMSAwIC4xLTUgNS4yIDAgLjEgNSA0LjEgMC0uMS0xMi4xLTUuMS0uMi0uMS02LjdzMTAuOS0yLjEgMTktMTMuNmwzOC4zLTQuMyAwIDIzLjItNS45IDAgMCAxMy44IDUuOSAwIDAtNi42IDUgMCAwIDYuNiA1LjkgMCAwLTEzLjgtNS45IDAgMC0yMy43IDI4LjQtMy4yIDAgNC45Yy01LjcgMS4xLTkuOSA2LjItOS45IDEyLjEgMCA2LjggNS42IDEwLjIgMTIuNCAxMC4yczEyLjQtMy40IDEyLjQtMTAuMmMwLTYtNC4zLTExLTkuOS0xMi4xbDAtNS40IDgwLjMtOSAwIDUuOGMtNS45IC45LTEwLjUgNi0xMC41IDEyLjIgMCA2LjggNS42IDEyLjQgMTIuNCAxMi40czEyLjQtNS42IDEyLjQtMTIuNGMtLjItNi4zLTQuNy0xMS40LTEwLjctMTIuM3pNMzI4LjkgMjI3LjlsMTkuNi00Mi41IDE5LjYgNDIuNS0xNy45IDAtMS43LTQwLjMtMS43IDQwLjMtMTcuOSAweiJdCiAgICB9OwogICAgZmFQYWRsZXQgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAicGFkbGV0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YTAiLCAiTTI5Ny45IDBsLjEgMGM3LjYgLjEgMTQuNCA0LjcgMTcuNSAxMS44bDEzMiAzMDguNSAuMy0uMSAuMiAuNC0yLjggMTAtNDIuOSAxNThjLTMuNyAxNi4yLTE5LjcgMjYuMy0zNS44IDIyLjZsLTY4LjQtMTUuNi02OC41IDE1LjZjLTE2LjEgMy43LTMyLjEtNi40LTM1LjgtMjIuNmwtNDIuOS0xNTgtMi43LTEwIC4xLS40IDEzMi4xLTMwOC40YzMtNyA5LjktMTEuNiAxNy41LTExLjh6TTE2MC4xIDMyMi4xbDEzMSAzOS4xIDYuOSAxMjIuNSA3LjktMTIxLjUgMTMwLjYtMzkuMyAuMi0uMS0xMzEgMjUuMS04LjYtMzIwLjItNS4yIDMyMC4yLTEzMS44LTI1Ljh6TTQyNiAyMjIuNmw5NC40LTQxIDczLjggMC0xNTcgMjQ3LjYgMzEuNi0xMDktNDIuOC05Ny42em0xNzEuNS00MS4ybDQxLjQgNzYuMmM0IDcuNS0zLjkgMTUuOS0xMS42IDEyLjJsLTQ3LjYtMjIuNyAxNy44LTY1Ljd6TTEyNy4zIDMxOC41TDE1OC43IDQzMCAxLjYgMTU0LjVjLTUuOS0xMC40IDUuNS0yMiAxNS45LTE2LjJsMTUxLjggODQuMi00Mi4xIDk2eiJdCiAgICB9OwogICAgZmFFZGdlTGVnYWN5ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImVkZ2UtbGVnYWN5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwNzgiLCAiTS02IDIyOC4ybC40LS41YzAgLjIgMCAuMy0uMSAuNWwtLjMgMHptNDYwLjYgMTUuNWMwLTQ0LTcuOC04NC41LTI4LjgtMTIyLjQtNDEtNzMuNC0xMTMuNi0xMTMuMy0xOTguNi0xMTMuMy0xMzkuOS0uMy0yMTguMyAxMDUuMi0yMzIuOCAyMTkuNyA0Mi40LTYxLjMgMTE3LjEtMTIxLjQgMjIwLjQtMTI1IDAgMCAxMDkuNyAwIDk5LjQgMTA1bC0xNzUuOCAwYzYuNC0zNy40IDE4LjUtNTkgMzQuMy03OC45LTc1IDM0LjktMTIxLjggOTYuMS0xMjAuOCAxODguMyAuOCA3MS41IDUwLjEgMTQ0LjggMTIwLjggMTcyIDgzLjQgMzEuOCAxOTIuOCA3LjIgMjQwLjEtMjEuM2wwLTEwNC40Yy04MC45IDU2LjUtMjcwLjkgNjAuOS0yNzIuMy02Ny42bDMxNC4xIDAgMC01Mi4xeiJdCiAgICB9OwogICAgZmFTcXVhcmVMYXN0Zm0gPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWxhc3RmbSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJsYXN0Zm0tc3F1YXJlIl0sICJmMjAzIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMjEwLjcgMjgwLjhjLTEuOC01LjUtMy40LTEwLjgtNS0xNS45LTEyLjktNDEuOS0yMS02OC40LTU4LTY4LjQtMjIuNCAwLTQ1LjEgMTYuMS00NS4xIDYxLjIgMCAzNS4yIDE4IDU3LjIgNDMuMyA1Ny4yIDI4LjYgMCA0Ny42LTIxLjMgNDcuNi0yMS4zbDExLjcgMzEuOXMtMTkuOCAxOS40LTYxLjIgMTkuNGMtNTEuMyAwLTc5LjktMzAuMS03OS45LTg1LjggMC01Ny45IDI4LjYtOTIgODIuNS05MiA2Ny45IDAgNzkuMyAzNS4zIDk2LjQgODguNCAxLjQgNC40IDIuOSA4LjkgNC40IDEzLjUgOC44IDI2LjggMjQuMiA0Ni4yIDYxLjIgNDYuMiAyNC45IDAgMzguMS01LjUgMzguMS0xOS4xIDAtMTcuNS0xNi45LTIxLjItNDAtMjYuNC0zLjItLjctNi41LTEuNC05LjktMi4yLTMwLjQtNy4zLTQyLjUtMjMuMS00Mi41LTQ4IDAtNDAgMzIuMy01Mi40IDY1LjItNTIuNCAzNy40IDAgNjAuMSAxMy42IDYzIDQ2LjZsLTM2LjcgNC40Yy0xLjUtMTUuOC0xMS0yMi40LTI4LjYtMjIuNC0xNi4xIDAtMjYgNy4zLTI2IDE5LjggMCAxMSA0LjggMTcuNiAyMC45IDIxLjMgMi4yIC41IDQuNSAxIDYuNyAxLjQgMzEuMSA2LjUgNjUuMSAxMy43IDY1LjEgNTYuMSAuMSAzNi43LTMwLjcgNTAuNi03Ni4xIDUwLjYtNjMuNCAwLTg1LjQtMjguNi05Ny4xLTY0LjF6Il0KICAgIH07CiAgICBmYUxhc3RmbVNxdWFyZSA9IGZhU3F1YXJlTGFzdGZtOwogICAgZmFHb29kcmVhZHNHID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImdvb2RyZWFkcy1nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYzYTkiLCAiTTEwLjggNDAzLjNsMi44IDBjMTIuNyAwIDI1LjUgMCAzOC4yIC4xIDEuNiAwIDMuMS0uNCAzLjYgMi4xIDcuMSAzNC45IDMwIDU0LjYgNjIuOSA2My45IDI2LjkgNy42IDU0LjEgNy44IDgxLjMgMS44IDMzLjgtNy40IDU2LTI4LjMgNjgtNjAuNCA4LTIxLjUgMTAuNy00My44IDExLTY2LjUgLjEtNS44IC4zLTQ3LS4yLTUyLjhsLS45LS4zYy0uOCAxLjUtMS43IDIuOS0yLjUgNC40LTIyLjEgNDMuMS02MS4zIDY3LjQtMTA1LjQgNjkuMS0xMDMgNC0xNjkuNC01Ny0xNzItMTc2LjItLjUtMjMuNyAxLjgtNDYuOSA4LjMtNjkuNyAyMC42LTcxLjEgNzQuNi0xMTguMiAxNTMuOS0xMTguOCA2MS4zLS40IDEwMS41IDM4LjcgMTE2LjIgNzAuMyAuNSAxLjEgMS4zIDIuMyAyLjQgMS45bDAtNjEuNiA0NC4zIDBjMCAyODAuMyAuMSAzMzIuMiAuMSAzMzIuMi0uMSA3OC41LTI2LjcgMTQzLjctMTAzIDE2Mi4yLTY5LjUgMTYuOS0xNTkgNC44LTE5Ni01Ny4yLTgtMTMuNS0xMS44LTI4LjMtMTMtNDQuNXpNMTU3LjEgMzYuNWMtNTIuNS0uNS0xMDguNSA0MC43LTExNSAxMzMuOC00LjEgNTkgMTQuOCAxMjIuMiA3MS41IDE0OC42IDI3LjYgMTIuOSA3NC4zIDE1IDEwOC4zLTguNyA0Ny42LTMzLjIgNjIuNy05NyA1NC44LTE1NC05LjctNzEuMS00Ny44LTEyMC0xMTkuNi0xMTkuN3oiXQogICAgfTsKICAgIGZhQ2NNYXN0ZXJjYXJkID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImNjLW1hc3RlcmNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjFmMSIsICJNNDgyLjkgNDEwLjNjMCA2LjgtNC42IDExLjctMTEuMiAxMS43LTYuOCAwLTExLjItNS4yLTExLjItMTEuN3M0LjQtMTEuNyAxMS4yLTExLjdjNi42IDAgMTEuMiA1LjIgMTEuMiAxMS43ek0xNzIuMSAzOTguNmMtNy4xIDAtMTEuMiA1LjItMTEuMiAxMS43UzE2NSA0MjIgMTcyLjEgNDIyYzYuNSAwIDEwLjktNC45IDEwLjktMTEuNy0uMS02LjUtNC40LTExLjctMTAuOS0xMS43em0xMTcuNS0uM2MtNS40IDAtOC43IDMuNS05LjUgOC43bDE5LjEgMGMtLjktNS43LTQuNC04LjctOS42LTguN3ptMTA3LjggLjNjLTYuOCAwLTEwLjkgNS4yLTEwLjkgMTEuN3M0LjEgMTEuNyAxMC45IDExLjcgMTEuMi00LjkgMTEuMi0xMS43YzAtNi41LTQuNC0xMS43LTExLjItMTEuN3ptMTA1LjkgMjYuMWMwIC4zIC4zIC41IC4zIDEuMSAwIC4zLS4zIC41LS4zIDEuMS0uMyAuMy0uMyAuNS0uNSAuOC0uMyAuMy0uNSAuNS0xLjEgLjUtLjMgLjMtLjUgLjMtMS4xIC4zLS4zIDAtLjUgMC0xLjEtLjMtLjMgMC0uNS0uMy0uOC0uNS0uMy0uMy0uNS0uNS0uNS0uOC0uMy0uNS0uMy0uOC0uMy0xLjEgMC0uNSAwLS44IC4zLTEuMSAwLS41IC4zLS44IC41LTEuMSAuMy0uMyAuNS0uMyAuOC0uNSAuNS0uMyAuOC0uMyAxLjEtLjMgLjUgMCAuOCAwIDEuMSAuMyAuNSAuMyAuOCAuMyAxLjEgLjVzLjIgLjYgLjUgMS4xem0tMi4yIDEuNGMuNSAwIC41LS4zIC44LS4zIC4zLS4zIC4zLS41IC4zLS44czAtLjUtLjMtLjhjLS4zIDAtLjUtLjMtMS4xLS4zbC0xLjYgMCAwIDMuNSAuOCAwIDAtMS40IC4zIDAgMS4xIDEuNCAuOCAwLTEuMS0xLjN6TTU3NiA4MWwwIDM1MmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODFjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODFDMCA1NC41IDIxLjUgMzMgNDggMzNsNDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDh6TTY0IDIyMC42YzAgNzYuNSA2Mi4xIDEzOC41IDEzOC41IDEzOC41IDI3LjIgMCA1My45LTguMiA3Ni41LTIzLjEtNzIuOS01OS4zLTcyLjQtMTcxLjIgMC0yMzAuNS0yMi42LTE1LTQ5LjMtMjMuMS03Ni41LTIzLjEtNzYuNC0uMS0xMzguNSA2Mi0xMzguNSAxMzguMnpNMjg4IDMyOS40YzcwLjUtNTUgNzAuMi0xNjIuMiAwLTIxNy41LTcwLjIgNTUuMy03MC41IDE2Mi42IDAgMjE3LjV6TTE0NS43IDQwNS43YzAtOC43LTUuNy0xNC40LTE0LjctMTQuNy00LjYgMC05LjUgMS40LTEyLjggNi41LTIuNC00LjEtNi41LTYuNS0xMi4yLTYuNS0zLjggMC03LjYgMS40LTEwLjYgNS40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMGMwLTE4LjktMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAuMiA4LjIgMzAuMmw3LjkgMGMwLTE4LjMtMi41LTMwLjIgOS0zMC4yIDEwLjIgMCA4LjIgMTAgOC4yIDMwLjJsOC4yIDAgMC0yMy0uMiAwek0xOTAuNiAzOTJsLTcuOSAwIDAgNC40Yy0yLjctMy4zLTYuNS01LjQtMTEuNy01LjQtMTAuMyAwLTE4LjIgOC4yLTE4LjIgMTkuMyAwIDExLjIgNy45IDE5LjMgMTguMiAxOS4zIDUuMiAwIDktMS45IDExLjctNS40bDAgNC42IDcuOSAwIDAtMzYuOHptNDAuNSAyNS42YzAtMTUtMjIuOS04LjItMjIuOS0xNS4yIDAtNS43IDExLjktNC44IDE4LjUtMS4xbDMuMy02LjVjLTkuNC02LjEtMzAuMi02LTMwLjIgOC4yIDAgMTQuMyAyMi45IDguMyAyMi45IDE1IDAgNi4zLTEzLjUgNS44LTIwLjcgLjhsLTMuNSA2LjNjMTEuMiA3LjYgMzIuNiA2IDMyLjYtNy41em0zNS40IDkuM2wtMi4yLTYuOGMtMy44IDIuMS0xMi4yIDQuNC0xMi4yLTQuMWwwLTE2LjYgMTMuMSAwIDAtNy40LTEzLjEgMCAwLTExLjItOC4yIDAgMCAxMS4yLTcuNiAwIDAgNy4zIDcuNiAwIDAgMTYuN2MwIDE3LjYgMTcuMyAxNC40IDIyLjYgMTAuOXptMTMuMy0xMy40bDI3LjUgMGMwLTE2LjItNy40LTIyLjYtMTcuNC0yMi42LTEwLjYgMC0xOC4yIDcuOS0xOC4yIDE5LjMgMCAyMC41IDIyLjYgMjMuOSAzMy44IDE0LjJsLTMuOC02Yy03LjggNi40LTE5LjYgNS44LTIxLjktNC45ek0zMzguOSAzOTJjLTQuNi0yLTExLjYtMS44LTE1LjIgNC40bDAtNC40LTguMiAwIDAgMzYuNyA4LjIgMCAwLTIwLjdjMC0xMS42IDkuNS0xMC4xIDEyLjgtOC40bDIuNC03LjZ6bTEwLjYgMTguM2MwLTExLjQgMTEuNi0xNS4xIDIwLjctOC40bDMuOC02LjVjLTExLjYtOS4xLTMyLjctNC4xLTMyLjcgMTUgMCAxOS44IDIyLjQgMjMuOCAzMi43IDE1bC0zLjgtNi41Yy05LjIgNi41LTIwLjcgMi42LTIwLjctOC42ek00MTYuMiAzOTJsLTguMiAwIDAgNC40Yy04LjMtMTEtMjkuOS00LjgtMjkuOSAxMy45IDAgMTkuMiAyMi40IDI0LjcgMjkuOSAxMy45bDAgNC42IDguMiAwIDAtMzYuOHptMzMuNyAwYy0yLjQtMS4yLTExLTIuOS0xNS4yIDQuNGwwLTQuNC03LjkgMCAwIDM2LjcgNy45IDAgMC0yMC43YzAtMTEgOS0xMC4zIDEyLjgtOC40bDIuNC03LjZ6bTQwLjMtMTQuOWwtNy45IDAgMCAxOS4zYy04LjItMTAuOS0yOS45LTUuMS0yOS45IDEzLjkgMCAxOS40IDIyLjUgMjQuNiAyOS45IDEzLjlsMCA0LjYgNy45IDAgMC01MS43em03LjYtNzUuMWwwIDQuNiAuOCAwIDAtNC42IDEuOSAwIDAtLjgtNC42IDAgMCAuOCAxLjkgMHptNi42IDEyMy44YzAtLjUgMC0xLjEtLjMtMS42LS4zLS4zLS41LS44LS44LTEuMXMtLjgtLjUtMS4xLS44Yy0uNSAwLTEuMS0uMy0xLjYtLjMtLjMgMC0uOCAuMy0xLjQgLjMtLjUgLjMtLjggLjUtMS4xIC44LS41IC4zLS44IC44LS44IDEuMS0uMyAuNS0uMyAxLjEtLjMgMS42IDAgLjMgMCAuOCAuMyAxLjQgMCAuMyAuMyAuOCAuOCAxLjEgLjMgLjMgLjUgLjUgMS4xIC44IC41IC4zIDEuMSAuMyAxLjQgLjMgLjUgMCAxLjEgMCAxLjYtLjMgLjMtLjMgLjgtLjUgMS4xLS44cy41LS44IC44LTEuMWMuMy0uNiAuMy0xLjEgLjMtMS40em0zLjItMTI0LjdsLTEuNCAwLTEuNiAzLjUtMS42LTMuNS0xLjQgMCAwIDUuNCAuOCAwIDAtNC4xIDEuNiAzLjUgMS4xIDAgMS40LTMuNSAwIDQuMSAxLjEgMCAwLTUuNHptNC40LTgwLjVjMC03Ni4yLTYyLjEtMTM4LjMtMTM4LjUtMTM4LjMtMjcuMiAwLTUzLjkgOC4yLTc2LjUgMjMuMSA3Mi4xIDU5LjMgNzMuMiAxNzEuNSAwIDIzMC41IDIyLjYgMTUgNDkuNSAyMy4xIDc2LjUgMjMuMSA3Ni40IC4xIDEzOC41LTYxLjkgMTM4LjUtMTM4LjR6Il0KICAgIH07CiAgICBmYURpc2NvdXJzZSA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJkaXNjb3Vyc2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM5MyIsICJNMjI1LjkgMzJDMTAzLjMgMzIgMCAxMzAuNSAwIDI1Mi4xIDAgMjU2IC4xIDQ4MCAuMSA0ODBsMjI1LjgtLjJDMzQ4LjYgNDc5LjggNDQ4IDM3Ny41IDQ0OCAyNTUuOVMzNDguNiAzMiAyMjUuOSAzMnpNMjI0IDM4NGMtMTkuNCAwLTM3LjktNC4zLTU0LjQtMTIuMUw4OC41IDM5MiAxMTEuNCAzMTdjLTkuOC0xOC4xLTE1LjQtMzguOS0xNS40LTYxIDAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4czEyOCA1Ny4zIDEyOCAxMjgtNTcuMyAxMjgtMTI4IDEyOHoiXQogICAgfTsKICAgIGZhQmxhY2tUaWUgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAiYmxhY2stdGllIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyN2UiLCAiTTAgMzJsMCA0NDggNDQ4IDAgMC00NDgtNDQ4IDB6TTMxNi41IDM1Ny4ybC05Mi41IDg4LjctOTIuNS04OC43IDY0LjUtMTg0LTY0LjUtODYuNiAxODQuOSAwLTY0LjQgODYuNiA2NC41IDE4NHoiXQogICAgfTsKICAgIGZhU3F1YXJlRmFjZWJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhYiIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWZhY2Vib29rIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImZhY2Vib29rLXNxdWFyZSJdLCAiZjA4MiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5OC4yIDAgMC0xNDUuOC01Mi44IDAgMC03OC4yIDUyLjggMCAwLTMzLjdjMC04Ny4xIDM5LjQtMTI3LjUgMTI1LTEyNy41IDE2LjIgMCA0NC4yIDMuMiA1NS43IDYuNGwwIDcwLjhjLTYtLjYtMTYuNS0xLTI5LjYtMS00MiAwLTU4LjIgMTUuOS01OC4yIDU3LjJsMCAyNy44IDgzLjYgMC0xNC40IDc4LjItNjkuMyAwIDAgMTQ1LjggMTI5IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2Vib29rU3F1YXJlID0gZmFTcXVhcmVGYWNlYm9vazsKICAgIGZhQmF0dGxlTmV0ID0gewogICAgICBwcmVmaXg6ICJmYWIiLAogICAgICBpY29uTmFtZTogImJhdHRsZS1uZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgzNSIsICJNNDQ4LjggMjI1LjZjMjYuOSAuMiAzNS42LTcuNCAzOC45LTEyLjQgMTIuNS0xNi4zLTcuMS00Ny42LTUyLjgtNzEuMyAxNy44LTMzLjYgMzAuMS02My43IDM2LjMtODUuMyAzLjQtMTEuOCAxLjEtMTkgLjUtMjAuMy0xLjcgMTAuNS0xNS44IDQ4LjUtNDguMiAxMDAtMjUtMTEuMi01Ni41LTIwLjEtOTMuOC0yMy44LTguOS0xNi45LTM0LjktNjMuOS02MC41LTg4LjktMTYuOC0xNi41LTMwLjMtMjIuNi00MC44LTIzLjVsMCAwYy0xMy44LTEuNi0yMi43IDUuOC0yNy40IDExLTE3LjIgMTguNS0yNC4zIDQ4LjktMjUgODQuMS03LjItMTIuMy0xNy4yLTI0LjYtMjguNS0yNS45bC0uMiAwYy0yMC43LTMuNS0zOC40IDI5LjItMzYgODEuMy0zOC40IDEuNC03MSA1LjgtOTMgMTEuMi05LjkgMi40LTE2LjIgNy4zLTE3LjggOS43IDEtLjQgMjIuNC05LjIgMTExLjYtOS4yIDUuMiA1MyAyOS44IDEwMS44IDI2IDkzLjItOS43IDE1LjQtMzguMiA2Mi40LTQ3LjMgOTcuNy01LjkgMjIuOS00LjQgMzcuNiAuMiA0Ny4xIDUuNiAxMi44IDE2LjQgMTYuNyAyMy4yIDE4LjMgMjUgNS43IDU1LjQtMy42IDg2LjctMjEuMS03LjUgMTIuOC0xMy45IDI4LjUtOS4xIDM5LjMgNy4zIDE5LjYgNDQuNSAxOC43IDg4LjQtOS40IDIwLjIgMzIuMiA0MC4xIDU3LjkgNTUuNyA3NC4xIDIuNiAyLjggNS41IDUuMiA4LjggNy4xIDUuMSAzLjIgOC42IDMuNCA4LjYgMy40LTguMi02LjctMzQtMzgtNjIuNS05MS44IDIyLjItMTYgNDUuNy0zOC45IDY3LjUtNjkuMyAxMjIuOCA0LjYgMTQzLjMtMjQuOCAxNDgtMzEuNiAxNC43LTE5LjkgMy40LTU3LjQtNTcuMy05My43ek0zNzEgMzMxLjhjMjMuOC0zNy43IDMwLjMtNjcuOCAyOS40LTkyLjMgMjcuOSAxNy42IDQ3LjIgMzcuNiA0OS4xIDU4LjggMS4xIDEyLjktOC4xIDI5LjEtNzguNSAzMy41ek0yMTcuMSAzODcuN2M5LjgtNi4yIDE5LjUtMTMuMSAyOS4yLTIwLjUgNi43IDEzLjMgMTMuNiAyNi4xIDIwLjYgMzguMi00MC42IDIxLjktNjguOCAxMi44LTQ5LjgtMTcuN3ptMjE1LTE3MS4zYy0xMC4zLTUuMy0yMS4yLTEwLjMtMzIuNC0xNSA3LjktMTIuMSAxNS41LTI0LjQgMjIuNy0zNi45IDM5LjEgMjQuMSA0NS45IDUzLjIgOS42IDUxLjl6TTI3OS40IDM5OGMtNS41LTExLjQtMTEtMjMuNS0xNi41LTM2LjQgNDMuMiAxLjMgNjIuNC0xOC43IDYzLjMtMjAuNCAwIC4xLTI1IDE1LjYtNjIuNSAxMi4yIDMwLjYtMjUuNiA1OS4xLTUzLjcgODUuMS04NCA4LjctMTAuMiAxNy0yMC42IDI0LjktMzEuMS0uNC0uMy0xLjUtMy0xNi41LTEyLTUxLjcgNjAuMy0xMDIuMyA5OC0xMzIuOCAxMTUuOS0yMC42LTExLjItNDAuOC0zMS44LTU1LjctNjEuNS0yMC0zOS45LTMwLTgyLjQtMzEuNi0xMTYuMSAxMi4zIC45IDI1LjMgMi4yIDM4LjggMy45LTIyLjMgMzYuOC0xNC40IDYzLTEzLjUgNjQuMiAwLS4xLTEtMjkuMiAyMC4xLTU5LjYgOSA1Mi41IDI0IDEwMy44IDQ0LjcgMTUyLjggLjktLjQgMS44IC45IDE4LjctOC4yLTI2LjMtNzQuNS0zMy44LTEzOC4yLTM0LTE3My40IDIwLTEyLjQgNDguMi0xOS44IDgxLjYtMTcuOCA0NC42IDIuNyA4Ni40IDE1LjIgMTE2LjMgMzAuNy03LjEgMTAuNC0xNC45IDIxLjMtMjMuMyAzMi41LTIwLjctMzcuNy00Ny4zLTQzLjktNDguOS00My43IC4xIDAgMjUuOSAxNC4xIDQxLjUgNDcuMi0zNy41LTEzLjgtNzYuMS0yNC40LTExNS4zLTMxLjctMTMuMS0yLjQtMjYuMi00LjQtMzkuNC02LS4xIC40LTEuOCAxLjgtMi4yIDIwLjMgNzcuOSAxNC41IDEzNi42IDM5LjkgMTY3LjIgNTcuMiAuNyAyMy42LTcgNTEuNi0yNS40IDc5LjYtMjQuNiAzNy4zLTU2LjQgNjcuMi04NC44IDg1LjR6bTI3LjQtMjg3Yy00NC42LTEuNy03My42IDcuNC05NC43IDIwLjcgMi01Mi4zIDIxLjMtNzYuNCAzOC4yLTc1LjMgMTYuOS00LjIgNTQuOSA1Mi4yIDU2LjUgNTQuNnptLTEzMC43IDMuMWMuNSAxMi4xIDEuNiAyNC42IDMuMiAzNy4zLTE0LjYtLjktMjguNy0xLjMtNDIuNC0xLjMtLjEgMy4yLS4xLTUxIDI0LjctNDkuNmwuMSAwYzUuOCAxLjEgMTAuNiA2LjkgMTQuNCAxMy42em0tMjguMSAxNjJjMjAuOCAzOS43IDQzLjMgNjAuNiA2NS4zIDcyLjMtNDYuOCAyNC44LTc3LjUgMjAtODQuOSA0LjUtLjItLjItMTEuMS0xNS4zIDE5LjctNzYuOGwwIDB6Il0KICAgIH07CiAgICBmYUJpbW9iamVjdCA9IHsKICAgICAgcHJlZml4OiAiZmFiIiwKICAgICAgaWNvbk5hbWU6ICJiaW1vYmplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjM3OCIsICJNNDE2IDMyTDMyIDMyQzE0LjQgMzIgMCA0Ni40IDAgNjRMMCA0NDhjMCAxNy42IDE0LjQgMzIgMzIgMzJsMzg0IDBjMTcuNiAwIDMyLTE0LjQgMzItMzJsMC0zODRjMC0xNy42LTE0LjQtMzItMzItMzJ6TTM1MiAyODkuNGMwIDQ5LjQtMTEuNCA4Mi42LTEwMy44IDgyLjZsLTE2LjkgMGMtNDQuMSAwLTYyLjQtMTQuOS03MC40LTM4LjhsLS45IDAgMCAzNC44LTY0IDAgMC0yMzIgNjQgMCAwIDc0LjcgMS4xIDBjNC42LTMwLjUgMzkuNy0zOC44IDY5LjctMzguOGwxNy4zIDBjOTIuNCAwIDEwMy44IDMzLjEgMTAzLjggODIuNWwwIDM1IC4xIDB6bS02NC0yOC45bDAgMjIuOWMwIDIxLjctMy40IDMzLjgtMzguNCAzMy44bC00NS4zIDBjLTI4LjkgMC00NC4xLTYuNS00NC4xLTM1LjdsMC0xOWMwLTI5LjMgMTUuMi0zNS43IDQ0LjEtMzUuN2w0NS4zIDBjMzUtLjIgMzguNCAxMiAzOC40IDMzLjd6Il0KICAgIH07CiAgICBpY29ucyA9IHsKICAgICAgZmFTcXVhcmVHaXRodWIsCiAgICAgIGZhR2l0aHViU3F1YXJlLAogICAgICBmYVRoaW5rUGVha3MsCiAgICAgIGZhR29vZ2xlRHJpdmUsCiAgICAgIGZhQXV0b3ByZWZpeGVyLAogICAgICBmYVNxdWFyZVZpYWRlbywKICAgICAgZmFWaWFkZW9TcXVhcmUsCiAgICAgIGZhQ3BhbmVsLAogICAgICBmYU1lbmRlbGV5LAogICAgICBmYURyYWZ0MmRpZ2l0YWwsCiAgICAgIGZhUmVwbHlkLAogICAgICBmYUVtcGlyZSwKICAgICAgZmFBY2Nlc3NpYmxlSWNvbiwKICAgICAgZmFRdW9yYSwKICAgICAgZmFDY0pjYiwKICAgICAgZmFGZWRvcmEsCiAgICAgIGZhRHVvbGluZ28sCiAgICAgIGZhRmlyc3RkcmFmdCwKICAgICAgZmFGcmVlYnNkLAogICAgICBmYU9keXNlZSwKICAgICAgZmFHZ0NpcmNsZSwKICAgICAgZmFDbG91ZGZsYXJlLAogICAgICBmYUhhY2tlcnJhbmssCiAgICAgIGZhU2t5YXRsYXMsCiAgICAgIGZhRGVza3BybywKICAgICAgZmFSZXNvbHZpbmcsCiAgICAgIGZhQmxhY2tiZXJyeSwKICAgICAgZmFTdHJpcGVTLAogICAgICBmYVNxdWFyZUJlaGFuY2UsCiAgICAgIGZhQmVoYW5jZVNxdWFyZSwKICAgICAgZmFTZXJ2aWNlc3RhY2ssCiAgICAgIGZhUm9ja2V0Y2hhdCwKICAgICAgZmFSZWJlbCwKICAgICAgZmFTcXVhcmVXZWJBd2Vzb21lLAogICAgICBmYUxpbmt0cmVlLAogICAgICBmYVNpbXBseWJ1aWx0LAogICAgICBmYVN0dWJiZXIsCiAgICAgIGZhQXBwZXIsCiAgICAgIGZhR29vZ2xlU2Nob2xhciwKICAgICAgZmFZYXJuLAogICAgICBmYVN0YWNrT3ZlcmZsb3csCiAgICAgIGZhQmx1ZXRvb3RoLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc05jSnAsCiAgICAgIGZhUmVkZGl0LAogICAgICBmYUNvbm5lY3RkZXZlbG9wLAogICAgICBmYVJlc2VhcmNoZ2F0ZSwKICAgICAgZmFTaWduYWxNZXNzZW5nZXIsCiAgICAgIGZhWGluZywKICAgICAgZmFTcXVhcmVKcywKICAgICAgZmFKc1NxdWFyZSwKICAgICAgZmFGb250aWNvbnMsCiAgICAgIGZhVXBzLAogICAgICBmYUFtYXpvblBheSwKICAgICAgZmFQYW5kb3JhLAogICAgICBmYU9wZW5pZCwKICAgICAgZmFWc2NvLAogICAgICBmYVVidW50dSwKICAgICAgZmFWaWFjb2luLAogICAgICBmYVpoaWh1LAogICAgICBmYVlhbmRleCwKICAgICAgZmFQaXhpdiwKICAgICAgZmFPcGVuYWksCiAgICAgIGZhU2l0aCwKICAgICAgZmFOZmNEaXJlY3Rpb25hbCwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNCeSwKICAgICAgZmFVbWJyYWNvLAogICAgICBmYUhvb2xpLAogICAgICBmYVNxdWFyZUdpdCwKICAgICAgZmFHaXRTcXVhcmUsCiAgICAgIGZhT2Rub2tsYXNzbmlraSwKICAgICAgZmFEcnVwYWwsCiAgICAgIGZhQmxvZ2dlckIsCiAgICAgIGZhSW52aXNpb24sCiAgICAgIGZhRmFjZWJvb2tGLAogICAgICBmYUNlbnRvcywKICAgICAgZmFDY0FtYXpvblBheSwKICAgICAgZmFFYmF5LAogICAgICBmYUNvbnRhbywKICAgICAgZmFFbGxvLAogICAgICBmYVNpc3RyaXgsCiAgICAgIGZhUGVyaXNjb3BlLAogICAgICBmYUV4cGVkaXRlZHNzbCwKICAgICAgZmFOYXBzdGVyLAogICAgICBmYURlbGljaW91cywKICAgICAgZmFHdWlsZGVkLAogICAgICBmYVhib3gsCiAgICAgIGZhVW50YXBwZCwKICAgICAgZmFHb29nbGVQbHVzRywKICAgICAgZmFHaXRodWJBbHQsCiAgICAgIGZhR2V0UG9ja2V0LAogICAgICBmYUdsaWRlLAogICAgICBmYUJpdHksCiAgICAgIGZhV3BleHBsb3JlciwKICAgICAgZmFNZWdhcG9ydCwKICAgICAgZmFNZGIsCiAgICAgIGZhUGFnZTQsCiAgICAgIGZhVGhlUmVkWWV0aSwKICAgICAgZmFKaXJhLAogICAgICBmYUZlZGV4LAogICAgICBmYUV2ZXJub3RlLAogICAgICBmYVVzYiwKICAgICAgZmFBbmdyeWNyZWF0aXZlLAogICAgICBmYU1penVuaSwKICAgICAgZmFJdGNoSW8sCiAgICAgIGZhV2luZG93cywKICAgICAgZmFTdHVtYmxldXBvbiwKICAgICAgZmFHb29nbGUsCiAgICAgIGZhRGlzY29yZCwKICAgICAgZmFIYWNrZXJOZXdzLAogICAgICBmYUVsZXZlbnR5LAogICAgICBmYTExdHksCiAgICAgIGZhVGVhbXNwZWFrLAogICAgICBmYVN1cHBsZSwKICAgICAgZmFTcXVhcmVUd2l0dGVyLAogICAgICBmYVR3aXR0ZXJTcXVhcmUsCiAgICAgIGZhRm9udEF3ZXNvbWUsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnLAogICAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwsCiAgICAgIGZhV2lyc2luZGhhbmR3ZXJrLAogICAgICBmYVdzaCwKICAgICAgZmFDb25mbHVlbmNlLAogICAgICBmYURpZ2csCiAgICAgIGZhVGhyZWFkcywKICAgICAgZmFXcHJlc3NyLAogICAgICBmYVJlbmRhY3QsCiAgICAgIGZhWW9hc3QsCiAgICAgIGZhTmltYmxyLAogICAgICBmYVBpeGVsZmVkLAogICAgICBmYVlhaG9vLAogICAgICBmYUJsdWVza3ksCiAgICAgIGZhU2NyaWJkLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1BkLAogICAgICBmYUVhcmx5YmlyZHMsCiAgICAgIGZhU3F1YXJlT2Rub2tsYXNzbmlraSwKICAgICAgZmFPZG5va2xhc3NuaWtpU3F1YXJlLAogICAgICBmYU1hcmtkb3duLAogICAgICBmYVR5cG8zLAogICAgICBmYUpvb21sYSwKICAgICAgZmFXZWl4aW4sCiAgICAgIGZhR3J1bnQsCiAgICAgIGZhUm9ja3JtcywKICAgICAgZmFVbnNwbGFzaCwKICAgICAgZmFTcXVhcmVJbnN0YWdyYW0sCiAgICAgIGZhSW5zdGFncmFtU3F1YXJlLAogICAgICBmYUZpcnN0T3JkZXJBbHQsCiAgICAgIGZhRnVsY3J1bSwKICAgICAgZmFCcmF2ZVJldmVyc2UsCiAgICAgIGZhQXZpYW5leCwKICAgICAgZmFOczgsCiAgICAgIGZhU3F1YXJlUGludGVyZXN0LAogICAgICBmYVBpbnRlcmVzdFNxdWFyZSwKICAgICAgZmFCbHVldG9vdGhCLAogICAgICBmYUdyaXBmaXJlLAogICAgICBmYVNxdWFyZUdvb2dsZVBsdXMsCiAgICAgIGZhR29vZ2xlUGx1c1NxdWFyZSwKICAgICAgZmFBcHBTdG9yZSwKICAgICAgZmFXaXgsCiAgICAgIGZhSW50ZXJjb20sCiAgICAgIGZhUmVhY3RldXJvcGUsCiAgICAgIGZhV2F6ZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNSZW1peCwKICAgICAgZmFCYW5kY2FtcCwKICAgICAgZmFTcXVhcmVXZWJBd2Vzb21lU3Ryb2tlLAogICAgICBmYVZpbWVvViwKICAgICAgZmFTdHJhdmEsCiAgICAgIGZhVW5pcmVnaXN0cnksCiAgICAgIGZhQ2NEaW5lcnNDbHViLAogICAgICBmYVBpbnRlcmVzdCwKICAgICAgZmFBbGdvbGlhLAogICAgICBmYVN0YWNrcGF0aCwKICAgICAgZmFPY3RvcHVzRGVwbG95LAogICAgICBmYVlhbW1lciwKICAgICAgZmFNb2R4LAogICAgICBmYVNxdWFyZVRocmVhZHMsCiAgICAgIGZhT2xkUmVwdWJsaWMsCiAgICAgIGZhU3VzZSwKICAgICAgZmFBcHBTdG9yZUlvcywKICAgICAgZmFTcXVhcmVEcmliYmJsZSwKICAgICAgZmFEcmliYmJsZVNxdWFyZSwKICAgICAgZmFVaWtpdCwKICAgICAgZmFTdXBlcnBvd2VycywKICAgICAgZmFZb3V0dWJlLAogICAgICBmYUVtYmVyLAogICAgICBmYUJvb3RzdHJhcCwKICAgICAgZmFJdHVuZXMsCiAgICAgIGZhU3F1YXJlWGluZywKICAgICAgZmFYaW5nU3F1YXJlLAogICAgICBmYUNzczNBbHQsCiAgICAgIGZhU3F1YXJlc3BhY2UsCiAgICAgIGZhVHJlbGxvLAogICAgICBmYVZpYWRlbywKICAgICAgZmFTZWFyY2hlbmdpbiwKICAgICAgZmFQYXlwYWwsCiAgICAgIGZhU3F1YXJlQmx1ZXNreSwKICAgICAgZmFEQW5kREJleW9uZCwKICAgICAgZmFNaWNyb3NvZnQsCiAgICAgIGZhRmx5LAogICAgICBmYUNjU3RyaXBlLAogICAgICBmYVdvcmRwcmVzc1NpbXBsZSwKICAgICAgZmFTZWxsc3ksCiAgICAgIGZhRGFzaGN1YmUsCiAgICAgIGZhR2l0dGVyLAogICAgICBmYVdvbGZQYWNrQmF0dGFsaW9uLAogICAgICBmYUxhc3RmbSwKICAgICAgZmFTaG9wd2FyZSwKICAgICAgZmFCbG9nZ2VyLAogICAgICBmYUVkZ2UsCiAgICAgIGZhSW94aG9zdCwKICAgICAgZmFTY2hsaXgsCiAgICAgIGZhREFuZEQsCiAgICAgIGZhVnVlanMsCiAgICAgIGZhTWV0YSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNTaGFyZSwKICAgICAgZmFTdHVkaW92aW5hcmksCiAgICAgIGZhQml0YnVja2V0LAogICAgICBmYVZrLAogICAgICBmYUdpdGh1YiwKICAgICAgZmFDb2RpZXBpZSwKICAgICAgZmFQaWVkUGlwZXIsCiAgICAgIGZhUmFzcGJlcnJ5UGksCiAgICAgIGZhQ3NzMywKICAgICAgZmFIdWJzcG90LAogICAgICBmYUNtcGxpZCwKICAgICAgZmFEeWFsb2csCiAgICAgIGZhRWxlbWVudG9yLAogICAgICBmYUZpcnN0T3JkZXIsCiAgICAgIGZhRHJpYmJibGUsCiAgICAgIGZhTGlua2VkaW4sCiAgICAgIGZhQ2NQYXlwYWwsCiAgICAgIGZhRGhsLAogICAgICBmYVRleCwKICAgICAgZmFTaG9waWZ5LAogICAgICBmYVNxdWFyZVJlZGRpdCwKICAgICAgZmFSZWRkaXRTcXVhcmUsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmMsCiAgICAgIGZhR2FsYWN0aWNSZXB1YmxpYywKICAgICAgZmFGYWNlYm9vaywKICAgICAgZmFHaXRsYWIsCiAgICAgIGZhUXEsCiAgICAgIGZhU3RyaXBlLAogICAgICBmYURhaWx5bW90aW9uLAogICAgICBmYVN0ZWFtLAogICAgICBmYVNuYXBjaGF0LAogICAgICBmYVNuYXBjaGF0R2hvc3QsCiAgICAgIGZhR2FsYWN0aWNTZW5hdGUsCiAgICAgIGZhUGhvZW5peEZyYW1ld29yaywKICAgICAgZmFHaXQsCiAgICAgIGZhT3B0aW5Nb25zdGVyLAogICAgICBmYUplbmtpbnMsCiAgICAgIGZhU2xpZGVzaGFyZSwKICAgICAgZmFVYmVyLAogICAgICBmYURpZ2l0YWxPY2VhbiwKICAgICAgZmFTb3VuZGNsb3VkLAogICAgICBmYVNxdWFyZUZpZ21hLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhLAogICAgICBmYUNocm9tZSwKICAgICAgZmFUcmFkZUZlZGVyYXRpb24sCiAgICAgIGZhVmFhZGluLAogICAgICBmYURldmlhbnRhcnQsCiAgICAgIGZhTWVkaXVtLAogICAgICBmYU1lZGl1bU0sCiAgICAgIGZhT3BlbmNhcnQsCiAgICAgIGZhWUNvbWJpbmF0b3IsCiAgICAgIGZhTGluZSwKICAgICAgZmFBbWlsaWEsCiAgICAgIGZhQXN5bW1ldHJpaywKICAgICAgZmFQaGFicmljYXRvciwKICAgICAgZmFCb3RzLAogICAgICBmYVZpbmUsCiAgICAgIGZhTWVkcnQsCiAgICAgIGZhT3NpLAogICAgICBmYUdnLAogICAgICBmYUJ1eXNlbGxhZHMsCiAgICAgIGZhR29vZ2xlUGx1cywKICAgICAgZmFTY3JlZW5wYWwsCiAgICAgIGZhQml0Y29pbiwKICAgICAgZmFTd2lmdCwKICAgICAgZmFGaWxlc1BpbndoZWVsLAogICAgICBmYUxhcmF2ZWwsCiAgICAgIGZhV3Bmb3JtcywKICAgICAgZmFTcGVha2VyRGVjaywKICAgICAgZmFGbGlja3IsCiAgICAgIGZhQ2NWaXNhLAogICAgICBmYVVwd29yaywKICAgICAgZmFLYWthb1RhbGssCiAgICAgIGZhRmx1dHRlciwKICAgICAgZmFCdWZmZXIsCiAgICAgIGZhR3JhdGlwYXksCiAgICAgIGZhR29vZ2xlUGF5LAogICAgICBmYUFwcGxlLAogICAgICBmYVR1bWJsciwKICAgICAgZmFQaG9lbml4U3F1YWRyb24sCiAgICAgIGZhQ2VudGVyY29kZSwKICAgICAgZmFEZWJpYW4sCiAgICAgIGZhTWFzdG9kb24sCiAgICAgIGZhU2tldGNoLAogICAgICBmYVdlYkF3ZXNvbWUsCiAgICAgIGZhU2FzcywKICAgICAgZmFTcXVhcmVXaGF0c2FwcCwKICAgICAgZmFXaGF0c2FwcFNxdWFyZSwKICAgICAgZmFTa3lwZSwKICAgICAgZmFBbmd1bGFyLAogICAgICBmYU9wZW5zdXNlLAogICAgICBmYURyb3Bib3gsCiAgICAgIGZhRGVlemVyLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1NhbXBsaW5nLAogICAgICBmYUplZGlPcmRlciwKICAgICAgZmFSUHJvamVjdCwKICAgICAgZmFJbnN0YWxvZCwKICAgICAgZmFDYW5hZGlhbk1hcGxlTGVhZiwKICAgICAgZmFFdGhlcmV1bSwKICAgICAgZmFIb3V6eiwKICAgICAgZmFWaWJlciwKICAgICAgZmFLaWNrc3RhcnRlciwKICAgICAgZmFTcXVhcmVLaWNrc3RhcnRlciwKICAgICAgZmFTcG90aWZ5LAogICAgICBmYUxlYW5wdWIsCiAgICAgIGZhSmF2YSwKICAgICAgZmFOZmNTeW1ib2wsCiAgICAgIGZhV29kdSwKICAgICAgZmFTcXVhcmVTdGVhbSwKICAgICAgZmFTdGVhbVNxdWFyZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNOY0V1LAogICAgICBmYU5wbSwKICAgICAgZmFDbG91ZHNjYWxlLAogICAgICBmYVRoZW1lY28sCiAgICAgIGZhR29vZ2xlUGxheSwKICAgICAgZmFLb3J2dWUsCiAgICAgIGZhVzNjLAogICAgICBmYUdyYXYsCiAgICAgIGZhQXdzLAogICAgICBmYUdsaWRlRywKICAgICAgZmFKc2ZpZGRsZSwKICAgICAgZmFLZXliYXNlLAogICAgICBmYUx1bW9uRHJvcCwKICAgICAgZmFXZWVibHksCiAgICAgIGZhRG9ja2VyLAogICAgICBmYU1hZ2VudG8sCiAgICAgIGZhR2l0QWx0LAogICAgICBmYUZpcmVmb3hCcm93c2VyLAogICAgICBmYUNsb3Vkc21pdGgsCiAgICAgIGZhV2l6YXJkc09mVGhlQ29hc3QsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zTmQsCiAgICAgIGZhVXNwcywKICAgICAgZmFTcXVhcmVMZXR0ZXJib3hkLAogICAgICBmYU1hbmRhbG9yaWFuLAogICAgICBmYVNsYWNrLAogICAgICBmYVNsYWNrSGFzaCwKICAgICAgZmFBbmdlbGxpc3QsCiAgICAgIGZhQW5kcm9pZCwKICAgICAgZmFNZWV0dXAsCiAgICAgIGZhRm9udGljb25zRmksCiAgICAgIGZhUGFsZmVkLAogICAgICBmYVdwYmVnaW5uZXIsCiAgICAgIGZhRGlhc3BvcmEsCiAgICAgIGZhUHJvZHVjdEh1bnQsCiAgICAgIGZhU3F1YXJlVXB3b3JrLAogICAgICBmYUN1dHRsZWZpc2gsCiAgICAgIGZhTWVkYXBwcywKICAgICAgZmFQaXgsCiAgICAgIGZhU3F1YXJlVHVtYmxyLAogICAgICBmYVR1bWJsclNxdWFyZSwKICAgICAgZmFSZWFjdCwKICAgICAgZmFKeGwsCiAgICAgIGZhU3F1YXJlTGlua2VkaW4sCiAgICAgIGZhQ3NzLAogICAgICBmYUhhc2hub2RlLAogICAgICBmYVJlZGRpdEFsaWVuLAogICAgICBmYVRpa3RvaywKICAgICAgZmFXb3JkcHJlc3MsCiAgICAgIGZhSWRlYWwsCiAgICAgIGZhUGllZFBpcGVyUHAsCiAgICAgIGZhVXNzdW5uYWgsCiAgICAgIGZhRm9ydEF3ZXNvbWVBbHQsCiAgICAgIGZhQnVyb21vYmVsZXhwZXJ0ZSwKICAgICAgZmFCaWxpYmlsaSwKICAgICAgZmFOZW9zLAogICAgICBmYURldiwKICAgICAgZmFIb3RqYXIsCiAgICAgIGZhRG9jaHViLAogICAgICBmYVZpbWVvLAogICAgICBmYU1heGNkbiwKICAgICAgZmFTcXVhcmVGb250QXdlc29tZVN0cm9rZSwKICAgICAgZmFGb250QXdlc29tZUFsdCwKICAgICAgZmFTcGVha2FwLAogICAgICBmYUZhbnRhc3lGbGlnaHRHYW1lcywKICAgICAgZmFMaW51eCwKICAgICAgZmFDb3R0b25CdXJlYXUsCiAgICAgIGZhR29vZ2xlV2FsbGV0LAogICAgICBmYUZvdXJzcXVhcmUsCiAgICAgIGZhU2hpcnRzaW5idWxrLAogICAgICBmYU1pbnRiaXQsCiAgICAgIGZhU3RheWxpbmtlZCwKICAgICAgZmFXZWJmbG93LAogICAgICBmYVJlbnJlbiwKICAgICAgZmFSZXYsCiAgICAgIGZhS2V5Y2RuLAogICAgICBmYUhpcmVBSGVscGVyLAogICAgICBmYVNxdWFyZUhhY2tlck5ld3MsCiAgICAgIGZhSGFja2VyTmV3c1NxdWFyZSwKICAgICAgZmFDcmVhdGl2ZUNvbW1vbnNQZEFsdCwKICAgICAgZmFPcmNpZCwKICAgICAgZmFCZWhhbmNlLAogICAgICBmYU1vbmVybywKICAgICAgZmFGaWdtYSwKICAgICAgZmFJbnN0YWdyYW0sCiAgICAgIGZhUGVyYnl0ZSwKICAgICAgZmFTcXVhcmVWaW1lbywKICAgICAgZmFWaW1lb1NxdWFyZSwKICAgICAgZmFQdXNoZWQsCiAgICAgIGZhTWl4Y2xvdWQsCiAgICAgIGZhWWFuZGV4SW50ZXJuYXRpb25hbCwKICAgICAgZmFIaXZlLAogICAgICBmYUNyZWF0aXZlQ29tbW9uc1plcm8sCiAgICAgIGZhU3F1YXJlU25hcGNoYXQsCiAgICAgIGZhU25hcGNoYXRTcXVhcmUsCiAgICAgIGZhVGhlbWVpc2xlLAogICAgICBmYURhcnRMYW5nLAogICAgICBmYURlcGxveWRvZywKICAgICAgZmFGbGlwYm9hcmQsCiAgICAgIGZhQnV5TkxhcmdlLAogICAgICBmYVdhdGNobWFuTW9uaXRvcmluZywKICAgICAgZmFIaXBzLAogICAgICBmYUNsb3VkdmVyc2lmeSwKICAgICAgZmFHb29kcmVhZHMsCiAgICAgIGZhVGlkYWwsCiAgICAgIGZhVW5pdHksCiAgICAgIGZhVGVuY2VudFdlaWJvLAogICAgICBmYUZyZWVDb2RlQ2FtcCwKICAgICAgZmFYVHdpdHRlciwKICAgICAgZmFTdGlja2VyTXVsZSwKICAgICAgZmFUd2l0Y2gsCiAgICAgIGZhS2lja3N0YXJ0ZXJLLAogICAgICBmYUNyaXRpY2FsUm9sZSwKICAgICAgZmFTdGVhbVN5bWJvbCwKICAgICAgZmFNYWlsY2hpbXAsCiAgICAgIGZhTHVtb24sCiAgICAgIGZhTnV0cml0aW9uaXgsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zU2FtcGxpbmdQbHVzLAogICAgICBmYVJlZGhhdCwKICAgICAgZmFTcXVhcmVQaWVkUGlwZXIsCiAgICAgIGZhUGllZFBpcGVyU3F1YXJlLAogICAgICBmYVdoYXRzYXBwLAogICAgICBmYUltZGIsCiAgICAgIGZhUHl0aG9uLAogICAgICBmYUNhc2hBcHAsCiAgICAgIGZhUGludGVyZXN0UCwKICAgICAgZmFXaG1jcywKICAgICAgZmFKb2dldCwKICAgICAgZmFTcXVhcmVZb3V0dWJlLAogICAgICBmYVlvdXR1YmVTcXVhcmUsCiAgICAgIGZhQXRsYXNzaWFuLAogICAgICBmYVBpZWRQaXBlckhhdCwKICAgICAgZmFJbnRlcm5ldEV4cGxvcmVyLAogICAgICBmYUFpcmJuYiwKICAgICAgZmFKcywKICAgICAgZmFRdWluc2NhcGUsCiAgICAgIGZhQWR2ZXJzYWwsCiAgICAgIGZhQ3JlYXRpdmVDb21tb25zLAogICAgICBmYU5vdGlvbiwKICAgICAgZmFDaHJvbWVjYXN0LAogICAgICBmYVdpa2lwZWRpYVcsCiAgICAgIGZhU2l0cm94LAogICAgICBmYVNxdWFyZUdpdGxhYiwKICAgICAgZmFHaXRsYWJTcXVhcmUsCiAgICAgIGZhU2hvZWxhY2UsCiAgICAgIGZhU2VsbGNhc3QsCiAgICAgIGZhTWl4LAogICAgICBmYUNjQXBwbGVQYXksCiAgICAgIGZhQnJhdmUsCiAgICAgIGZhRXRzeSwKICAgICAgZmFCdGMsCiAgICAgIGZhQWRuLAogICAgICBmYVNxdWFyZVhUd2l0dGVyLAogICAgICBmYVNxdWFyZUZvbnRBd2Vzb21lLAogICAgICBmYUZvcnVtYmVlLAogICAgICBmYTQyR3JvdXAsCiAgICAgIGZhSW5ub3NvZnQsCiAgICAgIGZhU3R1bWJsZXVwb25DaXJjbGUsCiAgICAgIGZhU3ltZm9ueSwKICAgICAgZmFTYWxlc2ZvcmNlLAogICAgICBmYVNvdXJjZXRyZWUsCiAgICAgIGZhTGlua2VkaW5JbiwKICAgICAgZmFIdG1sNSwKICAgICAgZmFSdXN0LAogICAgICBmYUhvcm5iaWxsLAogICAgICBmYVBocCwKICAgICAgZmFEaXNxdXMsCiAgICAgIGZhNTAwcHgsCiAgICAgIGZhQWZmaWxpYXRldGhlbWUsCiAgICAgIGZhUmVkUml2ZXIsCiAgICAgIGZhVHdpdHRlciwKICAgICAgZmFGb3J0QXdlc29tZSwKICAgICAgZmFNaXhlciwKICAgICAgZmFMeWZ0LAogICAgICBmYUFwcGxlUGF5LAogICAgICBmYUFydHN0YXRpb24sCiAgICAgIGZhTm9kZUpzLAogICAgICBmYVVuY2hhcnRlZCwKICAgICAgZmFQbGF5c3RhdGlvbiwKICAgICAgZmFNaWNyb2Jsb2csCiAgICAgIGZhR2l0a3Jha2VuLAogICAgICBmYVRlbGVncmFtLAogICAgICBmYVRlbGVncmFtUGxhbmUsCiAgICAgIGZhSXR1bmVzTm90ZSwKICAgICAgZmFMZXNzLAogICAgICBmYUZpcmVmb3gsCiAgICAgIGZhS2FnZ2xlLAogICAgICBmYUZhY2Vib29rTWVzc2VuZ2VyLAogICAgICBmYUF1ZGlibGUsCiAgICAgIGZhUGF0cmVvbiwKICAgICAgZmFWbnYsCiAgICAgIGZhUGFnZWxpbmVzLAogICAgICBmYUFtYXpvbiwKICAgICAgZmFFbnZpcmEsCiAgICAgIGZhTGlub2RlLAogICAgICBmYUFjY3Vzb2Z0LAogICAgICBmYUVybGFuZywKICAgICAgZmFDY0Rpc2NvdmVyLAogICAgICBmYVNhZmFyaSwKICAgICAgZmFTcGFjZUF3ZXNvbWUsCiAgICAgIGZhTm9kZSwKICAgICAgZmFDb2RlcGVuLAogICAgICBmYVJhdmVscnksCiAgICAgIGZhQWxpcGF5LAogICAgICBmYUNjQW1leCwKICAgICAgZmFQaWVkUGlwZXJBbHQsCiAgICAgIGZhTGV0dGVyYm94ZCwKICAgICAgZmFPcGVyYSwKICAgICAgZmFXZWlibywKICAgICAgZmFSZWFkbWUsCiAgICAgIGZhR29sYW5nLAogICAgICBmYVN0YWNrRXhjaGFuZ2UsCiAgICAgIGZhR3VscCwKICAgICAgZmFZZWxwLAogICAgICBmYUdvZm9yZSwKICAgICAgZmFBdmlhdG8sCiAgICAgIGZhUGFkbGV0LAogICAgICBmYUVkZ2VMZWdhY3ksCiAgICAgIGZhU3F1YXJlTGFzdGZtLAogICAgICBmYUxhc3RmbVNxdWFyZSwKICAgICAgZmFHb29kcmVhZHNHLAogICAgICBmYUNjTWFzdGVyY2FyZCwKICAgICAgZmFEaXNjb3Vyc2UsCiAgICAgIGZhQmxhY2tUaWUsCiAgICAgIGZhU3F1YXJlRmFjZWJvb2ssCiAgICAgIGZhRmFjZWJvb2tTcXVhcmUsCiAgICAgIGZhQmF0dGxlTmV0LAogICAgICBmYUJpbW9iamVjdAogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXJlZ3VsYXItc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1yZWd1bGFyLXN2Zy1pY29ucy9pbmRleC5tanMKdmFyIHByZWZpeDIsIGZhU3F1YXJlTWludXMsIGZhTWludXNTcXVhcmUsIGZhQ2FsZW5kYXJDaGVjaywgZmFGYWNlS2lzcywgZmFLaXNzLCBmYVBhc3RlLCBmYUZpbGVDbGlwYm9hcmQsIGZhSGFuZFBvaW50TGVmdCwgZmFGaWxlRXhjZWwsIGZhRW52ZWxvcGUsIGZhU3F1YXJlQ2FyZXREb3duLCBmYUNhcmV0U3F1YXJlRG93biwgZmFUcnVjaywgZmFCZWxsLCBmYU1lc3NhZ2UsIGZhQ29tbWVudEFsdCwgZmFGYWNlRGl6enksIGZhRGl6enksIGZhQ2FsZW5kYXJEYXlzLCBmYUNhbGVuZGFyQWx0LCBmYUhhbmRQb2ludFVwLCBmYUhhbmRMaXphcmQsIGZhU3F1YXJlRnVsbCwgZmFDaXJjbGVQYXVzZSwgZmFQYXVzZUNpcmNsZSwgZmFIYXJkRHJpdmUsIGZhSGRkLCBmYUZpbGVaaXBwZXIsIGZhRmlsZUFyY2hpdmUsIGZhRmxvcHB5RGlzaywgZmFTYXZlLCBmYUZhY2VHcmluVG9uZ3VlU3F1aW50LCBmYUdyaW5Ub25ndWVTcXVpbnQsIGZhQ2FtZXJhLCBmYUNhbWVyYUFsdCwgZmFGYWNlR3JpblN0YXJzLCBmYUdyaW5TdGFycywgZmFFeWUsIGZhRmFjZVNhZFRlYXIsIGZhU2FkVGVhciwgZmFTaGFyZUZyb21TcXVhcmUsIGZhU2hhcmVTcXVhcmUsIGZhTm90ZVN0aWNreSwgZmFTdGlja3lOb3RlLCBmYUhhbmRCYWNrRmlzdCwgZmFIYW5kUm9jaywgZmFDaGVzc1F1ZWVuLCBmYUZhY2VHcmluVGVhcnMsIGZhR3JpblRlYXJzLCBmYVBlblRvU3F1YXJlLCBmYUVkaXQsIGZhRmFjZUdyaW5CZWFtU3dlYXQsIGZhR3JpbkJlYW1Td2VhdCwgZmFDbG9jaywgZmFDbG9ja0ZvdXIsIGZhRmFjZUxhdWdoV2luaywgZmFMYXVnaFdpbmssIGZhUGFwZXJQbGFuZSwgZmFIZWFydCwgZmFGb250QXdlc29tZTIsIGZhRm9udEF3ZXNvbWVGbGFnMiwgZmFGb250QXdlc29tZUxvZ29GdWxsMiwgZmFDbG9uZSwgZmFGb2xkZXJPcGVuLCBmYVdpbmRvd01pbmltaXplLCBmYVN0YXJIYWxmLCBmYUFsYXJtQ2xvY2ssIGZhTmV3c3BhcGVyLCBmYUhvc3BpdGFsLCBmYUhvc3BpdGFsQWx0LCBmYUhvc3BpdGFsV2lkZSwgZmFDaXJjbGVTdG9wLCBmYVN0b3BDaXJjbGUsIGZhT2JqZWN0VW5ncm91cCwgZmFDb21tZW50LCBmYUNoZXNzUGF3biwgZmFDYWxlbmRhclBsdXMsIGZhQ2xpcGJvYXJkLCBmYVRodW1ic0Rvd24sIGZhSWRCYWRnZSwgZmFTcXVhcmVDaGVjaywgZmFDaGVja1NxdWFyZSwgZmFDaGVzc0Jpc2hvcCwgZmFFbnZlbG9wZU9wZW4sIGZhQ2lyY2xlWG1hcmssIGZhVGltZXNDaXJjbGUsIGZhWG1hcmtDaXJjbGUsIGZhU3F1YXJlQ2FyZXRVcCwgZmFDYXJldFNxdWFyZVVwLCBmYUZpbGVJbWFnZSwgZmFTcXVhcmVDYXJldFJpZ2h0LCBmYUNhcmV0U3F1YXJlUmlnaHQsIGZhU3VuLCBmYUltYWdlLCBmYUxpZ2h0YnVsYiwgZmFBZGRyZXNzQ2FyZCwgZmFDb250YWN0Q2FyZCwgZmFWY2FyZCwgZmFGYWNlTWVoLCBmYU1laCwgZmFNYXAsIGZhSGFuZFBvaW50RG93biwgZmFGYWNlTWVoQmxhbmssIGZhTWVoQmxhbmssIGZhRmFjZUdyaW5Ub25ndWUsIGZhR3JpblRvbmd1ZSwgZmFGdXRib2wsIGZhRnV0Ym9sQmFsbCwgZmFTb2NjZXJCYWxsLCBmYUZhY2VTdXJwcmlzZSwgZmFTdXJwcmlzZSwgZmFGb2xkZXIsIGZhRm9sZGVyQmxhbmssIGZhQ2xvdWQsIGZhQ2lyY2xlLCBmYUZhY2VHcmluU3F1aW50LCBmYUdyaW5TcXVpbnQsIGZhQ2lyY2xlVXNlciwgZmFVc2VyQ2lyY2xlLCBmYVJlY3RhbmdsZUxpc3QsIGZhTGlzdEFsdCwgZmFIYW5kLCBmYUhhbmRQYXBlciwgZmFUaHVtYnNVcCwgZmFCdWlsZGluZywgZmFDaGVzc1Jvb2ssIGZhQ2lyY2xlUXVlc3Rpb24sIGZhUXVlc3Rpb25DaXJjbGUsIGZhRmlsZSwgZmFGYWNlU2FkQ3J5LCBmYVNhZENyeSwgZmFDYWxlbmRhck1pbnVzLCBmYUZhY2VUaXJlZCwgZmFUaXJlZCwgZmFIYW5kUG9pbnRSaWdodCwgZmFDaXJjbGVVcCwgZmFBcnJvd0FsdENpcmNsZVVwLCBmYUhhbmRTY2lzc29ycywgZmFHZW0sIGZhUmVjdGFuZ2xlWG1hcmssIGZhUmVjdGFuZ2xlVGltZXMsIGZhVGltZXNSZWN0YW5nbGUsIGZhV2luZG93Q2xvc2UsIGZhVHJhc2hDYW4sIGZhVHJhc2hBbHQsIGZhTGlmZVJpbmcsIGZhQ29weXJpZ2h0LCBmYUNpcmNsZUxlZnQsIGZhQXJyb3dBbHRDaXJjbGVMZWZ0LCBmYUNhbGVuZGFyLCBmYUZhY2VGcm93bk9wZW4sIGZhRnJvd25PcGVuLCBmYUNoYXJ0QmFyLCBmYUJhckNoYXJ0LCBmYUhvdXNlLCBmYUhvbWUsIGZhSG9tZUFsdCwgZmFIb21lTGdBbHQsIGZhRmFjZUZyb3duLCBmYUZyb3duLCBmYVVzZXIsIGZhVXNlckFsdCwgZmFVc2VyTGFyZ2UsIGZhU25vd2ZsYWtlLCBmYUJvb2ttYXJrLCBmYVNxdWFyZUNhcmV0TGVmdCwgZmFDYXJldFNxdWFyZUxlZnQsIGZhSGFuZHNoYWtlLCBmYUhhbmRzaGFrZUFsdCwgZmFIYW5kc2hha2VTaW1wbGUsIGZhRmFjZVNtaWxlV2luaywgZmFTbWlsZVdpbmssIGZhRmFjZUdyaW5TcXVpbnRUZWFycywgZmFHcmluU3F1aW50VGVhcnMsIGZhRmlsZUF1ZGlvLCBmYUNhbGVuZGFyWG1hcmssIGZhQ2FsZW5kYXJUaW1lcywgZmFDaXJjbGVEb3duLCBmYUFycm93QWx0Q2lyY2xlRG93biwgZmFGaWxlTGluZXMsIGZhRmlsZUFsdCwgZmFGaWxlVGV4dCwgZmFDb21tZW50cywgZmFDaXJjbGVDaGVjaywgZmFDaGVja0NpcmNsZSwgZmFNb29uLCBmYUNsb3NlZENhcHRpb25pbmcsIGZhSW1hZ2VzLCBmYUNpcmNsZVJpZ2h0LCBmYUFycm93QWx0Q2lyY2xlUmlnaHQsIGZhSWRDYXJkLCBmYURyaXZlcnNMaWNlbnNlLCBmYUNpcmNsZVBsYXksIGZhUGxheUNpcmNsZSwgZmFGYWNlTGF1Z2hCZWFtLCBmYUxhdWdoQmVhbSwgZmFBZGRyZXNzQm9vaywgZmFDb250YWN0Qm9vaywgZmFIb3VyZ2xhc3MsIGZhSG91cmdsYXNzRW1wdHksIGZhSGVhZHBob25lcywgZmFIZWFkcGhvbmVzQWx0LCBmYUhlYWRwaG9uZXNTaW1wbGUsIGZhRmlsZVBvd2VycG9pbnQsIGZhV2luZG93TWF4aW1pemUsIGZhQ29tbWVudERvdHMsIGZhQ29tbWVudGluZywgZmFGYWNlR3JpblRvbmd1ZVdpbmssIGZhR3JpblRvbmd1ZVdpbmssIGZhSG91cmdsYXNzSGFsZiwgZmFIb3VyZ2xhc3MyLCBmYUNyZWRpdENhcmQsIGZhQ3JlZGl0Q2FyZEFsdCwgZmFIYW5kU3BvY2ssIGZhQmVsbFNsYXNoLCBmYVN0YXIsIGZhRmxhZywgZmFMZW1vbiwgZmFXaW5kb3dSZXN0b3JlLCBmYUZhY2VHcmluSGVhcnRzLCBmYUdyaW5IZWFydHMsIGZhRmFjZUtpc3NCZWFtLCBmYUtpc3NCZWFtLCBmYUZpbGVQZGYsIGZhRmFjZUdyaW5XaWRlLCBmYUdyaW5BbHQsIGZhRmFjZUxhdWdoU3F1aW50LCBmYUxhdWdoU3F1aW50LCBmYUZhY2VLaXNzV2lua0hlYXJ0LCBmYUtpc3NXaW5rSGVhcnQsIGZhQ29weSwgZmFDaGVzc0tpbmcsIGZhU3F1YXJlUGx1cywgZmFQbHVzU3F1YXJlLCBmYUZpbGVDb2RlLCBmYUZhY2VHcmluV2luaywgZmFHcmluV2luaywgZmFNb25leUJpbGwxLCBmYU1vbmV5QmlsbEFsdCwgZmFFeWVTbGFzaCwgZmFGaWxlV29yZCwgZmFGYWNlQW5ncnksIGZhQW5ncnksIGZhQ2hlc3NLbmlnaHQsIGZhRmFjZUdyaW5CZWFtLCBmYUdyaW5CZWFtLCBmYUhhbmRQZWFjZSwgZmFDb21wYXNzLCBmYVNxdWFyZSwgZmFGYWNlR3JpbiwgZmFHcmluLCBmYUZhY2VTbWlsZSwgZmFTbWlsZSwgZmFGYWNlU21pbGVCZWFtLCBmYVNtaWxlQmVhbSwgZmFGb2xkZXJDbG9zZWQsIGZhS2V5Ym9hcmQsIGZhRmFjZVJvbGxpbmdFeWVzLCBmYU1laFJvbGxpbmdFeWVzLCBmYUZhY2VHcmltYWNlLCBmYUdyaW1hY2UsIGZhQ2lyY2xlRG90LCBmYURvdENpcmNsZSwgZmFPYmplY3RHcm91cCwgZmFGYWNlRmx1c2hlZCwgZmFGbHVzaGVkLCBmYVN0YXJIYWxmU3Ryb2tlLCBmYVN0YXJIYWxmQWx0LCBmYUZpbGVWaWRlbywgZmFGYWNlTGF1Z2gsIGZhTGF1Z2gsIGZhSGFuZFBvaW50ZXIsIGZhUmVnaXN0ZXJlZCwgaWNvbnMyOwp2YXIgaW5pdF9mcmVlX3JlZ3VsYXJfc3ZnX2ljb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtcmVndWxhci1zdmctaWNvbnNANy4xLjAvbm9kZV9tb2R1bGVzL0Bmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4Lm1qcyIoKSB7CiAgICBwcmVmaXgyID0gImZhciI7CiAgICBmYVNxdWFyZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxNzY3LCAibWludXMtc3F1YXJlIl0sICJmMTQ2IiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwek0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTM2IDIzMmwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzU3F1YXJlID0gZmFTcXVhcmVNaW51czsKICAgIGZhQ2FsZW5kYXJDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjc0IiwgIk0zMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yODhjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnptMjMwLjcgNjUuOWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjMgMTAuNyA3LjggMTMuMSAyMi44IDUuMyAzMy41TDIxMS40IDM3NC4xYy00LjEgNS43LTEwLjUgOS4zLTE3LjUgOS44LTcgLjUtMTMuOS0yLTE4LjgtNi45bC01NS45LTU1LjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzNiAzNiAxMDUuNi0xNDUuMnoiXQogICAgfTsKICAgIGZhRmFjZUtpc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM1LCAia2lzcyJdLCAiZjU5NiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2em0tOTYtNDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhS2lzcyA9IGZhRmFjZUtpc3M7CiAgICBmYVBhc3RlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInBhc3RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpbGUtY2xpcGJvYXJkIl0sICJmMGVhIiwgIk02NCA0OGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCA0OCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTEyIDAgMC00OC0xMTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnptMTc2IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDEwNCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDUuNiAwYzguOC04LjYgMTktMTUuOCAzMC4yLTIxLjEgLjEtLjkgLjItMS45IC4yLTIuOXpNNDQ4IDQ2NGwtMTYwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsMTAxLjUgMGM0LjIgMCA4LjMgMS43IDExLjMgNC43bDU4LjUgNTguNWMzIDMgNC43IDcuMSA0LjcgMTEuM0w0NjQgNDQ4YzAgOC44LTcuMiAxNi0xNiAxNnpNMjI0IDIyNGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MGMtMzUuMyAwLTY0IDI4LjctNjQgNjR6Il0KICAgIH07CiAgICBmYUZpbGVDbGlwYm9hcmQgPSBmYVBhc3RlOwogICAgZmFIYW5kUG9pbnRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE1IiwgIk02NCAxMjhsMTc3LjYgMGMtMSA1LjItMS42IDEwLjUtMS42IDE2bDAgMTYtMTc2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bTIyNCAxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzY2LjMgMCAxMjAgNTMuNyAxMjAgMTIwbDAgNDhjMCA1Mi41LTMzLjcgOTcuMS04MC43IDExMy40IC41LTMuMSAuNy02LjIgLjctOS40IDAtMjAtOS4yLTM3LjktMjMuNi00OS43IDQuOS05IDcuNi0xOS40IDcuNi0zMC4zIDAtMTUuMS01LjMtMjktMTQtNDAgOC44LTExIDE0LTI0LjkgMTQtNDBsMC00MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDQwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODB6bTMyLTgwbDAgMGMtMTggMC0zNC42IDYtNDggMTZMNjQgODBDMjguNyA4MCAwIDEwOC43IDAgMTQ0czI4LjcgNjQgNjQgNjRsODIgMGMtMS4zIDUuMS0yIDEwLjUtMiAxNiAwIDI1LjMgMTQuNyA0Ny4yIDM2IDU3LjYtMi42IDctNCAxNC41LTQgMjIuNCAwIDIwIDkuMiAzNy45IDIzLjYgNDkuNy00LjkgOS03LjYgMTkuNC03LjYgMzAuMyAwIDM1LjMgMjguNyA2NCA2NCA2NGw4OCAwYzkyLjggMCAxNjgtNzUuMiAxNjgtMTY4bDAtNDhjMC05Mi44LTc1LjItMTY4LTE2OC0xNjhsLTI0IDB6TTI1NiA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtNjQgMHpNMjQwIDIyNGMwIDUuNSAuNyAxMC45IDIgMTZsLTM0IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMzIgMCAwIDE2em0yNCA2NGw0MCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI0IDB6Il0KICAgIH07CiAgICBmYUZpbGVFeGNlbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4Y2VsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzMiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6bTk5LjIgMjY1LjZjLTgtMTAuNi0yMy0xMi44LTMzLjYtNC44cy0xMi44IDIzLTQuOCAzMy42TDE2MiAzNDQgMTI0LjggMzkzLjZjLTggMTAuNi01LjggMjUuNiA0LjggMzMuNnMyNS42IDUuOCAzMy42LTQuOEwxOTIgMzg0IDIyMC44IDQyMi40YzggMTAuNiAyMyAxMi44IDMzLjYgNC44czEyLjgtMjMgNC44LTMzLjZMMjIyIDM0NCAyNTkuMiAyOTQuNGM4LTEwLjYgNS44LTI1LjYtNC44LTMzLjZzLTI1LjYtNS44LTMzLjYgNC44TDE5MiAzMDQgMTYzLjIgMjY1LjZ6Il0KICAgIH07CiAgICBmYUVudmVsb3BlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Mzg2LCA5OTkzLCA2MTQ0M10sICJmMGUwIiwgIk02MS40IDY0QzI3LjUgNjQgMCA5MS41IDAgMTI1LjQgMCAxMjYuMyAwIDEyNy4xIC4xIDEyOEwwIDEyOCAwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1Ni0uMSAwYzAtLjkgLjEtMS43IC4xLTIuNiAwLTMzLjktMjcuNS02MS40LTYxLjQtNjEuNEw2MS40IDY0ek00NjQgMTkyLjNMNDY0IDM4NGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xOTEuNyAxNTQuOCAxMTcuNGMzMS40IDIzLjkgNzQuOSAyMy45IDEwNi40IDBMNDY0IDE5Mi4zek00OCAxMjUuNEM0OCAxMTggNTQgMTEyIDYxLjQgMTEybDM4OS4yIDBjNy40IDAgMTMuNCA2IDEzLjQgMTMuNCAwIDQuMi0yIDguMi01LjMgMTAuN0wyODAuMiAyNzEuNWMtMTQuMyAxMC44LTM0LjEgMTAuOC00OC40IDBMNTMuMyAxMzYuMWMtMy4zLTIuNS01LjMtNi41LTUuMy0xMC43eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldERvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWRvd24iXSwgImYxNTAiLCAiTTM4NCA0MzJjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMHptNjQtMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlRG93biA9IGZhU3F1YXJlQ2FyZXREb3duOwogICAgZmFUcnVjayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY2NiwgOTk1MV0sICJmMGQxIiwgIk02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjg4YzAgOC44IDcuMiAxNiAxNiAxNmwzLjMgMGMxMC40LTM2LjkgNDQuNC02NCA4NC43LTY0czc0LjIgMjcuMSA4NC43IDY0bDEwMi42IDBjNC45LTE3LjQgMTUuMS0zMi43IDI4LjctNDMuOUwzNjggOTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwem0zLjMgMzY4TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyIDU1LjQgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN2w0MC42IDQwLjZjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w1NzYgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zLjMgMGMtMTAuNCAzNi45LTQ0LjQgNjQtODQuNyA2NHMtNzQuMi0yNy4xLTg0LjctNjRsLTEwMi42IDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0ek00MTYgMjU2bDExMiAwIDAtMjMuNGMwLTQuMi0xLjctOC4zLTQuNy0xMS4zbC00MC42LTQwLjZjLTMtMy03LjEtNC43LTExLjMtNC43bC01NS40IDAgMCA4MHptMCA0OGwwIDMyLjRjMi42LS4yIDUuMy0uNCA4LS40IDQwLjMgMCA3NC4yIDI3LjEgODQuNyA2NGwzLjMgMGM4LjggMCAxNi03LjIgMTYtMTZsMC04MC0xMTIgMHpNMTUyIDQ2NGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTI3MiAwYTQwIDQwIDAgMSAwIDAtODAgNDAgNDAgMCAxIDAgMCA4MHoiXQogICAgfTsKICAgIGZhQmVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4Mjc2LCA2MTYwMl0sICJmMGYzIiwgIk0yMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA5LjdDMTE4LjYgNDUuMyA1NiAxMTUuNCA1NiAyMDBsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDUuMSAzNTkuMkMxLjggMzY1IDAgMzcxLjUgMCAzNzguMiAwIDM5OS4xIDE2LjkgNDE2IDM3LjggNDE2bDM3Mi40IDBjMjAuOSAwIDM3LjgtMTYuOSAzNy44LTM3LjggMC02LjctMS44LTEzLjMtNS4xLTE5TDQyMSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTM5Mi40IDM2OGwtMzM2LjkgMCAxMi45LTIyLjFDOTEuNyAzMDYgMTA0IDI2MC42IDEwNCAyMTQuNWwwLTE0LjVjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjBzMTIwIDUzLjcgMTIwIDEyMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40TDM5Mi40IDM2OHpNMTU2LjEgNDY0YzkuOSAyOCAzNi42IDQ4IDY3LjkgNDhzNTgtMjAgNjcuOS00OGwtMTM1LjggMHoiXQogICAgfTsKICAgIGZhTWVzc2FnZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtZXNzYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbW1lbnQtYWx0Il0sICJmMjdhIiwgIk0yMDMuNyA1MTIuOXMwIDAgMCAwbC0zNy44IDI2LjdjLTcuMyA1LjItMTYuOSA1LjgtMjQuOSAxLjdTMTI4IDUyOSAxMjggNTIwbDAtNzItMzIgMGMtNTMgMC05Ni00My05Ni05NkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDMyMCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5NmwtMTIwLjQgMC05MS45IDY0Ljl6bTY0LjMtMTA0LjFjOC4xLTUuNyAxNy44LTguOCAyNy43LTguOEw0MTYgNDAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDgwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDIyNGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw1NiAwYzEwLjQgMCAxOS4zIDYuNiAyMi42IDE1LjkgLjkgMi41IDEuNCA1LjIgMS40IDguMWwwIDQ5LjdjMzIuNy0yMy4xIDYzLjMtNDQuNyA5MS45LTY0Ljl6Il0KICAgIH07CiAgICBmYUNvbW1lbnRBbHQgPSBmYU1lc3NhZ2U7CiAgICBmYUZhY2VEaXp6eSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWRpenp5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpenp5Il0sICJmNTY3IiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTEzNC4xIDE1My45bDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwem0xOTIgMGwyNS45IDI1LjkgMjUuOS0yNS45YzcuOC03LjggMjAuNS03LjggMjguMyAwczcuOCAyMC41IDAgMjguM2wtMjUuOSAyNS45IDI1LjkgMjUuOWM3LjggNy44IDcuOCAyMC41IDAgMjguM3MtMjAuNSA3LjgtMjguMyAwbC0yNS45LTI1LjktMjUuOSAyNS45Yy03LjggNy44LTIwLjUgNy44LTI4LjMgMHMtNy44LTIwLjUgMC0yOC4zbDI1LjktMjUuOS0yNS45LTI1LjljLTcuOC03LjgtNy44LTIwLjUgMC0yOC4zczIwLjUtNy44IDI4LjMgMHpNMjU2IDI4OGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHoiXQogICAgfTsKICAgIGZhRGl6enkgPSBmYUZhY2VEaXp6eTsKICAgIGZhQ2FsZW5kYXJEYXlzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLWRheXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FsZW5kYXItYWx0Il0sICJmMDczIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTM4NCA0MzJjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjQtODggMCAwIDgwIDcyIDB6bTE2LTEyOGwwLTgwLTg4IDAgMCA4MCA4OCAwem0tMTM2IDBsMC04MC04MCAwIDAgODAgODAgMHptLTEyOCAwbDAtODAtODggMCAwIDgwIDg4IDB6TTQ4IDM1MmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw3MiAwIDAtODAtODggMHptMTM2IDBsMCA4MCA4MCAwIDAtODAtODAgMHpNMTIwIDExMmwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNDggMzUyIDAgMC00OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAweiJdCiAgICB9OwogICAgZmFDYWxlbmRhckFsdCA9IGZhQ2FsZW5kYXJEYXlzOwogICAgZmFIYW5kUG9pbnRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc1N10sICJmMGE2IiwgIk02NCA2NGwwIDE3Ny42YzUuMi0xIDEwLjUtMS42IDE2LTEuNmwxNiAwIDAtMTc2YzAtOC44LTcuMi0xNi0xNi0xNlM2NCA1NS4yIDY0IDY0ek04MCAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMjRjMCA2Ni4zIDUzLjcgMTIwIDEyMCAxMjBsNDggMGM1Mi41IDAgOTcuMS0zMy43IDExMy40LTgwLjctMy4xIC41LTYuMiAuNy05LjQgLjctMjAgMC0zNy45LTkuMi00OS43LTIzLjYtOSA0LjktMTkuNCA3LjYtMzAuMyA3LjYtMTUuMSAwLTI5LTUuMy00MC0xNC0xMSA4LjgtMjQuOSAxNC00MCAxNGwtNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0MCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC04MCAwek0wIDMyMGwwIDBjMC0xOCA2LTM0LjYgMTYtNDhMMTYgNjRDMTYgMjguNyA0NC43IDAgODAgMHM2NCAyOC43IDY0IDY0bDAgODJjNS4xLTEuMyAxMC41LTIgMTYtMiAyNS4zIDAgNDcuMiAxNC43IDU3LjYgMzYgNy0yLjYgMTQuNS00IDIyLjQtNCAyMCAwIDM3LjkgOS4yIDQ5LjcgMjMuNiA5LTQuOSAxOS40LTcuNiAzMC4zLTcuNiAzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDg4YzAgOTIuOC03NS4yIDE2OC0xNjggMTY4bC00OCAwQzc1LjIgNTEyIDAgNDM2LjggMCAzNDRsMC0yNHptMzM2LTY0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0ek0xNjAgMjQwYzUuNSAwIDEwLjkgLjcgMTYgMmwwLTM0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMzIgMTYgMHptNjQgMjRsMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAyNHoiXQogICAgfTsKICAgIGZhSGFuZExpemFyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWxpemFyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU4IiwgIk03MiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTY4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE1MiAwYzQuNSAwIDguOSAxLjMgMTIuNyAzLjZsNjQgNDBjNyA0LjQgMTEuMyAxMi4xIDExLjMgMjAuNGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTAuNy00Ni45LTI5LjMtMTQ1LjEgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmwxMDQgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNkw3MiAyMDhjLTM5LjggMC03Mi0zMi4yLTcyLTcyUzMyLjIgNjQgNzIgNjRsMjA5LjYgMGM0Ni43IDAgOTAuOSAyMS41IDExOS43IDU4LjNsNzguNCAxMDAuMWMyMC45IDI2LjcgMzIuMyA1OS43IDMyLjMgOTMuN0w1MTIgNDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTA3LjljMC0yMy4yLTcuOC00NS44LTIyLjEtNjQuMUwzNjMuNSAxNTEuOWMtMTkuNy0yNS4yLTQ5LjktMzkuOS04MS45LTM5LjlMNzIgMTEyeiJdCiAgICB9OwogICAgZmFTcXVhcmVGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1mdWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4OTk3LCAxMjg5OTgsIDEyODk5OSwgMTI5ZTMsIDEyOTAwMSwgMTI5MDAyLCAxMjkwMDMsIDExMDM1LCAxMTAzNl0sICJmNDVjIiwgIk00NDggNDhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMzg0IDB6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVBhdXNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wYXVzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDkyLCAicGF1c2UtY2lyY2xlIl0sICJmMjhiIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHptMTEyIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE0NHoiXQogICAgfTsKICAgIGZhUGF1c2VDaXJjbGUgPSBmYUNpcmNsZVBhdXNlOwogICAgZmFIYXJkRHJpdmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFyZC1kcml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQzNiwgImhkZCJdLCAiZjBhMCIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2MmM1LjEtMS4zIDEwLjUtMiAxNi0ybDMyMCAwYzUuNSAwIDEwLjkgLjcgMTYgMmwwLTE2MmMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTQ4IDMyMGwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMzA0Yy04LjggMC0xNiA3LjItMTYgMTZ6TTAgMzIwTDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2em0yMTYgNDhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhSGRkID0gZmFIYXJkRHJpdmU7CiAgICBmYUZpbGVaaXBwZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS16aXBwZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1hcmNoaXZlIl0sICJmMWM2IiwgIk02NCA0OGwxMTIgMCAwIDg4YzAgMzkuOCAzMi4yIDcyIDcyIDcybDg4IDAgMCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDY0YzAtOC44IDcuMi0xNiAxNi0xNnpNMjI0IDY3LjlsOTIuMSA5Mi4xLTY4LjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC02OC4xek02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI2MS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI0Mi43IDE4LjdDMjMwLjcgNi43IDIxNC41IDAgMTk3LjUgMEw2NCAwek04MCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTAgODBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTY0IDU2bC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTE2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhRmlsZUFyY2hpdmUgPSBmYUZpbGVaaXBwZXI7CiAgICBmYUZsb3BweURpc2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmxvcHB5LWRpc2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTAsIDEyODQyNiwgInNhdmUiXSwgImYwYzciLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0Mi43YzAtNC4yLTEuNy04LjMtNC43LTExLjNMMzIwIDg2LjYgMzIwIDE3NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTYtMzIgMHptODAgMGwwIDgwIDEyOCAwIDAtODAtMTI4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjQyLjcgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjhjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0w0NDggNDE2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTYwIDMyMGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYVNhdmUgPSBmYUZsb3BweURpc2s7CiAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQxLCAiZ3Jpbi10b25ndWUtc3F1aW50Il0sICJmNThhIiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA3NS45IDQwLjcgMTQyLjQgMTAxLjUgMTc4LjctMy42LTEwLjktNS41LTIyLjYtNS41LTM0LjdsMC0zNy41Yy0xMC4yLTEyLjYtMTguMy0yNi45LTIzLjgtNDIuNC00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjYgMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTUuNSAxNS42LTEzLjYgMjkuOS0yMy44IDQyLjVsMCAzNy41YzAgMTIuMS0xLjkgMjMuOC01LjUgMzQuNyA2MC44LTM2LjMgMTAxLjUtMTAyLjcgMTAxLjUtMTc4Ljd6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTEyNS44LTc1LjdjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjFzMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zem0yNjMuNi0yMS4xYzQuNSA2LjggMy4xIDE1LjktMy4xIDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXpNMzIwIDQxNmwwLTM3LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCAzNy40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVTcXVpbnQgPSBmYUZhY2VHcmluVG9uZ3VlU3F1aW50OwogICAgZmFDYW1lcmEgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIyNTgsICJjYW1lcmEtYWx0Il0sICJmMDMwIiwgIk0xOTMuMSAzMmMtMTguNyAwLTM2LjIgOS40LTQ2LjYgMjQuOUwxMjAuNSA5NiA2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTU2LjUgMC0yNi0zOS4xQzM1NS4xIDQxLjQgMzM3LjYgMzIgMzE4LjkgMzJMMTkzLjEgMzJ6bS02LjcgNTEuNmMxLjUtMi4yIDQtMy42IDYuNy0zLjZsMTI1LjcgMGMyLjcgMCA1LjIgMS4zIDYuNyAzLjZsMzMuMiA0OS44YzQuNSA2LjcgMTEuOSAxMC43IDIwIDEwLjdsNjkuMyAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDI1NmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDY5LjMgMGM4IDAgMTUuNS00IDIwLTEwLjdsMzMuMi00OS44ek0yNTYgMzg0YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHpNMTkyIDI3MmE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYUNhbWVyYUFsdCA9IGZhQ2FtZXJhOwogICAgZmFGYWNlR3JpblN0YXJzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1zdGFycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMyMSwgImdyaW4tc3RhcnMiXSwgImY1ODciLCAiTTAgMjU2YzAtMjkuNiA1LTU3LjkgMTQuMi04NC40bDE3LjMgMTYuOS00LjYgMjdjLTQuMiAyNC40IDUuNiA0Ni4yIDIyIDU5LjkgOS44IDEwNS44IDk4LjggMTg4LjcgMjA3LjEgMTg4LjdzMTk3LjQtODIuOCAyMDcuMS0xODguNmMxNi40LTEzLjcgMjYuMS0zNS40IDIyLTU5LjlsLTQuNi0yNyAxNy4zLTE2LjljOS4yIDI2LjQgMTQuMiA1NC44IDE0LjIgODQuNCAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzAgMzk3LjQgMCAyNTZ6TTI1NiA0OGMtMTUuMiAwLTMwIDEuNi00NC4zIDQuN0wyMDEuNCAzMS44QzE5NyAyMyAxOTEuMSAxNS44IDE4NC4yIDEwLjIgMjA3IDMuNiAyMzEuMSAwIDI1NiAwczQ5IDMuNiA3MS44IDEwLjJDMzIwLjkgMTUuOCAzMTUgMjMgMzEwLjYgMzEuOEwzMDAuMyA1Mi43QzI4NiA0OS42IDI3MS4yIDQ4IDI1NiA0OHpNMzcyLjIgMzAyLjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTM1My43IDUzLjFjNS45LTExLjkgMjIuOC0xMS45IDI4LjcgMGwyMy4zIDQ3LjIgNTIgNy42YzEzLjEgMS45IDE4LjQgMTggOC45IDI3LjNsLTM3LjcgMzYuNyA4LjkgNTEuOGMyLjIgMTMuMS0xMS41IDIzLTIzLjIgMTYuOUwzNjggMjE2IDMyMS41IDI0MC41Yy0xMS43IDYuMi0yNS41LTMuOC0yMy4yLTE2LjlsOC45LTUxLjgtMzcuNy0zNi43Yy05LjUtOS4zLTQuMy0yNS40IDguOS0yNy4zbDUyLTcuNiAyMy4zLTQ3LjJ6bS0xOTUuMyAwbDIzLjMgNDcuMiA1MiA3LjZjMTMuMSAxLjkgMTguNCAxOCA4LjkgMjcuM2wtMzcuNyAzNi43IDguOSA1MS44YzIuMiAxMy4xLTExLjUgMjMtMjMuMiAxNi45TDE0NCAyMTYgOTcuNSAyNDAuNWMtMTEuNyA2LjItMjUuNS0zLjgtMjMuMi0xNi45bDguOS01MS44LTM3LjctMzYuN2MtOS41LTkuMy00LjMtMjUuNCA4LjktMjcuM2w1Mi03LjYgMjMuMy00Ny4yYzUuOS0xMS45IDIyLjgtMTEuOSAyOC43IDB6Il0KICAgIH07CiAgICBmYUdyaW5TdGFycyA9IGZhRmFjZUdyaW5TdGFyczsKICAgIGZhRXllID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImV5ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODA2NV0sICJmMDZlIiwgIk0yODggODBDMjIyLjggODAgMTY5LjIgMTA5LjYgMTI4LjEgMTQ3LjcgODkuNiAxODMuNSA2MyAyMjYgNDkuNCAyNTYgNjMgMjg2IDg5LjYgMzI4LjUgMTI4LjEgMzY0LjMgMTY5LjIgNDAyLjQgMjIyLjggNDMyIDI4OCA0MzJzMTE4LjgtMjkuNiAxNTkuOS02Ny43QzQ4Ni40IDMyOC41IDUxMyAyODYgNTI2LjYgMjU2IDUxMyAyMjYgNDg2LjQgMTgzLjUgNDQ3LjkgMTQ3LjcgNDA2LjggMTA5LjYgMzUzLjIgODAgMjg4IDgwek05NS40IDExMi42QzE0Mi41IDY4LjggMjA3LjIgMzIgMjg4IDMyczE0NS41IDM2LjggMTkyLjYgODAuNmM0Ni44IDQzLjUgNzguMSA5NS40IDkzIDEzMS4xIDMuMyA3LjkgMy4zIDE2LjcgMCAyNC42LTE0LjkgMzUuNy00Ni4yIDg3LjctOTMgMTMxLjEtNDcuMSA0My43LTExMS44IDgwLjYtMTkyLjYgODAuNlMxNDIuNSA0NDMuMiA5NS40IDM5OS40Yy00Ni44LTQzLjUtNzguMS05NS40LTkzLTEzMS4xLTMuMy03LjktMy4zLTE2LjcgMC0yNC42IDE0LjktMzUuNyA0Ni4yLTg3LjcgOTMtMTMxLjF6TTI4OCAzMzZjNDQuMiAwIDgwLTM1LjggODAtODAgMC0yOS42LTE2LjEtNTUuNS00MC02OS4zLTEuNCA1OS43LTQ5LjYgMTA3LjktMTA5LjMgMTA5LjMgMTMuOCAyMy45IDM5LjcgNDAgNjkuMyA0MHptLTc5LjYtODguNGMyLjUgLjMgNSAuNCA3LjYgLjQgMzUuMyAwIDY0LTI4LjcgNjQtNjQgMC0yLjYtLjItNS4xLS40LTcuNi0zNy40IDMuOS02Ny4yIDMzLjctNzEuMSA3MS4xem00NS42LTExNWMxMC44LTMgMjIuMi00LjUgMzMuOS00LjUgOC44IDAgMTcuNSAuOSAyNS44IDIuNiAuMyAuMSAuNSAuMSAuOCAuMiA1Ny45IDEyLjIgMTAxLjQgNjMuNyAxMDEuNCAxMjUuMiAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOC02MS42IDAtMTEzLTQzLjUtMTI1LjItMTAxLjQtMS44LTguNi0yLjgtMTcuNS0yLjgtMjYuNiAwLTExIDEuNC0yMS44IDQtMzIgLjItLjcgLjMtMS4zIC41LTEuOSAxMS45LTQzLjQgNDYuMS03Ny42IDg5LjUtODkuNXoiXQogICAgfTsKICAgIGZhRmFjZVNhZFRlYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtdGVhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0NiwgInNhZC10ZWFyIl0sICJmNWI0IiwgIk00NjQgMjU2YzAtMTE0LjktOTMuMS0yMDgtMjA4LTIwOFM0OCAxNDEuMSA0OCAyNTZjMCA0MS44IDEyLjMgODAuNyAzMy42IDExMy4zIDguMiA0NC43IDQ3LjMgNzguNiA5NC4zIDc4LjcgMjQuNyAxMC4zIDUxLjcgMTYgODAuMSAxNiAxMTQuOSAwIDIwOC05My4xIDIwOC0yMDh6TTI4OCAzNTJjLTUuNSAwLTEwLjkgLjYtMTYgMS44IDAtLjYgMC0xLjIgMC0xLjggMC0xNi4yLTQtMzEuNS0xMS4xLTQ0LjkgOC43LTIgMTcuOC0zLjEgMjcuMS0zLjEgNDAuMiAwIDc1LjcgMTkuOCA5Ny41IDUwIDcuNyAxMC44IDUuMyAyNS44LTUuNSAzMy41cy0yNS44IDUuMy0zMy41LTUuNWMtMTMuMS0xOC4yLTM0LjQtMzAtNTguNS0zMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LTgwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4NS40IDI3Ni44YzYuNSA3LjggMTIuNiAxNi4xIDE4LjMgMjQuNiA5IDEzLjQgMjAuMyAzMC4yIDIwLjMgNDcuNCAwIDI4LjMtMjEuNSA1MS4yLTQ4IDUxLjJzLTQ4LTIyLjktNDgtNTEuMmMwLTE3LjIgMTEuMi0zNCAyMC4zLTQ3LjQgNS43LTguNSAxMS45LTE2LjcgMTguMy0yNC42IDIuNC0yLjkgNS43LTQuOCA5LjQtNC44czcgMS45IDkuNCA0Ljh6Il0KICAgIH07CiAgICBmYVNhZFRlYXIgPSBmYUZhY2VTYWRUZWFyOwogICAgZmFTaGFyZUZyb21TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgInNoYXJlLXNxdWFyZSJdLCAiZjE0ZCIsICJNNDI1LjUgN2MtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMzODQuNSAxNC4zIDM4NC41IDI0bDAgNTYtNDggMGMtODguNCAwLTE2MCA3MS42LTE2MCAxNjAgMCA0Ni43IDIwLjcgODAuNCA0My42IDEwMy40IDguMSA4LjIgMTYuNSAxNC45IDI0LjMgMjAuNCA5LjIgNi41IDIxLjcgNS43IDMwLjEtMS45czEwLjItMjAgNC41LTI5LjhjLTMuNi02LjMtNi41LTE0LjktNi41LTI2LjcgMC0zNi4yIDI5LjMtNjUuNSA2NS41LTY1LjVsNDYuNSAwIDAgNTZjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4ybDEzNi0xMzZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlMNDI1LjUgN3ptNyA5N2wwLTIyLjEgNzguMSA3OC4xLTc4LjEgNzguMSAwLTIyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRMMzM4IDE5MmMtNTAuOSAwLTkzLjkgMzMuNS0xMDguMyA3OS42LTMuMy05LjQtNS4yLTE5LjgtNS4yLTMxLjYgMC02MS45IDUwLjEtMTEyIDExMi0xMTJsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHptLTMyMC04Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI1NmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGwyNTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNCAweiJdCiAgICB9OwogICAgZmFTaGFyZVNxdWFyZSA9IGZhU2hhcmVGcm9tU3F1YXJlOwogICAgZmFOb3RlU3RpY2t5ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm5vdGUtc3RpY2t5IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjIwMjYsICJzdGlja3ktbm90ZSJdLCAiZjI0OSIsICJNMjQwIDQzMkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTc2LTg4IDBjLTM5LjggMC03MiAzMi4yLTcyIDcybDAgODh6TTM4MC4xIDMyMEwyODggNDEyLjEgMjg4IDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw2OC4xIDB6TTAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5Ny41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDI5LjMgMzM4LjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w0NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNnoiXQogICAgfTsKICAgIGZhU3RpY2t5Tm90ZSA9IGZhTm90ZVN0aWNreTsKICAgIGZhSGFuZEJhY2tGaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtYmFjay1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhhbmQtcm9jayJdLCAiZjI1NSIsICJNOTYgNDAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgNDAwek03My4yIDM1Mmw2NC42IDAtNzkuNS04OC4zQzUxLjcgMjU2LjMgNDggMjQ2LjggNDggMjM2LjlMNDggMjA0YzAtMTYuMSAxMS45LTI5LjUgMjcuNC0zMS43IDExLjgtMS43IDIwLjYtMTEuOCAyMC42LTIzLjhMOTYgNzJjMC0xMy4zIDEwLjctMjQgMjQtMjQgNy4yIDAgMTMuNiAzLjEgMTggOC4xIDQuNiA1LjIgMTEuMSA4LjEgMTggOC4xczEzLjQtMyAxOC04LjFjNC40LTUgMTAuOC04LjEgMTgtOC4xIDguNSAwIDE1LjkgNC40IDIwLjIgMTEuMSA2LjkgMTAuNyAyMC45IDE0LjIgMzIgOCAzLjUtMS45IDcuNC0zLjEgMTEuOC0zLjEgMTAuNiAwIDE5LjcgNi45IDIyLjggMTYuNiAzLjggMTEuNyAxNS45IDE4LjcgMjggMTYgMS43LS40IDMuNC0uNiA1LjItLjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA5Mi4yYzAgMTQuNC0zLjUgMjguNS0xMC4yIDQxLjJsLTUyLjIgOTguNiA1NC4zIDAgNDAuMy03Ni4yYzEwLjQtMTkuNiAxNS44LTQxLjUgMTUuOC02My42bDAtOTIuMmMwLTM4LjQtMzAuMS02OS44LTY4LjEtNzEuOS0xMi45LTE5LjMtMzQuOS0zMi4xLTU5LjktMzIuMS01LjcgMC0xMS4yIC43LTE2LjUgMS45LTEyLjctMTEuMS0yOS4zLTE3LjktNDcuNS0xNy45LTEzLjEgMC0yNS40IDMuNS0zNiA5LjYtMTAuNi02LjEtMjIuOS05LjYtMzYtOS42LTM5LjggMC03MiAzMi4yLTcyIDcybDAgNTguN0MxOS43IDE0MyAwIDE3MS4yIDAgMjA0bDAgMzIuOWMwIDIxLjcgOCA0Mi43IDIyLjYgNTguOUw3My4yIDM1MnoiXQogICAgfTsKICAgIGZhSGFuZFJvY2sgPSBmYUhhbmRCYWNrRmlzdDsKICAgIGZhQ2hlc3NRdWVlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1xdWVlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4MTldLCAiZjQ0NSIsICJNMzI1LjMgOTAuOGM5LjEtNC44IDIwLjYtMy4zIDI4LjIgNC4zbDM5LjggMzkuOCAzLjcgMy4zYzkuMSA3LjEgMjAuOSAxMCAzMi40IDcuN2w0Ni40LTkuMyAzLjUtLjRjOC0uNCAxNS44IDMuMiAyMC42IDkuOCA1LjUgNy42IDYuMSAxNy42IDEuNiAyNS44bC0xMTIuNiAyMDIuNiA1MS41IDcwLjkgMS44IDIuN2M0IDYuNiA2LjIgMTQuMiA2LjIgMjIgMCAyMy4zLTE4LjkgNDIuMS00Mi4xIDQyLjFsLTI5OS44IDBjLTIxLjggMC0zOS44LTE2LjYtNDEuOS0zNy44bC0uMi00LjMgLjEtMy4zYy42LTcuNyAzLjQtMTUuMSA3LjktMjEuNGw1MS41LTcwLjktMTEyLjUtMjAyLjZjLTQuNS04LjItMy45LTE4LjMgMS42LTI1LjhzMTQuOS0xMS4yIDI0LjEtOS40bDQ2LjQgOS4zYzEzLjEgMi42IDI2LjctMS41IDM2LjEtMTAuOUwxNTkuNSA5NSAxNjMgOTIuMmM4LjYtNS44IDIwLjEtNS42IDI4LjUgMS4xbDQwIDMyIDIuOCAyLjFjMTQuNCA5LjYgMzMuNSA4LjkgNDcuMi0yLjFsNDAtMzIgMy44LTIuNXpNMTY0LjcgNDAwbC00Ni42IDY0IDI3Ni43IDAtNDYuNi02NC0xODMuNiAwek0zMTEuNSAxNjIuOGMtMzAuMSAyNC4xLTcyLjEgMjUuNi0xMDMuOCA0LjVsLTYuMi00LjUtMjMuMy0xOC42LTI0LjYgMjQuNmMtMTkuOCAxOS44LTQ3LjcgMjguOS03NS4xIDI0LjhsODguMSAxNTguNSAxNzkuOCAwIDg4LTE1OC41Yy0yNS43IDMuOC01MS43LTMuOS03MS4xLTIxbC00LTMuNy0yNC42LTI0LjYtMjMuMiAxOC42ek0yNTYuNSA3MmE0MCA0MCAwIDEgMSAwLTgwIDQwIDQwIDAgMSAxIDAgODB6Il0KICAgIH07CiAgICBmYUZhY2VHcmluVGVhcnMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRlYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCAiZ3Jpbi10ZWFycyJdLCAiZjU4OCIsICJNNTA0LjEgMzUzQzUxMi45IDM2Ny4yIDUyNS4zIDM3OSA1MzkuOCAzODcuMiA0OTUuMSA0NjIgNDEzLjQgNTEyIDMyMCA1MTJTMTQ0LjkgNDYyIDEwMC4yIDM4Ny4yYzE0LjYtOC4yIDI2LjktMjAgMzUuOC0zNC4zIDM0LjkgNjYgMTA0LjIgMTExIDE4NC4xIDExMXMxNDkuMi00NSAxODQuMS0xMTF6bTE2LjQtMTUyLjVDNDk2LjIgMTEyLjYgNDE1LjcgNDggMzIwIDQ4UzE0My44IDExMi42IDExOS41IDIwMC41Yy0xMC42LTQuOC0yMi43LTYuOC0zNS40LTVsLTEzLjQgMS45Qzk3LjIgODQuMyAxOTguOCAwIDMyMCAwUzU0Mi44IDg0LjMgNTY5LjMgMTk3LjRsLTEzLjQtMS45Yy0xMi43LTEuOC0yNC44IC4yLTM1LjQgNXpNNDU1LjggMzIwYy0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOHpNMjEyIDIwOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4em0xODgtMjhjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6TTY0MCAzMDAuNmMwIDI4LjQtMjMgNTEuNC01MS40IDUxLjQtMjUuNiAwLTQ3LjMtMTguOC01MC45LTQ0LjFMNTMxIDI2MS4xYy0xLjUtMTAuNiA3LjUtMTkuNiAxOC4xLTE4LjFsNDYuNyA2LjdjMjUuMyAzLjYgNDQuMSAyNS4zIDQ0LjEgNTAuOXptLTY0MCAwYzAtMjUuNiAxOC44LTQ3LjMgNDQuMS01MC45TDkwLjkgMjQzYzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDOTguNyAzMzMuMiA3NyAzNTIgNTEuNCAzNTIgMjMgMzUyIDAgMzI5IDAgMzAwLjZ6Il0KICAgIH07CiAgICBmYUdyaW5UZWFycyA9IGZhRmFjZUdyaW5UZWFyczsKICAgIGZhUGVuVG9TcXVhcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAicGVuLXRvLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJlZGl0Il0sICJmMDQ0IiwgIk00NDEgNTguOUw0NTMuMSA3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOUw0MjQgMTM0LjEgMzc3LjkgODggNDA3IDU4LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6TTIwOS44IDI1Ni4yTDM0NCAxMjEuOSAzOTAuMSAxNjggMjU1LjggMzAyLjJjLTIuOSAyLjktNi41IDUtMTAuNCA2LjFsLTU4LjUgMTYuNyAxNi43LTU4LjVjMS4xLTMuOSAzLjItNy41IDYuMS0xMC40ek0zNzMuMSAyNUwxNzUuOCAyMjIuMmMtOC43IDguNy0xNSAxOS40LTE4LjMgMzEuMWwtMjguNiAxMDBjLTIuNCA4LjQtLjEgMTcuNCA2LjEgMjMuNnMxNS4yIDguNSAyMy42IDYuMWwxMDAtMjguNmMxMS44LTMuNCAyMi41LTkuNyAzMS4xLTE4LjNMNDg3IDEzOC45YzI4LjEtMjguMSAyOC4xLTczLjcgMC0xMDEuOEw0NzQuOSAyNUM0NDYuOC0zLjEgNDAxLjItMy4xIDM3My4xIDI1ek04OCA2NEMzOS40IDY0IDAgMTAzLjQgMCAxNTJMMCA0MjRjMCA0OC42IDM5LjQgODggODggODhsMjcyIDBjNDguNiAwIDg4LTM5LjQgODgtODhsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBMODggNDY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTI3MmMwLTIyLjEgMTcuOS00MCA0MC00MGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA2NHoiXQogICAgfTsKICAgIGZhRWRpdCA9IGZhUGVuVG9TcXVhcmU7CiAgICBmYUZhY2VHcmluQmVhbVN3ZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi1iZWFtLXN3ZWF0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NTE3LCAiZ3Jpbi1iZWFtLXN3ZWF0Il0sICJmNTgzIiwgIk01MzAuMiAxNS45Yy04LjgtMTAuNy0xOC41LTIwLjktMjktMzAtMy0yLjYtNy40LTIuNi0xMC40IDAtMTAuNSA5LjEtMjAuMSAxOS4zLTI5IDMwLTE0LjcgMTcuOC0yOS44IDQwLjEtMjkuOCA2NC4xIDAgMzYuNCAyNy42IDY0IDY0IDY0czY0LTI3LjYgNjQtNjRjMC0yNC0xNS4yLTQ2LjMtMjkuOC02NC4xem0tMTMyIDguOUMzNjQuOCA4LjkgMzI3LjQgMCAyODggMCAxNDYuNiAwIDMyIDExNC42IDMyIDI1NlMxNDYuNiA1MTIgMjg4IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NmMwLTI0LjQtMy40LTQ4LTkuOC03MC40LTExLjkgNC4yLTI0LjcgNi40LTM4LjIgNi40LTMuNCAwLTYuOC0uMS0xMC4yLS40IDYuNiAyMC4zIDEwLjIgNDEuOSAxMC4yIDY0LjQgMCAxMTQuOS05My4xIDIwOC0yMDggMjA4UzgwIDM3MC45IDgwIDI1NiAxNzMuMSA0OCAyODggNDhjMzQuOCAwIDY3LjUgOC41IDk2LjMgMjMuNiAxLjQtMTcuNCA2LjktMzMuMSAxMy44LTQ2Ljh6TTQyMy44IDMyMGM0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggMTkuOCA1NS45IDczLjEgOTUuOSAxMzUuOCA5NS45IDYyLjcgMCAxMTYtNDAuMSAxMzUuOC05NnpNMTgwIDIwOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHMyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOHptMTg4LTI4YzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW1Td2VhdCA9IGZhRmFjZUdyaW5CZWFtU3dlYXQ7CiAgICBmYUNsb2NrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzM5LCAiY2xvY2stZm91ciJdLCAiZjAxNyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAwIDUxMiAwIDI1NiAyNTYgMCAxIDAgLTUxMiAwek0yMzIgMTIwbDAgMTM2YzAgOCA0IDE1LjUgMTAuNyAyMGw5NiA2NGMxMSA3LjQgMjUuOSA0LjQgMzMuMy02LjdzNC40LTI1LjktNi43LTMzLjNMMjgwIDI0My4yIDI4MCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUNsb2NrRm91ciA9IGZhQ2xvY2s7CiAgICBmYUZhY2VMYXVnaFdpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXdpbmsiXSwgImY1OWMiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYUxhdWdoV2luayA9IGZhRmFjZUxhdWdoV2luazsKICAgIGZhUGFwZXJQbGFuZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJwYXBlci1wbGFuZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxOTEzXSwgImYxZDgiLCAiTTI5MC41IDI4Ny43TDQ5MS40IDg2LjkgMzU5IDQ1Ni4zIDI5MC41IDI4Ny43ek00NTcuNCA1M0wyNTYuNiAyNTMuOCA4OCAxODUuMyA0NTcuNCA1M3pNMzguMSAyMTYuOGwyMDUuOCA4My42IDgzLjYgMjA1LjhjNS4zIDEzLjEgMTguMSAyMS43IDMyLjMgMjEuNyAxNC43IDAgMjcuOC05LjIgMzIuOC0yMy4xTDU3MC42IDhjMy41LTkuOCAxLTIwLjYtNi4zLTI4cy0xOC4yLTkuOC0yOC02LjNMMzkuNCAxNTEuN2MtMTMuOSA1LTIzLjEgMTguMS0yMy4xIDMyLjggMCAxNC4yIDguNiAyNyAyMS43IDMyLjN6Il0KICAgIH07CiAgICBmYUhlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTUzLCAxMjgxNTQsIDEyODE1NSwgMTI4MTU2LCAxMjg0MjAsIDEyOTI5MywgMTI5Mjk0LCAxMjk1MDUsIDk4MjksIDEwMDg0LCA2MTU3OF0sICJmMDA0IiwgIk0zNzguOSA4MGMtMjcuMyAwLTUzIDEzLjEtNjkgMzUuMmwtMzQuNCA0Ny42Yy00LjUgNi4yLTExLjcgOS45LTE5LjQgOS45cy0xNC45LTMuNy0xOS40LTkuOWwtMzQuNC00Ny42Yy0xNi0yMi4xLTQxLjctMzUuMi02OS0zNS4yLTQ3IDAtODUuMSAzOC4xLTg1LjEgODUuMSAwIDQ5LjkgMzIgOTguNCA2OC4xIDE0Mi4zIDQxLjEgNTAgOTEuNCA5NCAxMjUuOSAxMjAuMyAzLjIgMi40IDcuOSA0LjIgMTQgNC4yczEwLjgtMS44IDE0LTQuMmMzNC41LTI2LjMgODQuOC03MC40IDEyNS45LTEyMC4zIDM2LjItNDMuOSA2OC4xLTkyLjQgNjguMS0xNDIuMyAwLTQ3LTM4LjEtODUuMS04NS4xLTg1LjF6TTI3MSA4Ny4xYzI1LTM0LjYgNjUuMi01NS4xIDEwNy45LTU1LjEgNzMuNSAwIDEzMy4xIDU5LjYgMTMzLjEgMTMzLjEgMCA2OC42LTQyLjkgMTI4LjktNzkuMSAxNzIuOC00NC4xIDUzLjYtOTcuMyAxMDAuMS0xMzMuOCAxMjcuOS0xMi4zIDkuNC0yNy41IDE0LjEtNDMuMSAxNC4xcy0zMC44LTQuNy00My4xLTE0LjFDMTc2LjQgNDM4IDEyMy4yIDM5MS41IDc5LjEgMzM4IDQyLjkgMjk0LjEgMCAyMzMuNyAwIDE2NS4xIDAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xbDE1IDIwLjcgMTUtMjAuN3oiXQogICAgfTsKICAgIGZhRm9udEF3ZXNvbWUyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNTAxLCA2MjY5NCwgImZvbnQtYXdlc29tZS1mbGFnIiwgImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwgImYyYjQiLCAiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNDggMCAwLTY0IDM4OS42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2ek04MCA0MDBsMC0yNTYgMzU2LjQgMC00OC4yIDEwOC41Yy01LjUgMTIuNC01LjUgMjYuNiAwIDM5TDQzNi40IDQwMCA4MCA0MDB6Il0KICAgIH07CiAgICBmYUZvbnRBd2Vzb21lRmxhZzIgPSBmYUZvbnRBd2Vzb21lMjsKICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDIgPSBmYUZvbnRBd2Vzb21lMjsKICAgIGZhQ2xvbmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI0ZCIsICJNMjg4IDQ2NEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDggMCAwLTQ4LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDgtNDggMCAwIDQ4YzAgOC44LTcuMiAxNi0xNiAxNnpNMjI0IDMwNGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC0yMjQgMHptLTY0LTE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjI0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDIyNCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNHoiXQogICAgfTsKICAgIGZhRm9sZGVyT3BlbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sICJmMDdjIiwgIk05Ny41IDQwMGw1MC0xNjAgMzc5LjQgMC01MCAxNjAtMzc5LjQgMHptMTkwLjcgNDhMNDc3IDQ0OGMyMSAwIDM5LjYtMTMuNiA0NS44LTMzLjdsNTAtMTYwYzkuNy0zMC45LTEzLjQtNjIuMy00NS44LTYyLjNsLTM3OS40IDBjLTIxIDAtMzkuNiAxMy42LTQ1LjggMzMuN0w4MC4yIDI5NC40IDgwLjIgOTZjMC04LjggNy4yLTE2IDE2LTE2bDEzOC43IDBjMy41IDAgNi44IDEuMSA5LjYgMy4yTDI4Mi45IDExMmMxMy44IDEwLjQgMzAuNyAxNiA0OCAxNmwxMTcuMyAwYzguOCAwIDE2IDcuMiAxNiAxNmw0OCAwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDMzMC45IDgwYy02LjkgMC0xMy43LTIuMi0xOS4yLTYuNEwyNzMuMyA0NC44QzI2Mi4yIDM2LjUgMjQ4LjggMzIgMjM0LjkgMzJMOTYuMiAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyODhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDB6Il0KICAgIH07CiAgICBmYVdpbmRvd01pbmltaXplID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1taW5pbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ2OV0sICJmMmQxIiwgIk0wIDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFySGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTczMV0sICJmMDg5IiwgIk0yODUuNy0xNS44YzEwLjggMi42IDE4LjQgMTIuMiAxOC40IDIzLjNsMCAzODcuMWMwIDktNS4xIDE3LjMtMTMuMSAyMS40TDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zTDE5My4xIDEyNS4zIDI1OC44LTMuM2M1LTkuOSAxNi4yLTE1IDI3LTEyLjR6TTI1Ni4xIDEwNy40TDIzMC4zIDE1OGMtMy41IDYuOC0xMCAxMS42LTE3LjYgMTIuOGwtMTI1LjUgMjAgODkuOCA4OS45YzUuNCA1LjQgNy45IDEzLjEgNi43IDIwLjdsLTE5LjggMTI1LjUgOTIuMi00Ni45IDAtMjcyLjZ6Il0KICAgIH07CiAgICBmYUFsYXJtQ2xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYWxhcm0tY2xvY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjAwXSwgImYzNGUiLCAiTTQwMi42IDUwLjJjLTUuNCAxLjctMTEuMyAxLjgtMTYuMi0uOS01LjgtMy4yLTExLjgtNi4yLTE3LjgtOC45LTEwLjQtNC43LTEzLjctMTguMy00LjEtMjQuNiAxNS05LjkgMzMtMTUuNyA1Mi4zLTE1LjcgNTIuNiAwIDk1LjIgNDIuNiA5NS4yIDk1LjIgMCAxMy4yLTIuNyAyNS44LTcuNiAzNy4zLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMy44LTUuNS03LjgtMTAuOC0xMi0xNi0zLjUtNC40LTQuNS0xMC4yLTMuOC0xNS44IC4yLTEuOSAuNC0zLjkgLjQtNS45IDAtMjYuMS0yMS4yLTQ3LjItNDcuMi00Ny4yLTQuOSAwLTkuNyAuOC0xNC4yIDIuMnpNMzIuNSAxMzIuOWMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNi4xIDIuOC0xMiA1LjctMTcuOCA4LjktNC45IDIuNy0xMC45IDIuNi0xNi4yIC45LTQuNS0xLjQtOS4yLTIuMi0xNC4yLTIuMi0yNi4xIDAtNDcuMiAyMS4yLTQ3LjIgNDcuMiAwIDIgLjEgNCAuNCA1LjkgLjcgNS42LS4zIDExLjQtMy44IDE1LjgtNC4yIDUuMi04LjIgMTAuNS0xMiAxNnpNNDMyIDI4OGExNzYgMTc2IDAgMSAwIC0zNTIgMCAxNzYgMTc2IDAgMSAwIDM1MiAwek0zOTYuNSA0NjIuNUMzNTguMSA0OTMuNCAzMDkuMiA1MTIgMjU2IDUxMnMtMTAyLjEtMTguNi0xNDAuNS00OS41TDczIDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0Mi41LTQyLjVDNTAuNiAzOTAuMSAzMiAzNDEuMiAzMiAyODggMzIgMTY0LjMgMTMyLjMgNjQgMjU2IDY0UzQ4MCAxNjQuMyA0ODAgMjg4YzAgNTMuMi0xOC42IDEwMi4xLTQ5LjUgMTQwLjVMNDczIDQ3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Mi41LTQyLjV6TTI4MCAxODRsMCA5NC4xIDQxIDQxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy00LjUtNC41LTctMTAuNi03LTE3bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYU5ld3NwYXBlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJuZXdzcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDBdLCAiZjFlYSIsICJNMTY4IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDguNC0xLjQgMTYuNS00LjEgMjRMNDQwIDQzMmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNEwxNjggODB6TTcyIDQ4MGMtMzkuOCAwLTcyLTMyLjItNzItNzJMMCAxMTJDMCA5OC43IDEwLjcgODggMjQgODhzMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0YzAtMzkuOCAzMi4yLTcyIDcyLTcybDI3MiAwYzM5LjggMCA3MiAzMi4yIDcyIDcybDAgMzA0YzAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDQ4MHpNMTkyIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDh6bTE1MiAyNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0ek0yMTYgMjU2bDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptMCA4MGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI3OTczLCA2MjU4OSwgImhvc3BpdGFsLWFsdCIsICJob3NwaXRhbC13aWRlIl0sICJmMGY4IiwgIk0xNzYgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA0OC00OCAwYy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTM1LjMtMjguNy02NC02NC02NGwtNDggMCAwLTQ4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDE3NiAwek0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2bDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjcyYzAgOC44LTcuMiAxNi0xNiAxNmwtMTc2IDAgMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MC0xNzYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjcyYzAtOC44IDcuMi0xNiAxNi0xNmw3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNzJ6TTExMiAyMjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNOTYgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTMyMCAwbDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2LTExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yNjQgMTA0bDAgMzItMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDAgMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMiAzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbEFsdCA9IGZhSG9zcGl0YWw7CiAgICBmYUhvc3BpdGFsV2lkZSA9IGZhSG9zcGl0YWw7CiAgICBmYUNpcmNsZVN0b3AgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXN0b3AiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjA5NCwgInN0b3AtY2lyY2xlIl0sICJmMjhkIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2MCAxOTJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTEyOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptNDggMTEybDAtOTYgOTYgMCAwIDk2LTk2IDB6Il0KICAgIH07CiAgICBmYVN0b3BDaXJjbGUgPSBmYUNpcmNsZVN0b3A7CiAgICBmYU9iamVjdFVuZ3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LXVuZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI0OCIsICJNNDguMiA2Ni44Yy0uMS0uOC0uMi0xLjctLjItMi41bDAtLjJjMC04LjggNy4yLTE2IDE2LTE2IC45IDAgMS45IC4xIDIuOCAuMiA3LjUgMS4zIDEzLjIgNy45IDEzLjIgMTUuOCAwIDguOC03LjIgMTYtMTYgMTYtNy45IDAtMTQuNS01LjctMTUuOC0xMy4yek0wIDY0YzAgMjYuOSAxNi41IDQ5LjkgNDAgNTkuM2wwIDEwNS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBMMTIzLjMgNDBDMTEzLjkgMTYuNSA5MC45IDAgNjQgMCAyOC43IDAgMCAyOC43IDAgNjR6bTM2OCAwYTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTMyNC43IDg4YzYuNSAxNiAxOS4zIDI4LjkgMzUuMyAzNS4zbDAgMTA1LjNjLTE2IDYuNS0yOC45IDE5LjMtMzUuMyAzNS4zbC0yMDEuMyAwYy02LjUtMTYtMTkuMy0yOC45LTM1LjMtMzUuM2wwLTEwNS4zYzE2LTYuNSAyOC45LTE5LjMgMzUuMy0zNS4zbDIwMS4zIDB6TTM4NCAyNzJhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyek04MCAyODhjMCA3LjktNS43IDE0LjUtMTMuMiAxNS44LS44IC4xLTEuNyAuMi0yLjUgLjJsLS4yIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLS45IC4xLTEuOSAuMi0yLjggMS4zLTcuNSA3LjktMTMuMiAxNS44LTEzLjIgOC44IDAgMTYgNy4yIDE2IDE2em00MzYuNy00MGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDEwNS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMjAxLjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yMC43LTQ4IDAgMCAyMC43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDIwMS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTEwNS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NC0yNi45IDAtNDkuOSAxNi41LTU5LjMgNDBsLTUyLjcgMCAwIDkuNmMxMC43IDEwLjkgMTkuMSAyMy45IDI0LjYgMzguNGwyOCAwem01OS4zLThhMTYgMTYgMCAxIDEgMC0zMiAxNiAxNiAwIDEgMSAwIDMyek0yNzEuOCA0NTAuN2ExNiAxNiAwIDEgMSAtMzEuNS01LjUgMTYgMTYgMCAxIDEgMzEuNSA1LjV6bTMwMS41IDEzYy03LjUtMS4zLTEzLjItNy45LTEzLjItMTUuOCAwLTguOCA3LjItMTYgMTYtMTYgNy45IDAgMTQuNSA1LjcgMTUuOCAxMy4ybDAgLjFjLjEgLjkgLjIgMS44IC4yIDIuNyAwIDguOC03LjIgMTYtMTYgMTYtLjkgMC0xLjktLjEtMi44LS4yeiJdCiAgICB9OwogICAgZmFDb21tZW50ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg0ODksIDYxNjY5XSwgImYwNzUiLCAiTTUxLjkgMzg0LjlDMTkuMyAzNDQuNiAwIDI5NC40IDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MCAzOTcuNCA0ODAgMjU2IDQ4MGMtMzYuNSAwLTcxLjItNy4yLTEwMi42LTIwTDM3IDUwOS45Yy0zLjcgMS42LTcuNSAyLjEtMTEuNSAyLjEtMTQuMSAwLTI1LjUtMTEuNC0yNS41LTI1LjUgMC00LjMgMS4xLTguNSAzLjEtMTIuMmw0OC44LTg5LjR6bTM3LjMtMzAuMmMxMi4yIDE1LjEgMTQuMSAzNi4xIDQuOCA1My4ybC0xOCAzMy4xIDU4LjUtMjUuMWMxMS44LTUuMSAyNS4yLTUuMiAzNy4xLS4zIDI1LjcgMTAuNSA1NC4yIDE2LjQgODQuMyAxNi40IDExNy44IDAgMjA4LTg4LjggMjA4LTE5MlMzNzMuOCA0OCAyNTYgNDggNDggMTM2LjggNDggMjQwYzAgNDIuOCAxNS4xIDgyLjQgNDEuMiAxMTQuN3oiXQogICAgfTsKICAgIGZhQ2hlc3NQYXduID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLXBhd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIzXSwgImY0NDMiLCAiTTE5Mi0zMmM2Ni4zIDAgMTIwIDUzLjcgMTIwIDEyMCAwIDI3LjYtOS4zIDUyLjktMjQuOSA3My4yIDkuOCAzIDE2LjkgMTIuMSAxNi45IDIyLjggMCAxMy4zLTEwLjcgMjQtMjQgMjRsLS42IDAgMjQuNiAxNjAgNTMuNiA2N2M2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNjMuNCA1MTJjLTI2LjIgMC00Ny40LTIxLjItNDcuNC00Ny40IDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZsNTMuNi02NyAyNC42LTE2MC0uNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjggNy4xLTE5LjggMTYuOS0yMi44LTE1LjYtMjAuMy0yNC45LTQ1LjYtMjQuOS03My4yIDAtNjYuMyA1My43LTEyMCAxMjAtMTIwek0xMTUuOSA0MDBsLTUxLjIgNjQgMjU0LjcgMC01MS4yLTY0LTE1Mi4yIDB6bTM2LjItMTg0LjdsLTIxIDEzNi43IDEyMS45IDAtMjEtMTM2LjctMS4xLTcuMy03Ny42IDAtMS4xIDcuM3pNMTkyIDE2YTcyIDcyIDAgMSAwIDAgMTQ0IDcyIDcyIDAgMSAwIDAtMTQ0eiJdCiAgICB9OwogICAgZmFDYWxlbmRhclBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcxIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xMDQgNjRjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ2xpcGJvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODIwM10sICJmMzI4IiwgIk0yMzIgOTZsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHptMCA0OGMzNy4xIDAgNjcuNi0yOCA3MS42LTY0TDMyMCA4MGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzNTJjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2TDQ4IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNi40IDBjNCAzNiAzNC41IDY0IDcxLjYgNjRsODAgMHpNMjkxLjkgMzJDMjc5IDEyLjcgMjU3IDAgMjMyIDBMMTUyIDBjLTI1IDAtNDcgMTIuNy01OS45IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zNTJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTI4LjEgMHoiXQogICAgfTsKICAgIGZhVGh1bWJzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODA3OCwgNjE1NzZdLCAiZjE2NSIsICJNMzYwIDMybDcuNCAuNGMzNSAzLjYgNjIuNSAzMi4yIDY0LjQgNjcuNyAxNy44IDExLjggMzAuMSAzMS40IDMyIDUzLjlsLjIgNmMwIDUuNy0uNyAxMS4yLTIgMTYuNSAxMC4yIDExLjUgMTYuOCAyNi4zIDE3LjggNDIuN2wuMiA0LjhjMCAxMy4yLTMuNiAyNS40LTkuOCAzNiA0LjkgOC40IDguMiAxNy45IDkuMyAyOGwuNCA4YzAgMzcuMy0yOC4zIDY3LjktNjQuNiA3MS42bC03LjQgLjQtMTA5LjcgMCAxNC4xIDMwIDMuMSA3LjZjMTIuNSAzNS43LTEuOCA3NS41LTM0LjIgOTVsLTcuMiAzLjljLTM3LjUgMTcuNi04MS43IDMuNi0xMDIuNi0zMS4ybC0uNi0uOS0yLjctNS0uNi0xLjItMzAuMS02NGMtOS40IDE3LjgtMjggMjkuOS00OS41IDI5LjlsLTMyIDBjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMTUyYzAtMzAuOSAyNS4xLTU2IDU2LTU2bDMyIDBjMTIuNCAwIDIzLjkgNC4xIDMzLjIgMTEgMTMuMi0yMS40IDMyLTM5LjQgNTUtNTEuNmwxMi4yLTYuNSAuNy0uMyA2LjYtMy4yIC43LS4zIDcuMS0zYzE2LjctNi42IDM0LjUtOS45IDUyLjYtOS45TDM2MCAzMnpNMjU1LjkgODBjLTEyIDAtMjMuOSAyLjMtMzUuMSA2LjZsLTQuNyAyLTUuMyAyLjYgMCAwLTEyLjIgNi41Yy0yOS4yIDE1LjUtNDguMyA0NC45LTUwLjcgNzcuNmwtLjIgOCAwIDExMi45IC4xIDQuMWMuNSA4LjIgMi41IDE2LjIgNiAyMy43bDU2LjggMTIwLjkgMi4xIDMuOGM4LjQgMTMuNyAyNiAxOS4xIDQwLjggMTIuMmwyLjktMS42YzEzLTcuOCAxOC43LTIzLjcgMTMuNy0zOGwtMS4yLTMtMzAuMi02NC4yYy0zLjUtNy40LTIuOS0xNi4xIDEuNS0yMy4xczEyLTExLjEgMjAuMi0xMS4xbDE0Ny41IDAgMi40LS4xYzExLjMtMS4xIDIwLjMtMTAuMSAyMS40LTIxLjRsLjEtMi41YzAtNy4xLTMuMS0xMy41LTguMi0xOC01LjItNC42LTguMi0xMS4xLTguMi0xOHMzLTEzLjQgOC4yLTE4YzQuNC0zLjkgNy40LTkuMyA4LTE1LjNsLjItMi43YzAtOC40LTQuNC0xNS45LTExLjItMjAuMi0xMC43LTYuOS0xNC4yLTIwLjktOC0zMiAxLjUtMi42IDIuNS01LjYgMi45LTguNmwuMi0zLjJjMC0xMC42LTYuOS0xOS42LTE2LjYtMjIuOC0xMS43LTMuOC0xOC43LTE1LjktMTYtMjggLjItLjkgLjMtMS44IC40LTIuNmwuMi0yLjZjMC0xMi40LTkuNS0yMi42LTIxLjYtMjMuOEwzNjAgODAgMjU1LjkgODB6TTU2IDE0NGMtNC40IDAtOCAzLjYtOCA4bDAgMjI0YzAgNC40IDMuNiA4IDggOGwzMiAwYzQuNCAwIDgtMy42IDgtOGwwLTIyNGMwLTQuNC0zLjYtOC04LThsLTMyIDB6Il0KICAgIH07CiAgICBmYUlkQmFkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaWQtYmFkZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJjMSIsICJNMjU2IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmwyNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zODRjMC04LjgtNy4yLTE2LTE2LTE2bC02NCAwek0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTE2MCAzMjBsNjQgMGM0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDguOC03LjIgMTYtMTYgMTZMOTYgNDE2Yy04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS0yNC05NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk3NDUsIDk5ODksIDYxNTEwLCAiY2hlY2stc3F1YXJlIl0sICJmMTRhIiwgIk0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek02NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwYzAgOC44IDcuMiAxNiAxNiAxNmwzMjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMjBjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDgwem0yMzAuNyA4OS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjExLjQgMzY2LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdCiAgICB9OwogICAgZmFDaGVja1NxdWFyZSA9IGZhU3F1YXJlQ2hlY2s7CiAgICBmYUNoZXNzQmlzaG9wID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNoZXNzLWJpc2hvcCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzk4MjFdLCAiZjQzYSIsICJNMjE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgODEuOCA5OC4xYzI0LjcgMjkuNiAzOC4yIDY3IDM4LjIgMTA1LjYgMCA0My43LTE3LjQgODUuNy00OC4zIDExNi42bC04LjYgOC42IDQ2LjUgNTguMmM2LjcgOC40IDEwLjQgMTguOCAxMC40IDI5LjYgMCAyNi4yLTIxLjIgNDcuNC00Ny40IDQ3LjRMNDcuNCA1MTJDMjEuMiA1MTIgMCA0OTAuOCAwIDQ2NC42IDAgNDUzLjkgMy43IDQ0My40IDEwLjQgNDM1bDQ2LjUtNTguMi04LjYtOC42QzE3LjQgMzM3LjQgMCAyOTUuNCAwIDI1MS43IDAgMjEzLjEgMTMuNSAxNzUuOCAzOC4yIDE0Ni4xTDEyMCA0OCAxMDQgNDhDOTAuNyA0OCA4MCAzNy4zIDgwIDI0UzkwLjcgMCAxMDQgMEwyMTYgMHpNOTQuNCA0MDYuOGwtNDUuNyA1Ny4yIDIyMi43IDAtNDUuNy01Ny4xLTUuNS02LjktMTIwLjMgMC01LjUgNi44ek0xNTYuOSA3OC43TDc1LjEgMTc2LjhjLTE1LjMgMTguNC0yNC42IDQxLTI2LjcgNjQuN0w0OCAyNTEuN2MwIDMxIDEyLjMgNjAuNyAzNC4yIDgyLjdsMTcuNyAxNy43IDEyMC4yIDBjNi4yLTYuMiAxMi4xLTEyLjEgMTcuOC0xNy43IDIxLjktMjEuOSAzNC4yLTUxLjYgMzQuMi04Mi42bC0uNC0xMC4yYy0xLjUtMTctNi43LTMzLjMtMTUuMi00OEwyMDkgMjQxYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDUxLjgtNTEuOC02My43LTc2LjUtMy4xLTMuOC0zLjEgMy44eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZU9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM1XSwgImYyYjYiLCAiTTUxMiA0MTZjMCAzNS4zLTI4LjUgNjQtNjMuOSA2NEw2NCA0ODBjLTM1LjQgMC02NC0yOC43LTY0LTY0TDAgMTY0Yy4xLTE1LjUgNy44LTMwIDIwLjUtMzguOEwyMDYtMi43YzMwLjEtMjAuNyA2OS44LTIwLjcgOTkuOSAwTDQ5MS41IDEyNS4yYzEyLjggOC44IDIwLjQgMjMuMyAyMC41IDM4LjhsMCAyNTJ6TTY0IDQzMmwzODQuMSAwYzguOCAwIDE1LjktNy4xIDE1LjktMTZsMC0xOTEuNy0xNTQuOCAxMTcuNGMtMzEuNCAyMy45LTc0LjkgMjMuOS0xMDYuNCAwTDQ4IDIyNC4zIDQ4IDQxNmMwIDguOSA3LjIgMTYgMTYgMTZ6TTQ2My42IDE2NC40TDI3OC43IDM2LjhjLTEzLjctOS40LTMxLjctOS40LTQ1LjQgMEw0OC40IDE2NC40IDIzMS44IDMwMy41YzE0LjMgMTAuOCAzNC4xIDEwLjggNDguNCAwTDQ2My42IDE2NC40eiJdCiAgICB9OwogICAgZmFDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMiwgInRpbWVzLWNpcmNsZSIsICJ4bWFyay1jaXJjbGUiXSwgImYwNTciLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY3IDE2N2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhVGltZXNDaXJjbGUgPSBmYUNpcmNsZVhtYXJrOwogICAgZmFYbWFya0NpcmNsZSA9IGZhQ2lyY2xlWG1hcms7CiAgICBmYVNxdWFyZUNhcmV0VXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS11cCJdLCAiZjE1MSIsICJNNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MHpNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6bTIyNCA2NGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOVMzMzcuNSAzMjAgMzI4IDMyMGwtMjA4IDBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVVcCA9IGZhU3F1YXJlQ2FyZXRVcDsKICAgIGZhRmlsZUltYWdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUtaW1hZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjg0NDNdLCAiZjFjNSIsICJNMTc2IDQ4TDY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zMTYuMSAxNjBMMjI0IDY3LjkgMjI0IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDE5Ny41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMjU5LjQgNDMybC0xMzQuOCAwYy0xNS44IDAtMjguNi0xMi44LTI4LjYtMjguNiAwLTYuNCAyLjEtMTIuNSA2LTE3LjZsNjcuNi04Ni45QzE3NSAyOTIgMTgzLjMgMjg4IDE5MiAyODhzMTcgNCAyMi40IDEwLjlMMjgyIDM4NS45YzMuOSA1IDYgMTEuMiA2IDE3LjYgMCAxNS44LTEyLjggMjguNi0yOC42IDI4LjZ6TTExMiAyMjRhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtcmlnaHQiXSwgImYxNTIiLCAiTTQwMCA5NmMwLTguOC03LjItMTYtMTYtMTZMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyMGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwek0zODQgMzJjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwek0zMjAgMjU2YzAgNi43LTIuOCAxMy03LjcgMTcuNmwtMTEyIDEwNGMtNyA2LjUtMTcuMiA4LjItMjUuOSA0LjRTMTYwIDM2OS41IDE2MCAzNjBsMC0yMDhjMC05LjUgNS43LTE4LjIgMTQuNC0yMnMxOC45LTIuMSAyNS45IDQuNGwxMTIgMTA0YzQuOSA0LjUgNy43IDEwLjkgNy43IDE3LjZ6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlUmlnaHQgPSBmYVNxdWFyZUNhcmV0UmlnaHQ7CiAgICBmYVN1biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI4XSwgImYxODUiLCAiTTIwMC42LTcuOWMtNi43LTQuNC0xNS4xLTUuMi0yMi41LTIuMlMxNjUuNC0uNSAxNjMuOSA3LjNMMTQzIDExMC42IDM5LjcgMTMxLjRjLTcuOCAxLjYtMTQuNCA3LTE3LjQgMTQuM3MtMi4yIDE1LjggMi4yIDIyLjVMODIuNyAyNTYgMjQuNSAzNDMuOGMtNC40IDYuNy01LjIgMTUuMS0yLjIgMjIuNXM5LjYgMTIuOCAxNy40IDE0LjNMMTQzIDQwMS40IDE2My45IDUwNC43YzEuNiA3LjggNyAxNC40IDE0LjMgMTcuNHMxNS44IDIuMiAyMi41LTIuMmw4Ny44LTU4LjIgODcuOCA1OC4yYzYuNyA0LjQgMTUuMSA1LjIgMjIuNSAyLjJzMTIuOC05LjYgMTQuMy0xNy40bDIwLjktMTAzLjIgMTAzLjItMjAuOWM3LjgtMS42IDE0LjQtNyAxNy40LTE0LjNzMi4yLTE1LjgtMi4yLTIyLjVsLTU4LjItODcuOCA1OC4yLTg3LjhjNC40LTYuNyA1LjItMTUuMSAyLjItMjIuNXMtOS42LTEyLjgtMTcuNC0xNC4zTDQzMy44IDExMC42IDQxMyA3LjNDNDExLjQtLjUgNDA2LTcgMzk4LjYtMTAuMXMtMTUuOC0yLjItMjIuNSAyLjJMMjg4LjQgNTAuMyAyMDAuNi03Ljl6TTE4Ni45IDEzNS43bDE3LTgzLjkgNzEuMyA0Ny4zYzggNS4zIDE4LjUgNS4zIDI2LjUgMGw3MS4zLTQ3LjMgMTcgODMuOWMxLjkgOS41IDkuMyAxNi44IDE4LjggMTguOGw4My45IDE3LTQ3LjMgNzEuM2MtNS4zIDgtNS4zIDE4LjUgMCAyNi41bDQ3LjMgNzEuMy04My45IDE3Yy05LjUgMS45LTE2LjkgOS4zLTE4LjggMTguOGwtMTcgODMuOS03MS4zLTQ3LjNjLTgtNS4zLTE4LjUtNS4zLTI2LjUgMGwtNzEuMyA0Ny4zLTE3LTgzLjljLTEuOS05LjUtOS4zLTE2LjktMTguOC0xOC44bC04My45LTE3IDQ3LjMtNzEuM2M1LjMtOCA1LjMtMTguNSAwLTI2LjVsLTQ3LjMtNzEuMyA4My45LTE3YzkuNS0xLjkgMTYuOC05LjMgMTguOC0xOC44ek0yMzkuNiAyNTZhNDguNCA0OC40IDAgMSAxIDk2LjggMCA0OC40IDQ4LjQgMCAxIDEgLTk2LjggMHptMTQ0LjggMGE5Ni40IDk2LjQgMCAxIDAgLTE5Mi44IDAgOTYuNCA5Ni40IDAgMSAwIDE5Mi44IDB6Il0KICAgIH07CiAgICBmYUltYWdlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImltYWdlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwM2UiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xMjggMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0xMzYgNzJjOC41IDAgMTYuNCA0LjUgMjAuNyAxMS44bDgwIDEzNmM0LjQgNy40IDQuNCAxNi42IC4xIDI0LjFTMzUyLjYgMzg0IDM0NCAzODRsLTI0MCAwYy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDE3LjIgMjQuNiA0Ni41LTc5YzQuMy03LjMgMTIuMi0xMS44IDIwLjctMTEuOHoiXQogICAgfTsKICAgIGZhTGlnaHRidWxiID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxpZ2h0YnVsYiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2MV0sICJmMGViIiwgIk0yOTYuNSAyOTEuMUMzMjEgMjY1LjIgMzM2IDIzMC40IDMzNiAxOTIgMzM2IDExMi41IDI3MS41IDQ4IDE5MiA0OFM0OCAxMTIuNSA0OCAxOTJjMCAzOC40IDE1IDczLjIgMzkuNSA5OS4xIDIxLjMgMjIuNCA0NC45IDU0IDUzLjMgOTIuOWwxMDIuNCAwYzguNC0zOSAzMi03MC41IDUzLjMtOTIuOXptMzQuOCAzM0MzMDcuNyAzNDkgMjg4IDM3OS40IDI4OCA0MTMuN2wwIDE4LjNjMCA0NC4yLTM1LjggODAtODAgODBsLTMyIDBjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTguM0M5NiAzNzkuNCA3Ni4zIDM0OSA1Mi43IDMyNC4xIDIwIDI4OS43IDAgMjQzLjIgMCAxOTIgMCA4NiA4NiAwIDE5MiAwUzM4NCA4NiAzODQgMTkyYzAgNTEuMi0yMCA5Ny43LTUyLjcgMTMyLjF6TTE0NCAxODRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC00OC42IDM5LjQtODggODgtODggMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjEgMC00MCAxNy45LTQwIDQweiJdCiAgICB9OwogICAgZmFBZGRyZXNzQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0MCwgImNvbnRhY3QtY2FyZCIsICJ2Y2FyZCJdLCAiZjJiYiIsICJNNTEyIDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyMGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDMyYy04LjggMC0xNi03LjItMTYtMTZMNDggOTZjMC04LjggNy4yLTE2IDE2LTE2bDQ0OCAwek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yMDggMjQ4YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem0tMzIgNDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDB6TTM3NiAxNDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAweiJdCiAgICB9OwogICAgZmFDb250YWN0Q2FyZCA9IGZhQWRkcmVzc0NhcmQ7CiAgICBmYVZjYXJkID0gZmFBZGRyZXNzQ2FyZDsKICAgIGZhRmFjZU1laCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLW1laCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyOCwgIm1laCJdLCAiZjExYSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAxIC00MTYgMCAyMDggMjA4IDAgMSAxIDQxNiAwek0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTE3NiAyNDBhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xOTItMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTg0IDMyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYU1laCA9IGZhRmFjZU1laDsKICAgIGZhTWFwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogIm1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUwNiwgNjIwNzJdLCAiZjI3OSIsICJNNTEyIDQ4YzAtOC4zLTQuMy0xNi0xMS4zLTIwLjRzLTE1LjktNC44LTIzLjMtMS4xTDM1Mi41IDg4LjEgMTgwIDI5LjRjLTEzLjctNC43LTI4LjctMy44LTQxLjkgMi4zTDEzLjggOTAuM0M1LjQgOTQuMiAwIDEwMi43IDAgMTEyTDAgNDY0YzAgOC4yIDQuMiAxNS45IDExLjEgMjAuM3MxNS42IDQuOSAyMy4xIDEuNGwxMjcuMy01OS45IDE3MC43IDU2LjljMTMuNyA0LjYgMjguNSAzLjcgNDEuNi0yLjVsMTI0LjQtNTguNWM4LjQtNCAxMy44LTEyLjQgMTMuOC0yMS43bDAtMzUyek0xNDQgODIuMWwwIDI5OS05NiA0NS4yIDAtMjk5IDk2LTQ1LjJ6bTQ4IDMwMy4zbDAtMzAxLjEgMTI4IDQzLjUgMCAzMDAuMy0xMjgtNDIuN3pNMzY4IDEzNGw5Ni00Ny40IDAgMjk4LjItOTYgNDUuMiAwLTI5NnoiXQogICAgfTsKICAgIGZhSGFuZFBvaW50RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjBhNyIsICJNNjQgNDQ4bDAtMTc3LjZjNS4yIDEgMTAuNSAxLjYgMTYgMS42bDE2IDAgMCAxNzZjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZ6TTgwIDIyNGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGw0OCAwYzUyLjUgMCA5Ny4xIDMzLjcgMTEzLjQgODAuNy0zLjEtLjUtNi4yLS43LTkuNC0uNy0yMCAwLTM3LjkgOS4yLTQ5LjcgMjMuNi05LTQuOS0xOS40LTcuNi0zMC4zLTcuNi0xNS4xIDAtMjkgNS4zLTQwIDE0LTExLTguOC0yNC45LTE0LTQwLTE0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTgwIDB6TTAgMTkybDAgMGMwIDE4IDYgMzQuNiAxNiA0OGwwIDIwOGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtODJjNS4xIDEuMyAxMC41IDIgMTYgMiAyNS4zIDAgNDcuMi0xNC43IDU3LjYtMzYgNyAyLjYgMTQuNSA0IDIyLjQgNCAyMCAwIDM3LjktOS4yIDQ5LjctMjMuNiA5IDQuOSAxOS40IDcuNiAzMC4zIDcuNiAzNS4zIDAgNjQtMjguNyA2NC02NGwwLTg4QzM4NCA3NS4yIDMwOC44IDAgMjE2IDBMMTY4IDBDNzUuMiAwIDAgNzUuMiAwIDE2OGwwIDI0em0zMzYgNjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNjR6TTE2MCAyNzJjNS41IDAgMTAuOS0uNyAxNi0ybDAgMzRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC0zMiAxNiAwem02NC0yNGwwLTQwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTI0eiJdCiAgICB9OwogICAgZmFGYWNlTWVoQmxhbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgtYmxhbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjYsICJtZWgtYmxhbmsiXSwgImY1YTQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6TTUxMiAyNTZhMjU2IDI1NiAwIDEgMSAtNTEyIDAgMjU2IDI1NiAwIDEgMSA1MTIgMHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFNZWhCbGFuayA9IGZhRmFjZU1laEJsYW5rOwogICAgZmFGYWNlR3JpblRvbmd1ZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM5LCAiZ3Jpbi10b25ndWUiXSwgImY1ODkiLCAiTTQ2NCAyNTZjMC0xMTQuOS05My4xLTIwOC0yMDgtMjA4UzQ4IDE0MS4xIDQ4IDI1NmMwIDc0LjEgMzguOCAxMzkuMiA5Ny4xIDE3Ni0uNy01LjItMS4xLTEwLjYtMS4xLTE2bDAtNTMuNWMtMTAuMi0xMi42LTE4LjMtMjYuOS0yMy44LTQyLjQtNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42IDExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC01LjUgMTUuNi0xMy42IDI5LjktMjMuOCA0Mi41bDAgNTMuNWMwIDUuNC0uNCAxMC44LTEuMSAxNiA1OC40LTM2LjggOTcuMS0xMDEuOSA5Ny4xLTE3NnptNDggMGMwIDExNi4zLTc3LjYgMjE0LjYtMTgzLjkgMjQ1LjctMTkuNSAxNi40LTQ0LjYgMjYuMy03Mi4xIDI2LjNzLTUyLjYtOS45LTcyLjEtMjYuM0M3Ny42IDQ3MC42IDAgMzcyLjMgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2ek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2IDIwOGwwLTM3LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCAzNy40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWUgPSBmYUZhY2VHcmluVG9uZ3VlOwogICAgZmFGdXRib2wgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZnV0Ym9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTkxNywgImZ1dGJvbC1iYWxsIiwgInNvY2Nlci1iYWxsIl0sICJmMWUzIiwgIk0zODcgMjI4LjNjLTQuNC0yLjgtNy42LTctOS4yLTExLjlzLTEuNC0xMC4yIC41LTE1TDQxMS42IDExOGMtMTkuOS0yMi40LTQ0LjYtNDAuNS03Mi40LTUyLjdsLTY5LjEgNTcuNmMtNCAzLjMtOSA1LjEtMTQuMSA1LjFzLTEwLjItMS44LTE0LjEtNS4xTDE3Mi44IDY1LjNjLTI3LjggMTIuMi01Mi41IDMwLjMtNzIuNCA1Mi43bDMzLjQgODMuNGMxLjkgNC44IDIuMSAxMC4xIC41IDE1cy00LjkgOS4xLTkuMiAxMS45TDQ5IDI3Ni4yYzMgMzAuOSAxMi43IDU5LjcgMjcuNiA4NS4ybDg5LjctNmM1LjItLjMgMTAuMyAxLjEgMTQuNSA0LjJzNy4yIDcuNCA4LjQgMTIuNWwyMiA4Ny4yYzE0LjQgMy4yIDI5LjQgNC44IDQ0LjggNC44czMwLjMtMS43IDQ0LjgtNC44bDIyLTg3LjJjMS4zLTUgNC4yLTkuNCA4LjQtMTIuNXM5LjMtNC41IDE0LjUtNC4ybDg5LjcgNmMxNS0yNS40IDI0LjctNTQuMyAyNy42LTg1LjFMMzg3IDIyOC4zek0yNTYgMGEyNTYgMjU2IDAgMSAxIDAgNTEyIDI1NiAyNTYgMCAxIDEgMC01MTJ6bTYyIDIyMWM4LjQgNi4xIDExLjkgMTYuOSA4LjcgMjYuOGwtMTguMyA1Ni4zYy0zLjIgOS45LTEyLjQgMTYuNi0yMi44IDE2LjZsLTU5LjIgMGMtMTAuNCAwLTE5LjYtNi43LTIyLjgtMTYuNmwtMTguMy01Ni4zYy0zLjItOS45IC4zLTIwLjcgOC43LTI2LjhsNDcuOS0zNC44YzguNC02LjEgMTkuOC02LjEgMjguMiAwTDMxOCAyMjF6Il0KICAgIH07CiAgICBmYUZ1dGJvbEJhbGwgPSBmYUZ1dGJvbDsKICAgIGZhU29jY2VyQmFsbCA9IGZhRnV0Ym9sOwogICAgZmFGYWNlU3VycHJpc2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zdXJwcmlzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgInN1cnByaXNlIl0sICJmNWMyIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVN1cnByaXNlID0gZmFGYWNlU3VycHJpc2U7CiAgICBmYUZvbGRlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsICJmb2xkZXItYmxhbmsiXSwgImYwN2IiLCAiTTY0IDQwMGwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xNDkuMyAwYy0xNy4zIDAtMzQuMi01LjYtNDgtMTZMMjEyLjMgODMuMmMtMi44LTIuMS02LjEtMy4yLTkuNi0zLjJMNjQgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZ6bTM4NCA0OEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhRm9sZGVyQmxhbmsgPSBmYUZvbGRlcjsKICAgIGZhQ2xvdWQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI5XSwgImYwYzIiLCAiTTgwIDE5MmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MCA0Ny4xIDAgODkuNCAyMC40IDExOC43IDUyLjcgMTAuNi0zLjEgMjEuOC00LjcgMzMuMy00LjcgNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAxMy4yLTIuMSAyNS45LTYuMSAzNy44IDQxLjYgMjEuMSA3MC4xIDY0LjMgNzAuMSAxMTQuMiAwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzA0IDBjLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtNTYuOCAzMi45LTEwNS45IDgwLjctMTI5LjQtLjQtNC44LS43LTkuNy0uNy0xNC42ek0yNDAgODBjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgOC40IC45IDE2LjYgMi43IDI0LjUgMi43IDEyLjEtNC4zIDI0LjMtMTYuMSAyOC4xLTM4LjcgMTIuNC02Ni42IDQ4LjctNjYuNiA5MS40IDAgNTMgNDMgOTYgOTYgOTZsMzA0IDBjNDQuMiAwIDgwLTM1LjggODAtODAgMC0zNy40LTI1LjctNjguOS02MC41LTc3LjYtNy41LTEuOS0xMy42LTcuMi0xNi41LTE0LjNzLTIuMS0xNS4yIDItMjEuN2M3LTExLjEgMTEtMjQuMiAxMS0zOC4zIDAtMzkuOC0zMi4yLTcyLTcyLTcyLTExLjEgMC0yMS41IDIuNS0zMC44IDYuOS0xMC41IDUtMjMuMSAxLjctMjkuOC03LjgtMjAuMy0yOC42LTUzLjctNDcuMS05MS4zLTQ3LjF6Il0KICAgIH07CiAgICBmYUNpcmNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDgsIDEyODMwOSwgMTI4OTkyLCAxMjg5OTMsIDEyODk5NCwgMTI4OTk1LCAxMjg5OTYsIDk2NzksIDk4OTgsIDk4OTksIDExMDQ0LCA2MTcwOCwgNjE5MTVdLCAiZjExMSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE4LCAiZ3Jpbi1zcXVpbnQiXSwgImY1ODUiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnptLTI0OS42LTE0M2M0LjUtNi44IDEzLjMtOS4yIDIwLjYtNS41bDc5LjYgNDBjNS40IDIuNyA4LjggOC4yIDguOCAxNC4zcy0zLjQgMTEuNi04LjggMTQuM2wtNzkuNiA0MGMtNy4zIDMuNi0xNi4xIDEuMy0yMC42LTUuNXMtMy4xLTE1LjkgMy4xLTIxLjFMMTU5IDIwOCAxMjUuOCAxODAuM2MtNi4yLTUuMi03LjYtMTQuMy0zLjEtMjEuMXptMjYzLjYgMjEuMUwzNTMgMjA4IDM4Ni4yIDIzNS43YzYuMiA1LjIgNy42IDE0LjMgMy4xIDIxLjFzLTEzLjMgOS4yLTIwLjYgNS41bC03OS42LTQwYy01LjQtMi43LTguOC04LjItOC44LTE0LjNzMy40LTExLjYgOC44LTE0LjNsNzkuNi00MGM3LjMtMy42IDE2LjEtMS4zIDIwLjYgNS41czMuMSAxNS45LTMuMSAyMS4xeiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50ID0gZmFGYWNlR3JpblNxdWludDsKICAgIGZhQ2lyY2xlVXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCAidXNlci1jaXJjbGUiXSwgImYyYmQiLCAiTTQwNi41IDM5OS42QzM4Ny40IDM1Mi45IDM0MS41IDMyMCAyODggMzIwbC02NCAwYy01My41IDAtOTkuNCAzMi45LTExOC41IDc5LjYtMzUuNi0zNy4zLTU3LjUtODcuOS01Ny41LTE0My42IDAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4YzAgNTUuNy0yMS45IDEwNi4yLTU3LjUgMTQzLjZ6bS00MC4xIDMyLjdDMzM0LjQgNDUyLjQgMjk2LjYgNDY0IDI1NiA0NjRzLTc4LjQtMTEuNi0xMTAuNS0zMS43YzcuMy0zNi43IDM5LjctNjQuMyA3OC41LTY0LjNsNjQgMGMzOC44IDAgNzEuMiAyNy42IDc4LjUgNjQuM3pNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMjcyYTQwIDQwIDAgMSAxIDAtODAgNDAgNDAgMCAxIDEgMCA4MHptLTg4LTQwYTg4IDg4IDAgMSAwIDE3NiAwIDg4IDg4IDAgMSAwIC0xNzYgMHoiXQogICAgfTsKICAgIGZhVXNlckNpcmNsZSA9IGZhQ2lyY2xlVXNlcjsKICAgIGZhUmVjdGFuZ2xlTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtbGlzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWFsdCJdLCAiZjAyMiIsICJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDM4NCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNjAgMzIwYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bTEwNC01NmwxNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTAgMTI4bDE2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNjAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTGlzdEFsdCA9IGZhUmVjdGFuZ2xlTGlzdDsKICAgIGZhSGFuZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzA2LCA5OTk1LCAiaGFuZC1wYXBlciJdLCAiZjI1NiIsICJNMjU2LjUgMGMtMjUuMyAwLTQ3LjIgMTQuNy01Ny42IDM2LTctMi42LTE0LjUtNC0yMi40LTQtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAxNjUuNS0yLjctMi43Yy0yNS0yNS02NS41LTI1LTkwLjUgMHMtMjUgNjUuNSAwIDkwLjVMMTA3IDQzN2M0OCA0OCAxMTMuMSA3NSAxODEgNzVsMTYuNSAwYzEuNSAwIDMtLjEgNC41LS40IDkxLjctNi4yIDE2NS03OS40IDE3MS4xLTE3MS4xIC4zLTEuNSAuNC0zIC40LTQuNWwwLTE3NmMwLTM1LjMtMjguNy02NC02NC02NC01LjUgMC0xMC45IC43LTE2IDJsMC0yYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2em0tMTYgOTYuMWwwLS4xIDAtMzJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxMzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNzIuOWMtLjEgLjYtLjEgMS4zLS4yIDEuOS0zLjQgNjkuNy01OS4zIDEyNS42LTEyOSAxMjktLjYgMC0xLjMgLjEtMS45IC4yTDI4OCA0NjRDMjMyLjkgNDY0IDE4MCA0NDIuMSAxNDEgNDAzLjFMNTMuMiAzMTUuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDQzLjcgNDMuN2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yczE0LjgtMTIuNSAxNC44LTIyLjJsMC0yMjMuNGMwLTguOCA3LjItMTYgMTYtMTYgOC44IDAgMTYgNy4xIDE2IDE1LjlsMCAxMzYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTM1Ljl6Il0KICAgIH07CiAgICBmYUhhbmRQYXBlciA9IGZhSGFuZDsKICAgIGZhVGh1bWJzVXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidGh1bWJzLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc3LCA2MTU3NV0sICJmMTY0IiwgIk0xNzEuNSAzOC44QzE5Mi4zIDQgMjM2LjUtMTAgMjc0IDcuNmw3LjIgMy44QzMxNiAzMi4zIDMzMCA3Ni41IDMxMi40IDExNGwwIDAtMTQuMSAzMCAxMDkuNyAwIDcuNCAuNGMzNi4zIDMuNyA2NC42IDM0LjQgNjQuNiA3MS42IDAgMTMuMi0zLjYgMjUuNC05LjggMzYgNi4xIDEwLjYgOS43IDIyLjggOS44IDM2IDAgMTguMy02LjkgMzQuOC0xOCA0Ny41IDEuMyA1LjMgMiAxMC44IDIgMTYuNSAwIDI1LjEtMTIuOSA0Ny0zMi4yIDU5LjktMS45IDM1LjUtMjkuNCA2NC4yLTY0LjQgNjcuN2wtNy40IC40LTEwNC4xIDBjLTE4IDAtMzUuOS0zLjQtNTIuNi05LjlsLTcuMS0zLS43LS4zLTYuNi0zLjItLjctLjMtMTIuMi02LjVjLTEyLjMtNi41LTIzLjMtMTQuNy0zMi45LTI0LjEtNC4xIDI2LjktMjcuMyA0Ny40LTU1LjMgNDcuNGwtMzIgMGMtMzAuOSAwLTU2LTI1LjEtNTYtNTZMMCAyMDBjMC0zMC45IDI1LjEtNTYgNTYtNTZsMzIgMGMxMC44IDAgMjAuOSAzLjEgMjkuNSA4LjVsNTAuMS0xMDYuNSAuNi0xLjIgMi43LTUgLjYtLjl6TTU2IDE5MmMtNC40IDAtOCAzLjYtOCA4bDAgMjI0YzAgNC40IDMuNiA4IDggOGwzMiAwYzQuNCAwIDgtMy42IDgtOGwwLTIyNGMwLTQuNC0zLjYtOC04LThsLTMyIDB6TTI1My42IDUxYy0xNC44LTYuOS0zMi4zLTEuNi00MC43IDEybC0yLjIgNC01Ni44IDEyMC45Yy0zLjUgNy41LTUuNSAxNS41LTYgMjMuN2wtLjEgNC4yIDAgMTEyLjkgLjIgNy45YzIuNCAzMi43IDIxLjQgNjIuMSA1MC43IDc3LjdsMTEuNSA2LjEgNi4zIDMuMWMxMi40IDUuNiAyNS44IDguNSAzOS40IDguNWwxMDQuMSAwIDIuNC0uMWMxMi4xLTEuMiAyMS42LTExLjUgMjEuNi0yMy45bC0uMi0yLjZjLS4xLS45LS4yLTEuNy0uNC0yLjYtMi43LTEyLjEgNC4zLTI0LjIgMTYtMjggOS43LTMuMSAxNi42LTEyLjIgMTYuNi0yMi44IDAtNC4zLTEuMS04LjItMy4xLTExLjgtNi4zLTExLjEtMi44LTI1LjIgOC0zMiA2LjgtNC4zIDExLjItMTEuOCAxMS4yLTIwLjIgMC03LjEtMy4xLTEzLjUtOC4yLTE4LTUuMi00LjYtOC4yLTExLjEtOC4yLTE4czMtMTMuNCA4LjItMThjNS4xLTQuNSA4LjItMTAuOSA4LjItMThsLS4xLTIuNGMtMS4xLTExLjMtMTAuMS0yMC4zLTIxLjQtMjEuNGwtMi40LS4xLTE0Ny41IDBjLTguMiAwLTE1LjgtNC4yLTIwLjItMTEuMS00LjQtNi45LTUtMTUuNy0xLjUtMjMuMUwyNjkgOTMuNmM3LTE1IDEuNC0zMi43LTEyLjUtNDFMMjUzLjYgNTF6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3OTcwLCA2MTY4N10sICJmMWFkIiwgIk02NCA0OGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzg0YzAgOC44IDcuMiAxNiAxNiAxNmw4MCAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwIDgwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzg0YzAtOC44LTcuMi0xNi0xNi0xNkw2NCA0OHpNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em05NiA0OGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDaGVzc1Jvb2sgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mtcm9vayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzk4MjBdLCAiZjQ0NyIsICJNMzUyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMzguN2MwIDEzLjgtNC41IDI3LjMtMTIuOCAzOC40bC0zNS4yIDQ2LjkgMCAxMTIgNDAuOCA2OC4xYzQuNyA3LjggNy4yIDE2LjcgNy4yIDI1LjggMCAyNy43LTIyLjQgNTAuMS01MC4xIDUwLjFMNTAuMSA1MTJjLTI3LjcgMC01MC4xLTIyLjQtNTAuMS01MC4xIDAtOS4xIDIuNS0xOCA3LjItMjUuOEw0OCAzNjggNDggMjU2IDEyLjggMjA5LjFDNC41IDE5OCAwIDE4NC41IDAgMTcwLjdMMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMMzUyIDB6TTQ4LjMgNDYwLjhsLS4zIDEuMWMwIDEuMiAxIDIuMSAyLjEgMi4xbDI4My44IDBjMS4yIDAgMi4xLTEgMi4xLTIuMWwtLjMtMS4xLTM2LjUtNjAuOC0yMTQuNCAwLTM2LjUgNjAuOHpNNDggMTcwLjdjMCAyLjYgLjYgNS4xIDEuOCA3LjRsMS40IDIuMiAwIDAgMzUuMiA0Ni45IDkuNiAxMi44IDAgMTEyIDE5MiAwIDAtMTEyIDkuNi0xMi44IDM1LjItNDYuOSAwIDAgMS40LTIuMmMxLjItMi4zIDEuOC00LjggMS44LTcuNGwwLTEyMi43LTY0IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0LTY0IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTI0LTY0IDAgMCAxMjIuN3oiXQogICAgfTsKICAgIGZhQ2lyY2xlUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMDgsICJxdWVzdGlvbi1jaXJjbGUiXSwgImYwNTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMjU2LTgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgNDcuMi0zNiA2Ny4yLTU2IDc0LjVsMCAzLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LjFjMC0yMC41IDE0LjgtMzUuMiAzMC4xLTQwLjIgNi40LTIuMSAxMy4yLTUuNSAxOC4yLTEwLjMgNC4zLTQuMiA3LjctMTAgNy43LTE5LjYgMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAzNjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhUXVlc3Rpb25DaXJjbGUgPSBmYUNpcmNsZVF1ZXN0aW9uOwogICAgZmFGaWxlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZpbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxOTYsIDEyODQ1OSwgNjE0NjJdLCAiZjE1YiIsICJNMTc2IDQ4TDY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODRjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0MC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zMTYuMSAxNjBMMjI0IDY3LjkgMjI0IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDE5Ny41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTQxLjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHoiXQogICAgfTsKICAgIGZhRmFjZVNhZENyeSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC1jcnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTcsICJzYWQtY3J5Il0sICJmNWIzIiwgIk00MDAgNDA2LjFMNDAwIDI4OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE1Mi42Yy0yOC43IDE1LTYxLjQgMjMuNC05NiAyMy40cy02Ny4zLTguNS05Ni0yMy40TDE2MCAyODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTguMUM3Mi42IDM2OC4yIDQ4IDMxNSA0OCAyNTYgNDggMTQxLjEgMTQxLjEgNDggMjU2IDQ4czIwOCA5My4xIDIwOCAyMDhjMCA1OS0yNC42IDExMi4yLTY0IDE1MC4xek0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhU2FkQ3J5ID0gZmFGYWNlU2FkQ3J5OwogICAgZmFDYWxlbmRhck1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNzIiLCAiTTEyMCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgMTYwIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMCAxMTJsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjg4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6bTMyIDEzNmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUZhY2VUaXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXRpcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU1LCAidGlyZWQiXSwgImY1YzgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc2LjUgNjQuM0MxOTYuMSAzMDIuMSAyMjMuOCAyODggMjU2IDI4OHM1OS45IDE0LjEgNzkuNSAzMi4zYzE5IDE3LjggMzIuNSA0MS43IDMyLjUgNjMuNyAwIDUuNC0yLjcgMTAuNC03LjIgMTMuNHMtMTAuMiAzLjQtMTUuMiAxLjNsLTE3LjItNy41Yy0yMi44LTEwLTQ3LjUtMTUuMS03Mi40LTE1LjFzLTQ5LjYgNS4yLTcyLjQgMTUuMWwtMTcuMiA3LjVjLTQuOSAyLjItMTAuNyAxLjctMTUuMi0xLjNzLTcuMi04LTcuMi0xMy40YzAtMjIgMTMuNS00NS45IDMyLjUtNjMuN3pNMTIyLjYgMTU5LjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhVGlyZWQgPSBmYUZhY2VUaXJlZDsKICAgIGZhSGFuZFBvaW50UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE0IiwgIk00NDggMTI4bC0xNzcuNiAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNmwwIDE2IDE3NiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2ek0yMjQgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYy02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwwIDQ4YzAgNTIuNSAzMy43IDk3LjEgODAuNyAxMTMuNC0uNS0zLjEtLjctNi4yLS43LTkuNCAwLTIwIDkuMi0zNy45IDIzLjYtNDkuNy00LjktOS03LjYtMTkuNC03LjYtMzAuMyAwLTE1LjEgNS4zLTI5IDE0LTQwLTguOC0xMS0xNC0yNC45LTE0LTQwbDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MHpNMTkyIDY0bDAgMGMxOCAwIDM0LjYgNiA0OCAxNmwyMDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtODIgMGMxLjMgNS4xIDIgMTAuNSAyIDE2IDAgMjUuMy0xNC43IDQ3LjItMzYgNTcuNiAyLjYgNyA0IDE0LjUgNCAyMi40IDAgMjAtOS4yIDM3LjktMjMuNiA0OS43IDQuOSA5IDcuNiAxOS40IDcuNiAzMC4zIDAgMzUuMy0yOC43IDY0LTY0IDY0bC04OCAwQzc1LjIgNDQ4IDAgMzcyLjggMCAyODBsMC00OEMwIDEzOS4yIDc1LjIgNjQgMTY4IDY0bDI0IDB6bTY0IDMzNmM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw2NCAwem0xNi0xNzZjMCA1LjUtLjcgMTAuOS0yIDE2bDM0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTMyIDAgMCAxNnptLTI0IDY0bC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDY0IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVVwID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS11cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY3LCAiYXJyb3ctYWx0LWNpcmNsZS11cCJdLCAiZjM1YiIsICJNMjU2IDQ4YTIwOCAyMDggMCAxIDEgMCA0MTYgMjA4IDIwOCAwIDEgMSAwLTQxNnptMCA0NjRhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zYy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMTA0IDEwNGMtNC42IDQuNi01LjkgMTEuNS0zLjUgMTcuNHM4LjMgOS45IDE0LjggOS45bDcyIDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEwNCA3MiAwYzYuNSAwIDEyLjMtMy45IDE0LjgtOS45czEuMS0xMi45LTMuNS0xNy40bC0xMDQtMTA0eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVVwID0gZmFDaXJjbGVVcDsKICAgIGZhSGFuZFNjaXNzb3JzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtc2Npc3NvcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI1NyIsICJNLjIgMjc2LjNjLTEuMi0zNS4zIDI2LjQtNjUgNjEuNy02Ni4ybDMuMy0uMS04LjItMS44QzIyLjUgMjAwLjUgLjcgMTY2LjMgOC4zIDEzMS44UzUwLjIgNzUuNSA4NC43IDgzLjJsMTczIDM4LjNjMi4zLTIuOSA0LjYtNS43IDcuMS04LjVsMTguNC0yMC4zQzI5OS45IDc0LjUgMzIzLjUgNjQgMzQ4LjMgNjRsMTAuMiAwYzU0LjEgMCAxMDQuMSAyOC43IDEzMS4zIDc1LjRsMS41IDIuNmMxMy42IDIzLjIgMjAuNyA0OS43IDIwLjcgNzYuNkw1MTIgMzQ0YzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC0xMDQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yLjggLjItNS42IC41LTguMy0xOS40LTExLTMyLjUtMzEuOC0zMi41LTU1LjcgMC0uOCAwLTEuNiAwLTIuNEw2Ni40IDMzOGMtMzUuMyAxLjItNjUtMjYuNC02Ni4yLTYxLjd6bTYzLjQtMTguMmMtOC44IC4zLTE1LjcgNy43LTE1LjQgMTYuNnM3LjcgMTUuNyAxNi41IDE1LjRsMTYxLjUtNS42YzkuOC0uMyAxOC43IDUuMyAyMi43IDE0LjJzMi4yIDE5LjMtNC41IDI2LjRjLTIuOCAyLjktNC40IDYuNy00LjQgMTEgMCA4LjggNy4yIDE2IDE2IDE2IDkuMSAwIDE3LjQgNS4xIDIxLjUgMTMuM3MzLjIgMTcuOS0yLjMgMjUuMWMtMiAyLjctMy4yIDYtMy4yIDkuNiAwIDguOCA3LjIgMTYgMTYgMTZsMTA0IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0xMjUuNGMwLTE4LjQtNC45LTM2LjUtMTQuMi01Mi40bC0xLjUtMi42Yy0xOC42LTMyLTUyLjgtNTEuNi04OS44LTUxLjZsLTEwLjIgMGMtMTEuMyAwLTIyIDQuOC0yOS42IDEzLjFsMCAwLTE4LjQgMjAuM2MtLjYgLjYtMS4xIDEuMy0xLjcgMS45bDU3IDEzLjJjOC42IDIgMTQgMTAuNiAxMiAxOS4ycy0xMC42IDE0LTE5LjIgMTJMMjYyLjggMTcxLjggNzQuMyAxMzBjLTguNi0xLjktMTcuMiAzLjUtMTkuMSAxMi4yczMuNSAxNy4yIDEyLjIgMTkuMWwxODcuNSA0MS42YzEwLjIgMi4zIDE3LjggMTAuOSAxOC43IDIxLjRsLjEgMWMuNiA2LjYtMS41IDEzLjEtNS44IDE4LjFzLTEwLjYgNy45LTE3LjIgOC4yTDYzLjYgMjU4LjF6Il0KICAgIH07CiAgICBmYUdlbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJnZW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNDJdLCAiZjNhNSIsICJNMTY4LjUgNzJsODcuNSA5MyA4Ny41LTkzLTE3NSAwek0zODMuOSA5OS4xbC03Mi4zIDc2LjkgMTI5IDAtNTYuNi03Ni45em01MCAxMjQuOUw3OC4xIDIyNCAyNTYgNDIwLjMgNDMzLjkgMjI0ek03MS41IDE3NmwxMjkgMC03Mi4zLTc2LjktNTYuNiA3Ni45em00MzQuMyA0MC4xbC0yMzIgMjU2Yy00LjUgNS0xMSA3LjktMTcuOCA3LjlzLTEzLjItMi45LTE3LjgtNy45bC0yMzItMjU2Yy03LjctOC41LTguMy0yMS4yLTEuNS0zMC40bDExMi0xNTJjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOGwyNDAgMGM3LjYgMCAxNC44IDMuNiAxOS4zIDkuOGwxMTIgMTUyYzYuOCA5LjIgNi4xIDIxLjktMS41IDMwLjR6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogInJlY3RhbmdsZS14bWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTY0LCAicmVjdGFuZ2xlLXRpbWVzIiwgInRpbWVzLXJlY3RhbmdsZSIsICJ3aW5kb3ctY2xvc2UiXSwgImY0MTAiLCAiTTY0IDExMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjU2YzAgOC44IDcuMiAxNiAxNiAxNmwzODQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNTZjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDExMnpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMzM0LjEgNDkuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNDQuMSA0NC4xIDQ0LjEgNDQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00NC4xLTQ0LjEtNDQuMSA0NC4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDQ0LjEtNDQuMS00NC4xLTQ0LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0NC4xIDQ0LjEgNDQuMS00NC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFSZWN0YW5nbGVUaW1lcyA9IGZhUmVjdGFuZ2xlWG1hcms7CiAgICBmYVRpbWVzUmVjdGFuZ2xlID0gZmFSZWN0YW5nbGVYbWFyazsKICAgIGZhV2luZG93Q2xvc2UgPSBmYVJlY3RhbmdsZVhtYXJrOwogICAgZmFUcmFzaENhbiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFzaC1jYW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2MTQ2MCwgInRyYXNoLWFsdCJdLCAiZjJlZCIsICJNMTY2LjItMTZjLTEzLjMgMC0yNS4zIDguMy0zMCAyMC44TDEyMCA0OCAyNCA0OEMxMC43IDQ4IDAgNTguNyAwIDcyUzEwLjcgOTYgMjQgOTZsNDAwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTk2IDAtMTYuMi00My4yQzMwNy4xLTcuNyAyOTUuMi0xNiAyODEuOC0xNkwxNjYuMi0xNnpNMzIgMTQ0bDAgMzA0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzA0LTQ4IDAgMCAzMDRjMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ2NGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzA0LTQ4IDB6bTE2MCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2em0xMTIgMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTc2eiJdCiAgICB9OwogICAgZmFUcmFzaEFsdCA9IGZhVHJhc2hDYW47CiAgICBmYUxpZmVSaW5nID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImxpZmUtcmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWNkIiwgIk0zODUuMSA0MTkuMUMzNDkuNyA0NDcuMiAzMDQuOCA0NjQgMjU2IDQ2NHMtOTMuNy0xNi44LTEyOS4xLTQ0LjlsODAuNC04MC40YzE0LjMgOC40IDMxIDEzLjMgNDguOCAxMy4zczM0LjUtNC44IDQ4LjgtMTMuM2w4MC40IDgwLjR6bTY4LjEgLjJDNDg5LjkgMzc0LjkgNTEyIDMxOC4xIDUxMiAyNTZTNDg5LjkgMTM3LjEgNDUzLjIgOTIuN0w0NjUgODFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw0MTkuMyA1OC44QzM3NC45IDIyLjEgMzE4LjEgMCAyNTYgMFMxMzcuMSAyMi4xIDkyLjcgNTguOEw4MSA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTMzcuNyA3MS42IDQ3IDgxTDU4LjggOTIuN0MyMi4xIDEzNy4xIDAgMTkzLjkgMCAyNTZTMjIuMSAzNzQuOSA1OC44IDQxOS4zTDQ3IDQzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDExLjgtMTEuOEMxMzcuMSA0ODkuOSAxOTMuOSA1MTIgMjU2IDUxMnMxMTguOS0yMi4xIDE2My4zLTU4LjhMNDMxIDQ2NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTExLjgtMTEuOHptLTM0LjEtMzQuMWwtODAuNC04MC40YzguNC0xNC4zIDEzLjMtMzEgMTMuMy00OC44cy00LjgtMzQuNS0xMy4zLTQ4LjhsODAuNC04MC40QzQ0Ny4yIDE2Mi4zIDQ2NCAyMDcuMiA0NjQgMjU2cy0xNi44IDkzLjctNDQuOSAxMjkuMXpNMzg1LjEgOTIuOWwtODAuNCA4MC40Yy0xNC4zLTguNC0zMS0xMy4zLTQ4LjgtMTMuM3MtMzQuNSA0LjgtNDguOCAxMy4zTDEyNi45IDkyLjlDMTYyLjMgNjQuOCAyMDcuMiA0OCAyNTYgNDhzOTMuNyAxNi44IDEyOS4xIDQ0Ljl6TTE3My4zIDMwNC44TDkyLjkgMzg1LjFDNjQuOCAzNDkuNyA0OCAzMDQuOCA0OCAyNTZzMTYuOC05My43IDQ0LjktMTI5LjFsODAuNCA4MC40Yy04LjQgMTQuMy0xMy4zIDMxLTEzLjMgNDguOHM0LjggMzQuNSAxMy4zIDQ4Ljh6TTIwOCAyNTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQ29weXJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNvcHlyaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzE2OV0sICJmMWY5IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45Yy0yOC4xLTI4LjEtMjguMS03My43IDAtMTAxLjhzNzMuNy0yOC4xIDEwMS44IDBjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy00Ni45LTQ2LjktMTIyLjgtNDYuOS0xNjkuNyAwcy00Ni45IDEyMi44IDAgMTY5LjcgMTIyLjggNDYuOSAxNjkuNyAwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxODQwLCAiYXJyb3ctYWx0LWNpcmNsZS1sZWZ0Il0sICJmMzU5IiwgIk00OCAyNTZhMjA4IDIwOCAwIDEgMSA0MTYgMCAyMDggMjA4IDAgMSAxIC00MTYgMHptNDY0IDBhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMTI0LjcgMjQ0LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDEwNCAxMDRjNC42IDQuNiAxMS41IDUuOSAxNy40IDMuNXM5LjktOC4zIDkuOS0xNC44bDAtNzIgMTA0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTA0IDAgMC03MmMwLTYuNS0zLjktMTIuMy05LjktMTQuOHMtMTIuOS0xLjEtMTcuNCAzLjVsLTEwNCAxMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlTGVmdDsKICAgIGZhQ2FsZW5kYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sICJmMTMzIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OCAzNTIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMjY0IDB6TTQ4IDIyNGwwIDE5MmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTkyLTM1MiAweiJdCiAgICB9OwogICAgZmFGYWNlRnJvd25PcGVuID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24tb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgImZyb3duLW9wZW4iXSwgImY1N2EiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTgyLjQgMzgyLjVjLTEyLjQgNS4yLTI2LjUtNC4xLTIxLjEtMTYuNCAxNi0zNi42IDUyLjQtNjIuMSA5NC44LTYyLjFzNzguOCAyNS42IDk0LjggNjIuMWM1LjQgMTIuMy04LjcgMjEuNi0yMS4xIDE2LjQtMjIuNC05LjUtNDcuNC0xNC44LTczLjctMTQuOHMtNTEuMyA1LjMtNzMuNyAxNC44ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZyb3duT3BlbiA9IGZhRmFjZUZyb3duT3BlbjsKICAgIGZhQ2hhcnRCYXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYmFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhci1jaGFydCJdLCAiZjA4MCIsICJNNDggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCA0Mi43IDAgNTZMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODAgNDMyYy0xNy43IDAtMzItMTQuMy0zMi0zMkw0OCA1NnptMTA0IDcybDIwOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDE1MiA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNHptMCA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6bTAgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXQogICAgfTsKICAgIGZhQmFyQ2hhcnQgPSBmYUNoYXJ0QmFyOwogICAgZmFIb3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2OCwgNjM0OTgsIDYzNTAwLCAiaG9tZSIsICJob21lLWFsdCIsICJob21lLWxnLWFsdCJdLCAiZjAxNSIsICJNMjQwIDYuMWM5LjEtOC4yIDIyLjktOC4yIDMyIDBsMjMyIDIwOGM5LjkgOC44IDEwLjcgMjQgMS44IDMzLjlzLTI0IDEwLjctMzMuOSAxLjhsLTgtNy4yIDAgMjA1LjNjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIwNS4zLTggNy4yYy05LjkgOC44LTI1IDgtMzMuOS0xLjhzLTgtMjUgMS44LTMzLjlMMjQwIDYuMXptMTYgNTAuMUw5NiAxOTkuNyA5NiA0NDhjMCA4LjggNy4yIDE2IDE2IDE2bDQ4IDAgMC0xMDRjMC0zOS44IDMyLjItNzIgNzItNzJsNDggMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDEwNCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0OC4zLTE2MC0xNDMuNHpNMjA4IDQ2NGw5NiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNHoiXQogICAgfTsKICAgIGZhSG9tZSA9IGZhSG91c2U7CiAgICBmYUhvbWVBbHQgPSBmYUhvdXNlOwogICAgZmFIb21lTGdBbHQgPSBmYUhvdXNlOwogICAgZmFGYWNlRnJvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1mcm93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3ODUsICJmcm93biJdLCAiZjExOSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0zMzQuNyAzODQuNkMzMTkuNyAzNjkgMjkzLjYgMzUyIDI1NiAzNTJzLTYzLjcgMTctNzguNyAzMi42Yy05LjIgOS42LTI0LjQgOS45LTMzLjkgLjdzLTkuOS0yNC40LS43LTMzLjljMjIuMS0yMyA2MC00Ny40IDExMy4zLTQ3LjRzOTEuMiAyNC40IDExMy4zIDQ3LjRjOS4yIDkuNiA4LjkgMjQuOC0uNyAzMy45cy0yNC44IDguOS0zMy45LS43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUZyb3duID0gZmFGYWNlRnJvd247CiAgICBmYVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAidXNlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODEwMCwgNjIxNDQsIDYyNDcwLCAidXNlci1hbHQiLCAidXNlci1sYXJnZSJdLCAiZjAwNyIsICJNMTQ0IDEyOGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6bTIwOCAwYTEyOCAxMjggMCAxIDAgLTI1NiAwIDEyOCAxMjggMCAxIDAgMjU2IDB6TTQ4IDQ4MGMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOGw5NiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOGMwLTk3LjItNzguOC0xNzYtMTc2LTE3NmwtOTYgMEM3OC44IDMwNCAwIDM4Mi44IDAgNDgwbDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOHoiXQogICAgfTsKICAgIGZhVXNlckFsdCA9IGZhVXNlcjsKICAgIGZhVXNlckxhcmdlID0gZmFVc2VyOwogICAgZmFTbm93Zmxha2UgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic25vd2ZsYWtlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwNTIsIDEwMDU0XSwgImYyZGMiLCAiTTI4MC4xLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3OC4xLTIzLTIzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDU3IDU3IDAgNzYuNS02Ni4yLTM4LjItMjAuOS03Ny44Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4yIDk4IDk4LjcgMTEwLjhsOC40IDMxLjUtNjcuNi0zOUMyOCA5Ni42IDEzLjMgMTAwLjUgNi43IDExMlM0IDEzOC4yIDE1LjUgMTQ0LjhsNjcuNiAzOS0zMS41IDguNGMtMTIuOCAzLjQtMjAuNCAxNi42LTE3IDI5LjRzMTYuNiAyMC40IDI5LjQgMTdsNzcuOC0yMC45IDY2LjIgMzguMi02Ni4yIDM4LjItNzcuOC0yMC45Yy0xMi44LTMuNC0yNiA0LjItMjkuNCAxN3M0LjIgMjYgMTcgMjkuNGwzMS41IDguNC02Ny42IDM5QzQgMzczLjggLjEgMzg4LjUgNi43IDQwMHMyMS4zIDE1LjQgMzIuOCA4LjhsNjcuNi0zOS04LjQgMzEuNWMtMy40IDEyLjggNC4yIDI2IDE3IDI5LjRzMjYtNC4yIDI5LjQtMTdsMjAuOS03Ny44IDY2LjItMzguMiAwIDc2LjUtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwyMy0yMyAwIDc4LjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTc4LjEgMjMgMjNjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01Ny01NyAwLTc2LjUgNjYuMiAzOC4yIDIwLjkgNzcuOGMzLjQgMTIuOCAxNi42IDIwLjQgMjkuNCAxN3MyMC40LTE2LjYgMTctMjkuNGwtOC40LTMxLjUgNjcuNiAzOWMxMS41IDYuNiAyNi4yIDIuNyAzMi44LTguOHMyLjctMjYuMi04LjgtMzIuOGwtNjcuNi0zOSAzMS41LTguNGMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTc3LjggMjAuOS02Ni4yLTM4LjIgNjYuMi0zOC4yIDc3LjggMjAuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTMxLjUtOC40IDY3LjYtMzljMTEuNS02LjYgMTUuNC0yMS4zIDguOC0zMi44cy0yMS4zLTE1LjQtMzIuOC04LjhsLTY3LjYgMzkgOC40LTMxLjVjMy40LTEyLjgtNC4yLTI2LTE3LTI5LjRzLTI2IDQuMi0yOS40IDE3bC0yMC45IDc3LjgtNjYuMiAzOC4yIDAtNzYuNSA1Ny01N2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0yMyAyMyAwLTc4LjF6Il0KICAgIH07CiAgICBmYUJvb2ttYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImJvb2ttYXJrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4Mjc4LCA2MTU5MV0sICJmMDJlIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQxNy4xYzAgMjUuNi0yOC41IDQwLjgtNDkuOCAyNi42TDE5MiA0MTIuOCA0OS44IDUwNy43QzI4LjUgNTIxLjkgMCA1MDYuNiAwIDQ4MS4xTDAgNjR6TTY0IDQ4Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzODcuMiAxMTcuNC03OC4yYzE2LjEtMTAuNyAzNy4xLTEwLjcgNTMuMiAwTDMzNiA0NTEuMiAzMzYgNjRjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDQ4eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LWxlZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLWxlZnQiXSwgImYxOTEiLCAiTTQ4IDQxNmMwIDguOCA3LjIgMTYgMTYgMTZsMzIwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIwYzAtOC44LTcuMi0xNi0xNi0xNkw2NCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIwem0xNiA2NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODB6bTY0LTIyNGMwLTYuNyAyLjgtMTMgNy43LTE3LjZsMTEyLTEwNGM3LTYuNSAxNy4yLTguMiAyNS45LTQuNFMyODggMTQyLjUgMjg4IDE1MmwwIDIwOGMwIDkuNS01LjcgMTguMi0xNC40IDIycy0xOC45IDIuMS0yNS45LTQuNGwtMTEyLTEwNGMtNC45LTQuNS03LjctMTAuOS03LjctMTcuNnoiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVMZWZ0ID0gZmFTcXVhcmVDYXJldExlZnQ7CiAgICBmYUhhbmRzaGFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDksIDYyNjYyLCAiaGFuZHNoYWtlLWFsdCIsICJoYW5kc2hha2Utc2ltcGxlIl0sICJmMmI1IiwgIk01OTguMSA3NS40YzEwLjctNy44IDEzLjEtMjIuOCA1LjMtMzMuNXMtMjIuOC0xMy4xLTMzLjUtNS4zbC03NC41IDU0LjItOS45LTYuNkM0NjUuOCA3MSA0NDIuNiA2NCA0MTguOSA2NGwtNTkuMiAwLS40IDAtMTQzLjYgMGMtMjYuNyAwLTUyLjUgOC45LTczLjQgMjUuMUw3MC4xIDM2LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zcy01LjQgMjUuNyA1LjMgMzMuNWw4OCA2NGM5LjYgNi45IDIyLjcgNS45IDMxLjEtMi40bDMuOS0zLjljMTMuNS0xMy41IDMxLjgtMjEuMSA1MC45LTIxLjFsNDYuMyAwLTkxLjcgOTEuN2MtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZsLjggLjhDMjE4IDMwOCAyOTQgMzA4IDM0MC45IDI2MS4xbDI3LjEtMjcuMSA5Ny44IDk3LjhjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZsLTkuOCA5LjgtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMjggMjhjLTE3LjUgMTAuNC0zNy4yIDE2LjctNTcuNiAxOC41TDMxMyAzOTljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMTUgMTUtMy44IDBjLTM2LjEgMC03MC43LTE0LjMtOTYuMi0zOS44TDY1IDI3OWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxNjAuMiA0NDIuMWMzNC41IDM0LjUgODEuMyA1My45IDEzMC4xIDUzLjlsNTEuOCAwIDEgMSAxLTEgNS43IDBjNDguOCAwIDk1LjYtMTkuNCAxMzAuMS01My45bDE5LjktMTkuOWMxLjItMS4yIDIuMy0yLjMgMy40LTMuNSAuNy0uNSAxLjMtMS4xIDEuOS0xLjdMNjA5IDMxM2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01My44IDUzLjhjLTQuMi0xMi44LTExLjMtMjQuOS0yMS41LTM1LjFMMzg1IDE4M2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTQ0LjEgNDQuMWMtMjYuNSAyNi41LTY4LjUgMjgtOTYuNyA0LjZsOTguNy05OC43YzEzLjQtMTMuNCAzMS42LTIxIDUwLjYtMjEuMWw4LjUgMCAuMiAwIDUwLjggMGMxNC4yIDAgMjguMSA0LjIgMzkuOSAxMi4xTDQ4Mi43IDE0MGM4LjQgNS42IDE5LjMgNS4zIDI3LjQtLjZsODgtNjR6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFsdCA9IGZhSGFuZHNoYWtlOwogICAgZmFIYW5kc2hha2VTaW1wbGUgPSBmYUhhbmRzaGFrZTsKICAgIGZhRmFjZVNtaWxlV2luayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNtaWxlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjEsICJzbWlsZS13aW5rIl0sICJmNGRhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTE3Ny4zIDYzLjRDMTkyLjMgMzM1IDIxOC40IDM1MiAyNTYgMzUyczYzLjctMTcgNzguNy0zMi42YzkuMi05LjYgMjQuNC05LjkgMzMuOS0uN3M5LjkgMjQuNCAuNyAzMy45Yy0yMi4xIDIzLTYwIDQ3LjQtMTEzLjMgNDcuNHMtOTEuMi0yNC40LTExMy4zLTQ3LjRjLTkuMi05LjYtOC45LTI0LjggLjctMzMuOXMyNC44LTguOSAzMy45IC43ek0xNDQgMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2NCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwYy0xMSAwLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYVNtaWxlV2luayA9IGZhRmFjZVNtaWxlV2luazsKICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzE1LCAiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwgImY1ODYiLCAiTTQwMy4xIDQwMy4xYzY3LjItNjcuMiA3OC44LTE2OC45IDM0LjktMjQ4bDM2LjctNS4yYzQuNS0uNiA4LjgtMS42IDEzLjEtMi44IDQ0LjYgOTQuOSAyNy43IDIxMS41LTUwLjcgMjkwcy0xOTUuMSA5NS4zLTI5MCA1MC43YzEuMi00LjIgMi4xLTguNiAyLjgtMTMuMWw1LjItMzYuN2M3OS4xIDQzLjkgMTgwLjggMzIuMyAyNDgtMzQuOXpNNzUgNzVjNzguNC03OC40IDE5NS4xLTk1LjMgMjkwLTUwLjctMS4yIDQuMi0yLjEgOC42LTIuOCAxMy4xbC01LjIgMzYuN2MtNzkuMS00My45LTE4MC44LTMyLjMtMjQ4IDM0LjlzLTc4LjggMTY4LjktMzQuOSAyNDhsLTM2LjcgNS4yYy00LjUgLjYtOC44IDEuNi0xMy4xIDIuOC00NC42LTk0LjktMjcuNy0yMTEuNSA1MC43LTI5MHpNMzcwLjkgMjA2LjVjNS44LTEwLjkgMjEuMS0xMi40IDI2LjQtMS4zIDI1LjYgNTMuNSAxNi4yIDExOS42LTI4LjIgMTYzLjktNDQuMyA0NC4zLTExMC4zIDUzLjctMTYzLjggMjguMi0xMS4xLTUuMy05LjYtMjAuNiAxLjMtMjYuNCAzMi0xNy4xIDY0LjItNDAuOCA5My44LTcwLjQgMjkuNy0yOS43IDUzLjQtNjEuOSA3MC41LTk0ek05My4zIDI4MS45Yy0xLjctOCAyLjktMTUuOSAxMC42LTE4LjRsODQuNi0yOGM1LjctMS45IDEyLjEtLjQgMTYuMyAzLjlzNS44IDEwLjYgMy45IDE2LjNsLTI4IDg0LjZjLTIuNiA3LjctMTAuNSAxMi4zLTE4LjQgMTAuNnMtMTMuNC05LTEyLjctMTcuMWwzLjktNDMuMS00My4xIDMuOWMtOC4xIC43LTE1LjUtNC43LTE3LjEtMTIuN3pNMjk0LjYgMTEwLjRsLTMuOSA0My4xIDQzLjEtMy45YzguMS0uNyAxNS41IDQuNyAxNy4xIDEyLjdzLTIuOSAxNS45LTEwLjYgMTguNGwtODQuNiAyOGMtNS43IDEuOS0xMi4xIC40LTE2LjMtMy45cy01LjgtMTAuNi0zLjktMTYuM2wyOC04NC42YzIuNi03LjcgMTAuNS0xMi4zIDE4LjQtMTAuNnMxMy40IDkgMTIuNyAxNy4xek01MTIgNTEuNGMwIDI1LjYtMTguOCA0Ny4zLTQ0LjEgNTAuOUw0MjEuMSAxMDljLTEwLjYgMS41LTE5LjYtNy41LTE4LjEtMTguMWw2LjctNDYuN0M0MTMuMyAxOC44IDQzNSAwIDQ2MC42IDAgNDg5IDAgNTEyIDIzIDUxMiA1MS40ek00NC4xIDQwOS43TDkwLjkgNDAzYzEwLjYtMS41IDE5LjYgNy41IDE4LjEgMTguMWwtNi43IDQ2LjdDOTguNyA0OTMuMiA3NyA1MTIgNTEuNCA1MTIgMjMgNTEyIDAgNDg5IDAgNDYwLjYgMCA0MzUgMTguOCA0MTMuMyA0NC4xIDQwOS43eiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50VGVhcnMgPSBmYUZhY2VHcmluU3F1aW50VGVhcnM7CiAgICBmYUZpbGVBdWRpbyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWF1ZGlvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzciLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTIyMS45IDI2Ny42Yy00LjcgMTAtLjMgMjEuOSA5LjcgMjYuNiAxOS4yIDguOSAzMi40IDI4LjMgMzIuNCA1MC44cy0xMy4yIDQxLjktMzIuNCA1MC44Yy0xMCA0LjctMTQuNCAxNi42LTkuNyAyNi42czE2LjYgMTQuNCAyNi42IDkuN0MyODEuMiA0MTYuOCAzMDQgMzgzLjYgMzA0IDM0NXMtMjIuOC03MS45LTU1LjYtODcuMWMtMTAtNC43LTIxLjktLjMtMjYuNiA5Ljd6TTEwNCAzMDVjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTYgMCAyNy4yIDM0YzMgMy44IDcuNiA2IDEyLjUgNmwuMyAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEyOGMwLTguOC03LjItMTYtMTYtMTZsLS4zIDBjLTQuOSAwLTkuNSAyLjItMTIuNSA2bC0yNy4yIDM0LTE2IDB6TTIyMy4zIDM3M2M5LjktNS40IDE2LjctMTYgMTYuNy0yOC4xcy02LjctMjIuNy0xNi43LTI4LjFjLTcuOC00LjItMTUuMyAzLjMtMTUuMyAxMi4xbDAgMzJjMCA4LjggNy42IDE2LjMgMTUuMyAxMi4xeiJdCiAgICB9OwogICAgZmFDYWxlbmRhclhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXhtYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLXRpbWVzIl0sICJmMjczIiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQwIDE2MCAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtNDBjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTEybC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI4OGMwLTguOC03LjItMTYtMTYtMTZsLTI2NCAwem0xNzEuOSA5Mi4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyVGltZXMgPSBmYUNhbGVuZGFyWG1hcms7CiAgICBmYUNpcmNsZURvd24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgImFycm93LWFsdC1jaXJjbGUtZG93biJdLCAiZjM1OCIsICJNMjU2IDQ2NGEyMDggMjA4IDAgMSAxIDAtNDE2IDIwOCAyMDggMCAxIDEgMCA0MTZ6TTI1NiAwYTI1NiAyNTYgMCAxIDAgMCA1MTIgMjU2IDI1NiAwIDEgMCAwLTUxMnpNMjQ0LjcgMzg3LjNjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsMTA0LTEwNGM0LjYtNC42IDUuOS0xMS41IDMuNS0xNy40UzM2Ni41IDI1NiAzNjAgMjU2bC03MiAwIDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNC03MiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsMTA0IDEwNHoiXQogICAgfTsKICAgIGZhQXJyb3dBbHRDaXJjbGVEb3duID0gZmFDaXJjbGVEb3duOwogICAgZmFGaWxlTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgImZpbGUtYWx0IiwgImZpbGUtdGV4dCJdLCAiZjE1YyIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptNTYgMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUZpbGVBbHQgPSBmYUZpbGVMaW5lczsKICAgIGZhRmlsZVRleHQgPSBmYUZpbGVMaW5lczsKICAgIGZhQ29tbWVudHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgImYwODYiLCAiTTc2LjIgMjU4LjdjNi4xLTE1LjIgNC0zMi42LTUuNi00NS45LTE0LjUtMjAuMS0yMi42LTQzLjctMjIuNi02OC44IDAtNjYuOCA2MC41LTEyOCAxNDQtMTI4czE0NCA2MS4yIDE0NCAxMjgtNjAuNSAxMjgtMTQ0IDEyOGMtMTUuOSAwLTMxLjEtMi4zLTQ1LjMtNi41LTEwLjMtMy4xLTIxLjQtMi41LTMxLjQgMS41bC01MC40IDIwLjIgMTEuNC0yOC41ek0wIDE0NGMwIDM1LjggMTEuNiA2OS4xIDMxLjcgOTYuOEwxLjkgMzE1LjJjLTEuMyAzLjItMS45IDYuNi0xLjkgMTAgMCAxNC44IDEyIDI2LjggMjYuOCAyNi44IDMuNCAwIDYuOC0uNyAxMC0xLjlsOTYuMy0zOC41YzE4LjYgNS41IDM4LjQgOC40IDU4LjkgOC40IDEwNiAwIDE5Mi03OC44IDE5Mi0xNzZTMjk4LTMyIDE5Mi0zMiAwIDQ2LjggMCAxNDR6TTM4NCA1MTJjMjAuNiAwIDQwLjMtMyA1OC45LTguNGw5Ni4zIDM4LjVjMy4yIDEuMyA2LjYgMS45IDEwIDEuOSAxNC44IDAgMjYuOC0xMiAyNi44LTI2LjggMC0zLjQtLjctNi44LTEuOS0xMGwtMjkuNy03NC40YzIwLTI3LjggMzEuNy02MS4xIDMxLjctOTYuOCAwLTgyLjQtNjEuNy0xNTEuNS0xNDUtMTcwLjctMS42IDE2LjMtNS4xIDMxLjktMTAuMSA0Ni45IDYzLjkgMTQuOCAxMDcuMiA2Ny4zIDEwNy4yIDEyMy45IDAgMjUuMS04LjEgNDguNy0yMi42IDY4LjgtOS42IDEzLjMtMTEuNyAzMC42LTUuNiA0NS45bDExLjQgMjguNS01MC40LTIwLjJjLTEwLTQtMjEuMS00LjUtMzEuNC0xLjUtMTQuMiA0LjItMjkuNCA2LjUtNDUuMyA2LjUtNzIuMiAwLTEyNy4xLTQ1LjctMTQwLjctMTAxLjItMTUuNiAzLjItMzEuNyA1LTQ4LjEgNS4yIDE2LjQgODEuOSA5NC43IDE0NCAxODguOCAxNDR6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNTMzLCAiY2hlY2stY2lyY2xlIl0sICJmMDU4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDEgMC01MTIgMjU2IDI1NiAwIDEgMSAwIDUxMnptMC00NjRhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2em03MC43IDEyMS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuMyAxMC43IDcuOCAxMy4xIDIyLjggNS4zIDMzLjVMMjQzLjQgMzY2LjFjLTQuMSA1LjctMTAuNSA5LjMtMTcuNSA5LjgtNyAuNS0xMy45LTItMTguOC02LjlsLTU1LjktNTUuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDM2IDM2IDEwNS42LTE0NS4yeiJdCiAgICB9OwogICAgZmFDaGVja0NpcmNsZSA9IGZhQ2lyY2xlQ2hlY2s7CiAgICBmYU1vb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibW9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc2OSwgOTIxNF0sICJmMTg2IiwgIk0yMzkuMyA0OC43Yy0xMDcuMSA4LjUtMTkxLjMgOTguMS0xOTEuMyAyMDcuMyAwIDExNC45IDkzLjEgMjA4IDIwOCAyMDggMzMuMyAwIDY0LjctNy44IDkyLjYtMjEuNy0xMDMuNC0yMy40LTE4MC42LTExNS44LTE4MC42LTIyNi4zIDAtNjUuOCAyNy40LTEyNS4xIDcxLjMtMTY3LjN6TTAgMjU2YzAtMTQxLjQgMTE0LjYtMjU2IDI1Ni0yNTYgMTkuNCAwIDM4LjQgMi4yIDU2LjcgNi4zIDkuOSAyLjIgMTcuMyAxMC41IDE4LjUgMjAuNXMtNCAxOS44LTEzLjEgMjQuNGMtNjAuNiAzMC4yLTEwMi4xIDkyLjctMTAyLjEgMTY0LjggMCAxMDEuNiA4Mi40IDE4NCAxODQgMTg0IDUgMCA5LjktLjIgMTQuOC0uNiAxMC4xLS44IDE5LjYgNC44IDIzLjggMTQuMXMyIDIwLjEtNS4zIDI3LjFDMzg3LjMgNDg0LjggMzI0LjggNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6Il0KICAgIH07CiAgICBmYUNsb3NlZENhcHRpb25pbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2xvc2VkLWNhcHRpb25pbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjIwYSIsICJNNDQ4IDExMmM4LjggMCAxNiA3LjIgMTYgMTZsMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2TDY0IDQwMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHpNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTg4IDE0NGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MGMwLTQuNCAzLjYtOCA4LTh6bTE2OCA4YzAtNC40IDMuNi04IDgtOGwzMiAwYzQuNCAwIDggMy42IDggOCAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMzAuOS0yNS4xLTU2LTU2LTU2bC0zMiAwYy0zMC45IDAtNTYgMjUuMS01NiA1NmwwIDgwYzAgMzAuOSAyNS4xIDU2IDU2IDU2bDMyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRjMCA0LjQtMy42IDgtOCA4bC0zMiAwYy00LjQgMC04LTMuNi04LThsMC04MHoiXQogICAgfTsKICAgIGZhSW1hZ2VzID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImltYWdlcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzAyIiwgIk00ODAgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjU2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI1NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDB6TTE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyNTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDMyem04MCAxMTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTQwLjcgMy44Yy00LjMtNy4zLTEyLjItMTEuOC0yMC43LTExLjhzLTE2LjQgNC41LTIwLjcgMTEuOGwtNDYuNSA3OS0xNy4yLTI0LjZjLTQuNS02LjQtMTEuOC0xMC4yLTE5LjctMTAuMnMtMTUuMiAzLjgtMTkuNyAxMC4ybC01NiA4MGMtNS4xIDcuMy01LjggMTYuOS0xLjYgMjQuOFMxOTEuMSAzMjAgMjAwIDMyMGwyNDAgMGM4LjYgMCAxNi42LTQuNiAyMC44LTEyLjFzNC4yLTE2LjctLjEtMjQuMWwtODAtMTM2ek00OCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMzguNyAwIDE1MkwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzNjAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI5NnoiXQogICAgfTsKICAgIGZhQ2lyY2xlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4MzgsICJhcnJvdy1hbHQtY2lyY2xlLXJpZ2h0Il0sICJmMzVhIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDEgLTQxNiAwIDIwOCAyMDggMCAxIDEgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6bTM4Ny4zIDExLjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTEwNC0xMDRjLTQuNi00LjYtMTEuNS01LjktMTcuNC0zLjVTMjU2IDE0NS41IDI1NiAxNTJsMCA3Mi0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDcyYzAgNi41IDMuOSAxMi4zIDkuOSAxNC44czEyLjkgMS4xIDE3LjQtMy41bDEwNC0xMDR6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlUmlnaHQgPSBmYUNpcmNsZVJpZ2h0OwogICAgZmFJZENhcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaWQtY2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyMTQ3LCAiZHJpdmVycy1saWNlbnNlIl0sICJmMmMyIiwgIk00OCA0MTZsMC0yNTYgNDgwIDAgMCAyNTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODBsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA4IDMxMmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMzc2IDIwOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTgwIDB6Il0KICAgIH07CiAgICBmYURyaXZlcnNMaWNlbnNlID0gZmFJZENhcmQ7CiAgICBmYUNpcmNsZVBsYXkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsYXkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2OSwgInBsYXktY2lyY2xlIl0sICJmMTQ0IiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMSAwIDQxNiAyMDggMjA4IDAgMSAxIDAtNDE2em0wIDQ2NGEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIxMi41IDE0Ny41Yy03LjQtNC41LTE2LjctNC43LTI0LjMtLjVTMTc2IDE1OS4zIDE3NiAxNjhsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODh6TTI5OCAyNTZsLTc0IDQ1LjIgMC05MC40IDc0IDQ1LjJ6Il0KICAgIH07CiAgICBmYVBsYXlDaXJjbGUgPSBmYUNpcmNsZVBsYXk7CiAgICBmYUZhY2VMYXVnaEJlYW0gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTEzLCAibGF1Z2gtYmVhbSJdLCAiZjU5YSIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xMTguMyA1OC4yYy00LjItMTMuNyA3LjEtMjYuMiAyMS40LTI2LjJsMjMyLjYgMGMxNC4zIDAgMjUuNiAxMi41IDIxLjQgMjYuMi0xOCA1OC45LTcyLjkgMTAxLjgtMTM3LjcgMTAxLjhTMTM2LjMgMzczLjEgMTE4LjMgMzE0LjJ6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFMYXVnaEJlYW0gPSBmYUZhY2VMYXVnaEJlYW07CiAgICBmYUFkZHJlc3NCb29rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImFkZHJlc3MtYm9vayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTM4LCAiY29udGFjdC1ib29rIl0sICJmMmI5IiwgIk0zODQgNDhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzg0YzAgOC44LTcuMiAxNi0xNiAxNkw5NiA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw4MCA2NGMwLTguOCA3LjItMTYgMTYtMTZsMjg4IDB6TTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjQwIDI0OGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptLTMyIDQwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwek01MTIgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNjR6TTQ5NiAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZ6bTE2IDE0NGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHoiXQogICAgfTsKICAgIGZhQ29udGFjdEJvb2sgPSBmYUFkZHJlc3NCb29rOwogICAgZmFIb3VyZ2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTIwMywgNjIwMzIsICJob3VyZ2xhc3MtZW1wdHkiXSwgImYyNTQiLCAiTTI0IDBDMTAuNyAwIDAgMTAuNyAwIDI0UzEwLjcgNDggMjQgNDhsOCAwIDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsODEuNSA4MS41LTgxLjUgODEuNUM0OCAzNjYgMzIgNDA0LjcgMzIgNDQ1bDAgMTktOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04IDAgMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtODEuNS04MS41IDgxLjUtODEuNUMzMzYgMTQ2IDM1MiAxMDcuMyAzNTIgNjdsMC0xOSA4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzczLjMgMCAzNjAgMEwyNCAwek0xOTIgMjg5LjlsODEuNSA4MS41QzI5MyAzOTEgMzA0IDQxNy40IDMwNCA0NDVsMCAxOS0yMjQgMCAwLTE5YzAtMjcuNiAxMS01NCAzMC41LTczLjVMMTkyIDI4OS45em0wLTY3LjlsLTgxLjUtODEuNUM5MSAxMjEgODAgOTQuNiA4MCA2N2wwLTE5IDIyNCAwIDAgMTljMCAyNy42LTExIDU0LTMwLjUgNzMuNUwxOTIgMjIyLjF6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc0VtcHR5ID0gZmFIb3VyZ2xhc3M7CiAgICBmYUhlYWRwaG9uZXMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiaGVhZHBob25lcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkxMSwgNjI4NjMsICJoZWFkcGhvbmVzLWFsdCIsICJoZWFkcGhvbmVzLXNpbXBsZSJdLCAiZjAyNSIsICJNNDggMjI0YzAtOTcuMiA3OC44LTE3NiAxNzYtMTc2czE3NiA3OC44IDE3NiAxNzZsMCA0NC44Yy0xNC4xLTguMi0zMC41LTEyLjgtNDgtMTIuOGwtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDhsMTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtMTYwQzQ0OCAxMDAuMyAzNDcuNyAwIDIyNCAwUzAgMTAwLjMgMCAyMjRMMCAzODRjMCA1MyA0MyA5NiA5NiA5NmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTI4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwYy0xNy41IDAtMzMuOSA0LjctNDggMTIuOEw0OCAyMjR6bTAgMTI4YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDAgMCAxMjgtMTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0zMnptMzUyIDBsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYgMCAwLTEyOCAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzQWx0ID0gZmFIZWFkcGhvbmVzOwogICAgZmFIZWFkcGhvbmVzU2ltcGxlID0gZmFIZWFkcGhvbmVzOwogICAgZmFGaWxlUG93ZXJwb2ludCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBvd2VycG9pbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjNCIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptODggMjU2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEyOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMjggMGMzNy42IDAgNjgtMzAuNCA2OC02OHMtMzAuNC02OC02OC02OGwtNTIgMHptNTIgODhsLTI4IDAgMC00MCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHoiXQogICAgfTsKICAgIGZhV2luZG93TWF4aW1pemUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1heGltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDcwXSwgImYyZDAiLCAiTTQ4IDIyNGwwIDE2MGMwIDguOCA3LjIgMTYgMTYgMTZsMzg0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTYwLTQxNiAwek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4eiJdCiAgICB9OwogICAgZmFDb21tZW50RG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LWRvdHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxNzIsIDYyMDc1LCAiY29tbWVudGluZyJdLCAiZjRhZCIsICJNMCAyNDBjMCA1NC40IDE5LjMgMTA0LjYgNTEuOSAxNDQuOUwzLjEgNDc0LjNjLTIgMy43LTMuMSA3LjktMy4xIDEyLjIgMCAxNC4xIDExLjQgMjUuNSAyNS41IDI1LjUgNCAwIDcuOC0uNiAxMS41LTIuMUwxNTMuNCA0NjBjMzEuNCAxMi45IDY2LjEgMjAgMTAyLjYgMjAgMTQxLjQgMCAyNTYtMTA3LjUgMjU2LTI0MFMzOTcuNCAwIDI1NiAwIDAgMTA3LjUgMCAyNDB6TTk0IDQwNy45YzkuMy0xNy4xIDcuNC0zOC4xLTQuOC01My4yLTI2LjEtMzIuMy00MS4yLTcxLjktNDEuMi0xMTQuNyAwLTEwMy4yIDkwLjItMTkyIDIwOC0xOTJzMjA4IDg4LjggMjA4IDE5Mi05MC4yIDE5Mi0yMDggMTkyYy0zMC4yIDAtNTguNy01LjktODQuMy0xNi40LTExLjktNC45LTI1LjMtNC44LTM3LjEgLjNMNzYgNDQwLjkgOTQgNDA3Ljl6TTE0NCAyNzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xNDQtMzJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptODAgMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDb21tZW50aW5nID0gZmFDb21tZW50RG90czsKICAgIGZhRmFjZUdyaW5Ub25ndWVXaW5rID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUtd2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MCwgImdyaW4tdG9uZ3VlLXdpbmsiXSwgImY1OGIiLCAiTTM2Ni45IDQzMmMuOC01LjIgMS4xLTEwLjYgMS4xLTE2bDAtNTMuNWMxMC4yLTEyLjYgMTguMy0yNi45IDIzLjgtNDIuNSA0LjEtMTEuNi03LjgtMjEuNC0xOS42LTE3LjgtMzQuOCAxMC42LTc0LjMgMTYuNi0xMTYuMyAxNi42LTQxLjkgMC04MS40LTYtMTE2LjEtMTYuNS0xMS44LTMuNi0yMy43IDYuMS0xOS42IDE3LjggNS41IDE1LjUgMTMuNiAyOS45IDIzLjggNDIuNGwwIDUzLjVjMCA1LjQgLjQgMTAuOCAxLjEgMTYtNTguNC0zNi44LTk3LjEtMTAxLjktOTcuMS0xNzYgMC0xMTQuOSA5My4xLTIwOCAyMDgtMjA4czIwOCA5My4xIDIwOCAyMDhjMCA3NC4xLTM4LjggMTM5LjItOTcuMSAxNzZ6bS0zOC44IDY5LjdDNDM0LjQgNDcwLjYgNTEyIDM3Mi4zIDUxMiAyNTYgNTEyIDExNC42IDM5Ny40IDAgMjU2IDBTMCAxMTQuNiAwIDI1NkMwIDM3Mi4zIDc3LjYgNDcwLjYgMTgzLjkgNTAxLjcgMjAzLjQgNTE4LjEgMjI4LjUgNTI4IDI1NiA1MjhzNTIuNi05LjkgNzIuMS0yNi4zek0zMjAgMzc4LjZsMCAzNy40YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0bDAtMzcuNGMwLTE0LjcgMTEuOS0yNi42IDI2LjYtMjYuNmwyIDBjMTEuMyAwIDIxLjEgNy45IDIzLjYgMTguOSAyLjggMTIuNiAyMC44IDEyLjYgMjMuNiAwIDIuNS0xMS4xIDEyLjMtMTguOSAyMy42LTE4LjlsMiAwYzE0LjcgMCAyNi42IDExLjkgMjYuNiAyNi42ek0xMzIgMjMyYzAtMTEgOS0yMCAyMC0yMGwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwem0yMjguNC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTEyOCAwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhR3JpblRvbmd1ZVdpbmsgPSBmYUZhY2VHcmluVG9uZ3VlV2luazsKICAgIGZhSG91cmdsYXNzSGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJob3VyZ2xhc3MtaGFsZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJob3VyZ2xhc3MtMiJdLCAiZjI1MiIsICJNMCAyNEMwIDEwLjcgMTAuNyAwIDI0IDBMMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDE5YzAgNDAuMy0xNiA3OS00NC41IDEwNy41bC04MS41IDgxLjUgODEuNSA4MS41QzMzNiAzNjYgMzUyIDQwNC43IDM1MiA0NDVsMCAxOSA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTE5YzAtNDAuMyAxNi03OSA0NC41LTEwNy41bDgxLjUtODEuNS04MS41LTgxLjVDNDggMTQ2IDMyIDEwNy4zIDMyIDY3bDAtMTktOCAwQzEwLjcgNDggMCAzNy4zIDAgMjR6TTExMC41IDM3MS41Yy0zLjkgMy45LTcuNSA4LjEtMTAuNyAxMi41bDE4NC40IDBjLTMuMi00LjQtNi44LTguNi0xMC43LTEyLjVsLTgxLjUtODEuNS04MS41IDgxLjV6TTgwLjggNDMyYy0uNSA0LjMtLjggOC42LS44IDEzbDAgMTkgMjI0IDAgMC0xOWMwLTQuNC0uMy04LjctLjgtMTNMODAuOCA0MzJ6TTI1NC4xIDE2MGwtMTI0LjEgMCA2Mi4xIDYyLjEgNjIuMS02Mi4xem0zOS43LTQ4QzMwMC40IDk4LjEgMzA0IDgyLjcgMzA0IDY3bDAtMTktMjI0IDAgMCAxOWMwIDE1LjcgMy42IDMxLjEgMTAuMiA0NWwyMDMuNSAweiJdCiAgICB9OwogICAgZmFIb3VyZ2xhc3MyID0gZmFIb3VyZ2xhc3NIYWxmOwogICAgZmFDcmVkaXRDYXJkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImNyZWRpdC1jYXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc5LCA2MjA4MywgImNyZWRpdC1jYXJkLWFsdCJdLCAiZjA5ZCIsICJNNDQ4IDExMmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMi00MTYgMCAwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzODQgMHptMTYgMTEybDAgMTYwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2MCA0MTYgMHpNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6TTgwIDM0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMTQ0IDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYUNyZWRpdENhcmRBbHQgPSBmYUNyZWRpdENhcmQ7CiAgICBmYUhhbmRTcG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXNwb2NrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDA2XSwgImYyNTkiLCAiTTEzOC4zIDgwLjhjLTkuMi0zMy44IDEwLjUtNjguOCA0NC4zLTc4LjQgMzQtOS42IDY5LjQgMTAuMiA3OSA0NC4yTDI5MS45IDE1My43IDMwNS4xIDg0YzYuNi0zNC43IDQwLjEtNTcuNSA3NC44LTUwLjkgMzEuNCA2IDUzIDMzLjkgNTIgNjQuOSAxMC0yLjYgMjAuOC0yLjggMzEuNS0uMSAzNC4zIDguNiA1NS4xIDQzLjMgNDYuNiA3Ny42TDQ1NC43IDM5Ny4yQzQzNy44IDQ2NC43IDM3Ny4yIDUxMiAzMDcuNiA1MTJsLTMzLjcgMGMtNTYuOSAwLTExMi4yLTE5LTE1Ny4yLTUzLjlsLTkyLTcxLjZjLTI3LjktMjEuNy0zMi45LTYxLjktMTEuMi04OS44czYxLjktMzIuOSA4OS44LTExLjJsMTcgMTMuMi01MS44LTEzMS4yYy0xMy0zMi45IDMuMi03MC4xIDM2LTgzIDExLjEtNC40IDIyLjctNS40IDMzLjctMy43em03Ny4xLTIxLjJjLTIuNC04LjUtMTEuMi0xMy40LTE5LjctMTFzLTEzLjQgMTEuMi0xMSAxOS43bDU0LjggMTgyLjRjMy41IDEyLjMtMy4zIDI1LjItMTUuNCAyOS4zcy0yNS4zLTItMzAtMTMuOUwxNDIuOSAxMzguMWMtMy4yLTguMi0xMi41LTEyLjMtMjAuOC05cy0xMi4zIDEyLjUtOSAyMC44bDczLjMgMTg1LjZjMTIgMzAuMy0yMy43IDU3LTQ5LjQgMzdMNzMuOCAzMjMuNGMtNy01LjQtMTctNC4yLTIyLjUgMi44cy00LjIgMTcgMi44IDIyLjVsOTIgNzEuNmMzNi41IDI4LjQgODEuNCA0My44IDEyNy43IDQzLjhsMzMuNyAwYzQ3LjUgMCA4OS0zMi40IDEwMC41LTc4LjVsNTUuNC0yMjEuNmMyLjEtOC42LTMuMS0xNy4zLTExLjYtMTkuNHMtMTcuMyAzLjEtMTkuNCAxMS42bC0yNiAxMDRjLTIuOSAxMS43LTEzLjQgMTkuOS0yNS41IDE5LjktMTYuNSAwLTI4LjktMTUtMjUuOC0zMS4yTDM4My43IDk5YzEuNy04LjctNC0xNy4xLTEyLjctMTguN1MzNTQgODQuMyAzNTIuMyA5M0wzMjAuNSAyNjBjLTIuMiAxMS42LTEyLjQgMjAtMjQuMiAyMC0xMSAwLTIwLjctNy4zLTIzLjctMTcuOUwyMTUuNCA1OS42eiJdCiAgICB9OwogICAgZmFCZWxsU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiYmVsbC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI3NywgNjE5NDNdLCAiZjFmNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtODcuOC04Ny44YzE3LjUtMy4zIDMwLjgtMTguNyAzMC44LTM3LjEgMC02LjctMS44LTEzLjMtNS4xLTE5TDQ4NSAzMjEuN2MtMTktMzIuNi0yOS02OS42LTI5LTEwNy4zbDAtMTQuNWMwLTg0LjYtNjIuNi0xNTQuNy0xNDQtMTY2LjNsMC05LjdjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA5LjdjLTQyLjIgNi03OS40IDI3LjgtMTA1LjQgNTkuMUw0MS0yNC45ek0xOTIuOCAxMjYuOUMyMTQuNyA5OC40IDI0OS4yIDgwIDI4OCA4MCAzNTQuMyA4MCA0MDggMTMzLjcgNDA4IDIwMGwwIDE0LjVjMCA0Ni4yIDEyLjMgOTEuNSAzNS41IDEzMS40bDEyLjkgMjIuMS0yMi42IDAtMjQxLjEtMjQxLjF6TTEzMi41IDM0NS45YzE5LjUtMzMuNCAzMS4zLTcwLjcgMzQuNi0xMDlsLTQ2LjctNDYuN2MtLjIgMy4zLS4zIDYuNi0uMyA5LjlsMCAxNC41YzAgMzcuNy0xMCA3NC43LTI5IDEwNy4zTDY5LjEgMzU5LjJjLTMuNCA1LjgtNS4xIDEyLjMtNS4xIDE5IDAgMjAuOSAxNi45IDM3LjggMzcuOCAzNy44bDI0NC40IDAtNDgtNDgtMTc4LjYgMCAxMi45LTIyLjF6TTIyMC4xIDQ2NGM5LjkgMjggMzYuNiA0OCA2Ny45IDQ4czU4LTIwIDY3LjktNDhsLTEzNS44IDB6Il0KICAgIH07CiAgICBmYVN0YXIgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAic3RhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzExMDg4LCA2MTQ0Nl0sICJmMDA1IiwgIk0yODguMS0zMmM5IDAgMTcuMyA1LjEgMjEuNCAxMy4xTDM4MyAxMjUuMyA1NDIuOSAxNTAuN2M4LjkgMS40IDE2LjMgNy43IDE5LjEgMTYuM3MuNSAxOC01LjggMjQuNEw0NDEuNyAzMDUuOSA0NjcgNDY1LjhjMS40IDguOS0yLjMgMTcuOS05LjYgMjMuMnMtMTcgNi4xLTI1IDJMMjg4LjEgNDE3LjYgMTQzLjggNDkxYy04IDQuMS0xNy43IDMuMy0yNS0ycy0xMS0xNC4yLTkuNi0yMy4yTDEzNC40IDMwNS45IDIwIDE5MS40Yy02LjQtNi40LTguNi0xNS44LTUuOC0yNC40czEwLjEtMTQuOSAxOS4xLTE2LjNsMTU5LjktMjUuNCA3My42LTE0NC4yYzQuMS04IDEyLjQtMTMuMSAyMS40LTEzLjF6bTAgNzYuOEwyMzAuMyAxNThjLTMuNSA2LjgtMTAgMTEuNi0xNy42IDEyLjhsLTEyNS41IDIwIDg5LjggODkuOWM1LjQgNS40IDcuOSAxMy4xIDYuNyAyMC43bC0xOS44IDEyNS41IDExMy4zLTU3LjZjNi44LTMuNSAxNC45LTMuNSAyMS44IDBsMTEzLjMgNTcuNi0xOS44LTEyNS41Yy0xLjItNy42IDEuMy0xNS4zIDYuNy0yMC43bDg5LjgtODkuOS0xMjUuNS0yMGMtNy42LTEuMi0xNC4xLTYtMTcuNi0xMi44TDI4OC4xIDQ0Ljh6Il0KICAgIH07CiAgICBmYUZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmxhZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk4OCwgNjE3MjVdLCAiZjAyNCIsICJNNDggMjRDNDggMTAuNyAzNy4zIDAgMjQgMFMwIDEwLjcgMCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTAwIDgwLjMtMjAuMWM0MS4xLTEwLjMgODQuNi01LjUgMTIyLjUgMTMuNCA0NC4yIDIyLjEgOTUuNSAyNC44IDE0MS43IDcuNGwzNC43LTEzYzEyLjUtNC43IDIwLjgtMTYuNiAyMC44LTMwbDAtMjc5LjdjMC0yMy0yNC4yLTM4LTQ0LjgtMjcuN2wtOS42IDQuOGMtNDYuMyAyMy4yLTEwMC44IDIzLjItMTQ3LjEgMC0zNS4xLTE3LjYtNzUuNC0yMi0xMTMuNS0xMi41TDQ4IDUyIDQ4IDI0em0wIDc3LjVsOTYuNi0yNC4yYzI3LTYuNyA1NS41LTMuNiA4MC40IDguOCA1NC45IDI3LjQgMTE4LjcgMjkuNyAxNzUgNi44bDAgMjQxLjgtMjQuNCA5LjFjLTMzLjcgMTIuNi03MS4yIDEwLjctMTAzLjQtNS40LTQ4LjItMjQuMS0xMDMuMy0zMC4xLTE1NS42LTE3LjFsLTY4LjYgMTcuMiAwLTIzN3oiXQogICAgfTsKICAgIGZhTGVtb24gPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAibGVtb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MTldLCAiZjA5NCIsICJNMzY4IDgwYy0zLjIgMC02LjIgLjQtOC45IDEuMy0xOS4xIDUuNS00Ni4xIDEwLjctNzQuMyAzLjMtNTcuNC0xNC45LTEyNC42IDcuNC0xNzQuNyA1Ny41UzM3LjcgMjU5LjQgNTIuNiAzMTYuOGM3LjMgMjguMiAyLjIgNTUuMi0zLjMgNzQuMy0uOCAyLjgtMS4zIDUuOC0xLjMgOC45IDAgMTcuNyAxNC4zIDMyIDMyIDMyIDMuMiAwIDYuMi0uNCA4LjktMS4zIDE5LjEtNS41IDQ2LjEtMTAuNyA3NC4zLTMuMyA1Ny40IDE0LjkgMTI0LjYtNy40IDE3NC43LTU3LjVzNzIuNC0xMTcuMyA1Ny41LTE3NC43Yy03LjMtMjguMi0yLjItNTUuMiAzLjMtNzQuMyAuOC0yLjggMS4zLTUuOCAxLjMtOC45IDAtMTcuNy0xNC4zLTMyLTMyLTMyem0wLTQ4YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNy43LTEuMSAxNS4yLTMuMSAyMi4zLTQuNiAxNS44LTcuMSAzMi45LTMgNDguOSAyMC4xIDc3LjYtMTAuOSAxNjEuNS03MCAyMjAuN3MtMTQzLjEgOTAuMi0yMjAuNyA3MGMtMTYtNC4xLTMzLTEuNi00OC45IDMtNy4xIDItMTQuNiAzLjEtMjIuMyAzLjEtNDQuMiAwLTgwLTM1LjgtODAtODAgMC03LjcgMS4xLTE1LjIgMy4xLTIyLjMgNC42LTE1LjggNy4xLTMyLjkgMy00OC45LTIwLjEtNzcuNiAxMC45LTE2MS41IDcwLTIyMC43UzIxOS4zIDE4IDI5Ni44IDM4LjFjMTYgNC4xIDMzIDEuNiA0OC45LTMgNy4xLTIgMTQuNi0zLjEgMjIuMy0zLjF6TTI0Ni43IDE2N2MtNTIgMTUuMi05Ni41IDU5LjctMTExLjcgMTExLjctMy43IDEyLjctMTcuMSAyMC0yOS44IDE2LjNTODUuMiAyNzggODkgMjY1LjNjMTkuOC02Ny43IDc2LjYtMTI0LjUgMTQ0LjMtMTQ0LjMgMTIuNy0zLjcgMjYuMSAzLjYgMjkuOCAxNi4zcy0zLjYgMjYuMS0xNi4zIDI5Ljh6Il0KICAgIH07CiAgICBmYVdpbmRvd1Jlc3RvcmUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAid2luZG93LXJlc3RvcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJkMiIsICJNNTEyIDgwTDIyNCA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTYtNDggMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0bC00OCAwIDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xOTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNjggMjg4bC0zMjAgMCAwIDEyOGMwIDguOCA3LjIgMTYgMTYgMTZsMjg4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4ek02NCAxNjBsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5IZWFydHMgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWhlYXJ0cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyNSwgImdyaW4taGVhcnRzIl0sICJmNTg0IiwgIk00NjQgMjU2YzAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFM0OCAzNzAuOSA0OCAyNTZjMC0zLjUgLjEtNy4xIC4zLTEwLjYtMTQtMTMuOS0yOS43LTMzLjEtMzkuMy01Ni43LTUuOCAyMS40LTguOSA0NC04LjkgNjcuMyAwIDE0MS40IDExNC42IDI1NiAyNTYgMjU2UzUxMiAzOTcuNCA1MTIgMjU2YzAtMjMuMy0zLjEtNDUuOS04LjktNjcuMy05LjYgMjMuNy0yNS40IDQyLjgtMzkuMyA1Ni43IC4yIDMuNSAuMyA3IC4zIDEwLjZ6TTM2OCA1OC45YzExLjctNiAyNC41LTkuNiAzNy43LTEwLjYtNDIuMS0zMC40LTkzLjgtNDguMy0xNDkuNy00OC4zUzE0OC40IDE3LjkgMTA2LjMgNDguM2MxMy4yIDEgMjYgNC42IDM3LjcgMTAuNiAxMy44LTcuMSAyOS4zLTEwLjkgNDUuMS0xMC45bDIuOSAwYzguOSAwIDE3LjYgMS4yIDI1LjggMy41IDEyLjQtMi4zIDI1LjItMy41IDM4LjItMy41czI1LjggMS4yIDM4LjIgMy41YzguMi0yLjMgMTYuOS0zLjUgMjUuOC0zLjVsMi45IDBjMTUuOCAwIDMxLjMgMy44IDQ1LjEgMTAuOXptNC4yIDI0My40Yy0zNC44IDEwLjYtNzQuMyAxNi42LTExNi4zIDE2LjYtNDEuOSAwLTgxLjQtNi0xMTYuMS0xNi41LTExLjgtMy42LTIzLjcgNi4xLTE5LjYgMTcuOCAxOS44IDU1LjkgNzMuMSA5NS45IDEzNS44IDk1LjkgNjIuNyAwIDExNi00MC4xIDEzNS44LTk2IDQuMS0xMS42LTcuOC0yMS40LTE5LjYtMTcuOHpNMzIyLjkgOTZMMzIwIDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMWMtOS41LTkuNS0yMi41LTE0LjktMzYtMTQuOXptLTE4OCAxNC45Yy05LjUtOS41LTIyLjUtMTQuOS0zNi0xNC45TDk2IDk2Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDUzLjQgNjYuOSA5NS43IDg5IDEwOC4yIDQuNCAyLjUgOS42IDIuNSAxNCAwIDIyLjEtMTIuNSA4OS01NC44IDg5LTEwOC4yIDAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yLjkgMGMtMTMuNSAwLTI2LjUgNS40LTM2IDE0LjlsLTkuMSA5LjEtOS4xLTkuMXoiXQogICAgfTsKICAgIGZhR3JpbkhlYXJ0cyA9IGZhRmFjZUdyaW5IZWFydHM7CiAgICBmYUZhY2VLaXNzQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWtpc3MtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNywgImtpc3MtYmVhbSJdLCAiZjU5NyIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yNDAgMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNnptLTY0LTkyYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhS2lzc0JlYW0gPSBmYUZhY2VLaXNzQmVhbTsKICAgIGZhRmlsZVBkZiA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBkZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWMxIiwgIk0yMDggNDhMOTYgNDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM4NGMwIDguOCA3LjIgMTYgMTYgMTZsODAgMCAwIDQ4LTgwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjI5LjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzOTcuMyAxNDEuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgMTQ5LjUtNDggMCAwLTEyOC04OCAwYy0zOS44IDAtNzItMzIuMi03Mi03MmwwLTg4ek0zNDguMSAxNjBMMjU2IDY3LjkgMjU2IDEzNmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2OC4xIDB6TTI0MCAzODBsMzIgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MHMtMjYuOSA2MC02MCA2MGwtMTIgMCAwIDI4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOGMwLTExIDktMjAgMjAtMjB6bTMyIDgwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtMTIgMCAwIDQwIDEyIDB6bTk2LTgwbDMyIDBjMjguNyAwIDUyIDIzLjMgNTIgNTJsMCA2NGMwIDI4LjctMjMuMyA1Mi01MiA1MmwtMzIgMGMtMTEgMC0yMC05LTIwLTIwbDAtMTI4YzAtMTEgOS0yMCAyMC0yMHptMzIgMTI4YzYuNiAwIDEyLTUuNCAxMi0xMmwwLTY0YzAtNi42LTUuNC0xMi0xMi0xMmwtMTIgMCAwIDg4IDEyIDB6bTc2LTEwOGMwLTExIDktMjAgMjAtMjBsNDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTI4IDAgMCAyNCAyOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtMjggMCAwIDQ0YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTEyOHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaWRlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi13aWRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE1LCAiZ3Jpbi1hbHQiXSwgImY1ODEiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMjI0IDE5MmMwIDM1LjMtMTQuMyA2NC0zMiA2NHMtMzItMjguNy0zMi02NCAxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjR6bTk2IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhR3JpbkFsdCA9IGZhRmFjZUdyaW5XaWRlOwogICAgZmFGYWNlTGF1Z2hTcXVpbnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaC1zcXVpbnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtc3F1aW50Il0sICJmNTliIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTEyNS4yIDc2LjRjLTYuNS0xNCA1LTI4LjQgMjAuNC0yOC40bDIyMC44IDBjMTUuNCAwIDI2LjggMTQuNCAyMC40IDI4LjQtMjIuOCA0OS40LTcyLjggODMuNi0xMzAuOCA4My42cy0xMDcuOS0zNC4yLTEzMC44LTgzLjZ6bS0yLjYtMTczLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAyMDggMTI1LjggMTgwLjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDIwOCAzODYuMiAyMzUuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhTGF1Z2hTcXVpbnQgPSBmYUZhY2VMYXVnaFNxdWludDsKICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1raXNzLXdpbmstaGVhcnQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg1MzYsICJraXNzLXdpbmstaGVhcnQiXSwgImY1OTgiLCAiTTM4NiA0MzkuNWMtMjkuMiAxNS42LTYyLjUgMjQuNS05OCAyNC41LTExNC45IDAtMjA4LTkzLjEtMjA4LTIwOFMxNzMuMiA0OCAyODggNDhjMTEzLjIgMCAyMDUuMiA5MC40IDIwNy45IDIwMi45IDE0LjMgMS41IDI4LjYgNiA0MS45IDEzLjcgMiAxLjIgNCAyLjQgNS45IDMuNyAuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNS44LTEyLjktMTItMjguNS0xNy4yLTQ1LjJ6TTI1NiAyODhjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtMTIuMy00LjYtMjMuNS0xMi4yLTMyIDcuNi04LjUgMTIuMi0xOS43IDEyLjItMzIgMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLTQ4LTQ4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTUyLTQ0bDE2IDBjMTEgMCAyMCA5IDIwIDIwczkgMjAgMjAgMjAgMjAtOSAyMC0yMGMwLTMzLjEtMjYuOS02MC02MC02MGwtMTYgMGMtMzMuMSAwLTYwIDI2LjktNjAgNjAgMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjAgOS0yMCAyMC0yMHpNNTQyLjggMzUwYy0yLjItMTguMy0xMi45LTM0LjYtMjguOS00My44LTI4LjEtMTYuMi02My45LTYuNi04MC4xIDIxLjVsLTIuNyA0LjZjLTI0LjUgNDIuNSA3LjkgMTE3LjkgMjQuNCAxNTAuOCA1LjEgMTAuMSAxNS41IDE2LjEgMjYuOCAxNS41IDM2LjctMi4yIDExOC4yLTExLjcgMTQyLjgtNTQuMmwyLjctNC42YzE2LjItMjguMSA2LjYtNjMuOS0yMS41LTgwLjEtMTYtOS4yLTM1LjQtMTAuNC01Mi40LTMuMWwtOS44IDQuMi0xLjMtMTAuNnoiXQogICAgfTsKICAgIGZhS2lzc1dpbmtIZWFydCA9IGZhRmFjZUtpc3NXaW5rSGVhcnQ7CiAgICBmYUNvcHkgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY29weSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGM1IiwgIk0zODQgMzM2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjU2YzAtOC44IDcuMi0xNiAxNi0xNmwxMzMuNSAwYzQuMiAwIDguMyAxLjcgMTEuMyA0LjdsNTguNSA1OC41YzMgMyA0LjcgNy4xIDQuNyAxMS4zTDQwMCAzMjBjMCA4LjgtNy4yIDE2LTE2IDE2ek0xOTIgMzg0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzcwLjcgMTguN0MzNTguNyA2LjcgMzQyLjUgMCAzMjUuNSAwTDE5MiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTQ4IDAgMCAxNmMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDAgMC00OC0xNiAweiJdCiAgICB9OwogICAgZmFDaGVzc0tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCAiZjQzZiIsICJNMjI0LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDAgNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMCAwIDgwIDE2MS44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzU3LjIgMzc0LjUgNDA1LjYgNDM1YzYuNyA4LjQgMTAuNCAxOC44IDEwLjQgMjkuNiAwIDI2LjItMjEuMiA0Ny40LTQ3LjQgNDcuNEw3OS40IDUxMmMtMjYuMiAwLTQ3LjQtMjEuMi00Ny40LTQ3LjQgMC0xMC44IDMuNy0yMS4yIDEwLjQtMjkuNkw5MC44IDM3NC41IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTYxLjggMCAwLTgwLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0ek0xMzEuOCA0MDBsLTMuNiA0LjQtNDcuNiA1OS42IDI4Ni42IDAtNDcuNi01OS42LTMuNi00LjQtMTg0LjMgMHptMS4xLTQ4LjVsLjMgLjUgMTgxLjYgMCAuMy0uNSA3OC4zLTE0My41LTMzOC43IDAgNzguMyAxNDMuNXoiXQogICAgfTsKICAgIGZhU3F1YXJlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxODQ2LCAicGx1cy1zcXVhcmUiXSwgImYwZmUiLCAiTTY0IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMjBjMCA4LjggNy4yIDE2IDE2IDE2bDMyMCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyMGMwLTguOC03LjItMTYtMTYtMTZMNjQgODB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0yMDAgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c1NxdWFyZSA9IGZhU3F1YXJlUGx1czsKICAgIGZhRmlsZUNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jb2RlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzkiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTE3MC4yIDI5NS42YzguNi0xMC4xIDcuNS0yNS4yLTIuNi0zMy44cy0yNS4yLTcuNS0zMy44IDIuNmwtNDggNTZjLTcuNyA5LTcuNyAyMi4yIDAgMzEuMmw0OCA1NmM4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44bC0zNC42LTQwLjQgMzQuNi00MC40em04MC0zMS4yYy04LjYtMTAuMS0yMy44LTExLjItMzMuOC0yLjZzLTExLjIgMjMuOC0yLjYgMzMuOGwzNC42IDQwLjQtMzQuNiA0MC40Yy04LjYgMTAuMS03LjUgMjUuMiAyLjYgMzMuOHMyNS4yIDcuNSAzMy44LTIuNmw0OC01NmM3LjctOSA3LjctMjIuMiAwLTMxLjJsLTQ4LTU2eiJdCiAgICB9OwogICAgZmFGYWNlR3JpbldpbmsgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ3Jpbi13aW5rIl0sICJmNThjIiwgIk00NjQgMjU2YTIwOCAyMDggMCAxIDAgLTQxNiAwIDIwOCAyMDggMCAxIDAgNDE2IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTM3Mi4yIDQ2LjNjMTEuOC0zLjYgMjMuNyA2LjEgMTkuNiAxNy44LTE5LjggNTUuOS03My4xIDk2LTEzNS44IDk2LTYyLjcgMC0xMTYtNDAtMTM1LjgtOTUuOS00LjEtMTEuNiA3LjgtMjEuNCAxOS42LTE3LjggMzQuNyAxMC42IDc0LjIgMTYuNSAxMTYuMSAxNi41IDQyIDAgODEuNS02IDExNi4zLTE2LjZ6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhR3JpbldpbmsgPSBmYUZhY2VHcmluV2luazsKICAgIGZhTW9uZXlCaWxsMSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC1hbHQiXSwgImYzZDEiLCAiTTExMiAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMjg4IDBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMC0xNjBjLTM1LjMgMC02NC0yOC43LTY0LTY0bC0yODggMHpNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptMjU2IDE2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHptLTE2IDQ0Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxBbHQgPSBmYU1vbmV5QmlsbDE7CiAgICBmYUV5ZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImV5ZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDcwIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTE3Ni45IDExMS4xYzMyLjEtMTguOSA2OS4yLTMxLjEgMTExLjEtMzEuMSA2NS4yIDAgMTE4LjggMjkuNiAxNTkuOSA2Ny43IDM4LjUgMzUuNyA2NS4xIDc4LjMgNzguNiAxMDguMy0xMy42IDMwLTQwLjIgNzIuNS03OC42IDEwOC4zLTMuMSAyLjgtNi4yIDUuNi05LjQgOC40TDM5My44IDMyOGMxNC0yMC41IDIyLjItNDUuMyAyMi4yLTcyIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4LTI2LjcgMC01MS41IDguMi03MiAyMi4ybC0zOS4xLTM5LjF6bTE4MiAxODJsLTEwOC0xMDhjMTEuMS01LjggMjMuNy05LjEgMzcuMS05LjEgNDQuMiAwIDgwIDM1LjggODAgODAgMCAxMy40LTMuMyAyNi05LjEgMzcuMXpNMTAzLjQgMTczLjJsLTM0LTM0Yy0zMi42IDM2LjgtNTUgNzUuOC02Ni45IDEwNC41LTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNiAzNy4zIDAgNzEuMi03LjkgMTAxLjUtMjAuNkwzNTIuMiA0MjJjLTIwIDYuNC00MS40IDEwLTY0LjIgMTAtNjUuMiAwLTExOC44LTI5LjYtMTU5LjktNjcuNy0zOC41LTM1LjctNjUuMS03OC4zLTc4LjYtMTA4LjMgMTAuNC0yMy4xIDI4LjYtNTMuNiA1NC04Mi44eiJdCiAgICB9OwogICAgZmFGaWxlV29yZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXdvcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjFjMiIsICJNNjQgNDhsMTEyIDAgMCA4OGMwIDM5LjggMzIuMiA3MiA3MiA3Mmw4OCAwIDAgMjQwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA2NGMwLTguOCA3LjItMTYgMTYtMTZ6TTIyNCA2Ny45bDkyLjEgOTIuMS02OC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNjguMXpNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNjEuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNDIuNyAxOC43QzIzMC43IDYuNyAyMTQuNSAwIDE5Ny41IDBMNjQgMHptNzEuMyAyNzQuMmMtMy4yLTEyLjktMTYuMi0yMC43LTI5LjEtMTcuNVM4NS41IDI3MyA4OC43IDI4NS44bDMyIDEyOGMyLjUgMTAuMiAxMS40IDE3LjUgMjEuOSAxOC4xczIwLjEtNS43IDIzLjgtMTUuNWwyNS41LTY4LjEgMjUuNSA2OC4xYzMuNyA5LjggMTMuMyAxNi4xIDIzLjggMTUuNXMxOS40LTcuOSAyMS45LTE4LjFsMzItMTI4YzMuMi0xMi45LTQuNi0yNS45LTE3LjUtMjkuMXMtMjUuOSA0LjYtMjkuMSAxNy41bC0xMy4zIDUzLjItMjAuOS01NS44QzIxMSAyNjIuMiAyMDIgMjU2IDE5MiAyNTZzLTE5IDYuMi0yMi41IDE1LjZsLTIwLjkgNTUuOC0xMy4zLTUzLjJ6Il0KICAgIH07CiAgICBmYUZhY2VBbmdyeSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWFuZ3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ0LCAiYW5ncnkiXSwgImY1NTYiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC0xNDRjMjQuMSAwIDQ1LjQgMTEuOCA1OC41IDMwIDcuNyAxMC44IDIyLjcgMTMuMiAzMy41IDUuNXMxMy4yLTIyLjcgNS41LTMzLjVjLTIxLjctMzAuMi01Ny4zLTUwLTk3LjUtNTBzLTc1LjcgMTkuOC05Ny41IDUwYy03LjcgMTAuOC01LjMgMjUuOCA1LjUgMzMuNXMyNS44IDUuMyAzMy41LTUuNWMxMy4xLTE4LjIgMzQuNC0zMCA1OC41LTMwem0tODAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0uMyA5LjcgMy4yYzEwLjUgMy41IDIxLjgtMi4yIDI1LjMtMTIuNnMtMi4yLTIxLjgtMTIuNi0yNS4zbC05Ni0zMmMtMTAuNS0zLjUtMjEuOCAyLjItMjUuMyAxMi42czIuMiAyMS44IDEyLjYgMjUuM2wyOC45IDkuNmMtNC4xIDUuNC02LjYgMTIuMS02LjYgMTkuNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnptMTkyLTMyYzAtNy4zLTIuNC0xNC02LjYtMTkuNGwyOC45LTkuNmMxMC41LTMuNSAxNi4xLTE0LjggMTIuNi0yNS4zcy0xNC44LTE2LjEtMjUuMy0xMi42bC05NiAzMmMtMTAuNSAzLjUtMTYuMSAxNC44LTEyLjYgMjUuM3MxNC44IDE2LjEgMjUuMyAxMi42bDkuNy0zLjIgMCAuM2MwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFBbmdyeSA9IGZhRmFjZUFuZ3J5OwogICAgZmFDaGVzc0tuaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1rbmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODIyXSwgImY0NDEiLCAiTTIzMi0zMmMxMTAuNSAwIDIwMCA4OS41IDIwMCAyMDBsMCAxMjcuN2MwIDE4LjktNi4xIDM3LjEtMTcuMiA1Mi4ybC01LjEgNi4yLTM2LjMgNDAuNyAzMi4xIDQwLjJjNi43IDguNCAxMC40IDE4LjggMTAuNCAyOS42bC0uMiA0LjhjLTIuNCAyMy45LTIyLjYgNDIuNS00Ny4xIDQyLjVsLTI4OS4yIDAtNC44LS4yYy0yMy45LTIuNC00Mi41LTIyLjYtNDIuNS00Ny4xIDAtMTAuOCAzLjctMjEuMiAxMC40LTI5LjZsMzcuNi00NyAwLTI0LjNjMC0yNC4zIDEwLjEtNDcuNiAyNy44LTY0LjJsNjMuNS01OS41LTE3LjQgMC0uMiAuMmMtMjAuMyAyMC4zLTQ5LjYgMjguMi03Ny4xIDIxLjFsLTUuNS0xLjZjLTMwLjktMTAuMy01Mi4zLTM4LTU0LjktNzAuMWwtLjItNi40IDAtMS40YzAtMTkuNyA3LjEtMzguOCAxOS45LTUzLjhsNzYuMS04OC44IDAtNDcuMSAuMS0yLjVDMTEzLjQtMjIuNiAxMjMuNi0zMiAxMzYtMzJsOTYgMHpNODAuNyA0NjRsMjg2LjYgMC0zOC40LTQ4LTIwOS45IDAtMzguNCA0OHpNMTYwIDQ4YzAgNS43LTIuMSAxMS4zLTUuOCAxNS42TDcyLjMgMTU5LjFDNjcgMTY1LjQgNjQgMTczLjQgNjQgMTgxLjdsMCAxLjQgLjQgNS4yYzEuOSAxMS45IDEwLjMgMjEuOSAyMS45IDI1LjhsNC41IDEuMWMxMC41IDEuOSAyMS4zLTEuNCAyOS05bDcuMi03LjIgMy43LTNjMy45LTIuNiA4LjUtNCAxMy4zLTRsODggMGM5LjggMCAxOC43IDYgMjIuMyAxNS4yczEuMyAxOS42LTUuOSAyNi4zbC0xMDcuOCAxMDFjLTguMSA3LjYtMTIuNyAxOC4xLTEyLjcgMjkuMmwwIDQuMyAyMDUuMiAwIDQwLjctNDUuOCAyLjMtMi44YzUuMS02LjggNy44LTE1LjIgNy44LTIzLjdMMzg0IDE2OGMwLTgzLjktNjguMS0xNTItMTUyLTE1MmwtNzIgMCAwIDMyem0zMiA3MmEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6Il0KICAgIH07CiAgICBmYUZhY2VHcmluQmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgImdyaW4tYmVhbSJdLCAiZjU4MiIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zNzIuMiA0Ni4zYzExLjgtMy42IDIzLjcgNi4xIDE5LjYgMTcuOC0xOS44IDU1LjktNzMuMSA5Ni0xMzUuOCA5Ni02Mi43IDAtMTE2LTQwLTEzNS44LTk1LjktNC4xLTExLjYgNy44LTIxLjQgMTkuNi0xNy44IDM0LjcgMTAuNiA3NC4yIDE2LjUgMTE2LjEgMTYuNSA0MiAwIDgxLjUtNiAxMTYuMy0xNi42ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW0gPSBmYUZhY2VHcmluQmVhbTsKICAgIGZhSGFuZFBlYWNlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcGVhY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk2XSwgImYyNWIiLCAiTTIxOSAxLjRjLTM1LjItMy43LTY2LjYgMjEuOC03MC4zIDU3bC02LjQgNjAuNi0xNy40LTQ5LjRDMTEzLjIgMzYuMyA3Ni42IDE4LjggNDMuMyAzMC41Uy03LjYgNzguOCA0LjEgMTEyLjFMNTYuOSAyNjIuMkM0MS43IDI3Ni43IDMyLjIgMjk3LjMgMzIuMiAzMjBsMCAyNGMwIDkyLjggNzUuMiAxNjggMTY4IDE2OGw0OCAwYzkyLjggMCAxNjgtNzUuMiAxNjgtMTY4bDAtMTIwYzAtMzUuMy0yOC43LTY0LTY0LTY0LTcuOSAwLTE1LjQgMS40LTIyLjQgNC0xMC40LTIxLjMtMzIuMy0zNi01Ny42LTM2LS43IDAtMS41IDAtMi4yIDBsNS45LTU2LjNjMy43LTM1LjItMjEuOC02Ni42LTU3LTcwLjN6bS0uMiAxNTUuNGMtNi42IDEwLjEtMTAuNSAyMi4yLTEwLjUgMzUuMmwwIDQ4YzAgLjcgMCAxLjQgMCAyLTUuMS0xLjMtMTAuNS0yLTE2LTJsLTcuNCAwLTUuNC0xNS4zIDE3LTE2MS4zYy45LTguOCA4LjgtMTUuMiAxNy42LTE0LjJzMTUuMiA4LjggMTQuMiAxNy42bC05LjUgOTAuMXpNNzkuNiA4NS42bDU0LjMgMTU0LjQtMjEuNyAwYy00IDAtOCAuMy0xMS45IC45TDQ5LjQgOTYuMmMtMi45LTguMyAxLjUtMTcuNSA5LjgtMjAuNHMxNy41IDEuNSAyMC40IDkuOHpNMjU2LjIgMTkyYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4em0zOC40IDEwOGMxMC40IDIxLjMgMzIuMyAzNiA1Ny42IDM2IDUuNSAwIDEwLjktLjcgMTYtMmwwIDEwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC00OCAwYy02Ni4zIDAtMTIwLTUzLjctMTIwLTEyMGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDgwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMGMzNS4zIDAgNjQtMjguNyA2NC02NCAwLS43IDAtMS40IDAtMiA1LjEgMS4zIDEwLjUgMiAxNiAyIDcuOSAwIDE1LjQtMS40IDIyLjQtNHptNzMuNi0yOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTQ4YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA0OHoiXQogICAgfTsKICAgIGZhQ29tcGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgImYxNGUiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzA2LjcgNjkuMUwxNjIuNCAzODAuNmMtMTkuNCA3LjUtMzguNS0xMS42LTMxLTMxbDU1LjUtMTQ0LjNjMy4zLTguNSA5LjktMTUuMSAxOC40LTE4LjRsMTQ0LjMtNTUuNWMxOS40LTcuNSAzOC41IDExLjYgMzEgMzFMMzI1LjEgMzA2LjdjLTMuMyA4LjUtOS45IDE1LjEtMTguNCAxOC40ek0yODggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sICJmMGM4IiwgIk0zODQgODBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzIwYzAgOC44LTcuMiAxNi0xNiAxNkw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNkw0OCA5NmMwLTguOCA3LjItMTYgMTYtMTZsMzIwIDB6TTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3JpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxMiwgImdyaW4iXSwgImY1ODAiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMzcyLjIgNDYuM2MxMS44LTMuNiAyMy43IDYuMSAxOS42IDE3LjgtMTkuOCA1NS45LTczLjEgOTYtMTM1LjggOTYtNjIuNyAwLTExNi00MC0xMzUuOC05NS45LTQuMS0xMS42IDcuOC0yMS40IDE5LjYtMTcuOCAzNC43IDEwLjYgNzQuMiAxNi41IDExNi4xIDE2LjUgNDIgMCA4MS41LTYgMTE2LjMtMTYuNnpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmluID0gZmFGYWNlR3JpbjsKICAgIGZhRmFjZVNtaWxlID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NzgsICJzbWlsZSJdLCAiZjExOCIsICJNNDY0IDI1NmEyMDggMjA4IDAgMSAwIC00MTYgMCAyMDggMjA4IDAgMSAwIDQxNiAwek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0xNzcuMyA2My40QzE5Mi4zIDMzNSAyMTguNCAzNTIgMjU2IDM1MnM2My43LTE3IDc4LjctMzIuNmM5LjItOS42IDI0LjQtOS45IDMzLjktLjdzOS45IDI0LjQgLjcgMzMuOWMtMjIuMSAyMy02MCA0Ny40LTExMy4zIDQ3LjRzLTkxLjItMjQuNC0xMTMuMy00Ny40Yy05LjItOS42LTguOS0yNC44IC43LTMzLjlzMjQuOC04LjkgMzMuOSAuN3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTbWlsZSA9IGZhRmFjZVNtaWxlOwogICAgZmFGYWNlU21pbGVCZWFtID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgInNtaWxlLWJlYW0iXSwgImY1YjgiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTc3LjMgNjMuNEMxOTIuMyAzMzUgMjE4LjQgMzUyIDI1NiAzNTJzNjMuNy0xNyA3OC43LTMyLjZjOS4yLTkuNiAyNC40LTkuOSAzMy45LS43czkuOSAyNC40IC43IDMzLjljLTIyLjEgMjMtNjAgNDcuNC0xMTMuMyA0Ny40cy05MS4yLTI0LjQtMTEzLjMtNDcuNGMtOS4yLTkuNi04LjktMjQuOCAuNy0zMy45czI0LjgtOC45IDMzLjkgLjd6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFTbWlsZUJlYW0gPSBmYUZhY2VTbWlsZUJlYW07CiAgICBmYUZvbGRlckNsb3NlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItY2xvc2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxODUiLCAiTTQ0OCA0MDBMNjQgNDAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNDQgNDE2IDAgMCAxNDRjMCA4LjgtNy4yIDE2LTE2IDE2em0xNi0yMDhsLTQxNiAwIDAtOTZjMC04LjggNy4yLTE2IDE2LTE2bDEzOC43IDBjMy41IDAgNi44IDEuMSA5LjYgMy4yTDI1MC43IDExMmMxMy44IDEwLjQgMzAuNyAxNiA0OCAxNkw0NDggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDQ4ek02NCA0NDhsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjk4LjcgODBjLTYuOSAwLTEzLjctMi4yLTE5LjItNi40TDI0MS4xIDQ0LjhDMjMwIDM2LjUgMjE2LjUgMzIgMjAyLjcgMzJMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhS2V5Ym9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAia2V5Ym9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ZTNdLCAiZjExYyIsICJNNjQgMTEyYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI1NmMwLTguOC03LjItMTYtMTYtMTZMNjQgMTEyek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek0xNzYgMzIwbDIyNCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMjI0IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptLTcyLTcyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6bTY0IDk2YzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZ6bTE2LTk2bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUZhY2VSb2xsaW5nRXllcyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXJvbGxpbmctZXllcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU4MCwgIm1laC1yb2xsaW5nLWV5ZXMiXSwgImY1YTUiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDM3NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek0xNjAgMjY0Yy0yMi4xIDAtNDAtMTcuOS00MC00MCAwLTkuNSAzLjMtMTguMSA4LjgtMjUgMy4yIDE0LjMgMTYgMjUgMzEuMiAyNXMyOC0xMC43IDMxLjItMjVjNS41IDYuOCA4LjggMTUuNSA4LjggMjUgMCAyMi4xLTE3LjkgNDAtNDAgNDB6bTAgNDBhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTE5Mi00MGMtMjIuMSAwLTQwLTE3LjktNDAtNDAgMC05LjUgMy4zLTE4LjEgOC44LTI1IDMuMiAxNC4zIDE2IDI1IDMxLjIgMjVzMjgtMTAuNyAzMS4yLTI1YzUuNSA2LjggOC44IDE1LjUgOC44IDI1IDAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDQwYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYweiJdCiAgICB9OwogICAgZmFNZWhSb2xsaW5nRXllcyA9IGZhRmFjZVJvbGxpbmdFeWVzOwogICAgZmFGYWNlR3JpbWFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW1hY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTYsICJncmltYWNlIl0sICJmNTdmIiwgIk0yNTYgNDhhMjA4IDIwOCAwIDEgMCAwIDQxNiAyMDggMjA4IDAgMSAwIDAtNDE2ek01MTIgMjU2YTI1NiAyNTYgMCAxIDEgLTUxMiAwIDI1NiAyNTYgMCAxIDEgNTEyIDB6TTE1MiAzNTJjMCAxMS45IDguNiAyMS44IDIwIDIzLjdsMC00Ny4zYy0xMS40IDEuOS0yMCAxMS44LTIwIDIzLjd6bTg0IDI0bDAtNDgtMjQgMCAwIDQ4IDI0IDB6bTY0IDBsMC00OC0yNCAwIDAgNDggMjQgMHptNDAtLjNjMTEuNC0xLjkgMjAtMTEuOCAyMC0yMy43cy04LjYtMjEuOC0yMC0yMy43bDAgNDcuM3pNMTc2IDI4OGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTYwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6bTAtMTEyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUdyaW1hY2UgPSBmYUZhY2VHcmltYWNlOwogICAgZmFDaXJjbGVEb3QgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI4MCwgImRvdC1jaXJjbGUiXSwgImYxOTIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTQ2NGEyMDggMjA4IDAgMSAwIDAgNDE2IDIwOCAyMDggMCAxIDAgMC00MTZ6bTAgMzA0YTk2IDk2IDAgMSAxIDAtMTkyIDk2IDk2IDAgMSAxIDAgMTkyeiJdCiAgICB9OwogICAgZmFEb3RDaXJjbGUgPSBmYUNpcmNsZURvdDsKICAgIGZhT2JqZWN0R3JvdXAgPSB7CiAgICAgIHByZWZpeDogImZhciIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LWdyb3VwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYyNDciLCAiTTQwIDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQ4IDU5LjNjMTYtNi41IDI4LjktMTkuMyAzNS4zLTM1LjNsMzI5LjMgMGM2LjUgMTYgMTkuMyAyOC45IDM1LjMgMzUuM2wwIDI2NS4zYy0xNiA2LjUtMjguOSAxOS4zLTM1LjMgMzUuM2wtMzI5LjMgMGMtNi41LTE2LTE5LjMtMjguOS0zNS4zLTM1LjNsMC0yNjUuM3pNNTEyIDBjLTI2LjkgMC00OS45IDE2LjUtNTkuMyA0MEwxMjMuMyA0MEMxMTMuOSAxNi41IDkwLjkgMCA2NCAwIDI4LjcgMCAwIDI4LjcgMCA2NCAwIDkwLjkgMTYuNSAxMTMuOSA0MCAxMjMuM2wwIDI2NS4zYy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjYuOSAwIDQ5LjktMTYuNSA1OS4zLTQwbDMyOS4zIDBjOS41IDIzLjUgMzIuNSA0MCA1OS4zIDQwIDM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMjYuOS0xNi41LTQ5LjktNDAtNTkuM2wwLTI2NS4zYzIzLjUtOS41IDQwLTMyLjUgNDAtNTkuMyAwLTM1LjMtMjguNy02NC02NC02NHpNNDg4IDY0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTY0IDQyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQyNCAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0xOTIgMTc2bDg4IDAgMCA1Ni04OCAwIDAtNTZ6bS04LTQwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDcyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTEwNCAwem03MiAxODRsMCAyNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTcyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0yNCAwYzAgMTQuNi0zLjkgMjguMi0xMC43IDQwbDI2LjcgMCAwIDU2LTg4IDAgMC0xNi40Yy0yLjYgLjMtNS4zIC40LTggLjRsLTMyIDB6Il0KICAgIH07CiAgICBmYUZhY2VGbHVzaGVkID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtZmx1c2hlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU2MywgImZsdXNoZWQiXSwgImY1NzkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMSAtNDE2IDAgMjA4IDIwOCAwIDEgMSA0MTYgMHpNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0xNjAgMjQ4YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjE2LTI0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTE5MiAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTI4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEyOCAwek0xNjAgMTc2YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnptMCAxMjhhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTE0NC04MGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0xMjggMGE4MCA4MCAwIDEgMCAtMTYwIDAgODAgODAgMCAxIDAgMTYwIDB6Il0KICAgIH07CiAgICBmYUZsdXNoZWQgPSBmYUZhY2VGbHVzaGVkOwogICAgZmFTdGFySGFsZlN0cm9rZSA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWhhbGYtc3Ryb2tlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0YXItaGFsZi1hbHQiXSwgImY1YzAiLCAiTTMwOS41LTE4LjljLTQuMS04LTEyLjQtMTMuMS0yMS40LTEzLjFzLTE3LjMgNS4xLTIxLjQgMTMuMUwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI4OC4xIDQxNy42IDQzMi40IDQ5MWM4IDQuMSAxNy43IDMuMyAyNS0yczExLTE0LjIgOS42LTIzLjJMNDQxLjcgMzA1LjkgNTU2LjEgMTkxLjRjNi40LTYuNCA4LjYtMTUuOCA1LjgtMjQuNHMtMTAuMS0xNC45LTE5LjEtMTYuM0wzODMgMTI1LjMgMzA5LjUtMTguOXpNMjY0LjEgOTEuOGwwIDI4NC4xLTEwMC4xIDUwLjkgMTkuOC0xMjUuNWMxLjItNy42LTEuMy0xNS4zLTYuNy0yMC43bC04OS44LTg5LjkgMTI1LjUtMjBjNy42LTEuMiAxNC4xLTYgMTcuNi0xMi44bDMzLjgtNjYuMnptNDggMjg0LjFsMC0yODQuMSAzMy44IDY2LjJjMy41IDYuOCAxMCAxMS42IDE3LjYgMTIuOGwxMjUuNSAyMC04OS44IDg5LjljLTUuNCA1LjQtNy45IDEzLjEtNi43IDIwLjdsMTkuOCAxMjUuNS0xMDAuMS01MC45eiJdCiAgICB9OwogICAgZmFTdGFySGFsZkFsdCA9IGZhU3RhckhhbGZTdHJva2U7CiAgICBmYUZpbGVWaWRlbyA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXZpZGVvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzgiLCAiTTY0IDQ4bDExMiAwIDAgODhjMCAzOS44IDMyLjIgNzIgNzIgNzJsODggMCAwIDI0MGMwIDguOC03LjIgMTYtMTYgMTZMNjQgNDY0Yy04LjggMC0xNi03LjItMTYtMTZMNDggNjRjMC04LjggNy4yLTE2IDE2LTE2ek0yMjQgNjcuOWw5Mi4xIDkyLjEtNjguMSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTY4LjF6TTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjYxLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjQyLjcgMTguN0MyMzAuNyA2LjcgMjE0LjUgMCAxOTcuNSAwTDY0IDB6TTgwIDI4OGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yNCAzNSAzNWMzLjIgMy4yIDcuNSA1IDEyIDUgOS40IDAgMTctNy42IDE3LTE3bDAtOTQuMWMwLTkuNC03LjYtMTctMTctMTctNC41IDAtOC44IDEuOC0xMiA1bC0zNSAzNSAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhRmFjZUxhdWdoID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2giXSwgImY1OTkiLCAiTTQ2NCAyNTZhMjA4IDIwOCAwIDEgMCAtNDE2IDAgMjA4IDIwOCAwIDEgMCA0MTYgMHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTE4LjMgNTguMmMtNC4yLTEzLjcgNy4xLTI2LjIgMjEuNC0yNi4ybDIzMi42IDBjMTQuMyAwIDI1LjYgMTIuNSAyMS40IDI2LjItMTggNTguOS03Mi45IDEwMS44LTEzNy43IDEwMS44UzEzNi4zIDM3My4xIDExOC4zIDMxNC4yek0xNDQgMTkyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE5Mi0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxhdWdoID0gZmFGYWNlTGF1Z2g7CiAgICBmYUhhbmRQb2ludGVyID0gewogICAgICBwcmVmaXg6ICJmYXIiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjVhIiwgIk0xNjAgNjRjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDEzNmMwIDEwLjMgNi42IDE5LjUgMTYuNCAyMi44czIwLjYtLjEgMjYuOC04LjNjMy0zLjkgNy42LTYuNCAxMi44LTYuNCA4LjggMCAxNiA3LjIgMTYgMTYgMCAxMC4zIDYuNiAxOS41IDE2LjQgMjIuOHMyMC42LS4xIDI2LjgtOC4zYzMtMy45IDcuNi02LjQgMTIuOC02LjQgNy44IDAgMTQuMyA1LjYgMTUuNyAxMyAxLjYgOC4yIDcuMyAxNS4xIDE1LjEgMThzMTYuNyAxLjYgMjMuMy0zLjZjMi43LTIuMSA2LjEtMy40IDkuOS0zLjQgOC44IDAgMTYgNy4yIDE2IDE2bDAgMTIwYzAgMzkuOC0zMi4yIDcyLTcyIDcybC0xMTYuNiAwYy0zNy40IDAtNzIuNC0xOC43LTkzLjItNDkuOUw1MC43IDMxMi45Yy00LjktNy40LTIuOS0xNy4zIDQuNC0yMi4yczE3LjMtMi45IDIyLjIgNC40TDExNiAzNTMuMmM1LjkgOC44IDE2LjggMTIuNyAyNi45IDkuN3MxNy0xMi40IDE3LTIzTDE2MCA2NHpNMTc2IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMTk3LjdDOTEuMiAyMzggNTUuNSAyMzIuOCAyOC41IDI1MC43LS45IDI3MC40LTguOSAzMTAuMSAxMC44IDMzOS41TDc4LjMgNDQwLjhjMjkuNyA0NC41IDc5LjYgNzEuMiAxMzMuMSA3MS4yTDMyOCA1MTJjNjYuMyAwIDEyMC01My43IDEyMC0xMjBsMC0xMjBjMC0zNS4zLTI4LjctNjQtNjQtNjQtNC41IDAtOC44IC41LTEzIDEuMy0xMS43LTE1LjQtMzAuMi0yNS4zLTUxLTI1LjMtNi45IDAtMTMuNSAxLjEtMTkuNyAzLjEtMTEuNi0xNi40LTMwLjctMjcuMS01Mi4zLTI3LjEtMi43IDAtNS40IC4yLTggLjVMMjQwIDY0YzAtMzUuMy0yOC43LTY0LTY0LTY0em00OCAzMDRjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6bTQ4LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZjMC04LjgtNy4yLTE2LTE2LTE2em04MCAxNmMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05NnoiXQogICAgfTsKICAgIGZhUmVnaXN0ZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFyIiwKICAgICAgaWNvbk5hbWU6ICJyZWdpc3RlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTc0XSwgImYyNWQiLCAiTTI1NiA0OGEyMDggMjA4IDAgMSAxIDAgNDE2IDIwOCAyMDggMCAxIDEgMC00MTZ6bTAgNDY0YTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjAwIDE0NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNzZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2IDM0LjQgMCA0MSA2OC4zYzYuOCAxMS40IDIxLjYgMTUgMzIuOSA4LjJzMTUtMjEuNiA4LjItMzIuOWwtMzAuMi01MC4zYzI0LjYtMTEuNSA0MS42LTM2LjQgNDEuNi02NS4zIDAtMzkuOC0zMi4yLTcyLTcyLTcybC04MCAwem03MiA5NmwtNDggMCAwLTQ4IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMHoiXQogICAgfTsKICAgIGljb25zMiA9IHsKICAgICAgZmFTcXVhcmVNaW51cywKICAgICAgZmFNaW51c1NxdWFyZSwKICAgICAgZmFDYWxlbmRhckNoZWNrLAogICAgICBmYUZhY2VLaXNzLAogICAgICBmYUtpc3MsCiAgICAgIGZhUGFzdGUsCiAgICAgIGZhRmlsZUNsaXBib2FyZCwKICAgICAgZmFIYW5kUG9pbnRMZWZ0LAogICAgICBmYUZpbGVFeGNlbCwKICAgICAgZmFFbnZlbG9wZSwKICAgICAgZmFTcXVhcmVDYXJldERvd24sCiAgICAgIGZhQ2FyZXRTcXVhcmVEb3duLAogICAgICBmYVRydWNrLAogICAgICBmYUJlbGwsCiAgICAgIGZhTWVzc2FnZSwKICAgICAgZmFDb21tZW50QWx0LAogICAgICBmYUZhY2VEaXp6eSwKICAgICAgZmFEaXp6eSwKICAgICAgZmFDYWxlbmRhckRheXMsCiAgICAgIGZhQ2FsZW5kYXJBbHQsCiAgICAgIGZhSGFuZFBvaW50VXAsCiAgICAgIGZhSGFuZExpemFyZCwKICAgICAgZmFTcXVhcmVGdWxsLAogICAgICBmYUNpcmNsZVBhdXNlLAogICAgICBmYVBhdXNlQ2lyY2xlLAogICAgICBmYUhhcmREcml2ZSwKICAgICAgZmFIZGQsCiAgICAgIGZhRmlsZVppcHBlciwKICAgICAgZmFGaWxlQXJjaGl2ZSwKICAgICAgZmFGbG9wcHlEaXNrLAogICAgICBmYVNhdmUsCiAgICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQsCiAgICAgIGZhR3JpblRvbmd1ZVNxdWludCwKICAgICAgZmFDYW1lcmEsCiAgICAgIGZhQ2FtZXJhQWx0LAogICAgICBmYUZhY2VHcmluU3RhcnMsCiAgICAgIGZhR3JpblN0YXJzLAogICAgICBmYUV5ZSwKICAgICAgZmFGYWNlU2FkVGVhciwKICAgICAgZmFTYWRUZWFyLAogICAgICBmYVNoYXJlRnJvbVNxdWFyZSwKICAgICAgZmFTaGFyZVNxdWFyZSwKICAgICAgZmFOb3RlU3RpY2t5LAogICAgICBmYVN0aWNreU5vdGUsCiAgICAgIGZhSGFuZEJhY2tGaXN0LAogICAgICBmYUhhbmRSb2NrLAogICAgICBmYUNoZXNzUXVlZW4sCiAgICAgIGZhRmFjZUdyaW5UZWFycywKICAgICAgZmFHcmluVGVhcnMsCiAgICAgIGZhUGVuVG9TcXVhcmUsCiAgICAgIGZhRWRpdCwKICAgICAgZmFGYWNlR3JpbkJlYW1Td2VhdCwKICAgICAgZmFHcmluQmVhbVN3ZWF0LAogICAgICBmYUNsb2NrLAogICAgICBmYUNsb2NrRm91ciwKICAgICAgZmFGYWNlTGF1Z2hXaW5rLAogICAgICBmYUxhdWdoV2luaywKICAgICAgZmFQYXBlclBsYW5lLAogICAgICBmYUhlYXJ0LAogICAgICBmYUZvbnRBd2Vzb21lOiBmYUZvbnRBd2Vzb21lMiwKICAgICAgZmFGb250QXdlc29tZUZsYWc6IGZhRm9udEF3ZXNvbWVGbGFnMiwKICAgICAgZmFGb250QXdlc29tZUxvZ29GdWxsOiBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwyLAogICAgICBmYUNsb25lLAogICAgICBmYUZvbGRlck9wZW4sCiAgICAgIGZhV2luZG93TWluaW1pemUsCiAgICAgIGZhU3RhckhhbGYsCiAgICAgIGZhQWxhcm1DbG9jaywKICAgICAgZmFOZXdzcGFwZXIsCiAgICAgIGZhSG9zcGl0YWwsCiAgICAgIGZhSG9zcGl0YWxBbHQsCiAgICAgIGZhSG9zcGl0YWxXaWRlLAogICAgICBmYUNpcmNsZVN0b3AsCiAgICAgIGZhU3RvcENpcmNsZSwKICAgICAgZmFPYmplY3RVbmdyb3VwLAogICAgICBmYUNvbW1lbnQsCiAgICAgIGZhQ2hlc3NQYXduLAogICAgICBmYUNhbGVuZGFyUGx1cywKICAgICAgZmFDbGlwYm9hcmQsCiAgICAgIGZhVGh1bWJzRG93biwKICAgICAgZmFJZEJhZGdlLAogICAgICBmYVNxdWFyZUNoZWNrLAogICAgICBmYUNoZWNrU3F1YXJlLAogICAgICBmYUNoZXNzQmlzaG9wLAogICAgICBmYUVudmVsb3BlT3BlbiwKICAgICAgZmFDaXJjbGVYbWFyaywKICAgICAgZmFUaW1lc0NpcmNsZSwKICAgICAgZmFYbWFya0NpcmNsZSwKICAgICAgZmFTcXVhcmVDYXJldFVwLAogICAgICBmYUNhcmV0U3F1YXJlVXAsCiAgICAgIGZhRmlsZUltYWdlLAogICAgICBmYVNxdWFyZUNhcmV0UmlnaHQsCiAgICAgIGZhQ2FyZXRTcXVhcmVSaWdodCwKICAgICAgZmFTdW4sCiAgICAgIGZhSW1hZ2UsCiAgICAgIGZhTGlnaHRidWxiLAogICAgICBmYUFkZHJlc3NDYXJkLAogICAgICBmYUNvbnRhY3RDYXJkLAogICAgICBmYVZjYXJkLAogICAgICBmYUZhY2VNZWgsCiAgICAgIGZhTWVoLAogICAgICBmYU1hcCwKICAgICAgZmFIYW5kUG9pbnREb3duLAogICAgICBmYUZhY2VNZWhCbGFuaywKICAgICAgZmFNZWhCbGFuaywKICAgICAgZmFGYWNlR3JpblRvbmd1ZSwKICAgICAgZmFHcmluVG9uZ3VlLAogICAgICBmYUZ1dGJvbCwKICAgICAgZmFGdXRib2xCYWxsLAogICAgICBmYVNvY2NlckJhbGwsCiAgICAgIGZhRmFjZVN1cnByaXNlLAogICAgICBmYVN1cnByaXNlLAogICAgICBmYUZvbGRlciwKICAgICAgZmFGb2xkZXJCbGFuaywKICAgICAgZmFDbG91ZCwKICAgICAgZmFDaXJjbGUsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnQsCiAgICAgIGZhR3JpblNxdWludCwKICAgICAgZmFDaXJjbGVVc2VyLAogICAgICBmYVVzZXJDaXJjbGUsCiAgICAgIGZhUmVjdGFuZ2xlTGlzdCwKICAgICAgZmFMaXN0QWx0LAogICAgICBmYUhhbmQsCiAgICAgIGZhSGFuZFBhcGVyLAogICAgICBmYVRodW1ic1VwLAogICAgICBmYUJ1aWxkaW5nLAogICAgICBmYUNoZXNzUm9vaywKICAgICAgZmFDaXJjbGVRdWVzdGlvbiwKICAgICAgZmFRdWVzdGlvbkNpcmNsZSwKICAgICAgZmFGaWxlLAogICAgICBmYUZhY2VTYWRDcnksCiAgICAgIGZhU2FkQ3J5LAogICAgICBmYUNhbGVuZGFyTWludXMsCiAgICAgIGZhRmFjZVRpcmVkLAogICAgICBmYVRpcmVkLAogICAgICBmYUhhbmRQb2ludFJpZ2h0LAogICAgICBmYUNpcmNsZVVwLAogICAgICBmYUFycm93QWx0Q2lyY2xlVXAsCiAgICAgIGZhSGFuZFNjaXNzb3JzLAogICAgICBmYUdlbSwKICAgICAgZmFSZWN0YW5nbGVYbWFyaywKICAgICAgZmFSZWN0YW5nbGVUaW1lcywKICAgICAgZmFUaW1lc1JlY3RhbmdsZSwKICAgICAgZmFXaW5kb3dDbG9zZSwKICAgICAgZmFUcmFzaENhbiwKICAgICAgZmFUcmFzaEFsdCwKICAgICAgZmFMaWZlUmluZywKICAgICAgZmFDb3B5cmlnaHQsCiAgICAgIGZhQ2lyY2xlTGVmdCwKICAgICAgZmFBcnJvd0FsdENpcmNsZUxlZnQsCiAgICAgIGZhQ2FsZW5kYXIsCiAgICAgIGZhRmFjZUZyb3duT3BlbiwKICAgICAgZmFGcm93bk9wZW4sCiAgICAgIGZhQ2hhcnRCYXIsCiAgICAgIGZhQmFyQ2hhcnQsCiAgICAgIGZhSG91c2UsCiAgICAgIGZhSG9tZSwKICAgICAgZmFIb21lQWx0LAogICAgICBmYUhvbWVMZ0FsdCwKICAgICAgZmFGYWNlRnJvd24sCiAgICAgIGZhRnJvd24sCiAgICAgIGZhVXNlciwKICAgICAgZmFVc2VyQWx0LAogICAgICBmYVVzZXJMYXJnZSwKICAgICAgZmFTbm93Zmxha2UsCiAgICAgIGZhQm9va21hcmssCiAgICAgIGZhU3F1YXJlQ2FyZXRMZWZ0LAogICAgICBmYUNhcmV0U3F1YXJlTGVmdCwKICAgICAgZmFIYW5kc2hha2UsCiAgICAgIGZhSGFuZHNoYWtlQWx0LAogICAgICBmYUhhbmRzaGFrZVNpbXBsZSwKICAgICAgZmFGYWNlU21pbGVXaW5rLAogICAgICBmYVNtaWxlV2luaywKICAgICAgZmFGYWNlR3JpblNxdWludFRlYXJzLAogICAgICBmYUdyaW5TcXVpbnRUZWFycywKICAgICAgZmFGaWxlQXVkaW8sCiAgICAgIGZhQ2FsZW5kYXJYbWFyaywKICAgICAgZmFDYWxlbmRhclRpbWVzLAogICAgICBmYUNpcmNsZURvd24sCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVEb3duLAogICAgICBmYUZpbGVMaW5lcywKICAgICAgZmFGaWxlQWx0LAogICAgICBmYUZpbGVUZXh0LAogICAgICBmYUNvbW1lbnRzLAogICAgICBmYUNpcmNsZUNoZWNrLAogICAgICBmYUNoZWNrQ2lyY2xlLAogICAgICBmYU1vb24sCiAgICAgIGZhQ2xvc2VkQ2FwdGlvbmluZywKICAgICAgZmFJbWFnZXMsCiAgICAgIGZhQ2lyY2xlUmlnaHQsCiAgICAgIGZhQXJyb3dBbHRDaXJjbGVSaWdodCwKICAgICAgZmFJZENhcmQsCiAgICAgIGZhRHJpdmVyc0xpY2Vuc2UsCiAgICAgIGZhQ2lyY2xlUGxheSwKICAgICAgZmFQbGF5Q2lyY2xlLAogICAgICBmYUZhY2VMYXVnaEJlYW0sCiAgICAgIGZhTGF1Z2hCZWFtLAogICAgICBmYUFkZHJlc3NCb29rLAogICAgICBmYUNvbnRhY3RCb29rLAogICAgICBmYUhvdXJnbGFzcywKICAgICAgZmFIb3VyZ2xhc3NFbXB0eSwKICAgICAgZmFIZWFkcGhvbmVzLAogICAgICBmYUhlYWRwaG9uZXNBbHQsCiAgICAgIGZhSGVhZHBob25lc1NpbXBsZSwKICAgICAgZmFGaWxlUG93ZXJwb2ludCwKICAgICAgZmFXaW5kb3dNYXhpbWl6ZSwKICAgICAgZmFDb21tZW50RG90cywKICAgICAgZmFDb21tZW50aW5nLAogICAgICBmYUZhY2VHcmluVG9uZ3VlV2luaywKICAgICAgZmFHcmluVG9uZ3VlV2luaywKICAgICAgZmFIb3VyZ2xhc3NIYWxmLAogICAgICBmYUhvdXJnbGFzczIsCiAgICAgIGZhQ3JlZGl0Q2FyZCwKICAgICAgZmFDcmVkaXRDYXJkQWx0LAogICAgICBmYUhhbmRTcG9jaywKICAgICAgZmFCZWxsU2xhc2gsCiAgICAgIGZhU3RhciwKICAgICAgZmFGbGFnLAogICAgICBmYUxlbW9uLAogICAgICBmYVdpbmRvd1Jlc3RvcmUsCiAgICAgIGZhRmFjZUdyaW5IZWFydHMsCiAgICAgIGZhR3JpbkhlYXJ0cywKICAgICAgZmFGYWNlS2lzc0JlYW0sCiAgICAgIGZhS2lzc0JlYW0sCiAgICAgIGZhRmlsZVBkZiwKICAgICAgZmFGYWNlR3JpbldpZGUsCiAgICAgIGZhR3JpbkFsdCwKICAgICAgZmFGYWNlTGF1Z2hTcXVpbnQsCiAgICAgIGZhTGF1Z2hTcXVpbnQsCiAgICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQsCiAgICAgIGZhS2lzc1dpbmtIZWFydCwKICAgICAgZmFDb3B5LAogICAgICBmYUNoZXNzS2luZywKICAgICAgZmFTcXVhcmVQbHVzLAogICAgICBmYVBsdXNTcXVhcmUsCiAgICAgIGZhRmlsZUNvZGUsCiAgICAgIGZhRmFjZUdyaW5XaW5rLAogICAgICBmYUdyaW5XaW5rLAogICAgICBmYU1vbmV5QmlsbDEsCiAgICAgIGZhTW9uZXlCaWxsQWx0LAogICAgICBmYUV5ZVNsYXNoLAogICAgICBmYUZpbGVXb3JkLAogICAgICBmYUZhY2VBbmdyeSwKICAgICAgZmFBbmdyeSwKICAgICAgZmFDaGVzc0tuaWdodCwKICAgICAgZmFGYWNlR3JpbkJlYW0sCiAgICAgIGZhR3JpbkJlYW0sCiAgICAgIGZhSGFuZFBlYWNlLAogICAgICBmYUNvbXBhc3MsCiAgICAgIGZhU3F1YXJlLAogICAgICBmYUZhY2VHcmluLAogICAgICBmYUdyaW4sCiAgICAgIGZhRmFjZVNtaWxlLAogICAgICBmYVNtaWxlLAogICAgICBmYUZhY2VTbWlsZUJlYW0sCiAgICAgIGZhU21pbGVCZWFtLAogICAgICBmYUZvbGRlckNsb3NlZCwKICAgICAgZmFLZXlib2FyZCwKICAgICAgZmFGYWNlUm9sbGluZ0V5ZXMsCiAgICAgIGZhTWVoUm9sbGluZ0V5ZXMsCiAgICAgIGZhRmFjZUdyaW1hY2UsCiAgICAgIGZhR3JpbWFjZSwKICAgICAgZmFDaXJjbGVEb3QsCiAgICAgIGZhRG90Q2lyY2xlLAogICAgICBmYU9iamVjdEdyb3VwLAogICAgICBmYUZhY2VGbHVzaGVkLAogICAgICBmYUZsdXNoZWQsCiAgICAgIGZhU3RhckhhbGZTdHJva2UsCiAgICAgIGZhU3RhckhhbGZBbHQsCiAgICAgIGZhRmlsZVZpZGVvLAogICAgICBmYUZhY2VMYXVnaCwKICAgICAgZmFMYXVnaCwKICAgICAgZmFIYW5kUG9pbnRlciwKICAgICAgZmFSZWdpc3RlcmVkCiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGZvcnRhd2Vzb21lK2ZyZWUtc29saWQtc3ZnLWljb25zQDcuMS4wL25vZGVfbW9kdWxlcy9AZm9ydGF3ZXNvbWUvZnJlZS1zb2xpZC1zdmctaWNvbnMvaW5kZXgubWpzCnZhciBwcmVmaXgzLCBmYTAsIGZhMSwgZmEyLCBmYTMsIGZhNCwgZmE1LCBmYTYsIGZhNywgZmE4LCBmYTksIGZhRG9sbGFyU2lnbiwgZmFEb2xsYXIsIGZhVXNkLCBmYURvZywgZmFUcnVja01vdmluZywgZmFSb3RhdGUsIGZhU3luY0FsdCwgZmFTcXVhcmVNaW51czIsIGZhTWludXNTcXVhcmUyLCBmYUFsaWduSnVzdGlmeSwgZmFDYWxlbmRhckNoZWNrMiwgZmFGYWNlS2lzczIsIGZhS2lzczIsIGZhS2l0Y2hlblNldCwgZmFEbmEsIGZhQ2hpbGRSZWFjaGluZywgZmFQYXN0ZTIsIGZhRmlsZUNsaXBib2FyZDIsIGZhTWV0ZW9yLCBmYUdlYXJzLCBmYUNvZ3MsIGZhRmlsZUNpcmNsZVBsdXMsIGZhSWNpY2xlcywgZmFBcnJvd1RyZW5kVXAsIGZhSGV4YWdvbk5vZGVzQm9sdCwgZmFRdWVzdGlvbiwgZmFIYW5kc0JvdW5kLCBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLCBmYUZpbGVBcnJvd0Rvd24sIGZhRmlsZURvd25sb2FkLCBmYVBlcnNvbkJvb3RoLCBmYUxvY3VzdCwgZmFSaWdodExvbmcsIGZhTG9uZ0Fycm93QWx0UmlnaHQsIGZhVHJ1Y2tEcm9wbGV0LCBmYUhhbmRIb2xkaW5nTWVkaWNhbCwgZmFIYW5kUG9pbnRMZWZ0MiwgZmFDYWxjdWxhdG9yLCBmYU1pbnVzLCBmYVN1YnRyYWN0LCBmYUFycm93VXBaQSwgZmFTb3J0QWxwaGFVcEFsdCwgZmFNaWNyb3Bob25lU2xhc2gsIGZhU3F1YXJlUGVuLCBmYVBlblNxdWFyZSwgZmFQZW5jaWxTcXVhcmUsIGZhSGFuZEZpc3QsIGZhRmlzdFJhaXNlZCwgZmFDb21tZW50U21zLCBmYVNtcywgZmFTaW1DYXJkLCBmYVNjYWxlQmFsYW5jZWQsIGZhQmFsYW5jZVNjYWxlLCBmYUNhciwgZmFBdXRvbW9iaWxlLCBmYUNyb3BTaW1wbGUsIGZhQ3JvcEFsdCwgZmFNZWRhbCwgZmFTY3JvbGwsIGZhRmlsZUV4Y2VsMiwgZmFGaWx0ZXIsIGZhRHJ1bSwgZmFNYXBQaW4sIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwgZmFCYWxhbmNlU2NhbGVSaWdodCwgZmFBcnJvd3NUb0NpcmNsZSwgZmFFbnZlbG9wZTIsIGZhQmFieSwgZmFTcXVhcmVDYXJldERvd24yLCBmYUNhcmV0U3F1YXJlRG93bjIsIGZhVGVudCwgZmFBLCBmYVBhcmFjaHV0ZUJveCwgZmFDYXJ0QXJyb3dEb3duLCBmYUJyaWRnZUNpcmNsZUV4Y2xhbWF0aW9uLCBmYUNsb3VkQXJyb3dVcCwgZmFDbG91ZFVwbG9hZCwgZmFDbG91ZFVwbG9hZEFsdCwgZmFBdCwgZmFJbmRpYW5SdXBlZVNpZ24sIGZhSW5kaWFuUnVwZWUsIGZhSW5yLCBmYVRydWNrMiwgZmFDaGFsa2JvYXJkVXNlciwgZmFDaGFsa2JvYXJkVGVhY2hlciwgZmFVc2VyQ2hlY2ssIGZhVXNlck5pbmphLCBmYVBsYW50V2lsdCwgZmFXZWlnaHRTY2FsZSwgZmFXZWlnaHQsIGZhQ2FyZXRSaWdodCwgZmFGbG9yaW5TaWduLCBmYUJlbGwyLCBmYUxhcmlTaWduLCBmYU1pbGxTaWduLCBmYVBlcnNvblNub3dib2FyZGluZywgZmFTbm93Ym9hcmRpbmcsIGZhVHR5LCBmYVRlbGV0eXBlLCBmYVVzZXJzUmVjdGFuZ2xlLCBmYU1vYmlsZSwgZmFNb2JpbGVBbmRyb2lkLCBmYU1vYmlsZVBob25lLCBmYUFycm93c1R1cm5Ub0RvdHMsIGZhRXhjbGFtYXRpb24sIGZhQ2h1cmNoLCBmYVRvZ2dsZU9mZiwgZmFTaG9lUHJpbnRzLCBmYUZpbGVDaXJjbGVFeGNsYW1hdGlvbiwgZmFXYWxsZXQsIGZhTWVzc2FnZTIsIGZhQ29tbWVudEFsdDIsIGZhVHJvcGh5LCBmYUZhY2VEaXp6eTIsIGZhRGl6enkyLCBmYUJhY3RlcmlhLCBmYUVhckRlYWYsIGZhRGVhZiwgZmFEZWFmbmVzcywgZmFIYXJkT2ZIZWFyaW5nLCBmYVBlb3BsZUFycm93cywgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsIGZhSGFuZHNDbGFwcGluZywgZmFWaXJ1c0NvdmlkU2xhc2gsIGZhQ2FsZW5kYXJEYXlzMiwgZmFDYWxlbmRhckFsdDIsIGZhRGlhbW9uZFR1cm5SaWdodCwgZmFEaXJlY3Rpb25zLCBmYUhhbmRQb2ludFVwMiwgZmFCZXppZXJDdXJ2ZSwgZmFQZXJzb25IYWxmRHJlc3MsIGZhU3F1YXJlUG9sbEhvcml6b250YWwsIGZhUG9sbEgsIGZhU2Nob29sQ2lyY2xlWG1hcmssIGZhSGFuZExpemFyZDIsIGZhQ2hhbGtib2FyZCwgZmFCbGFja2JvYXJkLCBmYVVwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGlua0FsdCwgZmFTcXVhcmVGdWxsMiwgZmFDbG92ZXIsIGZhVGVldGhPcGVuLCBmYUJhcnNTdGFnZ2VyZWQsIGZhUmVvcmRlciwgZmFTdHJlYW0sIGZhV2FyZWhvdXNlLCBmYVN3YXRjaGJvb2ssIGZhQ2FtcGdyb3VuZCwgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCwgZmFHbGFzc2VzLCBmYUNpcmNsZVBhdXNlMiwgZmFQYXVzZUNpcmNsZTIsIGZhTWVtb3J5LCBmYUdpZnQsIGZhTW9uZXlCaWxsV2hlYXQsIGZhRHVuZ2VvbiwgZmFTdWl0Y2FzZU1lZGljYWwsIGZhTWVka2l0LCBmYVBlcnNvbkNhbmUsIGZhR2F1Z2UsIGZhRGFzaGJvYXJkLCBmYUdhdWdlTWVkLCBmYVRhY2hvbWV0ZXJBbHRBdmVyYWdlLCBmYUVudmVsb3BlT3BlblRleHQsIGZhVG9vbGJveCwgZmFQb3dlck9mZiwgZmFTaWduYWwsIGZhU2lnbmFsNSwgZmFTaWduYWxQZXJmZWN0LCBmYUFycm93c1NwaW4sIGZhSm9pbnQsIGZhQnJhaWxsZSwgZmFCYXNrZXRTaG9wcGluZywgZmFTaG9wcGluZ0Jhc2tldCwgZmFCcmlkZ2UsIGZhUGxhbmVBcnJpdmFsLCBmYUNhc2hSZWdpc3RlciwgZmFSaW5nLCBmYVNoYXJlTm9kZXMsIGZhU2hhcmVBbHQsIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24sIGZhQmlub2N1bGFycywgZmFLaXBTaWduLCBmYUhhcmREcml2ZTIsIGZhSGRkMiwgZmFSYW5raW5nU3RhciwgZmFVc2VyVGllLCBmYUVsbGlwc2lzLCBmYUVsbGlwc2lzSCwgZmFTdG9yZVNsYXNoLCBmYVBlcmNlbnQsIGZhUGVyY2VudGFnZSwgZmFGaWxlWmlwcGVyMiwgZmFGaWxlQXJjaGl2ZTIsIGZhRGlzcGxheSwgZmFJY29ucywgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCwgZmFSdWxlclZlcnRpY2FsLCBmYU1hcExvY2F0aW9uRG90LCBmYU1hcE1hcmtlZEFsdCwgZmFIZWFydENyYWNrLCBmYUhlYXJ0QnJva2VuLCBmYUNvdywgZmFSc3MsIGZhRmVlZCwgZmFNYWduaWZ5aW5nR2xhc3MsIGZhU2VhcmNoLCBmYUNsb3VkTW9vbiwgZmFCb3hlc1N0YWNrZWQsIGZhQm94ZXMsIGZhQm94ZXNBbHQsIGZhQ29kZUJyYW5jaCwgZmFCYW4sIGZhQ2FuY2VsLCBmYUp1Z0RldGVyZ2VudCwgZmFSZXBseSwgZmFNYWlsUmVwbHksIGZhU3VuUGxhbnRXaWx0LCBmYUJhY3Rlcml1bSwgZmFSZWNvcmRWaW55bCwgZmFGbG9wcHlEaXNrMiwgZmFTYXZlMiwgZmFUb2lsZXRzUG9ydGFibGUsIGZhTywgZmFQYWxldHRlLCBmYVVubG9jaywgZmFFYXJMaXN0ZW4sIGZhQXNzaXN0aXZlTGlzdGVuaW5nU3lzdGVtcywgZmFDb2RlUHVsbFJlcXVlc3QsIGZhS2V5LCBmYVNrdWxsLCBmYU1hcnNTdHJva2VVcCwgZmFNYXJzU3Ryb2tlViwgZmFGaXJlRmxhbWVTaW1wbGUsIGZhQnVybiwgZmFUcmVlLCBmYVNtb2csIGZhUywgZmFKZWRpLCBmYVBlcnNvbkhpa2luZywgZmFIaWtpbmcsIGZhQXJyb3dzVXBUb0xpbmUsIGZhTWFyc0RvdWJsZSwgZmFUaGVybW9tZXRlciwgZmFQYWludGJydXNoLCBmYVBhaW50QnJ1c2gsIGZhTmV1dGVyLCBmYVNxdWFyZVBob25lRmxpcCwgZmFQaG9uZVNxdWFyZUFsdCwgZmFGYWNlR3JpblRvbmd1ZVNxdWludDIsIGZhR3JpblRvbmd1ZVNxdWludDIsIGZhQ29tbWVudERvbGxhciwgZmFIaXBwbywgZmFCb3dsRm9vZCwgZmFTcXVhcmVWaXJ1cywgZmFDbG91ZFN1blJhaW4sIGZhQXJyb3dSaWdodExvbmcsIGZhTG9uZ0Fycm93UmlnaHQsIGZhQnVpbGRpbmdVbiwgZmFUZW1wZXJhdHVyZUxvdywgZmFEb29yT3BlbiwgZmFBbGlnbkxlZnQsIGZhQ2FtZXJhMiwgZmFDYW1lcmFBbHQyLCBmYVVzZXJzUmF5cywgZmFSYWluYm93LCBmYVNpdGVtYXAsIGZhRmFjZUdyaW5TdGFyczIsIGZhR3JpblN0YXJzMiwgZmFTb3J0VXAsIGZhU29ydEFzYywgZmFFeWUyLCBmYUNhcmV0TGVmdCwgZmFBcHBsZVdob2xlLCBmYUFwcGxlQWx0LCBmYVNjcm9sbFRvcmFoLCBmYVRvcmFoLCBmYUhvdXNlTG9jaywgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsIGZhVHJhc2gsIGZhRmFjZVNhZFRlYXIyLCBmYVNhZFRlYXIyLCBmYUZheCwgZmFQZXJzb25DaXJjbGVQbHVzLCBmYUhhbXNhLCBmYVBlcnNvbkNpcmNsZVF1ZXN0aW9uLCBmYUNsaXBib2FyZENoZWNrLCBmYVNoYXJlRnJvbVNxdWFyZTIsIGZhU2hhcmVTcXVhcmUyLCBmYVJlY2VpcHQsIGZhRXF1YWxzLCBmYUNoZXZyb25VcCwgZmFWaXJ1c1NsYXNoLCBmYVNsYXNoLCBmYUV4cGFuZCwgZmFOb3RlU3RpY2t5MiwgZmFTdGlja3lOb3RlMiwgZmFUYWJsZUNvbHVtbnMsIGZhQ29sdW1ucywgZmFQZXJzb25TaGVsdGVyLCBmYUNpcmNsZU5vdGNoLCBmYVdhdGVyLCBmYURlbGV0ZUxlZnQsIGZhQmFja3NwYWNlLCBmYUJyb29tQmFsbCwgZmFRdWlkZGl0Y2gsIGZhUXVpZGRpdGNoQnJvb21CYWxsLCBmYUosIGZhU2h1dHRsZVNwYWNlLCBmYVNwYWNlU2h1dHRsZSwgZmFZaW5ZYW5nLCBmYVN0b3AsIGZhVHJvd2VsLCBmYUhhbmRCYWNrRmlzdDIsIGZhSGFuZFJvY2syLCBmYVRlbXBlcmF0dXJlSGlnaCwgZmFHcmVhdGVyVGhhbiwgZmFDcnV0Y2gsIGZhU2VwdGFnb24sIGZhSGVwdGFnb24sIGZhU3RyZWV0VmlldywgZmFXYXZlU3F1YXJlLCBmYUFuZ2xlTGVmdCwgZmFTY3Jld2RyaXZlciwgZmFUcmFjdG9yLCBmYUJyaWRnZUNpcmNsZVhtYXJrLCBmYVZpYWxzLCBmYVN0ZXRob3Njb3BlLCBmYVBvZGNhc3QsIGZhQXJyb3dVcFJpZ2h0RG90cywgZmFDaGVzc1F1ZWVuMiwgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiwgZmFFbGxpcHNpc1ZlcnRpY2FsLCBmYUVsbGlwc2lzViwgZmFIZWFydENpcmNsZUV4Y2xhbWF0aW9uLCBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24sIGZhUGVyc29uQXJyb3dVcEZyb21MaW5lLCBmYU5vdEVxdWFsLCBmYVRyYWluVHJhbSwgZmFQbGFuZURlcGFydHVyZSwgZmFSaWdodFRvQnJhY2tldCwgZmFTaWduSW5BbHQsIGZhU2RDYXJkLCBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24sIGZhU2hla2VsU2lnbiwgZmFJbHMsIGZhU2hla2VsLCBmYVNoZXFlbCwgZmFTaGVxZWxTaWduLCBmYVJhZGlvLCBmYUhhbmREb3RzLCBmYUFsbGVyZ2llcywgZmFCb29rU2t1bGwsIGZhQm9va0RlYWQsIGZhVW5sb2NrS2V5aG9sZSwgZmFVbmxvY2tBbHQsIGZhRmlsZUFycm93VXAsIGZhRmlsZVVwbG9hZCwgZmFGYWNlR3JpblRlYXJzMiwgZmFHcmluVGVhcnMyLCBmYVBlblRvU3F1YXJlMiwgZmFFZGl0MiwgZmFFYXJ0aEV1cm9wZSwgZmFHbG9iZUV1cm9wZSwgZmFGYWNlR3JpbkJlYW1Td2VhdDIsIGZhR3JpbkJlYW1Td2VhdDIsIGZhQ2lyY2xlSGFsZlN0cm9rZSwgZmFBZGp1c3QsIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiwgZmFUYWJsZUNlbGxzQ29sdW1uTG9jaywgZmFUcnVja0ZpZWxkVW4sIGZhQ2xvY2syLCBmYUNsb2NrRm91cjIsIGZhQm9vaywgZmFGYWNlTGF1Z2hXaW5rMiwgZmFMYXVnaFdpbmsyLCBmYUNsb3VkTWVhdGJhbGwsIGZhQ2hhcnRBcmVhLCBmYUFyZWFDaGFydCwgZmFSdXBpYWhTaWduLCBmYVRleHRXaWR0aCwgZmFTYXRlbGxpdGUsIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsIGZhU2VhcmNoTWludXMsIGZhUGVvcGxlR3JvdXAsIGZhU3F1YXJlQmluYXJ5LCBmYU1hc2tzVGhlYXRlciwgZmFUaGVhdGVyTWFza3MsIGZhQ2FydFBsdXMsIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhQXNsSW50ZXJwcmV0aW5nLCBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsIGZhVGFibGVDZWxsc1Jvd1VubG9jaywgZmFSb2NrZXQsIGZhU2hyaW1wLCBmYVRlbmdlU2lnbiwgZmFUZW5nZSwgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLCBmYUNsaW5pY01lZGljYWwsIGZhVXNlcnNTbGFzaCwgZmFQYXBlclBsYW5lMiwgZmFCb29rQXRsYXMsIGZhQXRsYXMsIGZhVGFibGUsIGZhSGVhcnQyLCBmYUNpcmNsZUNoZXZyb25VcCwgZmFDaGV2cm9uQ2lyY2xlVXAsIGZhQmF0dGVyeUhhbGYsIGZhQmF0dGVyeTMsIGZhRm9udEF3ZXNvbWUzLCBmYUZvbnRBd2Vzb21lRmxhZzMsIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDMsIGZhSGFuZGN1ZmZzLCBmYUhhdENvd2JveVNpZGUsIGZhSW5kdXN0cnksIGZhTGluZXNMZWFuaW5nLCBmYVBhc3Nwb3J0LCBmYUluZmluaXR5LCBmYUNsb25lMiwgZmFGb3J3YXJkLCBmYU0sIGZhUm9hZFNwaWtlcywgZmFNb3VudGFpbiwgZmFDaGVzcywgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMsIGZhVGVtcGVyYXR1cmUzLCBmYVRoZXJtb21ldGVyMywgZmFUaGVybW9tZXRlclRocmVlUXVhcnRlcnMsIGZhQiwgZmFTaGllbGRWaXJ1cywgZmFMaXRlY29pblNpZ24sIGZhRGljZUQ2LCBmYUdyaXBMaW5lc1ZlcnRpY2FsLCBmYUdvbGZCYWxsVGVlLCBmYUdvbGZCYWxsLCBmYUhleGFnb24sIGZhRm9sZGVyT3BlbjIsIGZhS2FhYmEsIGZhSGFuZEhvbGRpbmcsIGZhU2luZ2xlUXVvdGVSaWdodCwgZmFCb3R0bGVEcm9wbGV0LCBmYVdpbmRvd01pbmltaXplMiwgZmFDaGV2cm9uUmlnaHQsIGZhRWdnLCBmYUxhbmRtYXJrRG9tZSwgZmFMYW5kbWFya0FsdCwgZmFXb3JtLCBmYVVzZXJJbmp1cmVkLCBmYVN0cmlrZXRocm91Z2gsIGZhQmxvZywgZmFTdG9wd2F0Y2gyMCwgZmFUcnVja1BpY2t1cCwgZmFTZWVkbGluZywgZmFTcHJvdXQsIGZhVHJhbnNnZW5kZXIsIGZhVHJhbnNnZW5kZXJBbHQsIGZhU3RhckhhbGYyLCBmYVBob3RvRmlsbSwgZmFQaG90b1ZpZGVvLCBmYVB1bXBNZWRpY2FsLCBmYUZpcmUsIGZhTWFnbmlmeWluZ0dsYXNzUGx1cywgZmFTZWFyY2hQbHVzLCBmYUZsYXNrLCBmYUFsaWduUmlnaHQsIGZhQ2FibGVDYXIsIGZhVHJhbSwgZmFLaXRNZWRpY2FsLCBmYUZpcnN0QWlkLCBmYUdyaXBMaW5lcywgZmFCdXJnZXIsIGZhSGFtYnVyZ2VyLCBmYVNub3dtYW4sIGZhSG90ZWwsIGZhUHJpbnQsIGZhVm9sbGV5YmFsbCwgZmFWb2xsZXliYWxsQmFsbCwgZmFUcmFmZmljTGlnaHQsIGZhUGxhbmVDaXJjbGVDaGVjaywgZmFVc2VycywgZmFDZXJ0aWZpY2F0ZSwgZmFBbGFybUNsb2NrMiwgZmFIZWxpY29wdGVyU3ltYm9sLCBmYUhvdXNlQ2hpbW5leUNyYWNrLCBmYUhvdXNlRGFtYWdlLCBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsIGZhRGF0YWJhc2UsIGZhTmV3c3BhcGVyMiwgZmFDbG91ZFJhaW4sIGZhTWF4aW1pemUsIGZhRXhwYW5kQXJyb3dzQWx0LCBmYUxvY2F0aW9uQXJyb3csIGZhQ2l0eSwgZmFYUmF5LCBmYVVtYnJlbGxhQmVhY2gsIGZhQXJyb3dSaWdodFRvQnJhY2tldCwgZmFTaWduSW4sIGZhSGVhZHNldCwgZmFTcGxvdGNoLCBmYVVwTG9uZywgZmFMb25nQXJyb3dBbHRVcCwgZmFIZXhhZ29uTm9kZXMsIGZhSG9zcGl0YWwyLCBmYUhvc3BpdGFsQWx0MiwgZmFIb3NwaXRhbFdpZGUyLCBmYVBlcnNvbkhhcmFzc2luZywgZmFNb25leUJpbGxUcmVuZFVwLCBmYVBlblJ1bGVyLCBmYVBlbmNpbFJ1bGVyLCBmYVJlcGVhdCwgZmFCb25lLCBmYUZpcmVGbGFtZUN1cnZlZCwgZmFGaXJlQWx0LCBmYUJ1c1NpbXBsZSwgZmFCdXNBbHQsIGZhVmVudXNNYXJzLCBmYUJsZW5kZXIsIGZhVSwgZmFTaGFyZSwgZmFNYWlsRm9yd2FyZCwgZmFQaG9uZUZsaXAsIGZhUGhvbmVBbHQsIGZhVG9pbGV0UG9ydGFibGUsIGZhUGVyc29uUHJlZ25hbnQsIGZhTGVzc1RoYW4sIGZhU3VwZXJzY3JpcHQsIGZhQ2lyY2xlU3RvcDIsIGZhU3RvcENpcmNsZTIsIGZhQXJyb3dzVXBEb3duLCBmYUFycm93c1YsIGZhUG9vU3Rvcm0sIGZhUG9vQm9sdCwgZmFWaWRlb1NsYXNoLCBmYVNxdWFyZVhtYXJrLCBmYVRpbWVzU3F1YXJlLCBmYVhtYXJrU3F1YXJlLCBmYUhhbmRIb2xkaW5nRHJvcGxldCwgZmFIYW5kSG9sZGluZ1dhdGVyLCBmYVdvblNpZ24sIGZhS3J3LCBmYVdvbiwgZmFPYmplY3RVbmdyb3VwMiwgZmFDb21tZW50MiwgZmFIaWxsQXZhbGFuY2hlLCBmYUFycm93c1RvRXllLCBmYVNub3dwbG93LCBmYUNoYXJ0R2FudHQsIGZhVmlkZW8sIGZhVmlkZW9DYW1lcmEsIGZhQ2hlc3NQYXduMiwgZmFTeW5hZ29ndWUsIGZhQnVpbGRpbmdDaXJjbGVDaGVjaywgZmFDYWxlbmRhclBsdXMyLCBmYVdoZWVsY2hhaXJNb3ZlLCBmYVdoZWVsY2hhaXJBbHQsIGZhVXNlclNoaWVsZCwgZmFCb2xkLCBmYUhlYXJ0UHVsc2UsIGZhSGVhcnRiZWF0LCBmYVNxdWFyZVJvb3RWYXJpYWJsZSwgZmFTcXVhcmVSb290QWx0LCBmYUhhbmRzQnViYmxlcywgZmFIYW5kc1dhc2gsIGZhTWFya2VyLCBmYUNsaXBib2FyZDIsIGZhUGxhY2VPZldvcnNoaXAsIGZhQ2FubmFiaXMsIGZhUGVvcGxlUm9vZiwgZmFEaXNlYXNlLCBmYUJvb2tCaWJsZSwgZmFCaWJsZSwgZmFDaGVzc0JvYXJkLCBmYU1hcnMsIGZhTGFwdG9wLCBmYVVzZXJYbWFyaywgZmFVc2VyVGltZXMsIGZhRmxhZ1VzYSwgZmFIYW5kTWlkZGxlRmluZ2VyLCBmYU1vcnRhclBlc3RsZSwgZmFIZWFkU2lkZUNvdWdoLCBmYVBsYW5lTG9jaywgZmFCYXR0ZXJ5VGhyZWVRdWFydGVycywgZmFCYXR0ZXJ5NCwgZmFGcmFuY1NpZ24sIGZhRmlsdGVyQ2lyY2xlRG9sbGFyLCBmYUZ1bm5lbERvbGxhciwgZmFDaGVlc2UsIGZhQ2lyY2xlSCwgZmFIb3NwaXRhbFN5bWJvbCwgZmFTY2hvb2wsIGZhRGljZUZpdmUsIGZhVG9ybmFkbywgZmFKZXRGaWdodGVyLCBmYUZpZ2h0ZXJKZXQsIGZhVGh1bWJzRG93bjIsIGZhQnJvb20sIGZhRmlsZUltcG9ydCwgZmFBcnJvd1JpZ2h0VG9GaWxlLCBmYVV0ZW5zaWxzLCBmYUN1dGxlcnksIGZhSWRCYWRnZTIsIGZhU3BpZGVyLCBmYU1vYmlsZVJldHJvLCBmYVNpZ25zUG9zdCwgZmFNYXBTaWducywgZmFHcm91cEFycm93c1JvdGF0ZSwgZmFBcnJvd3NTcGxpdFVwQW5kTGVmdCwgZmFGaWxsRHJpcCwgZmFTaGllbGRIZWFydCwgZmFQZXJzb25Ta2lpbmdOb3JkaWMsIGZhU2tpaW5nTm9yZGljLCBmYVNxdWFyZUNoZWNrMiwgZmFDaGVja1NxdWFyZTIsIGZhQmF0aCwgZmFCYXRodHViLCBmYUNoZXNzQmlzaG9wMiwgZmFQcmVzY3JpcHRpb25Cb3R0bGVNZWRpY2FsLCBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCwgZmFEcmF3UG9seWdvbiwgZmFWZWN0b3JQb2x5Z29uLCBmYUlDdXJzb3IsIGZhSGVhcnRDaXJjbGVQbHVzLCBmYVNoaWVsZERvZywgZmFHcmVhdGVyVGhhbkVxdWFsLCBmYUVudmVsb3BlT3BlbjIsIGZhTW91bmQsIGZhVm9pY2VtYWlsLCBmYVZlc3QsIGZhQXVkaW9EZXNjcmlwdGlvbiwgZmFXLCBmYUV5ZURyb3BwZXIsIGZhRXllRHJvcHBlckVtcHR5LCBmYUV5ZWRyb3BwZXIsIGZhQ2lyY2xlWG1hcmsyLCBmYVRpbWVzQ2lyY2xlMiwgZmFYbWFya0NpcmNsZTIsIGZhVHJhaWxlciwgZmFUdXJraXNoTGlyYVNpZ24sIGZhVHJ5LCBmYVR1cmtpc2hMaXJhLCBmYVZvbGNhbm8sIGZhV2FuZFNwYXJrbGVzLCBmYU1pY3JvcGhvbmUsIGZhQ3Jvd24sIGZhVGVudEFycm93VHVybkxlZnQsIGZhVHJ1Y2tGYXN0LCBmYVNoaXBwaW5nRmFzdCwgZmFVc2VyUGVuLCBmYVVzZXJFZGl0LCBmYVVzZXJDbG9jaywgZmFTaG93ZXIsIGZhU3F1YXJlQ2FyZXRVcDIsIGZhQ2FyZXRTcXVhcmVVcDIsIGZhTWFwTG9jYXRpb24sIGZhTWFwTWFya2VkLCBmYVBlbkZhbmN5LCBmYUV1cm9TaWduLCBmYUV1ciwgZmFFdXJvLCBmYUhvdXNlQ2lyY2xlWG1hcmssIGZhTGlyYVNpZ24sIGZhWWVuU2lnbiwgZmFDbnksIGZhSnB5LCBmYVJtYiwgZmFZZW4sIGZhQm94T3BlbiwgZmFUcnVja0ZpZWxkLCBmYUxvY2F0aW9uUGluTG9jaywgZmFQZXJzb25QcmF5aW5nLCBmYVByYXksIGZhQ2xpcGJvYXJkTGlzdCwgZmFTYWNrRG9sbGFyLCBmYU1vdW50YWluU3VuLCBmYUFycm93VXBXaWRlU2hvcnQsIGZhU29ydEFtb3VudFVwLCBmYVVzZXJzTGluZSwgZmFTdGFyT2ZEYXZpZCwgZmFOb3Rlc01lZGljYWwsIGZhQXVzdHJhbFNpZ24sIGZhQ2xpcGJvYXJkVXNlciwgZmFGaWxlSW1hZ2UyLCBmYVNxdWFyZUNhcmV0UmlnaHQyLCBmYUNhcmV0U3F1YXJlUmlnaHQyLCBmYVZpYWwsIGZhSGVsaWNvcHRlciwgZmFNaXR0ZW4sIGZhR2FzUHVtcCwgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLCBmYVBlcnNvblNrYXRpbmcsIGZhU2thdGluZywgZmFTdW4yLCBmYUJhc2ViYWxsLCBmYUJhc2ViYWxsQmFsbCwgZmFJbWFnZTIsIGZhTm90ZGVmLCBmYUJhc2tldGJhbGwsIGZhQmFza2V0YmFsbEJhbGwsIGZhUGVuY2lsLCBmYVBlbmNpbEFsdCwgZmFQZXJzb25XYWxraW5nQXJyb3dMb29wTGVmdCwgZmFEaWNlU2l4LCBmYUFuZ2xlc0Rvd24sIGZhQW5nbGVEb3VibGVEb3duLCBmYVN5cmluZ2UsIGZhV2hlYXRBd24sIGZhV2hlYXRBbHQsIGZhUGxhbmVVcCwgZmFBbGlnbkNlbnRlciwgZmFIb2NrZXlQdWNrLCBmYUNpcmNsZUFycm93TGVmdCwgZmFBcnJvd0NpcmNsZUxlZnQsIGZhUGx1Z0NpcmNsZUJvbHQsIGZhUmVzdHJvb20sIGZhQW5jaG9yTG9jaywgZmFUaW1lbGluZSwgZmFMaWdodGJ1bGIyLCBmYUNpcmNsZUFycm93UmlnaHQsIGZhQXJyb3dDaXJjbGVSaWdodCwgZmFNYXJzQW5kVmVudXMsIGZhTmV0d29ya1dpcmVkLCBmYUJ1aWxkaW5nU2hpZWxkLCBmYUNvZGUsIGZhRmVhdGhlclBvaW50ZWQsIGZhRmVhdGhlckFsdCwgZmFGaWxlQ2lyY2xlUXVlc3Rpb24sIGZhU2lnbmF0dXJlLCBmYUVhcnRoQW1lcmljYXMsIGZhRWFydGgsIGZhRWFydGhBbWVyaWNhLCBmYUdsb2JlQW1lcmljYXMsIGZhQ2Fycm90LCBmYVRlbXBlcmF0dXJlRnVsbCwgZmFUZW1wZXJhdHVyZTQsIGZhVGhlcm1vbWV0ZXI0LCBmYVRoZXJtb21ldGVyRnVsbCwgZmFUYWJsZUNlbGxzUm93TG9jaywgZmFCb2x0TGlnaHRuaW5nLCBmYUNsb3VkU2hvd2Vyc1dhdGVyLCBmYUFycm93VXBMb25nLCBmYUxvbmdBcnJvd1VwLCBmYUFkZHJlc3NDYXJkMiwgZmFDb250YWN0Q2FyZDIsIGZhVmNhcmQyLCBmYUFuZ2xlUmlnaHQsIGZhRmFjZU1laDIsIGZhTWVoMiwgZmFBcnJvd1VwRnJvbUdyb3VuZFdhdGVyLCBmYU1hcDIsIGZhVXNlclBsdXMsIGZhVmVudXMsIGZhRGlhZ3JhbVN1Y2Nlc3NvciwgZmFIZWFkU2lkZUNvdWdoU2xhc2gsIGZhRGlhZ3JhbVByb2plY3QsIGZhUHJvamVjdERpYWdyYW0sIGZhVGVybWluYWwsIGZhSG91c2VGaXJlLCBmYU1hc2ssIGZhSHVycmljYW5lLCBmYUVhcnRoQWZyaWNhLCBmYUdsb2JlQWZyaWNhLCBmYVRodW1idGFjaywgZmFUaHVtYlRhY2ssIGZhSGFuZFBvaW50RG93bjIsIGZhRmFjZU1laEJsYW5rMiwgZmFNZWhCbGFuazIsIGZhVGVtcGVyYXR1cmVFbXB0eSwgZmFUZW1wZXJhdHVyZTAsIGZhVGhlcm1vbWV0ZXIwLCBmYVRoZXJtb21ldGVyRW1wdHksIGZhQm9yZGVyTm9uZSwgZmFIaWdobGlnaHRlciwgZmFNb25leUJpbGxXYXZlLCBmYVRvaWxldFBhcGVyU2xhc2gsIGZhRmlsZVNoaWVsZCwgZmFUZXh0SGVpZ2h0LCBmYUZhY2VHcmluVG9uZ3VlMiwgZmFHcmluVG9uZ3VlMiwgZmFGaWxlU2lnbmF0dXJlLCBmYUJ1aWxkaW5nV2hlYXQsIGZhUGx1Z0NpcmNsZU1pbnVzLCBmYUZ1dGJvbDIsIGZhRnV0Ym9sQmFsbDIsIGZhU29jY2VyQmFsbDIsIGZhQ2lyY2xlUGx1cywgZmFQbHVzQ2lyY2xlLCBmYUJyYXppbGlhblJlYWxTaWduLCBmYVN0YXJBbmRDcmVzY2VudCwgZmFGYWNlU3VycHJpc2UyLCBmYVN1cnByaXNlMiwgZmFIb3NwaXRhbFVzZXIsIGZhQXJyb3dEb3duVXBMb2NrLCBmYUZvbGRlcjIsIGZhRm9sZGVyQmxhbmsyLCBmYUhvbGx5QmVycnksIGZhVmVudXNEb3VibGUsIGZhQ2xpcGJvYXJkUXVlc3Rpb24sIGZhSG90ZG9nLCBmYUFycm93VXBGcm9tQnJhY2tldCwgZmFNaWNyb3Njb3BlLCBmYUNsb3VkMiwgZmFCYXNlYmFsbEJhdEJhbGwsIGZhQ2FyUmVhciwgZmFDYXJBbHQsIGZhVGh1bWJ0YWNrU2xhc2gsIGZhVGh1bWJUYWNrU2xhc2gsIGZhUGx1c01pbnVzLCBmYUhvdXNlQ2lyY2xlQ2hlY2ssIGZhQ2FsZW5kYXJEYXksIGZhQ2lyY2xlMiwgZmFNb2JpbGVWaWJyYXRlLCBmYUZhY2VHcmluU3F1aW50MiwgZmFHcmluU3F1aW50MiwgZmFVc2Vyc0JldHdlZW5MaW5lcywgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyaywgZmFUYWJsZUxpc3QsIGZhVGhMaXN0LCBmYUZsYXNrVmlhbCwgZmFDaXJjbGVFeGNsYW1hdGlvbiwgZmFFeGNsYW1hdGlvbkNpcmNsZSwgZmFUYXhpLCBmYUNhYiwgZmFUZXh0U2xhc2gsIGZhUmVtb3ZlRm9ybWF0LCBmYVBlb3BsZVB1bGxpbmcsIGZhQmFja3dhcmQsIGZhQ2FyQnVyc3QsIGZhQ2FyQ3Jhc2gsIGZhTGluaywgZmFDaGFpbiwgZmFCYWNrd2FyZFN0ZXAsIGZhU3RlcEJhY2t3YXJkLCBmYVgsIGZhQ2lyY2xlVXNlcjIsIGZhVXNlckNpcmNsZTIsIGZhUmVjdGFuZ2xlTGlzdDIsIGZhTGlzdEFsdDIsIGZhSGFuZDIsIGZhSGFuZFBhcGVyMiwgZmFWYW5TaHV0dGxlLCBmYVNodXR0bGVWYW4sIGZhU3RhaXJzLCBmYUhvcnNlSGVhZCwgZmFWYXVsdCwgZmFEcnVtU3RlZWxwYW4sIGZhVGh1bWJzVXAyLCBmYVN0YW1wLCBmYU1lbm9yYWgsIGZhQ2hpbGRyZW4sIGZhQ2hhcnRMaW5lLCBmYUxpbmVDaGFydCwgZmFTcXVhcmVFbnZlbG9wZSwgZmFFbnZlbG9wZVNxdWFyZSwgZmFCYW5TbW9raW5nLCBmYVNtb2tpbmdCYW4sIGZhVHJ1Y2tGcm9udCwgZmFCdWlsZGluZzIsIGZhQnVsbHNleWUsIGZhQXJyb3dMZWZ0TG9uZywgZmFMb25nQXJyb3dMZWZ0LCBmYUNoZXNzUm9vazIsIGZhQmxlbmRlclBob25lLCBmYUFycm93VHVyblVwLCBmYUxldmVsVXAsIGZhQmljeWNsZSwgZmFDaXJjbGVBcnJvd0Rvd24sIGZhQXJyb3dDaXJjbGVEb3duLCBmYUdlYXIsIGZhQ29nLCBmYU1hcnNBbmRWZW51c0J1cnN0LCBmYU90dGVyLCBmYUNpcmNsZUNoZXZyb25MZWZ0LCBmYUNoZXZyb25DaXJjbGVMZWZ0LCBmYUNpcmNsZVF1ZXN0aW9uMiwgZmFRdWVzdGlvbkNpcmNsZTIsIGZhV2Fsa2llVGFsa2llLCBmYVVzZXJHcm91cCwgZmFVc2VyRnJpZW5kcywgZmFIb3VzZUNoaW1uZXksIGZhSG9tZUxnLCBmYVJpZ2h0RnJvbUJyYWNrZXQsIGZhU2lnbk91dEFsdCwgZmFGaWxlMiwgZmFQbGFuZVNsYXNoLCBmYUNsb3VkU2hvd2Vyc0hlYXZ5LCBmYVBlcnNvbkZhbGxpbmcsIGZhVHVybkRvd24sIGZhTGV2ZWxEb3duQWx0LCBmYVVwUmlnaHRBbmREb3duTGVmdEZyb21DZW50ZXIsIGZhRXhwYW5kQWx0LCBmYVVzZXJUYWcsIGZhSGFuZFNwYXJrbGVzLCBmYUFycm93c1RvRG90LCBmYUZhY2VTYWRDcnkyLCBmYVNhZENyeTIsIGZhRG9uZ1NpZ24sIGZhUGVvcGxlTGluZSwgZmFTcXVhcmVSc3MsIGZhUnNzU3F1YXJlLCBmYUNhbGVuZGFyTWludXMyLCBmYUNoYXJ0RGlhZ3JhbSwgZmFGYWNlVGlyZWQyLCBmYVRpcmVkMiwgZmFIYW5kUG9pbnRSaWdodDIsIGZhQXJyb3dVcCwgZmFDdWJlc1N0YWNrZWQsIGZhQ2hpbGRDb21iYXRhbnQsIGZhQ2hpbGRSaWZsZSwgZmFWZXN0UGF0Y2hlcywgZmFNYXJ0aW5pR2xhc3NFbXB0eSwgZmFHbGFzc01hcnRpbmksIGZhTWFnbmV0LCBmYVJvYWRCYXJyaWVyLCBmYUNvbXBhc3NEcmFmdGluZywgZmFEcmFmdGluZ0NvbXBhc3MsIGZhU3F1YXJlUGVyc29uQ29uZmluZWQsIGZhUGxhdGVXaGVhdCwgZmFTaWduSGFuZ2luZywgZmFTaWduLCBmYUNhckJhdHRlcnksIGZhQmF0dGVyeUNhciwgZmFTaGlydCwgZmFUU2hpcnQsIGZhVHNoaXJ0LCBmYVBhcmFncmFwaCwgZmFFbnZlbG9wZXNCdWxrLCBmYU1haWxCdWxrLCBmYUd1aXRhciwgZmFTdWl0Y2FzZSwgZmFDaXJjbGVVcDIsIGZhQXJyb3dBbHRDaXJjbGVVcDIsIGZhRiwgZmFYbWFya3NMaW5lcywgZmFFYXJ0aE9jZWFuaWEsIGZhR2xvYmVPY2VhbmlhLCBmYUNvbW1lbnRTbGFzaCwgZmFQbGF5LCBmYVZpYWxDaXJjbGVDaGVjaywgZmFCcmlkZ2VDaXJjbGVDaGVjaywgZmFDZWRpU2lnbiwgZmFQdXp6bGVQaWVjZSwgZmFIZWxtZXRVbiwgZmFHbGFzc1dhdGVyLCBmYUhlYXJ0Q2lyY2xlQm9sdCwgZmFQdW1wU29hcCwgZmFIYW5kU2Npc3NvcnMyLCBmYURvbGx5LCBmYURvbGx5Qm94LCBmYVBhcGVyY2xpcCwgZmFEZW1vY3JhdCwgZmFTcXVhcmVBcnJvd1VwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlLCBmYUZlcnJ5LCBmYU1vc3F1aXRvLCBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCwgZmFMZWZ0UmlnaHQsIGZhQXJyb3dzQWx0SCwgZmFWaXJ1cywgZmFHZW0yLCBmYVRvaWxldCwgZmFTaW5nbGVRdW90ZUxlZnQsIGZhTW9uZXlCaWxscywgZmFUYWJsZXRCdXR0b24sIGZhUmVjdGFuZ2xlWG1hcmsyLCBmYVJlY3RhbmdsZVRpbWVzMiwgZmFUaW1lc1JlY3RhbmdsZTIsIGZhV2luZG93Q2xvc2UyLCBmYVdyZW5jaCwgZmFUcmFzaENhbjIsIGZhVHJhc2hBbHQyLCBmYVRhYmxlQ2VsbHMsIGZhVGgsIGZhUmliYm9uLCBmYUxhbmRtYXJrRmxhZywgZmFVcERvd25MZWZ0UmlnaHQsIGZhQXJyb3dzQWx0LCBmYUNhclNpZGUsIGZhVHJhc2hBcnJvd1VwLCBmYVRyYXNoUmVzdG9yZSwgZmFMaWZlUmluZzIsIGZhQ29weXJpZ2h0MiwgZmFGaWxlUHJlc2NyaXB0aW9uLCBmYUVyYXNlciwgZmFIb3VyZ2xhc3NTdGFydCwgZmFIb3VyZ2xhc3MxLCBmYUNpcmNsZUxlZnQyLCBmYUFycm93QWx0Q2lyY2xlTGVmdDIsIGZhQ3J1emVpcm9TaWduLCBmYVNtb2tpbmcsIGZhU3F1YXJlUG9sbFZlcnRpY2FsLCBmYVBvbGwsIGZhUGVyc29uQ2lyY2xlTWludXMsIGZhQmlvaGF6YXJkLCBmYUJlbGxDb25jaWVyZ2UsIGZhQ29uY2llcmdlQmVsbCwgZmFSdWxlckhvcml6b250YWwsIGZhSG9yc2UsIGZhQ2FsZW5kYXIyLCBmYUhhbmRzSG9sZGluZ0NoaWxkLCBmYUl0YWxpYywgZmFLaGFuZGEsIGZhRmFjZUZyb3duT3BlbjIsIGZhRnJvd25PcGVuMiwgZmFDaGVjaywgZmFGaW5nZXJwcmludCwgZmFDaGFyZ2luZ1N0YXRpb24sIGZhVXNlckxvY2ssIGZhTW9iaWxlU2NyZWVuQnV0dG9uLCBmYU1vYmlsZUFsdCwgZmFBbmNob3JDaXJjbGVDaGVjaywgZmFQZXJzb25XYWxraW5nV2l0aENhbmUsIGZhQmxpbmQsIGZhRmlsZVdhdmVmb3JtLCBmYUZpbGVNZWRpY2FsQWx0LCBmYUhvdXNlQ3JhY2ssIGZhSGF0V2l6YXJkLCBmYVVzZXJEb2N0b3IsIGZhVXNlck1kLCBmYUNoYXJ0QmFyMiwgZmFCYXJDaGFydDIsIGZhU3ByYXlDYW5TcGFya2xlcywgZmFBaXJGcmVzaGVuZXIsIGZhQmFodFNpZ24sIGZhVGVtcGVyYXR1cmVBcnJvd1VwLCBmYVRlbXBlcmF0dXJlVXAsIGZhV2ViQXdlc29tZTIsIGZhTm9uQmluYXJ5LCBmYU4sIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LCBmYUFycm93cywgZmFIb3VzZTIsIGZhSG9tZTIsIGZhSG9tZUFsdDIsIGZhSG9tZUxnQWx0MiwgZmFTcGlubmVyLCBmYUdhdmVsLCBmYUxlZ2FsLCBmYVRpY2tldFNpbXBsZSwgZmFUaWNrZXRBbHQsIGZhRG92ZSwgZmFUYXJwRHJvcGxldCwgZmFUcmVlQ2l0eSwgZmFUdXJuVXAsIGZhTGV2ZWxVcEFsdCwgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIsIGZhVGVtcGVyYXR1cmUxLCBmYVRoZXJtb21ldGVyMSwgZmFUaGVybW9tZXRlclF1YXJ0ZXIsIGZhU2xpZGVycywgZmFTbGlkZXJzSCwgZmFNb3NxdWUsIGZhSCwgZmFJbmZvLCBmYVBlcnNvbldhbGtpbmcsIGZhV2Fsa2luZywgZmFBcnJvd1R1cm5Eb3duLCBmYUxldmVsRG93biwgZmFSb2FkLCBmYVNwaXJhbCwgZmFGYWNlRnJvd24yLCBmYUZyb3duMiwgZmFXaW5lR2xhc3NFbXB0eSwgZmFXaW5lR2xhc3NBbHQsIGZhQ2xhcHBlcmJvYXJkLCBmYUZvcndhcmRTdGVwLCBmYVN0ZXBGb3J3YXJkLCBmYVNxdWFyZVVwUmlnaHQsIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LCBmYUJvb2tKb3VybmFsV2hpbGxzLCBmYUpvdXJuYWxXaGlsbHMsIGZhQ2hhbXBhZ25lR2xhc3NlcywgZmFHbGFzc0NoZWVycywgZmFEdW1wc3RlciwgZmFIZWFydENpcmNsZVhtYXJrLCBmYUNvbXB1dGVyLCBmYVdhbmRNYWdpYywgZmFNYWdpYywgZmFCcmFpbiwgZmFCcmllZmNhc2VNZWRpY2FsLCBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uLCBmYUNvZGVDb21taXQsIGZhUGVyc29uQnJlYXN0ZmVlZGluZywgZmFQZXJzb25SYXlzLCBmYU1hbmF0U2lnbiwgZmFTb3J0LCBmYVVuc29ydGVkLCBmYUNpcmNsZVJhZGlhdGlvbiwgZmFSYWRpYXRpb25BbHQsIGZhTGFwdG9wQ29kZSwgZmFTaW5rLCBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLCBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLCBmYU1pY3JvcGhvbmVBbHRTbGFzaCwgZmFTZXJ2ZXIsIGZhVXNlcjIsIGZhVXNlckFsdDIsIGZhVXNlckxhcmdlMiwgZmFTbm93Zmxha2UyLCBmYVNrdWxsQ3Jvc3Nib25lcywgZmFQZXNvU2lnbiwgZmFXaW5lR2xhc3MsIGZhVGVtcGVyYXR1cmVIYWxmLCBmYVRlbXBlcmF0dXJlMiwgZmFUaGVybW9tZXRlcjIsIGZhVGhlcm1vbWV0ZXJIYWxmLCBmYVRpY2tldCwgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLCBmYUFycm93c1R1cm5SaWdodCwgZmFDYW5keUNhbmUsIGZhV2hlZWxjaGFpciwgZmFTcGVsbENoZWNrLCBmYVZvbHVtZU9mZiwgZmFMdW5ncywgZmFCb29rbWFyazIsIGZhQmFyY29kZSwgZmFMaXN0T2wsIGZhTGlzdDEyLCBmYUxpc3ROdW1lcmljLCBmYUZpbGVDaXJjbGVYbWFyaywgZmFDdWJlLCBmYVRhcGUsIGZhQm9tYiwgZmFTY2FsZVVuYmFsYW5jZWQsIGZhQmFsYW5jZVNjYWxlTGVmdCwgZmFTcXVhcmVDYXJldExlZnQyLCBmYUNhcmV0U3F1YXJlTGVmdDIsIGZhUnVsZXIsIGZhSSwgZmFWb2x1bWVYbWFyaywgZmFWb2x1bWVNdXRlLCBmYVZvbHVtZVRpbWVzLCBmYUFyY2h3YXksIGZhUGVyc29uRGlnZ2luZywgZmFEaWdnaW5nLCBmYUdhdWdlSGlnaCwgZmFUYWNob21ldGVyQWx0LCBmYVRhY2hvbWV0ZXJBbHRGYXN0LCBmYUdlbmRlcmxlc3MsIGZhQ2xvdWRTdW4sIGZhQXJyb3dSaWdodCwgZmFIYW5kc2hha2UyLCBmYUhhbmRzaGFrZUFsdDIsIGZhSGFuZHNoYWtlU2ltcGxlMiwgZmFQZXJzb25Ta2lpbmcsIGZhU2tpaW5nLCBmYUJyaWRnZVdhdGVyLCBmYUJ1aWxkaW5nTmdvLCBmYUlnbG9vLCBmYUNpcmNsZURvbGxhclRvU2xvdCwgZmFEb25hdGUsIGZhWSwgZmFGYWNlU21pbGVXaW5rMiwgZmFTbWlsZVdpbmsyLCBmYURpY2VGb3VyLCBmYUZhY2VHcmluU3F1aW50VGVhcnMyLCBmYUdyaW5TcXVpbnRUZWFyczIsIGZhRmlsZUF1ZGlvMiwgZmFBcnJvd3NEb3duVG9MaW5lLCBmYUcsIGZhVmloYXJhLCBmYUZsYWdDaGVja2VyZWQsIGZhR2F1Z2VTaW1wbGUsIGZhR2F1Z2VTaW1wbGVNZWQsIGZhVGFjaG9tZXRlckF2ZXJhZ2UsIGZhUmlnaHRMZWZ0LCBmYUV4Y2hhbmdlQWx0LCBmYVBpbGxzLCBmYUV4cGxvc2lvbiwgZmFBcnJvd3NEb3duVG9QZW9wbGUsIGZhVXNlcnNWaWV3ZmluZGVyLCBmYUNhck9uLCBmYVNsZWlnaCwgZmFEdW1iYmVsbCwgZmFCYWJ5Q2FycmlhZ2UsIGZhQ2FycmlhZ2VCYWJ5LCBmYUtpd2lCaXJkLCBmYUNhbGVuZGFyWG1hcmsyLCBmYUNhbGVuZGFyVGltZXMyLCBmYUNpcmNsZURvd24yLCBmYUFycm93QWx0Q2lyY2xlRG93bjIsIGZhRmlsZU1lZGljYWwsIGZhWG1hcmssIGZhQ2xvc2UsIGZhTXVsdGlwbHksIGZhUmVtb3ZlLCBmYVRpbWVzLCBmYVNoYXBlcywgZmFUcmlhbmdsZUNpcmNsZVNxdWFyZSwgZmFEaWNlT25lLCBmYUxvY2tPcGVuLCBmYVBlcHBlckhvdCwgZmFEcm9wbGV0U2xhc2gsIGZhVGludFNsYXNoLCBmYURyb3BsZXQsIGZhVGludCwgZmFGaWxlTGluZXMyLCBmYUZpbGVBbHQyLCBmYUZpbGVUZXh0MiwgZmFDb21tZW50c0RvbGxhciwgZmFNYWduaWZ5aW5nR2xhc3NMb2NhdGlvbiwgZmFTZWFyY2hMb2NhdGlvbiwgZmFGaWxlSW52b2ljZSwgZmFQZW50YWdvbiwgZmFSZXB1YmxpY2FuLCBmYVNob3AsIGZhU3RvcmVBbHQsIGZhRmlsbSwgZmFGaWxtQWx0LCBmYUZpbG1TaW1wbGUsIGZhQnVpbGRpbmdDaXJjbGVYbWFyaywgZmFDb21tZW50czIsIGZhVGFncywgZmFHdW4sIGZhQ2lyY2xlQ2hlY2syLCBmYUNoZWNrQ2lyY2xlMiwgZmFJZENhcmRDbGlwLCBmYUlkQ2FyZEFsdCwgZmFNb29uMiwgZmFPaWxXZWxsLCBmYVRhY2hvZ3JhcGhEaWdpdGFsLCBmYURpZ2l0YWxUYWNob2dyYXBoLCBmYVRhYmxldCwgZmFUYWJsZXRBbmRyb2lkLCBmYVJ1YmxlU2lnbiwgZmFSb3VibGUsIGZhUnViLCBmYVJ1YmxlLCBmYUNsb3NlZENhcHRpb25pbmcyLCBmYVBlbiwgZmFQbGFuZSwgZmFJbWFnZXMyLCBmYU1vYmlsZVNjcmVlbiwgZmFNb2JpbGVBbmRyb2lkQWx0LCBmYUd1YXJhbmlTaWduLCBmYUJhZ1Nob3BwaW5nLCBmYVNob3BwaW5nQmFnLCBmYUNpcmNsZVJpZ2h0MiwgZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiwgZmFQaG9uZVZvbHVtZSwgZmFWb2x1bWVDb250cm9sUGhvbmUsIGZhQ3ViZXMsIGZhUGhvbmUsIGZhVG9yaWlHYXRlLCBmYUJhY29uLCBmYVBlcnNvbkZhbGxpbmdCdXJzdCwgZmFRdW90ZVJpZ2h0LCBmYVF1b3RlUmlnaHRBbHQsIGZhSG91c2VNZWRpY2FsRmxhZywgZmFQcmVzY3JpcHRpb24sIGZhRGljZVRocmVlLCBmYUJ1aWxkaW5nTG9jaywgZmFJZENhcmQyLCBmYURyaXZlcnNMaWNlbnNlMiwgZmFDaXJjbGVQbGF5MiwgZmFQbGF5Q2lyY2xlMiwgZmFGYWNlTGF1Z2hCZWFtMiwgZmFMYXVnaEJlYW0yLCBmYUxlYWYsIGZhSG91c2VDaGltbmV5VXNlciwgZmFSb3RhdGVSaWdodCwgZmFSZWRvQWx0LCBmYVJvdGF0ZUZvcndhcmQsIGZhVG9vdGgsIGZhSG91c2VDaGltbmV5V2luZG93LCBmYU1vdG9yY3ljbGUsIGZhQmFja3dhcmRGYXN0LCBmYUZhc3RCYWNrd2FyZCwgZmFBZGRyZXNzQm9vazIsIGZhQ29udGFjdEJvb2syLCBmYVNhaWxib2F0LCBmYUJvb2tCb29rbWFyaywgZmFNYWduaWZ5aW5nR2xhc3NBcnJvd1JpZ2h0LCBmYU1pY3JvcGhvbmVMaW5lcywgZmFNaWNyb3Bob25lQWx0LCBmYVJlcGx5QWxsLCBmYU1haWxSZXBseUFsbCwgZmFVbml2ZXJzYWxBY2Nlc3MsIGZhVG9pbGV0UGFwZXIsIGZhVG9pbGV0UGFwZXJBbHQsIGZhVG9pbGV0UGFwZXJCbGFuaywgZmFWckNhcmRib2FyZCwgZmFQaXp6YVNsaWNlLCBmYVNwcmF5Q2FuLCBmYVZvbHVtZUxvdywgZmFWb2x1bWVEb3duLCBmYUNyb3NzLCBmYVBlcnNvbiwgZmFNYWxlLCBmYUhvdXJnbGFzczMsIGZhSG91cmdsYXNzRW1wdHkyLCBmYUZpc2gsIGZhRHJ1bXN0aWNrQml0ZSwgZmFDaGFydFNpbXBsZSwgZmFBdG9tLCBmYVAsIGZhSmV0RmlnaHRlclVwLCBmYVBsdWdDaXJjbGVYbWFyaywgZmFTaGVldFBsYXN0aWMsIGZhViwgZmFMaXN0LCBmYUxpc3RTcXVhcmVzLCBmYVNvbGFyUGFuZWwsIGZhTGFuZE1pbmVPbiwgZmFIZWFkcGhvbmVzMiwgZmFIZWFkcGhvbmVzQWx0MiwgZmFIZWFkcGhvbmVzU2ltcGxlMiwgZmFCdXMsIGZhRmlsZVBvd2VycG9pbnQyLCBmYVF1b3RlTGVmdCwgZmFRdW90ZUxlZnRBbHQsIGZhQ2hldnJvbkRvd24sIGZhRWFydGhBc2lhLCBmYUdsb2JlQXNpYSwgZmFDZW50U2lnbiwgZmFTaGllbGRDYXQsIGZhU2Nob29sQ2lyY2xlQ2hlY2ssIGZhTWFydGluaUdsYXNzLCBmYUdsYXNzTWFydGluaUFsdCwgZmFQbHVnLCBmYVBhbm9yYW1hLCBmYUNsb2NrUm90YXRlTGVmdCwgZmFIaXN0b3J5LCBmYUphcldoZWF0LCBmYUNsb3VkQXJyb3dEb3duLCBmYUNsb3VkRG93bmxvYWQsIGZhQ2xvdWREb3dubG9hZEFsdCwgZmFUcnVja1JhbXBCb3gsIGZhVHJ1Y2tMb2FkaW5nLCBmYUFuZ2xlRG93biwgZmFQbHVnQ2lyY2xlQ2hlY2ssIGZhV2luZG93TWF4aW1pemUyLCBmYUhhbmRzSG9sZGluZ0NpcmNsZSwgZmFMb2NhdGlvblBpbiwgZmFNYXBNYXJrZXIsIGZhQm93bGluZ0JhbGwsIGZhQ2FydEZsYXRiZWQsIGZhRG9sbHlGbGF0YmVkLCBmYUhvdXNlVXNlciwgZmFIb21lVXNlciwgZmFHaG9zdCwgZmFDb21tZW50Tm9kZXMsIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lLCBmYVBsdWdDaXJjbGVQbHVzLCBmYVBlcnNvblN3aW1taW5nLCBmYVN3aW1tZXIsIGZhQ29tbWVudERvdHMyLCBmYUNvbW1lbnRpbmcyLCBmYUNoYXJ0UGllLCBmYVBpZUNoYXJ0LCBmYUZyb2csIGZhV2luZUJvdHRsZSwgZmFJbmJveCwgZmFTcXVhcmVILCBmYUhTcXVhcmUsIGZhSG91c2VNZWRpY2FsLCBmYUNpcmNsZUNoZXZyb25SaWdodCwgZmFDaGV2cm9uQ2lyY2xlUmlnaHQsIGZhRmlsZUNzdiwgZmFIYXRDb3dib3ksIGZhRmFjZUdyaW5Ub25ndWVXaW5rMiwgZmFHcmluVG9uZ3VlV2luazIsIGZhTCwgZmFBcnJvd0Rvd25TaG9ydFdpZGUsIGZhU29ydEFtb3VudERlc2MsIGZhU29ydEFtb3VudERvd25BbHQsIGZhSG91cmdsYXNzSGFsZjIsIGZhSG91cmdsYXNzMjIsIGZhU3Bvb24sIGZhVXRlbnNpbFNwb29uLCBmYUNyZWRpdENhcmQyLCBmYUNyZWRpdENhcmRBbHQyLCBmYUZpbGVJbnZvaWNlRG9sbGFyLCBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmcsIGZhUGFzdGFmYXJpYW5pc20sIGZhTWFydGluaUdsYXNzQ2l0cnVzLCBmYUNvY2t0YWlsLCBmYUJ1bGxob3JuLCBmYUJveFRpc3N1ZSwgZmFNYXR0cmVzc1BpbGxvdywgZmFDaGV2cm9uTGVmdCwgZmFDbG91ZE1vb25SYWluLCBmYUFycm93RG93bjE5LCBmYVNvcnROdW1lcmljQXNjLCBmYVNvcnROdW1lcmljRG93biwgZmFIYW5kU3BvY2syLCBmYVdhbmRNYWdpY1NwYXJrbGVzLCBmYU1hZ2ljV2FuZFNwYXJrbGVzLCBmYUNvbW1lbnRNZWRpY2FsLCBmYUJlbGxTbGFzaDIsIGZhSGFuZHNoYWtlU2xhc2gsIGZhSGFuZHNoYWtlQWx0U2xhc2gsIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2gsIGZhQm90dGxlV2F0ZXIsIGZhRGljZUQyMCwgZmFBcnJvd0Rvd25aQSwgZmFTb3J0QWxwaGFEZXNjLCBmYVNvcnRBbHBoYURvd25BbHQsIGZhQnJ1c2gsIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LCBmYUFycm93VXBTaG9ydFdpZGUsIGZhU29ydEFtb3VudFVwQWx0LCBmYUdyaXBWZXJ0aWNhbCwgZmFHcmlkVmVydGljYWwsIGZhQ2FyVHVubmVsLCBmYUNoYXJ0Q29sdW1uLCBmYVRydWNrQXJyb3dSaWdodCwgZmFUdiwgZmFUZWxldmlzaW9uLCBmYVR2QWx0LCBmYVNlY3Rpb24sIGZhUGVhY2UsIGZhU3RhcjIsIGZhRmxhZzIsIGZhVHJpYW5nbGVFeGNsYW1hdGlvbiwgZmFFeGNsYW1hdGlvblRyaWFuZ2xlLCBmYVdhcm5pbmcsIGZhU2Nob29sQ2lyY2xlRXhjbGFtYXRpb24sIGZhR3JhZHVhdGlvbkNhcCwgZmFNb3J0YXJCb2FyZCwgZmFTdG9yZSwgZmFVc2VyQXN0cm9uYXV0LCBmYUJ1aWxkaW5nRmxhZywgZmFNdWdTYXVjZXIsIGZhQ29mZmVlLCBmYUxlbW9uMiwgZmFDYXJhdmFuLCBmYVEsIGZhTG9jaywgZmFQYWludFJvbGxlciwgZmFWb2x1bWVIaWdoLCBmYVZvbHVtZVVwLCBmYUZvbGRlclBsdXMsIGZhTWVyY3VyeSwgZmFBbmNob3IsIGZhU3F1YXJlUGFya2luZywgZmFQYXJraW5nLCBmYUhhbnVraWFoLCBmYVJvdGF0ZUxlZnQsIGZhUm90YXRlQmFjaywgZmFSb3RhdGVCYWNrd2FyZCwgZmFVbmRvQWx0LCBmYUhlYWRpbmcsIGZhSGVhZGVyLCBmYUNyb3NzaGFpcnMsIGZhQ2lyY2xlTm9kZXMsIGZhV2luZG93UmVzdG9yZTIsIGZhUiwgZmFGaWx0ZXJDaXJjbGVYbWFyaywgZmFHb3B1cmFtLCBmYUhlYXJ0Q2lyY2xlTWludXMsIGZhU3Rhck9mTGlmZSwgZmFCdXNpbmVzc1RpbWUsIGZhQnJpZWZjYXNlQ2xvY2ssIGZhRmlyZUV4dGluZ3Vpc2hlciwgZmFBcnJvd0Rvd25Mb25nLCBmYUxvbmdBcnJvd0Rvd24sIGZhVXNlck1pbnVzLCBmYU1vbmV5Q2hlY2ssIGZhSG91c2VMYXB0b3AsIGZhTGFwdG9wSG91c2UsIGZhRG93bmxvYWQsIGZhQ291Y2gsIGZhUm9hZExvY2ssIGZhU2Npc3NvcnMsIGZhQ3V0LCBmYUJ1ZywgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQsIGZhU2lnbk91dCwgZmFIYW5kSG9sZGluZ0hhbmQsIGZhU3Ryb29wd2FmZWwsIGZhQ2hpbGQsIGZhSWNlQ3JlYW0sIGZhQ29tcHV0ZXJNb3VzZSwgZmFNb3VzZSwgZmFGYXVjZXQsIGZhQXdhcmQsIGZhUGVyc29uRHJvd25pbmcsIGZhQ2FtZXJhUm90YXRlLCBmYUZhY2VHcmluSGVhcnRzMiwgZmFHcmluSGVhcnRzMiwgZmFGaWxlRnJhZ21lbnQsIGZhUGVyc29uTWlsaXRhcnlSaWZsZSwgZmFUb2dnbGVPbiwgZmFMdW5nc1ZpcnVzLCBmYVRhYmxlVGVubmlzUGFkZGxlQmFsbCwgZmFQaW5nUG9uZ1BhZGRsZUJhbGwsIGZhVGFibGVUZW5uaXMsIGZhQm94ZXNQYWNraW5nLCBmYVBlcnNvbkNoYWxrYm9hcmQsIGZhRGljZVR3bywgZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0LCBmYUV4Y2hhbmdlLCBmYUZvb3RiYWxsLCBmYUZvb3RiYWxsQmFsbCwgZmFUcnVja01vbnN0ZXIsIGZhQXN0ZXJpc2ssIGZhQmF0dGVyeUZ1bGwsIGZhQmF0dGVyeSwgZmFCYXR0ZXJ5NSwgZmFDaGlsZERyZXNzLCBmYUZhY2VLaXNzQmVhbTIsIGZhS2lzc0JlYW0yLCBmYVRyYXNoQ2FuQXJyb3dVcCwgZmFUcmFzaFJlc3RvcmVBbHQsIGZhRm9udCwgZmFCb3JlSG9sZSwgZmFWaXJ1c0NvdmlkLCBmYUZpbGVQZGYyLCBmYUxhbmd1YWdlLCBmYVNoaWVsZEhhbHZlZCwgZmFTaGllbGRBbHQsIGZhQ2FyZXRVcCwgZmFGaWxlUGVuLCBmYUZpbGVFZGl0LCBmYVBlcnNvbkJpa2luZywgZmFCaWtpbmcsIGZhQm9va09wZW5SZWFkZXIsIGZhQm9va1JlYWRlciwgZmFHbGFzc1dhdGVyRHJvcGxldCwgZmFUb3dlckJyb2FkY2FzdCwgZmFCcm9hZGNhc3RUb3dlciwgZmFNaW5pbWl6ZSwgZmFDb21wcmVzc0Fycm93c0FsdCwgZmFBcnJvd1JpZ2h0VG9DaXR5LCBmYUxhcHRvcE1lZGljYWwsIGZhQnJlYWRTbGljZSwgZmFHbG9iZSwgZmFGb2xkZXJNaW51cywgZmFNYXNrRmFjZSwgZmFCb25nLCBmYVJvYWRCcmlkZ2UsIGZhQXJyb3dVcDkxLCBmYVNvcnROdW1lcmljVXBBbHQsIGZhTW91bnRhaW5DaXR5LCBmYUFycm93RG93bjkxLCBmYVNvcnROdW1lcmljRGVzYywgZmFTb3J0TnVtZXJpY0Rvd25BbHQsIGZhRmFjZUdyaW5XaWRlMiwgZmFHcmluQWx0MiwgZmFQb29wLCBmYURoYXJtYWNoYWtyYSwgZmFCYXR0ZXJ5UXVhcnRlciwgZmFCYXR0ZXJ5MiwgZmFBbmtoLCBmYURpYW1vbmQsIGZhU3Vic2NyaXB0LCBmYVJ1cGVlU2lnbiwgZmFSdXBlZSwgZmFQZXJzb25SaWZsZSwgZmFELCBmYVNxdWFyZU5maSwgZmFUZWV0aCwgZmFNYWduaWZ5aW5nR2xhc3NEb2xsYXIsIGZhU2VhcmNoRG9sbGFyLCBmYUR1bXBzdGVyRmlyZSwgZmFVcGxvYWQsIGZhVXNlclNsYXNoLCBmYVVzZXJBbHRTbGFzaCwgZmFVc2VyTGFyZ2VTbGFzaCwgZmFBcnJvd0xlZnQsIGZhVmlhbFZpcnVzLCBmYUNoZWNrRG91YmxlLCBmYVBhdywgZmFIZWxtZXRTYWZldHksIGZhSGFyZEhhdCwgZmFIYXRIYXJkLCBmYUUsIGZhRmFjZUxhdWdoU3F1aW50MiwgZmFMYXVnaFNxdWludDIsIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIsIGZhQ29tcHJlc3NBbHQsIGZhR2lmdHMsIGZhQmVkLCBmYU1vbmV5QmlsbFRyYW5zZmVyLCBmYVBlcnNvblJ1bm5pbmcsIGZhUnVubmluZywgZmFDaXJjbGVDaGV2cm9uRG93biwgZmFDaGV2cm9uQ2lyY2xlRG93biwgZmFVc2VyTnVyc2UsIGZhRmFjZUtpc3NXaW5rSGVhcnQyLCBmYUtpc3NXaW5rSGVhcnQyLCBmYUZpbGwsIGZhTW9uZXlCaWxsMVdhdmUsIGZhTW9uZXlCaWxsV2F2ZUFsdCwgZmFMYW5kbWFyaywgZmFNdXNpYywgZmFCb29rTWVkaWNhbCwgZmFTaHVmZmxlLCBmYVJhbmRvbSwgZmFVbmRlcmxpbmUsIGZhQnVpbGRpbmdVc2VyLCBmYVJvYm90LCBmYVBsdXMsIGZhQWRkLCBmYUNvcHkyLCBmYUNoZXNzS2luZzIsIGZhSG91c2VGbG9vZFdhdGVyLCBmYUJpdGNvaW5TaWduLCBmYUJveCwgZmFTcXVhcmVQbHVzMiwgZmFQbHVzU3F1YXJlMiwgZmFBcnJvd3NMZWZ0UmlnaHQsIGZhQXJyb3dzSCwgZmFGYW4sIGZhQ3JvdywgZmFGaWxlQ2lyY2xlQ2hlY2ssIGZhTGlua1NsYXNoLCBmYUNoYWluQnJva2VuLCBmYUNoYWluU2xhc2gsIGZhVW5saW5rLCBmYUFycm93Um90YXRlUmlnaHQsIGZhQXJyb3dSaWdodFJvdGF0ZSwgZmFBcnJvd1JvdGF0ZUZvcndhcmQsIGZhUmVkbywgZmFQZW5DbGlwLCBmYVBlbkFsdCwgZmFEb29yQ2xvc2VkLCBmYUFycm93RG93bldpZGVTaG9ydCwgZmFTb3J0QW1vdW50QXNjLCBmYVNvcnRBbW91bnREb3duLCBmYUNhcmV0RG93biwgZmFLLCBmYUNoZWNrVG9TbG90LCBmYVZvdGVZZWEsIGZhRmlzaEZpbnMsIGZhQ29tcHJlc3MsIGZhQXJyb3dVcEFaLCBmYVNvcnRBbHBoYVVwLCBmYVVzZXJHcmFkdWF0ZSwgZmFGaWxlQ29kZTIsIGZhU29hcCwgZmFSZWN5Y2xlLCBmYUZhY2VHcmluV2luazIsIGZhR3JpbldpbmsyLCBmYVdhdGVyTGFkZGVyLCBmYUxhZGRlcldhdGVyLCBmYVN3aW1taW5nUG9vbCwgZmFUb3dlckNlbGwsIGZhQ29sb25TaWduLCBmYUxhcHRvcEZpbGUsIGZhQmFoYWksIGZhSGF5a2FsLCBmYU1vbmV5QmlsbDEyLCBmYU1vbmV5QmlsbEFsdDIsIGZhQ2xvdWRCb2x0LCBmYVRodW5kZXJzdG9ybSwgZmFFdGhlcm5ldCwgZmFIcnl2bmlhU2lnbiwgZmFIcnl2bmlhLCBmYUV5ZVNsYXNoMiwgZmFDYXJ0RmxhdGJlZFN1aXRjYXNlLCBmYUx1Z2dhZ2VDYXJ0LCBmYVJhZGlhdGlvbiwgZmFGaWxlV29yZDIsIGZhQmVkUHVsc2UsIGZhUHJvY2VkdXJlcywgZmFUZW50cywgZmFNdWdIb3QsIGZhQm9sdCwgZmFaYXAsIGZhSmFyLCBmYVRydWNrUGxhbmUsIGZhSGFuZEhvbGRpbmdIZWFydCwgZmFBcnJvd1JvdGF0ZUxlZnQsIGZhQXJyb3dMZWZ0Um90YXRlLCBmYUFycm93Um90YXRlQmFjaywgZmFBcnJvd1JvdGF0ZUJhY2t3YXJkLCBmYVVuZG8sIGZhRmFjZUFuZ3J5MiwgZmFBbmdyeTIsIGZhQnVyc3QsIGZhWiwgZmFCYW5kYWdlLCBmYUJhbmRBaWQsIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiwgZmFCdXNTaWRlLCBmYUJ1Z3MsIGZhQmVlck11Z0VtcHR5LCBmYUJlZXIsIGZhUGVyc29uQ2lyY2xlQ2hlY2ssIGZhU3RhcGxlciwgZmFIb3VzZU1lZGljYWxDaXJjbGVDaGVjaywgZmFOYWlyYVNpZ24sIGZhV2lmaSwgZmFXaWZpMywgZmFXaWZpU3Ryb25nLCBmYU1vbmV5Q2hlY2tEb2xsYXIsIGZhTW9uZXlDaGVja0FsdCwgZmFFeWVMb3dWaXNpb24sIGZhTG93VmlzaW9uLCBmYUNpcmNsZUFycm93VXAsIGZhQXJyb3dDaXJjbGVVcCwgZmFDYW1lcmFSZXRybywgZmFDYXBzdWxlcywgZmFQb28sIGZhRWxldmF0b3IsIGZhVGFnLCBmYUZpbGVDaXJjbGVNaW51cywgZmFEb3duTG9uZywgZmFMb25nQXJyb3dBbHREb3duLCBmYUNvbXBhY3REaXNjLCBmYVN1aXRjYXNlUm9sbGluZywgZmFCb29rUXVyYW4sIGZhUXVyYW4sIGZhUGhvbmVTbGFzaCwgZmFSb2FkQ2lyY2xlQ2hlY2ssIGZhU2hvcExvY2ssIGZhSW1hZ2VQb3J0cmFpdCwgZmFQb3J0cmFpdCwgZmFCcmlkZ2VMb2NrLCBmYUhhbW1lciwgZmFBcnJvd1VwMTksIGZhU29ydE51bWVyaWNVcCwgZmFDaGVzc0tuaWdodDIsIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCwgZmFBcnJvd1VwUmlnaHRGcm9tU3F1YXJlLCBmYUV4dGVybmFsTGluaywgZmFBcnJvd0Rvd25VcEFjcm9zc0xpbmUsIGZhRmFjZUdyaW5CZWFtMiwgZmFHcmluQmVhbTIsIGZhUmVjdGFuZ2xlQWQsIGZhQWQsIGZhQm9va1RhbmFraCwgZmFUYW5ha2gsIGZhSG90VHViUGVyc29uLCBmYUhvdFR1YiwgZmFGaWxlSGFsZkRhc2hlZCwgZmFPdXRkZW50LCBmYURlZGVudCwgZmFIYW5kUGVhY2UyLCBmYUhlYWRTaWRlVmlydXMsIGZhQ29tcGFzczIsIGZhUGVuTmliLCBmYVRlbnRBcnJvd3NEb3duLCBmYUZvcndhcmRGYXN0LCBmYUZhc3RGb3J3YXJkLCBmYUNyb3AsIGZhV2hpc2tleUdsYXNzLCBmYUdsYXNzV2hpc2tleSwgZmFTcXVhcmUyLCBmYUZhY2VHcmluMiwgZmFHcmluMiwgZmFGaWxlQ29udHJhY3QsIGZhQW5nbGVVcCwgZmFGYWNlU21pbGUyLCBmYVNtaWxlMiwgZmFQZXJzb25EcmVzc0J1cnN0LCBmYURpdmlkZSwgZmFDb2RlRm9yaywgZmFIb3VzZUZsYWcsIGZhQnVpbGRpbmdDb2x1bW5zLCBmYUJhbmssIGZhSW5zdGl0dXRpb24sIGZhTXVzZXVtLCBmYVVuaXZlcnNpdHksIGZhUnVnLCBmYUNvZGVNZXJnZSwgZmFIb3VzZVRzdW5hbWksIGZhTWFnbmlmeWluZ0dsYXNzQ2hhcnQsIGZhVW1icmVsbGEsIGZhSGlsbFJvY2tzbGlkZSwgZmFVc2VyU2VjcmV0LCBmYVBhZ2VyLCBmYUJyaWVmY2FzZSwgZmFUcm93ZWxCcmlja3MsIGZhU29ja3MsIGZhVCwgZmFNaWNyb2NoaXAsIGZhVHJ1Y2tNZWRpY2FsLCBmYUFtYnVsYW5jZSwgZmFPbSwgZmFNb3NxdWl0b05ldCwgZmFQcmVzY3JpcHRpb25Cb3R0bGUsIGZhVXNlcnNHZWFyLCBmYVVzZXJzQ29nLCBmYVJvYWRDaXJjbGVFeGNsYW1hdGlvbiwgZmFQYXVzZSwgZmFTdGFmZlNuYWtlLCBmYVJvZEFzY2xlcGl1cywgZmFSb2RTbmFrZSwgZmFTdGFmZkFlc2N1bGFwaXVzLCBmYVBpZ2d5QmFuaywgZmFNb251bWVudCwgZmFBbmdsZXNSaWdodCwgZmFBbmdsZURvdWJsZVJpZ2h0LCBmYURlc2t0b3AsIGZhRGVza3RvcEFsdCwgZmFQbGFuZUNpcmNsZVhtYXJrLCBmYVJldHdlZXQsIGZhVXNlckdlYXIsIGZhVXNlckNvZywgZmFCb3JkZXJBbGwsIGZhQ29pbnMsIGZhTWFyc1N0cm9rZSwgZmFIYW5kc2hha2VBbmdsZSwgZmFIYW5kc0hlbHBpbmcsIGZhQXJyb3dEb3duLCBmYUxvY2F0aW9uRG90LCBmYU1hcE1hcmtlckFsdCwgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24sIGZhQ29va2llQml0ZSwgZmFTY3Jld2RyaXZlcldyZW5jaCwgZmFUb29scywgZmFJbmRlbnQsIGZhQmFycywgZmFOYXZpY29uLCBmYUhhbmRzUHJheWluZywgZmFQcmF5aW5nSGFuZHMsIGZhVmlydXNlcywgZmFTY2hvb2xGbGFnLCBmYVRyYWRlbWFyaywgZmFGaXJlQnVybmVyLCBmYUZhY2VTbWlsZUJlYW0yLCBmYVNtaWxlQmVhbTIsIGZhVGVudEFycm93TGVmdFJpZ2h0LCBmYVJvdXRlLCBmYUFuZ2xlc1VwLCBmYUFuZ2xlRG91YmxlVXAsIGZhQnVja2V0LCBmYUxlc3NUaGFuRXF1YWwsIGZhRm9sZGVyQ2xvc2VkMiwgZmFQZXJzb25UaHJvdWdoV2luZG93LCBmYVNjaG9vbExvY2ssIGZhUGVyc29uQnVyc3QsIGZhTGVmdExvbmcsIGZhTG9uZ0Fycm93QWx0TGVmdCwgZmFMb2NhdGlvbkNyb3NzaGFpcnMsIGZhTG9jYXRpb24sIGZhUGVyc29uRG90c0Zyb21MaW5lLCBmYURpYWdub3NlcywgZmFHYXVnZVNpbXBsZUhpZ2gsIGZhVGFjaG9tZXRlciwgZmFUYWNob21ldGVyRmFzdCwgZmFBbmdsZXNMZWZ0LCBmYUFuZ2xlRG91YmxlTGVmdCwgZmFVcERvd24sIGZhQXJyb3dzQWx0ViwgZmFCYXR0ZXJ5RW1wdHksIGZhQmF0dGVyeTAsIGZhS2V5Ym9hcmQyLCBmYUNvb2tpZSwgZmFTdG9wd2F0Y2gsIGZhRWplY3QsIGZhU2F0ZWxsaXRlRGlzaCwgZmFGYWNlUm9sbGluZ0V5ZXMyLCBmYU1laFJvbGxpbmdFeWVzMiwgZmFMaXN0Q2hlY2ssIGZhVGFza3MsIGZhU2Fja1htYXJrLCBmYUhhc2h0YWcsIGZhVHJhaW4sIGZhR2FtZXBhZCwgZmFGaWxlRXhwb3J0LCBmYUFycm93UmlnaHRGcm9tRmlsZSwgZmFGYWNlR3JpbWFjZTIsIGZhR3JpbWFjZTIsIGZhVHJhaW5TdWJ3YXksIGZhU3Vid2F5LCBmYUNpcmNsZURvdDIsIGZhRG90Q2lyY2xlMiwgZmFPYmplY3RHcm91cDIsIGZhU2hpcCwgZmFDLCBmYVNxdWFyZVBob25lLCBmYVBob25lU3F1YXJlLCBmYVJ1bGVyQ29tYmluZWQsIGZhQXJyb3dzUm90YXRlLCBmYVJlZnJlc2gsIGZhU3luYywgZmFQZXJzb25EcmVzcywgZmFGZW1hbGUsIGZhQm9va09wZW4sIGZhRm9sZGVyVHJlZSwgZmFCb3hBcmNoaXZlLCBmYUFyY2hpdmUsIGZhVGVudEFycm93RG93blRvTGluZSwgZmFRcmNvZGUsIGZhRHJhZ29uLCBmYUhvdXJnbGFzc0VuZCwgZmFIb3VyZ2xhc3MzMiwgZmFHcmlwLCBmYUdyaWRIb3Jpem9udGFsLCBmYUdyaXBIb3Jpem9udGFsLCBmYUJvcmRlclRvcExlZnQsIGZhQm9yZGVyU3R5bGUsIGZhTGlzdFVsLCBmYUxpc3REb3RzLCBmYVBlb3BsZVJvYmJlcnksIGZhTW9iaWxlQnV0dG9uLCBmYUFycm93RG93bkFaLCBmYVNvcnRBbHBoYUFzYywgZmFTb3J0QWxwaGFEb3duLCBmYU1vbmV5QmlsbCwgZmFDaXJjbGVNaW51cywgZmFNaW51c0NpcmNsZSwgZmFBcnJvd1BvaW50ZXIsIGZhTW91c2VQb2ludGVyLCBmYVNxdWFyZVNoYXJlTm9kZXMsIGZhU2hhcmVBbHRTcXVhcmUsIGZhVGFibGVDZWxsc0xhcmdlLCBmYVRoTGFyZ2UsIGZhQ2F0LCBmYUNhbGVuZGFyV2VlaywgZmFDb2RlQ29tcGFyZSwgZmFSb2FkQ2lyY2xlWG1hcmssIGZhUGFsbGV0LCBmYUNha2VDYW5kbGVzLCBmYUJpcnRoZGF5Q2FrZSwgZmFDYWtlLCBmYUJ1Z1NsYXNoLCBmYVRhcnAsIGZhRGlhZ3JhbVByZWRlY2Vzc29yLCBmYUZhY2VGbHVzaGVkMiwgZmFGbHVzaGVkMiwgZmFEaWFncmFtTmV4dCwgZmFBbmNob3JDaXJjbGVYbWFyaywgZmFQZXJzb25DaXJjbGVYbWFyaywgZmFTcGEsIGZhQmFyc1Byb2dyZXNzLCBmYVRhc2tzQWx0LCBmYUhlYXJ0Q2lyY2xlQ2hlY2ssIGZhTWFyc1N0cm9rZVJpZ2h0LCBmYU1hcnNTdHJva2VILCBmYVRvd2VyT2JzZXJ2YXRpb24sIGZhU3RlcmxpbmdTaWduLCBmYUdicCwgZmFQb3VuZFNpZ24sIGZhRmF1Y2V0RHJpcCwgZmFDaXJjbGVJbmZvLCBmYUluZm9DaXJjbGUsIGZhRmVhdGhlciwgZmFCb3dsUmljZSwgZmFTdGFySGFsZlN0cm9rZTIsIGZhU3RhckhhbGZBbHQyLCBmYVRlbXBlcmF0dXJlQXJyb3dEb3duLCBmYVRlbXBlcmF0dXJlRG93biwgZmFNYXNrVmVudGlsYXRvciwgZmFGaWxlVmlkZW8yLCBmYUFycm93VHJlbmREb3duLCBmYU9pbENhbiwgZmFQZW9wbGVDYXJyeUJveCwgZmFQZW9wbGVDYXJyeSwgZmFDaGFpciwgZmFXaW5kLCBmYUxheWVyR3JvdXAsIGZhSGVhZFNpZGVNYXNrLCBmYUhhbmRzLCBmYVNpZ25MYW5ndWFnZSwgZmFTaWduaW5nLCBmYVRhYmxldHMsIGZhV2VpZ2h0SGFuZ2luZywgZmFEaWNlLCBmYVNob3BTbGFzaCwgZmFTdG9yZUFsdFNsYXNoLCBmYVNvcnREb3duLCBmYVNvcnREZXNjLCBmYVBlc2V0YVNpZ24sIGZhVGFibGV0U2NyZWVuQnV0dG9uLCBmYVRhYmxldEFsdCwgZmFIYW5kSG9sZGluZ0RvbGxhciwgZmFIYW5kSG9sZGluZ1VzZCwgZmFTaGllbGQsIGZhU2hpZWxkQmxhbmssIGZhRmFjZUxhdWdoMiwgZmFMYXVnaDIsIGZhSGFuZHNIb2xkaW5nLCBmYUNhcnRTaG9wcGluZywgZmFTaG9wcGluZ0NhcnQsIGZhT2N0YWdvbiwgZmFIYW5kUG9pbnRlcjIsIGZhUmVnaXN0ZXJlZDIsIGZhSG91c2VTaWduYWwsIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiwgaWNvbnMzOwp2YXIgaW5pdF9mcmVlX3NvbGlkX3N2Z19pY29ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0Bmb3J0YXdlc29tZStmcmVlLXNvbGlkLXN2Zy1pY29uc0A3LjEuMC9ub2RlX21vZHVsZXMvQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qcyIoKSB7CiAgICBwcmVmaXgzID0gImZhcyI7CiAgICBmYTAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICIzMCIsICJNMCAxOTJDMCAxMDMuNiA3MS42IDMyIDE2MCAzMnMxNjAgNzEuNiAxNjAgMTYwbDAgMTI4YzAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDA4LjQgMCAzMjBMMCAxOTJ6TTE2MCA5NmMtNTMgMC05NiA0My05NiA5NmwwIDEyOGMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMTI4YzAtNTMtNDMtOTYtOTYtOTZ6Il0KICAgIH07CiAgICBmYTEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiMSIsCiAgICAgIGljb246IFsyNTYsIDUxMiwgW10sICIzMSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDY0IDAgMCAzMjAtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjMyIiwgIk00OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxNzEgMGM2MC4yIDAgMTA5IDQ4LjggMTA5IDEwOSAwIDQzLjgtMjYuMiA4My4zLTY2LjQgMTAwLjRsLTEzOS4xIDU5QzExOSAzMTUuNCA5NiAzNTAuMiA5NiAzODguN2wwIDI3LjMgMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTU5LjNjMC02NC4yIDM4LjQtMTIyLjIgOTcuNS0xNDcuM2wxMzkuMS01OWMxNi42LTcuMSAyNy40LTIzLjQgMjcuNC00MS40IDAtMjQuOS0yMC4yLTQ1LTQ1LTQ1TDgwIDk2QzYyLjMgOTYgNDggODEuNyA0OCA2NHoiXQogICAgfTsKICAgIGZhMyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICIzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjMzIiwgIk04MCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTEyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDE2MCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4IDAgMzguMi0xNi44IDcyLjUtNDMuMyA5NiAyNi42IDIzLjUgNDMuMyA1Ny44IDQzLjMgOTYgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0TDgwIDI4OHoiXQogICAgfTsKICAgIGZhNCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgIjM0IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDI4OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMjI0LTE5MiAwIDAtMjI0eiJdCiAgICB9OwogICAgZmE1ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIjUiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiMzUiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwIDAgMTEyIDEyMCAwYzc1LjEgMCAxMzYgNjAuOSAxMzYgMTM2UzI1OS4xIDQ4MCAxODQgNDgwTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNTIgMGMzOS44IDAgNzItMzIuMiA3Mi03MnMtMzIuMi03Mi03Mi03MkwzMiAyNzJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6Il0KICAgIH07CiAgICBmYTYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiNiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzNiIsICJNMjU2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04OCAwYy00OC42IDAtODggMzkuNC04OCA4OGwwIDMyLjJjMjIuOS0xNS4zIDUwLjQtMjQuMiA4MC0yNC4ybDQ4IDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjg3LjUgNDgwIDIwOCA0ODBsLTQ4IDBDODAuNSA0ODAgMTYgNDE1LjUgMTYgMzM2bDAtMTUyQzE2IDEwMC4xIDg0LjEgMzIgMTY4IDMybDg4IDB6TTgwIDMzNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHoiXQogICAgfTsKICAgIGZhNyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI3IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM3IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI1NiAwYzExLjUgMCAyMiA2LjEgMjcuNyAxNi4xczUuNyAyMi4yLS4xIDMyLjFsLTIyNCAzODRjLTguOSAxNS4zLTI4LjUgMjAuNC00My44IDExLjVzLTIwLjQtMjguNS0xMS41LTQzLjhMMjMyLjMgOTYgMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhOCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICI4IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgIjM4IiwgIk0zMDQgMTYwYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC0zMiAwYy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOCAwIDM0LjYgMTMuNyA2NiAzNiA4OS0zMS41IDIzLjMtNTIgNjAuOC01MiAxMDMgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsNjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQyLjItMjAuNS03OS43LTUyLTEwMyAyMi4zLTIzIDM2LTU0LjQgMzYtODl6TTE3Ni4xIDI4OGwxNS45IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjRsNDguMSAwem0wLTY0TDE0NCAyMjRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMzUuMyAyOC43LTY0IDY0LTY0bDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAzNS4zLTI4LjYgNjQtNjQgNjR6Il0KICAgIH07CiAgICBmYTkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiOSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICIzOSIsICJNMjA4IDMyMGMyOS42IDAgNTcuMS04LjkgODAtMjQuMmwwIDMyLjJjMCA0OC42LTM5LjQgODgtODggODhMOTYgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEwNCAwYzgzLjkgMCAxNTItNjguMSAxNTItMTUybDAtMTUyLjFDMzUxLjkgOTYuNCAyODcuNSAzMiAyMDggMzJsLTQ4IDBDODAuNSAzMiAxNiA5Ni41IDE2IDE3NlM4MC41IDMyMCAxNjAgMzIwbDQ4IDB6bTgwLTE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDggMGMtNDQuMiAwLTgwLTM1LjgtODAtODBzMzUuOC04MCA4MC04MGw0OCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgweiJdCiAgICB9OwogICAgZmFEb2xsYXJTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvbGxhci1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTI4MTc4LCA2MTc4MSwgImRvbGxhciIsICJ1c2QiXSwgIjI0IiwgIk0xMzYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDQwIDU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTExNC45IDBjLTI0LjkgMC00NS4xIDIwLjItNDUuMSA0NS4xIDAgMjIuNSAxNi41IDQxLjUgMzguNyA0NC43bDkxLjYgMTMuMWM1My44IDcuNyA5My43IDUzLjcgOTMuNyAxMDggMCA2MC4zLTQ4LjkgMTA5LjEtMTA5LjEgMTA5LjFsLTEwLjkgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDAtNzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMzAuOSAwYzI0LjkgMCA0NS4xLTIwLjIgNDUuMS00NS4xIDAtMjIuNS0xNi41LTQxLjUtMzguNy00NC43bC05MS42LTEzLjFDNTUuOSAyNzMuNSAxNiAyMjcuNCAxNiAxNzMuMSAxNiAxMTIuOSA2NC45IDY0IDEyNS4xIDY0bDEwLjkgMCAwLTQweiJdCiAgICB9OwogICAgZmFEb2xsYXIgPSBmYURvbGxhclNpZ247CiAgICBmYVVzZCA9IGZhRG9sbGFyU2lnbjsKICAgIGZhRG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODAyMV0sICJmNmQzIiwgIk0zMiAxMTJjMTYuNiAwIDMwLjIgMTIuNiAzMS44IDI4LjdsLjMgNi42QzY1LjggMTYzLjQgNzkuNCAxNzYgOTYgMTc2bDE3OS4xIDAgMTQwLjkgNjAuNCAwIDI0My42YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEzMS4zQzI5NiAzNjEgMjY4LjggMzY4IDI0MCAzNjhzLTU2LTctODAtMTkuM0wxNjAgNDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTI0NS42Yy0zNy4zLTEzLjItNjQtNDguNi02NC05MC40IDAtMTcuNyAxNC4zLTMyIDMyLTMyek0zNTUuOC0zMmM3LjcgMCAxNC45IDMuNiAxOS42IDkuOEwzOTIgMCA0NDQuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFMNDk2IDMyIDU1MiAzMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0YzAgNDQuMi0zNS44IDgwLTgwIDgwbC02NCAwLTcgMjgtMTI0LjctNTMuNCAzMS42LTE0Ny4yQzMzNC4zLTIzLjkgMzQ0LjItMzIgMzU1LjgtMzJ6TTQ0OCA0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYVRydWNrTW92aW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vdmluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGRmIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDI0YzAgNDguNiAzOS40IDg4IDg4IDg4IDI1LjIgMCA0OC0xMC42IDY0LTI3LjYgMTYgMTcgMzguOCAyNy42IDY0IDI3LjYgNDAuMyAwIDc0LjItMjcuMSA4NC43LTY0bDEzNC42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NCA0MyAwIDc4LjktMzAuOSA4Ni41LTcxLjcgMjAtMTAuOCAzMy41LTMyIDMzLjUtNTYuM2wwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDU3NiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTQ4MCAxOTJsNTAuNyAwIDQ1LjMgNDUuMyAwIDUwLjctOTYgMCAwLTk2ek04OCAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0zOTIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMjE2IDM4NGE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6Il0KICAgIH07CiAgICBmYVJvdGF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNjAsICJzeW5jLWFsdCJdLCAiZjJmMSIsICJNNDgwLjEgMTkybDcuOSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTQ0YzAtOS43LTUuOC0xOC41LTE0LjgtMjIuMlM0NzcuOSAuMiA0NzEgN0w0MTkuMyA1OC44QzM3NSAyMi4xIDMxOCAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjFDNzkuMiAxMzUuNSAxNTkuMyA2NCAyNTYgNjQgMzAwLjQgNjQgMzQxLjIgNzkgMzczLjcgMTA0LjNMMzI3IDE1MWMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMzMzQuMyAxOTIgMzQ0IDE5MmwxMzYuMSAwem0yOS40IDEwMC41YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNDQuNCAwLTg1LjItMTUtMTE3LjctNDAuM0wxODUgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIwIDE2OCAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA1MTEuOCA0MSA1MDVsNTEuOC01MS44QzEzNyA0ODkuOSAxOTQgNTEyIDI1NiA1MTIgMzg1IDUxMiA0OTEuNyA0MTYuNiA1MDkuNCAyOTIuNXoiXQogICAgfTsKICAgIGZhU3luY0FsdCA9IGZhUm90YXRlOwogICAgZmFTcXVhcmVNaW51czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE3NjcsICJtaW51cy1zcXVhcmUiXSwgImYxNDYiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTcyIDIwMGwxNzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzU3F1YXJlMiA9IGZhU3F1YXJlTWludXMyOwogICAgZmFBbGlnbkp1c3RpZnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tanVzdGlmeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM5IiwgIk00NDggNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem0wIDI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAyODhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJ6TTAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQ0OCA0NDhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckNoZWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1jaGVjayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjc0IiwgIk0zMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTIyIDE2MS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMzEuMiAxMzcgMjc5LjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxOTUuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhRmFjZUtpc3MyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUzNSwgImtpc3MiXSwgImY1OTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgMjg4bDMyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCAxMi4zLTQuNiAyMy41LTEyLjIgMzIgNy42IDguNSAxMi4yIDE5LjcgMTIuMiAzMiAwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6bS05Ni04MGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFLaXNzMiA9IGZhRmFjZUtpc3MyOwogICAgZmFLaXRjaGVuU2V0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtpdGNoZW4tc2V0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWEiLCAiTTI0MCAxNDRhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem00NC40IDMyQzI2OS45IDI0MC4xIDIxMi41IDI4OCAxNDQgMjg4IDY0LjUgMjg4IDAgMjIzLjUgMCAxNDRTNjQuNSAwIDE0NCAwYzY4LjUgMCAxMjUuOSA0Ny45IDE0MC40IDExMmw3MS44IDBjOC44LTkuOCAyMS42LTE2IDM1LjgtMTZsMTA0IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTEwNCAwYy0xNC4yIDAtMjctNi4yLTM1LjgtMTZsLTcxLjggMHpNMTQ0IDgwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00MDAgMjQwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgOCA5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw5NiAwIDAtOGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNMjg4IDQ2NGwwLTExMiAyMjQgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4ek00OCAzMjBsMTI4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE2IDBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjMC04LjggNy4yLTE2IDE2LTE2em0xMjggNjRjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDAgMCAzMiAxNiAwek0yNCA0NjRsMTc2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFEbmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG5hIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTE2XSwgImY0NzEiLCAiTTM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgNTcuOC0yNC40IDEwNC44LTU3LjQgMTQ0LjUtMjQuMSAyOC45LTUzLjggNTUuMS04My42IDc5LjUgMjkuOCAyNC41IDU5LjUgNTAuNiA4My42IDc5LjUgMzMgMzkuNiA1Ny40IDg2LjcgNTcuNCAxNDQuNSAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMkw2NCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0OTcuNyAwIDQ4MEMwIDQyMi4yIDI0LjQgMzc1LjIgNTcuNCAzMzUuNSA4MS41IDMwNi42IDExMS4yIDI4MC41IDE0MSAyNTYgMTExLjIgMjMxLjUgODEuNSAyMDUuNCA1Ny40IDE3Ni41IDI0LjQgMTM2LjggMCA4OS44IDAgMzIgMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMjU2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI4My41IDM4NGwtMTgyLjkgMGMtOC4yIDEwLjUtMTUuMSAyMS4xLTIwLjYgMzJsMjI0LjIgMGMtNS42LTEwLjktMTIuNS0yMS41LTIwLjYtMzJ6TTIzOCAzMzZjLTE0LjMtMTMtMjkuOC0yNS44LTQ2LTM5LTE2LjIgMTMuMS0zMS43IDI2LTQ2IDM5bDkyIDB6TTEwMC41IDEyOGwxODIuOSAwYzguMi0xMC41IDE1LjEtMjEuMSAyMC42LTMyTDc5LjkgOTZjNS42IDEwLjkgMTIuNSAyMS41IDIwLjYgMzJ6TTE0NiAxNzZjMTQuMyAxMyAyOS44IDI1LjggNDYgMzkgMTYuMi0xMy4xIDMxLjctMjYgNDYtMzlsLTkyIDB6Il0KICAgIH07CiAgICBmYUNoaWxkUmVhY2hpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGQtcmVhY2hpbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTU5ZCIsICJNMjU2IDY0YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNMTUyLjkgMTY5LjNjLTIzLjctOC40LTQ0LjUtMjQuMy01OC44LTQ1LjhMNzQuNiA5NC4yQzY0LjggNzkuNSA0NSA3NS42IDMwLjMgODUuNFMxMS42IDExNSAyMS40IDEyOS44TDQwLjkgMTU5YzE4LjEgMjcuMSA0Mi44IDQ4LjQgNzEuMSA2Mi40TDExMiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDMyIDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU4LjRjMjkuMS0xNC4yIDU0LjQtMzYuMiA3Mi43LTY0LjJsMTguMi0yNy45YzkuNi0xNC44IDUuNC0zNC42LTkuNC00NC4zcy0zNC42LTUuNS00NC4zIDkuNEwyOTEgMTIyLjRjLTIxLjggMzMuNC01OC45IDUzLjYtOTguOCA1My42LTEyLjYgMC0yNC45LTItMzYuNi01LjgtLjktLjMtMS44LS43LTIuNy0uOXoiXQogICAgfTsKICAgIGZhUGFzdGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhc3RlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZpbGUtY2xpcGJvYXJkIl0sICJmMGVhIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxMTIgMCAwLTIyNGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMmw2NCAwIDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjQ4IDExMmwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjR6bTQwIDQ4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDIyNGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zbC01OC41LTU4LjVjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdMMjg4IDE2MHoiXQogICAgfTsKICAgIGZhRmlsZUNsaXBib2FyZDIgPSBmYVBhc3RlMjsKICAgIGZhTWV0ZW9yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1ldGVvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3MzJdLCAiZjc1MyIsICJNNDkzLjcgLjlsLTE5NC4yIDc0LjcgMi4zLTI5LjNjMS0xMi44LTEyLjgtMjEuNS0yNC0xNS4xTDEwMS4zIDEzMy40QzM4LjYgMTY5LjcgMCAyMzYuNiAwIDMwOSAwIDQyMS4xIDkwLjkgNTEyIDIwMyA1MTIgMjc1LjQgNTEyIDM0Mi4zIDQ3My40IDM3OC42IDQxMC43TDQ4MC44IDIzNC4zYzYuNS0xMS4xLTIuMi0yNS0xNS4xLTI0bC0yOS4zIDIuMyA3NC43LTE5NC4yYy42LTEuNSAuOS0zLjIgLjktNC44IDAtNy41LTYtMTMuNS0xMy41LTEzLjUtMS43IDAtMy4zIC4zLTQuOCAuOXpNMTkyIDE5MmExMjggMTI4IDAgMSAxIDAgMjU2IDEyOCAxMjggMCAxIDEgMC0yNTZ6bTAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTYgOTZhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFHZWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnZWFycyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjb2dzIl0sICJmMDg1IiwgIk00MTUuOSAyMTAuNWMxMi4yLTMuMyAyNSAyLjUgMzAuNSAxMy44TDQ2NSAyNjEuOWMxMC4zIDEuNCAyMC40IDQuMiAyOS45IDguMWwzNS0yMy4zYzEwLjUtNyAyNC40LTUuNiAzMy4zIDMuM2wxOS4yIDE5LjJjOC45IDguOSAxMC4zIDIyLjkgMy4zIDMzLjNsLTIzLjMgMzQuOWMxLjkgNC43IDMuNiA5LjYgNSAxNC43IDEuNCA1LjEgMi4zIDEwLjEgMyAxNS4ybDM3LjcgMTguNmMxMS4zIDUuNiAxNy4xIDE4LjQgMTMuOCAzMC41bC03IDI2LjJjLTMuMyAxMi4xLTE0LjYgMjAuMy0yNy4yIDE5LjVsLTQyLTIuN2MtNi4zIDguMS0xMy42IDE1LjYtMjEuOSAyMmwyLjcgNDEuOWMuOCAxMi42LTcuNCAyNC0xOS41IDI3LjJsLTI2LjIgN2MtMTIuMiAzLjMtMjQuOS0yLjUtMzAuNS0xMy44bC0xOC42LTM3LjZjLTEwLjMtMS40LTIwLjQtNC4yLTI5LjktOC4xbC0zNSAyMy4zYy0xMC41IDctMjQuNCA1LjYtMzMuMy0zLjNsLTE5LjItMTkuMmMtOC45LTguOS0xMC4zLTIyLjgtMy4zLTMzLjNsMjMuMy0zNWMtMS45LTQuNy0zLjYtOS42LTUtMTQuN3MtMi4zLTEwLjItMy0xNS4ybC0zNy43LTE4LjZjLTExLjMtNS42LTE3LTE4LjQtMTMuOC0zMC41bDctMjYuMmMzLjMtMTIuMSAxNC42LTIwLjMgMjcuMi0xOS41bDQxLjkgMi43YzYuMy04LjEgMTMuNi0xNS42IDIxLjktMjJsLTIuNy00MS44Yy0uOC0xMi42IDcuNC0yNCAxOS41LTI3LjJsMjYuMi03ek00NDguNCAzNDBhNDQgNDQgMCAxIDAgLjEgODggNDQgNDQgMCAxIDAgLS4xLTg4ek0yMjQuOS00NS41bDI2LjIgN2MxMi4xIDMuMyAyMC4zIDE0LjcgMTkuNSAyNy4ybC0yLjcgNDEuOGM4LjMgNi40IDE1LjYgMTMuOCAyMS45IDIybDQyLTIuN2MxMi41LS44IDIzLjkgNy40IDI3LjIgMTkuNWw3IDI2LjJjMy4yIDEyLjEtMi41IDI0LjktMTMuOCAzMC41bC0zNy43IDE4LjZjLS43IDUuMS0xLjcgMTAuMi0zIDE1LjJzLTMuMSAxMC01IDE0LjdsMjMuMyAzNWM3IDEwLjUgNS42IDI0LjQtMy4zIDMzLjNMMzA3LjMgMjYyYy04LjkgOC45LTIyLjggMTAuMy0zMy4zIDMuM0wyMzkgMjQyYy05LjUgMy45LTE5LjYgNi43LTI5LjkgOC4xbC0xOC42IDM3LjZjLTUuNiAxMS4zLTE4LjQgMTctMzAuNSAxMy44bC0yNi4yLTdjLTEyLjItMy4zLTIwLjMtMTQuNy0xOS41LTI3LjJsMi43LTQxLjljLTguMy02LjQtMTUuNi0xMy44LTIxLjktMjJsLTQyIDIuN2MtMTIuNSAuOC0yMy45LTcuNC0yNy4yLTE5LjVsLTctMjYuMmMtMy4yLTEyLjEgMi41LTI0LjkgMTMuOC0zMC41bDM3LjctMTguNmMuNy01LjEgMS43LTEwLjEgMy0xNS4yIDEuNC01LjEgMy0xMCA1LTE0LjdMNTUuMSA0Ni41Yy03LTEwLjUtNS42LTI0LjQgMy4zLTMzLjNMNzcuNi02YzguOS04LjkgMjIuOC0xMC4zIDMzLjMtMy4zbDM1IDIzLjNjOS41LTMuOSAxOS42LTYuNyAyOS45LTguMWwxOC42LTM3LjZjNS42LTExLjMgMTguMy0xNyAzMC41LTEzLjh6TTE5Mi40IDg0YTQ0IDQ0IDAgMSAwIDAgODggNDQgNDQgMCAxIDAgMC04OHoiXQogICAgfTsKICAgIGZhQ29ncyA9IGZhR2VhcnM7CiAgICBmYUZpbGVDaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs1ODYwNl0sICJlNDk0IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0yMi43LTMxLjUtMzYtNzAuMi0zNi0xMTIgMC0xMDAuNiA3Ny40LTE4My4yIDE3Ni0xOTEuM2wwLTM4LjFjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkwLjcgMTguN0MyNzguNyA2LjcgMjYyLjUgMCAyNDUuNSAwTDk2IDB6TTM1Ny41IDE3NkwyNjQgMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwyNDAgNTguNSAzNTcuNSAxNzZ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFJY2ljbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImljaWNsZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhZCIsICJNNzUuOCAzMDQuOEwxIDM1LjdDLjMgMzMuMiAwIDMwLjcgMCAyOC4yIDAgMTIuNiAxMi42IDAgMjguMiAwTDQ4Mi40IDBjMTYuMyAwIDI5LjYgMTMuMiAyOS42IDI5LjYgMCAxLjYtLjEgMy4zLS40IDQuOUw0MzQuNiA0OTYuMWMtMS41IDkuMi05LjUgMTUuOS0xOC44IDE1LjktOS4yIDAtMTcuMS02LjYtMTguNy0xNS42TDMzNiAxNjAgMzA3LjIgMzAzLjljLTEuOSA5LjMtMTAuMSAxNi4xLTE5LjYgMTYuMS05LjIgMC0xNy4yLTYuMi0xOS40LTE1LjFMMjQwIDE5MiAyMTAuNiAzNjguMmMtMS41IDkuMS05LjQgMTUuOC0xOC42IDE1LjhzLTE3LjEtNi43LTE4LjYtMTUuOEwxNDQgMTkyIDExNS45IDMwNC4zYy0yLjMgOS4yLTEwLjYgMTUuNy0yMC4xIDE1LjctOS4zIDAtMTcuNS02LjItMjAtMTUuMnoiXQogICAgfTsKICAgIGZhQXJyb3dUcmVuZFVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXRyZW5kLXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwOTgiLCAiTTM4NCAxNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04Mi43LTE2OS40IDE2OS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEwxOTIgMjY5LjMgNTQuNiA0MDYuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYwLTE2MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMEwzMjAgMzA2LjcgNDY2LjcgMTYwIDM4NCAxNjB6Il0KICAgIH07CiAgICBmYUhleGFnb25Ob2Rlc0JvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGV4YWdvbi1ub2Rlcy1ib2x0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU2OWEiLCAiTTI0OCAxMDYuNmMxOC45LTkgMzItMjguMyAzMi01MC42YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2YzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTIuOCAxLjMtNS41IDIuOS04IDQuN2wtODAuMS00NS44YzEuNi0yMC44LTguNi00MS42LTI3LjktNTIuOEM1Ny4yIDk2IDIzIDEwNS4yIDcuNSAxMzJTMS4yIDE5MyAyOCAyMDguNWMxLjMgLjggMi42IDEuNSA0IDIuMWwwIDkwLjhjLTEuMyAuNi0yLjcgMS4zLTQgMi4xQzEuMiAzMTktOCAzNTMuMiA3LjUgMzgwUzU3LjIgNDE2IDg0IDQwMC41YzE5LjMtMTEuMSAyOS40LTMyIDI3LjgtNTIuOGw1MC41LTI4LjljLTExLjUtMTEuMi0xOS45LTI1LjYtMjMuOC00MS43TDg4IDMwNi4xYy0yLjYtMS44LTUuMi0zLjMtOC00LjdsMC05MC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLS4xIDEuNC0uMiAyLjgtLjIgNC4zYzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTE4LjkgOS0zMiAyOC4zLTMyIDUwLjZjMCAzMC45IDI1LjEgNTYgNTYgNTZjMzAuNyAwIDU1LjYtMjQuNyA1Ni01NS4yYy03LjUtMTIuOS0xMy41LTI2LjgtMTcuNi00MS41Yy00LjItNC05LjEtNy4zLTE0LjQtOS45bDAtOTguOGMyLjgtMS4zIDUuNS0yLjkgOC00LjdsMTAuNSA2YzUuNS0xNS4zIDEzLjEtMjkuNSAyMi40LTQyLjVsLTkuMS01LjJjLjEtMS40IC4yLTIuOCAuMi00LjNjMC0yMi4zLTEzLjEtNDEuNi0zMi01MC42bDAtOTguOHpNNDQwLjUgMTMyQzQyNSAxMDUuMiAzOTAuOCA5NiAzNjQgMTExLjVjLTE5LjMgMTEuMS0yOS40IDMyLTI3LjggNTIuOGwtNTAuNiAyOC45YzExLjUgMTEuMiAxOS45IDI1LjYgMjMuOCA0MS43TDM2MCAyMDUuOWMuNCAuMyAuOCAuNiAxLjMgLjljMjEuNy05LjUgNDUuNi0xNC44IDcwLjgtMTQuOGMyIDAgNCAwIDUuOSAuMWMxMi4xLTE3LjMgMTMuOC00MC42IDIuNi02MC4xek00MzIgNTEyYTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNDcuOS0yMjVjNC4zIDMuNyA1LjQgOS45IDIuNiAxNC45TDQ1Mi40IDM1NmwzNS42IDBjNS4yIDAgOS44IDMuMyAxMS40IDguMnMtLjEgMTAuMy00LjIgMTMuNGwtOTYgNzJjLTQuNSAzLjQtMTAuOCAzLjItMTUuMS0uNnMtNS40LTkuOS0yLjYtMTQuOUw0MTEuNiAzODAgMzc2IDM4MGMtNS4yIDAtOS44LTMuMy0xMS40LTguMnMuMS0xMC4zIDQuMi0xMy40bDk2LTcyYzQuNS0zLjQgMTAuOC0zLjIgMTUuMSAuNnoiXQogICAgfTsKICAgIGZhUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXVlc3Rpb24iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDA2NywgMTAwNjgsIDYxNzM2XSwgIjNmIiwgIk02NCAxNjBjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDQyLjctMjcuOSA3OC45LTY2LjUgOTEuNC0yOC40IDkuMi02MS41IDM1LjMtNjEuNSA3Ni42bDAgMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0YzAtMS43IC42LTQuMSAzLjUtNy4zIDMtMy4zIDcuOS02LjUgMTMuNy04LjQgNjQuMy0yMC43IDExMC44LTgxIDExMC44LTE1Mi4zIDAtODguNC03MS42LTE2MC0xNjAtMTYwUzAgNzEuNiAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyem05NiAzNTJjMjIuMSAwIDQwLTE3LjkgNDAtNDBzLTE3LjktNDAtNDAtNDAtNDAgMTcuOS00MCA0MCAxNy45IDQwIDQwIDQweiJdCiAgICB9OwogICAgZmFIYW5kc0JvdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWJvdW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjkiLCAiTTY0IDMyQzY0IDE0LjMgNDkuNyAwIDMyIDBTMCAxNC4zIDAgMzJMMCAyMTMuOWMwIDE0LjIgNS4xIDI3LjkgMTQuMyAzOC43TDk5LjYgMzUyIDk2IDM1MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzODQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMy42IDAgODUuMy05OS41YzkuMi0xMC44IDE0LjMtMjQuNSAxNC4zLTM4LjdMNTc2IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyLjgtNjkuMyA5Mi40Yy01LjcgNy42LTE2LjEgOS42LTI0LjIgNC44LTkuNy01LjctMTIuMS0xOC43LTUuMS0yNy41TDQ0MSAxODBjMTAuOC0xMy41IDguOS0zMy4zLTQuNC00NC41cy0zMy05LjgtNDQuNSAzLjJsLTQ2LjcgNTIuNUMzMjkgMjA5LjcgMzIwIDIzMy40IDMyMCAyNTguMWwwIDkzLjktNjQgMCAwLTkzLjljMC0yNC42LTktNDguNC0yNS40LTY2LjhsLTQ2LjctNTIuNWMtMTEuNS0xMy0zMS4zLTE0LjQtNDQuNS0zLjJTMTI0LjIgMTY2LjQgMTM1IDE4MGwyNy42IDM0LjVjNyA4LjggNC43IDIxLjgtNS4xIDI3LjUtOC4xIDQuOC0xOC42IDIuNy0yNC4yLTQuOEw2NCAxNDQuOCA2NCAzMnptNjQgNDQ4bDAgMzIgMTI4IDAgMC0zMiA2NCAwIDAgMzIgMTI4IDAgMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDk2IDQzMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAweiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nTHVnZ2FnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1sdWdnYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NTQiLCAiTTI2NC4zIDI0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptLTggMTgxLjNsLTIyLjYgMjIuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgMzcuNWMwIDEyLjMtNyAyMy0xNy4yIDI4LjQtLjkgNC4yLTIuNCA4LjQtNC4zIDEyLjNsLTY5IDEzOC4xLS44LS40LTI3LjcgNTUuM2MtOS45IDE5LjgtMzMuOSAyNy44LTUzLjcgMTcuOUwxNC42IDUyMWMtMTkuOC05LjktMjcuOC0zMy45LTE3LjktNTMuN0w0Ny4zIDM2Ni4zYzkuOS0xOS44IDMzLjktMjcuOCA1My43LTE3LjlsMzAuNyAxNS4zIDI4LjMtNTYuNmMuMy0uNiAuNC0xLjIgLjQtMS44bDAtMTYuOWMwLS4yIDAtLjMgMC0uNWwwLTM3LjVjMC0yNS41IDEwLjEtNDkuOSAyOC4xLTY3LjlsMzUuMS0zNS4xYzIyLjgtMjIuOCA1My42LTM1LjYgODUuOC0zNS42IDM2LjkgMCA3MS44IDE2LjggOTQuOCA0NS42TDQyMi4xIDE4MGM2LjEgNy42IDE1LjMgMTIgMjUgMTJsMzMuMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMy4yIDBjLTI5LjIgMC01Ni43LTEzLjMtNzUtMzZsLTMuOC00LjcgMCAxMTUuMiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNMNDQ4IDUwNy41YzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4yTDM3MiA0MjguNGMtMS4xLTcuNy01LTE0LjctMTAuOS0xOS44bC03MS40LTYxLjJjLTIxLjMtMTguMi0zMy41LTQ0LjktMzMuNS03Mi45bDAtNjkuM3ptLjEgMTY1LjhjMi40IDIuMyA0LjggNC42IDcuNCA2LjhsNDYgMzkuNC0yLjIgNy42Yy00LjUgMTUuNy0xMi45IDMwLTI0LjQgNDEuNWwtNjguMyA2OC4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0wyMzggNDIxLjFjMy44LTMuOCA2LjYtOC42IDguMS0xMy44TDI1Ni40IDM3MXoiXQogICAgfTsKICAgIGZhRmlsZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1kb3dubG9hZCJdLCAiZjU2ZCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE3NSA0NDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNjQtNjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMjMgMjMgMC04Ni4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgODYuMS0yMy0yM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw2NCA2NHoiXQogICAgfTsKICAgIGZhRmlsZURvd25sb2FkID0gZmFGaWxlQXJyb3dEb3duOwogICAgZmFQZXJzb25Cb290aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYm9vdGgiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc1NiIsICJNNDAgMjRBNTYgNTYgMCAxIDEgMTUyIDI0IDU2IDU2IDAgMSAxIDQwIDI0em01MS4xIDg4YzIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM2IDguNCAxNS43IDEzLjQgMjYgMTMuNGwzMS4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMxLjEgMGMtMzEgMC02MC4xLTE1LTc4LjEtNDAuMmwtMi44LTMuOSAwIDgwLjEgNDEuNiAzMS4yQzIwOS44IDM3My4zIDIyNCA0MDEuOCAyMjQgNDMybDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42TDcwLjQgMzQ4LjhDNDYuMiAzMzAuNyAzMiAzMDIuMiAzMiAyNzJsMC0xMDAuOUMzMiAxMzguNSA1OC41IDExMiA5MS4xIDExMnpNMzIgNTEybDAtMTMyLjdjMy4xIDIuNyA2LjMgNS40IDkuNiA3LjlMOTYgNDI4IDk2IDUxMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptNTQ0LTg4bDAgOTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03Mi0xNjggMGMtNy4xIDAtMTMuOC0zLjEtMTguNC04LjZzLTYuNS0xMi42LTUuMy0xOS42bDMwLjctMTc2LjctNjMuMS0xMzcuNiAwIDcyYy01LjItMS0xMC41LTEuNi0xNi0xLjZsLTMyIDAgMC0xMjBjMC0zMC45IDI1LjEtNTYgNTYtNTZMNTIwIDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAzNjh6TTI4OCAzMzZjNS41IDAgMTAuOC0uNiAxNi0xLjZMMzA0IDUyMGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE4NCAzMiAweiJdCiAgICB9OwogICAgZmFMb2N1c3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibG9jdXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MjAiLCAiTTMyOCAzMmMxMzcgMCAyNDggMTExIDI0OCAyNDhsMCA0MC0uNCA4LjJDNTcxLjUgMzY4LjUgNTM3LjQgNDAwIDQ5NiA0MDBsLTEyLjMgMCAyNS4yIDQ0LjFjNi42IDExLjUgMi42IDI2LjItOC45IDMyLjhzLTI2LjIgMi42LTMyLjctOC45bC0zOC44LTY3LjktODAuNCAwLTQ4LjIgNjkuN2MtNy41IDEwLjktMjIuNSAxMy42LTMzLjQgNi4xcy0xMy42LTIyLjUtNi4xLTMzLjRsMjkuMy00Mi4zLTc0LjUgMC01MS43IDcwLjJjLTcuOSAxMC43LTIyLjkgMTIuOS0zMy42IDUuMXMtMTIuOS0yMi45LTUuMS0zMy42bDQwLjUtNTUtNDMtMTYuNC03OS4zIDEwMC41Yy04LjIgMTAuNC0yMy4zIDEyLjItMzMuNyA0cy0xMi4yLTIzLjMtNC0zMy43bDI0MC0zMDQgMi4xLTIuM2M1LjItNS4xIDEyLjUtNy41IDE5LjktNi42IDguNCAxLjEgMTUuNiA2LjUgMTguOSAxNC4zbDIxLjcgNTAuNyA0MC45LTU1LjUgMi4xLTIuNGM1LjEtNS4zIDEyLjUtOCAyMC03LjIgOC41IDEgMTUuOSA2LjUgMTkuMyAxNC40bDQxLjggOTcuNSA2NC4yIDBjMTAuMiAwIDIwIDIgMjkgNS41LTE2LjQtOTQtOTguMy0xNjUuNS0xOTctMTY1LjVsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTYgMHpNNDg4IDI5NmEyNCAyNCAwIDEgMCAwIDQ4IDI0IDI0IDAgMSAwIDAtNDh6TTQzLjUgMzMxLjFDMzYuMiAzMjEuNCAzMiAzMDkuNSAzMiAyOTYuOCAzMiAyNjUuNSA1Ny41IDI0MCA4OC45IDI0MGwyNy42IDAtNzIuOSA5MS4xek0yMjUuMSAyNDBsNDguMiAwIDEuNC0xLjktMTYuOS0zOS41LTMyLjcgNDEuNXptMTA3LjggMGw0Ni43IDAtMTcuMi00MC0yOS41IDQweiJdCiAgICB9OwogICAgZmFSaWdodExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtbG9uZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb25nLWFycm93LWFsdC1yaWdodCJdLCAiZjMwYiIsICJNNTY2LjYgMjMzLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNsLTEyOCAxMjhjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAzOTYuOSAzODQgMzg0bDAtNjQtMzM2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzM2IDAgMC02NGMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdFJpZ2h0ID0gZmFSaWdodExvbmc7CiAgICBmYVRydWNrRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1kcm9wbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OGMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMy4zIDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwxMDIuNiAwYzEwLjQgMzYuOSA0NC40IDY0IDg0LjcgNjRzNzQuMi0yNy4xIDg0LjctNjRsMy4zIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDYuN2MwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0w1MTIgMTQ2LjdjLTEyLTEyLTI4LjMtMTguNy00NS4zLTE4LjdsLTUwLjcgMCAwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek01MTIgMjM3LjNsMCA1MC43LTk2IDAgMC05NiA1MC43IDAgNDUuMyA0NS4zek0xNTIgMzg0YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHptMjMyIDQwYTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTIwOCAzMDRjLTM5LjggMC03Mi0zMi4yLTcyLTcyIDAtMzMuMiAzNC41LTc4IDU1LjgtMTAyLjQgOC43LTEwIDIzLjgtMTAgMzIuNSAwIDIxLjIgMjQuNCA1NS44IDY5LjEgNTUuOCAxMDIuNCAwIDQ4LTMyLjIgNzItNzIgNzJ6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWhvbGRpbmctbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDVjIiwgIk0yNDAgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDU2IDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwIDU2YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTU2LTU2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNTYgMCAwLTU2ek02Ni43IDM4NGw0Mi41LTQyLjVjMjQtMjQgNTYuNi0zNy41IDkwLjUtMzcuNUwzNTIgMzA0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMi42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjVzOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNC43IDB6Il0KICAgIH07CiAgICBmYUhhbmRQb2ludExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGE1IiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhzMTQuMyAzMiAzMiAzMmwyMDggMCAwLTY0LTIwOCAwek0xOTIgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bS02NC02NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptOTYgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6bTg4LTk2bC0uNiAwYzUuNCA5LjQgOC42IDIwLjMgOC42IDMyIDAgMTMuMi00IDI1LjQtMTAuOCAzNS42IDI0LjkgOC43IDQyLjggMzIuNSA0Mi44IDYwLjQgMCAxMS43LTMuMSAyMi42LTguNiAzMmw4LjYgMGM4OC40IDAgMTYwLTcxLjYgMTYwLTE2MGwwLTYxLjdjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC0xMS42LTExLjZDNDI5LjUgNzcuNSAzOTYuOSA2NCAzNjMgNjRsLTI3IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTU2YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA1NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnoiXQogICAgfTsKICAgIGZhQ2FsY3VsYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxjdWxhdG9yIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDI1XSwgImYxZWMiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTk2IDY0bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xNiAxNjhhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHptODAgMjRhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjgtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNODggMzUyYTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHptMTI4LTI0YTI0IDI0IDAgMSAxIC00OCAwIDI0IDI0IDAgMSAxIDQ4IDB6bTgwIDI0YTI0IDI0IDAgMSAxIDAtNDggMjQgMjQgMCAxIDEgMCA0OHpNNjQgNDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDQ0OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTIzMi0yNGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNC0yNC0xMC43LTI0LTI0IDEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODIxMSwgODcyMiwgMTAxMzQsICJzdWJ0cmFjdCJdLCAiZjA2OCIsICJNMCAyNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhU3VidHJhY3QgPSBmYU1pbnVzOwogICAgZmFBcnJvd1VwWkEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtei1hIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtYWxwaGEtdXAtYWx0Il0sICJmODgyIiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtODAgODBjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyAyNS40IDI1LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtODAtODB6TTI4OCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw1MC43IDAtNzMuNCA3My40Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMzMDcuMSAyMjQgMzIwIDIyNGwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTAuNyAwIDczLjQtNzMuNGM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0NjEgMzIgNDQ4IDMyTDMyMCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTQxMi42IDI3My43QzQwNy4yIDI2Mi44IDM5Ni4xIDI1NiAzODQgMjU2cy0yMy4yIDYuOC0yOC42IDE3LjdsLTgwIDE2MGMtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjlsLTgwLTE2MHpNMzg0IDM1OS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40eiJdCiAgICB9OwogICAgZmFTb3J0QWxwaGFVcEFsdCA9IGZhQXJyb3dVcFpBOwogICAgZmFNaWNyb3Bob25lU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTMxIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQyNC43IDM1OC44QzQ1OC45IDMyNC4yIDQ4MCAyNzYuNiA0ODAgMjI0bDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MGMwIDM5LjMtMTUuNyA3NC45LTQxLjMgMTAwLjlMMzU2LjggMjkxQzM3My42IDI3My43IDM4NCAyNTAgMzg0IDIyNGwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMwLjItMTUxLTE1MXptMjk4LjMgNDM0bC00MS40LTQxLjRjLTMuMyAuMi02LjUgLjMtOS44IC4zLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0bDAtMTAuMi00My42LTQzLjZjLTIuOCAzLjktNC40IDguNy00LjQgMTMuOGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOS4zLTEuMiAxOC40LTMgMjcuMy01LjR6Il0KICAgIH07CiAgICBmYVNxdWFyZVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBlbi1zcXVhcmUiLCAicGVuY2lsLXNxdWFyZSJdLCAiZjE0YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzI1LjggMTM5LjdsMTQuNCAxNC40YzE1LjYgMTUuNiAxNS42IDQwLjkgMCA1Ni42bC0yMy44IDIzLjgtNzEtNzEgMjMuOC0yMy44YzE1LjYtMTUuNiA0MC45LTE1LjYgNTYuNiAwek0xMTkuOSAyODlsOTEuNS05MS42IDcxIDcxLTkxLjYgOTEuNWMtNC4xIDQuMS05LjIgNy0xNC45IDguNGwtNjAuMSAxNWMtNS41IDEuNC0xMS4yLS4yLTE1LjItNC4ycy01LjYtOS43LTQuMi0xNS4ybDE1LTYwLjFjMS40LTUuNiA0LjMtMTAuOCA4LjQtMTQuOXoiXQogICAgfTsKICAgIGZhUGVuU3F1YXJlID0gZmFTcXVhcmVQZW47CiAgICBmYVBlbmNpbFNxdWFyZSA9IGZhU3F1YXJlUGVuOwogICAgZmFIYW5kRmlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLWZpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5OTk0LCAiZmlzdC1yYWlzZWQiXSwgImY2ZGUiLCAiTTE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTEyLTY0IDAgMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA4MC02NCAwIDAtODB6bTE5MiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2em05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTk2IDg4bDAtLjZjOS40IDUuNCAyMC4zIDguNiAzMiA4LjYgMTMuMiAwIDI1LjQtNCAzNS42LTEwLjggOC43IDI0LjkgMzIuNSA0Mi44IDYwLjQgNDIuOCAxMS43IDAgMjIuNi0zLjEgMzItOC42bDAgOC42YzAgNTIuMy0yNS4xIDk4LjgtNjQgMTI4bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc4LjRjLTE3LjMtNy45LTMzLjItMTguOC00Ni45LTMyLjVMMzcuNSAzNTcuNUMxMy41IDMzMy41IDAgMzAwLjkgMCAyNjdsMC0yN2MwLTM1LjMgMjguNy02NCA2NC02NGw4OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJ6Il0KICAgIH07CiAgICBmYUZpc3RSYWlzZWQgPSBmYUhhbmRGaXN0OwogICAgZmFDb21tZW50U21zID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtc21zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNtcyJdLCAiZjdjZCIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTE0MC44IDE3Mi44bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42czE4LjYtNDEuNiA0MS42LTQxLjZ6bTE4OC44IDQxLjZjMC0yMyAxOC42LTQxLjYgNDEuNi00MS42bDE5LjIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMTkuMiAwYy01LjMgMC05LjYgNC4zLTkuNiA5LjZzNC4zIDkuNiA5LjYgOS42YzIzIDAgNDEuNiAxOC42IDQxLjYgNDEuNnMtMTguNiA0MS42LTQxLjYgNDEuNmwtMjUuNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDI1LjYgMGM1LjMgMCA5LjYtNC4zIDkuNi05LjZzLTQuMy05LjYtOS42LTkuNmMtMjMgMC00MS42LTE4LjYtNDEuNi00MS42em0tOTguMy0zMy44bDI0LjcgNDEuMSAyNC43LTQxLjFjMy43LTYuMiAxMS4xLTkuMSAxOC03LjJzMTEuNyA4LjIgMTEuNyAxNS40bDAgMTAyLjRjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00NC42LTguNyAxNC41Yy0yLjkgNC44LTguMSA3LjgtMTMuNyA3LjhzLTEwLjgtMy0xMy43LTcuOGwtOC43LTE0LjUgMCA0NC42YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTAyLjRjMC03LjIgNC44LTEzLjUgMTEuNy0xNS40czE0LjMgMSAxOCA3LjJ6Il0KICAgIH07CiAgICBmYVNtcyA9IGZhQ29tbWVudFNtczsKICAgIGZhU2ltQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaW0tY2FyZCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmN2M0IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyNTguNyAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDgwYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6TTk2IDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0MCAxMjggMCAwLTcyLTk2IDB6TTY0IDQxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw0OCAwIDAtNzItODAgMCAwIDQwem0yNTYgMGwwLTQwLTEyOCAwIDAgNzIgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnptMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDAgMCA3MiA4MCAwIDAtNDB6Il0KICAgIH07CiAgICBmYVNjYWxlQmFsYW5jZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NhbGUtYmFsYW5jZWQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODc4LCAiYmFsYW5jZS1zY2FsZSJdLCAiZjI0ZSIsICJNMzg0IDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM5OC40IDk2Yy01LjIgMjUuOC0yMi45IDQ3LjEtNDYuNCA1Ny4zbDAgMjk0LjcgMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwIDAtMjk0LjdjLTIzLjUtMTAuMy00MS4yLTMxLjYtNDYuNC01Ny4zTDEyOCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMjggMGMxNC42LTE5LjQgMzcuOC0zMiA2NC0zMnM0OS40IDEyLjYgNjQgMzJ6bTU1LjYgMjg4TDU4NC40IDMyMCA1MTIgMTk1LjggNDM5LjYgMzIwek01MTIgNDE2Yy02Mi45IDAtMTE1LjItMzQtMTI2LTc4LjktMi42LTExIDEtMjIuMyA2LjctMzIuMWw5NS4yLTE2My4yYzUtOC42IDE0LjItMTMuOCAyNC4xLTEzLjhzMTkuMSA1LjMgMjQuMSAxMy44bDk1LjIgMTYzLjJjNS43IDkuOCA5LjMgMjEuMSA2LjcgMzIuMS0xMC44IDQ0LjgtNjMuMSA3OC45LTEyNiA3OC45ek0xMjYuOCAxOTUuOEw1NC40IDMyMCAxOTkuMyAzMjAgMTI2LjggMTk1Ljh6TS45IDMzNy4xYy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4LjlTMTEuNyAzODIgLjkgMzM3LjF6Il0KICAgIH07CiAgICBmYUJhbGFuY2VTY2FsZSA9IGZhU2NhbGVCYWxhbmNlZDsKICAgIGZhQ2FyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODY2NCwgImF1dG9tb2JpbGUiXSwgImYxYjkiLCAiTTEzNS4yIDExNy40bC0yNi4xIDc0LjYgMjkzLjggMC0yNi4xLTc0LjZDMzcyLjMgMTA0LjYgMzYwLjIgOTYgMzQ2LjYgOTZMMTY1LjQgOTZjLTEzLjYgMC0yNS43IDguNi0zMC4yIDIxLjR6TTM5LjYgMTk2LjhMNzQuOCA5Ni4zQzg4LjMgNTcuOCAxMjQuNiAzMiAxNjUuNCAzMmwxODEuMiAwYzQwLjggMCA3Ny4xIDI1LjggOTAuNiA2NC4zbDM1LjIgMTAwLjVjMjMuMiA5LjYgMzkuNiAzMi41IDM5LjYgNTkuMmwwIDE5MmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMi0zMjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwwIDI1NmMwLTI2LjcgMTYuNC00OS42IDM5LjYtNTkuMnpNMTI4IDMwNGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFBdXRvbW9iaWxlID0gZmFDYXI7CiAgICBmYUNyb3BTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcC1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY3JvcC1hbHQiXSwgImY1NjUiLCAiTTEyOCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMlM2NCAxNC4zIDY0IDMybDAgMzItMzIgMEMxNC4zIDY0IDAgNzguMyAwIDk2czE0LjMgMzIgMzIgMzJsMzIgMCAwIDI1NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyMDggMCAwLTY0LTIwOCAwIDAtMzUyek0zODQgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0yMDggMCAwIDY0IDIwOCAwIDAgMzUyeiJdCiAgICB9OwogICAgZmFDcm9wQWx0ID0gZmFDcm9wU2ltcGxlOwogICAgZmFNZWRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZWRhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk0MV0sICJmNWEyIiwgIk0yMjQuMyAxMjhMMTM5LjctMTIuOWMtNi41LTEwLjgtMjAuMS0xNC43LTMxLjMtOS4xTDIxLjggMjEuM0M5LjkgMjcuMiA1LjEgNDEuNiAxMSA1My41TDgwLjYgMTkyLjZjLTMwLjEgMzMuOS00OC4zIDc4LjUtNDguMyAxMjcuNCAwIDEwNiA4NiAxOTIgMTkyIDE5MnMxOTItODYgMTkyLTE5MmMwLTQ4LjktMTguMy05My41LTQ4LjMtMTI3LjRMNDM3LjYgNTMuNWM1LjktMTEuOSAxLjEtMjYuMy0xMC43LTMyLjJMMzQwLjItMjIuMWMtMTEuMi01LjYtMjQuOS0xLjYtMzEuMyA5LjFMMjI0LjMgMTI4em0zMC44IDE0Mi41YzEuNCAyLjggNCA0LjcgNyA1LjFsNTAuMSA3LjNjNy43IDEuMSAxMC43IDEwLjUgNS4yIDE2bC0zNi4zIDM1LjRjLTIuMiAyLjItMy4yIDUuMi0yLjcgOC4zbDguNiA0OS45YzEuMyA3LjYtNi43IDEzLjUtMTMuNiA5LjlsLTQ0LjgtMjMuNmMtMi43LTEuNC02LTEuNC04LjcgMGwtNDQuOCAyMy42Yy02LjkgMy42LTE0LjktMi4yLTEzLjYtOS45bDguNi00OS45Yy41LTMtLjUtNi4xLTIuNy04LjNsLTM2LjMtMzUuNGMtNS42LTUuNC0yLjUtMTQuOCA1LjItMTZsNTAuMS03LjNjMy0uNCA1LjctMi40IDctNS4xbDIyLjQtNDUuNGMzLjQtNyAxMy4zLTcgMTYuOCAwbDIyLjQgNDUuNHoiXQogICAgfTsKICAgIGZhU2Nyb2xsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIyMF0sICJmNzBlIiwgIk0wIDExMkMwIDcwLjUgMzEuNiAzNi40IDcyIDMyLjRsMC0uNCAyODAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTc2LTE3NiAwYy0zOS44IDAtNzIgMzIuMi03MiA3MmwwIDYwYzAgMjQuMy0xOS43IDQ0LTQ0IDQ0cy00NC0xOS43LTQ0LTQ0bDAtMjI4LTY0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDh6TTIzNi44IDQ4MGM3LjEtMTMuMSAxMS4yLTI4LjEgMTEuMi00NGwwLTYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDI0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjRjMCA0NC4yLTM1LjggODAtODAgODBsLTIyNy4yIDB6TTgwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4IDY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhRmlsZUV4Y2VsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4Y2VsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzMiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xNjQgMjY2LjdjLTcuNC0xMS0yMi4zLTE0LTMzLjMtNi43cy0xNCAyMi4zLTYuNyAzMy4zTDE2My4yIDM1MiAxMjQgNDEwLjdjLTcuNCAxMS00LjQgMjUuOSA2LjcgMzMuM3MyNS45IDQuNCAzMy4zLTYuN2wyOC00MiAyOCA0MmM3LjQgMTEgMjIuMyAxNCAzMy4zIDYuN3MxNC0yMi4zIDYuNy0zMy4zTDIyMC44IDM1MiAyNjAgMjkzLjNjNy40LTExIDQuNC0yNS45LTYuNy0zMy4zcy0yNS45LTQuNC0zMy4zIDYuN2wtMjggNDItMjgtNDJ6Il0KICAgIH07CiAgICBmYUZpbHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWx0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBiMCIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMzIwIDQ5Mi45IDMyMCA0ODBsMC0xNzguNyAxODIuNi0xODIuNmM5LjItOS4yIDExLjktMjIuOSA2LjktMzQuOVM0OTIuOSA2NCA0ODAgNjRMMzIgNjR6Il0KICAgIH07CiAgICBmYURydW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM0NV0sICJmNTY5IiwgIk01MDEuMiA3Ni4xYzExLjEtNy4zIDE0LjItMjIuMSA2LjktMzMuMnMtMjIuMS0xNC4yLTMzLjItNi45TDM3MC4yIDEwNC41QzMzNS44IDk4LjcgMjk3IDk2IDI1NiA5NiAxMTQuNiA5NiAwIDEyOCAwIDIwOEwwIDM2OGMwIDMxLjMgMjcuNCA1OC44IDcyIDc4LjdMNzIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMTkuNGMzMyA4LjkgNzEuMSAxNC41IDExMiAxNi4xTDIzMiAzNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwMy41YzQwLjktMS42IDc5LTcuMiAxMTItMTYuMUwzOTIgMzQ0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDIuN2M0NC42LTE5LjkgNzItNDcuNCA3Mi03OC43bDAtMTYwYzAtNDEuMS0zMC4yLTY5LjUtNzguOC04Ny40bDY3LjktNDQuNXpNMzA3LjQgMTQ1LjZsLTY0LjYgNDIuM2MtMTEuMSA3LjMtMTQuMiAyMi4xLTYuOSAzMy4yczIyLjEgMTQuMiAzMy4yIDYuOWwxMTEuMS03Mi44YzE0LjcgMy4yIDI3LjkgNyAzOS40IDExLjUgMzguOCAxNS4xIDQ0LjQgMzAuNiA0NC40IDQxLjMgMCAuOC0yLjcgMTcuMi00NiAzNS45LTM4LjkgMTYuOC05NiAyOC4xLTE2MiAyOC4xUzEzMi45IDI2MC43IDk0IDI0My45Yy00My4zLTE4LjctNDYtMzUuMS00Ni0zNS45IDAtMTAuNiA1LjYtMjYuMiA0NC40LTQxLjMgMzguMy0xNC45IDk1LjQtMjIuNyAxNjMuNi0yMi43IDE4IDAgMzUuMSAuNSA1MS40IDEuNnoiXQogICAgfTsKICAgIGZhTWFwUGluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1waW4iLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjgyMDVdLCAiZjI3NiIsICJNMTkyIDI4NC40QzI1Ni4xIDI2OS45IDMwNCAyMTIuNSAzMDQgMTQ0IDMwNCA2NC41IDIzOS41IDAgMTYwIDBTMTYgNjQuNSAxNiAxNDRjMCA2OC41IDQ3LjkgMTI1LjkgMTEyIDE0MC40TDEyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE5NS42ek0xNjggOTZjLTMwLjkgMC01NiAyNS4xLTU2IDU2IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNTcuNCA0Ni42LTEwNCAxMDQtMTA0IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFTY2FsZVVuYmFsYW5jZWRGbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjYWxlLXVuYmFsYW5jZWQtZmxpcCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJiYWxhbmNlLXNjYWxlLXJpZ2h0Il0sICJmNTE2IiwgIk0xMTguMiA2Mi40QzEwMS41IDU2LjggOTIuNCAzOC42IDk4IDIxLjlTMTIxLjctMy45IDEzOC41IDEuNmwxMTMgMzcuN2MxMy45LTIzLjUgMzkuNi0zOS4zIDY4LjktMzkuMyA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDMtLjIgNS45LS41IDguOGwxMjIuNiA0MC45YzE2LjggNS42IDI1LjggMjMuNyAyMC4yIDQwLjVzLTIzLjcgMjUuOC00MC41IDIwLjJMMzY2LjcgMTQ1LjJjLTQuNSAzLjItOS4zIDUuOS0xNC40IDguMmwwIDMyNi43YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNjAgMCAwLTI5NC43Yy0yMS05LjItMzcuMi0yNy00NC4yLTQ5bC0xMjUuOS00MnpNMjAwLjggMjg4TDEyOC4zIDE2My44IDU1LjkgMjg4IDIwMC44IDI4OHptLTcyLjQgOTZjLTYyLjkgMC0xMTUuMi0zNC0xMjYtNzguOS0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xLTEwLjggNDQuOC02My4xIDc4LjktMTI2IDc4Ljl6bTM4Mi44LTkyLjJsLTcyLjQgMTI0LjIgMTQ0LjkgMC03Mi40LTEyNC4yem0xMjYgMTQxLjNDNjI2LjQgNDc4IDU3NC4xIDUxMiA1MTEuMiA1MTJzLTExNS4yLTM0LTEyNi03OC45Yy0yLjYtMTEgMS0yMi4zIDYuNy0zMi4xbDk1LjItMTYzLjJjNS04LjYgMTQuMi0xMy44IDI0LjEtMTMuOHMxOS4xIDUuMyAyNC4xIDEzLjhsOTUuMiAxNjMuMmM1LjcgOS44IDkuMyAyMS4xIDYuNyAzMi4xeiJdCiAgICB9OwogICAgZmFCYWxhbmNlU2NhbGVSaWdodCA9IGZhU2NhbGVVbmJhbGFuY2VkRmxpcDsKICAgIGZhQXJyb3dzVG9DaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXRvLWNpcmNsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJkIiwgIk05LjQgOS40QzIxLjktMy4xIDQyLjEtMy4xIDU0LjYgOS40TDEyOCA4Mi43IDEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguNyAwLTczLjQtNzMuNEMtMy4xIDQyLjEtMy4xIDIxLjkgOS40IDkuNHpNMjAwIDI1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTUwMi42IDU0LjZMNDI5LjMgMTI4IDQ0OCAxMjhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE4LjcgNzMuNC03My40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS00NS4zIDQ0OEwzODQgNDI5LjMgMzg0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjcgMCA3My40IDczLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6TTkuNCA0NTcuNEw4Mi43IDM4NCA2NCAzODRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTguNy03My40IDczLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFFbnZlbG9wZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzODYsIDk5OTMsIDYxNDQzXSwgImYwZTAiLCAiTTQ4IDY0Yy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDE1LjEgNy4xIDI5LjMgMTkuMiAzOC40bDIwOCAxNTZjMTcuMSAxMi44IDQwLjUgMTIuOCA1Ny42IDBsMjA4LTE1NmMxMi4xLTkuMSAxOS4yLTIzLjMgMTkuMi0zOC40IDAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDY0ek0wIDE5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE4OC0xOTguNCAxNDguOGMtMzQuMSAyNS42LTgxLjEgMjUuNi0xMTUuMiAwTDAgMTk2eiJdCiAgICB9OwogICAgZmFCYWJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhYnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjc3YyIsICJNMTIwIDg4YTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNNy43IDE0NC41YzEzLTE3LjkgMzgtMjEuOCA1NS45LTguOEw5OS44IDE2MmMyNi44IDE5LjUgNTkuMSAzMCA5Mi4yIDMwczY1LjQtMTAuNSA5Mi4yLTMwbDM2LjItMjYuNGMxNy45LTEzIDQyLjktOSA1NS45IDguOHM5IDQyLjktOC44IDU1LjlsLTM2LjIgMjYuNGMtMTMuNiA5LjktMjguMSAxOC4yLTQzLjMgMjVsMCAzNi4zLTE5MiAwIDAtMzYuM2MtMTUuMi02LjctMjkuNy0xNS4xLTQzLjMtMjVMMTYuNSAyMDAuM2MtMTcuOS0xMy0yMS44LTM4LTguOC01NS45ek05Ny41IDMyOS4zbDYwLjYgNTMtMjYgMzcuMiAyNC4zIDI0LjNjMTUuNiAxNS42IDE1LjYgNDAuOSAwIDU2LjZzLTQwLjkgMTUuNi01Ni42IDBsLTQ4LTQ4QzM4IDQzOC42IDM2LjEgNDE3IDQ3LjIgNDAxLjFsNTAuMi03MS44em0xMjguNSA1M2w2MC42LTUzIDUwLjIgNzEuOGMxMS4xIDE1LjkgOS4yIDM3LjUtNC41IDUxLjJsLTQ4IDQ4Yy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyNC4zLTI0LjMtMjYtMzcuMnoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXREb3duMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtZG93biIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjYXJldC1zcXVhcmUtZG93biJdLCAiZjE1MCIsICJNMzg0IDQ4MGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwek0yMjQgMzUyYy02LjcgMC0xMy0yLjgtMTcuNi03LjdsLTEwNC0xMTJjLTYuNS03LTguMi0xNy4yLTQuNC0yNS45UzExMC41IDE5MiAxMjAgMTkybDIwOCAwYzkuNSAwIDE4LjIgNS43IDIyIDE0LjRzMi4xIDE4LjktNC40IDI1LjlsLTEwNCAxMTJjLTQuNSA0LjktMTAuOSA3LjctMTcuNiA3Ljd6Il0KICAgIH07CiAgICBmYUNhcmV0U3F1YXJlRG93bjIgPSBmYVNxdWFyZUNhcmV0RG93bjI7CiAgICBmYVRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdkIiwgIk0yNi45IDIwNi45TDMuNyA0NDQuOUMxLjggNDYzLjcgMTYuNiA0ODAgMzUuNSA0ODBsMTcyLjcgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOWMwLTguMyA2LjctMTUgMTUtMTUgNS41IDAgMTAuNiAzIDEzLjIgNy45bDg2LjEgMTU5YzguNCAxNS41IDI0LjYgMjUuMSA0Mi4yIDI1LjFsNjQuMSAwYzE4LjkgMCAzMy43LTE2LjMgMzEuOC0zNS4xTDQ4NS42IDIwNy4xYy0xLjktMTkuNi0xMi44LTM3LjMtMjkuNS00Ny44TDI4MC45IDQ4LjNjLTE1LjctMTAtMzUuOC05LjktNTEuNSAuMUw1Ni4xIDE1OS4yYy0xNi41IDEwLjYtMjcuMyAyOC4yLTI5LjIgNDcuN3oiXQogICAgfTsKICAgIGZhQSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTddLCAiNDEiLCAiTTIyMS41IDUxLjdDMjE2LjYgMzkuOCAyMDQuOSAzMiAxOTIgMzJzLTI0LjYgNy44LTI5LjUgMTkuN2MtOTMuMyAyMjQtMTQ2LjcgMzUyLTE2MCAzODQtNi44IDE2LjMgLjkgMzUgMTcuMiA0MS44czM1LS45IDQxLjgtMTcuMmwzMS44LTc2LjMgMTk3LjMgMCAzMS44IDc2LjNjNi44IDE2LjMgMjUuNSAyNCA0MS44IDE3LjJzMjQtMjUuNSAxNy4yLTQxLjhjLTEzLjMtMzItNjYuNy0xNjAtMTYwLTM4NHpNMjY0IDMyMGwtMTQ0IDAgNzItMTcyLjggNzIgMTcyLjh6Il0KICAgIH07CiAgICBmYVBhcmFjaHV0ZUJveCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXJhY2h1dGUtYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0Y2QiLCAiTTEyOCAyMjRDMTI4IDE1Mi4yIDE0NC4zIDg4LjQgMTY5LjUgNDMuNCAxOTUuMS0yLjQgMjI2LjYtMjQgMjU2LTI0czYwLjkgMjEuNiA4Ni41IDY3LjRDMzY3LjcgODguNCAzODQgMTUyLjIgMzg0IDIyNGwtMTA0IDAgMCA5NiA4IDBjOS4zIDAgMTguMSAyIDI2IDUuNWwxMTguNC0xMDEuNS0uNSAwYzAtNzguNC0xNy43LTE1MC42LTQ3LjYtMjA0LTYuMS0xMS0xMi45LTIxLjMtMjAuMy0zMC45IDg2LjUgMzUuOSAxNDcuOCAxMTUuMSAxNDcuOCAyMTguOSAwIDctMy4xIDEzLjctOC40IDE4LjJMMzQ3LjQgMzYwLjFjMyA3LjQgNC42IDE1LjQgNC42IDIzLjlsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTguNCAxLjYtMTYuNSA0LjYtMjMuOUw4LjQgMjI2LjJDMy4xIDIyMS43IDAgMjE1IDAgMjA4IDAgMTA0LjIgNjEuMyAyNC45IDE0Ny44LTEwLjkgMTQwLjUtMS40IDEzMy43IDkgMTI3LjYgMjAgOTcuNyA3My40IDgwIDE0NS42IDgwIDIyNGwtLjUgMCAxMTguNCAxMDEuNWM4LTMuNSAxNi44LTUuNSAyNi01LjVsOCAwIDAtOTYtMTA0IDB6Il0KICAgIH07CiAgICBmYUNhcnRBcnJvd0Rvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTgiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiAxODcuMiAwIDAgMTAyLjEtMzEtMzFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsNzItNzJjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMSAxNzcuNCAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFCcmlkZ2VDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2EiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NiA2LjQgMCAxMi43IC42IDE4LjcgMS44IDM0LjctNDkuNSA5Mi4yLTgxLjggMTU3LjMtODEuOCAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTY1LjQtNDAgMCAwLTY0IDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnpNNDI0IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTI5NiA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek04OCA5Nmw4MCAwIDAgNjQtODAgMCAwLTY0ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ2xvdWRBcnJvd1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWFycm93LXVwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIzMzgsICJjbG91ZC11cGxvYWQiLCAiY2xvdWQtdXBsb2FkLWFsdCJdLCAiZjBlZSIsICJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zMDUgMTkxYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFDbG91ZFVwbG9hZCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFDbG91ZFVwbG9hZEFsdCA9IGZhQ2xvdWRBcnJvd1VwOwogICAgZmFBdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxOTQ2XSwgIjQwIiwgIk0yNTYgNjRDMTUwIDY0IDY0IDE1MCA2NCAyNTZzODYgMTkyIDE5MiAxOTJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJDMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZTMTE0LjYgMCAyNTYgMCA1MTIgMTE0LjYgNTEyIDI1NmwwIDMyYzAgNTMtNDMgOTYtOTYgOTYtMjkuMyAwLTU1LjYtMTMuMi03My4yLTMzLjktMjIuOCAyMS01My4zIDMzLjktODYuOCAzMy45LTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhjMjcuOSAwIDUzLjcgOC45IDc0LjcgMjQuMSA1LjctNSAxMy4xLTguMSAyMS4zLTguMSAxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJjMC0xMDYtODYtMTkyLTE5Mi0xOTJ6bTY0IDE5MmE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6Il0KICAgIH07CiAgICBmYUluZGlhblJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRpYW4tcnVwZWUtc2lnbiIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJpbmRpYW4tcnVwZWUiLCAiaW5yIl0sICJlMWJjIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDI2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC03Ni43IDBjMTcuNyAxOS44IDMwLjEgNDQuNiAzNC43IDcybDQyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQyIDBjLTEwLjQgNjIuMi02MC44IDExMC45LTEyMy44IDExOC45TDI3NC42IDQyMmMxNC40IDEwLjMgMTcuNyAzMC4zIDcuNCA0NC42cy0zMC4zIDE3LjctNDQuNiA3LjRMMTMuNCAzMTRDMi4xIDMwNi0yLjcgMjkxLjUgMS41IDI3OC4yUzE4LjEgMjU2IDMyIDI1Nmw4MCAwYzM1LjggMCA2Ni4xLTIzLjUgNzYuMy01NkwyNCAyMDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTY0LjMgMGMtMTAuMi0zMi41LTQwLjUtNTYtNzYuMy01NkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFJbmRpYW5SdXBlZSA9IGZhSW5kaWFuUnVwZWVTaWduOwogICAgZmFJbnIgPSBmYUluZGlhblJ1cGVlU2lnbjsKICAgIGZhVHJ1Y2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY2LCA5OTUxXSwgImYwZDEiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNTU3LjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNTc2IDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTUxMiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0xOTIgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUNoYWxrYm9hcmRVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYWxrYm9hcmQtdXNlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjaGFsa2JvYXJkLXRlYWNoZXIiXSwgImY1MWMiLCAiTTEyOCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC05NiAwIDAtMTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTYtMTI5LjEgMGMxMC45LTE4LjggMTcuMS00MC43IDE3LjEtNjQgMC03MC43LTU3LjMtMTI4LTEyOC0xMjgtNS40IDAtMTAuOCAuMy0xNiAxbDAtNDl6TTMzMyA0NDhjLTUuMS0yNC4yLTE2LjMtNDYuMS0zMi4xLTY0TDYwOCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTIxMSAwek02NCAyNzJhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0wIDQ4MGMwLTUzIDQzLTk2IDk2LTk2bDk2IDBjNTMgMCA5NiA0MyA5NiA5NiAwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkVGVhY2hlciA9IGZhQ2hhbGtib2FyZFVzZXI7CiAgICBmYVVzZXJDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0ZmMiLCAiTTI4NiAzMDRjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzggNTEyYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDB6TTU4NS43IDEwNS45YzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVMNTIyLjEgMjc0LjljLTQuMiA1LjctMTAuNyA5LjQtMTcuNyA5LjhzLTE0LTIuMi0xOC45LTcuM2wtNDYuNC00OGMtOS4yLTkuNS05LTI0LjcgLjYtMzMuOSA5LjUtOS4yIDI0LjctOC45IDMzLjkgLjZsMjYuNSAyNy40IDg1LjYtMTE3Ljd6TTI1Ni4zIDI0OGExMjAgMTIwIDAgMSAxIDAtMjQwIDEyMCAxMjAgMCAxIDEgMCAyNDB6Il0KICAgIH07CiAgICBmYVVzZXJOaW5qYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLW5pbmphIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5Mzk5XSwgImY1MDQiLCAiTTM1MiAxMjhjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjgtNTcuMiAwLTEwNS42LTM3LjUtMTIyLTg5LjMtMS4xIDEuMy0yLjIgMi42LTMuNSAzLjgtMTUuOCAxNS44LTM4LjggMjAuNy01My42IDIyLjEtOC4xIC44LTE0LjYtNS43LTEzLjgtMTMuOCAxLjQtMTQuNyA2LjMtMzcuOCAyMi4xLTUzLjYgNS44LTUuOCAxMi42LTEwLjEgMTkuNi0xMy40LTctMy4yLTEzLjgtNy42LTE5LjYtMTMuNC0xNS44LTE1LjgtMjAuNy0zOC44LTIyLjEtNTMuNi0uOC04LjEgNS43LTE0LjYgMTMuOC0xMy44IDE0LjcgMS40IDM3LjggNi4zIDUzLjYgMjIuMSA0LjggNC44IDguNyAxMC40IDExLjcgMTYuMSAyMS4zLTQxLjIgNjQuMy02OS40IDExMy44LTY5LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjh6TTE0NCAxMTJjMCA4LjggNy4yIDE2IDE2IDE2bDEyOCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2TDE2MCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2em0tMS40IDIxMWw2NyA1MC4yYzguNSA2LjQgMjAuMyA2LjQgMjguOCAwbDY3LTUwLjJjNi41LTQuOSAxNS4yLTYuMiAyMi42LTIuOCA2MS40IDI4LjIgMTA0LjEgOTAuMiAxMDQuMSAxNjIuMSAwIDE2LjQtMTMuMyAyOS43LTI5LjcgMjkuN0w0NS43IDUxMmMtMTYuNCAwLTI5LjctMTMuMy0yOS43LTI5LjcgMC03MiA0Mi43LTEzNCAxMDQuMS0xNjIuMSA3LjQtMy40IDE2LjEtMi4xIDIyLjYgMi44eiJdCiAgICB9OwogICAgZmFQbGFudFdpbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbnQtd2lsdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNWFhIiwgIk0zNDQtMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjBsMCA2LjJjMjkuMyAxMi4yIDQ4IDQxLjMgNDggNzYuOSAwIDI3LjktMjUuMyA3NC44LTY2IDExMS43LTMuOCAzLjUtOC44IDUuMy0xNCA1LjNzLTEwLjItMS44LTE0LTUuM2MtNDAuNy0zNi44LTY2LTgzLjctNjYtMTExLjcgMC0zNS42IDE4LjctNjQuNyA0OC03Ni45bDAtNi4yYzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgNDI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjk2YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2bDAgMzguMmMyOS4zIDEyLjIgNDggNDEuMyA0OCA3Ni45IDAgMjcuOS0yNS4zIDc0LjgtNjYgMTExLjctMy44IDMuNS04LjggNS4zLTE0IDUuM3MtMTAuMi0xLjgtMTQtNS4zQzI1LjMgNDA1LjkgMCAzNTkgMCAzMzEuMSAwIDI5NS40IDE4LjcgMjY2LjQgNDggMjU0LjJMNDggMjE2YzAtNjYuMyA1My43LTEyMCAxMjAtMTIwIDIwLjIgMCAzOS4zIDUgNTYgMTMuOEwyMjQgODhjMC02Ni4zIDUzLjctMTIwIDEyMC0xMjB6Il0KICAgIH07CiAgICBmYVdlaWdodFNjYWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlaWdodC1zY2FsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ3ZWlnaHQiXSwgImY0OTYiLCAiTTExNi42IDE5MmMtMy0xMC4xLTQuNi0yMC45LTQuNi0zMiAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMlMzMzYgOTguMSAzMzYgMTYwYzAgMTEuMS0xLjYgMjEuOS00LjYgMzJsLTcxIDAgMjQuNi00NC4zYzYuNC0xMS42IDIuMy0yNi4yLTkuMy0zMi42cy0yNi4yLTIuMy0zMi42IDkuM2wtMzcuNiA2Ny43LTg4LjggMHpNMTI4IDMyTDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBDMjkzLjMgMTEuOSAyNjAgMCAyMjQgMHMtNjkuMyAxMS45LTk2IDMyeiJdCiAgICB9OwogICAgZmFXZWlnaHQgPSBmYVdlaWdodFNjYWxlOwogICAgZmFDYXJldFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmV0LXJpZ2h0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImYwZGEiLCAiTTI0OS4zIDIzNS44YzEwLjIgMTIuNiA5LjUgMzEuMS0yLjIgNDIuOGwtMTI4IDEyOGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQuNSAzOTYuOSA2NC41IDM4NGwwLTI1NmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDEyOCAxMjggMi4yIDIuNHoiXQogICAgfTsKICAgIGZhRmxvcmluU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbG9yaW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTg0IiwgIk0zMTQuNyAzMmMtMzguOCAwLTczLjcgMjMuMy04OC42IDU5LjFMMTcwLjcgMjI0IDY0IDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4MCAwLTQ1LjEgMTA4LjNjLTUgMTEuOS0xNi42IDE5LjctMjkuNSAxOS43TDMyIDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzNy4zIDBjMzguOCAwIDczLjctMjMuMyA4OC42LTU5LjFMMjEzLjMgMjg4IDMyMCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTgwIDAgNDUuMS0xMDguM2M1LTExLjkgMTYuNi0xOS43IDI5LjUtMTkuN0wzNTIgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3LjMgMHoiXQogICAgfTsKICAgIGZhQmVsbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODI3NiwgNjE2MDJdLCAiZjBmMyIsICJNMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMy4yQzExOSA1MCA2NCAxMTQuNiA2NCAxOTJsMCAyMS43YzAgNDguMS0xNi40IDk0LjgtNDYuNCAxMzIuNEw3LjggMzU4LjNDMi43IDM2NC42IDAgMzcyLjQgMCAzODAuNSAwIDQwMC4xIDE1LjkgNDE2IDM1LjUgNDE2bDM3Ni45IDBjMTkuNiAwIDM1LjUtMTUuOSAzNS41LTM1LjUgMC04LjEtMi43LTE1LjktNy44LTIyLjJsLTkuOC0xMi4yQzQwMC40IDMwOC41IDM4NCAyNjEuOCAzODQgMjEzLjdsMC0yMS43YzAtNzcuNC01NS0xNDItMTI4LTE1Ni44bDAtMy4yYzAtMTcuNy0xNC4zLTMyLTMyLTMyek0xNjIgNDY0YzcuMSAyNy42IDMyLjIgNDggNjIgNDhzNTQuOS0yMC40IDYyLTQ4bC0xMjQgMHoiXQogICAgfTsKICAgIGZhTGFyaVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGFyaS1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxYzgiLCAiTTE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDEuNWM3LjktMSAxNS45LTEuNSAyNC0xLjVzMTYuMSAuNSAyNCAxLjVMMjE2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA1NGM1OC45IDIzLjggMTAzLjIgNzYgMTE2LjIgMTM5LjcgMy41IDE3LjMtNy43IDM0LjItMjUgMzcuN3MtMzQuMi03LjctMzcuNy0yNWMtNi43LTMzLjItMjYuNC02MS44LTUzLjQtODAuMmwwIDgxLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDEuOGMtNy44LTEuNS0xNS44LTIuMi0yNC0yLjJzLTE2LjIgLjgtMjQgMi4yTDE2OCAyMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04MS44Yy0zMy44IDIzLTU2IDYxLjktNTYgMTA1LjggMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMTYwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2LjkgMEMxOC41IDM1MCAwIDMwNS4yIDAgMjU2IDAgMTc1LjQgNDkuNiAxMDYuNCAxMjAgNzhsMC01NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWlsbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWlsbC1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxZWQiLCAiTTI5Ny0yMi4yYzEyLjMgNSAxOC4yIDE5IDEzLjIgMzEuM2wtMjkgNzEuM0MzMzguOCA4NS4xIDM4NCAxMzMuMyAzODQgMTkybDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4LTYuNCAwLTEyLjUgMS4yLTE4IDMuNWwtMzAgNzMuOCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEuMi01Ny44IDE0Mi4yYy01IDEyLjMtMTkgMTguMi0zMS4zIDEzLjJzLTE4LjItMTktMTMuMi0zMS4zTDE2MCAyNTEuMyAxNjAgMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDE3LjcgMCA0MDBMMCAxMTJjMC0xNy43IDE0LjMtMzIgMzItMzIgMTAuOSAwIDIwLjUgNS40IDI2LjMgMTMuNyAxNi04LjcgMzQuMy0xMy43IDUzLjctMTMuNyAzMS4zIDAgNTkuNyAxMi45IDgwIDMzLjYgOS42LTkuOCAyMC45LTE3LjggMzMuNS0yMy41TDI2NS44LTljNS0xMi4zIDE5LTE4LjIgMzEuMy0xMy4yeiJdCiAgICB9OwogICAgZmFQZXJzb25Tbm93Ym9hcmRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXNub3dib2FyZGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzkzOCwgInNub3dib2FyZGluZyJdLCAiZjdjZSIsICJNNDI0LjUgMTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTE2Ni40IDQ1LjVjMTAuMi0xNC40IDMwLjItMTcuOSA0NC42LTcuN2wyNzIgMTkyYzE0LjQgMTAuMiAxNy45IDMwLjIgNy43IDQ0LjZzLTMwLjIgMTcuOS00NC42IDcuN2wtOTIuMi02NS4xLTYyLjIgNTMuMyAzMi4xIDI2LjdjMTguMiAxNS4yIDI4LjggMzcuNyAyOC44IDYxLjVsMCA4Ny44IDc3LjUgMTUuMmM2LjIgMS4yIDEyLjYgLjkgMTguNy0uOGw0MS4yLTExLjhjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtNDEuMiAxMS44Yy0xMy40IDMuOC0yNy40IDQuNC00MS4xIDEuOEw4Ny4xIDQ0My4zYy0xNy4yLTMuNC0zMy0xMS44LTQ1LjMtMjQuMUwxNS41IDM5M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDI2LjIgMjYuMmM1LjYgNS42IDEyLjggOS40IDIwLjYgMTFsNjQuMiAxMi42IDAtMTIzLjdjMC0yNy43IDEyLTU0IDMyLjgtNzIuMmw2OS02MC40LTg4LjItNjIuM0MxNTkuNiA4MCAxNTYuMiA2MCAxNjYuNCA0NS41em01OC4xIDM3NS43bDY0IDEyLjUgMC03NS4zYzAtNC43LTIuMS05LjMtNS44LTEyLjNsLTU4LjItNDguNSAwIDEyMy42eiJdCiAgICB9OwogICAgZmFTbm93Ym9hcmRpbmcgPSBmYVBlcnNvblNub3dib2FyZGluZzsKICAgIGZhVHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR0eSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0ZWxldHlwZSJdLCAiZjFlNCIsICJNNDUwLjIgMjY2LjhjMTUuOCA2LjUgMzQuMSAuMyA0Mi42LTE0LjZsMi40LTQuMmMyNy45LTQ4LjkgMjMuNi0xMTguOC0zMS4zLTE1NC41LTEyNi04Mi0yODkuNi04Mi00MTUuNiAwLTU0LjkgMzUuNy01OS4zIDEwNS43LTMxLjMgMTU0LjVsMi40IDQuMmM4LjUgMTQuOSAyNi43IDIxLjEgNDIuNiAxNC42bDgxLjktMzMuN2MxMy45LTUuNyAyMi40LTE5LjkgMjAuOS0zNC45bC01LjEtNTFjNjIuNS0yMSAxMzAuOC0xOS45IDE5Mi42IDMuM2wtNC44IDQ3LjdjLTEuNSAxNSA3IDI5LjIgMjAuOSAzNC45bDgxLjkgMzMuN3pNMzIgMzUyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6bTk2IDBhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHpNNjQgNDE2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHptMzUyIDMyYTMyIDMyIDAgMSAwIDY0IDAgMzIgMzIgMCAxIDAgLTY0IDB6TTI1NiAzMjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em02NCAzMmEzMiAzMiAwIDEgMCA2NCAwIDMyIDMyIDAgMSAwIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek0xMjggNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVRlbGV0eXBlID0gZmFUdHk7CiAgICBmYVVzZXJzUmVjdGFuZ2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXJlY3RhbmdsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk0IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMjQgNzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6bTAgMTUyYzUzIDAgOTYgNDMgOTYgOTZsMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjRjMC01MyA0My05NiA5Ni05NnptOTYtNjRhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNMTY4IDI3Mi4zYy0xNS4yIDIyLjgtMjQgNTAuMi0yNCA3OS43bDAgMjRjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC00Ni44IDBDODkuNiA0MDAgODAgMzkwLjQgODAgMzc4LjdMODAgMzY4YzAtNTAuMyAzOC43LTkxLjYgODgtOTUuN3pNNDI3LjkgNDAwYzIuNy03LjUgNC4xLTE1LjYgNC4xLTI0bDAtMjRjMC0yOS41LTguOC01Ni45LTI0LTc5LjcgNDkuMyA0LjEgODggNDUuMyA4OCA5NS43bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC00Ni44IDB6TTk2IDE5MmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFNb2JpbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4MjQxLCAibW9iaWxlLWFuZHJvaWQiLCAibW9iaWxlLXBob25lIl0sICJmM2NlIiwgIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6bTcyIDQxNmw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNb2JpbGVBbmRyb2lkID0gZmFNb2JpbGU7CiAgICBmYU1vYmlsZVBob25lID0gZmFNb2JpbGU7CiAgICBmYUFycm93c1R1cm5Ub0RvdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXR1cm4tdG8tZG90cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMxIiwgIk0yNjUuNC02LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wyODUuMyA2NCAzNTIgNjRjNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTY2LjcgMCAyNS40IDI1LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w4MC04MHptLTgyLjcgMjcybDgwIDgwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTYyLjcgNDAwIDk2IDQwMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ4MS43IDAgNDY0bDAtMzJjMC01MyA0My05NiA5Ni05Nmw2Ni43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwek0zMjAgMzY4YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNNjQgMTYwYTY0IDY0IDAgMSAxIDAtMTI4IDY0IDY0IDAgMSAxIDAgMTI4eiJdCiAgICB9OwogICAgZmFFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleGNsYW1hdGlvbiIsCiAgICAgIGljb246IFsxMjgsIDUxMiwgWzEwMDY5LCAxMDA3MSwgNjE3MzhdLCAiMjEiLCAiTTY0IDQzMmMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MC00MC0xNy45LTQwLTQwYzAtMjIuMSAxNy45LTQwIDQwLTQwek02NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgLjYgMCAxLjEgMCAxLjdsLTE2IDMwNGMtLjkgMTctMTUgMzAuMy0zMiAzMC4zUzMzIDM3MC43IDMyIDM1My43TDE2IDQ5LjdjMC0uNiAwLTEuMSAwLTEuNyAwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhQ2h1cmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNodXJjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5NjJdLCAiZjUxZCIsICJNMjgwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRTMjMyLTIxLjMgMjMyLThsMCAyNC0zMiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMyIDAgMCA0OC05OC42IDY1LjhDMTIwIDE4Ni43IDExMiAyMDEuNiAxMTIgMjE3LjdsMCAzOC4zLTc5LjggNDUuNkMxMi4zIDMxMyAwIDMzNC4yIDAgMzU3LjFMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjQgNzQuNyAwIDg1LjQgMCAzMjAgMGw2NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtOTAuOWMwLTIzLTEyLjMtNDQuMi0zMi4yLTU1LjZMNDAwIDI1NiA0MDAgMjE3LjdjMC0xNi04LTMxLTIxLjQtMzkuOWwtOTguNi02NS44IDAtNDggMzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzIgMCAwLTI0ek0yNTYgMzIwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODAtMTI4IDAgMC04MGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhVG9nZ2xlT2ZmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvZ2dsZS1vZmYiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwNCIsICJNMzg0IDEyOGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFM0NTQuNyAzODQgMzg0IDM4NGwtMTkyIDBjLTcwLjcgMC0xMjgtNTcuMy0xMjgtMTI4czU3LjMtMTI4IDEyOC0xMjhsMTkyIDB6TTU3NiAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJMMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyek0xOTIgMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYweiJdCiAgICB9OwogICAgZmFTaG9lUHJpbnRzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob2UtcHJpbnRzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1NGIiLCAiTTI5NiAxOTJjLTIxLjEtMTIuMS00Mi4zLTI0LjItNzItMjkuM2wwLTE0MC4zQzI1Ny43IDEzIDMxMS40IDAgMzUyIDAgNDQ4IDAgNTc2IDQ4IDU3NiAxMjhzLTExOS42IDk2LTE3NiA5NmMtNDggMC03Ni0xNi0xMDQtMzJ6TTEyOCAzMmw0OCAwIDAgMTI4LTQ4IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjR6TTIzMiAzMjBjMjgtMTYgNTYtMzIgMTA0LTMyIDU2LjQgMCAxNzYgMTYgMTc2IDk2UzM4NCA1MTIgMjg4IDUxMmMtNDAuNSAwLTk0LjMtMTMtMTI4LTIyLjRsMC0xNDAuM2MyOS43LTUuMiA1MC45LTE3LjMgNzItMjkuNHpNNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0bDQ4IDAgMCAxMjgtNDggMHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVdhbGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YWxsZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1NSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MmMwLTM1LjMtMjguNy02NC02NC02NEw3MiAxMjhjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNjQgMzJ6TTQxNiAyNTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFNZXNzYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZXNzYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbW1lbnQtYWx0Il0sICJmMjdhIiwgIk0wIDM1MkwwIDEyOEMwIDc1IDQzIDMyIDk2IDMybDMyMCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMjRjMCA1My00MyA5Ni05NiA5NmwtMTIwIDBjLTUuMiAwLTEwLjIgMS43LTE0LjQgNC44TDE2Ni40IDUzOS4yYy00LjIgMy4xLTkuMiA0LjgtMTQuNCA0LjgtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC03Mi0zMiAwYy01MyAwLTk2LTQzLTk2LTk2eiJdCiAgICB9OwogICAgZmFDb21tZW50QWx0MiA9IGZhTWVzc2FnZTI7CiAgICBmYVRyb3BoeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm9waHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NDJdLCAiZjA5MSIsICJNMTQ0LjMgMGwyMjQgMGMyNi41IDAgNDguMSAyMS44IDQ3LjEgNDguMi0uMiA1LjMtLjQgMTAuNi0uNyAxNS44bDQ5LjYgMGMyNi4xIDAgNDkuMSAyMS42IDQ3LjEgNDkuOC03LjUgMTAzLjctNjAuNSAxNjAuNy0xMTggMTkwLjUtMTUuOCA4LjItMzEuOSAxNC4zLTQ3LjIgMTguOC0yMC4yIDI4LjYtNDEuMiA0My43LTU3LjkgNTEuOGwwIDczLjEgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTczLjFjLTE2LTcuNy0zNS45LTIyLTU1LjMtNDguMy0xOC40LTQuOC0zOC40LTEyLjEtNTcuOS0yMy4xLTU0LjEtMzAuMy0xMDIuOS04Ny40LTEwOS45LTE4OS45LTEuOS0yOC4xIDIxLTQ5LjcgNDcuMS00OS43bDQ5LjYgMGMtLjMtNS4yLS41LTEwLjQtLjctMTUuOC0xLTI2LjUgMjAuNi00OC4yIDQ3LjEtNDguMnpNMTAxLjUgMTEybC01Mi40IDBjNi4yIDg0LjcgNDUuMSAxMjcuMSA4NS4yIDE0OS42LTE0LjQtMzcuMy0yNi4zLTg2LTMyLjgtMTQ5LjZ6TTM4MCAyNTYuOGM0MC41LTIzLjggNzcuMS02Ni4xIDgzLjMtMTQ0LjhMNDExIDExMmMtNi4yIDYwLjktMTcuNCAxMDguMi0zMSAxNDQuOHoiXQogICAgfTsKICAgIGZhRmFjZURpenp5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWRpenp5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpenp5Il0sICJmNTY3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTM0LjEgMTUzLjlsMjUuOSAyNS45IDI1LjktMjUuOWM3LjgtNy44IDIwLjUtNy44IDI4LjMgMHM3LjggMjAuNSAwIDI4LjNsLTI1LjkgMjUuOSAyNS45IDI1LjljNy44IDcuOCA3LjggMjAuNSAwIDI4LjNzLTIwLjUgNy44LTI4LjMgMGwtMjUuOS0yNS45LTI1LjkgMjUuOWMtNy44IDcuOC0yMC41IDcuOC0yOC4zIDBzLTcuOC0yMC41IDAtMjguM2wyNS45LTI1LjktMjUuOS0yNS45Yy03LjgtNy44LTcuOC0yMC41IDAtMjguM3MyMC41LTcuOCAyOC4zIDB6bTE5MiAwbDI1LjkgMjUuOSAyNS45LTI1LjljNy44LTcuOCAyMC41LTcuOCAyOC4zIDBzNy44IDIwLjUgMCAyOC4zbC0yNS45IDI1LjkgMjUuOSAyNS45YzcuOCA3LjggNy44IDIwLjUgMCAyOC4zcy0yMC41IDcuOC0yOC4zIDBsLTI1LjktMjUuOS0yNS45IDI1LjljLTcuOCA3LjgtMjAuNSA3LjgtMjguMyAwcy03LjgtMjAuNSAwLTI4LjNsMjUuOS0yNS45LTI1LjktMjUuOWMtNy44LTcuOC03LjgtMjAuNSAwLTI4LjNzMjAuNS03LjggMjguMyAwek0yNTYgMzA0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFEaXp6eTIgPSBmYUZhY2VEaXp6eTI7CiAgICBmYUJhY3RlcmlhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY3RlcmlhIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNTkiLCAiTTI1Ni0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDMxMSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNi4zIDYuM2M0LjYgNy44IDggMTYuMiAxMC4zIDI0LjhsMTEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTEgMGMtMi4yIDguNi01LjYgMTYuOS0xMC4zIDI0LjhMMzQ1IDE1MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00LjEtNC4xLTMwLjEgMzAuMSA0LjEgNC4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjFjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUwyMTcgMjc5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTYuMy02LjNjLTcuOCA0LjYtMTYuMiA4LTI0LjggMTAuM2wwIDExYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTFjLTguNi0yLjItMTYuOS01LjYtMjQuOC0xMC4zTDczIDMxM2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwzOSAxNjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0LjEgNC4xYzEwLTEwIDIwLTIwIDMwLjEtMzAuMUwxMDMgMTA1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMSAzMC4xLTMwLjEtNC4xLTQuMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlTMTkxLjYtMi4zIDIwMSA3bDYuMyA2LjNjNy44LTQuNiAxNi4yLTggMjQuOC0xMC4zbDAtMTFjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTEyOCAyNTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0yNDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTI5NiA0MGwwIDExYzguNiAyLjIgMTYuOSA1LjYgMjQuOCAxMC4zTDU2NyAxOTljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02LjMgNi4zYzQuNiA3LjggOCAxNi4yIDEwLjMgMjQuOGwxMSAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMSAwYy0yLjIgOC42LTUuNiAxNi45LTEwLjMgMjQuOEw2MDEgMzQzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQuMS00LjEtMzAuMSAzMC4xIDQuMSA0LjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNC4xLTQuMWMtMTAgMTAtMjAgMjAtMzAuMSAzMC4xTDQ3MyA0NzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNi4zLTYuM2MtNy44IDQuNi0xNi4yIDgtMjQuOCAxMC4zbDAgMTFjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMWMtOC42LTIuMi0xNi45LTUuNi0yNC44LTEwLjNMMzI5IDUwNWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw2LjMtNi4zYy00LjYtNy44LTgtMTYuMi0xMC4zLTI0LjhsLTExIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTEgMGMyLjItOC42IDUuNi0xNi45IDEwLjMtMjQuOEwyOTUgMzYxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNC4xIDQuMWMxMC0xMCAyMC0yMCAzMC4xLTMwLjFMMzU5IDI5N2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDQuMSA0LjEgMzAuMS0zMC4xLTQuMS00LjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw2LjMgNi4zYzcuOC00LjYgMTYuMi04IDI0LjgtMTAuM2wwLTExYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6TTQ0OCAzODRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhRWFyRGVhZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXItZGVhZiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkZWFmIiwgImRlYWZuZXNzIiwgImhhcmQtb2YtaGVhcmluZyJdLCAiZjJhNCIsICJNNTAyLjYgNTQuNmwtNDAgNDBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDQwLTQwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6bS0zMjAgMzIwbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTI0MCAxMjhjLTU3LjYgMC0xMDUuMSA0My42LTExMS4zIDk5LjUtMS45IDE3LjYtMTcuOCAzMC4yLTM1LjMgMjguM3MtMzAuMi0xNy44LTI4LjMtMzUuM2M5LjctODggODQuMy0xNTYuNSAxNzQuOS0xNTYuNSA5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDQ2LTE3LjcgODcuOS00Ni42IDExOS4zLTEyIDEzLTE3LjQgMjQuOC0xNy40IDM0LjdsMCA2LjFjMCA2MS45LTUwLjEgMTEyLTExMiAxMTItMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTYuMWMwLTMyLjkgMTcuNC01OS42IDM0LjQtNzggMTguNC0yMCAyOS42LTQ2LjYgMjkuNi03NS45IDAtNjEuOS01MC4xLTExMi0xMTItMTEyem0wIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFEZWFmID0gZmFFYXJEZWFmOwogICAgZmFEZWFmbmVzcyA9IGZhRWFyRGVhZjsKICAgIGZhSGFyZE9mSGVhcmluZyA9IGZhRWFyRGVhZjsKICAgIGZhUGVvcGxlQXJyb3dzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1hcnJvd3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGVvcGxlLWFycm93cy1sZWZ0LXJpZ2h0Il0sICJlMDY4IiwgIk0zMiA2NEE2NCA2NCAwIDEgMSAxNjAgNjQgNjQgNjQgMCAxIDEgMzIgNjR6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMy4yIDAgNi40IC4yIDkuNSAuN0w5My4xIDIwNS4xQzY1IDIzMy4yIDY1IDI3OC44IDkzLjEgMzA2LjlsNTYgNTZjMy40IDMuNCA3IDYuNCAxMC45IDlsMCA5Mi4xYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTEyMC42QzEyLjkgMzMyLjQgMCAzMTEuNyAwIDI4OGwwLTY0ek0zNTIgNjRhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem02Ni45IDE0MS4xbC00NC40LTQ0LjRjMy4xLS41IDYuMy0uNyA5LjUtLjdsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNEw0ODAgNDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTkyLjFjMy45LTIuNiA3LjUtNS42IDEwLjktOWw1Ni01NmMyOC4xLTI4LjEgMjguMS03My43IDAtMTAxLjh6TTMwMi44IDE3Ny44YzktMy43IDE5LjMtMS43IDI2LjIgNS4ybDU2IDU2YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC01NiA1NmMtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggMzIxLjcgMjg4IDMxMmwwLTI0LTY0IDAgMCAyNGMwIDkuNy01LjggMTguNS0xNC44IDIyLjJzLTE5LjMgMS43LTI2LjItNS4ybC01Ni01NmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsNTYtNTZjNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgMTkwLjMgMjI0IDIwMGwwIDI0IDY0IDAgMC0yNGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJ6Il0KICAgIH07CiAgICBmYVBlb3BsZUFycm93c0xlZnRSaWdodCA9IGZhUGVvcGxlQXJyb3dzOwogICAgZmFIYW5kc0NsYXBwaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWNsYXBwaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxYTgiLCAiTTM0NCA4bDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNFMzNDQtNS4zIDM0NCA4ek0yMjAgMTAuN2wzMiA0OGM3LjQgMTEgNC40IDI1LjktNi43IDMzLjNzLTI1LjkgNC40LTMzLjMtNi43bC0zMi00OGMtNy40LTExLTQuNC0yNS45IDYuNy0zMy4zUzIxMi42LS4zIDIyMCAxMC43ek0xMzUgMTE5YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDI5Mi43IDI0Mi43YzEwLjEgMTAuMSAyNy4zIDIuOSAyNy4zLTExLjNsMC0zOS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNTMuNmMwIDU3LjEtMzAgMTEwLTc4LjkgMTM5LjQtNjQgMzguNC0xNDUuOCAyOC4zLTE5OC41LTI0LjRMNyAzNjFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1MyA1M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUwyMyAyNjVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw5MyA5M2M2LjEgNi4xIDE2IDYuMSAyMi4xIDBzNi4xLTE2IDAtMjIuMUw1NSAxODVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMTcgMTE3YzYuMSA2LjEgMTYgNi4xIDIyLjEgMHM2LjEtMTYgMC0yMi4xbC05My05M2MtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6TTQzMy4xIDQ4NC45Yy0yNC4yIDE0LjUtNTAuOSAyMi4xLTc3LjcgMjMuMSA0OC4xLTM5LjYgNzYuNi05OSA3Ni42LTE2Mi40bDAtOTguMWM4LjItLjEgMTYtNi40IDE2LTE2bDAtMzkuNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTUzLjZjMCA1Ny4xLTMwIDExMC03OC45IDEzOS40ek00NTMuMyA0YzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zbC0zMiA0OGMtNy40IDExLTIyLjMgMTQtMzMuMyA2LjdzLTE0LTIyLjMtNi43LTMzLjNsMzItNDhjNy40LTExIDIyLjMtMTQgMzMuMy02Ljd6Il0KICAgIH07CiAgICBmYVZpcnVzQ292aWRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1cy1jb3ZpZC1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGE5IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04My04MyAxMS40LTExLjRjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMTEuMyAxMS4zLTIzLjgtMjMuOGMxNy45LTIzLjUgMjkuOS01MS43IDM0LjEtODIuM2wzMy42IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNi0zMy42IDBjLTQuMi0zMC43LTE2LjMtNTguOC0zNC4xLTgyLjNsMjMuOC0yMy44IDExLjMgMTEuM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDQwLjcgNDYuN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxMS4zIDExLjMtMjMuOCAyMy44QzM3MC44IDk3LjkgMzQyLjcgODUuOCAzMTIgODEuNmwwLTMzLjYgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzNDEuMyAwIDMyOCAwTDI0OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDAgMCAzMy42Yy0zMC43IDQuMi01OC44IDE2LjMtODIuMyAzNC4xTDE1Ny45IDkyIDE2OS4yIDgwLjZjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEwxMjMuOSA1OC4xIDQxLTI0Ljl6TTExMy42IDIzMmwtMzMuNiAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMzMuNiAwYzQuMiAzMC43IDE2LjMgNTguOCAzNC4xIDgyLjNsLTIzLjggMjMuOC0xMS4zLTExLjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYuNiA1Ni42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTEuMy0xMS4zIDIzLjgtMjMuOGMyMy41IDE3LjkgNTEuNyAyOS45IDgyLjMgMzQuMWwwIDMzLjYtMTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNiAwIDAtMzMuNmMxMy40LTEuOCAyNi40LTUuMiAzOC43LTkuOUwxMjMuNSAxOTMuM2MtNC43IDEyLjMtOCAyNS4yLTkuOSAzOC43eiJdCiAgICB9OwogICAgZmFDYWxlbmRhckRheXMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLWRheXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FsZW5kYXItYWx0Il0sICJmMDczIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI0MGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xMjggMGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNjQgMzY4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE0NC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhQ2FsZW5kYXJBbHQyID0gZmFDYWxlbmRhckRheXMyOwogICAgZmFEaWFtb25kVHVyblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYW1vbmQtdHVybi1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkaXJlY3Rpb25zIl0sICJmNWViIiwgIk0yMTUgMTdMMTcgMjE1QzYuMSAyMjUuOSAwIDI0MC42IDAgMjU2czYuMSAzMC4xIDE3IDQxTDIxNSA0OTVjMTAuOSAxMC45IDI1LjYgMTcgNDEgMTdzMzAuMS02LjEgNDEtMTdMNDk1IDI5N2MxMC45LTEwLjkgMTctMjUuNiAxNy00MXMtNi4xLTMwLjEtMTctNDFMMjk3IDE3QzI4Ni4xIDYuMSAyNzEuNCAwIDI1NiAwcy0zMC4xIDYuMS00MSAxN3pNMzg1IDI1N2wtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNzguMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDBjMC0zOS44IDMyLjItNzIgNzItNzJsNzguMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYURpcmVjdGlvbnMgPSBmYURpYW1vbmRUdXJuUmlnaHQ7CiAgICBmYUhhbmRQb2ludFVwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kLXBvaW50LXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTc1N10sICJmMGE2IiwgIk0zMiAzMkMzMiAxNC4zIDQ2LjMgMCA2NCAwUzk2IDE0LjMgOTYgMzJsMCAyMDgtNjQgMCAwLTIwOHpNMjI0IDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptLTY0LTY0YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMTYwIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em0tOTYgODhsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDM3LjUgNDUzLjVDMTMuNSA0MjkuNSAwIDM5Ni45IDAgMzYzbDAtMjdjMC0zNS4zIDI4LjctNjQgNjQtNjRsODggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmw1NiAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyeiJdCiAgICB9OwogICAgZmFCZXppZXJDdXJ2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZXppZXItY3VydmUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjU1YiIsICJNMjk2IDEzNmwwLTQ4IDQ4IDAgMCA0OC00OCAwek0yODggMzJjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNC0xMTguNCAwQzExMS4yIDYyLjcgODkuMyA0OCA2NCA0OCAyOC43IDQ4IDAgNzYuNyAwIDExMnMyOC43IDY0IDY0IDY0YzI1LjMgMCA0Ny4yLTE0LjcgNTcuNi0zNmw2Ni45IDBjLTU4LjkgMzkuNi05OC45IDEwNS0xMDQgMTgwTDgwIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNjRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuMyAwYzUuOS02NyA0OC41LTEyMy40IDEwNy41LTE0OS4xIDguNiAxMi43IDIzLjIgMjEuMSAzOS44IDIxLjFsNjQgMGMxNi42IDAgMzEuMS04LjQgMzkuOC0yMS4xIDU5IDI1LjcgMTAxLjYgODIuMSAxMDcuNSAxNDkuMWwtMy4zIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00LjUgMGMtNS03NS00NS4xLTE0MC40LTEwNC0xODBsNjYuOSAwYzEwLjQgMjEuMyAzMi4zIDM2IDU3LjYgMzYgMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRjLTI1LjMgMC00Ny4yIDE0LjctNTcuNiAzNmwtMTE4LjQgMCAwLTRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTg4IDM3Nmw0OCAwIDAgNDgtNDggMCAwLTQ4em00MTYgNDhsMC00OCA0OCAwIDAgNDgtNDggMHoiXQogICAgfTsKICAgIGZhUGVyc29uSGFsZkRyZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oYWxmLWRyZXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1NDgiLCAiTTE0My40LTMuOWM5LjctMTYuOCAyNy44LTI4LjEgNDguNi0yOC4xIDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMjUuNC0xNi45IDQ2LjgtNDAgNTMuN2wwIDBjLTUuMSAxLjUtMTAuNCAyLjMtMTYgMi4zLTMwLjkgMC01Ni0yNS4xLTU2LTU2bDAgMGMwLTEwLjEgMi43LTE5LjcgNy40LTI3Ljl6TTMxOC4zIDI5OS4xTDI3MiAyMzYuNyAyNzIgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwIDAtLjQgMC0yMzguNmMzNi4yIDQuNCA2OS4yIDIzLjQgOTEuMiA1M2w3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTE3NiAxMTNsMCAzOTljMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMjUuOCAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw0My0xMjktNDguMyA2NS4xYy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyMi0yOS42IDU1LjEtNDguNiA5MS4yLTUzeiJdCiAgICB9OwogICAgZmFTcXVhcmVQb2xsSG9yaXpvbnRhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcG9sbC1ob3Jpem9udGFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBvbGwtaCJdLCAiZjY4MiIsICJNNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjB6TTI1NiAxNTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0em03MiA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjA4IDB6TTE5MiAzNjBjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhUG9sbEggPSBmYVNxdWFyZVBvbGxIb3Jpem9udGFsOwogICAgZmFTY2hvb2xDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NmQiLCAiTTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc2IDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTkwLjkgMCAwLTg4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMSAwIDEuOSAwIDIuOSAuMSAyNi4zLTc0LjYgOTcuNS0xMjguMSAxODEuMS0xMjguMSAyOC42IDAgNTUuNiA2LjIgODAgMTcuNGwwLTMzLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDAtMTI3LjktMTE1LjFjLTE4LjMtMTYuNC00Ni0xNi40LTY0LjIgMEwxMjggMTI4IDY0IDEyOHptNjQgMjQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJ6TTExMiAyNTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNnpNMjg4IDEyOGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUhhbmRMaXphcmQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtbGl6YXJkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNTgiLCAiTTAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDIzOC41IDBjMzYuOCAwIDcxLjIgMTggOTIuMSA0OC4ybDExMy41IDE2NGMxMyAxOC43IDE5LjkgNDEgMTkuOSA2My44bDAgNzZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTMuOC03OC4xLTUwLjItMTYxLjkgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhzMjEuNS00OCA0OC00OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OEw0OCAxNjBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFDaGFsa2JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYWxrYm9hcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmxhY2tib2FyZCJdLCAiZjUxYiIsICJNOTYgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDY0ek00ODAgMzg0bC02NCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTYwIDAgMC0yNTYgMzg0IDAgMCAyNTZ6Il0KICAgIH07CiAgICBmYUJsYWNrYm9hcmQgPSBmYUNoYWxrYm9hcmQ7CiAgICBmYVVwUmlnaHRGcm9tU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVwLXJpZ2h0LWZyb20tc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4dGVybmFsLWxpbmstYWx0Il0sICJmMzVkIiwgIk0yOTAuNCAxOS44QzI5NS40IDcuOCAzMDcuMSAwIDMyMCAwTDQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45TDQwMCAxNTcuMyAyNDYuNiAzMTAuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMzU0LjcgMTEyIDI5Ny40IDU0LjZjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45ek0wIDE3NmMwLTQ0LjIgMzUuOC04MCA4MC04MGw4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAyNTZjMCA4LjggNy4yIDE2IDE2IDE2bDI1NiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA4MGMwIDQ0LjItMzUuOCA4MC04MCA4MEw4MCA1MTJjLTQ0LjIgMC04MC0zNS44LTgwLTgwTDAgMTc2eiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtBbHQgPSBmYVVwUmlnaHRGcm9tU3F1YXJlOwogICAgZmFTcXVhcmVGdWxsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtZnVsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODk5NywgMTI4OTk4LCAxMjg5OTksIDEyOWUzLCAxMjkwMDEsIDEyOTAwMiwgMTI5MDAzLCAxMTAzNSwgMTEwMzZdLCAiZjQ1YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdCiAgICB9OwogICAgZmFDbG92ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxMzkiLCAiTTMxMC40IDE2QzM0Ni42IDE2IDM3NiA0NS40IDM3NiA4MS43bDAgNS4yYzAgMTEuMi0yLjcgMjIuMy03LjggMzIuMmwtMi4zIDQuMi0yMC4xIDMzLjVjLTEuMSAxLjktMS4yIDMuNC0xLjEgNC41IC4yIDEuMyAuOSAyLjcgMi4xIDMuOXMyLjYgMS45IDMuOSAyLjFjMS4xIC4yIDIuNiAuMSA0LjUtMS4xbDMzLjUtMjAuMSA0LjItMi4zYzEwLTUuMSAyMS03LjggMzIuMi03LjhsNS4yIDBjMzYuMiAwIDY1LjYgMjkuNCA2NS42IDY1LjcgMCAxNy40LTYuOSAzNC4xLTE5LjIgNDYuNGwtMS4zIDEuM2MtMy43IDMuNy0zLjcgOS42IDAgMTMuM2wxLjMgMS4zYzEyLjMgMTIuMyAxOS4yIDI5IDE5LjIgNDYuNCAwIDM2LjItMjkuNCA2NS42LTY1LjYgNjUuNmwtNS4yIDBjLTEyLjggMC0yNS41LTMuNS0zNi41LTEwLjFsLTMzLjUtMjAuMWMtMS45LTEuMS0zLjQtMS4yLTQuNS0xLjEtMS4zIC4yLTIuNyAuOS0zLjkgMi4xcy0xLjkgMi42LTIuMSAzLjljLS4yIDEuMS0uMSAyLjYgMS4xIDQuNWwyMC4xIDMzLjVjNi42IDExIDEwLjEgMjMuNiAxMC4xIDM2LjVsMCA1LjJjMCAzNi4yLTI5LjQgNjUuNi02NS42IDY1LjYtMTcuNCAwLTM0LjEtNi45LTQ2LjQtMTkuMmwtMS4zLTEuM2MtMy43LTMuNy05LjYtMy43LTEzLjMgMGwtMS4zIDEuM2MtMTIuMyAxMi4zLTI5IDE5LjItNDYuNCAxOS4yLTM2LjIgMC02NS42LTI5LjQtNjUuNy02NS42bDAtNS4yYzAtMTIuOCAzLjUtMjUuNSAxMC4xLTM2LjVsMjAuMS0zMy41YzEuMS0xLjkgMS4yLTMuNCAxLjEtNC41LS4yLTEuMy0uOS0yLjctMi4xLTMuOXMtMi42LTEuOS0zLjktMi4xYy0uNS0uMS0xLjItLjEtMS45IDBsLTIuNSAxLTMzLjUgMjAuMWMtMTEgNi42LTIzLjYgMTAuMS0zNi41IDEwLjFsLTUuMiAwQzQ1LjQgMzc2IDE2IDM0Ni42IDE2IDMxMC40IDE2IDI5MyAyMi45IDI3Ni4zIDM1LjIgMjY0bDEuMy0xLjMgMS4yLTEuNWMyLjEtMy4xIDIuMS03LjIgMC0xMC4zbC0xLjItMS41LTEuMy0xLjNDMjIuOSAyMzUuOCAxNiAyMTkuMSAxNiAyMDEuNyAxNiAxNjUuNCA0NS40IDEzNiA4MS43IDEzNmw1LjIgMGMxMi44IDAgMjUuNSAzLjUgMzYuNSAxMC4xbDMzLjUgMjAuMSAyLjUgMWMuNyAuMSAxLjQgLjEgMS45IC4xIDEuMy0uMiAyLjctLjkgMy45LTIuMXMxLjktMi42IDIuMS0zLjljLjEtLjUgLjEtMS4yLS4xLTEuOWwtMS0yLjUtMjAuMS0zMy41Yy02LjYtMTEtMTAuMS0yMy42LTEwLjEtMzYuNWwwLTUuMmMwLTM2LjIgMjkuNC02NS43IDY1LjctNjUuNyAxNy40IDAgMzQuMSA2LjkgNDYuNCAxOS4ybDEuMyAxLjNjMy43IDMuNiA5LjYgMy43IDEzLjMgMGwxLjMtMS4zIDQuOC00LjRDMjgwLjUgMjEuMyAyOTUuMSAxNiAzMTAuNCAxNnoiXQogICAgfTsKICAgIGZhVGVldGhPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlZXRoLW9wZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjYyZiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NmwwIDgwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTAgMjcyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDhjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzA0em04MC0xNjBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0em0xMjggMGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMjR6TTgwIDExMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTI0ek00OCAzODRsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMnptMTQ0IDQ4Yy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmw2NCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4em0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNmMwLTguOCA3LjItMTYgMTYtMTZsNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHptMTEyLTE2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyeiJdCiAgICB9OwogICAgZmFCYXJzU3RhZ2dlcmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMtc3RhZ2dlcmVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJlb3JkZXIiLCAic3RyZWFtIl0sICJmNTUwIiwgIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTY0IDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhUmVvcmRlciA9IGZhQmFyc1N0YWdnZXJlZDsKICAgIGZhU3RyZWFtID0gZmFCYXJzU3RhZ2dlcmVkOwogICAgZmFXYXJlaG91c2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2FyZWhvdXNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0OTQiLCAiTTAgMTQyLjFMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI0MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzM3LjljMC0yNy41LTE3LjYtNTItNDMuOC02MC43TDMwMy4yIDUuMWMtOS45LTMuMy0yMC41LTMuMy0zMC40IDBMNDMuOCA4MS40QzE3LjYgOTAuMSAwIDExNC42IDAgMTQyLjF6TTQ2NCAyNTZsLTM1MiAwIDAgNjQgMzUyIDAgMC02NHpNMTEyIDQxNmwzNTIgMCAwLTY0LTM1MiAwIDAgNjR6bTM1MiAzMmwtMzUyIDAgMCA2NCAzNTIgMCAwLTY0eiJdCiAgICB9OwogICAgZmFTd2F0Y2hib29rID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN3YXRjaGJvb2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVjMyIsICJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDM2OGMwIDUzLTQzIDk2LTk2IDk2UzAgNDY5IDAgNDE2TDAgNDh6TTI0MCA0MDkuNmwwLTI3MS41IDQ4LjEtNDguMWMxOC43LTE4LjcgNDkuMS0xOC43IDY3LjkgMGw2Ny45IDY3LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjQwIDQwOS42ek0yMDUuNSA1MTJsMTkyLTE5MiA2Ni42IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU4LjUgMHpNODAgNjRjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNkw4MCA2NHpNNjQgMjA4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTk2IDQ0MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYUNhbXBncm91bmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtcGdyb3VuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5NzhdLCAiZjZiYiIsICJNMzQ0LjggNTIuM2MxMS4yLTEzLjcgOS4yLTMzLjgtNC41LTQ1cy0zMy44LTkuMi00NSA0LjVsLTM5LjIgNDgtMzkuMi00OEMyMDUuNi0xLjkgMTg1LjQtNCAxNzEuNyA3LjJzLTE1LjcgMzEuNC00LjUgNDVsNDcuNCA1OC0yMDIgMjQ2LjlDNC41IDM2Ny4xIDAgMzc5LjYgMCAzOTIuNkwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM5LjRjMC0xMi45LTQuNS0yNS41LTEyLjctMzUuNWwtMjAyLTI0Ni45IDQ3LjQtNTh6TTI1NiAyODhsMTEyIDEyOC0yMjQgMCAxMTItMTI4eiJdCiAgICB9OwogICAgZmFQZXJzb25XYWxraW5nQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTUyIiwgIk0xMDQuNSAyNGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bS04IDE4MS4zTDczLjkgMjI3LjljLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM1LjEtMzUuMWMyMi44LTIyLjggNTMuNi0zNS42IDg1LjgtMzUuNiAzNi45IDAgNzEuOCAxNi44IDk0LjggNDUuNkwyNjIuMyAxODBjNi4xIDcuNiAxNS4zIDEyIDI1IDEybDMzLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzMuMiAwYy0yOS4yIDAtNTYuNy0xMy4zLTc1LTM2bC0zLjgtNC43IDAgMTE1LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhMMTMwIDM0Ny41Yy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6TTk2LjYgMzcxYzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVMNTUuMSA1MzQuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjguMy02OC4zYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEw5Ni42IDM3MXpNNTA1LjUgMzQ1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MnoiXQogICAgfTsKICAgIGZhR2xhc3NlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbGFzc2VzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1MzAiLCAiTTE0My4zIDk2Yy0xNCAwLTI2LjUgOS4yLTMwLjYgMjIuNkw3MC40IDI1NiAyMjQgMjU2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDY0IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsMTUzLjYgMC00Mi4zLTEzNy40QzQ1OS4yIDEwNS4yIDQ0Ni44IDk2IDQzMi43IDk2TDQwMCA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMi43IDBjNDIuMSAwIDc5LjQgMjcuNSA5MS44IDY3LjhsNDUuNCAxNDcuNWM0LjEgMTMuMiA2LjEgMjYuOSA2LjEgNDAuN2wwIDk2YzAgNTMtNDMgOTYtOTYgOTZsLTY0IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC0zMi02NCAwIDAgMzJjMCA1My00MyA5Ni05NiA5NmwtNjQgMGMtNTMgMC05Ni00My05Ni05NmwwLTk2YzAtMTMuOCAyLjEtMjcuNSA2LjEtNDAuN0w1MS41IDk5LjhDNjMuOSA1OS41IDEwMS4xIDMyIDE0My4zIDMyTDE3NiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIuNyAwek02NCAzMjBsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjQtMTI4IDB6bTQxNiA5NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0LTEyOCAwIDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlUGF1c2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1wYXVzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDkyLCAicGF1c2UtY2lyY2xlIl0sICJmMjhiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjI0IDE5MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFQYXVzZUNpcmNsZTIgPSBmYUNpcmNsZVBhdXNlMjsKICAgIGZhTWVtb3J5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1lbW9yeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTM4IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOGwwIDcuNEMwIDE0Mi4yIDQuNCAxNDggMTAuMSAxNTEuNyAyMy4zIDE2MC4zIDMyIDE3NS4xIDMyIDE5MnMtOC43IDMxLjctMjEuOSA0MC4zQzQuNCAyMzYgMCAyNDEuOCAwIDI0OC42bDAgNTUuNCA1MTIgMCAwLTU1LjRjMC02LjgtNC40LTEyLjYtMTAuMS0xNi4zLTEzLjItOC42LTIxLjktMjMuNC0yMS45LTQwLjNzOC43LTMxLjcgMjEuOS00MC4zYzUuNy0zLjcgMTAuMS05LjUgMTAuMS0xNi4zbDAtNy40YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek01MTIgNDE2bDAtNjQtNTEyIDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwIDAtMjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI0IDg4IDAgMC0yNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjQgODggMCAwLTI0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAyNCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0xNjAgMTYwbDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem0xMjggMGwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnptMTI4IDBsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUdpZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2lmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzg3M10sICJmMDZiIiwgIk0zMjEuNSA2OC44QzMyOS4xIDU1LjkgMzQyLjkgNDggMzU3LjggNDhsMi4yIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBzLTE3LjkgNDAtNDAgNDBsLTczLjMgMCAzNC44LTU5LjJ6bS0xMzEgMGwzNC44IDU5LjItNzMuMyAwYy0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwbDIuMiAwYzE0LjkgMCAyOC44IDcuOSAzNi4zIDIwLjh6bTg5LjYtMjQuM2wtMjQuMSA0MS0yNC4xLTQxQzIxNS43IDE2LjkgMTg2LjEgMCAxNTQuMiAwTDE1MiAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjQgMy41IDI4IDkuNiA0MEwzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNDEuNiAwYzYuMS0xMiA5LjYtMjUuNiA5LjYtNDAgMC00OC42LTM5LjQtODgtODgtODhsLTIuMiAwYy0zMS45IDAtNjEuNSAxNi45LTc3LjcgNDQuNHpNNDgwIDI3MmwtMjAwIDAgMCAyMDggMTM2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNDR6bS0yNDggMGwtMjAwIDAgMCAxNDRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTM2IDAgMC0yMDh6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdoZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGwtd2hlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUyYSIsICJNMTc2LTE2YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MCAwLTguOCA3LjItMTYgMTYtMTZ6TTU2IDBsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiA0OEM0Mi43IDQ4IDMyIDM3LjMgMzIgMjRTNDIuNyAwIDU2IDB6TTI0IDcybDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDEyMEMxMC43IDEyMCAwIDEwOS4zIDAgOTZTMTAuNyA3MiAyNCA3MnptOCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjcyIDBjMC04LjggNy4yLTE2IDE2LTE2IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MHpNNDAwLTE2YzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MCAwLTguOCA3LjItMTYgMTYtMTZ6bTgwIDE0NGMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zNTIgMTEyYzguOCAwIDE2IDcuMiAxNiAxNiAwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODB6bS05NiAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTYgMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0wIDMwNGMwLTI2LjUgMjEuNS00OCA0OC00OGw0MTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzA0ek00OCA0MTZsMCA0OCA0OCAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4ek05NiAzMDRsLTQ4IDAgMCA0OGMyNi41IDAgNDgtMjEuNSA0OC00OHpNNDY0IDQxNmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsNDggMCAwLTQ4ek00MTYgMzA0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDAtNDgtNDggMHptLTk2IDgwYTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHoiXQogICAgfTsKICAgIGZhRHVuZ2VvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW5nZW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDkiLCAiTTM0Ny41IDE0NC44YzYuNSA1LjQgMTIuNSAxMS4zIDE4IDE3LjcgOC43IDEwLjIgMjMuNyAxNCAzNS4xIDYuOWw1NC4xLTMzLjhjMTEuMi03IDE0LjctMjEuNyA2LjktMzIuMi0xNS4zLTIwLjUtMzMuNS0zOC42LTU0LjEtNTMuOC0xMC40LTcuNi0yNC43LTQuMy0zMS44IDYuNGwtMzUuMSA1Mi42Yy03LjggMTEuNi0zLjggMjcuMyA3IDM2LjJ6TTMyNy44IDQxLjFjOC42LTEyLjkgMi45LTMwLjUtMTIuMi0zNC4xLTE5LjEtNC42LTM5LjEtNy01OS42LTdzLTQwLjQgMi40LTU5LjYgN2MtMTUuMSAzLjYtMjAuOCAyMS4yLTEyLjIgMzQuMWw0MCA2MGM1LjIgNy44IDE0LjUgMTEuNyAyMy45IDExLjIgNS4yLS4zIDEwLjYtLjMgMTUuOCAwIDkuNCAuNSAxOC43LTMuNCAyMy45LTExLjJsNDAtNjB6TTUwLjUgMTAzLjNjLTcuOSAxMC41LTQuMyAyNS4zIDYuOSAzMi4ybDU0LjEgMzMuOGMxMS40IDcuMSAyNi4zIDMuMyAzNS4xLTYuOSA1LjUtNi40IDExLjUtMTIuMyAxOC0xNy43IDEwLjgtOC45IDE0LjgtMjQuNiA3LTM2LjJMMTM2LjQgNTUuOWMtNy4xLTEwLjctMjEuNS0xNC0zMS44LTYuNC0yMC42IDE1LjEtMzguOCAzMy4zLTU0LjEgNTMuOHptNjIgMTQxLjFjLjgtOS45LTMuMy0xOS45LTExLjgtMjUuMUw0MSAxODJjLTEyLjktOC0yOS45LTIuMy0zMy42IDEyLjUtNC45IDE5LjctNy41IDQwLjMtNy41IDYxLjZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0zLjkgLjItNy44IC41LTExLjZ6bTI4Ny4xIDBjLjMgMy44IC41IDcuNyAuNSAxMS42bDAgMjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtMjEuMi0yLjYtNDEuOC03LjUtNjEuNi0zLjYtMTQuNy0yMC43LTIwLjUtMzMuNi0xMi41bC01OS43IDM3LjNjLTguNCA1LjMtMTIuNiAxNS4yLTExLjggMjUuMXpNODggMzUybC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em00MDAgMGwtNjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzA0em0tODAgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnptMTYwIDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI3MnoiXQogICAgfTsKICAgIGZhU3VpdGNhc2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWVka2l0Il0sICJmMGZhIiwgIk0xOTIgNTZsMCA0MCAxMjggMCAwLTQwYzAtNC40LTMuNi04LTgtOEwyMDAgNDhjLTQuNCAwLTggMy42LTggOHptLTQ4IDhsMC04YzAtMzAuOSAyNS4xLTU2IDU2LTU2TDMxMiAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDI0LTIyNCAwIDAtNDE2ek05NiAxNzZsMCAzMDQtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMCAwIDgwek00MTYgNDgwbDAtMzg0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTMyIDB6TTI0NCAyMDhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDM2LTM2IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwzNiAwIDAgMzZjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzYgMzYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTM2IDAgMC0zNmMwLTguOC03LjItMTYtMTYtMTZsLTI0IDB6Il0KICAgIH07CiAgICBmYU1lZGtpdCA9IGZhU3VpdGNhc2VNZWRpY2FsOwogICAgZmFQZXJzb25DYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jYW5lIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1M2MiLCAiTTIzMi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTQ0IDIzNi43TDk3LjcgMjk5LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzE0MiAxMzIgMTgxLjcgMTEyIDIyNCAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMzA0IDIzNi43IDMwNCA1MTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0yNzUuM3pNMzkyIDM4NGMtNC40IDAtOCAzLjYtOCA4IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMjhjMC00LjQtMy42LTgtOC04eiJdCiAgICB9OwogICAgZmFHYXVnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkYXNoYm9hcmQiLCAiZ2F1Z2UtbWVkIiwgInRhY2hvbWV0ZXItYWx0LWF2ZXJhZ2UiXSwgImY2MjQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNMTQ0IDE3NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bS0xNiA4MGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0yODggMzJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek00MDAgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYURhc2hib2FyZCA9IGZhR2F1Z2U7CiAgICBmYUdhdWdlTWVkID0gZmFHYXVnZTsKICAgIGZhVGFjaG9tZXRlckFsdEF2ZXJhZ2UgPSBmYUdhdWdlOwogICAgZmFFbnZlbG9wZU9wZW5UZXh0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3BlLW9wZW4tdGV4dCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNjU4IiwgIk0yODggMzMuOUw5Ni40IDE3NS44IDI1NC41IDI5M2M1LjMgMy45IDExLjIgNi45IDE3LjUgOC43TDI3MiA0NjRjMCA1LjUgLjUgMTAuOCAxLjMgMTZMOTYgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIzOS45YzAtMjAuMyA5LjYtMzkuNCAyNS45LTUxLjRMMjU0LjUtMjFjOS43LTcuMiAyMS40LTExIDMzLjUtMTFzMjMuOCAzLjkgMzMuNSAxMUw1MTguMSAxMjQuN2M3LjIgNS4zIDEzLjEgMTIgMTcuNCAxOS42LTIuNS0uMi01LS4zLTcuNS0uM0w0MzYuNiAxNDQgMjg4IDMzLjl6TTMyMCAyNDBjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIyNHptODAgMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtOTYgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAweiJdCiAgICB9OwogICAgZmFUb29sYm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvb2xib3giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MjBdLCAiZjU1MiIsICJNMTc2IDU2bDAgNDAgMTYwIDAgMC00MGMwLTQuNC0zLjYtOC04LThMMTg0IDQ4Yy00LjQgMC04IDMuNi04IDh6TTEyOCA5NmwwLTQwYzAtMzAuOSAyNS4xLTU2IDU2LTU2TDMyOCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2bDAgNDAgMjguMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFsNTEuOSA1MS45YzkgOSAxNC4xIDIxLjIgMTQuMSAzMy45bDAgNzYuMS0xMzYgMCAwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTYtMTQ0IDAgMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTEzNiAwIDAtNzYuMWMwLTEyLjcgNS4xLTI0LjkgMTQuMS0zMy45bDUxLjktNTEuOWM5LTkgMjEuMi0xNC4xIDMzLjktMTQuMUwxMjggOTZ6TTAgNDE2bDAtOTYgMTM2IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMTQ0IDAgMCAxNmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYgMTM2IDAgMCA5NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdCiAgICB9OwogICAgZmFQb3dlck9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwb3dlci1vZmYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MjExXSwgImYwMTEiLCAiTTI4OCAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzIyNC0xNy43IDIyNCAwbDAgMjU2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMMjg4IDB6TTE0Ni4zIDk4LjRjMTQuNS0xMC4xIDE4LTMwLjEgNy45LTQ0LjZzLTMwLjEtMTgtNDQuNi03LjlDNDMuNCA5Mi4xIDAgMTY5IDAgMjU2IDAgMzk3LjQgMTE0LjYgNTEyIDI1NiA1MTJTNTEyIDM5Ny40IDUxMiAyNTZjMC04Ny00My40LTE2My45LTEwOS43LTIxMC4xLTE0LjUtMTAuMS0zNC40LTYuNi00NC42IDcuOXMtNi42IDM0LjQgNy45IDQ0LjZjNDkuOCAzNC44IDgyLjMgOTIuNCA4Mi4zIDE1Ny42IDAgMTA2LTg2IDE5Mi0xOTIgMTkyUzY0IDM2MiA2NCAyNTZjMC02NS4yIDMyLjUtMTIyLjkgODIuMy0xNTcuNnoiXQogICAgfTsKICAgIGZhU2lnbmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0NiwgInNpZ25hbC01IiwgInNpZ25hbC1wZXJmZWN0Il0sICJmMDEyIiwgIk00ODggNTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMHpNMzYwIDEyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMwNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMjgwIDI0OGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4ek0xNTIgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0ek00OCAzODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTaWduYWw1ID0gZmFTaWduYWw7CiAgICBmYVNpZ25hbFBlcmZlY3QgPSBmYVNpZ25hbDsKICAgIGZhQXJyb3dzU3BpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3Mtc3BpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGJiIiwgIk00ODEuNyAyNDAuMWMtMTcuNi0xLjItMzIuOSAxMi0zNC4yIDI5LjctMy4zIDQ3LTIzLjYgODkuNC01NC44IDEyMUwzNjEgMzU5Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzMyMCAzNjYuMyAzMjAgMzc2bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDExMiAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtMzUtMzVjNDEuNy00Mi4yIDY4LjktOTguOCA3My40LTE2MS44IDEuMi0xNy42LTEyLTMyLjktMjkuNy0zNC4yek0zOSA0MUw3NCA3NmMtNDEuNyA0Mi4yLTY4LjkgOTguOC03My40IDE2MS44LTEuMiAxNy42IDEyIDMyLjkgMjkuNyAzNC4yczMyLjktMTIgMzQuMi0yOS43YzMuMy00NyAyMy42LTg5LjQgNTQuOC0xMjFMMTUxIDE1M2M2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzE5MiAxNDUuNyAxOTIgMTM2bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0TDU2IDBDNDYuMyAwIDM3LjUgNS44IDMzLjggMTQuOFMzMi4yIDM0LjEgMzkgNDF6bTIwMS0xMC43Yy0xLjIgMTcuNiAxMiAzMi45IDI5LjcgMzQuMiA0NyAzLjMgODkuNCAyMy42IDEyMSA1NC44TDM1OSAxNTFjLTYuOSA2LjktOC45IDE3LjItNS4yIDI2LjJTMzY2LjMgMTkyIDM3NiAxOTJsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC05LjctNS44LTE4LjUtMTQuOC0yMi4yUzQ3Ny45IDMyLjIgNDcxIDM5TDQzNiA3NGMtNDIuMi00MS43LTk4LjgtNjguOS0xNjEuOC03My40LTE3LjYtMS4yLTMyLjkgMTItMzQuMiAyOS43ek00MSA0NzNsMzUtMzVjNDIuMiA0MS43IDk4LjggNjguOSAxNjEuOCA3My40IDE3LjYgMS4yIDMyLjktMTIgMzQuMi0yOS43cy0xMi0zMi45LTI5LjctMzQuMmMtNDctMy4zLTg5LjQtMjMuNi0xMjEtNTQuOEwxNTMgMzYxYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTQ1LjcgMzIwIDEzNiAzMjBMMjQgMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNEwwIDQ1NmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJTMzQuMSA0NzkuOCA0MSA0NzN6Il0KICAgIH07CiAgICBmYUpvaW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpvaW50IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1OTUiLCAiTTM2MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTljMCA0MC4zIDE2IDc5IDQ0LjUgMTA3LjVsMjEgMjFDNDY5IDE5MSA0ODAgMjE3LjQgNDgwIDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTljMC0xNC45LTUuOS0yOS4xLTE2LjQtMzkuNmwtMjEtMjFDMzU3LjEgMTQ2LjkgMzM2IDk2IDMzNiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0ek01NTIgMjg4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE5YzAtNDAuMy0xNi03OS00NC41LTEwNy41bC0yMS0yMUM0NDMgOTcgNDMyIDcwLjYgNDMyIDQzbDAtMTljMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE5YzAgMTQuOSA1LjkgMjkuMSAxNi40IDM5LjZsMjEgMjFDNTU0LjkgMTQxLjEgNTc2IDE5MiA1NzYgMjQ1bDAgMTljMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTI5Mi43IDMyMGM1LjYgMCAxMC43IDIuOSAxMy42IDcuNkwzOTQuNiA0NzFjMS4zIDIuMSAwIDQuOS0yLjQgNS4yLTE2LjEgMi41LTMyLjQgMy43LTQ4LjcgMy43bC0zOC4xIDBjLTUuNiAwLTEwLjctMi45LTEzLjYtNy42bC03OS0xMjguNGMtNi05LjggMC0yMi42IDExLjUtMjMuMyA2LjctLjQgMTMuNC0uNiAyMC4yLS42bDQ4LjMgMHpNNDU5LjMgNDY1LjljLTYuNCAxLTEyLjctMS45LTE2LjEtNy40TDM3NC4xIDM0Ni4xYy02LjctMTAuOSAxLjUtMjQuNyAxNC4yLTIyLjkgMS4zIC4yIDIuNiAuNCAzLjggLjZsMTM2LjQgMjFjMjcuMyA0LjIgNDcuNCAyNy43IDQ3LjQgNTUuM3MtMjAuMSA1MS4xLTQ3LjQgNTUuM2wtNjkuMiAxMC42ek0xMzguNyAzMzZjNi43LTEuNSAxMy42IDEuNCAxNy4yIDcuMmw2OC45IDExMmM2LjYgMTAuNy0xLjIgMjQuNC0xMy44IDIzLjEtMTMtMS40LTI1LjktMy41LTM4LjYtNi41TDMxLjIgNDM5LjJDMTIuOSA0MzUgMCA0MTguNyAwIDQwMHMxMi45LTM1IDMxLjItMzkuMkwxMzguNyAzMzZ6Il0KICAgIH07CiAgICBmYUJyYWlsbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhaWxsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMmExIiwgIk04MCAxNDRhODAgODAgMCAxIDAgMC0xNjAgODAgODAgMCAxIDAgMCAxNjB6bTAgMTkyYTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wIDEzNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0LTEwLjcgMjQtMjQgMjR6bTAgNTZjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODAtODAgMzUuOC04MCA4MCAzNS44IDgwIDgwIDgwem0yNDgtODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjQgMTAuNy0yNCAyNC0yNCAyNCAxMC43IDI0IDI0em01NiAwYzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwIDM1LjggODAgODAgODAgODAtMzUuOCA4MC04MHpNMzA0IDIzMmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTAgMTA0YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0wLTE5MmE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHoiXQogICAgfTsKICAgIGZhQmFza2V0U2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFza2V0LXNob3BwaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNob3BwaW5nLWJhc2tldCJdLCAiZjI5MSIsICJNMjg4IDBjNi42IDAgMTIuOSAyLjcgMTcuNCA3LjVsMTQ0IDE1MiAuNSAuNSA3OC4xIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxNC41LTkuNiAyNi43LTIyLjggMzAuN0w0OTEuMSA0MjkuOWMtNi41IDI5LjMtMzIuNSA1MC4xLTYyLjUgNTAuMWwtMjgxLjMgMGMtMzAgMC01Ni0yMC44LTYyLjUtNTAuMWwtNDYtMjA3LjJjLTEzLjItMy45LTIyLjgtMTYuMi0yMi44LTMwLjcgMC0xNy43IDE0LjMtMzIgMzItMzJsNzguMSAwIC41LS41IDE0NC0xNTJDMjc1LjEgMi43IDI4MS40IDAgMjg4IDB6bTAgNTguOUwxOTIuMiAxNjAgMzgzLjggMTYwIDI4OCA1OC45ek0yMDggMjY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMTJ6bTgwLTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMjggMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTExMnoiXQogICAgfTsKICAgIGZhU2hvcHBpbmdCYXNrZXQgPSBmYUJhc2tldFNob3BwaW5nOwogICAgZmFCcmlkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzgiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw4IDAgMCA2NC00MCAwIDAgMTEyYzM3LjYgOS40IDY0IDQzLjIgNjQgODJsMCA5NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NGMwLTM4LjggMjYuNC03Mi42IDY0LTgybDAtMTEyLTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHoiXQogICAgfTsKICAgIGZhUGxhbmVBcnJpdmFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWFycml2YWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3NDhdLCAiZjVhZiIsICJNMzg2LjYgMTkzLjFMMjY1LjkgMy43Yy00LjgtNy42LTEyLjYtMTIuOC0yMS40LTE0LjNsLTQzLjEtNy42Yy0xMC44LTEuOS0yMC4yIDcuMy0xOC42IDE4LjFsMjQgMTYxLjYtMTA1LTE4LjUtMzMuOC02MS44QzY0LjUgNzQuNyA1OC4yIDcwLjIgNTEuMSA2OUwzNCA2NmMtOS44LTEuNy0xOC44IDUuOS0xOC44IDE1LjhsLjYgMTA2LjNjLjIgMzAuOSAyMi40IDU3LjMgNTIuOSA2Mi43bDEzLjUgMi40IDAgMCA0MTcuNiA3My42YzMwLjUgNS40IDU5LjUtMTUgNjQuOS00NS40cy0xNS01OS41LTQ1LjQtNjQuOUwzODYuNiAxOTMuMXpNMjI0IDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTEzMS4yLTE1LjNhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQ0OHoiXQogICAgfTsKICAgIGZhQ2FzaFJlZ2lzdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhc2gtcmVnaXN0ZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc4OCIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NHMyOC43IDY0IDY0IDY0bDQ4IDAgMCAzMi01NyAwYy0zMS42IDAtNTguNSAyMy4xLTYzLjMgNTQuNEwxLjEgMzY0LjFDLjQgMzY4LjggMCAzNzMuNiAwIDM3OC40TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjkuNmMwLTQuOC0uNC05LjYtMS4xLTE0LjRMNDg4LjIgMjE0LjRDNDgzLjUgMTgzLjEgNDU2LjYgMTYwIDQyNSAxNjBsLTIxNyAwIDAtMzIgNDggMGMzNS4zIDAgNjQtMjguNyA2NC02NFMyOTEuMyAwIDI1NiAwTDk2IDB6bTAgNDhsMTYwIDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMOTYgODBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZ6TTY0IDQyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMzYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCA0NDhjLTEzLjMgMC0yNC0xMC43LTI0LTI0em00OC0xNjBhMjQgMjQgMCAxIDEgMC00OCAyNCAyNCAwIDEgMSAwIDQ4em0xMjAtMjRhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMTYwIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTMyOCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMjU2IDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6TTQyNCAyNDBhMjQgMjQgMCAxIDEgLTQ4IDAgMjQgMjQgMCAxIDEgNDggMHpNMzUyIDM0NGEyNCAyNCAwIDEgMSAwLTQ4IDI0IDI0IDAgMSAxIDAgNDh6Il0KICAgIH07CiAgICBmYVJpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzBiIiwgIk02NCAyMDhjMCA3LjggNC40IDE4LjcgMTcuMSAzMC4zIDQ1LjQtMjQuMiAxMDcuNy0zOC4zIDE3NC45LTM4LjNzMTI5LjUgMTQuMSAxNzQuOSAzOC4zYzEyLjgtMTEuNiAxNy4xLTIyLjUgMTcuMS0zMC4zIDAtMTIuMy0xMC44LTMyLTQ3LjktNTAuNi0zNS4yLTE3LjYtODYuMS0yOS40LTE0NC4xLTI5LjRzLTEwOC45IDExLjgtMTQ0LjEgMjkuNEM3NC44IDE3NiA2NCAxOTUuNyA2NCAyMDh6bTE5MiA0MGMtNDcgMC04OS4zIDcuNi0xMjIuOSAxOS43IDMzLjIgMTIuNCA3NS43IDIwLjMgMTIyLjkgMjAuM3M4OS43LTcuOCAxMjIuOS0yMC4zQzM0NS4zIDI1NS42IDMwMyAyNDggMjU2IDI0OHpNMCAyMDhDMCAxNTguNCAzOS40IDEyMi4yIDgzLjMgMTAwLjIgMTI5LjEgNzcuMyAxOTAuMyA2NCAyNTYgNjRzMTI2LjkgMTMuMyAxNzIuNyAzNi4yYzQzLjkgMjIgODMuMyA1OC4yIDgzLjMgMTA3LjhsMCA5NmMwIDQ5LjYtMzkuNCA4NS44LTgzLjMgMTA3LjgtNDUuOSAyMi45LTEwNyAzNi4yLTE3Mi43IDM2LjJTMTI5LjEgNDM0LjcgODMuMyA0MTEuOEMzOS40IDM4OS44IDAgMzUzLjYgMCAzMDRsMC05NnoiXQogICAgfTsKICAgIGZhU2hhcmVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFyZS1ub2RlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaGFyZS1hbHQiXSwgImYxZTAiLCAiTTM4NCAxOTJjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTYtOTYgNDMtOTYgOTZjMCA1LjQgLjUgMTAuOCAxLjMgMTZMMTU5LjYgMTg0LjFjLTE2LjktMTUtMzkuMi0yNC4xLTYzLjYtMjQuMS01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzI0LjQgMCA0Ni42LTkuMSA2My42LTI0LjFMMjg5LjMgNDAwYy0uOSA1LjItMS4zIDEwLjUtMS4zIDE2IDAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTYtNDMtOTYtOTYtOTZjLTI0LjQgMC00Ni42IDkuMS02My42IDI0LjFMMTkwLjcgMjcyYy45LTUuMiAxLjMtMTAuNSAxLjMtMTZzLS41LTEwLjgtMS4zLTE2bDEyOS43LTcyLjFjMTYuOSAxNSAzOS4yIDI0LjEgNjMuNiAyNC4xeiJdCiAgICB9OwogICAgZmFTaGFyZUFsdCA9IGZhU2hhcmVOb2RlczsKICAgIGZhUGVyc29uQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTNmIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCaW5vY3VsYXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpbm9jdWxhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFlNSIsICJNMTI4IDMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi05NiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDk2bDAgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC01OS4xYzAtMzQuNiA5LjQtNjguNiAyNy4yLTk4LjMgMTMuNy0yMi44IDIyLjUtNDguMiAyNS44LTc0LjZMNjAuNSAxNTZjMi0xNiAxNS42LTI4IDMxLjgtMjhsOTkuOCAwem0yMjcuOCAwYzE2LjEgMCAyOS44IDEyIDMxLjggMjhMNDU5IDIxNmMzLjMgMjYuNCAxMi4xIDUxLjggMjUuOCA3NC42IDE3LjggMjkuNyAyNy4yIDYzLjcgMjcuMiA5OC4zbDAgNTkuMWMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzIwIDk5LjggMHpNMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMi05NiAwIDAtMzJ6bS0zMiA2NGwwIDE2MC02NCAwIDAtMTYwIDY0IDB6Il0KICAgIH07CiAgICBmYUtpcFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2lwLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTFjNCIsICJNMzQwLjggODguM2MxMy40LTExLjUgMTUtMzEuNyAzLjUtNDUuMXMtMzEuNy0xNS00NS4xLTMuNUwxMjggMTg2LjQgMTI4IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDQ2LjMgNjQgNjRsMCAxNjgtMzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMTY4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjIuNCAxNzEuMiAxNDYuN2MxMy40IDExLjUgMzMuNiA5LjkgNDUuMS0zLjVzOS45LTMzLjYtMy41LTQ1LjFMMTczLjIgMjgwIDM1MiAyODBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTczLjIgMjMyIDM0MC44IDg4LjN6Il0KICAgIH07CiAgICBmYUhhcmREcml2ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFyZC1kcml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQzNiwgImhkZCJdLCAiZjBhMCIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDI2MC4xQzE4LjEgMjQ3LjQgNDAuMiAyNDAgNjQgMjQwbDMyMCAwYzIzLjggMCA0NS45IDcuNCA2NCAyMC4xTDQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNNDQ4IDM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NHpNMjI0IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xMjgtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFIZGQyID0gZmFIYXJkRHJpdmUyOwogICAgZmFSYW5raW5nU3RhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYW5raW5nLXN0YXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2MSIsICJNMzIxLjggNTQuMUwyOTguMiA2LjNjLTMuOS04LjMtMTYuMS04LjYtMjAuNCAwbC0yMy42IDQ3LjgtNTIuMyA3LjVjLTkuMyAxLjQtMTMuMyAxMi45LTYuNCAxOS44bDM4IDM3LTkgNTIuMWMtMS40IDkuMyA4LjIgMTYuNSAxNi44IDEyLjJsNDYuOS0yNC44IDQ2LjYgMjQuNGM4LjYgNC4zIDE4LjMtMi45IDE2LjgtMTIuMmwtOS01Mi4xIDM4LTM2LjZjNi44LTYuOCAyLjktMTguMy02LjQtMTkuOGwtNTIuMy03LjV6TTI1NiAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYwYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNjBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTQ4IDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTQxNiA0MzJsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFVc2VyVGllID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItdGllIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MDgiLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMSAwLTI0MCAxMjAgMTIwIDAgMSAxIDAgMjQwem0tMzAuNSA1Nmw2MSAwYzkuNyAwIDE3LjUgNy44IDE3LjUgMTcuNSAwIDQuMi0xLjUgOC4yLTQuMiAxMS40bC0yNy40IDMyIDMxIDExNS4xIC42IDAgMzQuNi0xMzguNWMyLjItOC43IDExLjEtMTQgMTkuNS0xMC44IDYxLjkgMjMuNiAxMDUuOSA4My42IDEwNS45IDE1My44IDAgMTUuMS0xMi4zIDI3LjQtMjcuNCAyNy40TDQzLjQgNTEyYy0xNS4xIDAtMjcuNC0xMi4zLTI3LjQtMjcuNCAwLTcwLjIgNDQtMTMwLjIgMTA1LjktMTUzLjggOC40LTMuMiAxNy4zIDIuMSAxOS41IDEwLjhsMzQuNiAxMzguNSAuNiAwIDMxLTExNS4xLTI3LjQtMzJjLTIuNy0zLjItNC4yLTcuMi00LjItMTEuNCAwLTkuNyA3LjgtMTcuNSAxNy41LTE3LjV6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVsbGlwc2lzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImVsbGlwc2lzLWgiXSwgImYxNDEiLCAiTTAgMjU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTY4IDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yMjQtNTZhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzSCA9IGZhRWxsaXBzaXM7CiAgICBmYVN0b3JlU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3RvcmUtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA3MSIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTguNi01OC42YzEuMS00IDEuNi04LjIgMS42LTEyLjVsMC0xNTEuMmMtMTIuNSA0LjYtMjYuMSA3LjItNDAuNSA3LjItOC4xIDAtMTUuOS0uOC0yMy41LTIuNGwwIDY2LjQtMzAuMiAwLTEzNy41LTEzNy41YzIuOS0zLjYgNS41LTcuNCA3LjYtMTEuNSAxMS42IDIyIDM0LjcgMzcgNjEuMyAzNyAyNi44IDAgNDkuOC0xNS4xIDYxLjQtMzcuMSAxMS40IDIyLjEgMzQuNSAzNy4xIDYwLjggMzcuMSA0NS42IDAgNzguNC00My43IDY1LjYtODcuNUw1MTMuOCA3Mi4zQzUwNi44IDQ4LjQgNDg0LjkgMzIgNDYwIDMyTDExNiAzMmMtNS41IDAtMTAuOCAuOC0xNS45IDIuM0w0MS0yNC45ek0xNTEuNSAyMjEuM0w0OC43IDExOC42IDM4LjkgMTUyLjVjLTEyLjggNDMuNyAyMCA4Ny41IDY1LjYgODcuNSAxOC4xIDAgMzQuNy03LjEgNDctMTguN3pNNDEwLjIgNDgwbC0xMjgtMTI4LTE1NC4yIDAgMC02Ni40Yy03LjYgMS42LTE1LjUgMi40LTIzLjUgMi40LTE0LjQgMC0yOC0yLjYtNDAuNS03LjJMNjQgNDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI5OC4yIDB6Il0KICAgIH07CiAgICBmYVBlcmNlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyY2VudCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMTAxLCA2Mjc4NSwgInBlcmNlbnRhZ2UiXSwgIjI1IiwgIk0xOTIgMTI4YTk2IDk2IDAgMSAwIC0xOTIgMCA5NiA5NiAwIDEgMCAxOTIgMHpNNDQ4IDM4NGE5NiA5NiAwIDEgMCAtMTkyIDAgOTYgOTYgMCAxIDAgMTkyIDB6TTQzOC42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTM4NCAzODRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsMzg0LTM4NHoiXQogICAgfTsKICAgIGZhUGVyY2VudGFnZSA9IGZhUGVyY2VudDsKICAgIGZhRmlsZVppcHBlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS16aXBwZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlsZS1hcmNoaXZlIl0sICJmMWM2IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNNjQgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCA0OEM3NC43IDQ4IDY0IDU4LjcgNjQgNzJ6bTAgOTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTY0IDcybC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnptLTE2IDY0YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnoiXQogICAgfTsKICAgIGZhRmlsZUFyY2hpdmUyID0gZmFGaWxlWmlwcGVyMjsKICAgIGZhRGlzcGxheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXNwbGF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxNjMiLCAiTTQ0OCA5NmwwIDI1Ni0zODQgMCAwLTI1NiAzODQgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM1MmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDQgMC0xNiA0OC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwLTE2LTQ4IDE0NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFJY29ucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY29ucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoZWFydC1tdXNpYy1jYW1lcmEtYm9sdCJdLCAiZjg2ZCIsICJNMTc0LjkgMjcyYzEwLjcgMCAyMC43IDUuMyAyNi42IDE0LjJsMTEuOCAxNy44IDI2LjcgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzUyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI2LjcgMCAxMS44LTE3LjhjNS45LTguOSAxNS45LTE0LjIgMjYuNi0xNC4ybDYxLjcgMHptMjc4LjYtMTJjNS42LTQuOSAxMy45LTUuMyAxOS45LS45czguMyAxMi40IDUuMyAxOS4zTDQ0MC4zIDM2OCA0OTYgMzY4YzYuNyAwIDEyLjYgNC4xIDE1IDEwLjRzLjYgMTMuMy00LjQgMTcuN2wtMTI4IDExMmMtNS42IDQuOS0xMy45IDUuMy0xOS45IC45cy04LjMtMTIuNC01LjMtMTkuM2wzOC41LTg5LjctNTUuOCAwYy02LjcgMC0xMi42LTQuMS0xNS0xMC40cy0uNi0xMy4zIDQuNC0xNy43bDEyOC0xMTJ6TTE0NCAzNjBhNDggNDggMCAxIDAgMCA5NiA0OCA0OCAwIDEgMCAwLTk2ek00ODMuOCAuNGM2LjUtMS4xIDEzLjEgLjQgMTguNSA0LjQgNi4xIDQuNSA5LjcgMTEuNyA5LjcgMTkuMmwwIDE1Mi0uMyA0LjljLTMuMyAyNC4yLTMwLjUgNDMuMS02My43IDQzLjEtMzUuMyAwLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGM1LjUgMCAxMC45IC42IDE2IDEuNmwwLTQ5LjMtMTEyIDMzLjYgMCAxMTAuMi0uMyA0LjljLTMuMyAyNC4yLTMwLjUgNDMuMS02My43IDQzLjEtMzUuMyAwLTY0LTIxLjUtNjQtNDhzMjguNy00OCA2NC00OGM1LjUgMCAxMC45IC42IDE2IDEuNkwzMDQgNzJjMC0xMC42IDctMjAgMTcuMS0yM2wxNjAtNDggMi43LS42ek0xODguOSAwQzIyNiAwIDI1NiAzMCAyNTYgNjcuMWwwIDYuMWMwIDU2LjEtNzUuMiAxMTIuMS0xMTAuMyAxMzUuMy0xMC44IDcuMS0yNC42IDcuMS0zNS40IDAtMzUuMS0yMy4xLTExMC4zLTc5LjItMTEwLjMtMTM1LjNsMC02LjFDMCAzMCAzMCAwIDY3LjEgMCA4OC4yIDAgMTA4IDkuOSAxMjAuNyAyNi44bDcuMyA5LjggNy4zLTkuOEMxNDggOS45IDE2Ny44IDAgMTg4LjkgMHoiXQogICAgfTsKICAgIGZhSGVhcnRNdXNpY0NhbWVyYUJvbHQgPSBmYUljb25zOwogICAgZmFSdWxlclZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJ1bGVyLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImY1NDgiLCAiTTAgMTZDMC0xMC41IDIxLjUtMzIgNDgtMzJsMTYwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyNC0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMDQgMCAwIDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNzIgMCAwIDQ4LTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwNCAwIDAgNDgtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCAyNGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1NDRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTZ6Il0KICAgIH07CiAgICBmYU1hcExvY2F0aW9uRG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcC1sb2NhdGlvbi1kb3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsibWFwLW1hcmtlZC1hbHQiXSwgImY1YTAiLCAiTTU3NiA0OGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNEw0MTMuNSA3Ny41IDIzNC4xIDE3LjZjLTguMS0yLjctMTYuOC0yLjEtMjQuNCAxLjdsLTEyOCA2NEM3MC44IDg4LjggNjQgOTkuOSA2NCAxMTJsMCAzNTJjMCAxMS4xIDUuNyAyMS40IDE1LjIgMjcuMnMyMS4yIDYuNCAzMS4xIDEuNGwxMTYuMS01OC4xIDE3My4zIDU3LjhjLTQuMy02LjQtOC41LTEzLjEtMTIuNi0xOS45LTExLTE4LjMtMjEuOS0zOS4zLTMwLTYxLjhsLTEwMS4yLTMzLjcgMC0yODQuNSAxMjggNDIuNyAwIDk5LjNjMzEtMzUuOCA3Ny01OC40IDEyOC01OC40IDIyLjYgMCA0NC4yIDQuNCA2NCAxMi41TDU3NiA0OHpNNTEyIDIyNGMtNjYuMyAwLTEyMCA1Mi44LTEyMCAxMTcuOSAwIDY4LjkgNjQuMSAxNTAuNCA5OC42IDE4OS4zIDExLjYgMTMgMzEuMyAxMyA0Mi45IDAgMzQuNS0zOC45IDk4LjYtMTIwLjQgOTguNi0xODkuMyAwLTY1LjEtNTMuNy0xMTcuOS0xMjAtMTE3Ljl6TTQ3MiAzNDRhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VkQWx0ID0gZmFNYXBMb2NhdGlvbkRvdDsKICAgIGZhSGVhcnRDcmFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jcmFjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE0OCwgImhlYXJ0LWJyb2tlbiJdLCAiZjdhOSIsICJNMTMzLjEgMzJjMTcuMyAwIDM0LjIgMy40IDQ5LjkgOS43bDU0LjggODUuMi03NS40IDc1LjRjLTEuNSAxLjUtMi40IDMuNi0yLjMgNS44czEgNC4yIDIuNiA1LjdsMTEyIDEwNGMyLjkgMi43IDcuNCAyLjkgMTAuNSAuM3MzLjgtNyAxLjctMTAuNGwtNjAuNC05OC4xIDkwLjctNzUuNmMyLjYtMi4xIDMuNS01LjcgMi40LTguOEwyOTYuNCA2MC42QzMxOS42IDQyLjMgMzQ4LjYgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTEyLjItMTM5LjkgMjQyLjUtMjEyLjkgMjk4LjItMTIuNCA5LjQtMjcuNiAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjYtNDMuMS0xNC4xQzEzOS45IDQxMC4yIDAgMjc5LjkgMCAxNjcuN2wwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMnoiXQogICAgfTsKICAgIGZhSGVhcnRCcm9rZW4gPSBmYUhlYXJ0Q3JhY2s7CiAgICBmYUNvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDRdLCAiZjZjOCIsICJNOTYgMjI0bDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04OC4yYzkuOSA2LjYgMjAuNiAxMiAzMiAxNi4xbDAgMjQuMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMTYuOWM1LjMgLjYgMTAuNiAuOSAxNiAuOXMxMC43LS4zIDE2LS45bDAgMTYuOWMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjQuMmMxMS40LTQgMjIuMS05LjQgMzItMTYuMWwwIDg4LjJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MCAzMiAzMiAwIDQ5LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZMNTMwIDQyN2M4LjggMTMuMSAyMy41IDIxIDM5LjMgMjEgMjIuNSAwIDQxLjktMTUuOSA0Ni4zLTM4bDIwLjMtMTAxLjZjMi42LTEzLS4zLTI2LjUtOC0zNy4zbC0zLjktNS41IDAtODEuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE0LjQtNTIuOS03NC4xQzQ5NiA4Ni41IDQ1Mi40IDY0IDQwNS45IDY0TDE0NCA2NEM3Ny43IDY0IDI0IDExNy43IDI0IDE4NGwwIDU0QzkuNCAyNDkuOCAwIDI2Ny44IDAgMjg4bDAgMTcuNmMwIDggNi40IDE0LjQgMTQuNCAxNC40IDMxLjggMCA1Ny42LTI1LjggNTcuNi01Ny42TDcyIDE4NGMwLTI0LjMgMTIuMS00NS44IDMwLjUtNTguOS00LjIgMTAuOC02LjUgMjIuNi02LjUgMzQuOWwwIDY0ek01NjAgMzM2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6TTE2Ni42IDE2Ni42Yy00LjItNC4yLTYuNi0xMC02LjYtMTYgMC0xMi41IDEwLjEtMjIuNiAyMi42LTIyLjZsMTc4LjcgMGMxMi41IDAgMjIuNiAxMC4xIDIyLjYgMjIuNiAwIDYtMi40IDExLjgtNi42IDE2bC0yMy40IDIzLjRDMzMyLjIgMjExLjggMzAyLjcgMjI0IDI3MiAyMjRzLTYwLjItMTIuMi04MS45LTMzLjlsLTIzLjQtMjMuNHoiXQogICAgfTsKICAgIGZhUnNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJzcyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJmZWVkIl0sICJmMDllIiwgIk0wIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyIDIyOS44IDAgNDE2IDE4Ni4yIDQxNiA0MTYgMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJDMzg0IDI1My42IDIyNi40IDk2IDMyIDk2IDE0LjMgOTYgMCA4MS43IDAgNjR6TTAgNDE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMzIgMTYwYzE1OS4xIDAgMjg4IDEyOC45IDI4OCAyODggMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJjMC0xMjMuNy0xMDAuMy0yMjQtMjI0LTIyNC0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFGZWVkID0gZmFSc3M7CiAgICBmYU1hZ25pZnlpbmdHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjY5LCAic2VhcmNoIl0sICJmMDAyIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIwOCAzNTJhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4eiJdCiAgICB9OwogICAgZmFTZWFyY2ggPSBmYU1hZ25pZnlpbmdHbGFzczsKICAgIGZhQ2xvdWRNb29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1vb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjZjMyIsICJNNDgwIDBjMTQuNiAwIDI4LjggMS42IDQyLjUgNC43IDcuNCAxLjcgMTMgNy44IDEzLjkgMTUuNHMtMyAxNC45LTkuOCAxOC4zYy00NS40IDIyLjYtNzYuNiA2OS41LTc2LjYgMTIzLjYgMCA3Ni4yIDYxLjggMTM4IDEzOCAxMzggMy43IDAgNy40LS4xIDExLjEtLjQgNy42LS42IDE0LjcgMy42IDE3LjggMTAuNnMxLjUgMTUuMS0zLjkgMjAuNGMtMjYgMjUtNTkuMSA0Mi43LTk1LjkgNDkuOS0xMS4xLTI1LjMtMzAuMi00Ni4zLTU0LjEtNTkuOC03LjYtNjMuNC02MS42LTExMi42LTEyNy4xLTExMi42LTExLjIgMC0yMi4xIDEuNS0zMi41IDQuMi00LjgtNC4yLTkuOS04LjItMTUuMi0xMS44LS4xLTIuOC0uMi01LjYtLjItOC40IDAtMTA2IDg2LTE5MiAxOTItMTkyem0tLjEgNDMxLjljMCA0NC4yLTM1LjggODAtODAgODBsLTI3MS45IDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Ny42IDM0LjYtODcgODAtOTQuNi0uNC01Mi44IDQyLjktOTcuMyA5Ni05Ny4zIDM0LjkgMCA2NS40IDE4LjYgODIuMiA0Ni40IDEzLTkuMSAyOC44LTE0LjQgNDUuOC0xNC40IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS45LS42IDExLjctMS45IDE3LjIgMzcuNCA2LjcgNjUuOCAzOS40IDY1LjggNzguN3oiXQogICAgfTsKICAgIGZhQm94ZXNTdGFja2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveGVzLXN0YWNrZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjYyNSwgImJveGVzIiwgImJveGVzLWFsdCJdLCAiZjQ2OCIsICJNMjI0IDBsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgNS41LS43IDEwLjktMiAxNmwtMjUyIDBjLTEuMy01LjEtMi0xMC41LTItMTZsMC0xMjhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMHptOTYgNTEyYy0xMS4yIDAtMjEuOC0yLjktMzEtOCA5LjUtMTYuNSAxNS0zNS42IDE1LTU2bDAtMTI4YzAtMjAuNC01LjUtMzkuNS0xNS01NiA5LjItNS4xIDE5LjctOCAzMS04bDMyIDAgMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NCAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMjggMHpNMCAzMjBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMzIgMCAwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTY0IDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDMyMHoiXQogICAgfTsKICAgIGZhQm94ZXMgPSBmYUJveGVzU3RhY2tlZDsKICAgIGZhQm94ZXNBbHQgPSBmYUJveGVzU3RhY2tlZDsKICAgIGZhQ29kZUJyYW5jaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWJyYW5jaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMTI2IiwgIk04MCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04MC0yNGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgNzAuNyAxNzYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIyLjdjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zbDAgMjIuN2MwIDYxLjktNTAuMSAxMTItMTEyIDExMmwtMTc2IDAgMCA3MC43YzI4LjMgMTIuMyA0OCA0MC41IDQ4IDczLjMgMCA0NC4yLTM1LjggODAtODAgODBTMCA0NzYuMiAwIDQzMmMwLTMyLjggMTkuNy02MSA0OC03My4zbDAtMjA1LjNDMTkuNyAxNDEgMCAxMTIuOCAwIDgwIDAgMzUuOCAzNS44IDAgODAgMHM4MCAzNS44IDgwIDgwem0yMzIgMGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek04MCA0NTZhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFCYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjgzLCAiY2FuY2VsIl0sICJmMDVlIiwgIk0zNjcuMiA0MTIuNUw5OS41IDE0NC44Yy0yMi40IDMxLjQtMzUuNSA2OS44LTM1LjUgMTExLjIgMCAxMDYgODYgMTkyIDE5MiAxOTIgNDEuNSAwIDc5LjktMTMuMSAxMTEuMi0zNS41em00NS4zLTQ1LjNjMjIuNC0zMS40IDM1LjUtNjkuOCAzNS41LTExMS4yIDAtMTA2LTg2LTE5Mi0xOTItMTkyLTQxLjUgMC03OS45IDEzLjEtMTExLjIgMzUuNUw0MTIuNSAzNjcuMnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhQ2FuY2VsID0gZmFCYW47CiAgICBmYUp1Z0RldGVyZ2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqdWctZGV0ZXJnZW50IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU1MTkiLCAiTTk2IDI0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNCA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggOTZDNzQuNyA5NiA2NCA4NS4zIDY0IDcyUzc0LjcgNDggODggNDhsOCAwIDAtMjR6TTAgMjU2YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4bDEyOCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyNTZ6bTI1NiAwbDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFSZXBseSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXBseSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNzE0LCAibWFpbC1yZXBseSJdLCAiZjNlNSIsICJNMjA0LjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCAxMTIgMGM5Ny4yIDAgMTc2IDc4LjggMTc2IDE3NiAwIDExMy4zLTgxLjUgMTYzLjktMTAwLjIgMTc0LjEtMi41IDEuNC01LjMgMS45LTguMSAxLjktMTAuOSAwLTE5LjctOC45LTE5LjctMTkuNyAwLTcuNSA0LjMtMTQuNCA5LjgtMTkuNSA5LjQtOC44IDIyLjItMjYuNCAyMi4yLTU2LjcgMC01My00My05Ni05Ni05NmwtOTYgMCAwIDgwYzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZzLTI1LjcgMi4yLTM0LjktNi45bC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYwYzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45eiJdCiAgICB9OwogICAgZmFNYWlsUmVwbHkgPSBmYVJlcGx5OwogICAgZmFTdW5QbGFudFdpbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VuLXBsYW50LXdpbHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU3YSIsICJNMTYwIDBjLTUuNSAwLTEwLjYgMi44LTEzLjUgNy40bC0xLjEgMi4xLTI0LjggNTUuNC01Ni43LTIxLjdjLTUuOS0yLjItMTIuNS0uOC0xNyAzLjdTNDEgNTggNDMuMiA2My45bDIxLjcgNTYuNy01NS40IDI0LjhDMy43IDE0OCAwIDE1My43IDAgMTYwczMuNyAxMiA5LjUgMTQuNmw1NS40IDI0LjgtMjEuNyA1Ni43Yy0yLjIgNS45LS44IDEyLjUgMy43IDE3czExLjEgNS45IDE3IDMuN2w1Ni43LTIxLjcgMjQuOCA1NS40YzIuNiA1LjggOC4zIDkuNSAxNC42IDkuNXMxMi0zLjcgMTQuNi05LjVsMjQuOC01NS40IDU2LjggMjEuN2M1LjkgMi4yIDEyLjUgLjggMTctMy43czUuOS0xMS4xIDMuNy0xN2wtMjEuNy01Ni43IDU1LjQtMjQuOGM1LjgtMi42IDkuNS04LjMgOS41LTE0LjZzLTMuNy0xMi05LjUtMTQuNmwtNTUuNC0yNC44IDIxLjctNTYuNyAuNy0yLjJjMS4yLTUuMy0uNC0xMC45LTQuMy0xNC44cy05LjUtNS41LTE0LjgtNC4zbC0yLjIgLjctNTYuOCAyMS43LTI0LjgtNTUuNEMxNzIgMy43IDE2Ni4zIDAgMTYwIDB6bTAgOTZhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTM3NiAxNmwwIDUzLjRjLTE0LjggNy43LTI0IDIzLjEtMjQgNDQuNiAwIDE2LjggMTYgNDQgMzcuNCA2Ny4yIDUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwIDIxLjQtMjMuMyAzNy40LTUwLjYgMzcuNC02Ny4yIDAtMjEuNS05LjItMzctMjQtNDQuNmwwLTUzLjRjMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBsMCAyMi43Yy05LjgtNC4zLTIwLjYtNi43LTMyLTYuNy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIxLjRjLTE0LjggNy42LTI0IDIzLjEtMjQgNDQuNiAwIDE2LjggMTYgNDQgMzcuNCA2Ny4yIDUuOCA2LjIgMTUuNSA2LjIgMjEuMiAwIDIxLjQtMjMuMyAzNy40LTUwLjYgMzcuNC02Ny4yIDAtMjEuNS05LjItMzctMjQtNDQuNmwwLTIxLjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3Ni00MjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1NzYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTA0IDAgMC0yNzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhQmFjdGVyaXVtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY3Rlcml1bSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDVhIiwgIk00MDggMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMzYwIDIuNyAzNjAgMTZsMCAyMy40Yy0xMy45IDUuMy0yNi45IDEzLjUtMzguMiAyNC41TDMwNSA0N2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjgtMzAuMSAzMC4xLTE2LjgtMTYuOGMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNi44IDE2LjhjLTEwIDEwLTIwIDIwLTMwLjEgMzAuMUwxNzcgMTc1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOC0zMC4xIDMwLjEtMTYuOC0xNi44Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDE2LjggMTYuOGMtMTEgMTEuMy0xOS4yIDI0LjMtMjQuNSAzOC4yTDQ4IDMyOGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNi4zIDBjMS4zIDE4LjMgNy4xIDM2LjQgMTcuNCA1Mi40TDcxIDQzOWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEwLjYtMTAuNmMxNiAxMC4zIDM0LjEgMTYuMSA1Mi40IDE3LjRsMCAxNi4zYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMy40YzEzLjktNS4zIDI2LjktMTMuNSAzOC4yLTI0LjVMMjcxIDQ2NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTE2LjgtMTYuOCAzMC4xLTMwLjEgMTYuOCAxNi44YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44YzEwLTEwIDIwLTIwIDMwLjEtMzAuMUwzOTkgMzM3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMTYuOC0xNi44IDMwLjEtMzAuMSAxNi44IDE2LjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNi44LTE2LjhjMTEtMTEuMyAxOS4yLTI0LjMgMjQuNS0zOC4ybDIzLjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTYuMyAwYy0xLjMtMTguMy03LjEtMzYuNC0xNy40LTUyLjRMNTA1IDczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDYwLjQgNDkuN2MtMTYtMTAuMy0zNC4xLTE2LjEtNTIuNC0xNy40TDQwOCAxNnpNMTYwIDM1MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0yNzIgMjQwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUmVjb3JkVmlueWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVjb3JkLXZpbnlsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4ZDkiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1Ni05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMCAyNDBhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTExMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUZsb3BweURpc2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZsb3BweS1kaXNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MTkwLCAxMjg0MjYsICJzYXZlIl0sICJmMGM3IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjQyLjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzUyIDUwLjdDMzQwIDM4LjcgMzIzLjcgMzIgMzA2LjcgMzJMNjQgMzJ6bTMyIDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE2MCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yMjQgMjg4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFTYXZlMiA9IGZhRmxvcHB5RGlzazI7CiAgICBmYVRvaWxldHNQb3J0YWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXRzLXBvcnRhYmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1ODQiLCAiTTY0IDBsOTYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2LTIyNCAwIDAtMTZDMCAyOC43IDI4LjcgMCA2NCAwek0wIDEyOGwyMjQgMCAwIDM2MGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTgtMTI4IDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTAxLjMgMCA0ODhMMCAxMjh6TTEyOCAyNDhsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNCAwIDAtOTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6TTM1MiAwbDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0yMjQgMCAwLTE2YzAtMzUuMyAyOC43LTY0IDY0LTY0ek0yODggMTI4bDIyNCAwIDAgMzYwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtOC0xMjggMCAwIDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0zNjB6TTQxNiAyNDhsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwyNCAwIDAtOTYtMjQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYU8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzExMV0sICI0ZiIsICJNMjI0IDk2YTE2MCAxNjAgMCAxIDAgMCAzMjAgMTYwIDE2MCAwIDEgMCAwLTMyMHpNNDQ4IDI1NmEyMjQgMjI0IDAgMSAxIC00NDggMCAyMjQgMjI0IDAgMSAxIDQ0OCAweiJdCiAgICB9OwogICAgZmFQYWxldHRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbGV0dGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MTJdLCAiZjUzZiIsICJNNTEyIDI1NmMwIC45IDAgMS44IDAgMi43LS40IDM2LjUtMzMuNiA2MS4zLTcwLjEgNjEuM0wzNDQgMzIwYy0yNi41IDAtNDggMjEuNS00OCA0OCAwIDMuNCAuNCA2LjcgMSA5LjkgMi4xIDEwLjIgNi41IDIwIDEwLjggMjkuOSA2LjEgMTMuOCAxMi4xIDI3LjUgMTIuMSA0MiAwIDMxLjgtMjEuNiA2MC43LTUzLjQgNjItMy41IC4xLTcgLjItMTAuNiAuMi0xNDEuNCAwLTI1Ni0xMTQuNi0yNTYtMjU2UzExNC42IDAgMjU2IDAgNTEyIDExNC42IDUxMiAyNTZ6TTEyOCAyODhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC05NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiA5NmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVVubG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmxvY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzVdLCAiZjA5YyIsICJNMTI4IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0IDMxLjcgMCA1OCAyMyA2My4xIDUzLjMgMi45IDE3LjQgMTkuNCAyOS4yIDM2LjkgMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi45QzMwOC4xIDE0LjEgMjU1LjUtMzIgMTkyLTMyIDEyMS4zLTMyIDY0IDI1LjMgNjQgOTZsMCA2NGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE5MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYUVhckxpc3RlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXItbGlzdGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFzc2lzdGl2ZS1saXN0ZW5pbmctc3lzdGVtcyJdLCAiZjJhMiIsICJNMzc5LjYgLjNjLTguOSAxLjItMTcuMiA2LjItMjIuNCAxNC4xLTYuOCAxMC40LTcgMjQuMS0uNCAzNC42IDUuNiA4LjkgMTUuNSAxMi43IDIzLjggMTguNSA3LjUgNS4yIDE3LjYgMTMuMiAyNy43IDI0LjIgMjAgMjEuNyAzOS41IDU0LjMgMzkuNSAxMDAuMyAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNjYtMjguNS0xMTMuNC01Ni41LTE0My43LTEzLjktMTUuMS0yNy44LTI2LjEtMzguMy0zMy4zLTExLTcuNi0yMy41LTE2LjYtMzcuNi0xNC43ek0yNDAgMTI4Yy01Ny42IDAtMTA1LjEgNDMuNi0xMTEuMyA5OS41LTEuOSAxNy42LTE3LjggMzAuMi0zNS4zIDI4LjNzLTMwLjItMTcuOC0yOC4zLTM1LjNjOS43LTg4IDg0LjMtMTU2LjUgMTc0LjktMTU2LjUgOTcuMiAwIDE3NiA3OC44IDE3NiAxNzYgMCA0Ni0xNy43IDg3LjktNDYuNiAxMTkuMy0xMiAxMy0xNy40IDI0LjgtMTcuNCAzNC43bDAgNi4xYzAgNjEuOS01MC4xIDExMi0xMTIgMTEyLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02LjFjMC0zMi45IDE3LjQtNTkuNiAzNC40LTc4IDE4LjQtMjAgMjkuNi00Ni42IDI5LjYtNzUuOSAwLTYxLjktNTAuMS0xMTItMTEyLTExMnpNMCA0ODBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTYwLTk2YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNODYuNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6TTI0MCAyMDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6Il0KICAgIH07CiAgICBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMgPSBmYUVhckxpc3RlbjsKICAgIGZhQ29kZVB1bGxSZXF1ZXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtcHVsbC1yZXF1ZXN0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxM2MiLCAiTTMyOCAyNGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJTMjkzLjkgLjIgMjg3IDdMMjMxIDYzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NiA1NmM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzMyOCAxNDUuNyAzMjggMTM2bDAtMjQgMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDIxNC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM0w0NDggMTQ0YzAtNTMtNDMtOTYtOTYtOTZsLTI0IDAgMC0yNHpNNzIgODBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNTYgNzMuM2MyOC4zLTEyLjMgNDgtNDAuNSA0OC03My4zIDAtNDQuMi0zNS44LTgwLTgwLTgwUzE2IDM1LjggMTYgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zYy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTIwNS4zek03MiA0MzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMzQ0LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhS2V5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImtleSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI3M10sICJmMDg0IiwgIk0zMzYgMzUyYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2UzQzMy4yIDAgMzM2IDAgMTYwIDc4LjggMTYwIDE3NmMwIDE4LjcgMi45IDM2LjggOC4zIDUzLjdMNyAzOTFjLTQuNSA0LjUtNyAxMC42LTcgMTdsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDAgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQwIDQwIDBjNi40IDAgMTIuNS0yLjUgMTctN2wzMy4zLTMzLjNjMTYuOSA1LjQgMzUgOC4zIDUzLjcgOC4zek0zNzYgOTZhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgweiJdCiAgICB9OwogICAgZmFTa3VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJza3VsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODEyOF0sICJmNTRjIiwgIk00MTYgNDI3LjRjNTguNS00NCA5Ni0xMTEuNiA5Ni0xODcuNCAwLTEzMi41LTExNC42LTI0MC0yNTYtMjQwUzAgMTA3LjUgMCAyNDBjMCA3NS44IDM3LjUgMTQzLjQgOTYgMTg3LjRMOTYgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAgNjQgMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCAzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzYuNnpNOTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMjU2LTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UtdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODk2LCAibWFycy1zdHJva2UtdiJdLCAiZjIyYSIsICJNMTkyIDI1NmExMTIgMTEyIDAgMSAwIDAgMjI0IDExMiAxMTIgMCAxIDAgMC0yMjR6TTE2IDM2OGMwLTg2LjMgNjIuMS0xNTguMSAxNDQuMS0xNzMuMS0uMS0uOS0uMS0xLjktLjEtMi45bDAtMTYtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjEuNC0yOCAyMi40Yy0xMy44IDExLTMzLjkgOC44LTQ1LTVzLTguOC0zMy45IDUtNDVsODAtNjRjMTEuNy05LjMgMjguMy05LjMgNDAgMGw4MCA2NGMxMy44IDExIDE2IDMxLjIgNSA0NXMtMzEuMiAxNi00NSA1bC0yOC0yMi40IDAgNjEuNCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMTZjMCAxIDAgMS45LS4xIDIuOSA4MiAxNSAxNDQuMSA4Ni44IDE0NC4xIDE3My4xIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2UzE2IDQ2NS4yIDE2IDM2OHoiXQogICAgfTsKICAgIGZhTWFyc1N0cm9rZVYgPSBmYU1hcnNTdHJva2VVcDsKICAgIGZhRmlyZUZsYW1lU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtZmxhbWUtc2ltcGxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImJ1cm4iXSwgImY0NmEiLCAiTTM3Mi41IDI1Ni41bC0uNy0xLjlDMzM3LjggMTYwLjggMjgyIDc2LjUgMjA5LjEgOC41bC0zLjMtM0MyMDIuMSAyIDE5Ny4xIDAgMTkyIDBzLTEwLjEgMi0xMy44IDUuNWwtMy4zIDNDMTAyIDc2LjUgNDYuMiAxNjAuOCAxMi4yIDI1NC42bC0uNyAxLjlDMy45IDI3Ny4zIDAgMjk5LjQgMCAzMjEuNiAwIDQyNi43IDg2LjggNTEyIDE5MiA1MTJzMTkyLTg1LjMgMTkyLTE5MC40YzAtMjIuMi0zLjktNDQuMi0xMS41LTY1LjF6bS05MC44IDQ5LjVjNC4xIDkuMyA2LjIgMTkuNCA2LjIgMjkuNSAwIDUzLTQzIDk2LjUtOTYgOTYuNXMtOTYtNDMuNS05Ni05Ni41YzAtMTAuMSAyLjEtMjAuMyA2LjItMjkuNWwxLjktNC4zYzE1LjgtMzUuNCAzNy45LTY3LjcgNjUuMy05NS4xbDguOS04LjljMy42LTMuNiA4LjUtNS42IDEzLjYtNS42czEwIDIgMTMuNiA1LjZsOC45IDguOWMyNy40IDI3LjQgNDkuNiA1OS43IDY1LjMgOTUuMWwxLjkgNC4zeiJdCiAgICB9OwogICAgZmFCdXJuID0gZmFGaXJlRmxhbWVTaW1wbGU7CiAgICBmYVRyZWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJlZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzc5NF0sICJmMWJiIiwgIk0yMjQtMzJjNyAwIDEzLjcgMy4xIDE4LjMgOC41bDEzNiAxNjBjNi4xIDcuMSA3LjQgMTcuMSAzLjUgMjUuNlMzNjkuNCAxNzYgMzYwIDE3NmwtMjQuOSAwIDc1LjIgODguNWM2LjEgNy4xIDcuNCAxNy4xIDMuNSAyNS42UzQwMS40IDMwNCAzOTIgMzA0bC0zOC41IDAgODguOCAxMDQuNWM2LjEgNy4xIDcuNCAxNy4xIDMuNSAyNS42UzQzMy40IDQ0OCA0MjQgNDQ4bC0xNjggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjQtMTY4IDBjLTkuNCAwLTE3LjktNS40LTIxLjgtMTMuOXMtMi42LTE4LjUgMy41LTI1LjZMOTQuNSAzMDQgNTYgMzA0Yy05LjQgMC0xNy45LTUuNC0yMS44LTEzLjlzLTIuNi0xOC41IDMuNS0yNS42TDExMi45IDE3NiA4OCAxNzZjLTkuNCAwLTE3LjktNS40LTIxLjgtMTMuOXMtMi42LTE4LjUgMy41LTI1LjZsMTM2LTE2MEMyMTAuMy0yOC45IDIxNy0zMiAyMjQtMzJ6Il0KICAgIH07CiAgICBmYVNtb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic21vZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzVmIiwgIk0xNzYgMjg4Qzk2LjUgMjg4IDMyIDIyMy41IDMyIDE0NFM5Ni41IDAgMTc2IDBjMjcuMiAwIDUyLjYgNy41IDc0LjMgMjAuNiAyMC4xLTEzIDQ0LTIwLjYgNjkuNy0yMC42IDQ3LjQgMCA4OC43IDI1LjcgMTEwLjkgNjRsMS4xIDBjNjEuOSAwIDExMiA1MC4xIDExMiAxMTIgMCA2MC4zLTQ3LjYgMTA5LjQtMTA3LjIgMTExLjktMjIuNiAyMC01Mi4zIDMyLjEtODQuOCAzMi4xLTMyLjUgMC02Mi4xLTEyLjEtODQuNy0zMkwxNzYgMjg4ek01MTIgMzkyYzAgMTMuMy0xMC43IDI0LTI0IDI0TDI0IDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw0NjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHpNODggNDY0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTgwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTE3NiAwbDI4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yODggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhUyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTE1XSwgIjUzIiwgIk0wIDE1Ny41QzAgODguMiA1Ni4yIDMyIDEyNS41IDMyTDI3MiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwxMjUuNSA5NmMtMzQgMC02MS41IDI3LjUtNjEuNSA2MS41IDAgMzEgMjMuMSA1Ny4yIDUzLjkgNjFMMjEwLjEgMjMwQzI3Mi45IDIzNy45IDMyMCAyOTEuMiAzMjAgMzU0LjUgMzIwIDQyMy44IDI2My44IDQ4MCAxOTQuNSA0ODBMNDggNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE0Ni41IDBjMzQgMCA2MS41LTI3LjUgNjEuNS02MS41IDAtMzEtMjMuMS01Ny4yLTUzLjktNjFMMTA5LjkgMjgyQzQ3LjEgMjc0LjEgMCAyMjAuOCAwIDE1Ny41eiJdCiAgICB9OwogICAgZmFKZWRpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImplZGkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjY2OSIsICJNMjQ2IDMxNS43bC0yMS4yLTMxLjljLTIuMS0zLjItMS43LTcuNCAxLTEwLjFzNi45LTMuMSAxMC4xLTFsMjkuNSAxOS43YzIuMSAxLjQgNC45LS4xIDUtMi42TDI3OS43IDhjLjEtNC41IDMuOC04IDguMy04czguMSAzLjUgOC4zIDhsOS40IDI4MS45Yy4xIDIuNSAyLjkgMy45IDUgMi42bDI5LjUtMTkuN2MzLjItMi4xIDcuNC0xLjcgMTAuMSAxczMuMSA2LjkgMSAxMC4xTDMzMCAzMTUuN2MtMS4zIDEuOS0uMiA0LjUgMiA0LjlsMzcuNiA3LjVjMy43IC43IDYuNCA0IDYuNCA3LjhzLTIuNyA3LjEtNi40IDcuOEwzMzIgMzUxLjRjLTIuMiAuNC0zLjMgMy0yIDQuOWwyMS4yIDMxLjljMi4xIDMuMiAxLjcgNy40LTEgMTAuMXMtNi45IDMuMS0xMC4xIDFsLTI2LjMtMTcuNmMtMi4yLTEuNC01LjEgLjItNSAyLjhsMi4xIDYxLjVjNTkuOC0xMC44IDEwNS4xLTYzLjEgMTA1LjEtMTI2IDAtMzctMTUuNy03MC40LTQwLjgtOTMuNy03LTYuNS02LjUtMTguNiAxLTI0LjQgMzQtMjYuMyA1NS44LTY3LjUgNTUuOC0xMTMuOSAwLTE2LjgtMi45LTMzLTguMi00OC00LjYtMTMgMTAuMi0zMCAyMS40LTIyIDUzLjUgMzggOTIuNyA5NC44IDEwNy44IDE2MC43IC41IDIuMS0uMiA0LjMtMS43IDUuOWwtMjguNCAyOC40Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlsMjYgMGMzLjQgMCA2LjIgMi42IDYuMyA2IC4xIDMuMyAuMiA2LjYgLjIgMTAgMCAxNy41LTEuNyAzNC43LTQuOCA1MS4zLS4yIDEuMi0uOSAyLjQtMS43IDMuM2wtNDYuNSA0Ni41Yy00IDQtMS4yIDEwLjkgNC41IDEwLjlsMTQuNiAwYzQuNiAwIDcuNyA0LjggNS43IDktNDQuNSA4OS41LTEzNi45IDE1MS0yNDMuNyAxNTFTODguOCA0NTAuNSA0NC4zIDM2MWMtMi4xLTQuMiAxLTkgNS43LTlsMTQuNiAwYzUuNyAwIDguNi02LjkgNC41LTEwLjlMMjIuNiAyOTQuNmMtLjktLjktMS41LTItMS43LTMuMy0zLjItMTYuNi00LjgtMzMuOC00LjgtNTEuMyAwLTMuMyAuMS02LjcgLjItMTAgLjEtMy40IDIuOS02IDYuMy02bDI2IDBjNS43IDAgOC42LTYuOSA0LjUtMTAuOUwyNC42IDE4NC42Yy0xLjUtMS41LTIuMi0zLjgtMS43LTUuOSAxNS4yLTY2IDU0LjMtMTIyLjggMTA3LjgtMTYwLjcgMTEuMy04IDI2IDguOSAyMS40IDIyLTUuMyAxNS04LjIgMzEuMi04LjIgNDggMCA0Ni4zIDIxLjkgODcuNSA1NS44IDExMy45IDcuNSA1LjggOCAxNy45IDEgMjQuNC0yNS4xIDIzLjQtNDAuOCA1Ni43LTQwLjggOTMuNyAwIDYyLjkgNDUuNCAxMTUuMiAxMDUuMSAxMjZsMi4xLTYxLjVjLjEtMi42LTIuOC00LjItNS0yLjhsLTI2LjMgMTcuNmMtMy4yIDIuMS03LjQgMS43LTEwLjEtMXMtMy4xLTYuOS0xLTEwLjFMMjQ2IDM1Ni4zYzEuMy0xLjkgLjItNC41LTItNC45bC0zNy42LTcuNWMtMy43LS43LTYuNC00LTYuNC03LjhzMi43LTcuMSA2LjQtNy44bDM3LjYtNy41YzIuMi0uNCAzLjMtMyAyLTQuOXoiXQogICAgfTsKICAgIGZhUGVyc29uSGlraW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oaWtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaGlraW5nIl0sICJmNmVjIiwgIk0xOTItMzJhNTYgNTYgMCAxIDEgMCAxMTIgNTYgNTYgMCAxIDEgMC0xMTJ6TTEyOCAxNzMuNmMwLTM0IDI3LjYtNjEuNiA2MS42LTYxLjYgMjAuMyAwIDM5LjcgOC4xIDU0IDIyLjRsNDguMiA0OC4yYzYgNiAxNC4xIDkuNCAyMi42IDkuNGwzNy41IDBjNS44IDAgMTEuMyAxLjYgMTYgNC4zbDAtNzYuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDAwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjY4LjNjLTQuNyAyLjctMTAuMiA0LjMtMTYgNC4zbC0zNy41IDBjLTI1LjUgMC00OS45LTEwLjEtNjcuOS0yOC4xbC02LjYtNi42IDAgMTA5LjIgMzQuNSAyOS42YzE3LjcgMTUuMiAyOS4zIDM2LjIgMzIuNiA1OS4zbDEyLjYgODguMWMyLjUgMTcuNS05LjcgMzMuNy0yNy4yIDM2LjJzLTMzLjctOS43LTM2LjItMjcuMmwtMTIuNi04OC4xYy0xLjEtNy43LTUtMTQuNy0xMC45LTE5LjhsLTcxLjQtNjEuMmMtMjEuMy0xOC4yLTMzLjUtNDQuOS0zMy41LTcyLjlsMC0xMDF6bS00LjggMjAzLjdjMi4zIDIuMyA0LjcgNC40IDcuMSA2LjVsNDQuOSAzOC41Yy0zLjYgOC40LTguNSAxNi4zLTE0LjQgMjMuNEw4OC42IDUzMi41Yy0xMS4zIDEzLjYtMzEuNSAxNS40LTQ1LjEgNC4xcy0xNS40LTMxLjUtNC4xLTQ1LjFsNzIuMy04Ni43YzIuNi0zLjEgNC41LTYuNiA1LjgtMTAuNGw1LjctMTcuMXpNMCAxNjBjMC0zNS4zIDI4LjctNjQgNjQtNjQgMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6Il0KICAgIH07CiAgICBmYUhpa2luZyA9IGZhUGVyc29uSGlraW5nOwogICAgZmFBcnJvd3NVcFRvTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtdG8tbGluZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNGMyIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMzIgMHptODYuNiAxMzcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDY0IDIzNy4zIDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjQyLjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHptMjU2IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI0Mi43IDkuNCA5LjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNjQtNjR6Il0KICAgIH07CiAgICBmYU1hcnNEb3VibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1kb3VibGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODkxXSwgImYyMjciLCAiTTI4OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMkw0NDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTUwLjctOTUgOTVjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMwIDQwMS4yIDAgMzA0IDc4LjggMTI4IDE3NiAxMjhjMzcgMCA3MS40IDExLjQgOTkuOCAzMWw5NS05NS01MC43IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNzYgNDE2YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHptMTYwIDY0Yy02LjggMC0xMy40LS40LTIwLTEuMSAyMy42LTE4LjkgNDMuMy00Mi41IDU3LjYtNjkuNCA0My4zLTE1LjUgNzQuNC01Ni45IDc0LjQtMTA1LjUgMC0yNS4yLTguMy00OC41LTIyLjQtNjcuMiA3LjEgMi4xIDE0LjYgMy4yIDIyLjQgMy4yIDE3IDAgMzIuNy01LjMgNDUuNy0xNC4zIDExLjcgMjMuNiAxOC4zIDUwLjIgMTguMyA3OC4zIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2ek01MjggMTU3LjNMNTI4IDMyYzAtMTEuNC0yLjQtMjIuMi02LjctMzJMNjA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTQ4IDQ4eiJdCiAgICB9OwogICAgZmFUaGVybW9tZXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aGVybW9tZXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkxIiwgIk05NiAzODIuMWwwLTg4LjhjMC0xNC45IDUuOS0yOS4xIDE2LjQtMzkuNmwyMS43LTIxLjcgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA0Ni4xLTQ2LjEgNDEgNDFjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00MS00MSA3LjgtNy44YzE5LjQtMTkuNCA0NS42LTMwLjIgNzMtMzAuMiA1NyAwIDEwMy4yIDQ2LjIgMTAzLjIgMTAzLjIgMCAyNy40LTEwLjkgNTMuNi0zMC4yIDczTDI1OC4zIDM5OS42Yy0xMC41IDEwLjUtMjQuNyAxNi40LTM5LjYgMTYuNGwtODguOCAwLTg5IDg5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMFMtMi4zIDQ4MC40IDcgNDcxbDg5LTg5eiJdCiAgICB9OwogICAgZmFQYWludGJydXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhaW50YnJ1c2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgzOTYsICJwYWludC1icnVzaCJdLCAiZjFmYyIsICJNNDgwLjUgMTAuM0wyNTkuMSAxNThjLTI5LjEgMTkuNC00Ny42IDUwLjktNTAuNiA4NS4zIDYyLjMgMTIuOCAxMTEuNCA2MS45IDEyNC4zIDEyNC4zIDM0LjUtMyA2NS45LTIxLjUgODUuMy01MC42TDU2NS43IDk1LjVjNi43LTEwLjEgMTAuMy0yMS45IDEwLjMtMzQuMSAwLTMzLjktMjcuNS02MS40LTYxLjQtNjEuNC0xMi4xIDAtMjQgMy42LTM0LjEgMTAuM3pNMjg4IDQwMGMwLTYxLjktNTAuMS0xMTItMTEyLTExMlM2NCAzMzguMSA2NCA0MDBjMCAzLjkgLjIgNy44IC42IDExLjYgMS44IDE3LjUtMTAuMiAzNi40LTI3LjggMzYuNEwzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTQ0IDBjNjEuOSAwIDExMi01MC4xIDExMi0xMTJ6Il0KICAgIH07CiAgICBmYVBhaW50QnJ1c2ggPSBmYVBhaW50YnJ1c2g7CiAgICBmYU5ldXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXV0ZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5OTA2XSwgImYyMmMiLCAiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtMSAwLTEuOS0uMS0yLjl6Il0KICAgIH07CiAgICBmYVNxdWFyZVBob25lRmxpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGhvbmUtZmxpcCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaG9uZS1zcXVhcmUtYWx0Il0sICJmODdiIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMzIgOTYuN2wyLjggLjhjMzIuMyA4LjggNTkuOSA0MC4xIDUxLjggNzguMi0xOC41IDg3LjUtODcuNCAxNTYuMy0xNzQuOSAxNzQuOS0zOC4xIDguMS02OS40LTE5LjUtNzguMi01MS44bC0uOC0yLjhjLTIuNy05LjggMi40LTIwLjEgMTEuOC0yNGw0OC43LTIwLjNjOC4zLTMuNCAxNy44LTEuMSAyMy41IDUuOWwxOS4zIDIzLjZjMzUuMS0xNy40IDYzLjQtNDYuNiA3OS42LTgyLjRsLTIyLjEtMThjLTYuOS01LjctOS4zLTE1LjItNS45LTIzLjVsMjAuMy00OC43YzMuOS05LjQgMTQuMi0xNC40IDI0LTExLjh6Il0KICAgIH07CiAgICBmYVBob25lU3F1YXJlQWx0ID0gZmFTcXVhcmVQaG9uZUZsaXA7CiAgICBmYUZhY2VHcmluVG9uZ3VlU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXNxdWludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU0MSwgImdyaW4tdG9uZ3VlLXNxdWludCJdLCAiZjU4YSIsICJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTEyNS44LTkxLjdjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjFzMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMTkyIDEyNS44IDE2NC4zem0yNjMuNi0yMS4xYzQuNSA2LjggMy4xIDE1LjktMy4xIDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXpNMzIwIDQ0OGwwLTQ1LjRjMC0xNC43LTExLjktMjYuNi0yNi42LTI2LjZsLTIgMGMtMTEuMyAwLTIxLjEgNy45LTIzLjYgMTguOS0yLjggMTIuNi0yMC44IDEyLjYtMjMuNiAwLTIuNS0xMS4xLTEyLjMtMTguOS0yMy42LTE4LjlsLTIgMGMtMTQuNyAwLTI2LjYgMTEuOS0yNi42IDI2LjZsMCA0NS40YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjR6Il0KICAgIH07CiAgICBmYUdyaW5Ub25ndWVTcXVpbnQyID0gZmFGYWNlR3JpblRvbmd1ZVNxdWludDI7CiAgICBmYUNvbW1lbnREb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudC1kb2xsYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY1MSIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6bTQtMzUyYzExIDAgMjAgOSAyMCAyMGwwIDQgOCAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMGwtNDcuNSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCA2LjEgNC40IDExLjMgMTAuNCAxMi4zbDQxLjcgN2MyNS4zIDQuMiA0My45IDI2LjEgNDMuOSA1MS44IDAgMjYuMS0xOSA0Ny43LTQ0IDUxLjhsMCA0LjdjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtNC0yNCAwYy0xMSAwLTIwLTktMjAtMjBzOS0yMCAyMC0yMGw1NS41IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtNi4xLTQuNC0xMS4zLTEwLjQtMTIuM2wtNDEuNy03Yy0yNS4zLTQuMi00My45LTI2LjEtNDMuOS01MS44IDAtMjguOCAyMy4yLTUyLjIgNTItNTIuNWwwLTRjMC0xMSA5LTIwIDIwLTIweiJdCiAgICB9OwogICAgZmFIaXBwbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaXBwbyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQzNV0sICJmNmVkIiwgIk00MDcgNDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMTcuMiAxNy4yYzEuOS0uMSAzLjktLjIgNS44LS4ybDMyIDBjMTEuMiAwIDIxLjkgMi4zIDMxLjYgNi41TDU0MyA1NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMNTY0IDEwMS45YzcuNiAxMi4yIDEyIDI2LjcgMTIgNDIuMSAwIDEwLjIgNy40IDE4LjggMTYuNyAyMyAyNy45IDEyLjUgNDcuMyA0MC41IDQ3LjMgNzMgMCAyNi4yLTEyLjYgNDkuNC0zMiA2NGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTYtNjQgMCAwIDE2YzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTcuNmMtMTEuOC0yLjQtMjIuNy03LjQtMzItMTQuNC0xLjUtMS4xLTIuOS0yLjMtNC4zLTMuNS0xNy0xNC43LTI3LjctMzYuNC0yNy43LTYwLjUgMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZjMCA0NC43IDI2LjIgODMuMiA2NCAxMDEuMmwwIDEwLjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTc2Yy0xOS44IDcuNy00MS40IDEyLTY0IDEycy00NC4yLTQuMy02NC0xMmwwIDc2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExOC45LTE4LjEgNDAuN2MtNS40IDEyLjEtMTkuNiAxNy42LTMxLjcgMTIuMlMtMy4zIDM2Mi40IDIuMSAzNTAuM0wyNCAzMDAuOWM1LjMtMTEuOSA4LTI0LjcgOC0zNy43IDAtMTA3LjUgODUuMi0xOTUuMiAxOTEuOC0xOTkuMWwuMi0uMSA2NCAwYzQxLjcgMCA4My40IDEyLjEgMTE3LjIgMjUuNyAxLjctMS44IDMuNS0zLjYgNS4zLTUuMkw0MDcgODFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45em03MyAxODVhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptODggMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4ek00ODAgMTQ0YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnoiXQogICAgfTsKICAgIGZhQm93bEZvb2QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bC1mb29kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzYiLCAiTTAgMTc2YzAtMzUuMyAyOC43LTY0IDY0LTY0IC41IDAgMS4xIDAgMS42IDAgNy40LTM2LjUgMzkuNy02NCA3OC40LTY0IDE1IDAgMjkgNC4xIDQwLjkgMTEuMiAxMy4zLTI1LjcgNDAuMS00My4yIDcxLjEtNDMuMnM1Ny44IDE3LjYgNzEuMSA0My4yYzEyLTcuMSAyNi0xMS4yIDQwLjktMTEuMiAzOC43IDAgNzEgMjcuNSA3OC40IDY0IC41IDAgMS4xIDAgMS42IDAgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAxMS43LTMuMSAyMi42LTguNiAzMkw4LjYgMjA4QzMuMSAxOTguNiAwIDE4Ny43IDAgMTc2ek0wIDI4My40QzAgMjY4LjMgMTIuMyAyNTYgMjcuNCAyNTZsNDU3LjEgMGMxNS4xIDAgMjcuNCAxMi4zIDI3LjQgMjcuNCAwIDcwLjUtNDQuNCAxMzAuNy0xMDYuNyAxNTQuMUw0MDMuNSA0NTJjLTIgMTYtMTUuNiAyOC0zMS44IDI4bC0yMzEuNSAwYy0xNi4xIDAtMjkuOC0xMi0zMS44LTI4bC0xLjgtMTQuNEM0NC40IDQxNC4xIDAgMzUzLjkgMCAyODMuNHoiXQogICAgfTsKICAgIGZhU3F1YXJlVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXZpcnVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU1NzgiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTE2MCA4MGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjR6TTE5MiAyNDhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFDbG91ZFN1blJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtc3VuLXJhaW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc3ODJdLCAiZjc0MyIsICJNMzAzLjItMy4yYy0xLjEtNS4yLTQuNi05LjUtOS41LTExLjZzLTEwLjUtMS41LTE0LjkgMS40TDIwOCAzMy42IDEzNy4zLTEzLjNjLTQuNC0yLjktMTAtMy41LTE0LjktMS40cy04LjUgNi40LTkuNSAxMS42TDk2IDgwIDEyLjggOTYuOGMtNS4yIDEuMS05LjUgNC42LTExLjYgOS41cy0xLjUgMTAuNSAxLjQgMTQuOUw0OS42IDE5MiAyLjcgMjYyLjdjLTIuOSA0LjQtMy41IDEwLTEuNCAxNC45czYuNCA4LjUgMTEuNiA5LjVMOTYgMzA0IDExMi44IDM4Ny4yYzEuMSA1LjIgNC42IDkuNSA5LjUgMTEuNnMxMC41IDEuNSAxNC45LTEuNGw2Ny4zLTQ0LjZjLTE1LjgtMTkuNC0yNi00My41LTI4LjItNjkuOS0zNy41LTEzLjEtNjQuNC00OC43LTY0LjQtOTAuNyAwLTUzIDQzLTk2IDk2LTk2IDIxLjcgMCA0MS44IDcuMiA1Ny44IDE5LjQgMTUuNS0xNy42IDM2LjktMzAgNjEuMS0zNEwzMjAgODAgMzAzLjItMy4yek0yNDMgMTU5LjFjLTguOC05LjMtMjEuMi0xNS4xLTM1LTE1LjEtMjYuNSAwLTQ4IDIxLjUtNDggNDggMCAxNyA4LjkgMzIgMjIuMiA0MC41IDEwLjItMzEuNCAzMi4xLTU3LjQgNjAuNy03M2wuMS0uNHpNMzA0IDM1MmwxOTIgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTMzLjktMjEuMS02Mi45LTUwLjktNzQuNSAxLjktNi44IDIuOS0xNCAyLjktMjEuNSAwLTQ0LjItMzUuOC04MC04MC04MC0zMC44IDAtNTcuNSAxNy40LTcwLjkgNDIuOC05LjMtNi44LTIwLjctMTAuOC0zMy4xLTEwLjgtMzAuOSAwLTU2IDI1LjEtNTYgNTYgMCAzLjIgLjMgNi40IC44IDkuNC0zNi45IDcuMS02NC44IDM5LjYtNjQuOCA3OC42IDAgNDQuMiAzNS44IDgwIDgwIDgwem0tMTkgNDkuMWMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4ybC0yMS40IDY0LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctcmlnaHQiXSwgImYxNzgiLCAiTTU2Ni42IDI3OC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM0w0NjYuNyAyMjQgMzIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDQzNC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd1JpZ2h0ID0gZmFBcnJvd1JpZ2h0TG9uZzsKICAgIGZhQnVpbGRpbmdVbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy11biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGQ5IiwgIk0zMiA2NEMzMiAyOC43IDYwLjcgMCA5NiAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjcyLTExMiAwYy0yMC45IDAtMzkuNSAxMC4xLTUxLjIgMjUuNi04LTYtMTgtOS42LTI4LjgtOS42LTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjQgNjQgMCAwIDQ4LTE0NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwzMiA2NHpNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek00MjcuNCAzODAuNWM5LTIuMSAxOC4zIDIuMiAyMi41IDEwLjVsMjYuMSA1Mi4yIDAtNDMuM2MwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDEyOGMwIDkuMy02LjQgMTcuMy0xNS40IDE5LjVzLTE4LjMtMi4yLTIyLjUtMTAuNUw0NTIgNDg0LjcgNDUyIDUyOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0xMjhjMC05LjMgNi40LTE3LjMgMTUuNC0xOS41ek0zMjQgNDAwbDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtMTEgOS0yMCAyMC0yMHMyMCA5IDIwIDIwbDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVMb3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtbG93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NmIiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00NjQgODBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMzUyIDgwYTgwIDgwIDAgMSAxIDE2MCAwIDgwIDgwIDAgMSAxIC0xNjAgMHoiXQogICAgfTsKICAgIGZhRG9vck9wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG9vci1vcGVuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1MmIiLCAiTTI4OCA2NGw2NCAwIDAgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTk2IDAgMCAwLTE2MCAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNDE2ek0xNjAgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUFsaWduTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGlnbi1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMzYiLCAiTTI4OCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0UzE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6bTAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDM1MmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgMjI0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDQ4IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6Il0KICAgIH07CiAgICBmYUNhbWVyYTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIyNTgsICJjYW1lcmEtYWx0Il0sICJmMDMwIiwgIk0xNDkuMSA2NC44TDEzOC43IDk2IDY0IDk2QzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtNzQuNyAwLTEwLjQtMzEuMkMzNTYuNCA0NS4yIDMzOC4xIDMyIDMxNy40IDMyTDE5NC42IDMyYy0yMC43IDAtMzkgMTMuMi00NS41IDMyLjh6TTI1NiAxOTJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUNhbWVyYUFsdDIgPSBmYUNhbWVyYTI7CiAgICBmYVVzZXJzUmF5cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1yYXlzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OTMiLCAiTTMxLTMzQzIxLjctMjMuNiAyMS43LTguNCAzMSAxTDg3IDU3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw2NS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTYwOS0zM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMNTE5IDIzYy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMNjA5IDFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6TTY1IDU0NWw1Ni01NmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDMxIDUxMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwem01NDQgMGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNTYtNTZjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDB6TTMyMCAyMDhhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTAgMzJjLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEybDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLThjMC02MS45LTUwLjEtMTEyLTExMi0xMTJ6bTIxNi04MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6TTQ1MS4yIDI2MC40QzQ2OS40IDI4Ni4zIDQ4MCAzMTcuOSA0ODAgMzUybDAgOGMwIDguNC0xLjQgMTYuNS00LjEgMjRsNzguOCAwYzExLjggMCAyMS4zLTkuNiAyMS4zLTIxLjNsMC0xMC43YzAtNTMtNDMtOTYtOTYtOTYtMTAgMC0xOS43IDEuNS0yOC44IDQuNHptLTI2Mi40IDBjLTkuMS0yLjktMTguOC00LjQtMjguOC00LjQtNTMgMC05NiA0My05NiA5NmwwIDEwLjdjMCAxMS44IDkuNiAyMS4zIDIxLjMgMjEuM2w3OC44IDBjLTIuNy03LjUtNC4xLTE1LjYtNC4xLTI0bDAtOGMwLTM0LjEgMTAuNi02NS43IDI4LjgtOTEuNnpNMjE2IDE2MGE1NiA1NiAwIDEgMCAtMTEyIDAgNTYgNTYgMCAxIDAgMTEyIDB6Il0KICAgIH07CiAgICBmYVJhaW5ib3cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmFpbmJvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzc1Ml0sICJmNzViIiwgIk0zMjAgOTZDMTc4LjYgOTYgNjQgMjEwLjYgNjQgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0MzMuNyAwIDQxNmwwLTY0QzAgMTc1LjMgMTQzLjMgMzIgMzIwIDMyUzY0MCAxNzUuMyA2NDAgMzUybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NEM1NzYgMjEwLjYgNDYxLjQgOTYgMzIwIDk2em0wIDExMmMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTE0LjkgOTMuMS0yMDggMjA4LTIwOHMyMDggOTMuMSAyMDggMjA4bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTc5LjUtNjQuNS0xNDQtMTQ0LTE0NHpNMjg4IDM1MmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYVNpdGVtYXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2l0ZW1hcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGU4IiwgIk0xOTIgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC04IDAgMCA2NCAxMjAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMjAgMCAwIDgwIDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTgwLTEyMCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2IDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDggMCAwLTU2YzAtMzkuOCAzMi4yLTcyIDcyLTcybDEyMCAwIDAtNjQtOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblN0YXJzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3RhcnMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjkzMjEsICJncmluLXN0YXJzIl0sICJmNTg3IiwgIk0yNTYgNTEyYzE0MS40IDAgMjU2LTExNC42IDI1Ni0yNTYgMC0yNC40LTMuNC00OC4xLTkuOC03MC41IDE4LjYtMzYuMS0yLjctODMuNi00Ni43LTkwLTQ2LjktNTguMy0xMTguOS05NS41LTE5OS41LTk1LjVTMTAzLjQgMzcuMyA1Ni41IDk1LjVjLTQ0IDYuNC02NS4zIDUzLjktNDYuNyA5MC02LjQgMjIuNC05LjggNDYtOS44IDcwLjUgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6bS0zMS42LTIzMWM1LjMtMTAuNyAyMC41LTEwLjcgMjUuOCAwbDIwLjkgNDIuNCA0Ni43IDYuOGMxMS44IDEuNyAxNi41IDE2LjIgOCAyNC41bC0zMy44IDMzIDggNDYuNmMyIDExLjctMTAuMyAyMC43LTIwLjkgMTUuMmwtNDEuOC0yMi00MS44IDIyYy0xMC41IDUuNS0yMi45LTMuNC0yMC45LTE1LjJsOC00Ni42LTMzLjgtMzNjLTguNS04LjMtMy44LTIyLjggOC0yNC41bDQ2LjctNi44IDIwLjktNDIuNHptLTE5OC4yIDBsMjAuOSA0Mi40IDQ2LjcgNi44YzExLjggMS43IDE2LjUgMTYuMiA4IDI0LjVsLTMzLjggMzMgOCA0Ni42YzIgMTEuNy0xMC4zIDIwLjctMjAuOSAxNS4ybC00MS44LTIyLTQxLjggMjJjLTEwLjUgNS41LTIyLjktMy40LTIwLjktMTUuMmw4LTQ2LjYtMzMuOC0zM2MtOC41LTguMy0zLjgtMjIuOCA4LTI0LjVsNDYuNy02LjggMjAuOS00Mi40YzUuMy0xMC43IDIwLjUtMTAuNyAyNS44IDB6Il0KICAgIH07CiAgICBmYUdyaW5TdGFyczIgPSBmYUZhY2VHcmluU3RhcnMyOwogICAgZmFTb3J0VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydC11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzb3J0LWFzYyJdLCAiZjBkZSIsICJNMzIgMjI0Yy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44Uy4yIDE3OC41IDkuNCAxNjkuNGwxNjAtMTYwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDE2MCAxNjBjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzY0LjkgMjI0IDM1MiAyMjRMMzIgMjI0eiJdCiAgICB9OwogICAgZmFTb3J0QXNjID0gZmFTb3J0VXA7CiAgICBmYUV5ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDY1XSwgImYwNmUiLCAiTTI4OCAzMmMtODAuOCAwLTE0NS41IDM2LjgtMTkyLjYgODAuNi00Ni44IDQzLjUtNzguMSA5NS40LTkzIDEzMS4xLTMuMyA3LjktMy4zIDE2LjcgMCAyNC42IDE0LjkgMzUuNyA0Ni4yIDg3LjcgOTMgMTMxLjEgNDcuMSA0My43IDExMS44IDgwLjYgMTkyLjYgODAuNnMxNDUuNS0zNi44IDE5Mi42LTgwLjZjNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjZ6TTE0NCAyNTZhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTY0YzAgMzUuMy0yOC43IDY0LTY0IDY0LTExLjUgMC0yMi4zLTMtMzEuNy04LjQtMSAxMC45LS4xIDIyLjEgMi45IDMzLjIgMTMuNyA1MS4yIDY2LjQgODEuNiAxMTcuNiA2Ny45czgxLjYtNjYuNCA2Ny45LTExNy42Yy0xMi4yLTQ1LjctNTUuNS03NC44LTEwMS4xLTcwLjggNS4zIDkuMyA4LjQgMjAuMSA4LjQgMzEuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcmV0LWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjBkOSIsICJNNy43IDIzNS44Yy0xMC4zIDEyLjYtOS41IDMxLjEgMi4yIDQyLjhsMTI4IDEyOGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOXMxOS44LTE2LjYgMTkuOC0yOS42bDAtMjU2YzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC0xMjggMTI4LTIuMiAyLjR6Il0KICAgIH07CiAgICBmYUFwcGxlV2hvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXBwbGUtd2hvbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc4MjIsIDEyNzgyMywgImFwcGxlLWFsdCJdLCAiZjVkMSIsICJNMjI0IDExMmMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODBsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYgMHpNMCAyODhjMC03Ni4zIDM1LjctMTYwIDExMi0xNjAgMjcuMyAwIDU5LjcgMTAuMyA4Mi43IDE5LjMgMTguOCA3LjMgMzkuOSA3LjMgNTguNyAwIDIyLjktOC45IDU1LjQtMTkuMyA4Mi43LTE5LjMgNzYuMyAwIDExMiA4My43IDExMiAxNjAgMCAxMjgtODAgMjI0LTE2MCAyMjQtMTYuNSAwLTM4LjEtNi42LTUxLjUtMTEuMy04LjEtMi44LTE2LjktMi44LTI1IDAtMTMuNCA0LjctMzUgMTEuMy01MS41IDExLjMtODAgMC0xNjAtOTYtMTYwLTIyNHoiXQogICAgfTsKICAgIGZhQXBwbGVBbHQgPSBmYUFwcGxlV2hvbGU7CiAgICBmYVNjcm9sbFRvcmFoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjcm9sbC10b3JhaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ0b3JhaCJdLCAiZjZhMCIsICJNMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDAgNjguOSAwIDg2LjcgMTMuNCA5My4zIDMybDM4OS41IDBjNi42LTE4LjYgMjQuNC0zMiA0NS4zLTMyIDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDE2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4LTIwLjkgMC0zOC43LTEzLjQtNDUuMy0zMkw5My4zIDQ4MGMtNi42IDE4LjYtMjQuNCAzMi00NS4zIDMyLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6TTE3Ny45IDMwMWMtMS4yIDItMS45IDQuMi0xLjkgNi42IDAgNi45IDUuNiAxMi41IDEyLjUgMTIuNWw1Ni45IDAgMzAuNSA0OS4yYzIuNiA0LjIgNy4yIDYuOCAxMi4yIDYuOHM5LjYtMi42IDEyLjItNi44bDMwLjUtNDkuMiA1Ni45IDBjNi45IDAgMTIuNS01LjYgMTIuNS0xMi41IDAtMi4zLS42LTQuNi0xLjktNi42bC0yNy44LTQ1IDI3LjgtNDVjMS4yLTIgMS45LTQuMiAxLjktNi42IDAtNi45LTUuNi0xMi41LTEyLjUtMTIuNWwtNTYuOSAwLTMwLjUtNDkuMmMtMi42LTQuMi03LjItNi44LTEyLjItNi44cy05LjYgMi42LTEyLjIgNi44bC0zMC41IDQ5LjItNTYuOSAwYy02LjkgMC0xMi41IDUuNi0xMi41IDEyLjUgMCAyLjMgLjYgNC42IDEuOSA2LjZsMjcuOCA0NS0yNy44IDQ1eiJdCiAgICB9OwogICAgZmFUb3JhaCA9IGZhU2Nyb2xsVG9yYWg7CiAgICBmYUhvdXNlTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTAiLCAiTTUyOCAyMjQuMWM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODB6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTg1IDE3MS44QzQ0MC4yIDE5NSA0MDAgMjQ0LjggNDAwIDMwNGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNMjcyIDMyMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5NiAwIDAtODcuM2MwLTE2LjUgNy0zMS41IDE4LjQtNDIuMS04LjctOS0yMC45LTE0LjYtMzQuNC0xNC42bC0zMiAwem0yNTYtNDcuOWMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWxlZnQtcmlnaHQtdG8tbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGJhIiwgIk0zMiA5NkMxNC4zIDk2IDAgMTEwLjMgMCAxMjhMMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI1NmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMzkwLjYgMzQyLjZsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5LjQgOS40LTEzMy41IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTYgNi05LjQgMTQuMS05LjQgMjIuNnMzLjQgMTYuNiA5LjQgMjIuNmw2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDEzMy41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMHpNNTc2IDEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI1NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2eiJdCiAgICB9OwogICAgZmFUcmFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFzaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWY4IiwgIk0xMzYuNyA1LjlMMTI4IDMyIDMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5NmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMC04LjctMjYuMUMzMDYuOS03LjIgMjk0LjctMTYgMjgwLjktMTZMMTY3LjEtMTZjLTEzLjggMC0yNiA4LjgtMzAuNCAyMS45ek00MTYgMTQ0TDMyIDE0NCA1My4xIDQ2Ny4xQzU0LjcgNDkyLjQgNzUuNyA1MTIgMTAxIDUxMkwzNDcgNTEyYzI1LjMgMCA0Ni4zLTE5LjYgNDcuOS00NC45TDQxNiAxNDR6Il0KICAgIH07CiAgICBmYUZhY2VTYWRUZWFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLXNhZC10ZWFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTQ2LCAic2FkLXRlYXIiXSwgImY1YjQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI3MSA5OGM1LjUtMS4zIDExLjEtMiAxNy0yIDI0LjEgMCA0NS40IDExLjggNTguNSAzMCA3LjcgMTAuOCAyMi43IDEzLjIgMzMuNSA1LjVzMTMuMi0yMi43IDUuNS0zMy41Yy0yMS43LTMwLjItNTcuMy01MC05Ny41LTUwLTEyLjUgMC0yNC42IDEuOS0zNS45IDUuNSA5LjggMTIuNyAxNi41IDI3LjkgMTguOSA0NC42ek0xNzYgMjQwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTkyLTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTE4NS40IDI5Mi44Yy0yLjQtMi45LTUuNy00LjgtOS40LTQuOHMtNyAxLjktOS40IDQuOGMtNi41IDcuOC0xMi42IDE2LjEtMTguMyAyNC42LTkgMTMuNC0yMC4zIDMwLjItMjAuMyA0Ny40IDAgMjguMyAyMS41IDUxLjIgNDggNTEuMnM0OC0yMi45IDQ4LTUxLjJjMC0xNy4yLTExLjItMzQtMjAuMy00Ny40LTUuNy04LjUtMTEuOS0xNi43LTE4LjMtMjQuNnoiXQogICAgfTsKICAgIGZhU2FkVGVhcjIgPSBmYUZhY2VTYWRUZWFyMjsKICAgIGZhRmF4ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZheCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNCwgMTI4NDM5XSwgImYxYWMiLCAiTTE2MCA2NGwwIDgwIDY0IDAgMC04MCAxNDYuNyAwIDQ1LjMgNDUuMyAwIDM0LjcgNjQgMCAwLTM0LjdjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMNDE2IDE4LjdDNDA0IDYuNyAzODcuNyAwIDM3MC43IDBMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0ek0zMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyTDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yODhjMC0xNy43LTE0LjMtMzItMzItMzJsLTQ4IDB6bTQ0OCA2NGwtMzIwIDAgMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAyODhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMCA5NmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek0zMzYgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMzEyIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek00MjQgMjY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNNDAwIDM4NGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFQZXJzb25DaXJjbGVQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQxIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0xNi0yMDhsMCA0OCA0OCAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwIDAgNDhjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC00OC00OCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDQ4IDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFIYW1zYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1zYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjY1IiwgIk0zNC42IDI4OEw4MCAyODhjOC44IDAgMTYtNy4yIDE2LTE2TDk2IDcyYzAtMjIuMSAxNy45LTQwIDQwLTQwczQwIDE3LjkgNDAgNDBsMCAxMzJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xNjRjMC0yMi4xIDE3LjktNDAgNDAtNDBzNDAgMTcuOSA0MCA0MGwwIDE2NGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTEzMmMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMjAwYzAgOC44IDcuMiAxNiAxNiAxNmw0NS40IDBjMTkuMSAwIDM0LjYgMTUuNSAzNC42IDM0LjYgMCA4LjYtMy4yIDE2LjktOSAyMy4zTDQxNi42IDQ0MWMtNDEuMSA0NS4yLTk5LjQgNzEtMTYwLjYgNzFTMTM2LjYgNDg2LjIgOTUuNCA0NDFMOSAzNDUuOWMtNS44LTYuNC05LTE0LjctOS0yMy4zIDAtMTkuMSAxNS41LTM0LjYgMzQuNi0zNC42ek0yNTYgMjg4Yy0zOC40IDAtNzYuOCAzNS44LTkwLjYgNTAuMi0zLjYgMy43LTUuNCA4LjctNS40IDEzLjhzMS44IDEwLjEgNS40IDEzLjhDMTc5LjIgMzgwLjIgMjE3LjYgNDE2IDI1NiA0MTZzNzYuOC0zNS44IDkwLjYtNTAuMmMzLjYtMy43IDUuNC04LjcgNS40LTEzLjhzLTEuOC0xMC4xLTUuNC0xMy44QzMzMi44IDMyMy44IDI5NC40IDI4OCAyNTYgMjg4em0wIDMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNpcmNsZS1xdWVzdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTQyIiwgIk0yODAgMjRhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwem0yNCAyMTIuN0wzNDEgMjg2LjZjMTIuOC0xNy41IDI4LjUtMzIuNyA0Ni4zLTQ1bC01Ni4yLTc1LjdDMzA2IDEzMiAyNjYuMyAxMTIgMjI0IDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42TDE0NCAyMzYuNyAxNDQgNTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjBjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjc1LjN6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTAwYy0xMS42IDAtMjEuMyA4LjItMjMuNSAxOS4yLTEuOCA4LjctMTAuMiAxNC4zLTE4LjkgMTIuNXMtMTQuMy0xMC4yLTEyLjUtMTguOWM1LjItMjUuNiAyNy44LTQ0LjggNTQuOS00NC44IDMwLjkgMCA1NiAyNS4xIDU2IDU2IDAgMTkuOC0xMS43IDM3LjgtMjkuOCA0NS45bC0xMC40IDQuNmMtMS4yIDcuNy03LjggMTMuNS0xNS44IDEzLjUtOC44IDAtMTYtNy4yLTE2LTE2IDAtMTEuMiA2LjYtMjEuMyAxNi44LTI1LjlsMTIuNC01LjVjNi42LTIuOSAxMC44LTkuNCAxMC44LTE2LjYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1jaGVjayIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDZjIiwgIk0yNTYgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwem0yNi45IDIxMi42Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM2wtODUuNiAxMTcuNy0yNi41LTI3LjRjLTkuMi05LjUtMjQuNC05LjgtMzMuOS0uNnMtOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMjg4LjIgMjQ2LjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6TTEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlRnJvbVNxdWFyZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hhcmUtZnJvbS1zcXVhcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MTUwOSwgInNoYXJlLXNxdWFyZSJdLCAiZjE0ZCIsICJNMzg0LjUgMjRsMCA3Mi02NCAwYy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDkzLjQgODIuOCAxMzQuOCAxMDAuNiAxNDIuNiAyLjIgMSA0LjYgMS40IDcuMSAxLjRsMi41IDBjOS44IDAgMTcuOC04IDE3LjgtMTcuOCAwLTguMy01LjktMTUuNS0xMi44LTIwLjMtOC45LTYuMi0xOS4yLTE4LjItMTkuMi00MC41IDAtNDUgMzYuNS04MS41IDgxLjUtODEuNWwzMC41IDAgMCA3MmMwIDkuNyA1LjggMTguNSAxNC44IDIyLjJzMTkuMyAxLjcgMjYuMi01LjJsMTM2LTEzNmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0MjUuNSA3Yy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzM4NC41IDE0LjMgMzg0LjUgMjR6bS0yNzIgNzJjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjU2YzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTI1NiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDE2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDB6Il0KICAgIH07CiAgICBmYVNoYXJlU3F1YXJlMiA9IGZhU2hhcmVGcm9tU3F1YXJlMjsKICAgIGZhUmVjZWlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWNlaXB0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NTM0XSwgImY1NDMiLCAiTTE0IDIuMkMyMi41LTEuNyAzMi41LS4zIDM5LjYgNS44TDgwIDQwLjQgMTIwLjQgNS44YzktNy43IDIyLjMtNy43IDMxLjIgMEwxOTIgNDAuNCAyMzIuNCA1LjhjOS03LjcgMjIuMi03LjcgMzEuMiAwTDMwNCA0MC40IDM0NC40IDUuOGM3LjEtNi4xIDE3LjEtNy41IDI1LjYtMy42UzM4NCAxNC42IDM4NCAyNGwwIDQ2NGMwIDkuNC01LjUgMTcuOS0xNCAyMS44cy0xOC41IDIuNS0yNS42LTMuNmwtNDAuNC0zNC42LTQwLjQgMzQuNmMtOSA3LjctMjIuMiA3LjctMzEuMiAwbC00MC40LTM0LjYtNDAuNCAzNC42Yy05IDcuNy0yMi4zIDcuNy0zMS4yIDBMODAgNDcxLjYgMzkuNiA1MDYuMmMtNy4xIDYuMS0xNy4xIDcuNS0yNS42IDMuNlMwIDQ5Ny40IDAgNDg4TDAgMjRDMCAxNC42IDUuNSA2LjEgMTQgMi4yek0xMDQgMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMHpNODAgMzUyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNzYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bTI0LTEyMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTc2IDB6Il0KICAgIH07CiAgICBmYUVxdWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlcXVhbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs2Mjc2NF0sICIzZCIsICJNMzIgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDEyOHptMCAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIweiJdCiAgICB9OwogICAgZmFDaGV2cm9uVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi11cCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDc3IiwgIk0yMDEuNCAxMDUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDIyNCAxNzMuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxOTItMTkyeiJdCiAgICB9OwogICAgZmFWaXJ1c1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzUiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTg4LjYtODguNmMxLjctMTIuMS0yLTI0LjgtMTEuMy0zNC0zMS4yLTMxLjItOS4xLTg0LjUgMzUtODQuNSAyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGMtNDQuMSAwLTY2LjEtNTMuMy0zNS04NC41IDE1LjYtMTUuNiAxNS42LTQwLjkgMC01Ni42cy00MC45LTE1LjYtNTYuNiAwYy0zMS4yIDMxLjItODQuNSA5LjEtODQuNS0zNSAwLTIyLjEtMTcuOS00MC00MC00MHMtNDAgMTcuOS00MCA0MGMwIDQ0LjEtNTMuMyA2Ni4xLTg0LjUgMzUtOS4zLTkuMy0yMi0xMy0zNC0xMS4zTDQxLTI0Ljl6TTcyIDIxNmMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGM0NC4xIDAgNjYuMSA1My4zIDM1IDg0LjUtMTUuNiAxNS42LTE1LjYgNDAuOSAwIDU2LjZzNDAuOSAxNS42IDU2LjYgMGMzMS4yLTMxLjIgODQuNS05LjEgODQuNSAzNSAwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwYzAtMjEuNCAxMi42LTM3LjYgMjkuMS00NS4xbC0yNDAtMjQwQzEwOS42IDIwMy40IDkzLjQgMjE2IDcyIDIxNnoiXQogICAgfTsKICAgIGZhU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjcxNSIsICJNNy0yNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEw1NjkgNTAzYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5Qy0yLjMtLjQtMi4zLTE1LjYgNy0yNXoiXQogICAgfTsKICAgIGZhRXhwYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV4cGFuZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDY1IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTY0IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDMzNC4zIDAgMzUybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTY0ek0zMjAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMHpNNDQ4IDM1MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDY0LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2eiJdCiAgICB9OwogICAgZmFOb3RlU3RpY2t5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub3RlLXN0aWNreSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYyMDI2LCAic3RpY2t5LW5vdGUiXSwgImYyNDkiLCAiTTY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIxMy41YzAgMTctNi43IDMzLjMtMTguNyA0NS4zTDMyMi43IDQ2MS4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDY0IDQ4MHpNMzg5LjUgMzA0TDI5NiAzMDRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgOTMuNSAxMTcuNS0xMTcuNXoiXQogICAgfTsKICAgIGZhU3RpY2t5Tm90ZTIgPSBmYU5vdGVTdGlja3kyOwogICAgZmFUYWJsZUNvbHVtbnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY29sdW1ucyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJjb2x1bW5zIl0sICJmMGRiIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptNjQgNjRsMCAyNTYgMTI4IDAgMC0yNTYtMTI4IDB6bTMyMCAwbC0xMjggMCAwIDI1NiAxMjggMCAwLTI1NnoiXQogICAgfTsKICAgIGZhQ29sdW1ucyA9IGZhVGFibGVDb2x1bW5zOwogICAgZmFQZXJzb25TaGVsdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zaGVsdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGYiLCAiTTI3MS45IDQuMmMtOS44LTUuNi0yMS45LTUuNi0zMS44IDBsLTIyNCAxMjhDNi4yIDEzNy45IDAgMTQ4LjUgMCAxNjBMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCAxNzguNiAyNTYgNjguOSA0NDggMTc4LjYgNDQ4IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzIwYzAtMTEuNS02LjItMjIuMS0xNi4xLTI3LjhsLTIyNC0xMjh6TTI1NiAyMDhhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwem0tOCAxOTJsMTYgMCAwIDg4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNzQuNSAyNi45IDQ5LjljNi4zIDExLjcgMjAuOCAxNiAzMi41IDkuOHMxNi0yMC44IDkuOC0zMi41bC0zMy4yLTYxLjdDMzI5LjcgMjQ1LjEgMjk0LjQgMjI0IDI1NiAyMjRzLTczLjcgMjEuMS05MS45IDU0LjlsLTMzLjIgNjEuN2MtNi4zIDExLjctMS45IDI2LjIgOS44IDMyLjVzMjYuMiAxLjkgMzIuNS05LjhMMjAwIDMxMy41IDIwMCA0ODhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTg4eiJdCiAgICB9OwogICAgZmFDaXJjbGVOb3RjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtbm90Y2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFjZSIsICJNMjIyLjcgMzIuMWM1IDE2LjktNC42IDM0LjgtMjEuNSAzOS44LTc5LjMgMjMuNi0xMzcuMSA5Ny4xLTEzNy4xIDE4NC4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODYuOS01Ny44LTE2MC40LTEzNy4xLTE4NC4xLTE2LjktNS0yNi42LTIyLjktMjEuNS0zOS44czIyLjktMjYuNiAzOS44LTIxLjVDNDM0LjkgNDIuMSA1MTIgMTQwIDUxMiAyNTYgNTEyIDM5Ny40IDM5Ny40IDUxMiAyNTYgNTEyUzAgMzk3LjQgMCAyNTZjMC0xMTYgNzcuMS0yMTMuOSAxODIuOS0yNDUuNCAxNi45LTUgMzQuOCA0LjYgMzkuOCAyMS41eiJdCiAgICB9OwogICAgZmFXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YXRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNzczIiwgIk00MTAuNiAxMjQuMWMyMC43IDE1LjYgNDYgMzAuNyA3NC4yIDM0LjUgMTMuMSAxLjggMjUuMi03LjUgMjctMjAuNnMtNy41LTI1LjItMjAuNi0yN2MtMTUuOS0yLjEtMzMuMi0xMS4zLTUxLjctMjUuMi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0xOC41IDEzLjktMzUuOCAyMy4xLTUxLjcgMjUuMi0xMy4xIDEuOC0yMi40IDEzLjgtMjAuNiAyN3MxMy44IDIyLjQgMjcgMjAuNmMyOC4yLTMuOCA1My42LTE4LjkgNzQuMi0zNC41IDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6bTAgMTQ0YzIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS43LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgMTQ0YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDIwLjcgMTUuNiA0NiAzMC43IDc0LjIgMzQuNSAxMy4xIDEuOCAyNS4yLTcuNSAyNy0yMC42cy03LjUtMjUuMi0yMC42LTI3Yy0xNS45LTIuMS0zMy4yLTExLjMtNTEuNy0yNS4yLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTE4LjUgMTMuOS0zNS44IDIzLjEtNTEuNyAyNS4yLTEzLjEgMS44LTIyLjQgMTMuOC0yMC42IDI3czEzLjggMjIuNCAyNyAyMC42YzI4LjItMy44IDUzLjYtMTguOSA3NC4yLTM0LjUgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhRGVsZXRlTGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZWxldGUtbGVmdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzkwMDMsICJiYWNrc3BhY2UiXSwgImY1NWEiLCAiTTU3NiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjA1LjMgNjRjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDkuNCAyMzMuNGMtNiA2LTkuNCAxNC4xLTkuNCAyMi42czMuNCAxNi42IDkuNCAyMi42TDE2MCA0MjkuM2MxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43TDUxMiA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZ6TTI4NC4xIDE4OC4xYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDMzLjkgMzMuOSAzMy45LTMzLjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMy45IDMzLjkgMzMuOSAzMy45YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTMzLjktMzMuOS0zMy45IDMzLjljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45LTMzLjktMzMuOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUJhY2tzcGFjZSA9IGZhRGVsZXRlTGVmdDsKICAgIGZhQnJvb21CYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyb29tLWJhbGwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsicXVpZGRpdGNoIiwgInF1aWRkaXRjaC1icm9vbS1iYWxsIl0sICJmNDU4IiwgIk00OTYgNTQ0YTgwIDgwIDAgMSAxIDAtMTYwIDgwIDgwIDAgMSAxIDAgMTYwek0xMDYuOCAyNzcuMmMzMC42LTMwLjYgNzMuMS00NS45IDExNS44LTQyLjJMMzQxIDM1My4zYzMuNyA0Mi44LTExLjYgODUuMi00Mi4yIDExNS45LTI3LjQgMjcuNC02NC42IDQyLjgtMTAzLjMgNDIuOEwyMi4xIDUxMmMtMTIuMiAwLTIyLjEtOS45LTIyLjEtMjIuMSAwLTYuMyAyLjctMTIuMyA3LjMtMTYuNUwxMzMuNyAzNTkuN2M0LjItMy43LS40LTEwLjQtNS40LTcuOUw3Ny4yIDM3Ny40Yy02LjEgMy0xMy4yLTEuNC0xMy4yLTguMiAwLTMxLjUgMTIuNS02MS44IDM0LjgtODRsOC04em00MTctMjcwYzEyLjYtMTAuMyAzMS4xLTkuNSA0Mi44IDIuMnMxMi40IDMwLjIgMi4yIDQyLjhsLTIuMiAyLjQtMTkyIDE5MiAzNC44IDM0LjdjNC4yIDQuMiA2LjYgMTAgNi42IDE2IDAgMTIuNS0xMC4xIDIyLjYtMjIuNiAyMi42bC0yOS4xIDAtMTA4LjMtMTA4LjMgMC0yOS4xYzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42IDYgMCAxMS44IDIuNCAxNiA2LjZsMzQuOCAzNC43IDE5Mi0xOTIgMi40LTIuMnoiXQogICAgfTsKICAgIGZhUXVpZGRpdGNoID0gZmFCcm9vbUJhbGw7CiAgICBmYVF1aWRkaXRjaEJyb29tQmFsbCA9IGZhQnJvb21CYWxsOwogICAgZmFKID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImoiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDZdLCAiNGEiLCAiTTI4OCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMwIDQwOC40IDAgMzIwbDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNodXR0bGVTcGFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHV0dGxlLXNwYWNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNwYWNlLXNodXR0bGUiXSwgImYxOTciLCAiTTAgMzY4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsNTAgMGM0MC42IDAgODAuNC0xMSAxMTUuMi0zMS45bDEzMy41LTgwLjEtOTMuMyAwLTY0LjkgMzguOWMtMTQgOC40LTI4LjkgMTQuNy00NC41IDE5bDAtNjYuNGM5LjctNS42IDE3LjgtMTMuNyAyMy40LTIzLjRsMTk4LjggMGM2Ny4xIDAgMTI3LjgtMjAuNiAxNzAuMy03MC42IDQuNi01LjQgNC42LTEzLjMgMC0xOC44LTQyLjUtNTAuMS0xMDMuMi03MC42LTE3MC4zLTcwLjZsLTE5OC44IDBjLTUuNi05LjctMTMuNy0xNy44LTIzLjQtMjMuNGwwLTY2LjRjMTUuNiA0LjIgMzAuNiAxMC42IDQ0LjUgMTlsNjQuOSAzOC45IDkzLjMgMC0xMzMuNS04MC4xQzE3OC40IDQzIDEzOC42IDMyIDk4IDMyTDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCAzNjh6bTk2IDBsMCA2NC00OCAwIDAtNjQgNDggMHpNOTYgODBsMCA2NC00OCAwIDAtNjQgNDggMHpNNDE2IDIyNGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhU3BhY2VTaHV0dGxlID0gZmFTaHV0dGxlU3BhY2U7CiAgICBmYVlpbllhbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieWluLXlhbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc1XSwgImY2YWQiLCAiTTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgMzUyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptMC00NDhjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTYtOTYgNDMtOTYgOTYgNDMgOTYgOTYgOTZDMTUwIDQ0OCA2NCAzNjIgNjQgMjU2UzE1MCA2NCAyNTYgNjR6TTIyNCAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTIwOV0sICJmMDRkIiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYVRyb3dlbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cm93ZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4OSIsICJNNDA3LjkgMTgxLjRMMjc3LjMgMzEyIDM0Mi42IDM3Ny40YzcuOSA3LjkgMTEuMSAxOS40IDguNCAzMC4zcy0xMC44IDE5LjYtMjEuNSAyMi45bC0yNTYgODBjLTExLjQgMy41LTIzLjggLjUtMzIuMi03LjlzLTExLjUtMjAuOC03LjktMzIuMmw4MC0yNTZjMy4zLTEwLjcgMTItMTguOSAyMi45LTIxLjVzMjIuNCAuNSAzMC4zIDguNEwyMzIgMjY2LjcgMzYyLjYgMTM2LjFjLTE0LjMtMTQuNi0xNC4yLTM4IC4zLTUyLjVsOTUuNC05NS40YzI2LjktMjYuOSA3MC41LTI2LjkgOTcuNSAwczI2LjkgNzAuNSAwIDk3LjVsLTk1LjQgOTUuNGMtMTQuNSAxNC41LTM3LjkgMTQuNi01Mi41IC4zeiJdCiAgICB9OwogICAgZmFIYW5kQmFja0Zpc3QyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtYmFjay1maXN0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImhhbmQtcm9jayJdLCAiZjI1NSIsICJNNy40IDI1My42QzIuNiAyNDUuOSAwIDIzNy4xIDAgMjI4bDAtMzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTYgMCAwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDE3LjMgMCAzMi40IDkuMSA0MC45IDIyLjggNC4zLTIyLjEgMjMuOC0zOC44IDQ3LjEtMzguOCAyMy40IDAgNDIuOSAxNi44IDQ3LjEgMzguOSA3LjMtNC40IDE1LjgtNi45IDI0LjktNi45IDIyLjEgMCA0MC44IDE1IDQ2LjMgMzUuNCA1LjUtMi4yIDExLjQtMy40IDE3LjctMy40IDI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYuOWMwIDkuOS0yLjMgMTkuNy02LjggMjguNmwtMzkuNiA3OS4xYy0xMC44IDIxLjctMzMgMzUuNC01Ny4yIDM1LjRMOTYgMzUyYy0xNi41IDAtMzEuOC04LjQtNDAuNi0yMi40bC00OC03NnpNMzIgNDgwbDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFIYW5kUm9jazIgPSBmYUhhbmRCYWNrRmlzdDI7CiAgICBmYVRlbXBlcmF0dXJlSGlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1oaWdoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NjkiLCAiTTk2IDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAxNjQuN2MyOS41IDI2LjQgNDggNjQuNyA0OCAxMDcuMyAwIDc5LjUtNjQuNSAxNDQtMTQ0IDE0NFM0OCA0NDcuNSA0OCAzNjhjMC00Mi42IDE4LjUtODEgNDgtMTA3LjNMOTYgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjE2IDk2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjEyLjdjLTIzLjUgOS41LTQwIDMyLjUtNDAgNTkuMyAwIDM1LjMgMjguNyA2NCA2NCA2NHpNNDY0IDgwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTM1MiA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6Il0KICAgIH07CiAgICBmYUdyZWF0ZXJUaGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyZWF0ZXItdGhhbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNzY5XSwgIjNlIiwgIk0zNC45IDUwLjZjLTcuNCAxNi0uNCAzNS4xIDE1LjYgNDIuNUw0MDMuNiAyNTYgNTAuNiA0MTljLTE2IDcuNC0yMy4xIDI2LjQtMTUuNiA0Mi41czI2LjQgMjMgNDIuNSAxNS42bDQxNi0xOTJjMTEuMy01LjIgMTguNi0xNi42IDE4LjYtMjkuMXMtNy4zLTIzLjgtMTguNi0yOS4xTDc3LjQgMzVjLTE2LTcuNC0zNS4xLS40LTQyLjUgMTUuNnoiXQogICAgfTsKICAgIGZhQ3J1dGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNydXRjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2Y3IiwgIk0yOTcuNCA5LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMS40LTEuNC0xNTguNiAxNTguNmMtMTggMTgtNDIuNCAyOC4xLTY3LjkgMjguMWwtNTkgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjQtNjEuNyA2MS43LTkyLjggOTIuOC05My4zIDkzLjMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsMTYtMTYgMCAwIDc3LjMtNzcuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC01OWMwLTI1LjUgMTAuMS00OS45IDI4LjEtNjcuOUwyOTguNyA1NiAyOTcuNCA1NC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3pNMzQ0IDEwMS4zTDI2MS4zIDE4NCAzMjggMjUwLjcgNDEwLjcgMTY4IDM0NCAxMDEuM3ptLTEyOCAxMjhsLTMwLjYgMzAuNmMtNiA2LTkuNCAxNC4xLTkuNCAyMi42bDAgNTMuNSA1My41IDBjOC41IDAgMTYuNi0zLjQgMjIuNi05LjRMMjgyLjcgMjk2IDIxNiAyMjkuM3oiXQogICAgfTsKICAgIGZhU2VwdGFnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VwdGFnb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaGVwdGFnb24iXSwgImU4MjAiLCAiTTI2Ny40LTMxLjVjMTUuOS01LjUgMzMuNS00LjYgNDguOCAyLjdsMTcyLjQgODMgNi4zIDMuNWMxNC4yIDkgMjQuNSAyMy4zIDI4LjMgMzkuOWw0Mi42IDE4Ni41IDEuMiA3LjJjMS42IDE0LjMtMS43IDI4LjgtOS40IDQxLjFsLTQuMiA1LjktMTE5LjMgMTQ5LjZjLTEyLjEgMTUuMi0zMC42IDI0LjEtNTAgMjQuMWwtMTkxLjMgMGMtMTkuNSAwLTM3LjktOC45LTUwLTI0LjFMMjMuNSAzMzguNGMtMTIuMS0xNS4yLTE2LjctMzUuMi0xMi4zLTU0LjJsNDIuNi0xODYuNSAyLTdjNS42LTE1LjkgMTcuMi0yOSAzMi42LTM2LjRsMTcyLjQtODMgNi43LTIuN3oiXQogICAgfTsKICAgIGZhSGVwdGFnb24gPSBmYVNlcHRhZ29uOwogICAgZmFTdHJlZXRWaWV3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cmVldC12aWV3IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyMWQiLCAiTTI1NiAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0yMjQgMTYwbDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA0OGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMS44IDAtMTEuMSA5OS41Yy0xLjggMTYuMi0xNS41IDI4LjUtMzEuOCAyOC41bC0zOC43IDBjLTE2LjMgMC0zMC0xMi4zLTMxLjgtMjguNWwtMTEuMS05OS41LTEuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ4YzAtMzUuMyAyOC43LTY0IDY0LTY0ek00MTIuNCA0MDAuMmMtMTYuMS00LjItMzQuOC03LjYtNTUuNC0xMC4ybDUuMy00Ny43YzIyLjcgMi45IDQzLjcgNi43IDYyLjEgMTEuNSAyMi40IDUuOCA0Mi42IDEzLjMgNTcuOCAyMy4zIDE0LjcgOS42IDI5LjggMjQuOSAyOS44IDQ3cy0xNS4xIDM3LjQtMjkuOCA0N2MtMTUuMiA5LjktMzUuNSAxNy41LTU3LjggMjMuMy00NS4xIDExLjctMTA1LjMgMTcuOC0xNjguNCAxNy44cy0xMjMuMy02LjEtMTY4LjQtMTcuOEM2NS4yIDQ4OC40IDQ1IDQ4MC45IDI5LjggNDcxIDE1LjEgNDYxLjQgMCA0NDYuMSAwIDQyNHMxNS4xLTM3LjQgMjkuOC00N2MxNS4yLTkuOSAzNS41LTE3LjUgNTcuOC0yMy4zIDE4LjUtNC44IDM5LjUtOC42IDYyLjEtMTEuNUwxNTUgMzkwYy0yMC42IDIuNi0zOS4zIDYuMS01NS40IDEwLjItNTYuNiAxNC42LTU2LjYgMzIuOSAwIDQ3LjUgMzkuOSAxMC4zIDk1LjggMTYuMiAxNTYuNCAxNi4yczExNi41LTUuOSAxNTYuNC0xNi4yYzU2LjYtMTQuNiA1Ni42LTMyLjkgMC00Ny41eiJdCiAgICB9OwogICAgZmFXYXZlU3F1YXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhdmUtc3F1YXJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY4M2UiLCAiTTY0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjg4IDk2IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjg4LTk2IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTEyOHoiXQogICAgfTsKICAgIGZhQW5nbGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLWxlZnQiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFs4MjQ5XSwgImYxMDQiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYweiJdCiAgICB9OwogICAgZmFTY3Jld2RyaXZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY3Jld2RyaXZlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY5MV0sICJmNTRhIiwgIk0zNTIuMSAxNDYuN2wwLTQ5LjZjMC0xMC43IDUuMy0yMC43IDE0LjItMjYuNkw0ODUuMi04LjdjNi4zLTQuMiAxNC44LTMuNCAyMC4yIDJsNDUuNCA0NS41YzUuNCA1LjQgNi4yIDEzLjggMiAyMC4yTDQ3My42IDE3Ny44Yy01LjkgOC45LTE1LjkgMTQuMi0yNi42IDE0LjJsLTQ5LjYgMC05MC43IDkwLjdjMTUgMzMuMyA4LjkgNzMuOS0xOC41IDEwMS4zTDE2Mi4xIDUxMC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwzNC4xIDQ0OS45Yy0xOC43LTE4LjctMTguNy00OS4xIDAtNjcuOUwxNjAuMSAyNTZjMjcuNC0yNy40IDY3LjktMzMuNiAxMDEuMy0xOC41bDkwLjctOTAuN3oiXQogICAgfTsKICAgIGZhVHJhY3RvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFjdG9yIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjY4XSwgImY3MjIiLCAiTTE2MCA5NmwwIDk2IDEzMy40IDAtNTcuNi05Ni03NS44IDB6TTk2IDIyM0w5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDcuOCAwYzIyLjUgMCA0My4zIDExLjggNTQuOSAzMS4xbDc3LjQgMTI4LjkgNjQgMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDEuNWMwIDE0LjItNi4zIDI3LjgtMTcuMyAzNi45bC0zNSAyOS4yYzI2LjUgMTUuMiA0NC4zIDQzLjcgNDQuMyA3Ni40IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMTQuNCAzLjUtMjggOS42LTQwbC0xMDEuMiAwYy0zIDEzLjQtNy45IDI2LTE0LjQgMzcuNyA3LjcgOS40IDcuMiAyMy40LTEuNiAzMi4ybC0yMi42IDIyLjZjLTguOCA4LjgtMjIuNyA5LjMtMzIuMiAxLjYtOS4zIDUuMi0xOS4zIDkuMy0yOS44IDEyLjMtMS4yIDEyLjEtMTEuNCAyMS42LTIzLjkgMjEuNmwtMzIgMGMtMTIuNCAwLTIyLjctOS41LTIzLjktMjEuNi0xMC41LTMtMjAuNC03LjItMjkuOC0xMi4zLTkuNCA3LjctMjMuNCA3LjItMzIuMi0xLjZMMzUuNSA0NTMuOGMtOC44LTguOC05LjMtMjIuNy0xLjYtMzIuMi01LjItOS4zLTkuMy0xOS4zLTEyLjMtMjkuOC0xMi4xLTEuMi0yMS42LTExLjQtMjEuNi0yMy45bDAtMzJjMC0xMi40IDkuNS0yMi43IDIxLjYtMjMuOSAzLTEwLjUgNy4yLTIwLjQgMTIuMy0yOS44LTcuNy05LjQtNy4yLTIzLjQgMS42LTMyLjJsMjIuNi0yMi42YzguOC04LjggMjIuNy05LjMgMzIuMi0xLjYgMS45LTEgMy43LTIgNS43LTN6bTY0IDY1YTY0IDY0IDAgMSAwIDAgMTI4IDY0IDY0IDAgMSAwIDAtMTI4ek00NDAgNDI0YTQwIDQwIDAgMSAwIDgwIDAgNDAgNDAgMCAxIDAgLTgwIDB6Il0KICAgIH07CiAgICBmYUJyaWRnZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRjYiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDggMCAwIDY0LTQwIDAgMCAxMTJjMzcuNiA5LjQgNjQgNDMuMiA2NCA4MmwwIDk0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTUzIDQzLTk2IDk2LTk2IDYuNCAwIDEyLjcgLjYgMTguNyAxLjggMzQuNy00OS41IDkyLjItODEuOCAxNTcuMy04MS44IDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtNjUuNC00MCAwIDAtNjQgOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyek00MjQgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNMjk2IDk2bDAgNjQtODAgMCAwLTY0IDgwIDB6TTg4IDk2bDgwIDAgMCA2NC04MCAwIDAtNjR6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFWaWFscyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFscyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDkzIiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDAgMzUyYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0zNTIgNjQgMCAwIDM1MmMwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMzUyYzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQ5Ny43IDAgNDgwIDBMMzIgMHpNMTYwIDY0bDAgMTI4LTY0IDAgMC0xMjggNjQgMHptMjU2IDBsMCAxMjgtNjQgMCAwLTEyOCA2NCAweiJdCiAgICB9OwogICAgZmFTdGV0aG9zY29wZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGV0aG9zY29wZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTY1OF0sICJmMGYxIiwgIk0zMiA0OEMzMiAyMS41IDUzLjUgMCA4MCAwbDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMyMzguMyAwIDI1NiAwbDQ4IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAxNDRjMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAxOS4yYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEyczExMi01MC4xIDExMi0xMTJsMC04NS41Yy0zNy4zLTEzLjItNjQtNDguNy02NC05MC41IDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCA0MS44LTI2LjcgNzcuNC02NCA5MC41bDAgODUuNWMwIDk3LjItNzguOCAxNzYtMTc2IDE3NlMxNjAgNDY1LjIgMTYwIDM2OGwwLTE5LjJDODcgMzM0IDMyIDI2OS40IDMyIDE5MkwzMiA0OHpNNDgwIDIyNGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYVBvZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9kY2FzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMmNlIiwgIk0zMzYgMzU5LjhjMzkuMS0zMi4zIDY0LTgxLjEgNjQtMTM1LjggMC05Ny4yLTc4LjgtMTc2LTE3Ni0xNzZTNDggMTI2LjggNDggMjI0QzQ4IDI3OC43IDcyLjkgMzI3LjUgMTEyIDM1OS44IDExMi40IDM3Ny40IDExNS4yIDQwMC4yIDExOC40IDQyMS42IDQ4IDM4My45IDAgMzA5LjUgMCAyMjQgMCAxMDAuMyAxMDAuMyAwIDIyNCAwUzQ0OCAxMDAuMyA0NDggMjI0YzAgODUuNi00OCAxNTkuOS0xMTguNSAxOTcuNiAzLjMtMjEuNCA2LTQ0LjIgNi40LTYxLjh6bS0xNC01My40Yy04LjMtMTIuNi0xOS4yLTIxLjYtMzAuNC0yNy44LTIuMS0xLjEtNC4yLTIuMi02LjMtMy4yIDExLjctMTMuOSAxOC44LTMxLjkgMTguOC01MS41IDAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwYzAgMTkuNiA3LjEgMzcuNiAxOC44IDUxLjUtMi4xIDEtNC4yIDItNi4zIDMuMi0xMS4yIDYuMi0yMi4xIDE1LjItMzAuNCAyNy44LTE4LjgtMjIuMy0zMC4xLTUxLTMwLjEtODIuNCAwLTcwLjcgNTcuMy0xMjggMTI4LTEyOHMxMjggNTcuMyAxMjggMTI4YzAgMzEuNC0xMS4zIDYwLjItMzAuMSA4Mi40ek0yMjQgMzEyYzMyLjkgMCA2NCA4LjYgNjQgNDMuOCAwIDMzLTEyLjkgMTA0LjEtMjAuNiAxMzIuOS01LjEgMTktMjQuNSAyMy40LTQzLjQgMjMuNHMtMzguMi00LjQtNDMuNC0yMy40Yy03LjgtMjguNS0yMC42LTk5LjctMjAuNi0xMzIuOCAwLTM1LjEgMzEuMS00My44IDY0LTQzLjh6bTAtMTI4YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RG90cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1kb3RzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YjciLCAiTTk2IDMyQzc4LjMgMzIgNjQgNDYuMyA2NCA2NFM3OC4zIDk2IDk2IDk2TDExNC43IDk2IDkuNCAyMDEuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxNjAgMTQxLjMgMTYwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMzJ6TTQwMy44IDcwLjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNMjc5LjcgMTk0LjJhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHptMTYyLjItMzguMWEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6TTE1Ni4yIDMxNy44YTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6bTE2MS42LTM4LjFhMzguMSAzOC4xIDAgMSAwIDAgNzYuMiAzOC4xIDM4LjEgMCAxIDAgMC03Ni4yem04Ni4xIDM4LjFhMzguMSAzOC4xIDAgMSAwIDc2LjIgMCAzOC4xIDM4LjEgMCAxIDAgLTc2LjIgMHpNNzAuMSA0MDMuOGEzOC4xIDM4LjEgMCAxIDAgMCA3Ni4yIDM4LjEgMzguMSAwIDEgMCAwLTc2LjJ6bTg2LjEgMzguMWEzOC4xIDM4LjEgMCAxIDAgNzYuMiAwIDM4LjEgMzguMSAwIDEgMCAtNzYuMiAwem0xNjEuNi0zOC4xYTM4LjEgMzguMSAwIDEgMCAwIDc2LjIgMzguMSAzOC4xIDAgMSAwIDAtNzYuMnptODYuMSAzOC4xYTM4LjEgMzguMSAwIDEgMCA3Ni4yIDAgMzguMSAzOC4xIDAgMSAwIC03Ni4yIDB6Il0KICAgIH07CiAgICBmYUNoZXNzUXVlZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXF1ZWVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgxOV0sICJmNDQ1IiwgIk0yNTYgODBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek01LjUgMTg1TDEyOCAzODQgNzEuOCA0NTQuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwzODQgMzg0IDUwNi41IDE4NWMzLjYtNS45IDUuNS0xMi43IDUuNS0xOS42bDAtLjZjMC0yMC4zLTE2LjUtMzYuOC0zNi44LTM2LjgtNy4zIDAtMTQuNCAyLjItMjAuNCA2LjJsLTE2LjkgMTEuM2MtMTIuNyA4LjUtMjkuNiA2LjgtNDAuNC00bC0zNC4xLTM0LjFDMzU2LjEgMTAwLjEgMzQ2LjIgOTYgMzM2IDk2cy0yMC4xIDQuMS0yNy4zIDExLjNsLTMwLjEgMzAuMWMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTMwLjEtMzAuMUMxOTYuMSAxMDAuMSAxODYuMiA5NiAxNzYgOTZzLTIwLjEgNC4xLTI3LjMgMTEuM2wtMzQuMSAzNC4xYy0xMC44IDEwLjgtMjcuNyAxMi41LTQwLjQgNEw1Ny4zIDEzNC4yYy02LjEtNC0xMy4yLTYuMi0yMC40LTYuMi0yMC4zIDAtMzYuOCAxNi41LTM2LjggMzYuOGwwIC42YzAgNi45IDEuOSAxMy43IDUuNSAxOS42eiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWIiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWxsaXBzaXMtdmVydGljYWwiLAogICAgICBpY29uOiBbMTI4LCA1MTIsIFsiZWxsaXBzaXMtdiJdLCAiZjE0MiIsICJNNjQgMTQ0YTU2IDU2IDAgMSAxIDAtMTEyIDU2IDU2IDAgMSAxIDAgMTEyem0wIDIyNGMzMC45IDAgNTYgMjUuMSA1NiA1NnMtMjUuMSA1Ni01NiA1Ni01Ni0yNS4xLTU2LTU2IDI1LjEtNTYgNTYtNTZ6bTU2LTExMmMwIDMwLjktMjUuMSA1Ni01NiA1NnMtNTYtMjUuMS01Ni01NiAyNS4xLTU2IDU2LTU2IDU2IDI1LjEgNTYgNTZ6Il0KICAgIH07CiAgICBmYUVsbGlwc2lzViA9IGZhRWxsaXBzaXNWZXJ0aWNhbDsKICAgIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmZSIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTAgMjI4YTIwIDIwIDAgMSAwIDAtNDAgMjAgMjAgMCAxIDAgMCA0MHptMC0xODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDMiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xNDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgODBjMCA4LjgtNy4yIDE2LTE2IDE2cy0xNi03LjItMTYtMTZsMC04MGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYXJyb3ctdXAtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzkiLCAiTTE5Mi0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMzE4LjMgMjk5LjFsLTQ2LjMtNjIuNCAwIDI0My4zIDI3MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDU0NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MCAwIDAtMjQzLjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NUMxMTAgMTMyIDE0OS43IDExMiAxOTIgMTEyczgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42ek0yMDggNDgwbDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTI4IDMyIDB6TTU2Ni42IDEwMi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw0OTYgNzcuMyA0OTYgMjI0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ2LjctMjUuNCAyNS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w4MC04MGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhTm90RXF1YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibm90LWVxdWFsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1M2UiLCAiTTM3OC42IDgxLjhjOS44LTE0LjcgNS44LTM0LjYtOC45LTQ0LjRzLTM0LjYtNS44LTQ0LjQgOC45TDI3MC45IDEyOCAzMiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTk2LjIgMC04NS4zIDEyOC0xMTAuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY4LjIgMC0zMC44IDQ2LjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45TDE3Ny4xIDM4NCA0MTYgMzg0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTYuMiAwIDg1LjMtMTI4IDExMC45IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY4LjIgMCAzMC44LTQ2LjJ6Il0KICAgIH07CiAgICBmYVRyYWluVHJhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi10cmFtIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NjUwXSwgImU1YjQiLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDMzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMzJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LTEyMCAwIDAgNjQgNDAgMGM1MyAwIDk2IDQzIDk2IDk2bDAgMTYwYzAgMzEuMi0xNC45IDU5LTM4IDc2LjVsNjQuMyA3NmM4LjYgMTAuMSA3LjMgMjUuMy0yLjggMzMuOHMtMjUuMyA3LjMtMzMuOC0yLjhsLTc0LjYtODguMWMtMy42IC40LTcuMyAuNi0xMS4xIC42bC0xMjggMGMtMy44IDAtNy41LS4yLTExLjEtLjZMNDIuMyA1MzUuNWMtOC42IDEwLjEtMjMuNyAxMS40LTMzLjggMi44cy0xMS40LTIzLjctMi44LTMzLjhsNjQuMy03NkM0Ni45IDQxMSAzMiAzODMuMiAzMiAzNTJsMC0xNjBjMC01MyA0My05NiA5Ni05Nmw0MCAwIDAtNjQtMTIwIDAgMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0UzAgNTMuMyAwIDQwTDAgOHpNMTI4IDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMHptMzIgMTkyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTk2IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhUGxhbmVEZXBhcnR1cmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtZGVwYXJ0dXJlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NzQ3XSwgImY1YjAiLCAiTTM3MiAxNDMuOUwxNzIuNyA0MC4yYy04LTQuMS0xNy4zLTQuOC0yNS43LTEuN2wtNDEuMSAxNWMtMTAuMyAzLjctMTMuOCAxNi40LTcuMSAyNUwyMDAuMyAyMDYuNCAxMDAuMSAyNDIuOCA0MCAyMDYuMmMtNi4yLTMuOC0xMy44LTQuNS0yMC43LTIuMUwzIDIxMC4xYy05LjQgMy40LTEzLjQgMTQuNS04LjMgMjMuMWw1My42IDkxLjhjMTUuNiAyNi43IDQ4LjEgMzguNCA3Ny4xIDI3LjhsMTIuOS00LjcgMCAwIDM5OC40LTE0NWMyOS4xLTEwLjYgNDQtNDIuNyAzMy41LTcxLjhzLTQyLjctNDQtNzEuOC0zMy41TDM3MiAxNDMuOXpNMzIuMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTEyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUxMiAweiJdCiAgICB9OwogICAgZmFSaWdodFRvQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC10by1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24taW4tYWx0Il0sICJmMmY2IiwgIk0zNDUgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45TDIwMSA5NWMtNi45LTYuOS0xNy4yLTguOS0yNi4yLTUuMlMxNjAgMTAyLjMgMTYwIDExMmwwIDgwLTExMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDExMiAwIDAgODBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yczE5LjMgMS43IDI2LjItNS4yTDM0NSAyNzN6bTcgMTQzYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTI1NmMwLTUzLTQzLTk2LTk2LTk2bC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYVNpZ25JbkFsdCA9IGZhUmlnaHRUb0JyYWNrZXQ7CiAgICBmYVNkQ2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZC1jYXJkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3YzIiLCAiTTM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEwxMjUuMyAwQzEwOC4zIDAgOTIgNi43IDgwIDE4LjdMMTguNyA4MEM2LjcgOTIgMCAxMDguMyAwIDEyNS4zTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0ek0xNjAgODhsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6bTg4IDBsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjR6Il0KICAgIH07CiAgICBmYUhvdXNlQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2lyY2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGEiLCAiTTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMSAwLTI4OCAxNDQgMTQ0IDAgMSAxIDAgMjg4ek0yNjguNiA2LjVjMTIuMi05LjMgMjkuNy04LjcgNDEuMiAybDIxNy42IDIwMmMtMTAuMi0xLjctMjAuNy0yLjYtMzEuMy0yLjYtNzguNiAwLTE0Ni4xIDQ3LjItMTc1LjggMTE0LjgtNS4xLTEuOC0xMC41LTIuOC0xNi4yLTIuOGwtMzIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NiA5MSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDk2IDQ0NGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6bTAtMTQwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTYgOC44IDAgMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFTaGVrZWxTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoZWtlbC1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MiwgImlscyIsICJzaGVrZWwiLCAic2hlcWVsIiwgInNoZXFlbC1zaWduIl0sICJmMjBiIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOEwzMiAzMnpNMzIwIDQ4MGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDB6Il0KICAgIH07CiAgICBmYUlscyA9IGZhU2hla2VsU2lnbjsKICAgIGZhU2hla2VsID0gZmFTaGVrZWxTaWduOwogICAgZmFTaGVxZWwgPSBmYVNoZWtlbFNpZ247CiAgICBmYVNoZXFlbFNpZ24gPSBmYVNoZWtlbFNpZ247CiAgICBmYVJhZGlvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJhZGlvIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjUxXSwgImY4ZDciLCAiTTQ5NC44IDE1YzEyLjctMy43IDIwLTE3LjEgMTYuMy0yOS44UzQ5NC0zNC44IDQ4MS4zLTMxTDUxLjggOTQuOUM0Mi40IDk3LjYgMzMuOSAxMDIuMSAyNi42IDEwOCAxMC41IDExOS43IDAgMTM4LjYgMCAxNjBMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjE4LjUgOTYgNDk0LjggMTV6TTM2OCAyMDhhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTY0IDI0OGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw4OCAyNzJjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0wIDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDg4IDM2OGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYUhhbmREb3RzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhbGxlcmdpZXMiXSwgImY0NjEiLCAiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4ek0yMDAgMzUyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC01NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTQwIDg4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bS04OCAyNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUFsbGVyZ2llcyA9IGZhSGFuZERvdHM7CiAgICBmYUJvb2tTa3VsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXNrdWxsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvb2stZGVhZCJdLCAiZjZiNyIsICJNOTYgNTEybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtNjYuN2MxOC42LTYuNiAzMi0yNC40IDMyLTQ1LjNsMC0yODhjMC0yNi41LTIxLjUtNDgtNDgtNDhMOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTI3MiAxNjMuMmwwIDEyLjhjMCA4LjgtNy4yIDE2LTE2IDE2bC02NCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0xMi44Yy0xOS40LTExLjctMzItMzAuMy0zMi01MS4yIDAtMzUuMyAzNS44LTY0IDgwLTY0czgwIDI4LjcgODAgNjRjMCAyMC45LTEyLjYgMzkuNS0zMiA1MS4yek0yMDggMTEyYTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTQ4IDE2YTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptNzQuMiA5NS43YzQuNiAxMC4xIC4xIDIxLjktOS45IDI2LjVsLTQ3LjkgMjEuOCA0Ny45IDIxLjhjMTAuMSA0LjYgMTQuNSAxNi40IDkuOSAyNi41cy0xNi40IDE0LjUtMjYuNSA5LjlMMjI0IDI5NCAxNDQuMyAzMzAuMmMtMTAuMSA0LjYtMjEuOSAuMS0yNi41LTkuOXMtLjEtMjEuOSA5LjktMjYuNWw0Ny45LTIxLjgtNDcuOS0yMS44Yy0xMC4xLTQuNi0xNC41LTE2LjQtOS45LTI2LjVzMTYuNC0xNC41IDI2LjUtOS45TDIyNCAyNTAgMzAzLjcgMjEzLjhjMTAuMS00LjYgMjEuOS0uMSAyNi41IDkuOXoiXQogICAgfTsKICAgIGZhQm9va0RlYWQgPSBmYUJvb2tTa3VsbDsKICAgIGZhVW5sb2NrS2V5aG9sZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bmxvY2sta2V5aG9sZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJ1bmxvY2stYWx0Il0sICJmMTNlIiwgIk0xOTIgMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjQgMTkyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NGwwLTY0YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYzLjUgMCAxMTYuMSA0Ni4xIDEyNi4yIDEwNi43IDIuOSAxNy40LTguOCAzMy45LTI2LjMgMzYuOXMtMzMuOS04LjgtMzYuOS0yNi4zQzI1MCA1NS4xIDIyMy43IDMyIDE5MiAzMnptNDAgMzI4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDgwIDB6Il0KICAgIH07CiAgICBmYVVubG9ja0FsdCA9IGZhVW5sb2NrS2V5aG9sZTsKICAgIGZhRmlsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1hcnJvdy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLXVwbG9hZCJdLCAiZjU3NCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTIwOSAyNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC02NCA2NGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDIzLTIzIDAgODYuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODYuMSAyMyAyM2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY0LTY0eiJdCiAgICB9OwogICAgZmFGaWxlVXBsb2FkID0gZmFGaWxlQXJyb3dVcDsKICAgIGZhRmFjZUdyaW5UZWFyczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXRlYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTE0LCAiZ3Jpbi10ZWFycyJdLCAiZjU4OCIsICJNNTU0LjggMjAzLjRsMTYuMyAyLjNDNTQ3LjcgODguNCA0NDQuMiAwIDMyMCAwUzkyLjMgODguNCA2OC45IDIwNS43bDE2LjMtMi4zYzM3LTUuMyA2OC42IDI2LjQgNjMuNCA2My40bC02LjcgNDYuN2MtNC4xIDI5LTIxLjYgNTMuMi00NS44IDY2LjggNDMuNyA3OC41IDEyNy42IDEzMS43IDIyMy44IDEzMS43czE4MC4xLTUzLjEgMjIzLjgtMTMxLjdjLTI0LjEtMTMuNS00MS42LTM3LjgtNDUuOC02Ni44bC02LjctNDYuN2MtNS4zLTM3IDI2LjQtNjguNiA2My40LTYzLjR6TTQ3MC4zIDMyNi45QzQ0Ny45IDM4OC4yIDM4OS4xIDQzMiAzMjAgNDMyUzE5Mi4xIDM4OC4yIDE2OS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjFjMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xek0yMTIgMjA4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6bTE4OC0yOGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHpNNjQwIDMwMC42YzAtMjUuNi0xOC44LTQ3LjMtNDQuMS01MC45TDU0OS4xIDI0M2MtMTAuNi0xLjUtMTkuNiA3LjUtMTguMSAxOC4xbDYuNyA0Ni43YzMuNiAyNS4zIDI1LjMgNDQuMSA1MC45IDQ0LjEgMjguNCAwIDUxLjQtMjMgNTEuNC01MS40em0tNjQwIDBDMCAzMjkgMjMgMzUyIDUxLjQgMzUyIDc3IDM1MiA5OC43IDMzMy4yIDEwMi4zIDMwNy45bDYuNy00Ni43YzEuNS0xMC42LTcuNS0xOS42LTE4LjEtMTguMWwtNDYuNyA2LjdDMTguOCAyNTMuMyAwIDI3NSAwIDMwMC42eiJdCiAgICB9OwogICAgZmFHcmluVGVhcnMyID0gZmFGYWNlR3JpblRlYXJzMjsKICAgIGZhUGVuVG9TcXVhcmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi10by1zcXVhcmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZWRpdCJdLCAiZjA0NCIsICJNNDcxLjYgMjEuN2MtMjEuOS0yMS45LTU3LjMtMjEuOS03OS4yIDBMMzY4IDQ2LjEgNDY1LjkgMTQ0IDQ5MC4zIDExOS42YzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ3MS42IDIxLjd6bS0yOTkuMiAyMjBjLTYuMSA2LjEtMTAuOCAxMy42LTEzLjUgMjEuOWwtMjkuNiA4OC44Yy0yLjkgOC42LS42IDE4LjEgNS44IDI0LjZzMTUuOSA4LjcgMjQuNiA1LjhsODguOC0yOS42YzguMi0yLjcgMTUuNy03LjQgMjEuOS0xMy41TDQzMiAxNzcuOSAzMzQuMSA4MCAxNzIuNCAyNDEuN3pNOTYgNjRDNDMgNjQgMCAxMDcgMCAxNjBMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NmwyNTYgMGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0NDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgNjR6Il0KICAgIH07CiAgICBmYUVkaXQyID0gZmFQZW5Ub1NxdWFyZTI7CiAgICBmYUVhcnRoRXVyb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLWV1cm9wZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJnbG9iZS1ldXJvcGUiXSwgImY3YTIiLCAiTTI1Ni4yIDQ4YzExNC44IC4xIDIwNy44IDkzLjIgMjA3LjggMjA4IDAgMjIuMS0zLjQgNDMuNC05LjggNjMuNC0yIC40LTQuMSAuNi02LjIgLjZsLTIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC01MC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTYtNy4yLTE2LTE2LTE2bC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2cy03LjIgMTYtMTYgMTZsLTI1LjQgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmw3MC4xLTcwLjFjMi4xLTIuMSAzLjMtNSAzLjMtOCAwLTYuMi01LjEtMTEuMy0xMS4zLTExLjNsLTE0LjEgMGMtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjYgMC02IDIuNC0xMS44IDYuNi0xNmwyMy4xLTIzLjFjLjgtLjggMS42LTEuNSAyLjUtMi4yek00MzguNCAzNTYuMWMtMzIuOCA1OS42LTkzLjkgMTAxLjQtMTY1LjIgMTA3LjItLjctMi4zLTEuMS00LjgtMS4xLTcuMyAwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMjYuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMjkuMy0yOS4zYy02LTYtOS40LTE0LjEtOS40LTIyLjZsMC02Ni43YzAtMTcuNyAxNC4zLTMyIDMyLTMybDk4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyOS4zIDI5LjNjNiA2IDE0LjEgOS40IDIyLjYgOS40bDUuNSAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40bDE2IDE2YzQuMiA0LjIgMTAgNi42IDE2IDYuNiA0LjggMCA5LjMgMS41IDEzIDQuMXpNMjU2IDUxMmwyNi4yLTEuM2MtOC42IC45LTE3LjMgMS4zLTI2LjIgMS4zem0yNi4yLTEuM0M0MTEuMyA0OTcuNiA1MTIgMzg4LjYgNTEyIDI1NiA1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMGwwIDBDMTE0LjYgMCAwIDExNC42IDAgMjU2IDAgMzgzLjUgOTMuMiA0ODkuMyAyMTUuMyA1MDguOCAyMjguNSA1MTAuOSAyNDIuMSA1MTIgMjU2IDUxMnpNMTg3LjMgMTIzLjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhR2xvYmVFdXJvcGUgPSBmYUVhcnRoRXVyb3BlOwogICAgZmFGYWNlR3JpbkJlYW1Td2VhdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLWJlYW0tc3dlYXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg1MTcsICJncmluLWJlYW0tc3dlYXQiXSwgImY1ODMiLCAiTTU0Ni4yLS4xYzE0LjcgMTcuOCAyOS44IDQwLjEgMjkuOCA2NC4xIDAgMzYuNC0yNy42IDY0LTY0IDY0cy02NC0yNy42LTY0LTY0YzAtMjQgMTUuMi00Ni4zIDI5LjgtNjQuMSA4LjgtMTAuNyAxOC41LTIwLjggMjktMzAgMy0yLjYgNy40LTIuNiAxMC40IDAgMTAuNSA5LjEgMjAuMSAxOS4zIDI5IDMwek0yODggMGM0Mi41IDAgODIuNiAxMC40IDExNy44IDI4LjctMy42IDEwLjktNS44IDIyLjctNS44IDM1LjMgMCA2Mi45IDQ5LjEgMTEyIDExMiAxMTIgNi40IDAgMTIuNy0uNSAxOC44LTEuNSA4LjYgMjUuNiAxMy4yIDUzIDEzLjIgODEuNSAwIDE0MS40LTExNC42IDI1Ni0yNTYgMjU2UzMyIDM5Ny40IDMyIDI1NiAxNDYuNiAwIDI4OCAwek00MTguNyAzMDguOUMzNzkuNSAzMjEuMSAzMzUuMSAzMjggMjg4IDMyOHMtOTEuNS02LjktMTMwLjctMTkuMWMtMTEuOS0zLjctMjMuOSA2LjMtMTkuNiAxOC4xIDIyLjQgNjEuMyA4MS4zIDEwNS4xIDE1MC4zIDEwNS4xczEyNy45LTQzLjggMTUwLjMtMTA1LjFjNC4zLTExLjgtNy43LTIxLjgtMTkuNi0xOC4xek0yMDggMTgwYzE1LjUgMCAyOCAxMi41IDI4IDI4bDAgOGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLThjMC0zNy42LTMwLjQtNjgtNjgtNjhzLTY4IDMwLjQtNjggNjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTE1LjUgMTIuNS0yOCAyOC0yOHptMTMyIDI4YzAtMTUuNSAxMi41LTI4IDI4LTI4czI4IDEyLjUgMjggMjhsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTM3LjYtMzAuNC02OC02OC02OHMtNjggMzAuNC02OCA2OGwwIDhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC04eiJdCiAgICB9OwogICAgZmFHcmluQmVhbVN3ZWF0MiA9IGZhRmFjZUdyaW5CZWFtU3dlYXQyOwogICAgZmFDaXJjbGVIYWxmU3Ryb2tlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk2ODAsICJhZGp1c3QiXSwgImYwNDIiLCAiTTQ0OCAyNTZjMC0xMDYtODYtMTkyLTE5Mi0xOTJsMCAzODRjMTA2IDAgMTkyLTg2IDE5Mi0xOTJ6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYUFkanVzdCA9IGZhQ2lyY2xlSGFsZlN0cm9rZTsKICAgIGZhUGVyc29uTWlsaXRhcnlUb1BlcnNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktdG8tcGVyc29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGMiLCAiTTcxIDEyLjVjLTguNiAxLTE1IDguMi0xNSAxNi44IDAgOS4zIDcuNSAxNi44IDE2LjcgMTYuOWwxMTEuNCAwYzguOC0uMSAxNS45LTcuMiAxNS45LTE2TDIwMCAxNmMwLTkuNS04LjMtMTctMTcuOC0xNS45TDcxIDEyLjV6TTE4OS41IDc4LjFsLTEyMi45IDBjLTEuNiA1LjctMi41IDExLjctMi41IDE3LjkgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTYuMi0uOS0xMi4yLTIuNS0xNy45ek0zMiAyNTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxLjggMCAzLjUtLjEgNS4yLS40TDUzIDIwOC42QzQwLjEgMjIwLjMgMzIgMjM3LjIgMzIgMjU2em0xOTAuMiA0Mi41YzEuMS0zLjMgMS44LTYuOCAxLjgtMTAuNWwwLTMyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwYy0zLjcgMC03LjQgLjMtMTAuOSAuOUwyMjIuMiAyOTguNXpNMzg0IDE2MGE2NCA2NCAwIDEgMCAwLTEyOCA2NCA2NCAwIDEgMCAwIDEyOHptLTMyIDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDB6TTIxNS44IDQ1MC4xYzUuMi00LjYgOC4yLTExLjEgOC4yLTE4LjFzLTMtMTMuNS04LjItMTguMWwtNjQtNTZjLTcuMS02LjItMTcuMS03LjctMjUuNy0zLjhTMTEyIDM2Ni42IDExMiAzNzZsMCAzMi04OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDg4IDAgMCAzMmMwIDkuNCA1LjUgMTggMTQuMSAyMS45czE4LjYgMi40IDI1LjctMy44bDY0LTU2ek0yODggNDMxLjljMCA2LjkgMyAxMy41IDguMSAxOC4xbDY0IDU2LjRjNy4xIDYuMiAxNy4xIDcuOCAyNS43IDMuOVM0MDAgNDk3LjggNDAwIDQ4OC40bDAtMzIuNCA4OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04OCAwIDAtMzJjMC05LjQtNS41LTE4LTE0LjEtMjEuOXMtMTguNi0yLjQtMjUuNyAzLjhsLTY0IDU2Yy01LjIgNC41LTguMiAxMS4xLTguMiAxOHoiXQogICAgfTsKICAgIGZhVGFibGVDZWxsc0NvbHVtbkxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtY29sdW1uLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3OCIsICJNMjU2IDIyNGwwIDE5MiA2NCAwIDAtMTkyLTY0IDB6bTI1Ni03OWMtNDYuNyA1LjgtODUuNiAzNi44LTEwMi43IDc5bC0yNS4zIDAgMCA5MC44Yy0xMC4xIDE1LjItMTYgMzMuNC0xNiA1My4xbDAgOTZjMCA1LjUgLjUgMTAuOSAxLjMgMTYuMUwxMjggNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEw2NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDQ5ek0xMjggMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptNDMyIDQ4LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgMzY4YzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFUcnVja0ZpZWxkVW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stZmllbGQtdW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU4ZSIsICJNOTYgMzJDNjAuNyAzMiAzMiA2MC43IDMyIDk2bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMCA0OGMwIDIxLjEgMTMuNyAzOS4xIDMyLjYgNDUuNS0uNCAzLjQtLjYgNy0uNiAxMC41IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTQ0LjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsLjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yNC43IDAtMS43LTQuMi00My44LTEwNi4zYy0xMi4zLTMwLTQxLjYtNDkuNS03NC00OS41bC00MC40IDBDMzY0LjQgNDQuOSAzNDMuNyAzMiAzMjAgMzJMOTYgMzJ6TTM4NCAyMjRsMC05NiAzMS45IDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlsMzUuNCA4Ni4xLTgyLjEgMHpNMTUyIDM1MmE0MCA0MCAwIDEgMSAwIDgwIDQwIDQwIDAgMSAxIDAtODB6bTI4MCA0MGE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0yNTYuNiAxMzIuOWwyNy40IDQxIDAtMjkuOWMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDk2YzAgOC44LTUuOCAxNi42LTE0LjIgMTkuMXMtMTcuNS0uNy0yMi40LThsLTI3LjQtNDEgMCAyOS45YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTk2YzAtOC44IDUuOC0xNi42IDE0LjItMTkuMXMxNy41IC43IDIyLjQgOHpNMTMyIDE0NGwwIDY0YzAgNi42IDUuNCAxMiAxMiAxMnMxMi01LjQgMTItMTJsMC02NGMwLTExIDktMjAgMjAtMjBzMjAgOSAyMCAyMGwwIDY0YzAgMjguNy0yMy4zIDUyLTUyIDUycy01Mi0yMy4zLTUyLTUybDAtNjRjMC0xMSA5LTIwIDIwLTIwczIwIDkgMjAgMjB6Il0KICAgIH07CiAgICBmYUNsb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzOSwgImNsb2NrLWZvdXIiXSwgImYwMTciLCAiTTI1NiAwYTI1NiAyNTYgMCAxIDEgMCA1MTIgMjU2IDI1NiAwIDEgMSAwLTUxMnpNMjMyIDEyMGwwIDEzNmMwIDggNCAxNS41IDEwLjcgMjBsOTYgNjRjMTEgNy40IDI1LjkgNC40IDMzLjMtNi43czQuNC0yNS45LTYuNy0zMy4zTDI4MCAyNDMuMiAyODAgMTIwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFDbG9ja0ZvdXIyID0gZmFDbG9jazI7CiAgICBmYUJvb2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIxMl0sICJmMDJkIiwgIk0zODQgNTEyTDk2IDUxMmMtNTMgMC05Ni00My05Ni05NkwwIDk2QzAgNDMgNDMgMCA5NiAwTDQwMCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjAuOS0xMy40IDM4LjctMzIgNDUuM2wwIDY2LjdjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6TTk2IDM4NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMCAwLTY0LTI1NiAwem0zMi0yMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQgNzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hXaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGF1Z2gtd2luayJdLCAiZjU5YyIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTY0IDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwYzAtMzMuMSAyNi45LTYwIDYwLTYwbDE2IDBjMzMuMSAwIDYwIDI2LjkgNjAgNjAgMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwLTktMjAtMjAtMjBsLTE2IDBjLTExIDAtMjAgOS0yMCAyMHoiXQogICAgfTsKICAgIGZhTGF1Z2hXaW5rMiA9IGZhRmFjZUxhdWdoV2luazI7CiAgICBmYUNsb3VkTWVhdGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtbWVhdGJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjczYiIsICJNMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwyNi45IDBjMy41LTEyLjEgMTAuMS0yMy4zIDE5LjItMzIuNGwxLjQtMS40YzE1LTE1IDM1LjMtMjIuOSA1Ni4xLTIyLjIgMTQuMi0xNS4xIDM0LjItMjMuOSA1NS40LTIzLjlsMiAwYzIxLjEgMCA0MS4xIDguOCA1NS40IDIzLjkgMjAuOC0uNiA0MS4xIDcuMyA1Ni4xIDIyLjJsMS40IDEuNGM5LjIgOS4yIDE1LjcgMjAuNCAxOS4yIDMyLjRsMjYuOSAwYzUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0uNSAwLTEuMSAwLTEuNiAwIDEuMS01LjIgMS42LTEwLjUgMS42LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI0LjMgMC00Ni4xIDEwLjktNjAuOCAyOC0xOC43LTM1LjctNTYuMS02MC05OS4yLTYwLTYxLjkgMC0xMTIgNTAuMS0xMTIgMTEyIDAgNy4xIC43IDE0LjEgMS45IDIwLjgtMzguMyAxMi42LTY1LjkgNDguNy02NS45IDkxLjJ6TTE1Ni41IDQyNC4zYzkuNSA2LjMgMTQuMiAxNy43IDExLjkgMjguOC0xLjggOS4yIDEgMTguNyA3LjcgMjUuM2wxLjQgMS40YzYuNiA2LjYgMTYuMSA5LjUgMjUuMyA3LjcgMTEuMS0yLjIgMjIuNSAyLjUgMjguOCAxMS45IDUuMiA3LjggMTQgMTIuNSAyMy4zIDEyLjVsMiAwYzkuNCAwIDE4LjEtNC43IDIzLjMtMTIuNSA2LjMtOS41IDE3LjctMTQuMiAyOC44LTExLjkgOS4yIDEuOCAxOC43LTEgMjUuMy03LjdsMS40LTEuNGM2LjYtNi42IDkuNS0xNi4xIDcuNy0yNS4zLTIuMi0xMS4xIDIuNS0yMi41IDExLjktMjguOCA3LjgtNS4yIDEyLjUtMTQgMTIuNS0yMy4zbDAtMmMwLTkuNC00LjctMTguMS0xMi41LTIzLjMtOS41LTYuMy0xNC4yLTE3LjctMTEuOS0yOC44IDEuOC05LjItMS0xOC43LTcuNy0yNS4zbC0xLjQtMS40Yy02LjYtNi42LTE2LjEtOS41LTI1LjMtNy43LTExLjEgMi4yLTIyLjUtMi41LTI4LjgtMTEuOS01LjItNy44LTE0LTEyLjUtMjMuMy0xMi41bC0yIDBjLTkuNCAwLTE4LjEgNC43LTIzLjMgMTIuNS02LjMgOS41LTE3LjcgMTQuMi0yOC44IDExLjktOS4yLTEuOC0xOC43IDEtMjUuMyA3LjdsLTEuNCAxLjRjLTYuNiA2LjYtOS41IDE2LjEtNy43IDI1LjMgMi4yIDExLjEtMi41IDIyLjUtMTEuOSAyOC44LTcuOCA1LjItMTIuNSAxNC0xMi41IDIzLjNsMCAyYzAgOS40IDQuNyAxOC4xIDEyLjUgMjMuM3pNNDggNDQ4YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptNDE2IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFDaGFydEFyZWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtYXJlYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJhcmVhLWNoYXJ0Il0sICJmMWZlIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyek0yNDAgOTZjNi43IDAgMTMuMSAyLjggMTcuNyA3LjhMMzI4LjggMTgxLjMgMzc1IDEzNWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw2NCA2NGM0LjUgNC41IDcgMTAuNiA3IDE3bDAgMTEyYzAgMTMuMy0xMC43IDI0LTI0IDI0bC0zMDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xMTJjMC02IDIuMy0xMS44IDYuMy0xNi4ybDg4LTk2YzQuNS01IDExLTcuOCAxNy43LTcuOHoiXQogICAgfTsKICAgIGZhQXJlYUNoYXJ0ID0gZmFDaGFydEFyZWE7CiAgICBmYVJ1cGlhaFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVwaWFoLXNpZ24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIzZCIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw4MCAwYzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgNTQuMy0zMCAxMDEuNS03NC40IDEyNi4xbDQxIDEzNi43YzUuMSAxNi45LTQuNSAzNC44LTIxLjUgMzkuOHMtMzQuOC00LjUtMzkuOC0yMS41TDEyMC4xIDMxOS44Yy0yLjcgLjEtNS40IC4yLTguMSAuMmwtNDggMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjR6TTY0IDI1Nmw0OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwcy0zNS44LTgwLTgwLTgwbC00OCAwIDAgMTYwem0yNTYtMzJsODAgMGM2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NjEuOSA0NDggNDAwIDQ0OGwtNDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMyem04MCAxNjBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA5NiA0OCAweiJdCiAgICB9OwogICAgZmFUZXh0V2lkdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGV4dC13aWR0aCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM1IiwgIk00MCAwQzE3LjkgMCAwIDE3LjkgMCA0MEwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxMjggMCAwIDE2MC0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMTYwIDEyOCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDB6bTc4LjYgNDA2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05LjQtOS40IDIyOS41IDAtOS40IDkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDkuNCA5LjQtMjI5LjUgMCA5LjQtOS40eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2F0ZWxsaXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzUyXSwgImY3YmYiLCAiTTE5OSA3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDg5LjQgODkuNCA1NS01NWMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw0OCA0OGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNTUgNTUgODkuNCA4OS40YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC05NiA5NmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBsLTg5LjQtODkuNC0xNS41IDE1LjVjMTEuNCAyNC42IDE3LjggNTIgMTcuOCA4MC45IDAgMzEuNy03LjcgNjEuNS0yMS4yIDg3LjgtNC43IDktMTYuNyAxMC4zLTIzLjggMy4xbC05Ni4zLTk2LjMtNjAgNjBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDYwLTYwLTk2LjMtOTYuM2MtNy4yLTcuMi01LjktMTkuMiAzLjEtMjMuOCAyNi4zLTEzLjYgNTYuMi0yMS4yIDg3LjgtMjEuMiAyOC45IDAgNTYuMyA2LjQgODAuOSAxNy44TDE5Mi40IDIyNi4zIDEwMyAxMzdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45TDE5OSA3em0xNyA1MC45bC02Mi4xIDYyLjEgNzIuNCA3Mi40IDYyLjEtNjIuMS03Mi40LTcyLjR6TTM5MiAzNTguMWw2Mi4xLTYyLjEtNzIuNC03Mi40LTYyLjEgNjIuMSA3Mi40IDcyLjR6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc01pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25pZnlpbmctZ2xhc3MtbWludXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLW1pbnVzIl0sICJmMDEwIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTEzNiAxODRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFTZWFyY2hNaW51cyA9IGZhTWFnbmlmeWluZ0dsYXNzTWludXM7CiAgICBmYVBlb3BsZUdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1ncm91cCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTMzIiwgIk0yNTYgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptOTYgMzEyYzAgMjUtMTIuNyA0Ny0zMiA1OS45bDAgOTIuMWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05Mi4xQzE3Mi43IDM1OSAxNjAgMzM3IDE2MCAzMTJsMC00MGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNDB6TTk2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0xNiAyNDBsMCAzMmMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCA3NS4zYzAgMS4yIDAgMi41IC4xIDMuNy04LjUgNy42LTE5LjcgMTIuMy0zMi4xIDEyLjNsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNTYuNkMxMi45IDM2NC40IDAgMzQzLjcgMCAzMjBsMC0zMmMwLTUzIDQzLTk2IDk2LTk2IDEyLjcgMCAyNC44IDIuNSAzNS45IDYuOS0xMi42IDIxLjQtMTkuOSA0Ni40LTE5LjkgNzMuMXpNMzY4IDQ2NGwwLTc1LjNjMTkuOS0yMi41IDMyLTUyLjIgMzItODQuN2wwLTMyYzAtMjYuNy03LjMtNTEuNi0xOS45LTczLjEgMTEuMS00LjUgMjMuMi02LjkgMzUuOS02LjkgNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDU2LjZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTEyLjMgMC0yMy42LTQuNi0zMi4xLTEyLjMgMC0xLjIgLjEtMi41IC4xLTMuN3pNNDE2IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyeiJdCiAgICB9OwogICAgZmFTcXVhcmVCaW5hcnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWJpbmFyeSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNjliIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTQ0IDRjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgNDhjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMzIgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTQ4YzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0zMiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4em0xNDAtNDRjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMHpNMTMyIDI5NmMwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNzYuNGMwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTk2YzAtMTEtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIwem05NiAyNGwwIDQ4YzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDMyIDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC00OGMwLTI0LjMtMTkuNy00NC00NC00NGwtMzIgMGMtMjQuMyAwLTQ0IDE5LjctNDQgNDR6bTQ0LTRsMzIgMGMyLjIgMCA0IDEuOCA0IDRsMCA0OGMwIDIuMi0xLjggNC00IDRsLTMyIDBjLTIuMiAwLTQtMS44LTQtNGwwLTQ4YzAtMi4yIDEuOC00IDQtNHoiXQogICAgfTsKICAgIGZhTWFza3NUaGVhdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hc2tzLXRoZWF0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MTcsICJ0aGVhdGVyLW1hc2tzIl0sICJmNjMwIiwgIk0tNSAxMThMMjMuNSAyNzkuN2MxNCA3OS41IDc2LjMgMTQxLjggMTU1LjggMTU1LjhsMTIuNyAyLjJjLTE2LjUtMjguNi0yNy4xLTYwLjctMzAuNi05NC41bC0yNC4xIDQuM2MtOS43IDEuNy0xOC44LTUuOC0xNi45LTE1LjUgNC44LTI0LjcgMTkuMS00Ni42IDM5LjctNjAuOWwwLTc0LjZjLTEuNCAuOC0zIDEuMy00LjcgMS42bC02MyAxMS4xYy04LjcgMS41LTE3LjMtNC40LTE1LjktMTMuMSAzLjEtMTkuNiAxOC40LTM2IDM5LjEtMzkuNyAxNy4yLTMgMzMuOSAzLjUgNDQuNiAxNS44bDAtMjIuN2MwLTIyLjUgNi45LTUyLjQgMzIuMy03My40IDI2LTIxLjUgNjcuNy00My45IDEyNC45LTU0LjItMzAuNS0xNi4zLTg2LjMtMzItMTYzLjgtMTguNC04MC4zIDE0LjItMTI4IDUwLjEtMTUwLjEgNzYuMS05IDEwLjUtMTAuOCAyNC45LTguNCAzOC41ek0yMDggMTM4LjdsMCAxNzQuOGMwIDgwLjcgNTAuNSAxNTIuOSAxMjYuNCAxODAuNEwzNjIuMSA1MDRjMTQuMSA1LjEgMjkuNiA1LjEgNDMuNyAwTDQzMy42IDQ5NEM1MDkuNSA0NjYuNCA1NjAgMzk0LjMgNTYwIDMxMy41bDAtMTc0LjhjMC02LjktMi4xLTEzLjgtNy0xOC42LTIyLjYtMjIuNS03OC4yLTU2LTE2OS01NnMtMTQ2LjQgMzMuNi0xNjkgNTZjLTQuOSA0LjktNyAxMS43LTcgMTguNnptNjYuMSAxODcuMWMtMS40LTcgNy0xMSAxMi43LTYuNiAyNi45IDIwLjYgNjAuNiAzMi45IDk3LjIgMzIuOXM3MC4yLTEyLjMgOTcuMi0zMi45YzUuNy00LjQgMTQuMS0uNCAxMi43IDYuNi0xMC4xIDUxLjQtNTUuNSA5MC4zLTEwOS45IDkwLjNzLTk5LjgtMzguOC0xMDkuOS05MC4zem0uNS0xMDEuNUMyODEuMiAyMDUuNSAyOTkgMTkyIDMyMCAxOTJzMzguOSAxMy41IDQ1LjQgMzIuM2MyLjkgOC40LTQuNSAxNS43LTEzLjQgMTUuN2wtNjQgMGMtOC44IDAtMTYuMy03LjQtMTMuNC0xNS43ek00ODAgMjQwbC02NCAwYy04LjggMC0xNi4zLTcuNC0xMy40LTE1LjcgNi41LTE4LjggMjQuNC0zMi4zIDQ1LjQtMzIuM3MzOC45IDEzLjUgNDUuNCAzMi4zYzIuOSA4LjQtNC41IDE1LjctMTMuNCAxNS43eiJdCiAgICB9OwogICAgZmFUaGVhdGVyTWFza3MgPSBmYU1hc2tzVGhlYXRlcjsKICAgIGZhQ2FydFBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1wbHVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYyMTciLCAiTTAgOEMwLTUuMyAxMC43LTE2IDI0LTE2bDQ1LjMgMGMyNy4xIDAgNTAuMyAxOS40IDU1LjEgNDZsLjQgMiA0MTIuNyAwYzIwIDAgMzUuMSAxOC4yIDMxLjQgMzcuOUw1MzcuOCAyMzUuOGMtNS43IDMwLjMtMzIuMSA1Mi4yLTYyLjkgNTIuMmwtMzAzLjYgMCA1LjEgMjguM2MyLjEgMTEuNCAxMiAxOS43IDIzLjYgMTkuN0w0NTYgMzM2YzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNTUuOSAwYy0zNC44IDAtNjQuNi0yNC45LTcwLjgtNTkuMUw3Ny4yIDM4LjZjLS43LTMuOC00LTYuNi03LjktNi42TDI0IDMyQzEwLjcgMzIgMCAyMS4zIDAgOHpNMTYwIDQ2NGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem0yMjQgMGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0zMzYgNzguNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMy42LTMzLjYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMy42IDAgMCAzMy42YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMy42IDMzLjYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzMuNiAwIDAtMzMuNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtYXNsLWludGVycHJldGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJhbWVyaWNhbi1zaWduLWxhbmd1YWdlLWludGVycHJldGluZyIsICJhc2wtaW50ZXJwcmV0aW5nIiwgImhhbmRzLWFtZXJpY2FuLXNpZ24tbGFuZ3VhZ2UtaW50ZXJwcmV0aW5nIl0sICJmMmEzIiwgIk0xNTYuNiA0Ni4zYzcuOS0xNS44IDEuNS0zNS0xNC4zLTQyLjlzLTM1LTEuNS00Mi45IDE0LjNMMTMuNSAxODkuNEM0LjYgMjA3LjIgMCAyMjYuOCAwIDI0Ni43TDAgMjU2YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4bDgwIDAgMC0uM2MzNS4yLTIuNyA2NS40LTIyLjggODIuMS01MS43IDguOC0xNS4zIDMuNi0zNC45LTExLjctNDMuN3MtMzQuOS0zLjYtNDMuNyAxMS43Yy03IDEyLTE5LjkgMjAtMzQuNyAyMC0yMi4xIDAtNDAtMTcuOS00MC00MHMxNy45LTQwIDQwLTQwYzE0LjggMCAyNy43IDggMzQuNyAyMCA4LjggMTUuMyAyOC40IDIwLjUgNDMuNyAxMS43czIwLjUtMjguNCAxMS43LTQzLjdjLTEyLjgtMjIuMS0zMy42LTM5LjEtNTguNC00Ny4xbDgwLjgtMjJjMTctNC42IDI3LjEtMjIuMiAyMi41LTM5LjNzLTIyLjItMjcuMS0zOS4zLTIyLjVsLTEwMC43IDI3LjUgODEuNi02OGMxMy42LTExLjMgMTUuNC0zMS41IDQuMS00NS4xUzI0OS4xLTMuOSAyMzUuNSA3LjRsLTEwMS45IDg0LjkgMjMtNDZ6TTQ4My40IDQ2NS43Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsODUuOS0xNzEuN2M4LjktMTcuOCAxMy41LTM3LjQgMTMuNS01Ny4ybDAtOS4zYzAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4bC04MCAwIDAgLjNjLTM1LjIgMi43LTY1LjQgMjIuOC04Mi4xIDUxLjctOC45IDE1LjMtMy42IDM0LjkgMTEuNyA0My43czM0LjkgMy42IDQzLjctMTEuN2M3LTEyIDE5LjktMjAgMzQuNy0yMCAyMi4xIDAgNDAgMTcuOSA0MCA0MHMtMTcuOSA0MC00MCA0MGMtMTQuOCAwLTI3LjctOC0zNC43LTIwLTguOS0xNS4zLTI4LjQtMjAuNS00My43LTExLjdzLTIwLjUgMjguNC0xMS43IDQzLjdjMTIuOCAyMi4xIDMzLjYgMzkuMSA1OC40IDQ3LjFsLTgwLjggMjJjLTE3LjEgNC42LTI3LjEgMjIuMi0yMi41IDM5LjNzMjIuMiAyNy4xIDM5LjMgMjIuNWwxMDAuNy0yNy41LTgxLjYgNjhjLTEzLjYgMTEuMy0xNS40IDMxLjUtNC4xIDQ1LjFzMzEuNSAxNS40IDQ1LjEgNC4xbDEwMS45LTg0LjktMjMgNDZ6Il0KICAgIH07CiAgICBmYUFtZXJpY2FuU2lnbkxhbmd1YWdlSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhQXNsSW50ZXJwcmV0aW5nID0gZmFIYW5kc0FzbEludGVycHJldGluZzsKICAgIGZhSGFuZHNBbWVyaWNhblNpZ25MYW5ndWFnZUludGVycHJldGluZyA9IGZhSGFuZHNBc2xJbnRlcnByZXRpbmc7CiAgICBmYVRhYmxlQ2VsbHNSb3dVbmxvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LXVubG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNjkxIiwgIk0yNTYgMjI0bDAgMTkyIDY0IDAgMC0xOTItNjQgMHptMjU2LTc5Yy00Ni43IDUuOC04NS42IDM2LjgtMTAyLjcgNzlsLTI1LjMgMCAwIDkwLjhjLTEwLjEgMTUuMi0xNiAzMy40LTE2IDUzLjFsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDEyOCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDl6TTEyOCAyMjRsMCAxOTIgNjQgMCAwLTE5Mi02NCAwem00MzIgNDhjLS4xLTE3LjYtMTQuNC0zMS45LTMyLTMxLjktMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA0NC4yIDAgNzkuOSAzNS44IDgwIDc5LjlsLTQ4IDB6Il0KICAgIH07CiAgICBmYVJvY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2NrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjEzNSIsICJNMTI4IDMyMEwyNC41IDMyMGMtMjQuOSAwLTQwLjItMjcuMS0yNy40LTQ4LjVMNTAgMTgzLjNDNTguNyAxNjguOCA3NC4zIDE2MCA5MS4yIDE2MGw5NSAwYzc2LjEtMTI4LjkgMTg5LjYtMTM1LjQgMjY1LjUtMTI0LjMgMTIuOCAxLjkgMjIuOCAxMS45IDI0LjYgMjQuNiAxMS4xIDc1LjkgNC42IDE4OS40LTEyNC4zIDI2NS41bDAgOTVjMCAxNi45LTguOCAzMi41LTIzLjMgNDEuMmwtODguMiA1Mi45Yy0yMS4zIDEyLjgtNDguNS0yLjYtNDguNS0yNy40TDE5MiAzODRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLS4xIDB6TTQwMCAxNjBhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2hyaW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNocmltcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTQyNF0sICJlNDQ4IiwgIk03MiAzMkMzMi4yIDMyIDAgNjQuMiAwIDEwNCAwIDE0MS45IDI5LjMgMTcyLjkgNjYuNCAxNzUuOCA3Ny42IDI1Ny4yIDE0Ny40IDMyMCAyMzIgMzIwbDU2IDAgMC0xOTItMjE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0UzU4LjcgODAgNzIgODBsMzg0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMNzIgMzJ6TTIyNCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNzIgMCAwLTcyLjItNjQuMS0yMi40Yy0xMi41LTQuNC0yNi4yIDIuMi0zMC42IDE0LjdzMi4yIDI2LjIgMTQuNyAzMC42bDQuNSAxLjZDMjMzIDQzMy45IDIyNCA0NDMuOSAyMjQgNDU2em0xMjggMjMuM2MzNi40LTMuMyA2OS41LTE3LjYgOTYuMS0zOS42bC04Ni41LTM0LjZjLTMgMS44LTYuMiAzLjItOS42IDQuM2wwIDY5Ljl6TTQ3Mi42IDQxNWMyNC42LTMwLjMgMzkuNC02OC45IDM5LjQtMTExIDAtMTIuMy0xLjMtMjQuMy0zLjctMzUuOUwzODIuOCAzNTUuMWMuOCAzLjQgMS4yIDcgMS4yIDEwLjYgMCA0LjYtLjcgOS0xLjkgMTMuMUw0NzIuNiA0MTV6TTMzNiAxMjhsLTE2IDAgMCAxOTIgMTguMyAwYzkuOSAwIDE5LjEgMy4yIDI2LjYgOC41bDEzMy41LTkyLjRDNDcxLjggMTcyLjYgNDA5LjEgMTI4IDMzNiAxMjh6TTE2OCAxOTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhVGVuZ2VTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbmdlLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4Mzc2LCAidGVuZ2UiXSwgImY3ZDciLCAiTTAgNTZDMCA0Mi43IDEwLjcgMzIgMjQgMzJsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgODBDMTAuNyA4MCAwIDY5LjMgMCA1NnpNMCAxNjBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEyOCAwIDAgMjU2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjU2LTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhVGVuZ2UgPSBmYVRlbmdlU2lnbjsKICAgIGZhSG91c2VDaGltbmV5TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2xpbmljLW1lZGljYWwiXSwgImY3ZjIiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMjQgMjQ4bDAgNDAtNDAgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDAgMCA0MGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC00MCA0MCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDAgMCAwLTQwYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFDbGluaWNNZWRpY2FsID0gZmFIb3VzZUNoaW1uZXlNZWRpY2FsOwogICAgZmFVc2Vyc1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzLXNsYXNoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzMiLCAiTTczLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzI5LjctLjMgMzkgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDMyMS44IDIyNGM1Ni42LTEgMTAyLjItNDcuMiAxMDIuMi0xMDQgMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDQtNTYuOCAwLTEwMyA0NS42LTEwNCAxMDIuMkw3My0yNC45ek01MTIgMjg4Yy0xNy4yIDAtMzMuNyAzLjQtNDguNyA5LjZsMTcwIDE3MGM0LjItNS40IDYuNy0xMi4yIDYuNy0xOS42bDAtMzJjMC03MC43LTU3LjMtMTI4LTEyOC0xMjh6TTU5LjkgOTcuN2MtMjEuNSAxMi41LTM1LjkgMzUuNy0zNS45IDYyLjMgMCAzOS44IDMyLjIgNzIgNzIgNzIgMjYuNiAwIDQ5LjgtMTQuNCA2Mi4zLTM1LjlMNTkuOSA5Ny43ek0yNTAuMiAyODhDMTk2LjggMzEzLjkgMTYwIDM2OC43IDE2MCA0MzJsMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTAuMiAwLTE5Mi0xOTJ6TTEyOCAyODhDNTcuMyAyODggMCAzNDUuMyAwIDQxNmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDg2LjcgMGMtNC4zLTkuOC02LjctMjAuNi02LjctMzJsMC0xNmMwLTUzLjIgMjAtMTAxLjggNTIuOS0xMzguNi0xMS43LTMuNS0yNC4xLTUuNC0zNi45LTUuNHpNNjE2IDE2MGE3MiA3MiAwIDEgMCAtMTQ0IDAgNzIgNzIgMCAxIDAgMTQ0IDB6Il0KICAgIH07CiAgICBmYVBhcGVyUGxhbmUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhcGVyLXBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjE5MTNdLCAiZjFkOCIsICJNNTM2LjQtMjYuM2M5LjgtMy41IDIwLjYtMSAyOCA2LjNzOS44IDE4LjIgNi4zIDI4bC0xNzggNDk2LjljLTUgMTMuOS0xOC4xIDIzLjEtMzIuOCAyMy4xLTE0LjIgMC0yNy04LjYtMzIuMy0yMS43bC02NC4yLTE1OGMtNC41LTExLTIuNS0yMy42IDUuMi0zMi42bDk0LjUtMTEyLjRjNS4xLTYuMSA0LjctMTUtLjktMjAuNnMtMTQuNi02LTIwLjYtLjlMMjI5LjIgMjc2LjFjLTkuMSA3LjYtMjEuNiA5LjYtMzIuNiA1LjJMMzguMSAyMTYuOGMtMTMuMS01LjMtMjEuNy0xOC4xLTIxLjctMzIuMyAwLTE0LjcgOS4yLTI3LjggMjMuMS0zMi44bDQ5Ni45LTE3OHoiXQogICAgfTsKICAgIGZhQm9va0F0bGFzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stYXRsYXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYXRsYXMiXSwgImY1NTgiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0zMTAuNiAyMDhMMjc5IDIwOGMtMS40IDIzLjEtNiA0NC4yLTEyLjYgNjEuMiAyMi43LTEyLjUgMzkuNC0zNC44IDQ0LjItNjEuMnptLTE3My4xIDBjNC44IDI2LjQgMjEuNSA0OC43IDQ0LjIgNjEuMi02LjctMTctMTEuMi0zOC0xMi42LTYxLjJsLTMxLjYgMHptNzYuNCA1NWM0LjUgOS42IDguMiAxMy44IDEwLjIgMTUuNSAyLTEuNyA1LjctNS44IDEwLjItMTUuNSA2LjItMTMuNCAxMS4xLTMyLjUgMTIuNy01NWwtNDUuOCAwYzEuNiAyMi41IDYuNSA0MS42IDEyLjcgNTV6bS0xMi43LTg3bDQ1LjggMGMtMS42LTIyLjUtNi41LTQxLjYtMTIuNy01NS00LjUtOS42LTguMi0xMy44LTEwLjItMTUuNS0yIDEuNy01LjcgNS44LTEwLjIgMTUuNS02LjIgMTMuNC0xMS4xIDMyLjUtMTIuNyA1NXptMTA5LjUgMGMtNC44LTI2LjQtMjEuNS00OC43LTQ0LjItNjEuMiA2LjcgMTcgMTEuMiAzOCAxMi42IDYxLjJsMzEuNiAwek0xNjkgMTc2YzEuNC0yMy4xIDYtNDQuMiAxMi42LTYxLjItMjIuNyAxMi41LTM5LjQgMzQuOC00NC4yIDYxLjJsMzEuNiAwek05NiAxOTJhMTI4IDEyOCAwIDEgMSAyNTYgMCAxMjggMTI4IDAgMSAxIC0yNTYgMHoiXQogICAgfTsKICAgIGZhQXRsYXMgPSBmYUJvb2tBdGxhczsKICAgIGZhVGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjZSIsICJNMjU2IDE2MGwwIDk2IDEyOCAwIDAtOTYtMTI4IDB6bS02NCAwbC0xMjggMCAwIDk2IDEyOCAwIDAtOTZ6TTAgMzIwTDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTk2em0zODQgMGwtMTI4IDAgMCA5NiAxMjggMCAwLTk2ek0xOTIgNDE2bDAtOTYtMTI4IDAgMCA5NiAxMjggMHoiXQogICAgfTsKICAgIGZhSGVhcnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTUzLCAxMjgxNTQsIDEyODE1NSwgMTI4MTU2LCAxMjg0MjAsIDEyOTI5MywgMTI5Mjk0LCAxMjk1MDUsIDk4MjksIDEwMDg0LCA2MTU3OF0sICJmMDA0IiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTEyLjItMTM5LjkgMjQyLjUtMjEyLjkgMjk4LjItMTIuNCA5LjQtMjcuNiAxNC4xLTQzLjEgMTQuMXMtMzAuOC00LjYtNDMuMS0xNC4xQzEzOS45IDQxMC4yIDAgMjc5LjkgMCAxNjcuN2wwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXoiXQogICAgfTsKICAgIGZhQ2lyY2xlQ2hldnJvblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNoZXZyb24tY2lyY2xlLXVwIl0sICJmMTM5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzc3IDI3MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04Ny04Ny04NyA4N2MtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwyMzkgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwTDM3NyAyNzF6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVVcCA9IGZhQ2lyY2xlQ2hldnJvblVwOwogICAgZmFCYXR0ZXJ5SGFsZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LWhhbGYiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYmF0dGVyeS0zIl0sICJmMjQyIiwgIk01MjggMTI4YzguOCAwIDE2IDcuMiAxNiAxNmwwIDIyNGMwIDguOC03LjIgMTYtMTYgMTZsLTQxNiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0yMjRjMC04LjggNy4yLTE2IDE2LTE2bDQxNiAwek0xMTIgNjRjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMjI0YzAgNDQuMiAzNS44IDgwIDgwIDgwbDQxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwwLTQ4YzAtNDQuMi0zNS44LTgwLTgwLTgwTDExMiA2NHptNTYgMTEyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDExMmMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUJhdHRlcnkzID0gZmFCYXR0ZXJ5SGFsZjsKICAgIGZhRm9udEF3ZXNvbWUzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbnQtYXdlc29tZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyNTAxLCA2MjY5NCwgImZvbnQtYXdlc29tZS1mbGFnIiwgImZvbnQtYXdlc29tZS1sb2dvLWZ1bGwiXSwgImYyYjQiLCAiTTkxLjcgOTZDMTA2LjMgODYuOCAxMTYgNzAuNSAxMTYgNTIgMTE2IDIzLjMgOTIuNyAwIDY0IDBTMTIgMjMuMyAxMiA1MmMwIDE2LjcgNy44IDMxLjUgMjAgNDFsMCA0MTkgNjQgMCAwLTY0IDM3My42IDBjMTQuNiAwIDI2LjQtMTEuOCAyNi40LTI2LjQgMC0zLjctLjgtNy4zLTIuMy0xMC43TDQzMiAyNzIgNDkzLjcgMTMzLjFjMS41LTMuNCAyLjMtNyAyLjMtMTAuNyAwLTE0LjYtMTEuOC0yNi40LTI2LjQtMjYuNEw5MS43IDk2eiJdCiAgICB9OwogICAgZmFGb250QXdlc29tZUZsYWczID0gZmFGb250QXdlc29tZTM7CiAgICBmYUZvbnRBd2Vzb21lTG9nb0Z1bGwzID0gZmFGb250QXdlc29tZTM7CiAgICBmYUhhbmRjdWZmcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kY3VmZnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmOCIsICJNMzIwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzIgMzItMTQuMyAzMi0zMnpNMTkyIDY0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNMTUyIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2YzAgMSAuMSAxLjkgLjIgMi45LTc0LjcgMjYuMy0xMjguMiA5Ny41LTEyOC4yIDE4MS4xIDAgMTA2IDg2IDE5MiAxOTIgMTkyczE5Mi04NiAxOTItMTkyYzAtODMuNy01My41LTE1NC44LTEyOC4yLTE4MS4xIC4xLS45IC4yLTEuOSAuMi0yLjlsMC0xNmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMHpNNjQgMzIwYTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6bTQ0OCAwYzAgNjYuOS01MS4zIDEyMS44LTExNi42IDEyNy41LTE0LjMgMjIuOC0zMi40IDQzLjEtNTMuNCA1OS45IDEzLjUgMyAyNy42IDQuNiA0MiA0LjYgMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC04My43LTUzLjUtMTU0LjgtMTI4LjItMTgxLjEgLjEtLjkgLjItMS45IC4yLTIuOWwwLTE2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMi4zIDAtMjIuNCA5LjItMjMuOCAyMS4xIDMwLjMgMTkuMiA1Ni4xIDQ1IDc1LjIgNzUuNCA2NS40IDUuOCAxMTYuNiA2MC42IDExNi42IDEyNy41ek0zODQgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFIYXRDb3dib3lTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC1jb3dib3ktc2lkZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGMxIiwgIk02NDAgMzg4LjNjMCAxNi45LTcuMSAzMi4yLTE4LjQgNDMuMWwtMzUtMjMuMy0yOTIuNy0xOTUuMWMtMzYuMS0yNC4xLTc4LjYtMzYuOS0xMjItMzYuOWwtMy45IDBjLTIuNyAwLTUuNCAwLTggLjFsMjIuMi0xMDBjNS43LTI1LjggMjguNi00NC4xIDU1LTQ0LjEgMTIuMiAwIDI0LjEgNCAzMy44IDExLjNsNC43IDMuNWMyNi4zIDE5LjcgNjIuNCAxOS43IDg4LjYgMGw0LjctMy41YzkuOC03LjMgMjEuNi0xMS4zIDMzLjgtMTEuMyAyNi40IDAgNDkuMyAxOC4zIDU1IDQ0LjFsMzMgMTQ4LjVDNTc0LjUgMjMyLjMgNjQwIDMwMi42IDY0MCAzODguM3pNMTcxLjkgMjI0YzMzLjkgMCA2Ny4xIDEwIDk1LjQgMjguOUw1NjAgNDQ4IDU2IDQ0OGMtMzAuOSAwLTU2LTI1LjEtNTYtNTYgMC05Mi44IDc1LjItMTY4IDE2OC0xNjhsMy45IDB6Il0KICAgIH07CiAgICBmYUluZHVzdHJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImluZHVzdHJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYyNzUiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsNDE2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0yNzkuOGMwLTE4LjItMTkuNC0yOS43LTM1LjQtMjEuMWwtMTU2LjYgODQuMyAwLTYzLjJjMC0xOC4yLTE5LjQtMjkuNy0zNS40LTIxLjFMMTI4IDIxNS40IDEyOCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnoiXQogICAgfTsKICAgIGZhTGluZXNMZWFuaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpbmVzLWxlYW5pbmciLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTUxZSIsICJNMTkwLjQgNzQuMWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtMTI4IDM4NGMtNS42IDE2LjggMy41IDM0LjkgMjAuMiA0MC41czM0LjktMy41IDQwLjUtMjAuMmwxMjgtMzg0em03MC45LTQxLjdjLTE3LjQtMi45LTMzLjkgOC45LTM2LjggMjYuM2wtNjQgMzg0Yy0yLjkgMTcuNCA4LjkgMzMuOSAyNi4zIDM2LjhzMzMuOS04LjkgMzYuOC0yNi4zbDY0LTM4NGMyLjktMTcuNC04LjktMzMuOS0yNi4zLTM2Ljh6TTM1MiAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhUGFzc3BvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFzc3BvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhYiIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek05NiA0MDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMjc4LjYgMjA4Yy00LjggMjYuNC0yMS41IDQ4LjctNDQuMiA2MS4yIDYuNy0xNyAxMS4yLTM4IDEyLjYtNjEuMmwzMS42IDB6bS0xNzMuMSAwbDMxLjYgMGMxLjQgMjMuMSA2IDQ0LjIgMTIuNiA2MS4yLTIyLjctMTIuNS0zOS40LTM0LjgtNDQuMi02MS4yem03Ni40IDU1Yy02LjItMTMuNC0xMS4xLTMyLjUtMTIuNy01NWw0NS44IDBjLTEuNiAyMi41LTYuNSA0MS42LTEyLjcgNTUtNC41IDkuNi04LjIgMTMuOC0xMC4yIDE1LjUtMi0xLjctNS43LTUuOC0xMC4yLTE1LjV6bTAtMTQyYzQuNS05LjYgOC4yLTEzLjggMTAuMi0xNS41IDIgMS43IDUuNyA1LjggMTAuMiAxNS41IDYuMiAxMy40IDExLjEgMzIuNSAxMi43IDU1bC00NS44IDBjMS42LTIyLjUgNi41LTQxLjYgMTIuNy01NXptOTYuNyA1NUwyNDcgMTc2Yy0xLjQtMjMuMS02LTQ0LjItMTIuNi02MS4yIDIyLjcgMTIuNSAzOS40IDM0LjggNDQuMiA2MS4yek0xMzcgMTc2bC0zMS42IDBjNC44LTI2LjQgMjEuNS00OC43IDQ0LjItNjEuMi02LjcgMTctMTEuMiAzOC0xMi42IDYxLjJ6bTE4MyAxNmExMjggMTI4IDAgMSAwIC0yNTYgMCAxMjggMTI4IDAgMSAwIDI1NiAweiJdCiAgICB9OwogICAgZmFJbmZpbml0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmZpbml0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzg3MzQsIDk4NTRdLCAiZjUzNCIsICJNMCAyNTZjMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgNTAuNCAwIDk3LjggMjMuNyAxMjggNjRsMzIgNDIuNyAzMi00Mi43YzMwLjItNDAuMyA3Ny42LTY0IDEyOC02NCA4OC40IDAgMTYwIDcxLjYgMTYwIDE2MFM1NjguNCA0MTYgNDgwIDQxNmMtNTAuNCAwLTk3LjgtMjMuNy0xMjgtNjRsLTMyLTQyLjctMzIgNDIuN2MtMzAuMiA0MC4zLTc3LjYgNjQtMTI4IDY0LTg4LjQgMC0xNjAtNzEuNi0xNjAtMTYwem0yODAgMGwtNDMuMi01Ny42Yy0xOC4xLTI0LjItNDYuNi0zOC40LTc2LjgtMzguNC01MyAwLTk2IDQzLTk2IDk2czQzIDk2IDk2IDk2YzMwLjIgMCA1OC43LTE0LjIgNzYuOC0zOC40TDI4MCAyNTZ6bTgwIDBsNDMuMiA1Ny42YzE4LjEgMjQuMiA0Ni42IDM4LjQgNzYuOCAzOC40IDUzIDAgOTYtNDMgOTYtOTZzLTQzLTk2LTk2LTk2Yy0zMC4yIDAtNTguNyAxNC4yLTc2LjggMzguNEwzNjAgMjU2eiJdCiAgICB9OwogICAgZmFDbG9uZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI0ZCIsICJNMjg4IDQ0OGwtMjI0IDAgMC0yMjQgNDggMCAwLTY0LTQ4IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNDgtNjQgMCAwIDQ4em0tNjQtOTZsMjI0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMjI0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjI0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFGb3J3YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvcndhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5MTkzXSwgImYwNGUiLCAiTTM3MS43IDQzLjFDMzYwLjEgMzIgMzQzIDI4LjkgMzI4LjMgMzUuMlMzMDQgNTYgMzA0IDcybDAgMTM2LjMtMTcyLjMtMTY1LjFDMTIwLjEgMzIgMTAzIDI4LjkgODguMyAzNS4yUzY0IDU2IDY0IDcybDAgMzY4YzAgMTYgOS42IDMwLjUgMjQuMyAzNi44czMxLjggMy4yIDQzLjQtNy45TDMwNCAzMDMuNyAzMDQgNDQwYzAgMTYgOS42IDMwLjUgMjQuMyAzNi44czMxLjggMy4yIDQzLjQtNy45bDE5Mi0xODRjNy45LTcuNSAxMi4zLTE4IDEyLjMtMjguOXMtNC41LTIxLjMtMTIuMy0yOC45bC0xOTItMTg0eiJdCiAgICB9OwogICAgZmFNID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMDldLCAiNGQiLCAiTTIyLjcgMzMuNGMxMy41LTQuMSAyOC4xIDEuMSAzNS45IDEyLjlMMjI0IDI5NC4zIDM4OS40IDQ2LjNjNy44LTExLjcgMjIuNC0xNyAzNS45LTEyLjlTNDQ4IDQ5LjkgNDQ4IDY0bDAgMzg0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc4LjMtMTMzLjQgMjAwLjFjLTUuOSA4LjktMTUuOSAxNC4yLTI2LjYgMTQuMnMtMjAuNy01LjMtMjYuNi0xNC4yTDY0IDE2OS43IDY0IDQ0OGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ2NS43IDAgNDQ4TDAgNjRDMCA0OS45IDkuMiAzNy41IDIyLjcgMzMuNHoiXQogICAgfTsKICAgIGZhUm9hZFNwaWtlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLXNwaWtlcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY4IiwgIk02NCAxMTYuOGMwLTE1LjggMjAuNS0yMiAyOS4zLTguOWw5OC43IDE0OCAwLTEzOS4yYzAtMTUuOCAyMC41LTIyIDI5LjMtOC45bDk4LjcgMTQ4IDAtMTM5LjJjMC0xNS44IDIwLjUtMjIgMjkuMy04LjlsOTguNyAxNDggMC0xMzkuMmMwLTE1LjggMjAuNS0yMiAyOS4zLTguOUw2MDYuOCAzMDIuMmMxNC4yIDIxLjMtMS4xIDQ5LjgtMjYuNiA0OS44TDY0IDM1MiA2NCAxMTYuOHpNMzIgMzg0bDU3NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhTW91bnRhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTZdLCAiZjZmYyIsICJNMjU2LjUgMGMxNC43IDAgMjguMiA4LjEgMzUuMiAyMWwyMTYgNDAwYzYuNyAxMi40IDYuNCAyNy40LS44IDM5LjUtNy4yIDEyLjEtMjAuMyAxOS41LTM0LjMgMTkuNWwtNDMyIDBjLTE0LjEgMC0yNy4xLTcuNC0zNC4zLTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMCAyLjktNC42QzIzMS43IDYuMiAyNDMuNiAwIDI1Ni41IDB6TTE3MC40IDI0OS45bDI2LjggMjYuOGM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMGw0My4zLTQzLjNjNi02IDE0LjEtOS40IDIyLjYtOS40bDQyLjggMC03Mi4xLTEzMy41LTg2LjEgMTU5LjR6Il0KICAgIH07CiAgICBmYUNoZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MzkiLCAiTTE2OCA1NmwwIDQwLTc4LjEgMGMtMTQuMyAwLTI1LjkgMTEuNi0yNS45IDI1LjkgMCA0IC45IDggMi43IDExLjZsMzMuNCA2Ni44Yy0xMS40IDEuOC0yMC4yIDExLjctMjAuMiAyMy43IDAgMTMuMyAxMC43IDI0IDI0IDI0bDUuNiAwLTEzLjYgMTM2LTU2LjIgNzAuM2MtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjQ4LjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMkwyODggMzg0IDI3NC40IDI0OCAyODAgMjQ4YzEzLjMgMCAyNC0xMC43IDI0LTI0IDAtMTEuOS04LjctMjEuOS0yMC4yLTIzLjdsMzMuNC02Ni44YzEuOC0zLjYgMi43LTcuNiAyLjctMTEuNiAwLTE0LjMtMTEuNi0yNS45LTI1LjktMjUuOWwtNzguMSAwIDAtNDAgMTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMyNDUuMyA4IDIzMiA4bC0xNiAwIDAtMTZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMTY4LTIxLjMgMTY4LThsMCAxNi0xNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE2IDB6TTMyNS44IDI3OS42bDguNSA4NS41IDQ3LjQgNTkuMiA0LjIgNS43YzkuMiAxMy43IDE0LjEgMjkuOSAxNC4xIDQ2LjUgMCAxMi43LTIuOCAyNC44LTcuOSAzNS41bDgzLjEgMGMyMC4zIDAgMzYuOC0xNi41IDM2LjgtMzYuOCAwLTcuMy0yLjItMTQuNC02LjItMjAuNGwtMjUuOC0zOC43IDAtNjQgMTMuMy0xMy4zYzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNMNTEyIDE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE2LTMyIDAgMC0xNmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMjIuNC0xMC4yIDQyLjQtMjYuMiA1NS42eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtdGhyZWUtcXVhcnRlcnMiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtMyIsICJ0aGVybW9tZXRlci0zIiwgInRoZXJtb21ldGVyLXRocmVlLXF1YXJ0ZXJzIl0sICJmMmM4IiwgIk0xNjAgMEMxMDcgMCA2NCA0MyA2NCA5NmwwIDE2NC43QzM0LjUgMjg3IDE2IDMyNS40IDE2IDM2OCAxNiA0NDcuNSA4MC41IDUxMiAxNjAgNTEyczE0NC02NC41IDE0NC0xNDRjMC00Mi42LTE4LjUtODEtNDgtMTA3LjNMMjU2IDk2YzAtNTMtNDMtOTYtOTYtOTZ6bTY0IDM2OGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2LjkgMTYuNS00OS45IDQwLTU5LjNMMTM2IDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTU2LjdjMjMuNSA5LjUgNDAgMzIuNSA0MCA1OS4zeiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZTMgPSBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVyczsKICAgIGZhVGhlcm1vbWV0ZXIzID0gZmFUZW1wZXJhdHVyZVRocmVlUXVhcnRlcnM7CiAgICBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycyA9IGZhVGVtcGVyYXR1cmVUaHJlZVF1YXJ0ZXJzOwogICAgZmFCID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5OF0sICI0MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNjAgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQ2LjUtMjQuOC04Ny4zLTYyLTEwOS43IDE4LjctMjIuMyAzMC01MSAzMC04Mi4zIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4TDMyIDMyek0xNjAgMjI0bC05NiAwIDAtMTI4IDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjR6TTY0IDI4OGwxMjggMGMzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGwtMTI4IDAgMC0xMjh6Il0KICAgIH07CiAgICBmYVNoaWVsZFZpcnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC12aXJ1cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDZjIiwgIk0yNTMuNCAyLjlDMjQ5LjIgMSAyNDQuNyAwIDI0MCAwcy05LjIgMS0xMy40IDIuOUwzOC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI1My40IDIuOXpNMjQwIDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNCAwIDIyLjkgMjcuNyAzNC40IDQzLjkgMTguMiA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTE2LjIgMTYuMi00LjcgNDMuOSAxOC4yIDQzLjkgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTIyLjkgMC0zNC40IDI3LjctMTguMiA0My45IDkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBjLTE2LjItMTYuMi00My45LTQuNy00My45IDE4LjIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0yMi45LTI3LjctMzQuNC00My45LTE4LjItOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWMxNi4yLTE2LjIgNC43LTQzLjktMTguMi00My45LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMjIuOSAwIDM0LjQtMjcuNyAxOC4yLTQzLjktOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwYzE2LjIgMTYuMiA0My45IDQuNyA0My45LTE4LjIgMC0xMy4zIDEwLjctMjQgMjQtMjR6TTIwOCAyNjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OCA0MGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFMaXRlY29pblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGl0ZWNvaW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWQzIiwgIk0xMjggNjRjMC0xNy43LTE0LjMtMzItMzItMzJTNjQgNDYuMyA2NCA2NGwwIDE1Ny45LTM4LjYgMTFjLTEyLjcgMy42LTIwLjEgMTYuOS0xNi41IDI5LjdzMTYuOSAyMC4xIDI5LjcgMTYuNUw2NCAyNzEuOCA2NCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMjU2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMTYyLjUgMTM0LjYtMzguNWMxMi43LTMuNiAyMC4xLTE2LjkgMTYuNS0yOS43cy0xNi45LTIwLjEtMjkuNy0xNi41TDEyOCAyMDMuNiAxMjggNjR6Il0KICAgIH07CiAgICBmYURpY2VENiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLWQ2IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2ZDEiLCAiTTIyNC40IDguM0MyNDQtMi44IDI2OC0yLjggMjg3LjYgOC4zbDE3NiA5OS43YzIwIDExLjQgMzIuNCAzMi42IDMyLjQgNTUuN2wwIDE5Ny40YzAgMjMtMTIuNCA0NC4zLTMyLjQgNTUuN2wtMTc2IDk5LjdjLTE5LjYgMTEuMS00My42IDExLjEtNjMuMSAwbC0xNzYtOTkuN0MyOC40IDQwNS41IDE2IDM4NC4yIDE2IDM2MS4ybDAtMTk3LjRjMC0yMyAxMi40LTQ0LjMgMzIuNC01NS43bDE3Ni05OS43ek0xMDIuNiAxNTUuNmMtOC44LTMuMS0xOC44IC4zLTIzLjggOC42cy0zLjIgMTguNyAzLjYgMjVsMy4yIDIuNCAxNTAuMiA5MC4yIDAgMTQ4LjdjMCAxMSA5IDIwIDIwIDIwIDExIDAgMjAtOSAyMC0yMGwwLTE0OC43IDE1MC4zLTkwLjJjOS41LTUuNyAxMi42LTE4IDYuOS0yNy40cy0xOC0xMi41LTI3LjQtNi45bC0xNDkuNyA4OS44LTE0OS43LTg5LjgtMy43LTEuN3oiXQogICAgfTsKICAgIGZhR3JpcExpbmVzVmVydGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcC1saW5lcy12ZXJ0aWNhbCIsCiAgICAgIGljb246IFsxOTIsIDUxMiwgW10sICJmN2E1IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDY0em0xMjggMGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0eiJdCiAgICB9OwogICAgZmFHb2xmQmFsbFRlZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnb2xmLWJhbGwtdGVlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbImdvbGYtYmFsbCJdLCAiZjQ1MCIsICJNMjk4LjUgMzg0LjFjMTIuMSAxLjIgMjEuNSAxMS41IDIxLjUgMjMuOXMtOS40IDIyLjYtMjEuNSAyMy45bC0yLjUgLjEtODAgMCAwIDg4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtODgtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjQgMC0xMi40IDkuNC0yMi42IDIxLjUtMjMuOWwyLjUtLjEgMjA4IDAgMi41IC4xek0xOTIgMGMxMDYgMCAxOTIgODYgMTkyIDE5MiAwIDU3LjQtMjUuMiAxMDguOC02NS4xIDE0NEw2NS4xIDMzNkMyNS4yIDMwMC44IDAgMjQ5LjQgMCAxOTIgMCA4NiA4NiAwIDE5MiAwem0zMiAyNDBjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnptNjQtNjRjLTcuNyAwLTE0LjIgNS41LTE1LjcgMTIuOGwtLjYgNi40Yy0xLjMgNi4zLTYuMiAxMS4yLTEyLjUgMTIuNWwtNi40IC42Yy03LjMgMS41LTEyLjggOC0xMi44IDE1LjcgMCA4LjggNy4yIDE2IDE2IDE2IDI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNnptLTgwLTE2Yy03LjcgMC0xNC4yIDUuNS0xNS43IDEyLjhsLS42IDYuNGMtMS4zIDYuMy02LjIgMTEuMi0xMi41IDEyLjVsLTYuNCAuNmMtNy4zIDEuNS0xMi44IDgtMTIuOCAxNS43IDAgOC44IDcuMiAxNiAxNiAxNiAyNi41IDAgNDgtMjEuNSA0OC00OCAwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUdvbGZCYWxsID0gZmFHb2xmQmFsbFRlZTsKICAgIGZhSGV4YWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZXhhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTEwNDNdLCAiZjMxMiIsICJNMzMuNSAyMjAuM2MtMTIuNyAyMi4yLTEyLjcgNDkuNCAwIDcxLjVsOTYuMiAxNjguMWMxMi44IDIyLjQgMzYuNyAzNi4yIDYyLjUgMzYuMmwxOTEuNiAwYzI1LjggMCA0OS43LTEzLjggNjIuNS0zNi4ybDk2LjItMTY4LjFjMTIuNy0yMi4yIDEyLjctNDkuNCAwLTcxLjVMNDQ2LjMgNTIuMkM0MzMuNSAyOS44IDQwOS42IDE2IDM4My44IDE2TDE5Mi4yIDE2Yy0yNS44IDAtNDkuNyAxMy44LTYyLjUgMzYuMkwzMy41IDIyMC4zeiJdCiAgICB9OwogICAgZmFGb2xkZXJPcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODE5NCwgMTI4NDQ5LCA2MTcxN10sICJmMDdjIiwgIk01NiAyMjUuNkwzMi40IDI5Ni4yIDMyLjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40bDExNy4zIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNi0zNjUuNCAwYy00MS4zIDAtNzggMjYuNC05MS4xIDY1LjZ6TTQ3Ny44IDQ0OEw5OSA0NDhjLTMyLjggMC01NS45LTMyLjEtNDUuNS02My4ybDQ4LTE0NEMxMDggMjIxLjIgMTI2LjQgMjA4IDE0NyAyMDhsMzc4LjggMGMzMi44IDAgNTUuOSAzMi4xIDQ1LjUgNjMuMmwtNDggMTQ0Yy02LjUgMTkuNi0yNC45IDMyLjgtNDUuNSAzMi44eiJdCiAgICB9OwogICAgZmFLYWFiYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrYWFiYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODMzMV0sICJmNjZiIiwgIk0yNTYgNTEuM0w5Mi44IDExMi40IDI0Ny41IDE3MS4xYzUuNSAyLjEgMTEuNSAyLjEgMTcgMEw0MTkuMiAxMTIuNCAyNTYgNTEuM3pNMCAxMjkuM2MwLTIwIDEyLjQtMzcuOSAzMS4xLTQ0LjlsMjA4LTc4YzEwLjktNC4xIDIyLjgtNC4xIDMzLjcgMGwyMDggNzhjMTguNyA3IDMxLjEgMjQuOSAzMS4xIDQ0LjlsMCAzNi0yNTMuMiA5NmMtMS44IC43LTMuOCAuNy01LjcgMGwtMjUzLjItOTYgMC0zNnptMCAxNDBsMC01Mi43IDIzNi4xIDg5LjZjMTIuOCA0LjkgMjYuOSA0LjkgMzkuNyAwbDIzNi4xLTg5LjYgMCA1Mi43LTEyOCA0OC42IDAgNTEuMyAxMjgtNDguNiAwIDYyLjJjMCAyMC0xMi40IDM3LjktMzEuMSA0NC45bC0yMDggNzhjLTEwLjkgNC4xLTIyLjggNC4xLTMzLjcgMGwtMjA4LTc4QzEyLjQgNDIwLjcgMCA0MDIuNyAwIDM4Mi43bDAtNjIuMiAxMjggNDguNiAwLTUxLjMtMTI4LTQ4LjZ6TTIzNi4xIDQxMC4xYzEyLjggNC45IDI2LjkgNC45IDM5LjcgMGw2MC4xLTIyLjggMC01MS4zLTc3LjIgMjkuM2MtMS44IC43LTMuOCAuNy01LjcgMGwtNzcuMi0yOS4zIDAgNTEuMyA2MC4xIDIyLjh6Il0KICAgIH07CiAgICBmYUhhbmRIb2xkaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGJkIiwgIk02Ni43IDM4NGw0Mi41LTQyLjVjMjQtMjQgNTYuNi0zNy41IDkwLjUtMzcuNUwzNTIgMzA0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMi42IDAgMTE5LjctODguMmMxNy44LTEzLjEgNDIuOC05LjMgNTUuOSA4LjVzOS4zIDQyLjgtOC41IDU1LjlMNDMzLjEgNDg1LjVjLTIzLjQgMTcuMi01MS42IDI2LjUtODAuNyAyNi41TDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNC43IDB6Il0KICAgIH07CiAgICBmYVNpbmdsZVF1b3RlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luZ2xlLXF1b3RlLXJpZ2h0IiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImU4MWMiLCAiTTY0IDQxNmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNmMwIDY2LjMtNTMuNyAxMjAtMTIwIDEyMGwtOCAweiJdCiAgICB9OwogICAgZmFCb3R0bGVEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvdHRsZS1kcm9wbGV0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU0YzQiLCAiTTgwIDBjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDEwMy4zYzY0LjkgMjAuNCAxMTIgODEgMTEyIDE1Mi43bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDU0NGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyODhjMC03MS42IDQ3LjEtMTMyLjMgMTEyLTE1Mi43TDExMiAzMkM5NC4zIDMyIDgwIDE3LjcgODAgMHptODAgNDE2YzM1LjMgMCA2NC0zMi40IDY0LTY0IDAtMjEuMi0yOC45LTY0LjUtNDcuOS05MC42LTguMS0xMS4xLTI0LjItMTEuMS0zMi4zIDAtMTkgMjYuMS00Ny45IDY5LjQtNDcuOSA5MC42IDAgMzEuNiAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFXaW5kb3dNaW5pbWl6ZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZG93LW1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDY5XSwgImYyZDEiLCAiTTAgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ0OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUNoZXZyb25SaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGV2cm9uLXJpZ2h0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMl0sICJmMDU0IiwgIk0zMTEuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTkyIDE5MmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMjQzLjIgMjU2IDczLjkgODYuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGwxOTIgMTkyeiJdCiAgICB9OwogICAgZmFFZ2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWdnIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5MzcwXSwgImY3ZmIiLCAiTTE5MiA0OTZDODYgNDk2IDAgMzk0IDAgMjg4IDAgMTc2IDY0IDE2IDE5MiAxNlMzODQgMTc2IDM4NCAyODhjMCAxMDYtODYgMjA4LTE5MiAyMDh6TTE1NC44IDEzNGM2LjUtNiA3LTE2LjEgMS0yMi42cy0xNi4xLTctMjIuNi0xYy0yMy45IDIxLjgtNDEuMSA1Mi43LTUyLjMgODQuMi0xMS4yIDMxLjYtMTYuOSA2NS4xLTE2LjkgOTMuNSAwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2YzAtMjQuNSA1LTU0LjQgMTUuMS04Mi44IDEwLjEtMjguNSAyNS01NC4xIDQzLjctNzEuMnoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtEb21lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmRtYXJrLWRvbWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGFuZG1hcmstYWx0Il0sICJmNzUyIiwgIk0yNTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzIgMCAuOSAwIDEuOCAuMSAyLjYtODAuNSAxMy40LTE0NCA3Ni45LTE1Ny41IDE1Ny40TDY0IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDE2MC01MS4yIDM4LjRDNC43IDQ2MC40IDAgNDY5LjkgMCA0ODAgMCA0OTcuNyAxNC4zIDUxMiAzMiA1MTJsNDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzIgMC0xMC4xLTQuNy0xOS42LTEyLjgtMjUuNkw0NDggNDE2IDQ0OCAyNTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIuNyAwYy0xMy41LTgwLjQtNzctMTQzLjktMTU3LjUtMTU3LjQgLjEtLjkgLjEtMS43IC4xLTIuNiAwLTE3LjctMTQuMy0zMi0zMi0zMnptODAgMjU2bDY0IDAgMCAxNjAtNjQgMCAwLTE2MHpNMjI0IDQxNmwwLTE2MCA2NCAwIDAgMTYwLTY0IDB6TTExMiAyNTZsNjQgMCAwIDE2MC02NCAwIDAtMTYweiJdCiAgICB9OwogICAgZmFMYW5kbWFya0FsdCA9IGZhTGFuZG1hcmtEb21lOwogICAgZmFXb3JtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndvcm0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU5OSIsICJNMjI0IDk2YzAtNTMgNDMtOTYgOTYtOTZsMzguNCAwQzQwNy45IDAgNDQ4IDQwLjEgNDQ4IDg5LjZMNDQ4IDM3NmMwIDc1LjEtNjAuOSAxMzYtMTM2IDEzNlMxNzYgNDUxLjEgMTc2IDM3NmwwLTgwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwbDAgMTY4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4UzAgNDkwLjUgMCA0NjRMMCAyOTZjMC03NS4xIDYwLjktMTM2IDEzNi0xMzZzMTM2IDYwLjkgMTM2IDEzNmwwIDgwYzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0xODQtMzIgMGMtNTMgMC05Ni00My05Ni05NnptMTQ0LThhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhVXNlckluanVyZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1pbmp1cmVkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3MjgiLCAiTTI0Mi43IDgwTDMzNCA4MGMtMTAuNy0yNC42LTI5LjUtNDQuOS01Mi45LTU3LjZMMjQyLjcgODB6bS0uOS03MC43QzIzNiA4LjQgMjMwIDggMjI0IDggMTc0LjggOCAxMzIuNSAzNy42IDExNCA4MGw4MC42IDAgNDcuMS03MC43ek0yMjQgMjQ4YzY2LjMgMCAxMjAtNTMuNyAxMjAtMTIwbC0yNDAgMGMwIDY2LjMgNTMuNyAxMjAgMTIwIDEyMHpNOTguNyAzNDEuOEM0OS4zIDM3MC4yIDE2IDQyMy41IDE2IDQ4NC42IDE2IDQ5OS43IDI4LjMgNTEyIDQzLjQgNTEybDE1MSAwLTk1LjgtMTcwLjJ6bTQ1LjEtMTcuN2w0Mi43IDc1LjkgODUuNSAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgMTEuNC0yLjQgMjIuMi02LjcgMzJsNTkuMiAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtOTAuOS03My43LTE2NC42LTE2NC42LTE2NC42bC04Ni45IDBjLTEyLjYgMC0yNC45IDEuNC0zNi43IDQuMXpNMjEzLjUgNDQ4bDM2IDY0IDIyLjUgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNTguNSAweiJdCiAgICB9OwogICAgZmFTdHJpa2V0aHJvdWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0cmlrZXRocm91Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBjYyIsICJNOTYgMTU3LjVDOTYgODguMiAxNTIuMiAzMiAyMjEuNSAzMkwzNjggMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMjIxLjUgOTZjLTM0IDAtNjEuNSAyNy41LTYxLjUgNjEuNSAwIDMxIDIzLjEgNTcuMiA1My45IDYxbDQ0LjEgNS41IDIyMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4My4xIDBDMTAzIDIwNC42IDk2IDE4MS44IDk2IDE1Ny41ek0zNDkuMiAzMzZsNjUuNSAwYy45IDYuMSAxLjQgMTIuMiAxLjQgMTguNSAwIDY5LjMtNTYuMiAxMjUuNS0xMjUuNSAxMjUuNUwxNDQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE0Ni41IDBjMzQgMCA2MS41LTI3LjUgNjEuNS02MS41IDAtNi40LTEtMTIuNy0yLjgtMTguNXoiXQogICAgfTsKICAgIGZhQmxvZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibG9nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ODEiLCAiTTIyNCAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxNDUuOCAwIDI2NCAxMTguMiAyNjQgMjY0IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTE5LjMtOTYuNy0yMTYtMjE2LTIxNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNODAgOTZjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyMjRjMCAyNi41IDIxLjUgNDggNDggNDhzNDgtMjEuNSA0OC00OC0yMS41LTQ4LTQ4LTQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTYgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRTMjU1LjUgNTEyIDE3NiA1MTIgMzIgNDQ3LjUgMzIgMzY4bDAtMjI0YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4em0xNjggMGM5Mi44IDAgMTY4IDc1LjIgMTY4IDE2OCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMtNTMuNy0xMjAtMTIwLTEyMC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdG9wd2F0Y2gyMCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdG9wd2F0Y2gtMjAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA2ZiIsICJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0tNjAgMjQwYzAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJsMCAzLjhjMCAxMS43LTMuMiAyMy4xLTkuMyAzM2wtNDMuOCA3MS4yIDMzLjEgMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTU3LjggMGMtMTQuNSAwLTI2LjItMTEuNy0yNi4yLTI2LjIgMC00LjkgMS4zLTkuNiAzLjktMTMuOGw1Ni43LTkyLjFjMi4yLTMuNiAzLjQtNy44IDMuNC0xMi4xbDAtMy44YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyYzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMHptMTgwLTUyYzI4LjcgMCA1MiAyMy4zIDUyIDUybDAgOTZjMCAyOC43LTIzLjMgNTItNTIgNTJzLTUyLTIzLjMtNTItNTJsMC05NmMwLTI4LjcgMjMuMy01MiA1Mi01MnptLTEyIDUybDAgOTZjMCA2LjYgNS40IDEyIDEyIDEyczEyLTUuNCAxMi0xMmwwLTk2YzAtNi42LTUuNC0xMi0xMi0xMnMtMTIgNS40LTEyIDEyeiJdCiAgICB9OwogICAgZmFUcnVja1BpY2t1cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1waWNrdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg3NjNdLCAiZjYzYyIsICJNMzYzLjggOTZsNTcuNiA5Ni0xMzMuNCAwIDAtOTYgNzUuOCAwek00OTYgMTkyTDQxOC42IDYzLjFDNDA3LjEgNDMuOCAzODYuMiAzMiAzNjMuOCAzMkwyNTYgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTI4LTE0NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyLjQgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMTYwLjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhjMC0yLjctLjEtNS40LS40LThsMzIuNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTY0IDB6TTExMiAzOTJhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHptMzc2LTQwYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2VlZGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VlZGxpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3OTMsICJzcHJvdXQiXSwgImY0ZDgiLCAiTTUxMiAzMkM1MTIgMTQwLjEgNDM1LjQgMjMwLjMgMzMzLjYgMjUxLjQgMzI1LjcgMTkzLjMgMjk5LjYgMTQxIDI2MS4xIDEwMC41IDMwMS4yIDQwIDM2OS45IDAgNDQ4IDBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnpNMCA5NkMwIDc4LjMgMTQuMyA2NCAzMiA2NGwzMiAwYzEyMy43IDAgMjI0IDEwMC4zIDIyNCAyMjRsMCAxOTJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjBDMTAwLjMgMzIwIDAgMjE5LjcgMCA5NnoiXQogICAgfTsKICAgIGZhU3Byb3V0ID0gZmFTZWVkbGluZzsKICAgIGZhVHJhbnNnZW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhbnNnZW5kZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODk1LCAidHJhbnNnZW5kZXItYWx0Il0sICJmMjI1IiwgIk0xMjgtMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMOTcuOSAzMiAxMzYgNzAuMSAxNTEgNTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0xNSAxNSAxNC4yIDE0LjJjMjcuOS0yMy44IDY0LjItMzguMiAxMDMuOC0zOC4yIDM2LjcgMCA3MC42IDEyLjQgOTcuNiAzMy4yTDQ2Ni43IDMyIDQ0OCAzMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC43LTg0LjQgODQuNGMxMyAyMy4xIDIwLjQgNDkuOSAyMC40IDc4LjMgMCA3Ny40LTU1IDE0Mi0xMjggMTU2LjhsMCAzNS4yIDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM1LjJjLTczLTE0LjgtMTI4LTc5LjQtMTI4LTE1Ni44IDAtMzEuNCA5LTYwLjcgMjQuNy04NS40bC0xNi43LTE2LjctMTUgMTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMTUtMTUtMzguMS0zOC4xIDAgMzAuMWMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDExMy43IDAgOTZMMCAwQzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDB6TTI4OCAzMzZhOTYgOTYgMCAxIDAgMC0xOTIgOTYgOTYgMCAxIDAgMCAxOTJ6Il0KICAgIH07CiAgICBmYVRyYW5zZ2VuZGVyQWx0ID0gZmFUcmFuc2dlbmRlcjsKICAgIGZhU3RhckhhbGYyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItaGFsZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYxNzMxXSwgImYwODkiLCAiTTMwNC4xIDcuNmMwLTExLjEtNy42LTIwLjctMTguNC0yMy4zcy0yMS45IDIuNS0yNyAxMi40TDE5My4xIDEyNS4zIDMzLjIgMTUwLjdjLTguOSAxLjQtMTYuMyA3LjctMTkuMSAxNi4zcy0uNSAxOCA1LjggMjQuNGwxMTQuNCAxMTQuNS0yNS4yIDE1OS45Yy0xLjQgOC45IDIuMyAxNy45IDkuNiAyMy4yczE2LjkgNi4xIDI1IDJMMjkxIDQxNi4xYzgtNC4xIDEzLjEtMTIuNCAxMy4xLTIxLjRsMC0zODcuMXoiXQogICAgfTsKICAgIGZhUGhvdG9GaWxtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob3RvLWZpbG0iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsicGhvdG8tdmlkZW8iXSwgImY4N2MiLCAiTTE5MiA2NGMwLTM1LjMgMjguNy02NCA2NC02NEw1NzYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzIwIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjI0ek0zMjAgOTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTU2LjUgMTEuNUM0NzIuMSAxMDAuNCA0NjQuNCA5NiA0NTYgOTZzLTE2LjEgNC40LTIwLjUgMTEuNWwtNTQgODguMy0xNy45LTI1LjZjLTQuNS02LjQtMTEuOC0xMC4yLTE5LjctMTAuMnMtMTUuMiAzLjgtMTkuNyAxMC4ybC01NiA4MGMtNS4xIDcuMy01LjggMTYuOS0xLjYgMjQuOFMyNzkuMSAyODggMjg4IDI4OGwyNTYgMGM4LjcgMCAxNi43LTQuNyAyMC45LTEyLjNzNC4xLTE2LjgtLjUtMjQuM2wtODgtMTQ0ek0xNDQgMTI4bDAgMTYwYzAgNjEuOSA1MC4xIDExMiAxMTIgMTEybDE5MiAwIDAgMTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwek01MiAxOTZsMCAyNGMwIDguOCA3LjIgMTYgMTYgMTZsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yNGMwLTguOC03LjItMTYtMTYtMTZsLTI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYgODBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDI0YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMHptMCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjRjMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMjRjMC04LjgtNy4yLTE2LTE2LTE2bC0yNCAweiJdCiAgICB9OwogICAgZmFQaG90b1ZpZGVvID0gZmFQaG90b0ZpbG07CiAgICBmYVB1bXBNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInB1bXAtbWVkaWNhbCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlMDZhIiwgIk05NiAwbDAgODAgMTI4IDAgMC0yNCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0UzMwOS4zIDggMjk2IDhsLTcyIDAgMC04YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwQzExMC4zLTMyIDk2LTE3LjcgOTYgMHpNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCAxMjh6bTY0IDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhRmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXJlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjkzXSwgImYwNmQiLCAiTTE2MC41LTI2LjRjOS4zLTcuOCAyMy03LjUgMzEuOSAuOSAxMi4zIDExLjYgMjMuMyAyNC40IDMzLjkgMzcuNCAxMy41IDE2LjUgMjkuNyAzOC4zIDQ1LjMgNjQuMiA1LjItNi44IDEwLTEyLjggMTQuMi0xNy45IDEuMS0xLjMgMi4yLTIuNyAzLjMtNC4xIDcuOS05LjggMTcuNy0yMi4xIDMwLjgtMjIuMSAxMy40IDAgMjIuOCAxMS45IDMwLjggMjIuMSAxLjMgMS43IDIuNiAzLjMgMy45IDQuOCAxMC4zIDEyLjQgMjQgMzAuMyAzNy43IDUyLjQgMjcuMiA0My45IDU1LjYgMTA2LjQgNTUuNiAxNzYuNiAwIDEyMy43LTEwMC4zIDIyNC0yMjQgMjI0UzAgNDExLjcgMCAyODhjMC05MS4xIDQxLjEtMTcwIDgwLjUtMjI1IDE5LjktMjcuNyAzOS43LTQ5LjkgNTQuNi02NS4xIDguMi04LjQgMTYuNS0xNi43IDI1LjUtMjQuMnpNMjI1LjcgNDE2YzI1LjMgMCA0Ny43LTcgNjguOC0yMSA0Mi4xLTI5LjQgNTMuNC04OC4yIDI4LjEtMTM0LjQtNC41LTktMTYtOS42LTIyLjUtMmwtMjUuMiAyOS4zYy02LjYgNy42LTE4LjUgNy40LTI0LjctLjUtMTcuMy0yMi4xLTQ5LjEtNjIuNC02NS4zLTgzLTUuNC02LjktMTUuMi04LTIxLjUtMS45LTE4LjMgMTcuOC01MS41IDU2LjgtNTEuNSAxMDQuMyAwIDY4LjYgNTAuNiAxMDkuMiAxMTMuNyAxMDkuMnoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2VhcmNoLXBsdXMiXSwgImYwMGUiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjA4IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFTZWFyY2hQbHVzID0gZmFNYWduaWZ5aW5nR2xhc3NQbHVzOwogICAgZmFGbGFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMGMzIiwgIk0yODggMEwxMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJzMTQuMyAzMiAzMiAzMkwxMjggMjE1LjUgNy41IDQyNi4zQzIuNiA0MzUgMCA0NDQuNyAwIDQ1NC43IDAgNDg2LjQgMjUuNiA1MTIgNTcuMyA1MTJsMzMzLjQgMGMzMS42IDAgNTcuMy0yNS42IDU3LjMtNTcuMyAwLTEwLTIuNi0xOS44LTcuNS0yOC40TDMyMCAyMTUuNSAzMjAgNjRjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzM3LjcgMCAzMjAgMEwyODggMHpNMTkyIDIxNS41bDAtMTUxLjUgNjQgMCAwIDE1MS41YzAgMTEuMSAyLjkgMjIuMSA4LjQgMzEuOGw0MS42IDcyLjctMTY0IDAgNDEuNi03Mi43YzUuNS05LjcgOC40LTIwLjYgOC40LTMxLjh6Il0KICAgIH07CiAgICBmYUFsaWduUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWxpZ24tcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzOCIsICJNNDQ4IDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDE5MiA5NmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnptMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyek0wIDE5MmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek00NDggNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhQ2FibGVDYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FibGUtY2FyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjczLCA1NzU1MSwgInRyYW0iXSwgImY3ZGEiLCAiTTI4OC0zMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE2MCAyNGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek0zMiAyODhjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTM2IDAgMC05Ni4yLTE5My40IDU1LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wyMjQtNjQgMCAwIDIyNC02NGMxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0yMDYuNiA1OSAwIDEwOS45IDEzNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNjB6bTgwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNmw1NiAwIDAtOTYtNTYgMHptMTg0IDk2bDAtOTYtODAgMCAwIDk2IDgwIDB6bTQ4IDBsNTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC02NGMwLTguOC03LjItMTYtMTYtMTZsLTU2IDAgMCA5NnoiXQogICAgfTsKICAgIGZhVHJhbSA9IGZhQ2FibGVDYXI7CiAgICBmYUtpdE1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2l0LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZmlyc3QtYWlkIl0sICJmNDc5IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNiAwIDAtMzg0LTE2IDB6bTY0IDBsMCAzODQgMjU2IDAgMC0zODQtMjU2IDB6TTQ0OCA0NDhjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTE2IDAgMCAzODQgMTYgMHpNMjI0IDE4NGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhRmlyc3RBaWQgPSBmYUtpdE1lZGljYWw7CiAgICBmYUdyaXBMaW5lcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmlwLWxpbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3YTQiLCAiTTMyIDI4OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAyODh6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE2MHoiXQogICAgfTsKICAgIGZhQnVyZ2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cmdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoYW1idXJnZXIiXSwgImY4MDUiLCAiTTQ4IDM4NGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgNDQuMiAzNS44IDgwIDgwIDgwbDI4OCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwIDAtOC44LTcuMi0xNi0xNi0xNkw0OCAzODR6TTMyIDIwMmMwIDEyLjIgOS45IDIyIDIyIDIyTDQ1OCAyMjRjMTIuMiAwIDIyLTkuOSAyMi0yMiAwLTE3LjItMi42LTM0LjQtMTAuOC00OS41LTIyLjItNDAuOC04Mi4zLTEyMC41LTIxMy4yLTEyMC41UzY1IDExMS42IDQyLjggMTUyLjVDMzQuNiAxNjcuNiAzMiAxODQuOCAzMiAyMDJ6TTAgMzA0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDI3MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTI1NiA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTEyMCAxMjhhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQ4LTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhSGFtYnVyZ2VyID0gZmFCdXJnZXI7CiAgICBmYVNub3dtYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd21hbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk3MzEsIDk5MjRdLCAiZjdkMCIsICJNNDAzIDIxMS43YzMyLjItMjQuOSA1My02My45IDUzLTEwNy43IDAtNzUuMS02MC45LTEzNi0xMzYtMTM2UzE4NCAyOC45IDE4NCAxMDRjMCA0My45IDIwLjggODIuOSA1MyAxMDcuNy0zMi4yIDE2LjMtNTkgNDEuOC03Ni44IDczLjFMMTEyIDI2NC4yIDExMiAyMjRjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOS42LTIyLjUtOS43Yy0xMi4yLTUuMi0yNi4zIC40LTMxLjUgMTIuNnMuNCAyNi4zIDEyLjYgMzEuNWMzNi4xIDE1LjUgNzUuOSAzMi41IDExOS40IDUxLjItMy45IDE0LjktNiAzMC42LTYgNDYuNyAwIDcwIDM5LjEgMTMwLjggOTYuNiAxNjEuOSA3LjkgNC4zIDE2LjkgNi4xIDI1LjkgNi4xbDEyMyAwYzkgMCAxOC0xLjggMjUuOS02LjEgNTcuNS0zMS4xIDk2LjYtOTIgOTYuNi0xNjEuOSAwLTE2LjItMi4xLTMxLjgtNi00Ni43IDQzLjUtMTguNyA4My40LTM1LjcgMTE5LjQtNTEuMiAxMi4yLTUuMiAxNy44LTE5LjMgMTIuNi0zMS41cy0xOS4zLTE3LjgtMzEuNS0xMi42bC0yMi41IDkuNyAwLTE5LjZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0MC4yLTQ4LjIgMjAuNmMtMTcuOS0zMS4zLTQ0LjYtNTYuOC03Ni44LTczLjF6TTI5NiA0MTZhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMjQtMTIwYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHpNMjQ4IDgwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6TTM2OCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTI5Mi4yIDE1OS4zYy0yLjctNC44LTQuMi0xMC4yLTQuMi0xNS43IDAtMTcuNSAxNC4yLTMxLjYgMzEuNi0zMS42bC44IDBjMTcuNSAwIDMxLjYgMTQuMiAzMS42IDMxLjYgMCA1LjUtMS40IDEwLjktNC4yIDE1LjdMMzI3IDE5NS44Yy0zLjEgNS40LTEwLjggNS40LTEzLjkgMGwtMjAuOS0zNi42eiJdCiAgICB9OwogICAgZmFIb3RlbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3RlbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk3Nl0sICJmNTk0IiwgIk0xNiAyNEMxNiAxMC43IDI2LjcgMCA0MCAwTDQ3MiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCA0MTYgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDQwIDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MTYtOCAwQzI2LjcgNDggMTYgMzcuMyAxNiAyNHptMjA4IDg4bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTEyOCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem05NiAxMTJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMzUyIDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTExMiAyMDhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMjQwLTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTI4OCAzODRsNDMuOCAwYzkuOSAwIDE3LjUtOSAxNC0xOC4yLTEzLjgtMzYuMS00OC44LTYxLjgtODkuNy02MS44cy03NS45IDI1LjctODkuNyA2MS44Yy0zLjUgOS4yIDQuMSAxOC4yIDE0IDE4LjJsNDMuOCAwIDAgODAgNjQgMCAwLTgweiJdCiAgICB9OwogICAgZmFQcmludCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwcmludCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQyNCwgMTI4NDM4LCA5MTEzXSwgImYwMmYiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDM0MS41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsNDIuNSA0Mi41YzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNsMCAzNy41LTM4NCAwIDAtODB6TTAgMjU2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDAgMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjQtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NnpNMTI4IDQxNmwwIDMyIDI1NiAwIDAtOTYtMjU2IDAgMCA2NHpNNDU2IDI3MmEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFWb2xsZXliYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbGxleWJhbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5NTIsICJ2b2xsZXliYWxsLWJhbGwiXSwgImY0NWYiLCAiTTUxMiAyNTguOWMtMjMuNCA4LTQ3LjggMTMuMS03Mi42IDE1LjEgNS45LTk4LjYtMzAuNy0xOTEuMS05NC45LTI1OC4zIDk3LjggMzYgMTY3LjUgMTMwIDE2Ny41IDI0MC4zIDAgMSAwIDEuOSAwIDIuOXptLTUuOSA1MmMtNS4yIDIzLjctMTMuNiA0Ni4yLTI0LjkgNjYuOS05NC43IDUyLjItMjE0IDUwLTMwOC40LTEzLjYgMjEuNy0zMS4zIDQ5LjgtNTguOSA4My44LTgwLjUgNzkuNSA0MS42IDE2OC41IDQ5LjEgMjQ5LjUgMjcuMXpNMjc5LjcgMjQxLjZjLTMuNy04OS43LTQxLjctMTcwLjUtMTAxLjMtMjI5LjcgMjIuMy03LjEgNDYtMTEuMiA3MC41LTExLjkgOTIuNSA1NS45IDE1MC4zIDE2MC4zIDE0Mi40IDI3My44LTM4LTMuMi03NS45LTEzLjctMTExLjYtMzIuM3pNMTMwLjUgMzIuOEMxNDkuMSA0OS4xIDE2NS44IDY3LjcgMTc5LjkgODguMiA5MS41IDEzMi4zIDI5LjcgMjEwLjMgMy43IDI5OS41IDEuMyAyODUuMyAwIDI3MC44IDAgMjU2IDAgMTYwLjIgNTIuNiA3Ni43IDEzMC41IDMyLjh6bTczLjQgOTdjMTYuMyAzNC41IDI2LjEgNzIuNiAyNy45IDExMi44LTc1LjggNDgtMTI2LjggMTIxLjMtMTQ4LjMgMjAyLjUtMTcuNi0xNi4xLTMzLTM0LjYtNDUuNS01NSAyLjEtMTA4LjEgNjMuNy0yMTAuNCAxNjUuOS0yNjAuM3pNMjU2IDUxMmMtNDcuNyAwLTkyLjMtMTMtMTMwLjUtMzUuNyA0LjgtMjQuMyAxMi42LTQ4IDIzLjItNzAuNCA4Mi40IDU0LjQgMTgwLjggNjguOSAyNzEgNDctNDQuNCAzNy0xMDEuNSA1OS4yLTE2My43IDU5LjJ6Il0KICAgIH07CiAgICBmYVZvbGxleWJhbGxCYWxsID0gZmFWb2xsZXliYWxsOwogICAgZmFUcmFmZmljTGlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhZmZpYy1saWdodCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyODY3OF0sICJmNjM3IiwgIk02NC0zMkMyOC43LTMyIDAtMy4zIDAgMzJMMCAzODRjMCA4OC40IDcxLjYgMTYwIDE2MCAxNjBzMTYwLTcxLjYgMTYwLTE2MGwwLTM1MmMwLTM1LjMtMjguNy02NC02NC02NEw2NC0zMnptOTYgMzkyYzMwLjkgMCA1NiAyNS4xIDU2IDU2cy0yNS4xIDU2LTU2IDU2LTU2LTI1LjEtNTYtNTYgMjUuMS01NiA1Ni01NnptNTYtMTA0YTU2IDU2IDAgMSAxIC0xMTIgMCA1NiA1NiAwIDEgMSAxMTIgMHpNMTYwIDE1MmE1NiA1NiAwIDEgMSAwLTExMiA1NiA1NiAwIDEgMSAwIDExMnoiXQogICAgfTsKICAgIGZhUGxhbmVDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1NSIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjAxLjQtNjAuOWMtNy4xLTUuMi0xNy4yLTMuNi0yMi40IDMuNWwtNTMgNzIuOS0yNi44LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwcy02LjIgMTYuNCAwIDIyLjZsNDAgNDBjMy4zIDMuMyA3LjkgNSAxMi42IDQuNnM4LjktMi44IDExLjctNi41bDY0LTg4YzUuMi03LjEgMy42LTE3LjItMy41LTIyLjN6Il0KICAgIH07CiAgICBmYVVzZXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImYwYzAiLCAiTTMyMCAxNmExMDQgMTA0IDAgMSAxIDAgMjA4IDEwNCAxMDQgMCAxIDEgMC0yMDh6TTk2IDg4YTcyIDcyIDAgMSAxIDAgMTQ0IDcyIDcyIDAgMSAxIDAtMTQ0ek0wIDQxNmMwLTcwLjcgNTcuMy0xMjggMTI4LTEyOCAxMi44IDAgMjUuMiAxLjkgMzYuOSA1LjQtMzIuOSAzNi44LTUyLjkgODUuNC01Mi45IDEzOC42bDAgMTZjMCAxMS40IDIuNCAyMi4yIDYuNyAzMkwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJ6bTUyMS4zIDY0YzQuMy05LjggNi43LTIwLjYgNi43LTMybDAtMTZjMC01My4yLTIwLTEwMS44LTUyLjktMTM4LjYgMTEuNy0zLjUgMjQuMS01LjQgMzYuOS01LjQgNzAuNyAwIDEyOCA1Ny4zIDEyOCAxMjhsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtODYuNyAwek00NzIgMTYwYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDQzMmMwLTg4LjQgNzEuNi0xNjAgMTYwLTE2MHMxNjAgNzEuNiAxNjAgMTYwbDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2eiJdCiAgICB9OwogICAgZmFDZXJ0aWZpY2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZXJ0aWZpY2F0ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMGEzIiwgIk0yMzkuMi04Yy02LjEtNi4yLTE1LTguNy0yMy40LTYuNFMyMDAuOS01LjYgMTk4LjggMi44TDE4My41IDYzYy0xLjEgNC40LTUuNiA3LTkuOSA1LjdMMTEzLjggNTEuOWMtOC40LTIuNC0xNy40IDAtMjMuNSA2LjFzLTguNSAxNS4xLTYuMSAyMy41bDE2LjkgNTkuOGMxLjIgNC4zLTEuNCA4LjgtNS43IDkuOUwzNS4xIDE2Ni41Yy04LjQgMi4xLTE1IDguNy0xNy4zIDE3LjFzLjIgMTcuMyA2LjQgMjMuNGw0NC41IDQzLjNjMy4yIDMuMSAzLjIgOC4zIDAgMTEuNUwyNC4zIDMwNS4xYy02LjIgNi4xLTguNyAxNS02LjQgMjMuNHM4LjkgMTQuOSAxNy4zIDE3LjFsNjAuMiAxNS4zYzQuNCAxLjEgNyA1LjYgNS43IDkuOUw4NC4yIDQzMC41Yy0yLjQgOC40IDAgMTcuNCA2LjEgMjMuNXMxNS4xIDguNSAyMy41IDYuMWw1OS44LTE2LjljNC4zLTEuMiA4LjggMS40IDkuOSA1LjdsMTUuMyA2MC4yYzIuMSA4LjQgOC43IDE1IDE3LjEgMTcuM3MxNy4zLS4yIDIzLjQtNi40bDQzLjMtNDQuNWMzLjEtMy4yIDguMy0zLjIgMTEuNSAwTDMzNy4zIDUyMGM2LjEgNi4yIDE1IDguNyAyMy40IDYuNHMxNC45LTguOSAxNy4xLTE3LjNMMzkzLjEgNDQ5YzEuMS00LjQgNS42LTcgOS45LTUuN2w1OS44IDE2LjljOC40IDIuNCAxNy40IDAgMjMuNS02LjFzOC41LTE1LjEgNi4xLTIzLjVsLTE2LjktNTkuOGMtMS4yLTQuMyAxLjQtOC44IDUuNy05LjlsNjAuMi0xNS4zYzguNC0yLjEgMTUtOC43IDE3LjMtMTcuMXMtLjItMTcuNC02LjQtMjMuNGwtNDQuNS00My4zYy0zLjItMy4xLTMuMi04LjMgMC0xMS41bDQ0LjUtNDMuM2M2LjItNi4xIDguNy0xNSA2LjQtMjMuNHMtOC45LTE0LjktMTcuMy0xNy4xbC02MC4yLTE1LjNjLTQuNC0xLjEtNy01LjYtNS43LTkuOWwxNi45LTU5LjhjMi40LTguNCAwLTE3LjQtNi4xLTIzLjVzLTE1LjEtOC41LTIzLjUtNi4xTDQwMyA2OC44Yy00LjMgMS4yLTguOC0xLjQtOS45LTUuN0wzNzcuOCAyLjhjLTIuMS04LjQtOC43LTE1LTE3LjEtMTcuM3MtMTcuMyAuMi0yMy40IDYuNEwyOTQgMzYuNWMtMy4xIDMuMi04LjMgMy4yLTExLjUgMEwyMzkuMi04eiJdCiAgICB9OwogICAgZmFBbGFybUNsb2NrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbGFybS1jbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzkyMDBdLCAiZjM0ZSIsICJNNTA0LjQgMTMyLjVjLTQuNSAxMC41LTE4LjQgOS44LTI0LjkgLjQtMjcuOC00MC02Ni4xLTcyLjItMTExLTkyLjYtMTAuNC00LjctMTMuNy0xOC4zLTQuMS0yNC42IDE1LTkuOSAzMy0xNS43IDUyLjMtMTUuNyA1Mi42IDAgOTUuMiA0Mi42IDk1LjIgOTUuMiAwIDEzLjItMi43IDI1LjgtNy42IDM3LjN6bS00NzEuOSAuNGMtNi41IDkuNC0yMC41IDEwLjEtMjQuOS0uNC00LjktMTEuNS03LjYtMjQuMS03LjYtMzcuMyAwLTUyLjYgNDIuNi05NS4yIDk1LjItOTUuMiAxOS4zIDAgMzcuMyA1LjggNTIuMyAxNS43IDkuNiA2LjMgNi4zIDE5LjktNC4xIDI0LjYtNDQuOCAyMC40LTgzLjEgNTIuNi0xMTEgOTIuNnpNMzkwLjIgNDY3LjRDMzUyLjggNDk1LjQgMzA2LjMgNTEyIDI1NiA1MTJzLTk2LjgtMTYuNi0xMzQuMS00NC42TDg2LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zbDM1LjItMzUuMkM0OC42IDM4NC44IDMyIDMzOC4zIDMyIDI4OCAzMiAxNjQuMyAxMzIuMyA2NCAyNTYgNjRTNDgwIDE2NC4zIDQ4MCAyODhjMCA1MC4zLTE2LjYgOTYuOC00NC42IDEzNC4ybDM1LjIgMzUuMmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtMzUuMi0zNS4yek0yODAgMTg0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMTA0YzAgNi40IDIuNSAxMi41IDcgMTdsNTYgNTZjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC00OS00OSAwLTk0LjF6Il0KICAgIH07CiAgICBmYUhlbGljb3B0ZXJTeW1ib2wgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsaWNvcHRlci1zeW1ib2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUwMiIsICJNNDQ1LjQgMjI0bDY0LjcgMEM0OTUuNiAxMDguMiA0MDMuOCAxNi40IDI4OCAybDAgNjQuN0MzNjguNCA4MC4xIDQzMS45IDE0My42IDQ0NS40IDIyNHpNNTEwIDI4OGwtNjQuNyAwQzQzMS45IDM2OC40IDM2OC40IDQzMS45IDI4OCA0NDUuM2wwIDY0LjdjMTE1LjgtMTQuNCAyMDcuNi0xMDYuMiAyMjItMjIyek0yIDI4OEMxNi40IDQwMy44IDEwOC4yIDQ5NS42IDIyNCA1MTBsMC02NC43QzE0My42IDQzMS45IDgwLjIgMzY4LjQgNjYuNyAyODhMMiAyODh6bTAtNjRsNjQuNyAwQzgwLjIgMTQzLjYgMTQzLjYgODAuMSAyMjQgNjYuN0wyMjQgMkMxMDguMiAxNi40IDE2LjQgMTA4LjIgMiAyMjR6bTIwNi02NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE5MmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgOTYgMCAwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NC05NiAwIDAtNjR6Il0KICAgIH07CiAgICBmYUhvdXNlQ2hpbW5leUNyYWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXktY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiaG91c2UtZGFtYWdlIl0sICJmNmYxIiwgIk0yMzQuMiA4LjZjMTIuMy0xMS40IDMxLjMtMTEuNCA0My41IDBMMzY4IDkyLjMgMzY4IDgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMDEuNSAzNy44IDM1LjFjOS42IDkgMTIuOCAyMi45IDggMzUuMVM0OTMuMiAyNzIgNDgwIDI3MmwtMTYgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTA1LjYgMC0zOC40LTY0IDgwLjgtNjcuM2M3LjgtNi41IDcuNi0xOC42LS40LTI0LjlMMjE4LjYgMjYzLjJjLTE0LjYtMTEuNS0zMy44IDctMjIuOCAyMkwyNTYgMzY4IDE3MC41IDQzOS4yYy02LjEgNS03LjUgMTMuOC0zLjUgMjAuNWwzMS4zIDUyLjItODYuNCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6Il0KICAgIH07CiAgICBmYUhvdXNlRGFtYWdlID0gZmFIb3VzZUNoaW1uZXlDcmFjazsKICAgIGZhUGVyc29uTWlsaXRhcnlQb2ludGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tbWlsaXRhcnktcG9pbnRpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU0YSIsICJNMjE0LjkgMTQuMUMyMDIgMTUuMiAxOTIgMjYgMTkyIDM5IDE5MiA1Mi44IDIwMy4yIDY0IDIxNyA2NGwxNTEgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMC42QzM4NCA4IDM3NiAuNyAzNjYuNyAxLjRMMjE0LjkgMTQuMXpNMjA4IDExMmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwYzAtNS41LS42LTEwLjgtMS42LTE2TDIwOS42IDk2Yy0xIDUuMi0xLjYgMTAuNS0xLjYgMTZ6TTQwIDIyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDBzMTcuOSA0MCA0MCA0MGwxNTIgMCAwIDg5LjQgMTYyLjgtMTYyLjhjLTEzLjMtNC4zLTI3LjMtNi41LTQxLjYtNi41TDQwIDIyNHptMzQ1LjcgMjAuOWwtMTcxLjEgMTcxLjEgMTY5LjQgMCAwLTQ2LjMgNTMuNiA5MC42YzExLjIgMTkgMzUuOCAyNS4zIDU0LjggMTQuMXMyNS4zLTM1LjggMTQuMS01NC44TDQzMC4zIDI5MC44Yy0xMS4yLTE5LTI2LjYtMzQuNS00NC42LTQ1Ljl6TTE5MiA0NDhsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyLTE5MiAweiJdCiAgICB9OwogICAgZmFEYXRhYmFzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkYXRhYmFzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMWMwIiwgIk00NDggMjA1LjhjLTE0LjggOS44LTMxLjggMTcuNy00OS41IDI0LTQ3IDE2LjgtMTA4LjcgMjYuMi0xNzQuNSAyNi4yUzk2LjQgMjQ2LjUgNDkuNSAyMjkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCAyODhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC04Mi4yem0wLTc3LjhsMC00OEM0NDggMzUuOCAzNDcuNyAwIDIyNCAwUzAgMzUuOCAwIDgwbDAgNDhjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODB6TTM5OC41IDM4OS44QzM1MS42IDQwNi41IDI4OS45IDQxNiAyMjQgNDE2Uzk2LjQgNDA2LjUgNDkuNSAzODkuOGMtMTcuNi02LjMtMzQuNy0xNC4yLTQ5LjUtMjRMMCA0MzJjMCA0NC4yIDEwMC4zIDgwIDIyNCA4MHMyMjQtMzUuOCAyMjQtODBsMC02Ni4yYy0xNC44IDkuOC0zMS44IDE3LjctNDkuNSAyNHoiXQogICAgfTsKICAgIGZhTmV3c3BhcGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXdzcGFwZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgyNDBdLCAiZjFlYSIsICJNMCA0MTZMMCAxMjBjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDI4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0TDk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjR6TTE2MCAxMjhsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0yNCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0MCAwem0tMjQtNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI0MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzYwIDE3NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAweiJdCiAgICB9OwogICAgZmFDbG91ZFJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQtcmFpbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc4MywgOTkyNl0sICJmNzNkIiwgIk05NiAzMjBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDMyMHptMS42IDY4LjJjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2bDMwLjItNjguMnptMTUyIDBjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2bDMwLjItNjguMnptMTIxLjggNjguMmwzMC4yLTY4LjJjMS4xLTIuNSAzLjYtNC4yIDYuNC00LjJzNS4zIDEuNiA2LjQgNC4ybDMwLjIgNjguMmMyLjIgNS4xIDMuNCAxMC41IDMuNCAxNiAwIDIxLjktMTguMSAzOS42LTQwIDM5LjZzLTQwLTE3LjctNDAtMzkuNmMwLTUuNSAxLjItMTEgMy40LTE2eiJdCiAgICB9OwogICAgZmFNYXhpbWl6ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXhpbWl6ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJleHBhbmQtYXJyb3dzLWFsdCJdLCAiZjMxZSIsICJNMTY4IDMyTDI0IDMyQzEwLjcgMzIgMCA0Mi43IDAgNTZMMCAyMDBjMCA5LjcgNS44IDE4LjUgMTQuOCAyMi4yUzM0LjEgMjIzLjggNDEgMjE3bDQwLTQwIDc5IDc5LTc5IDc5LTQwLTQwYy02LjktNi45LTE3LjItOC45LTI2LjItNS4yUzAgMzAyLjMgMCAzMTJMMCA0NTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjOS43IDAgMTguNS01LjggMjIuMi0xNC44czEuNy0xOS4zLTUuMi0yNi4ybC00MC00MCA3OS03OSA3OSA3OS00MCA0MGMtNi45IDYuOS04LjkgMTcuMi01LjIgMjYuMlMyNzAuMyA0ODAgMjgwIDQ4MGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTE0NGMwLTkuNy01LjgtMTguNS0xNC44LTIyLjJzLTE5LjMtMS43LTI2LjIgNS4ybC00MCA0MC03OS03OSA3OS03OSA0MCA0MGM2LjkgNi45IDE3LjIgOC45IDI2LjIgNS4yUzQ0OCAyMDkuNyA0NDggMjAwbDAtMTQ0YzAtMTMuMy0xMC43LTI0LTI0LTI0TDI4MCAzMmMtOS43IDAtMTguNSA1LjgtMjIuMiAxNC44UzI1Ni4yIDY2LjEgMjYzIDczbDQwIDQwLTc5IDc5LTc5LTc5IDQwLTQwYzYuOS02LjkgOC45LTE3LjIgNS4yLTI2LjJTMTc3LjcgMzIgMTY4IDMyeiJdCiAgICB9OwogICAgZmFFeHBhbmRBcnJvd3NBbHQgPSBmYU1heGltaXplOwogICAgZmFMb2NhdGlvbkFycm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2F0aW9uLWFycm93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxMjQiLCAiTTQ3Ny45IDc1LjVjNC41LTExLjggMS43LTI1LjItNy4yLTM0LjFzLTIyLjMtMTEuOC0zNC4xLTcuMmwtNDE2IDE2MEM3LjkgMTk5LS4zIDIxMS4yIDAgMjI0LjdzOS4xIDI1LjQgMjEuOSAyOS42bDE3Ni44IDU4LjkgNTguOSAxNzYuOGM0LjMgMTIuOCAxNi4xIDIxLjYgMjkuNiAyMS45czI1LjctNy45IDMwLjYtMjAuNWwxNjAtNDE2eiJdCiAgICB9OwogICAgZmFDaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpdHkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5NjFdLCAiZjY0ZiIsICJNMzIwIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMzItNDggMCAwLTcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNzItNjQgMCAwLTcyQzk2IDEwLjcgODUuMyAwIDcyIDBTNDggMTAuNyA0OCAyNGwwIDc0Yy0yNy42IDcuMS00OCAzMi4yLTQ4IDYyTDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC02NCAwIDAtMTI4YzAtMzUuMy0yOC43LTY0LTY0LTY0TDMyMCAwem02NCAxMTJsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnptLTE2IDgwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6bTE2IDExMmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2em0xMTItMTZjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMHpNMjU2IDMwNGwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2ek0yNDAgMTkyYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDB6TTEyOCAzMDRsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnpNMTEyIDE5MmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAweiJdCiAgICB9OwogICAgZmFYUmF5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIngtcmF5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0OTciLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAzMjBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjR6bTI4MCA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE2LTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMCAwIDQ4LTgwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsODAgMCAwIDQ4LTY0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjQgMCAwIDE2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNiA2NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwIDAtNDggODAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODAgMCAwLTQ4IDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTY0IDAgMC0xNnoiXQogICAgfTsKICAgIGZhVW1icmVsbGFCZWFjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1bWJyZWxsYS1iZWFjaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk1OF0sICJmNWNhIiwgIk00OTcuNSAzNDEuMWMtNS45IDE2LjctMjUuMyAyMy00MS4xIDE1LjFsLTE3OC4yLTg5LjEtMS42IDMuMi04OC44IDE3Ny43IDI5Mi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDg0LjIgMCAxMDMuMi0yMDYuMyAxLjYtMy4yLTE2NS40LTgyLjdjLTE1LjgtNy45LTIyLjQtMjcuMy0xMi41LTQyIDQ1LjktNjguNiAxMjQuMS0xMTMuOCAyMTIuOS0xMTMuOCAxNDEuNCAwIDI1NiAxMTQuNiAyNTYgMjU2IDAgMjkuOC01LjEgNTguNS0xNC41IDg1LjF6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRUb0JyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtdG8tYnJhY2tldCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWluIl0sICJmMDkwIiwgIk0zNTIgOTZsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzUzIDAgOTYtNDMgOTYtOTZsMC0yNTZjMC01My00My05Ni05Ni05NmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptLTkuNCAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMjQyLjcgMjI0IDMyIDIyNGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMTAuNyAwLTczLjQgNzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFTaWduSW4gPSBmYUFycm93UmlnaHRUb0JyYWNrZXQ7CiAgICBmYUhlYWRzZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhZHNldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTkwIiwgIk0yMjQgNjRjLTc5IDAtMTQ0LjcgNTcuMy0xNTcuNyAxMzIuNyA5LjMtMyAxOS4zLTQuNyAyOS43LTQuN2wxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDBjLTUzIDAtOTYtNDMtOTYtOTZsMC02NEMwIDEwMC4zIDEwMC4zIDAgMjI0IDBTNDQ4IDEwMC4zIDQ0OCAyMjRsMCAxNjguMWMwIDY2LjMtNTMuOCAxMjAtMTIwLjEgMTIwbC04Ny45LS4xLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4czIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDAgNDAgMGMzOS44IDAgNzItMzIuMiA3Mi03MmwwLTIwLjljLTE0LjEgOC4yLTMwLjUgMTIuOC00OCAxMi44bC0xNiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDE2IDBjMTAuNCAwIDIwLjMgMS42IDI5LjcgNC43LTEzLTc1LjMtNzguNi0xMzIuNy0xNTcuNy0xMzIuN3oiXQogICAgfTsKICAgIGZhU3Bsb3RjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcGxvdGNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmMiLCAiTTIwOC41IDYyLjNsMjguMS0zNi45QzI0OC44IDkuNCAyNjcuOCAwIDI4OCAwIDMxNi41IDAgMzQxLjYgMTguNyAzNDkuOCA0NmwxNy44IDU5LjRjMTAuMyAzNC40IDM2LjEgNjIgNjkuOCA3NC42bDM5LjggMTQuOWMyMC45IDcuOSAzNC44IDI3LjkgMzQuOCA1MC4yIDAgMTYuOS03LjkgMzIuOC0yMS41IDQyLjlsLTY3LjMgNTAuNWMtMjQuMyAxOC4yLTM3LjIgNDcuOS0zMy44IDc4LjFsMi41IDIyLjdjNC4zIDM4LjctMjYgNzIuNi02NSA3Mi42LTE0LjggMC0yOS4zLTUuMS00MC45LTE0LjNsLTU1LjMtNDQuM2MtNC41LTMuNi05LjMtNi43LTE0LjUtOS4yLTE1LjgtNy45LTMzLjctMTAuNC01MS03LjNMODIuNCA0NTEuOWMtMzQuNiA2LjMtNjYuNC0yMC4zLTY2LjQtNTUuNCAwLTEzLjIgNC43LTI2IDEzLjEtMzYuMmwxMS4yLTEzLjRjMTQuNi0xNy40IDIyLjYtMzkuNCAyMi42LTYyLjEgMC0xOC44LTUuNS0zNy4yLTE1LjgtNTNMOC44IDE3My41QzMuMSAxNjQuNyAwIDE1NC40IDAgMTQzLjkgMCAxMTAuNSAzMC4xIDg1LjEgNjMgOTAuN2w1MS4zIDguN2MzNS45IDYuMSA3Mi4yLTguMiA5NC4yLTM3LjF6Il0KICAgIH07CiAgICBmYVVwTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctYWx0LXVwIl0sICJmMzBjIiwgIk0xMzcuNC0yMi42YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDEyOCAxMjhjOS4yIDkuMiAxMS45IDIyLjkgNi45IDM0LjlTMzAwLjkgMTYwIDI4OCAxNjBsLTY0IDAgMCAzMzZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMzM2LTY0IDBjLTEyLjkgMC0yNC42LTcuOC0yOS42LTE5LjhTLjIgMTE0LjUgOS40IDEwNS40bDEyOC0xMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdFVwID0gZmFVcExvbmc7CiAgICBmYUhleGFnb25Ob2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZXhhZ29uLW5vZGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU2OTkiLCAiTTI0OCAxMDYuNmMxOC45LTkgMzItMjguMyAzMi01MC42YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2YzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTIuOCAxLjMtNS41IDIuOS04IDQuN2wtODAuMS00NS44YzEuNi0yMC44LTguNi00MS42LTI3LjktNTIuOEM1Ny4yIDk2IDIzIDEwNS4yIDcuNSAxMzJTMS4yIDE5MyAyOCAyMDguNWMxLjMgLjggMi42IDEuNSA0IDIuMWwwIDkwLjhjLTEuMyAuNi0yLjcgMS4zLTQgMi4xQzEuMiAzMTktOCAzNTMuMiA3LjUgMzgwUzU3LjIgNDE2IDg0IDQwMC41YzE5LjMtMTEuMSAyOS40LTMyIDI3LjgtNTIuOGw1MC41LTI4LjljLTExLjUtMTEuMi0xOS45LTI1LjYtMjMuOC00MS43TDg4IDMwNi4xYy0yLjYtMS44LTUuMi0zLjMtOC00LjdsMC05MC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLS4xIDEuNC0uMiAyLjgtLjIgNC4zYzAgMjIuMyAxMy4xIDQxLjYgMzIgNTAuNmwwIDk4LjhjLTE4LjkgOS0zMiAyOC4zLTMyIDUwLjZjMCAzMC45IDI1LjEgNTYgNTYgNTZzNTYtMjUuMSA1Ni01NmMwLTIyLjMtMTMuMS00MS42LTMyLTUwLjZsMC05OC44YzIuOC0xLjMgNS41LTIuOSA4LTQuN2w4MC4xIDQ1LjhjLTEuNiAyMC44IDguNiA0MS42IDI3LjggNTIuOGMyNi44IDE1LjUgNjEgNi4zIDc2LjUtMjAuNXM2LjMtNjEtMjAuNS03Ni41Yy0xLjMtLjgtMi43LTEuNS00LTIuMWwwLTkwLjhjMS40LS42IDIuNy0xLjMgNC0yLjFjMjYuOC0xNS41IDM2LTQ5LjcgMjAuNS03Ni41UzM5MC44IDk2IDM2NCAxMTEuNWMtMTkuMyAxMS4xLTI5LjQgMzItMjcuOCA1Mi44bC01MC42IDI4LjljMTEuNSAxMS4yIDE5LjkgMjUuNiAyMy44IDQxLjdMMzYwIDIwNS45YzIuNiAxLjggNS4yIDMuMyA4IDQuN2wwIDkwLjhjLTIuOCAxLjMtNS41IDIuOS04IDQuNmwtODAuMS00NS44Yy4xLTEuNCAuMi0yLjggLjItNC4zYzAtMjIuMy0xMy4xLTQxLjYtMzItNTAuNmwwLTk4Ljh6Il0KICAgIH07CiAgICBmYUhvc3BpdGFsMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3NwaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3MywgNjI1ODksICJob3NwaXRhbC1hbHQiLCAiaG9zcGl0YWwtd2lkZSJdLCAiZjBmOCIsICJNMTI4IDY0YzAtMzUuMyAyOC43LTY0IDY0LTY0TDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjQgNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTkyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMC02NHpNMjcyIDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA4MCA5NiAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDB6TTEyOCAzNjhsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNMTEyIDI1NmM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwek01MTIgMzY4bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHpNMjY0IDEwNGwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnoiXQogICAgfTsKICAgIGZhSG9zcGl0YWxBbHQyID0gZmFIb3NwaXRhbDI7CiAgICBmYUhvc3BpdGFsV2lkZTIgPSBmYUhvc3BpdGFsMjsKICAgIGZhUGVyc29uSGFyYXNzaW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1oYXJhc3NpbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU0OSIsICJNMTkyIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNNTkuNCAzMDQuNUw4OCAyNTYuOSA4OCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNDQuNyA0Ny40IDU3LjFjMTEuMyAxMy42IDMxLjUgMTUuNSA0NS4xIDQuMnMxNS41LTMxLjUgNC4yLTQ1LjFsLTczLjctODguOWMtMTguMi0yMi00NS4zLTM0LjctNzMuOS0zNC43bC0zNS45IDBjLTMzLjcgMC02NC45IDE3LjctODIuMyA0Ni42bC01OC4zIDk3Yy05LjEgMTUuMS00LjIgMzQuOCAxMC45IDQzLjlzMzQuOCA0LjIgNDMuOS0xMC45ek00ODAgMjQwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTQ2NCAzNDRsMCA1OC43LTQxLjQtNDEuNGMtNy4zLTcuMy0xNy42LTEwLjYtMjcuOC05cy0xOC45IDguMS0yMy41IDE3LjNsLTQ4IDk2Yy03LjkgMTUuOC0xLjUgMzUgMTQuMyA0Mi45czM1IDEuNSA0Mi45LTE0LjNsMjguMS01Ni4zIDU0LjcgNTQuN2MxMi40IDEyLjQgMjkuMSAxOS4zIDQ2LjYgMTkuMyAzNi40IDAgNjUuOS0yOS41IDY1LjktNjUuOUw1NzYgMzQ0YzAtMzAuOS0yNS4xLTU2LTU2LTU2cy01NiAyNS4xLTU2IDU2ek0yODggNDhjMCA4LjggNy4yIDE2IDE2IDE2bDU2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTU2IDBjLTguOCAwLTE2IDcuMi0xNiAxNnptLS44IDQ5LjdjLTcuOS00LTE3LjUtLjctMjEuNSA3LjJzLS43IDE3LjUgNy4yIDIxLjVsNDggMjRjNy45IDQgMTcuNSAuNyAyMS41LTcuMnMuNy0xNy41LTcuMi0yMS41bC00OC0yNHoiXQogICAgfTsKICAgIGZhTW9uZXlCaWxsVHJlbmRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXRyZW5kLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjkiLCAiTTQ4MCA4YzAtMTMuMy0xMC43LTI0LTI0LTI0TDM1NC4yLTE2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQzLjkgMC0xMTEuMyAxMTEuMy05NS4xLTgxLjVjLTktNy43LTIyLjItNy43LTMxLjIgMGwtMTEyIDk2Yy0xMC4xIDguNi0xMS4yIDIzLjgtMi42IDMzLjhzMjMuOCAxMS4yIDMzLjggMi42bDk2LjQtODIuNiA5Ni40IDgyLjZjOS41IDguMiAyMy43IDcuNiAzMi42LTEuM2wxMjctMTI3IDAgNDMuOWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0TDQ4MCA4ek00OCAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDQxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTYwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDI1NnptNDcuMyA1NmMtMy40IDIwLjEtMTkuMiAzNi0zOS40IDM5LjQtNC40IC43LTgtMi45LTgtNy4zbDAtMzJjMC00LjQgMy42LTggOC04bDMyIDBjNC40IDAgOC4xIDMuNiA3LjMgOHptMCAxNDQuMWMuNyA0LjQtMi45IDgtNy4zIDhsLTMyIDBjLTQuNCAwLTgtMy42LTgtOGwwLTMyYzAtNC40IDMuNi04LjEgOC03LjMgMjAuMSAzLjQgMzYgMTkuMiAzOS40IDM5LjR6TTQ1NiA0MTYuN2M0LjQtLjcgOCAyLjkgOCA3LjNsMCAzMmMwIDQuNC0zLjYgOC04IDhsLTMyIDBjLTQuNCAwLTguMS0zLjYtNy4zLTggMy40LTIwLjEgMTkuMi0zNiAzOS40LTM5LjR6TTQxNi43IDMxMmMtLjctNC40IDIuOS04IDcuMy04bDMyIDBjNC40IDAgOCAzLjYgOCA4bDAgMzJjMCA0LjQtMy42IDguMS04IDcuMy0yMC4xLTMuNC0zNi0xOS4yLTM5LjQtMzkuNHpNMTkyIDM4NGE2NCA2NCAwIDEgMSAxMjggMCA2NCA2NCAwIDEgMSAtMTI4IDB6Il0KICAgIH07CiAgICBmYVBlblJ1bGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1ydWxlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwZW5jaWwtcnVsZXIiXSwgImY1YWUiLCAiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek01OC45IDMxNS4xTDI3NC4xIDEwMCA0MTIgMjM3LjkgMTk2LjkgNDUzLjFjLTEwLjcgMTAuNy0yNC4xIDE4LjUtMzguNyAyMi42TDMwLjQgNTExLjFjLTguMyAyLjMtMTcuMyAwLTIzLjQtNi4ycy04LjUtMTUuMS02LjItMjMuNEwzNi40IDM1My44YzQuMS0xNC42IDExLjgtMjcuOSAyMi42LTM4Ljd6TTIyNS40IDgwLjhMODAuOCAyMjUuNCAxMS43IDE1Ni4zYy0xNS42LTE1LjYtMTUuNi00MC45IDAtNTYuNmw4OC04OGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMGw1LjkgNS45LTU2LjMgNTYuM2MtNy44IDcuOC03LjggMjAuNSAwIDI4LjNzMjAuNSA3LjggMjguMyAwbDU2LjMtNTYuMyAzNC45IDM0Ljl6TTQzMS4yIDI4Ni42bDM0LjkgMzQuOS01Ni4zIDU2LjNjLTcuOCA3LjgtNy44IDIwLjUgMCAyOC4zczIwLjUgNy44IDI4LjMgMGw1Ni4zLTU2LjMgNS45IDUuOWMxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNmwtODggODhjLTE1LjYgMTUuNi00MC45IDE1LjYtNTYuNiAwbC02OS4xLTY5LjEgMTQ0LjYtMTQ0LjZ6Il0KICAgIH07CiAgICBmYVBlbmNpbFJ1bGVyID0gZmFQZW5SdWxlcjsKICAgIGZhUmVwZWF0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcGVhdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI1N10sICJmMzYzIiwgIk00NzAuNiAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM1MiAxOS4xIDM1MiAzMmwwIDMyLTE2MCAwQzg2IDY0IDAgMTUwIDAgMjU2IDAgMjczLjcgMTQuMyAyODggMzIgMjg4czMyLTE0LjMgMzItMzJjMC03MC43IDU3LjMtMTI4IDEyOC0xMjhsMTYwIDAgMCAzMmMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42czI1LjcgMi4yIDM0LjktNi45bDY0LTY0ek00MS40IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2w2NCA2NGM5LjIgOS4yIDIyLjkgMTEuOSAzNC45IDYuOVMxNjAgNDkyLjkgMTYwIDQ4MGwwLTMyIDE2MCAwYzEwNiAwIDE5Mi04NiAxOTItMTkyIDAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMyYzAgNzAuNy01Ny4zIDEyOC0xMjggMTI4bC0xNjAgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NHoiXQogICAgfTsKICAgIGZhQm9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib25lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5NDYwXSwgImY1ZDciLCAiTTE5Ny40IDE2MGMtMy45IDAtNy4yLTIuOC04LjEtNi42LTEwLjItNDIuMS00OC4xLTczLjQtOTMuMy03My40LTUzIDAtOTYgNDMtOTYgOTYgMCAyOS4xIDEyLjkgNTUuMSAzMy4zIDcyLjcgNC4zIDMuNyA0LjMgMTAuOCAwIDE0LjUtMjAuNCAxNy42LTMzLjMgNDMuNy0zMy4zIDcyLjcgMCA1MyA0MyA5NiA5NiA5NiA0NS4yIDAgODMuMS0zMS4zIDkzLjMtNzMuNCAuOS0zLjggNC4yLTYuNiA4LjEtNi42bDI0NS4xIDBjMy45IDAgNy4yIDIuOCA4LjEgNi42IDEwLjIgNDIuMSA0OC4xIDczLjQgOTMuMyA3My40IDUzIDAgOTYtNDMgOTYtOTYgMC0yOS4xLTEyLjktNTUuMS0zMy4zLTcyLjctNC4zLTMuNy00LjMtMTAuOCAwLTE0LjUgMjAuNC0xNy42IDMzLjMtNDMuNyAzMy4zLTcyLjcgMC01My00My05Ni05Ni05Ni00NS4yIDAtODMuMSAzMS4zLTkzLjMgNzMuNC0uOSAzLjgtNC4yIDYuNi04LjEgNi42bC0yNDUuMSAweiJdCiAgICB9OwogICAgZmFGaXJlRmxhbWVDdXJ2ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZS1mbGFtZS1jdXJ2ZWQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmlyZS1hbHQiXSwgImY3ZTQiLCAiTTE1My42IDI5LjlsMTYtMjEuM0MxNzMuNiAzLjIgMTgwIDAgMTg2LjcgMCAxOTguNCAwIDIwOCA5LjYgMjA4IDIxLjNsMCAyMi4xYzAgMTMuMSA1LjQgMjUuNyAxNC45IDM0LjdMMzA3LjYgMTU5QzM1Ni40IDIwNS42IDM4NCAyNzAuMiAzODQgMzM3LjcgMzg0IDQzNCAzMDYgNTEyIDIwOS43IDUxMkwxOTIgNTEyQzg2IDUxMiAwIDQyNiAwIDMyMGwwLTMuOGMwLTQ4LjggMTkuNC05NS42IDUzLjktMTMwLjFsMy41LTMuNWM0LjItNC4yIDEwLTYuNiAxNi02LjYgMTIuNSAwIDIyLjYgMTAuMSAyMi42IDIyLjZMOTYgMjg4YzAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRsMC0zLjljMC0xOC03LjItMzUuMy0xOS45LTQ4bC0zOC42LTM4LjZjLTI0LTI0LTM3LjUtNTYuNy0zNy41LTkwLjcgMC0yNy43IDktNTQuOCAyNS42LTc2Ljl6Il0KICAgIH07CiAgICBmYUZpcmVBbHQgPSBmYUZpcmVGbGFtZUN1cnZlZDsKICAgIGZhQnVzU2ltcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cy1zaW1wbGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiYnVzLWFsdCJdLCAiZjU1ZSIsICJNOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDM4NGMwIDI5LjggMjAuNCA1NC45IDQ4IDYybDAgMzRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDE5MiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTM0YzI3LjYtNy4xIDQ4LTMyLjIgNDgtNjJsMC0yODhjMC01My00My05Ni05Ni05Nkw5NiAwek02NCAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiAyNTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZ6TTk2IDMyMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI1NiAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQnVzQWx0ID0gZmFCdXNTaW1wbGU7CiAgICBmYVZlbnVzTWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZW51cy1tYXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbOTg5Ml0sICJmMjI4IiwgIk00ODAtNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyUzQ2Mi4zIDAgNDgwIDBMNTMwLjcgMCA0NzQgNTYuN2MtMjYuMy0xNS43LTU3LjEtMjQuNy05MC0yNC43LTM1LjQgMC02OC40IDEwLjUtOTYgMjguNS0yNy42LTE4LTYwLjYtMjguNS05Ni0yOC41LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzIzLjMtNC4zIDQ0LjktMTMuMSA2NC0yNS42IDI3LjYgMTggNjAuNiAyOC41IDk2IDI4LjUgOTcuMiAwIDE3Ni03OC44IDE3Ni0xNzYgMC00MS4xLTE0LjEtNzktMzcuOC0xMDlMNTc2IDQ1LjMgNTc2IDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMNDgwLTY0ek0zMzYgMzA5LjJjMjAuMi0yOC42IDMyLTYzLjUgMzItMTAxLjJzLTExLjgtNzIuNi0zMi0xMDEuMmMxNC42LTYuOSAzMC44LTEwLjggNDgtMTAuOCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMlM0NDUuOSAzMjAgMzg0IDMyMGMtMTcuMiAwLTMzLjUtMy45LTQ4LTEwLjh6TTI4OCAxNTAuM2MxMC4yIDE2LjkgMTYgMzYuNiAxNiA1Ny43cy01LjggNDAuOS0xNiA1Ny43Yy0xMC4yLTE2LjktMTYtMzYuNi0xNi01Ny43czUuOC00MC45IDE2LTU3Ljd6bS00OC00My41Yy0yMC4yIDI4LjYtMzIgNjMuNS0zMiAxMDEuMnMxMS44IDcyLjYgMzIgMTAxLjJjLTE0LjUgNi45LTMwLjggMTAuOC00OCAxMC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyUzEzMC4xIDk2IDE5MiA5NmMxNy4yIDAgMzMuNSAzLjkgNDggMTAuOHoiXQogICAgfTsKICAgIGZhQmxlbmRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibGVuZGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1MTciLCAiTTAgNTZDMCAyNS4xIDI1LjEgMCA1NiAwTDQzNy42IDBjMjEuMyAwIDM2LjYgMjAuMyAzMC44IDQwLjhMNDU3LjEgODAgMzQ0IDgwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDk5LjQgMC0xOC4zIDY0LTgxLjEgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw2Ny40IDAtMjcuNCA5Ni0yNTYgMC05LjEtOTYtNjIuOSAwYy0zMC45IDAtNTYtMjUuMS01Ni01NkwwIDU2ek0xMTQuMyAxOTJMMTAwLjYgNDggNTYgNDhjLTQuNCAwLTggMy42LTggOGwwIDEyOGMwIDQuNCAzLjYgOCA4IDhsNTguMyAwek0xMzYgMzg0bDI0MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTI0MCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwem0xMjAgODhhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFVID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMTddLCAiNTUiLCAiTTMyIDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0YzAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjhsMC0yMjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDIyNGMwIDEwNi04NiAxOTItMTkyIDE5MlMwIDM5NCAwIDI4OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFTaGFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtYWlsLWZvcndhcmQiXSwgImYwNjQiLCAiTTMwNy44IDE4LjRjLTEyIDUtMTkuOCAxNi42LTE5LjggMjkuNmwwIDgwLTExMiAwYy05Ny4yIDAtMTc2IDc4LjgtMTc2IDE3NiAwIDExMy4zIDgxLjUgMTYzLjkgMTAwLjIgMTc0LjEgMi41IDEuNCA1LjMgMS45IDguMSAxLjkgMTAuOSAwIDE5LjctOC45IDE5LjctMTkuNyAwLTcuNS00LjMtMTQuNC05LjgtMTkuNS05LjQtOC44LTIyLjItMjYuNC0yMi4yLTU2LjcgMC01MyA0My05NiA5Ni05Nmw5NiAwIDAgODBjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWwxNjAtMTYwYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwYy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOXoiXQogICAgfTsKICAgIGZhTWFpbEZvcndhcmQgPSBmYVNoYXJlOwogICAgZmFQaG9uZUZsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGhvbmUtZmxpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM4MSwgInBob25lLWFsdCJdLCAiZjg3OSIsICJNMzUxLjggMjVjNy44LTE4LjggMjguNC0yOC45IDQ4LjEtMjMuNWw1LjUgMS41YzY0LjYgMTcuNiAxMTkuOCA4MC4yIDEwMy43IDE1Ni40LTM3LjEgMTc1LTE3NC44IDMxMi43LTM0OS44IDM0OS44LTc2LjMgMTYuMi0xMzguOC0zOS4xLTE1Ni40LTEwMy43bC0xLjUtNS41Yy01LjQtMTkuNyA0LjctNDAuMyAyMy41LTQ4LjFsOTcuMy00MC41YzE2LjUtNi45IDM1LjYtMi4xIDQ3IDExLjhsMzguNiA0Ny4yYzcwLjMtMzQuOSAxMjYuOC05My4zIDE1OS4zLTE2NC45bC00NC4xLTM2LjFjLTEzLjktMTEuMy0xOC42LTMwLjQtMTEuOC00N0wzNTEuOCAyNXoiXQogICAgfTsKICAgIGZhUGhvbmVBbHQgPSBmYVBob25lRmxpcDsKICAgIGZhVG9pbGV0UG9ydGFibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBvcnRhYmxlIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU1ODMiLCAiTTAgNjRsMCAxNiAzMjAgMCAwLTE2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDBDMjguNyAwIDAgMjguNyAwIDY0em0yNCA2NEwwIDEyOCAwIDQ4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAyMjQgMCAwIDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTM2MC0yOTYgMHptMjI0IDk2bDI0IDAgMCA5Ni0yNCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQZXJzb25QcmVnbmFudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcHJlZ25hbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTMxZSIsICJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyem04MCAzMjEuMmM4LjYtNC41IDE2LjgtMTAgMjQuMy0xNi41bDQtMy40YzIyLjYtMTkuNCAzNS43LTQ3LjcgMzUuNy03Ny42IDAtMzUuOS0xOC44LTY5LjEtNDkuNi04Ny42bC0zMC40LTE4LjIgMC0xLjhjMC00Ni41LTM3LjctODQuMS04NC4xLTg0LjEtMjguMSAwLTU0LjQgMTQuMS03MCAzNy41TDIxLjQgMjcwLjJjLTkuOCAxNC43LTUuOCAzNC42IDguOSA0NC40czM0LjYgNS44IDQ0LjQtOC45bDI5LTQzLjUtMzAuNSAxMTMuNWMtMi42IDkuNi0uNiAxOS45IDUuNSAyNy44Uzk0IDQxNiAxMDQgNDE2bDggMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NiAzMiAwIDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMC44eiJdCiAgICB9OwogICAgZmFMZXNzVGhhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZXNzLXRoYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2Mjc3NF0sICIzYyIsICJNNDc3LjEgNTAuNmM3LjQgMTYgLjQgMzUuMS0xNS42IDQyLjVMMTA4LjQgMjU2IDQ2MS40IDQxOWMxNiA3LjQgMjMgMjYuNCAxNS42IDQyLjVzLTI2LjQgMjMtNDIuNSAxNS42bC00MTYtMTkyQzcuMyAyNzkuOCAwIDI2OC41IDAgMjU2UzcuMyAyMzIuMiAxOC42IDIyN2w0MTYtMTkyYzE2LTcuNCAzNS4xLS40IDQyLjUgMTUuNnoiXQogICAgfTsKICAgIGZhU3VwZXJzY3JpcHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VwZXJzY3JpcHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyYiIsICJNNTQ0IDMyYzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40bC0zMiAxNkM0NDkuOSAyNy4zIDQ0My41IDQ2LjUgNDUxLjQgNjIuMyA0NTcgNzMuNSA0NjguMyA4MCA0ODAgODBsMCA4MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTI4ek05NiA2NEM3OC4zIDY0IDY0IDc4LjMgNjQgOTZzMTQuMyAzMiAzMiAzMmwxNS4zIDAgODkuNiAxMjgtODkuNiAxMjgtMTUuMyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTAuNCAwIDIwLjItNS4xIDI2LjItMTMuNkwyNDAgMzExLjggMzI1LjggNDM0LjRjNiA4LjYgMTUuOCAxMy42IDI2LjIgMTMuNmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNS4zIDAtODkuNi0xMjggODkuNi0xMjggMTUuMyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwYy0xMC40IDAtMjAuMiA1LjEtMjYuMiAxMy42TDI0MCAyMDAuMiAxNTQuMiA3Ny42QzE0OC4yIDY5LjEgMTM4LjQgNjQgMTI4IDY0TDk2IDY0eiJdCiAgICB9OwogICAgZmFDaXJjbGVTdG9wMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtc3RvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk0LCAic3RvcC1jaXJjbGUiXSwgImYyOGQiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xOTIgMTYwbDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVN0b3BDaXJjbGUyID0gZmFDaXJjbGVTdG9wMjsKICAgIGZhQXJyb3dzVXBEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy11cC1kb3duIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbImFycm93cy12Il0sICJmMDdkIiwgIk0xNTAuNi0yMi42Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgNzcuMyA5NiA0MzQuNyA1NC42IDM5My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w5NiA5NmM2IDYgMTQuMSA5LjQgMjIuNiA5LjRzMTYuNi0zLjQgMjIuNi05LjRsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTQxLjQgNDEuNCAwLTM1Ny41IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnoiXQogICAgfTsKICAgIGZhQXJyb3dzViA9IGZhQXJyb3dzVXBEb3duOwogICAgZmFQb29TdG9ybSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwb28tc3Rvcm0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicG9vLWJvbHQiXSwgImY3NWEiLCAiTTI2OC45LTMxLjhjLTUuNS0uNy0xMSAxLjQtMTQuNSA1LjdzLTQuNiAxMC4xLTIuOCAxNS4zYzIuOCA4LjIgNC4zIDE2LjkgNC4zIDI2LjEgMCAyMS43LTguNSAzNy4yLTIxLjkgNDcuNi0xMy45IDEwLjgtMzQuMSAxNy01OC4xIDE3bC0yNCAwYy00OC42IDAtODggMzkuNC04OCA4OCAwIDE0LjggMy43IDI4LjggMTAuMiA0MS4xLTQyIDYuNi03NC4yIDQzLTc0LjIgODYuOSAwIDQ2LjYgMzYuMiA4NC43IDgxLjkgODcuOCAzLjEtMTIuNCA5LjktMjMuOCAxOS42LTMyLjVMMjQyLjcgMjI1YzEyLjItMTAuOSAyOC0xNyA0NC40LTE3IDQ0LjYgMCA3Ni41IDQzIDYzLjcgODUuN2wtMTIuNyA0Mi40YzI4LjggMS4yIDUyLjcgMjEuMSA1OS44IDQ3LjlsMjYuMiAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4IDAtNDMuOS0zMi4xLTgwLjMtNzQuMi04Ni45IDYuNS0xMi4zIDEwLjItMjYuMiAxMC4yLTQxLjEgMC00OC42LTM5LjQtODgtODgtODhsLTkuNCAwYy45LTUuNCAxLjQtMTAuOSAxLjQtMTYuNiAwLTQ4LjctMzYuMS04OC45LTgzLjEtOTUuMnpNMTQ0LjYgNDE2bDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzQ2LjUgNDEyLjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDEzMy41IDM4Ny4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdCiAgICB9OwogICAgZmFQb29Cb2x0ID0gZmFQb29TdG9ybTsKICAgIGZhVmlkZW9TbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWRlby1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGUyIiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xNTMtMTUzIDAtMjIyLjJjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI5LjggNjQgNDEtMjQuOXpNMzIgMTI4bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzcuOCAwIDE1LjMtMS40IDIyLjItNEwzNiAxMDUuOGMtMi42IDYuOS00IDE0LjQtNCAyMi4yek00NjQgMzM2bDczLjUgNTguOGM0LjIgMy40IDkuNCA1LjIgMTQuOCA1LjIgMTMuMSAwIDIzLjctMTAuNiAyMy43LTIzLjdsMC0yNDAuNmMwLTEzLjEtMTAuNi0yMy43LTIzLjctMjMuNy01LjQgMC0xMC42IDEuOC0xNC44IDUuMkw0NjQgMTc2IDQ2NCAzMzZ6Il0KICAgIH07CiAgICBmYVNxdWFyZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS14bWFyayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDYyLCAidGltZXMtc3F1YXJlIiwgInhtYXJrLXNxdWFyZSJdLCAiZjJkMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFUaW1lc1NxdWFyZSA9IGZhU3F1YXJlWG1hcms7CiAgICBmYVhtYXJrU3F1YXJlID0gZmFTcXVhcmVYbWFyazsKICAgIGZhSGFuZEhvbGRpbmdEcm9wbGV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1kcm9wbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhhbmQtaG9sZGluZy13YXRlciJdLCAiZjRjMSIsICJNMjc1LjUgNi42TDIwOS4yIDEwM0MxOTggMTE5LjMgMTkyIDEzOC42IDE5MiAxNTguM2wwIDEuN2MwIDUzIDQzIDk2IDk2IDk2czk2LTQzIDk2LTk2bDAtMS43YzAtMTkuOC02LTM5LTE3LjItNTUuM0wzMDAuNSA2LjZDMjk3LjcgMi41IDI5MyAwIDI4OCAwcy05LjcgMi41LTEyLjUgNi42ek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdXYXRlciA9IGZhSGFuZEhvbGRpbmdEcm9wbGV0OwogICAgZmFXb25TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndvbi1zaWduIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODM2MSwgImtydyIsICJ3b24iXSwgImYxNTkiLCAiTTYyLjQgNTMuOUM1Ni44IDM3LjEgMzguNyAyOC4xIDIxLjkgMzMuNlMtMy45IDU3LjQgMS43IDc0LjFMNTYuOSAyNDAgMzIgMjQwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwLjkgMCA1Ni43IDE3MC4xYzQuNSAxMy41IDE3LjQgMjIuNCAzMS42IDIxLjlzMjYuNC0xMC40IDI5LjgtMjQuMkwyMzMgMjg4IDI3OSAyODggMzIxIDQ1NS44YzMuNCAxMy44IDE1LjYgMjMuNyAyOS44IDI0LjJzMjcuMS04LjQgMzEuNi0yMS45TDQzOS4xIDI4OCA0ODAgMjg4YzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNC45IDAgNTUuMy0xNjUuOWM1LjYtMTYuOC0zLjUtMzQuOS0yMC4yLTQwLjVzLTM0LjkgMy41LTQwLjUgMjAuMmwtNjIgMTg2LjEtNTQuNiAwLTQ1LjktMTgzLjhDMjgzLjUgNDIgMjcwLjcgMzIgMjU2IDMycy0yNy41IDEwLTMxIDI0LjJMMTc5IDI0MCAxMjQuNCAyNDAgNjIuNCA1My45em03OCAyMzQuMWwyNi42IDAtMTEuNCA0NS42LTE1LjItNDUuNnpNMjQ1IDI0MGwxMS00NC4xIDExIDQ0LjEtMjIgMHptMTAwIDQ4bDI2LjYgMC0xNS4yIDQ1LjYtMTEuNC00NS42eiJdCiAgICB9OwogICAgZmFLcncgPSBmYVdvblNpZ247CiAgICBmYVdvbiA9IGZhV29uU2lnbjsKICAgIGZhT2JqZWN0VW5ncm91cDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib2JqZWN0LXVuZ3JvdXAiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjI0OCIsICJNMzIgMTE5LjRDMTIuOSAxMDguNCAwIDg3LjcgMCA2NCAwIDI4LjcgMjguNyAwIDY0IDAgODcuNyAwIDEwOC40IDEyLjkgMTE5LjQgMzJsMjA5LjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDExMy4xYzE5LjEgMTEuMSAzMiAzMS43IDMyIDU1LjQgMCAzNS4zLTI4LjcgNjQtNjQgNjQtMjMuNyAwLTQ0LjQtMTIuOS01NS40LTMybC0yMDkuMSAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMyLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNGwwLTExMy4xek0xMTkuNCA5NmMtNS42IDkuNy0xMy43IDE3LjgtMjMuNCAyMy40bDAgMTEzLjFjOS43IDUuNiAxNy44IDEzLjcgMjMuNCAyMy40bDIwOS4xIDBjNS42LTkuNyAxMy43LTE3LjggMjMuNC0yMy40bDAtMTEzLjFjLTkuNy01LjYtMTcuOC0xMy43LTIzLjQtMjMuNEwxMTkuNCA5NnpNNTQ0IDI3OS40Yy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRsLTI5LjIgMGMtNS4zLTE3LjctMTQuOC0zMy41LTI3LjQtNDYuNGwwLTE3LjYgNTYuNiAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMTEzLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTIwOS4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjQuNiA2NCAwIDAgMjQuNmM5LjcgNS42IDE3LjggMTMuNyAyMy40IDIzLjRsMjA5LjEgMGM1LjYtOS43IDEzLjctMTcuOCAyMy40LTIzLjRsMC0xMTMuMXoiXQogICAgfTsKICAgIGZhQ29tbWVudDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ4OSwgNjE2NjldLCAiZjA3NSIsICJNNTEyIDI0MGMwIDEzMi41LTExNC42IDI0MC0yNTYgMjQwLTM3LjEgMC03Mi4zLTcuNC0xMDQuMS0yMC43TDMzLjUgNTEwLjFjLTkuNCA0LTIwLjIgMS43LTI3LjEtNS44Uy0yIDQ4NS44IDIuOCA0NzYuOGw0OC44LTkyLjJDMTkuMiAzNDQuMyAwIDI5NC4zIDAgMjQwIDAgMTA3LjUgMTE0LjYgMCAyNTYgMFM1MTIgMTA3LjUgNTEyIDI0MHoiXQogICAgfTsKICAgIGZhSGlsbEF2YWxhbmNoZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWxsLWF2YWxhbmNoZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTA3IiwgIk00NDAuMSA0MDEuOWMzNC4yIDIzLjEgODEuMSAxOS41IDExMS40LTEwLjggMzQuNC0zNC40IDM0LjQtOTAuMSAwLTEyNC41LTI3LjgtMjcuOC02OS41LTMzLjEtMTAyLjYtMTYtMTEuOCA2LjEtMTYuNCAyMC42LTEwLjMgMzIuM3MyMC42IDE2LjQgMzIuMyAxMC4zYzE1LjEtNy44IDM0LTUuMyA0Ni42IDcuMyAxNS42IDE1LjYgMTUuNiA0MC45IDAgNTYuNnMtNDAuOSAxNS42LTU2LjYgMGwtODEuNy04MS43YzIyLjMtMTQuMiAzNy4xLTM5LjEgMzcuMS02Ny41IDAtMzMuOS0yMS4xLTYyLjktNTAuOS03NC41IDEuOS02LjggMi45LTE0IDIuOS0yMS41IDAtNDQuMi0zNS44LTgwLTgwLTgwLTI3LjMgMC01MS41IDEzLjctNjUuOSAzNC42LTUuOC0yMC0yNC4yLTM0LjYtNDYuMS0zNC42LTI2LjUgMC00OCAyMS41LTQ4IDQ4IDAgNCAuNSA3LjkgMS40IDExLjZMNDQwLjEgNDAxLjl6TTQ4MC40IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTAgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHpNNjguNyA4N0M0My41IDYxLjggLjQgNzkuNyAuNCAxMTUuM0wuNCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMzE2LjcgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM0w2OC43IDg3eiJdCiAgICB9OwogICAgZmFBcnJvd3NUb0V5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdG8tZXllIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YmYiLCAiTTE3NiA1NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDM4LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUzIxLjcgNTUuNiAzMSA2NWw2MyA2My0zOC4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTk2em0wIDQwMGwwLTk2YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDM4LjEgMC02MyA2M2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDYzLTYzIDAgMzguMWMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0em0zMTIgMjRjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0zOC4xIDYzIDYzYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNjMtNjMgMzguMSAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05NiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0ek00NjQgNTZsMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zOC4xIDAgNjMtNjNjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNjMgNjMgMC0zOC4xYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0ek0zMjAgMTIwYy01Ny4zIDAtOTkuNCAzNC0xMjUuNiA2NC4zLTIwIDIzLjEtMzIuNCA0NS44LTM3LjYgNTYuMS0yLjUgNS00LjkgOS43LTQuOSAxNS42czIuMyAxMC42IDQuOSAxNS42YzUuMiAxMC4zIDE3LjYgMzMgMzcuNiA1Ni4xIDI2LjIgMzAuMyA2OC4yIDY0LjMgMTI1LjYgNjQuM3M5OS40LTM0IDEyNS42LTY0LjNjMjAtMjMuMSAzMi40LTQ1LjggMzcuNi01Ni4xIDIuNS01IDQuOS05LjcgNC45LTE1LjZzLTIuMy0xMC42LTQuOS0xNS42Yy01LjItMTAuMy0xNy42LTMzLTM3LjYtNTYuMS0yNi4yLTMwLjMtNjguMi02NC4zLTEyNS42LTY0LjN6TTI1NiAyNTZhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFTbm93cGxvdyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbm93cGxvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2QyIiwgIk0xMjggMTYwbDAtOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjk2LjQgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw4Ny42IDE3NS4xYzQuNCA4LjkgNi44IDE4LjcgNi44IDI4LjZsMCA1Ni45IDgwIDAgMC04MGMwLTQ4LjYgMzkuNC04OCA4OC04OCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAyMDhjMCAyMi4xIDE3LjkgNDAgNDAgNDAgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRjLTQ4LjYgMC04OC0zOS40LTg4LTg4bDAtODAtNjMgMGM5LjUgMTYuNSAxNSAzNS42IDE1IDU2IDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0yMjQgMGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTIgMC0zMC41IDEyLjItNTguMiAzMi03OC40TDY0IDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHptOTEuNyAzNC45bDQzLjYgMjkuMSAxMTMuMiAwLTgwLTE2MC0xMDQuNCAwIDAgMTA4LjggMjcuNyAyMi4xek00MTYgNDAwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhzMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHptLTI4MCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTIxNi0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIzMiA0MDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhQ2hhcnRHYW50dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1nYW50dCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGU0IiwgIk02NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQwMGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MDAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw4MCA0MTZjLTguOCAwLTE2LTcuMi0xNi0xNkw2NCA2NHptOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwem02NCAxMTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwek0zODQgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYVZpZGVvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpZGVvIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInZpZGVvLWNhbWVyYSJdLCAiZjAzZCIsICJNOTYgNjRjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDk2IDY0ek00NjQgMzM2bDczLjUgNTguOGM0LjIgMy40IDkuNCA1LjIgMTQuOCA1LjIgMTMuMSAwIDIzLjctMTAuNiAyMy43LTIzLjdsMC0yNDAuNmMwLTEzLjEtMTAuNi0yMy43LTIzLjctMjMuNy01LjQgMC0xMC42IDEuOC0xNC44IDUuMkw0NjQgMTc2IDQ2NCAzMzZ6Il0KICAgIH07CiAgICBmYVZpZGVvQ2FtZXJhID0gZmFWaWRlbzsKICAgIGZhQ2hlc3NQYXduMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1wYXduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTgyM10sICJmNDQzIiwgIk0xOTItMzJjNjYuMyAwIDEyMCA1My43IDEyMCAxMjAgMCAyNy04LjkgNTEuOS0yNCA3MiAxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDI2LjcgMTYwIDU2LjIgNzAuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw1MS41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMODAgMzg0IDEwNi43IDIyNCA5NiAyMjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJjLTE1LjEtMjAuMS0yNC00NS0yNC03MiAwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMHoiXQogICAgfTsKICAgIGZhU3luYWdvZ3VlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN5bmFnb2d1ZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODMzM10sICJmNjliIiwgIk0xNiA4MGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0bDAgMzItMTI4IDAgMC0zMnptMCAzNjhsMC0yODggMTI4IDAgMTI2LjItODQuMmMxMC43LTcuMiAyNC44LTcuMiAzNS41IDBsMTI2LjIgODQuMiAxMjggMCAwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0ek01NjAgMTEybC0xMjggMCAwLTMyYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCAzMnpNMjI0IDM4NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjR6bTY0LTE1MmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDIiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTEwLjUtMTQuNi0xOS0zMC43LTI1LjEtNDhsLTc0LjkgMCAwLTgwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDMyIDBjMiAwIDQgLjIgNS45IC41IDYtMjMuNiAxNi4zLTQ1LjQgMzAuMS02NC41bC00IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDRjMjcuNS0xOS44IDYwLjMtMzIuNCA5Ni0zNS40TDQxNiA2NGMwLTM1LjMtMjguNy02NC02NC02NEw5NiAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyUGx1czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXItcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcxIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE5MmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFXaGVlbGNoYWlyTW92ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aGVlbGNoYWlyLW1vdmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsid2hlZWxjaGFpci1hbHQiXSwgImUyY2UiLCAiTTMxMiA1NmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTIwNS40IDEyNC4xYy02LjQtNS4yLTE1LjYtNC43LTIxLjQgMS4xbC0zMy40IDMzLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDEzOC44IDgwYzI5LTI5IDc1LjItMzEuNCAxMDctNS41bDgxLjMgNjZjMjEuNCAxNy40IDIzLjggNDkuMiA1LjIgNjkuNWwtNDEuOCA0NiA5OCAwYzMwLjMgMCA1MyAyNy43IDQ3LjEgNTcuNEw0MDcuNCA0NTQuM2MtMy41IDE3LjMtMjAuMyAyOC42LTM3LjcgMjUuMXMtMjguNi0yMC4zLTI1LjEtMzcuN0wzNjkgMzIwIDMxNi44IDMyMGMyLjEgMTAuMyAzLjIgMjEgMy4yIDMyIDAgODguNC03MS42IDE2MC0xNjAgMTYwUzAgNDQwLjQgMCAzNTIgNzEuNiAxOTIgMTYwIDE5MmM2IDAgMTEuOSAuMyAxNy44IDFsNTAuNC01MC40LTIyLjctMTguNXpNMTYwIDQ0OGE5NiA5NiAwIDEgMCAwLTE5MiA5NiA5NiAwIDEgMCAwIDE5MnoiXQogICAgfTsKICAgIGZhV2hlZWxjaGFpckFsdCA9IGZhV2hlZWxjaGFpck1vdmU7CiAgICBmYVVzZXJTaGllbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zaGllbGQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUwNSIsICJNMjI0IDI0OGExMjAgMTIwIDAgMSAwIDAtMjQwIDEyMCAxMjAgMCAxIDAgMCAyNDB6bS0yOS43IDU2Qzk1LjggMzA0IDE2IDM4My44IDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDI1MS41IDBDMjYxIDQ2OS40IDI0MCA0MTQuNSAyNDAgMzU2LjRsMC0zMS4xYzAtNy4zIDEtMTQuNSAyLjktMjEuM2wtNDguNiAwem0yNTEgMTg0LjVsLTEzLjMgNi4zIDAtMTg4LjEgOTYgMzIgMCAxOS42YzAgNTUuOC0zMi4yIDEwNi41LTgyLjcgMTMwLjN6TTQyMS45IDI1OS41bC0xMTIgMzcuM2MtMTMuMSA0LjQtMjEuOSAxNi42LTIxLjkgMzAuNGwwIDMxLjFjMCA3NC40IDQzIDE0Mi4xIDExMC4yIDE3My43bDE4LjUgOC43YzQuOCAyLjIgMTAgMy40IDE1LjIgMy40czEwLjUtMS4yIDE1LjItMy40bDE4LjUtOC43QzUzMyA1MDAuMyA1NzYgNDMyLjYgNTc2IDM1OC4ybDAtMzEuMWMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtMTEyLTM3LjNjLTYuNi0yLjItMTMuNy0yLjItMjAuMiAweiJdCiAgICB9OwogICAgZmFCb2xkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvbGQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjAzMiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDMyIDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyMjQgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOCAwLTQ2LjUtMjQuOC04Ny4zLTYyLTEwOS43IDE4LjctMjIuMyAzMC01MSAzMC04Mi4zIDAtNzAuNy01Ny4zLTEyOC0xMjgtMTI4TDMyIDMyek0yODggMTYwYzAgMzUuMy0yOC43IDY0LTY0IDY0bC05NiAwIDAtMTI4IDk2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjR6TTEyOCA0MTZsMC0xMjggMTI4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRzLTI4LjcgNjQtNjQgNjRsLTEyOCAweiJdCiAgICB9OwogICAgZmFIZWFydFB1bHNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LXB1bHNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImhlYXJ0YmVhdCJdLCAiZjIxZSIsICJNMjU2IDEwNy45TDI0MSA4Ny4xQzIxNiA1Mi41IDE3NS45IDMyIDEzMy4xIDMyIDU5LjYgMzIgMCA5MS42IDAgMTY1LjFsMCAyLjZjMCAyMy42IDYuMiA0OCAxNi42IDcyLjNsMTA2IDBjMy4yIDAgNi4xLTEuOSA3LjQtNC45bDMxLjgtNzYuM2MzLjctOC44IDEyLjMtMTQuNiAyMS44LTE0LjhzMTguMyA1LjQgMjIuMiAxNC4xbDUxLjMgMTEzLjkgNDEuNC04Mi44YzQuMS04LjEgMTIuNC0xMy4zIDIxLjUtMTMuM3MxNy40IDUuMSAyMS41IDEzLjNsMjMuMiA0Ni4zYzEuNCAyLjcgNC4xIDQuNCA3LjIgNC40bDEyMy42IDBjMTAuNS0yNC4zIDE2LjYtNDguNyAxNi42LTcyLjNsMC0yLjZDNTEyIDkxLjYgNDUyLjQgMzIgMzc4LjkgMzIgMzM2LjIgMzIgMjk2IDUyLjUgMjcxIDg3LjFsLTE1IDIwLjd6TTQ2OS42IDI4OGwtOTcuOCAwYy0yMS4yIDAtNDAuNi0xMi01MC4xLTMxbC0xLjctMy40LTQyLjUgODUuMWMtNC4xIDguMy0xMi43IDEzLjUtMjIgMTMuM3MtMTcuNi01LjctMjEuNC0xNC4xbC00OS4zLTEwOS41LTEwLjUgMjUuMmMtOC43IDIwLjktMjkuMSAzNC41LTUxLjcgMzQuNWwtODAuMiAwYzQ3LjIgNzMuOCAxMjMgMTQxLjcgMTcwLjQgMTc3LjkgMTIuNCA5LjQgMjcuNiAxNC4xIDQzLjEgMTQuMXMzMC44LTQuNiA0My4xLTE0LjFDMzQ2LjYgNDI5LjcgNDIyLjQgMzYxLjggNDY5LjYgMjg4eiJdCiAgICB9OwogICAgZmFIZWFydGJlYXQgPSBmYUhlYXJ0UHVsc2U7CiAgICBmYVNxdWFyZVJvb3RWYXJpYWJsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcm9vdC12YXJpYWJsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzcXVhcmUtcm9vdC1hbHQiXSwgImY2OTgiLCAiTTI4Mi42IDc4LjFjOC0yNy4zIDMzLTQ2LjEgNjEuNC00Ni4xbDIwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDM0NCA5NiAyMzguNyA0NTdjLTMuNiAxMi4zLTE0LjEgMjEuMi0yNi44IDIyLjhzLTI1LjEtNC42LTMxLjUtMTUuNkw3Ny42IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNDUuNiAwYzIyLjggMCA0My44IDEyLjEgNTUuMyAzMS44bDY1LjIgMTExLjggODQuNC0yODkuNXpNMzkzLjQgMjMzLjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsNDEuNCA0MS40IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC00MS40IDQxLjQgNDEuNCA0MS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQtNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w0MS40LTQxLjQtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhU3F1YXJlUm9vdEFsdCA9IGZhU3F1YXJlUm9vdFZhcmlhYmxlOwogICAgZmFIYW5kc0J1YmJsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtYnViYmxlcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJoYW5kcy13YXNoIl0sICJlMDVlIiwgIk0zODQgNjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em05NiAxMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0xMjggNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6TTAgMTYwbC4xIDcyLjZjMCA0NC44IDE3LjYgODcuMSA0Ny45IDExOC40IC4zLTc3IDQwLjEtMTQ4LjQgMTA1LjQtMTg5LjNsMS45LTEuMmMtMi41LTMuNy0yLjgtOC42LS40LTEyLjdsNjItMTA3LjRjNi42LTExLjUgMi43LTI2LjItOC44LTMyLjhTMTgyIDUgMTc1LjQgMTYuNWwtNjggMTE3LjggMCAwIDAgMC00My4zIDc1IDAtNDkuM2MwLTE3LjctMTQuNC0zMi0zMi0zMlMwIDE0Mi40IDAgMTYwem0yMTMuNi0zNS45YzE0LjEtOC44IDI5LjgtMTIuNyA0NS4yLTEyLjFsMzYuNS02My4zYzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOGwtNjcuMSAxMTYuMiAyNy0xNi45em04Ni41LTM1LjdsLTE2LjQgMjguNGMxNS4xIDUuNSAyOC42IDE1LjYgMzguMyAyOS43bDE5LjctMzQuMmM2LjYtMTEuNSAyLjctMjYuMi04LjgtMzIuOHMtMjYuMi0yLjctMzIuOCA4Ljh6bTQ2LjQgNjMuN2wtMTIuNSAyMS43YzIgOC42IDIuNSAxNy41IDEuNyAyNi4xbDQuMyAwIDAgMCAzNC40IDAgMTMuNy0yMy44YzYuNi0xMS41IDIuNy0yNi4yLTguOC0zMi44cy0yNi4yLTIuNy0zMi44IDguOHpNMjgzLjEgMTc1Yy05LjQtMTUtMjkuMS0xOS41LTQ0LjEtMTAuMmwtNjAuMiAzNy42QzEyNy4zIDIzNC43IDk2IDI5MS4yIDk2IDM1MmwwIDhjMCA4LjkgLjggMTcuNiAyLjIgMjYuMSAzNS40IDguMiA2MS44IDQwIDYxLjggNzcuOSAwIDYuMy0uNyAxMi41LTIuMSAxOC40IDI1LjIgMTguNiA1Ni40IDI5LjYgOTAuMSAyOS42bDE3NiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC05MiAwYy02LjYgMC0xMi01LjQtMTItMTJzNS40LTEyIDEyLTEybDEyNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjQgMGMtNi42IDAtMTItNS40LTEyLTEyczUuNC0xMiAxMi0xMmwxNTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTU2IDBjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMTI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTEzNiAwIDAgMCAwIDAtOTMuMiAwIDQ2LjItMjguOWMxNS05LjQgMTkuNS0yOS4xIDEwLjItNDQuMXoiXQogICAgfTsKICAgIGZhSGFuZHNXYXNoID0gZmFIYW5kc0J1YmJsZXM7CiAgICBmYU1hcmtlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJrZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVhMSIsICJNNDA4LjggMGMtMjcuNCAwLTUzLjYgMTAuOS03MyAzMC4yTDMxOC4xIDQ4IDMwNSAzNC45Yy0yOC4xLTI4LjEtNzMuNy0yOC4xLTEwMS44IDBMMTAzIDEzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwTDIzNy4xIDY4LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBMMjg0LjEgODEuOSAxODQgMTgyLjEgMzI5LjkgMzI4IDQ4MS44IDE3Ni4yYzE5LjQtMTkuNCAzMC4yLTQ1LjYgMzAuMi03MyAwLTU3LTQ2LjItMTAzLjItMTAzLjItMTAzLjJ6TTEwMi40IDI2My43Yy00OS45IDQ5LjktODMuMyAxMTQtOTUuNSAxODMuNUwuNCA0ODMuOEMtMSA0OTEuNiAxLjUgNDk5LjQgNyA1MDVzMTMuNCA4IDIxLjEgNi43bDM2LjctNi41YzY5LjUtMTIuMyAxMzMuNi00NS42IDE4My41LTk1LjVMMjk2IDM2MS45IDE1MC4xIDIxNiAxMDIuNCAyNjMuN3oiXQogICAgfTsKICAgIGZhQ2xpcGJvYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDNdLCAiZjMyOCIsICJNMzIwIDMybC04LjYgMEMzMDAuNCAxMi45IDI3OS43IDAgMjU2IDBMMTI4IDBDMTA0LjMgMCA4My42IDEyLjkgNzIuNiAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI1NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzUyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek0xMzYgMTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMHoiXQogICAgfTsKICAgIGZhUGxhY2VPZldvcnNoaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhY2Utb2Ytd29yc2hpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjdmIiwgIk0xNjAgNzlsMCA4MS00NC44IDMzLjZDMTAzLjEgMjAyLjcgOTYgMjE2LjkgOTYgMjMybDAgNDAtNjAuNiAzMC4zQzEzLjcgMzEzLjIgMCAzMzUuMyAwIDM1OS42TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0IDc0LjcgMCA4NS40IDAgMzIwIDBsNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTg4LjRjMC0yNC4yLTEzLjctNDYuNC0zNS40LTU3LjJMNDE2IDI3MiA0MTYgMjMyYzAtMTUuMS03LjEtMjkuMy0xOS4yLTM4LjRMMzUyIDE2MCAzNTIgNzljMC05LjUtNC4yLTE4LjUtMTEuNS0yNC42TDI3MS40LTMuMmMtOC45LTcuNC0yMS44LTcuNC0zMC43IDBMMTcxLjUgNTQuNEMxNjQuMiA2MC41IDE2MCA2OS41IDE2MCA3OXptOTYgMjQxYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgODAtMTI4IDAgMC04MGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhQ2FubmFiaXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FubmFiaXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1ZiIsICJNMjU2IDBjNS4zIDAgMTAuMyAyLjcgMTMuMyA3LjEgMTUuOCAyMy41IDM2LjcgNjMuNyA0OS4yIDEwOSA3LjMgMjYuNCAxMS44IDU1LjMgMTAuMyA4NCAxMS42LTguOSAyMy43LTE2LjcgMzUuOS0yMy43IDQxLTIzLjMgODQuNC0zNi45IDExMi4yLTQyLjUgNS4yLTEgMTAuNyAuNiAxNC40IDQuNHM1LjQgOS4yIDQuNCAxNC41Yy01LjYgMjcuNy0xOS4zIDcwLjktNDIuNyAxMTEuNy05LjEgMTUuOS0xOS45IDMxLjctMzIuNSA0Ni4zIDI3LjkgNi42IDUyLjUgMTcuMiA2Ny4zIDI1LjQgNS4xIDIuOCA4LjIgOC4yIDguMiAxNHMtMy4yIDExLjItOC4yIDE0Yy0xNS4yIDguNC00MC45IDE5LjUtNjkuOCAyNi4xLTIwLjIgNC42LTQyLjkgNy4yLTY1LjIgNC42bDguMyAzMy4yYzEuNSA2LjEtLjYgMTIuNS01LjUgMTYuNHMtMTEuNiA0LjYtMTcuMiAxLjhMMjgwIDQxNy4yIDI4MCA0ODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03MC44LTU4LjUgMjkuMWMtNS42IDIuOC0xMi4zIDIuMS0xNy4yLTEuOHMtNy0xMC4zLTUuNS0xNi40bDguMy0zMy4yYy0yMi4yIDIuNi00NSAwLTY1LjItNC42LTI4LjktNi42LTU0LjUtMTcuNi02OS44LTI2LjEtNS4xLTIuOC04LjItOC4yLTguMi0xNHMzLjItMTEuMiA4LjItMTRsNi4yLTMuM2MxNS03LjYgMzYuOC0xNi40IDYxLjEtMjIuMi0xMi41LTE0LjUtMjMuMy0zMC40LTMyLjQtNDYuMi0yMy40LTQwLjgtMzcuMS04NC00Mi43LTExMS43LTEuMS01LjIgLjYtMTAuNyA0LjQtMTQuNXM5LjItNS40IDE0LjQtNC40YzI3LjkgNS41IDcxLjIgMTkuMiAxMTIuMiA0Mi41IDEyLjIgNi45IDI0LjMgMTQuOCAzNS44IDIzLjctMS40LTI4LjcgMy4xLTU3LjYgMTAuMy04NCAxMi41LTQ1LjMgMzMuNC04NS41IDQ5LjItMTA5bDEuMi0xLjZDMjQ2LjkgMiAyNTEuMyAwIDI1NiAweiJdCiAgICB9OwogICAgZmFQZW9wbGVSb29mID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1yb29mIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzciLCAiTTMwMi4zLTEyLjZjLTktNC41LTE5LjYtNC41LTI4LjYgMGwtMjU2IDEyOEMxLjkgMTIzLjMtNC41IDE0Mi41IDMuNCAxNTguM3MyNy4xIDIyLjIgNDIuOSAxNC4zTDI4OCA1MS44IDUyOS43IDE3Mi42YzE1LjggNy45IDM1IDEuNSA0Mi45LTE0LjNzMS41LTM1LTE0LjMtNDIuOWwtMjU2LTEyOHpNMjg4IDI3MmE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnptMCA0OGMtNTMgMC05NiA0My05NiA5NmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC01My00My05Ni05Ni05NnpNMTYwIDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwem0zNTIgMGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xMTIgMzM2Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDMzLjFjMCAxNyAxMy44IDMwLjkgMzAuOSAzMC45bDg3LjggMGMtNC4zLTkuOC02LjctMjAuNi02LjctMzJsMC00OGMwLTE4LjQgMy41LTM2IDkuOC01Mi4yLTEyLjItNy41LTI2LjUtMTEuOC00MS44LTExLjh6TTQyNS40IDQ4MGw4Ny44IDBjMTcgMCAzMC45LTEzLjggMzAuOS0zMC45bDAtMzMuMWMwLTQ0LjItMzUuOC04MC04MC04MC0xNS4zIDAtMjkuNiA0LjMtNDEuOCAxMS44IDYuMyAxNi4yIDkuOCAzMy44IDkuOCA1Mi4ybDAgNDhjMCAxMS40LTIuNCAyMi4yLTYuNyAzMnoiXQogICAgfTsKICAgIGZhRGlzZWFzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaXNlYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3ZmEiLCAiTTIzNi41IDI5LjRMMjI0IDQ4Yy0yMCAzMC01My42IDQ4LTg5LjcgNDhMNjggOTZjLTM3LjUgMC02Ny45IDMwLjQtNjcuOSA2Ny45IDAgMTggNy4yIDM1LjIgMTkuOSA0Ny45bDI3IDI3YzExIDExIDE3LjIgMjUuOSAxNy4yIDQxLjUgMCAxNS44LTYuNCAzMC45LTE3LjcgNDJMMzMuNCAzMzUuMWMtMTEuMSAxMC44LTE3LjMgMjUuNy0xNy4zIDQxLjIgMCAzNi44IDM0LjEgNjQuMiA3MC4xIDU2LjJsNjIuMy0xMy44YzcuNy0xLjcgMTUuNy0yLjYgMjMuNi0yLjYgMzIuOCAwIDY0LjIgMTQuNiA4NS4yIDM5LjhsMzAuNSAzNi42YzEwLjQgMTIuNCAyNS43IDE5LjYgNDEuOSAxOS42IDMwLjEgMCA1NC41LTI0LjQgNTQuNS01NC41bDAtNTEuMmMwLTQxLjQgMjUuNC03OC41IDY0LTkzLjVsMjIuMi04LjZjMjUuMi05LjggNDEuOC0zNC4xIDQxLjgtNjEuMSAwLTI2LjQtMTUuOS01MC4zLTQwLjMtNjAuNUw0MjkgMTY0LjhjLTMzLjItMTMuOS01Ny42LTQzLTY1LjUtNzguMWwtNy45LTM1LjJjLTYuOC0zMC4xLTMzLjUtNTEuNS02NC4zLTUxLjUtMjIgMC00Mi42IDExLTU0LjggMjkuNHpNMTYwIDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMzIgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFCb29rQmlibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1iaWJsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJiaWJsZSJdLCAiZjY0NyIsICJNOTYgNTEyYy01MyAwLTk2LTQzLTk2LTk2TDAgOTZDMCA0MyA0MyAwIDk2IDBMNDAwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyODhjMCAyMC45LTEzLjQgMzguNy0zMiA0NS4zbDAgNjYuN2MxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw5NiA1MTJ6bTAtMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI1NiAwIDAtNjQtMjU2IDB6TTE5MiA4MGwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmw0OCAwIDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTExMiA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2eiJdCiAgICB9OwogICAgZmFCaWJsZSA9IGZhQm9va0JpYmxlOwogICAgZmFDaGVzc0JvYXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLWJvYXJkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY0M2MiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDY0bDAgNjQgNjQgMCAwLTY0IDY0IDAgMCA2NCA2NCAwIDAtNjQgNjQgMCAwIDY0LTY0IDAgMCA2NCA2NCAwIDAgNjQtNjQgMCAwIDY0IDY0IDAgMCA2NC02NCAwIDAtNjQtNjQgMCAwIDY0LTY0IDAgMC02NC02NCAwIDAgNjQtNjQgMCAwLTY0IDY0IDAgMC02NC02NCAwIDAtNjQgNjQgMCAwLTY0LTY0IDAgMC02NCA2NCAwem02NCAxMjhsNjQgMCAwLTY0LTY0IDAgMCA2NHptMCA2NGwwLTY0LTY0IDAgMCA2NCA2NCAwem02NCAwbC02NCAwIDAgNjQgNjQgMCAwLTY0em0wIDBsNjQgMCAwLTY0LTY0IDAgMCA2NHoiXQogICAgfTsKICAgIGZhTWFycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc5NF0sICJmMjIyIiwgIk0zMjAgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJMNDgwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC01MC43LTk1IDk1YzE5LjUgMjguNCAzMSA2Mi43IDMxIDk5LjggMCA5Ny4yLTc4LjggMTc2LTE3NiAxNzZTMzIgNDAxLjIgMzIgMzA0IDExMC44IDEyOCAyMDggMTI4YzM3IDAgNzEuNCAxMS40IDk5LjggMzFsOTUtOTUtNTAuNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMjA4IDQxNmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6Il0KICAgIH07CiAgICBmYUxhcHRvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgxODddLCAiZjEwOSIsICJNMTI4IDMyQzkyLjcgMzIgNjQgNjAuNyA2NCA5NmwwIDI0MCA2NCAwIDAtMjQwIDM4NCAwIDAgMjQwIDY0IDAgMC0yNDBjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTI4IDMyek0xOS4yIDM4NEM4LjYgMzg0IDAgMzkyLjYgMCA0MDMuMiAwIDQ0NS42IDM0LjQgNDgwIDc2LjggNDgwbDQ4Ni40IDBjNDIuNCAwIDc2LjgtMzQuNCA3Ni44LTc2LjggMC0xMC42LTguNi0xOS4yLTE5LjItMTkuMkwxOS4yIDM4NHoiXQogICAgfTsKICAgIGZhVXNlclhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXIteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci10aW1lcyJdLCAiZjIzNSIsICJNMTM2LjQgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6bS04OCAzNTQuM2MwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM2w1OS40IDBjOTguNSAwIDE3OC4zIDc5LjggMTc4LjMgMTc4LjMgMCAxNi40LTEzLjMgMjkuNy0yOS43IDI5LjdMNzguMSA1MTJjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43ek02MTIuMyAxMjQuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45IDMzLjkgMzMuOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zMy45LTMzLjktMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMzLjktMzMuOS0zMy45LTMzLjljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjkgMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFVc2VyVGltZXMgPSBmYVVzZXJYbWFyazsKICAgIGZhRmxhZ1VzYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnLXVzYSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzRkIiwgIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMzYuMS00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTIwLjMtOS00MS44LTE0LjctNjMuNi0xNi45bDAgMzIuMmMxNy40IDIuMSAzNC40IDYuNyA1MC42IDEzLjlsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2Mi00NC43IDE2LjJjLTQyLjggMTUuNi05MCAxMy45LTEzMS42LTQuNmwtMTYuMS03LjJjLTQwLjItMTcuOS04NS0yMi41LTEyOC4xLTEzLjNsLTYzLjUgMTMuNiAwIDMyLjcgNzAuMi0xNS4xYzM2LjQtNy44IDc0LjMtMy45IDEwOC40IDExLjNsMTYuMSA3LjJjNDkuMiAyMS45IDEwNSAyMy44IDE1NS42IDUuNGwzMy43LTEyLjMgMCA2MS45LTQ0LjcgMTYuMmMtNDIuOCAxNS42LTkwIDEzLjktMTMxLjYtNC42bC0xNi4xLTcuMmMtNDAuMi0xNy45LTg1LTIyLjUtMTI4LjEtMTMuM2wtNjMuNSAxMy42IDAgMzIuNyA3MC4yLTE1LjFjMzYuNC03LjggNzQuMy0zLjkgMTA4LjQgMTEuM2wxNi4xIDcuMmM0OS4yIDIxLjkgMTA1IDIzLjggMTU1LjYgNS40bDMzLjctMTIuMyAwIDMzLjVjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgNDAwIDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwem04MCA5NmExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAwem0zMiAwYTE2IDE2IDAgMSAwIDAtMzIgMTYgMTYgMCAxIDAgMCAzMnptLTMyIDQ4YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6bTMyIDBhMTYgMTYgMCAxIDAgMC0zMiAxNiAxNiAwIDEgMCAwIDMyeiJdCiAgICB9OwogICAgZmFIYW5kTWlkZGxlRmluZ2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtbWlkZGxlLWZpbmdlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODQwNV0sICJmODA2IiwgIk0yMzIgMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCAxNjQuMmMtOC41LTcuNi0xOS43LTEyLjItMzItMTIuMi0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtNTUuN2MtMiAxLjQtMy45IDMtNS44IDQuNUw1NSAyODQuOEM0MC40IDI5NyAzMiAzMTUgMzIgMzM0TDMyIDM3MmMwIDM4IDE2LjkgNzQgNDYuMSA5OC4zbDUuNCA0LjVjMjguOCAyNCA2NSAzNy4xIDEwMi40IDM3LjFMMzA0IDUxMmM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4LTEyLjQgMC0yMy42IDQuNy0zMi4xIDEyLjMtMS45LTI0LjgtMjIuNi00NC4zLTQ3LjktNDQuMy0xMi4zIDAtMjMuNSA0LjYtMzIgMTIuMkwyNzIgNDBjMC0yMi4xLTE3LjktNDAtNDAtNDB6Il0KICAgIH07CiAgICBmYU1vcnRhclBlc3RsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3J0YXItcGVzdGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YTciLCAiTTUwNC4zIDExLjFDNDkzLjMtMS42IDQ3NC41LTMuNyA0NjEgNi4yTDI1Mi4zIDE2MCAzOTcuMyAxNjAgNTAyLjYgNTQuNmMxMS44LTExLjggMTIuNi0zMC44IDEuNi00My41ek0zMiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJjMCA4Mi41IDQzLjQgMTQ3LjcgMTIzLjkgMTc2LjItMTEuMSAxMy45LTE5LjQgMzAuMy0yMy45IDQ4LjEtNC40IDE3LjEgMTAuNCAzMS43IDI4LjEgMzEuN2wxOTIgMGMxNy43IDAgMzIuNC0xNC42IDI4LjEtMzEuNy00LjUtMTcuOC0xMi44LTM0LjEtMjMuOS00OC4xIDgwLjUtMjguNiAxMjMuOS05My43IDEyMy45LTE3Ni4yIDE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDE5MnoiXQogICAgfTsKICAgIGZhSGVhZFNpZGVDb3VnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtY291Z2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2MSIsICJNOTYgNTEybDY0IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNmwxIDBjMjYgMCA0Ny0yMSA0Ny00NyAwLTExLTMuOS0yMS42LTEwLjktMzAuMUwyNzMuMyAyMDBDMjcxLjQgMTk3LjYgMjcwLjEgMTk0LjcgMjY5LjcgMTkxLjcgMjU0IDgzLjMgMTYwLjcgMCA0OCAwIDQwLjQgMCAzMi45IC40IDI1LjQgMS4xIDEwLjUgMi42IDAgMTUuOSAwIDMwLjlMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMHptMTYtMzIwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTYzLjEgMjM3LjJsLTQxLjUtMy41Yy0xMi4yLTEtMjEuNi0xMS4yLTIxLjYtMjMuNCAwLTEwLjggNy4zLTIwLjIgMTcuOC0yMi44bDQwLjQtMTAuMWMxOS4yLTQuOCAzNy44IDkuNyAzNy44IDI5LjUgMCAxNy44LTE1LjIgMzEuOC0zMi45IDMwLjN6TTQ4MCAzMTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0tNDAgMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6TTQ4MCA1MDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0tNDAtNzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhUGxhbmVMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lLWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1OCIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA4Mi4xIDc1LjJDNDA5LjcgMjQ4LjEgNDAwIDI3NC45IDQwMCAzMDRsMCAyNC40Yy03LjMgNi42LTEzLjYgMTQuMi0xOC43IDIyLjdsLTM3LjMtMTIuNCAwIDk5LjcgMjQgMTkuMiAwIDM4LjNjMCAxMy41IDIuOCAyNi40IDcuOCAzOC4xTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek01NjAgMzA0LjFjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0Ny45IDY0IDAgMC00Ny45ek00MTYgNDAwYzAtMjAuOSAxMy40LTM4LjcgMzItNDUuM2wwLTUwLjZjMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGwwIDUwLjZjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTEyOCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTk2eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5VGhyZWVRdWFydGVycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LXRocmVlLXF1YXJ0ZXJzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktNCJdLCAiZjI0MSIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMjI0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0xMTJjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTIyNCAweiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5NCA9IGZhQmF0dGVyeVRocmVlUXVhcnRlcnM7CiAgICBmYUZyYW5jU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmcmFuYy1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUxOGYiLCAiTTgwIDMyQzYyLjMgMzIgNDggNDYuMyA0OCA2NGwwIDI1Ni0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgODggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODggMCAwLTY0IDE0NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNDQgMCAwLTk2IDE3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDgwIDMyeiJdCiAgICB9OwogICAgZmFGaWx0ZXJDaXJjbGVEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsdGVyLWNpcmNsZS1kb2xsYXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZnVubmVsLWRvbGxhciJdLCAiZjY2MiIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMi41IDIuNSA1LjMgNC41IDguMyA2LTIxLjItMzAuOS0zMy42LTY4LjMtMzMuNi0xMDguNiAwLTk5LjQgNzUuNS0xODEuMSAxNzIuMy0xOTFsOTAuNC05MC40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDY0IDQ4MCA2NEwzMiA2NHpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwek00MTYgMzIwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA4IDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZsLTQ1LjggMGMtNS42IDAtMTAuMiA0LjYtMTAuMiAxMC4yIDAgNC45IDMuNSA5LjEgOC4zIDEwbDQ1IDguMmMyMCAzLjYgMzQuNiAyMS4xIDM0LjYgNDEuNSAwIDIzLjMtMTguOSA0Mi4yLTQyLjIgNDIuMmwtNS44IDAgMCA4YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDUzLjggMGM1LjYgMCAxMC4yLTQuNiAxMC4yLTEwLjIgMC00LjktMy41LTkuMS04LjMtMTBsLTQ1LTguMmMtMjAtMy42LTM0LjYtMjEuMS0zNC42LTQxLjUgMC0yMi42IDE3LjctNDEgNDAtNDIuMWwwLTguMXoiXQogICAgfTsKICAgIGZhRnVubmVsRG9sbGFyID0gZmFGaWx0ZXJDaXJjbGVEb2xsYXI7CiAgICBmYUNoZWVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVlc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdlZiIsICJNNTEyIDI0MC4ybDAgMTUuOC01MTIgMGMwLTIwIDEwLTM4LjcgMjYuNi00OS44TDI3NC45IDQwLjdjOC42LTUuNyAxOC42LTguNyAyOC45LTguNyAxMTUgMCAyMDguMiA5My4yIDIwOC4yIDIwOC4yem0wIDYzLjhsMCAxMTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTExMiA1MTIgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlSCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk0MDUsICJob3NwaXRhbC1zeW1ib2wiXSwgImY0N2UiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem05Ni0zNDRsMCAxNzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NC05NiAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDk2IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIb3NwaXRhbFN5bWJvbCA9IGZhQ2lyY2xlSDsKICAgIGZhU2Nob29sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzk3OV0sICJmNTQ5IiwgIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE5MnpNMjI0IDM3NmwwIDg4IDEyOCAwIDAtODhjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwem0tMTEyIDhjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTQ5NiAzODRjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMHptMTYtMTQ0bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZ6TTI4OCAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6Il0KICAgIH07CiAgICBmYURpY2VGaXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZml2ZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NjBdLCAiZjUyMyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptNjQgOTZhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek05NiAzNTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0LTY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDE2MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVRvcm5hZG8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9ybmFkbyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzc4Nl0sICJmNzZmIiwgIk0wIDMyTDAgNDUuNkMwIDYyLjcgMS43IDc5LjYgNSA5NmwzNTIuOCAwYzMuMi02LjkgNy41LTEzLjMgMTMtMTguOGwzOC42LTM4LjZjNC4yLTQuMiA2LjYtMTAgNi42LTE2IDAtMTIuNS0xMC4xLTIyLjYtMjIuNi0yMi42TDMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyek0zNTUuNyAxNDRsLTMzNiAwYzEyLjQgMjkuNyAzMC4yIDU2LjggNTIuNyA4MGwzMzkuNiAwLTQ3LjItNjIuOWMtMy45LTUuMi03LTExLTkuMi0xNy4xek0yNDIuNiAzMzQuN2M4LjIgNC44IDE1LjggMTAuNyAyMi41IDE3LjNMNDQ1IDM1MmMyLTkuOCAzLTE5LjkgMy0zMC4xIDAtMTcuMS0yLjktMzQtOC42LTQ5LjlMMTM2IDI3MiAyNDIuNiAzMzQuN3pNMjk0LjMgNDAwYzUuMyAxNyA2LjUgMzUuMiAzLjYgNTNsLTUuOSAzNS43Yy0yIDEyLjIgNy40IDIzLjQgMTkuOCAyMy40IDUuMyAwIDEwLjQtMi4xIDE0LjItNS45bDc4LjItNzguMmM4LjUtOC41IDE1LjgtMTcuOCAyMS45LTI3LjlsLTEzMS44IDB6Il0KICAgIH07CiAgICBmYUpldEZpZ2h0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiamV0LWZpZ2h0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZmlnaHRlci1qZXQiXSwgImYwZmIiLCAiTTQ5Ni4yIDIwNi44Yy0xMC43LTQuNS0yMi4yLTYuOC0zMy44LTYuOEwzNjIgMjAwIDI0OCA0OCAyOTYgNDhjMTMuMyAwIDI0LTEwLjcgMjQtMjRTMzA5LjMgMCAyOTYgMEwxNTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4IDAgMCAxNTItNTQuNCAwLTUyLjgtNjZjLTMtMy44LTcuNi02LTEyLjUtNkwxNiAxMjhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDg4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCA4OGMwIDguOCA3LjIgMTYgMTYgMTZsMjQuMyAwYzQuOSAwIDkuNS0yLjIgMTIuNS02bDUyLjgtNjYgNTQuNCAwIDAgMTUyLTggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAxMTQtMTUyIDEwMC40IDBjMTEuNiAwIDIzLjEtMi4zIDMzLjgtNi44bDY1LTI3LjFjOC45LTMuNyAxNC44LTEyLjUgMTQuOC0yMi4ycy01LjgtMTguNC0xNC44LTIyLjJsLTY1LTI3LjF6Il0KICAgIH07CiAgICBmYUZpZ2h0ZXJKZXQgPSBmYUpldEZpZ2h0ZXI7CiAgICBmYVRodW1ic0Rvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRodW1icy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MDc4LCA2MTU3Nl0sICJmMTY1IiwgIk0zODQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDggMCA2LjMtMS4zIDEyLjItMy40IDE3LjcgMjAuNCA1LjUgMzUuNCAyNC4xIDM1LjQgNDYuMyAwIDkuMS0yLjYgMTcuNi03IDI0LjkgMjIuMiA0LjIgMzkgMjMuNyAzOSA0Ny4xIDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwIDI4LjIgNzAuNGMyLjUgNi4zIDMuOCAxMy4xIDMuOCAxOS45bDAgNC4yYzAgMjcuMy0yMi4xIDQ5LjQtNDkuNCA0OS40LTE4LjcgMC0zNS44LTEwLjYtNDQuMi0yNy4zTDE3MC4xIDM1Ni4zYy02LjctMTMuMy0xMC4xLTI4LTEwLjEtNDIuOWwwLTE4Ni42YzAtMTkuNCA4LjktMzcuOCAyNC01MGwxMi4yLTkuN0MyMjQuNiA0NC40IDI1OS44IDMyIDI5Ni4xIDMyTDM4NCAzMnpNODAgOTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTQ4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDQ4IDB6Il0KICAgIH07CiAgICBmYUJyb29tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyb29tIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NTI5XSwgImY1MWEiLCAiTTU2Ni42IDU0LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE5MiAxOTItMzQuNy0zNC43Yy00LjItNC4yLTEwLTYuNi0xNi02LjYtMTIuNSAwLTIyLjYgMTAuMS0yMi42IDIyLjZsMCAyOS4xIDEwOC4zIDEwOC4zIDI5LjEgMGMxMi41IDAgMjIuNi0xMC4xIDIyLjYtMjIuNiAwLTYtMi40LTExLjgtNi42LTE2bC0zNC43LTM0LjcgMTkyLTE5MnpNMzQxLjEgMzUzLjRMMjIyLjYgMjM0LjljLTQyLjctMy43LTg1LjIgMTEuNy0xMTUuOCA0Mi4zbC04IDhjLTIyLjMgMjIuMy0zNC44IDUyLjUtMzQuOCA4NCAwIDYuOCA3LjEgMTEuMiAxMy4yIDguMmw1MS4xLTI1LjVjNS0yLjUgOS41IDQuMSA1LjQgNy45TDcuMyA0NzMuNEMyLjcgNDc3LjYgMCA0ODMuNiAwIDQ4OS45IDAgNTAyLjEgOS45IDUxMiAyMi4xIDUxMmwxNzMuMyAwYzM4LjggMCA3NS45LTE1LjQgMTAzLjQtNDIuOCAzMC42LTMwLjYgNDUuOS03My4xIDQyLjMtMTE1Ljh6Il0KICAgIH07CiAgICBmYUZpbGVJbXBvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1pbXBvcnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiYXJyb3ctcmlnaHQtdG8tZmlsZSJdLCAiZjU2ZiIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNDAgMTgyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDcyIDcyYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC03MiA3MmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwzMS0zMS0xODIuMSAwIDAgOTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFRvRmlsZSA9IGZhRmlsZUltcG9ydDsKICAgIGZhVXRlbnNpbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXRlbnNpbHMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjAsIDYxNjg1LCAiY3V0bGVyeSJdLCAiZjJlNyIsICJNNjMuOSAxNC40QzYzLjEgNi4yIDU2LjIgMCA0OCAwcy0xNS4xIDYuMi0xNiAxNC4zTDE3LjkgMTQ5LjdjLTEuMyA2LTEuOSAxMi4xLTEuOSAxOC4yIDAgNDUuOSAzNS4xIDgzLjYgODAgODcuN0w5NiA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNC40YzQ0LjktNC4xIDgwLTQxLjggODAtODcuNyAwLTYuMS0uNi0xMi4yLTEuOS0xOC4yTDIyMy45IDE0LjNDMjIzLjEgNi4yIDIxNi4yIDAgMjA4IDBzLTE1LjEgNi4yLTE1LjkgMTQuNEwxNzguNSAxNDkuOWMtLjYgNS43LTUuNCAxMC4xLTExLjEgMTAuMS01LjggMC0xMC42LTQuNC0xMS4yLTEwLjJMMTQzLjkgMTQuNkMxNDMuMiA2LjMgMTM2LjMgMCAxMjggMHMtMTUuMiA2LjMtMTUuOSAxNC42TDk5LjggMTQ5LjhjLS41IDUuOC01LjQgMTAuMi0xMS4yIDEwLjItNS44IDAtMTAuNi00LjQtMTEuMS0xMC4xTDYzLjkgMTQuNHpNNDQ4IDBDNDMyIDAgMzIwIDMyIDMyMCAxNzZsMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFDdXRsZXJ5ID0gZmFVdGVuc2lsczsKICAgIGZhSWRCYWRnZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaWQtYmFkZ2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjJjMSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHptOTYgMzUybDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDk2IDQ0OGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNTIgNjRsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3BpZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaWRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM3NV0sICJmNzE3IiwgIk0zNjkuMy0zMWMxMS45LTMuNSAyNC40IDIuNyAyOSAxMy45bC44IDIuMyA0MCAxMzZjMi41IDguNCAuMSAxNy41LTYuMSAyMy43bC02NC4xIDY0LjEgNzYuNC0yMC44IDE5LjktNTkuOCAuOS0yLjNjNS0xMS4xIDE3LjctMTYuOCAyOS41LTEyLjkgMTEuOCAzLjkgMTguNSAxNi4xIDE1LjggMjhsLS43IDIuNC0yNCA3MmMtMi41IDcuNi04LjcgMTMuNC0xNi41IDE1LjZsLTkxLjEgMjQuOCA5MS4xIDI0LjhjNy43IDIuMSAxMy45IDggMTYuNSAxNS42bDI0IDcyIC43IDIuNGMyLjcgMTEuOS00LjEgMjQuMS0xNS44IDI4LTExLjggMy45LTI0LjUtMS44LTI5LjUtMTIuOWwtLjktMi4zLTE5LjktNTkuOC03Ni40LTIwLjggNjQuMSA2NC4xYzYuMSA2LjEgOC41IDE1LjEgNi4yIDIzLjRsLTQwIDE0NC0uOCAyLjNjLTQuNCAxMS4zLTE2LjggMTcuNy0yOC44IDE0LjQtMTItMy4zLTE5LjMtMTUuMi0xNy4yLTI3LjJsLjUtMi40IDM2LjItMTMwLjUtMzcuMi0zNy4yQzM1MSA0MDYgMzA4LjQgNDQ4IDI1NiA0NDhzLTk1LTQyLTk2LTk0LjFsLTM3IDM3IDM2IDEyMi4zIC42IDIuNGMyLjIgMTEuOS00LjkgMjMuOS0xNi44IDI3LjQtMTEuOSAzLjUtMjQuNC0yLjctMjktMTMuOWwtLjgtMi4zLTQwLTEzNmMtMi41LTguNC0uMS0xNy41IDYuMS0yMy44bDY0LjEtNjQuMS03Ni40IDIwLjgtMTkuOSA1OS44LS45IDIuM2MtNSAxMS4xLTE3LjcgMTYuOC0yOS41IDEyLjlzLTE4LjUtMTYuMS0xNS44LTI4bC43LTIuNCAyNC03MmMyLjUtNy42IDguNy0xMy40IDE2LjUtMTUuNmw5MS4xLTI0LjgtOTEuMS0yNC44Yy03LjctMi4xLTEzLjktOC0xNi41LTE1LjZsLTI0LTcyLS43LTIuNGMtMi43LTExLjkgNC4xLTI0LjEgMTUuOC0yOHMyNC41IDEuOCAyOS41IDEyLjlsLjkgMi4zIDE5LjkgNTkuOCA3Ni40IDIwLjgtNjQuMS02NC4xYy02LjItNi4yLTguNS0xNS4zLTYuMS0yMy43bDQwLTEzNiAuOC0yLjNjNC42LTExLjMgMTcuMS0xNy40IDI5LTEzLjkgMTEuOSAzLjUgMTkgMTUuNSAxNi44IDI3LjRsLS42IDIuNC0zNiAxMjIuMyA1MyA1M2MxLTQzLjMgMzYuNC03OC4xIDc5LjktNzguMXM3OC45IDM0LjggNzkuOSA3OC4ybDUzLjEtNTMuMS0zNi0xMjIuMy0uNi0yLjRjLTIuMi0xMiA0LjktMjMuOSAxNi44LTI3LjR6Il0KICAgIH07CiAgICBmYU1vYmlsZVJldHJvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vYmlsZS1yZXRybyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNTI3IiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6bTgwIDk2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem04IDE5MmEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0IDcyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0IDEwLjcgMjQgMjQgMjQgMjQtMTAuNyAyNC0yNHptNjQtNzJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0yNCA3MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNCAxMC43IDI0IDI0IDI0IDI0LTEwLjcgMjQtMjR6bTY0LTcyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptMjQgNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjQgMTAuNyAyNCAyNCAyNCAyNC0xMC43IDI0LTI0ek0xNjggNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHoiXQogICAgfTsKICAgIGZhU2lnbnNQb3N0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25zLXBvc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFwLXNpZ25zIl0sICJmMjc3IiwgIk0yNTYuNCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2MCAwIDAgNjQtMTUzLjQgMGMtNC4yIDAtOC4zIDEuNy0xMS4zIDQuN2wtNDggNDhjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQ4IDQ4YzMgMyA3LjEgNC43IDExLjMgNC43bDE1My40IDAgMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTYgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC02NCAxNTMuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsNDgtNDhjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZsLTQ4LTQ4Yy0zLTMtNy4xLTQuNy0xMS4zLTQuN2wtMTUzLjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFNYXBTaWducyA9IGZhU2lnbnNQb3N0OwogICAgZmFHcm91cEFycm93c1JvdGF0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncm91cC1hcnJvd3Mtcm90YXRlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZjYiLCAiTTM3LjYgMTIyLjNjLTExLjUgMTguNy0yMC42IDM5LTI3IDYwLjUtNSAxNi45IDQuNiAzNC44IDIxLjUgMzkuOHMzNC44LTQuNiAzOS44LTIxLjVjMTguNC02MS45IDY3LjMtMTEwLjggMTI5LjItMTI5LjIgMTYuOS01IDI2LjYtMjIuOSAyMS41LTM5LjhTMTk5LjggNS42IDE4Mi45IDEwLjZDMTYxLjQgMTcgMTQxLjEgMjYuMSAxMjIuMyAzNy42IDExMi4zIDE1LjQgODkuOSAwIDY0IDAgMjguNyAwIDAgMjguNyAwIDY0IDAgODkuOSAxNS40IDExMi4zIDM3LjYgMTIyLjN6bTQzNi43IDBjMjIuMi0xMCAzNy42LTMyLjQgMzcuNi01OC4zIDAtMzUuMy0yOC43LTY0LTY0LTY0LTI1LjkgMC00OC4zIDE1LjQtNTguMyAzNy42LTE4LjctMTEuNS0zOS0yMC42LTYwLjUtMjctMTYuOS01LTM0LjggNC42LTM5LjggMjEuNXM0LjYgMzQuOCAyMS41IDM5LjhjNjEuOSAxOC40IDExMC44IDY3LjMgMTI5LjIgMTI5LjIgNSAxNi45IDIyLjkgMjYuNiAzOS44IDIxLjVzMjYuNi0yMi45IDIxLjUtMzkuOGMtNi40LTIxLjUtMTUuNS00MS44LTI3LTYwLjV6TTUxMiA0NDhjMC0yNS45LTE1LjQtNDguMy0zNy42LTU4LjMgMTEuNS0xOC43IDIwLjYtMzkgMjctNjAuNSA1LTE2LjktNC42LTM0LjgtMjEuNS0zOS44cy0zNC44IDQuNi0zOS44IDIxLjVjLTE4LjQgNjEuOS02Ny4zIDExMC44LTEyOS4yIDEyOS4yLTE2LjkgNS0yNi42IDIyLjktMjEuNSAzOS44czIyLjkgMjYuNiAzOS44IDIxLjVjMjEuNS02LjQgNDEuOC0xNS41IDYwLjUtMjcgMTAgMjIuMiAzMi40IDM3LjYgNTguMyAzNy42IDM1LjMgMCA2NC0yOC43IDY0LTY0ek0zNy42IDM4OS43Yy0yMi4yIDEwLTM3LjYgMzIuNC0zNy42IDU4LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjQgMjUuOSAwIDQ4LjMtMTUuNCA1OC4zLTM3LjYgMTguNyAxMS41IDM5IDIwLjYgNjAuNSAyNyAxNi45IDUgMzQuOC00LjYgMzkuOC0yMS41cy00LjYtMzQuOC0yMS41LTM5LjhjLTYxLjktMTguNC0xMTAuOC02Ny4zLTEyOS4yLTEyOS4yLTUtMTYuOS0yMi45LTI2LjYtMzkuOC0yMS41UzUuNiAzMTIuMiAxMC42IDMyOS4xYzYuNCAyMS41IDE1LjUgNDEuOCAyNyA2MC41ek0yNTYgMTkyYzE1LjYgMCAzMCA1LjYgNDEuMSAxNC45bC0xNS4zIDE1LjNjLTYuNiA2LjYtMS45IDE3LjggNy40IDE3LjhsNjAuNSAwYzUuNyAwIDEwLjQtNC43IDEwLjQtMTAuNGwwLTYwLjVjMC05LjMtMTEuMi0xMy45LTE3LjgtNy40bC0xMS4yIDExLjJjLTE5LjgtMTcuOS00Ni4yLTI4LjktNzUuMS0yOC45LTQzLjYgMC04MS4zIDI0LjktOTkuOCA2MS4xLTYgMTEuOC0xLjQgMjYuMyAxMC40IDMyLjNzMjYuMyAxLjQgMzIuMy0xMC40YzEwLjYtMjAuOCAzMi4yLTM0LjkgNTctMzQuOXptNTguNiA5My4xYy0xMC42IDIwLjgtMzIuMiAzNC45LTU3IDM0LjktMTUuNyAwLTMwLTUuNi00MS4xLTE0LjlsMTUuMy0xNS4zYzYuNi02LjYgMS45LTE3LjgtNy40LTE3LjhMMTY0IDI3MmMtNS43IDAtMTAuNCA0LjctMTAuNCAxMC40bDAgNjAuNWMwIDkuMyAxMS4yIDEzLjkgMTcuOCA3LjRsMTEuMi0xMS4yYzE5LjggMTcuOSA0Ni4yIDI4LjkgNzUuMSAyOC45IDQzLjYgMCA4MS4zLTI0LjkgOTkuOC02MS4xIDYtMTEuOCAxLjQtMjYuMy0xMC40LTMyLjNzLTI2LjMtMS40LTMyLjMgMTAuNHoiXQogICAgfTsKICAgIGZhQXJyb3dzU3BsaXRVcEFuZExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXNwbGl0LXVwLWFuZC1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YmMiLCAiTTM0Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw0MS40LTQxLjQgMCAxOTUuOWMtMTguOC0xMC45LTQwLjctMTcuMS02NC0xNy4xbC0xMTQuNyAwIDQxLjQtNDEuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMzIwIDIyNCAzMjBjMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYUZpbGxEcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGwtZHJpcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTc2IiwgIk0zMDkuNyA3MS42bC02NC40IDY0LjQgMzMuNCAzMy40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwbC0zMy40LTMzLjQtOTYuNCA5Ni40Yy0yLjkgMi45LTUuMSA2LjUtNi4zIDEwLjNsMzIxLjUgMCA1My43LTUzLjdjNC45LTQuOSA3LjYtMTEuNSA3LjYtMTguM3MtMi43LTEzLjUtNy42LTE4LjNMMzQ2LjMgNzEuNkMzNDEuNSA2Ni43IDMzNC45IDY0IDMyOCA2NHMtMTMuNSAyLjctMTguMyA3LjZ6TTU4LjMgMjMyLjRsOTYuNC05Ni40LTQ5LjQtNDkuNGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwyMDAgOTAuNyAyNjQuNCAyNi4zQzI4MS4zIDkuNSAzMDQuMSAwIDMyOCAwczQ2LjcgOS41IDYzLjYgMjYuM0w1MTcuNyAxNTIuNEM1MzQuNSAxNjkuMyA1NDQgMTkyLjEgNTQ0IDIxNnMtOS41IDQ2LjctMjYuMyA2My42TDMxMS42IDQ4NS43QzI5NC43IDUwMi41IDI3MS45IDUxMiAyNDggNTEycy00Ni43LTkuNS02My42LTI2LjNMNTguMyAzNTkuNkM0MS41IDM0Mi43IDMyIDMxOS45IDMyIDI5NnM5LjUtNDYuNyAyNi4zLTYzLjZ6TTUxMiA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjUuMiAzMi42LTc5LjYgNTEuMi0xMDguNyA2LTkuNCAxOS41LTkuNCAyNS41IDAgMTguNyAyOS4xIDUxLjIgODMuNSA1MS4yIDEwOC43IDAgMzUuMy0yOC43IDY0LTY0IDY0eiJdCiAgICB9OwogICAgZmFTaGllbGRIZWFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGllbGQtaGVhcnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3NCIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTI0OS42IDE4My41bDYuNCA4LjUgNi40LTguNWMxMS4xLTE0LjggMjguNS0yMy41IDQ2LjktMjMuNSAzMi40IDAgNTguNyAyNi4zIDU4LjcgNTguN2wwIDUuM2MwIDQ5LjEtNjUuOCA5OC4xLTk2LjUgMTE4LjMtOS41IDYuMi0yMS41IDYuMi0zMC45IDAtMzAuNy0yMC4yLTk2LjUtNjkuMy05Ni41LTExOC4zbDAtNS4zYzAtMzIuNCAyNi4zLTU4LjcgNTguNy01OC43IDE4LjUgMCAzNS45IDguNyA0Ni45IDIzLjV6Il0KICAgIH07CiAgICBmYVBlcnNvblNraWluZ05vcmRpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2tpaW5nLW5vcmRpYyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJza2lpbmctbm9yZGljIl0sICJmN2NhIiwgIk00MjQuOCAxNmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptOTkuOCAxOTMuN2M3LjYgMTUuMiAxLjkgMzMuNi0xMi42IDQybDAgMTgwLjMtMzIgMCAwLTE2NC4yLTEwLjEgNWMtMjcuNCAxMy43LTYwLjcgNi4xLTc5LjQtMTguMmwtMTkuNi0yNS41LTM5LjUgNjguOCAyNC44IDEyLjRjMjkuNSAxNC43IDQyLjkgNDkuNSAzMS4xIDgwLjJsLTI4LjIgNzMuNCAxNDkuNCAwYzcuOSAwIDE1LjYtMi4zIDIyLjItNi43bDcuOS01LjNjMTEtNy40IDI1LjktNC40IDMzLjMgNi43czQuNCAyNS45LTYuNyAzMy4zbC03LjkgNS4zQzU0MyA1MDYuOSA1MjYgNTEyIDUwOC42IDUxMmwtMTg5LjEgMGMtLjUgMC0xIDAtMS41IDBMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDg4IDBjMC04LjIgMy4xLTE2LjQgOS40LTIyLjZsNzQuMS03NC4xIDEwLjItMzUuOWMxMS4zIDE4LjMgMjcuNyAzMy44IDQ4LjQgNDQuMmw0LjggMi40LTEuOSA2LjhjLTMgMTAuNS04LjYgMjAtMTYuMyAyNy43bC01MS41IDUxLjUgMTAxLjMgMCAzNy4xLTk2LjQtNTUuNi0yNy44QzIzMC40IDMxOSAyMTUuMyAyNjcgMjM5LjMgMjI3LjFsMzcuNy02Mi43LTI3LjctNy43Yy05LTIuNS0xOC4xIDMuMi0yMCAxMi4zbC01LjkgMjkuM2MtMy4xIDE1LjYtMTcuMSAyNi4zLTMyLjUgMjUuN2wtMTMwIDIwOC0zNy43IDAgMTQwLjYtMjI1Yy0zLjQtNi4zLTQuNi0xMy44LTMuMS0yMS4zbDUuOS0yOS4zYzkuMS00NS42IDU1LjEtNzMuOCA5OS45LTYxLjRsMzIuNSA5YzQ2LjcgMTMgODggNDAuOCAxMTcuNiA3OS4zbDI0LjkgMzIuMyA0MC40LTIwLjJjMTUuOC03LjkgMzUtMS41IDQyLjkgMTQuM3oiXQogICAgfTsKICAgIGZhU2tpaW5nTm9yZGljID0gZmFQZXJzb25Ta2lpbmdOb3JkaWM7CiAgICBmYVNxdWFyZUNoZWNrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2hlY2siLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NzQ1LCA5OTg5LCA2MTUxMCwgImNoZWNrLXNxdWFyZSJdLCAiZjE0YSIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMzQyIDE0NS43Yy0xMC43LTcuOC0yNS43LTUuNC0zMy41IDUuM0wxODkuMSAzMTUuMiAxMzcgMjYzLjFjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNzIgNzJjNSA1IDExLjkgNy41IDE4LjggN3MxMy40LTQuMSAxNy41LTkuOEwzNDcuMyAxNzkuMmM3LjgtMTAuNyA1LjQtMjUuNy01LjMtMzMuNXoiXQogICAgfTsKICAgIGZhQ2hlY2tTcXVhcmUyID0gZmFTcXVhcmVDaGVjazI7CiAgICBmYUJhdGggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcwNSwgImJhdGh0dWIiXSwgImYyY2QiLCAiTTk2IDc3LjNjMC03LjMgNS45LTEzLjMgMTMuMy0xMy4zIDMuNSAwIDYuOSAxLjQgOS40IDMuOWwxNC45IDE0LjljLTMuNiA5LjEtNS41IDE4LjktNS41IDI5LjIgMCAxOS45IDcuMiAzOCAxOS4yIDUyLTUuMyA5LjItNCAyMS4xIDMuOCAyOSA5LjQgOS40IDI0LjYgOS40IDMzLjkgMEwyODkgODljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjktNy44LTcuOS0xOS44LTkuMS0yOS0zLjgtMTQtMTItMzIuMS0xOS4yLTUyLTE5LjItMTAuMyAwLTIwLjIgMi0yOS4yIDUuNUwxNjMuOSAyMi42QzE0OS40IDguMSAxMjkuNyAwIDEwOS4zIDAgNjYuNiAwIDMyIDM0LjYgMzIgNzcuM0wzMiAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMCA0OGMwIDI4LjQgMTIuNCA1NCAzMiA3MS42TDY0IDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYgMjU2IDAgMCAxNmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDAuNGMxOS42LTE3LjYgMzItNDMuMSAzMi03MS42bDAtNDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMjU2IDk2IDc3LjN6Il0KICAgIH07CiAgICBmYUJhdGh0dWIgPSBmYUJhdGg7CiAgICBmYUNoZXNzQmlzaG9wMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1iaXNob3AiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5ODIxXSwgImY0M2EiLCAiTTY0IDM4NEw0OC4zIDM2OC4zQzE3LjQgMzM3LjQgMCAyOTUuNCAwIDI1MS43IDAgMjEzLjEgMTMuNSAxNzUuOCAzOC4yIDE0Ni4xTDEwNi43IDY0IDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMlM3OC4zIDAgOTYgMEwyMjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTAuNyAwIDQ3LjYgNTcuMS04NS45IDg1LjljLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw4Mi4zLTgyLjNjMTguNyAyNy4zIDI4LjcgNTkuNyAyOC43IDkzIDAgNDMuNy0xNy40IDg1LjctNDguMyAxMTYuNkwyNTYgMzg0IDMxMi4yIDQ1NC4zYzUgNi4zIDcuOCAxNC4xIDcuOCAyMi4yIDAgMTkuNi0xNS45IDM1LjUtMzUuNSAzNS41TDM1LjUgNTEyYy0xOS42IDAtMzUuNS0xNS45LTM1LjUtMzUuNSAwLTguMSAyLjctMTUuOSA3LjgtMjIuMkw2NCAzODR6Il0KICAgIH07CiAgICBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uLWJvdHRsZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInByZXNjcmlwdGlvbi1ib3R0bGUtYWx0Il0sICJmNDg2IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMDR6TTE2MCAyNDhsMCA0MC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDAgMCAwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQwIDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00MCAwIDAtNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYVByZXNjcmlwdGlvbkJvdHRsZUFsdCA9IGZhUHJlc2NyaXB0aW9uQm90dGxlTWVkaWNhbDsKICAgIGZhRHJhd1BvbHlnb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJhdy1wb2x5Z29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNTgwNTUsICJ2ZWN0b3ItcG9seWdvbiJdLCAiZjVlZSIsICJNNjQgMGMyMy43IDAgNDQuNCAxMi45IDU1LjQgMzJsMjczLjEgMGMxMS4xLTE5LjEgMzEuNy0zMiA1NS40LTMyIDM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMzQtMjYuNSA2MS44LTYwIDYzLjlsLTIuMSAyLjktNzEuNSA5OS4xYzMuNiA4IDUuNiAxNi45IDUuNiAyNi4ycy0yIDE4LjItNS42IDI2LjJsMi4yIDMuMSA2OS4zIDk2IDIuMSAyLjljMzMuNSAyLjEgNjAgMjkuOSA2MCA2My45IDAgMzUuMy0yOC43IDY0LTY0IDY0LTIzLjcgMC00NC40LTEyLjktNTUuNC0zMmwtMjczLjEgMGMtMTEuMSAxOS4xLTMxLjcgMzItNTUuNCAzMi0zNS4zIDAtNjQtMjguNy02NC02NCAwLTIzLjcgMTIuOS00NC40IDMyLTU1LjRsMC0yNzMuMUMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMHpNMzk0LjIgNDEzLjRsLTY1LjUtOTAuNi0yLjItMy4xYy0yLjEgLjItNC4zIC4zLTYuNSAuMy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzIuMiAwIDQuNCAuMSA2LjUgLjNsNjcuNy05My43Yy0uNi0uOS0xLjEtMS43LTEuNi0yLjZMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwyNzMuMSAwYy41LS45IDEuMS0xLjggMS42LTIuNnoiXQogICAgfTsKICAgIGZhVmVjdG9yUG9seWdvbiA9IGZhRHJhd1BvbHlnb247CiAgICBmYUlDdXJzb3IgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaS1jdXJzb3IiLAogICAgICBpY29uOiBbMjU2LCA1MTIsIFtdLCAiZjI0NiIsICJNLjEgMjkuM0MtMS40IDQ3IDExLjcgNjIuNCAyOS4zIDYzLjlsOCAuN0M3MC41IDY3LjMgOTYgOTUgOTYgMTI4LjNsMCA5NS43LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDk1LjdjMCAzMy4zLTI1LjUgNjEtNTguNyA2My44bC04IC43QzExLjcgNDQ5LjYtMS40IDQ2NSAuMSA0ODIuN1MxNyA1MTMuNCAzNC43IDUxMS45bDgtLjdjMzQuMS0yLjggNjQuMi0xOC45IDg1LjQtNDIuOSAyMS4yIDI0IDUxLjIgNDAgODUuNCA0Mi45bDggLjdjMTcuNiAxLjUgMzMuMS0xMS42IDM0LjUtMjkuMnMtMTEuNi0zMy4xLTI5LjItMzQuNWwtOC0uN0MxODUuNSA0NDQuNyAxNjAgNDE3IDE2MCAzODMuN2wwLTk1LjcgMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTk1LjdjMC0zMy4zIDI1LjUtNjEgNTguNy02My44bDgtLjdjMTcuNi0xLjUgMzAuNy0xNi45IDI5LjItMzQuNVMyMzktMS40IDIyMS4zIC4xbC04IC43Yy0zNC4xIDIuOC02NC4yIDE4LjktODUuNCA0Mi45LTIxLjItMjQtNTEuMi00MC04NS40LTQyLjlsLTgtLjdDMTctMS40IDEuNiAxMS43IC4xIDI5LjN6Il0KICAgIH07CiAgICBmYUhlYXJ0Q2lyY2xlUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTAwIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek00MzIgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMTYgODBjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA0OC00OCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDQ4IDAgMCA0OGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDggNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtNDggMCAwLTQ4eiJdCiAgICB9OwogICAgZmFTaGllbGREb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWRvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTczIiwgIk0yNjkuNCAyLjlDMjY1LjIgMSAyNjAuNyAwIDI1NiAwcy05LjIgMS0xMy40IDIuOUw1NC4zIDgyLjhjLTIyIDkuMy0zOC40IDMxLTM4LjMgNTcuMiAuNSA5OS4yIDQxLjMgMjgwLjcgMjEzLjYgMzYzLjIgMTYuNyA4IDM2LjEgOCA1Mi44IDAgMTcyLjQtODIuNSAyMTMuMi0yNjQgMjEzLjYtMzYzLjIgLjEtMjYuMi0xNi4zLTQ3LjktMzguMy01Ny4yTDI2OS40IDIuOXpNMTYwLjkgMjg2LjJjNC44IDEuMiA5LjkgMS44IDE1LjEgMS44IDM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjQgNDQuMiAwYzEyLjEgMCAyMy4yIDYuOCAyOC42IDE3LjdsNy4yIDE0LjMgNjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtNDggMCAwIDUwLjdjMCA3LjMtNS45IDEzLjMtMTMuMyAxMy4zLTEuOCAwLTMuNi0uNC01LjItMS4xbC05OC43LTQyLjNjLTYuNi0yLjgtMTAuOC05LjMtMTAuOC0xNi40IDAtMi44IC42LTUuNSAxLjktOGwxNS0zMHpNMTYwIDE2MGw0OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00OGMwLTguOCA3LjItMTYgMTYtMTZ6bTEyOCA0OGExNiAxNiAwIDEgMCAtMzIgMCAxNiAxNiAwIDEgMCAzMiAweiJdCiAgICB9OwogICAgZmFHcmVhdGVyVGhhbkVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyZWF0ZXItdGhhbi1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTMyIiwgIk0yMS45IDk0LjRDNS4xIDg4LjgtMy45IDcwLjYgMS43IDUzLjlTMjUuNCAyOC4xIDQyLjEgMzMuNmwzODQgMTI4QzQzOS4yIDE2NiA0NDggMTc4LjIgNDQ4IDE5MnMtOC44IDI2LTIxLjkgMzAuNGwtMzg0IDEyOGMtMTYuOCA1LjYtMzQuOS0zLjUtNDAuNS0yMC4yczMuNS0zNC45IDIwLjItNDAuNUwzMTQuOCAxOTIgMjEuOSA5NC40ek00MTYgNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMHoiXQogICAgfTsKICAgIGZhRW52ZWxvcGVPcGVuMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbnZlbG9wZS1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzVdLCAiZjJiNiIsICJNNjQuNCAxNzUuOEwyNTYgMzMuOSA0NDcuNiAxNzUuOCAyODkuNSAyOTNjLTkuNyA3LjItMjEuNCAxMS0zMy41IDExcy0yMy44LTMuOS0zMy41LTExTDY0LjQgMTc1Ljh6TTI1Ni0zMmMtMTIuMSAwLTIzLjggMy45LTMzLjUgMTFMMjUuOSAxMjQuN0M5LjYgMTM2LjggMCAxNTUuOCAwIDE3Ni4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjM5LjljMC0yMC4zLTkuNi0zOS40LTI1LjktNTEuNEwyODkuNS0yMWMtOS43LTcuMi0yMS40LTExLTMzLjUtMTF6Il0KICAgIH07CiAgICBmYU1vdW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vdW5kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MmQiLCAiTTExMi40IDE3OS4yQzE0MiAxMjcuNyAxOTYuOCA5NiAyNTYuMiA5NnMxMTQuMiAzMS43IDE0My45IDgzLjJMNTA4LjcgMzY4YzEyLjMgMjEuMy0zLjEgNDgtMjcuNyA0OEwzMS41IDQxNmMtMjQuNiAwLTQwLTI2LjYtMjcuNy00OEwxMTIuNCAxNzkuMnoiXQogICAgfTsKICAgIGZhVm9pY2VtYWlsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvaWNlbWFpbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmODk3IiwgIk0xNDQgMTYwYTgwIDgwIDAgMSAxIDAgMTYwIDgwIDgwIDAgMSAxIDAtMTYwek0yNjMuOCAzMjBjMTUuMy0yMi45IDI0LjItNTAuNCAyNC4yLTgwIDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzAgMTYwLjUgMCAyNDAgNjQuNSAzODQgMTQ0IDM4NGwzNTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFM1NzUuNSA5NiA0OTYgOTYgMzUyIDE2MC41IDM1MiAyNDBjMCAyOS42IDguOSA1Ny4xIDI0LjIgODBsLTExMi41IDB6TTQ5NiAxNjBhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6Il0KICAgIH07CiAgICBmYVZlc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVzdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMDg1IiwgIk0yMDAgNDY0bDAtMTcwLjFjMC0zLjktLjUtNy44LTEuNC0xMS42TDE0NC40IDY1LjRDMTYyLjEgNzcuMiAxODguMiA4OCAyMjQgODhzNjEuOS0xMC44IDc5LjYtMjIuNkwyNDkuNCAyODIuM2MtMSAzLjgtMS40IDcuNy0xLjQgMTEuNkwyNDggNDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEwNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkzLjVjMC05LjUtMi44LTE4LjctOC4xLTI2LjZsLTQ3LjktNzEuOGMtNS4zLTcuOS04LjEtMTcuMS04LjEtMjYuNkwzODQgNDhjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMuNSAwYy0uMyAwLS42IDAtMSAwLS42IDAtMS4yIDAtMS44IDAtMTguOCAwLTM0LjEgOS43LTQ0LjEgMTguOC05LjMgOC40LTI4LjUgMjEuMi02MS43IDIxLjJzLTUyLjQtMTIuOC02MS43LTIxLjJjLTEwLTkuMS0yNS4zLTE4LjgtNDQuMS0xOC44LS42IDAtMS4yIDAtMS44IDAtLjMgMC0uNiAwLTEgMEwxMTIgMEM4NS41IDAgNjQgMjEuNSA2NCA0OGwwIDk3LjVjMCA5LjUtMi44IDE4LjctOC4xIDI2LjZMOC4xIDI0My45QzIuOCAyNTEuOCAwIDI2MS4xIDAgMjcwLjVMMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMTA0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDh6Il0KICAgIH07CiAgICBmYUF1ZGlvRGVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXVkaW8tZGVzY3JpcHRpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5ZSIsICJNMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOHptOTYgOTZsMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0IDQ4IDAgMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0YzAtMzUuMy0yOC43LTY0LTY0LTY0bC0xNiAwYy0zNS4zIDAtNjQgMjguNy02NCA2NHptNDggMzJsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMi00OCAwem0xNTItOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTQ0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC00OGMwLTM5LjgtMzIuMi03Mi03Mi03MmwtNDggMHptNDggMTQ0bC0yNCAwIDAtOTYgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFXID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMTldLCAiNTciLCAiTTIwLjggMzRjMTYuNS02LjIgMzUgMi4yIDQxLjIgMTguN0wxNzIuMiAzNDYuNyAyNTcuMyA1NWM0LTEzLjcgMTYuNS0yMyAzMC43LTIzczI2LjcgOS40IDMwLjcgMjNMNDAzLjggMzQ2LjcgNTE0IDUyLjhjNi4yLTE2LjUgMjQuNi0yNC45IDQxLjItMTguN1M1ODAuMiA1OC43IDU3NCA3NS4ybC0xNDQgMzg0Yy00LjggMTIuOS0xNy40IDIxLjMtMzEuMiAyMC43cy0yNS43LTkuOC0yOS41LTIzTDI4OCAxNzguMyAyMDYuNyA0NTdjLTMuOSAxMy4yLTE1LjggMjIuNS0yOS41IDIzcy0yNi4zLTcuOC0zMS4yLTIwLjdMMiA3NS4yQy00LjIgNTguNyA0LjIgNDAuMiAyMC44IDM0eiJdCiAgICB9OwogICAgZmFFeWVEcm9wcGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV5ZS1kcm9wcGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV5ZS1kcm9wcGVyLWVtcHR5IiwgImV5ZWRyb3BwZXIiXSwgImYxZmIiLCAiTTM0MS42IDI5LjJsLTEwMS42IDEwMS42LTkuNC05LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDE2MCAxNjBjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOS40LTkuNCAxMDEuNi0xMDEuNmMzOS0zOSAzOS0xMDIuMiAwLTE0MS4xcy0xMDIuMi0zOS0xNDEuMSAwek01NS40IDMyMy4zYy0xNSAxNS0yMy40IDM1LjQtMjMuNCA1Ni42bDAgNDIuNC0yNi42IDM5LjljLTguNSAxMi43LTYuOCAyOS42IDQgNDAuNHMyNy43IDEyLjUgNDAuNCA0bDM5LjktMjYuNiA0Mi40IDBjMjEuMiAwIDQxLjYtOC40IDU2LjYtMjMuNGwxMDkuNC0xMDkuNC00NS4zLTQ1LjMtMTA5LjQgMTA5LjRjLTMgMy03LjEgNC43LTExLjMgNC43bC0zNi4xIDAgMC0zNi4xYzAtNC4yIDEuNy04LjMgNC43LTExLjNsMTA5LjQtMTA5LjQtNDUuMy00NS4zLTEwOS40IDEwOS40eiJdCiAgICB9OwogICAgZmFFeWVEcm9wcGVyRW1wdHkgPSBmYUV5ZURyb3BwZXI7CiAgICBmYUV5ZWRyb3BwZXIgPSBmYUV5ZURyb3BwZXI7CiAgICBmYUNpcmNsZVhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTUzMiwgInRpbWVzLWNpcmNsZSIsICJ4bWFyay1jaXJjbGUiXSwgImYwNTciLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjcgMTY3YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDU1IDU1IDU1LTU1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNTUgNTUgNTUgNTVjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNTUtNTUtNTUgNTVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsNTUtNTUtNTUtNTVjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45eiJdCiAgICB9OwogICAgZmFUaW1lc0NpcmNsZTIgPSBmYUNpcmNsZVhtYXJrMjsKICAgIGZhWG1hcmtDaXJjbGUyID0gZmFDaXJjbGVYbWFyazI7CiAgICBmYVRyYWlsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhaWxlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlMDQxIiwgIk0zMiA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yOTYuNCAwYy4yIDIuNiAuNCA1LjMgLjQgOCAwIDQ4LjYtMzkuNCA4OC04OCA4OHMtODgtMzkuNC04OC04OGMwLTIuNyAuMS01LjQgLjQtOEw5NiA0MTZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDMyIDk2em00MDggMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTYwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xNjBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMzZsMCAxNjBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE2MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptMTc2LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0yNjQgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6Il0KICAgIH07CiAgICBmYVR1cmtpc2hMaXJhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJraXNoLWxpcmEtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0cnkiLCAidHVya2lzaC1saXJhIl0sICJlMmJiIiwgIk0xNjAgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0My42IDEyMS40LTM0LjdjMTIuNy0zLjYgMjYgMy43IDI5LjcgMTYuNXMtMy43IDI2LTE2LjUgMjkuN2wtMTM0LjYgMzguNSAwIDQ2LjEgMTIxLjQtMzQuN2MxMi43LTMuNiAyNiAzLjcgMjkuNyAxNi41cy0zLjcgMjYtMTYuNSAyOS43bC0xMzQuNiAzOC41IDAgMTYyLjUgNzIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTEwNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE3Ni4yLTI1LjQgNy4zYy0xMi43IDMuNi0yNi0zLjctMjkuNy0xNi41czMuNy0yNiAxNi41LTI5LjdsMzguNi0xMSAwLTQ2LjEtMjUuNCA3LjNjLTEyLjcgMy42LTI2LTMuNy0yOS43LTE2LjVzMy43LTI2IDE2LjUtMjkuN2wzOC42LTExIDAtNjEuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVHJ5ID0gZmFUdXJraXNoTGlyYVNpZ247CiAgICBmYVR1cmtpc2hMaXJhID0gZmFUdXJraXNoTGlyYVNpZ247CiAgICBmYVZvbGNhbm8gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidm9sY2FubyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1NV0sICJmNzcwIiwgIk0xNjAgMTQ0Yy0zNS4zIDAtNjQtMjguNy02NC02NHMyOC43LTY0IDY0LTY0YzE1LjcgMCAzMCA1LjYgNDEuMiAxNSAxMS4yLTE4LjYgMzEuNi0zMSA1NC44LTMxczQzLjYgMTIuNCA1NC44IDMxYzExLjEtOS40IDI1LjUtMTUgNDEuMi0xNSAzNS4zIDAgNjQgMjguNyA2NCA2NHMtMjguNyA2NC02NCA2NGMtMTQuNyAwLTI4LjMtNS0zOS4xLTEzLjNsLTMyIDQ4QzI3NS4zIDE4NyAyNjYgMTkyIDI1NiAxOTJzLTE5LjMtNS0yNC45LTEzLjNsLTMyLTQ4QzE4OC4zIDEzOSAxNzQuNyAxNDQgMTYwIDE0NHpNMTQ0IDM1Mmw0OC40LTI0LjJjMTAuMi01LjEgMjEuNi03LjggMzMtNy44IDE5LjYgMCAzOC40IDcuOCA1Mi4yIDIxLjZsMzIuNSAzMi41YzYuMyA2LjMgMTQuOSA5LjkgMjMuOCA5LjkgMTEuMyAwIDIxLjgtNS42IDI4LTE1bDkuNy0xNC42LTU5LTY2LjNjLTkuMS0xMC4yLTIyLjItMTYuMS0zNS45LTE2LjFsLTQxLjggMGMtMTMuNyAwLTI2LjggNS45LTM1LjkgMTYuMWwtNTkuOSA2Ny40IDQuNy0zLjV6bTE5LjQtOTUuOGMxOC4yLTIwLjUgNDQuMy0zMi4yIDcxLjgtMzIuMmw0MS44IDBjMjcuNCAwIDUzLjUgMTEuNyA3MS44IDMyLjJsMTUwLjIgMTY5YzguNSA5LjUgMTMuMiAyMS45IDEzLjIgMzQuNyAwIDI4LjgtMjMuNCA1Mi4yLTUyLjIgNTIuMkw1Mi4yIDUxMkMyMy40IDUxMiAwIDQ4OC42IDAgNDU5LjggMCA0NDcuMSA0LjcgNDM0LjcgMTMuMiA0MjUuMmwxNTAuMi0xNjl6Il0KICAgIH07CiAgICBmYVdhbmRTcGFya2xlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YW5kLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3MmIiLCAiTTQ2NCA2LjFjOS41LTguNSAyNC04LjEgMzMgLjlsOCA4YzkgOSA5LjQgMjMuNSAuOSAzM2wtODUuOCA5NS45Yy0yLjYgMi45LTQuMSA2LjctNC4xIDEwLjdsMCAyMS40YzAgOC44LTcuMiAxNi0xNiAxNmwtMTUuOCAwYy00LjYgMC04LjkgMS45LTExLjkgNS4zTDEwMC43IDUwMC45Yy02LjMgNy4xLTE1LjMgMTEuMS0yNC44IDExLjEtOC44IDAtMTcuMy0zLjUtMjMuNS05LjhMOS43IDQ1OS43Yy02LjItNi4yLTkuNy0xNC43LTkuNy0yMy41IDAtOS41IDQtMTguNSAxMS4xLTI0LjhsMTExLjYtOTkuOGMzLjQtMyA1LjMtNy40IDUuMy0xMS45bDAtMjcuNmMwLTguOCA3LjItMTYgMTYtMTZsMzQuNiAwYzMuOSAwIDcuNy0xLjUgMTAuNy00LjFMNDY0IDYuMXpNNDMyIDI4OGMzLjYgMCA2LjcgMi40IDcuNyA1LjhsMTQuOCA1MS43IDUxLjcgMTQuOGMzLjQgMSA1LjggNC4xIDUuOCA3LjdzLTIuNCA2LjctNS44IDcuN2wtNTEuNyAxNC44LTE0LjggNTEuN2MtMSAzLjQtNC4xIDUuOC03LjcgNS44cy02LjctMi40LTcuNy01LjhsLTE0LjgtNTEuNy01MS43LTE0LjhjLTMuNC0xLTUuOC00LjEtNS44LTcuN3MyLjQtNi43IDUuOC03LjdsNTEuNy0xNC44IDE0LjgtNTEuN2MxLTMuNCA0LjEtNS44IDcuNy01Ljh6TTg3LjcgNjkuOGwxNC44IDUxLjcgNTEuNyAxNC44YzMuNCAxIDUuOCA0LjEgNS44IDcuN3MtMi40IDYuNy01LjggNy43bC01MS43IDE0LjgtMTQuOCA1MS43Yy0xIDMuNC00LjEgNS44LTcuNyA1LjhzLTYuNy0yLjQtNy43LTUuOEw1Ny41IDE2Ni41IDUuOCAxNTEuN2MtMy40LTEtNS44LTQuMS01LjgtNy43czIuNC02LjcgNS44LTcuN2w1MS43LTE0LjggMTQuOC01MS43YzEtMy40IDQuMS01LjggNy43LTUuOHM2LjcgMi40IDcuNyA1Ljh6TTIwOCAwYzMuNyAwIDYuOSAyLjUgNy44IDYuMWw2LjggMjcuMyAyNy4zIDYuOGMzLjYgLjkgNi4xIDQuMSA2LjEgNy44cy0yLjUgNi45LTYuMSA3LjhsLTI3LjMgNi44LTYuOCAyNy4zYy0uOSAzLjYtNC4xIDYuMS03LjggNi4xcy02LjktMi41LTcuOC02LjFsLTYuOC0yNy4zLTI3LjMtNi44Yy0zLjYtLjktNi4xLTQuMS02LjEtNy44czIuNS02LjkgNi4xLTcuOGwyNy4zLTYuOCA2LjgtMjcuM2MuOS0zLjYgNC4xLTYuMSA3LjgtNi4xeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjEzMCIsICJNMTkyIDBDMTM5IDAgOTYgNDMgOTYgOTZsMCAxMjhjMCA1MyA0MyA5NiA5NiA5NnM5Ni00MyA5Ni05NmwwLTEyOGMwLTUzLTQzLTk2LTk2LTk2ek00OCAxODRjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxNzAuNyAwIDE4NGwwIDQwYzAgOTcuOSA3My4zIDE3OC43IDE2OCAxOTAuNWwwIDQ5LjUtNDggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ5LjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNWwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRTNDggMzAzLjUgNDggMjI0bDAtNDB6Il0KICAgIH07CiAgICBmYUNyb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3duIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDgxXSwgImY1MjEiLCAiTTMxMyA4Ny4yYzkuMi03LjMgMTUtMTguNiAxNS0zMS4yIDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgMTIuNiA1LjkgMjMuOSAxNSAzMS4yTDE5NC42IDE5NC44Yy0xMCAxNS43LTMxLjMgMTkuNi00Ni4yIDguNEw4OC45IDE1OC43YzQuNS02LjQgNy4xLTE0LjMgNy4xLTIyLjcgMC0yMi4xLTE3LjktNDAtNDAtNDBzLTQwIDE3LjktNDAgNDBjMCAyMS44IDE3LjUgMzkuNiAzOS4yIDQwTDg3LjggMzkzLjVjNC43IDMxLjMgMzEuNiA1NC41IDYzLjMgNTQuNWwyNzMuOCAwYzMxLjcgMCA1OC42LTIzLjIgNjMuMy01NC41TDUyMC44IDE3NmMyMS43LS40IDM5LjItMTguMiAzOS4yLTQwIDAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgOC40IDIuNiAxNi4zIDcuMSAyMi43bC01OS40IDQ0LjZjLTE0LjkgMTEuMi0zNi4yIDcuMy00Ni4yLTguNEwzMTMgODcuMnoiXQogICAgfTsKICAgIGZhVGVudEFycm93VHVybkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudC1hcnJvdy10dXJuLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4MCIsICJNLS41IDExM2w3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMxLTMxIDM1MC4xIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjRjMC00OC42LTM5LjQtODgtODgtODhsLTM1MC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlTODAuOS0yLjMgNzEuNSA3TC0uNSA3OWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjl6TTYwLjMgMjkyLjZMMzcuMSA0NzZjLTIuNCAxOS4xIDEyLjUgMzYgMzEuNyAzNmwxNTQuNSAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTE3LjRjMC01LjkgNC43LTEwLjYgMTAuNi0xMC42IDQgMCA3LjcgMi4zIDkuNSA1LjlsNjguMiAxMzYuNWM1LjQgMTAuOCAxNi41IDE3LjcgMjguNiAxNy43bDcxLjkgMGMxOS4zIDAgMzQuMi0xNi45IDMxLjctMzZMNDUyLjcgMjkyLjdjLTEuMi05LjctNi45LTE4LjQtMTUuMy0yMy40TDI3MS45IDE2OS45Yy0xMC4yLTYuMS0yMi45LTYuMS0zMy4xIC4xTDc1LjQgMjY5LjNjLTguMyA1LjEtMTMuOSAxMy43LTE1LjEgMjMuM3oiXQogICAgfTsKICAgIGZhVHJ1Y2tGYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZhc3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsic2hpcHBpbmctZmFzdCJdLCAiZjQ4YiIsICJNNjQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjg4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMiA1MC43IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMNjIxLjMgMTkyYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMNjQwIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMy4zIDBjLTEwLjQgMzYuOS00NC40IDY0LTg0LjcgNjRzLTc0LjItMjcuMS04NC43LTY0bC0xMDIuNiAwYy0xMC40IDM2LjktNDQuNCA2NC04NC43IDY0cy03NC4yLTI3LjEtODQuNy02NGwtMy4zIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNDgtNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgMTQ0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNFMxMC43IDk2IDI0IDk2bDQwIDB6TTU3NiAyODhsMC01MC43LTQ1LjMtNDUuMy01MC43IDAgMCA5NiA5NiAwek0yNTYgNDI0YTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTIzMiA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVNoaXBwaW5nRmFzdCA9IGZhVHJ1Y2tGYXN0OwogICAgZmFVc2VyUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXItZWRpdCJdLCAiZjRmZiIsICJNMjU2LjEgMjQ4YTEyMCAxMjAgMCAxIDAgMC0yNDAgMTIwIDEyMCAwIDEgMCAwIDI0MHptLTI5LjcgNTZjLTk4LjUgMC0xNzguMyA3OS44LTE3OC4zIDE3OC4zIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDE5Ni41IDAgMTAuOS01NC41YzQuMy0yMS43IDE1LTQxLjYgMzAuNi01Ny4ybDY3LjMtNjcuM2MtMjgtMTguMy02MS40LTI4LjktOTcuNC0yOC45bC01OS40IDB6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXQogICAgfTsKICAgIGZhVXNlckVkaXQgPSBmYVVzZXJQZW47CiAgICBmYVVzZXJDbG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWNsb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ZmQiLCAiTTIyNCA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMTk0LjMgMzA0bDU5LjQgMGMzLjkgMCA3LjkgLjEgMTEuOCAuNC0xNi4yIDI4LjItMjUuNSA2MC44LTI1LjUgOTUuNiAwIDQxLjggMTMuNCA4MC41IDM2IDExMkw0NS43IDUxMkMyOS4zIDUxMiAxNiA0OTguNyAxNiA0ODIuMyAxNiAzODMuOCA5NS44IDMwNCAxOTQuMyAzMDR6TTI4OCA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMTQ0LTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA2NGMwIDguOCA3LjIgMTYgMTYgMTZsNDggMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMCAwLTQ4YzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU2hvd2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3dlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODcwM10sICJmMmNjIiwgIk02NCAxMzEuOWMwLTE5LjggMTYuMS0zNS45IDM1LjktMzUuOSA5LjUgMCAxOC42IDMuOCAyNS40IDEwLjVsMTYuMiAxNi4yYy0yMSAzOC45LTE3LjQgODcuNSAxMC45IDEyM0wxNTEgMjQ3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBMMzQ1IDEyMWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC0xLjMgMS4zYy0zNS41LTI4LjMtODQuMS0zMS45LTEyMy0xMC45TDE3MC41IDYxLjNDMTUxLjggNDIuNSAxMjYuNCAzMiA5OS45IDMyIDQ0LjcgMzIgMCA3Ni43IDAgMTMxLjlMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMxNi4xek0yNTYgMzUyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptNjQgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMC0xMjhhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em02NCA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem0wLTEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTY0IDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6bTMyLTMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhU3F1YXJlQ2FyZXRVcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWNhcmV0LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS11cCJdLCAiZjE1MSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDE2MGM2LjcgMCAxMyAyLjggMTcuNiA3LjdsMTA0IDExMmM2LjUgNyA4LjIgMTcuMiA0LjQgMjUuOVMzMzcuNSAzMjAgMzI4IDMyMGwtMjA4IDBjLTkuNSAwLTE4LjItNS43LTIyLTE0LjRzLTIuMS0xOC45IDQuNC0yNS45bDEwNC0xMTJjNC41LTQuOSAxMC45LTcuNyAxNy42LTcuN3oiXQogICAgfTsKICAgIGZhQ2FyZXRTcXVhcmVVcDIgPSBmYVNxdWFyZUNhcmV0VXAyOwogICAgZmFNYXBMb2NhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXAtbG9jYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsibWFwLW1hcmtlZCJdLCAiZjU5ZiIsICJNNTc2IDQ4YzAtMTEuMS01LjctMjEuNC0xNS4yLTI3LjJzLTIxLjItNi40LTMxLjEtMS40TDQxMy41IDc3LjUgMjM0LjEgMTcuNmMtOC4xLTIuNy0xNi44LTIuMS0yNC40IDEuN2wtMTI4IDY0QzcwLjggODguOCA2NCA5OS45IDY0IDExMmwwIDM1MmMwIDExLjEgNS43IDIxLjQgMTUuMiAyNy4yczIxLjIgNi40IDMxLjEgMS40bDExNi4xLTU4LjEgMTczLjMgNTcuOGMtNC4zLTYuNC04LjUtMTMuMS0xMi42LTE5LjktMTEtMTguMy0yMS45LTM5LjMtMzAtNjEuOGwtMTAxLjItMzMuNyAwLTI4NC41IDEyOCA0Mi43IDAgOTkuM2MzMS0zNS44IDc3LTU4LjQgMTI4LTU4LjQgMjIuNiAwIDQ0LjIgNC40IDY0IDEyLjVMNTc2IDQ4ek0zOTIgMzQxLjljMCA2OC45IDY0LjEgMTUwLjQgOTguNiAxODkuMyAxMS42IDEzIDMxLjMgMTMgNDIuOSAwIDM0LjUtMzguOSA5OC42LTEyMC40IDk4LjYtMTg5LjMgMC02NS4xLTUzLjctMTE3LjktMTIwLTExNy45UzM5MiAyNzYuOCAzOTIgMzQxLjl6Il0KICAgIH07CiAgICBmYU1hcE1hcmtlZCA9IGZhTWFwTG9jYXRpb247CiAgICBmYVBlbkZhbmN5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1mYW5jeSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODM5NSwgMTAwMDJdLCAiZjVhYyIsICJNMzczLjUgMjcuMWMxNS0xNy4yIDM2LjctMjcuMSA1OS42LTI3LjEgNDMuNiAwIDc5IDM1LjQgNzkgNzkgMCAyMi44LTkuOSA0NC42LTI3LjEgNTkuNkwyODMuNyAzMTMuOCAyNzMgMzAzIDIwOSAyMzkgMTk4LjIgMjI4LjMgMzczLjUgMjcuMXpNMTYxLjEgMjU5QzE2MiAyNjAgMTg4IDI4NiAyMzkgMzM3bDEzLjkgMTMuOS0xNy4xIDc0LjJjLTMuOSAxNy4xLTE2LjkgMzAuNy0zMy44IDM1LjRsLTE2OS44IDQ3LjUgOTIuMy05Mi4zYzEuMiAuMSAyLjMgLjIgMy41IC4yIDE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJjMCAxLjIgLjEgMi40IC4yIDMuNUwzLjkgNDc5LjggNTEuNSAzMTBjNC43LTE2LjkgMTguMy0yOS45IDM1LjQtMzMuOEwxNjEuMSAyNTl6Il0KICAgIH07CiAgICBmYUV1cm9TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImV1cm8tc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzNjQsICJldXIiLCAiZXVybyJdLCAiZjE1MyIsICJNNzMuMyAxOTJDMTAwLjggOTkuNSAxODYuNSAzMiAyODggMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtNjUuNiAwLTEyMiAzOS41LTE0Ni43IDk2TDI3MiAxOTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0My4yIDBjLS41IDUuMy0uOCAxMC42LS44IDE2cy4zIDEwLjcgLjggMTZMMjcyIDI3MmMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTMwLjcgMGMyNC43IDU2LjUgODEuMSA5NiAxNDYuNyA5Nmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xMDEuNSAwLTE4Ny4yLTY3LjUtMjE0LjctMTYwTDQwIDMyMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNC42IDBjLS43LTEwLjUtLjctMjEuNSAwLTMyTDQwIDI0MGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwzMy4zIDB6Il0KICAgIH07CiAgICBmYUV1ciA9IGZhRXVyb1NpZ247CiAgICBmYUV1cm8gPSBmYUV1cm9TaWduOwogICAgZmFIb3VzZUNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTBiIiwgIk00OTYgNTQ0YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNMjY4LjYgNi41YzEyLjItOS4zIDI5LjctOC43IDQxLjIgMmwyMTcuNiAyMDJjLTEwLjItMS43LTIwLjctMi42LTMxLjMtMi42LTc4LjYgMC0xNDYuMiA0Ny4yLTE3NS45IDExNC44LTUtMS44LTEwLjUtMi44LTE2LjEtMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkwLjkgMGM2LjEgMTcuMyAxNC42IDMzLjQgMjUuMiA0OEwxNDQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDggMi40LTJ6TTU1NS4zIDM0MC43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2LjdjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZ6Il0KICAgIH07CiAgICBmYUxpcmFTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpcmEtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzgzNTZdLCAiZjE5NSIsICJNODQuOSAyNTZsLTI4LjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMS42IDBDNTMuMiAxMjQuNyAxMTYuOCA0MiAyMDcuNiA0Mmw4LjIgMGMzMy42IDAgNjYuMiAxMS4zIDkyLjUgMzIuMmwxNi4xIDEyLjdjMTMuOSAxMSAxNi4yIDMxLjEgNS4yIDQ1cy0zMS4xIDE2LjItNDUgNS4ybC0xNi4xLTEyLjdjLTE1LTExLjktMzMuNi0xOC40LTUyLjgtMTguNGwtOC4yIDBjLTUzLjggMC05MC4xIDUyLjktNzMuNSAxMDJsMTYyLjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ1LjEgMGMyLjMgMTAuNiAzLjYgMjEuMyAzLjkgMzJsMTQxLjIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwxNTAgMzM2Yy00LjggMTguNi0xMi42IDM2LjUtMjMuNiA1Mi45bC0xOC4xIDI3LjEgMjEyLjIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjcyIDBjLTExLjggMC0yMi42LTYuNS0yOC4yLTE2LjlzLTUtMjMgMS42LTMyLjlsNTEuMi03Ni44YzMuNy01LjYgNi45LTExLjQgOS40LTE3LjRsLTI2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMzQuOCAwYy0uNS0xMC44LTIuNi0yMS42LTYuNC0zMnoiXQogICAgfTsKICAgIGZhWWVuU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ5ZW4tc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzE2NSwgImNueSIsICJqcHkiLCAicm1iIiwgInllbiJdLCAiZjE1NyIsICJNNzQuOSA0Ni43Yy05LjYtMTQuOS0yOS40LTE5LjItNDQuMi05LjZTMTEuNSA2Ni40IDIxLjEgODEuM0wxNDMuNyAyNzIgODggMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCAzMi03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDAgMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDggNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTMyIDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU1LjcgMCAxMjIuNi0xOTAuN2M5LjYtMTQuOSA1LjMtMzQuNy05LjYtNDQuMnMtMzQuNy01LjMtNDQuMiA5LjZMMTkyIDIyOC44IDc0LjkgNDYuN3oiXQogICAgfTsKICAgIGZhQ255ID0gZmFZZW5TaWduOwogICAgZmFKcHkgPSBmYVllblNpZ247CiAgICBmYVJtYiA9IGZhWWVuU2lnbjsKICAgIGZhWWVuID0gZmFZZW5TaWduOwogICAgZmFCb3hPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC1vcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY0OWUiLCAiTTU2MC4zIDIzNy4yYzEwLjQgMTEuOCAyOC4zIDE0LjQgNDEuOCA1LjUgMTQuNy05LjggMTguNy0yOS43IDguOS00NC40bC00OC03MmMtMi44LTQuMi02LjYtNy43LTExLjEtMTAuMkwzNTEuNCA0LjdjLTE5LjMtMTAuNy00Mi44LTEwLjctNjIuMiAwTDg4LjggMTE2Yy01LjQgMy05LjcgNy40LTEyLjYgMTIuOEwyNy43IDIxOC43Yy0xMi42IDIzLjQtMy44IDUyLjUgMTkuNiA2NS4xbDMzIDE3LjcgMCA1My4zYzAgMjMgMTIuNCA0NC4zIDMyLjQgNTUuN2wxNzYgOTkuN2MxOS42IDExLjEgNDMuNSAxMS4xIDYzLjEgMGwxNzYtOTkuN2MyMC4xLTExLjQgMzIuNC0zMi42IDMyLjQtNTUuN2wwLTExNy41em0tMjQwLTkuOEwxNzAuMiAxNDQgMzIwLjMgNjAuNiA0NzAuNCAxNDQgMzIwLjMgMjI3LjR6bS00MS41IDUwLjJsLTIxLjMgNDYuMi0xNjUuOC04OC44IDI1LjQtNDcuMiAxNjEuNyA4OS44eiJdCiAgICB9OwogICAgZmFUcnVja0ZpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLWZpZWxkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGQiLCAiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDIyNCAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMmw0MC40IDBjMzIuNCAwIDYxLjYgMTkuNiA3NCA0OS41bDQzLjggMTA2LjMgMS43IDQuMiAyNC43IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtLjQgMGMuMiAyLjYgLjQgNS4zIC40IDggMCA0OC42LTM5LjQgODgtODggODhzLTg4LTM5LjQtODgtODhjMC0yLjcgLjEtNS40IC40LThsLTE0NC43IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMy42IC4yLTcuMSAuNi0xMC41LTE5LTYuNC0zMi42LTI0LjQtMzIuNi00NS41bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMC0zMnptMzUyIDMybDAgOTYgODIuMSAwLTM1LjQtODYuMWMtMi41LTYtOC4zLTkuOS0xNC44LTkuOUwzODQgMTI4ek0xOTIgMzkyYTQwIDQwIDAgMSAwIC04MCAwIDQwIDQwIDAgMSAwIDgwIDB6bTI4MCA0MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYUxvY2F0aW9uUGluTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1waW4tbG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTFmIiwgIk0wIDE4OC42QzAgODQuNCA4NiAwIDE5MiAwIDI5NC4xIDAgMzc3LjYgNzguMyAzODMuNiAxNzcgMzIwLjcgMTg1LjEgMjcyIDIzOC44IDI3MiAzMDRsMCAyNC40Yy0xOS42IDE3LjYtMzIgNDMuMS0zMiA3MS41bDAgNzUuN2MtOS45IDExLjYtMTguOSAyMS43LTI2LjQgMjkuOC0xMS44IDEyLjgtMzEuNSAxMi44LTQzLjMgMC01MC4yLTU0LjUtMTcwLjQtMTk3LjUtMTcwLjQtMzE2Ljh6TTE5MiAyNTZhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6bTI0MCA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMjg4IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhUGVyc29uUHJheWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tcHJheWluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODcyMCwgInByYXkiXSwgImY2ODMiLCAiTTMyMCA2NGE2NCA2NCAwIDEgMCAtMTI4IDAgNjQgNjQgMCAxIDAgMTI4IDB6TTIwMC43IDI2NGwyMi45IDMxLjVjNi41IDguOSAxNi4zIDE0LjcgMjcuMiAxNi4xczIxLjktMS43IDMwLjQtOC43bDg4LTcyYzE3LjEtMTQgMTkuNi0zOS4yIDUuNi01Ni4zcy0zOS4yLTE5LjYtNTYuMy01LjZsLTU1LjIgNDUuMi0yNi4yLTM2Yy0xNS42LTIxLjUtNDAuNi0zNC4yLTY3LjItMzQuMi0zMC45IDAtNTkuMiAxNy4xLTczLjYgNDQuNEw0Ny44IDI4MC45Yy0yMC4yIDM4LjUtOS40IDg1LjkgMjUuNiAxMTEuOEwxMjYuNiA0MzIgNDAgNDMyYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDIwOCAwYzE3LjMgMCAzMi42LTExLjEgMzgtMjcuNXMtLjMtMzQuNC0xNC4yLTQ0LjdsLTExNi4xLTg1LjggNDUtOTB6Il0KICAgIH07CiAgICBmYVByYXkgPSBmYVBlcnNvblByYXlpbmc7CiAgICBmYUNsaXBib2FyZExpc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkLWxpc3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ2ZCIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTEyOCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMzIgMGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0em0wIDEyOGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTEyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek05NiA0MTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFTYWNrRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhY2stZG9sbGFyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTc2XSwgImY4MWQiLCAiTTMyOCAxMTJsLTE0NCAwLTM3LjMtNzQuNWMtMS44LTMuNi0yLjctNy42LTIuNy0xMS42IDAtMTQuMyAxMS42LTI1LjkgMjUuOS0yNS45TDM0Mi4xIDBjMTQuMyAwIDI1LjkgMTEuNiAyNS45IDI1LjkgMCA0LS45IDgtMi43IDExLjZMMzI4IDExMnpNMTY5LjYgMTYwbDE3Mi44IDAgNDguNyA0MC42QzQ1Ny42IDI1NiA0OTYgMzM4IDQ5NiA0MjQuNSA0OTYgNDcyLjggNDU2LjggNTEyIDQwOC41IDUxMmwtMzA1LjEgMEM1NS4yIDUxMiAxNiA0NzIuOCAxNiA0MjQuNSAxNiAzMzggNTQuNCAyNTYgMTIwLjkgMjAwLjZMMTY5LjYgMTYwek0yNjAgMjI0Yy0xMSAwLTIwIDktMjAgMjBsMCA0Yy0yOC44IC4zLTUyIDIzLjctNTIgNTIuNSAwIDI1LjcgMTguNSA0Ny42IDQzLjkgNTEuOGw0MS43IDdjNiAxIDEwLjQgNi4yIDEwLjQgMTIuMyAwIDYuOS01LjYgMTIuNS0xMi41IDEyLjVMMjE2IDM4NGMtMTEgMC0yMCA5LTIwIDIwczkgMjAgMjAgMjBsMjQgMCAwIDRjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00LjdjMjUtNC4xIDQ0LTI1LjcgNDQtNTEuOCAwLTI1LjctMTguNS00Ny42LTQzLjktNTEuOGwtNDEuNy03Yy02LTEtMTAuNC02LjItMTAuNC0xMi4zIDAtNi45IDUuNi0xMi41IDEyLjUtMTIuNWw0Ny41IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC04IDAgMC00YzAtMTEtOS0yMC0yMC0yMHoiXQogICAgfTsKICAgIGZhTW91bnRhaW5TdW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4tc3VuIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MmYiLCAiTTI1Ni41IDBjMTQuNyAwIDI4LjIgOC4xIDM1LjIgMjFsMjE2IDQwMGM2LjcgMTIuNCA2LjQgMjcuNC0uOCAzOS41LTcuMiAxMi4xLTIwLjMgMTkuNS0zNC4zIDE5LjVsLTQzMiAwYy0xNC4xIDAtMjcuMS03LjQtMzQuMy0xOS41cy03LjUtMjcuMS0uOC0zOS41bDIxNi00MDAgMi45LTQuNkMyMzEuNyA2LjIgMjQzLjYgMCAyNTYuNSAwek0xNzAuNCAyNDkuOWwyNi44IDI2LjhjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNDMuMy00My4zYzYtNiAxNC4xLTkuNCAyMi42LTkuNGw0Mi44IDAtNzIuMS0xMzMuNS04Ni4xIDE1OS40ek00OTYuNSAxNjBhODAgODAgMCAxIDEgMC0xNjAgODAgODAgMCAxIDEgMCAxNjB6Il0KICAgIH07CiAgICBmYUFycm93VXBXaWRlU2hvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtd2lkZS1zaG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC11cCJdLCAiZjE2MSIsICJNMTUwLjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDk2IDE0MS4zIDk2IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzA2LjcgNDEuNCA0MS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2ek0zMjAgNDgwbDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJ6bTAtMTI4bDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMnptMC0xMjhsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50VXAgPSBmYUFycm93VXBXaWRlU2hvcnQ7CiAgICBmYVVzZXJzTGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTIiLCAiTTIyNCAxMjhhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwek0xNzYgMzM2YzAtNjEuOSA1MC4xLTExMiAxMTItMTEyczExMiA1MC4xIDExMiAxMTJsMCA4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC04ek0zOTIgMTQ0YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMjcuMiAxMDAuNGM5LjEtMi45IDE4LjgtNC40IDI4LjgtNC40IDUzIDAgOTYgNDMgOTYgOTZsMCAxMC43YzAgMTEuOC05LjYgMjEuMy0yMS4zIDIxLjNsLTc4LjggMGMyLjctNy41IDQuMS0xNS42IDQuMS0yNGwwLThjMC0zNC4xLTEwLjYtNjUuNy0yOC44LTkxLjZ6bS0yNjIuNCAwYy0xOC4yIDI2LTI4LjggNTcuNS0yOC44IDkxLjZsMCA4YzAgOC40IDEuNCAxNi41IDQuMSAyNGwtNzguOCAwQzQxLjYgMzY4IDMyIDM1OC40IDMyIDM0Ni43TDMyIDMzNmMwLTUzIDQzLTk2IDk2LTk2IDEwIDAgMTkuNyAxLjUgMjguOCA0LjR6TTcyIDE0NGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTAgNDQwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDQ2NGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6Il0KICAgIH07CiAgICBmYVN0YXJPZkRhdmlkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItb2YtZGF2aWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDAxN10sICJmNjlhIiwgIk00MTUuOSAzMTEuOWwtMjcuOCA0OC4xIDU1LjcgMC0yNy44LTQ4LjF6TTM4My42IDI1NmwtNjAuMi0xMDQtMTM0LjggMC02MC4yIDEwNCA2MC4yIDEwNCAxMzQuOCAwIDYwLjItMTA0em02NC43IDBsNTguNCAxMDAuOWMzLjUgNiA1LjMgMTIuOCA1LjMgMTkuNyAwIDIxLjctMTcuNiAzOS40LTM5LjQgMzkuNGwtMTE3IDAtNjEuMyAxMDUuOEMyODYuNSA1MzUuNiAyNzEuOCA1NDQgMjU2IDU0NHMtMzAuNS04LjQtMzguNC0yMi4ybC02MS4zLTEwNS44LTExNyAwYy0yMS43IDAtMzkuNC0xNy42LTM5LjQtMzkuNCAwLTYuOSAxLjgtMTMuNyA1LjMtMTkuN0w2My43IDI1NiA1LjMgMTU1LjFDMS44IDE0OS4xIDAgMTQyLjMgMCAxMzUuNCAwIDExMy42IDE3LjYgOTYgMzkuNCA5NmwxMTcgMCA2MS4zLTEwNS44QzIyNS41LTIzLjYgMjQwLjItMzIgMjU2LTMyczMwLjUgOC40IDM4LjQgMjIuMmw2MS4zIDEwNS44IDExNyAwYzIxLjcgMCAzOS40IDE3LjYgMzkuNCAzOS40IDAgNi45LTEuOCAxMy43LTUuMyAxOS43TDQ0OC4zIDI1NnpNMzg4LjEgMTUybDI3LjggNDguMSAyNy44LTQ4LjEtNTUuNyAwek0yOTEgOTZsLTM1LTYwLjQtMzUgNjAuNCA3MCAwek0xMjMuOSAxNTJsLTU1LjcgMCAyNy44IDQ4LjEgMjcuOC00OC4xek05Ni4xIDMxMS45bC0yNy44IDQ4LjEgNTUuNyAwLTI3LjgtNDguMXpNMjIxIDQxNmwzNSA2MC40IDM1LTYwLjQtNzAgMHoiXQogICAgfTsKICAgIGZhTm90ZXNNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdGVzLW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjQ4MSIsICJNOTYgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MS41IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjMgMjkwLjdjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1MTIgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDBDMTI0LjcgMCA5NiAyOC43IDk2IDY0bDAgMjg4ek0yODggMTEybDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDggNDggMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTQ4IDAgMCA0OGMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQ4LTQ4IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0OCAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2ek00OCAxMjBjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMDYuNyAwIDEyMEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0NjRjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyOHoiXQogICAgfTsKICAgIGZhQXVzdHJhbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXVzdHJhbC1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwYTkiLCAiTTI2Ni41IDI0MGwtODUgMCA0Mi41LTEwNi40IDQyLjUgMTA2LjR6bTY4LjkgMEwyNjIuOSA1OC4zQzI1Ni41IDQyLjQgMjQxLjEgMzIgMjI0IDMycy0zMi41IDEwLjQtMzguOSAyNi4zTDExMi42IDI0MCAzMiAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjEuNCAwLTE5LjIgNDgtNDIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDIzLjEgMC0yMC44IDUyLjFjLTYuNiAxNi40IDEuNCAzNSAxNy45IDQxLjZzMzUtMS40IDQxLjYtMTcuOWwzMC4zLTc1LjkgMjAwIDAgMzAuMyA3NS45YzYuNiAxNi40IDI1LjIgMjQuNCA0MS42IDE3LjlzMjQuNC0yNS4yIDE3LjktNDEuNkwzOTIuOSAzODQgNDE2IDM4NGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDIuMyAwLTE5LjItNDggNjEuNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MC42IDB6bS00OS43IDQ4bDE5LjIgNDgtMTYxLjYgMCAxOS4yLTQ4IDEyMy4zIDB6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZFVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xpcGJvYXJkLXVzZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjdmMyIsICJNMzExLjQgMzJsOC42IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzNTJjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDguNiAwQzgzLjYgMTIuOSAxMDQuMyAwIDEyOCAwTDI1NiAwYzIzLjcgMCA0NC40IDEyLjkgNTUuNCAzMnpNMjQ4IDExMmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwxMzYgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDB6TTE5MiAzNDRhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTk4LjMgNDEzYy0xMi45IDE1LjYgMi4yIDM1IDIyLjQgMzVsMTQyLjUgMGMyMC4yIDAgMzUuMy0xOS40IDIyLjQtMzUtMTQuNy0xNy43LTM2LjktMjktNjEuNy0yOWwtNjQgMGMtMjQuOCAwLTQ3IDExLjMtNjEuNyAyOXoiXQogICAgfTsKICAgIGZhRmlsZUltYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWltYWdlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDQzXSwgImYxYzUiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMjggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTkyLjYgNDQ4bDE5OC44IDBjMTUuOCAwIDI4LjYtMTIuOCAyOC42LTI4LjYgMC03LjMtMi44LTE0LjQtNy45LTE5LjdMMjE1LjMgMjk3LjljLTYtNi4zLTE0LjQtOS45LTIzLjItOS45bC0uMyAwYy04LjggMC0xNy4xIDMuNi0yMy4yIDkuOUw3MS45IDM5OS43QzY2LjggNDA1IDY0IDQxMi4xIDY0IDQxOS40IDY0IDQzNS4yIDc2LjggNDQ4IDkyLjYgNDQ4eiJdCiAgICB9OwogICAgZmFTcXVhcmVDYXJldFJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtY2FyZXQtcmlnaHQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiY2FyZXQtc3F1YXJlLXJpZ2h0Il0sICJmMTUyIiwgIk00NDggOTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMHpNMzIwIDI1NmMwIDYuNy0yLjggMTMtNy43IDE3LjZsLTExMiAxMDRjLTcgNi41LTE3LjIgOC4yLTI1LjkgNC40UzE2MCAzNjkuNSAxNjAgMzYwbDAtMjA4YzAtOS41IDUuNy0xOC4yIDE0LjQtMjJzMTguOS0yLjEgMjUuOSA0LjRsMTEyIDEwNGM0LjkgNC41IDcuNyAxMC45IDcuNyAxNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZVJpZ2h0MiA9IGZhU3F1YXJlQ2FyZXRSaWdodDI7CiAgICBmYVZpYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxNF0sICJmNDkyIiwgIk0zNDIuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDMwNi43IDY0IDI4LjEgMzQyLjZDMTAuMSAzNjAuNiAwIDM4NSAwIDQxMC41TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZsNS41IDBjMjUuNSAwIDQ5LjktMTAuMSA2Ny45LTI4LjFsMjc4LjYtMjc4LjYgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwek0yMDUuMyAyNTZsMTQ2LjctMTQ2LjcgNTAuNyA1MC43LTk2IDk2LTEwMS41IDB6Il0KICAgIH07CiAgICBmYUhlbGljb3B0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsaWNvcHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY0MV0sICJmNTMzIiwgIk0xNzYgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTUyIDAgMCA0OC0yMjAuOCAwLTMyLjgtMzkuNEM2OS45IDgzLjIgNjMuMSA4MCA1NiA4MEwyNCA4MEMxNS43IDgwIDggODQuMyAzLjYgOTEuNHMtNC44IDE1LjktMS4xIDIzLjRsNDggOTZDNTQuNiAyMTguOSA2Mi45IDIyNCA3MiAyMjRsMTA3LjggMCAxMDQgMTQzLjFjMTUuMSAyMC43IDM5LjEgMzIuOSA2NC43IDMyLjlsNzUuNSAwYzc1LjEgMCAxMzYtNjAuOSAxMzYtMTM2UzQ5OS4xIDEyOCA0MjQgMTI4bC00OCAwIDAtNDggMTUyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMTc2IDMyek0zNzYgMTkybDQ4IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJzLTMyLjIgNzItNzIgNzJsLTQ4IDAgMC0xNDR6TTU1MiA0MTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgNC40LTMuNiA4LTggOGwtMjcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTYgMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYU1pdHRlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaXR0ZW4iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjdiNSIsICJNMzUyIDM4NEw2NCAzODQgNS40IDE3OC45QzEuOCAxNjYuNCAwIDE1My40IDAgMTQwLjMgMCA2Mi44IDYyLjggMCAxNDAuMyAwbDMuNCAwYzY2IDAgMTIzLjUgNDQuOSAxMzkuNSAxMDguOWwzMS40IDEyNS44IDE3LjYtMjAuMUMzNDQuOCAyMDAuMiAzNjIuOSAxOTIgMzgyIDE5MmwyLjggMGMzNC45IDAgNjMuMyAyOC4zIDYzLjMgNjMuMyAwIDE1LjktNiAzMS4yLTE2LjggNDIuOUwzNTIgMzg0ek0zMiA0NjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMkw2NCA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6Il0KICAgIH07CiAgICBmYUdhc1B1bXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2FzLXB1bXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5OTgxXSwgImY1MmYiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMjU2IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxOTIgOCAwYzQ4LjYgMCA4OCAzOS40IDg4IDg4bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE1NGMtMjcuNi03LjEtNDgtMzIuMi00OC02MmwwLTU5LjUtMjUuOC0yOC4zYy04LjktOS44LTguMi0yNSAxLjYtMzMuOXMyNS04LjIgMzMuOSAxLjZsNzEuNyA3OC44YzkuNCAxMC4zIDE0LjYgMjMuNyAxNC42IDM3LjdMNTEyIDM3NmMwIDM5LjgtMzIuMiA3Mi03MiA3MnMtNzItMzIuMi03Mi03MmwwLTMyYzAtMjIuMS0xNy45LTQwLTQwLTQwbC04IDAgMCAxNjEuNGM5LjMgMy4zIDE2IDEyLjIgMTYgMjIuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNEw0MCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0IDAtMTAuNSA2LjctMTkuMyAxNi0yMi42TDMyIDY0ek05NiA4MGwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZMMTEyIDY0Yy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUVudmVsb3BlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZW52ZWxvcGUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZTgiLCAiTTY0IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OGw0MTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgxLjRjLTI0LjQtMTEuMi01MS40LTE3LjQtODAtMTcuNC04Ny43IDAtMTYxLjcgNTguOC0xODQuNyAxMzkuMi03LjEtMS4zLTE0LjEtNC4yLTIwLjEtOC44bC0yMDgtMTU2QzcxLjEgMTQxLjMgNjQgMTI3LjEgNjQgMTEyek0zMDQgMzY4YzAgMjguNiA2LjIgNTUuNiAxNy40IDgwTDEyOCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTg4IDE5OC40IDE0OC44YzEyLjYgOS40IDI2LjkgMTUuNCA0MS43IDE3LjkgMCAxLjgtLjEgMy41LS4xIDUuM3ptNDggMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhUGVyc29uU2thdGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2thdGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJza2F0aW5nIl0sICJmN2M1IiwgIk0zNjggNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMjggMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE1MC4xIDBjNDkuOSAwIDc0LjkgNjAuMyAzOS42IDk1LjZsLTYzLjkgNjMuOSA2OS44IDMxYzE3LjMgNy43IDI4LjUgMjQuOSAyOC41IDQzLjlsMCA4NS42YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNzUuMi04Mi40LTM2LjZjLTQxLTE4LjItNTEtNzItMTkuMy0xMDMuN2w0MC40LTQwLjQtOTguNyAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNODkuNCAzNjEuNGw3NS45LTc1LjljNy43IDE5LjcgMjEuNiAzNy4zIDQxIDQ5LjZsLTcxLjYgNzEuNmMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6bTM0Ni41IDg3LjFjOC42IDIuMSAxMy44IDEwLjggMTEuNiAxOS40bC0uNCAxLjdjLTYuMiAyNC45LTI4LjYgNDIuNC01NC4zIDQyLjRMMzA0IDUxMmMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw4OC44IDBjMTEgMCAyMC42LTcuNSAyMy4zLTE4LjJsLjQtMS43YzIuMS04LjYgMTAuOC0xMy44IDE5LjQtMTEuNnpNMTQzLjIgNDg2LjNsLTYuMiAzLjFjLTIxLjYgMTAuOC00Ny42IDYuNi02NC42LTEwLjVMMTIuNyA0MTkuM2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDU5LjYgNTkuNmM3LjMgNy4zIDE4LjUgOS4xIDI3LjcgNC41bDYuMi0zLjFjNy45LTQgMTcuNS0uNyAyMS41IDcuMnMuNyAxNy41LTcuMiAyMS41eiJdCiAgICB9OwogICAgZmFTa2F0aW5nID0gZmFQZXJzb25Ta2F0aW5nOwogICAgZmFTdW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1biIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzk3MjhdLCAiZjE4NSIsICJNMTc4LjItMTAuMWM3LjQtMy4xIDE1LjgtMi4yIDIyLjUgMi4ybDg3LjggNTguMiA4Ny44LTU4LjJjNi43LTQuNCAxNS4xLTUuMiAyMi41LTIuMlM0MTEuNC0uNSA0MTMgNy4zbDIwLjkgMTAzLjIgMTAzLjIgMjAuOWM3LjggMS42IDE0LjQgNyAxNy40IDE0LjNzMi4yIDE1LjgtMi4yIDIyLjVsLTU4LjIgODcuOCA1OC4yIDg3LjhjNC40IDYuNyA1LjIgMTUuMSAyLjIgMjIuNXMtOS42IDEyLjgtMTcuNCAxNC4zTDQzMy44IDQwMS40IDQxMyA1MDQuN2MtMS42IDcuOC03IDE0LjQtMTQuMyAxNy40cy0xNS44IDIuMi0yMi41LTIuMmwtODcuOC01OC4yLTg3LjggNTguMmMtNi43IDQuNC0xNS4xIDUuMi0yMi41IDIuMnMtMTIuOC05LjYtMTQuMy0xNy40TDE0MyA0MDEuNCAzOS43IDM4MC41Yy03LjgtMS42LTE0LjQtNy0xNy40LTE0LjNzLTIuMi0xNS44IDIuMi0yMi41TDgyLjcgMjU2IDI0LjUgMTY4LjJjLTQuNC02LjctNS4yLTE1LjEtMi4yLTIyLjVzOS42LTEyLjggMTcuNC0xNC4zTDE0MyAxMTAuNiAxNjMuOSA3LjNjMS42LTcuOCA3LTE0LjQgMTQuMy0xNy40ek0yMDcuNiAyNTZhODAuNCA4MC40IDAgMSAxIDE2MC44IDAgODAuNCA4MC40IDAgMSAxIC0xNjAuOCAwem0yMDguOCAwYTEyOC40IDEyOC40IDAgMSAwIC0yNTYuOCAwIDEyOC40IDEyOC40IDAgMSAwIDI1Ni44IDB6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5MzU4LCA5OTE4LCAiYmFzZWJhbGwtYmFsbCJdLCAiZjQzMyIsICJNMjMyLjQgMS4xYy0xMjIuMiAxMS40LTIxOS41IDEwOC43LTIzMC45IDIzMC45IDE2LjItLjEgMzItMS44IDQ3LjItNSAxMy0yLjcgMjUuNyA1LjUgMjguNCAxOC41cy01LjUgMjUuNy0xOC41IDI4LjRjLTE4LjQgMy45LTM3LjYgNi01Ny4xIDYuMSAxMS40IDEyMi4yIDEwOC43IDIxOS41IDIzMC45IDIzMC45IC4xLTE5LjUgMi4yLTM4LjcgNi4xLTU3LjEgMi43LTEzIDE1LjUtMjEuMyAyOC40LTE4LjVzMjEuMyAxNS41IDE4LjUgMjguNGMtMy4yIDE1LjItNC45IDMxLTUgNDcuMiAxMjIuMi0xMS40IDIxOS41LTEwOC43IDIzMC45LTIzMC45LTE2LjIgLjEtMzIgMS44LTQ3LjIgNS0xMyAyLjctMjUuNy01LjUtMjguNC0xOC41czUuNS0yNS43IDE4LjUtMjguNGMxOC40LTMuOSAzNy42LTYgNTcuMS02LjEtMTEuNC0xMjIuMi0xMDguNy0yMTkuNS0yMzAuOS0yMzAuOS0uMSAxOS41LTIuMiAzOC43LTYuMSA1Ny4xLTIuNyAxMy0xNS41IDIxLjMtMjguNCAxOC41cy0yMS4zLTE1LjUtMTguNS0yOC40YzMuMi0xNS4yIDQuOS0zMSA1LTQ3LjJ6bTIuOCAxNTEuNGMtMjEuNCAzMi45LTQ5LjUgNjAuOS04Mi4zIDgyLjMtMTEuMSA3LjItMjYgNC4xLTMzLjItN3MtNC4xLTI2IDctMzMuMmMyNy4yLTE3LjcgNTAuNS00MSA2OC4zLTY4LjMgNy4yLTExLjEgMjIuMS0xNC4zIDMzLjItN3MxNC4zIDIyLjEgNyAzMy4yek0zOTMuMSAyODQuMmM3LjIgMTEuMSA0LjEgMjYtNyAzMy4yLTI3LjIgMTcuNy01MC41IDQxLTY4LjMgNjguMy03LjIgMTEuMS0yMi4xIDE0LjMtMzMuMiA3cy0xNC4zLTIyLjEtNy0zMy4yYzIxLjQtMzIuOSA0OS41LTYwLjkgODIuMy04Mi4zIDExLjEtNy4yIDI2LTQuMSAzMy4yIDd6Il0KICAgIH07CiAgICBmYUJhc2ViYWxsQmFsbCA9IGZhQmFzZWJhbGw7CiAgICBmYUltYWdlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDNlIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem02NCA4MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6TTI3MiAyMjRjOC40IDAgMTYuMSA0LjQgMjAuNSAxMS41bDg4IDE0NGM0LjUgNy40IDQuNyAxNi43IC41IDI0LjNTMzY4LjcgNDE2IDM2MCA0MTZMODggNDE2Yy04LjkgMC0xNy4yLTUtMjEuMy0xMi45cy0zLjUtMTcuNSAxLjYtMjQuOGw1Ni04MGM0LjUtNi40IDExLjgtMTAuMiAxOS43LTEwLjJzMTUuMiAzLjggMTkuNyAxMC4ybDI2LjQgMzcuOCA2MS40LTEwMC41YzQuNC03LjEgMTIuMS0xMS41IDIwLjUtMTEuNXoiXQogICAgfTsKICAgIGZhTm90ZGVmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm5vdGRlZiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWZlIiwgIk02NCAzOTAuM0wxNTMuNSAyNTYgNjQgMTIxLjcgNjQgMzkwLjN6TTEwMi41IDQ0OEwyODEuNSA0NDggMTkyIDMxMy43IDEwMi41IDQ0OHptMTI4LTE5MkwzMjAgMzkwLjMgMzIwIDEyMS43IDIzMC41IDI1NnpNMjgxLjUgNjRMMTAyLjUgNjQgMTkyIDE5OC4zIDI4MS41IDY0ek0wIDQ4QzAgMjEuNSAyMS41IDAgNDggMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgNDh6Il0KICAgIH07CiAgICBmYUJhc2tldGJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFza2V0YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkzNiwgImJhc2tldGJhbGwtYmFsbCJdLCAiZjQzNCIsICJNOTIuNyA1OC44bDc4LjQgNzguNGMxOC4yLTI1IDI4LjktNTUuOSAyOC45LTg5LjIgMC0xNC4xLTEuOS0yNy43LTUuNS00MC42LTM4IDkuNC03Mi42IDI3LjItMTAxLjggNTEuNHpNNTguOCA5Mi43Yy0yNC4yIDI5LjItNDIgNjMuOC01MS40IDEwMS44IDEyLjkgMy42IDI2LjUgNS41IDQwLjYgNS41IDMzLjMgMCA2NC4xLTEwLjcgODkuMi0yOC45TDU4LjggOTIuN3pNMjU2IDBjLTQuNiAwLTkuMiAuMS0xMy43IC40IDMuNyAxNS4zIDUuNyAzMS4yIDUuNyA0Ny42IDAgNDYuNi0xNS45IDg5LjQtNDIuNiAxMjMuNEwyNTYgMjIyLjEgNDE5LjMgNTguOEMzNzQuOSAyMi4xIDMxOC4xIDAgMjU2IDB6TTQ4IDI0OGMtMTYuNCAwLTMyLjQtMi00Ny42LTUuNy0uMiA0LjUtLjQgOS4xLS40IDEzLjcgMCA2Mi4xIDIyLjEgMTE4LjkgNTguOCAxNjMuM0wyMjIuMSAyNTYgMTcxLjQgMjA1LjRDMTM3LjQgMjMyLjEgOTQuNiAyNDggNDggMjQ4em00NjMuNiAyMS43Yy4yLTQuNSAuNC05LjEgLjQtMTMuNyAwLTYyLjEtMjIuMS0xMTguOS01OC44LTE2My4zTDI4OS45IDI1NiAzNDAuNiAzMDYuNmMzNC0yNi43IDc2LjktNDIuNiAxMjMuNC00Mi42IDE2LjQgMCAzMi40IDIgNDcuNiA1Ljd6bS03LjEgNDcuOGMtMTIuOS0zLjYtMjYuNS01LjUtNDAuNi01LjUtMzMuMyAwLTY0LjEgMTAuNy04OS4yIDI4LjlsNzguNCA3OC40YzI0LjItMjkuMiA0Mi02My44IDUxLjQtMTAxLjh6TTM0MC45IDM3NC44Yy0xOC4yIDI1LTI4LjkgNTUuOS0yOC45IDg5LjIgMCAxNC4xIDEuOSAyNy43IDUuNSA0MC42IDM4LTkuNCA3Mi42LTI3LjIgMTAxLjgtNTEuNGwtNzguNC03OC40em0tMzQuMy0zNC4zTDI1NiAyODkuOSA5Mi43IDQ1My4yYzQ0LjMgMzYuNyAxMDEuMiA1OC44IDE2My4zIDU4LjggNC42IDAgOS4yLS4xIDEzLjctLjQtMy43LTE1LjMtNS43LTMxLjItNS43LTQ3LjYgMC00Ni42IDE1LjktODkuNCA0Mi42LTEyMy40eiJdCiAgICB9OwogICAgZmFCYXNrZXRiYWxsQmFsbCA9IGZhQmFza2V0YmFsbDsKICAgIGZhUGVuY2lsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5OTksIDYxNTA0LCAicGVuY2lsLWFsdCJdLCAiZjMwMyIsICJNMzYuNCAzNTMuMmM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43bDE4MS4yLTE4MS4yIDMzLjktMzMuOWMxNi42IDE2LjYgNTEuMyA1MS4zIDEwNCAxMDRsMzMuOSAzMy45LTMzLjkgMzMuOS0xODEuMiAxODEuMmMtMTAuNyAxMC43LTI0LjEgMTguNS0zOC43IDIyLjZMMzAuNCA1MTAuNmMtOC4zIDIuMy0xNy4zIDAtMjMuNC02LjJTLTEuNCA0ODkuMyAuOSA0ODFMMzYuNCAzNTMuMnptNTUuNi0zLjdjLTQuNCA0LjctNy42IDEwLjQtOS4zIDE2LjZsLTI0LjEgODYuOSA4Ni45LTI0LjFjNi40LTEuOCAxMi4yLTUuMSAxNy05LjdMOTEuOSAzNDkuNXptMzU0LTE0Ni4xYy0xNi42LTE2LjYtNTEuMy01MS4zLTEwNC0xMDRMMzA4IDY1LjVDMzM0LjUgMzkgMzQ5LjQgMjQuMSAzNTIuOSAyMC42IDM2Ni40IDcgMzg0LjgtLjYgNDA0LS42UzQ0MS42IDcgNDU1LjEgMjAuNmwzNS43IDM1LjdDNTA0LjQgNjkuOSA1MTIgODguMyA1MTIgMTA3LjRzLTcuNiAzNy42LTIxLjIgNTEuMWMtMy41IDMuNS0xOC40IDE4LjQtNDQuOSA0NC45eiJdCiAgICB9OwogICAgZmFQZW5jaWxBbHQgPSBmYVBlbmNpbDsKICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXdhbGtpbmctYXJyb3ctbG9vcC1sZWZ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTEiLCAiTTE2MCA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNNzMuNCAyMjcuOWwyMi42LTIyLjYgMCA2OS4zYzAgMjggMTIuMiA1NC43IDMzLjUgNzIuOWw3MS40IDYxLjJjNS45IDUuMSA5LjggMTIuMSAxMC45IDE5LjhsMTIuNiA4OC4xYzIuNSAxNy41IDE4LjcgMjkuNyAzNi4yIDI3LjJzMjkuNy0xOC43IDI3LjItMzYuMmwtMTIuNi04OC4xYy0zLjMtMjMuMS0xNC45LTQ0LjEtMzIuNi01OS4zbC0zNC41LTI5LjYgMC0xMTUuMiAzLjggNC43YzE4LjIgMjIuOCA0NS44IDM2IDc1IDM2bDMzLjIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzMuMiAwYy05LjcgMC0xOC45LTQuNC0yNS0xMmwtMTcuOS0yMi40Yy0yMy0yOC44LTU3LjktNDUuNi05NC44LTQ1LjYtMzIuMiAwLTYzLjEgMTIuOC04NS44IDM1LjZMMjguMSAxODIuNkMxMC4xIDIwMC42IDAgMjI1IDAgMjUwLjVMMCAyODhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM3LjVjMC04LjUgMy40LTE2LjYgOS40LTIyLjZ6TTg1LjggNDA3LjNjLTEuNSA1LjItNC4zIDEwLTguMSAxMy44TDkuNCA0ODkuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw2OC4zLTY4LjNjMTEuNS0xMS41IDE5LjktMjUuOCAyNC40LTQxLjVsMi4yLTcuNi00Ni0zOS40Yy0yLjUtMi4yLTUtNC40LTcuNC02LjhMODUuOCA0MDcuM3pNMzU5IDMzNWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNzIgNzJjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0zMS0zMSAxMDIuMSAwYzEuMiAwIDIuNC0uMSAzLjUtLjMgNTYuMS0zLjkgMTAwLjUtNTAuNiAxMDAuNS0xMDcuNyAwLTU5LjYtNDguNC0xMDgtMTA4LTEwOGwtOTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5MiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwcy0yNi45IDYwLTYwIDYwbC05OC4xIDAgMzEtMzFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNzIgNzJ6Il0KICAgIH07CiAgICBmYURpY2VTaXggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1zaXgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODYxXSwgImY1MjYiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em0xNjAgNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTMyIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAxOTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zMjAgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQW5nbGVzRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmdsZXMtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtZG93biJdLCAiZjEwMyIsICJNMjE0LjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC0xNjAtMTYwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDE5MiA0MDIuNyAzMjkuNCAyNjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xNjAgMTYwem0xNjAtMzUybC0xNjAgMTYwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTYwLTE2MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxOTIgMjEwLjcgMzI5LjQgNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zeiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZURvd24gPSBmYUFuZ2xlc0Rvd247CiAgICBmYVN5cmluZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3lyaW5nZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODEzN10sICJmNDhlIiwgIk00OTcuNS0xN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwxNSAxNS00Ni4xIDQ2LjEtNjMtNjNjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNyA3LTc4LjEgNzguMSA0MSA0MWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00MS00MS00Ni4xIDQ2LjEgNDEgNDFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtNDEtNDEtMzcuNyAzNy43Yy0xMC41IDEwLjUtMTYuNCAyNC43LTE2LjQgMzkuNmwwIDg4LjgtNTcgNTdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1Ny01NyA4OC44IDBjMTQuOSAwIDI5LjEtNS45IDM5LjYtMTYuNGwyMjkuNy0yMjkuNyA3IDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02My02MyA0Ni4xLTQ2LjEgMTUgMTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC02NC02NHoiXQogICAgfTsKICAgIGZhV2hlYXRBd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIndoZWF0LWFsdCJdLCAiZTJjZCIsICJNNzkuNyAyMzQuNmM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDQ2LjEgNDYuMSA2LjEgNi43YzE5LjcgMjMuOCAyNi4zIDU1IDE5LjIgODMuOSAzMS43LTcuNyA2Ni4yIDEgOTAuNiAyNS4zbDQ2LjEgNDYuMWM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtNy40IDcuNGMtMzcuNSAzNy41LTk4LjMgMzcuNS0xMzUuOCAwTDEzNC4xIDQ0NC4zIDQ5LjQgNTI5Yy05LjQgOS40LTI0LjUgOS40LTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xem0xMDQtMTA0YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMiA4My45IDMxLjctNy43IDY2LjIgMSA5MC42IDI1LjNsNDYuMSA0Ni4xYzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42bC03LjQgNy40Yy0zNy41IDM3LjUtOTguMyAzNy41LTEzNS44IDBsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNDk1LjIgMTVjOS40LTkuNCAyNC42LTkuNCAzNCAwIDguOCA4LjggOS4zIDIyLjcgMS42IDMyLjJMNTI5LjIgNDkgNDE0LjcgMTYzLjRjNy43IDEgMTUuMiAzIDIyLjUgNS45TDQ5NS41IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTcuNCA3LjRjLTM3LjUgMzcuNS05OC4zIDM3LjUtMTM1LjggMGwtOTQuOS05NC45Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xYzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsMzkgMzkgNTIuNy01Mi43YzkuNC05LjQgMjQuNi05LjQgMzQgMCA4LjggOC44IDkuMyAyMi43IDEuNiAzMi4xbC0xLjcgMS44LTU4LjMgNTguM2MyLjggNy4xIDQuNyAxNC41IDUuNyAyMi4xTDQ5NS4yIDE1eiJdCiAgICB9OwogICAgZmFXaGVhdEFsdCA9IGZhV2hlYXRBd247CiAgICBmYVBsYW5lVXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTIyZCIsICJNMjAwIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyAxNzMuNiAxNTkuMmM2LjYgNi4xIDEwLjQgMTQuNiAxMC40IDIzLjZsMCA0My43YzAgMTAuOS0xMC43IDE4LjYtMjEuMSAxNS4ybC0xNjIuOS01NC4zIDAgOTkuNyA2NiA1Mi44YzMuOCAzIDYgNy42IDYgMTIuNWwwIDE5LjhjMCAxMC40LTkuOCAxOC0xOS45IDE1LjVMMjU2IDUxMiAxNDcuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0MyNi43IDM5Ni40IDE2IDM4OC43IDE2IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIwMCAxNTEuMyAyMDAgMjR6Il0KICAgIH07CiAgICBmYUFsaWduQ2VudGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFsaWduLWNlbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMDM3IiwgIk0zNTIgNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMTI4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyem05NiAxMjhjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyek0wIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zNTIgMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhSG9ja2V5UHVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob2NrZXktcHVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNDUzIiwgIk0yNTYgMjU2QzExNC42IDI1NiAwIDIxMyAwIDE2MHMxMTQuNi05NiAyNTYtOTYgMjU2IDQzIDI1NiA5Ni0xMTQuNiA5Ni0yNTYgOTZ6TTAgMzUyTDAgMjQyLjdjMTYuOSAxMi4zIDM3IDIyLjIgNTguMSAzMC4xIDUzIDE5LjkgMTIzIDMxLjIgMTk3LjkgMzEuMnMxNDQuOS0xMS4zIDE5Ny45LTMxLjJjMjEuMi03LjkgNDEuMi0xNy44IDU4LjEtMzAuMUw1MTIgMzUyYzAgNTMtMTE0LjYgOTYtMjU2IDk2UzAgNDA1IDAgMzUyeiJdCiAgICB9OwogICAgZmFDaXJjbGVBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLWxlZnQiXSwgImYwYTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xMzUgMjM5bDgwLTgwYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzkgMzkgMTUwLjEgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTUwLjEgMCAzOSAzOWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC04MC04MGMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlTGVmdCA9IGZhQ2lyY2xlQXJyb3dMZWZ0OwogICAgZmFQbHVnQ2lyY2xlQm9sdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1ib2x0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWIiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNzcuNC03N2MtNS44LTQuMi0xMy44LTQtMTkuNCAuNWwtODAgNjRjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhTNDMzLjIgNDE2IDQ0MCA0MTZsMzIuOSAwLTE1LjkgNDIuNGMtMi41IDYuNy0uMiAxNC4zIDUuNiAxOC42czEzLjggNCAxOS40LS41bDgwLTY0YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhTNTU4LjggMzg0IDU1MiAzODRsLTMyLjkgMCAxNS45LTQyLjRjMi41LTYuNyAuMi0xNC4zLTUuNi0xOC42eiJdCiAgICB9OwogICAgZmFSZXN0cm9vbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXN0cm9vbSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmN2JkIiwgIk04MCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwem00MCAzMDRsMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNTQuOGMtOC4xIDkuMi0yMS4xIDEzLjItMzMuNSA5LjQtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQ0LjQgMTU2LjkgODMuNiAxMjggMTI4IDEyOHM4My42IDI4LjkgOTYuOCA3MS4ybDI5LjcgOTUuMmM1LjMgMTYuOS00LjEgMzQuOC0yMSA0MC4xLTEyLjQgMy45LTI1LjQtLjItMzMuNS05LjRMMjAwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOC0xNiAwek0zMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ2NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDY0IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ0MCA0ODBsMC05Ni0xNy44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDktMjYuOWMtMy4yIDAtNi40LS41LTkuNS0xLjUtMTYuOS01LjMtMjYuMy0yMy4yLTIxLTQwLjFsMjkuNy05NS4yQzQyOC40IDE1Ni45IDQ2Ny42IDEyOCA1MTIgMTI4czgzLjYgMjguOSA5Ni44IDcxLjJsMjkuNyA5NS4yYzUuMyAxNi45LTQuMSAzNC44LTIxIDQwLjEtMy4yIDEtNi40IDEuNS05LjUgMS41bDkgMjYuOWMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFBbmNob3JMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuY2hvci1sb2NrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWQiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAyOC4zIDAgNTUuNC01LjcgODAtMTUuOWwwLS4yIDAtNzIuMmMtMTQuNCA5LjYtMzAuNiAxNi43LTQ4IDIwLjdsMC0yNTcuOWMzNy4zLTEzLjIgNjQtNDguNyA2NC05MC41IDAtNTMtNDMtOTYtOTYtOTZ6bTI3MiAzMDQuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2LjUgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFUaW1lbGluZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aW1lbGluZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjljIiwgIk0xNjAgMTY5LjNjMjguMy0xMi4zIDQ4LTQwLjUgNDgtNzMuMyAwLTQ0LjItMzUuOC04MC04MC04MFM0OCA1MS44IDQ4IDk2YzAgMzIuOCAxOS43IDYxIDQ4IDczLjNsMCA1NC43LTY0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDAgMCA1NC43Yy0yOC4zIDEyLjMtNDggNDAuNS00OCA3My4zIDAgNDQuMiAzNS44IDgwIDgwIDgwczgwLTM1LjggODAtODBjMC0zMi44LTE5LjctNjEtNDgtNzMuM2wwLTU0LjcgMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC01NC43YzI4LjMtMTIuMyA0OC00MC41IDQ4LTczLjMgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDU0LjctMjU2IDAgMC01NC43eiJdCiAgICB9OwogICAgZmFMaWdodGJ1bGIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpZ2h0YnVsYiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2MV0sICJmMGViIiwgIk0yOTIuOSAzODRjNy4zLTIyLjMgMjEuOS00Mi41IDM4LjQtNTkuOSAzMi43LTM0LjQgNTIuNy04MC45IDUyLjctMTMyLjEgMC0xMDYtODYtMTkyLTE5Mi0xOTJTMCA4NiAwIDE5MmMwIDUxLjIgMjAgOTcuNyA1Mi43IDEzMi4xIDE2LjUgMTcuNCAzMS4yIDM3LjYgMzguNCA1OS45bDIwMS43IDB6TTI4OCA0MzJsLTE5MiAwIDAgMTZjMCA0NC4yIDM1LjggODAgODAgODBsMzIgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTE2ek0xODQgMTEyYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMCAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYXJyb3ctY2lyY2xlLXJpZ2h0Il0sICJmMGE5IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnptNDEtMTU5Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDM5LTM5LTE1MC4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTUwLjEgMC0zOS0zOWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDgwIDgwYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45bC04MCA4MHoiXQogICAgfTsKICAgIGZhQXJyb3dDaXJjbGVSaWdodCA9IGZhQ2lyY2xlQXJyb3dSaWdodDsKICAgIGZhTWFyc0FuZFZlbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnMtYW5kLXZlbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg5M10sICJmMjI0IiwgIk0zNjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxMTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDExMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM0LjctNjMgNjNjMTkuNSAyOC40IDMxIDYyLjcgMzEgOTkuOCAwIDg2LjMtNjIuMSAxNTguMS0xNDQgMTczLjFsMCAzNC45IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTM0LjljLTgxLjktMTUtMTQ0LTg2LjgtMTQ0LTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2IDM3IDAgNzEuNCAxMS40IDk5LjggMzFsNjMtNjMtMzQuNyAwek0zNTIgMjA4YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6Il0KICAgIH07CiAgICBmYU5ldHdvcmtXaXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuZXR3b3JrLXdpcmVkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmYiLCAiTTI0OCA4OGw4MCAwIDAgNDgtODAgMCAwLTQ4em0tOC01NmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxNiAwIDAgMzItMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsOTYgMCAwIDMyLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgNjRjMCAyNi41IDIxLjUgNDggNDggNDhsOTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0xNiAwIDAtMzIgMTkyIDAgMCAzMi0xNiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMCAwLTMyIDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwIDAtMzIgMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC05NiAwek00NDggMzc2bDggMCAwIDQ4LTgwIDAgMC00OCA3MiAwem0tMjU2IDBsOCAwIDAgNDgtODAgMCAwLTQ4IDcyIDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXNoaWVsZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ4IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwMS4yIDBjLTEyLjUtMTQuNy0yMy4yLTMwLjgtMzEuOC00OGwtODkuNSAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMCAwLTI2LjdjMC0xOC4xIDYuMS0zNS4yIDE2LjYtNDguOC0uNC0xLjQtLjYtMi45LS42LTQuNWwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDEgODYuNy0yOC45YzMuMS0xIDYuMi0xLjggOS4zLTIuNUw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQ0NS4zIDQ4OC41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYxMjEiLCAiTTM2MC44IDEuMmMtMTctNC45LTM0LjcgNS0zOS42IDIybC0xMjggNDQ4Yy00LjkgMTcgNSAzNC43IDIyIDM5LjZzMzQuNy01IDM5LjYtMjJsMTI4LTQ0OGM0LjktMTctNS0zNC43LTIyLTM5LjZ6bTY0LjYgMTM2LjFjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDczLjQgNzMuNC03My40IDczLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHptLTI3NC43IDBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAxNTAuNiAxODIuNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhRmVhdGhlclBvaW50ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVhdGhlci1wb2ludGVkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImZlYXRoZXItYWx0Il0sICJmNTZiIiwgIk00NzUuMyAuMWM5LjktLjggMTkuNiAzIDI2LjYgMTBzMTAuOCAxNi43IDEwIDI2LjZjLTQgNDkuMy0xNy40IDEyNi4yLTQ2LjMgMTk5LjctMS44IDQuNS01LjUgNy45LTEwLjIgOS4zTDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDM4LjYgMGMxMiAwIDE5LjcgMTIuOCAxMy41IDIzLjEtNCA2LjctOC4zIDEzLjItMTIuNyAxOS42LTIgMi45LTUgNS04LjQgNi4xTDMxMC41IDM2NmMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDE2IDBjMTQuNiAwIDIxIDE3LjQgOC44IDI1LjQtNjggNDUtMTM3LjcgNDMuMy0xODIuNCAzMS4zLTEyLjctMy40LTI0LTkuOS0zNC40LTE3LjlMNDggNDk2Yy04LjggOC44LTIzLjIgOC44LTMyIDBzLTguOC0yMy4yIDAtMzJsODAtODAgLjUgLjVjLjctMS4zIDEuNi0yLjUgMi43LTMuNkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw4OS43IDMyNi4yYy04LjkgOC45LTI0IDQuNC0yNS04LjItNC4zLTUzLjIgOS4zLTEyMy4xIDcyLjYtMTg2LjQgOTEuMS05MS4xIDI1NC4yLTEyNC43IDMzNy45LTEzMS41eiJdCiAgICB9OwogICAgZmFGZWF0aGVyQWx0ID0gZmFGZWF0aGVyUG9pbnRlZDsKICAgIGZhRmlsZUNpcmNsZVF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLXF1ZXN0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWYiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTAtMTAwYTIwIDIwIDAgMSAxIDAgNDAgMjAgMjAgMCAxIDEgMC00MHptMC0xMDBjLTExLjYgMC0yMS4zIDguMi0yMy41IDE5LjItMS44IDguNy0xMC4yIDE0LjMtMTguOSAxMi41cy0xNC4zLTEwLjItMTIuNS0xOC45YzUuMi0yNS42IDI3LjgtNDQuOCA1NC45LTQ0LjggMzAuOSAwIDU2IDI1LjEgNTYgNTYgMCAxOS44LTExLjcgMzcuOC0yOS44IDQ1LjlsLTEwLjQgNC42Yy0xLjIgNy43LTcuOCAxMy41LTE1LjggMTMuNS04LjggMC0xNi03LjItMTYtMTYgMC0xMS4yIDYuNi0yMS4zIDE2LjgtMjUuOWwxMi40LTUuNWM2LjYtMi45IDEwLjgtOS40IDEwLjgtMTYuNiAwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNpZ25hdHVyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWI3IiwgIk0xOTIgMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA3LjhjMCAyNy43LTIuNCA1NS4zLTcuMSA4Mi41bC04NC40IDI1LjNjLTQwLjYgMTIuMi02OC40IDQ5LjYtNjguNCA5MmwwIDMyLjQtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3Mi41IDBjNC4yIDM2IDM0LjggNjQgNzIgNjQgMjYgMCA1MC0xMy45IDYyLjktMzYuNWwxMy45LTI0LjNjMjYuOC00NyA0Ni41LTk3LjcgNTguNC0xNTAuNWw5NC40LTI4LjMtMTIuNSAzNy41Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44UzQwNS43IDMyMCA0MTYgMzIwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04My42IDAgMTgtNTMuOWMzLjgtMTEuMyAuOS0yMy44LTcuNC0zMi40cy0yMC43LTExLjgtMzIuMi04LjRMMzE2LjQgMTk4LjFjMi40LTIwLjcgMy42LTQxLjQgMy42LTYyLjNsMC03LjhjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzJ6bS05LjIgMTc3bDQ5LTE0LjdjLTEwLjQgMzMuOC0yNC41IDY2LjQtNDIuMSA5Ny4ybC0xMy45IDI0LjNjLTEuNSAyLjYtNC4zIDQuMy03LjQgNC4zLTQuNyAwLTguNS0zLjgtOC41LTguNWwwLTcxLjljMC0xNC4xIDkuMy0yNi42IDIyLjgtMzAuN3pNNjE2IDQxNmMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjkyLjkgMGMtNi41IDE2LjMtMTMuNyAzMi4zLTIxLjYgNDhMNjE2IDQxNnoiXQogICAgfTsKICAgIGZhRWFydGhBbWVyaWNhcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hbWVyaWNhcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc1OCwgImVhcnRoIiwgImVhcnRoLWFtZXJpY2EiLCAiZ2xvYmUtYW1lcmljYXMiXSwgImY1N2QiLCAiTTU1LjcgMTk5LjdsMzAuOSAzMC45YzYgNiAxNC4xIDkuNCAyMi42IDkuNGwyMS41IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMjkuMyAyOS4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDM3LjVjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsMTMuMyAxMy4zYzYgNiA5LjQgMTQuMSA5LjQgMjIuNmwwIDE4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIuN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0NS4zLTQ1LjNjNi02IDkuNC0xNC4xIDkuNC0yMi42bDAtMzQuN2MwLTE3LjctMTQuMy0zMi0zMi0zMmwtODIuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNiAwLTEyLjUgMTAuMS0yMi42IDIyLjYtMjIuNmwzNC43IDBjMTIuNSAwIDIyLjYtMTAuMSAyMi42LTIyLjYgMC02LTIuNC0xMS44LTYuNi0xNmwtMTkuNy0xOS43QzI0MiAxMzAgMjQwIDEyNS4xIDI0MCAxMjBzMi0xMCA1LjctMTMuN2wxNy4zLTE3LjNjNS44LTUuOCA5LjEtMTMuNyA5LjEtMjEuOSAwLTcuMi0yLjQtMTMuNy02LjQtMTguOS0zLjItLjEtNi40LS4yLTkuNi0uMi05NS40IDAtMTc1LjcgNjQuMi0yMDAuMyAxNTEuN3pNNDY0IDI1NmMwLTM0LjYtOC40LTY3LjItMjMuNC05NS44LTYuNCAuOS0xMi43IDMuOS0xNy45IDkuMWwtMTMuNCAxMy40Yy02IDYtOS40IDE0LjEtOS40IDIyLjZsMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjEgMGMyLjUgMCA1LS4zIDcuMy0uOCAuNC01IC41LTEwLjEgLjUtMTUuMnpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHoiXQogICAgfTsKICAgIGZhRWFydGggPSBmYUVhcnRoQW1lcmljYXM7CiAgICBmYUVhcnRoQW1lcmljYSA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhR2xvYmVBbWVyaWNhcyA9IGZhRWFydGhBbWVyaWNhczsKICAgIGZhQ2Fycm90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnJvdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTM2NV0sICJmNzg3IiwgIk00NTMuMS0zNi43TDQ0MC45LTI0LjZjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMSAxNS42IDE1LjYgMzEuMiAzMS4yIDQ2LjkgNDYuOSAzMS4yIDMxLjIgODEuOSAzMS4yIDExMy4xIDBsMTIuMS0xMi4xYzYuMi02LjIgNi4yLTE2LjQgMC0yMi42TDYwMC45IDg4LjZjLTMxLjItMzEuMi04MS45LTMxLjItMTEzLjEgMCAzMS4yLTMxLjIgMzEuMi04MS45IDAtMTEzLjFMNDc1LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6TTMzMS42IDk2Yy00NS4yIDAtODcuMSAyMC40LTExNSA1NC4zTDI3My4zIDIwN2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDE5MS42IDE5My4yIDY3LjIgNDY2LjhjLTUuNSAxMi4xLTIuOSAyNi40IDYuNSAzNS45czIzLjcgMTIgMzUuOSA2LjVsMTQxLjYtNjQuNC00My44LTQzLjhjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni41IDU2LjUgOTUuMy00My4zYzUzLjEtMjQuMSA4Ny4yLTc3LjEgODcuMi0xMzUuNSAwLTgyLjItNjYuNi0xNDguOC0xNDguOC0xNDguOHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVGdWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWZ1bGwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsidGVtcGVyYXR1cmUtNCIsICJ0aGVybW9tZXRlci00IiwgInRoZXJtb21ldGVyLWZ1bGwiXSwgImYyYzciLCAiTTE2MCAwQzEwNyAwIDY0IDQzIDY0IDk2bDAgMTY0LjdDMzQuNSAyODcgMTYgMzI1LjQgMTYgMzY4IDE2IDQ0Ny41IDgwLjUgNTEyIDE2MCA1MTJzMTQ0LTY0LjUgMTQ0LTE0NGMwLTQyLjYtMTguNS04MS00OC0xMDcuM0wyNTYgOTZjMC01My00My05Ni05Ni05NnptNjQgMzY4YzAgMzUuMy0yOC43IDY0LTY0IDY0cy02NC0yOC43LTY0LTY0YzAtMjYuOSAxNi41LTQ5LjkgNDAtNTkuM0wxMzYgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDIxMi43YzIzLjUgOS41IDQwIDMyLjUgNDAgNTkuM3oiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmU0ID0gZmFUZW1wZXJhdHVyZUZ1bGw7CiAgICBmYVRoZXJtb21ldGVyNCA9IGZhVGVtcGVyYXR1cmVGdWxsOwogICAgZmFUaGVybW9tZXRlckZ1bGwgPSBmYVRlbXBlcmF0dXJlRnVsbDsKICAgIGZhVGFibGVDZWxsc1Jvd0xvY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtcm93LWxvY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTY3YSIsICJNMjU2IDI4OGwwLTY0IDE1My4zIDBjMTcuMS00Mi4yIDU2LTczLjIgMTAyLjctNzlsMC00OWMwLTM1LjMtMjguNy02NC02NC02NEwxMjggMzJDOTIuNyAzMiA2NCA2MC43IDY0IDk2bDAgMzIwYzAgMzUuMyAyOC43IDY0IDY0IDY0bDI0MS4zIDBjLS45LTUuMi0xLjMtMTAuNi0xLjMtMTYuMWwwLTQ3LjktMTEyIDAgMC02NCAxMTMuMyAwYzMuNy0yMiAxNC44LTQxLjQgMzAuNy01NS42bDAtOC40LTE0NCAwem0wLTE5MmwxOTIgMCAwIDY0LTE5MiAwIDAtNjR6TTU2MCAyNzIuMWwwIDQ3LjktNjQgMCAwLTQ3LjljMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDE2IDM2OGwwIDk2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yMC45LTEzLjQtMzguNy0zMi00NS4zbDAtNTAuNmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGwwIDUwLjZjLTE4LjYgNi42LTMyIDI0LjQtMzIgNDUuM3oiXQogICAgfTsKICAgIGZhQm9sdExpZ2h0bmluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib2x0LWxpZ2h0bmluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMGI3IiwgIk0wIDI1NkwyOC41IDI4YzItMTYgMTUuNi0yOCAzMS44LTI4TDIyOC45IDBjMTUgMCAyNy4xIDEyLjEgMjcuMSAyNy4xIDAgMy4yLS42IDYuNS0xLjcgOS41TDIwOCAxNjAgMzQ3LjMgMTYwYzIwLjIgMCAzNi43IDE2LjQgMzYuNyAzNi43IDAgNy40LTIuMiAxNC42LTYuNCAyMC43bC0xOTIuMiAyODFjLTUuOSA4LjYtMTUuNiAxMy43LTI1LjkgMTMuN2wtMi45IDBjLTE1LjcgMC0yOC41LTEyLjgtMjguNS0yOC41IDAtMi4zIC4zLTQuNiAuOS02LjlMMTc2IDI4OCAzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFDbG91ZFNob3dlcnNXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zaG93ZXJzLXdhdGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTQiLCAiTTI3OS4yIDU1LjdDMjYzLjkgMjIuOCAyMzAuNiAwIDE5MiAwIDEzOSAwIDk2IDQzIDk2IDk2IDYwLjcgOTYgMzIgMTI0LjcgMzIgMTYwczI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRzLTI4LjctNjQtNjQtNjRsLTEuNiAwYy03LjQtMzYuNS0zOS43LTY0LTc4LjQtNjQtMjIuMiAwLTQyLjMgOS4xLTU2LjggMjMuN3pNNDEwLjYgNDc2LjFjMjAuNyAxNS42IDQ2IDMwLjcgNzQuMiAzNC41IDEzLjEgMS44IDI1LjItNy41IDI3LTIwLjZzLTcuNS0yNS4yLTIwLjYtMjdjLTE1LjktMi4xLTMzLjItMTEuMy01MS43LTI1LjItMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMTguNSAxMy45LTM1LjggMjMuMS01MS43IDI1LjItMTMuMSAxLjgtMjIuNCAxMy44LTIwLjYgMjdzMTMuOCAyMi40IDI3IDIwLjZjMjguMi0zLjggNTMuNi0xOC45IDc0LjItMzQuNSAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45YzIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwek0xMDAuMSAzMDMuNmM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NEMyOSAzNjUgMzUuOCAzNzguNiA0OC40IDM4Mi44czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMTIgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0em0xMjAgMGM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjRzLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuMyA2NGMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS4zLTY0eiJdCiAgICB9OwogICAgZmFBcnJvd1VwTG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctdXAiXSwgImYxNzYiLCAiTTE4Mi42LTIyLjZjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDEyOCA3Ny4zIDEyOCA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTQzNC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dVcCA9IGZhQXJyb3dVcExvbmc7CiAgICBmYUFkZHJlc3NDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhZGRyZXNzLWNhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjE0MCwgImNvbnRhY3QtY2FyZCIsICJ2Y2FyZCJdLCAiZjJiYiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptODAgMjU2bDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2TDgwIDM4NGMtOC44IDAtMTYtNy4yLTE2LTE2IDAtNDQuMiAzNS44LTgwIDgwLTgwem0tMjQtOTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwem0yNDAtNDhsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDk2bDExMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMTIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ29udGFjdENhcmQyID0gZmFBZGRyZXNzQ2FyZDI7CiAgICBmYVZjYXJkMiA9IGZhQWRkcmVzc0NhcmQyOwogICAgZmFBbmdsZVJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXJpZ2h0IiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbODI1MF0sICJmMTA1IiwgIk0yNDcuMSAyMzMuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTc5LjIgMjU2IDQxLjkgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhRmFjZU1laDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1tZWgiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MjgsICJtZWgiXSwgImYxMWEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE3NiAzMjBsMTYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNZWgyID0gZmFGYWNlTWVoMjsKICAgIGZhQXJyb3dVcEZyb21Hcm91bmRXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1mcm9tLWdyb3VuZC13YXRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGI1IiwgIk0zMDMgN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw4OCA4OGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC00Ny00NyAwIDI3OC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjc4LjEtNDcgNDdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMzAzIDd6TTI0MCAxOTJsMCAxNjMuMWMtMTAuNi0yLjItMjEuMy0zLjItMzItMy4xLTMyLjUgLjItNjQuOSAxMC43LTkyLjMgMzEuNC04LjggNi42LTE1LjkgMTAuOS0yMS43IDEzLjVsLS44IC40Yy0zLjcgMS43LTYuNCAyLjktOS44IC4zLTYtNC41LTEyLjYtOC0xOS4zLTEwLjRMNjQgMjQwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDEyOCAwem0zMzYgNDhsMCAxNTUuMmMtMS4xIC44LTIuMiAxLjUtMy4zIDIuNC00LjEgMy4xLTguMyAuOC0xMi42LTEuNS0uNi0uMy0xLjItLjYtMS44LTEtNS4yLTIuNy0xMS4xLTYuNi0xOC0xMS43LTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTE1LjUgLjEtMzEgMi41LTQ2IDcuM2wwLTE2Ny4zIDEyOCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4ek00MDMuNCA0NzYuMUMzNzkuMSA0OTQuMyAzNTEuMSA1MTIgMzIwIDUxMnMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il0KICAgIH07CiAgICBmYU1hcDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTA2LCA2MjA3Ml0sICJmMjc5IiwgIk01MTIgNDhjMC0xMS4xLTUuNy0yMS40LTE1LjItMjcuMnMtMjEuMi02LjQtMzEuMS0xLjRMMzQ5LjUgNzcuNSAxNzAuMSAxNy42Yy04LjEtMi43LTE2LjgtMi4xLTI0LjQgMS43bC0xMjggNjRDNi44IDg4LjggMCA5OS45IDAgMTEyTDAgNDY0YzAgMTEuMSA1LjcgMjEuNCAxNS4yIDI3LjJzMjEuMiA2LjQgMzEuMSAxLjRsMTE2LjEtNTguMSAxNzkuNCA1OS44YzguMSAyLjcgMTYuOCAyLjEgMjQuNC0xLjdsMTI4LTY0YzEwLjgtNS40IDE3LjctMTYuNSAxNy43LTI4LjZsMC0zNTJ6TTE5MiAzNzYuOWwwLTI4NC41IDEyOCA0Mi43IDAgMjg0LjUtMTI4LTQyLjd6Il0KICAgIH07CiAgICBmYVVzZXJQbHVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMjM0IiwgIk0xMzYgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6TTQ4IDQ4Mi4zQzQ4IDM4My44IDEyNy44IDMwNCAyMjYuMyAzMDRsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc3LjcgNTEyQzYxLjMgNTEyIDQ4IDQ5OC43IDQ4IDQ4Mi4zek01NDQgOTZjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OCA0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwIDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhVmVudXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmVudXMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzkyXSwgImYyMjEiLCAiTTgwIDE3NmExMTIgMTEyIDAgMSAxIDIyNCAwIDExMiAxMTIgMCAxIDEgLTIyNCAwek0yMjMuOSAzNDkuMUMzMDUuOSAzMzQuMSAzNjggMjYyLjMgMzY4IDE3NiAzNjggNzguOCAyODkuMiAwIDE5MiAwUzE2IDc4LjggMTYgMTc2YzAgODYuMyA2Mi4xIDE1OC4xIDE0NC4xIDE3My4xLS4xIDEtLjEgMS45LS4xIDIuOWwwIDY0LTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtNjRjMC0xIDAtMS45LS4xLTIuOXoiXQogICAgfTsKICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXN1Y2Nlc3NvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNDdhIiwgIk0yODkuMiAxMzcuOWMyLjUtNiA4LjMtOS45IDE0LjgtOS45bDQwIDAgMC0yNGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtOTggMGMxLjMgNS4xIDIgMTAuNSAyIDE2bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTk2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMjU2IDBjMzkuOCAwIDcyIDMyLjIgNzIgNzJsMCAyNCA0MCAwYzYuNSAwIDEyLjMgMy45IDE0LjggOS45czEuMSAxMi45LTMuNSAxNy40bC02NCA2NGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBsLTY0LTY0Yy00LjYtNC42LTUuOS0xMS41LTMuNS0xNy40ek0zODQgNDgwTDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NGMwLTM1LjMgMjguNy02NCA2NC02NGwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0ek0xNjAgMTYwbDAtNjQtOTYgMCAwIDY0IDk2IDB6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlQ291Z2hTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtY291Z2gtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2MiIsICJNNTM1LTI0LjljOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45TDQxIDUzNy4xYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDI1LTI1IDAtNDQ3LjJjMC0xNSAxMC41LTI4LjMgMjUuNC0yOS44IDcuNC0uNyAxNC45LTEuMSAyMi42LTEuMSAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDIuMiAyLjYgMjI3LjUtMjI3LjV6TTEzMy44IDUxMkwyODggMzU3LjggMjg4IDQxNmMwIDUzLTQzIDk2LTk2IDk2bC01OC4yIDB6TTE3NiAyMjRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0zMzYgNDBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em0tODggNzJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptLTY0IDQ4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyOCAwYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTI0IDcyYTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHptLTg4LTI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYURpYWdyYW1Qcm9qZWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpYWdyYW0tcHJvamVjdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJwcm9qZWN0LWRpYWdyYW0iXSwgImY1NDIiLCAiTTAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDEyOCAwIDAtMTZjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2LTEyOCAwIDAgMTZjMCA3LjMtMS43IDE0LjMtNC42IDIwLjVsNjguNiA5MS41IDgwIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTcuMyAxLjctMTQuMyA0LjYtMjAuNUwxMjggMjI0IDQ4IDIyNGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHoiXQogICAgfTsKICAgIGZhUHJvamVjdERpYWdyYW0gPSBmYURpYWdyYW1Qcm9qZWN0OwogICAgZmFUZXJtaW5hbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTIwIiwgIk05LjQgMTE4LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTYwIDE2MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTYwIDE2MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNMMTQ2LjcgMjU2IDkuNCAxMTguNnpNMjI0IDM4NGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUhvdXNlRmlyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1maXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MGMiLCAiTTQ0OCAxOTJjMTQuMSAuNCAyMy44IDExLjQgMzIuNyAyMS43IDIgMi4zIDQgNC42IDYgNi43bDE5IDE5LjkgMTIuMi0xMy44YzUuNC02LjEgMTMuMy04LjkgMjAuOS04LjkgNy4yIDAgMTQuMyAyLjYgMTkuOSA3LjggMTkuNyAxOC4zIDM5LjggNDMuMiA1NSA3MC42IDE1LjEgMjcuMiAyNi4yIDU4LjIgMjYuMiA4OC4yIDAgODguNy03MS4zIDE1OS44LTE2MCAxNTkuOC04OS42IDAtMTYwLTcxLjMtMTYwLTE1OS44IDAtMzcuMyAxNi03My40IDM2LjgtMTA0LjUgMjAuOS0zMS4zIDQ3LjUtNTkgNzAuOS04MC4xIDUuNy01LjIgMTMuMS03LjcgMjAuMy03LjV6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMTQ3LjUgMTM3Yy0xOS4yLTQuMy00MCAuNS01NS41IDE0LjQtMzYuNCAzMi42LTY3LjcgNjkuOC05MC4zIDEwNi40LTEwLjMgMTYuNi0xOS43IDM0LjktMjYuOCA1My43TDI3MiAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgNjQuNiAwYzcuMyAxNy4yIDE2LjggMzMuNCAyOC4yIDQ4TDE0NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTc2LTE2IDBjLTEzLjIgMC0yNS04LjEtMjkuOC0yMC4zcy0xLjYtMjYuMiA4LTM1LjFsMjI0LTIwOCAyLjQtMnpNNDg5LjMgMzQzLjdjLTUuNC00LjctMTMuMS00LjctMTguNSAwLTE3LjcgMTUuNC01NC43IDUxLjktNTQuNyA4OC40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0zNi41LTM3LTczLTU0LjctODguNHoiXQogICAgfTsKICAgIGZhTWFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZmEiLCAiTTI4OCA2NEM2NCA2NCAwIDE2MCAwIDI3MlM4MCA0NDggMTc2IDQ0OGw4LjQgMGMyNC4yIDAgNDYuNC0xMy43IDU3LjItMzUuNGwyMy4yLTQ2LjNjNC40LTguOCAxMy4zLTE0LjMgMjMuMi0xNC4zczE4LjggNS41IDIzLjIgMTQuM2wyMy4yIDQ2LjNjMTAuOCAyMS43IDMzIDM1LjQgNTcuMiAzNS40bDguNCAwYzk2IDAgMTc2LTY0IDE3Ni0xNzZTNTEyIDY0IDI4OCA2NHpNOTYgMjU2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHptMzIwLTY0YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4eiJdCiAgICB9OwogICAgZmFIdXJyaWNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaHVycmljYW5lIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY3NTEiLCAiTTAgMjA4QzAgMTA0LjQgNzUuNyAxOC41IDE3NC45IDIuNiAxODQgMS4yIDE5MiA4LjYgMTkyIDE3LjlsMCA2My4zYzAgOC40IDYuNSAxNS4zIDE0LjcgMTYuNSAxMDAuMyAxNC45IDE3Ny4zIDEwMS4zIDE3Ny4zIDIwNS43IDAgMTAzLjYtNzUuNyAxODkuNS0xNzQuOSAyMDUuNC05LjIgMS41LTE3LjEtNS45LTE3LjEtMTUuMmwwLTYzLjNDMTkyIDQyMS45IDE4NS41IDQxNSAxNzcuMyA0MTMuNyA3NyAzOTguOSAwIDMxMi40IDAgMjA4em0yODggNDhhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem0tOTYtMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFFYXJ0aEFmcmljYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlYXJ0aC1hZnJpY2EiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTcsICJnbG9iZS1hZnJpY2EiXSwgImY1N2MiLCAiTTQ0Ny42IDE3NWMtMzEuNi03NC42LTEwNS41LTEyNy0xOTEuNi0xMjctMjIuMSAwLTQzLjQgMy41LTYzLjQgOS44LS40IDItLjYgNC4xLS42IDYuMmwwIDczLjRjMCAxMi41IDEwLjEgMjIuNiAyMi42IDIyLjYgNiAwIDExLjgtMi40IDE2LTYuNmwxNi0xNmM2LTYgMTQuMS05LjQgMjIuNi05LjRsNS41IDBjMjguNSAwIDQyLjggMzQuNSAyMi42IDU0LjYtNiA2LTE0LjEgOS40LTIyLjYgOS40bC02MS41IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC0yMS4zIDIxLjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDQyLjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDIuNyAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDI5LjMtMjkuM2M2LTYgOS40LTE0LjEgOS40LTIyLjZsMC0xOC43YzAtOC44IDcuMi0xNiAxNi0xNnMxNi03LjIgMTYtMTZsMC0zNC43YzAtOC41LTMuNC0xNi42LTkuNC0yMi42bC0xNi0xNmMtNC4yLTQuMi02LjYtMTAtNi42LTE2IDAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQ1IDBjMTIuNCAwIDIyLjctNy4xIDI4LTE3ek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFHbG9iZUFmcmljYSA9IGZhRWFydGhBZnJpY2E7CiAgICBmYVRodW1idGFjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyMDQsIDEyODM5MiwgInRodW1iLXRhY2siXSwgImYwOGQiLCAiTTMyIDMyQzMyIDE0LjMgNDYuMyAwIDY0IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5LjUgMCAxMC4zIDEzNC4xYzM3LjEgMjEuMiA2NS44IDU2LjQgNzguMiA5OS43bDMuOCAxMy40YzIuOCA5LjcgLjggMjAtNS4yIDI4LjFTMzYyIDM1MiAzNTIgMzUyTDMyIDM1MmMtMTAgMC0xOS41LTQuNy0yNS41LTEyLjdzLTgtMTguNC01LjItMjguMUw1IDI5Ny44YzEyLjQtNDMuMyA0MS03OC41IDc4LjItOTkuN0w5My41IDY0IDY0IDY0QzQ2LjMgNjQgMzIgNDkuNyAzMiAzMnpNMTYwIDQwMGw2NCAwIDAgMTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2sgPSBmYVRodW1idGFjazsKICAgIGZhSGFuZFBvaW50RG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwYTciLCAiTTMyIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjA4LTY0IDAgMCAyMDh6TTIyNCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjR6bS02NCA2NGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDhjMCAxNy43IDE0LjMgMzIgMzIgMzJ6bTE2MC05NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2NHptLTk2LTg4bDAgLjZjOS40LTUuNCAyMC4zLTguNiAzMi04LjYgMTMuMiAwIDI1LjQgNCAzNS42IDEwLjggOC43LTI0LjkgMzIuNS00Mi44IDYwLjQtNDIuOCAxMS43IDAgMjIuNiAzLjEgMzIgOC42bDAtOC42QzM4NCA3MS42IDMxMi40IDAgMjI0IDBMMTYyLjMgMEMxMTkuOCAwIDc5LjEgMTYuOSA0OS4xIDQ2LjlMMzcuNSA1OC41QzEzLjUgODIuNSAwIDExNS4xIDAgMTQ5bDAgMjdjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODggMGMyMi4xIDAgNDAtMTcuOSA0MC00MHMtMTcuOS00MC00MC00MGwtNTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmw1NiAwYzM5LjggMCA3MiAzMi4yIDcyIDcyeiJdCiAgICB9OwogICAgZmFGYWNlTWVoQmxhbmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbWVoLWJsYW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTY2LCAibWVoLWJsYW5rIl0sICJmNWE0IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0yMDgtNDhhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMTI4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhTWVoQmxhbmsyID0gZmFGYWNlTWVoQmxhbmsyOwogICAgZmFUZW1wZXJhdHVyZUVtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWVtcHR5IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbInRlbXBlcmF0dXJlLTAiLCAidGhlcm1vbWV0ZXItMCIsICJ0aGVybW9tZXRlci1lbXB0eSJdLCAiZjJjYiIsICJNNjQgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzE2IDQ0Ny41IDE2IDM2OGMwLTQyLjYgMTguNS04MSA0OC0xMDcuM0w2NCA5NnptOTYgMzM2YzM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjQgMjguNyA2NCA2NCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmUwID0gZmFUZW1wZXJhdHVyZUVtcHR5OwogICAgZmFUaGVybW9tZXRlcjAgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYVRoZXJtb21ldGVyRW1wdHkgPSBmYVRlbXBlcmF0dXJlRW1wdHk7CiAgICBmYUJvcmRlck5vbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLW5vbmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjg1MCIsICJNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzItMTQuMy0zMi0zMi0zMnpNMTYwIDMyYTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHpNMjg4IDQxNmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMiAzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzJ6TTE2MCA0ODBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyek0yODggMzJhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0ek00MTYgNDgwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzIgMTQuMyAzMiAzMiAzMnptMC0zODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAzMmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTQxNiAzNTJhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zMiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0em0wIDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6TTQxNiAxNjBhMzIgMzIgMCAxIDAgMCA2NCAzMiAzMiAwIDEgMCAwLTY0eiJdCiAgICB9OwogICAgZmFIaWdobGlnaHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWdobGlnaHRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTkxIiwgIk0zMTUgMzE1TDQ3My40IDk5LjkgNDQ0LjEgNzAuNiAyMjkgMjI5IDMxNSAzMTV6bS0xODcgNWwwIDAgMC03MS43YzAtMTUuMyA3LjItMjkuNiAxOS41LTM4LjZMNDIwLjYgOC40QzQyOCAyLjkgNDM3IDAgNDQ2LjIgMCA0NTcuNiAwIDQ2OC41IDQuNSA0NzYuNiAxMi42bDU0LjggNTQuOGM4LjEgOC4xIDEyLjYgMTkgMTIuNiAzMC41IDAgOS4yLTIuOSAxOC4yLTguNCAyNS42TDMzNC40IDM5Ni41Yy05IDEyLjMtMjMuNCAxOS41LTM4LjYgMTkuNWwtNzEuNyAwLTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTUwLjctNTAuN2MtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMMTI4IDMyMHpNNyA0NjYuM2w1MS43LTUxLjcgNzAuNiA3MC42LTE5LjcgMTkuN2MtNC41IDQuNS0xMC42IDctMTcgN0wyNCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNC43YzAtNi40IDIuNS0xMi41IDctMTd6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbC13YXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1M2EiLCAiTTAgNDE5LjZMMCAxMDkuNWMwLTIzLjIgMjQuMS0zOC42IDQ2LjMtMzIgODcuNyAyNi4yIDE0OS43IDUuNSAyMTIuMS0xNS4zIDY0LjUtMjEuNSAxMjkuNC00My4xIDIyMy4zLTEzLjEgMTguNSA1LjkgMzAuMyAyMy44IDMwLjMgNDMuM2wwIDMxMC4xYzAgMjMuMi0yNC4xIDM4LjYtNDYuMiAzMi04Ny43LTI2LjItMTQ5LjgtNS41LTIxMi4xIDE1LjMtNjQuNSAyMS41LTEyOS40IDQzLjEtMjIzLjMgMTMuMS0xOC41LTUuOS0zMC4zLTIzLjgtMzAuMy00My4zek0zMzYgMjU2YzAtNTMtMzUuOC05Ni04MC05NnMtODAgNDMtODAgOTYgMzUuOCA5NiA4MCA5NiA4MC00MyA4MC05NnpNMTIwIDQxMy42YzQuNCAwIDcuOS0zLjggNy4yLTguMS00LjYtMjcuOC0yNy00OS41LTU1LjItNTMtNC40LS41LTggMy4xLTggNy41bDAgMzkuOWMwIDMuNiAyLjQgNi44IDYgNy43IDE3LjkgNC4yIDM0LjMgNi4xIDUwIDYuMXptMzE4LjUtNTEuMWM1IC44IDkuNS0zIDkuNS04bDAtNDIuNmMwLTQuNC0zLjYtOC4xLTgtNy41LTI1LjIgMy4xLTQ1LjkgMjAuOS01My4yIDQ0LjYtMS40IDQuNyAyLjMgOS4xIDcuMiA5LjIgMTQuMiAuNCAyOSAxLjcgNDQuNCA0LjN6TTQ0OCAxNTJsMC0zOS45YzAtMy42LTIuNS02LjgtNi03LjctMTcuOS00LjItMzQuMy02LjEtNTAtNi4xLTQuNCAwLTcuOSAzLjgtNy4yIDguMSA0LjYgMjcuOCAyNyA0OS41IDU1LjIgNTMgNC40IC41IDgtMy4xIDgtNy41ek0xMjUuMiAxNjIuOWMxLjQtNC43LTIuMy05LjEtNy4yLTkuMi0xNC4yLS40LTI5LTEuNy00NC40LTQuMy01LS44LTkuNSAzLTkuNSA4TDY0IDIwMGMwIDQuNCAzLjYgOC4xIDggNy41IDI1LjItMy4xIDQ1LjktMjAuOSA1My4yLTQ0LjZ6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG9pbGV0LXBhcGVyLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwNzIiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk0LjUtOTQuNWM0MC4yLTIzIDY5LjUtOTYuOSA2OS41LTE4NC42IDAtMTA2LTQzLTE5Mi05Ni0xOTJzLTk2IDg2LTk2IDE5MmMwIDI0LjEgMi4yIDQ3LjIgNi4zIDY4LjRMMzA0IDIzOC4yIDMwNCAyMjRjMC01OC45IDExLjgtMTE0LjUgMzMuMi0xNTcuMiA1LjktMTEuNyAxMy4xLTIzLjcgMjEuOS0zNC44TDEyOCAzMmMtOC4zIDAtMTYuNCAyLjEtMjQuMSA2LjFsLTYzLTYzek0zMiAyMjRsMCAyNjRjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTYwIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC0xMTQuMi0yNTYtMjU2QzM3LjkgMTQ4LjIgMzIgMTg0LjcgMzIgMjI0em00MTYgNjRjLTE3LjcgMC0zMi0yOC43LTMyLTY0czE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NC0xNC4zIDY0LTMyIDY0eiJdCiAgICB9OwogICAgZmFGaWxlU2hpZWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2hpZWxkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjAxLjIgMEMyNjEgNDY5LjQgMjQwIDQxNC41IDI0MCAzNTYuNGwwLTMxLjFjMC0zNC40IDIyLTY1IDU0LjctNzUuOWwxMTItMzcuM2MzLjEtMSA2LjItMS44IDkuMy0yLjVsMC0zOS4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2em04Ny44IDMxMi41bC0xMy4zIDYuMyAwLTE4OC4xIDk2IDMyIDAgMTkuNmMwIDU1LjgtMzIuMiAxMDYuNS04Mi43IDEzMC4zek00MjEuOSAyNTkuNWwtMTEyIDM3LjNjLTEzLjEgNC40LTIxLjkgMTYuNi0yMS45IDMwLjRsMCAzMS4xYzAgNzQuNCA0MyAxNDIuMSAxMTAuMiAxNzMuN2wxOC41IDguN2M0LjggMi4yIDEwIDMuNCAxNS4yIDMuNHMxMC41LTEuMiAxNS4yLTMuNGwxOC41LTguN0M1MzMgNTAwLjMgNTc2IDQzMi42IDU3NiAzNTguMmwwLTMxLjFjMC0xMy44LTguOC0yNi0yMS45LTMwLjRsLTExMi0zNy4zYy02LjYtMi4yLTEzLjctMi4yLTIwLjIgMHoiXQogICAgfTsKICAgIGZhVGV4dEhlaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXh0LWhlaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMDM0IiwgIk00MCAzMkMxNy45IDMyIDAgNDkuOSAwIDcybDAgNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDY0IDAgMCAzMjAtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyMCA2NCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTU2YzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDMyek00MzguNiAzNjEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTkuNCA5LjQgMC0yMjkuNSA5LjQgOS40YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTY0LTY0Yy02LTYtMTQuMS05LjQtMjIuNi05LjRzLTE2LjYgMy40LTIyLjYgOS40bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGw5LjQtOS40IDAgMjI5LjUtOS40LTkuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5Ub25ndWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZ3Jpbi10b25ndWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MzksICJncmluLXRvbmd1ZSJdLCAiZjU4OSIsICJNMCAyNTZjMCAxMDQuNCA2Mi41IDE5NC4yIDE1Mi4yIDIzNC4xLTUuMy0xMy04LjItMjcuMi04LjItNDIuMWwwLTYxLjdjLTE2LjktMTYuNS0zMC4xLTM2LjctMzguMy01OS4zLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtOC4zIDIyLjYtMjEuNSA0Mi44LTM4LjMgNTkuM2wwIDYxLjdjMCAxNC45LTIuOSAyOS4xLTguMiA0Mi4xIDg5LjctMzkuOCAxNTIuMi0xMjkuNiAxNTIuMi0yMzQuMSAwLTE0MS40LTExNC42LTI1Ni0yNTYtMjU2UzAgMTE0LjYgMCAyNTZ6bTE3Ni04MGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNiAyNDBsMC00NS40YzAtMTQuNy0xMS45LTI2LjYtMjYuNi0yNi42bC0yIDBjLTExLjMgMC0yMS4xIDcuOS0yMy42IDE4LjktMi44IDEyLjYtMjAuOCAxMi42LTIzLjYgMC0yLjUtMTEuMS0xMi4zLTE4LjktMjMuNi0xOC45bC0yIDBjLTE0LjcgMC0yNi42IDExLjktMjYuNiAyNi42bDAgNDUuNGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlMiA9IGZhRmFjZUdyaW5Ub25ndWUyOwogICAgZmFGaWxlU2lnbmF0dXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtc2lnbmF0dXJlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY1NzMiLCAiTTY0LjEgNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRMMjc3LjYgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0w0MjkuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zbDAgOTcuNS0xMzIgMTMyLTQyLjEgMC0xNi4xLTUzLjZjLTQuNy0xNS43LTE5LjEtMjYuNC0zNS41LTI2LjQtMTEuMyAwLTIxLjkgNS4xLTI4LjkgMTMuOUwxMzMuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDMxLjUgMGMtLjkgMy4xLTEuNyA2LjMtMi4zIDkuNWwtMTAuOSA1NC41LTE0Ni4yIDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMzg0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw5My41IDAtMTE3LjUtMTE3LjV6bTYwLjIgNDA4LjRjMi41LTEyLjQgOC42LTIzLjggMTcuNS0zMi43bDExOC45LTExOC45IDgwIDgwLTExOC45IDExOC45Yy04LjkgOC45LTIwLjMgMTUtMzIuNyAxNy41bC01OS42IDExLjljLS45IC4yLTEuOSAuMy0yLjkgLjMtOCAwLTE0LjYtNi41LTE0LjYtMTQuNiAwLTEgLjEtMS45IC4zLTIuOWwxMS45LTU5LjZ6bTI2Ny44LTEyM2wtMjguOCAyOC44LTgwLTgwIDI4LjgtMjguOGMyMi4xLTIyLjEgNTcuOS0yMi4xIDgwIDBzMjIuMSA1Ny45IDAgODB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctd2hlYXQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYiIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNDkuMyAwYy02LTE0LjgtOS4zLTMxLTkuMy00OCAwLTE3LjcgNy4yLTMzLjcgMTguOC00NS4zLTExLjktMTkuNC0xOC44LTQyLjMtMTguOC02Ni43IDAtMTcuNyA3LjItMzMuNyAxOC44LTQ1LjMtMTEuOS0xOS40LTE4LjgtNDIuMy0xOC44LTY2LjcgMC0yNS4yIDE0LjUtNDYuOSAzNS42LTU3LjQtMi40LTcuMS0zLjYtMTQuNy0zLjYtMjIuNmwwLTMyQzM2OCA5Ni43IDM4OCA3MC4xIDQxNS45IDYwLjEgNDEzLjkgMjYuNiAzODYgMCAzNTIgMEw5NiAwek0yMDggMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMjcyIDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTEyOCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTM1MiAwbC0xNiAwYy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDguOCA3LjIgMTYgMTYgMTZsMTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTguOC03LjItMTYtMTYtMTZ6bTE2IDEyOGMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwem0wIDExMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwIDAgOC44IDcuMiAxNiAxNiAxNmwxNiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwek00OTYgNTI4YzAtNDQuMi0zNS44LTgwLTgwLTgwbC0xNiAwYy04LjggMC0xNiA3LjItMTYgMTYgMCA0NC4yIDM1LjggODAgODAgODBsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZ6bS0xNi05NmM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwem0xNi0xMjhjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDQ0LjIgMzUuOCA4MCA4MCA4MGwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnpNNTEyIDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTA0YzAtMTMuMy0xMC43LTI0LTI0LTI0em05NiA2NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMnpNNDQwIDEwNGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVBsdWdDaXJjbGVNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnLWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVlIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTM1MiA0MDBhMTQ0IDE0NCAwIDEgMSAyODggMCAxNDQgMTQ0IDAgMSAxIC0yODggMHptMjI0IDBjMC04LjgtNy4yLTE2LTE2LTE2bC0xMjggMGMtOC44IDAtMTYgNy4yLTE2IDE2czcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYUZ1dGJvbDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnV0Ym9sIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTkxNywgImZ1dGJvbC1iYWxsIiwgInNvY2Nlci1iYWxsIl0sICJmMWUzIiwgIk00MTcuMyAzNjAuMWwtNzEuNi00LjhjLTUuMi0uMy0xMC4zIDEuMS0xNC41IDQuMnMtNy4yIDcuNC04LjQgMTIuNWwtMTcuNiA2OS42QzI4OS41IDQ0NS44IDI3MyA0NDggMjU2IDQ0OHMtMzMuNS0yLjItNDkuMi02LjRMMTg5LjIgMzcyYy0xLjMtNS00LjMtOS40LTguNC0xMi41cy05LjMtNC41LTE0LjUtNC4ybC03MS42IDQuOGMtMTcuNi0yNy4yLTI4LjUtNTkuMi0zMC40LTkzLjZMMTI1IDIyOC4zYzQuNC0yLjggNy42LTcgOS4yLTExLjlzMS40LTEwLjItLjUtMTVsLTI2LjctNjYuNkMxMjggMTA5LjIgMTU1LjMgODkgMTg2LjcgNzYuOWw1NS4yIDQ2YzQgMy4zIDkgNS4xIDE0LjEgNS4xczEwLjItMS44IDE0LjEtNS4xbDU1LjItNDZjMzEuMyAxMi4xIDU4LjcgMzIuMyA3OS42IDU3LjlsLTI2LjcgNjYuNmMtMS45IDQuOC0yLjEgMTAuMS0uNSAxNXM0LjkgOS4xIDkuMiAxMS45bDYwLjcgMzguMmMtMS45IDM0LjQtMTIuOCA2Ni40LTMwLjQgOTMuNnpNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE0LjEtMzI1LjdjLTguNC02LjEtMTkuOC02LjEtMjguMiAwTDE5NCAyMjFjLTguNCA2LjEtMTEuOSAxNi45LTguNyAyNi44bDE4LjMgNTYuM2MzLjIgOS45IDEyLjQgMTYuNiAyMi44IDE2LjZsNTkuMiAwYzEwLjQgMCAxOS42LTYuNyAyMi44LTE2LjZsMTguMy01Ni4zYzMuMi05LjktLjMtMjAuNy04LjctMjYuOGwtNDcuOS0zNC44eiJdCiAgICB9OwogICAgZmFGdXRib2xCYWxsMiA9IGZhRnV0Ym9sMjsKICAgIGZhU29jY2VyQmFsbDIgPSBmYUZ1dGJvbDI7CiAgICBmYUNpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicGx1cy1jaXJjbGUiXSwgImYwNTUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yMzIgMzQ0bDAtNjQtNjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw2NCAwIDAtNjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDY0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY0IDAgMCA2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhUGx1c0NpcmNsZSA9IGZhQ2lyY2xlUGx1czsKICAgIGZhQnJhemlsaWFuUmVhbFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhemlsaWFuLXJlYWwtc2lnbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNDZjIiwgIk00MDAgMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC00OC45IDBjLTI2IDAtNDcuMSAyMS4xLTQ3LjEgNDcuMSAwIDIyLjUgMTUuOSA0MS44IDM3LjkgNDYuMmwzMi44IDYuNmM1MS45IDEwLjQgODkuMyA1NiA4OS4zIDEwOSAwIDUwLjYtMzMuOCA5My4zLTgwIDEwNi43bDAgMjAuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQuOSAwYzI2IDAgNDcuMS0yMS4xIDQ3LjEtNDcuMSAwLTIyLjUtMTUuOS00MS44LTM3LjktNDYuMmwtMzIuOC02LjZjLTUxLjktMTAuNC04OS4zLTU2LTg5LjMtMTA5IDAtNTAuNiAzMy44LTkzLjIgODAtMTA2LjdMMzY4IDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6Il0KICAgIH07CiAgICBmYVN0YXJBbmRDcmVzY2VudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyLWFuZC1jcmVzY2VudCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk3NzBdLCAiZjY5OSIsICJNMCAyNTZjMC0xNDEuNCAxMTQuNi0yNTYgMjU2LTI1NiAzMyAwIDY0LjYgNi4zIDkzLjYgMTcuNyA3LjQgMi45IDExLjUgMTAuNyA5LjggMTguNHMtOC44IDEzLTE2LjcgMTIuNGMtNC44LS4zLTkuNy0uNS0xNC42LS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOHM5My4xIDIwOCAyMDggMjA4YzQuOSAwIDkuOC0uMiAxNC42LS41IDcuOS0uNSAxNSA0LjcgMTYuNyAxMi40cy0yLjQgMTUuNS05LjggMTguNEMzMjAuNiA1MDUuNyAyODkgNTEyIDI1NiA1MTIgMTE0LjYgNTEyIDAgMzk3LjQgMCAyNTZ6TTM3NS40IDEzNy40YzMuNS03LjEgMTMuNy03LjEgMTcuMiAwbDMxLjUgNjMuOGMxLjQgMi44IDQuMSA0LjggNy4yIDUuM2w3MC40IDEwLjJjNy45IDEuMSAxMSAxMC44IDUuMyAxNi40bC01MC45IDQ5LjZjLTIuMyAyLjItMy4zIDUuNC0yLjggOC41bDEyIDcwLjFjMS4zIDcuOC02LjkgMTMuOC0xMy45IDEwLjFsLTYzLTMzLjFjLTIuOC0xLjUtNi4xLTEuNS04LjkgMGwtNjMgMzMuMWMtNyAzLjctMTUuMy0yLjMtMTMuOS0xMC4xbDEyLTcwLjFjLjUtMy4xLS41LTYuMy0yLjgtOC41TDI2MSAyMzMuMWMtNS43LTUuNi0yLjYtMTUuMiA1LjMtMTYuNGw3MC40LTEwLjJjMy4xLS41IDUuOC0yLjQgNy4yLTUuM2wzMS41LTYzLjh6Il0KICAgIH07CiAgICBmYUZhY2VTdXJwcmlzZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zdXJwcmlzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1OCwgInN1cnByaXNlIl0sICJmNWMyIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0tNDggODBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVN1cnByaXNlMiA9IGZhRmFjZVN1cnByaXNlMjsKICAgIGZhSG9zcGl0YWxVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvc3BpdGFsLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjgwZCIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0yNDggODhjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwIDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzIgMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDAgMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDB6TTQxNiAzMDRhODAgODAgMCAxIDEgMTYwIDAgODAgODAgMCAxIDEgLTE2MCAwek0zNTIgNTEyYzAtNTMgNDMtOTYgOTYtOTZsOTYgMGM1MyAwIDk2IDQzIDk2IDk2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYUFycm93RG93blVwTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLXVwLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRiMCIsICJNMjYyLjYgNDIyLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMjUuNCAyNS40IDAtMTE0LjctNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwyNTYgMCAwLTExNC43LTI1LjQgMjUuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsODAtODBjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsODAgODBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTI1LjQtMjUuNCAwIDk0LjhjLTI1LjMgMjAuMy00Mi44IDUwLjEtNDcgODMuOWwtMTQ1IDAgMCAxMTQuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMTkyIDMybDAgMTQ0LTY0IDAgMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnpNNDk2IDMwNC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhRm9sZGVyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTMsIDEyODQ0NywgNjE3MTYsICJmb2xkZXItYmxhbmsiXSwgImYwN2IiLCAiTTY0IDQ0OGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI0MGMwLTM1LjMtMjguNy02NC02NC02NEwyOTguNyA4MGMtNi45IDAtMTMuNy0yLjItMTkuMi02LjRMMjQxLjEgNDQuOEMyMzAgMzYuNSAyMTYuNSAzMiAyMDIuNyAzMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0eiJdCiAgICB9OwogICAgZmFGb2xkZXJCbGFuazIgPSBmYUZvbGRlcjI7CiAgICBmYUhvbGx5QmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9sbHktYmVycnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdhYSIsICJNMjU2LjIgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0tODAgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0yNzcgMzgzLjhjMSAuMSAyLjEgLjIgMy4yIC4yIDM5LjggMCA3MiAzMi4yIDcyIDcybDAgMjIuN2MwIDE2LjQgMTYgMjcuOSAzMS42IDIyLjhsMTIuOC00LjNjMTgtNiAzNy4zLTYuNSA1NS42LTEuNWwxOS40IDUuM2MxNy45IDQuOSAzNC40LTExLjYgMjkuNS0yOS41TDQ5NS45IDQ1MmMtNS0xOC4zLTQuNC0zNy42IDEuNS01NS42bDQuMy0xMi44YzUuMi0xNS41LTYuNC0zMS42LTIyLjgtMzEuNi0zNC42IDAtNjIuNy0yOC4xLTYyLjctNjIuN2wwLTMyYzAtMTYuNC0xNi0yNy45LTMxLjYtMjIuOGwtMTIuOCA0LjNjLTE4IDYtMzcuMyA2LjUtNTUuNiAxLjVsLTI5LjYtOC4xYy0yLjktLjgtNS45LTEtOC43LS43IDQuMiA5LjcgNS44IDIwLjggMy43IDMyLjNsLTYuMyAzNC44Yy0xLjUgOC40LTEuNCAxNyAuNSAyNS4zbDUuMyAyMy45YzIuOCAxMi43IDEuMSAyNS4yLTQgMzUuOXpNMTI3LjggMjM0LjVjLTE1LjUtNS4yLTMxLjYgNi40LTMxLjYgMjIuOGwwIDMyYzAgMzQuNi0yOC4xIDYyLjctNjIuNyA2Mi43LTE2LjQgMC0yNy45IDE2LTIyLjggMzEuNkwxNSAzOTYuNGM2IDE4IDYuNSAzNy4zIDEuNSA1NS42bC01LjMgMTkuNEM2LjQgNDg5LjQgMjIuOCA1MDUuOCA0MC43IDUwMWwxOS40LTUuM2MxOC4zLTUgMzcuNi00LjUgNTUuNiAxLjVsMTIuOCA0LjNjMTUuNSA1LjIgMzEuNi02LjQgMzEuNi0yMi44bDAtMzJjMC0zNC42IDI4LjEtNjIuNyA2Mi43LTYyLjcgMTYuNCAwIDI3LjktMTYgMjIuOC0zMS42bC00LjMtMTIuOGMtNi0xOC02LjUtMzcuMy0xLjUtNTUuNmw1LjMtMTkuNGM0LjktMTcuOS0xMS42LTM0LjQtMjkuNS0yOS41bC0xOS40IDUuM2MtMTguMyA1LTM3LjYgNC40LTU1LjYtMS41bC0xMi44LTQuM3pNMzg0LjIgMTQ0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYVZlbnVzRG91YmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZlbnVzLWRvdWJsZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzk4OTBdLCAiZjIyNiIsICJNMTkyIDI4OGExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6TTM2OCAxNzZjMCA4Ni4zLTYyLjEgMTU4LjEtMTQ0LjEgMTczLjEgLjEgMSAuMSAxLjkgLjEgMi45bDAgNjQgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMiAwIDAtNjRjMC0xIDAtMS45IC4xLTIuOS04Mi0xNS0xNDQuMS04Ni44LTE0NC4xLTE3My4xIDAtOTcuMiA3OC44LTE3NiAxNzYtMTc2UzM2OCA3OC44IDM2OCAxNzZ6TTM1Ny41IDMyN2MxNC40LTE1LjggMjYuNi0zMy43IDM2LjEtNTMuMSAxNi4xIDkgMzQuNyAxNC4xIDU0LjUgMTQuMSA2MS45IDAgMTEyLTUwLjEgMTEyLTExMlM1MDkuOSA2NCA0NDggNjRjLTE5LjggMC0zOC4zIDUuMS01NC41IDE0LjEtOS41LTE5LjQtMjEuNi0zNy4zLTM2LjEtNTMuMSAyNi40LTE1LjkgNTcuNC0yNSA5MC41LTI1IDk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgODYuMy02Mi4xIDE1OC4xLTE0NC4xIDE3My4xIC4xIC45IC4xIDEuOSAuMSAyLjlsMCA2NCAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDAgMC02NGMwLTEgMC0xLjkgLjEtMi45LTIxLjEtMy45LTQwLjktMTEuNS01OC42LTIyLjJ6Il0KICAgIH07CiAgICBmYUNsaXBib2FyZFF1ZXN0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsaXBib2FyZC1xdWVzdGlvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNGUzIiwgIk0zMTEuNCAzMmw4LjYgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDM1MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsOC42IDBDODMuNiAxMi45IDEwNC4zIDAgMTI4IDBMMjU2IDBjMjMuNyAwIDQ0LjQgMTIuOSA1NS40IDMyek0yNDggMTEyYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDEzNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxMTIgMHpNMTkyIDI0OGMxNi4xIDAgMjkuMiAxMy4xIDI5LjIgMjkuMiAwIDguNy0zLjEgMTMuOS02LjkgMTcuNy00LjUgNC40LTEwLjcgNy41LTE2LjggOS41LTE0LjkgNS0yOS41IDE5LjMtMjkuNSAzOS41IDAgMTMuMyAxMC43IDI0IDI0IDI0IDExLjUgMCAyMS4yLTguMSAyMy41LTE5IDE5LjItNy4xIDUzLjctMjYuMyA1My43LTcxLjggMC00Mi42LTM0LjYtNzcuMi03Ny4yLTc3LjJzLTc3LjIgMzQuNi03Ny4yIDc3LjJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE2LjEgMTMuMS0yOS4yIDI5LjItMjkuMnptMjggMTY4YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4IDEyLjUgMjggMjggMjggMjgtMTIuNSAyOC0yOHoiXQogICAgfTsKICAgIGZhSG90ZG9nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdGRvZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzc4OV0sICJmODBmIiwgIk0yODggMGMtMjAuNSAwLTQwLjEgOC4xLTU0LjYgMjIuNkwyMi42IDIzMy40QzguMSAyNDcuOSAwIDI2Ny41IDAgMjg4IDAgMzAwLjIgMi45IDMxMi4xIDguMiAzMjIuN0wzMjIuNyA4LjJDMzEyLjEgMi45IDMwMC4yIDAgMjg4IDB6TTIyNCA1MTJjMjAuNSAwIDQwLjEtOC4xIDU0LjYtMjIuNkw0ODkuNCAyNzguNmMxNC41LTE0LjUgMjIuNi0zNC4xIDIyLjYtNTQuNiAwLTEyLjItMi45LTI0LjEtOC4yLTM0LjdMMTg5LjMgNTAzLjhjMTAuNyA1LjQgMjIuNiA4LjIgMzQuNyA4LjJ6TTQ1Ni42IDE2OC42YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTI4OCAyODhjLTMxLjIgMzEuMi0zMS4yIDgxLjkgMCAxMTMuMXM4MS45IDMxLjIgMTEzLjEgMGwyODgtMjg4eiJdCiAgICB9OwogICAgZmFBcnJvd1VwRnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwOWEiLCAiTTI0Ni42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTkyIDEwOS4zIDE5MiAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIxMC43IDczLjQgNzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xMjgtMTI4ek02NCAzNTJjMC0xNy43LTE0LjMtMzItMzItMzJTMCAzMzQuMyAwIDM1MmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJMOTYgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0eiJdCiAgICB9OwogICAgZmFNaWNyb3Njb3BlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3Jvc2NvcGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzMDBdLCAiZjYxMCIsICJNMTc2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMjA4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC02NCAzMiAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4UzM5MC43IDQ0OCAzMjAgNDQ4TDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYuOSAwYzMwLjQtMzQgNDguOS03OC44IDQ4LjktMTI4IDAtMTA2LTg2LTE5Mi0xOTItMTkybC0zMiAwIDAtODBjMC0yNi41LTIxLjUtNDgtNDgtNDhMMTc2IDB6TTEyMCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTc2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE3NiAweiJdCiAgICB9OwogICAgZmFDbG91ZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2xvdWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5NzI5XSwgImYwYzIiLCAiTTAgMzM2YzAgNzkuNSA2NC41IDE0NCAxNDQgMTQ0bDMwNCAwYzcwLjcgMCAxMjgtNTcuMyAxMjgtMTI4IDAtNTEuNi0zMC41LTk2LjEtNzQuNS0xMTYuMyA2LjctMTMuMSAxMC41LTI4IDEwLjUtNDMuNyAwLTUzLTQzLTk2LTk2LTk2LTE3LjcgMC0zNC4yIDQuOC00OC40IDEzLjEtMjQuMS00NS44LTcyLjItNzcuMS0xMjcuNi03Ny4xLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgOCAuNyAxNS45IDEuOSAyMy41LTU2LjkgMTkuMi05Ny45IDczLjEtOTcuOSAxMzYuNXoiXQogICAgfTsKICAgIGZhQmFzZWJhbGxCYXRCYWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhc2ViYWxsLWJhdC1iYWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0MzIiLCAiTTQ2NC4xIDU0NGE4MCA4MCAwIDEgMSAwLTE2MCA4MCA4MCAwIDEgMSAwIDE2MHptOC40LTU3NmMxNS4xIDAgMjkuNyA1LjggNDAuNyAxNi4ybDQ3LjIgNDQuOGMxMi42IDEyIDE5LjEgMjkgMTcuNSA0Ni4zLTEuMiAxMy4zLTcgMjUuOC0xNi41IDM1LjJMMzYzLjEgMzA5Yy03LjMgNy4zLTE1LjcgMTMuNC0yNSAxOEwyMDYgMzkzYy05LjIgNC42LTE3LjcgMTAuNy0yNSAxOGwtOTIgOTIgMS43IDEuOGM3LjcgOS40IDcuMSAyMy4zLTEuNyAzMi4xcy0yMi43IDkuMy0zMi4xIDEuN2wtMS44LTEuNy00OC00OC0xLjctMS44Yy03LjctOS40LTcuMS0yMy4zIDEuNy0zMi4xczIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgOTItOTJjNy4zLTcuMyAxMy40LTE1LjcgMTgtMjVsNjYuMS0xMzIuMWM0LjYtOS4yIDEwLjctMTcuNyAxOC0yNUw0MzAuOC0xNC43QzQ0MS45LTI1LjggNDU2LjktMzIgNDcyLjUtMzJ6Il0KICAgIH07CiAgICBmYUNhclJlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLXJlYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2FyLWFsdCJdLCAiZjVkZSIsICJNMTY1LjQgOTZsMTgxLjIgMGMxMy42IDAgMjUuNyA4LjYgMzAuMiAyMS40bDI2LjEgNzQuNi0yOTMuOCAwIDI2LjEtNzQuNmM0LjUtMTIuOCAxNi42LTIxLjQgMzAuMi0yMS40em0tOTAuNiAuM0wzOS42IDE5Ni44QzE2LjQgMjA2LjQgMCAyMjkuMyAwIDI1NmwwIDk2YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwzMiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI1NiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQwLjZjMTkuMS0xMS4xIDMyLTMxLjcgMzItNTUuNGwwLTk2YzAtMjYuNy0xNi40LTQ5LjYtMzkuNi01OS4yTDQzNy4yIDk2LjNDNDIzLjcgNTcuOCAzODcuNCAzMiAzNDYuNiAzMkwxNjUuNCAzMmMtNDAuOCAwLTc3LjEgMjUuOC05MC42IDY0LjN6TTIwOCAyODhsOTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTk2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDggMjgwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zNjAtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhQ2FyQWx0ID0gZmFDYXJSZWFyOwogICAgZmFUaHVtYnRhY2tTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnRhY2stc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidGh1bWItdGFjay1zbGFzaCJdLCAiZTY4ZiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MTcuOCAzNTIgNDQ4IDM1MmMxMCAwIDE5LjUtNC43IDI1LjUtMTIuN3M4LTE4LjQgNS4yLTI4LjFMNDc1IDI5Ny44Yy0xMi40LTQzLjMtNDEtNzguNS03OC4yLTk5LjdMMzg2LjUgNjQgNDE2IDY0YzE3LjcgMCAzMi0xNC4zIDMyLTMyUzQzMy43IDAgNDE2IDBMMTYwIDBjLTcuNCAwLTE0LjEgMi41LTE5LjUgNi42TDE5MC4xIDU2LjMgMTg1LjMgMTE5LjQgNDEtMjQuOXpNMjgyLjIgMzUyTDE0OS43IDIxOS42Yy0yMi43IDIwLjUtMzkuOCA0Ny40LTQ4LjcgNzguM2wtMy44IDEzLjRjLTIuOCA5LjctLjggMjAgNS4yIDI4LjFTMTE4IDM1MiAxMjggMzUybDE1NC4yIDB6TTI1NiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTExMi02NCAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFUaHVtYlRhY2tTbGFzaCA9IGZhVGh1bWJ0YWNrU2xhc2g7CiAgICBmYVBsdXNNaW51cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzLW1pbnVzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0M2MiLCAiTTIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDEyOC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxMjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMjggMCAwLTEyOHpNMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgNDQ4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhSG91c2VDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwOSIsICJNNDk2IDU0NGExNDQgMTQ0IDAgMSAxIDAtMjg4IDE0NCAxNDQgMCAxIDEgMCAyODh6TTI2OC42IDYuNWMxMi4yLTkuMyAyOS43LTguNyA0MS4yIDJsMjE3LjYgMjAyYy0xMC4yLTEuNy0yMC43LTIuNi0zMS4zLTIuNi03OC42IDAtMTQ2LjEgNDcuMi0xNzUuOCAxMTQuOC01LjEtMS44LTEwLjUtMi44LTE2LjItMi44bC0zMiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDk2IDkxIDBjNi4xIDE3LjMgMTQuNiAzMy40IDI1LjEgNDhMMTQ0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4IDIuNC0yek01NTMuNCAzMzkuMWMtNy4xLTUuMi0xNy4xLTMuNi0yMi4zIDMuNWwtNTMgNzIuOC0yNi43LTI2LjhjLTYuMi02LjItMTYuNC02LjItMjIuNiAwLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjdzOC45LTIuOCAxMS43LTYuNmw2NC04OGM1LjItNy4xIDMuNi0xNy4xLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFDYWxlbmRhckRheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1kYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjc4MyIsICJNMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAxMjggMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjg4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0wIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6Il0KICAgIH07CiAgICBmYUNpcmNsZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzA4LCAxMjgzMDksIDEyODk5MiwgMTI4OTkzLCAxMjg5OTQsIDEyODk5NSwgMTI4OTk2LCA5Njc5LCA5ODk4LCA5ODk5LCAxMTA0NCwgNjE3MDgsIDYxOTE1XSwgImYxMTEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6Il0KICAgIH07CiAgICBmYU1vYmlsZVZpYnJhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXZpYnJhdGUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTgxNiIsICJNMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTM4NGMwLTM1LjMgMjguNy02NCA2NC02NEwzODQgMHpNMjQ4IDQxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek00OC44IDEzMy40YzkuNC03LjcgMjMuMy03LjEgMzIuMSAxLjcgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDI1LjQgMjUuNCAyLjkgMy4yYzYuMyA3LjcgOS44IDE3LjQgOS44IDI3LjQgMCAxMS41LTQuNiAyMi41LTEyLjcgMzAuNmwtMjUuNCAyNS40IDMxIDMxIDEuNyAxLjhjNy43IDkuNCA3LjEgMjMuMy0xLjcgMzIuMXMtMjIuNyA5LjMtMzIuMSAxLjdMNDcgMzc3IDEyLjcgMzQyLjZDNS42IDMzNS41IDEuMiAzMjYuMiAuMiAzMTYuM0wwIDMxMiAuMiAzMDcuN2MxLTkuOSA1LjQtMTkuMiAxMi41LTI2LjNMMzguMSAyNTYgMTIuNyAyMzAuNkM1LjYgMjIzLjUgMS4yIDIxNC4yIC4yIDIwNC4zTDAgMjAwIC4yIDE5NS43YzEtOS45IDUuNC0xOS4yIDEyLjUtMjYuM0w0NyAxMzUgNDguOCAxMzMuNHpNNDk1IDEzNWM4LjgtOC44IDIyLjctOS4zIDMyLjEtMS43bDEuOCAxLjcgMzQuMyAzNC4zYzcuMSA3LjEgMTEuNSAxNi40IDEyLjUgMjYuM2wuMiA0LjMtLjIgNC4zYy0xIDkuOS01LjQgMTkuMi0xMi41IDI2LjNsLTI1LjQgMjUuNCAyNS40IDI1LjRjNy4xIDcuMSAxMS41IDE2LjQgMTIuNSAyNi4zbC4yIDQuMy0uMiA0LjNjLTEgOS45LTUuNCAxOS4yLTEyLjUgMjYuM2wtMzQuMyAzNC4zLTEuOCAxLjdjLTkuNCA3LjctMjMuMyA3LjEtMzIuMS0xLjdzLTkuMy0yMi43LTEuNy0zMi4xbDEuNy0xLjggMzEtMzEtMjUuNC0yNS40Yy04LjEtOC4xLTEyLjctMTkuMS0xMi43LTMwLjYgMC0xMCAzLjUtMTkuNyA5LjgtMjcuNGwyLjktMy4yIDI1LjQtMjUuNC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUZhY2VHcmluU3F1aW50MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTE4LCAiZ3Jpbi1zcXVpbnQiXSwgImY1ODUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMTIyLjYgMTQzLjJjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhR3JpblNxdWludDIgPSBmYUZhY2VHcmluU3F1aW50MjsKICAgIGZhVXNlcnNCZXR3ZWVuTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtYmV0d2Vlbi1saW5lcyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTkxIiwgIk0yNCAxNmw1MjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEwyNCA2NEMxMC43IDY0IDAgNTMuMyAwIDQwUzEwLjcgMTYgMjQgMTZ6bTAgNDQ4bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNMzkyIDE5MmE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6bTI3LjIgMTAwLjRjOS4xLTIuOSAxOC44LTQuNCAyOC44LTQuNCA1MyAwIDk2IDQzIDk2IDk2bDAgMTAuN2MwIDExLjgtOS42IDIxLjMtMjEuMyAyMS4zbC03OC44IDBjMi43LTcuNSA0LjEtMTUuNiA0LjEtMjRsMC04YzAtMzQuMS0xMC42LTY1LjctMjguOC05MS42em0tMjYyLjQgMEMxMzguNiAzMTguMyAxMjggMzQ5LjkgMTI4IDM4NGwwIDhjMCA4LjQgMS40IDE2LjUgNC4xIDI0bC03OC44IDBDNDEuNiA0MTYgMzIgNDA2LjQgMzIgMzk0LjdMMzIgMzg0YzAtNTMgNDMtOTYgOTYtOTYgMTAgMCAxOS43IDEuNSAyOC44IDQuNHpNNzIgMTkyYTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHptMTUyLTE2YTY0IDY0IDAgMSAxIDEyOCAwIDY0IDY0IDAgMSAxIC0xMjggMHpNMTc2IDM4NGMwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnMxMTIgNTAuMSAxMTIgMTEybDAgOGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtMTc2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtOHoiXQogICAgfTsKICAgIGZhSG91c2VNZWRpY2FsQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUxMyIsICJNMzA5LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVM1MC44IDI3MiA2NCAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwxOTYgMGMtMjEuMi0yOS41LTM0LjMtNjUuMy0zNS45LTEwNEwyNzIgNDA4Yy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDIwIDBjMzQuOS00OC41IDkxLjctODAgMTU2LTgwIDEwLjcgMCAyMS4xIC45IDMxLjMgMi41TDMwOS44IDguNnpNNDk2IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTIyLjYtMTQ0bDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNkw1MTguNiA0MDB6Il0KICAgIH07CiAgICBmYVRhYmxlTGlzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZS1saXN0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRoLWxpc3QiXSwgImYwMGIiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2em02NCAwbDAgNjQgNjQgMCAwLTY0LTY0IDB6bTMyMCAwbC0xOTIgMCAwIDY0IDE5MiAwIDAtNjR6TTY0IDIyNGwwIDY0IDY0IDAgMC02NC02NCAwem0zMjAgMGwtMTkyIDAgMCA2NCAxOTIgMCAwLTY0ek02NCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHptMzIwIDBsLTE5MiAwIDAgNjQgMTkyIDAgMC02NHoiXQogICAgfTsKICAgIGZhVGhMaXN0ID0gZmFUYWJsZUxpc3Q7CiAgICBmYUZsYXNrVmlhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFzay12aWFsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0ZjMiLCAiTTE4NC42IDQxMS41Yy0zLjEgNy4zLTUuNCAxNC45LTYuOCAyMi42LTE0LjUgOC44LTMxLjUgMTMuOS00OS44IDEzLjktNTMgMC05Ni00My05Ni05NkwzMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwTDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMjU1LjYtMzkuNCA5MS45ek05NiA2NGwwIDEyOCA2NCAwIDAtMTI4LTY0IDB6TTM1MiAwTDUxMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTUzLjQgOTEuMyAyMTNjMi4zIDUuNCAzLjggMTEuMSA0LjQgMTdsLjMgLjYtLjMgMGMuMiAxLjggLjMgMy42IC4zIDUuNCAwIDMyLjMtMjYuMiA1OC42LTU4LjYgNTguNmwtMjY2LjkgMGMtMzIuMyAwLTU4LjYtMjYuMi01OC42LTU4LjYgMC0xLjggLjEtMy42IC4zLTUuNGwtLjMgMCAuMy0uNmMuNi01LjggMi4xLTExLjYgNC40LTE3TDMyMCAyMTcuNCAzMjAgNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzMwMi4zIDAgMzIwIDBsMzIgMHpNNDUzLjIgMjQyLjZjLTMuNC04LTUuMi0xNi41LTUuMi0yNS4ybDAtMTUzLjQtNjQgMCAwIDE1My40YzAgOC43LTEuOCAxNy4yLTUuMiAyNS4ybC0zMy4yIDc3LjQgMTQwLjcgMC0zMy4yLTc3LjR6Il0KICAgIH07CiAgICBmYUNpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleGNsYW1hdGlvbi1jaXJjbGUiXSwgImYwNmEiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyem0wLTE5MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjYgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il0KICAgIH07CiAgICBmYUV4Y2xhbWF0aW9uQ2lyY2xlID0gZmFDaXJjbGVFeGNsYW1hdGlvbjsKICAgIGZhVGF4aSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXhpIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NjYyLCAiY2FiIl0sICJmMWJhIiwgIk0xOTIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi04LjkgMGMtNDIgMC03OS4xIDI3LjMtOTEuNiA2Ny40bC0yMyA3My41QzE0LjUgMjE5LjEgMCAyNDMuOSAwIDI3MkwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMzIwIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTc2YzAtMjguMS0xNC41LTUyLjktMzYuNC02Ny4xbC0yMy03My41QzQ0MC4xIDkxLjMgNDAyLjkgNjQgMzYwLjkgNjRsLTguOSAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDB6TTE1MS4xIDEyOGwyMDkuOSAwYzE0IDAgMjYuNCA5LjEgMzAuNSAyMi41bDEzIDQxLjUtMjk2LjkgMCAxMy00MS41YzQuMi0xMy40IDE2LjUtMjIuNSAzMC41LTIyLjV6TTk2IDI3MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTI4OCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFDYWIgPSBmYVRheGk7CiAgICBmYVRleHRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZXh0LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInJlbW92ZS1mb3JtYXQiXSwgImY4N2QiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMMzIyLjcgMjU2LjkgMzY4LjIgOTYgNDcxIDk2IDQ2NSAxMjAuMmMtNC4zIDE3LjEgNi4xIDM0LjUgMjMuMyAzOC44czM0LjUtNi4xIDM4LjgtMjMuM2wxMS00NC4xQzU0NS42IDYxLjMgNTIyLjcgMzIgNDkxLjUgMzJsLTMxOSAwYy0xOS44IDAtMzcuMyAxMi4xLTQ0LjUgMzAuMWwtODctODd6TTE4MC40IDExNC41bDQuNi0xOC41IDExNi43IDAtMzAuOCAxMDktOTAuNS05MC41ek0yNDEgMzEwLjhMMjExLjMgNDE2IDE2MCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQyLjIgMCAxNS4xLTUzLjMtNTEuOS01MS45eiJdCiAgICB9OwogICAgZmFSZW1vdmVGb3JtYXQgPSBmYVRleHRTbGFzaDsKICAgIGZhUGVvcGxlUHVsbGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW9wbGUtcHVsbGluZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTM1IiwgIk04MCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzIgOS44IDAgMTguNS00LjQgMjQuNC0xMS4yTDgwLjQgNDg1LjNjMi45IDE3LjQgMTkuNCAyOS4yIDM2LjggMjYuM3MyOS4yLTE5LjQgMjYuMy0zNi44bC0yMC41LTEyMi43IDE1LjcgMCAzMCAxMzQuOWMzLjggMTcuMyAyMC45IDI4LjEgMzguMiAyNC4zczI4LjEtMjAuOSAyNC4zLTM4LjJsLTU3LjMtMjU4IDExNi4zIDUzLjhjLjUgLjMgMS4xIC41IDEuNiAuNyA4LjYgMy42IDE4IDMuMSAyNS45LS43IDMuNC0xLjYgNi42LTMuOSA5LjMtNi43IDMuMS0zLjIgNS41LTcgNy4xLTExLjQgLjEtLjMgLjItLjcgLjMtMWwyLjUtNy41YzUuNy0xNy4xIDE4LjMtMzAuOSAzNC43LTM4LjJsOC0zLjVjMS0uNCAxLjktLjggMi45LTEuMmwtMTYuOSA2My41Yy01LjYgMjEuMS0uMSA0My42IDE0LjcgNTkuN2w3MC43IDc3LjEgMjIgODguMWM0LjMgMTcuMSAyMS43IDI3LjYgMzguOCAyMy4zczI3LjYtMjEuNyAyMy4zLTM4LjhsLTIzLTkyLjFjLTEuOS03LjgtNS44LTE0LjktMTEuMi0yMC44bC00OS41LTU0IDE5LjMtNjUuNSA5LjYgMjNjNC40IDEwLjYgMTIuNSAxOS4zIDIyLjggMjQuNWwyNi43IDEzLjNjMTUuOCA3LjkgMzUgMS41IDQyLjktMTQuM3MxLjUtMzUtMTQuMy00Mi45bC0yMS40LTEwLjctMTUuMy0zNi44Yy0xNy4xLTQxLjEtNTcuMy02Ny45LTEwMS45LTY3LjktMjIuOCAwLTQ1LjMgNC44LTY2LjEgMTRsLTggMy41Yy0yNC40IDEwLjktNDQuNiAyOS01OC4xIDUxLjZMMTU3LjMgMTM2LjlDMTQ0LjcgMTMxIDEzMC45IDEyOCAxMTcgMTI4bC01MyAwek00NjQgOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2ek0zNDkuNyAzMzUuNmwtMjUgNjIuNC01OS40IDU5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMzcyLjMgNDQxYzQuNi00LjYgOC4yLTEwLjEgMTAuNi0xNi4xbDE0LjUtMzYuMi00MC43LTQ0LjRjLTIuNS0yLjctNC44LTUuNi03LTguNnoiXQogICAgfTsKICAgIGZhQmFja3dhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFja3dhcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5MTk0XSwgImYwNGEiLCAiTTIwNC4zIDQzLjFDMjE1LjkgMzIgMjMzIDI4LjkgMjQ3LjcgMzUuMlMyNzIgNTYgMjcyIDcybDAgMTM2LjMgMTcyLjMtMTY1LjFDNDU1LjkgMzIgNDczIDI4LjkgNDg3LjcgMzUuMlM1MTIgNTYgNTEyIDcybDAgMzY4YzAgMTYtOS42IDMwLjUtMjQuMyAzNi44cy0zMS44IDMuMi00My40LTcuOUwyNzIgMzAzLjcgMjcyIDQ0MGMwIDE2LTkuNiAzMC41LTI0LjMgMzYuOHMtMzEuOCAzLjItNDMuNC03LjlsLTE5Mi0xODRDNC41IDI3Ny4zIDAgMjY2LjkgMCAyNTZzNC41LTIxLjMgMTIuMy0yOC45bDE5Mi0xODR6Il0KICAgIH07CiAgICBmYUNhckJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjYXItY3Jhc2giXSwgImY1ZTEiLCAiTTIzMiAxNi4xbDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0ek0zMiAxNjguMWw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0ek0yODEuNSA3MC42YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDMzLjktMzMuOWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwTDI4MS41IDM2LjZjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em0tMTgxIDIxNWwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1Mi45IDE3NS40TDUwNSAyMTYuMmM2LjQgMS43IDExLjEgNy4zIDExLjggMTMuOWw3LjIgNzQtMjMxLjUtNjIgNDMuMi02MC41YzMuOS01LjQgMTAuNy03LjkgMTcuMi02LjJ6TTIyMy42IDIyOC41bC0yLjEgMi45Yy0yMS43IDUuNS0zOS45IDIyLjMtNDYuMSA0NS41LTQuMSAxNS41LTEyLjQgNDYuNC0yNC44IDkyLjdsLTguMyAzMC45Yy00LjYgMTcuMSA1LjYgMzQuNiAyMi42IDM5LjJsMTUuNSA0LjFjMTcuMSA0LjYgMzQuNi01LjYgMzkuMi0yMi42bDguMy0zMC45IDI3OC4yIDc0LjUtOC4zIDMwLjljLTQuNiAxNy4xIDUuNiAzNC42IDIyLjYgMzkuMmwxNS41IDQuMWMxNy4xIDQuNiAzNC42LTUuNiAzOS4yLTIyLjYgNC4xLTE1LjUgMTIuNC00Ni40IDI0LjgtOTIuN2w4LjMtMzAuOWM2LjItMjMuMi0xLjEtNDYuOC0xNy4yLTYyLjVsLS4zLTMuNi0xMC0xMDNjLTMuMi0zMy4yLTI2LjctNjAuOS01OC45LTY5LjVMMzY5LjUgMTEzLjZjLTMyLjItOC42LTY2LjQgMy42LTg1LjggMzAuOGwtNjAuMiA4NC4yem00OC43IDU3LjhhMzIgMzIgMCAxIDEgLTE2LjYgNjEuOCAzMiAzMiAwIDEgMSAxNi42LTYxLjh6bTIwOC4xIDg4LjlhMzIgMzIgMCAxIDEgNjEuOCAxNi42IDMyIDMyIDAgMSAxIC02MS44LTE2LjZ6Il0KICAgIH07CiAgICBmYUNhckNyYXNoID0gZmFDYXJCdXJzdDsKICAgIGZhTGluayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjc5LCAiY2hhaW4iXSwgImYwYzEiLCAiTTQxOS41IDk2Yy0xNi42IDAtMzIuNyA0LjUtNDYuOCAxMi43LTE1LjgtMTYtMzQuMi0yOS40LTU0LjUtMzkuNSAyOC4yLTI0IDY0LjEtMzcuMiAxMDEuMy0zNy4yIDg2LjQgMCAxNTYuNSA3MCAxNTYuNSAxNTYuNSAwIDQxLjUtMTYuNSA4MS4zLTQ1LjggMTEwLjZsLTcxLjEgNzEuMWMtMjkuMyAyOS4zLTY5LjEgNDUuOC0xMTAuNiA0NS44LTg2LjQgMC0xNTYuNS03MC0xNTYuNS0xNTYuNSAwLTEuNSAwLTMgLjEtNC41IC41LTE3LjcgMTUuMi0zMS42IDMyLjktMzEuMXMzMS42IDE1LjIgMzEuMSAzMi45YzAgLjkgMCAxLjggMCAyLjYgMCA1MS4xIDQxLjQgOTIuNSA5Mi41IDkyLjUgMjQuNSAwIDQ4LTkuNyA2NS40LTI3LjFsNzEuMS03MS4xYzE3LjMtMTcuMyAyNy4xLTQwLjkgMjcuMS02NS40IDAtNTEuMS00MS40LTkyLjUtOTIuNS05Mi41ek0yNzUuMiAxNzMuM2MtMS45LS44LTMuOC0xLjktNS41LTMuMS0xMi42LTYuNS0yNy0xMC4yLTQyLjEtMTAuMi0yNC41IDAtNDggOS43LTY1LjQgMjcuMUw5MS4xIDI1OC4yYy0xNy4zIDE3LjMtMjcuMSA0MC45LTI3LjEgNjUuNCAwIDUxLjEgNDEuNCA5Mi41IDkyLjUgOTIuNSAxNi41IDAgMzIuNi00LjQgNDYuNy0xMi42IDE1LjggMTYgMzQuMiAyOS40IDU0LjYgMzkuNS0yOC4yIDIzLjktNjQgMzcuMi0xMDEuMyAzNy4yLTg2LjQgMC0xNTYuNS03MC0xNTYuNS0xNTYuNSAwLTQxLjUgMTYuNS04MS4zIDQ1LjgtMTEwLjZsNzEuMS03MS4xYzI5LjMtMjkuMyA2OS4xLTQ1LjggMTEwLjYtNDUuOCA4Ni42IDAgMTU2LjUgNzAuNiAxNTYuNSAxNTYuOSAwIDEuMyAwIDIuNiAwIDMuOS0uNCAxNy43LTE1LjEgMzEuNi0zMi44IDMxLjJzLTMxLjYtMTUuMS0zMS4yLTMyLjhjMC0uOCAwLTEuNSAwLTIuMyAwLTMzLjctMTgtNjMuMy00NC44LTc5LjZ6Il0KICAgIH07CiAgICBmYUNoYWluID0gZmFMaW5rOwogICAgZmFCYWNrd2FyZFN0ZXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFja3dhcmQtc3RlcCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJzdGVwLWJhY2t3YXJkIl0sICJmMDQ4IiwgIk0zNjMgMzYuOGMtMTIuOS03LTI4LjctNi4zLTQxIDEuOEw2NCAyMDguMSA2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMlMwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ0LjEgMjU4IDE2OS42YzEyLjMgOC4xIDI4IDguOCA0MSAxLjhzMjEtMjAuNSAyMS0zNS4ybDAtMzY4YzAtMTQuNy04LjEtMjguMi0yMS0zNS4yeiJdCiAgICB9OwogICAgZmFTdGVwQmFja3dhcmQgPSBmYUJhY2t3YXJkU3RlcDsKICAgIGZhWCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ4IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTIwXSwgIjU4IiwgIk0zNzYuNiA4NC41YzExLjMtMTMuNiA5LjUtMzMuOC00LjEtNDUuMXMtMzMuOC05LjUtNDUuMSA0LjFMMTkyIDIwNiA1Ni42IDQzLjVDNDUuMyAyOS45IDI1LjEgMjguMSAxMS41IDM5LjRTLTMuOSA3MC45IDcuNCA4NC41TDE1MC4zIDI1NiA3LjQgNDI3LjVjLTExLjMgMTMuNi05LjUgMzMuOCA0LjEgNDUuMXMzMy44IDkuNSA0NS4xLTQuMUwxOTIgMzA2IDMyNy40IDQ2OC41YzExLjMgMTMuNiAzMS41IDE1LjQgNDUuMSA0LjFzMTUuNC0zMS41IDQuMS00NS4xTDIzMy43IDI1NiAzNzYuNiA4NC41eiJdCiAgICB9OwogICAgZmFDaXJjbGVVc2VyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMTQyLCAidXNlci1jaXJjbGUiXSwgImYyYmQiLCAiTTM5OSAzODQuMkMzNzYuOSAzNDUuOCAzMzUuNCAzMjAgMjg4IDMyMGwtNjQgMGMtNDcuNCAwLTg4LjkgMjUuOC0xMTEgNjQuMiAzNS4yIDM5LjIgODYuMiA2My44IDE0MyA2My44czEwNy44LTI0LjcgMTQzLTYzLjh6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAxNmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHoiXQogICAgfTsKICAgIGZhVXNlckNpcmNsZTIgPSBmYUNpcmNsZVVzZXIyOwogICAgZmFSZWN0YW5nbGVMaXN0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtbGlzdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsaXN0LWFsdCJdLCAiZjAyMiIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzg0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgNjR6bTk2IDI1NmEzMiAzMiAwIDEgMSAtNjQgMCAzMiAzMiAwIDEgMSA2NCAwem0tMzItOTZhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0xMjAtNTZsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUxpc3RBbHQyID0gZmFSZWN0YW5nbGVMaXN0MjsKICAgIGZhSGFuZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTMwNiwgOTk5NSwgImhhbmQtcGFwZXIiXSwgImYyNTYiLCAiTTI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIwOGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTE3NmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDI3MmMwIDEuNSAwIDMuMSAuMSA0LjZMNjcuNiAyODNjLTE2LTE1LjItNDEuMy0xNC42LTU2LjYgMS40Uy0zLjYgMzI1LjcgMTIuNCAzNDFMMTI0LjggNDQ4YzQzLjEgNDEuMSAxMDAuNCA2NCAxNjAgNjRsMTkuMiAwYzk3LjIgMCAxNzYtNzguOCAxNzYtMTc2bDAtMjA4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTEyYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMTc2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2YzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtMjA4eiJdCiAgICB9OwogICAgZmFIYW5kUGFwZXIyID0gZmFIYW5kMjsKICAgIGZhVmFuU2h1dHRsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2YW4tc2h1dHRsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NiwgInNodXR0bGUtdmFuIl0sICJmNWI2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDMzNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwuNCAwYzQgNDQuOSA0MS43IDgwIDg3LjYgODBzODMuNi0zNS4xIDg3LjYtODBsMTA0LjcgMGM0IDQ0LjkgNDEuNyA4MCA4Ny42IDgwIDQ2LjEgMCA4My45LTM1LjQgODcuNy04MC41IDMxLjctMy44IDU2LjMtMzAuOCA1Ni4zLTYzLjVsMC0xMDEuM2MwLTEzLjgtNC41LTI3LjMtMTIuOC0zOC40bC04MC0xMDYuN0M0NzEuMSA3My41IDQ1Mi4xIDY0IDQzMiA2NEw2NCA2NHpNNTA0IDIyNGwtMTIwIDAgMC05NiA0OCAwIDcyIDk2ek02NCAyMjRsMC05NiA5NiAwIDAgOTYtOTYgMHptMTYwIDBsMC05NiA5NiAwIDAgOTYtOTYgMHpNMzkyIDM5MmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwek0xNTIgMzUyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhU2h1dHRsZVZhbiA9IGZhVmFuU2h1dHRsZTsKICAgIGZhU3RhaXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YWlycyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMjg5IiwgIk0zODQgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTI4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmw5NiAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAwLTk2eiJdCiAgICB9OwogICAgZmFIb3JzZUhlYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9yc2UtaGVhZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2FiIiwgIk0wIDQ2NEwwIDMxNi45QzAgMjA4LjUgNjguMyAxMTEuOCAxNzAuNSA3NS42TDM0MC4yIDE1LjVjMjEuNC03LjYgNDMuOCA4LjMgNDMuOCAzMC45IDAgMTEtNS41IDIxLjItMTQuNiAyNy4zTDMzNiA5NmM0OC4xIDAgOTEuMiAyOS44IDEwOC4xIDc0LjlsNDguNiAxMjkuNWMxMS44IDMxLjQgNC4xIDY2LjgtMTkuNiA5MC41LTE2IDE2LTM3LjggMjUuMS02MC41IDI1LjFsLTMuNCAwYy0yNi4xIDAtNTAuOS0xMS42LTY3LjYtMzEuN2wtMzIuMy0zOC43Yy0xMS43IDQuMS0yNC4yIDYuNC0zNy4zIDYuNGwtLjEgMGMtNi4zIDAtMTIuNS0uNS0xOC42LTEuNS0zLjYtLjYtNy4yLTEuNC0xMC43LTIuM2wwIDBjLTI4LjktNy44LTUzLjEtMjYuOC02Ny44LTUyLjItNC40LTcuNy0xNC4yLTEwLjMtMjEuOS01LjhzLTEwLjMgMTQuMi01LjggMjEuOWMyNCA0MS41IDY4LjMgNzAgMTE5LjMgNzEuOWw0Ny4yIDcwLjhjNCA2LjEgNi4yIDEzLjIgNi4yIDIwLjQgMCAyMC4zLTE2LjUgMzYuOC0zNi44IDM2LjhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OHpNMzI4IDIyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYVZhdWx0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZhdWx0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyYzUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjQgMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwyNTYgMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0yNTYgMjU2YTY0IDY0IDAgMSAwIC0xMjggMCA2NCA2NCAwIDEgMCAxMjggMHpNNjQgMjU2YTEyOCAxMjggMCAxIDEgMjU2IDAgMTI4IDEyOCAwIDEgMSAtMjU2IDB6bTM4NC00OGMwIDE3LjgtOS43IDMzLjMtMjQgNDEuNmwwIDc4LjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC03OC40Yy0xNC4zLTguMy0yNC0yMy44LTI0LTQxLjYgMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OHoiXQogICAgfTsKICAgIGZhRHJ1bVN0ZWVscGFuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRydW0tc3RlZWxwYW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjU2YSIsICJNMjg4IDMyYzE1OS4xIDAgMjg4IDQ4IDI4OCAxMjhsMCAxOTJjMCA4MC0xMjguOSAxMjgtMjg4IDEyOFMwIDQzMiAwIDM1MkwwIDE2MEMwIDgwIDEyOC45IDMyIDI4OCAzMnpNNTI4IDE2MGMwLTkuOS04LTI5LjktNTUtNDkuOC0xOC42LTcuOS00MC45LTE0LjQtNjYtMTkuNGwtMjcuOCA0My42Yy03LjMgMTEuNS0xMS4yIDI0LjgtMTEuMiAzOC40IDAgMTcuNSA2LjQgMzQuNCAxOC4xIDQ3LjVsOS44IDExYzI5LjgtNS4yIDU1LjktMTIuNSA3Ny4yLTIxLjUgNDcuMS0xOS45IDU1LTM5LjkgNTUtNDkuOHpNMzQ5LjIgMjM3LjNjLTgtMjYuMi0zMi40LTQ1LjMtNjEuMi00NS4zcy01My4zIDE5LjEtNjEuMiA0NS4zYzE5LjQgMS43IDM5LjkgMi43IDYxLjIgMi43czQxLjgtLjkgNjEuMi0yLjd6TTE2OSA5MC44Yy0yNS4yIDUtNDcuNCAxMS42LTY2IDE5LjQtNDcuMSAxOS45LTU1IDM5LjktNTUgNDkuOHM4IDI5LjkgNTUgNDkuOGMyMS4zIDkgNDcuNCAxNi4zIDc3LjIgMjEuNWw5LjgtMTFjMTEuNi0xMy4xIDE4LjEtMzAgMTguMS00Ny41IDAtMTMuNi0zLjktMjYuOS0xMS4yLTM4LjRMMTY5IDkwLjh6bTU2LjMtOGMtLjkgNC4zLTEuNCA4LjctMS40IDEzLjIgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NGMwLTQuNS0uNS05LTEuNC0xMy4yLTE5LjgtMS44LTQwLjgtMi44LTYyLjYtMi44cy00Mi44IDEtNjIuNiAyLjh6Il0KICAgIH07CiAgICBmYVRodW1ic1VwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aHVtYnMtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgwNzcsIDYxNTc1XSwgImYxNjQiLCAiTTgwIDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDI1NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNDggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJMMCAxOTJjMC0xNy43IDE0LjMtMzIgMzItMzJsNDggMHpNMjcwLjYgMTZDMjk3LjkgMTYgMzIwIDM4LjEgMzIwIDY1LjRsMCA0LjJjMCA2LjgtMS4zIDEzLjYtMy44IDE5LjlMMjg4IDE2MCA0NDggMTYwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTkuNy0xMS45IDM2LjYtMjguOSA0NCAxNyA3LjQgMjguOSAyNC4zIDI4LjkgNDQgMCAyMy40LTE2LjggNDIuOS0zOSA0Ny4xIDQuNCA3LjMgNyAxNS44IDcgMjQuOSAwIDIyLjItMTUgNDAuOC0zNS40IDQ2LjMgMi4yIDUuNSAzLjQgMTEuNSAzLjQgMTcuNyAwIDI2LjUtMjEuNSA0OC00OCA0OGwtODcuOSAwYy0zNi4zIDAtNzEuNi0xMi40LTk5LjktMzUuMUwxODQgNDM1LjJjLTE1LjItMTIuMS0yNC0zMC41LTI0LTUwbDAtMTg2LjZjMC0xNC45IDMuNS0yOS42IDEwLjEtNDIuOUwyMjYuMyA0My4zQzIzNC43IDI2LjYgMjUxLjggMTYgMjcwLjYgMTZ6Il0KICAgIH07CiAgICBmYVN0YW1wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YW1wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YmYiLCAiTTMxMiAyMDEuOGMwLTE3LjQgOS4yLTMzLjIgMTkuOS00NyAxMi42LTE2LjIgMjAuMS0zNi42IDIwLjEtNTguOCAwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmMwIDIyLjEgNy41IDQyLjUgMjAuMSA1OC44IDEwLjcgMTMuOCAxOS45IDI5LjYgMTkuOSA0NyAwIDI5LjktMjQuMyA1NC4yLTU0LjIgNTQuMkwxMTIgMjU2Yy02MS45IDAtMTEyIDUwLjEtMTEyIDExMiAwIDI2LjUgMjEuNSA0OCA0OCA0OGw0MTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OCAwLTYxLjktNTAuMS0xMTItMTEyLTExMmwtMzMuOCAwYy0yOS45IDAtNTQuMi0yNC4zLTU0LjItNTQuMnpNNTYgNDY0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwMCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDU2IDQ2NHoiXQogICAgfTsKICAgIGZhTWVub3JhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtZW5vcmFoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY2NzYiLCAiTTIwLjggNy40QzIyLjggMi45IDI3LjEgMCAzMiAwczkuMiAyLjkgMTEuMiA3LjRMNjEuMyA0OS43YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMUw2NCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDgxLjcgMCA2NGwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMMjAuOCA3LjR6bTk2IDBDMTE4LjggMi45IDEyMy4xIDAgMTI4IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzk2IDgxLjcgOTYgNjRsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xTDExNi44IDcuNHptNzcuOCA0Mi40TDIxMi44IDcuNEMyMTQuOCAyLjkgMjE5LjEgMCAyMjQgMHM5LjIgMi45IDExLjIgNy40bDE4LjIgNDIuNGMxLjggNC4xIDIuNyA4LjYgMi43IDEzLjFsMCAxLjJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xLjJjMC00LjUgLjktOC45IDIuNy0xMy4xek0zMDguOCA3LjRDMzEwLjggMi45IDMxNS4xIDAgMzIwIDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMUwzMDguOCA3LjR6bTc3LjggNDIuNEw0MDQuOCA3LjRDNDA2LjggMi45IDQxMS4xIDAgNDE2IDBzOS4yIDIuOSAxMS4yIDcuNGwxOC4yIDQyLjRjMS44IDQuMSAyLjcgOC42IDIuNyAxMy4xbDAgMS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMS4yYzAtNC41IC45LTguOSAyLjctMTMuMXpNNTAwLjggNy40QzUwMi44IDIuOSA1MDcuMSAwIDUxMiAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjFMNTAwLjggNy40em03Ny44IDQyLjRMNTk2LjggNy40QzU5OC44IDIuOSA2MDMuMSAwIDYwOCAwczkuMiAyLjkgMTEuMiA3LjRsMTguMiA0Mi40YzEuOCA0LjEgMi43IDguNiAyLjcgMTMuMWwwIDEuMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEuMmMwLTQuNSAuOS04LjkgMi43LTEzLjF6TTMyIDEyOGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMCAwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTYwIDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMjhjMCA1My00MyA5Ni05NiA5NmwtMTkyIDAgMCA2NCAxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTI4IDAgMC02NC0xOTIgMGMtNTMgMC05Ni00My05Ni05NkwwIDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnptOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEyOC02NCAwIDAtMTI4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem05NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTI4LTY0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxMjgtNjQgMCAwLTEyOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQ2hpbGRyZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hpbGRyZW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRlMSIsICJNMTYwLjUgMGE2NCA2NCAwIDEgMSAwIDEyOCA2NCA2NCAwIDEgMSAwLTEyOHptLTcyIDQ4MGwwLTgwLTE3LjggMGMtMTAuOSAwLTE4LjYtMTAuNy0xNS4yLTIxLjFMODYuNyAyODUuNSA1OCAzMjMuM2MtMTAuNyAxNC4xLTMwLjggMTYuOC00NC44IDYuMlMtMy43IDI5OC43IDcgMjg0LjdMNjUuOSAyMDdjMjIuNC0yOS42IDU3LjUtNDcgOTQuNi00N3M3Mi4yIDE3LjQgOTQuNiA0N0wzMTQgMjg0LjdjMTAuNyAxNC4xIDcuOSAzNC4yLTYuMiA0NC44cy0zNC4yIDcuOS00NC44LTYuMmwtMjguNy0zNy44IDMxLjEgOTMuNGMzLjUgMTAuNC00LjMgMjEuMS0xNS4yIDIxLjFsLTE3LjggMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtODAtMTYgMCAwIDgwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyek00ODAuNSAwYTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4em0tOCAzODRsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE3OS41LTEyLjkgMjAuNWMtOS40IDE1LTI5LjIgMTkuNC00NC4xIDEwcy0xOS40LTI5LjItMTAtNDQuMWw1MS43LTgyLjFjMTcuNi0yNy45IDQ4LjMtNDQuOSA4MS4yLTQ0LjlsMTIuMyAwYzMzIDAgNjMuNyAxNi45IDgxLjIgNDQuOUw2MTkuNiAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBsLTEyLjktMjAuNSAwIDE3OS41YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMTYgMHoiXQogICAgfTsKICAgIGZhQ2hhcnRMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYXJ0LWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGluZS1jaGFydCJdLCAiZjIwMSIsICJNNjQgNjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0MDBjMCA0NC4yIDM1LjggODAgODAgODBsNDAwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgNDE2Yy04LjggMC0xNi03LjItMTYtMTZMNjQgNjR6bTQwNi42IDg2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMzIwIDIxMC43IDI2Mi42IDE1My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNzMuNC03My40IDU3LjQgNTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4eiJdCiAgICB9OwogICAgZmFMaW5lQ2hhcnQgPSBmYUNoYXJ0TGluZTsKICAgIGZhU3F1YXJlRW52ZWxvcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWVudmVsb3BlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImVudmVsb3BlLXNxdWFyZSJdLCAiZjE5OSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjA5LjEgMjY3LjlMMTA4LjQgMjA3LjRjLTcuNy00LjYtMTIuNC0xMi45LTEyLjQtMjEuOSAwLTE0LjEgMTEuNC0yNS41IDI1LjUtMjUuNWwyMDQuOSAwYzE0LjEgMCAyNS41IDExLjQgMjUuNSAyNS41IDAgOS00LjcgMTcuMy0xMi40IDIxLjlMMjM4LjkgMjY3LjljLTQuNSAyLjctOS42IDQuMS0xNC45IDQuMXMtMTAuNC0xLjQtMTQuOS00LjF6TTM1MiAyMzcuM2wwIDgyLjdjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTgyLjcgOTYuNyA1OEMyMDIuMSAzMDEgMjEzIDMwNCAyMjQgMzA0czIxLjktMyAzMS4zLTguN2w5Ni43LTU4eiJdCiAgICB9OwogICAgZmFFbnZlbG9wZVNxdWFyZSA9IGZhU3F1YXJlRW52ZWxvcGU7CiAgICBmYUJhblNtb2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFuLXNtb2tpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg2ODUsICJzbW9raW5nLWJhbiJdLCAiZjU0ZCIsICJNOTkuNSAxNDQuOGw3OS4yIDc5LjItNTAuNyAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDE0Ni43IDAgOTIuNSA5Mi41Yy0zMS40IDIyLjQtNjkuOCAzNS41LTExMS4yIDM1LjUtMTA2IDAtMTkyLTg2LTE5Mi0xOTIgMC00MS41IDEzLjEtNzkuOSAzNS41LTExMS4yek0zMzMuMyAyODhsLTMyLTMyIDgyLjcgMCAwIDMyLTUwLjcgMHptMzIgMzJsMTguNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMjY5LjMgMjI0IDE0NC44IDk5LjVjMzEuNC0yMi40IDY5LjgtMzUuNSAxMTEuMi0zNS41IDEwNiAwIDE5MiA4NiAxOTIgMTkyIDAgNDEuNS0xMy4xIDc5LjktMzUuNSAxMTEuMkwzNjUuMyAzMjB6TTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNzIgOTZjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnM3LjIgMTYgMTYgMTYgMTYtNy4yIDE2LTE2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzLTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhU21va2luZ0JhbiA9IGZhQmFuU21va2luZzsKICAgIGZhVHJ1Y2tGcm9udCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cnVjay1mcm9udCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMmI3IiwgIk0wIDExMkMwIDY3LjggMzUuOCAzMiA4MCAzMmwyODggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI1NmMwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzItMTkyIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OEMxMi42IDQxNy40IDAgMzk0LjIgMCAzNjhMMCAxMTJ6bTk2IDgwbDAgNjQgMjU2IDAgMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0zMiAxNjBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjI0IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQnVpbGRpbmcyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI3OTcwLCA2MTY4N10sICJmMWFkIiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFCdWxsc2V5ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWxsc2V5ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTQwIiwgIk00NDggMjU2YTE5MiAxOTIgMCAxIDAgLTM4NCAwIDE5MiAxOTIgMCAxIDAgMzg0IDB6TTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiA4MGE4MCA4MCAwIDEgMCAwLTE2MCA4MCA4MCAwIDEgMCAwIDE2MHptMC0yMjRhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4ek0yMjQgMjU2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYUFycm93TGVmdExvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctbGVmdC1sb25nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvbmctYXJyb3ctbGVmdCJdLCAiZjE3NyIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDU0NCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQzNC43IDAgNzMuNC03My40YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dMZWZ0ID0gZmFBcnJvd0xlZnRMb25nOwogICAgZmFDaGVzc1Jvb2syID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZXNzLXJvb2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIwXSwgImY0NDciLCAiTTAgMzJMMCAxMzMuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0w2NCAyMjQgNjQgMzg0IDcuOCA0NTQuM0MyLjcgNDYwLjYgMCA0NjguNCAwIDQ3Ni41IDAgNDk2LjEgMTUuOSA1MTIgMzUuNSA1MTJsMzEyLjkgMGMxOS42IDAgMzUuNS0xNS45IDM1LjUtMzUuNSAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtNTYuMi03MC4zIDAtMTYwIDQ1LjMtNDUuM2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDM4NCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi00OCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJMMTc2IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItNDggMCAwLTMyQzk2IDE0LjMgODEuNyAwIDY0IDBMMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJ6Il0KICAgIH07CiAgICBmYUJsZW5kZXJQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJibGVuZGVyLXBob25lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2YjYiLCAiTTE1MS40IDEzLjJjMTAuMiA1LjggMTQuNSAxOC40IDEwIDI5LjNMMTM4LjIgOTguOGMtMy45IDkuNi0xMy43IDE1LjQtMjQgMTQuNGwtMjAuMi0yQzc4LjcgMTUyLjkgNzggMTk4LjkgOTEuOSAyNDEuMWwyMi40LTIuMmMxMC4zLTEgMjAgNC44IDI0IDE0LjRsMjMuMiA1Ni4zYzQuNSAxMC45IC4yIDIzLjQtMTAgMjkuM2wtMi45IDEuNmMtMzMuNiAxOS4yLTgxLjcgMTYuMi0xMDYuMi0yMS42LTU2LjMtODYuNi01Ni4zLTE5OS4xIDAtMjg1LjcgMjQuNi0zNy43IDcyLjctNDAuNyAxMDYuMi0yMS42bDIuOSAxLjZ6TTIyNCAzMzZMMTkzLjcgMTcuNUMxOTIuOCA4LjEgMjAwLjIgMCAyMDkuNiAwbDMyNCAwYzIxLjMgMCAzNi42IDIwLjMgMzAuOCA0MC44TDU1My4xIDgwIDQ0MCA4MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw5OS40IDAtMTguMyA2NC04MS4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNjcuNCAwLTI3LjQgOTYtMjU2IDB6bTggNDhsMjQwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtMjQwIDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDB6bTEyMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6Il0KICAgIH07CiAgICBmYUFycm93VHVyblVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXR1cm4tdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibGV2ZWwtdXAiXSwgImYxNDgiLCAiTTMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzUzIDAgOTYtNDMgOTYtOTZsMC0zMDYuNyA3My40IDczLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtMTI4LTEyOGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTEyOCAxMjhjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMMTYwIDEwOS4zIDE2MCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDB6Il0KICAgIH07CiAgICBmYUxldmVsVXAgPSBmYUFycm93VHVyblVwOwogICAgZmFCaWN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJpY3ljbGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjg2OTBdLCAiZjIwNiIsICJNMzMxLjcgNDMuM0MzMzYgMzYuMyAzNDMuNyAzMiAzNTIgMzJsMTA0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTY1LjYgMCA3Mi4yIDE0OC40YzEwLjctMi45IDIxLjktNC40IDMzLjQtNC40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4cy01Ny4zIDEyOC0xMjggMTI4LTEyOC01Ny4zLTEyOC0xMjhjMC00MiAyMC4yLTc5LjIgNTEuNC0xMDIuNmwtMjAuNC00MS45LTczLjUgMTQ3Yy0yLjMgNC44LTYuMyA4LjgtMTEuNCAxMS4yLS42IC4zLTEuMiAuNS0xLjggLjctMi45IDEuMS01LjkgMS42LTguOSAxLjVMMjcxIDM2OGMtNy45IDYzLjEtNjEuNyAxMTItMTI3IDExMi03MC43IDAtMTI4LTU3LjMtMTI4LTEyOFM3My4zIDIyNCAxNDQgMjI0YzEwLjggMCAyMS4yIDEuMyAzMS4yIDMuOGwyOC41LTU2LjktMTEuNS0yNi45LTQwLjIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw1NiAwYzkuNiAwIDE4LjMgNS43IDIyLjEgMTQuNWwxNC4zIDMzLjUgMTIzLjcgMC0zNy43LTc3LjVjLTMuNi03LjQtMy4yLTE2LjIgMS4yLTIzLjJ6TTIyOC41IDIyOC43bC00NS42IDkxLjMgODQuOCAwLTM5LjEtOTEuM3pNMzA1LjcgMjg3bDQ3LjUtOTUtODguMiAwIDQwLjcgOTV6bTE2OC43IDc1LjVsLTI5LjctNjFjLTEyLjggMTMtMjAuNyAzMC44LTIwLjcgNTAuNSAwIDM5LjggMzIuMiA3MiA3MiA3MnM3Mi0zMi4yIDcyLTcyLTMyLjItNzItNzItNzJjLTIuNyAwLTUuNSAuMi04LjEgLjVsMjkuNyA2MWM1LjggMTEuOSAuOCAyNi4zLTExLjEgMzIuMXMtMjYuMyAuOC0zMi4xLTExLjF6TTE0OS4yIDM2OGMtMjAuMiAwLTMzLjQtMjEuMy0yNC4zLTM5LjRsMjQuMi00OC41Yy0xLjctLjEtMy40LS4yLTUuMS0uMi0zOS44IDAtNzIgMzIuMi03MiA3MnMzMi4yIDcyIDcyIDcyYzM0LjMgMCA2Mi45LTIzLjkgNzAuMi01NmwtNjUgMHoiXQogICAgfTsKICAgIGZhQ2lyY2xlQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS1kb3duIl0sICJmMGFiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjM5IDM3N2wtODAtODBjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwzOSAzOSAwLTE1MC4xYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNTAuMSAzOS0zOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTgwIDgwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhQXJyb3dDaXJjbGVEb3duID0gZmFDaXJjbGVBcnJvd0Rvd247CiAgICBmYUdlYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk4ODEsICJjb2ciXSwgImYwMTMiLCAiTTE5NS4xIDkuNUMxOTguMS01LjMgMjExLjItMTYgMjI2LjQtMTZsNTkuOCAwYzE1LjIgMCAyOC4zIDEwLjcgMzEuMyAyNS41TDMzMiA3OS41YzE0LjEgNiAyNy4zIDEzLjcgMzkuMyAyMi44bDY3LjgtMjIuNWMxNC40LTQuOCAzMC4yIDEuMiAzNy44IDE0LjRsMjkuOSA1MS44YzcuNiAxMy4yIDQuOSAyOS44LTYuNSAzOS45TDQ0NyAyMzMuM2MuOSA3LjQgMS4zIDE1IDEuMyAyMi43cy0uNSAxNS4zLTEuMyAyMi43bDUzLjQgNDcuNWMxMS40IDEwLjEgMTQgMjYuOCA2LjUgMzkuOWwtMjkuOSA1MS44Yy03LjYgMTMuMS0yMy40IDE5LjItMzcuOCAxNC40bC02Ny44LTIyLjVjLTEyLjEgOS4xLTI1LjMgMTYuNy0zOS4zIDIyLjhsLTE0LjQgNjkuOWMtMy4xIDE0LjktMTYuMiAyNS41LTMxLjMgMjUuNWwtNTkuOCAwYy0xNS4yIDAtMjguMy0xMC43LTMxLjMtMjUuNWwtMTQuNC02OS45Yy0xNC4xLTYtMjcuMi0xMy43LTM5LjMtMjIuOEw3My41IDQzMi4zYy0xNC40IDQuOC0zMC4yLTEuMi0zNy44LTE0LjRMNS44IDM2Ni4xYy03LjYtMTMuMi00LjktMjkuOCA2LjUtMzkuOWw1My40LTQ3LjVjLS45LTcuNC0xLjMtMTUtMS4zLTIyLjdzLjUtMTUuMyAxLjMtMjIuN0wxMi4zIDE4NS44Yy0xMS40LTEwLjEtMTQtMjYuOC02LjUtMzkuOUwzNS43IDk0LjFjNy42LTEzLjIgMjMuNC0xOS4yIDM3LjgtMTQuNGw2Ny44IDIyLjVjMTIuMS05LjEgMjUuMy0xNi43IDM5LjMtMjIuOEwxOTUuMSA5LjV6TTI1Ni4zIDMzNmE4MCA4MCAwIDEgMCAtLjYtMTYwIDgwIDgwIDAgMSAwIC42IDE2MHoiXQogICAgfTsKICAgIGZhQ29nID0gZmFHZWFyOwogICAgZmFNYXJzQW5kVmVudXNCdXJzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJzLWFuZC12ZW51cy1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTIzIiwgIk00NjQtMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzQuNyAwLTYzIDYzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2IDAgODYuMyA2Mi4xIDE1OC4xIDE0NCAxNzMuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtMzctMTEuNC03MS40LTMxLTk5LjhsNjMtNjMgMCAzNC43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMTJjMC0xNy43LTE0LjMtMzItMzItMzJMNDk2LTY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMzY4IDk2YTExMiAxMTIgMCAxIDEgMCAyMjQgMTEyIDExMiAwIDEgMSAwLTIyNHpNMTkwLjktMjEuOUMxODguNC0yOCAxODIuNi0zMiAxNzYtMzJzLTEyLjQgNC0xNC45IDEwLjFsLTI5LjQgNzQtNzYuMi0yMy4xYy02LjMtMS45LTEzLjEgLjItMTcuMiA1LjNTMzMuOCA0Ni41IDM3IDUyLjJsMzkuNSA2OS4xLTY1LjYgNDUuMWMtNS40IDMuNy04IDEwLjMtNi41IDE2LjdzNi43IDExLjIgMTMuMSAxMi4ybDc4LjcgMTIuMi01LjYgNzkuNGMtLjUgNi41IDMuMSAxMi43IDkgMTUuNXMxMi45IDEuOCAxNy44LTIuNkwxNTIuMSAyNjhjLTUuMy0xOS4xLTguMS0zOS4yLTguMS02MCAwLTY1LjQgMjgtMTI0LjIgNzIuNi0xNjUuMUwxOTAuOS0yMS45eiJdCiAgICB9OwogICAgZmFPdHRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJvdHRlciIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyOTQ0Nl0sICJmNzAwIiwgIk0xODEuNSAxOTcuMWwxMi45IDYuNGM1LjkgMyAxMi40IDQuNSAxOS4xIDQuNSAyMy41IDAgNDIuNi0xOS4xIDQyLjYtNDIuNmwwLTIxLjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTY0IDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjEuNGMwIDIzLjUgMTkuMSA0Mi42IDQyLjYgNDIuNiA2LjYgMCAxMy4xLTEuNSAxOS4xLTQuNSA5LjMtNC43IDE2LjQtOC4yIDIxLjItMTAuNkwxMzUuMSAxODVjLTQuNS0zLTcuMS04LTcuMS0xMy4zbDAtMy43YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAzLjdjMCA1LjMtMi43IDEwLjMtNy4xIDEzLjNsLTExLjggNy45IDguNCA0LjJ6bS04LjYgNDkuNGwtMTIuOS02LjQtMTIuOSA2LjRjLTEyLjYgNi4zLTI2LjUgOS42LTQwLjUgOS42LTMuNiAwLTcuMS0uMi0xMC42LS42bDAgLjZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwxNjAgMCAwLTY0YzAtMjMuNyAxMi45LTQ0LjQgMzItNTUuNCA5LjQtNS40IDIwLjMtOC42IDMyLTguNmwwLTE2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4IDguOCAwIDE2IDcuMiAxNiAxNmwwIDk2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC05OS43YzAtNDguMi0zMC44LTkxLTc2LjYtMTA2LjNsLTguNS0yLjhjLTgtMi43LTEyLjYtMTEuMS0xMC40LTE5LjNzMTAuMy0xMy4yIDE4LjYtMTEuNmwxOS45IDRDNTc2IDg2LjEgNjQwIDE2NC4yIDY0MCAyNTQuOWwwIDEuMSAwIDBjMCAxMjMuNy0xMDAuMyAyMjQtMjI0IDIyNGwtMTYwLjYgMEMxMzIgNDgwIDMyIDM4MCAzMiAyNTYuNmwwLTM5LjhjLTEwLjEtMTQuNi0xNi0zMi4zLTE2LTUxLjRsMC0yMS40IDAtMS40QzYuNyAxMzkuMyAwIDEzMC41IDAgMTIwIDAgMTA2LjcgMTAuNyA5NiAyNCA5NmwyLjggMEM0NC44IDU4LjIgODMuMyAzMiAxMjggMzJsNjQgMGM0NC43IDAgODMuMiAyNi4yIDEwMS4yIDY0bDIuOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTAuNS02LjcgMTkuMy0xNiAyMi42bDAgMS40IDAgMjEuNGMwIDEuNCAwIDIuOC0uMSA0LjMgMTItNi4yIDI1LjctOS42IDQwLjEtOS42bDggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDggNTYuNCAwYy0xNS4yIDE3LTI0LjQgMzkuNC0yNC40IDY0bC0zMiAwYy00Mi4zIDAtNzguMi0yNy40LTkxLTY1LjMtNS4xIC45LTEwLjMgMS4zLTE1LjYgMS4zLTE0LjEgMC0yNy45LTMuMy00MC41LTkuNnpNOTYgMTI4YTE2IDE2IDAgMSAxIDAgMzIgMTYgMTYgMCAxIDEgMC0zMnptMTEyIDE2YTE2IDE2IDAgMSAxIDMyIDAgMTYgMTYgMCAxIDEgLTMyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZUNoZXZyb25MZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1jaGV2cm9uLWxlZnQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtbGVmdCJdLCAiZjEzNyIsICJNNTEyIDI1NmEyNTYgMjU2IDAgMSAwIC01MTIgMCAyNTYgMjU2IDAgMSAwIDUxMiAwek0yNzEgMTM1YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtODcgODcgODcgODdjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxNjcgMjczYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOUwyNzEgMTM1eiJdCiAgICB9OwogICAgZmFDaGV2cm9uQ2lyY2xlTGVmdCA9IGZhQ2lyY2xlQ2hldnJvbkxlZnQ7CiAgICBmYUNpcmNsZVF1ZXN0aW9uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcXVlc3Rpb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjEwOCwgInF1ZXN0aW9uLWNpcmNsZSJdLCAiZjA1OSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTAtMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgNDcuMi0zNiA2Ny4yLTU2IDc0LjVsMCAzLjhjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC04LjFjMC0yMC41IDE0LjgtMzUuMiAzMC4xLTQwLjIgNi40LTIuMSAxMy4yLTUuNSAxOC4yLTEwLjMgNC4zLTQuMiA3LjctMTAgNy43LTE5LjYgMC0xNy43LTE0LjMtMzItMzItMzJ6TTIyNCAzNjhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhUXVlc3Rpb25DaXJjbGUyID0gZmFDaXJjbGVRdWVzdGlvbjI7CiAgICBmYVdhbGtpZVRhbGtpZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3YWxraWUtdGFsa2llIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY4ZWYiLCAiTTg4LTMyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNzIgNDggMGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDMyIDBjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwLjljMCA5LjktMi4zIDE5LjctNi44IDI4LjZsLTIwLjIgNDAuNGMtMy4zIDYuNy01LjEgMTQtNS4xIDIxLjVsMCA4NC43YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC04NC43YzAtNy41LTEuNy0xNC44LTUuMS0yMS41TDYuOCAzMDEuNUMyLjMgMjkyLjYgMCAyODIuOCAwIDI3Mi45TDAgMTEyQzAgODUuNSAyMS41IDY0IDQ4IDY0bDE2IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMzIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYVVzZXJHcm91cCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdyb3VwIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTAxLCAidXNlci1mcmllbmRzIl0sICJmNTAwIiwgIk02NCAxMjhhMTEyIDExMiAwIDEgMSAyMjQgMCAxMTIgMTEyIDAgMSAxIC0yMjQgMHpNMCA0NjRjMC05Ny4yIDc4LjgtMTc2IDE3Ni0xNzZzMTc2IDc4LjggMTc2IDE3NmwwIDZjMCAyMy4yLTE4LjggNDItNDIgNDJMNDIgNTEyYy0yMy4yIDAtNDItMTguOC00Mi00MmwwLTZ6TTQzMiA2NGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptMCAyNDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDRsMCAyMi40YzAgMjMtMTguNiA0MS42LTQxLjYgNDEuNmwtMTQ0LjggMGM2LjYtMTIuNSAxMC40LTI2LjggMTAuNC00MmwwLTZjMC01MS41LTE3LjQtOTguOS00Ni41LTEzNi43IDIyLjYtMTQuNyA0OS42LTIzLjMgNzguNS0yMy4zeiJdCiAgICB9OwogICAgZmFVc2VyRnJpZW5kcyA9IGZhVXNlckdyb3VwOwogICAgZmFIb3VzZUNoaW1uZXkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY2hpbW5leSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYzNDk5LCAiaG9tZS1sZyJdLCAiZTNhZiIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTI0MCAzMjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTYgMTI4IDAgMC05NmMwLTI2LjUtMjEuNS00OC00OC00OGwtMzIgMHoiXQogICAgfTsKICAgIGZhSG9tZUxnID0gZmFIb3VzZUNoaW1uZXk7CiAgICBmYVJpZ2h0RnJvbUJyYWNrZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmlnaHQtZnJvbS1icmFja2V0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNpZ24tb3V0LWFsdCJdLCAiZjJmNSIsICJNNTA1IDI3M2M5LjQtOS40IDkuNC0yNC42IDAtMzMuOUwzNjEgOTVjLTYuOS02LjktMTcuMi04LjktMjYuMi01LjJTMzIwIDEwMi4zIDMyMCAxMTJsMCA4MC0xMTIgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMTIgMCAwIDgwYzAgOS43IDUuOCAxOC41IDE0LjggMjIuMnMxOS4zIDEuNyAyNi4yLTUuMkw1MDUgMjczek0xNjAgOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMOTYgMzJDNDMgMzIgMCA3NSAwIDEyOEwwIDM4NGMwIDUzIDQzIDk2IDk2IDk2bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDB6Il0KICAgIH07CiAgICBmYVNpZ25PdXRBbHQgPSBmYVJpZ2h0RnJvbUJyYWNrZXQ7CiAgICBmYUZpbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgxOTYsIDEyODQ1OSwgNjE0NjJdLCAiZjE1YiIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnoiXQogICAgfTsKICAgIGZhUGxhbmVTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlMDY5IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC0xODMuNC0xODMuNCA3LjEtNy43IDEyNy4zIDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZzLTI1LjEtNTYtNTYtNTZMMzkyLjcgMjAwIDIzMy41IDI2LjRDMjI3LjUgMTkuOCAyMTguOSAxNiAyMDkuOSAxNmwtNDMuNyAwYy0xMC45IDAtMTguNiAxMC43LTE1LjIgMjEuMUwxNzUuMSAxMDkuMiA0MS0yNC45ek0xMzAuMiAyMDBsLTI0LjYgMC01Mi44LTY2Yy0zLTMuOC03LjYtNi0xMi41LTZsLTE5LjggMGMtMTAuNCAwLTE4IDkuOC0xNS41IDE5LjlMMzIgMjU2IDUgMzY0LjFDMi40IDM3NC4yIDEwLjEgMzg0IDIwLjUgMzg0bDE5LjggMGM0LjkgMCA5LjUtMi4yIDEyLjUtNmw1Mi44LTY2IDk5LjcgMC01NC4zIDE2Mi45Yy0zLjUgMTAuNCA0LjMgMjEuMSAxNS4yIDIxLjFsNDMuNyAwYzkgMCAxNy41LTMuOCAyMy42LTEwLjRMMzIwLjcgMzkwLjUgMTMwLjIgMjAweiJdCiAgICB9OwogICAgZmFDbG91ZFNob3dlcnNIZWF2eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zaG93ZXJzLWhlYXZ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY3NDAiLCAiTTk2IDMyMGMtNTMgMC05Ni00My05Ni05NiAwLTQyLjUgMjcuNi03OC42IDY1LjktOTEuMi0xLjMtNi43LTEuOS0xMy43LTEuOS0yMC44IDAtNjEuOSA1MC4xLTExMiAxMTItMTEyIDQzLjEgMCA4MC41IDI0LjMgOTkuMiA2MCAxNC43LTE3LjEgMzYuNS0yOCA2MC44LTI4IDQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgNS41LS42IDEwLjgtMS42IDE2IC41IDAgMS4xIDAgMS42IDAgNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZMOTYgMzIwem02LjggNzkuNmwtMzIgOTZDNjYuNiA1MDguMiA1MyA1MTUgNDAuNCA1MTAuOFMyMSA0OTMgMjUuMiA0ODAuNGwzMi05NkM2MS40IDM3MS44IDc1IDM2NSA4Ny42IDM2OS4yUzEwNyAzODcgMTAyLjggMzk5LjZ6bTEyMCAwbC0zMiA5NmMtNC4yIDEyLjYtMTcuOCAxOS40LTMwLjQgMTUuMlMxNDEgNDkzIDE0NS4yIDQ4MC40bDMyLTk2YzQuMi0xMi42IDE3LjgtMTkuNCAzMC40LTE1LjJTMjI3IDM4NyAyMjIuOCAzOTkuNnptMTEyIDBsLTMyIDk2Yy00LjIgMTIuNi0xNy44IDE5LjQtMzAuNCAxNS4yUzI1MyA0OTMgMjU3LjIgNDgwLjRsMzItOTZjNC4yLTEyLjYgMTcuOC0xOS40IDMwLjQtMTUuMlMzMzkgMzg3IDMzNC44IDM5OS42em0xMjAgMGwtMzIgOTZjLTQuMiAxMi42LTE3LjggMTkuNC0zMC40IDE1LjJTMzczIDQ5MyAzNzcuMiA0ODAuNGwzMi05NmM0LjItMTIuNiAxNy44LTE5LjQgMzAuNC0xNS4yUzQ1OSAzODcgNDU0LjggMzk5LjZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkZhbGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWZhbGxpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU0NiIsICJNMzIwIDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNS40YzAgNDUtMjMuNiA4Ni42LTYyLjEgMTA5LjhsLTQuNiAyLjhDMTMxLjQgMTg0LjcgOTYgMjQ3LjEgOTYgMzE0LjZMOTYgMzg0YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02OS40YzAtMTYuNyAzLjMtMzMgOS40LTQ4TDM1OS4yIDUwMC4yYzExLjEgMTMuNyAzMS4zIDE1LjggNDUgNC43czE1LjgtMzEuMyA0LjctNDVMMjk1LjIgMzIwIDQwMCAzMjAgNDM4LjQgMzcxLjJjMTAuNiAxNC4xIDMwLjcgMTcgNDQuOCA2LjRzMTctMzAuNyA2LjQtNDQuOGwtNDMuMi01Ny42QzQzNy4zIDI2My4xIDQyMy4xIDI1NiA0MDggMjU2bC04OSAwLTYyLjktNzUuNWM0MC4zLTM2IDYzLjktODcuOSA2My45LTE0My4xbDAtNS40ek0xMDQgMTQ0YTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyeiJdCiAgICB9OwogICAgZmFUdXJuRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJuLWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMDU0OSwgImxldmVsLWRvd24tYWx0Il0sICJmM2JlIiwgIk0xNjkuNCA1MDIuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMzMi45IDMyMCAzMjAgMzIwbC02NCAwIDAtMTYwQzI1NiA3MS42IDE4NC40IDAgOTYgMEwzMiAwQzE0LjMgMCAwIDE0LjMgMCAzMkwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjAtNjQgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsMTI4IDEyOHoiXQogICAgfTsKICAgIGZhTGV2ZWxEb3duQWx0ID0gZmFUdXJuRG93bjsKICAgIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1yaWdodC1hbmQtZG93bi1sZWZ0LWZyb20tY2VudGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4cGFuZC1hbHQiXSwgImY0MjQiLCAiTTM0NCAwTDQ4OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTM5LTM5LTg3IDg3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMGwtMzItMzJjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDg3LTg3LTM5LTM5Yy02LjktNi45LTguOS0xNy4yLTUuMi0yNi4yUzMzNC4zIDAgMzQ0IDB6TTE2OCA1MTJMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNEwwIDM0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzQuMSAzMjAuMiA0MSAzMjdsMzkgMzkgODctODdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTMTc3LjcgNTEyIDE2OCA1MTJ6Il0KICAgIH07CiAgICBmYUV4cGFuZEFsdCA9IGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlcjsKICAgIGZhVXNlclRhZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXRhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTA3IiwgIk0yNTYuMSA4YTEyMCAxMjAgMCAxIDEgMCAyNDAgMTIwIDEyMCAwIDEgMSAwLTI0MHpNMjI2LjQgMzA0bDU5LjQgMGM2LjcgMCAxMy4yIC40IDE5LjcgMS4xLS45IDQuOS0xLjQgOS45LTEuNCAxNWwwIDkyLjFjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlsMzEuOSAzMS45LTI4Ni4zIDBjLTE2LjQgMC0yOS43LTEzLjMtMjkuNy0yOS43IDAtOTguNSA3OS44LTE3OC4zIDE3OC4zLTE3OC4zek0zNTIuMSA0MTIuMmwwLTkyLjFjMC0xNy43IDE0LjMtMzIgMzItMzJsOTIuMSAwYzEyLjcgMCAyNC45IDUuMSAzMy45IDE0LjFsOTYgOTZjMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlsLTc2LjEgNzYuMWMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBsLTk2LTk2Yy05LTktMTQuMS0yMS4yLTE0LjEtMzMuOXptMTA0LTQ0LjJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSGFuZFNwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtc3BhcmtsZXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTA1ZCIsICJNMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMDhjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTc2YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0xMTJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3OC4yYy0xOS4yIDUuNC0zNC43IDIwLjQtNDAuNCA0MC4zbC02LjUgMjIuNy0yMi43IDYuNWMtMjUuMiA3LjItNDIuNSAzMC4yLTQyLjUgNTYuNCAwIDIyLjEgMTIuNCA0MiAzMS40IDUxLjktMjcuNSAxNy44LTYwLjIgMjguMS05NS40IDI4LjFsLTE5LjIgMGMtNTkuNiAwLTExNi45LTIyLjktMTYwLTY0TDc2LjQgMzQxYy0xNi0xNS4yLTE2LjYtNDAuNi0xLjQtNTYuNnM0MC42LTE2LjYgNTYuNi0xLjRsNjAuNSA1Ny42YzAtMS41LS4xLTMuMS0uMS00LjZsMC0yNzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDE3NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMjA4YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tNy4zIDMyNi42Yy0xLjEtMy45LTQuNy02LjYtOC43LTYuNnMtNy42IDIuNy04LjcgNi42bC03LjMgMjUuNC0yNS40IDcuM2MtMy45IDEuMS02LjYgNC43LTYuNiA4LjdzMi43IDcuNiA2LjYgOC43bDI1LjQgNy4zIDcuMyAyNS40YzEuMSAzLjkgNC43IDYuNiA4LjcgNi42czcuNi0yLjcgOC43LTYuNmw3LjMtMjUuNCAyNS40LTcuM2MzLjktMS4xIDYuNi00LjcgNi42LTguN3MtMi43LTcuNi02LjYtOC43bC0yNS40LTcuMy03LjMtMjUuNHpNMTA0IDEyMGw0OC4zIDEzLjhjNC42IDEuMyA3LjcgNS41IDcuNyAxMC4ycy0zLjEgOC45LTcuNyAxMC4yTDEwNCAxNjggOTAuMiAyMTYuM2MtMS4zIDQuNi01LjUgNy43LTEwLjIgNy43cy04LjktMy4xLTEwLjItNy43TDU2IDE2OCA3LjcgMTU0LjJDMy4xIDE1Mi45IDAgMTQ4LjcgMCAxNDRzMy4xLTguOSA3LjctMTAuMkw1NiAxMjAgNjkuOCA3MS43QzcxLjEgNjcuMSA3NS4zIDY0IDgwIDY0czguOSAzLjEgMTAuMiA3LjdMMTA0IDEyMHpNNTg0IDQwOGw0OC4zIDEzLjhjNC42IDEuMyA3LjcgNS41IDcuNyAxMC4ycy0zLjEgOC45LTcuNyAxMC4yTDU4NCA0NTYgNTcwLjIgNTA0LjNjLTEuMyA0LjYtNS41IDcuNy0xMC4yIDcuN3MtOC45LTMuMS0xMC4yLTcuN0w1MzYgNDU2IDQ4Ny43IDQ0Mi4yYy00LjYtMS4zLTcuNy01LjUtNy43LTEwLjJzMy4xLTguOSA3LjctMTAuMkw1MzYgNDA4IDU0OS44IDM1OS43YzEuMy00LjYgNS41LTcuNyAxMC4yLTcuN3M4LjkgMy4xIDEwLjIgNy43TDU4NCA0MDh6Il0KICAgIH07CiAgICBmYUFycm93c1RvRG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10by1kb3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRiZSIsICJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMiAzMiAwYzEyLjkgMCAyNC42IDcuOCAyOS42IDE5LjhzMi4yIDI1LjctNi45IDM0LjlsLTY0IDY0Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtNjQtNjRjLTkuMi05LjItMTEuOS0yMi45LTYuOS0zNC45UzE3OS4xIDY0IDE5MiA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTE2OS40IDM5My40bDY0LTY0YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDY0IDY0YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDQ0OCAzMjAgNDQ4bC0zMiAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0zMiAwYy0xMi45IDAtMjQuNi03LjgtMjkuNi0xOS44cy0yLjItMjUuNyA2LjktMzQuOXpNMzIgMjI0bDMyIDAgMC0zMmMwLTEyLjkgNy44LTI0LjYgMTkuOC0yOS42czI1LjctMi4yIDM0LjkgNi45bDY0IDY0YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC02NCA2NGMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTNjQgMzMyLjkgNjQgMzIwbDAtMzItMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMjk3LjQgNTQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNDQ4IDE3OS4xIDQ0OCAxOTJsMCAzMiAzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwIDAgMzJjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTY0LTY0ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRmFjZVNhZENyeTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zYWQtY3J5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTU3LCAic2FkLWNyeSJdLCAiZjViMyIsICJNMzUyIDQ5My40Yy0yOS42IDEyLTYyLjEgMTguNi05NiAxOC42cy02Ni40LTYuNi05Ni0xOC42TDE2MCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxNzEuN0M0NC40IDQyMS42IDAgMzQ0IDAgMjU2IDAgMTE0LjYgMTE0LjYgMCAyNTYgMFM1MTIgMTE0LjYgNTEyIDI1NmMwIDg4LTQ0LjQgMTY1LjYtMTEyIDIxMS43TDQwMCAyOTZjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxOTcuNHpNMTUyIDE5NmwxNiAwYzExIDAgMjAgOSAyMCAyMHM5IDIwIDIwIDIwIDIwLTkgMjAtMjBjMC0zMy4xLTI2LjktNjAtNjAtNjBsLTE2IDBjLTMzLjEgMC02MCAyNi45LTYwIDYwIDAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwIDktMjAgMjAtMjB6bTE3MiAyMGMwLTExIDktMjAgMjAtMjBsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMHpNMjA4IDMzNmwwIDMyYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHoiXQogICAgfTsKICAgIGZhU2FkQ3J5MiA9IGZhRmFjZVNhZENyeTI7CiAgICBmYURvbmdTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvbmctc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMTY5IiwgIk0yODgtMTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzItMTA0IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTA0IDAgMCA3Mi4yYy0yMi45LTE1LjMtNTAuNC0yNC4yLTgwLTI0LjItNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRTOTYuNSA0MzIgMTc2IDQzMmMzMCAwIDU3LjgtOS4xIDgwLjgtMjQuOCAzLjMgMTQuMiAxNiAyNC44IDMxLjIgMjQuOCAxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMwNCA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtMzJjMC0xNy43LTE0LjMtMzItMzItMzJ6TTk2IDI4OGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTI0IDQ2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMzYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEwyNCA0NjR6Il0KICAgIH07CiAgICBmYVBlb3BsZUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzNCIsICJNMjg4IDBhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6bTk2IDMxMmMwIDI1LTEyLjcgNDctMzIgNTkuOWwwIDQ0LjEtMTI4IDAgMC00NC4xQzIwNC43IDM1OSAxOTIgMzM3IDE5MiAzMTJsMC00MGMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgNDB6bTE2IDEwNGwwLTI3LjNjMTkuOS0yMi41IDMyLTUyLjIgMzItODQuN2wwLTMyYzAtMjYuNy03LjMtNTEuNi0xOS45LTczLjEgMTEuMS00LjUgMjMuMi02LjkgMzUuOS02LjkgNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMjMuNy0xMi45IDQ0LjQtMzIgNTUuNGwwIDQwLjYtMTEyIDB6TTY0IDM3NS40QzQ0LjkgMzY0LjQgMzIgMzQzLjcgMzIgMzIwbDAtMzJjMC01MyA0My05NiA5Ni05NiAxMi43IDAgMjQuOCAyLjUgMzUuOSA2LjktMTIuNiAyMS40LTE5LjkgNDYuNC0xOS45IDczLjFsMCAzMmMwIDMyLjUgMTIuMSA2Mi4xIDMyIDg0LjdsMCAyNy4zLTExMiAwIDAtNDAuNnpNMTI4IDMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyem0zMjAgMGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMjQgNDY0bDUyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhU3F1YXJlUnNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1yc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsicnNzLXNxdWFyZSJdLCAiZjE0MyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNOTYgMTM2YzAtMTMuMyAxMC43LTI0IDI0LTI0IDEzNyAwIDI0OCAxMTEgMjQ4IDI0OCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTExMC41LTg5LjUtMjAwLTIwMC0yMDAtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgOTZjMC0xMy4zIDEwLjctMjQgMjQtMjQgODMuOSAwIDE1MiA2OC4xIDE1MiAxNTIgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC01Ny40LTQ2LjYtMTA0LTEwNC0xMDQtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTAgMTIwYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6Il0KICAgIH07CiAgICBmYVJzc1NxdWFyZSA9IGZhU3F1YXJlUnNzOwogICAgZmFDYWxlbmRhck1pbnVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci1taW51cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMjcyIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTI0IDI2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6Il0KICAgIH07CiAgICBmYUNoYXJ0RGlhZ3JhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1kaWFncmFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU2OTUiLCAiTTgwIDMyQzUzLjUgMzIgMzIgNTMuNSAzMiA4MHMyMS41IDQ4IDQ4IDQ4bDE1MiAwIDAgNDAtNDggNDgtNzIgMGMtMzkuOCAwLTcyIDMyLjItNzIgNzJsMCA2NC04IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC04IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw3MiAwIDQ4IDQ4IDAgNDAtOCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOCAwIDAtNDAgNDgtNDggNzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDY0LTggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTggMCAwLTY0YzAtMzkuOC0zMi4yLTcyLTcyLTcybC03MiAwLTQ4LTQ4IDAtNDAgMTUyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhMODAgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VUaXJlZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS10aXJlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1NSwgInRpcmVkIl0sICJmNWM4IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTY0LjcgMzI4LjdjMjItMjIgNTMuOS00MC43IDkxLjMtNDAuN3M2OS4zIDE4LjcgOTEuMyA0MC43YzExLjEgMTEuMSAyMC4xIDIzLjQgMjYuNCAzNS40IDYuMiAxMS43IDEwLjMgMjQuNCAxMC4zIDM1LjkgMCA1LjItMi42IDEwLjItNi45IDEzLjJzLTkuOCAzLjctMTQuNyAxLjhsLTIwLjUtNy43Yy0yNi45LTEwLjEtNTUuNS0xNS4zLTg0LjMtMTUuM2wtMy4yIDBjLTI4LjggMC01Ny4zIDUuMi04NC4zIDE1LjNMMTQ5LjYgNDE1Yy00LjkgMS44LTEwLjQgMS4yLTE0LjctMS44UzEyOCA0MDUuMiAxMjggNDAwYzAtMTEuNiA0LjItMjQuMiAxMC4zLTM1LjkgNi4zLTEyIDE1LjMtMjQuMyAyNi40LTM1LjR6TTEyMi42IDE1OS4yYzQuNS02LjggMTMuMy05LjIgMjAuNi01LjVsNzkuNiA0MGM1LjQgMi43IDguOCA4LjIgOC44IDE0LjNzLTMuNCAxMS42LTguOCAxNC4zbC03OS42IDQwYy03LjMgMy42LTE2LjEgMS4zLTIwLjYtNS41cy0zLjEtMTUuOSAzLjEtMjEuMUwxNTkgMjA4IDEyNS44IDE4MC4zYy02LjItNS4yLTcuNi0xNC4zLTMuMS0yMS4xem0yNjMuNiAyMS4xTDM1MyAyMDggMzg2LjIgMjM1LjdjNi4yIDUuMiA3LjYgMTQuMyAzLjEgMjEuMXMtMTMuMyA5LjItMjAuNiA1LjVsLTc5LjYtNDBjLTUuNC0yLjctOC44LTguMi04LjgtMTQuM3MzLjQtMTEuNiA4LjgtMTQuM2w3OS42LTQwYzcuMy0zLjYgMTYuMS0xLjMgMjAuNiA1LjVzMy4xIDE1LjktMy4xIDIxLjF6Il0KICAgIH07CiAgICBmYVRpcmVkMiA9IGZhRmFjZVRpcmVkMjsKICAgIGZhSGFuZFBvaW50UmlnaHQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcG9pbnQtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBhNCIsICJNNDgwIDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMDggMCAwLTY0IDIwOCAwek0zMjAgMjg4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDB6bTY0LTY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC00OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJ6TTI4OCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMHptLTg4LTk2bC42IDBjLTUuNCA5LjQtOC42IDIwLjMtOC42IDMyIDAgMTMuMiA0IDI1LjQgMTAuOCAzNS42LTI0LjkgOC43LTQyLjggMzIuNS00Mi44IDYwLjQgMCAxMS43IDMuMSAyMi42IDguNiAzMmwtOC42IDBDNzEuNiA0NDggMCAzNzYuNCAwIDI4OGwwLTYxLjdjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xbDExLjYtMTEuNkM4Mi41IDc3LjUgMTE1LjEgNjQgMTQ5IDY0bDI3IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA4OGMwIDIyLjEtMTcuOSA0MC00MCA0MHMtNDAtMTcuOS00MC00MGwwLTU2YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNTZjMCAzOS44IDMyLjIgNzIgNzIgNzJ6Il0KICAgIH07CiAgICBmYUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4NTkzXSwgImYwNjIiLCAiTTIxNC42IDE3LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE2MCAxMTcuMyAxNjAgNDg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNzAuNyAxMDUuNCAxMDUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYweiJdCiAgICB9OwogICAgZmFDdWJlc1N0YWNrZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZXMtc3RhY2tlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGU2IiwgIk0xOTIgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0em0zMiAzNTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0xOTIgMGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTMyMCAxOTJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyem0tMTgyLjYtMy45YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwbDQ1LjMgNDUuM2MxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtNDUuMyA0NS4zYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMEw5Mi4xIDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w0NS4zLTQ1LjN6TTMyIDM4NGw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUNoaWxkQ29tYmF0YW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkLWNvbWJhdGFudCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJjaGlsZC1yaWZsZSJdLCAiZTRlMCIsICJNMTc2LjUgMTI4YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4em0tMTYgMzUybDAtOTYgMzIgMCAwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xOTIuMiAyMC45IDMzLjJjOS40IDE1IDI5LjIgMTkuNCA0NC4xIDEwczE5LjQtMjkuMiAxMC00NC4xbC0zOS45LTYzLjNDMjY2LjggMTg0IDIyMy4zIDE2MCAxNzYuNSAxNjBTODYuMiAxODQgNjEuMyAyMjMuNkwyMS40IDI4N2MtOS40IDE1LTQuOSAzNC43IDEwIDQ0LjFzMzQuNyA0LjkgNDQuMS0xMGwyMC45LTMzLjIgMCAxOTIuMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyek00NDguNSAwbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45bC0yMy05Mi4xIDQ0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtMjYuNyA1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJsMC04NC41YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNTYtMTYgNS4zIDAtMTA5LjNjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdsMC0xMTYuM2MwLTguOC03LjItMTYtMTYtMTZ6Il0KICAgIH07CiAgICBmYUNoaWxkUmlmbGUgPSBmYUNoaWxkQ29tYmF0YW50OwogICAgZmFWZXN0UGF0Y2hlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2ZXN0LXBhdGNoZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTA4NiIsICJNMjAwIDI5My45TDIwMCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDI3MC41YzAtOS41IDIuOC0xOC43IDguMS0yNi42bDQ3LjktNzEuOGM1LjMtNy45IDguMS0xNy4xIDguMS0yNi42TDY0IDQ4QzY0IDIxLjUgODUuNSAwIDExMiAwbDMuNSAwYy4zIDAgLjYgMCAxIDAgLjYgMCAxLjIgMCAxLjggMCAxOC44IDAgMzQuMSA5LjcgNDQuMSAxOC44IDkuMyA4LjQgMjguNSAyMS4yIDYxLjcgMjEuMnM1Mi40LTEyLjggNjEuNy0yMS4yYzEwLTkuMSAyNS4zLTE4LjggNDQuMS0xOC44IC42IDAgMS4yIDAgMS44IDAgLjMgMCAuNiAwIDEgMEwzMzYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk3LjVjMCA5LjUgMi44IDE4LjcgOC4xIDI2LjZsNDcuOSA3MS44YzUuMyA3LjkgOC4xIDE3LjEgOC4xIDI2LjZMNDQ4IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA0IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTcwLjFjMC0zLjkgLjUtNy44IDEuNC0xMS42TDMwMy42IDY1LjRDMjg1LjkgNzcuMiAyNTkuOCA4OCAyMjQgODhzLTYxLjktMTAuOC03OS42LTIyLjZsNTQuMiAyMTYuOGMxIDMuOCAxLjQgNy43IDEuNCAxMS42ek05NiA0NTZhNDAgNDAgMCAxIDAgMC04MCA0MCA0MCAwIDEgMCAwIDgwek02My41IDI1NS41Yy00LjcgNC43LTQuNyAxMi4zIDAgMTdMNzkgMjg4IDYzLjUgMzAzLjVjLTQuNyA0LjctNC43IDEyLjMgMCAxN3MxMi4zIDQuNyAxNyAwTDk2IDMwNSAxMTEuNSAzMjAuNWM0LjcgNC43IDEyLjMgNC43IDE3IDBzNC43LTEyLjMgMC0xN0wxMTMgMjg4IDEyOC41IDI3Mi41YzQuNy00LjcgNC43LTEyLjMgMC0xN3MtMTIuMy00LjctMTcgMEw5NiAyNzEgODAuNSAyNTUuNWMtNC43LTQuNy0xMi4zLTQuNy0xNyAwek0zMDQgMjgwbDAgNDBjMCA4LjggNy4yIDE2IDE2IDE2bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTggMCAwLThjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYU1hcnRpbmlHbGFzc0VtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnRpbmktZ2xhc3MtZW1wdHkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2xhc3MtbWFydGluaSJdLCAiZjAwMCIsICJNMzIgMzJDMTkuMSAzMiA3LjQgMzkuOCAyLjQgNTEuOFMuMiA3Ny41IDkuNCA4Ni42bDIxNC42IDIxNC42IDAgMTQ2LjctNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMCAwLTE0Ni43IDIxNC42LTIxNC42YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDMyIDQ4MCAzMkwzMiAzMnpNMjU2IDI0Mi43TDEwOS4zIDk2IDQwMi43IDk2IDI1NiAyNDIuN3oiXQogICAgfTsKICAgIGZhR2xhc3NNYXJ0aW5pID0gZmFNYXJ0aW5pR2xhc3NFbXB0eTsKICAgIGZhTWFnbmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hZ25ldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTUyMl0sICJmMDc2IiwgIk0wIDE3NkwwIDI4OEMwIDQxMS43IDEwMC4zIDUxMiAyMjQgNTEyUzQ0OCA0MTEuNyA0NDggMjg4bDAtMTEyLTEyOCAwIDAgMTEyYzAgNTMtNDMgOTYtOTYgOTZzLTk2LTQzLTk2LTk2bDAtMTEyLTEyOCAwem0wLTQ4bDEyOCAwIDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NGwwIDY0em0zMjAgMGwxMjggMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0eiJdCiAgICB9OwogICAgZmFSb2FkQmFycmllciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWJhcnJpZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyTDY0IDI2Ni4zIDE0OS4yIDk2IDY0IDk2IDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyek00MDUuMiA5NmwtNzQuMyAwLTUuNCAxMC43LTkwLjYgMTgxLjMgNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjN6TTM2Mi44IDI4OGw3NC4zIDAgNS40LTEwLjcgOTAuNi0xODEuMy03NC4zIDAtNS40IDEwLjctOTAuNiAxODEuM3pNMjAyLjggOTZsLTUuNCAxMC43LTkwLjYgMTgxLjMgNzQuMyAwIDUuNC0xMC43IDkwLjYtMTgxLjMtNzQuMyAwem0yODggMTkybDg1LjIgMCAwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNy04NS4yIDE3MC4zeiJdCiAgICB9OwogICAgZmFDb21wYXNzRHJhZnRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcGFzcy1kcmFmdGluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJkcmFmdGluZy1jb21wYXNzIl0sICJmNTY4IiwgIk05OS4zIDI1Ni4xbDY5LjQtMTE5LjljLTUuNi0xMi4yLTguOC0yNS44LTguOC00MC4yIDAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZjMCAxNC4zLTMuMSAyNy45LTguOCA0MC4ybDQ0LjQgNzYuN2MtMjMuMSAyNi01My43IDQ1LjEtODguNCA1My44TDI1NiAxOTEuOSAxODcuOSAzMDkuNWMyMS41IDYuOCA0NC4zIDEwLjUgNjguMSAxMC41IDcwLjcgMCAxMzMuOC0zMi43IDE3NC45LTg0IDExLjEtMTMuOCAzMS4yLTE2IDQ1LTVzMTYgMzEuMiA1IDQ1Yy01Mi43IDY1LjgtMTMzLjkgMTA4LTIyNC44IDEwOC0zNS40IDAtNjkuNC02LjQtMTAwLjctMTguMUw5OC43IDQ2My43Qzk0IDQ3MS44IDg3IDQ3OC40IDc4LjYgNDgyLjZMMjMuMiA1MTAuM2MtNSAyLjUtMTAuOSAyLjItMTUuNi0uN1MwIDUwMS41IDAgNDk2bDAtNTUuNGMwLTguNCAyLjItMTYuNyA2LjUtMjQuMWw2MC0xMDMuN2MtMTIuOC0xMS4yLTI0LjYtMjMuNS0zNS4zLTM2LjgtMTEuMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWM1LjcgNy4xIDExLjggMTMuOCAxOC4yIDIwLjF6TTM4MS4xIDQwNy45YzMyLjUtMTMgNjIuNC0zMSA4OC45LTUyLjlsMzUuNiA2MS41YzQuMiA3LjMgNi41IDE1LjYgNi41IDI0LjFsMCA1NS40YzAgNS41LTIuOSAxMC43LTcuNiAxMy42cy0xMC42IDMuMi0xNS42IC43bC01NS40LTI3LjdjLTguNC00LjItMTUuNC0xMC44LTIwLjEtMTguOWwtMzIuMy01NS44ek0yNTYgMTI4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhRHJhZnRpbmdDb21wYXNzID0gZmFDb21wYXNzRHJhZnRpbmc7CiAgICBmYVNxdWFyZVBlcnNvbkNvbmZpbmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wZXJzb24tY29uZmluZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU3NyIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnptOTYgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTgwIDEwNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTAyLjFjMCAzNi40LTI5LjUgNjUuOS02NS45IDY1LjktMTcuNSAwLTM0LjMtNi45LTQ2LjYtMTkuM2wtNTQuNy01NC43LTI4LjEgNTYuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWw0OC05NmM0LjYtOS4yIDEzLjMtMTUuNiAyMy41LTE3LjNzMjAuNSAxLjcgMjcuOCA5bDQxLjQgNDEuNCAwLTU4Ljd6Il0KICAgIH07CiAgICBmYVBsYXRlV2hlYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhdGUtd2hlYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU1YSIsICJNMTc2IDMyYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2LTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTZjMC04LjggNy4yLTE2IDE2LTE2ek01NiA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM0Mi43IDY0IDU2IDY0ek0yNCAxMzZsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgMTg0Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDk2YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0ek0yNzIgNDhjMC04LjggNy4yLTE2IDE2LTE2IDQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTZjMCA4LjgtNy4yIDE2LTE2IDE2LTQ0LjIgMC04MC0zNS44LTgwLTgwbDAtMTZ6TTQwMCAzMmM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2YzAgOC44LTcuMiAxNi0xNiAxNi00NC4yIDAtODAtMzUuOC04MC04MGwwLTE2YzAtOC44IDcuMi0xNiAxNi0xNnptODAgMTYwbDAgMTZjMCA0NC4yLTM1LjggODAtODAgODAtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTZjMC00NC4yIDM1LjgtODAgODAtODAgOC44IDAgMTYgNy4yIDE2IDE2ek0zNTIgMTc2YzguOCAwIDE2IDcuMiAxNiAxNmwwIDE2YzAgNDQuMi0zNS44IDgwLTgwIDgwLTguOCAwLTE2LTcuMi0xNi0xNmwwLTE2YzAtNDQuMiAzNS44LTgwIDgwLTgwem0tOTYgMTZsMCAxNmMwIDQ0LjItMzUuOCA4MC04MCA4MC04LjggMC0xNi03LjItMTYtMTZsMC0xNmMwLTQ0LjIgMzUuOC04MCA4MC04MCA4LjggMCAxNiA3LjIgMTYgMTZ6TTMuNSAzNDcuNkMxLjYgMzMyLjkgMTMgMzIwIDI3LjggMzIwbDQ1Ni40IDBjMTQuOCAwIDI2LjIgMTIuOSAyNC40IDI3LjYtNi4zIDUwLjItNDQuNCA4OS40LTkyLjYgOTguNGwwIDJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTJjLTQ4LjItOS04Ni4zLTQ4LjItOTIuNS05OC40eiJdCiAgICB9OwogICAgZmFTaWduSGFuZ2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaWduLWhhbmdpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbiJdLCAiZjRkOSIsICJNOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zNTIgMCAwIDM1MmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTM1Mi0zMiAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDMyIDAgMC0zMkM2NCAxNC4zIDc4LjMgMCA5NiAwek0yMDggMTc2bDI0MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQ0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yNDAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNDRjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVNpZ24gPSBmYVNpZ25IYW5naW5nOwogICAgZmFDYXJCYXR0ZXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1iYXR0ZXJ5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhdHRlcnktY2FyIl0sICJmNWRmIiwgIk04MCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsMTYgMHpNMzkyIDE4NGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJ6TTY0IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxMTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw4OCAyMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0eiJdCiAgICB9OwogICAgZmFCYXR0ZXJ5Q2FyID0gZmFDYXJCYXR0ZXJ5OwogICAgZmFTaGlydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGlydCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODA4NSwgInQtc2hpcnQiLCAidHNoaXJ0Il0sICJmNTUzIiwgIk0zMjAuMiAxMTJjNDQuMiAwIDgwLTM1LjggODAtODBsNTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDYxNy42IDE2OS40YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zbC01MC43IDUwLjdjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC00MS40LTQxLjQgMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTE5MiAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTIyNC00MS40IDQxLjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwTDIyLjkgMjE0LjZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDE0MS41IDUwLjdjMTItMTIgMjguMy0xOC43IDQ1LjMtMTguN2w1My41IDBjMCA0NC4yIDM1LjggODAgODAgODB6Il0KICAgIH07CiAgICBmYVRTaGlydCA9IGZhU2hpcnQ7CiAgICBmYVRzaGlydCA9IGZhU2hpcnQ7CiAgICBmYVBhcmFncmFwaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXJhZ3JhcGgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxODJdLCAiZjFkZCIsICJNMTYwIDBMNDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDAgMCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC00MTYtNDggMCAwIDQxNmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MC00OCAwQzcxLjYgMzIwIDAgMjQ4LjQgMCAxNjBTNzEuNiAwIDE2MCAweiJdCiAgICB9OwogICAgZmFFbnZlbG9wZXNCdWxrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVudmVsb3Blcy1idWxrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbIm1haWwtYnVsayJdLCAiZjY3NCIsICJNMTEyIDBDODUuNSAwIDY0IDIxLjUgNjQgNDhsMCAxNjAgODAgMCAwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMjA4IDAgMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OEwxMTIgMHpNMjQwIDEyOGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzMiA4MCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAxMTIgMTYwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xOTJjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTI4OCAwem0yMDAgNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQ4YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00OCAyNTZjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTAuNCAxNTYuNiA4Ni4yYzEuMSAuNiAyLjIgLjkgMy40IC45czIuNC0uMyAzLjQtLjlMMzIwIDMxNC40IDMyMCAzMDRjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMjU2ek0zMjAgMzY5LjJMMTg2LjYgNDQyLjZjLTguMSA0LjUtMTcuMyA2LjgtMjYuNiA2LjhzLTE4LjQtMi40LTI2LjYtNi44TDAgMzY5LjIgMCA0NjRjMCAyNi41IDIxLjUgNDggNDggNDhsMjI0IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NC44eiJdCiAgICB9OwogICAgZmFNYWlsQnVsayA9IGZhRW52ZWxvcGVzQnVsazsKICAgIGZhR3VpdGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImd1aXRhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2E2IiwgIk00NjUgN2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMMzgzIDU1Yy0yLjQgMi40LTQuMyA1LjMtNS41IDguNWwtMTUuNCA0MS03Ny41IDc3LjZjLTQ1LjEtMjkuNC05OS4zLTMwLjItMTMxIDEuNi0xMSAxMS0xOCAyNC42LTIxLjQgMzkuNi0zLjcgMTYuNi0xOS4xIDMwLjctMzYuMSAzMS42LTI1LjYgMS4zLTQ5LjMgMTAuNy02Ny4zIDI4LjYtNDQuOCA0NC44LTM2LjQgMTI1LjggMTguNyAxODAuOVMxODMuNiA1MjggMjI4LjQgNDgzLjJjMTcuOS0xNy45IDI3LjQtNDEuNyAyOC42LTY3LjMgLjktMTcgMTUtMzIuMyAzMS42LTM2LjEgMTUtMy40IDI4LjYtMTAuNSAzOS42LTIxLjQgMzEuOC0zMS44IDMxLTg1LjkgMS42LTEzMWw3Ny42LTc3LjYgNDEtMTUuNGMzLjItMS4yIDYuMS0zLjEgOC41LTUuNWw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOUw0NjUgN3pNMjA4IDI1NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYVN1aXRjYXNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN1aXRjYXNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTIzXSwgImYwZjIiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MjQgMjI0IDAgMC00MjRjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjAwIDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2ek00MTYgOTZsMCAzODQgMzIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMzIgMHpNOTYgNDgwbDAtMzg0LTMyIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyIDB6Il0KICAgIH07CiAgICBmYUNpcmNsZVVwMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NywgImFycm93LWFsdC1jaXJjbGUtdXAiXSwgImYzNWIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0xMS4zLTM4Ny4zbDEwNCAxMDRjNC42IDQuNiA1LjkgMTEuNSAzLjUgMTcuNFMzNjYuNSAyNTYgMzYwIDI1NmwtNTYgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2LTU2IDBjLTYuNSAwLTEyLjMtMy45LTE0LjgtOS45cy0xLjEtMTIuOSAzLjUtMTcuNGwxMDQtMTA0YzYuMi02LjIgMTYuNC02LjIgMjIuNiAweiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVVwMiA9IGZhQ2lyY2xlVXAyOwogICAgZmFGID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImYiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMDJdLCAiNDYiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYwIDAgMC0xMjggMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYVhtYXJrc0xpbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInhtYXJrcy1saW5lcyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTlhIiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsNTc2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6bTAgMzg0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDU3NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnpNNyAxNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDU1IDU1LTU1IDU1Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNTUtNTUgNTUgNTVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01NS01NSA1NS01NWM5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwbC01NSA1NS01NS01NWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDB6TTI2NSAxNjdjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsNTUgNTUtNTUgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw1NS01NSA1NSA1NWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTU1LTU1IDU1LTU1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTU1IDU1LTU1LTU1ek00NTUgMTY3Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWw1NSA1NS01NSA1NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDU1LTU1IDU1IDU1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTUtNTUgNTUtNTVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtNTUgNTUtNTUtNTVjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAweiJdCiAgICB9OwogICAgZmFFYXJ0aE9jZWFuaWEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWFydGgtb2NlYW5pYSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJnbG9iZS1vY2VhbmlhIl0sICJlNDdiIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDE1MC42YzAtMTIuNSAxMC4xLTIyLjYgMjIuNi0yMi42bDQxLjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTguNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTYtMTZjLTQuMi00LjItNi42LTEwLTYuNi0xNnpNNDMyIDI1NmM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNDExLjMgMzc5LjNsLTMyIDMyYy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDMyLTMyYzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnpNMjI0IDQzMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2em0tOTYtODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTguN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmw0OC00OGM0LjItNC4yIDEwLTYuNiAxNi02LjZsNi42IDBjOC44IDAgMTYgNy4yIDE2IDE2czcuMiAxNiAxNiAxNiAxNi03LjIgMTYtMTYgNy4yLTE2IDE2LTE2bDYuNiAwYzYgMCAxMS44IDIuNCAxNiA2LjZsNDggNDhjNiA2IDkuNCAxNC4xIDkuNCAyMi42bDAgNTAuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtNTAuNyAwYy04LjUgMC0xNi42LTMuNC0yMi42LTkuNGwtMTMuMy0xMy4zYy02LTYtMTQuMS05LjQtMjIuNi05LjRMMTI4IDM1MnoiXQogICAgfTsKICAgIGZhR2xvYmVPY2VhbmlhID0gZmFFYXJ0aE9jZWFuaWE7CiAgICBmYUNvbW1lbnRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0YjMiLCAiTTQxLTI1QzMxLjYtMzQuMyAxNi40LTM0LjMgNy0yNVMtMi4zLS40IDcgOUw1MzUgNTM3YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtOTYuNi05Ni42YzQ0LjQtNDMuMiA3MS42LTEwMS44IDcxLjYtMTY2LjUgMC0xMzIuNS0xMTQuNi0yNDAtMjU2LTI0MC02MyAwLTEyMC44IDIxLjQtMTY1LjQgNTYuOEw0MS0yNXptMTkuNCAxNTVDNDIuMiAxNjMgMzIgMjAwLjMgMzIgMjM5LjkgMzIgMjk0LjIgNTEuMiAzNDQuMiA4My42IDM4NC40TDM0LjggNDc2LjdjLTQuOCA5LTMuMyAyMCAzLjYgMjcuNVM1Ni4xIDUxNCA2NS41IDUxMGwxMTguNC01MC43YzMxLjggMTMuMyA2Ny4xIDIwLjcgMTA0LjEgMjAuNyAzNi40IDAgNzAuOS03LjEgMTAyLjMtMTkuOUw2MC4zIDEzMC4xeiJdCiAgICB9OwogICAgZmFQbGF5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYXkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjU0XSwgImYwNGIiLCAiTTkxLjIgMzYuOWMtMTIuNC02LjgtMjcuNC02LjUtMzkuNiAuN1MzMiA1Ny45IDMyIDcybDAgMzY4YzAgMTQuMSA3LjUgMjcuMiAxOS42IDM0LjRzMjcuMiA3LjUgMzkuNiAuN2wzMzYtMTg0YzEyLjgtNyAyMC44LTIwLjUgMjAuOC0zNS4xcy04LTI4LjEtMjAuOC0zNS4xbC0zMzYtMTg0eiJdCiAgICB9OwogICAgZmFWaWFsQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlhbC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU5NiIsICJNMzIgMzJDMzIgMTQuMyA0Ni4zIDAgNjQgMEwyODggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MS40Yy02Ni4xIDMwLjMtMTEyIDk3LjEtMTEyIDE3NC42IDAgMzkuNyAxMiA3Ni42IDMyLjcgMTA3LjItMTAuMyAzLjEtMjEuMyA0LjgtMzIuNyA0LjgtNjEuOSAwLTExMi01MC4xLTExMi0xMTJMNjQgNjRDNDYuMyA2NCAzMiA0OS43IDMyIDMyem05NiAzMmwwIDEyOCA5NiAwIDAtMTI4LTk2IDB6bTk2IDMzNmExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhQnJpZGdlQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJpZGdlLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGM5IiwgIk0zMiAzMkMxNC4zIDMyIDAgNDYuMyAwIDY0UzE0LjMgOTYgMzIgOTZsOCAwIDAgNjQtNDAgMCAwIDExMmMzNy42IDkuNCA2NCA0My4yIDY0IDgybDAgOTRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtNTMgNDMtOTYgOTYtOTYgNi40IDAgMTIuNyAuNiAxOC43IDEuOCAzNC43LTQ5LjUgOTIuMi04MS44IDE1Ny4zLTgxLjggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40LTQwIDAgMC02NCA4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6TTQyNCA5NmwwIDY0LTgwIDAgMC02NCA4MCAwek0yOTYgOTZsMCA2NC04MCAwIDAtNjQgODAgMHpNODggOTZsODAgMCAwIDY0LTgwIDAgMC02NHpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUNlZGlTaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNlZGktc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMGRmIiwgIk0yMzIgMzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyNi41Qzg4LjggNzMuOSAxNiAxNTYuNCAxNiAyNTZTODguOCA0MzguMSAxODQgNDUzLjVsMCAyNi41YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNC42YzQ2LjgtMy43IDg5LjEtMjMuNiAxMjEuMy01My45IDEyLjktMTIuMSAxMy40LTMyLjQgMS4zLTQ1LjJzLTMyLjQtMTMuNC00NS4yLTEuM2MtMjAuNyAxOS42LTQ3LjYgMzIuNy03Ny4zIDM2LjJsMC0yNzAuMWMyOS44IDMuNSA1Ni42IDE2LjYgNzcuMyAzNi4yIDEyLjkgMTIuMSAzMy4xIDExLjUgNDUuMi0xLjNzMTEuNS0zMy4xLTEuMy00NS4yQzMyMS4xIDgwLjIgMjc4LjggNjAuMyAyMzIgNTYuNkwyMzIgMzJ6bS00OCA5MS44bDAgMjY0LjRDMTI0LjMgMzczLjggODAgMzIwLjEgODAgMjU2czQ0LjMtMTE3LjggMTA0LTEzMi4yeiJdCiAgICB9OwogICAgZmFQdXp6bGVQaWVjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdXp6bGUtcGllY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTNdLCAiZjEyZSIsICJNMjI0IDBjMzUuMyAwIDY0IDIxLjUgNjQgNDggMCAxMC40LTQuNCAyMC0xMiAyNy45LTYuNiA2LjktMTIgMTUuMy0xMiAyNC45IDAgMTUgMTIuMiAyNy4yIDI3LjIgMjcuMmw0NC44IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA0NC44YzAgMTUgMTIuMiAyNy4yIDI3LjIgMjcuMiA5LjUgMCAxOC01LjQgMjQuOS0xMiA3LjktNy41IDE3LjUtMTIgMjcuOS0xMiAyNi41IDAgNDggMjguNyA0OCA2NHMtMjEuNSA2NC00OCA2NGMtMTAuNCAwLTIwLjEtNC40LTI3LjktMTItNi45LTYuNi0xNS4zLTEyLTI0LjktMTItMTUgMC0yNy4yIDEyLjItMjcuMiAyNy4yTDM4NCA0NjRjMCAyNi41LTIxLjUgNDgtNDggNDhsLTU2LjggMGMtMTIuOCAwLTIzLjItMTAuNC0yMy4yLTIzLjIgMC05LjIgNS44LTE3LjMgMTMuMi0yMi44IDExLjYtOC43IDE4LjgtMjAuNyAxOC44LTM0IDAtMjYuNS0yOC43LTQ4LTY0LTQ4cy02NCAyMS41LTY0IDQ4YzAgMTMuMyA3LjIgMjUuMyAxOC44IDM0IDcuNCA1LjUgMTMuMiAxMy41IDEzLjIgMjIuOCAwIDEyLjgtMTAuNCAyMy4yLTIzLjIgMjMuMkw0OCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzQzLjJjMC0xMi44IDEwLjQtMjMuMiAyMy4yLTIzLjIgOS4yIDAgMTcuMyA1LjggMjIuOCAxMy4yIDguNyAxMS42IDIwLjcgMTguOCAzNCAxOC44IDI2LjUgMCA0OC0yOC43IDQ4LTY0cy0yMS41LTY0LTQ4LTY0Yy0xMy4zIDAtMjUuMyA3LjItMzQgMTguOC01LjUgNy40LTEzLjUgMTMuMi0yMi44IDEzLjItMTIuOCAwLTIzLjItMTAuNC0yMy4yLTIzLjJMMCAxNzZjMC0yNi41IDIxLjUtNDggNDgtNDhsMTA4LjggMGMxNSAwIDI3LjItMTIuMiAyNy4yLTI3LjIgMC05LjUtNS40LTE4LTEyLTI0LjktNy41LTcuOS0xMi0xNy41LTEyLTI3LjkgMC0yNi41IDI4LjctNDggNjQtNDh6Il0KICAgIH07CiAgICBmYUhlbG1ldFVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlbG1ldC11biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTAzIiwgIk00NzkuNSAyMjRDNDcxLjIgOTguOSAzNjcuMiAwIDI0MCAwIDEwNy41IDAgMCAxMDcuNSAwIDI0MGwwIDU2LjNDMCAzNDQuOCAzOS4yIDM4NCA4Ny43IDM4NGwxMjcuMyAwIDEyOC42IDEyMS40YzQuNSA0LjIgMTAuNCA2LjYgMTYuNSA2LjZsOTYgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtODYuNSAwLTEuNS0xLjUgMC0xNzQuNSAxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtLjUgMHpNMzIwIDQxNy4ybC03OC03My43IDMyLjQtNTUuNSA0NS42IDAgMCAxMjkuMnpNMjg1LjMgMTAzLjFsMzQuNyA1MiAwLTQzLjJjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDk2YzAgNy4xLTQuNiAxMy4zLTExLjQgMTUuM3MtMTQtLjYtMTcuOS02LjRsLTM0LjctNTIgMCA0My4yYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtOTZjMC03LjEgNC42LTEzLjMgMTEuNC0xNS4zczE0IC42IDE3LjkgNi40ek0xNjAgMTEybDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTY0YzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZ6Il0KICAgIH07CiAgICBmYUdsYXNzV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2xhc3Mtd2F0ZXIiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTRmNCIsICJNMzIgMEMyMy4xIDAgMTQuNiAzLjcgOC42IDEwLjJTLS42IDI1LjQgLjEgMzQuM0wyOC45IDQzNy43YzMgNDEuOSAzNy44IDc0LjMgNzkuOCA3NC4zbDE2Ni42IDBjNDIgMCA3Ni44LTMyLjQgNzkuOC03NC4zTDM4My45IDM0LjNjLjYtOC45LTIuNC0xNy42LTguNS0yNC4xUzM2MC45IDAgMzUyIDBMMzIgMHpNNzMgMTU2LjVsLTYuNi05Mi41IDI1MS4zIDAtNi42IDkyLjUtMjQuMiAxMi4xYy0xOS40IDkuNy00Mi4yIDkuNy02MS42IDAtMjAuOS0xMC40LTQ1LjUtMTAuNC02Ni40IDAtMTkuNCA5LjctNDIuMiA5LjctNjEuNiAwTDczIDE1Ni41eiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVhcnQtY2lyY2xlLWJvbHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmYyIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNMjg4IDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0xNzcuNC03N2MtNS44LTQuMi0xMy44LTQtMTkuNCAuNWwtODAgNjRjLTUuMyA0LjItNy40IDExLjQtNS4xIDE3LjhTMzY5LjIgNDE2IDM3NiA0MTZsMzIuOSAwLTE1LjkgNDIuNGMtMi41IDYuNy0uMiAxNC4zIDUuNiAxOC42czEzLjggNCAxOS40LS41bDgwLTY0YzUuMy00LjIgNy40LTExLjQgNS4xLTE3LjhTNDk0LjggMzg0IDQ4OCAzODRsLTMyLjkgMCAxNS45LTQyLjRjMi41LTYuNyAuMi0xNC4zLTUuNi0xOC42eiJdCiAgICB9OwogICAgZmFQdW1wU29hcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwdW1wLXNvYXAiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTA2YiIsICJNOTYgMGwwIDgwIDEyOCAwIDAtMjQgNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMzMDkuMyA4IDI5NiA4bC03MiAwIDAtOGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMEMxMTAuMy0zMiA5Ni0xNy43IDk2IDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMTI4ek0yMjQgMzQ0YzAgMzUuMy0yOC43IDU2LTY0IDU2cy02NC0yMC43LTY0LTU2YzAtMzIuNSAzNy04MC45IDUwLjktOTcuOSAzLjItMy45IDguMS02LjEgMTMuMS02LjFzOS45IDIuMiAxMy4xIDYuMUMxODcgMjYzLjEgMjI0IDMxMS41IDIyNCAzNDR6Il0KICAgIH07CiAgICBmYUhhbmRTY2lzc29yczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjU3IiwgIk00MCAyMDhjLTIyLjEgMC00MCAxNy45LTQwIDQwczE3LjkgNDAgNDAgNDBsMTgwLjIgMGMtNy42IDguNS0xMi4yIDE5LjctMTIuMiAzMiAwIDI1LjMgMTkuNSA0NiA0NC4zIDQ3LjktNy43IDguNS0xMi4zIDE5LjgtMTIuMyAzMi4xIDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDk2IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhsMC0xMTMuMWMwLTQwLjItMTYtNzguOC00NC40LTEwNy4zLTIyLjgtMjIuOC01My42LTM1LjYtODUuOC0zNS42TDMzNiA2NGMtMjEuMyAwLTM5LjMgMTMuOS00NS42IDMzLjFsNzQuNSAyMy43YzguNCAyLjcgMTMuMSAxMS43IDEwLjQgMjAuMXMtMTEuNyAxMy4xLTIwLjEgMTAuNGwtNjcuMS0yMS40IDAgLjEtMjA0LTY0LjFDNjIuOSA1OS4yIDQwLjUgNzAuOSAzMy45IDkyczUuMSA0My41IDI2LjIgNTAuMkwyNjkuNSAyMDggNDAgMjA4eiJdCiAgICB9OwogICAgZmFEb2xseSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb2xseSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkb2xseS1ib3giXSwgImY0NzIiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsNzIuOSAwIDkyLjEgMjc2LjJjLTIyLjUgMTcuNi0zNyA0NS0zNyA3NS44IDAgNTMgNDMgOTYgOTYgOTYgNTIuNCAwIDk1LjEtNDIgOTYtOTQuM2wyMDIuMS02Ny40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJMMzMxLjggMzU3Yy0xNy4yLTIyLjEtNDMuOS0zNi41LTc0LTM3TDE2NS43IDQzLjhDMTU2LjkgMTcuNiAxMzIuNSAwIDEwNC45IDBMMzIgMHpNMjA4IDQxNmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0yODAuNSA4OS4zYy0yNS4yIDguMi0zOSAzNS4zLTMwLjggNjAuNWwzOS42IDEyMS43YzguMiAyNS4yIDM1LjMgMzkgNjAuNSAzMC44bDEyMS43LTM5LjZjMjUuMi04LjIgMzktMzUuMyAzMC44LTYwLjVMNDYyLjggODAuNWMtOC4yLTI1LjItMzUuMy0zOS02MC41LTMwLjhMMjgwLjUgODkuM3oiXQogICAgfTsKICAgIGZhRG9sbHlCb3ggPSBmYURvbGx5OwogICAgZmFQYXBlcmNsaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFwZXJjbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjA2XSwgImYwYzYiLCAiTTIyNC42IDEyLjhjNTYuMi01Ni4yIDE0Ny40LTU2LjIgMjAzLjYgMHM1Ni4yIDE0Ny40IDAgMjAzLjZsLTE2NCAxNjRjLTM0LjQgMzQuNC05MC4xIDM0LjQtMTI0LjUgMHMtMzQuNC05MC4xIDAtMTI0LjVMMjkyLjUgMTAzLjNjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxODUgMzAxLjNjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwxNjQtMTY0YzMxLjItMzEuMiAzMS4yLTgxLjkgMC0xMTMuMXMtODEuOS0zMS4yLTExMy4xIDBsLTE2NCAxNjRjLTUzLjEgNTMuMS01My4xIDEzOS4yIDAgMTkyLjNzMTM5LjIgNTMuMSAxOTIuMyAwTDQyOC4zIDI4NC4zYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNMMzQzLjQgNDU5LjZjLTc4LjEgNzguMS0yMDQuNyA3OC4xLTI4Mi44IDBzLTc4LjEtMjA0LjcgMC0yODIuOGwxNjQtMTY0eiJdCiAgICB9OwogICAgZmFEZW1vY3JhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZW1vY3JhdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzQ3IiwgIk02NCAzMmMwLTguOSAzLjgtMjAuOSA2LjItMjcuMyAxLTIuOCAzLjgtNC43IDYuOC00LjcgMS45IDAgMy44IC43IDUuMiAyLjFMMTI4IDQ1LjcgMTczLjggMi4xYzEuNC0xLjMgMy4yLTIuMSA1LjItMi4xIDMgMCA1LjggMS44IDYuOCA0LjcgMi40IDYuNSA2LjIgMTguNCA2LjIgMjcuMyAwIDI2LjUtMjEuOSA0Mi0yOS41IDQ2LjZsNzYuMiA3Mi42YzYgNS43IDEzLjkgOC44IDIyLjEgOC44bDIxOS4yIDAgMzIgMGM0MC4zIDAgNzguMiAxOSAxMDIuNCA1MS4ybDE5LjIgMjUuNmMxMC42IDE0LjEgNy43IDM0LjItNi40IDQ0LjhzLTM0LjIgNy43LTQ0LjgtNi40bC0xOS4yLTI1LjZjLTUuMy03LTExLjgtMTIuOC0xOS4yLTE3bDAgODcuNC0zNTIgMC00MC40LTk0LjNjLTMuOS05LjItMTUuMy0xMi42LTIzLjYtN2wtNDIuMSAyOGMtOS4xIDYuMS0xOS43IDkuMy0zMC43IDkuM2wtMiAwQzIzLjkgMjU2IDAgMjMyLjEgMCAyMDIuNyAwIDE5MC42IDQuMSAxNzguOSAxMS43IDE2OS40TDg3LjYgNzQuNkM3OC4xIDY3LjQgNjQgNTMuMiA2NCAzMnpNNTQ0IDM1MmwwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC02NC0xNjAgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTEyOCAzNTIgMHpNMjU2IDI4MGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTI0OC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAwek0zNjggMjgwYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhU3F1YXJlQXJyb3dVcFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1hcnJvdy11cC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJleHRlcm5hbC1saW5rLXNxdWFyZSJdLCAiZjE0YyIsICJNMzg0IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMHpNMjcyIDI5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0xMTIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NC4xIDAtMTAzIDEwM2MtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDEwMy0xMDMgMCA1NC4xeiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtTcXVhcmUgPSBmYVNxdWFyZUFycm93VXBSaWdodDsKICAgIGZhRmVycnkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmVycnkiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRlYSIsICJNMjI0IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyTDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOC0uMSAwYy4xIC43IC4xIDEuMyAuMSAyIDAgMzAuMi03LjYgNTkuOC0yMiA4Ni4zbC0xMi43IDIzLjMtLjYgMWMtMjIuMy0xMS4zLTQ2LjUtMTYuOC03MC44LTE2LjctMzIuNSAuMi02NC45IDEwLjctOTIuNCAzMS40LTIyLjEgMTYuNi0yOS4xIDE2LjYtNTEuMiAwLTI4LjEtMjEuMS02MS4zLTMxLjYtOTQuNC0zMS40LTIzLjYgLjItNDcuMSA1LjctNjguNyAxNi43bC0uNi0xLTEyLjctMjMuM2MtMTQuNC0yNi41LTIyLTU2LjItMjItODYuMyAwLS43IDAtMS40IC4xLTJsLS4xIDAgMC0xMjhjMC00NC4yIDM1LjgtODAgODAtODBsNDggMCAwLTMyek0xNjAgMjU2bDMyMCAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNmwtMjg4IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMnpNNDAzLjQgNDc2LjFDMzc5LjEgNDk0LjMgMzUxLjEgNTEyIDMyMCA1MTJzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNb3NxdWl0byA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3NxdWl0byIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTJiIiwgIk0xNzguNSA0OTUuMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zUzEzMy41IDQ4MCAxMzguOSA0NjlsMS4yLTIuMiAzNi4yLTU4IDAtNDEgLjMtNGMuNi0zLjkgMi4yLTcuNyA0LjYtMTAuOWwzOS4zLTUyLjItNjYuMiA1OS41Yy0xNyAxNS4zLTM5IDIzLjctNjEuOSAyMy44bC04LjEgMGMtNDYuNiAwLTg0LjQtMzcuOC04NC40LTg0LjQgMC00MyAzMi40LTc5LjIgNzUuMS04My45bDEzMC41LTE0LjUtNDQuOC0zOC4zLTIuNC0yLjRjLTUuMy02LTcuMy0xNC40LTUuMy0yMi4zbDEzLjMtNTMuNC0yNS45LTM4LjktMS4zLTIuMWMtNS44LTEwLjgtMi43LTI0LjYgNy40LTMxLjcgMTAuMS03LjEgMjMuNy01LjEgMzEuNCA0LjNsMS41IDIgMzIgNDggMS40IDIuMmMyLjggNS4zIDMuNSAxMS42IDIuMSAxNy42bC0xMi4zIDQ5LjIgNTMuMyA0NS43IDAtMjguOGMwLTExLjggNi41LTIyLjEgMTYtMjcuN2wwLTYwLjUgLjMtMy4zYzEuNS03LjMgOC0xMi43IDE1LjctMTIuN3MxNC4yIDUuNSAxNS43IDEyLjdsLjMgMy4yIDAgNjAuNWM5LjYgNS41IDE2IDE1LjggMTYgMjcuN2wwIDI4LjkgNTMuNC00NS44LTEyLjMtNDkuMmMtMS41LTUuOS0uNy0xMi4yIDIuMS0xNy42bDEuNC0yLjIgMzItNDggMS41LTJjNy43LTkuNCAyMS4zLTExLjUgMzEuNC00LjMgMTAuMSA3LjEgMTMuMSAyMC45IDcuNCAzMS43bC0xLjMgMi4xLTI1LjkgMzguOSAxMy4zIDUzLjRjMiA4LS4xIDE2LjMtNS4zIDIyLjNsLTIuNCAyLjQtNDQuNyAzOC4zIDEzMC41IDE0LjVjNDIuOCA0LjggNzUuMSA0MC45IDc1LjEgODMuOSAwIDQ2LjYtMzcuOCA4NC40LTg0LjQgODQuNGwtOC4xIDBjLTIyLjggMC00NC45LTguNS02MS45LTIzLjhsLTY2LjEtNTkuNSAzOS4yIDUyLjJjMi40IDMuMiA0IDcgNC42IDEwLjlsLjMgNCAwIDQxIDM2LjIgNTggMS4yIDIuMWM1LjQgMTEgMiAyNC43LTguMyAzMS41cy0yMy44IDQuNC0zMS4zLTUuM2wtMS40LTItNDAtNjQtMS42LTMuMWMtMS40LTMuMS0yLjEtNi42LTIuMS0xMC4xbDAtMzkuOC0zMi40LTQzLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNzQuNi0zMi4zIDQzIDAgMzkuOGMwIDMuNS0uNyA2LjktMi4xIDEwLjFsLTEuNiAzLjEtNDAgNjQtMS40IDJ6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRkMSIsICJNMzIgNjRDMzIgMjguNyA2MC43IDAgOTYgMEwzNTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE0NC43Yy0zNS43IDIuOS02OC41IDE1LjYtOTYgMzUuNGwwLTRjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNCAwYy0xMy44IDE5LjItMjQuMSA0MS0zMC4xIDY0LjUtMS45LS40LTMuOS0uNS01LjktLjVsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgODAgNzQuOSAwYzYuMSAxNy4zIDE0LjYgMzMuNCAyNS4xIDQ4TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE0NCA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwem0xMTIgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnpNMTQ0IDIyNGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTE0MC43LTY3LjNjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42bDI4LjcgMjguNy04OS40IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODkuNCAwLTI4LjcgMjguN2MtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDU2LTU2YzYuMi02LjIgNi4yLTE2LjQgMC0yMi42bC01Ni01NmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDB6Il0KICAgIH07CiAgICBmYUxlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODU5NiwgImFycm93cy1hbHQtaCJdLCAiZjMzNyIsICJNNTAyLjYgNDA2LjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzNTIgNDkyLjkgMzUyIDQ4MGwwLTY0LTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyMCAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3pNOS40IDE1MC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmM5LjItOS4yIDIyLjktMTEuOSAzNC45LTYuOVMxNjAgMTkuMSAxNjAgMzJsMCA2NCAzMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIwIDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtOTYtOTZ6Il0KICAgIH07CiAgICBmYUFycm93c0FsdEggPSBmYUxlZnRSaWdodDsKICAgIGZhVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA3NCIsICJNMjk2IDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQwYzAgNDQuMS01My4zIDY2LjEtODQuNSAzNS0xNS42LTE1LjYtNDAuOS0xNS42LTU2LjYgMHMtMTUuNiA0MC45IDAgNTYuNmMzMS4yIDMxLjIgOS4xIDg0LjUtMzUgODQuNS0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwYzQ0LjEgMCA2Ni4xIDUzLjMgMzUgODQuNS0xNS42IDE1LjYtMTUuNiA0MC45IDAgNTYuNnM0MC45IDE1LjYgNTYuNiAwYzMxLjItMzEuMiA4NC41LTkuMSA4NC41IDM1IDAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBjMC00NC4xIDUzLjMtNjYuMSA4NC41LTM1IDE1LjYgMTUuNiA0MC45IDE1LjYgNTYuNiAwczE1LjYtNDAuOSAwLTU2LjZjLTMxLjItMzEuMi05LjEtODQuNSAzNS04NC41IDIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwYy00NC4xIDAtNjYuMS01My4zLTM1LTg0LjUgMTUuNi0xNS42IDE1LjYtNDAuOSAwLTU2LjZzLTQwLjktMTUuNi01Ni42IDBDMzQ5LjMgMTA2LjEgMjk2IDg0LjEgMjk2IDQwek0xNjAgMjI0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTE2MCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdlbTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTQyXSwgImYzYTUiLCAiTTExNi43IDMzLjhjNC41LTYuMSAxMS43LTkuOCAxOS4zLTkuOGwyNDAgMGM3LjYgMCAxNC44IDMuNiAxOS4zIDkuOGwxMTIgMTUyYzYuOCA5LjIgNi4xIDIxLjktMS41IDMwLjRsLTIzMiAyNTZjLTQuNSA1LTExIDcuOS0xNy44IDcuOXMtMTMuMi0yLjktMTcuOC03LjlsLTIzMi0yNTZjLTcuNy04LjUtOC4zLTIxLjItMS41LTMwLjRsMTEyLTE1MnptMzguNSAzOS44Yy0zLjMgMi41LTQuMiA3LTIuMSAxMC41TDIxMC41IDE3OS44IDYzLjMgMTkyYy00LjEgLjMtNy4zIDMuOC03LjMgOHMzLjIgNy42IDcuMyA4bDE5MiAxNmMuNCAwIC45IDAgMS4zIDBsMTkyLTE2YzQuMS0uMyA3LjMtMy44IDcuMy04cy0zLjItNy42LTcuMy04bC0xNDcuMi0xMi4zIDU3LjQtOTUuNmMyLjEtMy41IDEuMi04LjEtMi4xLTEwLjVzLTcuOS0yLTEwLjcgMUwyNTYgMTcyLjIgMTY1LjkgNzQuNmMtMi44LTMtNy40LTMuNC0xMC43LTF6Il0KICAgIH07CiAgICBmYVRvaWxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2lsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjg3MDFdLCAiZjdkOCIsICJNMjQgMEMxMC43IDAgMCAxMC43IDAgMjRTMTAuNyA0OCAyNCA0OGw4IDAgMCAxNDguOWMtMS45IDEuNC0zLjggMi45LTUuNiA0LjQtMTUuNSAxMy4yLTI2LjQgMzEuNi0yNi40IDU0LjYgMCA0Ni45IDE0LjMgODQuMSAzNyAxMTIuNSAxNC4yIDE3LjcgMzEuMSAzMS4zIDQ4LjUgNDEuOEw2NS42IDQ2OS45Yy0zLjMgOS44LTEuNiAyMC41IDQuNCAyOC44Uzg1LjcgNTEyIDk2IDUxMmwyNTYgMGMxMC4zIDAgMTkuOS00LjkgMjYtMTMuM3M3LjctMTkuMSA0LjQtMjguOGwtMTkuOC01OS41YzE3LjQtMTAuNSAzNC4zLTI0LjEgNDguNS00MS44IDIyLjctMjguNCAzNy02NS41IDM3LTExMi41IDAtMjMuMS0xMC45LTQxLjUtMjYuNC01NC42LTEuOC0xLjUtMy43LTMtNS42LTQuNGwwLTE0OC45IDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFM0MzcuMyAwIDQyNCAwTDI0IDB6TTk2IDgwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZ6TTIyNCAyODhjLTg4LjQgMC0xNjAtMTQuMy0xNjAtMzJzNzEuNi0zMiAxNjAtMzIgMTYwIDE0LjMgMTYwIDMyLTcxLjYgMzItMTYwIDMyeiJdCiAgICB9OwogICAgZmFTaW5nbGVRdW90ZUxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luZ2xlLXF1b3RlLWxlZnQiLAogICAgICBpY29uOiBbMTkyLCA1MTIsIFtdLCAiZTgxYiIsICJNMTI4IDk2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjE2QzAgMTQ5LjcgNTMuNyA5NiAxMjAgOTZsOCAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWJpbGxzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUxZjMiLCAiTTE2MCAzMmMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzUyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMMTYwIDMyem0xNzYgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTE2MCAxNTJsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxMTJjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek01MDQgMTU5LjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTUxMiAyNjRsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek00OCAxNTJjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAxMzguNyAwIDE1MkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzOTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNEw2NCA0MzJjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTI2NHoiXQogICAgfTsKICAgIGZhVGFibGV0QnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxldC1idXR0b24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjEwYSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHpNMjI0IDQwMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVJlY3RhbmdsZVhtYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUteG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjE2NCwgInJlY3RhbmdsZS10aW1lcyIsICJ0aW1lcy1yZWN0YW5nbGUiLCAid2luZG93LWNsb3NlIl0sICJmNDEwIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHpNMTY3IDE2N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGw1NSA1NSA1NS01NWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU1IDU1IDU1IDU1YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTU1LTU1LTU1IDU1Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU1LTU1LTU1LTU1Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhUmVjdGFuZ2xlVGltZXMyID0gZmFSZWN0YW5nbGVYbWFyazI7CiAgICBmYVRpbWVzUmVjdGFuZ2xlMiA9IGZhUmVjdGFuZ2xlWG1hcmsyOwogICAgZmFXaW5kb3dDbG9zZTIgPSBmYVJlY3RhbmdsZVhtYXJrMjsKICAgIGZhV3JlbmNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndyZW5jaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODI5NV0sICJmMGFkIiwgIk01MDkuNCA5OC42YzcuNi03LjYgMjAuMy01LjcgMjQuMSA0LjMgNi44IDE3LjcgMTAuNSAzNyAxMC41IDU3LjEgMCA4OC40LTcxLjYgMTYwLTE2MCAxNjAtMTcuNSAwLTM0LjQtMi44LTUwLjItOEwxNDYuOSA0OTguOWMtMjguMSAyOC4xLTczLjcgMjguMS0xMDEuOCAwcy0yOC4xLTczLjcgMC0xMDEuOEwyMzIgMjEwLjJjLTUuMi0xNS44LTgtMzIuNi04LTUwLjIgMC04OC40IDcxLjYtMTYwIDE2MC0xNjAgMjAuMSAwIDM5LjQgMy43IDU3LjEgMTAuNSAxMCAzLjggMTEuOCAxNi41IDQuMyAyNC4xbC04OC43IDg4LjdjLTMgMy00LjcgNy4xLTQuNyAxMS4zbDAgNDEuNGMwIDguOCA3LjIgMTYgMTYgMTZsNDEuNCAwYzQuMiAwIDguMy0xLjcgMTEuMy00LjdsODguNy04OC43eiJdCiAgICB9OwogICAgZmFUcmFzaENhbjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbNjE0NjAsICJ0cmFzaC1hbHQiXSwgImYyZWQiLCAiTTEzNi43IDUuOUMxNDEuMS03LjIgMTUzLjMtMTYgMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptODggNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTkyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xOTJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTEwNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTkyYzAtMTMuMy0xMC43LTI0LTI0LTI0em0xMDQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxOTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTE5MmMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhVHJhc2hBbHQyID0gZmFUcmFzaENhbjI7CiAgICBmYVRhYmxlQ2VsbHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgiXSwgImYwMGEiLCAiTTM4NCA5NmwwIDY0LTY0IDAgMC02NCA2NCAwem0wIDEyOGwwIDY0LTY0IDAgMC02NCA2NCAwem0wIDEyOGwwIDY0LTY0IDAgMC02NCA2NCAwek0yNTYgMjg4bC02NCAwIDAtNjQgNjQgMCAwIDY0em0tNjQgNjRsNjQgMCAwIDY0LTY0IDAgMC02NHptLTY0LTY0bC02NCAwIDAtNjQgNjQgMCAwIDY0ek02NCAzNTJsNjQgMCAwIDY0LTY0IDAgMC02NHptMC0xOTJsMC02NCA2NCAwIDAgNjQtNjQgMHptMTI4IDBsMC02NCA2NCAwIDAgNjQtNjQgMHpNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnoiXQogICAgfTsKICAgIGZhVGggPSBmYVRhYmxlQ2VsbHM7CiAgICBmYVJpYmJvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWJib24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4OTVdLCAiZjRkNiIsICJNMjM1LjEgMGMzMy40IDAgNjQuNSAxNy40IDgxLjkgNDUuOSAxLjIgMiAxMyAyMS4zIDM1LjMgNTcuOCAyMS4xIDM0LjUgMTguMyA3OC41LTcgMTEwTDI3OC4zIDI5Ny43IDM2NC41IDQwNmM1LjUgNi45IDQuNCAxNi45LTIuNSAyMi41bC04MCA2NGMtNi45IDUuNS0xNyA0LjQtMjIuNS0yLjVMMzguNiAyMTMuOEMxMy4zIDE4Mi4zIDEwLjUgMTM4LjMgMzEuNiAxMDMuOCA1NCA2Ny4yIDY1LjcgNDcuOSA2NyA0NS45IDg0LjQgMTcuNCAxMTUuNCAwIDE0OC45IDBsODYuMyAwek0xOTIgMTg5LjJsNDguNi02MS4yLTk3LjMgMCA0OC42IDYxLjJ6TTc1IDMzNi4ybDg2LjIgMTA3LjgtMzYuOCA0NmMtNS41IDYuOS0xNS42IDgtMjIuNSAyLjVsLTgwLTY0Yy02LjktNS41LTgtMTUuNi0yLjUtMjIuNUw3NSAzMzYuMnoiXQogICAgfTsKICAgIGZhTGFuZG1hcmtGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmRtYXJrLWZsYWciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTUxYyIsICJNMzUyLTMyTDI0MC0zMmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTQ0LTE3NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2IDAgMCAyMjQtNTEuMiAzOC40QzQuNyA0NjAuNCAwIDQ2OS45IDAgNDgwIDAgNDk3LjcgMTQuMyA1MTIgMzIgNTEybDQ0OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMyIDAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZsLTUxLjItMzguNCAwLTIyNCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xOTIgMCAwLTY0IDgwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtNjRjMC04LjgtNy4yLTE2LTE2LTE2em00OCAyMjRsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAwem0tMTEyIDBsMCAyMjQtNjQgMCAwLTIyNCA2NCAweiJdCiAgICB9OwogICAgZmFVcERvd25MZWZ0UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXAtZG93bi1sZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93cy1hbHQiXSwgImYwYjIiLCAiTTI3OC42IDkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBsLTY0IDY0Yy05LjIgOS4yLTExLjkgMjIuOS02LjkgMzQuOVMxNzkuMSAxMjggMTkyIDEyOGwzMiAwIDAgOTYtOTYgMCAwLTMyYzAtMTIuOS03LjgtMjQuNi0xOS44LTI5LjZzLTI1LjctMi4yLTM0LjkgNi45bC02NCA2NGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjOS4yIDkuMiAyMi45IDExLjkgMzQuOSA2LjlTMTI4IDMzMi45IDEyOCAzMjBsMC0zMiA5NiAwIDAgOTYtMzIgMGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHMtMi4yIDI1LjcgNi45IDM0LjlsNjQgNjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsNjQtNjRjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzMyLjkgMzg0IDMyMCAzODRsLTMyIDAgMC05NiA5NiAwIDAgMzJjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOWw2NC02NGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtNjQtNjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzM4NCAxNzkuMSAzODQgMTkybDAgMzItOTYgMCAwLTk2IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6Il0KICAgIH07CiAgICBmYUFycm93c0FsdCA9IGZhVXBEb3duTGVmdFJpZ2h0OwogICAgZmFDYXJTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NjYzXSwgImY1ZTQiLCAiTTE0NyAxMDYuN2wtMjkuOCA4NS4zIDEyMi45IDAgMC05Ni03Ny45IDBjLTYuOCAwLTEyLjkgNC4zLTE1LjEgMTAuN3pNNDguNiAxOTMuOUw4Ni41IDg1LjZDOTcuOCA1My41IDEyOC4xIDMyIDE2Mi4xIDMyTDM2MCAzMmMyNS4yIDAgNDguOSAxMS45IDY0IDMybDk2LjIgMTI4LjNDNTg3LjEgMTk2LjUgNjQwIDI1Mi4xIDY0MCAzMjBsMCAxNmMwIDM1LjMtMjguNyA2NC02NCA2NGwtMTYuNCAwYy00IDQ0LjktNDEuNyA4MC04Ny42IDgwcy04My42LTM1LjEtODcuNi04MGwtMTQ0LjcgMGMtNCA0NC45LTQxLjcgODAtODcuNiA4MHMtODMuNi0zNS4xLTg3LjYtODBsLS40IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtODBjMC0zMC4xIDIwLjctNTUuMyA0OC42LTYyLjF6TTQ0MCAxOTJsLTY3LjItODkuNmMtMy00LTcuOC02LjQtMTIuOC02LjRsLTcyIDAgMCA5NiAxNTIgMHpNMTUyIDQzMmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6bTM2MC00MGE0MCA0MCAwIDEgMCAtODAgMCA0MCA0MCAwIDEgMCA4MCAweiJdCiAgICB9OwogICAgZmFUcmFzaEFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtYXJyb3ctdXAiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidHJhc2gtcmVzdG9yZSJdLCAiZjgyOSIsICJNMTY3LjEtMTZsMTEzLjkgMGMxMy44IDAgMjYgOC44IDMwLjQgMjEuOUwzMjAgMzIgNDE2IDMyYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRTMTQuMyAzMiAzMiAzMmw5NiAwIDguNy0yNi4xQzE0MS4xLTcuMiAxNTMuMy0xNiAxNjcuMS0xNnpNMzIgMTQ0bDM4NCAwLTIxLjEgMzIzLjFDMzkzLjMgNDkyLjQgMzcyLjMgNTEyIDM0NyA1MTJMMTAxIDUxMmMtMjUuMyAwLTQ2LjMtMTkuNi00Ny45LTQ0LjlMMzIgMTQ0em0yMDkgNzljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwbC03MiA3MmMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDMxLTMxIDAgMTAyLjFjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwMi4xIDMxIDMxYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzItNzJ6Il0KICAgIH07CiAgICBmYVRyYXNoUmVzdG9yZSA9IGZhVHJhc2hBcnJvd1VwOwogICAgZmFMaWZlUmluZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlmZS1yaW5nIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxY2QiLCAiTTM2Ny4yIDQxMi41QzMzNS45IDQzNC45IDI5Ny41IDQ0OCAyNTYgNDQ4cy03OS45LTEzLjEtMTExLjItMzUuNWw1OC01OGMxNS44IDguNiAzNCAxMy41IDUzLjMgMTMuNXMzNy40LTQuOSA1My4zLTEzLjVsNTggNTh6bTkwLjcgLjhjMzMuOC00My40IDU0LTk4IDU0LTE1Ny4zUzQ5MS44IDE0Mi4xIDQ1OCA5OC43YzktMTIuNSA3LjktMzAuMS0zLjQtNDEuM1M0MjUuOCA0NSA0MTMuMyA1NEMzNjkuOSAyMC4yIDMxNS4zIDAgMjU2IDBTMTQyLjEgMjAuMiA5OC43IDU0Yy0xMi41LTktMzAuMS03LjktNDEuMyAzLjRTNDUgODYuMiA1NCA5OC43QzIwLjIgMTQyLjEgMCAxOTYuNyAwIDI1NlMyMC4yIDM2OS45IDU0IDQxMy4zYy05IDEyLjUtNy45IDMwLjEgMy40IDQxLjNTODYuMiA0NjcgOTguNyA0NThjNDMuNCAzMy44IDk4IDU0IDE1Ny4zIDU0czExMy45LTIwLjIgMTU3LjMtNTRjMTIuNSA5IDMwLjEgNy45IDQxLjMtMy40czEyLjQtMjguOCAzLjQtNDEuM3ptLTQ1LjUtNDYuMWwtNTgtNThjOC42LTE1LjggMTMuNS0zNCAxMy41LTUzLjNzLTQuOS0zNy40LTEzLjUtNTMuM2w1OC01OEM0MzQuOSAxNzYuMSA0NDggMjE0LjUgNDQ4IDI1NnMtMTMuMSA3OS45LTM1LjUgMTExLjJ6TTM2Ny4yIDk5LjVsLTU4IDU4Yy0xNS44LTguNi0zNC0xMy41LTUzLjMtMTMuNXMtMzcuNCA0LjktNTMuMyAxMy41bC01OC01OEMxNzYuMSA3Ny4xIDIxNC41IDY0IDI1NiA2NHM3OS45IDEzLjEgMTExLjIgMzUuNXpNMTU3LjUgMzA5LjNsLTU4IDU4Qzc3LjEgMzM1LjkgNjQgMjk3LjUgNjQgMjU2czEzLjEtNzkuOSAzNS41LTExMS4ybDU4IDU4Yy04LjYgMTUuOC0xMy41IDM0LTEzLjUgNTMuM3M0LjkgMzcuNCAxMy41IDUzLjN6TTIwOCAyNTZhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHoiXQogICAgfTsKICAgIGZhQ29weXJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3B5cmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNjldLCAiZjFmOSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwNS4xIDMwNi45YzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCA5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjljLTQ2LjkgNDYuOS0xMjIuOCA0Ni45LTE2OS43IDBzLTQ2LjktMTIyLjggMC0xNjkuNyAxMjIuOC00Ni45IDE2OS43IDBjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMjguMS0yOC4xLTczLjctMjguMS0xMDEuOCAwcy0yOC4xIDczLjcgMCAxMDEuOHoiXQogICAgfTsKICAgIGZhRmlsZVByZXNjcmlwdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXByZXNjcmlwdGlvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNTcyIiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNODggMTkyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDE0NGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgMjIuNSAwIDU4LjQgNTUtMzMuNCAzMS42Yy05LjYgOS4xLTEwLjEgMjQuMy0uOSAzMy45czI0LjMgMTAuMSAzMy45IC45bDM1LjQtMzMuNSAzNS42IDMzLjVjOS43IDkuMSAyNC44IDguNiAzMy45LTFzOC42LTI0LjgtMS0zMy45bC0zMy42LTMxLjYgMzMuNi0zMS44YzkuNi05LjEgMTAuMS0yNC4zIC45LTMzLjlzLTI0LjMtMTAuMS0zMy45LS45bC0zNS43IDMzLjctNDAuOS0zOC41YzEyLjktMTEuNyAyMS4xLTI4LjYgMjEuMS00Ny41IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01NiAwem0zMiA4MGwtOCAwIDAtMzIgMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZzLTcuMiAxNi0xNiAxNmwtMjQgMHoiXQogICAgfTsKICAgIGZhRXJhc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVyYXNlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMTJkIiwgIk0xNzguNSA0MTZsMTIzIDAgNjUuMy02NS4zLTE3My41LTE3My41LTEyNi43IDEyNi43IDExMiAxMTJ6TTIyNCA0ODBsLTQ1LjUgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMTcgMzQ1QzYuMSAzMzQuMSAwIDMxOS40IDAgMzA0czYuMS0zMC4xIDE3LTQxTDI2MyAxN0MyNzMuOSA2LjEgMjg4LjYgMCAzMDQgMHMzMC4xIDYuMSA0MSAxN0w1MjcgMTk5YzEwLjkgMTAuOSAxNyAyNS42IDE3IDQxcy02LjEgMzAuMS0xNyA0MWwtMTM1IDEzNSAxMjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjg4IDB6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzc1N0YXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1zdGFydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJob3VyZ2xhc3MtMSJdLCAiZjI1MSIsICJNMzIgMEMxNC4zIDAgMCAxNC4zIDAgMzJTMTQuMyA2NCAzMiA2NGwwIDExYzAgNDIuNCAxNi45IDgzLjEgNDYuOSAxMTMuMWw2Ny45IDY3LjktNjcuOSA2Ny45QzQ4LjkgMzUzLjkgMzIgMzk0LjYgMzIgNDM3bDAgMTFjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMWMwLTQyLjQtMTYuOS04My4xLTQ2LjktMTEzLjFsLTY3LjktNjcuOSA2Ny45LTY3LjljMzAtMzAgNDYuOS03MC43IDQ2LjktMTEzLjFsMC0xMWMxNy43IDAgMzItMTQuMyAzMi0zMlMzNjkuNyAwIDM1MiAwTDMyIDB6TTI4OCA0MzdsMCAxMS0xOTIgMCAwLTExYzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDY3LjktNjcuOSA2Ny45IDY3LjljMTggMTggMjguMSA0Mi40IDI4LjEgNjcuOXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMSA9IGZhSG91cmdsYXNzU3RhcnQ7CiAgICBmYUNpcmNsZUxlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE4NDAsICJhcnJvdy1hbHQtY2lyY2xlLWxlZnQiXSwgImYzNTkiLCAiTTUxMiAyNTZhMjU2IDI1NiAwIDEgMCAtNTEyIDAgMjU2IDI1NiAwIDEgMCA1MTIgMHpNMTI0LjcgMjQ0LjdsMTA0LTEwNGM0LjYtNC42IDExLjUtNS45IDE3LjQtMy41czkuOSA4LjMgOS45IDE0LjhsMCA1NiA5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDAgMCA1NmMwIDYuNS0zLjkgMTIuMy05LjkgMTQuOHMtMTIuOSAxLjEtMTcuNC0zLjVsLTEwNC0xMDRjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZUxlZnQyID0gZmFDaXJjbGVMZWZ0MjsKICAgIGZhQ3J1emVpcm9TaWduID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNydXplaXJvLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTE1MiIsICJNMjQwIDk2Yy04OC40IDAtMTYwIDcxLjYtMTYwIDE2MCAwIDcxLjYgNDcuMSAxMzIuMyAxMTIgMTUyLjdMMTkyIDI1NmMwLTEzLjMgMTAuNy0yNCAyNC0yNCAxMi44IDAgMjMuMyAxMC4xIDI0IDIyLjcgMTUuNS05LjUgMzMuNS0xNC43IDUyLjMtMTQuN2wxMS44IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTExLjggMGMtMTguOCAwLTM2LjEgMTAtNDUuNCAyNi4zLTQuNSA3LjktNi45IDE2LjgtNi45IDI1LjlsMCA3NS44YzQyLjUgMCA4MS4xLTE2LjYgMTA5LjgtNDMuNiAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMkMzNTMuNyA0NTYuOCAyOTkuNSA0ODAgMjQwIDQ4MCAxMTYuMyA0ODAgMTYgMzc5LjcgMTYgMjU2UzExNi4zIDMyIDI0MCAzMmM1OS41IDAgMTEzLjcgMjMuMiAxNTMuNyA2MS4xIDEyLjkgMTIuMSAxMy40IDMyLjQgMS4zIDQ1LjJzLTMyLjQgMTMuNC00NS4yIDEuM0MzMjEuMSAxMTIuNiAyODIuNSA5NiAyNDAgOTZ6Il0KICAgIH07CiAgICBmYVNtb2tpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic21va2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY4NF0sICJmNDhkIiwgIk0zNjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDE5YzAgNDAuMyAxNiA3OSA0NC41IDEwNy41bDIxIDIxQzQ2OSAxOTEgNDgwIDIxNy40IDQ4MCAyNDVsMCAxOWMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE5YzAtMTQuOS01LjktMjkuMS0xNi40LTM5LjZsLTIxLTIxQzM1Ny4xIDE0Ni45IDMzNiA5NiAzMzYgNDNsMC0xOWMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNTUyIDI4OGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC0xOWMwLTQwLjMtMTYtNzktNDQuNS0xMDcuNWwtMjEtMjFDNDQzIDk3IDQzMiA3MC42IDQzMiA0M2wwLTE5YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxOWMwIDE0LjkgNS45IDI5LjEgMTYuNCAzOS42bDIxIDIxQzU1NC45IDE0MS4xIDU3NiAxOTIgNTc2IDI0NWwwIDE5YzAgMTMuMy0xMC43IDI0LTI0IDI0ek0zMjAgNDQ4bDk2IDAgMC0zMi05NiAwIDAgMzJ6TTAgNDE2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMyem01NzYtNDBsMCAxMTJjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMTJjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhU3F1YXJlUG9sbFZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1wb2xsLXZlcnRpY2FsIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInBvbGwiXSwgImY2ODEiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTU2IDE5MmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTExMmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMTg0IDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTQ4ek0yMjQgMTI4YzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMjA4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjA4YzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFQb2xsID0gZmFTcXVhcmVQb2xsVmVydGljYWw7CiAgICBmYVBlcnNvbkNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtbWludXMiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MCIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS02NCAwYzAgOC44LTcuMiAxNi0xNiAxNmwtMTI4IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTI4IDBjOC44IDAgMTYgNy4yIDE2IDE2eiJdCiAgICB9OwogICAgZmFCaW9oYXphcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmlvaGF6YXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTc2M10sICJmNzgwIiwgIk0yNjAgMTIuNmMwLTguMy03LjYtMTQuNS0xNS41LTEyLjEtNjAuOSAxOC44LTEwNS4xIDc1LjgtMTA1LjEgMTQzLjEgMCAyNS4xIDYuMSA0OC43IDE3IDY5LjUtMjEgMS44LTQyIDguMi02MS41IDE5LjUtNTcuOSAzMy42LTg0LjggMTAwLjItNzAuOSAxNjIuNSAxLjkgOC40IDExLjQgMTIgMTguOSA3LjYgNS0yLjkgNy42LTguNiA3LjEtMTQuNC0uMy0zLjMtLjQtNi42LS40LTEwLjEgMC0xMjMuNSAxODQuNC0xMjMuNSAxODQuNCAwIDAgODguNC05NC41IDExMy42LTE0OC4yIDc1LjQtNC41LTMuMi0xMC41LTMuOS0xNS4zLTEuMS03IDQuMS04LjYgMTMuNi0yLjcgMTkuMSA0Ni42IDQzLjggMTE4IDUzLjkgMTc2LjEgMjAuMiAxNy45LTEwLjQgMzIuOC0yMy45IDQ0LjUtMzkuNCAxMS43IDE1LjYgMjYuNiAyOS4xIDQ0LjUgMzkuNCA1OC4xIDMzLjcgMTI5LjUgMjMuNiAxNzYuMS0yMC4yIDUuOS01LjUgNC4zLTE1LjEtMi43LTE5LjEtNC44LTIuOC0xMC44LTIuMS0xNS4zIDEuMS01My43IDM4LjItMTQ4LjIgMTMtMTQ4LjItNzUuNCAwLTEyMy41IDE4NC40LTEyMy41IDE4NC40IDAgMCAzLjQtLjEgNi44LS40IDEwLjEtLjUgNS44IDIuMSAxMS41IDcuMSAxNC40IDcuNCA0LjMgMTcgLjggMTguOS03LjYgMTMuOS02Mi4yLTEzLTEyOC45LTcwLjktMTYyLjUtMTkuNS0xMS4zLTQwLjQtMTcuNy02MS41LTE5LjUgMTAuOS0yMC44IDE3LTQ0LjQgMTctNjkuNSAwLTY3LjMtNDQuMi0xMjQuMy0xMDUuMS0xNDMuMS03LjktMi40LTE1LjUgMy44LTE1LjUgMTIuMSAwIDUuOSA0IDExIDkuNSAxMy4yIDgzLjQgMzMuNiA3MC44IDE3OC40LTM3LjggMTc4LjRTMTY3LjEgNTkuNCAyNTAuNSAyNS44YzUuNS0yLjIgOS41LTcuMyA5LjUtMTMuMnpNMjQ4LjQgMjg4YTQwIDQwIDAgMSAxIDgwIDAgNDAgNDAgMCAxIDEgLTgwIDB6TTQzNSAzMTcuN2MtMTYuMiAwLTMxLjQgNS41LTQyLjEgMTUtMTAuMSA5LjEtMTguMSAyMy40LTE4LjEgNDUuNiAwIDIxLjEgNy4yIDM1IDE2LjUgNDQuMSAzMi4yLTI0LjYgNTUuNS02MC41IDYzLjktMTAxLjgtNi4zLTEuOS0xMy4yLTMtMjAuMi0zek0yMDIgMzc4LjNjMC0yMi4zLTgtMzYuNi0xOC4xLTQ1LjYtMTAuNy05LjYtMjUuOS0xNS00Mi4xLTE1LTcgMC0xMy45IDEtMjAuMiAzIDguNCA0MS4zIDMxLjYgNzcuMiA2My45IDEwMS44IDkuNC05LjEgMTYuNS0yMy4xIDE2LjUtNDQuMnptNDEuMi0yMjQuM2M5IDEwLjIgMjMuMiAxOC4yIDQ1LjIgMTguMnMzNi4yLTggNDUuMi0xOC4yYzYuNy03LjYgMTEuNS0xNy41IDEzLjYtMjguNC0xOC4zLTYuOC0zOC4yLTEwLjUtNTguOC0xMC41cy00MC41IDMuNy01OC44IDEwLjVjMi4yIDEwLjkgNi45IDIwLjggMTMuNiAyOC41eiJdCiAgICB9OwogICAgZmFCZWxsQ29uY2llcmdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlbGwtY29uY2llcmdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzE4LCAiY29uY2llcmdlLWJlbGwiXSwgImY1NjIiLCAiTTIxNiA2NGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNiAwIDAgMzMuM0MxMjQuOCAxNTYuNyA0MC4yIDI0My43IDMyLjYgMzUybDQ0Ni45IDBDNDcxLjggMjQzLjcgMzg3LjIgMTU2LjcgMjgwIDE0NS4zbDAtMzMuMyAxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwek0yNCA0MDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDY0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMMjQgNDAweiJdCiAgICB9OwogICAgZmFDb25jaWVyZ2VCZWxsID0gZmFCZWxsQ29uY2llcmdlOwogICAgZmFSdWxlckhvcml6b250YWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItaG9yaXpvbnRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTQ3IiwgIk00OCAzODRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMTc2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDI0IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCA0OCAwIDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyIDQ4IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCA0OCAwIDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyIDQ4IDAgMCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTEwNCAyNCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTYwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDM4NHoiXQogICAgfTsKICAgIGZhSG9yc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG9yc2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMTRdLCAiZjZmMCIsICJNNDQ4IDIzOC4xbDAtNzguMSAxNiAwIDkuOCAxOS42YzEyLjUgMjUuMSA0Mi4yIDM2LjQgNjguMyAyNiAyMC41LTguMiAzMy45LTI4IDMzLjktNTAuMUw1NzYgODBjMC0xOS4xLTguNC0zNi4zLTIxLjctNDhsNS43IDBjOC44IDAgMTYtNy4yIDE2LTE2UzU2OC44IDAgNTYwIDBMNDQ4IDBDMzc3LjMgMCAzMjAgNTcuMyAzMjAgMTI4bC0xNzEuMiAwQzExOC4xIDEyOCA5MS4yIDE0NC4zIDc2LjMgMTY4LjggMzMuMiAxNzQuNSAwIDIxMS40IDAgMjU2bDAgNTZjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTU2YzAtMTMuNCA2LjYtMjUuMiAxNi43LTMyLjUgMS42IDEzIDYuMyAyNS40IDEzLjYgMzYuNGwyOC4yIDQyLjRjOC4zIDEyLjQgNi40IDI4LjctMS4yIDQxLjYtMTYuNSAyOC0yMC42IDYyLjItMTAgOTMuOWwxNy41IDUyLjRjNC40IDEzLjEgMTYuNiAyMS45IDMwLjQgMjEuOWwzMy43IDBjMjEuOCAwIDM3LjMtMjEuNCAzMC40LTQyLjFsLTIwLjgtNjIuNWMtMi4xLTYuNC0uNS0xMy40IDQuMy0xOC4ybDEyLjctMTIuN2MxMy4yLTEzLjIgMjAuNi0zMS4xIDIwLjYtNDkuNyAwLTIuMy0uMS00LjYtLjMtNi45bDg0IDI0YzQuMSAxLjIgOC4yIDIuMSAxMi4zIDIuOEwzMjAgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjQuM2MxOS4yLTE5LjIgMzEuNS00NS43IDMyLTc1LjdsMCAwIDAtMS45ek00OTYgNjRhMTYgMTYgMCAxIDEgMCAzMiAxNiAxNiAwIDEgMSAwLTMyeiJdCiAgICB9OwogICAgZmFDYWxlbmRhcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FsZW5kYXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxOTcsIDEyODE5OF0sICJmMTMzIiwgIk0xMjggMEMxMTAuMyAwIDk2IDE0LjMgOTYgMzJsMCAzMi0zMiAwQzI4LjcgNjQgMCA5Mi43IDAgMTI4bDAgNDggNDQ4IDAgMC00OGMwLTM1LjMtMjguNy02NC02NC02NGwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzItMTI4IDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMCAyMjRMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xOTItNDQ4IDB6Il0KICAgIH07CiAgICBmYUhhbmRzSG9sZGluZ0NoaWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzLWhvbGRpbmctY2hpbGQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRmYSIsICJNMzIwLTMyYTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHpNNDAgNjRjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxNjAuMmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2w1MS4xIDUxLjFjOC4zIDguMyAyMS4zIDkuNiAzMSAzLjEgMTIuOS04LjYgMTQuNy0yNi45IDMuNy0zNy44LTcuMy03LjMtMjMuMS0yMy4xLTQ3LjItNDcuMi0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4ybDAgMCAyNS4zIDI1LjNjMjEgMjEgMzIuOCA0OS41IDMyLjggNzkuMmwwIDc4LjljMCAyNi41LTIxLjUgNDgtNDggNDhsLTY2LjcgMGMtMTcgMC0zMy4zLTYuNy00NS4zLTE4LjdMMjguMSAzOTMuNEMxMC4xIDM3NS40IDAgMzUxIDAgMzI1LjVMMCAxMDRDMCA4MS45IDE3LjkgNjQgNDAgNjR6bTU2MCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgMjIxLjVjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlMNTEyIDQ5My4zYy0xMiAxMi0yOC4zIDE4LjctNDUuMyAxOC43TDQwMCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNzguOWMwLTI5LjcgMTEuOC01OC4yIDMyLjgtNzkuMmwyNS4zLTI1LjMgMCAwYzcuMy03LjMgMjMuMS0yMy4xIDQ3LjItNDcuMiAxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zYy0yNC4xIDI0LjEtMzkuOSAzOS45LTQ3LjIgNDcuMi0xMSAxMS05LjIgMjkuMiAzLjcgMzcuOCA5LjcgNi41IDIyLjcgNS4yIDMxLTMuMWw1MS4xLTUxLjFjMTItMTIgMTguNy0yOC4zIDE4LjctNDUuM0w1NjAgMTA0YzAtMjIuMSAxNy45LTQwIDQwLTQwek0zODQuNSAxNDlsLTE5LjgtMTYuNyAxMS4xIDg4LjhjMS42IDEzLjItNy43IDI1LjEtMjAuOCAyNi44cy0yNS4xLTcuNy0yNi44LTIwLjhsLTQuNC0zNS03LjYgMC00LjQgMzVjLTEuNiAxMy4yLTEzLjYgMjIuNS0yNi44IDIwLjhzLTIyLjUtMTMuNi0yMC44LTI2LjhsMTEuMS04OC44LTE5LjggMTYuN2MtMTAuMSA4LjYtMjUuMyA3LjMtMzMuOC0yLjhzLTcuMy0yNS4zIDIuOC0zMy44bDI3LjktMjMuNkMyNzEuMyA3Mi44IDI5NS4zIDY0IDMyMCA2NHM0OC43IDguOCA2Ny42IDI0LjdsMjcuOSAyMy42YzEwLjEgOC42IDExLjQgMjMuNyAyLjggMzMuOHMtMjMuNyAxMS40LTMzLjggMi44eiJdCiAgICB9OwogICAgZmFJdGFsaWMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaXRhbGljIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYwMzMiLCAiTTEyOCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNTguNyAwLTEzMy4zIDMyMCA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw1OC43IDAgMTMzLjMtMzIwLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyeiJdCiAgICB9OwogICAgZmFLaGFuZGEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAia2hhbmRhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc3Ml0sICJmNjZkIiwgIk0yNDAuNyA4YzguOS03LjQgMjEuOC03LjQgMzAuNyAwbDM3LjggMzEuNWM4LjcgNy4zIDExLjEgMTkuNiA2IDI5LjYtMS4yIDIuNC0yLjggNS41LTQuNiA5LjIgMzQuMiAxOS4yIDU3LjMgNTUuOCA1Ny4zIDk3LjhzLTIzLjEgNzguNi01Ny4zIDk3LjhjMS44IDMuNyAzLjMgNi44IDQuNiA5LjIgNS4xIDEwIDIuNyAyMi4zLTYgMjkuNmwtMzcuMiAzMSAwIDE5LjhjMjIuOS0xNS43IDQ4LjQtMzMuMyA3Ni43LTUyLjcgNDIuOC0yOS40IDY4LjQtNzggNjguNC0xMzBsMC0xMS4xYzAtMjMuOS03LjEtNDcuMy0yMC40LTY3LjItNS4xLTcuNy00LjYtMTcuOCAxLjctMjQuNiA2LjYtNy4xIDE3LjItOC4xIDI1LjItMi44IDI3LjUgMTguMSA4OS40IDY3LjUgODkuNCAxNDkuMSAwIDQ2LjUtMjAuMiA4OC42LTQxLjggMTIwLjQtMjEuNiAzMi00NS42IDU1LTU1LjMgNjMuOC03LjggNy4xLTE5IDcuOS0yNy42IDNsLTcwLjgtNDAuMy0zMi43IDIyLjUgNDUuNSAzMS4zYzEuOC0uNCAzLjctLjcgNS43LS43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMi4yIDAtMjIuMy05LjEtMjMuOC0yMWwtNDAuMi0yNy42IDAgMjguOWM5LjYgNS41IDE2IDE1LjkgMTYgMjcuNyAwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTExLjggNi40LTIyLjIgMTYtMjcuN2wwLTI4LjEtNDAuMyAyNy43Yy0xLjggMTEuNC0xMS44IDIwLjEtMjMuNyAyMC4xLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMi4yIDAgNC40IC4zIDYuNSAuOWw0NS44LTMxLjUtMzIuNy0yMi41LTcwLjggNDAuM2MtOC43IDQuOS0xOS44IDQuMS0yNy42LTMtOS43LTguOC0zMy43LTMxLjktNTUuMy02My44LTIxLjUtMzEuOC00MS44LTczLjktNDEuOC0xMjAuNCAwLTgxLjcgNjEuOS0xMzEuMSA4OS40LTE0OS4xIDguMS01LjMgMTguNi00LjMgMjUuMiAyLjggNi40IDYuOSA2LjggMTcgMS43IDI0LjYtMTMuMyAxOS45LTIwLjQgNDMuMy0yMC40IDY3LjJsMCAxMS4xYzAgNTEuOSAyNS42IDEwMC42IDY4LjQgMTMwIDI4LjQgMTkuNiA1My43IDM2LjkgNzUuNiA1MmwwLTE5LjEtMzcuMi0zMWMtOC43LTcuMy0xMS4xLTE5LjYtNi0yOS42IDEuMi0yLjQgMi44LTUuNSA0LjYtOS4yLTM0LjItMTkuMi01Ny4zLTU1LjgtNTcuMy05Ny44czIzLjEtNzguNiA1Ny4zLTk3LjhjLTEuOC0zLjctMy4zLTYuOC00LjYtOS4yLTUuMS0xMC0yLjctMjIuMyA2LTI5LjZMMjQwLjcgOHpNMjIwLjMgMTIyLjljLTE3IDExLjUtMjguMiAzMS0yOC4yIDUzLjFzMTEuMiA0MS42IDI4LjIgNTMuMWM2LjgtMTkuMiAxMS44LTM4LjQgMTEuOC01My4xcy00LjktMzMuOS0xMS44LTUzLjF6bTcxLjUgMTA2LjJjMTctMTEuNSAyOC4yLTMxIDI4LjItNTMuMXMtMTEuMi00MS42LTI4LjItNTMuMWMtNi44IDE5LjItMTEuOCAzOC40LTExLjggNTMuMXM0LjkgMzMuOSAxMS44IDUzLjF6Il0KICAgIH07CiAgICBmYUZhY2VGcm93bk9wZW4yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24tb3BlbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODU1MCwgImZyb3duLW9wZW4iXSwgImY1N2EiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNzYgMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTI4IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTE4Mi40IDM4Mi41Yy0xMi40IDUuMi0yNi41LTQuMS0yMS4xLTE2LjQgMTYtMzYuNiA1Mi40LTYyLjEgOTQuOC02Mi4xczc4LjggMjUuNiA5NC44IDYyLjFjNS40IDEyLjMtOC43IDIxLjYtMjEuMSAxNi40LTIyLjQtOS41LTQ3LjQtMTQuOC03My43LTE0LjhzLTUxLjMgNS4zLTczLjcgMTQuOHoiXQogICAgfTsKICAgIGZhRnJvd25PcGVuMiA9IGZhRmFjZUZyb3duT3BlbjI7CiAgICBmYUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoZWNrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAwMDMsIDEwMDA0XSwgImYwMGMiLCAiTTQzNC44IDcwLjFjMTQuMyAxMC40IDE3LjUgMzAuNCA3LjEgNDQuN2wtMjU2IDM1MmMtNS41IDcuNi0xNCAxMi4zLTIzLjQgMTMuMXMtMTguNS0yLjctMjUuMS05LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsMTAxLjUgMTAxLjUgMjM0LTMyMS43YzEwLjQtMTQuMyAzMC40LTE3LjUgNDQuNy03LjF6Il0KICAgIH07CiAgICBmYUZpbmdlcnByaW50ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbmdlcnByaW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NzciLCAiTTQ4IDI1NmMwLTExNC45IDkzLjEtMjA4IDIwOC0yMDggNjMuMSAwIDExOS42IDI4LjEgMTU3LjggNzIuNSA4LjYgMTAuMSAyMy44IDExLjIgMzMuOCAyLjZzMTEuMi0yMy44IDIuNi0zMy44QzQwMy4zIDM0LjYgMzMzLjcgMCAyNTYgMCAxMTQuNiAwIDAgMTE0LjYgMCAyNTZsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDB6bTQ1OC41LTUyLjljLTIuNy0xMy0xNS41LTIxLjMtMjguNC0xOC41cy0yMS4zIDE1LjUtMTguNSAyOC40YzIuOSAxMy45IDQuNSAyOC4zIDQuNSA0My4xbDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwYzAtMTguMS0xLjktMzUuOC01LjUtNTIuOXpNMjU2IDgwYy0xOSAwLTM3LjQgMy01NC41IDguNi0xNS4yIDUtMTguNyAyMy43LTguMyAzNS45IDcuMSA4LjMgMTguOCAxMC44IDI5LjQgNy45IDEwLjYtMi45IDIxLjgtNC40IDMzLjQtNC40IDcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMjQuOWMwIDI1LjItMS41IDUwLjMtNC40IDc1LjMtMS43IDE0LjYgOS40IDI3LjggMjQuMiAyNy44IDExLjggMCAyMS45LTguNiAyMy4zLTIwLjMgMy4zLTI3LjQgNS01NSA1LTgyLjdsMC0yNC45YzAtOTcuMi03OC44LTE3Ni0xNzYtMTc2ek0xNTAuNyAxNDguN2MtOS4xLTEwLjYtMjUuMy0xMS40LTMzLjktLjQtMjMuMSAyOS44LTM2LjggNjcuMS0zNi44IDEwNy43bDAgMjQuOWMwIDI0LjItMi42IDQ4LjQtNy44IDcxLjktMy40IDE1LjYgNy45IDMxLjEgMjMuOSAzMS4xIDEwLjUgMCAxOS45LTcgMjIuMi0xNy4zIDYuNC0yOC4xIDkuNy01Ni44IDkuNy04NS44bDAtMjQuOWMwLTI3LjIgOC41LTUyLjQgMjIuOS03My4xIDcuMi0xMC40IDgtMjQuNi0uMi0zNC4yek0yNTYgMTYwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjQuOWMwIDM1LjktNC42IDcxLjUtMTMuOCAxMDYuMS0zLjggMTQuMyA2LjcgMjkgMjEuNSAyOSA5LjUgMCAxNy45LTYuMiAyMC40LTE1LjQgMTAuNS0zOSAxNS45LTc5LjIgMTUuOS0xMTkuN2wwLTI0LjljMC0yOC43IDIzLjMtNTIgNTItNTJzNTIgMjMuMyA1MiA1MmwwIDI0LjljMCAzNi4zLTMuNSA3Mi40LTEwLjQgMTA3LjktMi43IDEzLjkgNy43IDI3LjIgMjEuOCAyNy4yIDEwLjIgMCAxOS03IDIxLTE3IDcuNy0zOC44IDExLjYtNzguMyAxMS42LTExOC4xbDAtMjQuOWMwLTUzLTQzLTk2LTk2LTk2em0yNCA5NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI0LjljMCA1OS45LTExIDExOS4zLTMyLjUgMTc1LjJsLTUuOSAxNS4zYy00LjggMTIuNCAxLjQgMjYuMyAxMy44IDMxczI2LjMtMS40IDMxLTEzLjhsNS45LTE1LjNDMjY3LjkgNDExLjkgMjgwIDM0Ni43IDI4MCAyODAuOWwwLTI0Ljl6Il0KICAgIH07CiAgICBmYUNoYXJnaW5nU3RhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFyZ2luZy1zdGF0aW9uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY1ZTciLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgMTJjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC0xMjcuN2MtMzIuNS0xMC4yLTU2LTQwLjUtNTYtNzYuM2wwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmwxNiAwIDAtNDhjMC04LjggNy4yLTE2IDE2LTE2czE2IDcuMiAxNiAxNmwwIDQ4IDMyIDAgMC00OGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgNDggMTYgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDM1LjgtMjMuNSA2Ni4xLTU2IDc2LjNMNTIwIDM4MGMwIDM3LjYtMzAuNCA2OC02OCA2OHMtNjgtMzAuNC02OC02OGwwLTEyYzAtMTcuNy0xNC4zLTMyLTMyLTMybDAgMTI5LjRjOS4zIDMuMyAxNiAxMi4yIDE2IDIyLjYgMCAxMy4zLTEwLjcgMjQtMjQgMjRMNzIgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNCAwLTEwLjUgNi43LTE5LjMgMTYtMjIuNkw2NCA2NHptODIuNyAxMjUuN2wzOSAwLTIwLjkgNjYuOWMtMi40IDcuNiAzLjMgMTUuNCAxMS4zIDE1LjQgMi45IDAgNS42LTEgNy44LTIuOWw5NC42LTgyYzMuMS0yLjcgNC45LTYuNiA0LjktMTAuNyAwLTcuOC02LjMtMTQuMS0xNC4xLTE0LjFsLTM5IDAgMjAuOS02Ni45YzIuNC03LjYtMy4zLTE1LjQtMTEuMy0xNS40LTIuOSAwLTUuNiAxLTcuOCAyLjlsLTk0LjYgODJjLTMuMSAyLjctNC45IDYuNi00LjkgMTAuNyAwIDcuOCA2LjMgMTQuMSAxNC4xIDE0LjF6Il0KICAgIH07CiAgICBmYVVzZXJMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItbG9jayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTAyIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAxIDAgMjQwIDEyMCAxMjAgMCAxIDEgMC0yNDB6TTE5NC4zIDMwNGw1OS40IDBjMjkuNyAwIDU3LjcgNy4zIDgyLjMgMjAuMWwwIDQuM2MtMTkuNiAxNy42LTMyIDQzLjEtMzIgNzEuNWwwIDk2YzAgNS41IC41IDEwLjkgMS4zIDE2LjFMNDUuNyA1MTJDMjkuMyA1MTIgMTYgNDk4LjcgMTYgNDgyLjMgMTYgMzgzLjggOTUuOCAzMDQgMTk0LjMgMzA0em0zMDEuNyAuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYU1vYmlsZVNjcmVlbkJ1dHRvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb2JpbGUtc2NyZWVuLWJ1dHRvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtb2JpbGUtYWx0Il0sICJmM2NkIiwgIk0xNiA2NEMxNiAyOC43IDQ0LjcgMCA4MCAwTDMwNCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDgwIDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMTYgNjR6bTY0IDBsMCAzMDQgMjI0IDAgMC0zMDQtMjI0IDB6TTE5MiA0NzJjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMiAxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFNb2JpbGVBbHQgPSBmYU1vYmlsZVNjcmVlbkJ1dHRvbjsKICAgIGZhQW5jaG9yQ2lyY2xlQ2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5jaG9yLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGFhIiwgIk0zMjAgOTZhMzIgMzIgMCAxIDEgLTY0IDAgMzIgMzIgMCAxIDEgNjQgMHpNMjg4IDBjLTUzIDAtOTYgNDMtOTYgOTYgMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgMjU3LjljLTYyLjktMTQuMy0xMTAuMi02OS43LTExMS45LTEzNi41bDE2LjEgMTQuMWMxMCA4LjcgMjUuMSA3LjcgMzMuOS0yLjNzNy43LTI1LjEtMi4zLTMzLjlsLTY0LTU2Yy05LTcuOS0yMi42LTcuOS0zMS42IDBsLTY0IDU2Yy0xMCA4LjctMTEgMjMuOS0yLjMgMzMuOXMyMy45IDExIDMzLjkgMi4zTDgwIDMwNy45YzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmdXaXRoQ2FuZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy13aXRoLWNhbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiYmxpbmQiXSwgImYyOWQiLCAiTTIyNC0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTYwIDIwNS4zbC0yMi42IDIyLjZjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDM3LjVjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zNy41YzAtMjUuNSAxMC4xLTQ5LjkgMjguMS02Ny45bDM0LjQtMzQuNGMyMy4yLTIzLjIgNTQuNi0zNi4yIDg3LjMtMzYuMiAzNi4xIDAgNzAuMyAxNS44IDkzLjggNDMuMWw2OC42IDgwYzExLjUgMTMuNCA5LjkgMzMuNi0zLjUgNDUuMXMtMzMuNiA5LjktNDUuMS0zLjVsLTU1LjctNjUgMCAxMTguNiAzNC41IDI5LjZjMTcuNyAxNS4yIDI5LjMgMzYuMiAzMi42IDU5LjNsMTIuNiA4OC4xYzIuNSAxNy41LTkuNyAzMy43LTI3LjIgMzYuMnMtMzMuNy05LjctMzYuMi0yNy4ybC0xMi42LTg4LjFjLTEuMS03LjctNS0xNC43LTEwLjktMTkuOGwtNzEuNC02MS4yYy0yMS4zLTE4LjItMzMuNS00NC45LTMzLjUtNzIuOWwwLTY5LjN6bS4xIDE2NS44YzIuNCAyLjMgNC44IDQuNiA3LjQgNi44bDQ2IDM5LjQtMi4yIDcuNmMtNC41IDE1LjctMTIuOSAzMC0yNC40IDQxLjVsLTY4LjMgNjguM2MtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjguMy02OC4zYzMuOC0zLjggNi42LTguNiA4LjEtMTMuOEwxNjAuMSAzNzF6bTIzMy41LTYyLjJjMTAuNi04IDI1LjYtNS44IDMzLjYgNC44bDE0NCAxOTJjOCAxMC42IDUuOCAyNS42LTQuOCAzMy42cy0yNS42IDUuOC0zMy42LTQuOGwtMTQ0LTE5MmMtOC0xMC42LTUuOC0yNS42IDQuOC0zMy42eiJdCiAgICB9OwogICAgZmFCbGluZCA9IGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lOwogICAgZmFGaWxlV2F2ZWZvcm0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13YXZlZm9ybSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJmaWxlLW1lZGljYWwtYWx0Il0sICJmNDc4IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtOTYgNjAuMyAwIDQ4LjggNjIuN2M1LjEgNi42IDEzLjMgMTAgMjEuNiA5LjFzMTUuNS02LjEgMTkuMS0xMy42bDQyLjktOTEuMiA5LjkgMTkuOGM0LjEgOC4xIDEyLjQgMTMuMyAyMS41IDEzLjNsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNTcuMiAwLTI1LjQtNTAuN2MtNC4xLTguMi0xMi42LTEzLjQtMjEuOC0xMy4zcy0xNy41IDUuNS0yMS40IDEzLjhsLTQ3LjMgMTAwLjYtMzItNDEuMUM4Ni40IDMwNy40IDc5LjQgMzA0IDcyIDMwNEwwIDMwNCAwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6Il0KICAgIH07CiAgICBmYUZpbGVNZWRpY2FsQWx0ID0gZmFGaWxlV2F2ZWZvcm07CiAgICBmYUhvdXNlQ3JhY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtY3JhY2siLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTNiMSIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGw4Ni40IDAtMzEuMy01Mi4yYy00LjEtNi44LTIuNi0xNS41IDMuNS0yMC41TDI1NiAzNjggMTk1LjggMjg1LjJjLTEwLjktMTUgOC4yLTMzLjUgMjIuOC0yMmwxMTcuOSA5Mi42YzggNi4zIDguMiAxOC40IC40IDI0LjlMMjU2IDQ0OCAyOTQuNCA1MTIgNDAwIDUxMmMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHoiXQogICAgfTsKICAgIGZhSGF0V2l6YXJkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhdC13aXphcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZlOCIsICJNNjQgNDAwbDg1LjctMjA4LjJjMTctNDEuMyA0Ny44LTc1LjMgODcuMi05Ni4zTDM4My44IDE3LjJjMTIuMy02LjYgMjYuNSA0LjcgMjMgMTguMkwzNjkuNiAxNzcuOGMtMS4xIDQuMS0xLjYgOC4zLTEuNiAxMi42IDAgNi4zIDEuMiAxMi42IDMuNiAxOC41bDc2LjQgMTkxLjEtMjA3LjEgMCAxMS44LTM1LjQgNDAuNC0xMy41YzYuNS0yLjIgMTAuOS04LjMgMTAuOS0xNS4ycy00LjQtMTMtMTAuOS0xNS4ybC00MC40LTEzLjUtMTMuNS00MC40QzIzNyAyNjAuNCAyMzAuOSAyNTYgMjI0IDI1NnMtMTMgNC40LTE1LjIgMTAuOWwtMTMuNSA0MC40LTQwLjQgMTMuNUMxNDguNCAzMjMgMTQ0IDMyOS4xIDE0NCAzMzZzNC40IDEzIDEwLjkgMTUuMmw0MC40IDEzLjUgMTEuOCAzNS40LTE0My4xIDB6TTI3OS42IDE0MS41Yy0xLjEtMy4zLTQuMS01LjUtNy42LTUuNXMtNi41IDIuMi03LjYgNS41bC02LjcgMjAuMi0yMC4yIDYuN2MtMy4zIDEuMS01LjUgNC4xLTUuNSA3LjZzMi4yIDYuNSA1LjUgNy42bDIwLjIgNi43IDYuNyAyMC4yYzEuMSAzLjMgNC4xIDUuNSA3LjYgNS41czYuNS0yLjIgNy42LTUuNWw2LjctMjAuMiAyMC4yLTYuN2MzLjMtMS4xIDUuNS00LjEgNS41LTcuNnMtMi4yLTYuNS01LjUtNy42bC0yMC4yLTYuNy02LjctMjAuMnpNMzIgNDQ4bDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVXNlckRvY3RvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWRvY3RvciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ1c2VyLW1kIl0sICJmMGYwIiwgIk0yMjQgOGExMjAgMTIwIDAgMSAwIDAgMjQwIDEyMCAxMjAgMCAxIDAgMC0yNDB6bTYwIDMxMi44Yy01LjQtLjUtMTEtLjgtMTYuNi0uOGwtODYuOSAwYy01LjYgMC0xMS4xIC4zLTE2LjYgLjhsMCA2Ny41YzE2LjUgNy42IDI4IDI0LjMgMjggNDMuNiAwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGMwLTE5LjQgMTEuNS0zNi4xIDI4LTQzLjZsMC01OC40QzYxIDM1MyAxNiA0MTMuNiAxNiA0ODQuNiAxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmwzNjEuMSAwYzE1LjEgMCAyNy40LTEyLjMgMjcuNC0yNy40IDAtNzEtNDUtMTMxLjUtMTA4LTE1NC42bDAgMzcuNGMyMy4zIDguMiA0MCAzMC41IDQwIDU2LjZsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMmMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC0zMmMwLTI2LjEgMTYuNy00OC4zIDQwLTU2LjZsMC00Ni42eiJdCiAgICB9OwogICAgZmFVc2VyTWQgPSBmYVVzZXJEb2N0b3I7CiAgICBmYUNoYXJ0QmFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1iYXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYmFyLWNoYXJ0Il0sICJmMDgwIiwgIk0zMiAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMzNmMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMODAgNDgwYy00NC4yIDAtODAtMzUuOC04MC04MEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem05NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTkyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyem0zMiA4MGwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTEybDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQmFyQ2hhcnQyID0gZmFDaGFydEJhcjI7CiAgICBmYVNwcmF5Q2FuU3BhcmtsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3ByYXktY2FuLXNwYXJrbGVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImFpci1mcmVzaGVuZXIiXSwgImY1ZDAiLCAiTTE2MCAzMmwwIDgwIDEyOCAwIDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJMMTkyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem0wIDEyOGMtNTMgMC05NiA0My05NiA5NmwwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwyMjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTIwOGMwLTUzLTQzLTk2LTk2LTk2bC0xMjggMHptNjQgOTZhODAgODAgMCAxIDEgMCAxNjAgODAgODAgMCAxIDEgMC0xNjB6TTQ0OCA0OGMwLTEuNC0xLTMtMi4yLTMuNkw0MTYgMzIgNDAzLjYgMi4yQzQwMyAxIDQwMS40IDAgNDAwIDBzLTMgMS0zLjYgMi4yTDM4NCAzMiAzNTQuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDM4NCA2NCAzOTYuNCA5My44QzM5NyA5NSAzOTguNiA5NiA0MDAgOTZzMy0xIDMuNi0yLjJMNDE2IDY0IDQ0NS44IDUxLjZDNDQ3IDUxIDQ0OCA0OS40IDQ0OCA0OHptNzYuNCA0NS44QzUyNSA5NSA1MjYuNiA5NiA1MjggOTZzMy0xIDMuNi0yLjJMNTQ0IDY0IDU3My44IDUxLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMzIgNTMxLjYgMi4yQzUzMSAxIDUyOS40IDAgNTI4IDBzLTMgMS0zLjYgMi4yTDUxMiAzMiA0ODIuMiA0NC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDUxMiA2NCA1MjQuNCA5My44em03LjIgMTAwLjRjLS42LTEuMi0yLjItMi4yLTMuNi0yLjJzLTMgMS0zLjYgMi4yTDUxMiAyMjQgNDgyLjIgMjM2LjRjLTEuMiAuNi0yLjIgMi4yLTIuMiAzLjYgMCAxLjQgMSAzIDIuMiAzLjZMNTEyIDI1NiA1MjQuNCAyODUuOGMuNiAxLjIgMi4yIDIuMiAzLjYgMi4yczMtMSAzLjYtMi4yTDU0NCAyNTYgNTczLjggMjQzLjZjMS4yLS42IDIuMi0yLjIgMi4yLTMuNiAwLTEuNC0xLTMtMi4yLTMuNkw1NDQgMjI0IDUzMS42IDE5NC4yek01MTIgMTQ0YzAtMS40LTEtMy0yLjItMy42TDQ4MCAxMjggNDY3LjYgOTguMkM0NjcgOTcgNDY1LjQgOTYgNDY0IDk2cy0zIDEtMy42IDIuMkw0NDggMTI4IDQxOC4yIDE0MC40Yy0xLjIgLjYtMi4yIDIuMi0yLjIgMy42IDAgMS40IDEgMyAyLjIgMy42TDQ0OCAxNjAgNDYwLjQgMTg5LjhjLjYgMS4yIDIuMiAyLjIgMy42IDIuMnMzLTEgMy42LTIuMkw0ODAgMTYwIDUwOS44IDE0Ny42YzEuMi0uNiAyLjItMi4yIDIuMi0zLjZ6Il0KICAgIH07CiAgICBmYUFpckZyZXNoZW5lciA9IGZhU3ByYXlDYW5TcGFya2xlczsKICAgIGZhQmFodFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFodC1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwYWMiLCAiTTEzNiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDQwLTc0LjQgMEMxNi44IDY0IDAgODAuOCAwIDEwMS42TDAgNDA2LjNjMCAyMyAxOC43IDQxLjcgNDEuNyA0MS43bDcwLjMgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA0OCAwYzYxLjkgMCAxMTItNTAuMSAxMTItMTEyIDAtNDAuMS0yMS4xLTc1LjMtNTIuNy05NS4xIDEzLjEtMTguMyAyMC43LTQwLjcgMjAuNy02NC45IDAtNjEuOS01MC4xLTExMi0xMTItMTEybC0xNiAwIDAtNDBjMC0xMy4zLTEwLjctMjQtMjQtMjR6TTExMiAxMjhsMCA5Ni00OCAwIDAtOTYgNDggMHptNDggOTZsMC05NiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC0xNiAwem0tNDggNjRsMCA5Ni00OCAwIDAtOTYgNDggMHptNDggOTZsMC05NiA0OCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4cy0yMS41IDQ4LTQ4IDQ4bC00OCAweiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtYXJyb3ctdXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidGVtcGVyYXR1cmUtdXAiXSwgImUwNDAiLCAiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yMTIuN2MwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIxMi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjR6TTQzOS4xIDkuNGw2NCA2NGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMGwtOS40LTkuNCAwIDE3OC43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTc4LjctOS40IDkuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjNsNjQtNjRjNi02IDE0LjEtOS40IDIyLjYtOS40czE2LjYgMy40IDIyLjYgOS40eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZVVwID0gZmFUZW1wZXJhdHVyZUFycm93VXA7CiAgICBmYVdlYkF3ZXNvbWUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndlYi1hd2Vzb21lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2ODIiLCAiTTM3Mi4yIDUyYzAgMjAuOS0xMi40IDM5LTMwLjIgNDcuMkw0NDggMTkyIDU1Mi40IDE3MS4xYy01LjMtNy43LTguNC0xNy4xLTguNC0yNy4xIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhjMCAyNi0yMC42IDQ3LjEtNDYuNCA0OEw0ODEgNDQyLjNjLTEwLjMgMjMtMzMuMiAzNy43LTU4LjQgMzcuN2wtMjA1LjIgMGMtMjUuMiAwLTQ4LTE0LjgtNTguNC0zNy43TDQ2LjQgMTkyQzIwLjYgMTkxLjEgMCAxNzAgMCAxNDQgMCAxMTcuNSAyMS41IDk2IDQ4IDk2czQ4IDIxLjUgNDggNDhjMCAxMC4xLTMuMSAxOS40LTguNCAyNy4xTDE5MiAxOTIgMjk4LjEgOTkuMWMtMTcuNy04LjMtMzAtMjYuMy0zMC00Ny4xIDAtMjguNyAyMy4zLTUyIDUyLTUyczUyIDIzLjMgNTIgNTJ6Il0KICAgIH07CiAgICBmYU5vbkJpbmFyeSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJub24tYmluYXJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU4MDciLCAiTTE5MiA1NDRjLTk3LjIgMC0xNzYtNzguOC0xNzYtMTc2IDAtODYuMyA2Mi4xLTE1OCAxNDQtMTczbDAtNDcuMi00OS43IDI0LjgtMyAxLjNjLTE1LjIgNS43LTMyLjUtLjgtMzkuOS0xNS43LTcuNC0xNC44LTIuMi0zMi42IDExLjUtNDEuM2wyLjgtMS42IDM4LjgtMTkuNC0zOC44LTE5LjRjLTE1LjgtNy45LTIyLjItMjcuMS0xNC4zLTQyLjkgNy40LTE0LjggMjQuOC0yMS40IDQwLTE1LjZsMyAxLjMgNDkuNyAyNC44IDAtNDQuMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgNDQuMiA0OS43LTI0LjggMy0xLjNjMTUuMi01LjggMzIuNSAuOCAzOS45IDE1LjZzMi4yIDMyLjctMTEuNSA0MS4zbC0yLjggMS42LTM4LjcgMTkuNCAzOC43IDE5LjNjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS03LjQgMTQuOC0yNC43IDIxLjQtMzkuOSAxNS42bC0zLTEuMy00OS43LTI0LjggMCA0Ny4yYzgxLjkgMTUuMSAxNDQgODYuOCAxNDQgMTczIDAgOTcuMi03OC44IDE3Ni0xNzYgMTc2em0wLTY0YTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhTiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJuIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTEwXSwgIjRlIiwgIk0yMS4xIDMzLjljMTIuNy00LjYgMjYuOS0uNyAzNS41IDkuNkwzMjAgMzU5LjYgMzIwIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzODRjMCAxMy41LTguNCAyNS41LTIxLjEgMzAuMXMtMjYuOSAuNy0zNS41LTkuNkw2NCAxNTIuNCA2NCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNTAuNSA4LjQgMzguNSAyMS4xIDMzLjl6Il0KICAgIH07CiAgICBmYUFycm93c1VwRG93bkxlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtdXAtZG93bi1sZWZ0LXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93cyJdLCAiZjA0NyIsICJNMjc4LjYgOS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsOS40LTkuNCAwIDExNC43LTExNC43IDAgOS40LTkuNGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMGwtNjQgNjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNsLTkuNC05LjQgMTE0LjcgMCAwIDExNC43LTkuNC05LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDY0IDY0YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC05LjQgOS40IDAtMTE0LjcgMTE0LjcgMC05LjQgOS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zbC02NC02NGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOS40IDkuNC0xMTQuNyAwIDAtMTE0LjcgOS40IDkuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC02NC02NHoiXQogICAgfTsKICAgIGZhQXJyb3dzID0gZmFBcnJvd3NVcERvd25MZWZ0UmlnaHQ7CiAgICBmYUhvdXNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2OCwgNjM0OTgsIDYzNTAwLCAiaG9tZSIsICJob21lLWFsdCIsICJob21lLWxnLWFsdCJdLCAiZjAxNSIsICJNMjc3LjggOC42Yy0xMi4zLTExLjQtMzEuMy0xMS40LTQzLjUgMGwtMjI0IDIwOGMtOS42IDktMTIuOCAyMi45LTggMzUuMVMxOC44IDI3MiAzMiAyNzJsMTYgMCAwIDE3NmMwIDM1LjMgMjguNyA2NCA2NCA2NGwyODggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3NiAxNiAwYzEzLjIgMCAyNS04LjEgMjkuOC0yMC4zczEuNi0yNi4yLTgtMzUuMWwtMjI0LTIwOHpNMjQwIDMyMGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTYtMTI4IDAgMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhSG9tZTIgPSBmYUhvdXNlMjsKICAgIGZhSG9tZUFsdDIgPSBmYUhvdXNlMjsKICAgIGZhSG9tZUxnQWx0MiA9IGZhSG91c2UyOwogICAgZmFTcGlubmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwaW5uZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjExMCIsICJNMjA4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTAgNDE2YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTQ4IDIwOGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTM2OCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek03NSAzNjkuMUE0OCA0OCAwIDEgMSAxNDIuOSA0MzcgNDggNDggMCAxIDEgNzUgMzY5LjF6TTc1IDc1QTQ4IDQ4IDAgMSAxIDE0Mi45IDE0Mi45IDQ4IDQ4IDAgMSAxIDc1IDc1ek00MzcgMzY5LjFBNDggNDggMCAxIDEgMzY5LjEgNDM3IDQ4IDQ4IDAgMSAxIDQzNyAzNjkuMXoiXQogICAgfTsKICAgIGZhR2F2ZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F2ZWwiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibGVnYWwiXSwgImYwZTMiLCAiTTE2OS42IDE1My40bC0xOC43LTE4LjdjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zTDI2NS42LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBMMzI5LjYtNi42YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDIxNC45IDE1My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHpNMjc2IDIxMS43bC0zMS40LTMxLjQgMTEyLTExMiAxMTkuNCAxMTkuNC0xMTIgMTEyLTMxLjQtMzEuNC0yMzIgMjMyYy0xNS42IDE1LjYtNDAuOSAxNS42LTU2LjYgMHMtMTUuNi00MC45IDAtNTYuNmwyMzItMjMyek0zOTAuOSAzNzQuNmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNMNTA1LjYgMjE0LjZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsMTguNyAxOC43YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zTDQ1NC45IDM5My40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTguNy0xOC43eiJdCiAgICB9OwogICAgZmFMZWdhbCA9IGZhR2F2ZWw7CiAgICBmYVRpY2tldFNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aWNrZXQtc2ltcGxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRpY2tldC1hbHQiXSwgImYzZmYiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCA4LjgtNy40IDE1LjctMTUuNyAxOC42LTE4LjggNi41LTMyLjMgMjQuNC0zMi4zIDQ1LjRzMTMuNSAzOC45IDMyLjMgNDUuNGM4LjMgMi45IDE1LjcgOS44IDE1LjcgMTguNmwwIDY0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC02NEMwIDMxMS4yIDcuNCAzMDQuMyAxNS43IDMwMS40IDM0LjUgMjk0LjkgNDggMjc3IDQ4IDI1NnMtMTMuNS0zOC45LTMyLjMtNDUuNEM3LjQgMjA3LjcgMCAyMDAuOCAwIDE5MmwwLTY0eiJdCiAgICB9OwogICAgZmFUaWNrZXRBbHQgPSBmYVRpY2tldFNpbXBsZTsKICAgIGZhRG92ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3ZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MzMwXSwgImY0YmEiLCAiTTQ5NiA2NGMxMy4yIDAgMjAuNyAxNS4xIDEyLjggMjUuNkw0ODAgMTI4IDQ4MCAzMDRjMCA3OS41LTY0LjUgMTQ0LTE0NCAxNDRsLTExMiAwLTQ2LjMgNDYuM2MtMTAuNCAxMC40LTI2LjUgMTIuNC0zOS4xIDQuOEw0MS41IDQ0MC45Yy0xNy0xMC4yLTE1LTM1LjUgMy40LTQyLjlMMTYwIDM1MkMyMy44IDMxMS4xIDcuNSAxNjkuOCAyMiA5NS43IDI1LjYgNzcuOSA0NS4zIDcxLjQgNjEuMyA4MC4yTDMyMCAyMjQgMzIwIDE0NGMwLTQ0LjIgMzUuOC04MCA4MC04MGw5NiAwem0tOTYgNTZhMjQgMjQgMCAxIDAgMCA0OCAyNCAyNCAwIDEgMCAwLTQ4ek0xODIuNS05LjZjMTIuNC0xMy43IDMzLjMtOC45IDQyLjUgNy4xbDU2LjQgOTguM2MtNS44IDE0LjQtOS4yIDMwLjEtOS40IDQ2LjVMMTM4LjEgNjhjMTAuMS0zMS42IDI3LTU4LjQgNDQuNC03Ny42eiJdCiAgICB9OwogICAgZmFUYXJwRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YXJwLWRyb3BsZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3YyIsICJNMjU2IDE2MGMzNS4zIDAgNjQtMjYuOSA2NC02MCAwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjUtNi4xLTcuNy0xNy41LTcuNy0yMy42IDAtMTguNSAyMy40LTUyLjIgNjkuNS01Mi4yIDkzLjUgMCAzMy4xIDI4LjcgNjAgNjQgNjB6TTM2OCA5NmMwIDYxLjktNTAuMSAxMTItMTEyIDExMlMxNDQgMTU3LjkgMTQ0IDk2YzAtMTEuMSAxLjYtMjEuOSA0LjYtMzJMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjc3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0w0OTMuMyAzMjIuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDUxMiAxMjhjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg0LjYgMGMzIDEwLjEgNC42IDIwLjkgNC42IDMyem04NS41IDE3NkwzMzYgMzg5LjUgMzM2IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5My41IDB6TTk2IDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYVRyZWVDaXR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyZWUtY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTg3IiwgIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4IDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDMyMGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTUyOCAxOTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNTEyIDMwNGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek05NiA0ODBsMC0xNjAtMTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODAgMC0yNi43IDEzLjEtNTAuMyAzMy4yLTY0LjktLjgtNC45LTEuMi0xMC0xLjItMTUuMSAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2bDAgOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCAxNjBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVR1cm5VcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0dXJuLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA1NDgsICJsZXZlbC11cC1hbHQiXSwgImYzYmYiLCAiTTE2OS40IDkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxMjggMTI4YzkuMiA5LjIgMTEuOSAyMi45IDYuOSAzNC45UzMzMi45IDE5MiAzMjAgMTkybC02NCAwIDAgMTYwYzAgODguNC03MS42IDE2MC0xNjAgMTYwbC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xNjAtNjQgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlsMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTGV2ZWxVcEFsdCA9IGZhVHVyblVwOwogICAgZmFUZW1wZXJhdHVyZVF1YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVtcGVyYXR1cmUtcXVhcnRlciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJ0ZW1wZXJhdHVyZS0xIiwgInRoZXJtb21ldGVyLTEiLCAidGhlcm1vbWV0ZXItcXVhcnRlciJdLCAiZjJjYSIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtMjguN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMjguN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMSA9IGZhVGVtcGVyYXR1cmVRdWFydGVyOwogICAgZmFUaGVybW9tZXRlcjEgPSBmYVRlbXBlcmF0dXJlUXVhcnRlcjsKICAgIGZhVGhlcm1vbWV0ZXJRdWFydGVyID0gZmFUZW1wZXJhdHVyZVF1YXJ0ZXI7CiAgICBmYVNsaWRlcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2xpZGVycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzbGlkZXJzLWgiXSwgImYxZGUiLCAiTTMyIDY0QzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmw4Ni43IDBjMTIuMyAyOC4zIDQwLjUgNDggNzMuMyA0OHM2MS0xOS43IDczLjMtNDhMNDgwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwyNjUuMyA2NEMyNTMgMzUuNyAyMjQuOCAxNiAxOTIgMTZzLTYxIDE5LjctNzMuMyA0OEwzMiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjQ2LjcgMGMxMi4zIDI4LjMgNDAuNSA0OCA3My4zIDQ4czYxLTE5LjcgNzMuMy00OGw1NC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTU0LjcgMGMtMTIuMy0yOC4zLTQwLjUtNDgtNzMuMy00OHMtNjEgMTkuNy03My4zIDQ4TDMyIDIyNHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsNTQuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDhzNjEtMTkuNyA3My4zLTQ4TDQ4MCA0NDhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI0Ni43IDBjLTEyLjMtMjguMy00MC41LTQ4LTczLjMtNDhzLTYxIDE5LjctNzMuMyA0OEwzMiAzODR6Il0KICAgIH07CiAgICBmYVNsaWRlcnNIID0gZmFTbGlkZXJzOwogICAgZmFNb3NxdWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9zcXVlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzMyXSwgImY2NzgiLCAiTTE3NC44IDIyNGwyMjYuNCAwYzQzLjUgMCA3OC44LTM1LjMgNzguOC03OC44IDAtMjUuNS0xMi4zLTQ5LjQtMzMuMS02NC4yTDI5Ny4zLTI1LjRjLTUuNi0zLjktMTMtMy45LTE4LjUgMEwxMjkuMSA4MUMxMDguMyA5NS44IDk2IDExOS43IDk2IDE0NS4yIDk2IDE4OC43IDEzMS4zIDIyNCAxNzQuOCAyMjR6TTUxMiA1MTJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OC00NDggMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjA2LjMgMCAyMjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDQ4IDB6TTI0MCAzODRjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwLTk2IDAgMC04MHoiXQogICAgfTsKICAgIGZhSCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTA0XSwgIjQ4IiwgIk0zMjAgMjg4bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zODRjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxNjAtMjU2IDAgMC0xNjBjMC0xNy43LTE0LjMtMzItMzItMzJTMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCAyNTYgMHoiXQogICAgfTsKICAgIGZhSW5mbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmZvIiwKICAgICAgaWNvbjogWzE5MiwgNTEyLCBbXSwgImYxMjkiLCAiTTQ4IDQ4YTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6TTAgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNTYgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA1MTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTIyNC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhUGVyc29uV2Fsa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY5NCwgIndhbGtpbmciXSwgImY1NTQiLCAiTTE5MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMTA1LjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDYwLjEgMTgyLjZDNDIuMSAyMDAuNiAzMiAyMjUgMzIgMjUwLjVMMzIgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42em0xMi40IDE3OS40Yy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw0MS40IDQ4OS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDY4LjMtNjguM2MxMS41LTExLjUgMTkuOS0yNS44IDI0LjQtNDEuNWwyLjItNy42LTQ2LTM5LjRjLTIuNS0yLjItNS00LjQtNy40LTYuOGwtMTAuNCAzNi4yeiJdCiAgICB9OwogICAgZmFXYWxraW5nID0gZmFQZXJzb25XYWxraW5nOwogICAgZmFBcnJvd1R1cm5Eb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXR1cm4tZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJsZXZlbC1kb3duIl0sICJmMTQ5IiwgIk0zMiA2NEMxNC4zIDY0IDAgNDkuNyAwIDMyUzE0LjMgMCAzMiAwbDk2IDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMwNi43IDczLjQtNzMuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zbC0xMjggMTI4Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtMTI4LTEyOGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEwxNjAgNDAyLjcgMTYwIDk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDMyIDY0eiJdCiAgICB9OwogICAgZmFMZXZlbERvd24gPSBmYUFycm93VHVybkRvd247CiAgICBmYVJvYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODczOV0sICJmMDE4IiwgIk0yMjMuOSAzMmwtNzYuMiAwYy0yOS40IDAtNTUuMSAyMC4xLTYyLjEgNDguNkwxLjQgNDIwLjVDLTYuMSA0NTAuNyAxNi44IDQ4MCA0OCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NCAxNzYuMSAwYzMxLjIgMCA1NC4xLTI5LjMgNDYuNi01OS41TDQyNi41IDgwLjZDNDE5LjQgNTIuMSAzOTMuOCAzMiAzNjQuMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHptNjQgMTkybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFTcGlyYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3BpcmFsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU4MGEiLCAiTTExNS41IDcuNGMxMy42LTExLjMgMzMuOC05LjUgNDUuMSA0LjFzOS41IDMzLjgtNC4xIDQ1LjFDMTAwLjIgMTAzLjUgNjQgMTc1LjIgNjQgMjU2IDY0IDM2MiAxNTAgNDQ4IDI1NiA0NDhzMTkyLTg2IDE5Mi0xOTJjMC03NS4xLTYwLjktMTM2LTEzNi0xMzZTMTc2IDE4MC45IDE3NiAyNTZjMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmMwLTQ4LjYgMzkuNC04OCA4OC04OHM4OCAzOS40IDg4IDg4YzAgNzkuNS02NC41IDE0NC0xNDQgMTQ0UzExMiAzMzUuNSAxMTIgMjU2YzAtMTEwLjUgODkuNS0yMDAgMjAwLTIwMHMyMDAgODkuNSAyMDAgMjAwYzAgMTQxLjQtMTE0LjYgMjU2LTI1NiAyNTZTMCAzOTcuNCAwIDI1NkMwIDE1NS44IDQ1IDY2LjEgMTE1LjUgNy40eiJdCiAgICB9OwogICAgZmFGYWNlRnJvd24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtZnJvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzg1LCAiZnJvd24iXSwgImYxMTkiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem05MC42LTExMy45Yy0yMC40LTI4LTUzLjQtNDYuMS05MC42LTQ2LjFzLTcwLjIgMTguMS05MC42IDQ2LjFjLTcuOCAxMC43LTIyLjggMTMuMS0zMy41IDUuM3MtMTMuMS0yMi44LTUuMy0zMy41QzE1NS43IDMzMCAyMDIuOCAzMDQgMjU2IDMwNHMxMDAuMyAyNiAxMjkuNCA2NS45YzcuOCAxMC43IDUuNCAyNS43LTUuMyAzMy41cy0yNS43IDUuNC0zMy41LTUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFGcm93bjIgPSBmYUZhY2VGcm93bjI7CiAgICBmYVdpbmVHbGFzc0VtcHR5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtZ2xhc3MtZW1wdHkiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsid2luZS1nbGFzcy1hbHQiXSwgImY1Y2UiLCAiTTY0IDBDNDguNyAwIDM1LjYgMTAuOCAzMi42IDI1LjdMMy4yIDE3M0MxLjEgMTgzLjUgMCAxOTQuMiAwIDIwNWwwIDNjMCA3Ny40IDU1IDE0MiAxMjggMTU2LjhsMCAxMTUuMi02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtMTE1LjJDMjY1IDM1MCAzMjAgMjg1LjQgMzIwIDIwOGwwLTNjMC0xMC43LTEuMS0yMS40LTMuMi0zMkwyODcuNCAyNS43QzI4NC40IDEwLjggMjcxLjMgMCAyNTYgMEw2NCAwem0xLjkgMTg1LjZMOTAuMiA2NCAyMjkuOCA2NCAyNTQuMSAxODUuNmMxLjMgNi40IDEuOSAxMi45IDEuOSAxOS40bDAgM2MwIDUzLTQzIDk2LTk2IDk2cy05Ni00My05Ni05NmwwLTNjMC02LjUgLjYtMTMgMS45LTE5LjR6Il0KICAgIH07CiAgICBmYVdpbmVHbGFzc0FsdCA9IGZhV2luZUdsYXNzRW1wdHk7CiAgICBmYUNsYXBwZXJib2FyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbGFwcGVyYm9hcmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTEzMSIsICJNNDQ4IDY0YzIgMCAzLjkgLjEgNS44IC4zbC05NS43IDk1LjcgNjcuOSAwIDcyLTcyYzguOCAxMSAxNCAyNC45IDE0IDQwbDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjhDMCA5Mi43IDI4LjcgNjQgNjQgNjRsNzAuMSAwLTk2IDk2IDY3LjkgMCA5NS05NSAxLTEgOTIuMSAwLTk2IDk2IDY3LjkgMCA5NS05NSAxLTEgODYuMSAweiJdCiAgICB9OwogICAgZmFGb3J3YXJkU3RlcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkLXN0ZXAiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3RlcC1mb3J3YXJkIl0sICJmMDUxIiwgIk0yMSAzNi44YzEyLjktNyAyOC43LTYuMyA0MSAxLjhMMzIwIDIwOC4xIDMyMCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzg0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTQ0LjEtMjU4IDE2OS42Yy0xMi4zIDguMS0yOCA4LjgtNDEgMS44UzAgNDU0LjcgMCA0NDBMMCA3MkMwIDU3LjMgOC4xIDQzLjggMjEgMzYuOHoiXQogICAgfTsKICAgIGZhU3RlcEZvcndhcmQgPSBmYUZvcndhcmRTdGVwOwogICAgZmFTcXVhcmVVcFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS11cC1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzg1OTksICJleHRlcm5hbC1saW5rLXNxdWFyZS1hbHQiXSwgImYzNjAiLCAiTTM4NCAzMmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDB6TTE2OCAxNjBjLTkuNyAwLTE4LjUgNS44LTIyLjIgMTQuOHMtMS43IDE5LjMgNS4yIDI2LjJsMzUgMzUtNjcgNjdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDI0IDI0YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwbDY3LTY3IDM1IDM1YzYuOSA2LjkgMTcuMiA4LjkgMjYuMiA1LjJTMzIwIDMyMS43IDMyMCAzMTJsMC0xMjhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTEyOCAweiJdCiAgICB9OwogICAgZmFFeHRlcm5hbExpbmtTcXVhcmVBbHQgPSBmYVNxdWFyZVVwUmlnaHQ7CiAgICBmYUJvb2tKb3VybmFsV2hpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stam91cm5hbC13aGlsbHMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiam91cm5hbC13aGlsbHMiXSwgImY2NmEiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDk2IDBDNDMgMCAwIDQzIDAgOTZMMCA0MTZjMCA1MyA0MyA5NiA5NiA5NnpNNjQgNDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDI1NiAwIDAgNjQtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0yNzQuMSA5OS4yYzIuNi0yLjYgNi43LTMuMSA5LjktMS4xIDMyLjEgMjAgNTMuNCA1NS42IDUzLjQgOTYuMiAwIDYyLjYtNTAuNyAxMTMuMy0xMTMuMyAxMTMuM1MxMTAuNyAyNTYuOSAxMTAuNyAxOTQuM2MwLTQwLjYgMjEuNC03Ni4yIDUzLjQtOTYuMiAzLjEtMiA3LjItMS41IDkuOSAxLjFzMy4xIDYuNyAxLjIgOS44Yy01LjIgOC42LTguMiAxOC43LTguMiAyOS41IDAgMTUuMSA1LjkgMjguOCAxNS41IDM5LjEgMi41IDIuNyAyLjkgNi43IC45IDkuNy00LjcgNy40LTcuNCAxNi4xLTcuNCAyNS41IDAgMjEuNiAxNC4zIDM5LjkgMzQgNDUuOWwxLTI0LjhjLTcuMS00LjQtMTEuOC0xMi4yLTExLjgtMjEuMSAwLTkuNiA1LjUtMTggMTMuNS0yMi4xbDMuMy04MS44Yy4yLTQuMyAzLjctNy43IDgtNy43czcuOCAzLjQgOCA3LjdsMy4zIDgxLjhjOCA0LjEgMTMuNSAxMi40IDEzLjUgMjIuMSAwIDguOS00LjcgMTYuNy0xMS44IDIxLjFsMSAyNC44YzE5LjYtNiAzMy45LTI0LjEgMzQtNDUuNmwwLS42Yy0uMS05LjMtMi43LTE3LjktNy40LTI1LjItMS45LTMuMS0xLjYtNy4xIC45LTkuNyA5LjYtMTAuMiAxNS41LTIzLjkgMTUuNS0zOS4xIDAtMTAuOC0zLTIwLjktOC4yLTI5LjUtMS45LTMuMi0xLjQtNy4yIDEuMi05Ljh6Il0KICAgIH07CiAgICBmYUpvdXJuYWxXaGlsbHMgPSBmYUJvb2tKb3VybmFsV2hpbGxzOwogICAgZmFDaGFtcGFnbmVHbGFzc2VzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoYW1wYWduZS1nbGFzc2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI5MzQ2LCAiZ2xhc3MtY2hlZXJzIl0sICJmNzlmIiwgIk0xNTUuNiAxNy4zQzE2MyAzIDE3OS45LTMuNiAxOTUgMS45bDEyNSA0NS42IDEyNS00NS42YzE1LjEtNS41IDMyIDEuMSAzOS40IDE1LjRsNzguOCAxNTIuOWMyOC44IDU1LjggMTAuMyAxMjIuMy0zOC41IDE1Ni42bDMxLjMgODYuMiA0MS0xNWMxNi42LTYgMzUgMi41IDQxIDE5LjFzLTIuNSAzNS0xOS4xIDQxYy00Ny40IDE3LjMtOTQuOCAzNC41LTE0Mi4yIDUxLjgtMTYuNiA2LjEtMzUtMi41LTQxLTE5LjFzMi41LTM1IDE5LjEtNDFsNDEtMTUtMzEuMy04Ni4yYy01OS40IDUuMi0xMTYuMi0zMy45LTEzMC05NS4ybC0xNC42LTY0LjctMTQuNiA2NC43Yy0xMy44IDYxLjMtNzAuNiAxMDAuNC0xMzAgOTUuMmwtMzEuMyA4Ni4yIDQxIDE1YzE2LjYgNi4xIDI1LjIgMjQuNCAxOS4xIDQxcy0yNC40IDI1LjItNDEgMTkuMWMtNDcuNC0xNy4zLTk0LjgtMzQuNi0xNDIuMi01MS44LTE2LjYtNi4xLTI1LjItMjQuNC0xOS4xLTQxUzI2LjMgMzkyIDQyLjkgMzk4bDQxIDE1IDMxLjMtODYuMkM2Ni41IDI5Mi41IDQ4LjEgMjI2IDc2LjkgMTcwLjJMMTU1LjYgMTcuM3ptNDQgNTQuNGwtMjcuMiA1Mi44IDg5LjIgMzIuNSAxMy4xLTU3LjktNzUuMS0yNy40em0yNDAuOSAwbC03NS4xIDI3LjQgMTMuMSA1Ny45IDg5LjItMzIuNS0yNy4yLTUyLjh6Il0KICAgIH07CiAgICBmYUdsYXNzQ2hlZXJzID0gZmFDaGFtcGFnbmVHbGFzc2VzOwogICAgZmFEdW1wc3RlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW1wc3RlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzkzIiwgIk0xMzIuMyA2NEwxMDYuNyAxOTIgMjQgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkwyNi41IDgwLjRDMjkuOCA3MC42IDM5IDY0IDQ5LjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTMxMiA2NGw4Mi43IDAgMjUuNiAxMjgtMTA4LjMgMCAwLTEyOHptMTMxLjcgMGw4MyAwYzEwLjMgMCAxOS41IDYuNiAyMi44IDE2LjRsMjUuMyA3NS45Yy44IDIuNCAxLjIgNSAxLjIgNy42bDAgNC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0bC04Mi43IDAtMjUuNi0xMjh6TTI1LjcgMjQwbDUyNC43IDBjLS40IDIuMS0xMy4zIDczLjQtMzguOSAyMTMuNy0zIDE2LjMtMTcuOSAyNy42LTM0LjQgMjYuMVM0NDggNDY0LjYgNDQ4IDQ0OGwwLTE2LTMyMCAwIDAgMTZjMCAxNi42LTEyLjYgMzAuNC0yOS4xIDMxLjlTNjcuNSA0NzAgNjQuNSA0NTMuN0MzOSAzMTMuMyAyNiAyNDIuMSAyNS43IDI0MHoiXQogICAgfTsKICAgIGZhSGVhcnRDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFydC1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUwMSIsICJNMjQxIDg3LjFsMTUgMjAuNyAxNS0yMC43QzI5NiA1Mi41IDMzNi4yIDMyIDM3OC45IDMyIDQ1Mi40IDMyIDUxMiA5MS42IDUxMiAxNjUuMWwwIDIuNmMwIDE3LjYtMy40IDM1LjYtOS41IDUzLjctMjEuOC04LjYtNDUuNi0xMy40LTcwLjUtMTMuNC0xMDYgMC0xOTIgODYtMTkyIDE5MiAwIDI4LjUgNi4yIDU1LjYgMTcuNCA4MC0uNSAwLS45IDAtMS40IDAtMTUuNSAwLTMwLjgtNC42LTQzLjEtMTQuMS03My01NS43LTIxMi45LTE4Ni0yMTIuOS0yOTguMmwwLTIuNkMwIDkxLjYgNTkuNiAzMiAxMzMuMSAzMiAxNzUuOCAzMiAyMTYgNTIuNSAyNDEgODcuMXpNNDMyIDI1NmExNDQgMTQ0IDAgMSAxIDAgMjg4IDE0NCAxNDQgMCAxIDEgMC0yODh6bTU5LjMgMTA3LjNjNi4yLTYuMiA2LjItMTYuNCAwLTIyLjZzLTE2LjQtNi4yLTIyLjYgMGwtMzYuNyAzNi43LTM2LjctMzYuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzNi43IDM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzYuNy0zNi43IDM2LjcgMzYuN2M2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTM2LjctMzYuNyAzNi43LTM2Ljd6Il0KICAgIH07CiAgICBmYUNvbXB1dGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbXB1dGVyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZTUiLCAiTTM0OC44IDMyQzM0MC43IDQ2LjEgMzM2IDYyLjUgMzM2IDgwbDAgMTYtMjcyIDAgMCAyMjQgMjcyIDAgMCA2NC0yNzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyODQuOCAwek0zMzYgNDMyYzAgMTcuNSA0LjcgMzMuOSAxMi44IDQ4TDEyMCA0ODBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjE2IDB6TTQzMiAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC05NiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MmMwLTI2LjUgMjEuNS00OCA0OC00OHptMjQgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptMCA5NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwem01NiAxNDRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhV2FuZE1hZ2ljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbmQtbWFnaWMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibWFnaWMiXSwgImYwZDAiLCAiTTM5OC41IDEyLjJsLTg4LjIgODguMiAxMDEuMyAxMDEuMyA4OC4yLTg4LjJDNTA3LjYgMTA1LjYgNTEyIDk1IDUxMiA4NHMtNC40LTIxLjYtMTIuMi0yOS41TDQ1Ny41IDEyLjJDNDQ5LjYgNC40IDQzOSAwIDQyOCAwcy0yMS42IDQuNC0yOS41IDEyLjJ6TTI3Ni40IDEzNC4zTDEyLjIgMzk4LjVDNC40IDQwNi40IDAgNDE3IDAgNDI4czQuNCAyMS42IDEyLjIgMjkuNWw0Mi4zIDQyLjNDNjIuNCA1MDcuNiA3MyA1MTIgODQgNTEyczIxLjYtNC40IDI5LjUtMTIuMkwzNzcuNyAyMzUuNiAyNzYuNCAxMzQuM3oiXQogICAgfTsKICAgIGZhTWFnaWMgPSBmYVdhbmRNYWdpYzsKICAgIGZhQnJhaW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJhaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MDRdLCAiZjVkYyIsICJNMTIwIDU2YzAtMzAuOSAyNS4xLTU2IDU2LTU2bDI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTI5LjggMC01NC45LTIwLjQtNjItNDgtLjcgMC0xLjMgMC0yIDAtNDQuMiAwLTgwLTM1LjgtODAtODAgMC0xOCA2LTM0LjYgMTYtNDgtMTkuNC0xNC42LTMyLTM3LjgtMzItNjQgMC0zMC45IDE3LjYtNTcuOCA0My4yLTcxLjEtNy4xLTEyLTExLjItMjYtMTEuMi00MC45IDAtNDQuMiAzNS44LTgwIDgwLTgwbDAtMjR6bTI3MiAwbDAgMjRjNDQuMiAwIDgwIDM1LjggODAgODAgMCAxNS00LjEgMjktMTEuMiA0MC45IDI1LjcgMTMuMyA0My4yIDQwLjEgNDMuMiA3MS4xIDAgMjYuMi0xMi42IDQ5LjQtMzIgNjQgMTAgMTMuNCAxNiAzMCAxNiA0OCAwIDQ0LjItMzUuOCA4MC04MCA4MC0uNyAwLTEuMyAwLTIgMC03LjEgMjcuNi0zMi4yIDQ4LTYyIDQ4bC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNCAwYzMwLjkgMCA1NiAyNS4xIDU2IDU2eiJdCiAgICB9OwogICAgZmFCcmllZmNhc2VNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWVmY2FzZS1tZWRpY2FsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0NjkiLCAiTTIwMCA0OGwxMTIgMGM0LjQgMCA4IDMuNiA4IDhsMCA0MC0xMjggMCAwLTQwYzAtNC40IDMuNi04IDgtOHptLTU2IDhsMCA0MC04MCAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnptODAgMTYwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFIb3VzZU1lZGljYWxDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1tZWRpY2FsLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTEyIiwgIk0zMDkuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzUwLjggMjcyIDY0IDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5NiAwYy0yMS4yLTI5LjUtMzQuMy02NS4zLTM1LjktMTA0TDI3MiA0MDhjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTQwLTQwIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNmw0MCAwIDAtNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNDAgMjAgMGMzNC45LTQ4LjUgOTEuNy04MCAxNTYtODAgMTAuNyAwIDIxLjEgLjkgMzEuMyAyLjVMMzA5LjggOC42ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhQ29kZUNvbW1pdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2RlLWNvbW1pdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMzg2IiwgIk0yODggMzM2YTgwIDgwIDAgMSAwIDAtMTYwIDgwIDgwIDAgMSAwIDAgMTYwem0xNTYuOC00OEM0MzAgMzYxIDM2NS40IDQxNiAyODggNDE2UzE0NiAzNjEgMTMxLjIgMjg4TDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5OS4yIDBDMTQ2IDE1MSAyMTAuNiA5NiAyODggOTZzMTQyIDU1IDE1Ni44IDEyOGw5OS4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk5LjIgMHoiXQogICAgfTsKICAgIGZhUGVyc29uQnJlYXN0ZmVlZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYnJlYXN0ZmVlZGluZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTNhIiwgIk0yMjQgMGE4MCA4MCAwIDEgMSAwIDE2MCA4MCA4MCAwIDEgMSAwLTE2MHpNNDM2LjggMzgyLjhMMzczLjUgNDYyYy0xNi42IDIwLjctNDYuOCAyNC4xLTY3LjUgNy41LTE3LjYtMTQuMS0yMi43LTM4LjEtMTMuNS01Ny43bC0uNy0uMWMtMzguOS01LjYtNzQuMy0yNS4xLTk5LjctNTQuOGwwLTM2LjhjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA0OGMwIC44IDAgMS42IC4xIDIuNGwxMDEuNCA1MC43YzIzLjcgMTEuOSAzMy4zIDQwLjcgMjEuNSA2NC40cy00MC43IDMzLjMtNjQuNCAyMS41TDI3LjIgNDI3LjNjLTEuMS0uNS0yLjItMS4xLTMuMy0xLjctNC45LTIuOC05LjItNi40LTEyLjYtMTAuNi00LjYtNS40LTcuOC0xMS43LTkuNi0xOC40LTMuMy0xMi0xLjktMjUuMiA0LjgtMzYuNiAuNi0xLjEgMS4zLTIuMiAyLTMuMkw3NS42IDI1Ni4xYzI2LjctNDAuMSA3MS43LTY0LjEgMTE5LjgtNjQuMWw3NS4yIDBjNDYuNSAwIDkwLjEgMjIuNSAxMTcuMiA2MC4zbDUwLjcgNzAuOWMyLjIgMyA0IDYuMSA1LjUgOS40IDIuOSA2LjcgNC4zIDEzLjggNCAyMC44LS4zIDEwLjYtNC4yIDIxLTExLjIgMjkuNHpNMzIwIDMzMmE0NCA0NCAwIDEgMCAtODggMCA0NCA0NCAwIDEgMCA4OCAweiJdCiAgICB9OwogICAgZmFQZXJzb25SYXlzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1yYXlzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGQiLCAiTTMxMi41IDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdsNDYuMyA2Mi40YzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzMzOC41IDEzMiAyOTguOCAxMTIgMjU2LjUgMTEycy04MiAyMC0xMDcuMiA1My45bC03MC41IDk1Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZsNDYuMy02Mi40IDAgMjc1LjNjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTguOCA3LjItMTYgMTYtMTZzMTYgNy4yIDE2IDE2bDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNzUuM3pNNy41IDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45bDgwIDgwYzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw0MS41IDdDMzIuMS0yLjMgMTYuOS0yLjMgNy41IDd6bTQ2NCAwbC04MCA4MGMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDgwLTgwYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDB6TTcuNSA1MDVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBsODAtODBjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtODAgODBjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45em00NjQgMGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTgwLTgwYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDgwIDgweiJdCiAgICB9OwogICAgZmFNYW5hdFNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFuYXQtc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlMWQ1IiwgIk0xOTIgMzJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDEuNUM3My4zIDEwOS4zIDAgMTkwLjEgMCAyODhMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTYyLjUgNDQuOC0xMTQuNSAxMDQtMTI1LjhMMTY4IDQ1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjkzLjhjNTkuMiAxMS4yIDEwNCA2My4zIDEwNCAxMjUuOGwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOTcuOS03My4zLTE3OC43LTE2OC0xOTAuNUwyMTYgNTZjMC0xMy4zLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYVNvcnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJ1bnNvcnRlZCJdLCAiZjBkYyIsICJNMi40IDIwNC4yYzUgMTIgMTYuNiAxOS44IDI5LjYgMTkuOGwzMjAgMGMxMi45IDAgMjQuNi03LjggMjkuNi0xOS44czIuMi0yNS43LTYuOS0zNC45bC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0Ljl6bTAgMTAzLjVjLTUgMTItMi4yIDI1LjcgNi45IDM0LjlsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYwYzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzM2NC45IDI4OCAzNTIgMjg4TDMyIDI4OGMtMTIuOSAwLTI0LjYgNy44LTI5LjYgMTkuOHoiXQogICAgfTsKICAgIGZhVW5zb3J0ZWQgPSBmYVNvcnQ7CiAgICBmYUNpcmNsZVJhZGlhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcmFkaWF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc2MiwgInJhZGlhdGlvbi1hbHQiXSwgImY3YmEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTgwIDBsNjQuMyAwYzguNyAwIDE1LjctNy4xIDE3LjMtMTUuNiA0LjQtMjQuNCAxOC4xLTQ1LjUgMzcuMi01OS43IDcuNC01LjUgMTAuNi0xNS42IDYtMjMuNmwtMzIuNS01Ni4zYy00LjMtNy41LTEzLjktMTAuMy0yMS4yLTUuNS00OC4yIDMxLjUtODEuMyA4NC4yLTg2LjMgMTQ0LjgtLjcgOC44IDYuNSAxNiAxNS4zIDE2em0xMzcuOSA4OS44Yy04LjUtMy43LTE4LjgtMS40LTIzLjUgNi42bC0zMSA1My44Yy00LjMgNy41LTEuOSAxNy4yIDUuOCAyMS4xIDI2LjEgMTMuMiA1NS41IDIwLjcgODYuOCAyMC43czYwLjctNy41IDg2LjgtMjAuN2M3LjctMy45IDEwLjEtMTMuNiA1LjgtMjEuMWwtMzEtNTMuOGMtNC42LTgtMTUtMTAuMy0yMy41LTYuNi0xMS43IDUtMjQuNSA3LjgtMzguMSA3LjhzLTI2LjQtMi44LTM4LjEtNy44ek0zNTAuNCAyNDAuNGMxLjYgOC42IDguNSAxNS42IDE3LjMgMTUuNmw2NC4zIDBjOC44IDAgMTYuMS03LjIgMTUuMy0xNi01LTYwLjYtMzguMS0xMTMuMi04Ni4zLTE0NC44LTcuMy00LjgtMTYuOC0yLTIxLjIgNS41TDMwNy4zIDE1N2MtNC42IDgtMS40IDE4LjEgNiAyMy42IDE5LjEgMTQuMiAzMi43IDM1LjQgMzcuMiA1OS43ek0yNTYgMzA1LjdhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFSYWRpYXRpb25BbHQgPSBmYUNpcmNsZVJhZGlhdGlvbjsKICAgIGZhTGFwdG9wQ29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYXB0b3AtY29kZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNWZjIiwgIk02NCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MC02NCAwIDAtMjQwLTM4NCAwIDAgMjQwLTY0IDAgMC0yNDB6TTAgNDAzLjJDMCAzOTIuNiA4LjYgMzg0IDE5LjIgMzg0bDYwMS42IDBjMTAuNiAwIDE5LjIgOC42IDE5LjIgMTkuMiAwIDQyLjQtMzQuNCA3Ni44LTc2LjggNzYuOEw3Ni44IDQ4MEMzNC40IDQ4MCAwIDQ0NS42IDAgNDAzLjJ6TTI4MSAyMDlsLTMxIDMxIDMxIDMxYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTQ4LTQ4Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6TTM5MyAxNzVsNDggNDhjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTQ4IDQ4Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYVNpbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDZkIiwgIk0yODggOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMiAxNC4zIDMyIDMyIDMyIDMyLTE0LjMgMzItMzJjMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZsMCAxOTItNjQgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtODAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwwIDY0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTY0YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC04MCAwIDAtNDBjMC00LjQgMy42LTggOC04bDU2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTU2IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgNDAtNjQgMCAwLTE5MnoiXQogICAgfTsKICAgIGZhQXJyb3dVcEZyb21XYXRlclB1bXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctdXAtZnJvbS13YXRlci1wdW1wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YjYiLCAiTTE0NCAzMmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNzYtMTYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA3OS42YzE3LjYtMiAzNiAyLjUgNTEuMyAxNCAzLjQgMi42IDYuMSAxLjQgOS44LS4zbC44LS40YzUuNy0yLjYgMTIuOS02LjkgMjEuNy0xMy41IDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuMy0zMS40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDEwLjctOC4xIDIyLjktMTIuNyAzNS4zLTE0LjFsMC03OS41YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC01NiAwIDAtMTQyLjEgNDcgNDdjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDQ5NyAzOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBsLTg4IDg4Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsNDctNDcgMCAxNDIuMS0xMzYgMCAwLTE3NmMwLTI2LjUtMjEuNS00OC00OC00OEwxNDQgMzJ6TTQ3NC42IDQ3Ni4xYzE5IDE0LjQgNDEuOSAyOC4yIDY3LjIgMzMuMyAyNi41IDUuNCA1NC4zIC44IDgwLjctMTkuMSAxMC42LTggMTIuNy0yMyA0LjctMzMuNnMtMjMtMTIuNy0zMy42LTQuN2MtMTQuOSAxMS4yLTI4LjYgMTMuMS00Mi4zIDEwLjMtMTQuOS0zLTMwLjktMTEuOS00Ny44LTI0LjYtMzguNC0yOS05MC41LTI5LTEyOSAwLTI0IDE4LjEtNDAuNyAyNi4zLTU0LjUgMjYuM3MtMzAuNS04LjItNTQuNS0yNi4zYy0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjEuNiAxNi4zLTQxLjMgMjUuOC01OC45IDI1LjctOS42LS4xLTE5LjktMy0zMS4yLTExLjUtMTAuNi04LTI1LjYtNS45LTMzLjYgNC43UzcgNDgyLjMgMTcuNiA0OTAuM2MxOS4xIDE0LjQgMzkuNCAyMSA1OS44IDIxLjEgMzMuOSAuMiA2NC4zLTE3LjQgODguMS0zNS4zIDIxLjMtMTYuMSA0OS45LTE2LjEgNzEuMiAwIDI0LjIgMTguMyA1Mi4zIDM1LjkgODMuNCAzNS45czU5LjEtMTcuNyA4My40LTM1LjljMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDB6Il0KICAgIH07CiAgICBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pY3JvcGhvbmUtbGluZXMtc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWljcm9waG9uZS1hbHQtc2xhc2giXSwgImY1MzkiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwxNTEgMTUxIDAtMzAuMmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwzMjggODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy0xLjkgMjIuOS0xMS44IDQzLjQtMjYuOSA1OWwzMy45IDMzLjljMjUuNS0yNiA0MS4zLTYxLjYgNDEuMy0xMDAuOWwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDUyLjYtMjEuMSAxMDAuMi01NS4zIDEzNC44TDU2OSA1MDMuMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDcgOS4xQy0yLjMtLjMtMi4zLTE1LjUgNy0yNC45ek0yOTcuOCAzNjcuN2w0MS40IDQxLjRjLTguOCAyLjQtMTcuOSA0LjMtMjcuMyA1LjRsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzE2OS4zIDQwMi43IDk2IDMyMS45IDk2IDIyNGwwLTQwYzAtNS4xIDEuNi05LjkgNC40LTEzLjhsNDMuNiA0My42IDAgMTAuMmMwIDc5LjUgNjQuNSAxNDQgMTQ0IDE0NCAzLjMgMCA2LjYtLjEgOS44LS4zeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lQWx0U2xhc2ggPSBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoOwogICAgZmFTZXJ2ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2VydmVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyMzMiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyem0yMTYgNzJhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em01NiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAyODh6bTIxNiA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTU2IDI0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYVVzZXIyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXIiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgxMDAsIDYyMTQ0LCA2MjQ3MCwgInVzZXItYWx0IiwgInVzZXItbGFyZ2UiXSwgImYwMDciLCAiTTIyNCAyNDhhMTIwIDEyMCAwIDEgMCAwLTI0MCAxMjAgMTIwIDAgMSAwIDAgMjQwem0tMjkuNyA1NkM5NS44IDMwNCAxNiAzODMuOCAxNiA0ODIuMyAxNiA0OTguNyAyOS4zIDUxMiA0NS43IDUxMmwzNTYuNiAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtOTguNS03OS44LTE3OC4zLTE3OC4zLTE3OC4zbC01OS40IDB6Il0KICAgIH07CiAgICBmYVVzZXJBbHQyID0gZmFVc2VyMjsKICAgIGZhVXNlckxhcmdlMiA9IGZhVXNlcjI7CiAgICBmYVNub3dmbGFrZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic25vd2ZsYWtlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTAwNTIsIDEwMDU0XSwgImYyZGMiLCAiTTI4OC4yIDBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA2Mi4xLTE1LTE1Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDQ5IDQ5IDAgNzAuNi02MS4yLTM1LjMtMTcuOS02Ni45Yy0zLjQtMTIuOC0xNi42LTIwLjQtMjkuNC0xN1M5NS4zIDk4IDk4LjcgMTEwLjhsNS41IDIwLjUtNTMuNy0zMUMzNS4yIDkxLjUgMTUuNiA5Ni43IDYuOCAxMTJzLTMuNiAzNC45IDExLjcgNDMuN2w1My43IDMxLTIwLjUgNS41Yy0xMi44IDMuNC0yMC40IDE2LjYtMTcgMjkuNHMxNi42IDIwLjQgMjkuNCAxN2w2Ni45LTE3LjkgNjEuMiAzNS4zLTYxLjIgMzUuMy02Ni45LTE3LjljLTEyLjgtMy40LTI2IDQuMi0yOS40IDE3czQuMiAyNiAxNyAyOS40bDIwLjUgNS41LTUzLjcgMzFDMy4yIDM2NS4xLTIgMzg0LjcgNi44IDQwMHMyOC40IDIwLjYgNDMuNyAxMS43bDUzLjctMzEtNS41IDIwLjVjLTMuNCAxMi44IDQuMiAyNiAxNyAyOS40czI2LTQuMiAyOS40LTE3bDE3LjktNjYuOSA2MS4yLTM1LjMgMCA3MC42LTQ5IDQ5Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMTUtMTUgMCA2Mi4xYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02Mi4xIDE1IDE1YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNDktNDkgMC03MC42IDYxLjIgMzUuMyAxNy45IDY2LjljMy40IDEyLjggMTYuNiAyMC40IDI5LjQgMTdzMjAuNC0xNi42IDE3LTI5LjRsLTUuNS0yMC41IDUzLjcgMzFjMTUuMyA4LjggMzQuOSAzLjYgNDMuNy0xMS43czMuNi0zNC45LTExLjctNDMuN2wtNTMuNy0zMSAyMC41LTUuNWMxMi44LTMuNCAyMC40LTE2LjYgMTctMjkuNHMtMTYuNi0yMC40LTI5LjQtMTdsLTY2LjkgMTcuOS02MS4yLTM1LjMgNjEuMi0zNS4zIDY2LjkgMTcuOWMxMi44IDMuNCAyNi00LjIgMjkuNC0xN3MtNC4yLTI2LTE3LTI5LjRsLTIwLjUtNS41IDUzLjctMzFjMTUuMy04LjggMjAuNi0yOC40IDExLjctNDMuN3MtMjguNC0yMC41LTQzLjctMTEuN2wtNTMuNyAzMSA1LjUtMjAuNWMzLjQtMTIuOC00LjItMjYtMTctMjkuNHMtMjYgNC4yLTI5LjQgMTdsLTE3LjkgNjYuOS02MS4yIDM1LjMgMC03MC42IDQ5LTQ5YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTE1IDE1IDAtNjIuMXoiXQogICAgfTsKICAgIGZhU2t1bGxDcm9zc2JvbmVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNrdWxsLWNyb3NzYm9uZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgzNjksIDk3NjBdLCAiZjcxNCIsICJNMzg0IDE0NEMzODQgNjQuNSAzMTIuNCAwIDIyNCAwUzY0IDY0LjUgNjQgMTQ0YzAgNDcuMSAyNS4xIDg4LjkgNjQgMTE1LjJsMCAyOC44YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjguOGMzOC45LTI2LjMgNjQtNjguMSA2NC0xMTUuMnpNMTYwIDEyOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTk2IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0NS41IDMzOS43Yy02LjgtMTYuMy0yNS41LTI0LTQxLjgtMTcuMkwyMjQgMzk3LjMgNDQuMyAzMjIuNWMtMTYuMy02LjgtMzUgLjktNDEuOCAxNy4ycy45IDM1IDE3LjIgNDEuOEwxNDAuOCA0MzIgMTkuNyA0ODIuNUMzLjQgNDg5LjMtNC4zIDUwOCAyLjUgNTI0LjNzMjUuNSAyNCA0MS44IDE3LjJMMjI0IDQ2Ni43IDQwMy43IDU0MS41YzE2LjMgNi44IDM1LS45IDQxLjgtMTcuMnMtLjktMzUtMTcuMi00MS44TDMwNy4yIDQzMiA0MjguMyAzODEuNWMxNi4zLTYuOCAyNC0yNS41IDE3LjItNDEuOHoiXQogICAgfTsKICAgIGZhUGVzb1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVzby1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUyMjIiLCAiTTExMiAzMkM5NC4zIDMyIDgwIDQ2LjMgODAgNjRsMCA2NC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAzMi0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjNjUuNiAwIDEyMi0zOS41IDE0Ni43LTk2bDM3LjMgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMjQuOCAwYy41LTUuMyAuOC0xMC42IC44LTE2cy0uMy0xMC43LS44LTE2bDI0LjggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzcuMyAwQzM2MiA3MS41IDMwNS42IDMyIDI0MCAzMkwxMTIgMzJ6bTE5OS42IDk2bC0xNjcuNiAwIDAtMzIgOTYgMGMyOC40IDAgNTQgMTIuNCA3MS42IDMyek0xNDQgMTc2bDE5MC43IDBjLjkgNS4yIDEuMyAxMC41IDEuMyAxNnMtLjUgMTAuOC0xLjMgMTZsLTE5MC43IDAgMC0zMnptMTY3LjYgODBjLTE3LjYgMTkuNi00My4xIDMyLTcxLjYgMzJsLTk2IDAgMC0zMiAxNjcuNiAweiJdCiAgICB9OwogICAgZmFXaW5lR2xhc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZS1nbGFzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEyNzg2M10sICJmNGUzIiwgIk0zMi42IDI1LjdDMzUuNiAxMC44IDQ4LjcgMCA2NCAwTDI1NiAwYzE1LjMgMCAyOC40IDEwLjggMzEuNCAyNS43TDMxNi44IDE3M2MyLjEgMTAuNSAzLjIgMjEuMiAzLjIgMzJsMCAzYzAgNzcuNC01NSAxNDItMTI4IDE1Ni44bDAgMTE1LjIgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkw2NCA1NDRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNjQgMCAwLTExNS4yQzU1IDM1MCAwIDI4NS40IDAgMjA4bDAtM2MwLTEwLjcgMS4xLTIxLjQgMy4yLTMyTDMyLjYgMjUuN3pNNzcuNCAxMjhsMTY1LjEgMC0xMi44LTY0LTEzOS41IDAtMTIuOCA2NHoiXQogICAgfTsKICAgIGZhVGVtcGVyYXR1cmVIYWxmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbXBlcmF0dXJlLWhhbGYiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsxMjc3NzcsICJ0ZW1wZXJhdHVyZS0yIiwgInRoZXJtb21ldGVyLTIiLCAidGhlcm1vbWV0ZXItaGFsZiJdLCAiZjJjOSIsICJNMTYwIDBDMTA3IDAgNjQgNDMgNjQgOTZsMCAxNjQuN0MzNC41IDI4NyAxNiAzMjUuNCAxNiAzNjggMTYgNDQ3LjUgODAuNSA1MTIgMTYwIDUxMnMxNDQtNjQuNSAxNDQtMTQ0YzAtNDIuNi0xOC41LTgxLTQ4LTEwNy4zTDI1NiA5NmMwLTUzLTQzLTk2LTk2LTk2em02NCAzNjhjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRjMC0yNi45IDE2LjUtNDkuOSA0MC01OS4zbDAtOTIuN2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgOTIuN2MyMy41IDkuNSA0MCAzMi41IDQwIDU5LjN6Il0KICAgIH07CiAgICBmYVRlbXBlcmF0dXJlMiA9IGZhVGVtcGVyYXR1cmVIYWxmOwogICAgZmFUaGVybW9tZXRlcjIgPSBmYVRlbXBlcmF0dXJlSGFsZjsKICAgIGZhVGhlcm1vbWV0ZXJIYWxmID0gZmFUZW1wZXJhdHVyZUhhbGY7CiAgICBmYVRpY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0aWNrZXQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc5MDNdLCAiZjE0NSIsICJNNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhsMCA2NEMwIDIwMC44IDcuNCAyMDcuNyAxNS43IDIxMC42IDM0LjUgMjE3LjEgNDggMjM1IDQ4IDI1NnMtMTMuNSAzOC45LTMyLjMgNDUuNEM3LjQgMzA0LjMgMCAzMTEuMiAwIDMyMGwwIDY0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNjRjMC04LjgtNy40LTE1LjctMTUuNy0xOC42LTE4LjgtNi41LTMyLjMtMjQuNC0zMi4zLTQ1LjRzMTMuNS0zOC45IDMyLjMtNDUuNGM4LjMtMi45IDE1LjctOS44IDE1LjctMTguNmwwLTY0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMzM2bDAtMTYwLTI1NiAwIDAgMTYwIDI1NiAwek0xMTIgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDI4OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0yODggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJ6Il0KICAgIH07CiAgICBmYVdoZWF0QXduQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlYXQtYXduLWNpcmNsZS1leGNsYW1hdGlvbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTk4IiwgIk00OTYgNTc2YTE0NCAxNDQgMCAxIDEgMC0yODggMTQ0IDE0NCAwIDEgMSAwIDI4OHpNODEgNTI5Yy05LjQgOS4zLTI0LjUgOS4zLTMzLjkgMC05LjQtOS40LTkuNC0yNC42IDAtMzMuOUw4MSA1Mjl6bTMwLjItMjk0LjRjNi4yLTQuMSAxNC43LTMuNCAyMC4xIDIuMWw0Ni4xIDQ2LjEgNi4xIDYuN2MxOS43IDIzLjggMjYuMyA1NSAxOS4zIDgzLjkgMzEuNy03LjcgNjYuMiAxIDkwLjYgMjUuM2wxMiAxMmMtLjggNy0xLjIgMTQuMi0xLjIgMjEuNCAwIDIwIDMgMzkuMyA4LjcgNTcuNC0zNi44IDIxLjgtODUgMTctMTE2LjYtMTQuN0wxNjUuNiA0NDQuMyA4MSA1MjlDNjkuNyA1MTcuNyA1OC40IDUwNi4zIDQ3IDQ5NWw4NC43LTg0LjctMzAuNS0zMC41Yy0zNy41LTM3LjUtMzcuNS05OC4zIDAtMTM1LjdsNy40LTcuNCAyLjUtMi4xek00OTYgNDc2YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptMC0xNDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDgwYzAgOC44IDcuMiAxNiAxNiAxNiA4LjggMCAxNi03LjIgMTYtMTZsMC04MGMwLTguOC03LjItMTYtMTYtMTZ6TTIxNS4yIDEzMC42YzYuMi00LjEgMTQuNy0zLjQgMjAuMSAyLjFsNDYuMSA0Ni4xIDYuMSA2LjdjMTkuNyAyMy44IDI2LjMgNTUgMTkuMyA4My45IDI0LjItNS45IDUwLjEtMi4xIDcxLjkgMTAuOC0zMi4yIDI0LjktNTYuMiA1OS44LTY3LjQgMTAwLjEtMy44LTIuOC03LjUtNi0xMS05LjVsLTk0LjktOTQuOWMtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS43bDcuNC03LjQgMi41LTIuMXpNNTI2LjcgMTVjOS40LTkuNCAyNC42LTkuNCAzMy45IDAgOC44IDguOCA5LjMgMjIuNyAxLjcgMzIuMUw1NjAuNiA0OSA0NDYuMiAxNjMuNGM3LjcgMSAxNS4zIDMgMjIuNSA1LjlMNTI3IDExMWM5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMWwtMS43IDEuOC01Mi43IDUyLjcgMzkgMzljMy4yIDMuMiA0LjcgNy40IDQuNyAxMS42LTE3LjctNS40LTM2LjUtOC4zLTU1LjktOC4zLTM0LjIgMC02Ni4zIDguOS05NC4xIDI0LjZsLTkyLjctOTIuN2MtMzcuNS0zNy41LTM3LjUtOTguMyAwLTEzNS44bDcuNC03LjQgMi41LTIuMWM2LjItNC4xIDE0LjctMy40IDIwLjEgMi4xbDM5IDM5IDUyLjctNTIuN2M5LjQtOS40IDI0LjYtOS40IDM0IDAgOC44IDguOCA5LjMgMjIuNyAxLjYgMzIuMUw0NjUgNDkgNDA2LjcgMTA3LjNjMi44IDcuMSA0LjcgMTQuNSA1LjggMjIuMUw1MjYuNyAxNXoiXQogICAgfTsKICAgIGZhQXJyb3dzVHVyblJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy10dXJuLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0YzAiLCAiTTMxMy40LTYuNmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDMzOC43IDEyOCAxMjggMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgMjQxLjcgMCAyMjRsMC0zMkMwIDEyMS4zIDU3LjMgNjQgMTI4IDY0bDIxMC43IDAtMjUuNC0yNS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3ptLTk2IDI1NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0Mi43IDM4NCA5NiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OGwwLTMyYzAtNTMgNDMtOTYgOTYtOTZsMTQ2LjcgMC0yNS40LTI1LjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zeiJdCiAgICB9OwogICAgZmFDYW5keUNhbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FuZHktY2FuZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNzg2IiwgIk00MjEuOCAzOS42QzQ1MiA4NS4yIDQ1Ni41IDE0Mi45IDQzNS4xIDE5MmwtMTY1LjQgMCA0MS40LTQxLjRjLjgtLjggMS41LTEuNiAyLjItMi40TDQyMS44IDM5LjZ6TTI2OCAxMDIuOWMtLjggLjctMS42IDEuNC0yLjQgMi4ybC0yOC4xIDI4LjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNUwxNzUgMTQuNkMyMjkuOS00MC4yIDMxNC41LTQ2LjcgMzc2LjUtNS42TDI2OCAxMDIuOXpNMTI1LjcgMzM2bDgwLTgwIDE4MSAwLTgyLjUgODIuNSAwLTIuNS0xNzguNSAwem0xMTcgNjRMMTQxLjQgNTAxLjNjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNWwxMC43LTEwLjcgMTgxIDB6Il0KICAgIH07CiAgICBmYVdoZWVsY2hhaXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2hlZWxjaGFpciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTkzIiwgIk0xMzYgNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTcuOSAxOTcuNmwxMi42IDYzYy0zOC42IDEyLjQtNjYuNSA0OC43LTY2LjUgOTEuNCAwIDUzIDQzIDk2IDk2IDk2IDM1LjYgMCA2Ni43LTE5LjQgODMuMy00OC4yIDIuMyAuMSA0LjYgLjIgNyAuMmw0LjEgMGMxIDAgMi4xIDAgMy4xIDBsNTUuMiAwYy0yMC40IDY0LjktODEgMTEyLTE1Mi43IDExMi04OC40IDAtMTYwLTcxLjYtMTYwLTE2MCAwLTczLjggNTAtMTM1LjkgMTE3LjktMTU0LjR6bTE0OC42LTI4LjFsMjMuNyAxMTguNSA2MC41IDBjMzMuMyAwIDYzLjIgMjAuNyA3NC45IDUxLjlsMjUuNSA2OCAxOC43LTYuMmMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNWwtNDggMTZjLTE2LjMgNS40LTM0LTMtNDAuMS0xOS4xbC0zNi4zLTk2LjljLTIuMy02LjItOC4zLTEwLjQtMTUtMTAuNGwtODYuMSAwYy0uNCAwLS44IDAtMS4zIDBsLTEzLjEgMGMtMzAuNSAwLTU2LjgtMjEuNS02Mi44LTUxLjRMMTY1LjMgMTg5LjdjLTYuNC0zMS45IDE4LTYxLjcgNTAuNi02MS43IDI0LjYgMCA0NS44IDE3LjQgNTAuNiA0MS41eiJdCiAgICB9OwogICAgZmFTcGVsbENoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwZWxsLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4OTEiLCAiTTEyMCAzMmMtNDguNiAwLTg4IDM5LjQtODggODhsMCAxNjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTY0IDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTY4YzAtNDguNi0zOS40LTg4LTg4LTg4bC0xNiAwem00MCAxMjhsLTY0IDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDB6TTMwNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsNzIgMGM0OC42IDAgODgtMzkuNCA4OC04OCAwLTIzLjYtOS4zLTQ1LTI0LjQtNjAuOCAxMC4zLTE0LjQgMTYuNC0zMi4xIDE2LjQtNTEuMiAwLTQ4LjYtMzkuNC04OC04OC04OGwtNjQgMHptNjQgMTEybC0zMiAwIDAtNDggMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHpNMzM2IDI1NmwwLTQ4IDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDB6bTIzMyA4NGMxMS0xMy44IDguOC0zMy45LTUtNDVzLTMzLjktOC44LTQ1IDVsLTEwNS43IDEzMi4xLTM4LjctMzguN2MtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi40IDYuNCAxNS4zIDkuOCAyNC40IDkuM3MxNy41LTQuOSAyMy4yLTEyTDU2OSAzNDB6Il0KICAgIH07CiAgICBmYVZvbHVtZU9mZiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUtb2ZmIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwMjYiLCAiTTk2IDM1MmwtNDggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw0OCAwIDEzNC4xLTExOS4yYzYuNC01LjcgMTQuNi04LjggMjMuMS04LjggMTkuMiAwIDM0LjggMTUuNiAzNC44IDM0LjhsMCAzNzguNGMwIDE5LjItMTUuNiAzNC44LTM0LjggMzQuOC04LjUgMC0xNi43LTMuMS0yMy4xLTguOEw5NiAzNTJ6Il0KICAgIH07CiAgICBmYUx1bmdzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImx1bmdzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5NzI5XSwgImY2MDQiLCAiTTMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDE0MS45LTMyIDE5LjIgMC0xMTYuN2MwLTI0LjUtMTkuOS00NC40LTQ0LjQtNDQuNC0xMi41IDAtMjQuNCA1LjMtMzIuOCAxNC41bC0yNi40IDI5QzQyLjkgMTYwLjggMCAyNzEuOCAwIDM4N2wwIDMwLjVjMCA1Mi4yIDQyLjMgOTQuNSA5NC41IDk0LjUgMjIgMCA0My43LTUuMSA2My40LTE1bDUtMi41YzM3LjQtMTguNyA2MS01Ni45IDYxLTk4LjhsMC0xMjggNjQtMzguNCA2NCAzOC40IDAgMTI4YzAgNDEuOCAyMy42IDgwLjEgNjEgOTguOGw1IDIuNWMxOS43IDkuOCA0MS40IDE1IDYzLjQgMTUgNTIuMiAwIDk0LjUtNDIuMyA5NC41LTk0LjVsMC02LjJjMC0xMTEuMS0zNi43LTIxOS0xMDQuNC0zMDdMNDI4LjkgNDguN2MtOC4xLTEwLjYtMjAuNy0xNi43LTM0LTE2LjctMjMuNyAwLTQyLjkgMTkuMi00Mi45IDQyLjlsMCAxMTguMi0zMi0xOS4yIDAtMTQxLjl6Il0KICAgIH07CiAgICBmYUJvb2ttYXJrMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rbWFyayIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODI3OCwgNjE1OTFdLCAiZjAyZSIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0ODBjMCAxMS41IDYuMiAyMi4yIDE2LjIgMjcuOHMyMi4zIDUuNSAzMi4yLS40TDE5MiA0MjEuMyAzMzUuNSA1MDcuNGM5LjkgNS45IDIyLjIgNi4xIDMyLjIgLjRTMzg0IDQ5MS41IDM4NCA0ODBsMC00MTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMHoiXQogICAgfTsKICAgIGZhQmFyY29kZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMmEiLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRMMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMkw2NCA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnptODggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHptNzIgMzJsMCAzODRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM4NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnptMjA4LThsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHptLTk2IDBsMCA0MDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhTGlzdE9sID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3Qtb2wiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC0xLTIiLCAibGlzdC1udW1lcmljIl0sICJmMGNiIiwgIk0wIDcyQzAgNTguOCAxMC43IDQ4IDI0IDQ4bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxMDQgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtODAtMjQgMEMxMC43IDk2IDAgODUuMyAwIDcyek0zMC40IDMwMS4yQzQxLjggMjkyLjYgNTUuNyAyODggNzAgMjg4bDQuOSAwYzMzLjcgMCA2MS4xIDI3LjQgNjEuMSA2MS4xIDAgMTkuNi05LjQgMzcuOS0yNS4yIDQ5LjRsLTI0IDE3LjUgMzMuMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05MC43IDBDMTMuMSA0NjQgMCA0NTAuOSAwIDQzNC43IDAgNDI1LjMgNC41IDQxNi41IDEyLjEgNDExbDcwLjUtNTEuM2MzLjQtMi41IDUuNC02LjQgNS40LTEwLjYgMC03LjItNS45LTEzLjEtMTMuMS0xMy4xTDcwIDMzNmMtMy45IDAtNy43IDEuMy0xMC44IDMuNkwzOC40IDM1NS4yYy0xMC42IDgtMjUuNiA1LjgtMzMuNi00LjhTLTEgMzI0LjggOS42IDMxNi44bDIwLjgtMTUuNnpNMjI0IDY0bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnptMCAxNjBsMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDE2MGwyNTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYUxpc3QxMiA9IGZhTGlzdE9sOwogICAgZmFMaXN0TnVtZXJpYyA9IGZhTGlzdE9sOwogICAgZmFGaWxlQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTVhMSIsICJNOTYgMEM2MC43IDAgMzIgMjguNyAzMiA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxODAgMGMtMjIuNy0zMS41LTM2LTcwLjItMzYtMTEyIDAtMTAwLjYgNzcuNC0xODMuMiAxNzYtMTkxLjNsMC0zOC4xYzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek00MzIgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptNTkuMy0xODAuN2wtMzYuNyAzNi43IDM2LjcgMzYuN2M2LjIgNi4yIDYuMiAxNi40IDAgMjIuNnMtMTYuNCA2LjItMjIuNiAwbC0zNi43LTM2LjctMzYuNyAzNi43Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDM2LjctMzYuNy0zNi43LTM2LjdjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwzNi43IDM2LjcgMzYuNy0zNi43YzYuMi02LjIgMTYuNC02LjIgMjIuNiAwczYuMiAxNi40IDAgMjIuNnoiXQogICAgfTsKICAgIGZhQ3ViZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjdWJlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYxYjIiLCAiTTIyNC4zLTIuNWMxOS44LTExLjQgNDQuMi0xMS40IDY0IDBMNDY0LjIgOTljMTkuOCAxMS40IDMyIDMyLjYgMzIgNTUuNGwwIDIwM2MwIDIyLjktMTIuMiA0NC0zMiA1NS40TDI4OC4zIDUxNC41Yy0xOS44IDExLjQtNDQuMiAxMS40LTY0IDBMNDguNSA0MTNjLTE5LjgtMTEuNC0zMi0zMi42LTMyLTU1LjRsMC0yMDNjMC0yMi45IDEyLjItNDQgMzItNTUuNEwyMjQuMy0yLjV6bTIwNy44IDM2MGwwLTE2Ni4xLTE0My44IDgzIDAgMTY2LjEgMTQzLjgtODN6Il0KICAgIH07CiAgICBmYVRhcGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFwZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGRiIiwgIk00MTIuOCA0MTZjNDEuNS00MC43IDY3LjItOTcuMyA2Ny4yLTE2MCAwLTEyMy43LTEwMC4zLTIyNC0yMjQtMjI0UzMyIDEzMi4zIDMyIDI1NiAxMzIuMyA0ODAgMjU2IDQ4MGwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTMxLjIgMHpNMjU2IDE2MGE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnptNDggOTZhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhQm9tYiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib21iIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MTYzXSwgImYxZTIiLCAiTTQ4MC0xNmM2LjkgMCAxMyA0LjQgMTUuMiAxMC45bDEzLjUgNDAuNCA0MC40IDEzLjVDNTU1LjYgNTEgNTYwIDU3LjEgNTYwIDY0cy00LjQgMTMtMTAuOSAxNS4ybC00MC40IDEzLjUtMTMuNSA0MC40QzQ5MyAxMzkuNiA0ODYuOSAxNDQgNDgwIDE0NHMtMTMtNC40LTE1LjItMTAuOWwtMTMuNS00MC40LTQwLjQtMTMuNUM0MDQuNCA3NyA0MDAgNzAuOSA0MDAgNjRzNC40LTEzIDEwLjktMTUuMmw0MC40LTEzLjUgMTMuNS00MC40QzQ2Ny0xMS42IDQ3My4xLTE2IDQ4MC0xNnpNMzIxLjQgOTcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw4MCA4MGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM2wtMTAuOSAxMC45YzcuOSAyMiAxMi4yIDQ1LjcgMTIuMiA3MC41IDAgMTE0LjktOTMuMSAyMDgtMjA4IDIwOFMzMiA0MTguOSAzMiAzMDQgMTI1LjEgOTYgMjQwIDk2YzI0LjcgMCA0OC41IDQuMyA3MC41IDEyLjNsMTAuOS0xMC45ek0xNDQgMzA0YzAtNTMgNDMtOTYgOTYtOTYgMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRjLTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjR6Il0KICAgIH07CiAgICBmYVNjYWxlVW5iYWxhbmNlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2FsZS11bmJhbGFuY2VkIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhbGFuY2Utc2NhbGUtbGVmdCJdLCAiZjUxNSIsICJNNTE5LjggNjIuNGMxNi44LTUuNiAyNS44LTIzLjcgMjAuMi00MC41UzUxNi4zLTMuOSA0OTkuNiAxLjZsLTExMyAzNy43Yy0xMy45LTIzLjUtMzkuNi0zOS4zLTY4LjktMzkuMy00NC4yIDAtODAgMzUuOC04MCA4MCAwIDMgLjIgNS45IC41IDguOEwxMTUuNiAxMjkuNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDEzNS41LTQ1LjJjNC41IDMuMiA5LjMgNS45IDE0LjQgOC4ybDAgMzI2LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMjk0LjdjMjEtOS4yIDM3LjItMjcgNDQuMi00OWwxMjUuOS00MnpNNDM3LjMgMjg4bDcyLjQtMTI0LjIgNzIuNCAxMjQuMi0xNDQuOSAwem03Mi40IDk2YzYyLjkgMCAxMTUuMi0zNCAxMjYtNzguOSAyLjYtMTEtMS0yMi4zLTYuNy0zMi4xTDUzMy44IDEwOS44Yy01LTguNi0xNC4yLTEzLjgtMjQuMS0xMy44cy0xOS4xIDUuMy0yNC4xIDEzLjhMMzkwLjQgMjczLjFjLTUuNyA5LjgtOS4zIDIxLjEtNi43IDMyLjEgMTAuOCA0NC44IDYzLjEgNzguOSAxMjYgNzguOXpNMTI2LjggMjkxLjhsNzIuNCAxMjQuMi0xNDQuOSAwIDcyLjQtMTI0LjJ6TS45IDQzMy4xQzExLjcgNDc4IDY0IDUxMiAxMjYuOCA1MTJzMTE1LjItMzQgMTI2LTc4LjljMi42LTExLTEtMjIuMy02LjctMzIuMUwxNTAuOSAyMzcuOGMtNS04LjYtMTQuMi0xMy44LTI0LjEtMTMuOHMtMTkuMSA1LjMtMjQuMSAxMy44TDcuNiA0MDEuMWMtNS43IDkuOC05LjMgMjEuMS02LjcgMzIuMXoiXQogICAgfTsKICAgIGZhQmFsYW5jZVNjYWxlTGVmdCA9IGZhU2NhbGVVbmJhbGFuY2VkOwogICAgZmFTcXVhcmVDYXJldExlZnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1jYXJldC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhcmV0LXNxdWFyZS1sZWZ0Il0sICJmMTkxIiwgIk0wIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2ek0xMjggMjU2YzAtNi43IDIuOC0xMyA3LjctMTcuNmwxMTItMTA0YzctNi41IDE3LjItOC4yIDI1LjktNC40UzI4OCAxNDIuNSAyODggMTUybDAgMjA4YzAgOS41LTUuNyAxOC4yLTE0LjQgMjJzLTE4LjkgMi4xLTI1LjktNC40bC0xMTItMTA0Yy00LjktNC41LTcuNy0xMC45LTcuNy0xNy42eiJdCiAgICB9OwogICAgZmFDYXJldFNxdWFyZUxlZnQyID0gZmFTcXVhcmVDYXJldExlZnQyOwogICAgZmFSdWxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydWxlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODIwN10sICJmNTQ1IiwgIk0yMDkuMSA1MTYuMmMtMTguNyAxOC43LTQ5LjEgMTguNy02Ny45IDBMMjguMSA0MDMuMWMtMTguNy0xOC43LTE4LjctNDkuMSAwLTY3LjlsMTctMTcgNzMuNSA3My41YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNzMuNS03My41IDMzLjktMzMuOSA1MC45IDUwLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC01MC45LTUwLjkgMzMuOS0zMy45IDczLjUgNzMuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTczLjUtNzMuNSAzMy45LTMzLjkgNTAuOSA1MC45YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTAuOS01MC45IDMzLjktMzMuOSA3My41IDczLjVjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC03My41LTczLjUgMTctMTdjMTguNy0xOC43IDQ5LjEtMTguNyA2Ny45IDBMNTQ4LjUgMTA4LjljMTguNyAxOC43IDE4LjcgNDkuMSAwIDY3LjlMMjA5LjEgNTE2LjJ6Il0KICAgIH07CiAgICBmYUkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwNV0sICI0OSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDk2IDAgMCAzMjAtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMCAwLTMyMCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFWb2x1bWVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2b2x1bWUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm9sdW1lLW11dGUiLCAidm9sdW1lLXRpbWVzIl0sICJmNmE5IiwgIk00OCAzNTJsNDggMCAxMzQuMSAxMTkuMmM2LjQgNS43IDE0LjYgOC44IDIzLjEgOC44IDE5LjIgMCAzNC44LTE1LjYgMzQuOC0zNC44bDAtMzc4LjRjMC0xOS4yLTE1LjYtMzQuOC0zNC44LTM0LjgtOC41IDAtMTYuNyAzLjEtMjMuMSA4LjhMOTYgMTYwIDQ4IDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHpNMzY3IDE3NWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlsNDcgNDctNDcgNDdjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0Ny00NyA0NyA0N2M5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTQ3LTQ3IDQ3LTQ3YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTQ3IDQ3LTQ3LTQ3Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhVm9sdW1lTXV0ZSA9IGZhVm9sdW1lWG1hcms7CiAgICBmYVZvbHVtZVRpbWVzID0gZmFWb2x1bWVYbWFyazsKICAgIGZhQXJjaHdheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcmNod2F5IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NTciLCAiTTMyIDMyQzE0LjMgMzIgMCA0Ni4zIDAgNjRTMTQuMyA5NiAzMiA5Nmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMnptMCAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTI4IDAgMC0xMjhjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDEyOCAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTI3Mi00NDggMCAwIDI3MnoiXQogICAgfTsKICAgIGZhUGVyc29uRGlnZ2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZGlnZ2luZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkaWdnaW5nIl0sICJmODVlIiwgIk0yMDggNDBhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMC41IDE4MS4zYzUuOS0xMS45IDIwLjMtMTYuNyAzMi4yLTEwLjdsMjQuNiAxMi4zIDEyLjItMjAuNGMxOC45LTMxLjUgNTMuMi01MC41IDg5LjYtNTAuNSA0Ni4yIDAgODcuNyAzMC41IDEwMC41IDc1LjRsMzIuMiAxMTIuNyA5Mi45IDQ2LjQgMjUuOC00M2M1LjgtOS42IDE2LjItMTUuNSAyNy40LTE1LjVzMjEuNyA1LjkgMjcuNCAxNS41bDk2IDE2MGM1LjkgOS45IDYuMSAyMi4yIC40IDMyLjJTNTU1LjUgNTEyIDU0NCA1MTJsLTE5MiAwYy0xMS41IDAtMjIuMi02LjItMjcuOC0xNi4ycy01LjUtMjIuMyAuNC0zMi4yTDM3MCAzODcuOCAyMS4zIDIxMy41Yy0xMS45LTUuOS0xNi43LTIwLjMtMTAuNy0zMi4yek05NC4zIDMwNy40bDExMiA1NmMxMC44IDUuNCAxNy43IDE2LjUgMTcuNyAyOC42bDAgODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02OC4yLTYxLjMtMzAuNy0zNi4zIDEwOWMtNS42IDE2LjgtMjMuNyAyNS44LTQwLjUgMjAuMlMtMy45IDQ4Ni42IDEuNyA0NjkuOWw0OC0xNDRjMi45LTguOCA5LjUtMTUuOSAxOC4xLTE5LjRzMTguMy0zLjIgMjYuNiAuOXoiXQogICAgfTsKICAgIGZhRGlnZ2luZyA9IGZhUGVyc29uRGlnZ2luZzsKICAgIGZhR2F1Z2VIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdhdWdlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MjQ2MSwgInRhY2hvbWV0ZXItYWx0IiwgInRhY2hvbWV0ZXItYWx0LWZhc3QiXSwgImY2MjUiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTI4OCA5NmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0yNTYgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0IDAtMTYuMi02LTMxLjEtMTYtNDIuM2w2OS41LTEzOC45YzUuOS0xMS45IDEuMS0yNi4zLTEwLjctMzIuMnMtMjYuMy0xLjEtMzIuMiAxMC43TDI2MS4xIDI4OC4yYy0xLjctLjEtMy40LS4yLTUuMS0uMi0zNS4zIDAtNjQgMjguNy02NCA2NHMyOC43IDY0IDY0IDY0ek0xNzYgMTQ0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTk2IDI4OGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6bTM1Mi0zMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAweiJdCiAgICB9OwogICAgZmFUYWNob21ldGVyQWx0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYVRhY2hvbWV0ZXJBbHRGYXN0ID0gZmFHYXVnZUhpZ2g7CiAgICBmYUdlbmRlcmxlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2VuZGVybGVzcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMjJkIiwgIk0xOTIgMTI4YTEyOCAxMjggMCAxIDEgMCAyNTYgMTI4IDEyOCAwIDEgMSAwLTI1NnptMCAzMjBhMTkyIDE5MiAwIDEgMCAwLTM4NCAxOTIgMTkyIDAgMSAwIDAgMzg0eiJdCiAgICB9OwogICAgZmFDbG91ZFN1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG91ZC1zdW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5OTI1XSwgImY2YzQiLCAiTTQ1My42LTE0LjhjNC45IDIgOC41IDYuNCA5LjUgMTEuNkw0ODAgODAgNTYzLjIgOTYuOGM1LjIgMS4xIDkuNSA0LjYgMTEuNiA5LjVzMS41IDEwLjUtMS40IDE0LjlsLTQ2LjkgNzAuNyA0Ni45IDcwLjdjMi45IDQuNCAzLjUgMTAgMS40IDE0LjlzLTYuNCA4LjUtMTEuNiA5LjVMNTAxIDI5OS43Yy0xMS45LTguNy0yNS4xLTE1LjYtMzkuNC0yMC40LTIuNS0xMi43LTYuOC0yNC43LTEyLjctMzUuNyA5LjUtMTQuOSAxNS4xLTMyLjYgMTUuMS01MS43IDAtNTMtNDMtOTYtOTYtOTYtNDcuOSAwLTg3LjYgMzUuMS05NC44IDgwLjktMjYuNS0yMC4zLTU5LjUtMzIuNS05NS40LTMyLjlsLTE1LjEtMjIuN2MtMi45LTQuNC0zLjUtMTAtMS40LTE0LjlzNi40LTguNSAxMS42LTkuNUwyNTYgODAgMjcyLjgtMy4yYzEuMS01LjIgNC42LTkuNSA5LjUtMTEuNnMxMC41LTEuNSAxNC45IDEuNEwzNjggMzMuNiA0MzguNy0xMy4zYzQuNC0yLjkgMTAtMy41IDE0LjktMS40ek00MTYgMTkyYzAgMy44LS40IDcuNS0xLjMgMTEuMS0yMS43LTE3LTQ5LTI3LjEtNzguNy0yNy4xLTQuNiAwLTkuMSAuMi0xMy41IC43IDYuNC0xOSAyNC40LTMyLjcgNDUuNS0zMi43IDI2LjUgMCA0OCAyMS41IDQ4IDQ4ek05NiA1MTJjLTUzIDAtOTYtNDMtOTYtOTYgMC00Mi41IDI3LjYtNzguNiA2NS45LTkxLjItMS4zLTYuNy0xLjktMTMuNy0xLjktMjAuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA0My4xIDAgODAuNSAyNC4zIDk5LjIgNjAgMTQuNy0xNy4xIDM2LjUtMjggNjAuOC0yOCA0NC4yIDAgODAgMzUuOCA4MCA4MCAwIDUuNS0uNiAxMC44LTEuNiAxNiAuNSAwIDEuMSAwIDEuNiAwIDUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2TDk2IDUxMnoiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTRdLCAiZjA2MSIsICJNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzcwLjcgMC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMGwxNjAtMTYweiJdCiAgICB9OwogICAgZmFIYW5kc2hha2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTMwOSwgNjI2NjIsICJoYW5kc2hha2UtYWx0IiwgImhhbmRzaGFrZS1zaW1wbGUiXSwgImYyYjUiLCAiTTI2OC45IDg1LjJMMTUyLjMgMjE0LjhjLTQuNiA1LjEtNC40IDEzIC41IDE3LjkgMzAuNSAzMC41IDgwIDMwLjUgMTEwLjUgMGwzMS44LTMxLjhjNC4yLTQuMiA5LjUtNi41IDE0LjktNi45IDYuOC0uNiAxMy44IDEuNyAxOSA2LjlMNTA1LjYgMzc2IDU3NiAzMjAgNTc2IDMyIDQ2NCA5NiA0NDAuMiA4MC4xQzQyNC40IDY5LjYgNDA1LjkgNjQgMzg2LjkgNjRsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxODIuN0wyMjMuNCA2NCAxODMuOCA2NGMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMTEyIDk2IDAgMzIgMCAzMjAgMTU2LjQgNDUwLjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzE5LjEgMCAzNy44LTQuMyA1NC44LTEyLjNMMzU5IDQ0MWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAwbDMyIDMyIDE3LjUtMTcuNWM4LjktOC45IDExLjUtMjEuOCA3LjYtMzMuMWwtMTM3LjktMTM2LjgtMTQuOSAxNC45Yy00OS4zIDQ5LjMtMTI5LjEgNDkuMy0xNzguNCAwLTIzLTIzLTIzLjktNTkuOS0yLjItODR6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFsdDIgPSBmYUhhbmRzaGFrZTI7CiAgICBmYUhhbmRzaGFrZVNpbXBsZTIgPSBmYUhhbmRzaGFrZTI7CiAgICBmYVBlcnNvblNraWluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tc2tpaW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTk3NSwgInNraWluZyJdLCAiZjdjOSIsICJNNDE2IDU2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNMi43IDMwMC45YzYuMS0xMS44IDIwLjYtMTYuMyAzMi40LTEwLjJsMTk3LjggMTAyLjcgNjIuMy04Ny4yLTgyLTkyLjJjLTExLTEyLjQtMTYuMi0yNy41LTE2LjItNDIuNGwxMTEuNiA1My40IDQyLjkgNDguMmMxNC45IDE2LjcgMTYuMiA0MS42IDMuMiA1OS44bC02NC40IDkwLjIgMTI4LjMgNjYuNmMxMy42IDcuMSAyOS44IDcuMiA0My42IC4zbDE1LjItNy42YzExLjktNS45IDI2LjMtMS4xIDMyLjIgMTAuN3MxLjEgMjYuMy0xMC43IDMyLjJsLTE1LjIgNy42Yy0yNy41IDEzLjctNTkuOSAxMy41LTg3LjItLjdMMTIuOSAzMzMuM0MxLjIgMzI3LjItMy40IDMxMi43IDIuNyAzMDAuOXpNMTAzIDQ5LjZsMTggOC43IDguNy0xNy40YzQtNy45IDEzLjYtMTEuMSAyMS41LTcuMnMxMS4xIDEzLjYgNy4yIDIxLjVsLTguNSAxNyA4NC44IDQxIC40LS4yIDc2LjEtMzMuOGMzMS4zLTEzLjkgNjcuOS0uNyA4My4yIDI5LjlsMjguOSA1Ny44IDY4LjcgMjcuNWMxNi40IDYuNiAyNC40IDI1LjIgMTcuOCA0MS42cy0yNS4yIDI0LjQtNDEuNiAxNy44TDM5My44IDIyNGMtMTAuOS00LjQtMTkuOC0xMi42LTI1LjEtMjMuMWwtMTEuNS0yMy4xYy0xNi40IDkuNC0yNS45IDE0LjgtMjguNSAxNi4zbC03LjYtMy43LTE4NS42LTg5LjYtOS4yIDE4LjNjLTQgNy45LTEzLjYgMTEuMS0yMS41IDcuMnMtMTEuMS0xMy42LTcuMi0yMS41bDktMTcuOS0xNy42LTguNUM4MS4xIDc0LjYgNzcuOCA2NSA4MS42IDU3Uzk1IDQ1LjcgMTAzIDQ5LjZ6Il0KICAgIH07CiAgICBmYVNraWluZyA9IGZhUGVyc29uU2tpaW5nOwogICAgZmFCcmlkZ2VXYXRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmlkZ2Utd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRjZSIsICJNNjQgNjRsNTEyIDAgMCAxMTJjLTM3LjYgOS40LTY0IDQzLjItNjQgODJsMCA3Ni40Yy0yMS05LjctNDMuNS0xNC41LTY2LTE0LjQtMTAgLjEtMjAuMSAxLjEtMzAgMy4xbDAtMzUuMWMwLTUzLTQzLTk2LTk2LTk2cy05NiA0My05NiA5NmwwIDMyLjdjLTUuMy0uNS0xMC43LS44LTE2LS43LTI3LjcgLjItNTUuNCA3LjgtODAgMjNsMC04NWMwLTM4LjgtMjYuNC03Mi42LTY0LTgyTDY0IDY0ek00MDMuNCA0NDQuMUMzNzkuMSA0NjIuMyAzNTEuMSA0ODAgMzIwIDQ4MHMtNTkuMS0xNy43LTgzLjQtMzUuOWMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDAtMjMuOCAxNy45LTU0LjEgMzUuNS04OC4xIDM1LjMtMjAuNC0uMS00MC43LTYuNy01OS44LTIxLjEtMTAuNi04LTEyLjctMjMtNC43LTMzLjZzMjMtMTIuNyAzMy42LTQuN2MxMS4zIDguNSAyMS42IDExLjQgMzEuMiAxMS41IDE3LjYgLjEgMzcuMy05LjQgNTguOS0yNS43IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAyNCAxOC4xIDQwLjcgMjYuMyA1NC41IDI2LjNzMzAuNS04LjIgNTQuNS0yNi4zYzM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNi45IDEyLjcgMzIuOSAyMS41IDQ3LjggMjQuNiAxMy43IDIuOCAyNy40IC45IDQyLjMtMTAuMyAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI2LjQgMTkuOS01NC4yIDI0LjQtODAuNyAxOS4xLTI1LjMtNS4xLTQ4LjEtMTguOS02Ny4yLTMzLjMtMjEuMy0xNi4xLTQ5LjktMTYuMS03MS4yIDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nTmdvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLW5nbyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ3IiwgIk0xMjggMEM5Mi43IDAgNjQgMjguNyA2NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0OCAwIDAtMTEyYzAtMzUuMyAyOC43LTY0IDY0LTY0bDIwOCAwIDAtMjcyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDEyOCAwem0zMiAxMTJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnpNMzA0IDk2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTE2MCAyNDBjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMnptMTQ0LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6TTUyMCAzODBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0bDAgODBjMCAyNC4zIDE5LjcgNDQgNDQgNDRsMTYgMGMyNC4zIDAgNDQtMTkuNyA0NC00NGwwLTgwYzAtMjQuMy0xOS43LTQ0LTQ0LTQ0bC0xNiAwem0tNCA0NGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4MGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwem0tMTY4IDBsMCA4MGMwIDI0LjMgMTkuNyA0NCA0NCA0NGwxNiAwYzI0LjMgMCA0NC0xOS43IDQ0LTQ0bDAtMjRjMC0xMS05LTIwLTIwLTIwbC04IDBjLTExIDAtMjAgOS0yMCAyMCAwIDYuNSAzLjEgMTIuNCA4IDE2bDAgOGMwIDIuMi0xLjggNC00IDRsLTE2IDBjLTIuMiAwLTQtMS44LTQtNGwwLTgwYzAtMi4yIDEuOC00IDQtNGwyMC40IDBjMS45IDkuMSA5LjkgMTYgMTkuNiAxNiAxMSAwIDIwLTkgMjAtMjAgMC0xOS45LTE2LjEtMzYtMzYtMzZsLTI0IDBjLTI0LjMgMC00NCAxOS43LTQ0IDQ0em0tOTAuMS0zMi45Yy00LjEtOC4zLTEzLjUtMTIuNy0yMi41LTEwLjVTMjIwIDM5MC43IDIyMCA0MDBsMCAxMjhjMCAxMSA5IDIwIDIwIDIwczIwLTkgMjAtMjBsMC00My4zIDI2LjEgNTIuMmM0LjEgOC4zIDEzLjUgMTIuNyAyMi41IDEwLjVTMzI0IDUzNy4zIDMyNCA1MjhsMC0xMjhjMC0xMS05LTIwLTIwLTIwcy0yMCA5LTIwIDIwbDAgNDMuMy0yNi4xLTUyLjJ6Il0KICAgIH07CiAgICBmYUlnbG9vID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImlnbG9vIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3YWUiLCAiTTMyMCAzMy44bDAgMTI2LjItMjcxLjUgMGM1MS43LTc3LjIgMTM5LjYtMTI4IDIzOS41LTEyOCAxMC44IDAgMjEuNSAuNiAzMiAxLjh6TTM2OCAxNjBsMC0xMTYuN2M2NiAxOSAxMjIuMiA2MSAxNTkuNSAxMTYuN0wzNjggMTYwek0yMi42IDIwOGw3My40IDAgMCAxMTItOTYgMGMwLTM5LjcgOC03Ny42IDIyLjYtMTEyek0xNzYgMzIwbC0zMiAwIDAtMTEyIDI4OCAwIDAgMTEyLTMyIDAgMCA0OCAxNzYgMCAwIDY0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC02NCAxNzYgMCAwLTQ4em0zMDQgMGwwLTExMiA3My40IDBDNTY4IDI0Mi40IDU3NiAyODAuMyA1NzYgMzIwbC05NiAwek0yODggMjg4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgwIDEyOCAwIDAtODBjMC0zNS4zLTI4LjctNjQtNjQtNjR6Il0KICAgIH07CiAgICBmYUNpcmNsZURvbGxhclRvU2xvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtZG9sbGFyLXRvLXNsb3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiZG9uYXRlIl0sICJmNGI5IiwgIk05NiAyMjRhMTkyIDE5MiAwIDEgMSAzODQgMCAxOTIgMTkyIDAgMSAxIC0zODQgMHptMTc2LTkybDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDI0OCAyNzJjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6TTQ4IDM0NGwwIDEwNGMwIDguOCA3LjIgMTYgMTYgMTZsNDQ4IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDM0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFEb25hdGUgPSBmYUNpcmNsZURvbGxhclRvU2xvdDsKICAgIGZhWSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ5IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTIxXSwgIjU5IiwgIk01OCA0NS40QzQ3LjggMzEgMjcuOCAyNy43IDEzLjQgMzhTLTQuMyA2OC4yIDYgODIuNkwxNjAgMjk4LjMgMTYwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ5LjcgMTU0LTIxNS43YzEwLjMtMTQuNCA2LjktMzQuNC03LjQtNDQuNlMzMzYuMiAzMSAzMjYgNDUuNEwxOTIgMjMyLjkgNTggNDUuNHoiXQogICAgfTsKICAgIGZhRmFjZVNtaWxlV2luazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1zbWlsZS13aW5rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTIxLCAic21pbGUtd2luayJdLCAiZjRkYSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xNjQgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFTbWlsZVdpbmsyID0gZmFGYWNlU21pbGVXaW5rMjsKICAgIGZhRGljZUZvdXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGljZS1mb3VyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg1OV0sICJmNTI0IiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnptMTYwIDY0YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTEyOCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0ek0zNTIgMTYwYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6TTMyMCAzODRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGYWNlR3JpblNxdWludFRlYXJzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tc3F1aW50LXRlYXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI5MzE1LCAiZ3Jpbi1zcXVpbnQtdGVhcnMiXSwgImY1ODYiLCAiTTU2MCAzNS40YzAgMjUuNi0xOC44IDQ3LjMtNDQuMSA1MC45TDQ2OS4xIDkzYy0xMC42IDEuNS0xOS42LTcuNS0xOC4xLTE4LjFsNi43LTQ2LjdDNDYxLjMgMi44IDQ4My0xNiA1MDguNi0xNiA1MzctMTYgNTYwIDcgNTYwIDM1LjR6TTQwMy41IDY4LjFjLTYgNDIuMiAzMC4yIDc4LjQgNzIuNCA3Mi40bDM3LjgtNS40QzU2NS43IDIzMiA1NTAuOCAzNTUuMyA0NjkgNDM3cy0yMDUgOTYuNi0zMDEuOSA0NC43bDUuNC0zNy44YzYtNDIuMi0zMC4yLTc4LjQtNzIuNC03Mi40bC0zNy44IDUuNEMxMC4zIDI4MCAyNS4yIDE1Ni43IDEwNyA3NVMzMTItMjEuNyA0MDguOSAzMC4zbC01LjQgMzcuOHpNNDE3LjggMjAxYy0xOS4xIDM2LjQtNDUuNiA3Mi43LTc4LjkgMTA2cy02OS42IDU5LjgtMTA2IDc4LjljLTExLjEgNS44LTEyLjQgMjEuNC0xLjEgMjYuNiA1OS4yIDI3LjUgMTMxLjggMTYuOCAxODAuNi0zMnM1OS41LTEyMS40IDMyLTE4MC42Yy01LjMtMTEuMy0yMC44LTEwLTI2LjYgMS4xek0xMTMuOSAyNzAuNmMxLjcgOCA5IDEzLjQgMTcuMSAxMi43bDQzLjEtMy45LTMuOSA0My4xYy0uNyA4LjEgNC43IDE1LjUgMTIuNyAxNy4xczE1LjktMi45IDE4LjQtMTAuNmwyOC04NC42YzEuOS01LjcgLjQtMTIuMS0zLjktMTYuM3MtMTAuNi01LjgtMTYuMy0zLjlsLTg0LjYgMjhjLTcuNyAyLjYtMTIuMyAxMC41LTEwLjYgMTguNXpNMzE1LjIgOTkuMWMuNy04LjEtNC43LTE1LjUtMTIuNy0xNy4xcy0xNS45IDIuOS0xOC41IDEwLjZsLTI4IDg0LjZjLTEuOSA1LjctLjQgMTIuMSAzLjkgMTYuM3MxMC42IDUuOCAxNi4zIDMuOWw4NC42LTI4YzcuNy0yLjYgMTIuMy0xMC41IDEwLjYtMTguNHMtOS0xMy40LTE3LjEtMTIuN2wtNDMuMSAzLjkgMy45LTQzLjF6TTYwLjEgNDI1LjdsNDYuNy02LjdjMTAuNi0xLjUgMTkuNiA3LjUgMTguMSAxOC4xbC02LjcgNDYuN0MxMTQuNyA1MDkuMiA5MyA1MjggNjcuNCA1MjggMzkgNTI4IDE2IDUwNSAxNiA0NzYuNiAxNiA0NTEgMzQuOCA0MjkuMyA2MC4xIDQyNS43eiJdCiAgICB9OwogICAgZmFHcmluU3F1aW50VGVhcnMyID0gZmFGYWNlR3JpblNxdWludFRlYXJzMjsKICAgIGZhRmlsZUF1ZGlvMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWF1ZGlvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzciLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41em01My44IDE4NS4yYy05LjEtNi4zLTIxLjUtNC4xLTI3LjggNXMtNC4xIDIxLjUgNSAyNy44YzIzLjkgMTYuNyAzOS40IDQ0LjMgMzkuNCA3NS41cy0xNS42IDU4LjktMzkuNCA3NS41Yy05LjEgNi4zLTExLjMgMTguOC01IDI3LjhzMTguOCAxMS4zIDI3LjggNWMzNC4xLTIzLjggNTYuNi02My41IDU2LjYtMTA4LjNTMjk2IDI2Ny41IDI2MS44IDI0My43ek04MCAzMTJjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNmwyNCAwIDI3LjIgMzRjMyAzLjggNy42IDYgMTIuNSA2bC4zIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTI4YzAtOC44LTcuMi0xNi0xNi0xNmwtLjMgMGMtNC45IDAtOS41IDIuMi0xMi41IDZsLTI3LjIgMzQtMjQgMHptMTI4IDcyLjJjMCAxMC43IDEwLjUgMTguMiAxOC45IDExLjYgMTIuOS0xMC4zIDIxLjEtMjYuMSAyMS4xLTQzLjhzLTguMi0zMy41LTIxLjEtNDMuOGMtOC40LTYuNy0xOC45IC45LTE4LjkgMTEuNmwwIDY0LjV6Il0KICAgIH07CiAgICBmYUFycm93c0Rvd25Ub0xpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLWRvd24tdG8tbGluZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI4IiwgIk0yMTQuNiAzMTAuNmwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAyNzQuNyA5NiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMjQyLjcgOS40LTkuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0yNTYgMGwtNjQgNjRjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC02NC02NGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMGw5LjQgOS40IDAtMjQyLjdjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDI0Mi43IDkuNC05LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3pNMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ0OCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDUxMnoiXQogICAgfTsKICAgIGZhRyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAzXSwgIjQ3IiwgIk0yMjQgOTZDMTM1LjYgOTYgNjQgMTY3LjYgNjQgMjU2czcxLjYgMTYwIDE2MCAxNjBjNzcuNCAwIDE0Mi01NSAxNTYuOC0xMjhMMjU2IDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNDQgMGMyNS44IDAgNDkuNiAyMS40IDQ3LjIgNTAuNi05LjUgMTE1LTEwNS44IDIwNS40LTIyMy4yIDIwNS40LTEyMy43IDAtMjI0LTEwMC4zLTIyNC0yMjRTMTAwLjMgMzIgMjI0IDMyYzU3LjQgMCAxMDkuNyAyMS42IDE0OS4zIDU3IDEzLjIgMTEuOCAxNC4zIDMyIDIuNSA0NS4ycy0zMiAxNC4zLTQ1LjIgMi41QzMwMi4zIDExMS40IDI2NSA5NiAyMjQgOTZ6Il0KICAgIH07CiAgICBmYVZpaGFyYSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWhhcmEiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjZhNyIsICJNMjczLjYtMy4yYzguNS02LjQgMjAuMy02LjQgMjguOCAwTDQ0My4yIDEwMi40YzguMyA2LjIgMTguNCA5LjYgMjguOCA5LjYgMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI0IDAgMCA0OCA1OC43IDY0IDEzLjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgNDggMjQuNCAzMiAxNS42IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQwIDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTEyOCAwIDAgMzJjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xMjggMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItNDAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyMi4xIDAgMTcuOS0zMiAwLTQ4LTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMy4zIDAgNTguNy02NCAwLTQ4LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjMTAuNCAwIDIwLjUtMy40IDI4LjgtOS42TDI3My42LTMuMnpNMTI4IDM2OGwzMjAgMCAwLTQ4LTMyMCAwIDAgNDh6TTM4NCAxNjBsLTE5MiAwIDAgNDggMTkyIDAgMC00OHoiXQogICAgfTsKICAgIGZhRmxhZ0NoZWNrZXJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmbGFnLWNoZWNrZXJlZCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzkzN10sICJmMTFlIiwgIk0zMiAwQzQ5LjcgMCA2NCAxNC4zIDY0IDMybDAgMTYgNjktMTcuMmMzOC4xLTkuNSA3OC4zLTUuMSAxMTMuNSAxMi41IDQ2LjMgMjMuMiAxMDAuOCAyMy4yIDE0Ny4xIDBsOS42LTQuOEM0MjMuOCAyOC4xIDQ0OCA0My4xIDQ0OCA2Ni4xbDAgMjc5LjdjMCAxMy4zLTguMyAyNS4zLTIwLjggMzBsLTM0LjcgMTNjLTQ2LjIgMTcuMy05Ny42IDE0LjYtMTQxLjctNy40LTM3LjktMTktODEuNC0yMy43LTEyMi41LTEzLjRMNjQgMzg0IDY0IDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMlMwIDQ5Ny43IDAgNDgwTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwek02NCAxODcuMWw2NC0xMy45IDAgNjUuNS02NCAxMy45IDAgNjUuNSA0OC44LTEyLjJjNS4xLTEuMyAxMC4xLTIuNCAxNS4yLTMuM2wwLTYzLjkgMzguOS04LjRjOC4zLTEuOCAxNi43LTIuNSAyNS4xLTIuMWwwLTY0YzEzLjYgLjQgMjcuMiAyLjYgNDAuNCA2LjRsMjMuNiA2LjkgMCA2Ni43LTQxLjctMTIuM2MtNy4zLTIuMS0xNC44LTMuNC0yMi4zLTMuOGwwIDcxLjRjMjEuOCAxLjkgNDMuMyA2LjcgNjQgMTQuNGwwLTY5LjggMjIuNyA2LjdjMTMuNSA0IDI3LjMgNi40IDQxLjMgNy40bDAtNjQuMmMtNy44LS44LTE1LjYtMi4zLTIzLjItNC41bC00MC44LTEyIDAtNjJjLTEzLTMuOC0yNS44LTguOC0zOC4yLTE1LTguMi00LjEtMTYuOS03LTI1LjgtOC44bDAgNzIuNGMtMTMtLjQtMjYgLjgtMzguNyAzLjZsLTI1LjMgNS41IDAtNzUuMi02NCAxNiAwIDczLjF6TTMyMCAzMzUuN2MxNi44IDEuNSAzMy45LS43IDUwLTYuOGwxNC01LjIgMC03MS43LTcuOSAxLjhjLTE4LjQgNC4zLTM3LjMgNS43LTU2LjEgNC41bDAgNzcuNHptNjQtMTQ5LjRsMC03MC44Yy0yMC45IDYuMS00Mi40IDkuMS02NCA5LjFsMCA2OS40YzEzLjkgMS40IDI4IC41IDQxLjctMi42bDIyLjMtNS4yeiJdCiAgICB9OwogICAgZmFHYXVnZVNpbXBsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnYXVnZS1zaW1wbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiZ2F1Z2Utc2ltcGxlLW1lZCIsICJ0YWNob21ldGVyLWF2ZXJhZ2UiXSwgImY2MjkiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTMyMCA5NmMwLTI2LjktMTYuNS00OS45LTQwLTU5LjNMMjgwIDEyMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDE3Mi43Yy0yMy41IDkuNS00MCAzMi41LTQwIDU5LjMgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhR2F1Z2VTaW1wbGVNZWQgPSBmYUdhdWdlU2ltcGxlOwogICAgZmFUYWNob21ldGVyQXZlcmFnZSA9IGZhR2F1Z2VTaW1wbGU7CiAgICBmYVJpZ2h0TGVmdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyaWdodC1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImV4Y2hhbmdlLWFsdCJdLCAiZjM2MiIsICJNNTAyLjYgMTUwLjZsLTk2IDk2Yy05LjIgOS4yLTIyLjkgMTEuOS0zNC45IDYuOVMzNTIgMjM2LjkgMzUyIDIyNGwwLTY0LTMyMCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDMyMCAwIDAtNjRjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnMyNS43LTIuMiAzNC45IDYuOWw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3ptLTM5Ny4zIDM1MmwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDk2LTk2YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzE2MCAyNzUuMSAxNjAgMjg4bDAgNjQgMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgNjRjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02Ljl6Il0KICAgIH07CiAgICBmYUV4Y2hhbmdlQWx0ID0gZmFSaWdodExlZnQ7CiAgICBmYVBpbGxzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBpbGxzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0ODQiLCAiTTY0IDExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTEyLTk2IDAgMC0xMTJ6TTE3NiAzNjhjMC00OC43IDE4LjEtOTMuMiA0OC0xMjdsMC0xMjlDMjI0IDUwLjEgMTczLjkgMCAxMTIgMFMwIDUwLjEgMCAxMTJMMCA0MDBjMCA2MS45IDUwLjEgMTEyIDExMiAxMTIgMzcuMyAwIDcwLjMtMTguMiA5MC43LTQ2LjMtMTctMjguNi0yNi43LTYyLTI2LjctOTcuN3ptNjQuNyA2Ny40YzQuNiA4LjcgMTYuMyA5LjcgMjMuMyAyLjdMNDM4LjEgMjY0YzctNyA2LTE4LjctMi43LTIzLjMtMjAuMS0xMC43LTQzLTE2LjctNjcuNC0xNi43LTc5LjUgMC0xNDQgNjQuNS0xNDQgMTQ0IDAgMjQuMyA2IDQ3LjMgMTYuNyA2Ny40ek0yOTcuOSA0NzJjLTcgNy02IDE4LjcgMi43IDIzLjMgMjAuMSAxMC43IDQzIDE2LjcgNjcuNCAxNi43IDc5LjUgMCAxNDQtNjQuNSAxNDQtMTQ0IDAtMjQuMy02LTQ3LjMtMTYuNy02Ny40LTQuNi04LjctMTYuMy05LjctMjMuMy0yLjdMMjk3LjkgNDcyeiJdCiAgICB9OwogICAgZmFFeHBsb3Npb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXhwbG9zaW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTkiLCAiTTI1Ni0zMmMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDQ4YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjR6bTAgMTYwYzEyLjQgMCAyMi43IDkuNCAyMy45IDIxLjdMMjkzLjQgMjkxLjYgNDY3LjYgMTEuM2M2LjctMTAuNyAyMC41LTE0LjUgMzEuNy04LjVzMTUuOCAxOS41IDEwLjYgMzFMMzcyLjggMzM4LjZjMi4yIDIuMyA0LjMgNC43IDYuMyA3LjFsOTcuMi01NC43YzEwLjUtNS45IDIzLjYtMy4xIDMwLjkgNi40czYuMyAyMy0yLjIgMzEuNWwtODcgODctNzEuNCAwYy0xMy4yLTM3LjMtNDguNy02NC05MC41LTY0cy03Ny40IDI2LjctOTAuNSA2NGwtNzkuNiAwLTc1LjUtNTIuM0MuNiAzNTctMi44IDM0NC4xIDIuNCAzMzMuNXMxNy40LTE1LjkgMjguNy0xMi40bDk3LjIgMzAuNGMzLTMuOSA2LjEtNy42IDkuNC0xMS4zTDc1LjQgMjM2LjNjLTYuMS0xMC4xLTMuOS0yMy4xIDUuMS0zMC43czIyLjItNy41IDMxLjEgLjFMMjE0IDI5My42YzEuNS0uNCAzLS44IDQuNS0xLjFsMTMuNi0xNDIuN2MxLjItMTIuMyAxMS41LTIxLjcgMjMuOS0yMS43ek0zMiA0NjRsNDU2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMjQgNTEyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMHoiXQogICAgfTsKICAgIGZhQXJyb3dzRG93blRvUGVvcGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93cy1kb3duLXRvLXBlb3BsZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNGI5IiwgIk0xMTMgMTUzYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwxNSA4OUM1LjcgNzkuNiA1LjcgNjQuNCAxNSA1NVMzOS42IDQ1LjcgNDkgNTVMNzIgNzguMSA3Mi04YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA4Ni4xIDIzLTIzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtNjQgNjR6bTMyMCAwYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMEwzMzUgODljLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwyMyAyMyAwLTg2LjFjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDg2LjEgMjMtMjNjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC02NCA2NHpNMjU2IDE5MmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnptMCAxNjBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0zMmMwLTUzIDQzLTk2IDk2LTk2ek0zMiAyODhhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHptMzUyIDBhNDggNDggMCAxIDEgOTYgMCA0OCA0OCAwIDEgMSAtOTYgMHpNODAgMzY4YzE1LjMgMCAyOS42IDQuMyA0MS44IDExLjgtNi4zIDE2LjItOS44IDMzLjgtOS44IDUyLjJsMCA0OGMwIDExLjQgMi40IDIyLjIgNi43IDMybC04Ny44IDBDMTMuOCA1MTIgMCA0OTguMiAwIDQ4MS4xTDAgNDQ4YzAtNDQuMiAzNS44LTgwIDgwLTgwek0zOTMuMyA1MTJjNC4zLTkuOCA2LjctMjAuNiA2LjctMzJsMC00OGMwLTE4LjQtMy41LTM2LTkuOC01Mi4yIDEyLjItNy41IDI2LjUtMTEuOCA0MS44LTExLjggNDQuMiAwIDgwIDM1LjggODAgODBsMCAzMy4xYzAgMTctMTMuOCAzMC45LTMwLjkgMzAuOWwtODcuOCAweiJdCiAgICB9OwogICAgZmFVc2Vyc1ZpZXdmaW5kZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlcnMtdmlld2ZpbmRlciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTk1IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MmMwLTguOCA3LjItMTYgMTYtMTZsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNFMxNDkuMyAwIDEzNiAwTDY0IDB6TTQ0MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDcyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgNzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTcyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDQ0MCAwek00OCAzNzZjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAzNjIuNyAwIDM3NmwwIDcyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTcyem01MjggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDcyYzAgOC44LTcuMiAxNi0xNiAxNmwtNzIgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw3MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtNzJ6TTI4OCAyMTZhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6bTAgNDBjLTUzIDAtOTYgNDMtOTYgOTZsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTI0YzAtNTMtNDMtOTYtOTYtOTZ6bTE5Mi02NGE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAwek0xNjggMjcyLjNjLTQ5LjMgNC4xLTg4IDQ1LjMtODggOTUuN2wwIDEwLjdjMCAxMS44IDkuNiAyMS4zIDIxLjMgMjEuM2w0Ni44IDBjLTIuNy03LjUtNC4xLTE1LjYtNC4xLTI0bDAtMjRjMC0yOS41IDguOC01Ni45IDI0LTc5Ljd6TTQyNy45IDQwMGw0Ni44IDBjMTEuOCAwIDIxLjMtOS42IDIxLjMtMjEuM2wwLTEwLjdjMC01MC4zLTM4LjctOTEuNi04OC05NS43IDE1LjIgMjIuOCAyNCA1MC4yIDI0IDc5LjdsMCAyNGMwIDguNC0xLjQgMTYuNS00LjEgMjR6TTE5MiAxOTJhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhQ2FyT24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FyLW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0ZGQiLCAiTTI0OC04YzAtMTMuMy0xMC43LTI0LTI0LTI0UzIwMC0yMS4zIDIwMC04bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0ek0xNDUuMyAyMDhsMTU3LjUgMGM2LjcgMCAxMi42IDQuMSAxNSAxMC40bDI2LjEgNjkuNi0yMzkuNiAwIDI2LjEtNjkuNmMyLjMtNi4yIDguMy0xMC40IDE1LTEwLjR6TTM0IDI5Mi44bC0xLjMgMy40QzEzLjIgMzA3LjEgMCAzMjggMCAzNTJMMCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTMyIDI4OCAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTI0LTEzLjItNDQuOS0zMi44LTU1LjlsLTEuMy0zLjQtMzYuMy05Ni45Yy0xMS43LTMxLjItNDEuNi01MS45LTc0LjktNTEuOWwtMTU3LjUgMGMtMzMuMyAwLTYzLjIgMjAuNy03NC45IDUxLjlMMzQgMjkyLjh6TTk2IDMzNmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTIyNCAzMmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek03IDdDLTIuMyAxNi40LTIuMyAzMS42IDcgNDFMNTUgODljOS40IDkuNCAyNC42IDkuNCAzMy45IDBTOTguMyA2NC40IDg5IDU1TDQxIDdDMzEuNi0yLjMgMTYuNC0yLjMgNyA3ek00MDcgN0wzNTkgNTVjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw0OC00OGM5LjQtOS40IDkuNC0yNC42IDAtMzMuOVM0MTYuNC0yLjMgNDA3IDd6Il0KICAgIH07CiAgICBmYVNsZWlnaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzbGVpZ2giLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjdjYyIsICJNNjQgMzJDNDYuMyAzMiAzMiA0Ni4zIDMyIDY0UzQ2LjMgOTYgNjQgOTZsMCAxNjBjMCA0MS44IDI2LjcgNzcuNCA2NCA5MC41bDAgNjkuNS03MiAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDUwNCAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtOGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTgwIDAgMC02NGM1MyAwIDk2LTQzIDk2LTk2bDAtOTZjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzJjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTQ4LjkgMGMtNDguNSAwLTkyLjgtMjcuNC0xMTQuNS03MC44bC0yNS4yLTUwLjVDMjM3LjcgNTkuNCAxOTMuNCAzMiAxNDQuOSAzMkw2NCAzMnpNNDMyIDQxNmwtMjU2IDAgMC02NCAyNTYgMCAwIDY0eiJdCiAgICB9OwogICAgZmFEdW1iYmVsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkdW1iYmVsbCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNDRiIiwgIk05NiAxMTJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMiAyNTYgMCAwLTExMmMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMTYgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQ4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2IDAgMCAxNmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTExMi0yNTYgMCAwIDExMmMwIDI2LjUtMjEuNSA0OC00OCA0OHMtNDgtMjEuNS00OC00OGwwLTE2LTE2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMC00OGMwLTI2LjUgMjEuNS00OCA0OC00OGwxNiAwIDAtMTZ6Il0KICAgIH07CiAgICBmYUJhYnlDYXJyaWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWJ5LWNhcnJpYWdlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNhcnJpYWdlLWJhYnkiXSwgImY3N2QiLCAiTTY0IDIwOGwwIDgwYzAgNTMgNDMgOTYgOTYgOTZsMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwwLTExMiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC02NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDU2LTMzNiAwem0uMi00OGwyMjMuOCAwIDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDIzMiAwQzE0MS45IDAgNjguNCA3MC45IDY0LjIgMTYwek0xNjAgNDY0YTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6bTI4OCAwYTQ4IDQ4IDAgMSAwIC05NiAwIDQ4IDQ4IDAgMSAwIDk2IDB6Il0KICAgIH07CiAgICBmYUNhcnJpYWdlQmFieSA9IGZhQmFieUNhcnJpYWdlOwogICAgZmFLaXdpQmlyZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJraXdpLWJpcmQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjUzNSIsICJNMjkxLjIgMzg4LjRjMzEuMi0xOC44IDY0LjctMzYuNCAxMDEuMS0zNi40bDU1LjcgMGM0LjYgMCA5LjEtLjIgMTMuNi0uN2w4NS4zIDEyMS45YzQgNS43IDExLjMgOC4yIDE3LjkgNi4xUzU3NiA0NzEgNTc2IDQ2NGwwLTI0MGMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOGwtNTUuNyAwQzM1NS45IDk2IDMyMi40IDc4LjQgMjkxLjIgNTkuNiAyNjIuMyA0Mi4xIDIyOC4zIDMyIDE5MiAzMiA4NiAzMiAwIDExOCAwIDIyNCAwIDI5NS4xIDM4LjYgMzU3LjEgOTYgMzkwLjNMOTYgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00NmMxNS4zIDMuOSAzMS40IDYgNDggNiA1LjQgMCAxMC43LS4yIDE2LS43bDAgNDAuN2MwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNTAuOWMxMi40LTQuNCAyNC4yLTEwIDM1LjItMTYuN3pNNDQ4IDIwMGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyWG1hcmsyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbGVuZGFyLXhtYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImNhbGVuZGFyLXRpbWVzIl0sICJmMjczIiwgIk0xMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDMyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyODhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzMiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTI5MS45IDIyMC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyVGltZXMyID0gZmFDYWxlbmRhclhtYXJrMjsKICAgIGZhQ2lyY2xlRG93bjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTQ2NiwgImFycm93LWFsdC1jaXJjbGUtZG93biJdLCAiZjM1OCIsICJNMjU2IDBhMjU2IDI1NiAwIDEgMCAwIDUxMiAyNTYgMjU2IDAgMSAwIDAtNTEyek0yNDQuNyAzODcuM2wtMTA0LTEwNGMtNC42LTQuNi01LjktMTEuNS0zLjUtMTcuNHM4LjMtOS45IDE0LjgtOS45bDU2IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgNTYgMGM2LjUgMCAxMi4zIDMuOSAxNC44IDkuOXMxLjEgMTIuOS0zLjUgMTcuNGwtMTA0IDEwNGMtNi4yIDYuMi0xNi40IDYuMi0yMi42IDB6Il0KICAgIH07CiAgICBmYUFycm93QWx0Q2lyY2xlRG93bjIgPSBmYUNpcmNsZURvd24yOwogICAgZmFGaWxlTWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLW1lZGljYWwiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjQ3NyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTE2MCAyODBsMCA0MC00MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsNDAgMCAwIDQwYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTQwIDQwIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC00MCAwIDAtNDBjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInhtYXJrIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI4NDczLCAxMDAwNSwgMTAwMDYsIDEwMDYwLCAyMTUsICJjbG9zZSIsICJtdWx0aXBseSIsICJyZW1vdmUiLCAidGltZXMiXSwgImYwMGQiLCAiTTU1LjEgNzMuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTQ3LjIgMjU2IDkuOSAzOTMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIuNSAzMDEuMyAzMjkuOSA0MzguNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIzNy44IDI1NiAzNzUuMSAxMTguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIuNSAyMTAuNyA1NS4xIDczLjR6Il0KICAgIH07CiAgICBmYUNsb3NlID0gZmFYbWFyazsKICAgIGZhTXVsdGlwbHkgPSBmYVhtYXJrOwogICAgZmFSZW1vdmUgPSBmYVhtYXJrOwogICAgZmFUaW1lcyA9IGZhWG1hcms7CiAgICBmYVNoYXBlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGFwZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsidHJpYW5nbGUtY2lyY2xlLXNxdWFyZSJdLCAiZjYxZiIsICJNMjU2IDBjMTEuMiAwIDIxLjcgNS45IDI3LjQgMTUuNWw5NiAxNjBjNS45IDkuOSA2LjEgMjIuMiAuNCAzMi4yUzM2My41IDIyNCAzNTIgMjI0bC0xOTIgMGMtMTEuNSAwLTIyLjItNi4yLTI3LjgtMTYuMnMtNS41LTIyLjMgLjQtMzIuMmw5Ni0xNjBDMjM0LjMgNS45IDI0NC44IDAgMjU2IDB6TTEyOCAyNzJhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0em0yMDAgMTZsMTEyIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAxMTJjMCAyMi4xLTE3LjkgNDAtNDAgNDBsLTExMiAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTExMmMwLTIyLjEgMTcuOS00MCA0MC00MHoiXQogICAgfTsKICAgIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUgPSBmYVNoYXBlczsKICAgIGZhRGljZU9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLW9uZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTZdLCAiZjUyNSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMjI0IDIyNGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUxvY2tPcGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2stb3BlbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmM2MxIiwgIk0zODQgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRzNjQgMjguNyA2NCA2NGwwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMmMwLTcwLjctNTcuMy0xMjgtMTI4LTEyOFMzMjAgMjUuMyAzMjAgOTZsMCA2NC0xNjAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAyMjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yMjRjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTMyIDAgMC02NHoiXQogICAgfTsKICAgIGZhUGVwcGVySG90ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcHBlci1ob3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjc3OThdLCAiZjgxNiIsICJNNTQ1IDY1YzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBMNDc4LjkgNjMuMkM0NTIuMyA0My42IDQxOS41IDMyIDM4NCAzMiAzNDguOSAzMiAzMTYuNSA0My4zIDI5MC4xIDYyLjQgMjc0LjEgNzQuMSAyODQuMiA5NiAzMDQgOTZsMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAyNGMwIDE5LjggMjEuOSAyOS45IDMzLjYgMTMuOSAxOS4xLTI2LjQgMzAuNC01OC44IDMwLjQtOTMuOSAwLTM1LjUtMTEuNi02OC4zLTMxLjItOTQuOUw1NDUgNjV6TTI3MCAxMzUuNWwtMTU5LjYgMjI4QzEwMS4zIDM3Ni40IDg2LjcgMzg0IDcxIDM4NGwtNyAwYy0yNi41IDAtNDggMjEuNS00OCA0OHMyMS41IDQ4IDQ4IDQ4bDI3LjEgMGM2NS43IDAgMTI5LjctMjAuMiAxODMuNS01Ny44TDQ0MC41IDMwNi4xQzQzNSAyOTUuOSA0MzIgMjg0LjIgNDMyIDI3MmwtNTYgMGMtMzkuOCAwLTcyLTMyLjItNzItNzJsMC01NmMtMTIuMiAwLTIzLjktMy0zNC04LjV6Il0KICAgIH07CiAgICBmYURyb3BsZXRTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcm9wbGV0LXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRpbnQtc2xhc2giXSwgImY1YzciLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDYzLjYgMzk3LjhjMTAuNS0yMy44IDE2LjQtNTAuMSAxNi40LTc3LjggMC05MS4yLTEzMC4yLTI3NC4xLTE2Ni42LTMyMy41LTUuOS04LTE1LjItMTIuNS0yNS4yLTEyLjVsLS40IDBjLTEwIDAtMTkuMyA0LjUtMjUuMiAxMi41LTE1LjYgMjEuMi00OC41IDY2LjktODAuOSAxMTkuNEw0MS0yNC45em05MiAyMjcuN2MtMjEuNiA0My44LTM3IDg1LjktMzcgMTE3LjIgMCAxMDYgODYgMTkyIDE5MiAxOTIgNDMuNCAwIDgzLjQtMTQuNCAxMTUuNS0zOC42TDEzMyAyMDIuOHoiXQogICAgfTsKICAgIGZhVGludFNsYXNoID0gZmFEcm9wbGV0U2xhc2g7CiAgICBmYURyb3BsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJvcGxldCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODE2NywgInRpbnQiXSwgImYwNDMiLCAiTTE5MiA1MTJDODYgNTEyIDAgNDI2IDAgMzIwIDAgMjI4LjggMTMwLjIgNDUuOSAxNjYuNi0zLjUgMTcyLjUtMTEuNSAxODEuOC0xNiAxOTEuOC0xNmwuNCAwYzEwIDAgMTkuMyA0LjUgMjUuMiAxMi41IDM2LjQgNDkuNCAxNjYuNiAyMzIuMyAxNjYuNiAzMjMuNSAwIDEwNi04NiAxOTItMTkyIDE5MnpNMTEyIDMxMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGMwIDc1LjEgNjAuOSAxMzYgMTM2IDEzNiAxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDguNiAwLTg4LTM5LjQtODgtODh6Il0KICAgIH07CiAgICBmYVRpbnQgPSBmYURyb3BsZXQ7CiAgICBmYUZpbGVMaW5lczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQ0MSwgMTI4NDYyLCA2MTY4NiwgImZpbGUtYWx0IiwgImZpbGUtdGV4dCJdLCAiZjE1YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTEyMCAyNTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDE0NCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xNDQgMHoiXQogICAgfTsKICAgIGZhRmlsZUFsdDIgPSBmYUZpbGVMaW5lczI7CiAgICBmYUZpbGVUZXh0MiA9IGZhRmlsZUxpbmVzMjsKICAgIGZhQ29tbWVudHNEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMtZG9sbGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2NTMiLCAiTTE5MiAzMjBjMTA2IDAgMTkyLTc4LjggMTkyLTE3NlMyOTgtMzIgMTkyLTMyIDAgNDYuOCAwIDE0NGMwIDM5LjYgMTQuMyA3Ni4yIDM4LjQgMTA1LjZMMi44IDMxNi44Qy0yLjEgMzI2LjEtLjQgMzM3LjUgNyAzNDVzMTguOSA5LjIgMjguMiA0LjJMMTE2LjggMzA2YzIzLjEgOSA0OC41IDE0IDc1LjIgMTR6bTMuMiA0OGMxNi40IDgxLjkgOTQuNyAxNDQgMTg4LjggMTQ0IDI2LjcgMCA1Mi4xLTUgNzUuMi0xNGw4MS42IDQzLjJjOS4zIDQuOSAyMC43IDMuMiAyOC4yLTQuMnM5LjItMTguOSA0LjItMjguMmwtMzUuNi02Ny4yYzI0LjEtMjkuNCAzOC40LTY2IDM4LjQtMTA1LjYgMC04Mi40LTYxLjctMTUxLjUtMTQ1LTE3MC43LTExLjUgMTE1LjgtMTE1LjggMjAxLjItMjM1LjggMjAyLjd6TTE5NiAzMmMxMSAwIDIwIDkgMjAgMjBsMCA0IDggMGMxMSAwIDIwIDkgMjAgMjBzLTkgMjAtMjAgMjBsLTQ3LjUgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgNi4xIDQuNCAxMS4zIDEwLjQgMTIuM2w0MS43IDdjMjUuMyA0LjIgNDMuOSAyNi4xIDQzLjkgNTEuOCAwIDI2LjEtMTkgNDcuNy00NCA1MS44bDAgNC43YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLTQtMjQgMGMtMTEgMC0yMC05LTIwLTIwczktMjAgMjAtMjBsNTUuNSAwYzYuOSAwIDEyLjUtNS42IDEyLjUtMTIuNSAwLTYuMS00LjQtMTEuMy0xMC40LTEyLjNsLTQxLjctN2MtMjUuMy00LjItNDMuOS0yNi4xLTQzLjktNTEuOCAwLTI4LjggMjMuMi01Mi4yIDUyLTUyLjVsMC00YzAtMTEgOS0yMCAyMC0yMHoiXQogICAgfTsKICAgIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1sb2NhdGlvbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtbG9jYXRpb24iXSwgImY2ODkiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHpNMjg4IDE3NmMwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDQ4LjggNDYuNSAxMTEuNiA2OC42IDEzOC42IDYgNy4zIDE2LjggNy4zIDIyLjcgMCAyMi4xLTI3IDY4LjYtODkuOCA2OC42LTEzOC42em0tMTEyIDBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhU2VhcmNoTG9jYXRpb24gPSBmYU1hZ25pZnlpbmdHbGFzc0xvY2F0aW9uOwogICAgZmFGaWxlSW52b2ljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWludm9pY2UiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU3MCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNzcuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNNjQgMzg0bDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMkw5NiA0MTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek04OCA2NGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00OCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNFM3NC43IDY0IDg4IDY0em0wIDk2bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYVBlbnRhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbnRhZ29uIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU3OTAiLCAiTTMxNi40LTMuMWMtMTYuOC0xMi4yLTM5LjYtMTIuMi01Ni40IDBMMzUuMyAxNjAuMmMtMTYuOCAxMi4yLTIzLjkgMzMuOS0xNy40IDUzLjdsODUuOCAyNjQuMWM2LjQgMTkuOCAyNC45IDMzLjIgNDUuNyAzMy4ybDI3Ny43IDBjMjAuOCAwIDM5LjItMTMuNCA0NS43LTMzLjJsODUuOC0yNjQuMWM2LjQtMTkuOC0uNi00MS40LTE3LjQtNTMuN0wzMTYuNC0zLjF6Il0KICAgIH07CiAgICBmYVJlcHVibGljYW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicmVwdWJsaWNhbiIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzVlIiwgIk0wIDE5MkMwIDEwMy42IDcxLjYgMzIgMTYwIDMybDIyNCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgNjQtNTQ0IDAgMC02NHptMTUyLTMyYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6bTIzMiAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI4MCAxNjBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTI4IDI4OGw0MTYgMCAwIDExMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtNDhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwbDAtNDgtMzIgMCAwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0LTE5MiAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTY0IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYwIDEyOCAweiJdCiAgICB9OwogICAgZmFTaG9wID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3AiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsic3RvcmUtYWx0Il0sICJmNTRmIiwgIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1Ni44IDExMy43YzMuNiA3LjIgNS41IDE1LjEgNS41IDIzLjIgMCAyNy4zLTIxLjIgNDkuNy00OCA1MS42TDUxMiA0NDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOTItOTYgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6Il0KICAgIH07CiAgICBmYVN0b3JlQWx0ID0gZmFTaG9wOwogICAgZmFGaWxtID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbG0iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MDIsIDYyMzY4LCAiZmlsbS1hbHQiLCAiZmlsbS1zaW1wbGUiXSwgImYwMDgiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzMjBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek00OCAzNjhsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMzA0LTE2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6TTQ4IDI0MGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0zMDQtMTZjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMHpNNDggMTEybDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2TDY0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZ6TTM1MiA5NmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAweiJdCiAgICB9OwogICAgZmFGaWxtQWx0ID0gZmFGaWxtOwogICAgZmFGaWxtU2ltcGxlID0gZmFGaWxtOwogICAgZmFCdWlsZGluZ0NpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLWNpcmNsZS14bWFyayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQ0IiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE4MCAwYy0xMC41LTE0LjYtMTktMzAuNy0yNS4xLTQ4bC03NC45IDAgMC04MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzIgMCA0IC4yIDUuOSAuNSA2LTIzLjYgMTYuMy00NS40IDMwLjEtNjQuNWwtNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0YzI3LjUtMTkuOCA2MC4zLTMyLjQgOTYtMzUuNEw0MTYgNjRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHptMzIgMTEyYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTI3MiA5NmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek0xMjggMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTQzMiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0yMi42LTE0NGwzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZMNDU0LjYgNDAweiJdCiAgICB9OwogICAgZmFDb21tZW50czIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tbWVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg0OTAsIDYxNjcwXSwgImYwODYiLCAiTTM4NCAxNDRjMCA5Ny4yLTg2IDE3Ni0xOTIgMTc2LTI2LjcgMC01Mi4xLTUtNzUuMi0xNEwzNS4yIDM0OS4yYy05LjMgNC45LTIwLjcgMy4yLTI4LjItNC4ycy05LjItMTguOS00LjItMjguMmwzNS42LTY3LjJDMTQuMyAyMjAuMiAwIDE4My42IDAgMTQ0IDAgNDYuOCA4Ni0zMiAxOTItMzJTMzg0IDQ2LjggMzg0IDE0NHptMCAzNjhjLTk0LjEgMC0xNzIuNC02Mi4xLTE4OC44LTE0NCAxMjAtMS41IDIyNC4zLTg2LjkgMjM1LjgtMjAyLjcgODMuMyAxOS4yIDE0NSA4OC4zIDE0NSAxNzAuNyAwIDM5LjYtMTQuMyA3Ni4yLTM4LjQgMTA1LjZsMzUuNiA2Ny4yYzQuOSA5LjMgMy4yIDIwLjctNC4yIDI4LjJzLTE4LjkgOS4yLTI4LjIgNC4yTDQ1OS4yIDQ5OGMtMjMuMSA5LTQ4LjUgMTQtNzUuMiAxNHoiXQogICAgfTsKICAgIGZhVGFncyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWdzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwMmMiLCAiTTQwMS4yIDM5LjFMNTQ5LjQgMTg5LjRjMjcuNyAyOC4xIDI3LjcgNzMuMSAwIDEwMS4yTDM5MyA0NDguOWMtOS4zIDkuNC0yNC41IDkuNS0zMy45IC4ycy05LjUtMjQuNS0uMi0zMy45TDUxNS4zIDI1Ni44YzkuMi05LjMgOS4yLTI0LjQgMC0zMy43TDM2NyA3Mi45Yy05LjMtOS40LTkuMi0yNC42IC4yLTMzLjlzMjQuNi05LjIgMzMuOSAuMnpNMzIuMSAyMjkuNUwzMi4xIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDEzMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdsMTQ0IDE0NGMyNSAyNSAyNSA2NS41IDAgOTAuNUwyODUuNCA0MTguN2MtMjUgMjUtNjUuNSAyNS05MC41IDBsLTE0NC0xNDRjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjN6bTE0NC04NS41YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYUd1biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTE5YiIsICJNNTI4IDU2YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgOC00NDggMEMxNC4zIDY0IDAgNzguMyAwIDk2TDAgMjA4YzAgMTcuNyAxNC4zIDMyIDMyIDMybDEwIDBjMjAuOCAwIDM2LjEgMTkuNiAzMSAzOS44TDMzIDQ0MC4yYy0yLjQgOS42LS4yIDE5LjcgNS44IDI3LjVTNTQuMSA0ODAgNjQgNDgwbDk2IDBjMTQuNyAwIDI3LjUtMTAgMzEtMjQuMkwyMTcgMzUyIDMyMS40IDM1MmMyMy43IDAgNDQuOC0xNC45IDUyLjctMzcuMmwyNi43LTc0LjggMzEuMSAwYzguNSAwIDE2LjYtMy40IDIyLjYtOS40bDIyLjYtMjIuNiA2Ni43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC04MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTh6TTMyMS40IDMwNGwtOTIuNSAwIDE2LTY0IDEwNSAwLTIxIDU4LjdjLTEuMSAzLjItNC4yIDUuMy03LjUgNS4zek04MCAxMjhsMzg0IDBjOC44IDAgMTYgNy4yIDE2IDE2cy03LjIgMTYtMTYgMTZMODAgMTYwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGVjazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjE1MzMsICJjaGVjay1jaXJjbGUiXSwgImYwNTgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMSAwLTUxMiAyNTYgMjU2IDAgMSAxIDAgNTEyek0zNzQgMTQ1LjdjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zTDIyMS4xIDMxNS4yIDE2OSAyNjMuMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM1IDUgMTEuOCA3LjUgMTguOCA3czEzLjQtNC4xIDE3LjUtOS44TDM3OS4zIDE3OS4yYzcuOC0xMC43IDUuNC0yNS43LTUuMy0zMy41eiJdCiAgICB9OwogICAgZmFDaGVja0NpcmNsZTIgPSBmYUNpcmNsZUNoZWNrMjsKICAgIGZhSWRDYXJkQ2xpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZC1jYXJkLWNsaXAiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiaWQtY2FyZC1hbHQiXSwgImY0N2YiLCAiTTI1Ni0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjQtMTI4IDAgMC02NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNjQgMzJsMTEyIDAgMCAzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTMyIDExMiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMnpNMTc2IDQwMGMwIDguOCA3LjIgMTYgMTYgMTZsMTkyIDBjOC44IDAgMTYtNy4yIDE2LTE2IDAtNDQuMi0zNS44LTgwLTgwLTgwbC02NCAwYy00NC4yIDAtODAgMzUuOC04MCA4MHpNMjg4IDI4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnoiXQogICAgfTsKICAgIGZhSWRDYXJkQWx0ID0gZmFJZENhcmRDbGlwOwogICAgZmFNb29uMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb29uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzY5LCA5MjE0XSwgImYxODYiLCAiTTI1NiAwQzExNC42IDAgMCAxMTQuNiAwIDI1NlMxMTQuNiA1MTIgMjU2IDUxMmM2OC44IDAgMTMxLjMtMjcuMiAxNzcuMy03MS40IDcuMy03IDkuNC0xNy45IDUuMy0yNy4xcy0xMy43LTE0LjktMjMuOC0xNC4xYy00LjkgLjQtOS44IC42LTE0LjggLjYtMTAxLjYgMC0xODQtODIuNC0xODQtMTg0IDAtNzIuMSA0MS41LTEzNC42IDEwMi4xLTE2NC44IDkuMS00LjUgMTQuMy0xNC4zIDEzLjEtMjQuNFMzMjIuNiA4LjUgMzEyLjcgNi4zQzI5NC40IDIuMiAyNzUuNCAwIDI1NiAweiJdCiAgICB9OwogICAgZmFPaWxXZWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9pbC13ZWxsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzIiLCAiTTUyOC4zIDYxLjNjLTExLjQtNDIuNy01NS4zLTY4LTk4LTU2LjZMNDE0LjkgOC44QzM5Ny44IDEzLjQgMzg3LjcgMzEgMzkyLjMgNDhsMjQuNSA5MS40LTEwOC4yIDI4LjEtNi4zLTE4LjFDMjk3LjcgMTM2LjYgMjg1LjYgMTI4IDI3MiAxMjhzLTI1LjcgOC42LTMwLjIgMjEuNGwtMTMuNiAzOS0xMzIuMiAzNC4zIDAtMzguNmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDI2NC0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDUxMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMzcuMyAwLTYxLjQtMTc1LjQtNjIuMiAxNi4xIDIyLjEgNjMuMi02Ni42IDAgMTkuOS01Ni45LTc0LjYgMTkuMy00Ni43IDEzMy41LTQxLjMgMCAwLTE1OS4yIDMzNy40LTg3LjUgMjUuMiA5NGM0LjYgMTcuMSAyMi4xIDI3LjIgMzkuMiAyMi42bDE1LjUtNC4xYzQyLjctMTEuNCA2OC01NS4zIDU2LjYtOThMNTI4LjMgNjEuM3pNMjA1LjEgNDQ4bDE2LjgtNDggMTAwLjIgMCAxNi44IDQ4LTEzMy44IDB6Il0KICAgIH07CiAgICBmYVRhY2hvZ3JhcGhEaWdpdGFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhY2hvZ3JhcGgtZGlnaXRhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkaWdpdGFsLXRhY2hvZ3JhcGgiXSwgImY1NjYiLCAiTTAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDQ0OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxMjh6bTY0IDMybDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek04OCAzNTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTM2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggMzUyem0yNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwxNDQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTQ0IDB6TTQ5NiAxOTJhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek04OCAzMTJhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em0xMDQtMjRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptNTYgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFEaWdpdGFsVGFjaG9ncmFwaCA9IGZhVGFjaG9ncmFwaERpZ2l0YWw7CiAgICBmYVRhYmxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFibGV0LWFuZHJvaWQiXSwgImYzZmIiLCAiTTY0IDBDMjguNyAwIDAgMjguNyAwIDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDB6TTE4NCA0MDBsODAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhVGFibGV0QW5kcm9pZCA9IGZhVGFibGV0OwogICAgZmFSdWJsZVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVibGUtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgzODEsICJyb3VibGUiLCAicnViIiwgInJ1YmxlIl0sICJmMTU4IiwgIk0xMTIgMzJDOTQuMyAzMiA4MCA0Ni4zIDgwIDY0bDAgMjA4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDQ4LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAxNTIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMTUyIDAgMC00OCAxMTIgMGM3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NFMzMzUuNSAzMiAyNTYgMzJMMTEyIDMyek0yNTYgMjU2bC0xMTIgMCAwLTE2MCAxMTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MHMtMzUuOCA4MC04MCA4MHoiXQogICAgfTsKICAgIGZhUm91YmxlID0gZmFSdWJsZVNpZ247CiAgICBmYVJ1YiA9IGZhUnVibGVTaWduOwogICAgZmFSdWJsZSA9IGZhUnVibGVTaWduOwogICAgZmFDbG9zZWRDYXB0aW9uaW5nMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjbG9zZWQtY2FwdGlvbmluZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMjBhIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0xNTIgODBsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODBjMC00LjQgMy42LTggOC04em0xNjggOGMwLTQuNCAzLjYtOCA4LThsMzIgMGM0LjQgMCA4IDMuNiA4IDggMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTMwLjktMjUuMS01Ni01Ni01NmwtMzIgMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4MGMwIDMwLjkgMjUuMSA1NiA1NiA1NmwzMiAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgNC40LTMuNiA4LTggOGwtMzIgMGMtNC40IDAtOC0zLjYtOC04bDAtODB6Il0KICAgIH07CiAgICBmYVBlbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgzOTRdLCAiZjMwNCIsICJNMzUyLjkgMjEuMkwzMDggNjYuMSA0NDUuOSAyMDQgNDkwLjggMTU5LjFDNTA0LjQgMTQ1LjYgNTEyIDEyNy4yIDUxMiAxMDhzLTcuNi0zNy42LTIxLjItNTEuMUw0NTUuMSAyMS4yQzQ0MS42IDcuNiA0MjMuMiAwIDQwNCAwcy0zNy42IDcuNi01MS4xIDIxLjJ6TTI3NC4xIDEwMEw1OC45IDMxNS4xYy0xMC43IDEwLjctMTguNSAyNC4xLTIyLjYgMzguN0wuOSA0ODEuNmMtMi4zIDguMyAwIDE3LjMgNi4yIDIzLjRzMTUuMSA4LjUgMjMuNCA2LjJsMTI3LjgtMzUuNWMxNC42LTQuMSAyNy45LTExLjggMzguNy0yMi42TDQxMiAyMzcuOSAyNzQuMSAxMDB6Il0KICAgIH07CiAgICBmYVBsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsYW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzIiLCAiTTUyMCAyMDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZzLTI1LjEgNTYtNTYgNTZsLTEyNy4zIDAtMTU5LjIgMTczLjZjLTYuMSA2LjYtMTQuNiAxMC40LTIzLjYgMTAuNGwtNDMuNyAwYy0xMC45IDAtMTguNi0xMC43LTE1LjItMjEuMWw1NC4zLTE2Mi45LTk5LjcgMC01Mi44IDY2Yy0zIDMuOC03LjYgNi0xMi41IDZsLTE5LjggMGMtMTAuNCAwLTE4LTkuOC0xNS41LTE5LjlMMzIgMjU2IDUgMTQ3LjlDMi40IDEzNy44IDEwLjEgMTI4IDIwLjUgMTI4bDE5LjggMGM0LjkgMCA5LjUgMi4yIDEyLjUgNmw1Mi44IDY2IDk5LjcgMC01NC4zLTE2Mi45QzE0Ny42IDI2LjcgMTU1LjMgMTYgMTY2LjIgMTZsNDMuNyAwYzkgMCAxNy41IDMuOCAyMy42IDEwLjRMMzkyLjcgMjAwIDUyMCAyMDB6Il0KICAgIH07CiAgICBmYUltYWdlczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaW1hZ2VzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzMDIiLCAiTTk2IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjU2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0zMjAgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZ6TTI0IDEyOGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI5NmMwIDguOCA3LjIgMTYgMTYgMTZsMzYwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE1MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptMTY4IDMyYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMTk2LjUgMTEuNWMtNC40LTcuMS0xMi4xLTExLjUtMjAuNS0xMS41cy0xNi4xIDQuNC0yMC41IDExLjVsLTU2LjMgOTIuMS0yNC41LTMwLjZjLTQuNi01LjctMTEuNC05LTE4LjctOXMtMTQuMiAzLjMtMTguNyA5bC02NCA4MGMtNS44IDcuMi02LjkgMTcuMS0yLjkgMjUuNFMxNzQuOCAzNTIgMTg0IDM1MmwyNzIgMGM4LjcgMCAxNi43LTQuNyAyMC45LTEyLjNzNC4xLTE2LjgtLjUtMjQuM2wtODgtMTQ0eiJdCiAgICB9OwogICAgZmFNb2JpbGVTY3JlZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLXNjcmVlbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtb2JpbGUtYW5kcm9pZC1hbHQiXSwgImYzY2YiLCAiTTE2IDY0QzE2IDI4LjcgNDQuNyAwIDgwIDBMMzA0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMODAgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwxNiA2NHpNMTI4IDQ0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHpNMzA0IDY0bC0yMjQgMCAwIDMwNCAyMjQgMCAwLTMwNHoiXQogICAgfTsKICAgIGZhTW9iaWxlQW5kcm9pZEFsdCA9IGZhTW9iaWxlU2NyZWVuOwogICAgZmFHdWFyYW5pU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJndWFyYW5pLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTE5YSIsICJNMTkyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDEuNUM3My4zIDc3LjMgMCAxNTguMSAwIDI1NlM3My4zIDQzNC43IDE2OCA0NDYuNWwwIDQxLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQxLjVjOTQuNy0xMS44IDE2OC05Mi42IDE2OC0xOTAuNSAwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTM2IDAgMC05My44YzI1LjMgNC44IDQ3LjkgMTcgNjUuNiAzNC4zIDEyLjYgMTIuNCAzMi45IDEyLjIgNDUuMy0uNHMxMi4yLTMyLjktLjUtNDUuM0MyOTcuMiA5MC4yIDI1OC44IDcwLjggMjE2IDY1LjVMMjE2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xNjggMTMwLjJsMCAyNTEuNUMxMDguOCAzNzAuNSA2NCAzMTguNSA2NCAyNTZzNDQuOC0xMTQuNSAxMDQtMTI1Ljh6bTQ4IDI1MS41bDAtOTMuOCAxMDAgMGMtMTIuMyA0Ny42LTUxLjIgODQuNS0xMDAgOTMuOHoiXQogICAgfTsKICAgIGZhQmFnU2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFnLXNob3BwaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInNob3BwaW5nLWJhZyJdLCAiZjI5MCIsICJNMTYwIDgwYzAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjRsMCA0OC0xMjggMCAwLTQ4em0tNDggNDhsLTY0IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIwOGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMCAwLTQ4YzAtNjEuOS01MC4xLTExMi0xMTItMTEyUzExMiAxOC4xIDExMiA4MGwwIDQ4em0yNCA0OGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTE1MiAyNGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFTaG9wcGluZ0JhZyA9IGZhQmFnU2hvcHBpbmc7CiAgICBmYUNpcmNsZVJpZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTgzOCwgImFycm93LWFsdC1jaXJjbGUtcmlnaHQiXSwgImYzNWEiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6bTM4Ny4zIDExLjNsLTEwNCAxMDRjLTQuNiA0LjYtMTEuNSA1LjktMTcuNCAzLjVTMjU2IDM2Ni41IDI1NiAzNjBsMC01Ni05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDAgMC01NmMwLTYuNSAzLjktMTIuMyA5LjktMTQuOHMxMi45LTEuMSAxNy40IDMuNWwxMDQgMTA0YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0MiA9IGZhQ2lyY2xlUmlnaHQyOwogICAgZmFQaG9uZVZvbHVtZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZS12b2x1bWUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidm9sdW1lLWNvbnRyb2wtcGhvbmUiXSwgImYyYTAiLCAiTTM0NC0zMmMxMjguMSAwIDIzMiAxMDMuOSAyMzIgMjMyIDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMTAxLjYtODIuNC0xODQtMTg0LTE4NC0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em04IDE5MmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTMyMCA4OGMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OC0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMTQ0LjEgMS40YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzMyLjUgNzEuNiA4OSAxMzAgMTU5LjMgMTY0LjlMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNUM1MjMuNCA0NzAuMSA0NjAuOSA1MjUuMyAzODQuNiA1MDkuMiAyMDkuNiA0NzIuMSA3MS45IDMzNC40IDM0LjggMTU5LjQgMTguNyA4My4xIDczLjkgMjAuNiAxMzguNSAyLjlsNS41LTEuNXoiXQogICAgfTsKICAgIGZhVm9sdW1lQ29udHJvbFBob25lID0gZmFQaG9uZVZvbHVtZTsKICAgIGZhQ3ViZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3ViZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjFiMyIsICJNMjg0LTEuM2MtMTcuMy0xMC0zOC43LTEwLTU2IDBMMTQzLjggNDcuM2MtMTcuMyAxMC0yOCAyOC41LTI4IDQ4LjVsMCAxMDEuOS04OC4zIDUxYy0xNy4zIDEwLTI4IDI4LjUtMjggNDguNWwwIDk3LjNjMCAyMCAxMC43IDM4LjUgMjggNDguNWw4NC4zIDQ4LjZjMTcuMyAxMCAzOC43IDEwIDU2IDBsODguMy01MSA4OC4zIDUxYzE3LjMgMTAgMzguNyAxMCA1NiAwTDQ4NC41IDQ0M2MxNy4zLTEwIDI4LTI4LjUgMjgtNDguNWwwLTk3LjNjMC0yMC0xMC43LTM4LjUtMjgtNDguNWwtODguMy01MSAwLTEwMS45YzAtMjAtMTAuNy0zOC41LTI4LTQ4LjVMMjg0LTEuM3pNMjMyIDI5Mi42bDAgMTA2LjUtODguMyA1MWMtMS4yIC43LTIuNiAxLjEtNCAxLjFsMC0xMDUuMyA5Mi4zLTUzLjN6bTIzMS40IC42Yy43IDEuMiAxLjEgMi42IDEuMSA0bDAgOTcuM2MwIDIuOS0xLjUgNS41LTQgNi45bC04NC4zIDQ4LjZjLTEuMiAuNy0yLjYgMS4xLTQgMS4xbDAtMTA1LjMgOTEuMi01Mi42ek0zNDguMyA5NS44bDAgMTAxLjktOTIuMyA1My4zIDAtMTA2LjUgOTEuMi01Mi42Yy43IDEuMiAxLjEgMi42IDEuMSA0eiJdCiAgICB9OwogICAgZmFQaG9uZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwaG9uZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyMiwgMTI4Mzc5XSwgImYwOTUiLCAiTTE2MC4yIDI1QzE1Mi4zIDYuMSAxMzEuNy0zLjkgMTEyLjEgMS40bC01LjUgMS41Yy02NC42IDE3LjYtMTE5LjggODAuMi0xMDMuNyAxNTYuNCAzNy4xIDE3NSAxNzQuOCAzMTIuNyAzNDkuOCAzNDkuOCA3Ni4zIDE2LjIgMTM4LjgtMzkuMSAxNTYuNC0xMDMuN2wxLjUtNS41YzUuNC0xOS43LTQuNy00MC4zLTIzLjUtNDguMWwtOTcuMy00MC41Yy0xNi41LTYuOS0zNS42LTIuMS00NyAxMS44bC0zOC42IDQ3LjJDMjMzLjkgMzM1LjQgMTc3LjMgMjc3IDE0NC44IDIwNS4zTDE4OSAxNjkuM2MxMy45LTExLjMgMTguNi0zMC40IDExLjgtNDdMMTYwLjIgMjV6Il0KICAgIH07CiAgICBmYVRvcmlpR2F0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b3JpaS1nYXRlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTk2MV0sICJmNmExIiwgIk0wIDk2TDAgMjguNUMwIDIxLjYgNS42IDE2IDEyLjUgMTYgMTQuOCAxNiAxNyAxNi42IDE5IDE3LjhMNTggNDEuMkM4Mi45IDU2LjEgMTExLjMgNjQgMTQwLjMgNjRsMTY3LjQgMGMyOSAwIDU3LjUtNy45IDgyLjMtMjIuOGwzOS0yMy40YzEuOS0xLjIgNC4yLTEuOCA2LjQtMS44IDYuOSAwIDEyLjUgNS42IDEyLjUgMTIuNUw0NDggOTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsMCA2NCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTE5MiAwIDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTkyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTY0QzI4LjcgMTYwIDAgMTMxLjMgMCA5NnpNMTI4IDIyNGw2NCAwIDAtNjQtNjQgMCAwIDY0em0xMjggMGw2NCAwIDAtNjQtNjQgMCAwIDY0eiJdCiAgICB9OwogICAgZmFCYWNvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWNvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyOTM2M10sICJmN2U1IiwgIk01NTcgOTYuN2MxNC40IDE0LjQgMTIuNCAzOC40LTQuMyA1MC4ybC02NC42IDQ1LjdjLTQzLjcgMzAuOS03OS4yIDcxLjktMTAzLjQgMTE5LjZsLTI1LjMgNDkuOGMtMjUuMSA0OS4zLTYyLjEgOTEuNS0xMDcuOCAxMjIuNmwtNzQuMSA1MC42Yy0xMy4xIDguOS0zMC43IDcuMy00MS44LTMuOWwtNDQuOS00NC45IDg2LjUtNjYuNWM0Mi4zLTMyLjUgNzYuNy03NC4zIDEwMC42LTEyMmwyNC41LTQ5LjFjMjQuNS00OSA2MS44LTkwLjYgMTA3LjktMTIwLjJsMTA4LjctNjkuOSAzOCAzOHpNNDg0LjIgMjMuOUwzODQuMyA4OC4yYy01My40IDM0LjMtOTYuNSA4Mi40LTEyNC45IDEzOS4xbC0yNC41IDQ5LjFjLTIwLjYgNDEuMy01MC4zIDc3LjMtODYuOSAxMDUuNGwtOTEuNCA3MC4zLTM2LjktMzYuOWMtMTQuNC0xNC40LTEyLjQtMzguNCA0LjMtNTAuMmw2NC42LTQ1LjdjNDMuNy0zMC45IDc5LjItNzEuOSAxMDMuNC0xMTkuNmwyNS4zLTQ5LjhDMjQyLjMgMTAwLjggMjc5LjMgNTguNiAzMjUgMjcuNGw3NC4xLTUwLjZjMTMuMS04LjkgMzAuNi03LjMgNDEuOCAzLjlsNDMuMyA0My4zeiJdCiAgICB9OwogICAgZmFQZXJzb25GYWxsaW5nQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWZhbGxpbmctYnVyc3QiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU0NyIsICJNMjU2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA1LjRjMCA1NS4yLTIzLjcgMTA3LTYzLjkgMTQzLjFsNjIuOSA3NS41IDg5IDBjMTUuMSAwIDI5LjMgNy4xIDM4LjQgMTkuMmw0My4yIDU3LjZjMTAuNiAxNC4xIDcuNyAzNC4yLTYuNCA0NC44cy0zNC4yIDcuNy00NC44LTYuNEwzNjggMzIwIDI2My4yIDMyMCAzNzYuOCA0NTkuOGMxMS4xIDEzLjcgOS4xIDMzLjktNC43IDQ1cy0zMy45IDkuMS00NS00LjdMMTM3LjQgMjY2LjZjLTYuMSAxNS05LjQgMzEuMy05LjQgNDhsMCA2OS40YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjkuNGMwLTY3LjQgMzUuNC0xMjkuOSA5My4yLTE2NC42bDQuNi0yLjhDMjAwLjQgMTI0IDIyNCA4Mi40IDIyNCAzNy40bDAtNS40YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xNiA4OEE1NiA1NiAwIDEgMSAxMjggODggNTYgNTYgMCAxIDEgMTYgODh6bTM3Ni03LjljMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDh6bTEwNCAxNTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMHptLTU0LjUtOTcuNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWwtMzMuOSAzMy45Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHoiXQogICAgfTsKICAgIGZhUXVvdGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJxdW90ZS1yaWdodCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzgyMjEsICJxdW90ZS1yaWdodC1hbHQiXSwgImYxMGUiLCAiTTQ0OCAyOTZjMCA2Ni4zLTUzLjcgMTIwLTEyMCAxMjBsLTggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4IDBjMzAuOSAwIDU2LTI1LjEgNTYtNTZsMC04LTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtNjRjMC0zNS4zIDI4LjctNjQgNjQtNjRsNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEzNnptLTI1NiAwYzAgNjYuMy01My43IDEyMC0xMjAgMTIwbC04IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOCAwYzMwLjkgMCA1Ni0yNS4xIDU2LTU2bDAtOC02NCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMzZ6Il0KICAgIH07CiAgICBmYVF1b3RlUmlnaHRBbHQgPSBmYVF1b3RlUmlnaHQ7CiAgICBmYUhvdXNlTWVkaWNhbEZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbC1mbGFnIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTQiLCAiTTQ4MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDI4OGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTQ0OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMjY3LjUgNTkuMUw0MDAgMTg2LjkgNDAwIDUwMy40Yy05LjQgNS40LTIwLjMgOC42LTMyIDguNmwtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMEMxMi42IDMwNCAwIDI5MS40IDAgMjc1LjkgMCAyNjguMyAzLjEgMjYxIDguNiAyNTUuN0wyMTIuNSA1OS4xQzIxOS45IDUyIDIyOS43IDQ4IDI0MCA0OHMyMC4xIDQgMjcuNSAxMS4xek0yMDQuOCAyNTYuOGwwIDQ0LTQ0IDBjLTkuNyAwLTE3LjYgNy45LTE3LjYgMTcuNmwwIDM1LjJjMCA5LjcgNy45IDE3LjYgMTcuNiAxNy42bDQ0IDAgMCA0NGMwIDkuNyA3LjkgMTcuNiAxNy42IDE3LjZsMzUuMiAwYzkuNyAwIDE3LjYtNy45IDE3LjYtMTcuNmwwLTQ0IDQ0IDBjOS43IDAgMTcuNi03LjkgMTcuNi0xNy42bDAtMzUuMmMwLTkuNy03LjktMTcuNi0xNy42LTE3LjZsLTQ0IDAgMC00NGMwLTkuNy03LjktMTcuNi0xNy42LTE3LjZsLTM1LjIgMGMtOS43IDAtMTcuNiA3LjktMTcuNiAxNy42eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY1YjEiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyTDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC02NCA1MC43IDAgMTI4IDEyOC0xMDUuNCAxMDUuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwyODggMzk3LjMgMzkzLjQgNTAyLjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0wzMzMuMyAzNTIgNDM4LjYgMjQ2LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjg4IDMwNi43IDIwMi4yIDIyMC45QzI1MS40IDIwOS4xIDI4OCAxNjQuOCAyODggMTEyIDI4OCA1MC4xIDIzNy45IDAgMTc2IDBMMzIgMHpNMTc2IDE2MGwtMTEyIDAgMC05NiAxMTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OHoiXQogICAgfTsKICAgIGZhRGljZVRocmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtdGhyZWUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5ODU4XSwgImY1MjciLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTY0IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMTI4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyOCA2NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZDYiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguN2wwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgNjR6TTE3NiAzODRsMCA4MCA4MCAwIDAtNjQuMWMwLTEzLjcgMS45LTI3IDUuNS0zOS42LTUuNy01LjItMTMuMi04LjMtMjEuNS04LjNsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0zMDcgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTQ0IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNDQgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTM1MiA4MC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNMzUyIDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhSWRDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpZC1jYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjIxNDcsICJkcml2ZXJzLWxpY2Vuc2UiXSwgImYyYzIiLCAiTTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRMMCA5NnptMCA0OGw1NzYgMCAwIDI3MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTQ0ek0yNDcuMyA0MTZjMjAuMiAwIDM1LjMtMTkuNCAyMi40LTM1LTE0LjctMTcuNy0zNi45LTI5LTYxLjctMjlsLTY0IDBjLTI0LjggMC00NyAxMS4zLTYxLjcgMjktMTIuOSAxNS42IDIuMiAzNSAyMi40IDM1bDE0Mi41IDB6TTE3NiAzMTJhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTM2MCAyMDhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTEyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem0wIDk2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDExMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMTIgMHoiXQogICAgfTsKICAgIGZhRHJpdmVyc0xpY2Vuc2UyID0gZmFJZENhcmQyOwogICAgZmFDaXJjbGVQbGF5MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtcGxheSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYxNDY5LCAicGxheS1jaXJjbGUiXSwgImYxNDQiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6TTE4OC4zIDE0Ny4xYy03LjYgNC4yLTEyLjMgMTIuMy0xMi4zIDIwLjlsMCAxNzZjMCA4LjcgNC43IDE2LjcgMTIuMyAyMC45czE2LjggNC4xIDI0LjMtLjVsMTQ0LTg4YzcuMS00LjQgMTEuNS0xMi4xIDExLjUtMjAuNXMtNC40LTE2LjEtMTEuNS0yMC41bC0xNDQtODhjLTcuNC00LjUtMTYuNy00LjctMjQuMy0uNXoiXQogICAgfTsKICAgIGZhUGxheUNpcmNsZTIgPSBmYUNpcmNsZVBsYXkyOwogICAgZmFGYWNlTGF1Z2hCZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWxhdWdoLWJlYW0iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTMsICJsYXVnaC1iZWFtIl0sICJmNTlhIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTAxLjYgMzE0Yy0zLjctMTMuNyA3LjUtMjYgMjEuNy0yNmwyNjUuNCAwYzE0LjIgMCAyNS40IDEyLjMgMjEuNyAyNi0xOC41IDY4LTgwLjYgMTE4LTE1NC40IDExOFMxMjAgMzgyIDEwMS42IDMxNHpNMTc2IDE2NGMtMTUuNSAwLTI4IDEyLjUtMjggMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHptMTMyIDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjhzLTI4IDEyLjUtMjggMjh6Il0KICAgIH07CiAgICBmYUxhdWdoQmVhbTIgPSBmYUZhY2VMYXVnaEJlYW0yOwogICAgZmFMZWFmID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlYWYiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjA2YyIsICJNNDcxLjMgNi43QzQ3Ny43IC42IDQ4Ny0xLjYgNDk1LjYgMS4yIDUwNS40IDQuNSA1MTIgMTMuNyA1MTIgMjRsMCAxODYuOWMwIDEzMS4yLTEwOC4xIDIzNy4xLTIzOC44IDIzNy4xLTc3IDAtMTQzLjQtNDkuNS0xNjcuNS0xMTguNy0zNS40IDMwLjgtNTcuNyA3Ni4xLTU3LjcgMTI2LjcgMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCA0NjkuMyAwIDQ1NkMwIDM4MS4xIDM4LjIgMzE1LjEgOTYuMSAyNzYuMyAxMzEuNCAyNTIuNyAxNzMuNSAyNDAgMjE2IDI0MGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04MCAwYy0zOS43IDAtNzcuMyA4LjgtMTExIDI0LjUgMjMuMy03MCA4OS4yLTEyMC41IDE2Ny0xMjAuNSA2Ni40IDAgMTE1LjgtMjIuMSAxNDguNy00NCAxOS4yLTEyLjggMzUuNS0yOC4xIDUwLjctNDUuM3oiXQogICAgfTsKICAgIGZhSG91c2VDaGltbmV5VXNlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1jaGltbmV5LXVzZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2NSIsICJNMjM0LjIgOC42YzEyLjMtMTEuNCAzMS4zLTExLjQgNDMuNSAwTDM2OCA5Mi4zIDM2OCA4MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTAxLjUgMzcuOCAzNS4xYzkuNiA5IDEyLjggMjIuOSA4IDM1LjFTNDkzLjIgMjcyIDQ4MCAyNzJsLTE2IDAgMCAxNzZjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTI4OCAwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3Ni0xNiAwYy0xMy4yIDAtMjUtOC4xLTI5LjgtMjAuM3MtMS42LTI2LjIgOC0zNS4xbDIyNC0yMDh6TTMxMiAyNTZhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek0xNDQgNDMyYzAgOC44IDcuMiAxNiAxNiAxNmwxOTIgMGM4LjggMCAxNi03LjIgMTYtMTYgMC00NC4yLTM1LjgtODAtODAtODBsLTY0IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgweiJdCiAgICB9OwogICAgZmFSb3RhdGVSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb3RhdGUtcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsicmVkby1hbHQiLCAicm90YXRlLWZvcndhcmQiXSwgImYyZjkiLCAiTTQ4OCAxOTJsLTE0NCAwYy05LjcgMC0xOC41LTUuOC0yMi4yLTE0LjhzLTEuNy0xOS4zIDUuMi0yNi4ybDQ2LjctNDYuN2MtNzUuMy01OC42LTE4NC4zLTUzLjMtMjUzLjUgMTUuOS03NSA3NS03NSAxOTYuNSAwIDI3MS41czE5Ni41IDc1IDI3MS41IDBjOC4yLTguMiAxNS41LTE2LjkgMjEuOS0yNi4xIDEwLjEtMTQuNSAzMC4xLTE4IDQ0LjYtNy45czE4IDMwLjEgNy45IDQ0LjZjLTguNSAxMi4yLTE4LjIgMjMuOC0yOS4xIDM0LjctMTAwIDEwMC0yNjIuMSAxMDAtMzYyIDBTLTI1IDE3NSA3NSA3NWM5NC4zLTk0LjMgMjQzLjctOTkuNiAzNDQuMy0xNi4yTDQ3MSA3YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJTNTEyIDE0LjMgNTEyIDI0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0eiJdCiAgICB9OwogICAgZmFSZWRvQWx0ID0gZmFSb3RhdGVSaWdodDsKICAgIGZhUm90YXRlRm9yd2FyZCA9IGZhUm90YXRlUmlnaHQ7CiAgICBmYVRvb3RoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvb3RoIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5NDYzXSwgImY1YzkiLCAiTTE0NSA1LjdMMjI0IDMyIDMwMyA1LjdDMzE0LjMgMS45IDMyNiAwIDMzNy45IDAgMzk4LjcgMCA0NDggNDkuMyA0NDggMTEwLjFsMCA2OC41YzAgMjkuNC05LjUgNTguMS0yNy4yIDgxLjZsLTEuMSAxLjVjLTEyLjkgMTcuMi0yMS4zIDM3LjQtMjQuMyA1OC43TDM3My43IDQ3MS45Yy0zLjMgMjMtMjMgNDAuMS00Ni4yIDQwLjEtMjIuOCAwLTQyLjMtMTYuNS00Ni0zOUwyNjEuMyAzNTEuNmMtMy0xOC4yLTE4LjgtMzEuNi0zNy4zLTMxLjZzLTM0LjIgMTMuNC0zNy4zIDMxLjZMMTY2LjUgNDczYy0zLjggMjIuNS0yMy4yIDM5LTQ2IDM5LTIzLjIgMC00Mi45LTE3LjEtNDYuMi00MC4xTDUyLjYgMzIwLjVjLTMtMjEuMy0xMS40LTQxLjUtMjQuMy01OC43bC0xLjEtMS41QzkuNSAyMzYuNyAwIDIwOC4xIDAgMTc4LjdsMC02OC41QzAgNDkuMyA0OS4zIDAgMTEwLjEgMCAxMjIgMCAxMzMuNyAxLjkgMTQ1IDUuN3oiXQogICAgfTsKICAgIGZhSG91c2VDaGltbmV5V2luZG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWNoaW1uZXktd2luZG93IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUwMGQiLCAiTTIzNC4yIDguNmMxMi4zLTExLjQgMzEuMy0xMS40IDQzLjUgMEwzNjggOTIuMyAzNjggODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDEwMS41IDM3LjggMzUuMWM5LjYgOSAxMi44IDIyLjkgOCAzNS4xUzQ5My4yIDI3MiA0ODAgMjcybC0xNiAwIDAgMTc2YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yODggMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzYtMTYgMGMtMTMuMiAwLTI1LTguMS0yOS44LTIwLjNzLTEuNi0yNi4yIDgtMzUuMWwyMjQtMjA4ek0yMTYgMjI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDgwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtODAgMHoiXQogICAgfTsKICAgIGZhTW90b3JjeWNsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb3RvcmN5Y2xlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI3OTQ5XSwgImYyMWMiLCAiTTI4MCAxNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1Ni42IDAgMjIuNSA0OC43LTk1LjEgNzEuM2MtMzMuNC0yNS4xLTc1LTQwLTEyMC00MGwtNTYgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGw1NiAwYzc4LjUgMCAxNDMuMiA1OS42IDE1MS4yIDEzNmwtMjUuNCAwYy0xMS4yLTU5LjItNjMuMy0xMDQtMTI1LjgtMTA0LTcwLjcgMC0xMjggNTcuMy0xMjggMTI4UzczLjMgNDgwIDE0NCA0ODBjNjIuNSAwIDExNC41LTQ0LjggMTI1LjgtMTA0bDUwLjIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTIyLjVjMC00NS4xIDI1LjctODUuNCA2NS41LTEwNy43bDEyLjEgMjYuMWMtMzIuNCAyMy4yLTUzLjUgNjEuMi01My41IDEwNC4xIDAgNzAuNyA1Ny4zIDEyOCAxMjggMTI4czEyOC01Ny4zIDEyOC0xMjgtNTcuMy0xMjgtMTI4LTEyOGMtMTAuNyAwLTIxIDEuMy0zMC45IDMuOEw0MzMuOCAxNjAgNDg4IDE2MGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC01My4zIDBjLTYuOSAwLTEzLjcgMi4yLTE5LjIgNi40bC0xNy4xIDEyLjgtMjQuNi01My4zQzM2OS45IDIxLjQgMzYxLjQgMTYgMzUyIDE2bC03MiAwek00NDUuOCAzMDAuNGwyOC40IDYxLjZjNS42IDEyIDE5LjggMTcuMyAzMS44IDExLjdzMTcuMy0xOS44IDExLjctMzEuOGwtMjguNS02MS42YzIuMi0uMiA0LjQtLjMgNi43LS4zIDM5LjggMCA3MiAzMi4yIDcyIDcycy0zMi4yIDcyLTcyIDcyLTcyLTMyLjItNzItNzJjMC0yMC4yIDguMy0zOC41IDIxLjgtNTEuNnpNMTQ0IDQyNGMtMzkuOCAwLTcyLTMyLjItNzItNzJzMzIuMi03MiA3Mi03MmMzMS4zIDAgNTggMjAgNjcuOSA0OEwxNDQgMzI4Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDY3LjkgMGMtOS45IDI4LTM2LjYgNDgtNjcuOSA0OHoiXQogICAgfTsKICAgIGZhQmFja3dhcmRGYXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhY2t3YXJkLWZhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MTk4LCAiZmFzdC1iYWNrd2FyZCJdLCAiZjA0OSIsICJNNDkyLjIgNDc3LjZjLTEyIDUtMjUuNyAyLjItMzQuOS02LjlMMjg4IDMwMS4zIDI4OCA0NDhjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlMNjQgMzAxLjMgNjQgNDQ4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMlM2NCA0Ni4zIDY0IDY0TDY0IDIxMC43IDIzMy40IDQxLjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTMjg4IDUxLjEgMjg4IDY0bDAgMTQ2LjcgMTY5LjQtMTY5LjRjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02LjlTNTEyIDUxLjEgNTEyIDY0bDAgMzg0YzAgMTIuOS03LjggMjQuNi0xOS44IDI5LjZ6Il0KICAgIH07CiAgICBmYUZhc3RCYWNrd2FyZCA9IGZhQmFja3dhcmRGYXN0OwogICAgZmFBZGRyZXNzQm9vazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYWRkcmVzcy1ib29rIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbNjIxMzgsICJjb250YWN0LWJvb2siXSwgImYyYjkiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zODRjMC0zNS4zLTI4LjctNjQtNjQtNjRMOTYgMHpNMjA4IDI4OGw2NCAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwIDAgOC44LTcuMiAxNi0xNiAxNmwtMTkyIDBjLTguOCAwLTE2LTcuMi0xNi0xNiAwLTQ0LjIgMzUuOC04MCA4MC04MHptLTI0LTk2YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHpNNTEyIDgwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0em0wIDEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDY0YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC02NHpNNDk2IDMyMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNjRjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTY0YzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQ29udGFjdEJvb2syID0gZmFBZGRyZXNzQm9vazI7CiAgICBmYVNhaWxib2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhaWxib2F0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0NDUiLCAiTTI0MCAzNS45bDAgMzQ4LjEtMjI0IDBjLTguOCAwLTE2IDcuMi0xNiAxNiAwIDYxLjkgNTAuMSAxMTIgMTEyIDExMmwyODggMGM2MS45IDAgMTEyLTUwLjEgMTEyLTExMiAwLTguOC03LjItMTYtMTYtMTZsLTIwOCAwIDAtNDggMTYxLjcgMGMxMi45IDAgMjAuNS0xNC40IDEzLjItMjVMMjY5LjIgMjYuOWMtOC45LTEzLTI5LjItNi43LTI5LjIgOXpNMTkyIDMyMGwwLTE4NC4yYzAtMTYuMS0yMS0yMi4xLTI5LjYtOC41TDQ3LjMgMzExLjVjLTYuNyAxMC43IDEgMjQuNSAxMy42IDI0LjVMMTc2IDMzNmM4LjggMCAxNi03LjIgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJvb2tCb29rbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLWJvb2ttYXJrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUwYmIiLCAiTTk2IDUxMmwzMjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwwLTY2LjdjMTguNi02LjYgMzItMjQuNCAzMi00NS4zbDAtMjg4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC00OCAwIDAgMTY5LjRjMCAxMi41LTEwLjEgMjIuNi0yMi42IDIyLjYtNiAwLTExLjgtMi40LTE2LTYuNkwyNzIgMTQ0IDIzMC42IDE4NS40Yy00LjIgNC4yLTEwIDYuNi0xNiA2LjYtMTIuNSAwLTIyLjYtMTAuMS0yMi42LTIyLjZMMTkyIDAgOTYgMEM0MyAwIDAgNDMgMCA5NkwwIDQxNmMwIDUzIDQzIDk2IDk2IDk2ek02NCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjU2IDAgMCA2NC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFnbmlmeWluZy1nbGFzcy1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTIxIiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTMwNSAyMjVjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlsLTcyLTcyYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMHMtOS40IDI0LjYgMCAzMy45bDMxIDMxLTEwMi4xIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTAyLjEgMC0zMSAzMWMtOS40IDkuNC05LjQgMjQuNiAwIDMzLjlzMjQuNiA5LjQgMzMuOSAwbDcyLTcyeiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lTGluZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWljcm9waG9uZS1saW5lcyIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyNzg5NywgIm1pY3JvcGhvbmUtYWx0Il0sICJmM2M5IiwgIk05NiA5NmMwLTUzIDQzLTk2IDk2LTk2IDUwLjMgMCA5MS42IDM4LjcgOTUuNyA4OEwyMzIgODhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTYgMCAwIDQ4LTU2IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNTUuNyAwYy00LjEgNDkuMy00NS4zIDg4LTk1LjcgODgtNTMgMC05Ni00My05Ni05Nkw5NiA5NnpNMjQgMTYwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNDBjMCA3OS41IDY0LjUgMTQ0IDE0NCAxNDRzMTQ0LTY0LjUgMTQ0LTE0NGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MGMwIDk3LjktNzMuMyAxNzguNy0xNjggMTkwLjVsMCA0OS41IDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDQ4IDAgMC00OS41QzczLjMgNDAyLjcgMCAzMjEuOSAwIDIyNGwwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFNaWNyb3Bob25lQWx0ID0gZmFNaWNyb3Bob25lTGluZXM7CiAgICBmYVJlcGx5QWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlcGx5LWFsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJtYWlsLXJlcGx5LWFsbCJdLCAiZjEyMiIsICJNMzMyLjIgMTguNGMxMiA1IDE5LjggMTYuNiAxOS44IDI5LjZsMCA4MCA0OCAwYzk3LjIgMCAxNzYgNzguOCAxNzYgMTc2IDAgMTEzLjMtODEuNSAxNjMuOS0xMDAuMiAxNzQuMS0yLjUgMS40LTUuMyAxLjktOC4xIDEuOS0xMC45IDAtMTkuNy04LjktMTkuNy0xOS43IDAtNy41IDQuMy0xNC40IDkuOC0xOS41IDkuNC04LjggMjIuMi0yNi40IDIyLjItNTYuNyAwLTUzLTQzLTk2LTk2LTk2bC0zMiAwIDAgODBjMCAxMi45LTcuOCAyNC42LTE5LjggMjkuNnMtMjUuNyAyLjItMzQuOS02LjlsLTE2MC0xNjBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zbDE2MC0xNjBjOS4yLTkuMiAyMi45LTExLjkgMzQuOS02Ljl6TTIwNS42IDIzLjFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlMNTQuNiAyMDggMjA1LjYgMzU4LjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwxMCAyMzEuMmMtNi40LTYtMTAtMTQuNC0xMC0yMy4yczMuNi0xNy4yIDEwLTIzLjJMMTcxLjYgMjMuMWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHoiXQogICAgfTsKICAgIGZhTWFpbFJlcGx5QWxsID0gZmFSZXBseUFsbDsKICAgIGZhVW5pdmVyc2FsQWNjZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVuaXZlcnNhbC1hY2Nlc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjI5YSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHptMTYxLjUtODYuMWMtMTIuMi01LjItMjYuMyAuNC0zMS41IDEyLjZzLjQgMjYuMyAxMi42IDMxLjVsMTEuOSA1LjFjMTcuMyA3LjQgMzUuMiAxMi45IDUzLjYgMTYuM2wwIDUwLjFjMCA0LjMtLjcgOC42LTIuMSAxMi42bC0yOC43IDg2LjFjLTQuMiAxMi42IDIuNiAyNi4yIDE1LjIgMzAuNHMyNi4yLTIuNiAzMC40LTE1LjJsMjQuNC03My4yYzEuMy0zLjggNC44LTYuNCA4LjgtNi40czcuNiAyLjYgOC44IDYuNGwyNC40IDczLjJjNC4yIDEyLjYgMTcuOCAxOS40IDMwLjQgMTUuMlMzMzkgMzk3IDMzNC44IDM4NC40bC0yOC43LTg2LjFjLTEuNC00LjEtMi4xLTguMy0yLjEtMTIuNmwwLTUwLjFjMTguNC0zLjUgMzYuMy04LjkgNTMuNi0xNi4zbDExLjktNS4xYzEyLjItNS4yIDE3LjgtMTkuMyAxMi42LTMxLjVzLTE5LjMtMTcuOC0zMS41LTEyLjZMMzM4LjcgMTc1Yy0yNi4xIDExLjItNTQuMiAxNy04Mi43IDE3cy01Ni41LTUuOC04Mi43LTE3bC0xMS45LTUuMXpNMjU2IDE2MGE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVRvaWxldFBhcGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRvaWxldC1wYXBlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUzMSwgNjMyNjMsICJ0b2lsZXQtcGFwZXItYWx0IiwgInRvaWxldC1wYXBlci1ibGFuayJdLCAiZjcxZSIsICJNMzI3LjEgMzJjLTguOCAxMS4xLTE2IDIzLjEtMjEuOSAzNC44LTIxLjQgNDIuNy0zMy4yIDk4LjQtMzMuMiAxNTcuMmwwIDI2NGMwIDMwLjktMjUuMSA1Ni01NiA1Nkw1NiA1NDRjLTMwLjkgMC01Ni0yNS4xLTU2LTU2TDAgMjI0QzAgMTE4IDQzIDMyIDk2IDMybDIzMS4xIDB6TTQxNiA0MTZjLTUzIDAtOTYtODYtOTYtMTkyczQzLTE5MiA5Ni0xOTIgOTYgODYgOTYgMTkyLTQzIDE5Mi05NiAxOTJ6bTAtMTI4YzE3LjcgMCAzMi0yOC43IDMyLTY0cy0xNC4zLTY0LTMyLTY0LTMyIDI4LjctMzIgNjQgMTQuMyA2NCAzMiA2NHoiXQogICAgfTsKICAgIGZhVG9pbGV0UGFwZXJBbHQgPSBmYVRvaWxldFBhcGVyOwogICAgZmFUb2lsZXRQYXBlckJsYW5rID0gZmFUb2lsZXRQYXBlcjsKICAgIGZhVnJDYXJkYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidnItY2FyZGJvYXJkIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY3MjkiLCAiTTUxMiA5Nkw2NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTE3LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2wzMy45LTMzLjljNy4yLTcuMiAxNy4xLTExLjMgMjcuMy0xMS4zczIwLjEgNC4xIDI3LjMgMTEuM2wzMy45IDMzLjljMTIgMTIgMjguMyAxOC43IDQ1LjMgMTguN0w1MTIgNDE2YzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0ek04MCAyNDBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAwem0zNTItNjRhNjQgNjQgMCAxIDEgMCAxMjggNjQgNjQgMCAxIDEgMC0xMjh6Il0KICAgIH07CiAgICBmYVBpenphU2xpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGl6emEtc2xpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjgxOCIsICJNMTY5LjcgLjljLTIyLjgtMS42LTQxLjkgMTQtNDcuNSAzNC43TDExMi41IDcyQzI5My4zIDcyLjMgNDM5LjcgMjE4LjcgNDQwIDM5OS41bDM2LjQtOS43YzIwLjgtNS41IDM2LjMtMjQuNyAzNC43LTQ3LjUtMTIuNi0xODIuOC0xNTguNi0zMjguOC0zNDEuNC0zNDEuNHptMjIyIDQxMS41Yy4yLTQuMSAuMy04LjIgLjMtMTIuNCAwLTE1NC42LTEyNS40LTI4MC0yODAtMjgwLTQuMSAwLTguMyAuMS0xMi40IC4zTC41IDQ5MS45Yy0xLjUgNS41IC4xIDExLjQgNC4xIDE1LjRzOS45IDUuNiAxNS40IDQuMWwzNzEuNi05OS4xek0xNzYgMjA4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptNjQgMTI4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTk2IDM4NGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFTcHJheUNhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcHJheS1jYW4iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjViZCIsICJNMTkyIDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDgwLTEyOCAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTY0IDI1NmMwLTUzIDQzLTk2IDk2LTk2bDEyOCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyMDhjMCAyNi41LTIxLjUgNDgtNDggNDhsLTIyNCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTIwOHptMjQwIDgwYTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHpNMzIwIDY0YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6TTQ0OCAzMmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTY0IDMyYTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTMyIDY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHpNNTEyIDI1NmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek00NDggMTI4YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhVm9sdW1lTG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbHVtZS1sb3ciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjgyNjQsICJ2b2x1bWUtZG93biJdLCAiZjAyNyIsICJNNDggMzUybDQ4IDAgMTM0LjEgMTE5LjJjNi40IDUuNyAxNC42IDguOCAyMy4xIDguOCAxOS4yIDAgMzQuOC0xNS42IDM0LjgtMzQuOGwwLTM3OC40YzAtMTkuMi0xNS42LTM0LjgtMzQuOC0zNC44LTguNSAwLTE2LjcgMy4xLTIzLjEgOC44TDk2IDE2MCA0OCAxNjBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDh6TTM4MC42IDE4MS41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzYxLjEgMjI3LjYgMzY4IDI0MSAzNjggMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDAyLjEgMzEyLjkgNDE2IDI4Ni4xIDQxNiAyNTZzLTEzLjktNTYuOS0zNS41LTc0LjV6Il0KICAgIH07CiAgICBmYVZvbHVtZURvd24gPSBmYVZvbHVtZUxvdzsKICAgIGZhQ3Jvc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3Jvc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgzMjcsIDEwMDEzXSwgImY2NTQiLCAiTTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDgwLTgwIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzJjMCAyNi41IDIxLjUgNDggNDggNDhsODAgMCAwIDIwOGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwzMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjA4IDgwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zMmMwLTI2LjUtMjEuNS00OC00OC00OGwtODAgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDE3NiAweiJdCiAgICB9OwogICAgZmFQZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbMTI5NDg1LCAibWFsZSJdLCAiZjE4MyIsICJNMjQ4IDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdsNDYuMyA2Mi40YzEwLjUgMTQuMiAzMC42IDE3LjIgNDQuOCA2LjZzMTcuMi0zMC42IDYuNi00NC44bC03MC41LTk1QzI3NCAxMzIgMjM0LjMgMTEyIDE5MiAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxMTIgMjM2LjcgMTEyIDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zeiJdCiAgICB9OwogICAgZmFNYWxlID0gZmFQZXJzb247CiAgICBmYUhvdXJnbGFzczMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTIwMywgNjIwMzIsICJob3VyZ2xhc3MtZW1wdHkiXSwgImYyNTQiLCAiTTAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwTDM1MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgMTFjMCA0Mi40LTE2LjkgODMuMS00Ni45IDExMy4xbC02Ny45IDY3LjkgNjcuOSA2Ny45YzMwIDMwIDQ2LjkgNzAuNyA0Ni45IDExMy4xbDAgMTFjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtMTFjMC00Mi40IDE2LjktODMuMSA0Ni45LTExMy4xbDY3LjktNjcuOS02Ny45LTY3LjlDNDguOSAxNTguMSAzMiAxMTcuNCAzMiA3NWwwLTExQzE0LjMgNjQgMCA0OS43IDAgMzJ6TTk2IDY0bDAgMTFjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlsNjcuOSA2Ny45IDY3LjktNjcuOWMxOC0xOCAyOC4xLTQyLjQgMjguMS02Ny45bDAtMTEtMTkyIDB6bTAgMzg0bDE5MiAwIDAtMTFjMC0yNS41LTEwLjEtNDkuOS0yOC4xLTY3LjlsLTY3LjktNjcuOS02Ny45IDY3LjljLTE4IDE4LTI4LjEgNDIuNC0yOC4xIDY3LjlsMCAxMXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW1wdHkyID0gZmFIb3VyZ2xhc3MzOwogICAgZmFGaXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjgwMzFdLCAiZjU3OCIsICJNMTgwLjUgMTQxLjVDMjE5LjcgMTA4LjUgMjcyLjYgODAgMzM2IDgwczExNi4zIDI4LjUgMTU1LjUgNjEuNWMzOS4xIDMzIDY2LjkgNzIuNCA4MSA5OS44IDQuNyA5LjIgNC43IDIwLjEgMCAyOS4zLTE0LjEgMjcuNC00MS45IDY2LjgtODEgOTkuOC0zOS4yIDMzLjEtOTIgNjEuNS0xNTUuNSA2MS41cy0xMTYuMy0yOC41LTE1NS41LTYxLjVjLTE2LjItMTMuNy0zMC41LTI4LjUtNDIuNy00My4xTDQ4LjEgMzc5LjZjLTEyLjUgNy4zLTI4LjQgNS4zLTM4LjctNC45cy0xMi40LTI2LTUuMy0zOC42TDUwIDI1NiA0LjIgMTc1LjljLTcuMi0xMi42LTUtMjguNCA1LjMtMzguNnMyNi4xLTEyLjIgMzguNy00LjlsODkuNyA1Mi4zYzEyLjItMTQuNiAyNi41LTI5LjQgNDIuNy00My4xek00NDggMjU2YTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYURydW1zdGlja0JpdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHJ1bXN0aWNrLWJpdGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjZkNyIsICJNMTYwIDI2NS4yYzAgOC41LTMuNCAxNi42LTkuNCAyMi42bC0yNi44IDI2LjhjLTEyLjMgMTIuMy0zMi41IDExLjQtNDkuNCA3LjItNC42LTEuMS05LjUtMS44LTE0LjUtMS44LTMzLjEgMC02MCAyNi45LTYwIDYwczI2LjkgNjAgNjAgNjBjNi4zIDAgMTIgNS43IDEyIDEyIDAgMzMuMSAyNi45IDYwIDYwIDYwczYwLTI2LjkgNjAtNjBjMC01LS42LTkuOC0xLjgtMTQuNS00LjItMTYuOS01LjItMzcuMSA3LjItNDkuNGwyNi44LTI2LjhjNi02IDE0LjEtOS40IDIyLjYtOS40bDg5LjIgMGM2LjMgMCAxMi40LS4zIDE4LjUtMSAxMS45LTEuMiAxNi40LTE1LjUgMTAuOC0yNi04LjUtMTUuOC0xMy4zLTMzLjgtMTMuMy01MyAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMiA4IDAgMTUuNyAuOCAyMy4yIDIuNCAxMS43IDIuNSAyNC4xLTUuOSAyMi0xNy42LTE0LjctODIuMy04Ni43LTE0NC44LTE3My4yLTE0NC44LTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2bDAgODkuMnoiXQogICAgfTsKICAgIGZhQ2hhcnRTaW1wbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtc2ltcGxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0NzMiLCAiTTE5MiA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MnpNMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2MGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAyNzJ6TTQzMiA5NmwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMjg4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTI4OGMwLTI2LjUgMjEuNS00OCA0OC00OHoiXQogICAgfTsKICAgIGZhQXRvbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhdG9tIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbOTg4M10sICJmNWQyIiwgIk0yMjQgMzk4LjhjLTExLjggNS4xLTIzLjQgOS43LTM0LjkgMTMuNSAxNi43IDMzLjggMzEgMzUuNyAzNC45IDM1LjdzMTguMS0xLjkgMzQuOS0zNS43Yy0xMS40LTMuOS0yMy4xLTguNC0zNC45LTEzLjV6TTQxNCAyNTZjMzMgNDUuMiA0NC4zIDkwLjkgMjMuNiAxMjgtMjAuMiAzNi4zLTYyLjUgNDkuMy0xMTUuMiA0My4yLTIyIDUyLjEtNTUuNyA4NC44LTk4LjQgODQuOHMtNzYuNC0zMi43LTk4LjQtODQuOEM3Mi45IDQzMy4zIDMwLjYgNDIwLjMgMTAuNCAzODQtMTAuMyAzNDYuOSAxIDMwMS4yIDM0IDI1NiAxIDIxMC44LTEwLjMgMTY1LjEgMTAuNCAxMjggMzAuNiA5MS43IDcyLjkgNzguNyAxMjUuNiA4NC44IDE0Ny42IDMyLjcgMTgxLjIgMCAyMjQgMHM3Ni40IDMyLjcgOTguNCA4NC44YzUyLjctNi4xIDk1IDYuOCAxMTUuMiA0My4yIDIwLjcgMzcuMSA5LjQgODIuOC0yMy42IDEyOHptLTY1LjggNjcuNGMtMS43IDE0LjItMy45IDI4LTYuNyA0MS4yIDMxLjggMS40IDM4LjYtOC43IDQwLjItMTEuNyAyLjMtNC4yIDctMTcuOS0xMS45LTQ4LjEtNi44IDYuMy0xNCAxMi41LTIxLjYgMTguNnptLTYuNy0xNzUuOWMyLjggMTMuMSA1IDI2LjkgNi43IDQxLjIgNy42IDYuMSAxNC44IDEyLjMgMjEuNiAxOC42IDE4LjktMzAuMiAxNC4yLTQ0IDExLjktNDguMS0xLjYtMi45LTguNC0xMy00MC4yLTExLjd6TTI1OC45IDk5LjdDMjQyLjEgNjUuOSAyMjcuOSA2NCAyMjQgNjRzLTE4LjEgMS45LTM0LjkgMzUuN2MxMS40IDMuOSAyMy4xIDguNCAzNC45IDEzLjUgMTEuOC01LjEgMjMuNC05LjcgMzQuOS0xMy41em0tMTU5IDg4LjljMS43LTE0LjMgMy45LTI4IDYuNy00MS4yLTMxLjgtMS40LTM4LjYgOC43LTQwLjIgMTEuNy0yLjMgNC4yLTcgMTcuOSAxMS45IDQ4LjEgNi44LTYuMyAxNC0xMi41IDIxLjYtMTguNnpNNzguMiAzMDQuOGMtMTguOSAzMC4yLTE0LjIgNDQtMTEuOSA0OC4xIDEuNiAyLjkgOC40IDEzIDQwLjIgMTEuNy0yLjgtMTMuMS01LTI2LjktNi43LTQxLjItNy42LTYuMS0xNC44LTEyLjMtMjEuNi0xOC42ek0zMDQgMjU2YTgwIDgwIDAgMSAwIC0xNjAgMCA4MCA4MCAwIDEgMCAxNjAgMHptLTgwLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhUCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbMTEyXSwgIjUwIiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDEyOCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwUzI0OC40IDM1MiAxNjAgMzUybC05NiAwIDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0ek02NCAyODhsOTYgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NmwtOTYgMCAwIDE5MnoiXQogICAgfTsKICAgIGZhSmV0RmlnaHRlclVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImpldC1maWdodGVyLXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MTgiLCAiTTIwNi44IDQ3LjhDMjAyLjMgNTguNSAyMDAgNzAgMjAwIDgxLjZsMCAxMDAuNC0xNTIgMTE0IDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRTMCAyMzQuNyAwIDI0OEwwIDM5MmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtOCAxNTIgMCAwIDU0LjQtNjYgNTIuOGMtMy44IDMtNiA3LjYtNiAxMi41bDAgMjQuM2MwIDguOCA3LjIgMTYgMTYgMTZsODggMCAwLTQwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA0MCA4OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTI0LjNjMC00LjktMi4yLTkuNS02LTEyLjVsLTY2LTUyLjggMC01NC40IDE1MiAwIDAgOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTQ0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDgtMTUyLTExNCAwLTEwMC40YzAtMTEuNi0yLjMtMjMuMS02LjgtMzMuOGwtMjcuMS02NUMyNzQuNC0yNi4yIDI2NS43LTMyIDI1Ni0zMnMtMTguNCA1LjgtMjIuMiAxNC44bC0yNy4xIDY1eiJdCiAgICB9OwogICAgZmFQbHVnQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2MCIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXQogICAgfTsKICAgIGZhU2hlZXRQbGFzdGljID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoZWV0LXBsYXN0aWMiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTU3MSIsICJNMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTQ5LjUgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN0wzNjUuMyAzODYuN2MxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDM4NCA2NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OHptMjA4IDUuNWwwLTkzLjVjMC0xMy4zIDEwLjctMjQgMjQtMjRsOTMuNSAwLTExNy41IDExNy41ek0xNTMgMTA1bC00OCA0OGMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWw0OC00OGM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6bTk2IDMyTDEzNyAyNDljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlMMjE1IDEwM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYVYgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExOF0sICI1NiIsICJNMTkuNyAzNC41YzE2LjMtNi44IDM1IC45IDQxLjggMTcuMkwxOTIgMzY0LjggMzIyLjUgNTEuN2M2LjgtMTYuMyAyNS41LTI0IDQxLjgtMTcuMnMyNCAyNS41IDE3LjIgNDEuOGwtMTYwIDM4NGMtNSAxMS45LTE2LjYgMTkuNy0yOS41IDE5LjdzLTI0LjYtNy44LTI5LjUtMTkuN0wyLjUgNzYuM2MtNi44LTE2LjMgLjktMzUgMTcuMi00MS44eiJdCiAgICB9OwogICAgZmFMaXN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxpc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibGlzdC1zcXVhcmVzIl0sICJmMDNhIiwgIk00MCA0OEMyNi43IDQ4IDE2IDU4LjcgMTYgNzJsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRMNDAgNDh6TTE5MiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjR6bTAgMTYwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yODggMHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwek0xNiAyMzJsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0ek00MCAzNjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAweiJdCiAgICB9OwogICAgZmFMaXN0U3F1YXJlcyA9IGZhTGlzdDsKICAgIGZhU29sYXJQYW5lbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2xhci1wYW5lbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJhIiwgIk0xMjEuOCAzMmMtMzAgMC01NiAyMC44LTYyLjUgNTAuMUw5LjYgMzA2LjFDLjcgMzQ2LjEgMzEuMSAzODQgNzIgMzg0bDE4NC4xIDAgMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE5MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAtNjQgMTg0LjEgMGM0MC45IDAgNzEuNC0zNy45IDYyLjUtNzcuOWwtNDkuOC0yMjRDNTEwLjQgNTIuOCA0ODQuNSAzMiA0NTQuNSAzMkwxMjEuOCAzMnpNMjQ1LjYgOTZsODUuMiAwIDcuMyA4OC05OS44IDAgNy4zLTg4em0tNTUuNSA4OGwtODcuOCAwIDE5LjYtODggNzUuNiAwLTcuMyA4OHpNOTEuNiAyMzJsOTQuNSAwLTcuMyA4OC0xMDYuNyAwIDE5LjYtODh6bTE0Mi42IDBsMTA3LjggMCA3LjMgODgtMTIyLjUgMCA3LjMtODh6bTE1NiAwbDk0LjUgMCAxOS42IDg4LTEwNi43IDAtNy4zLTg4ek00NzQgMTg0bC04Ny44IDAtNy4zLTg4IDc1LjYgMCAxOS42IDg4eiJdCiAgICB9OwogICAgZmFMYW5kTWluZU9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhbmQtbWluZS1vbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTFiIiwgIk0zMTIgMGwwIDEyOGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNEwyNjQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek0xNjAgMjg4YzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDgwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTI2LjUgMjEuNS00OCA0OC00OGw4MCAwIDAtMzJ6TTEyIDExNC43YzcuNC0xMSAyMi4zLTE0IDMzLjMtNi43bDk2IDY0YzExIDcuNCAxNCAyMi4zIDYuNyAzMy4zcy0yMi4zIDE0LTMzLjMgNi43bC05Ni02NGMtMTEtNy40LTE0LTIyLjMtNi43LTMzLjN6TTUzMC43IDEwOGMxMS03LjQgMjUuOS00LjQgMzMuMyA2LjdzNC40IDI1LjktNi43IDMzLjNsLTk2IDY0Yy0xMSA3LjQtMjUuOSA0LjQtMzMuMy02LjdzLTQuNC0yNS45IDYuNy0zMy4zbDk2LTY0eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkcGhvbmVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3OTExLCA2Mjg2MywgImhlYWRwaG9uZXMtYWx0IiwgImhlYWRwaG9uZXMtc2ltcGxlIl0sICJmMDI1IiwgIk02NCAyMjRjMC04OC40IDcxLjYtMTYwIDE2MC0xNjBzMTYwIDcxLjYgMTYwIDE2MGwwIDM3LjVjLTEwLTMuNS0yMC44LTUuNS0zMi01LjVsLTE2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDE2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTE2MEM0NDggMTAwLjMgMzQ3LjcgMCAyMjQgMFMwIDEwMC4zIDAgMjI0TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsMTYgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEyOGMwLTI2LjUtMjEuNS00OC00OC00OGwtMTYgMGMtMTEuMiAwLTIyIDEuOS0zMiA1LjVMNjQgMjI0eiJdCiAgICB9OwogICAgZmFIZWFkcGhvbmVzQWx0MiA9IGZhSGVhZHBob25lczI7CiAgICBmYUhlYWRwaG9uZXNTaW1wbGUyID0gZmFIZWFkcGhvbmVzMjsKICAgIGZhQnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODY1M10sICJmMjA3IiwgIk05NiAwQzQzIDAgMCA0MyAwIDk2TDAgMzg0YzAgMjkuOCAyMC40IDU0LjkgNDggNjJsMCAzNGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzIgMTkyIDAgMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMzRjMjcuNi03LjEgNDgtMzIuMiA0OC02MmwwLTI4OGMwLTUzLTQzLTk2LTk2LTk2TDk2IDB6TTY0IDE3NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMDQgMCAwIDExMi0xMDQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC00OHptMTg0IDgwbDAtMTEyIDEwNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEwNCAwek05NiAzMjBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0em0yNTYgMGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE1MiA3MmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw5NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC05NiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhRmlsZVBvd2VycG9pbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtcG93ZXJwb2ludCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM0IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTUyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxNDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTI0IDI0IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJzLTMyLjItNzItNzItNzJsLTQ4IDB6bTQ4IDk2bC0yNCAwIDAtNDggMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNHoiXQogICAgfTsKICAgIGZhUXVvdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInF1b3RlLWxlZnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs4MjIwLCAicXVvdGUtbGVmdC1hbHQiXSwgImYxMGQiLCAiTTAgMjE2QzAgMTQ5LjcgNTMuNyA5NiAxMjAgOTZsOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2bDAgOCA2NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRsLTY0IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjE2em0yNTYgMGMwLTY2LjMgNTMuNy0xMjAgMTIwLTEyMGw4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMGMtMzAuOSAwLTU2IDI1LjEtNTYgNTZsMCA4IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtNjQgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMzZ6Il0KICAgIH07CiAgICBmYVF1b3RlTGVmdEFsdCA9IGZhUXVvdGVMZWZ0OwogICAgZmFDaGV2cm9uRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGV2cm9uLWRvd24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA3OCIsICJNMjAxLjQgNDA2LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTkyLTE5MmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwyMjQgMzM4LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTkyIDE5MnoiXQogICAgfTsKICAgIGZhRWFydGhBc2lhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImVhcnRoLWFzaWEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3NTksICJnbG9iZS1hc2lhIl0sICJmNTdlIiwgIk01MCAyODQuOGM0LjIgMi4xIDkgMy4yIDE0IDMuMmw1MC43IDBjOC41IDAgMTYuNiAzLjQgMjIuNiA5LjRsMTMuMyAxMy4zYzYgNiAxNC4xIDkuNCAyMi42IDkuNGwxOC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNC0xMC43IDI0LTI0bDAtNDIuN2MwLTguNSAzLjQtMTYuNiA5LjQtMjIuNmwxMy4zLTEzLjNjNi02IDkuNC0xNC4xIDkuNC0yMi42TDMwNCA1N2MwLTEuMi0uMS0yLjMtLjItMy41LTE1LjQtMy42LTMxLjQtNS41LTQ3LjgtNS41LTExNC45IDAtMjA4IDkzLjEtMjA4IDIwOCAwIDkuOCAuNyAxOS40IDIgMjguOHptNDAzLjMgMzcuM2MtMy4yLTEuNC02LjctMi4xLTEwLjUtMi4xTDQzMiAzMjBjLTguOCAwLTE2LTcuMi0xNi0xNnMtNy4yLTE2LTE2LTE2bC0zNC43IDBjLTguNSAwLTE2LjYgMy40LTIyLjYgOS40bC00NS4zIDQ1LjNjLTYgNi05LjQgMTQuMS05LjQgMjIuNmwwIDE4LjdjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTguNyAwYzguNSAwIDE2LjYgMy40IDIyLjYgOS40IDIuMiAyLjIgNC43IDQuMSA3LjMgNS41IDM5LjMtMjUuNCA2OS41LTYzLjYgODQuNi0xMDguOHpNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMTI4IDM2OGMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0yNzIgMjU2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2em00OC0xMTJsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZ6Il0KICAgIH07CiAgICBmYUdsb2JlQXNpYSA9IGZhRWFydGhBc2lhOwogICAgZmFDZW50U2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjZW50LXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTNmNSIsICJNMjA4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyNS40YzQzLjYgNS4yIDgzIDI0LjUgMTEzLjMgNTMuMSAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTI0LjQtMjMtNTcuMi0zNy4xLTkzLjMtMzcuMS03NS4xIDAtMTM2IDYwLjktMTM2IDEzNnM2MC45IDEzNiAxMzYgMTM2YzM2LjIgMCA2OS0xNC4xIDkzLjMtMzcuMSAxMi45LTEyLjEgMzMuMS0xMS41IDQ1LjIgMS4zczExLjUgMzMuMS0xLjMgNDUuMkMzMjMgNDMwLjEgMjgzLjYgNDQ5LjQgMjQwIDQ1NC42bDAgMjUuNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTI4Qzg0LjcgNDMzLjUgMTYgMzUyLjggMTYgMjU2Uzg0LjcgNzguNSAxNzYgNjBsMC0yOGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhU2hpZWxkQ2F0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNoaWVsZC1jYXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3MiIsICJNMjY5LjQgMi45QzI2NS4yIDEgMjYwLjcgMCAyNTYgMHMtOS4yIDEtMTMuNCAyLjlMNTQuMyA4Mi44Yy0yMiA5LjMtMzguNCAzMS0zOC4zIDU3LjIgLjUgOTkuMiA0MS4zIDI4MC43IDIxMy42IDM2My4yIDE2LjcgOCAzNi4xIDggNTIuOCAwIDE3Mi40LTgyLjUgMjEzLjItMjY0IDIxMy42LTM2My4yIC4xLTI2LjItMTYuMy00Ny45LTM4LjMtNTcuMkwyNjkuNCAyLjl6TTE2MCAxNTQuNGMwLTUuOCA0LjctMTAuNCAxMC40LTEwLjRsLjIgMGMzLjQgMCA2LjUgMS42IDguNSA0LjNsNDAgNTMuM2MzIDQgNy44IDYuNCAxMi44IDYuNGw0OCAwYzUgMCA5LjgtMi40IDEyLjgtNi40bDQwLTUzLjNjMi0yLjcgNS4yLTQuMyA4LjUtNC4zbC4yIDBjNS44IDAgMTAuNCA0LjcgMTAuNCAxMC40TDM1MiAyNzJjMCA1My00MyA5Ni05NiA5NnMtOTYtNDMtOTYtOTZsMC0xMTcuNnpNMjE2IDI4OGExNiAxNiAwIDEgMCAwLTMyIDE2IDE2IDAgMSAwIDAgMzJ6bTk2LTE2YTE2IDE2IDAgMSAwIC0zMiAwIDE2IDE2IDAgMSAwIDMyIDB6Il0KICAgIH07CiAgICBmYVNjaG9vbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2YiIsICJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhTWFydGluaUdsYXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hcnRpbmktZ2xhc3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc4NjQsICJnbGFzcy1tYXJ0aW5pLWFsdCJdLCAiZjU3YiIsICJNMi40IDUxLjhDNy40IDM5LjggMTkuMSAzMiAzMiAzMmw0NDggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDI4OCAzMDEuMyAyODggNDQ4IDM1MiA0NDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xNDYuNy0yMTQuNi0yMTQuNkMuMiA3Ny41LTIuNSA2My43IDIuNCA1MS44ek0zNTQuNyAxNDRsNDgtNDgtMjkzLjUgMCA0OCA0OCAxOTcuNSAweiJdCiAgICB9OwogICAgZmFHbGFzc01hcnRpbmlBbHQgPSBmYU1hcnRpbmlHbGFzczsKICAgIGZhUGx1ZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVnIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4MjY4XSwgImYxZTYiLCAiTTEyOC0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA2NGMwIDk1LjEtNjkuMiAxNzQuMS0xNjAgMTg5LjNsMCA2Ni43YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxMDEuMiAzOTguMSAzMiAzMTkuMSAzMiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVBhbm9yYW1hID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhbm9yYW1hIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUyMDkiLCAiTTQzLjkgNDhDMTkuNyA0OCAwIDY3LjcgMCA5MS45TDAgNDIwLjFjMCAyNC4zIDE5LjcgNDMuOSA0My45IDQzLjkgNS41IDAgMTAuNy0xIDE1LjctMi45IDEyLjktNC45IDEwMy40LTM3LjEgMjI4LjQtMzcuMXMyMTUuNSAzMi4zIDIyOC40IDM3LjFjNSAxLjkgMTAuMiAyLjkgMTUuNyAyLjkgMjQuMyAwIDQzLjktMTkuNyA0My45LTQzLjlsMC0zMjguMmMwLTI0LjMtMTkuNy00My45LTQzLjktNDMuOS01LjUgMC0xMC43IDEtMTUuNyAyLjktMTIuOSA0LjktMTAzLjQgMzcuMS0yMjguNCAzNy4xUzcyLjUgNTUuNyA1OS42IDUwLjlDNTQuNiA0OSA0OS40IDQ4IDQzLjkgNDh6TTcyIDE3NmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAwem0yNjQuMS0xNmM3LjUgMCAxNC42IDMuNiAxOS4xIDkuNkw0NzkuNyAzMzYuMmM1LjkgNy45IDYuNCAxOC41IDEuMyAyNi45cy0xNC44IDEyLjgtMjQuNSAxMS4xYy00NS44LTcuOC0xMDMuMy0xNC4yLTE2OC40LTE0LjItNjUuNiAwLTEyMy40IDYuNS0xNjkuMyAxNC40LTkuOCAxLjctMTkuNy0yLjktMjQuNy0xMS41cy00LjMtMTkuNCAxLjktMjcuMkwxNjUuMyAyNDljNC42LTUuNyAxMS41LTkgMTguNy05czE0LjIgMy4zIDE4LjcgOWwyNy41IDM0LjQgODYuNy0xMTMuOWM0LjYtNiAxMS43LTkuNSAxOS4yLTkuNXoiXQogICAgfTsKICAgIGZhQ2xvY2tSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb2NrLXJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImhpc3RvcnkiXSwgImYxZGEiLCAiTTI4OCA2NGMxMDYgMCAxOTIgODYgMTkyIDE5MlMzOTQgNDQ4IDI4OCA0NDhjLTY1LjIgMC0xMjIuOS0zMi41LTE1Ny42LTgyLjMtMTAuMS0xNC41LTMwLjEtMTgtNDQuNi03LjlzLTE4IDMwLjEtNy45IDQ0LjZDMTI0LjEgNDY4LjYgMjAxIDUxMiAyODggNTEyIDQyOS40IDUxMiA1NDQgMzk3LjQgNTQ0IDI1NlM0MjkuNCAwIDI4OCAwQzIwMi4zIDAgMTI2LjUgNDIuMSA4MCAxMDYuN0w4MCA4MGMwLTE3LjctMTQuMy0zMi0zMi0zMlMxNiA2Mi4zIDE2IDgwbDAgMTEyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDI0LjYgMGMuNSAwIDEgMCAxLjUgMGw4NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zOC4zIDBDMTU0LjkgMTAyLjYgMjE3IDY0IDI4OCA2NHptMjQgODhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDRjMCA2LjQgMi41IDEyLjUgNyAxN2w3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTY1LTY1IDAtOTQuMXoiXQogICAgfTsKICAgIGZhSGlzdG9yeSA9IGZhQ2xvY2tSb3RhdGVMZWZ0OwogICAgZmFKYXJXaGVhdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqYXItd2hlYXQiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTUxNyIsICJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em0xMTIgMzJsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMTYwYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6bTQ4IDExNy43Yy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjdsLTQyLjIgMGMtMy4yIDAtNS44IDIuNi01LjggNS44IDAgMzIuMSAyNiA1OC4yIDU4LjIgNTguMmw3NS42IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMjU2Yy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuN3pNMTEyIDM1MmwtNDIuMiAwYy0zLjIgMC01LjggMi42LTUuOCA1LjggMCAzMi4xIDI2IDU4LjIgNTguMiA1OC4ybDIxLjggMCAwIDMyYzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC0zMiAyMS44IDBjMzIuMSAwIDU4LjItMjYgNTguMi01OC4yIDAtMy4yLTIuNi01LjgtNS44LTUuOEwyMDggMzUyYy0xOS4xIDAtMzYuMyA4LjQtNDggMjEuNy0xMS43LTEzLjMtMjguOS0yMS43LTQ4LTIxLjd6Il0KICAgIH07CiAgICBmYUNsb3VkQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWFycm93LWRvd24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs2MjMzNywgImNsb3VkLWRvd25sb2FkIiwgImNsb3VkLWRvd25sb2FkLWFsdCJdLCAiZjBlZCIsICJNMTQ0IDQ4MGMtNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC02My40IDQxLTExNy4yIDk3LjktMTM2LjUtMS4zLTcuNy0xLjktMTUuNS0xLjktMjMuNSAwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA1NS40IDAgMTAzLjUgMzEuMyAxMjcuNiA3Ny4xIDE0LjItOC4zIDMwLjgtMTMuMSA0OC40LTEzLjEgNTMgMCA5NiA0MyA5NiA5NiAwIDE1LjctMy44IDMwLjYtMTAuNSA0My43IDQ0IDIwLjMgNzQuNSA2NC43IDc0LjUgMTE2LjMgMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTMwNCAwek0zNzcgMzEzYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhQ2xvdWREb3dubG9hZCA9IGZhQ2xvdWRBcnJvd0Rvd247CiAgICBmYUNsb3VkRG93bmxvYWRBbHQgPSBmYUNsb3VkQXJyb3dEb3duOwogICAgZmFUcnVja1JhbXBCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stcmFtcC1ib3giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsidHJ1Y2stbG9hZGluZyJdLCAiZjRkZSIsICJNNDAwIDMyYy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDI0OC4yLTI5Ny4yIDg5LjJDNS45IDQ1NC40LTMuNyA0NzIuMyAxLjQgNDg5LjJzMjIuOSAyNi41IDM5LjggMjEuNWwzMTUuNS05NC42IDQzLjcgMGMtLjIgMi42LS40IDUuMy0uNCA4IDAgNDguNiAzOS40IDg4IDg4IDg4czg4LTM5LjQgODgtODhsMC0zOTItMTc2IDB6TTUyOCA0MjRjMCAyMi4xLTE3LjkgNDAtNDAgNDBzLTQwLTE3LjktNDAtNDAgMTcuOS00MCA0MC00MGMyMi4xIDAgMzkuOSAxNy45IDQwIDM5LjlsMCAuMXpNNTEuOSAxNDkuNUMxOC4xIDE1OS44LS45IDE5NS42IDkuNCAyMjkuNGwyOC4xIDkxLjhDNDcuOCAzNTUgODMuNiAzNzQgMTE3LjQgMzYzLjdsOTEuOC0yOC4xYzMzLjgtMTAuMyA1Mi44LTQ2LjEgNDIuNS03OS45bC0yOC4xLTkxLjhjLTEwLjMtMzMuOC00Ni4xLTUyLjgtNzkuOS00Mi41TDUxLjkgMTQ5LjV6Il0KICAgIH07CiAgICBmYVRydWNrTG9hZGluZyA9IGZhVHJ1Y2tSYW1wQm94OwogICAgZmFBbmdsZURvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGUtZG93biIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzg5NjRdLCAiZjEwNyIsICJNMTY5LjQgMzc0LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsMTYwLTE2MGMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM3MtMzIuOC0xMi41LTQ1LjMgMEwxOTIgMzA2LjcgNTQuNiAxNjkuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MHoiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBsdWctY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NWMiLCAiTTE5Mi0zMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2IDEyOCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDk2IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCA0OC43Yy05OC42IDguMS0xNzYgOTAuNy0xNzYgMTkxLjMgMCAyNy4zIDUuNyA1My4zIDE2IDc2LjlsMCAzLjFjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02Ni43QzE2NS4yIDM5OC4xIDk2IDMxOS4xIDk2IDIyNGwwLTY0Yy0xNy43IDAtMzItMTQuMy0zMi0zMlM3OC4zIDk2IDk2IDk2bDY0IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNMzUyIDQwMGExNDQgMTQ0IDAgMSAxIDI4OCAwIDE0NCAxNDQgMCAxIDEgLTI4OCAwem0yMDEuNC02MC45Yy03LjEtNS4yLTE3LjItMy42LTIyLjQgMy41bC01MyA3Mi45LTI2LjgtMjYuOGMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw0MCA0MGMzLjMgMy4zIDcuOSA1IDEyLjYgNC42czguOS0yLjggMTEuNy02LjVsNjQtODhjNS4yLTcuMSAzLjYtMTcuMi0zLjUtMjIuM3oiXQogICAgfTsKICAgIGZhV2luZG93TWF4aW1pemUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmRvdy1tYXhpbWl6ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MF0sICJmMmQwIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMjQgNjRsMzM2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMODggMTc2Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFIYW5kc0hvbGRpbmdDaXJjbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtaG9sZGluZy1jaXJjbGUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRmYiIsICJNMzIwIDBhMTI4IDEyOCAwIDEgMSAwIDI1NiAxMjggMTI4IDAgMSAxIDAtMjU2ek00MCA2NGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDE2MC4yYzAgMTcgNi43IDMzLjMgMTguNyA0NS4zbDUxLjEgNTEuMWM4LjMgOC4zIDIxLjMgOS42IDMxIDMuMSAxMi45LTguNiAxNC43LTI2LjkgMy43LTM3LjgtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBjMjQuMSAyNC4xIDM5LjkgMzkuOSA0Ny4yIDQ3LjJsMCAwIDI1LjMgMjUuM2MyMSAyMSAzMi44IDQ5LjUgMzIuOCA3OS4ybDAgNzguOWMwIDI2LjUtMjEuNSA0OC00OCA0OGwtNjYuNyAwYy0xNyAwLTMzLjMtNi43LTQ1LjMtMTguN0wyOC4xIDM5My40QzEwLjEgMzc1LjQgMCAzNTEgMCAzMjUuNUwwIDEwNEMwIDgxLjkgMTcuOSA2NCA0MCA2NHptNTYwIDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCAyMjEuNWMwIDI1LjUtMTAuMSA0OS45LTI4LjEgNjcuOUw1MTIgNDkzLjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNDAwIDUxMmMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC03OC45YzAtMjkuNyAxMS44LTU4LjIgMzIuOC03OS4ybDI1LjMtMjUuMyAwIDBjNy4zLTcuMyAyMy4xLTIzLjEgNDcuMi00Ny4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4yLTExIDExLTkuMiAyOS4yIDMuNyAzNy44IDkuNyA2LjUgMjIuNyA1LjIgMzEtMy4xbDUxLjEtNTEuMWMxMi0xMiAxOC43LTI4LjMgMTguNy00NS4zTDU2MCAxMDRjMC0yMi4xIDE3LjktNDAgNDAtNDB6Il0KICAgIH07CiAgICBmYUxvY2F0aW9uUGluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2F0aW9uLXBpbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJtYXAtbWFya2VyIl0sICJmMDQxIiwgIk0xOTIgMEM4NiAwIDAgODQuNCAwIDE4OC42IDAgMzA3LjkgMTIwLjIgNDUwLjkgMTcwLjQgNTA1LjQgMTgyLjIgNTE4LjIgMjAxLjggNTE4LjIgMjEzLjYgNTA1LjQgMjYzLjggNDUwLjkgMzg0IDMwNy45IDM4NCAxODguNiAzODQgODQuNCAyOTggMCAxOTIgMHoiXQogICAgfTsKICAgIGZhTWFwTWFya2VyID0gZmFMb2NhdGlvblBpbjsKICAgIGZhQm93bGluZ0JhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bGluZy1iYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0MzYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0yNDAgODBhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0yMDggMjA4YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bS02NC02NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUNhcnRGbGF0YmVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhcnQtZmxhdGJlZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJkb2xseS1mbGF0YmVkIl0sICJmNDc0IiwgIk0zMiAwQzE0LjMgMCAwIDE0LjMgMCAzMlMxNC4zIDY0IDMyIDY0bDE2IDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjg4YzAgMzkuOCAyOS4xIDcyLjggNjcuMSA3OS0yIDUuMy0zLjEgMTEtMy4xIDE3IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsMTk3LjUgMGMtMS44IDUtMi43IDEwLjQtMi43IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4czQ4LTIxLjUgNDgtNDhjMC01LjYtMS0xMS0yLjctMTZsMzQuNyAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00MDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjg4QzEyOCAzNS44IDkyLjIgMCA0OCAwTDMyIDB6TTIyNCA2NGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNzZjMCAyNi41IDIxLjUgNDggNDggNDhsMjQwIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNzZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMjI0IDY0eiJdCiAgICB9OwogICAgZmFEb2xseUZsYXRiZWQgPSBmYUNhcnRGbGF0YmVkOwogICAgZmFIb3VzZVVzZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtdXNlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJob21lLXVzZXIiXSwgImUxYjAiLCAiTTI3Ny44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTMTguOCAyNzIgMzIgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjg4IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNzYgMTYgMGMxMy4yIDAgMjUtOC4xIDI5LjgtMjAuM3MxLjYtMjYuMi04LTM1LjFsLTIyNC0yMDh6TTIwMCAyNTZhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xNDQgNDMyYzAtNDQuMiAzNS44LTgwIDgwLTgwbDY0IDBjNDQuMiAwIDgwIDM1LjggODAgODAgMCA4LjgtNy4yIDE2LTE2IDE2bC0xOTIgMGMtOC44IDAtMTYtNy4yLTE2LTE2eiJdCiAgICB9OwogICAgZmFIb21lVXNlciA9IGZhSG91c2VVc2VyOwogICAgZmFHaG9zdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnaG9zdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODEyM10sICJmNmUyIiwgIk00MC4xIDQ2Ny4xbC0xMS4yIDlDMjUuNyA0NzguNiAyMS44IDQ4MCAxNy44IDQ4MCA4IDQ4MCAwIDQ3MiAwIDQ2Mi4yTDAgMTkyQzAgODYgODYgMCAxOTIgMFMzODQgODYgMzg0IDE5MmwwIDI3MC4yYzAgOS44LTggMTcuOC0xNy44IDE3LjgtNCAwLTcuOS0xLjQtMTEuMS0zLjlsLTExLjItOWMtMTMuNC0xMC43LTMyLjgtOS00NC4xIDMuOUwyNjkuMyA1MDZjLTMuMyAzLjgtOC4yIDYtMTMuMyA2cy05LjktMi4yLTEzLjMtNmwtMjYuNi0zMC41Yy0xMi43LTE0LjYtMzUuNC0xNC42LTQ4LjIgMEwxNDEuMyA1MDZjLTMuMyAzLjgtOC4yIDYtMTMuMyA2cy05LjktMi4yLTEzLjMtNkw4NC4yIDQ3MWMtMTEuMy0xMi45LTMwLjctMTQuNi00NC4xLTMuOXpNMTYwIDE5MmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwem05NiAzMmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUNvbW1lbnROb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LW5vZGVzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU2OTYiLCAiTTQ4MCAyMDhDNTAzLjcgMjA4IDUyNS42IDIxNS4zIDU0My43IDIyNy45IDUzNi45IDEwMC45IDQyNSAwIDI4OCAwIDE0Ni42IDAgMzIgMTA3LjUgMzIgMjQwIDMyIDI5NC4zIDUxLjIgMzQ0LjMgODMuNiAzODQuNUwzNC44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN2MyNy4yIDExLjQgNTYuOSAxOC40IDg4LjEgMjAuMiAuMS0xOC45IDQuOS0zOCAxNS01NS41IDE3LjEtMjkuNyA0NS44LTQ4LjUgNzctNTQuMmw5LjItMTZjLTMuNC0xMC43LTUuMi0yMi01LjItMzMuOCAwLTYxLjkgNTAuMS0xMTIgMTEyLTExMnpNMzI4LjYgNDQ4Yy0xNy43IDMwLjYtNy4yIDY5LjcgMjMuNCA4Ny40czY5LjcgNy4yIDg3LjQtMjMuNGMxLjUtMi42IDIuOC01LjMgMy45LThsNzMuMyAwYzEuMSAyLjcgMi40IDUuNCAzLjkgOCAxNy43IDMwLjYgNTYuOCA0MS4xIDg3LjQgMjMuNHM0MS4xLTU2LjggMjMuNC04Ny40Yy0xMy40LTIzLjItMzkuMS0zNC44LTY0LTMxLjRsLTE3LjYtMzAuN2MtMTEgMTEuNy0yNSAyMC42LTQwLjYgMjUuNmwxNi41IDI4LjljLTMuOCA0LjgtNi44IDEwLTkgMTUuNmwtNzMuNCAwYy0yLjItNS42LTUuMy0xMC44LTktMTUuNmwzMy01Ny43YzQuMSAuOCA4LjQgMS4zIDEyLjggMS4zIDM1LjMgMCA2NC0yOC43IDY0LTY0cy0yOC43LTY0LTY0LTY0LTY0IDI4LjctNjQgNjRjMCAxMy40IDQuMSAyNS44IDExLjIgMzYuMWwtMzQuNiA2MC41Yy0yNS0zLjQtNTAuNiA4LjMtNjQgMzEuNHoiXQogICAgfTsKICAgIGZhUGVyc29uQXJyb3dEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1hcnJvdy1kb3duLXRvLWxpbmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTUzOCIsICJNMTkyLTMyYTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0zMTguMyAyOTkuMWwtNDYuMy02Mi40IDAgMjQzLjMgMjcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTQ0Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgwIDAgMC0yNDMuMy00Ni4zIDYyLjRjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZ6TTE3NiA0ODBsMzIgMCAwLTEyOGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDEyOHpNNTY2LjYgMTY2LjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMNDMyIDE0Ni43IDQzMiAwYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3oiXQogICAgfTsKICAgIGZhUGx1Z0NpcmNsZVBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtcGx1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTVmIiwgIk0xOTItMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA5NiAxMjggMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA5NiA2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybDAgNDguN2MtOTguNiA4LjEtMTc2IDkwLjctMTc2IDE5MS4zIDAgMjcuMyA1LjcgNTMuMyAxNiA3Ni45bDAgMy4xYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjYuN0MxNjUuMiAzOTguMSA5NiAzMTkuMSA5NiAyMjRsMC02NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTNzguMyA5NiA5NiA5Nmw2NCAwIDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0xNiA4MGMwLTguOC03LjItMTYtMTYtMTZzLTE2IDcuMi0xNiAxNmwwIDQ4LTQ4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsNDggMCAwIDQ4YzAgOC44IDcuMiAxNiAxNiAxNnMxNi03LjIgMTYtMTZsMC00OCA0OCAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC00OCAwIDAtNDh6Il0KICAgIH07CiAgICBmYVBlcnNvblN3aW1taW5nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1zd2ltbWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyNzk0NiwgInN3aW1tZXIiXSwgImY1YzQiLCAiTTU1MiAxNTJhNTYgNTYgMCAxIDAgLTExMiAwIDU2IDU2IDAgMSAwIDExMiAwek0yOTMuNCAxOTguMmwtODguNiA3My45YzEuMSAwIDIuMi0uMSAzLjMtLjEgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40IDIyLjEgMTYuNiAyOS4xIDE2LjYgNTEuMiAwIDI3LjUtMjAuNyA1OS45LTMxLjIgOTIuNC0zMS40IDQuOCAwIDkuNyAuMiAxNC41IC42LTguMy0zMC0yNC4zLTU3LjctNDYuOC04MC4yLTE4LjQtMTguNC00MC42LTMyLjctNjUtNDEuOGwtNjguNi0yNS43Yy0yNy40LTEwLjMtNTgtNy41LTgzLjEgNy42bC01My41IDMyLjFjLTE1LjIgOS4xLTIwLjEgMjguNy0xMSA0My45czI4LjcgMjAuMSA0My45IDExTDIzMCAxODcuM2M4LjQtNSAxOC42LTUuOSAyNy43LTIuNWwzNS43IDEzLjR6bTExMCAxODEuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAxOSAxNC40IDQxLjkgMjguMiA2Ny4yIDMzLjMgMjYuNSA1LjQgNTQuMyAuOCA4MC43LTE5LjEgMTAuNi04IDEyLjctMjMgNC43LTMzLjZzLTIzLTEyLjctMzMuNi00LjdjLTE0LjkgMTEuMi0yOC42IDEzLjEtNDIuMyAxMC4zLTE0LjktMy0zMC45LTExLjktNDcuOC0yNC42LTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yNCAxOC4xLTQwLjcgMjYuMy01NC41IDI2LjNzLTMwLjUtOC4yLTU0LjUtMjYuM2MtMzguNC0yOS05MC41LTI5LTEyOSAwLTIxLjYgMTYuMy00MS4zIDI1LjgtNTguOSAyNS43LTkuNi0uMS0xOS45LTMtMzEuMi0xMS41LTEwLjYtOC0yNS42LTUuOS0zMy42IDQuN1M3IDM4Ni4zIDE3LjYgMzk0LjNjMTkuMSAxNC40IDM5LjQgMjEgNTkuOCAyMS4xIDMzLjkgLjIgNjQuMy0xNy40IDg4LjEtMzUuMyAyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMCAyNC4yIDE4LjMgNTIuMyAzNS45IDgzLjQgMzUuOXM1OS4xLTE3LjcgODMuNC0zNS45eiJdCiAgICB9OwogICAgZmFTd2ltbWVyID0gZmFQZXJzb25Td2ltbWluZzsKICAgIGZhQ29tbWVudERvdHMyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvbW1lbnQtZG90cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3MiwgNjIwNzUsICJjb21tZW50aW5nIl0sICJmNGFkIiwgIk0yNTYgNDgwYzE0MS40IDAgMjU2LTEwNy41IDI1Ni0yNDBTMzk3LjQgMCAyNTYgMCAwIDEwNy41IDAgMjQwYzAgNTQuMyAxOS4yIDEwNC4zIDUxLjYgMTQ0LjVMMi44IDQ3Ni44Yy00LjggOS0zLjMgMjAgMy42IDI3LjVzMTcuOCA5LjggMjcuMSA1LjhsMTE4LjQtNTAuN0MxODMuNyA0NzIuNiAyMTguOSA0ODAgMjU2IDQ4MHpNMTI4IDIwOGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6bTEyOCAwYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ29tbWVudGluZzIgPSBmYUNvbW1lbnREb3RzMjsKICAgIGZhQ2hhcnRQaWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hhcnQtcGllIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInBpZS1jaGFydCJdLCAiZjIwMCIsICJNNTEyLjQgMjQwbC0xNzYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzZjMC0xNy43IDE0LjQtMzIuMiAzMS45LTI5LjkgMTA3IDE0LjIgMTkxLjggOTkgMjA2IDIwNiAyLjMgMTcuNS0xMi4yIDMxLjktMjkuOSAzMS45ek0yMjIuNiAzNy4yYzE4LjEtMy44IDMzLjggMTEgMzMuOCAyOS41bDAgMTk3LjNjMCA1LjYgMiAxMSA1LjUgMTUuM0wzOTQgNDM4LjdjMTEuNyAxNC4xIDkuMiAzNS40LTYuOSA0NC4xLTM0LjEgMTguNi03My4yIDI5LjItMTE0LjcgMjkuMi0xMzIuNSAwLTI0MC0xMDcuNS0yNDAtMjQwIDAtMTE1LjUgODEuNS0yMTEuOSAxOTAuMi0yMzQuOHpNNDc3LjggMjg4bDY0IDBjMTguNSAwIDMzLjMgMTUuNyAyOS41IDMzLjgtMTAuMiA0OC40LTM1IDkxLjQtNjkuNiAxMjQuMi0xMi4zIDExLjctMzEuNiA5LjItNDIuNC0zLjlMMzc0LjkgMzQwLjRjLTE3LjMtMjAuOS0yLjQtNTIuNCAyNC42LTUyLjRsNzguMiAweiJdCiAgICB9OwogICAgZmFQaWVDaGFydCA9IGZhQ2hhcnRQaWU7CiAgICBmYUZyb2cgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZnJvZyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNTJlIiwgIk0zNjggMzJjNDEuNyAwIDc1LjkgMzEuOCA3OS43IDcyLjVsODUuNiAyNi4zYzI1LjQgNy44IDQyLjggMzEuMyA0Mi44IDU3LjkgMCAyMS44LTExLjcgNDEuOS0zMC43IDUyLjdsLTE0NC41IDgyLjEgOTIuNSA5Mi41IDUwLjcgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjQgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRMMzQ2LjkgMzYwLjJjMTEuNy0zNiAzLjItNzcuMS0yNS40LTEwNS43LTQwLjYtNDAuNi0xMDYuMy00MC42LTE0Ni45LS4xTDEwMSAzMjQuNGMtNi40IDYuMS02LjcgMTYuMi0uNiAyMi42czE2LjIgNi42IDIyLjYgLjZsNzMuOC03MC4yIC4xLS4xIC4xLS4xYzMuNS0zLjUgNy4zLTYuNiAxMS4zLTkuMiAyNy45LTE4LjUgNjUuOS0xNS40IDkwLjUgOS4yIDI0LjcgMjQuNyAyNy43IDYyLjkgOSA5MC45LTIuNiAzLjgtNS42IDcuNS05IDEwLjlMMjYxLjggNDE2IDM1MiA0MTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwQzI4LjcgNDgwIDAgNDUxLjMgMCA0MTYgMCAyNDkuNiAxMjcgMTEyLjkgMjg5LjMgOTcuNSAyOTYuMiA2MC4yIDMyOC44IDMyIDM2OCAzMnptMCAxMDRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFXaW5lQm90dGxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmUtYm90dGxlIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImY3MmYiLCAiTTgwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzIgMCAxMS44LTYuNCAyMi4yLTE2IDI3LjdsMCAxNDUuNmM1Ni41IDI0LjcgOTYgODEuMSA5NiAxNDYuN2wwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1NzZjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjg4YzAtNjUuNiAzOS41LTEyMiA5Ni0xNDYuN0w5Ni00LjNDODYuNC05LjggODAtMjAuMiA4MC0zMnpNOTYgMjg4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTEyOGMwLTE3LjctMTQuMy0zMi0zMi0zMkw5NiAyODh6Il0KICAgIH07CiAgICBmYUluYm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImluYm94IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwMWMiLCAiTTkxLjggMzJDNTkuOSAzMiAzMi45IDU1LjQgMjguNCA4Ni45TC42IDI4MS4yYy0uNCAzLS42IDYtLjYgOS4xTDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTI1LjdjMC0zLS4yLTYuMS0uNi05LjFMNDgzLjYgODYuOUM0NzkuMSA1NS40IDQ1Mi4xIDMyIDQyMC4yIDMyTDkxLjggMzJ6bTAgNjRsMzI4LjUgMCAyNy40IDE5Mi01OS45IDBjLTEyLjEgMC0yMy4yIDYuOC0yOC42IDE3LjdsLTE0LjMgMjguNmMtNS40IDEwLjgtMTYuNSAxNy43LTI4LjYgMTcuN2wtMTIwLjQgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN2wtMTQuMy0yOC42Yy01LjQtMTAuOC0xNi41LTE3LjctMjguNi0xNy43TDY0LjMgMjg4IDkxLjggOTZ6Il0KICAgIH07CiAgICBmYVNxdWFyZUggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLWgiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaC1zcXVhcmUiXSwgImYwZmQiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTMyMCAxNjhsMCAxNzZjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC02NC05NiAwIDAgNjRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNzZjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDY0IDk2IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFIU3F1YXJlID0gZmFTcXVhcmVIOwogICAgZmFIb3VzZU1lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbWVkaWNhbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlM2IyIiwgIk0yNzcuOCA4LjZjLTEyLjMtMTEuNC0zMS4zLTExLjQtNDMuNSAwbC0yMjQgMjA4Yy05LjYgOS0xMi44IDIyLjktOCAzNS4xUzE4LjggMjcyIDMyIDI3MmwxNiAwIDAgMTc2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDI4OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTc2IDE2IDBjMTMuMiAwIDI1LTguMSAyOS44LTIwLjNzMS42LTI2LjItOC0zNS4xbC0yMjQtMjA4ek0yMjQgMjQ4YzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDQwIDQwIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2bC00MCAwIDAgNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC00MC00MCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsNDAgMCAwLTQweiJdCiAgICB9OwogICAgZmFDaXJjbGVDaGV2cm9uUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tcmlnaHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiY2hldnJvbi1jaXJjbGUtcmlnaHQiXSwgImYxMzgiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDAgNTEyIDAgMjU2IDI1NiAwIDEgMCAtNTEyIDB6TTI0MSAzNzdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODctODctODctODdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMEwzNDUgMjM5YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45TDI0MSAzNzd6Il0KICAgIH07CiAgICBmYUNoZXZyb25DaXJjbGVSaWdodCA9IGZhQ2lyY2xlQ2hldnJvblJpZ2h0OwogICAgZmFGaWxlQ3N2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY3N2IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY2ZGQiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsODAgMCAwLTExMmMwLTM1LjMgMjguNy02NCA2NC02NGwxNzYgMCAwLTE2NS41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI5MC43IDE4LjdDMjc4LjcgNi43IDI2Mi41IDAgMjQ1LjUgMEw5NiAwek0zNTcuNSAxNzZMMjY0IDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjQwIDU4LjUgMzU3LjUgMTc2ek0yNjQgMzgwYy0yNC4zIDAtNDQgMTkuNy00NCA0NGwwIDgwYzAgMjQuMyAxOS43IDQ0IDQ0IDQ0bDE2IDBjMjQuMyAwIDQ0LTE5LjcgNDQtNDRsMC04YzAtMTEtOS0yMC0yMC0yMHMtMjAgOS0yMCAyMGwwIDhjMCAyLjItMS44IDQtNCA0bC0xNiAwYy0yLjIgMC00LTEuOC00LTRsMC04MGMwLTIuMiAxLjgtNCA0LTRsMTYgMGMyLjIgMCA0IDEuOCA0IDRsMCA4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtOGMwLTI0LjMtMTkuNy00NC00NC00NGwtMTYgMHptMTM2IDBjLTI4LjcgMC01MiAyMy4zLTUyIDUyczIzLjMgNTIgNTIgNTJjNi42IDAgMTIgNS40IDEyIDEycy01LjQgMTItMTIgMTJsLTMyIDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDMyIDBjMjguNyAwIDUyLTIzLjMgNTItNTJzLTIzLjMtNTItNTItNTJjLTYuNiAwLTEyLTUuNC0xMi0xMnM1LjQtMTIgMTItMTJsMjQgMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI0IDB6bTk2IDBjLTExIDAtMjAgOS0yMCAyMGwwIDMxLjZjMCAzNS41IDEwLjUgNzAuMyAzMC4yIDk5LjhsNS4xIDcuN2MzLjcgNS42IDEwIDguOSAxNi42IDguOXMxMi45LTMuMyAxNi42LTguOWw1LjEtNy43YzE5LjctMjkuNiAzMC4yLTY0LjMgMzAuMi05OS44bDAtMzEuNmMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjBsMCAzMS42YzAgMTkuNi00LjEgMzguOS0xMiA1Ni43LTcuOS0xNy44LTEyLTM3LjEtMTItNTYuN2wwLTMxLjZjMC0xMS05LTIwLTIwLTIweiJdCiAgICB9OwogICAgZmFIYXRDb3dib3kgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGF0LWNvd2JveSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmOGMwIiwgIk0xODIuMiA3Ni4xTDEzMC44IDMwNy41QzE0NS41IDMyNC45IDE2Ny40IDMzNiAxOTIgMzM2bDI1NiAwYzI0LjYgMCA0Ni41LTExLjEgNjEuMi0yOC41TDQ1Ny44IDc2LjFjLTUuNy0yNS44LTI4LjYtNDQuMS01NS00NC4xLTEyLjIgMC0yNC4xIDQtMzMuOCAxMS4zbC00LjcgMy41Yy0yNi4zIDE5LjctNjIuNCAxOS43LTg4LjYgMEwyNzEgNDMuM2MtOS44LTcuMy0yMS42LTExLjMtMzMuOC0xMS4zLTI2LjQgMC00OS4zIDE4LjMtNTUgNDQuMXpNNjQgMjU2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMjM4LjMgMCAyNTZDMCAzNjIgODYgNDQ4IDE5MiA0NDhsMjU2IDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTIgMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhsLTI1NiAwYy03MC43IDAtMTI4LTU3LjMtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5Ub25ndWVXaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tdG9uZ3VlLXdpbmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDAsICJncmluLXRvbmd1ZS13aW5rIl0sICJmNThiIiwgIk0xNTIuMiA0OTAuMUM2Mi41IDQ1MC4yIDAgMzYwLjQgMCAyNTYgMCAxMTQuNiAxMTQuNiAwIDI1NiAwUzUxMiAxMTQuNiA1MTIgMjU2YzAgMTA0LjQtNjIuNSAxOTQuMi0xNTIuMiAyMzQuMSA1LjMtMTMgOC4yLTI3LjIgOC4yLTQyLjFsMC02MS43YzE2LjktMTYuNSAzMC4xLTM2LjcgMzguMy01OS4zIDQuMy0xMS44LTcuNy0yMS44LTE5LjYtMTguMS0zOS4yIDEyLjItODMuNyAxOS4xLTEzMC43IDE5LjFzLTkxLjUtNi45LTEzMC43LTE5LjFjLTExLjktMy43LTIzLjkgNi4zLTE5LjYgMTguMSA4LjMgMjIuNiAyMS41IDQyLjggMzguMyA1OS4zbDAgNjEuN2MwIDE0LjkgMi45IDI5LjEgOC4yIDQyLjF6TTE1MiAyMTJsMTYgMGMxMSAwIDIwIDkgMjAgMjBzOSAyMCAyMCAyMCAyMC05IDIwLTIwYzAtMzMuMS0yNi45LTYwLTYwLTYwbC0xNiAwYy0zMy4xIDAtNjAgMjYuOS02MCA2MCAwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMCA5LTIwIDIwLTIwem0xODQgNjBhNjQgNjQgMCAxIDAgMC0xMjggNjQgNjQgMCAxIDAgMCAxMjh6TTMyMCA0MDIuNmwwIDQ1LjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRzLTY0LTI4LjctNjQtNjRsMC00NS40YzAtMTQuNyAxMS45LTI2LjYgMjYuNi0yNi42bDIgMGMxMS4zIDAgMjEuMSA3LjkgMjMuNiAxOC45IDIuOCAxMi42IDIwLjggMTIuNiAyMy42IDAgMi41LTExLjEgMTIuMy0xOC45IDIzLjYtMTguOWwyIDBjMTQuNyAwIDI2LjYgMTEuOSAyNi42IDI2LjZ6TTMzNiAxODRhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFHcmluVG9uZ3VlV2luazIgPSBmYUZhY2VHcmluVG9uZ3VlV2luazI7CiAgICBmYUwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwOF0sICI0YyIsICJNNjQgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzNTIgMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMkwzMiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duU2hvcnRXaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tc2hvcnQtd2lkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC1kZXNjIiwgInNvcnQtYW1vdW50LWRvd24tYWx0Il0sICJmODg0IiwgIk0yNDYuNiAzNzQuNmwtOTYgOTZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTMyMCAzMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyem0wIDEyOGwxNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYwIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJ6bTAgMTI4bDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhU29ydEFtb3VudERlc2MgPSBmYUFycm93RG93blNob3J0V2lkZTsKICAgIGZhU29ydEFtb3VudERvd25BbHQgPSBmYUFycm93RG93blNob3J0V2lkZTsKICAgIGZhSG91cmdsYXNzSGFsZjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91cmdsYXNzLWhhbGYiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiaG91cmdsYXNzLTIiXSwgImYyNTIiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAxOS01LjYgMzcuNC0xNiA1M0wxMTIgMTI4Yy0xMC4zLTE1LjYtMTYtMzQtMTYtNTN6bTE2IDMwOWMzLjUtNS4zIDcuNi0xMC4zIDEyLjEtMTQuOWw2Ny45LTY3LjkgNjcuOSA2Ny45YzQuNiA0LjYgOC42IDkuNiAxMi4yIDE0LjlMMTEyIDM4NHoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzMjIgPSBmYUhvdXJnbGFzc0hhbGYyOwogICAgZmFTcG9vbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcG9vbiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTM0OCwgNjE4NzMsICJ1dGVuc2lsLXNwb29uIl0sICJmMmU1IiwgIk0yNDUuOCAyMjAuOWMtMTQuNS0xNy42LTIxLjgtMzkuMi0yMS44LTYwLjggMC04MC4yIDk2LTE2MC4yIDE5Mi0xNjAuMiA1MyAwIDk2IDQzIDk2IDk2IDAgOTYtODAgMTkyLTE2MC4yIDE5Mi0yMS42IDAtNDMuMi03LjMtNjAuOC0yMS44TDU0LjYgNTAyLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zTDI0NS44IDIyMC45eiJdCiAgICB9OwogICAgZmFVdGVuc2lsU3Bvb24gPSBmYVNwb29uOwogICAgZmFDcmVkaXRDYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjcmVkaXQtY2FyZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODE3OSwgNjIwODMsICJjcmVkaXQtY2FyZC1hbHQiXSwgImYwOWQiLCAiTTAgMTI4bDAgMzIgNTEyIDAgMC0zMmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOHptMCA4MEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE3Ni01MTIgMHpNNjQgMzYwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xNDQgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQ3JlZGl0Q2FyZEFsdDIgPSBmYUNyZWRpdENhcmQyOwogICAgZmFGaWxlSW52b2ljZURvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWludm9pY2UtZG9sbGFyIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NzEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek02NCA4OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHptMCA5NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMTEyIDc2bDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDE1MiA0MDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjBzLTIwIDktMjAgMjB6Il0KICAgIH07CiAgICBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3BhZ2hldHRpLW1vbnN0ZXItZmx5aW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInBhc3RhZmFyaWFuaXNtIl0sICJmNjdiIiwgIk0yMDggNjRhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHptNDggMGMwIDE2LjItNiAzMS4xLTE2IDQyLjNsMTUuNiAzMS4yYzE4LjctNiAzOS45LTkuNSA2NC40LTkuNXM0NS44IDMuNSA2NC40IDkuNUw0MDAgMTA2LjNjLTEwLTExLjMtMTYtMjYuMS0xNi00Mi4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjQtMjguNyA2NC02NCA2NGMtMS43IDAtMy40LS4xLTUuMS0uMkw0MjcuOCAxNThjMjEuMSAxMy42IDM3LjcgMzAuMiA1MS40IDQ2LjQgNy4xIDguMyAxMy41IDE2LjYgMTkuMyAyNGwxLjQgMS44YzYuMyA4LjEgMTEuNiAxNC44IDE2LjcgMjAuNCAxMC43IDExLjcgMTYuMSAxMy40IDE5LjQgMTMuNCAyLjUgMCA0LjMtLjYgNy4xLTMuMyAzLjctMy41IDcuMS04LjggMTIuNS0xNy40bC42LS45YzQuNi03LjQgMTEtMTcuNiAxOS40LTI1LjcgOS43LTkuMyAyMi45LTE2LjcgNDAuNC0xNi43IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yLjUgMC00LjMgLjYtNy4xIDMuMy0zLjcgMy41LTcuMSA4LjgtMTIuNSAxNy40bC0uNiAuOWMtNC42IDcuNC0xMSAxNy42LTE5LjQgMjUuNy05LjcgOS4zLTIyLjkgMTYuNy00MC40IDE2LjctMTguNSAwLTMyLjktOC41LTQ0LjMtMTguNi0zLjEgNC02LjYgOC4zLTEwLjUgMTIuNyAxLjQgNC4zIDIuOCA4LjUgNCAxMi41IC45IDMgMS44IDUuOCAyLjYgOC42IDMgOS44IDUuNSAxOC4yIDguNiAyNS45IDMuOSA5LjggNy40IDE1LjQgMTAuOCAxOC41IDIuNiAyLjQgNS45IDQuMyAxMi44IDQuMyA4LjcgMCAxNi45LTQuMiAzMy43LTEzLjIgMTUtOCAzNS43LTE4LjggNjIuMy0xOC44IDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0xMy40IDAtMjQuNyA1LjItMzkuNyAxMy4yLTEgLjYtMi4xIDEuMS0zLjIgMS43LTEzLjEgNy4xLTMxLjYgMTcuMS01My4xIDE3LjEtMTguNCAwLTMzLjYtNi4xLTQ1LjUtMTcuMi0xMS4xLTEwLjMtMTcuOS0yMy43LTIyLjctMzYtMy42LTktNi43LTE5LjEtOS41LTI4LjUtMTYuNCAxMi4zLTM2LjEgMjMuNi01OC45IDMxLjMgMy42IDEwLjggOC40IDIzLjUgMTQuNCAzNi4yIDcuNSAxNS45IDE2LjIgMzAuNCAyNS44IDQwLjUgOS42IDEwLjIgMTcuNyAxMy43IDI0LjUgMTMuNyAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjUuMiAwLTQ1LTEzLjUtNTkuNS0yOC44LTE0LjUtMTUuNC0yNS43LTM0LjktMzQuMi01My04LTE3LTE0LjEtMzMuOC0xOC4zLTQ2LjktNS4yIC40LTEwLjYgLjYtMTYgLjZzLTEwLjgtLjItMTYtLjZjLTQuMiAxMy0xMC4zIDI5LjktMTguMyA0Ni45LTguNSAxOC4xLTE5LjggMzcuNi0zNC4yIDUzLTE0LjQgMTUuMy0zNC4zIDI4LjgtNTkuNSAyOC44LTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRjNi44IDAgMTUtMy41IDI0LjUtMTMuNyA5LjUtMTAuMSAxOC4zLTI0LjYgMjUuOC00MC41IDUuOS0xMi42IDEwLjctMjUuNCAxNC40LTM2LjItMjIuOC03LjctNDIuNS0xOS01OC45LTMxLjMtMi45IDkuNC02IDE5LjUtOS41IDI4LjUtNC44IDEyLjItMTEuNiAyNS42LTIyLjcgMzYtMTEuOSAxMS4xLTI3LjEgMTcuMi00NS41IDE3LjItMTMuMSAwLTI0LjUtNC4xLTMzLjgtOC45LTcuOS00LTE1LjctOS4yLTIyLjEtMTMuNWwwIDAtMi40LTEuNmMtMTUuMy0xMC4yLTI1LjgtMTYtMzcuNy0xNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjEgMCA0OS42IDE0LjIgNjQuMyAyNGwyLjQgMS42YzYuOSA0LjYgMTIuMSA4LjEgMTcuMiAxMC43IDUuNSAyLjggOS4xIDMuNiAxMiAzLjYgNi44IDAgMTAuMi0xLjkgMTIuOC00LjMgMy40LTMuMiA3LTguOCAxMC44LTE4LjUgMy03LjcgNS42LTE2LjEgOC42LTI1LjkgLjgtMi43IDEuNy01LjYgMi42LTguNiAxLjItNCAyLjYtOC4yIDQtMTIuNS0zLjktNC41LTcuNC04LjgtMTAuNS0xMi43LTExLjQgMTAuMS0yNS45IDE4LjYtNDQuMyAxOC42LTE3LjUgMC0zMC43LTcuNC00MC40LTE2LjctOC40LTguMS0xNC44LTE4LjMtMTkuNC0yNS43bC0uNi0uOWMtNS40LTguNi04LjgtMTMuOS0xMi41LTE3LjQtMi44LTIuNy00LjYtMy4zLTcuMS0zLjMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMxNy41IDAgMzAuNyA3LjQgNDAuNCAxNi43IDguNCA4LjEgMTQuOCAxOC4zIDE5LjQgMjUuN2wuNiAuOWM1LjQgOC42IDguOCAxMy45IDEyLjUgMTcuNCAyLjggMi43IDQuNiAzLjMgNy4xIDMuMyAzLjMgMCA4LjctMS43IDE5LjQtMTMuNCA1LjEtNS42IDEwLjQtMTIuMyAxNi43LTIwLjRsMS40LTEuOGM1LjgtNy40IDEyLjItMTUuNyAxOS4zLTI0IDEzLjgtMTYuMiAzMC4zLTMyLjggNTEuNC00Ni40bC0xNS4xLTMwLjJjLTEuNyAuMS0zLjQgLjItNS4xIC4yLTM1LjMgMC02NC0yOC43LTY0LTY0czI4LjctNjQgNjQtNjQgNjQgMjguNyA2NCA2NHptMjA4IDBhMTYgMTYgMCAxIDAgLTMyIDAgMTYgMTYgMCAxIDAgMzIgMHoiXQogICAgfTsKICAgIGZhUGFzdGFmYXJpYW5pc20gPSBmYVNwYWdoZXR0aU1vbnN0ZXJGbHlpbmc7CiAgICBmYU1hcnRpbmlHbGFzc0NpdHJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXJ0aW5pLWdsYXNzLWNpdHJ1cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJjb2NrdGFpbCJdLCAiZjU2MSIsICJNNTc2IDgwYzAtNDQuMi0zNS44LTgwLTgwLTgwLTE4IDAtMzQuNiA2LTQ4IDE2bC04MSAwYzIzLjYtNDcuNCA3Mi41LTgwIDEyOS04MCA3OS41IDAgMTQ0IDY0LjUgMTQ0IDE0NFM1NzUuNSAyMjQgNDk2IDIyNGMtNi41IDAtMTMtLjQtMTkuMy0xLjNsNjQtNzQuN2MxLjEtMS4zIDIuMi0yLjcgMy4zLTQuMSAxOS40LTE0LjYgMzItMzcuOCAzMi02NHpNNjYuOSA4Mi42QzcyLjIgNzEuMyA4My41IDY0IDk2IDY0bDM4NCAwYzEyLjUgMCAyMy44IDcuMyAyOS4xIDE4LjZzMy40IDI0LjctNC44IDM0LjJsLTE4NC4zIDIxNSAwIDExNi4yIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDAgMC0xMTYuMi0xODQuMy0yMTVjLTguMS05LjUtMTAtMjIuOC00LjgtMzQuMnpNMTY1LjYgMTI4TDI4OCAyNzAuOCA0MTAuNCAxMjggMTY1LjYgMTI4eiJdCiAgICB9OwogICAgZmFDb2NrdGFpbCA9IGZhTWFydGluaUdsYXNzQ2l0cnVzOwogICAgZmFCdWxsaG9ybiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWxsaG9ybiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyNiwgMTI4MzYzXSwgImYwYTEiLCAiTTQ2MS4yIDE4LjlDNDcyLjcgMjQgNDgwIDM1LjQgNDgwIDQ4bDAgNDE2YzAgMTIuNi03LjMgMjQtMTguOCAyOS4xcy0yNC44IDMuMi0zNC4zLTUuMWwtNDYuNi00MC43Yy00My42LTM4LjEtOTguNy02MC4zLTE1Ni40LTYzbDAgOTUuN2MwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NkM1Ny4zIDM4NCAwIDMyNi43IDAgMjU2UzU3LjMgMTI4IDEyOCAxMjhsODQuNSAwYzYxLjgtLjIgMTIxLjQtMjIuNyAxNjcuOS02My4zbDQ2LjYtNDAuN2M5LjQtOC4zIDIyLjktMTAuMiAzNC4zLTUuMXpNMjI0IDMyMGwwIC4yYzcwLjMgMi43IDEzNy44IDI4LjUgMTkyIDczLjRsMC0yNzUuM2MtNTQuMiA0NC45LTEyMS43IDcwLjctMTkyIDczLjRMMjI0IDMyMHoiXQogICAgfTsKICAgIGZhQm94VGlzc3VlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC10aXNzdWUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA1YiIsICJNMTAzLjkgMzJsMTYxIDBjMTMuOCAwIDI2IDguOCAzMC40IDIxLjlsMTcuNCA1Mi4yYzQuNCAxMy4xIDE2LjYgMjEuOSAzMC40IDIxLjlsNjAuNSAwYzIxLjggMCAzNy4zIDIxLjQgMzAuNCA0Mi4xTDM4NCAzMjAgMTI4IDMyMCA3Mi43IDcwLjlDNjguMiA1MSA4My40IDMyIDEwMy45IDMyek00OCAyNTZsMTYuNiAwIDE2LjUgNzQuNEM4NiAzNTIuNCAxMDUuNSAzNjggMTI4IDM2OGwyNTYgMGMyMC43IDAgMzktMTMuMiA0NS41LTMyLjhsMjYuNC03OS4yIDguMSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDQ4IDQ4MGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCAzMDRjMC0yNi41IDIxLjUtNDggNDgtNDh6Il0KICAgIH07CiAgICBmYU1hdHRyZXNzUGlsbG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1hdHRyZXNzLXBpbGxvdyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTI1IiwgIk0yNTYgNjRMNjQgNjRDMjguNyA2NCAwIDkyLjcgMCAxMjhMMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDAgMC0zODR6bTQ4IDM4NGwyMDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NGwtMjA4IDAgMCAzODR6TTY0IDE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMmw2NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE5MnoiXQogICAgfTsKICAgIGZhQ2hldnJvbkxlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hldnJvbi1sZWZ0IiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbOTAwMV0sICJmMDUzIiwgIk05LjQgMjMzLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zbDE5MiAxOTJjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM0w3Ny4zIDI1NiAyNDYuNiA4Ni42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xOTIgMTkyeiJdCiAgICB9OwogICAgZmFDbG91ZE1vb25SYWluID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLW1vb24tcmFpbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNzNjIiwgIk00NDggMGMtNjguNiAwLTEyNy4xIDQzLjEtMTQ5LjggMTAzLjggMTcuMSAxNC4xIDI5LjYgMzMuNSAzNC45IDU1LjggMzkuOSAyMS43IDY2LjkgNjMuOSA2Ni45IDExMi41IDAgMTMuNS0yLjEgMjYuNS01LjkgMzguNyAxNi45IDYgMzUgOS4zIDUzLjkgOS4zIDQzIDAgODIuMS0xNyAxMTAuOC00NC42IDQuNi00LjQgNS45LTExLjIgMy4zLTE3cy04LjYtOS4zLTE0LjktOC44Yy0zIC4yLTYuMSAuNC05LjIgLjQtNjMuNSAwLTExNS01MS41LTExNS0xMTUgMC00NS4xIDI2LTg0LjIgNjMuOC0xMDMgNS43LTIuOCA5LTguOSA4LjItMTUuMlM0ODkuNiA1LjMgNDgzLjQgMy45QzQ3MiAxLjQgNDYwLjIgMCA0NDggMHpNMjcyIDM1MmM0NC4yIDAgODAtMzUuOCA4MC04MCAwLTM5LTI3LjktNzEuNS02NC44LTc4LjYgLjUtMy4xIC44LTYuMiAuOC05LjQgMC0zMC45LTI1LjEtNTYtNTYtNTYtMTIuNCAwLTIzLjkgNC0zMy4xIDEwLjgtMTMuNC0yNS41LTQwLjEtNDIuOC03MC45LTQyLjgtNDQuMiAwLTgwIDM1LjgtODAgODAgMCA3LjQgMSAxNC42IDIuOSAyMS41LTI5LjggMTEuNi01MC45IDQwLjYtNTAuOSA3NC41IDAgNDQuMiAzNS44IDgwIDgwIDgwbDE5MiAwek02OSA0MDEuMWMtMTIuNi00LjItMjYuMiAyLjYtMzAuNCAxNS4yTDE3LjIgNDgwLjRDMTMgNDkzIDE5LjggNTA2LjYgMzIuNCA1MTAuOHMyNi4yLTIuNiAzMC40LTE1LjJsMjEuNC02NC4xYzQuMi0xMi42LTIuNi0yNi4yLTE1LjItMzAuNHptMTIwIDBjLTEyLjYtNC4yLTI2LjIgMi42LTMwLjQgMTUuMmwtMjEuNCA2NC4xYy00LjIgMTIuNiAyLjYgMjYuMiAxNS4yIDMwLjRzMjYuMi0yLjYgMzAuNC0xNS4ybDIxLjQtNjQuMWM0LjItMTIuNi0yLjYtMjYuMi0xNS4yLTMwLjR6bTEyMCAwYy0xMi42LTQuMi0yNi4yIDIuNi0zMC40IDE1LjJsLTIxLjQgNjQuMWMtNC4yIDEyLjYgMi42IDI2LjIgMTUuMiAzMC40czI2LjItMi42IDMwLjQtMTUuMmwyMS40LTY0LjFjNC4yLTEyLjYtMi42LTI2LjItMTUuMi0zMC40eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd24xOSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLTEtOSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtYXNjIiwgInNvcnQtbnVtZXJpYy1kb3duIl0sICJmMTYyIiwgIk00MTguNyAzOGM4LjMgNiAxMy4zIDE1LjcgMTMuMyAyNmwwIDk2IDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTYgMCAwLTUxLjYtNS45IDJjLTE2LjggNS42LTM0LjktMy41LTQwLjUtMjAuMnMzLjUtMzQuOSAyMC4yLTQwLjVsNDgtMTZjOS44LTMuMyAyMC41LTEuNiAyOC44IDQuNHpNMzY1LjEgNDMwLjZsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAzMzZhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMTUwLjYgNDcwLjZjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2eiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY0FzYyA9IGZhQXJyb3dEb3duMTk7CiAgICBmYVNvcnROdW1lcmljRG93biA9IGZhQXJyb3dEb3duMTk7CiAgICBmYUhhbmRTcG9jazIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1zcG9jayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQwNl0sICJmMjU5IiwgIk0yMTQuOSAyMy43QzIxMC4zIDYuNiAxOTIuOC0zLjUgMTc1LjcgMS4xcy0yNy4yIDIyLjEtMjIuNiAzOS4yTDIwNiAyMzcuOGMyLjUgOS4yLTQuNSAxOC4yLTE0IDE4LjItNi40IDAtMTItNC4yLTEzLjktMTAuM0wxMzQuNiAxMDIuN2MtNS4xLTE2LjktMjMtMjYuNC0zOS45LTIxLjNzLTI2LjQgMjMtMjEuMyAzOS45bDYyLjggMjA2LjRjMi40IDcuOS03LjIgMTMuOC0xMy4yIDguMUw2Ny42IDI4M2MtMTYtMTUuMi00MS4zLTE0LjYtNTYuNiAxLjRTLTMuNiAzMjUuNyAxMi40IDM0MUwxMjQuOCA0NDhjNDMuMSA0MS4xIDEwMC40IDY0IDE2MCA2NGwxOS4xIDBjLjEgMCAuMS0uMSAuMS0uMXMuMS0uMSAuMS0uMWM1OC4zLTMuNSAxMDguNi00My4yIDEyNS4zLTk5LjdsODEuMi0yNzVjNS0xNi45LTQuNy0zNC43LTIxLjYtMzkuOHMtMzQuNyA0LjctMzkuOCAyMS42TDQxMS41IDI0Ny4xYy0xLjYgNS4zLTYuNCA4LjktMTIgOC45LTcuOSAwLTEzLjgtNy4zLTEyLjItMTUuMWwzNi0xNzAuM2MzLjctMTcuMy03LjQtMzQuMy0yNC43LTM3LjlzLTM0LjMgNy40LTM3LjkgMjQuN0wzMjMuMSAyMzUuMWMtMi42IDEyLjItMTMuMyAyMC45LTI1LjggMjAuOS0xMS45IDAtMjIuNC04LTI1LjQtMTkuNWwtNTctMjEyLjh6Il0KICAgIH07CiAgICBmYVdhbmRNYWdpY1NwYXJrbGVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndhbmQtbWFnaWMtc3BhcmtsZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibWFnaWMtd2FuZC1zcGFya2xlcyJdLCAiZTJjYSIsICJNMjYzLjQtMjdMMjc4LjIgOS44IDMxNSAyNC42YzMgMS4yIDUgNC4yIDUgNy40cy0yIDYuMi01IDcuNEwyNzguMiA1NC4yIDI2My40IDkxYy0xLjIgMy00LjIgNS03LjQgNXMtNi4yLTItNy40LTVMMjMzLjggNTQuMiAxOTcgMzkuNGMtMy0xLjItNS00LjItNS03LjRzMi02LjIgNS03LjRMMjMzLjggOS44IDI0OC42LTI3YzEuMi0zIDQuMi01IDcuNC01czYuMiAyIDcuNCA1ek0xMTAuNyA0MS43bDIxLjUgNTAuMSA1MC4xIDIxLjVjNS45IDIuNSA5LjcgOC4zIDkuNyAxNC43cy0zLjggMTIuMi05LjcgMTQuN2wtNTAuMSAyMS41LTIxLjUgNTAuMWMtMi41IDUuOS04LjMgOS43LTE0LjcgOS43cy0xMi4yLTMuOC0xNC43LTkuN0w1OS44IDE2NC4yIDkuNyAxNDIuN0MzLjggMTQwLjIgMCAxMzQuNCAwIDEyOHMzLjgtMTIuMiA5LjctMTQuN0w1OS44IDkxLjggODEuMyA0MS43QzgzLjggMzUuOCA4OS42IDMyIDk2IDMyczEyLjIgMy44IDE0LjcgOS43ek00NjQgMzA0YzYuNCAwIDEyLjIgMy44IDE0LjcgOS43bDIxLjUgNTAuMSA1MC4xIDIxLjVjNS45IDIuNSA5LjcgOC4zIDkuNyAxNC43cy0zLjggMTIuMi05LjcgMTQuN2wtNTAuMSAyMS41LTIxLjUgNTAuMWMtMi41IDUuOS04LjMgOS43LTE0LjcgOS43cy0xMi4yLTMuOC0xNC43LTkuN2wtMjEuNS01MC4xLTUwLjEtMjEuNWMtNS45LTIuNS05LjctOC4zLTkuNy0xNC43czMuOC0xMi4yIDkuNy0xNC43bDUwLjEtMjEuNSAyMS41LTUwLjFjMi41LTUuOSA4LjMtOS43IDE0LjctOS43ek00NjAgMGMxMSAwIDIxLjYgNC40IDI5LjUgMTIuMmw0Mi4zIDQyLjNDNTM5LjYgNjIuNCA1NDQgNzMgNTQ0IDg0cy00LjQgMjEuNi0xMi4yIDI5LjVsLTg4LjIgODguMi0xMDEuMy0xMDEuMyA4OC4yLTg4LjJDNDM4LjQgNC40IDQ0OSAwIDQ2MCAwek00NC4yIDM5OC41TDMwOC40IDEzNC4zIDQwOS43IDIzNS42IDE0NS41IDQ5OS44QzEzNy42IDUwNy42IDEyNyA1MTIgMTE2IDUxMnMtMjEuNi00LjQtMjkuNS0xMi4yTDQ0LjIgNDU3LjVDMzYuNCA0NDkuNiAzMiA0MzkgMzIgNDI4czQuNC0yMS42IDEyLjItMjkuNXoiXQogICAgfTsKICAgIGZhTWFnaWNXYW5kU3BhcmtsZXMgPSBmYVdhbmRNYWdpY1NwYXJrbGVzOwogICAgZmFDb21tZW50TWVkaWNhbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21tZW50LW1lZGljYWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjdmNSIsICJNMjU2IDQ4MGMxNDEuNCAwIDI1Ni0xMDcuNSAyNTYtMjQwUzM5Ny40IDAgMjU2IDAgMCAxMDcuNSAwIDI0MGMwIDU0LjMgMTkuMiAxMDQuMyA1MS42IDE0NC41TDIuOCA0NzYuOGMtNC44IDktMy4zIDIwIDMuNiAyNy41czE3LjggOS44IDI3LjEgNS44bDExOC40LTUwLjdDMTgzLjcgNDcyLjYgMjE4LjkgNDgwIDI1NiA0ODB6TTIxNy42IDE1My42YzAtMTAuNiA4LjYtMTkuMiAxOS4yLTE5LjJsMzguNCAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjJsMCA0OCA0OCAwYzEwLjYgMCAxOS4yIDguNiAxOS4yIDE5LjJsMCAzOC40YzAgMTAuNi04LjYgMTkuMi0xOS4yIDE5LjJsLTQ4IDAgMCA0OGMwIDEwLjYtOC42IDE5LjItMTkuMiAxOS4ybC0zOC40IDBjLTEwLjYgMC0xOS4yLTguNi0xOS4yLTE5LjJsMC00OC00OCAwYy0xMC42IDAtMTkuMi04LjYtMTkuMi0xOS4ybDAtMzguNGMwLTEwLjYgOC42LTE5LjIgMTkuMi0xOS4ybDQ4IDAgMC00OHoiXQogICAgfTsKICAgIGZhQmVsbFNsYXNoMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWxsLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4Mjc3LCA2MTk0M10sICJmMWY2IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC04Ny41LTg3LjVjMTcuMi0yLjQgMzAuNS0xNy4zIDMwLjUtMzUuMiAwLTguMS0yLjctMTUuOS03LjgtMjIuMmwtOS44LTEyLjJDNDY0LjQgMzA4LjUgNDQ4IDI2MS44IDQ0OCAyMTMuN2wwLTIxLjdjMC03Ny40LTU1LTE0Mi0xMjgtMTU2LjhsMC0zLjJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAzLjJjLTM4LjYgNy44LTcyLjIgMjkuNi05NS4yIDU5LjdMNDEtMjQuOXptODcgMjM4LjVjMCA0OC4xLTE2LjQgOTQuOC00Ni40IDEzMi40bC05LjggMTIuMmMtNSA2LjMtNy44IDE0LjEtNy44IDIyLjIgMCAxOS42IDE1LjkgMzUuNSAzNS41IDM1LjVsMjM1LjMgMC0yMDYuOS0yMDYuOSAwIDQuNXpNMjg4IDUxMmMyOS44IDAgNTQuOS0yMC40IDYyLTQ4bC0xMjQgMGM3LjEgMjcuNiAzMi4yIDQ4IDYyIDQ4eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kc2hha2Utc2xhc2giLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs1NzQzOSwgImhhbmRzaGFrZS1hbHQtc2xhc2giLCAiaGFuZHNoYWtlLXNpbXBsZS1zbGFzaCJdLCAiZTA2MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtMjg4LTI4OCAxNC4yLTE0LjJjNC4yLTQuMiA5LjUtNi41IDE0LjktNi45IDYuOC0uNiAxMy44IDEuNyAxOSA2LjlMNTA1LjYgMzc2IDU3NiAzMjAgNTc2IDMyIDQ2NCA5NiA0NDAuMiA4MC4xQzQyNC40IDY5LjYgNDA1LjkgNjQgMzg2LjkgNjRsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xbC01NS44IDYyLjEtMzQtMzQgNDQuMy00OS4yLTM5LjcgMGMtMTUuMyAwLTMwLjEgMy42LTQzLjUgMTAuNEw0MS0yNC45ek0wIDY5LjhMMCAzMjAgMTU2LjQgNDUwLjNjMjMgMTkuMiA1MiAyOS43IDgxLjkgMjkuN2wxNS43IDAtNy03Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNDEgNDEgOSAwYzIyLjIgMCA0My44LTUuOCA2Mi44LTE2LjRMMCA2OS44eiJdCiAgICB9OwogICAgZmFIYW5kc2hha2VBbHRTbGFzaCA9IGZhSGFuZHNoYWtlU2xhc2g7CiAgICBmYUhhbmRzaGFrZVNpbXBsZVNsYXNoID0gZmFIYW5kc2hha2VTbGFzaDsKICAgIGZhQm90dGxlV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm90dGxlLXdhdGVyIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImU0YzUiLCAiTTExMi0zMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwQzk0LjMgMzIgODAgMTcuNyA4MCAwczE0LjMtMzIgMzItMzJ6TTE2IDE0NGMwLTM1LjMgMjguNy02NCA2NC02NGwxNjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NCAwIDI0LjEtMTMuMyA0NS4xLTMzIDU2IDE5LjcgMTAuOSAzMyAzMS45IDMzIDU2cy0xMy4zIDQ1LjEtMzMgNTZjMTkuNyAxMC45IDMzIDMxLjkgMzMgNTZzLTEzLjMgNDUuMS0zMyA1NmMxOS43IDEwLjkgMzMgMzEuOSAzMyA1NiAwIDM1LjMtMjguNyA2NC02NCA2NEw4MCA1NDRjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjQuMSAxMy4zLTQ1LjEgMzMtNTYtMTkuNy0xMC45LTMzLTMxLjktMzMtNTZzMTMuMy00NS4xIDMzLTU2Yy0xOS43LTEwLjktMzMtMzEuOS0zMy01NnMxMy4zLTQ1LjEgMzMtNTZjLTE5LjctMTAuOS0zMy0zMS45LTMzLTU2eiJdCiAgICB9OwogICAgZmFEaWNlRDIwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UtZDIwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2Y2YiLCAiTTIyNC40LTguMmMxOS42LTExLjEgNDMuNi0xMS4xIDYzLjEgMGwxOTIgMTA4LjhjMjAgMTEuNCAzMi40IDMyLjYgMzIuNCA1NS43bDAgMjE1LjZjMCAyMy0xMi40IDQ0LjMtMzIuNCA1NS43bC0xOTIgMTA4LjhjLTE5LjYgMTEuMS00My42IDExLjEtNjMuMSAwTDMyLjQgNDI3LjVDMTIuNCA0MTYuMSAwIDM5NC44IDAgMzcxLjhMMCAxNTYuMmMwLTIzIDEyLjQtNDQuMyAzMi40LTU1LjdMMjI0LjQtOC4yem01MiA3My4yQzI2NyA0OS44IDI0NSA0OS44IDIzNS42IDY1bC03Ni42IDEyMy43LTg1LjQtNDYuMy0zLjgtMS42Yy04LjktMi43LTE4LjggMS4xLTIzLjQgOS42cy0yLjQgMTguOSA0LjcgMjQuOGwzLjMgMi4zIDgzLjQgNDUuMi03NC42IDEyMC42QzU1LjMgMzU2LjIgNjEgMzczIDc1IDM3OC40bDE2MSA2MS45IDAgMzkuN2MwIDExIDkgMjAgMjAgMjBzMjAtOSAyMC0yMGwwLTM5LjcgMTYxLTYxLjljMTQtNS40IDE5LjctMjIuMiAxMS44LTM1bC03NC43LTEyMC42IDgzLjQtNDUuMmM5LjctNS4zIDEzLjMtMTcuNCA4LjEtMjcuMXMtMTcuNC0xMy4zLTI3LjEtOC4xTDM1MyAxODguNyAyNzYuNCA2NXptLTQ3IDMyOS45bC0xMjItNDYuOSA1NC41LTg4LjEgNjcuNSAxMzV6TTQwNC42IDM0OGwtMTIyIDQ2LjkgNjcuNS0xMzUgNTQuNSA4OC4xek0zMTkuMyAyMzJMMjU2IDM1OC42IDE5Mi43IDIzMiAzMTkuMyAyMzJ6TTMwOCAxOTJsLTEwNC4xIDAgNTItODQgNTIgODR6Il0KICAgIH07CiAgICBmYUFycm93RG93blpBID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tei1hIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtYWxwaGEtZGVzYyIsICJzb3J0LWFscGhhLWRvd24tYWx0Il0sICJmODgxIiwgIk0yMzAuNiAzOTAuNmwtODAgODBjLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwbC04MC04MGMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNzMzIuOC0xMi41IDQ1LjMgMEw5NiAzNzAuNyA5NiA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzA2LjcgMjUuNC0yNS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjN6TTI4OCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDM5Ny4zIDE2MCA0NDggMTYwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlMMzcwLjggOTYgMzIwIDk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNDEyLjYgMjczLjdsODAgMTYwYzcuOSAxNS44IDEuNSAzNS0xNC4zIDQyLjlzLTM1IDEuNS00Mi45LTE0LjNsLTcuMi0xNC4zLTg4LjQgMC03LjIgMTQuM2MtNy45IDE1LjgtMjcuMSAyMi4yLTQyLjkgMTQuM3MtMjIuMi0yNy4xLTE0LjMtNDIuOWw4MC0xNjBjNS40LTEwLjggMTYuNS0xNy43IDI4LjYtMTcuN3MyMy4yIDYuOCAyOC42IDE3Ljd6TTM4NCAzNTkuNmwtMjAuMiA0MC40IDQwLjQgMC0yMC4yLTQwLjR6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYURlc2MgPSBmYUFycm93RG93blpBOwogICAgZmFTb3J0QWxwaGFEb3duQWx0ID0gZmFBcnJvd0Rvd25aQTsKICAgIGZhQnJ1c2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnJ1c2giLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU1ZCIsICJNMTYyLjQgNmMtMS41LTMuNi01LTYtOC45LTZsLTE5IDBjLTMuOSAwLTcuNSAyLjQtOC45IDZMMTA0LjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEw2Ni40IDZjLTEuNS0zLjYtNS02LTguOS02TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4bDAgMjA4IDM4NCAwIDAtMjA4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDIzMC41IDBjLTMuOSAwLTcuNSAyLjQtOC45IDZMMjAwLjkgNTcuN2MtMy4yIDgtMTQuNiA4LTE3LjggMEwxNjIuNCA2ek0wIDMwNGwwIDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDY0IDAgMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0bDAtNjQgNjQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE2LTM4NCAwek0xOTIgNDY0Yy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2IDE2IDcuMiAxNiAxNi03LjIgMTYtMTYgMTZ6Il0KICAgIH07CiAgICBmYVBlcnNvbldhbGtpbmdEYXNoZWRMaW5lQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24td2Fsa2luZy1kYXNoZWQtbGluZS1hcnJvdy1yaWdodCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTUzIiwgIk0xNjAgODBhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6TTczLjQgMjI3LjlsMjIuNi0yMi42IDAgNjkuM2MwIDI4IDEyLjIgNTQuNyAzMy41IDcyLjlsNzEuNCA2MS4yYzUuOSA1LjEgOS44IDEyLjEgMTAuOSAxOS44bDEyLjYgODguMWMyLjUgMTcuNSAxOC43IDI5LjcgMzYuMiAyNy4yczI5LjctMTguNyAyNy4yLTM2LjJsLTEyLjYtODguMWMtMy4zLTIzLjEtMTQuOS00NC4xLTMyLjYtNTkuM2wtMzQuNS0yOS42IDAtMTE1LjIgMy44IDQuN2MxOC4yIDIyLjggNDUuOCAzNiA3NSAzNmwzMy4yIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMzLjIgMGMtOS43IDAtMTguOS00LjQtMjUtMTJsLTE3LjktMjIuNGMtMjMtMjguOC01Ny45LTQ1LjYtOTQuOC00NS42LTMyLjIgMC02My4xIDEyLjgtODUuOCAzNS42TDI4LjEgMTgyLjZDMTAuMSAyMDAuNiAwIDIyNSAwIDI1MC41TDAgMjg4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNy41YzAtOC41IDMuNC0xNi42IDkuNC0yMi42ek04NS44IDQwNy4zYy0xLjUgNS4yLTQuMyAxMC04LjEgMTMuOEw5LjQgNDg5LjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBsNjguMy02OC4zYzExLjUtMTEuNSAxOS45LTI1LjggMjQuNC00MS41bDIuMi03LjYtNDYtMzkuNGMtMi41LTIuMi01LTQuNC03LjQtNi44TDg1LjggNDA3LjN6TTQzMiA4YzAtMTMuMy0xMC43LTI0LTI0LTI0UzM4NC01LjMgMzg0IDhsMCAzMmMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMzJ6bTAgMTI4YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek00MDggMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMmMwLTEzLjMtMTAuNy0yNC0yNC0yNHptMjQgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMzJjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTMyek02MDkgMjczYzkuNC05LjQgOS40LTI0LjYgMC0zMy45bC03Mi03MmMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMSAzMS0xMDIuMSAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDEwMi4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MnoiXQogICAgfTsKICAgIGZhQXJyb3dVcFNob3J0V2lkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1zaG9ydC13aWRlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInNvcnQtYW1vdW50LXVwLWFsdCJdLCAiZjg4NSIsICJNMzIwIDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTk2IDB6bTAgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNjAgMHptMCAxMjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjI0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTIyNCAwek0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6Il0KICAgIH07CiAgICBmYVNvcnRBbW91bnRVcEFsdCA9IGZhQXJyb3dVcFNob3J0V2lkZTsKICAgIGZhR3JpcFZlcnRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdyaXAtdmVydGljYWwiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFsiZ3JpZC12ZXJ0aWNhbCJdLCAiZjU4ZSIsICJNMTI4IDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwTDQwIDBDMTcuOSAwIDAgMTcuOSAwIDQwTDAgODhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4em0wIDE5MmMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA0OGMwIDIyLjEgMTcuOSA0MCA0MCA0MGw0OCAwYzIyLjEgMCA0MC0xNy45IDQwLTQwbDAtNDh6TTAgNDI0bDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4YzAtMjIuMS0xNy45LTQwLTQwLTQwbC00OCAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHpNMzIwIDQwYzAtMjIuMS0xNy45LTQwLTQwLTQwTDIzMiAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MGwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OHpNMTkyIDIzMmwwIDQ4YzAgMjIuMSAxNy45IDQwIDQwIDQwbDQ4IDBjMjIuMSAwIDQwLTE3LjkgNDAtNDBsMC00OGMwLTIyLjEtMTcuOS00MC00MC00MGwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDB6TTMyMCA0MjRjMC0yMi4xLTE3LjktNDAtNDAtNDBsLTQ4IDBjLTIyLjEgMC00MCAxNy45LTQwIDQwbDAgNDhjMCAyMi4xIDE3LjkgNDAgNDAgNDBsNDggMGMyMi4xIDAgNDAtMTcuOSA0MC00MGwwLTQ4eiJdCiAgICB9OwogICAgZmFHcmlkVmVydGljYWwgPSBmYUdyaXBWZXJ0aWNhbDsKICAgIGZhQ2FyVHVubmVsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhci10dW5uZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkZSIsICJNMjU2IDBDMTE0LjYgMCAwIDExNC42IDAgMjU2TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDQyLjggMGMtNi42LTUuOS0xMC44LTE0LjQtMTAuOC0yNGwwLTExMy4xYzAtMTMuNSAzLjEtMjYuOCA5LTM4LjlsMzkuNy04MC44YzkuNC0xOS4xIDI4LjktMzEuMyA1MC4yLTMxLjNMMzE3IDIyNGMyMS4zIDAgNDAuOCAxMi4xIDUwLjIgMzEuM0w0MDcgMzM2YzUuOSAxMi4xIDkgMjUuNCA5IDM4LjlMNDE2IDQ4OGMwIDkuNi00LjIgMTguMS0xMC44IDI0bDQyLjggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE5MkM1MTIgMTE0LjYgMzk3LjQgMCAyNTYgMHpNMzYyLjggNTEyYy02LjYtNS45LTEwLjgtMTQuNC0xMC44LTI0bDAtMjQtMTkyIDAgMCAyNGMwIDkuNi00LjIgMTguMS0xMC44IDI0bDIxMy43IDB6bS0xNzUtMjM1LjVsLTI5LjMgNTkuNSAxOTQuOSAwLTI5LjMtNTkuNWMtMS4zLTIuNy00LjEtNC41LTcuMi00LjVMMTk1IDI3MmMtMyAwLTUuOCAxLjctNy4yIDQuNXpNMTc2IDQyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTE4NC0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFDaGFydENvbHVtbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFydC1jb2x1bW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTBlMyIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMzZjMCA4LjggNy4yIDE2IDE2IDE2bDQwMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDgwIDQ4MGMtNDQuMiAwLTgwLTM1LjgtODAtODBMMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMnpNMTQ0IDIyNGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE0NC02NGwwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE2MGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyem04MCAzMmMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTUxMiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTIyNGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFUcnVja0Fycm93UmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4YiIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMzA1IDIyNWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtMTAyLjEgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMDIuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjl6Il0KICAgIH07CiAgICBmYVR2ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInR2IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbNjM3MTcsICJ0ZWxldmlzaW9uIiwgInR2LWFsdCJdLCAiZjI2YyIsICJNNjQgOTZsMCAyNDAgNDQ4IDAgMC0yNDAtNDQ4IDB6TTAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsNDQ4IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDAwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2ek0xNjAgNDQ4bDI1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yNTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhVGVsZXZpc2lvbiA9IGZhVHY7CiAgICBmYVR2QWx0ID0gZmFUdjsKICAgIGZhU2VjdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzZWN0aW9uIiwKICAgICAgaWNvbjogWzI1NiwgNTEyLCBbXSwgImU0NDciLCAiTTExMCAwQzQ5LjIgMCAwIDQ5LjIgMCAxMTAgMCAxMzMuNyA3LjYgMTU1LjggMjAuNSAxNzQgNy42IDE5MiAwIDIxNC4xIDAgMjM4IDAgMjkxLjcgMzguOSAzMzcuNiA5MS45IDM0Ni40bDYxLjcgMTAuM2MyMi4yIDMuNyAzOC40IDIyLjkgMzguNCA0NS4zIDAgMjUuNC0yMC42IDQ2LTQ2IDQ2bC05OCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk4IDBjNjAuNyAwIDExMC00OS4yIDExMC0xMTAgMC0yMy43LTcuNi00NS45LTIwLjUtNjQgMTIuOS0xOCAyMC41LTQwLjEgMjAuNS02NCAwLTUzLjgtMzguOS05OS42LTkxLjktMTA4LjVsLTYxLjctMTAuM0M4MC4yIDE1MS42IDY0IDEzMi40IDY0IDExMCA2NCA4NC42IDg0LjYgNjQgMTEwIDY0bDk4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJTMjI1LjcgMCAyMDggMEwxMTAgMHptNzQuNyAyOTkuMWMtNi41LTIuNC0xMy40LTQuMy0yMC41LTUuNWwtNjEuNy0xMC4zYy0yMi4yLTMuNy0zOC40LTIyLjktMzguNC00NS4zIDAtOS4yIDIuNy0xNy44IDcuNC0yNSA2LjUgMi40IDEzLjQgNC4zIDIwLjUgNS41bDYxLjcgMTAuM2MyMi4yIDMuNyAzOC40IDIyLjkgMzguNCA0NS4zIDAgOS4yLTIuNyAxNy44LTcuNCAyNXoiXQogICAgfTsKICAgIGZhUGVhY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVhY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5Nzc0XSwgImY2N2MiLCAiTTIyNCA0NDUuM2wwLTEyMS44LTk0LjMgNzcuMWMyNi4xIDIyLjggNTguNSAzOC43IDk0LjMgNDQuN3pNODkuMiAzNTEuMUwyMjQgMjQwLjggMjI0IDY2LjdjLTkwLjggMTUuMi0xNjAgOTQuMi0xNjAgMTg5LjMgMCAzNC42IDkuMiA2Ny4xIDI1LjIgOTUuMXptMjkzLjEgNDkuNWwtOTQuMy03Ny4xIDAgMTIxLjhjMzUuNy02IDY4LjEtMjEuOSA5NC4zLTQ0Ljd6bTQwLjYtNDkuNWMxNi0yOCAyNS4yLTYwLjUgMjUuMi05NS4xIDAtOTUuMS02OS4yLTE3NC4xLTE2MC0xODkuM2wwIDE3NC4yIDEzNC44IDExMC4zek0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAweiJdCiAgICB9OwogICAgZmFTdGFyMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFyIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTEwODgsIDYxNDQ2XSwgImYwMDUiLCAiTTMwOS41LTE4LjljLTQuMS04LTEyLjQtMTMuMS0yMS40LTEzLjFzLTE3LjMgNS4xLTIxLjQgMTMuMUwxOTMuMSAxMjUuMyAzMy4yIDE1MC43Yy04LjkgMS40LTE2LjMgNy43LTE5LjEgMTYuM3MtLjUgMTggNS44IDI0LjRsMTE0LjQgMTE0LjUtMjUuMiAxNTkuOWMtMS40IDguOSAyLjMgMTcuOSA5LjYgMjMuMnMxNi45IDYuMSAyNSAyTDI4OC4xIDQxNy42IDQzMi40IDQ5MWM4IDQuMSAxNy43IDMuMyAyNS0yczExLTE0LjIgOS42LTIzLjJMNDQxLjcgMzA1LjkgNTU2LjEgMTkxLjRjNi40LTYuNCA4LjYtMTUuOCA1LjgtMjQuNHMtMTAuMS0xNC45LTE5LjEtMTYuM0wzODMgMTI1LjMgMzA5LjUtMTguOXoiXQogICAgfTsKICAgIGZhRmxhZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmxhZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyNzk4OCwgNjE3MjVdLCAiZjAyNCIsICJNNjQgMzJDNjQgMTQuMyA0OS43IDAgMzIgMFMwIDE0LjMgMCAzMkwwIDQ4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTIxLjYgNjIuNy0xOC44YzQxLjktMTIuNiA4Ny4xLTguNyAxMjYuMiAxMC45IDQyLjcgMjEuNCA5Mi41IDI0IDEzNy4yIDcuMmwzNy4xLTEzLjljMTIuNS00LjcgMjAuOC0xNi42IDIwLjgtMzBsMC0yNDcuN2MwLTIzLTI0LjItMzgtNDQuOC0yNy43bC0xMS44IDUuOWMtNDQuOSAyMi41LTk3LjggMjIuNS0xNDIuOCAwLTM2LjQtMTguMi03OC4zLTIxLjgtMTE3LjItMTAuMUw2NCA1NC40IDY0IDMyeiJdCiAgICB9OwogICAgZmFUcmlhbmdsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyaWFuZ2xlLWV4Y2xhbWF0aW9uIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTg4OCwgImV4Y2xhbWF0aW9uLXRyaWFuZ2xlIiwgIndhcm5pbmciXSwgImYwNzEiLCAiTTI1NiAwYzE0LjcgMCAyOC4yIDguMSAzNS4yIDIxbDIxNiA0MDBjNi43IDEyLjQgNi40IDI3LjQtLjggMzkuNVM0ODYuMSA0ODAgNDcyIDQ4MEw0MCA0ODBjLTE0LjEgMC0yNy4yLTcuNC0zNC40LTE5LjVzLTcuNS0yNy4xLS44LTM5LjVsMjE2LTQwMGM3LTEyLjkgMjAuNS0yMSAzNS4yLTIxem0wIDM1MmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTAtMTkyYy0xOC4yIDAtMzIuNyAxNS41LTMxLjQgMzMuN2w3LjQgMTA0Yy45IDEyLjUgMTEuNCAyMi4zIDIzLjkgMjIuMyAxMi42IDAgMjMtOS43IDIzLjktMjIuM2w3LjQtMTA0YzEuMy0xOC4yLTEzLjEtMzMuNy0zMS40LTMzLjd6Il0KICAgIH07CiAgICBmYUV4Y2xhbWF0aW9uVHJpYW5nbGUgPSBmYVRyaWFuZ2xlRXhjbGFtYXRpb247CiAgICBmYVdhcm5pbmcgPSBmYVRyaWFuZ2xlRXhjbGFtYXRpb247CiAgICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNjaG9vbC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2YyIsICJNNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNzYgMGMtMTAuNS0xNC42LTE5LTMwLjctMjUuMS00OGwtOTAuOSAwIDAtODhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMxIDAgMS45IDAgMi45IC4xIDI2LjMtNzQuNiA5Ny41LTEyOC4xIDE4MS4xLTEyOC4xIDI4LjYgMCA1NS42IDYuMiA4MCAxNy40bDAtMzMuNGMwLTM1LjMtMjguNy02NC02NC02NGwtNjQgMC0xMjcuOS0xMTUuMWMtMTguMy0xNi40LTQ2LTE2LjQtNjQuMiAwTDEyOCAxMjggNjQgMTI4em02NCAyNDBjMCA4LjgtNy4yIDE2LTE2IDE2bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMnpNMTEyIDI1NmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDMyIDBjOC44IDAgMTYgNy4yIDE2IDE2bDAgMzJjMCA4LjgtNy4yIDE2LTE2IDE2ek0yODggMTI4YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMC0xMDBhMjAgMjAgMCAxIDEgMCA0MCAyMCAyMCAwIDEgMSAwLTQwem0wLTE0MGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZzLTE2LTcuMi0xNi0xNmwwLTgwYzAtOC44IDcuMi0xNiAxNi0xNnoiXQogICAgfTsKICAgIGZhR3JhZHVhdGlvbkNhcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJncmFkdWF0aW9uLWNhcCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyNzg5MSwgIm1vcnRhci1ib2FyZCJdLCAiZjE5ZCIsICJNNDggMTk1LjhsMjA5LjIgODYuMWM5LjggNCAyMC4yIDYuMSAzMC44IDYuMXMyMS0yLjEgMzAuOC02LjFsMjQyLjQtOTkuOGM5LTMuNyAxNC44LTEyLjQgMTQuOC0yMi4xcy01LjgtMTguNC0xNC44LTIyLjFMMzE4LjggMzguMUMzMDkgMzQuMSAyOTguNiAzMiAyODggMzJzLTIxIDIuMS0zMC44IDYuMUwxNC44IDEzNy45QzUuOCAxNDEuNiAwIDE1MC4zIDAgMTYwTDAgNDU2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yNjAuMnptNDggNzEuN0w5NiAzODRjMCA1MyA4NiA5NiAxOTIgOTZzMTkyLTQzIDE5Mi05NmwwLTExNi42LTE0Mi45IDU4LjljLTE1LjYgNi40LTMyLjIgOS43LTQ5LjEgOS43cy0zMy41LTMuMy00OS4xLTkuN0w5NiAyNjcuNHoiXQogICAgfTsKICAgIGZhTW9ydGFyQm9hcmQgPSBmYUdyYWR1YXRpb25DYXA7CiAgICBmYVN0b3JlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1NGUiLCAiTTMwLjcgNzIuM0MzNy42IDQ4LjQgNTkuNSAzMiA4NC40IDMybDM0NCAwYzI0LjkgMCA0Ni44IDE2LjQgNTMuOCA0MC4zbDIzLjQgODAuMmMxMi44IDQzLjctMjAuMSA4Ny41LTY1LjYgODcuNS0yNi4zIDAtNDkuNC0xNC45LTYwLjgtMzcuMS0xMS42IDIxLjktMzQuNiAzNy4xLTYxLjQgMzcuMS0yNi42IDAtNDkuNy0xNS02MS4zLTM3LTExLjYgMjItMzQuNyAzNy02MS4zIDM3LTI2LjggMC00OS44LTE1LjEtNjEuNC0zNy4xLTExLjQgMjIuMS0zNC41IDM3LjEtNjAuOCAzNy4xLTQ1LjYgMC03OC40LTQzLjctNjUuNi04Ny41TDMwLjcgNzIuM3pNOTYuNCAzNTJsMzIwIDAgMC02Ni40YzcuNiAxLjYgMTUuNSAyLjQgMjMuNSAyLjQgMTQuMyAwIDI4LTIuNiA0MC41LTcuMmwwIDE1MS4yYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zNTIgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNTEuMmMxMi41IDQuNiAyNi4xIDcuMiA0MC41IDcuMiA4LjEgMCAxNS45LS44IDIzLjUtMi40bDAgNjYuNHoiXQogICAgfTsKICAgIGZhVXNlckFzdHJvbmF1dCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWFzdHJvbmF1dCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNGZiIiwgIk0yMjQgMzM2Yzc0LjYgMCAxMzguNC00Ni40IDE2NC0xMTJsNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQgMEMzNjIuNCAzMC40IDI5OC42LTE2IDIyNC0xNlM4NS42IDMwLjQgNjAgOTZsLTQgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0IDBjMjUuNiA2NS42IDg5LjQgMTEyIDE2NCAxMTJ6TTIwOCA4MGwzMiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0zMiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2ek0xNiA0ODQuNkMxNiA0OTkuNyAyOC4zIDUxMiA0My40IDUxMmw1Mi42IDAgMC00OGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxOTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDQ4IDUyLjYgMGMxNS4xIDAgMjcuNC0xMi4zIDI3LjQtMjcuNCAwLTU5LjgtMzEuOS0xMTIuMi03OS42LTE0MS0zNi40IDI1LjUtODAuNiA0MC40LTEyOC40IDQwLjRzLTkyLTE0LjktMTI4LjQtNDAuNEM0Ny45IDM3Mi40IDE2IDQyNC44IDE2IDQ4NC42ek0xODMuMyAxNDEuNWMtLjktMy4zLTMuOS01LjUtNy4zLTUuNXMtNi40IDIuMi03LjMgNS41bC02IDIxLjItMjEuMiA2Yy0zLjMgLjktNS41IDMuOS01LjUgNy4zczIuMiA2LjQgNS41IDcuM2wyMS4yIDYgNiAyMS4yYy45IDMuMyAzLjkgNS41IDcuMyA1LjVzNi40LTIuMiA3LjMtNS41bDYtMjEuMiAyMS4yLTZjMy4zLS45IDUuNS0zLjkgNS41LTcuM3MtMi4yLTYuNC01LjUtNy4zbC0yMS4yLTYtNi0yMS4yek0xNTIgNDg4bDAgMjQgNDggMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em0xMjAtMjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMjQgNDggMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFCdWlsZGluZ0ZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVpbGRpbmctZmxhZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGQ1IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NGwyNTYgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTM4NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAwek0xNzYgMzUybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA4MC05NiAwIDAtODBjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTk2IDExMmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyek0yNDAgOTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNOTYgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6bTE0NC0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2ek00NjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI4OCAxMTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDQ5NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhTXVnU2F1Y2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm11Zy1zYXVjZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsiY29mZmVlIl0sICJmMGY0IiwgIk02NCA2NGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzNTIgMGM3MC43IDAgMTI4IDU3LjMgMTI4IDEyOFM1MTguNyAyODggNDQ4IDI4OGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA2NHptNDQ4IDk2YzAtMzUuMy0yOC43LTY0LTY0LTY0bDAgMTI4YzM1LjMgMCA2NC0yOC43IDY0LTY0ek02NCA0NDhsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMNjQgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFDb2ZmZWUgPSBmYU11Z1NhdWNlcjsKICAgIGZhTGVtb24yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlbW9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODE5XSwgImYwOTQiLCAiTTQ0OCA5NmMwLTM1LjMtMjguNy02NC02NC02NC02LjYgMC0xMyAxLTE5IDIuOS0yMi41IDctNDguMSAxNC45LTcxIDktNzUuMi0xOS4xLTE1Ni40IDExLTIxMy43IDY4LjNTLTcuMiAyNTAuOCAxMS45IDMyNmM1LjggMjIuOS0yIDQ4LjQtOSA3MS0xLjkgNi0yLjkgMTIuNC0yLjkgMTkgMCAzNS4zIDI4LjcgNjQgNjQgNjQgNi42IDAgMTMtMSAxOS4xLTIuOSAyMi41LTcgNDguMS0xNC45IDcxLTkgNzUuMiAxOS4xIDE1Ni40LTExIDIxMy43LTY4LjNTNDU1LjIgMjYxLjIgNDM2LjEgMTg2Yy01LjgtMjIuOSAyLTQ4LjQgOS03MSAxLjktNiAyLjktMTIuNCAyLjktMTkuMXpNMjIyLjcgMTQzYy01MiAxNS4yLTk2LjUgNTkuNy0xMTEuNyAxMTEuNy0zLjcgMTIuNy0xNy4xIDIwLTI5LjggMTYuM1M2MS4yIDI1NCA2NSAyNDEuM2MxOS44LTY3LjcgNzYuNi0xMjQuNSAxNDQuMy0xNDQuMyAxMi43LTMuNyAyNi4xIDMuNiAyOS44IDE2LjNzLTMuNiAyNi4xLTE2LjMgMjkuOHoiXQogICAgfTsKICAgIGZhQ2FyYXZhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJhdmFuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4ZmYiLCAiTTMyIDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzcwLjcgMCAxMjggNTcuMyAxMjggMTI4bDAgMTkyIDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI5Ni40IDBjLjIgMi42IC40IDUuMyAuNCA4IDAgNDguNi0zOS40IDg4LTg4IDg4cy04OC0zOS40LTg4LTg4YzAtMi43IC4xLTUuNCAuNC04TDk2IDQxNmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMzIgOTZ6TTM1MiAzNTJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTQ4LTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDE2MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnpNMTYwIDEyOGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMmw2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTY0IDB6bTY0IDMzNmE0MCA0MCAwIDEgMCAwLTgwIDQwIDQwIDAgMSAwIDAgODB6Il0KICAgIH07CiAgICBmYVEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzExM10sICI1MSIsICJNNjQgMjU2YzAgODguNCA3MS42IDE2MCAxNjAgMTYwIDI4LjkgMCA1Ni03LjcgNzkuNC0yMS4xbC03Mi04Ni40Yy0xMS4zLTEzLjYtOS41LTMzLjggNC4xLTQ1LjFzMzMuOC05LjUgNDUuMSA0LjFsNzAuOSA4NS4xYzIwLjQtMjYuOCAzMi41LTYwLjMgMzIuNS05Ni42IDAtODguNC03MS42LTE2MC0xNjAtMTYwUzY0IDE2Ny42IDY0IDI1NnpNMzQ0LjkgNDQ0LjZDMzEwIDQ2NyAyNjguNSA0ODAgMjI0IDQ4MCAxMDAuMyA0ODAgMCAzNzkuNyAwIDI1NlMxMDAuMyAzMiAyMjQgMzIgNDQ4IDEzMi4zIDQ0OCAyNTZjMCA1Ni4xLTIwLjYgMTA3LjQtNTQuNyAxNDYuN2w0Ny4zIDU2LjhjMTEuMyAxMy42IDkuNSAzMy44LTQuMSA0NS4xcy0zMy44IDkuNS00NS4xLTQuMWwtNDYuNi01NS45eiJdCiAgICB9OwogICAgZmFMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxvY2siLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjgyNzRdLCAiZjAyMyIsICJNMTI4IDk2bDAgNjQgMTI4IDAgMC02NGMwLTM1LjMtMjguNy02NC02NC02NHMtNjQgMjguNy02NCA2NHpNNjQgMTYwbDAtNjRDNjQgMjUuMyAxMjEuMy0zMiAxOTItMzJTMzIwIDI1LjMgMzIwIDk2bDAgNjRjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyMjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDIyNGMwLTM1LjMgMjguNy02NCA2NC02NHoiXQogICAgfTsKICAgIGZhUGFpbnRSb2xsZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFpbnQtcm9sbGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1YWEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM1MiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDE2IDBjNDQuMiAwIDgwIDM1LjggODAgODBsMCA5NmMwIDQ0LjItMzUuOCA4MC04MCA4MGwtMTYwIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE4LjdjMTguNiA2LjYgMzIgMjQuNCAzMiA0NS4zbDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtMTguN2MwLTQ0LjIgMzUuOC04MCA4MC04MGwxNjAgMGM4LjggMCAxNi03LjIgMTYtMTZsMC05NmMwLTguOC03LjItMTYtMTYtMTZsLTE2IDBjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgMTkyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0eiJdCiAgICB9OwogICAgZmFWb2x1bWVIaWdoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZvbHVtZS1oaWdoIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjY2LCAidm9sdW1lLXVwIl0sICJmMDI4IiwgIk01MzMuNiAzMi41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDNTU3LjUgMTEzLjggNTkyIDE4MC44IDU5MiAyNTZzLTM0LjUgMTQyLjItODguNyAxODYuM2MtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNUM1OTguNSA0MjYuNyA2NDAgMzQ2LjIgNjQwIDI1NlM1OTguNSA4NS4yIDUzMy42IDMyLjV6TTQ3My4xIDEwN2MtMTAuMy04LjQtMjUuNC02LjgtMzMuOCAzLjVzLTYuOCAyNS40IDMuNSAzMy44QzQ3NS4zIDE3MC43IDQ5NiAyMTAuOSA0OTYgMjU2cy0yMC43IDg1LjMtNTMuMiAxMTEuOGMtMTAuMyA4LjQtMTEuOCAyMy41LTMuNSAzMy44czIzLjUgMTEuOCAzMy44IDMuNWM0My4yLTM1LjIgNzAuOS04OC45IDcwLjktMTQ5cy0yNy43LTExMy44LTcwLjktMTQ5em0tNjAuNSA3NC41Yy0xMC4zLTguNC0yNS40LTYuOC0zMy44IDMuNXMtNi44IDI1LjQgMy41IDMzLjhDMzkzLjEgMjI3LjYgNDAwIDI0MSA0MDAgMjU2cy02LjkgMjguNC0xNy43IDM3LjNjLTEwLjMgOC40LTExLjggMjMuNS0zLjUgMzMuOHMyMy41IDExLjggMzMuOCAzLjVDNDM0LjEgMzEyLjkgNDQ4IDI4Ni4xIDQ0OCAyNTZzLTEzLjktNTYuOS0zNS40LTc0LjV6TTgwIDM1Mmw0OCAwIDEzNC4xIDExOS4yYzYuNCA1LjcgMTQuNiA4LjggMjMuMSA4LjggMTkuMiAwIDM0LjgtMTUuNiAzNC44LTM0LjhsMC0zNzguNGMwLTE5LjItMTUuNi0zNC44LTM0LjgtMzQuOC04LjUgMC0xNi43IDMuMS0yMy4xIDguOEwxMjggMTYwIDgwIDE2MGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCA5NmMwIDI2LjUgMjEuNSA0OCA0OCA0OHoiXQogICAgfTsKICAgIGZhVm9sdW1lVXAgPSBmYVZvbHVtZUhpZ2g7CiAgICBmYUZvbGRlclBsdXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLXBsdXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjY1ZSIsICJNNTEyIDM4NGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI0MHpNMjU2IDE2MGMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDAgMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDggNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMCAwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0eiJdCiAgICB9OwogICAgZmFNZXJjdXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1lcmN1cnkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5NzkxXSwgImYyMjMiLCAiTTExNy00QzEwNi0xNy44IDg1LjgtMjAgNzIuMS05cy0xNiAzMS4yLTUgNDVDNzQuOSA0NS43IDgzLjcgNTQuNSA5My41IDYyLjEgNDYuNyA5My43IDE2IDE0Ny4zIDE2IDIwOCAxNiAyOTQuMyA3OC4xIDM2Ni4xIDE2MCAzODEuMWwwIDM0LjktMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyIDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMyIDAgMC0zNC45YzgxLjktMTUgMTQ0LTg2LjggMTQ0LTE3My4xIDAtNjAuNy0zMC43LTExNC4zLTc3LjUtMTQ1LjkgOS44LTcuNyAxOC43LTE2LjQgMjYuNC0yNi4xIDExLjEtMTMuOCA4LjgtMzMuOS01LTQ1UzI3OC0xNy44IDI2Ny00Yy0xNy42IDIyLTQ0LjcgMzYtNzUgMzZTMTM0LjcgMTggMTE3LTR6bTc1IDMyNGMtNjEuOSAwLTExMi01MC4xLTExMi0xMTJTMTMwLjEgOTYgMTkyIDk2IDMwNCAxNDYuMSAzMDQgMjA4YzAgNjEuOC01MC4xIDExMi0xMTEuOSAxMTJsLS4xIDB6Il0KICAgIH07CiAgICBmYUFuY2hvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3IiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODc1XSwgImYxM2QiLCAiTTI4OCA2NGEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6TTE5MiA5NmMwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2YzAgNDEuOC0yNi43IDc3LjQtNjQgOTAuNWwwIDI1Ny45YzYyLjktMTQuMyAxMTAuMi02OS43IDExMS45LTEzNi41bC0xNi4xIDE0LjFjLTEwIDguNy0yNS4xIDcuNy0zMy45LTIuM3MtNy43LTI1LjEgMi4zLTMzLjlsNjQtNTZjOS03LjkgMjIuNi03LjkgMzEuNiAwbDY0IDU2YzEwIDguNyAxMSAyMy45IDIuMyAzMy45cy0yMy45IDExLTMzLjkgMi4zTDQ5NiAzMDcuOUM0OTMuOSA0MjEgNDAxLjYgNTEyIDI4OCA1MTJTODIuMSA0MjEgODAgMzA3LjlMNjMuOCAzMjIuMWMtMTAgOC43LTI1LjEgNy43LTMzLjktMi4zcy03LjctMjUuMSAyLjMtMzMuOWw2NC01NmM5LTcuOSAyMi42LTcuOSAzMS42IDBsNjQgNTZjMTAgOC43IDExIDIzLjkgMi4zIDMzLjlzLTIzLjkgMTEtMzMuOSAyLjNsLTE2LjEtMTQuMWMxLjggNjYuOCA0OS4xIDEyMi4yIDExMS45IDEzNi41bDAtMjU3LjljLTM3LjMtMTMuMi02NC00OC43LTY0LTkwLjV6Il0KICAgIH07CiAgICBmYVNxdWFyZVBhcmtpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLXBhcmtpbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjczNTksICJwYXJraW5nIl0sICJmNTQwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek0xOTIgMjU2bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTQ4IDAgMCA2NHptNDggNjRsLTQ4IDAgMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4NGMwLTIyLjEgMTcuOS00MCA0MC00MGw3MiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2eiJdCiAgICB9OwogICAgZmFQYXJraW5nID0gZmFTcXVhcmVQYXJraW5nOwogICAgZmFIYW51a2lhaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW51a2lhaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODMzNF0sICJmNmU2IiwgIk0zMTQuMiAzLjNjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6bS0yODggNDhDMjEuMSA2MC4xIDggODQuNiA4IDEwNCA4IDExNy4zIDE4LjcgMTI4IDMyIDEyOHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTg4IDEwNGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjNDMTAxLjEgNjAuMSA4OCA4NC42IDg4IDEwNHptODIuMi01Mi43Yy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek0yMTYgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0MyMjkuMSA2MC4xIDIxNiA4NC42IDIxNiAxMDR6TTM5NC4yIDUxLjNjLTUuMSA4LjgtMTguMiAzMy4zLTE4LjIgNTIuNyAwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0YzAtMTkuNC0xMy4xLTQzLjktMTguMi01Mi43LTEuMi0yLjEtMy40LTMuMy01LjgtMy4zcy00LjYgMS4yLTUuOCAzLjN6TTQ0MCAxMDRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zQzQ1My4xIDYwLjEgNDQwIDg0LjYgNDQwIDEwNHptODIuMi01Mi43Yy01LjEgOC44LTE4LjIgMzMuMy0xOC4yIDUyLjcgMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGMwLTE5LjQtMTMuMS00My45LTE4LjItNTIuNy0xLjItMi4xLTMuNC0zLjMtNS44LTMuM3MtNC42IDEuMi01LjggMy4zek01ODQgMTA0YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0xOS40LTEzLjEtNDMuOS0xOC4yLTUyLjctMS4yLTIuMS0zLjQtMy4zLTUuOC0zLjNzLTQuNiAxLjItNS44IDMuM0M1OTcuMSA2MC4xIDU4NCA4NC42IDU4NCAxMDR6TTExMiAxNjBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2em02NCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTE2MCAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAxMTIgMzIgMCAwLTExMmMwLTguOC03LjItMTYtMTYtMTZ6bTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDExMiAzMiAwIDAtMTEyYzAtOC44LTcuMi0xNi0xNi0xNnptNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTEyIDMyIDAgMC0xMTJjMC04LjgtNy4yLTE2LTE2LTE2ek0zNTIgMTQ0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTc2LTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgMTc0LjMgMCAxOTJsMCA5NmMwIDUzIDQzIDk2IDk2IDk2bDE5MiAwIDAgNjQtMTI4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEyOCAwIDAtNjQgMTkyIDBjNTMgMCA5Ni00MyA5Ni05NmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTE5MiAwIDAtMTc2eiJdCiAgICB9OwogICAgZmFSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInJvdGF0ZS1iYWNrIiwgInJvdGF0ZS1iYWNrd2FyZCIsICJ1bmRvLWFsdCJdLCAiZjJlYSIsICJNMjQgMTkybDE0NCAwYzkuNyAwIDE4LjUtNS44IDIyLjItMTQuOHMxLjctMTkuMy01LjItMjYuMmwtNDYuNy00Ni43Yzc1LjMtNTguNiAxODQuMy01My4zIDI1My41IDE1LjkgNzUgNzUgNzUgMTk2LjUgMCAyNzEuNXMtMTk2LjUgNzUtMjcxLjUgMGMtMTAuMi0xMC4yLTE5LTIxLjMtMjYuNC0zMy05LjUtMTQuOS0yOS4zLTE5LjMtNDQuMi05LjhzLTE5LjMgMjkuMy05LjggNDQuMkM0OS43IDQwOC43IDYxLjQgNDIzLjUgNzUgNDM3IDE3NSA1MzcgMzM3IDUzNyA0MzcgNDM3UzUzNyAxNzUgNDM3IDc1QzM0Mi44LTE5LjMgMTkzLjMtMjQuNyA5Mi43IDU4LjhMNDEgN0MzNC4xIC4yIDIzLjgtMS45IDE0LjggMS44UzAgMTQuMyAwIDI0TDAgMTY4YzAgMTMuMyAxMC43IDI0IDI0IDI0eiJdCiAgICB9OwogICAgZmFSb3RhdGVCYWNrID0gZmFSb3RhdGVMZWZ0OwogICAgZmFSb3RhdGVCYWNrd2FyZCA9IGZhUm90YXRlTGVmdDsKICAgIGZhVW5kb0FsdCA9IGZhUm90YXRlTGVmdDsKICAgIGZhSGVhZGluZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkaW5nIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImhlYWRlciJdLCAiZjFkYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNiAwIDAgMTEyIDIyNCAwIDAtMTEyLTE2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTYgMCAwIDMyMCAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC0xNDQtMjI0IDAgMCAxNDQgMTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwIDAtMzIwLTE2IDBDMTQuMyA5NiAwIDgxLjcgMCA2NHoiXQogICAgfTsKICAgIGZhSGVhZGVyID0gZmFIZWFkaW5nOwogICAgZmFDcm9zc2hhaXJzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3NzaGFpcnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjA1YiIsICJNMjg4LTE2YzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTguM2M5OC4xIDE0IDE3NS43IDkxLjYgMTg5LjcgMTg5LjdsMTguMyAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOC4zIDBjLTE0IDk4LjEtOTEuNiAxNzUuNy0xODkuNyAxODkuN2wwIDE4LjNjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xOC4zQzE1Ny45IDQ2My43IDgwLjMgMzg2LjEgNjYuMyAyODhMNDggMjg4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE4LjMgMEM4MC4zIDEyNS45IDE1Ny45IDQ4LjMgMjU2IDM0LjNMMjU2IDE2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0xMzEuMiAyODhjMTIuNyA2Mi43IDYyLjEgMTEyLjEgMTI0LjggMTI0LjhsMC0xMi44YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxMi44YzYyLjctMTIuNyAxMTIuMS02Mi4xIDEyNC44LTEyNC44TDQzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTIuOCAwQzQzMi4xIDE2MS4zIDM4Mi43IDExMS45IDMyMCA5OS4ybDAgMTIuOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyLjhDMTkzLjMgMTExLjkgMTQzLjkgMTYxLjMgMTMxLjIgMjI0bDEyLjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMTIuOCAwek0yODggMjA4YTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnoiXQogICAgfTsKICAgIGZhQ2lyY2xlTm9kZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLW5vZGVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZTIiLCAiTTQxOC40IDE1Ny45YzM1LjMtOC4zIDYxLjYtNDAgNjEuNi03Ny45IDAtNDQuMi0zNS44LTgwLTgwLTgwLTQzLjQgMC03OC43IDM0LjUtODAgNzcuNUwxMzYuMiAxNTEuMUMxMjEuNyAxMzYuOCAxMDEuOSAxMjggODAgMTI4IDM1LjggMTI4IDAgMTYzLjggMCAyMDhzMzUuOCA4MCA4MCA4MGMxMi4yIDAgMjMuOC0yLjcgMzQuMS03LjZMMjU5LjcgNDA3LjhjLTIuNCA3LjYtMy43IDE1LjgtMy43IDI0LjIgMCA0NC4yIDM1LjggODAgODAgODBzODAtMzUuOCA4MC04MGMwLTI3LjctMTQtNTIuMS0zNS40LTY2LjRsMzcuOC0yMDcuN3pNMTU2LjMgMjMyLjJjMi4yLTYuOSAzLjUtMTQuMiAzLjctMjEuN2wxODMuOC03My41YzMuNiAzLjUgNy40IDYuNyAxMS42IDkuNUwzMTcuNiAzNTQuMWMtNS41IDEuMy0xMC44IDMuMS0xNS44IDUuNUwxNTYuMyAyMzIuMnoiXQogICAgfTsKICAgIGZhV2luZG93UmVzdG9yZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2luZG93LXJlc3RvcmUiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjJkMiIsICJNNTEyIDk2TDE2MCA5NmMwLTM1LjMgMjguNy02NCA2NC02NGwyODggMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NGwtNDggMCAwLTY0IDQ4IDAgMC0xOTJ6TTAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDI4OCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTkyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAyMjR6bTY0IDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0bDI0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0TDg4IDI0MGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6Il0KICAgIH07CiAgICBmYVIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiciIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzExNF0sICI1MiIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDk1LjMgMCAxMDIuNCAxNDYuNGMxMC4xIDE0LjUgMzAuMSAxOCA0NC42IDcuOXMxOC0zMC4xIDcuOS00NC42TDIzMC4xIDMwOS41QzI4Mi44IDI4OC4xIDMyMCAyMzYuNCAzMjAgMTc2IDMyMCA5Ni41IDI1NS41IDMyIDE3NiAzMkwzMiAzMnpNMTc2IDI1NmwtMTEyIDAgMC0xNjAgMTEyIDBjNDQuMiAwIDgwIDM1LjggODAgODBzLTM1LjggODAtODAgODB6Il0KICAgIH07CiAgICBmYUZpbHRlckNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbHRlci1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTE3YiIsICJNMzIgNjRDMTkuMSA2NCA3LjQgNzEuOCAyLjQgODMuOFMuMiAxMDkuNSA5LjQgMTE4LjZMMTkyIDMwMS4zIDE5MiA0MTZjMCA4LjUgMy40IDE2LjYgOS40IDIyLjZsNjQgNjRjMi41IDIuNSA1LjMgNC41IDguMyA2LTIxLjItMzAuOS0zMy42LTY4LjMtMzMuNi0xMDguNiAwLTk5LjQgNzUuNS0xODEuMSAxNzIuMy0xOTFsOTAuNC05MC40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDY0IDQ4MCA2NEwzMiA2NHpNNDMyIDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYUdvcHVyYW0gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ29wdXJhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjY0IiwgIk0xMjAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDggMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDggNDAgMCAwLThjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEzNmMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTI4YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC00OCAwIDAtMjI0LTMyIDAgMC0xMjgtNDggMCAwIDEyOCAzMiAwIDAgMjI0LTIyNCAwIDAtMjI0IDMyIDAgMC0xMjgtNDggMCAwIDEyOC0zMiAwIDAgMjI0LTQ4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhMOTYgMjRjMC0xMy4zIDEwLjctMjQgMjQtMjR6TTI1NiAyMDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNDggNjQgMCAwLTQ4YzAtMTcuNy0xNC4zLTMyLTMyLTMyek0yMDggNDAwbDAgNjQgOTYgMCAwLTY0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek0yNTYgOTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMzIgNjQgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyeiJdCiAgICB9OwogICAgZmFIZWFydENpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGZmIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIyNCAwYzAtOC44LTcuMi0xNi0xNi0xNmwtMTI4IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsMTI4IDBjOC44IDAgMTYtNy4yIDE2LTE2eiJdCiAgICB9OwogICAgZmFTdGFyT2ZMaWZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0YXItb2YtbGlmZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjIxIiwgIk0yMDguNSAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTQwLjkgMTIyLTcwLjRjMTUuMy04LjggMzQuOS0zLjYgNDMuNyAxMS43bDE2IDI3LjdjOC44IDE1LjMgMy42IDM0LjktMTEuNyA0My43bC0xMjIgNzAuNCAxMjIgNzAuNGMxNS4zIDguOCAyMC42IDI4LjQgMTEuNyA0My43bC0xNiAyNy43Yy04LjggMTUuMy0yOC40IDIwLjYtNDMuNyAxMS43bC0xMjItNzAuNCAwIDE0MC45YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0zMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE0MC45LTEyMiA3MC40Yy0xNS4zIDguOC0zNC45IDMuNi00My43LTExLjdsLTE2LTI3LjdjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN2wxMjItNzAuNC0xMjItNzAuNGMtMTUuMy04LjgtMjAuNS0yOC40LTExLjctNDMuN2wxNi0yNy43YzguOC0xNS4zIDI4LjQtMjAuNSA0My43LTExLjdsMTIyIDcwLjQgMC0xNDAuOXoiXQogICAgfTsKICAgIGZhQnVzaW5lc3NUaW1lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1c2luZXNzLXRpbWUiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsiYnJpZWZjYXNlLWNsb2NrIl0sICJmNjRhIiwgIk0yNjQgNDhsMTEyIDBjNC40IDAgOCAzLjYgOCA4bDAgNDAtMTI4IDAgMC00MGMwLTQuNCAzLjYtOCA4LTh6bS01NiA4bDAgNDAtODAgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCA5NiAzMDUgMGMzMy44LTI5LjkgNzguMy00OCAxMjctNDggMjguNiAwIDU1LjYgNi4yIDgwIDE3LjRsMC02NS40YzAtMzUuMy0yOC43LTY0LTY0LTY0bC04MCAwIDAtNDBjMC0zMC45LTI1LjEtNTYtNTYtNTZMMjY0IDBjLTMwLjkgMC01NiAyNS4xLTU2IDU2em04MCAyOTZjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTYtMTkyIDAgMCAxMTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkzLjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMTYuNiAyLjEtMzIuNyA2LTQ4bC0yMiAwem0zNTIgNDhhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHpNNDk2IDMyMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0OCAzMiAwYzguOCAwIDE2IDcuMiAxNiAxNnMtNy4yIDE2LTE2IDE2bC00OCAwYy04LjggMC0xNi03LjItMTYtMTZsMC02NGMwLTguOCA3LjItMTYgMTYtMTZ6Il0KICAgIH07CiAgICBmYUJyaWVmY2FzZUNsb2NrID0gZmFCdXNpbmVzc1RpbWU7CiAgICBmYUZpcmVFeHRpbmd1aXNoZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlyZS1leHRpbmd1aXNoZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MTldLCAiZjEzNCIsICJNNTEyIDMyYzAtOS42LTQuMy0xOC43LTExLjctMjQuN1M0ODMuMS0xLjMgNDczLjcgLjZsLTE2MCAzMkMzMDEuNSAzNS4xIDI5MiA0NC4zIDI4OSA1NmwtNjUgMCAwLTI0YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDI4LjRjLTU1LjMgMTIuMy0xMDEuMyA0OS41LTEyNS41IDk5LjEtNS44IDExLjktLjkgMjYuMyAxMS4xIDMyLjFzMjYuMyAuOSAzMi4xLTExLjFDNjIgMTQ2LjkgOTEuOCAxMjEuMSAxMjggMTEwbDAgMjguOGMtMzcuOCAxOC02NCA1Ni41LTY0IDEwMS4ybDAgMTI4IDIyNCAwIDAtMTI4YzAtNDQuNy0yNi4yLTgzLjItNjQtMTAxLjJsMC0zNC44IDY1IDBjMyAxMS43IDEyLjUgMjAuOSAyNC43IDIzLjRsMTYwIDMyYzkuNCAxLjkgMTkuMS0uNiAyNi42LTYuNlM1MTIgMTM3LjYgNTEyIDEyOGwwLTk2ek0yODggNDQ4bDAtMzItMjI0IDAgMCAzMmMwIDM1LjMgMjguNyA2NCA2NCA2NGw5NiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25Mb25nID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tbG9uZyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWyJsb25nLWFycm93LWRvd24iXSwgImYxNzUiLCAiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMTkyIDQzNC43IDE5MiAwYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzEyOC0xNy43IDEyOCAwbDAgNDM0LjctNzMuNC03My40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxMjggMTI4eiJdCiAgICB9OwogICAgZmFMb25nQXJyb3dEb3duID0gZmFBcnJvd0Rvd25Mb25nOwogICAgZmFVc2VyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1taW51cyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNTAzIiwgIk0xMzYgMTI4YTEyMCAxMjAgMCAxIDEgMjQwIDAgMTIwIDEyMCAwIDEgMSAtMjQwIDB6TTQ4IDQ4Mi4zQzQ4IDM4My44IDEyNy44IDMwNCAyMjYuMyAzMDRsNTkuNCAwYzk4LjUgMCAxNzguMyA3OS44IDE3OC4zIDE3OC4zIDAgMTYuNC0xMy4zIDI5LjctMjkuNyAyOS43TDc3LjcgNTEyQzYxLjMgNTEyIDQ4IDQ5OC43IDQ4IDQ4Mi4zek00NzIgMTY4bDE0NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNDQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTW9uZXlDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTNjIiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4ek05NiAzMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptMjQtMTM2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0yNzIgMHoiXQogICAgfTsKICAgIGZhSG91c2VMYXB0b3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtbGFwdG9wIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImxhcHRvcC1ob3VzZSJdLCAiZTA2NiIsICJNNDQ4IDI0MGwxOS45IDBjMTUuNSAwIDI4LjEtMTIuNiAyOC4xLTI4LjEgMC03LjYtMy4xLTE0LjktOC42LTIwLjJMMjgzLjUtNC45QzI3Ni4xLTEyIDI2Ni4zLTE2IDI1Ni0xNnMtMjAuMSA0LTI3LjUgMTEuMUwyNC42IDE5MS43QzE5LjEgMTk3IDE2IDIwNC4zIDE2IDIxMS45IDE2IDIyNy40IDI4LjYgMjQwIDQ0LjEgMjQwbDE5LjkgMCAwIDE0NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw4NS43IDBjNy40LTYuNiAxNi40LTExLjQgMjYuMy0xNGwwLTEzMGMwLTUuNSAuNy0xMC45IDItMTZsLTEwIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNDhjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDI0IDE0NCAwek0zNTIgMzUybDE2MCAwIDAgMTI4LTE2MCAwIDAtMTI4em0tNjQtMzJsMCAxNjAtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2IDAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI4OCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4IDAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMCAwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjI0IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFMYXB0b3BIb3VzZSA9IGZhSG91c2VMYXB0b3A7CiAgICBmYURvd25sb2FkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvd25sb2FkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMTkiLCAiTTI1NiAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDIxMC43LTQxLjQtNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjU2IDI0Mi43IDI1NiAzMnpNNjQgMzIwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDMyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTQ2LjkgMC01Ni42IDU2LjZjLTMxLjIgMzEuMi04MS45IDMxLjItMTEzLjEgMEwxMTAuOSAzMjAgNjQgMzIwem0zMDQgNTZhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4eiJdCiAgICB9OwogICAgZmFDb3VjaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb3VjaCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGI4IiwgIk0xNDQgMjcyQzE0NCAyMjQuNyAxMDkuOCAxODUuNCA2NC44IDE3Ny41IDcyIDExMy42IDEyNi4yIDY0IDE5MiA2NGwyNTYgMGM2NS44IDAgMTIwIDQ5LjYgMTI3LjIgMTEzLjUtNDUgOC03OS4yIDQ3LjItNzkuMiA5NC41bDAgMzItMzUyIDAgMC0zMnpNMCAzODRMMCAyNzJjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDgwIDQ0OCAwIDAtODBjMC0yNi41IDIxLjUtNDggNDgtNDhzNDggMjEuNSA0OCA0OGwwIDExMmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0eiJdCiAgICB9OwogICAgZmFSb2FkTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWxvY2siLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2NyIsICJNMjU2IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDMzLjQgNDIwLjVDMjUuOSA0NTAuNyA0OC44IDQ4MCA4MCA0ODBsMTc1LjkgMCAwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyIDYuMSAwIDExLjggMS43IDE2LjcgNC43IDIuOC0yMy45IDE0LjMtNDUuMSAzMS40LTYwLjNsMC0yNC40YzAtNzAuNyA1Ny4zLTEyOCAxMjgtMTI4IDYuMiAwIDEyLjQgLjQgMTguNCAxLjNMNDU4LjUgODAuNkM0NTEuNCA1Mi4xIDQyNS44IDMyIDM5Ni4zIDMybC03Ni40IDAgMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0em02NCAxOTJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJ6bTE3NiA4MC4xbDAgNDcuOS02NCAwIDAtNDcuOWMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyek0zNTIgNDAwbDAgOTZjMCAyNi41IDIxLjUgNDggNDggNDhsMTI4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC05NmMwLTIwLjktMTMuNC0zOC43LTMyLTQ1LjNsMC01MC42YzAtNDQuMi0zNS44LTgwLTgwLTgwcy04MCAzNS44LTgwIDgwbDAgNTAuNmMtMTguNiA2LjYtMzIgMjQuNC0zMiA0NS4zeiJdCiAgICB9OwogICAgZmFTY2lzc29ycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2lzc29ycyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzk5ODQsIDk5ODYsIDk5ODgsICJjdXQiXSwgImYwYzQiLCAiTTE5MiAyNTZsLTM5LjUgMzkuNWMtMTIuNi00LjktMjYuMi03LjUtNDAuNS03LjUtNjEuOSAwLTExMiA1MC4xLTExMiAxMTJzNTAuMSAxMTIgMTEyIDExMiAxMTItNTAuMSAxMTItMTEyYzAtMTQuMy0yLjctMjcuOS03LjUtNDAuNUw0OTkuMiA3Ni44YzcuMS03LjEgNy4xLTE4LjUgMC0yNS42LTI4LjMtMjguMy03NC4xLTI4LjMtMTAyLjQgMEwyNTYgMTkyIDIxNi41IDE1Mi41YzQuOS0xMi42IDcuNS0yNi4yIDcuNS00MC41IDAtNjEuOS01MC4xLTExMi0xMTItMTEyUzAgNTAuMSAwIDExMiA1MC4xIDIyNCAxMTIgMjI0YzE0LjMgMCAyNy45LTIuNyA0MC41LTcuNUwxOTIgMjU2em05Ny45IDk3LjlMMzk2LjggNDYwLjhjMjguMyAyOC4zIDc0LjEgMjguMyAxMDIuNCAwIDcuMS03LjEgNy4xLTE4LjUgMC0yNS42bC0xNDUuMy0xNDUuMy02NCA2NHpNNjQgMTEyYTQ4IDQ4IDAgMSAxIDk2IDAgNDggNDggMCAxIDEgLTk2IDB6bTQ4IDI0MGE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6Il0KICAgIH07CiAgICBmYUN1dCA9IGZhU2Npc3NvcnM7CiAgICBmYUJ1ZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjE4OCIsICJNMTkyIDk2YzAtNTMgNDMtOTYgOTYtOTZzOTYgNDMgOTYgOTZsMCAzLjZjMCAxNS43LTEyLjcgMjguNC0yOC40IDI4LjRsLTEzNS4xIDBjLTE1LjcgMC0yOC40LTEyLjctMjguNC0yOC40bDAtMy42em0zNDUuNiAxMi44YzEwLjYgMTQuMSA3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgMi42LS4xIDUuMy0uMiA3LjlsODMuNCA2Mi41YzE0LjEgMTAuNiAxNyAzMC43IDYuNCA0NC44cy0zMC43IDE3LTQ0LjggNi40bC02My4xLTQ3LjNjLTIzLjIgNDQuMi02Ni41IDc2LjItMTE3LjcgODMuOUwzMTIgMjgwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjMwLjJjLTUxLjItNy43LTk0LjUtMzkuNy0xMTcuNy04My45TDgzLjIgNDczLjZjLTE0LjEgMTAuNi0zNC4yIDcuNy00NC44LTYuNHMtNy43LTM0LjIgNi40LTQ0LjhsODMuNC02Mi41Yy0uMS0yLjYtLjItNS4yLS4yLTcuOWwwLTMyLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsOTguOCAwYzIuNS0xMC40IDYuNS0yMC4yIDExLjgtMjkuMUw0NC44IDE1My42Yy0xNC4xLTEwLjYtMTctMzAuNy02LjQtNDQuOHMzMC43LTE3IDQ0LjgtNi40TDE5MiAxODRjMTIuMy01LjEgMjUuOC04IDQwLThsMTEyIDBjMTQuMiAwIDI3LjcgMi44IDQwIDhsMTA4LjgtODEuNmMxNC4xLTEwLjYgMzQuMi03LjcgNDQuOCA2LjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRGcm9tQnJhY2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1yaWdodC1mcm9tLWJyYWNrZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsic2lnbi1vdXQiXSwgImYwOGIiLCAiTTE2MCA5NmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw5NiAzMkM0MyAzMiAwIDc1IDAgMTI4TDAgMzg0YzAgNTMgNDMgOTYgOTYgOTZsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yNTZjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNNTAyLjYgMjc4LjZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTEyOC0xMjhjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDQwMi43IDIyNCAxOTIgMjI0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDIxMC43IDAtNzMuNCA3My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjh6Il0KICAgIH07CiAgICBmYVNpZ25PdXQgPSBmYUFycm93UmlnaHRGcm9tQnJhY2tldDsKICAgIGZhSGFuZEhvbGRpbmdIYW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oYW5kIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZjciLCAiTTQ2Ni44IDE4Ni41bDQyLjUtNDIuNSAzNC43IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMkwyMjMuNiAxNmMtMjkgMC01Ny4zIDkuMy04MC43IDI2LjVMMTYuMyAxMzUuOGMtMTcuOCAxMy4xLTIxLjYgMzguMS04LjUgNTUuOXMzOC4xIDIxLjYgNTUuOSA4LjVMMTgzLjQgMTEyIDI5NiAxMTJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMTUyLjIgMGMzMy45IDAgNjYuNS0xMy41IDkwLjUtMzcuNXptLTM1Ny41IDEzOUw2Ni43IDM2OCAzMiAzNjhjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MDAgMjgwIDQwMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhU3Ryb29wd2FmZWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Ryb29wd2FmZWwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU1MSIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMzEyLjYgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBMMjU2IDk3LjYgMjIyLjEgNjMuN2MtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmwzMy45IDMzLjktNDUuMyA0NS4zLTU2LjYtNTYuNmMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNmw1Ni42IDU2LjYtNDUuMyA0NS4zLTMzLjktMzMuOWMtNi4yLTYuMi0xNi40LTYuMi0yMi42IDBzLTYuMiAxNi40IDAgMjIuNkw5Ny42IDI1NiA2My43IDI4OS45Yy02LjIgNi4yLTYuMiAxNi40IDAgMjIuNnMxNi40IDYuMiAyMi42IDBsMzMuOS0zMy45IDQ1LjMgNDUuMy01Ni42IDU2LjZjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGw1Ni42LTU2LjYgNDUuMyA0NS4zLTMzLjkgMzMuOWMtNi4yIDYuMi02LjIgMTYuNCAwIDIyLjZzMTYuNCA2LjIgMjIuNiAwbDMzLjktMzMuOSAzMy45IDMzLjljNi4yIDYuMiAxNi40IDYuMiAyMi42IDBzNi4yLTE2LjQgMC0yMi42bC0zMy45LTMzLjkgNDUuMy00NS4zIDU2LjYgNTYuNmM2LjIgNi4yIDE2LjQgNi4yIDIyLjYgMHM2LjItMTYuNCAwLTIyLjZsLTU2LjYtNTYuNiA0NS4zLTQ1LjMgMzMuOSAzMy45YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzMuOS0zMy45IDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zMy45IDMzLjktNDUuMy00NS4zIDU2LjYtNTYuNmM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC01Ni42IDU2LjYtNDUuMy00NS4zIDMzLjktMzMuOWM2LjItNi4yIDYuMi0xNi40IDAtMjIuNnpNMTQyLjkgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptNjcuOSA2Ny45bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3pNMjc4LjYgMjU2bDQ1LjMtNDUuMyA0NS4zIDQ1LjMtNDUuMyA0NS4zLTQ1LjMtNDUuM3ptMjIuNi02Ny45bC00NS4zIDQ1LjMtNDUuMy00NS4zIDQ1LjMtNDUuMyA0NS4zIDQ1LjN6Il0KICAgIH07CiAgICBmYUNoaWxkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNoaWxkIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYxYWUiLCAiTTk2IDY0QTY0IDY0IDAgMSAxIDIyNCA2NCA2NCA2NCAwIDEgMSA5NiA2NHptNDggMzIwbDAgOTZjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJMODAgMjg3LjggNTkuMSAzMjFjLTkuNCAxNS0yOS4yIDE5LjQtNDQuMSAxMFMtNC41IDMwMS45IDQuOSAyODdsMzkuOS02My4zQzY5LjcgMTg0IDExMy4yIDE2MCAxNjAgMTYwczkwLjMgMjQgMTE1LjIgNjMuNkwzMTUuMSAyODdjOS40IDE1IDQuOSAzNC43LTEwIDQ0LjFzLTM0LjcgNC45LTQ0LjEtMTBMMjQwIDI4Ny44IDI0MCA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC05Ni0zMiAweiJdCiAgICB9OwogICAgZmFJY2VDcmVhbSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpY2UtY3JlYW0iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMjc4NDhdLCAiZjgxMCIsICJNMzM1LjEgMTYwYy42LTUuMyAuOS0xMC42IC45LTE2IDAtNzkuNS02NC41LTE0NC0xNDQtMTQ0UzQ4IDY0LjUgNDggMTQ0YzAgNS40IC4zIDEwLjcgLjkgMTZsLS45IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4czIxLjUgNDggNDggNDhsMjg4IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLS45IDB6TTY0IDMwNEwxNjkuMiA1MjkuNWM0LjEgOC44IDEzIDE0LjUgMjIuOCAxNC41czE4LjYtNS43IDIyLjgtMTQuNUwzMjAgMzA0IDY0IDMwNHoiXQogICAgfTsKICAgIGZhQ29tcHV0ZXJNb3VzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wdXRlci1tb3VzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODQzMywgIm1vdXNlIl0sICJmOGNjIiwgIk0wIDE5MmwxNjggMCAwLTE5Mi04IDBDNzEuNiAwIDAgNzEuNiAwIDE2MGwwIDMyem0wIDQ4TDAgMzUyYzAgODguNCA3MS42IDE2MCAxNjAgMTYwbDY0IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBsMC0xMTItMzg0IDB6bTM4NC00OGwwLTMyQzM4NCA3MS42IDMxMi40IDAgMjI0IDBsLTggMCAwIDE5MiAxNjggMHoiXQogICAgfTsKICAgIGZhTW91c2UgPSBmYUNvbXB1dGVyTW91c2U7CiAgICBmYUZhdWNldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYXVjZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTAwNSIsICJNMTkyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDY0IDE4LjcgMGM4LjUgMCAxNi42IDMuNCAyMi42IDkuNGwyMi42IDIyLjYgMzIgMGM4OC40IDAgMTYwIDcxLjYgMTYwIDE2MCAwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzLTE0LjMtMzItMzItMzJsLTM2LjEgMGMtMjAuMiAyOS01My45IDQ4LTkxLjkgNDhzLTcxLjctMTktOTEuOS00OEwzMiAzNTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJsOTYgMCAyMi42LTIyLjZjNi02IDE0LjEtOS40IDIyLjYtOS40bDE4LjcgMCAwLTY0LTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgNjQgOTYgNjRsOTYgMHoiXQogICAgfTsKICAgIGZhQXdhcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXdhcmQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU1OSIsICJNMjQ1LjktMjUuOWMtMTMuNC04LjItMzAuMy04LjItNDMuNyAwLTI0LjQgMTQuOS0zOS41IDE4LjktNjguMSAxOC4zLTE1LjctLjQtMzAuMyA4LjEtMzcuOSAyMS45LTEzLjcgMjUuMS0yNC44IDM2LjItNDkuOSA0OS45LTEzLjggNy41LTIyLjIgMjIuMi0yMS45IDM3LjkgLjcgMjguNi0zLjQgNDMuNy0xOC4zIDY4LjEtOC4yIDEzLjQtOC4yIDMwLjMgMCA0My43IDE0LjkgMjQuNCAxOC45IDM5LjUgMTguMyA2OC4xLS40IDE1LjcgOC4xIDMwLjMgMjEuOSAzNy45IDIyLjEgMTIuMSAzMy4zIDIyLjEgNDUuMSA0MS41TDQyLjcgNDU4LjVjLTUuOSAxMS45LTEuMSAyNi4zIDEwLjcgMzIuMmw4NiA0M2MxMS41IDUuNyAyNS41IDEuNCAzMS43LTkuOGw1Mi44LTk1LjEgNTIuOCA5NS4xYzYuMiAxMS4yIDIwLjIgMTUuNiAzMS43IDkuOGw4Ni00M2MxMS45LTUuOSAxNi43LTIwLjMgMTAuNy0zMi4ybC00OC42LTk3LjJjMTEuNy0xOS40IDIzLTI5LjQgNDUuMS00MS41IDEzLjgtNy41IDIyLjItMjIuMiAyMS45LTM3LjktLjctMjguNiAzLjQtNDMuNyAxOC4zLTY4LjEgOC4yLTEzLjQgOC4yLTMwLjMgMC00My43LTE0LjktMjQuNC0xOC45LTM5LjUtMTguMy02OC4xIC40LTE1LjctOC4xLTMwLjMtMjEuOS0zNy45LTI1LjEtMTMuNy0zNi4yLTI0LjgtNDkuOS00OS45LTcuNS0xMy44LTIyLjItMjIuMi0zNy45LTIxLjktMjguNiAuNy00My43LTMuNC02OC4xLTE4LjN6TTIyNCA5NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGVyc29uRHJvd25pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyb3duaW5nIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDUiLCAiTTI2NCA4OGE1NiA1NiAwIDEgMSAxMTIgMCA1NiA1NiAwIDEgMSAtMTEyIDB6TTEzMy45IDY1LjZjMTYuOC01LjYgMzQuOSAzLjUgNDAuNSAyMC4ybDEwLjkgMzIuOGM5LjQgMjguMyAzMy4yIDQ5LjUgNjIuNSA1NS42IDUuNiAxLjIgMTEuMyAxLjggMTcuMSAxLjhsODggMGMxNy4yIDAgMzQuMy0yLjggNTAuNi04LjJsMTE0LjQtMzguMWMxNi44LTUuNiAzNC45IDMuNSA0MC41IDIwLjJzLTMuNSAzNC45LTIwLjIgNDAuNUw0MjMuNyAyMjguNWMtOC40IDIuOC0xNyA1LjEtMjUuNyA2LjlsLTI2LjUgODguM2MtNi4xIDMuNC0xMi4xIDcuMy0xNy45IDExLjctMjIuMSAxNi42LTI5LjEgMTYuNi01MS4yIDAtMjYuMi0xOS43LTU2LjktMzAuMi04Ny44LTMxLjNsMjAuMi02Ny4yYy01MS41LTEwLjctOTMuNS00OC4xLTExMC4yLTk4bC0xMC45LTMyLjhjLTUuNi0xNi44IDMuNS0zNC45IDIwLjItNDAuNXpNNDAzLjQgNDEyLjFDMzc5LjEgNDMwLjMgMzUxLjEgNDQ4IDMyMCA0NDhzLTU5LjEtMTcuNy04My40LTM1LjljLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTIzLjggMTcuOS01NC4xIDM1LjUtODguMSAzNS4zLTIwLjQtLjEtNDAuNy02LjctNTkuOC0yMS4xLTEwLjYtOC0xMi43LTIzLTQuNy0zMy42czIzLTEyLjcgMzMuNi00LjdjMTEuMyA4LjUgMjEuNiAxMS40IDMxLjIgMTEuNSAxNy42IC4xIDM3LjMtOS40IDU4LjktMjUuNyAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMjQgMTguMSA0MC43IDI2LjMgNTQuNSAyNi4zczMwLjUtOC4yIDU0LjUtMjYuM2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOSAyNS42LTQuNyAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFDYW1lcmFSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FtZXJhLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMGQ4IiwgIk0xMzguNyA5NmwxMC40LTMxLjJDMTU1LjYgNDUuMiAxNzMuOSAzMiAxOTQuNiAzMmwxMjIuOCAwYzIwLjcgMCAzOSAxMy4yIDQ1LjUgMzIuOEwzNzMuMyA5NiA0NDggOTZjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE2MGMwLTM1LjMgMjguNy02NCA2NC02NGw3NC43IDB6TTk2IDMwNS45YzAgMy45IDEuNCA3LjcgNCAxMC42bDQ4IDU0YzYuNCA3LjIgMTcuNiA3LjIgMjMuOSAwbDQ4LTU0YzIuNi0yLjkgNC02LjcgNC0xMC42bDAtMS45YzAtOC44LTcuMi0xNi0xNi0xNmwtMjQgMGMwLTM5LjggMzIuMi03MiA3Mi03MiA0LjQgMCA4LjcgLjQgMTIuOSAxLjJsMzQuOS0zOS4zYy0xNC42LTYuNC0zMC44LTkuOS00Ny44LTkuOS02Ni4zIDAtMTIwIDUzLjctMTIwIDEyMGwtMjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMS45em0xOTYtNDYuNWMtMi42IDIuOS00IDYuNy00IDEwLjZsMCAxLjljMCA4LjggNy4yIDE2IDE2IDE2bDI0IDBjMCAzOS44LTMyLjIgNzItNzIgNzItNC40IDAtOC43LS40LTEyLjktMS4ybC0zNC45IDM5LjNjMTQuNyA2LjQgMzAuOCA5LjkgNDcuOCA5LjkgNjYuMyAwIDEyMC01My43IDEyMC0xMjBsMjQgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xLjljMC0zLjktMS40LTcuNy00LTEwLjZsLTQ4LTU0Yy02LjQtNy4yLTE3LjYtNy4yLTIzLjkgMGwtNDggNTR6Il0KICAgIH07CiAgICBmYUZhY2VHcmluSGVhcnRzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4taGVhcnRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTI1LCAiZ3Jpbi1oZWFydHMiXSwgImY1ODQiLCAiTTI1NiA1MTJjMTQxLjQgMCAyNTYtMTE0LjYgMjU2LTI1NiAwLTIzLjMtMy4xLTQ1LjktOC45LTY3LjMgNS41LTEzLjUgOC45LTI4LjQgOC45LTQ0LjcgMC01My00My05Ni05Ni05NmwtMi45IDBjLTIuNSAwLTUgLjEtNy40IC4zLTQyLjEtMzAuNC05My44LTQ4LjMtMTQ5LjctNDguM1MxNDguNCAxNy45IDEwNi4zIDQ4LjNjLTIuNS0uMi00LjktLjMtNy40LS4zTDk2IDQ4Yy01MyAwLTk2IDQzLTk2IDk2IDAgMTYuMyAzLjUgMzEuMiA4LjkgNDQuNy01LjggMjEuNC04LjkgNDQtOC45IDY3LjMgMCAxNDEuNCAxMTQuNiAyNTYgMjU2IDI1NnpNMzg2LjcgMzI0LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDQwNC4yIDEwNS43IDM0Mi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTMyMi45IDk2YzEzLjUgMCAyNi41IDUuNCAzNiAxNC45bDkuMSA5LjEgOS4xLTkuMWM5LjUtOS41IDIyLjUtMTQuOSAzNi0xNC45bDIuOSAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgNTMuNC02Ni45IDk1LjctODkgMTA4LjItNC40IDIuNS05LjYgMi41LTE0IDAtMjIuMS0xMi41LTg5LTU0LjgtODktMTA4LjIgMC0yNi41IDIxLjUtNDggNDgtNDhsMi45IDB6bS0xODggMTQuOWw5LjEgOS4xIDkuMS05LjFjOS41LTkuNSAyMi41LTE0LjkgMzYtMTQuOWwyLjkgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDUzLjQtNjYuOSA5NS43LTg5IDEwOC4yLTQuNCAyLjUtOS42IDIuNS0xNCAwLTIyLjEtMTIuNS04OS01NC44LTg5LTEwOC4yIDAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDIuOSAwYzEzLjUgMCAyNi41IDUuNCAzNiAxNC45eiJdCiAgICB9OwogICAgZmFHcmluSGVhcnRzMiA9IGZhRmFjZUdyaW5IZWFydHMyOwogICAgZmFGaWxlRnJhZ21lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS1mcmFnbWVudCIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJlNjk3IiwgIk02NCAwQzI4LjcgMCAwIDI4LjcgMCA2NGwwIDI0MCAxMjggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDEyOCAxMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3Ny41YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDI1OC43IDE4LjdDMjQ2LjcgNi43IDIzMC41IDAgMjEzLjUgMEw2NCAwek0zMjUuNSAxNzZMMjMyIDE3NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRMMjA4IDU4LjUgMzI1LjUgMTc2ek0zMiAzNTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAweiJdCiAgICB9OwogICAgZmFQZXJzb25NaWxpdGFyeVJpZmxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1taWxpdGFyeS1yaWZsZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTRiIiwgIk0xMjggMzljMC0xMyAxMC0yMy44IDIyLjktMjQuOUwzMDIuNyAxLjRDMzEyIC43IDMyMCA4IDMyMCAxNy40TDMyMCA0OGMwIDguOC03LjIgMTYtMTYgMTZMMTUzIDY0Yy0xMy44IDAtMjUtMTEuMi0yNS0yNXptMTcuNiA1N2wxNTYuOCAwYzEgNS4yIDEuNiAxMC41IDEuNiAxNiAwIDQ0LjItMzUuOCA4MC04MCA4MHMtODAtMzUuOC04MC04MGMwLTUuNSAuNi0xMC44IDEuNi0xNnptMjI4IDM2NC4zTDMyMCAzNjkuNyAzMjAgNDgwYzAgMS4zLS4xIDIuNS0uMiAzLjhMMTQ1LjUgMjM0LjljMTYuNi03LjEgMzQuNi0xMC45IDUzLjMtMTAuOWw1MC40IDBjMTUuOSAwIDMxLjMgMi44IDQ1LjggNy45TDM4OS45IDY3LjdjLTcuNy00LjQtMTAuMy0xNC4yLTUuOS0yMS45czE0LjItMTAuMyAyMS45LTUuOWwyNy43IDE2YzcuNyA0LjQgMTAuMyAxNC4yIDUuOSAyMS45bC01NS41IDk2LjEgMS42IC45YzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdMMzYwLjcgMjgyYzIgMi44IDMuOSA1LjggNS43IDguOGw3Ni4xIDEyOC44YzExLjIgMTkgNC45IDQzLjUtMTQuMSA1NC44cy00My41IDQuOS01NC44LTE0LjF6TTI4OCA1MTJsLTEyOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExMC4zLTUzLjYgOTAuNmMtMTEuMiAxOS0zNS44IDI1LjMtNTQuOCAxNC4xUy01LjcgNDM4LjcgNS42IDQxOS43TDgxLjcgMjkwLjhjOS40LTE1LjggMjEuNy0yOS4zIDM2LTQwTDI5OS4xIDUxMGMtMy41IDEuMy03LjIgMi0xMS4xIDJ6TTI2NCAzMjBhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFUb2dnbGVPbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0b2dnbGUtb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjIwNSIsICJNMTkyIDY0Qzg2IDY0IDAgMTUwIDAgMjU2Uzg2IDQ0OCAxOTIgNDQ4bDE5MiAwYzEwNiAwIDE5Mi04NiAxOTItMTkyUzQ5MCA2NCAzODQgNjRMMTkyIDY0em0xOTIgOTZhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6Il0KICAgIH07CiAgICBmYUx1bmdzVmlydXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibHVuZ3MtdmlydXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA2NyIsICJNMjg4IDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTUxLjNjOS42LTQuOCAyMC41LTcuNSAzMi03LjVzMjIuNCAyLjcgMzIgNy41TDMyMCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDUwLjEgNDUxYzggMTguMyA4LjEgMzkuMiAuMiA1Ny41IDEwLjIgMi4zIDIwLjYgMy41IDMxLjIgMy41IDUyLjIgMCA5NC41LTQyLjMgOTQuNS05NC41bDAtNi4yYzAtMTExLjEtMzYuNy0yMTktMTA0LjQtMzA3TDQyOC45IDQ4LjdjLTguMS0xMC42LTIwLjctMTYuNy0zNC0xNi43LTIzLjcgMC00Mi45IDE5LjItNDIuOSA0Mi45bDAgMTM5LjljMS4yIDIuMiAyLjIgNC42IDMuMSA2LjkgMjYuNC0xMS42IDU4LjMtNi42IDc5LjkgMTVzMjYuNiA1My42IDE1IDc5LjlDNDc3IDMyNy4yIDQ5NiAzNTMuMyA0OTYgMzgzLjhzLTE5IDU2LjctNDUuOSA2Ny4xek0yMjAuOSAyMjEuOGMuOS0yLjQgMi00LjcgMy4xLTYuOWwwLTEzOC41YzAtMjQuNS0xOS45LTQ0LjQtNDQuNC00NC40LTEyLjUgMC0yNC40IDUuMy0zMi44IDE0LjVsLTI2LjQgMjlDNDIuOSAxNjAuOCAwIDI3MS44IDAgMzg3bDAgMzAuNWMwIDUyLjIgNDIuMyA5NC41IDk0LjUgOTQuNSAxMC41IDAgMjEtMS4yIDMxLjItMy41LTcuOS0xOC4zLTcuOC0zOS4zIC4yLTU3LjUtMjYuOS0xMC40LTQ1LjktMzYuNi00NS45LTY3LjFzMTktNTYuNyA0NS45LTY3LjFjLTExLjYtMjYuNC02LjYtNTguMyAxNS03OS45czUzLjYtMjYuNiA3OS45LTE1ek0xNTIgNDA4YzI4LjggMCA0My4yIDM0LjggMjIuOSA1NS4yLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMyMC40LTIwLjQgNTUuMi01LjkgNTUuMiAyMi45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yOC44IDM0LjgtNDMuMiA1NS4yLTIyLjkgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0yMC40LTIwLjQtNS45LTU1LjIgMjIuOS01NS4yIDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yOC44IDAtNDMuMi0zNC44LTIyLjktNTUuMiA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0yMC40IDIwLjQtNTUuMiA1LjktNTUuMi0yMi45IDAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0YzAgMjguOC0zNC44IDQzLjItNTUuMiAyMi45LTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMjAuNCAyMC40IDUuOSA1NS4yLTIyLjkgNTUuMi0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0em0xMDQtODBhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtdGVubmlzLXBhZGRsZS1iYWxsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTU1LCAicGluZy1wb25nLXBhZGRsZS1iYWxsIiwgInRhYmxlLXRlbm5pcyJdLCAiZjQ1ZCIsICJNOTcgMTI3bDY3LjQtNjcuNGMzOC4yLTM4LjIgOTAtNTkuNiAxNDQtNTkuNiAxMTIuNSAwIDIwMy43IDkxLjIgMjAzLjcgMjAzLjYgMCA0Ni40LTE1LjggOTEuMS00NC41IDEyNy0yMy42LTE2LjgtNTIuNC0yNi43LTgzLjUtMjYuNy0zMS4xIDAtNTkuOSA5LjktODMuNCAyNi42TDk3IDEyN3pNMjQwIDQ0OGMwIDkuNyAxIDE5LjEgMi44IDI4LjItMTkuOC01LjItMzgtMTUuNS01Mi43LTMwLjItMTIuMi0xMi4yLTMxLjktMTIuMi00NC4xIDBMOTYuNiA0OTUuNGMtMTAuNiAxMC42LTI1IDE2LjYtNDAgMTYuNi0zMS4yIDAtNTYuNi0yNS4zLTU2LjYtNTYuNiAwLTE1IDYtMjkuNCAxNi42LTQwbDQ5LjQtNDkuNGMxMi4yLTEyLjIgMTIuMi0zMS45IDAtNDQuMS0yMS43LTIxLjctMzMuOS01MS4yLTMzLjktODEuOSAwLTI5LjQgMTEuMS01Ny42IDMxLjEtNzlMMjY2LjYgMzY0LjZDMjQ5LjkgMzg4LjEgMjQwIDQxNi45IDI0MCA0NDh6bTE0NC05NmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhUGluZ1BvbmdQYWRkbGVCYWxsID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYVRhYmxlVGVubmlzID0gZmFUYWJsZVRlbm5pc1BhZGRsZUJhbGw7CiAgICBmYUJveGVzUGFja2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib3hlcy1wYWNraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0YzciLCAiTTIwOCAwbDgwIDAgMCA1NmMwIDEzLjMgMTAuNyAyNCAyNCAyNGw4MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNTYgODAgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDQxNmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTA4LjggMGM4LjItMTQuMSAxMi44LTMwLjUgMTIuOC00OGwwLTE2MGMxMC0xMy40IDE2LTMwIDE2LTQ4bDAtMzJjMC00NC4yLTM1LjgtODAtODAtODBsLTE3NiAwIDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTMyIDMzNmwzMjAgMCAwIDEyOGMwIDI2LjUtMjEuNSA0OC00OCA0OEw4MCA1MTJjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTI4ek00OCAxOTJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNoYWxrYm9hcmQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWNoYWxrYm9hcmQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZCIsICJNMTkyIDgwYTU2IDU2IDAgMSAwIDAtMTEyIDU2IDU2IDAgMSAwIDAgMTEyek0xNzYgNTEybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMzNiAxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTYgMCAwLTQ4IDE5MiAwIDAgMTkyLTE5MiAwIDAtMzItNjQgMCAwIDQ4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDIyNCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjI0YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDM2OCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LTEyMi43IDBjLTQ1LjYgMC04OC41IDIxLjYtMTE1LjYgNTguMkwxNC4zIDI2MC45Yy0xMC41IDE0LjItNy42IDM0LjIgNi42IDQ0LjhzMzQuMiA3LjYgNDQuOC02LjZMMTEyIDIzNi43IDExMiA1MTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMnoiXQogICAgfTsKICAgIGZhRGljZVR3byA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWNlLXR3byIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4NTddLCAiZjUyOCIsICJNMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZ6TTM1MiAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNMTI4IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFycm93UmlnaHRBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg2NDQsICJleGNoYW5nZSJdLCAiZjBlYyIsICJNNTAyLjYgMTUwLjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM0w0MDIuNyAxNjAgMzIgMTYwYy0xNy43IDAtMzItMTQuMy0zMi0zMlMxNC4zIDk2IDMyIDk2bDM3MC43IDAtNDEuNC00MS40Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwbDk2IDk2YzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zem0tMzk3LjMgMzUybC05Ni05NmMtMTIuNS0xMi41LTEyLjUtMzIuOCAwLTQ1LjNsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM0wxMDkuMyAzNTIgNDgwIDM1MmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzcwLjcgMCA0MS40IDQxLjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYUV4Y2hhbmdlID0gZmFBcnJvd1JpZ2h0QXJyb3dMZWZ0OwogICAgZmFGb290YmFsbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb290YmFsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk0NCwgImZvb3RiYWxsLWJhbGwiXSwgImY0NGUiLCAiTTI2MS4xIDIyLjZjLTg5IDE4LTE1MC41IDYzLjQtMTkwIDEyMy45LTIzLjMgMzUuNi0zOC4xIDc1LjMtNDYuNyAxMTUuNUwyNTEuOSA0ODkuNGM4OS0xOCAxNTAuNS02My40IDE5MC4xLTEyMy45IDIzLjMtMzUuNiAzOC4xLTc1LjMgNDYuNy0xMTUuNUwyNjEuMSAyMi42em0yMzYgMTY4LjFjMy4yLTQyLjMgLjctODMuMy00LjgtMTE4LjctNC40LTI3LjgtMjYuOC00OC01My4xLTUxLjYtNDMtNS45LTgyLjItNy41LTExNy44LTUuNEw0OTcuMSAxOTAuNnpNMTkxLjcgNDk3LjFMMTUuOSAzMjEuNGMtMy4yIDQyLjMtLjcgODMuMyA0LjggMTE4LjcgNC40IDI3LjggMjYuOCA0OCA1My4xIDUxLjYgNDMgNS45IDgyLjIgNy41IDExNy44IDUuNHpNMjcxLjUgMTQzYzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXptLTY0IDY0YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwbDY0IDY0YzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBsLTY0LTY0Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXoiXQogICAgfTsKICAgIGZhRm9vdGJhbGxCYWxsID0gZmFGb290YmFsbDsKICAgIGZhVHJ1Y2tNb25zdGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLW1vbnN0ZXIiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjYzYiIsICJNMzM2IDk2bDQ4IDY0LTEyOCAwIDAtNjQgODAgMHptMTI4IDY0TDM4Ny4yIDU3LjZDMzc1LjEgNDEuNSAzNTYuMSAzMiAzMzYgMzJMMjI0IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2LTE0NCAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0YzAgMTguMSAxMC4xIDMzLjkgMjQuOSA0Mi4xLS41IDUuNyAxLjEgMTEuNiA0LjcgMTYuNC0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjMgMzEuM2wxMS4zIDExLjNjOC42IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjctOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjMtMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAyLjQtMy4yIDMuOS02LjggNC41LTEwLjVsMTE0LjIgMGMuNiAzLjcgMi4xIDcuMyA0LjUgMTAuNS0zLjcgNi45LTYuOCAxNC4xLTkgMjEuOC0xMS42IDEuNy0yMC42IDExLjctMjAuNiAyMy44bDAgMTZjMCAxMi4xIDguOSAyMi4xIDIwLjYgMjMuOCAyLjIgNy42IDUuMyAxNC45IDkgMjEuOC03IDkuNC02LjMgMjIuOCAyLjIgMzEuM2wxMS4zIDExLjNjOC41IDguNiAyMS45IDkuMyAzMS4zIDIuMiA2LjggMy43IDE0LjEgNi44IDIxLjcgOSAxLjcgMTEuNiAxMS43IDIwLjYgMjMuOCAyMC42bDE2IDBjMTIuMSAwIDIyLjEtOC45IDIzLjgtMjAuNiA3LjYtMi4yIDE0LjktNS4zIDIxLjgtOSA5LjQgNyAyMi44IDYuMyAzMS4zLTIuMmwxMS4zLTExLjNjOC42LTguNiA5LjMtMjEuOSAyLjItMzEuMyAzLjctNi44IDYuOC0xNC4xIDktMjEuNyAxMS42LTEuNyAyMC42LTExLjcgMjAuNi0yMy44bDAtMTZjMC0xMi4xLTguOS0yMi4xLTIwLjYtMjMuOC0yLjItNy42LTUuMy0xNC45LTktMjEuNyAzLjYtNC44IDUuMi0xMC43IDQuNy0xNi40IDE0LjgtOC4yIDI0LjktMjMuOSAyNC45LTQyLjFsMC02NGMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHpNMTI4IDMzNmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTI3MiA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFBc3RlcmlzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhc3RlcmlzayIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMDMzLCA2MTU0NV0sICIyYSIsICJNMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxNjguNiAxNDQtODMuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdzMy42IDM0LjktMTEuNyA0My43TDI4OCAyNTYgNDMyIDMzOS4xYzE1LjMgOC44IDIwLjYgMjguNCAxMS43IDQzLjdzLTI4LjQgMjAuNi00My43IDExLjdMMjU2IDMxMS40IDI1NiA0ODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNjguNi0xNDQgODMuMWMtMTUuMyA4LjgtMzQuOSAzLjYtNDMuNy0xMS43Uy43IDM0OCAxNiAzMzkuMUwxNjAgMjU2IDE2IDE3Mi45Qy43IDE2NC00LjUgMTQ0LjUgNC4zIDEyOS4xUzMyLjcgMTA4LjYgNDggMTE3LjRMMTkyIDIwMC42IDE5MiAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnoiXQogICAgfTsKICAgIGZhQmF0dGVyeUZ1bGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1mdWxsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjY3LCAiYmF0dGVyeSIsICJiYXR0ZXJ5LTUiXSwgImYyNDAiLCAiTTUyOCAxMjhjOC44IDAgMTYgNy4yIDE2IDE2bDAgMjI0YzAgOC44LTcuMiAxNi0xNiAxNmwtNDE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTIyNGMwLTguOCA3LjItMTYgMTYtMTZsNDE2IDB6TTExMiA2NGMtNDQuMiAwLTgwIDM1LjgtODAgODBsMCAyMjRjMCA0NC4yIDM1LjggODAgODAgODBsNDE2IDBjNDQuMiAwIDgwLTM1LjggODAtODBsMC00OGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybDAtNDhjMC00NC4yLTM1LjgtODAtODAtODBMMTEyIDY0em01NiAxMTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTEyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDMwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0bC0zMDQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeSA9IGZhQmF0dGVyeUZ1bGw7CiAgICBmYUJhdHRlcnk1ID0gZmFCYXR0ZXJ5RnVsbDsKICAgIGZhQ2hpbGREcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGlsZC1kcmVzcyIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJlNTljIiwgIk0yMjQgNjRBNjQgNjQgMCAxIDAgOTYgNjQgNjQgNjQgMCAxIDAgMjI0IDY0ek04OCA0MDBsMCA4MGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtODAgMTYgMCAwIDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC04MCAxNy44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTMxLjEtOTMuNCAyOC43IDM3LjhjMTAuNyAxNC4xIDMwLjggMTYuOCA0NC44IDYuMnMxNi44LTMwLjcgNi4yLTQ0LjhMMjU0LjYgMjA3Yy0yMi40LTI5LjYtNTcuNS00Ny05NC42LTQ3cy03Mi4yIDE3LjQtOTQuNiA0N0w2LjUgMjg0LjdjLTEwLjcgMTQuMS03LjkgMzQuMiA2LjIgNDQuOHMzNC4yIDcuOSA0NC44LTYuMkw4Ni4yIDI4NS41IDU1IDM3OC45QzUxLjYgMzg5LjMgNTkuMyA0MDAgNzAuMiA0MDBMODggNDAweiJdCiAgICB9OwogICAgZmFGYWNlS2lzc0JlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy1iZWFtIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NTM3LCAia2lzcy1iZWFtIl0sICJmNTk3IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMjQwIDI4OGwzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4IDAgMTIuMy00LjYgMjMuNS0xMi4yIDMyIDcuNiA4LjUgMTIuMiAxOS43IDEyLjIgMzIgMCAyNi41LTIxLjUgNDgtNDggNDhsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2czcuMi0xNiAxNi0xNmwxNiAwYzguOCAwIDE2LTcuMiAxNi0xNnMtNy4yLTE2LTE2LTE2bC0xNiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2ek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhS2lzc0JlYW0yID0gZmFGYWNlS2lzc0JlYW0yOwogICAgZmFUcmFzaENhbkFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhc2gtY2FuLWFycm93LXVwIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRyYXNoLXJlc3RvcmUtYWx0Il0sICJmODJhIiwgIk0xNjcuMS0xNmwxMTMuOSAwYzEzLjggMCAyNiA4LjggMzAuNCAyMS45TDMyMCAzMiA0MTYgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgOTZDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMybDk2IDAgOC43LTI2LjFDMTQxLjEtNy4yIDE1My4zLTE2IDE2Ny4xLTE2ek0zMiAxNDRsMzg0IDAgMCAzMDRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMOTYgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTMwNHptMjA5IDc5Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtNzIgNzJjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGwzMS0zMSAwIDEwMi4xYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMDIuMSAzMSAzMWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTcyLTcyeiJdCiAgICB9OwogICAgZmFUcmFzaFJlc3RvcmVBbHQgPSBmYVRyYXNoQ2FuQXJyb3dVcDsKICAgIGZhRm9udCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb250IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImYwMzEiLCAiTTI4NS4xIDUwLjdDMjc5LjkgMzkuMyAyNjguNSAzMiAyNTYgMzJzLTIzLjkgNy4zLTI5LjEgMTguN0w1OS41IDQxNiA0OCA0MTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtNi4xIDAgMjItNDggMjA4LjMgMCAyMiA0OC02LjEgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xMS41IDAtMTY3LjQtMzY1LjN6TTMzMC44IDMwNEwxODEuMiAzMDQgMjU2IDE0MC44IDMzMC44IDMwNHoiXQogICAgfTsKICAgIGZhQm9yZUhvbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZS1ob2xlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YzMiLCAiTTI1NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDIzMi42Yy0xOS4xIDExLjEtMzIgMzEuNy0zMiA1NS40IDAgMzUuMyAyOC43IDY0IDY0IDY0czY0LTI4LjcgNjQtNjRjMC0yMy43LTEyLjktNDQuNC0zMi01NS40TDI4OCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnpNMCAzODRsMCA2NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI3MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNDggMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxNDRjMCA2MS45LTUwLjEgMTEyLTExMiAxMTJTMTQ0IDM4MS45IDE0NCAzMjBsMC0xNDRjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4TDAgMzg0eiJdCiAgICB9OwogICAgZmFWaXJ1c0NvdmlkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInZpcnVzLWNvdmlkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0YTgiLCAiTTE5MiAyNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwIDAgMzMuNmMzMC43IDQuMiA1OC44IDE2LjMgODIuMyAzNC4xTDM4Ni4xIDkyIDM3NC44IDgwLjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw1Ni42IDU2LjZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGwtMTEuMy0xMS4zLTIzLjggMjMuOGMxNy45IDIzLjUgMjkuOSA1MS43IDM0LjEgODIuM2wzMy42IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgODBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xNi0zMy42IDBjLTQuMiAzMC43LTE2LjMgNTguOC0zNC4xIDgyLjNsMjMuOCAyMy44IDExLjMtMTEuM2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTU2LjYgNTYuNmMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOWwxMS4zLTExLjMtMjMuOC0yMy44Yy0yMy41IDE3LjktNTEuNyAyOS45LTgyLjMgMzQuMWwwIDMzLjYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxNiAwIDAtMzMuNmMtMzAuNy00LjItNTguOC0xNi4zLTgyLjMtMzQuMWwtMjMuOCAyMy44IDExLjMgMTEuM2M5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwTDQ2LjcgNDA4LjdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxMS4zIDExLjMgMjMuOC0yMy44Qzk3LjkgMzM4LjggODUuOCAzMTAuNyA4MS42IDI4MGwtMzMuNiAwIDAgMTZjMCAxMy4zLTEwLjcgMjQtMjQgMjRTMCAzMDkuMyAwIDI5NmwwLTgwYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxNiAzMy42IDBjNC4yLTMwLjcgMTYuMy01OC44IDM0LjEtODIuM0w5MiAxMjUuOSA4MC42IDEzNy4yYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDU2LjYtNTYuNmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMTI1LjkgOTIgMTQ5LjcgMTE1LjdjMjMuNS0xNy45IDUxLjctMjkuOSA4Mi4zLTM0LjFsMC0zMy42LTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0zMiAyMDBhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptOTYgOTZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFGaWxlUGRmMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXBkZiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWMxIiwgIk05NiAwQzYwLjcgMCAzMiAyOC43IDMyIDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDgwIDAgMC0xMTJjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTc2IDAgMC0xNjUuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNMjQwIDM4MGMtMTEgMC0yMCA5LTIwIDIwbDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtMjggMTIgMGMzMy4xIDAgNjAtMjYuOSA2MC02MHMtMjYuOS02MC02MC02MGwtMzIgMHptMzIgODBsLTEyIDAgMC00MCAxMiAwYzExIDAgMjAgOSAyMCAyMHMtOSAyMC0yMCAyMHptOTYtODBjLTExIDAtMjAgOS0yMCAyMGwwIDEyOGMwIDExIDkgMjAgMjAgMjBsMzIgMGMyOC43IDAgNTItMjMuMyA1Mi01MmwwLTY0YzAtMjguNy0yMy4zLTUyLTUyLTUybC0zMiAwem0yMCAxMjhsMC04OCAxMiAwYzYuNiAwIDEyIDUuNCAxMiAxMmwwIDY0YzAgNi42LTUuNCAxMi0xMiAxMmwtMTIgMHptODgtMTA4bDAgMTI4YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNDQgMjggMGMxMSAwIDIwLTkgMjAtMjBzLTktMjAtMjAtMjBsLTI4IDAgMC0yNCAyOCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNDggMGMtMTEgMC0yMCA5LTIwIDIweiJdCiAgICB9OwogICAgZmFMYW5ndWFnZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5ndWFnZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMWFiIiwgIk0xNjAgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyIDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05LjYgMC04LjQgMjMuMWMtMTYuNCA0NS4yLTQxLjEgODYuNS03Mi4yIDEyMiAxNC4yIDguOCAyOSAxNi42IDQ0LjQgMjMuNWw1MC40IDIyLjQgNjIuMi0xNDBjNS4xLTExLjYgMTYuNi0xOSAyOS4yLTE5czI0LjEgNy40IDI5LjIgMTlsMTI4IDI4OGM3LjIgMTYuMi0uMSAzNS4xLTE2LjIgNDIuMnMtMzUuMS0uMS00Mi4yLTE2LjJsLTIwLTQ1LTE1Ny41IDAtMjAgNDVjLTcuMiAxNi4yLTI2LjEgMjMuNC00Mi4yIDE2LjJzLTIzLjQtMjYuMS0xNi4yLTQyLjJsMzkuOC04OS41LTUwLjQtMjIuNGMtMjMtMTAuMi00NS0yMi40LTY1LjgtMzYuNC0yMS4zIDE3LjItNDQuNiAzMi4yLTY5LjUgNDQuN0w3OC4zIDM4MC42Yy0xNS44IDcuOS0zNSAxLjUtNDIuOS0xNC4zcy0xLjUtMzUgMTQuMy00Mi45bDM0LjUtMTcuM2MxNi4zLTguMiAzMS44LTE3LjcgNDYuNC0yOC4zLTEzLjgtMTIuNy0yNi44LTI2LjQtMzguOS00MC45TDgxLjYgMjI0LjdjLTExLjMtMTMuNi05LjUtMzMuOCA0LjEtNDUuMXMzMy44LTkuNSA0NS4xIDQuMWwxMC4yIDEyLjJjMTEuNSAxMy45IDI0LjEgMjYuOCAzNy40IDM4LjcgMjcuNS0zMC40IDQ5LjItNjYuMSA2My41LTEwNS40bC41LTEuMi0yMTAuMyAwQzE0LjMgMTI4IDAgMTEzLjcgMCA5NlMxNC4zIDY0IDMyIDY0bDk2IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnpNNDE2IDI3MC44TDM2NS43IDM4NCA0NjYuMyAzODQgNDE2IDI3MC44eiJdCiAgICB9OwogICAgZmFTaGllbGRIYWx2ZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkLWhhbHZlZCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaGllbGQtYWx0Il0sICJmM2VkIiwgIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6bTAgNjYuOGwwIDM3OC4xYzEzOC02Ni44IDE3NS4xLTIxNC44IDE3Ni0zMDMuNGwtMTc2LTc0LjYgMCAweiJdCiAgICB9OwogICAgZmFTaGllbGRBbHQgPSBmYVNoaWVsZEhhbHZlZDsKICAgIGZhQ2FyZXRVcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC11cCIsCiAgICAgIGljb246IFszMjAsIDUxMiwgW10sICJmMGQ4IiwgIk0xNDAuMyAxMzUuMmMxMi42LTEwLjMgMzEuMS05LjUgNDIuOCAyLjJsMTI4IDEyOGM5LjIgOS4yIDExLjkgMjIuOSA2LjkgMzQuOVMzMDEuNCAzMjAgMjg4LjUgMzIwbC0yNTYgMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOFMuNyAyNzQuNSA5LjkgMjY1LjRsMTI4LTEyOCAyLjQtMi4yeiJdCiAgICB9OwogICAgZmFGaWxlUGVuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtcGVuIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4MjIxLCAiZmlsZS1lZGl0Il0sICJmMzFjIiwgIk0xMjguMSAwYy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwxNDYuMiAwIDEwLjktNTQuNWM0LjMtMjEuNyAxNS00MS42IDMwLjYtNTcuMmwxMzIuMi0xMzIuMiAwLTk3LjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMzIyLjggMTguN0MzMTAuOCA2LjcgMjk0LjUgMCAyNzcuNiAwTDEyOC4xIDB6TTM4OS42IDE3NmwtOTMuNSAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTkzLjUgMTE3LjUgMTE3LjV6TTMzMi4zIDQ2Ni45bC0xMS45IDU5LjZjLS4yIC45LS4zIDEuOS0uMyAyLjkgMCA4IDYuNSAxNC42IDE0LjYgMTQuNiAxIDAgMS45LS4xIDIuOS0uM2w1OS42LTExLjljMTIuNC0yLjUgMjMuOC04LjYgMzIuNy0xNy41bDExOC45LTExOC45LTgwLTgwLTExOC45IDExOC45Yy04LjkgOC45LTE1IDIwLjMtMTcuNSAzMi43em0yNjcuOC0xMjNjMjIuMS0yMi4xIDIyLjEtNTcuOSAwLTgwcy01Ny45LTIyLjEtODAgMGwtMjguOCAyOC44IDgwIDgwIDI4LjgtMjguOHoiXQogICAgfTsKICAgIGZhRmlsZUVkaXQgPSBmYUZpbGVQZW47CiAgICBmYVBlcnNvbkJpa2luZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tYmlraW5nIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4NjkyLCAiYmlraW5nIl0sICJmODRhIiwgIk0zNjggOTZhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yNy4yIDY0bC02MS44LTQ4LjhjLTE3LjMtMTMuNi00MS43LTEzLjgtNTkuMS0uM2wtODMuMSA2NC4yYy0zMC43IDIzLjgtMjguNSA3MC44IDQuMyA5MS42TDI1NiAzMDUuMSAyNTYgNDE2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjhjMC0xMC43LTUuMy0yMC43LTE0LjItMjYuNkwyNjMgMjMyLjkgMzIzLjMgMTg0LjQgMzY0IDIxN2M1LjcgNC41IDEyLjcgNyAyMCA3bDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTUyLjggMHpNMTEyIDUxMmExMTIgMTEyIDAgMSAwIDAtMjI0IDExMiAxMTIgMCAxIDAgMCAyMjR6bTM1MiAwYTExMiAxMTIgMCAxIDAgMC0yMjQgMTEyIDExMiAwIDEgMCAwIDIyNHoiXQogICAgfTsKICAgIGZhQmlraW5nID0gZmFQZXJzb25CaWtpbmc7CiAgICBmYUJvb2tPcGVuUmVhZGVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stb3Blbi1yZWFkZXIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYm9vay1yZWFkZXIiXSwgImY1ZGEiLCAiTTI1NiAxNTJhODggODggMCAxIDAgMC0xNzYgODggODggMCAxIDAgMCAxNzZ6bTAgMjk4LjdsMC0xNDkuM2MxNi4zLTYuOCAzMi45LTEzLjcgNDkuNy0yMC43IDM5LTE2LjIgODAuOC0yNC42IDEyMy4xLTI0LjZsMTkuMiAwIDAgMTYwLTE5LjIgMGMtNTkuMSAwLTExNy43IDExLjctMTcyLjMgMzQuNWwtLjUgLjJ6TTI1NiAyMzJsLTI1LjEtMTAuNUMxODQuMSAyMDIgMTMzLjkgMTkyIDgzLjIgMTkyTDQ4IDE5MmMtMjYuNSAwLTQ4IDIxLjUtNDggNDhMMCA0MzJjMCAyNi41IDIxLjUgNDggNDggNDhsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41bDEyLjggNS4zYzcuOSAzLjMgMTYuNyAzLjMgMjQuNiAwbDEyLjgtNS4zYzQ2LjgtMTkuNSA5Ny0yOS41IDE0Ny43LTI5LjVsMzUuMiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMTkyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC0zNS4yIDBjLTUwLjcgMC0xMDAuOSAxMC0xNDcuNyAyOS41TDI1NiAyMzJ6Il0KICAgIH07CiAgICBmYUJvb2tSZWFkZXIgPSBmYUJvb2tPcGVuUmVhZGVyOwogICAgZmFHbGFzc1dhdGVyRHJvcGxldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJnbGFzcy13YXRlci1kcm9wbGV0IiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImU0ZjUiLCAiTTMyIDBDMjMuMSAwIDE0LjYgMy43IDguNiAxMC4yUy0uNiAyNS40IC4xIDM0LjNMMjguOSA0MzcuN2MzIDQxLjkgMzcuOCA3NC4zIDc5LjggNzQuM2wxNjYuNiAwYzQyIDAgNzYuOC0zMi40IDc5LjgtNzQuM0wzODMuOSAzNC4zYy42LTguOS0yLjQtMTcuNi04LjUtMjQuMVMzNjAuOSAwIDM1MiAwTDMyIDB6TTgzIDI5Ny41TDY2LjQgNjQgMzE3LjYgNjQgMzAxIDI5Ny41IDI4OCAzMDRjLTIwLjEgMTAuMS00My45IDEwLjEtNjQgMHMtNDMuOS0xMC4xLTY0IDAtNDMuOSAxMC4xLTY0IDBsLTEzLTYuNXpNMjU2IDE5NmMwLTI0LTMzLjctNzAuMS01Mi4yLTkzLjUtNi4xLTcuNy0xNy41LTcuNy0yMy42IDAtMTguNSAyMy40LTUyLjIgNjkuNS01Mi4yIDkzLjUgMCAzMy4xIDI4LjcgNjAgNjQgNjBzNjQtMjYuOSA2NC02MHoiXQogICAgfTsKICAgIGZhVG93ZXJCcm9hZGNhc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItYnJvYWRjYXN0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImJyb2FkY2FzdC10b3dlciJdLCAiZjUxOSIsICJNODcuOSAxMS41Yy0xMS4zLTYuOS0yNi4xLTMuMi0zMyA4LjEtMjQuOCA0MS0zOSA4OS4xLTM5IDE0MC40czE0LjIgOTkuNCAzOSAxNDAuNGM2LjkgMTEuMyAyMS42IDE1IDMzIDguMXMxNS0yMS42IDguMS0zM0M3NS43IDI0MS45IDY0IDIwMi4zIDY0IDE2MFM3NS43IDc4LjEgOTYuMSA0NC40YzYuOS0xMS4zIDMuMi0yNi4xLTguMS0zM3ptNDAwLjEgMGMtMTEuMyA2LjktMTUgMjEuNi04LjEgMzMgMjAuNCAzMy43IDMyLjEgNzMuMyAzMi4xIDExNS42cy0xMS43IDgxLjktMzIuMSAxMTUuNmMtNi45IDExLjMtMy4yIDI2LjEgOC4xIDMzczI2LjEgMy4yIDMzLTguMWMyNC44LTQxIDM5LTg5LjEgMzktMTQwLjRTNTQ1LjggNjAuNiA1MjEgMTkuNmMtNi45LTExLjMtMjEuNi0xNS0zMy04LjF6TTMyMCAyMTUuNGMxOS4xLTExLjEgMzItMzEuNyAzMi01NS40IDAtMzUuMy0yOC43LTY0LTY0LTY0cy02NCAyOC43LTY0IDY0YzAgMjMuNyAxMi45IDQ0LjQgMzIgNTUuNEwyNTYgNDgwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0yNjQuNnpNMTgwLjIgOTFjNy4yLTExLjIgMy45LTI2LTcuMi0zMy4ycy0yNi0zLjktMzMuMiA3LjJjLTE3LjYgMjcuNC0yNy44IDYwLTI3LjggOTVzMTAuMiA2Ny42IDI3LjggOTVjNy4yIDExLjIgMjIgMTQuNCAzMy4yIDcuMnMxNC40LTIyIDcuMi0zMy4yYy0xMi44LTE5LjktMjAuMi00My42LTIwLjItNjlzNy40LTQ5LjEgMjAuMi02OXpNNDM2LjIgNjVjLTcuMi0xMS4yLTIyLTE0LjQtMzMuMi03LjJzLTE0LjQgMjItNy4yIDMzLjJjMTIuOCAxOS45IDIwLjIgNDMuNiAyMC4yIDY5cy03LjQgNDkuMS0yMC4yIDY5Yy03LjIgMTEuMi0zLjkgMjYgNy4yIDMzLjJzMjYgMy45IDMzLjItNy4yYzE3LjYtMjcuNCAyNy44LTYwIDI3LjgtOTVzLTEwLjItNjcuNi0yNy44LTk1eiJdCiAgICB9OwogICAgZmFCcm9hZGNhc3RUb3dlciA9IGZhVG93ZXJCcm9hZGNhc3Q7CiAgICBmYU1pbmltaXplID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1pbmltaXplIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImNvbXByZXNzLWFycm93cy1hbHQiXSwgImY3OGMiLCAiTTQ1NiAyMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTkuNyA1LjgtMTguNSAxNC44LTIyLjJTMzIyLjEgMzIuMiAzMjkgMzlsNDAgNDAgNzMuNC03My40QzQ0NiAyIDQ1MC45IDAgNDU2IDBzMTAgMiAxMy43IDUuN2wzNi43IDM2LjdDNTEwIDQ2IDUxMiA1MC45IDUxMiA1NnMtMiAxMC01LjcgMTMuN0w0MzMgMTQzIDQ3MyAxODNjNi45IDYuOSA4LjkgMTcuMiA1LjIgMjYuMlM0NjUuNyAyMjQgNDU2IDIyNHptMCA2NGM5LjcgMCAxOC41IDUuOCAyMi4yIDE0LjhzMS43IDE5LjMtNS4yIDI2LjJsLTQwIDQwIDczLjQgNzMuNGMzLjYgMy42IDUuNyA4LjUgNS43IDEzLjdzLTIgMTAtNS43IDEzLjdsLTM2LjcgMzYuN0M0NjYgNTEwIDQ2MS4xIDUxMiA0NTYgNTEycy0xMC0yLTEzLjctNS43TDM2OSA0MzMgMzI5IDQ3M2MtNi45IDYuOS0xNy4yIDguOS0yNi4yIDUuMlMyODggNDY1LjcgMjg4IDQ1NmwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNDQgMHptLTI1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTQ0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTQwLTQwLTczLjQgNzMuNEM2NiA1MTAgNjEuMSA1MTIgNTYgNTEycy0xMC0yLTEzLjctNS43TDUuNyA0NjkuN0MyIDQ2NiAwIDQ2MS4xIDAgNDU2czItMTAgNS43LTEzLjdMNzkgMzY5IDM5IDMyOWMtNi45LTYuOS04LjktMTcuMi01LjItMjYuMlM0Ni4zIDI4OCA1NiAyODhsMTQ0IDB6TTU2IDIyNGMtOS43IDAtMTguNS01LjgtMjIuMi0xNC44UzMyLjIgMTg5LjkgMzkgMTgzTDc5IDE0MyA1LjcgNjkuN0MyIDY2IDAgNjEuMSAwIDU2UzIgNDYgNS43IDQyLjNMNDIuMyA1LjdDNDYgMiA1MC45IDAgNTYgMFM2NiAyIDY5LjcgNS43TDE0MyA3OSAxODMgMzljNi45LTYuOSAxNy4yLTguOSAyNi4yLTUuMlMyMjQgNDYuMyAyMjQgNTZsMCAxNDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRMNTYgMjI0eiJdCiAgICB9OwogICAgZmFDb21wcmVzc0Fycm93c0FsdCA9IGZhTWluaW1pemU7CiAgICBmYUFycm93UmlnaHRUb0NpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcmlnaHQtdG8tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGIzIiwgIk0yODggNDhjMC0yNi41IDIxLjUtNDggNDgtNDhsOTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDgwIDQ4IDAgMC03MmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNzIgMTYgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDI4OGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMjU2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNDE2em02NCA2NGwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2em0xNiA4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek0zNTIgMzA0bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE3Ni04MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwek01MTIgMzM2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6TTE1MyAxNjdsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTAyLjEgMC0zMS0zMWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlzMjQuNi05LjQgMzMuOSAweiJdCiAgICB9OwogICAgZmFMYXB0b3BNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1tZWRpY2FsIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImY4MTIiLCAiTTY0IDk2YzAtMzUuMyAyOC43LTY0IDY0LTY0bDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjQwLTY0IDAgMC0yNDAtMzg0IDAgMCAyNDAtNjQgMCAwLTI0MHpNMCA0MDMuMkMwIDM5Mi42IDguNiAzODQgMTkuMiAzODRsNjAxLjYgMGMxMC42IDAgMTkuMiA4LjYgMTkuMiAxOS4yIDAgNDIuNC0zNC40IDc2LjgtNzYuOCA3Ni44TDc2LjggNDgwQzM0LjQgNDgwIDAgNDQ1LjYgMCA0MDMuMnpNMjg4IDE2MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQnJlYWRTbGljZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmVhZC1zbGljZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmN2VjIiwgIk02NCA0MzJsMC0xNzZjLTM1LjMgMC02NC0yOC43LTY0LTY0IDAtMjE2LjUgNTEyLTIxNi41IDUxMiAwIDAgMzUuMy0yOC43IDY0LTY0IDY0bDAgMTc2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yODggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDh6Il0KICAgIH07CiAgICBmYUdsb2JlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImdsb2JlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3NzYwXSwgImYwYWMiLCAiTTM1MS45IDI4MGwtMTkwLjkgMGMyLjkgNjQuNSAxNy4yIDEyMy45IDM3LjUgMTY3LjQgMTEuNCAyNC41IDIzLjcgNDEuOCAzNS4xIDUyLjQgMTEuMiAxMC41IDE4LjkgMTIuMiAyMi45IDEyLjJzMTEuNy0xLjcgMjIuOS0xMi4yYzExLjQtMTAuNiAyMy43LTI4IDM1LjEtNTIuNCAyMC4zLTQzLjUgMzQuNi0xMDIuOSAzNy41LTE2Ny40ek0xNjAuOSAyMzJsMTkwLjkgMEMzNDkgMTY3LjUgMzM0LjcgMTA4LjEgMzE0LjQgNjQuNiAzMDMgNDAuMiAyOTAuNyAyMi44IDI3OS4zIDEyLjIgMjY4LjEgMS43IDI2MC40IDAgMjU2LjQgMHMtMTEuNyAxLjctMjIuOSAxMi4yYy0xMS40IDEwLjYtMjMuNyAyOC0zNS4xIDUyLjQtMjAuMyA0My41LTM0LjYgMTAyLjktMzcuNSAxNjcuNHptLTQ4IDBDMTE2LjQgMTQ2LjQgMTM4LjUgNjYuOSAxNzAuOCAxNC43IDc4LjcgNDcuMyAxMC45IDEzMS4yIDEuNSAyMzJsMTExLjQgMHpNMS41IDI4MGM5LjQgMTAwLjggNzcuMiAxODQuNyAxNjkuMyAyMTcuMy0zMi4zLTUyLjItNTQuNC0xMzEuNy01Ny45LTIxNy4zTDEuNSAyODB6bTM5OC40IDBjLTMuNSA4NS42LTI1LjYgMTY1LjEtNTcuOSAyMTcuMyA5Mi4xLTMyLjcgMTU5LjktMTE2LjUgMTY5LjMtMjE3LjNsLTExMS40IDB6bTExMS40LTQ4QzUwMS45IDEzMS4yIDQzNC4xIDQ3LjMgMzQyIDE0LjcgMzc0LjMgNjYuOSAzOTYuNCAxNDYuNCAzOTkuOSAyMzJsMTExLjQgMHoiXQogICAgfTsKICAgIGZhRm9sZGVyTWludXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZm9sZGVyLW1pbnVzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY2NWQiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDEzOC43IDBjMTMuOCAwIDI3LjMgNC41IDM4LjQgMTIuOGwzOC40IDI4LjhjNS41IDQuMiAxMi4zIDYuNCAxOS4yIDYuNEw0NDggODBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAyNDBjMCAzNS4zLTI4LjcgNjQtNjQgNjR6TTE4NCAyNDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFNYXNrRmFjZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrLWZhY2UiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTFkNyIsICJNMzIwIDY0Yy0yNy4yIDAtNTMuOCA4LTc2LjQgMjMuMWwtMzcuMSAyNC44Yy0xNS44IDEwLjUtMzQuMyAxNi4xLTUzLjMgMTYuMUw2NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNzguN2MwIDYyLjYgNDUuMiAxMTYgMTA3IDEyNi4zbDk3LjkgMTYuM2MzMyAyMiA3Mi42IDM0LjcgMTE1LjEgMzQuN3M4Mi4yLTEyLjggMTE1LjEtMzQuN0w1MzMgMzk2LjljNjEuNy0xMC4zIDEwNy02My43IDEwNy0xMjYuM2wwLTc4LjdjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTg5LjIgMGMtMTkgMC0zNy41LTUuNi01My4zLTE2LjFMMzk2LjQgODcuMUMzNzMuOCA3MiAzNDcuMiA2NCAzMjAgNjR6TTEzNS45IDMzNi45bC0xOC40LTMuMUM4Ni42IDMyOC43IDY0IDMwMiA2NCAyNzAuN2wwLTc4LjcgNDggMCAwIDQ4YzAgMzUgOC42IDY3LjkgMjMuOSA5Ni45em0zODYuNi0zLjFsLTE4LjQgMy4xQzUxOS40IDMwNy45IDUyOCAyNzUgNTI4IDI0MGwwLTQ4IDQ4IDAgMCA3OC43YzAgMzEuMy0yMi42IDU4LTUzLjUgNjMuMXpNMTkyIDIzMmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjA4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em01NiA1NmwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9uZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTVjIiwgIk00NDguNSAzODRjMCA0MS41LTEzLjEgNzkuOS0zNS41IDExMS4zLTcuOSAxMS4xLTIxLjIgMTYuNy0zNC44IDE2LjdsLTI0My4zIDBjLTEzLjcgMC0yNi45LTUuNi0zNC44LTE2LjctMjIuNC0zMS40LTM1LjUtNjkuOC0zNS41LTExMS4zIDAtNzEuMSAzOC42LTEzMy4xIDk2LTE2Ni4zbDAtMTUzLjdjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTMuN2MxNC4yIDguMiAyNy4yIDE4LjIgMzguOCAyOS42bDM5LjMtMzkuMy03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMxNiAxNiAzMiAzMiA0OCA0OCA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03LTctNDMuMyA0My4zYzE3LjMgMjguOSAyNy4zIDYyLjYgMjcuMyA5OC44ek0yODguNSA2NGwtNjQgMCAwIDE5MC42LTMyIDE4LjVjLTE5LjUgMTEuMy0zNS43IDI3LjUtNDYuOSA0Ni45bDIyMS44IDBjLTExLjItMTkuNC0yNy40LTM1LjYtNDYuOS00Ni45bC0zMi0xOC41IDAtMTkwLjZ6Il0KICAgIH07CiAgICBmYVJvYWRCcmlkZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1icmlkZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2MyIsICJNMzIgMzJsMjA4IDAgMCA2NC0yNCAwIDAgNjQgMjQgMCAwIDEyOS4zYy00NS40IDcuNi04MCA0Ny4xLTgwIDk0LjdsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC05NGMwLTM4LjgtMjYuNC03Mi42LTY0LTgybDAtMTEyIDQwIDAgMC02NC04IDBDMTQuMyA5NiAwIDgxLjcgMCA2NFMxNC4zIDMyIDMyIDMyek04OCA5NmwwIDY0IDgwIDAgMC02NC04MCAwek0zMzYgMzJsNzIgMCAwIDcyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC03MiA3MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzUyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03MiAwIDAtNzJjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA3Mi03MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTM1MmMwLTI2LjUgMjEuNS00OCA0OC00OHptOTYgMTYwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHoiXQogICAgfTsKICAgIGZhQXJyb3dVcDkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTktMSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAtYWx0Il0sICJmODg3IiwgIk0xNTAuNiA0MS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtOTYgOTZjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMOTYgMTQxLjMgOTYgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDYuNyA0MS40IDQxLjRjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtOTYtOTZ6TTM2NS4xIDIwNi42Yy05LjYgMTQuOC01LjQgMzQuNiA5LjQgNDQuM3MzNC42IDUuNCA0NC4zLTkuNGw0Mi4xLTY0LjljMTIuNC0xOS4yIDE5LjEtNDEuNiAxOS4xLTY0LjUgMC00NC4yLTM1LjgtODAtODAtODBzLTgwIDM1LjgtODAgODBjMCAzNi4xIDIzLjkgNjYuNyA1Ni44IDc2LjZsLTExLjcgMTh6TTM3NiAxMTJhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptNDIuNyAxODJjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnoiXQogICAgfTsKICAgIGZhU29ydE51bWVyaWNVcEFsdCA9IGZhQXJyb3dVcDkxOwogICAgZmFNb3VudGFpbkNpdHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW91bnRhaW4tY2l0eSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJlIiwgIk0yNTYuMyA0OGMwLTI2LjUgMjEuNS00OCA0OC00OGw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgNDggNDggMCAwLTcyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCA3MiAxNiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC03Ny44IDBjNC0xNS40IDIuNC0zMi42LTYuNy00OC4yTDM1NC42IDI1NiAzNjguMyAyNTZjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy02LjEgMC0xMS40IDMuNC0xNC4xIDguNWwtNDIuNi03M2MtNi0xMC4yLTE0LjEtMTgtMjMuMy0yMy4zbDAtNTYuMnptNjQgNjRsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNnptMTYwIDk2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMzJjMC04LjgtNy4yLTE2LTE2LTE2bC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZ6bTE2IDgwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bS0yNzItNjQuN2wtNjUuMSAxMTEuNiAzMy4xIDMzLjEgNDgtNDggNDAuNCAwLTU2LjQtOTYuN3ptLTI3LjYtNDcuOWMxMi4zLTIxLjIgNDIuOS0yMS4yIDU1LjMgMEw0MjAuMyA0NjMuOWMxMi40IDIxLjMtMi45IDQ4LjEtMjcuNiA0OC4xTDU2IDUxMmMtMjQuNyAwLTQwLjEtMjYuOC0yNy42LTQ4LjFMMTk2LjcgMTc1LjR6Il0KICAgIH07CiAgICBmYUFycm93RG93bjkxID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tOS0xIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInNvcnQtbnVtZXJpYy1kZXNjIiwgInNvcnQtbnVtZXJpYy1kb3duLWFsdCJdLCAiZjg4NiIsICJNMjMwLjYgMzkwLjZsLTgwIDgwYy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtODAtODBjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDI1LjQtMjUuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zem0xMzQuNS0xODRsMTEuNy0xOGMtMzIuOS05LjktNTYuOC00MC41LTU2LjgtNzYuNiAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMjIuOS02LjYgNDUuMy0xOS4xIDY0LjVsLTQyLjEgNjQuOWMtOS42IDE0LjgtMjkuNCAxOS4xLTQ0LjMgOS40cy0xOS4xLTI5LjQtOS40LTQ0LjN6TTQyNCAxMTJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHptLTUuMyAxODJjOC4zIDYgMTMuMyAxNS43IDEzLjMgMjZsMCA5NiAxNiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2IDAgMC01MS42LTUuOSAyYy0xNi44IDUuNi0zNC45LTMuNS00MC41LTIwLjJzMy41LTM0LjkgMjAuMi00MC41bDQ4LTE2YzkuOC0zLjMgMjAuNS0xLjYgMjguOCA0LjR6Il0KICAgIH07CiAgICBmYVNvcnROdW1lcmljRGVzYyA9IGZhQXJyb3dEb3duOTE7CiAgICBmYVNvcnROdW1lcmljRG93bkFsdCA9IGZhQXJyb3dEb3duOTE7CiAgICBmYUZhY2VHcmluV2lkZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1ncmluLXdpZGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTUsICJncmluLWFsdCJdLCAiZjU4MSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0yMDggMTkyYzAgMzUuMy0xNC4zIDY0LTMyIDY0cy0zMi0yOC43LTMyLTY0IDE0LjMtNjQgMzItNjQgMzIgMjguNyAzMiA2NHptMTI4IDY0Yy0xNy43IDAtMzItMjguNy0zMi02NHMxNC4zLTY0IDMyLTY0IDMyIDI4LjcgMzIgNjQtMTQuMyA2NC0zMiA2NHoiXQogICAgfTsKICAgIGZhR3JpbkFsdDIgPSBmYUZhY2VHcmluV2lkZTI7CiAgICBmYVBvb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjE5IiwgIk0yNTQuNCA2LjZjMy41LTQuMyA5LTYuNSAxNC41LTUuNyA0Ni45IDYuMyA4My4xIDQ2LjUgODMuMSA5NS4xIDAgMTEuMi0xLjkgMjItNS41IDMybDUuNSAwYzM1LjMgMCA2NCAyOC43IDY0IDY0IDAgMTkuMS04LjQgMzYuMy0yMS43IDQ4bDEzLjcgMGMzOS44IDAgNzIgMzIuMiA3MiA3MiAwIDIzLjItMTEgNDMuOC0yOCA1NyAzNC4xIDUuNyA2MCAzNS4zIDYwIDcxIDAgMzkuOC0zMi4yIDcyLTcyIDcyTDcyIDUxMmMtMzkuOCAwLTcyLTMyLjItNzItNzIgMC0zNS43IDI1LjktNjUuMyA2MC03MS0xNy0xMy4yLTI4LTMzLjgtMjgtNTcgMC0zOS44IDMyLjItNzIgNzItNzJsMTMuNyAwYy0xMy4zLTExLjctMjEuNy0yOC45LTIxLjctNDggMC0zNS4zIDI4LjctNjQgNjQtNjRsMTYuMiAwYzQ0LjEtLjEgNzkuOC0zNS45IDc5LjgtODAgMC05LjItMS41LTE3LjktNC4zLTI2LjEtMS44LTUuMi0uOC0xMS4xIDIuOC0xNS40eiJdCiAgICB9OwogICAgZmFEaGFybWFjaGFrcmEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGhhcm1hY2hha3JhIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTc4NF0sICJmNjU1IiwgIk0zMzcuOCAyMDUuN2w0OC42LTQyLjVjMTMuOCAxOS4zIDIzLjQgNDEuOSAyNy40IDY2LjJsLTY0LjQgNC4zYy0yLjQtMTAuMS02LjQtMTkuNS0xMS42LTI4em0xNDAuMSAxOS41Yy01LjMtMzguOC0yMC42LTc0LjUtNDMuMi0xMDQuM2wuOC0uN0M0NDkgMTA4LjQgNDQ5LjcgODcuNiA0MzcgNzVzLTMzLjQtMTItNDUuMiAxLjVsLS43IC44Yy0yOS44LTIyLjYtNjUuNS0zNy45LTEwNC4zLTQzLjJsLjEtMS4xYzEuMi0xNy45LTEzLTMzLTMwLjktMzNzLTMyLjEgMTUuMi0zMC45IDMzbC4xIDEuMWMtMzguOCA1LjMtNzQuNSAyMC42LTEwNC4zIDQzLjJsLS43LS44QzEwOC40IDYzIDg3LjYgNjIuMyA3NSA3NXMtMTIgMzMuNCAxLjUgNDUuMmwuOCAuN2MtMjIuNiAyOS44LTM3LjkgNjUuNS00My4yIDEwNC4zbC0xLjEtLjFjLTE3LjktMS4yLTMzIDEzLTMzIDMwLjlzMTUuMiAzMi4xIDMzIDMwLjlsMS4xLS4xYzUuMyAzOC44IDIwLjYgNzQuNSA0My4yIDEwNC4zbC0uOCAuN0M2MyA0MDMuNiA2Mi4zIDQyNC40IDc1IDQzN3MzMy40IDEyIDQ1LjItMS41bC43LS44YzI5LjggMjIuNiA2NS41IDM3LjkgMTA0LjMgNDMuMmwtLjEgMS4xYy0xLjIgMTcuOSAxMyAzMyAzMC45IDMzczMyLjEtMTUuMiAzMC45LTMzbC0uMS0xLjFjMzguOC01LjMgNzQuNS0yMC42IDEwNC4zLTQzLjJsLjcgLjhjMTEuOCAxMy41IDMyLjUgMTQuMiA0NS4yIDEuNXMxMi0zMy40LTEuNS00NS4ybC0uOC0uN2MyMi42LTI5LjggMzcuOS02NS41IDQzLjItMTA0LjNsMS4xIC4xYzE3LjkgMS4yIDMzLTEzIDMzLTMwLjlzLTE1LjItMzIuMS0zMy0zMC45bC0xLjEgLjF6TTE2My4yIDEyNS42YzE5LjMtMTMuOCA0MS45LTIzLjQgNjYuMi0yNy41bDQuMyA2NC40Yy0xMCAyLjQtMTkuNSA2LjQtMjggMTEuNmwtNDIuNS00OC42em0tNjUgMTAzLjhjNC4xLTI0LjQgMTMuNy00Ni45IDI3LjUtNjYuMmw0OC42IDQyLjVjLTUuMyA4LjUtOS4yIDE4LTExLjYgMjhsLTY0LjQtNC4zem0yNy41IDExOS40Yy0xMy44LTE5LjMtMjMuNC00MS45LTI3LjUtNjYuMmw2NC40LTQuM2MyLjQgMTAuMSA2LjQgMTkuNSAxMS42IDI4bC00OC42IDQyLjV6bTEwMy44IDY1Yy0yNC40LTQuMS00Ni45LTEzLjctNjYuMi0yNy40bDQyLjUtNDguNmM4LjUgNS4zIDE4IDkuMiAyOCAxMS42bC00LjMgNjQuNHptMTE5LjQtMjcuNGMtMTkuMyAxMy44LTQxLjkgMjMuNC02Ni4yIDI3LjRsLTQuMy02NC40YzEwLTIuNCAxOS41LTYuNCAyOC0xMS42bDQyLjUgNDguNnptNjUtMTAzLjhjLTQuMSAyNC40LTEzLjcgNDYuOS0yNy40IDY2LjJsLTQ4LjYtNDIuNWM1LjMtOC42IDkuMi0xOCAxMS42LTI4bDY0LjQgNC4zem0tNjUtMTU2LjlsLTQyLjUgNDguNmMtOC42LTUuMy0xOC05LjItMjgtMTEuNmw0LjMtNjQuNGMyNC40IDQuMSA0Ni45IDEzLjcgNjYuMiAyNy41ek0yNTYgMjI0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmF0dGVyeVF1YXJ0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmF0dGVyeS1xdWFydGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMiJdLCAiZjI0MyIsICJNNTI4IDEyOGM4LjggMCAxNiA3LjIgMTYgMTZsMCAyMjRjMCA4LjgtNy4yIDE2LTE2IDE2bC00MTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMjI0YzAtOC44IDcuMi0xNiAxNi0xNmw0MTYgMHpNMTEyIDY0Yy00NC4yIDAtODAgMzUuOC04MCA4MGwwIDIyNGMwIDQ0LjIgMzUuOCA4MCA4MCA4MGw0MTYgMGM0NC4yIDAgODAtMzUuOCA4MC04MGwwLTQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsMC00OGMwLTQ0LjItMzUuOC04MC04MC04MEwxMTIgNjR6bTU2IDExMmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCAxMTJjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTExMmMwLTEzLjMtMTAuNy0yNC0yNC0yNGwtNjQgMHoiXQogICAgfTsKICAgIGZhQmF0dGVyeTIgPSBmYUJhdHRlcnlRdWFydGVyOwogICAgZmFBbmtoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFua2giLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFs5NzY1XSwgImY2NDQiLCAiTTk2IDEyOGMwLTM1LjMgMjguNy02NCA2NC02NHM2NCAyOC43IDY0IDY0YzAgNDEuNi0yMC43IDc2LjYtNDYuNiAxMDQuMS01LjkgNi4yLTExLjggMTEuOC0xNy40IDE2LjctNS42LTQuOS0xMS41LTEwLjUtMTcuNC0xNi43LTI1LjktMjcuNS00Ni42LTYyLjYtNDYuNi0xMDQuMXpNMTYwIDBDODkuMyAwIDMyIDU3LjMgMzIgMTI4IDMyIDE4MC40IDUzLjUgMjIzLjUgNzguOCAyNTZMMzIgMjU2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDAgMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MCA5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC00Ni44IDBDMjY2LjUgMjIzLjUgMjg4IDE4MC40IDI4OCAxMjggMjg4IDU3LjMgMjMwLjcgMCAxNjAgMHoiXQogICAgfTsKICAgIGZhRGlhbW9uZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFtb25kIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbOTgzMF0sICJmMjE5IiwgIk0xNyAyMTVMMjE1IDE3QzIyNS45IDYuMSAyNDAuNiAwIDI1NiAwczMwLjEgNi4xIDQxIDE3TDQ5NSAyMTVjMTAuOSAxMC45IDE3IDI1LjYgMTcgNDFzLTYuMSAzMC4xLTE3IDQxTDI5NyA0OTVjLTEwLjkgMTAuOS0yNS42IDE3LTQxIDE3cy0zMC4xLTYuMS00MS0xN0wxNyAyOTdDNi4xIDI4Ni4xIDAgMjcxLjQgMCAyNTZzNi4xLTMwLjEgMTctNDF6Il0KICAgIH07CiAgICBmYVN1YnNjcmlwdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdWJzY3JpcHQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjEyYyIsICJNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsMTUuMyAwIDg5LjYgMTI4LTg5LjYgMTI4LTE1LjMgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwYzEwLjQgMCAyMC4yLTUuMSAyNi4yLTEzLjZMMjQwIDMxMS44IDMyNS44IDQzNC40YzYgOC42IDE1LjggMTMuNiAyNi4yIDEzLjZsMzIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTUuMyAwLTg5LjYtMTI4IDg5LjYtMTI4IDE1LjMgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMGMtMTAuNCAwLTIwLjIgNS4xLTI2LjIgMTMuNkwyNDAgMjAwLjIgMTU0LjIgNzcuNkMxNDguMiA2OS4xIDEzOC40IDY0IDEyOCA2NEw5NiA2NHpNNTQ0IDMyMGMwLTExLjEtNS43LTIxLjQtMTUuMi0yNy4ycy0yMS4yLTYuNC0zMS4xLTEuNGwtMzIgMTZjLTE1LjggNy45LTIyLjIgMjcuMS0xNC4zIDQyLjkgNS42IDExLjIgMTYuOSAxNy43IDI4LjYgMTcuN2wwIDgwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC0xMjh6Il0KICAgIH07CiAgICBmYVJ1cGVlU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJydXBlZS1zaWduIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbODM2MCwgInJ1cGVlIl0sICJmMTU2IiwgIk0wIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMybDgwIDBjNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCA1NC4zLTMwIDEwMS41LTc0LjQgMTI2LjFsNDEgMTM2LjdjNS4xIDE2LjktNC41IDM0LjgtMjEuNSAzOS44cy0zNC44LTQuNS0zOS44LTIxLjVMMTIwLjEgMzE5LjhjLTIuNyAuMS01LjQgLjItOC4xIC4ybC00OCAwIDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNDY1LjcgMCA0NDhMMCA2NHpNNjQgMjU2bDQ4IDBjNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBsLTQ4IDAgMCAxNjB6bTI4NS4xLTMybDM0LjkgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzQuOSAwYy03LjIgMC0xMy4xIDUuOS0xMy4xIDEzLjEgMCA1LjcgMy43IDEwLjcgOS4xIDEyLjVsNDkuNCAxNS45YzMxLjkgMTAuMyA1My41IDM5LjkgNTMuNSA3My40IDAgNDIuNi0zNC41IDc3LjEtNzcuMSA3Ny4xTDMyMCA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsNTAuOSAwYzcuMiAwIDEzLjEtNS45IDEzLjEtMTMuMSAwLTUuNy0zLjctMTAuNy05LjEtMTIuNWwtNDkuNC0xNS45Yy0zMS45LTEwLjMtNTMuNS0zOS45LTUzLjUtNzMuNCAwLTQyLjYgMzQuNS03Ny4xIDc3LjEtNzcuMXoiXQogICAgfTsKICAgIGZhUnVwZWUgPSBmYVJ1cGVlU2lnbjsKICAgIGZhUGVyc29uUmlmbGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJpZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1NGUiLCAiTTQxNiAwTDM4NCAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDAgMTAwLjNjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43bDAgMzJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTQ0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDE2IDAgMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZsNTkuNSAwYzEwLjQgMCAxOC05LjggMTUuNS0xOS45bC0yMy05Mi4xIDQ0IDBjOC44IDAgMTYtNy4yIDE2LTE2bDAtMTZjMC04LjgtNy4yLTE2LTE2LTE2bC00OCAwIDAtMjYuNyA1My4xLTE3LjdjNi41LTIuMiAxMC45LTguMyAxMC45LTE1LjJsMC04NC41YzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgNTYtMTYgNS4zIDAtMTA5LjNjMC0xMS44LTYuNC0yMi4yLTE2LTI3LjdMNDMyIDE2YzAtOC44LTcuMi0xNi0xNi0xNnpNMjI0IDIwOEMxMTggMjA4IDMyIDI5NCAzMiA0MDBsMCA0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNDhjMC0zMi41IDEyLjEtNjIuMSAzMi04NC43bDAgMTk2LjcgMTYwIDAgMC0yOTMuMWMtMjAtNy4xLTQxLjYtMTAuOS02NC0xMC45ek0yODAgODhhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAweiJdCiAgICB9OwogICAgZmFEID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsxMDBdLCAiNDQiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsMTI4IDBjMTIzLjcgMCAyMjQgMTAwLjMgMjI0IDIyNFMyODMuNyA0ODAgMTYwIDQ4MEwzMiA0ODBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgNjR6TTY0IDk2bDAgMzIwIDk2IDBjODguNCAwIDE2MC03MS42IDE2MC0xNjBTMjQ4LjQgOTYgMTYwIDk2TDY0IDk2eiJdCiAgICB9OwogICAgZmFTcXVhcmVOZmkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3F1YXJlLW5maSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlNTc2IiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyek05MyAxNzIuM2wzNSA2MyAwLTUxLjRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDE0NGMwIDEwLjktNy40IDIwLjUtMTggMjMuMnMtMjEuNy0yLTI3LTExLjZsLTM1LTYzIDAgNTEuNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEwLjkgNy40LTIwLjUgMTgtMjMuMnMyMS43IDIgMjcgMTEuNnpNMjA4IDE4NGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC01NiAwIDAgMzIgNDAgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDAgMCAwIDQwYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTQ0em0xOTIgMGwwIDE0NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE0NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFUZWV0aCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZWV0aCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNjJlIiwgIk0wIDk2QzAgNjAuNyAyOC43IDMyIDY0IDMybDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzIwYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NnpNMTQ0IDIwOGwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTI2LjUtMjEuNS00OC00OC00OHMtNDggMjEuNS00OCA0OHptMTI4IDBsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0yNi41LTIxLjUtNDgtNDgtNDhzLTQ4IDIxLjUtNDggNDh6TTgwIDE3NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyNGMwIDEzLjMgMTAuNyAyNCAyNCAyNGwxNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtMjRjMC0xNy43LTE0LjMtMzItMzItMzJ6bTMyMCAzMmwwIDI0YzAgMTMuMyAxMC43IDI0IDI0IDI0bDE2IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRsMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnpNNDggMzM2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2em0xNDQgNDhjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0xNmMwLTguOC03LjItMTYtMTYtMTZsLTY0IDBjLTguOCAwLTE2IDcuMi0xNiAxNmwwIDE2YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4em0xMjggMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtNjQgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAyNi41IDIxLjUgNDggNDggNDh6bTExMi0xNmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2YzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJ6Il0KICAgIH07CiAgICBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzZWFyY2gtZG9sbGFyIl0sICJmNjg4IiwgIk00MTYgMjA4YzAgNDUuOS0xNC45IDg4LjMtNDAgMTIyLjdMNTAyLjYgNDU3LjRjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBMMzMwLjcgMzc2QzI5Ni4zIDQwMS4xIDI1My45IDQxNiAyMDggNDE2IDkzLjEgNDE2IDAgMzIyLjkgMCAyMDhTOTMuMSAwIDIwOCAwIDQxNiA5My4xIDQxNiAyMDh6TTIxMiA5NmMtMTEgMC0yMCA5LTIwIDIwbDAgNGMtMjguOCAuMy01MiAyMy43LTUyIDUyLjUgMCAyNS43IDE4LjUgNDcuNiA0My45IDUxLjhsNDEuNyA3YzYgMSAxMC40IDYuMiAxMC40IDEyLjMgMCA2LjktNS42IDEyLjUtMTIuNSAxMi41TDE2OCAyNTZjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDI0IDAgMCA0YzAgMTEgOSAyMCAyMCAyMHMyMC05IDIwLTIwbDAtNC43YzI1LTQuMSA0NC0yNS43IDQ0LTUxLjggMC0yNS43LTE4LjUtNDcuNi00My45LTUxLjhsLTQxLjctN2MtNi0xLTEwLjQtNi4yLTEwLjQtMTIuMyAwLTYuOSA1LjYtMTIuNSAxMi41LTEyLjVsNDcuNSAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtOCAwIDAtNGMwLTExLTktMjAtMjAtMjB6Il0KICAgIH07CiAgICBmYVNlYXJjaERvbGxhciA9IGZhTWFnbmlmeWluZ0dsYXNzRG9sbGFyOwogICAgZmFEdW1wc3RlckZpcmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZHVtcHN0ZXItZmlyZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNzk0IiwgIk0xNjQuMyA2NEwxMzguNyAxOTIgNTYgMTkyYy0xMy4zIDAtMjQtMTAuNy0yNC0yNGwwLTQuMWMwLTIuNiAuNC01LjEgMS4yLTcuNkw1OC41IDgwLjRDNjEuOCA3MC42IDcxIDY0IDgxLjMgNjRsODMgMHptMjMuNCAxMjhsMjUuNi0xMjggODIuNyAwIDAgMTI4LTEwOC4zIDB6TTM0NCA2NGw4Mi43IDAgMTYgODBjLTE0LjcgLjItMjkuMyA1LjUtNDAuOSAxNS45LTExLjUgMTAuMy0yMi41IDIxLTMyLjggMzIuMWwtMjQuOSAwIDAtMTI4ek05NiAyNDBsMjMzLjIgMGMtNi40IDguOC0xMi4zIDE3LjYtMTcuNyAyNi4zLTIxLjQgMzQuNy0zOS41IDc2LjEtMzkuNSAxMTUuOCAwIDE3LjEgMi4xIDMzLjggNiA0OS45bC0xMjAuNCAwIDEuOSAxMC4zYzMuMiAxNy40LTguNCAzNC0yNS44IDM3LjJzLTM0LTguNC0zNy4yLTI1LjhDNzEgMzEzLjMgNTggMjQyLjEgNTcuNyAyNDBMOTYgMjQwem01MTItNzJjMCAxMS03LjQgMjAuMy0xNy41IDIzLjEtLjktLjgtMS43LTEuNi0yLjYtMi40LTIxLjgtMjAtNTQuMy0yMS44LTc4LTUuNS00LjItNC4zLTguNS04LjUtMTIuOS0xMi42bC0yMS4zLTEwNi42IDgzIDBjMTAuMyAwIDE5LjUgNi42IDIyLjggMTYuNGwyNS4zIDc1LjljLjggMi40IDEuMiA1IDEuMiA3LjZsMCA0LjF6TTUwNS43IDI0MC4zTDUxOCAyMjYuNWM1LjQtNi4xIDEzLjMtOC44IDIwLjktOC45IDcuMiAwIDE0LjMgMi42IDE5LjkgNy44IDE5LjcgMTguMyAzOS44IDQzLjIgNTUgNzAuNiAxNS4xIDI3LjIgMjYuMiA1OC4xIDI2LjIgODguMSAwIDg4LjctNzEuMyAxNTkuOC0xNjAgMTU5LjgtODkuNiAwLTE2MC03MS4zLTE2MC0xNTkuOCAwLTM3LjMgMTYtNzMuNCAzNi44LTEwNC41IDIwLjktMzEuMyA0Ny41LTU5IDcwLjktODAuMiA1LjctNS4yIDEzLjEtNy43IDIwLjMtNy41czEzLjQgMy4yIDE4LjggNy41YzE0LjQgMTEuNCAzOC45IDQwLjcgMzguOSA0MC43ek01NDQgNDMyLjJjMC0zNi41LTM3LTczLTU0LjgtODguNC01LjQtNC43LTEzLjEtNC43LTE4LjUgMC0xNy43IDE1LjQtNTQuOCA1MS45LTU0LjggODguNCAwIDM1LjMgMjguNyA2NCA2NCA2NHM2NC0yOC43IDY0LTY0eiJdCiAgICB9OwogICAgZmFVcGxvYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXBsb2FkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwOTMiLCAiTTI1NiAxMDkuM0wyNTYgMzIwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjEwLjctNDEuNCA0MS40Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2w5Ni05NmMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGw5NiA5NmMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwyNTYgMTA5LjN6TTIyNCA0MDBjNDQuMiAwIDgwLTM1LjggODAtODBsODAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyYzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDQ4MGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0zMmMwLTM1LjMgMjguNy02NCA2NC02NGw4MCAwYzAgNDQuMiAzNS44IDgwIDgwIDgwem0xNDQgMjRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4eiJdCiAgICB9OwogICAgZmFVc2VyU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1zbGFzaCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzYyNzE0LCAidXNlci1hbHQtc2xhc2giLCAidXNlci1sYXJnZS1zbGFzaCJdLCAiZjUwNiIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUwzMTEuNSAyNDUuN2M1NS0xMC45IDk2LjUtNTkuNSA5Ni41LTExNy43IDAtNjYuMy01My43LTEyMC0xMjAtMTIwLTU4LjIgMC0xMDYuOCA0MS41LTExNy43IDk2LjVMNDEtMjQuOXpNMjM1LjYgMzA1LjRDMTQ3LjkgMzE2LjYgODAgMzkxLjUgODAgNDgyLjMgODAgNDk4LjcgOTMuMyA1MTIgMTA5LjcgNTEybDMzMi41IDAtMjA2LjYtMjA2LjZ6Il0KICAgIH07CiAgICBmYVVzZXJBbHRTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFVc2VyTGFyZ2VTbGFzaCA9IGZhVXNlclNsYXNoOwogICAgZmFBcnJvd0xlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctbGVmdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzg1OTJdLCAiZjA2MCIsICJNOS40IDIzMy40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMTA5LjMgMjg4IDQ4MCAyODhjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTM3MC43IDAgMTA1LjQtMTA1LjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTE2MCAxNjB6Il0KICAgIH07CiAgICBmYVZpYWxWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aWFsLXZpcnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1OTciLCAiTTY0IDMyQzY0IDE0LjMgNzguMyAwIDk2IDBMMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsMCAxNTEuN2MtMTguNSAwLTM3IDctNTEuMSAyMS4xLTIxLjYgMjEuNi0yNi42IDUzLjYtMTUgNzkuOS0yNi45IDEwLjQtNDUuOSAzNi42LTQ1LjkgNjcuMXMxOSA1Ni43IDQ1LjkgNjcuMWMtNy4zIDE2LjUtOCAzNS4yLTIuMyA1Mi4yLTEzLjQgNS43LTI4LjIgOC44LTQzLjYgOC44LTYxLjkgMC0xMTItNTAuMS0xMTItMTEyTDk2IDY0Qzc4LjMgNjQgNjQgNDkuNyA2NCAzMnptOTYgMzJsMCAxMjggOTYgMCAwLTEyOC05NiAwek0yODAgNDA4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0YzI4LjggMCA0My4yLTM0LjggMjIuOS01NS4yLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGMyMC40IDIwLjQgNTUuMiA1LjkgNTUuMi0yMi45IDAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRjMCAyOC44IDM0LjggNDMuMiA1NS4yIDIyLjkgOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45Yy0yMC40IDIwLjQtNS45IDU1LjIgMjIuOSA1NS4yIDEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0Yy0yOC44IDAtNDMuMiAzNC44LTIyLjkgNTUuMiA5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwYy0yMC40LTIwLjQtNTUuMi01LjktNTUuMiAyMi45IDAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0YzAtMjguOC0zNC44LTQzLjItNTUuMi0yMi45LTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjljMjAuNC0yMC40IDUuOS01NS4yLTIyLjktNTUuMnptMTA0LTMyYTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHptODggNDBhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhQ2hlY2tEb3VibGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stZG91YmxlIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImY1NjAiLCAiTTI0OS45IDY2LjhjMTAuNC0xNC4zIDcuMi0zNC4zLTcuMS00NC43cy0zNC4zLTcuMi00NC43IDcuMWwtMTA2IDE0NS43LTM3LjUtMzcuNWMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsNjQgNjRjNi42IDYuNiAxNS44IDEwIDI1LjEgOS4zczE3LjktNS41IDIzLjQtMTMuMWwxMjgtMTc2em0xMjggMTM2YzEwLjQtMTQuMyA3LjItMzQuMy03LjEtNDQuN3MtMzQuMy03LjItNDQuNyA3LjFsLTE3MCAyMzMuNy02OS41LTY5LjVjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zbDk2IDk2YzYuNiA2LjYgMTUuOCAxMCAyNS4xIDkuM3MxNy45LTUuNSAyMy40LTEzLjFsMTkyLTI2NHoiXQogICAgfTsKICAgIGZhUGF3ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBhdyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMWIwIiwgIk0yMzQuNSA5Mi45YzE0LjMgNDIuOS0uMyA4Ni4yLTMyLjYgOTYuOHMtNzAuMS0xNS42LTg0LjQtNTguNSAuMy04Ni4yIDMyLjYtOTYuOCA3MC4xIDE1LjYgODQuNCA1OC41ek0xMDAuNCAxOTguNmMxOC45IDMyLjQgMTQuMyA3MC4xLTEwLjIgODQuMXMtNTkuNy0uOS03OC41LTMzLjMtMTQuMy03MC4xIDEwLjItODQuMSA1OS43IC45IDc4LjUgMzMuM3pNNjkuMiA0MDEuMkMxMjEuNiAyNTkuOSAyMTQuNyAyMjQgMjU2IDIyNHMxMzQuNCAzNS45IDE4Ni44IDE3Ny4yYzMuNiA5LjcgNS4yIDIwLjEgNS4yIDMwLjVsMCAxLjZjMCAyNS44LTIwLjkgNDYuNy00Ni43IDQ2LjctMTEuNSAwLTIyLjktMS40LTM0LTQuMmwtODgtMjJjLTE1LjMtMy44LTMxLjMtMy44LTQ2LjYgMGwtODggMjJjLTExLjEgMi44LTIyLjUgNC4yLTM0IDQuMi0yNS44IDAtNDYuNy0yMC45LTQ2LjctNDYuN2wwLTEuNmMwLTEwLjQgMS42LTIwLjggNS4yLTMwLjV6TTQyMS44IDI4Mi43Yy0yNC41LTE0LTI5LjEtNTEuNy0xMC4yLTg0LjFzNTQtNDcuMyA3OC41LTMzLjMgMjkuMSA1MS43IDEwLjIgODQuMS01NCA0Ny4zLTc4LjUgMzMuM3pNMzEwLjEgMTg5LjdjLTMyLjMtMTAuNi00Ni45LTUzLjktMzIuNi05Ni44czUyLjEtNjkuMSA4NC40LTU4LjUgNDYuOSA1My45IDMyLjYgOTYuOC01Mi4xIDY5LjEtODQuNCA1OC41eiJdCiAgICB9OwogICAgZmFIZWxtZXRTYWZldHkgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGVsbWV0LXNhZmV0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXJkLWhhdCIsICJoYXQtaGFyZCJdLCAiZjgwNyIsICJNMzUyIDI2NGwwLTIwMGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xODUuOUM5MCAxMDkuOCAzMiAxOTEuOCAzMiAyODhsMCA2NCA1MTIgMCAwLTY0Yy0xLTk1LjItNTguNC0xNzcuNy0xNDQtMjA5LjhMNDAwIDI2NGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNHpNNDAgNDAwYy0yMi4xIDAtNDAgMTcuOS00MCA0MHMxNy45IDQwIDQwIDQwbDQ5NiAwYzIyLjEgMCA0MC0xNy45IDQwLTQwcy0xNy45LTQwLTQwLTQwTDQwIDQwMHoiXQogICAgfTsKICAgIGZhSGFyZEhhdCA9IGZhSGVsbWV0U2FmZXR5OwogICAgZmFIYXRIYXJkID0gZmFIZWxtZXRTYWZldHk7CiAgICBmYUUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZSIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwMV0sICI0NSIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMmwyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjI0IDAgMC0xMjggMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTI4IDIyNCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDMyeiJdCiAgICB9OwogICAgZmFGYWNlTGF1Z2hTcXVpbnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtbGF1Z2gtc3F1aW50IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxhdWdoLXNxdWludCJdLCAiZjU5YiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwNy43IDMzMi4xQzEwMiAzMTggMTEzLjQgMzA0IDEyOC42IDMwNGwyNTQuOSAwYzE1LjIgMCAyNi42IDE0IDIwLjkgMjguMS0yMy44IDU4LjYtODEuMiA5OS45LTE0OC4zIDk5LjlzLTEyNC42LTQxLjMtMTQ4LjMtOTkuOXptMTUtMTg4LjhjNC41LTYuOCAxMy4zLTkuMiAyMC42LTUuNWw3OS42IDQwYzUuNCAyLjcgOC44IDguMiA4LjggMTQuM3MtMy40IDExLjYtOC44IDE0LjNsLTc5LjYgNDBjLTcuMyAzLjYtMTYuMSAxLjMtMjAuNi01LjVzLTMuMS0xNS45IDMuMS0yMS4xTDE1OSAxOTIgMTI1LjggMTY0LjNjLTYuMi01LjItNy42LTE0LjMtMy4xLTIxLjF6bTI2My42IDIxLjFMMzUzIDE5MiAzODYuMiAyMTkuN2M2LjIgNS4yIDcuNiAxNC4zIDMuMSAyMS4xcy0xMy4zIDkuMi0yMC42IDUuNWwtNzkuNi00MGMtNS40LTIuNy04LjgtOC4yLTguOC0xNC4zczMuNC0xMS42IDguOC0xNC4zbDc5LjYtNDBjNy4zLTMuNiAxNi4xLTEuMyAyMC42IDUuNXMzLjEgMTUuOS0zLjEgMjEuMXoiXQogICAgfTsKICAgIGZhTGF1Z2hTcXVpbnQyID0gZmFGYWNlTGF1Z2hTcXVpbnQyOwogICAgZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkb3duLWxlZnQtYW5kLXVwLXJpZ2h0LXRvLWNlbnRlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjb21wcmVzcy1hbHQiXSwgImY0MjIiLCAiTTQzOS41IDdjOS40LTkuNCAyNC42LTkuNCAzMy45IDBsMzIgMzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTg3IDg3IDM5IDM5YzYuOSA2LjkgOC45IDE3LjIgNS4yIDI2LjJTNDUwLjIgMjQwIDQ0MC41IDI0MGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtMTQ0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnMxOS4zLTEuNyAyNi4yIDUuMmwzOSAzOSA4Ny04N3pNNzIuNSAyNzJsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCAxNDRjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtMzktMzktODcgODdjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwbC0zMi0zMmMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlsODctODctMzktMzljLTYuOS02LjktOC45LTE3LjItNS4yLTI2LjJTNjIuOCAyNzIgNzIuNSAyNzJ6Il0KICAgIH07CiAgICBmYUNvbXByZXNzQWx0ID0gZmFEb3duTGVmdEFuZFVwUmlnaHRUb0NlbnRlcjsKICAgIGZhR2lmdHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2lmdHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjc5YyIsICJNMjAyLTMwLjZjMTIuNSA0LjQgMTkgMTguMSAxNC42IDMwLjZsLTguMiAyMy4xIDI1LjQtMTguNWMxMC43LTcuOCAyNS43LTUuNCAzMy41IDUuM3M1LjQgMjUuNy01LjMgMzMuNUwyMzMuOCA2NCAyNzIgNjRjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAyLjFjLTU0LjcgMTAuNC05NiA1OC40LTk2IDExNmwwIDEuOWMwIDguOSAxIDE3LjUgMi44IDI1LjktMTEuOSAxNy44LTE4LjggMzkuMS0xOC44IDYyLjFsMCAxMjhjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMNDggNTEyYy0yNi41IDAtNDgtMjEuNS00OC00OEwwIDExMkMwIDg1LjUgMjEuNSA2NCA0OCA2NGwzOC4yIDAtMjguMy0yMC42QzQ3LjIgMzUuNiA0NC44IDIwLjYgNTIuNiA5LjlTNzUuNC0zLjIgODYuMSA0LjZsMjcuNCAyMC04LjMtMjVDMTAxLTEzIDEwNy44LTI2LjYgMTIwLjQtMzAuOHMyNi4yIDIuNiAzMC40IDE1LjJsOS45IDI5LjggMTAuNy0zMC4yYzQuNC0xMi41IDE4LjEtMTkgMzAuNi0xNC42ek00ODkuOSAyMDhjLTcuNSAwLTE0LjUgMy44LTE4LjYgMTAuMUw0NDYuOSAyNTYgNDg4IDI1NmMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTEuOWMwLTEyLjItOS45LTIyLjEtMjIuMS0yMi4xek0zODUuMSAyNTZsLTI0LjQtMzcuOWMtNC4xLTYuMy0xMS4xLTEwLjEtMTguNi0xMC4xLTEyLjIgMC0yMi4xIDkuOS0yMi4xIDIyLjFsMCAxLjljMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDEuMSAwek0yODEuOSAyNjguNWMtNi4zLTEwLjctOS45LTIzLjItOS45LTM2LjVsMC0xLjljMC0zOC43IDMxLjQtNzAuMSA3MC4xLTcwLjEgMjMuOCAwIDQ2IDEyLjEgNTguOSAzMi4xbDE1IDIzLjIgMTUtMjMuMmMxMi45LTIwIDM1LjEtMzIuMSA1OC45LTMyLjEgMzguNyAwIDcwLjEgMzEuNCA3MC4xIDcwLjFsMCAxLjljMCAxMy4zLTMuNiAyNS44LTkuOSAzNi41IDE1LjcgMTEuNyAyNS45IDMwLjQgMjUuOSA1MS41bDAgMTI4YzAgMzUuMy0yOC43IDY0LTY0IDY0bC03MiAwIDAtMjA4LTQ4IDAgMCAyMDgtNzIgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xMjhjMC0yMS4xIDEwLjItMzkuOCAyNS45LTUxLjV6Il0KICAgIH07CiAgICBmYUJlZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWQiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjg3MTZdLCAiZjIzNiIsICJNMzIgMzJjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAyMjQgMjI0IDAgMC0xMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTYwIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDIyNGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0LTQ0OCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJTMCA0NjUuNyAwIDQ0OEwwIDY0QzAgNDYuMyAxNC4zIDMyIDMyIDMyem04MCAxNjBhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxUcmFuc2ZlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLXRyYW5zZmVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MjgiLCAiTTMxIDEwNWMtOS40LTkuNC05LjQtMjQuNiAwLTMzLjlMMTAzLTFjOS40LTkuNCAyNC42LTkuNCAzMy45IDBzOS40IDI0LjYgMCAzMy45bC0zMSAzMSA2Ny43IDAgMCAwIDMzOC4zIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxNzguMi01LjEtNS4xYy0yOC4xLTI4LjEtNzMuNy0yOC4xLTEwMS44IDAtMjcuMiAyNy4yLTI4LjEgNzAuNi0yLjggOTguOWw2Ny43IDAtMzEtMzFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw3MiA3MmM5LjQgOS40IDkuNCAyNC42IDAgMzMuOWwtNzIgNzJjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzEtMzEtNDA2LjEgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRsMC0xNzguMiA1LjEgNS4xYzI4LjEgMjguMSA3My43IDI4LjEgMTAxLjggMCAyNy4yLTI3LjIgMjguMS03MC42IDIuOC05OC45bC02Ny43IDAgMzEgMzFjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEwzMSAxMDV6TTQxNiAyNTZhOTYgOTYgMCAxIDAgLTE5MiAwIDk2IDk2IDAgMSAwIDE5MiAwem04OC02NC41YzQuNCAuNSA4LTMuMSA4LTcuNWwwLTQ4YzAtNC40LTMuNi04LTgtOGwtNDggMGMtNC40IDAtOC4xIDMuNi03LjUgOCAzLjYgMjkgMjYuNiA1MS45IDU1LjUgNTUuNXptLTM2OCAxMjljLTQuNC0uNS04IDMuMS04IDcuNWwwIDQ4YzAgNC40IDMuNiA4IDggOGw0OCAwYzQuNCAwIDguMS0zLjYgNy41LTgtMy42LTI5LTI2LjYtNTEuOS01NS41LTU1LjV6Il0KICAgIH07CiAgICBmYVBlcnNvblJ1bm5pbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLXJ1bm5pbmciLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsxMjc5MzksICJydW5uaW5nIl0sICJmNzBjIiwgIk0yNTYuNS0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNMTIzLjYgMTc2Yy0zLjMgMC02LjIgMi03LjQgNUw5NC4yIDIzNS45Yy02LjYgMTYuNC0yNS4yIDI0LjQtNDEuNiAxNy44cy0yNC40LTI1LjItMTcuOC00MS42bDIxLjktNTQuOUM2Ny43IDEyOS45IDk0LjEgMTEyIDEyMy42IDExMmw5Ny4zIDBjMjguNSAwIDU0LjggMTUuMSA2OS4xIDM5LjdsMzIuOCA1Ni4zIDYxLjYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtNjEuNiAwYy0yMi44IDAtNDMuOC0xMi4xLTU1LjMtMzEuOGwtMTAtMTcuMS0yMC43IDcwLjQgNzUuNCAyMi42YzI3LjcgOC4zIDQxLjggMzkgMzAuMSA2NS41TDI4NS43IDUwOWMtNy4yIDE2LjItMjYuMSAyMy40LTQyLjIgMTYuMnMtMjMuNC0yNi4xLTE2LjItNDIuMmw0OS4yLTExMC44LTk1LjktMjguOGMtMzIuNy05LjgtNTItNDMuNy00My43LTc2LjhsMjIuNy05MC42LTM1LjkgMHptLTggMTgxYzEzLjMgMTQuOSAzMC43IDI2LjMgNTEuMiAzMi40bDQuNyAxLjQtNi45IDE5LjNjLTUuOCAxNi4zLTE2IDMwLjgtMjkuMyA0MS44TDUyLjkgNTE5LjhjLTEzLjYgMTEuMi0zMy44IDkuMy00NS00LjNzLTkuMy0zMy44IDQuMy00NWw4Mi40LTY3LjljNC41LTMuNyA3LjgtOC41IDkuOC0xMy45TDExNS42IDM1N3oiXQogICAgfTsKICAgIGZhUnVubmluZyA9IGZhUGVyc29uUnVubmluZzsKICAgIGZhQ2lyY2xlQ2hldnJvbkRvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWNoZXZyb24tZG93biIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJjaGV2cm9uLWNpcmNsZS1kb3duIl0sICJmMTNhIiwgIk0yNTYgMGEyNTYgMjU2IDAgMSAwIDAgNTEyIDI1NiAyNTYgMCAxIDAgMC01MTJ6TTEzNSAyNDFjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw4NyA4NyA4Ny04N2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlMMjczIDM0NWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBMMTM1IDI0MXoiXQogICAgfTsKICAgIGZhQ2hldnJvbkNpcmNsZURvd24gPSBmYUNpcmNsZUNoZXZyb25Eb3duOwogICAgZmFVc2VyTnVyc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidXNlci1udXJzZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODJmIiwgIk05NiA0NC45YzAtMTIuNyA3LjUtMjQuMiAxOS4yLTI5LjNsOTYtNDJjOC4yLTMuNiAxNy41LTMuNiAyNS43IDBsOTYgNDJDMzQ0LjUgMjAuNyAzNTIgMzIuMiAzNTIgNDQuOWwwIDk5LjFjMCA3MC43LTU3LjMgMTI4LTEyOCAxMjhTOTYgMjE0LjcgOTYgMTQ0bDAtOTkuMXpNMzA0IDEyOGwtMTExLjYgMC0uNCAwLTQ4IDAgMCAxNmMwIDQ0LjIgMzUuOCA4MCA4MCA4MHM4MC0zNS44IDgwLTgwbDAtMTZ6TTIwOCAxNmwwIDE2LTE2IDBjLTQuNCAwLTggMy42LTggOGwwIDE2YzAgNC40IDMuNiA4IDggOGwxNiAwIDAgMTZjMCA0LjQgMy42IDggOCA4bDE2IDBjNC40IDAgOC0zLjYgOC04bDAtMTYgMTYgMGM0LjQgMCA4LTMuNiA4LThsMC0xNmMwLTQuNC0zLjYtOC04LThsLTE2IDAgMC0xNmMwLTQuNC0zLjYtOC04LThMMjE2IDhjLTQuNCAwLTggMy42LTggOHpNMTQyLjYgMzIzYy02LjUtNC45LTE1LjItNi4yLTIyLjYtMi44LTYxLjQgMjguMi0xMDQuMSA5MC4yLTEwNC4xIDE2Mi4xIDAgMTYuNCAxMy4zIDI5LjcgMjkuNyAyOS43bDM1Ni42IDBjMTYuNCAwIDI5LjctMTMuMyAyOS43LTI5LjcgMC03Mi00Mi43LTEzNC0xMDQuMS0xNjIuMS03LjQtMy40LTE2LjEtMi4xLTIyLjYgMi44bC02NyA1MC4yYy04LjUgNi40LTIwLjMgNi40LTI4LjggMGwtNjctNTAuMnoiXQogICAgfTsKICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Uta2lzcy13aW5rLWhlYXJ0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4NTM2LCAia2lzcy13aW5rLWhlYXJ0Il0sICJmNTk4IiwgIk01NDMuNyAyNjguM2MuMi00LjEgLjMtOC4yIC4zLTEyLjMgMC0xNDEuNC0xMTQuNi0yNTYtMjU2LTI1NlMzMiAxMTQuNiAzMiAyNTYgMTQ2LjYgNTEyIDI4OCA1MTJjNDEuNCAwIDgwLjUtOS44IDExNS4xLTI3LjMtNy42LTE3LjEtMTYuMS0zOC44LTIxLjgtNjEuNy03LjctMzAuNS0xNC4xLTc2LjIgOC4yLTExNC43bDIuNy00LjZjMjkuNS01MSA5NC43LTY4LjUgMTQ1LjctMzkgMiAxLjIgNCAyLjQgNS45IDMuN3pNMjQwIDMwNGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGMyNi41IDAgNDggMjEuNSA0OCA0OCAwIDEyLjMtNC42IDIzLjUtMTIuMiAzMiA3LjYgOC41IDEyLjIgMTkuNyAxMi4yIDMyIDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0zMiAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDE2IDBjOC44IDAgMTYtNy4yIDE2LTE2cy03LjItMTYtMTYtMTZsLTE2IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsMTYgMGM4LjggMCAxNi03LjIgMTYtMTZzLTcuMi0xNi0xNi0xNmwtMTYgMGMtOC44IDAtMTYtNy4yLTE2LTE2ek0yMDggMTc2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptMTUyIDIwYy0xMSAwLTIwIDktMjAgMjBzLTkgMjAtMjAgMjAtMjAtOS0yMC0yMGMwLTMzLjEgMjYuOS02MCA2MC02MGwxNiAwYzMzLjEgMCA2MCAyNi45IDYwIDYwIDAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMC05LTIwLTIwLTIwbC0xNiAwek01NDIuOCAzNTBjLTIuMi0xOC4zLTEyLjktMzQuNi0yOC45LTQzLjgtMjguMS0xNi4yLTYzLjktNi42LTgwLjEgMjEuNWwtMi43IDQuNmMtMjQuNSA0Mi41IDcuOSAxMTcuOSAyNC40IDE1MC44IDUuMSAxMC4xIDE1LjUgMTYuMSAyNi44IDE1LjUgMzYuNy0yLjIgMTE4LjItMTEuNyAxNDIuOC01NC4ybDIuNy00LjZjMTYuMi0yOC4xIDYuNi02My45LTIxLjUtODAuMS0xNi05LjItMzUuNC0xMC40LTUyLjQtMy4xbC05LjggNC4yLTEuMy0xMC42eiJdCiAgICB9OwogICAgZmFLaXNzV2lua0hlYXJ0MiA9IGZhRmFjZUtpc3NXaW5rSGVhcnQyOwogICAgZmFGaWxsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGwiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjU3NSIsICJNMjk2IDY0YzYuOSAwIDEzLjUgMi43IDE4LjMgNy42TDQ0MC40IDE5Ny43YzQuOSA0LjkgNy42IDExLjUgNy42IDE4LjNzLTIuNyAxMy41LTcuNiAxOC4zTDM4Ni43IDI4OCA2NS4zIDI4OGMxLjMtMy45IDMuNC03LjQgNi4zLTEwLjNsOTYuNC05Ni40IDMzLjQgMzMuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDIxMy4zIDEzNiAyNzcuNyA3MS42YzQuOS00LjkgMTEuNS03LjYgMTguMy03LjZ6TTEyMi43IDEzNkwyNi4zIDIzMi40QzkuNSAyNDkuMyAwIDI3Mi4xIDAgMjk2czkuNSA0Ni43IDI2LjMgNjMuNkwxNTIuNCA0ODUuN0MxNjkuMyA1MDIuNSAxOTIuMSA1MTIgMjE2IDUxMnM0Ni43LTkuNSA2My42LTI2LjNMNDg1LjcgMjc5LjZDNTAyLjUgMjYyLjcgNTEyIDIzOS45IDUxMiAyMTZzLTkuNS00Ni43LTI2LjMtNjMuNkwzNTkuNiAyNi4zQzM0Mi43IDkuNSAzMTkuOSAwIDI5NiAwcy00Ni43IDkuNS02My42IDI2LjNMMTY4IDkwLjcgMTE4LjYgNDEuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMTIyLjcgMTM2eiJdCiAgICB9OwogICAgZmFNb25leUJpbGwxV2F2ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEtd2F2ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1iaWxsLXdhdmUtYWx0Il0sICJmNTNiIiwgIk0wIDEwOS41TDAgNDE5LjZjMCAxOS40IDExLjggMzcuMyAzMC4zIDQzLjMgOTQgMzAgMTU4LjggOC40IDIyMy4zLTEzLjEgNjIuNC0yMC44IDEyNC40LTQxLjUgMjEyLjEtMTUuMyAyMi4yIDYuNiA0Ni4yLTguOCA0Ni4yLTMybDAtMzEwLjFjMC0xOS40LTExLjgtMzcuMy0zMC4zLTQzLjMtOTQtMzAtMTU4LjgtOC40LTIyMy4zIDEzLjEtNjIuNCAyMC44LTEyNC40IDQxLjUtMjEyLjEgMTUuMy0yMi4yLTYuNi00Ni4zIDguOC00Ni4zIDMyek0yNTYgMzY4Yy01MyAwLTk2LTUwLjEtOTYtMTEyczQzLTExMiA5Ni0xMTIgOTYgNTAuMSA5NiAxMTItNDMgMTEyLTk2IDExMnpNMTI3LjEgNDA1LjVjLjcgNC40LTIuOCA4LjEtNy4yIDguMS0xNS43IDAtMzIuMS0xLjgtNTAtNi4xLTMuNS0uOC02LTQtNi03LjdMNjQgMzYwYzAtNC40IDMuNi04LjEgOC03LjUgMjguMSAzLjUgNTAuNiAyNS4yIDU1LjIgNTN6TTQ0OCAzNTQuNmMwIDUtNC42IDguOC05LjUgOC0xNS40LTIuNS0zMC4yLTMuOS00NC40LTQuMy00LjktLjEtOC43LTQuNS03LjItOS4yIDcuMy0yMy43IDI4LTQxLjQgNTMuMi00NC42IDQuNC0uNSA4IDMuMSA4IDcuNWwwIDQyLjZ6bS04LTE5NS4xYy0yOC4xLTMuNS01MC42LTI1LjItNTUuMi01My0uNy00LjQgMi44LTguMSA3LjItOC4xIDE1LjcgMCAzMi4xIDEuOCA1MCA2LjEgMy41IC44IDYgNCA2IDcuN2wwIDM5LjljMCA0LjQtMy42IDguMS04IDcuNXptLTMyMi4xLTUuOGM0LjkgLjEgOC43IDQuNSA3LjIgOS4yLTcuMyAyMy43LTI4IDQxLjQtNTMuMiA0NC42LTQuNCAuNS04LTMuMS04LTcuNWwwLTQyLjZjMC01IDQuNi04LjggOS41LTggMTUuNCAyLjUgMzAuMiAzLjkgNDQuNCA0LjN6TTI0MCAxODhjLTExIDAtMjAgOS0yMCAyMCAwIDkuNyA2LjkgMTcuNyAxNiAxOS42bDAgNDguNC00IDBjLTExIDAtMjAgOS0yMCAyMHM5IDIwIDIwIDIwbDQ4IDBjMTEgMCAyMC05IDIwLTIwcy05LTIwLTIwLTIwbC00IDAgMC02OGMwLTExLTktMjAtMjAtMjBsLTE2IDB6Il0KICAgIH07CiAgICBmYU1vbmV5QmlsbFdhdmVBbHQgPSBmYU1vbmV5QmlsbDFXYXZlOwogICAgZmFMYW5kbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsYW5kbWFyayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzk2M10sICJmNjZmIiwgIk0yMzguNyA1LjFjMTAuNS02LjggMjQuMS02LjggMzQuNiAwbDIyNCAxNDRjMTEuOSA3LjcgMTcuNCAyMi4zIDEzLjQgMzUuOXMtMTYuNSAyMy0zMC43IDIzbC0zMiAwIDAgMjA4IDUxLjIgMzguNGM4LjEgNiAxMi44IDE1LjUgMTIuOCAyNS42IDAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDUxMmMtMTcuNyAwLTMyLTE0LjMtMzItMzIgMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNmw1MS4yLTM4LjQgMCAwIDAtMjA4LTMyIDBjLTE0LjIgMC0yNi43LTkuNC0zMC43LTIzczEuNS0yOC4zIDEzLjQtMzUuOWwyMjQtMTQ0ek0zMzYgMjA4bDAgMjA4IDY0IDAgMC0yMDgtNjQgMHpNMjI0IDQxNmw2NCAwIDAtMjA4LTY0IDAgMCAyMDh6TTExMiAyMDhsMCAyMDggNjQgMCAwLTIwOC02NCAweiJdCiAgICB9OwogICAgZmFNdXNpYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdXNpYyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyNzkyNV0sICJmMDAxIiwgIk00NjggN2M3LjYgNi4xIDEyIDE1LjMgMTIgMjVsMCAzMDRjMCA0NC4yLTQzIDgwLTk2IDgwcy05Ni0zNS44LTk2LTgwIDQzLTgwIDk2LTgwYzExLjIgMCAyMiAxLjYgMzIgNC42bDAtMTE2LjctMjI0IDQ5LjggMCAyMDYuM2MwIDQ0LjItNDMgODAtOTYgODBzLTk2LTM1LjgtOTYtODAgNDMtODAgOTYtODBjMTEuMiAwIDIyIDEuNiAzMiA0LjZMMTI4IDk2YzAtMTUgMTAuNC0yOCAyNS4xLTMxLjJsMjg4LTY0YzkuNS0yLjEgMTkuNCAuMiAyNyA2LjN6Il0KICAgIH07CiAgICBmYUJvb2tNZWRpY2FsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJvb2stbWVkaWNhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmN2U2IiwgIk05NiA1MTJsMzIwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsMC02Ni43YzE4LjYtNi42IDMyLTI0LjQgMzItNDUuM2wwLTI4OGMwLTI2LjUtMjEuNS00OC00OC00OEw5NiAwQzQzIDAgMCA0MyAwIDk2TDAgNDE2YzAgNTMgNDMgOTYgOTYgOTZ6TTY0IDQxNmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwyNTYgMCAwIDY0LTI1NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTkyIDEyMGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhU2h1ZmZsZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaHVmZmxlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjU2LCAicmFuZG9tIl0sICJmMDc0IiwgIk00MDMuOCAzNC40YzEyLTUgMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjRjLTkuMiA5LjItMjIuOSAxMS45LTM0LjkgNi45UzM4NCAyMDQuOSAzODQgMTkybDAtMzItMzIgMGMtMTAuMSAwLTE5LjYgNC43LTI1LjYgMTIuOGwtMzIuNCA0My4yLTQwLTUzLjMgMjEuMi0yOC4zQzI5My4zIDExMC4yIDMyMS44IDk2IDM1MiA5NmwzMiAwIDAtMzJjMC0xMi45IDcuOC0yNC42IDE5LjgtMjkuNnpNMTU0IDI5Nmw0MCA1My4zLTIxLjIgMjguM0MxNTQuNyA0MDEuOCAxMjYuMiA0MTYgOTYgNDE2bC02NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDY0IDBjMTAuMSAwIDE5LjYtNC43IDI1LjYtMTIuOEwxNTQgMjk2ek00MzguNiA0NzAuNmMtOS4yIDkuMi0yMi45IDExLjktMzQuOSA2LjlTMzg0IDQ2MC45IDM4NCA0NDhsMC0zMi0zMiAwYy0zMC4yIDAtNTguNy0xNC4yLTc2LjgtMzguNEwxMjEuNiAxNzIuOGMtNi04LjEtMTUuNS0xMi44LTI1LjYtMTIuOGwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJTMTQuMyA5NiAzMiA5Nmw2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40TDMyNi40IDMzOS4yYzYgOC4xIDE1LjUgMTIuOCAyNS42IDEyLjhsMzIgMCAwLTMyYzAtMTIuOSA3LjgtMjQuNiAxOS44LTI5LjZzMjUuNy0yLjIgMzQuOSA2LjlsNjQgNjRjNiA2IDkuNCAxNC4xIDkuNCAyMi42cy0zLjQgMTYuNi05LjQgMjIuNmwtNjQgNjR6Il0KICAgIH07CiAgICBmYVJhbmRvbSA9IGZhU2h1ZmZsZTsKICAgIGZhVW5kZXJsaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVuZGVybGluZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMGNkIiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEw5NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyUzExMy43IDY0IDk2IDY0bDAgMTYwYzAgNTMgNDMgOTYgOTYgOTZzOTYtNDMgOTYtOTZsMC0xNjBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzI3MC4zIDAgMjg4IDBsNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDE2MGMwIDg4LjQtNzEuNiAxNjAtMTYwIDE2MFMzMiAzMTIuNCAzMiAyMjRMMzIgNjRDMTQuMyA2NCAwIDQ5LjcgMCAzMnpNMCA0ODBjMC0xNy43IDE0LjMtMzIgMzItMzJsMzIwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhQnVpbGRpbmdVc2VyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1aWxkaW5nLXVzZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTRkYSIsICJNNjQgNjRDNjQgMjguNyA5Mi43IDAgMTI4IDBMMzg0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjEuM2MtNDYuOSAxOS04MCA2NS04MCAxMTguNyAwIDI3LjcgOC44IDUzLjQgMjMuOCA3NC40LTUxLjUgMjEtODcuOCA3MS42LTg3LjggMTMwLjcgMCAxIDAgMS45IDAgMi45bC0xNzYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMNjQgNjR6TTIwOCA0MDBsMCA2NCA1My40IDBjNy4yLTI5LjQgMjEuMy01Ni4xIDQwLjQtNzguMy02LjEtMTkuNS0yNC4zLTMzLjctNDUuOC0zMy43LTI2LjUgMC00OCAyMS41LTQ4IDQ4ek0zMzkgMjI0LjNjLTEtLjItMi0uMy0zLS4zbC0zMiAwYy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMTYuNyAwYzIuMS0yMi44IDguNC00NC4zIDE4LjMtNjMuN3pNMTc2IDk2Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTExMiAxNmwwIDMyYzAgOC44IDcuMiAxNiAxNiAxNmwzMiAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2ek0xNzYgMjI0Yy04LjggMC0xNiA3LjItMTYgMTZsMCAzMmMwIDguOCA3LjIgMTYgMTYgMTZsMzIgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0zMmMwLTguOC03LjItMTYtMTYtMTZsLTMyIDB6bTI0MCA4MGE4MCA4MCAwIDEgMSAxNjAgMCA4MCA4MCAwIDEgMSAtMTYwIDB6TTM1MiA1MTJjMC01MyA0My05NiA5Ni05Nmw5NiAwYzUzIDAgOTYgNDMgOTYgOTYgMCAxNy43LTE0LjMgMzItMzIgMzJsLTIyNCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnoiXQogICAgfTsKICAgIGZhUm9ib3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9ib3QiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjkzMDJdLCAiZjU0NCIsICJNMzUyIDBjMC0xNy43LTE0LjMtMzItMzItMzJTMjg4LTE3LjcgMjg4IDBsMCA2NC05NiAwYy01MyAwLTk2IDQzLTk2IDk2bDAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMjU2IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTIyNGMwLTUzLTQzLTk2LTk2LTk2bC05NiAwIDAtNjR6TTE2MCAzNjhjMC0xMy4zIDEwLjctMjQgMjQtMjRsMzIgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMzIgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6bTEyMCAwYzAtMTMuMyAxMC43LTI0IDI0LTI0bDMyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTMyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0xMjAgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwzMiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0zMiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjI0IDE3NmE0OCA0OCAwIDEgMSAwIDk2IDQ4IDQ4IDAgMSAxIDAtOTZ6bTE0NCA0OGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek02NCAyMjRjMC0xNy43LTE0LjMtMzItMzItMzJTMCAyMDYuMyAwIDIyNGwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NnptNTQ0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMnoiXQogICAgfTsKICAgIGZhUGx1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbHVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTAxMzMsIDYxNTQzLCAiYWRkIl0sICIyYiIsICJNMjU2IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTYwLTE2MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2MCAwIDAgMTYwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xNjAgMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2MCAwIDAtMTYweiJdCiAgICB9OwogICAgZmFBZGQgPSBmYVBsdXM7CiAgICBmYUNvcHkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjBjNSIsICJNMTkyIDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjAwLjZjMC0xNy40LTcuMS0zNC4xLTE5LjctNDYuMkwzNzAuNiAxNy44QzM1OC43IDYuNCAzNDIuOCAwIDMyNi4zIDBMMTkyIDB6TTY0IDEyOGMtMzUuMyAwLTY0IDI4LjctNjQgNjRMMCA0NDhjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTkyIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0xNi02NCAwIDAgMTYtMTkyIDAgMC0yNTYgMTYgMCAwLTY0LTE2IDB6Il0KICAgIH07CiAgICBmYUNoZXNzS2luZzIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlc3Mta2luZyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4MThdLCAiZjQzZiIsICJNMjI0LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMzIgMCAwIDY0IDE1My44IDBjMjEuMSAwIDM4LjIgMTcuMSAzOC4yIDM4LjIgMCA2LjQtMS42IDEyLjctNC43IDE4LjNMMzUyIDM4NCA0MDguMiA0NTQuM2M1IDYuMyA3LjggMTQuMSA3LjggMjIuMiAwIDE5LjYtMTUuOSAzNS41LTM1LjUgMzUuNUw2Ny41IDUxMmMtMTkuNiAwLTM1LjUtMTUuOS0zNS41LTM1LjUgMC04LjEgMi43LTE1LjkgNy44LTIyLjJMOTYgMzg0IDQuNyAyMTYuNkMxLjYgMjEwLjkgMCAyMDQuNiAwIDE5OC4yIDAgMTc3LjEgMTcuMSAxNjAgMzguMiAxNjBsMTUzLjggMCAwLTY0LTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFIb3VzZUZsb29kV2F0ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2UtZmxvb2Qtd2F0ZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZSIsICJNNDk2IDIwOGw0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0wzNDggMTAuNUMzNDAuMyAzLjcgMzMwLjMgMCAzMjAgMHMtMjAuMyAzLjctMjggMTAuNUwxMjEuNCAxNTkuOGMtNiA1LjItOS40IDEyLjgtOS40IDIwLjcgMCAxNS4yIDEyLjMgMjcuNSAyNy41IDI3LjVsNC41IDAgMCA5NC40YzIwLjMtOS40IDQyLjEtMTQuMiA2NC0xNC40IDMzLjEtLjIgNjYuMyAxMC4yIDk0LjQgMzEuNCAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAxNi45LS4xIDMzLjggMi42IDUwIDhsMC04OHptLTIyNC04YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc0LjYgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0MTguMyAxNy42IDQyNi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA1MTQuMyAxNy42IDUyMi4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQml0Y29pblNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYml0Y29pbi1zaWduIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImUwYjQiLCAiTTY0IDI0QzY0IDEwLjcgNzQuNyAwIDg4IDBzMjQgMTAuNyAyNCAyNGwwIDQwIDMyIDAgMC00MGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDEuMWM1NC4zIDcuOCA5NiA1NC40IDk2IDExMC45IDAgMjQuMi03LjcgNDYuNi0yMC43IDY0LjkgMzEuNyAxOS44IDUyLjcgNTUgNTIuNyA5NS4xIDAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0xNiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0zMiAwIDAgNDBjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC00MC0yMi4zIDBDMTguNyA0NDggMCA0MjkuMyAwIDQwNi4zTDAgMTAxLjZDMCA4MC44IDE2LjggNjQgMzcuNiA2NEw2NCA2NCA2NCAyNHptMCAyMDBsMTEyIDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhzLTIxLjUtNDgtNDgtNDhsLTExMiAwIDAgOTZ6bTExMiA2NGwtMTEyIDAgMCA5NiAxNDQgMGMyNi41IDAgNDgtMjEuNSA0OC00OHMtMjEuNS00OC00OC00OGwtMzIgMHoiXQogICAgfTsKICAgIGZhQm94ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODIzMF0sICJmNDY2IiwgIk0zNjkuNCAxMjhsLTM0LjMtNDgtMjIyLjEgMC0zNC4zIDQ4IDI5MC43IDB6TTAgMTQ4LjVjMC0xMy4zIDQuMi0yNi4zIDExLjktMzcuMkw2MC45IDQyLjhDNzIuOSAyNiA5Mi4zIDE2IDExMi45IDE2bDIyMi4xIDBjMjAuNyAwIDQwLjEgMTAgNTIuMSAyNi44bDQ4LjkgNjguNWM3LjggMTAuOSAxMS45IDIzLjkgMTEuOSAzNy4yTDQ0OCA0MTZjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDE0OC41eiJdCiAgICB9OwogICAgZmFTcXVhcmVQbHVzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtcGx1cyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzYxODQ2LCAicGx1cy1zcXVhcmUiXSwgImYwZmUiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTIwMCAzNDRsMC02NC02NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDY0IDAgMC02NGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNjQgNjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNjQgMCAwIDY0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQbHVzU3F1YXJlMiA9IGZhU3F1YXJlUGx1czI7CiAgICBmYUFycm93c0xlZnRSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvd3MtbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvd3MtaCJdLCAiZjA3ZSIsICJNNDcwLjYgMzc0LjZsOTYtOTZjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTk2LTk2Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2w0MS40IDQxLjQtMzU3LjUgMCA0MS40LTQxLjRjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBsLTk2IDk2Yy02IDYtOS40IDE0LjEtOS40IDIyLjZzMy40IDE2LjYgOS40IDIyLjZsOTYgOTZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM2wtNDEuNC00MS40IDM1Ny41IDAtNDEuNCA0MS40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBcnJvd3NIID0gZmFBcnJvd3NMZWZ0UmlnaHQ7CiAgICBmYUZhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjg2MyIsICJNMTYwIDE0NGMwLTc5LjUgNjQuNS0xNDQgMTQ0LTE0NCA4LjggMCAxNiA3LjIgMTYgMTZsMCAxNTIuMmMxNS01LjMgMzEuMi04LjIgNDgtOC4yIDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgOC44LTcuMiAxNi0xNiAxNmwtMTUyLjIgMGM1LjMgMTUgOC4yIDMxLjIgOC4yIDQ4IDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0LTguOCAwLTE2LTcuMi0xNi0xNmwwLTE1Mi4yYy0xNSA1LjMtMzEuMiA4LjItNDggOC4yLTc5LjUgMC0xNDQtNjQuNS0xNDQtMTQ0IDAtOC44IDcuMi0xNiAxNi0xNmwxNTIuMiAwYy01LjMtMTUtOC4yLTMxLjItOC4yLTQ4em05NiAxNDRhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0eiJdCiAgICB9OwogICAgZmFDcm93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNyb3ciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjUyMCIsICJNNDU2LjUgMGMtNDguNiAwLTg4IDM5LjQtODggODhsMCAzNi0zNTUuMiAyNjYuNEMtLjggNDAxLTMuNyA0MjEgNi45IDQzNS4yczMwLjYgMTcgNDQuOCA2LjRsNzYuOC01Ny42IDEzMS4zIDAgNDYuNiAxMTMuMSAxIDIuMmM1LjcgMTAuNyAxOC44IDE1LjUgMzAuMyAxMC44czE3LjMtMTcuMyAxMy45LTI5bC0uOC0yLjMtMzkuMS05NC45IDQwLjkgMGMxLjEgMCAyLjIgMCAzLjIgMGw0Ni42IDExMy4yIDEgMi4yYzUuNyAxMC43IDE4LjggMTUuNSAzMC4zIDEwLjhzMTcuMy0xNy4zIDEzLjktMjlsLS44LTIuMy00Mi0xMDJDNDg1LjMgMzU0LjEgNTQ0LjUgMjgwIDU0NC41IDE5MmwwLTcyIDgwLjUtMjAuMWM4LjYtMi4xIDEzLjgtMTAuOCAxMS42LTE5LjQtNy4xLTI4LjUtMzIuNy00OC41LTYyLjEtNDguNWwtNTAuMSAwQzUwOC4yIDEyLjUgNDgzLjggMCA0NTYuNSAwem0wIDY0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1YTAiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYUxpbmtTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaW5rLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImNoYWluLWJyb2tlbiIsICJjaGFpbi1zbGFzaCIsICJ1bmxpbmsiXSwgImYxMjciLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTEyMi0xMjJjNC4yLTMuNCA4LjMtNy4xIDEyLjEtMTAuOWw3MS4xLTcxLjFjMjkuMy0yOS4zIDQ1LjgtNjkuMSA0NS44LTExMC42IDAtODYuNC03MC0xNTYuNS0xNTYuNS0xNTYuNS0zNy4zIDAtNzMuMSAxMy4zLTEwMS4zIDM3LjIgMjAuMyAxMC4xIDM4LjcgMjMuNSA1NC41IDM5LjUgMTQuMS04LjMgMzAuMi0xMi43IDQ2LjgtMTIuNyA1MS4xIDAgOTIuNSA0MS40IDkyLjUgOTIuNSAwIDI0LjUtOS43IDQ4LTI3LjEgNjUuNGwtNzEuMSA3MS4xYy0zLjkgMy45LTguMSA3LjQtMTIuNiAxMC41bC00Ny41LTQ3LjVjMTYuNS0uOSAyOS43LTE0LjQgMzAuMi0zMS4xIDAtMS4zIDAtMi42IDAtMy45IDAtODYuMy02OS45LTE1Ni45LTE1Ni41LTE1Ni45LTE5LjIgMC0zNy45IDMuNS01NS41IDEwLjJMNDEtMjQuOXpNMjI1LjkgMTYwYy42IDAgMS4xIDAgMS43IDAgMTUuMSAwIDI5LjUgMy43IDQyLjEgMTAuMiAxLjggMS4yIDMuNiAyLjMgNS41IDMuMSAyNi44IDE2LjMgNDQuOCA0NS45IDQ0LjggNzkuNiAwIC40IDAgLjggMCAxLjJMMjI1LjkgMTYwek0zNDYuMiA0MTZMMTkyIDI2MS44YzEuMiA4NC42IDY5LjYgMTUyLjkgMTU0LjEgMTU0LjF6TTEzOS43IDIwOS41bC00NS4zLTQ1LjMtNDguNiA0OC42Yy0yOS4zIDI5LjMtNDUuOCA2OS4xLTQ1LjggMTEwLjYgMCA4Ni40IDcwIDE1Ni41IDE1Ni41IDE1Ni41IDM3LjIgMCA3My4xLTEzLjMgMTAxLjMtMzcuMi0yMC4zLTEwLjEtMzguOC0yMy41LTU0LjYtMzkuNS0xNCA4LjItMzAuMSAxMi42LTQ2LjcgMTIuNi01MS4xIDAtOTIuNS00MS40LTkyLjUtOTIuNSAwLTI0LjUgOS43LTQ4IDI3LjEtNjUuNGw0OC42LTQ4LjZ6Il0KICAgIH07CiAgICBmYUNoYWluQnJva2VuID0gZmFMaW5rU2xhc2g7CiAgICBmYUNoYWluU2xhc2ggPSBmYUxpbmtTbGFzaDsKICAgIGZhVW5saW5rID0gZmFMaW5rU2xhc2g7CiAgICBmYUFycm93Um90YXRlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcm90YXRlLXJpZ2h0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNSwgImFycm93LXJpZ2h0LXJvdGF0ZSIsICJhcnJvdy1yb3RhdGUtZm9yd2FyZCIsICJyZWRvIl0sICJmMDFlIiwgIk00MzYuNyA3NC43TDQ0OCA4NS40IDQ0OCAzMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMTI4YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw0Ny45IDAtNy42LTcuMmMtLjItLjItLjQtLjQtLjYtLjYtNzUtNzUtMTk2LjUtNzUtMjcxLjUgMHMtNzUgMTk2LjUgMCAyNzEuNSAxOTYuNSA3NSAyNzEuNSAwYzguMi04LjIgMTUuNS0xNi45IDIxLjktMjYuMSAxMC4xLTE0LjUgMzAuMS0xOCA0NC42LTcuOXMxOCAzMC4xIDcuOSA0NC42Yy04LjUgMTIuMi0xOC4yIDIzLjgtMjkuMSAzNC43LTEwMCAxMDAtMjYyLjEgMTAwLTM2MiAwUy0yNSAxNzUgNzUgNzVjOTkuOS05OS45IDI2MS43LTEwMCAzNjEuNy0uM3oiXQogICAgfTsKICAgIGZhQXJyb3dSaWdodFJvdGF0ZSA9IGZhQXJyb3dSb3RhdGVSaWdodDsKICAgIGZhQXJyb3dSb3RhdGVGb3J3YXJkID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFSZWRvID0gZmFBcnJvd1JvdGF0ZVJpZ2h0OwogICAgZmFQZW5DbGlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1jbGlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInBlbi1hbHQiXSwgImYzMDUiLCAiTTQwNCAwYzE5LjIgMCAzNy42IDcuNiA1MS4xIDIxLjJsMzUuNyAzNS43QzUwNC40IDcwLjQgNTEyIDg4LjggNTEyIDEwOHMtNy42IDM3LjYtMjEuMiA1MS4xTDQ0NS45IDIwNCAzMDggNjYuMSAzNTIuOSAyMS4yQzM2Ni40IDcuNiAzODQuOCAwIDQwNCAwek0yNzQuMSAxMDBsMCAwIDEzNy45IDEzNy45LTIxNS4xIDIxNS4xYy0xMC43IDEwLjctMjQuMSAxOC41LTM4LjcgMjIuNkwzMC40IDUxMS4xYy04LjMgMi4zLTE3LjMgMC0yMy40LTYuMnMtOC41LTE1LjEtNi4yLTIzLjRMMzYuNCAzNTMuOGM0LjEtMTQuNiAxMS44LTI3LjkgMjIuNi0zOC43TDI0MC4xIDEzMy45IDIyMyAxMTYuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBMODkgMjE3Yy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45TDE1NS4xIDgyLjljMjguMS0yOC4xIDczLjctMjguMSAxMDEuOCAwTDI3NC4xIDEwMHoiXQogICAgfTsKICAgIGZhUGVuQWx0ID0gZmFQZW5DbGlwOwogICAgZmFEb29yQ2xvc2VkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRvb3ItY2xvc2VkIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI4NjgyXSwgImY1MmEiLCAiTTMyIDY0QzMyIDI4LjcgNjAuNyAwIDk2IDBMMzUyIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyTDMyIDY0ek0zMjAgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQXJyb3dEb3duV2lkZVNob3J0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24td2lkZS1zaG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzb3J0LWFtb3VudC1hc2MiLCAic29ydC1hbW91bnQtZG93biJdLCAiZjE2MCIsICJNMjQ2LjYgMzc0LjZsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgMzcwLjcgOTYgNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMwNi43IDQxLjQtNDEuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMHMxMi41IDMyLjggMCA0NS4zek0zMjAgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDk2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTk2IDB6bTAtMTI4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDE2MCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNjAgMHptMC0xMjhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMjI0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIwIDk2eiJdCiAgICB9OwogICAgZmFTb3J0QW1vdW50QXNjID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYVNvcnRBbW91bnREb3duID0gZmFBcnJvd0Rvd25XaWRlU2hvcnQ7CiAgICBmYUNhcmV0RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYXJldC1kb3duIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbXSwgImYwZDciLCAiTTE0MC4zIDM3Ni44YzEyLjYgMTAuMiAzMS4xIDkuNSA0Mi44LTIuMmwxMjgtMTI4YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzMwMS40IDE5MiAyODguNSAxOTJsLTI1NiAwYy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy43IDIzNy41IDkuOSAyNDYuNmwxMjggMTI4IDIuNCAyLjJ6Il0KICAgIH07CiAgICBmYUsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiayIsCiAgICAgIGljb246IFszMjAsIDUxMiwgWzEwN10sICI0YiIsICJNMzExIDg2LjNjMTIuMy0xMi43IDEyLTMyLjktLjctNDUuMnMtMzIuOS0xMi00NS4yIC43QzE0My40IDE2Ny4yIDc2LjQgMjM2LjMgNjQgMjQ5TDY0IDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzAgNDYuMyAwIDY0TDAgNDQ4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMDcgNjQuNy02Ni43IDEzMyAxOTJjMTAuMSAxNC41IDMwIDE4LjEgNDQuNSA4LjFzMTguMS0zMCA4LjEtNDQuNUwxNzQuMSAyMjcuNCAzMTEgODYuM3oiXQogICAgfTsKICAgIGZhQ2hlY2tUb1Nsb3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2hlY2stdG8tc2xvdCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJ2b3RlLXllYSJdLCAiZjc3MiIsICJNNTUyIDI4OGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDEwNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzEyYzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDRjMCA4LjggNy4yIDE2IDE2IDE2bDQ0OCAwYzguOCAwIDE2LTcuMiAxNi0xNmwwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHpNNDE2IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0yNTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMOTYgOTZjMC0zNS4zIDI4LjctNjQgNjQtNjRsMjU2IDB6bS0zNy4xIDg0LjZjLTEwLjctNy44LTI1LjctNS40LTMzLjUgNS4zbC04NS42IDExNy43LTI2LjUtMjcuNGMtOS4yLTkuNS0yNC40LTkuOC0zMy45LS42LTkuNSA5LjItOS44IDI0LjQtLjYgMzMuOWw0Ni40IDQ4YzQuOSA1LjEgMTEuOCA3LjggMTguOSA3LjNzMTMuNi00LjEgMTcuOC05LjhMMzg0LjIgMTUwLjFjNy44LTEwLjcgNS40LTI1LjctNS4zLTMzLjV6Il0KICAgIH07CiAgICBmYVZvdGVZZWEgPSBmYUNoZWNrVG9TbG90OwogICAgZmFGaXNoRmlucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaXNoLWZpbnMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTRmMiIsICJNMjc1LjIgMzguNGMtMTAuNi04LTI1LTguNS0zNi4zLTEuNVMyMjIgNTcuMyAyMjQuNiA3MC4zbDkuNyA0OC42Yy0xOS40IDktMzYuOSAxOS45LTUyLjQgMzEuNS0xNS4zIDExLjUtMjkgMjMuOS00MC43IDM2LjNMNDguMSAxMzIuNGMtMTIuNS03LjMtMjguNC01LjMtMzguNyA0LjlzLTEyLjQgMjYtNS4zIDM4LjZMNTAgMjU2IDQuMiAzMzYuMWMtNy4yIDEyLjYtNSAyOC40IDUuMyAzOC42czI2LjEgMTIuMiAzOC43IDQuOWw5My4xLTU0LjNjMTEuOCAxMi4zIDI1LjQgMjQuOCA0MC43IDM2LjMgMTUuNSAxMS42IDMzIDIyLjUgNTIuNCAzMS41bC05LjcgNDguNmMtMi42IDEzIDMuMSAyNi4zIDE0LjMgMzMuM3MyNS42IDYuNSAzNi4zLTEuNWw3Ny42LTU4LjJjNTQuOS00IDEwMS41LTI3IDEzNy4yLTUzLjggMzkuMi0yOS40IDY3LjItNjQuNyA4MS42LTg5LjUgNS44LTkuOSA1LjgtMjIuMiAwLTMyLjEtMTQuNC0yNC44LTQyLjUtNjAuMS04MS42LTg5LjUtMzUuOC0yNi44LTgyLjMtNDkuOC0xMzcuMi01My44TDI3NS4yIDM4LjR6TTM4NCAyNTZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHoiXQogICAgfTsKICAgIGZhQ29tcHJlc3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29tcHJlc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjA2NiIsICJNMTYwIDY0YzAtMTcuNy0xNC4zLTMyLTMyLTMyUzk2IDQ2LjMgOTYgNjRsMCA2NC02NCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NnpNMzIgMzIwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDY0IDAgMCA2NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtOTZjMC0xNy43LTE0LjMtMzItMzItMzJsLTk2IDB6TTM1MiA2NGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDk2YzAgMTcuNyAxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTY0IDAgMC02NHpNMzIwIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtNjQgNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMHoiXQogICAgfTsKICAgIGZhQXJyb3dVcEFaID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLXVwIl0sICJmMTVlIiwgIk00MTIuNiA0OS43QzQwNy4yIDM4LjggMzk2LjEgMzIgMzg0IDMycy0yMy4yIDYuOC0yOC42IDE3LjdjLTUwLjcgMTAxLjMtNzcuMyAxNTQuNy04MCAxNjAtNy45IDE1LjgtMS41IDM1IDE0LjMgNDIuOXMzNSAxLjUgNDIuOS0xNC4zbDcuMi0xNC4zIDg4LjQgMCA3LjIgMTQuM2M3LjkgMTUuOCAyNy4xIDIyLjIgNDIuOSAxNC4zczIyLjItMjcuMSAxNC4zLTQyLjljLTIuNy01LjMtMjkuMy01OC43LTgwLTE2MHpNMzg0IDEzNS42bDIwLjIgNDAuNC00MC40IDAgMjAuMi00MC40ek0yODggMzIwYzAgMTcuNyAxNC4zIDMyIDMyIDMybDUwLjcgMC03My40IDczLjRjLTkuMiA5LjItMTEuOSAyMi45LTYuOSAzNC45UzMwNy4xIDQ4MCAzMjAgNDgwbDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC01MC43IDAgNzMuNC03My40YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ2MC45IDI4OCA0NDggMjg4bC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6TTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC04MCA4MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDI1LjQgMjUuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC04MC04MHoiXQogICAgfTsKICAgIGZhU29ydEFscGhhVXAgPSBmYUFycm93VXBBWjsKICAgIGZhVXNlckdyYWR1YXRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInVzZXItZ3JhZHVhdGUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjUwMSIsICJNMjQxLjMtMTNjLTExLjQtMi4zLTIzLjEtMi4zLTM0LjUgMEwxOS4zIDI0LjVDOC4xIDI2LjcgMCAzNi42IDAgNDggMCA1OC4zIDYuNSA2Ny4zIDE2IDcwLjZMMTYgMTQ0IC4zIDIyMi42Yy0uMiAuOS0uMyAxLjktLjMgMi45IDAgOCA2LjUgMTQuNiAxNC42IDE0LjZsMzQuOSAwYzggMCAxNC42LTYuNSAxNC42LTE0LjYgMC0xLS4xLTEuOS0uMy0yLjlMNDggMTQ0IDQ4IDc3LjMgOTYgODYuOSA5NiAxNDRjMCA3MC43IDU3LjMgMTI4IDEyOCAxMjhzMTI4LTU3LjMgMTI4LTEyOGwwLTU3LjEgNzYuNy0xNS4zQzQzOS45IDY5LjMgNDQ4IDU5LjQgNDQ4IDQ4cy04LjEtMjEuMy0xOS4zLTIzLjVMMjQxLjMtMTN6TTIyNCAyMjRjLTQ0LjIgMC04MC0zNS44LTgwLTgwbDE2MCAwYzAgNDQuMi0zNS44IDgwLTgwIDgwek0xMjAuMSAzMjAuMUM1OC43IDM0OC4zIDE2IDQxMC4zIDE2IDQ4Mi4zIDE2IDQ5OC43IDI5LjMgNTEyIDQ1LjcgNTEybDE1NC4zIDAgMC0xNDYtNTcuNC00M2MtNi41LTQuOS0xNS4yLTYuMi0yMi42LTIuOHpNMjQ4IDUxMmwxNTQuMyAwYzE2LjQgMCAyOS43LTEzLjMgMjkuNy0yOS43IDAtNzItNDIuNy0xMzQtMTA0LjEtMTYyLjEtNy40LTMuNC0xNi4xLTIuMS0yMi42IDIuOGwtNTcuNCA0MyAwIDE0NnoiXQogICAgfTsKICAgIGZhRmlsZUNvZGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29kZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMWM5IiwgIk0wIDY0QzAgMjguNyAyOC43IDAgNjQgMEwyMTMuNSAwYzE3IDAgMzMuMyA2LjcgNDUuMyAxOC43TDM2NS4zIDEyNS4zYzEyIDEyIDE4LjcgMjguMyAxOC43IDQ1LjNMMzg0IDQ0OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgNjR6bTIwOC01LjVsMCA5My41YzAgMTMuMyAxMC43IDI0IDI0IDI0TDMyNS41IDE3NiAyMDggNTguNXpNMTU0LjIgMjk1LjZjOC42LTEwLjEgNy41LTI1LjItMi42LTMzLjhzLTI1LjItNy41LTMzLjggMi42bC00OCA1NmMtNy43IDktNy43IDIyLjIgMCAzMS4ybDQ4IDU2YzguNiAxMC4xIDIzLjggMTEuMiAzMy44IDIuNnMxMS4yLTIzLjggMi42LTMzLjhsLTM0LjYtNDAuNCAzNC42LTQwLjR6bTExMi0zMS4yYy04LjYtMTAuMS0yMy44LTExLjItMzMuOC0yLjZzLTExLjIgMjMuOC0yLjYgMzMuOGwzNC42IDQwLjQtMzQuNiA0MC40Yy04LjYgMTAuMS03LjUgMjUuMiAyLjYgMzMuOHMyNS4yIDcuNSAzMy44LTIuNmw0OC01NmM3LjctOSA3LjctMjIuMiAwLTMxLjJsLTQ4LTU2eiJdCiAgICB9OwogICAgZmFTb2FwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNvYXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjk1MzJdLCAiZTA2ZSIsICJNMjA4LTMyYTQ4IDQ4IDAgMSAxIDAgOTYgNDggNDggMCAxIDEgMC05NnpNMzIwIDk2YTY0IDY0IDAgMSAxIDAgMTI4IDY0IDY0IDAgMSAxIDAtMTI4ek0zNTIgMGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwek05NiAxNjBsMTEyIDBjMCAyMy44IDcuNCA0NS45IDIwLjEgNjRMMTYwIDIyNGMtNTMgMC05NiA0My05NiA5NnM0MyA5NiA5NiA5NmwxOTIgMGM1MyAwIDk2LTQzIDk2LTk2IDAtMzUuMS0xOC45LTY1LjktNDctODIuNiAxOS0xOS44IDMwLjctNDYuNiAzMS03Ni4xIDQ1LjQgNy42IDgwIDQ3LjEgODAgOTQuN2wwIDEyOGMwIDUzLTQzIDk2LTk2IDk2TDk2IDQ4MGMtNTMgMC05Ni00My05Ni05NkwwIDI1NmMwLTUzIDQzLTk2IDk2LTk2em02NCAxMTJsMTkyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhzLTIxLjUgNDgtNDggNDhsLTE5MiAwYy0yNi41IDAtNDgtMjEuNS00OC00OHMyMS41LTQ4IDQ4LTQ4eiJdCiAgICB9OwogICAgZmFSZWN5Y2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlY3ljbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5ODQyLCA5ODUwLCA5ODUxXSwgImYxYjgiLCAiTTE1Mi4zIDYwQzE5OC41LTIwIDMxNC0yMCAzNjAuMiA2MGwzNy4zIDY0LjYgMjcuNy0xNmM4LjQtNC45IDE4LjktNC4yIDI2LjYgMS43czExLjEgMTUuOSA4LjYgMjUuM0w0MzYuOSAyMjNjLTMuNCAxMi44LTE2LjYgMjAuNC0yOS40IDE3bC04Ny40LTIzLjRjLTkuNC0yLjUtMTYuMy0xMC40LTE3LjYtMjBzMy40LTE5LjEgMTEuOC0yMy45bDI3LjctMTYtMzcuMy02NC42Yy0yMS42LTM3LjMtNzUuNC0zNy4zLTk3IDBsLTUuMyA5LjFjLTguOCAxNS4zLTI4LjQgMjAuNS00My43IDExLjdTMTM4LjIgODQuNSAxNDcgNjkuMWw1LjMtOS4xek00NDkuNyAyNzkuMWMxNS4zLTguOCAzNC45LTMuNiA0My43IDExLjdsNS4zIDkuMWM0Ni4yIDgwLTExLjUgMTgwLTEwMy45IDE4MGwtNzQuNiAwIDAgMzJjMCA5LjctNS44IDE4LjUtMTQuOCAyMi4ycy0xOS4zIDEuNy0yNi4yLTUuMmwtNjQtNjRjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45bDY0LTY0YzYuOS02LjkgMTcuMi04LjkgMjYuMi01LjJzMTQuOCAxMi41IDE0LjggMjIuMmwwIDMyIDc0LjYgMGM0My4xIDAgNzAuMS00Ni43IDQ4LjUtODRsLTUuMy05LjFjLTguOC0xNS4zLTMuNi0zNC45IDExLjctNDMuN3pNNTEgMjM1LjRsLTI3LjctMTZjLTguNC00LjktMTMuMS0xNC4zLTExLjgtMjMuOXM4LjItMTcuNSAxNy42LTIwTDExNi41IDE1MmMxMi44LTMuNCAyNiA0LjIgMjkuNCAxN2wyMy40IDg3LjRjMi41IDkuNC0uOSAxOS4zLTguNiAyNS4zcy0xOC4yIDYuNi0yNi42IDEuN2wtMjcuNy0xNi0zNy4zIDY0LjZjLTIxLjYgMzcuMyA1LjQgODQgNDguNSA4NGwxMC42IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTEwLjYgMEMyNS4zIDQ4MC0zMi40IDM4MCAxMy44IDMwMEw1MSAyMzUuNHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5XaW5rMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4td2luayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJncmluLXdpbmsiXSwgImY1OGMiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0zODYuNyAzMDguOWMxMS45LTMuNyAyMy45IDYuMyAxOS42IDE4LjEtMjIuNCA2MS4zLTgxLjMgMTA1LjEtMTUwLjMgMTA1LjFTMTI4LjEgMzg4LjIgMTA1LjcgMzI2LjljLTQuMy0xMS44IDcuNy0yMS44IDE5LjYtMTguMSAzOS4yIDEyLjIgODMuNyAxOS4xIDEzMC43IDE5LjFzOTEuNS02LjkgMTMwLjctMTkuMXpNMzI4IDE5NmMtMTEgMC0yMCA5LTIwIDIwcy05IDIwLTIwIDIwLTIwLTktMjAtMjBjMC0zMy4xIDI2LjktNjAgNjAtNjBsMTYgMGMzMy4xIDAgNjAgMjYuOSA2MCA2MCAwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjAtOS0yMC0yMC0yMGwtMTYgMHpNMTc2IDE3NmEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6Il0KICAgIH07CiAgICBmYUdyaW5XaW5rMiA9IGZhRmFjZUdyaW5XaW5rMjsKICAgIGZhV2F0ZXJMYWRkZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2F0ZXItbGFkZGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImxhZGRlci13YXRlciIsICJzd2ltbWluZy1wb29sIl0sICJmNWM1IiwgIk0zNzQuNSA0MDUuN2MzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTYuOSAxMi43IDMyLjkgMjEuNSA0Ny44IDI0LjYgMTMuNyAyLjggMjcuNCAuOSA0Mi4zLTEwLjMgMTAuNi04IDI1LjYtNS45IDMzLjYgNC43czUuOCAyNS43LTQuOCAzMy42Yy0yNi40IDE5LjktNTQuMiAyNC40LTgwLjcgMTkuMS0yNS4zLTUuMS00OC4xLTE4LjktNjcuMi0zMy4zLTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAwLTI0LjIgMTguMy01Mi4zIDM1LjktODMuNCAzNS45cy01OS4xLTE3LjctODMuMy0zNS45Yy0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0yMy44IDE3LjktNTQuMSAzNS41LTg4LjEgMzUuMy0yMC40LS4xLTQwLjctNi43LTU5LjgtMjEuMS0xMC42LTgtMTIuNy0yMy00LjctMzMuNnMyMy0xMi43IDMzLjYtNC43YzExLjMgOC41IDIxLjYgMTEuNCAzMS4yIDExLjUgMTcuNiAuMSAzNy4zLTkuNCA1OC45LTI1LjcgMzguNC0yOSA5MC42LTI5IDEyOSAwIDI0IDE4LjEgNDAuNyAyNi4zIDU0LjUgMjYuM3MzMC41LTguMiA1NC41LTI2LjN6TTUxMS44IDMyYzQ4LjMgMCA4OSAzNiA5NSA4My45bDEgOC4yYzIuMiAxNy41LTEwLjIgMzMuNS0yNy44IDM1LjdzLTMzLjUtMTAuMi0zNS43LTI3LjhsLTEtOC4yYy0yLTE1LjktMTUuNS0yNy44LTMxLjUtMjcuOC0xNy41IDAtMzEuOCAxNC4yLTMxLjggMzEuOGwwIDIxMS44Yy0yMy4xLTUuMS00NC45LTQuNC02NC0uNGwwLTUxLjItMTkyIDAgMCA0OC43Yy01LjMtLjUtMTAuNy0uOC0xNi0uNy0xNi4yIC4xLTMyLjQgMi43LTQ4IDhsMC0yMTYuMmMwLTUyLjkgNDIuOS05NS44IDk1LjctOTUuOCA0OC4zIDAgODkgMzYgOTUgODMuOWwxIDguMmMyLjIgMTcuNS0xMC4yIDMzLjUtMjcuOCAzNS43cy0zMy41LTEwLjItMzUuNy0yNy44bC0xLTguMmMtMi0xNS45LTE1LjUtMjcuOC0zMS41LTI3LjgtMTcuNSAwLTMxLjcgMTQuMi0zMS43IDMxLjhsMCA5Ni4yIDE5MiAwIDAtOTYuMkM0MTYgNzQuOSA0NTguOSAzMiA1MTEuOCAzMnoiXQogICAgfTsKICAgIGZhTGFkZGVyV2F0ZXIgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFTd2ltbWluZ1Bvb2wgPSBmYVdhdGVyTGFkZGVyOwogICAgZmFUb3dlckNlbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItY2VsbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTg1IiwgIk01OS42IDkuOEM0Ny4zIDQuOCAzMy4zIDEwLjcgMjguNCAyMyAxNS4yIDU1LjUgOCA5MC45IDggMTI4czcuMiA3Mi41IDIwLjQgMTA1YzUgMTIuMyAxOSAxOC4yIDMxLjMgMTMuMnMxOC4yLTE5IDEzLjItMzEuM0M2MiAxODguMiA1NiAxNTguOCA1NiAxMjhzNi02MC4yIDE2LjktODdjNS0xMi4zLTEtMjYuMy0xMy4yLTMxLjN6bTQ1Ni44IDBjLTEyLjMgNS0xOC4yIDE5LTEzLjIgMzEuMyAxMC45IDI2LjggMTYuOSA1Ni4yIDE2LjkgODdzLTYgNjAuMi0xNi45IDg3Yy01IDEyLjMgMSAyNi4zIDEzLjIgMzEuM3MyNi4zLTEgMzEuMy0xMy4yYzEzLjEtMzIuNSAyMC40LTY3LjkgMjAuNC0xMDVzLTcuMi03Mi41LTIwLjQtMTA1Yy01LTEyLjMtMTktMTguMi0zMS4zLTEzLjJ6TTM0MC4xIDE2NS4yYzcuNS0xMC41IDExLjktMjMuMyAxMS45LTM3LjIgMC0zNS4zLTI4LjctNjQtNjQtNjRzLTY0IDI4LjctNjQgNjRjMCAxMy45IDQuNCAyNi43IDExLjkgMzcuMkw5OC45IDQ2Ni44Yy03LjMgMTYuMS0uMiAzNS4xIDE1LjkgNDIuNHMzNS4xIC4yIDQyLjQtMTUuOWwyMC42LTQ1LjIgMjIwLjYgMCAyMC42IDQ1LjJjNy4zIDE2LjEgMjYuMyAyMy4yIDQyLjQgMTUuOXMyMy4yLTI2LjMgMTUuOS00Mi40TDM0MC4xIDE2NS4yek0zNzYuNSA0MDBsLTE3NyAwIDIxLjgtNDggMTMzLjMgMCAyMS44IDQ4ek0yODggMjA1LjNsNDQuOCA5OC43LTg5LjcgMCA0NC44LTk4Ljd6TTE2My4zIDczLjZjNS4zLTEyLjEtLjItMjYuMy0xMi40LTMxLjZzLTI2LjMgLjItMzEuNiAxMi40QzEwOS41IDc3IDEwNCAxMDEuOSAxMDQgMTI4czUuNSA1MSAxNS4zIDczLjZjNS4zIDEyLjEgMTkuNSAxNy43IDMxLjYgMTIuNHMxNy43LTE5LjUgMTIuNC0zMS42QzE1NiAxNjUuOCAxNTIgMTQ3LjQgMTUyIDEyOHM0LTM3LjggMTEuMy01NC40ek00NTYuNyA1NC40Yy01LjMtMTIuMS0xOS41LTE3LjctMzEuNi0xMi40cy0xNy43IDE5LjUtMTIuNCAzMS42QzQyMCA5MC4yIDQyNCAxMDguNiA0MjQgMTI4cy00IDM3LjgtMTEuMyA1NC40Yy01LjMgMTIuMSAuMiAyNi4zIDEyLjQgMzEuNnMyNi4zLS4yIDMxLjYtMTIuNEM0NjYuNSAxNzkgNDcyIDE1NC4xIDQ3MiAxMjhzLTUuNS01MS0xNS4zLTczLjZ6Il0KICAgIH07CiAgICBmYUNvbG9uU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2xvbi1zaWduIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImUxNDAiLCAiTTIxMy44IDguN2MxMi45IDMuMiAyMC43IDE2LjIgMTcuNSAyOS4xbC00LjYgMTguNWMxNS40IC44IDMwLjQgMy40IDQ0LjcgNy41bDkuNC0zNy42QzI4My45IDEzLjMgMjk3IDUuNSAzMDkuOCA4LjdTMzMwLjUgMjUgMzI3LjMgMzcuOEwzMTYgODIuOGMxMy41IDcuOCAyNiAxNy4xIDM3LjIgMjcuOCAxMi45IDEyLjEgMTMuNCAzMi40IDEuMyA0NS4ycy0zMi40IDEzLjQtNDUuMiAxLjNjLTMuMS0yLjktNi40LTUuOC05LjgtOC40TDIzOS4yIDM5MGMyNi45LTQuNiA1MS4xLTE3LjEgNzAuMS0zNS4xIDEyLjktMTIuMSAzMy4xLTExLjUgNDUuMiAxLjNzMTEuNSAzMy4xLTEuMyA0NS4yYy0zNC4zIDMyLjMtODAgNTIuOC0xMzAuNSA1NC40bC03LjUgMjkuOWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNXMtMjAuNy0xNi4yLTE3LjUtMjkuMWw1LjYtMjIuNWMtMTUtMy4yLTI5LjQtOC00Mi45LTE0LjRsLTEyLjEgNDguNWMtMy4yIDEyLjktMTYuMiAyMC43LTI5LjEgMTcuNVM2OS41IDQ4NyA3Mi43IDQ3NC4ybDE2LTYzLjlDNDQuMyAzNzMuNiAxNiAzMTguMSAxNiAyNTYgMTYgMTU5LjIgODQuOCA3OC40IDE3Ni4zIDYwbDguNC0zMy44QzE4Ny45IDEzLjMgMjAxIDUuNSAyMTMuOCA4Ljd6TTE1OCAxMzIuOWMtNDYuMSAyMS44LTc4IDY4LjctNzggMTIzLjEgMCAzMC41IDEwIDU4LjYgMjYuOSA4MS4zTDE1OCAxMzIuOXpNMTQ3LjQgMzczLjRjMTMgNy42IDI3LjMgMTMuMSA0Mi41IDE2LjFsNjUuOS0yNjMuNmMtMTIuNi0zLjgtMjUuOS01LjktMzkuOC01LjktMS44IDAtMy41IDAtNS4zIC4xTDE0Ny40IDM3My40eiJdCiAgICB9OwogICAgZmFMYXB0b3BGaWxlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxhcHRvcC1maWxlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MWQiLCAiTTY0IDY0QzY0IDI4LjcgOTIuNyAwIDEyOCAwTDQxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNDgtNjQgMCAwLTQ4LTI4OCAwIDAgMTkyIDExMiAwIDAgOTYtMTYzLjIgMEMzNC40IDM1MiAwIDMxNy42IDAgMjc1LjIgMCAyNjQuNiA4LjYgMjU2IDE5LjIgMjU2TDY0IDI1NiA2NCA2NHpNNTI5LjkgMjU3LjljOSA5IDE0LjEgMjEuMiAxNC4xIDMzLjlMNTQ0IDQ2NGMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTYwIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMjU2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDc2LjEgMGMxMi43IDAgMjQuOSA1LjEgMzMuOSAxNC4xIDIwIDIwIDQ3LjkgNDcuOSA4My45IDgzLjl6TTQxNiAyNzJjMCA4LjggNy4yIDE2IDE2IDE2bDYwLjEgMC03Ni4xLTc2LjEgMCA2MC4xeiJdCiAgICB9OwogICAgZmFCYWhhaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYWhhaSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYXlrYWwiXSwgImY2NjYiLCAiTTI4OC40LThjMTMuMiAwIDI1IDguMSAyOS44IDIwLjRsMzEuOSA4MiA3Ny4yLTQyLjNjMTEuNi02LjMgMjUuOC00LjkgMzUuOSAzLjVzMTQgMjIuMyA5LjcgMzQuOGwtMjguMiA4My4zIDg2LjMgMTcuMmMxMi45IDIuNiAyMyAxMi44IDI1LjMgMjUuOHMtMy42IDI2LjEtMTQuOSAzMi45bC03NS4yIDQ1LjcgNTUgNjguNmM4LjMgMTAuMyA5LjMgMjQuNiAyLjcgMzZzLTE5LjUgMTcuNi0zMi42IDE1LjZsLTg3LTEzLjMtMiA4OGMtLjMgMTMuMi04LjYgMjQuOC0yMSAyOS40cy0yNi4zIDEtMzUtOWwtNTgtNjYuMS01OCA2Ni4xYy04LjcgOS45LTIyLjYgMTMuNS0zNSA5cy0yMC44LTE2LjItMjEtMjkuNGwtMi04OC04NyAxMy4zYy0xMyAyLTI2LTQuMi0zMi42LTE1LjZzLTUuNS0yNS43IDIuNy0zNmw1NS02OC42LTc1LjItNDUuN2MtMTEuMy02LjgtMTcuMi0xOS45LTE0LjktMzIuOXMxMi4zLTIzLjIgMjUuMy0yNS44bDg2LjMtMTcuMi0yOC4yLTgzLjNjLTQuMi0xMi41LS40LTI2LjMgOS43LTM0LjhzMjQuNC05LjkgMzUuOS0zLjVsNzcuMSA0Mi4zIDMxLjktODJDMjYzLjMgLjEgMjc1LjItOCAyODguNC04em0wIDEyMC4yTDI3MyAxNTEuNmMtMy4zIDguNi0xMC4yIDE1LjMtMTguOSAxOC41cy0xOC4yIDIuNC0yNi4zLTJsLTM3LTIwLjMgMTMuNiA0MGMzIDguNyAyIDE4LjMtMi42IDI2LjNzLTEyLjQgMTMuNi0yMS41IDE1LjRsLTQxLjQgOC4zIDM2LjEgMjEuOWM3LjkgNC44IDEzLjMgMTIuNyAxNC45IDIxLjhzLS44IDE4LjQtNi41IDI1LjZsLTI2LjQgMzMgNDEuOC02LjRjOS4xLTEuNCAxOC40IDEuMiAyNS40IDcuMXMxMS4yIDE0LjYgMTEuNCAyMy44bC45IDQyLjIgMjcuOS0zMS44YzYuMS02LjkgMTQuOC0xMC45IDI0LjEtMTAuOXMxOCA0IDI0LjEgMTAuOWwyNy45IDMxLjggLjktNDIuMmMuMi05LjIgNC40LTE3LjkgMTEuNC0yMy44czE2LjMtOC41IDI1LjQtNy4xbDQxLjggNi40LTI2LjQtMzNjLTUuOC03LjItOC4yLTE2LjUtNi42LTI1LjZzNy0xNyAxNC45LTIxLjhsMzYuMS0yMS45LTQxLjQtOC4zYy05LTEuOC0xNi45LTcuNC0yMS41LTE1LjRzLTUuNS0xNy42LTIuNi0yNi4zbDEzLjYtNDAtMzcgMjAuM2MtOC4xIDQuNC0xNy43IDUuMi0yNi4zIDJzLTE1LjUtOS45LTE4LjktMTguNWwtMTUuMy0zOS40eiJdCiAgICB9OwogICAgZmFIYXlrYWwgPSBmYUJhaGFpOwogICAgZmFNb25leUJpbGwxMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtb25leS1iaWxsLTEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsibW9uZXktYmlsbC1hbHQiXSwgImYzZDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0em0xOTIgODBhMTEyIDExMiAwIDEgMSAwIDIyNCAxMTIgMTEyIDAgMSAxIDAtMjI0ek02NCAxODRsMC00OGMwLTQuNCAzLjYtOCA4LThsNDggMGM0LjQgMCA4LjEgMy42IDcuNSA4LTMuNiAyOS0yNi42IDUxLjktNTUuNSA1NS41LTQuNCAuNS04LTMuMS04LTcuNXptMCAxNDRjMC00LjQgMy42LTguMSA4LTcuNSAyOSAzLjYgNTEuOSAyNi42IDU1LjUgNTUuNSAuNSA0LjQtMy4xIDgtNy41IDhsLTQ4IDBjLTQuNCAwLTgtMy42LTgtOGwwLTQ4ek00NDAgMTkxLjVjLTI5LTMuNi01MS45LTI2LjYtNTUuNS01NS41LS41LTQuNCAzLjEtOCA3LjUtOGw0OCAwYzQuNCAwIDggMy42IDggOGwwIDQ4YzAgNC40LTMuNiA4LjEtOCA3LjV6TTQ0OCAzMjhsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjUgNC40LS41IDggMy4xIDggNy41ek0yNDAgMTg4Yy0xMSAwLTIwIDktMjAgMjAgMCA5LjcgNi45IDE3LjcgMTYgMTkuNmwwIDQ4LjQtNCAwYy0xMSAwLTIwIDktMjAgMjBzOSAyMCAyMCAyMGw0OCAwYzExIDAgMjAtOSAyMC0yMHMtOS0yMC0yMC0yMGwtNCAwIDAtNjhjMC0xMS05LTIwLTIwLTIwbC0xNiAweiJdCiAgICB9OwogICAgZmFNb25leUJpbGxBbHQyID0gZmFNb25leUJpbGwxMjsKICAgIGZhQ2xvdWRCb2x0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNsb3VkLWJvbHQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc3ODUsICJ0aHVuZGVyc3Rvcm0iXSwgImY3NmMiLCAiTTAgMjI0YzAgNTMgNDMgOTYgOTYgOTZsMzguNiAwIDEyNC4xLTExMWMxMi4yLTEwLjkgMjgtMTcgNDQuNC0xNyA0NC42IDAgNzYuNSA0MyA2My43IDg1LjdMMzU0LjEgMzIwIDQxNiAzMjBjNTMgMCA5Ni00MyA5Ni05NnMtNDMtOTYtOTYtOTZjLS41IDAtMS4xIDAtMS42IDAgMS4xLTUuMiAxLjYtMTAuNSAxLjYtMTYgMC00NC4yLTM1LjgtODAtODAtODAtMjQuMyAwLTQ2LjEgMTAuOS02MC44IDI4LTE4LjctMzUuNy01Ni4xLTYwLTk5LjItNjAtNjEuOSAwLTExMiA1MC4xLTExMiAxMTIgMCA3LjEgLjcgMTQuMSAxLjkgMjAuOC0zOC4zIDEyLjYtNjUuOSA0OC43LTY1LjkgOTEuMnpNMTYwLjYgNDAwbDYxLjggMC0zMS4yIDEwNC4xYy0zLjYgMTEuOSA1LjMgMjMuOSAxNy44IDIzLjkgNC42IDAgOS0xLjcgMTIuNC00LjdMMzYyLjUgMzk2LjljMy41LTMuMSA1LjUtNy42IDUuNS0xMi40IDAtOS4yLTcuNC0xNi42LTE2LjYtMTYuNmwtNjEuOCAwIDMxLjItMTA0LjFjMy42LTExLjktNS4zLTIzLjktMTcuOC0yMy45LTQuNiAwLTkgMS43LTEyLjQgNC43TDE0OS41IDM3MS4xYy0zLjUgMy4xLTUuNSA3LjYtNS41IDEyLjQgMCA5LjIgNy40IDE2LjYgMTYuNiAxNi42eiJdCiAgICB9OwogICAgZmFUaHVuZGVyc3Rvcm0gPSBmYUNsb3VkQm9sdDsKICAgIGZhRXRoZXJuZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXRoZXJuZXQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjc5NiIsICJNMCAyMjRMMCA0MTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDY0IDAgMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNGwwIDEwNCA2NCAwIDAtMTA0YzAtMTMuMyAxMC43LTI0IDI0LTI0czI0IDEwLjcgMjQgMjRsMCAxMDQgNjQgMCAwLTEwNGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTA0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xOTJjMC0xNy43LTE0LjMtMzItMzItMzJsLTMyIDAgMC0zMmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyTDE2MCA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMi0zMiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDMyLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyeiJdCiAgICB9OwogICAgZmFIcnl2bmlhU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJocnl2bmlhLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4MzcyLCAiaHJ5dm5pYSJdLCAiZjZmMiIsICJNMzM2IDE0OS40QzMzNiA3NyAyNjguNSAyMy41IDE5OCA0MC4xTDkzLjIgNjQuOUM3NiA2OC45IDY1LjQgODYuMiA2OS40IDEwMy40czIxLjMgMjcuOSAzOC41IDIzLjhsMTA0LjgtMjQuN2MzMC4zLTcuMSA1OS4zIDE1LjggNTkuMyA0Ni45IDAgMTcuNi05LjYgMzMuOC0yNSA0Mi4zbC0uNyAuNC0yMjIuMyAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzNiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMi40IDBjNS41LTEzLjMgOC40LTI3LjggOC40LTQyLjZ6TTM2MCAyNzJMMjQgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDMzLjMgMGMtNi4xIDEzLjQtOS4zIDI4LjEtOS4zIDQzLjMgMCA2NC4xIDU2LjkgMTEzLjQgMTIwLjQgMTA0LjJsMTM3LjktMTkuOWMxNy41LTIuNSAyOS42LTE4LjcgMjcuMS0zNi4ycy0xOC44LTI5LjYtMzYuMi0yNy4xTDE1OS4yIDQwNC4yYy0yNC45IDMuNi00Ny4yLTE1LjctNDcuMi00MC45IDAtMTUuMSA4LjItMjguOSAyMS40LTM2LjJsMTMtNy4xIDIxMy42IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjR6Il0KICAgIH07CiAgICBmYUhyeXZuaWEgPSBmYUhyeXZuaWFTaWduOwogICAgZmFFeWVTbGFzaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZXllLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzAiLCAiTTQxLTI0LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwUy0yLjMtLjMgNyA5LjFsNTI4IDUyOGM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTk2LjQtOTYuNGMyLjctMi40IDUuNC00LjggOC03LjIgNDYuOC00My41IDc4LjEtOTUuNCA5My0xMzEuMSAzLjMtNy45IDMuMy0xNi43IDAtMjQuNi0xNC45LTM1LjctNDYuMi04Ny43LTkzLTEzMS4xLTQ3LjEtNDMuNy0xMTEuOC04MC42LTE5Mi42LTgwLjYtNTYuOCAwLTEwNS42IDE4LjItMTQ2IDQ0LjJMNDEtMjQuOXpNMjA0LjUgMTM4LjdjMjMuNS0xNi44IDUyLjQtMjYuNyA4My41LTI2LjcgNzkuNSAwIDE0NCA2NC41IDE0NCAxNDQgMCAzMS4xLTkuOSA1OS45LTI2LjcgODMuNWwtMzQuNy0zNC43YzEyLjctMjEuNCAxNy00Ny43IDEwLjEtNzMuNy0xMy43LTUxLjItNjYuNC04MS42LTExNy42LTY3LjktOC42IDIuMy0xNi43IDUuNy0yNCAxMGwtMzQuNy0zNC43ek0zMjUuMyAzOTUuMWMtMTEuOSAzLjItMjQuNCA0LjktMzcuMyA0LjktNzkuNSAwLTE0NC02NC41LTE0NC0xNDQgMC0xMi45IDEuNy0yNS40IDQuOS0zNy4zTDY5LjQgMTM5LjJjLTMyLjYgMzYuOC01NSA3NS44LTY2LjkgMTA0LjUtMy4zIDcuOS0zLjMgMTYuNyAwIDI0LjYgMTQuOSAzNS43IDQ2LjIgODcuNyA5MyAxMzEuMSA0Ny4xIDQzLjcgMTExLjggODAuNiAxOTIuNiA4MC42IDM3LjMgMCA3MS4yLTcuOSAxMDEuNS0yMC42bC02NC4yLTY0LjJ6Il0KICAgIH07CiAgICBmYUNhcnRGbGF0YmVkU3VpdGNhc2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1mbGF0YmVkLXN1aXRjYXNlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImx1Z2dhZ2UtY2FydCJdLCAiZjU5ZCIsICJNMCAzMkMwIDE0LjMgMTQuMyAwIDMyIDBMNDggMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDI4OGMwIDguOCA3LjIgMTYgMTYgMTZsNDAwIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM0LjcgMGMxLjggNSAyLjcgMTAuNCAyLjcgMTYgMCAyNi41LTIxLjUgNDgtNDggNDhzLTQ4LTIxLjUtNDgtNDhjMC01LjYgMS0xMSAyLjctMTZsLTE5Ny41IDBjMS44IDUgMi43IDEwLjQgMi43IDE2IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4cy00OC0yMS41LTQ4LTQ4YzAtNiAxLjEtMTEuNyAzLjEtMTctMzguMS02LjItNjcuMS0zOS4yLTY3LjEtNzlMNjQgODBjMC04LjgtNy4yLTE2LTE2LTE2TDMyIDY0QzE0LjMgNjQgMCA0OS43IDAgMzJ6TTE3NiAxNDRjMC0yNi41IDIxLjUtNDggNDgtNDhsMzIgMCAwLTI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2bDY0IDBjMzAuOSAwIDU2IDI1LjEgNTYgNTZsMCAyNCAzMiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTQ0YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yNDAgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC0xNDR6TTM4NCA5NmwwLTI0YzAtNC40LTMuNi04LTgtOGwtNjQgMGMtNC40IDAtOCAzLjYtOCA4bDAgMjQgODAgMHoiXQogICAgfTsKICAgIGZhTHVnZ2FnZUNhcnQgPSBmYUNhcnRGbGF0YmVkU3VpdGNhc2U7CiAgICBmYVJhZGlhdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyYWRpYXRpb24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjdiOSIsICJNNDQ2LjIgMzQuNWMtMTQuMi0xMC4xLTMzLjUtNC42LTQyLjIgMTAuNUwzMzEuNiAxNzAuM2MzMS4zIDE1LjggNTIuOCA0OC4zIDUyLjggODUuN2wxNDQgMGMxNy43IDAgMzIuMi0xNC40IDMwLjEtMzEuOS05LjEtNzguMS01MS40LTE0Ni4xLTExMi4zLTE4OS42ek0xNzIuNyA0NC45QzE2NCAyOS44IDE0NC43IDI0LjMgMTMwLjUgMzQuNSA2OS42IDc3LjkgMjcuMyAxNDUuOSAxOC4yIDIyNC4xIDE2LjEgMjQxLjYgMzAuNyAyNTYgNDguMyAyNTZsMTQ0IDBjMC0zNy41IDIxLjUtNjkuOSA1Mi44LTg1LjdMMTcyLjcgNDQuOXptLTkuNCA0MTYuOGMtOC43IDE1LjEtMy44IDM0LjUgMTIgNDEuOCAzNC40IDE1LjcgNzIuNyAyNC41IDExMyAyNC41czc4LjYtOC44IDExMy0yNC41YzE1LjgtNy4yIDIwLjctMjYuNyAxMi00MS44TDM0MSAzMzYuM2MtMTUuMSA5LjktMzMuMiAxNS43LTUyLjYgMTUuN3MtMzcuNS01LjgtNTIuNi0xNS43TDE2My4zIDQ2MS43ek0yODguMyAzMDRhNDggNDggMCAxIDAgLS43LTk2IDQ4IDQ4IDAgMSAwIC43IDk2eiJdCiAgICB9OwogICAgZmFGaWxlV29yZDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmlsZS13b3JkIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzIiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek0xMzUuNCAyNzQuOGMtMi45LTEyLjktMTUuNy0yMS4xLTI4LjYtMTguMnMtMjEuMSAxNS43LTE4LjIgMjguNmwzMiAxNDRjMi4zIDEwLjUgMTEuNCAxOC4yIDIyLjIgMTguOHMyMC42LTYuMSAyNC0xNi40bDI1LjItNzUuNyAyNS4yIDc1LjdjMy40IDEwLjIgMTMuMiAxNi45IDI0IDE2LjRzMTkuOS04LjIgMjIuMi0xOC44bDMyLTE0NGMyLjktMTIuOS01LjMtMjUuOC0xOC4yLTI4LjZzLTI1LjggNS4zLTI4LjYgMTguMmwtMTMuMiA1OS40LTIwLjYtNjEuOGMtMy4zLTkuOC0xMi40LTE2LjQtMjIuOC0xNi40cy0xOS41IDYuNi0yMi44IDE2LjRsLTIwLjYgNjEuOC0xMy4yLTU5LjR6Il0KICAgIH07CiAgICBmYUJlZFB1bHNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJlZC1wdWxzZSIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcm9jZWR1cmVzIl0sICJmNDg3IiwgIk01MzEuMi0yMi40TDU3MiAzMiA2MTYgMzJjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTU2IDBjLTcuNiAwLTE0LjctMy42LTE5LjItOS42bC0yNC4xLTMyLjEtNDcgOTkuOWMtMy43IDcuOC0xMS4zIDEzLjEtMTkuOSAxMy43cy0xNi45LTMuNC0yMS43LTEwLjZMMzg3LjIgODAgMzQ0IDgwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDU2IDBjOCAwIDE1LjUgNCAyMCAxMC43bDI0LjQgMzYuNiA0NS45LTk3LjVjMy42LTcuNiAxMC45LTEyLjggMTkuMy0xMy43czE2LjYgMi43IDIxLjYgOS41ek0zMjAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDkuNSAwIDI2LjYgMzkuOWMxNC40IDIxLjYgMzkuMyAzMy44IDY1LjIgMzEuOXM0OC44LTE3LjYgNTkuOC00MS4xTDUyNyAxMjkuMmM0NS45IDcuMiA4MSA0Ni45IDgxIDk0LjhsMCAyMjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NC00NDggMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyTDMyIDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyUzk2IDQ2LjMgOTYgNjRsMCAyMjQgMjI0IDAgMC0xMjh6TTE0NCAxOTJhNjQgNjQgMCAxIDEgMTI4IDAgNjQgNjQgMCAxIDEgLTEyOCAweiJdCiAgICB9OwogICAgZmFQcm9jZWR1cmVzID0gZmFCZWRQdWxzZTsKICAgIGZhVGVudHMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGVudHMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU4MiIsICJNNTM5LjkgMzUybC05NS42IDAtOC40LTY2LjFjLTIuOS0yMy4yLTE1LjktNDMuOS0zNS40LTU2LjhMMjUyLjIgMTMxLjVjLTE4LTExLjktMzkuNy0xNS43LTYwLjEtMTEuNSAyLjUtNC4zIDUuOS03LjkgMTAuMS0xMC43TDM1MC42IDExLjZjMTAuNy03IDI0LjUtNyAzNS4yIDBsMTQ4LjQgOTcuN2M3LjggNS4xIDEzIDEzLjQgMTQuMiAyMi43bDIzLjMgMTg0YzIuNCAxOS4xLTEyLjUgMzYtMzEuNyAzNnpNNC44IDQ3NmwyMy4zLTE4NGMxLjItOS4zIDYuMy0xNy42IDE0LjItMjIuN2wxNDguNC05Ny43YzEwLjctNyAyNC41LTcgMzUuMiAwbDE0OC40IDk3LjdjNy44IDUuMSAxMyAxMy40IDE0LjIgMjIuN2wyMy4zIDE4NGMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTQ5LjcgMGMtMTEuMiAwLTIxLjUtNS44LTI3LjMtMTUuNGwtNzctMTI2LjdjLTEuNy0yLjgtNC44LTQuNi04LjEtNC42LTUuMyAwLTkuNSA0LjMtOS41IDkuNWwwIDEwNS4yYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDM2LjUgNTEyYy0xOS4zIDAtMzQuMi0xNi45LTMxLjctMzZ6Il0KICAgIH07CiAgICBmYU11Z0hvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtdWctaG90IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbOTc0OV0sICJmN2I2IiwgIk0xNTItMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzE4My41IDMxLjcgMTc2IDI0LjEgMTc2IDggMTc2LTUuMyAxNjUuMy0xNiAxNTItMTZ6TTk2IDE5MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxOTJjMCA1MyA0MyA5NiA5NiA5NmwxOTIgMGM0MS44IDAgNzcuNC0yNi43IDkwLjUtNjRsNS41IDBjNzAuNyAwIDEyOC01Ny4zIDEyOC0xMjhTNTE4LjcgMTkyIDQ0OCAxOTJMOTYgMTkyek00NDggMzg0bDAtMTI4YzM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0ek0yODggOGMwLTEzLjMtMTAuNy0yNC0yNC0yNFMyNDAtNS4zIDI0MCA4YzAgMzguOSAyMy40IDU5LjQgMzkuMSA3My4xbDEuMSAxYzE2LjMgMTQuMyAyMy44IDIxLjggMjMuOCAzNy45IDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0zOC45LTIzLjQtNTkuNC0zOS4xLTczLjFsLTEuMS0xQzI5NS41IDMxLjcgMjg4IDI0LjEgMjg4IDh6Il0KICAgIH07CiAgICBmYUJvbHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9sdCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzk4ODksICJ6YXAiXSwgImYwZTciLCAiTTMzOC44LTkuOWMxMS45IDguNiAxNi4zIDI0LjIgMTAuOSAzNy44TDI3MS4zIDIyNCA0MTYgMjI0YzEzLjUgMCAyNS41IDguNCAzMC4xIDIxLjFzLjcgMjYuOS05LjYgMzUuNWwtMjg4IDI0MGMtMTEuMyA5LjQtMjcuNCA5LjktMzkuMyAxLjNzLTE2LjMtMjQuMi0xMC45LTM3LjhMMTc2LjcgMjg4IDMyIDI4OGMtMTMuNSAwLTI1LjUtOC40LTMwLjEtMjEuMXMtLjctMjYuOSA5LjYtMzUuNWwyODgtMjQwYzExLjMtOS40IDI3LjQtOS45IDM5LjMtMS4zeiJdCiAgICB9OwogICAgZmFaYXAgPSBmYUJvbHQ7CiAgICBmYUphciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJqYXIiLAogICAgICBpY29uOiBbMzIwLCA1MTIsIFtdLCAiZTUxNiIsICJNMzItOGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwyMDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNEw1NiAxNkM0Mi43IDE2IDMyIDUuMyAzMi04ek0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwxOTIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em05NiA2NGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTkyeiJdCiAgICB9OwogICAgZmFUcnVja1BsYW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRydWNrLXBsYW5lIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1OGYiLCAiTTE0NCA0OGMwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4bDAgMzIwYzAgMzIuNSAxMi4xIDYyLjEgMzIgODQuN2wwIDI3LjNjMCA3LjEgLjkgMTQuMSAyLjcgMjAuN0wxOTIgNDgwIDgzLjkgNTA3QzczLjggNTA5LjYgNjQgNTAxLjkgNjQgNDkxLjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDc0LTU5LjIgMC01Ny42LTEyMi4xIDQ4LjhDMTEuNCAzOTUuNCAwIDM4Ny43IDAgMzc2LjRsMC00NGMwLTggMy0xNS42IDguMy0yMS41TDE0NCAxNjEuNiAxNDQgNDh6bTIyNCA4MGwxOTIgMGM0NC4yIDAgODAgMzUuOCA4MCA4MGwwIDE2MGMwIDI2LjItMTIuNiA0OS40LTMyIDY0bDAgNDhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0zMi0xNjAgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDhjLTE5LjQtMTQuNi0zMi0zNy44LTMyLTY0bDAtMTYwYzAtNDQuMiAzNS44LTgwIDgwLTgwem0wIDE3NmwxOTIgMCAwLTMyYzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMjggMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAzMnptMCA4OGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTIxNi0yNGEyNCAyNCAwIDEgMCAtNDggMCAyNCAyNCAwIDEgMCA0OCAweiJdCiAgICB9OwogICAgZmFIYW5kSG9sZGluZ0hlYXJ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtaG9sZGluZy1oZWFydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGJlIiwgIk0yNzkuNiAzMUMyNjUuNSAxMS41IDI0Mi45IDAgMjE4LjkgMCAxNzcuNSAwIDE0NCAzMy41IDE0NCA3NC45bDAgMi40YzAgNjQuNCA4MiAxMzMuNCAxMjIuMiAxNjMuMyAxMyA5LjcgMzAuNSA5LjcgNDMuNSAwIDQwLjItMzAgMTIyLjItOTguOSAxMjIuMi0xNjMuM2wwLTIuNGMwLTQxLjQtMzMuNS03NC45LTc0LjktNzQuOS0yNCAwLTQ2LjYgMTEuNS02MC43IDMxTDI4OCA0Mi43IDI3OS42IDMxek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhQXJyb3dSb3RhdGVMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXJvdGF0ZS1sZWZ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODYzNCwgImFycm93LWxlZnQtcm90YXRlIiwgImFycm93LXJvdGF0ZS1iYWNrIiwgImFycm93LXJvdGF0ZS1iYWNrd2FyZCIsICJ1bmRvIl0sICJmMGUyIiwgIk0yNTYgNjRjLTU2LjggMC0xMDcuOSAyNC43LTE0My4xIDY0bDQ3LjEgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAxOTJjLTE3LjcgMC0zMi0xNC4zLTMyLTMyTDAgMzJDMCAxNC4zIDE0LjMgMCAzMiAwUzY0IDE0LjMgNjQgMzJsMCA1NC43QzExMC45IDMzLjYgMTc5LjUgMCAyNTYgMCAzOTcuNCAwIDUxMiAxMTQuNiA1MTIgMjU2UzM5Ny40IDUxMiAyNTYgNTEyYy04NyAwLTE2My45LTQzLjQtMjEwLjEtMTA5LjctMTAuMS0xNC41LTYuNi0zNC40IDcuOS00NC42czM0LjQtNi42IDQ0LjYgNy45YzM0LjggNDkuOCA5Mi40IDgyLjMgMTU3LjYgODIuMyAxMDYgMCAxOTItODYgMTkyLTE5MlMzNjIgNjQgMjU2IDY0eiJdCiAgICB9OwogICAgZmFBcnJvd0xlZnRSb3RhdGUgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhQXJyb3dSb3RhdGVCYWNrID0gZmFBcnJvd1JvdGF0ZUxlZnQ7CiAgICBmYUFycm93Um90YXRlQmFja3dhcmQgPSBmYUFycm93Um90YXRlTGVmdDsKICAgIGZhVW5kbyA9IGZhQXJyb3dSb3RhdGVMZWZ0OwogICAgZmFGYWNlQW5ncnkyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2UtYW5ncnkiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NDQsICJhbmdyeSJdLCAiZjU1NiIsICJNMCAyNTZhMjU2IDI1NiAwIDEgMSA1MTIgMCAyNTYgMjU2IDAgMSAxIC01MTIgMHpNMjU2IDM2OGMyNC4xIDAgNDUuNCAxMS44IDU4LjUgMzAgNy43IDEwLjggMjIuNyAxMy4yIDMzLjUgNS41czEzLjItMjIuNyA1LjUtMzMuNWMtMjEuNy0zMC4yLTU3LjMtNTAtOTcuNS01MHMtNzUuNyAxOS44LTk3LjUgNTBjLTcuNyAxMC44LTUuMyAyNS44IDUuNSAzMy41czI1LjggNS4zIDMzLjUtNS41YzEzLjEtMTguMiAzNC40LTMwIDU4LjUtMzB6bS04MC05NmMxNy43IDAgMzItMTQuMyAzMi0zMmwwLS4zIDkuNyAzLjJjMTAuNSAzLjUgMjEuOC0yLjIgMjUuMy0xMi42cy0yLjItMjEuOC0xMi42LTI1LjNsLTk2LTMyYy0xMC41LTMuNS0yMS44IDIuMi0yNS4zIDEyLjZzMi4yIDIxLjggMTIuNiAyNS4zbDI4LjkgOS42Yy00LjEgNS40LTYuNiAxMi4xLTYuNiAxOS40IDAgMTcuNyAxNC4zIDMyIDMyIDMyem0xOTItMzJjMC03LjMtMi40LTE0LTYuNi0xOS40bDI4LjktOS42YzEwLjUtMy41IDE2LjEtMTQuOCAxMi42LTI1LjNzLTE0LjgtMTYuMS0yNS4zLTEyLjZsLTk2IDMyYy0xMC41IDMuNS0xNi4xIDE0LjgtMTIuNiAyNS4zczE0LjggMTYuMSAyNS4zIDEyLjZsOS43LTMuMiAwIC4zYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJ6Il0KICAgIH07CiAgICBmYUFuZ3J5MiA9IGZhRmFjZUFuZ3J5MjsKICAgIGZhQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVyc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRkYyIsICJNMzcuNiA0LjJDMjgtMi4zIDE1LjItMS4xIDcgN1MtMi4zIDI4IDQuMiAzNy42bDExMiAxNjMuMy05OS42IDMyLjNDNi43IDIzNi40IDAgMjQ1LjYgMCAyNTZzNi43IDE5LjYgMTYuNiAyMi44bDEwMy4xIDMzLjQtNTIuOSAxMDAuNmMtNC45IDkuMy0zLjIgMjAuNyA0LjMgMjguMXMxOC44IDkuMiAyOC4xIDQuM2wxMDAuNi01Mi45IDMzLjQgMTAzLjFjMy4yIDkuOSAxMi40IDE2LjYgMjIuOCAxNi42czE5LjYtNi43IDIyLjgtMTYuNmwzMy40LTEwMy4xIDEwMC42IDUyLjljOS4zIDQuOSAyMC43IDMuMiAyOC4xLTQuM3M5LjItMTguOCA0LjMtMjguMWwtNTIuOS0xMDAuNiAxMDMuMS0zMy40YzkuOS0zLjIgMTYuNi0xMi40IDE2LjYtMjIuOHMtNi43LTE5LjYtMTYuNi0yMi44bC0xMDYuNS0zNC41IDI1LjctNzAuNGMzLjItOC44IDEtMTguNi01LjYtMjUuMnMtMTYuNC04LjgtMjUuMi01LjZsLTcwLjQgMjUuNy0zNC41LTEwNi41QzI3NS42IDYuNyAyNjYuNCAwIDI1NiAwcy0xOS42IDYuNy0yMi44IDE2LjZMMjAwLjkgMTE2LjIgMzcuNiA0LjJ6Il0KICAgIH07CiAgICBmYVogPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAieiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyMl0sICI1YSIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzMjAgMGMxMi40IDAgMjMuNyA3LjIgMjkgMTguNHMzLjYgMjQuNS00LjQgMzQuMUwxMDAuMyA0MTYgMzUyIDQxNmMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA0ODBjLTEyLjQgMC0yMy43LTcuMi0yOS0xOC40cy0zLjYtMjQuNSA0LjQtMzQuMUwyODMuNyA5NiAzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0eiJdCiAgICB9OwogICAgZmFCYW5kYWdlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhbmRhZ2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsxMjk2NTcsICJiYW5kLWFpZCJdLCAiZjQ2MiIsICJNNDY0IDQxNmw0OCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0bC00OCAwIDAgMzIwek00MTYgOTZsLTI1NiAwIDAgMzIwIDI1NiAwIDAtMzIwek02NCA5NkMyOC43IDk2IDAgMTI0LjcgMCAxNjBMMCAzNTJjMCAzNS4zIDI4LjcgNjQgNjQgNjRsNDggMCAwLTMyMC00OCAwek0yMTYgMjA4YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTEyMC0yNGEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6TTIxNiAzMDRhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTIwLTI0YTI0IDI0IDAgMSAxIDAgNDggMjQgMjQgMCAxIDEgMC00OHoiXQogICAgfTsKICAgIGZhQmFuZEFpZCA9IGZhQmFuZGFnZTsKICAgIGZhUGxhbmVDaXJjbGVFeGNsYW1hdGlvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwbGFuZS1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1NiIsICJNMjMyIDI0YzAtMzAuOSAyNS4xLTU2IDU2LTU2czU2IDI1LjEgNTYgNTZsMCAxMjcuMyA3OCA3MS41Yy02OS4zIDI5LTExOCA5Ny40LTExOCAxNzcuMiAwIDQ5LjMgMTguNiA5NC4zIDQ5LjEgMTI4LjNMMjg4IDUxMiAxNzkuOSA1MzljLTEwLjEgMi41LTE5LjktNS4xLTE5LjktMTUuNWwwLTE5LjhjMC00LjkgMi4yLTkuNSA2LTEyLjVsNjYtNTIuOCAwLTk5LjctMTYyLjkgNTQuM0M1OC43IDM5Ni40IDQ4IDM4OC43IDQ4IDM3Ny44bDAtNDMuN2MwLTkgMy44LTE3LjUgMTAuNC0yMy42TDIzMiAxNTEuMyAyMzIgMjR6TTQ5NiAyNTZhMTQ0IDE0NCAwIDEgMSAwIDI4OCAxNDQgMTQ0IDAgMSAxIDAtMjg4em0wIDIyOGEyMCAyMCAwIDEgMCAwLTQwIDIwIDIwIDAgMSAwIDAgNDB6bTAtMTgwYy04LjggMC0xNiA3LjItMTYgMTZsMCA4MGMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtODBjMC04LjgtNy4yLTE2LTE2LTE2eiJdCiAgICB9OwogICAgZmFCdXNTaWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJ1cy1zaWRlIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU4MWQiLCAiTTQ4MCAwYzg4LjQgMCAxNjAgNzEuNiAxNjAgMTYwbDAgMjI0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC01LjYgMGMtMTMuMiAzNy4zLTQ4LjYgNjQtOTAuNCA2NHMtNzcuMy0yNi43LTkwLjQtNjRsLTEzOS4xIDBjLTEzLjIgMzcuMy00OC43IDY0LTkwLjQgNjRzLTc3LjItMjYuNy05MC40LTY0TDY0IDQ0OGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDQzIDQzIDAgOTYgMEw0ODAgMHpNMTYwIDM2OGE0OCA0OCAwIDEgMCAwIDk2IDQ4IDQ4IDAgMSAwIDAtOTZ6bTMyMCAwYTQ4IDQ4IDAgMSAwIDAgOTYgNDggNDggMCAxIDAgMC05NnptMC0zMDRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgMTkyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDY0IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMjhjMC01My00My05Ni05Ni05NnpNMjQ4IDIyNGwxMDQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMybC0xMDQgMCAwIDE2MHpNOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2bDAgOTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTA0IDAgMC0xNjAtMTA0IDB6Il0KICAgIH07CiAgICBmYUJ1Z3MgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVncyIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGQwIiwgIk00NDcuNSAxNzQuNmM4LjgtOC40IDIyLjctOC45IDMyLjItLjhzMTEgMjEuOSA0LjEgMzEuOWwtMS41IDEuOS0yMyAyNi43YzI2LjcgMTMuNSA0Ni4zIDM5LjEgNTEuNCA2OS42bDI1LjMgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjQgMCAwIDMyIDI0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTI1LjMgMGMtNy42IDQ1LjQtNDcuMSA4MC05NC43IDgwcy04Ny0zNC42LTk0LjctODBMMjk2IDQzMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtMzItMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNS4zIDBjNS4xLTMwLjUgMjQuNy01Ni4xIDUxLjQtNjkuNmwtMjIuOS0yNi43Yy04LjYtMTAuMS03LjUtMjUuMiAyLjYtMzMuOHMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6bS0yNTYtMTkyYzguOC04LjQgMjIuNy04LjkgMzIuMi0uOHMxMSAyMS45IDQuMSAzMS45bC0xLjUgMS45LTIzIDI2LjdDMjMwIDU1LjkgMjQ5LjUgODEuNSAyNTQuNyAxMTJsMjUuMyAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0yNCAwIDAgMzIgMjQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMjUuMyAwYy03LjYgNDUuNC00Ny4xIDgwLTk0LjcgODBzLTg3LTM0LjYtOTQuNy04MEw0MCAyNDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjQgMCAwLTMyLTI0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMjUuMyAwQzcwLjUgODEuNSA5MCA1NS45IDExNi43IDQyLjRMOTMuOCAxNS42Qzg1LjIgNS42IDg2LjMtOS42IDk2LjQtMTguMnMyNS4yLTcuNSAzMy44IDIuNmwyOS44IDM0LjggMjkuOC0zNC44IDEuNy0xLjh6Il0KICAgIH07CiAgICBmYUJlZXJNdWdFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiZWVyLW11Zy1lbXB0eSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJiZWVyIl0sICJmMGZjIiwgIk02NCA4MGMwLTI2LjUgMjEuNS00OCA0OC00OGwyODggMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2IDY0IDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMDguMmMwIDI0LjItMTMuNyA0Ni40LTM1LjQgNTcuMkw0NDggMzcxLjggNDQ4IDM4NGMwIDUzLTQzIDk2LTk2IDk2bC0xOTIgMGMtNTMgMC05Ni00My05Ni05Nkw2NCA4MHpNNDQ4IDMwMC4ybDY0LTMyIDAtMTA4LjItNjQgMCAwIDE0MC4yek0xOTIgMTUyYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjA4YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0yMDh6bTg4IDBjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAyMDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTIwOHptODggMGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDIwOGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMjA4eiJdCiAgICB9OwogICAgZmFCZWVyID0gZmFCZWVyTXVnRW1wdHk7CiAgICBmYVBlcnNvbkNpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUtY2hlY2siLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUzZSIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek02NDAgNDAwYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6bS04Ni42LTYwLjljNy4xIDUuMiA4LjcgMTUuMiAzLjUgMjIuM2wtNjQgODhjLTIuOCAzLjgtNyA2LjItMTEuNyA2LjVzLTkuMy0xLjMtMTIuNi00LjZsLTQwLTQwYy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMjYuOCAyNi44IDUzLTcyLjljNS4yLTcuMSAxNS4yLTguNyAyMi40LTMuNXoiXQogICAgfTsKICAgIGZhU3RhcGxlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFwbGVyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1YWYiLCAiTTY0MCAyOTkuM0w2NDAgNDMyYzAgMjYuNS0yMS41IDQ4LTQ4IDQ4TDY0IDQ4MGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzODQgMCAwLTQ4LTM1MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTExNi42LTMwLjItNS40Yy0xOS42LTMuNS0zMy44LTIwLjUtMzMuOC00MC40IDAtOC45IDIuOS0xNy41IDguMi0yNC42bDM1LjYtNDcuNWMzMi44LTQzLjggODQuNC02OS42IDEzOS4xLTY5LjYgMjcgMCA1My42IDYuMyA3Ny44IDE4LjRMNTg2LjkgMjEzLjVDNjE5LjUgMjI5LjcgNjQwIDI2MyA2NDAgMjk5LjN6TTQ0OCAzMDRsMC0xNi0zMjAtNTcuMSAwIDczLjEgMzIwIDB6Il0KICAgIH07CiAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLW1lZGljYWwtY2lyY2xlLWNoZWNrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTEiLCAiTTMwOS44IDguNmMtMTIuMy0xMS40LTMxLjMtMTEuNC00My41IDBsLTIyNCAyMDhjLTkuNiA5LTEyLjggMjIuOS04IDM1LjFTNTAuOCAyNzIgNjQgMjcybDE2IDAgMCAxNzZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTk2IDBjLTIxLjItMjkuNS0zNC4zLTY1LjMtMzUuOS0xMDRMMjcyIDQwOGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCAyMCAwYzM0LjktNDguNSA5MS43LTgwIDE1Ni04MCAxMC43IDAgMjEuMSAuOSAzMS4zIDIuNUwzMDkuOCA4LjZ6TTY0MCA0MDBhMTQ0IDE0NCAwIDEgMCAtMjg4IDAgMTQ0IDE0NCAwIDEgMCAyODggMHptLTg2LjYtNjAuOWM3LjEgNS4yIDguNyAxNS4yIDMuNSAyMi4zbC02NCA4OGMtMi44IDMuOC03IDYuMi0xMS43IDYuNXMtOS4zLTEuMy0xMi42LTQuNmwtNDAtNDBjLTYuMi02LjItNi4yLTE2LjQgMC0yMi42czE2LjQtNi4yIDIyLjYgMGwyNi44IDI2LjggNTMtNzIuOWM1LjItNy4xIDE1LjItOC43IDIyLjQtMy41eiJdCiAgICB9OwogICAgZmFOYWlyYVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibmFpcmEtc2lnbiIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJlMWY2IiwgIk0xMjIuNiA0Ni4zYy03LjgtMTEuNy0yMi40LTE3LTM1LjktMTIuOVM2NCA0OS45IDY0IDY0bDAgMTkyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDE0NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTQ0IDg5LjUgMCAxMDcuOCAxNjEuOGM3LjggMTEuNyAyMi40IDE3IDM1LjkgMTIuOVMzODQgNDYyLjEgMzg0IDQ0OGwwLTE0NCAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMTkyYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTkyLTU3LjUgMC0xMzkuOC0yMDkuN3pNMjk0LjUgMzA0bDI1LjUgMCAwIDM4LjMtMjUuNS0zOC4zek0xODUuNSAyNTZsLTU3LjUgMCAwLTg2LjMgNTcuNSA4Ni4zeiJdCiAgICB9OwogICAgZmFXaWZpID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpZmkiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsid2lmaS0zIiwgIndpZmktc3Ryb25nIl0sICJmMWViIiwgIk0yODggOTZjLTkwLjkgMC0xNzMuMiAzNi0yMzMuNyA5NC42LTEyLjcgMTIuMy0zMyAxMi00NS4yLS43cy0xMi0zMyAuNy00NS4yQzgxLjcgNzQuOSAxNzkuOSAzMiAyODggMzJTNDk0LjMgNzQuOSA1NjYuMyAxNDQuN2MxMi43IDEyLjMgMTMgMzIuNiAuNyA0NS4ycy0zMi42IDEzLTQ1LjIgLjdDNDYxLjIgMTMyIDM3OC45IDk2IDI4OCA5NnpNMjQwIDQzMmE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAwek0xNjggMzI2LjJjLTExLjcgMTMuMy0zMS45IDE0LjUtNDUuMiAyLjhzLTE0LjUtMzEuOS0yLjgtNDUuMkMxNjEgMjM3LjQgMjIxLjEgMjA4IDI4OCAyMDhzMTI3IDI5LjQgMTY4IDc1LjhjMTEuNyAxMy4zIDEwLjQgMzMuNS0yLjggNDUuMnMtMzMuNSAxMC40LTQ1LjItMi44QzM3OC42IDI5Mi45IDMzNS44IDI3MiAyODggMjcycy05MC42IDIwLjktMTIwIDU0LjJ6Il0KICAgIH07CiAgICBmYVdpZmkzID0gZmFXaWZpOwogICAgZmFXaWZpU3Ryb25nID0gZmFXaWZpOwogICAgZmFNb25leUNoZWNrRG9sbGFyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vbmV5LWNoZWNrLWRvbGxhciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtb25leS1jaGVjay1hbHQiXSwgImY1M2QiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek0yOTYgMjg4bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptLTI0LTg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEyOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xMjggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTE0OCAxNDRjMTEgMCAyMCA5IDIwIDIwbDAgNCA4IDBjMTEgMCAyMCA5IDIwIDIwcy05IDIwLTIwIDIwbC00Ny41IDBjLTYuOSAwLTEyLjUgNS42LTEyLjUgMTIuNSAwIDYuMSA0LjQgMTEuMyAxMC40IDEyLjNsNDEuNyA3YzI1LjMgNC4yIDQzLjkgMjYuMSA0My45IDUxLjggMCAyNi4xLTE5IDQ3LjctNDQgNTEuOGwwIDQuN2MwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC00LTI0IDBjLTExIDAtMjAtOS0yMC0yMHM5LTIwIDIwLTIwbDU1LjUgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC02LjEtNC40LTExLjMtMTAuNC0xMi4zbC00MS43LTdDOTQuNSAyNjggNzYgMjQ2LjEgNzYgMjIwLjUgNzYgMTkxLjcgOTkuMiAxNjguMyAxMjggMTY4bDAtNGMwLTExIDktMjAgMjAtMjB6Il0KICAgIH07CiAgICBmYU1vbmV5Q2hlY2tBbHQgPSBmYU1vbmV5Q2hlY2tEb2xsYXI7CiAgICBmYUV5ZUxvd1Zpc2lvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJleWUtbG93LXZpc2lvbiIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJsb3ctdmlzaW9uIl0sICJmMmE4IiwgIk00MS0yNC45Yy05LjQtOS40LTI0LjYtOS40LTMzLjkgMFMtMi4zLS4zIDcgOS4xbDUyOCA1MjhjOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45bC05Ni40LTk2LjRjMi43LTIuNCA1LjQtNC44IDgtNy4yIDQ2LjgtNDMuNSA3OC4xLTk1LjQgOTMtMTMxLjEgMy4zLTcuOSAzLjMtMTYuNyAwLTI0LjYtMTQuOS0zNS43LTQ2LjItODcuNy05My0xMzEuMS00Ny4xLTQzLjctMTExLjgtODAuNi0xOTIuNi04MC42LTU2LjggMC0xMDUuNiAxOC4yLTE0NiA0NC4yTDQxLTI0Ljl6TTIwNC41IDEzOC43YzIzLjUtMTYuOCA1Mi40LTI2LjcgODMuNS0yNi43IDc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0IDAgMzEuMS05LjkgNTkuOS0yNi43IDgzLjVsLTM0LjctMzQuN2MxMi43LTIxLjQgMTctNDcuNyAxMC4xLTczLjctMTMuNy01MS4yLTY2LjQtODEuNi0xMTcuNi02Ny45LTguNiAyLjMtMTYuNyA1LjctMjQgMTBsLTM0LjctMzQuN3pNODggMTU3LjljLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlMMzI4LjIgNDY2YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOUw4OCAxNTcuOXpNNDUuNyAyNTEuM2MtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOUwxODEuOSA0NTUuNWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlMNDUuNyAyNTEuM3oiXQogICAgfTsKICAgIGZhTG93VmlzaW9uID0gZmFFeWVMb3dWaXNpb247CiAgICBmYUNpcmNsZUFycm93VXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWFycm93LXVwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFycm93LWNpcmNsZS11cCJdLCAiZjBhYSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6bTE3LTM3N2w4MCA4MGM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC0zOS0zOSAwIDE1MC4xYzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTUwLjEtMzkgMzljLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsODAtODBjOS40LTkuNCAyNC42LTkuNCAzMy45IDB6Il0KICAgIH07CiAgICBmYUFycm93Q2lyY2xlVXAgPSBmYUNpcmNsZUFycm93VXA7CiAgICBmYUNhbWVyYVJldHJvID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNhbWVyYS1yZXRybyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI0N10sICJmMDgzIiwgIk0wIDQxNmwwLTIwOCAxMzYuMiAwYzEzLjUtMjAuMiAzMi0zNi44IDUzLjctNDhMMCAxNjAgMCAxMjUuN2MwLTM1LjMgMjguNy02NCA2NC02NGwuMSAwQzY1LjMgNDUuMSA3OS4xIDMyIDk2IDMybDMyIDBjMTYuOSAwIDMwLjcgMTMuMSAzMS45IDI5LjdsMzIuMSAwIDUxLjItMjMuOGM4LjQtMy45IDE3LjYtNiAyNi45LTZMNDQ4IDMyYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjQtMTkwIDBjMjEuNyAxMS4yIDQwLjIgMjcuOCA1My43IDQ4bDEzNi4yIDAgMCAyMDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NHpNMjU2IDE5MmE5Ni4xIDk2LjEgMCAxIDAgMCAxOTIuMSA5Ni4xIDk2LjEgMCAxIDAgMC0xOTIuMXoiXQogICAgfTsKICAgIGZhQ2Fwc3VsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2Fwc3VsZXMiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZjQ2YiIsICJNOTYgMTEyYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4czQ4IDIxLjUgNDggNDhsMCAxMTItOTYgMCAwLTExMnptLTY0IDBsMCAyODhjMCA2MS45IDUwLjEgMTEyIDExMiAxMTJzMTEyLTUwLjEgMTEyLTExMmwwLTEwNS44IDExNi4zIDE2OS41YzM1LjUgNTEuNyAxMDUuMyA2NC4zIDE1NiAyOC4xczYzLTEwNy41IDI3LjUtMTU5LjJMNDI3LjMgMTQ1LjNjLTM1LjUtNTEuNy0xMDUuMy02NC4zLTE1Ni0yOC4xLTUuNiA0LTEwLjcgOC40LTE1LjMgMTMuMWwwLTE4LjNDMjU2IDUwLjEgMjA1LjkgMCAxNDQgMFMzMiA1MC4xIDMyIDExMnpNMjk2LjYgMjQwLjJjLTE2LTIzLjMtMTAtNTUuMyAxMS45LTcxIDIxLjItMTUuMSA1MC41LTEwLjMgNjYgMTIuMmw2NyA5Ny42LTc5LjkgNTUuOS02NS05NC44eiJdCiAgICB9OwogICAgZmFQb28gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicG9vIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MTY5XSwgImYyZmUiLCAiTTI2OC45IC45Yy01LjUtLjctMTEgMS40LTE0LjUgNS43cy00LjYgMTAuMS0yLjggMTUuNGMyLjggOC4yIDQuMyAxNi45IDQuMyAyNi4xIDAgNDQuMS0zNS43IDc5LjktNzkuOCA4MEwxNjAgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NCAwIDE5LjEgOC40IDM2LjMgMjEuNyA0OEwxMDQgMjQwYy0zOS44IDAtNzIgMzIuMi03MiA3MiAwIDIzLjIgMTEgNDMuOCAyOCA1Ny0zNC4xIDUuNy02MCAzNS4zLTYwIDcxIDAgMzkuOCAzMi4yIDcyIDcyIDcybDM2OCAwYzM5LjggMCA3Mi0zMi4yIDcyLTcyIDAtMzUuNy0yNS45LTY1LjMtNjAtNzEgMTctMTMuMiAyOC0zMy44IDI4LTU3IDAtMzkuOC0zMi4yLTcyLTcyLTcybC0xMy43IDBjMTMuMy0xMS43IDIxLjctMjguOSAyMS43LTQ4IDAtMzUuMy0yOC43LTY0LTY0LTY0bC01LjUgMGMzLjUtMTAgNS41LTIwLjggNS41LTMyIDAtNDguNi0zNi4yLTg4LjgtODMuMS05NS4xek0xOTIgMjU2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHptOTYgMzJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptNjQgMTA4LjNjMCAyLjQtLjcgNC44LTIuMiA2LjctOC4yIDEwLjUtMzkuNSA0NS05My44IDQ1cy04NS42LTM0LjYtOTMuOC00NWMtMS41LTEuOS0yLjItNC4zLTIuMi02LjcgMC02LjggNS41LTEyLjMgMTIuMy0xMi4zbDE2Ny40IDBjNi44IDAgMTIuMyA1LjUgMTIuMyAxMi4zeiJdCiAgICB9OwogICAgZmFFbGV2YXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJlbGV2YXRvciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTZkIiwgIk0yOTIuNy00LjdsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFM0MzguNS0zMiA0MzItMzJMMzA0LTMyYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjR6bS0xNjAtMjIuNmwtNjQgNjRjLTQuNiA0LjYtNS45IDExLjUtMy41IDE3LjRTNzMuNSA2NCA4MCA2NGwxMjggMGM2LjUgMCAxMi4zLTMuOSAxNC44LTkuOXMxLjEtMTIuOS0zLjUtMTcuNGwtNjQtNjRjLTYuMi02LjItMTYuNC02LjItMjIuNiAwek02NCAxMjhjLTM1LjMgMC02NCAyOC43LTY0IDY0TDAgNDQ4YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDEyOHptOTYgOTZhNDggNDggMCAxIDEgMCA5NiA0OCA0OCAwIDEgMSAwLTk2ek04MCA0MDBjMC0yNi41IDIxLjUtNDggNDgtNDhsNjQgMGMyNi41IDAgNDggMjEuNSA0OCA0OGwwIDE2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTE2em0xOTIgMGMwLTI2LjUgMjEuNS00OCA0OC00OGw2NCAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgMTZjMCAxNy43LTE0LjMgMzItMzIgMzJsLTk2IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMTZ6bTMyLTEyOGE0OCA0OCAwIDEgMSA5NiAwIDQ4IDQ4IDAgMSAxIC05NiAweiJdCiAgICB9OwogICAgZmFUYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFnIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3OTkxXSwgImYwMmIiLCAiTTMyLjUgOTZsMCAxNDkuNWMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM2wxOTIgMTkyYzI1IDI1IDY1LjUgMjUgOTAuNSAwTDQ4My4yIDMzMy4zYzI1LTI1IDI1LTY1LjUgMC05MC41bC0xOTItMTkyQzI3OS4yIDM4LjcgMjYzIDMyIDI0NiAzMkw5Ni41IDMyYy0zNS4zIDAtNjQgMjguNy02NCA2NHptMTEyIDE2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY2lyY2xlLW1pbnVzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0ZWQiLCAiTTk2IDBDNjAuNyAwIDMyIDI4LjcgMzIgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTgwIDBjLTIyLjctMzEuNS0zNi03MC4yLTM2LTExMiAwLTEwMC42IDc3LjQtMTgzLjIgMTc2LTE5MS4zbDAtMzguMWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyOTAuNyAxOC43QzI3OC43IDYuNyAyNjIuNSAwIDI0NS41IDBMOTYgMHpNMzU3LjUgMTc2TDI2NCAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MCA1OC41IDM1Ny41IDE3NnpNNTc2IDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tNjQgMGMwIDguOC03LjIgMTYtMTYgMTZsLTEyOCAwYy04LjggMC0xNi03LjItMTYtMTZzNy4yLTE2IDE2LTE2bDEyOCAwYzguOCAwIDE2IDcuMiAxNiAxNnoiXQogICAgfTsKICAgIGZhRG93bkxvbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZG93bi1sb25nIiwKICAgICAgaWNvbjogWzMyMCwgNTEyLCBbImxvbmctYXJyb3ctYWx0LWRvd24iXSwgImYzMDkiLCAiTTEzNy40IDUzNC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDEyOC0xMjhjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzAwLjkgMzUyIDI4OCAzNTJsLTY0IDAgMC0zMzZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTMyIDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMzM2LTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhTLjIgMzk3LjUgOS40IDQwNi42bDEyOCAxMjh6Il0KICAgIH07CiAgICBmYUxvbmdBcnJvd0FsdERvd24gPSBmYURvd25Mb25nOwogICAgZmFDb21wYWN0RGlzYyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYWN0LWRpc2MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxOTEsIDEyODE5MiwgMTI4NDQwXSwgImY1MWYiLCAiTTAgMjU2YTI1NiAyNTYgMCAxIDEgNTEyIDAgMjU2IDI1NiAwIDEgMSAtNTEyIDB6bTI1NiAzMmEzMiAzMiAwIDEgMSAwLTY0IDMyIDMyIDAgMSAxIDAgNjR6bS05Ni0zMmE5NiA5NiAwIDEgMCAxOTIgMCA5NiA5NiAwIDEgMCAtMTkyIDB6bS01Ni0xNmMwLTMyLjQgMTYuMy02Ni42IDQyLjgtOTMuMlMyMDcuNiAxMDQgMjQwIDEwNGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGMtNDcuOSAwLTkzLjcgMjMuNS0xMjcuMSA1Ni45UzU2IDE5Mi4xIDU2IDI0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdWl0Y2FzZVJvbGxpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3VpdGNhc2Utcm9sbGluZyIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNWMxIiwgIk0xNDQgMjRjMC00LjQgMy42LTggOC04bDgwIDBjNC40IDAgOCAzLjYgOCA4bDAgNzItOTYgMCAwLTcyek0zMjAgOTZsLTMyIDAgMC03MmMwLTMwLjktMjUuMS01Ni01Ni01NmwtODAgMEMxMjEuMS0zMiA5Ni02LjkgOTYgMjRsMCA3Mi0zMiAwQzI4LjcgOTYgMCAxMjQuNyAwIDE2MEwwIDQ0OGMwIDM1LjMgMjguNyA2NCA2NCA2NCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDEyOCAwYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yODhjMC0zNS4zLTI4LjctNjQtNjQtNjR6TTEyMCAyMDhsMTQ0IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE0NCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0em0wIDEyOGwxNDQgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQ0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6Il0KICAgIH07CiAgICBmYUJvb2tRdXJhbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXF1cmFuIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInF1cmFuIl0sICJmNjg3IiwgIk02NCA1MTJsMjg4IDBjNTMgMCA5Ni00MyA5Ni05NmwwLTMyMGMwLTUzLTQzLTk2LTk2LTk2TDQ4IDBDMjEuNSAwIDAgMjEuNSAwIDQ4TDAgMzM2YzAgMjAuOSAxMy40IDM4LjcgMzIgNDUuM0wzMiA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMHpNMzUyIDM4NGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtMjU2IDAgMC02NCAyNTYgMHpNMjczLjEgMTQ0LjRjMi41LTYuMSAxMS4yLTYuMSAxMy43IDBsMTAuMyAyNC44IDI2LjggMi4xYzYuNiAuNSA5LjIgOC43IDQuMiAxM0wzMDcuOCAyMDEuOSAzMTQgMjI4YzEuNSA2LjQtNS41IDExLjUtMTEuMSA4LjFsLTIyLjktMTQtMjIuOSAxNGMtNS42IDMuNC0xMi42LTEuNi0xMS4xLTguMWw2LjItMjYuMS0yMC40LTE3LjVjLTUtNC4zLTIuMy0xMi41IDQuMi0xM2wyNi44LTIuMSAxMC4zLTI0Ljh6TTEwMCAxOTJjMC02OC41IDU1LjUtMTI0IDEyNC0xMjQgMjMuOCAwIDQ2LjEgNi43IDY1IDE4LjQgNC44IDIuOSA2LjkgOC44IDUgMTQuMXMtNy4xIDguNi0xMi43IDhjLTMuMS0uMy02LjItLjUtOS40LS41LTQ2LjQgMC04NCAzNy42LTg0IDg0czM3LjYgODQgODQgODRjMy4yIDAgNi4zLS4yIDkuNC0uNSA1LjYtLjYgMTAuOCAyLjcgMTIuNyA4cy0uMyAxMS4yLTUgMTQuMWMtMTguOSAxMS43LTQxLjIgMTguNC02NSAxOC40LTY4LjUgMC0xMjQtNTUuNS0xMjQtMTI0eiJdCiAgICB9OwogICAgZmFRdXJhbiA9IGZhQm9va1F1cmFuOwogICAgZmFQaG9uZVNsYXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBob25lLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYzZGQiLCAiTTUzNS0yNC45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw0MSA1MzcuMWMtOS40IDkuNC0yNC42IDkuNC0zMy45IDBzLTkuNC0yNC42IDAtMzMuOUwxNDEuNSAzNjguNkM4OS4yIDMxMC41IDUxLjYgMjM4LjggMzQuOCAxNTkuNCAxOC43IDgzLjEgNzMuOSAyMC42IDEzOC41IDIuOWw1LjUtMS41YzE5LjctNS40IDQwLjMgNC43IDQ4LjEgMjMuNWw0MC41IDk3LjNjNi45IDE2LjUgMi4xIDM1LjYtMTEuOCA0N2wtNDQuMSAzNi4xYzEyLjkgMjguNSAyOS42IDU0LjggNDkuNSA3OC41TDUzNS0yNC45em0tMTUwLjQgNTM0Yy02My0xMy40LTEyMS4zLTM5LjgtMTcxLjctNzYuM0wyOTcuOCAzNDhjMTIuMiA4LjIgMjUgMTUuNiAzOC4zIDIyLjJMMzc0LjcgMzIzYzExLjMtMTMuOSAzMC40LTE4LjYgNDctMTEuOEw1MTkgMzUxLjhjMTguOCA3LjggMjguOSAyOC40IDIzLjUgNDguMWwtMS41IDUuNWMtMTcuNiA2NC42LTgwLjIgMTE5LjgtMTU2LjQgMTAzLjd6Il0KICAgIH07CiAgICBmYVJvYWRDaXJjbGVDaGVjayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyb2FkLWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTY0IiwgIk0yODggMzJsLTc2LjMgMGMtMjkuNCAwLTU1LjEgMjAuMS02Mi4xIDQ4LjZMNjUuNCA0MjAuNUM1Ny45IDQ1MC43IDgwLjggNDgwIDExMiA0ODBsMjA5LjQgMGMtMTEuMi0yNC40LTE3LjQtNTEuNC0xNy40LTgwIDAtMjguNiA2LjItNTUuNyAxNy40LTgwLS41IDAtMSAwLTEuNSAwLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDQ5YzM1LjItMzkuOSA4Ni43LTY1IDE0NC02NSA5IDAgMTcuOCAuNiAyNi41IDEuOGwtMzItMTI5LjJDNDgzLjQgNTIuMSA0NTcuOCAzMiA0MjguMyAzMmwtNzYuNCAwIDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC02NHpNNjQwIDQwMGExNDQgMTQ0IDAgMSAwIC0yODggMCAxNDQgMTQ0IDAgMSAwIDI4OCAwem0tODYuNi02MC45YzcuMSA1LjIgOC43IDE1LjIgMy41IDIyLjNsLTY0IDg4Yy0yLjggMy44LTcgNi4yLTExLjcgNi41cy05LjMtMS4zLTEyLjYtNC42bC00MC00MGMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDI2LjggMjYuOCA1My03Mi45YzUuMi03LjEgMTUuMi04LjcgMjIuNC0zLjV6Il0KICAgIH07CiAgICBmYVNob3BMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNob3AtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNGE1IiwgIk0yMS41IDE4MS4xTDc4LjMgNjcuNEM4OS4yIDQ1LjcgMTExLjMgMzIgMTM1LjYgMzJsMzA0LjkgMGMyNC4yIDAgNDYuNCAxMy43IDU3LjIgMzUuNGw1NS42IDExMS4xYy04LjItMS42LTE2LjYtMi41LTI1LjItMi41LTUzLjcgMC05OS43IDMzLjEtMTE4LjcgODBsLTU3LjMgMCAwIDE3NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTkyIDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTc2LjFjLTI2LjgtMS45LTQ4LTI0LjMtNDgtNTEuNiAwLTggMS45LTE2IDUuNS0yMy4yek0xMjggMjU2bDAgMTEyYzAgOC44IDcuMiAxNiAxNiAxNmwxMjggMGM4LjggMCAxNi03LjIgMTYtMTZsMC0xMTItMTYwIDB6bTQzMiA0OC4xYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNDcuOSA2NCAwIDAtNDcuOXpNNDE2IDQwMGMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjNsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnoiXQogICAgfTsKICAgIGZhSW1hZ2VQb3J0cmFpdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbWFnZS1wb3J0cmFpdCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJwb3J0cmFpdCJdLCAiZjNlMCIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAzODRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0ek04MCAzNjhjMCA4LjggNy4yIDE2IDE2IDE2bDE5MiAwYzguOCAwIDE2LTcuMiAxNi0xNiAwLTQ0LjItMzUuOC04MC04MC04MGwtNjQgMGMtNDQuMiAwLTgwIDM1LjgtODAgODB6TTE5MiAyNDhhNTYgNTYgMCAxIDAgMC0xMTIgNTYgNTYgMCAxIDAgMCAxMTJ6Il0KICAgIH07CiAgICBmYVBvcnRyYWl0ID0gZmFJbWFnZVBvcnRyYWl0OwogICAgZmFCcmlkZ2VMb2NrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJyaWRnZS1sb2NrIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0Y2MiLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTggMCAwIDMyLjJjMTMuOCAuNiAyNy4yIDIuOCA0MCA2LjRsMCA1MC43Yy0xNC44LTYtMzEtOS4zLTQ4LTkuMy03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLS40IC4zLS43IC42LTEuMSAxLTE3LjMtMjUtNDYuMi00MS4zLTc4LjktNDEuMy01MyAwLTk2IDQzLTk2IDk2bDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtOTRjMC0zOC44LTI2LjQtNzIuNi02NC04MmwwLTExMiA0MCAwIDAtNjQtOCAwQzE0LjMgOTYgMCA4MS43IDAgNjR6bTQyNCA2OC42bDAtMzYuNi04MCAwIDAgNjQgMTguOCAwYzE4LjItMTIuOCAzOC45LTIyLjIgNjEuMi0yNy40ek0yMTYgOTZsMCA2NCA4MCAwIDAtNjQtODAgMHptLTQ4IDBsLTgwIDAgMCA2NCA4MCAwIDAtNjR6TTQ5NiAzMDQuMWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMCAwLTQ3Ljl6TTM1MiA0MDBjMC0yMC45IDEzLjQtMzguNyAzMi00NS4zbDAtNTAuNmMwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwbDAgNTAuNmMxOC42IDYuNiAzMiAyNC40IDMyIDQ1LjNsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMTI4IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZ6Il0KICAgIH07CiAgICBmYUhhbW1lciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW1tZXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgyOTZdLCAiZjZlMyIsICJNMjQ2LjkgMTguM0wyNzEgMy44YzIxLjYtMTMgNDYuMy0xOS44IDcxLjUtMTkuOCAzNi44IDAgNzIuMiAxNC42IDk4LjIgNDAuN2w2My45IDYzLjljMTUgMTUgMjMuNCAzNS40IDIzLjQgNTYuNmwwIDMwLjkgMTkuNyAxOS43IDAgMGMxNS42LTE1LjYgNDAuOS0xNS42IDU2LjYgMHMxNS42IDQwLjkgMCA1Ni42bC02NCA2NGMtMTUuNiAxNS42LTQwLjkgMTUuNi01Ni42IDBzLTE1LjYtNDAuOSAwLTU2LjZMNDY0IDI0MCA0MzMuMSAyNDBjLTIxLjIgMC00MS42LTguNC01Ni42LTIzLjRsLTQ5LjEtNDkuMWMtMTUtMTUtMjMuNC0zNS40LTIzLjQtNTYuNmwwLTEyLjdjMC0xMS4yLTUuOS0yMS43LTE1LjUtMjcuNGwtNDEuNi0yNWMtMTAuNC02LjItMTAuNC0yMS4yIDAtMjcuNHpNNTAuNyA0MDIuN2wyMjIuMS0yMjIuMSA5MC41IDkwLjUtMjIyLjEgMjIyLjFjLTI1IDI1LTY1LjUgMjUtOTAuNSAwcy0yNS02NS41IDAtOTAuNXoiXQogICAgfTsKICAgIGZhQXJyb3dVcDE5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXVwLTEtOSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LW51bWVyaWMtdXAiXSwgImYxNjMiLCAiTTE1MC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEw5NiAxNDEuMyA5NiA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMwNi43IDQxLjQgNDEuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC05Ni05NnpNNDE4LjcgMzhjLTguMy02LTE5LjEtNy43LTI4LjgtNC40bC00OCAxNmMtMTYuOCA1LjYtMjUuOCAyMy43LTIwLjIgNDAuNXMyMy43IDI1LjggNDAuNSAyMC4ybDUuOS0yIDAgNTEuNi0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDk2IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTE2IDAgMC05NmMwLTEwLjMtNC45LTE5LjktMTMuMy0yNnpNMzY1LjEgNDMwLjZjLTkuNiAxNC44LTUuNCAzNC42IDkuNCA0NC4zczM0LjYgNS40IDQ0LjMtOS40bDQyLjEtNjQuOWMxMi40LTE5LjIgMTkuMS00MS42IDE5LjEtNjQuNSAwLTQ0LjItMzUuOC04MC04MC04MHMtODAgMzUuOC04MCA4MGMwIDM2LjEgMjMuOSA2Ni43IDU2LjggNzYuNmwtMTEuNyAxOHpNMzc2IDMzNmEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFTb3J0TnVtZXJpY1VwID0gZmFBcnJvd1VwMTk7CiAgICBmYUNoZXNzS25pZ2h0MiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGVzcy1rbmlnaHQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs5ODIyXSwgImY0NDEiLCAiTTE5Mi0zMmMxMDYgMCAxOTIgODYgMTkyIDE5MmwwIDEzMy41YzAgMTctNi44IDMzLjItMTguNyA0NS4yTDMyMCAzODQgMzcwLjggNDM0LjdjOC41IDguNSAxMy4yIDIwIDEzLjIgMzIgMCAyNS0yMC4zIDQ1LjItNDUuMiA0NS4zTDQ1LjMgNTEyYy0yNSAwLTQ1LjItMjAuMy00NS4yLTQ1LjMgMC0xMiA0LjgtMjMuNSAxMy4yLTMyTDY0IDM4NCA2NCAzNDkuNGMwLTE4LjcgOC4yLTM2LjQgMjIuMy00OC42bDg5LjctNzYuOC00OCAwLTEyLjEgMTIuMWMtMTIuNyAxMi43LTMwIDE5LjktNDggMTkuOS0zNy41IDAtNjcuOS0zMC40LTY3LjktNjcuOWwwLTguN2MwLTIyLjggOC4yLTQ0LjkgMjMuMS02Mi4zTDk2IDMyIDk2IDBjMC0xNy43IDE0LjMtMzIgMzItMzJsNjQgMHpNMTYwIDcyYTI0IDI0IDAgMSAwIDAgNDggMjQgMjQgMCAxIDAgMC00OHoiXQogICAgfTsKICAgIGZhSG91c2VGbG9vZFdhdGVyQ2lyY2xlQXJyb3dSaWdodCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS1mbG9vZC13YXRlci1jaXJjbGUtYXJyb3ctcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZiIsICJNMjg4LjUgMTEyYTE0NCAxNDQgMCAxIDAgLTI4OCAwIDE0NCAxNDQgMCAxIDAgMjg4IDB6TTE0MS4yIDQ0LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBsNTYgNTZjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZsLTU2IDU2Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMHMtNi4yLTE2LjQgMC0yMi42bDI4LjctMjguNy04OS40IDBjLTguOCAwLTE2LTcuMi0xNi0xNnM3LjItMTYgMTYtMTZsODkuNCAwLTI4LjctMjguN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZ6TTMzNi41IDExMmMwIDcxLjEtMzguNiAxMzMuMS05NiAxNjYuM2wwIDEyLjhjMjIuMSA0LjUgNDMuNCAxMy45IDYyLjQgMjguMiAyMi4xIDE2LjYgMjkuMSAxNi42IDUxLjIgMCAyNy41LTIwLjcgNTkuOS0zMS4yIDkyLjQtMzEuNCAzMy4xLS4yIDY2LjMgMTAuMiA5NC40IDMxLjQgNi45IDUuMiAxMi44IDkgMTggMTEuNyAuNiAuMyAxLjIgLjYgMS44IDEgNC4yIDIuMyA4LjUgNC42IDEyLjYgMS41IDYtNC41IDEyLjYtOCAxOS4zLTEwLjRsMC0xMTUuMiA0LjUgMGMxNS4yIDAgMjcuNS0xMi4zIDI3LjUtMjcuNSAwLTcuOS0zLjQtMTUuNS05LjQtMjAuN0w0NDQuNSAxMC41QzQzNi44IDMuNyA0MjYuOCAwIDQxNi41IDBzLTIwLjMgMy43LTI4IDEwLjVMMzI5LjkgNjEuOGM0LjMgMTYgNi42IDMyLjggNi42IDUwLjJ6bTMyIDg4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDQ4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OHpNNDc1LjEgNDEyLjFjMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCAzOTEuOCAyNjYgMzczLjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOWMyMS4zLTE2LjEgNDkuOS0xNi4xIDcxLjIgMHptLTcxLjIgOTZjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zUzI5MCA0ODcuOCAyNjYgNDY5LjdjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdzLTUuOSAyNS42IDQuNyAzMy42YzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy11cC1yaWdodC1mcm9tLXNxdWFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJleHRlcm5hbC1saW5rIl0sICJmMDhlIiwgIk0zMjAgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw4Mi43IDAtMjAxLjQgMjAxLjRjLTEyLjUgMTIuNS0xMi41IDMyLjggMCA0NS4zczMyLjggMTIuNSA0NS4zIDBMNDQ4IDEwOS4zIDQ0OCAxOTJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMjAgMHpNODAgOTZDMzUuOCA5NiAwIDEzMS44IDAgMTc2TDAgNDMyYzAgNDQuMiAzNS44IDgwIDgwIDgwbDI1NiAwYzQ0LjIgMCA4MC0zNS44IDgwLTgwbDAtODBjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCA4MGMwIDguOC03LjIgMTYtMTYgMTZMODAgNDQ4Yy04LjggMC0xNi03LjItMTYtMTZsMC0yNTZjMC04LjggNy4yLTE2IDE2LTE2bDgwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMODAgOTZ6Il0KICAgIH07CiAgICBmYUV4dGVybmFsTGluayA9IGZhQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTsKICAgIGZhQXJyb3dEb3duVXBBY3Jvc3NMaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24tdXAtYWNyb3NzLWxpbmUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTRhZiIsICJNMjY1LjQgMTA1LjRsOTYtOTZjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBsOTYgOTZjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDBsLTQxLjQtNDEuNCAwIDExNC43IDY0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyMCAwIDAgMTE0LjcgNDEuNC00MS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTk2IDk2Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMGwtOTYtOTZjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBMOTYgNDAyLjcgOTYgMjg4IDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwzMjAgMCAwLTExNC43LTQxLjQgNDEuNGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBzLTEyLjUtMzIuOCAwLTQ1LjN6TTQxNiAzMzZsMCAxNDRjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xNDQgNjQgMHpNOTYgMTc2TDk2IDMyYzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNDQtNjQgMHoiXQogICAgfTsKICAgIGZhRmFjZUdyaW5CZWFtMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4tYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUxNiwgImdyaW4tYmVhbSJdLCAiZjU4MiIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTM4Ni43IDMwOC45YzExLjktMy43IDIzLjkgNi4zIDE5LjYgMTguMS0yMi40IDYxLjMtODEuMyAxMDUuMS0xNTAuMyAxMDUuMVMxMjguMSAzODguMiAxMDUuNyAzMjYuOWMtNC4zLTExLjggNy43LTIxLjggMTkuNi0xOC4xIDM5LjIgMTIuMiA4My43IDE5LjEgMTMwLjcgMTkuMXM5MS41LTYuOSAxMzAuNy0xOS4xek0xNzYgMTgwYy0xNS41IDAtMjggMTIuNS0yOCAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4em0xMzIgMjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0zNy42IDMwLjQtNjggNjgtNjhzNjggMzAuNCA2OCA2OGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTE1LjUtMTIuNS0yOC0yOC0yOHMtMjggMTIuNS0yOCAyOHoiXQogICAgfTsKICAgIGZhR3JpbkJlYW0yID0gZmFGYWNlR3JpbkJlYW0yOwogICAgZmFSZWN0YW5nbGVBZCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZWN0YW5nbGUtYWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsiYWQiXSwgImY2NDEiLCAiTTY0IDY0QzI4LjcgNjQgMCA5Mi43IDAgMTI4TDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDM4NCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMjU2YzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDY0ek00MTYgMTg0bDAgMTQ0YzAgMTMuMy0xMC43IDI0LTI0IDI0LTcuMSAwLTEzLjUtMy4xLTE3LjktOC0xMC4yIDUuMS0yMS44IDgtMzQuMSA4LTQyIDAtNzYtMzQtNzYtNzZzMzQtNzYgNzYtNzZjOS45IDAgMTkuMyAxLjkgMjggNS4zbDAtMjEuM2MwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0em0tNDggOTJhMjggMjggMCAxIDAgLTU2IDAgMjggMjggMCAxIDAgNTYgMHpNMTYwIDIwOGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzIgNDggMCAwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMTYgMHptMzIgOTZsLTQ4IDAgMCAyNGMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTEwNGMwLTM1LjMgMjguNy02NCA2NC02NGwxNiAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTA0YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMjR6Il0KICAgIH07CiAgICBmYUFkID0gZmFSZWN0YW5nbGVBZDsKICAgIGZhQm9va1RhbmFraCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJib29rLXRhbmFraCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJ0YW5ha2giXSwgImY4MjciLCAiTTM1MiA1MTJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDAtNjYuN0MxMy40IDM3NC43IDAgMzU2LjkgMCAzMzZMMCA0OEMwIDIxLjUgMjEuNSAwIDQ4IDBMMzUyIDBjNTMgMCA5NiA0MyA5NiA5NmwwIDMyMGMwIDUzLTQzIDk2LTk2IDk2em0zMi05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMjU2IDAgMCA2NCAyNTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnpNMTEzLjkgMjI5Yy0xLjIgMi0xLjkgNC4yLTEuOSA2LjYgMCA2LjkgNS42IDEyLjUgMTIuNSAxMi41bDU2LjkgMCAzMC41IDQ5LjJjMi42IDQuMiA3LjIgNi44IDEyLjIgNi44czkuNi0yLjYgMTIuMi02LjhsMzAuNS00OS4yIDU2LjkgMGM2LjkgMCAxMi41LTUuNiAxMi41LTEyLjUgMC0yLjMtLjYtNC42LTEuOS02LjZsLTI3LjgtNDUgMjcuOC00NWMxLjItMiAxLjktNC4yIDEuOS02LjYgMC02LjktNS42LTEyLjUtMTIuNS0xMi41bC01Ni45IDAtMzAuNS00OS4yQzIzMy42IDY2LjYgMjI5IDY0IDIyNCA2NHMtOS42IDIuNi0xMi4yIDYuOGwtMzAuNSA0OS4yLTU2LjkgMGMtNi45IDAtMTIuNSA1LjYtMTIuNSAxMi41IDAgMi4zIC42IDQuNiAxLjkgNi42bDI3LjggNDUtMjcuOCA0NXoiXQogICAgfTsKICAgIGZhVGFuYWtoID0gZmFCb29rVGFuYWtoOwogICAgZmFIb3RUdWJQZXJzb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG90LXR1Yi1wZXJzb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsiaG90LXR1YiJdLCAiZjU5MyIsICJNMjQwIDQwYzAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMjAzLjUgOTMuMSAxOTIgNjcuMiAxOTIgNDAgMTkyIDI2LjcgMjAyLjcgMTYgMjE2IDE2czI0IDEwLjcgMjQgMjR6TTAgMzM2bDAtODBjMC0zNS4zIDI4LjctNjQgNjQtNjRsMTkuNyAwYzguMSAwIDE2LjIgMS42IDIzLjggNC42bDEzNy4xIDU0LjhjNy42IDMgMTUuNiA0LjYgMjMuOCA0LjZMMzg0IDI1NmMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDEyOGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMzM2em05Ni0xNmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA4MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtODBjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTE1MiAyNGMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MHptMTA0LTI0Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDgwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC04MGMwLTEzLjMtMTAuNy0yNC0yNC0yNHpNMzI4IDE2YzEzLjMgMCAyNCAxMC43IDI0IDI0IDAgMTMuNiA1LjggMjYuNSAxNS44IDM1LjZsMjYuNSAyMy44YzI0IDIxLjYgMzcuNyA1Mi4zIDM3LjcgODQuNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTE4LjctNy45LTM2LjQtMjEuOC00OC45bC0yNi41LTIzLjhDMzE1LjUgOTMuMSAzMDQgNjcuMiAzMDQgNDAgMzA0IDI2LjcgMzE0LjcgMTYgMzI4IDE2ek02NCA0MGE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnoiXQogICAgfTsKICAgIGZhSG90VHViID0gZmFIb3RUdWJQZXJzb247CiAgICBmYUZpbGVIYWxmRGFzaGVkID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtaGFsZi1kYXNoZWQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTY5OCIsICJNNjQgMEMyOC43IDAgMCAyOC43IDAgNjRsMCAyNTYgMzg0IDAgMC0xNDkuNWMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wyNTguNyAxOC43QzI0Ni43IDYuNyAyMzAuNSAwIDIxMy41IDBMNjQgMHpNMzI1LjUgMTc2TDIzMiAxNzZjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDIwOCA1OC41IDMyNS41IDE3NnpNMCAzNTJsMCA2NCA2NCAwIDAtNjQtNjQgMHpNNjQgNTEybDAtNjQtNjQgMGMwIDM1LjMgMjguNyA2NCA2NCA2NHptMzIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGw4MCAwIDAtNjQtODAgMCAwIDY0em0xMTIgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwtNjQgMCAwIDY0em02NC0xNjBsLTY0IDAgMCA2NCA2NCAwIDAtNjR6Il0KICAgIH07CiAgICBmYU91dGRlbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAib3V0ZGVudCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJkZWRlbnQiXSwgImYwM2IiLCAiTS40IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0zODQgMEMxNC44IDk2IC40IDgxLjcgLjQgNjR6bTE5MiAxMjhjMC0xNy43IDE0LjMtMzIgMzItMzJsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnptMzIgOTZsMTkyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE5MiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMyek0uNCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTM4NCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNLjcgMjY4LjZjLTguMi02LjQtOC4yLTE4LjkgMC0yNS4zbDEwMS45LTc5LjNjMTAuNS04LjIgMjUuOC0uNyAyNS44IDEyLjZsMCAxNTguNmMwIDEzLjMtMTUuMyAyMC44LTI1LjggMTIuNkwuNyAyNjguNnoiXQogICAgfTsKICAgIGZhRGVkZW50ID0gZmFPdXRkZW50OwogICAgZmFIYW5kUGVhY2UyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmQtcGVhY2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5OTk2XSwgImYyNWIiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjA4LTY0IDAgMC0yMDhjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTk2IDE2MGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjRjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTY0IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY0ek02MS4zIDUxLjJMMTQzLjkgMjQwIDc0LjEgMjQwIDIuNyA3Ni44Qy00LjQgNjAuNiAzIDQxLjggMTkuMiAzNC43UzU0LjIgMzUgNjEuMyA1MS4yem0yNyAyMjEuM2wtLjItLjUgOTUuOSAwYzIyLjEgMCA0MCAxNy45IDQwIDQwcy0xNy45IDQwLTQwIDQwbC01NiAwYy04LjggMC0xNiA3LjItMTYgMTZzNy4yIDE2IDE2IDE2bDU2IDBjMzkuOCAwIDcyLTMyLjIgNzItNzJsMC0uNmM5LjQgNS40IDIwLjMgOC42IDMyIDguNiAxMy4yIDAgMjUuNC00IDM1LjYtMTAuOCA4LjcgMjQuOSAzMi41IDQyLjggNjAuNCA0Mi44IDExLjcgMCAyMi42LTMuMSAzMi04LjZsMCA4LjZjMCA4OC40LTcxLjYgMTYwLTE2MCAxNjBsLTYxLjcgMGMtNDIuNCAwLTgzLjEtMTYuOS0xMTMuMS00Ni45TDY5LjUgNDUzLjVDNDUuNSA0MjkuNSAzMiAzOTYuOSAzMiAzNjNsMC0yN2MwLTMyLjcgMjQuNi01OS43IDU2LjMtNjMuNXoiXQogICAgfTsKICAgIGZhSGVhZFNpZGVWaXJ1cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtdmlydXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTA2NCIsICJNMzI5LjcgNDQ4Yy01LjEgMC05LjcgMy43LTkuNyA4LjhsMCA3LjJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTE2MCAwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTYzLjZjMC0xMi42LTUuMS0yNC41LTEzLjEtMzQuMi0zMS44LTM4LjctNTAuOS04OC4yLTUwLjktMTQyLjIgMC0xMjMuNyAxMDAuMy0yMjQgMjI0LTIyNCAxMTIuNyAwIDIwNiA4My4zIDIyMS43IDE5MS43IC40IDMgMS43IDUuOSAzLjYgOC4zbDM1LjggNDIuOWM3IDguNCAxMC45IDE5LjEgMTAuOSAzMC4xIDAgMjUuOS0yMSA0Ny00NyA0N2wtMSAwYy04LjggMC0xNiA3LjItMTYgMTZsMCA0OGMwIDM1LjMtMjguNyA2NC02NCA2NGwtMzguMyAwek0yMjQgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0IDAgMjIuOS0yNy43IDM0LjQtNDMuOSAxOC4yLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjljMTYuMiAxNi4yIDQuNyA0My45LTE4LjIgNDMuOS0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0YzIyLjkgMCAzNC40IDI3LjcgMTguMiA0My45LTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGMxNi4yLTE2LjIgNDMuOS00LjcgNDMuOSAxOC4yIDAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRjMC0yMi45IDI3LjctMzQuNCA0My45LTE4LjIgOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45Yy0xNi4yLTE2LjItNC43LTQzLjkgMTguMi00My45IDEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0Yy0yMi45IDAtMzQuNC0yNy43LTE4LjItNDMuOSA5LjQtOS40IDkuNC0yNC42IDAtMzMuOXMtMjQuNi05LjQtMzMuOSAwYy0xNi4yIDE2LjItNDMuOSA0LjctNDMuOS0xOC4yIDAtMTMuMy0xMC43LTI0LTI0LTI0em0tMzIgODhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4em00MCA4OGEyNCAyNCAwIDEgMSA0OCAwIDI0IDI0IDAgMSAxIC00OCAweiJdCiAgICB9OwogICAgZmFDb21wYXNzMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb21wYXNzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NTE3XSwgImYxNGUiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem01MC43LTE4Ni45TDE2Mi40IDM4MC42Yy0xOS40IDcuNS0zOC41LTExLjYtMzEtMzFsNTUuNS0xNDQuM2MzLjMtOC41IDkuOS0xNS4xIDE4LjQtMTguNGwxNDQuMy01NS41YzE5LjQtNy41IDM4LjUgMTEuNiAzMSAzMUwzMjUuMSAzMDYuN2MtMy4yIDguNS05LjkgMTUuMS0xOC40IDE4LjR6TTI4OCAyNTZhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHoiXQogICAgfTsKICAgIGZhUGVuTmliID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlbi1uaWIiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMDAwMV0sICJmNWFkIiwgIk0zNjguNSAxOC4zbC01MC4xIDUwLjEgMTI1LjMgMTI1LjMgNTAuMS01MC4xYzIxLjktMjEuOSAyMS45LTU3LjMgMC03OS4yTDQ0Ny43IDE4LjNjLTIxLjktMjEuOS01Ny4zLTIxLjktNzkuMiAwek0yNzkuMyA5Ny4ybC0uNSAuMS0xNDQuMSA0My4yYy0xOS45IDYtMzUuNyAyMS4yLTQyLjMgNDFMMy44IDQ0NS44Yy0yLjkgOC43LTEuOSAxOC4yIDIuNSAyNkwxNjEuNyAzMTYuNGMtMS4xLTQtMS42LTguMS0xLjYtMTIuNCAwLTI2LjUgMjEuNS00OCA0OC00OHM0OCAyMS41IDQ4IDQ4LTIxLjUgNDgtNDggNDhjLTQuMyAwLTguNS0uNi0xMi40LTEuNkw0MC4zIDUwNS43YzcuOCA0LjQgMTcuMiA1LjQgMjYgMi41bDI2NC4zLTg4LjZjMTkuNy02LjYgMzUtMjIuNCA0MS00Mi4zbDQzLjItMTQ0LjEgLjEtLjUtMTM1LjUtMTM1LjV6Il0KICAgIH07CiAgICBmYVRlbnRBcnJvd3NEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3dzLWRvd24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4MSIsICJNMTg1LjUgMTIxYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnptMjQ4IDcybDcyLTcyYzkuNC05LjQgOS40LTI0LjYgMC0zMy45cy0yNC42LTkuNC0zMy45IDBsLTMxIDMxIDAtMTAyLjFjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCAxMDIuMS0zMS0zMWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHpNNjAuMyAyOTIuNkwzNy4xIDQ3NmMtMi40IDE5LjEgMTIuNSAzNiAzMS43IDM2bDE1NC41IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC0xMTcuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOWw2OC4yIDEzNi41YzUuNCAxMC44IDE2LjUgMTcuNyAyOC42IDE3LjdsNzEuOSAwYzE5LjMgMCAzNC4yLTE2LjkgMzEuNy0zNkw0NTIuNyAyOTIuN2MtMS4yLTkuNy02LjktMTguNC0xNS4zLTIzLjRMMjcxLjkgMTY5LjljLTEwLjItNi4xLTIyLjktNi4xLTMzLjEgLjFMNzUuNCAyNjkuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zeiJdCiAgICB9OwogICAgZmFGb3J3YXJkRmFzdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb3J3YXJkLWZhc3QiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs5MTk3LCAiZmFzdC1mb3J3YXJkIl0sICJmMDUwIiwgIk0xOS44IDQ3Ny42YzEyIDUgMjUuNyAyLjIgMzQuOS02LjlMMjI0IDMwMS4zIDIyNCA0NDhjMCAxMi45IDcuOCAyNC42IDE5LjggMjkuNnMyNS43IDIuMiAzNC45LTYuOUw0NDggMzAxLjMgNDQ4IDQ0OGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMzg0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMTQ2LjctMTY5LjQtMTY5LjRjLTkuMi05LjItMjIuOS0xMS45LTM0LjktNi45UzIyNCA1MS4xIDIyNCA2NEwyMjQgMjEwLjcgNTQuNiA0MS40Yy05LjItOS4yLTIyLjktMTEuOS0zNC45LTYuOVMwIDUxLjEgMCA2NEwwIDQ0OGMwIDEyLjkgNy44IDI0LjYgMTkuOCAyOS42eiJdCiAgICB9OwogICAgZmFGYXN0Rm9yd2FyZCA9IGZhRm9yd2FyZEZhc3Q7CiAgICBmYUNyb3AgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY3JvcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMTI1IiwgIk00NDggMTA5LjNsNTQuNi01NC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwTDQwMi43IDY0IDE3NiA2NCAxNzYgMTI4IDMzOC43IDEyOCAxMjggMzM4LjcgMTI4IDMyYzAtMTcuNy0xNC4zLTMyLTMyLTMyUzY0IDE0LjMgNjQgMzJsMCAzMi0zMiAwQzE0LjMgNjQgMCA3OC4zIDAgOTZzMTQuMyAzMiAzMiAzMmwzMiAwIDAgMjU2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIwOCAwIDAtNjQtMTYyLjcgMCAyMTAuNy0yMTAuNyAwIDMwNi43YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMiAzMiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0zMiAwIDAtMjc0Ljd6Il0KICAgIH07CiAgICBmYVdoaXNrZXlHbGFzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ3aGlza2V5LWdsYXNzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI5MzQ3LCAiZ2xhc3Mtd2hpc2tleSJdLCAiZjdhMCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NEwwIDM1MmMwIDcwLjcgNTcuMyAxMjggMTI4IDEyOGwxOTIgMGM3MC43IDAgMTI4LTU3LjMgMTI4LTEyOGwwLTI4OGMwLTE3LjctMTQuMy0zMi0zMi0zMkwzMiAzMnpNNjQgMjU2bDAtMTYwIDMyMCAwIDAgMTYwLTMyMCAweiJdCiAgICB9OwogICAgZmFHbGFzc1doaXNrZXkgPSBmYVdoaXNrZXlHbGFzczsKICAgIGZhU3F1YXJlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5NjMyLCA5NzIzLCA5NzI0LCA2MTU5MF0sICJmMGM4IiwgIk02NCAzMmwzMjAgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDMyMGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJ6Il0KICAgIH07CiAgICBmYUZhY2VHcmluMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW4iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1MTIsICJncmluIl0sICJmNTgwIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMzg2LjcgMzA4LjljMTEuOS0zLjcgMjMuOSA2LjMgMTkuNiAxOC4xLTIyLjQgNjEuMy04MS4zIDEwNS4xLTE1MC4zIDEwNS4xUzEyOC4xIDM4OC4yIDEwNS43IDMyNi45Yy00LjMtMTEuOCA3LjctMjEuOCAxOS42LTE4LjEgMzkuMiAxMi4yIDgzLjcgMTkuMSAxMzAuNyAxOS4xczkxLjUtNi45IDEzMC43LTE5LjF6TTE0NCAyMDhhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhR3JpbjIgPSBmYUZhY2VHcmluMjsKICAgIGZhRmlsZUNvbnRyYWN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpbGUtY29udHJhY3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjU2YyIsICJNMCA2NEMwIDI4LjcgMjguNyAwIDY0IDBMMjEzLjUgMGMxNyAwIDMzLjMgNi43IDQ1LjMgMTguN0wzNjUuMyAxMjUuM2MxMiAxMiAxOC43IDI4LjMgMTguNyA0NS4zTDM4NCA0NDhjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNTEyYy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDY0em0yMDgtNS41bDAgOTMuNWMwIDEzLjMgMTAuNyAyNCAyNCAyNEwzMjUuNSAxNzYgMjA4IDU4LjV6TTg4IDY0Qzc0LjcgNjQgNjQgNzQuNyA2NCA4OHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRMODggNjR6bTAgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDggMHptNzAuMyAxNjBjLTExLjMgMC0yMS45IDUuMS0yOC45IDEzLjlMNjkuMyA0MDljLTguMyAxMC4zLTYuNiAyNS41IDMuNyAzMy43czI1LjUgNi42IDMzLjctMy44bDQ3LjEtNTguOCAxNS4yIDUwLjdjMyAxMC4yIDEyLjQgMTcuMSAyMyAxNy4xbDEwNCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC04Ni4xIDAtMTYuMS01My42Yy00LjctMTUuNy0xOS4xLTI2LjQtMzUuNS0yNi40eiJdCiAgICB9OwogICAgZmFBbmdsZVVwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlLXVwIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbODk2M10sICJmMTA2IiwgIk0xNjkuNCAxMzcuNGMxMi41LTEyLjUgMzIuOC0xMi41IDQ1LjMgMGwxNjAgMTYwYzEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwTDE5MiAyMDUuMyA1NC42IDM0Mi42Yy0xMi41IDEyLjUtMzIuOCAxMi41LTQ1LjMgMHMtMTIuNS0zMi44IDAtNDUuM2wxNjAtMTYweiJdCiAgICB9OwogICAgZmFGYWNlU21pbGUyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NzgsICJzbWlsZSJdLCAiZjExOCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTE2NS40IDMyMS45YzIwLjQgMjggNTMuNCA0Ni4xIDkwLjYgNDYuMXM3MC4yLTE4LjEgOTAuNi00Ni4xYzcuOC0xMC43IDIyLjgtMTMuMSAzMy41LTUuM3MxMy4xIDIyLjggNS4zIDMzLjVDMzU2LjMgMzkwIDMwOS4yIDQxNiAyNTYgNDE2cy0xMDAuMy0yNi0xMjkuNC02NS45Yy03LjgtMTAuNy01LjQtMjUuNyA1LjMtMzMuNXMyNS43LTUuNCAzMy41IDUuM3pNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFTbWlsZTIgPSBmYUZhY2VTbWlsZTI7CiAgICBmYVBlcnNvbkRyZXNzQnVyc3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRyZXNzLWJ1cnN0IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NDQiLCAiTTIwOCA0MC4xYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRzLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNHpNOCAxNDQuMWMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00OCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHptOTIuNSAxNDEuNGwzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMEw2Ni42IDI1MS42Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDB6TTY2LjYgMi43Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjljOS40IDkuNCAyNC42IDkuNCAzMy45IDBzOS40LTI0LjYgMC0zMy45TDEwMC41IDIuN0M5MS4xLTYuNyA3Ni02LjcgNjYuNiAyLjd6TTM1MiA4MGE1NiA1NiAwIDEgMCAwLTExMiA1NiA1NiAwIDEgMCAwIDExMnpNMjQ2LjIgMzg0bDI1LjggMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTI4IDMyIDAgMCAxMjhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAyNS44IDBjMTAuOSAwIDE4LjYtMTAuNyAxNS4yLTIxLjFsLTQzLTEyOSA0OC4zIDY1LjFjMTAuNSAxNC4yIDMwLjYgMTcuMiA0NC44IDYuNnMxNy4yLTMwLjYgNi42LTQ0LjhsLTcwLjUtOTVDNDM0IDEzMiAzOTQuMyAxMTIgMzUyIDExMnMtODIgMjAtMTA3LjIgNTMuOWwtNzAuNSA5NWMtMTAuNSAxNC4yLTcuNiAzNC4yIDYuNiA0NC44czM0LjIgNy42IDQ0LjgtNi42bDQ4LjMtNjUuMS00MyAxMjljLTMuNSAxMC40IDQuMyAyMS4xIDE1LjIgMjEuMXoiXQogICAgfTsKICAgIGZhRGl2aWRlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpdmlkZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEwMTM1LCAyNDddLCAiZjUyOSIsICJNMjI0IDQ4YTU2IDU2IDAgMSAxIDAgMTEyIDU2IDU2IDAgMSAxIDAtMTEyek0wIDI1NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyek0xNjggNDA4YTU2IDU2IDAgMSAxIDExMiAwIDU2IDU2IDAgMSAxIC0xMTIgMHoiXQogICAgfTsKICAgIGZhQ29kZUZvcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1mb3JrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImUxM2IiLCAiTTgwIDEwNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6bTgwLTI0YzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDEyOCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMjIuN2MtMjguMy0xMi4zLTQ4LTQwLjUtNDgtNzMuMyAwLTQ0LjIgMzUuOC04MCA4MC04MHM4MCAzNS44IDgwIDgwYzAgMzIuOC0xOS43IDYxLTQ4IDczLjNsMCAyMi43YzAgNjEuOS01MC4xIDExMi0xMTIgMTEybC0zMiAwIDAgNzAuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNsMC03MC43LTMyIDBDOTguMSAyODggNDggMjM3LjkgNDggMTc2bDAtMjIuN0MxOS43IDE0MSAwIDExMi44IDAgODAgMCAzNS44IDM1LjggMCA4MCAwczgwIDM1LjggODAgODB6bTIwOCAyNGEyNCAyNCAwIDEgMCAwLTQ4IDI0IDI0IDAgMSAwIDAgNDh6TTI0OCA0MzJhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHoiXQogICAgfTsKICAgIGZhSG91c2VGbGFnID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXNlLWZsYWciLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUwZCIsICJNNDcyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsOTYgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMybC05NiAwIDAgMjg4YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNDQ4YzAtMTcuNyAxNC4zLTMyIDMyLTMyek0yODMuNSA1OS4xbDEwMC41IDk2LjkgMCAzNTYtMjU2IDBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMTQ0LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjI4LjUgNTkuMUMyMzUuOSA1MiAyNDUuNyA0OCAyNTYgNDhzMjAuMSA0IDI3LjUgMTEuMXpNMjMyIDI1NmMtMTMuMyAwLTI0IDEwLjctMjQgMjRsMCA0OGMwIDEzLjMgMTAuNyAyNCAyNCAyNGw0OCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0bDAtNDhjMC0xMy4zLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJ1aWxkaW5nQ29sdW1ucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWlsZGluZy1jb2x1bW5zIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImJhbmsiLCAiaW5zdGl0dXRpb24iLCAibXVzZXVtIiwgInVuaXZlcnNpdHkiXSwgImYxOWMiLCAiTTI3MS45IDIwLjJjLTkuOC01LjYtMjEuOS01LjYtMzEuOCAwbC0yMjQgMTI4Yy0xMi42IDcuMi0xOC44IDIyLTE1LjEgMzZTMTcuNSAyMDggMzIgMjA4bDMyIDAgMCAyMDggMCAwLTUxLjIgMzguNEM0LjcgNDYwLjQgMCA0NjkuOSAwIDQ4MCAwIDQ5Ny43IDE0LjMgNTEyIDMyIDUxMmw0NDggMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTEwLjEtNC43LTE5LjYtMTIuOC0yNS42bC01MS4yLTM4LjQgMC0yMDggMzIgMGMxNC41IDAgMjcuMi05LjggMzAuOS0yMy44cy0yLjUtMjguOC0xNS4xLTM2bC0yMjQtMTI4ek00MDAgMjA4bDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHptLTExMiAwbDAgMjA4LTY0IDAgMC0yMDggNjQgMHpNMjU2IDk2YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhQmFuayA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFJbnN0aXR1dGlvbiA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFNdXNldW0gPSBmYUJ1aWxkaW5nQ29sdW1uczsKICAgIGZhVW5pdmVyc2l0eSA9IGZhQnVpbGRpbmdDb2x1bW5zOwogICAgZmFSdWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVnIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1NjkiLCAiTTI0IDY0bDU2IDAgMCAzODQtNTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOCAwIDAtMzItOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDggMCAwLTMyLTggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw4IDAgMC00MC04IDBDMTAuNyAxMTIgMCAxMDEuMyAwIDg4UzEwLjcgNjQgMjQgNjR6bTEwNCAwbDMyMCAwIDAgMzg0LTMyMCAwIDAtMzg0ek01NzYgODhjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtOCAwIDAgMzIgOCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04IDAgMCAzMiA4IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTggMCAwIDQwIDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNTYgMCAwLTM4NCA1NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0eiJdCiAgICB9OwogICAgZmFDb2RlTWVyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29kZS1tZXJnZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmMzg3IiwgIk04MCA1NmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6bTMyLjQgOTcuMmMyOC0xMi40IDQ3LjYtNDAuNSA0Ny42LTczLjIgMC00NC4yLTM1LjgtODAtODAtODBTMCAzNS44IDAgODBjMCAzMi44IDE5LjcgNjEgNDggNzMuM2wwIDIwNS4zQzE5LjcgMzcxIDAgMzk5LjIgMCA0MzIgMCA0NzYuMiAzNS44IDUxMiA4MCA1MTJzODAtMzUuOCA4MC04MGMwLTMyLjgtMTkuNy02MS00OC03My4zbDAtODYuNmMyNi43IDIwLjEgNjAgMzIgOTYgMzJsODYuNyAwYzEyLjMgMjguMyA0MC41IDQ4IDczLjMgNDggNDQuMiAwIDgwLTM1LjggODAtODBzLTM1LjgtODAtODAtODBjLTMyLjggMC02MSAxOS43LTczLjMgNDhMMjA4IDI0MGMtNDkuOSAwLTkxLTM4LjEtOTUuNi04Ni44ek04MCA0MDhhMjQgMjQgMCAxIDEgMCA0OCAyNCAyNCAwIDEgMSAwLTQ4ek0zNDQgMjcyYTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6Il0KICAgIH07CiAgICBmYUhvdXNlVHN1bmFtaSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJob3VzZS10c3VuYW1pIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1MTUiLCAiTTI4OCAxNkMxNTUuNSAxNiA0OCAxMjMuNSA0OCAyNTZTMTU1LjUgNDk2IDI4OCA0OTZjNy40IDAgMTkuNy0yLjMgMzMuNy03LjMgMTMuOC00LjkgMjcuMS0xMS43IDM2LjctMTguOSAzOC40LTI5IDkwLjUtMjkgMTI5IDAgMTUuNCAxMS42IDM1LjMgMjEuMSA1NSAyNC40IDE5LjUgMy4zIDM3IC40IDUxLjEtMTAuMiAxMC42LTggMjUuNi01LjkgMzMuNiA0LjdzNS45IDI1LjYtNC43IDMzLjZjLTI3LjMgMjAuNS01OS4yIDI0LTg3LjkgMTkuMi0yOC41LTQuOC01NS40LTE4LTc1LjktMzMuNC0yMS4zLTE2LjEtNDkuOS0xNi4xLTcxLjIgMC0xNC41IDEwLjktMzIuNCAxOS43LTQ5LjUgMjUuOC0xNi44IDYtMzQuOSAxMC4xLTQ5LjkgMTAuMWwtLjEgMEMxMjguOSA1NDMuOSAwIDQxNSAwIDI1NiAwIDk2LjkgMTI4LjktMzIgMjg4LTMyIDMwMS4zLTMyIDMxMi0yMS4zIDMxMi04cy0xMC43IDI0LTI0IDI0em00NC44IDE2Ni40bDk2LTcyYzExLjQtOC41IDI3LjEtOC41IDM4LjUgMGw5NS41IDcyYzggNiAxMi43IDE1LjUgMTIuNyAyNS41bC4zIDEyMS41Yy0yLjIgMS4zLTQuMyAyLjYtNi40IDQuMi00LjMgMy4xLTguNyAuOC0xMy4yLTEuNWwtMS4yLS42LS43LS4zYy01LjQtMi43LTExLjctNi42LTE4LjktMTEuNy0yOS41LTIxLjEtNjQuMy0zMS42LTk5LjEtMzEuNC0zNC4xIC4yLTY4LjEgMTAuNy05NyAzMS40LTcuOCA1LjYtMTMuOCA5LjMtMTkuMyAxMS4yTDMyMCAyMDhjMC0xMC4xIDQuNy0xOS42IDEyLjgtMjUuNnptNTQuNiAyMjkuN2MtMTQuNSAxMC45LTMyLjQgMTkuNy00OS41IDI1LjgtMTYuOCA2LTM0LjkgMTAuMS00OS45IDEwLjEtMTA2IDAtMTkyLTg2LTE5Mi0xOTJTMTgyIDY0IDI4OCA2NGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtNzkuNSAwLTE0NCA2NC41LTE0NCAxNDRzNjQuNSAxNDQgMTQ0IDE0NGM3LjQgMCAxOS43LTIuMyAzMy43LTcuMyAxMy44LTQuOSAyNy4xLTExLjcgMzYuNy0xOC45IDM4LjQtMjkgOTAuNS0yOSAxMjkgMCAxNS40IDExLjYgMzUuMyAyMS4xIDU1IDI0LjQgMTkuNSAzLjMgMzcgLjQgNTEuMS0xMC4yIDEwLjYtOCAyNS42LTUuOSAzMy42IDQuN3M1LjkgMjUuNi00LjcgMzMuNmMtMjcuMyAyMC41LTU5LjIgMjQtODcuOSAxOS4yLTI4LjUtNC44LTU1LjQtMTgtNzUuOS0zMy40LTIxLjMtMTYuMS00OS45LTE2LjEtNzEuMiAweiJdCiAgICB9OwogICAgZmFNYWduaWZ5aW5nR2xhc3NDaGFydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nLWdsYXNzLWNoYXJ0IiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU1MjIiLCAiTTQxNiAyMDhjMCA0NS45LTE0LjkgODguMy00MCAxMjIuN0w1MDIuNiA0NTcuNGMxMi41IDEyLjUgMTIuNSAzMi44IDAgNDUuM3MtMzIuOCAxMi41LTQ1LjMgMEwzMzAuNyAzNzZDMjk2LjMgNDAxLjEgMjUzLjkgNDE2IDIwOCA0MTYgOTMuMSA0MTYgMCAzMjIuOSAwIDIwOFM5My4xIDAgMjA4IDAgNDE2IDkzLjEgNDE2IDIwOHptLTMxMiA4bDAgNjRjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTY0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MC05NmwwIDE2MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtMTYwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0em04MCA2NGwwIDk2YzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC05NmMwLTEzLjMtMTAuNy0yNC0yNC0yNHMtMjQgMTAuNy0yNCAyNHoiXQogICAgfTsKICAgIGZhVW1icmVsbGEgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidW1icmVsbGEiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjBlOSIsICJNMjU2LTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMmMxMjYuMyAxNS43IDIyNCAxMjMuNSAyMjQgMjU0IDAgMy44LS4xIDcuNS0uMiAxMS4zLS4zIDYuOS01IDEyLjgtMTEuNyAxNC43cy0xMy44LS43LTE3LjYtNi41Yy0xNC40LTIxLjQtMzguOC0zNS41LTY2LjUtMzUuNS0yOS4zIDAtNTQuOSAxNS43LTY4LjkgMzkuMy0yLjcgNC42LTcuNiA3LjYtMTMgNy44cy0xMC41LTIuMi0xMy43LTYuNWMtMTQuNi0xOS44LTM4LTMyLjYtNjQuNS0zMi42cy00OS45IDEyLjgtNjQuNSAzMi42Yy0zLjIgNC4zLTguMyA2LjgtMTMuNyA2LjVzLTEwLjItMy4yLTEzLTcuOGMtMTQtMjMuNi0zOS42LTM5LjMtNjguOS0zOS4zLTI3LjcgMC01Mi4xIDE0LjEtNjYuNSAzNS41LTMuOSA1LjctMTEgOC40LTE3LjYgNi41Uy41IDI3NC4yIC4yIDI2Ny4zQy4xIDI2My41IDAgMjU5LjggMCAyNTYgMCAxMjUuNSA5Ny43IDE3LjcgMjI0IDJsMC0yYzAtMTcuNyAxNC4zLTMyIDMyLTMyem0zMiAzNjBsMCAxMDIuNmMwIDQ1LTM2LjUgODEuNC04MS40IDgxLjQtMzAuOCAwLTU5LTE3LjQtNzIuOC00NWwtMi4zLTQuN2MtNy45LTE1LjgtMS41LTM1IDE0LjMtNDIuOXMzNS0xLjUgNDIuOSAxNC4zbDIuMyA0LjdjMyA1LjkgOSA5LjYgMTUuNiA5LjYgOS42IDAgMTcuNC03LjggMTcuNC0xNy40TDIyNCAzMjhjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMnoiXQogICAgfTsKICAgIGZhSGlsbFJvY2tzbGlkZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoaWxsLXJvY2tzbGlkZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNTA4IiwgIk0yNTIuNCAxMDMuOGwyNyA0OGMyLjggNSA4LjIgOC4yIDEzLjkgOC4ybDUzLjMgMGM1LjggMCAxMS4xLTMuMSAxMy45LTguMmwyNy00OGMyLjctNC45IDIuNy0xMC44IDAtMTUuN2wtMjctNDhjLTIuOC01LTguMi04LjItMTMuOS04LjJsLTUzLjMgMGMtNS44IDAtMTEuMSAzLjEtMTMuOSA4LjJsLTI3IDQ4Yy0yLjcgNC45LTIuNyAxMC44IDAgMTUuN3pNNjguMyA4N0M0My4xIDYxLjggMCA3OS43IDAgMTE1LjNMMCA0MzJjMCA0NC4yIDM1LjggODAgODAgODBsMzE2LjcgMGMzNS42IDAgNTMuNS00My4xIDI4LjMtNjguM0w2OC4zIDg3ek01MDQuMiA0MDMuNmM0LjkgMi43IDEwLjggMi43IDE1LjcgMGw0OC0yN2M1LTIuOCA4LjItOC4yIDguMi0xMy45bDAtNTMuM2MwLTUuOC0zLjEtMTEuMS04LjItMTMuOWwtNDgtMjdjLTQuOS0yLjctMTAuOC0yLjctMTUuNyAwbC00OCAyN2MtNSAyLjgtOC4yIDguMi04LjIgMTMuOWwwIDUzLjNjMCA1LjggMy4xIDExLjEgOC4yIDEzLjlsNDggMjd6TTE5MiA2NGEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgMjg4YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhVXNlclNlY3JldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLXNlY3JldCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyODM3M10sICJmMjFiIiwgIk0xNzEtMTZjLTM2LjQgMC01Ny44IDU4LjMtNjguMyAxMTJMNzIgOTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjQgMCAwIDMyYzAgMTcgMy4zIDMzLjIgOS4zIDQ4bC05LjMgMCAwIDAtMjAuNSAwYy0xNS4yIDAtMjcuNSAxMi4zLTI3LjUgMjcuNSAwIDMgLjUgNS45IDEuNCA4LjdsMjguOSA4Ni42QzQwLjIgMzc5LjYgMTYgNDI4LjEgMTYgNDgyLjMgMTYgNDk4LjcgMjkuMyA1MTIgNDUuNyA1MTJsMzU2LjYgMGMxNi40IDAgMjkuNy0xMy4zIDI5LjctMjkuNyAwLTU0LjItMjQuMi0xMDIuNy02Mi4zLTEzNS40bDI4LjktODYuNmMuOS0yLjggMS40LTUuNyAxLjQtOC43IDAtMTUuMi0xMi4zLTI3LjUtMjcuNS0yNy41bC0yMC41IDAgMCAwLTkuMyAwYzYtMTQuOCA5LjMtMzEgOS4zLTQ4bDAtMzIgMjQgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtMzAuNyAwYy0xMC40LTUzLjctMzEuOS0xMTItNjguMy0xMTItOS42IDAtMTkgMy45LTI3LjUgOC4yLTguMiA0LjEtMTguNCA3LjgtMjUuNSA3LjhzLTE3LjMtMy43LTI1LjUtNy44QzE5MC0xMi4xIDE4MC42LTE2IDE3MS0xNnptOTMuNyA0ODQuNGwtMjQuOC03MC45IDI3LjktMzIuNWMyLjctMy4yIDQuMi03LjIgNC4yLTExLjQgMC05LjctNy44LTE3LjUtMTcuNS0xNy41bC02MSAwYy05LjcgMC0xNy41IDcuOC0xNy41IDE3LjUgMCA0LjIgMS41IDguMiA0LjIgMTEuNGwyNy45IDMyLjUtMjQuOCA3MC45LTU3LTE4MC40IDM1LjcgMGMxOC40IDEwLjIgMzkuNSAxNiA2MiAxNnM0My42LTUuOCA2Mi0xNmwzNS43IDAtNTcgMTgwLjR6TTIyNCAyNTZjLTM0LjcgMC02NC4yLTIyLjEtNzUuMy01MyA1LjcgMy4yIDEyLjMgNSAxOS4zIDVsMTIuNCAwYzE2LjUgMCAzMS4xLTEwLjYgMzYuMy0yNi4yIDIuMy03IDEyLjItNyAxNC41IDAgNS4yIDE1LjYgMTkuOSAyNi4yIDM2LjMgMjYuMmwxMi40IDBjNyAwIDEzLjYtMS44IDE5LjMtNS0xMS4xIDMwLjktNDAuNiA1My03NS4zIDUzeiJdCiAgICB9OwogICAgZmFQYWdlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYWdlciIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODIyM10sICJmODE1IiwgIk0wIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI1NmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0NDhjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4em02NCAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJMOTYgMTI4Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNODggMzIwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6bTEyOCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQ4IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQ4IDB6Il0KICAgIH07CiAgICBmYUJyaWVmY2FzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJicmllZmNhc2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjgxODhdLCAiZjBiMSIsICJNMjAwIDQ4bDExMiAwYzQuNCAwIDggMy42IDggOGwwIDQwLTEyOCAwIDAtNDBjMC00LjQgMy42LTggOC04em0tNTYgOGwwIDQwLTgwIDBDMjguNyA5NiAwIDEyNC43IDAgMTYwbDAgOTYgNTEyIDAgMC05NmMwLTM1LjMtMjguNy02NC02NC02NGwtODAgMCAwLTQwYzAtMzAuOS0yNS4xLTU2LTU2LTU2TDIwMCAwYy0zMC45IDAtNTYgMjUuMS01NiA1NnpNNTEyIDMwNGwtMTkyIDAgMCAxNmMwIDE3LjctMTQuMyAzMi0zMiAzMmwtNjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNi0xOTIgMCAwIDExMmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTExMnoiXQogICAgfTsKICAgIGZhVHJvd2VsQnJpY2tzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRyb3dlbC1icmlja3MiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU4YSIsICJNMjI0IDMyYzAtMTEuNS02LjItMjIuMi0xNi4yLTI3LjhzLTIyLjMtNS41LTMyLjIgLjRsLTE2MCA5NkM1LjkgMTA2LjMgMCAxMTYuOCAwIDEyOHM1LjkgMjEuNyAxNS41IDI3LjRsMTYwIDk2YzkuOSA1LjkgMjIuMiA2LjEgMzIuMiAuNFMyMjQgMjM1LjUgMjI0IDIyNGwwLTY0IDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0yNTYgMCAwLTY0em05NiAxOTJjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTYwIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTYwIDB6TTAgNDE2bDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTY0YzAtMTcuNy0xNC4zLTMyLTMyLTMybC05NiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnptMjI0LTMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMmwwIDY0YzAgMTcuNyAxNC4zIDMyIDMyIDMybDI1NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtNjRjMC0xNy43LTE0LjMtMzItMzItMzJsLTI1NiAweiJdCiAgICB9OwogICAgZmFTb2NrcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzb2NrcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyOTUxMF0sICJmNjk2IiwgIk0yNTIuOCAwTDE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2IDExMiAwIDAtMTZjMC0xNy41IDQuNy0zMy45IDEyLjgtNDh6TTEyOCAxMTJsMCAxMjhjMCAyMC4xLTkuNSAzOS4xLTI1LjYgNTEuMmwtNjQgNDhjLTI0LjIgMTguMS0zOC40IDQ2LjYtMzguNCA3Ni44IDAgNTMgNDMgOTYgOTYgOTYgMTUuNCAwIDMwLjUtMy43IDQ0LTEwLjctMTcuNi0yMy45LTI4LTUzLjQtMjgtODUuMyAwLTQ1LjMgMjEuMy04OCA1Ny42LTExNS4ybDY0LTQ4YzQtMyA2LjQtNy44IDYuNC0xMi44bDAtMTI4LTExMiAwem0xNjAgMGwwIDEyOGMwIDIwLjEtOS41IDM5LjEtMjUuNiA1MS4ybC02NCA0OGMtMjQuMiAxOC4xLTM4LjQgNDYuNi0zOC40IDc2LjggMCA1MyA0MyA5NiA5NiA5NiAyMC44IDAgNDEtNi43IDU3LjYtMTkuMmwxMTUuMi04Ni40QzQ2MSAzODIuMiA0ODAgMzQ0LjMgNDgwIDMwNGwwLTE5Mi0xOTIgMHpNNDgwIDY0bDAtMTZjMC0yNi41LTIxLjUtNDgtNDgtNDhMMzM2IDBjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTYgMTkyIDB6Il0KICAgIH07CiAgICBmYVQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzExNl0sICI1NCIsICJNMzIgMzJDMTQuMyAzMiAwIDQ2LjMgMCA2NFMxNC4zIDk2IDMyIDk2bDEyOCAwIDAgMzUyYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zNTIgMTI4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzJ6Il0KICAgIH07CiAgICBmYU1pY3JvY2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtaWNyb2NoaXAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjJkYiIsICJNMTc2IDI0YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDBjLTM1LjMgMC02NCAyOC43LTY0IDY0bC00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDAgMCA1Ni00MCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDQwIDBjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMCA0MGMwIDEzLjMgMTAuNyAyNCAyNCAyNHMyNC0xMC43IDI0LTI0bDAtNDAgNTYgMCAwIDQwYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC00MCA1NiAwIDAgNDBjMCAxMy4zIDEwLjcgMjQgMjQgMjRzMjQtMTAuNyAyNC0yNGwwLTQwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDQwIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTQwIDAgMC01NiA0MCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC00MCAwIDAtNTYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMGMwLTM1LjMtMjguNy02NC02NC02NGwwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwYzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgNDAtNTYgMCAwLTQwek0xNjAgMTI4bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTkyYzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xOTJjMC0xNy43IDE0LjMtMzIgMzItMzJ6bTE2IDQ4bDAgMTYwIDE2MCAwIDAtMTYwLTE2MCAweiJdCiAgICB9OwogICAgZmFUcnVja01lZGljYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJ1Y2stbWVkaWNhbCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzEyODY1NywgImFtYnVsYW5jZSJdLCAiZjBmOSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzLjMgMGMxMC40IDM2LjkgNDQuNCA2NCA4NC43IDY0czc0LjItMjcuMSA4NC43LTY0bDEwMi42IDBjMTAuNCAzNi45IDQ0LjQgNjQgODQuNyA2NHM3NC4yLTI3LjEgODQuNy02NGwzLjMgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTE0Ni43YzAtMTctNi43LTMzLjMtMTguNy00NS4zTDUxMiAxNDYuN2MtMTItMTItMjguMy0xOC43LTQ1LjMtMTguN2wtNTAuNyAwIDAtMzJjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTUxMiAyMzcuM2wwIDUwLjctOTYgMCAwLTk2IDUwLjcgMCA0NS4zIDQ1LjN6TTE1MiAzODRhNDAgNDAgMCAxIDEgMCA4MCA0MCA0MCAwIDEgMSAwLTgwem0yMzIgNDBhNDAgNDAgMCAxIDEgODAgMCA0MCA0MCAwIDEgMSAtODAgMHpNMTc2IDEzNmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA0MCA0MCAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtNDAgMCAwIDQwYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtNDAtNDAgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2bDQwIDAgMC00MHoiXQogICAgfTsKICAgIGZhQW1idWxhbmNlID0gZmFUcnVja01lZGljYWw7CiAgICBmYU9tID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9tIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MzI5XSwgImY2NzkiLCAiTTM4OC43IDQuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMGwxNiAxNmM2LjIgNi4yIDYuMiAxNi40IDAgMjIuNmwtMTYgMTZjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwbC0xNi0xNmMtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZsMTYtMTZ6TTE3NiAxNjBjLTEwLjggMC0yMC44IDMuNi0yOC44IDkuNi0xNC4xIDEwLjYtMzQuMiA3LjgtNDQuOC02LjRzLTcuOC0zNC4yIDYuNC00NC44YzE4LjctMTQuMSA0Mi0yMi40IDY3LjItMjIuNCA2MS45IDAgMTEyIDUwLjEgMTEyIDExMiAwIDE3LjItMy45IDMzLjUtMTAuOCA0OGw0OS43IDBjMTIuNyAwIDI0LjktNSAzMy45LTE0LjFsMjAuNy0yMC43YzE4LjctMTguNyA0NC4xLTI5LjMgNzAuNi0yOS4zIDU1LjIgMCA5OS45IDQ0LjcgOTkuOSA5OS45bDAgOTYuMWMwIDU1LjItNDQuOCAxMDAtMTAwIDEwMFMzNTIgNDQzLjIgMzUyIDM4OGwwLTRjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDRjMCAxOS45IDE2LjEgMzYgMzYgMzZzMzYtMTYuMSAzNi0zNmwwLTk2LjFjMC0xOS44LTE2LjEtMzUuOS0zNS45LTM1LjktOS41IDAtMTguNiAzLjgtMjUuNCAxMC41bC0yMC43IDIwLjdjLTIxIDIxLTQ5LjQgMzIuOC03OS4xIDMyLjhsLTI2LjggMGMxMi42IDE5LjYgMTkuOSA0Mi44IDE5LjkgNjggMCA3NS4yLTY1IDEzMi0xNDAgMTMyUzQwIDQ2My4yIDQwIDM4OGMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMyYzAgMzUuMyAzMS43IDY4IDc2IDY4czc2LTMyLjcgNzYtNjgtMzEuNy02OC03Ni02OGwtMjAgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmwxNiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4cy0yMS41LTQ4LTQ4LTQ4ek0zMzcuMSA2MC4xYy0xMS0xMy44LTMxLjEtMTYuMi00NS01LjJzLTE2LjIgMzEuMS01LjIgNDVDMzEyLjYgMTMyLjIgMzU0LjQgMTUyIDQwMCAxNTJzODcuNC0xOS44IDExMy4xLTUyLjFjMTEtMTMuOCA4LjctMzQtNS4yLTQ1cy0zNC04LjctNDUgNS4yQzQ1MC4zIDc2IDQyNy41IDg4IDQwMCA4OHMtNTAuMy0xMi02Mi45LTI3Ljl6Il0KICAgIH07CiAgICBmYU1vc3F1aXRvTmV0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm1vc3F1aXRvLW5ldCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTJjIiwgIk01NzYgMzUyYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgMTYgMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMCAwIDQ4IDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDAgMCAxNi0uMSAyLjVDNTk4LjYgNTY2LjYgNTg4LjQgNTc2IDU3NiA1NzZzLTIyLjYtOS40LTIzLjktMjEuNWwtLjEtMi41IDAtMTYtNDggMCAwIDE2LS4xIDIuNUM1MDIuNiA1NjYuNiA0OTIuNCA1NzYgNDgwIDU3NnMtMjIuNi05LjQtMjMuOS0yMS41bC0uMS0yLjUgMC0xNi0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC00OC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE2IDAgMC0xNmMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgMTYgNDggMCAwLTE2YzAtMTMuMyAxMC43LTI0IDI0LTI0ek00MjkuOSAxNi4zYzcuNy05LjQgMjEuMy0xMS41IDMxLjQtNC4zIDEwLjEgNy4xIDEzLjEgMjAuOSA3LjQgMzEuN2wtMS4zIDIuMS0yNS45IDM4LjkgMTMuMyA1My40YzIgOC0uMSAxNi4zLTUuMyAyMi4zbC0yLjQgMi40LTQ0LjcgMzguMyAxMzAuNSAxNC41YzQyLjggNC44IDc1LjEgNDAuOSA3NS4xIDgzLjkgMCAzLjktLjQgNy43LS45IDExLjUtNy4zLTMuNS0xNS4zLTUuOC0yMy44LTYuN0w1NzYgMzA0Yy0xOC41IDAtMzUuMyA3LTQ4IDE4LjQtMTEtOS45LTI1LjEtMTYuNS00MC42LTE4LjFMNDgwIDMwNGMtMzAuMyAwLTU2LjEgMTguNy02Ni44IDQ1LjItMTIuNSA1LTIzLjIgMTMuNC0zMS4xIDI0bC0zMC4yLTQwLjEgMCA3NC43YzAgMTcuNy0xNC4zIDMyLTMyIDMyLTE2LjYgMC0zMC4yLTEyLjYtMzEuOC0yOC43bC0uMi0zLjMgMC03NC42LTMyLjMgNDMgMCAzOS44YzAgMy41LS43IDYuOS0yLjEgMTAuMWwtMS42IDMuMS00MCA2NC0xLjQgMmMtNy41IDkuNi0yMSAxMi4xLTMxLjMgNS4zLTEwLjMtNi44LTEzLjctMjAuNS04LjMtMzEuNWwxLjItMi4yIDM2LjItNTggMC00MSAuMy00Yy42LTMuOSAyLjItNy43IDQuNi0xMC45bDM5LjMtNTIuMi02Ni4yIDU5LjVjLTE3IDE1LjMtMzkgMjMuNy02MS45IDIzLjhsLTguMSAwYy00Ni42IDAtODQuNC0zNy44LTg0LjQtODQuNCAwLTQzIDMyLjQtNzkuMiA3NS4xLTgzLjlsMTMwLjUtMTQuNS00NC43LTM4LjMtMi40LTIuNGMtNS4yLTYtNy4zLTE0LjQtNS4zLTIyLjNsMTMuMy01My40LTI1LjktMzguOS0xLjItMi4xYy01LjctMTAuOC0yLjctMjQuNiA3LjQtMzEuNyAxMC4xLTcuMSAyMy43LTUuMSAzMS40IDQuM2wxLjUgMiAzMiA0OCAxLjQgMi4yYzIuOCA1LjMgMy41IDExLjYgMi4xIDE3LjZsLTEyLjMgNDkuMiA1My4zIDQ1LjcgMC0yOC44IC4yLTMuMmMxLjEtMTAuNCA3LjItMTkuNCAxNS44LTI0LjRsMC02MC41IC4zLTMuMmMxLjUtNy4zIDgtMTIuNyAxNS43LTEyLjggNy43IDAgMTQuMiA1LjUgMTUuNyAxMi44bC4zIDMuMiAwIDYwLjVjOC43IDUgMTQuOCAxNCAxNS44IDI0LjRsLjIgMy4yIDAgMjguOSA1My40LTQ1LjctMTIuMy00OS4yYy0xLjUtNS45LS43LTEyLjIgMi4xLTE3LjZsMS40LTIuMiAzMi00OCAxLjUtMnpNNTA0IDQ4OGw0OCAwIDAtNDgtNDggMCAwIDQ4eiJdCiAgICB9OwogICAgZmFQcmVzY3JpcHRpb25Cb3R0bGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicHJlc2NyaXB0aW9uLWJvdHRsZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmNDg1IiwgIk0wIDMyQzAgMTQuMyAxNC4zIDAgMzIgMEwzNTIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDMyIDk2QzE0LjMgOTYgMCA4MS43IDAgNjRMMCAzMnpNMzIgMTQ0bDMyMCAwIDAgMzA0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDk2IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRsNzIgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNzIgMCAwLTQ4IDcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAgMC00OCA3MiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC03MiAwIDAtNjR6Il0KICAgIH07CiAgICBmYVVzZXJzR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2Vycy1nZWFyIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbInVzZXJzLWNvZyJdLCAiZjUwOSIsICJNMzIwIDIyNGExMDQgMTA0IDAgMSAwIDAtMjA4IDEwNCAxMDQgMCAxIDAgMCAyMDh6TTk2IDIzMmE3MiA3MiAwIDEgMCAwLTE0NCA3MiA3MiAwIDEgMCAwIDE0NHpNMCA0MTZsMCAzMmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw4Ni43IDBjLTQuMy05LjgtNi43LTIwLjYtNi43LTMybDAtMTZjMC01My4yIDIwLTEwMS44IDUyLjktMTM4LjYtMTEuNy0zLjUtMjQuMS01LjQtMzYuOS01LjQtNzAuNyAwLTEyOCA1Ny4zLTEyOCAxMjh6TTYxNiAxNjBhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwek0xNjAgNDMybDAgMTZjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTU2LjggMGMtNy4xLTIxLjYtNi4zLTQ0LjQgMTAuNy02NC0xNC0xNi4yLTIwLjUtMzkuNy0xMS40LTYzLjMgNi42LTE3LjEgMTUuOS0zMy4xIDI3LjQtNDcuMyA1LjQtNi42IDExLjYtMTEuNyAxOC4zLTE1LjQtMjIuMS0xMS41LTQ3LjItMTgtNzMuOC0xOC04OC40IDAtMTYwIDcxLjYtMTYwIDE2MHptNDY0LjYtNDQuMWM2LjMtMy42IDkuNS0xMS4xIDYuOC0xOC00LjgtMTIuNC0xMS41LTI0LjEtMTkuOS0zNC40LTQuNi01LjctMTIuNy02LjctMTktMy0yMS44IDEyLjYtNDguNi0yLjgtNDguNi0yOC4xIDAtNy4zLTQuOS0xMy44LTEyLjEtMTQuOS0xMi45LTItMjYuOC0yLTM5LjcgMC03LjIgMS4xLTEyLjEgNy42LTEyLjEgMTQuOSAwIDI1LjItMjYuOCA0MC43LTQ4LjYgMjguMS02LjMtMy42LTE0LjQtMi42LTE5IDMtOC40IDEwLjMtMTUuMSAyMi0xOS45IDM0LjQtMi42IDYuOCAuNSAxNC4zIDYuOCAxNy45IDIxLjkgMTIuNiAyMS45IDQzLjUgMCA1Ni4yLTYuMyAzLjYtOS41IDExLjEtNi44IDE3LjkgNC44IDEyLjQgMTEuNSAyNC4xIDE5LjkgMzQuNCA0LjYgNS43IDEyLjcgNi43IDE5IDMgMjEuOC0xMi42IDQ4LjYgMi45IDQ4LjYgMjguMSAwIDcuMyA0LjkgMTMuOCAxMi4xIDE0LjkgMTIuOSAyIDI2LjggMiAzOS43IDAgNy4yLTEuMSAxMi4xLTcuNiAxMi4xLTE0LjkgMC0yNS4yIDI2LjgtNDAuNyA0OC42LTI4LjEgNi4zIDMuNiAxNC40IDIuNiAxOS0zIDguNC0xMC4zIDE1LjEtMjIgMTkuOS0zNC40IDIuNi02LjgtLjUtMTQuMy02LjgtMTcuOS0yMS45LTEyLjYtMjEuOS00My41IDAtNTYuMnpNNDcyIDQxNmE0MCA0MCAwIDEgMSA4MCAwIDQwIDQwIDAgMSAxIC04MCAweiJdCiAgICB9OwogICAgZmFVc2Vyc0NvZyA9IGZhVXNlcnNHZWFyOwogICAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm9hZC1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU2NSIsICJNMjg4IDMybC03Ni4zIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjUgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OWMzNS4yLTM5LjkgODYuNy02NSAxNDQtNjUgOSAwIDE3LjggLjYgMjYuNSAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjQgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em0wLTEwMGEyMCAyMCAwIDEgMSAwIDQwIDIwIDIwIDAgMSAxIDAtNDB6bTAtMTQwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDgwYzAgOC44LTcuMiAxNi0xNiAxNnMtMTYtNy4yLTE2LTE2bDAtODBjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFQYXVzZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwYXVzZSIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzkyMDhdLCAiZjA0YyIsICJNNDggMzJDMjEuNSAzMiAwIDUzLjUgMCA4MEwwIDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGw2NCAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtMzUyYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyem0yMjQgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAzNTJjMCAyNi41IDIxLjUgNDggNDggNDhsNjQgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTM1MmMwLTI2LjUtMjEuNS00OC00OC00OGwtNjQgMHoiXQogICAgfTsKICAgIGZhU3RhZmZTbmFrZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzdGFmZi1zbmFrZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJyb2QtYXNjbGVwaXVzIiwgInJvZC1zbmFrZSIsICJzdGFmZi1hZXNjdWxhcGl1cyJdLCAiZTU3OSIsICJNMTkyIDMybDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDY0IDBjNTMgMCA5NiA0MyA5NiA5NnMtNDMgOTYtOTYgOTZsLTE2IDAgMC02NCAxNiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC02NCAwIDAgMTkyIDMyIDBjNTMgMCA5NiA0MyA5NiA5NiAwIDQ3LjYtMzQuNiA4Ny4xLTgwIDk0LjdsMC02N2M5LjYtNS41IDE2LTE1LjkgMTYtMjcuNyAwLTE3LjctMTQuMy0zMi0zMi0zMmwtMzIgMCAwIDE2MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTMyLTMyIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMzIgMCAwLTY0LTMyIDBjLTUzIDAtOTYtNDMtOTYtOTYgMC00Ny42IDM0LjYtODcuMSA4MC05NC43bDAgNjdjLTkuNiA1LjUtMTYgMTUuOS0xNiAyNy43IDAgMTcuNyAxNC4zIDMyIDMyIDMybDMyIDAgMC0xOTItNzIuNiAwYy0xMS4xIDE5LjEtMzEuNyAzMi01NS40IDMybC0xNiAwQzIxLjUgMTI4IDAgMTA2LjUgMCA4MFMyMS41IDMyIDQ4IDMybDE0NCAweiJdCiAgICB9OwogICAgZmFSb2RBc2NsZXBpdXMgPSBmYVN0YWZmU25ha2U7CiAgICBmYVJvZFNuYWtlID0gZmFTdGFmZlNuYWtlOwogICAgZmFTdGFmZkFlc2N1bGFwaXVzID0gZmFTdGFmZlNuYWtlOwogICAgZmFQaWdneUJhbmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGlnZ3ktYmFuayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNGQzIiwgIk0yODgtMzJhOTYgOTYgMCAxIDEgMCAxOTIgOTYgOTYgMCAxIDEgMC0xOTJ6TTQ4IDMwNGMwLTcwLjEgNDctMTMxLjQgMTE3LjEtMTY0LjkgMjUuMyA0MS4zIDcwLjkgNjguOSAxMjIuOSA2OC45IDU1LjcgMCAxMDQuMS0zMS43IDEyOC03OCAxNS44LTExLjMgMzUuMS0xOCA1Ni0xOGwxOS41IDBjMTAuNCAwIDE4IDkuOCAxNS41IDE5LjlsLTE3LjEgNjguM2M5LjkgMTIuNCAxOC4yIDI1LjcgMjQuNCAzOS44bDIxLjcgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDExMmMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNDAgMGMtMTYuNSAyMi0zOC41IDM5LjYtNjQgNTAuN2wwIDI5LjNjMCAxNy43LTE0LjMgMzItMzIgMzJsLTMzIDBjLTE0LjMgMC0yNi44LTkuNS0zMC44LTIzLjJsLTcuMS0yNC44LTgyLjMgMC03LjEgMjQuOEMyMzUuOCA1MDIuNSAyMjMuMyA1MTIgMjA5IDUxMmwtMzMgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0yOS4zQzg3LjUgNDI2IDQ4IDM2OS42IDQ4IDMwNHptMzc2IDE2YTI0IDI0IDAgMSAwIDAtNDggMjQgMjQgMCAxIDAgMCA0OHoiXQogICAgfTsKICAgIGZhTW9udW1lbnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9udW1lbnQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZjVhNiIsICJNMjA5LTMzYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMEw5NSA0N2MtNC4xIDQuMS02LjUgOS40LTcgMTUuMUw1OC40IDQ0OCA0OCA0NDhjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTEwLjQgMC0yOS43LTM4NS44Yy0uNC01LjctMi45LTExLjEtNy0xNS4xTDIwOS0zM3pNMTI4IDI5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGw4MCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC04MCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQW5nbGVzUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYW5nbGVzLXJpZ2h0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTg3LCAiYW5nbGUtZG91YmxlLXJpZ2h0Il0sICJmMTAxIiwgIk00MzkuMSAyNzguNmMxMi41LTEyLjUgMTIuNS0zMi44IDAtNDUuM2wtMTYwLTE2MGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNMMzcxLjIgMjU2IDIzMy45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjB6bS0zNTIgMTYwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNsLTE2MC0xNjBjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zTDE3OS4yIDI1NiA0MS45IDM5My40Yy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZVJpZ2h0ID0gZmFBbmdsZXNSaWdodDsKICAgIGZhRGVza3RvcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkZXNrdG9wIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NDIxLCA2MTcwNCwgImRlc2t0b3AtYWx0Il0sICJmMzkwIiwgIk02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgMzUyYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE0NCAwLTE2IDQ4LTcyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMjcyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTcyIDAtMTYtNDggMTQ0IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0yNTZjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6TTk2IDk2bDMyMCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMyTDk2IDMyMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNjBjMC0xNy43IDE0LjMtMzIgMzItMzJ6Il0KICAgIH07CiAgICBmYURlc2t0b3BBbHQgPSBmYURlc2t0b3A7CiAgICBmYVBsYW5lQ2lyY2xlWG1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGxhbmUtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NTciLCAiTTIzMiAyNGMwLTMwLjkgMjUuMS01NiA1Ni01NnM1NiAyNS4xIDU2IDU2bDAgMTI3LjMgNzggNzEuNWMtNjkuMyAyOS0xMTggOTcuNC0xMTggMTc3LjIgMCA0OS4zIDE4LjYgOTQuMyA0OS4xIDEyOC4zTDI4OCA1MTIgMTc5LjkgNTM5Yy0xMC4xIDIuNS0xOS45LTUuMS0xOS45LTE1LjVsMC0xOS44YzAtNC45IDIuMi05LjUgNi0xMi41bDY2LTUyLjggMC05OS43LTE2Mi45IDU0LjNDNTguNyAzOTYuNCA0OCAzODguNyA0OCAzNzcuOGwwLTQzLjdjMC05IDMuOC0xNy41IDEwLjQtMjMuNkwyMzIgMTUxLjMgMjMyIDI0ek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptNTkuMyAxMDcuM2M2LjItNi4yIDYuMi0xNi40IDAtMjIuNnMtMTYuNC02LjItMjIuNiAwbC0zNi43IDM2LjctMzYuNy0zNi43Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDM2LjcgMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItNi4yIDE2LjQgMCAyMi42czE2LjQgNi4yIDIyLjYgMGwzNi43LTM2LjcgMzYuNyAzNi43YzYuMiA2LjIgMTYuNCA2LjIgMjIuNiAwczYuMi0xNi40IDAtMjIuNmwtMzYuNy0zNi43IDM2LjctMzYuN3oiXQogICAgfTsKICAgIGZhUmV0d2VldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJyZXR3ZWV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImYwNzkiLCAiTTExOC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC02NCA2NGMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDMyIDAgMCAyMjRjMCA1MyA0MyA5NiA5NiA5NmwxMjggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMTI4IDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtMjI0IDMyIDBjMTIuOSAwIDI0LjYtNy44IDI5LjYtMTkuOHMyLjItMjUuNy02LjktMzQuOWwtNjQtNjR6TTQ1Ny40IDQ3MC42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDY0LTY0YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzU1Ni45IDM1MiA1NDQgMzUybC0zMiAwIDAtMjI0YzAtNTMtNDMtOTYtOTYtOTZMMjg4IDMyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMjI0LTMyIDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDY0IDY0eiJdCiAgICB9OwogICAgZmFVc2VyR2VhciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1c2VyLWdlYXIiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsidXNlci1jb2ciXSwgImY0ZmUiLCAiTTI1Ni41IDhhMTIwIDEyMCAwIDEgMSAwIDI0MCAxMjAgMTIwIDAgMSAxIDAtMjQwek0yMjYuNyAzMDRsNTkuNCAwIDEuNSAwYy0xMi45IDI2LjgtNy44IDU4LjIgMTEuNSA3OS41LTIwLjIgMjIuMy0yNC44IDU1LjgtOS40IDgzLjRsMjIuNSA0MC40Yy45IDEuNiAxLjkgMy4yIDIuOSA0LjdsLTIzNyAwYy0xNi40IDAtMjkuNy0xMy4zLTI5LjctMjkuNyAwLTk4LjUgNzkuOC0xNzguMyAxNzguMy0xNzguM3ptMjA1LjktNTYuNGMwLTEzLjMgMTAuNy0yNCAyNC0yNGw0OCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0bDAgNi4xYzAgMTguOSAyNC4xIDMyLjggNDAuNSAyMy40bDUtMi45YzExLjYtNi43IDI2LjUtMi42IDMzIDkuMWwyMi40IDQwLjJjNi4yIDExLjIgMi42IDI1LjItOC4yIDMybC00LjcgMi45Yy0xNi4yIDEwLjEtMTYuMiAzOS45IDAgNTAuMWw0LjYgMi45YzEwLjggNi44IDE0LjUgMjAuOCA4LjMgMzJMNjA3IDQ4My44Yy02LjUgMTEuNy0yMS40IDE1LjktMzMgOS4xbC00LjktMi45Yy0xNi40LTkuNS00MC41IDQuNS00MC41IDIzLjRsMCA2LjFjMCAxMy4zLTEwLjcgMjQtMjQgMjRsLTQ4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0bDAtNS45YzAtMTktMjQuMi0zMy00MC43LTIzLjVsLTQuOCAyLjhjLTExLjYgNi43LTI2LjQgMi42LTMzLTkuMWwtMjIuNi00MC40Yy02LjItMTEuMi0yLjYtMjUuMyA4LjMtMzIuMWw0LjQtMi43YzE2LjMtMTAuMSAxNi4zLTQwLjEgMC01MC4ybC00LjUtMi44Yy0xMC45LTYuOC0xNC41LTIwLjktOC4zLTMyLjFsMjIuNS00MC4zYzYuNS0xMS43IDIxLjQtMTUuOCAzMi45LTkuMWw0LjggMi44YzE2LjUgOS41IDQwLjctNC41IDQwLjctMjMuNWwwLTUuOXptOTkuOSAxMzYuMmE1MiA1MiAwIDEgMCAtMTA0IDAgNTIgNTIgMCAxIDAgMTA0IDB6Il0KICAgIH07CiAgICBmYVVzZXJDb2cgPSBmYVVzZXJHZWFyOwogICAgZmFCb3JkZXJBbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLWFsbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmODRjIiwgIk0zODQgOTZsMCAxMjgtMTI4IDAgMC0xMjggMTI4IDB6bTAgMTkybDAgMTI4LTEyOCAwIDAtMTI4IDEyOCAwek0xOTIgMjI0bC0xMjggMCAwLTEyOCAxMjggMCAwIDEyOHpNNjQgMjg4bDEyOCAwIDAgMTI4LTEyOCAwIDAtMTI4ek02NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDE2YzAgMzUuMyAyOC43IDY0IDY0IDY0bDMyMCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzIwYzAtMzUuMy0yOC43LTY0LTY0LTY0TDY0IDMyeiJdCiAgICB9OwogICAgZmFDb2lucyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb2lucyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTFlIiwgIk0xMjggOTZsMC0xNmMwLTQ0LjIgODYtODAgMTkyLTgwUzUxMiAzNS44IDUxMiA4MGwwIDE2YzAgMzAuNi00MS4zIDU3LjItMTAyIDcwLjctMi40LTIuOC00LjktNS41LTcuNC04LTE1LjUtMTUuMy0zNS41LTI2LjktNTYuNC0zNS41LTQxLjktMTcuNS05Ni41LTI3LjEtMTU0LjItMjcuMS0yMS45IDAtNDMuMyAxLjQtNjMuOCA0LjEtLjItMS4zLS4yLTIuNy0uMi00LjF6TTQzMiAzNTNsMC00Ni4yYzE1LjEtMy45IDI5LjMtOC41IDQyLjItMTMuOSAxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1em0wLTk2bDAtMzNjMC00LjUtLjQtOC44LTEtMTMgMTUuNS0zLjkgMzAtOC42IDQzLjItMTQuMnMyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNGMwIDI2LjgtMzEuNSA1MC41LTgwIDY1ek0wIDI0MGwwLTE2YzAtNDQuMiA4Ni04MCAxOTItODBzMTkyIDM1LjggMTkyIDgwbDAgMTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDI4NC4yIDAgMjQwem0zODQgOTZjMCA0NC4yLTg2IDgwLTE5MiA4MFMwIDM4MC4yIDAgMzM2bDAtMTUuNGMxMS42IDguMSAyNC41IDE0LjcgMzcuOCAyMC4zIDQxLjkgMTcuNSA5Ni41IDI3LjEgMTU0LjIgMjcuMXMxMTIuMy05LjcgMTU0LjItMjcuMWMxMy4yLTUuNSAyNi4xLTEyLjIgMzcuOC0yMC4zbDAgMTUuNHptMCA4MC42bDAgMTUuNGMwIDQ0LjItODYgODAtMTkyIDgwUzAgNDc2LjIgMCA0MzJsMC0xNS40YzExLjYgOC4xIDI0LjUgMTQuNyAzNy44IDIwLjMgNDEuOSAxNy41IDk2LjUgMjcuMSAxNTQuMiAyNy4xczExMi4zLTkuNyAxNTQuMi0yNy4xYzEzLjItNS41IDI2LjEtMTIuMiAzNy44LTIwLjN6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UiLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFs5ODk0XSwgImYyMjkiLCAiTTQxNi0zMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MC43IDAtNTguNyA1OC43LTE3LjQtMTcuNGMtMTIuNS0xMi41LTMyLjgtMTIuNS00NS4zIDBzLTEyLjUgMzIuOCAwIDQ1LjNsMTcuNCAxNy40LTIzIDIzYy0yOC40LTE5LjUtNjIuNy0zMS05OS44LTMxLTk3LjIgMC0xNzYgNzguOC0xNzYgMTc2czc4LjggMTc2IDE3NiAxNzYgMTc2LTc4LjggMTc2LTE3NmMwLTM3LTExLjQtNzEuNC0zMS05OS44bDIzLTIzIDE3LjQgMTcuNGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDQ1My4zIDEzNiA1MTIgNzcuMyA1MTIgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJMNTc2IDBjMC0xNy43LTE0LjMtMzItMzItMzJMNDE2LTMyek0xMjggMzA0YTExMiAxMTIgMCAxIDEgMjI0IDAgMTEyIDExMiAwIDEgMSAtMjI0IDB6Il0KICAgIH07CiAgICBmYUhhbmRzaGFrZUFuZ2xlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhhbmRzaGFrZS1hbmdsZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kcy1oZWxwaW5nIl0sICJmNGM0IiwgIk0yNjguOSA1My4yTDE1Mi4zIDE4Mi44Yy00LjYgNS4xLTQuNCAxMyAuNSAxNy45IDMwLjUgMzAuNSA4MCAzMC41IDExMC41IDBsMzEuOC0zMS44YzQuMi00LjIgOS41LTYuNSAxNC45LTYuOSA2LjgtLjYgMTMuOCAxLjcgMTkgNi45TDUwNS42IDM0NCA1NzYgMjg4IDU3NiAwIDQ2NCA2NCA0NDAuMiA0OC4xQzQyNC40IDM3LjYgNDA1LjkgMzIgMzg2LjkgMzJsLTcwLjQgMGMtMS4xIDAtMi4zIDAtMy40IC4xLTE2LjkgLjktMzIuOCA4LjUtNDQuMiAyMS4xek0xMTYuNiAxNTAuN0wyMjMuNCAzMiAxODMuOCAzMmMtMjUuNSAwLTQ5LjkgMTAuMS02Ny45IDI4LjFMMCAxOTIgMCA1NDQgMTQ0IDQwOCAxNTYuNCA0MTguM2MyMyAxOS4yIDUyIDI5LjcgODEuOSAyOS43bDE1LjcgMC03LTdjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGw0MSA0MSA5IDBjMTkuMSAwIDM3LjgtNC4zIDU0LjgtMTIuM0wzNTkgNDA5Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsMzIgMzIgMTcuNS0xNy41YzguOS04LjkgMTEuNS0yMS44IDcuNi0zMy4xbC0xMzcuOS0xMzYuOC0xNC45IDE0LjljLTQ5LjMgNDkuMy0xMjkuMSA0OS4zLTE3OC40IDAtMjMtMjMtMjMuOS01OS45LTIuMi04NHoiXQogICAgfTsKICAgIGZhSGFuZHNIZWxwaW5nID0gZmFIYW5kc2hha2VBbmdsZTsKICAgIGZhQXJyb3dEb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LWRvd24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4NTk1XSwgImYwNjMiLCAiTTE2OS40IDUwMi42YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBMMjI0IDQwMi43IDIyNCAzMmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDM3MC43LTEwNS40LTEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYweiJdCiAgICB9OwogICAgZmFMb2NhdGlvbkRvdCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1kb3QiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsibWFwLW1hcmtlci1hbHQiXSwgImYzYzUiLCAiTTAgMTg4LjZDMCA4NC40IDg2IDAgMTkyIDBTMzg0IDg0LjQgMzg0IDE4OC42YzAgMTE5LjMtMTIwLjIgMjYyLjMtMTcwLjQgMzE2LjgtMTEuOCAxMi44LTMxLjUgMTIuOC00My4zIDAtNTAuMi01NC41LTE3MC40LTE5Ny41LTE3MC40LTMxNi44ek0xOTIgMjU2YTY0IDY0IDAgMSAwIDAtMTI4IDY0IDY0IDAgMSAwIDAgMTI4eiJdCiAgICB9OwogICAgZmFNYXBNYXJrZXJBbHQgPSBmYUxvY2F0aW9uRG90OwogICAgZmFQbHVnQ2lyY2xlRXhjbGFtYXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGx1Zy1jaXJjbGUtZXhjbGFtYXRpb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU1ZCIsICJNMTkyLTMyYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgOTYgMTI4IDAgMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgOTYgNjQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwwIDQ4LjdjLTk4LjYgOC4xLTE3NiA5MC43LTE3NiAxOTEuMyAwIDI3LjMgNS43IDUzLjMgMTYgNzYuOWwwIDMuMWMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTY2LjdDMTY1LjIgMzk4LjEgOTYgMzE5LjEgOTYgMjI0bDAtNjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyUzc4LjMgOTYgOTYgOTZsNjQgMCAwLTk2YzAtMTcuNyAxNC4zLTMyIDMyLTMyek00OTYgMjU2YTE0NCAxNDQgMCAxIDEgMCAyODggMTQ0IDE0NCAwIDEgMSAwLTI4OHptMCAyMjhhMjAgMjAgMCAxIDAgMC00MCAyMCAyMCAwIDEgMCAwIDQwem0wLTE4MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgODBjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTgwYzAtOC44LTcuMi0xNi0xNi0xNnoiXQogICAgfTsKICAgIGZhQ29va2llQml0ZSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjb29raWUtYml0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmNTY0IiwgIk0yNTcuNSAyNy42Yy0uOC01LjQtNC45LTkuOC0xMC4zLTEwLjYtMjIuMS0zLjEtNDQuNiAuOS02NC40IDExLjRsLTc0IDM5LjVDODkuMSA3OC40IDczLjIgOTQuOSA2My40IDExNUwyNi43IDE5MC42Yy05LjggMjAuMS0xMyA0Mi45LTkuMSA2NC45bDE0LjUgODIuOGMzLjkgMjIuMSAxNC42IDQyLjMgMzAuNyA1Ny45bDYwLjMgNTguNGMxNi4xIDE1LjYgMzYuNiAyNS42IDU4LjcgMjguN2w4MyAxMS43YzIyLjEgMy4xIDQ0LjYtLjkgNjQuNC0xMS40bDc0LTM5LjVjMTkuNy0xMC41IDM1LjYtMjcgNDUuNC00Ny4ybDM2LjctNzUuNWM5LjgtMjAuMSAxMy00Mi45IDkuMS02NC45LS45LTUuMy01LjMtOS4zLTEwLjYtMTAuMS01MS41LTguMi05Mi44LTQ3LjEtMTA0LjUtOTcuNC0xLjgtNy42LTgtMTMuNC0xNS43LTE0LjYtNTQuNi04LjctOTcuNy01Mi0xMDYuMi0xMDYuOHpNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU2NyZXdkcml2ZXJXcmVuY2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2NyZXdkcml2ZXItd3JlbmNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInRvb2xzIl0sICJmN2Q5IiwgIk03MC44LTYuN2M1LjQtNS40IDEzLjgtNi4yIDIwLjItMkwyMDkuOSA3MC41YzguOSA1LjkgMTQuMiAxNS45IDE0LjIgMjYuNmwwIDQ5LjYgOTAuOCA5MC44YzMzLjMtMTUgNzMuOS04LjkgMTAxLjIgMTguNUw1NDIuMiAzODIuMWMxOC43IDE4LjcgMTguNyA0OS4xIDAgNjcuOWwtNjAuMSA2MC4xYy0xOC43IDE4LjctNDkuMSAxOC43LTY3LjkgMEwyODguMSAzODRjLTI3LjQtMjcuNC0zMy41LTY3LjktMTguNS0xMDEuMmwtOTAuOC05MC44LTQ5LjYgMGMtMTAuNyAwLTIwLjctNS4zLTI2LjYtMTQuMkwyMy40IDU4LjljLTQuMi02LjMtMy40LTE0LjggMi0yMC4yTDcwLjgtNi43em0xNDUgMzAzLjVjLTYuMyAzNi45IDIuMyA3NS45IDI2LjIgMTA3LjJsLTk0LjkgOTVjLTI4LjEgMjguMS03My43IDI4LjEtMTAxLjggMHMtMjguMS03My43IDAtMTAxLjhsMTM1LjQtMTM1LjUgMzUuMiAzNS4xek0zODQuMSAwYzIwLjEgMCAzOS40IDMuNyA1Ny4xIDEwLjUgMTAgMy44IDExLjggMTYuNSA0LjMgMjQuMUwzODguOCA5MS4zYy0zIDMtNC43IDcuMS00LjcgMTEuM2wwIDQxLjRjMCA4LjggNy4yIDE2IDE2IDE2bDQxLjQgMGM0LjIgMCA4LjMtMS43IDExLjMtNC43bDU2LjctNTYuN2M3LjYtNy41IDIwLjMtNS43IDI0LjEgNC4zIDYuOCAxNy43IDEwLjUgMzcgMTAuNSA1Ny4xIDAgNDMuMi0xNy4yIDgyLjMtNDUgMTExLjFsLTQ5LjEtNDkuMWMtMzMuMS0zMy03OC41LTQ1LjctMTIxLjEtMzguNGwtNTYuOC01Ni44IDAtMjkuNy0uMi01Yy0uOC0xMi40LTQuNC0yNC4zLTEwLjUtMzQuOSAyOS40LTM1IDczLjQtNTcuMiAxMjIuNy01Ny4zeiJdCiAgICB9OwogICAgZmFUb29scyA9IGZhU2NyZXdkcml2ZXJXcmVuY2g7CiAgICBmYUluZGVudCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJpbmRlbnQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjAzYyIsICJNMCA2NEMwIDQ2LjMgMTQuMyAzMiAzMiAzMmwzODQgMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMkwzMiA5NkMxNC4zIDk2IDAgODEuNyAwIDY0ek0xOTIgMTkyYzAtMTcuNyAxNC4zLTMyIDMyLTMybDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTMyIDk2bDE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xOTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMnpNMCA0NDhjMC0xNy43IDE0LjMtMzIgMzItMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNDgwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNMTI3LjggMjY4LjZMMjUuOCAzNDcuOUMxNS4zIDM1Ni4xIDAgMzQ4LjYgMCAzMzUuM0wwIDE3Ni43YzAtMTMuMyAxNS4zLTIwLjggMjUuOC0xMi42bDEwMS45IDc5LjNjOC4yIDYuNCA4LjIgMTguOSAwIDI1LjN6Il0KICAgIH07CiAgICBmYUJhcnMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYmFycyIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJuYXZpY29uIl0sICJmMGM5IiwgIk0wIDk2QzAgNzguMyAxNC4zIDY0IDMyIDY0bDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDEyOEMxNC4zIDEyOCAwIDExMy43IDAgOTZ6TTAgMjU2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyTDMyIDI4OGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTQ0OCA0MTZjMCAxNy43LTE0LjMgMzItMzIgMzJMMzIgNDQ4Yy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDM4NCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyeiJdCiAgICB9OwogICAgZmFOYXZpY29uID0gZmFCYXJzOwogICAgZmFIYW5kc1ByYXlpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtcHJheWluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWyJwcmF5aW5nLWhhbmRzIl0sICJmNjg0IiwgIk0yMjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0bDAtMTEyLjYgODguMi0xMTkuN2MxMy4xLTE3LjggOS4zLTQyLjgtOC41LTU1LjlzLTQyLjgtOS4zLTU1LjkgOC41TDEwNi41IDE0Mi45Qzg5LjMgMTY2LjIgODAgMTk0LjUgODAgMjIzLjZsMCAxMTAuNy01OC4xIDE5LjRDOC44IDM1OCAwIDM3MC4yIDAgMzg0bDAgOTZjMCAxMCA0LjcgMTkuNSAxMi43IDI1LjVzMTguNCA4IDI4LjEgNS4ybDE1NC40LTQ0LjFjNTUtMTUuNyA5Mi44LTY1LjkgOTIuOC0xMjMuMUwyODggMjI0YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNzJ6bTE5MiAwbDAtNzJjMC0xNy43LTE0LjMtMzItMzItMzJzLTMyIDE0LjMtMzIgMzJsMCAxMTkuNmMwIDU3LjIgMzcuOSAxMDcuNCA5Mi44IDEyMy4xbDE1NC40IDQ0LjFjOS43IDIuOCAyMCAuOCAyOC4xLTUuMlM2NDAgNDkwIDY0MCA0ODBsMC05NmMwLTEzLjgtOC44LTI2LTIxLjktMzAuNGwtNTguMS0xOS40IDAtMTEwLjdjMC0yOS05LjMtNTcuMy0yNi41LTgwLjdMNDQwLjIgMTYuM0M0MjcuMS0xLjUgNDAyLjEtNS4zIDM4NC4zIDcuOHMtMjEuNiAzOC4xLTguNSA1NS45TDQ2NCAxODMuNCA0NjQgMjk2YzAgMTMuMy0xMC43IDI0LTI0IDI0cy0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFQcmF5aW5nSGFuZHMgPSBmYUhhbmRzUHJheWluZzsKICAgIGZhVmlydXNlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ2aXJ1c2VzIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImUwNzYiLCAiTTE5MiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyIDAgMzAuNSAzNi45IDQ1LjggNTguNSAyNC4yIDEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTIxLjYgMjEuNi02LjMgNTguNSAyNC4yIDU4LjUgMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJjLTMwLjUgMC00NS44IDM2LjktMjQuMiA1OC41IDEyLjUgMTIuNSAxMi41IDMyLjggMCA0NS4zcy0zMi44IDEyLjUtNDUuMyAwYy0yMS42LTIxLjYtNTguNS02LjMtNTguNSAyNC4yIDAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMyYzAtMzAuNS0zNi45LTQ1LjgtNTguNS0yNC4yLTEyLjUgMTIuNS0zMi44IDEyLjUtNDUuMyAwcy0xMi41LTMyLjggMC00NS4zQzc3LjggMjYwLjkgNjIuNSAyMjQgMzIgMjI0IDE0LjMgMjI0IDAgMjA5LjcgMCAxOTJzMTQuMy0zMiAzMi0zMmMzMC41IDAgNDUuOC0zNi45IDI0LjItNTguNS0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwQzEyMy4xIDc3LjggMTYwIDYyLjUgMTYwIDMyIDE2MCAxNC4zIDE3NC4zIDAgMTkyIDB6TTE0NCAxNzZhMzIgMzIgMCAxIDAgMC02NCAzMiAzMiAwIDEgMCAwIDY0em0xMjggNjRhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHptMjQ4IDQwYzAgMjIuOSAyNy43IDM0LjQgNDMuOSAxOC4yIDkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOWMtMTYuMiAxNi4yLTQuNyA0My45IDE4LjIgNDMuOSAxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGMtMjIuOSAwLTM0LjQgMjcuNy0xOC4yIDQzLjkgOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMGMtMTYuMi0xNi4yLTQzLjktNC43LTQzLjkgMTguMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTIyLjktMjcuNy0zNC40LTQzLjktMTguMi05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45YzE2LjItMTYuMiA0LjctNDMuOS0xOC4yLTQzLjktMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGMyMi45IDAgMzQuNC0yNy43IDE4LjItNDMuOS05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBjMTYuMiAxNi4yIDQzLjkgNC43IDQzLjktMTguMiAwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0ek01MDQgMzg0YTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYVNjaG9vbEZsYWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2Nob29sLWZsYWciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTU2ZSIsICJNMjU2LThjMC0xMy4zIDEwLjctMjQgMjQtMjRsMTEyIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRsMCA0OGMwIDEzLjMtMTAuNyAyNC0yNCAyNGwtNzIgMCAwIDE5LjIgMTI4IDc2LjggNjQgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDIyNGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA1MTJjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMjI0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDY0IDAgMTI4LTc2LjggMC05MS4yek0yNDAgMzg0bDAgODAgOTYgMCAwLTgwYzAtMjYuNS0yMS41LTQ4LTQ4LTQ4cy00OCAyMS41LTQ4IDQ4ek0xMTIgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2ek00OTYgNDE2YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0tMjI0IDBhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2eiJdCiAgICB9OwogICAgZmFUcmFkZW1hcmsgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidHJhZGVtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbODQ4Ml0sICJmMjVjIiwgIk0zNDYuNiAxMTAuMmMtNy44LTExLjctMjIuNC0xNy0zNS45LTEyLjlTMjg4IDExMy45IDI4OCAxMjhsMCAyNTZjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTE1MC4zIDY5LjQgMTA0LjFjNS45IDguOSAxNS45IDE0LjIgMjYuNiAxNC4yczIwLjctNS4zIDI2LjYtMTQuMkw1NDQgMjMzLjcgNTQ0IDM4NGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjU2YzAtMTQuMS05LjItMjYuNS0yMi43LTMwLjZzLTI4LjEgMS4xLTM1LjkgMTIuOUw0NDggMjYyLjMgMzQ2LjYgMTEwLjJ6TTMyIDk2QzE0LjMgOTYgMCAxMTAuMyAwIDEyOHMxNC4zIDMyIDMyIDMybDY0IDAgMCAyMjRjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTIyNCA2NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDk2eiJdCiAgICB9OwogICAgZmFGaXJlQnVybmVyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZpcmUtYnVybmVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImU0ZjEiLCAiTTI4MS43IDQ4LjNMMjk0IDM0LjVjNS40LTYuMSAxMy4zLTguOCAyMC45LTguOSA3LjIgMCAxNC4zIDIuNiAxOS45IDcuOCAxOS43IDE4LjMgMzkuOCA0My4yIDU1IDcwLjYgMTUuMSAyNy4yIDI2LjIgNTguMSAyNi4yIDg4LjEgMCA4OC43LTcxLjMgMTU5LjgtMTYwIDE1OS44LTg5LjYgMC0xNjAtNzEuMy0xNjAtMTU5LjggMC0zNy4zIDE2LTczLjQgMzYuOC0xMDQuNSAyMC45LTMxLjMgNDcuNS01OSA3MC45LTgwLjIgNS43LTUuMiAxMy4xLTcuNyAyMC4zLTcuNXMxMy40IDMuMiAxOC44IDcuNWMxNC40IDExLjQgMzguOSA0MC43IDM4LjkgNDAuN3pNMzIwIDI0MC4yYzAtMzYuNS0zNy03My01NC44LTg4LjQtNS40LTQuNy0xMy4xLTQuNy0xOC41IDAtMTcuNyAxNS40LTU0LjggNTEuOS01NC44IDg4LjQgMCAzNS4zIDI4LjcgNjQgNjQgNjRzNjQtMjguNyA2NC02NHpNOTIuOCAzMjBjMzcuNyA0OC4zIDk2LjEgODAgMTYzLjIgODAgNjYuNSAwIDEyNS4xLTMxLjcgMTYzLTgwbDQ1IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA2NGMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtNjRjMC0yNi41IDIxLjUtNDggNDgtNDhsNDQuOCAwek00NTYgNDAwYTI0IDI0IDAgMSAwIC00OCAwIDI0IDI0IDAgMSAwIDQ4IDB6Il0KICAgIH07CiAgICBmYUZhY2VTbWlsZUJlYW0yID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhY2Utc21pbGUtYmVhbSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODUyMiwgInNtaWxlLWJlYW0iXSwgImY1YjgiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjUuNCAzMjEuOWMyMC40IDI4IDUzLjQgNDYuMSA5MC42IDQ2LjFzNzAuMi0xOC4xIDkwLjYtNDYuMWM3LjgtMTAuNyAyMi44LTEzLjEgMzMuNS01LjNzMTMuMSAyMi44IDUuMyAzMy41QzM1Ni4zIDM5MCAzMDkuMiA0MTYgMjU2IDQxNnMtMTAwLjMtMjYtMTI5LjQtNjUuOWMtNy44LTEwLjctNS40LTI1LjcgNS4zLTMzLjVzMjUuNy01LjQgMzMuNSA1LjN6TTE3NiAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMzcuNiAzMC40LTY4IDY4LTY4czY4IDMwLjQgNjggNjhsMCA4YzAgMTEtOSAyMC0yMCAyMHMtMjAtOS0yMC0yMGwwLThjMC0xNS41LTEyLjUtMjgtMjgtMjh6bTEzMiAyOGwwIDhjMCAxMS05IDIwLTIwIDIwcy0yMC05LTIwLTIwbDAtOGMwLTM3LjYgMzAuNC02OCA2OC02OHM2OCAzMC40IDY4IDY4bDAgOGMwIDExLTkgMjAtMjAgMjBzLTIwLTktMjAtMjBsMC04YzAtMTUuNS0xMi41LTI4LTI4LTI4cy0yOCAxMi41LTI4IDI4eiJdCiAgICB9OwogICAgZmFTbWlsZUJlYW0yID0gZmFGYWNlU21pbGVCZWFtMjsKICAgIGZhVGVudEFycm93TGVmdFJpZ2h0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctbGVmdC1yaWdodCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlNTdmIiwgIk0tLjUgMTEzYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw3Mi03MmM5LjQtOS40IDI0LjYtOS40IDMzLjkgMHM5LjQgMjQuNiAwIDMzLjlsLTMxIDMxIDMxMC4xIDAgNTQuMSAwLTMxLTMxYy05LjQtOS40LTkuNC0yNC42IDAtMzMuOXMyNC42LTkuNCAzMy45IDBsNzIgNzJjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTcyIDcyYy05LjQgOS40LTI0LjYgOS40LTMzLjkgMHMtOS40LTI0LjYgMC0zMy45bDMxLTMxLTEwMi4xIDAtLjEgMC0yNjIgMCAzMSAzMWM5LjQgOS40IDkuNCAyNC42IDAgMzMuOXMtMjQuNiA5LjQtMzMuOSAwbC03Mi03MnpNMzcuMSA0NzZMNjAuMyAyOTIuNmMxLjItOS43IDYuOC0xOC4zIDE1LjEtMjMuM0wyMzguOCAxNzBjMTAuMi02LjIgMjIuOS02LjIgMzMuMS0uMWwxNjUuNSA5OS40YzguNCA1IDE0IDEzLjcgMTUuMyAyMy40TDQ3NS45IDQ3NmMyLjQgMTkuMS0xMi41IDM2LTMxLjcgMzZsLTcxLjkgMGMtMTIuMSAwLTIzLjItNi44LTI4LjYtMTcuN0wyNzUuNCAzNTcuOWMtMS44LTMuNi01LjUtNS45LTkuNS01LjktNS45IDAtMTAuNiA0LjctMTAuNiAxMC42bDAgMTE3LjRjMCAxNy43LTE0LjMgMzItMzIgMzJMNjguOCA1MTJjLTE5LjMgMC0zNC4yLTE2LjktMzEuNy0zNnoiXQogICAgfTsKICAgIGZhUm91dGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicm91dGUiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjRkNyIsICJNNTEyIDk2YzAgNTAuMi01OS4xIDEyNS4xLTg0LjYgMTU1LTMuOCA0LjQtOS40IDYuMS0xNC41IDVMMzIwIDI1NmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw5NiAwYzUzIDAgOTYgNDMgOTYgOTZzLTQzIDk2LTk2IDk2bC0yNzYuNCAwYzguNy05LjkgMTkuMy0yMi42IDMwLTM2LjggNi4zLTguNCAxMi44LTE3LjYgMTktMjcuMkw0MTYgNDQ4YzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC05NiAwYy01MyAwLTk2LTQzLTk2LTk2czQzLTk2IDk2LTk2bDM5LjggMGMtMjEtMzEuNS0zOS44LTY3LjctMzkuOC05NiAwLTUzIDQzLTk2IDk2LTk2czk2IDQzIDk2IDk2ek0xMTcuMSA0ODkuMWMtMy44IDQuMy03LjIgOC4xLTEwLjEgMTEuM2wtMS44IDItLjItLjJjLTYgNC42LTE0LjYgNC0yMC0xLjgtMjUuMi0yNy40LTg1LTk3LjktODUtMTQ4LjQgMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmMwIDMwLTIxLjEgNjctNDMuNSA5Ny45LTEwLjcgMTQuNy0yMS43IDI4LTMwLjggMzguNWwtLjYgLjd6TTEyOCAzNTJhMzIgMzIgMCAxIDAgLTY0IDAgMzIgMzIgMCAxIDAgNjQgMHpNNDE2IDEyOGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUFuZ2xlc1VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy11cCIsCiAgICAgIGljb246IFszODQsIDUxMiwgWyJhbmdsZS1kb3VibGUtdXAiXSwgImYxMDIiLCAiTTIxNC42IDQxLjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM3MzMi44IDEyLjUgNDUuMyAwTDE5MiAxMDkuMyAzMjkuNCAyNDYuNmMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zbC0xNjAtMTYwem0xNjAgMzUybC0xNjAtMTYwYy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMGwtMTYwIDE2MGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNzMzIuOCAxMi41IDQ1LjMgMEwxOTIgMzAxLjMgMzI5LjQgNDM4LjZjMTIuNSAxMi41IDMyLjggMTIuNSA0NS4zIDBzMTIuNS0zMi44IDAtNDUuM3oiXQogICAgfTsKICAgIGZhQW5nbGVEb3VibGVVcCA9IGZhQW5nbGVzVXA7CiAgICBmYUJ1Y2tldCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJidWNrZXQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTRjZiIsICJNNDQzLjcgMjA4YzIuNyA0LjcgNC4zIDEwLjIgNC4zIDE2IDAgMTcuNy0xNC4zIDMyLTMyIDMybC01LjEgMC0yMi40IDIxM2MtMi42IDI0LjQtMjMuMiA0My00Ny44IDQzbC0yMzMuNiAwYy0yNC42IDAtNDUuMi0xOC41LTQ3LjgtNDNMMzcuMSAyNTYgMzIgMjU2Yy0xNy43IDAtMzItMTQuMy0zMi0zMiAwLTUuOCAxLjYtMTEuMyA0LjMtMTZsNDM5LjQgMHpNMjI0LTE2Yzc5LjUgMCAxNDQgNjQuNSAxNDQgMTQ0bDAgMzItNDggMCAwLTMyYzAtNTMtNDMtOTYtOTYtOTZzLTk2IDQzLTk2IDk2bDAgMzItNDggMCAwLTMyQzgwIDQ4LjUgMTQ0LjUtMTYgMjI0LTE2eiJdCiAgICB9OwogICAgZmFMZXNzVGhhbkVxdWFsID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxlc3MtdGhhbi1lcXVhbCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgW10sICJmNTM3IiwgIk00MjYuMSA5NC40YzE2LjgtNS42IDI1LjgtMjMuNyAyMC4yLTQwLjVzLTIzLjctMjUuOC00MC41LTIwLjJsLTM4NCAxMjhDOC44IDE2NiAwIDE3OC4yIDAgMTkyczguOCAyNiAyMS45IDMwLjRsMzg0IDEyOGMxNi44IDUuNiAzNC45LTMuNSA0MC41LTIwLjJzLTMuNS0zNC45LTIwLjItNDAuNUwxMzMuMiAxOTIgNDI2LjEgOTQuNHpNMzIgNDE2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDM4NCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDMyIDQxNnoiXQogICAgfTsKICAgIGZhRm9sZGVyQ2xvc2VkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmb2xkZXItY2xvc2VkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUxODUiLCAiTTQ0OCA0NDhMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTE3NiA1MTIgMCAwIDE3NmMwIDM1LjMtMjguNyA2NC02NCA2NHptNjQtMjg4TDAgMTYwIDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMTM4LjcgMGMxMy44IDAgMjcuMyA0LjUgMzguNCAxMi44bDM4LjQgMjguOGM1LjUgNC4yIDEyLjMgNi40IDE5LjIgNi40TDQ0OCA4MGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDE2eiJdCiAgICB9OwogICAgZmFQZXJzb25UaHJvdWdoV2luZG93ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi10aHJvdWdoLXdpbmRvdyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNWE5IiwgIk02NCA2NGwyMjQgMCAwIDkuOGMwIDM5LTIzLjcgNzQtNTkuOSA4OC40LTYwLjUgMjQuMi0xMDAuMSA4Mi43LTEwMC4xIDE0Ny45bDAgNzMuOC02NCAwIDAtMzIwem0yODggMGwyMjQgMCAwIDMyMC02Ny43IDAtMy43LTQuNS03NS4yLTkwLjJjLTkuMS0xMC45LTIyLjYtMTcuMy0zNi45LTE3LjNsLTcxLjEgMC00MS02My4xYy0uMy0uNS0uNi0xLTEtMS40IDQ0LjctMjkgNzIuNS03OSA3Mi41LTEzMy42bDAtOS44em03MyAzMjBsLTI2LjYgMCA0Mi43IDY0IDE1MC45IDBjMjYuNSAwIDQ4LTIxLjUgNDgtNDhsMC0zNTJjMC0yNi41LTIxLjUtNDgtNDgtNDhMNDggMEMyMS41IDAgMCAyMS41IDAgNDhMMCA0MDBjMCAyNi41IDIxLjUgNDggNDggNDhsMjYwLjIgMCAzMy4yIDQ5LjhjOS44IDE0LjcgMjkuNyAxOC43IDQ0LjQgOC45czE4LjctMjkuNyA4LjktNDQuNGwtODQuMi0xMjYuMiA3NC42IDAgNDAgNDh6bS0xNTkuNSAwbC03My41IDAgMC03My44YzAtMTAuMiAxLjYtMjAuMSA0LjctMjkuNUwyNjUuNSAzODR6TTE5MiAxMjhhNDggNDggMCAxIDAgLTk2IDAgNDggNDggMCAxIDAgOTYgMHoiXQogICAgfTsKICAgIGZhU2Nob29sTG9jayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzY2hvb2wtbG9jayIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTZmIiwgIk0wIDE5MmMwLTM1LjMgMjguNy02NCA2NC02NGw2NCAwIDEyNy45LTExNS4xYzE4LjMtMTYuNCA0Ni0xNi40IDY0LjIgMEw0NDggMTI4IDUxMiAxMjhjMzMgMCA2MC4yIDI1IDYzLjYgNTcuMi0xNC43LTUuOS0zMC44LTkuMi00Ny42LTkuMi03MC43IDAtMTI4IDU3LjMtMTI4IDEyOGwwIDI0LjRjLTE5LjYgMTcuNi0zMiA0My4xLTMyIDcxLjVsMCA5NmMwIDUuNSAuNSAxMC45IDEuMyAxNi4xTDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCAxOTJ6TTMzMi4zIDM0MS41Yy02LTMuNS0xMi45LTUuNS0yMC4zLTUuNWwtNDggMGMtMjIuMSAwLTQwIDE3LjktNDAgNDBsMCA4OCA5NiAwIDAtNjQuMWMwLTIwLjggNC40LTQwLjUgMTIuMy01OC40ek0xMTIgMzg0YzguOCAwIDE2LTcuMiAxNi0xNmwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDB6bTE2LTE0NGwwLTMyYzAtOC44LTcuMi0xNi0xNi0xNmwtMzIgMGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMzJjMCA4LjggNy4yIDE2IDE2IDE2bDMyIDBjOC44IDAgMTYtNy4yIDE2LTE2em0yMjQtNDhhNjQgNjQgMCAxIDAgLTEyOCAwIDY0IDY0IDAgMSAwIDEyOCAwek01NjAgMzUybDAtNDcuOWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ3LjkgNjQgMHptLTExMiAyLjdsMC01MC42YzAtNDQuMiAzNS44LTgwIDgwLTgwczgwIDM1LjggODAgODBsMCA1MC42YzE4LjYgNi42IDMyIDI0LjQgMzIgNDUuM2wwIDk2YzAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0xMjggMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NmMwLTIwLjkgMTMuNC0zOC43IDMyLTQ1LjN6Il0KICAgIH07CiAgICBmYVBlcnNvbkJ1cnN0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1idXJzdCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJlNTNiIiwgIk0yMDQgNDAuMWMtMTMuMyAwLTI0LTEwLjctMjQtMjRsMC00OGMwLTEzLjMgMTAuNy0yNCAyNC0yNHMyNCAxMC43IDI0IDI0bDAgNDhjMCAxMy4zLTEwLjcgMjQtMjQgMjR6TTQgMTQ0LjFjMC0xMy4zIDEwLjctMjQgMjQtMjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtNDggMGMtMTMuMyAwLTI0LTEwLjctMjQtMjR6TTk2LjUgMjg1LjVjLTkuNCA5LjQtMjQuNiA5LjQtMzMuOSAwcy05LjQtMjQuNiAwLTMzLjlsMzMuOS0zMy45YzkuNC05LjQgMjQuNi05LjQgMzMuOSAwczkuNCAyNC42IDAgMzMuOUw5Ni41IDI4NS41ek02Mi42IDIuN2M5LjQtOS40IDI0LjYtOS40IDMzLjkgMGwzMy45IDMzLjljOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlzLTI0LjYgOS40LTMzLjkgMEw2Mi42IDM2LjZjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45ek0zNTIuNC0zMmE1NiA1NiAwIDEgMSAwIDExMiA1NiA1NiAwIDEgMSAwLTExMnpNNDc4LjcgMjk5LjFsLTQ2LjMtNjIuNCAwIDI3NS4zYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMTYwYzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgMTYwYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMjc1LjMtNDYuMyA2Mi40Yy0xMC41IDE0LjItMzAuNiAxNy4yLTQ0LjggNi42cy0xNy4yLTMwLjYtNi42LTQ0LjhsNzAuNS05NWMyNS4yLTMzLjkgNjUtNTMuOSAxMDcuMi01My45czgyIDIwIDEwNy4yIDUzLjlsNzAuNSA5NWMxMC41IDE0LjIgNy42IDM0LjItNi42IDQ0LjhzLTM0LjIgNy42LTQ0LjgtNi42eiJdCiAgICB9OwogICAgZmFMZWZ0TG9uZyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsZWZ0LWxvbmciLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFsibG9uZy1hcnJvdy1hbHQtbGVmdCJdLCAiZjMwYSIsICJNOS40IDI3OC42Yy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM2wxMjgtMTI4YzkuMi05LjIgMjIuOS0xMS45IDM0LjktNi45UzE5MiAxMTUuMSAxOTIgMTI4bDAgNjQgMzM2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzMmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtMzM2IDAgMCA2NGMwIDEyLjktNy44IDI0LjYtMTkuOCAyOS42cy0yNS43IDIuMi0zNC45LTYuOWwtMTI4LTEyOHoiXQogICAgfTsKICAgIGZhTG9uZ0Fycm93QWx0TGVmdCA9IGZhTGVmdExvbmc7CiAgICBmYUxvY2F0aW9uQ3Jvc3NoYWlycyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsb2NhdGlvbi1jcm9zc2hhaXJzIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbImxvY2F0aW9uIl0sICJmNjAxIiwgIk0yODgtMTZjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAxOC4zYzk4LjEgMTQgMTc1LjcgOTEuNiAxODkuNyAxODkuN2wxOC4zIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTE4LjMgMGMtMTQgOTguMS05MS42IDE3NS43LTE4OS43IDE4OS43bDAgMTguM2MwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE4LjNDMTU3LjkgNDYzLjcgODAuMyAzODYuMSA2Ni4zIDI4OEw0OCAyODhjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzJsMTguMyAwQzgwLjMgMTI1LjkgMTU3LjkgNDguMyAyNTYgMzQuM0wyNTYgMTZjMC0xNy43IDE0LjMtMzIgMzItMzJ6TTEyOCAyNTZhMTYwIDE2MCAwIDEgMCAzMjAgMCAxNjAgMTYwIDAgMSAwIC0zMjAgMHptMTYwLTk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyeiJdCiAgICB9OwogICAgZmFMb2NhdGlvbiA9IGZhTG9jYXRpb25Dcm9zc2hhaXJzOwogICAgZmFQZXJzb25Eb3RzRnJvbUxpbmUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVyc29uLWRvdHMtZnJvbS1saW5lIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImRpYWdub3NlcyJdLCAiZjQ3MCIsICJNMTg0IDcyYTcyIDcyIDAgMSAxIDE0NCAwIDcyIDcyIDAgMSAxIC0xNDQgMHpNMTYwIDI5OS4zYy0xOS45IDIyLjYtMzIgNTIuMi0zMiA4NC43bDAgMzItNjQgMCAwLTMyYzAtMTA2IDg2LTE5MiAxOTItMTkyczE5MiA4NiAxOTIgMTkybDAgMzItNjQgMCAwLTMyYzAtMzIuNS0xMi4xLTYyLjEtMzItODQuN2wwIDExNi43LTE5MiAwIDAtMTE2Ljd6TTIzMiAzODRhMjQgMjQgMCAxIDAgMC00OCAyNCAyNCAwIDEgMCAwIDQ4em04OC0xMDRhMjQgMjQgMCAxIDAgLTQ4IDAgMjQgMjQgMCAxIDAgNDggMHpNMjQgNDY0bDQ2NCAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0TDI0IDUxMmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNjQgMTg0YTI0IDI0IDAgMSAxIDQ4IDAgMjQgMjQgMCAxIDEgLTQ4IDB6bTQyNCA3MmEyNCAyNCAwIDEgMSAwIDQ4IDI0IDI0IDAgMSAxIDAtNDh6Il0KICAgIH07CiAgICBmYURpYWdub3NlcyA9IGZhUGVyc29uRG90c0Zyb21MaW5lOwogICAgZmFHYXVnZVNpbXBsZUhpZ2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2F1Z2Utc2ltcGxlLWhpZ2giLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFs2MTY2OCwgInRhY2hvbWV0ZXIiLCAidGFjaG9tZXRlci1mYXN0Il0sICJmNjJhIiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwem0zMjAgOTZjMC0xNi4yLTYtMzEuMS0xNi00Mi4zbDY5LjUtMTM4LjljNS45LTExLjkgMS4xLTI2LjMtMTAuNy0zMi4ycy0yNi4zLTEuMS0zMi4yIDEwLjdMMjYxLjEgMjg4LjJjLTEuNy0uMS0zLjQtLjItNS4xLS4yLTM1LjMgMC02NCAyOC43LTY0IDY0czI4LjcgNjQgNjQgNjQgNjQtMjguNyA2NC02NHoiXQogICAgfTsKICAgIGZhVGFjaG9tZXRlciA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFUYWNob21ldGVyRmFzdCA9IGZhR2F1Z2VTaW1wbGVIaWdoOwogICAgZmFBbmdsZXNMZWZ0ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFuZ2xlcy1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTcxLCAiYW5nbGUtZG91YmxlLWxlZnQiXSwgImYxMDAiLCAiTTkuNCAyMzMuNGMtMTIuNSAxMi41LTEyLjUgMzIuOCAwIDQ1LjNsMTYwIDE2MGMxMi41IDEyLjUgMzIuOCAxMi41IDQ1LjMgMHMxMi41LTMyLjggMC00NS4zTDc3LjMgMjU2IDIxNC42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0xNjAgMTYwem0zNTItMTYwbC0xNjAgMTYwYy0xMi41IDEyLjUtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwczEyLjUtMzIuOCAwLTQ1LjNMMjY5LjMgMjU2IDQwNi42IDExOC42YzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAweiJdCiAgICB9OwogICAgZmFBbmdsZURvdWJsZUxlZnQgPSBmYUFuZ2xlc0xlZnQ7CiAgICBmYVVwRG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ1cC1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbODU5NywgMTEwMjEsICJhcnJvd3MtYWx0LXYiXSwgImYzMzgiLCAiTTQwNi42IDUwMi42bDk2LTk2YzkuMi05LjIgMTEuOS0yMi45IDYuOS0zNC45UzQ5Mi45IDM1MiA0ODAgMzUybC02NCAwIDAtMzIwYzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgMzIwLTY0IDBjLTEyLjkgMC0yNC42IDcuOC0yOS42IDE5LjhzLTIuMiAyNS43IDYuOSAzNC45bDk2IDk2YzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwek0xNTAuNiA5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwbC05NiA5NmMtOS4yIDkuMi0xMS45IDIyLjktNi45IDM0LjlTMTkuMSAxNjAgMzIgMTYwbDY0IDAgMCAzMjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTMyMCA2NCAwYzEyLjkgMCAyNC42LTcuOCAyOS42LTE5LjhzMi4yLTI1LjctNi45LTM0LjlsLTk2LTk2eiJdCiAgICB9OwogICAgZmFBcnJvd3NBbHRWID0gZmFVcERvd247CiAgICBmYUJhdHRlcnlFbXB0eSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYXR0ZXJ5LWVtcHR5IiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbImJhdHRlcnktMCJdLCAiZjI0NCIsICJNMTEyIDE2MGMtOC44IDAtMTYgNy4yLTE2IDE2bDAgMjI0YzAgOC44IDcuMiAxNiAxNiAxNmw0MTYgMGM4LjggMCAxNi03LjIgMTYtMTZsMC0yMjRjMC04LjgtNy4yLTE2LTE2LTE2bC00MTYgMHpNMzIgMTc2YzAtNDQuMiAzNS44LTgwIDgwLTgwbDQxNiAwYzQ0LjIgMCA4MCAzNS44IDgwIDgwbDAgNDhjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDQ4YzAgNDQuMi0zNS44IDgwLTgwIDgwbC00MTYgMGMtNDQuMiAwLTgwLTM1LjgtODAtODBsMC0yMjR6Il0KICAgIH07CiAgICBmYUJhdHRlcnkwID0gZmFCYXR0ZXJ5RW1wdHk7CiAgICBmYUtleWJvYXJkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJrZXlib2FyZCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWzllM10sICJmMTFjIiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGw0NDggMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTYgNjRsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNNjQgMjQwYzAtOC44IDcuMi0xNiAxNi0xNmwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJ6TTE3NiAxMjhsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyYzAtOC44IDcuMi0xNiAxNi0xNnpNMTYwIDI0MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTIyNCAwYy04LjggMC0xNi03LjItMTYtMTZsMC0zMmMwLTguOCA3LjItMTYgMTYtMTZ6bTgwLTE3NmMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2em04MC04MGMwLTguOCA3LjItMTYgMTYtMTZsMzIgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCAzMmMwIDguOC03LjIgMTYtMTYgMTZsLTMyIDBjLTguOCAwLTE2LTcuMi0xNi0xNmwwLTMyem0xNiA4MGwzMiAwYzguOCAwIDE2IDcuMiAxNiAxNmwwIDMyYzAgOC44LTcuMiAxNi0xNiAxNmwtMzIgMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMzJjMC04LjggNy4yLTE2IDE2LTE2eiJdCiAgICB9OwogICAgZmFDb29raWUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY29va2llIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI3ODUwXSwgImY1NjMiLCAiTTI0Ny4yIDE3Yy0yMi4xLTMuMS00NC42IC45LTY0LjQgMTEuNGwtNzQgMzkuNUM4OS4xIDc4LjQgNzMuMiA5NC45IDYzLjQgMTE1TDI2LjcgMTkwLjZjLTkuOCAyMC4xLTEzIDQyLjktOS4xIDY0LjlsMTQuNSA4Mi44YzMuOSAyMi4xIDE0LjYgNDIuMyAzMC43IDU3LjlsNjAuMyA1OC40YzE2LjEgMTUuNiAzNi42IDI1LjYgNTguNyAyOC43bDgzIDExLjdjMjIuMSAzLjEgNDQuNi0uOSA2NC40LTExLjRsNzQtMzkuNWMxOS43LTEwLjUgMzUuNi0yNyA0NS40LTQ3LjJsMzYuNy03NS41YzkuOC0yMC4xIDEzLTQyLjkgOS4xLTY0LjlsLTE0LjYtODIuOGMtMy45LTIyLjEtMTQuNi00Mi4zLTMwLjctNTcuOUwzODguOSA1Ny41Yy0xNi4xLTE1LjYtMzYuNi0yNS42LTU4LjctMjguN0wyNDcuMiAxN3pNMjA4IDE0NGEzMiAzMiAwIDEgMSAwIDY0IDMyIDMyIDAgMSAxIDAtNjR6TTE0NCAzMzZhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMjI0LTY0YTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhU3RvcHdhdGNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInN0b3B3YXRjaCIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzkyMDFdLCAiZjJmMiIsICJNMTY4LjUgMGMtMTMuMyAwLTI0IDEwLjctMjQgMjRzMTAuNyAyNCAyNCAyNGwzMiAwIDAgMjUuM2MtMTA4IDExLjktMTkyIDEwMy41LTE5MiAyMTQuNyAwIDExOS4zIDk2LjcgMjE2IDIxNiAyMTZzMjE2LTk2LjcgMjE2LTIxNmMwLTM5LjgtMTAuOC03Ny4xLTI5LjYtMTA5LjJsMjguMi0yOC4yYzEyLjUtMTIuNSAxMi41LTMyLjggMC00NS4zcy0zMi44LTEyLjUtNDUuMyAwbC0yMy40IDIzLjRjLTMyLjktMzAuMi03NS4yLTUwLjMtMTIyLTU1LjVsMC0yNS4zIDMyIDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTExMiAwem04MCAxODRsMCAxMDRjMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRsMC0xMDRjMC0xMy4zIDEwLjctMjQgMjQtMjRzMjQgMTAuNyAyNCAyNHoiXQogICAgfTsKICAgIGZhRWplY3QgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZWplY3QiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFs5MTY3XSwgImYwNTIiLCAiTTIyNCAzMmMxMy41IDAgMjYuMyA1LjYgMzUuNCAxNS42bDE3NiAxOTJjMTIuOSAxNCAxNi4yIDM0LjMgOC42IDUxLjhTNDE5IDMyMCA0MDAgMzIwTDQ4IDMyMGMtMTkgMC0zNi4zLTExLjItNDMuOS0yOC43cy00LjMtMzcuNyA4LjYtNTEuOGwxNzYtMTkyQzE5Ny43IDM3LjYgMjEwLjUgMzIgMjI0IDMyek0wIDQzMmMwLTI2LjUgMjEuNS00OCA0OC00OGwzNTIgMGMyNi41IDAgNDggMjEuNSA0OCA0OHMtMjEuNSA0OC00OCA0OEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4eiJdCiAgICB9OwogICAgZmFTYXRlbGxpdGVEaXNoID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhdGVsbGl0ZS1kaXNoIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjI1XSwgImY3YzAiLCAiTTIzMiAwYzE1NC42IDAgMjgwIDEyNS40IDI4MCAyODAgMCAxMy4zLTEwLjcgMjQtMjQgMjRzLTI0LTEwLjctMjQtMjRjMC0xMjguMS0xMDMuOS0yMzItMjMyLTIzMi0xMy4zIDAtMjQtMTAuNy0yNC0yNFMyMTguNyAwIDIzMiAwek0yMDggMTIwYzAtMTMuMyAxMC43LTI0IDI0LTI0IDEwMS42IDAgMTg0IDgyLjQgMTg0IDE4NCAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTc1LjEtNjAuOS0xMzYtMTM2LTEzNi0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjYuNCAxNDIuN2M4LjgtMTcuOSAzMi40LTE5LjkgNDYuNS01LjhsMTI4LjUgMTI4LjUgMzItMzJjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM2wtMzIgMzIgMTI4LjUgMTI4LjVjMTQuMSAxNC4xIDEyIDM3LjYtNS44IDQ2LjUtMzQuMiAxNi45LTcyLjYgMjYuNC0xMTMuMyAyNi40LTE0MS40IDAtMjU2LTExNC42LTI1Ni0yNTYgMC00MC43IDkuNS03OS4yIDI2LjQtMTEzLjN6Il0KICAgIH07CiAgICBmYUZhY2VSb2xsaW5nRXllczIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1yb2xsaW5nLWV5ZXMiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1ODAsICJtZWgtcm9sbGluZy1leWVzIl0sICJmNWE1IiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNMTkyIDM1MmwxMjggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTI4IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTMyLTEyOGMwIDM1LjMtMjguNyA2NC02NCA2NHMtNjQtMjguNy02NC02NGMwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNHptMTI4IDY0Yy0zNS4zIDAtNjQtMjguNy02NC02NCAwLTI2IDE1LjUtNDguNCAzNy44LTU4LjQtMy43IDUuMi01LjggMTEuNi01LjggMTguNCAwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyYzAtNi45LTIuMi0xMy4yLTUuOC0xOC40IDIyLjMgMTAgMzcuOCAzMi40IDM3LjggNTguNCAwIDM1LjMtMjguNyA2NC02NCA2NHoiXQogICAgfTsKICAgIGZhTWVoUm9sbGluZ0V5ZXMyID0gZmFGYWNlUm9sbGluZ0V5ZXMyOwogICAgZmFMaXN0Q2hlY2sgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibGlzdC1jaGVjayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJ0YXNrcyJdLCAiZjBhZSIsICJNMTMzLjggMzYuM2MxMC45IDcuNiAxMy41IDIyLjYgNS45IDMzLjRsLTU2IDgwYy00LjEgNS44LTEwLjUgOS41LTE3LjYgMTAuMVM1MiAxNTggNDcgMTUzTDcgMTEzQy0yLjMgMTAzLjYtMi4zIDg4LjQgNyA3OVMzMS42IDY5LjcgNDEgNzlsMTkuOCAxOS44IDM5LjYtNTYuNmM3LjYtMTAuOSAyMi42LTEzLjUgMzMuNC01Ljl6bTAgMTYwYzEwLjkgNy42IDEzLjUgMjIuNiA1LjkgMzMuNGwtNTYgODBjLTQuMSA1LjgtMTAuNSA5LjUtMTcuNiAxMC4xUzUyIDMxOCA0NyAzMTNMNyAyNzNjLTkuNC05LjQtOS40LTI0LjYgMC0zMy45czI0LjYtOS40IDMzLjkgMGwxOS44IDE5LjggMzkuNi01Ni42YzcuNi0xMC45IDIyLjYtMTMuNSAzMy40LTUuOXpNMjI0IDk2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6bTAgMTYwYzAtMTcuNyAxNC4zLTMyIDMyLTMybDIyNCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0yMjQgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6TTE2MCA0MTZjMC0xNy43IDE0LjMtMzIgMzItMzJsMjg4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI4OCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnpNNjQgMzc2YTQwIDQwIDAgMSAxIDAgODAgNDAgNDAgMCAxIDEgMC04MHoiXQogICAgfTsKICAgIGZhVGFza3MgPSBmYUxpc3RDaGVjazsKICAgIGZhU2Fja1htYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNhY2steG1hcmsiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU2YSIsICJNMzI4IDExMmwtMTQ0IDAtMzcuMy03NC41Yy0xLjgtMy42LTIuNy03LjYtMi43LTExLjYgMC0xNC4zIDExLjYtMjUuOSAyNS45LTI1LjlMMzQyLjEgMGMxNC4zIDAgMjUuOSAxMS42IDI1LjkgMjUuOSAwIDQtLjkgOC0yLjcgMTEuNkwzMjggMTEyek0xNjkuNiAxNjBsMTcyLjggMCA0OC43IDQwLjZDNDU3LjYgMjU2IDQ5NiAzMzggNDk2IDQyNC41IDQ5NiA0NzIuOCA0NTYuOCA1MTIgNDA4LjUgNTEybC0zMDUuMSAwQzU1LjIgNTEyIDE2IDQ3Mi44IDE2IDQyNC41IDE2IDMzOCA1NC40IDI1NiAxMjAuOSAyMDAuNkwxNjkuNiAxNjB6TTMyMy45IDI4NC4xYy05LjQtOS40LTI0LjYtOS40LTMzLjkgMGwtMzMuOSAzMy45LTMzLjktMzMuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBzLTkuNCAyNC42IDAgMzMuOWwzMy45IDMzLjktMzMuOSAzMy45Yy05LjQgOS40LTkuNCAyNC42IDAgMzMuOXMyNC42IDkuNCAzMy45IDBsMzMuOS0zMy45IDMzLjkgMzMuOWM5LjQgOS40IDI0LjYgOS40IDMzLjkgMHM5LjQtMjQuNiAwLTMzLjlsLTMzLjktMzMuOSAzMy45LTMzLjljOS40LTkuNCA5LjQtMjQuNiAwLTMzLjl6Il0KICAgIH07CiAgICBmYUhhc2h0YWcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFzaHRhZyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzYyMDk4XSwgIjIzIiwgIk0yMTQuNyAuN2MxNy4zIDMuNyAyOC4zIDIwLjcgMjQuNiAzOGwtMTkuMSA4OS4zIDEyNi41IDAgMjItMTAyLjdDMzcyLjQgOCAzODkuNC0zIDQwNi43IC43czI4LjMgMjAuNyAyNC42IDM4TDQxMi4yIDEyOCA0ODAgMTI4YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjcuNCAxMjggNjcuOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC04MS42IDAtMjIgMTAyLjdjLTMuNyAxNy4zLTIwLjcgMjguMy0zOCAyNC42cy0yOC4zLTIwLjctMjQuNi0zOGwxOS4xLTg5LjMtMTI2LjUgMC0yMiAxMDIuN2MtMy43IDE3LjMtMjAuNyAyOC4zLTM4IDI0LjZzLTI4LjMtMjAuNy0yNC42LTM4TDk5LjggMzg0IDMyIDM4NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw4MS42IDAgMjcuNC0xMjgtNjcuOCAwYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDgxLjYgMCAyMi0xMDIuN0MxODAuNCA4IDE5Ny40LTMgMjE0LjcgLjd6TTIwNi40IDE5MmwtMjcuNCAxMjggMTI2LjUgMCAyNy40LTEyOC0xMjYuNSAweiJdCiAgICB9OwogICAgZmFUcmFpbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzEyODY0Nl0sICJmMjM4IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmwxOTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTk2YzAtMTcuNy0xNC4zLTMyLTMyLTMyTDk2IDk2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnpNMTkyIDM4NGEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYUdhbWVwYWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ2FtZXBhZCIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmMTFiIiwgIk00NDggNjRjMTA2IDAgMTkyIDg2IDE5MiAxOTJTNTU0IDQ0OCA0NDggNDQ4bC0yNTYgMEM4NiA0NDggMCAzNjIgMCAyNTZTODYgNjQgMTkyIDY0bDI1NiAwek0xOTIgMTc2Yy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDMyLTMyIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMzIgMCAwIDMyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0zMiAzMiAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0zMiAwIDAtMzJjMC0xMy4zLTEwLjctMjQtMjQtMjR6bTI0MCA5NmEzMiAzMiAwIDEgMCAwIDY0IDMyIDMyIDAgMSAwIDAtNjR6bTY0LTk2YTMyIDMyIDAgMSAwIDAgNjQgMzIgMzIgMCAxIDAgMC02NHoiXQogICAgfTsKICAgIGZhRmlsZUV4cG9ydCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLWV4cG9ydCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJhcnJvdy1yaWdodC1mcm9tLWZpbGUiXSwgImY1NmUiLCAiTTk2LjUgMGMtMzUuMyAwLTY0IDI4LjctNjQgNjRsMCAzODRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMjU2IDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC05NiA3OC4xIDAtMzEgMzFjLTkuNCA5LjQtOS40IDI0LjYgMCAzMy45czI0LjYgOS40IDMzLjkgMGw3Mi03MmM5LjQtOS40IDkuNC0yNC42IDAtMzMuOWwtNzItNzJjLTkuNC05LjQtMjQuNi05LjQtMzMuOSAwcy05LjQgMjQuNiAwIDMzLjlsMzEgMzEtNzguMSAwIDAtMTMzLjVjMC0xNy02LjctMzMuMy0xOC43LTQ1LjNMMjkxLjIgMTguN0MyNzkuMiA2LjcgMjYzIDAgMjQ2IDBMOTYuNSAwek0zNTggMTc2bC05My41IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0TDI0MC41IDU4LjUgMzU4IDE3NnpNMjI0LjUgMzI4YzAtMTMuMyAxMC43LTI0IDI0LTI0bDEwNCAwIDAgNDgtMTA0IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0eiJdCiAgICB9OwogICAgZmFBcnJvd1JpZ2h0RnJvbUZpbGUgPSBmYUZpbGVFeHBvcnQ7CiAgICBmYUZhY2VHcmltYWNlMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWdyaW1hY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NTYsICJncmltYWNlIl0sICJmNTdmIiwgIk0yNTYgNTEyYTI1NiAyNTYgMCAxIDAgMC01MTIgMjU2IDI1NiAwIDEgMCAwIDUxMnpNNDAwIDM1MmMwIDI1LjItMTkuNCA0NS44LTQ0IDQ3LjhsMC05NS43YzI0LjYgMiA0NCAyMi43IDQ0IDQ3Ljh6TTI3NiAzMDRsNDAgMCAwIDk2LTQwIDAgMC05NnptLTgwIDk2bDAtOTYgNDAgMCAwIDk2LTQwIDB6bS00MC05NS44bDAgOTUuN2MtMjQuNi0yLTQ0LTIyLjctNDQtNDcuOHMxOS40LTQ1LjggNDQtNDcuOHpNMTQ0IDIwOGEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAwem0xOTItMzJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0eiJdCiAgICB9OwogICAgZmFHcmltYWNlMiA9IGZhRmFjZUdyaW1hY2UyOwogICAgZmFUcmFpblN1YndheSA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0cmFpbi1zdWJ3YXkiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsic3Vid2F5Il0sICJmMjM5IiwgIk0wIDk2QzAgNDMgNDMgMCA5NiAwTDI4OCAwYzUzIDAgOTYgNDMgOTYgOTZsMCAyNTZjMCA0MC4xLTI0LjYgNzQuNS01OS41IDg4LjhsNTMuOSA2My43YzguNiAxMC4xIDcuMyAyNS4zLTIuOCAzMy44cy0yNS4zIDcuMy0zMy44LTIuOGwtNzQtODcuNS0xNTEuMyAwLTc0IDg3LjVjLTguNiAxMC4xLTIzLjcgMTEuNC0zMy44IDIuOHMtMTEuNC0yMy43LTIuOC0zMy44bDUzLjktNjMuN0MyNC42IDQyNi41IDAgMzkyLjEgMCAzNTJMMCA5NnptNjQgMzJsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw3MiAwIDAtMTYwLTcyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0yMTYgMjU2bDcyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC05NmMwLTE3LjctMTQuMy0zMi0zMi0zMmwtNzIgMCAwIDE2MHpNOTYgMzg0YTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHptMjI0LTMyYTMyIDMyIDAgMSAwIC02NCAwIDMyIDMyIDAgMSAwIDY0IDB6Il0KICAgIH07CiAgICBmYVN1YndheSA9IGZhVHJhaW5TdWJ3YXk7CiAgICBmYUNpcmNsZURvdDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2lyY2xlLWRvdCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODI4MCwgImRvdC1jaXJjbGUiXSwgImYxOTIiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyem0wLTM1MmE5NiA5NiAwIDEgMSAwIDE5MiA5NiA5NiAwIDEgMSAwLTE5MnoiXQogICAgfTsKICAgIGZhRG90Q2lyY2xlMiA9IGZhQ2lyY2xlRG90MjsKICAgIGZhT2JqZWN0R3JvdXAyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9iamVjdC1ncm91cCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmMjQ3IiwgIk0zMiAxMTkuNEMxMi45IDEwOC40IDAgODcuNyAwIDY0IDAgMjguNyAyOC43IDAgNjQgMCA4Ny43IDAgMTA4LjQgMTIuOSAxMTkuNCAzMmwzMzcuMSAwYzExLjEtMTkuMSAzMS43LTMyIDU1LjQtMzIgMzUuMyAwIDY0IDI4LjcgNjQgNjQgMCAyMy43LTEyLjkgNDQuNC0zMiA1NS40bDAgMjczLjFjMTkuMSAxMS4xIDMyIDMxLjcgMzIgNTUuNCAwIDM1LjMtMjguNyA2NC02NCA2NC0yMy43IDAtNDQuNC0xMi45LTU1LjQtMzJsLTMzNy4xIDBjLTExLjEgMTkuMS0zMS43IDMyLTU1LjQgMzItMzUuMyAwLTY0LTI4LjctNjQtNjQgMC0yMy43IDEyLjktNDQuNCAzMi01NS40bDAtMjczLjF6bTQ0OCAwYy05LjctNS42LTE3LjgtMTMuNy0yMy40LTIzLjRMMTE5LjQgOTZjLTUuNiA5LjctMTMuNyAxNy44LTIzLjQgMjMuNGwwIDI3My4xYzkuNyA1LjYgMTcuOCAxMy43IDIzLjQgMjMuNGwzMzcuMSAwYzUuNi05LjcgMTMuNy0xNy44IDIzLjQtMjMuNGwwLTI3My4xek0xNDQgMTc2YzAtMTcuNyAxNC4zLTMyIDMyLTMybDExMiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgNjRjMCAxNy43LTE0LjMgMzItMzIgMzJsLTExMiAwYy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0ek0yNTYgMzIwbDMyIDBjNDQuMiAwIDgwLTM1LjggODAtODBsMzIgMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMybC0xMTIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNnoiXQogICAgfTsKICAgIGZhU2hpcCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaGlwIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbMTI4Njc0XSwgImYyMWEiLCAiTTI3MiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDE2LTE2IDBjLTQ0LjIgMC04MCAzNS44LTgwIDgwbDAgMTA4LjgtMjEuNiA4LjZjLTE0LjggNS45LTIyLjUgMjIuNC0xNy40IDM3LjUgMTAuNCAzMS4zIDI2LjggNTkuMyA0Ny43IDgzLjEgMjAuMS05LjIgNDEuNy0xMy45IDYzLjMtMTQgMzMuMS0uMiA2Ni4zIDEwLjIgOTQuNCAzMS40bDEuNiAxLjIgMC0yMTUtMTA0IDQxLjYgMC04My4yYzAtOC44IDcuMi0xNiAxNi0xNmwyMjQgMGM4LjggMCAxNiA3LjIgMTYgMTZsMCA4My4yLTEwNC00MS42IDAgMjE1IDEuNi0xLjJjMjcuNS0yMC43IDU5LjktMzEuMiA5Mi40LTMxLjQgMjIuMy0uMSA0NC42IDQuNSA2NS4zIDE0IDIwLjktMjMuNyAzNy4zLTUxLjggNDcuNy04My4xIDUtMTUuMi0yLjYtMzEuNi0xNy40LTM3LjVMNTEyIDI1Mi44IDUxMiAxNDRjMC00NC4yLTM1LjgtODAtODAtODBsLTE2IDAgMC0xNmMwLTI2LjUtMjEuNS00OC00OC00OEwyNzIgMHpNNDAzLjQgNDc2LjFjMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMTkgMTQuNCA0MS45IDI4LjIgNjcuMiAzMy4zIDI2LjUgNS40IDU0LjMgLjggODAuNy0xOS4xIDEwLjYtOCAxMi43LTIzIDQuNy0zMy42cy0yMy0xMi43LTMzLjYtNC43Yy0xNC45IDExLjItMjguNiAxMy4xLTQyLjMgMTAuMy0xNC45LTMtMzAuOS0xMS45LTQ3LjgtMjQuNi0zOC40LTI5LTkwLjUtMjktMTI5IDAtMjQgMTguMS00MC43IDI2LjMtNTQuNSAyNi4zcy0zMC41LTguMi01NC41LTI2LjNjLTM4LjQtMjktOTAuNS0yOS0xMjkgMC0yMS42IDE2LjMtNDEuMyAyNS44LTU4LjkgMjUuNy05LjYtLjEtMTkuOS0zLTMxLjItMTEuNS0xMC42LTgtMjUuNi01LjktMzMuNiA0LjdTNyA0ODIuMyAxNy42IDQ5MC4zYzE5LjEgMTQuNCAzOS40IDIxIDU5LjggMjEuMSAzMy45IC4yIDY0LjMtMTcuNCA4OC4xLTM1LjMgMjEuMy0xNi4xIDQ5LjktMTYuMSA3MS4yIDAgMjQuMiAxOC4zIDUyLjMgMzUuOSA4My40IDM1LjlzNTkuMS0xNy43IDgzLjQtMzUuOXoiXQogICAgfTsKICAgIGZhQyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbOTldLCAiNDMiLCAiTTMyOS4xIDE0Mi45Yy02Mi41LTYyLjUtMTU1LjgtNjIuNS0yMTguMyAwcy02Mi41IDE2My44IDAgMjI2LjMgMTU1LjggNjIuNSAyMTguMyAwYzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNjLTg3LjUgODcuNS0yMjEuMyA4Ny41LTMwOC44IDBzLTg3LjUtMjI5LjMgMC0zMTYuOCAyMjEuMy04Ny41IDMwOC44IDBjMTIuNSAxMi41IDEyLjUgMzIuOCAwIDQ1LjNzLTMyLjggMTIuNS00NS4zIDB6Il0KICAgIH07CiAgICBmYVNxdWFyZVBob25lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNxdWFyZS1waG9uZSIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJwaG9uZS1zcXVhcmUiXSwgImYwOTgiLCAiTTY0IDMyQzI4LjcgMzIgMCA2MC43IDAgOTZMMCA0MTZjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC0zMjBjMC0zNS4zLTI4LjctNjQtNjQtNjRMNjQgMzJ6bTg4IDk2LjdjOS44LTIuNyAyMC4xIDIuNCAyNCAxMS44bDIwLjMgNDguN2MzLjQgOC4zIDEuMSAxNy44LTUuOSAyMy41bC0yMi4xIDE4YzE2LjIgMzUuOCA0NC41IDY1IDc5LjYgODIuNGwxOS4zLTIzLjZjNS43LTYuOSAxNS4yLTkuMyAyMy41LTUuOWw0OC43IDIwLjNjOS40IDMuOSAxNC40IDE0LjIgMTEuOCAyNGwtLjggMi44Yy04LjggMzIuMy00MC4xIDU5LjktNzguMiA1MS44LTg3LjUtMTguNS0xNTYuMy04Ny40LTE3NC45LTE3NC45LTguMS0zOC4xIDE5LjUtNjkuNCA1MS44LTc4LjJsMi44LS44eiJdCiAgICB9OwogICAgZmFQaG9uZVNxdWFyZSA9IGZhU3F1YXJlUGhvbmU7CiAgICBmYVJ1bGVyQ29tYmluZWQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicnVsZXItY29tYmluZWQiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZjU0NiIsICJNMSA0NDEuN0M1LjUgNDYzLjUgMjQuOCA0ODAgNDggNDgwbDM1MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTQ4IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTY0IDAgMCA3MmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTcyLTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTY0LTcyIDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsNzIgMCAwLTQ4YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4TDQ4IDMyQzIxLjUgMzIgMCA1My41IDAgODBMMCA0MzJjMCAzLjMgLjMgNi42IDEgOS43eiJdCiAgICB9OwogICAgZmFBcnJvd3NSb3RhdGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3dzLXJvdGF0ZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzEyODQ3MiwgInJlZnJlc2giLCAic3luYyJdLCAiZjAyMSIsICJNNjUuOSAyMjguNWMxMy4zLTkzIDkzLjQtMTY0LjUgMTkwLjEtMTY0LjUgNTMgMCAxMDEgMjEuNSAxMzUuOCA1Ni4yIC4yIC4yIC40IC40IC42IC42bDcuNiA3LjItNDcuOSAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEyOCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMTI4YzAtMTcuNy0xNC4zLTMyLTMyLTMycy0zMiAxNC4zLTMyIDMybDAgNTMuNC0xMS4zLTEwLjdDMzkwLjUgMjguNiAzMjYuNSAwIDI1NiAwIDEyNyAwIDIwLjMgOTUuNCAyLjYgMjE5LjUgLjEgMjM3IDEyLjIgMjUzLjIgMjkuNyAyNTUuN3MzMy43LTkuNyAzNi4yLTI3LjF6bTQ0My41IDY0YzIuNS0xNy41LTkuNy0zMy43LTI3LjEtMzYuMnMtMzMuNyA5LjctMzYuMiAyNy4xYy0xMy4zIDkzLTkzLjQgMTY0LjUtMTkwLjEgMTY0LjUtNTMgMC0xMDEtMjEuNS0xMzUuOC01Ni4yLS4yLS4yLS40LS40LS42LS42bC03LjYtNy4yIDQ3LjkgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwzMiAzMjBjLTguNSAwLTE2LjcgMy40LTIyLjcgOS41Uy0uMSAzNDMuNyAwIDM1Mi4zbDEgMTI3Yy4xIDE3LjcgMTQuNiAzMS45IDMyLjMgMzEuN1M2NS4yIDQ5Ni40IDY1IDQ3OC43bC0uNC01MS41IDEwLjcgMTAuMWM0Ni4zIDQ2LjEgMTEwLjIgNzQuNyAxODAuNyA3NC43IDEyOSAwIDIzNS43LTk1LjQgMjUzLjQtMjE5LjV6Il0KICAgIH07CiAgICBmYVJlZnJlc2ggPSBmYUFycm93c1JvdGF0ZTsKICAgIGZhU3luYyA9IGZhQXJyb3dzUm90YXRlOwogICAgZmFQZXJzb25EcmVzcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJwZXJzb24tZHJlc3MiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFsiZmVtYWxlIl0sICJmMTgyIiwgIk0xMzYgMjRhNTYgNTYgMCAxIDEgMTEyIDAgNTYgNTYgMCAxIDEgLTExMiAwek0xMTIgMzg0bC0yNS44IDBjLTEwLjkgMC0xOC42LTEwLjctMTUuMi0yMS4xbDQzLTEyOS00OC4zIDY1LjFjLTEwLjUgMTQuMi0zMC42IDE3LjItNDQuOCA2LjZzLTE3LjItMzAuNi02LjYtNDQuOGw3MC41LTk1QzExMCAxMzIgMTQ5LjcgMTEyIDE5MiAxMTJzODIgMjAgMTA3LjIgNTMuOWw3MC41IDk1YzEwLjUgMTQuMiA3LjYgMzQuMi02LjYgNDQuOHMtMzQuMiA3LjYtNDQuOC02LjZMMjcwIDIzNCAzMTMgMzYyLjljMy41IDEwLjQtNC4zIDIxLjEtMTUuMiAyMS4xbC0yNS44IDAgMCAxMjhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC0xMjgtMzIgMCAwIDEyOGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTEyOHoiXQogICAgfTsKICAgIGZhRmVtYWxlID0gZmFQZXJzb25EcmVzczsKICAgIGZhQm9va09wZW4gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9vay1vcGVuIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4MjE0LCAxMjgzNjZdLCAiZjUxOCIsICJNMjU2IDE0MS4zbDAgMzA5LjMgLjUtLjJDMzExLjEgNDI3LjcgMzY5LjcgNDE2IDQyOC44IDQxNmwxOS4yIDAgMC0zMjAtMTkuMiAwYy00Mi4yIDAtODQuMSA4LjQtMTIzLjEgMjQuNi0xNi44IDctMzMuNCAxMy45LTQ5LjcgMjAuN3pNMjMwLjkgNjEuNUwyNTYgNzIgMjgxLjEgNjEuNUMzMjcuOSA0MiAzNzguMSAzMiA0MjguOCAzMkw0NjQgMzJjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCAzNTJjMCAyNi41LTIxLjUgNDgtNDggNDhsLTM1LjIgMGMtNTAuNyAwLTEwMC45IDEwLTE0Ny43IDI5LjVsLTEyLjggNS4zYy03LjkgMy4zLTE2LjcgMy4zLTI0LjYgMGwtMTIuOC01LjNDMTg0LjEgNDkwIDEzMy45IDQ4MCA4My4yIDQ4MEw0OCA0ODBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4TDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUuMiAwYzUwLjcgMCAxMDAuOSAxMCAxNDcuNyAyOS41eiJdCiAgICB9OwogICAgZmFGb2xkZXJUcmVlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZvbGRlci10cmVlIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY4MDIiLCAiTTQ4IDI0QzQ4IDEwLjcgMzcuMyAwIDI0IDBTMCAxMC43IDAgMjRMMCAzOTJjMCAzMC45IDI1LjEgNTYgNTYgNTZsMTg0IDAgMC00OC0xODQgMGMtNC40IDAtOC0zLjYtOC04bDAtMjMyIDE5MiAwIDAtNDgtMTkyIDAgMC04OHpNMzM2IDIyNGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTk2YzAtMjYuNS0yMS41LTQ4LTQ4LTQ4bC04Mi43IDBjLTguNSAwLTE2LjYtMy40LTIyLjYtOS40bC04LjYtOC42Yy05LTktMjEuMi0xNC4xLTMzLjktMTQuMUwzMzYgMGMtMjYuNSAwLTQ4IDIxLjUtNDggNDhsMCAxMjhjMCAyNi41IDIxLjUgNDggNDggNDh6bTAgMjg4bDE5MiAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtOTZjMC0yNi41LTIxLjUtNDgtNDgtNDhsLTgyLjcgMGMtOC41IDAtMTYuNi0zLjQtMjIuNi05LjRsLTguNi04LjZjLTktOS0yMS4yLTE0LjEtMzMuOS0xNC4xTDMzNiAyODhjLTI2LjUgMC00OCAyMS41LTQ4IDQ4bDAgMTI4YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4eiJdCiAgICB9OwogICAgZmFCb3hBcmNoaXZlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJveC1hcmNoaXZlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImFyY2hpdmUiXSwgImYxODciLCAiTTAgNjRDMCA0Ni4zIDE0LjMgMzIgMzIgMzJsNDQ4IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDE3LjctMTQuMyAzMi0zMiAzMkwzMiAxMjhDMTQuMyAxMjggMCAxMTMuNyAwIDk2TDAgNjR6TTMyIDE3Nmw0NDggMCAwIDI0MGMwIDM1LjMtMjguNyA2NC02NCA2NEw5NiA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0bDAtMjQwem0xNTIgNjRjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFBcmNoaXZlID0gZmFCb3hBcmNoaXZlOwogICAgZmFUZW50QXJyb3dEb3duVG9MaW5lID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRlbnQtYXJyb3ctZG93bi10by1saW5lIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1N2UiLCAiTTE4NSAxMjFjOS40LTkuNCA5LjQtMjQuNiAwLTMzLjlzLTI0LjYtOS40LTMzLjkgMGwtMzEgMzEgMC0xMDIuMUMxMjAgMi43IDEwOS4zLTggOTYtOFM3MiAyLjcgNzIgMTZsMCAxMDIuMS0zMS0zMUMzMS42IDc3LjcgMTYuNCA3Ny43IDcgODdTLTIuMyAxMTEuNiA3IDEyMWw3MiA3MmM5LjQgOS40IDI0LjYgOS40IDMzLjkgMGw3Mi03MnpNMTU1LjggMjYwLjZMMTMyLjEgNDQ4IDMyIDQ0OGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTIuOC0uNC01LjUtMS04TDU0OC4yIDI2MC43Yy0xLjItOS43LTYuOS0xOC40LTE1LjMtMjMuNEwzNjcuNCAxMzcuOWMtMTAuMi02LjEtMjIuOS02LjEtMzMuMSAuMUwxNzAuOSAyMzcuM2MtOC4zIDUuMS0xMy45IDEzLjctMTUuMSAyMy4zek00NDggNDQ4bC05Ny4xIDAgMC0xNDkuNGMwLTUuOSA0LjctMTAuNiAxMC42LTEwLjYgNCAwIDcuNyAyLjMgOS41IDUuOUw0NDggNDQ4eiJdCiAgICB9OwogICAgZmFRcmNvZGUgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicXJjb2RlIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYwMjkiLCAiTTY0IDE2MGw2NCAwIDAtNjQtNjQgMCAwIDY0ek0wIDgwQzAgNTMuNSAyMS41IDMyIDQ4IDMybDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhMMCA4MHpNNjQgNDE2bDY0IDAgMC02NC02NCAwIDAgNjR6TTAgMzM2YzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDk2IDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OGwtOTYgMGMtMjYuNSAwLTQ4LTIxLjUtNDgtNDhsMC05NnpNMzIwIDk2bDAgNjQgNjQgMCAwLTY0LTY0IDB6TTMwNCAzMmw5NiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhsLTk2IDBjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtOTZjMC0yNi41IDIxLjUtNDggNDgtNDh6TTI4OCAzNTJhMzIgMzIgMCAxIDEgMC02NCAzMiAzMiAwIDEgMSAwIDY0em0wIDY0YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzIgMTQuMy0zMiAzMi0zMnptOTYgMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyLTMyLTE0LjMtMzItMzJ6bTMyLTk2YTMyIDMyIDAgMSAxIDAtNjQgMzIgMzIgMCAxIDEgMCA2NHptLTMyIDMyYTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6Il0KICAgIH07CiAgICBmYURyYWdvbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkcmFnb24iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFsxMjgwMDldLCAiZjZkNSIsICJNMzUyIDEyNC41bC01MS45LTEzYy02LjUtMS42LTExLjMtNy4xLTEyLTEzLjhzMi44LTEzLjEgOC43LTE2LjFsNDAuOC0yMC40LTQzLjMtMzIuNWMtNS41LTQuMS03LjgtMTEuMy01LjYtMTcuOVMyOTcuMSAwIDMwNCAwTDQ2NCAwYzMwLjIgMCA1OC43IDE0LjIgNzYuOCAzOC40bDU3LjYgNzYuOGM2LjIgOC4zIDkuNiAxOC40IDkuNiAyOC44IDAgMjYuNS0yMS41IDQ4LTQ4IDQ4bC0yMS41IDBjLTE3IDAtMzMuMy02LjctNDUuMy0xOC43bC0xMy4zLTEzLjMtMzIgMCAwIDIxLjVjMCAyNC44IDEyLjggNDcuOSAzMy44IDYxLjFsMTA2LjYgNjYuNmMzMi4xIDIwLjEgNTEuNiA1NS4yIDUxLjYgOTMuMSAwIDYwLjYtNDkuMSAxMDkuOC0xMDkuOCAxMDkuOEwzMi4zIDUxMmMtMy4zIDAtNi42LS40LTkuNi0xLjQtOS4yLTIuOC0xNi43LTkuNi0yMC40LTE4LjYtMS4zLTMuMy0yLjItNi45LTIuMy0xMC43LS4yLTMuNyAuMy03LjMgMS4zLTEwLjcgMi44LTkuMiA5LjYtMTYuNyAxOC42LTIwLjQgMy0xLjIgNi4yLTIgOS41LTIuMkw0MzMuMyA0MTJjOC4zLS43IDE0LjctNy43IDE0LjctMTYuMSAwLTQuMy0xLjctOC40LTQuNy0xMS40bC00NC40LTQ0LjRjLTMwLTMwLTQ2LjktNzAuNy00Ni45LTExMy4xbDAtMTAyLjV6TTUxMiA3Mi4zYzAtLjEgMC0uMiAwLS4zczAtLjIgMC0uM2wwIC42em0tMS4zIDcuNEw0NjQuMyA2OC4xYy0uMiAxLjMtLjMgMi42LS4zIDMuOSAwIDEzLjMgMTAuNyAyNCAyNCAyNCAxMC42IDAgMTkuNS02LjggMjIuNy0xNi4zek0xMzAuOSAxMTYuNWMxNi4zLTE0LjUgNDAuNC0xNi4yIDU4LjUtNC4xbDEzMC42IDg3IDAgMjcuNWMwIDMyLjggOC40IDY0LjggMjQgOTNsLTIzMiAwYy02LjcgMC0xMi43LTQuMi0xNS0xMC40cy0uNS0xMy4zIDQuNi0xNy43TDE3MSAyMzIuMyAxOC40IDI1NS44Yy03IDEuMS0xMy45LTIuNi0xNi45LTlTLjEgMjMyLjggNS40IDIyOEwxMzAuOSAxMTYuNXoiXQogICAgfTsKICAgIGZhSG91cmdsYXNzRW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhvdXJnbGFzcy1lbmQiLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFs4OTg3LCAiaG91cmdsYXNzLTMiXSwgImYyNTMiLCAiTTMyIDBDMTQuMyAwIDAgMTQuMyAwIDMyUzE0LjMgNjQgMzIgNjRsMCAxMWMwIDQyLjQgMTYuOSA4My4xIDQ2LjkgMTEzLjFsNjcuOSA2Ny45LTY3LjkgNjcuOUM0OC45IDM1My45IDMyIDM5NC42IDMyIDQzN2wwIDExYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyMCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybDAtMTFjMC00Mi40LTE2LjktODMuMS00Ni45LTExMy4xbC02Ny45LTY3LjkgNjcuOS02Ny45YzMwLTMwIDQ2LjktNzAuNyA0Ni45LTExMy4xbDAtMTFjMTcuNyAwIDMyLTE0LjMgMzItMzJTMzY5LjcgMCAzNTIgMEwzMiAwek05NiA3NWwwLTExIDE5MiAwIDAgMTFjMCAyNS41LTEwLjEgNDkuOS0yOC4xIDY3LjlsLTY3LjkgNjcuOS02Ny45LTY3LjlDMTA2LjEgMTI0LjkgOTYgMTAwLjQgOTYgNzV6Il0KICAgIH07CiAgICBmYUhvdXJnbGFzczMyID0gZmFIb3VyZ2xhc3NFbmQ7CiAgICBmYUdyaXAgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZ3JpcCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWzU4MTE5LCAiZ3JpZC1ob3Jpem9udGFsIiwgImdyaXAtaG9yaXpvbnRhbCJdLCAiZjU4ZCIsICJNODggOTZjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek0yODAgMjI0bC00OCAwYy0yMi4xIDAtNDAtMTcuOS00MC00MGwwLTQ4YzAtMjIuMSAxNy45LTQwIDQwLTQwbDQ4IDBjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MHptMTkyIDBsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQwem0wIDE5MmwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwYzIyLjEgMCA0MCAxNy45IDQwIDQwbDAgNDhjMCAyMi4xLTE3LjkgNDAtNDAgNDB6TTI4MCAyODhjMjIuMSAwIDQwIDE3LjkgNDAgNDBsMCA0OGMwIDIyLjEtMTcuOSA0MC00MCA0MGwtNDggMGMtMjIuMSAwLTQwLTE3LjktNDAtNDBsMC00OGMwLTIyLjEgMTcuOS00MCA0MC00MGw0OCAwek04OCA0MTZsLTQ4IDBjLTIyLjEgMC00MC0xNy45LTQwLTQwbDAtNDhjMC0yMi4xIDE3LjktNDAgNDAtNDBsNDggMGMyMi4xIDAgNDAgMTcuOSA0MCA0MGwwIDQ4YzAgMjIuMS0xNy45IDQwLTQwIDQweiJdCiAgICB9OwogICAgZmFHcmlkSG9yaXpvbnRhbCA9IGZhR3JpcDsKICAgIGZhR3JpcEhvcml6b250YWwgPSBmYUdyaXA7CiAgICBmYUJvcmRlclRvcExlZnQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm9yZGVyLXRvcC1sZWZ0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbImJvcmRlci1zdHlsZSJdLCAiZjg1MyIsICJNMCA0NDhjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTM1MiAzNTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2TDAgNDQ4em0xMjggMGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMyLTE0LjMtMzItMzItMzItMzIgMTQuMy0zMiAzMnptMTI4IDBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMi0xNC4zLTMyLTMyLTMyLTMyIDE0LjMtMzIgMzJ6bTE2MCAzMmMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMi0zMiAxNC4zLTMyIDMyIDE0LjMgMzIgMzIgMzJ6TTM4NCAxOTJhMzIgMzIgMCAxIDAgNjQgMCAzMiAzMiAwIDEgMCAtNjQgMHptMzIgMTYwYTMyIDMyIDAgMSAwIDAtNjQgMzIgMzIgMCAxIDAgMCA2NHoiXQogICAgfTsKICAgIGZhQm9yZGVyU3R5bGUgPSBmYUJvcmRlclRvcExlZnQ7CiAgICBmYUxpc3RVbCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJsaXN0LXVsIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbImxpc3QtZG90cyJdLCAiZjBjYSIsICJNNDggMTQ0YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnpNMTkyIDY0Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDI4OCAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMyTDE5MiA2NHptMCAxNjBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMjg4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTI4OCAwem0wIDE2MGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwyODggMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMjg4IDB6TTQ4IDQ2NGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTk2IDI1NmE0OCA0OCAwIDEgMCAtOTYgMCA0OCA0OCAwIDEgMCA5NiAweiJdCiAgICB9OwogICAgZmFMaXN0RG90cyA9IGZhTGlzdFVsOwogICAgZmFQZW9wbGVSb2JiZXJ5ID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlb3BsZS1yb2JiZXJ5IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU1MzYiLCAiTTQ4OC4yIDU5LjFDNDc4LjEgOTkuNiA0NDEuNyAxMjggNDAwIDEyOHMtNzguMS0yOC40LTg4LjItNjguOUwzMDMgMjQuMkMyOTguOCA3LjEgMjgxLjQtMy4zIDI2NC4yIDFTMjM2LjcgMjIuNiAyNDEgMzkuOGw4LjcgMzQuOWMxMSA0NCA0MC4yIDc5LjYgNzguMyA5OS42TDMyOCA0ODBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTEyOCAxNiAwIDAgMTI4YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0zMDUuN2MzOC4xLTIwIDY3LjMtNTUuNiA3OC4zLTk5LjZMNTU5IDM5LjhjNC4zLTE3LjEtNi4xLTM0LjUtMjMuMy0zOC44UzUwMS4yIDcuMSA0OTcgMjQuMmwtOC43IDM0Ljl6TTQwMCA5NmE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6TTgwIDk2YTQ4IDQ4IDAgMSAwIDAtOTYgNDggNDggMCAxIDAgMCA5NnptLTggMzJjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgOTYgMCAuNiAwIDE5MS40YzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xMjggMTYgMCAwIDEyOGMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMjI3LjMgMTMgMjAuNWM1LjkgOS4yIDE2LjEgMTQuOSAyNyAxNC45bDQ4IDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJsLTMwLjQgMC0zNy40LTU4LjlDMTU3LjYgMTQyIDEzMi4xIDEyOCAxMDQuNyAxMjhMNzIgMTI4eiJdCiAgICB9OwogICAgZmFNb2JpbGVCdXR0b24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9iaWxlLWJ1dHRvbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgW10sICJmMTBiIiwgIk04MCAwQzQ0LjcgMCAxNiAyOC43IDE2IDY0bDAgMzg0YzAgMzUuMyAyOC43IDY0IDY0IDY0bDIyNCAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMzg0YzAtMzUuMy0yOC43LTY0LTY0LTY0TDgwIDB6TTE5MiA0NjRjLTE3LjcgMC0zMi0xNC4zLTMyLTMyczE0LjMtMzIgMzItMzIgMzIgMTQuMyAzMiAzMi0xNC4zIDMyLTMyIDMyeiJdCiAgICB9OwogICAgZmFBcnJvd0Rvd25BWiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhcnJvdy1kb3duLWEteiIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzb3J0LWFscGhhLWFzYyIsICJzb3J0LWFscGhhLWRvd24iXSwgImYxNWQiLCAiTTIzMC42IDM5MC42bC04MCA4MGMtMTIuNSAxMi41LTMyLjggMTIuNS00NS4zIDBsLTgwLTgwYy0xMi41LTEyLjUtMTIuNS0zMi44IDAtNDUuM3MzMi44LTEyLjUgNDUuMyAwTDk2IDM3MC43IDk2IDY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAzMDYuNyAyNS40LTI1LjRjMTIuNS0xMi41IDMyLjgtMTIuNSA0NS4zIDBzMTIuNSAzMi44IDAgNDUuM3ptMTgyLTM0MC45YzUwLjcgMTAxLjMgNzcuMyAxNTQuNyA4MCAxNjAgNy45IDE1LjggMS41IDM1LTE0LjMgNDIuOXMtMzUgMS41LTQyLjktMTQuM2wtNy4yLTE0LjMtODguNCAwLTcuMiAxNC4zYy03LjkgMTUuOC0yNy4xIDIyLjItNDIuOSAxNC4zcy0yMi4yLTI3LjEtMTQuMy00Mi45YzIuNy01LjMgMjkuMy01OC43IDgwLTE2MCA1LjQtMTAuOCAxNi41LTE3LjcgMjguNi0xNy43czIzLjIgNi44IDI4LjYgMTcuN3pNMzg0IDEzNS42bC0yMC4yIDQwLjQgNDAuNCAwLTIwLjItNDAuNHpNMjg4IDMyMGMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxMi45IDAgMjQuNiA3LjggMjkuNiAxOS44czIuMiAyNS43LTYuOSAzNC45TDM5Ny4zIDQxNiA0NDggNDE2YzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xMjggMGMtMTIuOSAwLTI0LjYtNy44LTI5LjYtMTkuOHMtMi4yLTI1LjcgNi45LTM0LjlsNzMuNC03My40LTUwLjcgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJ6Il0KICAgIH07CiAgICBmYVNvcnRBbHBoYUFzYyA9IGZhQXJyb3dEb3duQVo7CiAgICBmYVNvcnRBbHBoYURvd24gPSBmYUFycm93RG93bkFaOwogICAgZmFNb25leUJpbGwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibW9uZXktYmlsbCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJmMGQ2IiwgIk02NCA2NEMyOC43IDY0IDAgOTIuNyAwIDEyOEwwIDM4NGMwIDM1LjMgMjguNyA2NCA2NCA2NGwzODQgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTI1NmMwLTM1LjMtMjguNy02NC02NC02NEw2NCA2NHptMTkyIDk2YTk2IDk2IDAgMSAxIDAgMTkyIDk2IDk2IDAgMSAxIDAtMTkyem0xOTIgMjRjMCA0LjQtMy42IDguMS04IDcuNS0yOS0zLjYtNTEuOS0yNi42LTU1LjUtNTUuNS0uNS00LjQgMy4xLTggNy41LThsNDggMGM0LjQgMCA4IDMuNiA4IDhsMCA0OHpNNjQgMzI4YzAtNC40IDMuNi04LjEgOC03LjUgMjkgMy42IDUxLjkgMjYuNiA1NS41IDU1LjUgLjUgNC40LTMuMSA4LTcuNSA4bC00OCAwYy00LjQgMC04LTMuNi04LThsMC00OHptOC0xMzYuNWMtNC40IC41LTgtMy4xLTgtNy41bDAtNDhjMC00LjQgMy42LTggOC04bDQ4IDBjNC40IDAgOC4xIDMuNiA3LjUgOC0zLjYgMjktMjYuNiA1MS45LTU1LjUgNTUuNXptMzY4IDEyOWM0LjQtLjUgOCAzLjEgOCA3LjVsMCA0OGMwIDQuNC0zLjYgOC04IDhsLTQ4IDBjLTQuNCAwLTguMS0zLjYtNy41LTggMy42LTI5IDI2LjYtNTEuOSA1NS41LTU1LjV6Il0KICAgIH07CiAgICBmYUNpcmNsZU1pbnVzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNpcmNsZS1taW51cyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJtaW51cy1jaXJjbGUiXSwgImYwNTYiLCAiTTI1NiA1MTJhMjU2IDI1NiAwIDEgMCAwLTUxMiAyNTYgMjU2IDAgMSAwIDAgNTEyek0xNjggMjMybDE3NiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNzYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhTWludXNDaXJjbGUgPSBmYUNpcmNsZU1pbnVzOwogICAgZmFBcnJvd1BvaW50ZXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYXJyb3ctcG9pbnRlciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWyJtb3VzZS1wb2ludGVyIl0sICJmMjQ1IiwgIk03Ny4zIDIuNWM4LjEtNC4xIDE3LjktMy4yIDI1LjEgMi4zbDMyMCAyMzkuOWM4LjMgNi4yIDExLjYgMTcgOC40IDI2LjhzLTEyLjQgMTYuNC0yMi44IDE2LjRsLTE1Mi4zIDAgODguOSAxNzcuN2M3LjkgMTUuOCAxLjUgMzUtMTQuMyA0Mi45cy0zNSAxLjUtNDIuOS0xNC4zbC04OC45LTE3Ny43LTkxLjMgMTIxLjhjLTYuMiA4LjMtMTcgMTEuNi0yNi44IDguNFM2NCA0MzQuMyA2NCA0MjRMNjQgMjRjMC05LjEgNS4xLTE3LjQgMTMuMy0yMS41eiJdCiAgICB9OwogICAgZmFNb3VzZVBvaW50ZXIgPSBmYUFycm93UG9pbnRlcjsKICAgIGZhU3F1YXJlU2hhcmVOb2RlcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzcXVhcmUtc2hhcmUtbm9kZXMiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsic2hhcmUtYWx0LXNxdWFyZSJdLCAiZjFlMSIsICJNNjQgMzJDMjguNyAzMiAwIDYwLjcgMCA5NkwwIDQxNmMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTMyMGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMnpNMzY4IDE2MGMwIDM1LjMtMjguNyA2NC02NCA2NC0xNS40IDAtMjkuNS01LjQtNDAuNi0xNC41bC04NS4zIDQ2LjUgODUuMyA0Ni41YzExLTkuMSAyNS4yLTE0LjUgNDAuNi0xNC41IDM1LjMgMCA2NCAyOC43IDY0IDY0cy0yOC43IDY0LTY0IDY0LTY0LTI4LjctNjQtNjRjMC0yLjUgLjEtNC45IC40LTcuM0wxNTguNSAzMDBjLTExLjcgMTIuMy0yOC4yIDIwLTQ2LjUgMjAtMzUuMyAwLTY0LTI4LjctNjQtNjRzMjguNy02NCA2NC02NGMxOC4zIDAgMzQuOCA3LjcgNDYuNSAyMGw4MS45LTQ0LjdjLS4zLTIuNC0uNC00LjktLjQtNy4zIDAtMzUuMyAyOC43LTY0IDY0LTY0czY0IDI4LjcgNjQgNjR6Il0KICAgIH07CiAgICBmYVNoYXJlQWx0U3F1YXJlID0gZmFTcXVhcmVTaGFyZU5vZGVzOwogICAgZmFUYWJsZUNlbGxzTGFyZ2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidGFibGUtY2VsbHMtbGFyZ2UiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGgtbGFyZ2UiXSwgImYwMDkiLCAiTTM4NCA5NmwtMTI4IDAgMCAxMjggMTI4IDAgMC0xMjh6bTY0IDEyOGwwIDE5MmMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgOTZDMCA2MC43IDI4LjcgMzIgNjQgMzJsMzIwIDBjMzUuMyAwIDY0IDI4LjcgNjQgNjRsMCAxMjh6TTY0IDI4OGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHptMTI4LTY0bDAtMTI4LTEyOCAwIDAgMTI4IDEyOCAwem02NCA2NGwwIDEyOCAxMjggMCAwLTEyOC0xMjggMHoiXQogICAgfTsKICAgIGZhVGhMYXJnZSA9IGZhVGFibGVDZWxsc0xhcmdlOwogICAgZmFDYXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2F0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbMTI4MDA4XSwgImY2YmUiLCAiTTY0IDk2YzUzIDAgOTYgNDMgOTYgOTZsMCA4NS44YzI5LjctNDQuNyA3Ny44LTc2LjIgMTMzLjQtODQgMjUuNiA2MCA4NS4yIDEwMi4xIDE1NC42IDEwMi4xIDEwLjkgMCAyMS42LTEuMSAzMi0zLjFMNDgwIDQ4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTE0MC44LTEzNiAxMDguOCA1NiAwYzE3LjcgMCAzMiAxNC4zIDMyIDMycy0xNC4zIDMyLTMyIDMybC0xNDQgMGMtNTMgMC05Ni00My05Ni05NmwwLTIyNGMwLTE2LjYtMTIuNi0zMC4yLTI4LjctMzEuOGwtNi42LS4zQzQ0LjYgMTU4LjIgMzIgMTQ0LjYgMzIgMTI4IDMyIDExMC4zIDQ2LjMgOTYgNjQgOTZ6TTUzMy44IDMuMkM1NDQuMi01LjUgNTYwIDEuOSA1NjAgMTUuNUw1NjAgMTI4YzAgNjEuOS01MC4xIDExMi0xMTIgMTEyUzMzNiAxODkuOSAzMzYgMTI4bDAtMTEyLjVjMC0xMy42IDE1LjgtMjEgMjYuMi0xMi4zTDQxNiA0OCA0ODAgNDggNTMzLjggMy4yek00MDAgMTA4YTIwIDIwIDAgMSAwIDAgNDAgMjAgMjAgMCAxIDAgMC00MHptOTYgMGEyMCAyMCAwIDEgMCAwIDQwIDIwIDIwIDAgMSAwIDAtNDB6Il0KICAgIH07CiAgICBmYUNhbGVuZGFyV2VlayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjYWxlbmRhci13ZWVrIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImY3ODQiLCAiTTEyOCAwYzE3LjcgMCAzMiAxNC4zIDMyIDMybDAgMzIgMTI4IDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnMzMiAxNC4zIDMyIDMybDAgMzIgMzIgMGMzNS4zIDAgNjQgMjguNyA2NCA2NGwwIDI4OGMwIDM1LjMtMjguNyA2NC02NCA2NEw2NCA0ODBjLTM1LjMgMC02NC0yOC43LTY0LTY0TDAgMTI4QzAgOTIuNyAyOC43IDY0IDY0IDY0bDMyIDAgMC0zMmMwLTE3LjcgMTQuMy0zMiAzMi0zMnptMCAyNTZjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTkyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJsMC02NGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtMTkyIDB6Il0KICAgIH07CiAgICBmYUNvZGVDb21wYXJlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImNvZGUtY29tcGFyZSIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMTNhIiwgIk0xOTguOCAxLjhjOS0zLjcgMTkuMy0xLjcgMjYuMiA1LjJsNTYgNTZjOS40IDkuNCA5LjQgMjQuNiAwIDMzLjlsLTU2IDU2Yy02LjkgNi45LTE3LjIgOC45LTI2LjIgNS4yUzE4NCAxNDUuNyAxODQgMTM2bDAtMjQtMjQgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJsMCAyMTQuN2MyOC4zIDEyLjMgNDggNDAuNSA0OCA3My4zIDAgNDQuMi0zNS44IDgwLTgwIDgwcy04MC0zNS44LTgwLTgwYzAtMzIuOCAxOS43LTYxIDQ4LTczLjNMNjQgMTQ0YzAtNTMgNDMtOTYgOTYtOTZsMjQgMCAwLTI0YzAtOS43IDUuOC0xOC41IDE0LjgtMjIuMnpNMzkyIDgwYTI0IDI0IDAgMSAwIDQ4IDAgMjQgMjQgMCAxIDAgLTQ4IDB6bS04IDczLjNjLTI4LjMtMTIuMy00OC00MC41LTQ4LTczLjMgMC00NC4yIDM1LjgtODAgODAtODBzODAgMzUuOCA4MCA4MGMwIDMyLjgtMTkuNyA2MS00OCA3My4zTDQ0OCAzNjhjMCA1My00MyA5Ni05NiA5NmwtMjQgMCAwIDI0YzAgOS43LTUuOCAxOC41LTE0LjggMjIuMnMtMTkuMyAxLjctMjYuMi01LjJsLTU2LTU2Yy05LjQtOS40LTkuNC0yNC42IDAtMzMuOWw1Ni01NmM2LjktNi45IDE3LjItOC45IDI2LjItNS4yUzMyOCAzNjYuMyAzMjggMzc2bDAgMjQgMjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTIxNC43ek03MiA0MzJhMjQgMjQgMCAxIDAgNDggMCAyNCAyNCAwIDEgMCAtNDggMHoiXQogICAgfTsKICAgIGZhUm9hZENpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJvYWQtY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU1NjYiLCAiTTI4Ny45IDMybC03Ni4yIDBjLTI5LjQgMC01NS4xIDIwLjEtNjIuMSA0OC42TDY1LjQgNDIwLjVDNTcuOSA0NTAuNyA4MC44IDQ4MCAxMTIgNDgwbDIwOS40IDBjLTExLjItMjQuNC0xNy40LTUxLjQtMTcuNC04MCAwLTI4LjYgNi4yLTU1LjcgMTcuNC04MC0uNSAwLTEgMC0xLjYgMC0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCA0OS4yYzM1LjItNDAgODYuNy02NS4yIDE0NC4yLTY1LjIgOSAwIDE3LjggLjYgMjYuNCAxLjhsLTMyLTEyOS4yQzQ4My40IDUyLjEgNDU3LjggMzIgNDI4LjMgMzJsLTc2LjUgMCAwIDY0YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtNjR6TTQ5NiA1NDRhMTQ0IDE0NCAwIDEgMCAwLTI4OCAxNDQgMTQ0IDAgMSAwIDAgMjg4em01OS4zLTE4MC43bC0zNi43IDM2LjcgMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42eiJdCiAgICB9OwogICAgZmFQYWxsZXQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGFsbGV0IiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImY0ODIiLCAiTTMyIDMyMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwzMiAwIDAgNjQtMzIgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmw1MTIgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtMzIgMCAwLTY0IDMyIDBjMTcuNyAwIDMyLTE0LjMgMzItMzJzLTE0LjMtMzItMzItMzJMMzIgMzIwem05NiA2NGwxMjggMCAwIDY0LTEyOCAwIDAtNjR6bTE5MiAwbDEyOCAwIDAgNjQtMTI4IDAgMC02NHoiXQogICAgfTsKICAgIGZhQ2FrZUNhbmRsZXMgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FrZS1jYW5kbGVzIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbMTI3ODc0LCAiYmlydGhkYXktY2FrZSIsICJjYWtlIl0sICJmMWZkIiwgIk04Ni40LTEwLjVMNjEuOCAzMS42QzU4IDM4LjEgNTYgNDUuNiA1NiA1My4yTDU2IDU2YzAgMjIuMSAxNy45IDQwIDQwIDQwczQwLTE3LjkgNDAtNDBsMC0yLjhjMC03LjYtMi0xNS01LjgtMjEuNkwxMDUuNi0xMC41Yy0yLTMuNC01LjctNS41LTkuNi01LjVzLTcuNiAyLjEtOS42IDUuNXptMTI4IDBMMTg5LjggMzEuNmMtMy44IDYuNS01LjggMTQtNS44IDIxLjZsMCAyLjhjMCAyMi4xIDE3LjkgNDAgNDAgNDBzNDAtMTcuOSA0MC00MGwwLTIuOGMwLTcuNi0yLTE1LTUuOC0yMS42TDIzMy42LTEwLjVjLTItMy40LTUuNy01LjUtOS42LTUuNXMtNy42IDIuMS05LjYgNS41ek0zMTcuOCAzMS42Yy0zLjggNi41LTUuOCAxNC01LjggMjEuNmwwIDIuOGMwIDIyLjEgMTcuOSA0MCA0MCA0MHM0MC0xNy45IDQwLTQwbDAtMi44YzAtNy42LTItMTUtNS44LTIxLjZMMzYxLjYtMTAuNWMtMi0zLjQtNS43LTUuNS05LjYtNS41cy03LjYgMi4xLTkuNiA1LjVMMzE3LjggMzEuNnpNMTI4IDE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDUzLjVDMjYuNyAyMjYuNiAwIDI2Mi4yIDAgMzA0bDAgMjAuOGMyMC45IDEuMyA0MS42IDcuMyA2MC4zIDE4bDcuMSA0LjFjMjYuMyAxNSA1OC45IDEzLjQgODMuNi00LjIgNDMuNy0zMS4yIDEwMi4zLTMxLjIgMTQ2IDAgMjQuNiAxNy42IDU3LjMgMTkuMyA4My42IDQuMmw3LjEtNC4xYzE4LjctMTAuNyAzOS4zLTE2LjcgNjAuMy0xOGwwLTIwLjhjMC00MS44LTI2LjctNzcuNC02NC05MC41bDAtNTMuNWMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDQ4LTY0IDAgMC00OHpNNDQ4IDM3M2MtMTIuNyAxLjItMjUuMSA1LTM2LjUgMTEuNWwtNy4xIDQuMWMtNDIuNiAyNC4zLTk1LjQgMjEuNy0xMzUuMy02LjgtMjctMTkuMy02My4yLTE5LjMtOTAuMiAwLTM5LjkgMjguNS05Mi43IDMxLjItMTM1LjMgNi44bC03LjEtNC4xQzI1LjEgMzc4IDEyLjcgMzc0LjEgMCAzNzNsMCA3NWMwIDM1LjMgMjguNyA2NCA2NCA2NGwzMjAgMGMzNS4zIDAgNjQtMjguNyA2NC02NGwwLTc1eiJdCiAgICB9OwogICAgZmFCaXJ0aGRheUNha2UgPSBmYUNha2VDYW5kbGVzOwogICAgZmFDYWtlID0gZmFDYWtlQ2FuZGxlczsKICAgIGZhQnVnU2xhc2ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYnVnLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImU0OTAiLCAiTTctMjQuOWM5LjQtOS40IDI0LjYtOS40IDMzLjkgMEwyNDEuOCAxNzYgMzQ0IDE3NmMxNC4yIDAgMjcuNyAyLjggNDAgOGwxMDguOC04MS42YzE0LjEtMTAuNiAzNC4yLTcuNyA0NC44IDYuNHM3LjcgMzQuMi02LjQgNDQuOGwtOTcuOCA3My4zYzUuMyA4LjkgOS4zIDE4LjcgMTEuOCAyOS4xbDk4LjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMnMtMTQuMyAzMi0zMiAzMmwtOTYgMCAwIDMyYzAgOS41LS44IDE4LjctMi40IDI3LjhMNTY5IDUwMy4xYzkuNCA5LjQgOS40IDI0LjYgMCAzMy45cy0yNC42IDkuNC0zMy45IDBMNyA5LjFDLTIuMy0uMy0yLjMtMTUuNSA3LTI0Ljl6TTM5OC4yIDQ2OGMtMjMuMiAyMi4xLTUzIDM3LjItODYuMiA0Mi4ybDAtMTI4LjQgODYuMiA4Ni4yek0yNjQgMzMzLjhsMCAxNzYuNGMtNTEuMi03LjctOTQuNS0zOS43LTExNy43LTgzLjlMODMuMiA0NzMuNmMtMTQuMSAxMC42LTM0LjIgNy43LTQ0LjgtNi40cy03LjctMzQuMiA2LjQtNDQuOGw4My40LTYyLjVjLS4xLTIuNi0uMi01LjItLjItNy45bDAtMzItOTYgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJzMTQuMy0zMiAzMi0zMmw5OC44IDBjMy4zLTEzLjkgOS4zLTI2LjcgMTcuNi0zNy44TDI2NCAzMzMuOHpNMzU1LjYgMTI4bC04Mi40IDAtNzIuMy03Mi4zQzIxNi4xIDIyLjggMjQ5LjQgMCAyODggMCAzNDEgMCAzODQgNDMgMzg0IDk2bDAgMy42YzAgMTUuNy0xMi43IDI4LjQtMjguNCAyOC40eiJdCiAgICB9OwogICAgZmFUYXJwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhcnAiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZTU3YiIsICJNNDQ4IDY0YzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMTQ5LjVjMCAxNy02LjcgMzMuMy0xOC43IDQ1LjNMMzg2LjcgNDI5LjNjLTEyIDEyLTI4LjMgMTguNy00NS4zIDE4LjdMNjQgNDQ4Yy0zNS4zIDAtNjQtMjguNy02NC02NEwwIDEyOEMwIDkyLjcgMjguNyA2NCA2NCA2NGwzODQgMHptNS41IDIwOEwzNjAgMjcyYy0xMy4zIDAtMjQgMTAuNy0yNCAyNGwwIDkzLjUgMTE3LjUtMTE3LjV6TTk2IDE5MmEzMiAzMiAwIDEgMCAwLTY0IDMyIDMyIDAgMSAwIDAgNjR6Il0KICAgIH07CiAgICBmYURpYWdyYW1QcmVkZWNlc3NvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJkaWFncmFtLXByZWRlY2Vzc29yIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzciLCAiTTI4OS4yIDEzNy45YzIuNS02IDguMy05LjkgMTQuOC05LjlsNDAgMCAwLTI0YzAtMTMuMy0xMC43LTI0LTI0LTI0bC05OCAwYzEuMyA1LjEgMiAxMC41IDIgMTZsMCA2NGMwIDM1LjMtMjguNyA2NC02NCA2NGwtOTYgMGMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA5NkMwIDYwLjcgMjguNyAzMiA2NCAzMmwyNTYgMGMzOS44IDAgNzIgMzIuMiA3MiA3MmwwIDI0IDQwIDBjNi41IDAgMTIuMyAzLjkgMTQuOCA5LjlzMS4xIDEyLjktMy41IDE3LjRsLTY0IDY0Yy02LjIgNi4yLTE2LjQgNi4yLTIyLjYgMGwtNjQtNjRjLTQuNi00LjYtNS45LTExLjUtMy41LTE3LjR6TTM4NCAzNTJsLTMyMCAwIDAgNjQgMzIwIDAgMC02NHptNjQgNjRjMCAzNS4zLTI4LjcgNjQtNjQgNjRMNjQgNDgwYy0zNS4zIDAtNjQtMjguNy02NC02NGwwLTY0YzAtMzUuMyAyOC43LTY0IDY0LTY0bDMyMCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgNjR6Il0KICAgIH07CiAgICBmYUZhY2VGbHVzaGVkMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmYWNlLWZsdXNoZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg1NjMsICJmbHVzaGVkIl0sICJmNTc5IiwgIk0wIDI1NmEyNTYgMjU2IDAgMSAxIDUxMiAwIDI1NiAyNTYgMCAxIDEgLTUxMiAwek0xNjggMzkyYzAgMTMuMyAxMC43IDI0IDI0IDI0bDEyOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC0xMjggMGMtMTMuMyAwLTI0IDEwLjctMjQgMjR6bS04LTk2YTcyIDcyIDAgMSAwIDAtMTQ0IDcyIDcyIDAgMSAwIDAgMTQ0em0yNjQtNzJhNzIgNzIgMCAxIDAgLTE0NCAwIDcyIDcyIDAgMSAwIDE0NCAwem0tMjg4IDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHptMTkyIDBhMjQgMjQgMCAxIDEgNDggMCAyNCAyNCAwIDEgMSAtNDggMHoiXQogICAgfTsKICAgIGZhRmx1c2hlZDIgPSBmYUZhY2VGbHVzaGVkMjsKICAgIGZhRGlhZ3JhbU5leHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZGlhZ3JhbS1uZXh0IiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImU0NzYiLCAiTTM4NCAyMjRjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NEw2NCAzMkMyOC43IDMyIDAgNjAuNyAwIDk2bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMTI4IDAgMCA2NC0zMiAwYy02LjUgMC0xMi4zIDMuOS0xNC44IDkuOXMtMS4xIDEyLjkgMy41IDE3LjRsNjQgNjRjNi4yIDYuMiAxNi40IDYuMiAyMi42IDBsNjQtNjRjNC42LTQuNiA1LjktMTEuNSAzLjUtMTcuNFMyOTQuNSAyODggMjg4IDI4OGwtMzIgMCAwLTY0IDEyOCAwek02NCAyODhjLTM1LjMgMC02NCAyOC43LTY0IDY0bDAgNjRjMCAzNS4zIDI4LjcgNjQgNjQgNjRsMzIwIDBjMzUuMyAwIDY0LTI4LjcgNjQtNjRsMC02NGMwLTM1LjMtMjguNy02NC02NC02NGwtMzQgMGM1LjYgMjEuNy0uNSA0NS4xLTE2LjcgNjEuM2wtNjQgNjRjLTI1IDI1LTY1LjUgMjUtOTAuNSAwbC02NC02NEM5OC42IDMzMy4xIDkyLjQgMzA5LjcgOTggMjg4bC0zNCAweiJdCiAgICB9OwogICAgZmFBbmNob3JDaXJjbGVYbWFyayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJhbmNob3ItY2lyY2xlLXhtYXJrIiwKICAgICAgaWNvbjogWzY0MCwgNTEyLCBbXSwgImU0YWMiLCAiTTMyMC41IDk2YTMyIDMyIDAgMSAxIC02NCAwIDMyIDMyIDAgMSAxIDY0IDB6bS0zMi05NmMtNTMgMC05NiA0My05NiA5NiAwIDQxLjggMjYuNyA3Ny40IDY0IDkwLjVsMCAyNTcuOWMtNjIuOS0xNC4zLTExMC4yLTY5LjctMTExLjktMTM2LjVsMTYuMSAxNC4xYzEwIDguNyAyNS4xIDcuNyAzMy45LTIuM3M3LjctMjUuMS0yLjMtMzMuOWwtNjQtNTZjLTktNy45LTIyLjYtNy45LTMxLjYgMGwtNjQgNTZjLTEwIDguNy0xMSAyMy45LTIuMyAzMy45czIzLjkgMTEgMzMuOSAyLjNsMTYuMi0xNC4yYzIuMSAxMTMuMSA5NC40IDIwNC4xIDIwOCAyMDQuMSAxNi42IDAgMzIuNy0xLjkgNDguMi01LjYtMjAuMy0zMC41LTMyLjItNjctMzIuMi0xMDYuNCAwLTI3LjMgNS43LTUzLjMgMTYtNzYuOWwwLTEzNi42YzM3LjMtMTMuMiA2NC00OC43IDY0LTkwLjUgMC01My00My05Ni05Ni05NnptMjA4IDU0NGExNDQgMTQ0IDAgMSAwIDAtMjg4IDE0NCAxNDQgMCAxIDAgMCAyODh6bTU5LjMtMTgwLjdsLTM2LjcgMzYuNyAzNi43IDM2LjdjNi4yIDYuMiA2LjIgMTYuNCAwIDIyLjZzLTE2LjQgNi4yLTIyLjYgMGwtMzYuNy0zNi43LTM2LjcgMzYuN2MtNi4yIDYuMi0xNi40IDYuMi0yMi42IDBzLTYuMi0xNi40IDAtMjIuNmwzNi43LTM2LjctMzYuNy0zNi43Yy02LjItNi4yLTYuMi0xNi40IDAtMjIuNnMxNi40LTYuMiAyMi42IDBsMzYuNyAzNi43IDM2LjctMzYuN2M2LjItNi4yIDE2LjQtNi4yIDIyLjYgMHM2LjIgMTYuNCAwIDIyLjZ6Il0KICAgIH07CiAgICBmYVBlcnNvbkNpcmNsZVhtYXJrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInBlcnNvbi1jaXJjbGUteG1hcmsiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTU0MyIsICJNMjgwIDI0YTU2IDU2IDAgMSAwIC0xMTIgMCA1NiA1NiAwIDEgMCAxMTIgMHptMjQgMjEyLjdMMzQxIDI4Ni42YzEyLjgtMTcuNSAyOC41LTMyLjcgNDYuMy00NWwtNTYuMi03NS43QzMwNiAxMzIgMjY2LjMgMTEyIDIyNCAxMTJzLTgyIDIwLTEwNy4yIDUzLjlsLTcwLjUgOTVjLTEwLjUgMTQuMi03LjYgMzQuMiA2LjYgNDQuOHMzNC4yIDcuNiA0NC44LTYuNkwxNDQgMjM2LjcgMTQ0IDUxMmMwIDE3LjcgMTQuMyAzMiAzMiAzMnMzMi0xNC4zIDMyLTMybDAtMTYwYzAtOC44IDcuMi0xNiAxNi0xNnMxNiA3LjIgMTYgMTZsMCAxNjBjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTI3NS4zek00OTYgNTQ0YTE0NCAxNDQgMCAxIDAgMC0yODggMTQ0IDE0NCAwIDEgMCAwIDI4OHptMjIuNi0xNDRsMzYuNyAzNi43YzYuMiA2LjIgNi4yIDE2LjQgMCAyMi42cy0xNi40IDYuMi0yMi42IDBsLTM2LjctMzYuNy0zNi43IDM2LjdjLTYuMiA2LjItMTYuNCA2LjItMjIuNiAwcy02LjItMTYuNCAwLTIyLjZsMzYuNy0zNi43LTM2LjctMzYuN2MtNi4yLTYuMi02LjItMTYuNCAwLTIyLjZzMTYuNC02LjIgMjIuNiAwbDM2LjcgMzYuNyAzNi43LTM2LjdjNi4yLTYuMiAxNi40LTYuMiAyMi42IDBzNi4yIDE2LjQgMCAyMi42TDUxOC42IDQwMHoiXQogICAgfTsKICAgIGZhU3BhID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInNwYSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJmNWJiIiwgIk0xNjkuNyAyMjcuNWMzNC4zIDE4LjcgNjQuNSA0NC4xIDg4LjggNzQuNSAxMS4xIDEzLjkgMjEgMjguOSAyOS40IDQ0LjggOC41LTE1LjkgMTguMy0zMC44IDI5LjQtNDQuOCAyNC4zLTMwLjUgNTQuNS01NS45IDg4LjgtNzQuNSA0MS43LTIyLjcgODkuNC0zNS41IDEzOS43LTM1LjVsOS45IDBjMTEuMSAwIDIwLjEgOSAyMC4xIDIwLjEgMCAxNDgtMTE5LjkgMjY3LjktMjY3LjkgMjY3LjlsLTQwLjIgMEMxMTkuOSA0ODAgMCAzNjAuMSAwIDIxMi4xIDAgMjAxIDkgMTkyIDIwLjEgMTkybDkuOSAwYzUwLjQgMCA5OC4xIDEyLjggMTM5LjcgMzUuNXpNMzAzLjkgMzhjMTYuOSAxNS45IDYxLjQgNjMuNCA4OSAxNDIuMy00MC4xIDIwLjItNzUuOCA0OC4yLTEwNC45IDgyLjEtMjkuMi0zMy45LTY0LjgtNjEuOC0xMDQuOS04Mi4xIDI3LjYtNzguOSA3Mi4yLTEyNi40IDg5LTE0Mi4zIDQuMy00LjEgMTAtNiAxNS45LTZzMTEuNiAyIDE1LjkgNnoiXQogICAgfTsKICAgIGZhQmFyc1Byb2dyZXNzID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImJhcnMtcHJvZ3Jlc3MiLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFsidGFza3MtYWx0Il0sICJmODI4IiwgIk0yODggMTYwbDk2IDAgMC02NC05NiAwIDAgNjR6TTAgMTYwTDAgODBDMCA1My41IDIxLjUgMzIgNDggMzJsMzUyIDBjMjYuNSAwIDQ4IDIxLjUgNDggNDhsMCA5NmMwIDI2LjUtMjEuNSA0OC00OCA0OEw0OCAyMjRjLTI2LjUgMC00OC0yMS41LTQ4LTQ4bDAtMTZ6TTE2MCA0MTZsMjI0IDAgMC02NC0yMjQgMCAwIDY0ek0wIDQxNmwwLTgwYzAtMjYuNSAyMS41LTQ4IDQ4LTQ4bDM1MiAwYzI2LjUgMCA0OCAyMS41IDQ4IDQ4bDAgOTZjMCAyNi41LTIxLjUgNDgtNDggNDhMNDggNDgwYy0yNi41IDAtNDgtMjEuNS00OC00OGwwLTE2eiJdCiAgICB9OwogICAgZmFUYXNrc0FsdCA9IGZhQmFyc1Byb2dyZXNzOwogICAgZmFIZWFydENpcmNsZUNoZWNrID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImhlYXJ0LWNpcmNsZS1jaGVjayIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgW10sICJlNGZkIiwgIk0yNDEgODcuMWwxNSAyMC43IDE1LTIwLjdDMjk2IDUyLjUgMzM2LjIgMzIgMzc4LjkgMzIgNDUyLjQgMzIgNTEyIDkxLjYgNTEyIDE2NS4xbDAgMi42YzAgMTcuNi0zLjQgMzUuNi05LjUgNTMuNy0yMS44LTguNi00NS42LTEzLjQtNzAuNS0xMy40LTEwNiAwLTE5MiA4Ni0xOTIgMTkyIDAgMjguNSA2LjIgNTUuNiAxNy40IDgwLS41IDAtLjkgMC0xLjQgMC0xNS41IDAtMzAuOC00LjYtNDMuMS0xNC4xLTczLTU1LjctMjEyLjktMTg2LTIxMi45LTI5OC4ybDAtMi42QzAgOTEuNiA1OS42IDMyIDEzMy4xIDMyIDE3NS44IDMyIDIxNiA1Mi41IDI0MSA4Ny4xek0yODggNDAwYTE0NCAxNDQgMCAxIDEgMjg4IDAgMTQ0IDE0NCAwIDEgMSAtMjg4IDB6bTIwMS40LTYwLjljLTcuMS01LjItMTcuMi0zLjYtMjIuNCAzLjVsLTUzIDcyLjktMjYuOC0yNi44Yy02LjItNi4yLTE2LjQtNi4yLTIyLjYgMHMtNi4yIDE2LjQgMCAyMi42bDQwIDQwYzMuMyAzLjMgNy45IDUgMTIuNiA0LjZzOC45LTIuOCAxMS43LTYuNWw2NC04OGM1LjItNy4xIDMuNi0xNy4yLTMuNS0yMi4zeiJdCiAgICB9OwogICAgZmFNYXJzU3Ryb2tlUmlnaHQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAibWFycy1zdHJva2UtcmlnaHQiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFs5ODk3LCAibWFycy1zdHJva2UtaCJdLCAiZjIyYiIsICJNMzIwLjUgMjU2YTExMiAxMTIgMCAxIDAgLTIyNCAwIDExMiAxMTIgMCAxIDAgMjI0IDB6TTIwOC41IDgwYzg2LjMgMCAxNTguMSA2Mi4xIDE3My4xIDE0NC4xIDEtLjEgMS45LS4xIDIuOS0uMWwxNiAwIDAtMzJjMC0xNy43IDE0LjMtMzIgMzItMzJzMzIgMTQuMyAzMiAzMmwwIDMyIDYxLjQgMC0yMi40LTI4Yy0xMS0xMy44LTguOC0zMy45IDUtNDVzMzMuOS04LjggNDUgNWw2NCA4MGM5LjMgMTEuNyA5LjMgMjguMyAwIDQwbC02NCA4MGMtMTEgMTMuOC0zMS4yIDE2LTQ1IDVzLTE2LTMxLjItNS00NWwyMi40LTI4LTYxLjQgMCAwIDMyYzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtMzItMTYgMGMtMSAwLTEuOSAwLTIuOS0uMS0xNSA4Mi04Ni44IDE0NC4xLTE3My4xIDE0NC4xLTk3LjIgMC0xNzYtNzguOC0xNzYtMTc2czc4LjgtMTc2IDE3Ni0xNzZ6Il0KICAgIH07CiAgICBmYU1hcnNTdHJva2VIID0gZmFNYXJzU3Ryb2tlUmlnaHQ7CiAgICBmYVRvd2VyT2JzZXJ2YXRpb24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAidG93ZXItb2JzZXJ2YXRpb24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTU4NiIsICJNMjA5LjcgMy40YzktNC41IDE5LjYtNC41IDI4LjYgMGwxNjAgODBjMTUuOCA3LjkgMjIuMiAyNy4xIDE0LjMgNDIuOS01LjYgMTEuMi0xNi45IDE3LjctMjguNiAxNy43bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJsLTEzIDAgMzIgMTkyIDQ1IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJMMzIgNTEyYy0xNy43IDAtMzItMTQuMy0zMi0zMnMxNC4zLTMyIDMyLTMybDQ1IDAgMzItMTkyLTEzIDBjLTE3LjcgMC0zMi0xNC4zLTMyLTMybDAtODBjLTExLjcgMC0yMy02LjUtMjguNi0xNy43LTcuOS0xNS44LTEuNS0zNSAxNC4zLTQyLjlsMTYwLTgwek0zMTAuNyA0NDhsLTg2LjctNjEuOS04Ni43IDYxLjkgMTczLjQgMHptLTE1My0xOTJsLTMuNSAyMS4yIDY5LjkgNDkuOSA2OS45LTQ5LjktMy41LTIxLjItMTMyLjcgMHptLTEyLjMgNzMuOWwtMTAuMSA2MC42IDQ3LjUtMzMuOS0zNy40LTI2Ljd6bTExOS45IDI2LjdsNDcuNSAzMy45LTEwLjEtNjAuNi0zNy40IDI2Ljd6TTE1MiAxMjhjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsMTQ0IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTE0NCAweiJdCiAgICB9OwogICAgZmFTdGVybGluZ1NpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rlcmxpbmctc2lnbiIsCiAgICAgIGljb246IFszODQsIDUxMiwgWzE2MywgImdicCIsICJwb3VuZC1zaWduIl0sICJmMTU0IiwgIk05MS4zIDI4OGwtMzQuOCAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDIxLjQgMEMzNy4zIDE0Ny4zIDEwNS4xIDQyIDIwNy42IDQybDguMiAwYzMzLjYgMCA2Ni4yIDExLjMgOTIuNSAzMi4ybDE2LjEgMTIuN2MxMy45IDExIDE2LjIgMzEuMSA1LjIgNDVzLTMxLjEgMTYuMi00NSA1LjJsLTE2LjEtMTIuN2MtMTUtMTEuOS0zMy42LTE4LjQtNTIuOC0xOC40bC04LjIgMGMtNTcuMyAwLTk0LjcgNTkuOS02OS43IDExMS40IDMuNiA3LjQgNi42IDE0LjkgOS4xIDIyLjZsMTQ5LjUgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTQxLjIgMGMxIDM1LjMtOC43IDcwLjYtMjguOSAxMDAuOWwtMTguMSAyNy4xIDIxMi4yIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTI3MiAwYy0xMS44IDAtMjIuNi02LjUtMjguMi0xNi45cy01LTIzIDEuNi0zMi45bDUxLjItNzYuOGMxMy4xLTE5LjYgMTkuMi00Mi42IDE4LjItNjUuNHoiXQogICAgfTsKICAgIGZhR2JwID0gZmFTdGVybGluZ1NpZ247CiAgICBmYVBvdW5kU2lnbiA9IGZhU3RlcmxpbmdTaWduOwogICAgZmFGYXVjZXREcmlwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImZhdWNldC1kcmlwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4Njg4XSwgImUwMDYiLCAiTTIyNCAzMmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJMOTYgNjRDNzguMyA2NCA2NCA3OC4zIDY0IDk2czE0LjMgMzIgMzIgMzJsOTYgMCAwIDY0LTE4LjcgMGMtOC41IDAtMTYuNiAzLjQtMjIuNiA5LjRMMTI4IDIyNCAzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMTAwLjEgMGMyMC4yIDI5IDUzLjkgNDggOTEuOSA0OHM3MS43LTE5IDkxLjktNDhsMzYuMSAwYzE3LjcgMCAzMiAxNC4zIDMyIDMyczE0LjMgMzIgMzIgMzJsNjQgMGMxNy43IDAgMzItMTQuMyAzMi0zMiAwLTg4LjQtNzEuNi0xNjAtMTYwLTE2MGwtMzIgMC0yMi42LTIyLjZjLTYtNi0xNC4xLTkuNC0yMi42LTkuNGwtMTguNyAwIDAtNjQgOTYgMGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMmwtOTYgMGMwLTE3LjctMTQuMy0zMi0zMi0zMnpNNDM2LjggNDU1LjRsLTE4LjIgNDIuNGMtMS44IDQuMS0yLjcgOC42LTIuNyAxMy4xbDAgMS4yYzAgMTcuNyAxNC4zIDMyIDMyIDMyczMyLTE0LjMgMzItMzJsMC0xLjJjMC00LjUtLjktOC45LTIuNy0xMy4xbC0xOC4yLTQyLjRjLTEuOS00LjUtNi4zLTcuNC0xMS4yLTcuNHMtOS4yIDIuOS0xMS4yIDcuNHoiXQogICAgfTsKICAgIGZhQ2lyY2xlSW5mbyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaXJjbGUtaW5mbyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJpbmZvLWNpcmNsZSJdLCAiZjA1YSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIyNCAxNjBhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptLTggNjRsNDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNGwwIDg4IDggMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtODAgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwyNCAwIDAtNjQtMjQgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHoiXQogICAgfTsKICAgIGZhSW5mb0NpcmNsZSA9IGZhQ2lyY2xlSW5mbzsKICAgIGZhRmVhdGhlciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmZWF0aGVyIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI5NzE4XSwgImY1MmQiLCAiTTM1MiAwYzQxIDAgODAuMyAxNi4zIDEwOS4yIDQ1LjJsNS41IDUuNWMyOSAyOSA0NS4zIDY4LjMgNDUuMyAxMDkuMiAwIDI0LjEtNS43IDQ3LjYtMTYuMiA2OC44LTEuOSAzLjctNS4zIDYuNS05LjMgNy43TDM3NC41IDI3MGMtMy45IDEuMi02LjUgNC43LTYuNSA4LjggMCA1LjEgNC4xIDkuMiA5LjIgOS4ybDMyLjIgMGMxNC4zIDAgMjEuNCAxNy4yIDExLjMgMjcuM2wtMjIuNCAyMi40Yy0xLjkgMS45LTQuMiAzLjItNi43IDRsLTgxIDI0LjNjLTMuOSAxLjItNi41IDQuNy02LjUgOC44IDAgNS4xIDQuMSA5LjIgOS4yIDkuMiAxMy4yIDAgMTguOSAxNS43IDcuOCAyMi45LTQxLjEgMjYuNi04OS4zIDQxLjEtMTM5IDQxLjFsLTg2IDAtNDggNDhjLTguOCA4LjgtMjMuMiA4LjgtMzIgMHMtOC44LTIzLjIgMC0zMkwyNTYgMjI0YzguOC04LjggOC44LTIzLjIgMC0zMnMtMjMuMi04LjgtMzIgMEw3OS41IDMzNi41Yy01LjcgNS43LTE1LjUgMS43LTE1LjUtNi40IDAtNjcuOSAyNy0xMzMgNzUtMTgxTDI0Mi44IDQ1LjJDMjcxLjcgMTYuMyAzMTEgMCAzNTIgMHoiXQogICAgfTsKICAgIGZhQm93bFJpY2UgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiYm93bC1yaWNlIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImUyZWIiLCAiTTE3NiA0MGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHptMjQgNDhsMTYgMGMxMy4zIDAgMjQgMTAuNyAyNCAyNHMtMTAuNyAyNC0yNCAyNGwtMTYgMGMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHpNNTYgMTYwbDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTAgMjgzLjRDMCAyNjguMyAxMi4zIDI1NiAyNy40IDI1Nmw0NTcuMSAwYzE1LjEgMCAyNy40IDEyLjMgMjcuNCAyNy40IDAgNzAuNS00NC40IDEzMC43LTEwNi43IDE1NC4xTDQwMy41IDQ1MmMtMiAxNi0xNS42IDI4LTMxLjggMjhsLTIzMS41IDBjLTE2LjEgMC0yOS44LTEyLTMxLjgtMjhsLTEuOC0xNC40QzQ0LjQgNDE0LjEgMCAzNTMuOSAwIDI4My40ek0yMjQgMTg0YzAtMTMuMyAxMC43LTI0IDI0LTI0bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0em0tOTYgMGMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMTA0IDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTIxNiA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMjk2IDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6bTEyMCA5NmMwLTEzLjMgMTAuNy0yNCAyNC0yNGwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHpNMzkyIDg4bDE2IDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRsLTE2IDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjR6TTI5NiAxNmwxNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC0xNiAwYy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0eiJdCiAgICB9OwogICAgZmFTdGFySGFsZlN0cm9rZTIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic3Rhci1oYWxmLXN0cm9rZSIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJzdGFyLWhhbGYtYWx0Il0sICJmNWMwIiwgIk0yODguMSAzNTMuNmMxMCAwIDE5LjkgMi4zIDI5IDdsNzQuNCAzNy45LTEzLTgyLjVjLTMuMi0yMC4yIDMuNS00MC43IDE3LjktNTUuMmw1OS01OS4xLTgyLjUtMTMuMWMtMjAuMi0zLjItMzcuNy0xNS45LTQ3LTM0LjFsLTM4LTc0LjQgMCAyNzMuNnpNNDU3LjQgNDg5Yy03LjMgNS4zLTE3IDYuMS0yNSAyTDI4OC4xIDQxNy42IDE0My44IDQ5MWMtOCA0LjEtMTcuNyAzLjMtMjUtMnMtMTEtMTQuMi05LjYtMjMuMkwxMzQuNCAzMDUuOSAyMCAxOTEuNGMtNi40LTYuNC04LjYtMTUuOC01LjgtMjQuNHMxMC4xLTE0LjkgMTkuMS0xNi4zbDE1OS45LTI1LjQgNzMuNi0xNDQuMmM0LjEtOCAxMi40LTEzLjEgMjEuNC0xMy4xczE3LjMgNS4xIDIxLjQgMTMuMUwzODMgMTI1LjMgNTQyLjkgMTUwLjdjOC45IDEuNCAxNi4zIDcuNyAxOS4xIDE2LjNzLjUgMTgtNS44IDI0LjRMNDQxLjcgMzA1LjkgNDY3IDQ2NS44YzEuNCA4LjktMi4zIDE3LjktOS42IDIzLjJ6Il0KICAgIH07CiAgICBmYVN0YXJIYWxmQWx0MiA9IGZhU3RhckhhbGZTdHJva2UyOwogICAgZmFUZW1wZXJhdHVyZUFycm93RG93biA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0ZW1wZXJhdHVyZS1hcnJvdy1kb3duIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbInRlbXBlcmF0dXJlLWRvd24iXSwgImUwM2YiLCAiTTY0LjUgOTZjMC01MyA0My05NiA5Ni05NnM5NiA0MyA5NiA5NmwwIDE2NC43YzI5LjUgMjYuNCA0OCA2NC43IDQ4IDEwNy4zIDAgNzkuNS02NC41IDE0NC0xNDQgMTQ0cy0xNDQtNjQuNS0xNDQtMTQ0YzAtNDIuNiAxOC41LTgxIDQ4LTEwNy4zTDY0LjUgOTZ6bTk2IDMzNmMzNS4zIDAgNjQtMjguNyA2NC02NCAwLTI2LjktMTYuNS00OS45LTQwLTU5LjNsMC0yOC43YzAtMTMuMy0xMC43LTI0LTI0LTI0cy0yNCAxMC43LTI0IDI0bDAgMjguN2MtMjMuNSA5LjUtNDAgMzIuNS00MCA1OS4zIDAgMzUuMyAyOC43IDY0IDY0IDY0ek00MzkuMSAzMTAuNmMtNiA2LTE0LjEgOS40LTIyLjYgOS40cy0xNi42LTMuNC0yMi42LTkuNGwtNjQtNjRjLTEyLjUtMTIuNS0xMi41LTMyLjggMC00NS4zczMyLjgtMTIuNSA0NS4zIDBsOS40IDkuNCAwLTE3OC43YzAtMTcuNyAxNC4zLTMyIDMyLTMyczMyIDE0LjMgMzIgMzJsMCAxNzguNyA5LjQtOS40YzEyLjUtMTIuNSAzMi44LTEyLjUgNDUuMyAwczEyLjUgMzIuOCAwIDQ1LjNsLTY0IDY0eiJdCiAgICB9OwogICAgZmFUZW1wZXJhdHVyZURvd24gPSBmYVRlbXBlcmF0dXJlQXJyb3dEb3duOwogICAgZmFNYXNrVmVudGlsYXRvciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJtYXNrLXZlbnRpbGF0b3IiLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZTUyNCIsICJNMTUyLjIgMTkyYy0xNS40IDM4LjMtMjQuMiA3Ny4yLTI0LjIgMTA4LjggMCAxMy4zIDEuNSAyNi4yIDQuNCAzOC43bC0xNy0zLjRjLTI5LjktNi01MS40LTMyLjItNTEuNC02Mi44bDAtODEuMyA4OC4yIDB6bTMyLjktNjRMNjQgMTI4Yy0zNS4zIDAtNjQgMjguNy02NCA2NGwwIDgxLjNjMCA2MSA0My4xIDExMy41IDEwMi45IDEyNS41bDY2LjMgMTMuM2MxOC43IDIyLjEgNDIuOSA0MCA3MC44IDUxLjhsMC04Ny44Yy0xMC4xLTE0LjItMTYtMzEuMy0xNi00OS43IDAtNDkuNSA0My0xMzQuNCA5Ni0xMzQuNCA1Mi41IDAgOTYgODQuOSA5NiAxMzQuNCAwIDE4LjQtNS45IDM1LjQtMTYgNDkuNmwwIDg3LjdjMjcuNi0xMS44IDUxLjctMjkuNiA3MC40LTUxLjZsNjYuNy0xMy4zYzU5LjgtMTIgMTAyLjktNjQuNSAxMDIuOS0xMjUuNWwwLTgxLjNjMC0zNS4zLTI4LjctNjQtNjQtNjRsLTEyMS41IDBjLTM0LjgtNTQuMi04Mi41LTk2LTEzNC41LTk2LTUyLjYgMC0xMDAuMiA0MS44LTEzNC45IDk2em0zMDIuNSA2NGw4OC40IDAgMCA4MS4zYzAgMzAuNS0yMS41IDU2LjgtNTEuNCA2Mi44bC0xNyAzLjRjMi45LTEyLjQgNC41LTI1LjQgNC41LTM4LjcgMC0zMS42LTguOS03MC41LTI0LjQtMTA4Ljh6TTI4OCAzMjBsMCAxOTIgNjQgMCAwLTE5MmMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMnoiXQogICAgfTsKICAgIGZhRmlsZVZpZGVvMiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJmaWxlLXZpZGVvIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbXSwgImYxYzgiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDIxMy41IDBjMTcgMCAzMy4zIDYuNyA0NS4zIDE4LjdMMzY1LjMgMTI1LjNjMTIgMTIgMTguNyAyOC4zIDE4LjcgNDUuM0wzODQgNDQ4YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHptMjA4LTUuNWwwIDkzLjVjMCAxMy4zIDEwLjcgMjQgMjQgMjRMMzI1LjUgMTc2IDIwOCA1OC41ek04MCAzMDRsMCA5NmMwIDE3LjcgMTQuMyAzMiAzMiAzMmw5NiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMybDAtMjQgMzUgMzVjMy4yIDMuMiA3LjUgNSAxMiA1IDkuNCAwIDE3LTcuNiAxNy0xN2wwLTk0LjFjMC05LjQtNy42LTE3LTE3LTE3LTQuNSAwLTguOCAxLjgtMTIgNWwtMzUgMzUgMC0yNGMwLTE3LjctMTQuMy0zMi0zMi0zMmwtOTYgMGMtMTcuNyAwLTMyIDE0LjMtMzIgMzJ6Il0KICAgIH07CiAgICBmYUFycm93VHJlbmREb3duID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImFycm93LXRyZW5kLWRvd24iLAogICAgICBpY29uOiBbNTc2LCA1MTIsIFtdLCAiZTA5NyIsICJNMzg0IDM1MmMtMTcuNyAwLTMyIDE0LjMtMzIgMzJzMTQuMyAzMiAzMiAzMmwxNjAgMGMxNy43IDAgMzItMTQuMyAzMi0zMmwwLTE2MGMwLTE3LjctMTQuMy0zMi0zMi0zMnMtMzIgMTQuMy0zMiAzMmwwIDgyLjctMTY5LjQtMTY5LjRjLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwTDE5MiAyNDIuNyA1NC42IDEwNS40Yy0xMi41LTEyLjUtMzIuOC0xMi41LTQ1LjMgMHMtMTIuNSAzMi44IDAgNDUuM2wxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwTDMyMCAyMDUuMyA0NjYuNyAzNTIgMzg0IDM1MnoiXQogICAgfTsKICAgIGZhT2lsQ2FuID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9pbC1jYW4iLAogICAgICBpY29uOiBbNjQwLCA1MTIsIFtdLCAiZjYxMyIsICJNMzIwIDEyOGMxNy43IDAgMzItMTQuMyAzMi0zMnMtMTQuMy0zMi0zMi0zMkwxOTIgNjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzIgMCAwIDMyLTE3NiAwYy0yNi41IDAtNDggMjEuNS00OCA0OGwwIDY0LjhjMCAxOSAxMS4yIDM2LjIgMjguNSA0My45bDY3LjUgMzAgMCAyMS4zYzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDI1OS4xIDBjMTguNCAwIDM1LjgtNy45IDQ4LTIxLjdMNjMzLjUgMTg3LjdjMTIuMy0xMy45LS4zLTM1LjQtMTguNC0zMS41TDQ0OCAxOTIgMzk3LjUgMTY2LjhjLTguOS00LjQtMTguNy02LjgtMjguNi02LjhsLTgwLjkgMCAwLTMyIDMyIDB6TTk2IDIwOGwwIDg2LjEtNDgtMjEuMyAwLTY0LjggNDggMHoiXQogICAgfTsKICAgIGZhUGVvcGxlQ2FycnlCb3ggPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVvcGxlLWNhcnJ5LWJveCIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJwZW9wbGUtY2FycnkiXSwgImY0Y2UiLCAiTTY0LTMyQTU2IDU2IDAgMSAxIDY0IDgwIDU2IDU2IDAgMSAxIDY0LTMyek0wIDE3MS4xYzAtMzIuNiAyNi41LTU5LjEgNTkuMS01OS4xIDIzLjUgMCA0NS41IDExLjMgNTkuMSAzMC40bDQ4LjcgNjguMmM1LjggOC4yIDE1LjEgMTMuMSAyNS4xIDEzLjRsMC05NmMwLTE3LjcgMTQuMy0zMiAzMi0zMmwxMjggMGMxNy43IDAgMzIgMTQuMyAzMiAzMmwwIDk2YzEwLS4zIDE5LjMtNS4yIDI1LjEtMTMuNGw0OC43LTY4LjJjMTMuNi0xOS4xIDM1LjYtMzAuNCA1OS4xLTMwLjQgMzIuNiAwIDU5LjEgMjYuNSA1OS4xIDU5LjFMNTc2IDI3MmMwIDMwLjItMTQuMiA1OC43LTM4LjQgNzYuOGwtNzYuOCA1Ny42Yy04LjEgNi0xMi44IDE1LjUtMTIuOCAyNS42bDAgODBjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04MGMwLTMwLjIgMTQuMi01OC43IDM4LjQtNzYuOGw0MS42LTMxLjIgMC04MC4xLTIuOCAzLjljLTE4IDI1LjItNDcuMSA0MC4yLTc4LjEgNDAuMkwzNTIgMjg4Yy0uNiAwLTEuMyAwLTEuOS0uMS0uNiAwLTEuMyAuMS0xLjkgLjFsLTEyMC40IDBjLS42IDAtMS4zIDAtMS45LS4xLS42IDAtMS4zIC4xLTEuOSAuMWwtMzEuMSAwYy0zMSAwLTYwLjEtMTUtNzguMS00MC4ybC0yLjgtMy45IDAgODAuMSA0MS42IDMxLjJDMTc3LjggMzczLjMgMTkyIDQwMS44IDE5MiA0MzJsMCA4MGMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTgwYzAtMTAuMS00LjctMTkuNi0xMi44LTI1LjZMMzguNCAzNDguOEMxNC4yIDMzMC43IDAgMzAyLjIgMCAyNzJMMCAxNzEuMXpNMCAzNzkuM2MzLjEgMi43IDYuMyA1LjQgOS42IDcuOUw2NCA0MjggNjQgNTEyYzAgMTcuNy0xNC4zIDMyLTMyIDMyUzAgNTI5LjcgMCA1MTJMMCAzNzkuM3pNNTY4IDI0YTU2IDU2IDAgMSAxIC0xMTIgMCA1NiA1NiAwIDEgMSAxMTIgMHptOCA0ODhjMCAxNy43LTE0LjMgMzItMzIgMzJzLTMyLTE0LjMtMzItMzJsMC04NCA1NC40LTQwLjhjMy4zLTIuNSA2LjUtNS4xIDkuNi03LjlMNTc2IDUxMnoiXQogICAgfTsKICAgIGZhUGVvcGxlQ2FycnkgPSBmYVBlb3BsZUNhcnJ5Qm94OwogICAgZmFDaGFpciA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJjaGFpciIsCiAgICAgIGljb246IFs0NDgsIDUxMiwgWzEyOTY4MV0sICJmNmMwIiwgIk0xNTIgMjU2bDAtMTgxLjhjLTI0LjUgMjAuNS00MCA1MS40LTQwIDg1LjhsMCA5NiA0MCAwem00OCAwbDQ4IDAgMC0yMDUuNGMtNy43LTEuNy0xNS44LTIuNi0yNC0yLjZzLTE2LjMgLjktMjQgMi42TDIwMCAyNTZ6TTI5NiA3NC4ybDAgMTgxLjggNDAgMCAwLTk2YzAtMzQuNC0xNS41LTY1LjItNDAtODUuOHpNMzIgMjU2bDMyIDAgMC05NkM2NCA3MS42IDEzNS42IDAgMjI0IDBTMzg0IDcxLjYgMzg0IDE2MGwwIDk2IDMyIDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCA2NGMwIDE3LjctMTQuMyAzMi0zMiAzMmwwIDk2YzAgMTcuNy0xNC4zIDMyLTMyIDMycy0zMi0xNC4zLTMyLTMybDAtOTYtMjU2IDAgMCA5NmMwIDE3LjctMTQuMyAzMi0zMiAzMnMtMzItMTQuMy0zMi0zMmwwLTk2Yy0xNy43IDAtMzItMTQuMy0zMi0zMmwwLTY0YzAtMTcuNyAxNC4zLTMyIDMyLTMyeiJdCiAgICB9OwogICAgZmFXaW5kID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIndpbmQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjcyZSIsICJNMjg4IDMyYzAgMTcuNyAxNC4zIDMyIDMyIDMybDQwIDBjMTMuMyAwIDI0IDEwLjcgMjQgMjRzLTEwLjcgMjQtMjQgMjRMMzIgMTEyYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDMyOCAwYzQ4LjYgMCA4OC0zOS40IDg4LTg4UzQwOC42IDAgMzYwIDBMMzIwIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyem02NCAzNTJjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIgMGM1MyAwIDk2LTQzIDk2LTk2cy00My05Ni05Ni05NkwzMiAyMjRjLTE3LjcgMC0zMiAxNC4zLTMyIDMyczE0LjMgMzIgMzIgMzJsMzg0IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJzLTE0LjMgMzItMzIgMzJsLTMyIDBjLTE3LjcgMC0zMiAxNC4zLTMyIDMyek0xMjggNTEybDQwIDBjNDguNiAwIDg4LTM5LjQgODgtODhzLTM5LjQtODgtODgtODhMMzIgMzM2Yy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDEzNiAwYzEzLjMgMCAyNCAxMC43IDI0IDI0cy0xMC43IDI0LTI0IDI0bC00MCAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMyeiJdCiAgICB9OwogICAgZmFMYXllckdyb3VwID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImxheWVyLWdyb3VwIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY1ZmQiLCAiTTIzMi41IDUuMmMxNC45LTYuOSAzMi4xLTYuOSA0NyAwbDIxOC42IDEwMWM4LjUgMy45IDEzLjkgMTIuNCAxMy45IDIxLjhzLTUuNCAxNy45LTEzLjkgMjEuOGwtMjE4LjYgMTAxYy0xNC45IDYuOS0zMi4xIDYuOS00NyAwTDEzLjkgMTQ5LjhDNS40IDE0NS44IDAgMTM3LjMgMCAxMjhzNS40LTE3LjkgMTMuOS0yMS44TDIzMi41IDUuMnpNNDguMSAyMTguNGwxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSAyNzcuOEM1LjQgMjczLjggMCAyNjUuMyAwIDI1NnM1LjQtMTcuOSAxMy45LTIxLjhsMzQuMS0xNS44ek0xMy45IDM2Mi4ybDM0LjEtMTUuOCAxNjQuMyA3NS45YzI3LjcgMTIuOCA1OS42IDEyLjggODcuMyAwbDE2NC4zLTc1LjkgMzQuMSAxNS44YzguNSAzLjkgMTMuOSAxMi40IDEzLjkgMjEuOHMtNS40IDE3LjktMTMuOSAyMS44bC0yMTguNiAxMDFjLTE0LjkgNi45LTMyLjEgNi45LTQ3IDBMMTMuOSA0MDUuOEM1LjQgNDAxLjggMCAzOTMuMyAwIDM4NHM1LjQtMTcuOSAxMy45LTIxLjh6Il0KICAgIH07CiAgICBmYUhlYWRTaWRlTWFzayA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoZWFkLXNpZGUtbWFzayIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgW10sICJlMDYzIiwgIk00NDUuOSAxOTNjLS4xLS40LS4yLS45LS4yLTEuMy0xNS43LTEwOC40LTEwOC45LTE5MS43LTIyMS43LTE5MS43LTg1IDAtMTU5IDQ3LjQtMTk2LjkgMTE3LjJMMjgzLjMgMjg4IDQ1NiAyODggNDQyLjkgMzM2IDMzNiAzMzZjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsOTguMiAwLTguNyAzMi04OS41IDBjLTguOCAwLTE2IDcuMi0xNiAxNnM3LjIgMTYgMTYgMTZsODAuNiAwYy02LjcgMTkuMS0yNC44IDMyLTQ1LjMgMzJMMjg4IDQ2NGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xMDQuNS0yNDcuNS0xNjVDMyAxODIuMSAwIDIwMi43IDAgMjI0IDAgMjc4IDE5LjEgMzI3LjUgNTAuOSAzNjYuMiA1OC45IDM3NS45IDY0IDM4Ny44IDY0IDQwMC40TDY0IDQ2NGMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxMjcuMyAwIC43IDAgMTMxLjMgMGM0NC45IDAgODMuOC0zMS4xIDkzLjYtNzQuOWwzMy45LTE1MC4zYzMuMy0xNC40LS4zLTI5LjUtOS43LTQxTDQ0NS45IDE5M3pNMjg4IDE5MmEzMiAzMiAwIDEgMSA2NCAwIDMyIDMyIDAgMSAxIC02NCAweiJdCiAgICB9OwogICAgZmFIYW5kcyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJoYW5kcyIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJzaWduLWxhbmd1YWdlIiwgInNpZ25pbmciXSwgImYyYTciLCAiTTUxMiAxNjBsLS4xIDcyLjZjMCA0NC44LTE3LjYgODcuMS00Ny45IDExOC40LS4zLTc3LTQwLjEtMTQ4LjQtMTA1LjQtMTg5LjNsLTEuOS0xLjJjMi41LTMuNyAyLjgtOC42IC40LTEyLjdsLTYyLTEwNy40Yy02LjYtMTEuNS0yLjctMjYuMiA4LjgtMzIuOFMzMzAgNSAzMzYuNiAxNi41bDY4IDExNy44IDAgMCAwIDAgNDMuMyA3NSAuMS00OS4zYzAtMTcuNyAxNC40LTMyIDMyLTMyczMyIDE0LjQgMzIgMzJ6TTI5OC40IDEyNC4yYy0xNC4xLTguOC0yOS44LTEyLjctNDUuMi0xMi4xTDIxNi43IDQ4LjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44bDY3LjEgMTE2LjItMjctMTYuOXpNMjExLjkgODguNWwxNi40IDI4LjRjLTE1LjEgNS41LTI4LjYgMTUuNi0zOC4zIDI5LjdsLTE5LjctMzQuMmMtNi42LTExLjUtMi43LTI2LjIgOC44LTMyLjhzMjYuMi0yLjcgMzIuOCA4Ljh6bS00Ni40IDYzLjdsMTIuNSAyMS43Yy0yIDguNi0yLjUgMTcuNS0xLjcgMjYuMWwtNC4zIDAgMCAwLTM0LjQgMC0xMy43LTIzLjhjLTYuNi0xMS41LTIuNy0yNi4yIDguOC0zMi44czI2LjItMi43IDMyLjggOC44ek0yMjguOSAxNzVjOS40LTE1IDI5LjEtMTkuNSA0NC4xLTEwLjJsNjAuMiAzNy42QzM4NC43IDIzNC43IDQxNiAyOTEuMiA0MTYgMzUybDAgOGMwIDgzLjktNjguMSAxNTItMTUyIDE1Mkw4OCA1MTJjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsOTIgMGM2LjYgMCAxMi01LjQgMTItMTJzLTUuNC0xMi0xMi0xMkw1NiA0NDBjLTEzLjMgMC0yNC0xMC43LTI0LTI0czEwLjctMjQgMjQtMjRsMTI0IDBjNi42IDAgMTItNS40IDEyLTEycy01LjQtMTItMTItMTJMMjQgMzY4Yy0xMy4zIDAtMjQtMTAuNy0yNC0yNHMxMC43LTI0IDI0LTI0bDE1NiAwYzYuNiAwIDEyLTUuNCAxMi0xMnMtNS40LTEyLTEyLTEyTDU2IDI5NmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGwxMzYgMCAwIDAgMCAwIDkzLjIgMC00Ni4yLTI4LjljLTE1LTkuNC0xOS41LTI5LjEtMTAuMi00NC4xeiJdCiAgICB9OwogICAgZmFTaWduTGFuZ3VhZ2UgPSBmYUhhbmRzOwogICAgZmFTaWduaW5nID0gZmFIYW5kczsKICAgIGZhVGFibGV0cyA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJ0YWJsZXRzIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbXSwgImY0OTAiLCAiTTQ5NS4zIDc2LjZjLTQuNi04LjctMTYuMy05LjctMjMuMy0yLjdMMjk3LjkgMjQ4Yy03IDctNiAxOC43IDIuNyAyMy4zIDIwLjEgMTAuNyA0MyAxNi43IDY3LjQgMTYuNyA3OS41IDAgMTQ0LTY0LjUgMTQ0LTE0NCAwLTI0LjMtNi00Ny4zLTE2LjctNjcuNHpNMjQwLjcgMjExLjRjNC42IDguNyAxNi4zIDkuNyAyMy4zIDIuN0w0MzguMSA0MGM3LTcgNi0xOC43LTIuNy0yMy4zLTIwLjEtMTAuNy00My0xNi43LTY3LjQtMTYuNy03OS41IDAtMTQ0IDY0LjUtMTQ0IDE0NCAwIDI0LjMgNiA0Ny4zIDE2LjcgNjcuNHpNMTQ0IDIyNEM3OS4yIDIyNCAyNC40IDI2Ni44IDYuMyAzMjUuNiAzLjQgMzM1LjEgMTEgMzQ0IDIwLjkgMzQ0bDI0Ni4yIDBjOS45IDAgMTcuNS04LjkgMTQuNi0xOC40LS45LTMtMS45LTUuOS0zLTguNy0zNy40LTE4LjEtNjgtNDgtODctODQuOC0xNC45LTUuMi0zMC45LTguMS00Ny42LTguMXpNMjgxLjcgNDEwLjRjMi45LTkuNS00LjctMTguNC0xNC42LTE4LjRMMjAuOSAzOTJDMTEgMzkyIDMuNCA0MDAuOSA2LjMgNDEwLjQgMjQuNCA0NjkuMiA3OS4yIDUxMiAxNDQgNTEyczExOS42LTQyLjggMTM3LjctMTAxLjZ6Il0KICAgIH07CiAgICBmYVdlaWdodEhhbmdpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAid2VpZ2h0LWhhbmdpbmciLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFtdLCAiZjVjZCIsICJNMjI0IDk2YTMyIDMyIDAgMSAxIDY0IDAgMzIgMzIgMCAxIDEgLTY0IDB6bTEyMi41IDMyYzMuNS0xMCA1LjUtMjAuOCA1LjUtMzIgMC01My00My05Ni05Ni05NnMtOTYgNDMtOTYgOTZjMCAxMS4yIDEuOSAyMiA1LjUgMzJsLTIxLjggMGMtMjguMyAwLTUzLjIgMTguNS02MS4zIDQ1LjZMMi40IDQ0MC4yQy44IDQ0NS40IDAgNDUwLjggMCA0NTYuMiAwIDQ4NyAyNSA1MTIgNTUuOCA1MTJsNDAwLjQgMGMzMC44IDAgNTUuOC0yNSA1NS44LTU1LjggMC01LjQtLjgtMTAuOC0yLjQtMTZsLTgwLTI2Ni41Yy04LjEtMjcuMS0zMy00NS42LTYxLjMtNDUuNmwtMjEuOCAweiJdCiAgICB9OwogICAgZmFEaWNlID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogImRpY2UiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjc5MjJdLCAiZjUyMiIsICJNMTQxLjQgMi4zQzEwMy04IDYzLjUgMTQuOCA1My4zIDUzLjJMMi41IDI0Mi43Qy03LjggMjgxLjEgMTUgMzIwLjYgNTMuNCAzMzAuOWwxODkuNSA1MC44YzM4LjQgMTAuMyA3Ny45LTEyLjUgODguMi01MC45bDUwLjgtMTg5LjVjMTAuMy0zOC40LTEyLjUtNzcuOS01MC45LTg4LjJMMTQxLjQgMi4zem0yMyAyMDUuN2EzMiAzMiAwIDEgMSA1NS40LTMyIDMyIDMyIDAgMSAxIC01NS40IDMyek03OS4yIDIyMC4zYTMyIDMyIDAgMSAxIDMyIDU1LjQgMzIgMzIgMCAxIDEgLTMyLTU1LjR6bTE4NSA5Ni40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6bTktMjA4LjRhMzIgMzIgMCAxIDEgMzIgNTUuNCAzMiAzMiAwIDEgMSAtMzItNTUuNHptLTEyMSAxNC40YTMyIDMyIDAgMSAxIC0zMi01NS40IDMyIDMyIDAgMSAxIDMyIDU1LjR6TTQxOCAxOTJMMzc3LjQgMzQzLjJjLTE3LjIgNjQtODMgMTAyLTE0NyA4NC45bC0zOC4zLTEwLjMgMCAzMC4yYzAgMzUuMyAyOC43IDY0IDY0IDY0bDE5MiAwYzM1LjMgMCA2NC0yOC43IDY0LTY0bDAtMTkyYzAtMzUuMy0yOC43LTY0LTY0LTY0TDQxOCAxOTJ6Il0KICAgIH07CiAgICBmYVNob3BTbGFzaCA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJzaG9wLXNsYXNoIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbInN0b3JlLWFsdC1zbGFzaCJdLCAiZTA3MCIsICJNNDEtMjQuOWMtOS40LTkuNC0yNC42LTkuNC0zMy45IDBTLTIuMy0uMyA3IDkuMWw1MjggNTI4YzkuNCA5LjQgMjQuNiA5LjQgMzMuOSAwczkuNC0yNC42IDAtMzMuOWwtNTctNTcgMC0xOTAuM2MyNi44LTEuOSA0OC0yNC4zIDQ4LTUxLjYgMC04LTEuOS0xNi01LjUtMjMuMkw0OTcuNyA2Ny40QzQ4Ni44IDQ1LjcgNDY0LjcgMzIgNDQwLjQgMzJMMTM1LjYgMzJjLTEwLjcgMC0yMSAyLjctMzAuMiA3LjZMNDEtMjQuOXpNMzIxLjggMjU2TDQ0OCAyNTYgNDQ4IDM4Mi4yIDMyMS44IDI1NnpNMzUyIDQyMS44bC02NC02NCAwIDEwLjJjMCA4LjgtNy4yIDE2LTE2IDE2bC0xMjggMGMtOC44IDAtMTYtNy4yLTE2LTE2bDAtMTEyIDU4LjIgMC0xMzQuOC0xMzQuOC0yOS45IDU5LjljLTMuNiA3LjItNS41IDE1LjEtNS41IDIzLjIgMCAyNy4zIDIxLjIgNDkuNyA0OCA1MS42TDY0IDQzMmMwIDI2LjUgMjEuNSA0OCA0OCA0OGwxOTIgMGMyNi41IDAgNDgtMjEuNSA0OC00OGwwLTEwLjJ6Il0KICAgIH07CiAgICBmYVN0b3JlQWx0U2xhc2ggPSBmYVNob3BTbGFzaDsKICAgIGZhU29ydERvd24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic29ydC1kb3duIiwKICAgICAgaWNvbjogWzM4NCwgNTEyLCBbInNvcnQtZGVzYyJdLCAiZjBkZCIsICJNMzIgMjg4Yy0xMi45IDAtMjQuNiA3LjgtMjkuNiAxOS44Uy4yIDMzMy41IDkuNCAzNDIuNmwxNjAgMTYwYzEyLjUgMTIuNSAzMi44IDEyLjUgNDUuMyAwbDE2MC0xNjBjOS4yLTkuMiAxMS45LTIyLjkgNi45LTM0LjlTMzY0LjkgMjg4IDM1MiAyODhMMzIgMjg4eiJdCiAgICB9OwogICAgZmFTb3J0RGVzYyA9IGZhU29ydERvd247CiAgICBmYVBlc2V0YVNpZ24gPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAicGVzZXRhLXNpZ24iLAogICAgICBpY29uOiBbNDQ4LCA1MTIsIFtdLCAiZTIyMSIsICJNMTEyIDMyQzk0LjMgMzIgODAgNDYuMyA4MCA2NGwwIDEwNC0yNCAwYy0xMy4zIDAtMjQgMTAuNy0yNCAyNHMxMC43IDI0IDI0IDI0bDI0IDAgMCAyMzJjMCAxNy43IDE0LjMgMzIgMzIgMzJzMzItMTQuMyAzMi0zMmwwLTk2IDk2IDBjODAuMiAwIDE0Ni42LTU5IDE1OC4yLTEzNmwyNS44IDBjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1LjggMEMzODYuNiA5MSAzMjAuMiAzMiAyNDAgMzJMMTEyIDMyek0zMzMgMTY4bC0xODkgMCAwLTcyIDk2IDBjNDQuNyAwIDgyLjMgMzAuNiA5MyA3MnpNMTQ0IDIxNmwxODkgMGMtMTAuNyA0MS40LTQ4LjIgNzItOTMgNzJsLTk2IDAgMC03MnoiXQogICAgfTsKICAgIGZhVGFibGV0U2NyZWVuQnV0dG9uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInRhYmxldC1zY3JlZW4tYnV0dG9uIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbInRhYmxldC1hbHQiXSwgImYzZmEiLCAiTTAgNjRDMCAyOC43IDI4LjcgMCA2NCAwTDM4NCAwYzM1LjMgMCA2NCAyOC43IDY0IDY0bDAgMzg0YzAgMzUuMy0yOC43IDY0LTY0IDY0TDY0IDUxMmMtMzUuMyAwLTY0LTI4LjctNjQtNjRMMCA2NHpNMjU2IDQzMmEzMiAzMiAwIDEgMCAtNjQgMCAzMiAzMiAwIDEgMCA2NCAwek0zODQgNjRsLTMyMCAwIDAgMjg4IDMyMCAwIDAtMjg4eiJdCiAgICB9OwogICAgZmFUYWJsZXRBbHQgPSBmYVRhYmxldFNjcmVlbkJ1dHRvbjsKICAgIGZhSGFuZEhvbGRpbmdEb2xsYXIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1ob2xkaW5nLWRvbGxhciIsCiAgICAgIGljb246IFs1NzYsIDUxMiwgWyJoYW5kLWhvbGRpbmctdXNkIl0sICJmNGMwIiwgIk0yODgtMTZjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgMTItMS44IDBjLTM2LjYgMC02Ni4yIDI5LjctNjYuMiA2Ni4yIDAgMzMuNCAyNC45IDYxLjYgNTggNjUuN2w2MSA3LjZjNS4xIC42IDkgNSA5IDEwLjIgMCA1LjctNC42IDEwLjItMTAuMiAxMC4yTDI0MCAxODBjLTE1LjUgMC0yOCAxMi41LTI4IDI4czEyLjUgMjggMjggMjhsMjQgMCAwIDEyYzAgMTMuMyAxMC43IDI0IDI0IDI0czI0LTEwLjcgMjQtMjRsMC0xMiAxLjggMGMzNi42IDAgNjYuMi0yOS43IDY2LjItNjYuMiAwLTMzLjQtMjQuOS02MS42LTU4LTY1LjdsLTYxLTcuNmMtNS4xLS42LTktNS05LTEwLjIgMC01LjcgNC42LTEwLjIgMTAuMi0xMC4yTDMyOCA3NmMxNS41IDAgMjgtMTIuNSAyOC0yOHMtMTIuNS0yOC0yOC0yOGwtMTYgMCAwLTEyYzAtMTMuMy0xMC43LTI0LTI0LTI0ek0xMDkuMyAzNDEuNUw2Ni43IDM4NCAzMiAzODRjLTE3LjcgMC0zMiAxNC4zLTMyIDMybDAgNjRjMCAxNy43IDE0LjMgMzIgMzIgMzJsMzIwLjUgMGMyOSAwIDU3LjMtOS4zIDgwLjctMjYuNWwxMjYuNi05My4zYzE3LjgtMTMuMSAyMS42LTM4LjEgOC41LTU1LjlzLTM4LjEtMjEuNi01NS45LTguNUwzOTIuNiA0MTYgMjgwIDQxNmMtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNGw3MiAwYzE3LjcgMCAzMi0xNC4zIDMyLTMycy0xNC4zLTMyLTMyLTMybC0xNTIuMiAwYy0zMy45IDAtNjYuNSAxMy41LTkwLjUgMzcuNXoiXQogICAgfTsKICAgIGZhSGFuZEhvbGRpbmdVc2QgPSBmYUhhbmRIb2xkaW5nRG9sbGFyOwogICAgZmFTaGllbGQgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAic2hpZWxkIiwKICAgICAgaWNvbjogWzUxMiwgNTEyLCBbMTI4NzM3LCAic2hpZWxkLWJsYW5rIl0sICJmMTMyIiwgIk0yNTYgMGM0LjYgMCA5LjIgMSAxMy40IDIuOUw0NTcuOCA4Mi44YzIyIDkuMyAzOC40IDMxIDM4LjMgNTcuMi0uNSA5OS4yLTQxLjMgMjgwLjctMjEzLjYgMzYzLjItMTYuNyA4LTM2LjEgOC01Mi44IDAtMTcyLjQtODIuNS0yMTMuMS0yNjQtMjEzLjYtMzYzLjItLjEtMjYuMiAxNi4zLTQ3LjkgMzguMy01Ny4yTDI0Mi43IDIuOUMyNDYuOSAxIDI1MS40IDAgMjU2IDB6Il0KICAgIH07CiAgICBmYVNoaWVsZEJsYW5rID0gZmFTaGllbGQ7CiAgICBmYUZhY2VMYXVnaDIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiZmFjZS1sYXVnaCIsCiAgICAgIGljb246IFs1MTIsIDUxMiwgWyJsYXVnaCJdLCAiZjU5OSIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTEwMS42IDMxNGMtMy43LTEzLjcgNy41LTI2IDIxLjctMjZsMjY1LjQgMGMxNC4yIDAgMjUuNCAxMi4zIDIxLjcgMjYtMTguNSA2OC04MC42IDExOC0xNTQuNCAxMThTMTIwIDM4MiAxMDEuNiAzMTR6TTE0NCAxOTJhMzIgMzIgMCAxIDEgNjQgMCAzMiAzMiAwIDEgMSAtNjQgMHptMTkyLTMyYTMyIDMyIDAgMSAxIDAgNjQgMzIgMzIgMCAxIDEgMC02NHoiXQogICAgfTsKICAgIGZhTGF1Z2gyID0gZmFGYWNlTGF1Z2gyOwogICAgZmFIYW5kc0hvbGRpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZHMtaG9sZGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgW10sICJmNGMyIiwgIk04MCAxMDRjMC0yMi4xLTE3LjktNDAtNDAtNDBTMCA4MS45IDAgMTA0TDAgMzI1LjVjMCAyNS41IDEwLjEgNDkuOSAyOC4xIDY3LjlMMTI4IDQ5My4zYzEyIDEyIDI4LjMgMTguNyA0NS4zIDE4LjdsNjYuNyAwYzI2LjUgMCA0OC0yMS41IDQ4LTQ4bDAtNzguOWMwLTI5LjctMTEuOC01OC4yLTMyLjgtNzkuMmwtMjUuMy0yNS4zIDAgMGMtNy4zLTcuMy0yMy4xLTIzLjEtNDcuMi00Ny4yLTEyLjUtMTIuNS0zMi44LTEyLjUtNDUuMyAwcy0xMi41IDMyLjggMCA0NS4zYzI0LjEgMjQuMSAzOS45IDM5LjkgNDcuMiA0Ny4yIDExIDExIDkuMiAyOS4yLTMuNyAzNy44LTkuNyA2LjUtMjIuNyA1LjItMzEtMy4xTDk4LjcgMzA5LjVjLTEyLTEyLTE4LjctMjguMy0xOC43LTQ1LjNMODAgMTA0em00ODAgMGwwIDE2MC4yYzAgMTctNi43IDMzLjMtMTguNyA0NS4zbC01MS4xIDUxLjFjLTguMyA4LjMtMjEuMyA5LjYtMzEgMy4xLTEyLjktOC42LTE0LjctMjYuOS0zLjctMzcuOCA3LjMtNy4zIDIzLjEtMjMuMSA0Ny4yLTQ3LjIgMTIuNS0xMi41IDEyLjUtMzIuOCAwLTQ1LjNzLTMyLjgtMTIuNS00NS4zIDBjLTI0LjEgMjQuMS0zOS45IDM5LjktNDcuMiA0Ny4ybDAgMC0yNS4zIDI1LjNjLTIxIDIxLTMyLjggNDkuNS0zMi44IDc5LjJsMCA3OC45YzAgMjYuNSAyMS41IDQ4IDQ4IDQ4bDY2LjcgMGMxNyAwIDMzLjMtNi43IDQ1LjMtMTguN2w5OS45LTk5LjljMTgtMTggMjguMS00Mi40IDI4LjEtNjcuOUw2NDAgMTA0YzAtMjIuMS0xNy45LTQwLTQwLTQwcy00MCAxNy45LTQwIDQweiJdCiAgICB9OwogICAgZmFDYXJ0U2hvcHBpbmcgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiY2FydC1zaG9wcGluZyIsCiAgICAgIGljb246IFs2NDAsIDUxMiwgWzEyODcyMiwgInNob3BwaW5nLWNhcnQiXSwgImYwN2EiLCAiTTI0LTE2QzEwLjctMTYgMC01LjMgMCA4UzEwLjcgMzIgMjQgMzJsNDUuMyAwYzMuOSAwIDcuMiAyLjggNy45IDYuNmw1Mi4xIDI4Ni4zYzYuMiAzNC4yIDM2IDU5LjEgNzAuOCA1OS4xTDQ1NiAzODRjMTMuMyAwIDI0LTEwLjcgMjQtMjRzLTEwLjctMjQtMjQtMjRsLTI1NS45IDBjLTExLjYgMC0yMS41LTguMy0yMy42LTE5LjdsLTUuMS0yOC4zIDMwMy42IDBjMzAuOCAwIDU3LjItMjEuOSA2Mi45LTUyLjJMNTY4LjkgNjkuOUM1NzIuNiA1MC4yIDU1Ny41IDMyIDUzNy40IDMybC00MTIuNyAwLS40LTJjLTQuOC0yNi42LTI4LTQ2LTU1LjEtNDZMMjQtMTZ6TTIwOCA1MTJhNDggNDggMCAxIDAgMC05NiA0OCA0OCAwIDEgMCAwIDk2em0yMjQgMGE0OCA0OCAwIDEgMCAwLTk2IDQ4IDQ4IDAgMSAwIDAgOTZ6Il0KICAgIH07CiAgICBmYVNob3BwaW5nQ2FydCA9IGZhQ2FydFNob3BwaW5nOwogICAgZmFPY3RhZ29uID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogIm9jdGFnb24iLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxMjg3MjFdLCAiZjMwNiIsICJNMTg4LjYgLjFjLTE3IDAtMzMuMyA2LjctNDUuMyAxOC43TDE5LjIgMTQzQzcuMiAxNTUgLjUgMTcxLjIgLjUgMTg4LjJsMCAxMzUuNmMwIDE3IDYuNyAzMy4zIDE4LjcgNDUuM0wxNDMuNCA0OTMuMmMxMiAxMiAyOC4zIDE4LjcgNDUuMyAxOC43bDEzNS42IDBjMTcgMCAzMy4zLTYuNyA0NS4zLTE4LjdMNDkzLjYgMzY5YzEyLTEyIDE4LjctMjguMyAxOC43LTQ1LjNsMC0xMzUuNmMwLTE3LTYuNy0zMy4zLTE4LjctNDUuM0wzNjkuNSAxOC44Yy0xMi0xMi0yOC4zLTE4LjctNDUuMy0xOC43TDE4OC42IC4xeiJdCiAgICB9OwogICAgZmFIYW5kUG9pbnRlcjIgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaGFuZC1wb2ludGVyIiwKICAgICAgaWNvbjogWzQ0OCwgNTEyLCBbXSwgImYyNWEiLCAiTTEyOCA0MGMwLTIyLjEgMTcuOS00MCA0MC00MHM0MCAxNy45IDQwIDQwbDAgMTQ4LjJjOC41LTcuNiAxOS43LTEyLjIgMzItMTIuMiAyMC42IDAgMzguMiAxMyA0NSAzMS4yIDguOC05LjMgMjEuMi0xNS4yIDM1LTE1LjIgMjUuMyAwIDQ2IDE5LjUgNDcuOSA0NC4zIDguNS03LjcgMTkuOC0xMi4zIDMyLjEtMTIuMyAyNi41IDAgNDggMjEuNSA0OCA0OGwwIDExMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtODUuMyAwYy01IDAtOS45LS4zLTE0LjctMS01NS4zLTUuNi0xMDYuMi0zNC0xNDAtNzlMOCAzMzZjLTEzLjMtMTcuNy05LjctNDIuNyA4LTU2czQyLjctOS43IDU2IDhsNTYgNzQuNyAwLTMyMi43ek0yNDAgMzA0YzAtOC44LTcuMi0xNi0xNi0xNnMtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2em00OC0xNmMtOC44IDAtMTYgNy4yLTE2IDE2bDAgOTZjMCA4LjggNy4yIDE2IDE2IDE2czE2LTcuMiAxNi0xNmwwLTk2YzAtOC44LTcuMi0xNi0xNi0xNnptODAgMTZjMC04LjgtNy4yLTE2LTE2LTE2cy0xNiA3LjItMTYgMTZsMCA5NmMwIDguOCA3LjIgMTYgMTYgMTZzMTYtNy4yIDE2LTE2bDAtOTZ6Il0KICAgIH07CiAgICBmYVJlZ2lzdGVyZWQyID0gewogICAgICBwcmVmaXg6ICJmYXMiLAogICAgICBpY29uTmFtZTogInJlZ2lzdGVyZWQiLAogICAgICBpY29uOiBbNTEyLCA1MTIsIFsxNzRdLCAiZjI1ZCIsICJNMjU2IDUxMmEyNTYgMjU2IDAgMSAwIDAtNTEyIDI1NiAyNTYgMCAxIDAgMCA1MTJ6TTIwMCAxNDRsODAgMGMzOS44IDAgNzIgMzIuMiA3MiA3MiAwIDI4LjktMTcgNTMuOC00MS42IDY1LjNsMzAuMiA1MC4zYzYuOCAxMS40IDMuMSAyNi4xLTguMiAzMi45cy0yNi4xIDMuMS0zMi45LTguMmwtNDEtNjguMy0zNC40IDAgMCA1NmMwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGwwLTE3NmMwLTEzLjMgMTAuNy0yNCAyNC0yNHptNzIgOTZsOCAwYzEzLjMgMCAyNC0xMC43IDI0LTI0cy0xMC43LTI0LTI0LTI0bC01NiAwIDAgNDggNDggMHoiXQogICAgfTsKICAgIGZhSG91c2VTaWduYWwgPSB7CiAgICAgIHByZWZpeDogImZhcyIsCiAgICAgIGljb25OYW1lOiAiaG91c2Utc2lnbmFsIiwKICAgICAgaWNvbjogWzU3NiwgNTEyLCBbXSwgImUwMTIiLCAiTTUxNS45IDI0MGwtMTkuOSAwIDAgMTQ0YzAgMzUuMy0yOC43IDY0LTY0IDY0bC0xMzcgMGMtMjQtOTEuNy05My41LTE2NS0xODMtMTk0LjNsMC0xMy43LTE5LjkgMGMtMTUuNSAwLTI4LjEtMTIuNi0yOC4xLTI4LjEgMC03LjYgMy4xLTE0LjkgOC42LTIwLjJMMjc2LjUtNC45QzI4My45LTEyIDI5My43LTE2IDMwNC0xNnMyMC4xIDQgMjcuNSAxMS4xTDUzNS40IDE5MS43YzUuNSA1LjMgOC42IDEyLjYgOC42IDIwLjIgMCAxNS41LTEyLjYgMjguMS0yOC4xIDI4LjF6TTI4MCAxOTJjLTEzLjMgMC0yNCAxMC43LTI0IDI0bDAgNDhjMCAxMy4zIDEwLjcgMjQgMjQgMjRsNDggMGMxMy4zIDAgMjQtMTAuNyAyNC0yNGwwLTQ4YzAtMTMuMy0xMC43LTI0LTI0LTI0bC00OCAwek0yNCAyODhjMTI4LjEgMCAyMzIgMTAzLjkgMjMyIDIzMiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTEwMS42LTgyLjQtMTg0LTE4NC0xODQtMTMuMyAwLTI0LTEwLjctMjQtMjRzMTAuNy0yNCAyNC0yNHptOCAxOTJhMzIgMzIgMCAxIDEgMCA2NCAzMiAzMiAwIDEgMSAwLTY0ek0wIDQwOGMwLTEzLjMgMTAuNy0yNCAyNC0yNCA3NS4xIDAgMTM2IDYwLjkgMTM2IDEzNiAwIDEzLjMtMTAuNyAyNC0yNCAyNHMtMjQtMTAuNy0yNC0yNGMwLTQ4LjYtMzkuNC04OC04OC04OC0xMy4zIDAtMjQtMTAuNy0yNC0yNHoiXQogICAgfTsKICAgIGZhQmFuZ2xhZGVzaGlUYWthU2lnbiA9IHsKICAgICAgcHJlZml4OiAiZmFzIiwKICAgICAgaWNvbk5hbWU6ICJiYW5nbGFkZXNoaS10YWthLXNpZ24iLAogICAgICBpY29uOiBbMzg0LCA1MTIsIFtdLCAiZTJlNiIsICJNMzYgMzIuM0MxOC40IDMwLjEgMi40IDQyLjUgLjMgNjBTMTAuNSA5My42IDI4IDk1LjhsNy45IDFjMTYgMiAyOCAxNS42IDI4IDMxLjhsMCAzMS41LTQwIDBjLTEzLjMgMC0yNCAxMC43LTI0IDI0czEwLjcgMjQgMjQgMjRsNDAgMCAwIDE3NmMwIDUzIDQzIDk2IDk2IDk2bDMyIDBjMTA2IDAgMTkyLTg2IDE5Mi0xOTJsMC0zMmMwLTUzLTQzLTk2LTk2LTk2bC0xNiAwYy0xNy43IDAtMzIgMTQuMy0zMiAzMnMxNC4zIDMyIDMyIDMybDE2IDBjMTcuNyAwIDMyIDE0LjMgMzIgMzJsMCAzMmMwIDcwLjctNTcuMyAxMjgtMTI4IDEyOGwtMzIgMGMtMTcuNyAwLTMyLTE0LjMtMzItMzJsMC0xNzYgNDAgMGMxMy4zIDAgMjQtMTAuNyAyNC0yNHMtMTAuNy0yNC0yNC0yNGwtNDAgMCAwLTMxLjVDMTI4IDgwLjEgOTIgMzkuMiA0My45IDMzLjJsLTcuOS0xeiJdCiAgICB9OwogICAgaWNvbnMzID0gewogICAgICBmYTAsCiAgICAgIGZhMSwKICAgICAgZmEyLAogICAgICBmYTMsCiAgICAgIGZhNCwKICAgICAgZmE1LAogICAgICBmYTYsCiAgICAgIGZhNywKICAgICAgZmE4LAogICAgICBmYTksCiAgICAgIGZhRG9sbGFyU2lnbiwKICAgICAgZmFEb2xsYXIsCiAgICAgIGZhVXNkLAogICAgICBmYURvZywKICAgICAgZmFUcnVja01vdmluZywKICAgICAgZmFSb3RhdGUsCiAgICAgIGZhU3luY0FsdCwKICAgICAgZmFTcXVhcmVNaW51czogZmFTcXVhcmVNaW51czIsCiAgICAgIGZhTWludXNTcXVhcmU6IGZhTWludXNTcXVhcmUyLAogICAgICBmYUFsaWduSnVzdGlmeSwKICAgICAgZmFDYWxlbmRhckNoZWNrOiBmYUNhbGVuZGFyQ2hlY2syLAogICAgICBmYUZhY2VLaXNzOiBmYUZhY2VLaXNzMiwKICAgICAgZmFLaXNzOiBmYUtpc3MyLAogICAgICBmYUtpdGNoZW5TZXQsCiAgICAgIGZhRG5hLAogICAgICBmYUNoaWxkUmVhY2hpbmcsCiAgICAgIGZhUGFzdGU6IGZhUGFzdGUyLAogICAgICBmYUZpbGVDbGlwYm9hcmQ6IGZhRmlsZUNsaXBib2FyZDIsCiAgICAgIGZhTWV0ZW9yLAogICAgICBmYUdlYXJzLAogICAgICBmYUNvZ3MsCiAgICAgIGZhRmlsZUNpcmNsZVBsdXMsCiAgICAgIGZhSWNpY2xlcywKICAgICAgZmFBcnJvd1RyZW5kVXAsCiAgICAgIGZhSGV4YWdvbk5vZGVzQm9sdCwKICAgICAgZmFRdWVzdGlvbiwKICAgICAgZmFIYW5kc0JvdW5kLAogICAgICBmYVBlcnNvbldhbGtpbmdMdWdnYWdlLAogICAgICBmYUZpbGVBcnJvd0Rvd24sCiAgICAgIGZhRmlsZURvd25sb2FkLAogICAgICBmYVBlcnNvbkJvb3RoLAogICAgICBmYUxvY3VzdCwKICAgICAgZmFSaWdodExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0UmlnaHQsCiAgICAgIGZhVHJ1Y2tEcm9wbGV0LAogICAgICBmYUhhbmRIb2xkaW5nTWVkaWNhbCwKICAgICAgZmFIYW5kUG9pbnRMZWZ0OiBmYUhhbmRQb2ludExlZnQyLAogICAgICBmYUNhbGN1bGF0b3IsCiAgICAgIGZhTWludXMsCiAgICAgIGZhU3VidHJhY3QsCiAgICAgIGZhQXJyb3dVcFpBLAogICAgICBmYVNvcnRBbHBoYVVwQWx0LAogICAgICBmYU1pY3JvcGhvbmVTbGFzaCwKICAgICAgZmFTcXVhcmVQZW4sCiAgICAgIGZhUGVuU3F1YXJlLAogICAgICBmYVBlbmNpbFNxdWFyZSwKICAgICAgZmFIYW5kRmlzdCwKICAgICAgZmFGaXN0UmFpc2VkLAogICAgICBmYUNvbW1lbnRTbXMsCiAgICAgIGZhU21zLAogICAgICBmYVNpbUNhcmQsCiAgICAgIGZhU2NhbGVCYWxhbmNlZCwKICAgICAgZmFCYWxhbmNlU2NhbGUsCiAgICAgIGZhQ2FyLAogICAgICBmYUF1dG9tb2JpbGUsCiAgICAgIGZhQ3JvcFNpbXBsZSwKICAgICAgZmFDcm9wQWx0LAogICAgICBmYU1lZGFsLAogICAgICBmYVNjcm9sbCwKICAgICAgZmFGaWxlRXhjZWw6IGZhRmlsZUV4Y2VsMiwKICAgICAgZmFGaWx0ZXIsCiAgICAgIGZhRHJ1bSwKICAgICAgZmFNYXBQaW4sCiAgICAgIGZhU2NhbGVVbmJhbGFuY2VkRmxpcCwKICAgICAgZmFCYWxhbmNlU2NhbGVSaWdodCwKICAgICAgZmFBcnJvd3NUb0NpcmNsZSwKICAgICAgZmFFbnZlbG9wZTogZmFFbnZlbG9wZTIsCiAgICAgIGZhQmFieSwKICAgICAgZmFTcXVhcmVDYXJldERvd246IGZhU3F1YXJlQ2FyZXREb3duMiwKICAgICAgZmFDYXJldFNxdWFyZURvd246IGZhQ2FyZXRTcXVhcmVEb3duMiwKICAgICAgZmFUZW50LAogICAgICBmYUEsCiAgICAgIGZhUGFyYWNodXRlQm94LAogICAgICBmYUNhcnRBcnJvd0Rvd24sCiAgICAgIGZhQnJpZGdlQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhQ2xvdWRBcnJvd1VwLAogICAgICBmYUNsb3VkVXBsb2FkLAogICAgICBmYUNsb3VkVXBsb2FkQWx0LAogICAgICBmYUF0LAogICAgICBmYUluZGlhblJ1cGVlU2lnbiwKICAgICAgZmFJbmRpYW5SdXBlZSwKICAgICAgZmFJbnIsCiAgICAgIGZhVHJ1Y2s6IGZhVHJ1Y2syLAogICAgICBmYUNoYWxrYm9hcmRVc2VyLAogICAgICBmYUNoYWxrYm9hcmRUZWFjaGVyLAogICAgICBmYVVzZXJDaGVjaywKICAgICAgZmFVc2VyTmluamEsCiAgICAgIGZhUGxhbnRXaWx0LAogICAgICBmYVdlaWdodFNjYWxlLAogICAgICBmYVdlaWdodCwKICAgICAgZmFDYXJldFJpZ2h0LAogICAgICBmYUZsb3JpblNpZ24sCiAgICAgIGZhQmVsbDogZmFCZWxsMiwKICAgICAgZmFMYXJpU2lnbiwKICAgICAgZmFNaWxsU2lnbiwKICAgICAgZmFQZXJzb25Tbm93Ym9hcmRpbmcsCiAgICAgIGZhU25vd2JvYXJkaW5nLAogICAgICBmYVR0eSwKICAgICAgZmFUZWxldHlwZSwKICAgICAgZmFVc2Vyc1JlY3RhbmdsZSwKICAgICAgZmFNb2JpbGUsCiAgICAgIGZhTW9iaWxlQW5kcm9pZCwKICAgICAgZmFNb2JpbGVQaG9uZSwKICAgICAgZmFBcnJvd3NUdXJuVG9Eb3RzLAogICAgICBmYUV4Y2xhbWF0aW9uLAogICAgICBmYUNodXJjaCwKICAgICAgZmFUb2dnbGVPZmYsCiAgICAgIGZhU2hvZVByaW50cywKICAgICAgZmFGaWxlQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhV2FsbGV0LAogICAgICBmYU1lc3NhZ2U6IGZhTWVzc2FnZTIsCiAgICAgIGZhQ29tbWVudEFsdDogZmFDb21tZW50QWx0MiwKICAgICAgZmFUcm9waHksCiAgICAgIGZhRmFjZURpenp5OiBmYUZhY2VEaXp6eTIsCiAgICAgIGZhRGl6enk6IGZhRGl6enkyLAogICAgICBmYUJhY3RlcmlhLAogICAgICBmYUVhckRlYWYsCiAgICAgIGZhRGVhZiwKICAgICAgZmFEZWFmbmVzcywKICAgICAgZmFIYXJkT2ZIZWFyaW5nLAogICAgICBmYVBlb3BsZUFycm93cywKICAgICAgZmFQZW9wbGVBcnJvd3NMZWZ0UmlnaHQsCiAgICAgIGZhSGFuZHNDbGFwcGluZywKICAgICAgZmFWaXJ1c0NvdmlkU2xhc2gsCiAgICAgIGZhQ2FsZW5kYXJEYXlzOiBmYUNhbGVuZGFyRGF5czIsCiAgICAgIGZhQ2FsZW5kYXJBbHQ6IGZhQ2FsZW5kYXJBbHQyLAogICAgICBmYURpYW1vbmRUdXJuUmlnaHQsCiAgICAgIGZhRGlyZWN0aW9ucywKICAgICAgZmFIYW5kUG9pbnRVcDogZmFIYW5kUG9pbnRVcDIsCiAgICAgIGZhQmV6aWVyQ3VydmUsCiAgICAgIGZhUGVyc29uSGFsZkRyZXNzLAogICAgICBmYVNxdWFyZVBvbGxIb3Jpem9udGFsLAogICAgICBmYVBvbGxILAogICAgICBmYVNjaG9vbENpcmNsZVhtYXJrLAogICAgICBmYUhhbmRMaXphcmQ6IGZhSGFuZExpemFyZDIsCiAgICAgIGZhQ2hhbGtib2FyZCwKICAgICAgZmFCbGFja2JvYXJkLAogICAgICBmYVVwUmlnaHRGcm9tU3F1YXJlLAogICAgICBmYUV4dGVybmFsTGlua0FsdCwKICAgICAgZmFTcXVhcmVGdWxsOiBmYVNxdWFyZUZ1bGwyLAogICAgICBmYUNsb3ZlciwKICAgICAgZmFUZWV0aE9wZW4sCiAgICAgIGZhQmFyc1N0YWdnZXJlZCwKICAgICAgZmFSZW9yZGVyLAogICAgICBmYVN0cmVhbSwKICAgICAgZmFXYXJlaG91c2UsCiAgICAgIGZhU3dhdGNoYm9vaywKICAgICAgZmFDYW1wZ3JvdW5kLAogICAgICBmYVBlcnNvbldhbGtpbmdBcnJvd1JpZ2h0LAogICAgICBmYUdsYXNzZXMsCiAgICAgIGZhQ2lyY2xlUGF1c2U6IGZhQ2lyY2xlUGF1c2UyLAogICAgICBmYVBhdXNlQ2lyY2xlOiBmYVBhdXNlQ2lyY2xlMiwKICAgICAgZmFNZW1vcnksCiAgICAgIGZhR2lmdCwKICAgICAgZmFNb25leUJpbGxXaGVhdCwKICAgICAgZmFEdW5nZW9uLAogICAgICBmYVN1aXRjYXNlTWVkaWNhbCwKICAgICAgZmFNZWRraXQsCiAgICAgIGZhUGVyc29uQ2FuZSwKICAgICAgZmFHYXVnZSwKICAgICAgZmFEYXNoYm9hcmQsCiAgICAgIGZhR2F1Z2VNZWQsCiAgICAgIGZhVGFjaG9tZXRlckFsdEF2ZXJhZ2UsCiAgICAgIGZhRW52ZWxvcGVPcGVuVGV4dCwKICAgICAgZmFUb29sYm94LAogICAgICBmYVBvd2VyT2ZmLAogICAgICBmYVNpZ25hbCwKICAgICAgZmFTaWduYWw1LAogICAgICBmYVNpZ25hbFBlcmZlY3QsCiAgICAgIGZhQXJyb3dzU3BpbiwKICAgICAgZmFKb2ludCwKICAgICAgZmFCcmFpbGxlLAogICAgICBmYUJhc2tldFNob3BwaW5nLAogICAgICBmYVNob3BwaW5nQmFza2V0LAogICAgICBmYUJyaWRnZSwKICAgICAgZmFQbGFuZUFycml2YWwsCiAgICAgIGZhQ2FzaFJlZ2lzdGVyLAogICAgICBmYVJpbmcsCiAgICAgIGZhU2hhcmVOb2RlcywKICAgICAgZmFTaGFyZUFsdCwKICAgICAgZmFQZXJzb25DaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCaW5vY3VsYXJzLAogICAgICBmYUtpcFNpZ24sCiAgICAgIGZhSGFyZERyaXZlOiBmYUhhcmREcml2ZTIsCiAgICAgIGZhSGRkOiBmYUhkZDIsCiAgICAgIGZhUmFua2luZ1N0YXIsCiAgICAgIGZhVXNlclRpZSwKICAgICAgZmFFbGxpcHNpcywKICAgICAgZmFFbGxpcHNpc0gsCiAgICAgIGZhU3RvcmVTbGFzaCwKICAgICAgZmFQZXJjZW50LAogICAgICBmYVBlcmNlbnRhZ2UsCiAgICAgIGZhRmlsZVppcHBlcjogZmFGaWxlWmlwcGVyMiwKICAgICAgZmFGaWxlQXJjaGl2ZTogZmFGaWxlQXJjaGl2ZTIsCiAgICAgIGZhRGlzcGxheSwKICAgICAgZmFJY29ucywKICAgICAgZmFIZWFydE11c2ljQ2FtZXJhQm9sdCwKICAgICAgZmFSdWxlclZlcnRpY2FsLAogICAgICBmYU1hcExvY2F0aW9uRG90LAogICAgICBmYU1hcE1hcmtlZEFsdCwKICAgICAgZmFIZWFydENyYWNrLAogICAgICBmYUhlYXJ0QnJva2VuLAogICAgICBmYUNvdywKICAgICAgZmFSc3MsCiAgICAgIGZhRmVlZCwKICAgICAgZmFNYWduaWZ5aW5nR2xhc3MsCiAgICAgIGZhU2VhcmNoLAogICAgICBmYUNsb3VkTW9vbiwKICAgICAgZmFCb3hlc1N0YWNrZWQsCiAgICAgIGZhQm94ZXMsCiAgICAgIGZhQm94ZXNBbHQsCiAgICAgIGZhQ29kZUJyYW5jaCwKICAgICAgZmFCYW4sCiAgICAgIGZhQ2FuY2VsLAogICAgICBmYUp1Z0RldGVyZ2VudCwKICAgICAgZmFSZXBseSwKICAgICAgZmFNYWlsUmVwbHksCiAgICAgIGZhU3VuUGxhbnRXaWx0LAogICAgICBmYUJhY3Rlcml1bSwKICAgICAgZmFSZWNvcmRWaW55bCwKICAgICAgZmFGbG9wcHlEaXNrOiBmYUZsb3BweURpc2syLAogICAgICBmYVNhdmU6IGZhU2F2ZTIsCiAgICAgIGZhVG9pbGV0c1BvcnRhYmxlLAogICAgICBmYU8sCiAgICAgIGZhUGFsZXR0ZSwKICAgICAgZmFVbmxvY2ssCiAgICAgIGZhRWFyTGlzdGVuLAogICAgICBmYUFzc2lzdGl2ZUxpc3RlbmluZ1N5c3RlbXMsCiAgICAgIGZhQ29kZVB1bGxSZXF1ZXN0LAogICAgICBmYUtleSwKICAgICAgZmFTa3VsbCwKICAgICAgZmFNYXJzU3Ryb2tlVXAsCiAgICAgIGZhTWFyc1N0cm9rZVYsCiAgICAgIGZhRmlyZUZsYW1lU2ltcGxlLAogICAgICBmYUJ1cm4sCiAgICAgIGZhVHJlZSwKICAgICAgZmFTbW9nLAogICAgICBmYVMsCiAgICAgIGZhSmVkaSwKICAgICAgZmFQZXJzb25IaWtpbmcsCiAgICAgIGZhSGlraW5nLAogICAgICBmYUFycm93c1VwVG9MaW5lLAogICAgICBmYU1hcnNEb3VibGUsCiAgICAgIGZhVGhlcm1vbWV0ZXIsCiAgICAgIGZhUGFpbnRicnVzaCwKICAgICAgZmFQYWludEJydXNoLAogICAgICBmYU5ldXRlciwKICAgICAgZmFTcXVhcmVQaG9uZUZsaXAsCiAgICAgIGZhUGhvbmVTcXVhcmVBbHQsCiAgICAgIGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQ6IGZhRmFjZUdyaW5Ub25ndWVTcXVpbnQyLAogICAgICBmYUdyaW5Ub25ndWVTcXVpbnQ6IGZhR3JpblRvbmd1ZVNxdWludDIsCiAgICAgIGZhQ29tbWVudERvbGxhciwKICAgICAgZmFIaXBwbywKICAgICAgZmFCb3dsRm9vZCwKICAgICAgZmFTcXVhcmVWaXJ1cywKICAgICAgZmFDbG91ZFN1blJhaW4sCiAgICAgIGZhQXJyb3dSaWdodExvbmcsCiAgICAgIGZhTG9uZ0Fycm93UmlnaHQsCiAgICAgIGZhQnVpbGRpbmdVbiwKICAgICAgZmFUZW1wZXJhdHVyZUxvdywKICAgICAgZmFEb29yT3BlbiwKICAgICAgZmFBbGlnbkxlZnQsCiAgICAgIGZhQ2FtZXJhOiBmYUNhbWVyYTIsCiAgICAgIGZhQ2FtZXJhQWx0OiBmYUNhbWVyYUFsdDIsCiAgICAgIGZhVXNlcnNSYXlzLAogICAgICBmYVJhaW5ib3csCiAgICAgIGZhU2l0ZW1hcCwKICAgICAgZmFGYWNlR3JpblN0YXJzOiBmYUZhY2VHcmluU3RhcnMyLAogICAgICBmYUdyaW5TdGFyczogZmFHcmluU3RhcnMyLAogICAgICBmYVNvcnRVcCwKICAgICAgZmFTb3J0QXNjLAogICAgICBmYUV5ZTogZmFFeWUyLAogICAgICBmYUNhcmV0TGVmdCwKICAgICAgZmFBcHBsZVdob2xlLAogICAgICBmYUFwcGxlQWx0LAogICAgICBmYVNjcm9sbFRvcmFoLAogICAgICBmYVRvcmFoLAogICAgICBmYUhvdXNlTG9jaywKICAgICAgZmFBcnJvd3NMZWZ0UmlnaHRUb0xpbmUsCiAgICAgIGZhVHJhc2gsCiAgICAgIGZhRmFjZVNhZFRlYXI6IGZhRmFjZVNhZFRlYXIyLAogICAgICBmYVNhZFRlYXI6IGZhU2FkVGVhcjIsCiAgICAgIGZhRmF4LAogICAgICBmYVBlcnNvbkNpcmNsZVBsdXMsCiAgICAgIGZhSGFtc2EsCiAgICAgIGZhUGVyc29uQ2lyY2xlUXVlc3Rpb24sCiAgICAgIGZhQ2xpcGJvYXJkQ2hlY2ssCiAgICAgIGZhU2hhcmVGcm9tU3F1YXJlOiBmYVNoYXJlRnJvbVNxdWFyZTIsCiAgICAgIGZhU2hhcmVTcXVhcmU6IGZhU2hhcmVTcXVhcmUyLAogICAgICBmYVJlY2VpcHQsCiAgICAgIGZhRXF1YWxzLAogICAgICBmYUNoZXZyb25VcCwKICAgICAgZmFWaXJ1c1NsYXNoLAogICAgICBmYVNsYXNoLAogICAgICBmYUV4cGFuZCwKICAgICAgZmFOb3RlU3RpY2t5OiBmYU5vdGVTdGlja3kyLAogICAgICBmYVN0aWNreU5vdGU6IGZhU3RpY2t5Tm90ZTIsCiAgICAgIGZhVGFibGVDb2x1bW5zLAogICAgICBmYUNvbHVtbnMsCiAgICAgIGZhUGVyc29uU2hlbHRlciwKICAgICAgZmFDaXJjbGVOb3RjaCwKICAgICAgZmFXYXRlciwKICAgICAgZmFEZWxldGVMZWZ0LAogICAgICBmYUJhY2tzcGFjZSwKICAgICAgZmFCcm9vbUJhbGwsCiAgICAgIGZhUXVpZGRpdGNoLAogICAgICBmYVF1aWRkaXRjaEJyb29tQmFsbCwKICAgICAgZmFKLAogICAgICBmYVNodXR0bGVTcGFjZSwKICAgICAgZmFTcGFjZVNodXR0bGUsCiAgICAgIGZhWWluWWFuZywKICAgICAgZmFTdG9wLAogICAgICBmYVRyb3dlbCwKICAgICAgZmFIYW5kQmFja0Zpc3Q6IGZhSGFuZEJhY2tGaXN0MiwKICAgICAgZmFIYW5kUm9jazogZmFIYW5kUm9jazIsCiAgICAgIGZhVGVtcGVyYXR1cmVIaWdoLAogICAgICBmYUdyZWF0ZXJUaGFuLAogICAgICBmYUNydXRjaCwKICAgICAgZmFTZXB0YWdvbiwKICAgICAgZmFIZXB0YWdvbiwKICAgICAgZmFTdHJlZXRWaWV3LAogICAgICBmYVdhdmVTcXVhcmUsCiAgICAgIGZhQW5nbGVMZWZ0LAogICAgICBmYVNjcmV3ZHJpdmVyLAogICAgICBmYVRyYWN0b3IsCiAgICAgIGZhQnJpZGdlQ2lyY2xlWG1hcmssCiAgICAgIGZhVmlhbHMsCiAgICAgIGZhU3RldGhvc2NvcGUsCiAgICAgIGZhUG9kY2FzdCwKICAgICAgZmFBcnJvd1VwUmlnaHREb3RzLAogICAgICBmYUNoZXNzUXVlZW46IGZhQ2hlc3NRdWVlbjIsCiAgICAgIGZhQW5jaG9yQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRWxsaXBzaXNWZXJ0aWNhbCwKICAgICAgZmFFbGxpcHNpc1YsCiAgICAgIGZhSGVhcnRDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFCdWlsZGluZ0NpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVBlcnNvbkFycm93VXBGcm9tTGluZSwKICAgICAgZmFOb3RFcXVhbCwKICAgICAgZmFUcmFpblRyYW0sCiAgICAgIGZhUGxhbmVEZXBhcnR1cmUsCiAgICAgIGZhUmlnaHRUb0JyYWNrZXQsCiAgICAgIGZhU2lnbkluQWx0LAogICAgICBmYVNkQ2FyZCwKICAgICAgZmFIb3VzZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYVNoZWtlbFNpZ24sCiAgICAgIGZhSWxzLAogICAgICBmYVNoZWtlbCwKICAgICAgZmFTaGVxZWwsCiAgICAgIGZhU2hlcWVsU2lnbiwKICAgICAgZmFSYWRpbywKICAgICAgZmFIYW5kRG90cywKICAgICAgZmFBbGxlcmdpZXMsCiAgICAgIGZhQm9va1NrdWxsLAogICAgICBmYUJvb2tEZWFkLAogICAgICBmYVVubG9ja0tleWhvbGUsCiAgICAgIGZhVW5sb2NrQWx0LAogICAgICBmYUZpbGVBcnJvd1VwLAogICAgICBmYUZpbGVVcGxvYWQsCiAgICAgIGZhRmFjZUdyaW5UZWFyczogZmFGYWNlR3JpblRlYXJzMiwKICAgICAgZmFHcmluVGVhcnM6IGZhR3JpblRlYXJzMiwKICAgICAgZmFQZW5Ub1NxdWFyZTogZmFQZW5Ub1NxdWFyZTIsCiAgICAgIGZhRWRpdDogZmFFZGl0MiwKICAgICAgZmFFYXJ0aEV1cm9wZSwKICAgICAgZmFHbG9iZUV1cm9wZSwKICAgICAgZmFGYWNlR3JpbkJlYW1Td2VhdDogZmFGYWNlR3JpbkJlYW1Td2VhdDIsCiAgICAgIGZhR3JpbkJlYW1Td2VhdDogZmFHcmluQmVhbVN3ZWF0MiwKICAgICAgZmFDaXJjbGVIYWxmU3Ryb2tlLAogICAgICBmYUFkanVzdCwKICAgICAgZmFQZXJzb25NaWxpdGFyeVRvUGVyc29uLAogICAgICBmYVRhYmxlQ2VsbHNDb2x1bW5Mb2NrLAogICAgICBmYVRydWNrRmllbGRVbiwKICAgICAgZmFDbG9jazogZmFDbG9jazIsCiAgICAgIGZhQ2xvY2tGb3VyOiBmYUNsb2NrRm91cjIsCiAgICAgIGZhQm9vaywKICAgICAgZmFGYWNlTGF1Z2hXaW5rOiBmYUZhY2VMYXVnaFdpbmsyLAogICAgICBmYUxhdWdoV2luazogZmFMYXVnaFdpbmsyLAogICAgICBmYUNsb3VkTWVhdGJhbGwsCiAgICAgIGZhQ2hhcnRBcmVhLAogICAgICBmYUFyZWFDaGFydCwKICAgICAgZmFSdXBpYWhTaWduLAogICAgICBmYVRleHRXaWR0aCwKICAgICAgZmFTYXRlbGxpdGUsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzTWludXMsCiAgICAgIGZhU2VhcmNoTWludXMsCiAgICAgIGZhUGVvcGxlR3JvdXAsCiAgICAgIGZhU3F1YXJlQmluYXJ5LAogICAgICBmYU1hc2tzVGhlYXRlciwKICAgICAgZmFUaGVhdGVyTWFza3MsCiAgICAgIGZhQ2FydFBsdXMsCiAgICAgIGZhSGFuZHNBc2xJbnRlcnByZXRpbmcsCiAgICAgIGZhQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsCiAgICAgIGZhQXNsSW50ZXJwcmV0aW5nLAogICAgICBmYUhhbmRzQW1lcmljYW5TaWduTGFuZ3VhZ2VJbnRlcnByZXRpbmcsCiAgICAgIGZhVGFibGVDZWxsc1Jvd1VubG9jaywKICAgICAgZmFSb2NrZXQsCiAgICAgIGZhU2hyaW1wLAogICAgICBmYVRlbmdlU2lnbiwKICAgICAgZmFUZW5nZSwKICAgICAgZmFIb3VzZUNoaW1uZXlNZWRpY2FsLAogICAgICBmYUNsaW5pY01lZGljYWwsCiAgICAgIGZhVXNlcnNTbGFzaCwKICAgICAgZmFQYXBlclBsYW5lOiBmYVBhcGVyUGxhbmUyLAogICAgICBmYUJvb2tBdGxhcywKICAgICAgZmFBdGxhcywKICAgICAgZmFUYWJsZSwKICAgICAgZmFIZWFydDogZmFIZWFydDIsCiAgICAgIGZhQ2lyY2xlQ2hldnJvblVwLAogICAgICBmYUNoZXZyb25DaXJjbGVVcCwKICAgICAgZmFCYXR0ZXJ5SGFsZiwKICAgICAgZmFCYXR0ZXJ5MywKICAgICAgZmFGb250QXdlc29tZTogZmFGb250QXdlc29tZTMsCiAgICAgIGZhRm9udEF3ZXNvbWVGbGFnOiBmYUZvbnRBd2Vzb21lRmxhZzMsCiAgICAgIGZhRm9udEF3ZXNvbWVMb2dvRnVsbDogZmFGb250QXdlc29tZUxvZ29GdWxsMywKICAgICAgZmFIYW5kY3VmZnMsCiAgICAgIGZhSGF0Q293Ym95U2lkZSwKICAgICAgZmFJbmR1c3RyeSwKICAgICAgZmFMaW5lc0xlYW5pbmcsCiAgICAgIGZhUGFzc3BvcnQsCiAgICAgIGZhSW5maW5pdHksCiAgICAgIGZhQ2xvbmU6IGZhQ2xvbmUyLAogICAgICBmYUZvcndhcmQsCiAgICAgIGZhTSwKICAgICAgZmFSb2FkU3Bpa2VzLAogICAgICBmYU1vdW50YWluLAogICAgICBmYUNoZXNzLAogICAgICBmYVRlbXBlcmF0dXJlVGhyZWVRdWFydGVycywKICAgICAgZmFUZW1wZXJhdHVyZTMsCiAgICAgIGZhVGhlcm1vbWV0ZXIzLAogICAgICBmYVRoZXJtb21ldGVyVGhyZWVRdWFydGVycywKICAgICAgZmFCLAogICAgICBmYVNoaWVsZFZpcnVzLAogICAgICBmYUxpdGVjb2luU2lnbiwKICAgICAgZmFEaWNlRDYsCiAgICAgIGZhR3JpcExpbmVzVmVydGljYWwsCiAgICAgIGZhR29sZkJhbGxUZWUsCiAgICAgIGZhR29sZkJhbGwsCiAgICAgIGZhSGV4YWdvbiwKICAgICAgZmFGb2xkZXJPcGVuOiBmYUZvbGRlck9wZW4yLAogICAgICBmYUthYWJhLAogICAgICBmYUhhbmRIb2xkaW5nLAogICAgICBmYVNpbmdsZVF1b3RlUmlnaHQsCiAgICAgIGZhQm90dGxlRHJvcGxldCwKICAgICAgZmFXaW5kb3dNaW5pbWl6ZTogZmFXaW5kb3dNaW5pbWl6ZTIsCiAgICAgIGZhQ2hldnJvblJpZ2h0LAogICAgICBmYUVnZywKICAgICAgZmFMYW5kbWFya0RvbWUsCiAgICAgIGZhTGFuZG1hcmtBbHQsCiAgICAgIGZhV29ybSwKICAgICAgZmFVc2VySW5qdXJlZCwKICAgICAgZmFTdHJpa2V0aHJvdWdoLAogICAgICBmYUJsb2csCiAgICAgIGZhU3RvcHdhdGNoMjAsCiAgICAgIGZhVHJ1Y2tQaWNrdXAsCiAgICAgIGZhU2VlZGxpbmcsCiAgICAgIGZhU3Byb3V0LAogICAgICBmYVRyYW5zZ2VuZGVyLAogICAgICBmYVRyYW5zZ2VuZGVyQWx0LAogICAgICBmYVN0YXJIYWxmOiBmYVN0YXJIYWxmMiwKICAgICAgZmFQaG90b0ZpbG0sCiAgICAgIGZhUGhvdG9WaWRlbywKICAgICAgZmFQdW1wTWVkaWNhbCwKICAgICAgZmFGaXJlLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc1BsdXMsCiAgICAgIGZhU2VhcmNoUGx1cywKICAgICAgZmFGbGFzaywKICAgICAgZmFBbGlnblJpZ2h0LAogICAgICBmYUNhYmxlQ2FyLAogICAgICBmYVRyYW0sCiAgICAgIGZhS2l0TWVkaWNhbCwKICAgICAgZmFGaXJzdEFpZCwKICAgICAgZmFHcmlwTGluZXMsCiAgICAgIGZhQnVyZ2VyLAogICAgICBmYUhhbWJ1cmdlciwKICAgICAgZmFTbm93bWFuLAogICAgICBmYUhvdGVsLAogICAgICBmYVByaW50LAogICAgICBmYVZvbGxleWJhbGwsCiAgICAgIGZhVm9sbGV5YmFsbEJhbGwsCiAgICAgIGZhVHJhZmZpY0xpZ2h0LAogICAgICBmYVBsYW5lQ2lyY2xlQ2hlY2ssCiAgICAgIGZhVXNlcnMsCiAgICAgIGZhQ2VydGlmaWNhdGUsCiAgICAgIGZhQWxhcm1DbG9jazogZmFBbGFybUNsb2NrMiwKICAgICAgZmFIZWxpY29wdGVyU3ltYm9sLAogICAgICBmYUhvdXNlQ2hpbW5leUNyYWNrLAogICAgICBmYUhvdXNlRGFtYWdlLAogICAgICBmYVBlcnNvbk1pbGl0YXJ5UG9pbnRpbmcsCiAgICAgIGZhRGF0YWJhc2UsCiAgICAgIGZhTmV3c3BhcGVyOiBmYU5ld3NwYXBlcjIsCiAgICAgIGZhQ2xvdWRSYWluLAogICAgICBmYU1heGltaXplLAogICAgICBmYUV4cGFuZEFycm93c0FsdCwKICAgICAgZmFMb2NhdGlvbkFycm93LAogICAgICBmYUNpdHksCiAgICAgIGZhWFJheSwKICAgICAgZmFVbWJyZWxsYUJlYWNoLAogICAgICBmYUFycm93UmlnaHRUb0JyYWNrZXQsCiAgICAgIGZhU2lnbkluLAogICAgICBmYUhlYWRzZXQsCiAgICAgIGZhU3Bsb3RjaCwKICAgICAgZmFVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93QWx0VXAsCiAgICAgIGZhSGV4YWdvbk5vZGVzLAogICAgICBmYUhvc3BpdGFsOiBmYUhvc3BpdGFsMiwKICAgICAgZmFIb3NwaXRhbEFsdDogZmFIb3NwaXRhbEFsdDIsCiAgICAgIGZhSG9zcGl0YWxXaWRlOiBmYUhvc3BpdGFsV2lkZTIsCiAgICAgIGZhUGVyc29uSGFyYXNzaW5nLAogICAgICBmYU1vbmV5QmlsbFRyZW5kVXAsCiAgICAgIGZhUGVuUnVsZXIsCiAgICAgIGZhUGVuY2lsUnVsZXIsCiAgICAgIGZhUmVwZWF0LAogICAgICBmYUJvbmUsCiAgICAgIGZhRmlyZUZsYW1lQ3VydmVkLAogICAgICBmYUZpcmVBbHQsCiAgICAgIGZhQnVzU2ltcGxlLAogICAgICBmYUJ1c0FsdCwKICAgICAgZmFWZW51c01hcnMsCiAgICAgIGZhQmxlbmRlciwKICAgICAgZmFVLAogICAgICBmYVNoYXJlLAogICAgICBmYU1haWxGb3J3YXJkLAogICAgICBmYVBob25lRmxpcCwKICAgICAgZmFQaG9uZUFsdCwKICAgICAgZmFUb2lsZXRQb3J0YWJsZSwKICAgICAgZmFQZXJzb25QcmVnbmFudCwKICAgICAgZmFMZXNzVGhhbiwKICAgICAgZmFTdXBlcnNjcmlwdCwKICAgICAgZmFDaXJjbGVTdG9wOiBmYUNpcmNsZVN0b3AyLAogICAgICBmYVN0b3BDaXJjbGU6IGZhU3RvcENpcmNsZTIsCiAgICAgIGZhQXJyb3dzVXBEb3duLAogICAgICBmYUFycm93c1YsCiAgICAgIGZhUG9vU3Rvcm0sCiAgICAgIGZhUG9vQm9sdCwKICAgICAgZmFWaWRlb1NsYXNoLAogICAgICBmYVNxdWFyZVhtYXJrLAogICAgICBmYVRpbWVzU3F1YXJlLAogICAgICBmYVhtYXJrU3F1YXJlLAogICAgICBmYUhhbmRIb2xkaW5nRHJvcGxldCwKICAgICAgZmFIYW5kSG9sZGluZ1dhdGVyLAogICAgICBmYVdvblNpZ24sCiAgICAgIGZhS3J3LAogICAgICBmYVdvbiwKICAgICAgZmFPYmplY3RVbmdyb3VwOiBmYU9iamVjdFVuZ3JvdXAyLAogICAgICBmYUNvbW1lbnQ6IGZhQ29tbWVudDIsCiAgICAgIGZhSGlsbEF2YWxhbmNoZSwKICAgICAgZmFBcnJvd3NUb0V5ZSwKICAgICAgZmFTbm93cGxvdywKICAgICAgZmFDaGFydEdhbnR0LAogICAgICBmYVZpZGVvLAogICAgICBmYVZpZGVvQ2FtZXJhLAogICAgICBmYUNoZXNzUGF3bjogZmFDaGVzc1Bhd24yLAogICAgICBmYVN5bmFnb2d1ZSwKICAgICAgZmFCdWlsZGluZ0NpcmNsZUNoZWNrLAogICAgICBmYUNhbGVuZGFyUGx1czogZmFDYWxlbmRhclBsdXMyLAogICAgICBmYVdoZWVsY2hhaXJNb3ZlLAogICAgICBmYVdoZWVsY2hhaXJBbHQsCiAgICAgIGZhVXNlclNoaWVsZCwKICAgICAgZmFCb2xkLAogICAgICBmYUhlYXJ0UHVsc2UsCiAgICAgIGZhSGVhcnRiZWF0LAogICAgICBmYVNxdWFyZVJvb3RWYXJpYWJsZSwKICAgICAgZmFTcXVhcmVSb290QWx0LAogICAgICBmYUhhbmRzQnViYmxlcywKICAgICAgZmFIYW5kc1dhc2gsCiAgICAgIGZhTWFya2VyLAogICAgICBmYUNsaXBib2FyZDogZmFDbGlwYm9hcmQyLAogICAgICBmYVBsYWNlT2ZXb3JzaGlwLAogICAgICBmYUNhbm5hYmlzLAogICAgICBmYVBlb3BsZVJvb2YsCiAgICAgIGZhRGlzZWFzZSwKICAgICAgZmFCb29rQmlibGUsCiAgICAgIGZhQmlibGUsCiAgICAgIGZhQ2hlc3NCb2FyZCwKICAgICAgZmFNYXJzLAogICAgICBmYUxhcHRvcCwKICAgICAgZmFVc2VyWG1hcmssCiAgICAgIGZhVXNlclRpbWVzLAogICAgICBmYUZsYWdVc2EsCiAgICAgIGZhSGFuZE1pZGRsZUZpbmdlciwKICAgICAgZmFNb3J0YXJQZXN0bGUsCiAgICAgIGZhSGVhZFNpZGVDb3VnaCwKICAgICAgZmFQbGFuZUxvY2ssCiAgICAgIGZhQmF0dGVyeVRocmVlUXVhcnRlcnMsCiAgICAgIGZhQmF0dGVyeTQsCiAgICAgIGZhRnJhbmNTaWduLAogICAgICBmYUZpbHRlckNpcmNsZURvbGxhciwKICAgICAgZmFGdW5uZWxEb2xsYXIsCiAgICAgIGZhQ2hlZXNlLAogICAgICBmYUNpcmNsZUgsCiAgICAgIGZhSG9zcGl0YWxTeW1ib2wsCiAgICAgIGZhU2Nob29sLAogICAgICBmYURpY2VGaXZlLAogICAgICBmYVRvcm5hZG8sCiAgICAgIGZhSmV0RmlnaHRlciwKICAgICAgZmFGaWdodGVySmV0LAogICAgICBmYVRodW1ic0Rvd246IGZhVGh1bWJzRG93bjIsCiAgICAgIGZhQnJvb20sCiAgICAgIGZhRmlsZUltcG9ydCwKICAgICAgZmFBcnJvd1JpZ2h0VG9GaWxlLAogICAgICBmYVV0ZW5zaWxzLAogICAgICBmYUN1dGxlcnksCiAgICAgIGZhSWRCYWRnZTogZmFJZEJhZGdlMiwKICAgICAgZmFTcGlkZXIsCiAgICAgIGZhTW9iaWxlUmV0cm8sCiAgICAgIGZhU2lnbnNQb3N0LAogICAgICBmYU1hcFNpZ25zLAogICAgICBmYUdyb3VwQXJyb3dzUm90YXRlLAogICAgICBmYUFycm93c1NwbGl0VXBBbmRMZWZ0LAogICAgICBmYUZpbGxEcmlwLAogICAgICBmYVNoaWVsZEhlYXJ0LAogICAgICBmYVBlcnNvblNraWluZ05vcmRpYywKICAgICAgZmFTa2lpbmdOb3JkaWMsCiAgICAgIGZhU3F1YXJlQ2hlY2s6IGZhU3F1YXJlQ2hlY2syLAogICAgICBmYUNoZWNrU3F1YXJlOiBmYUNoZWNrU3F1YXJlMiwKICAgICAgZmFCYXRoLAogICAgICBmYUJhdGh0dWIsCiAgICAgIGZhQ2hlc3NCaXNob3A6IGZhQ2hlc3NCaXNob3AyLAogICAgICBmYVByZXNjcmlwdGlvbkJvdHRsZU1lZGljYWwsCiAgICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlQWx0LAogICAgICBmYURyYXdQb2x5Z29uLAogICAgICBmYVZlY3RvclBvbHlnb24sCiAgICAgIGZhSUN1cnNvciwKICAgICAgZmFIZWFydENpcmNsZVBsdXMsCiAgICAgIGZhU2hpZWxkRG9nLAogICAgICBmYUdyZWF0ZXJUaGFuRXF1YWwsCiAgICAgIGZhRW52ZWxvcGVPcGVuOiBmYUVudmVsb3BlT3BlbjIsCiAgICAgIGZhTW91bmQsCiAgICAgIGZhVm9pY2VtYWlsLAogICAgICBmYVZlc3QsCiAgICAgIGZhQXVkaW9EZXNjcmlwdGlvbiwKICAgICAgZmFXLAogICAgICBmYUV5ZURyb3BwZXIsCiAgICAgIGZhRXllRHJvcHBlckVtcHR5LAogICAgICBmYUV5ZWRyb3BwZXIsCiAgICAgIGZhQ2lyY2xlWG1hcms6IGZhQ2lyY2xlWG1hcmsyLAogICAgICBmYVRpbWVzQ2lyY2xlOiBmYVRpbWVzQ2lyY2xlMiwKICAgICAgZmFYbWFya0NpcmNsZTogZmFYbWFya0NpcmNsZTIsCiAgICAgIGZhVHJhaWxlciwKICAgICAgZmFUdXJraXNoTGlyYVNpZ24sCiAgICAgIGZhVHJ5LAogICAgICBmYVR1cmtpc2hMaXJhLAogICAgICBmYVZvbGNhbm8sCiAgICAgIGZhV2FuZFNwYXJrbGVzLAogICAgICBmYU1pY3JvcGhvbmUsCiAgICAgIGZhQ3Jvd24sCiAgICAgIGZhVGVudEFycm93VHVybkxlZnQsCiAgICAgIGZhVHJ1Y2tGYXN0LAogICAgICBmYVNoaXBwaW5nRmFzdCwKICAgICAgZmFVc2VyUGVuLAogICAgICBmYVVzZXJFZGl0LAogICAgICBmYVVzZXJDbG9jaywKICAgICAgZmFTaG93ZXIsCiAgICAgIGZhU3F1YXJlQ2FyZXRVcDogZmFTcXVhcmVDYXJldFVwMiwKICAgICAgZmFDYXJldFNxdWFyZVVwOiBmYUNhcmV0U3F1YXJlVXAyLAogICAgICBmYU1hcExvY2F0aW9uLAogICAgICBmYU1hcE1hcmtlZCwKICAgICAgZmFQZW5GYW5jeSwKICAgICAgZmFFdXJvU2lnbiwKICAgICAgZmFFdXIsCiAgICAgIGZhRXVybywKICAgICAgZmFIb3VzZUNpcmNsZVhtYXJrLAogICAgICBmYUxpcmFTaWduLAogICAgICBmYVllblNpZ24sCiAgICAgIGZhQ255LAogICAgICBmYUpweSwKICAgICAgZmFSbWIsCiAgICAgIGZhWWVuLAogICAgICBmYUJveE9wZW4sCiAgICAgIGZhVHJ1Y2tGaWVsZCwKICAgICAgZmFMb2NhdGlvblBpbkxvY2ssCiAgICAgIGZhUGVyc29uUHJheWluZywKICAgICAgZmFQcmF5LAogICAgICBmYUNsaXBib2FyZExpc3QsCiAgICAgIGZhU2Fja0RvbGxhciwKICAgICAgZmFNb3VudGFpblN1biwKICAgICAgZmFBcnJvd1VwV2lkZVNob3J0LAogICAgICBmYVNvcnRBbW91bnRVcCwKICAgICAgZmFVc2Vyc0xpbmUsCiAgICAgIGZhU3Rhck9mRGF2aWQsCiAgICAgIGZhTm90ZXNNZWRpY2FsLAogICAgICBmYUF1c3RyYWxTaWduLAogICAgICBmYUNsaXBib2FyZFVzZXIsCiAgICAgIGZhRmlsZUltYWdlOiBmYUZpbGVJbWFnZTIsCiAgICAgIGZhU3F1YXJlQ2FyZXRSaWdodDogZmFTcXVhcmVDYXJldFJpZ2h0MiwKICAgICAgZmFDYXJldFNxdWFyZVJpZ2h0OiBmYUNhcmV0U3F1YXJlUmlnaHQyLAogICAgICBmYVZpYWwsCiAgICAgIGZhSGVsaWNvcHRlciwKICAgICAgZmFNaXR0ZW4sCiAgICAgIGZhR2FzUHVtcCwKICAgICAgZmFFbnZlbG9wZUNpcmNsZUNoZWNrLAogICAgICBmYVBlcnNvblNrYXRpbmcsCiAgICAgIGZhU2thdGluZywKICAgICAgZmFTdW46IGZhU3VuMiwKICAgICAgZmFCYXNlYmFsbCwKICAgICAgZmFCYXNlYmFsbEJhbGwsCiAgICAgIGZhSW1hZ2U6IGZhSW1hZ2UyLAogICAgICBmYU5vdGRlZiwKICAgICAgZmFCYXNrZXRiYWxsLAogICAgICBmYUJhc2tldGJhbGxCYWxsLAogICAgICBmYVBlbmNpbCwKICAgICAgZmFQZW5jaWxBbHQsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Fycm93TG9vcExlZnQsCiAgICAgIGZhRGljZVNpeCwKICAgICAgZmFBbmdsZXNEb3duLAogICAgICBmYUFuZ2xlRG91YmxlRG93biwKICAgICAgZmFTeXJpbmdlLAogICAgICBmYVdoZWF0QXduLAogICAgICBmYVdoZWF0QWx0LAogICAgICBmYVBsYW5lVXAsCiAgICAgIGZhQWxpZ25DZW50ZXIsCiAgICAgIGZhSG9ja2V5UHVjaywKICAgICAgZmFDaXJjbGVBcnJvd0xlZnQsCiAgICAgIGZhQXJyb3dDaXJjbGVMZWZ0LAogICAgICBmYVBsdWdDaXJjbGVCb2x0LAogICAgICBmYVJlc3Ryb29tLAogICAgICBmYUFuY2hvckxvY2ssCiAgICAgIGZhVGltZWxpbmUsCiAgICAgIGZhTGlnaHRidWxiOiBmYUxpZ2h0YnVsYjIsCiAgICAgIGZhQ2lyY2xlQXJyb3dSaWdodCwKICAgICAgZmFBcnJvd0NpcmNsZVJpZ2h0LAogICAgICBmYU1hcnNBbmRWZW51cywKICAgICAgZmFOZXR3b3JrV2lyZWQsCiAgICAgIGZhQnVpbGRpbmdTaGllbGQsCiAgICAgIGZhQ29kZSwKICAgICAgZmFGZWF0aGVyUG9pbnRlZCwKICAgICAgZmFGZWF0aGVyQWx0LAogICAgICBmYUZpbGVDaXJjbGVRdWVzdGlvbiwKICAgICAgZmFTaWduYXR1cmUsCiAgICAgIGZhRWFydGhBbWVyaWNhcywKICAgICAgZmFFYXJ0aCwKICAgICAgZmFFYXJ0aEFtZXJpY2EsCiAgICAgIGZhR2xvYmVBbWVyaWNhcywKICAgICAgZmFDYXJyb3QsCiAgICAgIGZhVGVtcGVyYXR1cmVGdWxsLAogICAgICBmYVRlbXBlcmF0dXJlNCwKICAgICAgZmFUaGVybW9tZXRlcjQsCiAgICAgIGZhVGhlcm1vbWV0ZXJGdWxsLAogICAgICBmYVRhYmxlQ2VsbHNSb3dMb2NrLAogICAgICBmYUJvbHRMaWdodG5pbmcsCiAgICAgIGZhQ2xvdWRTaG93ZXJzV2F0ZXIsCiAgICAgIGZhQXJyb3dVcExvbmcsCiAgICAgIGZhTG9uZ0Fycm93VXAsCiAgICAgIGZhQWRkcmVzc0NhcmQ6IGZhQWRkcmVzc0NhcmQyLAogICAgICBmYUNvbnRhY3RDYXJkOiBmYUNvbnRhY3RDYXJkMiwKICAgICAgZmFWY2FyZDogZmFWY2FyZDIsCiAgICAgIGZhQW5nbGVSaWdodCwKICAgICAgZmFGYWNlTWVoOiBmYUZhY2VNZWgyLAogICAgICBmYU1laDogZmFNZWgyLAogICAgICBmYUFycm93VXBGcm9tR3JvdW5kV2F0ZXIsCiAgICAgIGZhTWFwOiBmYU1hcDIsCiAgICAgIGZhVXNlclBsdXMsCiAgICAgIGZhVmVudXMsCiAgICAgIGZhRGlhZ3JhbVN1Y2Nlc3NvciwKICAgICAgZmFIZWFkU2lkZUNvdWdoU2xhc2gsCiAgICAgIGZhRGlhZ3JhbVByb2plY3QsCiAgICAgIGZhUHJvamVjdERpYWdyYW0sCiAgICAgIGZhVGVybWluYWwsCiAgICAgIGZhSG91c2VGaXJlLAogICAgICBmYU1hc2ssCiAgICAgIGZhSHVycmljYW5lLAogICAgICBmYUVhcnRoQWZyaWNhLAogICAgICBmYUdsb2JlQWZyaWNhLAogICAgICBmYVRodW1idGFjaywKICAgICAgZmFUaHVtYlRhY2ssCiAgICAgIGZhSGFuZFBvaW50RG93bjogZmFIYW5kUG9pbnREb3duMiwKICAgICAgZmFGYWNlTWVoQmxhbms6IGZhRmFjZU1laEJsYW5rMiwKICAgICAgZmFNZWhCbGFuazogZmFNZWhCbGFuazIsCiAgICAgIGZhVGVtcGVyYXR1cmVFbXB0eSwKICAgICAgZmFUZW1wZXJhdHVyZTAsCiAgICAgIGZhVGhlcm1vbWV0ZXIwLAogICAgICBmYVRoZXJtb21ldGVyRW1wdHksCiAgICAgIGZhQm9yZGVyTm9uZSwKICAgICAgZmFIaWdobGlnaHRlciwKICAgICAgZmFNb25leUJpbGxXYXZlLAogICAgICBmYVRvaWxldFBhcGVyU2xhc2gsCiAgICAgIGZhRmlsZVNoaWVsZCwKICAgICAgZmFUZXh0SGVpZ2h0LAogICAgICBmYUZhY2VHcmluVG9uZ3VlOiBmYUZhY2VHcmluVG9uZ3VlMiwKICAgICAgZmFHcmluVG9uZ3VlOiBmYUdyaW5Ub25ndWUyLAogICAgICBmYUZpbGVTaWduYXR1cmUsCiAgICAgIGZhQnVpbGRpbmdXaGVhdCwKICAgICAgZmFQbHVnQ2lyY2xlTWludXMsCiAgICAgIGZhRnV0Ym9sOiBmYUZ1dGJvbDIsCiAgICAgIGZhRnV0Ym9sQmFsbDogZmFGdXRib2xCYWxsMiwKICAgICAgZmFTb2NjZXJCYWxsOiBmYVNvY2NlckJhbGwyLAogICAgICBmYUNpcmNsZVBsdXMsCiAgICAgIGZhUGx1c0NpcmNsZSwKICAgICAgZmFCcmF6aWxpYW5SZWFsU2lnbiwKICAgICAgZmFTdGFyQW5kQ3Jlc2NlbnQsCiAgICAgIGZhRmFjZVN1cnByaXNlOiBmYUZhY2VTdXJwcmlzZTIsCiAgICAgIGZhU3VycHJpc2U6IGZhU3VycHJpc2UyLAogICAgICBmYUhvc3BpdGFsVXNlciwKICAgICAgZmFBcnJvd0Rvd25VcExvY2ssCiAgICAgIGZhRm9sZGVyOiBmYUZvbGRlcjIsCiAgICAgIGZhRm9sZGVyQmxhbms6IGZhRm9sZGVyQmxhbmsyLAogICAgICBmYUhvbGx5QmVycnksCiAgICAgIGZhVmVudXNEb3VibGUsCiAgICAgIGZhQ2xpcGJvYXJkUXVlc3Rpb24sCiAgICAgIGZhSG90ZG9nLAogICAgICBmYUFycm93VXBGcm9tQnJhY2tldCwKICAgICAgZmFNaWNyb3Njb3BlLAogICAgICBmYUNsb3VkOiBmYUNsb3VkMiwKICAgICAgZmFCYXNlYmFsbEJhdEJhbGwsCiAgICAgIGZhQ2FyUmVhciwKICAgICAgZmFDYXJBbHQsCiAgICAgIGZhVGh1bWJ0YWNrU2xhc2gsCiAgICAgIGZhVGh1bWJUYWNrU2xhc2gsCiAgICAgIGZhUGx1c01pbnVzLAogICAgICBmYUhvdXNlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2FsZW5kYXJEYXksCiAgICAgIGZhQ2lyY2xlOiBmYUNpcmNsZTIsCiAgICAgIGZhTW9iaWxlVmlicmF0ZSwKICAgICAgZmFGYWNlR3JpblNxdWludDogZmFGYWNlR3JpblNxdWludDIsCiAgICAgIGZhR3JpblNxdWludDogZmFHcmluU3F1aW50MiwKICAgICAgZmFVc2Vyc0JldHdlZW5MaW5lcywKICAgICAgZmFIb3VzZU1lZGljYWxDaXJjbGVYbWFyaywKICAgICAgZmFUYWJsZUxpc3QsCiAgICAgIGZhVGhMaXN0LAogICAgICBmYUZsYXNrVmlhbCwKICAgICAgZmFDaXJjbGVFeGNsYW1hdGlvbiwKICAgICAgZmFFeGNsYW1hdGlvbkNpcmNsZSwKICAgICAgZmFUYXhpLAogICAgICBmYUNhYiwKICAgICAgZmFUZXh0U2xhc2gsCiAgICAgIGZhUmVtb3ZlRm9ybWF0LAogICAgICBmYVBlb3BsZVB1bGxpbmcsCiAgICAgIGZhQmFja3dhcmQsCiAgICAgIGZhQ2FyQnVyc3QsCiAgICAgIGZhQ2FyQ3Jhc2gsCiAgICAgIGZhTGluaywKICAgICAgZmFDaGFpbiwKICAgICAgZmFCYWNrd2FyZFN0ZXAsCiAgICAgIGZhU3RlcEJhY2t3YXJkLAogICAgICBmYVgsCiAgICAgIGZhQ2lyY2xlVXNlcjogZmFDaXJjbGVVc2VyMiwKICAgICAgZmFVc2VyQ2lyY2xlOiBmYVVzZXJDaXJjbGUyLAogICAgICBmYVJlY3RhbmdsZUxpc3Q6IGZhUmVjdGFuZ2xlTGlzdDIsCiAgICAgIGZhTGlzdEFsdDogZmFMaXN0QWx0MiwKICAgICAgZmFIYW5kOiBmYUhhbmQyLAogICAgICBmYUhhbmRQYXBlcjogZmFIYW5kUGFwZXIyLAogICAgICBmYVZhblNodXR0bGUsCiAgICAgIGZhU2h1dHRsZVZhbiwKICAgICAgZmFTdGFpcnMsCiAgICAgIGZhSG9yc2VIZWFkLAogICAgICBmYVZhdWx0LAogICAgICBmYURydW1TdGVlbHBhbiwKICAgICAgZmFUaHVtYnNVcDogZmFUaHVtYnNVcDIsCiAgICAgIGZhU3RhbXAsCiAgICAgIGZhTWVub3JhaCwKICAgICAgZmFDaGlsZHJlbiwKICAgICAgZmFDaGFydExpbmUsCiAgICAgIGZhTGluZUNoYXJ0LAogICAgICBmYVNxdWFyZUVudmVsb3BlLAogICAgICBmYUVudmVsb3BlU3F1YXJlLAogICAgICBmYUJhblNtb2tpbmcsCiAgICAgIGZhU21va2luZ0JhbiwKICAgICAgZmFUcnVja0Zyb250LAogICAgICBmYUJ1aWxkaW5nOiBmYUJ1aWxkaW5nMiwKICAgICAgZmFCdWxsc2V5ZSwKICAgICAgZmFBcnJvd0xlZnRMb25nLAogICAgICBmYUxvbmdBcnJvd0xlZnQsCiAgICAgIGZhQ2hlc3NSb29rOiBmYUNoZXNzUm9vazIsCiAgICAgIGZhQmxlbmRlclBob25lLAogICAgICBmYUFycm93VHVyblVwLAogICAgICBmYUxldmVsVXAsCiAgICAgIGZhQmljeWNsZSwKICAgICAgZmFDaXJjbGVBcnJvd0Rvd24sCiAgICAgIGZhQXJyb3dDaXJjbGVEb3duLAogICAgICBmYUdlYXIsCiAgICAgIGZhQ29nLAogICAgICBmYU1hcnNBbmRWZW51c0J1cnN0LAogICAgICBmYU90dGVyLAogICAgICBmYUNpcmNsZUNoZXZyb25MZWZ0LAogICAgICBmYUNoZXZyb25DaXJjbGVMZWZ0LAogICAgICBmYUNpcmNsZVF1ZXN0aW9uOiBmYUNpcmNsZVF1ZXN0aW9uMiwKICAgICAgZmFRdWVzdGlvbkNpcmNsZTogZmFRdWVzdGlvbkNpcmNsZTIsCiAgICAgIGZhV2Fsa2llVGFsa2llLAogICAgICBmYVVzZXJHcm91cCwKICAgICAgZmFVc2VyRnJpZW5kcywKICAgICAgZmFIb3VzZUNoaW1uZXksCiAgICAgIGZhSG9tZUxnLAogICAgICBmYVJpZ2h0RnJvbUJyYWNrZXQsCiAgICAgIGZhU2lnbk91dEFsdCwKICAgICAgZmFGaWxlOiBmYUZpbGUyLAogICAgICBmYVBsYW5lU2xhc2gsCiAgICAgIGZhQ2xvdWRTaG93ZXJzSGVhdnksCiAgICAgIGZhUGVyc29uRmFsbGluZywKICAgICAgZmFUdXJuRG93biwKICAgICAgZmFMZXZlbERvd25BbHQsCiAgICAgIGZhVXBSaWdodEFuZERvd25MZWZ0RnJvbUNlbnRlciwKICAgICAgZmFFeHBhbmRBbHQsCiAgICAgIGZhVXNlclRhZywKICAgICAgZmFIYW5kU3BhcmtsZXMsCiAgICAgIGZhQXJyb3dzVG9Eb3QsCiAgICAgIGZhRmFjZVNhZENyeTogZmFGYWNlU2FkQ3J5MiwKICAgICAgZmFTYWRDcnk6IGZhU2FkQ3J5MiwKICAgICAgZmFEb25nU2lnbiwKICAgICAgZmFQZW9wbGVMaW5lLAogICAgICBmYVNxdWFyZVJzcywKICAgICAgZmFSc3NTcXVhcmUsCiAgICAgIGZhQ2FsZW5kYXJNaW51czogZmFDYWxlbmRhck1pbnVzMiwKICAgICAgZmFDaGFydERpYWdyYW0sCiAgICAgIGZhRmFjZVRpcmVkOiBmYUZhY2VUaXJlZDIsCiAgICAgIGZhVGlyZWQ6IGZhVGlyZWQyLAogICAgICBmYUhhbmRQb2ludFJpZ2h0OiBmYUhhbmRQb2ludFJpZ2h0MiwKICAgICAgZmFBcnJvd1VwLAogICAgICBmYUN1YmVzU3RhY2tlZCwKICAgICAgZmFDaGlsZENvbWJhdGFudCwKICAgICAgZmFDaGlsZFJpZmxlLAogICAgICBmYVZlc3RQYXRjaGVzLAogICAgICBmYU1hcnRpbmlHbGFzc0VtcHR5LAogICAgICBmYUdsYXNzTWFydGluaSwKICAgICAgZmFNYWduZXQsCiAgICAgIGZhUm9hZEJhcnJpZXIsCiAgICAgIGZhQ29tcGFzc0RyYWZ0aW5nLAogICAgICBmYURyYWZ0aW5nQ29tcGFzcywKICAgICAgZmFTcXVhcmVQZXJzb25Db25maW5lZCwKICAgICAgZmFQbGF0ZVdoZWF0LAogICAgICBmYVNpZ25IYW5naW5nLAogICAgICBmYVNpZ24sCiAgICAgIGZhQ2FyQmF0dGVyeSwKICAgICAgZmFCYXR0ZXJ5Q2FyLAogICAgICBmYVNoaXJ0LAogICAgICBmYVRTaGlydCwKICAgICAgZmFUc2hpcnQsCiAgICAgIGZhUGFyYWdyYXBoLAogICAgICBmYUVudmVsb3Blc0J1bGssCiAgICAgIGZhTWFpbEJ1bGssCiAgICAgIGZhR3VpdGFyLAogICAgICBmYVN1aXRjYXNlLAogICAgICBmYUNpcmNsZVVwOiBmYUNpcmNsZVVwMiwKICAgICAgZmFBcnJvd0FsdENpcmNsZVVwOiBmYUFycm93QWx0Q2lyY2xlVXAyLAogICAgICBmYUYsCiAgICAgIGZhWG1hcmtzTGluZXMsCiAgICAgIGZhRWFydGhPY2VhbmlhLAogICAgICBmYUdsb2JlT2NlYW5pYSwKICAgICAgZmFDb21tZW50U2xhc2gsCiAgICAgIGZhUGxheSwKICAgICAgZmFWaWFsQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQnJpZGdlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhQ2VkaVNpZ24sCiAgICAgIGZhUHV6emxlUGllY2UsCiAgICAgIGZhSGVsbWV0VW4sCiAgICAgIGZhR2xhc3NXYXRlciwKICAgICAgZmFIZWFydENpcmNsZUJvbHQsCiAgICAgIGZhUHVtcFNvYXAsCiAgICAgIGZhSGFuZFNjaXNzb3JzOiBmYUhhbmRTY2lzc29yczIsCiAgICAgIGZhRG9sbHksCiAgICAgIGZhRG9sbHlCb3gsCiAgICAgIGZhUGFwZXJjbGlwLAogICAgICBmYURlbW9jcmF0LAogICAgICBmYVNxdWFyZUFycm93VXBSaWdodCwKICAgICAgZmFFeHRlcm5hbExpbmtTcXVhcmUsCiAgICAgIGZhRmVycnksCiAgICAgIGZhTW9zcXVpdG8sCiAgICAgIGZhQnVpbGRpbmdDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBmYUxlZnRSaWdodCwKICAgICAgZmFBcnJvd3NBbHRILAogICAgICBmYVZpcnVzLAogICAgICBmYUdlbTogZmFHZW0yLAogICAgICBmYVRvaWxldCwKICAgICAgZmFTaW5nbGVRdW90ZUxlZnQsCiAgICAgIGZhTW9uZXlCaWxscywKICAgICAgZmFUYWJsZXRCdXR0b24sCiAgICAgIGZhUmVjdGFuZ2xlWG1hcms6IGZhUmVjdGFuZ2xlWG1hcmsyLAogICAgICBmYVJlY3RhbmdsZVRpbWVzOiBmYVJlY3RhbmdsZVRpbWVzMiwKICAgICAgZmFUaW1lc1JlY3RhbmdsZTogZmFUaW1lc1JlY3RhbmdsZTIsCiAgICAgIGZhV2luZG93Q2xvc2U6IGZhV2luZG93Q2xvc2UyLAogICAgICBmYVdyZW5jaCwKICAgICAgZmFUcmFzaENhbjogZmFUcmFzaENhbjIsCiAgICAgIGZhVHJhc2hBbHQ6IGZhVHJhc2hBbHQyLAogICAgICBmYVRhYmxlQ2VsbHMsCiAgICAgIGZhVGgsCiAgICAgIGZhUmliYm9uLAogICAgICBmYUxhbmRtYXJrRmxhZywKICAgICAgZmFVcERvd25MZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzQWx0LAogICAgICBmYUNhclNpZGUsCiAgICAgIGZhVHJhc2hBcnJvd1VwLAogICAgICBmYVRyYXNoUmVzdG9yZSwKICAgICAgZmFMaWZlUmluZzogZmFMaWZlUmluZzIsCiAgICAgIGZhQ29weXJpZ2h0OiBmYUNvcHlyaWdodDIsCiAgICAgIGZhRmlsZVByZXNjcmlwdGlvbiwKICAgICAgZmFFcmFzZXIsCiAgICAgIGZhSG91cmdsYXNzU3RhcnQsCiAgICAgIGZhSG91cmdsYXNzMSwKICAgICAgZmFDaXJjbGVMZWZ0OiBmYUNpcmNsZUxlZnQyLAogICAgICBmYUFycm93QWx0Q2lyY2xlTGVmdDogZmFBcnJvd0FsdENpcmNsZUxlZnQyLAogICAgICBmYUNydXplaXJvU2lnbiwKICAgICAgZmFTbW9raW5nLAogICAgICBmYVNxdWFyZVBvbGxWZXJ0aWNhbCwKICAgICAgZmFQb2xsLAogICAgICBmYVBlcnNvbkNpcmNsZU1pbnVzLAogICAgICBmYUJpb2hhemFyZCwKICAgICAgZmFCZWxsQ29uY2llcmdlLAogICAgICBmYUNvbmNpZXJnZUJlbGwsCiAgICAgIGZhUnVsZXJIb3Jpem9udGFsLAogICAgICBmYUhvcnNlLAogICAgICBmYUNhbGVuZGFyOiBmYUNhbGVuZGFyMiwKICAgICAgZmFIYW5kc0hvbGRpbmdDaGlsZCwKICAgICAgZmFJdGFsaWMsCiAgICAgIGZhS2hhbmRhLAogICAgICBmYUZhY2VGcm93bk9wZW46IGZhRmFjZUZyb3duT3BlbjIsCiAgICAgIGZhRnJvd25PcGVuOiBmYUZyb3duT3BlbjIsCiAgICAgIGZhQ2hlY2ssCiAgICAgIGZhRmluZ2VycHJpbnQsCiAgICAgIGZhQ2hhcmdpbmdTdGF0aW9uLAogICAgICBmYVVzZXJMb2NrLAogICAgICBmYU1vYmlsZVNjcmVlbkJ1dHRvbiwKICAgICAgZmFNb2JpbGVBbHQsCiAgICAgIGZhQW5jaG9yQ2lyY2xlQ2hlY2ssCiAgICAgIGZhUGVyc29uV2Fsa2luZ1dpdGhDYW5lLAogICAgICBmYUJsaW5kLAogICAgICBmYUZpbGVXYXZlZm9ybSwKICAgICAgZmFGaWxlTWVkaWNhbEFsdCwKICAgICAgZmFIb3VzZUNyYWNrLAogICAgICBmYUhhdFdpemFyZCwKICAgICAgZmFVc2VyRG9jdG9yLAogICAgICBmYVVzZXJNZCwKICAgICAgZmFDaGFydEJhcjogZmFDaGFydEJhcjIsCiAgICAgIGZhQmFyQ2hhcnQ6IGZhQmFyQ2hhcnQyLAogICAgICBmYVNwcmF5Q2FuU3BhcmtsZXMsCiAgICAgIGZhQWlyRnJlc2hlbmVyLAogICAgICBmYUJhaHRTaWduLAogICAgICBmYVRlbXBlcmF0dXJlQXJyb3dVcCwKICAgICAgZmFUZW1wZXJhdHVyZVVwLAogICAgICBmYVdlYkF3ZXNvbWU6IGZhV2ViQXdlc29tZTIsCiAgICAgIGZhTm9uQmluYXJ5LAogICAgICBmYU4sCiAgICAgIGZhQXJyb3dzVXBEb3duTGVmdFJpZ2h0LAogICAgICBmYUFycm93cywKICAgICAgZmFIb3VzZTogZmFIb3VzZTIsCiAgICAgIGZhSG9tZTogZmFIb21lMiwKICAgICAgZmFIb21lQWx0OiBmYUhvbWVBbHQyLAogICAgICBmYUhvbWVMZ0FsdDogZmFIb21lTGdBbHQyLAogICAgICBmYVNwaW5uZXIsCiAgICAgIGZhR2F2ZWwsCiAgICAgIGZhTGVnYWwsCiAgICAgIGZhVGlja2V0U2ltcGxlLAogICAgICBmYVRpY2tldEFsdCwKICAgICAgZmFEb3ZlLAogICAgICBmYVRhcnBEcm9wbGV0LAogICAgICBmYVRyZWVDaXR5LAogICAgICBmYVR1cm5VcCwKICAgICAgZmFMZXZlbFVwQWx0LAogICAgICBmYVRlbXBlcmF0dXJlUXVhcnRlciwKICAgICAgZmFUZW1wZXJhdHVyZTEsCiAgICAgIGZhVGhlcm1vbWV0ZXIxLAogICAgICBmYVRoZXJtb21ldGVyUXVhcnRlciwKICAgICAgZmFTbGlkZXJzLAogICAgICBmYVNsaWRlcnNILAogICAgICBmYU1vc3F1ZSwKICAgICAgZmFILAogICAgICBmYUluZm8sCiAgICAgIGZhUGVyc29uV2Fsa2luZywKICAgICAgZmFXYWxraW5nLAogICAgICBmYUFycm93VHVybkRvd24sCiAgICAgIGZhTGV2ZWxEb3duLAogICAgICBmYVJvYWQsCiAgICAgIGZhU3BpcmFsLAogICAgICBmYUZhY2VGcm93bjogZmFGYWNlRnJvd24yLAogICAgICBmYUZyb3duOiBmYUZyb3duMiwKICAgICAgZmFXaW5lR2xhc3NFbXB0eSwKICAgICAgZmFXaW5lR2xhc3NBbHQsCiAgICAgIGZhQ2xhcHBlcmJvYXJkLAogICAgICBmYUZvcndhcmRTdGVwLAogICAgICBmYVN0ZXBGb3J3YXJkLAogICAgICBmYVNxdWFyZVVwUmlnaHQsCiAgICAgIGZhRXh0ZXJuYWxMaW5rU3F1YXJlQWx0LAogICAgICBmYUJvb2tKb3VybmFsV2hpbGxzLAogICAgICBmYUpvdXJuYWxXaGlsbHMsCiAgICAgIGZhQ2hhbXBhZ25lR2xhc3NlcywKICAgICAgZmFHbGFzc0NoZWVycywKICAgICAgZmFEdW1wc3RlciwKICAgICAgZmFIZWFydENpcmNsZVhtYXJrLAogICAgICBmYUNvbXB1dGVyLAogICAgICBmYVdhbmRNYWdpYywKICAgICAgZmFNYWdpYywKICAgICAgZmFCcmFpbiwKICAgICAgZmFCcmllZmNhc2VNZWRpY2FsLAogICAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNvZGVDb21taXQsCiAgICAgIGZhUGVyc29uQnJlYXN0ZmVlZGluZywKICAgICAgZmFQZXJzb25SYXlzLAogICAgICBmYU1hbmF0U2lnbiwKICAgICAgZmFTb3J0LAogICAgICBmYVVuc29ydGVkLAogICAgICBmYUNpcmNsZVJhZGlhdGlvbiwKICAgICAgZmFSYWRpYXRpb25BbHQsCiAgICAgIGZhTGFwdG9wQ29kZSwKICAgICAgZmFTaW5rLAogICAgICBmYUFycm93VXBGcm9tV2F0ZXJQdW1wLAogICAgICBmYU1pY3JvcGhvbmVMaW5lc1NsYXNoLAogICAgICBmYU1pY3JvcGhvbmVBbHRTbGFzaCwKICAgICAgZmFTZXJ2ZXIsCiAgICAgIGZhVXNlcjogZmFVc2VyMiwKICAgICAgZmFVc2VyQWx0OiBmYVVzZXJBbHQyLAogICAgICBmYVVzZXJMYXJnZTogZmFVc2VyTGFyZ2UyLAogICAgICBmYVNub3dmbGFrZTogZmFTbm93Zmxha2UyLAogICAgICBmYVNrdWxsQ3Jvc3Nib25lcywKICAgICAgZmFQZXNvU2lnbiwKICAgICAgZmFXaW5lR2xhc3MsCiAgICAgIGZhVGVtcGVyYXR1cmVIYWxmLAogICAgICBmYVRlbXBlcmF0dXJlMiwKICAgICAgZmFUaGVybW9tZXRlcjIsCiAgICAgIGZhVGhlcm1vbWV0ZXJIYWxmLAogICAgICBmYVRpY2tldCwKICAgICAgZmFXaGVhdEF3bkNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUFycm93c1R1cm5SaWdodCwKICAgICAgZmFDYW5keUNhbmUsCiAgICAgIGZhV2hlZWxjaGFpciwKICAgICAgZmFTcGVsbENoZWNrLAogICAgICBmYVZvbHVtZU9mZiwKICAgICAgZmFMdW5ncywKICAgICAgZmFCb29rbWFyazogZmFCb29rbWFyazIsCiAgICAgIGZhQmFyY29kZSwKICAgICAgZmFMaXN0T2wsCiAgICAgIGZhTGlzdDEyLAogICAgICBmYUxpc3ROdW1lcmljLAogICAgICBmYUZpbGVDaXJjbGVYbWFyaywKICAgICAgZmFDdWJlLAogICAgICBmYVRhcGUsCiAgICAgIGZhQm9tYiwKICAgICAgZmFTY2FsZVVuYmFsYW5jZWQsCiAgICAgIGZhQmFsYW5jZVNjYWxlTGVmdCwKICAgICAgZmFTcXVhcmVDYXJldExlZnQ6IGZhU3F1YXJlQ2FyZXRMZWZ0MiwKICAgICAgZmFDYXJldFNxdWFyZUxlZnQ6IGZhQ2FyZXRTcXVhcmVMZWZ0MiwKICAgICAgZmFSdWxlciwKICAgICAgZmFJLAogICAgICBmYVZvbHVtZVhtYXJrLAogICAgICBmYVZvbHVtZU11dGUsCiAgICAgIGZhVm9sdW1lVGltZXMsCiAgICAgIGZhQXJjaHdheSwKICAgICAgZmFQZXJzb25EaWdnaW5nLAogICAgICBmYURpZ2dpbmcsCiAgICAgIGZhR2F1Z2VIaWdoLAogICAgICBmYVRhY2hvbWV0ZXJBbHQsCiAgICAgIGZhVGFjaG9tZXRlckFsdEZhc3QsCiAgICAgIGZhR2VuZGVybGVzcywKICAgICAgZmFDbG91ZFN1biwKICAgICAgZmFBcnJvd1JpZ2h0LAogICAgICBmYUhhbmRzaGFrZTogZmFIYW5kc2hha2UyLAogICAgICBmYUhhbmRzaGFrZUFsdDogZmFIYW5kc2hha2VBbHQyLAogICAgICBmYUhhbmRzaGFrZVNpbXBsZTogZmFIYW5kc2hha2VTaW1wbGUyLAogICAgICBmYVBlcnNvblNraWluZywKICAgICAgZmFTa2lpbmcsCiAgICAgIGZhQnJpZGdlV2F0ZXIsCiAgICAgIGZhQnVpbGRpbmdOZ28sCiAgICAgIGZhSWdsb28sCiAgICAgIGZhQ2lyY2xlRG9sbGFyVG9TbG90LAogICAgICBmYURvbmF0ZSwKICAgICAgZmFZLAogICAgICBmYUZhY2VTbWlsZVdpbms6IGZhRmFjZVNtaWxlV2luazIsCiAgICAgIGZhU21pbGVXaW5rOiBmYVNtaWxlV2luazIsCiAgICAgIGZhRGljZUZvdXIsCiAgICAgIGZhRmFjZUdyaW5TcXVpbnRUZWFyczogZmFGYWNlR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFHcmluU3F1aW50VGVhcnM6IGZhR3JpblNxdWludFRlYXJzMiwKICAgICAgZmFGaWxlQXVkaW86IGZhRmlsZUF1ZGlvMiwKICAgICAgZmFBcnJvd3NEb3duVG9MaW5lLAogICAgICBmYUcsCiAgICAgIGZhVmloYXJhLAogICAgICBmYUZsYWdDaGVja2VyZWQsCiAgICAgIGZhR2F1Z2VTaW1wbGUsCiAgICAgIGZhR2F1Z2VTaW1wbGVNZWQsCiAgICAgIGZhVGFjaG9tZXRlckF2ZXJhZ2UsCiAgICAgIGZhUmlnaHRMZWZ0LAogICAgICBmYUV4Y2hhbmdlQWx0LAogICAgICBmYVBpbGxzLAogICAgICBmYUV4cGxvc2lvbiwKICAgICAgZmFBcnJvd3NEb3duVG9QZW9wbGUsCiAgICAgIGZhVXNlcnNWaWV3ZmluZGVyLAogICAgICBmYUNhck9uLAogICAgICBmYVNsZWlnaCwKICAgICAgZmFEdW1iYmVsbCwKICAgICAgZmFCYWJ5Q2FycmlhZ2UsCiAgICAgIGZhQ2FycmlhZ2VCYWJ5LAogICAgICBmYUtpd2lCaXJkLAogICAgICBmYUNhbGVuZGFyWG1hcms6IGZhQ2FsZW5kYXJYbWFyazIsCiAgICAgIGZhQ2FsZW5kYXJUaW1lczogZmFDYWxlbmRhclRpbWVzMiwKICAgICAgZmFDaXJjbGVEb3duOiBmYUNpcmNsZURvd24yLAogICAgICBmYUFycm93QWx0Q2lyY2xlRG93bjogZmFBcnJvd0FsdENpcmNsZURvd24yLAogICAgICBmYUZpbGVNZWRpY2FsLAogICAgICBmYVhtYXJrLAogICAgICBmYUNsb3NlLAogICAgICBmYU11bHRpcGx5LAogICAgICBmYVJlbW92ZSwKICAgICAgZmFUaW1lcywKICAgICAgZmFTaGFwZXMsCiAgICAgIGZhVHJpYW5nbGVDaXJjbGVTcXVhcmUsCiAgICAgIGZhRGljZU9uZSwKICAgICAgZmFMb2NrT3BlbiwKICAgICAgZmFQZXBwZXJIb3QsCiAgICAgIGZhRHJvcGxldFNsYXNoLAogICAgICBmYVRpbnRTbGFzaCwKICAgICAgZmFEcm9wbGV0LAogICAgICBmYVRpbnQsCiAgICAgIGZhRmlsZUxpbmVzOiBmYUZpbGVMaW5lczIsCiAgICAgIGZhRmlsZUFsdDogZmFGaWxlQWx0MiwKICAgICAgZmFGaWxlVGV4dDogZmFGaWxlVGV4dDIsCiAgICAgIGZhQ29tbWVudHNEb2xsYXIsCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzTG9jYXRpb24sCiAgICAgIGZhU2VhcmNoTG9jYXRpb24sCiAgICAgIGZhRmlsZUludm9pY2UsCiAgICAgIGZhUGVudGFnb24sCiAgICAgIGZhUmVwdWJsaWNhbiwKICAgICAgZmFTaG9wLAogICAgICBmYVN0b3JlQWx0LAogICAgICBmYUZpbG0sCiAgICAgIGZhRmlsbUFsdCwKICAgICAgZmFGaWxtU2ltcGxlLAogICAgICBmYUJ1aWxkaW5nQ2lyY2xlWG1hcmssCiAgICAgIGZhQ29tbWVudHM6IGZhQ29tbWVudHMyLAogICAgICBmYVRhZ3MsCiAgICAgIGZhR3VuLAogICAgICBmYUNpcmNsZUNoZWNrOiBmYUNpcmNsZUNoZWNrMiwKICAgICAgZmFDaGVja0NpcmNsZTogZmFDaGVja0NpcmNsZTIsCiAgICAgIGZhSWRDYXJkQ2xpcCwKICAgICAgZmFJZENhcmRBbHQsCiAgICAgIGZhTW9vbjogZmFNb29uMiwKICAgICAgZmFPaWxXZWxsLAogICAgICBmYVRhY2hvZ3JhcGhEaWdpdGFsLAogICAgICBmYURpZ2l0YWxUYWNob2dyYXBoLAogICAgICBmYVRhYmxldCwKICAgICAgZmFUYWJsZXRBbmRyb2lkLAogICAgICBmYVJ1YmxlU2lnbiwKICAgICAgZmFSb3VibGUsCiAgICAgIGZhUnViLAogICAgICBmYVJ1YmxlLAogICAgICBmYUNsb3NlZENhcHRpb25pbmc6IGZhQ2xvc2VkQ2FwdGlvbmluZzIsCiAgICAgIGZhUGVuLAogICAgICBmYVBsYW5lLAogICAgICBmYUltYWdlczogZmFJbWFnZXMyLAogICAgICBmYU1vYmlsZVNjcmVlbiwKICAgICAgZmFNb2JpbGVBbmRyb2lkQWx0LAogICAgICBmYUd1YXJhbmlTaWduLAogICAgICBmYUJhZ1Nob3BwaW5nLAogICAgICBmYVNob3BwaW5nQmFnLAogICAgICBmYUNpcmNsZVJpZ2h0OiBmYUNpcmNsZVJpZ2h0MiwKICAgICAgZmFBcnJvd0FsdENpcmNsZVJpZ2h0OiBmYUFycm93QWx0Q2lyY2xlUmlnaHQyLAogICAgICBmYVBob25lVm9sdW1lLAogICAgICBmYVZvbHVtZUNvbnRyb2xQaG9uZSwKICAgICAgZmFDdWJlcywKICAgICAgZmFQaG9uZSwKICAgICAgZmFUb3JpaUdhdGUsCiAgICAgIGZhQmFjb24sCiAgICAgIGZhUGVyc29uRmFsbGluZ0J1cnN0LAogICAgICBmYVF1b3RlUmlnaHQsCiAgICAgIGZhUXVvdGVSaWdodEFsdCwKICAgICAgZmFIb3VzZU1lZGljYWxGbGFnLAogICAgICBmYVByZXNjcmlwdGlvbiwKICAgICAgZmFEaWNlVGhyZWUsCiAgICAgIGZhQnVpbGRpbmdMb2NrLAogICAgICBmYUlkQ2FyZDogZmFJZENhcmQyLAogICAgICBmYURyaXZlcnNMaWNlbnNlOiBmYURyaXZlcnNMaWNlbnNlMiwKICAgICAgZmFDaXJjbGVQbGF5OiBmYUNpcmNsZVBsYXkyLAogICAgICBmYVBsYXlDaXJjbGU6IGZhUGxheUNpcmNsZTIsCiAgICAgIGZhRmFjZUxhdWdoQmVhbTogZmFGYWNlTGF1Z2hCZWFtMiwKICAgICAgZmFMYXVnaEJlYW06IGZhTGF1Z2hCZWFtMiwKICAgICAgZmFMZWFmLAogICAgICBmYUhvdXNlQ2hpbW5leVVzZXIsCiAgICAgIGZhUm90YXRlUmlnaHQsCiAgICAgIGZhUmVkb0FsdCwKICAgICAgZmFSb3RhdGVGb3J3YXJkLAogICAgICBmYVRvb3RoLAogICAgICBmYUhvdXNlQ2hpbW5leVdpbmRvdywKICAgICAgZmFNb3RvcmN5Y2xlLAogICAgICBmYUJhY2t3YXJkRmFzdCwKICAgICAgZmFGYXN0QmFja3dhcmQsCiAgICAgIGZhQWRkcmVzc0Jvb2s6IGZhQWRkcmVzc0Jvb2syLAogICAgICBmYUNvbnRhY3RCb29rOiBmYUNvbnRhY3RCb29rMiwKICAgICAgZmFTYWlsYm9hdCwKICAgICAgZmFCb29rQm9va21hcmssCiAgICAgIGZhTWFnbmlmeWluZ0dsYXNzQXJyb3dSaWdodCwKICAgICAgZmFNaWNyb3Bob25lTGluZXMsCiAgICAgIGZhTWljcm9waG9uZUFsdCwKICAgICAgZmFSZXBseUFsbCwKICAgICAgZmFNYWlsUmVwbHlBbGwsCiAgICAgIGZhVW5pdmVyc2FsQWNjZXNzLAogICAgICBmYVRvaWxldFBhcGVyLAogICAgICBmYVRvaWxldFBhcGVyQWx0LAogICAgICBmYVRvaWxldFBhcGVyQmxhbmssCiAgICAgIGZhVnJDYXJkYm9hcmQsCiAgICAgIGZhUGl6emFTbGljZSwKICAgICAgZmFTcHJheUNhbiwKICAgICAgZmFWb2x1bWVMb3csCiAgICAgIGZhVm9sdW1lRG93biwKICAgICAgZmFDcm9zcywKICAgICAgZmFQZXJzb24sCiAgICAgIGZhTWFsZSwKICAgICAgZmFIb3VyZ2xhc3M6IGZhSG91cmdsYXNzMywKICAgICAgZmFIb3VyZ2xhc3NFbXB0eTogZmFIb3VyZ2xhc3NFbXB0eTIsCiAgICAgIGZhRmlzaCwKICAgICAgZmFEcnVtc3RpY2tCaXRlLAogICAgICBmYUNoYXJ0U2ltcGxlLAogICAgICBmYUF0b20sCiAgICAgIGZhUCwKICAgICAgZmFKZXRGaWdodGVyVXAsCiAgICAgIGZhUGx1Z0NpcmNsZVhtYXJrLAogICAgICBmYVNoZWV0UGxhc3RpYywKICAgICAgZmFWLAogICAgICBmYUxpc3QsCiAgICAgIGZhTGlzdFNxdWFyZXMsCiAgICAgIGZhU29sYXJQYW5lbCwKICAgICAgZmFMYW5kTWluZU9uLAogICAgICBmYUhlYWRwaG9uZXM6IGZhSGVhZHBob25lczIsCiAgICAgIGZhSGVhZHBob25lc0FsdDogZmFIZWFkcGhvbmVzQWx0MiwKICAgICAgZmFIZWFkcGhvbmVzU2ltcGxlOiBmYUhlYWRwaG9uZXNTaW1wbGUyLAogICAgICBmYUJ1cywKICAgICAgZmFGaWxlUG93ZXJwb2ludDogZmFGaWxlUG93ZXJwb2ludDIsCiAgICAgIGZhUXVvdGVMZWZ0LAogICAgICBmYVF1b3RlTGVmdEFsdCwKICAgICAgZmFDaGV2cm9uRG93biwKICAgICAgZmFFYXJ0aEFzaWEsCiAgICAgIGZhR2xvYmVBc2lhLAogICAgICBmYUNlbnRTaWduLAogICAgICBmYVNoaWVsZENhdCwKICAgICAgZmFTY2hvb2xDaXJjbGVDaGVjaywKICAgICAgZmFNYXJ0aW5pR2xhc3MsCiAgICAgIGZhR2xhc3NNYXJ0aW5pQWx0LAogICAgICBmYVBsdWcsCiAgICAgIGZhUGFub3JhbWEsCiAgICAgIGZhQ2xvY2tSb3RhdGVMZWZ0LAogICAgICBmYUhpc3RvcnksCiAgICAgIGZhSmFyV2hlYXQsCiAgICAgIGZhQ2xvdWRBcnJvd0Rvd24sCiAgICAgIGZhQ2xvdWREb3dubG9hZCwKICAgICAgZmFDbG91ZERvd25sb2FkQWx0LAogICAgICBmYVRydWNrUmFtcEJveCwKICAgICAgZmFUcnVja0xvYWRpbmcsCiAgICAgIGZhQW5nbGVEb3duLAogICAgICBmYVBsdWdDaXJjbGVDaGVjaywKICAgICAgZmFXaW5kb3dNYXhpbWl6ZTogZmFXaW5kb3dNYXhpbWl6ZTIsCiAgICAgIGZhSGFuZHNIb2xkaW5nQ2lyY2xlLAogICAgICBmYUxvY2F0aW9uUGluLAogICAgICBmYU1hcE1hcmtlciwKICAgICAgZmFCb3dsaW5nQmFsbCwKICAgICAgZmFDYXJ0RmxhdGJlZCwKICAgICAgZmFEb2xseUZsYXRiZWQsCiAgICAgIGZhSG91c2VVc2VyLAogICAgICBmYUhvbWVVc2VyLAogICAgICBmYUdob3N0LAogICAgICBmYUNvbW1lbnROb2RlcywKICAgICAgZmFQZXJzb25BcnJvd0Rvd25Ub0xpbmUsCiAgICAgIGZhUGx1Z0NpcmNsZVBsdXMsCiAgICAgIGZhUGVyc29uU3dpbW1pbmcsCiAgICAgIGZhU3dpbW1lciwKICAgICAgZmFDb21tZW50RG90czogZmFDb21tZW50RG90czIsCiAgICAgIGZhQ29tbWVudGluZzogZmFDb21tZW50aW5nMiwKICAgICAgZmFDaGFydFBpZSwKICAgICAgZmFQaWVDaGFydCwKICAgICAgZmFGcm9nLAogICAgICBmYVdpbmVCb3R0bGUsCiAgICAgIGZhSW5ib3gsCiAgICAgIGZhU3F1YXJlSCwKICAgICAgZmFIU3F1YXJlLAogICAgICBmYUhvdXNlTWVkaWNhbCwKICAgICAgZmFDaXJjbGVDaGV2cm9uUmlnaHQsCiAgICAgIGZhQ2hldnJvbkNpcmNsZVJpZ2h0LAogICAgICBmYUZpbGVDc3YsCiAgICAgIGZhSGF0Q293Ym95LAogICAgICBmYUZhY2VHcmluVG9uZ3VlV2luazogZmFGYWNlR3JpblRvbmd1ZVdpbmsyLAogICAgICBmYUdyaW5Ub25ndWVXaW5rOiBmYUdyaW5Ub25ndWVXaW5rMiwKICAgICAgZmFMLAogICAgICBmYUFycm93RG93blNob3J0V2lkZSwKICAgICAgZmFTb3J0QW1vdW50RGVzYywKICAgICAgZmFTb3J0QW1vdW50RG93bkFsdCwKICAgICAgZmFIb3VyZ2xhc3NIYWxmOiBmYUhvdXJnbGFzc0hhbGYyLAogICAgICBmYUhvdXJnbGFzczI6IGZhSG91cmdsYXNzMjIsCiAgICAgIGZhU3Bvb24sCiAgICAgIGZhVXRlbnNpbFNwb29uLAogICAgICBmYUNyZWRpdENhcmQ6IGZhQ3JlZGl0Q2FyZDIsCiAgICAgIGZhQ3JlZGl0Q2FyZEFsdDogZmFDcmVkaXRDYXJkQWx0MiwKICAgICAgZmFGaWxlSW52b2ljZURvbGxhciwKICAgICAgZmFTcGFnaGV0dGlNb25zdGVyRmx5aW5nLAogICAgICBmYVBhc3RhZmFyaWFuaXNtLAogICAgICBmYU1hcnRpbmlHbGFzc0NpdHJ1cywKICAgICAgZmFDb2NrdGFpbCwKICAgICAgZmFCdWxsaG9ybiwKICAgICAgZmFCb3hUaXNzdWUsCiAgICAgIGZhTWF0dHJlc3NQaWxsb3csCiAgICAgIGZhQ2hldnJvbkxlZnQsCiAgICAgIGZhQ2xvdWRNb29uUmFpbiwKICAgICAgZmFBcnJvd0Rvd24xOSwKICAgICAgZmFTb3J0TnVtZXJpY0FzYywKICAgICAgZmFTb3J0TnVtZXJpY0Rvd24sCiAgICAgIGZhSGFuZFNwb2NrOiBmYUhhbmRTcG9jazIsCiAgICAgIGZhV2FuZE1hZ2ljU3BhcmtsZXMsCiAgICAgIGZhTWFnaWNXYW5kU3BhcmtsZXMsCiAgICAgIGZhQ29tbWVudE1lZGljYWwsCiAgICAgIGZhQmVsbFNsYXNoOiBmYUJlbGxTbGFzaDIsCiAgICAgIGZhSGFuZHNoYWtlU2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlQWx0U2xhc2gsCiAgICAgIGZhSGFuZHNoYWtlU2ltcGxlU2xhc2gsCiAgICAgIGZhQm90dGxlV2F0ZXIsCiAgICAgIGZhRGljZUQyMCwKICAgICAgZmFBcnJvd0Rvd25aQSwKICAgICAgZmFTb3J0QWxwaGFEZXNjLAogICAgICBmYVNvcnRBbHBoYURvd25BbHQsCiAgICAgIGZhQnJ1c2gsCiAgICAgIGZhUGVyc29uV2Fsa2luZ0Rhc2hlZExpbmVBcnJvd1JpZ2h0LAogICAgICBmYUFycm93VXBTaG9ydFdpZGUsCiAgICAgIGZhU29ydEFtb3VudFVwQWx0LAogICAgICBmYUdyaXBWZXJ0aWNhbCwKICAgICAgZmFHcmlkVmVydGljYWwsCiAgICAgIGZhQ2FyVHVubmVsLAogICAgICBmYUNoYXJ0Q29sdW1uLAogICAgICBmYVRydWNrQXJyb3dSaWdodCwKICAgICAgZmFUdiwKICAgICAgZmFUZWxldmlzaW9uLAogICAgICBmYVR2QWx0LAogICAgICBmYVNlY3Rpb24sCiAgICAgIGZhUGVhY2UsCiAgICAgIGZhU3RhcjogZmFTdGFyMiwKICAgICAgZmFGbGFnOiBmYUZsYWcyLAogICAgICBmYVRyaWFuZ2xlRXhjbGFtYXRpb24sCiAgICAgIGZhRXhjbGFtYXRpb25UcmlhbmdsZSwKICAgICAgZmFXYXJuaW5nLAogICAgICBmYVNjaG9vbENpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUdyYWR1YXRpb25DYXAsCiAgICAgIGZhTW9ydGFyQm9hcmQsCiAgICAgIGZhU3RvcmUsCiAgICAgIGZhVXNlckFzdHJvbmF1dCwKICAgICAgZmFCdWlsZGluZ0ZsYWcsCiAgICAgIGZhTXVnU2F1Y2VyLAogICAgICBmYUNvZmZlZSwKICAgICAgZmFMZW1vbjogZmFMZW1vbjIsCiAgICAgIGZhQ2FyYXZhbiwKICAgICAgZmFRLAogICAgICBmYUxvY2ssCiAgICAgIGZhUGFpbnRSb2xsZXIsCiAgICAgIGZhVm9sdW1lSGlnaCwKICAgICAgZmFWb2x1bWVVcCwKICAgICAgZmFGb2xkZXJQbHVzLAogICAgICBmYU1lcmN1cnksCiAgICAgIGZhQW5jaG9yLAogICAgICBmYVNxdWFyZVBhcmtpbmcsCiAgICAgIGZhUGFya2luZywKICAgICAgZmFIYW51a2lhaCwKICAgICAgZmFSb3RhdGVMZWZ0LAogICAgICBmYVJvdGF0ZUJhY2ssCiAgICAgIGZhUm90YXRlQmFja3dhcmQsCiAgICAgIGZhVW5kb0FsdCwKICAgICAgZmFIZWFkaW5nLAogICAgICBmYUhlYWRlciwKICAgICAgZmFDcm9zc2hhaXJzLAogICAgICBmYUNpcmNsZU5vZGVzLAogICAgICBmYVdpbmRvd1Jlc3RvcmU6IGZhV2luZG93UmVzdG9yZTIsCiAgICAgIGZhUiwKICAgICAgZmFGaWx0ZXJDaXJjbGVYbWFyaywKICAgICAgZmFHb3B1cmFtLAogICAgICBmYUhlYXJ0Q2lyY2xlTWludXMsCiAgICAgIGZhU3Rhck9mTGlmZSwKICAgICAgZmFCdXNpbmVzc1RpbWUsCiAgICAgIGZhQnJpZWZjYXNlQ2xvY2ssCiAgICAgIGZhRmlyZUV4dGluZ3Vpc2hlciwKICAgICAgZmFBcnJvd0Rvd25Mb25nLAogICAgICBmYUxvbmdBcnJvd0Rvd24sCiAgICAgIGZhVXNlck1pbnVzLAogICAgICBmYU1vbmV5Q2hlY2ssCiAgICAgIGZhSG91c2VMYXB0b3AsCiAgICAgIGZhTGFwdG9wSG91c2UsCiAgICAgIGZhRG93bmxvYWQsCiAgICAgIGZhQ291Y2gsCiAgICAgIGZhUm9hZExvY2ssCiAgICAgIGZhU2Npc3NvcnMsCiAgICAgIGZhQ3V0LAogICAgICBmYUJ1ZywKICAgICAgZmFBcnJvd1JpZ2h0RnJvbUJyYWNrZXQsCiAgICAgIGZhU2lnbk91dCwKICAgICAgZmFIYW5kSG9sZGluZ0hhbmQsCiAgICAgIGZhU3Ryb29wd2FmZWwsCiAgICAgIGZhQ2hpbGQsCiAgICAgIGZhSWNlQ3JlYW0sCiAgICAgIGZhQ29tcHV0ZXJNb3VzZSwKICAgICAgZmFNb3VzZSwKICAgICAgZmFGYXVjZXQsCiAgICAgIGZhQXdhcmQsCiAgICAgIGZhUGVyc29uRHJvd25pbmcsCiAgICAgIGZhQ2FtZXJhUm90YXRlLAogICAgICBmYUZhY2VHcmluSGVhcnRzOiBmYUZhY2VHcmluSGVhcnRzMiwKICAgICAgZmFHcmluSGVhcnRzOiBmYUdyaW5IZWFydHMyLAogICAgICBmYUZpbGVGcmFnbWVudCwKICAgICAgZmFQZXJzb25NaWxpdGFyeVJpZmxlLAogICAgICBmYVRvZ2dsZU9uLAogICAgICBmYUx1bmdzVmlydXMsCiAgICAgIGZhVGFibGVUZW5uaXNQYWRkbGVCYWxsLAogICAgICBmYVBpbmdQb25nUGFkZGxlQmFsbCwKICAgICAgZmFUYWJsZVRlbm5pcywKICAgICAgZmFCb3hlc1BhY2tpbmcsCiAgICAgIGZhUGVyc29uQ2hhbGtib2FyZCwKICAgICAgZmFEaWNlVHdvLAogICAgICBmYUFycm93UmlnaHRBcnJvd0xlZnQsCiAgICAgIGZhRXhjaGFuZ2UsCiAgICAgIGZhRm9vdGJhbGwsCiAgICAgIGZhRm9vdGJhbGxCYWxsLAogICAgICBmYVRydWNrTW9uc3RlciwKICAgICAgZmFBc3RlcmlzaywKICAgICAgZmFCYXR0ZXJ5RnVsbCwKICAgICAgZmFCYXR0ZXJ5LAogICAgICBmYUJhdHRlcnk1LAogICAgICBmYUNoaWxkRHJlc3MsCiAgICAgIGZhRmFjZUtpc3NCZWFtOiBmYUZhY2VLaXNzQmVhbTIsCiAgICAgIGZhS2lzc0JlYW06IGZhS2lzc0JlYW0yLAogICAgICBmYVRyYXNoQ2FuQXJyb3dVcCwKICAgICAgZmFUcmFzaFJlc3RvcmVBbHQsCiAgICAgIGZhRm9udCwKICAgICAgZmFCb3JlSG9sZSwKICAgICAgZmFWaXJ1c0NvdmlkLAogICAgICBmYUZpbGVQZGY6IGZhRmlsZVBkZjIsCiAgICAgIGZhTGFuZ3VhZ2UsCiAgICAgIGZhU2hpZWxkSGFsdmVkLAogICAgICBmYVNoaWVsZEFsdCwKICAgICAgZmFDYXJldFVwLAogICAgICBmYUZpbGVQZW4sCiAgICAgIGZhRmlsZUVkaXQsCiAgICAgIGZhUGVyc29uQmlraW5nLAogICAgICBmYUJpa2luZywKICAgICAgZmFCb29rT3BlblJlYWRlciwKICAgICAgZmFCb29rUmVhZGVyLAogICAgICBmYUdsYXNzV2F0ZXJEcm9wbGV0LAogICAgICBmYVRvd2VyQnJvYWRjYXN0LAogICAgICBmYUJyb2FkY2FzdFRvd2VyLAogICAgICBmYU1pbmltaXplLAogICAgICBmYUNvbXByZXNzQXJyb3dzQWx0LAogICAgICBmYUFycm93UmlnaHRUb0NpdHksCiAgICAgIGZhTGFwdG9wTWVkaWNhbCwKICAgICAgZmFCcmVhZFNsaWNlLAogICAgICBmYUdsb2JlLAogICAgICBmYUZvbGRlck1pbnVzLAogICAgICBmYU1hc2tGYWNlLAogICAgICBmYUJvbmcsCiAgICAgIGZhUm9hZEJyaWRnZSwKICAgICAgZmFBcnJvd1VwOTEsCiAgICAgIGZhU29ydE51bWVyaWNVcEFsdCwKICAgICAgZmFNb3VudGFpbkNpdHksCiAgICAgIGZhQXJyb3dEb3duOTEsCiAgICAgIGZhU29ydE51bWVyaWNEZXNjLAogICAgICBmYVNvcnROdW1lcmljRG93bkFsdCwKICAgICAgZmFGYWNlR3JpbldpZGU6IGZhRmFjZUdyaW5XaWRlMiwKICAgICAgZmFHcmluQWx0OiBmYUdyaW5BbHQyLAogICAgICBmYVBvb3AsCiAgICAgIGZhRGhhcm1hY2hha3JhLAogICAgICBmYUJhdHRlcnlRdWFydGVyLAogICAgICBmYUJhdHRlcnkyLAogICAgICBmYUFua2gsCiAgICAgIGZhRGlhbW9uZCwKICAgICAgZmFTdWJzY3JpcHQsCiAgICAgIGZhUnVwZWVTaWduLAogICAgICBmYVJ1cGVlLAogICAgICBmYVBlcnNvblJpZmxlLAogICAgICBmYUQsCiAgICAgIGZhU3F1YXJlTmZpLAogICAgICBmYVRlZXRoLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0RvbGxhciwKICAgICAgZmFTZWFyY2hEb2xsYXIsCiAgICAgIGZhRHVtcHN0ZXJGaXJlLAogICAgICBmYVVwbG9hZCwKICAgICAgZmFVc2VyU2xhc2gsCiAgICAgIGZhVXNlckFsdFNsYXNoLAogICAgICBmYVVzZXJMYXJnZVNsYXNoLAogICAgICBmYUFycm93TGVmdCwKICAgICAgZmFWaWFsVmlydXMsCiAgICAgIGZhQ2hlY2tEb3VibGUsCiAgICAgIGZhUGF3LAogICAgICBmYUhlbG1ldFNhZmV0eSwKICAgICAgZmFIYXJkSGF0LAogICAgICBmYUhhdEhhcmQsCiAgICAgIGZhRSwKICAgICAgZmFGYWNlTGF1Z2hTcXVpbnQ6IGZhRmFjZUxhdWdoU3F1aW50MiwKICAgICAgZmFMYXVnaFNxdWludDogZmFMYXVnaFNxdWludDIsCiAgICAgIGZhRG93bkxlZnRBbmRVcFJpZ2h0VG9DZW50ZXIsCiAgICAgIGZhQ29tcHJlc3NBbHQsCiAgICAgIGZhR2lmdHMsCiAgICAgIGZhQmVkLAogICAgICBmYU1vbmV5QmlsbFRyYW5zZmVyLAogICAgICBmYVBlcnNvblJ1bm5pbmcsCiAgICAgIGZhUnVubmluZywKICAgICAgZmFDaXJjbGVDaGV2cm9uRG93biwKICAgICAgZmFDaGV2cm9uQ2lyY2xlRG93biwKICAgICAgZmFVc2VyTnVyc2UsCiAgICAgIGZhRmFjZUtpc3NXaW5rSGVhcnQ6IGZhRmFjZUtpc3NXaW5rSGVhcnQyLAogICAgICBmYUtpc3NXaW5rSGVhcnQ6IGZhS2lzc1dpbmtIZWFydDIsCiAgICAgIGZhRmlsbCwKICAgICAgZmFNb25leUJpbGwxV2F2ZSwKICAgICAgZmFNb25leUJpbGxXYXZlQWx0LAogICAgICBmYUxhbmRtYXJrLAogICAgICBmYU11c2ljLAogICAgICBmYUJvb2tNZWRpY2FsLAogICAgICBmYVNodWZmbGUsCiAgICAgIGZhUmFuZG9tLAogICAgICBmYVVuZGVybGluZSwKICAgICAgZmFCdWlsZGluZ1VzZXIsCiAgICAgIGZhUm9ib3QsCiAgICAgIGZhUGx1cywKICAgICAgZmFBZGQsCiAgICAgIGZhQ29weTogZmFDb3B5MiwKICAgICAgZmFDaGVzc0tpbmc6IGZhQ2hlc3NLaW5nMiwKICAgICAgZmFIb3VzZUZsb29kV2F0ZXIsCiAgICAgIGZhQml0Y29pblNpZ24sCiAgICAgIGZhQm94LAogICAgICBmYVNxdWFyZVBsdXM6IGZhU3F1YXJlUGx1czIsCiAgICAgIGZhUGx1c1NxdWFyZTogZmFQbHVzU3F1YXJlMiwKICAgICAgZmFBcnJvd3NMZWZ0UmlnaHQsCiAgICAgIGZhQXJyb3dzSCwKICAgICAgZmFGYW4sCiAgICAgIGZhQ3JvdywKICAgICAgZmFGaWxlQ2lyY2xlQ2hlY2ssCiAgICAgIGZhTGlua1NsYXNoLAogICAgICBmYUNoYWluQnJva2VuLAogICAgICBmYUNoYWluU2xhc2gsCiAgICAgIGZhVW5saW5rLAogICAgICBmYUFycm93Um90YXRlUmlnaHQsCiAgICAgIGZhQXJyb3dSaWdodFJvdGF0ZSwKICAgICAgZmFBcnJvd1JvdGF0ZUZvcndhcmQsCiAgICAgIGZhUmVkbywKICAgICAgZmFQZW5DbGlwLAogICAgICBmYVBlbkFsdCwKICAgICAgZmFEb29yQ2xvc2VkLAogICAgICBmYUFycm93RG93bldpZGVTaG9ydCwKICAgICAgZmFTb3J0QW1vdW50QXNjLAogICAgICBmYVNvcnRBbW91bnREb3duLAogICAgICBmYUNhcmV0RG93biwKICAgICAgZmFLLAogICAgICBmYUNoZWNrVG9TbG90LAogICAgICBmYVZvdGVZZWEsCiAgICAgIGZhRmlzaEZpbnMsCiAgICAgIGZhQ29tcHJlc3MsCiAgICAgIGZhQXJyb3dVcEFaLAogICAgICBmYVNvcnRBbHBoYVVwLAogICAgICBmYVVzZXJHcmFkdWF0ZSwKICAgICAgZmFGaWxlQ29kZTogZmFGaWxlQ29kZTIsCiAgICAgIGZhU29hcCwKICAgICAgZmFSZWN5Y2xlLAogICAgICBmYUZhY2VHcmluV2luazogZmFGYWNlR3JpbldpbmsyLAogICAgICBmYUdyaW5XaW5rOiBmYUdyaW5XaW5rMiwKICAgICAgZmFXYXRlckxhZGRlciwKICAgICAgZmFMYWRkZXJXYXRlciwKICAgICAgZmFTd2ltbWluZ1Bvb2wsCiAgICAgIGZhVG93ZXJDZWxsLAogICAgICBmYUNvbG9uU2lnbiwKICAgICAgZmFMYXB0b3BGaWxlLAogICAgICBmYUJhaGFpLAogICAgICBmYUhheWthbCwKICAgICAgZmFNb25leUJpbGwxOiBmYU1vbmV5QmlsbDEyLAogICAgICBmYU1vbmV5QmlsbEFsdDogZmFNb25leUJpbGxBbHQyLAogICAgICBmYUNsb3VkQm9sdCwKICAgICAgZmFUaHVuZGVyc3Rvcm0sCiAgICAgIGZhRXRoZXJuZXQsCiAgICAgIGZhSHJ5dm5pYVNpZ24sCiAgICAgIGZhSHJ5dm5pYSwKICAgICAgZmFFeWVTbGFzaDogZmFFeWVTbGFzaDIsCiAgICAgIGZhQ2FydEZsYXRiZWRTdWl0Y2FzZSwKICAgICAgZmFMdWdnYWdlQ2FydCwKICAgICAgZmFSYWRpYXRpb24sCiAgICAgIGZhRmlsZVdvcmQ6IGZhRmlsZVdvcmQyLAogICAgICBmYUJlZFB1bHNlLAogICAgICBmYVByb2NlZHVyZXMsCiAgICAgIGZhVGVudHMsCiAgICAgIGZhTXVnSG90LAogICAgICBmYUJvbHQsCiAgICAgIGZhWmFwLAogICAgICBmYUphciwKICAgICAgZmFUcnVja1BsYW5lLAogICAgICBmYUhhbmRIb2xkaW5nSGVhcnQsCiAgICAgIGZhQXJyb3dSb3RhdGVMZWZ0LAogICAgICBmYUFycm93TGVmdFJvdGF0ZSwKICAgICAgZmFBcnJvd1JvdGF0ZUJhY2ssCiAgICAgIGZhQXJyb3dSb3RhdGVCYWNrd2FyZCwKICAgICAgZmFVbmRvLAogICAgICBmYUZhY2VBbmdyeTogZmFGYWNlQW5ncnkyLAogICAgICBmYUFuZ3J5OiBmYUFuZ3J5MiwKICAgICAgZmFCdXJzdCwKICAgICAgZmFaLAogICAgICBmYUJhbmRhZ2UsCiAgICAgIGZhQmFuZEFpZCwKICAgICAgZmFQbGFuZUNpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUJ1c1NpZGUsCiAgICAgIGZhQnVncywKICAgICAgZmFCZWVyTXVnRW1wdHksCiAgICAgIGZhQmVlciwKICAgICAgZmFQZXJzb25DaXJjbGVDaGVjaywKICAgICAgZmFTdGFwbGVyLAogICAgICBmYUhvdXNlTWVkaWNhbENpcmNsZUNoZWNrLAogICAgICBmYU5haXJhU2lnbiwKICAgICAgZmFXaWZpLAogICAgICBmYVdpZmkzLAogICAgICBmYVdpZmlTdHJvbmcsCiAgICAgIGZhTW9uZXlDaGVja0RvbGxhciwKICAgICAgZmFNb25leUNoZWNrQWx0LAogICAgICBmYUV5ZUxvd1Zpc2lvbiwKICAgICAgZmFMb3dWaXNpb24sCiAgICAgIGZhQ2lyY2xlQXJyb3dVcCwKICAgICAgZmFBcnJvd0NpcmNsZVVwLAogICAgICBmYUNhbWVyYVJldHJvLAogICAgICBmYUNhcHN1bGVzLAogICAgICBmYVBvbywKICAgICAgZmFFbGV2YXRvciwKICAgICAgZmFUYWcsCiAgICAgIGZhRmlsZUNpcmNsZU1pbnVzLAogICAgICBmYURvd25Mb25nLAogICAgICBmYUxvbmdBcnJvd0FsdERvd24sCiAgICAgIGZhQ29tcGFjdERpc2MsCiAgICAgIGZhU3VpdGNhc2VSb2xsaW5nLAogICAgICBmYUJvb2tRdXJhbiwKICAgICAgZmFRdXJhbiwKICAgICAgZmFQaG9uZVNsYXNoLAogICAgICBmYVJvYWRDaXJjbGVDaGVjaywKICAgICAgZmFTaG9wTG9jaywKICAgICAgZmFJbWFnZVBvcnRyYWl0LAogICAgICBmYVBvcnRyYWl0LAogICAgICBmYUJyaWRnZUxvY2ssCiAgICAgIGZhSGFtbWVyLAogICAgICBmYUFycm93VXAxOSwKICAgICAgZmFTb3J0TnVtZXJpY1VwLAogICAgICBmYUNoZXNzS25pZ2h0OiBmYUNoZXNzS25pZ2h0MiwKICAgICAgZmFIb3VzZUZsb29kV2F0ZXJDaXJjbGVBcnJvd1JpZ2h0LAogICAgICBmYUFycm93VXBSaWdodEZyb21TcXVhcmUsCiAgICAgIGZhRXh0ZXJuYWxMaW5rLAogICAgICBmYUFycm93RG93blVwQWNyb3NzTGluZSwKICAgICAgZmFGYWNlR3JpbkJlYW06IGZhRmFjZUdyaW5CZWFtMiwKICAgICAgZmFHcmluQmVhbTogZmFHcmluQmVhbTIsCiAgICAgIGZhUmVjdGFuZ2xlQWQsCiAgICAgIGZhQWQsCiAgICAgIGZhQm9va1RhbmFraCwKICAgICAgZmFUYW5ha2gsCiAgICAgIGZhSG90VHViUGVyc29uLAogICAgICBmYUhvdFR1YiwKICAgICAgZmFGaWxlSGFsZkRhc2hlZCwKICAgICAgZmFPdXRkZW50LAogICAgICBmYURlZGVudCwKICAgICAgZmFIYW5kUGVhY2U6IGZhSGFuZFBlYWNlMiwKICAgICAgZmFIZWFkU2lkZVZpcnVzLAogICAgICBmYUNvbXBhc3M6IGZhQ29tcGFzczIsCiAgICAgIGZhUGVuTmliLAogICAgICBmYVRlbnRBcnJvd3NEb3duLAogICAgICBmYUZvcndhcmRGYXN0LAogICAgICBmYUZhc3RGb3J3YXJkLAogICAgICBmYUNyb3AsCiAgICAgIGZhV2hpc2tleUdsYXNzLAogICAgICBmYUdsYXNzV2hpc2tleSwKICAgICAgZmFTcXVhcmU6IGZhU3F1YXJlMiwKICAgICAgZmFGYWNlR3JpbjogZmFGYWNlR3JpbjIsCiAgICAgIGZhR3JpbjogZmFHcmluMiwKICAgICAgZmFGaWxlQ29udHJhY3QsCiAgICAgIGZhQW5nbGVVcCwKICAgICAgZmFGYWNlU21pbGU6IGZhRmFjZVNtaWxlMiwKICAgICAgZmFTbWlsZTogZmFTbWlsZTIsCiAgICAgIGZhUGVyc29uRHJlc3NCdXJzdCwKICAgICAgZmFEaXZpZGUsCiAgICAgIGZhQ29kZUZvcmssCiAgICAgIGZhSG91c2VGbGFnLAogICAgICBmYUJ1aWxkaW5nQ29sdW1ucywKICAgICAgZmFCYW5rLAogICAgICBmYUluc3RpdHV0aW9uLAogICAgICBmYU11c2V1bSwKICAgICAgZmFVbml2ZXJzaXR5LAogICAgICBmYVJ1ZywKICAgICAgZmFDb2RlTWVyZ2UsCiAgICAgIGZhSG91c2VUc3VuYW1pLAogICAgICBmYU1hZ25pZnlpbmdHbGFzc0NoYXJ0LAogICAgICBmYVVtYnJlbGxhLAogICAgICBmYUhpbGxSb2Nrc2xpZGUsCiAgICAgIGZhVXNlclNlY3JldCwKICAgICAgZmFQYWdlciwKICAgICAgZmFCcmllZmNhc2UsCiAgICAgIGZhVHJvd2VsQnJpY2tzLAogICAgICBmYVNvY2tzLAogICAgICBmYVQsCiAgICAgIGZhTWljcm9jaGlwLAogICAgICBmYVRydWNrTWVkaWNhbCwKICAgICAgZmFBbWJ1bGFuY2UsCiAgICAgIGZhT20sCiAgICAgIGZhTW9zcXVpdG9OZXQsCiAgICAgIGZhUHJlc2NyaXB0aW9uQm90dGxlLAogICAgICBmYVVzZXJzR2VhciwKICAgICAgZmFVc2Vyc0NvZywKICAgICAgZmFSb2FkQ2lyY2xlRXhjbGFtYXRpb24sCiAgICAgIGZhUGF1c2UsCiAgICAgIGZhU3RhZmZTbmFrZSwKICAgICAgZmFSb2RBc2NsZXBpdXMsCiAgICAgIGZhUm9kU25ha2UsCiAgICAgIGZhU3RhZmZBZXNjdWxhcGl1cywKICAgICAgZmFQaWdneUJhbmssCiAgICAgIGZhTW9udW1lbnQsCiAgICAgIGZhQW5nbGVzUmlnaHQsCiAgICAgIGZhQW5nbGVEb3VibGVSaWdodCwKICAgICAgZmFEZXNrdG9wLAogICAgICBmYURlc2t0b3BBbHQsCiAgICAgIGZhUGxhbmVDaXJjbGVYbWFyaywKICAgICAgZmFSZXR3ZWV0LAogICAgICBmYVVzZXJHZWFyLAogICAgICBmYVVzZXJDb2csCiAgICAgIGZhQm9yZGVyQWxsLAogICAgICBmYUNvaW5zLAogICAgICBmYU1hcnNTdHJva2UsCiAgICAgIGZhSGFuZHNoYWtlQW5nbGUsCiAgICAgIGZhSGFuZHNIZWxwaW5nLAogICAgICBmYUFycm93RG93biwKICAgICAgZmFMb2NhdGlvbkRvdCwKICAgICAgZmFNYXBNYXJrZXJBbHQsCiAgICAgIGZhUGx1Z0NpcmNsZUV4Y2xhbWF0aW9uLAogICAgICBmYUNvb2tpZUJpdGUsCiAgICAgIGZhU2NyZXdkcml2ZXJXcmVuY2gsCiAgICAgIGZhVG9vbHMsCiAgICAgIGZhSW5kZW50LAogICAgICBmYUJhcnMsCiAgICAgIGZhTmF2aWNvbiwKICAgICAgZmFIYW5kc1ByYXlpbmcsCiAgICAgIGZhUHJheWluZ0hhbmRzLAogICAgICBmYVZpcnVzZXMsCiAgICAgIGZhU2Nob29sRmxhZywKICAgICAgZmFUcmFkZW1hcmssCiAgICAgIGZhRmlyZUJ1cm5lciwKICAgICAgZmFGYWNlU21pbGVCZWFtOiBmYUZhY2VTbWlsZUJlYW0yLAogICAgICBmYVNtaWxlQmVhbTogZmFTbWlsZUJlYW0yLAogICAgICBmYVRlbnRBcnJvd0xlZnRSaWdodCwKICAgICAgZmFSb3V0ZSwKICAgICAgZmFBbmdsZXNVcCwKICAgICAgZmFBbmdsZURvdWJsZVVwLAogICAgICBmYUJ1Y2tldCwKICAgICAgZmFMZXNzVGhhbkVxdWFsLAogICAgICBmYUZvbGRlckNsb3NlZDogZmFGb2xkZXJDbG9zZWQyLAogICAgICBmYVBlcnNvblRocm91Z2hXaW5kb3csCiAgICAgIGZhU2Nob29sTG9jaywKICAgICAgZmFQZXJzb25CdXJzdCwKICAgICAgZmFMZWZ0TG9uZywKICAgICAgZmFMb25nQXJyb3dBbHRMZWZ0LAogICAgICBmYUxvY2F0aW9uQ3Jvc3NoYWlycywKICAgICAgZmFMb2NhdGlvbiwKICAgICAgZmFQZXJzb25Eb3RzRnJvbUxpbmUsCiAgICAgIGZhRGlhZ25vc2VzLAogICAgICBmYUdhdWdlU2ltcGxlSGlnaCwKICAgICAgZmFUYWNob21ldGVyLAogICAgICBmYVRhY2hvbWV0ZXJGYXN0LAogICAgICBmYUFuZ2xlc0xlZnQsCiAgICAgIGZhQW5nbGVEb3VibGVMZWZ0LAogICAgICBmYVVwRG93biwKICAgICAgZmFBcnJvd3NBbHRWLAogICAgICBmYUJhdHRlcnlFbXB0eSwKICAgICAgZmFCYXR0ZXJ5MCwKICAgICAgZmFLZXlib2FyZDogZmFLZXlib2FyZDIsCiAgICAgIGZhQ29va2llLAogICAgICBmYVN0b3B3YXRjaCwKICAgICAgZmFFamVjdCwKICAgICAgZmFTYXRlbGxpdGVEaXNoLAogICAgICBmYUZhY2VSb2xsaW5nRXllczogZmFGYWNlUm9sbGluZ0V5ZXMyLAogICAgICBmYU1laFJvbGxpbmdFeWVzOiBmYU1laFJvbGxpbmdFeWVzMiwKICAgICAgZmFMaXN0Q2hlY2ssCiAgICAgIGZhVGFza3MsCiAgICAgIGZhU2Fja1htYXJrLAogICAgICBmYUhhc2h0YWcsCiAgICAgIGZhVHJhaW4sCiAgICAgIGZhR2FtZXBhZCwKICAgICAgZmFGaWxlRXhwb3J0LAogICAgICBmYUFycm93UmlnaHRGcm9tRmlsZSwKICAgICAgZmFGYWNlR3JpbWFjZTogZmFGYWNlR3JpbWFjZTIsCiAgICAgIGZhR3JpbWFjZTogZmFHcmltYWNlMiwKICAgICAgZmFUcmFpblN1YndheSwKICAgICAgZmFTdWJ3YXksCiAgICAgIGZhQ2lyY2xlRG90OiBmYUNpcmNsZURvdDIsCiAgICAgIGZhRG90Q2lyY2xlOiBmYURvdENpcmNsZTIsCiAgICAgIGZhT2JqZWN0R3JvdXA6IGZhT2JqZWN0R3JvdXAyLAogICAgICBmYVNoaXAsCiAgICAgIGZhQywKICAgICAgZmFTcXVhcmVQaG9uZSwKICAgICAgZmFQaG9uZVNxdWFyZSwKICAgICAgZmFSdWxlckNvbWJpbmVkLAogICAgICBmYUFycm93c1JvdGF0ZSwKICAgICAgZmFSZWZyZXNoLAogICAgICBmYVN5bmMsCiAgICAgIGZhUGVyc29uRHJlc3MsCiAgICAgIGZhRmVtYWxlLAogICAgICBmYUJvb2tPcGVuLAogICAgICBmYUZvbGRlclRyZWUsCiAgICAgIGZhQm94QXJjaGl2ZSwKICAgICAgZmFBcmNoaXZlLAogICAgICBmYVRlbnRBcnJvd0Rvd25Ub0xpbmUsCiAgICAgIGZhUXJjb2RlLAogICAgICBmYURyYWdvbiwKICAgICAgZmFIb3VyZ2xhc3NFbmQsCiAgICAgIGZhSG91cmdsYXNzMzogZmFIb3VyZ2xhc3MzMiwKICAgICAgZmFHcmlwLAogICAgICBmYUdyaWRIb3Jpem9udGFsLAogICAgICBmYUdyaXBIb3Jpem9udGFsLAogICAgICBmYUJvcmRlclRvcExlZnQsCiAgICAgIGZhQm9yZGVyU3R5bGUsCiAgICAgIGZhTGlzdFVsLAogICAgICBmYUxpc3REb3RzLAogICAgICBmYVBlb3BsZVJvYmJlcnksCiAgICAgIGZhTW9iaWxlQnV0dG9uLAogICAgICBmYUFycm93RG93bkFaLAogICAgICBmYVNvcnRBbHBoYUFzYywKICAgICAgZmFTb3J0QWxwaGFEb3duLAogICAgICBmYU1vbmV5QmlsbCwKICAgICAgZmFDaXJjbGVNaW51cywKICAgICAgZmFNaW51c0NpcmNsZSwKICAgICAgZmFBcnJvd1BvaW50ZXIsCiAgICAgIGZhTW91c2VQb2ludGVyLAogICAgICBmYVNxdWFyZVNoYXJlTm9kZXMsCiAgICAgIGZhU2hhcmVBbHRTcXVhcmUsCiAgICAgIGZhVGFibGVDZWxsc0xhcmdlLAogICAgICBmYVRoTGFyZ2UsCiAgICAgIGZhQ2F0LAogICAgICBmYUNhbGVuZGFyV2VlaywKICAgICAgZmFDb2RlQ29tcGFyZSwKICAgICAgZmFSb2FkQ2lyY2xlWG1hcmssCiAgICAgIGZhUGFsbGV0LAogICAgICBmYUNha2VDYW5kbGVzLAogICAgICBmYUJpcnRoZGF5Q2FrZSwKICAgICAgZmFDYWtlLAogICAgICBmYUJ1Z1NsYXNoLAogICAgICBmYVRhcnAsCiAgICAgIGZhRGlhZ3JhbVByZWRlY2Vzc29yLAogICAgICBmYUZhY2VGbHVzaGVkOiBmYUZhY2VGbHVzaGVkMiwKICAgICAgZmFGbHVzaGVkOiBmYUZsdXNoZWQyLAogICAgICBmYURpYWdyYW1OZXh0LAogICAgICBmYUFuY2hvckNpcmNsZVhtYXJrLAogICAgICBmYVBlcnNvbkNpcmNsZVhtYXJrLAogICAgICBmYVNwYSwKICAgICAgZmFCYXJzUHJvZ3Jlc3MsCiAgICAgIGZhVGFza3NBbHQsCiAgICAgIGZhSGVhcnRDaXJjbGVDaGVjaywKICAgICAgZmFNYXJzU3Ryb2tlUmlnaHQsCiAgICAgIGZhTWFyc1N0cm9rZUgsCiAgICAgIGZhVG93ZXJPYnNlcnZhdGlvbiwKICAgICAgZmFTdGVybGluZ1NpZ24sCiAgICAgIGZhR2JwLAogICAgICBmYVBvdW5kU2lnbiwKICAgICAgZmFGYXVjZXREcmlwLAogICAgICBmYUNpcmNsZUluZm8sCiAgICAgIGZhSW5mb0NpcmNsZSwKICAgICAgZmFGZWF0aGVyLAogICAgICBmYUJvd2xSaWNlLAogICAgICBmYVN0YXJIYWxmU3Ryb2tlOiBmYVN0YXJIYWxmU3Ryb2tlMiwKICAgICAgZmFTdGFySGFsZkFsdDogZmFTdGFySGFsZkFsdDIsCiAgICAgIGZhVGVtcGVyYXR1cmVBcnJvd0Rvd24sCiAgICAgIGZhVGVtcGVyYXR1cmVEb3duLAogICAgICBmYU1hc2tWZW50aWxhdG9yLAogICAgICBmYUZpbGVWaWRlbzogZmFGaWxlVmlkZW8yLAogICAgICBmYUFycm93VHJlbmREb3duLAogICAgICBmYU9pbENhbiwKICAgICAgZmFQZW9wbGVDYXJyeUJveCwKICAgICAgZmFQZW9wbGVDYXJyeSwKICAgICAgZmFDaGFpciwKICAgICAgZmFXaW5kLAogICAgICBmYUxheWVyR3JvdXAsCiAgICAgIGZhSGVhZFNpZGVNYXNrLAogICAgICBmYUhhbmRzLAogICAgICBmYVNpZ25MYW5ndWFnZSwKICAgICAgZmFTaWduaW5nLAogICAgICBmYVRhYmxldHMsCiAgICAgIGZhV2VpZ2h0SGFuZ2luZywKICAgICAgZmFEaWNlLAogICAgICBmYVNob3BTbGFzaCwKICAgICAgZmFTdG9yZUFsdFNsYXNoLAogICAgICBmYVNvcnREb3duLAogICAgICBmYVNvcnREZXNjLAogICAgICBmYVBlc2V0YVNpZ24sCiAgICAgIGZhVGFibGV0U2NyZWVuQnV0dG9uLAogICAgICBmYVRhYmxldEFsdCwKICAgICAgZmFIYW5kSG9sZGluZ0RvbGxhciwKICAgICAgZmFIYW5kSG9sZGluZ1VzZCwKICAgICAgZmFTaGllbGQsCiAgICAgIGZhU2hpZWxkQmxhbmssCiAgICAgIGZhRmFjZUxhdWdoOiBmYUZhY2VMYXVnaDIsCiAgICAgIGZhTGF1Z2g6IGZhTGF1Z2gyLAogICAgICBmYUhhbmRzSG9sZGluZywKICAgICAgZmFDYXJ0U2hvcHBpbmcsCiAgICAgIGZhU2hvcHBpbmdDYXJ0LAogICAgICBmYU9jdGFnb24sCiAgICAgIGZhSGFuZFBvaW50ZXI6IGZhSGFuZFBvaW50ZXIyLAogICAgICBmYVJlZ2lzdGVyZWQ6IGZhUmVnaXN0ZXJlZDIsCiAgICAgIGZhSG91c2VTaWduYWwsCiAgICAgIGZhQmFuZ2xhZGVzaGlUYWthU2lnbgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMKdmFyIGRlZmF1bHRBdHRyaWJ1dGVzOwp2YXIgaW5pdF9kZWZhdWx0QXR0cmlidXRlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanMiKCkgewogICAgZGVmYXVsdEF0dHJpYnV0ZXMgPSB7CiAgICAgIHhtbG5zOiAiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLAogICAgICB3aWR0aDogMjQsCiAgICAgIGhlaWdodDogMjQsCiAgICAgIHZpZXdCb3g6ICIwIDAgMjQgMjQiLAogICAgICBmaWxsOiAibm9uZSIsCiAgICAgIHN0cm9rZTogImN1cnJlbnRDb2xvciIsCiAgICAgICJzdHJva2Utd2lkdGgiOiAyLAogICAgICAic3Ryb2tlLWxpbmVjYXAiOiAicm91bmQiLAogICAgICAic3Ryb2tlLWxpbmVqb2luIjogInJvdW5kIgogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vY3JlYXRlRWxlbWVudC5qcwp2YXIgY3JlYXRlU1ZHRWxlbWVudCwgY3JlYXRlRWxlbWVudDI7CnZhciBpbml0X2NyZWF0ZUVsZW1lbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2NyZWF0ZUVsZW1lbnQuanMiKCkgewogICAgaW5pdF9kZWZhdWx0QXR0cmlidXRlcygpOwogICAgY3JlYXRlU1ZHRWxlbWVudCA9IChbdGFnLCBhdHRycywgY2hpbGRyZW4yXSkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLCB0YWcpOwogICAgICBPYmplY3Qua2V5cyhhdHRycykuZm9yRWFjaCgobmFtZSkgPT4gewogICAgICAgIGVsZW1lbnQ0LnNldEF0dHJpYnV0ZShuYW1lLCBTdHJpbmcoYXR0cnNbbmFtZV0pKTsKICAgICAgfSk7CiAgICAgIGlmIChjaGlsZHJlbjI/Lmxlbmd0aCkgewogICAgICAgIGNoaWxkcmVuMi5mb3JFYWNoKChjaGlsZCkgPT4gewogICAgICAgICAgY29uc3QgY2hpbGRFbGVtZW50ID0gY3JlYXRlU1ZHRWxlbWVudChjaGlsZCk7CiAgICAgICAgICBlbGVtZW50NC5hcHBlbmRDaGlsZChjaGlsZEVsZW1lbnQpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH07CiAgICBjcmVhdGVFbGVtZW50MiA9IChpY29uTm9kZSwgY3VzdG9tQXR0cnMgPSB7fSkgPT4gewogICAgICBjb25zdCB0YWcgPSAic3ZnIjsKICAgICAgY29uc3QgYXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgLi4uY3VzdG9tQXR0cnMKICAgICAgfTsKICAgICAgcmV0dXJuIGNyZWF0ZVNWR0VsZW1lbnQoW3RhZywgYXR0cnMsIGljb25Ob2RlXSk7CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9yZXBsYWNlRWxlbWVudC5qcwp2YXIgZ2V0QXR0cnMsIGdldENsYXNzTmFtZXMsIGNvbWJpbmVDbGFzc05hbWVzLCB0b1Bhc2NhbENhc2UsIHJlcGxhY2VFbGVtZW50Owp2YXIgaW5pdF9yZXBsYWNlRWxlbWVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vcmVwbGFjZUVsZW1lbnQuanMiKCkgewogICAgaW5pdF9jcmVhdGVFbGVtZW50KCk7CiAgICBpbml0X2RlZmF1bHRBdHRyaWJ1dGVzKCk7CiAgICBnZXRBdHRycyA9IChlbGVtZW50NCkgPT4gQXJyYXkuZnJvbShlbGVtZW50NC5hdHRyaWJ1dGVzKS5yZWR1Y2UoKGF0dHJzLCBhdHRyKSA9PiB7CiAgICAgIGF0dHJzW2F0dHIubmFtZV0gPSBhdHRyLnZhbHVlOwogICAgICByZXR1cm4gYXR0cnM7CiAgICB9LCB7fSk7CiAgICBnZXRDbGFzc05hbWVzID0gKGF0dHJzKSA9PiB7CiAgICAgIGlmICh0eXBlb2YgYXR0cnMgPT09ICJzdHJpbmciKSByZXR1cm4gYXR0cnM7CiAgICAgIGlmICghYXR0cnMgfHwgIWF0dHJzLmNsYXNzKSByZXR1cm4gIiI7CiAgICAgIGlmIChhdHRycy5jbGFzcyAmJiB0eXBlb2YgYXR0cnMuY2xhc3MgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzLnNwbGl0KCIgIik7CiAgICAgIH0KICAgICAgaWYgKGF0dHJzLmNsYXNzICYmIEFycmF5LmlzQXJyYXkoYXR0cnMuY2xhc3MpKSB7CiAgICAgICAgcmV0dXJuIGF0dHJzLmNsYXNzOwogICAgICB9CiAgICAgIHJldHVybiAiIjsKICAgIH07CiAgICBjb21iaW5lQ2xhc3NOYW1lcyA9IChhcnJheU9mQ2xhc3NuYW1lcykgPT4gewogICAgICBjb25zdCBjbGFzc05hbWVBcnJheSA9IGFycmF5T2ZDbGFzc25hbWVzLmZsYXRNYXAoZ2V0Q2xhc3NOYW1lcyk7CiAgICAgIHJldHVybiBjbGFzc05hbWVBcnJheS5tYXAoKGNsYXNzSXRlbSkgPT4gY2xhc3NJdGVtLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pLmZpbHRlcigodmFsdWUyLCBpbmRleDIsIHNlbGYyKSA9PiBzZWxmMi5pbmRleE9mKHZhbHVlMikgPT09IGluZGV4Mikuam9pbigiICIpOwogICAgfTsKICAgIHRvUGFzY2FsQ2FzZSA9IChzdHJpbmczKSA9PiBzdHJpbmczLnJlcGxhY2UoLyhcdykoXHcqKShffC18XHMqKS9nLCAoZzAsIGcxLCBnMjIpID0+IGcxLnRvVXBwZXJDYXNlKCkgKyBnMjIudG9Mb3dlckNhc2UoKSk7CiAgICByZXBsYWNlRWxlbWVudCA9IChlbGVtZW50NCwgeyBuYW1lQXR0ciwgaWNvbnM6IGljb25zNSwgYXR0cnMgfSkgPT4gewogICAgICBjb25zdCBpY29uTmFtZSA9IGVsZW1lbnQ0LmdldEF0dHJpYnV0ZShuYW1lQXR0cik7CiAgICAgIGlmIChpY29uTmFtZSA9PSBudWxsKSByZXR1cm47CiAgICAgIGNvbnN0IENvbXBvbmVudE5hbWUgPSB0b1Bhc2NhbENhc2UoaWNvbk5hbWUpOwogICAgICBjb25zdCBpY29uTm9kZSA9IGljb25zNVtDb21wb25lbnROYW1lXTsKICAgICAgaWYgKCFpY29uTm9kZSkgewogICAgICAgIHJldHVybiBjb25zb2xlLndhcm4oCiAgICAgICAgICBgJHtlbGVtZW50NC5vdXRlckhUTUx9IGljb24gbmFtZSB3YXMgbm90IGZvdW5kIGluIHRoZSBwcm92aWRlZCBpY29ucyBvYmplY3QuYAogICAgICAgICk7CiAgICAgIH0KICAgICAgY29uc3QgZWxlbWVudEF0dHJzID0gZ2V0QXR0cnMoZWxlbWVudDQpOwogICAgICBjb25zdCBpY29uQXR0cnMgPSB7CiAgICAgICAgLi4uZGVmYXVsdEF0dHJpYnV0ZXMsCiAgICAgICAgImRhdGEtbHVjaWRlIjogaWNvbk5hbWUsCiAgICAgICAgLi4uYXR0cnMsCiAgICAgICAgLi4uZWxlbWVudEF0dHJzCiAgICAgIH07CiAgICAgIGNvbnN0IGNsYXNzTmFtZXMgPSBjb21iaW5lQ2xhc3NOYW1lcyhbImx1Y2lkZSIsIGBsdWNpZGUtJHtpY29uTmFtZX1gLCBlbGVtZW50QXR0cnMsIGF0dHJzXSk7CiAgICAgIGlmIChjbGFzc05hbWVzKSB7CiAgICAgICAgT2JqZWN0LmFzc2lnbihpY29uQXR0cnMsIHsKICAgICAgICAgIGNsYXNzOiBjbGFzc05hbWVzCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQyKGljb25Ob2RlLCBpY29uQXR0cnMpOwogICAgICByZXR1cm4gZWxlbWVudDQucGFyZW50Tm9kZT8ucmVwbGFjZUNoaWxkKHN2Z0VsZW1lbnQsIGVsZW1lbnQ0KTsKICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2EtYXJyb3ctZG93bi5qcwp2YXIgQUFycm93RG93bjsKdmFyIGluaXRfYV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LWRvd24uanMiKCkgewogICAgQUFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyIDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LXVwLmpzCnZhciBBQXJyb3dVcDsKdmFyIGluaXRfYV9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1hcnJvdy11cC5qcyIoKSB7CiAgICBBQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDExIDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTZWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWxhcmdlLXNtYWxsLmpzCnZhciBBTGFyZ2VTbWFsbDsKdmFyIGluaXRfYV9sYXJnZV9zbWFsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1sYXJnZS1zbWFsbC5qcyIoKSB7CiAgICBBTGFyZ2VTbWFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE2IDIuNTM2LTcuMzI4YTEuMDIgMS4wMiAxIDAgMSAxLjkyOCAwTDIyIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjY5NyAxNGg1LjYwNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY2Nlc3NpYmlsaXR5LmpzCnZhciBBY2Nlc3NpYmlsaXR5Owp2YXIgaW5pdF9hY2Nlc3NpYmlsaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY2Nlc3NpYmlsaXR5LmpzIigpIHsKICAgIEFjY2Vzc2liaWxpdHkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICI0IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTkgMS03LTYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMy0zIDUuNSAzLTIuMzYgMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMjQgMTQuNWE1IDUgMCAwIDAgNi44OCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc2IDE3LjVhNSA1IDAgMCAwLTYuODgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjdGl2aXR5LmpzCnZhciBBY3Rpdml0eTsKdmFyIGluaXRfYWN0aXZpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjdGl2aXR5LmpzIigpIHsKICAgIEFjdGl2aXR5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTJoLTIuNDhhMiAyIDAgMCAwLTEuOTMgMS40NmwtMi4zNSA4LjM2YS4yNS4yNSAwIDAgMS0uNDggMEw5LjI0IDIuMThhLjI1LjI1IDAgMCAwLS40OCAwbC0yLjM1IDguMzZBMiAyIDAgMCAxIDQuNDkgMTJIMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fpci12ZW50LmpzCnZhciBBaXJWZW50Owp2YXIgaW5pdF9haXJfdmVudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlyLXZlbnQuanMiKCkgewogICAgQWlyVmVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVhMi41IDIuNSAwIDEgMS00IDIuMDNWMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjYgMTUuNTcyQTIgMiAwIDEgMCAxMCAxN3YtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLWNoZWNrLmpzCnZhciBBbGFybUNsb2NrQ2hlY2s7CnZhciBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1jaGVjay5qcyIoKSB7CiAgICBBbGFybUNsb2NrQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMyIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMyAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlycGxheS5qcwp2YXIgQWlycGxheTsKdmFyIGluaXRfYWlycGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWlycGxheS5qcyIoKSB7CiAgICBBaXJwbGF5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0g0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNSA1IDZIN1oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1taW51cy5qcwp2YXIgQWxhcm1DbG9ja01pbnVzOwp2YXIgaW5pdF9hbGFybV9jbG9ja19taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stbWludXMuanMiKCkgewogICAgQWxhcm1DbG9ja01pbnVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLW9mZi5qcwp2YXIgQWxhcm1DbG9ja09mZjsKdmFyIGluaXRfYWxhcm1fY2xvY2tfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1vZmYuanMiKCkgewogICAgQWxhcm1DbG9ja09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuODcgNi44N2E4IDggMCAxIDAgMTEuMjYgMTEuMjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOSAxNC4yNWE4IDggMCAwIDAtOS4xNS05LjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMTguNjcgNCAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0IDIgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLWNsb2NrLXBsdXMuanMKdmFyIEFsYXJtQ2xvY2tQbHVzOwp2YXIgaW5pdF9hbGFybV9jbG9ja19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1wbHVzLmpzIigpIHsKICAgIEFsYXJtQ2xvY2tQbHVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDMgMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDYtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzggMTguNyA0IDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY0IDE4LjY3IDIwIDIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2suanMKdmFyIEFsYXJtQ2xvY2s7CnZhciBpbml0X2FsYXJtX2Nsb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay5qcyIoKSB7CiAgICBBbGFybUNsb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djRsMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMyAyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNi0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zOCAxOC43IDQgMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjQgMTguNjcgMjAgMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1zbW9rZS5qcwp2YXIgQWxhcm1TbW9rZTsKdmFyIGluaXRfYWxhcm1fc21va2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYXJtLXNtb2tlLmpzIigpIHsKICAgIEFsYXJtU21va2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMWMwLTIuNSAyLTIuNSAyLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjFjMC0yLjUgMi0yLjUgMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDgtLjggM2ExLjI1IDEuMjUgMCAwIDEtMS4yIDFIN2ExLjI1IDEuMjUgMCAwIDEtMS4yLTFMNSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDNhMSAxIDAgMCAxIDEgMXYyYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjRhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMWMwLTIuNSAyLTIuNSAyLTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGJ1bS5qcwp2YXIgQWxidW07CnZhciBpbml0X2FsYnVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGJ1bS5qcyIoKSB7CiAgICBBbGJ1bSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTEgMyAxMSAxMSAxNCA4IDE3IDExIDE3IDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1jZW50ZXItaG9yaXpvbnRhbC5qcwp2YXIgQWxpZ25DZW50ZXJIb3Jpem9udGFsOwp2YXIgaW5pdF9hbGlnbl9jZW50ZXJfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLWhvcml6b250YWwuanMiKCkgewogICAgQWxpZ25DZW50ZXJIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnY0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNGEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2djFhMiAyIDAgMCAxLTIgMmgtMmEyIDIgMCAwIDEtMi0ydi0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhWN2MwLTEuMS45LTIgMi0yaDJhMiAyIDAgMCAxIDIgMnYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLXZlcnRpY2FsLmpzCnZhciBBbGlnbkNlbnRlclZlcnRpY2FsOwp2YXIgaW5pdF9hbGlnbl9jZW50ZXJfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWNlbnRlci12ZXJ0aWNhbC5qcyIoKSB7CiAgICBBbGlnbkNlbnRlclZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwSDRhMiAyIDAgMCAxLTItMlY2YzAtMS4xLjktMiAyLTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGg0YTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0yaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBIN2EyIDIgMCAwIDEtMi0ydi0yYzAtMS4xLjktMiAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGgxYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAyaC0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tZW5kLWhvcml6b250YWwuanMKdmFyIEFsaWduRW5kSG9yaXpvbnRhbDsKdmFyIGluaXRfYWxpZ25fZW5kX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC1ob3Jpem9udGFsLmpzIigpIHsKICAgIEFsaWduRW5kSG9yaXpvbnRhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjkiLCB4OiAiMTQiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMkgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tZW5kLXZlcnRpY2FsLmpzCnZhciBBbGlnbkVuZFZlcnRpY2FsOwp2YXIgaW5pdF9hbGlnbl9lbmRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBBbGlnbkVuZFZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNiIsIHg6ICI5IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyVjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtY2VudGVyLmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtY2VudGVyLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVDZW50ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIydi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDdWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNVYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLXN0YXJ0LmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQ7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1kaXN0cmlidXRlLXN0YXJ0LmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICI0IiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE0IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzCnZhciBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNCIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNCIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1jZW50ZXIuanMKdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1jZW50ZXIuanMiKCkgewogICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanMKdmFyIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlFbmQ7CnZhciBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanMiKCkgewogICAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjEyIiwgeTogIjciLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1zdGFydC5qcwp2YXIgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0Owp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1zdGFydC5qcyIoKSB7CiAgICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiNiIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNiIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMnYyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYXJvdW5kLmpzCnZhciBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDsKdmFyIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYXJvdW5kLmpzIigpIHsKICAgIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjkiLCB5OiAiNyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qcwp2YXIgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOwp2YXIgaW5pdF9hbGlnbl9ob3Jpem9udGFsX3NwYWNlX2JldHdlZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qcyIoKSB7CiAgICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICI1Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMCIsIHg6ICIxNSIsIHk6ICI3Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAydjIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tc3RhcnQtaG9yaXpvbnRhbC5qcwp2YXIgQWxpZ25TdGFydEhvcml6b250YWw7CnZhciBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LWhvcml6b250YWwuanMiKCkgewogICAgQWxpZ25TdGFydEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiMTYiLCB4OiAiNCIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICI5IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMkgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tc3RhcnQtdmVydGljYWwuanMKdmFyIEFsaWduU3RhcnRWZXJ0aWNhbDsKdmFyIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LXZlcnRpY2FsLmpzIigpIHsKICAgIEFsaWduU3RhcnRWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjkiLCBoZWlnaHQ6ICI2IiwgeDogIjYiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjYiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWNlbnRlci5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXI7CnZhciBpbml0X2FsaWduX3ZlcnRpY2FsX2Rpc3RyaWJ1dGVfY2VudGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWNlbnRlci5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDdoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN0gyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNSIsIHk6ICIxNCIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWVuZC5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ7CnZhciBpbml0X2FsaWduX3ZlcnRpY2FsX2Rpc3RyaWJ1dGVfZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLWVuZC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1zdGFydC5qcwp2YXIgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydDsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1zdGFydC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZVN0YXJ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNGgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktY2VudGVyLmpzCnZhciBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfanVzdGlmeV9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktY2VudGVyLmpzIigpIHsKICAgIEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQuanMKdmFyIEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOwp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1lbmQuanMiKCkgewogICAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LXN0YXJ0LmpzCnZhciBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0Owp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LXN0YXJ0LmpzIigpIHsKICAgIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjYiLCB4OiAiNSIsIHk6ICIxNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMmgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLXNwYWNlLWFyb3VuZC5qcwp2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOwp2YXIgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9hcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLXNwYWNlLWFyb3VuZC5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjYiLCB4OiAiNyIsIHk6ICI5Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi5qcwp2YXIgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjsKdmFyIGluaXRfYWxpZ25fdmVydGljYWxfc3BhY2VfYmV0d2VlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtc3BhY2UtYmV0d2Vlbi5qcyIoKSB7CiAgICBBbGlnblZlcnRpY2FsU3BhY2VCZXR3ZWVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI2IiwgeDogIjUiLCB5OiAiMTUiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2IiwgeDogIjciLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgM2gyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtYnVsYW5jZS5qcwp2YXIgQW1idWxhbmNlOwp2YXIgaW5pdF9hbWJ1bGFuY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtYnVsYW5jZS5qcyIoKSB7CiAgICBBbWJ1bGFuY2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE4aDJhMSAxIDAgMCAwIDEtMXYtMy4yOGExIDEgMCAwIDAtLjY4NC0uOTQ4bC0xLjkyMy0uNjQxYTEgMSAwIDAgMS0uNTc4LS41MDJsLTEuNTM5LTMuMDc2QTEgMSAwIDAgMCAxNi4zODIgOEgxNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4aDYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBlcnNhbmQuanMKdmFyIEFtcGVyc2FuZDsKdmFyIGluaXRfYW1wZXJzYW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBlcnNhbmQuanMiKCkgewogICAgQW1wZXJzYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNy41IDEyYTggOCAwIDAgMS04IDhBNC41IDQuNSAwIDAgMSA1IDE1LjVjMC02IDgtNCA4LTguNWEzIDMgMCAxIDAtNiAwYzAgMyAyLjUgOC41IDEyIDEzIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qcwp2YXIgQW1wZXJzYW5kczsKdmFyIGluaXRfYW1wZXJzYW5kcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qcyIoKSB7CiAgICBBbXBlcnNhbmRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMCAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMiAxN2MtNS0zLTctNy03LTlhMiAyIDAgMCAxIDQgMGMwIDIuNS01IDIuNS01IDYgMCAxLjcgMS4zIDMgMyAzIDIuOCAwIDUtMi4yIDUtNSIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBob3JhLmpzCnZhciBBbXBob3JhOwp2YXIgaW5pdF9hbXBob3JhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbXBob3JhLmpzIigpIHsKICAgIEFtcGhvcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjUuNjMyYzAgLjQyNC0uMjcyLjc5NS0uNjUzLjk4MkE2IDYgMCAwIDAgNiAxNGMuMDA2IDQgMyA3IDUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1SDhhMiAyIDAgMCAwIDAgNGguNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1LjYzMmMwIC40MjQuMjcyLjc5NS42NTIuOTgyQTYgNiAwIDAgMSAxOCAxNGMwIDQtMyA3LTUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA1aDJhMiAyIDAgMCAxIDAgNGgtLjY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanMKdmFyIEFuY2hvcjsKdmFyIGluaXRfYW5jaG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanMiKCkgewogICAgQW5jaG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMyAyLTFhOSA5IDAgMCAxLTE4IDBsMiAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTFoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qcwp2YXIgQW5ncnk7CnZhciBpbml0X2FuZ3J5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qcyIoKSB7CiAgICBBbmdyeSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2cy0xLjUtMi00LTItNCAyLTQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgOCAxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDkgMi41LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5ub3llZC5qcwp2YXIgQW5ub3llZDsKdmFyIGluaXRfYW5ub3llZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYW5ub3llZC5qcyIoKSB7CiAgICBBbm5veWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudGVubmEuanMKdmFyIEFudGVubmE7CnZhciBpbml0X2FudGVubmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudGVubmEuanMiKCkgewogICAgQW50ZW5uYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTIgNyAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTIgNS0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMiA1LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDEyIDUtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDdoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudmlsLmpzCnZhciBBbnZpbDsKdmFyIGluaXRfYW52aWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FudmlsLmpzIigpIHsKICAgIEFudmlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMEg2YTQgNCAwIDAgMS00LTQgMSAxIDAgMCAxIDEtMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNWExIDEgMCAwIDEgMS0xaDEzYTEgMSAwIDAgMSAxIDEgNyA3IDAgMCAxLTcgN0g4YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMyAzIDAgMCAxIDMtM2g4YTMgMyAwIDAgMSAzIDMgMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qcwp2YXIgQXBlcnR1cmU7CnZhciBpbml0X2FwZXJ0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qcyIoKSB7CiAgICBBcGVydHVyZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMxIDggNS43NCA5Ljk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjkgOGgxMS40OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjM4IDEyIDUuNzQtOS45NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY5IDE2IDMuOTUgNi4wNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4zMSAxNkgyLjgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjYyIDEyLTUuNzQgOS45NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcC13aW5kb3ctbWFjLmpzCnZhciBBcHBXaW5kb3dNYWM7CnZhciBpbml0X2FwcF93aW5kb3dfbWFjID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHAtd2luZG93LW1hYy5qcyIoKSB7CiAgICBBcHBXaW5kb3dNYWMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXBwLXdpbmRvdy5qcwp2YXIgQXBwV2luZG93Owp2YXIgaW5pdF9hcHBfd2luZG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHAtd2luZG93LmpzIigpIHsKICAgIEFwcFdpbmRvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI0Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHBsZS5qcwp2YXIgQXBwbGU7CnZhciBpbml0X2FwcGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcHBsZS5qcyIoKSB7CiAgICBBcHBsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDYuNTI4VjNhMSAxIDAgMCAxIDEtMWgwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjIzNyAyMUExNSAxNSAwIDAgMCAyMiAxMWE2IDYgMCAwIDAtMTAtNC40NzJBNiA2IDAgMCAwIDIgMTFhMTUuMSAxNS4xIDAgMCAwIDMuNzYzIDEwIDMgMyAwIDAgMCAzLjY0OC42NDggNS41IDUuNSAwIDAgMSA1LjE3OCAwQTMgMyAwIDAgMCAxOC4yMzcgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcmNoaXZlLXJlc3RvcmUuanMKdmFyIEFyY2hpdmVSZXN0b3JlOwp2YXIgaW5pdF9hcmNoaXZlX3Jlc3RvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUtcmVzdG9yZS5qcyIoKSB7CiAgICBBcmNoaXZlUmVzdG9yZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4djExYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcmNoaXZlLXguanMKdmFyIEFyY2hpdmVYOwp2YXIgaW5pdF9hcmNoaXZlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUteC5qcyIoKSB7CiAgICBBcmNoaXZlWCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxNyA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyIDUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUuanMKdmFyIEFyY2hpdmU7CnZhciBpbml0X2FyY2hpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FyY2hpdmUuanMiKCkgewogICAgQXJjaGl2ZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNSIsIHg6ICIyIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA4djExYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcm1jaGFpci5qcwp2YXIgQXJtY2hhaXI7CnZhciBpbml0X2FybWNoYWlyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcm1jaGFpci5qcyIoKSB7CiAgICBBcm1jaGFpciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDlWNmEyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTZhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtOWEuNS41IDAgMCAxLS41LS41VjExYTIgMiAwIDAgMC00IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qcwp2YXIgQXJyb3dCaWdEb3duRGFzaDsKdmFyIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qcyIoKSB7CiAgICBBcnJvd0JpZ0Rvd25EYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWOWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA0aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctZG93bi5qcwp2YXIgQXJyb3dCaWdEb3duOwp2YXIgaW5pdF9hcnJvd19iaWdfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24uanMiKCkgewogICAgQXJyb3dCaWdEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTFhMSAxIDAgMCAwIDEgMWgyLjkzOWExIDEgMCAwIDEgLjc1IDEuODExbC02LjgzNSA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMS0xLjcwNyAwTDQuMzEgMTMuODFhMSAxIDAgMCAxIC43NS0xLjgxMUg4YTEgMSAwIDAgMCAxLTFWNWExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC1kYXNoLmpzCnZhciBBcnJvd0JpZ0xlZnREYXNoOwp2YXIgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC1kYXNoLmpzIigpIHsKICAgIEFycm93QmlnTGVmdERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDl2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1sZWZ0LmpzCnZhciBBcnJvd0JpZ0xlZnQ7CnZhciBpbml0X2Fycm93X2JpZ19sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctbGVmdC5qcyIoKSB7CiAgICBBcnJvd0JpZ0xlZnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA5YTEgMSAwIDAgMS0xLTFWNS4wNjFhMSAxIDAgMCAwLTEuODExLS43NWwtNi44MzUgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDAgMCAxLjcwN2w2LjgzNSA2LjgzNWExIDEgMCAwIDAgMS44MTEtLjc1VjE2YTEgMSAwIDAgMSAxLTFoNmExIDEgMCAwIDAgMS0xdi00YTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanMKdmFyIEFycm93QmlnUmlnaHREYXNoOwp2YXIgaW5pdF9hcnJvd19iaWdfcmlnaHRfZGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanMiKCkgewogICAgQXJyb3dCaWdSaWdodERhc2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA5YTEgMSAwIDAgMCAxLTFWNS4wNjFhMSAxIDAgMCAxIDEuODExLS43NWw2LjgzNiA2LjgzNmExLjIwNyAxLjIwNyAwIDAgMSAwIDEuNzA3bC02LjgzNiA2LjgzNWExIDEgMCAwIDEtMS44MTEtLjc1VjE2YTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LmpzCnZhciBBcnJvd0JpZ1JpZ2h0Owp2YXIgaW5pdF9hcnJvd19iaWdfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1yaWdodC5qcyIoKSB7CiAgICBBcnJvd0JpZ1JpZ2h0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgOWExIDEgMCAwIDAgMS0xVjUuMDYxYTEgMSAwIDAgMSAxLjgxMS0uNzVsNi44MzYgNi44MzZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwN2wtNi44MzYgNi44MzVhMSAxIDAgMCAxLTEuODExLS43NVYxNmExIDEgMCAwIDAtMS0xSDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC1kYXNoLmpzCnZhciBBcnJvd0JpZ1VwRGFzaDsKdmFyIGluaXRfYXJyb3dfYmlnX3VwX2Rhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC1kYXNoLmpzIigpIHsKICAgIEFycm93QmlnVXBEYXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAxM2ExIDEgMCAwIDAtMS0xSDUuMDYxYTEgMSAwIDAgMS0uNzUtMS44MTFsNi44MzYtNi44MzVhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDcgMGw2LjgzNSA2LjgzNWExIDEgMCAwIDEtLjc1IDEuODExSDE2YTEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC5qcwp2YXIgQXJyb3dCaWdVcDsKdmFyIGluaXRfYXJyb3dfYmlnX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctdXAuanMiKCkgewogICAgQXJyb3dCaWdVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTNhMSAxIDAgMCAwLTEtMUg1LjA2MWExIDEgMCAwIDEtLjc1LTEuODExbDYuODM2LTYuODM1YTEuMjA3IDEuMjA3IDAgMCAxIDEuNzA3IDBsNi44MzUgNi44MzVhMSAxIDAgMCAxLS43NSAxLjgxMUgxNmExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAxLTEgMWgtNGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzCnZhciBBcnJvd0Rvd24wMTsKdmFyIGluaXRfYXJyb3dfZG93bl8wXzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzIigpIHsKICAgIEFycm93RG93bjAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdi02aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIwaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLTEtMC5qcwp2YXIgQXJyb3dEb3duMTA7CnZhciBpbml0X2Fycm93X2Rvd25fMV8wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLTEtMC5qcyIoKSB7CiAgICBBcnJvd0Rvd24xMCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1hLXouanMKdmFyIEFycm93RG93bkFaOwp2YXIgaW5pdF9hcnJvd19kb3duX2FfeiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1hLXouanMiKCkgewogICAgQXJyb3dEb3duQVogPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBWNi41YTIuNSAyLjUgMCAwIDEgNSAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE0aDVsLTUgNmg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1mcm9tLWxpbmUuanMKdmFyIEFycm93RG93bkZyb21MaW5lOwp2YXIgaW5pdF9hcnJvd19kb3duX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1mcm9tLWxpbmUuanMiKCkgewogICAgQXJyb3dEb3duRnJvbUxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzSDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE1IDYgNiA2LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLWxlZnQuanMKdmFyIEFycm93RG93bkxlZnQ7CnZhciBpbml0X2Fycm93X2Rvd25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzIigpIHsKICAgIEFycm93RG93bkxlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3IDcgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdIN1Y3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qcwp2YXIgQXJyb3dEb3duUmlnaHQ7CnZhciBpbml0X2Fycm93X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tcmlnaHQuanMiKCkgewogICAgQXJyb3dEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN3YxMEg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1kb3QuanMKdmFyIEFycm93RG93blRvRG90Owp2YXIgaW5pdF9hcnJvd19kb3duX3RvX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1kb3QuanMiKCkgewogICAgQXJyb3dEb3duVG9Eb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDktNyA3LTctNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qcwp2YXIgQXJyb3dEb3duTmFycm93V2lkZTsKdmFyIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qcyIoKSB7CiAgICBBcnJvd0Rvd25OYXJyb3dXaWRlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNiA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1saW5lLmpzCnZhciBBcnJvd0Rvd25Ub0xpbmU7CnZhciBpbml0X2Fycm93X2Rvd25fdG9fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi10by1saW5lLmpzIigpIHsKICAgIEFycm93RG93blRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxMSA2IDYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxSDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXVwLmpzCnZhciBBcnJvd0Rvd25VcDsKdmFyIGluaXRfYXJyb3dfZG93bl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi11cC5qcyIoKSB7CiAgICBBcnJvd0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzCnZhciBBcnJvd0Rvd25XaWRlTmFycm93Owp2YXIgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzIigpIHsKICAgIEFycm93RG93bldpZGVOYXJyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE2IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDRoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXotYS5qcwp2YXIgQXJyb3dEb3duWkE7CnZhciBpbml0X2Fycm93X2Rvd25fel9hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXotYS5qcyIoKSB7CiAgICBBcnJvd0Rvd25aQSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNGg1bC01IDZoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMHYtMy41YTIuNSAyLjUgMCAwIDEgNSAwVjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi5qcwp2YXIgQXJyb3dEb3duOwp2YXIgaW5pdF9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLmpzIigpIHsKICAgIEFycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTItNyA3LTctNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtcmlnaHQuanMKdmFyIEFycm93TGVmdFJpZ2h0Owp2YXIgaW5pdF9hcnJvd19sZWZ0X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1sZWZ0LXJpZ2h0LmpzIigpIHsKICAgIEFycm93TGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzIDQgN2w0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3aDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIxIDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTdINCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzCnZhciBBcnJvd0xlZnRGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dfbGVmdF9mcm9tX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzIigpIHsKICAgIEFycm93TGVmdEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA2LTYgNiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOVY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzCnZhciBBcnJvd0xlZnRUb0xpbmU7CnZhciBpbml0X2Fycm93X2xlZnRfdG9fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzIigpIHsKICAgIEFycm93TGVmdFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTlWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyA2LTYgNiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQuanMKdmFyIEFycm93TGVmdDsKdmFyIGluaXRfYXJyb3dfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qcyIoKSB7CiAgICBBcnJvd0xlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxOS03LTcgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1mcm9tLWxpbmUuanMKdmFyIEFycm93UmlnaHRGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dfcmlnaHRfZnJvbV9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1mcm9tLWxpbmUuanMiKCkgewogICAgQXJyb3dSaWdodEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTggNi02LTYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWxlZnQuanMKdmFyIEFycm93UmlnaHRMZWZ0Owp2YXIgaW5pdF9hcnJvd19yaWdodF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC1sZWZ0LmpzIigpIHsKICAgIEFycm93UmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMyA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIxLTQtNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxN2gxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LXRvLWxpbmUuanMKdmFyIEFycm93UmlnaHRUb0xpbmU7CnZhciBpbml0X2Fycm93X3JpZ2h0X3RvX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LXRvLWxpbmUuanMiKCkgewogICAgQXJyb3dSaWdodFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTggNi02LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1djE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctcmlnaHQuanMKdmFyIEFycm93UmlnaHQ7CnZhciBpbml0X2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC5qcyIoKSB7CiAgICBBcnJvd1JpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA1IDcgNy03IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanMKdmFyIEFycm93VXAwMTsKdmFyIGluaXRfYXJyb3dfdXBfMF8xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanMiKCkgewogICAgQXJyb3dVcDAxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjB2LTZoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjBoNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLTEtMC5qcwp2YXIgQXJyb3dVcDEwOwp2YXIgaW5pdF9hcnJvd191cF8xXzAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLTEtMC5qcyIoKSB7CiAgICBBcnJvd1VwMTAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDggNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTBWNGgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiMTQiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcnk6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtYS16LmpzCnZhciBBcnJvd1VwQVo7CnZhciBpbml0X2Fycm93X3VwX2FfeiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtYS16LmpzIigpIHsKICAgIEFycm93VXBBWiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwVjYuNWEyLjUgMi41IDAgMCAxIDUgMFYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNGg1bC01IDZoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWRvd24uanMKdmFyIEFycm93VXBEb3duOwp2YXIgaW5pdF9hcnJvd191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1kb3duLmpzIigpIHsKICAgIEFycm93VXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTYtNCA0LTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWZyb20tZG90LmpzCnZhciBBcnJvd1VwRnJvbURvdDsKdmFyIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLWZyb20tZG90LmpzIigpIHsKICAgIEFycm93VXBGcm9tRG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5IDctNyA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIyMSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1saW5lLmpzCnZhciBBcnJvd1VwRnJvbUxpbmU7CnZhciBpbml0X2Fycm93X3VwX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1saW5lLmpzIigpIHsKICAgIEFycm93VXBGcm9tTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDktNi02LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1sZWZ0LmpzCnZhciBBcnJvd1VwTGVmdDsKdmFyIGluaXRfYXJyb3dfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtbGVmdC5qcyIoKSB7CiAgICBBcnJvd1VwTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdWN2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNyA3IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1uYXJyb3ctd2lkZS5qcwp2YXIgQXJyb3dVcE5hcnJvd1dpZGU7CnZhciBpbml0X2Fycm93X3VwX25hcnJvd193aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1uYXJyb3ctd2lkZS5qcyIoKSB7CiAgICBBcnJvd1VwTmFycm93V2lkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE2aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1yaWdodC5qcwp2YXIgQXJyb3dVcFJpZ2h0Owp2YXIgaW5pdF9hcnJvd191cF9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtcmlnaHQuanMiKCkgewogICAgQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTcgMTcgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanMKdmFyIEFycm93VXBUb0xpbmU7CnZhciBpbml0X2Fycm93X3VwX3RvX2xpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanMiKCkgewogICAgQXJyb3dVcFRvTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2gxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMy02LTYtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qcwp2YXIgQXJyb3dVcFdpZGVOYXJyb3c7CnZhciBpbml0X2Fycm93X3VwX3dpZGVfbmFycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qcyIoKSB7CiAgICBBcnJvd1VwV2lkZU5hcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNmg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC16LWEuanMKdmFyIEFycm93VXBaQTsKdmFyIGluaXRfYXJyb3dfdXBfel9hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC16LWEuanMiKCkgewogICAgQXJyb3dVcFpBID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA4IDQtNCA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRoNWwtNSA2aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjB2LTMuNWEyLjUgMi41IDAgMCAxIDUgMFYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxOGgtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLmpzCnZhciBBcnJvd1VwOwp2YXIgaW5pdF9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAuanMiKCkgewogICAgQXJyb3dVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTIgNy03IDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOVY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qcwp2YXIgQXJyb3dzVXBGcm9tTGluZTsKdmFyIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qcyIoKSB7CiAgICBBcnJvd3NVcEZyb21MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN1YzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hc3Rlcmlzay5qcwp2YXIgQXN0ZXJpc2s7CnZhciBpbml0X2FzdGVyaXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hc3Rlcmlzay5qcyIoKSB7CiAgICBBc3RlcmlzayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMTk2IDkgNi44MDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi44MDQgOSAxMC4zOTIgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0LXNpZ24uanMKdmFyIEF0U2lnbjsKdmFyIGluaXRfYXRfc2lnbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXQtc2lnbi5qcyIoKSB7CiAgICBBdFNpZ24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2NWEzIDMgMCAwIDAgNiAwdi0xYTEwIDEwIDAgMSAwLTQgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanMKdmFyIEF0b207CnZhciBpbml0X2F0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanMiKCkgewogICAgQXRvbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuMiAyMC4yYzIuMDQtMi4wMy4wMi03LjM2LTQuNS0xMS45LTQuNTQtNC41Mi05Ljg3LTYuNTQtMTEuOS00LjUtMi4wNCAyLjAzLS4wMiA3LjM2IDQuNSAxMS45IDQuNTQgNC41MiA5Ljg3IDYuNTQgMTEuOSA0LjVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjcgMTUuN2M0LjUyLTQuNTQgNi41NC05Ljg3IDQuNS0xMS45LTIuMDMtMi4wNC03LjM2LS4wMi0xMS45IDQuNS00LjUyIDQuNTQtNi41NCA5Ljg3LTQuNSAxMS45IDIuMDMgMi4wNCA3LjM2LjAyIDExLjktNC41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F1ZGlvLWxpbmVzLmpzCnZhciBBdWRpb0xpbmVzOwp2YXIgaW5pdF9hdWRpb19saW5lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8tbGluZXMuanMiKCkgewogICAgQXVkaW9MaW5lcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4djciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNXYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXdhcmQuanMKdmFyIEF3YXJkOwp2YXIgaW5pdF9hd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXdhcmQuanMiKCkgewogICAgQXdhcmQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNS40NzcgMTIuODkgMS41MTUgOC41MjZhLjUuNSAwIDAgMS0uODEuNDdsLTMuNTgtMi42ODdhMSAxIDAgMCAwLTEuMTk3IDBsLTMuNTg2IDIuNjg2YS41LjUgMCAwIDEtLjgxLS40NjlsMS41MTQtOC41MjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOCIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8td2F2ZWZvcm0uanMKdmFyIEF1ZGlvV2F2ZWZvcm07CnZhciBpbml0X2F1ZGlvX3dhdmVmb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9hdWRpby13YXZlZm9ybS5qcyIoKSB7CiAgICBBdWRpb1dhdmVmb3JtID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxM2EyIDIgMCAwIDAgMi0yVjdhMiAyIDAgMCAxIDQgMHYxM2EyIDIgMCAwIDAgNCAwVjRhMiAyIDAgMCAxIDQgMHYxM2EyIDIgMCAwIDAgNCAwdi00YTIgMiAwIDAgMSAyLTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanMKdmFyIEF4ZTsKdmFyIGluaXRfYXhlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanMiKCkgewogICAgQXhlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTItOC4zODEgOC4zOGExIDEgMCAwIDEtMy4wMDEtM0wxMSA5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDE1LjVhLjUuNSAwIDAgMCAuNS41QTYuNSA2LjUgMCAwIDAgMjIgOS41YS41LjUgMCAwIDAtLjUtLjVoLTEuNjcyYTIgMiAwIDAgMS0xLjQxNC0uNTg2bC01LjA2Mi01LjA2MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwTDkuMzUyIDUuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsNS4wNjIgNS4wNjJBMiAyIDAgMCAxIDE1IDEzLjgyOHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGlzLTNkLmpzCnZhciBBeGlzM2Q7CnZhciBpbml0X2F4aXNfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F4aXMtM2QuanMiKCkgewogICAgQXhpczNkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSAxMC41IDE1IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE1YTEgMSAwIDAgMCAxIDFoMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yOTMgMTkuNzA3IDYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAxLjUtMS41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qcwp2YXIgQmFieTsKdmFyIGluaXRfYmFieSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qcyIoKSB7CiAgICBCYWJ5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZjLjUuMyAxLjIuNSAyIC41czEuNS0uMiAyLS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS4zOCA2LjgxM0E5IDkgMCAwIDEgMjAuOCAxMC4yYTIgMiAwIDAgMSAwIDMuNiA5IDkgMCAwIDEtMTcuNiAwIDIgMiAwIDAgMSAwLTMuNkE5IDkgMCAwIDEgMTIgM2MyIDAgMy41IDEuMSAzLjUgMi41cy0uOSAyLjUtMiAyLjVjLS44IDAtMS41LS40LTEuNS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFja3BhY2suanMKdmFyIEJhY2twYWNrOwp2YXIgaW5pdF9iYWNrcGFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFja3BhY2suanMiKCkgewogICAgQmFja3BhY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwYTQgNCAwIDAgMSA0LTRoOGE0IDQgMCAwIDEgNCA0djEwYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJ2LTZhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZWNGEyIDIgMCAwIDEgMi0yaDJhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtYWxlcnQuanMKdmFyIEJhZGdlQWxlcnQ7CnZhciBpbml0X2JhZGdlX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1hbGVydC5qcyIoKSB7CiAgICBCYWRnZUFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWNlbnQuanMKdmFyIEJhZGdlQ2VudDsKdmFyIGluaXRfYmFkZ2VfY2VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2VudC5qcyIoKSB7CiAgICBCYWRnZUNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTBhNCA0IDAgMSAwIDAgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWNoZWNrLmpzCnZhciBCYWRnZUNoZWNrOwp2YXIgaW5pdF9iYWRnZV9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2hlY2suanMiKCkgewogICAgQmFkZ2VDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTIgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWRvbGxhci1zaWduLmpzCnZhciBCYWRnZURvbGxhclNpZ247CnZhciBpbml0X2JhZGdlX2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1kb2xsYXItc2lnbi5qcyIoKSB7CiAgICBCYWRnZURvbGxhclNpZ24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWV1cm8uanMKdmFyIEJhZGdlRXVybzsKdmFyIGluaXRfYmFkZ2VfZXVybyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtZXVyby5qcyIoKSB7CiAgICBCYWRnZUV1cm8gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOS40YTQgNCAwIDEgMCAwIDUuMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWluZGlhbi1ydXBlZS5qcwp2YXIgQmFkZ2VJbmRpYW5SdXBlZTsKdmFyIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmRpYW4tcnVwZWUuanMiKCkgewogICAgQmFkZ2VJbmRpYW5SdXBlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxNy01LTFoMWE0IDQgMCAwIDAgMC04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtaW5mby5qcwp2YXIgQmFkZ2VJbmZvOwp2YXIgaW5pdF9iYWRnZV9pbmZvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmZvLmpzIigpIHsKICAgIEJhZGdlSW5mbyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTYiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMi4wMSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWphcGFuZXNlLXllbi5qcwp2YXIgQmFkZ2VKYXBhbmVzZVllbjsKdmFyIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1qYXBhbmVzZS15ZW4uanMiKCkgewogICAgQmFkZ2VKYXBhbmVzZVllbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzIDN2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMSAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTZoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLW1pbnVzLmpzCnZhciBCYWRnZU1pbnVzOwp2YXIgaW5pdF9iYWRnZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtbWludXMuanMiKCkgewogICAgQmFkZ2VNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wZXJjZW50LmpzCnZhciBCYWRnZVBlcmNlbnQ7CnZhciBpbml0X2JhZGdlX3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBlcmNlbnQuanMiKCkgewogICAgQmFkZ2VQZXJjZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wbHVzLmpzCnZhciBCYWRnZVBsdXM7CnZhciBpbml0X2JhZGdlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBsdXMuanMiKCkgewogICAgQmFkZ2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcG91bmQtc3RlcmxpbmcuanMKdmFyIEJhZGdlUG91bmRTdGVybGluZzsKdmFyIGluaXRfYmFkZ2VfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIEJhZGdlUG91bmRTdGVybGluZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMi41IDIuNSAwIDAgMSA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcXVlc3Rpb24tbWFyay5qcwp2YXIgQmFkZ2VRdWVzdGlvbk1hcms7CnZhciBpbml0X2JhZGdlX3F1ZXN0aW9uX21hcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgQmFkZ2VRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjg1IDguNjJhNCA0IDAgMCAxIDQuNzgtNC43NyA0IDQgMCAwIDEgNi43NCAwIDQgNCAwIDAgMSA0Ljc4IDQuNzggNCA0IDAgMCAxIDAgNi43NCA0IDQgMCAwIDEtNC43NyA0Ljc4IDQgNCAwIDAgMS02Ljc1IDAgNCA0IDAgMCAxLTQuNzgtNC43NyA0IDQgMCAwIDEgMC02Ljc2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjA5IDlhMyAzIDAgMCAxIDUuODMgMWMwIDItMyAzLTMgMyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE3IiwgeTI6ICIxNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXJ1c3NpYW4tcnVibGUuanMKdmFyIEJhZGdlUnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9iYWRnZV9ydXNzaWFuX3J1YmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1ydXNzaWFuLXJ1YmxlLmpzIigpIHsKICAgIEJhZGdlUnVzc2lhblJ1YmxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNWEyIDIgMCAxIDAgMC00aC0zdjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1zd2lzcy1mcmFuYy5qcwp2YXIgQmFkZ2VTd2lzc0ZyYW5jOwp2YXIgaW5pdF9iYWRnZV9zd2lzc19mcmFuYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2Utc3dpc3MtZnJhbmMuanMiKCkgewogICAgQmFkZ2VTd2lzc0ZyYW5jID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTdWOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtdHVya2lzaC1saXJhLmpzCnZhciBCYWRnZVR1cmtpc2hMaXJhOwp2YXIgaW5pdF9iYWRnZV90dXJraXNoX2xpcmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXR1cmtpc2gtbGlyYS5qcyIoKSB7CiAgICBCYWRnZVR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgN3YxMGE1IDUgMCAwIDAgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDgtNiAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuODUgOC42MmE0IDQgMCAwIDEgNC43OC00Ljc3IDQgNCAwIDAgMSA2Ljc0IDAgNCA0IDAgMCAxIDQuNzggNC43OCA0IDQgMCAwIDEgMCA2Ljc0IDQgNCAwIDAgMS00Ljc3IDQuNzggNCA0IDAgMCAxLTYuNzUgMCA0IDQgMCAwIDEtNC43OC00Ljc3IDQgNCAwIDAgMSAwLTYuNzYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS14LmpzCnZhciBCYWRnZVg7CnZhciBpbml0X2JhZGdlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXguanMiKCkgewogICAgQmFkZ2VYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjkiLCB5MTogIjkiLCB5MjogIjE1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjE1IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLmpzCnZhciBCYWRnZTsKdmFyIGluaXRfYmFkZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLmpzIigpIHsKICAgIEJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy44NSA4LjYyYTQgNCAwIDAgMSA0Ljc4LTQuNzcgNCA0IDAgMCAxIDYuNzQgMCA0IDQgMCAwIDEgNC43OCA0Ljc4IDQgNCAwIDAgMSAwIDYuNzQgNCA0IDAgMCAxLTQuNzcgNC43OCA0IDQgMCAwIDEtNi43NSAwIDQgNCAwIDAgMS00Ljc4LTQuNzcgNCA0IDAgMCAxIDAtNi43NloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWdnYWdlLWNsYWltLmpzCnZhciBCYWdnYWdlQ2xhaW07CnZhciBpbml0X2JhZ2dhZ2VfY2xhaW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZ2dhZ2UtY2xhaW0uanMiKCkgewogICAgQmFnZ2FnZUNsYWltID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMThINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAwLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNFY0YTIgMiAwIDAgMC0yLTJoLTFhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjIwIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFsbG9vbi5qcwp2YXIgQmFsbG9vbjsKdmFyIGluaXRfYmFsbG9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFsbG9vbi5qcyIoKSB7CiAgICBCYWxsb29uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2MWEyIDIgMCAwIDAgMiAyaDFhMiAyIDAgMCAxIDIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4YzAgNC0zLjUgOC02IDhzLTYtNC02LThhNiA2IDAgMCAxIDEyIDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW4uanMKdmFyIEJhbjsKdmFyIGluaXRfYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW4uanMiKCkgewogICAgQmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MjkgNC45MjkgMTkuMDcgMTkuMDcxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzCnZhciBCYW5hbmE7CnZhciBpbml0X2JhbmFuYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzIigpIHsKICAgIEJhbmFuYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTNjMy41LTIgOC0yIDEwIDJhNS41IDUuNSAwIDAgMSA4IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4xNSAxNy44OWM1LjUyLTEuNTIgOC42NS02Ljg5IDctMTJDMTEuNTUgNCAxMS41IDIgMTMgMmMzLjIyIDAgNSA1LjUgNSA4IDAgNi41LTQuMiAxMi0xMC40OSAxMkM1LjExIDIyIDIgMjIgMiAyMGMwLTEuNSAxLjE0LTEuNTUgMy4xNS0yLjExWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmRhZ2UuanMKdmFyIEJhbmRhZ2U7CnZhciBpbml0X2JhbmRhZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhbmRhZ2UuanMiKCkgewogICAgQmFuZGFnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwLjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNC4wMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTAuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0LjAxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2djExLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2djEyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUtYXJyb3ctZG93bi5qcwp2YXIgQmFua25vdGVBcnJvd0Rvd247CnZhciBpbml0X2Jhbmtub3RlX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLWFycm93LWRvd24uanMiKCkgewogICAgQmFua25vdGVBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAzIDMgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS1hcnJvdy11cC5qcwp2YXIgQmFua25vdGVBcnJvd1VwOwp2YXIgaW5pdF9iYW5rbm90ZV9hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUtYXJyb3ctdXAuanMiKCkgewogICAgQmFua25vdGVBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAydjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIydi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE5LTMtMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmguMDEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLXguanMKdmFyIEJhbmtub3RlWDsKdmFyIGluaXRfYmFua25vdGVfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUteC5qcyIoKSB7CiAgICBCYW5rbm90ZVggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg0YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUuanMKdmFyIEJhbmtub3RlOwp2YXIgaW5pdF9iYW5rbm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFua25vdGUuanMiKCkgewogICAgQmFua25vdGUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanMKdmFyIEJhcmNvZGU7CnZhciBpbml0X2JhcmNvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanMiKCkgewogICAgQmFyY29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDV2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNXYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanMKdmFyIEJhcnJlbDsKdmFyIGluaXRfYmFycmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanMiKCkgewogICAgQmFycmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgM2E0MSA0MSAwIDAgMCAwIDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDNhNDEgNDEgMCAwIDEgMCAxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAzYTIgMiAwIDAgMSAxLjY4LjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAgMTYuMTZBMiAyIDAgMCAxIDE3IDIxSDdhMiAyIDAgMCAxLTEuNjgtLjkyIDE1LjI1IDE1LjI1IDAgMCAxIDAtMTYuMTZBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy44NCAxN2gxNi4zMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjg0IDdoMTYuMzIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qcwp2YXIgQmFzZWxpbmU7CnZhciBpbml0X2Jhc2VsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qcyIoKSB7CiAgICBCYXNlbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAxNiA2LTEyIDYgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0aC5qcwp2YXIgQmF0aDsKdmFyIGluaXRfYmF0aCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0aC5qcyIoKSB7CiAgICBCYXRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNCA4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDUgNy42MjEgMy42MjFBMi4xMjEgMi4xMjEgMCAwIDAgNCA1djEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktY2hhcmdpbmcuanMKdmFyIEJhdHRlcnlDaGFyZ2luZzsKdmFyIGluaXRfYmF0dGVyeV9jaGFyZ2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1jaGFyZ2luZy5qcyIoKSB7CiAgICBCYXR0ZXJ5Q2hhcmdpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSA3LTMgNWg0bC0zIDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODU2IDZIMTZhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuOTM1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMTQgMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyLjkzNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktZnVsbC5qcwp2YXIgQmF0dGVyeUZ1bGw7CnZhciBpbml0X2JhdHRlcnlfZnVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1mdWxsLmpzIigpIHsKICAgIEJhdHRlcnlGdWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTB2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktbG93LmpzCnZhciBCYXR0ZXJ5TG93Owp2YXIgaW5pdF9iYXR0ZXJ5X2xvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1sb3cuanMiKCkgewogICAgQmF0dGVyeUxvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2LTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXBsdXMuanMKdmFyIEJhdHRlcnlQbHVzOwp2YXIgaW5pdF9iYXR0ZXJ5X3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktcGx1cy5qcyIoKSB7CiAgICBCYXR0ZXJ5UGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41NDMgNkgxNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMy42MDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTR2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNjA2IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMy42MDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LW1lZGl1bS5qcwp2YXIgQmF0dGVyeU1lZGl1bTsKdmFyIGluaXRfYmF0dGVyeV9tZWRpdW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktbWVkaXVtLmpzIigpIHsKICAgIEJhdHRlcnlNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0di00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS13YXJuaW5nLmpzCnZhciBCYXR0ZXJ5V2FybmluZzsKdmFyIGluaXRfYmF0dGVyeV93YXJuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXdhcm5pbmcuanMiKCkgewogICAgQmF0dGVyeVdhcm5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoMmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanMKdmFyIEJhdHRlcnk7CnZhciBpbml0X2JhdHRlcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanMiKCkgewogICAgQmF0dGVyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMiAxNCBMIDIyIDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVha2VyLmpzCnZhciBCZWFrZXI7CnZhciBpbml0X2JlYWtlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVha2VyLmpzIigpIHsKICAgIEJlYWtlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAzaDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM3YxNmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFuLW9mZi5qcwp2YXIgQmVhbk9mZjsKdmFyIGluaXRfYmVhbl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlYW4tb2ZmLmpzIigpIHsKICAgIEJlYW5PZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDljLS42NC42NC0xLjUyMS45NTQtMi40MDIgMS4xNjVBNiA2IDAgMCAwIDggMjJhMTMuOTYgMTMuOTYgMCAwIDAgOS45LTQuMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC43NSA1LjA5M0E2IDYgMCAwIDEgMjIgOGMwIDIuNDExLS42MSA0LjY4LTEuNjgzIDYuNjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS4zNDEgMTAuNjJhNCA0IDAgMCAwIDYuNDg3IDEuMjA4TTEwLjYyIDUuMzQxYTQuMDE1IDQuMDE1IDAgMCAxIDIuMDM5IDIuMDQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVhbi5qcwp2YXIgQmVhbjsKdmFyIGluaXRfYmVhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVhbi5qcyIoKSB7CiAgICBCZWFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMTY1IDYuNTk4QzkuOTU0IDcuNDc4IDkuNjQgOC4zNiA5IDljLS42NC42NC0xLjUyMS45NTQtMi40MDIgMS4xNjVBNiA2IDAgMCAwIDggMjJjNy43MzIgMCAxNC02LjI2OCAxNC0xNGE2IDYgMCAwIDAtMTEuODM1LTEuNDAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjM0MSAxMC42MmE0IDQgMCAxIDAgNS4yNzktNS4yOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC1kb3VibGUuanMKdmFyIEJlZERvdWJsZTsKdmFyIGluaXRfYmVkX2RvdWJsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLWRvdWJsZS5qcyIoKSB7CiAgICBCZWREb3VibGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwdi04YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBWNmEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC1zaW5nbGUuanMKdmFyIEJlZFNpbmdsZTsKdmFyIGluaXRfYmVkX3NpbmdsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLXNpbmdsZS5qcyIoKSB7CiAgICBCZWRTaW5nbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwdi04YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTBWNmEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE4aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLmpzCnZhciBCZWQ7CnZhciBpbml0X2JlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLmpzIigpIHsKICAgIEJlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMThhMiAyIDAgMCAxIDIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOHY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlZi5qcwp2YXIgQmVlZjsKdmFyIGluaXRfYmVlZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlZi5qcyIoKSB7CiAgICBCZWVmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNCAxMy43QTYuNSA2LjUgMCAxIDAgNi4yOCA2LjZjLTEuMSAzLjEzLS43OCAzLjktMy4xOCA2LjA4QTMgMyAwIDAgMCA1IDE4YzQgMCA4LjQtMS44IDExLjQtNC4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4LjUgNiAyLjE5IDQuNWE2LjQ4IDYuNDggMCAwIDEtMi4yOSA3LjJDMTUuNCAyMC4yIDExIDIyIDcgMjJhMyAzIDAgMCAxLTIuNjgtMS42NkwyLjQgMTYuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyLjUiLCBjeTogIjguNSIsIHI6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVyLW9mZi5qcwp2YXIgQmVlck9mZjsKdmFyIGluaXRfYmVlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZXItb2ZmLmpzIigpIHsKICAgIEJlZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3Y1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDExLjQ3VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTFoMWEzIDMgMCAwIDEgMi43NDUgNC4yMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOHYxMmEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUzNiA3LjUzNUM2Ljc2NiA3LjY0OSA2LjE1NCA4IDUuNSA4YTIuNSAyLjUgMCAwIDEtMS43NjgtNC4yNjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MjcgMy4yMDRDOS4zMDYgMi43NjcgOS44ODUgMiAxMSAyYzEuNTYgMCAyIDEuNSAzIDEuNXMxLjcyLS41IDIuNS0uNWExIDEgMCAxIDEgMCA1Yy0uNzggMC0xLjUtLjUtMi41LS41YTMuMTQ5IDMuMTQ5IDAgMCAwLS44NDIuMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNC42VjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlci5qcwp2YXIgQmVlcjsKdmFyIGluaXRfYmVlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVlci5qcyIoKSB7CiAgICBCZWVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTFoMWEzIDMgMCAwIDEgMCA2aC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMnY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDcuNWMtMSAwLTEuNDQuNS0zIC41cy0yLS41LTMtLjUtMS43Mi41LTIuNS41YTIuNSAyLjUgMCAwIDEgMC01Yy43OCAwIDEuNTcuNSAyLjUuNVM5LjQ0IDIgMTEgMnMyIDEuNSAzIDEuNSAxLjcyLS41IDIuNS0uNWEyLjUgMi41IDAgMCAxIDAgNWMtLjc4IDAtMS41LS41LTIuNS0uNVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4djEyYTIgMiAwIDAgMCAyIDJoOGEyIDIgMCAwIDAgMi0yVjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWRvdC5qcwp2YXIgQmVsbERvdDsKdmFyIGluaXRfYmVsbF9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZG90LmpzIigpIHsKICAgIEJlbGxEb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTE2IDIuMzE0QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjc0IDcuMzI3QTEgMSAwIDAgMCA0IDE3aDE2YTEgMSAwIDAgMCAuNzQtMS42NzMgOSA5IDAgMCAxLS41ODUtLjY2NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICI4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWVsZWN0cmljLmpzCnZhciBCZWxsRWxlY3RyaWM7CnZhciBpbml0X2JlbGxfZWxlY3RyaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZWxlY3RyaWMuanMiKCkgewogICAgQmVsbEVsZWN0cmljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNTE4IDE3LjM0N0E3IDcgMCAwIDEgMTQgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA0QTExIDExIDAgMCAxIDIwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxNiIsIHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1taW51cy5qcwp2YXIgQmVsbE1pbnVzOwp2YXIgaW5pdF9iZWxsX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW1pbnVzLmpzIigpIHsKICAgIEJlbGxNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4aDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuMjQzIDMuNzU3QTYgNiAwIDAgMCA2IDhjMCA0LjQ5OS0xLjQxMSA1Ljk1Ni0yLjczOCA3LjMyNkExIDEgMCAwIDAgNCAxN2gxNmExIDEgMCAwIDAgLjc0LTEuNjczQTkuNCA5LjQgMCAwIDEgMTguNjY3IDEyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1vZmYuanMKdmFyIEJlbGxPZmY7CnZhciBpbml0X2JlbGxfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW9mZi5qcyIoKSB7CiAgICBCZWxsT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3SDRhMSAxIDAgMCAxLS43NC0xLjY3M0M0LjU5IDEzLjk1NiA2IDEyLjQ5OSA2IDhhNiA2IDAgMCAxIC4yNTgtMS43NDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjY4IDMuMDFBNiA2IDAgMCAxIDE4IDhjMCAyLjY4Ny43NyA0LjY1MyAxLjcwNyA2LjA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1wbHVzLmpzCnZhciBCZWxsUGx1czsKdmFyIGluaXRfYmVsbF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXBsdXMuanMiKCkgewogICAgQmVsbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4yNjggMjFhMiAyIDAgMCAwIDMuNDY0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4wMDIgMTQuNDY0YTkgOSAwIDAgMCAuNzM4Ljg2M0ExIDEgMCAwIDEgMjAgMTdINGExIDEgMCAwIDEtLjc0LTEuNjczQzQuNTkgMTMuOTU2IDYgMTIuNDk5IDYgOGE2IDYgMCAwIDEgOC43NS01LjMzMiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtcmluZy5qcwp2YXIgQmVsbFJpbmc7CnZhciBpbml0X2JlbGxfcmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1yaW5nLmpzIigpIHsKICAgIEJlbGxSaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjY4IDIxYTIgMiAwIDAgMCAzLjQ2NCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjMtLjgtNC4zLTItNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMkMyLjggMy43IDIgNS43IDIgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwuanMKdmFyIEJlbGw7CnZhciBpbml0X2JlbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwuanMiKCkgewogICAgQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjI2OCAyMWEyIDIgMCAwIDAgMy40NjQgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zLjI2MiAxNS4zMjZBMSAxIDAgMCAwIDQgMTdoMTZhMSAxIDAgMCAwIC43NC0xLjY3M0MxOS40MSAxMy45NTYgMTggMTIuNDk5IDE4IDhBNiA2IDAgMCAwIDYgOGMwIDQuNDk5LTEuNDExIDUuOTU2LTIuNzM4IDcuMzI2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLWVuZC5qcwp2YXIgQmV0d2Vlbkhvcml6b250YWxFbmQ7CnZhciBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4taG9yaXpvbnRhbC1lbmQuanMiKCkgewogICAgQmV0d2Vlbkhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTMiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZXR3ZWVuLWhvcml6b250YWwtc3RhcnQuanMKdmFyIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ7CnZhciBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLXN0YXJ0LmpzIigpIHsKICAgIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMyIsIGhlaWdodDogIjciLCB4OiAiOCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgOSAzIDMtMyAzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEzIiwgaGVpZ2h0OiAiNyIsIHg6ICI4IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1lbmQuanMKdmFyIEJldHdlZW5WZXJ0aWNhbEVuZDsKdmFyIGluaXRfYmV0d2Vlbl92ZXJ0aWNhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtZW5kLmpzIigpIHsKICAgIEJldHdlZW5WZXJ0aWNhbEVuZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTMgMyAzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMyIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1zdGFydC5qcwp2YXIgQmV0d2VlblZlcnRpY2FsU3RhcnQ7CnZhciBpbml0X2JldHdlZW5fdmVydGljYWxfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtc3RhcnQuanMiKCkgewogICAgQmV0d2VlblZlcnRpY2FsU3RhcnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzLTMtMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTMiLCB4OiAiMTQiLCB5OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpY2Vwcy1mbGV4ZWQuanMKdmFyIEJpY2Vwc0ZsZXhlZDsKdmFyIGluaXRfYmljZXBzX2ZsZXhlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmljZXBzLWZsZXhlZC5qcyIoKSB7CiAgICBCaWNlcHNGbGV4ZWQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi40MDkgMTMuMDE3QTUgNSAwIDAgMSAyMiAxNWMwIDMuODY2LTQgNy05IDctNC4wNzcgMC04LjE1My0uODItMTAuMzcxLTIuNDYyLS40MjYtLjMxNi0uNjMxLS44MzItLjYyLTEuMzYyQzIuMTE4IDEyLjcyMyAyLjYyNyAyIDEwIDJhMyAzIDAgMCAxIDMgMyAyIDIgMCAwIDEtMiAyYy0xLjEwNSAwLTEuNjQtLjQ0NC0yLTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRhNSA1IDAgMCAwLTcuNTg0IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS45NjQgNi44MjVDOC4wMTkgNy45NzcgOS41IDEzIDggMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzCnZhciBCaWtlOwp2YXIgaW5pdF9iaWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzIigpIHsKICAgIEJpa2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4LjUiLCBjeTogIjE3LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNS41IiwgY3k6ICIxNy41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNVYxNGwtMy0zIDQtMyAyIDNoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpbmFyeS5qcwp2YXIgQmluYXJ5Owp2YXIgaW5pdF9iaW5hcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpbmFyeS5qcyIoKSB7CiAgICBCaW5hcnkgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE0Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiNCIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGgydjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaW9oYXphcmQuanMKdmFyIEJpb2hhemFyZDsKdmFyIGluaXRfYmlvaGF6YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaW9oYXphcmQuanMiKCkgewogICAgQmlvaGF6YXJkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEuOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNyAzLjRjLS45IDIuNSAwIDUuMiAyLjIgNi43QzYuNSA5IDMuNyA5LjYgMiAxMS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguOSAxMC4xIDEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjMgMy40Yy45IDIuNSAwIDUuMi0yLjIgNi43IDIuNC0xLjIgNS4yLS42IDYuOSAxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMSAxMC4xLTEuNC44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcgMjAuOGMtMi42LS40LTQuNi0yLjYtNC43LTUuMy0uMiAyLjYtMi4xIDQuOC00LjcgNS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzLjl2MS42IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgNS40Yy0xLS4yLTItLjItMyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjRjLjctLjcgMS4yLTEuNiAxLjUtMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNSAxMy45Yy4zLjkuOCAxLjggMS41IDIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpbm9jdWxhcnMuanMKdmFyIEJpbm9jdWxhcnM7CnZhciBpbml0X2Jpbm9jdWxhcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jpbm9jdWxhcnMuanMiKCkgewogICAgQmlub2N1bGFycyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTIgMiAwIDAgMCAyLTJ2LTMuODUxYzAtMS4zOS0yLTIuOTYyLTItNC44MjlWOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2MTFhMiAyIDAgMCAwIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDIyIDE2IEwgMiAxNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIxYTIgMiAwIDAgMS0yLTJ2LTMuODUxYzAtMS4zOSAyLTIuOTYyIDItNC44MjlWOGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDEgMXYxMWEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNGExIDEgMCAwIDAtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlyZGhvdXNlLmpzCnZhciBCaXJkaG91c2U7CnZhciBpbml0X2JpcmRob3VzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlyZGhvdXNlLmpzIigpIHsKICAgIEJpcmRob3VzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTggMS45NTYtMTEuNDY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA3LjgyLTUuNjE1YTIgMiAwIDAgMSAyLjM2IDBMMjEgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4aDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTggNS4wNDQgNi41MzIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanMKdmFyIEJpcmQ7CnZhciBpbml0X2JpcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanMiKCkgewogICAgQmlyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNCAxOEgxMmE4IDggMCAwIDAgOC04VjdhNCA0IDAgMCAwLTcuMjgtMi4zTDIgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgNyAyIC41LTIgLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNy43NVYyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4YTYgNiAwIDAgMCAzLjg0LTEwLjYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYml0Y29pbi5qcwp2YXIgQml0Y29pbjsKdmFyIGluaXRfYml0Y29pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYml0Y29pbi5qcyIoKSB7CiAgICBCaXRjb2luID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNzY3IDE5LjA4OWM0LjkyNC44NjggNi4xNC02LjAyNSAxLjIxNi02Ljg5NG0tMS4yMTYgNi44OTRMNS44NiAxOC4wNDdtNS45MDggMS4wNDItLjM0NyAxLjk3bTEuNTYzLTguODY0YzQuOTI0Ljg2OSA2LjE0LTYuMDI1IDEuMjE1LTYuODkzbS0xLjIxNSA2Ljg5My0zLjk0LS42OTRtNS4xNTUtNi4yTDguMjkgNC4yNm01LjkwOCAxLjA0Mi4zNDgtMS45N003LjQ4IDIwLjM2NGwzLjEyNi0xNy43MjciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGVuZC5qcwp2YXIgQmxlbmQ7CnZhciBpbml0X2JsZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGVuZC5qcyIoKSB7CiAgICBCbGVuZCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICI3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE1IiwgcjogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanMKdmFyIEJsaW5kczsKdmFyIGluaXRfYmxpbmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanMiKCkgewogICAgQmxpbmRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAzdjE0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jsb2Nrcy5qcwp2YXIgQmxvY2tzOwp2YXIgaW5pdF9ibG9ja3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jsb2Nrcy5qcyIoKSB7CiAgICBCbG9ja3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMlY3YTEgMSAwIDAgMC0xLTFINGEyIDIgMCAwIDAtMiAydjEyYTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNWExIDEgMCAwIDAtMS0xSDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC1jb25uZWN0ZWQuanMKdmFyIEJsdWV0b290aENvbm5lY3RlZDsKdmFyIGluaXRfYmx1ZXRvb3RoX2Nvbm5lY3RlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLWNvbm5lY3RlZC5qcyIoKSB7CiAgICBCbHVldG9vdGhDb25uZWN0ZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDcgMTAgMTAtNSA1VjJsNSA1TDcgMTciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTgiLCB4MjogIjIxIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLW9mZi5qcwp2YXIgQmx1ZXRvb3RoT2ZmOwp2YXIgaW5pdF9ibHVldG9vdGhfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtb2ZmLmpzIigpIHsKICAgIEJsdWV0b290aE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE3LTUgNVYxMmwtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDkuNSAxNyA3bC01LTV2NC41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLXNlYXJjaGluZy5qcwp2YXIgQmx1ZXRvb3RoU2VhcmNoaW5nOwp2YXIgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtc2VhcmNoaW5nLmpzIigpIHsKICAgIEJsdWV0b290aFNlYXJjaGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MyAxNC44M2E0IDQgMCAwIDAgMC01LjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC5qcwp2YXIgQmx1ZXRvb3RoOwp2YXIgaW5pdF9ibHVldG9vdGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC5qcyIoKSB7CiAgICBCbHVldG9vdGggPSBbWyJwYXRoIiwgeyBkOiAibTcgNyAxMCAxMC01IDVWMmw1IDVMNyAxNyIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzCnZhciBCb2xkOwp2YXIgaW5pdF9ib2xkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzIigpIHsKICAgIEJvbGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDlhNCA0IDAgMCAxIDAgOEg3YTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xaDdhNCA0IDAgMCAxIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbHQuanMKdmFyIEJvbHQ7CnZhciBpbml0X2JvbHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbHQuanMiKCkgewogICAgQm9sdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9tYi5qcwp2YXIgQm9tYjsKdmFyIGluaXRfYm9tYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9tYi5qcyIoKSB7CiAgICBCb21iID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTMiLCByOiAiOSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE0LjM1IDQuNjUgMTYuMyAyLjdhMi40MSAyLjQxIDAgMCAxIDMuNCAwbDEuNiAxLjZhMi40IDIuNCAwIDAgMSAwIDMuNGwtMS45NSAxLjk1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyLTEuNSAxLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzCnZhciBCb25lOwp2YXIgaW5pdF9ib25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzIigpIHsKICAgIEJvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMGMuNy0uNyAxLjY5IDAgMi41IDBhMi41IDIuNSAwIDEgMCAwLTUgLjUuNSAwIDAgMS0uNS0uNSAyLjUgMi41IDAgMSAwLTUgMGMwIC44MS43IDEuOCAwIDIuNWwtNyA3Yy0uNy43LTEuNjkgMC0yLjUgMGEyLjUgMi41IDAgMCAwIDAgNWMuMjggMCAuNS4yMi41LjVhMi41IDIuNSAwIDEgMCA1IDBjMC0uODEtLjctMS44IDAtMi41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYS5qcwp2YXIgQm9va0E7CnZhciBpbml0X2Jvb2tfYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hLmpzIigpIHsKICAgIEJvb2tBID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEzIDQtNyA0IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4xIDExaDUuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYWxlcnQuanMKdmFyIEJvb2tBbGVydDsKdmFyIGluaXRfYm9va19hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hbGVydC5qcyIoKSB7CiAgICBCb29rQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWF1ZGlvLmpzCnZhciBCb29rQXVkaW87CnZhciBpbml0X2Jvb2tfYXVkaW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYXVkaW8uanMiKCkgewogICAgQm9va0F1ZGlvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jaGVjay5qcwp2YXIgQm9va0NoZWNrOwp2YXIgaW5pdF9ib29rX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWNoZWNrLmpzIigpIHsKICAgIEJvb2tDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5LjUgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stY29weS5qcwp2YXIgQm9va0NvcHk7CnZhciBpbml0X2Jvb2tfY29weSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jb3B5LmpzIigpIHsKICAgIEJvb2tDb3B5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA3YTIgMiAwIDAgMC0yIDJ2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS44MDMgMThINWEyIDIgMCAwIDAgMCA0aDkuNWEuNS41IDAgMCAwIC41LS41VjIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNOSAxNVY0YTIgMiAwIDAgMSAyLTJoOS41YS41LjUgMCAwIDEgLjUuNXYxNGEuNS41IDAgMCAxLS41LjVIMTFhMiAyIDAgMCAxIDAtNGgxMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWRhc2hlZC5qcwp2YXIgQm9va0Rhc2hlZDsKdmFyIGluaXRfYm9va19kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stZGFzaGVkLmpzIigpIHsKICAgIEJvb2tEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2gxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJoMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjUgMjJIMTlhMSAxIDAgMCAwIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDJIMTlhMSAxIDAgMCAxIDEgMXYxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTR2M2gtMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDguNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEwVjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjVWMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0LjVBMi41IDIuNSAwIDAgMSA2LjUgMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJINi41YTEgMSAwIDAgMSAwLTVIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stZG93bi5qcwp2YXIgQm9va0Rvd247CnZhciBpbml0X2Jvb2tfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1kb3duLmpzIigpIHsKICAgIEJvb2tEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTNWNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMyAzIDMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2staGVhZHBob25lcy5qcwp2YXIgQm9va0hlYWRwaG9uZXM7CnZhciBpbml0X2Jvb2tfaGVhZHBob25lcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFkcGhvbmVzLmpzIigpIHsKICAgIEJvb2tIZWFkcGhvbmVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydi0yYTQgNCAwIDAgMSA4IDB2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2staGVhcnQuanMKdmFyIEJvb2tIZWFydDsKdmFyIGluaXRfYm9va19oZWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1oZWFydC5qcyIoKSB7CiAgICBCb29rSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNjIgOS44QTIuMjUgMi4yNSAwIDEgMSAxMiA2LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWtleS5qcwp2YXIgQm9va0tleTsKdmFyIGluaXRfYm9va19rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2sta2V5LmpzIigpIHsKICAgIEJvb2tLZXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAzIDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAyLTQuNSA0LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNy44OThWMjFhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJoNy44NDQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1pbWFnZS5qcwp2YXIgQm9va0ltYWdlOwp2YXIgaW5pdF9ib29rX2ltYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWltYWdlLmpzIigpIHsKICAgIEJvb2tJbWFnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEzLjctMi4xLTIuMWEyIDIgMCAwIDAtMi44IDBMOS43IDE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1sb2NrLmpzCnZhciBCb29rTG9jazsKdmFyIGluaXRfYm9va19sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWxvY2suanMiKCkgewogICAgQm9va0xvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjRhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE1djZhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMiIsIHk6ICI2Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbWFya2VkLmpzCnZhciBCb29rTWFya2VkOwp2YXIgaW5pdF9ib29rX21hcmtlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1tYXJrZWQuanMiKCkgewogICAgQm9va01hcmtlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2OGwzLTMgMyAzVjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk00IDE5LjV2LTE1QTIuNSAyLjUgMCAwIDEgNi41IDJIMTlhMSAxIDAgMCAxIDEgMXYxOGExIDEgMCAwIDEtMSAxSDYuNWExIDEgMCAwIDEgMC01SDIwIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stbWludXMuanMKdmFyIEJvb2tNaW51czsKdmFyIGluaXRfYm9va19taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1taW51cy5qcyIoKSB7CiAgICBCb29rTWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stb3Blbi1jaGVjay5qcwp2YXIgQm9va09wZW5DaGVjazsKdmFyIGluaXRfYm9va19vcGVuX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4tY2hlY2suanMiKCkgewogICAgQm9va09wZW5DaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTIgMiAyIDQtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA2VjRhMSAxIDAgMCAwLTEtMWgtNWE0IDQgMCAwIDAtNCA0IDQgNCAwIDAgMC00LTRIM2ExIDEgMCAwIDAtMSAxdjEzYTEgMSAwIDAgMCAxIDFoNmEzIDMgMCAwIDEgMyAzIDMgMyAwIDAgMSAzLTNoNmExIDEgMCAwIDAgMS0xdi0xLjMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4tdGV4dC5qcwp2YXIgQm9va09wZW5UZXh0Owp2YXIgaW5pdF9ib29rX29wZW5fdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLXRleHQuanMiKCkgewogICAgQm9va09wZW5UZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDE4YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xaDVhNCA0IDAgMCAxIDQgNCA0IDQgMCAwIDEgNC00aDVhMSAxIDAgMCAxIDEgMXYxM2ExIDEgMCAwIDEtMSAxaC02YTMgMyAwIDAgMC0zIDMgMyAzIDAgMCAwLTMtM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLmpzCnZhciBCb29rT3BlbjsKdmFyIGluaXRfYm9va19vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4uanMiKCkgewogICAgQm9va09wZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMThhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoNWE0IDQgMCAwIDEgNCA0IDQgNCAwIDAgMSA0LTRoNWExIDEgMCAwIDEgMSAxdjEzYTEgMSAwIDAgMS0xIDFoLTZhMyAzIDAgMCAwLTMgMyAzIDMgMCAwIDAtMy0zeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stcGx1cy5qcwp2YXIgQm9va1BsdXM7CnZhciBpbml0X2Jvb2tfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1wbHVzLmpzIigpIHsKICAgIEJvb2tQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1zZWFyY2guanMKdmFyIEJvb2tTZWFyY2g7CnZhciBpbml0X2Jvb2tfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXNlYXJjaC5qcyIoKSB7CiAgICBCb29rU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjJINS41YTEgMSAwIDAgMSAwLTVoNC41MDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjItMS44NzktMS44NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOS41di0xNUEyLjUgMi41IDAgMCAxIDUuNSAySDE4YTEgMSAwIDAgMSAxIDF2OCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay10ZXh0LmpzCnZhciBCb29rVGV4dDsKdmFyIGluaXRfYm9va190ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXRleHQuanMiKCkgewogICAgQm9va1RleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXAuanMKdmFyIEJvb2tVcDsKdmFyIGluaXRfYm9va191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11cC5qcyIoKSB7CiAgICBCb29rVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay10eXBlLmpzCnZhciBCb29rVHlwZTsKdmFyIGluaXRfYm9va190eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXR5cGUuanMiKCkgewogICAgQm9va1R5cGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjZIOHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVwLTIuanMKdmFyIEJvb2tVcDI7CnZhciBpbml0X2Jvb2tfdXBfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11cC0yLmpzIigpIHsKICAgIEJvb2tVcDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoMWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDUgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXNlci5qcwp2YXIgQm9va1VzZXI7CnZhciBpbml0X2Jvb2tfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay11c2VyLmpzIigpIHsKICAgIEJvb2tVc2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTNhMyAzIDAgMSAwLTYgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjgiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2steC5qcwp2YXIgQm9va1g7CnZhciBpbml0X2Jvb2tfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay14LmpzIigpIHsKICAgIEJvb2tYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA3LTUgNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTkuNXYtMTVBMi41IDIuNSAwIDAgMSA2LjUgMkgxOWExIDEgMCAwIDEgMSAxdjE4YTEgMSAwIDAgMS0xIDFINi41YTEgMSAwIDAgMSAwLTVIMjAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA3IDUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2suanMKdmFyIEJvb2s7CnZhciBpbml0X2Jvb2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2suanMiKCkgewogICAgQm9vayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNCAxOS41di0xNUEyLjUgMi41IDAgMCAxIDYuNSAySDE5YTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMUg2LjVhMSAxIDAgMCAxIDAtNUgyMCIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1jaGVjay5qcwp2YXIgQm9va21hcmtDaGVjazsKdmFyIGluaXRfYm9va21hcmtfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLWNoZWNrLmpzIigpIHsKICAgIEJvb2ttYXJrQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1taW51cy5qcwp2YXIgQm9va21hcmtNaW51czsKdmFyIGluaXRfYm9va21hcmtfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLW1pbnVzLmpzIigpIHsKICAgIEJvb2ttYXJrTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjE2eiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiOSIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmstcGx1cy5qcwp2YXIgQm9va21hcmtQbHVzOwp2YXIgaW5pdF9ib29rbWFya19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1wbHVzLmpzIigpIHsKICAgIEJvb2ttYXJrUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDIxLTctNC03IDRWNWEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTZ6IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiNyIsIHkyOiAiMTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjkiLCB5MTogIjEwIiwgeTI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLXguanMKdmFyIEJvb2ttYXJrWDsKdmFyIGluaXRfYm9va21hcmtfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmsteC5qcyIoKSB7CiAgICBCb29rbWFya1ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAyMS03LTQtNyA0VjVhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAyWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDcuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay5qcwp2YXIgQm9va21hcms7CnZhciBpbml0X2Jvb2ttYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay5qcyIoKSB7CiAgICBCb29rbWFyayA9IFtbInBhdGgiLCB7IGQ6ICJtMTkgMjEtNy00LTcgNFY1YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxNnoiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vbS1ib3guanMKdmFyIEJvb21Cb3g7CnZhciBpbml0X2Jvb21fYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29tLWJveC5qcyIoKSB7CiAgICBCb29tQm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5VjVhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDh2MSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiOSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE1IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1tZXNzYWdlLXNxdWFyZS5qcwp2YXIgQm90TWVzc2FnZVNxdWFyZTsKdmFyIGluaXRfYm90X21lc3NhZ2Vfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3QtbWVzc2FnZS1zcXVhcmUuanMiKCkgewogICAgQm90TWVzc2FnZVNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZWMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTZhMiAyIDAgMCAxLTIgMkg4LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgNCAyMC4yODZWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTF2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1vZmYuanMKdmFyIEJvdE9mZjsKdmFyIGluaXRfYm90X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LW9mZi5qcyIoKSB7CiAgICBCb3RPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy42NyA4SDE4YTIgMiAwIDAgMSAyIDJ2NC4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMiAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4SDZhMiAyIDAgMCAwLTIgMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDEuNDE0LS41ODYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNjcgNEgxMnYyLjMzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LmpzCnZhciBCb3Q7CnZhciBpbml0X2JvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90LmpzIigpIHsKICAgIEJvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhWNEg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTIiLCB4OiAiNCIsIHk6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM3YyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm90dGxlLXdpbmUuanMKdmFyIEJvdHRsZVdpbmU7CnZhciBpbml0X2JvdHRsZV93aW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3R0bGUtd2luZS5qcyIoKSB7CiAgICBCb3R0bGVXaW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAgM2ExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXYyYTYgNiAwIDAgMCAxLjIgMy42bC42LjhBNiA2IDAgMCAxIDE3IDEzdjhhMSAxIDAgMCAxLTEgMUg4YTEgMSAwIDAgMS0xLTF2LThhNiA2IDAgMCAxIDEuMi0zLjZsLjYtLjhBNiA2IDAgMCAwIDEwIDV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzaC00YTEgMSAwIDAgMC0xIDF2M2ExIDEgMCAwIDAgMSAxaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3ctYXJyb3cuanMKdmFyIEJvd0Fycm93Owp2YXIgaW5pdF9ib3dfYXJyb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvdy1hcnJvdy5qcyIoKSB7CiAgICBCb3dBcnJvdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjU3NSAxMS4wODJhMTMgMTMgMCAwIDEgMS4wNDggOS4wMjcgMS4xNyAxLjE3IDAgMCAxLTEuOTE0LjU5N0wxNCAxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwIDMuMjkgNi4yOWExLjE3IDEuMTcgMCAwIDEgLjYtMS45MSAxMyAxMyAwIDAgMSA5LjAzIDEuMDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxNGExLjcgMS43IDAgMCAwLTEuMjA3LjVsLTIuNjQ2IDIuNjQ2QS41LjUgMCAwIDAgMy41IDE4SDVhMSAxIDAgMCAxIDEgMXYxLjVhLjUuNSAwIDAgMCAuODU0LjM1NEw5LjUgMTguMjA3QTEuNyAxLjcgMCAwIDAgMTAgMTd2LTJhMSAxIDAgMCAwLTEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MDcgMTQuMjkzIDIxIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3guanMKdmFyIEJveDsKdmFyIGluaXRfYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3guanMiKCkgewogICAgQm94ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuMyA3IDguNyA1IDguNy01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIyVjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm94ZXMuanMKdmFyIEJveGVzOwp2YXIgaW5pdF9ib3hlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYm94ZXMuanMiKCkgewogICAgQm94ZXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk3IDEyLjkyQTIgMiAwIDAgMCAyIDE0LjYzdjMuMjRhMiAyIDAgMCAwIC45NyAxLjcxbDMgMS44YTIgMiAwIDAgMCAyLjA2IDBMMTIgMTl2LTUuNWwtNS0zLTQuMDMgMi40MloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNi41LTQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE2LjUgNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTYuNXY1LjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDEzLjVWMTlsMy45NyAyLjM4YTIgMiAwIDAgMCAyLjA2IDBsMy0xLjhhMiAyIDAgMCAwIC45Ny0xLjcxdi0zLjI0YTIgMiAwIDAgMC0uOTctMS43MUwxNyAxMC41bC01IDNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUtNS0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE2LjUgNC43NC0yLjg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2LjV2NS4xNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03Ljk3IDQuNDJBMiAyIDAgMCAwIDcgNi4xM3Y0LjM3bDUgMyA1LTNWNi4xM2EyIDIgMCAwIDAtLjk3LTEuNzFsLTMtMS44YTIgMiAwIDAgMC0yLjA2IDBsLTMgMS44WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4IDcuMjYgNS4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDQuNzQtMi44NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMy41VjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFjZXMuanMKdmFyIEJyYWNlczsKdmFyIGluaXRfYnJhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFjZXMuanMiKCkgewogICAgQnJhY2VzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDdhMiAyIDAgMCAwLTIgMnY1YTIgMiAwIDAgMS0yIDIgMiAyIDAgMCAxIDIgMnY1YzAgMS4xLjkgMiAyIDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMWgxYTIgMiAwIDAgMCAyLTJ2LTVjMC0xLjEuOS0yIDItMmEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAwLTItMmgtMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNrZXRzLmpzCnZhciBCcmFja2V0czsKdmFyIGluaXRfYnJhY2tldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWNrZXRzLmpzIigpIHsKICAgIEJyYWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2gzYTEgMSAwIDAgMSAxIDF2MTZhMSAxIDAgMCAxLTEgMWgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxSDVhMSAxIDAgMCAxLTEtMVY0YTEgMSAwIDAgMSAxLTFoMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLWNpcmN1aXQuanMKdmFyIEJyYWluQ2lyY3VpdDsKdmFyIGluaXRfYnJhaW5fY2lyY3VpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4tY2lyY3VpdC5qcyIoKSB7CiAgICBCcmFpbkNpcmN1aXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTEyIDVhMyAzIDAgMSAwLTUuOTk3LjEyNSA0IDQgMCAwIDAtMi41MjYgNS43NyA0IDQgMCAwIDAgLjU1NiA2LjU4OEE0IDQgMCAxIDAgMTIgMThaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzYTQuNSA0LjUgMCAwIDAgMy00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMDAzIDUuMTI1QTMgMyAwIDAgMCA2LjQwMSA2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy40NzcgMTAuODk2YTQgNCAwIDAgMSAuNTg1LS4zOTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGE0IDQgMCAwIDEtMS45NjctLjUxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4aDZhMiAyIDAgMCAxIDIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4VjVhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMyIsIHI6ICIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIzIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjIxIiwgcjogIi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjgiLCByOiAiLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi1jb2cuanMKdmFyIEJyYWluQ29nOwp2YXIgaW5pdF9icmFpbl9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyYWluLWNvZy5qcyIoKSB7CiAgICBCcmFpbkNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxNC43NzItLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDkuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggMTQuNzcyLjM4Mi45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMxIDguMzA1LS4zODMuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0Ljc3MiAxMC44NTIuOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEzLjE0OC45MjMuMzgzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjU5OCA2LjVBMyAzIDAgMSAwIDEyIDVhMyAzIDAgMCAwLTUuNjMtMS40NDYgMyAzIDAgMCAwLS4zNjggMS41NzEgNCA0IDAgMCAwLTIuNTI1IDUuNzcxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk5OCA1LjEyNWE0IDQgMCAwIDEgMi41MjUgNS43NzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNTA1IDEwLjI5NGE0IDQgMCAwIDEtMS41IDcuNzA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNC4wMzIgMTcuNDgzQTQgNCAwIDAgMCAxMS40NjQgMjBjLjE4LS4zMTEuODkyLS4zMTEgMS4wNzIgMGE0IDQgMCAwIDAgNy40MzItMi41MTYiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxMC4yOTFBNCA0IDAgMCAwIDYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4wMDIgNS4xMjVhMyAzIDAgMCAwIC40IDEuMzc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEwLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTMuMTQ4LS45MjMuMzgzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi5qcwp2YXIgQnJhaW47CnZhciBpbml0X2JyYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi5qcyIoKSB7CiAgICBCcmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTNhNC4xNyA0LjE3IDAgMCAxLTMtNCA0LjE3IDQuMTcgMCAwIDEtMyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjU5OCA2LjVBMyAzIDAgMSAwIDEyIDVhMyAzIDAgMSAwLTUuNTk4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy45OTcgNS4xMjVhNCA0IDAgMCAxIDIuNTI2IDUuNzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMThhNCA0IDAgMCAwIDItNy40NjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOTY3IDE3LjQ4M0E0IDQgMCAxIDEgMTIgMThhNCA0IDAgMSAxLTcuOTY3LS41MTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGE0IDQgMCAwIDEtMi03LjQ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjAwMyA1LjEyNWE0IDQgMCAwIDAtMi41MjYgNS43NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwtZmlyZS5qcwp2YXIgQnJpY2tXYWxsRmlyZTsKdmFyIGluaXRfYnJpY2tfd2FsbF9maXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLWZpcmUuanMiKCkgewogICAgQnJpY2tXYWxsRmlyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2Mi4xMDciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgOWMxIDMgMi41IDMuNSAzLjUgNC41QTUgNSAwIDAgMSAyMiAxN2E1IDUgMCAwIDEtMTAgMGMwLS4zIDAtLjYuMS0uOWEyIDIgMCAxIDAgMy4zLTJDMTMgMTEuNSAxNiA5IDE3IDkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOC4yNzRWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDMuOTM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoNS4yNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDguMjI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDN2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwtc2hpZWxkLmpzCnZhciBCcmlja1dhbGxTaGllbGQ7CnZhciBpbml0X2JyaWNrX3dhbGxfc2hpZWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLXNoaWVsZC5qcyIoKSB7CiAgICBCcmlja1dhbGxTaGllbGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djEuMjU4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2NS40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5LjExOFY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNS43NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxNy41YzAgMi40OTktMS43NSAzLjc0OS0zLjgzIDQuNDc0YS41LjUgMCAwIDEtLjMzNS0uMDA1Yy0yLjA4NS0uNzItMy44MzUtMS45Ny0zLjgzNS00LjQ3VjE0YS41LjUgMCAwIDEgLjUtLjQ5OWMxIDAgMi4yNS0uNiAzLjEyLTEuMzZhLjYuNiAwIDAgMSAuNzYtLjAwMWMuODc1Ljc2NSAyLjEyIDEuMzYgMy4xMiAxLjM2YS41LjUgMCAwIDEgLjUuNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxMi4xNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM3Y2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpY2std2FsbC5qcwp2YXIgQnJpY2tXYWxsOwp2YXIgaW5pdF9icmlja193YWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLmpzIigpIHsKICAgIEJyaWNrV2FsbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDN2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtYnVzaW5lc3MuanMKdmFyIEJyaWVmY2FzZUJ1c2luZXNzOwp2YXIgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1idXNpbmVzcy5qcyIoKSB7CiAgICBCcmllZmNhc2VCdXNpbmVzcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNhMTguMTUgMTguMTUgMCAwIDEtMjAgMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1jb252ZXlvci1iZWx0LmpzCnZhciBCcmllZmNhc2VDb252ZXlvckJlbHQ7CnZhciBpbml0X2JyaWVmY2FzZV9jb252ZXlvcl9iZWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtY29udmV5b3ItYmVsdC5qcyIoKSB7CiAgICBCcmllZmNhc2VDb252ZXlvckJlbHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAyMEgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjYiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTAiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtbWVkaWNhbC5qcwp2YXIgQnJpZWZjYXNlTWVkaWNhbDsKdmFyIGluaXRfYnJpZWZjYXNlX21lZGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1tZWRpY2FsLmpzIigpIHsKICAgIEJyaWVmY2FzZU1lZGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDZWNGEyIDIgMCAwIDAtMi0yaC00YTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2djE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNnYxNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS5qcwp2YXIgQnJpZWZjYXNlOwp2YXIgaW5pdF9icmllZmNhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS5qcyIoKSB7CiAgICBCcmllZmNhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMFY0YTIgMiAwIDAgMC0yLTJoLTRhMiAyIDAgMCAwLTIgMnYxNiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaW5nLXRvLWZyb250LmpzCnZhciBCcmluZ1RvRnJvbnQ7CnZhciBpbml0X2JyaW5nX3RvX2Zyb250ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmluZy10by1mcm9udC5qcyIoKSB7CiAgICBCcmluZ1RvRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBhMiAyIDAgMCAwIDIgMmg0YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JydXNoLWNsZWFuaW5nLmpzCnZhciBCcnVzaENsZWFuaW5nOwp2YXIgaW5pdF9icnVzaF9jbGVhbmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2gtY2xlYW5pbmcuanMiKCkgewogICAgQnJ1c2hDbGVhbmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIyLTEtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOSAxNGExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJoLTNhMSAxIDAgMCAxLTEtMVY0YTIgMiAwIDAgMC00IDB2NWExIDEgMCAwIDEtMSAxSDZhMiAyIDAgMCAwLTIgMnYxYTEgMSAwIDAgMCAxIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTRINWwtMS45NzMgNi43NjdBMSAxIDAgMCAwIDQgMjJoMTZhMSAxIDAgMCAwIC45NzMtMS4yMzN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgMS00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2guanMKdmFyIEJydXNoOwp2YXIgaW5pdF9icnVzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJ1c2guanMiKCkgewogICAgQnJ1c2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDIxQTMuNSAzLjUgMCAxIDAgMyAxNy41YTIuNjIgMi42MiAwIDAgMS0uNzA4IDEuNzkyQTEgMSAwIDAgMCAzIDIxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05Ljk2OSAxNy4wMzEgMjEuMzc4IDUuNjI0YTEgMSAwIDAgMC0zLjAwMi0zLjAwMkw2Ljk2NyAxNC4wMzEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWJibGVzLmpzCnZhciBCdWJibGVzOwp2YXIgaW5pdF9idWJibGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWJibGVzLmpzIigpIHsKICAgIEJ1YmJsZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjAwMSAxNS4wODVBMS41IDEuNSAwIDAgMSA5IDE2LjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI4LjUiLCByOiAiMy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICIxNi41IiwgcjogIjUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjcuNSIsIGN5OiAiNC41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1vZmYuanMKdmFyIEJ1Z09mZjsKdmFyIGluaXRfYnVnX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVnLW9mZi5qcyIoKSB7CiAgICBCdWdPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNy4xM1Y2YTMgMyAwIDAgMC01LjE0LTIuMUw4IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTIuMzRWMTFhNCA0IDAgMCAwLTQtNGgtMS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1YTQgNCAwIDAgMS0zLjU1IDMuOTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNoLTMuMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMWE0IDQgMCAwIDEgMy44MS00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjcgNy43QTQgNCAwIDAgMCA2IDExdjNhNiA2IDAgMCAwIDExLjEzIDMuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWctcGxheS5qcwp2YXIgQnVnUGxheTsKdmFyIGluaXRfYnVnX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1wbGF5LmpzIigpIHsKICAgIEJ1Z1BsYXkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOS42NTVBNiA2IDAgMCAxIDYgMTR2LTNhNCA0IDAgMCAxIDQtNGg0YTQgNCAwIDAgMSA0IDMuOTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiAzLjg4IDE2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDcuMTNWNmEzIDMgMCAxIDEgNiAwdjEuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWcuanMKdmFyIEJ1ZzsKdmFyIGluaXRfYnVnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWcuanMiKCkgewogICAgQnVnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN2E0IDQgMCAwIDEgNCA0djNhNiA2IDAgMCAxLTEyIDB2LTNhNCA0IDAgMCAxIDQtNHoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMy44OCAxNiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxYTQgNCAwIDAgMC0zLjgxLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNWE0IDQgMCAwIDEtMy41NSAzLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjFhNCA0IDAgMCAxIDMuODEtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVhNCA0IDAgMCAwIDMuNTUgMy45NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyIDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDcuMTNWNmEzIDMgMCAxIDEgNiAwdjEuMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy0yLmpzCnZhciBCdWlsZGluZzI7CnZhciBpbml0X2J1aWxkaW5nXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1aWxkaW5nLTIuanMiKCkgewogICAgQnVpbGRpbmcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBINGEyIDIgMCAwIDAtMiAydjdhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0yVjlhMiAyIDAgMCAwLTItMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjVhMiAyIDAgMCAxIDItMmg4YTIgMiAwIDAgMSAyIDJ2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qcwp2YXIgQnVpbGRpbmc7CnZhciBpbml0X2J1aWxkaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qcyIoKSB7CiAgICBCdWlsZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJ2LTNhMSAxIDAgMCAxIDEtMWg0YTEgMSAwIDAgMSAxIDF2MyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy1mcm9udC5qcwp2YXIgQnVzRnJvbnQ7CnZhciBpbml0X2J1c19mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLWZyb250LmpzIigpIHsKICAgIEJ1c0Zyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA2IDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy0yLTEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxNiIsIHg6ICI0IiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMWgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxdi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLmpzCnZhciBCdXM7CnZhciBpbml0X2J1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvYnVzLmpzIigpIHsKICAgIEJ1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDE5LjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggMThoM3MuNS0xLjcuOC0yLjhjLjEtLjQuMi0uOC4yLTEuMiAwLS40LS4xLS44LS4yLTEuMmwtMS40LTVDMjAuMSA2LjggMTkuMSA2IDE4IDZINGEyIDIgMCAwIDAtMiAydjEwaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FibGUtY2FyLmpzCnZhciBDYWJsZUNhcjsKdmFyIGluaXRfY2FibGVfY2FyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS1jYXIuanMiKCkgewogICAgQ2FibGVDYXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMjAtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMlY2LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIxMCIsIHg6ICI0IiwgeTogIjEyIiwgcng6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTdoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS5qcwp2YXIgQ2FibGU7CnZhciBpbml0X2NhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWJsZS5qcyIoKSB7CiAgICBDYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5YTEgMSAwIDAgMS0xLTF2LTJhMiAyIDAgMCAxIDItMmgyYTIgMiAwIDAgMSAyIDJ2MmExIDEgMCAwIDEtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNFY2LjVhMSAxIDAgMCAwLTcgMHYxMWExIDEgMCAwIDEtNyAwVjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIxdi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhMiAyIDAgMCAxLTItMlY2YTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1VjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWtlLXNsaWNlLmpzCnZhciBDYWtlU2xpY2U7CnZhciBpbml0X2Nha2Vfc2xpY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nha2Utc2xpY2UuanMiKCkgewogICAgQ2FrZVNsaWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTNIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN0gzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuMiA3LjktMy4zODggMi41QTIgMiAwIDAgMCAzIDEyLjAxVjIwYTEgMSAwIDAgMCAxIDFoMTZhMSAxIDAgMCAwIDEtMXYtOC42NTRjMC0yLTIuNDQtNi4wMjYtNi40NC04LjAyNmExIDEgMCAwIDAtMS4wODIuMDU3TDEwLjQgNS42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS5qcwp2YXIgQ2FrZTsKdmFyIGluaXRfY2FrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS5qcyIoKSB7CiAgICBDYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjF2LThhMiAyIDAgMCAwLTItMkg2YTIgMiAwIDAgMC0yIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2cy41LTEgMi0xIDIuNSAyIDQgMiAyLjUtMiA0LTIgMi41IDIgNCAyIDItMSAyLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDh2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzCnZhciBDYWxjdWxhdG9yOwp2YXIgaW5pdF9jYWxjdWxhdG9yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzIigpIHsKICAgIENhbGN1bGF0b3IgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiNiIsIHkyOiAiNiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE0IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci0xLmpzCnZhciBDYWxlbmRhcjE7CnZhciBpbml0X2NhbGVuZGFyXzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLTEuanMiKCkgewogICAgQ2FsZW5kYXIxID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItYXJyb3ctZG93bi5qcwp2YXIgQ2FsZW5kYXJBcnJvd0Rvd247CnZhciBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LWRvd24uanMiKCkgewogICAgQ2FsZW5kYXJBcnJvd0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExLjM1NFY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LXVwLmpzCnZhciBDYWxlbmRhckFycm93VXA7CnZhciBpbml0X2NhbGVuZGFyX2Fycm93X3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1hcnJvdy11cC5qcyIoKSB7CiAgICBDYWxlbmRhckFycm93VXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS4zNDNWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLTIuanMKdmFyIENhbGVuZGFyQ2hlY2syOwp2YXIgaW5pdF9jYWxlbmRhcl9jaGVja18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jaGVjay0yLmpzIigpIHsKICAgIENhbGVuZGFyQ2hlY2syID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjAgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLmpzCnZhciBDYWxlbmRhckNoZWNrOwp2YXIgaW5pdF9jYWxlbmRhcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY2hlY2suanMiKCkgewogICAgQ2FsZW5kYXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTYgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNvZy5qcwp2YXIgQ2FsZW5kYXJDb2c7CnZhciBpbml0X2NhbGVuZGFyX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY29nLmpzIigpIHsKICAgIENhbGVuZGFyQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE2Ljg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDE5LjE0OC0uOTIzLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNDcgMTQuMzA1LjM4Mi45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTUuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDIxLjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE2Ljg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTkuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTAuNTkyVjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNsb2NrLmpzCnZhciBDYWxlbmRhckNsb2NrOwp2YXIgaW5pdF9jYWxlbmRhcl9jbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItY2xvY2suanMiKCkgewogICAgQ2FsZW5kYXJDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNy41VjZhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1kYXlzLmpzCnZhciBDYWxlbmRhckRheXM7CnZhciBpbml0X2NhbGVuZGFyX2RheXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWRheXMuanMiKCkgewogICAgQ2FsZW5kYXJEYXlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItZm9sZC5qcwp2YXIgQ2FsZW5kYXJGb2xkOwp2YXIgaW5pdF9jYWxlbmRhcl9mb2xkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1mb2xkLmpzIigpIHsKICAgIENhbGVuZGFyRm9sZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMjBhMiAyIDAgMCAwIDIgMmgxMGEyLjQgMi40IDAgMCAwIDEuNzA2LS43MDZsMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAyMSAxNlY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMnYtNWExIDEgMCAwIDEgMS0xaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1oZWFydC5qcwp2YXIgQ2FsZW5kYXJIZWFydDsKdmFyIGluaXRfY2FsZW5kYXJfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWhlYXJ0LmpzIigpIHsKICAgIENhbGVuZGFySGVhcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi4xMjcgMjJINWEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuMTI1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjYyIDE4LjhBMi4yNSAyLjI1IDAgMSAxIDE4IDE1LjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy0yLmpzCnZhciBDYWxlbmRhck1pbnVzMjsKdmFyIGluaXRfY2FsZW5kYXJfbWludXNfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItbWludXMtMi5qcyIoKSB7CiAgICBDYWxlbmRhck1pbnVzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2aDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy5qcwp2YXIgQ2FsZW5kYXJNaW51czsKdmFyIGluaXRfY2FsZW5kYXJfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW1pbnVzLmpzIigpIHsKICAgIENhbGVuZGFyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1vZmYuanMKdmFyIENhbGVuZGFyT2ZmOwp2YXIgaW5pdF9jYWxlbmRhcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW9mZi5qcyIoKSB7CiAgICBDYWxlbmRhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMiA0LjJBMiAyIDAgMCAwIDMgNnYxNGEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAxLjgyLTEuMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuNVY2YTIgMiAwIDAgMC0yLTJIOS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTBoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLTIuanMKdmFyIENhbGVuZGFyUGx1czI7CnZhciBpbml0X2NhbGVuZGFyX3BsdXNfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItcGx1cy0yLmpzIigpIHsKICAgIENhbGVuZGFyUGx1czIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMGgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1wbHVzLmpzCnZhciBDYWxlbmRhclBsdXM7CnZhciBpbml0X2NhbGVuZGFyX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMuanMiKCkgewogICAgQ2FsZW5kYXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMi41OThWNmEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItcmFuZ2UuanMKdmFyIENhbGVuZGFyUmFuZ2U7CnZhciBpbml0X2NhbGVuZGFyX3JhbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1yYW5nZS5qcyIoKSB7CiAgICBDYWxlbmRhclJhbmdlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMThINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zZWFyY2guanMKdmFyIENhbGVuZGFyU2VhcmNoOwp2YXIgaW5pdF9jYWxlbmRhcl9zZWFyY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXNlYXJjaC5qcyIoKSB7CiAgICBDYWxlbmRhclNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMS43NVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNy4yNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyMi0xLjg3NS0xLjg3NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1zeW5jLmpzCnZhciBDYWxlbmRhclN5bmM7CnZhciBpbml0X2NhbGVuZGFyX3N5bmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXN5bmMuanMiKCkgewogICAgQ2FsZW5kYXJTeW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTB2NGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTgtMS41MzUgMS42MDVhNSA1IDAgMCAxLTgtMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDguNVY2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXgtMi5qcwp2YXIgQ2FsZW5kYXJYMjsKdmFyIGluaXRfY2FsZW5kYXJfeF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LTIuanMiKCkgewogICAgQ2FsZW5kYXJYMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM1Y2YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LmpzCnZhciBDYWxlbmRhclg7CnZhciBpbml0X2NhbGVuZGFyX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXguanMiKCkgewogICAgQ2FsZW5kYXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzCnZhciBDYWxlbmRhcjsKdmFyIGluaXRfY2FsZW5kYXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLmpzIigpIHsKICAgIENhbGVuZGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTBoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanMKdmFyIENhbGVuZGFyczsKdmFyIGluaXRfY2FsZW5kYXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanMiKCkgewogICAgQ2FsZW5kYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjcyNiAyMS4wMUEyIDIgMCAwIDEgMTQgMjJINGEyIDIgMCAwIDEtMi0yVjEwYTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDhoMTQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjMiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEtb2ZmLmpzCnZhciBDYW1lcmFPZmY7CnZhciBpbml0X2NhbWVyYV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbWVyYS1vZmYuanMiKCkgewogICAgQ2FtZXJhT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNTY0IDE0LjU1OGEzIDMgMCAxIDEtNC4xMjItNC4xMjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIC44MTktLjE3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY5NSA0LjAyNEEyIDIgMCAwIDEgMTAuMDA0IDRoMy45OTNhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2Ny4zNDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEuanMKdmFyIENhbWVyYTsKdmFyIGluaXRfY2FtZXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEuanMiKCkgewogICAgQ2FtZXJhID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuOTk3IDRhMiAyIDAgMCAxIDEuNzYgMS4wNWwuNDg2LjlBMiAyIDAgMCAwIDE4LjAwMyA3SDIwYTIgMiAwIDAgMSAyIDJ2OWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5YTIgMiAwIDAgMSAyLTJoMS45OTdhMiAyIDAgMCAwIDEuNzU5LTEuMDQ4bC40ODktLjkwNEEyIDIgMCAwIDEgMTAuMDA0IDR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW5keS1jYW5lLmpzCnZhciBDYW5keUNhbmU7CnZhciBpbml0X2NhbmR5X2NhbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LWNhbmUuanMiKCkgewogICAgQ2FuZHlDYW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01LjcgMjFhMiAyIDAgMCAxLTMuNS0ybDguNi0xNGE2IDYgMCAwIDEgMTAuNCA2IDIgMiAwIDEgMS0zLjQ2NC0yIDIgMiAwIDEgMC0zLjQ2NC0yWiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNzUgNyAxNSAyLjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuOSA0LjggMTMgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjkgOS43IDIgNC40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOSAxNC43IDcgMTguOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LW9mZi5qcwp2YXIgQ2FuZHlPZmY7CnZhciBpbml0X2NhbmR5X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHktb2ZmLmpzIigpIHsKICAgIENhbmR5T2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTB2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjgwMiA2LjE0NWE1IDUgMCAwIDEgNi4wNTMgNi4wNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xdjIuMjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgMTUuNTcxLS45NjQuOTY0YTUgNSAwIDAgMS03LjA3MSAwIDUgNSAwIDAgMSAwLTcuMDdsLjk2NC0uOTY1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE3djRhMSAxIDAgMCAxLTEuNzA3LjcwNyAyLjUgMi41IDAgMCAwLTIuMTUyLS43MTcgMSAxIDAgMCAxLTEuMTMxLTEuMTMxIDIuNSAyLjUgMCAwIDAtLjcxNy0yLjE1MkExIDEgMCAwIDEgMyAxNmg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHkuanMKdmFyIENhbmR5Owp2YXIgaW5pdF9jYW5keSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHkuanMiKCkgewogICAgQ2FuZHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA3djEwLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNi4xVjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDdWM2ExIDEgMCAwIDEgMS43MDctLjcwNyAyLjUgMi41IDAgMCAwIDIuMTUyLjcxNyAxIDEgMCAwIDEgMS4xMzEgMS4xMzEgMi41IDIuNSAwIDAgMCAuNzE3IDIuMTUyQTEgMSAwIDAgMSAyMSA4aC00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUzNiA3LjQ2NWE1IDUgMCAwIDAtNy4wNzIgMGwtMiAyYTUgNSAwIDAgMCAwIDcuMDcgNSA1IDAgMCAwIDcuMDcyIDBsMi0yYTUgNSAwIDAgMCAwLTcuMDciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxN3Y0YTEgMSAwIDAgMS0xLjcwNy43MDcgMi41IDIuNSAwIDAgMC0yLjE1Mi0uNzE3IDEgMSAwIDAgMS0xLjEzMS0xLjEzMSAyLjUgMi41IDAgMCAwLS43MTctMi4xNTJBMSAxIDAgMCAxIDMgMTZoNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLW9mZi5qcwp2YXIgQ2FubmFiaXNPZmY7CnZhciBpbml0X2Nhbm5hYmlzX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMtb2ZmLmpzIigpIHsKICAgIENhbm5hYmlzT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTRjMS41IDEuNSAzLjUgMyA2IDMgMC0xLjUtLjUtMy41LTItNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45ODggOC4zMjdDMTMuOTAyIDYuMDU0IDEzLjM2NSAzLjgyIDEyIDJhOS4zIDkuMyAwIDAgMC0xLjQ0NSAyLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMzc1IDExLjcyNUMxOC44ODIgMTAuNTMgMjEgNy44NDEgMjEgNmMtMi4zMjQgMC01LjA4IDEuMjk2LTYuNjYyIDIuNjg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4wMjQgMTUuMzc4QTE1IDE1IDAgMCAwIDIyIDE1Yy0uNDI2LTEuMjc5LTIuNjctMi41NTctNC4yNS0yLjkwNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02Ljk5NSA2Ljk5MkM1LjcxNCA2LjQgNC4yOSA2IDMgNmMwIDIgMi41IDUgNCA2LTEuNSAwLTQuNSAxLjUtNSAzIDMuNSAxLjUgNiAxIDYgMS0xLjUgMS41LTIgMy41LTIgNSAyLjUgMCA0LjUtMS41IDYtMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLmpzCnZhciBDYW5uYWJpczsKdmFyIGluaXRfY2FubmFiaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhbm5hYmlzLmpzIigpIHsKICAgIENhbm5hYmlzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxMmMtMS41IDAtNC41IDEuNS01IDMgMy41IDEuNSA2IDEgNiAxLTEuNSAxLjUtMiAzLjUtMiA1IDIuNSAwIDQuNS0xLjUgNi0zIDEuNSAxLjUgMy41IDMgNiAzIDAtMS41LS41LTMuNS0yLTUgMCAwIDIuNS41IDYtMS0uNS0xLjUtMy41LTMtNS0zIDEuNS0xIDQtNCA0LTYtMi41IDAtNS41IDEuNS03IDMgMC0yLjUtLjUtNS0yLTctMS41IDItMiA0LjUtMiA3LTEuNS0xLjUtNC41LTMtNy0zIDAgMiAyLjUgNSA0IDYiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy1vZmYuanMKdmFyIENhcHRpb25zT2ZmOwp2YXIgaW5pdF9jYXB0aW9uc19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcHRpb25zLW9mZi5qcyIoKSB7CiAgICBDYXB0aW9uc09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgNUgxOWEyIDIgMCAwIDEgMiAydjguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMWgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTlINWEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMuanMKdmFyIENhcHRpb25zOwp2YXIgaW5pdF9jYXB0aW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FwdGlvbnMuanMiKCkgewogICAgQ2FwdGlvbnMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiNSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aDRNMTUgMTVoMk03IDExaDJNMTMgMTFoNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci1mcm9udC5qcwp2YXIgQ2FyRnJvbnQ7CnZhciBpbml0X2Nhcl9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLWZyb250LmpzIigpIHsKICAgIENhckZyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgOC0yIDItMS41LTMuN0EyIDIgMCAwIDAgMTUuNjQ2IDVIOC40YTIgMiAwIDAgMC0xLjkwMyAxLjI1N0w1IDEwIDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNGguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMTAiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE4djIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXItdGF4aS1mcm9udC5qcwp2YXIgQ2FyVGF4aUZyb250Owp2YXIgaW5pdF9jYXJfdGF4aV9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLXRheGktZnJvbnQuanMiKCkgewogICAgQ2FyVGF4aUZyb250ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDgtMiAyLTEuNS0zLjdBMiAyIDAgMCAwIDE1LjY0NiA1SDguNGEyIDIgMCAwIDAtMS45MDMgMS4yNTdMNSAxMCAzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiOCIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxOHYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzCnZhciBDYXI7CnZhciBpbml0X2NhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzIigpIHsKICAgIENhciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5IDE3aDJjLjYgMCAxLS40IDEtMXYtM2MwLS45LS43LTEuNy0xLjUtMS45QzE4LjcgMTAuNiAxNiAxMCAxNiAxMHMtMS4zLTEuNC0yLjItMi4zYy0uNS0uNC0xLjEtLjctMS44LS43SDVjLS42IDAtMS4xLjQtMS40LjlsLTEuNCAyLjlBMy43IDMuNyAwIDAgMCAyIDEydjRjMCAuNi40IDEgMSAxaDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdoNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qcwp2YXIgQ2FyYXZhbjsKdmFyIGluaXRfY2FyYXZhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qcyIoKSB7CiAgICBDYXJhdmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTlWOWE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHY4YTIgMiAwIDAgMCAyIDJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFhMSAxIDAgMCAxLTEgMUgxMHYtOWExIDEgMCAwIDEgMS0xaDJhMSAxIDAgMCAxIDEgMXY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcmQtc2ltLmpzCnZhciBDYXJkU2ltOwp2YXIgaW5pdF9jYXJkX3NpbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyZC1zaW0uanMiKCkgewogICAgQ2FyZFNpbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMTcyIDJhMiAyIDAgMCAxIDEuNDE0LjU4NmwzLjgyOCAzLjgyOEEyIDIgMCAwIDEgMjAgNy44MjhWMjBhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0aDgiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjEwIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcnJvdC5qcwp2YXIgQ2Fycm90Owp2YXIgaW5pdF9jYXJyb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcnJvdC5qcyIoKSB7CiAgICBDYXJyb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjI3IDIxLjdzOS44Ny0zLjUgMTIuNzMtNi4zNmE0LjUgNC41IDAgMCAwLTYuMzYtNi4zN0M1Ljc3IDExLjg0IDIuMjcgMjEuNyAyLjI3IDIxLjd6TTguNjQgMTRsLTIuMDUtMi4wNE0xNS4zNCAxNWwtMi40Ni0yLjQ2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDlzLTEuMzMtMi0zLjUtMkMxNi44NiA3IDE1IDkgMTUgOXMxLjMzIDIgMy41IDJTMjIgOSAyMiA5eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAycy0yIDEuMzMtMiAzLjVTMTUgOSAxNSA5czItMS44NCAyLTMuNUMxNyAzLjMzIDE1IDIgMTUgMnoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLWxvd2VyLmpzCnZhciBDYXNlTG93ZXI7CnZhciBpbml0X2Nhc2VfbG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtbG93ZXIuanMiKCkgewogICAgQ2FzZUxvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZ2MTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNy41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiMTIuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLXNlbnNpdGl2ZS5qcwp2YXIgQ2FzZVNlbnNpdGl2ZTsKdmFyIGluaXRfY2FzZV9zZW5zaXRpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2Utc2Vuc2l0aXZlLmpzIigpIHsKICAgIENhc2VTZW5zaXRpdmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuMzA0IDEzaDYuMzkyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguNSIsIGN5OiAiMTIuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNlLXVwcGVyLmpzCnZhciBDYXNlVXBwZXI7CnZhciBpbml0X2Nhc2VfdXBwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2UtdXBwZXIuanMiKCkgewogICAgQ2FzZVVwcGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNSAxMWg0LjVhMSAxIDAgMCAxIDAgNWgtNGEuNS41IDAgMCAxLS41LS41di05YS41LjUgMCAwIDEgLjUtLjVoM2ExIDEgMCAwIDEgMCA1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE2IDQuMDM5LTkuNjlhLjUuNSAwIDAgMSAuOTIzIDBMMTEgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zMDQgMTNoNi4zOTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXNzZXR0ZS10YXBlLmpzCnZhciBDYXNzZXR0ZVRhcGU7CnZhciBpbml0X2Nhc3NldHRlX3RhcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3NldHRlLXRhcGUuanMiKCkgewogICAgQ2Fzc2V0dGVUYXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMjAgLjctMi45QTEuNCAxLjQgMCAwIDEgOC4xIDE2aDcuOGExLjQgMS40IDAgMCAxIDEuNCAxbC43IDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzCnZhciBDYXN0Owp2YXIgaW5pdF9jYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzIigpIHsKICAgIENhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhWNmEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTkgOSAwIDAgMSA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNmE1IDUgMCAwIDEgNCA0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIuMDEiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3RsZS5qcwp2YXIgQ2FzdGxlOwp2YXIgaW5pdF9jYXN0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3RsZS5qcyIoKSB7CiAgICBDYXN0bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA1VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDIxdi0zYTMgMyAwIDAgMC02IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNUg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDExSDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOXYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM3Y4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzCnZhciBDYXQ7CnZhciBpbml0X2NhdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzIigpIHsKICAgIENhdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDVjLjY3IDAgMS4zNS4wOSAyIC4yNiAxLjc4LTIgNS4wMy0yLjg0IDYuNDItMi4yNiAxLjQuNTgtLjQyIDctLjQyIDcgLjU3IDEuMDcgMSAyLjI0IDEgMy40NEMyMSAxNy45IDE2Ljk3IDIxIDEyIDIxcy05LTMtOS03LjU2YzAtMS4yNS41LTIuNCAxLTMuNDQgMCAwLTEuODktNi40Mi0uNS03IDEuMzktLjU4IDQuNzIuMjMgNi41IDIuMjNBOS4wNCA5LjA0IDAgMCAxIDEyIDVaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuMjUgMTYuMjVoMS41TDEyIDE3bC0uNzUtLjc1WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NjdHYuanMKdmFyIENjdHY7CnZhciBpbml0X2NjdHYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NjdHYuanMiKCkgewogICAgQ2N0diA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTYuNzUgMTJoMy42MzJhMSAxIDAgMCAxIC44OTQgMS40NDdsLTIuMDM0IDQuMDY5YTEgMSAwIDAgMS0xLjcwOC4xMzRsLTIuMTI0LTIuOTciIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjEwNiA5LjA1M2ExIDEgMCAwIDEgLjQ0NyAxLjM0MWwtMy4xMDYgNi4yMTFhMSAxIDAgMCAxLTEuMzQyLjQ0N0wzLjYxIDEyLjNhMi45MiAyLjkyIDAgMCAxLTEuMy0zLjkxTDMuNjkgNS42YTIuOTIgMi45MiAwIDAgMSAzLjkyLTEuM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOWgzLjc2YTIgMiAwIDAgMCAxLjgtMS4xTDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMXYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYXJlYS5qcwp2YXIgQ2hhcnRBcmVhOwp2YXIgaW5pdF9jaGFydF9hcmVhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1hcmVhLmpzIigpIHsKICAgIENoYXJ0QXJlYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTEuMjA3YS41LjUgMCAwIDEgLjE0Ni0uMzUzbDItMmEuNS41IDAgMCAxIC43MDggMGwzLjI5MiAzLjI5MmEuNS41IDAgMCAwIC43MDggMGw0LjI5Mi00LjI5MmEuNS41IDAgMCAxIC44NTQuMzUzVjE2YTEgMSAwIDAgMS0xIDFIOGExIDEgMCAwIDEtMS0xeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1iaWcuanMKdmFyIENoYXJ0QmFyQmlnOwp2YXIgaW5pdF9jaGFydF9iYXJfYmlnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItYmlnLmpzIigpIHsKICAgIENoYXJ0QmFyQmlnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjEzIiwgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjciLCB5OiAiNSIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWRlY3JlYXNpbmcuanMKdmFyIENoYXJ0QmFyRGVjcmVhc2luZzsKdmFyIGluaXRfY2hhcnRfYmFyX2RlY3JlYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1kZWNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0QmFyRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWluY3JlYXNpbmcuanMKdmFyIENoYXJ0QmFySW5jcmVhc2luZzsKdmFyIGluaXRfY2hhcnRfYmFyX2luY3JlYXNpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1pbmNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0QmFySW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE2aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLXN0YWNrZWQuanMKdmFyIENoYXJ0QmFyU3RhY2tlZDsKdmFyIGluaXRfY2hhcnRfYmFyX3N0YWNrZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1zdGFja2VkLmpzIigpIHsKICAgIENoYXJ0QmFyU3RhY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzdjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICIxMyIsIHdpZHRoOiAiOSIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjUiLCB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci5qcwp2YXIgQ2hhcnRCYXI7CnZhciBpbml0X2NoYXJ0X2JhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLmpzIigpIHsKICAgIENoYXJ0QmFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTFoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA2aDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jYW5kbGVzdGljay5qcwp2YXIgQ2hhcnRDYW5kbGVzdGljazsKdmFyIGluaXRfY2hhcnRfY2FuZGxlc3RpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNhbmRsZXN0aWNrLmpzIigpIHsKICAgIENoYXJ0Q2FuZGxlc3RpY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDV2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNiIsIHg6ICI3IiwgeTogIjkiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNXYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHg6ICIxNSIsIHk6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tYmlnLmpzCnZhciBDaGFydENvbHVtbkJpZzsKdmFyIGluaXRfY2hhcnRfY29sdW1uX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWJpZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkJpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTUiLCB5OiAiNSIsIHdpZHRoOiAiNCIsIGhlaWdodDogIjEyIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1kZWNyZWFzaW5nLmpzCnZhciBDaGFydENvbHVtbkRlY3JlYXNpbmc7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tZGVjcmVhc2luZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkRlY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3di0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdWNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzCnZhciBDaGFydENvbHVtbkluY3JlYXNpbmc7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4taW5jcmVhc2luZy5qcyIoKSB7CiAgICBDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1zdGFja2VkLmpzCnZhciBDaGFydENvbHVtblN0YWNrZWQ7CnZhciBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tc3RhY2tlZC5qcyIoKSB7CiAgICBDaGFydENvbHVtblN0YWNrZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxM0g3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNSIsIHk6ICI1Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiMTIiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjgiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI5Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLmpzCnZhciBDaGFydENvbHVtbjsKdmFyIGluaXRfY2hhcnRfY29sdW1uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4uanMiKCkgewogICAgQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN1Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE3VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN3YtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWdhbnR0LmpzCnZhciBDaGFydEdhbnR0Owp2YXIgaW5pdF9jaGFydF9nYW50dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtZ2FudHQuanMiKCkgewogICAgQ2hhcnRHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDZoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWxpbmUuanMKdmFyIENoYXJ0TGluZTsKdmFyIGluaXRfY2hhcnRfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbGluZS5qcyIoKSB7CiAgICBDaGFydExpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MTZhMiAyIDAgMCAwIDIgMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA5LTUgNS00LTQtMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbmV0d29yay5qcwp2YXIgQ2hhcnROZXR3b3JrOwp2YXIgaW5pdF9jaGFydF9uZXR3b3JrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uZXR3b3JrLmpzIigpIHsKICAgIENoYXJ0TmV0d29yayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjExIDcuNjY0IDEuNzggMi42NzIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMTYyIDEyLjc4OC0zLjMyNCAxLjQyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCA0LTYuMDYgMS41MTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxNSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4tZGVjcmVhc2luZy5qcwp2YXIgQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9kZWNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1kZWNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDIxdi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4taW5jcmVhc2luZy5qcwp2YXIgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1pbmNyZWFzaW5nLmpzIigpIHsKICAgIENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMVYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanMKdmFyIENoYXJ0Tm9BeGVzQ29sdW1uOwp2YXIgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanMiKCkgewogICAgQ2hhcnROb0F4ZXNDb2x1bW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxdi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjFWOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29tYmluZWQuanMKdmFyIENoYXJ0Tm9BeGVzQ29tYmluZWQ7CnZhciBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29tYmluZWQuanMiKCkgewogICAgQ2hhcnROb0F4ZXNDb21iaW5lZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMHYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAzLTguNjQ2IDguNjQ2YS41LjUgMCAwIDEtLjcwOCAwTDkuMzU0IDguMzU0YS41LjUgMCAwIDAtLjcwNyAwTDIgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQuanMKdmFyIENoYXJ0Tm9BeGVzR2FudHQ7CnZhciBpbml0X2NoYXJ0X25vX2F4ZXNfZ2FudHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtZ2FudHQuanMiKCkgewogICAgQ2hhcnROb0F4ZXNHYW50dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNWgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1waWUuanMKdmFyIENoYXJ0UGllOwp2YXIgaW5pdF9jaGFydF9waWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXBpZS5qcyIoKSB7CiAgICBDaGFydFBpZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEyYy41NTIgMCAxLjAwNS0uNDQ5Ljk1LS45OThhMTAgMTAgMCAwIDAtOC45NTMtOC45NTFjLS41NS0uMDU1LS45OTguMzk4LS45OTguOTV2OGExIDEgMCAwIDAgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yMSAxNS44OUExMCAxMCAwIDEgMSA4IDIuODMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zY2F0dGVyLmpzCnZhciBDaGFydFNjYXR0ZXI7CnZhciBpbml0X2NoYXJ0X3NjYXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNjYXR0ZXIuanMiKCkgewogICAgQ2hhcnRTY2F0dGVyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICI1LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTEuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTQuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjE2YTIgMiAwIDAgMCAyIDJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zcGxpbmUuanMKdmFyIENoYXJ0U3BsaW5lOwp2YXIgaW5pdF9jaGFydF9zcGxpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNwbGluZS5qcyIoKSB7CiAgICBDaGFydFNwbGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM3YxNmEyIDIgMCAwIDAgMiAyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZjLjUtMiAxLjUtNyA0LTcgMiAwIDIgMyA0IDMgMi41IDAgNC41LTUgNS03IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2stY2hlY2suanMKdmFyIENoZWNrQ2hlY2s7CnZhciBpbml0X2NoZWNrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay1jaGVjay5qcyIoKSB7CiAgICBDaGVja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNiA3IDE3bC01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtNy41IDcuNUwxMyAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWNrLWxpbmUuanMKdmFyIENoZWNrTGluZTsKdmFyIGluaXRfY2hlY2tfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlY2stbGluZS5qcyIoKSB7CiAgICBDaGVja0xpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0TDkgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlMMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1TDQgMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qcwp2YXIgQ2hlY2s7CnZhciBpbml0X2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qcyIoKSB7CiAgICBDaGVjayA9IFtbInBhdGgiLCB7IGQ6ICJNMjAgNiA5IDE3bC01LTUiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlZi1oYXQuanMKdmFyIENoZWZIYXQ7CnZhciBpbml0X2NoZWZfaGF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVmLWhhdC5qcyIoKSB7CiAgICBDaGVmSGF0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgMjFhMSAxIDAgMCAwIDEtMXYtNS4zNWMwLS40NTcuMzE2LS44NDQuNzI3LTEuMDQxYTQgNCAwIDAgMC0yLjEzNC03LjU4OSA1IDUgMCAwIDAtOS4xODYgMCA0IDQgMCAwIDAtMi4xMzQgNy41ODhjLjQxMS4xOTguNzI3LjU4NS43MjcgMS4wNDFWMjBhMSAxIDAgMCAwIDEgMVoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxN2gxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXJyeS5qcwp2YXIgQ2hlcnJ5Owp2YXIgaW5pdF9jaGVycnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXJyeS5qcyIoKSB7CiAgICBDaGVycnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3YTUgNSAwIDAgMCAxMCAwYzAtMi43Ni0yLjUtNS01LTMtMi41LTItNSAuMjQtNSAzWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2E1IDUgMCAwIDAgMTAgMGMwLTIuNzYtMi41LTUtNS0zLTIuNS0yLTUgLjI0LTUgM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGMzLjIyLTIuOTEgNC4yOS04Ljc1IDUtMTIgMS42NiAyLjM4IDQuOTQgOSA1IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDljLTQuMjkgMC03LjE0LTIuMzMtMTAtNyA1LjcxIDAgMTAgNC42NyAxMCA3WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWJpc2hvcC5qcwp2YXIgQ2hlc3NCaXNob3A7CnZhciBpbml0X2NoZXNzX2Jpc2hvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtYmlzaG9wLmpzIigpIHsKICAgIENoZXNzQmlzaG9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMThjMS41LS42MTUgMy0yLjQ2MSAzLTQuOTIzQzE4IDguNzY5IDE0LjUgNC40NjIgMTIgMiA5LjUgNC40NjIgNiA4Ljc3IDYgMTMuMDc3IDYgMTUuNTM5IDcuNSAxNy4zODUgOSAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA3LTIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1raW5nLmpzCnZhciBDaGVzc0tpbmc7CnZhciBpbml0X2NoZXNzX2tpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtpbmcuanMiKCkgewogICAgQ2hlc3NLaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNi43IDE4LTEtMUM0LjM1IDE1LjY4MiAzIDE0LjA5IDMgMTJhNSA1IDAgMCAxIDQuOTUtNWMxLjU4NCAwIDIuNy40NTUgNC4wNSAxLjgxOEMxMy4zNSA3LjQ1NSAxNC40NjYgNyAxNi4wNSA3QTUgNSAwIDAgMSAyMSAxMmMwIDIuMDgyLTEuMzU5IDMuNjczLTIuNyA1bC0xIDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2Ni44MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1rbmlnaHQuanMKdmFyIENoZXNzS25pZ2h0Owp2YXIgaW5pdF9jaGVzc19rbmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtuaWdodC5qcyIoKSB7CiAgICBDaGVzc0tuaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjBhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg2YTEgMSAwIDAgMS0xLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjUgMThjMS0yIDIuNS01IDIuNS05YTcgNyAwIDAgMC03LTdINi42MzVhMSAxIDAgMCAwLS43NjggMS42NEw3IDVsLTIuMzIgNS44MDJhMiAyIDAgMCAwIC45NSAyLjUyNmwyLjg3IDEuNDU2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgMS40MjUtMS40MjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgOCAxLjUzLTEuNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43MTMgMTIuMTg1IDcgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1wYXduLmpzCnZhciBDaGVzc1Bhd247CnZhciBpbml0X2NoZXNzX3Bhd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXBhd24uanMiKCkgewogICAgQ2hlc3NQYXduID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMGEyIDIgMCAwIDEgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDZhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMCAxLjUgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTggMS41LTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtcXVlZW4uanMKdmFyIENoZXNzUXVlZW47CnZhciBpbml0X2NoZXNzX3F1ZWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1xdWVlbi5qcyIoKSB7CiAgICBDaGVzc1F1ZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxSDVhMSAxIDAgMCAxLTEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNDc0IDUuOTQzIDEuNTY3IDUuMzRhMSAxIDAgMCAwIDEuNzUuMzI4bDIuNjE2LTMuNDAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDktMyA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuNTk0IDguMjA5IDIuNjE1IDMuNDAzYTEgMSAwIDAgMCAxLjc1LS4zMjlsMS41NjctNS4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE4IDQgOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiNyIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiNyIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1kb3duLmpzCnZhciBDaGV2cm9uRG93bjsKdmFyIGluaXRfY2hldnJvbl9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWRvd24uanMiKCkgewogICAgQ2hldnJvbkRvd24gPSBbWyJwYXRoIiwgeyBkOiAibTYgOSA2IDYgNi02IiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZmlyc3QuanMKdmFyIENoZXZyb25GaXJzdDsKdmFyIGluaXRfY2hldnJvbl9maXJzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1maXJzdC5qcyIoKSB7CiAgICBDaGV2cm9uRmlyc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC02LTYgNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgNnYxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXJvb2suanMKdmFyIENoZXNzUm9vazsKdmFyIGluaXRfY2hlc3Nfcm9vayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3Mtcm9vay5qcyIoKSB7CiAgICBDaGVzc1Jvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwYTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINmExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEtOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDJ2NWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE4IDEtOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGFzdC5qcwp2YXIgQ2hldnJvbkxhc3Q7CnZhciBpbml0X2NoZXZyb25fbGFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sYXN0LmpzIigpIHsKICAgIENoZXZyb25MYXN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCA2LTYtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZ2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLWxlZnQuanMKdmFyIENoZXZyb25MZWZ0Owp2YXIgaW5pdF9jaGV2cm9uX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tbGVmdC5qcyIoKSB7CiAgICBDaGV2cm9uTGVmdCA9IFtbInBhdGgiLCB7IGQ6ICJtMTUgMTgtNi02IDYtNiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLXJpZ2h0LmpzCnZhciBDaGV2cm9uUmlnaHQ7CnZhciBpbml0X2NoZXZyb25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tcmlnaHQuanMiKCkgewogICAgQ2hldnJvblJpZ2h0ID0gW1sicGF0aCIsIHsgZDogIm05IDE4IDYtNi02LTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi11cC5qcwp2YXIgQ2hldnJvblVwOwp2YXIgaW5pdF9jaGV2cm9uX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9uLXVwLmpzIigpIHsKICAgIENoZXZyb25VcCA9IFtbInBhdGgiLCB7IGQ6ICJtMTggMTUtNi02LTYgNiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1kb3duLXVwLmpzCnZhciBDaGV2cm9uc0Rvd25VcDsKdmFyIGluaXRfY2hldnJvbnNfZG93bl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi11cC5qcyIoKSB7CiAgICBDaGV2cm9uc0Rvd25VcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjAgNS01IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDQgNSA1IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWRvd24uanMKdmFyIENoZXZyb25zRG93bjsKdmFyIGluaXRfY2hldnJvbnNfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi5qcyIoKSB7CiAgICBDaGV2cm9uc0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDYgNSA1IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDEzIDUgNSA1LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LWVsbGlwc2lzLmpzCnZhciBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzOwp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0X2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LWVsbGlwc2lzLmpzIigpIHsKICAgIENoZXZyb25zTGVmdFJpZ2h0RWxsaXBzaXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDcgNSA1LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDctNSA1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWxlZnQtcmlnaHQuanMKdmFyIENoZXZyb25zTGVmdFJpZ2h0Owp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LmpzIigpIHsKICAgIENoZXZyb25zTGVmdFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA3LTUgNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyA1IDUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtbGVmdC5qcwp2YXIgQ2hldnJvbnNMZWZ0Owp2YXIgaW5pdF9jaGV2cm9uc19sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LmpzIigpIHsKICAgIENoZXZyb25zTGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE3LTUtNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LWxlZnQuanMKdmFyIENoZXZyb25zUmlnaHRMZWZ0Owp2YXIgaW5pdF9jaGV2cm9uc19yaWdodF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC1sZWZ0LmpzIigpIHsKICAgIENoZXZyb25zUmlnaHRMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNS01IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDUtNS01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC5qcwp2YXIgQ2hldnJvbnNSaWdodDsKdmFyIGluaXRfY2hldnJvbnNfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LmpzIigpIHsKICAgIENoZXZyb25zUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTcgNS01LTUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXVwLWRvd24uanMKdmFyIENoZXZyb25zVXBEb3duOwp2YXIgaW5pdF9jaGV2cm9uc191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC1kb3duLmpzIigpIHsKICAgIENoZXZyb25zVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNSA1IDUgNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgOSA1LTUgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtdXAuanMKdmFyIENoZXZyb25zVXA7CnZhciBpbml0X2NoZXZyb25zX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC5qcyIoKSB7CiAgICBDaGV2cm9uc1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEtNS01LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxOC01LTUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2h1cmNoLmpzCnZhciBDaHVyY2g7CnZhciBpbml0X2NodXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2h1cmNoLmpzIigpIHsKICAgIENodXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDloNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4IDkgMy41MiAyLjE0N2ExIDEgMCAwIDEgLjQ4Ljg1NFYxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtNi45OTlhMSAxIDAgMCAxIC40OC0uODU0TDYgOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxVjdhMSAxIDAgMCAxIC4zNzYtLjc4Mmw1LTMuOTk5YTEgMSAwIDAgMSAxLjI0OS4wMDFsNSA0QTEgMSAwIDAgMSAxOCA3djE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLW9mZi5qcwp2YXIgQ2lnYXJldHRlT2ZmOwp2YXIgaW5pdF9jaWdhcmV0dGVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaWdhcmV0dGUtb2ZmLmpzIigpIHsKICAgIENpZ2FyZXR0ZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyYTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtLjUuODY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nocm9taXVtLmpzCnZhciBDaHJvbWl1bTsKdmFyIGluaXRfY2hyb21pdW0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nocm9taXVtLmpzIigpIHsKICAgIENocm9taXVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuODggMjEuOTQgMTUuNDYgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuMTcgOEgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjk1IDYuMDYgOC41NCAxNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLmpzCnZhciBDaWdhcmV0dGU7CnZhciBpbml0X2NpZ2FyZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lnYXJldHRlLmpzIigpIHsKICAgIENpZ2FyZXR0ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEySDNhMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDFoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGMwLTIuNS0yLTIuNS0yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTZhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhjMC0yLjUtMi0yLjUtMi01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hbGVydC5qcwp2YXIgQ2lyY2xlQWxlcnQ7CnZhciBpbml0X2NpcmNsZV9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFsZXJ0LmpzIigpIHsKICAgIENpcmNsZUFsZXJ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1kb3duLmpzCnZhciBDaXJjbGVBcnJvd0Rvd247CnZhciBpbml0X2NpcmNsZV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd0Rvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LWxlZnQuanMKdmFyIENpcmNsZUFycm93TGVmdDsKdmFyIGluaXRfY2lyY2xlX2Fycm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1sZWZ0LmpzIigpIHsKICAgIENpcmNsZUFycm93TGVmdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDgtNCA0IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLWxlZnQuanMKdmFyIENpcmNsZUFycm93T3V0RG93bkxlZnQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tbGVmdC5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd091dERvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmExMCAxMCAwIDEgMSAxMCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJIMnYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfZG93bl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC1kb3duLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0RG93blJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJhMTAgMTAgMCAxIDEgMTAtMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjIgMTIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTZ2NmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtbGVmdC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXRVcExlZnQ7CnZhciBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC11cC1sZWZ0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0VXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMTAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMkExMCAxMCAwIDEgMSAyIDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LW91dC11cC1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0Owp2YXIgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LXVwLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUFycm93T3V0VXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyQTEwIDEwIDAgMSAxIDEyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyaDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1yaWdodC5qcwp2YXIgQ2lyY2xlQXJyb3dSaWdodDsKdmFyIGluaXRfY2lyY2xlX2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctcmlnaHQuanMiKCkgewogICAgQ2lyY2xlQXJyb3dSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE2IDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LXVwLmpzCnZhciBDaXJjbGVBcnJvd1VwOwp2YXIgaW5pdF9jaXJjbGVfYXJyb3dfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy11cC5qcyIoKSB7CiAgICBDaXJjbGVBcnJvd1VwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTItNC00LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNlY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLmpzCnZhciBDaXJjbGVDaGVjazsKdmFyIGluaXRfY2lyY2xlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2suanMiKCkgewogICAgQ2lyY2xlQ2hlY2sgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2stYmlnLmpzCnZhciBDaXJjbGVDaGVja0JpZzsKdmFyIGluaXRfY2lyY2xlX2NoZWNrX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZWNrLWJpZy5qcyIoKSB7CiAgICBDaXJjbGVDaGVja0JpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgwMSAxMEExMCAxMCAwIDEgMSAxNyAzLjMzNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDMgM0wyMiA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tZG93bi5qcwp2YXIgQ2lyY2xlQ2hldnJvbkRvd247CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWRvd24uanMiKCkgewogICAgQ2lyY2xlQ2hldnJvbkRvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMC00IDQtNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tbGVmdC5qcwp2YXIgQ2lyY2xlQ2hldnJvbkxlZnQ7CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWxlZnQuanMiKCkgewogICAgQ2lyY2xlQ2hldnJvbkxlZnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNi00LTQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tcmlnaHQuanMKdmFyIENpcmNsZUNoZXZyb25SaWdodDsKdmFyIGluaXRfY2lyY2xlX2NoZXZyb25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXJpZ2h0LmpzIigpIHsKICAgIENpcmNsZUNoZXZyb25SaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDggNCA0LTQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXVwLmpzCnZhciBDaXJjbGVDaGV2cm9uVXA7CnZhciBpbml0X2NpcmNsZV9jaGV2cm9uX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi11cC5qcyIoKSB7CiAgICBDaXJjbGVDaGV2cm9uVXAgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE0IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZGFzaGVkLmpzCnZhciBDaXJjbGVEYXNoZWQ7CnZhciBpbml0X2NpcmNsZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kYXNoZWQuanMiKCkgewogICAgQ2lyY2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMSAyLjE4MmExMCAxMCAwIDAgMSAzLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgxOGExMCAxMCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42MDkgMy43MjFhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNzkgMTcuNjA5YTEwIDEwIDAgMCAxLTIuNyAyLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjgxOCAxMC4xYTEwIDEwIDAgMCAxIDAgMy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNzIxIDYuMzkxYTEwIDEwIDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzkxIDIwLjI3OWExMCAxMCAwIDAgMS0yLjY5LTIuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kaXZpZGUuanMKdmFyIENpcmNsZURpdmlkZTsKdmFyIGluaXRfY2lyY2xlX2RpdmlkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRpdmlkZS5qcyIoKSB7CiAgICBDaXJjbGVEaXZpZGUgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI4IiwgeDI6ICIxNiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTYiLCB5MjogIjE2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb2xsYXItc2lnbi5qcwp2YXIgQ2lyY2xlRG9sbGFyU2lnbjsKdmFyIGluaXRfY2lyY2xlX2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG9sbGFyLXNpZ24uanMiKCkgewogICAgQ2lyY2xlRG9sbGFyU2lnbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLTZhMiAyIDAgMSAwIDAgNGg0YTIgMiAwIDEgMSAwIDRIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRvdC1kYXNoZWQuanMKdmFyIENpcmNsZURvdERhc2hlZDsKdmFyIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QtZGFzaGVkLmpzIigpIHsKICAgIENpcmNsZURvdERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xOGE5LjkzIDkuOTMgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNiAzLjcxYTkuOTUgOS45NSAwIDAgMSAyLjY5IDIuNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MiAxMC4xYTkuOTMgOS45MyAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOSAxNy42YTkuOTUgOS45NSAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDIxLjgyYTkuOTQgOS45NCAwIDAgMS0zLjggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjQgMjAuMjlhOS45NSA5Ljk1IDAgMCAxLTIuNjktMi43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuMTggMTMuOWE5LjkzIDkuOTMgMCAwIDEgMC0zLjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy43MSA2LjRhOS45NSA5Ljk1IDAgMCAxIDIuNy0yLjY5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG90LmpzCnZhciBDaXJjbGVEb3Q7CnZhciBpbml0X2NpcmNsZV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QuanMiKCkgewogICAgQ2lyY2xlRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1lbGxpcHNpcy5qcwp2YXIgQ2lyY2xlRWxsaXBzaXM7CnZhciBpbml0X2NpcmNsZV9lbGxpcHNpcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVsbGlwc2lzLmpzIigpIHsKICAgIENpcmNsZUVsbGlwc2lzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1lcXVhbC5qcwp2YXIgQ2lyY2xlRXF1YWw7CnZhciBpbml0X2NpcmNsZV9lcXVhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWVxdWFsLmpzIigpIHsKICAgIENpcmNsZUVxdWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0aDEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1hcnJvdy11cC5qcwp2YXIgQ2lyY2xlRmFkaW5nQXJyb3dVcDsKdmFyIGluaXRfY2lyY2xlX2ZhZGluZ19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1hcnJvdy11cC5qcyIoKSB7CiAgICBDaXJjbGVGYWRpbmdBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDAgMSA3LjM4IDE2Ljc1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjUgOC44NzVhMTAgMTAgMCAwIDAtLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yLjgzIDE2YTEwIDEwIDAgMCAwIDIuNDMgMy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNjM2IDUuMjM1YTEwIDEwIDAgMCAxIC44OTEtLjg1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjY0NCAyMS40MmExMCAxMCAwIDAgMCA3LjYzMS0uMzgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZmFkaW5nLXBsdXMuanMKdmFyIENpcmNsZUZhZGluZ1BsdXM7CnZhciBpbml0X2NpcmNsZV9mYWRpbmdfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1wbHVzLmpzIigpIHsKICAgIENpcmNsZUZhZGluZ1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTEwIDEwIDAgMCAxIDcuMzggMTYuNzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi41IDguODc1YTEwIDEwIDAgMCAwLS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi44MyAxNmExMCAxMCAwIDAgMCAyLjQzIDMuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYzNiA1LjIzNWExMCAxMCAwIDAgMSAuODkxLS44NTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NDQgMjEuNDJhMTAgMTAgMCAwIDAgNy42MzEtLjM4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWdhdWdlLmpzCnZhciBDaXJjbGVHYXVnZTsKdmFyIGluaXRfY2lyY2xlX2dhdWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZ2F1Z2UuanMiKCkgewogICAgQ2lyY2xlR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42IDIuN2ExMCAxMCAwIDEgMCA1LjcgNS43IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNCAxMC42IDE5IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtbWludXMuanMKdmFyIENpcmNsZU1pbnVzOwp2YXIgaW5pdF9jaXJjbGVfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1taW51cy5qcyIoKSB7CiAgICBDaXJjbGVNaW51cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1vZmYuanMKdmFyIENpcmNsZU9mZjsKdmFyIGluaXRfY2lyY2xlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW9mZi5qcyIoKSB7CiAgICBDaXJjbGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY5QTEwIDEwIDAgMCAxIDIxLjMgMTUuNjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDggMTkuMDhBMTAgMTAgMCAxIDEgNC45MiA0LjkyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhcmtpbmctb2ZmLmpzCnZhciBDaXJjbGVQYXJraW5nT2ZmOwp2YXIgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLW9mZi5qcyIoKSB7CiAgICBDaXJjbGVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjU2IDdIMTNhMyAzIDAgMCAxIDIuOTg0IDMuMzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEzSDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDcxIDE5LjA3MUExIDEgMCAwIDEgNC45MyA0LjkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjM1NyAyLjY4N2ExMCAxMCAwIDAgMSAxMi45NTYgMTIuOTU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLmpzCnZhciBDaXJjbGVQYXJraW5nOwp2YXIgaW5pdF9jaXJjbGVfcGFya2luZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhcmtpbmcuanMiKCkgewogICAgQ2lyY2xlUGFya2luZyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdWN2g0YTMgMyAwIDAgMSAwIDZIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXVzZS5qcwp2YXIgQ2lyY2xlUGF1c2U7CnZhciBpbml0X2NpcmNsZV9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhdXNlLmpzIigpIHsKICAgIENpcmNsZVBhdXNlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjEwIiwgeTE6ICIxNSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiMTQiLCB5MTogIjE1IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBlcmNlbnQuanMKdmFyIENpcmNsZVBlcmNlbnQ7CnZhciBpbml0X2NpcmNsZV9wZXJjZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGVyY2VudC5qcyIoKSB7CiAgICBDaXJjbGVQZXJjZW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGlsZS5qcwp2YXIgQ2lyY2xlUGlsZTsKdmFyIGluaXRfY2lyY2xlX3BpbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1waWxlLmpzIigpIHsKICAgIENpcmNsZVBpbGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMjAiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wbGF5LmpzCnZhciBDaXJjbGVQbGF5Owp2YXIgaW5pdF9jaXJjbGVfcGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsYXkuanMiKCkgewogICAgQ2lyY2xlUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOS4wMDNhMSAxIDAgMCAxIDEuNTE3LS44NTlsNC45OTcgMi45OTdhMSAxIDAgMCAxIDAgMS43MThsLTQuOTk3IDIuOTk3QTEgMSAwIDAgMSA5IDE0Ljk5NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcG91bmQtc3RlcmxpbmcuanMKdmFyIENpcmNsZVBvdW5kU3Rlcmxpbmc7CnZhciBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIENpcmNsZVBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNlY5LjVhMSAxIDAgMCAxIDUgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmg3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsdXMuanMKdmFyIENpcmNsZVBsdXM7CnZhciBpbml0X2NpcmNsZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGx1cy5qcyIoKSB7CiAgICBDaXJjbGVQbHVzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wb3dlci5qcwp2YXIgQ2lyY2xlUG93ZXI7CnZhciBpbml0X2NpcmNsZV9wb3dlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvd2VyLmpzIigpIHsKICAgIENpcmNsZVBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk4IDkuMDAzYTUgNSAwIDEgMCA4LS4wMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgQ2lyY2xlUXVlc3Rpb25NYXJrOwp2YXIgaW5pdF9jaXJjbGVfcXVlc3Rpb25fbWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgQ2lyY2xlUXVlc3Rpb25NYXJrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLTIuanMKdmFyIENpcmNsZVNsYXNoMjsKdmFyIGluaXRfY2lyY2xlX3NsYXNoXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC0yLmpzIigpIHsKICAgIENpcmNsZVNsYXNoMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC5qcwp2YXIgQ2lyY2xlU2xhc2g7CnZhciBpbml0X2NpcmNsZV9zbGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLmpzIigpIHsKICAgIENpcmNsZVNsYXNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiMTUiLCB5MTogIjE1IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNtYWxsLmpzCnZhciBDaXJjbGVTbWFsbDsKdmFyIGluaXRfY2lyY2xlX3NtYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc21hbGwuanMiKCkgewogICAgQ2lyY2xlU21hbGwgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0YXIuanMKdmFyIENpcmNsZVN0YXI7CnZhciBpbml0X2NpcmNsZV9zdGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3Rhci5qcyIoKSB7CiAgICBDaXJjbGVTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMDUxIDcuNjE2YTEgMSAwIDAgMSAxLjkwOS4wMjRsLjczNyAxLjQ1MmExIDEgMCAwIDAgLjczNy41MzVsMS42MzQuMjU2YTEgMSAwIDAgMSAuNTg4IDEuODA2bC0xLjE3MiAxLjE2OGExIDEgMCAwIDAtLjI4Mi44NjZsLjI1OSAxLjYxM2ExIDEgMCAwIDEtMS41NDEgMS4xMzRsLTEuNDY1LS43NWExIDEgMCAwIDAtLjkxMiAwbC0xLjQ2NS43NWExIDEgMCAwIDEtMS41MzktMS4xMzNsLjI1OC0xLjYxM2ExIDEgMCAwIDAtLjI4Mi0uODY3bC0xLjE1Ni0xLjE1MmExIDEgMCAwIDEgLjU3Mi0xLjgyMmwxLjYzMy0uMjU2YTEgMSAwIDAgMCAuNzM3LS41MzV6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0b3AuanMKdmFyIENpcmNsZVN0b3A7CnZhciBpbml0X2NpcmNsZV9zdG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3RvcC5qcyIoKSB7CiAgICBDaXJjbGVTdG9wID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjkiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXVzZXItcm91bmQuanMKdmFyIENpcmNsZVVzZXJSb3VuZDsKdmFyIGluaXRfY2lyY2xlX3VzZXJfcm91bmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLXJvdW5kLmpzIigpIHsKICAgIENpcmNsZVVzZXJSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtdXNlci5qcwp2YXIgQ2lyY2xlVXNlcjsKdmFyIGluaXRfY2lyY2xlX3VzZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLmpzIigpIHsKICAgIENpcmNsZVVzZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjAuNjYyVjE5YTIgMiAwIDAgMSAyLTJoNmEyIDIgMCAwIDEgMiAydjEuNjYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXguanMKdmFyIENpcmNsZVg7CnZhciBpbml0X2NpcmNsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUteC5qcyIoKSB7CiAgICBDaXJjbGVYID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qcwp2YXIgQ2lyY2xlOwp2YXIgaW5pdF9jaXJjbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qcyIoKSB7CiAgICBDaXJjbGUgPSBbWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmN1aXQtYm9hcmQuanMKdmFyIENpcmN1aXRCb2FyZDsKdmFyIGluaXRfY2lyY3VpdF9ib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY3VpdC1ib2FyZC5qcyIoKSB7CiAgICBDaXJjdWl0Qm9hcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA5aDRhMiAyIDAgMCAwIDItMlYzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjF2LTRhMiAyIDAgMCAxIDItMmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjE1IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanMKdmFyIENpdHJ1czsKdmFyIGluaXRfY2l0cnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanMiKCkgewogICAgQ2l0cnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yMS42NiAxNy42N2ExLjA4IDEuMDggMCAwIDEtLjA0IDEuNkExMiAxMiAwIDAgMSA0LjczIDIuMzhhMS4xIDEuMSAwIDAgMSAxLjYxLS4wNHoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjY1IDE1LjY2QTggOCAwIDAgMSA4LjM1IDQuMzQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAtNS41IDUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNy44NVYxMEg2LjE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xhcHBlcmJvYXJkLmpzCnZhciBDbGFwcGVyYm9hcmQ7CnZhciBpbml0X2NsYXBwZXJib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xhcHBlcmJvYXJkLmpzIigpIHsKICAgIENsYXBwZXJib2FyZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjIgNiAzIDExbC0uOS0yLjRjLS4zLTEuMS4zLTIuMiAxLjMtMi41bDEzLjUtNGMxLjEtLjMgMi4yLjMgMi41IDEuM1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi4yIDUuMyAzLjEgMy45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjQgMy40IDMuMSA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTFoMTh2OGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMloiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2hlY2suanMKdmFyIENsaXBib2FyZENoZWNrOwp2YXIgaW5pdF9jbGlwYm9hcmRfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1jaGVjay5qcyIoKSB7CiAgICBDbGlwYm9hcmRDaGVjayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE0IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2xvY2suanMKdmFyIENsaXBib2FyZENsb2NrOwp2YXIgaW5pdF9jbGlwYm9hcmRfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1jbG9jay5qcyIoKSB7CiAgICBDbGlwYm9hcmRDbG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYuODMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE2IiwgcjogIjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjIiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWNvcHkuanMKdmFyIENsaXBib2FyZENvcHk7CnZhciBpbml0X2NsaXBib2FyZF9jb3B5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY29weS5qcyIoKSB7CiAgICBDbGlwYm9hcmRDb3B5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNEg2YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTRIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTAtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1saXN0LmpzCnZhciBDbGlwYm9hcmRMaXN0Owp2YXIgaW5pdF9jbGlwYm9hcmRfbGlzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLWxpc3QuanMiKCkgewogICAgQ2xpcGJvYXJkTGlzdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtbWludXMuanMKdmFyIENsaXBib2FyZE1pbnVzOwp2YXIgaW5pdF9jbGlwYm9hcmRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1taW51cy5qcyIoKSB7CiAgICBDbGlwYm9hcmRNaW51cyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGFzdGUuanMKdmFyIENsaXBib2FyZFBhc3RlOwp2YXIgaW5pdF9jbGlwYm9hcmRfcGFzdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wYXN0ZS5qcyIoKSB7CiAgICBDbGlwYm9hcmRQYXN0ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE0aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjEuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4IDQtNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAxLjc5My0xLjExMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGVuLWxpbmUuanMKdmFyIENsaXBib2FyZFBlbkxpbmU7CnZhciBpbml0X2NsaXBib2FyZF9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi1saW5lLmpzIigpIHsKICAgIENsaXBib2FyZFBlbkxpbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA0SDZhMiAyIDAgMCAwLTIgMnYxNGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMS43MyAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTIuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGVuLmpzCnZhciBDbGlwYm9hcmRQZW47CnZhciBpbml0X2NsaXBib2FyZF9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wZW4uanMiKCkgewogICAgQ2xpcGJvYXJkUGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzLjVWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuMzc4IDE1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBsdXMuanMKdmFyIENsaXBib2FyZFBsdXM7CnZhciBpbml0X2NsaXBib2FyZF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtcGx1cy5qcyIoKSB7CiAgICBDbGlwYm9hcmRQbHVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjQiLCB4OiAiOCIsIHk6ICIyIiwgcng6ICIxIiwgcnk6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDRoMmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3YtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC10eXBlLmpzCnZhciBDbGlwYm9hcmRUeXBlOwp2YXIgaW5pdF9jbGlwYm9hcmRfdHlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXR5cGUuanMiKCkgewogICAgQ2xpcGJvYXJkVHlwZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEydi0xaDZ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDExdjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQteC5qcwp2YXIgQ2xpcGJvYXJkWDsKdmFyIGluaXRfY2xpcGJvYXJkX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC14LmpzIigpIHsKICAgIENsaXBib2FyZFggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICI4IiwgeTogIjIiLCByeDogIjEiLCByeTogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJWNmEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTEtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgNiA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLmpzCnZhciBDbGlwYm9hcmQ7CnZhciBpbml0X2NsaXBib2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLmpzIigpIHsKICAgIENsaXBib2FyZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI0IiwgeDogIjgiLCB5OiAiMiIsIHJ4OiAiMSIsIHJ5OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0aDJhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEuanMKdmFyIENsb2NrMTsKdmFyIGluaXRfY2xvY2tfMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMS5qcyIoKSB7CiAgICBDbG9jazEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMi00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTAuanMKdmFyIENsb2NrMTA7CnZhciBpbml0X2Nsb2NrXzEwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMC5qcyIoKSB7CiAgICBDbG9jazEwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bC00LTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMS5qcwp2YXIgQ2xvY2sxMTsKdmFyIGluaXRfY2xvY2tfMTEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTExLmpzIigpIHsKICAgIENsb2NrMTEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsLTItNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEyLmpzCnZhciBDbG9jazEyOwp2YXIgaW5pdF9jbG9ja18xMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTIuanMiKCkgewogICAgQ2xvY2sxMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTIuanMKdmFyIENsb2NrMjsKdmFyIGluaXRfY2xvY2tfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMi5qcyIoKSB7CiAgICBDbG9jazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNC0yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMy5qcwp2YXIgQ2xvY2szOwp2YXIgaW5pdF9jbG9ja18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0zLmpzIigpIHsKICAgIENsb2NrMyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmg0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNC5qcwp2YXIgQ2xvY2s0Owp2YXIgaW5pdF9jbG9ja180ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay00LmpzIigpIHsKICAgIENsb2NrNCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nmw0IDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay01LmpzCnZhciBDbG9jazU7CnZhciBpbml0X2Nsb2NrXzUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTUuanMiKCkgewogICAgQ2xvY2s1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDIgNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTYuanMKdmFyIENsb2NrNjsKdmFyIGluaXRfY2xvY2tfNiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNi5qcyIoKSB7CiAgICBDbG9jazYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNy5qcwp2YXIgQ2xvY2s3Owp2YXIgaW5pdF9jbG9ja183ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay03LmpzIigpIHsKICAgIENsb2NrNyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtMiA0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOC5qcwp2YXIgQ2xvY2s4Owp2YXIgaW5pdF9jbG9ja184ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay04LmpzIigpIHsKICAgIENsb2NrOCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwtNCAyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOS5qcwp2YXIgQ2xvY2s5Owp2YXIgaW5pdF9jbG9ja185ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay05LmpzIigpIHsKICAgIENsb2NrOSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2Nkg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYWxlcnQuanMKdmFyIENsb2NrQWxlcnQ7CnZhciBpbml0X2Nsb2NrX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hbGVydC5qcyIoKSB7CiAgICBDbG9ja0FsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIxaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS4yNSA4LjJBMTAgMTAgMCAxIDAgMTYgMjEuMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hcnJvdy1kb3duLmpzCnZhciBDbG9ja0Fycm93RG93bjsKdmFyIGluaXRfY2xvY2tfYXJyb3dfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctZG93bi5qcyIoKSB7CiAgICBDbG9ja0Fycm93RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDZ2NmwyIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMzM3IDIxLjk5NGExMCAxMCAwIDEgMSA5LjU4OC04Ljc2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0IDQgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE0djgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1hcnJvdy11cC5qcwp2YXIgQ2xvY2tBcnJvd1VwOwp2YXIgaW5pdF9jbG9ja19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctdXAuanMiKCkgewogICAgQ2xvY2tBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDEuNTYuNzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMjI3IDIxLjkyNWExMCAxMCAwIDEgMSA4Ljc2Ny05LjU4OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOCA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stY2hlY2suanMKdmFyIENsb2NrQ2hlY2s7CnZhciBpbml0X2Nsb2NrX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1jaGVjay5qcyIoKSB7CiAgICBDbG9ja0NoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmExMCAxMCAwIDEgMC0xMSA5Ljk1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE2LTUuNSA1LjVMMTQgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1mYWRpbmcuanMKdmFyIENsb2NrRmFkaW5nOwp2YXIgaW5pdF9jbG9ja19mYWRpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWZhZGluZy5qcyIoKSB7CiAgICBDbG9ja0ZhZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTAgMTAgMCAwIDEgNy4zOCAxNi43NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsNCAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSA4Ljg3NWExMCAxMCAwIDAgMC0uNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuODMgMTZhMTAgMTAgMCAwIDAgMi40MyAzLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC42MzYgNS4yMzVhMTAgMTAgMCAwIDEgLjg5MS0uODU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNjQ0IDIxLjQyYTEwIDEwIDAgMCAwIDcuNjMxLS4zOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLXBsdXMuanMKdmFyIENsb2NrUGx1czsKdmFyIGluaXRfY2xvY2tfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stcGx1cy5qcyIoKSB7CiAgICBDbG9ja1BsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2djZsMy42NDQgMS44MjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjkyIDEzLjI2N2ExMCAxMCAwIDEgMC04LjY1MyA4LjY1MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzCnZhciBDbG9jazsKdmFyIGluaXRfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLmpzIigpIHsKICAgIENsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY2bDQgMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3NlZC1jYXB0aW9uLmpzCnZhciBDbG9zZWRDYXB0aW9uOwp2YXIgaW5pdF9jbG9zZWRfY2FwdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvc2VkLWNhcHRpb24uanMiKCkgewogICAgQ2xvc2VkQ2FwdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuMTdhMyAzIDAgMSAwIDAgNS42NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjE3YTMgMyAwIDEgMCAwIDUuNjYiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1hbGVydC5qcwp2YXIgQ2xvdWRBbGVydDsKdmFyIGluaXRfY2xvdWRfYWxlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWFsZXJ0LmpzIigpIHsKICAgIENsb3VkQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOGguNWExIDEgMCAwIDAgMC05aC0xLjc5QTcgNyAwIDEgMCA3IDE3LjcwOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWJhY2t1cC5qcwp2YXIgQ2xvdWRCYWNrdXA7CnZhciBpbml0X2Nsb3VkX2JhY2t1cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtYmFja3VwLmpzIigpIHsKICAgIENsb3VkQmFja3VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNSA4aC0xLjc5QTcgNyAwIDEgMCAzIDEzLjYwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTUgNSAwIDAgMCA5LTMgNC41IDQuNSAwIDAgMC00LjUtNC41IDQuODIgNC44MiAwIDAgMC0zLjQxIDEuNDFMNyAxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWNoZWNrLmpzCnZhciBDbG91ZENoZWNrOwp2YXIgaW5pdF9jbG91ZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY2hlY2suanMiKCkgewogICAgQ2xvdWRDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE1LTUuNSA1LjVMOSAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE3Ljc0M0E3IDcgMCAxIDEgMTUuNzEgMTBoMS43OWE0LjUgNC41IDAgMCAxIDEuNSA4Ljc0MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWNvZy5qcwp2YXIgQ2xvdWRDb2c7CnZhciBpbml0X2Nsb3VkX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY29nLmpzIigpIHsKICAgIENsb3VkQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuODUyIDE5Ljc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggMTQuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0OCAxOS43NzJhMyAzIDAgMSAwLTIuMjk2LTUuNTQ0bC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMgMjAuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDE1Ljg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTguMTQ4LjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4yIDE1LjFhNyA3IDAgMSAxIDkuOTMtOS44NThBNyA3IDAgMCAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yMjggMTUuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxOC4xNDgtLjkyMy4zODMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kb3dubG9hZC5qcwp2YXIgQ2xvdWREb3dubG9hZDsKdmFyIGluaXRfY2xvdWRfZG93bmxvYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRvd25sb2FkLmpzIigpIHsKICAgIENsb3VkRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4bC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMjEgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMzkzIDE1LjI2OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi40MzYgOC4yODQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kcml6emxlLmpzCnZhciBDbG91ZERyaXp6bGU7CnZhciBpbml0X2Nsb3VkX2RyaXp6bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRyaXp6bGUuanMiKCkgewogICAgQ2xvdWREcml6emxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNC44OTlBNyA3IDAgMSAxIDE1LjcxIDhoMS43OWE0LjUgNC41IDAgMCAxIDIuNSA4LjI0MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1mb2cuanMKdmFyIENsb3VkRm9nOwp2YXIgaW5pdF9jbG91ZF9mb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWZvZy5qcyIoKSB7CiAgICBDbG91ZEZvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdINyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMUg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtaGFpbC5qcwp2YXIgQ2xvdWRIYWlsOwp2YXIgaW5pdF9jbG91ZF9oYWlsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1oYWlsLmpzIigpIHsKICAgIENsb3VkSGFpbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbGlnaHRuaW5nLmpzCnZhciBDbG91ZExpZ2h0bmluZzsKdmFyIGluaXRfY2xvdWRfbGlnaHRuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1saWdodG5pbmcuanMiKCkgewogICAgQ2xvdWRMaWdodG5pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2LjMyNkE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgLjUgOC45NzMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTItMyA1aDRsLTMgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW1vb24tcmFpbi5qcwp2YXIgQ2xvdWRNb29uUmFpbjsKdmFyIGluaXRfY2xvdWRfbW9vbl9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1tb29uLXJhaW4uanMiKCkgewogICAgQ2xvdWRNb29uUmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguMzc2IDE0LjUxMmE2IDYgMCAwIDAgMy40NjEtNC4xMjdjLjE0OC0uNjI1LS42NTktLjk3LTEuMjQ4LS43MTRhNCA0IDAgMCAxLTUuMjU5LTUuMjZjLjI1NS0uNTg5LS4wOS0xLjM5NS0uNzE2LTEuMjQ4YTYgNiAwIDAgMC00LjU5NCA1LjM2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhNSA1IDAgMSAxIDguOS00SDEzYTMgMyAwIDAgMSAyIDUuMjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOXYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi5qcwp2YXIgQ2xvdWRNb29uOwp2YXIgaW5pdF9jbG91ZF9tb29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1tb29uLmpzIigpIHsKICAgIENsb3VkTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2YTMgMyAwIDAgMSAwIDZIN2E1IDUgMCAxIDEgNC45LTZ6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM3NiAxNC41MTJhNiA2IDAgMCAwIDMuNDYxLTQuMTI3Yy4xNDgtLjYyNS0uNjU5LS45Ny0xLjI0OC0uNzE0YTQgNCAwIDAgMS01LjI1OS01LjI2Yy4yNTUtLjU4OS0uMDktMS4zOTUtLjcxNi0xLjI0OGE2IDYgMCAwIDAtNC41OTQgNS4zNiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4td2luZC5qcwp2YXIgQ2xvdWRSYWluV2luZDsKdmFyIGluaXRfY2xvdWRfcmFpbl93aW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLXdpbmQuanMiKCkgewogICAgQ2xvdWRSYWluV2luZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS4yIDIyIDMtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEzLTMgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMy0zIDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1vZmYuanMKdmFyIENsb3VkT2ZmOwp2YXIgaW5pdF9jbG91ZF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW9mZi5qcyIoKSB7CiAgICBDbG91ZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01Ljc4MiA1Ljc4MkE3IDcgMCAwIDAgOSAxOWg4LjVhNC41IDQuNSAwIDAgMCAxLjMwNy0uMTkzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjUzMiAxNi41QTQuNSA0LjUgMCAwIDAgMTcuNSAxMGgtMS43OUE3LjAwOCA3LjAwOCAwIDAgMCAxMCA1LjA3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtcmFpbi5qcwp2YXIgQ2xvdWRSYWluOwp2YXIgaW5pdF9jbG91ZF9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1yYWluLmpzIigpIHsKICAgIENsb3VkUmFpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTQuODk5QTcgNyAwIDEgMSAxNS43MSA4aDEuNzlhNC41IDQuNSAwIDAgMSAyLjUgOC4yNDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXNub3cuanMKdmFyIENsb3VkU25vdzsKdmFyIGluaXRfY2xvdWRfc25vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc25vdy5qcyIoKSB7CiAgICBDbG91ZFNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXN1bi1yYWluLmpzCnZhciBDbG91ZFN1blJhaW47CnZhciBpbml0X2Nsb3VkX3N1bl9yYWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zdW4tcmFpbi5qcyIoKSB7CiAgICBDbG91ZFN1blJhaW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyA0LjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjA3IDQuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1Ljk0NyAxMi42NWE0IDQgMCAwIDAtNS45MjUtNC4xMjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGE1IDUgMCAxIDEgOC45LTRIMTNhMyAzIDAgMCAxIDIgNS4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTl2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXN1bi5qcwp2YXIgQ2xvdWRTdW47CnZhciBpbml0X2Nsb3VkX3N1biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3VuLmpzIigpIHsKICAgIENsb3VkU3VuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTQuOTMgNC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS45NDcgMTIuNjVhNCA0IDAgMCAwLTUuOTI1LTQuMTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIySDdhNSA1IDAgMSAxIDQuOS02SDEzYTMgMyAwIDAgMSAwIDZaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3luYy5qcwp2YXIgQ2xvdWRTeW5jOwp2YXIgaW5pdF9jbG91ZF9zeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zeW5jLmpzIigpIHsKICAgIENsb3VkU3luYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNGgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC45OTYgMTUuMjUxQTQuNSA0LjUgMCAwIDAgMTcuNDk1IDhoLTEuNzlhNyA3IDAgMSAwLTEyLjcwOSA1LjYwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEwdjRoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDE0IDEuNTM1LTEuNjA1YTUgNSAwIDAgMSA4IDEuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXVwbG9hZC5qcwp2YXIgQ2xvdWRVcGxvYWQ7CnZhciBpbml0X2Nsb3VkX3VwbG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtdXBsb2FkLmpzIigpIHsKICAgIENsb3VkVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0Ljg5OUE3IDcgMCAxIDEgMTUuNzEgOGgxLjc5YTQuNSA0LjUgMCAwIDEgMi41IDguMjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTcgNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLmpzCnZhciBDbG91ZDsKdmFyIGluaXRfY2xvdWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLmpzIigpIHsKICAgIENsb3VkID0gW1sicGF0aCIsIHsgZDogIk0xNy41IDE5SDlhNyA3IDAgMSAxIDYuNzEtOWgxLjc5YTQuNSA0LjUgMCAxIDEgMCA5WiIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanMKdmFyIENsb3VkeTsKdmFyIGluaXRfY2xvdWR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanMiKCkgewogICAgQ2xvdWR5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSAyMUg5YTcgNyAwIDEgMSA2LjcxLTloMS43OWE0LjUgNC41IDAgMSAxIDAgOVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBhMyAzIDAgMCAwLTMtM2gtMi4yMDdhNS41MDIgNS41MDIgMCAwIDAtMTAuNzAyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanMKdmFyIENsb3ZlcjsKdmFyIGluaXRfY2xvdmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanMiKCkgewogICAgQ2xvdmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMTcgNy44MyAyIDIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMDIgMTJhMi44MjcgMi44MjcgMCAxIDEgMy44MS00LjE3QTIuODI3IDIuODI3IDAgMSAxIDEyIDQuMDJhMi44MjcgMi44MjcgMCAxIDEgNC4xNyAzLjgxQTIuODI3IDIuODI3IDAgMSAxIDE5Ljk4IDEyYTIuODI3IDIuODI3IDAgMSAxLTMuODEgNC4xN0EyLjgyNyAyLjgyNyAwIDEgMSAxMiAxOS45OGEyLjgyNyAyLjgyNyAwIDEgMS00LjE3LTMuODFBMSAxIDAgMSAxIDQgMTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy44MyA3LjgzIDguMzQgOC4zNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsdWIuanMKdmFyIENsdWI7CnZhciBpbml0X2NsdWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsdWIuanMiKCkgewogICAgQ2x1YiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuMjggOS4wNWE1LjUgNS41IDAgMSAwLTEwLjU2IDBBNS41IDUuNSAwIDEgMCAxMiAxNy42NmE1LjUgNS41IDAgMSAwIDUuMjgtOC42WiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNjZMMTIgMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlLXhtbC5qcwp2YXIgQ29kZVhtbDsKdmFyIGluaXRfY29kZV94bWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGUteG1sLmpzIigpIHsKICAgIENvZGVYbWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOC00IDQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgNC01IDE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS5qcwp2YXIgQ29kZTsKdmFyIGluaXRfY29kZTQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGUuanMiKCkgewogICAgQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE4IDYtNi02LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2LTYgNiA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlcGVuLmpzCnZhciBDb2RlcGVuOwp2YXIgaW5pdF9jb2RlcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlcGVuLmpzIigpIHsKICAgIENvZGVwZW4gPSBbCiAgICAgIFsicG9seWdvbiIsIHsgcG9pbnRzOiAiMTIgMiAyMiA4LjUgMjIgMTUuNSAxMiAyMiAyIDE1LjUgMiA4LjUgMTIgMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxNS41IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgOC41IDEyIDE1LjUgMiA4LjUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyIDE1LjUgMTIgOC41IDIyIDE1LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICI4LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2Rlc2FuZGJveC5qcwp2YXIgQ29kZXNhbmRib3g7CnZhciBpbml0X2NvZGVzYW5kYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2Rlc2FuZGJveC5qcyIoKSB7CiAgICBDb2Rlc2FuZGJveCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDE2VjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGw3LTRBMiAyIDAgMCAwIDIxIDE2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjcuNSA0LjIxIDEyIDYuODEgMTYuNSA0LjIxIiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiNy41IDE5Ljc5IDcuNSAxNC42IDMgMTIiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIyMSAxMiAxNi41IDE0LjYgMTYuNSAxOS43OSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjcgNi45NiAxMiAxMi4wMSAyMC43MyA2Ljk2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIuMDgiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzCnZhciBDb2ZmZWU7CnZhciBpbml0X2NvZmZlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzIigpIHsKICAgIENvZmZlZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgOGExIDEgMCAwIDEgMSAxdjhhNCA0IDAgMCAxLTQgNEg3YTQgNCAwIDAgMS00LTRWOWExIDEgMCAwIDEgMS0xaDE0YTQgNCAwIDEgMSAwIDhoLTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2lucy5qcwp2YXIgQ29pbnM7CnZhciBpbml0X2NvaW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2lucy5qcyIoKSB7CiAgICBDb2lucyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiOCIsIHI6ICI2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjA5IDEwLjM3QTYgNiAwIDEgMSAxMC4zNCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDZoMXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjcxIDEzLjg4LjcuNzEtMi44MiAyLjgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29nLmpzCnZhciBDb2c7CnZhciBpbml0X2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29nLmpzIigpIHsKICAgIENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEwLjI3IDcgMy4zNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMSAxMy43My00IDYuOTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjAuNjYtMS0xLjczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMuMzQtMSAxLjczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC42NiAxNy0xLjczLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNjYgNy0xLjczIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zNCAxNyAxLjczLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zNCA3IDEuNzMgMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTIuanMKdmFyIENvbHVtbnMyOwp2YXIgaW5pdF9jb2x1bW5zXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtMi5qcyIoKSB7CiAgICBDb2x1bW5zMiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMtY29nLmpzCnZhciBDb2x1bW5zM0NvZzsKdmFyIGluaXRfY29sdW1uc18zX2NvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLWNvZy5qcyIoKSB7CiAgICBDb2x1bW5zM0NvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zIDE5LjYgMS0uNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yIDE2LjktLjktLjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNiAyMS43LjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuOCAxNS4zLS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMSAxNS4yLjMtLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNiAyMS43LS40LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyAxNi44IDEtLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNyAxOS40LS45LS4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLmpzCnZhciBDb2x1bW5zMzsKdmFyIGluaXRfY29sdW1uc18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMuanMiKCkgewogICAgQ29sdW1uczMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbHVtbnMtNC5qcwp2YXIgQ29sdW1uczQ7CnZhciBpbml0X2NvbHVtbnNfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy00LmpzIigpIHsKICAgIENvbHVtbnM0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy41IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21iaW5lLmpzCnZhciBDb21iaW5lOwp2YXIgaW5pdF9jb21iaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21iaW5lLmpzIigpIHsKICAgIENvbWJpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzYTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMSAxIDAgMCAxIDEgMXY1YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxNSAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTNINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanMKdmFyIENvbW1hbmQ7CnZhciBpbml0X2NvbW1hbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanMiKCkgewogICAgQ29tbWFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZ2MTJhMyAzIDAgMSAwIDMtM0g2YTMgMyAwIDEgMCAzIDNWNmEzIDMgMCAxIDAtMyAzaDEyYTMgMyAwIDEgMC0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzCnZhciBDb21wYXNzOwp2YXIgaW5pdF9jb21wYXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzIigpIHsKICAgIENvbXBhc3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi4yNCA3Ljc2LTEuODA0IDUuNDExYTIgMiAwIDAgMS0xLjI2NSAxLjI2NUw3Ljc2IDE2LjI0bDEuODA0LTUuNDExYTIgMiAwIDAgMSAxLjI2NS0xLjI2NXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wb25lbnQuanMKdmFyIENvbXBvbmVudDsKdmFyIGluaXRfY29tcG9uZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wb25lbnQuanMiKCkgewogICAgQ29tcG9uZW50ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuNTM2IDExLjI5M2ExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NiAyLjM3N2ExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3N2ExIDEgMCAwIDAgMC0xLjQxNGwtMi4zNzctMi4zNzdhMSAxIDAgMCAwLTEuNDE0IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMjk3IDExLjI5M2ExIDEgMCAwIDAgMCAxLjQxNGwyLjM3NyAyLjM3N2ExIDEgMCAwIDAgMS40MTQgMGwyLjM3Ny0yLjM3N2ExIDEgMCAwIDAgMC0xLjQxNEw2LjA4OCA4LjkxNmExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC45MTYgMTcuOTEyYTEgMSAwIDAgMCAwIDEuNDE1bDIuMzc3IDIuMzc2YTEgMSAwIDAgMCAxLjQxNCAwbDIuMzc3LTIuMzc2YTEgMSAwIDAgMCAwLTEuNDE1bC0yLjM3Ny0yLjM3NmExIDEgMCAwIDAtMS40MTQgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC45MTYgNC42NzRhMSAxIDAgMCAwIDAgMS40MTRsMi4zNzcgMi4zNzZhMSAxIDAgMCAwIDEuNDE0IDBsMi4zNzctMi4zNzZhMSAxIDAgMCAwIDAtMS40MTRsLTIuMzc3LTIuMzc3YTEgMSAwIDAgMC0xLjQxNCAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXB1dGVyLmpzCnZhciBDb21wdXRlcjsKdmFyIGluaXRfY29tcHV0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbXB1dGVyLmpzIigpIHsKICAgIENvbXB1dGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICI4IiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbmNpZXJnZS1iZWxsLmpzCnZhciBDb25jaWVyZ2VCZWxsOwp2YXIgaW5pdF9jb25jaWVyZ2VfYmVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uY2llcmdlLWJlbGwuanMiKCkgewogICAgQ29uY2llcmdlQmVsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMjBhMSAxIDAgMCAxLTEtMXYtMWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2MWExIDEgMCAwIDEtMSAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNmE4IDggMCAxIDAtMTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNGg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uZS5qcwp2YXIgQ29uZTsKdmFyIGluaXRfY29uZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29uZS5qcyIoKSB7CiAgICBDb25lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuOSAxOC41NS04LTE1Ljk4YTEgMSAwIDAgMC0xLjggMGwtOCAxNS45OCIgfV0sCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByeDogIjkiLCByeTogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanMKdmFyIENvbnN0cnVjdGlvbjsKdmFyIGluaXRfY29uc3RydWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanMiKCkgewogICAgQ29uc3RydWN0aW9uID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjYiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTR2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQgMi4zIDYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA2IDcuNyA3LjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDggOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhY3Qtcm91bmQuanMKdmFyIENvbnRhY3RSb3VuZDsKdmFyIGluaXRfY29udGFjdF9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC1yb3VuZC5qcyIoKSB7CiAgICBDb250YWN0Um91bmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTE1IDIyYTYgNiAwIDAgMC0xMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjQiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250YWN0LmpzCnZhciBDb250YWN0Owp2YXIgaW5pdF9jb250YWN0MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC5qcyIoKSB7CiAgICBDb250YWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJ2LTJhMiAyIDAgMCAxIDItMmg2YTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJ2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMSIsIHI6ICIzIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFpbmVyLmpzCnZhciBDb250YWluZXI7CnZhciBpbml0X2NvbnRhaW5lcjMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhaW5lci5qcyIoKSB7CiAgICBDb250YWluZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA3LjdjMC0uNi0uNC0xLjItLjgtMS41bC02LjMtMy45YTEuNzIgMS43MiAwIDAgMC0xLjcgMGwtMTAuMyA2Yy0uNS4yLS45LjgtLjkgMS40djYuNmMwIC41LjQgMS4yLjggMS41bDYuMyAzLjlhMS43MiAxLjcyIDAgMCAwIDEuNyAwbDEwLjMtNmMuNS0uMy45LTEgLjktMS41WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMS45VjE0TDIuMSA5LjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgMTEuOS02LjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTkuOHYtOC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE3LjVWOS40IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udHJhc3QuanMKdmFyIENvbnRyYXN0Owp2YXIgaW5pdF9jb250cmFzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udHJhc3QuanMiKCkgewogICAgQ29udHJhc3QgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGE2IDYgMCAwIDAgMC0xMnYxMnoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb29raWUuanMKdmFyIENvb2tpZTsKdmFyIGluaXRfY29va2llID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb29raWUuanMiKCkgewogICAgQ29va2llID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDEgMCAxMCAxMCA0IDQgMCAwIDEtNS01IDQgNCAwIDAgMS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDguNXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTUuNXYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0di4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvb2tpbmctcG90LmpzCnZhciBDb29raW5nUG90Owp2YXIgaW5pdF9jb29raW5nX3BvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2luZy1wb3QuanMiKCkgewogICAgQ29va2luZ1BvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJ2OGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTItMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDggMTYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04Ljg2IDYuNzgtLjQ1LTEuODFhMiAyIDAgMCAxIDEuNDUtMi40M2wxLjk0LS40OGEyIDIgMCAwIDEgMi40MyAxLjQ2bC40NSAxLjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LWNoZWNrLmpzCnZhciBDb3B5Q2hlY2s7CnZhciBpbml0X2NvcHlfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktY2hlY2suanMiKCkgewogICAgQ29weUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTUgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LW1pbnVzLmpzCnZhciBDb3B5TWludXM7CnZhciBpbml0X2NvcHlfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktbWludXMuanMiKCkgewogICAgQ29weU1pbnVzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxNSIsIHkyOiAiMTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS1wbHVzLmpzCnZhciBDb3B5UGx1czsKdmFyIGluaXRfY29weV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXBsdXMuanMiKCkgewogICAgQ29weVBsdXMgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXNsYXNoLmpzCnZhciBDb3B5U2xhc2g7CnZhciBpbml0X2NvcHlfc2xhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktc2xhc2guanMiKCkgewogICAgQ29weVNsYXNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjE4IiwgeTE6ICIxOCIsIHkyOiAiMTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS5qcwp2YXIgQ29weTsKdmFyIGluaXRfY29weSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS5qcyIoKSB7CiAgICBDb3B5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjgiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNmMtMS4xIDAtMi0uOS0yLTJWNGMwLTEuMS45LTIgMi0yaDEwYzEuMSAwIDIgLjkgMiAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS14LmpzCnZhciBDb3B5WDsKdmFyIGluaXRfY29weV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LXguanMiKCkgewogICAgQ29weVggPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTgiLCB5MTogIjE4IiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjE0IiwgeDogIjgiLCB5OiAiOCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2Yy0xLjEgMC0yLS45LTItMlY0YzAtMS4xLjktMiAyLTJoMTBjMS4xIDAgMiAuOSAyIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5bGVmdC5qcwp2YXIgQ29weWxlZnQ7CnZhciBpbml0X2NvcHlsZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5bGVmdC5qcyIoKSB7CiAgICBDb3B5bGVmdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTcgMTQuODNhNCA0IDAgMSAwIDAtNS42NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHlyaWdodC5qcwp2YXIgQ29weXJpZ2h0Owp2YXIgaW5pdF9jb3B5cmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHlyaWdodC5qcyIoKSB7CiAgICBDb3B5cmlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC44MyAxNC44M2E0IDQgMCAxIDEgMC01LjY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWRvd24tcmlnaHQuanMKdmFyIENvcm5lckRvd25SaWdodDsKdmFyIGluaXRfY29ybmVyX2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLXJpZ2h0LmpzIigpIHsKICAgIENvcm5lckRvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwIDUgNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djdhNCA0IDAgMCAwIDQgNGgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanMKdmFyIENvcm5lckRvd25MZWZ0Owp2YXIgaW5pdF9jb3JuZXJfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1sZWZ0LmpzIigpIHsKICAgIENvcm5lckRvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNHY3YTQgNCAwIDAgMS00IDRINCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEwLTUgNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItbGVmdC1kb3duLmpzCnZhciBDb3JuZXJMZWZ0RG93bjsKdmFyIGluaXRfY29ybmVyX2xlZnRfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtZG93bi5qcyIoKSB7CiAgICBDb3JuZXJMZWZ0RG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE1LTUgNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgNGgtN2E0IDQgMCAwIDAtNCA0djEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtdXAuanMKdmFyIENvcm5lckxlZnRVcDsKdmFyIGluaXRfY29ybmVyX2xlZnRfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1sZWZ0LXVwLmpzIigpIHsKICAgIENvcm5lckxlZnRVcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDkgOSA0IDQgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGgtN2E0IDQgMCAwIDEtNC00VjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItcmlnaHQtZG93bi5qcwp2YXIgQ29ybmVyUmlnaHREb3duOwp2YXIgaW5pdF9jb3JuZXJfcmlnaHRfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXJpZ2h0LWRvd24uanMiKCkgewogICAgQ29ybmVyUmlnaHREb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTUgNSA1IDUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDRoN2E0IDQgMCAwIDEgNCA0djEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXJpZ2h0LXVwLmpzCnZhciBDb3JuZXJSaWdodFVwOwp2YXIgaW5pdF9jb3JuZXJfcmlnaHRfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1yaWdodC11cC5qcyIoKSB7CiAgICBDb3JuZXJSaWdodFVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOSA1LTUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjBoN2E0IDQgMCAwIDAgNC00VjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItdXAtbGVmdC5qcwp2YXIgQ29ybmVyVXBMZWZ0Owp2YXIgaW5pdF9jb3JuZXJfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXVwLWxlZnQuanMiKCkgewogICAgQ29ybmVyVXBMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjB2LTdhNCA0IDAgMCAwLTQtNEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTQgNCA5bDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci11cC1yaWdodC5qcwp2YXIgQ29ybmVyVXBSaWdodDsKdmFyIGluaXRfY29ybmVyX3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItdXAtcmlnaHQuanMiKCkgewogICAgQ29ybmVyVXBSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE0IDUtNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyMHYtN2E0IDQgMCAwIDEgNC00aDEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzCnZhciBDcHU7CnZhciBpbml0X2NwdSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzIigpIHsKICAgIENwdSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxN2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAydjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI0IiwgeTogIjQiLCB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI4IiwgeTogIjgiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JlYXRpdmUtY29tbW9ucy5qcwp2YXIgQ3JlYXRpdmVDb21tb25zOwp2YXIgaW5pdF9jcmVhdGl2ZV9jb21tb25zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcmVhdGl2ZS1jb21tb25zLmpzIigpIHsKICAgIENyZWF0aXZlQ29tbW9ucyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuM2EyLjggMi44IDAgMCAwLTMuNSAxIDMuMSAzLjEgMCAwIDAgMCAzLjQgMi43IDIuNyAwIDAgMCAzLjUgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5LjNhMi44IDIuOCAwIDAgMC0zLjUgMSAzLjEgMy4xIDAgMCAwIDAgMy40IDIuNyAyLjcgMCAwIDAgMy41IDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcmVkaXQtY2FyZC5qcwp2YXIgQ3JlZGl0Q2FyZDsKdmFyIGluaXRfY3JlZGl0X2NhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NyZWRpdC1jYXJkLmpzIigpIHsKICAgIENyZWRpdENhcmQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiNSIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzCnZhciBDcm9pc3NhbnQ7CnZhciBpbml0X2Nyb2lzc2FudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzIigpIHsKICAgIENyb2lzc2FudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjIgMThINC43NzRhMS41IDEuNSAwIDAgMS0xLjM1Mi0uOTcgMTEgMTEgMCAwIDEgLjEzMi02LjQ4NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMC4yVjQuNzc0YTEuNSAxLjUgMCAwIDAtLjk3LTEuMzUyIDExIDExIDAgMCAwLTYuNDg2LjEzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA1YTQgMyAwIDAgMSA0IDMgMiAyIDAgMCAxLTIgMiAxMCAxMCAwIDAgMC01LjEzOSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMThhMyA0IDAgMCAwIDMgNCAyIDIgMCAwIDAgMi0yIDEwIDEwIDAgMCAxIDEuNDItNS4xNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjcwOSAyLjU1NGExMCAxMCAwIDAgMC02LjE1NSA2LjE1NSAxLjUgMS41IDAgMCAwIC42NzYgMS42MjZsOS44MDcgNS40MmEyIDIgMCAwIDAgMi43MTgtMi43MThsLTUuNDItOS44MDdhMS41IDEuNSAwIDAgMC0xLjYyNi0uNjc2IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qcwp2YXIgQ3JvcDsKdmFyIGluaXRfY3JvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qcyIoKSB7CiAgICBDcm9wID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAydjE0YTIgMiAwIDAgMCAyIDJoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWOGEyIDIgMCAwIDAtMi0ySDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcm9zcy5qcwp2YXIgQ3Jvc3M7CnZhciBpbml0X2Nyb3NzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jcm9zcy5qcyIoKSB7CiAgICBDcm9zcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgOWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmg0YTEgMSAwIDAgMSAxIDF2NGEyIDIgMCAwIDAgMiAyaDJhMiAyIDAgMCAwIDItMnYtNGExIDEgMCAwIDEgMS0xaDRhMiAyIDAgMCAwIDItMnYtMmEyIDIgMCAwIDAtMi0yaC00YTEgMSAwIDAgMS0xLTFWNGEyIDIgMCAwIDAtMi0yaC0yYTIgMiAwIDAgMC0yIDJ2NGExIDEgMCAwIDEtMSAxeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzaGFpci5qcwp2YXIgQ3Jvc3NoYWlyOwp2YXIgaW5pdF9jcm9zc2hhaXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzaGFpci5qcyIoKSB7CiAgICBDcm9zc2hhaXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMTgiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI2IiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanMKdmFyIENyb3duOwp2YXIgaW5pdF9jcm93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanMiKCkgewogICAgQ3Jvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS41NjIgMy4yNjZhLjUuNSAwIDAgMSAuODc2IDBMMTUuMzkgOC44N2ExIDEgMCAwIDAgMS41MTYuMjk0TDIxLjE4MyA1LjVhLjUuNSAwIDAgMSAuNzk4LjUxOWwtMi44MzQgMTAuMjQ2YTEgMSAwIDAgMS0uOTU2LjczNEg1LjgxYTEgMSAwIDAgMS0uOTU3LS43MzRMMi4wMiA2LjAyYS41LjUgMCAwIDEgLjc5OC0uNTE5bDQuMjc2IDMuNjY0YTEgMSAwIDAgMCAxLjUxNi0uMjk0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxaDE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Vib2lkLmpzCnZhciBDdWJvaWQ7CnZhciBpbml0X2N1Ym9pZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Vib2lkLmpzIigpIHsKICAgIEN1Ym9pZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjEyIDYuNC02LjA1LTQuMDZhMiAyIDAgMCAwLTIuMTctLjA1TDIuOTUgOC40MWEyIDIgMCAwIDAtLjk1IDEuN3Y1LjgyYTIgMiAwIDAgMCAuODggMS42Nmw2LjA1IDQuMDdhMiAyIDAgMCAwIDIuMTcuMDVsOS45NS02LjEyYTIgMiAwIDAgMCAuOTUtMS43VjguMDZhMiAyIDAgMCAwLS44OC0xLjY2WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtOEwyLjI1IDkuMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTQgMTEuNzctNi44NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N1cC1zb2RhLmpzCnZhciBDdXBTb2RhOwp2YXIgaW5pdF9jdXBfc29kYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3VwLXNvZGEuanMiKCkgewogICAgQ3VwU29kYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOCAxLjc1IDEyLjI4YTIgMiAwIDAgMCAyIDEuNzJoNC41NGEyIDIgMCAwIDAgMi0xLjcyTDE4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3IDYuNDcgMCAwIDAgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDggMS02aDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdXJyZW5jeS5qcwp2YXIgQ3VycmVuY3k7CnZhciBpbml0X2N1cnJlbmN5MiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvY3VycmVuY3kuanMiKCkgewogICAgQ3VycmVuY3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjMiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB4MjogIjE4IiwgeTE6ICIzIiwgeTI6ICI2IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjMiLCB4MjogIjYiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTgiLCB5MTogIjIxIiwgeTI6ICIxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N5bGluZGVyLmpzCnZhciBDeWxpbmRlcjsKdmFyIGluaXRfY3lsaW5kZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N5bGluZGVyLmpzIigpIHsKICAgIEN5bGluZGVyID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1djE0YTkgMyAwIDAgMCAxOCAwVjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanMKdmFyIERhbTsKdmFyIGluaXRfZGFtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanMiKCkgewogICAgRGFtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTEuMzFjMS4xNy41NiAxLjU0IDEuNjkgMy41IDEuNjkgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjc1IDE4Yy4zNS41IDEuNDUgMSAyLjc1IDEgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM2ExIDEgMCAwIDAtMSAxdjE2YTEgMSAwIDAgMCAxIDFoNGExIDEgMCAwIDAgMS0xTDEwIDRhMSAxIDAgMCAwLTEtMXoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS1iYWNrdXAuanMKdmFyIERhdGFiYXNlQmFja3VwOwp2YXIgaW5pdF9kYXRhYmFzZV9iYWNrdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RhdGFiYXNlLWJhY2t1cC5qcyIoKSB7CiAgICBEYXRhYmFzZUJhY2t1cCA9IFsKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICI1Iiwgcng6ICI5Iiwgcnk6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSAzIDAgMCAwIDUgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5LjNWNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTRhOSAzIDAgMCAwIDYuNDcgMi44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjBhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMiAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RhdGFiYXNlLXphcC5qcwp2YXIgRGF0YWJhc2VaYXA7CnZhciBpbml0X2RhdGFiYXNlX3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UtemFwLmpzIigpIHsKICAgIERhdGFiYXNlWmFwID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByeDogIjkiLCByeTogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1VjE5QTkgMyAwIDAgMCAxNSAyMS44NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1VjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJMMTggMTdIMjJMMTkgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMkE5IDMgMCAwIDAgMTQuNTkgMTQuODciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS5qcwp2YXIgRGF0YWJhc2U7CnZhciBpbml0X2RhdGFiYXNlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGF0YWJhc2UuanMiKCkgewogICAgRGF0YWJhc2UgPSBbCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHJ4OiAiOSIsIHJ5OiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVWMTlBOSAzIDAgMCAwIDIxIDE5VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMkE5IDMgMCAwIDAgMjEgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1sZWZ0LmpzCnZhciBEZWNpbWFsc0Fycm93TGVmdDsKdmFyIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVjaW1hbHMtYXJyb3ctbGVmdC5qcyIoKSB7CiAgICBEZWNpbWFsc0Fycm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDIxLTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThIMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMWguMDEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1yaWdodC5qcwp2YXIgRGVjaW1hbHNBcnJvd1JpZ2h0Owp2YXIgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVjaW1hbHMtYXJyb3ctcmlnaHQuanMiKCkgewogICAgRGVjaW1hbHNBcnJvd1JpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMThoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjEgMy0zLTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE1IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI2IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWxldGUuanMKdmFyIERlbGV0ZTsKdmFyIGluaXRfZGVsZXRlMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVsZXRlLmpzIigpIHsKICAgIERlbGV0ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDVhMiAyIDAgMCAwLTEuMzQ0LjUxOWwtNi4zMjggNS43NGExIDEgMCAwIDAgMCAxLjQ4MWw2LjMyOCA1Ljc0MUEyIDIgMCAwIDAgMTAgMTloMTBhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDkgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDktNiA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVzc2VydC5qcwp2YXIgRGVzc2VydDsKdmFyIGluaXRfZGVzc2VydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGVzc2VydC5qcyIoKSB7CiAgICBEZXNzZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMTYyIDMuMTY3QTEwIDEwIDAgMCAwIDIgMTNhMiAyIDAgMCAwIDQgMHYtMWEyIDIgMCAwIDEgNCAwdjRhMiAyIDAgMCAwIDQgMHYtNGEyIDIgMCAwIDEgNCAwdjFhMiAyIDAgMCAwIDQtLjAwNiAxMCAxMCAwIDAgMC04LjE2MS05LjgyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC44MDQgMTQuODY5YTkgOSAwIDAgMS0xNy42MDggMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qcwp2YXIgRGlhbWV0ZXI7CnZhciBpbml0X2RpYW1ldGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qcyIoKSB7CiAgICBEaWFtZXRlciA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI1IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40OCAzLjY2YTEwIDEwIDAgMCAxIDEzLjg2IDEzLjg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNDEgNi40MSAxMS4xOCAxMS4xOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjY2IDYuNDhhMTAgMTAgMCAwIDAgMTMuODYgMTMuODYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLW1pbnVzLmpzCnZhciBEaWFtb25kTWludXM7CnZhciBpbml0X2RpYW1vbmRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtbWludXMuanMiKCkgewogICAgRGlhbW9uZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MUwxMy43IDIuNzFhMi40MSAyLjQxIDAgMCAwLTMuNDEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wZXJjZW50LmpzCnZhciBEaWFtb25kUGVyY2VudDsKdmFyIGluaXRfZGlhbW9uZF9wZXJjZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBlcmNlbnQuanMiKCkgewogICAgRGlhbW9uZFBlcmNlbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjcgMTAuM2EyLjQxIDIuNDEgMCAwIDAgMCAzLjQxbDcuNTkgNy41OWEyLjQxIDIuNDEgMCAwIDAgMy40MSAwbDcuNTktNy41OWEyLjQxIDIuNDEgMCAwIDAgMC0zLjQxTDEzLjcgMi43MWEyLjQxIDIuNDEgMCAwIDAtMy40MSAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjIgOS4yaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuNyAxNC44aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtcGx1cy5qcwp2YXIgRGlhbW9uZFBsdXM7CnZhciBpbml0X2RpYW1vbmRfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC1wbHVzLmpzIigpIHsKICAgIERpYW1vbmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNyAxMC4zYTIuNDEgMi40MSAwIDAgMCAwIDMuNDFsNy41OSA3LjU5YTIuNDEgMi40MSAwIDAgMCAzLjQxIDBsNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMCAwLTMuNDFMMTMuNyAyLjcxYTIuNDEgMi40MSAwIDAgMC0zLjQxIDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMS5qcwp2YXIgRGljZTE7CnZhciBpbml0X2RpY2VfMSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0xLmpzIigpIHsKICAgIERpY2UxID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC5qcwp2YXIgRGlhbW9uZDsKdmFyIGluaXRfZGlhbW9uZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlhbW9uZC5qcyIoKSB7CiAgICBEaWFtb25kID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi43IDEwLjNhMi40MSAyLjQxIDAgMCAwIDAgMy40MWw3LjU5IDcuNTlhMi40MSAyLjQxIDAgMCAwIDMuNDEgMGw3LjU5LTcuNTlhMi40MSAyLjQxIDAgMCAwIDAtMy40MWwtNy41OS03LjU5YTIuNDEgMi40MSAwIDAgMC0zLjQxIDBaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0yLmpzCnZhciBEaWNlMjsKdmFyIGluaXRfZGljZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTIuanMiKCkgewogICAgRGljZTIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtMy5qcwp2YXIgRGljZTM7CnZhciBpbml0X2RpY2VfMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0zLmpzIigpIHsKICAgIERpY2UzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS01LmpzCnZhciBEaWNlNTsKdmFyIGluaXRfZGljZV81ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTUuanMiKCkgewogICAgRGljZTUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTYuanMKdmFyIERpY2U2Owp2YXIgaW5pdF9kaWNlXzYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNi5qcyIoKSB7CiAgICBEaWNlNiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpY2UtNC5qcwp2YXIgRGljZTQ7CnZhciBpbml0X2RpY2VfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS00LmpzIigpIHsKICAgIERpY2U0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlcy5qcwp2YXIgRGljZXM7CnZhciBpbml0X2RpY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlcy5qcyIoKSB7CiAgICBEaWNlcyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICIxMCIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy45MiAxNCAzLjUtMy41YTIuMjQgMi4yNCAwIDAgMCAwLTNsLTUtNC45MmEyLjI0IDIuMjQgMCAwIDAtMyAwTDEwIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDloLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlmZi5qcwp2YXIgRGlmZjsKdmFyIGluaXRfZGlmZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlmZi5qcyIoKSB7CiAgICBEaWZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEwaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXNjLTIuanMKdmFyIERpc2MyOwp2YXIgaW5pdF9kaXNjXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtMi5qcyIoKSB7CiAgICBEaXNjMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0zLmpzCnZhciBEaXNjMzsKdmFyIGluaXRfZGlzY18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXNjLTMuanMiKCkgewogICAgRGlzYzMgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyYzAtMS43LjctMy4yIDEuOC00LjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmMwIDEuNy0uNyAzLjItMS44IDQuMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MtYWxidW0uanMKdmFyIERpc2NBbGJ1bTsKdmFyIGluaXRfZGlzY19hbGJ1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy1hbGJ1bS5qcyIoKSB7CiAgICBEaXNjQWxidW0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanMKdmFyIERpc2M7CnZhciBpbml0X2Rpc2MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanMiKCkgewogICAgRGlzYyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanMKdmFyIERpdmlkZTsKdmFyIGluaXRfZGl2aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanMiKCkgewogICAgRGl2aWRlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNiIsIHI6ICIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjUiLCB4MjogIjE5IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTgiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS1vZmYuanMKdmFyIERuYU9mZjsKdmFyIGluaXRfZG5hX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG5hLW9mZi5qcyIoKSB7CiAgICBEbmFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjM1IDEuNS0yLjA5MiAzLTIuNSA0LjVMMTQgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA2LTIuODkxLTIuODkxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVjMy4zMzMtMyA2LjY2Ny0zIDEwLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDkgLjg5MS44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOWMtMS41IDEuMzUtMyAyLjA5Mi00LjUgMi41bC0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4xMDkgMTQuMTA5IDQgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi41IDEyLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTggMi44OTEgMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMmMxLjM1LTEuNSAyLjA5Mi0zIDIuNS00LjVMMTAgMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2NrLmpzCnZhciBEb2NrOwp2YXIgaW5pdF9kb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2NrLmpzIigpIHsKICAgIERvY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDhoMjAiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNmgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qcwp2YXIgRG5hOwp2YXIgaW5pdF9kbmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qcyIoKSB7CiAgICBEbmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNiAxLjUgMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDgtMS41LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyYy0xLjc5OCAxLjk5OC0yLjUxOCAzLjk5NS0yLjgwNyA1Ljk5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi41IDEwLjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDYtMi44OTEtMi44OTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNWM2LjY2Ny02IDEzLjMzMyAwIDIwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgOSAuODkxLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwOSAxNC4xMDkgNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjUgMTIuNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCAyLjg5MSAyLjg5MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyYzEuNzk4LTEuOTk4IDIuNTE4LTMuOTk1IDIuODA3LTUuOTkzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9nLmpzCnZhciBEb2c7CnZhciBpbml0X2RvZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9nLmpzIigpIHsKICAgIERvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjI1IDE2LjI1aDEuNUwxMiAxN3oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC40MiAxMS4yNDdBMTMuMTUyIDEzLjE1MiAwIDAgMCA0IDE0LjU1NkM0IDE4LjcyOCA3LjU4MiAyMSAxMiAyMXM4LTIuMjcyIDgtNi40NDRhMTEuNzAyIDExLjcwMiAwIDAgMC0uNDkzLTMuMzA5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2LjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC41IDguNWMtLjM4NCAxLjA1LTEuMDgzIDIuMDI4LTIuMzQ0IDIuNS0xLjkzMS43MjItMy41NzYtLjI5Ny0zLjY1Ni0xLS4xMTMtLjk5NCAxLjE3Ny02LjUzIDQtNyAxLjkyMy0uMzIxIDMuNjUxLjg0NSAzLjY1MSAyLjIzNUE3LjQ5NyA3LjQ5NyAwIDAgMSAxNCA1LjI3N2MwLTEuMzkgMS44NDQtMi41OTggMy43NjctMi4yNzcgMi44MjMuNDcgNC4xMTMgNi4wMDYgNCA3LS4wOC43MDMtMS43MjUgMS43MjItMy42NTYgMS0xLjI2MS0uNDcyLTEuODU1LTEuNDUtMi4yMzktMi41IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9sbGFyLXNpZ24uanMKdmFyIERvbGxhclNpZ247CnZhciBpbml0X2RvbGxhcl9zaWduID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb2xsYXItc2lnbi5qcyIoKSB7CiAgICBEb2xsYXJTaWduID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1SDkuNWEzLjUgMy41IDAgMCAwIDAgN2g1YTMuNSAzLjUgMCAwIDEgMCA3SDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb251dC5qcwp2YXIgRG9udXQ7CnZhciBpbml0X2RvbnV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb251dC5qcyIoKSB7CiAgICBEb251dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjUgMTBhMi41IDIuNSAwIDAgMS0yLjQtM0gxOGEyLjk1IDIuOTUgMCAwIDEtMi42LTQuNCAxMCAxMCAwIDEgMCA2LjMgNy4xYy0uMy4yLS44LjMtMS4yLjMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3ItY2xvc2VkLWxvY2tlZC5qcwp2YXIgRG9vckNsb3NlZExvY2tlZDsKdmFyIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC1sb2NrZWQuanMiKCkgewogICAgRG9vckNsb3NlZExvY2tlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5VjZhMiAyIDAgMCAwLTItMkg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE3di0yYTIgMiAwIDEgMC00IDB2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE0IiwgeTogIjE3Iiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3ItY2xvc2VkLmpzCnZhciBEb29yQ2xvc2VkOwp2YXIgaW5pdF9kb29yX2Nsb3NlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9vci1jbG9zZWQuanMiKCkgewogICAgRG9vckNsb3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY2YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3QuanMKdmFyIERvdDsKdmFyIGluaXRfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb3QuanMiKCkgewogICAgRG90ID0gW1siY2lyY2xlIiwgeyBjeDogIjEyLjEiLCBjeTogIjEyLjEiLCByOiAiMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLW9wZW4uanMKdmFyIERvb3JPcGVuOwp2YXIgaW5pdF9kb29yX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3Itb3Blbi5qcyIoKSB7CiAgICBEb29yT3BlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwSDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC41NjJ2MTYuMTU3YTEgMSAwIDAgMCAxLjI0Mi45N0wxOSAyMFY1LjU2MmEyIDIgMCAwIDAtMS41MTUtMS45NGwtNC0xQTIgMiAwIDAgMCAxMSA0LjU2MXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNEg4YTIgMiAwIDAgMC0yIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwaC0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG93bmxvYWQuanMKdmFyIERvd25sb2FkOwp2YXIgaW5pdF9kb3dubG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZG93bmxvYWQuanMiKCkgewogICAgRG93bmxvYWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1djRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMCA1IDUgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJhZnRpbmctY29tcGFzcy5qcwp2YXIgRHJhZnRpbmdDb21wYXNzOwp2YXIgaW5pdF9kcmFmdGluZ19jb21wYXNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmFmdGluZy1jb21wYXNzLmpzIigpIHsKICAgIERyYWZ0aW5nQ29tcGFzcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjk5IDYuNzQgMS45MyAzLjQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEzNiAxMmExMCAxMCAwIDAgMS0xNC4yNzEgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS0yLjE2LTMuODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA4LjAyLTE0LjI2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzCnZhciBEcmFtYTsKdmFyIGluaXRfZHJhbWEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzIigpIHsKICAgIERyYW1hID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuNSAxMy4xaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA1YzAgOS00IDEyLTYgMTJzLTYtMy02LTEyYzAtMiAyLTMgNi0zczYgMSA2IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNCA5LjljLS44LjgtMiAuOC0yLjggMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDcuMUM5IDcuMiA3LjcgNy43IDYgOC42Yy0zLjUgMi00LjcgMy45LTMuNyA1LjYgNC41IDcuOCA5LjUgOC40IDExLjIgNy40LjktLjUgMS45LTIuMSAxLjktNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSAxNi41Yy4zLTEuMSAxLjQtMS43IDIuNC0xLjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmliYmJsZS5qcwp2YXIgRHJpYmJibGU7CnZhciBpbml0X2RyaWJiYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmliYmJsZS5qcyIoKSB7CiAgICBEcmliYmJsZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjEzIDUuMDlDMTUuMjIgOS4xNCAxMCAxMC40NCAyLjI1IDEwLjk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjc1IDEyLjg0Yy02LjYyLTEuNDEtMTIuMTQgMS0xNi4zOCA2LjMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNTYgMi43NWM0LjM3IDYgNiA5LjQyIDggMTcuNzIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qcwp2YXIgRHJpbGw7CnZhciBpbml0X2RyaWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qcyIoKSB7CiAgICBEcmlsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4YTEgMSAwIDAgMSAxIDF2MmExIDEgMCAwIDEtMSAxSDVhMyAzIDAgMCAxLTMtMyAxIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyAxMEg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDlhMSAxIDAgMCAxIDEgMXY2YTEgMSAwIDAgMS0xIDFsLS44MSAzLjI0MmExIDEgMCAwIDEtLjk3Ljc1OEg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRoM2ExIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAxLTEgMWgtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0yIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxOCAyLTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9uZS5qcwp2YXIgRHJvbmU7CnZhciBpbml0X2Ryb25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9uZS5qcyIoKSB7CiAgICBEcm9uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNC0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTAgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4yMDUgNC4xMzlhNCA0IDAgMSAxIDUuNDM5IDUuODYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjYzNyAxNGE0IDQgMCAxIDEtNS40MzIgNS44NjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4zNjcgMTBhNCA0IDAgMSAxIDUuNDM4LTUuODYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNzk1IDE5Ljg2MmE0IDQgMCAxIDEtNS40MjktNS44NzMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxMCIsIHk6ICI4Iiwgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXQtb2ZmLmpzCnZhciBEcm9wbGV0T2ZmOwp2YXIgaW5pdF9kcm9wbGV0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC1vZmYuanMiKCkgewogICAgRHJvcGxldE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjcxNSAxMy4xODZDMTguMjkgMTEuODU4IDE3LjM4NCAxMC42MDcgMTYgOS41Yy0yLTEuNi0zLjUtNC00LTYuNWExMC43IDEwLjcgMCAwIDEtLjg4NCAyLjU4NiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC43OTUgOC43OTdBMTEgMTEgMCAwIDEgOCA5LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgMTMuMjIyIDMuMjA4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC5qcwp2YXIgRHJvcGxldDsKdmFyIGluaXRfZHJvcGxldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC5qcyIoKSB7CiAgICBEcm9wbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhNyA3IDAgMCAwIDctN2MwLTItMS0zLjktMy01LjVzLTMuNS00LTQtNi41Yy0uNSAyLjUtMiA0LjktNCA2LjVDNiAxMS4xIDUgMTMgNSAxNWE3IDcgMCAwIDAgNyA3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXRzLmpzCnZhciBEcm9wbGV0czsKdmFyIGluaXRfZHJvcGxldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb3BsZXRzLmpzIigpIHsKICAgIERyb3BsZXRzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxNi4zYzIuMiAwIDQtMS44MyA0LTQuMDUgMC0xLjE2LS41Ny0yLjI2LTEuNzEtMy4xOVM3LjI5IDYuNzUgNyA1LjNjLS4yOSAxLjQ1LTEuMTQgMi44NC0yLjI5IDMuNzZTMyAxMS4xIDMgMTIuMjVjMCAyLjIyIDEuOCA0LjA1IDQgNC4wNXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNTYgNi42QTEwLjk3IDEwLjk3IDAgMCAwIDE0IDMuMDJjLjUgMi41IDIgNC45IDQgNi41czMgMy41IDMgNS41YTYuOTggNi45OCAwIDAgMS0xMS45MSA0Ljk3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bS5qcwp2YXIgRHJ1bTsKdmFyIGluaXRfZHJ1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bS5qcyIoKSB7CiAgICBEcnVtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAyLTggOCIgfV0sCiAgICAgIFsiZWxsaXBzZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHJ4OiAiMTAiLCByeTogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMy40djcuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzLjR2Ny45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOXY4YTEwIDUgMCAwIDAgMjAgMFY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzCnZhciBEcnVtc3RpY2s7CnZhciBpbml0X2RydW1zdGljayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzIigpIHsKICAgIERydW1zdGljayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjQgMTUuNjNhNy44NzUgNiAxMzUgMSAxIDYuMjMtNi4yMyA0LjUgMy40MyAxMzUgMCAwLTYuMjMgNi4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjI5IDEyLjcxLTIuNiAyLjZhMi41IDIuNSAwIDEgMC0xLjY1IDQuNjVBMi41IDIuNSAwIDEgMCA4LjcgMTguM2wyLjU5LTIuNTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kdW1iYmVsbC5qcwp2YXIgRHVtYmJlbGw7CnZhciBpbml0X2R1bWJiZWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9kdW1iYmVsbC5qcyIoKSB7CiAgICBEdW1iYmVsbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjU5NiAxMi43NjhhMiAyIDAgMSAwIDIuODI5LTIuODI5bC0xLjc2OC0xLjc2N2EyIDIgMCAwIDAgMi44MjgtMi44MjlsLTIuODI4LTIuODI4YTIgMiAwIDAgMC0yLjgyOSAyLjgyOGwtMS43NjctMS43NjhhMiAyIDAgMSAwLTIuODI5IDIuODI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjUgMjEuNSAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjEgMy45IDEuNC0xLjQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS4zNDMgMjEuNDg1YTIgMiAwIDEgMCAyLjgyOS0yLjgyOGwxLjc2NyAxLjc2OGEyIDIgMCAxIDAgMi44MjktMi44MjlsLTYuMzY0LTYuMzY0YTIgMiAwIDEgMC0yLjgyOSAyLjgyOWwxLjc2OCAxLjc2N2EyIDIgMCAwIDAtMi44MjggMi44Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNiAxNC40IDQuOC00LjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXItb2ZmLmpzCnZhciBFYXJPZmY7CnZhciBpbml0X2Vhcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Vhci1vZmYuanMiKCkgewogICAgRWFyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOC41YTMuNSAzLjUgMCAxIDAgNyAwYzAtMS41Ny45Mi0yLjUyIDIuMDQtMy40NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguNWMwLS43NS4xMy0xLjQ3LjM2LTIuMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC44IDMuMTVBNi41IDYuNSAwIDAgMSAxOSA4LjVjMCAxLjYzLS40NCAyLjgxLTEuMDkgMy43NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi41IDZBMi41IDIuNSAwIDAgMSAxNSA4LjVNMTAgMTNhMiAyIDAgMCAwIDEuODItMS4xOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXIuanMKdmFyIEVhcjsKdmFyIGluaXRfZWFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXIuanMiKCkgewogICAgRWFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4LjVhNi41IDYuNSAwIDEgMSAxMyAwYzAgNi02IDYtNiAxMGEzLjUgMy41IDAgMSAxLTcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4LjVhMi41IDIuNSAwIDAgMC01IDB2MWEyIDIgMCAxIDEgMCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFydGgtbG9jay5qcwp2YXIgRWFydGhMb2NrOwp2YXIgaW5pdF9lYXJ0aF9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXJ0aC1sb2NrLmpzIigpIHsKICAgIEVhcnRoTG9jayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMy4zNFY1YTMgMyAwIDAgMCAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjEuOTVWMThhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDEtMi0ydi0xYTIgMiAwIDAgMC0yLTJIMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41NCAxNUgxN2EyIDIgMCAwIDAtMiAydjQuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMmExMCAxMCAwIDEgMCA5LjU0IDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZWNGEyIDIgMCAxIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzCnZhciBFYXJ0aDsKdmFyIGluaXRfZWFydGggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzIigpIHsKICAgIEVhcnRoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEuNTQgMTVIMTdhMiAyIDAgMCAwLTIgMnY0LjU0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjM0VjVhMyAzIDAgMCAwIDMgM2EyIDIgMCAwIDEgMiAyYzAgMS4xLjkgMiAyIDJhMiAyIDAgMCAwIDItMmMwLTEuMS45LTIgMi0yaDMuMTciIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIxLjk1VjE4YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAxLTItMnYtMWEyIDIgMCAwIDAtMi0ySDIuMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lY2xpcHNlLmpzCnZhciBFY2xpcHNlOwp2YXIgaW5pdF9lY2xpcHNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lY2xpcHNlLmpzIigpIHsKICAgIEVjbGlwc2UgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyYTcgNyAwIDEgMCAxMCAxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1mcmllZC5qcwp2YXIgRWdnRnJpZWQ7CnZhciBpbml0X2VnZ19mcmllZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWdnLWZyaWVkLmpzIigpIHsKICAgIEVnZ0ZyaWVkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxMi41IiwgcjogIjMuNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDhjMC0zLjUgMi41LTYgNi41LTYgNSAwIDQuODMgMyA3LjUgNXM1IDIgNSA2YzAgNC41LTIuNSA2LjUtNyA2LjUtMi41IDAtMi41IDIuNS02IDIuNXMtNy0yLTctNS41YzAtMyAxLjUtMyAxLjUtNUMzLjUgMTAgMyA5IDMgOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2ctb2ZmLmpzCnZhciBFZ2dPZmY7CnZhciBpbml0X2VnZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1vZmYuanMiKCkgewogICAgRWdnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjM0N1YxNGMwLTYtNC0xMi04LTEyLTEuMDc4IDAtMi4xNTcuNDM2LTMuMTU3IDEuMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yMDYgNi4yMUM0Ljg3MSA4LjQgNCAxMS4yIDQgMTRhOCA4IDAgMCAwIDE0LjU2OCA0LjU2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy5qcwp2YXIgRWdnOwp2YXIgaW5pdF9lZ2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy5qcyIoKSB7CiAgICBFZ2cgPSBbWyJwYXRoIiwgeyBkOiAiTTEyIDJDOCAyIDQgOCA0IDE0YTggOCAwIDAgMCAxNiAwYzAtNi00LTEyLTgtMTIiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZWxsaXBzaXMtdmVydGljYWwuanMKdmFyIEVsbGlwc2lzVmVydGljYWw7CnZhciBpbml0X2VsbGlwc2lzX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC5qcyIoKSB7CiAgICBFbGxpcHNpc1ZlcnRpY2FsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzCnZhciBFbGxpcHNpczsKdmFyIGluaXRfZWxsaXBzaXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzIigpIHsKICAgIEVsbGlwc2lzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTIiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLWFwcHJveGltYXRlbHkuanMKdmFyIEVxdWFsQXBwcm94aW1hdGVseTsKdmFyIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtYXBwcm94aW1hdGVseS5qcyIoKSB7CiAgICBFcXVhbEFwcHJveGltYXRlbHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE1YTYuNSA2LjUgMCAwIDEgNyAwIDYuNSA2LjUgMCAwIDAgNyAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOWE2LjUgNi41IDAgMCAxIDcgMCA2LjUgNi41IDAgMCAwIDcgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLW5vdC5qcwp2YXIgRXF1YWxOb3Q7CnZhciBpbml0X2VxdWFsX25vdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtbm90LmpzIigpIHsKICAgIEVxdWFsTm90ID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiNSIsIHkxOiAiNSIsIHkyOiAiMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcmFzZXIuanMKdmFyIEVyYXNlcjsKdmFyIGluaXRfZXJhc2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9lcmFzZXIuanMiKCkgewogICAgRXJhc2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMjFIOGEyIDIgMCAwIDEtMS40Mi0uNTg3bC0zLjk5NC0zLjk5OWEyIDIgMCAwIDEgMC0yLjgyOGwxMC0xMGEyIDIgMCAwIDEgMi44MjkgMGw1Ljk5OSA2YTIgMiAwIDAgMSAwIDIuODI4TDEyLjgzNCAyMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjA4MiAxMS4wOSA4LjgyOCA4LjgyOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzCnZhciBFcXVhbDsKdmFyIGluaXRfZXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzIigpIHsKICAgIEVxdWFsID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiMTkiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V0aGVybmV0LXBvcnQuanMKdmFyIEV0aGVybmV0UG9ydDsKdmFyIGluaXRfZXRoZXJuZXRfcG9ydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXRoZXJuZXQtcG9ydC5qcyIoKSB7CiAgICBFdGhlcm5ldFBvcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTE1IDIwIDMtM2gyYTIgMiAwIDAgMCAyLTJWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnY5YTIgMiAwIDAgMCAyIDJoMmwzIDN6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDh2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanMKdmFyIEV1cm87CnZhciBpbml0X2V1cm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanMiKCkgewogICAgRXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNGg5IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTkgNmE3LjcgNy43IDAgMCAwLTUuMi0yQTcuOSA3LjkgMCAwIDAgNiAxMmMwIDQuNCAzLjUgOCA3LjggOCAyIDAgMy44LS44IDUuMi0yIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V2LWNoYXJnZXIuanMKdmFyIEV2Q2hhcmdlcjsKdmFyIGluaXRfZXZfY2hhcmdlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXYtY2hhcmdlci5qcyIoKSB7CiAgICBFdkNoYXJnZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3aDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtMiAzaDNsLTIgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V4dGVybmFsLWxpbmsuanMKdmFyIEV4dGVybmFsTGluazsKdmFyIGluaXRfZXh0ZXJuYWxfbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXh0ZXJuYWwtbGluay5qcyIoKSB7CiAgICBFeHRlcm5hbExpbmsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNCAyMSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzdjZhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leHBhbmQuanMKdmFyIEV4cGFuZDsKdmFyIGluaXRfZXhwYW5kMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXhwYW5kLmpzIigpIHsKICAgIEV4cGFuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWM2gtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2djVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDhWM2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOSAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtY2xvc2VkLmpzCnZhciBFeWVDbG9zZWQ7CnZhciBpbml0X2V5ZV9jbG9zZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1jbG9zZWQuanMiKCkgewogICAgRXllQ2xvc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTgtLjcyMi0zLjI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOGExMC42NDUgMTAuNjQ1IDAgMCAwIDIwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTUtMS43MjYtMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE1IDEuNzI2LTIuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxOCAuNzIyLTMuMjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtb2ZmLmpzCnZhciBFeWVPZmY7CnZhciBpbml0X2V5ZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1vZmYuanMiKCkgewogICAgRXllT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNzMzIDUuMDc2YTEwLjc0NCAxMC43NDQgMCAwIDEgMTEuMjA1IDYuNTc1IDEgMSAwIDAgMSAwIC42OTYgMTAuNzQ3IDEwLjc0NyAwIDAgMS0xLjQ0NCAyLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjA4NCAxNC4xNThhMyAzIDAgMCAxLTQuMjQyLTQuMjQyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjQ3OSAxNy40OTlhMTAuNzUgMTAuNzUgMCAwIDEtMTUuNDE3LTUuMTUxIDEgMSAwIDAgMSAwLS42OTYgMTAuNzUgMTAuNzUgMCAwIDEgNC40NDYtNS4xNDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzCnZhciBFeWU7CnZhciBpbml0X2V5ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzIigpIHsKICAgIEV5ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuMDYyIDEyLjM0OGExIDEgMCAwIDEgMC0uNjk2IDEwLjc1IDEwLjc1IDAgMCAxIDE5Ljg3NiAwIDEgMSAwIDAgMSAwIC42OTYgMTAuNzUgMTAuNzUgMCAwIDEtMTkuODc2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY3RvcnkuanMKdmFyIEZhY3Rvcnk7CnZhciBpbml0X2ZhY3RvcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY3RvcnkuanMiKCkgewogICAgRmFjdG9yeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxOWEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJWOC41YS41LjUgMCAwIDAtLjc2OS0uNDIybC00LjQ2MiAyLjg0NEEuNS41IDAgMCAxIDE1IDEwLjV2LTJhLjUuNSAwIDAgMC0uNzY5LS40MjJMOS43NyAxMC45MjJBLjUuNSAwIDAgMSA5IDEwLjVWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNmguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYWNlYm9vay5qcwp2YXIgRmFjZWJvb2s7CnZhciBpbml0X2ZhY2Vib29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYWNlYm9vay5qcyIoKSB7CiAgICBGYWNlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoLTNhNSA1IDAgMCAwLTUgNXYzSDd2NGgzdjhoNHYtOGgzbDEtNGgtNFY3YTEgMSAwIDAgMSAxLTFoM3oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYW4uanMKdmFyIEZhbjsKdmFyIGluaXRfZmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mYW4uanMiKCkgewogICAgRmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuODI3IDE2LjM3OWE2LjA4MiA2LjA4MiAwIDAgMS04LjYxOC03LjAwMmw1LjQxMiAxLjQ1YTYuMDgyIDYuMDgyIDAgMCAxIDcuMDAyLTguNjE4bC0xLjQ1IDUuNDEyYTYuMDgyIDYuMDgyIDAgMCAxIDguNjE4IDcuMDAybC01LjQxMi0xLjQ1YTYuMDgyIDYuMDgyIDAgMCAxLTcuMDAyIDguNjE4bDEuNDUtNS40MTJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydi4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zhc3QtZm9yd2FyZC5qcwp2YXIgRmFzdEZvcndhcmQ7CnZhciBpbml0X2Zhc3RfZm9yd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFzdC1mb3J3YXJkLmpzIigpIHsKICAgIEZhc3RGb3J3YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmEyIDIgMCAwIDEgMy40MTQtMS40MTRsNiA2YTIgMiAwIDAgMSAwIDIuODI4bC02IDZBMiAyIDAgMCAxIDEyIDE4eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZhMiAyIDAgMCAxIDMuNDE0LTEuNDE0bDYgNmEyIDIgMCAwIDEgMCAyLjgyOGwtNiA2QTIgMiAwIDAgMSAyIDE4eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlYXRoZXIuanMKdmFyIEZlYXRoZXI7CnZhciBpbml0X2ZlYXRoZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlYXRoZXIuanMiKCkgewogICAgRmVhdGhlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY3IDE5YTIgMiAwIDAgMCAxLjQxNi0uNTg4bDYuMTU0LTYuMTcyYTYgNiAwIDAgMC04LjQ5LTguNDlMNS41ODYgOS45MTRBMiAyIDAgMCAwIDUgMTEuMzI4VjE4YTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDggMiAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDE1SDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZW5jZS5qcwp2YXIgRmVuY2U7CnZhciBpbml0X2ZlbmNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZW5jZS5qcyIoKSB7CiAgICBGZW5jZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMyAyIDV2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDhoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMy0yIDJ2MTVjMCAuNi40IDEgMSAxaDJjLjYgMCAxLS40IDEtMVY1WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMThoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAzLTIgMnYxNWMwIC42LjQgMSAxIDFoMmMuNiAwIDEtLjQgMS0xVjVaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVycmlzLXdoZWVsLmpzCnZhciBGZXJyaXNXaGVlbDsKdmFyIGluaXRfZmVycmlzX3doZWVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mZXJyaXMtd2hlZWwuanMiKCkgewogICAgRmVycmlzV2hlZWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjggMTUtMy41IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNyA3LTMuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOCA5IDMuMyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjcgMTctMy41LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTggMyA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOC43YTkgOSAwIDEgMC0xMiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanMKdmFyIEZpZ21hOwp2YXIgaW5pdF9maWdtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanMiKCkgewogICAgRmlnbWEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDUuNUEzLjUgMy41IDAgMCAxIDguNSAySDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSA1LjV6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJoMy41YTMuNSAzLjUgMCAxIDEgMCA3SDEyVjJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyLjVhMy41IDMuNSAwIDEgMSA3IDAgMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTkuNUEzLjUgMy41IDAgMCAxIDguNSAxNkgxMnYzLjVhMy41IDMuNSAwIDEgMS03IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuNUEzLjUgMy41IDAgMCAxIDguNSA5SDEydjdIOC41QTMuNSAzLjUgMCAwIDEgNSAxMi41eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYXJjaGl2ZS5qcwp2YXIgRmlsZUFyY2hpdmU7CnZhciBpbml0X2ZpbGVfYXJjaGl2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1hcmNoaXZlLmpzIigpIHsKICAgIEZpbGVBcmNoaXZlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuNjU5IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTEuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdWNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWF4aXMtM2QuanMKdmFyIEZpbGVBeGlzM2Q7CnZhciBpbml0X2ZpbGVfYXhpc18zZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1heGlzLTNkLmpzIigpIHsKICAgIEZpbGVBeGlzM2QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxOCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY4aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJhZGdlLmpzCnZhciBGaWxlQmFkZ2U7CnZhciBpbml0X2ZpbGVfYmFkZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYmFkZ2UuanMiKCkgewogICAgRmlsZUJhZGdlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMjJoNWEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcuNjkgMTYuNDc5IDEuMjkgNC44OGEuNS41IDAgMCAxLS42OTguNTkxbC0xLjg0My0uODQ5YTEgMSAwIDAgMC0uODc5LjAwMWwtMS44NDYuODVhLjUuNSAwIDAgMS0uNjkyLS41OTNsMS4yOS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTQiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYnJhY2VzLWNvcm5lci5qcwp2YXIgRmlsZUJyYWNlc0Nvcm5lcjsKdmFyIGluaXRfZmlsZV9icmFjZXNfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy1jb3JuZXIuanMiKCkgewogICAgRmlsZUJyYWNlc0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0IDIyaDRhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNGExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAxLTEgMSAxIDEgMCAwIDEgMSAxdjJhMSAxIDAgMCAwIDEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIyYTEgMSAwIDAgMCAxLTF2LTJhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0yYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJveC5qcwp2YXIgRmlsZUJveDsKdmFyIGluaXRfZmlsZV9ib3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtYm94LmpzIigpIHsKICAgIEZpbGVCb3ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC41IDIySDE4YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2My44IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNyAxNC4yIDcgMTdsLTQuNy0yLjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMy4xYTIgMiAwIDAgMC0uOTk5IDEuNzZ2My4yNGEyIDIgMCAwIDAgLjk2OSAxLjc4TDYgMjEuN2EyIDIgMCAwIDAgMi4wMy4wMUwxMSAxOS45YTIgMiAwIDAgMCAxLTEuNzZWMTQuOWEyIDIgMCAwIDAtLjk3LTEuNzhMOCAxMS4zYTIgMiAwIDAgMC0yLjAzLS4wMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN3Y1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1icmFjZXMuanMKdmFyIEZpbGVCcmFjZXM7CnZhciBpbml0X2ZpbGVfYnJhY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy5qcyIoKSB7CiAgICBGaWxlQnJhY2VzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEyYTEgMSAwIDAgMC0xIDF2MWExIDEgMCAwIDEtMSAxIDEgMSAwIDAgMSAxIDF2MWExIDEgMCAwIDAgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4YTEgMSAwIDAgMCAxLTF2LTFhMSAxIDAgMCAxIDEtMSAxIDEgMCAwIDEtMS0xdi0xYTEgMSAwIDAgMC0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzCnZhciBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOwp2YXIgaW5pdF9maWxlX2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi1pbmNyZWFzaW5nLmpzIigpIHsKICAgIEZpbGVDaGFydENvbHVtbkluY3JlYXNpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOHYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtY29sdW1uLmpzCnZhciBGaWxlQ2hhcnRDb2x1bW47CnZhciBpbml0X2ZpbGVfY2hhcnRfY29sdW1uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi5qcyIoKSB7CiAgICBGaWxlQ2hhcnRDb2x1bW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOHYtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtbGluZS5qcwp2YXIgRmlsZUNoYXJ0TGluZTsKdmFyIGluaXRfZmlsZV9jaGFydF9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWxpbmUuanMiKCkgewogICAgRmlsZUNoYXJ0TGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMy0zLjUgMy41LTItMkw4IDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGFydC1waWUuanMKdmFyIEZpbGVDaGFydFBpZTsKdmFyIGluaXRfZmlsZV9jaGFydF9waWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtcGllLmpzIigpIHsKICAgIEZpbGVDaGFydFBpZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1Ljk0MSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA0bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuNTEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC4wMTcgMTEuNTEyYTYgNiAwIDEgMCA4LjQ2NiA4LjQ3NSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDE2YTEgMSAwIDAgMS0xLTF2LTRjMC0uNTUyLjQ1LTEuMDA4Ljk5NS0uOTE3YTYgNiAwIDAgMSA0LjkyMiA0LjkyMmMuMDkxLjU0NC0uMzY1Ljk5NS0uOTE3Ljk5NXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLWNvcm5lci5qcwp2YXIgRmlsZUNoZWNrQ29ybmVyOwp2YXIgaW5pdF9maWxlX2NoZWNrX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay1jb3JuZXIuanMiKCkgewogICAgRmlsZUNoZWNrQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuNSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay5qcwp2YXIgRmlsZUNoZWNrOwp2YXIgaW5pdF9maWxlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLmpzIigpIHsKICAgIEZpbGVDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNsb2NrLmpzCnZhciBGaWxlQ2xvY2s7CnZhciBpbml0X2ZpbGVfY2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2xvY2suanMiKCkgewogICAgRmlsZUNsb2NrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMjJoMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjIuODUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0djIuMmwxLjYgMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjE2IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUtY29ybmVyLmpzCnZhciBGaWxlQ29kZUNvcm5lcjsKdmFyIGluaXRfZmlsZV9jb2RlX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2RlLWNvcm5lci5qcyIoKSB7CiAgICBGaWxlQ29kZUNvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTIuMTVWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJoLTMuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE2LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMiAzLTMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jb2RlLmpzCnZhciBGaWxlQ29kZTsKdmFyIGluaXRfZmlsZV9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUuanMiKCkgewogICAgRmlsZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuNSA4IDE1bDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEyLjUgMiAyLjUtMiAyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZy5qcwp2YXIgRmlsZUNvZzsKdmFyIGluaXRfZmlsZV9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY29nLmpzIigpIHsKICAgIEZpbGVDb2cgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLS41ODYtMS40MTRsLTQtNEEyIDIgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2Ni42IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4zMDUgMTkuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC4yMjggMTYuODUyLS45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuODUyIDIwLjc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNzczIDE2Ljg1Mi45MjItLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05Ljc3MyAxOS4xNDguOTIyLjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZmYuanMKdmFyIEZpbGVEaWZmOwp2YXIgaW5pdF9maWxlX2RpZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlmZi5qcyIoKSB7CiAgICBGaWxlRGlmZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN2g2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1kaWdpdC5qcwp2YXIgRmlsZURpZ2l0Owp2YXIgaW5pdF9maWxlX2RpZ2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRpZ2l0LmpzIigpIHsKICAgIEZpbGVEaWdpdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNmgydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMTYiLCB3aWR0aDogIjQiLCBoZWlnaHQ6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1kb3duLmpzCnZhciBGaWxlRG93bjsKdmFyIGluaXRfZmlsZV9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRvd24uanMiKCkgewogICAgRmlsZURvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNSAzIDMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1leGNsYW1hdGlvbi1wb2ludC5qcwp2YXIgRmlsZUV4Y2xhbWF0aW9uUG9pbnQ7CnZhciBpbml0X2ZpbGVfZXhjbGFtYXRpb25fcG9pbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZXhjbGFtYXRpb24tcG9pbnQuanMiKCkgewogICAgRmlsZUV4Y2xhbWF0aW9uUG9pbnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN2guMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWhlYWRwaG9uZS5qcwp2YXIgRmlsZUhlYWRwaG9uZTsKdmFyIGluaXRfZmlsZV9oZWFkcGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaGVhZHBob25lLmpzIigpIHsKICAgIEZpbGVIZWFkcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDYuODM1VjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyaC0uMzQzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0yIDE5YTIgMiAwIDAgMSA0IDB2MWEyIDIgMCAwIDEtNCAwdi00YTYgNiAwIDAgMSAxMiAwdjRhMiAyIDAgMCAxLTQgMHYtMWEyIDIgMCAwIDEgNCAwIiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaGVhcnQuanMKdmFyIEZpbGVIZWFydDsKdmFyIGluaXRfZmlsZV9oZWFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1oZWFydC5qcyIoKSB7CiAgICBGaWxlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyAyMmg1YTIgMiAwIDAgMCAyLTJWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2NyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNjIgMTguOEEyLjI1IDIuMjUgMCAxIDEgNyAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YTEgMSAwIDAgMS0xLjUwNyAweiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaW1hZ2UuanMKdmFyIEZpbGVJbWFnZTsKdmFyIGluaXRfZmlsZV9pbWFnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbWFnZS5qcyIoKSB7CiAgICBGaWxlSW1hZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNy0xLjI5Ni0xLjI5NmEyLjQxIDIuNDEgMCAwIDAtMy40MDggMEw5IDIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbnB1dC5qcwp2YXIgRmlsZUlucHV0Owp2YXIgaW5pdF9maWxlX2lucHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWlucHV0LmpzIigpIHsKICAgIEZpbGVJbnB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTFWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE4IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWtleS5qcwp2YXIgRmlsZUtleTsKdmFyIGluaXRfZmlsZV9rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUta2V5LmpzIigpIHsKICAgIEZpbGVLZXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC42NSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjEwLjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNSAxIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEgMTQtNC41ODYgNC41ODYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIyMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1sb2NrLmpzCnZhciBGaWxlTG9jazsKdmFyIGluaXRfZmlsZV9sb2NrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWxvY2suanMiKCkgewogICAgRmlsZUxvY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDkuOFY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMmgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTd2LTJhMiAyIDAgMCAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjMiLCB5OiAiMTciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLWNvcm5lci5qcwp2YXIgRmlsZU1pbnVzQ29ybmVyOwp2YXIgaW5pdF9maWxlX21pbnVzX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1taW51cy1jb3JuZXIuanMiKCkgewogICAgRmlsZU1pbnVzQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTRWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDZsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW11c2ljLmpzCnZhciBGaWxlTXVzaWM7CnZhciBpbml0X2ZpbGVfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbXVzaWMuanMiKCkgewogICAgRmlsZU11c2ljID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNjUgMjJIMThhMiAyIDAgMCAwIDItMlY4YTIuNCAyLjQgMCAwIDAtLjcwNi0xLjcwNmwtMy41ODgtMy41ODhBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxMC4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjB2LTdsMyAxLjQ3NCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW1pbnVzLmpzCnZhciBGaWxlTWludXM7CnZhciBpbml0X2ZpbGVfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMuanMiKCkgewogICAgRmlsZU1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtb3V0cHV0LmpzCnZhciBGaWxlT3V0cHV0Owp2YXIgaW5pdF9maWxlX291dHB1dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1vdXRwdXQuanMiKCkgewogICAgRmlsZU91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuMjI2IDIwLjkyNUEyIDIgMCAwIDAgNiAyMmgxMmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjMuMTI3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMS0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxNy0zLTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBlbi1saW5lLmpzCnZhciBGaWxlUGVuTGluZTsKdmFyIGluaXRfZmlsZV9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wZW4tbGluZS5qcyIoKSB7CiAgICBGaWxlUGVuTGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4LjIyNiA1LjIyNi0yLjUyLTIuNTJBMi40IDIuNCAwIDAgMCAxNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJ2LS4zNTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDEyLjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGVuLmpzCnZhciBGaWxlUGVuOwp2YXIgaW5pdF9maWxlX3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wZW4uanMiKCkgewogICAgRmlsZVBlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjY1OSAyMkgxOGEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjkuMzQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4zNzggMTIuNjIyYTEgMSAwIDAgMSAzIDMuMDAzTDguMzYgMjAuNjM3YTIgMiAwIDAgMS0uODU0LjUwNmwtMi44NjcuODM3YS41LjUgMCAwIDEtLjYyLS42MmwuODM2LTIuODY5YTIgMiAwIDAgMSAuNTA2LS44NTN6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbGF5LmpzCnZhciBGaWxlUGxheTsKdmFyIGluaXRfZmlsZV9wbGF5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsYXkuanMiKCkgewogICAgRmlsZVBsYXkgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMDMzIDEzLjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZ2LTQuNzA0YS42NDUuNjQ1IDAgMCAxIC45NjctLjU2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy5qcwp2YXIgRmlsZVBsdXM7CnZhciBpbml0X2ZpbGVfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbHVzLmpzIigpIHsKICAgIEZpbGVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgRmlsZVF1ZXN0aW9uTWFyazsKdmFyIGluaXRfZmlsZV9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgRmlsZVF1ZXN0aW9uTWFyayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYgMjJhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA0LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2MTJhMiAyIDAgMCAxLTIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMSA5YTMgMyAwIDAgMSA1LjgyIDFjMCAyLTMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBsdXMtY29ybmVyLmpzCnZhciBGaWxlUGx1c0Nvcm5lcjsKdmFyIGluaXRfZmlsZV9wbHVzX2Nvcm5lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1wbHVzLWNvcm5lci5qcyIoKSB7CiAgICBGaWxlUGx1c0Nvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjM1IDIySDZhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoOGEyLjQgMi40IDAgMCAxIDEuNzA2LjcwNmwzLjU4OCAzLjU4OEEyLjQgMi40IDAgMCAxIDIwIDh2NS4zNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2Nhbi5qcwp2YXIgRmlsZVNjYW47CnZhciBpbml0X2ZpbGVfc2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zY2FuLmpzIigpIHsKICAgIEZpbGVTY2FuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBWOGEyLjQgMi40IDAgMCAwLS43MDYtMS43MDRsLTMuNTg4LTMuNTg4QTIuNCAyLjQgMCAwIDAgMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmg0LjM1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTRhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0YTIgMiAwIDAgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJhMiAyIDAgMCAwIDItMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2VhcmNoLWNvcm5lci5qcwp2YXIgRmlsZVNlYXJjaENvcm5lcjsKdmFyIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC1jb3JuZXIuanMiKCkgewogICAgRmlsZVNlYXJjaENvcm5lciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEgMjJINmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg5IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYzLjI1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjItMi44OC0yLjg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE3IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC5qcwp2YXIgRmlsZVNlYXJjaDsKdmFyIGluaXRfZmlsZV9zZWFyY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2VhcmNoLmpzIigpIHsKICAgIEZpbGVTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMS41IiwgY3k6ICIxNC41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy4zIDE2LjMgMTUgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNpZ25hbC5qcwp2YXIgRmlsZVNpZ25hbDsKdmFyIGluaXRfZmlsZV9zaWduYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2lnbmFsLmpzIigpIHsKICAgIEZpbGVTaWduYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNSAxMy41YTIuNSAyLjUgMCAwIDEgMCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyYTUgNSAwIDAgMSAwIDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNwcmVhZHNoZWV0LmpzCnZhciBGaWxlU3ByZWFkc2hlZXQ7CnZhciBpbml0X2ZpbGVfc3ByZWFkc2hlZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3ByZWFkc2hlZXQuanMiKCkgewogICAgRmlsZVNwcmVhZHNoZWV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxN2gyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zbGlkZXJzLmpzCnZhciBGaWxlU2xpZGVyczsKdmFyIGluaXRfZmlsZV9zbGlkZXJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNsaWRlcnMuanMiKCkgewogICAgRmlsZVNsaWRlcnMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDExdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN2g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2djIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN0YWNrLmpzCnZhciBGaWxlU3RhY2s7CnZhciBpbml0X2ZpbGVfc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3RhY2suanMiKCkgewogICAgRmlsZVN0YWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjFhMSAxIDAgMCAxLTEgMUg0YTEgMSAwIDAgMS0xLTF2LThhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmExIDEgMCAwIDEtMSAxSDlhMSAxIDAgMCAxLTEtMVY4YTEgMSAwIDAgMSAxLTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgNmEyIDIgMCAwIDAtLjU4Ni0xLjQxNGwtMi0yQTIgMiAwIDAgMCAxNyAyaC0zYTEgMSAwIDAgMC0xIDF2OGExIDEgMCAwIDAgMSAxaDZhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN5bWxpbmsuanMKdmFyIEZpbGVTeW1saW5rOwp2YXIgaW5pdF9maWxlX3N5bWxpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3ltbGluay5qcyIoKSB7CiAgICBGaWxlU3ltbGluayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTFWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0ydi0zYTIgMiAwIDAgMSAyLTJoNyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE4IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRlcm1pbmFsLmpzCnZhciBGaWxlVGVybWluYWw7CnZhciBpbml0X2ZpbGVfdGVybWluYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdGVybWluYWwuanMiKCkgewogICAgRmlsZVRlcm1pbmFsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTYgMi0yLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXh0LmpzCnZhciBGaWxlVGV4dDsKdmFyIGluaXRfZmlsZV90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRleHQuanMiKCkgewogICAgRmlsZVRleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEzSDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdHlwZS1jb3JuZXIuanMKdmFyIEZpbGVUeXBlQ29ybmVyOwp2YXIgaW5pdF9maWxlX3R5cGVfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXR5cGUtY29ybmVyLmpzIigpIHsKICAgIEZpbGVUeXBlQ29ybmVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJoNmEyIDIgMCAwIDAgMi0yVjhhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE0IDJINmEyIDIgMCAwIDAtMiAydjYiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE2di0xLjVhLjUuNSAwIDAgMSAuNS0uNWg3YS41LjUgMCAwIDEgLjUuNVYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10eXBlLmpzCnZhciBGaWxlVHlwZTsKdmFyIGluaXRfZmlsZV90eXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXR5cGUuanMiKCkgewogICAgRmlsZVR5cGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTN2LS41YS41LjUgMCAwIDEgLjUtLjVoNWEuNS41IDAgMCAxIC41LjV2LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXVwLmpzCnZhciBGaWxlVXA7CnZhciBpbml0X2ZpbGVfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXAuanMiKCkgewogICAgRmlsZVVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTUtMy0zLTMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXNlci5qcwp2YXIgRmlsZVVzZXI7CnZhciBpbml0X2ZpbGVfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS11c2VyLmpzIigpIHsKICAgIEZpbGVVc2VyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNiAyMmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDQuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjVhMSAxIDAgMCAwIDEgMWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIyYTQgNCAwIDAgMC04IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdm9sdW1lLmpzCnZhciBGaWxlVm9sdW1lOwp2YXIgaW5pdF9maWxlX3ZvbHVtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS12b2x1bWUuanMiKCkgewogICAgRmlsZVZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTEuNTVWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJoLTEuOTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNWE1IDUgMCAwIDEgMCA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMTQuNTAyYS41LjUgMCAwIDAtLjgyNi0uMzgxbC0xLjg5MyAxLjYzMWExIDEgMCAwIDEtLjY1MS4yNDNIMy41YS41LjUgMCAwIDAtLjUuNTAxdjMuMDA2YS41LjUgMCAwIDAgLjUuNTAxaDEuMTI5YTEgMSAwIDAgMSAuNjUyLjI0M2wxLjg5MyAxLjYzM2EuNS41IDAgMCAwIC44MjYtLjM4eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdmlkZW8tY2FtZXJhLmpzCnZhciBGaWxlVmlkZW9DYW1lcmE7CnZhciBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXZpZGVvLWNhbWVyYS5qcyIoKSB7CiAgICBGaWxlVmlkZW9DYW1lcmEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDEyVjRhMiAyIDAgMCAxIDItMmg4YTIuNCAyLjQgMCAwIDEgMS43MDYuNzA2bDMuNTg4IDMuNTg4QTIuNCAyLjQgMCAwIDEgMjAgOHYxMmEyIDIgMCAwIDEtMiAyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMCAxNy44NDMgMy4wMzMtMS43NTVhLjY0LjY0IDAgMCAxIC45NjcuNTZ2NC43MDRhLjY1LjY1IDAgMCAxLS45NjcuNTZMMTAgMjAuMTU3IiB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNiIsIHg6ICIzIiwgeTogIjE2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LWNvcm5lci5qcwp2YXIgRmlsZVhDb3JuZXI7CnZhciBpbml0X2ZpbGVfeF9jb3JuZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUteC1jb3JuZXIuanMiKCkgewogICAgRmlsZVhDb3JuZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAyMkg2YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNyA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTctNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LmpzCnZhciBGaWxlWDsKdmFyIGluaXRfZmlsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXguanMiKCkgewogICAgRmlsZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSAxMi41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTIuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLmpzCnZhciBGaWxlOwp2YXIgaW5pdF9maWxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLmpzIigpIHsKICAgIEZpbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDIyYTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNC43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djEyYTIgMiAwIDAgMS0yIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qcwp2YXIgRmlsZXM7CnZhciBpbml0X2ZpbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qcyIoKSB7CiAgICBGaWxlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJoLTRhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjcwNiAyLjcwNkEyLjQgMi40IDAgMCAwIDE1IDJ2NWExIDEgMCAwIDAgMSAxaDVhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDdhMiAyIDAgMCAwLTIgMnYxMWEyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDEuNzMyLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxtLmpzCnZhciBGaWxtOwp2YXIgaW5pdF9maWxtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxtLmpzIigpIHsKICAgIEZpbG0gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3LjVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTYuNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgNy41aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTYuNWg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmluZ2VycHJpbnQtcGF0dGVybi5qcwp2YXIgRmluZ2VycHJpbnRQYXR0ZXJuOwp2YXIgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maW5nZXJwcmludC1wYXR0ZXJuLmpzIigpIHsKICAgIEZpbmdlcnByaW50UGF0dGVybiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwYTIgMiAwIDAgMC0yIDJjMCAxLjAyLS4xIDIuNTEtLjI2IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTMuMTJjMCAyLjM4IDAgNi4zOC0xIDguODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMjkgMjEuMDJjLjEyLS42LjQzLTIuMy41LTMuMDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmExMCAxMCAwIDAgMSAxOC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTZoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxLjggMTZjLjItMiAuMTMxLTUuMzU0IDAtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE5LjVDNS41IDE4IDYgMTUgNiAxMmE2IDYgMCAwIDEgLjM0LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NSAyMmMuMjEtLjY2LjQ1LTEuMzIuNTctMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDYuOGE2IDYgMCAwIDEgOSA1LjJ2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpcmUtZXh0aW5ndWlzaGVyLmpzCnZhciBGaXJlRXh0aW5ndWlzaGVyOwp2YXIgaW5pdF9maXJlX2V4dGluZ3Vpc2hlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlyZS1leHRpbmd1aXNoZXIuanMiKCkgewogICAgRmlyZUV4dGluZ3Vpc2hlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDYuNVYzYTEgMSAwIDAgMC0xLTFoLTJhMSAxIDAgMCAwLTEgMXYzLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDNoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgM2E2IDYgMCAwIDAtNiA2djExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTNoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMGE0IDQgMCAwIDAtOCAwdjEwYTIgMiAwIDAgMCAyIDJoNGEyIDIgMCAwIDAgMi0yWiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtb2ZmLmpzCnZhciBGaXNoT2ZmOwp2YXIgaW5pdF9maXNoX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC1vZmYuanMiKCkgewogICAgRmlzaE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDEyLjQ3di4wM20wLS41di40N20tLjQ3NSA1LjA1NkE2Ljc0NCA2Ljc0NCAwIDAgMSAxNSAxOGMtMy41NiAwLTcuNTYtMi41My04LjUtNiAuMzQ4LTEuMjggMS4xMTQtMi40MzMgMi4xMjEtMy4zOG0zLjQ0NC0yLjA4OEE4LjgwMiA4LjgwMiAwIDAgMSAxNSA2YzMuNTYgMCA2LjA2IDIuNTQgNyA2LS4zMDkgMS4xNC0uNzg2IDIuMTc3LTEuNDEzIDMuMDU4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTAuNjdDNyA4IDUuNTggNS45NyAyLjczIDUuNWMtMSAxLjUtMSA1IC4yMyA2LjUtMS4yNCAxLjUtMS4yNCA1LS4yMyA2LjVDNS41OCAxOC4wMyA3IDE2IDcgMTMuMzNtNy40OC00LjM3MkE5Ljc3IDkuNzcgMCAwIDEgMTYgNi4wN20wIDExLjg2YTkuNzcgOS43NyAwIDAgMS0xLjcyOC0zLjYxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi4wMSAxNy45My0uMjMgMS40QTIgMiAwIDAgMSAxMy44IDIxSDkuNWE1Ljk2IDUuOTYgMCAwIDAgMS40OS0zLjk4TTguNTMgM2g1LjI3YTIgMiAwIDAgMSAxLjk4IDEuNjdsLjIzIDEuNE0yIDJsMjAgMjAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoLXN5bWJvbC5qcwp2YXIgRmlzaFN5bWJvbDsKdmFyIGluaXRfZmlzaF9zeW1ib2wgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtc3ltYm9sLmpzIigpIHsKICAgIEZpc2hTeW1ib2wgPSBbWyJwYXRoIiwgeyBkOiAiTTIgMTZzOS0xNSAyMC00QzExIDIzIDIgOCAyIDgiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qcwp2YXIgRmlzaDsKdmFyIGluaXRfZmlzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qcyIoKSB7CiAgICBGaXNoID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDEyYy45NC0zLjQ2IDQuOTQtNiA4LjUtNiAzLjU2IDAgNi4wNiAyLjU0IDcgNi0uOTQgMy40Ny0zLjQ0IDYtNyA2cy03LjU2LTIuNTMtOC41LTZaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEydi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3LjkzYTkuNzcgOS43NyAwIDAgMSAwLTExLjg2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMTAuNjdDNyA4IDUuNTggNS45NyAyLjczIDUuNWMtMSAxLjUtMSA1IC4yMyA2LjUtMS4yNCAxLjUtMS4yNCA1LS4yMyA2LjVDNS41OCAxOC4wMyA3IDE2IDcgMTMuMzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNDYgNy4yNkMxMC4yIDUuODggOS4xNyA0LjI0IDggM2g1LjhhMiAyIDAgMCAxIDEuOTggMS42N2wuMjMgMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjAxIDE3LjkzLS4yMyAxLjRBMiAyIDAgMCAxIDEzLjggMjFIOS41YTUuOTYgNS45NiAwIDAgMCAxLjQ5LTMuOTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoaW5nLWhvb2suanMKdmFyIEZpc2hpbmdIb29rOwp2YXIgaW5pdF9maXNoaW5nX2hvb2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2hpbmctaG9vay5qcyIoKSB7CiAgICBGaXNoaW5nSG9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjU4NiAxMS40MTQtNS45MyA1LjkzYTEgMSAwIDAgMS04LThsMy4xMzctMy4xMzdhLjcwNy43MDcgMCAwIDEgMS4yMDcuNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MTQgOC41ODYgMjIgNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5IiwgY3k6ICIxMCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy1vZmYuanMKdmFyIEZsYWdPZmY7CnZhciBpbml0X2ZsYWdfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLW9mZi5qcyIoKSB7CiAgICBGbGFnT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyVjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy42NTYgMkg4YzMgMCA1IDIgNy4zMzMgMnEyIDAgMy4wNjctLjhBMSAxIDAgMCAxIDIwIDR2MTAuMzQ3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1sZWZ0LmpzCnZhciBGbGFnVHJpYW5nbGVMZWZ0Owp2YXIgaW5pdF9mbGFnX3RyaWFuZ2xlX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctdHJpYW5nbGUtbGVmdC5qcyIoKSB7CiAgICBGbGFnVHJpYW5nbGVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjJWMi44YS44LjggMCAwIDAtMS4xNy0uNzFMNS40NSA3Ljc4YS44LjggMCAwIDAgMCAxLjQ0TDE4IDE1LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLXRyaWFuZ2xlLXJpZ2h0LmpzCnZhciBGbGFnVHJpYW5nbGVSaWdodDsKdmFyIGluaXRfZmxhZ190cmlhbmdsZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1yaWdodC5qcyIoKSB7CiAgICBGbGFnVHJpYW5nbGVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjJWMi44YS44LjggMCAwIDEgMS4xNy0uNzFsMTEuMzggNS42OWEuOC44IDAgMCAxIDAgMS40NEw2IDE1LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFtZS1raW5kbGluZy5qcwp2YXIgRmxhbWVLaW5kbGluZzsKdmFyIGluaXRfZmxhbWVfa2luZGxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLWtpbmRsaW5nLmpzIigpIHsKICAgIEZsYW1lS2luZGxpbmcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAyYzEgMyAyLjUgMy41IDMuNSA0LjVBNSA1IDAgMCAxIDE3IDEwYTUgNSAwIDEgMS0xMCAwYzAtLjMgMC0uNi4xLS45YTIgMiAwIDEgMCAzLjMtMkM4IDQuNSAxMSAyIDEyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjIgMTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE4IDE0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLmpzCnZhciBGbGFnOwp2YXIgaW5pdF9mbGFnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFnLmpzIigpIHsKICAgIEZsYWcgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIyVjRhMSAxIDAgMCAxIC40LS44QTYgNiAwIDAgMSA4IDJjMyAwIDUgMiA3LjMzMyAycTIgMCAzLjA2Ny0uOEExIDEgMCAwIDEgMjAgNHYxMGExIDEgMCAwIDEtLjQuOEE2IDYgMCAwIDEgMTYgMTZjLTMgMC01LTItOC0yYTYgNiAwIDAgMC00IDEuNTI4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhbWUuanMKdmFyIEZsYW1lOwp2YXIgaW5pdF9mbGFtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhbWUuanMiKCkgewogICAgRmxhbWUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAzcTEgNCA0IDYuNXQzIDUuNWExIDEgMCAwIDEtMTQgMCA1IDUgMCAwIDEgMS0zIDEgMSAwIDAgMCA1IDBjMC0yLTEuNS0zLTEuNS01cTAtMiAyLjUtNCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNobGlnaHQtb2ZmLmpzCnZhciBGbGFzaGxpZ2h0T2ZmOwp2YXIgaW5pdF9mbGFzaGxpZ2h0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2hsaWdodC1vZmYuanMiKCkgewogICAgRmxhc2hsaWdodE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjY1MiA2SDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNiAxNnY0YTIgMiAwIDAgMS0yIDJoLTRhMiAyIDAgMCAxLTItMnYtOGE0IDQgMCAwIDAtLjgtMi40bC0uNi0uOEEzIDMgMCAwIDEgNiA3VjYiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjY0OSAySDE3YTEgMSAwIDAgMSAxIDF2NGEzIDMgMCAwIDEtLjYgMS44bC0uNi44YTQgNCAwIDAgMC0uNTUgMS4wMDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzCnZhciBGbGFzaGxpZ2h0Owp2YXIgaW5pdF9mbGFzaGxpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzIigpIHsKICAgIEZsYXNobGlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3YxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3IDJhMSAxIDAgMCAxIDEgMXY0YTMgMyAwIDAgMS0uNiAxLjhsLS42LjhBNCA0IDAgMCAwIDE2IDEydjhhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi04YTQgNCAwIDAgMC0uOC0yLjRsLS42LS44QTMgMyAwIDAgMSA2IDdWM2ExIDEgMCAwIDEgMS0xeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzay1jb25pY2FsLW9mZi5qcwp2YXIgRmxhc2tDb25pY2FsT2ZmOwp2YXIgaW5pdF9mbGFza19jb25pY2FsX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC1vZmYuanMiKCkgewogICAgRmxhc2tDb25pY2FsT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjYuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAyMGEyIDIgMCAwIDEtMiAySDZhMiAyIDAgMCAxLTEuNzU1LTIuOTZsNS4yMjctOS41NjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVIMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLXJvdW5kLmpzCnZhciBGbGFza1JvdW5kOwp2YXIgaW5pdF9mbGFza19yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stcm91bmQuanMiKCkgewogICAgRmxhc2tSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJ2Ni4yOTJhNyA3IDAgMSAwIDQgMFYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLWNvbmljYWwuanMKdmFyIEZsYXNrQ29uaWNhbDsKdmFyIGluaXRfZmxhc2tfY29uaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC5qcyIoKSB7CiAgICBGbGFza0NvbmljYWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAydjZhMiAyIDAgMCAwIC4yNDUuOTZsNS41MSAxMC4wOEEyIDIgMCAwIDEgMTggMjJINmEyIDIgMCAwIDEtMS43NTUtMi45Nmw1LjUxLTEwLjA4QTIgMiAwIDAgMCAxMCA4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi40NTMgMTVoMTEuMDk0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAyaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwuanMKdmFyIEZsaXBIb3Jpem9udGFsOwp2YXIgaW5pdF9mbGlwX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBGbGlwSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM0g1YTIgMiAwIDAgMC0yIDJ2MTRjMCAxLjEuOSAyIDIgMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoM2EyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwtMi5qcwp2YXIgRmxpcEhvcml6b250YWwyOwp2YXIgaW5pdF9mbGlwX2hvcml6b250YWxfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC1ob3Jpem9udGFsLTIuanMiKCkgewogICAgRmxpcEhvcml6b250YWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDUgNS01IDVWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSA3LTUgNSA1IDVWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwtMi5qcwp2YXIgRmxpcFZlcnRpY2FsMjsKdmFyIGluaXRfZmxpcF92ZXJ0aWNhbF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLTIuanMiKCkgewogICAgRmxpcFZlcnRpY2FsMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMtNSA1LTUtNWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS01LTUtNSA1aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEyaC0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxpcC12ZXJ0aWNhbC5qcwp2YXIgRmxpcFZlcnRpY2FsOwp2YXIgaW5pdF9mbGlwX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLXZlcnRpY2FsLmpzIigpIHsKICAgIEZsaXBWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWNWEyIDIgMCAwIDAtMi0ySDVhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbG93ZXItMi5qcwp2YXIgRmxvd2VyMjsKdmFyIGluaXRfZmxvd2VyXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci0yLmpzIigpIHsKICAgIEZsb3dlcjIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA1YTMgMyAwIDEgMSAzIDNtLTMtM2EzIDMgMCAxIDAtMyAzbTMtM3YxTTkgOGEzIDMgMCAxIDAgMyAzTTkgOGgxbTUgMGEzIDMgMCAxIDEtMyAzbTMtM2gtMW0tMiAzdi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMmM0LjIgMCA3LTEuNjY3IDctNS00LjIgMC03IDEuNjY3LTcgNVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJjLTQuMiAwLTctMS42NjctNy01IDQuMiAwIDcgMS42NjcgNyA1WiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qcwp2YXIgRmxvd2VyOwp2YXIgaW5pdF9mbG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qcyIoKSB7CiAgICBGbG93ZXIgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDE2LjVBNC41IDQuNSAwIDEgMSA3LjUgMTIgNC41IDQuNSAwIDEgMSAxMiA3LjVhNC41IDQuNSAwIDEgMSA0LjUgNC41IDQuNSA0LjUgMCAxIDEtNC41IDQuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3LjVWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTJIOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi41IDEySDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2LjVWMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA4IDEuODggMS44OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4xMiA5Ljg4IDE2IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxNiAxLjg4LTEuODgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuMTIgMTQuMTIgMTYgMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2N1cy5qcwp2YXIgRm9jdXM7CnZhciBpbml0X2ZvY3VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2N1cy5qcyIoKSB7CiAgICBGb2N1cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC1ob3Jpem9udGFsLmpzCnZhciBGb2xkSG9yaXpvbnRhbDsKdmFyIGluaXRfZm9sZF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkLWhvcml6b250YWwuanMiKCkgewogICAgRm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOS0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMTUgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGQtdmVydGljYWwuanMKdmFyIEZvbGRWZXJ0aWNhbDsKdmFyIGluaXRfZm9sZF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBGb2xkVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTktMy0zLTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1LTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItYXJjaGl2ZS5qcwp2YXIgRm9sZGVyQXJjaGl2ZTsKdmFyIGluaXRfZm9sZGVyX2FyY2hpdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1hcmNoaXZlLmpzIigpIHsKICAgIEZvbGRlckFyY2hpdmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjkgMTkuOEEyIDIgMCAwIDAgMjIgMThWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyaDUuMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxN3YtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jaGVjay5qcwp2YXIgRm9sZGVyQ2hlY2s7CnZhciBpbml0X2ZvbGRlcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNoZWNrLmpzIigpIHsKICAgIEZvbGRlckNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTMgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jbG9jay5qcwp2YXIgRm9sZGVyQ2xvY2s7CnZhciBpbml0X2ZvbGRlcl9jbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb2NrLmpzIigpIHsKICAgIEZvbGRlckNsb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTR2Mi4ybDEuNiAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIxNiIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb3NlZC5qcwp2YXIgRm9sZGVyQ2xvc2VkOwp2YXIgaW5pdF9mb2xkZXJfY2xvc2VkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY2xvc2VkLmpzIigpIHsKICAgIEZvbGRlckNsb3NlZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZGUuanMKdmFyIEZvbGRlckNvZGU7CnZhciBpbml0X2ZvbGRlcl9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY29kZS5qcyIoKSB7CiAgICBGb2xkZXJDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTAuNSA4IDEzbDIgMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwLjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZy5qcwp2YXIgRm9sZGVyQ29nOwp2YXIgaW5pdF9mb2xkZXJfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItY29nLmpzIigpIHsKICAgIEZvbGRlckNvZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjMgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjk4YTIgMiAwIDAgMSAxLjY5LjlsLjY2IDEuMkEyIDIgMCAwIDAgMTIgNmg4YTIgMiAwIDAgMSAyIDJ2My4zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWRvdC5qcwp2YXIgRm9sZGVyRG90Owp2YXIgaW5pdF9mb2xkZXJfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZG90LmpzIigpIHsKICAgIEZvbGRlckRvdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1kb3duLmpzCnZhciBGb2xkZXJEb3duOwp2YXIgaW5pdF9mb2xkZXJfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWRvd24uanMiKCkgewogICAgRm9sZGVyRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEzLTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LTIuanMKdmFyIEZvbGRlckdpdDI7CnZhciBpbml0X2ZvbGRlcl9naXRfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWdpdC0yLmpzIigpIHsKICAgIEZvbGRlckdpdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOWE1IDUgMCAwIDEtNS01djgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAyMEg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiMTIiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxOSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWdpdC5qcwp2YXIgRm9sZGVyR2l0Owp2YXIgaW5pdF9mb2xkZXJfZ2l0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZ2l0LmpzIigpIHsKICAgIEZvbGRlckdpdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWhlYXJ0LmpzCnZhciBGb2xkZXJIZWFydDsKdmFyIGluaXRfZm9sZGVyX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaGVhcnQuanMiKCkgewogICAgRm9sZGVySGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC42MzggMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYzLjQxNyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC42MiAxOC44QTIuMjUgMi4yNSAwIDEgMSAxOCAxNS44MzZhMi4yNSAyLjI1IDAgMSAxIDMuMzggMi45NjZsLTIuNjI2IDIuODU2YS45OTguOTk4IDAgMCAxLTEuNTA3IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWlucHV0LmpzCnZhciBGb2xkZXJJbnB1dDsKdmFyIGluaXRfZm9sZGVyX2lucHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaW5wdXQuanMiKCkgewogICAgRm9sZGVySW5wdXQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlWNWEyIDIgMCAwIDEgMi0yaDMuOWEyIDIgMCAwIDEgMS42OS45bC44MSAxLjJhMiAyIDAgMCAwIDEuNjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNiAzLTMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWthbmJhbi5qcwp2YXIgRm9sZGVyS2FuYmFuOwp2YXIgaW5pdF9mb2xkZXJfa2FuYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIta2FuYmFuLmpzIigpIHsKICAgIEZvbGRlckthbmJhbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMjBoMTZhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOTNhMiAyIDAgMCAxLTEuNjYtLjlsLS44Mi0xLjJBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNjMCAxLjEuOSAyIDIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1rZXkuanMKdmFyIEZvbGRlcktleTsKdmFyIGluaXRfZm9sZGVyX2tleSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWtleS5qcyIoKSB7CiAgICBGb2xkZXJLZXkgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNC00LjUgNC41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1IDEgMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1sb2NrLmpzCnZhciBGb2xkZXJMb2NrOwp2YXIgaW5pdF9mb2xkZXJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWxvY2suanMiKCkgewogICAgRm9sZGVyTG9jayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjE3Iiwgcng6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwIDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2Mi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE3di0yYTIgMiAwIDEgMC00IDB2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1taW51cy5qcwp2YXIgRm9sZGVyTWludXM7CnZhciBpbml0X2ZvbGRlcl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW1pbnVzLmpzIigpIHsKICAgIEZvbGRlck1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxM2g2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLWRvdC5qcwp2YXIgRm9sZGVyT3BlbkRvdDsKdmFyIGluaXRfZm9sZGVyX29wZW5fZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3Blbi1kb3QuanMiKCkgewogICAgRm9sZGVyT3BlbkRvdCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS40NS0yLjlBMiAyIDAgMCAxIDkuMjQgMTBIMjBhMiAyIDAgMCAxIDEuOTQgMi41bC0xLjU1IDZhMiAyIDAgMCAxLTEuOTQgMS41SDRhMiAyIDAgMCAxLTItMlY1YzAtMS4xLjktMiAyLTJoMy45M2EyIDIgMCAwIDEgMS42Ni45bC44MiAxLjJhMiAyIDAgMCAwIDEuNjYuOUgxOGEyIDIgMCAwIDEgMiAydjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNCIsIGN5OiAiMTUiLCByOiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1vcGVuLmpzCnZhciBGb2xkZXJPcGVuOwp2YXIgaW5pdF9mb2xkZXJfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4uanMiKCkgewogICAgRm9sZGVyT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTYgMTQgMS41LTIuOUEyIDIgMCAwIDEgOS4yNCAxMEgyMGEyIDIgMCAwIDEgMS45NCAyLjVsLTEuNTQgNmEyIDIgMCAwIDEtMS45NSAxLjVINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMThhMiAyIDAgMCAxIDIgMnYyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW91dHB1dC5qcwp2YXIgRm9sZGVyT3V0cHV0Owp2YXIgaW5pdF9mb2xkZXJfb3V0cHV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3V0cHV0LmpzIigpIHsKICAgIEZvbGRlck91dHB1dCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgNy41VjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMS41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSAxMC0zIDMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXBlbi5qcwp2YXIgRm9sZGVyUGVuOwp2YXIgaW5pdF9mb2xkZXJfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcGVuLmpzIigpIHsKICAgIEZvbGRlclBlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTEuNVY1YTIgMiAwIDAgMSAyLTJoMy45Yy43IDAgMS4zLjMgMS43LjlsLjggMS4yYy40LjYgMSAuOSAxLjcuOUgyMGEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJoLTkuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4zNzggMTMuNjI2YTEgMSAwIDEgMC0zLjAwNC0zLjAwNGwtNS4wMSA1LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcGx1cy5qcwp2YXIgRm9sZGVyUGx1czsKdmFyIGluaXRfZm9sZGVyX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1wbHVzLmpzIigpIHsKICAgIEZvbGRlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTNoNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAyMGEyIDIgMCAwIDAgMi0yVjhhMiAyIDAgMCAwLTItMmgtNy45YTIgMiAwIDAgMS0xLjY5LS45TDkuNiAzLjlBMiAyIDAgMCAwIDcuOTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTNhMiAyIDAgMCAwIDIgMloiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItcm9vdC5qcwp2YXIgRm9sZGVyUm9vdDsKdmFyIGluaXRfZm9sZGVyX3Jvb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1yb290LmpzIigpIHsKICAgIEZvbGRlclJvb3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIwaDE2YTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjkzYTIgMiAwIDAgMS0xLjY2LS45bC0uODItMS4yQTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYzAgMS4xLjkgMiAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTV2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zZWFyY2gtMi5qcwp2YXIgRm9sZGVyU2VhcmNoMjsKdmFyIGluaXRfZm9sZGVyX3NlYXJjaF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLTIuanMiKCkgewogICAgRm9sZGVyU2VhcmNoMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEuNSIsIGN5OiAiMTIuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjMgMTQuMyAxNSAxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zZWFyY2guanMKdmFyIEZvbGRlclNlYXJjaDsKdmFyIGluaXRfZm9sZGVyX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXNlYXJjaC5qcyIoKSB7CiAgICBGb2xkZXJTZWFyY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC43IDIwSDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2NC4xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTEuOS0xLjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTciLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zeW1saW5rLmpzCnZhciBGb2xkZXJTeW1saW5rOwp2YXIgaW5pdF9mb2xkZXJfc3ltbGluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bWxpbmsuanMiKCkgewogICAgRm9sZGVyU3ltbGluayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS4zNVY1YTIgMiAwIDAgMSAyLTJoMy45YTIgMiAwIDAgMSAxLjY5LjlsLjgxIDEuMmEyIDIgMCAwIDAgMS42Ny45SDIwYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmg3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTYgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1zeW5jLmpzCnZhciBGb2xkZXJTeW5jOwp2YXIgaW5pdF9mb2xkZXJfc3luYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bmMuanMiKCkgewogICAgRm9sZGVyU3luYyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMjBINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgzLjlhMiAyIDAgMCAxIDEuNjkuOWwuODEgMS4yYTIgMiAwIDAgMCAxLjY3LjlIMjBhMiAyIDAgMCAxIDIgMnYuNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMHY0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgMTQgMS41MzUtMS42MDVhNSA1IDAgMCAxIDggMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIydi00aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE4LTEuNTM1IDEuNjA1YTUgNSAwIDAgMS04LTEuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci10cmVlLmpzCnZhciBGb2xkZXJUcmVlOwp2YXIgaW5pdF9mb2xkZXJfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXRyZWUuanMiKCkgewogICAgRm9sZGVyVHJlZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYTEgMSAwIDAgMCAxLTFWNmExIDEgMCAwIDAtMS0xaC0yLjVhMSAxIDAgMCAxLS44LS40bC0uOS0xLjJBMSAxIDAgMCAwIDE1IDNoLTJhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIxYTEgMSAwIDAgMCAxLTF2LTNhMSAxIDAgMCAwLTEtMWgtMi45YTEgMSAwIDAgMS0uODgtLjU1bC0uNDItLjg1YTEgMSAwIDAgMC0uOTItLjZIMTNhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWEyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjEzYTIgMiAwIDAgMCAyIDJoMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci11cC5qcwp2YXIgRm9sZGVyVXA7CnZhciBpbml0X2ZvbGRlcl91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXVwLmpzIigpIHsKICAgIEZvbGRlclVwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMyAzLTMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXguanMKdmFyIEZvbGRlclg7CnZhciBpbml0X2ZvbGRlcl94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIteC5qcyIoKSB7CiAgICBGb2xkZXJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMjBhMiAyIDAgMCAwIDItMlY4YTIgMiAwIDAgMC0yLTJoLTcuOWEyIDIgMCAwIDEtMS42OS0uOUw5LjYgMy45QTIgMiAwIDAgMCA3LjkzIDNINGEyIDIgMCAwIDAtMiAydjEzYTIgMiAwIDAgMCAyIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSAxMC41IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDEwLjUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLmpzCnZhciBGb2xkZXI7CnZhciBpbml0X2ZvbGRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLmpzIigpIHsKICAgIEZvbGRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwYTIgMiAwIDAgMCAyLTJWOGEyIDIgMCAwIDAtMi0yaC03LjlhMiAyIDAgMCAxLTEuNjktLjlMOS42IDMuOUEyIDIgMCAwIDAgNy45MyAzSDRhMiAyIDAgMCAwLTIgMnYxM2EyIDIgMCAwIDAgMiAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlcnMuanMKdmFyIEZvbGRlcnM7CnZhciBpbml0X2ZvbGRlcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlcnMuanMiKCkgewogICAgRm9sZGVycyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDVhMiAyIDAgMCAxIDIgMnY3YTIgMiAwIDAgMS0yIDJIOWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgyLjVhMS41IDEuNSAwIDAgMSAxLjIuNmwuNi44YTEuNSAxLjUgMCAwIDAgMS4yLjZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC4yNjhhMiAyIDAgMCAwLTEgMS43MzhWMTlhMiAyIDAgMCAwIDIgMmgxMWEyIDIgMCAwIDAgMS43MzItMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvb3RwcmludHMuanMKdmFyIEZvb3RwcmludHM7CnZhciBpbml0X2Zvb3RwcmludHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zvb3RwcmludHMuanMiKCkgewogICAgRm9vdHByaW50cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTZ2LTIuMzhDNCAxMS41IDIuOTcgMTAuNSAzIDhjLjAzLTIuNzIgMS40OS02IDQuNS02QzkuMzcgMiAxMCAzLjggMTAgNS41YzAgMy4xMS0yIDUuNjYtMiA4LjY4VjE2YTIgMiAwIDEgMS00IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDIwdi0yLjM4YzAtMi4xMiAxLjAzLTMuMTIgMS01LjYyLS4wMy0yLjcyLTEuNDktNi00LjUtNkMxNC42MyA2IDE0IDcuOCAxNCA5LjVjMCAzLjExIDIgNS42NiAyIDguNjhWMjBhMiAyIDAgMSAwIDQgMFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JrbGlmdC5qcwp2YXIgRm9ya2xpZnQ7CnZhciBpbml0X2ZvcmtsaWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JrbGlmdC5qcyIoKSB7CiAgICBGb3JrbGlmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEySDVhMiAyIDAgMCAwLTIgMnY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTMiLCBjeTogIjE5IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTloM201LTE3djE3aDZNNiAxMlY3YzAtMS4xLjktMiAyLTJoM2w1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JtLmpzCnZhciBGb3JtOwp2YXIgaW5pdF9mb3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3JtLmpzIigpIHsKICAgIEZvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAyaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICIxOCIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNCIsIHk6ICI2Iiwgd2lkdGg6ICIxNiIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3J3YXJkLmpzCnZhciBGb3J3YXJkOwp2YXIgaW5pdF9mb3J3YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb3J3YXJkLmpzIigpIHsKICAgIEZvcndhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNyA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTh2LTJhNCA0IDAgMCAxIDQtNGgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lLmpzCnZhciBGcmFtZTsKdmFyIGluaXRfZnJhbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lLmpzIigpIHsKICAgIEZyYW1lID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjIiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOCIsIHgyOiAiMTgiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJhbWVyLmpzCnZhciBGcmFtZXI7CnZhciBpbml0X2ZyYW1lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJhbWVyLmpzIigpIHsKICAgIEZyYW1lciA9IFtbInBhdGgiLCB7IGQ6ICJNNSAxNlY5aDE0VjJINWwxNCAxNGgtN20tNyAwIDcgN3YtN20tNyAwaDciIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJvd24uanMKdmFyIEZyb3duOwp2YXIgaW5pdF9mcm93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnJvd24uanMiKCkgewogICAgRnJvd24gPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNnMtMS41LTItNC0yLTQgMi00IDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdWVsLmpzCnZhciBGdWVsOwp2YXIgaW5pdF9mdWVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdWVsLmpzIigpIHsKICAgIEZ1ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxM2gyYTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDAgNCAwdi02Ljk5OGEyIDIgMCAwIDAtLjU5LTEuNDJMMTggNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMVY1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVsbHNjcmVlbi5qcwp2YXIgRnVsbHNjcmVlbjsKdmFyIGluaXRfZnVsbHNjcmVlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVsbHNjcmVlbi5qcyIoKSB7CiAgICBGdWxsc2NyZWVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEwIiwgaGVpZ2h0OiAiOCIsIHg6ICI3IiwgeTogIjgiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdW5uZWwtcGx1cy5qcwp2YXIgRnVubmVsUGx1czsKdmFyIGluaXRfZnVubmVsX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC1wbHVzLmpzIigpIHsKICAgIEZ1bm5lbFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4zNTQgM0gzYTEgMSAwIDAgMC0uNzQyIDEuNjdsNy4yMjUgNy45ODlBMiAyIDAgMCAxIDEwIDE0djZhMSAxIDAgMCAwIC41NTMuODk1bDIgMUExIDEgMCAwIDAgMTQgMjF2LTdhMiAyIDAgMCAxIC41MTctMS4zNDFsMS4yMTgtMS4zNDgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDN2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC14LmpzCnZhciBGdW5uZWxYOwp2YXIgaW5pdF9mdW5uZWxfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVubmVsLXguanMiKCkgewogICAgRnVubmVsWCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjUzMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR2NmExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MWwuNDI3LS40NzMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuNSAzLjUgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMy41LTUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC5qcwp2YXIgRnVubmVsOwp2YXIgaW5pdF9mdW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC5qcyIoKSB7CiAgICBGdW5uZWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMCAyMGExIDEgMCAwIDAgLjU1My44OTVsMiAxQTEgMSAwIDAgMCAxNCAyMXYtN2EyIDIgMCAwIDEgLjUxNy0xLjM0MUwyMS43NCA0LjY3QTEgMSAwIDAgMCAyMSAzSDNhMSAxIDAgMCAwLS43NDIgMS42N2w3LjIyNSA3Ljk4OUEyIDIgMCAwIDEgMTAgMTR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLWVuZC5qcwp2YXIgR2FsbGVyeUhvcml6b250YWxFbmQ7CnZhciBpbml0X2dhbGxlcnlfaG9yaXpvbnRhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC1lbmQuanMiKCkgewogICAgR2FsbGVyeUhvcml6b250YWxFbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA1djE0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiMTAiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC5qcwp2YXIgR2FsbGVyeUhvcml6b250YWw7CnZhciBpbml0X2dhbGxlcnlfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLmpzIigpIHsKICAgIEdhbGxlcnlIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzdjE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjEyIiwgaGVpZ2h0OiAiMTgiLCB4OiAiNiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXRodW1ibmFpbHMuanMKdmFyIEdhbGxlcnlUaHVtYm5haWxzOwp2YXIgaW5pdF9nYWxsZXJ5X3RodW1ibmFpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdGh1bWJuYWlscy5qcyIoKSB7CiAgICBHYWxsZXJ5VGh1bWJuYWlscyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTQiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC1lbmQuanMKdmFyIEdhbGxlcnlWZXJ0aWNhbEVuZDsKdmFyIGluaXRfZ2FsbGVyeV92ZXJ0aWNhbF9lbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdmVydGljYWwtZW5kLmpzIigpIHsKICAgIEdhbGxlcnlWZXJ0aWNhbEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDZoMTQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC5qcwp2YXIgR2FsbGVyeVZlcnRpY2FsOwp2YXIgaW5pdF9nYWxsZXJ5X3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYWxsZXJ5LXZlcnRpY2FsLmpzIigpIHsKICAgIEdhbGxlcnlWZXJ0aWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMmgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgeDogIjMiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FtZXBhZC0yLmpzCnZhciBHYW1lcGFkMjsKdmFyIGluaXRfZ2FtZXBhZF8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLTIuanMiKCkgewogICAgR2FtZXBhZDIgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICIxMCIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjkiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjMyIDVINi42OGE0IDQgMCAwIDAtMy45NzggMy41OWMtLjAwNi4wNTItLjAxLjEwMS0uMDE3LjE1MkMyLjYwNCA5LjQxNiAyIDE0LjQ1NiAyIDE2YTMgMyAwIDAgMCAzIDNjMSAwIDEuNS0uNSAyLTFsMS40MTQtMS40MTRBMiAyIDAgMCAxIDkuODI4IDE2aDQuMzQ0YTIgMiAwIDAgMSAxLjQxNC41ODZMMTcgMThjLjUuNSAxIDEgMiAxYTMgMyAwIDAgMCAzLTNjMC0xLjU0NS0uNjA0LTYuNTg0LS42ODUtNy4yNTgtLjAwNy0uMDUtLjAxMS0uMS0uMDE3LS4xNTFBNCA0IDAgMCAwIDE3LjMyIDV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FtZXBhZC1kaXJlY3Rpb25hbC5qcwp2YXIgR2FtZXBhZERpcmVjdGlvbmFsOwp2YXIgaW5pdF9nYW1lcGFkX2RpcmVjdGlvbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLWRpcmVjdGlvbmFsLmpzIigpIHsKICAgIEdhbWVwYWREaXJlY3Rpb25hbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjE0NiAxNS44NTRhMS4yMDcgMS4yMDcgMCAwIDEgMS43MDggMGwxLjU2IDEuNTZBMiAyIDAgMCAxIDE1IDE4LjgyOFYyMWExIDEgMCAwIDEtMSAxaC00YTEgMSAwIDAgMS0xLTF2LTIuMTcyYTIgMiAwIDAgMSAuNTg2LTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC44MjggMTVhMiAyIDAgMCAxLTEuNDE0LS41ODZsLTEuNTYtMS41NmExLjIwNyAxLjIwNyAwIDAgMSAwLTEuNzA4bDEuNTYtMS41NkEyIDIgMCAwIDEgMTguODI4IDlIMjFhMSAxIDAgMCAxIDEgMXY0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuNTg2IDE0LjQxNEEyIDIgMCAwIDEgNS4xNzIgMTVIM2ExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAxLTFoMi4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NmwxLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEgMCAxLjcwOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAzYTEgMSAwIDAgMSAxLTFoNGExIDEgMCAwIDEgMSAxdjIuMTcyYTIgMiAwIDAgMS0uNTg2IDEuNDE0bC0xLjU2IDEuNTZhMS4yMDcgMS4yMDcgMCAwIDEtMS43MDggMGwtMS41Ni0xLjU2QTIgMiAwIDAgMSA5IDUuMTcyeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQuanMKdmFyIEdhbWVwYWQ7CnZhciBpbml0X2dhbWVwYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQuanMiKCkgewogICAgR2FtZXBhZCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjEwIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiOCIsIHkxOiAiMTAiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiMTMiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIxOC4wMSIsIHkxOiAiMTEiLCB5MjogIjExIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTIiLCB4OiAiMiIsIHk6ICI2Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanMKdmFyIEdhdWdlOwp2YXIgaW5pdF9nYXVnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanMiKCkgewogICAgR2F1Z2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4zNCAxOWExMCAxMCAwIDEgMSAxNy4zMiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F2ZWwuanMKdmFyIEdhdmVsOwp2YXIgaW5pdF9nYXZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F2ZWwuanMiKCkgewogICAgR2F2ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMy04LjM4MSA4LjM4YTEgMSAwIDAgMS0zLjAwMS0zbDguMzg0LTguMzgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDEwLjUtOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOCA2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDcuNSA4IDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW0uanMKdmFyIEdlbTsKdmFyIGluaXRfZ2VtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW0uanMiKCkgewogICAgR2VtID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuNSAzIDggOWw0IDEzIDQtMTMtMi41LTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcgM2EyIDIgMCAwIDEgMS42LjhsMyA0YTIgMiAwIDAgMSAuMDEzIDIuMzgybC03Ljk5IDEwLjk4NmEyIDIgMCAwIDEtMy4yNDcgMGwtNy45OS0xMC45ODZBMiAyIDAgMCAxIDIuNCA3LjhsMi45OTgtMy45OTdBMiAyIDAgMCAxIDcgM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA5aDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2VvcmdpYW4tbGFyaS5qcwp2YXIgR2VvcmdpYW5MYXJpOwp2YXIgaW5pdF9nZW9yZ2lhbl9sYXJpID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nZW9yZ2lhbi1sYXJpLmpzIigpIHsKICAgIEdlb3JnaWFuTGFyaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjUgMjFhNy41IDcuNSAwIDEgMSA3LjM1LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIxaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJWMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dob3N0LmpzCnZhciBHaG9zdDsKdmFyIGluaXRfZ2hvc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dob3N0LmpzIigpIHsKICAgIEdob3N0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhOCA4IDAgMCAwLTggOHYxMmwzLTMgMi41IDIuNUwxMiAxOWwyLjUgMi41TDE3IDE5bDMgM1YxMGE4IDggMCAwIDAtOC04eiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanMKdmFyIEdpZnQ7CnZhciBpbml0X2dpZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanMiKCkgewogICAgR2lmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI4Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjQiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxMnY3YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0ydi03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSA4YTIuNSAyLjUgMCAwIDEgMC01QTQuOCA4IDAgMCAxIDEyIDhhNC44IDggMCAwIDEgNC41LTUgMi41IDIuNSAwIDAgMSAwIDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLW1pbnVzLmpzCnZhciBHaXRCcmFuY2hNaW51czsKdmFyIGluaXRfZ2l0X2JyYW5jaF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC1taW51cy5qcyIoKSB7CiAgICBHaXRCcmFuY2hNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDZhOSA5IDAgMCAwLTkgOVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLmpzCnZhciBHaXRCcmFuY2g7CnZhciBpbml0X2dpdF9icmFuY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1icmFuY2guanMiKCkgewogICAgR2l0QnJhbmNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiMyIsIHkyOiAiMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5YTkgOSAwIDAgMS05IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLXBsdXMuanMKdmFyIEdpdEJyYW5jaFBsdXM7CnZhciBpbml0X2dpdF9icmFuY2hfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC1wbHVzLmpzIigpIHsKICAgIEdpdEJyYW5jaFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDN2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWEzIDMgMCAxIDAgMC02IDMgMyAwIDAgMCAwIDZ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2eiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA2YTkgOSAwIDAgMC05IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOGgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtaG9yaXpvbnRhbC5qcwp2YXIgR2l0Q29tbWl0SG9yaXpvbnRhbDsKdmFyIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tbWl0LWhvcml6b250YWwuanMiKCkgewogICAgR2l0Q29tbWl0SG9yaXpvbnRhbCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiOSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbW1pdC12ZXJ0aWNhbC5qcwp2YXIgR2l0Q29tbWl0VmVydGljYWw7CnZhciBpbml0X2dpdF9jb21taXRfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtdmVydGljYWwuanMiKCkgewogICAgR2l0Q29tbWl0VmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWNvbXBhcmUtYXJyb3dzLmpzCnZhciBHaXRDb21wYXJlQXJyb3dzOwp2YXIgaW5pdF9naXRfY29tcGFyZV9hcnJvd3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21wYXJlLWFycm93cy5qcyIoKSB7CiAgICBHaXRDb21wYXJlQXJyb3dzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOEg3YTIgMiAwIDAgMS0yLTJWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS5qcwp2YXIgR2l0Q29tcGFyZTsKdmFyIGluaXRfZ2l0X2NvbXBhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21wYXJlLmpzIigpIHsKICAgIEdpdENvbXBhcmUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDZoM2EyIDIgMCAwIDEgMiAydjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMThIOGEyIDIgMCAwIDEtMi0yVjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtZm9yay5qcwp2YXIgR2l0Rm9yazsKdmFyIGluaXRfZ2l0X2ZvcmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1mb3JrLmpzIigpIHsKICAgIEdpdEZvcmsgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA5djJjMCAuNi0uNCAxLTEgMUg3Yy0uNiAwLTEtLjQtMS0xVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1ncmFwaC5qcwp2YXIgR2l0R3JhcGg7CnZhciBpbml0X2dpdF9ncmFwaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWdyYXBoLmpzIigpIHsKICAgIEdpdEdyYXBoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5djYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE1LjdBOSA5IDAgMCAwIDE5IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtbWVyZ2UuanMKdmFyIEdpdE1lcmdlOwp2YXIgaW5pdF9naXRfbWVyZ2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1tZXJnZS5qcyIoKSB7CiAgICBHaXRNZXJnZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMVY5YTkgOSAwIDAgMCA5IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWFycm93LmpzCnZhciBHaXRQdWxsUmVxdWVzdEFycm93Owp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Fycm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWFycm93LmpzIigpIHsKICAgIEdpdFB1bGxSZXF1ZXN0QXJyb3cgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDl2MTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzCnZhciBHaXRQdWxsUmVxdWVzdENsb3NlZDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9jbG9zZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzIigpIHsKICAgIEdpdFB1bGxSZXF1ZXN0Q2xvc2VkID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA5djEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDktNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExLjVWMTUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY3JlYXRlLWFycm93LmpzCnZhciBHaXRQdWxsUmVxdWVzdENyZWF0ZUFycm93Owp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUtYXJyb3cuanMiKCkgewogICAgR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgOXYxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNmg1YTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUuanMKdmFyIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlOwp2YXIgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUuanMiKCkgewogICAgR2l0UHVsbFJlcXVlc3RDcmVhdGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDl2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE4aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdC5qcwp2YXIgR2l0UHVsbFJlcXVlc3REcmFmdDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9kcmFmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1kcmFmdC5qcyIoKSB7CiAgICBHaXRQdWxsUmVxdWVzdERyYWZ0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjYiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2VjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTF2LTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNiIsIHkxOiAiOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzCnZhciBHaXRQdWxsUmVxdWVzdDsKdmFyIGluaXRfZ2l0X3B1bGxfcmVxdWVzdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC5qcyIoKSB7CiAgICBHaXRQdWxsUmVxdWVzdCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICI2IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmgzYTIgMiAwIDAgMSAyIDJ2NyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2IiwgeTE6ICI5IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGh1Yi5qcwp2YXIgR2l0aHViOwp2YXIgaW5pdF9naXRodWIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdGh1Yi5qcyIoKSB7CiAgICBHaXRodWIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMnYtNGE0LjggNC44IDAgMCAwLTEtMy41YzMgMCA2LTIgNi01LjUuMDgtMS4yNS0uMjctMi40OC0xLTMuNS4yOC0xLjE1LjI4LTIuMzUgMC0zLjUgMCAwLTEgMC0zIDEuNS0yLjY0LS41LTUuMzYtLjUtOCAwQzYgMiA1IDIgNSAyYy0uMyAxLjE1LS4zIDIuMzUgMCAzLjVBNS40MDMgNS40MDMgMCAwIDAgNCA5YzAgMy41IDMgNS41IDYgNS41LS4zOS40OS0uNjggMS4wNS0uODUgMS42NS0uMTcuNi0uMjIgMS4yMy0uMTUgMS44NXY0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThjLTQuNTEgMi01LTItNy0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzCnZhciBHaXRsYWI7CnZhciBpbml0X2dpdGxhYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzIigpIHsKICAgIEdpdGxhYiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIyIDEzLjI5LTMuMzMtMTBhLjQyLjQyIDAgMCAwLS4xNC0uMTguMzguMzggMCAwIDAtLjIyLS4xMS4zOS4zOSAwIDAgMC0uMjMuMDcuNDIuNDIgMCAwIDAtLjE0LjE4bC0yLjI2IDYuNjdIOC4zMkw2LjEgMy4yNmEuNDIuNDIgMCAwIDAtLjEtLjE4LjM4LjM4IDAgMCAwLS4yNi0uMDguMzkuMzkgMCAwIDAtLjIzLjA3LjQyLjQyIDAgMCAwLS4xNC4xOEwyIDEzLjI5YS43NC43NCAwIDAgMCAuMjcuODNMMTIgMjFsOS42OS02Ljg4YS43MS43MSAwIDAgMCAuMzEtLjgzWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsYXNzLXdhdGVyLmpzCnZhciBHbGFzc1dhdGVyOwp2YXIgaW5pdF9nbGFzc193YXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Mtd2F0ZXIuanMiKCkgewogICAgR2xhc3NXYXRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuMTE2IDQuMTA0QTEgMSAwIDAgMSA2LjExIDNoMTEuNzhhMSAxIDAgMCAxIC45OTQgMS4xMDVMMTcuMTkgMjAuMjFBMiAyIDAgMCAxIDE1LjIgMjJIOC44YTIgMiAwIDAgMS0yLTEuNzl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJhNSA1IDAgMCAxIDYgMCA1IDUgMCAwIDAgNiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Nlcy5qcwp2YXIgR2xhc3NlczsKdmFyIGluaXRfZ2xhc3NlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Nlcy5qcyIoKSB7CiAgICBHbGFzc2VzID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxNSIsIHI6ICI0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE1IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVhMiAyIDAgMCAwLTItMiAyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNSAxMyA1IDdjLjctMS4zIDEuNC0yIDMtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS41IDEzIDE5IDdjLS43LTEuMy0xLjUtMi0zLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS1sb2NrLmpzCnZhciBHbG9iZUxvY2s7CnZhciBpbml0X2dsb2JlX2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsb2JlLWxvY2suanMiKCkgewogICAgR2xvYmVMb2NrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNjg2IDE1QTE0LjUgMTQuNSAwIDAgMSAxMiAyMmExNC41IDE0LjUgMCAwIDEgMC0yMCAxMCAxMCAwIDEgMCA5LjU0MiAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDguNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA2VjRhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjYiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS5qcwp2YXIgR2xvYmU7CnZhciBpbml0X2dsb2JlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbG9iZS5qcyIoKSB7CiAgICBHbG9iZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJhMTQuNSAxNC41IDAgMCAwIDAgMjAgMTQuNSAxNC41IDAgMCAwIDAtMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dvYWwuanMKdmFyIEdvYWw7CnZhciBpbml0X2dvYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dvYWwuanMiKCkgewogICAgR29hbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjJsOCA0LTggNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NjEgMTAuMjIyYTkgOSAwIDEgMS0xMi41NS01LjI5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMDAyIDkuOTk3YTUgNSAwIDEgMCA4LjkgMi4wMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qcwp2YXIgR3B1Owp2YXIgaW5pdF9ncHUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qcyIoKSB7CiAgICBHcHUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxVjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDE4YTIgMiAwIDAgMSAyIDJ2OGEyIDIgMCAwIDEtMiAySDIuMjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN3YzYTEgMSAwIDAgMCAxIDFoNWExIDEgMCAwIDAgMS0xdi0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjExIiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxMSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JhZHVhdGlvbi1jYXAuanMKdmFyIEdyYWR1YXRpb25DYXA7CnZhciBpbml0X2dyYWR1YXRpb25fY2FwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFkdWF0aW9uLWNhcC5qcyIoKSB7CiAgICBHcmFkdWF0aW9uQ2FwID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuNDIgMTAuOTIyYTEgMSAwIDAgMC0uMDE5LTEuODM4TDEyLjgzIDUuMThhMiAyIDAgMCAwLTEuNjYgMEwyLjYgOS4wOGExIDEgMCAwIDAgMCAxLjgzMmw4LjU3IDMuOTA4YTIgMiAwIDAgMCAxLjY2IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMi41VjE2YTYgMyAwIDAgMCAxMiAwdi0zLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFwZS5qcwp2YXIgR3JhcGU7CnZhciBpbml0X2dyYXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmFwZS5qcyIoKSB7CiAgICBHcmFwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDVWMmwtNS44OSA1Ljg5IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYuNiIsIGN5OiAiMTUuODkiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguMTEiLCBjeTogIjcuNCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIuMzUiLCBjeTogIjExLjY1IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy45MSIsIGN5OiAiNS44NSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTguMTUiLCBjeTogIjEwLjA5IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjU2IiwgY3k6ICIxMy4yIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMC44IiwgY3k6ICIxNy40NCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLWNoZWNrLmpzCnZhciBHcmlkMngyQ2hlY2s7CnZhciBpbml0X2dyaWRfMngyX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1jaGVjay5qcyIoKSB7CiAgICBHcmlkMngyQ2hlY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAzdjE3YTEgMSAwIDAgMS0xIDFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTEgMUgzIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1wbHVzLmpzCnZhciBHcmlkMngyUGx1czsKdmFyIGluaXRfZ3JpZF8yeDJfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDItcGx1cy5qcyIoKSB7CiAgICBHcmlkMngyUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDN2MTdhMSAxIDAgMCAxLTEgMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2NmExIDEgMCAwIDEtMSAxSDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMnYtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLXguanMKdmFyIEdyaWQyeDJYOwp2YXIgaW5pdF9ncmlkXzJ4Ml94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi14LmpzIigpIHsKICAgIEdyaWQyeDJYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgM3YxN2ExIDEgMCAwIDEtMSAxSDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnY2YTEgMSAwIDAgMS0xIDFIMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDIuanMKdmFyIEdyaWQyeDI7CnZhciBpbml0X2dyaWRfMngyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi5qcyIoKSB7CiAgICBHcmlkMngyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0zeDIuanMKdmFyIEdyaWQzeDI7CnZhciBpbml0X2dyaWRfM3gyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTN4Mi5qcyIoKSB7CiAgICBHcmlkM3gyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtM3gzLmpzCnZhciBHcmlkM3gzOwp2YXIgaW5pdF9ncmlkXzN4MyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0zeDMuanMiKCkgewogICAgR3JpZDN4MyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC1ob3Jpem9udGFsLmpzCnZhciBHcmlwSG9yaXpvbnRhbDsKdmFyIGluaXRfZ3JpcF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlwLWhvcml6b250YWwuanMiKCkgewogICAgR3JpcEhvcml6b250YWwgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI5IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiOSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE1IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE1IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlwLXZlcnRpY2FsLmpzCnZhciBHcmlwVmVydGljYWw7CnZhciBpbml0X2dyaXBfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAtdmVydGljYWwuanMiKCkgewogICAgR3JpcFZlcnRpY2FsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE1IiwgY3k6ICIxOSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC5qcwp2YXIgR3JpcDsKdmFyIGluaXRfZ3JpcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC5qcyIoKSB7CiAgICBHcmlwID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiNSIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjUiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE5IiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qcwp2YXIgR3JvdXA7CnZhciBpbml0X2dyb3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qcyIoKSB7CiAgICBHcm91cCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YzAtMS4xLjktMiAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJjMS4xIDAgMiAuOSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYzAgMS4xLS45IDItMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWMtMS4xIDAtMi0uOS0yLTJ2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjUiLCB4OiAiNyIsIHk6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjEwIiwgeTogIjEyIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtLmpzCnZhciBIYW07CnZhciBpbml0X2hhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtLmpzIigpIHsKICAgIEhhbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjE0NCAyMS4xNDRBNy4yNzQgMTAuNDQ1IDQ1IDEgMCAyLjg1NiAxMC44NTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMy4xNDQgMjEuMTQ0QTcuMjc0IDQuMzY1IDQ1IDAgMCAyLjg1NiAxMC44NTZhNy4yNzQgNC4zNjUgNDUgMCAwIDEwLjI4OCAxMC4yODgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjU2NSAxMC40MzUgMTguNiA4LjRhMi41MDEgMi41MDEgMCAxIDAgMS42NS00LjY1IDIuNSAyLjUgMCAxIDAtNC42NiAxLjY2bC0yLjAyNCAyLjAyNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgMTYuNS0xLTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ndWl0YXIuanMKdmFyIEd1aXRhcjsKdmFyIGluaXRfZ3VpdGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ndWl0YXIuanMiKCkgewogICAgR3VpdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTEuOSAxMi4xIDQuNTE0LTQuNTE0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwLjEgMi4zYTEgMSAwIDAgMC0xLjQgMGwtMS4xMTQgMS4xMTRBMiAyIDAgMCAwIDE3IDQuODI4djEuMzQ0YTIgMiAwIDAgMS0uNTg2IDEuNDE0QTIgMiAwIDAgMSAxNy44MjggN2gxLjM0NGEyIDIgMCAwIDAgMS40MTQtLjU4NkwyMS43IDUuM2ExIDEgMCAwIDAgMC0xLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgMiAyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMjMgOS44NUEzIDMgMCAwIDEgMTEgOGE1IDUgMCAwIDEgNSA1IDMgMyAwIDAgMS0xLjg1IDIuNzdsLS45Mi4zOEEyIDIgMCAwIDAgMTIgMThhNCA0IDAgMCAxLTQgNCA2IDYgMCAwIDEtNi02IDQgNCAwIDAgMSA0LTQgMiAyIDAgMCAwIDEuODUtMS4yM3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1idXJnZXIuanMKdmFyIEhhbWJ1cmdlcjsKdmFyIGluaXRfaGFtYnVyZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW1idXJnZXIuanMiKCkgewogICAgSGFtYnVyZ2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZINGEyIDIgMCAxIDEgMC00aDE2YTIgMiAwIDEgMSAwIDRoLTQuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMmEyIDIgMCAwIDEtMi0yIDkgNyAwIDAgMSAxOCAwIDIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxNmEyIDIgMCAwIDAtMiAyIDMgMyAwIDAgMCAzIDNoMTJhMyAzIDAgMCAwIDMtMyAyIDIgMCAwIDAtMi0ycTAgMCAwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNi42NyAxMiA2LjEzIDQuNmEyIDIgMCAwIDAgMi44LS40bDMuMTUtNC4yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtbWVyLmpzCnZhciBIYW1tZXI7CnZhciBpbml0X2hhbW1lciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFtbWVyLmpzIigpIHsKICAgIEhhbW1lciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyLTkuMzczIDkuMzczYTEgMSAwIDAgMS0zLjAwMS0zTDEyIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMTUgNC00IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjUgMTEuNS0xLjkxNC0xLjkxNEEyIDIgMCAwIDEgMTkgOC4xNzJ2LS4zNDRhMiAyIDAgMCAwLS41ODYtMS40MTRsLTEuNjU3LTEuNjU3QTYgNiAwIDAgMCAxMi41MTYgM0g5bDEuMjQzIDEuMjQzQTYgNiAwIDAgMSAxMiA4LjQ4NVYxMGwyIDJoMS4xNzJhMiAyIDAgMCAxIDEuNDE0LjU4NkwxOC41IDE0LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWNvaW5zLmpzCnZhciBIYW5kQ29pbnM7CnZhciBpbml0X2hhbmRfY29pbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtY29pbnMuanMiKCkgewogICAgSGFuZENvaW5zID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoMmEyIDIgMCAxIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAyMSAxLjYtMS40Yy4zLS40LjgtLjYgMS40LS42aDRjMS4xIDAgMi4xLS40IDIuOC0xLjJsNC42LTQuNGEyIDIgMCAwIDAtMi43NS0yLjkxbC00LjIgMy45IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMTYgNiA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjkiLCByOiAiMi45IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1maXN0LmpzCnZhciBIYW5kRmlzdDsKdmFyIGluaXRfaGFuZF9maXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWZpc3QuanMiKCkgewogICAgSGFuZEZpc3QgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi4wMzUgMTcuMDEyYTMgMyAwIDAgMC0zLTNsLS4zMTEtLjAwMmEuNzIuNzIgMCAwIDEtLjUwNS0xLjIyOWwxLjE5NS0xLjE5NUEyIDIgMCAwIDEgMTAuODI4IDExSDEyYTIgMiAwIDAgMCAwLTRIOS4yNDNhMyAzIDAgMCAwLTIuMTIyLjg3OWwtMi43MDcgMi43MDdBNC44MyA0LjgzIDAgMCAwIDMgMTRhOCA4IDAgMCAwIDggOGgyYTggOCAwIDAgMCA4LThWN2EyIDIgMCAxIDAtNCAwdjJhMiAyIDAgMSAwIDQgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy44ODggOS42NjJBMiAyIDAgMCAwIDE3IDhWNUEyIDIgMCAxIDAgMTMgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDVBMiAyIDAgMSAwIDUgNVYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDdWNEEyIDIgMCAxIDEgMTMgNFY3LjI2OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtZ3JhYi5qcwp2YXIgSGFuZEdyYWI7CnZhciBpbml0X2hhbmRfZ3JhYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1ncmFiLmpzIigpIHsKICAgIEhhbmRHcmFiID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTEuNVY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxLjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBWOGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjlWOWEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtNGE4IDggMCAwIDEtOC04IDIgMiAwIDEgMSA0IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlYXJ0LmpzCnZhciBIYW5kSGVhcnQ7CnZhciBpbml0X2hhbmRfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtaGVhcnQuanMiKCkgewogICAgSGFuZEhlYXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTRoMmEyIDIgMCAwIDAgMC00aC0zYy0uNiAwLTEuMS4yLTEuNC42TDMgMTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTQuNDUgMTMuMzkgNS4wNS00LjY5NEMyMC4xOTYgOCAyMSA2Ljg1IDIxIDUuNzVhMi43NSAyLjc1IDAgMCAwLTQuNzk3LTEuODM3LjI3Ni4yNzYgMCAwIDEtLjQwNiAwQTIuNzUgMi43NSAwIDAgMCAxMSA1Ljc1YzAgMS4yLjgwMiAyLjI0OCAxLjUgMi45NDZMMTYgMTEuOTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxNSA2IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm03IDIwIDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTEgMSAwIDAgMC0yLjc1LTIuOTEiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1oZWxwaW5nLmpzCnZhciBIYW5kSGVscGluZzsKdmFyIGluaXRfaGFuZF9oZWxwaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlbHBpbmcuanMiKCkgewogICAgSGFuZEhlbHBpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMmgyYTIgMiAwIDEgMCAwLTRoLTNjLS42IDAtMS4xLjItMS40LjZMMyAxNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm03IDE4IDEuNi0xLjRjLjMtLjQuOC0uNiAxLjQtLjZoNGMxLjEgMCAyLjEtLjQgMi44LTEuMmw0LjYtNC40YTIgMiAwIDAgMC0yLjc1LTIuOTFsLTQuMiAzLjkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAxMyA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLW1ldGFsLmpzCnZhciBIYW5kTWV0YWw7CnZhciBpbml0X2hhbmRfbWV0YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtbWV0YWwuanMiKCkgewogICAgSGFuZE1ldGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTIuNVYxMGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExVjlhMiAyIDAgMSAwLTQgMHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwLjVWNWEyIDIgMCAxIDAtNCAwdjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtNyAxNS0xLjc2LTEuNzZhMiAyIDAgMCAwLTIuODMgMi44MmwzLjYgMy42QzcuNSAyMS4xNCA5LjIgMjIgMTIgMjJoMmE4IDggMCAwIDAgOC04VjdhMiAyIDAgMSAwLTQgMHY1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1wbGF0dGVyLmpzCnZhciBIYW5kUGxhdHRlcjsKdmFyIGluaXRfaGFuZF9wbGF0dGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLXBsYXR0ZXIuanMiKCkgewogICAgSGFuZFBsYXR0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzVjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTUuNCAxNy40IDMuMi0yLjhhMiAyIDAgMSAxIDIuOCAyLjlsLTMuNiAzLjNjLS43LjgtMS43IDEuMi0yLjggMS4yaC00Yy0xLjEgMC0yLjEtLjQtMi44LTEuMmwtMS4zMDItMS40NjRBMSAxIDAgMCAwIDYuMTUxIDE5SDUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgxMmEyIDIgMCAwIDEgMCA0aC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMGE3IDcgMCAwIDEgMTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE0djZhMSAxIDAgMCAxLTEgMUgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC5qcwp2YXIgSGFuZDsKdmFyIGluaXRfaGFuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC5qcyIoKSB7CiAgICBIYW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTFWNmEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTBWNGEyIDIgMCAwIDAtMi0yYTIgMiAwIDAgMC0yIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMC41VjZhMiAyIDAgMCAwLTItMmEyIDIgMCAwIDAtMiAydjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGEyIDIgMCAxIDEgNCAwdjZhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZGJhZy5qcwp2YXIgSGFuZGJhZzsKdmFyIGluaXRfaGFuZGJhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZGJhZy5qcyIoKSB7CiAgICBIYW5kYmFnID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wNDggMTguNTY2QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjk1Mi0yLjQzNGwtMi05QTIgMiAwIDAgMCAxOCA4SDZhMiAyIDAgMCAwLTEuOTUyIDEuNTY2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDExVjZhNCA0IDAgMCAxIDggMHY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzCnZhciBIYW5kc2hha2U7CnZhciBpbml0X2hhbmRzaGFrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzIigpIHsKICAgIEhhbmRzaGFrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE3IDIgMmExIDEgMCAxIDAgMy0zIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0IDE0IDIuNSAyLjVhMSAxIDAgMSAwIDMtM2wtMy44OC0zLjg4YTMgMyAwIDAgMC00LjI0IDBsLS44OC44OGExIDEgMCAxIDEtMy0zbDIuODEtMi44MWE1Ljc5IDUuNzkgMCAwIDEgNy4wNi0uODdsLjQ3LjI4YTIgMiAwIDAgMCAxLjQyLjI1TDIxIDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMyAxIDExaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMyAyIDE0bDYuNSA2LjVhMSAxIDAgMSAwIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDRoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUtZG93bmxvYWQuanMKdmFyIEhhcmREcml2ZURvd25sb2FkOwp2YXIgaW5pdF9oYXJkX2RyaXZlX2Rvd25sb2FkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWRyaXZlLWRvd25sb2FkLmpzIigpIHsKICAgIEhhcmREcml2ZURvd25sb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDYtNCA0LTQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWRyaXZlLXVwbG9hZC5qcwp2YXIgSGFyZERyaXZlVXBsb2FkOwp2YXIgaW5pdF9oYXJkX2RyaXZlX3VwbG9hZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS11cGxvYWQuanMiKCkgewogICAgSGFyZERyaXZlVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgNi00LTQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXJkLWhhdC5qcwp2YXIgSGFyZEhhdDsKdmFyIGluaXRfaGFyZF9oYXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtaGF0LmpzIigpIHsKICAgIEhhcmRIYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMFY1YTEgMSAwIDAgMSAxLTFoMmExIDEgMCAwIDEgMSAxdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmE2IDYgMCAwIDEgNiA2djMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxNXYtM2E2IDYgMCAwIDEgNi02IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNSIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFzaC5qcwp2YXIgSGFzaDsKdmFyIGluaXRfaGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFzaC5qcyIoKSB7CiAgICBIYXNoID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiOCIsIHkxOiAiMyIsIHkyOiAiMjEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjE0IiwgeTE6ICIzIiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUuanMKdmFyIEhhcmREcml2ZTsKdmFyIGluaXRfaGFyZF9kcml2ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS5qcyIoKSB7CiAgICBIYXJkRHJpdmUgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMiIsIHgyOiAiMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI2IiwgeDI6ICI2LjAxIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjEwLjAxIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXQtZ2xhc3Nlcy5qcwp2YXIgSGF0R2xhc3NlczsKdmFyIGluaXRfaGF0X2dsYXNzZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhdC1nbGFzc2VzLmpzIigpIHsKICAgIEhhdEdsYXNzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGEyIDIgMCAwIDAtNCAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE5IDExLTIuMTEtNi42NTdhMiAyIDAgMCAwLTIuNzUyLTEuMTQ4bC0xLjI3Ni42MUEyIDIgMCAwIDEgMTIgNEg4LjVhMiAyIDAgMCAwLTEuOTI1IDEuNDU2TDUgMTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgyMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhemUuanMKdmFyIEhhemU7CnZhciBpbml0X2hhemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhemUuanMiKCkgewogICAgSGF6ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTUuMiA2LjIgMS40IDEuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTNoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy40IDcuNiAxLjQtMS40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjFIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2E0IDQgMCAwIDAtOCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDVWMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGQuanMKdmFyIEhkOwp2YXIgaW5pdF9oZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGQuanMiKCkgewogICAgSGQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMTQuNWEuNS41IDAgMCAwIC41LjVoMWEyLjUgMi41IDAgMCAwIDIuNS0yLjV2LTFBMi41IDIuNSAwIDAgMCAxNS41IDloLTFhLjUuNSAwIDAgMC0uNS41eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1VjkiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZG1pLXBvcnQuanMKdmFyIEhkbWlQb3J0Owp2YXIgaW5pdF9oZG1pX3BvcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hkbWktcG9ydC5qcyIoKSB7CiAgICBIZG1pUG9ydCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMjIgOWExIDEgMCAwIDAtMS0xSDNhMSAxIDAgMCAwLTEgMXY0YTEgMSAwIDAgMCAxIDFoMWwyIDJoMTJsMi0yaDFhMSAxIDAgMCAwIDEtMVoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMmg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0xLmpzCnZhciBIZWFkaW5nMTsKdmFyIGluaXRfaGVhZGluZ18xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTEuanMiKCkgewogICAgSGVhZGluZzEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTIgMy0ydjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTMuanMKdmFyIEhlYWRpbmczOwp2YXIgaW5pdF9oZWFkaW5nXzMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctMy5qcyIoKSB7CiAgICBIZWFkaW5nMyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwLjVjMS43LTEgMy41IDAgMy41IDEuNWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE3LjVjMiAxLjUgNCAuMyA0LTEuNWEyIDIgMCAwIDAtMi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0yLmpzCnZhciBIZWFkaW5nMjsKdmFyIGluaXRfaGVhZGluZ18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTIuanMiKCkgewogICAgSGVhZGluZzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTRjMC00IDQtMyA0LTYgMC0xLjUtMi0yLjUtNC0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy00LmpzCnZhciBIZWFkaW5nNDsKdmFyIGluaXRfaGVhZGluZ180ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTQuanMiKCkgewogICAgSGVhZGluZzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwdjNhMSAxIDAgMCAwIDEgMWgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmctNS5qcwp2YXIgSGVhZGluZzU7CnZhciBpbml0X2hlYWRpbmdfNSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy01LmpzIigpIHsKICAgIEhlYWRpbmc1ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEzdi0zaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTcuN2MuNC4yLjguMyAxLjMuMyAxLjUgMCAyLjctMS4xIDIuNy0yLjVTMTkuOCAxMyAxOC4zIDEzSDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy02LmpzCnZhciBIZWFkaW5nNjsKdmFyIGluaXRfaGVhZGluZ182ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLTYuanMiKCkgewogICAgSGVhZGluZzYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxOFY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGMtMiAyLTMgMy41LTMgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRpbmcuanMKdmFyIEhlYWRpbmc7CnZhciBpbml0X2hlYWRpbmczID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkaW5nLmpzIigpIHsKICAgIEhlYWRpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMjBWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMFY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHBob25lLW9mZi5qcwp2YXIgSGVhZHBob25lT2ZmOwp2YXIgaW5pdF9oZWFkcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkcGhvbmUtb2ZmLmpzIigpIHsKICAgIEhlYWRwaG9uZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0aC0xLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEyOCAzLjQ3QTkgOSAwIDAgMSAyMSAxMnYzLjM0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNDE0IDIwLjQxNEEyIDIgMCAwIDEgMTkgMjFoLTFhMiAyIDAgMCAxLTItMnYtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0ydi03YTkgOSAwIDAgMSAyLjYzNi02LjM2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZXMuanMKdmFyIEhlYWRwaG9uZXM7CnZhciBpbml0X2hlYWRwaG9uZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZXMuanMiKCkgewogICAgSGVhZHBob25lcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMgMTRoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTdhOSA5IDAgMCAxIDE4IDB2N2EyIDIgMCAwIDEtMiAyaC0xYTIgMiAwIDAgMS0yLTJ2LTNhMiAyIDAgMCAxIDItMmgzIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qcwp2YXIgSGVhZHNldDsKdmFyIGluaXRfaGVhZHNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qcyIoKSB7CiAgICBIZWFkc2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNVptMCAwYTkgOSAwIDEgMSAxOCAwbTAgMHY1YTIgMiAwIDAgMS0yIDJoLTFhMiAyIDAgMCAxLTItMnYtM2EyIDIgMCAwIDEgMi0yaDNaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2djJhNCA0IDAgMCAxLTQgNGgtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWNyYWNrLmpzCnZhciBIZWFydENyYWNrOwp2YXIgaW5pdF9oZWFydF9jcmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtY3JhY2suanMiKCkgewogICAgSGVhcnRDcmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjQwOSA1LjgyNGMtLjcwMi43OTItMS4xNSAxLjQ5Ni0xLjQxNSAyLjE2NmwyLjE1MyAyLjE1NmEuNS41IDAgMCAxIDAgLjcwN2wtMi4yOTMgMi4yOTNhLjUuNSAwIDAgMCAwIC43MDdMMTIgMTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuNTA4IDIwLjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ny42LjYgMCAwIDAgLjgxOC4wMDFBNS41IDUuNSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWhhbmRzaGFrZS5qcwp2YXIgSGVhcnRIYW5kc2hha2U7CnZhciBpbml0X2hlYXJ0X2hhbmRzaGFrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtaGFuZHNoYWtlLmpzIigpIHsKICAgIEhlYXJ0SGFuZHNoYWtlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDE0IDE0LjQxNEMyMSAxMi44MjggMjIgMTEuNSAyMiA5LjVhNS41IDUuNSAwIDAgMC05LjU5MS0zLjY3Ni42LjYgMCAwIDEtLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyIDkuNWMwIDIuMyAxLjUgNCAzIDUuNWw1LjUzNSA1LjM2MmEyIDIgMCAwIDAgMi44NzkuMDUyIDIuMTIgMi4xMiAwIDAgMC0uMDA0LTMgMi4xMjQgMi4xMjQgMCAxIDAgMy0zIDIuMTI0IDIuMTI0IDAgMCAwIDMuMDA0IDAgMiAyIDAgMCAwIDAtMi44MjhsLTEuODgxLTEuODgyYTIuNDEgMi40MSAwIDAgMC0zLjQwOSAwbC0xLjcxIDEuNzFhMiAyIDAgMCAxLTIuODI4IDAgMiAyIDAgMCAxIDAtMi44MjhsMi44MjMtMi43NjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1taW51cy5qcwp2YXIgSGVhcnRNaW51czsKdmFyIGluaXRfaGVhcnRfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LW1pbnVzLmpzIigpIHsKICAgIEhlYXJ0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC44NzYgMTguOTktMS4zNjggMS4zMjNhMiAyIDAgMCAxLTMgLjAxOUw1IDE1Yy0xLjUtMS41LTMtMy4yLTMtNS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVhNS4yIDUuMiAwIDAgMS0uMjQ0IDEuNTcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1vZmYuanMKdmFyIEhlYXJ0T2ZmOwp2YXIgaW5pdF9oZWFydF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LW9mZi5qcyIoKSB7CiAgICBIZWFydE9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjUgNC44OTNhNS41IDUuNSAwIDAgMSAxLjA5MS45MzEuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAxLjg3Mi0xLjAwMiAzLjM1Ni0yLjE4NyA0LjY1NSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNi45NjcgMTYuOTY3LTMuNDU5IDMuMzQ2YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDIuNzQ3LTQuNzYxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LXBsdXMuanMKdmFyIEhlYXJ0UGx1czsKdmFyIGluaXRfaGVhcnRfcGx1cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcGx1cy5qcyIoKSB7CiAgICBIZWFydFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xNC40NzkgMTkuMzc0LS45NzEuOTM5YTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNWE1LjUgNS41IDAgMCAxIDkuNTkxLTMuNjc2LjU2LjU2IDAgMCAwIC44MTggMEE1LjQ5IDUuNDkgMCAwIDEgMjIgOS41YTUuMiA1LjIgMCAwIDEtLjIxOSAxLjQ5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LXB1bHNlLmpzCnZhciBIZWFydFB1bHNlOwp2YXIgaW5pdF9oZWFydF9wdWxzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcHVsc2UuanMiKCkgewogICAgSGVhcnRQdWxzZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOS41YTUuNSA1LjUgMCAwIDEgOS41OTEtMy42NzYuNTYuNTYgMCAwIDAgLjgxOCAwQTUuNDkgNS40OSAwIDAgMSAyMiA5LjVjMCAyLjI5LTEuNSA0LTMgNS41bC01LjQ5MiA1LjMxM2EyIDIgMCAwIDEtMyAuMDE5TDUgMTVjLTEuNS0xLjUtMy0zLjItMy01LjUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4yMiAxM0g5LjVsLjUtMSAyIDQuNSAyLTcgMS41IDMuNWg1LjI3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhdGVyLmpzCnZhciBIZWF0ZXI7CnZhciBpbml0X2hlYXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhdGVyLmpzIigpIHsKICAgIEhlYXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDhjMi0zLTItMyAwLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUuNSA4YzItMy0yLTMgMC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDZhMiAyIDAgMCAxIDIgMnYxMGEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMjB2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LmpzCnZhciBIZWFydDsKdmFyIGluaXRfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LmpzIigpIHsKICAgIEhlYXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5LjVhNS41IDUuNSAwIDAgMSA5LjU5MS0zLjY3Ni41Ni41NiAwIDAgMCAuODE4IDBBNS40OSA1LjQ5IDAgMCAxIDIyIDkuNWMwIDIuMjktMS41IDQtMyA1LjVsLTUuNDkyIDUuMzEzYTIgMiAwIDAgMS0zIC4wMTlMNSAxNWMtMS41LTEuNS0zLTMuMi0zLTUuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanMKdmFyIEhlbGljb3B0ZXI7CnZhciBpbml0X2hlbGljb3B0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanMiKCkgewogICAgSGVsaWNvcHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3Y4YTIgMiAwIDAgMCAyIDJoNS44NjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2E0IDQgMCAwIDAgNC00IDggNiAwIDAgMC04LTYgNiA1IDAgMCAwLTYgNXYzYTIgMiAwIDAgMCAyIDJ6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTB2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDNoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzSDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzCnZhciBIZXhhZ29uOwp2YXIgaW5pdF9oZXhhZ29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzIigpIHsKICAgIEhleGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxNlY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsNy00QTIgMiAwIDAgMCAyMSAxNnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaWdobGlnaHRlci5qcwp2YXIgSGlnaGxpZ2h0ZXI7CnZhciBpbml0X2hpZ2hsaWdodGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaWdobGlnaHRlci5qcyIoKSB7CiAgICBIaWdobGlnaHRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEtNiA2djNoOWwzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTItNC42IDQuNmEyIDIgMCAwIDEtMi44IDBsLTUuMi01LjJhMiAyIDAgMCAxIDAtMi44TDE0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzCnZhciBIaXN0b3J5Owp2YXIgaW5pdF9oaXN0b3J5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzIigpIHsKICAgIEhpc3RvcnkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NSA5Ljc1IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djVsNCAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzCnZhciBIb3A7CnZhciBpbml0X2hvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzIigpIHsKICAgIEhvcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTAuODIgMTYuMTJjMS42OS42IDMuOTEuNzkgNS4xOC44NS41NS4wMyAxLS40Mi45Ny0uOTctLjA2LTEuMjctLjI2LTMuNS0uODUtNS4xOCIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNSA2LjVjMS42NCAwIDUtLjM4IDYuNzEtMS4wNy41Mi0uMi41NS0uODIuMTItMS4xN0ExMCAxMCAwIDAgMCA0LjI2IDE4LjMzYy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg4Ljg4IDAgMCAwIC43My0uNzRjLjMtMi4xNC0uMTUtMy41LS42MS00Ljg4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTUuNjIgMTYuOTVjLjIuODUuNjIgMi43Ni41IDQuMjhhLjc3Ljc3IDAgMCAxLS45LjcgMTYuNjQgMTYuNjQgMCAwIDEtNC4wOC0xLjM2IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2LjEzIDIxLjA1YzEuNjUuNjMgMy42OC44NCA0Ljg3LjkxYS45LjkgMCAwIDAgLjk2LS45NiAxNy42OCAxNy42OCAwIDAgMC0uOS00Ljg3IiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE2Ljk0IDE1LjYyYy44Ni4yIDIuNzcuNjIgNC4yOS41YS43Ny43NyAwIDAgMCAuNy0uOSAxNi42NCAxNi42NCAwIDAgMC0xLjM2LTQuMDgiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTcuOTkgNS41MmEyMC44MiAyMC44MiAwIDAgMSAzLjE1IDQuNS44LjggMCAwIDEtLjY4IDEuMTNjLTIuMzMuMi01LjMtLjMyLTguMjctMS41NyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45MyA0LjkzIDMgM2EuNy43IDAgMCAxIDAtMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjU4IDEyLjE4YzEuMjQgMi45OCAxLjc3IDUuOTUgMS41NyA4LjI4YS44LjggMCAwIDEtMS4xMy42OCAyMC44MiAyMC44MiAwIDAgMS00LjUtMy4xNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvcC1vZmYuanMKdmFyIEhvcE9mZjsKdmFyIGluaXRfaG9wX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLW9mZi5qcyIoKSB7CiAgICBIb3BPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC44MiAxNi4xMmMxLjY5LjYgMy45MS43OSA1LjE4Ljg1LjI4LjAxLjUzLS4wOS43LS4yNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjE0IDIwLjU3Yy41Mi4yNCAyLjQ0IDEuMTIgNC4wOCAxLjM3LjQ2LjA2Ljg2LS4yNS45LS43MS4xMi0xLjUyLS4zLTMuNDMtLjUtNC4yOCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMTMgMjEuMDVjMS42NS42MyAzLjY4Ljg0IDQuODcuOTFhLjkuOSAwIDAgMCAuNy0uMjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xNy45OSA1LjUyYTIwLjgzIDIwLjgzIDAgMCAxIDMuMTUgNC41LjguOCAwIDAgMS0uNjggMS4xM2MtMS4xNy4xLTIuNS4wMi0zLjktLjI1IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC41NyAxMS4xNGMuMjQuNTIgMS4xMiAyLjQ0IDEuMzcgNC4wOC4wNC4zLS4wOC41OS0uMzEuNzUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC45MyA0LjkzYTEwIDEwIDAgMCAwLS42NyAxMy40Yy4zNS40My45Ni40IDEuMTctLjEyLjY5LTEuNzEgMS4wNy01LjA3IDEuMDctNi43MSAxLjM0LjQ1IDMuMS45IDQuODguNjJhLjg1Ljg1IDAgMCAwIC40OC0uMjQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk01LjUyIDE3Ljk5YzEuMDUuOTUgMi45MSAyLjQyIDQuNSAzLjE1YS44LjggMCAwIDAgMS4xMy0uNjhjLjItMi4zNC0uMzMtNS4zLTEuNTctOC4yOCIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4zNSAyLjY4YTEwIDEwIDAgMCAxIDkuOTggMS41OGMuNDMuMzUuNC45Ni0uMTIgMS4xNy0xLjUuNi00LjMuOTgtNi4wNyAxLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzCnZhciBIb3NwaXRhbDsKdmFyIGluaXRfaG9zcGl0YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzIigpIHsKICAgIEhvc3BpdGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxdi0zYTIgMiAwIDAgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExaDJhMiAyIDAgMCAxIDIgMnY2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVY1YTIgMiAwIDAgMC0yLTJIOGEyIDIgMCAwIDAtMiAydjE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanMKdmFyIEhvdGVsOwp2YXIgaW5pdF9ob3RlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanMiKCkgewogICAgSG90ZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMnYtNi41NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTUuNDNWMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTZhNSA1IDAgMCAwLTYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjQiLCB5OiAiMiIsIHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXJnbGFzcy5qcwp2YXIgSG91cmdsYXNzOwp2YXIgaW5pdF9ob3VyZ2xhc3MgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXJnbGFzcy5qcyIoKSB7CiAgICBIb3VyZ2xhc3MgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMmgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMnYtNC4xNzJhMiAyIDAgMCAwLS41ODYtMS40MTRMMTIgMTJsLTQuNDE0IDQuNDE0QTIgMiAwIDAgMCA3IDE3LjgyOFYyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2NC4xNzJhMiAyIDAgMCAwIC41ODYgMS40MTRMMTIgMTJsNC40MTQtNC40MTRBMiAyIDAgMCAwIDE3IDYuMTcyVjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1oZWFydC5qcwp2YXIgSG91c2VIZWFydDsKdmFyIGluaXRfaG91c2VfaGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLWhlYXJ0LmpzIigpIHsKICAgIEhvdXNlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjYyIDEzLjhBMi4yNSAyLjI1IDAgMSAxIDEyIDEwLjgzNmEyLjI1IDIuMjUgMCAxIDEgMy4zOCAyLjk2NmwtMi42MjYgMi44NTZhLjk5OC45OTggMCAwIDEtMS41MDcgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMGEyIDIgMCAwIDEgLjcwOS0xLjUyOGw3LTZhMiAyIDAgMCAxIDIuNTgyIDBsNyA2QTIgMiAwIDAgMSAyMSAxMHY5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdWcuanMKdmFyIEhvdXNlUGx1ZzsKdmFyIGluaXRfaG91c2VfcGx1ZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UtcGx1Zy5qcyIoKSB7CiAgICBIb3VzZVBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMlY4Ljk2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMlY4Ljk2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmExIDEgMCAwIDEgMSAxdjJhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMi0ydi0yYTEgMSAwIDAgMSAxLTF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguNSAyMUg1YTIgMiAwIDAgMS0yLTJ2LTlhMiAyIDAgMCAxIC43MDktMS41MjhsNy02YTIgMiAwIDAgMSAyLjU4MiAwbDcgNkEyIDIgMCAwIDEgMjEgMTB2OWEyIDIgMCAwIDEtMiAyaC01YTIgMiAwIDAgMS0yLTJ2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1wbHVzLmpzCnZhciBIb3VzZVBsdXM7CnZhciBpbml0X2hvdXNlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdXMuanMiKCkgewogICAgSG91c2VQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMzUgMjFINWEyIDIgMCAwIDEtMi0ydi05YTIgMiAwIDAgMSAuNzEtMS41M2w3LTZhMiAyIDAgMCAxIDIuNTggMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuOCAxMi40QTEgMSAwIDAgMCAxNCAxMmgtNGExIDEgMCAwIDAtMSAxdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2Utd2lmaS5qcwp2YXIgSG91c2VXaWZpOwp2YXIgaW5pdF9ob3VzZV93aWZpID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS13aWZpLmpzIigpIHsKICAgIEhvdXNlV2lmaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxMy44NjZhNCA0IDAgMCAxIDUgLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTAuNzU0YTggOCAwIDAgMSAxMCAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UuanMKdmFyIEhvdXNlOwp2YXIgaW5pdF9ob3VzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2UuanMiKCkgewogICAgSG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAyMXYtOGExIDEgMCAwIDAtMS0xaC00YTEgMSAwIDAgMC0xIDF2OCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0zIDEwYTIgMiAwIDAgMSAuNzA5LTEuNTI4bDctNmEyIDIgMCAwIDEgMi41ODIgMGw3IDZBMiAyIDAgMCAxIDIxIDEwdjlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWJvd2wuanMKdmFyIEljZUNyZWFtQm93bDsKdmFyIGluaXRfaWNlX2NyZWFtX2Jvd2wgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ljZS1jcmVhbS1ib3dsLmpzIigpIHsKICAgIEljZUNyZWFtQm93bCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTIgMTdjNSAwIDgtMi42OSA4LTZINGMwIDMuMzEgMyA2IDggNm0tNCA0aDhtLTQtM3YzTTUuMTQgMTFhMy41IDMuNSAwIDEgMSA2LjcxIDAiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjE0IDExYTMuNSAzLjUgMCAxIDEgNi43MSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjUgNi41YTMuNSAzLjUgMCAxIDAtNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWNvbmUuanMKdmFyIEljZUNyZWFtQ29uZTsKdmFyIGluaXRfaWNlX2NyZWFtX2NvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ljZS1jcmVhbS1jb25lLmpzIigpIHsKICAgIEljZUNyZWFtQ29uZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTEgNC4wOCAxMC4zNWExIDEgMCAwIDAgMS44NCAwTDE3IDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDdBNSA1IDAgMCAwIDcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA3YTIgMiAwIDAgMSAwIDRIN2EyIDIgMCAwIDEgMC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaWQtY2FyZC1sYW55YXJkLmpzCnZhciBJZENhcmRMYW55YXJkOwp2YXIgaW5pdF9pZF9jYXJkX2xhbnlhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQtbGFueWFyZC5qcyIoKSB7CiAgICBJZENhcmRMYW55YXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA4aC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMSAyaDNhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44OTkgMjJBNSA1IDAgMCAwIDcuMSAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDIgMyA2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE1IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pZC1jYXJkLmpzCnZhciBJZENhcmQ7CnZhciBpbml0X2lkX2NhcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQuanMiKCkgewogICAgSWRDYXJkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMTcgMTVhMyAzIDAgMCAxIDUuNjYgMCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjExIiwgcjogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjUiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1kb3duLmpzCnZhciBJbWFnZURvd247CnZhciBpbml0X2ltYWdlX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLWRvd24uanMiKCkgewogICAgSW1hZ2VEb3duID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTAuMyAyMUg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDE0YTIgMiAwIDAgMSAyIDJ2MTBsLTMuMS0zLjFhMiAyIDAgMCAwLTIuODE0LjAxNEw2IDIxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE5IDMgM3YtNS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDIyIDMtMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLW1pbnVzLmpzCnZhciBJbWFnZU1pbnVzOwp2YXIgaW5pdF9pbWFnZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtbWludXMuanMiKCkgewogICAgSW1hZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MTBhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTYiLCB4MjogIjIyIiwgeTE6ICI1IiwgeTI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1vZmYuanMKdmFyIEltYWdlT2ZmOwp2YXIgaW5pdF9pbWFnZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLW9mZi5qcyIoKSB7CiAgICBJbWFnZU9mZiA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC40MSAxMC40MWEyIDIgMCAxIDEtMi44My0yLjgzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEzLjUiLCB4MjogIjYiLCB5MTogIjEzLjUiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE4IiwgeDI6ICIyMSIsIHkxOiAiMTIiLCB5MjogIjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNTkgMy41OUExLjk5IDEuOTkgMCAwIDAgMyA1djE0YTIgMiAwIDAgMCAyIDJoMTRjLjU1IDAgMS4wNTItLjIyIDEuNDEtLjU5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1VjVhMiAyIDAgMCAwLTItMkg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtcGx1cy5qcwp2YXIgSW1hZ2VQbHVzOwp2YXIgaW5pdF9pbWFnZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbHVzLmpzIigpIHsKICAgIEltYWdlUGx1cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTEuNVYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDE1LTMuMDg2LTMuMDg2YTIgMiAwIDAgMC0yLjgyOCAwTDYgMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbGF5LmpzCnZhciBJbWFnZVBsYXk7CnZhciBpbml0X2ltYWdlX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXBsYXkuanMiKCkgewogICAgSW1hZ2VQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTUuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMi4xN1Y1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIxIDUtNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwLmpzCnZhciBJbWFnZVVwOwp2YXIgaW5pdF9pbWFnZV91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXAuanMiKCkgewogICAgSW1hZ2VVcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEwLjMgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjEwbC0zLjEtMy4xYTIgMiAwIDAgMC0yLjgxNC4wMTRMNiAyMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxOS41IDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjJ2LTUuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwc2NhbGUuanMKdmFyIEltYWdlVXBzY2FsZTsKdmFyIGluaXRfaW1hZ2VfdXBzY2FsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXBzY2FsZS5qcyIoKSB7CiAgICBJbWFnZVVwc2NhbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAzaDV2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMWgyYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgMjEgNC4xNDQtNC4xNDRhMS4yMSAxLjIxIDAgMCAxIDEuNzEyIDBMMTMgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjExIiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjEwIiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UuanMKdmFyIEltYWdlMjsKdmFyIGluaXRfaW1hZ2UzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS5qcyIoKSB7CiAgICBJbWFnZTIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxNS0zLjA4Ni0zLjA4NmEyIDIgMCAwIDAtMi44MjggMEw2IDIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzCnZhciBJbWFnZXM7CnZhciBpbml0X2ltYWdlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzIigpIHsKICAgIEltYWdlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDExLTEuMjk2LTEuMjk2YTIuNCAyLjQgMCAwIDAtMy40MDggMEwxMSAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDhhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDEwYTIgMiAwIDAgMCAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMyIsIGN5OiAiNyIsIHI6ICIxIiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiMiIsIHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltcG9ydC5qcwp2YXIgSW1wb3J0Owp2YXIgaW5pdF9pbXBvcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltcG9ydC5qcyIoKSB7CiAgICBJbXBvcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzdjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTEgNCA0IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVINGEyIDIgMCAwIDAtMiAydjEwYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmJveC5qcwp2YXIgSW5ib3g7CnZhciBpbml0X2luYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmJveC5qcyIoKSB7CiAgICBJbmJveCA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMjIgMTIgMTYgMTIgMTQgMTUgMTAgMTUgOCAxMiAyIDEyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTUuNDUgNS4xMSAyIDEydjZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi02bC0zLjQ1LTYuODlBMiAyIDAgMCAwIDE2Ljc2IDRINy4yNGEyIDIgMCAwIDAtMS43OSAxLjExeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZGlhbi1ydXBlZS5qcwp2YXIgSW5kaWFuUnVwZWU7CnZhciBpbml0X2luZGlhbl9ydXBlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5kaWFuLXJ1cGVlLmpzIigpIHsKICAgIEluZGlhblJ1cGVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDEzIDguNSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEzYzYuNjY3IDAgNi42NjctMTAgMC0xMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZmluaXR5LmpzCnZhciBJbmZpbml0eTI7CnZhciBpbml0X2luZmluaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmZpbml0eS5qcyIoKSB7CiAgICBJbmZpbml0eTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE2YzUgMCA3LTggMTItOGE0IDQgMCAwIDEgMCA4Yy01IDAtNy04LTEyLThhNCA0IDAgMSAwIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZm8uanMKdmFyIEluZm8yOwp2YXIgaW5pdF9pbmZvMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5mby5qcyIoKSB7CiAgICBJbmZvMiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDhoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zcGVjdGlvbi1wYW5lbC5qcwp2YXIgSW5zcGVjdGlvblBhbmVsOwp2YXIgaW5pdF9pbnNwZWN0aW9uX3BhbmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbnNwZWN0aW9uLXBhbmVsLmpzIigpIHsKICAgIEluc3BlY3Rpb25QYW5lbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzCnZhciBJbnN0YWdyYW07CnZhciBpbml0X2luc3RhZ3JhbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzIigpIHsKICAgIEluc3RhZ3JhbSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMjAiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICI1Iiwgcnk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDExLjM3QTQgNCAwIDEgMSAxMi42MyA4IDQgNCAwIDAgMSAxNiAxMS4zN3oiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTcuNSIsIHgyOiAiMTcuNTEiLCB5MTogIjYuNSIsIHkyOiAiNi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzCnZhciBJdGFsaWM7CnZhciBpbml0X2l0YWxpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzIigpIHsKICAgIEl0YWxpYyA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxMCIsIHkxOiAiNCIsIHkyOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNCIsIHgyOiAiNSIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jY3cuanMKdmFyIEl0ZXJhdGlvbkNjdzsKdmFyIGluaXRfaXRlcmF0aW9uX2NjdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWNjdy5qcyIoKSB7CiAgICBJdGVyYXRpb25DY3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNCA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEwYTggOCAwIDEgMC04IDhoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jdy5qcwp2YXIgSXRlcmF0aW9uQ3c7CnZhciBpbml0X2l0ZXJhdGlvbl9jdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWN3LmpzIigpIHsKICAgIEl0ZXJhdGlvbkN3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMGE4IDggMCAxIDEgOCA4SDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAyMi00LTQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvamFwYW5lc2UteWVuLmpzCnZhciBKYXBhbmVzZVllbjsKdmFyIGluaXRfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9qYXBhbmVzZS15ZW4uanMiKCkgewogICAgSmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5LjVWMjFtMC0xMS41TDYgM202IDYuNUwxOCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTVoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMWgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzCnZhciBKb3lzdGljazsKdmFyIGluaXRfam95c3RpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzIigpIHsKICAgIEpveXN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTdhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MmEyIDIgMCAwIDAgMiAyaDE0YTIgMiAwIDAgMCAyLTJ2LTJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTV2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVWOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rYW5iYW4uanMKdmFyIEthbmJhbjsKdmFyIGluaXRfa2FuYmFuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rYW5iYW4uanMiKCkgewogICAgS2FuYmFuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanMKdmFyIEtheWFrOwp2YXIgaW5pdF9rYXlhayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanMiKCkgewogICAgS2F5YWsgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxN2ExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAwIDItMnoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTcgMy42MWEuNDUuNDUgMCAwIDAtLjU4LS41OEMxMC4yIDYuNiA2LjYgMTAuMiAzLjAzIDIwLjM5YS40NS40NSAwIDAgMCAuNTguNThDMTMuOCAxNy40IDE3LjQgMTMuOCAyMC45NyAzLjYxIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNzA3IDYuNzA3IDEwLjU4NiAxMC41ODYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA1YTIgMiAwIDEgMC0yIDJoMWExIDEgMCAwIDAgMS0xeiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS1yb3VuZC5qcwp2YXIgS2V5Um91bmQ7CnZhciBpbml0X2tleV9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LXJvdW5kLmpzIigpIHsKICAgIEtleVJvdW5kID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTcuNDE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0YTYuNSA2LjUgMCAxIDAtNC00eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktc3F1YXJlLmpzCnZhciBLZXlTcXVhcmU7CnZhciBpbml0X2tleV9zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS1zcXVhcmUuanMiKCkgewogICAgS2V5U3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNCAyLjdhMi41IDIuNSAwIDAgMSAzLjQgMGw1LjUgNS41YTIuNSAyLjUgMCAwIDEgMCAzLjRsLTMuNyAzLjdhMi41IDIuNSAwIDAgMS0zLjQgMEw4LjcgOS44YTIuNSAyLjUgMCAwIDEgMC0zLjR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDcgMyAzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTkuNCAxMC42LTYuODE0IDYuODE0QTIgMiAwIDAgMCAyIDE4LjgyOFYyMWExIDEgMCAwIDAgMSAxaDNhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaDFhMSAxIDAgMCAwIDEtMXYtMWExIDEgMCAwIDEgMS0xaC4xNzJhMiAyIDAgMCAwIDEuNDE0LS41ODZsLjgxNC0uODE0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LmpzCnZhciBLZXkyOwp2YXIgaW5pdF9rZXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleS5qcyIoKSB7CiAgICBLZXkyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuNSA3LjUgMi4zIDIuM2ExIDEgMCAwIDAgMS40IDBsMi4xLTIuMWExIDEgMCAwIDAgMC0xLjRMMTkgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyLTkuNiA5LjYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE1LjUiLCByOiAiNS41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQtbXVzaWMuanMKdmFyIEtleWJvYXJkTXVzaWM7CnZhciBpbml0X2tleWJvYXJkX211c2ljID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1tdXNpYy5qcyIoKSB7CiAgICBLZXlib2FyZE11c2ljID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1vZmYuanMKdmFyIEtleWJvYXJkT2ZmOwp2YXIgaW5pdF9rZXlib2FyZF9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleWJvYXJkLW9mZi5qcyIoKSB7CiAgICBLZXlib2FyZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAyMCA0IEEyIDIgMCAwIDEgMjIgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjIgNiBMIDIyIDE2LjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA3IDE2IEwgMTYgMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDkuNjkgNCBMIDIwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIwSDRhMiAyIDAgMCAxLTItMlY2YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2tleWJvYXJkLmpzCnZhciBLZXlib2FyZDI7CnZhciBpbml0X2tleWJvYXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC5qcyIoKSB7CiAgICBLZXlib2FyZDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDhoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtY2VpbGluZy5qcwp2YXIgTGFtcENlaWxpbmc7CnZhciBpbml0X2xhbXBfY2VpbGluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC1jZWlsaW5nLmpzIigpIHsKICAgIExhbXBDZWlsaW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjgyOSAxNS45OThhMyAzIDAgMSAxLTUuNjU4IDAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTIgMTQuNjA2QTEgMSAwIDAgMSAyMCAxNkg0YTEgMSAwIDAgMS0uOTItMS4zOTRsMy03QTEgMSAwIDAgMSA3IDdoMTBhMSAxIDAgMCAxIC45Mi42MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC1kZXNrLmpzCnZhciBMYW1wRGVzazsKdmFyIGluaXRfbGFtcF9kZXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWRlc2suanMiKCkgewogICAgTGFtcERlc2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4yOTMgMi4yOTNhMSAxIDAgMCAxIDEuNDE0IDBsMi41IDIuNSA1Ljk5NCAxLjIyN2ExIDEgMCAwIDEgLjUwNiAxLjY4N2wtNyA3YTEgMSAwIDAgMS0xLjY4Ny0uNTA2bC0xLjIyNy01Ljk5NC0yLjUtMi41YTEgMSAwIDAgMSAwLTEuNDE0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4yMDcgNC43OTMtMy40MTQgMy40MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYxYTEgMSAwIDAgMS0xIDFINGExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjA4NiA2LjUtNC43OTMgNC43OTNhMSAxIDAgMCAwLS4xOCAxLjE3TDcgMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLWZsb29yLmpzCnZhciBMYW1wRmxvb3I7CnZhciBpbml0X2xhbXBfZmxvb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZmxvb3IuanMiKCkgewogICAgTGFtcEZsb29yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTB2MTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuOTI5IDcuNjI5QTEgMSAwIDAgMSAxNyA5SDdhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSA5IDJoNmExIDEgMCAwIDEgLjkyOC42Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjJoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtd2FsbC1kb3duLmpzCnZhciBMYW1wV2FsbERvd247CnZhciBpbml0X2xhbXBfd2FsbF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtZG93bi5qcyIoKSB7CiAgICBMYW1wV2FsbERvd24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgMTguNjI5QTEgMSAwIDAgMSAxOSAyMEg5YTEgMSAwIDAgMS0uOTI4LTEuMzcxbDItNUExIDEgMCAwIDEgMTEgMTNoNmExIDEgMCAwIDEgLjkyOC42Mjl6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgM2EyIDIgMCAwIDEgMiAydjJhMiAyIDAgMCAxLTIgMkg1YTEgMSAwIDAgMS0xLTFWNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZoNGEyIDIgMCAwIDEgMiAydjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtdXAuanMKdmFyIExhbXBXYWxsVXA7CnZhciBpbml0X2xhbXBfd2FsbF91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFtcC13YWxsLXVwLmpzIigpIHsKICAgIExhbXBXYWxsVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS45MjkgOS42MjlBMSAxIDAgMCAxIDE5IDExSDlhMSAxIDAgMCAxLS45MjgtMS4zNzFsMi01QTEgMSAwIDAgMSAxMSA0aDZhMSAxIDAgMCAxIC45MjguNjI5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1YTIgMiAwIDAgMSAyIDJ2MmEyIDIgMCAwIDEtMiAySDVhMSAxIDAgMCAxLTEtMXYtNGExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aDRhMiAyIDAgMCAwIDItMnYtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanMKdmFyIExhbXA7CnZhciBpbml0X2xhbXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanMiKCkgewogICAgTGFtcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC4wNzcgMTAuNjE1QTEgMSAwIDAgMCA1IDEyaDE0YTEgMSAwIDAgMCAuOTIzLTEuMzg1bC0zLjA3Ny03LjM4NEEyIDIgMCAwIDAgMTUgMkg5YTIgMiAwIDAgMC0xLjg0NiAxLjIzWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIwYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjFhMSAxIDAgMCAxLTEgMUg5YTEgMSAwIDAgMS0xLTF6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFuZC1wbG90LmpzCnZhciBMYW5kUGxvdDsKdmFyIGluaXRfbGFuZF9wbG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kLXBsb3QuanMiKCkgewogICAgTGFuZFBsb3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA4IDYtMy02LTN2MTAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtOCAxMS45OS01LjUgMy4xNGExIDEgMCAwIDAgMCAxLjc0bDguNSA0Ljg2YTIgMiAwIDAgMCAyIDBsOC41LTQuODZhMSAxIDAgMCAwIDAtMS43NEwxNiAxMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjQ5IDEyLjg1IDExLjAyIDYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41MSAxMi44NSA2LjUgMTkuMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qcwp2YXIgTGFuZG1hcms7CnZhciBpbml0X2xhbmRtYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qcyIoKSB7CiAgICBMYW5kbWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE4di03IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjEyIDIuMTk4YTIgMiAwIDAgMSAxLjc2LjAwNmw3Ljg2NiAzLjg0N2MuNDc2LjIzMy4zMS45NDktLjIyLjk0OUgzLjQ3NGMtLjUzIDAtLjY5NS0uNzE2LS4yMi0uOTQ5eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTh2LTciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5ndWFnZXMuanMKdmFyIExhbmd1YWdlczsKdmFyIGluaXRfbGFuZ3VhZ2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5ndWFnZXMuanMiKCkgewogICAgTGFuZ3VhZ2VzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA4IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE0IDYtNiAyLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTUtMTAtNSAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwtY2hlY2suanMKdmFyIExhcHRvcE1pbmltYWxDaGVjazsKdmFyIGluaXRfbGFwdG9wX21pbmltYWxfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC1taW5pbWFsLWNoZWNrLmpzIigpIHsKICAgIExhcHRvcE1pbmltYWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjBoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwuanMKdmFyIExhcHRvcE1pbmltYWw7CnZhciBpbml0X2xhcHRvcF9taW5pbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXB0b3AtbWluaW1hbC5qcyIoKSB7CiAgICBMYXB0b3BNaW5pbWFsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjQiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIwIiwgeTI6ICIyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC5qcwp2YXIgTGFwdG9wOwp2YXIgaW5pdF9sYXB0b3AgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC5qcyIoKSB7CiAgICBMYXB0b3AgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA1YTIgMiAwIDAgMSAyIDJ2OC41MjZhMiAyIDAgMCAwIC4yMTIuODk3bDEuMDY4IDIuMTI3YTEgMSAwIDAgMS0uOSAxLjQ1SDMuNjJhMSAxIDAgMCAxLS45LTEuNDVsMS4wNjgtMi4xMjdBMiAyIDAgMCAwIDQgMTUuNTI2VjdhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMDU0IDE1Ljk4N0gzLjk0NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhc3NvLXNlbGVjdC5qcwp2YXIgTGFzc29TZWxlY3Q7CnZhciBpbml0X2xhc3NvX3NlbGVjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFzc28tc2VsZWN0LmpzIigpIHsKICAgIExhc3NvU2VsZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMmE1IDUgMCAwIDEtMi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTYuOTNjLjk2LjQzIDEuOTYuNzQgMi45OS45MSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMuMzQgMTRBNi44IDYuOCAwIDAgMSAyIDEwYzAtNC40MiA0LjQ4LTggMTAtOHMxMCAzLjU4IDEwIDhhNy4xOSA3LjE5IDAgMCAxLS4zMyAyIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4YTIgMiAwIDEgMCAwLTQgMiAyIDAgMCAwIDAgNHoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQuMzMgMjJoLS4wOWEuMzUuMzUgMCAwIDEtLjI0LS4zMnYtMTBhLjM0LjM0IDAgMCAxIC4zMy0uMzRjLjA4IDAgLjE1LjAzLjIxLjA4bDcuMzQgNmEuMzMuMzMgMCAwIDEtLjIxLjU5aC00LjQ5bC0yLjU3IDMuODVhLjM1LjM1IDAgMCAxLS4yOC4xNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qcwp2YXIgTGFzc287CnZhciBpbml0X2xhc3NvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qcyIoKSB7CiAgICBMYXNzbyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy43MDQgMTQuNDY3QTEwIDggMCAwIDEgMiAxMGExMCA4IDAgMCAxIDIwIDAgMTAgOCAwIDAgMS0xMCA4IDEwIDggMCAwIDEtNS4xODEtMS4xNTgiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJhNSA1IDAgMCAxLTItMy45OTQiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF1Z2guanMKdmFyIExhdWdoOwp2YXIgaW5pdF9sYXVnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF1Z2guanMiKCkgewogICAgTGF1Z2ggPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxM2E2IDYgMCAwIDEtNiA1IDYgNiAwIDAgMS02LTVoMTJaIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkiLCB4MjogIjkuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE1LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLTIuanMKdmFyIExheWVyczI7CnZhciBpbml0X2xheWVyc18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtMi5qcyIoKSB7CiAgICBMYXllcnMyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMgMTMuNzRhMiAyIDAgMCAxLTIgMEwyLjUgOC44N2ExIDEgMCAwIDEgMC0xLjc0TDExIDIuMjZhMiAyIDAgMCAxIDIgMGw4LjUgNC44N2ExIDEgMCAwIDEgMCAxLjc0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0yMCAxNC4yODUgMS41Ljg0NWExIDEgMCAwIDEgMCAxLjc0TDEzIDIxLjc0YTIgMiAwIDAgMS0yIDBsLTguNS00Ljg3YTEgMSAwIDAgMSAwLTEuNzRsMS41LS44NDUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMuanMKdmFyIExheWVyczM7CnZhciBpbml0X2xheWVycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLmpzIigpIHsKICAgIExheWVyczMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi44MyAyLjE4YTIgMiAwIDAgMC0xLjY2IDBMMi42IDYuMDhhMSAxIDAgMCAwIDAgMS44M2w4LjU4IDMuOTFhMiAyIDAgMCAwIDEuNjYgMGw4LjU4LTMuOWExIDEgMCAwIDAgMC0xLjgzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIDEuNjUgMGw4LjU4LTMuOUExIDEgMCAwIDAgMjIgMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxN2ExIDEgMCAwIDAgLjU4LjkxbDguNiAzLjkxYTIgMiAwIDAgMCAxLjY1IDBsOC41OC0zLjlBMSAxIDAgMCAwIDIyIDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLXBsdXMuanMKdmFyIExheWVyc1BsdXM7CnZhciBpbml0X2xheWVyc19wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtcGx1cy5qcyIoKSB7CiAgICBMYXllcnNQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuODMgMi4xOGEyIDIgMCAwIDAtMS42NiAwTDIuNiA2LjA4YTEgMSAwIDAgMCAwIDEuODNsOC41OCAzLjkxYTIgMiAwIDAgMCAuODMuMTggMiAyIDAgMCAwIC44My0uMThsOC41OC0zLjlhMSAxIDAgMCAwIDAtMS44MzF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE3aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTR2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyYTEgMSAwIDAgMCAuNTguOTFsOC42IDMuOTFhMiAyIDAgMCAwIC44MjUuMTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTdhMSAxIDAgMCAwIC41OC45MWw4LjYgMy45MWEyIDIgMCAwIDAgMS42NSAwbDIuMTE2LS45NjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtZGFzaGJvYXJkLmpzCnZhciBMYXlvdXREYXNoYm9hcmQ7CnZhciBpbml0X2xheW91dF9kYXNoYm9hcmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1kYXNoYm9hcmQuanMiKCkgewogICAgTGF5b3V0RGFzaGJvYXJkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjkiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI1IiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjkiLCB4OiAiMTQiLCB5OiAiMTIiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1ncmlkLmpzCnZhciBMYXlvdXRHcmlkOwp2YXIgaW5pdF9sYXlvdXRfZ3JpZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LWdyaWQuanMiKCkgewogICAgTGF5b3V0R3JpZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjE0IiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtbGlzdC5qcwp2YXIgTGF5b3V0TGlzdDsKdmFyIGluaXRfbGF5b3V0X2xpc3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1saXN0LmpzIigpIHsKICAgIExheW91dExpc3QgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1aDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1wYW5lbC1sZWZ0LmpzCnZhciBMYXlvdXRQYW5lbExlZnQ7CnZhciBpbml0X2xheW91dF9wYW5lbF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtbGVmdC5qcyIoKSB7CiAgICBMYXlvdXRQYW5lbExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICI3IiwgeDogIjE0IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtdG9wLmpzCnZhciBMYXlvdXRQYW5lbFRvcDsKdmFyIGluaXRfbGF5b3V0X3BhbmVsX3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXBhbmVsLXRvcC5qcyIoKSB7CiAgICBMYXlvdXRQYW5lbFRvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCB4OiAiMyIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI3IiwgaGVpZ2h0OiAiNyIsIHg6ICIxNCIsIHk6ICIxNCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC10ZW1wbGF0ZS5qcwp2YXIgTGF5b3V0VGVtcGxhdGU7CnZhciBpbml0X2xheW91dF90ZW1wbGF0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXRlbXBsYXRlLmpzIigpIHsKICAgIExheW91dFRlbXBsYXRlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICI3IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI5IiwgaGVpZ2h0OiAiNyIsIHg6ICIzIiwgeTogIjE0Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI3IiwgeDogIjE2IiwgeTogIjE0Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qcwp2YXIgTGVhZjsKdmFyIGluaXRfbGVhZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qcyIoKSB7CiAgICBMZWFmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMSAyMEE3IDcgMCAwIDEgOS44IDYuMUMxNS41IDUgMTcgNC40OCAxOSAyYzEgMiAyIDQuMTggMiA4IDAgNS41LTQuNzggMTAtMTAgMTBaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYzAtMyAxLjg1LTUuMzYgNS4wOC02QzkuNSAxNC41MiAxMiAxMyAxMyAxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlYWZ5LWdyZWVuLmpzCnZhciBMZWFmeUdyZWVuOwp2YXIgaW5pdF9sZWFmeV9ncmVlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZnktZ3JlZW4uanMiKCkgewogICAgTGVhZnlHcmVlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjJjMS4yNS0uOTg3IDIuMjctMS45NzUgMy45LTIuMmE1LjU2IDUuNTYgMCAwIDEgMy44IDEuNSA0IDQgMCAwIDAgNi4xODctMi4zNTMgMy41IDMuNSAwIDAgMCAzLjY5LTUuMTE2QTMuNSAzLjUgMCAwIDAgMjAuOTUgOCAzLjUgMy41IDAgMSAwIDE2IDMuMDVhMy41IDMuNSAwIDAgMC01LjgzMSAxLjM3MyAzLjUgMy41IDAgMCAwLTUuMTE2IDMuNjkgNCA0IDAgMCAwLTIuMzQ4IDYuMTU1QzMuNDk5IDE1LjQyIDQuNDA5IDE2LjcxMiA0LjIgMTguMSAzLjkyNiAxOS43NDMgMy4wMTQgMjAuNzMyIDIgMjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMiAxNyA3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qcwp2YXIgTGVjdGVybjsKdmFyIGluaXRfbGVjdGVybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qcyIoKSB7CiAgICBMZWN0ZXJuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJoM2EyIDIgMCAwIDAgMS45MDItMS4zOGwxLjA1Ni0zLjMzM0ExIDEgMCAwIDAgMjEgNkgzYTEgMSAwIDAgMC0uOTU4IDEuMjg3bDEuMDU2IDMuMzM0QTIgMiAwIDAgMCA1IDEyaDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNlYzYTEgMSAwIDAgMC0xLTFoLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjEyIiwgeDogIjgiLCB5OiAiMTAiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWJyYXJ5LWJpZy5qcwp2YXIgTGlicmFyeUJpZzsKdmFyIGluaXRfbGlicmFyeV9iaWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnktYmlnLmpzIigpIHsKICAgIExpYnJhcnlCaWcgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgM3YxOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC40IDE4LjljLjIuNS0uMSAxLjEtLjYgMS4zbC0xLjkuN2MtLjUuMi0xLjEtLjEtMS4zLS42TDExLjEgNS4xYy0uMi0uNS4xLTEuMS42LTEuM2wxLjktLjdjLjUtLjIgMS4xLjEgMS4zLjZaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlicmFyeS5qcwp2YXIgTGlicmFyeTI7CnZhciBpbml0X2xpYnJhcnkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnkuanMiKCkgewogICAgTGlicmFyeTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2IDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2MTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlmZS1idW95LmpzCnZhciBMaWZlQnVveTsKdmFyIGluaXRfbGlmZV9idW95ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWZlLWJ1b3kuanMiKCkgewogICAgTGlmZUJ1b3kgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgNC4yNCA0LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjgzIDkuMTcgNC4yNC00LjI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjgzIDE0LjgzIDQuMjQgNC4yNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjE3IDE0LjgzLTQuMjQgNC4yNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnYXR1cmUuanMKdmFyIExpZ2F0dXJlOwp2YXIgaW5pdF9saWdhdHVyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnYXR1cmUuanMiKCkgewogICAgTGlnYXR1cmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmgydjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAyMGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjBWOGE0IDQgMCAwIDEgNy40NjQtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2h0YnVsYi1vZmYuanMKdmFyIExpZ2h0YnVsYk9mZjsKdmFyIGluaXRfbGlnaHRidWxiX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnaHRidWxiLW9mZi5qcyIoKSB7CiAgICBMaWdodGJ1bGJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi44IDExLjJjLjgtLjkgMS4yLTIgMS4yLTMuMmE2IDYgMCAwIDAtOS4zLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyA2LjNhNC42NyA0LjY3IDAgMCAwIDEuMiA1LjJjLjcuNyAxLjMgMS41IDEuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyaDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdodGJ1bGIuanMKdmFyIExpZ2h0YnVsYjsKdmFyIGluaXRfbGlnaHRidWxiID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saWdodGJ1bGIuanMiKCkgewogICAgTGlnaHRidWxiID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTRjLjItMSAuNy0xLjcgMS41LTIuNSAxLS45IDEuNS0yLjIgMS41LTMuNUE2IDYgMCAwIDAgNiA4YzAgMSAuMiAyLjIgMS41IDMuNS43LjcgMS4zIDEuNSAxLjUgMi41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluZS1zcXVpZ2dsZS5qcwp2YXIgTGluZVNxdWlnZ2xlOwp2YXIgaW5pdF9saW5lX3NxdWlnZ2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5lLXNxdWlnZ2xlLmpzIigpIHsKICAgIExpbmVTcXVpZ2dsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNyAzLjVjNS0yIDcgMi41IDMgNEMxLjUgMTAgMiAxNSA1IDE2YzUgMiA5LTEwIDE0LTdzLjUgMTMuNS00IDEyYy01LTIuNS41LTExIDYtMiIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTIuanMKdmFyIExpbmsyOwp2YXIgaW5pdF9saW5rXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmstMi5qcyIoKSB7CiAgICBMaW5rMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2gyYTUgNSAwIDEgMSAwIDEwaC0yIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTItb2ZmLmpzCnZhciBMaW5rMk9mZjsKdmFyIGluaXRfbGlua18yX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay0yLW9mZi5qcyIoKSB7CiAgICBMaW5rMk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTdIN0E1IDUgMCAwIDEgNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDdoMmE1IDUgMCAwIDEgNCA4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjEyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay5qcwp2YXIgTGluazsKdmFyIGluaXRfbGluazQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmsuanMiKCkgewogICAgTGluayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEzYTUgNSAwIDAgMCA3LjU0LjU0bDMtM2E1IDUgMCAwIDAtNy4wNy03LjA3bC0xLjcyIDEuNzEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTFhNSA1IDAgMCAwLTcuNTQtLjU0bC0zIDNhNSA1IDAgMCAwIDcuMDcgNy4wN2wxLjcxLTEuNzEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rZWRpbi5qcwp2YXIgTGlua2VkaW47CnZhciBpbml0X2xpbmtlZGluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rZWRpbi5qcyIoKSB7CiAgICBMaW5rZWRpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDhhNiA2IDAgMCAxIDYgNnY3aC00di03YTIgMiAwIDAgMC0yLTIgMiAyIDAgMCAwLTIgMnY3aC00di03YTYgNiAwIDAgMSA2LTZ6IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjQiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI0IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZWNrLmpzCnZhciBMaXN0Q2hlY2s7CnZhciBpbml0X2xpc3RfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hlY2suanMiKCkgewogICAgTGlzdENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGVja3MuanMKdmFyIExpc3RDaGVja3M7CnZhciBpbml0X2xpc3RfY2hlY2tzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZWNrcy5qcyIoKSB7CiAgICBMaXN0Q2hlY2tzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDE3IDIgMiA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZXZyb25zLWRvd24tdXAuanMKdmFyIExpc3RDaGV2cm9uc0Rvd25VcDsKdmFyIGluaXRfbGlzdF9jaGV2cm9uc19kb3duX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNoZXZyb25zLWRvd24tdXAuanMiKCkgewogICAgTGlzdENoZXZyb25zRG93blVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTkgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtdXAtZG93bi5qcwp2YXIgTGlzdENoZXZyb25zVXBEb3duOwp2YXIgaW5pdF9saXN0X2NoZXZyb25zX3VwX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hldnJvbnMtdXAtZG93bi5qcyIoKSB7CiAgICBMaXN0Q2hldnJvbnNVcERvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDggMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNiAzIDMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jb2xsYXBzZS5qcwp2YXIgTGlzdENvbGxhcHNlOwp2YXIgaW5pdF9saXN0X2NvbGxhcHNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWNvbGxhcHNlLmpzIigpIHsKICAgIExpc3RDb2xsYXBzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTJoMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTloMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxMCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjAgMy0zLTMtMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZW5kLmpzCnZhciBMaXN0RW5kOwp2YXIgaW5pdF9saXN0X2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1lbmQuanMiKCkgewogICAgTGlzdEVuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNi0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDV2MTJhMiAyIDAgMCAxLTIgMmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLXBsdXMuanMKdmFyIExpc3RGaWx0ZXJQbHVzOwp2YXIgaW5pdF9saXN0X2ZpbHRlcl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWZpbHRlci1wbHVzLmpzIigpIHsKICAgIExpc3RGaWx0ZXJQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNUgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA4VjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWZpbHRlci5qcwp2YXIgTGlzdEZpbHRlcjsKdmFyIGluaXRfbGlzdF9maWx0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLmpzIigpIHsKICAgIExpc3RGaWx0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDVoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMmgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1kZWNyZWFzZS5qcwp2YXIgTGlzdEluZGVudERlY3JlYXNlOwp2YXIgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1pbmRlbnQtZGVjcmVhc2UuanMiKCkgewogICAgTGlzdEluZGVudERlY3JlYXNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtaW5kZW50LWluY3JlYXNlLmpzCnZhciBMaXN0SW5kZW50SW5jcmVhc2U7CnZhciBpbml0X2xpc3RfaW5kZW50X2luY3JlYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1pbmNyZWFzZS5qcyIoKSB7CiAgICBMaXN0SW5kZW50SW5jcmVhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA1SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5SDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgOCA0IDQtNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1taW51cy5qcwp2YXIgTGlzdE1pbnVzOwp2YXIgaW5pdF9saXN0X21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW1pbnVzLmpzIigpIHsKICAgIExpc3RNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJoLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW11c2ljLmpzCnZhciBMaXN0TXVzaWM7CnZhciBpbml0X2xpc3RfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtbXVzaWMuanMiKCkgewogICAgTGlzdE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNlY1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW9yZGVyZWQuanMKdmFyIExpc3RPcmRlcmVkOwp2YXIgaW5pdF9saXN0X29yZGVyZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtb3JkZXJlZC5qcyIoKSB7CiAgICBMaXN0T3JkZXJlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDVoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0aDF2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjUgMjBIMy40YzAtMSAyLjYtMS45MjUgMi42LTMuNWExLjUgMS41IDAgMCAwLTIuNi0xLjAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1wbHVzLmpzCnZhciBMaXN0UGx1czsKdmFyIGluaXRfbGlzdF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXBsdXMuanMiKCkgewogICAgTGlzdFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDl2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtcmVzdGFydC5qcwp2YXIgTGlzdFJlc3RhcnQ7CnZhciBpbml0X2xpc3RfcmVzdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1yZXN0YXJ0LmpzIigpIHsKICAgIExpc3RSZXN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhNSA1IDAgMCAwIDktMyA0LjUgNC41IDAgMCAwLTQuNS00LjVjLTEuMzMgMC0yLjU0LjU0LTMuNDEgMS40MUwxMSAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMHY0aDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXN0YXJ0LmpzCnZhciBMaXN0U3RhcnQ7CnZhciBpbml0X2xpc3Rfc3RhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3Qtc3RhcnQuanMiKCkgewogICAgTGlzdFN0YXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMy0zIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOVY3YTIgMiAwIDAgMC0yLTJoLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXRvZG8uanMKdmFyIExpc3RUb2RvOwp2YXIgaW5pdF9saXN0X3RvZG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdG9kby5qcyIoKSB7CiAgICBMaXN0VG9kbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAxNyAyIDIgNC00IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICI0Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdHJlZS5qcwp2YXIgTGlzdFRyZWU7CnZhciBpbml0X2xpc3RfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC10cmVlLmpzIigpIHsKICAgIExpc3RUcmVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEwYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDV2MTJhMiAyIDAgMCAwIDIgMmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC12aWRlby5qcwp2YXIgTGlzdFZpZGVvOwp2YXIgaW5pdF9saXN0X3ZpZGVvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXZpZGVvLmpzIigpIHsKICAgIExpc3RWaWRlbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUgMTIuMDAzYTEgMSAwIDAgMSAxLjUxNy0uODU5bDQuOTk3IDIuOTk3YTEgMSAwIDAgMSAwIDEuNzE4bC00Ljk5NyAyLjk5N2ExIDEgMCAwIDEtMS41MTctLjg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QteC5qcwp2YXIgTGlzdFg7CnZhciBpbml0X2xpc3RfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC14LmpzIigpIHsKICAgIExpc3RYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEySDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTlIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS41IDkuNSA1IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNSA5LjUtNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9hZGVyLWNpcmNsZS5qcwp2YXIgTG9hZGVyQ2lyY2xlOwp2YXIgaW5pdF9sb2FkZXJfY2lyY2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXItY2lyY2xlLmpzIigpIHsKICAgIExvYWRlckNpcmNsZSA9IFtbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMSAxLTYuMjE5LTguNTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC5qcwp2YXIgTGlzdDsKdmFyIGluaXRfbGlzdDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QuanMiKCkgewogICAgTGlzdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA1aDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgxMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci1waW53aGVlbC5qcwp2YXIgTG9hZGVyUGlud2hlZWw7CnZhciBpbml0X2xvYWRlcl9waW53aGVlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9hZGVyLXBpbndoZWVsLmpzIigpIHsKICAgIExvYWRlclBpbndoZWVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJhMSAxIDAgMCAxLTEwIDAgMSAxIDAgMCAwLTEwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMC43YTEgMSAwIDEgMSA1LTguNyAxIDEgMCAxIDAgNS04LjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAzLjNhMSAxIDAgMSAxIDUgOC42IDEgMSAwIDEgMCA1IDguNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qcwp2YXIgTG9hZGVyOwp2YXIgaW5pdF9sb2FkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qcyIoKSB7CiAgICBMb2FkZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuMiA3LjggMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2LjIgMTYuMiAyLjkgMi45IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDE5LjEgMi45LTIuOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45IDQuOSAyLjkgMi45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jYXRlLWZpeGVkLmpzCnZhciBMb2NhdGVGaXhlZDsKdmFyIGluaXRfbG9jYXRlX2ZpeGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUtZml4ZWQuanMiKCkgewogICAgTG9jYXRlRml4ZWQgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICI1IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTkiLCB4MjogIjIyIiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyIiwgeTI6ICI1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMTkiLCB5MjogIjIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1vZmYuanMKdmFyIExvY2F0ZU9mZjsKdmFyIGluaXRfbG9jYXRlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jYXRlLW9mZi5qcyIoKSB7CiAgICBMb2NhdGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yNGE3IDcgMCAwIDAtOC4xMy04LjEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjA1IDcuMDVhNyA3IDAgMCAwIDkuOSA5LjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanMKdmFyIExvY2F0ZTsKdmFyIGluaXRfbG9jYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanMiKCkgewogICAgTG9jYXRlID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMiIsIHkxOiAiMTIiLCB5MjogIjEyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMiIsIHkyOiAiNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICI3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jay1rZXlob2xlLW9wZW4uanMKdmFyIExvY2tLZXlob2xlT3BlbjsKdmFyIGluaXRfbG9ja19rZXlob2xlX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS1vcGVuLmpzIigpIHsKICAgIExvY2tLZXlob2xlT3BlbiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxMiIsIHg6ICIzIiwgeTogIjEwIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgOS4zMy0yLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLWtleWhvbGUuanMKdmFyIExvY2tLZXlob2xlOwp2YXIgaW5pdF9sb2NrX2tleWhvbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS5qcyIoKSB7CiAgICBMb2NrS2V5aG9sZSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE2IiwgcjogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjEwIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBWN2E1IDUgMCAwIDEgMTAgMHYzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9jay1vcGVuLmpzCnZhciBMb2NrT3BlbjsKdmFyIGluaXRfbG9ja19vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLW9wZW4uanMiKCkgewogICAgTG9ja09wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjExIiwgeDogIjMiLCB5OiAiMTEiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMVY3YTUgNSAwIDAgMSA5LjktMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanMKdmFyIExvY2s7CnZhciBpbml0X2xvY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanMiKCkgewogICAgTG9jayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTEiLCB4OiAiMyIsIHk6ICIxMSIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExVjdhNSA1IDAgMCAxIDEwIDB2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvZy1pbi5qcwp2YXIgTG9nSW47CnZhciBpbml0X2xvZ19pbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9nLWluLmpzIigpIHsKICAgIExvZ0luID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJoLTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctb3V0LmpzCnZhciBMb2dPdXQ7CnZhciBpbml0X2xvZ19vdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvZy1vdXQuanMiKCkgewogICAgTG9nT3V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTcgNS01LTUtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qcwp2YXIgTG9nczsKdmFyIGluaXRfbG9ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qcyIoKSB7CiAgICBMb2dzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2xsaXBvcC5qcwp2YXIgTG9sbGlwb3A7CnZhciBpbml0X2xvbGxpcG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2xsaXBvcC5qcyIoKSB7CiAgICBMb2xsaXBvcCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMWEyIDIgMCAwIDAgNCAwIDQgNCAwIDAgMC04IDAgNiA2IDAgMCAwIDEyIDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sdWdnYWdlLmpzCnZhciBMdWdnYWdlOwp2YXIgaW5pdF9sdWdnYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9sdWdnYWdlLmpzIigpIHsKICAgIEx1Z2dhZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwYTIgMiAwIDAgMS0yLTJWOGEyIDIgMCAwIDEgMi0yaDEyYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4VjRhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2IiwgY3k6ICIyMCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMjAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qcwp2YXIgTWFnbmV0Owp2YXIgaW5pdF9tYWduZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qcyIoKSB7CiAgICBNYWduZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4zNTIgMTAuNjQ4YTEuMjA1IDEuMjA1IDAgMCAwIDAgMS43MDRsMi4yOTYgMi4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMS43MDQgMGw2LjAyOS02LjAyOWExIDEgMCAxIDEgMyAzbC02LjAyOSA2LjAyOWExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNi4zNjUtNi4zNjdBMSAxIDAgMCAwIDguNzE2IDQuMjgyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1jaGVjay5qcwp2YXIgTWFpbENoZWNrOwp2YXIgaW5pdF9tYWlsX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLWNoZWNrLmpzIigpIHsKICAgIE1haWxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzVjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTJjMCAxLjEuOSAyIDIgMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTkgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtbWludXMuanMKdmFyIE1haWxNaW51czsKdmFyIGluaXRfbWFpbF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1taW51cy5qcyIoKSB7CiAgICBNYWlsTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE5aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLW9wZW4uanMKdmFyIE1haWxPcGVuOwp2YXIgaW5pdF9tYWlsX29wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtb3Blbi5qcyIoKSB7CiAgICBNYWlsT3BlbiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjIgOC40Yy41LjM4LjguOTcuOCAxLjZ2MTBhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWMTBhMiAyIDAgMCAxIC44LTEuNmw4LTZhMiAyIDAgMCAxIDIuNCAwbDggNloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMTAtOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1wbHVzLmpzCnZhciBNYWlsUGx1czsKdmFyIGluaXRfbWFpbF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXBsdXMuanMiKCkgewogICAgTWFpbFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM1Y2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA3LTguOTcgNS43YTEuOTQgMS45NCAwIDAgMS0yLjA2IDBMMiA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtcXVlc3Rpb24tbWFyay5qcwp2YXIgTWFpbFF1ZXN0aW9uTWFyazsKdmFyIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXF1ZXN0aW9uLW1hcmsuanMiKCkgewogICAgTWFpbFF1ZXN0aW9uTWFyayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNS4yOGMuMi0uNC41LS44LjktMWEyLjEgMi4xIDAgMCAxIDIuNi40Yy4zLjQuNS44LjUgMS4zIDAgMS4zLTIgMi0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjJ2LjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1zZWFyY2guanMKdmFyIE1haWxTZWFyY2g7CnZhciBpbml0X21haWxfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXNlYXJjaC5qcyIoKSB7CiAgICBNYWlsU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTIuNVY2YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjEyYzAgMS4xLjkgMiAyIDJoNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDctOC45NyA1LjdhMS45NCAxLjk0IDAgMCAxLTIuMDYgMEwyIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjFhMyAzIDAgMSAwIDAtNiAzIDMgMCAwIDAgMCA2WiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTEuNS0xLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXdhcm5pbmcuanMKdmFyIE1haWxXYXJuaW5nOwp2YXIgaW5pdF9tYWlsX3dhcm5pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtd2FybmluZy5qcyIoKSB7CiAgICBNYWlsV2FybmluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwLjVWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDEyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDIydi4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwteC5qcwp2YXIgTWFpbFg7CnZhciBpbml0X21haWxfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC14LmpzIigpIHsKICAgIE1haWxYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTNWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMmMwIDEuMS45IDIgMiAyaDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk3IDUuN2ExLjk0IDEuOTQgMCAwIDEtMi4wNiAwTDIgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxNyA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMTctNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC5qcwp2YXIgTWFpbDsKdmFyIGluaXRfbWFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC5qcyIoKSB7CiAgICBNYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04Ljk5MSA1LjcyN2EyIDIgMCAwIDEtMi4wMDkgMEwyIDciIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsYm94LmpzCnZhciBNYWlsYm94Owp2YXIgaW5pdF9tYWlsYm94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsYm94LmpzIigpIHsKICAgIE1haWxib3ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY5LjVDMiA3IDQgNSA2LjUgNUgxOGMyLjIgMCA0IDEuOCA0IDR2OFoiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNSw5IDE4LDkgMTgsMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi41IDVDOSA1IDExIDcgMTEgOS41VjE3YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNyIsIHkxOiAiMTAiLCB5MjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbHMuanMKdmFyIE1haWxzOwp2YXIgaW5pdF9tYWlscyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbHMuanMiKCkgewogICAgTWFpbHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMS0xLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiA1LjUtNi40MTkgNC4xNzlhMiAyIDAgMCAxLTIuMTYyIDBMNyA1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI3IiwgeTogIjMiLCB3aWR0aDogIjE1IiwgaGVpZ2h0OiAiMTIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtbWludXMuanMKdmFyIE1hcE1pbnVzOwp2YXIgaW5pdF9tYXBfbWludXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1taW51cy5qcyIoKSB7CiAgICBNYXBNaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTExIDE5LTEuMTA2LS41NTJhMiAyIDAgMCAwLTEuNzg4IDBsLTMuNjU5IDEuODNBMSAxIDAgMCAxIDMgMTkuMzgxVjYuNjE4YTEgMSAwIDAgMSAuNTUzLS44OTRsNC41NTMtMi4yNzdhMiAyIDAgMCAxIDEuNzg4IDBsNC4yMTIgMi4xMDZhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTlWMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNS43NjRWMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2staW5zaWRlLmpzCnZhciBNYXBQaW5DaGVja0luc2lkZTsKdmFyIGluaXRfbWFwX3Bpbl9jaGVja19pbnNpZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2staW5zaWRlLmpzIigpIHsKICAgIE1hcFBpbkNoZWNrSW5zaWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tY2hlY2suanMKdmFyIE1hcFBpbkNoZWNrOwp2YXIgaW5pdF9tYXBfcGluX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLWNoZWNrLmpzIigpIHsKICAgIE1hcFBpbkNoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkuNDMgMTIuOTM1Yy4zNTctLjk2Ny41Ny0xLjk1NS41Ny0yLjkzNWE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMzIuMTk3IDMyLjE5NyAwIDAgMCAuODEzLS43MjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1ob3VzZS5qcwp2YXIgTWFwUGluSG91c2U7CnZhciBpbml0X21hcF9waW5faG91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4taG91c2UuanMiKCkgewogICAgTWFwUGluSG91c2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSAyMmExIDEgMCAwIDEtMS0xdi00YTEgMSAwIDAgMSAuNDQ1LS44MzJsMy0yYTEgMSAwIDAgMSAxLjExIDBsMyAyQTEgMSAwIDAgMSAyMiAxN3Y0YTEgMSAwIDAgMS0xIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEwYTggOCAwIDAgMC0xNiAwYzAgNC45OTMgNS41MzkgMTAuMTkzIDcuMzk5IDExLjc5OWExIDEgMCAwIDAgLjYwMS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIydi0zIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLWluc2lkZS5qcwp2YXIgTWFwUGluTWludXNJbnNpZGU7CnZhciBpbml0X21hcF9waW5fbWludXNfaW5zaWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLWluc2lkZS5qcyIoKSB7CiAgICBNYXBQaW5NaW51c0luc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEwaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW1pbnVzLmpzCnZhciBNYXBQaW5NaW51czsKdmFyIGluaXRfbWFwX3Bpbl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1taW51cy5qcyIoKSB7CiAgICBNYXBQaW5NaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk3NyAxNEMxOS42IDEyLjcwMSAyMCAxMS4zNDMgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLW9mZi5qcwp2YXIgTWFwUGluT2ZmOwp2YXIgaW5pdF9tYXBfcGluX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1vZmYuanMiKCkgewogICAgTWFwUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNzUgNy4wOWEzIDMgMCAwIDEgMi4xNiAyLjE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3LjA3MiAxNy4wNzJjLTEuNjM0IDIuMTctMy41MjcgMy45MTItNC40NzEgNC43MjdhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDEuNDMyLTQuNTY4IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjQ3NSAyLjgxOEE4IDggMCAwIDEgMjAgMTBjMCAxLjE4My0uMzEgMi4zNzctLjgxIDMuNTMzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTMgOS4xM2EzIDMgMCAwIDAgMy43NCAzLjc0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wZW4uanMKdmFyIE1hcFBpblBlbjsKdmFyIGluaXRfbWFwX3Bpbl9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGVuLmpzIigpIHsKICAgIE1hcFBpblBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljk3IDkuMzA0QTggOCAwIDAgMCAyIDEwYzAgNC42OSA0Ljg4NyA5LjU2MiA3LjAyMiAxMS40NjgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMzc4IDE2LjYyNmExIDEgMCAwIDAtMy4wMDQtMy4wMDRsLTQuMDEgNC4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzCnZhciBNYXBQaW5QbHVzSW5zaWRlOwp2YXIgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzIigpIHsKICAgIE1hcFBpblBsdXNJbnNpZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMGMwIDQuOTkzLTUuNTM5IDEwLjE5My03LjM5OSAxMS43OTlhMSAxIDAgMCAxLTEuMjAyIDBDOS41MzkgMjAuMTkzIDQgMTQuOTkzIDQgMTBhOCA4IDAgMCAxIDE2IDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tcGx1cy5qcwp2YXIgTWFwUGluUGx1czsKdmFyIGluaXRfbWFwX3Bpbl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMuanMiKCkgewogICAgTWFwUGluUGx1cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjkxNCAxMS4xMDVBNy4yOTggNy4yOTggMCAwIDAgMjAgMTBhOCA4IDAgMCAwLTE2IDBjMCA0Ljk5MyA1LjUzOSAxMC4xOTMgNy4zOTkgMTEuNzk5YTEgMSAwIDAgMCAxLjIwMiAwIDMyIDMyIDAgMCAwIC44MjQtLjczOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTV2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC1pbnNpZGUuanMKdmFyIE1hcFBpblhJbnNpZGU7CnZhciBpbml0X21hcF9waW5feF9pbnNpZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC1pbnNpZGUuanMiKCkgewogICAgTWFwUGluWEluc2lkZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEwYzAgNC45OTMtNS41MzkgMTAuMTkzLTcuMzk5IDExLjc5OWExIDEgMCAwIDEtMS4yMDIgMEM5LjUzOSAyMC4xOTMgNCAxNC45OTMgNCAxMGE4IDggMCAwIDEgMTYgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDcuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDcuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXguanMKdmFyIE1hcFBpblg7CnZhciBpbml0X21hcF9waW5feCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi14LmpzIigpIHsKICAgIE1hcFBpblggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS43NTIgMTEuOTAxQTcuNzggNy43OCAwIDAgMCAyMCAxMGE4IDggMCAwIDAtMTYgMGMwIDQuOTkzIDUuNTM5IDEwLjE5MyA3LjM5OSAxMS43OTlhMSAxIDAgMCAwIDEuMjAyIDAgMTkgMTkgMCAwIDAgLjA5LS4wNzciCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMS41IDE1LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxLjUgMjAuNS01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLmpzCnZhciBNYXBQaW47CnZhciBpbml0X21hcF9waW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4uanMiKCkgewogICAgTWFwUGluID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTBjMCA0Ljk5My01LjUzOSAxMC4xOTMtNy4zOTkgMTEuNzk5YTEgMSAwIDAgMS0xLjIwMiAwQzkuNTM5IDIwLjE5MyA0IDE0Ljk5MyA0IDEwYTggOCAwIDAgMSAxNiAwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGlubmVkLmpzCnZhciBNYXBQaW5uZWQ7CnZhciBpbml0X21hcF9waW5uZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW5uZWQuanMiKCkgewogICAgTWFwUGlubmVkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTggOGMwIDMuNjEzLTMuODY5IDcuNDI5LTUuMzkzIDguNzk1YTEgMSAwIDAgMS0xLjIxNCAwQzkuODcgMTUuNDI5IDYgMTEuNjEzIDYgOGE2IDYgMCAwIDEgMTIgMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOC43MTQgMTRoLTMuNzFhMSAxIDAgMCAwLS45NDguNjgzbC0yLjAwNCA2QTEgMSAwIDAgMCAzIDIyaDE4YTEgMSAwIDAgMCAuOTQ4LTEuMzE2bC0yLTZhMSAxIDAgMCAwLS45NDktLjY4NGgtMy43MTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGx1cy5qcwp2YXIgTWFwUGx1czsKdmFyIGluaXRfbWFwX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1wbHVzLmpzIigpIHsKICAgIE1hcFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMSAxOS0xLjEwNi0uNTUyYTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAwbDQuMjEyIDIuMTA2YTIgMiAwIDAgMCAxLjc4OCAwbDMuNjU5LTEuODNBMSAxIDAgMCAxIDIxIDQuNjE5VjEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDUuNzY0VjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE1djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMThoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzLjIzNnYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC5qcwp2YXIgTWFwMjsKdmFyIGluaXRfbWFwMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLmpzIigpIHsKICAgIE1hcDIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC4xMDYgNS41NTNhMiAyIDAgMCAwIDEuNzg4IDBsMy42NTktMS44M0ExIDEgMCAwIDEgMjEgNC42MTl2MTIuNzY0YTEgMSAwIDAgMS0uNTUzLjg5NGwtNC41NTMgMi4yNzdhMiAyIDAgMCAxLTEuNzg4IDBsLTQuMjEyLTIuMTA2YTIgMiAwIDAgMC0xLjc4OCAwbC0zLjY1OSAxLjgzQTEgMSAwIDAgMSAzIDE5LjM4MVY2LjYxOGExIDEgMCAwIDEgLjU1My0uODk0bDQuNTUzLTIuMjc3YTIgMiAwIDAgMSAxLjc4OCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1Ljc2NHYxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDMuMjM2djE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy1zdHJva2UuanMKdmFyIE1hcnNTdHJva2U7CnZhciBpbml0X21hcnNfc3Ryb2tlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJzLXN0cm9rZS5qcyIoKSB7CiAgICBNYXJzU3Ryb2tlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNiA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2g0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy03Ljc1IDcuNzUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxNSIsIHI6ICI2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy5qcwp2YXIgTWFyczsKdmFyIGluaXRfbWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFycy5qcyIoKSB7CiAgICBNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM2g1djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMy02Ljc1IDYuNzUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTQiLCByOiAiNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnRpbmkuanMKdmFyIE1hcnRpbmk7CnZhciBpbml0X21hcnRpbmkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnRpbmkuanMiKCkgewogICAgTWFydGluaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAzLTcgOC03LThaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWF4aW1pemUtMi5qcwp2YXIgTWF4aW1pemUyOwp2YXIgaW5pdF9tYXhpbWl6ZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXhpbWl6ZS0yLmpzIigpIHsKICAgIE1heGltaXplMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtNyA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMjEgNy03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFIM3YtNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzCnZhciBNYXhpbWl6ZTsKdmFyIGluaXRfbWF4aW1pemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzIigpIHsKICAgIE1heGltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzSDVhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhWNWEyIDIgMCAwIDAtMi0yaC0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZ2M2EyIDIgMCAwIDAgMiAyaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjFoM2EyIDIgMCAwIDAgMi0ydi0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVnYXBob25lLW9mZi5qcwp2YXIgTWVnYXBob25lT2ZmOwp2YXIgaW5pdF9tZWdhcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWdhcGhvbmUtb2ZmLmpzIigpIHsKICAgIE1lZ2FwaG9uZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjYzNiA2QTEzIDEzIDAgMCAwIDE5LjQgMy4yIDEgMSAwIDAgMSAyMSA0djExLjM0NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC4zNzggMTQuMzU3QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNGExMiAxMiAwIDAgMCAyLjQgNy4yIDIgMiAwIDAgMCAzLjItMi40QTggOCAwIDAgMSAxMCAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDh2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qcwp2YXIgTWVnYXBob25lOwp2YXIgaW5pdF9tZWdhcGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qcyIoKSB7CiAgICBNZWdhcGhvbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSA2YTEzIDEzIDAgMCAwIDguNC0yLjhBMSAxIDAgMCAxIDIxIDR2MTJhMSAxIDAgMCAxLTEuNi44QTEzIDEzIDAgMCAwIDExIDE0SDVhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRhMTIgMTIgMCAwIDAgMi40IDcuMiAyIDIgMCAwIDAgMy4yLTIuNEE4IDggMCAwIDEgMTAgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2djgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWRhbC5qcwp2YXIgTWVkYWw7CnZhciBpbml0X21lZGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWRhbC5qcyIoKSB7CiAgICBNZWRhbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcuMjEgMTUgMi42NiA3LjE0YTIgMiAwIDAgMSAuMTMtMi4yTDQuNCAyLjhBMiAyIDAgMCAxIDYgMmgxMmEyIDIgMCAwIDEgMS42LjhsMS42IDIuMTRhMiAyIDAgMCAxIC4xNCAyLjJMMTYuNzkgMTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTIgNS4xMiAyLjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTIgNS44OC05LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA3aDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTciLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOHYtMmgtLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWguanMKdmFyIE1laDsKdmFyIGluaXRfbWVoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZWguanMiKCkgewogICAgTWVoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lbW9yeS1zdGljay5qcwp2YXIgTWVtb3J5U3RpY2s7CnZhciBpbml0X21lbW9yeV9zdGljayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVtb3J5LXN0aWNrLmpzIigpIHsKICAgIE1lbW9yeVN0aWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMWgxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuNSAxMUgyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOHYtMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiNiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lcmdlLmpzCnZhciBNZXJnZTsKdmFyIGluaXRfbWVyZ2U0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXJnZS5qcyIoKSB7CiAgICBNZXJnZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTggNiA0LTQgNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAuM2E0IDQgMCAwIDEtMS4xNzIgMi44NzJMNCAyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAyMi01LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzCnZhciBNZW51Owp2YXIgaW5pdF9tZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzIigpIHsKICAgIE1lbnUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDVoMTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE5aDE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtY29kZS5qcwp2YXIgTWVzc2FnZUNpcmNsZUNvZGU7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWNvZGUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZUNvZGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgMTUgMy0zLTMtMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWRhc2hlZC5qcwp2YXIgTWVzc2FnZUNpcmNsZURhc2hlZDsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1kYXNoZWQuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjEgMi4xODJhMTAgMTAgMCAwIDEgMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuOSAyMS44MThhMTAgMTAgMCAwIDEtMy44IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNjA5IDMuNzJhMTAgMTAgMCAwIDEgMi42OSAyLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4xODIgMTMuOWExMCAxMCAwIDAgMSAwLTMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yOCAxNy42MWExMCAxMCAwIDAgMS0yLjcgMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MTggMTAuMWExMCAxMCAwIDAgMSAwIDMuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjcyMSA2LjM5MWExMCAxMCAwIDAgMSAyLjctMi42OSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE2MyAyMS4xMTctMi45MDYuODVhMSAxIDAgMCAxLTEuMjM2LTEuMTY5bC45NjUtMi45OCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWhlYXJ0LmpzCnZhciBNZXNzYWdlQ2lyY2xlSGVhcnQ7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1oZWFydC5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk03LjgyOCAxMy4wN0EzIDMgMCAwIDEgMTIgOC43NjRhMyAzIDAgMCAxIDUuMDA0IDIuMjI0IDMgMyAwIDAgMS0uODMyIDIuMDgzbC0zLjQ0NyAzLjYyYTEgMSAwIDAgMS0xLjQ1LS4wMDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtbW9yZS5qcwp2YXIgTWVzc2FnZUNpcmNsZU1vcmU7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW1vcmUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZU1vcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtb2ZmLmpzCnZhciBNZXNzYWdlQ2lyY2xlT2ZmOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW9mZi5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuOTMgNC45MjlhMTAgMTAgMCAwIDAtMS45MzggMTEuNDEyIDIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAwIDAgMTEuMzAyLTEuOTg5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzUgMi42OUExMCAxMCAwIDAgMSAyMS4zIDE1LjY1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcGx1cy5qcwp2YXIgTWVzc2FnZUNpcmNsZVBsdXM7CnZhciBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXBsdXMuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZVBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjk5MiAxNi4zNDJhMiAyIDAgMCAxIC4wOTQgMS4xNjdsLTEuMDY1IDMuMjlhMSAxIDAgMCAwIDEuMjM2IDEuMTY4bDMuNDEzLS45OThhMiAyIDAgMCAxIDEuMDk5LjA5MiAxMCAxMCAwIDEgMC00Ljc3Ny00LjcxOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcXVlc3Rpb24tbWFyay5qcwp2YXIgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcXVlc3Rpb24tbWFyay5qcyIoKSB7CiAgICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS4wOSA5YTMgMyAwIDAgMSA1LjgzIDFjMCAyLTMgMy0zIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcmVwbHkuanMKdmFyIE1lc3NhZ2VDaXJjbGVSZXBseTsKdmFyIGluaXRfbWVzc2FnZV9jaXJjbGVfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXJlcGx5LmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1LTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmg4YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXdhcm5pbmcuanMKdmFyIE1lc3NhZ2VDaXJjbGVXYXJuaW5nOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS13YXJuaW5nLmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVXYXJuaW5nID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXguanMKdmFyIE1lc3NhZ2VDaXJjbGVYOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS14LmpzIigpIHsKICAgIE1lc3NhZ2VDaXJjbGVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi45OTIgMTYuMzQyYTIgMiAwIDAgMSAuMDk0IDEuMTY3bC0xLjA2NSAzLjI5YTEgMSAwIDAgMCAxLjIzNiAxLjE2OGwzLjQxMy0uOTk4YTIgMiAwIDAgMSAxLjA5OS4wOTIgMTAgMTAgMCAxIDAtNC43NzctNC43MTkiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLmpzCnZhciBNZXNzYWdlQ2lyY2xlOwp2YXIgaW5pdF9tZXNzYWdlX2NpcmNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUuanMiKCkgewogICAgTWVzc2FnZUNpcmNsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuOTkyIDE2LjM0MmEyIDIgMCAwIDEgLjA5NCAxLjE2N2wtMS4wNjUgMy4yOWExIDEgMCAwIDAgMS4yMzYgMS4xNjhsMy40MTMtLjk5OGEyIDIgMCAwIDEgMS4wOTkuMDkyIDEwIDEwIDAgMSAwLTQuNzc3LTQuNzE5IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtY29kZS5qcwp2YXIgTWVzc2FnZVNxdWFyZUNvZGU7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWNvZGUuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZUNvZGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOC0zIDMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE0IDMtMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kYXNoZWQuanMKdmFyIE1lc3NhZ2VTcXVhcmVEYXNoZWQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZGFzaGVkLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVEYXNoZWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTd2NC4yODZhLjcxLjcxIDAgMCAwIDEuMjEyLjUwMmwyLjIwMi0yLjIwMkEyIDIgMCAwIDEgNi44MjggMTlIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDVhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDNoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZGlmZi5qcwp2YXIgTWVzc2FnZVNxdWFyZURpZmY7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2RpZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRpZmYuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZURpZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTVoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtZG90LmpzCnZhciBNZXNzYWdlU3F1YXJlRG90Owp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRvdC5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlRG90ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuNyAzSDRhMiAyIDAgMCAwLTIgMnYxNi4yODZhLjcxLjcxIDAgMCAwIDEuMjEyLjUwMmwyLjIwMi0yLjIwMkEyIDIgMCAwIDEgNi44MjggMTlIMjBhMiAyIDAgMCAwIDItMnYtNC43IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWhlYXJ0LmpzCnZhciBNZXNzYWdlU3F1YXJlSGVhcnQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX2hlYXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1oZWFydC5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlSGVhcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy41IDkuNWMwIC42ODcuMjY1IDEuMzgzLjY5NyAxLjg0NGwzLjAwOSAzLjI2NGExLjE0IDEuMTQgMCAwIDAgLjQwNy4zMTQgMSAxIDAgMCAwIC43ODMtLjAwNCAxLjE0IDEuMTQgMCAwIDAgLjM5OC0uMzFsMy4wMDgtMy4yNjRBMi43NyAyLjc3IDAgMCAwIDE2LjUgOS41IDIuNSAyLjUgMCAwIDAgMTIgOGEyLjUgMi41IDAgMCAwLTQuNSAxLjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1sb2NrLmpzCnZhciBNZXNzYWdlU3F1YXJlTG9jazsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtbG9jay5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlTG9jayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDguNVY1YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgxMCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxNXYtMmEyIDIgMCAwIDAtNCAwdjIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIxNSIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1tb3JlLmpzCnZhciBNZXNzYWdlU3F1YXJlTW9yZTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfbW9yZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtbW9yZS5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlTW9yZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtb2ZmLmpzCnZhciBNZXNzYWdlU3F1YXJlT2ZmOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLW9mZi5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlT2ZmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTlINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcuNyAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAxLjE4NC0xLjgyNiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC42NTYgM0gyMGEyIDIgMCAwIDEgMiAydjExLjM0NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXBsdXMuanMKdmFyIE1lc3NhZ2VTcXVhcmVQbHVzOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1wbHVzLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDh2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1xdW90ZS5qcwp2YXIgTWVzc2FnZVNxdWFyZVF1b3RlOwp2YXIgaW5pdF9tZXNzYWdlX3NxdWFyZV9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcXVvdGUuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVF1b3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTRhMiAyIDAgMCAwIDItMlY4aC0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0YTIgMiAwIDAgMCAyLTJWOEg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcmVwbHkuanMKdmFyIE1lc3NhZ2VTcXVhcmVSZXBseTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXJlcGx5LmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVSZXBseSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCA4LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTR2LTFhMiAyIDAgMCAwLTItMkg3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtc2hhcmUuanMKdmFyIE1lc3NhZ2VTcXVhcmVTaGFyZTsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfc2hhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXNoYXJlLmpzIigpIHsKICAgIE1lc3NhZ2VTcXVhcmVTaGFyZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDNINGEyIDIgMCAwIDAtMiAydjE2LjI4NmEuNzEuNzEgMCAwIDAgMS4yMTIuNTAybDIuMjAyLTIuMjAyQTIgMiAwIDAgMSA2LjgyOCAxOUgyMGEyIDIgMCAwIDAgMi0ydi00IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDkgNi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtdGV4dC5qcwp2YXIgTWVzc2FnZVNxdWFyZVRleHQ7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXRleHQuanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVRleHQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE1aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS13YXJuaW5nLmpzCnZhciBNZXNzYWdlU3F1YXJlV2FybmluZzsKdmFyIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtd2FybmluZy5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlV2FybmluZyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDE3YTIgMiAwIDAgMS0yIDJINi44MjhhMiAyIDAgMCAwLTEuNDE0LjU4NmwtMi4yMDIgMi4yMDJBLjcxLjcxIDAgMCAxIDIgMjEuMjg2VjVhMiAyIDAgMCAxIDItMmgxNmEyIDIgMCAwIDEgMiAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgN3Y0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUteC5qcwp2YXIgTWVzc2FnZVNxdWFyZVg7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXguanMiKCkgewogICAgTWVzc2FnZVNxdWFyZVggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxN2EyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDIxLjI4NlY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuNSA4LjUgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUuanMKdmFyIE1lc3NhZ2VTcXVhcmU7CnZhciBpbml0X21lc3NhZ2Vfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS5qcyIoKSB7CiAgICBNZXNzYWdlU3F1YXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjIgMTdhMiAyIDAgMCAxLTIgMkg2LjgyOGEyIDIgMCAwIDAtMS40MTQuNTg2bC0yLjIwMiAyLjIwMkEuNzEuNzEgMCAwIDEgMiAyMS4yODZWNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZXMtc3F1YXJlLmpzCnZhciBNZXNzYWdlc1NxdWFyZTsKdmFyIGluaXRfbWVzc2FnZXNfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlcy1zcXVhcmUuanMiKCkgewogICAgTWVzc2FnZXNTcXVhcmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAxMGEyIDIgMCAwIDEtMiAySDYuODI4YTIgMiAwIDAgMC0xLjQxNC41ODZsLTIuMjAyIDIuMjAyQS43MS43MSAwIDAgMSAyIDE0LjI4NlY0YTIgMiAwIDAgMSAyLTJoMTBhMiAyIDAgMCAxIDIgMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOWEyIDIgMCAwIDEgMiAydjEwLjI4NmEuNzEuNzEgMCAwIDEtMS4yMTIuNTAybC0yLjIwMi0yLjIwMkEyIDIgMCAwIDAgMTcuMTcyIDE5SDEwYTIgMiAwIDAgMS0yLTJ2LTEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMtb2ZmLmpzCnZhciBNaWNPZmY7CnZhciBpbml0X21pY19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy1vZmYuanMiKCkgewogICAgTWljT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTl2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjVhMyAzIDAgMCAwLTUuNjgtMS4zMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi45NSAxNi45NUE3IDcgMCAwIDEgNSAxMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC44OSAxMy4yM0E3IDcgMCAwIDAgMTkgMTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYzYTMgMyAwIDAgMCA1LjEyIDIuMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWMtdm9jYWwuanMKdmFyIE1pY1ZvY2FsOwp2YXIgaW5pdF9taWNfdm9jYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy12b2NhbC5qcyIoKSB7CiAgICBNaWNWb2NhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDcuNjAxLTUuOTk0IDguMTlhMSAxIDAgMCAwIC4xIDEuMjk4bC44MTcuODE4YTEgMSAwIDAgMCAxLjMxNC4wODdMMTUuMDkgMTIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuNSAyMS4xNzRDMTUuNSAyMC41IDE0LjM3MiAyMCAxMyAyMGMtMi4wNTggMC0zLjkyOCAyLjM1Ni02IDItMi4wNzItLjM1Ni0yLjc3NS0zLjM2OS0xLjUtNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjciLCByOiAiNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qcwp2YXIgTWljOwp2YXIgaW5pdF9taWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qcyIoKSB7CiAgICBNaWMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjJhNyA3IDAgMCAxLTE0IDB2LTIiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qcwp2YXIgTWljcm9jaGlwOwp2YXIgaW5pdF9taWNyb2NoaXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qcyIoKSB7CiAgICBNaWNyb2NoaXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN2g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDZoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjYiLCB5OiAiMiIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanMKdmFyIE1pY3Jvc2NvcGU7CnZhciBpbml0X21pY3Jvc2NvcGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanMiKCkgewogICAgTWljcm9zY29wZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIyYTcgNyAwIDEgMCAwLTE0aC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTRoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEyYTIgMiAwIDAgMS0yLTJWNmg2djRhMiAyIDAgMCAxLTIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNlYzYTEgMSAwIDAgMC0xLTFIOWExIDEgMCAwIDAtMSAxdjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanMKdmFyIE1pY3Jvd2F2ZTsKdmFyIGluaXRfbWljcm93YXZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanMiKCkgewogICAgTWljcm93YXZlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNSIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjciLCB4OiAiNiIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTl2MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGVzdG9uZS5qcwp2YXIgTWlsZXN0b25lOwp2YXIgaW5pdF9taWxlc3RvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGVzdG9uZS5qcyIoKSB7CiAgICBNaWxlc3RvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDZhMSAxIDAgMCAwLTEgMXY1YTEgMSAwIDAgMCAxIDFoMTNhMiAyIDAgMCAwIDEuMTUyLS4zNjVsMy40MjQtMi4zMTdhMSAxIDAgMCAwIDAtMS42MzVsLTMuNDI0LTIuMzE4QTIgMiAwIDAgMCAxNyA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGstb2ZmLmpzCnZhciBNaWxrT2ZmOwp2YXIgaW5pdF9taWxrX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay1vZmYuanMiKCkgewogICAgTWlsa09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMmg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMnYxLjM0M00xNSAydjIuNzg5YTQgNCAwIDAgMCAuNjcyIDIuMjE5bC42NTYuOTg0YTQgNCAwIDAgMSAuNjcyIDIuMjJ2MS4xMzFNNy44IDcuOGwtLjEyOC4xOTJBNCA0IDAgMCAwIDcgMTAuMjEyVjIwYTIgMiAwIDAgMCAyIDJoNmEyIDIgMCAwIDAgMi0ydi0zIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVhNi40NyA2LjQ3IDAgMCAxIDUgMCA2LjQ3MiA2LjQ3MiAwIDAgMCAzLjQzNS40MzUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay5qcwp2YXIgTWlsazsKdmFyIGluaXRfbWlsayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWlsay5qcyIoKSB7CiAgICBNaWxrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAydjIuNzg5YTQgNCAwIDAgMS0uNjcyIDIuMjE5bC0uNjU2Ljk4NEE0IDQgMCAwIDAgNyAxMC4yMTJWMjBhMiAyIDAgMCAwIDIgMmg2YTIgMiAwIDAgMCAyLTJ2LTkuNzg5YTQgNCAwIDAgMC0uNjcyLTIuMjE5bC0uNjU2LS45ODRBNCA0IDAgMCAxIDE1IDQuNzg4VjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNWE2LjQ3MiA2LjQ3MiAwIDAgMSA1IDAgNi40NyA2LjQ3IDAgMCAwIDUgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLTIuanMKdmFyIE1pbmltaXplMjsKdmFyIGluaXRfbWluaW1pemVfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWluaW1pemUtMi5qcyIoKSB7CiAgICBNaW5pbWl6ZTIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxMCA3LTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTBoLTZWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDctNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0aDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLmpzCnZhciBNaW5pbWl6ZTsKdmFyIGluaXRfbWluaW1pemUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbmltaXplLmpzIigpIHsKICAgIE1pbmltaXplID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAzdjNhMiAyIDAgMCAxLTIgMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDhoLTNhMiAyIDAgMCAxLTItMlYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTZoM2EyIDIgMCAwIDEgMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTNhMiAyIDAgMCAxIDItMmgzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWludXMuanMKdmFyIE1pbnVzOwp2YXIgaW5pdF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbWludXMuanMiKCkgewogICAgTWludXMgPSBbWyJwYXRoIiwgeyBkOiAiTTUgMTJoMTQiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jaGVjay5qcwp2YXIgTW9uaXRvckNoZWNrOwp2YXIgaW5pdF9tb25pdG9yX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNoZWNrLmpzIigpIHsKICAgIE1vbml0b3JDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMiAyIDQtNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItY2xvdWQuanMKdmFyIE1vbml0b3JDbG91ZDsKdmFyIGluaXRfbW9uaXRvcl9jbG91ZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jbG91ZC5qcyIoKSB7CiAgICBNb25pdG9yQ2xvdWQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxM2EzIDMgMCAxIDEgMi44My00SDE0YTIgMiAwIDAgMSAwIDR6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jb2cuanMKdmFyIE1vbml0b3JDb2c7CnZhciBpbml0X21vbml0b3JfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNvZy5qcyIoKSB7CiAgICBNb25pdG9yQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgNy41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggNC44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAzLjIyOC0uMzgzLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDguNzcyLS4zODMuOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAzLjIyOC4zODMtLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyA5LjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDQuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiA3LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEzdjJhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItZG90LmpzCnZhciBNb25pdG9yRG90Owp2YXIgaW5pdF9tb25pdG9yX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1kb3QuanMiKCkgewogICAgTW9uaXRvckRvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTIuMzA3VjE1YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg4LjY5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNiIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1kb3duLmpzCnZhciBNb25pdG9yRG93bjsKdmFyIGluaXRfbW9uaXRvcl9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWRvd24uanMiKCkgewogICAgTW9uaXRvckRvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEwLTMgMy0zLTMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLW9mZi5qcwp2YXIgTW9uaXRvck9mZjsKdmFyIGluaXRfbW9uaXRvcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itb2ZmLmpzIigpIHsKICAgIE1vbml0b3JPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN0g0YTIgMiAwIDAgMS0yLTJWNWMwLTEuNSAxLTIgMS0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE1VjVhMiAyIDAgMCAwLTItMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGF1c2UuanMKdmFyIE1vbml0b3JQYXVzZTsKdmFyIGluaXRfbW9uaXRvcl9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1wYXVzZS5qcyIoKSB7CiAgICBNb25pdG9yUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxM1Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXBsYXkuanMKdmFyIE1vbml0b3JQbGF5Owp2YXIgaW5pdF9tb25pdG9yX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGxheS5qcyIoKSB7CiAgICBNb25pdG9yUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjAzMyA5LjQ0YS42NDcuNjQ3IDAgMCAxIDAgMS4xMmwtNC4wNjUgMi4zNTJhLjY0NS42NDUgMCAwIDEtLjk2OC0uNTZWNy42NDhhLjY0NS42NDUgMCAwIDEgLjk2Ny0uNTZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zbWFydHBob25lLmpzCnZhciBNb25pdG9yU21hcnRwaG9uZTsKdmFyIGluaXRfbW9uaXRvcl9zbWFydHBob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNtYXJ0cGhvbmUuanMiKCkgewogICAgTW9uaXRvclNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2N2EyIDIgMCAwIDAgMiAyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTl2LTMuOTYgMy4xNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5aDUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjEwIiwgeDogIjE2IiwgeTogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zcGVha2VyLmpzCnZhciBNb25pdG9yU3BlYWtlcjsKdmFyIGluaXRfbW9uaXRvcl9zcGVha2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXNwZWFrZXIuanMiKCkgewogICAgTW9uaXRvclNwZWFrZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjUgMjBIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA5aC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE2IiwgeDogIjEyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA2SDRhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDJoNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNSIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1zdG9wLmpzCnZhciBNb25pdG9yU3RvcDsKdmFyIGluaXRfbW9uaXRvcl9zdG9wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXN0b3AuanMiKCkgewogICAgTW9uaXRvclN0b3AgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiMyIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjkiLCB5OiAiNyIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXVwLmpzCnZhciBNb25pdG9yVXA7CnZhciBpbml0X21vbml0b3JfdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItdXAuanMiKCkgewogICAgTW9uaXRvclVwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMCAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzVjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXguanMKdmFyIE1vbml0b3JYOwp2YXIgaW5pdF9tb25pdG9yX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3IteC5qcyIoKSB7CiAgICBNb25pdG9yWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjUgMTIuNS01LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDEyLjUgNS01IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci5qcwp2YXIgTW9uaXRvcjsKdmFyIGluaXRfbW9uaXRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci5qcyIoKSB7CiAgICBNb25pdG9yID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOCIsIHgyOiAiMTYiLCB5MTogIjIxIiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjE3IiwgeTI6ICIyMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vb24tc3Rhci5qcwp2YXIgTW9vblN0YXI7CnZhciBpbml0X21vb25fc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi1zdGFyLmpzIigpIHsKICAgIE1vb25TdGFyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDN2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC45ODUgMTIuNDg2YTkgOSAwIDEgMS05LjQ3My05LjQ3MmMuNDA1LS4wMjIuNjE3LjQ2LjQwMi44MDNhNiA2IDAgMCAwIDguMjY4IDguMjY4Yy4zNDQtLjIxNS44MjUtLjAwNC44MDMuNDAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzCnZhciBNb3RvcmJpa2U7CnZhciBpbml0X21vdG9yYmlrZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzIigpIHsKICAgIE1vdG9yYmlrZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0LTEtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDkgNiAyYTIgMiAwIDAgMSAyLTJoMmEyIDIgMCAwIDEgMS45OSAxLjgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTdoM2ExIDEgMCAwIDAgMS0xIDYgNiAwIDAgMSA2LTYgMSAxIDAgMCAwIDEtMXYtLjc1QTUgNSAwIDAgMCAxNyA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjE3IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI1IiwgY3k6ICIxNyIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qcwp2YXIgTW9vbjsKdmFyIGluaXRfbW9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qcyIoKSB7CiAgICBNb29uID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAuOTg1IDEyLjQ4NmE5IDkgMCAxIDEtOS40NzMtOS40NzJjLjQwNS0uMDIyLjYxNy40Ni40MDIuODAzYTYgNiAwIDAgMCA4LjI2OCA4LjI2OGMuMzQ0LS4yMTUuODI1LS4wMDQuODAzLjQwMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdW50YWluLXNub3cuanMKdmFyIE1vdW50YWluU25vdzsKdmFyIGluaXRfbW91bnRhaW5fc25vdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91bnRhaW4tc25vdy5qcyIoKSB7CiAgICBNb3VudGFpblNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDMgNCA4IDUtNSA1IDE1SDJMOCAzeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjE0IDE1LjA4YzIuNjItMS41NyA1LjI0LTEuNDMgNy44Ni40MiAyLjc0IDEuOTQgNS40OSAyIDguMjMuMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qcwp2YXIgTW91bnRhaW47CnZhciBpbml0X21vdW50YWluID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qcyIoKSB7CiAgICBNb3VudGFpbiA9IFtbInBhdGgiLCB7IGQ6ICJtOCAzIDQgOCA1LTUgNSAxNUgyTDggM3oiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2Utb2ZmLmpzCnZhciBNb3VzZU9mZjsKdmFyIGluaXRfbW91c2Vfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1vZmYuanMiKCkgewogICAgTW91c2VPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2di4zNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguMjE4IDE4LjIxOEE3IDcgMCAwIDEgNSAxNVY5YTcgNyAwIDAgMSAuNzgyLTMuMjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzLjM0M1Y5QTcgNyAwIDAgMCA4LjU2IDIuOTAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanMKdmFyIE1vdXNlUG9pbnRlcjJPZmY7CnZhciBpbml0X21vdXNlX3BvaW50ZXJfMl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanMiKCkgewogICAgTW91c2VQb2ludGVyMk9mZiA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE1LjU1IDguNDUgNS4xMzggMi4wODdhLjUuNSAwIDAgMS0uMDYzLjk0N2wtNi4xMjQgMS41OGEyIDIgMCAwIDAtMS40MzggMS40MzVsLTEuNTc5IDYuMTI2YS41LjUgMCAwIDEtLjk0Ny4wNjNMOC40NSAxNS41NTEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMiAyIDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuODE2IDExLjUyOC0yLjc3OS02Ljg0YS40OTUuNDk1IDAgMCAxIC42NTEtLjY1MWw2Ljg0IDIuNzc5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci0yLmpzCnZhciBNb3VzZVBvaW50ZXIyOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi5qcyIoKSB7CiAgICBNb3VzZVBvaW50ZXIyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC4wMzcgNC42ODhhLjQ5NS40OTUgMCAwIDEgLjY1MS0uNjUxbDE2IDYuNWEuNS41IDAgMCAxLS4wNjMuOTQ3bC02LjEyNCAxLjU4YTIgMiAwIDAgMC0xLjQzOCAxLjQzNWwtMS41NzkgNi4xMjZhLjUuNSAwIDAgMS0uOTQ3LjA2M3oiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWJhbi5qcwp2YXIgTW91c2VQb2ludGVyQmFuOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyX2JhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci1iYW4uanMiKCkgewogICAgTW91c2VQb2ludGVyQmFuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi4wMzQgMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDRMOC4yMDQgNy41NDVhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjYgMy40NDNhLjUuNSAwIDAgMS0uOTQ0LjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTYiLCByOiAiNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMS44IDExLjggOC40IDguNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItY2xpY2suanMKdmFyIE1vdXNlUG9pbnRlckNsaWNrOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWNsaWNrLmpzIigpIHsKICAgIE1vdXNlUG9pbnRlckNsaWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNC4xIDEyIDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNS4xIDgtMi45LS44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTItMS45IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy4yIDIuMiA4IDUuMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjAzNyA5LjY5YS40OTguNDk4IDAgMCAxIC42NTMtLjY1M2wxMSA0LjVhLjUuNSAwIDAgMS0uMDc0Ljk0OWwtNC4zNDkgMS4wNDFhMSAxIDAgMCAwLS43NC43MzlsLTEuMDQgNC4zNWEuNS41IDAgMCAxLS45NS4wNzR6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UtcG9pbnRlci5qcwp2YXIgTW91c2VQb2ludGVyOwp2YXIgaW5pdF9tb3VzZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLmpzIigpIHsKICAgIE1vdXNlUG9pbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjU4NiAxMi41ODYgMTkgMTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy42ODggMy4wMzdhLjQ5Ny40OTcgMCAwIDAtLjY1MS42NTFsNi41IDE1Ljk5OWEuNTAxLjUwMSAwIDAgMCAuOTQ3LS4wNjJsMS41NjktNi4wODNhMiAyIDAgMCAxIDEuNDQ4LTEuNDc5bDYuMTI0LTEuNTc5YS41LjUgMCAwIDAgLjA2My0uOTQ3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLmpzCnZhciBNb3VzZTsKdmFyIGluaXRfbW91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLmpzIigpIHsKICAgIE1vdXNlID0gWwogICAgICBbInJlY3QiLCB7IHg6ICI1IiwgeTogIjIiLCB3aWR0aDogIjE0IiwgaGVpZ2h0OiAiMjAiLCByeDogIjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNnY0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS0zZC5qcwp2YXIgTW92ZTNkOwp2YXIgaW5pdF9tb3ZlXzNkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLTNkLmpzIigpIHsKICAgIE1vdmUzZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM3YxNmgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDYgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAzIDMtMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC0yLmpzCnZhciBNb3ZlRGlhZ29uYWwyOwp2YXIgaW5pdF9tb3ZlX2RpYWdvbmFsXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwtMi5qcyIoKSB7CiAgICBNb3ZlRGlhZ29uYWwyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTN2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDUgMTQgMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRpYWdvbmFsLmpzCnZhciBNb3ZlRGlhZ29uYWw7CnZhciBpbml0X21vdmVfZGlhZ29uYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZGlhZ29uYWwuanMiKCkgewogICAgTW92ZURpYWdvbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlINXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1aDZ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA1IDUgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24tbGVmdC5qcwp2YXIgTW92ZURvd25MZWZ0Owp2YXIgaW5pdF9tb3ZlX2Rvd25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLWxlZnQuanMiKCkgewogICAgTW92ZURvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTlINVYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA1TDUgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24tcmlnaHQuanMKdmFyIE1vdmVEb3duUmlnaHQ7CnZhciBpbml0X21vdmVfZG93bl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLXJpZ2h0LmpzIigpIHsKICAgIE1vdmVEb3duUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxM1YxOUgxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDVMMTkgMTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWRvd24uanMKdmFyIE1vdmVEb3duOwp2YXIgaW5pdF9tb3ZlX2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi5qcyIoKSB7CiAgICBNb3ZlRG93biA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThMMTIgMjJMMTYgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMlYyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtbGVmdC5qcwp2YXIgTW92ZUxlZnQ7CnZhciBpbml0X21vdmVfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1sZWZ0LmpzIigpIHsKICAgIE1vdmVMZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA4TDIgMTJMNiAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEySDIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1ob3Jpem9udGFsLmpzCnZhciBNb3ZlSG9yaXpvbnRhbDsKdmFyIGluaXRfbW92ZV9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLWhvcml6b250YWwuanMiKCkgewogICAgTW92ZUhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCA4IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDgtNCA0IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtcmlnaHQuanMKdmFyIE1vdmVSaWdodDsKdmFyIGluaXRfbW92ZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1yaWdodC5qcyIoKSB7CiAgICBNb3ZlUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA4TDIyIDEyTDE4IDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJIMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLWxlZnQuanMKdmFyIE1vdmVVcExlZnQ7CnZhciBpbml0X21vdmVfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC1sZWZ0LmpzIigpIHsKICAgIE1vdmVVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDExVjVIMTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA1TDE5IDE5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC1yaWdodC5qcwp2YXIgTW92ZVVwUmlnaHQ7CnZhciBpbml0X21vdmVfdXBfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtcmlnaHQuanMiKCkgewogICAgTW92ZVVwUmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1SDE5VjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVMNSAxOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAuanMKdmFyIE1vdmVVcDsKdmFyIGluaXRfbW92ZV91cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS11cC5qcyIoKSB7CiAgICBNb3ZlVXAgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZMMTIgMkwxNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJWMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXZlcnRpY2FsLmpzCnZhciBNb3ZlVmVydGljYWw7CnZhciBpbml0X21vdmVfdmVydGljYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdmVydGljYWwuanMiKCkgewogICAgTW92ZVZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE4IDQgNCA0LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLmpzCnZhciBNb3ZlOwp2YXIgaW5pdF9tb3ZlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLmpzIigpIHsKICAgIE1vdmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE5LTMgMy0zLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgOSAzIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNSA5LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA1IDMtMyAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0yLmpzCnZhciBNdXNpYzI7CnZhciBpbml0X211c2ljXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTIuanMiKCkgewogICAgTXVzaWMyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4IiwgY3k6ICIxOCIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4VjJsNyA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtMy5qcwp2YXIgTXVzaWMzOwp2YXIgaW5pdF9tdXNpY18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0zLmpzIigpIHsKICAgIE11c2ljMyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE4IiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTQuanMKdmFyIE11c2ljNDsKdmFyIGluaXRfbXVzaWNfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtNC5qcyIoKSB7CiAgICBNdXNpYzQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE4VjVsMTItMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDkgMTItMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTYiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLmpzCnZhciBNdXNpYzsKdmFyIGluaXRfbXVzaWMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLmpzIigpIHsKICAgIE11c2ljID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOFY1bDEyLTJ2MTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE2IiwgcjogIjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLTItb2ZmLmpzCnZhciBOYXZpZ2F0aW9uMk9mZjsKdmFyIGluaXRfbmF2aWdhdGlvbl8yX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi0yLW9mZi5qcyIoKSB7CiAgICBOYXZpZ2F0aW9uMk9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMzEgOS4zMSA1IDIxbDctNCA3IDQtMS4xNy0zLjE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUzIDguODggMTIgMmwtMS4xNyAzLjE3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24tMi5qcwp2YXIgTmF2aWdhdGlvbjI7CnZhciBpbml0X25hdmlnYXRpb25fMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi0yLmpzIigpIHsKICAgIE5hdmlnYXRpb24yID0gW1sicG9seWdvbiIsIHsgcG9pbnRzOiAiMTIgMiAxOSAyMSAxMiAxNyA1IDIxIDEyIDIiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmF2aWdhdGlvbi1vZmYuanMKdmFyIE5hdmlnYXRpb25PZmY7CnZhciBpbml0X25hdmlnYXRpb25fb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLW9mZi5qcyIoKSB7CiAgICBOYXZpZ2F0aW9uT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOC40MyA4LjQzIDMgMTFsOCAyIDIgOCAyLjU3LTUuNDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuMzkgMTEuNzMgMjIgMmwtOS43MyA0LjYxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIiLCB4MjogIjIyIiwgeTE6ICIyIiwgeTI6ICIyMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanMKdmFyIE5hdmlnYXRpb247CnZhciBpbml0X25hdmlnYXRpb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanMiKCkgewogICAgTmF2aWdhdGlvbiA9IFtbInBvbHlnb24iLCB7IHBvaW50czogIjMgMTEgMjIgMiAxMyAyMSAxMSAxMyAzIDExIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ld3NwYXBlci5qcwp2YXIgTmV3c3BhcGVyOwp2YXIgaW5pdF9uZXdzcGFwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ld3NwYXBlci5qcyIoKSB7CiAgICBOZXdzcGFwZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxOGgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNGgtOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk00IDIyaDE2YTIgMiAwIDAgMCAyLTJWNGEyIDIgMCAwIDAtMi0ySDhhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDEtNCAwdi05YTIgMiAwIDAgMSAyLTJoMiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNCIsIHg6ICIxMCIsIHk6ICI2Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbmV0d29yay5qcwp2YXIgTmV0d29yazsKdmFyIGluaXRfbmV0d29yazIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25ldHdvcmsuanMiKCkgewogICAgTmV0d29yayA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTYiLCB5OiAiMTYiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNiIsIHdpZHRoOiAiNiIsIGhlaWdodDogIjYiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI5IiwgeTogIjIiLCB3aWR0aDogIjYiLCBoZWlnaHQ6ICI2Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZ2LTNhMSAxIDAgMCAxIDEtMWgxMmExIDEgMCAwIDEgMSAxdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25mYy5qcwp2YXIgTmZjOwp2YXIgaW5pdF9uZmMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25mYy5qcyIoKSB7CiAgICBOZmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDguMzJhNy40MyA3LjQzIDAgMCAxIDAgNy4zNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi45MSA0LjFhMTUuOTEgMTUuOTEgMCAwIDEgLjAxIDE1LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMzcgMmEyMC4xNiAyMC4xNiAwIDAgMSAwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm9uLWJpbmFyeS5qcwp2YXIgTm9uQmluYXJ5Owp2YXIgaW5pdF9ub25fYmluYXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub24tYmluYXJ5LmpzIigpIHsKICAgIE5vbkJpbmFyeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDQgNyA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSA4IDctNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNyIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stcGVuLmpzCnZhciBOb3RlYm9va1BlbjsKdmFyIGluaXRfbm90ZWJvb2tfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay1wZW4uanMiKCkgewogICAgTm90ZWJvb2tQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy40IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtNy40IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjM3OCA1LjYyNmExIDEgMCAxIDAtMy4wMDQtMy4wMDRsLTUuMDEgNS4wMTJhMiAyIDAgMCAwLS41MDYuODU0bC0uODM3IDIuODdhLjUuNSAwIDAgMCAuNjIuNjJsMi44Ny0uODM3YTIgMiAwIDAgMCAuODU0LS41MDZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stdGFicy5qcwp2YXIgTm90ZWJvb2tUYWJzOwp2YXIgaW5pdF9ub3RlYm9va190YWJzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay10YWJzLmpzIigpIHsKICAgIE5vdGVib29rVGFicyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTdoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXRleHQuanMKdmFyIE5vdGVib29rVGV4dDsKdmFyIGluaXRfbm90ZWJvb2tfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2stdGV4dC5qcyIoKSB7CiAgICBOb3RlYm9va1RleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDZoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgOGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxMkgxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTZIMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay5qcwp2YXIgTm90ZWJvb2s7CnZhciBpbml0X25vdGVib29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay5qcyIoKSB7CiAgICBOb3RlYm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiMjAiLCB4OiAiNCIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlcGFkLXRleHQtZGFzaGVkLmpzCnZhciBOb3RlcGFkVGV4dERhc2hlZDsKdmFyIGluaXRfbm90ZXBhZF90ZXh0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LWRhc2hlZC5qcyIoKSB7CiAgICBOb3RlcGFkVGV4dERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNGgyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4djJhMiAyIDAgMCAxLTIgMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIySDZhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0di0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgOFY2YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVwYWQtdGV4dC5qcwp2YXIgTm90ZXBhZFRleHQ7CnZhciBpbml0X25vdGVwYWRfdGV4dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LmpzIigpIHsKICAgIE5vdGVwYWRUZXh0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDJ2NCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE4IiwgeDogIjQiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNGg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMThoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL251dC1vZmYuanMKdmFyIE51dE9mZjsKdmFyIGluaXRfbnV0X29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LW9mZi5qcyIoKSB7CiAgICBOdXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0VjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNSAxMHY0YTcuMDA0IDcuMDA0IDAgMCAwIDUuMjc3IDYuNzg3Yy40MTIuMTA0LjgwMi4yOTIgMS4xMDIuNTkyTDEyIDIybC42MjEtLjYyMWMuMy0uMy42OS0uNDg4IDEuMTAyLS41OTJhNy4wMSA3LjAxIDAgMCAwIDQuMTI1LTIuOTM5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEwdjMuMzQzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyIDEyYy0xLjM0OS0uNTczLTEuOTA1LTEuMDA1LTIuNS0yLS41NDYuOTAyLTEuMDQ4IDEuMzUzLTIuNSAyLTEuMDE4LS42NDQtMS40Ni0xLjA4LTItMi0xLjAyOC43MS0xLjY5LjkxOC0zIDEgMS4wODEtMS4wNDggMS43NTctMi4wMyAyLTMgLjE5NC0uNzc2Ljg0LTEuNTUxIDEuNzktMi4yMW0xMS42NTQgNS45OTdjLjg4Ny0uNDU3IDEuMjgtLjg5MSAxLjU1Ni0xLjc4NyAxLjAzMi45MTYgMS42ODMgMS4xNTcgMyAxLTEuMjk3LTEuMDM2LTEuNzU4LTIuMDMtMi0zLS41LTItNC00LTgtNC0uNzQgMC0xLjQ2MS4wNjgtMi4xNS4xOTIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LmpzCnZhciBOdXQ7CnZhciBpbml0X251dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LmpzIigpIHsKICAgIE51dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDRWMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDEwdjRhNy4wMDQgNy4wMDQgMCAwIDAgNS4yNzcgNi43ODdjLjQxMi4xMDQuODAyLjI5MiAxLjEwMi41OTJMMTIgMjJsLjYyMS0uNjIxYy4zLS4zLjY5LS40ODggMS4xMDItLjU5MkE3LjAwMyA3LjAwMyAwIDAgMCAxOSAxNHYtNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiA0QzggNCA0LjUgNiA0IDhjLS4yNDMuOTctLjkxOSAxLjk1Mi0yIDMgMS4zMS0uMDgyIDEuOTcyLS4yOSAzLTEgLjU0LjkyLjk4MiAxLjM1NiAyIDIgMS40NTItLjY0NyAxLjk1NC0xLjA5OCAyLjUtMiAuNTk1Ljk5NSAxLjE1MSAxLjQyNyAyLjUgMiAxLjMxLS42MjEgMS44NjItMS4wNTggMi41LTIgLjYyOS45NzcgMS4xNjIgMS40MjMgMi41IDIgMS4yMDktLjU0OCAxLjY4LS45NjcgMi0yIDEuMDMyLjkxNiAxLjY4MyAxLjE1NyAzIDEtMS4yOTctMS4wMzYtMS43NTgtMi4wMy0yLTMtLjUtMi00LTQtOC00WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tYWxlcnQuanMKdmFyIE9jdGFnb25BbGVydDsKdmFyIGluaXRfb2N0YWdvbl9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1hbGVydC5qcyIoKSB7CiAgICBPY3RhZ29uQWxlcnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjMxMiAyYTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2bC00LjY4OC00LjY4OEEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1taW51cy5qcwp2YXIgT2N0YWdvbk1pbnVzOwp2YXIgaW5pdF9vY3RhZ29uX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLW1pbnVzLmpzIigpIHsKICAgIE9jdGFnb25NaW51cyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tcGF1c2UuanMKdmFyIE9jdGFnb25QYXVzZTsKdmFyIGluaXRfb2N0YWdvbl9wYXVzZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1wYXVzZS5qcyIoKSB7CiAgICBPY3RhZ29uUGF1c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE1VjkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMi41ODYgMTYuNzI2QTIgMiAwIDAgMSAyIDE1LjMxMlY4LjY4OGEyIDIgMCAwIDEgLjU4Ni0xLjQxNGw0LjY4OC00LjY4OEEyIDIgMCAwIDEgOC42ODggMmg2LjYyNGEyIDIgMCAwIDEgMS40MTQuNTg2bDQuNjg4IDQuNjg4QTIgMiAwIDAgMSAyMiA4LjY4OHY2LjYyNGEyIDIgMCAwIDEtLjU4NiAxLjQxNGwtNC42ODggNC42ODhhMiAyIDAgMCAxLTEuNDE0LjU4Nkg4LjY4OGEyIDIgMCAwIDEtMS40MTQtLjU4NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLXguanMKdmFyIE9jdGFnb25YOwp2YXIgaW5pdF9vY3RhZ29uX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24teC5qcyIoKSB7CiAgICBPY3RhZ29uWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDktNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIuNTg2IDE2LjcyNkEyIDIgMCAwIDEgMiAxNS4zMTJWOC42ODhhMiAyIDAgMCAxIC41ODYtMS40MTRsNC42ODgtNC42ODhBMiAyIDAgMCAxIDguNjg4IDJoNi42MjRhMiAyIDAgMCAxIDEuNDE0LjU4Nmw0LjY4OCA0LjY4OEEyIDIgMCAwIDEgMjIgOC42ODh2Ni42MjRhMiAyIDAgMCAxLS41ODYgMS40MTRsLTQuNjg4IDQuNjg4YTIgMiAwIDAgMS0xLjQxNC41ODZIOC42ODhhMiAyIDAgMCAxLTEuNDE0LS41ODZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOSA2IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLmpzCnZhciBPY3RhZ29uOwp2YXIgaW5pdF9vY3RhZ29uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLmpzIigpIHsKICAgIE9jdGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjU4NiAxNi43MjZBMiAyIDAgMCAxIDIgMTUuMzEyVjguNjg4YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQuNjg4LTQuNjg4QTIgMiAwIDAgMSA4LjY4OCAyaDYuNjI0YTIgMiAwIDAgMSAxLjQxNC41ODZsNC42ODggNC42ODhBMiAyIDAgMCAxIDIyIDguNjg4djYuNjI0YTIgMiAwIDAgMS0uNTg2IDEuNDE0bC00LjY4OCA0LjY4OGEyIDIgMCAwIDEtMS40MTQuNTg2SDguNjg4YTIgMiAwIDAgMS0xLjQxNC0uNTg2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29tZWdhLmpzCnZhciBPbWVnYTsKdmFyIGluaXRfb21lZ2EgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29tZWdhLmpzIigpIHsKICAgIE9tZWdhID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMGg0LjVhLjUuNSAwIDAgMCAuNS0uNXYtLjI4MmEuNTIuNTIgMCAwIDAtLjI0Ny0uNDM3IDggOCAwIDEgMSA4LjQ5NC0uMDAxLjUyLjUyIDAgMCAwLS4yNDcuNDM4di4yODJhLjUuNSAwIDAgMCAuNS41SDIxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb3B0aW9uLmpzCnZhciBPcHRpb247CnZhciBpbml0X29wdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvb3B0aW9uLmpzIigpIHsKICAgIE9wdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgM2g2bDYgMThoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcmJpdC5qcwp2YXIgT3JiaXQ7CnZhciBpbml0X29yYml0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9vcmJpdC5qcyIoKSB7CiAgICBPcmJpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjM0MSA2LjQ4NEExMCAxMCAwIDAgMSAxMC4yNjYgMjEuODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42NTkgMTcuNTE2QTEwIDEwIDAgMCAxIDEzLjc0IDIuMTUyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yaWdhbWkuanMKdmFyIE9yaWdhbWk7CnZhciBpbml0X29yaWdhbWkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yaWdhbWkuanMiKCkgewogICAgT3JpZ2FtaSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyVjRhMSAxIDAgMCAxIDEtMWg2LjI5N2ExIDEgMCAwIDEgLjY1MSAxLjc1OWwtNC42OTYgNC4wMjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm0xMiAyMS03LjQxNC03LjQxNEEyIDIgMCAwIDEgNCAxMi4xNzJWNi40MTVhMS4wMDIgMS4wMDIgMCAwIDEgMS43MDctLjcwN0wyMCAyMC4wMDkiIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEyLjIxNCAzLjM4MSA4LjQxNCAxNC45NjZhMSAxIDAgMCAxLS4xNjcgMS4xOTlsLTEuMTY4IDEuMTYzYTEgMSAwIDAgMS0uNzA2LjI5MUg2LjM1MWExIDEgMCAwIDEtLjYyNS0uMjE5TDMuMjUgMTguOGExIDEgMCAwIDEgLjYzMS0xLjc4MWw0LjE2NS4wMjciCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLTIuanMKdmFyIFBhY2thZ2UyOwp2YXIgaW5pdF9wYWNrYWdlXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtMi5qcyIoKSB7CiAgICBQYWNrYWdlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2NiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi43NiAzYTIgMiAwIDAgMSAxLjggMS4xbDIuMjMgNC40NzlhMiAyIDAgMCAxIC4yMS44OTFWMTlhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWOS40NzJhMiAyIDAgMCAxIC4yMTEtLjg5NEw1LjQ1IDQuMUEyIDIgMCAwIDEgNy4yNCAzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjA1NCA5LjAxM2gxNy44OTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLWNoZWNrLmpzCnZhciBQYWNrYWdlQ2hlY2s7CnZhciBpbml0X3BhY2thZ2VfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtY2hlY2suanMiKCkgewogICAgUGFja2FnZUNoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYgMiAyIDQtNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMFY4YTIgMiAwIDAgMC0xLTEuNzNsLTctNGEyIDIgMCAwIDAtMiAwbC03IDRBMiAyIDAgMCAwIDMgOHY4YTIgMiAwIDAgMCAxIDEuNzNsNyA0YTIgMiAwIDAgMCAyIDBsMi0xLjE0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiMjIiLCB5MjogIjEyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1taW51cy5qcwp2YXIgUGFja2FnZU1pbnVzOwp2YXIgaW5pdF9wYWNrYWdlX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLW1pbnVzLmpzIigpIHsKICAgIFBhY2thZ2VNaW51cyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utb3Blbi5qcwp2YXIgUGFja2FnZU9wZW47CnZhciBpbml0X3BhY2thZ2Vfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1vcGVuLmpzIigpIHsKICAgIFBhY2thZ2VPcGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMTcgMi4yMWExLjY3IDEuNjcgMCAwIDEgMS42MyAwTDIxIDQuNTdhMS45MyAxLjkzIDAgMCAxIDAgMy4zNkw4LjgyIDE0Ljc5YTEuNjU1IDEuNjU1IDAgMCAxLTEuNjQgMEwzIDEyLjQzYTEuOTMgMS45MyAwIDAgMSAwLTMuMzZ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzdjMuODdhMi4wNiAyLjA2IDAgMCAxLTEuMTEgMS44M2wtNiAzLjA4YTEuOTMgMS45MyAwIDAgMS0xLjc4IDBsLTYtMy4wOEEyLjA2IDIuMDYgMCAwIDEgNCAxNi44N1YxMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMSAxMi40M2ExLjkzIDEuOTMgMCAwIDAgMC0zLjM2TDguODMgMi4yYTEuNjQgMS42NCAwIDAgMC0xLjYzIDBMMyA0LjU3YTEuOTMgMS45MyAwIDAgMCAwIDMuMzZsMTIuMTggNi44NmExLjYzNiAxLjYzNiAwIDAgMCAxLjYzIDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1wbHVzLmpzCnZhciBQYWNrYWdlUGx1czsKdmFyIGluaXRfcGFja2FnZV9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLXBsdXMuanMiKCkgewogICAgUGFja2FnZVBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEzdjYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2Utc2VhcmNoLmpzCnZhciBQYWNrYWdlU2VhcmNoOwp2YXIgaW5pdF9wYWNrYWdlX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1zZWFyY2guanMiKCkgewogICAgUGFja2FnZVNlYXJjaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDEwVjhhMiAyIDAgMCAwLTEtMS43M2wtNy00YTIgMiAwIDAgMC0yIDBsLTcgNEEyIDIgMCAwIDAgMyA4djhhMiAyIDAgMCAwIDEgMS43M2w3IDRhMiAyIDAgMCAwIDIgMGwyLTEuMTQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy41IDQuMjcgOSA1LjE1IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy4yOSA3IDEyIDEyIDIwLjcxIDciIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIyMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOC41IiwgY3k6ICIxNS41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4yNyAxNy4yNyAyMiAxOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UteC5qcwp2YXIgUGFja2FnZVg7CnZhciBpbml0X3BhY2thZ2VfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS14LmpzIigpIHsKICAgIFBhY2thZ2VYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEgMTBWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczbDcgNGEyIDIgMCAwIDAgMiAwbDItMS4xNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03LjUgNC4yNyA5IDUuMTUiIH1dLAogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIzLjI5IDcgMTIgMTIgMjAuNzEgNyIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIiLCB5MTogIjIyIiwgeTI6ICIxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAxMyA1IDVtLTUgMCA1LTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzCnZhciBQYWNrYWdlOwp2YXIgaW5pdF9wYWNrYWdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzIigpIHsKICAgIFBhY2thZ2UgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMSAyMS43M2EyIDIgMCAwIDAgMiAwbDctNEEyIDIgMCAwIDAgMjEgMTZWOGEyIDIgMCAwIDAtMS0xLjczbC03LTRhMiAyIDAgMCAwLTIgMGwtNyA0QTIgMiAwIDAgMCAzIDh2OGEyIDIgMCAwIDAgMSAxLjczeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMlYxMiIgfV0sCiAgICAgIFsicG9seWxpbmUiLCB7IHBvaW50czogIjMuMjkgNyAxMiAxMiAyMC43MSA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuNSA0LjI3IDkgNS4xNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LWJ1Y2tldC5qcwp2YXIgUGFpbnRCdWNrZXQ7CnZhciBpbml0X3BhaW50X2J1Y2tldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtYnVja2V0LmpzIigpIHsKICAgIFBhaW50QnVja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgNyA2IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOTkyIDEySDIuMDQxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjE0NSAxOC4zOEEzLjM0IDMuMzQgMCAwIDEgMjAgMTYuNWEzLjMgMy4zIDAgMCAxLTEuMTQ1IDEuODhjLS41NzUuNDYtLjg1NSAxLjAyLS44NTUgMS41OTVBMiAyIDAgMCAwIDIwIDIyYTIgMiAwIDAgMCAyLTIuMDI1YzAtLjU4LS4yODUtMS4xMy0uODU1LTEuNTk1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTguNSA0LjUgMi4xNDgtMi4xNDhhMS4yMDUgMS4yMDUgMCAwIDEgMS43MDQgMGw3LjI5NiA3LjI5NmExLjIwNSAxLjIwNSAwIDAgMSAwIDEuNzA0bC03LjU5MiA3LjU5MmEzLjYxNSAzLjYxNSAwIDAgMS01LjExMiAwbC0zLjg4OC0zLjg4OGEzLjYxNSAzLjYxNSAwIDAgMSAwLTUuMTEyTDUuNjcgNy4zMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50LXJvbGxlci5qcwp2YXIgUGFpbnRSb2xsZXI7CnZhciBpbml0X3BhaW50X3JvbGxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtcm9sbGVyLmpzIigpIHsKICAgIFBhaW50Um9sbGVyID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTYiLCBoZWlnaHQ6ICI2IiwgeDogIjIiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNnYtMmEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAwIDItMlY3YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNCIsIGhlaWdodDogIjYiLCB4OiAiOCIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50YnJ1c2gtdmVydGljYWwuanMKdmFyIFBhaW50YnJ1c2hWZXJ0aWNhbDsKdmFyIGluaXRfcGFpbnRicnVzaF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC12ZXJ0aWNhbC5qcyIoKSB7CiAgICBQYWludGJydXNoVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJhMSAxIDAgMCAxIDEgMXY5SDZWM2ExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02IDEyYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAwIDAgMiAyaDJhMSAxIDAgMCAxIDEgMXYyLjlhMiAyIDAgMSAwIDQgMFYxN2ExIDEgMCAwIDEgMS0xaDJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC5qcwp2YXIgUGFpbnRicnVzaDsKdmFyIGluaXRfcGFpbnRicnVzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC5qcyIoKSB7CiAgICBQYWludGJydXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNjIyIDE3Ljg5Ny0xMC42OC0yLjkxMyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC4zNzYgMi42MjJhMSAxIDAgMSAxIDMuMDAyIDMuMDAyTDE3LjM2IDkuNjQzYS41LjUgMCAwIDAgMCAuNzA3bC45NDQuOTQ0YTIuNDEgMi40MSAwIDAgMSAwIDMuNDA4bC0uOTQ0Ljk0NGEuNS41IDAgMCAxLS43MDcgMEw4LjM1NCA3LjM0OGEuNS41IDAgMCAxIDAtLjcwN2wuOTQ0LS45NDRhMi40MSAyLjQxIDAgMCAxIDMuNDA4IDBsLjk0NC45NDRhLjUuNSAwIDAgMCAuNzA3IDB6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOGMtMS44MDQgMi43MS0zLjk3IDMuNDYtNi41ODMgMy45NDhhLjUwNy41MDcgMCAwIDAtLjMwMi44MTlsNy4zMiA4Ljg4M2ExIDEgMCAwIDAgMS4xODUuMjA0QzEyLjczNSAyMC40MDUgMTYgMTYuNzkyIDE2IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFsZXR0ZS5qcwp2YXIgUGFsZXR0ZTsKdmFyIGluaXRfcGFsZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFsZXR0ZS5qcyIoKSB7CiAgICBQYWxldHRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMjJhMSAxIDAgMCAxIDAtMjAgMTAgOSAwIDAgMSAxMCA5IDUgNSAwIDAgMS01IDVoLTIuMjVhMS43NSAxLjc1IDAgMCAwLTEuNCAyLjhsLjMuNGExLjc1IDEuNzUgMCAwIDEtMS40IDIuOHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMy41IiwgY3k6ICI2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTAuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2LjUiLCBjeTogIjEyLjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOC41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanMKdmFyIFBhbmRhOwp2YXIgaW5pdF9wYW5kYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanMiKCkgewogICAgUGFuZGEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4yNSAxNy4yNWgxLjVMMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDEyIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA2LjVhLjUuNSAwIDAgMC0uNS0uNSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC42OSA5LjY3YTQuNSA0LjUgMCAxIDAtNy4wNC01LjUgOC4zNSA4LjM1IDAgMCAwLTMuMyAwIDQuNSA0LjUgMCAxIDAtNy4wNCA1LjVDMi40OSAxMS4yIDIgMTIuODggMiAxNC41IDIgMTkuNDcgNi40OCAyMiAxMiAyMnMxMC0yLjUzIDEwLTcuNWMwLTEuNjItLjQ4LTMuMy0xLjMtNC44MyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDYuNWEuNDk1LjQ5NSAwIDAgMSAuNS0uNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyLTIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1jbG9zZS5qcwp2YXIgUGFuZWxCb3R0b21DbG9zZTsKdmFyIGluaXRfcGFuZWxfYm90dG9tX2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tY2xvc2UuanMiKCkgewogICAgUGFuZWxCb3R0b21DbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOC0zIDMtMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLWRhc2hlZC5qcwp2YXIgUGFuZWxCb3R0b21EYXNoZWQ7CnZhciBpbml0X3BhbmVsX2JvdHRvbV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1kYXNoZWQuanMiKCkgewogICAgUGFuZWxCb3R0b21EYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS1vcGVuLmpzCnZhciBQYW5lbEJvdHRvbU9wZW47CnZhciBpbml0X3BhbmVsX2JvdHRvbV9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tb3Blbi5qcyIoKSB7CiAgICBQYW5lbEJvdHRvbU9wZW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTAgMy0zIDMgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWJvdHRvbS5qcwp2YXIgUGFuZWxCb3R0b207CnZhciBpbml0X3BhbmVsX2JvdHRvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLmpzIigpIHsKICAgIFBhbmVsQm90dG9tID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQtY2xvc2UuanMKdmFyIFBhbmVsTGVmdENsb3NlOwp2YXIgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWNsb3NlLmpzIigpIHsKICAgIFBhbmVsTGVmdENsb3NlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE1LTMtMyAzLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWRhc2hlZC5qcwp2YXIgUGFuZWxMZWZ0RGFzaGVkOwp2YXIgaW5pdF9wYW5lbF9sZWZ0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1kYXNoZWQuanMiKCkgewogICAgUGFuZWxMZWZ0RGFzaGVkID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDl2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQtb3Blbi5qcwp2YXIgUGFuZWxMZWZ0T3BlbjsKdmFyIGluaXRfcGFuZWxfbGVmdF9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LW9wZW4uanMiKCkgewogICAgUGFuZWxMZWZ0T3BlbiA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qcwp2YXIgUGFuZWxMZWZ0UmlnaHREYXNoZWQ7CnZhciBpbml0X3BhbmVsX2xlZnRfcmlnaHRfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qcyIoKSB7CiAgICBQYW5lbExlZnRSaWdodERhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwVjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTV2LTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNVYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE1di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjF2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1VjMiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIzIiwgeTogIjMiLCB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LmpzCnZhciBQYW5lbExlZnQ7CnZhciBpbml0X3BhbmVsX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQuanMiKCkgewogICAgUGFuZWxMZWZ0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQtY2xvc2UuanMKdmFyIFBhbmVsUmlnaHRDbG9zZTsKdmFyIGluaXRfcGFuZWxfcmlnaHRfY2xvc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LWNsb3NlLmpzIigpIHsKICAgIFBhbmVsUmlnaHRDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA5IDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1kYXNoZWQuanMKdmFyIFBhbmVsUmlnaHREYXNoZWQ7CnZhciBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQtZGFzaGVkLmpzIigpIHsKICAgIFBhbmVsUmlnaHREYXNoZWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDl2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LW9wZW4uanMKdmFyIFBhbmVsUmlnaHRPcGVuOwp2YXIgaW5pdF9wYW5lbF9yaWdodF9vcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1vcGVuLmpzIigpIHsKICAgIFBhbmVsUmlnaHRPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNS0zLTMgMy0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtcmlnaHQuanMKdmFyIFBhbmVsUmlnaHQ7CnZhciBpbml0X3BhbmVsX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC5qcyIoKSB7CiAgICBQYW5lbFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3YxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzCnZhciBQYW5lbFRvcEJvdHRvbURhc2hlZDsKdmFyIGluaXRfcGFuZWxfdG9wX2JvdHRvbV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzIigpIHsKICAgIFBhbmVsVG9wQm90dG9tRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA5aDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTVoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTVoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1jbG9zZS5qcwp2YXIgUGFuZWxUb3BDbG9zZTsKdmFyIGluaXRfcGFuZWxfdG9wX2Nsb3NlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3AtY2xvc2UuanMiKCkgewogICAgUGFuZWxUb3BDbG9zZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE2IDMtMyAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3AtZGFzaGVkLmpzCnZhciBQYW5lbFRvcERhc2hlZDsKdmFyIGluaXRfcGFuZWxfdG9wX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWRhc2hlZC5qcyIoKSB7CiAgICBQYW5lbFRvcERhc2hlZCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDloMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC10b3Atb3Blbi5qcwp2YXIgUGFuZWxUb3BPcGVuOwp2YXIgaW5pdF9wYW5lbF90b3Bfb3BlbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLW9wZW4uanMiKCkgewogICAgUGFuZWxUb3BPcGVuID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE0LTMgMy0zLTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbHMtbGVmdC1ib3R0b20uanMKdmFyIFBhbmVsc0xlZnRCb3R0b207CnZhciBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLWxlZnQtYm90dG9tLmpzIigpIHsKICAgIFBhbmVsc0xlZnRCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDN2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWgxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC5qcwp2YXIgUGFuZWxUb3A7CnZhciBpbml0X3BhbmVsX3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLmpzIigpIHsKICAgIFBhbmVsVG9wID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXJpZ2h0LWJvdHRvbS5qcwp2YXIgUGFuZWxzUmlnaHRCb3R0b207CnZhciBpbml0X3BhbmVsc19yaWdodF9ib3R0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy1yaWdodC1ib3R0b20uanMiKCkgewogICAgUGFuZWxzUmlnaHRCb3R0b20gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbHMtdG9wLWxlZnQuanMKdmFyIFBhbmVsc1RvcExlZnQ7CnZhciBpbml0X3BhbmVsc190b3BfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXRvcC1sZWZ0LmpzIigpIHsKICAgIFBhbmVsc1RvcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMVY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFwZXJjbGlwLmpzCnZhciBQYXBlcmNsaXA7CnZhciBpbml0X3BhcGVyY2xpcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFwZXJjbGlwLmpzIigpIHsKICAgIFBhcGVyY2xpcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2IDYtOC40MTQgOC41ODZhMiAyIDAgMCAwIDIuODI5IDIuODI5bDguNDE0LTguNTg2YTQgNCAwIDEgMC01LjY1Ny01LjY1N2wtOC4zNzkgOC41NTFhNiA2IDAgMSAwIDguNDg1IDguNDg1bDguMzc5LTguNTUxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFya2luZy1tZXRlci5qcwp2YXIgUGFya2luZ01ldGVyOwp2YXIgaW5pdF9wYXJraW5nX21ldGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJraW5nLW1ldGVyLmpzIigpIHsKICAgIFBhcmtpbmdNZXRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE1aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOXYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjI4MiAxOWExIDEgMCAwIDAgLjk0OC0uNjhsMi4zNy02Ljk4OGE3IDcgMCAxIDAtMTMuMiAwbDIuMzcgNi45ODhhMSAxIDAgMCAwIC45NDguNjh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWEzIDMgMCAxIDEgNiAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFyZW50aGVzZXMuanMKdmFyIFBhcmVudGhlc2VzOwp2YXIgaW5pdF9wYXJlbnRoZXNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFyZW50aGVzZXMuanMiKCkgewogICAgUGFyZW50aGVzZXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxcy00LTMtNC05IDQtOSA0LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgM3M0IDMgNCA5LTQgOS00IDkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJ0eS1wb3BwZXIuanMKdmFyIFBhcnR5UG9wcGVyOwp2YXIgaW5pdF9wYXJ0eV9wb3BwZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcnR5LXBvcHBlci5qcyIoKSB7CiAgICBQYXJ0eVBvcHBlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuOCAxMS4zIDIgMjJsMTAuNy0zLjc5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIyIDItMi4yNC43NWEyLjkgMi45IDAgMCAwLTEuOTYgMy4xMmMuMS44Ni0uNTcgMS42My0xLjQ1IDEuNjNoLS4zOGMtLjg2IDAtMS42LjYtMS43NiAxLjQ0TDE0IDEwIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDEzLS44Mi0uMzNjLS44Ni0uMzQtMS44Mi4yLTEuOTggMS4xMWMtLjExLjctLjcyIDEuMjItMS40MyAxLjIySDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDIgLjMzLjgyYy4zNC44Ni0uMiAxLjgyLTEuMTEgMS45OEM5LjUyIDQuOSA5IDUuNTIgOSA2LjIzVjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTNjMS45MyAxLjkzIDIuODMgNC4xNyAyIDUtLjgzLjgzLTMuMDctLjA3LTUtMi0xLjkzLTEuOTMtMi44My00LjE3LTItNSAuODMtLjgzIDMuMDcuMDcgNSAyWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzCnZhciBQYXVzZTsKdmFyIGluaXRfcGF1c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzIigpIHsKICAgIFBhdXNlID0gWwogICAgICBbInJlY3QiLCB7IHg6ICIxNCIsIHk6ICIzIiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiMTgiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICI1IiwgeTogIjMiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bhdy1wcmludC5qcwp2YXIgUGF3UHJpbnQ7CnZhciBpbml0X3Bhd19wcmludCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGF3LXByaW50LmpzIigpIHsKICAgIFBhd1ByaW50ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiNCIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjgiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjIwIiwgY3k6ICIxNiIsIHI6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTBhNSA1IDAgMCAxIDUgNXYzLjVhMy41IDMuNSAwIDAgMS02Ljg0IDEuMDQ1UTYuNTIgMTcuNDggNC40NiAxNi44NEEzLjUgMy41IDAgMCAxIDUuNSAxMFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYy1jYXNlLmpzCnZhciBQY0Nhc2U7CnZhciBpbml0X3BjX2Nhc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BjLWNhc2UuanMiKCkgewogICAgUGNDYXNlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTBoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1saW5lLmpzCnZhciBQZW5MaW5lOwp2YXIgaW5pdF9wZW5fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLWxpbmUuanMiKCkgewogICAgUGVuTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1vZmYuanMKdmFyIFBlbk9mZjsKdmFyIGluaXRfcGVuX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLW9mZi5qcyIoKSB7CiAgICBQZW5PZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMCAxMC02LjE1NyA2LjE2MmEyIDIgMCAwIDAtLjUuODMzbC0xLjMyMiA0LjM2YS41LjUgMCAwIDAgLjYyMi42MjRsNC4zNTgtMS4zMjNhMiAyIDAgMCAwIC44My0uNUwxNCAxMy45ODIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuODI5IDcuMTcyIDQuMzU5LTQuMzQ2YTEgMSAwIDEgMSAzLjk4NiAzLjk4NmwtNC4zNTMgNC4zNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLXRvb2wuanMKdmFyIFBlblRvb2w7CnZhciBpbml0X3Blbl90b29sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4tdG9vbC5qcyIoKSB7CiAgICBQZW5Ub29sID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuNzA3IDIxLjI5M2ExIDEgMCAwIDEtMS40MTQgMGwtMS41ODYtMS41ODZhMSAxIDAgMCAxIDAtMS40MTRsNS41ODYtNS41ODZhMSAxIDAgMCAxIDEuNDE0IDBsMS41ODYgMS41ODZhMSAxIDAgMCAxIDAgMS40MTR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE4IDEzLTEuMzc1LTYuODc0YTEgMSAwIDAgMC0uNzQ2LS43NzZMMy4yMzUgMi4wMjhhMSAxIDAgMCAwLTEuMjA3IDEuMjA3TDUuMzUgMTUuODc5YTEgMSAwIDAgMCAuNzc2Ljc0NkwxMyAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjMgMi4zIDcuMjg2IDcuMjg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4uanMKdmFyIFBlbjsKdmFyIGluaXRfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW4uanMiKCkgewogICAgUGVuID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1saW5lLmpzCnZhciBQZW5jaWxMaW5lOwp2YXIgaW5pdF9wZW5jaWxfbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLWxpbmUuanMiKCkgewogICAgUGVuY2lsTGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC1vZmYuanMKdmFyIFBlbmNpbE9mZjsKdmFyIGluaXRfcGVuY2lsX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLW9mZi5qcyIoKSB7CiAgICBQZW5jaWxPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xMCAxMC02LjE1NyA2LjE2MmEyIDIgMCAwIDAtLjUuODMzbC0xLjMyMiA0LjM2YS41LjUgMCAwIDAgLjYyMi42MjRsNC4zNTgtMS4zMjNhMiAyIDAgMCAwIC44My0uNUwxNCAxMy45ODIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuODI5IDcuMTcyIDQuMzU5LTQuMzQ2YTEgMSAwIDEgMSAzLjk4NiAzLjk4NmwtNC4zNTMgNC4zNTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNSA0IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLXJ1bGVyLmpzCnZhciBQZW5jaWxSdWxlcjsKdmFyIGluaXRfcGVuY2lsX3J1bGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW5jaWwtcnVsZXIuanMiKCkgewogICAgUGVuY2lsUnVsZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA3IDguNyAyLjdhMi40MSAyLjQxIDAgMCAwLTMuNCAwTDIuNyA1LjNhMi40MSAyLjQxIDAgMCAwIDAgMy40TDcgMTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNiAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTEgNC4zIDQuM2MuOTQuOTQuOTQgMi40NiAwIDMuNGwtMi42IDIuNmMtLjk0Ljk0LTIuNDYuOTQtMy40IDBMMTEgMTciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuMTc0IDYuODEyYTEgMSAwIDAgMC0zLjk4Ni0zLjk4N0wzLjg0MiAxNi4xNzRhMiAyIDAgMCAwLS41LjgzbC0xLjMyMSA0LjM1MmEuNS41IDAgMCAwIC42MjMuNjIybDQuMzUzLTEuMzJhMiAyIDAgMCAwIC44My0uNDk3eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC5qcwp2YXIgUGVuY2lsOwp2YXIgaW5pdF9wZW5jaWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlbmNpbC5qcyIoKSB7CiAgICBQZW5jaWwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4xNzQgNi44MTJhMSAxIDAgMCAwLTMuOTg2LTMuOTg3TDMuODQyIDE2LjE3NGEyIDIgMCAwIDAtLjUuODNsLTEuMzIxIDQuMzUyYS41LjUgMCAwIDAgLjYyMy42MjJsNC4zNTMtMS4zMmEyIDIgMCAwIDAgLjgzLS40OTd6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDUgNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanMKdmFyIFBlbnRhZ29uOwp2YXIgaW5pdF9wZW50YWdvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanMiKCkgewogICAgUGVudGFnb24gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC44MyAyLjM4YTIgMiAwIDAgMSAyLjM0IDBsOCA1Ljc0YTIgMiAwIDAgMSAuNzMgMi4yNWwtMy4wNCA5LjI2YTIgMiAwIDAgMS0xLjkgMS4zN0g3LjA0YTIgMiAwIDAgMS0xLjktMS4zN0wyLjEgMTAuMzdhMiAyIDAgMCAxIC43My0yLjI1eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlcmNlbnQuanMKdmFyIFBlcmNlbnQ7CnZhciBpbml0X3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BlcmNlbnQuanMiKCkgewogICAgUGVyY2VudCA9IFsKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICI1IiwgeTE6ICI1IiwgeTI6ICIxOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYuNSIsIGN5OiAiNi41IiwgcjogIjIuNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVyc29uLXN0YW5kaW5nLmpzCnZhciBQZXJzb25TdGFuZGluZzsKdmFyIGluaXRfcGVyc29uX3N0YW5kaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZXJzb24tc3RhbmRpbmcuanMiKCkgewogICAgUGVyc29uU3RhbmRpbmcgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAyMCAzLTYgMyA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgOCA2IDIgNi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waGlsaXBwaW5lLXBlc28uanMKdmFyIFBoaWxpcHBpbmVQZXNvOwp2YXIgaW5pdF9waGlsaXBwaW5lX3Blc28gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BoaWxpcHBpbmUtcGVzby5qcyIoKSB7CiAgICBQaGlsaXBwaW5lUGVzbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDExSDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgN0g0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFWNGExIDEgMCAwIDEgMS0xaDRhMSAxIDAgMCAxIDAgMTJINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWZvcndhcmRlZC5qcwp2YXIgUGhvbmVGb3J3YXJkZWQ7CnZhciBpbml0X3Bob25lX2ZvcndhcmRlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtZm9yd2FyZGVkLmpzIigpIHsKICAgIFBob25lRm9yd2FyZGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIgNCA0LTQgNCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy44MzIgMTYuNTY4YTEgMSAwIDAgMCAxLjIxMy0uMzAzbC4zNTUtLjQ2NUEyIDIgMCAwIDEgMTcgMTVoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLTIgMkExOCAxOCAwIDAgMSAyIDRhMiAyIDAgMCAxIDItMmgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtLjggMS42bC0uNDY4LjM1MWExIDEgMCAwIDAtLjI5MiAxLjIzMyAxNCAxNCAwIDAgMCA2LjM5MiA2LjM4NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWNhbGwuanMKdmFyIFBob25lQ2FsbDsKdmFyIGluaXRfcGhvbmVfY2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtY2FsbC5qcyIoKSB7CiAgICBQaG9uZUNhbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyYTkgOSAwIDAgMSA5IDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNmE1IDUgMCAwIDEgNSA1IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtaW5jb21pbmcuanMKdmFyIFBob25lSW5jb21pbmc7CnZhciBpbml0X3Bob25lX2luY29taW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1pbmNvbWluZy5qcyIoKSB7CiAgICBQaG9uZUluY29taW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMnY2aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMi02IDYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1taXNzZWQuanMKdmFyIFBob25lTWlzc2VkOwp2YXIgaW5pdF9waG9uZV9taXNzZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW1pc3NlZC5qcyIoKSB7CiAgICBQaG9uZU1pc3NlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDIgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNiA2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb2ZmLmpzCnZhciBQaG9uZU9mZjsKdmFyIGluaXRfcGhvbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1vZmYuanMiKCkgewogICAgUGhvbmVPZmYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMC4xIDEzLjlhMTQgMTQgMCAwIDAgMy43MzIgMi42NjggMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyIDE4IDE4IDAgMCAxLTEyLjcyOC01LjI3MiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyIDIgMjIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNC43NiAxMy41ODJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgLjI0NC40NzMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS1vdXRnb2luZy5qcwp2YXIgUGhvbmVPdXRnb2luZzsKdmFyIGluaXRfcGhvbmVfb3V0Z29pbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLW91dGdvaW5nLmpzIigpIHsKICAgIFBob25lT3V0Z29pbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA4IDYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4VjJoLTYiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTMuODMyIDE2LjU2OGExIDEgMCAwIDAgMS4yMTMtLjMwM2wuMzU1LS40NjVBMiAyIDAgMCAxIDE3IDE1aDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0yIDJBMTggMTggMCAwIDEgMiA0YTIgMiAwIDAgMSAyLTJoM2EyIDIgMCAwIDEgMiAydjNhMiAyIDAgMCAxLS44IDEuNmwtLjQ2OC4zNTFhMSAxIDAgMCAwLS4yOTIgMS4yMzMgMTQgMTQgMCAwIDAgNi4zOTIgNi4zODQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qcwp2YXIgUGhvbmU7CnZhciBpbml0X3Bob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qcyIoKSB7CiAgICBQaG9uZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEzLjgzMiAxNi41NjhhMSAxIDAgMCAwIDEuMjEzLS4zMDNsLjM1NS0uNDY1QTIgMiAwIDAgMSAxNyAxNWgzYTIgMiAwIDAgMSAyIDJ2M2EyIDIgMCAwIDEtMiAyQTE4IDE4IDAgMCAxIDIgNGEyIDIgMCAwIDEgMi0yaDNhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS0uOCAxLjZsLS40NjguMzUxYTEgMSAwIDAgMC0uMjkyIDEuMjMzIDE0IDE0IDAgMCAwIDYuMzkyIDYuMzg0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGkuanMKdmFyIFBpOwp2YXIgaW5pdF9waSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGkuanMiKCkgewogICAgUGkgPSBbCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI0IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDdjMC0xLjcgMS4zLTMgMy0zaDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIwYy0xLjcgMC0zLTEuMy0zLTNWNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpYW5vLmpzCnZhciBQaWFubzsKdmFyIGluaXRfcGlhbm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpYW5vLmpzIigpIHsKICAgIFBpYW5vID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTguNSA4Yy0xLjQgMC0yLjYtLjgtMy4yLTJBNi44NyA2Ljg3IDAgMCAwIDIgOXYxMWEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTguNUMyMiA5LjYgMjAuNCA4IDE4LjUgOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTR2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTR2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY2theGUuanMKdmFyIFBpY2theGU7CnZhciBpbml0X3BpY2theGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY2theGUuanMiKCkgewogICAgUGlja2F4ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEzLTguMzgxIDguMzhhMSAxIDAgMCAxLTMuMDAxLTNMMTEgOS45OTkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuOTczIDQuMDI3QTEzIDEzIDAgMCAwIDUuOTAyIDIuMzczYy0xLjM5OC4zNDItMS4wOTIgMi4xNTguMjc3IDIuNjAxYTE5LjkgMTkuOSAwIDAgMSA1LjgyMiAzLjAyNCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi4wMDEgMTEuOTk5YTE5LjkgMTkuOSAwIDAgMSAzLjAyNCA1LjgyNGMuNDQ0IDEuMzY5IDIuMjYgMS42NzYgMi42MDMuMjc4QTEzIDEzIDAgMCAwIDIwIDguMDY5IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4LjM1MiAzLjM1MmExLjIwNSAxLjIwNSAwIDAgMC0xLjcwNCAwbC01LjI5NiA1LjI5NmExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0bDIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDEuNzA0IDBsNS4yOTYtNS4yOTZhMS4yMDUgMS4yMDUgMCAwIDAgMC0xLjcwNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUtMi5qcwp2YXIgUGljdHVyZUluUGljdHVyZTI7CnZhciBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUtMi5qcyIoKSB7CiAgICBQaWN0dXJlSW5QaWN0dXJlMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlWNmEyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMnYxMGMwIDEuMS45IDIgMiAyaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTAiLCBoZWlnaHQ6ICI3IiwgeDogIjEyIiwgeTogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLmpzCnZhciBQaWN0dXJlSW5QaWN0dXJlOwp2YXIgaW5pdF9waWN0dXJlX2luX3BpY3R1cmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpY3R1cmUtaW4tcGljdHVyZS5qcyIoKSB7CiAgICBQaWN0dXJlSW5QaWN0dXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMGg2VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiA0IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMFY3YTIgMiAwIDAgMC0yLTJoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYyYTIgMiAwIDAgMCAyIDJoMyIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjEyIiwgeTogIjE0Iiwgd2lkdGg6ICIxMCIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWdneS1iYW5rLmpzCnZhciBQaWdneUJhbms7CnZhciBpbml0X3BpZ2d5X2JhbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpZ2d5LWJhbmsuanMiKCkgewogICAgUGlnZ3lCYW5rID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTdoM3YyYTEgMSAwIDAgMCAxIDFoMmExIDEgMCAwIDAgMS0xdi0zYTMuMTYgMy4xNiAwIDAgMCAyLTJoMWExIDEgMCAwIDAgMS0xdi0yYTEgMSAwIDAgMC0xLTFoLTFhNSA1IDAgMCAwLTItNFYzYTQgNCAwIDAgMC0zLjIgMS42bC0uMy40SDExYTYgNiAwIDAgMC02IDZ2MWE1IDUgMCAwIDAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDh2MWEyIDIgMCAwIDAgMiAyaDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LWxlZnQuanMKdmFyIFBpbGNyb3dMZWZ0Owp2YXIgaW5pdF9waWxjcm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctbGVmdC5qcyIoKSB7CiAgICBQaWxjcm93TGVmdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDN2MTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOWgtM2EzIDMgMCAwIDEgMC02aDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggM3YxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOEgybDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDIyLTQtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3ctcmlnaHQuanMKdmFyIFBpbGNyb3dSaWdodDsKdmFyIGluaXRfcGlsY3Jvd19yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1yaWdodC5qcyIoKSB7CiAgICBQaWxjcm93UmlnaHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAzdjExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDlIN2ExIDEgMCAwIDEgMC02aDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM3YxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxNCA0IDRIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxOC00IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LmpzCnZhciBQaWxjcm93Owp2YXIgaW5pdF9waWxjcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxjcm93LmpzIigpIHsKICAgIFBpbGNyb3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNEg5LjVhNC41IDQuNSAwIDAgMCAwIDlIMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLWJvdHRsZS5qcwp2YXIgUGlsbEJvdHRsZTsKdmFyIGluaXRfcGlsbF9ib3R0bGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGwtYm90dGxlLmpzIigpIHsKICAgIFBpbGxCb3R0bGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMWgtNGExIDEgMCAwIDAtMSAxdjVhMSAxIDAgMCAwIDEgMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgN3YxM2EyIDIgMCAwIDAgMiAyaDhhMiAyIDAgMCAwIDItMlY3IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE2IiwgaGVpZ2h0OiAiNSIsIHg6ICI0IiwgeTogIjIiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLmpzCnZhciBQaWxsOwp2YXIgaW5pdF9waWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLmpzIigpIHsKICAgIFBpbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMC41IDIwLjUgMTAtMTBhNC45NSA0Ljk1IDAgMSAwLTctN2wtMTAgMTBhNC45NSA0Ljk1IDAgMSAwIDcgN1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDguNSA3IDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9waW4tb2ZmLmpzCnZhciBQaW5PZmY7CnZhciBpbml0X3Bpbl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bpbi1vZmYuanMiKCkgewogICAgUGluT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA5LjM0VjdhMSAxIDAgMCAxIDEtMSAyIDIgMCAwIDAgMC00SDcuODkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOXYxLjc2YTIgMiAwIDAgMS0xLjExIDEuNzlsLTEuNzguOUEyIDIgMCAwIDAgNSAxNS4yNFYxNmExIDEgMCAwIDAgMSAxaDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzCnZhciBQaW47CnZhciBpbml0X3BpbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzIigpIHsKICAgIFBpbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOSAxMC43NmEyIDIgMCAwIDEtMS4xMSAxLjc5bC0xLjc4LjlBMiAyIDAgMCAwIDUgMTUuMjRWMTZhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xdi0uNzZhMiAyIDAgMCAwLTEuMTEtMS43OWwtMS43OC0uOUEyIDIgMCAwIDEgMTUgMTAuNzZWN2ExIDEgMCAwIDEgMS0xIDIgMiAwIDAgMCAwLTRIOGEyIDIgMCAwIDAgMCA0IDEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qcwp2YXIgUGlwZXR0ZTsKdmFyIGluaXRfcGlwZXR0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qcyIoKSB7CiAgICBQaXBldHRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgOS04LjQxNCA4LjQxNEEyIDIgMCAwIDAgMyAxOC44Mjh2MS4zNDRhMiAyIDAgMCAxLS41ODYgMS40MTRBMiAyIDAgMCAxIDMuODI4IDIxaDEuMzQ0YTIgMiAwIDAgMCAxLjQxNC0uNTg2TDE1IDEyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDkgLjQuNGExIDEgMCAxIDEtMyAzbC0zLjgtMy44YTEgMSAwIDEgMSAzLTNsLjQuNCAzLjQtMy40YTEgMSAwIDEgMSAzIDN6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgLjQxNC0uNDE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGl6emEuanMKdmFyIFBpenphOwp2YXIgaW5pdF9waXp6YSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGl6emEuanMiKCkgewogICAgUGl6emEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNC0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNzUgMTguMjUtMS4yNSAxLjQyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljc3NSA1LjY1NGExNS42OCAxNS42OCAwIDAgMC0xMi4xMjEgMTIuMTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguOCA5LjNhMSAxIDAgMCAwIDIuMSA3LjciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjEuOTY0IDIwLjczMmExIDEgMCAwIDEtMS4yMzIgMS4yMzJsLTE4LTVhMSAxIDAgMCAxLS42OTUtMS4yMzJBMTkuNjggMTkuNjggMCAwIDEgMTUuNzMyIDIuMDM3YTEgMSAwIDAgMSAxLjIzMi42OTV6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGxhbmUtbGFuZGluZy5qcwp2YXIgUGxhbmVMYW5kaW5nOwp2YXIgaW5pdF9wbGFuZV9sYW5kaW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS1sYW5kaW5nLmpzIigpIHsKICAgIFBsYW5lTGFuZGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjJoMjAiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy43NyAxMC43NyAyIDlsMi00LjUgMS4xLjU1Yy41NS4yOC45Ljg0LjkgMS40NXMuMzUgMS4xNy45IDEuNDVMOCA4LjVsMy02IDEuMDUuNTNhMiAyIDAgMCAxIDEuMDkgMS41MmwuNzIgNS40YTIgMiAwIDAgMCAxLjA5IDEuNTJsNC40IDIuMmMuNDIuMjIuNzguNTUgMS4wMS45NmwuNiAxLjAzYy40OS44OC0uMDYgMS45OC0xLjA2IDIuMWwtMS4xOC4xNWMtLjQ3LjA2LS45NS0uMDItMS4zNy0uMjRMNC4yOSAxMS4xNWEyIDIgMCAwIDEtLjUyLS4zOFoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS10YWtlb2ZmLmpzCnZhciBQbGFuZVRha2VvZmY7CnZhciBpbml0X3BsYW5lX3Rha2VvZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLXRha2VvZmYuanMiKCkgewogICAgUGxhbmVUYWtlb2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMmgyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjM2IDE3LjQgNCAxN2wtMi00IDEuMS0uNTVhMiAyIDAgMCAxIDEuOCAwbC4xNy4xYTIgMiAwIDAgMCAxLjggMEw4IDEyIDUgNmwuOS0uNDVhMiAyIDAgMCAxIDIuMDkuMmw0LjAyIDNhMiAyIDAgMCAwIDIuMS4ybDQuMTktMi4wNmEyLjQxIDIuNDEgMCAwIDEgMS43My0uMTdMMjEgN2ExLjQgMS40IDAgMCAxIC44NyAxLjk5bC0uMzguNzZjLS4yMy40Ni0uNi44NC0xLjA3IDEuMDhMNy41OCAxNy4yYTIgMiAwIDAgMS0xLjIyLjE4WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLmpzCnZhciBQbGFuZTsKdmFyIGluaXRfcGxhbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLmpzIigpIHsKICAgIFBsYW5lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuOCAxOS4yIDE2IDExbDMuNS0zLjVDMjEgNiAyMS41IDQgMjEgM2MtMS0uNS0zIDAtNC41IDEuNUwxMyA4IDQuOCA2LjJjLS41LS4xLS45LjEtMS4xLjVsLS4zLjVjLS4yLjUtLjEgMSAuMyAxLjNMOSAxMmwtMiAzSDRsLTEgMSAzIDIgMiAzIDEtMXYtM2wzLTIgMy41IDUuM2MuMy40LjguNSAxLjMuM2wuNS0uMmMuNC0uMy42LS43LjUtMS4yeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanMKdmFyIFBsYXk7CnZhciBpbml0X3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanMiKCkgewogICAgUGxheSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNSA1YTIgMiAwIDAgMSAzLjAwOC0xLjcyOGwxMS45OTcgNi45OThhMiAyIDAgMCAxIC4wMDMgMy40NThsLTEyIDdBMiAyIDAgMCAxIDUgMTl6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWctMi5qcwp2YXIgUGx1ZzI7CnZhciBpbml0X3BsdWdfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy0yLmpzIigpIHsKICAgIFBsdWcyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAydjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA4aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFWOGgxMnYzYTYgNiAwIDEgMS0xMiAwWiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWctemFwLmpzCnZhciBQbHVnWmFwOwp2YXIgaW5pdF9wbHVnX3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcGx1Zy16YXAuanMiKCkgewogICAgUGx1Z1phcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMyAyMC4zYTIuNCAyLjQgMCAwIDAgMy40IDBMMTIgMThsLTYtNi0yLjMgMi4zYTIuNCAyLjQgMCAwIDAgMCAzLjRaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMjIgMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuNSAxMy41IDEwIDExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTYuNSAxMyAxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAzLTQgNGg2bC00IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLmpzCnZhciBQbHVnOwp2YXIgaW5pdF9wbHVnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLmpzIigpIHsKICAgIFBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOGExIDEgMCAwIDEgMSAxdjRhNCA0IDAgMCAxLTQgNGgtNGE0IDQgMCAwIDEtNC00VjlhMSAxIDAgMCAxIDEtMXoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA4VjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzCnZhciBQbHVzOwp2YXIgaW5pdF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzIigpIHsKICAgIFBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyaDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDV2MTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQta25pZmUuanMKdmFyIFBvY2tldEtuaWZlOwp2YXIgaW5pdF9wb2NrZXRfa25pZmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvY2tldC1rbmlmZS5qcyIoKSB7CiAgICBQb2NrZXRLbmlmZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMnYxYzAgMSAyIDEgMiAyUzMgNiAzIDdzMiAxIDIgMi0yIDEtMiAyIDIgMSAyIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuODMgOC44M2E0IDQgMCAwIDAtNS42Ni01LjY2bC0xMiAxMmE0IDQgMCAxIDAgNS42NiA1LjY2WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMS42NlYyMmE0IDQgMCAwIDAgNC00VjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQuanMKdmFyIFBvY2tldDsKdmFyIGluaXRfcG9ja2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2NrZXQuanMiKCkgewogICAgUG9ja2V0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgM2EyIDIgMCAwIDEgMiAydjZhMSAxIDAgMCAxLTIwIDBWNWEyIDIgMCAwIDEgMi0yeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDEwIDQgNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2RjYXN0LmpzCnZhciBQb2RjYXN0Owp2YXIgaW5pdF9wb2RjYXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2RjYXN0LmpzIigpIHsKICAgIFBvZGNhc3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxN2ExIDEgMCAxIDAtMiAwbC41IDQuNWEwLjUgMC41IDAgMCAwIDEgMHoiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2Ljg1IDE4LjU4YTkgOSAwIDEgMC05LjcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0YTUgNSAwIDEgMSA4IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByOiAiMSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLW9mZi5qcwp2YXIgUG9pbnRlck9mZjsKdmFyIGluaXRfcG9pbnRlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvaW50ZXItb2ZmLmpzIigpIHsKICAgIFBvaW50ZXJPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0LjVWNGEyIDIgMCAwIDAtMi40MS0xLjk1NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy45IDguNGEyIDIgMCAwIDAtMS4yNi0xLjI5NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS43IDE2LjJBOCA4IDAgMCAwIDIyIDE0di0zYTIgMiAwIDEgMC00IDB2LTFhMiAyIDAgMCAwLTMuNjMtMS4xNTgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIm03IDE1LTEuOC0xLjhhMiAyIDAgMCAwLTIuNzkgMi44Nkw2IDE5LjdhNy43NCA3Ljc0IDAgMCAwIDYgMi4zaDJhOCA4IDAgMCAwIDUuNjU3LTIuMzQzIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDZ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLmpzCnZhciBQb2ludGVyOwp2YXIgaW5pdF9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb2ludGVyLmpzIigpIHsKICAgIFBvaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNGE4IDggMCAwIDEtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExdi0xYTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMFY5YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDkuNVY0YTIgMiAwIDAgMC0yLTJhMiAyIDAgMCAwLTIgMnYxMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCAxMWEyIDIgMCAxIDEgNCAwdjNhOCA4IDAgMCAxLTggOGgtMmMtMi44IDAtNC41LS44Ni01Ljk5LTIuMzRsLTMuNi0zLjZhMiAyIDAgMCAxIDIuODMtMi44Mkw3IDE1IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wY29ybi5qcwp2YXIgUG9wY29ybjsKdmFyIGluaXRfcG9wY29ybiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wY29ybi5qcyIoKSB7CiAgICBQb3Bjb3JuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOGEyIDIgMCAwIDAgMC00IDIgMiAwIDAgMC00IDAgMiAyIDAgMCAwLTQgMCAyIDIgMCAwIDAtNCAwIDIgMiAwIDAgMCAwIDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjIgOSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIyIDEtMTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgOGMuNSAwIC45LjQuOCAxbC0yLjYgMTJjLS4xLjUtLjcgMS0xLjIgMUg3Yy0uNiAwLTEuMS0uNC0xLjItMUwzLjIgOWMtLjEtLjYuMy0xIC44LTFaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wc2ljbGUuanMKdmFyIFBvcHNpY2xlOwp2YXIgaW5pdF9wb3BzaWNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9wc2ljbGUuanMiKCkgewogICAgUG9wc2ljbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTE4LjYgMTQuNGMuOC0uOC44LTIgMC0yLjhsLTguMS04LjFhNC45NSA0Ljk1IDAgMSAwLTcuMSA3LjFsOC4xIDguMWMuOS43IDIuMS43IDIuOS0uMVoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDIyLTUuNS01LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3VuZC1zdGVybGluZy5qcwp2YXIgUG91bmRTdGVybGluZzsKdmFyIGluaXRfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvdW5kLXN0ZXJsaW5nLmpzIigpIHsKICAgIFBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCA3YzAtNS4zMzMtOC01LjMzMy04IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgN3YxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIxaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3dlci1vZmYuanMKdmFyIFBvd2VyT2ZmOwp2YXIgaW5pdF9wb3dlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLW9mZi5qcyIoKSB7CiAgICBQb3dlck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjM2IDYuNjRBOSA5IDAgMCAxIDIwLjc3IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMTYgNi4xNmE5IDkgMCAxIDAgMTIuNjggMTIuNjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLmpzCnZhciBQb3dlcjsKdmFyIGluaXRfcG93ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bvd2VyLmpzIigpIHsKICAgIFBvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOC40IDYuNmE5IDkgMCAxIDEtMTIuNzcuMDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanMKdmFyIFByZXNlbnRhdGlvbjsKdmFyIGluaXRfcHJlc2VudGF0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanMiKCkgewogICAgUHJlc2VudGF0aW9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAzaDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2MTFhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm03IDIxIDUtNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzCnZhciBQcmludGVyOwp2YXIgaW5pdF9wcmludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzIigpIHsKICAgIFByaW50ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4SDRhMiAyIDAgMCAxLTItMnYtNWEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NWEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNiIsIHk6ICIxNCIsIHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICI4Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJpbnRlci1jaGVjay5qcwp2YXIgUHJpbnRlckNoZWNrOwp2YXIgaW5pdF9wcmludGVyX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLWNoZWNrLmpzIigpIHsKICAgIFByaW50ZXJDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjUgMjJIN2ExIDEgMCAwIDEtMS0xdi02YTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXYuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThINGEyIDIgMCAwIDEtMi0ydi01YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOVYzYTEgMSAwIDAgMSAxLTFoMTBhMSAxIDAgMCAxIDEgMXY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJvamVjdG9yLmpzCnZhciBQcm9qZWN0b3I7CnZhciBpbml0X3Byb2plY3RvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJvamVjdG9yLmpzIigpIHsKICAgIFByb2plY3RvciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNyAzIDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA2VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgNyAyLTIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMyIsIHI6ICIzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMTEuODMgMTJIMjBhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi00YTIgMiAwIDAgMSAyLTJoMi4xNyIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzCnZhciBQcm9wb3J0aW9uczsKdmFyIGluaXRfcHJvcG9ydGlvbnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzIigpIHsKICAgIFByb3BvcnRpb25zID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXYxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloMTNhMiAyIDAgMCAxIDIgMnY5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzCnZhciBQdXp6bGU7CnZhciBpbml0X3B1enpsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzIigpIHsKICAgIFB1enpsZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjM5IDQuMzlhMSAxIDAgMCAwIDEuNjgtLjQ3NCAyLjUgMi41IDAgMSAxIDMuMDE0IDMuMDE1IDEgMSAwIDAgMC0uNDc0IDEuNjhsMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMCAzLjQxNEwxOS42MSAxNS4zOWExIDEgMCAwIDEtMS42OC0uNDc0IDIuNSAyLjUgMCAxIDAtMy4wMTQgMy4wMTUgMSAxIDAgMCAxIC40NzQgMS42OGwtMS42ODMgMS42ODJhMi40MTQgMi40MTQgMCAwIDEtMy40MTQgMEw4LjYxIDE5LjYxYTEgMSAwIDAgMC0xLjY4LjQ3NCAyLjUgMi41IDAgMSAxLTMuMDE0LTMuMDE1IDEgMSAwIDAgMCAuNDc0LTEuNjhsLTEuNjgzLTEuNjgyYTIuNDE0IDIuNDE0IDAgMCAxIDAtMy40MTRMNC4zOSA4LjYxYTEgMSAwIDAgMSAxLjY4LjQ3NCAyLjUgMi41IDAgMSAwIDMuMDE0LTMuMDE1IDEgMSAwIDAgMS0uNDc0LTEuNjhsMS42ODMtMS42ODJhMi40MTQgMi40MTQgMCAwIDEgMy40MTQgMHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9weXJhbWlkLmpzCnZhciBQeXJhbWlkOwp2YXIgaW5pdF9weXJhbWlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9weXJhbWlkLmpzIigpIHsKICAgIFB5cmFtaWQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTYuODhhMSAxIDAgMCAxLS4zMi0xLjQzbDktMTMuMDJhMSAxIDAgMCAxIDEuNjQgMGw5IDEzLjAxYTEgMSAwIDAgMS0uMzIgMS40NGwtOC41MSA0Ljg2YTIgMiAwIDAgMS0xLjk4IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9xci1jb2RlLmpzCnZhciBRckNvZGU7CnZhciBpbml0X3FyX2NvZGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3FyLWNvZGUuanMiKCkgewogICAgUXJDb2RlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1IiwgeDogIjE2IiwgeTogIjMiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCB4OiAiMyIsIHk6ICIxNiIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNmgtM2EyIDIgMCAwIDAtMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjF2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2M2EyIDIgMCAwIDEtMiAySDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJ2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIxdi0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcXVvdGUuanMKdmFyIFF1b3RlOwp2YXIgaW5pdF9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcXVvdGUuanMiKCkgewogICAgUXVvdGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiAzYTIgMiAwIDAgMC0yIDJ2NmEyIDIgMCAwIDAgMiAyIDEgMSAwIDAgMSAxIDF2MWEyIDIgMCAwIDEtMiAyIDEgMSAwIDAgMC0xIDF2MmExIDEgMCAwIDAgMSAxIDYgNiAwIDAgMCA2LTZWNWEyIDIgMCAwIDAtMi0yeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDNhMiAyIDAgMCAwLTIgMnY2YTIgMiAwIDAgMCAyIDIgMSAxIDAgMCAxIDEgMXYxYTIgMiAwIDAgMS0yIDIgMSAxIDAgMCAwLTEgMXYyYTEgMSAwIDAgMCAxIDEgNiA2IDAgMCAwIDYtNlY1YTIgMiAwIDAgMC0yLTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFiYml0LmpzCnZhciBSYWJiaXQ7CnZhciBpbml0X3JhYmJpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFiYml0LmpzIigpIHsKICAgIFJhYmJpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE2YTMgMyAwIDAgMSAyLjI0IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDIxaC04YTQgNCAwIDAgMS00LTQgNyA3IDAgMCAxIDctN2guMkw5LjYgNi40YTEgMSAwIDEgMSAyLjgtMi44TDE1LjggN2guMmMzLjMgMCA2IDIuNyA2IDZ2MWEyIDIgMCAwIDEtMiAyaC0xYTMgMyAwIDAgMC0zIDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOC41NFY0YTIgMiAwIDEgMC00IDB2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjYxMiAxMi41MjRhMyAzIDAgMSAwLTEuNiA0LjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRhci5qcwp2YXIgUmFkYXI7CnZhciBpbml0X3JhZGFyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRhci5qcyIoKSB7CiAgICBSYWRhciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjA3IDQuOTNBMTAgMTAgMCAwIDAgNi45OSAzLjM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMi4yOSA5LjYyQTEwIDEwIDAgMSAwIDIxLjMxIDguMzUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMjQgNy43NkE2IDYgMCAxIDAgOC4yMyAxNi42NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTkgMTEuNjZBNiA2IDAgMCAxIDE1Ljc3IDE2LjY3IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNDEgMTAuNTkgNS42Ni01LjY2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzCnZhciBSYWRpYXRpb247CnZhciBpbml0X3JhZGlhdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzIigpIHsKICAgIFJhZGlhdGlvbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEyaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNS40NjQxYTQgNCAwIDAgMS00IDBMNy41Mjc4NiAxOS43NDU5NyBBIDEgMSAwIDAgMCA3Ljk5MzAzIDIxLjE2MjExIDEwIDEwIDAgMCAwIDE2LjAwNjk3IDIxLjE2MjExIDEgMSAwIDAgMCAxNi40NzIxNCAxOS43NDU5N3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTItMy40NjRsMi40NzItNC4yODJhMSAxIDAgMCAxIDEuNDYtLjMwNSAxMCAxMCAwIDAgMSA0LjAwNiA2Ljk0QTEgMSAwIDAgMSAyMSAxMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNOCAxMmE0IDQgMCAwIDEgMi0zLjQ2NEw3LjUyOCA0LjI1NGExIDEgMCAwIDAtMS40Ni0uMzA1IDEwIDEwIDAgMCAwLTQuMDA2IDYuOTRBMSAxIDAgMCAwIDMgMTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qcwp2YXIgUmFkaWNhbDsKdmFyIGluaXRfcmFkaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qcyIoKSB7CiAgICBSYWRpY2FsID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAxMmgzLjI4YTEgMSAwIDAgMSAuOTQ4LjY4NGwyLjI5OCA3LjkzNGEuNS41IDAgMCAwIC45Ni0uMDQ0TDEzLjgyIDQuNzcxQTEgMSAwIDAgMSAxNC43OTIgNEgyMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlvLXJlY2VpdmVyLmpzCnZhciBSYWRpb1JlY2VpdmVyOwp2YXIgaW5pdF9yYWRpb19yZWNlaXZlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tcmVjZWl2ZXIuanMiKCkgewogICAgUmFkaW9SZWNlaXZlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxNnYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjgiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tdG93ZXIuanMKdmFyIFJhZGlvVG93ZXI7CnZhciBpbml0X3JhZGlvX3Rvd2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpby10b3dlci5qcyIoKSB7CiAgICBSYWRpb1Rvd2VyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNC45IDE2LjFDMSAxMi4yIDEgNS44IDQuOSAxLjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy44IDQuN2E2LjE0IDYuMTQgMCAwIDAtLjggNy41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yIDQuOGMyIDIgMi4yNiA1LjExLjggNy40NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4xIDEuOWE5Ljk2IDkuOTYgMCAwIDEgMCAxNC4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuNSAxOGg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMjIgNC0xMSA0IDExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8uanMKdmFyIFJhZGlvOwp2YXIgaW5pdF9yYWRpbyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8uanMiKCkgewogICAgUmFkaW8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNi4yNDcgNy43NjFhNiA2IDAgMCAxIDAgOC40NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuMDc1IDQuOTMzYTEwIDEwIDAgMCAxIDAgMTQuMTM0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuOTI1IDE5LjA2N2ExMCAxMCAwIDAgMSAwLTE0LjEzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03Ljc1MyAxNi4yMzlhNiA2IDAgMCAxIDAtOC40NzgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qcwp2YXIgUmFkaXVzOwp2YXIgaW5pdF9yYWRpdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qcyIoKSB7CiAgICBSYWRpdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zNCAxNy41MmExMCAxMCAwIDEgMC0yLjgyIDIuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40MSAxMy40MSA0LjE4IDQuMTgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhaWwtc3ltYm9sLmpzCnZhciBSYWlsU3ltYm9sOwp2YXIgaW5pdF9yYWlsX3N5bWJvbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbC1zeW1ib2wuanMiKCkgewogICAgUmFpbFN5bWJvbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTVoMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSA5aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwLTUtNSA2LTYtNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qcwp2YXIgUmFpbmJvdzsKdmFyIGluaXRfcmFpbmJvdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qcyIoKSB7CiAgICBSYWluYm93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTdhMTAgMTAgMCAwIDAtMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE3YTYgNiAwIDAgMSAxMiAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE3YTIgMiAwIDAgMSA0IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXQuanMKdmFyIFJhdDsKdmFyIGluaXRfcmF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYXQuanMiKCkgewogICAgUmF0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjJINGEyIDIgMCAwIDEgMC00aDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjIzNiAxOGEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWguMDEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuODIgMy45NGEzIDMgMCAxIDEgMy4yMzcgNC44NjhsMS44MTUgMi41ODdhMS41IDEuNSAwIDAgMS0xLjUgMi4xbC0yLjg3Mi0uNDUzYTMgMyAwIDAgMC0zLjUgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA0Ljk4OGEzIDMgMCAxIDAtNS4yIDIuMDUyQTcgNyAwIDAgMCA0IDE0LjAxNSA0IDQgMCAwIDAgOCAxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzCnZhciBSYXRpbzsKdmFyIGluaXRfcmF0aW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzIigpIHsKICAgIFJhdGlvID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHg6ICI2IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWNlbnQuanMKdmFyIFJlY2VpcHRDZW50Owp2YXIgaW5pdF9yZWNlaXB0X2NlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtY2VudC5qcyIoKSB7CiAgICBSZWNlaXB0Q2VudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNi41djExIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDkuNGE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWV1cm8uanMKdmFyIFJlY2VpcHRFdXJvOwp2YXIgaW5pdF9yZWNlaXB0X2V1cm8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtZXVyby5qcyIoKSB7CiAgICBSZWNlaXB0RXVybyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDkuNWE0IDQgMCAxIDAgMCA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWluZGlhbi1ydXBlZS5qcwp2YXIgUmVjZWlwdEluZGlhblJ1cGVlOwp2YXIgaW5pdF9yZWNlaXB0X2luZGlhbl9ydXBlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1pbmRpYW4tcnVwZWUuanMiKCkgewogICAgUmVjZWlwdEluZGlhblJ1cGVlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDdoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNy41IDggMTVoMWE0IDQgMCAwIDAgMC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTFoOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtamFwYW5lc2UteWVuLmpzCnZhciBSZWNlaXB0SmFwYW5lc2VZZW47CnZhciBpbml0X3JlY2VpcHRfamFwYW5lc2VfeWVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWphcGFuZXNlLXllbi5qcyIoKSB7CiAgICBSZWNlaXB0SmFwYW5lc2VZZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDEwIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDcgMyAzdjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDExaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNWg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1wb3VuZC1zdGVybGluZy5qcwp2YXIgUmVjZWlwdFBvdW5kU3Rlcmxpbmc7CnZhciBpbml0X3JlY2VpcHRfcG91bmRfc3RlcmxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcG91bmQtc3RlcmxpbmcuanMiKCkgewogICAgUmVjZWlwdFBvdW5kU3RlcmxpbmcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDFaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTNoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxN1Y5LjVhMi41IDIuNSAwIDAgMSA1IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxN2g3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1ydXNzaWFuLXJ1YmxlLmpzCnZhciBSZWNlaXB0UnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcnVzc2lhbi1ydWJsZS5qcyIoKSB7CiAgICBSZWNlaXB0UnVzc2lhblJ1YmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1aDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMWg1YTIgMiAwIDEgMCAwLTRoLTN2MTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXN3aXNzLWZyYW5jLmpzCnZhciBSZWNlaXB0U3dpc3NGcmFuYzsKdmFyIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1zd2lzcy1mcmFuYy5qcyIoKSB7CiAgICBSZWNlaXB0U3dpc3NGcmFuYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMnYyMGwyLTEgMiAxIDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxVjJsLTIgMS0yLTEtMiAxLTItMS0yIDEtMi0xLTIgMVoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTdWN2g1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDExaDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10ZXh0LmpzCnZhciBSZWNlaXB0VGV4dDsKdmFyIGluaXRfcmVjZWlwdF90ZXh0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXRleHQuanMiKCkgewogICAgUmVjZWlwdFRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxNkg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDhIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgM2ExIDEgMCAwIDEgMS0xIDEuMyAxLjMgMCAwIDEgLjcuMmwuOTMzLjZhMS4zIDEuMyAwIDAgMCAxLjQgMGwuOTM0LS42YTEuMyAxLjMgMCAwIDEgMS40IDBsLjkzMy42YTEuMyAxLjMgMCAwIDAgMS40IDBsLjkzMy0uNmExLjMgMS4zIDAgMCAxIDEuNCAwbC45MzQuNmExLjMgMS4zIDAgMCAwIDEuNCAwbC45MzMtLjZBMS4zIDEuMyAwIDAgMSAxOSAyYTEgMSAwIDAgMSAxIDF2MThhMSAxIDAgMCAxLTEgMSAxLjMgMS4zIDAgMCAxLS43LS4ybC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzQuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTMzLS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLTEuNCAwbC0uOTM0LS42YTEuMyAxLjMgMCAwIDAtMS40IDBsLS45MzMuNmExLjMgMS4zIDAgMCAxLS43LjIgMSAxIDAgMCAxLTEtMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXR1cmtpc2gtbGlyYS5qcwp2YXIgUmVjZWlwdFR1cmtpc2hMaXJhOwp2YXIgaW5pdF9yZWNlaXB0X3R1cmtpc2hfbGlyYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10dXJraXNoLWxpcmEuanMiKCkgewogICAgUmVjZWlwdFR1cmtpc2hMaXJhID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgNi41djExYTUuNSA1LjUgMCAwIDAgNS41LTUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA4LTYgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDJ2MjBsMi0xIDIgMSAyLTEgMiAxIDItMSAyIDEgMi0xIDIgMVYybC0yIDEtMi0xLTIgMS0yLTEtMiAxLTItMS0yIDF6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC5qcwp2YXIgUmVjZWlwdDsKdmFyIGluaXRfcmVjZWlwdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC5qcyIoKSB7CiAgICBSZWNlaXB0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAydjIwbDItMSAyIDEgMi0xIDIgMSAyLTEgMiAxIDItMSAyIDFWMmwtMiAxLTItMS0yIDEtMi0xLTIgMS0yLTEtMiAxWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4aC02YTIgMiAwIDEgMCAwIDRoNGEyIDIgMCAxIDEgMCA0SDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTcuNXYtMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtY2lyY2xlLmpzCnZhciBSZWN0YW5nbGVDaXJjbGU7CnZhciBpbml0X3JlY3RhbmdsZV9jaXJjbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1jaXJjbGUuanMiKCkgewogICAgUmVjdGFuZ2xlQ2lyY2xlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNkgzYTEgMSAwIDAgMS0xLTFWNWExIDEgMCAwIDEgMS0xeiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE0IiwgY3k6ICIxMiIsIHI6ICI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWVsbGlwc2lzLmpzCnZhciBSZWN0YW5nbGVFbGxpcHNpczsKdmFyIGluaXRfcmVjdGFuZ2xlX2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZWxsaXBzaXMuanMiKCkgewogICAgUmVjdGFuZ2xlRWxsaXBzaXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWdvZ2dsZXMuanMKdmFyIFJlY3RhbmdsZUdvZ2dsZXM7CnZhciBpbml0X3JlY3RhbmdsZV9nb2dnbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtZ29nZ2xlcy5qcyIoKSB7CiAgICBSZWN0YW5nbGVHb2dnbGVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgNmEyIDIgMCAwIDEgMiAydjhhMiAyIDAgMCAxLTIgMmgtNGEyIDIgMCAwIDEtMS42LS44bC0xLjYtMi4xM2ExIDEgMCAwIDAtMS42IDBMOS42IDE3LjJBMiAyIDAgMCAxIDggMThINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtaG9yaXpvbnRhbC5qcwp2YXIgUmVjdGFuZ2xlSG9yaXpvbnRhbDsKdmFyIGluaXRfcmVjdGFuZ2xlX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1ob3Jpem9udGFsLmpzIigpIHsKICAgIFJlY3RhbmdsZUhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEyIiwgeDogIjIiLCB5OiAiNiIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS12ZXJ0aWNhbC5qcwp2YXIgUmVjdGFuZ2xlVmVydGljYWw7CnZhciBpbml0X3JlY3RhbmdsZV92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLXZlcnRpY2FsLmpzIigpIHsKICAgIFJlY3RhbmdsZVZlcnRpY2FsID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTIiLCBoZWlnaHQ6ICIyMCIsIHg6ICI2IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzCnZhciBSZWN5Y2xlOwp2YXIgaW5pdF9yZWN5Y2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzIigpIHsKICAgIFJlY3ljbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE5SDQuODE1YTEuODMgMS44MyAwIDAgMS0xLjU3LS44ODEgMS43ODUgMS43ODUgMCAwIDEtLjAwNC0xLjc4NEw3LjE5NiA5LjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTloOC4yMDNhMS44MyAxLjgzIDAgMCAwIDEuNTU2LS44OSAxLjc4NCAxLjc4NCAwIDAgMCAwLTEuNzc1bC0xLjIyNi0yLjEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTMgMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC4yOTMgMTMuNTk2IDcuMTk2IDkuNSAzLjEgMTAuNTk4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTkuMzQ0IDUuODExIDEuMDkzLTEuODkyQTEuODMgMS44MyAwIDAgMSAxMS45ODUgM2ExLjc4NCAxLjc4NCAwIDAgMSAxLjU0Ni44ODhsMy45NDMgNi44NDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuMzc4IDkuNjMzIDQuMDk2IDEuMDk4IDEuMDk3LTQuMDk2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby0yLmpzCnZhciBSZWRvMjsKdmFyIGluaXRfcmVkb18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLTIuanMiKCkgewogICAgUmVkbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxNCA1LTUtNS01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlIOS41QTUuNSA1LjUgMCAwIDAgNCAxNC41QTUuNSA1LjUgMCAwIDAgOS41IDIwSDEzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby1kb3QuanMKdmFyIFJlZG9Eb3Q7CnZhciBpbml0X3JlZG9fZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLWRvdC5qcyIoKSB7CiAgICBSZWRvRG90ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTciLCByOiAiMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA3djZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxN2E5IDkgMCAwIDEgOS05IDkgOSAwIDAgMSA2IDIuM2wzIDIuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8uanMKdmFyIFJlZG87CnZhciBpbml0X3JlZG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZG8uanMiKCkgewogICAgUmVkbyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDd2NmgtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE3YTkgOSAwIDAgMSA5LTkgOSA5IDAgMCAxIDYgMi4zbDMgMi43IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3ctZG90LmpzCnZhciBSZWZyZXNoQ2N3RG90Owp2YXIgaW5pdF9yZWZyZXNoX2Njd19kb3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY2N3LWRvdC5qcyIoKSB7CiAgICBSZWZyZXNoQ2N3RG90ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMCAwIDkgOSA5Ljc1IDkuNzUgMCAwIDAgNi43NC0yLjc0TDIxIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDV2NSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3cuanMKdmFyIFJlZnJlc2hDY3c7CnZhciBpbml0X3JlZnJlc2hfY2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWNjdy5qcyIoKSB7CiAgICBSZWZyZXNoQ2N3ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJhOSA5IDAgMCAwLTktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMCAwIDkgOSA5Ljc1IDkuNzUgMCAwIDAgNi43NC0yLjc0TDIxIDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2aDV2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3ctb2ZmLmpzCnZhciBSZWZyZXNoQ3dPZmY7CnZhciBpbml0X3JlZnJlc2hfY3dfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWN3LW9mZi5qcyIoKSB7CiAgICBSZWZyZXNoQ3dPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA4TDE4Ljc0IDUuNzRBOS43NSA5Ljc1IDAgMCAwIDEyIDNDMTEgMyAxMC4wMyAzLjE2IDkuMTMgMy40NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyQzMgOS41MSA0IDcuMjYgNS42NCA1LjY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMgMTYgMi4yNiAyLjI2QTkuNzUgOS43NSAwIDAgMCAxMiAyMWMyLjQ5IDAgNC43NC0xIDYuMzYtMi42NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmMwIDEtLjE2IDEuOTctLjQ3IDIuODciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3Y1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIyIDIgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3cuanMKdmFyIFJlZnJlc2hDdzsKdmFyIGluaXRfcmVmcmVzaF9jdyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jdy5qcyIoKSB7CiAgICBSZWZyZXNoQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDAgMSA5LTkgOS43NSA5Ljc1IDAgMCAxIDYuNzQgMi43NEwyMSA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDN2NWgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAwIDEtOSA5IDkuNzUgOS43NSAwIDAgMS02Ljc0LTIuNzRMMyAxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2SDN2NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJpZ2VyYXRvci5qcwp2YXIgUmVmcmlnZXJhdG9yOwp2YXIgaW5pdF9yZWZyaWdlcmF0b3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJpZ2VyYXRvci5qcyIoKSB7CiAgICBSZWZyaWdlcmF0b3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDZhNCA0IDAgMCAxIDQtNGg2YTQgNCAwIDAgMSA0IDR2MTRhMiAyIDAgMCAxLTIgMkg3YTIgMiAwIDAgMS0yLTJWNloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMGgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA3djYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qcwp2YXIgUmVnZXg7CnZhciBpbml0X3JlZ2V4ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qcyIoKSB7CiAgICBSZWdleCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDN2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIuNjcgNS41IDguNjYgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMi42NyAxMC41IDguNjYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE3YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjJhMiAyIDAgMCAwIDIgMmgyYTIgMiAwIDAgMCAyLTJ2LTJ6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVtb3ZlLWZvcm1hdHRpbmcuanMKdmFyIFJlbW92ZUZvcm1hdHRpbmc7CnZhciBpbml0X3JlbW92ZV9mb3JtYXR0aW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZW1vdmUtZm9ybWF0dGluZy5qcyIoKSB7CiAgICBSZW1vdmVGb3JtYXR0aW5nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjRoMTZ2MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIwaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNCA4IDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMCAxNS01IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMS5qcwp2YXIgUmVwZWF0MTsKdmFyIGluaXRfcmVwZWF0XzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC0xLmpzIigpIHsKICAgIFJlcGVhdDEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxMGgxdjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMi5qcwp2YXIgUmVwZWF0MjsKdmFyIGluaXRfcmVwZWF0XzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC0yLmpzIigpIHsKICAgIFJlcGVhdDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDkgMy0zIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxOEg3YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMiAxNS0zIDMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDZoNmEyIDIgMCAwIDEgMiAydjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwZWF0LmpzCnZhciBSZXBlYXQ7CnZhciBpbml0X3JlcGVhdDQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC5qcyIoKSB7CiAgICBSZXBlYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyIDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMXYtMWE0IDQgMCAwIDEgNC00aDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMjItNC00IDQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxM3YxYTQgNCAwIDAgMS00IDRIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGxhY2UtYWxsLmpzCnZhciBSZXBsYWNlQWxsOwp2YXIgaW5pdF9yZXBsYWNlX2FsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS1hbGwuanMiKCkgewogICAgUmVwbGFjZUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDRhMSAxIDAgMCAxIDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMGExIDEgMCAwIDEtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0YTEgMSAwIDAgMSAxIDF2NWExIDEgMCAwIDEtMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRhMSAxIDAgMCAwLTEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5YTEgMSAwIDAgMS0xIDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyA3IDMgMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMFY1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qcwp2YXIgUmVwbGFjZTsKdmFyIGluaXRfcmVwbGFjZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qcyIoKSB7CiAgICBSZXBsYWNlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNGExIDEgMCAwIDEgMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEwYTEgMSAwIDAgMS0xLTEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNGExIDEgMCAwIDAtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDlhMSAxIDAgMCAxLTEgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDcgMyAzIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIxNCIsIHdpZHRoOiAiNyIsIGhlaWdodDogIjciLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBseS1hbGwuanMKdmFyIFJlcGx5QWxsOwp2YXIgaW5pdF9yZXBseV9hbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LWFsbC5qcyIoKSB7CiAgICBSZXBseUFsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE3LTUtNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTh2LTJhNCA0IDAgMCAwLTQtNEg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcgMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzCnZhciBSZXBseTsKdmFyIGluaXRfcmVwbHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzIigpIHsKICAgIFJlcGx5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2LTJhNCA0IDAgMCAwLTQtNEg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTctNS01IDUtNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jld2luZC5qcwp2YXIgUmV3aW5kOwp2YXIgaW5pdF9yZXdpbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jld2luZC5qcyIoKSB7CiAgICBSZXdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2YTIgMiAwIDAgMC0zLjQxNC0xLjQxNGwtNiA2YTIgMiAwIDAgMCAwIDIuODI4bDYgNkEyIDIgMCAwIDAgMTIgMTh6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDZhMiAyIDAgMCAwLTMuNDE0LTEuNDE0bC02IDZhMiAyIDAgMCAwIDAgMi44MjhsNiA2QTIgMiAwIDAgMCAyMiAxOHoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yaWJib24uanMKdmFyIFJpYmJvbjsKdmFyIGluaXRfcmliYm9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yaWJib24uanMiKCkgewogICAgUmliYm9uID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTEuMjJDMTEgOS45OTcgMTAgOSAxMCA4YTIgMiAwIDAgMSA0IDBjMCAxLS45OTggMi4wMDItMi4wMSAzLjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE4IDIuNTctMy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjQzIDkuMDE2YTcgNyAwIDAgMSAxMS41MDctLjAwOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjM1IDE0LjUzIDEyIDExLjIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkuMzUgMTQuNTNDNy43MjggMTIuMjQ2IDYgMTAuMjIxIDYgN2E2IDUgMCAwIDEgMTIgMGMtLjAwNSAzLjIyLTEuNzc4IDUuMjM1LTMuNDMgNy41bDMuNTU3IDQuNTI3YTEgMSAwIDAgMS0uMjAzIDEuNDNsLTEuODk0IDEuMzZhMSAxIDAgMCAxLTEuMzg0LS4yMTVMMTIgMThsLTIuNjc5IDMuNTkzYTEgMSAwIDAgMS0xLjM5LjIxM2wtMS44NjUtMS4zNTNhMSAxIDAgMCAxLS4yMDMtMS40MjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzCnZhciBSb2NrZXQ7CnZhciBpbml0X3JvY2tldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzIigpIHsKICAgIFJvY2tldCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQuNSAxNi41Yy0xLjUgMS4yNi0yIDUtMiA1czMuNzQtLjUgNS0yYy43MS0uODQuNy0yLjEzLS4wOS0yLjkxYTIuMTggMi4xOCAwIDAgMC0yLjkxLS4wOXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgMTUtMy0zYTIyIDIyIDAgMCAxIDItMy45NUExMi44OCAxMi44OCAwIDAgMSAyMiAyYzAgMi43Mi0uNzggNy41LTYgMTFhMjIuMzUgMjIuMzUgMCAwIDEtNCAyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDEySDRzLjU1LTMuMDMgMi00YzEuNjItMS4wOCA1IDAgNSAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djVzMy4wMy0uNTUgNC0yYzEuMDgtMS42MiAwLTUgMC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2luZy1jaGFpci5qcwp2YXIgUm9ja2luZ0NoYWlyOwp2YXIgaW5pdF9yb2NraW5nX2NoYWlyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb2NraW5nLWNoYWlyLmpzIigpIHsKICAgIFJvY2tpbmdDaGFpciA9IFsKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMy41IDIgNi41IDEyLjUgMTggMTIuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjUiLCB4MjogIjUuNSIsIHkxOiAiMTIuNSIsIHkyOiAiMjAiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUiLCB4MjogIjE4LjUiLCB5MTogIjEyLjUiLCB5MjogIjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIuNzUgMThhMTMgMTMgMCAwIDAgMTguNSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9sbGVyLWNvYXN0ZXIuanMKdmFyIFJvbGxlckNvYXN0ZXI7CnZhciBpbml0X3JvbGxlcl9jb2FzdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb2xsZXItY29hc3Rlci5qcyIoKSB7CiAgICBSb2xsZXJDb2FzdGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOVY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5VjYuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxOXYtNy44IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOVY5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTlWOWE0IDQgMCAwIDEgNC00YzIgMCA0IDEuMzMgNiA0czQgNCA2IDRhNCA0IDAgMSAwLTMtNi42NSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvc2UuanMKdmFyIFJvc2U7CnZhciBpbml0X3Jvc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvc2UuanMiKCkgewogICAgUm9zZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEwaC0xYTQgNCAwIDEgMSA0LTR2LjUzNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA2aDFhNCA0IDAgMCAxIDEuNDIgNy43NGwtMi4yOS44N2E2IDYgMCAwIDEtNS4zMzktMTAuNjhsMi4wNjktMS4zMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQuNSAxN2MyLjgtLjUgNC40IDAgNS41LjhzMS44IDIuMiAyLjMgMy43Yy0yIC40LTMuNS40LTQuOC0uMy0xLjItLjYtMi4zLTEuOS0zLTQuMiIgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS43NyAxMkM0IDE1IDIgMjIgMiAyMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICI4IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtM2QuanMKdmFyIFJvdGF0ZTNkOwp2YXIgaW5pdF9yb3RhdGVfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS0zZC5qcyIoKSB7CiAgICBSb3RhdGUzZCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjQ2NiA3LjVDMTUuNjQzIDQuMjM3IDEzLjk1MiAyIDEyIDIgOS4yMzkgMiA3IDYuNDc3IDcgMTJzMi4yMzkgMTAgNSAxMGMuMzQyIDAgLjY3Ny0uMDY5IDEtLjIiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMTk0IDEzLjcwNyAzLjgxNCAxLjg2LTEuODYgMy44MTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgMTUuNTdjLTEuODA0Ljg4NS00LjI3NCAxLjQzLTcgMS40My01LjUyMyAwLTEwLTIuMjM5LTEwLTVzNC40NzctNSAxMC01YzQuODM4IDAgOC44NzMgMS43MTggOS44IDQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LWtleS5qcwp2YXIgUm90YXRlQ2N3S2V5Owp2YXIgaW5pdF9yb3RhdGVfY2N3X2tleSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1rZXkuanMiKCkgewogICAgUm90YXRlQ2N3S2V5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNSA5LjUgMSAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjUgOC41LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyYTkgOSAwIDEgMCA5LTkgOS43NCA5Ljc0IDAgMCAwLTYuNzQgMi43NEwzIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzdjVoNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICIxNCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1zcXVhcmUuanMKdmFyIFJvdGF0ZUNjd1NxdWFyZTsKdmFyIGluaXRfcm90YXRlX2Njd19zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jY3ctc3F1YXJlLmpzIigpIHsKICAgIFJvdGF0ZUNjd1NxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWN2EyIDIgMCAwIDAtMi0yaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDItMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxM3Y1YTIgMiAwIDAgMS0yIDJINmEyIDIgMCAwIDEtMi0yVjdhMiAyIDAgMCAxIDItMmgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy5qcwp2YXIgUm90YXRlQ2N3Owp2YXIgaW5pdF9yb3RhdGVfY2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LmpzIigpIHsKICAgIFJvdGF0ZUNjdyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJhOSA5IDAgMSAwIDktOSA5Ljc1IDkuNzUgMCAwIDAtNi43NCAyLjc0TDMgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2NWg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LXNxdWFyZS5qcwp2YXIgUm90YXRlQ3dTcXVhcmU7CnZhciBpbml0X3JvdGF0ZV9jd19zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jdy1zcXVhcmUuanMiKCkgewogICAgUm90YXRlQ3dTcXVhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA1SDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgOCAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTR2NGEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWN2EyIDIgMCAwIDAtMi0yaC0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LmpzCnZhciBSb3RhdGVDdzsKdmFyIGluaXRfcm90YXRlX2N3ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY3cuanMiKCkgewogICAgUm90YXRlQ3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmE5IDkgMCAxIDEtOS05YzIuNTIgMCA0LjkzIDEgNi43NCAyLjc0TDIxIDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3Y1aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUuanMKdmFyIFJvdXRlOwp2YXIgaW5pdF9yb3V0ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUuanMiKCkgewogICAgUm91dGUgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjYiLCBjeTogIjE5IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOWg4LjVhMy41IDMuNSAwIDAgMCAwLTdoLTExYTMuNSAzLjUgMCAwIDEgMC03SDE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlLW9mZi5qcwp2YXIgUm91dGVPZmY7CnZhciBpbml0X3JvdXRlX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUtb2ZmLmpzIigpIHsKICAgIFJvdXRlT2ZmID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloOC41Yy40IDAgLjktLjEgMS4zLS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuMiA1LjJBMy41IDMuNTMgMCAwIDAgNi41IDEySDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNS4zYTMuNSAzLjUgMCAwIDAtMy4zLTMuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1aC00LjMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzCnZhciBSb3V0ZXI7CnZhciBpbml0X3JvdXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzIigpIHsKICAgIFJvdXRlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMDEgMThINiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4wMSAxOEgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3Ljg0IDcuMTdhNCA0IDAgMCAwLTUuNjYgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC42NiA0LjM0YTggOCAwIDAgMC0xMS4zMSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0yLmpzCnZhciBSb3dzMjsKdmFyIGluaXRfcm93c18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3dzLTIuanMiKCkgewogICAgUm93czIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0zLmpzCnZhciBSb3dzMzsKdmFyIGluaXRfcm93c18zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3dzLTMuanMiKCkgewogICAgUm93czMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Jvd3MtNC5qcwp2YXIgUm93czQ7CnZhciBpbml0X3Jvd3NfNCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy00LmpzIigpIHsKICAgIFJvd3M0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNy41SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNi41SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yc3MuanMKdmFyIFJzczsKdmFyIGluaXRfcnNzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9yc3MuanMiKCkgewogICAgUnNzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMWE5IDkgMCAwIDEgOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNGExNiAxNiAwIDAgMSAxNiAxNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydWxlci1kaW1lbnNpb24tbGluZS5qcwp2YXIgUnVsZXJEaW1lbnNpb25MaW5lOwp2YXIgaW5pdF9ydWxlcl9kaW1lbnNpb25fbGluZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXItZGltZW5zaW9uLWxpbmUuanMiKCkgewogICAgUnVsZXJEaW1lbnNpb25MaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTV2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4VjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDhWNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE1di0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxMiIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXIuanMKdmFyIFJ1bGVyOwp2YXIgaW5pdF9ydWxlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXIuanMiKCkgewogICAgUnVsZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zIDE1LjNhMi40IDIuNCAwIDAgMSAwIDMuNGwtMi42IDIuNmEyLjQgMi40IDAgMCAxLTMuNCAwTDIuNyA4LjdhMi40MSAyLjQxIDAgMCAxIDAtMy40bDIuNi0yLjZhMi40MSAyLjQxIDAgMCAxIDMuNCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDEyLjUgMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExLjUgOS41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgNi41IDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNy41IDE1LjUgMi0yIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVzc2lhbi1ydWJsZS5qcwp2YXIgUnVzc2lhblJ1YmxlOwp2YXIgaW5pdF9ydXNzaWFuX3J1YmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydXNzaWFuLXJ1YmxlLmpzIigpIHsKICAgIFJ1c3NpYW5SdWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFoOGE0IDQgMCAwIDAgMC04SDl2MTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNWg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FpbGJvYXQuanMKdmFyIFNhaWxib2F0Owp2YXIgaW5pdF9zYWlsYm9hdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FpbGJvYXQuanMiKCkgewogICAgU2FpbGJvYXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAydjE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJhNCA0IDAgMCAxLTQtNCAxIDEgMCAwIDEgMS0xaDE2YTEgMSAwIDAgMSAxIDEgNCA0IDAgMCAxLTQgNHoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk05LjE1OSAyLjQ2YTEgMSAwIDAgMSAxLjUyMS0uMTkzbDkuOTc3IDguOThBMSAxIDAgMCAxIDIwIDEzSDRhMSAxIDAgMCAxLS44MjQtMS41Njd6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzCnZhciBTYWxhZDsKdmFyIGluaXRfc2FsYWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzIigpIHsKICAgIFNhbGFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMWE5IDkgMCAwIDAgOS05SDNhOSA5IDAgMCAwIDkgOVoiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMzggMTJhMi40IDIuNCAwIDAgMS0uNC00Ljc3IDIuNCAyLjQgMCAwIDEgMy4yLTIuNzcgMi40IDIuNCAwIDAgMSAzLjQ3LS42MyAyLjQgMi40IDAgMCAxIDMuMzcgMy4zNyAyLjQgMi40IDAgMCAxLTEuMSAzLjcgMi41MSAyLjUxIDAgMCAxIC4wMyAxLjEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkgNy4yNUEzLjk5IDMuOTkgMCAwIDAgNCAxMGMwIC43My4yIDEuNDEuNTQgMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbmR3aWNoLmpzCnZhciBTYW5kd2ljaDsKdmFyIGluaXRfc2FuZHdpY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbmR3aWNoLmpzIigpIHsKICAgIFNhbmR3aWNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4zNyAxMS4yMjMgOC4zNzItNi43NzdhMiAyIDAgMCAxIDIuNTE2IDBsOC4zNzEgNi43NzciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVhMSAxIDAgMCAxIDEgMXYyYTEgMSAwIDAgMS0xIDFoLTUuMjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWExIDEgMCAwIDAtMSAxdjJhMSAxIDAgMCAwIDEgMWg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuNjcgMTUgNi4xMyA0LjZhMiAyIDAgMCAwIDIuOC0uNGwzLjE1LTQuMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjQiLCB4OiAiMiIsIHk6ICIxMSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdGVsbGl0ZS1kaXNoLmpzCnZhciBTYXRlbGxpdGVEaXNoOwp2YXIgaW5pdF9zYXRlbGxpdGVfZGlzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F0ZWxsaXRlLWRpc2guanMiKCkgewogICAgU2F0ZWxsaXRlRGlzaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBhNy4zMSA3LjMxIDAgMCAwIDEwIDEwWiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxM2E2IDYgMCAwIDAtNi02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEzQTEwIDEwIDAgMCAwIDExIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUuanMKdmFyIFNhdGVsbGl0ZTsKdmFyIGluaXRfc2F0ZWxsaXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUuanMiKCkgewogICAgU2F0ZWxsaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTMuNSA2LjUtMy4xNDgtMy4xNDhhMS4yMDUgMS4yMDUgMCAwIDAtMS43MDQgMEw2LjM1MiA1LjY0OGExLjIwNSAxLjIwNSAwIDAgMCAwIDEuNzA0TDkuNSAxMC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjUgNy41IDE5IDUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTcuNSAxMC41IDMuMTQ4IDMuMTQ4YTEuMjA1IDEuMjA1IDAgMCAxIDAgMS43MDRsLTIuMjk2IDIuMjk2YTEuMjA1IDEuMjA1IDAgMCAxLTEuNzA0IDBMMTMuNSAxNC41IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFhNiA2IDAgMCAwLTYtNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjM1MiAxMC42NDhhMS4yMDUgMS4yMDUgMCAwIDAgMCAxLjcwNGwyLjI5NiAyLjI5NmExLjIwNSAxLjIwNSAwIDAgMCAxLjcwNCAwbDQuMjk2LTQuMjk2YTEuMjA1IDEuMjA1IDAgMCAwIDAtMS43MDRsLTIuMjk2LTIuMjk2YTEuMjA1IDEuMjA1IDAgMCAwLTEuNzA0IDB6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F1ZGktcml5YWwuanMKdmFyIFNhdWRpUml5YWw7CnZhciBpbml0X3NhdWRpX3JpeWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXVkaS1yaXlhbC5qcyIoKSB7CiAgICBTYXVkaVJpeWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTkuNS01LjUgMS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgNHYxMS4yMmExIDEgMCAwIDAgMS4yNDIuOTdMMjAgMTUuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yLjk3OCAxOS4zNTEgNS41NDktMS4zNjNBMiAyIDAgMCAwIDEwIDE2VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTAgNCAxMy41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1hbGwuanMKdmFyIFNhdmVBbGw7CnZhciBpbml0X3NhdmVfYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLWFsbC5qcyIoKSB7CiAgICBTYXZlQWxsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYzYTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxOHYtNmExIDEgMCAwIDAtMS0xaC02YTEgMSAwIDAgMC0xIDF2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMkg0YTIgMiAwIDAgMS0yLTJWNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE4YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDkuMTcyYTIgMiAwIDAgMSAxLjQxNC41ODZsMi44MjggMi44MjhBMiAyIDAgMCAxIDIyIDYuODI4VjE2YTIgMiAwIDAgMS0yLjAxIDJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1vZmYuanMKdmFyIFNhdmVPZmY7CnZhciBpbml0X3NhdmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLW9mZi5qcyIoKSB7CiAgICBTYXZlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNIOGExIDEgMCAwIDAtMSAxdjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDIxdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC40MSAyMC40MUEyIDIgMCAwIDEgMTkgMjFINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIC41OS0xLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTI5LjUgMTEuNXM1IDUgNCA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgM2g2LjJhMiAyIDAgMCAxIDEuNC42bDMuOCAzLjhhMiAyIDAgMCAxIC42IDEuNFYxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanMKdmFyIFNhdmU7CnZhciBpbml0X3NhdmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanMiKCkgewogICAgU2F2ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1LjIgM2EyIDIgMCAwIDEgMS40LjZsMy44IDMuOGEyIDIgMCAwIDEgLjYgMS40VjE5YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMjF2LTdhMSAxIDAgMCAwLTEtMUg4YTEgMSAwIDAgMC0xIDF2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2NGExIDEgMCAwIDAgMSAxaDciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FsZS0zZC5qcwp2YXIgU2NhbGUzZDsKdmFyIGluaXRfc2NhbGVfM2QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLTNkLmpzIigpIHsKICAgIFNjYWxlM2QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDd2MTFhMSAxIDAgMCAwIDEgMWgxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01LjI5MyAxOC43MDcgMTEgMTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjUiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzCnZhciBTY2FsZTsKdmFyIGluaXRfc2NhbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzIigpIHsKICAgIFNjYWxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA4IDMgOGE1IDUgMCAwIDEtNiAwelY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2gxYTE3IDE3IDAgMCAwIDgtMiAxNyAxNyAwIDAgMCA4IDJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDggMyA4YTUgNSAwIDAgMS02IDB6VjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxpbmcuanMKdmFyIFNjYWxpbmc7CnZhciBpbml0X3NjYWxpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxpbmcuanMiKCkgewogICAgU2NhbGluZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxNUg5di01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDMgOSAxNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZXllLmpzCnZhciBTY2FuRXllOwp2YXIgaW5pdF9zY2FuX2V5ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1leWUuanMiKCkgewogICAgU2NhbkV5ZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIxIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4Ljk0NCAxMi4zM2ExIDEgMCAwIDAgMC0uNjYgNy41IDcuNSAwIDAgMC0xMy44ODggMCAxIDEgMCAwIDAgMCAuNjYgNy41IDcuNSAwIDAgMCAxMy44ODggMCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tYmFyY29kZS5qcwp2YXIgU2NhbkJhcmNvZGU7CnZhciBpbml0X3NjYW5fYmFyY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1iYXJjb2RlLmpzIigpIHsKICAgIFNjYW5CYXJjb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDNoMmEyIDIgMCAwIDEgMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTd2MmEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN3YxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDd2MTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWZhY2UuanMKdmFyIFNjYW5GYWNlOwp2YXIgaW5pdF9zY2FuX2ZhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZmFjZS5qcyIoKSB7CiAgICBTY2FuRmFjZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE0czEuNSAyIDQgMiA0LTIgNC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgOWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWhlYXJ0LmpzCnZhciBTY2FuSGVhcnQ7CnZhciBpbml0X3NjYW5faGVhcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4taGVhcnQuanMiKCkgewogICAgU2NhbkhlYXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNy44MjggMTMuMDdBMyAzIDAgMCAxIDEyIDguNzY0YTMgMyAwIDAgMSA0LjE3MiA0LjMwNmwtMy40NDcgMy42MmExIDEgMCAwIDEtMS40NDkgMHoiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1saW5lLmpzCnZhciBTY2FuTGluZTsKdmFyIGluaXRfc2Nhbl9saW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLWxpbmUuanMiKCkgewogICAgU2NhbkxpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMmgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tcXItY29kZS5qcwp2YXIgU2NhblFyQ29kZTsKdmFyIGluaXRfc2Nhbl9xcl9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXFyLWNvZGUuanMiKCkgewogICAgU2NhblFyQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEydjRhMSAxIDAgMCAxLTEgMWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDhWNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA3VjVhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFINWEyIDIgMCAwIDEtMi0ydi0yIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiNyIsIHk6ICI3Iiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tc2VhcmNoLmpzCnZhciBTY2FuU2VhcmNoOwp2YXIgaW5pdF9zY2FuX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1zZWFyY2guanMiKCkgewogICAgU2NhblNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LTEuOS0xLjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLXRleHQuanMKdmFyIFNjYW5UZXh0Owp2YXIgaW5pdF9zY2FuX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tdGV4dC5qcyIoKSB7CiAgICBTY2FuVGV4dCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN1Y1YTIgMiAwIDAgMSAyLTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzaDJhMiAyIDAgMCAxIDIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxSDVhMiAyIDAgMCAxLTItMnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4uanMKdmFyIFNjYW47CnZhciBpbml0X3NjYW4yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FuLmpzIigpIHsKICAgIFNjYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDdWNWEyIDIgMCAwIDEgMi0yaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2gyYTIgMiAwIDAgMSAyIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxN3YyYTIgMiAwIDAgMS0yIDJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMUg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2hvb2wuanMKdmFyIFNjaG9vbDsKdmFyIGluaXRfc2Nob29sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2hvb2wuanMiKCkgewogICAgU2Nob29sID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjF2LTNhMiAyIDAgMCAwLTQgMHYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDV2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA2IDcuMTA2LTMuNzlhMiAyIDAgMCAxIDEuNzg4IDBMMjAgNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm02IDExLTMuNTIgMi4xNDdhMSAxIDAgMCAwLS40OC44NTRWMTlhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTEgMSAwIDAgMC0uNDgtLjg1M0wxOCAxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDV2MTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiOSIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Npc3NvcnMtbGluZS1kYXNoZWQuanMKdmFyIFNjaXNzb3JzTGluZURhc2hlZDsKdmFyIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaXNzb3JzLWxpbmUtZGFzaGVkLmpzIigpIHsKICAgIFNjaXNzb3JzTGluZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUuNDIgOS40MiA4IDEyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiOCIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDYtOC41OCA4LjU4IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNCIsIGN5OiAiMTYiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC44IDE0LjggMTQgMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2lzc29ycy5qcwp2YXIgU2Npc3NvcnM7CnZhciBpbml0X3NjaXNzb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2lzc29ycy5qcyIoKSB7CiAgICBTY2lzc29ycyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiNiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMTIgOC4xMiAxMiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA0IDguMTIgMTUuODgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI2IiwgY3k6ICIxOCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjggMTQuOCAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njb290ZXIuanMKdmFyIFNjb290ZXI7CnZhciBpbml0X3Njb290ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njb290ZXIuanMiKCkgewogICAgU2Nvb3RlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDRoLTMuNWwyIDExLjA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuOTUgMTdoNS4xNDJjLjUyMyAwIC45NS0uNDA2IDEuMDYzLS45MTZhNi41IDYuNSAwIDAgMSA1LjM0NS01LjAwOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE5LjUiLCBjeTogIjE3LjUiLCByOiAiMi41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNC41IiwgY3k6ICIxNy41IiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjcmVlbi1zaGFyZS1vZmYuanMKdmFyIFNjcmVlblNoYXJlT2ZmOwp2YXIgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JlZW4tc2hhcmUtb2ZmLmpzIigpIHsKICAgIFNjcmVlblNoYXJlT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgM0g0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMjFoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDMtNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMgNSA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NyZWVuLXNoYXJlLmpzCnZhciBTY3JlZW5TaGFyZTsKdmFyIGluaXRfc2NyZWVuX3NoYXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JlZW4tc2hhcmUuanMiKCkgewogICAgU2NyZWVuU2hhcmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzSDRhMiAyIDAgMCAwLTIgMnYxMGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMWg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgOCA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgM2g1djUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY3JvbGwtdGV4dC5qcwp2YXIgU2Nyb2xsVGV4dDsKdmFyIGluaXRfc2Nyb2xsX3RleHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC10ZXh0LmpzIigpIHsKICAgIFNjcm9sbFRleHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMmgtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA4aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE3VjVhMiAyIDAgMCAwLTItMkg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTggMjFoMTJhMiAyIDAgMCAwIDItMnYtMWExIDEgMCAwIDAtMS0xSDExYTEgMSAwIDAgMC0xIDF2MWEyIDIgMCAxIDEtNCAwVjVhMiAyIDAgMSAwLTQgMHYyYTEgMSAwIDAgMCAxIDFoMyIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC5qcwp2YXIgU2Nyb2xsOwp2YXIgaW5pdF9zY3JvbGwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC5qcyIoKSB7CiAgICBTY3JvbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAxN1Y1YTIgMiAwIDAgMC0yLTJINCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDIxaDEyYTIgMiAwIDAgMCAyLTJ2LTFhMSAxIDAgMCAwLTEtMUgxMWExIDEgMCAwIDAtMSAxdjFhMiAyIDAgMSAxLTQgMFY1YTIgMiAwIDEgMC00IDB2MmExIDEgMCAwIDAgMSAxaDMiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtYWxlcnQuanMKdmFyIFNlYXJjaEFsZXJ0Owp2YXIgaW5pdF9zZWFyY2hfYWxlcnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1hbGVydC5qcyIoKSB7CiAgICBTZWFyY2hBbGVydCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTVoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNvZGUuanMKdmFyIFNlYXJjaENvZGU7CnZhciBpbml0X3NlYXJjaF9jb2RlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtY29kZS5qcyIoKSB7CiAgICBTZWFyY2hDb2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMgMTMuNSAyLTIuNS0yLTIuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAyMS00LjMtNC4zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOC41IDcgMTFsMiAyLjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1jaGVjay5qcwp2YXIgU2VhcmNoQ2hlY2s7CnZhciBpbml0X3NlYXJjaF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNoZWNrLmpzIigpIHsKICAgIFNlYXJjaENoZWNrID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMSAyIDIgNC00IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC1zbGFzaC5qcwp2YXIgU2VhcmNoU2xhc2g7CnZhciBpbml0X3NlYXJjaF9zbGFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXNsYXNoLmpzIigpIHsKICAgIFNlYXJjaFNsYXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNSA4LjUtNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zLTQuMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC14LmpzCnZhciBTZWFyY2hYOwp2YXIgaW5pdF9zZWFyY2hfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLXguanMiKCkgewogICAgU2VhcmNoWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzLjUgOC41LTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjUgOC41IDUgNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTQuMy00LjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2guanMKdmFyIFNlYXJjaDsKdmFyIGluaXRfc2VhcmNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2guanMiKCkgewogICAgU2VhcmNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtNC4zNC00LjM0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTEiLCBjeTogIjExIiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLWhvcml6b250YWwuanMKdmFyIFNlbmRIb3Jpem9udGFsOwp2YXIgaW5pdF9zZW5kX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBTZW5kSG9yaXpvbnRhbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTMuNzE0IDMuMDQ4YS40OTguNDk4IDAgMCAwLS42ODMuNjI3bDIuODQzIDcuNjI3YTIgMiAwIDAgMSAwIDEuMzk2bC0yLjg0MiA3LjYyN2EuNDk4LjQ5OCAwIDAgMCAuNjgyLjYyN2wxOC04LjVhLjUuNSAwIDAgMCAwLS45MDR6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWN0aW9uLmpzCnZhciBTZWN0aW9uOwp2YXIgaW5pdF9zZWN0aW9uID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWN0aW9uLmpzIigpIHsKICAgIFNlY3Rpb24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1YTQgMyAwIDAgMC04IDBjMCA0IDggMyA4IDdhNCAzIDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE5YTQgMyAwIDAgMCA4IDBjMC00LTgtMy04LTdhNCAzIDAgMCAxIDggMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtdG8tYmFjay5qcwp2YXIgU2VuZFRvQmFjazsKdmFyIGluaXRfc2VuZF90b19iYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLXRvLWJhY2suanMiKCkgewogICAgU2VuZFRvQmFjayA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMTQiLCB5OiAiMTQiLCB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIyIiwgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDE0djFhMiAyIDAgMCAwIDIgMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDdoMWEyIDIgMCAwIDEgMiAydjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzCnZhciBTZW5kOwp2YXIgaW5pdF9zZW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzIigpIHsKICAgIFNlbmQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC41MzYgMjEuNjg2YS41LjUgMCAwIDAgLjkzNy0uMDI0bDYuNS0xOWEuNDk2LjQ5NiAwIDAgMC0uNjM1LS42MzVsLTE5IDYuNWEuNS41IDAgMCAwLS4wMjQuOTM3bDcuOTMgMy4xOGEyIDIgMCAwIDEgMS4xMTIgMS4xMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuODU0IDIuMTQ3LTEwLjk0IDEwLjkzOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcGFyYXRvci1ob3Jpem9udGFsLmpzCnZhciBTZXBhcmF0b3JIb3Jpem9udGFsOwp2YXIgaW5pdF9zZXBhcmF0b3JfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLWhvcml6b250YWwuanMiKCkgewogICAgU2VwYXJhdG9ySG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LTQgNC00LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcGFyYXRvci12ZXJ0aWNhbC5qcwp2YXIgU2VwYXJhdG9yVmVydGljYWw7CnZhciBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLXZlcnRpY2FsLmpzIigpIHsKICAgIFNlcGFyYXRvclZlcnRpY2FsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxNiA0LTQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggOC00IDQgNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNvZy5qcwp2YXIgU2VydmVyQ29nOwp2YXIgaW5pdF9zZXJ2ZXJfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItY29nLmpzIigpIHsKICAgIFNlcnZlckNvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwLjg1MiAxNC43NzItLjM4My45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuMTQ4IDE0Ljc3MmEzIDMgMCAxIDAtMi4yOTYtNS41NDRsLS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy4xNDggOS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTMgMTUuNjk2LS4zODItLjkyNGEzIDMgMCAxIDEtMi4yOTYtNS41NDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuNzcyIDEwLjg1Mi45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC43NzIgMTMuMTQ4LjkyMy4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC41IDEwSDRhMiAyIDAgMCAxLTItMlY0YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnY0YTIgMiAwIDAgMS0yIDJoLS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSAxNEg0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTRhMiAyIDAgMCAwLTItMmgtLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjIyOCAxMC44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkuMjI4IDEzLjE0OC0uOTIzLjM4MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1jcmFzaC5qcwp2YXIgU2VydmVyQ3Jhc2g7CnZhciBpbml0X3NlcnZlcl9jcmFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNyYXNoLmpzIigpIHsKICAgIFNlcnZlckNyYXNoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxMEg0YTIgMiAwIDAgMS0yLTJWNGEyIDIgMCAwIDEgMi0yaDE2YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTRINGEyIDIgMCAwIDAtMiAydjRhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi00YTIgMiAwIDAgMC0yLTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA2aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE4aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyA2LTQgNmg2bC00IDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItb2ZmLmpzCnZhciBTZXJ2ZXJPZmY7CnZhciBpbml0X3NlcnZlcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci1vZmYuanMiKCkgewogICAgU2VydmVyT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyaDEzYTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwIDIuNSAyLjVDMiAyIDIgMi41IDIgNXYzYTIgMiAwIDAgMCAyIDJoNnoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTd2LTFhMiAyIDAgMCAwLTItMmgtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE0YTIgMiAwIDAgMC0yIDJ2NGEyIDIgMCAwIDAgMiAyaDE2LjVsMS0uNS41LjUtOC04SDR6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMThoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qcwp2YXIgU2VydmVyOwp2YXIgaW5pdF9zZXJ2ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qcyIoKSB7CiAgICBTZXJ2ZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjgiLCB4OiAiMiIsIHk6ICIyIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiOCIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjYuMDEiLCB5MTogIjYiLCB5MjogIjYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNiIsIHgyOiAiNi4wMSIsIHkxOiAiMTgiLCB5MjogIjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MtMi5qcwp2YXIgU2V0dGluZ3MyOwp2YXIgaW5pdF9zZXR0aW5nc18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXR0aW5ncy0yLmpzIigpIHsKICAgIFNldHRpbmdzMiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE3SDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgN2gtOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE3IiwgY3k6ICIxNyIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiNyIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MuanMKdmFyIFNldHRpbmdzOwp2YXIgaW5pdF9zZXR0aW5ncyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2V0dGluZ3MuanMiKCkgewogICAgU2V0dGluZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjY3MSA0LjEzNmEyLjM0IDIuMzQgMCAwIDEgNC42NTkgMCAyLjM0IDIuMzQgMCAwIDAgMy4zMTkgMS45MTUgMi4zNCAyLjM0IDAgMCAxIDIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwIDAgMy44MzEgMi4zNCAyLjM0IDAgMCAxLTIuMzMgNC4wMzMgMi4zNCAyLjM0IDAgMCAwLTMuMzE5IDEuOTE1IDIuMzQgMi4zNCAwIDAgMS00LjY1OSAwIDIuMzQgMi4zNCAwIDAgMC0zLjMyLTEuOTE1IDIuMzQgMi4zNCAwIDAgMS0yLjMzLTQuMDMzIDIuMzQgMi4zNCAwIDAgMCAwLTMuODMxQTIuMzQgMi4zNCAwIDAgMSA2LjM1IDYuMDUxYTIuMzQgMi4zNCAwIDAgMCAzLjMxOS0xLjkxNSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcGVzLmpzCnZhciBTaGFwZXM7CnZhciBpbml0X3NoYXBlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcGVzLmpzIigpIHsKICAgIFNoYXBlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTguMyAxMGEuNy43IDAgMCAxLS42MjYtMS4wNzlMMTEuNCAzYS43LjcgMCAwIDEgMS4xOTgtLjA0M0wxNi4zIDguOWEuNy43IDAgMCAxLS41NzIgMS4xWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMTQiLCB3aWR0aDogIjciLCBoZWlnaHQ6ICI3Iiwgcng6ICIxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTcuNSIsIGN5OiAiMTcuNSIsIHI6ICIzLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFyZS0yLmpzCnZhciBTaGFyZTI7CnZhciBpbml0X3NoYXJlXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLTIuanMiKCkgewogICAgU2hhcmUyID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiNSIsIHI6ICIzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTIiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOSIsIHI6ICIzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjguNTkiLCB4MjogIjE1LjQyIiwgeTE6ICIxMy41MSIsIHkyOiAiMTcuNDkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTUuNDEiLCB4MjogIjguNTkiLCB5MTogIjYuNTEiLCB5MjogIjEwLjQ5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hhcmUuanMKdmFyIFNoYXJlOwp2YXIgaW5pdF9zaGFyZTIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLmpzIigpIHsKICAgIFNoYXJlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiA2LTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMnY4YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMnYtOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzCnZhciBTaGVldDsKdmFyIGluaXRfc2hlZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzIigpIHsKICAgIFNoZWV0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiMjEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHgyOiAiMjEiLCB5MTogIjE1IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIyMSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUiLCB5MTogIjkiLCB5MjogIjIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanMKdmFyIFNoZWxsOwp2YXIgaW5pdF9zaGVsbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanMiKCkgewogICAgU2hlbGwgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxMWEyIDIgMCAxIDEtNCAwIDQgNCAwIDAgMSA4IDAgNiA2IDAgMCAxLTEyIDAgOCA4IDAgMCAxIDE2IDAgMTAgMTAgMCAxIDEtMjAgMCAxMS45MyAxMS45MyAwIDAgMSAyLjQyLTcuMjIgMiAyIDAgMSAxIDMuMTYgMi40NCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1hbGVydC5qcwp2YXIgU2hpZWxkQWxlcnQ7CnZhciBpbml0X3NoaWVsZF9hbGVydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWFsZXJ0LmpzIigpIHsKICAgIFNoaWVsZEFsZXJ0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE2aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1iYW4uanMKdmFyIFNoaWVsZEJhbjsKdmFyIGluaXRfc2hpZWxkX2JhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWJhbi5qcyIoKSB7CiAgICBTaGllbGRCYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjI0MyA1LjIxIDE0LjM5IDEyLjQ3MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1jaGVjay5qcwp2YXIgU2hpZWxkQ2hlY2s7CnZhciBpbml0X3NoaWVsZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWNoZWNrLmpzIigpIHsKICAgIFNoaWVsZENoZWNrID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWVsbGlwc2lzLmpzCnZhciBTaGllbGRFbGxpcHNpczsKdmFyIGluaXRfc2hpZWxkX2VsbGlwc2lzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtZWxsaXBzaXMuanMiKCkgewogICAgU2hpZWxkRWxsaXBzaXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMmguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWhhbGYuanMKdmFyIFNoaWVsZEhhbGY7CnZhciBpbml0X3NoaWVsZF9oYWxmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtaGFsZi5qcyIoKSB7CiAgICBTaGllbGRIYWxmID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1taW51cy5qcwp2YXIgU2hpZWxkTWludXM7CnZhciBpbml0X3NoaWVsZF9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW1pbnVzLmpzIigpIHsKICAgIFNoaWVsZE1pbnVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLW9mZi5qcwp2YXIgU2hpZWxkT2ZmOwp2YXIgaW5pdF9zaGllbGRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtb2ZmLmpzIigpIHsKICAgIFNoaWVsZE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk01IDVhMSAxIDAgMCAwLTEgMXY3YzAgNSAzLjUgNy41IDcuNjcgOC45NGExIDEgMCAwIDAgLjY3LjAxYzIuMzUtLjgyIDQuNDgtMS45NyA1LjktMy43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05LjMwOSAzLjY1MkExMi4yNTIgMTIuMjUyIDAgMCAwIDExLjI0IDIuMjhhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxdjdhOS43ODQgOS43ODQgMCAwIDEtLjA4IDEuMjY0IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXBsdXMuanMKdmFyIFNoaWVsZFBsdXM7CnZhciBpbml0X3NoaWVsZF9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcGx1cy5qcyIoKSB7CiAgICBTaGllbGRQbHVzID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDl2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC1xdWVzdGlvbi1tYXJrLmpzCnZhciBTaGllbGRRdWVzdGlvbk1hcms7CnZhciBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcXVlc3Rpb24tbWFyay5qcyIoKSB7CiAgICBTaGllbGRRdWVzdGlvbk1hcmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjEgOWEzIDMgMCAwIDEgNS44MiAxYzAgMi0zIDMtMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC11c2VyLmpzCnZhciBTaGllbGRVc2VyOwp2YXIgaW5pdF9zaGllbGRfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXVzZXIuanMiKCkgewogICAgU2hpZWxkVXNlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDEzYzAgNS0zLjUgNy41LTcuNjYgOC45NWExIDEgMCAwIDEtLjY3LS4wMUM3LjUgMjAuNSA0IDE4IDQgMTNWNmExIDEgMCAwIDEgMS0xYzIgMCA0LjUtMS4yIDYuMjQtMi43MmExLjE3IDEuMTcgMCAwIDEgMS41MiAwQzE0LjUxIDMuODEgMTcgNSAxOSA1YTEgMSAwIDAgMSAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzc2IDE4LjkxYTYgNiAwIDAgMSAxMS4yNDkuMDAzIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQteC5qcwp2YXIgU2hpZWxkWDsKdmFyIGluaXRfc2hpZWxkX3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC14LmpzIigpIHsKICAgIFNoaWVsZFggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxM2MwIDUtMy41IDcuNS03LjY2IDguOTVhMSAxIDAgMCAxLS42Ny0uMDFDNy41IDIwLjUgNCAxOCA0IDEzVjZhMSAxIDAgMCAxIDEtMWMyIDAgNC41LTEuMiA2LjI0LTIuNzJhMS4xNyAxLjE3IDAgMCAxIDEuNTIgMEMxNC41MSAzLjgxIDE3IDUgMTkgNWExIDEgMCAwIDEgMSAxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC41IDkuNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanMKdmFyIFNoaWVsZDsKdmFyIGluaXRfc2hpZWxkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanMiKCkgewogICAgU2hpZWxkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTNjMCA1LTMuNSA3LjUtNy42NiA4Ljk1YTEgMSAwIDAgMS0uNjctLjAxQzcuNSAyMC41IDQgMTggNCAxM1Y2YTEgMSAwIDAgMSAxLTFjMiAwIDQuNS0xLjIgNi4yNC0yLjcyYTEuMTcgMS4xNyAwIDAgMSAxLjUyIDBDMTQuNTEgMy44MSAxNyA1IDE5IDVhMSAxIDAgMCAxIDEgMXoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGlwLXdoZWVsLmpzCnZhciBTaGlwV2hlZWw7CnZhciBpbml0X3NoaXBfd2hlZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAtd2hlZWwuanMiKCkgewogICAgU2hpcFdoZWVsID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTUuMjMgNS4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxMmgtNy41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDE5LTUuMjMtNS4yMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNC41VjIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjIzIDEzLjc3IDUgMTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS41IDEySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMjMgMTAuMjMgNSA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjIuNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAuanMKdmFyIFNoaXA7CnZhciBpbml0X3NoaXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXAuanMiKCkgewogICAgU2hpcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwLjE4OVYxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTNWN2EyIDIgMCAwIDAtMi0ySDdhMiAyIDAgMCAwLTIgMnY2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE5LjM4IDIwQTExLjYgMTEuNiAwIDAgMCAyMSAxNGwtOC4xODgtMy42MzlhMiAyIDAgMCAwLTEuNjI0IDBMMyAxNGExMS42IDExLjYgMCAwIDAgMi44MSA3Ljc2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDFzMS4yIDEgMi41IDFjMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcnQuanMKdmFyIFNoaXJ0Owp2YXIgaW5pdF9zaGlydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcnQuanMiKCkgewogICAgU2hpcnQgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMC4zOCAzLjQ2IDE2IDJhNCA0IDAgMCAxLTggMEwzLjYyIDMuNDZhMiAyIDAgMCAwLTEuMzQgMi4yM2wuNTggMy40N2ExIDEgMCAwIDAgLjk5Ljg0SDZ2MTBjMCAxLjEuOSAyIDIgMmg4YTIgMiAwIDAgMCAyLTJWMTBoMi4xNWExIDEgMCAwIDAgLjk5LS44NGwuNTgtMy40N2EyIDIgMCAwIDAtMS4zNC0yLjIzeiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWJhZy5qcwp2YXIgU2hvcHBpbmdCYWc7CnZhciBpbml0X3Nob3BwaW5nX2JhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFnLmpzIigpIHsKICAgIFNob3BwaW5nQmFnID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTBhNCA0IDAgMCAxLTggMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zLjEwMyA2LjAzNGgxNy43OTQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMy40IDUuNDY3YTIgMiAwIDAgMC0uNCAxLjJWMjBhMiAyIDAgMCAwIDIgMmgxNGEyIDIgMCAwIDAgMi0yVjYuNjY3YTIgMiAwIDAgMC0uNC0xLjJsLTItMi42NjdBMiAyIDAgMCAwIDE3IDJIN2EyIDIgMCAwIDAtMS42Ljh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFza2V0LmpzCnZhciBTaG9wcGluZ0Jhc2tldDsKdmFyIGluaXRfc2hvcHBpbmdfYmFza2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG9wcGluZy1iYXNrZXQuanMiKCkgewogICAgU2hvcHBpbmdCYXNrZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxMS0xIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTEtNC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTFoMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy41IDExIDEuNiA3LjRhMiAyIDAgMCAwIDIgMS42aDkuOGEyIDIgMCAwIDAgMi0xLjZsMS43LTcuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjUgMTUuNWgxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDExIDQtNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDEgOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3BwaW5nLWNhcnQuanMKdmFyIFNob3BwaW5nQ2FydDsKdmFyIGluaXRfc2hvcHBpbmdfY2FydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctY2FydC5qcyIoKSB7CiAgICBTaG9wcGluZ0NhcnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjgiLCBjeTogIjIxIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiMjEiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTIuMDUgMi4wNWgybDIuNjYgMTIuNDJhMiAyIDAgMCAwIDIgMS41OGg5Ljc4YTIgMiAwIDAgMCAxLjk1LTEuNTdsMS42NS03LjQzSDUuMTIiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvdmVsLmpzCnZhciBTaG92ZWw7CnZhciBpbml0X3Nob3ZlbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvdmVsLmpzIigpIHsKICAgIFNob3ZlbCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxLjU2IDQuNTZhMS41IDEuNSAwIDAgMSAwIDIuMTIybC0uNDcuNDdhMyAzIDAgMCAxLTQuMjEyLS4wMyAzIDMgMCAwIDEgMC00LjI0M2wuNDQtLjQ0YTEuNSAxLjUgMCAwIDEgMi4xMjEgMHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMyAyMmExIDEgMCAwIDEtMS0xdi0zLjU4NmExIDEgMCAwIDEgLjI5My0uNzA3bDMuMzU1LTMuMzU1YTEuMjA1IDEuMjA1IDAgMCAxIDEuNzA0IDBsMy4yOTYgMy4yOTZhMS4yMDUgMS4yMDUgMCAwIDEgMCAxLjcwNGwtMy4zNTUgMy4zNTVhMSAxIDAgMCAxLS43MDcuMjkzeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE1IDcuODc5LTcuODc4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvd2VyLWhlYWQuanMKdmFyIFNob3dlckhlYWQ7CnZhciBpbml0X3Nob3dlcl9oZWFkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaG93ZXItaGVhZC5qcyIoKSB7CiAgICBTaG93ZXJIZWFkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNCA0IDIuNSAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMuNSA2LjVhNC45NSA0Ljk1IDAgMCAwLTcgNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA1IDUgMTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTd2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2di4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxM3YuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTB2LjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDIwdi4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNHYuMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTF2LjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanMKdmFyIFNocmVkZGVyOwp2YXIgaW5pdF9zaHJlZGRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanMiKCkgewogICAgU2hyZWRkZXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTQgMTNWNGEyIDIgMCAwIDEgMi0yaDhhMi40IDIuNCAwIDAgMSAxLjcwNi43MDZsMy41ODggMy41ODhBMi40IDIuNCAwIDAgMSAyMCA4djUiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJ2NWExIDEgMCAwIDAgMSAxaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjJ2LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTl2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjB2LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2gyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDIwdi0zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW1wLmpzCnZhciBTaHJpbXA7CnZhciBpbml0X3NocmltcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW1wLmpzIigpIHsKICAgIFNocmltcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAyMmMuNS0uNSAxLjEyLTEgMi41LTEtMS4zOCAwLTItLjUtMi41LTEiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgMmEzLjI4IDMuMjggMCAwIDEtMy4yMjcgMS43OThsLTYuMTctLjU2MUEyLjM4NyAyLjM4NyAwIDEgMCA0LjM4NyA4SDE1LjVhMSAxIDAgMCAxIDAgMTMgMSAxIDAgMCAwIDAtNUgxMmE3IDcgMCAwIDEtNy03VjgiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOGE4LjUgOC41IDAgMCAxIDAgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNmMyIDAgNC41LTQgNC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW5rLmpzCnZhciBTaHJpbms7CnZhciBpbml0X3NocmluayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyaW5rLmpzIigpIHsKICAgIFNocmluayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDYgNm0tNi02djQuOG0wLTQuOGg0LjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOS44VjE1bTAgMEg0LjJNOSAxNWwtNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDQuMlY5bTAgMGg0LjhNMTUgOWw2LTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA0LjJWOW0wIDBINC4yTTkgOSAzIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qcwp2YXIgU2hydWI7CnZhciBpbml0X3NocnViID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qcyIoKSB7CiAgICBTaHJ1YiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIydi01LjE3MmEyIDIgMCAwIDAtLjU4Ni0xLjQxNEw5LjUgMTMuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDE0LjUgMTIgMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgOC44QTYgNiAwIDAgMSAxMy44IDIwSDEwQTYuNSA2LjUgMCAwIDEgNyA4YTUgNSAwIDAgMSAxMCAweiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanMKdmFyIFNodWZmbGU7CnZhciBpbml0X3NodWZmbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanMiKCkgewogICAgU2h1ZmZsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDE0IDQgNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTggMiA0IDQtNCA0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMThoMS45NzNhNCA0IDAgMCAwIDMuMy0xLjdsNS40NTQtOC42YTQgNCAwIDAgMSAzLjMtMS43SDIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNmgxLjk3MmE0IDQgMCAwIDEgMy42IDIuMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOGgtNi4wNDFhNCA0IDAgMCAxLTMuMy0xLjhsLS4zNTktLjQ1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLWhpZ2guanMKdmFyIFNpZ25hbEhpZ2g7CnZhciBpbml0X3NpZ25hbF9oaWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtaGlnaC5qcyIoKSB7CiAgICBTaWduYWxIaWdoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbWEuanMKdmFyIFNpZ21hOwp2YXIgaW5pdF9zaWdtYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbWEuanMiKCkgewogICAgU2lnbWEgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA3VjVhMSAxIDAgMCAwLTEtMUg2LjVhLjUuNSAwIDAgMC0uNC44bDQuNSA2YTIgMiAwIDAgMSAwIDIuNGwtNC41IDZhLjUuNSAwIDAgMCAuNC44SDE3YTEgMSAwIDAgMCAxLTF2LTIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtbG93LmpzCnZhciBTaWduYWxMb3c7CnZhciBpbml0X3NpZ25hbF9sb3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1sb3cuanMiKCkgewogICAgU2lnbmFsTG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1tZWRpdW0uanMKdmFyIFNpZ25hbE1lZGl1bTsKdmFyIGluaXRfc2lnbmFsX21lZGl1bSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLW1lZGl1bS5qcyIoKSB7CiAgICBTaWduYWxNZWRpdW0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIwdi00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi04IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLXplcm8uanMKdmFyIFNpZ25hbFplcm87CnZhciBpbml0X3NpZ25hbF96ZXJvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtemVyby5qcyIoKSB7CiAgICBTaWduYWxaZXJvID0gW1sicGF0aCIsIHsgZDogIk0yIDIwaC4wMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwuanMKdmFyIFNpZ25hbDsKdmFyIGluaXRfc2lnbmFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwuanMiKCkgewogICAgU2lnbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMFY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYXR1cmUuanMKdmFyIFNpZ25hdHVyZTsKdmFyIGluaXRfc2lnbmF0dXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYXR1cmUuanMiKCkgewogICAgU2lnbmF0dXJlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMjEgMTctMi4xNTYtMS44NjhBLjUuNSAwIDAgMCAxOCAxNS41di41YTEgMSAwIDAgMS0xIDFoLTJhMSAxIDAgMCAxLTEtMWMwLTIuNTQ1LTMuOTkxLTMuOTctOC41LTRhMSAxIDAgMCAwIDAgNWM0LjE1MyAwIDQuNzQ1LTExLjI5NSA1LjcwOC0xMy41YTIuNSAyLjUgMCAxIDEgMy4zMSAzLjI4NCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIxaDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbnBvc3QtYmlnLmpzCnZhciBTaWducG9zdEJpZzsKdmFyIGluaXRfc2lnbnBvc3RfYmlnID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC1iaWcuanMiKCkgewogICAgU2lnbnBvc3RCaWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5SDRMMiA3bDItMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDVoNmwyIDItMiAyaC02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDIyVjRhMiAyIDAgMSAxIDQgMHYxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC5qcwp2YXIgU2lnbnBvc3Q7CnZhciBpbml0X3NpZ25wb3N0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWducG9zdC5qcyIoKSB7CiAgICBTaWducG9zdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE4IDZhMiAyIDAgMCAxIDEuMzg3LjU2bDIuMzA3IDIuMjJhMSAxIDAgMCAxIDAgMS40NGwtMi4zMDcgMi4yMkEyIDIgMCAwIDEgMTggMTNINmEyIDIgMCAwIDEtMS4zODctLjU2bC0yLjMwNi0yLjIyYTEgMSAwIDAgMSAwLTEuNDRsMi4zMDYtMi4yMkEyIDIgMCAwIDEgNiA2eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpcmVuLmpzCnZhciBTaXJlbjsKdmFyIGluaXRfc2lyZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpcmVuLmpzIigpIHsKICAgIFNpcmVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOHYtNmE1IDUgMCAxIDEgMTAgMHY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMSAxIDAgMCAwIDEgMWgxMmExIDEgMCAwIDAgMS0xdi0xYTIgMiAwIDAgMC0yLTJIN2EyIDIgMCAwIDAtMiAyeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjUgNC41IDE4IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkyOSA0LjkyOS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEydjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWJhY2suanMKdmFyIFNraXBCYWNrOwp2YXIgaW5pdF9za2lwX2JhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NraXAtYmFjay5qcyIoKSB7CiAgICBTa2lwQmFjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE3Ljk3MSA0LjI4NUEyIDIgMCAwIDEgMjEgNnYxMmEyIDIgMCAwIDEtMy4wMjkgMS43MTVsLTkuOTk3LTUuOTk4YTIgMiAwIDAgMS0uMDAzLTMuNDMyeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDIwVjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qcwp2YXIgU2t1bGw7CnZhciBpbml0X3NrdWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qcyIoKSB7CiAgICBTa3VsbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyLjUgMTctLjUtMS0uNSAxaDF6IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE1IDIyYTEgMSAwIDAgMCAxLTF2LTFhMiAyIDAgMCAwIDEuNTYtMy4yNSA4IDggMCAxIDAtMTEuMTIgMEEyIDIgMCAwIDAgOCAyMHYxYTEgMSAwIDAgMCAxIDF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICIxMiIsIHI6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2tpcC1mb3J3YXJkLmpzCnZhciBTa2lwRm9yd2FyZDsKdmFyIGluaXRfc2tpcF9mb3J3YXJkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWZvcndhcmQuanMiKCkgewogICAgU2tpcEZvcndhcmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0djE2IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNNi4wMjkgNC4yODVBMiAyIDAgMCAwIDMgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6IiB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzCnZhciBTbGFjazsKdmFyIGluaXRfc2xhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzIigpIHsKICAgIFNsYWNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiMTMiLCB5OiAiMiIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDguNVYxMGgxLjVBMS41IDEuNSAwIDEgMCAxOSA4LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjgiLCB4OiAiOCIsIHk6ICIxNCIsIHJ4OiAiMS41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTUuNVYxNEgzLjVBMS41IDEuNSAwIDEgMCA1IDE1LjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMTQiLCB5OiAiMTMiLCByeDogIjEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDE5SDE0djEuNWExLjUgMS41IDAgMSAwIDEuNS0xLjUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjMiLCB4OiAiMiIsIHk6ICI4Iiwgcng6ICIxLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDVIMTBWMy41QTEuNSAxLjUgMCAxIDAgOC41IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGFzaC5qcwp2YXIgU2xhc2g7CnZhciBpbml0X3NsYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGFzaC5qcyIoKSB7CiAgICBTbGFzaCA9IFtbInBhdGgiLCB7IGQ6ICJNMjIgMiAyIDIyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWNlLmpzCnZhciBTbGljZTsKdmFyIGluaXRfc2xpY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWNlLmpzIigpIHsKICAgIFNsaWNlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgMTYuNTg2VjE5YTEgMSAwIDAgMS0xIDFIMkwxOC4zNyAzLjYzYTEgMSAwIDEgMSAzIDNsLTkuNjYzIDkuNjYzYTEgMSAwIDAgMS0xLjQxNCAwTDggMTQiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGlkZXJzLWhvcml6b250YWwuanMKdmFyIFNsaWRlcnNIb3Jpem9udGFsOwp2YXIgaW5pdF9zbGlkZXJzX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtaG9yaXpvbnRhbC5qcyIoKSB7CiAgICBTbGlkZXJzSG9yaXpvbnRhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDN2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN3Y0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE5aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtdmVydGljYWwuanMKdmFyIFNsaWRlcnNWZXJ0aWNhbDsKdmFyIGluaXRfc2xpZGVyc192ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc2xpZGVycy12ZXJ0aWNhbC5qcyIoKSB7CiAgICBTbGlkZXJzVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA4aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjF2LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE2aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTJWMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMFYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjF2LTciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLWNoYXJnaW5nLmpzCnZhciBTbWFydHBob25lQ2hhcmdpbmc7CnZhciBpbml0X3NtYXJ0cGhvbmVfY2hhcmdpbmcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtYXJ0cGhvbmUtY2hhcmdpbmcuanMiKCkgewogICAgU21hcnRwaG9uZUNoYXJnaW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTQiLCBoZWlnaHQ6ICIyMCIsIHg6ICI1IiwgeTogIjIiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuNjY3IDggMTAgMTJoNGwtMi42NjcgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtYXJ0cGhvbmUtbmZjLmpzCnZhciBTbWFydHBob25lTmZjOwp2YXIgaW5pdF9zbWFydHBob25lX25mYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS1uZmMuanMiKCkgewogICAgU21hcnRwaG9uZU5mYyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjciLCBoZWlnaHQ6ICIxMiIsIHg6ICIyIiwgeTogIjYiLCByeDogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgOC4zMmE3LjQzIDcuNDMgMCAwIDEgMCA3LjM2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjQ2IDYuMjFhMTEuNzYgMTEuNzYgMCAwIDEgMCAxMS41OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS45MSA0LjFhMTUuOTEgMTUuOTEgMCAwIDEgLjAxIDE1LjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzCnZhciBTbWFydHBob25lOwp2YXIgaW5pdF9zbWFydHBob25lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzIigpIHsKICAgIFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNCIsIGhlaWdodDogIjIwIiwgeDogIjUiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxOGguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWlsZS1wbHVzLmpzCnZhciBTbWlsZVBsdXM7CnZhciBpbml0X3NtaWxlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLXBsdXMuanMiKCkgewogICAgU21pbGVQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTF2MWExMCAxMCAwIDEgMS05LTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTRzMS41IDIgNCAyIDQtMiA0LTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiOSIsIHgyOiAiOS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNSIsIHgyOiAiMTUuMDEiLCB5MTogIjkiLCB5MjogIjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDJ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzCnZhciBTbWlsZTsKdmFyIGluaXRfc21pbGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzIigpIHsKICAgIFNtaWxlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNHMxLjUgMiA0IDIgNC0yIDQtMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICI5LjAxIiwgeTE6ICI5IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICIxNS4wMSIsIHkxOiAiOSIsIHkyOiAiOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NuYWlsLmpzCnZhciBTbmFpbDsKdmFyIGluaXRfc25haWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NuYWlsLmpzIigpIHsKICAgIFNuYWlsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxM2E2IDYgMCAxIDAgMTIgMCA0IDQgMCAxIDAtOCAwIDIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiMTMiLCByOiAiOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDEyYzQuNCAwIDgtMy42IDgtOFY3YTIgMiAwIDEgMC00IDB2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAzIDE5LjEgNS4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDMgMjAuOSA1LjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanMKdmFyIFNub3dmbGFrZTsKdmFyIGluaXRfc25vd2ZsYWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanMiKCkgewogICAgU25vd2ZsYWtlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMjAtMS4yNS0yLjVMNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0IDguNzUgNi41IDYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAyMCAxLjI1LTIuNUwxOCAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA0IDEuMjUgMi41TDE4IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMjEtMy02aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3IDMtMyA2IDEuNSAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTJoNi41TDEwIDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAgMTAtMS41IDIgMS41IDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTYuNUwxNCAxNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc29hcC1kaXNwZW5zZXItZHJvcGxldC5qcwp2YXIgU29hcERpc3BlbnNlckRyb3BsZXQ7CnZhciBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvYXAtZGlzcGVuc2VyLWRyb3BsZXQuanMiKCkgewogICAgU29hcERpc3BlbnNlckRyb3BsZXQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDJ2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAySDdhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS4yOSAxNC43NkE2LjY3IDYuNjcgMCAwIDEgMTcgMTFhNi42IDYuNiAwIDAgMS0yLjI5IDMuNzZjLTEuMTUuOTItMS43MSAyLjA0LTEuNzEgMy4xOSAwIDIuMjIgMS44IDQuMDUgNCA0LjA1czQtMS44MyA0LTQuMDVjMC0xLjE2LS41Ny0yLjI2LTEuNzEtMy4xOSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjYwNyAyMUg2YTIgMiAwIDAgMS0yLTJ2LTdhMiAyIDAgMCAxIDItMmg3VjdhMSAxIDAgMCAwLTEtMUg5YTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvZmEuanMKdmFyIFNvZmE7CnZhciBpbml0X3NvZmEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvZmEuanMiKCkgewogICAgU29mYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDlWNmEyIDIgMCAwIDAtMi0ySDZhMiAyIDAgMCAwLTIgMnYzIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTZhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi01YTIgMiAwIDAgMC00IDB2MS41YS41LjUgMCAwIDEtLjUuNWgtMTFhLjUuNSAwIDAgMS0uNS0uNVYxMWEyIDIgMCAwIDAtNCAweiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE4djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTh2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA0djkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zb2xhci1wYW5lbC5qcwp2YXIgU29sYXJQYW5lbDsKdmFyIGluaXRfc29sYXJfcGFuZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvbGFyLXBhbmVsLmpzIigpIHsKICAgIFNvbGFyUGFuZWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMjggMTQtNC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIyLTEuNTU4LTRINC41NTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMHYyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTYuMjQ1IDE1LjA0QTIgMiAwIDAgMSA4IDE0aDEyYTEgMSAwIDAgMSAuODY0IDEuNTA1bC0zLjExIDUuNDU3QTIgMiAwIDAgMSAxNiAyMkg0YTEgMSAwIDAgMS0uODYzLTEuNTA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJhNCA0IDAgMCAxLTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04LjY2IDcuNjYgMS40MSAxLjQxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qcwp2YXIgU291cDsKdmFyIGluaXRfc291cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qcyIoKSB7CiAgICBTb3VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjFhOSA5IDAgMCAwIDktOUgzYTkgOSAwIDAgMCA5IDlaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjFoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuNSAxMiAyMiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjI1IDNjLjI3LjEuOC41My43NSAxLjM2LS4wNi44My0uOTMgMS4yLTEgMi4wMi0uMDUuNzguMzQgMS4yNC43MyAxLjYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExLjI1IDNjLjI3LjEuOC41My43NCAxLjM2LS4wNS44My0uOTMgMS4yLS45OCAyLjAyLS4wNi43OC4zMyAxLjI0LjcyIDEuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4yNSAzYy4yNy4xLjguNTMuNzUgMS4zNi0uMDYuODMtLjkzIDEuMi0xIDIuMDItLjA1Ljc4LjM0IDEuMjQuNzQgMS42MiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzCnZhciBTcGFjZTsKdmFyIGluaXRfc3BhY2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzIigpIHsKICAgIFNwYWNlID0gW1sicGF0aCIsIHsgZDogIk0yMiAxN3YxYzAgLjUtLjUgMS0xIDFIM2MtLjUgMC0xLS41LTEtMXYtMSIgfV1dOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFkZS5qcwp2YXIgU3BhZGU7CnZhciBpbml0X3NwYWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFkZS5qcyIoKSB7CiAgICBTcGFkZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE4djQiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxNC40OTlhNS41IDUuNSAwIDAgMCA5LjU5MSAzLjY3NS42LjYgMCAwIDEgLjgxOC4wMDFBNS41IDUuNSAwIDAgMCAyMiAxNC41YzAtMi4yOS0xLjUtNC0zLTUuNWwtNS40OTItNS4zMTJhMiAyIDAgMCAwLTMtLjAyTDUgOC45OTljLTEuNSAxLjUtMyAzLjItMyA1LjUiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzCnZhciBTcGFya2xlOwp2YXIgaW5pdF9zcGFya2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzIigpIHsKICAgIFNwYXJrbGUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMTcgMi44MTRhMSAxIDAgMCAxIDEuOTY2IDBsMS4wNTEgNS41NThhMiAyIDAgMCAwIDEuNTk0IDEuNTk0bDUuNTU4IDEuMDUxYTEgMSAwIDAgMSAwIDEuOTY2bC01LjU1OCAxLjA1MWEyIDIgMCAwIDAtMS41OTQgMS41OTRsLTEuMDUxIDUuNTU4YTEgMSAwIDAgMS0xLjk2NiAwbC0xLjA1MS01LjU1OGEyIDIgMCAwIDAtMS41OTQtMS41OTRsLTUuNTU4LTEuMDUxYTEgMSAwIDAgMSAwLTEuOTY2bDUuNTU4LTEuMDUxYTIgMiAwIDAgMCAxLjU5NC0xLjU5NHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlcy5qcwp2YXIgU3BhcmtsZXM7CnZhciBpbml0X3NwYXJrbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlcy5qcyIoKSB7CiAgICBTcGFya2xlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjAxNyAyLjgxNGExIDEgMCAwIDEgMS45NjYgMGwxLjA1MSA1LjU1OGEyIDIgMCAwIDAgMS41OTQgMS41OTRsNS41NTggMS4wNTFhMSAxIDAgMCAxIDAgMS45NjZsLTUuNTU4IDEuMDUxYTIgMiAwIDAgMC0xLjU5NCAxLjU5NGwtMS4wNTEgNS41NThhMSAxIDAgMCAxLTEuOTY2IDBsLTEuMDUxLTUuNTU4YTIgMiAwIDAgMC0xLjU5NC0xLjU5NGwtNS41NTgtMS4wNTFhMSAxIDAgMCAxIDAtMS45NjZsNS41NTgtMS4wNTFhMiAyIDAgMCAwIDEuNTk0LTEuNTk0eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAydjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgNGgtNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjIwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzCnZhciBTcGVha2VyOwp2YXIgaW5pdF9zcGVha2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzIigpIHsKICAgIFNwZWFrZXIgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA2aC4wMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxNCIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWVjaC5qcwp2YXIgU3BlZWNoOwp2YXIgaW5pdF9zcGVlY2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWVjaC5qcyIoKSB7CiAgICBTcGVlY2ggPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04LjggMjB2LTQuMWwxLjkuMmEyLjMgMi4zIDAgMCAwIDIuMTY0LTIuMVY4LjNBNS4zNyA1LjM3IDAgMCAwIDIgOC4yNWMwIDIuOC42NTYgMy4wNTQgMSA0LjU1YTUuNzcgNS43NyAwIDAgMSAuMDI5IDIuNzU4TDIgMjAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkuOCAxNy44YTcuNSA3LjUgMCAwIDAgLjAwMy0xMC42MDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTVhMy41IDMuNSAwIDAgMC0uMDI1LTQuOTc1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2stMi5qcwp2YXIgU3BlbGxDaGVjazI7CnZhciBpbml0X3NwZWxsX2NoZWNrXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLTIuanMiKCkgewogICAgU3BlbGxDaGVjazIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE2IDYtMTIgNiAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAyMWMxLjEgMCAxLjEtMSAyLjMtMXMxLjEgMSAyLjMgMWMxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSAxLjEgMCAxLjEgMSAyLjMgMSAxLjEgMCAxLjEtMSAyLjMtMSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLmpzCnZhciBTcGVsbENoZWNrOwp2YXIgaW5pdF9zcGVsbF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2suanMiKCkgewogICAgU3BlbGxDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTYgNi0xMiA2IDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAyMCAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaW5lLXBvaW50ZXIuanMKdmFyIFNwbGluZVBvaW50ZXI7CnZhciBpbml0X3NwbGluZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUtcG9pbnRlci5qcyIoKSB7CiAgICBTcGxpbmVQb2ludGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxN0ExMiAxMiAwIDAgMSAxNyA1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTkiLCBjeTogIjUiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjUiLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanMKdmFyIFNwbGluZTsKdmFyIGluaXRfc3BsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanMiKCkgewogICAgU3BsaW5lID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOSIsIGN5OiAiNSIsIHI6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNSIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE3QTEyIDEyIDAgMCAxIDE3IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qcwp2YXIgU3BsaXQ7CnZhciBpbml0X3NwbGl0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qcyIoKSB7CiAgICBTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNoNXY1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggM0gzdjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTguM2E0IDQgMCAwIDAtMS4xNzItMi44NzJMMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDkgNi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Bvb2wuanMKdmFyIFNwb29sOwp2YXIgaW5pdF9zcG9vbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Bvb2wuanMiKCkgewogICAgU3Bvb2wgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNyAxMy40NCA0LjQ0MiAxNy4wODJBMiAyIDAgMCAwIDQuOTgyIDIxSDE5YTIgMiAwIDAgMCAuNTU4LTMuOTIxbC0xLjExNS0uMzJBMiAyIDAgMCAxIDE3IDE0LjgzN1Y3LjY2IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgMTAuNTYgMTIuNTU4LTMuNjQyQTIgMiAwIDAgMCAxOS4wMTggM0g1YTIgMiAwIDAgMC0uNTU4IDMuOTIxbDEuMTE1LjMyQTIgMiAwIDAgMSA3IDkuMTYzdjcuMTc4IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzCnZhciBTcG90bGlnaHQ7CnZhciBpbml0X3Nwb3RsaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzIigpIHsKICAgIFNwb3RsaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjI5NSAxOS41NjIgMTYgMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTYgMy43NTggMi4wOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkgMTIuNSAzLjAyNi0uNTk4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTcuNjEgNi4zYTMgMyAwIDAgMC0zLjkyIDEuM2wtMS4zOCAyLjc5YTMgMyAwIDAgMCAxLjMgMy45MWw2Ljg5IDMuNTk3YTEgMSAwIDAgMCAxLjM0Mi0uNDQ3bDMuMTA2LTYuMjExYTEgMSAwIDAgMC0uNDQ3LTEuMzQxeiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDlWMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwcmF5LWNhbi5qcwp2YXIgU3ByYXlDYW47CnZhciBpbml0X3NwcmF5X2NhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3ByYXktY2FuLmpzIigpIHsKICAgIFNwcmF5Q2FuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgN2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDExaC4wMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI0IiwgaGVpZ2h0OiAiNCIsIHg6ICIxNSIsIHk6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDkgMiAydjEwYzAgLjYtLjQgMS0xIDFoLTZjLS42IDAtMS0uNC0xLTFWMTFsMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEzIDE0IDgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMyAxOSA4LTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcHJvdXQuanMKdmFyIFNwcm91dDsKdmFyIGluaXRfc3Byb3V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcHJvdXQuanMiKCkgewogICAgU3Byb3V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTQgOS41MzZWN2E0IDQgMCAwIDEgNC00aDEuNWEuNS41IDAgMCAxIC41LjVWNWE0IDQgMCAwIDEtNCA0IDQgNCAwIDAgMC00IDRjMCAyIDEgMyAxIDVhNSA1IDAgMCAxLTEgMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDlhNSA1IDAgMCAxIDggNCA1IDUgMCAwIDEtOC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFoMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYWN0aXZpdHkuanMKdmFyIFNxdWFyZUFjdGl2aXR5Owp2YXIgaW5pdF9zcXVhcmVfYWN0aXZpdHkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hY3Rpdml0eS5qcyIoKSB7CiAgICBTcXVhcmVBY3Rpdml0eSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDEyaC0ybC0yIDUtMi0xMC0yIDVINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLWxlZnQuanMKdmFyIFNxdWFyZUFycm93RG93bkxlZnQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dEb3duTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2SDhWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzCnZhciBTcXVhcmVBcnJvd0Rvd25SaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzIigpIHsKICAgIFNxdWFyZUFycm93RG93blJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA4IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4djhIOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLmpzCnZhciBTcXVhcmVBcnJvd0Rvd247CnZhciBpbml0X3NxdWFyZV9hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd0Rvd24gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4djgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCAxMiA0IDQgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWxlZnQuanMKdmFyIFNxdWFyZUFycm93TGVmdDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1sZWZ0LmpzIigpIHsKICAgIFNxdWFyZUFycm93TGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDgtNCA0IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMkg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC1kb3duLWxlZnQuanMKdmFyIFNxdWFyZUFycm93T3V0RG93bkxlZnQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19vdXRfZG93bl9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LWRvd24tbGVmdC5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd091dERvd25MZWZ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMjFoNmEyIDIgMCAwIDAgMi0yVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDIxIDktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxSDN2LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LWRvd24tcmlnaHQuanMKdmFyIFNxdWFyZUFycm93T3V0RG93blJpZ2h0Owp2YXIgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X2Rvd25fcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qcyIoKSB7CiAgICBTcXVhcmVBcnJvd091dERvd25SaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDIxLTktOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY2aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1sZWZ0LmpzCnZhciBTcXVhcmVBcnJvd091dFVwTGVmdDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X291dF91cF9sZWZ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LXVwLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dPdXRVcExlZnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAzaDZhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDMgOSA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOVYzaDYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctb3V0LXVwLXJpZ2h0LmpzCnZhciBTcXVhcmVBcnJvd091dFVwUmlnaHQ7CnZhciBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtdXAtcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dPdXRVcFJpZ2h0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTN2NmEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTkgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAzaDZ2NiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1yaWdodC5qcwp2YXIgU3F1YXJlQXJyb3dSaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dSaWdodCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxNiA0LTQtNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLWxlZnQuanMKdmFyIFNxdWFyZUFycm93VXBMZWZ0Owp2YXIgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLWxlZnQuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcExlZnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE2VjhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxNiA4IDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAtcmlnaHQuanMKdmFyIFNxdWFyZUFycm93VXBSaWdodDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3VwX3JpZ2h0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAtcmlnaHQuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcFJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCA4aDh2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2IDgtOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC5qcwp2YXIgU3F1YXJlQXJyb3dVcDsKdmFyIGluaXRfc3F1YXJlX2Fycm93X3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctdXAuanMiKCkgewogICAgU3F1YXJlQXJyb3dVcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEyLTQtNC00IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZWOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hc3Rlcmlzay5qcwp2YXIgU3F1YXJlQXN0ZXJpc2s7CnZhciBpbml0X3NxdWFyZV9hc3RlcmlzayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFzdGVyaXNrLmpzIigpIHsKICAgIFNxdWFyZUFzdGVyaXNrID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTguNSAxNCA3LTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC41IDEwIDcgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1ib3R0b20tZGFzaGVkLXNjaXNzb3JzLmpzCnZhciBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczsKdmFyIGluaXRfc3F1YXJlX2JvdHRvbV9kYXNoZWRfc2Npc3NvcnMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1ib3R0b20tZGFzaGVkLXNjaXNzb3JzLmpzIigpIHsKICAgIFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHkxOiAiMyIsIHgyOiAiMTkiLCB5MjogIjMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMyIsIHkxOiAiNSIsIHgyOiAiMyIsIHkyOiAiMTkiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjEiLCB5MTogIjUiLCB4MjogIjIxIiwgeTI6ICIxOSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeTE6ICIyMSIsIHgyOiAiMTAiLCB5MjogIjIxIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeTE6ICIyMSIsIHgyOiAiMTUiLCB5MjogIjIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSAzIDUgQTIgMiAwIDAgMSA1IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNIDE5IDMgQTIgMiAwIDAgMSAyMSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA1IDIxIEEyIDIgMCAwIDEgMyAxOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0gMjEgMTkgQTIgMiAwIDAgMSAxOSAyMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiOC41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICI5LjU2MDY2IiwgeDI6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTciLCB5MTogIjE3IiwgeDI6ICIxNC44MiIsIHkyOiAiMTQuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjE1LjUiLCByOiAiMS41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkuNTYwNjYiLCB5MTogIjE0LjQzOTM0IiwgeDI6ICIxNyIsIHkyOiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGFydC1nYW50dC5qcwp2YXIgU3F1YXJlQ2hhcnRHYW50dDsKdmFyIGluaXRfc3F1YXJlX2NoYXJ0X2dhbnR0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hhcnQtZ2FudHQuanMiKCkgewogICAgU3F1YXJlQ2hhcnRHYW50dCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgOGg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxNmg1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLmpzCnZhciBTcXVhcmVDaGVjazsKdmFyIGluaXRfc3F1YXJlX2NoZWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2suanMiKCkgewogICAgU3F1YXJlQ2hlY2sgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDEyIDIgMiA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2stYmlnLmpzCnZhciBTcXVhcmVDaGVja0JpZzsKdmFyIGluaXRfc3F1YXJlX2NoZWNrX2JpZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZWNrLWJpZy5qcyIoKSB7CiAgICBTcXVhcmVDaGVja0JpZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEwLjY1NlYxOWEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTIuMzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTEgMyAzTDIyIDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1kb3duLmpzCnZhciBTcXVhcmVDaGV2cm9uRG93bjsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tZG93bi5qcyIoKSB7CiAgICBTcXVhcmVDaGV2cm9uRG93biA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDEwLTQgNC00LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1sZWZ0LmpzCnZhciBTcXVhcmVDaGV2cm9uTGVmdDsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fbGVmdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tbGVmdC5qcyIoKSB7CiAgICBTcXVhcmVDaGV2cm9uTGVmdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDE2LTQtNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1yaWdodC5qcwp2YXIgU3F1YXJlQ2hldnJvblJpZ2h0Owp2YXIgaW5pdF9zcXVhcmVfY2hldnJvbl9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tcmlnaHQuanMiKCkgewogICAgU3F1YXJlQ2hldnJvblJpZ2h0ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgOCA0IDQtNCA0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tdXAuanMKdmFyIFNxdWFyZUNoZXZyb25VcDsKdmFyIGluaXRfc3F1YXJlX2NoZXZyb25fdXAgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLXVwLmpzIigpIHsKICAgIFNxdWFyZUNoZXZyb25VcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTQgNC00IDQgNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jb2RlLmpzCnZhciBTcXVhcmVDb2RlOwp2YXIgaW5pdF9zcXVhcmVfY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNvZGUuanMiKCkgewogICAgU3F1YXJlQ29kZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDktMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20tY29kZS5qcwp2YXIgU3F1YXJlRGFzaGVkQm90dG9tQ29kZTsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b21fY29kZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20tY29kZS5qcyIoKSB7CiAgICBTcXVhcmVEYXNoZWRCb3R0b21Db2RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOS41IDggMTJsMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA5LjUgMiAyLjUtMiAyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20uanMKdmFyIFNxdWFyZURhc2hlZEJvdHRvbTsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtYm90dG9tLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZEJvdHRvbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1rYW5iYW4uanMKdmFyIFNxdWFyZURhc2hlZEthbmJhbjsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQta2FuYmFuLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZEthbmJhbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggN3Y3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA3djkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLW1vdXNlLXBvaW50ZXIuanMKdmFyIFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjsKdmFyIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLW1vdXNlLXBvaW50ZXIuanMiKCkgewogICAgU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIuMDM0IDEyLjY4MWEuNDk4LjQ5OCAwIDAgMSAuNjQ3LS42NDdsOSAzLjVhLjUuNSAwIDAgMS0uMDMzLjk0M2wtMy40NDQgMS4wNjhhMSAxIDAgMCAwLS42Ni42NmwtMS4wNjcgMy40NDNhLjUuNSAwIDAgMS0uOTQzLjAzM3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzYTIgMiAwIDAgMC0yIDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC5qcwp2YXIgU3F1YXJlRGFzaGVkVG9wU29saWQ7CnZhciBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLXRvcC1zb2xpZC5qcyIoKSB7CiAgICBTcXVhcmVEYXNoZWRUb3BTb2xpZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDl2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDIxYTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMWgxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC5qcwp2YXIgU3F1YXJlRGFzaGVkOwp2YXIgaW5pdF9zcXVhcmVfZGFzaGVkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLmpzIigpIHsKICAgIFNxdWFyZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgM2EyIDIgMCAwIDAtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDNhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWEyIDIgMCAwIDEtMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDNoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgM2gxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTR2MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNHYxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRpdmlkZS5qcwp2YXIgU3F1YXJlRGl2aWRlOwp2YXIgaW5pdF9zcXVhcmVfZGl2aWRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGl2aWRlLmpzIigpIHsKICAgIFNxdWFyZURpdmlkZSA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiwgcnk6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE2IiwgeTE6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTIiLCB4MjogIjEyIiwgeTE6ICI4IiwgeTI6ICI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRvdC5qcwp2YXIgU3F1YXJlRG90Owp2YXIgaW5pdF9zcXVhcmVfZG90ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZG90LmpzIigpIHsKICAgIFNxdWFyZURvdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZXF1YWwuanMKdmFyIFNxdWFyZUVxdWFsOwp2YXIgaW5pdF9zcXVhcmVfZXF1YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1lcXVhbC5qcyIoKSB7CiAgICBTcXVhcmVFcXVhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNGgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1mdW5jdGlvbi5qcwp2YXIgU3F1YXJlRnVuY3Rpb247CnZhciBpbml0X3NxdWFyZV9mdW5jdGlvbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWZ1bmN0aW9uLmpzIigpIHsKICAgIFNxdWFyZUZ1bmN0aW9uID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN2MyIDAgMi44LTEgMi44LTIuOFYxMGMwLTIgMS0zLjMgMy4yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxMS4yaDUuNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1rYW5iYW4uanMKdmFyIFNxdWFyZUthbmJhbjsKdmFyIGluaXRfc3F1YXJlX2thbmJhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWthbmJhbi5qcyIoKSB7CiAgICBTcXVhcmVLYW5iYW4gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDd2NyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3Y5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWxpYnJhcnkuanMKdmFyIFNxdWFyZUxpYnJhcnk7CnZhciBpbml0X3NxdWFyZV9saWJyYXJ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbGlicmFyeS5qcyIoKSB7CiAgICBTcXVhcmVMaWJyYXJ5ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3djEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNyAyIDEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW0uanMKdmFyIFNxdWFyZU07CnZhciBpbml0X3NxdWFyZV9tID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbS5qcyIoKSB7CiAgICBTcXVhcmVNID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk04IDE2VjguNWEuNS41IDAgMCAxIC45LS4zbDIuNyAzLjU5OWEuNS41IDAgMCAwIC44IDBsMi43LTMuNmEuNS41IDAgMCAxIC45LjNWMTYiIH0KICAgICAgXSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1lbnUuanMKdmFyIFNxdWFyZU1lbnU7CnZhciBpbml0X3NxdWFyZV9tZW51ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbWVudS5qcyIoKSB7CiAgICBTcXVhcmVNZW51ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA4aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNmgxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1taW51cy5qcwp2YXIgU3F1YXJlTWludXM7CnZhciBpbml0X3NxdWFyZV9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1pbnVzLmpzIigpIHsKICAgIFNxdWFyZU1pbnVzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMmg4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW1vdXNlLXBvaW50ZXIuanMKdmFyIFNxdWFyZU1vdXNlUG9pbnRlcjsKdmFyIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1tb3VzZS1wb2ludGVyLmpzIigpIHsKICAgIFNxdWFyZU1vdXNlUG9pbnRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTEyLjAzNCAxMi42ODFhLjQ5OC40OTggMCAwIDEgLjY0Ny0uNjQ3bDkgMy41YS41LjUgMCAwIDEtLjAzMy45NDNsLTMuNDQ0IDEuMDY4YTEgMSAwIDAgMC0uNjYuNjZsLTEuMDY3IDMuNDQzYS41LjUgMCAwIDEtLjk0My4wMzN6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDExVjVhMiAyIDAgMCAwLTItMkg1YTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmctb2ZmLmpzCnZhciBTcXVhcmVQYXJraW5nT2ZmOwp2YXIgaW5pdF9zcXVhcmVfcGFya2luZ19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wYXJraW5nLW9mZi5qcyIoKSB7CiAgICBTcXVhcmVQYXJraW5nT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMy42IDMuNkEyIDIgMCAwIDEgNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLS41OSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOC43VjE5YTIgMiAwIDAgMCAyIDJoMTAuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTNhMyAzIDAgMSAwIDAtNkg5djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN3YtMi4zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmcuanMKdmFyIFNxdWFyZVBhcmtpbmc7CnZhciBpbml0X3NxdWFyZV9wYXJraW5nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGFya2luZy5qcyIoKSB7CiAgICBTcXVhcmVQYXJraW5nID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN1Y3aDRhMyAzIDAgMCAxIDAgNkg5IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBlbi5qcwp2YXIgU3F1YXJlUGVuOwp2YXIgaW5pdF9zcXVhcmVfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVuLmpzIigpIHsKICAgIFNxdWFyZVBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnYtNyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC4zNzUgMi42MjVhMSAxIDAgMCAxIDMgM2wtOS4wMTMgOS4wMTRhMiAyIDAgMCAxLS44NTMuNTA1bC0yLjg3My44NGEuNS41IDAgMCAxLS42Mi0uNjJsLjg0LTIuODczYTIgMiAwIDAgMSAuNTA2LS44NTJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhdXNlLmpzCnZhciBTcXVhcmVQYXVzZTsKdmFyIGluaXRfc3F1YXJlX3BhdXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGF1c2UuanMiKCkgewogICAgU3F1YXJlUGF1c2UgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMCIsIHgyOiAiMTAiLCB5MTogIjE1IiwgeTI6ICI5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE0IiwgeDI6ICIxNCIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVyY2VudC5qcwp2YXIgU3F1YXJlUGVyY2VudDsKdmFyIGluaXRfc3F1YXJlX3BlcmNlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wZXJjZW50LmpzIigpIHsKICAgIFNxdWFyZVBlcmNlbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1waS5qcwp2YXIgU3F1YXJlUGk7CnZhciBpbml0X3NxdWFyZV9waSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpLmpzIigpIHsKICAgIFNxdWFyZVBpID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA3aDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTdhMiAyIDAgMCAxLTItMlY3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBpbGNyb3cuanMKdmFyIFNxdWFyZVBpbGNyb3c7CnZhciBpbml0X3NxdWFyZV9waWxjcm93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGlsY3Jvdy5qcyIoKSB7CiAgICBTcXVhcmVQaWxjcm93ID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJIOS41YTIuNSAyLjUgMCAwIDEgMC01SDE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDd2MTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN3YxMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbGF5LmpzCnZhciBTcXVhcmVQbGF5Owp2YXIgaW5pdF9zcXVhcmVfcGxheSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBsYXkuanMiKCkgewogICAgU3F1YXJlUGxheSA9IFsKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgOS4wMDNhMSAxIDAgMCAxIDEuNTE3LS44NTlsNC45OTcgMi45OTdhMSAxIDAgMCAxIDAgMS43MThsLTQuOTk3IDIuOTk3QTEgMSAwIDAgMSA5IDE0Ljk5NnoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGx1cy5qcwp2YXIgU3F1YXJlUGx1czsKdmFyIGluaXRfc3F1YXJlX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbHVzLmpzIigpIHsKICAgIFNxdWFyZVBsdXMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBvd2VyLmpzCnZhciBTcXVhcmVQb3dlcjsKdmFyIGluaXRfc3F1YXJlX3Bvd2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcG93ZXIuanMiKCkgewogICAgU3F1YXJlUG93ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA3djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy45OTggOS4wMDNhNSA1IDAgMSAwIDgtLjAwNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yYWRpY2FsLmpzCnZhciBTcXVhcmVSYWRpY2FsOwp2YXIgaW5pdF9zcXVhcmVfcmFkaWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXJhZGljYWwuanMiKCkgewogICAgU3F1YXJlUmFkaWNhbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMmwyIDUgMi0xMGg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMyIsIHk6ICIzIiwgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNjaXNzb3JzLmpzCnZhciBTcXVhcmVTY2lzc29yczsKdmFyIGluaXRfc3F1YXJlX3NjaXNzb3JzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2Npc3NvcnMuanMiKCkgewogICAgU3F1YXJlU2Npc3NvcnMgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjguNSIsIGN5OiAiOC41IiwgcjogIjEuNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5LjU2MDY2IiwgeTE6ICI5LjU2MDY2IiwgeDI6ICIxMiIsIHkyOiAiMTIiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMTciLCB5MTogIjE3IiwgeDI6ICIxNC44MiIsIHkyOiAiMTQuODIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI4LjUiLCBjeTogIjE1LjUiLCByOiAiMS41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjkuNTYwNjYiLCB5MTogIjE0LjQzOTM0IiwgeDI6ICIxNyIsIHkyOiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yb3VuZC1jb3JuZXIuanMKdmFyIFNxdWFyZVJvdW5kQ29ybmVyOwp2YXIgaW5pdF9zcXVhcmVfcm91bmRfY29ybmVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcm91bmQtY29ybmVyLmpzIigpIHsKICAgIFNxdWFyZVJvdW5kQ29ybmVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTFhOCA4IDAgMCAwLTgtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNXY0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNpZ21hLmpzCnZhciBTcXVhcmVTaWdtYTsKdmFyIGluaXRfc3F1YXJlX3NpZ21hID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2lnbWEuanMiKCkgewogICAgU3F1YXJlU2lnbWEgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4LjlWN0g4bDQgNS00IDVoOHYtMS45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNsYXNoLmpzCnZhciBTcXVhcmVTbGFzaDsKdmFyIGluaXRfc3F1YXJlX3NsYXNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2xhc2guanMiKCkgewogICAgU3F1YXJlU2xhc2ggPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiMTUiLCB5MjogIjkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtaG9yaXpvbnRhbC5qcwp2YXIgU3F1YXJlU3BsaXRIb3Jpem9udGFsOwp2YXIgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNwbGl0LWhvcml6b250YWwuanMiKCkgewogICAgU3F1YXJlU3BsaXRIb3Jpem9udGFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxOUg1Yy0xIDAtMi0xLTItMlY3YzAtMSAxLTIgMi0yaDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgNWgzYzEgMCAyIDEgMiAydjEwYzAgMS0xIDItMiAyaC0zIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxMiIsIHkxOiAiNCIsIHkyOiAiMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtdmVydGljYWwuanMKdmFyIFNxdWFyZVNwbGl0VmVydGljYWw7CnZhciBpbml0X3NxdWFyZV9zcGxpdF92ZXJ0aWNhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNwbGl0LXZlcnRpY2FsLmpzIigpIHsKICAgIFNxdWFyZVNwbGl0VmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDhWNWMwLTEgMS0yIDItMmgxMGMxIDAgMiAxIDIgMnYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djNjMCAxLTEgMi0yIDJIN2MtMSAwLTItMS0yLTJ2LTMiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcXVhcmUuanMKdmFyIFNxdWFyZVNxdWFyZTsKdmFyIGluaXRfc3F1YXJlX3NxdWFyZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXNxdWFyZS5qcyIoKSB7CiAgICBTcXVhcmVTcXVhcmUgPSBbCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjgiLCB5OiAiOCIsIHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3RhY2suanMKdmFyIFNxdWFyZVN0YWNrOwp2YXIgaW5pdF9zcXVhcmVfc3RhY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdGFjay5qcyIoKSB7CiAgICBTcXVhcmVTdGFjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTBjLTEuMSAwLTItLjktMi0yVjRjMC0xLjEuOS0yIDItMmg0YzEuMSAwIDIgLjkgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE2Yy0xLjEgMC0yLS45LTItMnYtNGMwLTEuMS45LTIgMi0yaDRjMS4xIDAgMiAuOSAyIDIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjgiLCB4OiAiMTQiLCB5OiAiMTQiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3Rhci5qcwp2YXIgU3F1YXJlU3RhcjsKdmFyIGluaXRfc3F1YXJlX3N0YXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdGFyLmpzIigpIHsKICAgIFNxdWFyZVN0YXIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS4wMzUgNy42OWExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2NmwtMS4xNTYtMS4xNTNhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicmVjdCIsIHsgeDogIjMiLCB5OiAiMyIsIHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdG9wLmpzCnZhciBTcXVhcmVTdG9wOwp2YXIgaW5pdF9zcXVhcmVfc3RvcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXN0b3AuanMiKCkgewogICAgU3F1YXJlU3RvcCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiOSIsIHk6ICI5Iiwgd2lkdGg6ICI2IiwgaGVpZ2h0OiAiNiIsIHJ4OiAiMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS10ZXJtaW5hbC5qcwp2YXIgU3F1YXJlVGVybWluYWw7CnZhciBpbml0X3NxdWFyZV90ZXJtaW5hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXRlcm1pbmFsLmpzIigpIHsKICAgIFNxdWFyZVRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAxMSAyLTItMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDEzaDQiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtdXNlci1yb3VuZC5qcwp2YXIgU3F1YXJlVXNlclJvdW5kOwp2YXIgaW5pdF9zcXVhcmVfdXNlcl9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXItcm91bmQuanMiKCkgewogICAgU3F1YXJlVXNlclJvdW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMjFhNiA2IDAgMCAwLTEyIDAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTEiLCByOiAiNCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS11c2VyLmpzCnZhciBTcXVhcmVVc2VyOwp2YXIgaW5pdF9zcXVhcmVfdXNlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXIuanMiKCkgewogICAgU3F1YXJlVXNlciA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMXYtMmEyIDIgMCAwIDEgMi0yaDZhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXguanMKdmFyIFNxdWFyZVg7CnZhciBpbml0X3NxdWFyZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUteC5qcyIoKSB7CiAgICBTcXVhcmVYID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiLCByeTogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgOS02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSA5IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS5qcwp2YXIgU3F1YXJlOwp2YXIgaW5pdF9zcXVhcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS5qcyIoKSB7CiAgICBTcXVhcmUgPSBbWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtZXhjbHVkZS5qcwp2YXIgU3F1YXJlc0V4Y2x1ZGU7CnZhciBpbml0X3NxdWFyZXNfZXhjbHVkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1leGNsdWRlLmpzIigpIHsKICAgIFNxdWFyZXNFeGNsdWRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYgMTJ2MmEyIDIgMCAwIDEtMiAySDlhMSAxIDAgMCAwLTEgMXYzYTIgMiAwIDAgMCAyIDJoMTBhMiAyIDAgMCAwIDItMlYxMGEyIDIgMCAwIDAtMi0yaDAiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAxLTEgMWgtNWEyIDIgMCAwIDAtMiAydjIiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLWludGVyc2VjdC5qcwp2YXIgU3F1YXJlc0ludGVyc2VjdDsKdmFyIGluaXRfc3F1YXJlc19pbnRlcnNlY3QgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtaW50ZXJzZWN0LmpzIigpIHsKICAgIFNxdWFyZXNJbnRlcnNlY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDJhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMmgtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwVjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA0YTIgMiAwIDAgMSAyLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgOGEyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjBhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDE2YTIgMiAwIDAgMS0yLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxMGEyIDIgMCAwIDEgMi0yaDVhMSAxIDAgMCAxIDEgMXY1YTIgMiAwIDAgMS0yIDJIOWExIDEgMCAwIDEtMS0xeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDJoMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtc3VidHJhY3QuanMKdmFyIFNxdWFyZXNTdWJ0cmFjdDsKdmFyIGluaXRfc3F1YXJlc19zdWJ0cmFjdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1zdWJ0cmFjdC5qcyIoKSB7CiAgICBTcXVhcmVzU3VidHJhY3QgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMmEyIDIgMCAwIDEtMi0yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIyaC0yIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2IDRhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTBhMiAyIDAgMCAwIDIgMmgzYTEgMSAwIDAgMCAxLTF2LTVhMiAyIDAgMCAxIDItMmg1YTEgMSAwIDAgMCAxLTF6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDhhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIwYTIgMiAwIDAgMS0yIDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcmNsZS1kYXNoZWQuanMKdmFyIFNxdWlyY2xlRGFzaGVkOwp2YXIgaW5pdF9zcXVpcmNsZV9kYXNoZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlyY2xlLWRhc2hlZC5qcyIoKSB7CiAgICBTcXVpcmNsZURhc2hlZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzLjc3IDMuMDQzYTM0IDM0IDAgMCAwLTMuNTQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43NzEgMjAuOTU2YTMzIDMzIDAgMCAxLTMuNTQxLjAwMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4xOCAxNy43NGMtLjUxIDEuMTUtMS4yOSAxLjkzLTIuNDM5IDIuNDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuMTggNi4yNTljLS41MS0xLjE0OC0xLjI5MS0xLjkyOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjk1NyAxMC4yM2EzMyAzMyAwIDAgMSAwIDMuNTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMy4wNDMgMTAuMjNhMzQgMzQgMCAwIDAgLjAwMSAzLjU0MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjI2IDIwLjE3OWMtMS4xNS0uNTA4LTEuOTMtMS4yOS0yLjQ0LTIuNDM4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMjYgMy44MmMtMS4xNDkuNTEtMS45MyAxLjI5MS0yLjQ0IDIuNDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLXVuaXRlLmpzCnZhciBTcXVhcmVzVW5pdGU7CnZhciBpbml0X3NxdWFyZXNfdW5pdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZXMtdW5pdGUuanMiKCkgewogICAgU3F1YXJlc1VuaXRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCAxNmEyIDIgMCAwIDEtMi0yVjRhMiAyIDAgMCAxIDItMmgxMGEyIDIgMCAwIDEgMiAydjNhMSAxIDAgMCAwIDEgMWgzYTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMkgxMGEyIDIgMCAwIDEtMi0ydi0zYTEgMSAwIDAgMC0xLTF6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUuanMKdmFyIFNxdWlyY2xlOwp2YXIgaW5pdF9zcXVpcmNsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUuanMiKCkgewogICAgU3F1aXJjbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAzYzcuMiAwIDkgMS44IDkgOXMtMS44IDktOSA5LTktMS44LTktOSAxLjgtOSA5LTkiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcnJlbC5qcwp2YXIgU3F1aXJyZWw7CnZhciBpbml0X3NxdWlycmVsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVpcnJlbC5qcyIoKSB7CiAgICBTcXVpcnJlbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1LjIzNiAyMmEzIDMgMCAwIDAtMi4yLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjBhMyAzIDAgMCAxIDMtM2gxYTIgMiAwIDAgMCAyLTJ2LTJhNCA0IDAgMCAwLTQtNFY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDEzaC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOCA2YTQgNCAwIDAgMC00IDQgNyA3IDAgMCAwLTcgN2MwLTUgNC01IDQtMTAuNWE0LjUgNC41IDAgMSAwLTkgMCAyLjUgMi41IDAgMCAwIDUgMEM3IDEwIDMgMTEgMyAxN2MwIDIuOCAyLjIgNSA1IDVoMTAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qcwp2YXIgU3RhbXA7CnZhciBpbml0X3N0YW1wID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qcyIoKSB7CiAgICBTdGFtcCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEzVjguNUMxNCA3IDE1IDcgMTUgNWEzIDMgMCAwIDAtNiAwYzAgMiAxIDIgMSAzLjVWMTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMjAgMTUuNWEyLjUgMi41IDAgMCAwLTIuNS0yLjVoLTExQTIuNSAyLjUgMCAwIDAgNCAxNS41VjE3YTEgMSAwIDAgMCAxIDFoMTRhMSAxIDAgMCAwIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAyMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXItb2ZmLmpzCnZhciBTdGFyT2ZmOwp2YXIgaW5pdF9zdGFyX29mZiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1vZmYuanMiKCkgewogICAgU3Rhck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguMzQgOC4zNCAyIDkuMjdsNSA0Ljg3TDUuODIgMjEgMTIgMTcuNzcgMTguMTggMjFsLS41OS0zLjQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjQyIDEyLjc2IDIyIDkuMjdsLTYuOTEtMUwxMiAybC0xLjQ0IDIuOTEiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiMjIiLCB5MTogIjIiLCB5MjogIjIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1oYWxmLmpzCnZhciBTdGFySGFsZjsKdmFyIGluaXRfc3Rhcl9oYWxmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFyLWhhbGYuanMiKCkgewogICAgU3RhckhhbGYgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMiAxOC4zMzhhMi4xIDIuMSAwIDAgMC0uOTg3LjI0NEw2LjM5NiAyMS4wMWEuNTMuNTMgMCAwIDEtLjc3LS41NmwuODgxLTUuMTM5YTIuMTIgMi4xMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIgMi4xMiAwIDAgMCAxLjU5Ny0xLjE2bDIuMzA5LTQuNjc5QS41My41MyAwIDAgMSAxMiAyIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qcwp2YXIgU3RhcjsKdmFyIGluaXRfc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qcyIoKSB7CiAgICBTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuNTI1IDIuMjk1YS41My41MyAwIDAgMSAuOTUgMGwyLjMxIDQuNjc5YTIuMTIzIDIuMTIzIDAgMCAwIDEuNTk1IDEuMTZsNS4xNjYuNzU2YS41My41MyAwIDAgMSAuMjk0LjkwNGwtMy43MzYgMy42MzhhMi4xMjMgMi4xMjMgMCAwIDAtLjYxMSAxLjg3OGwuODgyIDUuMTRhLjUzLjUzIDAgMCAxLS43NzEuNTZsLTQuNjE4LTIuNDI4YTIuMTIyIDIuMTIyIDAgMCAwLTEuOTczIDBMNi4zOTYgMjEuMDFhLjUzLjUzIDAgMCAxLS43Ny0uNTZsLjg4MS01LjEzOWEyLjEyMiAyLjEyMiAwIDAgMC0uNjExLTEuODc5TDIuMTYgOS43OTVhLjUzLjUzIDAgMCAxIC4yOTQtLjkwNmw1LjE2NS0uNzU1YTIuMTIyIDIuMTIyIDAgMCAwIDEuNTk3LTEuMTZ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RlcC1iYWNrLmpzCnZhciBTdGVwQmFjazsKdmFyIGluaXRfc3RlcF9iYWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGVwLWJhY2suanMiKCkgewogICAgU3RlcEJhY2sgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy45NzEgNC4yODVBMiAyIDAgMCAxIDE3IDZ2MTJhMiAyIDAgMCAxLTMuMDI5IDEuNzE1bC05Ljk5Ny01Ljk5OGEyIDIgMCAwIDEtLjAwMy0zLjQzMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMjBWNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtZm9yd2FyZC5qcwp2YXIgU3RlcEZvcndhcmQ7CnZhciBpbml0X3N0ZXBfZm9yd2FyZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RlcC1mb3J3YXJkLmpzIigpIHsKICAgIFN0ZXBGb3J3YXJkID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xMC4wMjkgNC4yODVBMiAyIDAgMCAwIDcgNnYxMmEyIDIgMCAwIDAgMy4wMjkgMS43MTVsOS45OTctNS45OThhMiAyIDAgMCAwIC4wMDMtMy40MzJ6IiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGV0aG9zY29wZS5qcwp2YXIgU3RldGhvc2NvcGU7CnZhciBpbml0X3N0ZXRob3Njb3BlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGV0aG9zY29wZS5qcyIoKSB7CiAgICBTdGV0aG9zY29wZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDJ2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNINGEyIDIgMCAwIDAtMiAydjRhNiA2IDAgMCAwIDEyIDBWNWEyIDIgMCAwIDAtMi0yaC0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVhNiA2IDAgMCAwIDEyIDB2LTMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIyMCIsIGN5OiAiMTAiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNrZXIuanMKdmFyIFN0aWNrZXI7CnZhciBpbml0X3N0aWNrZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNrZXIuanMiKCkgewogICAgU3RpY2tlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDlhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE1IDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEzaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxM2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTZzLjggMSAyIDFjMS4zIDAgMi0xIDItMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzCnZhciBTdG9uZTsKdmFyIGluaXRfc3RvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzIigpIHsKICAgIFN0b25lID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEuMjY0IDIuMjA1QTQgNCAwIDAgMCA2LjQyIDQuMjExbC00IDhhNCA0IDAgMCAwIDEuMzU5IDUuMTE3bDYgNGE0IDQgMCAwIDAgNC40MzggMGw2LTRhNCA0IDAgMCAwIDEuNTc2LTQuNTkybC0yLTZhNCA0IDAgMCAwLTIuNTMtMi41M3oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuOTkgMjIgMTQgMTJsNy44MjIgMy4xODQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTIgOC40NyAyLjMwMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0aWNreS1ub3RlLmpzCnZhciBTdGlja3lOb3RlOwp2YXIgaW5pdF9zdGlja3lfbm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2t5LW5vdGUuanMiKCkgewogICAgU3RpY2t5Tm90ZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIxIDlhMi40IDIuNCAwIDAgMC0uNzA2LTEuNzA2bC0zLjU4OC0zLjU4OEEyLjQgMi40IDAgMCAwIDE1IDNINWEyIDIgMCAwIDAtMiAydjE0YTIgMiAwIDAgMCAyIDJoMTRhMiAyIDAgMCAwIDItMnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgM3Y1YTEgMSAwIDAgMCAxIDFoNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b3JlLmpzCnZhciBTdG9yZTsKdmFyIGluaXRfc3RvcmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b3JlLmpzIigpIHsKICAgIFN0b3JlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjF2LTVhMSAxIDAgMCAwLTEtMWgtNGExIDEgMCAwIDAtMSAxdjUiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTcuNzc0IDEwLjMxYTEuMTIgMS4xMiAwIDAgMC0xLjU0OSAwIDIuNSAyLjUgMCAwIDEtMy40NTEgMCAxLjEyIDEuMTIgMCAwIDAtMS41NDggMCAyLjUgMi41IDAgMCAxLTMuNDUyIDAgMS4xMiAxLjEyIDAgMCAwLTEuNTQ5IDAgMi41IDIuNSAwIDAgMS0zLjc3LTMuMjQ4bDIuODg5LTQuMTg0QTIgMiAwIDAgMSA3IDJoMTBhMiAyIDAgMCAxIDEuNjUzLjg3M2wyLjg5NSA0LjE5MmEyLjUgMi41IDAgMCAxLTMuNzc0IDMuMjQ0IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTAuOTVWMTlhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0ydi04LjA1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RyZXRjaC1ob3Jpem9udGFsLmpzCnZhciBTdHJldGNoSG9yaXpvbnRhbDsKdmFyIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLWhvcml6b250YWwuanMiKCkgewogICAgU3RyZXRjaEhvcml6b250YWwgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjYiLCB4OiAiMiIsIHk6ICI0Iiwgcng6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiNiIsIHg6ICIyIiwgeTogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RyZXRjaC12ZXJ0aWNhbC5qcwp2YXIgU3RyZXRjaFZlcnRpY2FsOwp2YXIgaW5pdF9zdHJldGNoX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJldGNoLXZlcnRpY2FsLmpzIigpIHsKICAgIFN0cmV0Y2hWZXJ0aWNhbCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjYiLCBoZWlnaHQ6ICIyMCIsIHg6ICI0IiwgeTogIjIiLCByeDogIjIiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiNiIsIGhlaWdodDogIjIwIiwgeDogIjE0IiwgeTogIjIiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzCnZhciBTdHJpa2V0aHJvdWdoOwp2YXIgaW5pdF9zdHJpa2V0aHJvdWdoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzIigpIHsKICAgIFN0cmlrZXRocm91Z2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA0SDlhMyAzIDAgMCAwLTIuODMgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAxMmE0IDQgMCAwIDEgMCA4SDYiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNCIsIHgyOiAiMjAiLCB5MTogIjEyIiwgeTI6ICIxMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1YnNjcmlwdC5qcwp2YXIgU3Vic2NyaXB0Owp2YXIgaW5pdF9zdWJzY3JpcHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1YnNjcmlwdC5qcyIoKSB7CiAgICBTdWJzY3JpcHQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDUgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDUtOCA4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIwIDE5aC00YzAtMS41LjQ0LTIgMS41LTIuNVMyMCAxNS4zMyAyMCAxNGMwLS40Ny0uMTctLjkzLS40OC0xLjI5YTIuMTEgMi4xMSAwIDAgMC0yLjYyLS40NGMtLjQyLjI0LS43NC42Mi0uOSAxLjA3IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLWRpbS5qcwp2YXIgU3VuRGltOwp2YXIgaW5pdF9zdW5fZGltID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tZGltLmpzIigpIHsKICAgIFN1bkRpbSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNGguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy42NTcgNi4zNDNoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjY1NyAxNy42NTdoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYuMzQzIDE3LjY1N2guMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNi4zNDMgNi4zNDNoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLW1lZGl1bS5qcwp2YXIgU3VuTWVkaXVtOwp2YXIgaW5pdF9zdW5fbWVkaXVtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tbWVkaXVtLmpzIigpIHsKICAgIFN1bk1lZGl1bSA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTguMzY0IDUuNjM2LS43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQzIDE3LjY1Ny0uNzA3LjcwNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjYzNiA1LjYzNi43MDcuNzA3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY1NyAxNy42NTcuNzA3LjcwNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1tb29uLmpzCnZhciBTdW5Nb29uOwp2YXIgaW5pdF9zdW5fbW9vbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLW1vb24uanMiKCkgewogICAgU3VuTW9vbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNC44MzcgMTYuMzg1YTYgNiAwIDEgMS03LjIyMy03LjIyMmMuNjI0LS4xNDcuOTcuNjYuNzE1IDEuMjQ4YTQgNCAwIDAgMCA1LjI2IDUuMjU5Yy41ODktLjI1NSAxLjM5Ni4wOSAxLjI0OC43MTUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJhNCA0IDAgMCAwLTQtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTEuMjU2IDEuMjU2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDEyaDIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tc25vdy5qcwp2YXIgU3VuU25vdzsKdmFyIGluaXRfc3VuX3Nub3cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1zbm93LmpzIigpIHsKICAgIFN1blNub3cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAyMXYtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA0VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOWEzIDMgMCAwIDAgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIwIDEuMjUtMi41TDE4IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDQgMS4yNSAyLjVMMTggNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyMS0zLTYgMS41LTNIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMy0zIDYgMS41IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwIDEwLTEuNSAyIDEuNSAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTMuNjQgMTguMzYuNy0uNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjM0IDYuMzQtLjctLjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4uanMKdmFyIFN1bjsKdmFyIGluaXRfc3VuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4uanMiKCkgewogICAgU3VuID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE3LjY2IDE3LjY2IDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMTJoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjM0IDE3LjY2LTEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyA0LjkzLTEuNDEgMS40MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnJpc2UuanMKdmFyIFN1bnJpc2U7CnZhciBpbml0X3N1bnJpc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnJpc2UuanMiKCkgewogICAgU3VucmlzZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDJ2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDEwLjkzIDEuNDEgMS40MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMThoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4wNyAxMC45My0xLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMjJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDYgNC00IDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOGE0IDQgMCAwIDAtOCAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vuc2V0LmpzCnZhciBTdW5zZXQ7CnZhciBpbml0X3N1bnNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vuc2V0LmpzIigpIHsKICAgIFN1bnNldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwVjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNC45MyAxMC45MyAxLjQxIDEuNDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxOGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE4aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMDcgMTAuOTMtMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIySDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgNi00IDQtNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE4YTQgNCAwIDAgMC04IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdXBlcnNjcmlwdC5qcwp2YXIgU3VwZXJzY3JpcHQ7CnZhciBpbml0X3N1cGVyc2NyaXB0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdXBlcnNjcmlwdC5qcyIoKSB7CiAgICBTdXBlcnNjcmlwdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTQgMTkgOC04IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDE5LTgtOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMCAxMmgtNGMwLTEuNS40NDItMiAxLjUtMi41UzIwIDguMzM0IDIwIDcuMDAyYzAtLjQ3Mi0uMTctLjkzLS40ODQtMS4yOWEyLjEwNSAyLjEwNSAwIDAgMC0yLjYxNy0uNDM2Yy0uNDIuMjM5LS43MzguNjE0LS44OTkgMS4wNiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3YXRjaC1ib29rLmpzCnZhciBTd2F0Y2hCb29rOwp2YXIgaW5pdF9zd2F0Y2hfYm9vayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dhdGNoLWJvb2suanMiKCkgewogICAgU3dhdGNoQm9vayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDE3YTQgNCAwIDAgMS04IDBWNWEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMloiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuNyAxM0gxOWEyIDIgMCAwIDEgMiAydjRhMiAyIDAgMCAxLTIgMkg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTSA3IDE3aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTExIDggMi4zLTIuM2EyLjQgMi40IDAgMCAxIDMuNDA0LjAwNEwxOC42IDcuNmEyLjQgMi40IDAgMCAxIC4wMjYgMy40MzRMOS45IDE5LjgiIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dpc3MtZnJhbmMuanMKdmFyIFN3aXNzRnJhbmM7CnZhciBpbml0X3N3aXNzX2ZyYW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd2lzcy1mcmFuYy5qcyIoKSB7CiAgICBTd2lzc0ZyYW5jID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjFWM2g4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZoOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCA5LjVoNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3aXRjaC1jYW1lcmEuanMKdmFyIFN3aXRjaENhbWVyYTsKdmFyIGluaXRfc3dpdGNoX2NhbWVyYSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dpdGNoLWNhbWVyYS5qcyIoKSB7CiAgICBTd2l0Y2hDYW1lcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMSAxOUg0YTIgMiAwIDAgMS0yLTJWN2EyIDIgMCAwIDEgMi0yaDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgNWg3YTIgMiAwIDAgMSAyIDJ2MTBhMiAyIDAgMCAxLTIgMmgtNSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4IDIyLTMtMyAzLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiAyIDMgMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qcwp2YXIgU3dvcmQ7CnZhciBpbml0X3N3b3JkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qcyIoKSB7CiAgICBTd29yZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDE5LTYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDIxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE2LTQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjUgMTcuNSAyMSA2VjNoLTNMNi41IDE0LjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZHMuanMKdmFyIFN3b3JkczsKdmFyIGluaXRfc3dvcmRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZHMuanMiKCkgewogICAgU3dvcmRzID0gWwogICAgICBbInBvbHlsaW5lIiwgeyBwb2ludHM6ICIxNC41IDE3LjUgMyA2IDMgMyA2IDMgMTcuNSAxNC41IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEzIiwgeDI6ICIxOSIsIHkxOiAiMTkiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE2IiwgeDI6ICIyMCIsIHkxOiAiMTYiLCB5MjogIjIwIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIyMSIsIHkxOiAiMjEiLCB5MjogIjE5IiB9XSwKICAgICAgWyJwb2x5bGluZSIsIHsgcG9pbnRzOiAiMTQuNSA2LjUgMTggMyAyMSAzIDIxIDYgMTcuNSA5LjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiNSIsIHgyOiAiOSIsIHkxOiAiMTQiLCB5MjogIjE4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjciLCB4MjogIjQiLCB5MTogIjE3IiwgeTI6ICIyMCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIzIiwgeDI6ICI1IiwgeTE6ICIxOSIsIHkyOiAiMjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zeXJpbmdlLmpzCnZhciBTeXJpbmdlOwp2YXIgaW5pdF9zeXJpbmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy9zeXJpbmdlLmpzIigpIHsKICAgIFN5cmluZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyIDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA3IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA5IDguNyAxOS4zYy0xIDEtMi41IDEtMy40IDBsLS42LS42Yy0xLTEtMS0yLjUgMC0zLjRMMTUgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDExIDQgNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDE5LTMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNCA0IDYgNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLTIuanMKdmFyIFRhYmxlMjsKdmFyIGluaXRfdGFibGVfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtMi5qcyIoKSB7CiAgICBUYWJsZTIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk05IDNINWEyIDIgMCAwIDAtMiAydjRtNi02aDEwYTIgMiAwIDAgMSAyIDJ2NE05IDN2MThtMCAwaDEwYTIgMiAwIDAgMCAyLTJWOU05IDIxSDVhMiAyIDAgMCAxLTItMlY5bTAgMGgxOCIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLWNlbGxzLW1lcmdlLmpzCnZhciBUYWJsZUNlbGxzTWVyZ2U7CnZhciBpbml0X3RhYmxlX2NlbGxzX21lcmdlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1tZXJnZS5qcyIoKSB7CiAgICBUYWJsZUNlbGxzTWVyZ2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMXYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5VjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDloMTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1zcGxpdC5qcwp2YXIgVGFibGVDZWxsc1NwbGl0Owp2YXIgaW5pdF90YWJsZV9jZWxsc19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY2VsbHMtc3BsaXQuanMiKCkgewogICAgVGFibGVDZWxsc1NwbGl0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTVWOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE1aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOWgxOCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLW9mLWNvbnRlbnRzLmpzCnZhciBUYWJsZU9mQ29udGVudHM7CnZhciBpbml0X3RhYmxlX29mX2NvbnRlbnRzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1vZi1jb250ZW50cy5qcyIoKSB7CiAgICBUYWJsZU9mQ29udGVudHMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEyaC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jb2x1bW5zLXNwbGl0LmpzCnZhciBUYWJsZUNvbHVtbnNTcGxpdDsKdmFyIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY29sdW1ucy1zcGxpdC5qcyIoKSB7CiAgICBUYWJsZUNvbHVtbnNTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDNoNmEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxNWgtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAzaC0yYTIgMiAwIDAgMC0yIDJ2MTRhMiAyIDAgMCAwIDIgMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDloLTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAzdjE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtcHJvcGVydGllcy5qcwp2YXIgVGFibGVQcm9wZXJ0aWVzOwp2YXIgaW5pdF90YWJsZV9wcm9wZXJ0aWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1wcm9wZXJ0aWVzLmpzIigpIHsKICAgIFRhYmxlUHJvcGVydGllcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE1SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1yb3dzLXNwbGl0LmpzCnZhciBUYWJsZVJvd3NTcGxpdDsKdmFyIGluaXRfdGFibGVfcm93c19zcGxpdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtcm93cy1zcGxpdC5qcyIoKSB7CiAgICBUYWJsZVJvd3NTcGxpdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMjJ2LTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTBoMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCAxMGgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAyMnYtNmEyIDIgMTM1IDAgMSAyLTJoMTRhMiAyIDQ1IDAgMSAyIDJ2NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJ2MmEyIDIgNDUgMCAwIDIgMmgxNGEyIDIgMTM1IDAgMCAyLTJWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEwaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMnYtOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDJ2NCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLmpzCnZhciBUYWJsZTsKdmFyIGluaXRfdGFibGUyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS5qcyIoKSB7CiAgICBUYWJsZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2MTgiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTVoMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXQtc21hcnRwaG9uZS5qcwp2YXIgVGFibGV0U21hcnRwaG9uZTsKdmFyIGluaXRfdGFibGV0X3NtYXJ0cGhvbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC1zbWFydHBob25lLmpzIigpIHsKICAgIFRhYmxldFNtYXJ0cGhvbmUgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxMCIsIGhlaWdodDogIjE0IiwgeDogIjMiLCB5OiAiOCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDRhMiAyIDAgMCAxIDItMmgxMmEyIDIgMCAwIDEgMiAydjE2YTIgMiAwIDAgMS0yIDJoLTIuNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qcwp2YXIgVGFibGV0Owp2YXIgaW5pdF90YWJsZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qcyIoKSB7CiAgICBUYWJsZXQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjIwIiwgeDogIjQiLCB5OiAiMiIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMiIsIHgyOiAiMTIuMDEiLCB5MTogIjE4IiwgeTI6ICIxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanMKdmFyIFRhYmxldHM7CnZhciBpbml0X3RhYmxldHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanMiKCkgewogICAgVGFibGV0cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNyIsIGN5OiAiNyIsIHI6ICI1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE3IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTdoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMy40NiAxMC41NCA3LjA4LTcuMDgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWcuanMKdmFyIFRhZzI7CnZhciBpbml0X3RhZyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFnLmpzIigpIHsKICAgIFRhZzIgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMi41ODYgMi41ODZBMiAyIDAgMCAwIDExLjE3MiAySDRhMiAyIDAgMCAwLTIgMnY3LjE3MmEyIDIgMCAwIDAgLjU4NiAxLjQxNGw4LjcwNCA4LjcwNGEyLjQyNiAyLjQyNiAwIDAgMCAzLjQyIDBsNi41OC02LjU4YTIuNDI2IDIuNDI2IDAgMCAwIDAtMy40MnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzCnZhciBUYWdzOwp2YXIgaW5pdF90YWdzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzIigpIHsKICAgIFRhZ3MgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMy4xNzIgMmEyIDIgMCAwIDEgMS40MTQuNTg2bDYuNzEgNi43MWEyLjQgMi40IDAgMCAxIDAgMy40MDhsLTQuNTkyIDQuNTkyYTIuNCAyLjQgMCAwIDEtMy40MDggMGwtNi43MS02LjcxQTIgMiAwIDAgMSA2IDkuMTcyVjNhMSAxIDAgMCAxIDEtMXoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA3djYuMTcyYTIgMiAwIDAgMCAuNTg2IDEuNDE0bDYuNzEgNi43MWEyLjQgMi40IDAgMCAwIDMuMTkxLjE5MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwLjUiLCBjeTogIjYuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0xLmpzCnZhciBUYWxseTE7CnZhciBpbml0X3RhbGx5XzEgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTEuanMiKCkgewogICAgVGFsbHkxID0gW1sicGF0aCIsIHsgZDogIk00IDR2MTYiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktMi5qcwp2YXIgVGFsbHkyOwp2YXIgaW5pdF90YWxseV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0yLmpzIigpIHsKICAgIFRhbGx5MiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0zLmpzCnZhciBUYWxseTM7CnZhciBpbml0X3RhbGx5XzMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTMuanMiKCkgewogICAgVGFsbHkzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNC5qcwp2YXIgVGFsbHk0Owp2YXIgaW5pdF90YWxseV80ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS00LmpzIigpIHsKICAgIFRhbGx5NCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNS5qcwp2YXIgVGFsbHk1Owp2YXIgaW5pdF90YWxseV81ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS01LmpzIigpIHsKICAgIFRhbGx5NSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgNHYxNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA0djE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDYgMiAxOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbmdlbnQuanMKdmFyIFRhbmdlbnQ7CnZhciBpbml0X3RhbmdlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbmdlbnQuanMiKCkgewogICAgVGFuZ2VudCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41OSA1LjQxIDUuNDEgMTUuNTkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICIxNyIsIHI6ICIyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIycy00LTktMS41LTExLjVTMjIgMTIgMjIgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YXJnZXQuanMKdmFyIFRhcmdldDsKdmFyIGluaXRfdGFyZ2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90YXJnZXQuanMiKCkgewogICAgVGFyZ2V0ID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzCnZhciBUZWxlc2NvcGU7CnZhciBpbml0X3RlbGVzY29wZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzIigpIHsKICAgIFRlbGVzY29wZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTEwLjA2NSAxMi40OTMtNi4xOCAxLjMxOGEuOTM0LjkzNCAwIDAgMS0xLjEwOC0uNzAybC0uNTM3LTIuMTVhMS4wNyAxLjA3IDAgMCAxIC42OTEtMS4yNjVsMTMuNTA0LTQuNDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNTYgMTEuNzQ3IDQuMzMyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMjEtMy4xMDUtNi4yMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNi40ODUgNS45NGEyIDIgMCAwIDEgMS40NTUtMi40MjVsMS4wOS0uMjcyYTEgMSAwIDAgMSAxLjIxMi43MjdsMS41MTUgNi4wNmExIDEgMCAwIDEtLjcyNyAxLjIxM2wtMS4wOS4yNzJhMiAyIDAgMCAxLTIuNDI1LTEuNDU1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02LjE1OCA4LjYzMyAxLjExNCA0LjQ1NiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDIxIDMuMTA1LTYuMjEiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTMiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQtdHJlZS5qcwp2YXIgVGVudFRyZWU7CnZhciBpbml0X3RlbnRfdHJlZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC10cmVlLmpzIigpIHsKICAgIFRlbnRUcmVlID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICI0IiwgY3k6ICI0IiwgcjogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQgNSAzLTMgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDEwIDMtMyAzIDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNEg3bC01IDhoMjBaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTR2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE0IDUgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQuanMKdmFyIFRlbnQ7CnZhciBpbml0X3RlbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RlbnQuanMiKCkgewogICAgVGVudCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuNSAyMSAxNCAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwLjUgMjEgMTAgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS41IDIxIDEyIDE1bC0zLjUgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxaDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlLWRpYWdvbmFsLmpzCnZhciBUZXN0VHViZURpYWdvbmFsOwp2YXIgaW5pdF90ZXN0X3R1YmVfZGlhZ29uYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS1kaWFnb25hbC5qcyIoKSB7CiAgICBUZXN0VHViZURpYWdvbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNyA2LjgyIDIxLjE4YTIuODMgMi44MyAwIDAgMS0zLjk5LS4wMWEyLjgzIDIuODMgMCAwIDEgMC00TDE3IDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMiA2IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTZINCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzCnZhciBUZXJtaW5hbDsKdmFyIGluaXRfdGVybWluYWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzIigpIHsKICAgIFRlcm1pbmFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTloOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDE3IDYtNi02LTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXN0LXR1YmUuanMKdmFyIFRlc3RUdWJlOwp2YXIgaW5pdF90ZXN0X3R1YmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS5qcyIoKSB7CiAgICBUZXN0VHViZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0LjUgMnYxNy41YzAgMS40LTEuMSAyLjUtMi41IDIuNWMtMS40IDAtMi41LTEuMS0yLjUtMi41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNC41IDE2aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlcy5qcwp2YXIgVGVzdFR1YmVzOwp2YXIgaW5pdF90ZXN0X3R1YmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXN0LXR1YmVzLmpzIigpIHsKICAgIFRlc3RUdWJlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMnYxNy41QTIuNSAyLjUgMCAwIDEgNi41IDIyQTIuNSAyLjUgMCAwIDEgNCAxOS41VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMnYxNy41YTIuNSAyLjUgMCAwIDEtMi41IDIuNWEyLjUgMi41IDAgMCAxLTIuNS0yLjVWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDJoNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyaDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxNkg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE2aC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1jZW50ZXIuanMKdmFyIFRleHRBbGlnbkNlbnRlcjsKdmFyIGluaXRfdGV4dF9hbGlnbl9jZW50ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tY2VudGVyLmpzIigpIHsKICAgIFRleHRBbGlnbkNlbnRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxMkg3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE5SDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWVuZC5qcwp2YXIgVGV4dEFsaWduRW5kOwp2YXIgaW5pdF90ZXh0X2FsaWduX2VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1lbmQuanMiKCkgewogICAgVGV4dEFsaWduRW5kID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgNUgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlINyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tanVzdGlmeS5qcwp2YXIgVGV4dEFsaWduSnVzdGlmeTsKdmFyIGluaXRfdGV4dF9hbGlnbl9qdXN0aWZ5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWp1c3RpZnkuanMiKCkgewogICAgVGV4dEFsaWduSnVzdGlmeSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTloMTgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLXN0YXJ0LmpzCnZhciBUZXh0QWxpZ25TdGFydDsKdmFyIGluaXRfdGV4dF9hbGlnbl9zdGFydCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1zdGFydC5qcyIoKSB7CiAgICBUZXh0QWxpZ25TdGFydCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDE5SDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci1pbnB1dC5qcwp2YXIgVGV4dEN1cnNvcklucHV0Owp2YXIgaW5pdF90ZXh0X2N1cnNvcl9pbnB1dCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1jdXJzb3ItaW5wdXQuanMiKCkgewogICAgVGV4dEN1cnNvcklucHV0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLTFhMiAyIDAgMCAxLTItMiAyIDIgMCAwIDEtMiAySDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgOGg3YTIgMiAwIDAgMSAyIDJ2NGEyIDIgMCAwIDEtMiAyaC03IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTZINGEyIDIgMCAwIDEtMi0ydi00YTIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDRoMWEyIDIgMCAwIDEgMiAyIDIgMiAwIDAgMSAyLTJoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDZ2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci5qcwp2YXIgVGV4dEN1cnNvcjsKdmFyIGluaXRfdGV4dF9jdXJzb3IgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtY3Vyc29yLmpzIigpIHsKICAgIFRleHRDdXJzb3IgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAyMmgtMWE0IDQgMCAwIDEtNC00VjZhNCA0IDAgMCAxIDQtNGgxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJoMWE0IDQgMCAwIDAgNC00di0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMmgxYTQgNCAwIDAgMSA0IDR2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtcXVvdGUuanMKdmFyIFRleHRRdW90ZTsKdmFyIGluaXRfdGV4dF9xdW90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1xdW90ZS5qcyIoKSB7CiAgICBUZXh0UXVvdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyA1SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTJIOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxOUg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgMTJ2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtaW5pdGlhbC5qcwp2YXIgVGV4dEluaXRpYWw7CnZhciBpbml0X3RleHRfaW5pdGlhbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1pbml0aWFsLmpzIigpIHsKICAgIFRleHRJbml0aWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgNWg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDEyaDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxOWgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zIDEyIDMuNTUzLTcuNzI0YS41LjUgMCAwIDEgLjg5NCAwTDExIDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMuOTIgMTBoNi4xNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtc2VhcmNoLmpzCnZhciBUZXh0U2VhcmNoOwp2YXIgaW5pdF90ZXh0X3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1zZWFyY2guanMiKCkgewogICAgVGV4dFNlYXJjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDVIMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMkgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5SDMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTUiLCByOiAiMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAxOS0xLjktMS45IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1zZWxlY3QuanMKdmFyIFRleHRTZWxlY3Q7CnZhciBpbml0X3RleHRfc2VsZWN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXNlbGVjdC5qcyIoKSB7CiAgICBUZXh0U2VsZWN0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjFoMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAzaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgM2EyIDIgMCAwIDEgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTlhMiAyIDAgMCAxLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA5djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgOXYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMjFhMiAyIDAgMCAxLTItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDNhMiAyIDAgMCAwLTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDEyaDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTZoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDhoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDIxaDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAzaDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVhdGVyLmpzCnZhciBUaGVhdGVyOwp2YXIgaW5pdF90aGVhdGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVhdGVyLmpzIigpIHsKICAgIFRoZWF0ZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEwczMtMyAzLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTBzLTMtMy0zLTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMmMwIDQuNC0zLjYgOC04IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMmMwIDQuNCAzLjYgOCA4IDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMHMyIDIgMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDEwcy0yIDItMiA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTVoOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIydi0xYTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMjJ2LTFhMiAyIDAgMCAxIDItMmg0YTIgMiAwIDAgMSAyIDJ2MSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtd3JhcC5qcwp2YXIgVGV4dFdyYXA7CnZhciBpbml0X3RleHRfd3JhcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC13cmFwLmpzIigpIHsKICAgIFRleHRXcmFwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTYtMyAzIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDEyaDE0LjVhMSAxIDAgMCAxIDAgN0gxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDE5aDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA1aDE4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXItc25vd2ZsYWtlLmpzCnZhciBUaGVybW9tZXRlclNub3dmbGFrZTsKdmFyIGluaXRfdGhlcm1vbWV0ZXJfc25vd2ZsYWtlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zbm93Zmxha2UuanMiKCkgewogICAgVGhlcm1vbWV0ZXJTbm93Zmxha2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAyMC0xLjI1LTIuNUw2IDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDQgOC43NSA2LjUgNiA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjU4NSAxNUgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEyaDYuNUwxMCA5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00IDEwIDEuNSAyTDQgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAyMSAzLTYtMS41LTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNyAzIDMgNmgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXItc3VuLmpzCnZhciBUaGVybW9tZXRlclN1bjsKdmFyIGluaXRfdGhlcm1vbWV0ZXJfc3VuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aGVybW9tZXRlci1zdW4uanMiKCkgewogICAgVGhlcm1vbWV0ZXJTdW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOGE0IDQgMCAwIDAtMS42NDUgNy42NDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDE0LjU0YTQgNCAwIDEgMS00IDBWNGEyIDIgMCAwIDEgNCAweiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm00LjkzIDQuOTMgMS40MSAxLjQxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYuMzQgMTcuNjYtMS40MSAxLjQxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXIuanMKdmFyIFRoZXJtb21ldGVyOwp2YXIgaW5pdF90aGVybW9tZXRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlcm1vbWV0ZXIuanMiKCkgewogICAgVGhlcm1vbWV0ZXIgPSBbWyJwYXRoIiwgeyBkOiAiTTE0IDR2MTAuNTRhNCA0IDAgMSAxLTQgMFY0YTIgMiAwIDAgMSA0IDBaIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RodW1icy1kb3duLmpzCnZhciBUaHVtYnNEb3duOwp2YXIgaW5pdF90aHVtYnNfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLWRvd24uanMiKCkgewogICAgVGh1bWJzRG93biA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTkgMTguMTIgMTAgMTRINC4xN2EyIDIgMCAwIDEtMS45Mi0yLjU2bDIuMzMtOEEyIDIgMCAwIDEgNi41IDJIMjBhMiAyIDAgMCAxIDIgMnY4YTIgMiAwIDAgMS0yIDJoLTIuNzZhMiAyIDAgMCAwLTEuNzkgMS4xMUwxMiAyMmEzLjEzIDMuMTMgMCAwIDEtMy0zLjg4WiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxNFYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLXVwLmpzCnZhciBUaHVtYnNVcDsKdmFyIGluaXRfdGh1bWJzX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aHVtYnMtdXAuanMiKCkgewogICAgVGh1bWJzVXAgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNSA1Ljg4IDE0IDEwaDUuODNhMiAyIDAgMCAxIDEuOTIgMi41NmwtMi4zMyA4QTIgMiAwIDAgMSAxNy41IDIySDRhMiAyIDAgMCAxLTItMnYtOGEyIDIgMCAwIDEgMi0yaDIuNzZhMiAyIDAgMCAwIDEuNzktMS4xMUwxMiAyYTMuMTMgMy4xMyAwIDAgMSAzIDMuODhaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTB2MTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtY2hlY2suanMKdmFyIFRpY2tldENoZWNrOwp2YXIgaW5pdF90aWNrZXRfY2hlY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1jaGVjay5qcyIoKSB7CiAgICBUaWNrZXRDaGVjayA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LW1pbnVzLmpzCnZhciBUaWNrZXRNaW51czsKdmFyIGluaXRfdGlja2V0X21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtbWludXMuanMiKCkgewogICAgVGlja2V0TWludXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wZXJjZW50LmpzCnZhciBUaWNrZXRQZXJjZW50Owp2YXIgaW5pdF90aWNrZXRfcGVyY2VudCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXBlcmNlbnQuanMiKCkgewogICAgVGlja2V0UGVyY2VudCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAxIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDEgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA5aC4wMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA5LTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNWguMDEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtcGx1cy5qcwp2YXIgVGlja2V0UGx1czsKdmFyIGluaXRfdGlja2V0X3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wbHVzLmpzIigpIHsKICAgIFRpY2tldFBsdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDlhMyAzIDAgMCAxIDAgNnYyYTIgMiAwIDAgMCAyIDJoMTZhMiAyIDAgMCAwIDItMnYtMmEzIDMgMCAwIDEgMC02VjdhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTJoNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA5djYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtc2xhc2guanMKdmFyIFRpY2tldFNsYXNoOwp2YXIgaW5pdF90aWNrZXRfc2xhc2ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1zbGFzaC5qcyIoKSB7CiAgICBUaWNrZXRTbGFzaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgOWEzIDMgMCAwIDEgMCA2djJhMiAyIDAgMCAwIDIgMmgxNmEyIDIgMCAwIDAgMi0ydi0yYTMgMyAwIDAgMSAwLTZWN2EyIDIgMCAwIDAtMi0ySDRhMiAyIDAgMCAwLTIgMloiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDE0LjUgNS01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXguanMKdmFyIFRpY2tldFg7CnZhciBpbml0X3RpY2tldF94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQteC5qcyIoKSB7CiAgICBUaWNrZXRYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05LjUgMTQuNSA1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOS41IDkuNSA1IDUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanMKdmFyIFRpY2tldDsKdmFyIGluaXRfdGlja2V0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanMiKCkgewogICAgVGlja2V0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiA5YTMgMyAwIDAgMSAwIDZ2MmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ2LTJhMyAzIDAgMCAxIDAtNlY3YTIgMiAwIDAgMC0yLTJINGEyIDIgMCAwIDAtMiAyWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyA1djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTMgMTd2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMyAxMXYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy1wbGFuZS5qcwp2YXIgVGlja2V0c1BsYW5lOwp2YXIgaW5pdF90aWNrZXRzX3BsYW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXRzLXBsYW5lLmpzIigpIHsKICAgIFRpY2tldHNQbGFuZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUgMTdoMS4yMjdhMiAyIDAgMCAwIDEuMzQ1LS41MkwxOCAxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiAxMy41IDMuNzUuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0zLjE3MyA4LjE4IDExLTVhMiAyIDAgMCAxIDIuNjQ3Ljk5M0wxOC41NiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTBWOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDE0djEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxOXYyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI4Iiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qcwp2YXIgVGlja2V0czsKdmFyIGluaXRfdGlja2V0cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qcyIoKSB7CiAgICBUaWNrZXRzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMy4xNzMgOC4xOCAxMS01YTIgMiAwIDAgMSAyLjY0Ny45OTNMMTguNTYgOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEwVjgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNiAxNHYxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTl2MiIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjIiLCB5OiAiOCIsIHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLXJlc2V0LmpzCnZhciBUaW1lclJlc2V0Owp2YXIgaW5pdF90aW1lcl9yZXNldCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXItcmVzZXQuanMiKCkgewogICAgVGltZXJSZXNldCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNHYtNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDEzYTggOCAwIDAgMSA4LTcgOCA4IDAgMSAxLTUuMyAxNEw0IDE3LjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxN0g0djUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90aW1lci1vZmYuanMKdmFyIFRpbWVyT2ZmOwp2YXIgaW5pdF90aW1lcl9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLW9mZi5qcyIoKSB7CiAgICBUaW1lck9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDJoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00LjYgMTFhOCA4IDAgMCAwIDEuNyA4LjcgOCA4IDAgMCAwIDguNyAxLjciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNy40IDcuNGE4IDggMCAwIDEgMTAuMyAxIDggOCAwIDAgMSAuOSAxMC4yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxMnYtMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLmpzCnZhciBUaW1lcjI7CnZhciBpbml0X3RpbWVyMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXIuanMiKCkgewogICAgVGltZXIyID0gWwogICAgICBbImxpbmUiLCB7IHgxOiAiMTAiLCB4MjogIjE0IiwgeTE6ICIyIiwgeTI6ICIyIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjEyIiwgeDI6ICIxNSIsIHkxOiAiMTQiLCB5MjogIjExIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE0IiwgcjogIjgiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtbGVmdC5qcwp2YXIgVG9nZ2xlTGVmdDsKdmFyIGluaXRfdG9nZ2xlX2xlZnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1sZWZ0LmpzIigpIHsKICAgIFRvZ2dsZUxlZnQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtcmlnaHQuanMKdmFyIFRvZ2dsZVJpZ2h0Owp2YXIgaW5pdF90b2dnbGVfcmlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1yaWdodC5qcyIoKSB7CiAgICBUb2dnbGVSaWdodCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTUiLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNCIsIHg6ICIyIiwgeTogIjUiLCByeDogIjciIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2lsZXQuanMKdmFyIFRvaWxldDsKdmFyIGluaXRfdG9pbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2lsZXQuanMiKCkgewogICAgVG9pbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNyAxMmgxM2ExIDEgMCAwIDEgMSAxIDUgNSAwIDAgMS01IDVoLS41OThhLjUuNSAwIDAgMC0uNDI0Ljc2NWwxLjU0NCAyLjQ3YS41LjUgMCAwIDEtLjQyNC43NjVINS40MDJhLjUuNSAwIDAgMS0uNDI0LS43NjVMNyAxOCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE4YTUgNSAwIDAgMS01LTVWNGEyIDIgMCAwIDEgMi0yaDhhMiAyIDAgMCAxIDIgMnY4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbC1jYXNlLmpzCnZhciBUb29sQ2FzZTsKdmFyIGluaXRfdG9vbF9jYXNlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b29sLWNhc2UuanMiKCkgewogICAgVG9vbENhc2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWg0IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE0LjgxNyAxMC45OTUtLjk3MS0xLjQ1IDEuMDM0LTEuMjMyYTIgMiAwIDAgMC0yLjAyNS0zLjIzOGwtMS44Mi4zNjRMOS45MSAzLjg4NWEyIDIgMCAwIDAtMy42MjUuNzQ4TDYuMTQxIDYuNTVsLTEuNzI1LjQyNmEyIDIgMCAwIDAtLjE5IDMuNzU2bC42NTcuMjciCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTguODIyIDEwLjk5NSAyLjI2LTUuMzhhMSAxIDAgMCAwLS41NTctMS4zMThMMTYuOTU0IDIuOWExIDEgMCAwIDAtMS4yODEuNTMzbC0uOTI0IDIuMTIyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMTIuMDA2QTEgMSAwIDAgMSA0Ljk5NCAxMUgxOWExIDEgMCAwIDEgMSAxdjdhMiAyIDAgMCAxLTIgMkg2YTIgMiAwIDAgMS0yLTJ6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbGJveC5qcwp2YXIgVG9vbGJveDsKdmFyIGluaXRfdG9vbGJveCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9vbGJveC5qcyIoKSB7CiAgICBUb29sYm94ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJ2NCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNiA2YTIgMiAwIDAgMSAxLjQxNC41ODZsNCA0QTIgMiAwIDAgMSAyMiAxMnY3YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0ydi03YTIgMiAwIDAgMSAuNTg2LTEuNDE0bDQtNEEyIDIgMCAwIDEgOCA2eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2VjRhMiAyIDAgMCAwLTItMmgtNGEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEydjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzCnZhciBUb3JuYWRvOwp2YXIgaW5pdF90b3JuYWRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzIigpIHsKICAgIFRvcm5hZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSA0SDMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOEg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDEySDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTZoLTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMjBIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvcnVzLmpzCnZhciBUb3J1czsKdmFyIGluaXRfdG9ydXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvcnVzLmpzIigpIHsKICAgIFRvcnVzID0gWwogICAgICBbImVsbGlwc2UiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcng6ICIzIiwgcnk6ICIyIiB9XSwKICAgICAgWyJlbGxpcHNlIiwgeyBjeDogIjEyIiwgY3k6ICIxMi41Iiwgcng6ICIxMCIsIHJ5OiAiOC41IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQtb2ZmLmpzCnZhciBUb3VjaHBhZE9mZjsKdmFyIGluaXRfdG91Y2hwYWRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC1vZmYuanMiKCkgewogICAgVG91Y2hwYWRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMHYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42NTYgMTRIMjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAxNGgxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjBINGEyIDIgMCAwIDEtMi0yVjZhMiAyIDAgMCAxIDItMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjY1NiA0SDIwYTIgMiAwIDAgMSAyIDJ2MTAuMzQ0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQuanMKdmFyIFRvdWNocGFkOwp2YXIgaW5pdF90b3VjaHBhZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG91Y2hwYWQuanMiKCkgewogICAgVG91Y2hwYWQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE2IiwgeDogIjIiLCB5OiAiNCIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDE0aDIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDIwdi02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdG93ZXItY29udHJvbC5qcwp2YXIgVG93ZXJDb250cm9sOwp2YXIgaW5pdF90b3dlcl9jb250cm9sID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3dlci1jb250cm9sLmpzIigpIHsKICAgIFRvd2VyQ29udHJvbCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjIgMTIuMjcgMjAgNkg0bDEuOCA2LjI3YTEgMSAwIDAgMCAuOTUuNzNoMTAuNWExIDEgMCAwIDAgLjk2LS43M1oiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxM3Y5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIydi05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgNiAxIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgNi0xIDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgNlYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDJoLTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3ktYnJpY2suanMKdmFyIFRveUJyaWNrOwp2YXIgaW5pdF90b3lfYnJpY2sgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RveS1icmljay5qcyIoKSB7CiAgICBUb3lCcmljayA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTIiLCB4OiAiMyIsIHk6ICI4Iiwgcng6ICIxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDhWNWMwLS42LS40LTEtMS0xSDZhMSAxIDAgMCAwLTEgMXYzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDhWNWMwLS42LS40LTEtMS0xaC0zYTEgMSAwIDAgMC0xIDF2MyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWZmaWMtY29uZS5qcwp2YXIgVHJhZmZpY0NvbmU7CnZhciBpbml0X3RyYWZmaWNfY29uZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhZmZpYy1jb25lLmpzIigpIHsKICAgIFRyYWZmaWNDb25lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuMDUgMTAuOTY2YTUgMi41IDAgMCAxLTguMSAwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE2LjkyMyAxNC4wNDkgNC40OCAyLjA0YTEgMSAwIDAgMSAuMDAxIDEuODMxbC04LjU3NCAzLjlhMiAyIDAgMCAxLTEuNjYgMGwtOC41NzQtMy45MWExIDEgMCAwIDEgMC0xLjgzbDQuNDg0LTIuMDQiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOTQ5IDE0LjE0YTUgMi41IDAgMSAxLTkuOSAwTDEwLjA2MyAzLjVhMiAyIDAgMCAxIDMuODc0IDB6IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMTk0IDYuNTdhNSAyLjUgMCAwIDAgNS42MSAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhY3Rvci5qcwp2YXIgVHJhY3RvcjsKdmFyIGluaXRfdHJhY3RvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhY3Rvci5qcyIoKSB7CiAgICBUcmFjdG9yID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAgMTEgMTEgLjlhMSAxIDAgMCAxIC44IDEuMWwtLjY2NSA0LjE1OGExIDEgMCAwIDEtLjk4OC44NDJIMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMThoLTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggNWExIDEgMCAwIDAtMSAxdjUuNTczIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNGg4LjEyOWExIDEgMCAwIDEgLjk5Ljg2M0wxMyAxMS4yNDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMVY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTAuMVY0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxNSIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQtdHVubmVsLmpzCnZhciBUcmFpbkZyb250VHVubmVsOwp2YXIgaW5pdF90cmFpbl9mcm9udF90dW5uZWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LXR1bm5lbC5qcyIoKSB7CiAgICBUcmFpbkZyb250VHVubmVsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMlYxMmExMCAxMCAwIDEgMSAyMCAwdjEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDYuOHYxLjRhMyAyLjggMCAxIDEtNiAwVjYuOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgMTVoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDE5YTQgNCAwIDAgMS00LTR2LTNhNiA2IDAgMSAxIDEyIDB2M2E0IDQgMCAwIDEtNCA0WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm05IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSAxOSAyIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFpbi1mcm9udC5qcwp2YXIgVHJhaW5Gcm9udDsKdmFyIGluaXRfdHJhaW5fZnJvbnQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLWZyb250LmpzIigpIHsKICAgIFRyYWluRnJvbnQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDMuMVY3YTQgNCAwIDAgMCA4IDBWMy4xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTkgMTUtMS0xIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1IDE1IDEtMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE5Yy0yLjggMC01LTIuMi01LTV2LTRhOCA4IDAgMCAxIDE2IDB2NGMwIDIuOC0yLjIgNS01IDVaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTggMTktMiAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE5IDIgMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYWluLXRyYWNrLmpzCnZhciBUcmFpblRyYWNrOwp2YXIgaW5pdF90cmFpbl90cmFjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tdHJhY2suanMiKCkgewogICAgVHJhaW5UcmFjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMTcgMTcgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDE0IDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01IDExIDggOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDggOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTExIDUgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDIgOCA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjIgMjIgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYW0tZnJvbnQuanMKdmFyIFRyYW1Gcm9udDsKdmFyIGluaXRfdHJhbV9mcm9udCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbS1mcm9udC5qcyIoKSB7CiAgICBUcmFtRnJvbnQgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxNiIsIGhlaWdodDogIjE2IiwgeDogIjQiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDExaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDN2OCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDE5LTIgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAyMi0yLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAxNWguMDEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTVoLjAxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbnNnZW5kZXIuanMKdmFyIFRyYW5zZ2VuZGVyOwp2YXIgaW5pdF90cmFuc2dlbmRlciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhbnNnZW5kZXIuanMiKCkgewogICAgVHJhbnNnZW5kZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDIwaC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiA3LjE3IDcuMTciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA1LjM1NVYyaDMuMzU3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDItNy4xNyA3LjE3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNSA1IDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYXNoLTIuanMKdmFyIFRyYXNoMjsKdmFyIGluaXRfdHJhc2hfMiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2gtMi5qcyIoKSB7CiAgICBUcmFzaDIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxMXY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDExdjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgNnYxNGEyIDIgMCAwIDEtMiAySDdhMiAyIDAgMCAxLTItMlY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDZWNGEyIDIgMCAwIDEgMi0yaDRhMiAyIDAgMCAxIDIgMnYyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2guanMKdmFyIFRyYXNoOwp2YXIgaW5pdF90cmFzaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhc2guanMiKCkgewogICAgVHJhc2ggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSA2djE0YTIgMiAwIDAgMS0yIDJIN2EyIDIgMCAwIDEtMi0yVjYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA2aDE4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggNlY0YTIgMiAwIDAgMSAyLTJoNGEyIDIgMCAwIDEgMiAydjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLWRlY2lkdW91cy5qcwp2YXIgVHJlZURlY2lkdW91czsKdmFyIGluaXRfdHJlZV9kZWNpZHVvdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtZGVjaWR1b3VzLmpzIigpIHsKICAgIFRyZWVEZWNpZHVvdXMgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk04IDE5YTQgNCAwIDAgMS0yLjI0LTcuMzJBMy41IDMuNSAwIDAgMSA5IDYuMDNWNmEzIDMgMCAxIDEgNiAwdi4wNGEzLjUgMy41IDAgMCAxIDMuMjQgNS42NUE0IDQgMCAwIDEgMTYgMTlaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE5djMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLXBhbG0uanMKdmFyIFRyZWVQYWxtOwp2YXIgaW5pdF90cmVlX3BhbG0gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGFsbS5qcyIoKSB7CiAgICBUcmVlUGFsbSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDhjMC0yLjc2LTIuNDYtNS01LjUtNVMyIDUuMjQgMiA4aDJsMS0xIDEgMWg0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDcuMTRBNS44MiA1LjgyIDAgMCAxIDE2LjUgNmMzLjA0IDAgNS41IDIuMjQgNS41IDVoLTNsLTEtMS0xIDFoLTMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNS44OSA5LjcxYy0yLjE1IDIuMTUtMi4zIDUuNDctLjM1IDcuNDNsNC4yNC00LjI1LjctLjcuNzEtLjcxIDIuMTItMi4xMmMtMS45NS0xLjk2LTUuMjctMS44LTcuNDIuMzUiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEgMTUuNWMuNSAyLjUtLjE3IDQuNS0xIDYuNWg0YzItNS41LS41LTEyLTEtMTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlLXBpbmUuanMKdmFyIFRyZWVQaW5lOwp2YXIgaW5pdF90cmVlX3BpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtcGluZS5qcyIoKSB7CiAgICBUcmVlUGluZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTE3IDE0IDMgMy4zYTEgMSAwIDAgMS0uNyAxLjdINC43YTEgMSAwIDAgMS0uNy0xLjdMNyAxNGgtLjNhMSAxIDAgMCAxLS43LTEuN0w5IDloLS4yQTEgMSAwIDAgMSA4IDcuM0wxMiAzbDQgNC4zYTEgMSAwIDAgMS0uOCAxLjdIMTVsMyAzLjNhMSAxIDAgMCAxLS43IDEuN0gxN1oiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlcy5qcwp2YXIgVHJlZXM7CnZhciBpbml0X3RyZWVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVlcy5qcyIoKSB7CiAgICBUcmVlcyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEwdi4yQTMgMyAwIDAgMSA4LjkgMTZINWEzIDMgMCAwIDEtMS01LjhWMTBhMyAzIDAgMCAxIDYgMFoiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEzIDE5djMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTIgMTloOC4zYTEgMSAwIDAgMCAuNy0xLjdMMTggMTRoLjNhMSAxIDAgMCAwIC43LTEuN0wxNiA5aC4yYTEgMSAwIDAgMCAuOC0xLjdMMTMgM2wtMS40IDEuNSIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWxsby5qcwp2YXIgVHJlbGxvOwp2YXIgaW5pdF90cmVsbG8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWxsby5qcyIoKSB7CiAgICBUcmVsbG8gPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIxOCIsIGhlaWdodDogIjE4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIsIHJ5OiAiMiIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIzIiwgaGVpZ2h0OiAiOSIsIHg6ICI3IiwgeTogIjciIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMyIsIGhlaWdodDogIjUiLCB4OiAiMTQiLCB5OiAiNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLWRvd24uanMKdmFyIFRyZW5kaW5nRG93bjsKdmFyIGluaXRfdHJlbmRpbmdfZG93biA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctZG93bi5qcyIoKSB7CiAgICBUcmVuZGluZ0Rvd24gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxN2g2di02IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTguNS04LjUtNSA1TDIgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLXVwLWRvd24uanMKdmFyIFRyZW5kaW5nVXBEb3duOwp2YXIgaW5pdF90cmVuZGluZ191cF9kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy11cC1kb3duLmpzIigpIHsKICAgIFRyZW5kaW5nVXBEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQuODI4IDE0LjgyOCAyMSAyMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMSAxNnY1aC01IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDMtOSA5LTQtNC02IDYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgOFYzaC01IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctdXAuanMKdmFyIFRyZW5kaW5nVXA7CnZhciBpbml0X3RyZW5kaW5nX3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy11cC5qcyIoKSB7CiAgICBUcmVuZGluZ1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgN2g2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgNy04LjUgOC41LTUtNUwyIDE3IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtYWxlcnQuanMKdmFyIFRyaWFuZ2xlQWxlcnQ7CnZhciBpbml0X3RyaWFuZ2xlX2FsZXJ0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1hbGVydC5qcyIoKSB7CiAgICBUcmlhbmdsZUFsZXJ0ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEuNzMgMTgtOC0xNGEyIDIgMCAwIDAtMy40OCAwbC04IDE0QTIgMiAwIDAgMCA0IDIxaDE2YTIgMiAwIDAgMCAxLjczLTMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOXY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE3aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLWRhc2hlZC5qcwp2YXIgVHJpYW5nbGVEYXNoZWQ7CnZhciBpbml0X3RyaWFuZ2xlX2Rhc2hlZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtZGFzaGVkLmpzIigpIHsKICAgIFRyaWFuZ2xlRGFzaGVkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAuMTcgNC4xOTNhMiAyIDAgMCAxIDMuNjY2LjAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1Ljg3NCA3Ljc0MyAxIDEuNzMyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE4Ljg0OSAxMi45NTIgMSAxLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS44MjQgMTguMThhMiAyIDAgMCAxLTEuODM1IDIuODI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuMDI0IDIxYTIgMiAwIDAgMS0xLjgzOS0yLjgzOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm01LjEzNiAxMi45NTItMSAxLjczMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOC4xMDIgNy43NDMtMSAxLjczMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLXJpZ2h0LmpzCnZhciBUcmlhbmdsZVJpZ2h0Owp2YXIgaW5pdF90cmlhbmdsZV9yaWdodCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtcmlnaHQuanMiKCkgewogICAgVHJpYW5nbGVSaWdodCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE4YTIgMiAwIDAgMS0yIDJIM2MtMS4xIDAtMS4zLS42LS40LTEuM0wyMC40IDQuM2MuOS0uNyAxLjYtLjQgMS42LjdaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUuanMKdmFyIFRyaWFuZ2xlOwp2YXIgaW5pdF90cmlhbmdsZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUuanMiKCkgewogICAgVHJpYW5nbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMy43MyA0YTIgMiAwIDAgMC0zLjQ2IDBsLTggMTRBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuNzMtM1oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cm9waHkuanMKdmFyIFRyb3BoeTsKdmFyIGluaXRfdHJvcGh5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cm9waHkuanMiKCkgewogICAgVHJvcGh5ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTQuNjZ2MS42MjZhMiAyIDAgMCAxLS45NzYgMS42OTZBNSA1IDAgMCAwIDcgMjEuOTc4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE0LjY2djEuNjI2YTIgMiAwIDAgMCAuOTc2IDEuNjk2QTUgNSAwIDAgMSAxNyAyMS45NzgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggOWgxLjVhMSAxIDAgMCAwIDAtNUgxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk00IDIyaDE2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgOWE2IDYgMCAwIDAgMTIgMFYzYTEgMSAwIDAgMC0xLTFIN2ExIDEgMCAwIDAtMSAxeiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDlINC41YTEgMSAwIDAgMSAwLTVINiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RydWNrLWVsZWN0cmljLmpzCnZhciBUcnVja0VsZWN0cmljOwp2YXIgaW5pdF90cnVja19lbGVjdHJpYyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJ1Y2stZWxlY3RyaWMuanMiKCkgewogICAgVHJ1Y2tFbGVjdHJpYyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE5VjdhMiAyIDAgMCAwLTItMkg5IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE5SDkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTloMmExIDEgMCAwIDAgMS0xdi0zLjY1YTEgMSAwIDAgMC0uMjItLjYyTDE4LjMgOS4zOGExIDEgMCAwIDAtLjc4LS4zOEgxNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDEzdjVhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQgMyAyLjE1IDUuMTVhLjQ5NS40OTUgMCAwIDAgLjM1Ljg2aDIuMTVhLjQ3LjQ3IDAgMCAxIC4zNS44NkwzIDkuMDIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNyIsIGN5OiAiMTkiLCByOiAiMiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjE5IiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qcwp2YXIgVHJ1Y2s7CnZhciBpbml0X3RydWNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qcyIoKSB7CiAgICBUcnVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE0IDE4VjZhMiAyIDAgMCAwLTItMkg0YTIgMiAwIDAgMC0yIDJ2MTFhMSAxIDAgMCAwIDEgMWgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE4SDkiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk0xOSAxOGgyYTEgMSAwIDAgMCAxLTF2LTMuNjVhMSAxIDAgMCAwLS4yMi0uNjI0bC0zLjQ4LTQuMzVBMSAxIDAgMCAwIDE3LjUyIDhIMTQiIH0KICAgICAgXSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHVya2lzaC1saXJhLmpzCnZhciBUdXJraXNoTGlyYTsKdmFyIGluaXRfdHVya2lzaF9saXJhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJraXNoLWxpcmEuanMiKCkgewogICAgVHVya2lzaExpcmEgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSA0IDUgOSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA4LjUtMTAgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxMmE5IDkgMCAwIDEtOSA5VjMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJudGFibGUuanMKdmFyIFR1cm50YWJsZTsKdmFyIGluaXRfdHVybnRhYmxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJudGFibGUuanMiKCkgewogICAgVHVybnRhYmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMTIuMDFoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDh2NGE4IDggMCAwIDEtMS4wNyA0IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjEyIiwgcjogIjQiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjQiLCB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTYiLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJ0bGUuanMKdmFyIFR1cnRsZTsKdmFyIGluaXRfdHVydGxlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90dXJ0bGUuanMiKCkgewogICAgVHVydGxlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJtMTIgMTAgMiA0djNhMSAxIDAgMCAwIDEgMWgyYTEgMSAwIDAgMCAxLTF2LTNhOCA4IDAgMSAwLTE2IDB2M2ExIDEgMCAwIDAgMSAxaDJhMSAxIDAgMCAwIDEtMXYtM2wyLTRoNFoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC44MiA3LjkgOCAxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS4xOCA3LjkgMTIgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYuOTMgMTBIMjBhMiAyIDAgMCAxIDAgNEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYtbWluaW1hbC1wbGF5LmpzCnZhciBUdk1pbmltYWxQbGF5Owp2YXIgaW5pdF90dl9taW5pbWFsX3BsYXkgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwtcGxheS5qcyIoKSB7CiAgICBUdk1pbmltYWxQbGF5ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTUuMDMzIDkuNDRhLjY0Ny42NDcgMCAwIDEgMCAxLjEybC00LjA2NSAyLjM1MmEuNjQ1LjY0NSAwIDAgMS0uOTY4LS41NlY3LjY0OGEuNjQ1LjY0NSAwIDAgMSAuOTY3LS41NnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAyMWgxMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0IiwgeDogIjIiLCB5OiAiMyIsIHJ4OiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwuanMKdmFyIFR2TWluaW1hbDsKdmFyIGluaXRfdHZfbWluaW1hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYtbWluaW1hbC5qcyIoKSB7CiAgICBUdk1pbmltYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDIxaDEwIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjIwIiwgaGVpZ2h0OiAiMTQiLCB4OiAiMiIsIHk6ICIzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYuanMKdmFyIFR2Owp2YXIgaW5pdF90diA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHYuanMiKCkgewogICAgVHYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyAyLTUgNS01LTUiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNSIsIHg6ICIyIiwgeTogIjciLCByeDogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0Y2guanMKdmFyIFR3aXRjaDsKdmFyIGluaXRfdHdpdGNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90d2l0Y2guanMiKCkgewogICAgVHdpdGNoID0gW1sicGF0aCIsIHsgZDogIk0yMSAySDN2MTZoNXY0bDQtNGg1bDQtNFYyem0tMTAgOVY3bTUgNFY3IiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanMKdmFyIFR3aXR0ZXI7CnZhciBpbml0X3R3aXR0ZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanMiKCkgewogICAgVHdpdHRlciA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIyIDRzLS43IDIuMS0yIDMuNGMxLjYgMTAtOS40IDE3LjMtMTggMTEuNiAyLjIuMSA0LjQtLjYgNi0yQzMgMTUuNS41IDkuNiAzIDVjMi4yIDIuNiA1LjYgNC4xIDkgNC0uOS00LjIgNC02LjYgNy0zLjggMS4xIDAgMy0xLjIgMy0xLjJ6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdHlwZS1vdXRsaW5lLmpzCnZhciBUeXBlT3V0bGluZTsKdmFyIGluaXRfdHlwZV9vdXRsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLW91dGxpbmUuanMiKCkgewogICAgVHlwZU91dGxpbmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNCAxNi41YS41LjUgMCAwIDAgLjUuNWguNWEyIDIgMCAwIDEgMCA0SDlhMiAyIDAgMCAxIDAtNGguNWEuNS41IDAgMCAwIC41LS41di05YS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDAgMC0uNS41VjhhMiAyIDAgMCAxLTQgMFY1YTIgMiAwIDAgMSAyLTJoMTZhMiAyIDAgMCAxIDIgMnYzYTIgMiAwIDAgMS00IDB2LS41YS41LjUgMCAwIDAtLjUtLjVoLTNhLjUuNSAwIDAgMC0uNS41WiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R5cGUuanMKdmFyIFR5cGU7CnZhciBpbml0X3R5cGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R5cGUuanMiKCkgewogICAgVHlwZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDR2MTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA3VjVhMSAxIDAgMCAxIDEtMWgxNGExIDEgMCAwIDEgMSAxdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAyMGg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEtb2ZmLmpzCnZhciBVbWJyZWxsYU9mZjsKdmFyIGluaXRfdW1icmVsbGFfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS1vZmYuanMiKCkgewogICAgVW1icmVsbGFPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxM3Y3YTIgMiAwIDAgMCA0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjY1NiAxM2gyLjMzNmExIDEgMCAwIDAgLjk3LTEuMjc0IDEwLjI4NCAxMC4yODQgMCAwIDAtMTIuMDctNy41MSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNS45NjEgNS45NTdhMTAuMjggMTAuMjggMCAwIDAtMy45MjIgNS43NjlBMSAxIDAgMCAwIDMgMTNoMTAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS5qcwp2YXIgVW1icmVsbGE7CnZhciBpbml0X3VtYnJlbGxhID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bWJyZWxsYS5qcyIoKSB7CiAgICBVbWJyZWxsYSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEzdjdhMiAyIDAgMCAwIDQgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAuOTkyIDEzYTEgMSAwIDAgMCAuOTctMS4yNzQgMTAuMjg0IDEwLjI4NCAwIDAgMC0xOS45MjMgMEExIDEgMCAwIDAgMyAxM3oiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanMKdmFyIFVuZGVybGluZTsKdmFyIGluaXRfdW5kZXJsaW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanMiKCkgewogICAgVW5kZXJsaW5lID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNNiA0djZhNiA2IDAgMCAwIDEyIDBWNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI0IiwgeDI6ICIyMCIsIHkxOiAiMjAiLCB5MjogIjIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby0yLmpzCnZhciBVbmRvMjsKdmFyIGluaXRfdW5kb18yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLTIuanMiKCkgewogICAgVW5kbzIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk05IDE0IDQgOWw1LTUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCA5aDEwLjVhNS41IDUuNSAwIDAgMSA1LjUgNS41YTUuNSA1LjUgMCAwIDEtNS41IDUuNUgxMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZG8tZG90LmpzCnZhciBVbmRvRG90Owp2YXIgaW5pdF91bmRvX2RvdCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5kby1kb3QuanMiKCkgewogICAgVW5kb0RvdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC0xNS02LjdMMyAxMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjE3IiwgcjogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLmpzCnZhciBVbmRvOwp2YXIgaW5pdF91bmRvID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLmpzIigpIHsKICAgIFVuZG8gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDd2Nmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3YTkgOSAwIDAgMC05LTkgOSA5IDAgMCAwLTYgMi4zTDMgMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtaG9yaXpvbnRhbC5qcwp2YXIgVW5mb2xkSG9yaXpvbnRhbDsKdmFyIGluaXRfdW5mb2xkX2hvcml6b250YWwgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZm9sZC1ob3Jpem9udGFsLmpzIigpIHsKICAgIFVuZm9sZEhvcml6b250YWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMmg2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggMTJIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgOHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjB2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxNSAzLTMtMy0zIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTUgOS0zIDMgMyAzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5mb2xkLXZlcnRpY2FsLmpzCnZhciBVbmZvbGRWZXJ0aWNhbDsKdmFyIGluaXRfdW5mb2xkX3ZlcnRpY2FsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtdmVydGljYWwuanMiKCkgewogICAgVW5mb2xkVmVydGljYWwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAyMnYtNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiA4VjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNCAxMkgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwIDEySDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTJoLTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUgMTktMyAzLTMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNSA1LTMtMy0zIDMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmdyb3VwLmpzCnZhciBVbmdyb3VwOwp2YXIgaW5pdF91bmdyb3VwID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmdyb3VwLmpzIigpIHsKICAgIFVuZ3JvdXAgPSBbCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNiIsIHg6ICI1IiwgeTogIjQiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiOCIsIGhlaWdodDogIjYiLCB4OiAiMTEiLCB5OiAiMTQiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzCnZhciBVbml2ZXJzaXR5Owp2YXIgaW5pdF91bml2ZXJzaXR5ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzIigpIHsKICAgIFVuaXZlcnNpdHkgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNCAyMXYtM2EyIDIgMCAwIDAtNCAwdjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTggMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDE2aC4wMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiA3YTEgMSAwIDAgMC0xLTFoLTJhMiAyIDAgMCAxLTEuMTQzLS4zNTlMMTMuMTQzIDIuMzZhMiAyIDAgMCAwLTIuMjg2LS4wMDFMNi4xNDMgNS42NEEyIDIgMCAwIDEgNSA2SDNhMSAxIDAgMCAwLTEgMXYxMmEyIDIgMCAwIDAgMiAyaDE2YTIgMiAwIDAgMCAyLTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTJoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTZoLjAxIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEwIiwgcjogIjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmxpbmstMi5qcwp2YXIgVW5saW5rMjsKdmFyIGluaXRfdW5saW5rXzIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay0yLmpzIigpIHsKICAgIFVubGluazIgPSBbWyJwYXRoIiwgeyBkOiAiTTE1IDdoMmE1IDUgMCAwIDEgMCAxMGgtMm0tNiAwSDdBNSA1IDAgMCAxIDcgN2gyIiB9XV07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay5qcwp2YXIgVW5saW5rOwp2YXIgaW5pdF91bmxpbmsgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VubGluay5qcyIoKSB7CiAgICBVbmxpbmsgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIm0xOC44NCAxMi4yNSAxLjcyLTEuNzFoLS4wMmE1LjAwNCA1LjAwNCAwIDAgMC0uMTItNy4wNyA1LjAwNiA1LjAwNiAwIDAgMC02Ljk1IDBsLTEuNzIgMS43MSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAibTUuMTcgMTEuNzUtMS43MSAxLjcxYTUuMDA0IDUuMDA0IDAgMCAwIC4xMiA3LjA3IDUuMDA2IDUuMDA2IDAgMCAwIDYuOTUgMGwxLjcxLTEuNzEiIH0KICAgICAgXSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjgiLCB5MTogIjIiLCB5MjogIjUiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMiIsIHgyOiAiNSIsIHkxOiAiOCIsIHkyOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMTYiLCB5MTogIjE5IiwgeTI6ICIyMiIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxOSIsIHgyOiAiMjIiLCB5MTogIjE2IiwgeTI6ICIxNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VucGx1Zy5qcwp2YXIgVW5wbHVnOwp2YXIgaW5pdF91bnBsdWcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VucGx1Zy5qcyIoKSB7CiAgICBVbnBsdWcgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1IDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDMtMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgMjAuM2EyLjQgMi40IDAgMCAwIDMuNCAwTDEyIDE4bC02LTYtMi4zIDIuM2EyLjQgMi40IDAgMCAwIDAgMy40WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03LjUgMTMuNSAxMCAxMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC41IDE2LjUgMTMgMTQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTIgNiA2IDYgMi4zLTIuM2EyLjQgMi40IDAgMCAwIDAtMy40bC0yLjYtMi42YTIuNCAyLjQgMCAwIDAtMy40IDBaIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNiLmpzCnZhciBVc2I7CnZhciBpbml0X3VzYiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNiLmpzIigpIHsKICAgIFVzYiA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQiLCBjeTogIjIwIiwgcjogIjEiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNC43IDE5LjMgMTkgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMSAzLTMgMSAyIDJaIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkuMjYgNy42OCA1IDEybDIgNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMCAxNCA1IDIgMy41LTMuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOCAxMiAxLTEgMSAxLTEgMVoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanMKdmFyIFVwbG9hZDsKdmFyIGluaXRfdXBsb2FkID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanMiKCkgewogICAgVXBsb2FkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgM3YxMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNyA4LTUtNS01IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTV2NGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMnYtNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItY2hlY2suanMKdmFyIFVzZXJDaGVjazsKdmFyIGluaXRfdXNlcl9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1jaGVjay5qcyIoKSB7CiAgICBVc2VyQ2hlY2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxMSAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDIxdi0yYTQgNCAwIDAgMC00LTRINmE0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWNvZy5qcwp2YXIgVXNlckNvZzsKdmFyIGluaXRfdXNlcl9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItY29nLmpzIigpIHsKICAgIFVzZXJDb2cgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMCAxNUg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNC4zMDUgMTYuNTMuOTIzLS4zODIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTUuMjI4IDEzLjg1Mi0uOTIzLS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDEyLjIyOC0uMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYuODUyIDE3Ljc3Mi0uMzgzLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS4xNDggMTIuMjI4LjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjUzIDE4LjY5Ni0uMzgyLS45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDEzLjg1Mi45MjQtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuMTQ4LjkyNC4zODMiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTUiLCByOiAiMyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItbG9jay5qcwp2YXIgVXNlckxvY2s7CnZhciBpbml0X3VzZXJfbG9jayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1sb2NrLmpzIigpIHsKICAgIFVzZXJMb2NrID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjMgMTVIN2E0IDQgMCAwIDAtNCA0djIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTUgMTUuNVYxNGEyIDIgMCAwIDEgNCAwdjEuNSIgfV0sCiAgICAgIFsicmVjdCIsIHsgd2lkdGg6ICI4IiwgaGVpZ2h0OiAiNSIsIHg6ICIxMyIsIHk6ICIxNiIsIHJ4OiAiLjg5OSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItbWludXMuanMKdmFyIFVzZXJNaW51czsKdmFyIGluaXRfdXNlcl9taW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1taW51cy5qcyIoKSB7CiAgICBVc2VyTWludXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNiIsIHkxOiAiMTEiLCB5MjogIjExIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wZW4uanMKdmFyIFVzZXJQZW47CnZhciBpbml0X3VzZXJfcGVuID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBlbi5qcyIoKSB7CiAgICBVc2VyUGVuID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTEuNSAxNUg3YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiNyIsIHI6ICI0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wbHVzLmpzCnZhciBVc2VyUGx1czsKdmFyIGluaXRfdXNlcl9wbHVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBsdXMuanMiKCkgewogICAgVXNlclBsdXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOSIsIGN5OiAiNyIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE5IiwgeDI6ICIxOSIsIHkxOiAiOCIsIHkyOiAiMTQiIH1dLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLWNoZWNrLmpzCnZhciBVc2VyUm91bmRDaGVjazsKdmFyIGluaXRfdXNlcl9yb3VuZF9jaGVjayA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jaGVjay5qcyIoKSB7CiAgICBVc2VyUm91bmRDaGVjayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEzLjI5Mi02IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNiAxOSAyIDIgNC00IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jb2cuanMKdmFyIFVzZXJSb3VuZENvZzsKdmFyIGluaXRfdXNlcl9yb3VuZF9jb2cgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtY29nLmpzIigpIHsKICAgIFVzZXJSb3VuZENvZyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0LjMwNSAxOS41My45MjMtLjM4MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNS4yMjggMTYuODUyLS45MjMtLjM4MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMTUuMjI4LS4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi44NTIgMjAuNzcyLS4zODMuOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5LjE0OCAxNS4yMjguMzgzLS45MjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuNTMgMjEuNjk2LS4zODItLjkyNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMC40MzQtNy42MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yMC43NzIgMTYuODUyLjkyNC0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxOS4xNDguOTI0LjM4MyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOCIsIGN5OiAiMTgiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtbWludXMuanMKdmFyIFVzZXJSb3VuZE1pbnVzOwp2YXIgaW5pdF91c2VyX3JvdW5kX21pbnVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLW1pbnVzLmpzIigpIHsKICAgIFVzZXJSb3VuZE1pbnVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE5aC02IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wZW4uanMKdmFyIFVzZXJSb3VuZFBlbjsKdmFyIGluaXRfdXNlcl9yb3VuZF9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtcGVuLmpzIigpIHsKICAgIFVzZXJSb3VuZFBlbiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjgyMS03LjQ4NyIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wbHVzLmpzCnZhciBVc2VyUm91bmRQbHVzOwp2YXIgaW5pdF91c2VyX3JvdW5kX3BsdXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQtcGx1cy5qcyIoKSB7CiAgICBVc2VyUm91bmRQbHVzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMiAyMWE4IDggMCAwIDEgMTMuMjkyLTYiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE2djYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjIgMTloLTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXNlYXJjaC5qcwp2YXIgVXNlclJvdW5kU2VhcmNoOwp2YXIgaW5pdF91c2VyX3JvdW5kX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1zZWFyY2guanMiKCkgewogICAgVXNlclJvdW5kU2VhcmNoID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMCIsIGN5OiAiOCIsIHI6ICI1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjFhOCA4IDAgMCAxIDEwLjQzNC03LjYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTgiLCBjeTogIjE4IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjIgMjItMS45LTEuOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQuanMKdmFyIFVzZXJSb3VuZDsKdmFyIGluaXRfdXNlcl9yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC5qcyIoKSB7CiAgICBVc2VyUm91bmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMjFhOCA4IDAgMCAwLTE2IDAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXguanMKdmFyIFVzZXJSb3VuZFg7CnZhciBpbml0X3VzZXJfcm91bmRfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC14LmpzIigpIHsKICAgIFVzZXJSb3VuZFggPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDIxYTggOCAwIDAgMSAxMS44NzMtNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEwIiwgY3k6ICI4IiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTcgMTcgNSA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDE3LTUgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc2VhcmNoLmpzCnZhciBVc2VyU2VhcmNoOwp2YXIgaW5pdF91c2VyX3NlYXJjaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1zZWFyY2guanMiKCkgewogICAgVXNlclNlYXJjaCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMC4zIDE1SDdhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjE3IiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjEgMjEtMS45LTEuOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc3Rhci5qcwp2YXIgVXNlclN0YXI7CnZhciBpbml0X3VzZXJfc3RhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1zdGFyLmpzIigpIHsKICAgIFVzZXJTdGFyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTYuMDUxIDEyLjYxNmExIDEgMCAwIDEgMS45MDkuMDI0bC43MzcgMS40NTJhMSAxIDAgMCAwIC43MzcuNTM1bDEuNjM0LjI1NmExIDEgMCAwIDEgLjU4OCAxLjgwNmwtMS4xNzIgMS4xNjhhMSAxIDAgMCAwLS4yODIuODY2bC4yNTkgMS42MTNhMSAxIDAgMCAxLTEuNTQxIDEuMTM0bC0xLjQ2NS0uNzVhMSAxIDAgMCAwLS45MTIgMGwtMS40NjUuNzVhMSAxIDAgMCAxLTEuNTM5LTEuMTMzbC4yNTgtMS42MTNhMSAxIDAgMCAwLS4yODItLjg2NmwtMS4xNTYtMS4xNTNhMSAxIDAgMCAxIC41NzItMS44MjJsMS42MzMtLjI1NmExIDEgMCAwIDAgLjczNy0uNTM1eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDE1SDdhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIteC5qcwp2YXIgVXNlclg7CnZhciBpbml0X3VzZXJfeCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci14LmpzIigpIHsKICAgIFVzZXJYID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgMjF2LTJhNCA0IDAgMCAwLTQtNEg2YTQgNCAwIDAgMC00IDR2MiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjkiLCBjeTogIjciLCByOiAiNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNyIsIHgyOiAiMjIiLCB5MTogIjgiLCB5MjogIjEzIiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIyIiwgeDI6ICIxNyIsIHkxOiAiOCIsIHkyOiAiMTMiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLmpzCnZhciBVc2VyOwp2YXIgaW5pdF91c2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLmpzIigpIHsKICAgIFVzZXIgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOSAyMXYtMmE0IDQgMCAwIDAtNC00SDlhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjciLCByOiAiNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXJzLXJvdW5kLmpzCnZhciBVc2Vyc1JvdW5kOwp2YXIgaW5pdF91c2Vyc19yb3VuZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMtcm91bmQuanMiKCkgewogICAgVXNlcnNSb3VuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDIxYTggOCAwIDAgMC0xNiAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTAiLCBjeTogIjgiLCByOiAiNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAyMGMwLTMuMzctMi02LjUtNC04YTUgNSAwIDAgMC0uNDUtOC4zIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMuanMKdmFyIFVzZXJzOwp2YXIgaW5pdF91c2VycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlcnMuanMiKCkgewogICAgVXNlcnMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAyMXYtMmE0IDQgMCAwIDAtNC00SDZhNCA0IDAgMCAwLTQgNHYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDMuMTI4YTQgNCAwIDAgMSAwIDcuNzQ0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDIxdi0yYTQgNCAwIDAgMC0zLTMuODciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI5IiwgY3k6ICI3IiwgcjogIjQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91dGVuc2lscy1jcm9zc2VkLmpzCnZhciBVdGVuc2lsc0Nyb3NzZWQ7CnZhciBpbml0X3V0ZW5zaWxzX2Nyb3NzZWQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLWNyb3NzZWQuanMiKCkgewogICAgVXRlbnNpbHNDcm9zc2VkID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMi0yLjMgMi4zYTMgMyAwIDAgMCAwIDQuMmwxLjggMS44YTMgMyAwIDAgMCA0LjIgMEwyMiA4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDE1IDMuMyAzLjNhNC4yIDQuMiAwIDAgMCAwIDZsNy4zIDcuM2MuNy43IDIgLjcgMi44IDBMMTUgMTVabTAgMCA3IDciIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMi4xIDIxLjggNi40LTYuMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSA1LTcgNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzCnZhciBVdGVuc2lsczsKdmFyIGluaXRfdXRlbnNpbHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzIigpIHsKICAgIFV0ZW5zaWxzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMyAydjdjMCAxLjEuOSAyIDIgMmg0YTIgMiAwIDAgMCAyLTJWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDJ2MjAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgMTVWMmE1IDUgMCAwIDAtNSA1djZjMCAxLjEuOSAyIDIgMmgzWm0wIDB2NyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Zhbi5qcwp2YXIgVmFuOwp2YXIgaW5pdF92YW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Zhbi5qcyIoKSB7CiAgICBWYW4gPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMyA2djVhMSAxIDAgMCAwIDEgMWg2LjEwMmExIDEgMCAwIDEgLjcxMi4yOThsLjg5OC45MWExIDEgMCAwIDEgLjI4OC43MDJWMTdhMSAxIDAgMCAxLTEgMWgtMyIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDE4SDNhMSAxIDAgMCAxLTEtMVY4YTIgMiAwIDAgMSAyLTJoMTJjMS4xIDAgMi4xLjggMi40IDEuOGwxLjE3NiA0LjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSAxOGg1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTYiLCBjeTogIjE4IiwgcjogIjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3IiwgY3k6ICIxOCIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRpbGl0eS1wb2xlLmpzCnZhciBVdGlsaXR5UG9sZTsKdmFyIGluaXRfdXRpbGl0eV9wb2xlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy91dGlsaXR5LXBvbGUuanMiKCkgewogICAgVXRpbGl0eVBvbGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAydjIwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNWgyMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0zIDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDN2MiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAzdjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgM3YyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE5IDUtNyA3LTctNyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZhcmlhYmxlLmpzCnZhciBWYXJpYWJsZTsKdmFyIGluaXRfdmFyaWFibGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZhcmlhYmxlLmpzIigpIHsKICAgIFZhcmlhYmxlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMXMtNC0zLTQtOSA0LTkgNC05IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDNzNCAzIDQgOS00IDktNCA5IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjE1IiwgeDI6ICI5IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICI5IiwgeDI6ICIxNSIsIHkxOiAiOSIsIHkyOiAiMTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qcwp2YXIgVmF1bHQ7CnZhciBpbml0X3ZhdWx0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qcyIoKSB7CiAgICBWYXVsdCA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMTgiLCB4OiAiMyIsIHk6ICIzIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNy41IiwgY3k6ICI3LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSA3LjkgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE2LjUiLCBjeTogIjcuNSIsIHI6ICIuNSIsIGZpbGw6ICJjdXJyZW50Q29sb3IiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuNCAxMC42IDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICI3LjUiLCBjeTogIjE2LjUiLCByOiAiLjUiLCBmaWxsOiAiY3VycmVudENvbG9yIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTcuOSAxNi4xIDIuNy0yLjciIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNi41IiwgY3k6ICIxNi41IiwgcjogIi41IiwgZmlsbDogImN1cnJlbnRDb2xvciIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMy40IDEzLjQgMi43IDIuNyIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMiIsIHI6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVjdG9yLXNxdWFyZS5qcwp2YXIgVmVjdG9yU3F1YXJlOwp2YXIgaW5pdF92ZWN0b3Jfc3F1YXJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZWN0b3Itc3F1YXJlLmpzIigpIHsKICAgIFZlY3RvclNxdWFyZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjUgN2EyNCAyNCAwIDAgMSAwIDEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTQuNSA3YTI0IDI0IDAgMCAwIDAgMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxOS41YTI0IDI0IDAgMCAwIDEwIDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyA0LjVhMjQgMjQgMCAwIDEgMTAgMCIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE3IiwgeTogIjE3Iiwgd2lkdGg6ICI1IiwgaGVpZ2h0OiAiNSIsIHJ4OiAiMSIgfV0sCiAgICAgIFsicmVjdCIsIHsgeDogIjE3IiwgeTogIjIiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIxNyIsIHdpZHRoOiAiNSIsIGhlaWdodDogIjUiLCByeDogIjEiIH1dLAogICAgICBbInJlY3QiLCB7IHg6ICIyIiwgeTogIjIiLCB3aWR0aDogIjUiLCBoZWlnaHQ6ICI1Iiwgcng6ICIxIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVnYW4uanMKdmFyIFZlZ2FuOwp2YXIgaW5pdF92ZWdhbiA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVnYW4uanMiKCkgewogICAgVmVnYW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA4cTYgMCA2LTYtNiAwLTYgNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy40MSAzLjU5YTEwIDEwIDAgMSAwIDMgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDJhMjYuNiAyNi42IDAgMCAxIDEwIDIwYy45LTYuODIgMS41LTkuNSA0LTE0IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVuZXRpYW4tbWFzay5qcwp2YXIgVmVuZXRpYW5NYXNrOwp2YXIgaW5pdF92ZW5ldGlhbl9tYXNrID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW5ldGlhbi1tYXNrLmpzIigpIHsKICAgIFZlbmV0aWFuTWFzayA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDExYy0xLjUgMC0yLjUuNS0zIDIiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNCA2YTIgMiAwIDAgMC0yIDJ2NGE1IDUgMCAwIDAgNSA1IDggOCAwIDAgMSA1IDIgOCA4IDAgMCAxIDUtMiA1IDUgMCAwIDAgNS01VjhhMiAyIDAgMCAwLTItMmgtM2E4IDggMCAwIDAtNSAyIDggOCAwIDAgMC01LTJ6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTFjMS41IDAgMi41LjUgMyAyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMuanMKdmFyIFZlbnVzOwp2YXIgaW5pdF92ZW51cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMuanMiKCkgewogICAgVmVudXMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMTloNiIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI5IiwgcjogIjYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW51cy1hbmQtbWFycy5qcwp2YXIgVmVudXNBbmRNYXJzOwp2YXIgaW5pdF92ZW51c19hbmRfbWFycyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdmVudXMtYW5kLW1hcnMuanMiKCkgewogICAgVmVudXNBbmRNYXJzID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMjBoNCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNnY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDJoNHY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIxIDItNS40NiA1LjQ2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjExIiwgcjogIjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLW9mZi5qcwp2YXIgVmlicmF0ZU9mZjsKdmFyIGluaXRfdmlicmF0ZV9vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpYnJhdGUtb2ZmLmpzIigpIHsKICAgIFZpYnJhdGVPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDggMiAyLTIgMiAyIDItMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDgtMiAyIDIgMi0yIDIgMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTggOHYxMGMwIC41NS40NSAxIDEgMWg2Yy41NSAwIDEtLjQ1IDEtMXYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiAxMC4zNFY2YzAtLjU1LS40NS0xLTEtMWgtNC4zNCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzCnZhciBWaWJyYXRlOwp2YXIgaW5pdF92aWJyYXRlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzIigpIHsKICAgIFZpYnJhdGUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDggMiAyLTIgMiAyIDItMiAyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIyIDgtMiAyIDIgMi0yIDIgMiAyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICIxNCIsIHg6ICI4IiwgeTogIjUiLCByeDogIjEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlby1vZmYuanMKdmFyIFZpZGVvT2ZmOwp2YXIgaW5pdF92aWRlb19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLW9mZi5qcyIoKSB7CiAgICBWaWRlb09mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjY2IDZIMTRhMiAyIDAgMCAxIDIgMnYyLjVsNS4yNDgtMy4wNjJBLjUuNSAwIDAgMSAyMiA3Ljg3djguMTk2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDE2YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjhhMiAyIDAgMCAxIDItMmgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIgMiAyMCAyMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLmpzCnZhciBWaWRlbzsKdmFyIGluaXRfdmlkZW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZGVvLmpzIigpIHsKICAgIFZpZGVvID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTYgMTMgNS4yMjMgMy40ODJhLjUuNSAwIDAgMCAuNzc3LS40MTZWNy44N2EuNS41IDAgMCAwLS43NTItLjQzMkwxNiAxMC41IiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICI2Iiwgd2lkdGg6ICIxNCIsIGhlaWdodDogIjEyIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9pY2VtYWlsLmpzCnZhciBWb2ljZW1haWw7CnZhciBpbml0X3ZvaWNlbWFpbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9pY2VtYWlsLmpzIigpIHsKICAgIFZvaWNlbWFpbCA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiNiIsIGN5OiAiMTIiLCByOiAiNCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxMiIsIHI6ICI0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjYiLCB4MjogIjE4IiwgeTE6ICIxNiIsIHkyOiAiMTYiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanMKdmFyIFZpZGVvdGFwZTsKdmFyIGluaXRfdmlkZW90YXBlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanMiKCkgewogICAgVmlkZW90YXBlID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMjAiLCBoZWlnaHQ6ICIxNiIsIHg6ICIyIiwgeTogIjQiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMiA4aDIwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiMTQiLCByOiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDEyaDgiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxNiIsIGN5OiAiMTQiLCByOiAiMiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZXcuanMKdmFyIFZpZXc7CnZhciBpbml0X3ZpZXcgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZpZXcuanMiKCkgewogICAgVmlldyA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE3djJhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJ2LTIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjEgN1Y1YTIgMiAwIDAgMC0yLTJINWEyIDIgMCAwIDAtMiAydjIiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOC45NDQgMTIuMzNhMSAxIDAgMCAwIDAtLjY2IDcuNSA3LjUgMCAwIDAtMTMuODg4IDAgMSAxIDAgMCAwIDAgLjY2IDcuNSA3LjUgMCAwIDAgMTMuODg4IDAiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2xsZXliYWxsLmpzCnZhciBWb2xsZXliYWxsOwp2YXIgaW5pdF92b2xsZXliYWxsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2xsZXliYWxsLmpzIigpIHsKICAgIFZvbGxleWJhbGwgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS4xIDcuMWExNi41NSAxNi41NSAwIDAgMSAxMC45IDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTJhMTIuNiAxMi42IDAgMCAxLTguNyA1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2LjggMTMuNmExNi41NSAxNi41NSAwIDAgMS05IDcuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC43IDE3YTEyLjggMTIuOCAwIDAgMC04LjctNSAxMy4zIDEzLjMgMCAwIDEgMC0xMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02LjMgMy44YTE2LjU1IDE2LjU1IDAgMCAwIDEuOSAxMS41IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEyIiwgcjogIjEwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTEuanMKdmFyIFZvbHVtZTE7CnZhciBpbml0X3ZvbHVtZV8xID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtMS5qcyIoKSB7CiAgICBWb2x1bWUxID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgMCA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTIuanMKdmFyIFZvbHVtZTI7CnZhciBpbml0X3ZvbHVtZV8yID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtMi5qcyIoKSB7CiAgICBWb2x1bWUyID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTYgOWE1IDUgMCAwIDEgMCA2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5LjM2NCAxOC4zNjRhOSA5IDAgMCAwIDAtMTIuNzI4IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLW9mZi5qcwp2YXIgVm9sdW1lT2ZmOwp2YXIgaW5pdF92b2x1bWVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtb2ZmLmpzIigpIHsKICAgIFZvbHVtZU9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE2IDlhNSA1IDAgMCAxIC45NSAyLjI5MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS4zNjQgNS42MzZhOSA5IDAgMCAxIDEuODg5IDkuOTYiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTcgNy0uNTg3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OFYxMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk05LjgyOCA0LjE3MkEuNjg2LjY4NiAwIDAgMSAxMSA0LjY1N3YuNjg2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLXguanMKdmFyIFZvbHVtZVg7CnZhciBpbml0X3ZvbHVtZV94ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUteC5qcyIoKSB7CiAgICBWb2x1bWVYID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTEgNC43MDJhLjcwNS43MDUgMCAwIDAtMS4yMDMtLjQ5OEw2LjQxMyA3LjU4N0ExLjQgMS40IDAgMCAxIDUuNDE2IDhIM2ExIDEgMCAwIDAtMSAxdjZhMSAxIDAgMCAwIDEgMWgyLjQxNmExLjQgMS40IDAgMCAxIC45OTcuNDEzbDMuMzgzIDMuMzg0QS43MDUuNzA1IDAgMCAwIDExIDE5LjI5OHoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbImxpbmUiLCB7IHgxOiAiMjIiLCB4MjogIjE2IiwgeTE6ICI5IiwgeTI6ICIxNSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxNiIsIHgyOiAiMjIiLCB5MTogIjkiLCB5MjogIjE1IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLmpzCnZhciBWb2x1bWU7CnZhciBpbml0X3ZvbHVtZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLmpzIigpIHsKICAgIFZvbHVtZSA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExIDQuNzAyYS43MDUuNzA1IDAgMCAwLTEuMjAzLS40OThMNi40MTMgNy41ODdBMS40IDEuNCAwIDAgMSA1LjQxNiA4SDNhMSAxIDAgMCAwLTEgMXY2YTEgMSAwIDAgMCAxIDFoMi40MTZhMS40IDEuNCAwIDAgMSAuOTk3LjQxM2wzLjM4MyAzLjM4NEEuNzA1LjcwNSAwIDAgMCAxMSAxOS4yOTh6IgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm90ZS5qcwp2YXIgVm90ZTsKdmFyIGluaXRfdm90ZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvdm90ZS5qcyIoKSB7CiAgICBWb3RlID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxMiAyIDIgNC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgN2MwLTEuMS45LTIgMi0yaDEwYTIgMiAwIDAgMSAyIDJ2MTJINVY3WiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiAxOUgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LW1pbmltYWwuanMKdmFyIFdhbGxldE1pbmltYWw7CnZhciBpbml0X3dhbGxldF9taW5pbWFsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQtbWluaW1hbC5qcyIoKSB7CiAgICBXYWxsZXRNaW5pbWFsID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcgMTRoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgN2gxMmEyIDIgMCAwIDEgMiAydjEwYTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmgxNCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbGxldC1jYXJkcy5qcwp2YXIgV2FsbGV0Q2FyZHM7CnZhciBpbml0X3dhbGxldF9jYXJkcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LWNhcmRzLmpzIigpIHsKICAgIFdhbGxldENhcmRzID0gWwogICAgICBbInJlY3QiLCB7IHdpZHRoOiAiMTgiLCBoZWlnaHQ6ICIxOCIsIHg6ICIzIiwgeTogIjMiLCByeDogIjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMyA5YTIgMiAwIDAgMSAyLTJoMTRhMiAyIDAgMCAxIDIgMiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMgMTFoM2MuOCAwIDEuNi4zIDIuMS45bDEuMS45YzEuNiAxLjYgNC4xIDEuNiA1LjcgMGwxLjEtLjljLjUtLjUgMS4zLS45IDIuMS0uOUgyMSIgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanMKdmFyIFdhbGxldDsKdmFyIGluaXRfd2FsbGV0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanMiKCkgewogICAgV2FsbGV0ID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMTkgN1Y0YTEgMSAwIDAgMC0xLTFINWEyIDIgMCAwIDAgMCA0aDE1YTEgMSAwIDAgMSAxIDF2NGgtM2EyIDIgMCAwIDAgMCA0aDNhMSAxIDAgMCAwIDEtMXYtMmExIDEgMCAwIDAtMS0xIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNXYxNGEyIDIgMCAwIDAgMiAyaDE1YTEgMSAwIDAgMCAxLTF2LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanMKdmFyIFdhbGxwYXBlcjsKdmFyIGluaXRfd2FsbHBhcGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanMiKCkgewogICAgV2FsbHBhcGVyID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTd2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIxaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOSAxNyA2LjEtNi4xYTIgMiAwIDAgMSAyLjgxLjAxTDIyIDE1IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiOCIsIGN5OiAiOSIsIHI6ICIyIiB9XSwKICAgICAgWyJyZWN0IiwgeyB4OiAiMiIsIHk6ICIzIiwgd2lkdGg6ICIyMCIsIGhlaWdodDogIjE0Iiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FuZC1zcGFya2xlcy5qcwp2YXIgV2FuZFNwYXJrbGVzOwp2YXIgaW5pdF93YW5kX3NwYXJrbGVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YW5kLXNwYXJrbGVzLmpzIigpIHsKICAgIFdhbmRTcGFya2xlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAibTIxLjY0IDMuNjQtMS4yOC0xLjI4YTEuMjEgMS4yMSAwIDAgMC0xLjcyIDBMMi4zNiAxOC42NGExLjIxIDEuMjEgMCAwIDAgMCAxLjcybDEuMjggMS4yOGExLjIgMS4yIDAgMCAwIDEuNzIgMEwyMS42NCA1LjM2YTEuMiAxLjIgMCAwIDAgMC0xLjcyIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE0IDcgMyAzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgNnY0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDE0djQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnYyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgOEgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIxIDE2aC00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTExIDNIOSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbmQuanMKdmFyIFdhbmQ7CnZhciBpbml0X3dhbmQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhbmQuanMiKCkgewogICAgV2FuZCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDRWMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNSAxNnYtMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDloMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMCA5aDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOCAxMS44IDE5IDEzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE1IDloLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3LjggNi4yIDE5IDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMyAyMSA5LTkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIuMiA2LjIgMTEgNSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qcwp2YXIgV2FyZWhvdXNlOwp2YXIgaW5pdF93YXJlaG91c2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qcyIoKSB7CiAgICBXYXJlaG91c2UgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAyMVYxMGExIDEgMCAwIDAtMS0xSDdhMSAxIDAgMCAwLTEgMXYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY4YTIgMiAwIDAgMSAxLjEzMi0xLjgwM2w3Ljk1LTMuOTc0YTIgMiAwIDAgMSAxLjgzNyAwbDcuOTQ4IDMuOTc0QTIgMiAwIDAgMSAyMiA4eiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIk02IDEzaDEyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTYgMTdoMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXNoaW5nLW1hY2hpbmUuanMKdmFyIFdhc2hpbmdNYWNoaW5lOwp2YXIgaW5pdF93YXNoaW5nX21hY2hpbmUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhc2hpbmctbWFjaGluZS5qcyIoKSB7CiAgICBXYXNoaW5nTWFjaGluZSA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTMgNmgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE3IDZoLjAxIiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjE4IiwgaGVpZ2h0OiAiMjAiLCB4OiAiMyIsIHk6ICIyIiwgcng6ICIyIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjEzIiwgcjogIjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMThhMi41IDIuNSAwIDAgMCAwLTUgMi41IDIuNSAwIDAgMSAwLTUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXRjaC5qcwp2YXIgV2F0Y2g7CnZhciBpbml0X3dhdGNoID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXRjaC5qcyIoKSB7CiAgICBXYXRjaCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDEwdjIuMmwxLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xNi4xMyA3LjY2LS44MS00LjA1YTIgMiAwIDAgMC0yLTEuNjFoLTIuNjhhMiAyIDAgMCAwLTIgMS42MWwtLjc4IDQuMDUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNy44OCAxNi4zNi44IDRhMiAyIDAgMCAwIDIgMS42MWgyLjcyYTIgMiAwIDAgMCAyLTEuNjFsLjgxLTQuMDUiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTIiLCByOiAiNiIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWFycm93LWRvd24uanMKdmFyIFdhdmVzQXJyb3dEb3duOwp2YXIgaW5pdF93YXZlc19hcnJvd19kb3duID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1hcnJvdy1kb3duLmpzIigpIHsKICAgIFdhdmVzQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMTBMMTIgMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNiA2TDEyIDEwTDggNiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE1QzIuNiAxNS41IDMuMiAxNiA0LjUgMTZDNyAxNiA3IDE0IDkuNSAxNEMxMi4xIDE0IDExLjkgMTYgMTQuNSAxNkMxNyAxNiAxNyAxNCAxOS41IDE0QzIwLjggMTQgMjEuNCAxNC41IDIyIDE1IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMjFDMi42IDIxLjUgMy4yIDIyIDQuNSAyMkM3IDIyIDcgMjAgOS41IDIwQzEyLjEgMjAgMTEuOSAyMiAxNC41IDIyQzE3IDIyIDE3IDIwIDE5LjUgMjBDMjAuOCAyMCAyMS40IDIwLjUgMjIgMjEiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1hcnJvdy11cC5qcwp2YXIgV2F2ZXNBcnJvd1VwOwp2YXIgaW5pdF93YXZlc19hcnJvd191cCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtYXJyb3ctdXAuanMiKCkgewogICAgV2F2ZXNBcnJvd1VwID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMnY4IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTIgMTVjLjYuNSAxLjIgMSAyLjUgMSAyLjUgMCAyLjUtMiA1LTIgMi42IDAgMi40IDIgNSAyIDIuNSAwIDIuNS0yIDUtMiAxLjMgMCAxLjkuNSAyLjUgMSIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDIxYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtOCA2IDQtNCA0IDQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy1sYWRkZXIuanMKdmFyIFdhdmVzTGFkZGVyOwp2YXIgaW5pdF93YXZlc19sYWRkZXIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWxhZGRlci5qcyIoKSB7CiAgICBXYXZlc0xhZGRlciA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE5IDVhMiAyIDAgMCAwLTIgMnYxMSIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDE4Yy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxM2gxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDloMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOSA1YTIgMiAwIDAgMC0yIDJ2MTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy5qcwp2YXIgV2F2ZXM7CnZhciBpbml0X3dhdmVzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXZlcy5qcyIoKSB7CiAgICBXYXZlcyA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMiA2Yy42LjUgMS4yIDEgMi41IDFDNyA3IDcgNSA5LjUgNWMyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yIDEyYy42LjUgMS4yIDEgMi41IDEgMi41IDAgMi41LTIgNS0yIDIuNiAwIDIuNCAyIDUgMiAyLjUgMCAyLjUtMiA1LTIgMS4zIDAgMS45LjUgMi41IDEiCiAgICAgICAgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNMiAxOGMuNi41IDEuMiAxIDIuNSAxIDIuNSAwIDIuNS0yIDUtMiAyLjYgMCAyLjQgMiA1IDIgMi41IDAgMi41LTIgNS0yIDEuMyAwIDEuOS41IDIuNSAxIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F5cG9pbnRzLmpzCnZhciBXYXlwb2ludHM7CnZhciBpbml0X3dheXBvaW50cyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F5cG9pbnRzLmpzIigpIHsKICAgIFdheXBvaW50cyA9IFsKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjQuNSIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTAuMiA2LjMtMy45IDMuOSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjQuNSIsIGN5OiAiMTIiLCByOiAiMi41IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTJoMTAiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxOS41IiwgY3k6ICIxMiIsIHI6ICIyLjUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTMuOCAxNy43IDMuOS0zLjkiIH1dLAogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTkuNSIsIHI6ICIyLjUiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanMKdmFyIFdlYmNhbTsKdmFyIGluaXRfd2ViY2FtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanMiKCkgewogICAgV2ViY2FtID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMiIsIGN5OiAiMTAiLCByOiAiOCIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICIxMCIsIHI6ICIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMjJoMTAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjJ2LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLW9mZi5qcwp2YXIgV2ViaG9va09mZjsKdmFyIGluaXRfd2ViaG9va19vZmYgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlYmhvb2stb2ZmLmpzIigpIHsKICAgIFdlYmhvb2tPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNyAxN2gtNWMtMS4wOS0uMDItMS45NC45Mi0yLjUgMS45QTMgMyAwIDEgMSAyLjU3IDE1IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTkgMy40YTQgNCAwIDAgMSA2LjUyLjY2IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTYgMTcgMy4xLTUuOGEyLjUgMi41IDAgMCAwIC4wNTctMi4wNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMC4zIDIwLjNhNCA0IDAgMCAxLTIuMy43IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4LjYgMTNhNCA0IDAgMCAxIDMuMzU3IDMuNDE0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEyIDYgLjYgMSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLmpzCnZhciBXZWJob29rOwp2YXIgaW5pdF93ZWJob29rID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLmpzIigpIHsKICAgIFdlYmhvb2sgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOCAxNi45OGgtNS45OWMtMS4xIDAtMS45NS45NC0yLjQ4IDEuOUE0IDQgMCAwIDEgMiAxN2MuMDEtLjcuMi0xLjQuNTctMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDE3IDMuMTMtNS43OGMuNTMtLjk3LjEtMi4xOC0uNS0zLjFhNCA0IDAgMSAxIDYuODktNC4wNiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xMiA2IDMuMTMgNS43M0MxNS42NiAxMi43IDE2LjkgMTMgMTggMTNhNCA0IDAgMCAxIDAgOCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC10aWxkZS5qcwp2YXIgV2VpZ2h0VGlsZGU7CnZhciBpbml0X3dlaWdodF90aWxkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2VpZ2h0LXRpbGRlLmpzIigpIHsKICAgIFdlaWdodFRpbGRlID0gWwogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA2IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDh6IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcuOTk5IDE1YTIuNSAyLjUgMCAwIDEgNCAwIDIuNSAyLjUgMCAwIDAgNCAwIiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTIiLCBjeTogIjUiLCByOiAiMyIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC5qcwp2YXIgV2VpZ2h0Owp2YXIgaW5pdF93ZWlnaHQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlaWdodC5qcyIoKSB7CiAgICBXZWlnaHQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjEyIiwgY3k6ICI1IiwgcjogIjMiIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNi41IDhhMiAyIDAgMCAwLTEuOTA1IDEuNDZMMi4xIDE4LjVBMiAyIDAgMCAwIDQgMjFoMTZhMiAyIDAgMCAwIDEuOTI1LTIuNTRMMTkuNCA5LjVBMiAyIDAgMCAwIDE3LjQ4IDhaIgogICAgICAgIH0KICAgICAgXQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hlYXQtb2ZmLmpzCnZhciBXaGVhdE9mZjsKdmFyIGluaXRfd2hlYXRfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC1vZmYuanMiKCkgewogICAgV2hlYXRPZmYgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIyIDEwLTEwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDgtMS4xNyAxLjE3IiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7IGQ6ICJNMy40NyAxMi41MyA1IDExbDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw1IDE5bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsicGF0aCIsIHsgZDogIm04IDgtLjUzLjUzYTMuNSAzLjUgMCAwIDAgMCA0Ljk0TDkgMTVsMS41My0xLjUzYy41NS0uNTUuODgtMS4yNS45OC0xLjk3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjkxIDUuMjZjLjE1LS4yNi4zNC0uNTEuNTYtLjczTDEzIDNsMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEgLjI4IDQuNjIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMjAgMmgydjJhNCA0IDAgMCAxLTQgNGgtMlY2YTQgNCAwIDAgMSA0LTRaIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTExLjQ3IDE3LjQ3IDEzIDE5bC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMNSAxOWwxLjUzLTEuNTNhMy41IDMuNSAwIDAgMSA0Ljk0IDBaIgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2IDE2LS41My41M2EzLjUgMy41IDAgMCAxLTQuOTQgMEw5IDE1bDEuNTMtMS41M2EzLjQ5IDMuNDkgMCAwIDEgMS45Ny0uOTgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTguNzQgMTMuMDljLjI2LS4xNS41MS0uMzQuNzMtLjU2TDIxIDExbC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMC00LjYyLS4yOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qcwp2YXIgV2hlYXQ7CnZhciBpbml0X3doZWF0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qcyIoKSB7CiAgICBXaGVhdCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgMjIgMTYgOCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTMuNDcgMTIuNTMgNSAxMWwxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMNSAxOWwtMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgMC00Ljk0WiIgfQogICAgICBdLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsgZDogIk03LjQ3IDguNTMgOSA3bDEuNTMgMS41M2EzLjUgMy41IDAgMCAxIDAgNC45NEw5IDE1bC0xLjUzLTEuNTNhMy41IDMuNSAwIDAgMSAwLTQuOTRaIiB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgeyBkOiAiTTExLjQ3IDQuNTMgMTMgM2wxLjUzIDEuNTNhMy41IDMuNSAwIDAgMSAwIDQuOTRMMTMgMTFsLTEuNTMtMS41M2EzLjUgMy41IDAgMCAxIDAtNC45NFoiIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIwIDJoMnYyYTQgNCAwIDAgMS00IDRoLTJWNmE0IDQgMCAwIDEgNC00WiIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xMS40NyAxNy40NyAxMyAxOWwtMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEtNC45NCAwTDUgMTlsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xNS40NyAxMy40NyAxNyAxNWwtMS41MyAxLjUzYTMuNSAzLjUgMCAwIDEtNC45NCAwTDkgMTVsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0xOS40NyA5LjQ3IDIxIDExbC0xLjUzIDEuNTNhMy41IDMuNSAwIDAgMS00Ljk0IDBMMTMgMTFsMS41My0xLjUzYTMuNSAzLjUgMCAwIDEgNC45NCAwWiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dob2xlLXdvcmQuanMKdmFyIFdob2xlV29yZDsKdmFyIGluaXRfd2hvbGVfd29yZCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2hvbGUtd29yZC5qcyIoKSB7CiAgICBXaG9sZVdvcmQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgOXY2IiB9XSwKICAgICAgWyJjaXJjbGUiLCB7IGN4OiAiMTciLCBjeTogIjEyIiwgcjogIjMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTQgN3Y4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIyIDE3djFjMCAuNS0uNSAxLTEgMUgzYy0uNSAwLTEtLjUtMS0xdi0xIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1jb2cuanMKdmFyIFdpZmlDb2c7CnZhciBpbml0X3dpZmlfY29nID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWNvZy5qcyIoKSB7CiAgICBXaWZpQ29nID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJtMTQuMzA1IDE5LjUzLjkyMy0uMzgyIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE1LjIyOCAxNi44NTItLjkyMy0uMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAxNS4yMjgtLjM4My0uOTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTE2Ljg1MiAyMC43NzItLjM4My45MjQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMTkuMTQ4IDE1LjIyOC4zODMtLjkyMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOS41MyAyMS42OTYtLjM4Mi0uOTI0IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgNy44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTIwLjc3MiAxNi44NTIuOTI0LS4zODMiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMjAuNzcyIDE5LjE0OC45MjQuMzgzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTEuODU4YTEwIDEwIDAgMCAxIDExLjUtMS43ODUiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE1LjQyOWE1IDUgMCAwIDEgMi40MTMtMS4zMSIgfV0sCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjE4IiwgY3k6ICIxOCIsIHI6ICIzIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1sb3cuanMKdmFyIFdpZmlMb3c7CnZhciBpbml0X3dpZmlfbG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWxvdy5qcyIoKSB7CiAgICBXaWZpTG93ID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktaGlnaC5qcwp2YXIgV2lmaUhpZ2g7CnZhciBpbml0X3dpZmlfaGlnaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1oaWdoLmpzIigpIHsKICAgIFdpZmlIaWdoID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1vZmYuanMKdmFyIFdpZmlPZmY7CnZhciBpbml0X3dpZmlfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLW9mZi5qcyIoKSB7CiAgICBXaWZpT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTguNSAxNi40MjlhNSA1IDAgMCAxIDcgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk01IDEyLjg1OWExMCAxMCAwIDAgMSA1LjE3LTIuNjkiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTkgMTIuODU5YTEwIDEwIDAgMCAwLTIuMDA3LTEuNTIzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSA0LjE3Ny0yLjY0MyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMiA4LjgyYTE1IDE1IDAgMCAwLTExLjI4OC0zLjc2NCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm0yIDIgMjAgMjAiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXBlbi5qcwp2YXIgV2lmaVBlbjsKdmFyIGluaXRfd2lmaV9wZW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktcGVuLmpzIigpIHsKICAgIFdpZmlQZW4gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yMS4zNzggMTYuNjI2YTEgMSAwIDAgMC0zLjAwNC0zLjAwNGwtNC4wMSA0LjAxMmEyIDIgMCAwIDAtLjUwNi44NTRsLS44MzcgMi44N2EuNS41IDAgMCAwIC42Mi42MmwyLjg3LS44MzdhMiAyIDAgMCAwIC44NTQtLjUwNnoiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNSAxMi44NTlhMTAgMTAgMCAwIDEgMTAuNS0yLjIyMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5YTUgNSAwIDAgMSAzLTEuNDA2IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1zeW5jLmpzCnZhciBXaWZpU3luYzsKdmFyIGluaXRfd2lmaV9zeW5jID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXN5bmMuanMiKCkgewogICAgV2lmaVN5bmMgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTAuMTA1djRMMTMuNSAxMi41YTUgNSAwIDAgMSA4IDEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMS45NjUgMTQuMTA1aDQiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuOTY1IDE4LjEwNWg0TDIwLjQzIDE5LjcxYTUgNSAwIDAgMS04LTEuNSIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yIDguODJhMTUgMTUgMCAwIDEgMjAgMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0yMS45NjUgMjIuMTA1di00IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODZhMTAgMTAgMCAwIDEgMy0yLjAzMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk04LjUgMTYuNDI5aC4wMSIgfV0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktemVyby5qcwp2YXIgV2lmaVplcm87CnZhciBpbml0X3dpZmlfemVybyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS16ZXJvLmpzIigpIHsKICAgIFdpZmlaZXJvID0gW1sicGF0aCIsIHsgZDogIk0xMiAyMGguMDEiIH1dXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS5qcwp2YXIgV2lmaTsKdmFyIGluaXRfd2lmaSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS5qcyIoKSB7CiAgICBXaWZpID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTIgMjBoLjAxIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTIgOC44MmExNSAxNSAwIDAgMSAyMCAwIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTUgMTIuODU5YTEwIDEwIDAgMCAxIDE0IDAiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOC41IDE2LjQyOWE1IDUgMCAwIDEgNyAwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZC1hcnJvdy1kb3duLmpzCnZhciBXaW5kQXJyb3dEb3duOwp2YXIgaW5pdF93aW5kX2Fycm93X2Rvd24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpbmQtYXJyb3ctZG93bi5qcyIoKSB7CiAgICBXaW5kQXJyb3dEb3duID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNMTAgMnY4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyLjggMjEuNkEyIDIgMCAxIDAgMTQgMThIMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNy41IDEwYTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJtNiA2IDQgNCA0LTQiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzCnZhciBXaW5kOwp2YXIgaW5pdF93aW5kID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzIigpIHsKICAgIFdpbmQgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMi44IDE5LjZBMiAyIDAgMSAwIDE0IDE2SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNMTcuNSA4YTIuNSAyLjUgMCAxIDEgMiA0SDIiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNOS44IDQuNEEyIDIgMCAxIDEgMTEgOEgyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZS1vZmYuanMKdmFyIFdpbmVPZmY7CnZhciBpbml0X3dpbmVfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLW9mZi5qcyIoKSB7CiAgICBXaW5lT2ZmID0gWwogICAgICBbInBhdGgiLCB7IGQ6ICJNOCAyMmg4IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTcgMTBoM203IDBoLTEuMzQzIiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1djciIH1dLAogICAgICBbCiAgICAgICAgInBhdGgiLAogICAgICAgIHsKICAgICAgICAgIGQ6ICJNNy4zMDcgNy4zMDdBMTIuMzMgMTIuMzMgMCAwIDAgNyAxMGE1IDUgMCAwIDAgNy4zOTEgNC4zOTFNOC42MzggMi45ODFDOC43NSAyLjY2OCA4Ljg3MiAyLjM0IDkgMmg2YzEuNSA0IDIgNiAyIDggMCAuNDA3LS4wNS44MDktLjE0NSAxLjE5OCIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyIiwgeDI6ICIyMiIsIHkxOiAiMiIsIHkyOiAiMjIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzCnZhciBXaW5lOwp2YXIgaW5pdF93aW5lID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzIigpIHsKICAgIFdpbmUgPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIk04IDIyaDgiIH1dLAogICAgICBbInBhdGgiLCB7IGQ6ICJNNyAxMGgxMCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xMiAxNXY3IiB9XSwKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEyIDE1YTUgNSAwIDAgMCA1LTVjMC0yLS41LTQtMi04SDljLTEuNSA0LTIgNi0yIDhhNSA1IDAgMCAwIDUgNVoiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JtLmpzCnZhciBXb3JtOwp2YXIgaW5pdF93b3JtID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JtLmpzIigpIHsKICAgIFdvcm0gPSBbCiAgICAgIFsicGF0aCIsIHsgZDogIm0xOSAxMi0xLjUgMyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xOS42MyAxOC44MSAyMiAyMCIgfV0sCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk02LjQ3IDguMjNhMS42OCAxLjY4IDAgMCAxIDIuNDQgMS45M2wtLjY0IDIuMDhhNi43NiA2Ljc2IDAgMCAwIDEwLjE2IDcuNjdsLjQyLS4yN2ExIDEgMCAxIDAtMi43My00LjIxbC0uNDIuMjdhMS43NiAxLjc2IDAgMCAxLTIuNjMtMS45OWwuNjQtMi4wOEE2LjY2IDYuNjYgMCAwIDAgMy45NCAzLjlsLS43LjRhMSAxIDAgMSAwIDIuNTUgNC4zNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JrZmxvdy5qcwp2YXIgV29ya2Zsb3c7CnZhciBpbml0X3dvcmtmbG93ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy93b3JrZmxvdy5qcyIoKSB7CiAgICBXb3JrZmxvdyA9IFsKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjMiLCB5OiAiMyIsIHJ4OiAiMiIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk03IDExdjRhMiAyIDAgMCAwIDIgMmg0IiB9XSwKICAgICAgWyJyZWN0IiwgeyB3aWR0aDogIjgiLCBoZWlnaHQ6ICI4IiwgeDogIjEzIiwgeTogIjEzIiwgcng6ICIyIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzCnZhciBXcmVuY2g7CnZhciBpbml0X3dyZW5jaCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzIigpIHsKICAgIFdyZW5jaCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE0LjcgNi4zYTEgMSAwIDAgMCAwIDEuNGwxLjYgMS42YTEgMSAwIDAgMCAxLjQgMGwzLjEwNi0zLjEwNWMuMzItLjMyMi44NjMtLjIyLjk4My4yMThhNiA2IDAgMCAxLTguMjU5IDcuMDU3bC03LjkxIDcuOTFhMSAxIDAgMCAxLTIuOTk5LTNsNy45MS03LjkxYTYgNiAwIDAgMSA3LjA1Ny04LjI1OWMuNDM4LjEyLjU0LjY2Mi4yMTkuOTg0eiIKICAgICAgICB9CiAgICAgIF0KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3guanMKdmFyIFg7CnZhciBpbml0X3ggPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3guanMiKCkgewogICAgWCA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTE4IDYgNiAxOCIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIm02IDYgMTIgMTIiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy95b3V0dWJlLmpzCnZhciBZb3V0dWJlOwp2YXIgaW5pdF95b3V0dWJlID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy95b3V0dWJlLmpzIigpIHsKICAgIFlvdXR1YmUgPSBbCiAgICAgIFsKICAgICAgICAicGF0aCIsCiAgICAgICAgewogICAgICAgICAgZDogIk0yLjUgMTdhMjQuMTIgMjQuMTIgMCAwIDEgMC0xMCAyIDIgMCAwIDEgMS40LTEuNCA0OS41NiA0OS41NiAwIDAgMSAxNi4yIDBBMiAyIDAgMCAxIDIxLjUgN2EyNC4xMiAyNC4xMiAwIDAgMSAwIDEwIDIgMiAwIDAgMS0xLjQgMS40IDQ5LjU1IDQ5LjU1IDAgMCAxLTE2LjIgMEEyIDIgMCAwIDEgMi41IDE3IgogICAgICAgIH0KICAgICAgXSwKICAgICAgWyJwYXRoIiwgeyBkOiAibTEwIDE1IDUtMy01LTN6IiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLW9mZi5qcwp2YXIgWmFwT2ZmOwp2YXIgaW5pdF96YXBfb2ZmID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96YXAtb2ZmLmpzIigpIHsKICAgIFphcE9mZiA9IFsKICAgICAgWyJwYXRoIiwgeyBkOiAiTTEwLjUxMyA0Ljg1NiAxMy4xMiAyLjE3YS41LjUgMCAwIDEgLjg2LjQ2bC0xLjM3NyA0LjMxNyIgfV0sCiAgICAgIFsicGF0aCIsIHsgZDogIk0xNS42NTYgMTBIMjBhMSAxIDAgMCAxIC43OCAxLjYzbC0xLjcyIDEuNzczIiB9XSwKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTE2LjI3MyAxNi4yNzMgMTAuODggMjEuODNhLjUuNSAwIDAgMS0uODYtLjQ2bDEuOTItNi4wMkExIDEgMCAwIDAgMTEgMTRINGExIDEgMCAwIDEtLjc4LTEuNjNsNC41MDctNC42NDMiCiAgICAgICAgfQogICAgICBdLAogICAgICBbInBhdGgiLCB7IGQ6ICJtMiAyIDIwIDIwIiB9XQogICAgXTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzCnZhciBaYXA7CnZhciBpbml0X3phcCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzIigpIHsKICAgIFphcCA9IFsKICAgICAgWwogICAgICAgICJwYXRoIiwKICAgICAgICB7CiAgICAgICAgICBkOiAiTTQgMTRhMSAxIDAgMCAxLS43OC0xLjYzbDkuOS0xMC4yYS41LjUgMCAwIDEgLjg2LjQ2bC0xLjkyIDYuMDJBMSAxIDAgMCAwIDEzIDEwaDdhMSAxIDAgMCAxIC43OCAxLjYzbC05LjkgMTAuMmEuNS41IDAgMCAxLS44Ni0uNDZsMS45Mi02LjAyQTEgMSAwIDAgMCAxMSAxNHoiCiAgICAgICAgfQogICAgICBdCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96b29tLWluLmpzCnZhciBab29tSW47CnZhciBpbml0X3pvb21faW4gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20taW4uanMiKCkgewogICAgWm9vbUluID0gWwogICAgICBbImNpcmNsZSIsIHsgY3g6ICIxMSIsIGN5OiAiMTEiLCByOiAiOCIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIyMSIsIHgyOiAiMTYuNjUiLCB5MTogIjIxIiwgeTI6ICIxNi42NSIgfV0sCiAgICAgIFsibGluZSIsIHsgeDE6ICIxMSIsIHgyOiAiMTEiLCB5MTogIjgiLCB5MjogIjE0IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29ucy96b29tLW91dC5qcwp2YXIgWm9vbU91dDsKdmFyIGluaXRfem9vbV9vdXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20tb3V0LmpzIigpIHsKICAgIFpvb21PdXQgPSBbCiAgICAgIFsiY2lyY2xlIiwgeyBjeDogIjExIiwgY3k6ICIxMSIsIHI6ICI4IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjIxIiwgeDI6ICIxNi42NSIsIHkxOiAiMjEiLCB5MjogIjE2LjY1IiB9XSwKICAgICAgWyJsaW5lIiwgeyB4MTogIjgiLCB4MjogIjE0IiwgeTE6ICIxMSIsIHkyOiAiMTEiIH1dCiAgICBdOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vbHVjaWRlQDAuNTYyLjAvbm9kZV9tb2R1bGVzL2x1Y2lkZS9kaXN0L2VzbS9pY29uc0FuZEFsaWFzZXMuanMKdmFyIGljb25zQW5kQWxpYXNlc19leHBvcnRzID0ge307Cl9fZXhwb3J0KGljb25zQW5kQWxpYXNlc19leHBvcnRzLCB7CiAgQUFycm93RG93bjogKCkgPT4gQUFycm93RG93biwKICBBQXJyb3dVcDogKCkgPT4gQUFycm93VXAsCiAgQUxhcmdlU21hbGw6ICgpID0+IEFMYXJnZVNtYWxsLAogIEFjY2Vzc2liaWxpdHk6ICgpID0+IEFjY2Vzc2liaWxpdHksCiAgQWN0aXZpdHk6ICgpID0+IEFjdGl2aXR5LAogIEFjdGl2aXR5U3F1YXJlOiAoKSA9PiBTcXVhcmVBY3Rpdml0eSwKICBBaXJWZW50OiAoKSA9PiBBaXJWZW50LAogIEFpcnBsYXk6ICgpID0+IEFpcnBsYXksCiAgQWxhcm1DaGVjazogKCkgPT4gQWxhcm1DbG9ja0NoZWNrLAogIEFsYXJtQ2xvY2s6ICgpID0+IEFsYXJtQ2xvY2ssCiAgQWxhcm1DbG9ja0NoZWNrOiAoKSA9PiBBbGFybUNsb2NrQ2hlY2ssCiAgQWxhcm1DbG9ja01pbnVzOiAoKSA9PiBBbGFybUNsb2NrTWludXMsCiAgQWxhcm1DbG9ja09mZjogKCkgPT4gQWxhcm1DbG9ja09mZiwKICBBbGFybUNsb2NrUGx1czogKCkgPT4gQWxhcm1DbG9ja1BsdXMsCiAgQWxhcm1NaW51czogKCkgPT4gQWxhcm1DbG9ja01pbnVzLAogIEFsYXJtUGx1czogKCkgPT4gQWxhcm1DbG9ja1BsdXMsCiAgQWxhcm1TbW9rZTogKCkgPT4gQWxhcm1TbW9rZSwKICBBbGJ1bTogKCkgPT4gQWxidW0sCiAgQWxlcnRDaXJjbGU6ICgpID0+IENpcmNsZUFsZXJ0LAogIEFsZXJ0T2N0YWdvbjogKCkgPT4gT2N0YWdvbkFsZXJ0LAogIEFsZXJ0VHJpYW5nbGU6ICgpID0+IFRyaWFuZ2xlQWxlcnQsCiAgQWxpZ25DZW50ZXI6ICgpID0+IFRleHRBbGlnbkNlbnRlciwKICBBbGlnbkNlbnRlckhvcml6b250YWw6ICgpID0+IEFsaWduQ2VudGVySG9yaXpvbnRhbCwKICBBbGlnbkNlbnRlclZlcnRpY2FsOiAoKSA9PiBBbGlnbkNlbnRlclZlcnRpY2FsLAogIEFsaWduRW5kSG9yaXpvbnRhbDogKCkgPT4gQWxpZ25FbmRIb3Jpem9udGFsLAogIEFsaWduRW5kVmVydGljYWw6ICgpID0+IEFsaWduRW5kVmVydGljYWwsCiAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlcjogKCkgPT4gQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZUNlbnRlciwKICBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlRW5kLAogIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVTdGFydDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0LAogIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXI6ICgpID0+IEFsaWduSG9yaXpvbnRhbEp1c3RpZnlDZW50ZXIsCiAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUVuZCwKICBBbGlnbkhvcml6b250YWxKdXN0aWZ5U3RhcnQ6ICgpID0+IEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydCwKICBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsU3BhY2VBcm91bmQsCiAgQWxpZ25Ib3Jpem9udGFsU3BhY2VCZXR3ZWVuOiAoKSA9PiBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW4sCiAgQWxpZ25KdXN0aWZ5OiAoKSA9PiBUZXh0QWxpZ25KdXN0aWZ5LAogIEFsaWduTGVmdDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgQWxpZ25SaWdodDogKCkgPT4gVGV4dEFsaWduRW5kLAogIEFsaWduU3RhcnRIb3Jpem9udGFsOiAoKSA9PiBBbGlnblN0YXJ0SG9yaXpvbnRhbCwKICBBbGlnblN0YXJ0VmVydGljYWw6ICgpID0+IEFsaWduU3RhcnRWZXJ0aWNhbCwKICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlcjogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVDZW50ZXIsCiAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQ6ICgpID0+IEFsaWduVmVydGljYWxEaXN0cmlidXRlRW5kLAogIEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQ6ICgpID0+IEFsaWduVmVydGljYWxEaXN0cmlidXRlU3RhcnQsCiAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXI6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5Q2VudGVyLAogIEFsaWduVmVydGljYWxKdXN0aWZ5RW5kOiAoKSA9PiBBbGlnblZlcnRpY2FsSnVzdGlmeUVuZCwKICBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0OiAoKSA9PiBBbGlnblZlcnRpY2FsSnVzdGlmeVN0YXJ0LAogIEFsaWduVmVydGljYWxTcGFjZUFyb3VuZDogKCkgPT4gQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kLAogIEFsaWduVmVydGljYWxTcGFjZUJldHdlZW46ICgpID0+IEFsaWduVmVydGljYWxTcGFjZUJldHdlZW4sCiAgQW1idWxhbmNlOiAoKSA9PiBBbWJ1bGFuY2UsCiAgQW1wZXJzYW5kOiAoKSA9PiBBbXBlcnNhbmQsCiAgQW1wZXJzYW5kczogKCkgPT4gQW1wZXJzYW5kcywKICBBbXBob3JhOiAoKSA9PiBBbXBob3JhLAogIEFuY2hvcjogKCkgPT4gQW5jaG9yLAogIEFuZ3J5OiAoKSA9PiBBbmdyeSwKICBBbm5veWVkOiAoKSA9PiBBbm5veWVkLAogIEFudGVubmE6ICgpID0+IEFudGVubmEsCiAgQW52aWw6ICgpID0+IEFudmlsLAogIEFwZXJ0dXJlOiAoKSA9PiBBcGVydHVyZSwKICBBcHBXaW5kb3c6ICgpID0+IEFwcFdpbmRvdywKICBBcHBXaW5kb3dNYWM6ICgpID0+IEFwcFdpbmRvd01hYywKICBBcHBsZTogKCkgPT4gQXBwbGUsCiAgQXJjaGl2ZTogKCkgPT4gQXJjaGl2ZSwKICBBcmNoaXZlUmVzdG9yZTogKCkgPT4gQXJjaGl2ZVJlc3RvcmUsCiAgQXJjaGl2ZVg6ICgpID0+IEFyY2hpdmVYLAogIEFyZWFDaGFydDogKCkgPT4gQ2hhcnRBcmVhLAogIEFybWNoYWlyOiAoKSA9PiBBcm1jaGFpciwKICBBcnJvd0JpZ0Rvd246ICgpID0+IEFycm93QmlnRG93biwKICBBcnJvd0JpZ0Rvd25EYXNoOiAoKSA9PiBBcnJvd0JpZ0Rvd25EYXNoLAogIEFycm93QmlnTGVmdDogKCkgPT4gQXJyb3dCaWdMZWZ0LAogIEFycm93QmlnTGVmdERhc2g6ICgpID0+IEFycm93QmlnTGVmdERhc2gsCiAgQXJyb3dCaWdSaWdodDogKCkgPT4gQXJyb3dCaWdSaWdodCwKICBBcnJvd0JpZ1JpZ2h0RGFzaDogKCkgPT4gQXJyb3dCaWdSaWdodERhc2gsCiAgQXJyb3dCaWdVcDogKCkgPT4gQXJyb3dCaWdVcCwKICBBcnJvd0JpZ1VwRGFzaDogKCkgPT4gQXJyb3dCaWdVcERhc2gsCiAgQXJyb3dEb3duOiAoKSA9PiBBcnJvd0Rvd24sCiAgQXJyb3dEb3duMDE6ICgpID0+IEFycm93RG93bjAxLAogIEFycm93RG93bjEwOiAoKSA9PiBBcnJvd0Rvd24xMCwKICBBcnJvd0Rvd25BWjogKCkgPT4gQXJyb3dEb3duQVosCiAgQXJyb3dEb3duQXo6ICgpID0+IEFycm93RG93bkFaLAogIEFycm93RG93bkNpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dEb3duLAogIEFycm93RG93bkZyb21MaW5lOiAoKSA9PiBBcnJvd0Rvd25Gcm9tTGluZSwKICBBcnJvd0Rvd25MZWZ0OiAoKSA9PiBBcnJvd0Rvd25MZWZ0LAogIEFycm93RG93bkxlZnRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25MZWZ0LAogIEFycm93RG93bkxlZnRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dERvd25MZWZ0LAogIEFycm93RG93bkxlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93bkxlZnQsCiAgQXJyb3dEb3duTmFycm93V2lkZTogKCkgPT4gQXJyb3dEb3duTmFycm93V2lkZSwKICBBcnJvd0Rvd25SaWdodDogKCkgPT4gQXJyb3dEb3duUmlnaHQsCiAgQXJyb3dEb3duUmlnaHRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25SaWdodCwKICBBcnJvd0Rvd25SaWdodEZyb21TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogIEFycm93RG93blJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd0Rvd25SaWdodCwKICBBcnJvd0Rvd25TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93biwKICBBcnJvd0Rvd25Ub0RvdDogKCkgPT4gQXJyb3dEb3duVG9Eb3QsCiAgQXJyb3dEb3duVG9MaW5lOiAoKSA9PiBBcnJvd0Rvd25Ub0xpbmUsCiAgQXJyb3dEb3duVXA6ICgpID0+IEFycm93RG93blVwLAogIEFycm93RG93bldpZGVOYXJyb3c6ICgpID0+IEFycm93RG93bldpZGVOYXJyb3csCiAgQXJyb3dEb3duWkE6ICgpID0+IEFycm93RG93blpBLAogIEFycm93RG93blphOiAoKSA9PiBBcnJvd0Rvd25aQSwKICBBcnJvd0xlZnQ6ICgpID0+IEFycm93TGVmdCwKICBBcnJvd0xlZnRDaXJjbGU6ICgpID0+IENpcmNsZUFycm93TGVmdCwKICBBcnJvd0xlZnRGcm9tTGluZTogKCkgPT4gQXJyb3dMZWZ0RnJvbUxpbmUsCiAgQXJyb3dMZWZ0UmlnaHQ6ICgpID0+IEFycm93TGVmdFJpZ2h0LAogIEFycm93TGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dMZWZ0LAogIEFycm93TGVmdFRvTGluZTogKCkgPT4gQXJyb3dMZWZ0VG9MaW5lLAogIEFycm93UmlnaHQ6ICgpID0+IEFycm93UmlnaHQsCiAgQXJyb3dSaWdodENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0RnJvbUxpbmU6ICgpID0+IEFycm93UmlnaHRGcm9tTGluZSwKICBBcnJvd1JpZ2h0TGVmdDogKCkgPT4gQXJyb3dSaWdodExlZnQsCiAgQXJyb3dSaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0VG9MaW5lOiAoKSA9PiBBcnJvd1JpZ2h0VG9MaW5lLAogIEFycm93VXA6ICgpID0+IEFycm93VXAsCiAgQXJyb3dVcDAxOiAoKSA9PiBBcnJvd1VwMDEsCiAgQXJyb3dVcDEwOiAoKSA9PiBBcnJvd1VwMTAsCiAgQXJyb3dVcEFaOiAoKSA9PiBBcnJvd1VwQVosCiAgQXJyb3dVcEF6OiAoKSA9PiBBcnJvd1VwQVosCiAgQXJyb3dVcENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dVcCwKICBBcnJvd1VwRG93bjogKCkgPT4gQXJyb3dVcERvd24sCiAgQXJyb3dVcEZyb21Eb3Q6ICgpID0+IEFycm93VXBGcm9tRG90LAogIEFycm93VXBGcm9tTGluZTogKCkgPT4gQXJyb3dVcEZyb21MaW5lLAogIEFycm93VXBMZWZ0OiAoKSA9PiBBcnJvd1VwTGVmdCwKICBBcnJvd1VwTGVmdEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0VXBMZWZ0LAogIEFycm93VXBMZWZ0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcExlZnQsCiAgQXJyb3dVcExlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93VXBMZWZ0LAogIEFycm93VXBOYXJyb3dXaWRlOiAoKSA9PiBBcnJvd1VwTmFycm93V2lkZSwKICBBcnJvd1VwUmlnaHQ6ICgpID0+IEFycm93VXBSaWdodCwKICBBcnJvd1VwUmlnaHRGcm9tQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgQXJyb3dVcFJpZ2h0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogIEFycm93VXBSaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcFJpZ2h0LAogIEFycm93VXBTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93VXAsCiAgQXJyb3dVcFRvTGluZTogKCkgPT4gQXJyb3dVcFRvTGluZSwKICBBcnJvd1VwV2lkZU5hcnJvdzogKCkgPT4gQXJyb3dVcFdpZGVOYXJyb3csCiAgQXJyb3dVcFpBOiAoKSA9PiBBcnJvd1VwWkEsCiAgQXJyb3dVcFphOiAoKSA9PiBBcnJvd1VwWkEsCiAgQXJyb3dzVXBGcm9tTGluZTogKCkgPT4gQXJyb3dzVXBGcm9tTGluZSwKICBBc3RlcmlzazogKCkgPT4gQXN0ZXJpc2ssCiAgQXN0ZXJpc2tTcXVhcmU6ICgpID0+IFNxdWFyZUFzdGVyaXNrLAogIEF0U2lnbjogKCkgPT4gQXRTaWduLAogIEF0b206ICgpID0+IEF0b20sCiAgQXVkaW9MaW5lczogKCkgPT4gQXVkaW9MaW5lcywKICBBdWRpb1dhdmVmb3JtOiAoKSA9PiBBdWRpb1dhdmVmb3JtLAogIEF3YXJkOiAoKSA9PiBBd2FyZCwKICBBeGU6ICgpID0+IEF4ZSwKICBBeGlzM0Q6ICgpID0+IEF4aXMzZCwKICBBeGlzM2Q6ICgpID0+IEF4aXMzZCwKICBCYWJ5OiAoKSA9PiBCYWJ5LAogIEJhY2twYWNrOiAoKSA9PiBCYWNrcGFjaywKICBCYWRnZTogKCkgPT4gQmFkZ2UsCiAgQmFkZ2VBbGVydDogKCkgPT4gQmFkZ2VBbGVydCwKICBCYWRnZUNlbnQ6ICgpID0+IEJhZGdlQ2VudCwKICBCYWRnZUNoZWNrOiAoKSA9PiBCYWRnZUNoZWNrLAogIEJhZGdlRG9sbGFyU2lnbjogKCkgPT4gQmFkZ2VEb2xsYXJTaWduLAogIEJhZGdlRXVybzogKCkgPT4gQmFkZ2VFdXJvLAogIEJhZGdlSGVscDogKCkgPT4gQmFkZ2VRdWVzdGlvbk1hcmssCiAgQmFkZ2VJbmRpYW5SdXBlZTogKCkgPT4gQmFkZ2VJbmRpYW5SdXBlZSwKICBCYWRnZUluZm86ICgpID0+IEJhZGdlSW5mbywKICBCYWRnZUphcGFuZXNlWWVuOiAoKSA9PiBCYWRnZUphcGFuZXNlWWVuLAogIEJhZGdlTWludXM6ICgpID0+IEJhZGdlTWludXMsCiAgQmFkZ2VQZXJjZW50OiAoKSA9PiBCYWRnZVBlcmNlbnQsCiAgQmFkZ2VQbHVzOiAoKSA9PiBCYWRnZVBsdXMsCiAgQmFkZ2VQb3VuZFN0ZXJsaW5nOiAoKSA9PiBCYWRnZVBvdW5kU3RlcmxpbmcsCiAgQmFkZ2VRdWVzdGlvbk1hcms6ICgpID0+IEJhZGdlUXVlc3Rpb25NYXJrLAogIEJhZGdlUnVzc2lhblJ1YmxlOiAoKSA9PiBCYWRnZVJ1c3NpYW5SdWJsZSwKICBCYWRnZVN3aXNzRnJhbmM6ICgpID0+IEJhZGdlU3dpc3NGcmFuYywKICBCYWRnZVR1cmtpc2hMaXJhOiAoKSA9PiBCYWRnZVR1cmtpc2hMaXJhLAogIEJhZGdlWDogKCkgPT4gQmFkZ2VYLAogIEJhZ2dhZ2VDbGFpbTogKCkgPT4gQmFnZ2FnZUNsYWltLAogIEJhbGxvb246ICgpID0+IEJhbGxvb24sCiAgQmFuOiAoKSA9PiBCYW4sCiAgQmFuYW5hOiAoKSA9PiBCYW5hbmEsCiAgQmFuZGFnZTogKCkgPT4gQmFuZGFnZSwKICBCYW5rbm90ZTogKCkgPT4gQmFua25vdGUsCiAgQmFua25vdGVBcnJvd0Rvd246ICgpID0+IEJhbmtub3RlQXJyb3dEb3duLAogIEJhbmtub3RlQXJyb3dVcDogKCkgPT4gQmFua25vdGVBcnJvd1VwLAogIEJhbmtub3RlWDogKCkgPT4gQmFua25vdGVYLAogIEJhckNoYXJ0OiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgQmFyQ2hhcnQyOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbiwKICBCYXJDaGFydDM6ICgpID0+IENoYXJ0Q29sdW1uLAogIEJhckNoYXJ0NDogKCkgPT4gQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEJhckNoYXJ0QmlnOiAoKSA9PiBDaGFydENvbHVtbkJpZywKICBCYXJDaGFydEhvcml6b250YWw6ICgpID0+IENoYXJ0QmFyLAogIEJhckNoYXJ0SG9yaXpvbnRhbEJpZzogKCkgPT4gQ2hhcnRCYXJCaWcsCiAgQmFyY29kZTogKCkgPT4gQmFyY29kZSwKICBCYXJyZWw6ICgpID0+IEJhcnJlbCwKICBCYXNlbGluZTogKCkgPT4gQmFzZWxpbmUsCiAgQmF0aDogKCkgPT4gQmF0aCwKICBCYXR0ZXJ5OiAoKSA9PiBCYXR0ZXJ5LAogIEJhdHRlcnlDaGFyZ2luZzogKCkgPT4gQmF0dGVyeUNoYXJnaW5nLAogIEJhdHRlcnlGdWxsOiAoKSA9PiBCYXR0ZXJ5RnVsbCwKICBCYXR0ZXJ5TG93OiAoKSA9PiBCYXR0ZXJ5TG93LAogIEJhdHRlcnlNZWRpdW06ICgpID0+IEJhdHRlcnlNZWRpdW0sCiAgQmF0dGVyeVBsdXM6ICgpID0+IEJhdHRlcnlQbHVzLAogIEJhdHRlcnlXYXJuaW5nOiAoKSA9PiBCYXR0ZXJ5V2FybmluZywKICBCZWFrZXI6ICgpID0+IEJlYWtlciwKICBCZWFuOiAoKSA9PiBCZWFuLAogIEJlYW5PZmY6ICgpID0+IEJlYW5PZmYsCiAgQmVkOiAoKSA9PiBCZWQsCiAgQmVkRG91YmxlOiAoKSA9PiBCZWREb3VibGUsCiAgQmVkU2luZ2xlOiAoKSA9PiBCZWRTaW5nbGUsCiAgQmVlZjogKCkgPT4gQmVlZiwKICBCZWVyOiAoKSA9PiBCZWVyLAogIEJlZXJPZmY6ICgpID0+IEJlZXJPZmYsCiAgQmVsbDogKCkgPT4gQmVsbCwKICBCZWxsRG90OiAoKSA9PiBCZWxsRG90LAogIEJlbGxFbGVjdHJpYzogKCkgPT4gQmVsbEVsZWN0cmljLAogIEJlbGxNaW51czogKCkgPT4gQmVsbE1pbnVzLAogIEJlbGxPZmY6ICgpID0+IEJlbGxPZmYsCiAgQmVsbFBsdXM6ICgpID0+IEJlbGxQbHVzLAogIEJlbGxSaW5nOiAoKSA9PiBCZWxsUmluZywKICBCZXR3ZWVuSG9yaXpvbmFsRW5kOiAoKSA9PiBCZXR3ZWVuSG9yaXpvbnRhbEVuZCwKICBCZXR3ZWVuSG9yaXpvbmFsU3RhcnQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQsCiAgQmV0d2Vlbkhvcml6b250YWxFbmQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsRW5kLAogIEJldHdlZW5Ib3Jpem9udGFsU3RhcnQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsU3RhcnQsCiAgQmV0d2VlblZlcnRpY2FsRW5kOiAoKSA9PiBCZXR3ZWVuVmVydGljYWxFbmQsCiAgQmV0d2VlblZlcnRpY2FsU3RhcnQ6ICgpID0+IEJldHdlZW5WZXJ0aWNhbFN0YXJ0LAogIEJpY2Vwc0ZsZXhlZDogKCkgPT4gQmljZXBzRmxleGVkLAogIEJpa2U6ICgpID0+IEJpa2UsCiAgQmluYXJ5OiAoKSA9PiBCaW5hcnksCiAgQmlub2N1bGFyczogKCkgPT4gQmlub2N1bGFycywKICBCaW9oYXphcmQ6ICgpID0+IEJpb2hhemFyZCwKICBCaXJkOiAoKSA9PiBCaXJkLAogIEJpcmRob3VzZTogKCkgPT4gQmlyZGhvdXNlLAogIEJpdGNvaW46ICgpID0+IEJpdGNvaW4sCiAgQmxlbmQ6ICgpID0+IEJsZW5kLAogIEJsaW5kczogKCkgPT4gQmxpbmRzLAogIEJsb2NrczogKCkgPT4gQmxvY2tzLAogIEJsdWV0b290aDogKCkgPT4gQmx1ZXRvb3RoLAogIEJsdWV0b290aENvbm5lY3RlZDogKCkgPT4gQmx1ZXRvb3RoQ29ubmVjdGVkLAogIEJsdWV0b290aE9mZjogKCkgPT4gQmx1ZXRvb3RoT2ZmLAogIEJsdWV0b290aFNlYXJjaGluZzogKCkgPT4gQmx1ZXRvb3RoU2VhcmNoaW5nLAogIEJvbGQ6ICgpID0+IEJvbGQsCiAgQm9sdDogKCkgPT4gQm9sdCwKICBCb21iOiAoKSA9PiBCb21iLAogIEJvbmU6ICgpID0+IEJvbmUsCiAgQm9vazogKCkgPT4gQm9vaywKICBCb29rQTogKCkgPT4gQm9va0EsCiAgQm9va0FsZXJ0OiAoKSA9PiBCb29rQWxlcnQsCiAgQm9va0F1ZGlvOiAoKSA9PiBCb29rQXVkaW8sCiAgQm9va0NoZWNrOiAoKSA9PiBCb29rQ2hlY2ssCiAgQm9va0NvcHk6ICgpID0+IEJvb2tDb3B5LAogIEJvb2tEYXNoZWQ6ICgpID0+IEJvb2tEYXNoZWQsCiAgQm9va0Rvd246ICgpID0+IEJvb2tEb3duLAogIEJvb2tIZWFkcGhvbmVzOiAoKSA9PiBCb29rSGVhZHBob25lcywKICBCb29rSGVhcnQ6ICgpID0+IEJvb2tIZWFydCwKICBCb29rSW1hZ2U6ICgpID0+IEJvb2tJbWFnZSwKICBCb29rS2V5OiAoKSA9PiBCb29rS2V5LAogIEJvb2tMb2NrOiAoKSA9PiBCb29rTG9jaywKICBCb29rTWFya2VkOiAoKSA9PiBCb29rTWFya2VkLAogIEJvb2tNaW51czogKCkgPT4gQm9va01pbnVzLAogIEJvb2tPcGVuOiAoKSA9PiBCb29rT3BlbiwKICBCb29rT3BlbkNoZWNrOiAoKSA9PiBCb29rT3BlbkNoZWNrLAogIEJvb2tPcGVuVGV4dDogKCkgPT4gQm9va09wZW5UZXh0LAogIEJvb2tQbHVzOiAoKSA9PiBCb29rUGx1cywKICBCb29rU2VhcmNoOiAoKSA9PiBCb29rU2VhcmNoLAogIEJvb2tUZW1wbGF0ZTogKCkgPT4gQm9va0Rhc2hlZCwKICBCb29rVGV4dDogKCkgPT4gQm9va1RleHQsCiAgQm9va1R5cGU6ICgpID0+IEJvb2tUeXBlLAogIEJvb2tVcDogKCkgPT4gQm9va1VwLAogIEJvb2tVcDI6ICgpID0+IEJvb2tVcDIsCiAgQm9va1VzZXI6ICgpID0+IEJvb2tVc2VyLAogIEJvb2tYOiAoKSA9PiBCb29rWCwKICBCb29rbWFyazogKCkgPT4gQm9va21hcmssCiAgQm9va21hcmtDaGVjazogKCkgPT4gQm9va21hcmtDaGVjaywKICBCb29rbWFya01pbnVzOiAoKSA9PiBCb29rbWFya01pbnVzLAogIEJvb2ttYXJrUGx1czogKCkgPT4gQm9va21hcmtQbHVzLAogIEJvb2ttYXJrWDogKCkgPT4gQm9va21hcmtYLAogIEJvb21Cb3g6ICgpID0+IEJvb21Cb3gsCiAgQm90OiAoKSA9PiBCb3QsCiAgQm90TWVzc2FnZVNxdWFyZTogKCkgPT4gQm90TWVzc2FnZVNxdWFyZSwKICBCb3RPZmY6ICgpID0+IEJvdE9mZiwKICBCb3R0bGVXaW5lOiAoKSA9PiBCb3R0bGVXaW5lLAogIEJvd0Fycm93OiAoKSA9PiBCb3dBcnJvdywKICBCb3g6ICgpID0+IEJveCwKICBCb3hTZWxlY3Q6ICgpID0+IFNxdWFyZURhc2hlZCwKICBCb3hlczogKCkgPT4gQm94ZXMsCiAgQnJhY2VzOiAoKSA9PiBCcmFjZXMsCiAgQnJhY2tldHM6ICgpID0+IEJyYWNrZXRzLAogIEJyYWluOiAoKSA9PiBCcmFpbiwKICBCcmFpbkNpcmN1aXQ6ICgpID0+IEJyYWluQ2lyY3VpdCwKICBCcmFpbkNvZzogKCkgPT4gQnJhaW5Db2csCiAgQnJpY2tXYWxsOiAoKSA9PiBCcmlja1dhbGwsCiAgQnJpY2tXYWxsRmlyZTogKCkgPT4gQnJpY2tXYWxsRmlyZSwKICBCcmlja1dhbGxTaGllbGQ6ICgpID0+IEJyaWNrV2FsbFNoaWVsZCwKICBCcmllZmNhc2U6ICgpID0+IEJyaWVmY2FzZSwKICBCcmllZmNhc2VCdXNpbmVzczogKCkgPT4gQnJpZWZjYXNlQnVzaW5lc3MsCiAgQnJpZWZjYXNlQ29udmV5b3JCZWx0OiAoKSA9PiBCcmllZmNhc2VDb252ZXlvckJlbHQsCiAgQnJpZWZjYXNlTWVkaWNhbDogKCkgPT4gQnJpZWZjYXNlTWVkaWNhbCwKICBCcmluZ1RvRnJvbnQ6ICgpID0+IEJyaW5nVG9Gcm9udCwKICBCcnVzaDogKCkgPT4gQnJ1c2gsCiAgQnJ1c2hDbGVhbmluZzogKCkgPT4gQnJ1c2hDbGVhbmluZywKICBCdWJibGVzOiAoKSA9PiBCdWJibGVzLAogIEJ1ZzogKCkgPT4gQnVnLAogIEJ1Z09mZjogKCkgPT4gQnVnT2ZmLAogIEJ1Z1BsYXk6ICgpID0+IEJ1Z1BsYXksCiAgQnVpbGRpbmc6ICgpID0+IEJ1aWxkaW5nLAogIEJ1aWxkaW5nMjogKCkgPT4gQnVpbGRpbmcyLAogIEJ1czogKCkgPT4gQnVzLAogIEJ1c0Zyb250OiAoKSA9PiBCdXNGcm9udCwKICBDYWJsZTogKCkgPT4gQ2FibGUsCiAgQ2FibGVDYXI6ICgpID0+IENhYmxlQ2FyLAogIENha2U6ICgpID0+IENha2UsCiAgQ2FrZVNsaWNlOiAoKSA9PiBDYWtlU2xpY2UsCiAgQ2FsY3VsYXRvcjogKCkgPT4gQ2FsY3VsYXRvciwKICBDYWxlbmRhcjogKCkgPT4gQ2FsZW5kYXIsCiAgQ2FsZW5kYXIxOiAoKSA9PiBDYWxlbmRhcjEsCiAgQ2FsZW5kYXJBcnJvd0Rvd246ICgpID0+IENhbGVuZGFyQXJyb3dEb3duLAogIENhbGVuZGFyQXJyb3dVcDogKCkgPT4gQ2FsZW5kYXJBcnJvd1VwLAogIENhbGVuZGFyQ2hlY2s6ICgpID0+IENhbGVuZGFyQ2hlY2ssCiAgQ2FsZW5kYXJDaGVjazI6ICgpID0+IENhbGVuZGFyQ2hlY2syLAogIENhbGVuZGFyQ2xvY2s6ICgpID0+IENhbGVuZGFyQ2xvY2ssCiAgQ2FsZW5kYXJDb2c6ICgpID0+IENhbGVuZGFyQ29nLAogIENhbGVuZGFyRGF5czogKCkgPT4gQ2FsZW5kYXJEYXlzLAogIENhbGVuZGFyRm9sZDogKCkgPT4gQ2FsZW5kYXJGb2xkLAogIENhbGVuZGFySGVhcnQ6ICgpID0+IENhbGVuZGFySGVhcnQsCiAgQ2FsZW5kYXJNaW51czogKCkgPT4gQ2FsZW5kYXJNaW51cywKICBDYWxlbmRhck1pbnVzMjogKCkgPT4gQ2FsZW5kYXJNaW51czIsCiAgQ2FsZW5kYXJPZmY6ICgpID0+IENhbGVuZGFyT2ZmLAogIENhbGVuZGFyUGx1czogKCkgPT4gQ2FsZW5kYXJQbHVzLAogIENhbGVuZGFyUGx1czI6ICgpID0+IENhbGVuZGFyUGx1czIsCiAgQ2FsZW5kYXJSYW5nZTogKCkgPT4gQ2FsZW5kYXJSYW5nZSwKICBDYWxlbmRhclNlYXJjaDogKCkgPT4gQ2FsZW5kYXJTZWFyY2gsCiAgQ2FsZW5kYXJTeW5jOiAoKSA9PiBDYWxlbmRhclN5bmMsCiAgQ2FsZW5kYXJYOiAoKSA9PiBDYWxlbmRhclgsCiAgQ2FsZW5kYXJYMjogKCkgPT4gQ2FsZW5kYXJYMiwKICBDYWxlbmRhcnM6ICgpID0+IENhbGVuZGFycywKICBDYW1lcmE6ICgpID0+IENhbWVyYSwKICBDYW1lcmFPZmY6ICgpID0+IENhbWVyYU9mZiwKICBDYW5kbGVzdGlja0NoYXJ0OiAoKSA9PiBDaGFydENhbmRsZXN0aWNrLAogIENhbmR5OiAoKSA9PiBDYW5keSwKICBDYW5keUNhbmU6ICgpID0+IENhbmR5Q2FuZSwKICBDYW5keU9mZjogKCkgPT4gQ2FuZHlPZmYsCiAgQ2FubmFiaXM6ICgpID0+IENhbm5hYmlzLAogIENhbm5hYmlzT2ZmOiAoKSA9PiBDYW5uYWJpc09mZiwKICBDYXB0aW9uczogKCkgPT4gQ2FwdGlvbnMsCiAgQ2FwdGlvbnNPZmY6ICgpID0+IENhcHRpb25zT2ZmLAogIENhcjogKCkgPT4gQ2FyLAogIENhckZyb250OiAoKSA9PiBDYXJGcm9udCwKICBDYXJUYXhpRnJvbnQ6ICgpID0+IENhclRheGlGcm9udCwKICBDYXJhdmFuOiAoKSA9PiBDYXJhdmFuLAogIENhcmRTaW06ICgpID0+IENhcmRTaW0sCiAgQ2Fycm90OiAoKSA9PiBDYXJyb3QsCiAgQ2FzZUxvd2VyOiAoKSA9PiBDYXNlTG93ZXIsCiAgQ2FzZVNlbnNpdGl2ZTogKCkgPT4gQ2FzZVNlbnNpdGl2ZSwKICBDYXNlVXBwZXI6ICgpID0+IENhc2VVcHBlciwKICBDYXNzZXR0ZVRhcGU6ICgpID0+IENhc3NldHRlVGFwZSwKICBDYXN0OiAoKSA9PiBDYXN0LAogIENhc3RsZTogKCkgPT4gQ2FzdGxlLAogIENhdDogKCkgPT4gQ2F0LAogIENjdHY6ICgpID0+IENjdHYsCiAgQ2hhcnRBcmVhOiAoKSA9PiBDaGFydEFyZWEsCiAgQ2hhcnRCYXI6ICgpID0+IENoYXJ0QmFyLAogIENoYXJ0QmFyQmlnOiAoKSA9PiBDaGFydEJhckJpZywKICBDaGFydEJhckRlY3JlYXNpbmc6ICgpID0+IENoYXJ0QmFyRGVjcmVhc2luZywKICBDaGFydEJhckluY3JlYXNpbmc6ICgpID0+IENoYXJ0QmFySW5jcmVhc2luZywKICBDaGFydEJhclN0YWNrZWQ6ICgpID0+IENoYXJ0QmFyU3RhY2tlZCwKICBDaGFydENhbmRsZXN0aWNrOiAoKSA9PiBDaGFydENhbmRsZXN0aWNrLAogIENoYXJ0Q29sdW1uOiAoKSA9PiBDaGFydENvbHVtbiwKICBDaGFydENvbHVtbkJpZzogKCkgPT4gQ2hhcnRDb2x1bW5CaWcsCiAgQ2hhcnRDb2x1bW5EZWNyZWFzaW5nOiAoKSA9PiBDaGFydENvbHVtbkRlY3JlYXNpbmcsCiAgQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgQ2hhcnRDb2x1bW5TdGFja2VkOiAoKSA9PiBDaGFydENvbHVtblN0YWNrZWQsCiAgQ2hhcnRHYW50dDogKCkgPT4gQ2hhcnRHYW50dCwKICBDaGFydExpbmU6ICgpID0+IENoYXJ0TGluZSwKICBDaGFydE5ldHdvcms6ICgpID0+IENoYXJ0TmV0d29yaywKICBDaGFydE5vQXhlc0NvbHVtbjogKCkgPT4gQ2hhcnROb0F4ZXNDb2x1bW4sCiAgQ2hhcnROb0F4ZXNDb2x1bW5EZWNyZWFzaW5nOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmcsCiAgQ2hhcnROb0F4ZXNDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmcsCiAgQ2hhcnROb0F4ZXNDb21iaW5lZDogKCkgPT4gQ2hhcnROb0F4ZXNDb21iaW5lZCwKICBDaGFydE5vQXhlc0dhbnR0OiAoKSA9PiBDaGFydE5vQXhlc0dhbnR0LAogIENoYXJ0UGllOiAoKSA9PiBDaGFydFBpZSwKICBDaGFydFNjYXR0ZXI6ICgpID0+IENoYXJ0U2NhdHRlciwKICBDaGFydFNwbGluZTogKCkgPT4gQ2hhcnRTcGxpbmUsCiAgQ2hlY2s6ICgpID0+IENoZWNrLAogIENoZWNrQ2hlY2s6ICgpID0+IENoZWNrQ2hlY2ssCiAgQ2hlY2tDaXJjbGU6ICgpID0+IENpcmNsZUNoZWNrQmlnLAogIENoZWNrQ2lyY2xlMjogKCkgPT4gQ2lyY2xlQ2hlY2ssCiAgQ2hlY2tMaW5lOiAoKSA9PiBDaGVja0xpbmUsCiAgQ2hlY2tTcXVhcmU6ICgpID0+IFNxdWFyZUNoZWNrQmlnLAogIENoZWNrU3F1YXJlMjogKCkgPT4gU3F1YXJlQ2hlY2ssCiAgQ2hlZkhhdDogKCkgPT4gQ2hlZkhhdCwKICBDaGVycnk6ICgpID0+IENoZXJyeSwKICBDaGVzc0Jpc2hvcDogKCkgPT4gQ2hlc3NCaXNob3AsCiAgQ2hlc3NLaW5nOiAoKSA9PiBDaGVzc0tpbmcsCiAgQ2hlc3NLbmlnaHQ6ICgpID0+IENoZXNzS25pZ2h0LAogIENoZXNzUGF3bjogKCkgPT4gQ2hlc3NQYXduLAogIENoZXNzUXVlZW46ICgpID0+IENoZXNzUXVlZW4sCiAgQ2hlc3NSb29rOiAoKSA9PiBDaGVzc1Jvb2ssCiAgQ2hldnJvbkRvd246ICgpID0+IENoZXZyb25Eb3duLAogIENoZXZyb25Eb3duQ2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uRG93biwKICBDaGV2cm9uRG93blNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvbkRvd24sCiAgQ2hldnJvbkZpcnN0OiAoKSA9PiBDaGV2cm9uRmlyc3QsCiAgQ2hldnJvbkxhc3Q6ICgpID0+IENoZXZyb25MYXN0LAogIENoZXZyb25MZWZ0OiAoKSA9PiBDaGV2cm9uTGVmdCwKICBDaGV2cm9uTGVmdENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvbkxlZnQsCiAgQ2hldnJvbkxlZnRTcXVhcmU6ICgpID0+IFNxdWFyZUNoZXZyb25MZWZ0LAogIENoZXZyb25SaWdodDogKCkgPT4gQ2hldnJvblJpZ2h0LAogIENoZXZyb25SaWdodENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvblJpZ2h0LAogIENoZXZyb25SaWdodFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvblJpZ2h0LAogIENoZXZyb25VcDogKCkgPT4gQ2hldnJvblVwLAogIENoZXZyb25VcENpcmNsZTogKCkgPT4gQ2lyY2xlQ2hldnJvblVwLAogIENoZXZyb25VcFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvblVwLAogIENoZXZyb25zRG93bjogKCkgPT4gQ2hldnJvbnNEb3duLAogIENoZXZyb25zRG93blVwOiAoKSA9PiBDaGV2cm9uc0Rvd25VcCwKICBDaGV2cm9uc0xlZnQ6ICgpID0+IENoZXZyb25zTGVmdCwKICBDaGV2cm9uc0xlZnRSaWdodDogKCkgPT4gQ2hldnJvbnNMZWZ0UmlnaHQsCiAgQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpczogKCkgPT4gQ2hldnJvbnNMZWZ0UmlnaHRFbGxpcHNpcywKICBDaGV2cm9uc1JpZ2h0OiAoKSA9PiBDaGV2cm9uc1JpZ2h0LAogIENoZXZyb25zUmlnaHRMZWZ0OiAoKSA9PiBDaGV2cm9uc1JpZ2h0TGVmdCwKICBDaGV2cm9uc1VwOiAoKSA9PiBDaGV2cm9uc1VwLAogIENoZXZyb25zVXBEb3duOiAoKSA9PiBDaGV2cm9uc1VwRG93biwKICBDaHJvbWU6ICgpID0+IENocm9taXVtLAogIENocm9taXVtOiAoKSA9PiBDaHJvbWl1bSwKICBDaHVyY2g6ICgpID0+IENodXJjaCwKICBDaWdhcmV0dGU6ICgpID0+IENpZ2FyZXR0ZSwKICBDaWdhcmV0dGVPZmY6ICgpID0+IENpZ2FyZXR0ZU9mZiwKICBDaXJjbGU6ICgpID0+IENpcmNsZSwKICBDaXJjbGVBbGVydDogKCkgPT4gQ2lyY2xlQWxlcnQsCiAgQ2lyY2xlQXJyb3dEb3duOiAoKSA9PiBDaXJjbGVBcnJvd0Rvd24sCiAgQ2lyY2xlQXJyb3dMZWZ0OiAoKSA9PiBDaXJjbGVBcnJvd0xlZnQsCiAgQ2lyY2xlQXJyb3dPdXREb3duTGVmdDogKCkgPT4gQ2lyY2xlQXJyb3dPdXREb3duTGVmdCwKICBDaXJjbGVBcnJvd091dERvd25SaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dPdXREb3duUmlnaHQsCiAgQ2lyY2xlQXJyb3dPdXRVcExlZnQ6ICgpID0+IENpcmNsZUFycm93T3V0VXBMZWZ0LAogIENpcmNsZUFycm93T3V0VXBSaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0LAogIENpcmNsZUFycm93UmlnaHQ6ICgpID0+IENpcmNsZUFycm93UmlnaHQsCiAgQ2lyY2xlQXJyb3dVcDogKCkgPT4gQ2lyY2xlQXJyb3dVcCwKICBDaXJjbGVDaGVjazogKCkgPT4gQ2lyY2xlQ2hlY2ssCiAgQ2lyY2xlQ2hlY2tCaWc6ICgpID0+IENpcmNsZUNoZWNrQmlnLAogIENpcmNsZUNoZXZyb25Eb3duOiAoKSA9PiBDaXJjbGVDaGV2cm9uRG93biwKICBDaXJjbGVDaGV2cm9uTGVmdDogKCkgPT4gQ2lyY2xlQ2hldnJvbkxlZnQsCiAgQ2lyY2xlQ2hldnJvblJpZ2h0OiAoKSA9PiBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgQ2lyY2xlQ2hldnJvblVwOiAoKSA9PiBDaXJjbGVDaGV2cm9uVXAsCiAgQ2lyY2xlRGFzaGVkOiAoKSA9PiBDaXJjbGVEYXNoZWQsCiAgQ2lyY2xlRGl2aWRlOiAoKSA9PiBDaXJjbGVEaXZpZGUsCiAgQ2lyY2xlRG9sbGFyU2lnbjogKCkgPT4gQ2lyY2xlRG9sbGFyU2lnbiwKICBDaXJjbGVEb3Q6ICgpID0+IENpcmNsZURvdCwKICBDaXJjbGVEb3REYXNoZWQ6ICgpID0+IENpcmNsZURvdERhc2hlZCwKICBDaXJjbGVFbGxpcHNpczogKCkgPT4gQ2lyY2xlRWxsaXBzaXMsCiAgQ2lyY2xlRXF1YWw6ICgpID0+IENpcmNsZUVxdWFsLAogIENpcmNsZUZhZGluZ0Fycm93VXA6ICgpID0+IENpcmNsZUZhZGluZ0Fycm93VXAsCiAgQ2lyY2xlRmFkaW5nUGx1czogKCkgPT4gQ2lyY2xlRmFkaW5nUGx1cywKICBDaXJjbGVHYXVnZTogKCkgPT4gQ2lyY2xlR2F1Z2UsCiAgQ2lyY2xlSGVscDogKCkgPT4gQ2lyY2xlUXVlc3Rpb25NYXJrLAogIENpcmNsZU1pbnVzOiAoKSA9PiBDaXJjbGVNaW51cywKICBDaXJjbGVPZmY6ICgpID0+IENpcmNsZU9mZiwKICBDaXJjbGVQYXJraW5nOiAoKSA9PiBDaXJjbGVQYXJraW5nLAogIENpcmNsZVBhcmtpbmdPZmY6ICgpID0+IENpcmNsZVBhcmtpbmdPZmYsCiAgQ2lyY2xlUGF1c2U6ICgpID0+IENpcmNsZVBhdXNlLAogIENpcmNsZVBlcmNlbnQ6ICgpID0+IENpcmNsZVBlcmNlbnQsCiAgQ2lyY2xlUGlsZTogKCkgPT4gQ2lyY2xlUGlsZSwKICBDaXJjbGVQbGF5OiAoKSA9PiBDaXJjbGVQbGF5LAogIENpcmNsZVBsdXM6ICgpID0+IENpcmNsZVBsdXMsCiAgQ2lyY2xlUG91bmRTdGVybGluZzogKCkgPT4gQ2lyY2xlUG91bmRTdGVybGluZywKICBDaXJjbGVQb3dlcjogKCkgPT4gQ2lyY2xlUG93ZXIsCiAgQ2lyY2xlUXVlc3Rpb25NYXJrOiAoKSA9PiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgQ2lyY2xlU2xhc2g6ICgpID0+IENpcmNsZVNsYXNoLAogIENpcmNsZVNsYXNoMjogKCkgPT4gQ2lyY2xlU2xhc2gyLAogIENpcmNsZVNsYXNoZWQ6ICgpID0+IENpcmNsZVNsYXNoMiwKICBDaXJjbGVTbWFsbDogKCkgPT4gQ2lyY2xlU21hbGwsCiAgQ2lyY2xlU3RhcjogKCkgPT4gQ2lyY2xlU3RhciwKICBDaXJjbGVTdG9wOiAoKSA9PiBDaXJjbGVTdG9wLAogIENpcmNsZVVzZXI6ICgpID0+IENpcmNsZVVzZXIsCiAgQ2lyY2xlVXNlclJvdW5kOiAoKSA9PiBDaXJjbGVVc2VyUm91bmQsCiAgQ2lyY2xlWDogKCkgPT4gQ2lyY2xlWCwKICBDaXJjdWl0Qm9hcmQ6ICgpID0+IENpcmN1aXRCb2FyZCwKICBDaXRydXM6ICgpID0+IENpdHJ1cywKICBDbGFwcGVyYm9hcmQ6ICgpID0+IENsYXBwZXJib2FyZCwKICBDbGlwYm9hcmQ6ICgpID0+IENsaXBib2FyZCwKICBDbGlwYm9hcmRDaGVjazogKCkgPT4gQ2xpcGJvYXJkQ2hlY2ssCiAgQ2xpcGJvYXJkQ2xvY2s6ICgpID0+IENsaXBib2FyZENsb2NrLAogIENsaXBib2FyZENvcHk6ICgpID0+IENsaXBib2FyZENvcHksCiAgQ2xpcGJvYXJkRWRpdDogKCkgPT4gQ2xpcGJvYXJkUGVuLAogIENsaXBib2FyZExpc3Q6ICgpID0+IENsaXBib2FyZExpc3QsCiAgQ2xpcGJvYXJkTWludXM6ICgpID0+IENsaXBib2FyZE1pbnVzLAogIENsaXBib2FyZFBhc3RlOiAoKSA9PiBDbGlwYm9hcmRQYXN0ZSwKICBDbGlwYm9hcmRQZW46ICgpID0+IENsaXBib2FyZFBlbiwKICBDbGlwYm9hcmRQZW5MaW5lOiAoKSA9PiBDbGlwYm9hcmRQZW5MaW5lLAogIENsaXBib2FyZFBsdXM6ICgpID0+IENsaXBib2FyZFBsdXMsCiAgQ2xpcGJvYXJkU2lnbmF0dXJlOiAoKSA9PiBDbGlwYm9hcmRQZW5MaW5lLAogIENsaXBib2FyZFR5cGU6ICgpID0+IENsaXBib2FyZFR5cGUsCiAgQ2xpcGJvYXJkWDogKCkgPT4gQ2xpcGJvYXJkWCwKICBDbG9jazogKCkgPT4gQ2xvY2ssCiAgQ2xvY2sxOiAoKSA9PiBDbG9jazEsCiAgQ2xvY2sxMDogKCkgPT4gQ2xvY2sxMCwKICBDbG9jazExOiAoKSA9PiBDbG9jazExLAogIENsb2NrMTI6ICgpID0+IENsb2NrMTIsCiAgQ2xvY2syOiAoKSA9PiBDbG9jazIsCiAgQ2xvY2szOiAoKSA9PiBDbG9jazMsCiAgQ2xvY2s0OiAoKSA9PiBDbG9jazQsCiAgQ2xvY2s1OiAoKSA9PiBDbG9jazUsCiAgQ2xvY2s2OiAoKSA9PiBDbG9jazYsCiAgQ2xvY2s3OiAoKSA9PiBDbG9jazcsCiAgQ2xvY2s4OiAoKSA9PiBDbG9jazgsCiAgQ2xvY2s5OiAoKSA9PiBDbG9jazksCiAgQ2xvY2tBbGVydDogKCkgPT4gQ2xvY2tBbGVydCwKICBDbG9ja0Fycm93RG93bjogKCkgPT4gQ2xvY2tBcnJvd0Rvd24sCiAgQ2xvY2tBcnJvd1VwOiAoKSA9PiBDbG9ja0Fycm93VXAsCiAgQ2xvY2tDaGVjazogKCkgPT4gQ2xvY2tDaGVjaywKICBDbG9ja0ZhZGluZzogKCkgPT4gQ2xvY2tGYWRpbmcsCiAgQ2xvY2tQbHVzOiAoKSA9PiBDbG9ja1BsdXMsCiAgQ2xvc2VkQ2FwdGlvbjogKCkgPT4gQ2xvc2VkQ2FwdGlvbiwKICBDbG91ZDogKCkgPT4gQ2xvdWQsCiAgQ2xvdWRBbGVydDogKCkgPT4gQ2xvdWRBbGVydCwKICBDbG91ZEJhY2t1cDogKCkgPT4gQ2xvdWRCYWNrdXAsCiAgQ2xvdWRDaGVjazogKCkgPT4gQ2xvdWRDaGVjaywKICBDbG91ZENvZzogKCkgPT4gQ2xvdWRDb2csCiAgQ2xvdWREb3dubG9hZDogKCkgPT4gQ2xvdWREb3dubG9hZCwKICBDbG91ZERyaXp6bGU6ICgpID0+IENsb3VkRHJpenpsZSwKICBDbG91ZEZvZzogKCkgPT4gQ2xvdWRGb2csCiAgQ2xvdWRIYWlsOiAoKSA9PiBDbG91ZEhhaWwsCiAgQ2xvdWRMaWdodG5pbmc6ICgpID0+IENsb3VkTGlnaHRuaW5nLAogIENsb3VkTW9vbjogKCkgPT4gQ2xvdWRNb29uLAogIENsb3VkTW9vblJhaW46ICgpID0+IENsb3VkTW9vblJhaW4sCiAgQ2xvdWRPZmY6ICgpID0+IENsb3VkT2ZmLAogIENsb3VkUmFpbjogKCkgPT4gQ2xvdWRSYWluLAogIENsb3VkUmFpbldpbmQ6ICgpID0+IENsb3VkUmFpbldpbmQsCiAgQ2xvdWRTbm93OiAoKSA9PiBDbG91ZFNub3csCiAgQ2xvdWRTdW46ICgpID0+IENsb3VkU3VuLAogIENsb3VkU3VuUmFpbjogKCkgPT4gQ2xvdWRTdW5SYWluLAogIENsb3VkU3luYzogKCkgPT4gQ2xvdWRTeW5jLAogIENsb3VkVXBsb2FkOiAoKSA9PiBDbG91ZFVwbG9hZCwKICBDbG91ZHk6ICgpID0+IENsb3VkeSwKICBDbG92ZXI6ICgpID0+IENsb3ZlciwKICBDbHViOiAoKSA9PiBDbHViLAogIENvZGU6ICgpID0+IENvZGUsCiAgQ29kZTI6ICgpID0+IENvZGVYbWwsCiAgQ29kZVNxdWFyZTogKCkgPT4gU3F1YXJlQ29kZSwKICBDb2RlWG1sOiAoKSA9PiBDb2RlWG1sLAogIENvZGVwZW46ICgpID0+IENvZGVwZW4sCiAgQ29kZXNhbmRib3g6ICgpID0+IENvZGVzYW5kYm94LAogIENvZmZlZTogKCkgPT4gQ29mZmVlLAogIENvZzogKCkgPT4gQ29nLAogIENvaW5zOiAoKSA9PiBDb2lucywKICBDb2x1bW5zOiAoKSA9PiBDb2x1bW5zMiwKICBDb2x1bW5zMjogKCkgPT4gQ29sdW1uczIsCiAgQ29sdW1uczM6ICgpID0+IENvbHVtbnMzLAogIENvbHVtbnMzQ29nOiAoKSA9PiBDb2x1bW5zM0NvZywKICBDb2x1bW5zNDogKCkgPT4gQ29sdW1uczQsCiAgQ29sdW1uc1NldHRpbmdzOiAoKSA9PiBDb2x1bW5zM0NvZywKICBDb21iaW5lOiAoKSA9PiBDb21iaW5lLAogIENvbW1hbmQ6ICgpID0+IENvbW1hbmQsCiAgQ29tcGFzczogKCkgPT4gQ29tcGFzcywKICBDb21wb25lbnQ6ICgpID0+IENvbXBvbmVudCwKICBDb21wdXRlcjogKCkgPT4gQ29tcHV0ZXIsCiAgQ29uY2llcmdlQmVsbDogKCkgPT4gQ29uY2llcmdlQmVsbCwKICBDb25lOiAoKSA9PiBDb25lLAogIENvbnN0cnVjdGlvbjogKCkgPT4gQ29uc3RydWN0aW9uLAogIENvbnRhY3Q6ICgpID0+IENvbnRhY3QsCiAgQ29udGFjdDI6ICgpID0+IENvbnRhY3RSb3VuZCwKICBDb250YWN0Um91bmQ6ICgpID0+IENvbnRhY3RSb3VuZCwKICBDb250YWluZXI6ICgpID0+IENvbnRhaW5lciwKICBDb250cmFzdDogKCkgPT4gQ29udHJhc3QsCiAgQ29va2llOiAoKSA9PiBDb29raWUsCiAgQ29va2luZ1BvdDogKCkgPT4gQ29va2luZ1BvdCwKICBDb3B5OiAoKSA9PiBDb3B5LAogIENvcHlDaGVjazogKCkgPT4gQ29weUNoZWNrLAogIENvcHlNaW51czogKCkgPT4gQ29weU1pbnVzLAogIENvcHlQbHVzOiAoKSA9PiBDb3B5UGx1cywKICBDb3B5U2xhc2g6ICgpID0+IENvcHlTbGFzaCwKICBDb3B5WDogKCkgPT4gQ29weVgsCiAgQ29weWxlZnQ6ICgpID0+IENvcHlsZWZ0LAogIENvcHlyaWdodDogKCkgPT4gQ29weXJpZ2h0LAogIENvcm5lckRvd25MZWZ0OiAoKSA9PiBDb3JuZXJEb3duTGVmdCwKICBDb3JuZXJEb3duUmlnaHQ6ICgpID0+IENvcm5lckRvd25SaWdodCwKICBDb3JuZXJMZWZ0RG93bjogKCkgPT4gQ29ybmVyTGVmdERvd24sCiAgQ29ybmVyTGVmdFVwOiAoKSA9PiBDb3JuZXJMZWZ0VXAsCiAgQ29ybmVyUmlnaHREb3duOiAoKSA9PiBDb3JuZXJSaWdodERvd24sCiAgQ29ybmVyUmlnaHRVcDogKCkgPT4gQ29ybmVyUmlnaHRVcCwKICBDb3JuZXJVcExlZnQ6ICgpID0+IENvcm5lclVwTGVmdCwKICBDb3JuZXJVcFJpZ2h0OiAoKSA9PiBDb3JuZXJVcFJpZ2h0LAogIENwdTogKCkgPT4gQ3B1LAogIENyZWF0aXZlQ29tbW9uczogKCkgPT4gQ3JlYXRpdmVDb21tb25zLAogIENyZWRpdENhcmQ6ICgpID0+IENyZWRpdENhcmQsCiAgQ3JvaXNzYW50OiAoKSA9PiBDcm9pc3NhbnQsCiAgQ3JvcDogKCkgPT4gQ3JvcCwKICBDcm9zczogKCkgPT4gQ3Jvc3MsCiAgQ3Jvc3NoYWlyOiAoKSA9PiBDcm9zc2hhaXIsCiAgQ3Jvd246ICgpID0+IENyb3duLAogIEN1Ym9pZDogKCkgPT4gQ3Vib2lkLAogIEN1cFNvZGE6ICgpID0+IEN1cFNvZGEsCiAgQ3VybHlCcmFjZXM6ICgpID0+IEJyYWNlcywKICBDdXJyZW5jeTogKCkgPT4gQ3VycmVuY3ksCiAgQ3lsaW5kZXI6ICgpID0+IEN5bGluZGVyLAogIERhbTogKCkgPT4gRGFtLAogIERhdGFiYXNlOiAoKSA9PiBEYXRhYmFzZSwKICBEYXRhYmFzZUJhY2t1cDogKCkgPT4gRGF0YWJhc2VCYWNrdXAsCiAgRGF0YWJhc2VaYXA6ICgpID0+IERhdGFiYXNlWmFwLAogIERlY2ltYWxzQXJyb3dMZWZ0OiAoKSA9PiBEZWNpbWFsc0Fycm93TGVmdCwKICBEZWNpbWFsc0Fycm93UmlnaHQ6ICgpID0+IERlY2ltYWxzQXJyb3dSaWdodCwKICBEZWxldGU6ICgpID0+IERlbGV0ZSwKICBEZXNzZXJ0OiAoKSA9PiBEZXNzZXJ0LAogIERpYW1ldGVyOiAoKSA9PiBEaWFtZXRlciwKICBEaWFtb25kOiAoKSA9PiBEaWFtb25kLAogIERpYW1vbmRNaW51czogKCkgPT4gRGlhbW9uZE1pbnVzLAogIERpYW1vbmRQZXJjZW50OiAoKSA9PiBEaWFtb25kUGVyY2VudCwKICBEaWFtb25kUGx1czogKCkgPT4gRGlhbW9uZFBsdXMsCiAgRGljZTE6ICgpID0+IERpY2UxLAogIERpY2UyOiAoKSA9PiBEaWNlMiwKICBEaWNlMzogKCkgPT4gRGljZTMsCiAgRGljZTQ6ICgpID0+IERpY2U0LAogIERpY2U1OiAoKSA9PiBEaWNlNSwKICBEaWNlNjogKCkgPT4gRGljZTYsCiAgRGljZXM6ICgpID0+IERpY2VzLAogIERpZmY6ICgpID0+IERpZmYsCiAgRGlzYzogKCkgPT4gRGlzYywKICBEaXNjMjogKCkgPT4gRGlzYzIsCiAgRGlzYzM6ICgpID0+IERpc2MzLAogIERpc2NBbGJ1bTogKCkgPT4gRGlzY0FsYnVtLAogIERpdmlkZTogKCkgPT4gRGl2aWRlLAogIERpdmlkZUNpcmNsZTogKCkgPT4gQ2lyY2xlRGl2aWRlLAogIERpdmlkZVNxdWFyZTogKCkgPT4gU3F1YXJlRGl2aWRlLAogIERuYTogKCkgPT4gRG5hLAogIERuYU9mZjogKCkgPT4gRG5hT2ZmLAogIERvY2s6ICgpID0+IERvY2ssCiAgRG9nOiAoKSA9PiBEb2csCiAgRG9sbGFyU2lnbjogKCkgPT4gRG9sbGFyU2lnbiwKICBEb251dDogKCkgPT4gRG9udXQsCiAgRG9vckNsb3NlZDogKCkgPT4gRG9vckNsb3NlZCwKICBEb29yQ2xvc2VkTG9ja2VkOiAoKSA9PiBEb29yQ2xvc2VkTG9ja2VkLAogIERvb3JPcGVuOiAoKSA9PiBEb29yT3BlbiwKICBEb3Q6ICgpID0+IERvdCwKICBEb3RTcXVhcmU6ICgpID0+IFNxdWFyZURvdCwKICBEb3dubG9hZDogKCkgPT4gRG93bmxvYWQsCiAgRG93bmxvYWRDbG91ZDogKCkgPT4gQ2xvdWREb3dubG9hZCwKICBEcmFmdGluZ0NvbXBhc3M6ICgpID0+IERyYWZ0aW5nQ29tcGFzcywKICBEcmFtYTogKCkgPT4gRHJhbWEsCiAgRHJpYmJibGU6ICgpID0+IERyaWJiYmxlLAogIERyaWxsOiAoKSA9PiBEcmlsbCwKICBEcm9uZTogKCkgPT4gRHJvbmUsCiAgRHJvcGxldDogKCkgPT4gRHJvcGxldCwKICBEcm9wbGV0T2ZmOiAoKSA9PiBEcm9wbGV0T2ZmLAogIERyb3BsZXRzOiAoKSA9PiBEcm9wbGV0cywKICBEcnVtOiAoKSA9PiBEcnVtLAogIERydW1zdGljazogKCkgPT4gRHJ1bXN0aWNrLAogIER1bWJiZWxsOiAoKSA9PiBEdW1iYmVsbCwKICBFYXI6ICgpID0+IEVhciwKICBFYXJPZmY6ICgpID0+IEVhck9mZiwKICBFYXJ0aDogKCkgPT4gRWFydGgsCiAgRWFydGhMb2NrOiAoKSA9PiBFYXJ0aExvY2ssCiAgRWNsaXBzZTogKCkgPT4gRWNsaXBzZSwKICBFZGl0OiAoKSA9PiBTcXVhcmVQZW4sCiAgRWRpdDI6ICgpID0+IFBlbiwKICBFZGl0MzogKCkgPT4gUGVuTGluZSwKICBFZ2c6ICgpID0+IEVnZywKICBFZ2dGcmllZDogKCkgPT4gRWdnRnJpZWQsCiAgRWdnT2ZmOiAoKSA9PiBFZ2dPZmYsCiAgRWxsaXBzaXM6ICgpID0+IEVsbGlwc2lzLAogIEVsbGlwc2lzVmVydGljYWw6ICgpID0+IEVsbGlwc2lzVmVydGljYWwsCiAgRXF1YWw6ICgpID0+IEVxdWFsLAogIEVxdWFsQXBwcm94aW1hdGVseTogKCkgPT4gRXF1YWxBcHByb3hpbWF0ZWx5LAogIEVxdWFsTm90OiAoKSA9PiBFcXVhbE5vdCwKICBFcXVhbFNxdWFyZTogKCkgPT4gU3F1YXJlRXF1YWwsCiAgRXJhc2VyOiAoKSA9PiBFcmFzZXIsCiAgRXRoZXJuZXRQb3J0OiAoKSA9PiBFdGhlcm5ldFBvcnQsCiAgRXVybzogKCkgPT4gRXVybywKICBFdkNoYXJnZXI6ICgpID0+IEV2Q2hhcmdlciwKICBFeHBhbmQ6ICgpID0+IEV4cGFuZCwKICBFeHRlcm5hbExpbms6ICgpID0+IEV4dGVybmFsTGluaywKICBFeWU6ICgpID0+IEV5ZSwKICBFeWVDbG9zZWQ6ICgpID0+IEV5ZUNsb3NlZCwKICBFeWVPZmY6ICgpID0+IEV5ZU9mZiwKICBGYWNlYm9vazogKCkgPT4gRmFjZWJvb2ssCiAgRmFjdG9yeTogKCkgPT4gRmFjdG9yeSwKICBGYW46ICgpID0+IEZhbiwKICBGYXN0Rm9yd2FyZDogKCkgPT4gRmFzdEZvcndhcmQsCiAgRmVhdGhlcjogKCkgPT4gRmVhdGhlciwKICBGZW5jZTogKCkgPT4gRmVuY2UsCiAgRmVycmlzV2hlZWw6ICgpID0+IEZlcnJpc1doZWVsLAogIEZpZ21hOiAoKSA9PiBGaWdtYSwKICBGaWxlOiAoKSA9PiBGaWxlLAogIEZpbGVBcmNoaXZlOiAoKSA9PiBGaWxlQXJjaGl2ZSwKICBGaWxlQXVkaW86ICgpID0+IEZpbGVIZWFkcGhvbmUsCiAgRmlsZUF1ZGlvMjogKCkgPT4gRmlsZUhlYWRwaG9uZSwKICBGaWxlQXhpczNEOiAoKSA9PiBGaWxlQXhpczNkLAogIEZpbGVBeGlzM2Q6ICgpID0+IEZpbGVBeGlzM2QsCiAgRmlsZUJhZGdlOiAoKSA9PiBGaWxlQmFkZ2UsCiAgRmlsZUJhZGdlMjogKCkgPT4gRmlsZUJhZGdlLAogIEZpbGVCYXJDaGFydDogKCkgPT4gRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBGaWxlQmFyQ2hhcnQyOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW4sCiAgRmlsZUJveDogKCkgPT4gRmlsZUJveCwKICBGaWxlQnJhY2VzOiAoKSA9PiBGaWxlQnJhY2VzLAogIEZpbGVCcmFjZXNDb3JuZXI6ICgpID0+IEZpbGVCcmFjZXNDb3JuZXIsCiAgRmlsZUNoYXJ0Q29sdW1uOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW4sCiAgRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZzogKCkgPT4gRmlsZUNoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBGaWxlQ2hhcnRMaW5lOiAoKSA9PiBGaWxlQ2hhcnRMaW5lLAogIEZpbGVDaGFydFBpZTogKCkgPT4gRmlsZUNoYXJ0UGllLAogIEZpbGVDaGVjazogKCkgPT4gRmlsZUNoZWNrLAogIEZpbGVDaGVjazI6ICgpID0+IEZpbGVDaGVja0Nvcm5lciwKICBGaWxlQ2hlY2tDb3JuZXI6ICgpID0+IEZpbGVDaGVja0Nvcm5lciwKICBGaWxlQ2xvY2s6ICgpID0+IEZpbGVDbG9jaywKICBGaWxlQ29kZTogKCkgPT4gRmlsZUNvZGUsCiAgRmlsZUNvZGUyOiAoKSA9PiBGaWxlQ29kZUNvcm5lciwKICBGaWxlQ29kZUNvcm5lcjogKCkgPT4gRmlsZUNvZGVDb3JuZXIsCiAgRmlsZUNvZzogKCkgPT4gRmlsZUNvZywKICBGaWxlQ29nMjogKCkgPT4gRmlsZUNvZywKICBGaWxlRGlmZjogKCkgPT4gRmlsZURpZmYsCiAgRmlsZURpZ2l0OiAoKSA9PiBGaWxlRGlnaXQsCiAgRmlsZURvd246ICgpID0+IEZpbGVEb3duLAogIEZpbGVFZGl0OiAoKSA9PiBGaWxlUGVuLAogIEZpbGVFeGNsYW1hdGlvblBvaW50OiAoKSA9PiBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICBGaWxlSGVhZHBob25lOiAoKSA9PiBGaWxlSGVhZHBob25lLAogIEZpbGVIZWFydDogKCkgPT4gRmlsZUhlYXJ0LAogIEZpbGVJbWFnZTogKCkgPT4gRmlsZUltYWdlLAogIEZpbGVJbnB1dDogKCkgPT4gRmlsZUlucHV0LAogIEZpbGVKc29uOiAoKSA9PiBGaWxlQnJhY2VzLAogIEZpbGVKc29uMjogKCkgPT4gRmlsZUJyYWNlc0Nvcm5lciwKICBGaWxlS2V5OiAoKSA9PiBGaWxlS2V5LAogIEZpbGVLZXkyOiAoKSA9PiBGaWxlS2V5LAogIEZpbGVMaW5lQ2hhcnQ6ICgpID0+IEZpbGVDaGFydExpbmUsCiAgRmlsZUxvY2s6ICgpID0+IEZpbGVMb2NrLAogIEZpbGVMb2NrMjogKCkgPT4gRmlsZUxvY2ssCiAgRmlsZU1pbnVzOiAoKSA9PiBGaWxlTWludXMsCiAgRmlsZU1pbnVzMjogKCkgPT4gRmlsZU1pbnVzQ29ybmVyLAogIEZpbGVNaW51c0Nvcm5lcjogKCkgPT4gRmlsZU1pbnVzQ29ybmVyLAogIEZpbGVNdXNpYzogKCkgPT4gRmlsZU11c2ljLAogIEZpbGVPdXRwdXQ6ICgpID0+IEZpbGVPdXRwdXQsCiAgRmlsZVBlbjogKCkgPT4gRmlsZVBlbiwKICBGaWxlUGVuTGluZTogKCkgPT4gRmlsZVBlbkxpbmUsCiAgRmlsZVBpZUNoYXJ0OiAoKSA9PiBGaWxlQ2hhcnRQaWUsCiAgRmlsZVBsYXk6ICgpID0+IEZpbGVQbGF5LAogIEZpbGVQbHVzOiAoKSA9PiBGaWxlUGx1cywKICBGaWxlUGx1czI6ICgpID0+IEZpbGVQbHVzQ29ybmVyLAogIEZpbGVQbHVzQ29ybmVyOiAoKSA9PiBGaWxlUGx1c0Nvcm5lciwKICBGaWxlUXVlc3Rpb246ICgpID0+IEZpbGVRdWVzdGlvbk1hcmssCiAgRmlsZVF1ZXN0aW9uTWFyazogKCkgPT4gRmlsZVF1ZXN0aW9uTWFyaywKICBGaWxlU2NhbjogKCkgPT4gRmlsZVNjYW4sCiAgRmlsZVNlYXJjaDogKCkgPT4gRmlsZVNlYXJjaCwKICBGaWxlU2VhcmNoMjogKCkgPT4gRmlsZVNlYXJjaENvcm5lciwKICBGaWxlU2VhcmNoQ29ybmVyOiAoKSA9PiBGaWxlU2VhcmNoQ29ybmVyLAogIEZpbGVTaWduYWw6ICgpID0+IEZpbGVTaWduYWwsCiAgRmlsZVNpZ25hdHVyZTogKCkgPT4gRmlsZVBlbkxpbmUsCiAgRmlsZVNsaWRlcnM6ICgpID0+IEZpbGVTbGlkZXJzLAogIEZpbGVTcHJlYWRzaGVldDogKCkgPT4gRmlsZVNwcmVhZHNoZWV0LAogIEZpbGVTdGFjazogKCkgPT4gRmlsZVN0YWNrLAogIEZpbGVTeW1saW5rOiAoKSA9PiBGaWxlU3ltbGluaywKICBGaWxlVGVybWluYWw6ICgpID0+IEZpbGVUZXJtaW5hbCwKICBGaWxlVGV4dDogKCkgPT4gRmlsZVRleHQsCiAgRmlsZVR5cGU6ICgpID0+IEZpbGVUeXBlLAogIEZpbGVUeXBlMjogKCkgPT4gRmlsZVR5cGVDb3JuZXIsCiAgRmlsZVR5cGVDb3JuZXI6ICgpID0+IEZpbGVUeXBlQ29ybmVyLAogIEZpbGVVcDogKCkgPT4gRmlsZVVwLAogIEZpbGVVc2VyOiAoKSA9PiBGaWxlVXNlciwKICBGaWxlVmlkZW86ICgpID0+IEZpbGVQbGF5LAogIEZpbGVWaWRlbzI6ICgpID0+IEZpbGVWaWRlb0NhbWVyYSwKICBGaWxlVmlkZW9DYW1lcmE6ICgpID0+IEZpbGVWaWRlb0NhbWVyYSwKICBGaWxlVm9sdW1lOiAoKSA9PiBGaWxlVm9sdW1lLAogIEZpbGVWb2x1bWUyOiAoKSA9PiBGaWxlU2lnbmFsLAogIEZpbGVXYXJuaW5nOiAoKSA9PiBGaWxlRXhjbGFtYXRpb25Qb2ludCwKICBGaWxlWDogKCkgPT4gRmlsZVgsCiAgRmlsZVgyOiAoKSA9PiBGaWxlWENvcm5lciwKICBGaWxlWENvcm5lcjogKCkgPT4gRmlsZVhDb3JuZXIsCiAgRmlsZXM6ICgpID0+IEZpbGVzLAogIEZpbG06ICgpID0+IEZpbG0sCiAgRmlsdGVyOiAoKSA9PiBGdW5uZWwsCiAgRmlsdGVyWDogKCkgPT4gRnVubmVsWCwKICBGaW5nZXJwcmludDogKCkgPT4gRmluZ2VycHJpbnRQYXR0ZXJuLAogIEZpbmdlcnByaW50UGF0dGVybjogKCkgPT4gRmluZ2VycHJpbnRQYXR0ZXJuLAogIEZpcmVFeHRpbmd1aXNoZXI6ICgpID0+IEZpcmVFeHRpbmd1aXNoZXIsCiAgRmlzaDogKCkgPT4gRmlzaCwKICBGaXNoT2ZmOiAoKSA9PiBGaXNoT2ZmLAogIEZpc2hTeW1ib2w6ICgpID0+IEZpc2hTeW1ib2wsCiAgRmlzaGluZ0hvb2s6ICgpID0+IEZpc2hpbmdIb29rLAogIEZsYWc6ICgpID0+IEZsYWcsCiAgRmxhZ09mZjogKCkgPT4gRmxhZ09mZiwKICBGbGFnVHJpYW5nbGVMZWZ0OiAoKSA9PiBGbGFnVHJpYW5nbGVMZWZ0LAogIEZsYWdUcmlhbmdsZVJpZ2h0OiAoKSA9PiBGbGFnVHJpYW5nbGVSaWdodCwKICBGbGFtZTogKCkgPT4gRmxhbWUsCiAgRmxhbWVLaW5kbGluZzogKCkgPT4gRmxhbWVLaW5kbGluZywKICBGbGFzaGxpZ2h0OiAoKSA9PiBGbGFzaGxpZ2h0LAogIEZsYXNobGlnaHRPZmY6ICgpID0+IEZsYXNobGlnaHRPZmYsCiAgRmxhc2tDb25pY2FsOiAoKSA9PiBGbGFza0NvbmljYWwsCiAgRmxhc2tDb25pY2FsT2ZmOiAoKSA9PiBGbGFza0NvbmljYWxPZmYsCiAgRmxhc2tSb3VuZDogKCkgPT4gRmxhc2tSb3VuZCwKICBGbGlwSG9yaXpvbnRhbDogKCkgPT4gRmxpcEhvcml6b250YWwsCiAgRmxpcEhvcml6b250YWwyOiAoKSA9PiBGbGlwSG9yaXpvbnRhbDIsCiAgRmxpcFZlcnRpY2FsOiAoKSA9PiBGbGlwVmVydGljYWwsCiAgRmxpcFZlcnRpY2FsMjogKCkgPT4gRmxpcFZlcnRpY2FsMiwKICBGbG93ZXI6ICgpID0+IEZsb3dlciwKICBGbG93ZXIyOiAoKSA9PiBGbG93ZXIyLAogIEZvY3VzOiAoKSA9PiBGb2N1cywKICBGb2xkSG9yaXpvbnRhbDogKCkgPT4gRm9sZEhvcml6b250YWwsCiAgRm9sZFZlcnRpY2FsOiAoKSA9PiBGb2xkVmVydGljYWwsCiAgRm9sZGVyOiAoKSA9PiBGb2xkZXIsCiAgRm9sZGVyQXJjaGl2ZTogKCkgPT4gRm9sZGVyQXJjaGl2ZSwKICBGb2xkZXJDaGVjazogKCkgPT4gRm9sZGVyQ2hlY2ssCiAgRm9sZGVyQ2xvY2s6ICgpID0+IEZvbGRlckNsb2NrLAogIEZvbGRlckNsb3NlZDogKCkgPT4gRm9sZGVyQ2xvc2VkLAogIEZvbGRlckNvZGU6ICgpID0+IEZvbGRlckNvZGUsCiAgRm9sZGVyQ29nOiAoKSA9PiBGb2xkZXJDb2csCiAgRm9sZGVyQ29nMjogKCkgPT4gRm9sZGVyQ29nLAogIEZvbGRlckRvdDogKCkgPT4gRm9sZGVyRG90LAogIEZvbGRlckRvd246ICgpID0+IEZvbGRlckRvd24sCiAgRm9sZGVyRWRpdDogKCkgPT4gRm9sZGVyUGVuLAogIEZvbGRlckdpdDogKCkgPT4gRm9sZGVyR2l0LAogIEZvbGRlckdpdDI6ICgpID0+IEZvbGRlckdpdDIsCiAgRm9sZGVySGVhcnQ6ICgpID0+IEZvbGRlckhlYXJ0LAogIEZvbGRlcklucHV0OiAoKSA9PiBGb2xkZXJJbnB1dCwKICBGb2xkZXJLYW5iYW46ICgpID0+IEZvbGRlckthbmJhbiwKICBGb2xkZXJLZXk6ICgpID0+IEZvbGRlcktleSwKICBGb2xkZXJMb2NrOiAoKSA9PiBGb2xkZXJMb2NrLAogIEZvbGRlck1pbnVzOiAoKSA9PiBGb2xkZXJNaW51cywKICBGb2xkZXJPcGVuOiAoKSA9PiBGb2xkZXJPcGVuLAogIEZvbGRlck9wZW5Eb3Q6ICgpID0+IEZvbGRlck9wZW5Eb3QsCiAgRm9sZGVyT3V0cHV0OiAoKSA9PiBGb2xkZXJPdXRwdXQsCiAgRm9sZGVyUGVuOiAoKSA9PiBGb2xkZXJQZW4sCiAgRm9sZGVyUGx1czogKCkgPT4gRm9sZGVyUGx1cywKICBGb2xkZXJSb290OiAoKSA9PiBGb2xkZXJSb290LAogIEZvbGRlclNlYXJjaDogKCkgPT4gRm9sZGVyU2VhcmNoLAogIEZvbGRlclNlYXJjaDI6ICgpID0+IEZvbGRlclNlYXJjaDIsCiAgRm9sZGVyU3ltbGluazogKCkgPT4gRm9sZGVyU3ltbGluaywKICBGb2xkZXJTeW5jOiAoKSA9PiBGb2xkZXJTeW5jLAogIEZvbGRlclRyZWU6ICgpID0+IEZvbGRlclRyZWUsCiAgRm9sZGVyVXA6ICgpID0+IEZvbGRlclVwLAogIEZvbGRlclg6ICgpID0+IEZvbGRlclgsCiAgRm9sZGVyczogKCkgPT4gRm9sZGVycywKICBGb290cHJpbnRzOiAoKSA9PiBGb290cHJpbnRzLAogIEZvcmtLbmlmZTogKCkgPT4gVXRlbnNpbHMsCiAgRm9ya0tuaWZlQ3Jvc3NlZDogKCkgPT4gVXRlbnNpbHNDcm9zc2VkLAogIEZvcmtsaWZ0OiAoKSA9PiBGb3JrbGlmdCwKICBGb3JtOiAoKSA9PiBGb3JtLAogIEZvcm1JbnB1dDogKCkgPT4gUmVjdGFuZ2xlRWxsaXBzaXMsCiAgRm9yd2FyZDogKCkgPT4gRm9yd2FyZCwKICBGcmFtZTogKCkgPT4gRnJhbWUsCiAgRnJhbWVyOiAoKSA9PiBGcmFtZXIsCiAgRnJvd246ICgpID0+IEZyb3duLAogIEZ1ZWw6ICgpID0+IEZ1ZWwsCiAgRnVsbHNjcmVlbjogKCkgPT4gRnVsbHNjcmVlbiwKICBGdW5jdGlvblNxdWFyZTogKCkgPT4gU3F1YXJlRnVuY3Rpb24sCiAgRnVubmVsOiAoKSA9PiBGdW5uZWwsCiAgRnVubmVsUGx1czogKCkgPT4gRnVubmVsUGx1cywKICBGdW5uZWxYOiAoKSA9PiBGdW5uZWxYLAogIEdhbGxlcnlIb3Jpem9udGFsOiAoKSA9PiBHYWxsZXJ5SG9yaXpvbnRhbCwKICBHYWxsZXJ5SG9yaXpvbnRhbEVuZDogKCkgPT4gR2FsbGVyeUhvcml6b250YWxFbmQsCiAgR2FsbGVyeVRodW1ibmFpbHM6ICgpID0+IEdhbGxlcnlUaHVtYm5haWxzLAogIEdhbGxlcnlWZXJ0aWNhbDogKCkgPT4gR2FsbGVyeVZlcnRpY2FsLAogIEdhbGxlcnlWZXJ0aWNhbEVuZDogKCkgPT4gR2FsbGVyeVZlcnRpY2FsRW5kLAogIEdhbWVwYWQ6ICgpID0+IEdhbWVwYWQsCiAgR2FtZXBhZDI6ICgpID0+IEdhbWVwYWQyLAogIEdhbWVwYWREaXJlY3Rpb25hbDogKCkgPT4gR2FtZXBhZERpcmVjdGlvbmFsLAogIEdhbnR0Q2hhcnQ6ICgpID0+IENoYXJ0Tm9BeGVzR2FudHQsCiAgR2FudHRDaGFydFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBHYXVnZTogKCkgPT4gR2F1Z2UsCiAgR2F1Z2VDaXJjbGU6ICgpID0+IENpcmNsZUdhdWdlLAogIEdhdmVsOiAoKSA9PiBHYXZlbCwKICBHZW06ICgpID0+IEdlbSwKICBHZW9yZ2lhbkxhcmk6ICgpID0+IEdlb3JnaWFuTGFyaSwKICBHaG9zdDogKCkgPT4gR2hvc3QsCiAgR2lmdDogKCkgPT4gR2lmdCwKICBHaXRCcmFuY2g6ICgpID0+IEdpdEJyYW5jaCwKICBHaXRCcmFuY2hNaW51czogKCkgPT4gR2l0QnJhbmNoTWludXMsCiAgR2l0QnJhbmNoUGx1czogKCkgPT4gR2l0QnJhbmNoUGx1cywKICBHaXRDb21taXQ6ICgpID0+IEdpdENvbW1pdEhvcml6b250YWwsCiAgR2l0Q29tbWl0SG9yaXpvbnRhbDogKCkgPT4gR2l0Q29tbWl0SG9yaXpvbnRhbCwKICBHaXRDb21taXRWZXJ0aWNhbDogKCkgPT4gR2l0Q29tbWl0VmVydGljYWwsCiAgR2l0Q29tcGFyZTogKCkgPT4gR2l0Q29tcGFyZSwKICBHaXRDb21wYXJlQXJyb3dzOiAoKSA9PiBHaXRDb21wYXJlQXJyb3dzLAogIEdpdEZvcms6ICgpID0+IEdpdEZvcmssCiAgR2l0R3JhcGg6ICgpID0+IEdpdEdyYXBoLAogIEdpdE1lcmdlOiAoKSA9PiBHaXRNZXJnZSwKICBHaXRQdWxsUmVxdWVzdDogKCkgPT4gR2l0UHVsbFJlcXVlc3QsCiAgR2l0UHVsbFJlcXVlc3RBcnJvdzogKCkgPT4gR2l0UHVsbFJlcXVlc3RBcnJvdywKICBHaXRQdWxsUmVxdWVzdENsb3NlZDogKCkgPT4gR2l0UHVsbFJlcXVlc3RDbG9zZWQsCiAgR2l0UHVsbFJlcXVlc3RDcmVhdGU6ICgpID0+IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlLAogIEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3c6ICgpID0+IEdpdFB1bGxSZXF1ZXN0Q3JlYXRlQXJyb3csCiAgR2l0UHVsbFJlcXVlc3REcmFmdDogKCkgPT4gR2l0UHVsbFJlcXVlc3REcmFmdCwKICBHaXRodWI6ICgpID0+IEdpdGh1YiwKICBHaXRsYWI6ICgpID0+IEdpdGxhYiwKICBHbGFzc1dhdGVyOiAoKSA9PiBHbGFzc1dhdGVyLAogIEdsYXNzZXM6ICgpID0+IEdsYXNzZXMsCiAgR2xvYmU6ICgpID0+IEdsb2JlLAogIEdsb2JlMjogKCkgPT4gRWFydGgsCiAgR2xvYmVMb2NrOiAoKSA9PiBHbG9iZUxvY2ssCiAgR29hbDogKCkgPT4gR29hbCwKICBHcHU6ICgpID0+IEdwdSwKICBHcmFiOiAoKSA9PiBIYW5kR3JhYiwKICBHcmFkdWF0aW9uQ2FwOiAoKSA9PiBHcmFkdWF0aW9uQ2FwLAogIEdyYXBlOiAoKSA9PiBHcmFwZSwKICBHcmlkOiAoKSA9PiBHcmlkM3gzLAogIEdyaWQyWDI6ICgpID0+IEdyaWQyeDIsCiAgR3JpZDJYMkNoZWNrOiAoKSA9PiBHcmlkMngyQ2hlY2ssCiAgR3JpZDJYMlBsdXM6ICgpID0+IEdyaWQyeDJQbHVzLAogIEdyaWQyWDJYOiAoKSA9PiBHcmlkMngyWCwKICBHcmlkMngyOiAoKSA9PiBHcmlkMngyLAogIEdyaWQyeDJDaGVjazogKCkgPT4gR3JpZDJ4MkNoZWNrLAogIEdyaWQyeDJQbHVzOiAoKSA9PiBHcmlkMngyUGx1cywKICBHcmlkMngyWDogKCkgPT4gR3JpZDJ4MlgsCiAgR3JpZDNYMzogKCkgPT4gR3JpZDN4MywKICBHcmlkM3gyOiAoKSA9PiBHcmlkM3gyLAogIEdyaWQzeDM6ICgpID0+IEdyaWQzeDMsCiAgR3JpcDogKCkgPT4gR3JpcCwKICBHcmlwSG9yaXpvbnRhbDogKCkgPT4gR3JpcEhvcml6b250YWwsCiAgR3JpcFZlcnRpY2FsOiAoKSA9PiBHcmlwVmVydGljYWwsCiAgR3JvdXA6ICgpID0+IEdyb3VwLAogIEd1aXRhcjogKCkgPT4gR3VpdGFyLAogIEhhbTogKCkgPT4gSGFtLAogIEhhbWJ1cmdlcjogKCkgPT4gSGFtYnVyZ2VyLAogIEhhbW1lcjogKCkgPT4gSGFtbWVyLAogIEhhbmQ6ICgpID0+IEhhbmQsCiAgSGFuZENvaW5zOiAoKSA9PiBIYW5kQ29pbnMsCiAgSGFuZEZpc3Q6ICgpID0+IEhhbmRGaXN0LAogIEhhbmRHcmFiOiAoKSA9PiBIYW5kR3JhYiwKICBIYW5kSGVhcnQ6ICgpID0+IEhhbmRIZWFydCwKICBIYW5kSGVscGluZzogKCkgPT4gSGFuZEhlbHBpbmcsCiAgSGFuZE1ldGFsOiAoKSA9PiBIYW5kTWV0YWwsCiAgSGFuZFBsYXR0ZXI6ICgpID0+IEhhbmRQbGF0dGVyLAogIEhhbmRiYWc6ICgpID0+IEhhbmRiYWcsCiAgSGFuZHNoYWtlOiAoKSA9PiBIYW5kc2hha2UsCiAgSGFyZERyaXZlOiAoKSA9PiBIYXJkRHJpdmUsCiAgSGFyZERyaXZlRG93bmxvYWQ6ICgpID0+IEhhcmREcml2ZURvd25sb2FkLAogIEhhcmREcml2ZVVwbG9hZDogKCkgPT4gSGFyZERyaXZlVXBsb2FkLAogIEhhcmRIYXQ6ICgpID0+IEhhcmRIYXQsCiAgSGFzaDogKCkgPT4gSGFzaCwKICBIYXRHbGFzc2VzOiAoKSA9PiBIYXRHbGFzc2VzLAogIEhhemU6ICgpID0+IEhhemUsCiAgSGQ6ICgpID0+IEhkLAogIEhkbWlQb3J0OiAoKSA9PiBIZG1pUG9ydCwKICBIZWFkaW5nOiAoKSA9PiBIZWFkaW5nLAogIEhlYWRpbmcxOiAoKSA9PiBIZWFkaW5nMSwKICBIZWFkaW5nMjogKCkgPT4gSGVhZGluZzIsCiAgSGVhZGluZzM6ICgpID0+IEhlYWRpbmczLAogIEhlYWRpbmc0OiAoKSA9PiBIZWFkaW5nNCwKICBIZWFkaW5nNTogKCkgPT4gSGVhZGluZzUsCiAgSGVhZGluZzY6ICgpID0+IEhlYWRpbmc2LAogIEhlYWRwaG9uZU9mZjogKCkgPT4gSGVhZHBob25lT2ZmLAogIEhlYWRwaG9uZXM6ICgpID0+IEhlYWRwaG9uZXMsCiAgSGVhZHNldDogKCkgPT4gSGVhZHNldCwKICBIZWFydDogKCkgPT4gSGVhcnQsCiAgSGVhcnRDcmFjazogKCkgPT4gSGVhcnRDcmFjaywKICBIZWFydEhhbmRzaGFrZTogKCkgPT4gSGVhcnRIYW5kc2hha2UsCiAgSGVhcnRNaW51czogKCkgPT4gSGVhcnRNaW51cywKICBIZWFydE9mZjogKCkgPT4gSGVhcnRPZmYsCiAgSGVhcnRQbHVzOiAoKSA9PiBIZWFydFBsdXMsCiAgSGVhcnRQdWxzZTogKCkgPT4gSGVhcnRQdWxzZSwKICBIZWF0ZXI6ICgpID0+IEhlYXRlciwKICBIZWxpY29wdGVyOiAoKSA9PiBIZWxpY29wdGVyLAogIEhlbHBDaXJjbGU6ICgpID0+IENpcmNsZVF1ZXN0aW9uTWFyaywKICBIZWxwaW5nSGFuZDogKCkgPT4gSGFuZEhlbHBpbmcsCiAgSGV4YWdvbjogKCkgPT4gSGV4YWdvbiwKICBIaWdobGlnaHRlcjogKCkgPT4gSGlnaGxpZ2h0ZXIsCiAgSGlzdG9yeTogKCkgPT4gSGlzdG9yeSwKICBIb21lOiAoKSA9PiBIb3VzZSwKICBIb3A6ICgpID0+IEhvcCwKICBIb3BPZmY6ICgpID0+IEhvcE9mZiwKICBIb3NwaXRhbDogKCkgPT4gSG9zcGl0YWwsCiAgSG90ZWw6ICgpID0+IEhvdGVsLAogIEhvdXJnbGFzczogKCkgPT4gSG91cmdsYXNzLAogIEhvdXNlOiAoKSA9PiBIb3VzZSwKICBIb3VzZUhlYXJ0OiAoKSA9PiBIb3VzZUhlYXJ0LAogIEhvdXNlUGx1ZzogKCkgPT4gSG91c2VQbHVnLAogIEhvdXNlUGx1czogKCkgPT4gSG91c2VQbHVzLAogIEhvdXNlV2lmaTogKCkgPT4gSG91c2VXaWZpLAogIEljZUNyZWFtOiAoKSA9PiBJY2VDcmVhbUNvbmUsCiAgSWNlQ3JlYW0yOiAoKSA9PiBJY2VDcmVhbUJvd2wsCiAgSWNlQ3JlYW1Cb3dsOiAoKSA9PiBJY2VDcmVhbUJvd2wsCiAgSWNlQ3JlYW1Db25lOiAoKSA9PiBJY2VDcmVhbUNvbmUsCiAgSWRDYXJkOiAoKSA9PiBJZENhcmQsCiAgSWRDYXJkTGFueWFyZDogKCkgPT4gSWRDYXJkTGFueWFyZCwKICBJbWFnZTogKCkgPT4gSW1hZ2UyLAogIEltYWdlRG93bjogKCkgPT4gSW1hZ2VEb3duLAogIEltYWdlTWludXM6ICgpID0+IEltYWdlTWludXMsCiAgSW1hZ2VPZmY6ICgpID0+IEltYWdlT2ZmLAogIEltYWdlUGxheTogKCkgPT4gSW1hZ2VQbGF5LAogIEltYWdlUGx1czogKCkgPT4gSW1hZ2VQbHVzLAogIEltYWdlVXA6ICgpID0+IEltYWdlVXAsCiAgSW1hZ2VVcHNjYWxlOiAoKSA9PiBJbWFnZVVwc2NhbGUsCiAgSW1hZ2VzOiAoKSA9PiBJbWFnZXMsCiAgSW1wb3J0OiAoKSA9PiBJbXBvcnQsCiAgSW5ib3g6ICgpID0+IEluYm94LAogIEluZGVudDogKCkgPT4gTGlzdEluZGVudEluY3JlYXNlLAogIEluZGVudERlY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgSW5kZW50SW5jcmVhc2U6ICgpID0+IExpc3RJbmRlbnRJbmNyZWFzZSwKICBJbmRpYW5SdXBlZTogKCkgPT4gSW5kaWFuUnVwZWUsCiAgSW5maW5pdHk6ICgpID0+IEluZmluaXR5MiwKICBJbmZvOiAoKSA9PiBJbmZvMiwKICBJbnNwZWN0OiAoKSA9PiBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgSW5zcGVjdGlvblBhbmVsOiAoKSA9PiBJbnNwZWN0aW9uUGFuZWwsCiAgSW5zdGFncmFtOiAoKSA9PiBJbnN0YWdyYW0sCiAgSXRhbGljOiAoKSA9PiBJdGFsaWMsCiAgSXRlcmF0aW9uQ2N3OiAoKSA9PiBJdGVyYXRpb25DY3csCiAgSXRlcmF0aW9uQ3c6ICgpID0+IEl0ZXJhdGlvbkN3LAogIEphcGFuZXNlWWVuOiAoKSA9PiBKYXBhbmVzZVllbiwKICBKb3lzdGljazogKCkgPT4gSm95c3RpY2ssCiAgS2FuYmFuOiAoKSA9PiBLYW5iYW4sCiAgS2FuYmFuU3F1YXJlOiAoKSA9PiBTcXVhcmVLYW5iYW4sCiAgS2FuYmFuU3F1YXJlRGFzaGVkOiAoKSA9PiBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgS2F5YWs6ICgpID0+IEtheWFrLAogIEtleTogKCkgPT4gS2V5MiwKICBLZXlSb3VuZDogKCkgPT4gS2V5Um91bmQsCiAgS2V5U3F1YXJlOiAoKSA9PiBLZXlTcXVhcmUsCiAgS2V5Ym9hcmQ6ICgpID0+IEtleWJvYXJkMiwKICBLZXlib2FyZE11c2ljOiAoKSA9PiBLZXlib2FyZE11c2ljLAogIEtleWJvYXJkT2ZmOiAoKSA9PiBLZXlib2FyZE9mZiwKICBMYW1wOiAoKSA9PiBMYW1wLAogIExhbXBDZWlsaW5nOiAoKSA9PiBMYW1wQ2VpbGluZywKICBMYW1wRGVzazogKCkgPT4gTGFtcERlc2ssCiAgTGFtcEZsb29yOiAoKSA9PiBMYW1wRmxvb3IsCiAgTGFtcFdhbGxEb3duOiAoKSA9PiBMYW1wV2FsbERvd24sCiAgTGFtcFdhbGxVcDogKCkgPT4gTGFtcFdhbGxVcCwKICBMYW5kUGxvdDogKCkgPT4gTGFuZFBsb3QsCiAgTGFuZG1hcms6ICgpID0+IExhbmRtYXJrLAogIExhbmd1YWdlczogKCkgPT4gTGFuZ3VhZ2VzLAogIExhcHRvcDogKCkgPT4gTGFwdG9wLAogIExhcHRvcDI6ICgpID0+IExhcHRvcE1pbmltYWwsCiAgTGFwdG9wTWluaW1hbDogKCkgPT4gTGFwdG9wTWluaW1hbCwKICBMYXB0b3BNaW5pbWFsQ2hlY2s6ICgpID0+IExhcHRvcE1pbmltYWxDaGVjaywKICBMYXNzbzogKCkgPT4gTGFzc28sCiAgTGFzc29TZWxlY3Q6ICgpID0+IExhc3NvU2VsZWN0LAogIExhdWdoOiAoKSA9PiBMYXVnaCwKICBMYXllcnM6ICgpID0+IExheWVyczMsCiAgTGF5ZXJzMjogKCkgPT4gTGF5ZXJzMiwKICBMYXllcnMzOiAoKSA9PiBMYXllcnMzLAogIExheWVyc1BsdXM6ICgpID0+IExheWVyc1BsdXMsCiAgTGF5b3V0OiAoKSA9PiBQYW5lbHNUb3BMZWZ0LAogIExheW91dERhc2hib2FyZDogKCkgPT4gTGF5b3V0RGFzaGJvYXJkLAogIExheW91dEdyaWQ6ICgpID0+IExheW91dEdyaWQsCiAgTGF5b3V0TGlzdDogKCkgPT4gTGF5b3V0TGlzdCwKICBMYXlvdXRQYW5lbExlZnQ6ICgpID0+IExheW91dFBhbmVsTGVmdCwKICBMYXlvdXRQYW5lbFRvcDogKCkgPT4gTGF5b3V0UGFuZWxUb3AsCiAgTGF5b3V0VGVtcGxhdGU6ICgpID0+IExheW91dFRlbXBsYXRlLAogIExlYWY6ICgpID0+IExlYWYsCiAgTGVhZnlHcmVlbjogKCkgPT4gTGVhZnlHcmVlbiwKICBMZWN0ZXJuOiAoKSA9PiBMZWN0ZXJuLAogIExldHRlclRleHQ6ICgpID0+IFRleHRJbml0aWFsLAogIExpYnJhcnk6ICgpID0+IExpYnJhcnkyLAogIExpYnJhcnlCaWc6ICgpID0+IExpYnJhcnlCaWcsCiAgTGlicmFyeVNxdWFyZTogKCkgPT4gU3F1YXJlTGlicmFyeSwKICBMaWZlQnVveTogKCkgPT4gTGlmZUJ1b3ksCiAgTGlnYXR1cmU6ICgpID0+IExpZ2F0dXJlLAogIExpZ2h0YnVsYjogKCkgPT4gTGlnaHRidWxiLAogIExpZ2h0YnVsYk9mZjogKCkgPT4gTGlnaHRidWxiT2ZmLAogIExpbmVDaGFydDogKCkgPT4gQ2hhcnRMaW5lLAogIExpbmVTcXVpZ2dsZTogKCkgPT4gTGluZVNxdWlnZ2xlLAogIExpbms6ICgpID0+IExpbmssCiAgTGluazI6ICgpID0+IExpbmsyLAogIExpbmsyT2ZmOiAoKSA9PiBMaW5rMk9mZiwKICBMaW5rZWRpbjogKCkgPT4gTGlua2VkaW4sCiAgTGlzdDogKCkgPT4gTGlzdCwKICBMaXN0Q2hlY2s6ICgpID0+IExpc3RDaGVjaywKICBMaXN0Q2hlY2tzOiAoKSA9PiBMaXN0Q2hlY2tzLAogIExpc3RDaGV2cm9uc0Rvd25VcDogKCkgPT4gTGlzdENoZXZyb25zRG93blVwLAogIExpc3RDaGV2cm9uc1VwRG93bjogKCkgPT4gTGlzdENoZXZyb25zVXBEb3duLAogIExpc3RDb2xsYXBzZTogKCkgPT4gTGlzdENvbGxhcHNlLAogIExpc3RFbmQ6ICgpID0+IExpc3RFbmQsCiAgTGlzdEZpbHRlcjogKCkgPT4gTGlzdEZpbHRlciwKICBMaXN0RmlsdGVyUGx1czogKCkgPT4gTGlzdEZpbHRlclBsdXMsCiAgTGlzdEluZGVudERlY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgTGlzdEluZGVudEluY3JlYXNlOiAoKSA9PiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgTGlzdE1pbnVzOiAoKSA9PiBMaXN0TWludXMsCiAgTGlzdE11c2ljOiAoKSA9PiBMaXN0TXVzaWMsCiAgTGlzdE9yZGVyZWQ6ICgpID0+IExpc3RPcmRlcmVkLAogIExpc3RQbHVzOiAoKSA9PiBMaXN0UGx1cywKICBMaXN0UmVzdGFydDogKCkgPT4gTGlzdFJlc3RhcnQsCiAgTGlzdFN0YXJ0OiAoKSA9PiBMaXN0U3RhcnQsCiAgTGlzdFRvZG86ICgpID0+IExpc3RUb2RvLAogIExpc3RUcmVlOiAoKSA9PiBMaXN0VHJlZSwKICBMaXN0VmlkZW86ICgpID0+IExpc3RWaWRlbywKICBMaXN0WDogKCkgPT4gTGlzdFgsCiAgTG9hZGVyOiAoKSA9PiBMb2FkZXIsCiAgTG9hZGVyMjogKCkgPT4gTG9hZGVyQ2lyY2xlLAogIExvYWRlckNpcmNsZTogKCkgPT4gTG9hZGVyQ2lyY2xlLAogIExvYWRlclBpbndoZWVsOiAoKSA9PiBMb2FkZXJQaW53aGVlbCwKICBMb2NhdGU6ICgpID0+IExvY2F0ZSwKICBMb2NhdGVGaXhlZDogKCkgPT4gTG9jYXRlRml4ZWQsCiAgTG9jYXRlT2ZmOiAoKSA9PiBMb2NhdGVPZmYsCiAgTG9jYXRpb25FZGl0OiAoKSA9PiBNYXBQaW5QZW4sCiAgTG9jazogKCkgPT4gTG9jaywKICBMb2NrS2V5aG9sZTogKCkgPT4gTG9ja0tleWhvbGUsCiAgTG9ja0tleWhvbGVPcGVuOiAoKSA9PiBMb2NrS2V5aG9sZU9wZW4sCiAgTG9ja09wZW46ICgpID0+IExvY2tPcGVuLAogIExvZ0luOiAoKSA9PiBMb2dJbiwKICBMb2dPdXQ6ICgpID0+IExvZ091dCwKICBMb2dzOiAoKSA9PiBMb2dzLAogIExvbGxpcG9wOiAoKSA9PiBMb2xsaXBvcCwKICBMdWdnYWdlOiAoKSA9PiBMdWdnYWdlLAogIE1TcXVhcmU6ICgpID0+IFNxdWFyZU0sCiAgTWFnbmV0OiAoKSA9PiBNYWduZXQsCiAgTWFpbDogKCkgPT4gTWFpbCwKICBNYWlsQ2hlY2s6ICgpID0+IE1haWxDaGVjaywKICBNYWlsTWludXM6ICgpID0+IE1haWxNaW51cywKICBNYWlsT3BlbjogKCkgPT4gTWFpbE9wZW4sCiAgTWFpbFBsdXM6ICgpID0+IE1haWxQbHVzLAogIE1haWxRdWVzdGlvbjogKCkgPT4gTWFpbFF1ZXN0aW9uTWFyaywKICBNYWlsUXVlc3Rpb25NYXJrOiAoKSA9PiBNYWlsUXVlc3Rpb25NYXJrLAogIE1haWxTZWFyY2g6ICgpID0+IE1haWxTZWFyY2gsCiAgTWFpbFdhcm5pbmc6ICgpID0+IE1haWxXYXJuaW5nLAogIE1haWxYOiAoKSA9PiBNYWlsWCwKICBNYWlsYm94OiAoKSA9PiBNYWlsYm94LAogIE1haWxzOiAoKSA9PiBNYWlscywKICBNYXA6ICgpID0+IE1hcDIsCiAgTWFwTWludXM6ICgpID0+IE1hcE1pbnVzLAogIE1hcFBpbjogKCkgPT4gTWFwUGluLAogIE1hcFBpbkNoZWNrOiAoKSA9PiBNYXBQaW5DaGVjaywKICBNYXBQaW5DaGVja0luc2lkZTogKCkgPT4gTWFwUGluQ2hlY2tJbnNpZGUsCiAgTWFwUGluSG91c2U6ICgpID0+IE1hcFBpbkhvdXNlLAogIE1hcFBpbk1pbnVzOiAoKSA9PiBNYXBQaW5NaW51cywKICBNYXBQaW5NaW51c0luc2lkZTogKCkgPT4gTWFwUGluTWludXNJbnNpZGUsCiAgTWFwUGluT2ZmOiAoKSA9PiBNYXBQaW5PZmYsCiAgTWFwUGluUGVuOiAoKSA9PiBNYXBQaW5QZW4sCiAgTWFwUGluUGx1czogKCkgPT4gTWFwUGluUGx1cywKICBNYXBQaW5QbHVzSW5zaWRlOiAoKSA9PiBNYXBQaW5QbHVzSW5zaWRlLAogIE1hcFBpblg6ICgpID0+IE1hcFBpblgsCiAgTWFwUGluWEluc2lkZTogKCkgPT4gTWFwUGluWEluc2lkZSwKICBNYXBQaW5uZWQ6ICgpID0+IE1hcFBpbm5lZCwKICBNYXBQbHVzOiAoKSA9PiBNYXBQbHVzLAogIE1hcnM6ICgpID0+IE1hcnMsCiAgTWFyc1N0cm9rZTogKCkgPT4gTWFyc1N0cm9rZSwKICBNYXJ0aW5pOiAoKSA9PiBNYXJ0aW5pLAogIE1heGltaXplOiAoKSA9PiBNYXhpbWl6ZSwKICBNYXhpbWl6ZTI6ICgpID0+IE1heGltaXplMiwKICBNZWRhbDogKCkgPT4gTWVkYWwsCiAgTWVnYXBob25lOiAoKSA9PiBNZWdhcGhvbmUsCiAgTWVnYXBob25lT2ZmOiAoKSA9PiBNZWdhcGhvbmVPZmYsCiAgTWVoOiAoKSA9PiBNZWgsCiAgTWVtb3J5U3RpY2s6ICgpID0+IE1lbW9yeVN0aWNrLAogIE1lbnU6ICgpID0+IE1lbnUsCiAgTWVudVNxdWFyZTogKCkgPT4gU3F1YXJlTWVudSwKICBNZXJnZTogKCkgPT4gTWVyZ2UsCiAgTWVzc2FnZUNpcmNsZTogKCkgPT4gTWVzc2FnZUNpcmNsZSwKICBNZXNzYWdlQ2lyY2xlQ29kZTogKCkgPT4gTWVzc2FnZUNpcmNsZUNvZGUsCiAgTWVzc2FnZUNpcmNsZURhc2hlZDogKCkgPT4gTWVzc2FnZUNpcmNsZURhc2hlZCwKICBNZXNzYWdlQ2lyY2xlSGVhcnQ6ICgpID0+IE1lc3NhZ2VDaXJjbGVIZWFydCwKICBNZXNzYWdlQ2lyY2xlTW9yZTogKCkgPT4gTWVzc2FnZUNpcmNsZU1vcmUsCiAgTWVzc2FnZUNpcmNsZU9mZjogKCkgPT4gTWVzc2FnZUNpcmNsZU9mZiwKICBNZXNzYWdlQ2lyY2xlUGx1czogKCkgPT4gTWVzc2FnZUNpcmNsZVBsdXMsCiAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uOiAoKSA9PiBNZXNzYWdlQ2lyY2xlUXVlc3Rpb25NYXJrLAogIE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcms6ICgpID0+IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgTWVzc2FnZUNpcmNsZVJlcGx5OiAoKSA9PiBNZXNzYWdlQ2lyY2xlUmVwbHksCiAgTWVzc2FnZUNpcmNsZVdhcm5pbmc6ICgpID0+IE1lc3NhZ2VDaXJjbGVXYXJuaW5nLAogIE1lc3NhZ2VDaXJjbGVYOiAoKSA9PiBNZXNzYWdlQ2lyY2xlWCwKICBNZXNzYWdlU3F1YXJlOiAoKSA9PiBNZXNzYWdlU3F1YXJlLAogIE1lc3NhZ2VTcXVhcmVDb2RlOiAoKSA9PiBNZXNzYWdlU3F1YXJlQ29kZSwKICBNZXNzYWdlU3F1YXJlRGFzaGVkOiAoKSA9PiBNZXNzYWdlU3F1YXJlRGFzaGVkLAogIE1lc3NhZ2VTcXVhcmVEaWZmOiAoKSA9PiBNZXNzYWdlU3F1YXJlRGlmZiwKICBNZXNzYWdlU3F1YXJlRG90OiAoKSA9PiBNZXNzYWdlU3F1YXJlRG90LAogIE1lc3NhZ2VTcXVhcmVIZWFydDogKCkgPT4gTWVzc2FnZVNxdWFyZUhlYXJ0LAogIE1lc3NhZ2VTcXVhcmVMb2NrOiAoKSA9PiBNZXNzYWdlU3F1YXJlTG9jaywKICBNZXNzYWdlU3F1YXJlTW9yZTogKCkgPT4gTWVzc2FnZVNxdWFyZU1vcmUsCiAgTWVzc2FnZVNxdWFyZU9mZjogKCkgPT4gTWVzc2FnZVNxdWFyZU9mZiwKICBNZXNzYWdlU3F1YXJlUGx1czogKCkgPT4gTWVzc2FnZVNxdWFyZVBsdXMsCiAgTWVzc2FnZVNxdWFyZVF1b3RlOiAoKSA9PiBNZXNzYWdlU3F1YXJlUXVvdGUsCiAgTWVzc2FnZVNxdWFyZVJlcGx5OiAoKSA9PiBNZXNzYWdlU3F1YXJlUmVwbHksCiAgTWVzc2FnZVNxdWFyZVNoYXJlOiAoKSA9PiBNZXNzYWdlU3F1YXJlU2hhcmUsCiAgTWVzc2FnZVNxdWFyZVRleHQ6ICgpID0+IE1lc3NhZ2VTcXVhcmVUZXh0LAogIE1lc3NhZ2VTcXVhcmVXYXJuaW5nOiAoKSA9PiBNZXNzYWdlU3F1YXJlV2FybmluZywKICBNZXNzYWdlU3F1YXJlWDogKCkgPT4gTWVzc2FnZVNxdWFyZVgsCiAgTWVzc2FnZXNTcXVhcmU6ICgpID0+IE1lc3NhZ2VzU3F1YXJlLAogIE1pYzogKCkgPT4gTWljLAogIE1pYzI6ICgpID0+IE1pY1ZvY2FsLAogIE1pY09mZjogKCkgPT4gTWljT2ZmLAogIE1pY1ZvY2FsOiAoKSA9PiBNaWNWb2NhbCwKICBNaWNyb2NoaXA6ICgpID0+IE1pY3JvY2hpcCwKICBNaWNyb3Njb3BlOiAoKSA9PiBNaWNyb3Njb3BlLAogIE1pY3Jvd2F2ZTogKCkgPT4gTWljcm93YXZlLAogIE1pbGVzdG9uZTogKCkgPT4gTWlsZXN0b25lLAogIE1pbGs6ICgpID0+IE1pbGssCiAgTWlsa09mZjogKCkgPT4gTWlsa09mZiwKICBNaW5pbWl6ZTogKCkgPT4gTWluaW1pemUsCiAgTWluaW1pemUyOiAoKSA9PiBNaW5pbWl6ZTIsCiAgTWludXM6ICgpID0+IE1pbnVzLAogIE1pbnVzQ2lyY2xlOiAoKSA9PiBDaXJjbGVNaW51cywKICBNaW51c1NxdWFyZTogKCkgPT4gU3F1YXJlTWludXMsCiAgTW9uaXRvcjogKCkgPT4gTW9uaXRvciwKICBNb25pdG9yQ2hlY2s6ICgpID0+IE1vbml0b3JDaGVjaywKICBNb25pdG9yQ2xvdWQ6ICgpID0+IE1vbml0b3JDbG91ZCwKICBNb25pdG9yQ29nOiAoKSA9PiBNb25pdG9yQ29nLAogIE1vbml0b3JEb3Q6ICgpID0+IE1vbml0b3JEb3QsCiAgTW9uaXRvckRvd246ICgpID0+IE1vbml0b3JEb3duLAogIE1vbml0b3JPZmY6ICgpID0+IE1vbml0b3JPZmYsCiAgTW9uaXRvclBhdXNlOiAoKSA9PiBNb25pdG9yUGF1c2UsCiAgTW9uaXRvclBsYXk6ICgpID0+IE1vbml0b3JQbGF5LAogIE1vbml0b3JTbWFydHBob25lOiAoKSA9PiBNb25pdG9yU21hcnRwaG9uZSwKICBNb25pdG9yU3BlYWtlcjogKCkgPT4gTW9uaXRvclNwZWFrZXIsCiAgTW9uaXRvclN0b3A6ICgpID0+IE1vbml0b3JTdG9wLAogIE1vbml0b3JVcDogKCkgPT4gTW9uaXRvclVwLAogIE1vbml0b3JYOiAoKSA9PiBNb25pdG9yWCwKICBNb29uOiAoKSA9PiBNb29uLAogIE1vb25TdGFyOiAoKSA9PiBNb29uU3RhciwKICBNb3JlSG9yaXpvbnRhbDogKCkgPT4gRWxsaXBzaXMsCiAgTW9yZVZlcnRpY2FsOiAoKSA9PiBFbGxpcHNpc1ZlcnRpY2FsLAogIE1vdG9yYmlrZTogKCkgPT4gTW90b3JiaWtlLAogIE1vdW50YWluOiAoKSA9PiBNb3VudGFpbiwKICBNb3VudGFpblNub3c6ICgpID0+IE1vdW50YWluU25vdywKICBNb3VzZTogKCkgPT4gTW91c2UsCiAgTW91c2VPZmY6ICgpID0+IE1vdXNlT2ZmLAogIE1vdXNlUG9pbnRlcjogKCkgPT4gTW91c2VQb2ludGVyLAogIE1vdXNlUG9pbnRlcjI6ICgpID0+IE1vdXNlUG9pbnRlcjIsCiAgTW91c2VQb2ludGVyMk9mZjogKCkgPT4gTW91c2VQb2ludGVyMk9mZiwKICBNb3VzZVBvaW50ZXJCYW46ICgpID0+IE1vdXNlUG9pbnRlckJhbiwKICBNb3VzZVBvaW50ZXJDbGljazogKCkgPT4gTW91c2VQb2ludGVyQ2xpY2ssCiAgTW91c2VQb2ludGVyU3F1YXJlRGFzaGVkOiAoKSA9PiBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgTW92ZTogKCkgPT4gTW92ZSwKICBNb3ZlM0Q6ICgpID0+IE1vdmUzZCwKICBNb3ZlM2Q6ICgpID0+IE1vdmUzZCwKICBNb3ZlRGlhZ29uYWw6ICgpID0+IE1vdmVEaWFnb25hbCwKICBNb3ZlRGlhZ29uYWwyOiAoKSA9PiBNb3ZlRGlhZ29uYWwyLAogIE1vdmVEb3duOiAoKSA9PiBNb3ZlRG93biwKICBNb3ZlRG93bkxlZnQ6ICgpID0+IE1vdmVEb3duTGVmdCwKICBNb3ZlRG93blJpZ2h0OiAoKSA9PiBNb3ZlRG93blJpZ2h0LAogIE1vdmVIb3Jpem9udGFsOiAoKSA9PiBNb3ZlSG9yaXpvbnRhbCwKICBNb3ZlTGVmdDogKCkgPT4gTW92ZUxlZnQsCiAgTW92ZVJpZ2h0OiAoKSA9PiBNb3ZlUmlnaHQsCiAgTW92ZVVwOiAoKSA9PiBNb3ZlVXAsCiAgTW92ZVVwTGVmdDogKCkgPT4gTW92ZVVwTGVmdCwKICBNb3ZlVXBSaWdodDogKCkgPT4gTW92ZVVwUmlnaHQsCiAgTW92ZVZlcnRpY2FsOiAoKSA9PiBNb3ZlVmVydGljYWwsCiAgTXVzaWM6ICgpID0+IE11c2ljLAogIE11c2ljMjogKCkgPT4gTXVzaWMyLAogIE11c2ljMzogKCkgPT4gTXVzaWMzLAogIE11c2ljNDogKCkgPT4gTXVzaWM0LAogIE5hdmlnYXRpb246ICgpID0+IE5hdmlnYXRpb24sCiAgTmF2aWdhdGlvbjI6ICgpID0+IE5hdmlnYXRpb24yLAogIE5hdmlnYXRpb24yT2ZmOiAoKSA9PiBOYXZpZ2F0aW9uMk9mZiwKICBOYXZpZ2F0aW9uT2ZmOiAoKSA9PiBOYXZpZ2F0aW9uT2ZmLAogIE5ldHdvcms6ICgpID0+IE5ldHdvcmssCiAgTmV3c3BhcGVyOiAoKSA9PiBOZXdzcGFwZXIsCiAgTmZjOiAoKSA9PiBOZmMsCiAgTm9uQmluYXJ5OiAoKSA9PiBOb25CaW5hcnksCiAgTm90ZWJvb2s6ICgpID0+IE5vdGVib29rLAogIE5vdGVib29rUGVuOiAoKSA9PiBOb3RlYm9va1BlbiwKICBOb3RlYm9va1RhYnM6ICgpID0+IE5vdGVib29rVGFicywKICBOb3RlYm9va1RleHQ6ICgpID0+IE5vdGVib29rVGV4dCwKICBOb3RlcGFkVGV4dDogKCkgPT4gTm90ZXBhZFRleHQsCiAgTm90ZXBhZFRleHREYXNoZWQ6ICgpID0+IE5vdGVwYWRUZXh0RGFzaGVkLAogIE51dDogKCkgPT4gTnV0LAogIE51dE9mZjogKCkgPT4gTnV0T2ZmLAogIE9jdGFnb246ICgpID0+IE9jdGFnb24sCiAgT2N0YWdvbkFsZXJ0OiAoKSA9PiBPY3RhZ29uQWxlcnQsCiAgT2N0YWdvbk1pbnVzOiAoKSA9PiBPY3RhZ29uTWludXMsCiAgT2N0YWdvblBhdXNlOiAoKSA9PiBPY3RhZ29uUGF1c2UsCiAgT2N0YWdvblg6ICgpID0+IE9jdGFnb25YLAogIE9tZWdhOiAoKSA9PiBPbWVnYSwKICBPcHRpb246ICgpID0+IE9wdGlvbiwKICBPcmJpdDogKCkgPT4gT3JiaXQsCiAgT3JpZ2FtaTogKCkgPT4gT3JpZ2FtaSwKICBPdXRkZW50OiAoKSA9PiBMaXN0SW5kZW50RGVjcmVhc2UsCiAgUGFja2FnZTogKCkgPT4gUGFja2FnZSwKICBQYWNrYWdlMjogKCkgPT4gUGFja2FnZTIsCiAgUGFja2FnZUNoZWNrOiAoKSA9PiBQYWNrYWdlQ2hlY2ssCiAgUGFja2FnZU1pbnVzOiAoKSA9PiBQYWNrYWdlTWludXMsCiAgUGFja2FnZU9wZW46ICgpID0+IFBhY2thZ2VPcGVuLAogIFBhY2thZ2VQbHVzOiAoKSA9PiBQYWNrYWdlUGx1cywKICBQYWNrYWdlU2VhcmNoOiAoKSA9PiBQYWNrYWdlU2VhcmNoLAogIFBhY2thZ2VYOiAoKSA9PiBQYWNrYWdlWCwKICBQYWludEJ1Y2tldDogKCkgPT4gUGFpbnRCdWNrZXQsCiAgUGFpbnRSb2xsZXI6ICgpID0+IFBhaW50Um9sbGVyLAogIFBhaW50YnJ1c2g6ICgpID0+IFBhaW50YnJ1c2gsCiAgUGFpbnRicnVzaDI6ICgpID0+IFBhaW50YnJ1c2hWZXJ0aWNhbCwKICBQYWludGJydXNoVmVydGljYWw6ICgpID0+IFBhaW50YnJ1c2hWZXJ0aWNhbCwKICBQYWxldHRlOiAoKSA9PiBQYWxldHRlLAogIFBhbG10cmVlOiAoKSA9PiBUcmVlUGFsbSwKICBQYW5kYTogKCkgPT4gUGFuZGEsCiAgUGFuZWxCb3R0b206ICgpID0+IFBhbmVsQm90dG9tLAogIFBhbmVsQm90dG9tQ2xvc2U6ICgpID0+IFBhbmVsQm90dG9tQ2xvc2UsCiAgUGFuZWxCb3R0b21EYXNoZWQ6ICgpID0+IFBhbmVsQm90dG9tRGFzaGVkLAogIFBhbmVsQm90dG9tSW5hY3RpdmU6ICgpID0+IFBhbmVsQm90dG9tRGFzaGVkLAogIFBhbmVsQm90dG9tT3BlbjogKCkgPT4gUGFuZWxCb3R0b21PcGVuLAogIFBhbmVsTGVmdDogKCkgPT4gUGFuZWxMZWZ0LAogIFBhbmVsTGVmdENsb3NlOiAoKSA9PiBQYW5lbExlZnRDbG9zZSwKICBQYW5lbExlZnREYXNoZWQ6ICgpID0+IFBhbmVsTGVmdERhc2hlZCwKICBQYW5lbExlZnRJbmFjdGl2ZTogKCkgPT4gUGFuZWxMZWZ0RGFzaGVkLAogIFBhbmVsTGVmdE9wZW46ICgpID0+IFBhbmVsTGVmdE9wZW4sCiAgUGFuZWxMZWZ0UmlnaHREYXNoZWQ6ICgpID0+IFBhbmVsTGVmdFJpZ2h0RGFzaGVkLAogIFBhbmVsUmlnaHQ6ICgpID0+IFBhbmVsUmlnaHQsCiAgUGFuZWxSaWdodENsb3NlOiAoKSA9PiBQYW5lbFJpZ2h0Q2xvc2UsCiAgUGFuZWxSaWdodERhc2hlZDogKCkgPT4gUGFuZWxSaWdodERhc2hlZCwKICBQYW5lbFJpZ2h0SW5hY3RpdmU6ICgpID0+IFBhbmVsUmlnaHREYXNoZWQsCiAgUGFuZWxSaWdodE9wZW46ICgpID0+IFBhbmVsUmlnaHRPcGVuLAogIFBhbmVsVG9wOiAoKSA9PiBQYW5lbFRvcCwKICBQYW5lbFRvcEJvdHRvbURhc2hlZDogKCkgPT4gUGFuZWxUb3BCb3R0b21EYXNoZWQsCiAgUGFuZWxUb3BDbG9zZTogKCkgPT4gUGFuZWxUb3BDbG9zZSwKICBQYW5lbFRvcERhc2hlZDogKCkgPT4gUGFuZWxUb3BEYXNoZWQsCiAgUGFuZWxUb3BJbmFjdGl2ZTogKCkgPT4gUGFuZWxUb3BEYXNoZWQsCiAgUGFuZWxUb3BPcGVuOiAoKSA9PiBQYW5lbFRvcE9wZW4sCiAgUGFuZWxzTGVmdEJvdHRvbTogKCkgPT4gUGFuZWxzTGVmdEJvdHRvbSwKICBQYW5lbHNMZWZ0UmlnaHQ6ICgpID0+IENvbHVtbnMzLAogIFBhbmVsc1JpZ2h0Qm90dG9tOiAoKSA9PiBQYW5lbHNSaWdodEJvdHRvbSwKICBQYW5lbHNUb3BCb3R0b206ICgpID0+IFJvd3MzLAogIFBhbmVsc1RvcExlZnQ6ICgpID0+IFBhbmVsc1RvcExlZnQsCiAgUGFwZXJjbGlwOiAoKSA9PiBQYXBlcmNsaXAsCiAgUGFyZW50aGVzZXM6ICgpID0+IFBhcmVudGhlc2VzLAogIFBhcmtpbmdDaXJjbGU6ICgpID0+IENpcmNsZVBhcmtpbmcsCiAgUGFya2luZ0NpcmNsZU9mZjogKCkgPT4gQ2lyY2xlUGFya2luZ09mZiwKICBQYXJraW5nTWV0ZXI6ICgpID0+IFBhcmtpbmdNZXRlciwKICBQYXJraW5nU3F1YXJlOiAoKSA9PiBTcXVhcmVQYXJraW5nLAogIFBhcmtpbmdTcXVhcmVPZmY6ICgpID0+IFNxdWFyZVBhcmtpbmdPZmYsCiAgUGFydHlQb3BwZXI6ICgpID0+IFBhcnR5UG9wcGVyLAogIFBhdXNlOiAoKSA9PiBQYXVzZSwKICBQYXVzZUNpcmNsZTogKCkgPT4gQ2lyY2xlUGF1c2UsCiAgUGF1c2VPY3RhZ29uOiAoKSA9PiBPY3RhZ29uUGF1c2UsCiAgUGF3UHJpbnQ6ICgpID0+IFBhd1ByaW50LAogIFBjQ2FzZTogKCkgPT4gUGNDYXNlLAogIFBlbjogKCkgPT4gUGVuLAogIFBlbkJveDogKCkgPT4gU3F1YXJlUGVuLAogIFBlbkxpbmU6ICgpID0+IFBlbkxpbmUsCiAgUGVuT2ZmOiAoKSA9PiBQZW5PZmYsCiAgUGVuU3F1YXJlOiAoKSA9PiBTcXVhcmVQZW4sCiAgUGVuVG9vbDogKCkgPT4gUGVuVG9vbCwKICBQZW5jaWw6ICgpID0+IFBlbmNpbCwKICBQZW5jaWxMaW5lOiAoKSA9PiBQZW5jaWxMaW5lLAogIFBlbmNpbE9mZjogKCkgPT4gUGVuY2lsT2ZmLAogIFBlbmNpbFJ1bGVyOiAoKSA9PiBQZW5jaWxSdWxlciwKICBQZW50YWdvbjogKCkgPT4gUGVudGFnb24sCiAgUGVyY2VudDogKCkgPT4gUGVyY2VudCwKICBQZXJjZW50Q2lyY2xlOiAoKSA9PiBDaXJjbGVQZXJjZW50LAogIFBlcmNlbnREaWFtb25kOiAoKSA9PiBEaWFtb25kUGVyY2VudCwKICBQZXJjZW50U3F1YXJlOiAoKSA9PiBTcXVhcmVQZXJjZW50LAogIFBlcnNvblN0YW5kaW5nOiAoKSA9PiBQZXJzb25TdGFuZGluZywKICBQaGlsaXBwaW5lUGVzbzogKCkgPT4gUGhpbGlwcGluZVBlc28sCiAgUGhvbmU6ICgpID0+IFBob25lLAogIFBob25lQ2FsbDogKCkgPT4gUGhvbmVDYWxsLAogIFBob25lRm9yd2FyZGVkOiAoKSA9PiBQaG9uZUZvcndhcmRlZCwKICBQaG9uZUluY29taW5nOiAoKSA9PiBQaG9uZUluY29taW5nLAogIFBob25lTWlzc2VkOiAoKSA9PiBQaG9uZU1pc3NlZCwKICBQaG9uZU9mZjogKCkgPT4gUGhvbmVPZmYsCiAgUGhvbmVPdXRnb2luZzogKCkgPT4gUGhvbmVPdXRnb2luZywKICBQaTogKCkgPT4gUGksCiAgUGlTcXVhcmU6ICgpID0+IFNxdWFyZVBpLAogIFBpYW5vOiAoKSA9PiBQaWFubywKICBQaWNrYXhlOiAoKSA9PiBQaWNrYXhlLAogIFBpY3R1cmVJblBpY3R1cmU6ICgpID0+IFBpY3R1cmVJblBpY3R1cmUsCiAgUGljdHVyZUluUGljdHVyZTI6ICgpID0+IFBpY3R1cmVJblBpY3R1cmUyLAogIFBpZUNoYXJ0OiAoKSA9PiBDaGFydFBpZSwKICBQaWdneUJhbms6ICgpID0+IFBpZ2d5QmFuaywKICBQaWxjcm93OiAoKSA9PiBQaWxjcm93LAogIFBpbGNyb3dMZWZ0OiAoKSA9PiBQaWxjcm93TGVmdCwKICBQaWxjcm93UmlnaHQ6ICgpID0+IFBpbGNyb3dSaWdodCwKICBQaWxjcm93U3F1YXJlOiAoKSA9PiBTcXVhcmVQaWxjcm93LAogIFBpbGw6ICgpID0+IFBpbGwsCiAgUGlsbEJvdHRsZTogKCkgPT4gUGlsbEJvdHRsZSwKICBQaW46ICgpID0+IFBpbiwKICBQaW5PZmY6ICgpID0+IFBpbk9mZiwKICBQaXBldHRlOiAoKSA9PiBQaXBldHRlLAogIFBpenphOiAoKSA9PiBQaXp6YSwKICBQbGFuZTogKCkgPT4gUGxhbmUsCiAgUGxhbmVMYW5kaW5nOiAoKSA9PiBQbGFuZUxhbmRpbmcsCiAgUGxhbmVUYWtlb2ZmOiAoKSA9PiBQbGFuZVRha2VvZmYsCiAgUGxheTogKCkgPT4gUGxheSwKICBQbGF5Q2lyY2xlOiAoKSA9PiBDaXJjbGVQbGF5LAogIFBsYXlTcXVhcmU6ICgpID0+IFNxdWFyZVBsYXksCiAgUGx1ZzogKCkgPT4gUGx1ZywKICBQbHVnMjogKCkgPT4gUGx1ZzIsCiAgUGx1Z1phcDogKCkgPT4gUGx1Z1phcCwKICBQbHVnWmFwMjogKCkgPT4gUGx1Z1phcCwKICBQbHVzOiAoKSA9PiBQbHVzLAogIFBsdXNDaXJjbGU6ICgpID0+IENpcmNsZVBsdXMsCiAgUGx1c1NxdWFyZTogKCkgPT4gU3F1YXJlUGx1cywKICBQb2NrZXQ6ICgpID0+IFBvY2tldCwKICBQb2NrZXRLbmlmZTogKCkgPT4gUG9ja2V0S25pZmUsCiAgUG9kY2FzdDogKCkgPT4gUG9kY2FzdCwKICBQb2ludGVyOiAoKSA9PiBQb2ludGVyLAogIFBvaW50ZXJPZmY6ICgpID0+IFBvaW50ZXJPZmYsCiAgUG9wY29ybjogKCkgPT4gUG9wY29ybiwKICBQb3BzaWNsZTogKCkgPT4gUG9wc2ljbGUsCiAgUG91bmRTdGVybGluZzogKCkgPT4gUG91bmRTdGVybGluZywKICBQb3dlcjogKCkgPT4gUG93ZXIsCiAgUG93ZXJDaXJjbGU6ICgpID0+IENpcmNsZVBvd2VyLAogIFBvd2VyT2ZmOiAoKSA9PiBQb3dlck9mZiwKICBQb3dlclNxdWFyZTogKCkgPT4gU3F1YXJlUG93ZXIsCiAgUHJlc2VudGF0aW9uOiAoKSA9PiBQcmVzZW50YXRpb24sCiAgUHJpbnRlcjogKCkgPT4gUHJpbnRlciwKICBQcmludGVyQ2hlY2s6ICgpID0+IFByaW50ZXJDaGVjaywKICBQcm9qZWN0b3I6ICgpID0+IFByb2plY3RvciwKICBQcm9wb3J0aW9uczogKCkgPT4gUHJvcG9ydGlvbnMsCiAgUHV6emxlOiAoKSA9PiBQdXp6bGUsCiAgUHlyYW1pZDogKCkgPT4gUHlyYW1pZCwKICBRckNvZGU6ICgpID0+IFFyQ29kZSwKICBRdW90ZTogKCkgPT4gUXVvdGUsCiAgUmFiYml0OiAoKSA9PiBSYWJiaXQsCiAgUmFkYXI6ICgpID0+IFJhZGFyLAogIFJhZGlhdGlvbjogKCkgPT4gUmFkaWF0aW9uLAogIFJhZGljYWw6ICgpID0+IFJhZGljYWwsCiAgUmFkaW86ICgpID0+IFJhZGlvLAogIFJhZGlvUmVjZWl2ZXI6ICgpID0+IFJhZGlvUmVjZWl2ZXIsCiAgUmFkaW9Ub3dlcjogKCkgPT4gUmFkaW9Ub3dlciwKICBSYWRpdXM6ICgpID0+IFJhZGl1cywKICBSYWlsU3ltYm9sOiAoKSA9PiBSYWlsU3ltYm9sLAogIFJhaW5ib3c6ICgpID0+IFJhaW5ib3csCiAgUmF0OiAoKSA9PiBSYXQsCiAgUmF0aW86ICgpID0+IFJhdGlvLAogIFJlY2VpcHQ6ICgpID0+IFJlY2VpcHQsCiAgUmVjZWlwdENlbnQ6ICgpID0+IFJlY2VpcHRDZW50LAogIFJlY2VpcHRFdXJvOiAoKSA9PiBSZWNlaXB0RXVybywKICBSZWNlaXB0SW5kaWFuUnVwZWU6ICgpID0+IFJlY2VpcHRJbmRpYW5SdXBlZSwKICBSZWNlaXB0SmFwYW5lc2VZZW46ICgpID0+IFJlY2VpcHRKYXBhbmVzZVllbiwKICBSZWNlaXB0UG91bmRTdGVybGluZzogKCkgPT4gUmVjZWlwdFBvdW5kU3RlcmxpbmcsCiAgUmVjZWlwdFJ1c3NpYW5SdWJsZTogKCkgPT4gUmVjZWlwdFJ1c3NpYW5SdWJsZSwKICBSZWNlaXB0U3dpc3NGcmFuYzogKCkgPT4gUmVjZWlwdFN3aXNzRnJhbmMsCiAgUmVjZWlwdFRleHQ6ICgpID0+IFJlY2VpcHRUZXh0LAogIFJlY2VpcHRUdXJraXNoTGlyYTogKCkgPT4gUmVjZWlwdFR1cmtpc2hMaXJhLAogIFJlY3RhbmdsZUNpcmNsZTogKCkgPT4gUmVjdGFuZ2xlQ2lyY2xlLAogIFJlY3RhbmdsZUVsbGlwc2lzOiAoKSA9PiBSZWN0YW5nbGVFbGxpcHNpcywKICBSZWN0YW5nbGVHb2dnbGVzOiAoKSA9PiBSZWN0YW5nbGVHb2dnbGVzLAogIFJlY3RhbmdsZUhvcml6b250YWw6ICgpID0+IFJlY3RhbmdsZUhvcml6b250YWwsCiAgUmVjdGFuZ2xlVmVydGljYWw6ICgpID0+IFJlY3RhbmdsZVZlcnRpY2FsLAogIFJlY3ljbGU6ICgpID0+IFJlY3ljbGUsCiAgUmVkbzogKCkgPT4gUmVkbywKICBSZWRvMjogKCkgPT4gUmVkbzIsCiAgUmVkb0RvdDogKCkgPT4gUmVkb0RvdCwKICBSZWZyZXNoQ2N3OiAoKSA9PiBSZWZyZXNoQ2N3LAogIFJlZnJlc2hDY3dEb3Q6ICgpID0+IFJlZnJlc2hDY3dEb3QsCiAgUmVmcmVzaEN3OiAoKSA9PiBSZWZyZXNoQ3csCiAgUmVmcmVzaEN3T2ZmOiAoKSA9PiBSZWZyZXNoQ3dPZmYsCiAgUmVmcmlnZXJhdG9yOiAoKSA9PiBSZWZyaWdlcmF0b3IsCiAgUmVnZXg6ICgpID0+IFJlZ2V4LAogIFJlbW92ZUZvcm1hdHRpbmc6ICgpID0+IFJlbW92ZUZvcm1hdHRpbmcsCiAgUmVwZWF0OiAoKSA9PiBSZXBlYXQsCiAgUmVwZWF0MTogKCkgPT4gUmVwZWF0MSwKICBSZXBlYXQyOiAoKSA9PiBSZXBlYXQyLAogIFJlcGxhY2U6ICgpID0+IFJlcGxhY2UsCiAgUmVwbGFjZUFsbDogKCkgPT4gUmVwbGFjZUFsbCwKICBSZXBseTogKCkgPT4gUmVwbHksCiAgUmVwbHlBbGw6ICgpID0+IFJlcGx5QWxsLAogIFJld2luZDogKCkgPT4gUmV3aW5kLAogIFJpYmJvbjogKCkgPT4gUmliYm9uLAogIFJvY2tldDogKCkgPT4gUm9ja2V0LAogIFJvY2tpbmdDaGFpcjogKCkgPT4gUm9ja2luZ0NoYWlyLAogIFJvbGxlckNvYXN0ZXI6ICgpID0+IFJvbGxlckNvYXN0ZXIsCiAgUm9zZTogKCkgPT4gUm9zZSwKICBSb3RhdGUzRDogKCkgPT4gUm90YXRlM2QsCiAgUm90YXRlM2Q6ICgpID0+IFJvdGF0ZTNkLAogIFJvdGF0ZUNjdzogKCkgPT4gUm90YXRlQ2N3LAogIFJvdGF0ZUNjd0tleTogKCkgPT4gUm90YXRlQ2N3S2V5LAogIFJvdGF0ZUNjd1NxdWFyZTogKCkgPT4gUm90YXRlQ2N3U3F1YXJlLAogIFJvdGF0ZUN3OiAoKSA9PiBSb3RhdGVDdywKICBSb3RhdGVDd1NxdWFyZTogKCkgPT4gUm90YXRlQ3dTcXVhcmUsCiAgUm91dGU6ICgpID0+IFJvdXRlLAogIFJvdXRlT2ZmOiAoKSA9PiBSb3V0ZU9mZiwKICBSb3V0ZXI6ICgpID0+IFJvdXRlciwKICBSb3dzOiAoKSA9PiBSb3dzMiwKICBSb3dzMjogKCkgPT4gUm93czIsCiAgUm93czM6ICgpID0+IFJvd3MzLAogIFJvd3M0OiAoKSA9PiBSb3dzNCwKICBSc3M6ICgpID0+IFJzcywKICBSdWxlcjogKCkgPT4gUnVsZXIsCiAgUnVsZXJEaW1lbnNpb25MaW5lOiAoKSA9PiBSdWxlckRpbWVuc2lvbkxpbmUsCiAgUnVzc2lhblJ1YmxlOiAoKSA9PiBSdXNzaWFuUnVibGUsCiAgU2FpbGJvYXQ6ICgpID0+IFNhaWxib2F0LAogIFNhbGFkOiAoKSA9PiBTYWxhZCwKICBTYW5kd2ljaDogKCkgPT4gU2FuZHdpY2gsCiAgU2F0ZWxsaXRlOiAoKSA9PiBTYXRlbGxpdGUsCiAgU2F0ZWxsaXRlRGlzaDogKCkgPT4gU2F0ZWxsaXRlRGlzaCwKICBTYXVkaVJpeWFsOiAoKSA9PiBTYXVkaVJpeWFsLAogIFNhdmU6ICgpID0+IFNhdmUsCiAgU2F2ZUFsbDogKCkgPT4gU2F2ZUFsbCwKICBTYXZlT2ZmOiAoKSA9PiBTYXZlT2ZmLAogIFNjYWxlOiAoKSA9PiBTY2FsZSwKICBTY2FsZTNEOiAoKSA9PiBTY2FsZTNkLAogIFNjYWxlM2Q6ICgpID0+IFNjYWxlM2QsCiAgU2NhbGluZzogKCkgPT4gU2NhbGluZywKICBTY2FuOiAoKSA9PiBTY2FuLAogIFNjYW5CYXJjb2RlOiAoKSA9PiBTY2FuQmFyY29kZSwKICBTY2FuRXllOiAoKSA9PiBTY2FuRXllLAogIFNjYW5GYWNlOiAoKSA9PiBTY2FuRmFjZSwKICBTY2FuSGVhcnQ6ICgpID0+IFNjYW5IZWFydCwKICBTY2FuTGluZTogKCkgPT4gU2NhbkxpbmUsCiAgU2NhblFyQ29kZTogKCkgPT4gU2NhblFyQ29kZSwKICBTY2FuU2VhcmNoOiAoKSA9PiBTY2FuU2VhcmNoLAogIFNjYW5UZXh0OiAoKSA9PiBTY2FuVGV4dCwKICBTY2F0dGVyQ2hhcnQ6ICgpID0+IENoYXJ0U2NhdHRlciwKICBTY2hvb2w6ICgpID0+IFNjaG9vbCwKICBTY2hvb2wyOiAoKSA9PiBVbml2ZXJzaXR5LAogIFNjaXNzb3JzOiAoKSA9PiBTY2lzc29ycywKICBTY2lzc29yc0xpbmVEYXNoZWQ6ICgpID0+IFNjaXNzb3JzTGluZURhc2hlZCwKICBTY2lzc29yc1NxdWFyZTogKCkgPT4gU3F1YXJlU2Npc3NvcnMsCiAgU2Npc3NvcnNTcXVhcmVEYXNoZWRCb3R0b206ICgpID0+IFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzLAogIFNjb290ZXI6ICgpID0+IFNjb290ZXIsCiAgU2NyZWVuU2hhcmU6ICgpID0+IFNjcmVlblNoYXJlLAogIFNjcmVlblNoYXJlT2ZmOiAoKSA9PiBTY3JlZW5TaGFyZU9mZiwKICBTY3JvbGw6ICgpID0+IFNjcm9sbCwKICBTY3JvbGxUZXh0OiAoKSA9PiBTY3JvbGxUZXh0LAogIFNlYXJjaDogKCkgPT4gU2VhcmNoLAogIFNlYXJjaEFsZXJ0OiAoKSA9PiBTZWFyY2hBbGVydCwKICBTZWFyY2hDaGVjazogKCkgPT4gU2VhcmNoQ2hlY2ssCiAgU2VhcmNoQ29kZTogKCkgPT4gU2VhcmNoQ29kZSwKICBTZWFyY2hTbGFzaDogKCkgPT4gU2VhcmNoU2xhc2gsCiAgU2VhcmNoWDogKCkgPT4gU2VhcmNoWCwKICBTZWN0aW9uOiAoKSA9PiBTZWN0aW9uLAogIFNlbmQ6ICgpID0+IFNlbmQsCiAgU2VuZEhvcml6b25hbDogKCkgPT4gU2VuZEhvcml6b250YWwsCiAgU2VuZEhvcml6b250YWw6ICgpID0+IFNlbmRIb3Jpem9udGFsLAogIFNlbmRUb0JhY2s6ICgpID0+IFNlbmRUb0JhY2ssCiAgU2VwYXJhdG9ySG9yaXpvbnRhbDogKCkgPT4gU2VwYXJhdG9ySG9yaXpvbnRhbCwKICBTZXBhcmF0b3JWZXJ0aWNhbDogKCkgPT4gU2VwYXJhdG9yVmVydGljYWwsCiAgU2VydmVyOiAoKSA9PiBTZXJ2ZXIsCiAgU2VydmVyQ29nOiAoKSA9PiBTZXJ2ZXJDb2csCiAgU2VydmVyQ3Jhc2g6ICgpID0+IFNlcnZlckNyYXNoLAogIFNlcnZlck9mZjogKCkgPT4gU2VydmVyT2ZmLAogIFNldHRpbmdzOiAoKSA9PiBTZXR0aW5ncywKICBTZXR0aW5nczI6ICgpID0+IFNldHRpbmdzMiwKICBTaGFwZXM6ICgpID0+IFNoYXBlcywKICBTaGFyZTogKCkgPT4gU2hhcmUsCiAgU2hhcmUyOiAoKSA9PiBTaGFyZTIsCiAgU2hlZXQ6ICgpID0+IFNoZWV0LAogIFNoZWxsOiAoKSA9PiBTaGVsbCwKICBTaGllbGQ6ICgpID0+IFNoaWVsZCwKICBTaGllbGRBbGVydDogKCkgPT4gU2hpZWxkQWxlcnQsCiAgU2hpZWxkQmFuOiAoKSA9PiBTaGllbGRCYW4sCiAgU2hpZWxkQ2hlY2s6ICgpID0+IFNoaWVsZENoZWNrLAogIFNoaWVsZENsb3NlOiAoKSA9PiBTaGllbGRYLAogIFNoaWVsZEVsbGlwc2lzOiAoKSA9PiBTaGllbGRFbGxpcHNpcywKICBTaGllbGRIYWxmOiAoKSA9PiBTaGllbGRIYWxmLAogIFNoaWVsZE1pbnVzOiAoKSA9PiBTaGllbGRNaW51cywKICBTaGllbGRPZmY6ICgpID0+IFNoaWVsZE9mZiwKICBTaGllbGRQbHVzOiAoKSA9PiBTaGllbGRQbHVzLAogIFNoaWVsZFF1ZXN0aW9uOiAoKSA9PiBTaGllbGRRdWVzdGlvbk1hcmssCiAgU2hpZWxkUXVlc3Rpb25NYXJrOiAoKSA9PiBTaGllbGRRdWVzdGlvbk1hcmssCiAgU2hpZWxkVXNlcjogKCkgPT4gU2hpZWxkVXNlciwKICBTaGllbGRYOiAoKSA9PiBTaGllbGRYLAogIFNoaXA6ICgpID0+IFNoaXAsCiAgU2hpcFdoZWVsOiAoKSA9PiBTaGlwV2hlZWwsCiAgU2hpcnQ6ICgpID0+IFNoaXJ0LAogIFNob3BwaW5nQmFnOiAoKSA9PiBTaG9wcGluZ0JhZywKICBTaG9wcGluZ0Jhc2tldDogKCkgPT4gU2hvcHBpbmdCYXNrZXQsCiAgU2hvcHBpbmdDYXJ0OiAoKSA9PiBTaG9wcGluZ0NhcnQsCiAgU2hvdmVsOiAoKSA9PiBTaG92ZWwsCiAgU2hvd2VySGVhZDogKCkgPT4gU2hvd2VySGVhZCwKICBTaHJlZGRlcjogKCkgPT4gU2hyZWRkZXIsCiAgU2hyaW1wOiAoKSA9PiBTaHJpbXAsCiAgU2hyaW5rOiAoKSA9PiBTaHJpbmssCiAgU2hydWI6ICgpID0+IFNocnViLAogIFNodWZmbGU6ICgpID0+IFNodWZmbGUsCiAgU2lkZWJhcjogKCkgPT4gUGFuZWxMZWZ0LAogIFNpZGViYXJDbG9zZTogKCkgPT4gUGFuZWxMZWZ0Q2xvc2UsCiAgU2lkZWJhck9wZW46ICgpID0+IFBhbmVsTGVmdE9wZW4sCiAgU2lnbWE6ICgpID0+IFNpZ21hLAogIFNpZ21hU3F1YXJlOiAoKSA9PiBTcXVhcmVTaWdtYSwKICBTaWduYWw6ICgpID0+IFNpZ25hbCwKICBTaWduYWxIaWdoOiAoKSA9PiBTaWduYWxIaWdoLAogIFNpZ25hbExvdzogKCkgPT4gU2lnbmFsTG93LAogIFNpZ25hbE1lZGl1bTogKCkgPT4gU2lnbmFsTWVkaXVtLAogIFNpZ25hbFplcm86ICgpID0+IFNpZ25hbFplcm8sCiAgU2lnbmF0dXJlOiAoKSA9PiBTaWduYXR1cmUsCiAgU2lnbnBvc3Q6ICgpID0+IFNpZ25wb3N0LAogIFNpZ25wb3N0QmlnOiAoKSA9PiBTaWducG9zdEJpZywKICBTaXJlbjogKCkgPT4gU2lyZW4sCiAgU2tpcEJhY2s6ICgpID0+IFNraXBCYWNrLAogIFNraXBGb3J3YXJkOiAoKSA9PiBTa2lwRm9yd2FyZCwKICBTa3VsbDogKCkgPT4gU2t1bGwsCiAgU2xhY2s6ICgpID0+IFNsYWNrLAogIFNsYXNoOiAoKSA9PiBTbGFzaCwKICBTbGFzaFNxdWFyZTogKCkgPT4gU3F1YXJlU2xhc2gsCiAgU2xpY2U6ICgpID0+IFNsaWNlLAogIFNsaWRlcnM6ICgpID0+IFNsaWRlcnNWZXJ0aWNhbCwKICBTbGlkZXJzSG9yaXpvbnRhbDogKCkgPT4gU2xpZGVyc0hvcml6b250YWwsCiAgU2xpZGVyc1ZlcnRpY2FsOiAoKSA9PiBTbGlkZXJzVmVydGljYWwsCiAgU21hcnRwaG9uZTogKCkgPT4gU21hcnRwaG9uZSwKICBTbWFydHBob25lQ2hhcmdpbmc6ICgpID0+IFNtYXJ0cGhvbmVDaGFyZ2luZywKICBTbWFydHBob25lTmZjOiAoKSA9PiBTbWFydHBob25lTmZjLAogIFNtaWxlOiAoKSA9PiBTbWlsZSwKICBTbWlsZVBsdXM6ICgpID0+IFNtaWxlUGx1cywKICBTbmFpbDogKCkgPT4gU25haWwsCiAgU25vd2ZsYWtlOiAoKSA9PiBTbm93Zmxha2UsCiAgU29hcERpc3BlbnNlckRyb3BsZXQ6ICgpID0+IFNvYXBEaXNwZW5zZXJEcm9wbGV0LAogIFNvZmE6ICgpID0+IFNvZmEsCiAgU29sYXJQYW5lbDogKCkgPT4gU29sYXJQYW5lbCwKICBTb3J0QXNjOiAoKSA9PiBBcnJvd1VwTmFycm93V2lkZSwKICBTb3J0RGVzYzogKCkgPT4gQXJyb3dEb3duV2lkZU5hcnJvdywKICBTb3VwOiAoKSA9PiBTb3VwLAogIFNwYWNlOiAoKSA9PiBTcGFjZSwKICBTcGFkZTogKCkgPT4gU3BhZGUsCiAgU3BhcmtsZTogKCkgPT4gU3BhcmtsZSwKICBTcGFya2xlczogKCkgPT4gU3BhcmtsZXMsCiAgU3BlYWtlcjogKCkgPT4gU3BlYWtlciwKICBTcGVlY2g6ICgpID0+IFNwZWVjaCwKICBTcGVsbENoZWNrOiAoKSA9PiBTcGVsbENoZWNrLAogIFNwZWxsQ2hlY2syOiAoKSA9PiBTcGVsbENoZWNrMiwKICBTcGxpbmU6ICgpID0+IFNwbGluZSwKICBTcGxpbmVQb2ludGVyOiAoKSA9PiBTcGxpbmVQb2ludGVyLAogIFNwbGl0OiAoKSA9PiBTcGxpdCwKICBTcGxpdFNxdWFyZUhvcml6b250YWw6ICgpID0+IFNxdWFyZVNwbGl0SG9yaXpvbnRhbCwKICBTcGxpdFNxdWFyZVZlcnRpY2FsOiAoKSA9PiBTcXVhcmVTcGxpdFZlcnRpY2FsLAogIFNwb29sOiAoKSA9PiBTcG9vbCwKICBTcG90bGlnaHQ6ICgpID0+IFNwb3RsaWdodCwKICBTcHJheUNhbjogKCkgPT4gU3ByYXlDYW4sCiAgU3Byb3V0OiAoKSA9PiBTcHJvdXQsCiAgU3F1YXJlOiAoKSA9PiBTcXVhcmUsCiAgU3F1YXJlQWN0aXZpdHk6ICgpID0+IFNxdWFyZUFjdGl2aXR5LAogIFNxdWFyZUFycm93RG93bjogKCkgPT4gU3F1YXJlQXJyb3dEb3duLAogIFNxdWFyZUFycm93RG93bkxlZnQ6ICgpID0+IFNxdWFyZUFycm93RG93bkxlZnQsCiAgU3F1YXJlQXJyb3dEb3duUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93RG93blJpZ2h0LAogIFNxdWFyZUFycm93TGVmdDogKCkgPT4gU3F1YXJlQXJyb3dMZWZ0LAogIFNxdWFyZUFycm93T3V0RG93bkxlZnQ6ICgpID0+IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgU3F1YXJlQXJyb3dPdXREb3duUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93T3V0RG93blJpZ2h0LAogIFNxdWFyZUFycm93T3V0VXBMZWZ0OiAoKSA9PiBTcXVhcmVBcnJvd091dFVwTGVmdCwKICBTcXVhcmVBcnJvd091dFVwUmlnaHQ6ICgpID0+IFNxdWFyZUFycm93T3V0VXBSaWdodCwKICBTcXVhcmVBcnJvd1JpZ2h0OiAoKSA9PiBTcXVhcmVBcnJvd1JpZ2h0LAogIFNxdWFyZUFycm93VXA6ICgpID0+IFNxdWFyZUFycm93VXAsCiAgU3F1YXJlQXJyb3dVcExlZnQ6ICgpID0+IFNxdWFyZUFycm93VXBMZWZ0LAogIFNxdWFyZUFycm93VXBSaWdodDogKCkgPT4gU3F1YXJlQXJyb3dVcFJpZ2h0LAogIFNxdWFyZUFzdGVyaXNrOiAoKSA9PiBTcXVhcmVBc3RlcmlzaywKICBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29yczogKCkgPT4gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgU3F1YXJlQ2hhcnRHYW50dDogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBTcXVhcmVDaGVjazogKCkgPT4gU3F1YXJlQ2hlY2ssCiAgU3F1YXJlQ2hlY2tCaWc6ICgpID0+IFNxdWFyZUNoZWNrQmlnLAogIFNxdWFyZUNoZXZyb25Eb3duOiAoKSA9PiBTcXVhcmVDaGV2cm9uRG93biwKICBTcXVhcmVDaGV2cm9uTGVmdDogKCkgPT4gU3F1YXJlQ2hldnJvbkxlZnQsCiAgU3F1YXJlQ2hldnJvblJpZ2h0OiAoKSA9PiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgU3F1YXJlQ2hldnJvblVwOiAoKSA9PiBTcXVhcmVDaGV2cm9uVXAsCiAgU3F1YXJlQ29kZTogKCkgPT4gU3F1YXJlQ29kZSwKICBTcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZCwKICBTcXVhcmVEYXNoZWRCb3R0b206ICgpID0+IFNxdWFyZURhc2hlZEJvdHRvbSwKICBTcXVhcmVEYXNoZWRCb3R0b21Db2RlOiAoKSA9PiBTcXVhcmVEYXNoZWRCb3R0b21Db2RlLAogIFNxdWFyZURhc2hlZEthbmJhbjogKCkgPT4gU3F1YXJlRGFzaGVkS2FuYmFuLAogIFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlcjogKCkgPT4gU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyLAogIFNxdWFyZURhc2hlZFRvcFNvbGlkOiAoKSA9PiBTcXVhcmVEYXNoZWRUb3BTb2xpZCwKICBTcXVhcmVEaXZpZGU6ICgpID0+IFNxdWFyZURpdmlkZSwKICBTcXVhcmVEb3Q6ICgpID0+IFNxdWFyZURvdCwKICBTcXVhcmVFcXVhbDogKCkgPT4gU3F1YXJlRXF1YWwsCiAgU3F1YXJlRnVuY3Rpb246ICgpID0+IFNxdWFyZUZ1bmN0aW9uLAogIFNxdWFyZUdhbnR0Q2hhcnQ6ICgpID0+IFNxdWFyZUNoYXJ0R2FudHQsCiAgU3F1YXJlS2FuYmFuOiAoKSA9PiBTcXVhcmVLYW5iYW4sCiAgU3F1YXJlTGlicmFyeTogKCkgPT4gU3F1YXJlTGlicmFyeSwKICBTcXVhcmVNOiAoKSA9PiBTcXVhcmVNLAogIFNxdWFyZU1lbnU6ICgpID0+IFNxdWFyZU1lbnUsCiAgU3F1YXJlTWludXM6ICgpID0+IFNxdWFyZU1pbnVzLAogIFNxdWFyZU1vdXNlUG9pbnRlcjogKCkgPT4gU3F1YXJlTW91c2VQb2ludGVyLAogIFNxdWFyZVBhcmtpbmc6ICgpID0+IFNxdWFyZVBhcmtpbmcsCiAgU3F1YXJlUGFya2luZ09mZjogKCkgPT4gU3F1YXJlUGFya2luZ09mZiwKICBTcXVhcmVQYXVzZTogKCkgPT4gU3F1YXJlUGF1c2UsCiAgU3F1YXJlUGVuOiAoKSA9PiBTcXVhcmVQZW4sCiAgU3F1YXJlUGVyY2VudDogKCkgPT4gU3F1YXJlUGVyY2VudCwKICBTcXVhcmVQaTogKCkgPT4gU3F1YXJlUGksCiAgU3F1YXJlUGlsY3JvdzogKCkgPT4gU3F1YXJlUGlsY3JvdywKICBTcXVhcmVQbGF5OiAoKSA9PiBTcXVhcmVQbGF5LAogIFNxdWFyZVBsdXM6ICgpID0+IFNxdWFyZVBsdXMsCiAgU3F1YXJlUG93ZXI6ICgpID0+IFNxdWFyZVBvd2VyLAogIFNxdWFyZVJhZGljYWw6ICgpID0+IFNxdWFyZVJhZGljYWwsCiAgU3F1YXJlUm91bmRDb3JuZXI6ICgpID0+IFNxdWFyZVJvdW5kQ29ybmVyLAogIFNxdWFyZVNjaXNzb3JzOiAoKSA9PiBTcXVhcmVTY2lzc29ycywKICBTcXVhcmVTaWdtYTogKCkgPT4gU3F1YXJlU2lnbWEsCiAgU3F1YXJlU2xhc2g6ICgpID0+IFNxdWFyZVNsYXNoLAogIFNxdWFyZVNwbGl0SG9yaXpvbnRhbDogKCkgPT4gU3F1YXJlU3BsaXRIb3Jpem9udGFsLAogIFNxdWFyZVNwbGl0VmVydGljYWw6ICgpID0+IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgU3F1YXJlU3F1YXJlOiAoKSA9PiBTcXVhcmVTcXVhcmUsCiAgU3F1YXJlU3RhY2s6ICgpID0+IFNxdWFyZVN0YWNrLAogIFNxdWFyZVN0YXI6ICgpID0+IFNxdWFyZVN0YXIsCiAgU3F1YXJlU3RvcDogKCkgPT4gU3F1YXJlU3RvcCwKICBTcXVhcmVUZXJtaW5hbDogKCkgPT4gU3F1YXJlVGVybWluYWwsCiAgU3F1YXJlVXNlcjogKCkgPT4gU3F1YXJlVXNlciwKICBTcXVhcmVVc2VyUm91bmQ6ICgpID0+IFNxdWFyZVVzZXJSb3VuZCwKICBTcXVhcmVYOiAoKSA9PiBTcXVhcmVYLAogIFNxdWFyZXNFeGNsdWRlOiAoKSA9PiBTcXVhcmVzRXhjbHVkZSwKICBTcXVhcmVzSW50ZXJzZWN0OiAoKSA9PiBTcXVhcmVzSW50ZXJzZWN0LAogIFNxdWFyZXNTdWJ0cmFjdDogKCkgPT4gU3F1YXJlc1N1YnRyYWN0LAogIFNxdWFyZXNVbml0ZTogKCkgPT4gU3F1YXJlc1VuaXRlLAogIFNxdWlyY2xlOiAoKSA9PiBTcXVpcmNsZSwKICBTcXVpcmNsZURhc2hlZDogKCkgPT4gU3F1aXJjbGVEYXNoZWQsCiAgU3F1aXJyZWw6ICgpID0+IFNxdWlycmVsLAogIFN0YW1wOiAoKSA9PiBTdGFtcCwKICBTdGFyOiAoKSA9PiBTdGFyLAogIFN0YXJIYWxmOiAoKSA9PiBTdGFySGFsZiwKICBTdGFyT2ZmOiAoKSA9PiBTdGFyT2ZmLAogIFN0YXJzOiAoKSA9PiBTcGFya2xlcywKICBTdGVwQmFjazogKCkgPT4gU3RlcEJhY2ssCiAgU3RlcEZvcndhcmQ6ICgpID0+IFN0ZXBGb3J3YXJkLAogIFN0ZXRob3Njb3BlOiAoKSA9PiBTdGV0aG9zY29wZSwKICBTdGlja2VyOiAoKSA9PiBTdGlja2VyLAogIFN0aWNreU5vdGU6ICgpID0+IFN0aWNreU5vdGUsCiAgU3RvbmU6ICgpID0+IFN0b25lLAogIFN0b3BDaXJjbGU6ICgpID0+IENpcmNsZVN0b3AsCiAgU3RvcmU6ICgpID0+IFN0b3JlLAogIFN0cmV0Y2hIb3Jpem9udGFsOiAoKSA9PiBTdHJldGNoSG9yaXpvbnRhbCwKICBTdHJldGNoVmVydGljYWw6ICgpID0+IFN0cmV0Y2hWZXJ0aWNhbCwKICBTdHJpa2V0aHJvdWdoOiAoKSA9PiBTdHJpa2V0aHJvdWdoLAogIFN1YnNjcmlwdDogKCkgPT4gU3Vic2NyaXB0LAogIFN1YnRpdGxlczogKCkgPT4gQ2FwdGlvbnMsCiAgU3VuOiAoKSA9PiBTdW4sCiAgU3VuRGltOiAoKSA9PiBTdW5EaW0sCiAgU3VuTWVkaXVtOiAoKSA9PiBTdW5NZWRpdW0sCiAgU3VuTW9vbjogKCkgPT4gU3VuTW9vbiwKICBTdW5Tbm93OiAoKSA9PiBTdW5Tbm93LAogIFN1bnJpc2U6ICgpID0+IFN1bnJpc2UsCiAgU3Vuc2V0OiAoKSA9PiBTdW5zZXQsCiAgU3VwZXJzY3JpcHQ6ICgpID0+IFN1cGVyc2NyaXB0LAogIFN3YXRjaEJvb2s6ICgpID0+IFN3YXRjaEJvb2ssCiAgU3dpc3NGcmFuYzogKCkgPT4gU3dpc3NGcmFuYywKICBTd2l0Y2hDYW1lcmE6ICgpID0+IFN3aXRjaENhbWVyYSwKICBTd29yZDogKCkgPT4gU3dvcmQsCiAgU3dvcmRzOiAoKSA9PiBTd29yZHMsCiAgU3lyaW5nZTogKCkgPT4gU3lyaW5nZSwKICBUYWJsZTogKCkgPT4gVGFibGUsCiAgVGFibGUyOiAoKSA9PiBUYWJsZTIsCiAgVGFibGVDZWxsc01lcmdlOiAoKSA9PiBUYWJsZUNlbGxzTWVyZ2UsCiAgVGFibGVDZWxsc1NwbGl0OiAoKSA9PiBUYWJsZUNlbGxzU3BsaXQsCiAgVGFibGVDb2x1bW5zU3BsaXQ6ICgpID0+IFRhYmxlQ29sdW1uc1NwbGl0LAogIFRhYmxlQ29uZmlnOiAoKSA9PiBDb2x1bW5zM0NvZywKICBUYWJsZU9mQ29udGVudHM6ICgpID0+IFRhYmxlT2ZDb250ZW50cywKICBUYWJsZVByb3BlcnRpZXM6ICgpID0+IFRhYmxlUHJvcGVydGllcywKICBUYWJsZVJvd3NTcGxpdDogKCkgPT4gVGFibGVSb3dzU3BsaXQsCiAgVGFibGV0OiAoKSA9PiBUYWJsZXQsCiAgVGFibGV0U21hcnRwaG9uZTogKCkgPT4gVGFibGV0U21hcnRwaG9uZSwKICBUYWJsZXRzOiAoKSA9PiBUYWJsZXRzLAogIFRhZzogKCkgPT4gVGFnMiwKICBUYWdzOiAoKSA9PiBUYWdzLAogIFRhbGx5MTogKCkgPT4gVGFsbHkxLAogIFRhbGx5MjogKCkgPT4gVGFsbHkyLAogIFRhbGx5MzogKCkgPT4gVGFsbHkzLAogIFRhbGx5NDogKCkgPT4gVGFsbHk0LAogIFRhbGx5NTogKCkgPT4gVGFsbHk1LAogIFRhbmdlbnQ6ICgpID0+IFRhbmdlbnQsCiAgVGFyZ2V0OiAoKSA9PiBUYXJnZXQsCiAgVGVsZXNjb3BlOiAoKSA9PiBUZWxlc2NvcGUsCiAgVGVudDogKCkgPT4gVGVudCwKICBUZW50VHJlZTogKCkgPT4gVGVudFRyZWUsCiAgVGVybWluYWw6ICgpID0+IFRlcm1pbmFsLAogIFRlcm1pbmFsU3F1YXJlOiAoKSA9PiBTcXVhcmVUZXJtaW5hbCwKICBUZXN0VHViZTogKCkgPT4gVGVzdFR1YmUsCiAgVGVzdFR1YmUyOiAoKSA9PiBUZXN0VHViZURpYWdvbmFsLAogIFRlc3RUdWJlRGlhZ29uYWw6ICgpID0+IFRlc3RUdWJlRGlhZ29uYWwsCiAgVGVzdFR1YmVzOiAoKSA9PiBUZXN0VHViZXMsCiAgVGV4dDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgVGV4dEFsaWduQ2VudGVyOiAoKSA9PiBUZXh0QWxpZ25DZW50ZXIsCiAgVGV4dEFsaWduRW5kOiAoKSA9PiBUZXh0QWxpZ25FbmQsCiAgVGV4dEFsaWduSnVzdGlmeTogKCkgPT4gVGV4dEFsaWduSnVzdGlmeSwKICBUZXh0QWxpZ25TdGFydDogKCkgPT4gVGV4dEFsaWduU3RhcnQsCiAgVGV4dEN1cnNvcjogKCkgPT4gVGV4dEN1cnNvciwKICBUZXh0Q3Vyc29ySW5wdXQ6ICgpID0+IFRleHRDdXJzb3JJbnB1dCwKICBUZXh0SW5pdGlhbDogKCkgPT4gVGV4dEluaXRpYWwsCiAgVGV4dFF1b3RlOiAoKSA9PiBUZXh0UXVvdGUsCiAgVGV4dFNlYXJjaDogKCkgPT4gVGV4dFNlYXJjaCwKICBUZXh0U2VsZWN0OiAoKSA9PiBUZXh0U2VsZWN0LAogIFRleHRTZWxlY3Rpb246ICgpID0+IFRleHRTZWxlY3QsCiAgVGV4dFdyYXA6ICgpID0+IFRleHRXcmFwLAogIFRoZWF0ZXI6ICgpID0+IFRoZWF0ZXIsCiAgVGhlcm1vbWV0ZXI6ICgpID0+IFRoZXJtb21ldGVyLAogIFRoZXJtb21ldGVyU25vd2ZsYWtlOiAoKSA9PiBUaGVybW9tZXRlclNub3dmbGFrZSwKICBUaGVybW9tZXRlclN1bjogKCkgPT4gVGhlcm1vbWV0ZXJTdW4sCiAgVGh1bWJzRG93bjogKCkgPT4gVGh1bWJzRG93biwKICBUaHVtYnNVcDogKCkgPT4gVGh1bWJzVXAsCiAgVGlja2V0OiAoKSA9PiBUaWNrZXQsCiAgVGlja2V0Q2hlY2s6ICgpID0+IFRpY2tldENoZWNrLAogIFRpY2tldE1pbnVzOiAoKSA9PiBUaWNrZXRNaW51cywKICBUaWNrZXRQZXJjZW50OiAoKSA9PiBUaWNrZXRQZXJjZW50LAogIFRpY2tldFBsdXM6ICgpID0+IFRpY2tldFBsdXMsCiAgVGlja2V0U2xhc2g6ICgpID0+IFRpY2tldFNsYXNoLAogIFRpY2tldFg6ICgpID0+IFRpY2tldFgsCiAgVGlja2V0czogKCkgPT4gVGlja2V0cywKICBUaWNrZXRzUGxhbmU6ICgpID0+IFRpY2tldHNQbGFuZSwKICBUaW1lcjogKCkgPT4gVGltZXIyLAogIFRpbWVyT2ZmOiAoKSA9PiBUaW1lck9mZiwKICBUaW1lclJlc2V0OiAoKSA9PiBUaW1lclJlc2V0LAogIFRvZ2dsZUxlZnQ6ICgpID0+IFRvZ2dsZUxlZnQsCiAgVG9nZ2xlUmlnaHQ6ICgpID0+IFRvZ2dsZVJpZ2h0LAogIFRvaWxldDogKCkgPT4gVG9pbGV0LAogIFRvb2xDYXNlOiAoKSA9PiBUb29sQ2FzZSwKICBUb29sYm94OiAoKSA9PiBUb29sYm94LAogIFRvcm5hZG86ICgpID0+IFRvcm5hZG8sCiAgVG9ydXM6ICgpID0+IFRvcnVzLAogIFRvdWNocGFkOiAoKSA9PiBUb3VjaHBhZCwKICBUb3VjaHBhZE9mZjogKCkgPT4gVG91Y2hwYWRPZmYsCiAgVG93ZXJDb250cm9sOiAoKSA9PiBUb3dlckNvbnRyb2wsCiAgVG95QnJpY2s6ICgpID0+IFRveUJyaWNrLAogIFRyYWN0b3I6ICgpID0+IFRyYWN0b3IsCiAgVHJhZmZpY0NvbmU6ICgpID0+IFRyYWZmaWNDb25lLAogIFRyYWluOiAoKSA9PiBUcmFtRnJvbnQsCiAgVHJhaW5Gcm9udDogKCkgPT4gVHJhaW5Gcm9udCwKICBUcmFpbkZyb250VHVubmVsOiAoKSA9PiBUcmFpbkZyb250VHVubmVsLAogIFRyYWluVHJhY2s6ICgpID0+IFRyYWluVHJhY2ssCiAgVHJhbUZyb250OiAoKSA9PiBUcmFtRnJvbnQsCiAgVHJhbnNnZW5kZXI6ICgpID0+IFRyYW5zZ2VuZGVyLAogIFRyYXNoOiAoKSA9PiBUcmFzaCwKICBUcmFzaDI6ICgpID0+IFRyYXNoMiwKICBUcmVlRGVjaWR1b3VzOiAoKSA9PiBUcmVlRGVjaWR1b3VzLAogIFRyZWVQYWxtOiAoKSA9PiBUcmVlUGFsbSwKICBUcmVlUGluZTogKCkgPT4gVHJlZVBpbmUsCiAgVHJlZXM6ICgpID0+IFRyZWVzLAogIFRyZWxsbzogKCkgPT4gVHJlbGxvLAogIFRyZW5kaW5nRG93bjogKCkgPT4gVHJlbmRpbmdEb3duLAogIFRyZW5kaW5nVXA6ICgpID0+IFRyZW5kaW5nVXAsCiAgVHJlbmRpbmdVcERvd246ICgpID0+IFRyZW5kaW5nVXBEb3duLAogIFRyaWFuZ2xlOiAoKSA9PiBUcmlhbmdsZSwKICBUcmlhbmdsZUFsZXJ0OiAoKSA9PiBUcmlhbmdsZUFsZXJ0LAogIFRyaWFuZ2xlRGFzaGVkOiAoKSA9PiBUcmlhbmdsZURhc2hlZCwKICBUcmlhbmdsZVJpZ2h0OiAoKSA9PiBUcmlhbmdsZVJpZ2h0LAogIFRyb3BoeTogKCkgPT4gVHJvcGh5LAogIFRydWNrOiAoKSA9PiBUcnVjaywKICBUcnVja0VsZWN0cmljOiAoKSA9PiBUcnVja0VsZWN0cmljLAogIFR1cmtpc2hMaXJhOiAoKSA9PiBUdXJraXNoTGlyYSwKICBUdXJudGFibGU6ICgpID0+IFR1cm50YWJsZSwKICBUdXJ0bGU6ICgpID0+IFR1cnRsZSwKICBUdjogKCkgPT4gVHYsCiAgVHYyOiAoKSA9PiBUdk1pbmltYWwsCiAgVHZNaW5pbWFsOiAoKSA9PiBUdk1pbmltYWwsCiAgVHZNaW5pbWFsUGxheTogKCkgPT4gVHZNaW5pbWFsUGxheSwKICBUd2l0Y2g6ICgpID0+IFR3aXRjaCwKICBUd2l0dGVyOiAoKSA9PiBUd2l0dGVyLAogIFR5cGU6ICgpID0+IFR5cGUsCiAgVHlwZU91dGxpbmU6ICgpID0+IFR5cGVPdXRsaW5lLAogIFVtYnJlbGxhOiAoKSA9PiBVbWJyZWxsYSwKICBVbWJyZWxsYU9mZjogKCkgPT4gVW1icmVsbGFPZmYsCiAgVW5kZXJsaW5lOiAoKSA9PiBVbmRlcmxpbmUsCiAgVW5kbzogKCkgPT4gVW5kbywKICBVbmRvMjogKCkgPT4gVW5kbzIsCiAgVW5kb0RvdDogKCkgPT4gVW5kb0RvdCwKICBVbmZvbGRIb3Jpem9udGFsOiAoKSA9PiBVbmZvbGRIb3Jpem9udGFsLAogIFVuZm9sZFZlcnRpY2FsOiAoKSA9PiBVbmZvbGRWZXJ0aWNhbCwKICBVbmdyb3VwOiAoKSA9PiBVbmdyb3VwLAogIFVuaXZlcnNpdHk6ICgpID0+IFVuaXZlcnNpdHksCiAgVW5saW5rOiAoKSA9PiBVbmxpbmssCiAgVW5saW5rMjogKCkgPT4gVW5saW5rMiwKICBVbmxvY2s6ICgpID0+IExvY2tPcGVuLAogIFVubG9ja0tleWhvbGU6ICgpID0+IExvY2tLZXlob2xlT3BlbiwKICBVbnBsdWc6ICgpID0+IFVucGx1ZywKICBVcGxvYWQ6ICgpID0+IFVwbG9hZCwKICBVcGxvYWRDbG91ZDogKCkgPT4gQ2xvdWRVcGxvYWQsCiAgVXNiOiAoKSA9PiBVc2IsCiAgVXNlcjogKCkgPT4gVXNlciwKICBVc2VyMjogKCkgPT4gVXNlclJvdW5kLAogIFVzZXJDaGVjazogKCkgPT4gVXNlckNoZWNrLAogIFVzZXJDaGVjazI6ICgpID0+IFVzZXJSb3VuZENoZWNrLAogIFVzZXJDaXJjbGU6ICgpID0+IENpcmNsZVVzZXIsCiAgVXNlckNpcmNsZTI6ICgpID0+IENpcmNsZVVzZXJSb3VuZCwKICBVc2VyQ29nOiAoKSA9PiBVc2VyQ29nLAogIFVzZXJDb2cyOiAoKSA9PiBVc2VyUm91bmRDb2csCiAgVXNlckxvY2s6ICgpID0+IFVzZXJMb2NrLAogIFVzZXJNaW51czogKCkgPT4gVXNlck1pbnVzLAogIFVzZXJNaW51czI6ICgpID0+IFVzZXJSb3VuZE1pbnVzLAogIFVzZXJQZW46ICgpID0+IFVzZXJQZW4sCiAgVXNlclBsdXM6ICgpID0+IFVzZXJQbHVzLAogIFVzZXJQbHVzMjogKCkgPT4gVXNlclJvdW5kUGx1cywKICBVc2VyUm91bmQ6ICgpID0+IFVzZXJSb3VuZCwKICBVc2VyUm91bmRDaGVjazogKCkgPT4gVXNlclJvdW5kQ2hlY2ssCiAgVXNlclJvdW5kQ29nOiAoKSA9PiBVc2VyUm91bmRDb2csCiAgVXNlclJvdW5kTWludXM6ICgpID0+IFVzZXJSb3VuZE1pbnVzLAogIFVzZXJSb3VuZFBlbjogKCkgPT4gVXNlclJvdW5kUGVuLAogIFVzZXJSb3VuZFBsdXM6ICgpID0+IFVzZXJSb3VuZFBsdXMsCiAgVXNlclJvdW5kU2VhcmNoOiAoKSA9PiBVc2VyUm91bmRTZWFyY2gsCiAgVXNlclJvdW5kWDogKCkgPT4gVXNlclJvdW5kWCwKICBVc2VyU2VhcmNoOiAoKSA9PiBVc2VyU2VhcmNoLAogIFVzZXJTcXVhcmU6ICgpID0+IFNxdWFyZVVzZXIsCiAgVXNlclNxdWFyZTI6ICgpID0+IFNxdWFyZVVzZXJSb3VuZCwKICBVc2VyU3RhcjogKCkgPT4gVXNlclN0YXIsCiAgVXNlclg6ICgpID0+IFVzZXJYLAogIFVzZXJYMjogKCkgPT4gVXNlclJvdW5kWCwKICBVc2VyczogKCkgPT4gVXNlcnMsCiAgVXNlcnMyOiAoKSA9PiBVc2Vyc1JvdW5kLAogIFVzZXJzUm91bmQ6ICgpID0+IFVzZXJzUm91bmQsCiAgVXRlbnNpbHM6ICgpID0+IFV0ZW5zaWxzLAogIFV0ZW5zaWxzQ3Jvc3NlZDogKCkgPT4gVXRlbnNpbHNDcm9zc2VkLAogIFV0aWxpdHlQb2xlOiAoKSA9PiBVdGlsaXR5UG9sZSwKICBWYW46ICgpID0+IFZhbiwKICBWYXJpYWJsZTogKCkgPT4gVmFyaWFibGUsCiAgVmF1bHQ6ICgpID0+IFZhdWx0LAogIFZlY3RvclNxdWFyZTogKCkgPT4gVmVjdG9yU3F1YXJlLAogIFZlZ2FuOiAoKSA9PiBWZWdhbiwKICBWZW5ldGlhbk1hc2s6ICgpID0+IFZlbmV0aWFuTWFzaywKICBWZW51czogKCkgPT4gVmVudXMsCiAgVmVudXNBbmRNYXJzOiAoKSA9PiBWZW51c0FuZE1hcnMsCiAgVmVyaWZpZWQ6ICgpID0+IEJhZGdlQ2hlY2ssCiAgVmlicmF0ZTogKCkgPT4gVmlicmF0ZSwKICBWaWJyYXRlT2ZmOiAoKSA9PiBWaWJyYXRlT2ZmLAogIFZpZGVvOiAoKSA9PiBWaWRlbywKICBWaWRlb09mZjogKCkgPT4gVmlkZW9PZmYsCiAgVmlkZW90YXBlOiAoKSA9PiBWaWRlb3RhcGUsCiAgVmlldzogKCkgPT4gVmlldywKICBWb2ljZW1haWw6ICgpID0+IFZvaWNlbWFpbCwKICBWb2xsZXliYWxsOiAoKSA9PiBWb2xsZXliYWxsLAogIFZvbHVtZTogKCkgPT4gVm9sdW1lLAogIFZvbHVtZTE6ICgpID0+IFZvbHVtZTEsCiAgVm9sdW1lMjogKCkgPT4gVm9sdW1lMiwKICBWb2x1bWVPZmY6ICgpID0+IFZvbHVtZU9mZiwKICBWb2x1bWVYOiAoKSA9PiBWb2x1bWVYLAogIFZvdGU6ICgpID0+IFZvdGUsCiAgV2FsbGV0OiAoKSA9PiBXYWxsZXQsCiAgV2FsbGV0MjogKCkgPT4gV2FsbGV0TWluaW1hbCwKICBXYWxsZXRDYXJkczogKCkgPT4gV2FsbGV0Q2FyZHMsCiAgV2FsbGV0TWluaW1hbDogKCkgPT4gV2FsbGV0TWluaW1hbCwKICBXYWxscGFwZXI6ICgpID0+IFdhbGxwYXBlciwKICBXYW5kOiAoKSA9PiBXYW5kLAogIFdhbmQyOiAoKSA9PiBXYW5kU3BhcmtsZXMsCiAgV2FuZFNwYXJrbGVzOiAoKSA9PiBXYW5kU3BhcmtsZXMsCiAgV2FyZWhvdXNlOiAoKSA9PiBXYXJlaG91c2UsCiAgV2FzaGluZ01hY2hpbmU6ICgpID0+IFdhc2hpbmdNYWNoaW5lLAogIFdhdGNoOiAoKSA9PiBXYXRjaCwKICBXYXZlczogKCkgPT4gV2F2ZXMsCiAgV2F2ZXNBcnJvd0Rvd246ICgpID0+IFdhdmVzQXJyb3dEb3duLAogIFdhdmVzQXJyb3dVcDogKCkgPT4gV2F2ZXNBcnJvd1VwLAogIFdhdmVzTGFkZGVyOiAoKSA9PiBXYXZlc0xhZGRlciwKICBXYXlwb2ludHM6ICgpID0+IFdheXBvaW50cywKICBXZWJjYW06ICgpID0+IFdlYmNhbSwKICBXZWJob29rOiAoKSA9PiBXZWJob29rLAogIFdlYmhvb2tPZmY6ICgpID0+IFdlYmhvb2tPZmYsCiAgV2VpZ2h0OiAoKSA9PiBXZWlnaHQsCiAgV2VpZ2h0VGlsZGU6ICgpID0+IFdlaWdodFRpbGRlLAogIFdoZWF0OiAoKSA9PiBXaGVhdCwKICBXaGVhdE9mZjogKCkgPT4gV2hlYXRPZmYsCiAgV2hvbGVXb3JkOiAoKSA9PiBXaG9sZVdvcmQsCiAgV2lmaTogKCkgPT4gV2lmaSwKICBXaWZpQ29nOiAoKSA9PiBXaWZpQ29nLAogIFdpZmlIaWdoOiAoKSA9PiBXaWZpSGlnaCwKICBXaWZpTG93OiAoKSA9PiBXaWZpTG93LAogIFdpZmlPZmY6ICgpID0+IFdpZmlPZmYsCiAgV2lmaVBlbjogKCkgPT4gV2lmaVBlbiwKICBXaWZpU3luYzogKCkgPT4gV2lmaVN5bmMsCiAgV2lmaVplcm86ICgpID0+IFdpZmlaZXJvLAogIFdpbmQ6ICgpID0+IFdpbmQsCiAgV2luZEFycm93RG93bjogKCkgPT4gV2luZEFycm93RG93biwKICBXaW5lOiAoKSA9PiBXaW5lLAogIFdpbmVPZmY6ICgpID0+IFdpbmVPZmYsCiAgV29ya2Zsb3c6ICgpID0+IFdvcmtmbG93LAogIFdvcm06ICgpID0+IFdvcm0sCiAgV3JhcFRleHQ6ICgpID0+IFRleHRXcmFwLAogIFdyZW5jaDogKCkgPT4gV3JlbmNoLAogIFg6ICgpID0+IFgsCiAgWENpcmNsZTogKCkgPT4gQ2lyY2xlWCwKICBYT2N0YWdvbjogKCkgPT4gT2N0YWdvblgsCiAgWFNxdWFyZTogKCkgPT4gU3F1YXJlWCwKICBZb3V0dWJlOiAoKSA9PiBZb3V0dWJlLAogIFphcDogKCkgPT4gWmFwLAogIFphcE9mZjogKCkgPT4gWmFwT2ZmLAogIFpvb21JbjogKCkgPT4gWm9vbUluLAogIFpvb21PdXQ6ICgpID0+IFpvb21PdXQKfSk7CnZhciBpbml0X2ljb25zQW5kQWxpYXNlcyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vaWNvbnNBbmRBbGlhc2VzLmpzIigpIHsKICAgIGluaXRfYV9hcnJvd19kb3duKCk7CiAgICBpbml0X2FfYXJyb3dfdXAoKTsKICAgIGluaXRfYV9sYXJnZV9zbWFsbCgpOwogICAgaW5pdF9hY2Nlc3NpYmlsaXR5KCk7CiAgICBpbml0X2FjdGl2aXR5KCk7CiAgICBpbml0X2Fpcl92ZW50KCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrKCk7CiAgICBpbml0X2FpcnBsYXkoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfbWludXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfb2ZmKCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX3BsdXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2soKTsKICAgIGluaXRfYWxhcm1fc21va2UoKTsKICAgIGluaXRfYWxidW0oKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX3ZlcnRpY2FsKCk7CiAgICBpbml0X2FsaWduX2VuZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2FsaWduX2VuZF92ZXJ0aWNhbCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9lbmQoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2NlbnRlcigpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0KCk7CiAgICBpbml0X2FsaWduX3ZlcnRpY2FsX3NwYWNlX2Fyb3VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FtYnVsYW5jZSgpOwogICAgaW5pdF9hbXBlcnNhbmQoKTsKICAgIGluaXRfYW1wZXJzYW5kcygpOwogICAgaW5pdF9hbXBob3JhKCk7CiAgICBpbml0X2FuY2hvcigpOwogICAgaW5pdF9hbmdyeSgpOwogICAgaW5pdF9hbm5veWVkKCk7CiAgICBpbml0X2FudGVubmEoKTsKICAgIGluaXRfYW52aWwoKTsKICAgIGluaXRfYXBlcnR1cmUoKTsKICAgIGluaXRfYXBwX3dpbmRvd19tYWMoKTsKICAgIGluaXRfYXBwX3dpbmRvdygpOwogICAgaW5pdF9hcHBsZSgpOwogICAgaW5pdF9hcmNoaXZlX3Jlc3RvcmUoKTsKICAgIGluaXRfYXJjaGl2ZV94KCk7CiAgICBpbml0X2FyY2hpdmUoKTsKICAgIGluaXRfYXJtY2hhaXIoKTsKICAgIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfZG93bigpOwogICAgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19sZWZ0KCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXBfZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXAoKTsKICAgIGluaXRfYXJyb3dfZG93bl8wXzEoKTsKICAgIGluaXRfYXJyb3dfZG93bl8xXzAoKTsKICAgIGluaXRfYXJyb3dfZG93bl9hX3ooKTsKICAgIGluaXRfYXJyb3dfZG93bl9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfZG93bl90b19kb3QoKTsKICAgIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSgpOwogICAgaW5pdF9hcnJvd19kb3duX3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl91cCgpOwogICAgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93KCk7CiAgICBpbml0X2Fycm93X2Rvd25fel9hKCk7CiAgICBpbml0X2Fycm93X2Rvd24oKTsKICAgIGluaXRfYXJyb3dfbGVmdF9yaWdodCgpOwogICAgaW5pdF9hcnJvd19sZWZ0X2Zyb21fbGluZSgpOwogICAgaW5pdF9hcnJvd19sZWZ0X3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF90b19saW5lKCk7CiAgICBpbml0X2Fycm93X3JpZ2h0KCk7CiAgICBpbml0X2Fycm93X3VwXzBfMSgpOwogICAgaW5pdF9hcnJvd191cF8xXzAoKTsKICAgIGluaXRfYXJyb3dfdXBfYV96KCk7CiAgICBpbml0X2Fycm93X3VwX2Rvd24oKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QoKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9saW5lKCk7CiAgICBpbml0X2Fycm93X3VwX2xlZnQoKTsKICAgIGluaXRfYXJyb3dfdXBfbmFycm93X3dpZGUoKTsKICAgIGluaXRfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfdXBfdG9fbGluZSgpOwogICAgaW5pdF9hcnJvd191cF93aWRlX25hcnJvdygpOwogICAgaW5pdF9hcnJvd191cF96X2EoKTsKICAgIGluaXRfYXJyb3dfdXAoKTsKICAgIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSgpOwogICAgaW5pdF9hc3RlcmlzaygpOwogICAgaW5pdF9hdF9zaWduKCk7CiAgICBpbml0X2F0b20oKTsKICAgIGluaXRfYXVkaW9fbGluZXMoKTsKICAgIGluaXRfYXdhcmQoKTsKICAgIGluaXRfYXVkaW9fd2F2ZWZvcm0oKTsKICAgIGluaXRfYXhlKCk7CiAgICBpbml0X2F4aXNfM2QoKTsKICAgIGluaXRfYmFieSgpOwogICAgaW5pdF9iYWNrcGFjaygpOwogICAgaW5pdF9iYWRnZV9hbGVydCgpOwogICAgaW5pdF9iYWRnZV9jZW50KCk7CiAgICBpbml0X2JhZGdlX2NoZWNrKCk7CiAgICBpbml0X2JhZGdlX2RvbGxhcl9zaWduKCk7CiAgICBpbml0X2JhZGdlX2V1cm8oKTsKICAgIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlKCk7CiAgICBpbml0X2JhZGdlX2luZm8oKTsKICAgIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2JhZGdlX21pbnVzKCk7CiAgICBpbml0X2JhZGdlX3BlcmNlbnQoKTsKICAgIGluaXRfYmFkZ2VfcGx1cygpOwogICAgaW5pdF9iYWRnZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9iYWRnZV9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X2JhZGdlX3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfYmFkZ2Vfc3dpc3NfZnJhbmMoKTsKICAgIGluaXRfYmFkZ2VfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X2JhZGdlX3goKTsKICAgIGluaXRfYmFkZ2UoKTsKICAgIGluaXRfYmFnZ2FnZV9jbGFpbSgpOwogICAgaW5pdF9iYWxsb29uKCk7CiAgICBpbml0X2JhbigpOwogICAgaW5pdF9iYW5hbmEoKTsKICAgIGluaXRfYmFuZGFnZSgpOwogICAgaW5pdF9iYW5rbm90ZV9hcnJvd19kb3duKCk7CiAgICBpbml0X2Jhbmtub3RlX2Fycm93X3VwKCk7CiAgICBpbml0X2Jhbmtub3RlX3goKTsKICAgIGluaXRfYmFua25vdGUoKTsKICAgIGluaXRfYmFyY29kZSgpOwogICAgaW5pdF9iYXJyZWwoKTsKICAgIGluaXRfYmFzZWxpbmUoKTsKICAgIGluaXRfYmF0aCgpOwogICAgaW5pdF9iYXR0ZXJ5X2NoYXJnaW5nKCk7CiAgICBpbml0X2JhdHRlcnlfZnVsbCgpOwogICAgaW5pdF9iYXR0ZXJ5X2xvdygpOwogICAgaW5pdF9iYXR0ZXJ5X3BsdXMoKTsKICAgIGluaXRfYmF0dGVyeV9tZWRpdW0oKTsKICAgIGluaXRfYmF0dGVyeV93YXJuaW5nKCk7CiAgICBpbml0X2JhdHRlcnkoKTsKICAgIGluaXRfYmVha2VyKCk7CiAgICBpbml0X2JlYW5fb2ZmKCk7CiAgICBpbml0X2JlYW4oKTsKICAgIGluaXRfYmVkX2RvdWJsZSgpOwogICAgaW5pdF9iZWRfc2luZ2xlKCk7CiAgICBpbml0X2JlZCgpOwogICAgaW5pdF9iZWVmKCk7CiAgICBpbml0X2JlZXJfb2ZmKCk7CiAgICBpbml0X2JlZXIoKTsKICAgIGluaXRfYmVsbF9kb3QoKTsKICAgIGluaXRfYmVsbF9lbGVjdHJpYygpOwogICAgaW5pdF9iZWxsX21pbnVzKCk7CiAgICBpbml0X2JlbGxfb2ZmKCk7CiAgICBpbml0X2JlbGxfcGx1cygpOwogICAgaW5pdF9iZWxsX3JpbmcoKTsKICAgIGluaXRfYmVsbCgpOwogICAgaW5pdF9iZXR3ZWVuX2hvcml6b250YWxfZW5kKCk7CiAgICBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX2VuZCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX3N0YXJ0KCk7CiAgICBpbml0X2JpY2Vwc19mbGV4ZWQoKTsKICAgIGluaXRfYmlrZSgpOwogICAgaW5pdF9iaW5hcnkoKTsKICAgIGluaXRfYmlvaGF6YXJkKCk7CiAgICBpbml0X2Jpbm9jdWxhcnMoKTsKICAgIGluaXRfYmlyZGhvdXNlKCk7CiAgICBpbml0X2JpcmQoKTsKICAgIGluaXRfYml0Y29pbigpOwogICAgaW5pdF9ibGVuZCgpOwogICAgaW5pdF9ibGluZHMoKTsKICAgIGluaXRfYmxvY2tzKCk7CiAgICBpbml0X2JsdWV0b290aF9jb25uZWN0ZWQoKTsKICAgIGluaXRfYmx1ZXRvb3RoX29mZigpOwogICAgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nKCk7CiAgICBpbml0X2JsdWV0b290aCgpOwogICAgaW5pdF9ib2xkKCk7CiAgICBpbml0X2JvbHQoKTsKICAgIGluaXRfYm9tYigpOwogICAgaW5pdF9ib25lKCk7CiAgICBpbml0X2Jvb2tfYSgpOwogICAgaW5pdF9ib29rX2FsZXJ0KCk7CiAgICBpbml0X2Jvb2tfYXVkaW8oKTsKICAgIGluaXRfYm9va19jaGVjaygpOwogICAgaW5pdF9ib29rX2NvcHkoKTsKICAgIGluaXRfYm9va19kYXNoZWQoKTsKICAgIGluaXRfYm9va19kb3duKCk7CiAgICBpbml0X2Jvb2tfaGVhZHBob25lcygpOwogICAgaW5pdF9ib29rX2hlYXJ0KCk7CiAgICBpbml0X2Jvb2tfa2V5KCk7CiAgICBpbml0X2Jvb2tfaW1hZ2UoKTsKICAgIGluaXRfYm9va19sb2NrKCk7CiAgICBpbml0X2Jvb2tfbWFya2VkKCk7CiAgICBpbml0X2Jvb2tfbWludXMoKTsKICAgIGluaXRfYm9va19vcGVuX2NoZWNrKCk7CiAgICBpbml0X2Jvb2tfb3Blbl90ZXh0KCk7CiAgICBpbml0X2Jvb2tfb3BlbigpOwogICAgaW5pdF9ib29rX3BsdXMoKTsKICAgIGluaXRfYm9va19zZWFyY2goKTsKICAgIGluaXRfYm9va190ZXh0KCk7CiAgICBpbml0X2Jvb2tfdXAoKTsKICAgIGluaXRfYm9va190eXBlKCk7CiAgICBpbml0X2Jvb2tfdXBfMigpOwogICAgaW5pdF9ib29rX3VzZXIoKTsKICAgIGluaXRfYm9va194KCk7CiAgICBpbml0X2Jvb2soKTsKICAgIGluaXRfYm9va21hcmtfY2hlY2soKTsKICAgIGluaXRfYm9va21hcmtfbWludXMoKTsKICAgIGluaXRfYm9va21hcmtfcGx1cygpOwogICAgaW5pdF9ib29rbWFya194KCk7CiAgICBpbml0X2Jvb2ttYXJrKCk7CiAgICBpbml0X2Jvb21fYm94KCk7CiAgICBpbml0X2JvdF9tZXNzYWdlX3NxdWFyZSgpOwogICAgaW5pdF9ib3Rfb2ZmKCk7CiAgICBpbml0X2JvdCgpOwogICAgaW5pdF9ib3R0bGVfd2luZSgpOwogICAgaW5pdF9ib3dfYXJyb3coKTsKICAgIGluaXRfYm94KCk7CiAgICBpbml0X2JveGVzKCk7CiAgICBpbml0X2JyYWNlcygpOwogICAgaW5pdF9icmFja2V0cygpOwogICAgaW5pdF9icmFpbl9jaXJjdWl0KCk7CiAgICBpbml0X2JyYWluX2NvZygpOwogICAgaW5pdF9icmFpbigpOwogICAgaW5pdF9icmlja193YWxsX2ZpcmUoKTsKICAgIGluaXRfYnJpY2tfd2FsbF9zaGllbGQoKTsKICAgIGluaXRfYnJpY2tfd2FsbCgpOwogICAgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MoKTsKICAgIGluaXRfYnJpZWZjYXNlX2NvbnZleW9yX2JlbHQoKTsKICAgIGluaXRfYnJpZWZjYXNlX21lZGljYWwoKTsKICAgIGluaXRfYnJpZWZjYXNlKCk7CiAgICBpbml0X2JyaW5nX3RvX2Zyb250KCk7CiAgICBpbml0X2JydXNoX2NsZWFuaW5nKCk7CiAgICBpbml0X2JydXNoKCk7CiAgICBpbml0X2J1YmJsZXMoKTsKICAgIGluaXRfYnVnX29mZigpOwogICAgaW5pdF9idWdfcGxheSgpOwogICAgaW5pdF9idWcoKTsKICAgIGluaXRfYnVpbGRpbmdfMigpOwogICAgaW5pdF9idWlsZGluZygpOwogICAgaW5pdF9idXNfZnJvbnQoKTsKICAgIGluaXRfYnVzKCk7CiAgICBpbml0X2NhYmxlX2NhcigpOwogICAgaW5pdF9jYWJsZSgpOwogICAgaW5pdF9jYWtlX3NsaWNlKCk7CiAgICBpbml0X2Nha2UoKTsKICAgIGluaXRfY2FsY3VsYXRvcigpOwogICAgaW5pdF9jYWxlbmRhcl8xKCk7CiAgICBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2FsZW5kYXJfYXJyb3dfdXAoKTsKICAgIGluaXRfY2FsZW5kYXJfY2hlY2tfMigpOwogICAgaW5pdF9jYWxlbmRhcl9jaGVjaygpOwogICAgaW5pdF9jYWxlbmRhcl9jb2coKTsKICAgIGluaXRfY2FsZW5kYXJfY2xvY2soKTsKICAgIGluaXRfY2FsZW5kYXJfZGF5cygpOwogICAgaW5pdF9jYWxlbmRhcl9mb2xkKCk7CiAgICBpbml0X2NhbGVuZGFyX2hlYXJ0KCk7CiAgICBpbml0X2NhbGVuZGFyX21pbnVzXzIoKTsKICAgIGluaXRfY2FsZW5kYXJfbWludXMoKTsKICAgIGluaXRfY2FsZW5kYXJfb2ZmKCk7CiAgICBpbml0X2NhbGVuZGFyX3BsdXNfMigpOwogICAgaW5pdF9jYWxlbmRhcl9wbHVzKCk7CiAgICBpbml0X2NhbGVuZGFyX3JhbmdlKCk7CiAgICBpbml0X2NhbGVuZGFyX3NlYXJjaCgpOwogICAgaW5pdF9jYWxlbmRhcl9zeW5jKCk7CiAgICBpbml0X2NhbGVuZGFyX3hfMigpOwogICAgaW5pdF9jYWxlbmRhcl94KCk7CiAgICBpbml0X2NhbGVuZGFyKCk7CiAgICBpbml0X2NhbGVuZGFycygpOwogICAgaW5pdF9jYW1lcmFfb2ZmKCk7CiAgICBpbml0X2NhbWVyYSgpOwogICAgaW5pdF9jYW5keV9jYW5lKCk7CiAgICBpbml0X2NhbmR5X29mZigpOwogICAgaW5pdF9jYW5keSgpOwogICAgaW5pdF9jYW5uYWJpc19vZmYoKTsKICAgIGluaXRfY2FubmFiaXMoKTsKICAgIGluaXRfY2FwdGlvbnNfb2ZmKCk7CiAgICBpbml0X2NhcHRpb25zKCk7CiAgICBpbml0X2Nhcl9mcm9udCgpOwogICAgaW5pdF9jYXJfdGF4aV9mcm9udCgpOwogICAgaW5pdF9jYXIoKTsKICAgIGluaXRfY2FyYXZhbigpOwogICAgaW5pdF9jYXJkX3NpbSgpOwogICAgaW5pdF9jYXJyb3QoKTsKICAgIGluaXRfY2FzZV9sb3dlcigpOwogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZSgpOwogICAgaW5pdF9jYXNlX3VwcGVyKCk7CiAgICBpbml0X2Nhc3NldHRlX3RhcGUoKTsKICAgIGluaXRfY2FzdCgpOwogICAgaW5pdF9jYXN0bGUoKTsKICAgIGluaXRfY2F0KCk7CiAgICBpbml0X2NjdHYoKTsKICAgIGluaXRfY2hhcnRfYXJlYSgpOwogICAgaW5pdF9jaGFydF9iYXJfYmlnKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2JhcigpOwogICAgaW5pdF9jaGFydF9jYW5kbGVzdGljaygpOwogICAgaW5pdF9jaGFydF9jb2x1bW5fYmlnKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbigpOwogICAgaW5pdF9jaGFydF9nYW50dCgpOwogICAgaW5pdF9jaGFydF9saW5lKCk7CiAgICBpbml0X2NoYXJ0X25ldHdvcmsoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19jb2x1bW5fZGVjcmVhc2luZygpOwogICAgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29sdW1uKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19nYW50dCgpOwogICAgaW5pdF9jaGFydF9waWUoKTsKICAgIGluaXRfY2hhcnRfc2NhdHRlcigpOwogICAgaW5pdF9jaGFydF9zcGxpbmUoKTsKICAgIGluaXRfY2hlY2tfY2hlY2soKTsKICAgIGluaXRfY2hlY2tfbGluZSgpOwogICAgaW5pdF9jaGVjaygpOwogICAgaW5pdF9jaGVmX2hhdCgpOwogICAgaW5pdF9jaGVycnkoKTsKICAgIGluaXRfY2hlc3NfYmlzaG9wKCk7CiAgICBpbml0X2NoZXNzX2tpbmcoKTsKICAgIGluaXRfY2hlc3Nfa25pZ2h0KCk7CiAgICBpbml0X2NoZXNzX3Bhd24oKTsKICAgIGluaXRfY2hlc3NfcXVlZW4oKTsKICAgIGluaXRfY2hldnJvbl9kb3duKCk7CiAgICBpbml0X2NoZXZyb25fZmlyc3QoKTsKICAgIGluaXRfY2hlc3Nfcm9vaygpOwogICAgaW5pdF9jaGV2cm9uX2xhc3QoKTsKICAgIGluaXRfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NoZXZyb25fcmlnaHQoKTsKICAgIGluaXRfY2hldnJvbl91cCgpOwogICAgaW5pdF9jaGV2cm9uc19kb3duX3VwKCk7CiAgICBpbml0X2NoZXZyb25zX2Rvd24oKTsKICAgIGluaXRfY2hldnJvbnNfbGVmdF9yaWdodF9lbGxpcHNpcygpOwogICAgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0KCk7CiAgICBpbml0X2NoZXZyb25zX2xlZnQoKTsKICAgIGluaXRfY2hldnJvbnNfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9jaGV2cm9uc19yaWdodCgpOwogICAgaW5pdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2NoZXZyb25zX3VwKCk7CiAgICBpbml0X2NodXJjaCgpOwogICAgaW5pdF9jaWdhcmV0dGVfb2ZmKCk7CiAgICBpbml0X2Nocm9taXVtKCk7CiAgICBpbml0X2NpZ2FyZXR0ZSgpOwogICAgaW5pdF9jaXJjbGVfYWxlcnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2NoZWNrKCk7CiAgICBpbml0X2NpcmNsZV9jaGVja19iaWcoKTsKICAgIGluaXRfY2lyY2xlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9jaXJjbGVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X2NpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RpdmlkZSgpOwogICAgaW5pdF9jaXJjbGVfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RvdCgpOwogICAgaW5pdF9jaXJjbGVfZWxsaXBzaXMoKTsKICAgIGluaXRfY2lyY2xlX2VxdWFsKCk7CiAgICBpbml0X2NpcmNsZV9mYWRpbmdfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2ZhZGluZ19wbHVzKCk7CiAgICBpbml0X2NpcmNsZV9nYXVnZSgpOwogICAgaW5pdF9jaXJjbGVfbWludXMoKTsKICAgIGluaXRfY2lyY2xlX29mZigpOwogICAgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYoKTsKICAgIGluaXRfY2lyY2xlX3BhcmtpbmcoKTsKICAgIGluaXRfY2lyY2xlX3BhdXNlKCk7CiAgICBpbml0X2NpcmNsZV9wZXJjZW50KCk7CiAgICBpbml0X2NpcmNsZV9waWxlKCk7CiAgICBpbml0X2NpcmNsZV9wbGF5KCk7CiAgICBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9jaXJjbGVfcGx1cygpOwogICAgaW5pdF9jaXJjbGVfcG93ZXIoKTsKICAgIGluaXRfY2lyY2xlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoXzIoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoKCk7CiAgICBpbml0X2NpcmNsZV9zbWFsbCgpOwogICAgaW5pdF9jaXJjbGVfc3RhcigpOwogICAgaW5pdF9jaXJjbGVfc3RvcCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcl9yb3VuZCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcigpOwogICAgaW5pdF9jaXJjbGVfeCgpOwogICAgaW5pdF9jaXJjbGUoKTsKICAgIGluaXRfY2lyY3VpdF9ib2FyZCgpOwogICAgaW5pdF9jaXRydXMoKTsKICAgIGluaXRfY2xhcHBlcmJvYXJkKCk7CiAgICBpbml0X2NsaXBib2FyZF9jaGVjaygpOwogICAgaW5pdF9jbGlwYm9hcmRfY2xvY2soKTsKICAgIGluaXRfY2xpcGJvYXJkX2NvcHkoKTsKICAgIGluaXRfY2xpcGJvYXJkX2xpc3QoKTsKICAgIGluaXRfY2xpcGJvYXJkX21pbnVzKCk7CiAgICBpbml0X2NsaXBib2FyZF9wYXN0ZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfcGVuX2xpbmUoKTsKICAgIGluaXRfY2xpcGJvYXJkX3BlbigpOwogICAgaW5pdF9jbGlwYm9hcmRfcGx1cygpOwogICAgaW5pdF9jbGlwYm9hcmRfdHlwZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfeCgpOwogICAgaW5pdF9jbGlwYm9hcmQoKTsKICAgIGluaXRfY2xvY2tfMSgpOwogICAgaW5pdF9jbG9ja18xMCgpOwogICAgaW5pdF9jbG9ja18xMSgpOwogICAgaW5pdF9jbG9ja18xMigpOwogICAgaW5pdF9jbG9ja18yKCk7CiAgICBpbml0X2Nsb2NrXzMoKTsKICAgIGluaXRfY2xvY2tfNCgpOwogICAgaW5pdF9jbG9ja181KCk7CiAgICBpbml0X2Nsb2NrXzYoKTsKICAgIGluaXRfY2xvY2tfNygpOwogICAgaW5pdF9jbG9ja184KCk7CiAgICBpbml0X2Nsb2NrXzkoKTsKICAgIGluaXRfY2xvY2tfYWxlcnQoKTsKICAgIGluaXRfY2xvY2tfYXJyb3dfZG93bigpOwogICAgaW5pdF9jbG9ja19hcnJvd191cCgpOwogICAgaW5pdF9jbG9ja19jaGVjaygpOwogICAgaW5pdF9jbG9ja19mYWRpbmcoKTsKICAgIGluaXRfY2xvY2tfcGx1cygpOwogICAgaW5pdF9jbG9jaygpOwogICAgaW5pdF9jbG9zZWRfY2FwdGlvbigpOwogICAgaW5pdF9jbG91ZF9hbGVydCgpOwogICAgaW5pdF9jbG91ZF9iYWNrdXAoKTsKICAgIGluaXRfY2xvdWRfY2hlY2soKTsKICAgIGluaXRfY2xvdWRfY29nKCk7CiAgICBpbml0X2Nsb3VkX2Rvd25sb2FkKCk7CiAgICBpbml0X2Nsb3VkX2RyaXp6bGUoKTsKICAgIGluaXRfY2xvdWRfZm9nKCk7CiAgICBpbml0X2Nsb3VkX2hhaWwoKTsKICAgIGluaXRfY2xvdWRfbGlnaHRuaW5nKCk7CiAgICBpbml0X2Nsb3VkX21vb25fcmFpbigpOwogICAgaW5pdF9jbG91ZF9tb29uKCk7CiAgICBpbml0X2Nsb3VkX3JhaW5fd2luZCgpOwogICAgaW5pdF9jbG91ZF9vZmYoKTsKICAgIGluaXRfY2xvdWRfcmFpbigpOwogICAgaW5pdF9jbG91ZF9zbm93KCk7CiAgICBpbml0X2Nsb3VkX3N1bl9yYWluKCk7CiAgICBpbml0X2Nsb3VkX3N1bigpOwogICAgaW5pdF9jbG91ZF9zeW5jKCk7CiAgICBpbml0X2Nsb3VkX3VwbG9hZCgpOwogICAgaW5pdF9jbG91ZCgpOwogICAgaW5pdF9jbG91ZHkoKTsKICAgIGluaXRfY2xvdmVyKCk7CiAgICBpbml0X2NsdWIoKTsKICAgIGluaXRfY29kZV94bWwoKTsKICAgIGluaXRfY29kZTQoKTsKICAgIGluaXRfY29kZXBlbigpOwogICAgaW5pdF9jb2Rlc2FuZGJveCgpOwogICAgaW5pdF9jb2ZmZWUoKTsKICAgIGluaXRfY29pbnMoKTsKICAgIGluaXRfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMigpOwogICAgaW5pdF9jb2x1bW5zXzNfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMygpOwogICAgaW5pdF9jb2x1bW5zXzQoKTsKICAgIGluaXRfY29tYmluZSgpOwogICAgaW5pdF9jb21tYW5kKCk7CiAgICBpbml0X2NvbXBhc3MoKTsKICAgIGluaXRfY29tcG9uZW50KCk7CiAgICBpbml0X2NvbXB1dGVyKCk7CiAgICBpbml0X2NvbmNpZXJnZV9iZWxsKCk7CiAgICBpbml0X2NvbmUoKTsKICAgIGluaXRfY29uc3RydWN0aW9uKCk7CiAgICBpbml0X2NvbnRhY3Rfcm91bmQoKTsKICAgIGluaXRfY29udGFjdDIoKTsKICAgIGluaXRfY29udGFpbmVyMygpOwogICAgaW5pdF9jb250cmFzdCgpOwogICAgaW5pdF9jb29raWUoKTsKICAgIGluaXRfY29va2luZ19wb3QoKTsKICAgIGluaXRfY29weV9jaGVjaygpOwogICAgaW5pdF9jb3B5X21pbnVzKCk7CiAgICBpbml0X2NvcHlfcGx1cygpOwogICAgaW5pdF9jb3B5X3NsYXNoKCk7CiAgICBpbml0X2NvcHkoKTsKICAgIGluaXRfY29weV94KCk7CiAgICBpbml0X2NvcHlsZWZ0KCk7CiAgICBpbml0X2NvcHlyaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9yaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl9sZWZ0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX2xlZnRfdXAoKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X3VwKCk7CiAgICBpbml0X2Nvcm5lcl91cF9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl91cF9yaWdodCgpOwogICAgaW5pdF9jcHUoKTsKICAgIGluaXRfY3JlYXRpdmVfY29tbW9ucygpOwogICAgaW5pdF9jcmVkaXRfY2FyZCgpOwogICAgaW5pdF9jcm9pc3NhbnQoKTsKICAgIGluaXRfY3JvcCgpOwogICAgaW5pdF9jcm9zcygpOwogICAgaW5pdF9jcm9zc2hhaXIoKTsKICAgIGluaXRfY3Jvd24oKTsKICAgIGluaXRfY3Vib2lkKCk7CiAgICBpbml0X2N1cF9zb2RhKCk7CiAgICBpbml0X2N1cnJlbmN5MigpOwogICAgaW5pdF9jeWxpbmRlcigpOwogICAgaW5pdF9kYW0oKTsKICAgIGluaXRfZGF0YWJhc2VfYmFja3VwKCk7CiAgICBpbml0X2RhdGFiYXNlX3phcCgpOwogICAgaW5pdF9kYXRhYmFzZTIoKTsKICAgIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCgpOwogICAgaW5pdF9kZWxldGUyKCk7CiAgICBpbml0X2Rlc3NlcnQoKTsKICAgIGluaXRfZGlhbWV0ZXIoKTsKICAgIGluaXRfZGlhbW9uZF9taW51cygpOwogICAgaW5pdF9kaWFtb25kX3BlcmNlbnQoKTsKICAgIGluaXRfZGlhbW9uZF9wbHVzKCk7CiAgICBpbml0X2RpY2VfMSgpOwogICAgaW5pdF9kaWFtb25kKCk7CiAgICBpbml0X2RpY2VfMigpOwogICAgaW5pdF9kaWNlXzMoKTsKICAgIGluaXRfZGljZV81KCk7CiAgICBpbml0X2RpY2VfNigpOwogICAgaW5pdF9kaWNlXzQoKTsKICAgIGluaXRfZGljZXMoKTsKICAgIGluaXRfZGlmZigpOwogICAgaW5pdF9kaXNjXzIoKTsKICAgIGluaXRfZGlzY18zKCk7CiAgICBpbml0X2Rpc2NfYWxidW0oKTsKICAgIGluaXRfZGlzYygpOwogICAgaW5pdF9kaXZpZGUoKTsKICAgIGluaXRfZG5hX29mZigpOwogICAgaW5pdF9kb2NrKCk7CiAgICBpbml0X2RuYSgpOwogICAgaW5pdF9kb2coKTsKICAgIGluaXRfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfZG9udXQoKTsKICAgIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkKCk7CiAgICBpbml0X2Rvb3JfY2xvc2VkKCk7CiAgICBpbml0X2RvdCgpOwogICAgaW5pdF9kb29yX29wZW4oKTsKICAgIGluaXRfZG93bmxvYWQoKTsKICAgIGluaXRfZHJhZnRpbmdfY29tcGFzcygpOwogICAgaW5pdF9kcmFtYSgpOwogICAgaW5pdF9kcmliYmJsZSgpOwogICAgaW5pdF9kcmlsbCgpOwogICAgaW5pdF9kcm9uZSgpOwogICAgaW5pdF9kcm9wbGV0X29mZigpOwogICAgaW5pdF9kcm9wbGV0KCk7CiAgICBpbml0X2Ryb3BsZXRzKCk7CiAgICBpbml0X2RydW0oKTsKICAgIGluaXRfZHJ1bXN0aWNrKCk7CiAgICBpbml0X2R1bWJiZWxsKCk7CiAgICBpbml0X2Vhcl9vZmYoKTsKICAgIGluaXRfZWFyKCk7CiAgICBpbml0X2VhcnRoX2xvY2soKTsKICAgIGluaXRfZWFydGgoKTsKICAgIGluaXRfZWNsaXBzZSgpOwogICAgaW5pdF9lZ2dfZnJpZWQoKTsKICAgIGluaXRfZWdnX29mZigpOwogICAgaW5pdF9lZ2coKTsKICAgIGluaXRfZWxsaXBzaXNfdmVydGljYWwoKTsKICAgIGluaXRfZWxsaXBzaXMoKTsKICAgIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSgpOwogICAgaW5pdF9lcXVhbF9ub3QoKTsKICAgIGluaXRfZXJhc2VyKCk7CiAgICBpbml0X2VxdWFsKCk7CiAgICBpbml0X2V0aGVybmV0X3BvcnQoKTsKICAgIGluaXRfZXVybygpOwogICAgaW5pdF9ldl9jaGFyZ2VyKCk7CiAgICBpbml0X2V4dGVybmFsX2xpbmsoKTsKICAgIGluaXRfZXhwYW5kMigpOwogICAgaW5pdF9leWVfY2xvc2VkKCk7CiAgICBpbml0X2V5ZV9vZmYoKTsKICAgIGluaXRfZXllKCk7CiAgICBpbml0X2ZhY3RvcnkoKTsKICAgIGluaXRfZmFjZWJvb2soKTsKICAgIGluaXRfZmFuKCk7CiAgICBpbml0X2Zhc3RfZm9yd2FyZCgpOwogICAgaW5pdF9mZWF0aGVyKCk7CiAgICBpbml0X2ZlbmNlKCk7CiAgICBpbml0X2ZlcnJpc193aGVlbCgpOwogICAgaW5pdF9maWdtYSgpOwogICAgaW5pdF9maWxlX2FyY2hpdmUoKTsKICAgIGluaXRfZmlsZV9heGlzXzNkKCk7CiAgICBpbml0X2ZpbGVfYmFkZ2UoKTsKICAgIGluaXRfZmlsZV9icmFjZXNfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfYm94KCk7CiAgICBpbml0X2ZpbGVfYnJhY2VzKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfY29sdW1uX2luY3JlYXNpbmcoKTsKICAgIGluaXRfZmlsZV9jaGFydF9jb2x1bW4oKTsKICAgIGluaXRfZmlsZV9jaGFydF9saW5lKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfcGllKCk7CiAgICBpbml0X2ZpbGVfY2hlY2tfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY2hlY2soKTsKICAgIGluaXRfZmlsZV9jbG9jaygpOwogICAgaW5pdF9maWxlX2NvZGVfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY29kZSgpOwogICAgaW5pdF9maWxlX2NvZygpOwogICAgaW5pdF9maWxlX2RpZmYoKTsKICAgIGluaXRfZmlsZV9kaWdpdCgpOwogICAgaW5pdF9maWxlX2Rvd24oKTsKICAgIGluaXRfZmlsZV9leGNsYW1hdGlvbl9wb2ludCgpOwogICAgaW5pdF9maWxlX2hlYWRwaG9uZSgpOwogICAgaW5pdF9maWxlX2hlYXJ0KCk7CiAgICBpbml0X2ZpbGVfaW1hZ2UoKTsKICAgIGluaXRfZmlsZV9pbnB1dCgpOwogICAgaW5pdF9maWxlX2tleSgpOwogICAgaW5pdF9maWxlX2xvY2soKTsKICAgIGluaXRfZmlsZV9taW51c19jb3JuZXIoKTsKICAgIGluaXRfZmlsZV9tdXNpYygpOwogICAgaW5pdF9maWxlX21pbnVzKCk7CiAgICBpbml0X2ZpbGVfb3V0cHV0KCk7CiAgICBpbml0X2ZpbGVfcGVuX2xpbmUoKTsKICAgIGluaXRfZmlsZV9wZW4oKTsKICAgIGluaXRfZmlsZV9wbGF5KCk7CiAgICBpbml0X2ZpbGVfcGx1cygpOwogICAgaW5pdF9maWxlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfZmlsZV9wbHVzX2Nvcm5lcigpOwogICAgaW5pdF9maWxlX3NjYW4oKTsKICAgIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfc2VhcmNoKCk7CiAgICBpbml0X2ZpbGVfc2lnbmFsKCk7CiAgICBpbml0X2ZpbGVfc3ByZWFkc2hlZXQoKTsKICAgIGluaXRfZmlsZV9zbGlkZXJzKCk7CiAgICBpbml0X2ZpbGVfc3RhY2soKTsKICAgIGluaXRfZmlsZV9zeW1saW5rKCk7CiAgICBpbml0X2ZpbGVfdGVybWluYWwoKTsKICAgIGluaXRfZmlsZV90ZXh0KCk7CiAgICBpbml0X2ZpbGVfdHlwZV9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV90eXBlKCk7CiAgICBpbml0X2ZpbGVfdXAoKTsKICAgIGluaXRfZmlsZV91c2VyKCk7CiAgICBpbml0X2ZpbGVfdm9sdW1lKCk7CiAgICBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhKCk7CiAgICBpbml0X2ZpbGVfeF9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV94KCk7CiAgICBpbml0X2ZpbGUoKTsKICAgIGluaXRfZmlsZXMoKTsKICAgIGluaXRfZmlsbSgpOwogICAgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuKCk7CiAgICBpbml0X2ZpcmVfZXh0aW5ndWlzaGVyKCk7CiAgICBpbml0X2Zpc2hfb2ZmKCk7CiAgICBpbml0X2Zpc2hfc3ltYm9sKCk7CiAgICBpbml0X2Zpc2goKTsKICAgIGluaXRfZmlzaGluZ19ob29rKCk7CiAgICBpbml0X2ZsYWdfb2ZmKCk7CiAgICBpbml0X2ZsYWdfdHJpYW5nbGVfbGVmdCgpOwogICAgaW5pdF9mbGFnX3RyaWFuZ2xlX3JpZ2h0KCk7CiAgICBpbml0X2ZsYW1lX2tpbmRsaW5nKCk7CiAgICBpbml0X2ZsYWcoKTsKICAgIGluaXRfZmxhbWUoKTsKICAgIGluaXRfZmxhc2hsaWdodF9vZmYoKTsKICAgIGluaXRfZmxhc2hsaWdodCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsX29mZigpOwogICAgaW5pdF9mbGFza19yb3VuZCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsKCk7CiAgICBpbml0X2ZsaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9mbGlwX2hvcml6b250YWxfMigpOwogICAgaW5pdF9mbGlwX3ZlcnRpY2FsXzIoKTsKICAgIGluaXRfZmxpcF92ZXJ0aWNhbCgpOwogICAgaW5pdF9mbG93ZXJfMigpOwogICAgaW5pdF9mbG93ZXIoKTsKICAgIGluaXRfZm9jdXMoKTsKICAgIGluaXRfZm9sZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2ZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfZm9sZGVyX2FyY2hpdmUoKTsKICAgIGluaXRfZm9sZGVyX2NoZWNrKCk7CiAgICBpbml0X2ZvbGRlcl9jbG9jaygpOwogICAgaW5pdF9mb2xkZXJfY2xvc2VkKCk7CiAgICBpbml0X2ZvbGRlcl9jb2RlKCk7CiAgICBpbml0X2ZvbGRlcl9jb2coKTsKICAgIGluaXRfZm9sZGVyX2RvdCgpOwogICAgaW5pdF9mb2xkZXJfZG93bigpOwogICAgaW5pdF9mb2xkZXJfZ2l0XzIoKTsKICAgIGluaXRfZm9sZGVyX2dpdCgpOwogICAgaW5pdF9mb2xkZXJfaGVhcnQoKTsKICAgIGluaXRfZm9sZGVyX2lucHV0KCk7CiAgICBpbml0X2ZvbGRlcl9rYW5iYW4oKTsKICAgIGluaXRfZm9sZGVyX2tleSgpOwogICAgaW5pdF9mb2xkZXJfbG9jaygpOwogICAgaW5pdF9mb2xkZXJfbWludXMoKTsKICAgIGluaXRfZm9sZGVyX29wZW5fZG90KCk7CiAgICBpbml0X2ZvbGRlcl9vcGVuKCk7CiAgICBpbml0X2ZvbGRlcl9vdXRwdXQoKTsKICAgIGluaXRfZm9sZGVyX3BlbigpOwogICAgaW5pdF9mb2xkZXJfcGx1cygpOwogICAgaW5pdF9mb2xkZXJfcm9vdCgpOwogICAgaW5pdF9mb2xkZXJfc2VhcmNoXzIoKTsKICAgIGluaXRfZm9sZGVyX3NlYXJjaCgpOwogICAgaW5pdF9mb2xkZXJfc3ltbGluaygpOwogICAgaW5pdF9mb2xkZXJfc3luYygpOwogICAgaW5pdF9mb2xkZXJfdHJlZSgpOwogICAgaW5pdF9mb2xkZXJfdXAoKTsKICAgIGluaXRfZm9sZGVyX3goKTsKICAgIGluaXRfZm9sZGVyKCk7CiAgICBpbml0X2ZvbGRlcnMoKTsKICAgIGluaXRfZm9vdHByaW50cygpOwogICAgaW5pdF9mb3JrbGlmdCgpOwogICAgaW5pdF9mb3JtKCk7CiAgICBpbml0X2ZvcndhcmQoKTsKICAgIGluaXRfZnJhbWUoKTsKICAgIGluaXRfZnJhbWVyKCk7CiAgICBpbml0X2Zyb3duKCk7CiAgICBpbml0X2Z1ZWwoKTsKICAgIGluaXRfZnVsbHNjcmVlbigpOwogICAgaW5pdF9mdW5uZWxfcGx1cygpOwogICAgaW5pdF9mdW5uZWxfeCgpOwogICAgaW5pdF9mdW5uZWwoKTsKICAgIGluaXRfZ2FsbGVyeV9ob3Jpem9udGFsX2VuZCgpOwogICAgaW5pdF9nYWxsZXJ5X2hvcml6b250YWwoKTsKICAgIGluaXRfZ2FsbGVyeV90aHVtYm5haWxzKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWxfZW5kKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWwoKTsKICAgIGluaXRfZ2FtZXBhZF8yKCk7CiAgICBpbml0X2dhbWVwYWRfZGlyZWN0aW9uYWwoKTsKICAgIGluaXRfZ2FtZXBhZCgpOwogICAgaW5pdF9nYXVnZSgpOwogICAgaW5pdF9nYXZlbCgpOwogICAgaW5pdF9nZW0oKTsKICAgIGluaXRfZ2VvcmdpYW5fbGFyaSgpOwogICAgaW5pdF9naG9zdCgpOwogICAgaW5pdF9naWZ0KCk7CiAgICBpbml0X2dpdF9icmFuY2hfbWludXMoKTsKICAgIGluaXRfZ2l0X2JyYW5jaCgpOwogICAgaW5pdF9naXRfYnJhbmNoX3BsdXMoKTsKICAgIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2dpdF9jb21taXRfdmVydGljYWwoKTsKICAgIGluaXRfZ2l0X2NvbXBhcmVfYXJyb3dzKCk7CiAgICBpbml0X2dpdF9jb21wYXJlKCk7CiAgICBpbml0X2dpdF9mb3JrKCk7CiAgICBpbml0X2dpdF9ncmFwaCgpOwogICAgaW5pdF9naXRfbWVyZ2UoKTsKICAgIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Nsb3NlZCgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2RyYWZ0KCk7CiAgICBpbml0X2dpdF9wdWxsX3JlcXVlc3QoKTsKICAgIGluaXRfZ2l0aHViKCk7CiAgICBpbml0X2dpdGxhYigpOwogICAgaW5pdF9nbGFzc193YXRlcigpOwogICAgaW5pdF9nbGFzc2VzKCk7CiAgICBpbml0X2dsb2JlX2xvY2soKTsKICAgIGluaXRfZ2xvYmUoKTsKICAgIGluaXRfZ29hbCgpOwogICAgaW5pdF9ncHUoKTsKICAgIGluaXRfZ3JhZHVhdGlvbl9jYXAoKTsKICAgIGluaXRfZ3JhcGUoKTsKICAgIGluaXRfZ3JpZF8yeDJfY2hlY2soKTsKICAgIGluaXRfZ3JpZF8yeDJfcGx1cygpOwogICAgaW5pdF9ncmlkXzJ4Ml94KCk7CiAgICBpbml0X2dyaWRfMngyKCk7CiAgICBpbml0X2dyaWRfM3gyKCk7CiAgICBpbml0X2dyaWRfM3gzKCk7CiAgICBpbml0X2dyaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9ncmlwX3ZlcnRpY2FsKCk7CiAgICBpbml0X2dyaXAoKTsKICAgIGluaXRfZ3JvdXAoKTsKICAgIGluaXRfaGFtKCk7CiAgICBpbml0X2d1aXRhcigpOwogICAgaW5pdF9oYW1idXJnZXIoKTsKICAgIGluaXRfaGFtbWVyKCk7CiAgICBpbml0X2hhbmRfY29pbnMoKTsKICAgIGluaXRfaGFuZF9maXN0KCk7CiAgICBpbml0X2hhbmRfZ3JhYigpOwogICAgaW5pdF9oYW5kX2hlYXJ0KCk7CiAgICBpbml0X2hhbmRfaGVscGluZygpOwogICAgaW5pdF9oYW5kX21ldGFsKCk7CiAgICBpbml0X2hhbmRfcGxhdHRlcigpOwogICAgaW5pdF9oYW5kKCk7CiAgICBpbml0X2hhbmRiYWcoKTsKICAgIGluaXRfaGFuZHNoYWtlKCk7CiAgICBpbml0X2hhcmRfZHJpdmVfZG93bmxvYWQoKTsKICAgIGluaXRfaGFyZF9kcml2ZV91cGxvYWQoKTsKICAgIGluaXRfaGFyZF9oYXQoKTsKICAgIGluaXRfaGFzaCgpOwogICAgaW5pdF9oYXJkX2RyaXZlKCk7CiAgICBpbml0X2hhdF9nbGFzc2VzKCk7CiAgICBpbml0X2hhemUoKTsKICAgIGluaXRfaGQoKTsKICAgIGluaXRfaGRtaV9wb3J0KCk7CiAgICBpbml0X2hlYWRpbmdfMSgpOwogICAgaW5pdF9oZWFkaW5nXzMoKTsKICAgIGluaXRfaGVhZGluZ18yKCk7CiAgICBpbml0X2hlYWRpbmdfNCgpOwogICAgaW5pdF9oZWFkaW5nXzUoKTsKICAgIGluaXRfaGVhZGluZ182KCk7CiAgICBpbml0X2hlYWRpbmczKCk7CiAgICBpbml0X2hlYWRwaG9uZV9vZmYoKTsKICAgIGluaXRfaGVhZHBob25lcygpOwogICAgaW5pdF9oZWFkc2V0KCk7CiAgICBpbml0X2hlYXJ0X2NyYWNrKCk7CiAgICBpbml0X2hlYXJ0X2hhbmRzaGFrZSgpOwogICAgaW5pdF9oZWFydF9taW51cygpOwogICAgaW5pdF9oZWFydF9vZmYoKTsKICAgIGluaXRfaGVhcnRfcGx1cygpOwogICAgaW5pdF9oZWFydF9wdWxzZSgpOwogICAgaW5pdF9oZWF0ZXIoKTsKICAgIGluaXRfaGVhcnQoKTsKICAgIGluaXRfaGVsaWNvcHRlcigpOwogICAgaW5pdF9oZXhhZ29uKCk7CiAgICBpbml0X2hpZ2hsaWdodGVyKCk7CiAgICBpbml0X2hpc3RvcnkoKTsKICAgIGluaXRfaG9wKCk7CiAgICBpbml0X2hvcF9vZmYoKTsKICAgIGluaXRfaG9zcGl0YWwoKTsKICAgIGluaXRfaG90ZWwoKTsKICAgIGluaXRfaG91cmdsYXNzKCk7CiAgICBpbml0X2hvdXNlX2hlYXJ0KCk7CiAgICBpbml0X2hvdXNlX3BsdWcoKTsKICAgIGluaXRfaG91c2VfcGx1cygpOwogICAgaW5pdF9ob3VzZV93aWZpKCk7CiAgICBpbml0X2hvdXNlKCk7CiAgICBpbml0X2ljZV9jcmVhbV9ib3dsKCk7CiAgICBpbml0X2ljZV9jcmVhbV9jb25lKCk7CiAgICBpbml0X2lkX2NhcmRfbGFueWFyZCgpOwogICAgaW5pdF9pZF9jYXJkKCk7CiAgICBpbml0X2ltYWdlX2Rvd24oKTsKICAgIGluaXRfaW1hZ2VfbWludXMoKTsKICAgIGluaXRfaW1hZ2Vfb2ZmKCk7CiAgICBpbml0X2ltYWdlX3BsdXMoKTsKICAgIGluaXRfaW1hZ2VfcGxheSgpOwogICAgaW5pdF9pbWFnZV91cCgpOwogICAgaW5pdF9pbWFnZV91cHNjYWxlKCk7CiAgICBpbml0X2ltYWdlMygpOwogICAgaW5pdF9pbWFnZXMoKTsKICAgIGluaXRfaW1wb3J0KCk7CiAgICBpbml0X2luYm94KCk7CiAgICBpbml0X2luZGlhbl9ydXBlZSgpOwogICAgaW5pdF9pbmZpbml0eSgpOwogICAgaW5pdF9pbmZvMigpOwogICAgaW5pdF9pbnNwZWN0aW9uX3BhbmVsKCk7CiAgICBpbml0X2luc3RhZ3JhbSgpOwogICAgaW5pdF9pdGFsaWMoKTsKICAgIGluaXRfaXRlcmF0aW9uX2NjdygpOwogICAgaW5pdF9pdGVyYXRpb25fY3coKTsKICAgIGluaXRfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2pveXN0aWNrKCk7CiAgICBpbml0X2thbmJhbigpOwogICAgaW5pdF9rYXlhaygpOwogICAgaW5pdF9rZXlfcm91bmQoKTsKICAgIGluaXRfa2V5X3NxdWFyZSgpOwogICAgaW5pdF9rZXkoKTsKICAgIGluaXRfa2V5Ym9hcmRfbXVzaWMoKTsKICAgIGluaXRfa2V5Ym9hcmRfb2ZmKCk7CiAgICBpbml0X2tleWJvYXJkKCk7CiAgICBpbml0X2xhbXBfY2VpbGluZygpOwogICAgaW5pdF9sYW1wX2Rlc2soKTsKICAgIGluaXRfbGFtcF9mbG9vcigpOwogICAgaW5pdF9sYW1wX3dhbGxfZG93bigpOwogICAgaW5pdF9sYW1wX3dhbGxfdXAoKTsKICAgIGluaXRfbGFtcCgpOwogICAgaW5pdF9sYW5kX3Bsb3QoKTsKICAgIGluaXRfbGFuZG1hcmsoKTsKICAgIGluaXRfbGFuZ3VhZ2VzKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsX2NoZWNrKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsKCk7CiAgICBpbml0X2xhcHRvcCgpOwogICAgaW5pdF9sYXNzb19zZWxlY3QoKTsKICAgIGluaXRfbGFzc28oKTsKICAgIGluaXRfbGF1Z2goKTsKICAgIGluaXRfbGF5ZXJzXzIoKTsKICAgIGluaXRfbGF5ZXJzKCk7CiAgICBpbml0X2xheWVyc19wbHVzKCk7CiAgICBpbml0X2xheW91dF9kYXNoYm9hcmQoKTsKICAgIGluaXRfbGF5b3V0X2dyaWQoKTsKICAgIGluaXRfbGF5b3V0X2xpc3QoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX2xlZnQoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX3RvcCgpOwogICAgaW5pdF9sYXlvdXRfdGVtcGxhdGUoKTsKICAgIGluaXRfbGVhZigpOwogICAgaW5pdF9sZWFmeV9ncmVlbigpOwogICAgaW5pdF9sZWN0ZXJuKCk7CiAgICBpbml0X2xpYnJhcnlfYmlnKCk7CiAgICBpbml0X2xpYnJhcnkoKTsKICAgIGluaXRfbGlmZV9idW95KCk7CiAgICBpbml0X2xpZ2F0dXJlKCk7CiAgICBpbml0X2xpZ2h0YnVsYl9vZmYoKTsKICAgIGluaXRfbGlnaHRidWxiKCk7CiAgICBpbml0X2xpbmVfc3F1aWdnbGUoKTsKICAgIGluaXRfbGlua18yKCk7CiAgICBpbml0X2xpbmtfMl9vZmYoKTsKICAgIGluaXRfbGluazQoKTsKICAgIGluaXRfbGlua2VkaW4oKTsKICAgIGluaXRfbGlzdF9jaGVjaygpOwogICAgaW5pdF9saXN0X2NoZWNrcygpOwogICAgaW5pdF9saXN0X2NoZXZyb25zX2Rvd25fdXAoKTsKICAgIGluaXRfbGlzdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2xpc3RfY29sbGFwc2UoKTsKICAgIGluaXRfbGlzdF9lbmQoKTsKICAgIGluaXRfbGlzdF9maWx0ZXJfcGx1cygpOwogICAgaW5pdF9saXN0X2ZpbHRlcigpOwogICAgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSgpOwogICAgaW5pdF9saXN0X2luZGVudF9pbmNyZWFzZSgpOwogICAgaW5pdF9saXN0X21pbnVzKCk7CiAgICBpbml0X2xpc3RfbXVzaWMoKTsKICAgIGluaXRfbGlzdF9vcmRlcmVkKCk7CiAgICBpbml0X2xpc3RfcGx1cygpOwogICAgaW5pdF9saXN0X3Jlc3RhcnQoKTsKICAgIGluaXRfbGlzdF9zdGFydCgpOwogICAgaW5pdF9saXN0X3RvZG8oKTsKICAgIGluaXRfbGlzdF90cmVlKCk7CiAgICBpbml0X2xpc3RfdmlkZW8oKTsKICAgIGluaXRfbGlzdF94KCk7CiAgICBpbml0X2xvYWRlcl9jaXJjbGUoKTsKICAgIGluaXRfbGlzdDQoKTsKICAgIGluaXRfbG9hZGVyX3BpbndoZWVsKCk7CiAgICBpbml0X2xvYWRlcigpOwogICAgaW5pdF9sb2NhdGVfZml4ZWQoKTsKICAgIGluaXRfbG9jYXRlX29mZigpOwogICAgaW5pdF9sb2NhdGUoKTsKICAgIGluaXRfbG9ja19rZXlob2xlX29wZW4oKTsKICAgIGluaXRfbG9ja19rZXlob2xlKCk7CiAgICBpbml0X2xvY2tfb3BlbigpOwogICAgaW5pdF9sb2NrKCk7CiAgICBpbml0X2xvZ19pbigpOwogICAgaW5pdF9sb2dfb3V0KCk7CiAgICBpbml0X2xvZ3MoKTsKICAgIGluaXRfbG9sbGlwb3AoKTsKICAgIGluaXRfbHVnZ2FnZSgpOwogICAgaW5pdF9tYWduZXQoKTsKICAgIGluaXRfbWFpbF9jaGVjaygpOwogICAgaW5pdF9tYWlsX21pbnVzKCk7CiAgICBpbml0X21haWxfb3BlbigpOwogICAgaW5pdF9tYWlsX3BsdXMoKTsKICAgIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X21haWxfc2VhcmNoKCk7CiAgICBpbml0X21haWxfd2FybmluZygpOwogICAgaW5pdF9tYWlsX3goKTsKICAgIGluaXRfbWFpbCgpOwogICAgaW5pdF9tYWlsYm94KCk7CiAgICBpbml0X21haWxzKCk7CiAgICBpbml0X21hcF9taW51cygpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrX2luc2lkZSgpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrKCk7CiAgICBpbml0X21hcF9waW5faG91c2UoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51c19pbnNpZGUoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51cygpOwogICAgaW5pdF9tYXBfcGluX29mZigpOwogICAgaW5pdF9tYXBfcGluX3BlbigpOwogICAgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5fcGx1cygpOwogICAgaW5pdF9tYXBfcGluX3hfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5feCgpOwogICAgaW5pdF9tYXBfcGluKCk7CiAgICBpbml0X21hcF9waW5uZWQoKTsKICAgIGluaXRfbWFwX3BsdXMoKTsKICAgIGluaXRfbWFwMigpOwogICAgaW5pdF9tYXJzX3N0cm9rZSgpOwogICAgaW5pdF9tYXJzKCk7CiAgICBpbml0X21hcnRpbmkoKTsKICAgIGluaXRfbWF4aW1pemVfMigpOwogICAgaW5pdF9tYXhpbWl6ZSgpOwogICAgaW5pdF9tZWdhcGhvbmVfb2ZmKCk7CiAgICBpbml0X21lZ2FwaG9uZSgpOwogICAgaW5pdF9tZWRhbCgpOwogICAgaW5pdF9tZWgoKTsKICAgIGluaXRfbWVtb3J5X3N0aWNrKCk7CiAgICBpbml0X21lcmdlNCgpOwogICAgaW5pdF9tZW51KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfb2ZmKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyaygpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV9yZXBseSgpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3goKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGUoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfY29kZSgpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfZGlmZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfaGVhcnQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jaygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9tb3JlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX29mZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3F1b3RlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3JlcGx5KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3NoYXJlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV94KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlKCk7CiAgICBpbml0X21lc3NhZ2VzX3NxdWFyZSgpOwogICAgaW5pdF9taWNfb2ZmKCk7CiAgICBpbml0X21pY192b2NhbCgpOwogICAgaW5pdF9taWMoKTsKICAgIGluaXRfbWljcm9jaGlwKCk7CiAgICBpbml0X21pY3Jvc2NvcGUoKTsKICAgIGluaXRfbWljcm93YXZlKCk7CiAgICBpbml0X21pbGVzdG9uZSgpOwogICAgaW5pdF9taWxrX29mZigpOwogICAgaW5pdF9taWxrKCk7CiAgICBpbml0X21pbmltaXplXzIoKTsKICAgIGluaXRfbWluaW1pemUoKTsKICAgIGluaXRfbWludXMoKTsKICAgIGluaXRfbW9uaXRvcl9jaGVjaygpOwogICAgaW5pdF9tb25pdG9yX2Nsb3VkKCk7CiAgICBpbml0X21vbml0b3JfY29nKCk7CiAgICBpbml0X21vbml0b3JfZG90KCk7CiAgICBpbml0X21vbml0b3JfZG93bigpOwogICAgaW5pdF9tb25pdG9yX29mZigpOwogICAgaW5pdF9tb25pdG9yX3BhdXNlKCk7CiAgICBpbml0X21vbml0b3JfcGxheSgpOwogICAgaW5pdF9tb25pdG9yX3NtYXJ0cGhvbmUoKTsKICAgIGluaXRfbW9uaXRvcl9zcGVha2VyKCk7CiAgICBpbml0X21vbml0b3Jfc3RvcCgpOwogICAgaW5pdF9tb25pdG9yX3VwKCk7CiAgICBpbml0X21vbml0b3JfeCgpOwogICAgaW5pdF9tb25pdG9yKCk7CiAgICBpbml0X21vb25fc3RhcigpOwogICAgaW5pdF9tb3RvcmJpa2UoKTsKICAgIGluaXRfbW9vbigpOwogICAgaW5pdF9tb3VudGFpbl9zbm93KCk7CiAgICBpbml0X21vdW50YWluKCk7CiAgICBpbml0X21vdXNlX29mZigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyXzJfb2ZmKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXJfMigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2JhbigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfbW91c2UoKTsKICAgIGluaXRfbW92ZV8zZCgpOwogICAgaW5pdF9tb3ZlX2RpYWdvbmFsXzIoKTsKICAgIGluaXRfbW92ZV9kaWFnb25hbCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fbGVmdCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fcmlnaHQoKTsKICAgIGluaXRfbW92ZV9kb3duKCk7CiAgICBpbml0X21vdmVfbGVmdCgpOwogICAgaW5pdF9tb3ZlX2hvcml6b250YWwoKTsKICAgIGluaXRfbW92ZV9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwX2xlZnQoKTsKICAgIGluaXRfbW92ZV91cF9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwKCk7CiAgICBpbml0X21vdmVfdmVydGljYWwoKTsKICAgIGluaXRfbW92ZSgpOwogICAgaW5pdF9tdXNpY18yKCk7CiAgICBpbml0X211c2ljXzMoKTsKICAgIGluaXRfbXVzaWNfNCgpOwogICAgaW5pdF9tdXNpYygpOwogICAgaW5pdF9uYXZpZ2F0aW9uXzJfb2ZmKCk7CiAgICBpbml0X25hdmlnYXRpb25fMigpOwogICAgaW5pdF9uYXZpZ2F0aW9uX29mZigpOwogICAgaW5pdF9uYXZpZ2F0aW9uKCk7CiAgICBpbml0X25ld3NwYXBlcigpOwogICAgaW5pdF9uZXR3b3JrMigpOwogICAgaW5pdF9uZmMoKTsKICAgIGluaXRfbm9uX2JpbmFyeSgpOwogICAgaW5pdF9ub3RlYm9va19wZW4oKTsKICAgIGluaXRfbm90ZWJvb2tfdGFicygpOwogICAgaW5pdF9ub3RlYm9va190ZXh0KCk7CiAgICBpbml0X25vdGVib29rKCk7CiAgICBpbml0X25vdGVwYWRfdGV4dF9kYXNoZWQoKTsKICAgIGluaXRfbm90ZXBhZF90ZXh0KCk7CiAgICBpbml0X251dF9vZmYoKTsKICAgIGluaXRfbnV0KCk7CiAgICBpbml0X29jdGFnb25fYWxlcnQoKTsKICAgIGluaXRfb2N0YWdvbl9taW51cygpOwogICAgaW5pdF9vY3RhZ29uX3BhdXNlKCk7CiAgICBpbml0X29jdGFnb25feCgpOwogICAgaW5pdF9vY3RhZ29uKCk7CiAgICBpbml0X29tZWdhKCk7CiAgICBpbml0X29wdGlvbigpOwogICAgaW5pdF9vcmJpdCgpOwogICAgaW5pdF9vcmlnYW1pKCk7CiAgICBpbml0X3BhY2thZ2VfMigpOwogICAgaW5pdF9wYWNrYWdlX2NoZWNrKCk7CiAgICBpbml0X3BhY2thZ2VfbWludXMoKTsKICAgIGluaXRfcGFja2FnZV9vcGVuKCk7CiAgICBpbml0X3BhY2thZ2VfcGx1cygpOwogICAgaW5pdF9wYWNrYWdlX3NlYXJjaCgpOwogICAgaW5pdF9wYWNrYWdlX3goKTsKICAgIGluaXRfcGFja2FnZSgpOwogICAgaW5pdF9wYWludF9idWNrZXQoKTsKICAgIGluaXRfcGFpbnRfcm9sbGVyKCk7CiAgICBpbml0X3BhaW50YnJ1c2hfdmVydGljYWwoKTsKICAgIGluaXRfcGFpbnRicnVzaCgpOwogICAgaW5pdF9wYWxldHRlKCk7CiAgICBpbml0X3BhbmRhKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9vcGVuKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfb3BlbigpOwogICAgaW5pdF9wYW5lbF9sZWZ0X3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9sZWZ0KCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9yaWdodF9vcGVuKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0KCk7CiAgICBpbml0X3BhbmVsX3RvcF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF90b3BfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9vcGVuKCk7CiAgICBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF90b3AoKTsKICAgIGluaXRfcGFuZWxzX3JpZ2h0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbHNfdG9wX2xlZnQoKTsKICAgIGluaXRfcGFwZXJjbGlwKCk7CiAgICBpbml0X3BhcmtpbmdfbWV0ZXIoKTsKICAgIGluaXRfcGFyZW50aGVzZXMoKTsKICAgIGluaXRfcGFydHlfcG9wcGVyKCk7CiAgICBpbml0X3BhdXNlKCk7CiAgICBpbml0X3Bhd19wcmludCgpOwogICAgaW5pdF9wY19jYXNlKCk7CiAgICBpbml0X3Blbl9saW5lKCk7CiAgICBpbml0X3Blbl9vZmYoKTsKICAgIGluaXRfcGVuX3Rvb2woKTsKICAgIGluaXRfcGVuKCk7CiAgICBpbml0X3BlbmNpbF9saW5lKCk7CiAgICBpbml0X3BlbmNpbF9vZmYoKTsKICAgIGluaXRfcGVuY2lsX3J1bGVyKCk7CiAgICBpbml0X3BlbmNpbCgpOwogICAgaW5pdF9wZW50YWdvbigpOwogICAgaW5pdF9wZXJjZW50KCk7CiAgICBpbml0X3BlcnNvbl9zdGFuZGluZygpOwogICAgaW5pdF9waGlsaXBwaW5lX3Blc28oKTsKICAgIGluaXRfcGhvbmVfZm9yd2FyZGVkKCk7CiAgICBpbml0X3Bob25lX2NhbGwoKTsKICAgIGluaXRfcGhvbmVfaW5jb21pbmcoKTsKICAgIGluaXRfcGhvbmVfbWlzc2VkKCk7CiAgICBpbml0X3Bob25lX29mZigpOwogICAgaW5pdF9waG9uZV9vdXRnb2luZygpOwogICAgaW5pdF9waG9uZSgpOwogICAgaW5pdF9waSgpOwogICAgaW5pdF9waWFubygpOwogICAgaW5pdF9waWNrYXhlKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZSgpOwogICAgaW5pdF9waWdneV9iYW5rKCk7CiAgICBpbml0X3BpbGNyb3dfbGVmdCgpOwogICAgaW5pdF9waWxjcm93X3JpZ2h0KCk7CiAgICBpbml0X3BpbGNyb3coKTsKICAgIGluaXRfcGlsbF9ib3R0bGUoKTsKICAgIGluaXRfcGlsbCgpOwogICAgaW5pdF9waW5fb2ZmKCk7CiAgICBpbml0X3BpbigpOwogICAgaW5pdF9waXBldHRlKCk7CiAgICBpbml0X3BpenphKCk7CiAgICBpbml0X3BsYW5lX2xhbmRpbmcoKTsKICAgIGluaXRfcGxhbmVfdGFrZW9mZigpOwogICAgaW5pdF9wbGFuZSgpOwogICAgaW5pdF9wbGF5KCk7CiAgICBpbml0X3BsdWdfMigpOwogICAgaW5pdF9wbHVnX3phcCgpOwogICAgaW5pdF9wbHVnKCk7CiAgICBpbml0X3BsdXMoKTsKICAgIGluaXRfcG9ja2V0X2tuaWZlKCk7CiAgICBpbml0X3BvY2tldCgpOwogICAgaW5pdF9wb2RjYXN0KCk7CiAgICBpbml0X3BvaW50ZXJfb2ZmKCk7CiAgICBpbml0X3BvaW50ZXIoKTsKICAgIGluaXRfcG9wY29ybigpOwogICAgaW5pdF9wb3BzaWNsZSgpOwogICAgaW5pdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9wb3dlcl9vZmYoKTsKICAgIGluaXRfcG93ZXIoKTsKICAgIGluaXRfcHJlc2VudGF0aW9uKCk7CiAgICBpbml0X3ByaW50ZXIoKTsKICAgIGluaXRfcHJpbnRlcl9jaGVjaygpOwogICAgaW5pdF9wcm9qZWN0b3IoKTsKICAgIGluaXRfcHJvcG9ydGlvbnMoKTsKICAgIGluaXRfcHV6emxlKCk7CiAgICBpbml0X3B5cmFtaWQoKTsKICAgIGluaXRfcXJfY29kZSgpOwogICAgaW5pdF9xdW90ZSgpOwogICAgaW5pdF9yYWJiaXQoKTsKICAgIGluaXRfcmFkYXIoKTsKICAgIGluaXRfcmFkaWF0aW9uKCk7CiAgICBpbml0X3JhZGljYWwoKTsKICAgIGluaXRfcmFkaW9fcmVjZWl2ZXIoKTsKICAgIGluaXRfcmFkaW9fdG93ZXIoKTsKICAgIGluaXRfcmFkaW8oKTsKICAgIGluaXRfcmFkaXVzKCk7CiAgICBpbml0X3JhaWxfc3ltYm9sKCk7CiAgICBpbml0X3JhaW5ib3coKTsKICAgIGluaXRfcmF0KCk7CiAgICBpbml0X3JhdGlvKCk7CiAgICBpbml0X3JlY2VpcHRfY2VudCgpOwogICAgaW5pdF9yZWNlaXB0X2V1cm8oKTsKICAgIGluaXRfcmVjZWlwdF9pbmRpYW5fcnVwZWUoKTsKICAgIGluaXRfcmVjZWlwdF9qYXBhbmVzZV95ZW4oKTsKICAgIGluaXRfcmVjZWlwdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9yZWNlaXB0X3RleHQoKTsKICAgIGluaXRfcmVjZWlwdF90dXJraXNoX2xpcmEoKTsKICAgIGluaXRfcmVjZWlwdCgpOwogICAgaW5pdF9yZWN0YW5nbGVfY2lyY2xlKCk7CiAgICBpbml0X3JlY3RhbmdsZV9lbGxpcHNpcygpOwogICAgaW5pdF9yZWN0YW5nbGVfZ29nZ2xlcygpOwogICAgaW5pdF9yZWN0YW5nbGVfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9yZWN0YW5nbGVfdmVydGljYWwoKTsKICAgIGluaXRfcmVjeWNsZSgpOwogICAgaW5pdF9yZWRvXzIoKTsKICAgIGluaXRfcmVkb19kb3QoKTsKICAgIGluaXRfcmVkbygpOwogICAgaW5pdF9yZWZyZXNoX2Njd19kb3QoKTsKICAgIGluaXRfcmVmcmVzaF9jY3coKTsKICAgIGluaXRfcmVmcmVzaF9jd19vZmYoKTsKICAgIGluaXRfcmVmcmVzaF9jdygpOwogICAgaW5pdF9yZWZyaWdlcmF0b3IoKTsKICAgIGluaXRfcmVnZXgoKTsKICAgIGluaXRfcmVtb3ZlX2Zvcm1hdHRpbmcoKTsKICAgIGluaXRfcmVwZWF0XzEoKTsKICAgIGluaXRfcmVwZWF0XzIoKTsKICAgIGluaXRfcmVwZWF0NCgpOwogICAgaW5pdF9yZXBsYWNlX2FsbCgpOwogICAgaW5pdF9yZXBsYWNlKCk7CiAgICBpbml0X3JlcGx5X2FsbCgpOwogICAgaW5pdF9yZXBseSgpOwogICAgaW5pdF9yZXdpbmQoKTsKICAgIGluaXRfcmliYm9uKCk7CiAgICBpbml0X3JvY2tldCgpOwogICAgaW5pdF9yb2NraW5nX2NoYWlyKCk7CiAgICBpbml0X3JvbGxlcl9jb2FzdGVyKCk7CiAgICBpbml0X3Jvc2UoKTsKICAgIGluaXRfcm90YXRlXzNkKCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfa2V5KCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfc3F1YXJlKCk7CiAgICBpbml0X3JvdGF0ZV9jY3coKTsKICAgIGluaXRfcm90YXRlX2N3X3NxdWFyZSgpOwogICAgaW5pdF9yb3RhdGVfY3coKTsKICAgIGluaXRfcm91dGUoKTsKICAgIGluaXRfcm91dGVfb2ZmKCk7CiAgICBpbml0X3JvdXRlcigpOwogICAgaW5pdF9yb3dzXzIoKTsKICAgIGluaXRfcm93c18zKCk7CiAgICBpbml0X3Jvd3NfNCgpOwogICAgaW5pdF9yc3MoKTsKICAgIGluaXRfcnVsZXJfZGltZW5zaW9uX2xpbmUoKTsKICAgIGluaXRfcnVsZXIoKTsKICAgIGluaXRfcnVzc2lhbl9ydWJsZSgpOwogICAgaW5pdF9zYWlsYm9hdCgpOwogICAgaW5pdF9zYWxhZCgpOwogICAgaW5pdF9zYW5kd2ljaCgpOwogICAgaW5pdF9zYXRlbGxpdGVfZGlzaCgpOwogICAgaW5pdF9zYXRlbGxpdGUoKTsKICAgIGluaXRfc2F1ZGlfcml5YWwoKTsKICAgIGluaXRfc2F2ZV9hbGwoKTsKICAgIGluaXRfc2F2ZV9vZmYoKTsKICAgIGluaXRfc2F2ZSgpOwogICAgaW5pdF9zY2FsZV8zZCgpOwogICAgaW5pdF9zY2FsZSgpOwogICAgaW5pdF9zY2FsaW5nKCk7CiAgICBpbml0X3NjYW5fZXllKCk7CiAgICBpbml0X3NjYW5fYmFyY29kZSgpOwogICAgaW5pdF9zY2FuX2ZhY2UoKTsKICAgIGluaXRfc2Nhbl9oZWFydCgpOwogICAgaW5pdF9zY2FuX2xpbmUoKTsKICAgIGluaXRfc2Nhbl9xcl9jb2RlKCk7CiAgICBpbml0X3NjYW5fc2VhcmNoKCk7CiAgICBpbml0X3NjYW5fdGV4dCgpOwogICAgaW5pdF9zY2FuMigpOwogICAgaW5pdF9zY2hvb2woKTsKICAgIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQoKTsKICAgIGluaXRfc2Npc3NvcnMoKTsKICAgIGluaXRfc2Nvb3RlcigpOwogICAgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmKCk7CiAgICBpbml0X3NjcmVlbl9zaGFyZSgpOwogICAgaW5pdF9zY3JvbGxfdGV4dCgpOwogICAgaW5pdF9zY3JvbGwoKTsKICAgIGluaXRfc2VhcmNoX2FsZXJ0KCk7CiAgICBpbml0X3NlYXJjaF9jb2RlKCk7CiAgICBpbml0X3NlYXJjaF9jaGVjaygpOwogICAgaW5pdF9zZWFyY2hfc2xhc2goKTsKICAgIGluaXRfc2VhcmNoX3goKTsKICAgIGluaXRfc2VhcmNoKCk7CiAgICBpbml0X3NlbmRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zZWN0aW9uKCk7CiAgICBpbml0X3NlbmRfdG9fYmFjaygpOwogICAgaW5pdF9zZW5kKCk7CiAgICBpbml0X3NlcGFyYXRvcl9ob3Jpem9udGFsKCk7CiAgICBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCgpOwogICAgaW5pdF9zZXJ2ZXJfY29nKCk7CiAgICBpbml0X3NlcnZlcl9jcmFzaCgpOwogICAgaW5pdF9zZXJ2ZXJfb2ZmKCk7CiAgICBpbml0X3NlcnZlcigpOwogICAgaW5pdF9zZXR0aW5nc18yKCk7CiAgICBpbml0X3NldHRpbmdzKCk7CiAgICBpbml0X3NoYXBlcygpOwogICAgaW5pdF9zaGFyZV8yKCk7CiAgICBpbml0X3NoYXJlMigpOwogICAgaW5pdF9zaGVldCgpOwogICAgaW5pdF9zaGVsbCgpOwogICAgaW5pdF9zaGllbGRfYWxlcnQoKTsKICAgIGluaXRfc2hpZWxkX2JhbigpOwogICAgaW5pdF9zaGllbGRfY2hlY2soKTsKICAgIGluaXRfc2hpZWxkX2VsbGlwc2lzKCk7CiAgICBpbml0X3NoaWVsZF9oYWxmKCk7CiAgICBpbml0X3NoaWVsZF9taW51cygpOwogICAgaW5pdF9zaGllbGRfb2ZmKCk7CiAgICBpbml0X3NoaWVsZF9wbHVzKCk7CiAgICBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X3NoaWVsZF91c2VyKCk7CiAgICBpbml0X3NoaWVsZF94KCk7CiAgICBpbml0X3NoaWVsZCgpOwogICAgaW5pdF9zaGlwX3doZWVsKCk7CiAgICBpbml0X3NoaXAoKTsKICAgIGluaXRfc2hpcnQoKTsKICAgIGluaXRfc2hvcHBpbmdfYmFnKCk7CiAgICBpbml0X3Nob3BwaW5nX2Jhc2tldCgpOwogICAgaW5pdF9zaG9wcGluZ19jYXJ0KCk7CiAgICBpbml0X3Nob3ZlbCgpOwogICAgaW5pdF9zaG93ZXJfaGVhZCgpOwogICAgaW5pdF9zaHJlZGRlcigpOwogICAgaW5pdF9zaHJpbXAoKTsKICAgIGluaXRfc2hyaW5rKCk7CiAgICBpbml0X3NocnViKCk7CiAgICBpbml0X3NodWZmbGUoKTsKICAgIGluaXRfc2lnbmFsX2hpZ2goKTsKICAgIGluaXRfc2lnbWEoKTsKICAgIGluaXRfc2lnbmFsX2xvdygpOwogICAgaW5pdF9zaWduYWxfbWVkaXVtKCk7CiAgICBpbml0X3NpZ25hbF96ZXJvKCk7CiAgICBpbml0X3NpZ25hbCgpOwogICAgaW5pdF9zaWduYXR1cmUoKTsKICAgIGluaXRfc2lnbnBvc3RfYmlnKCk7CiAgICBpbml0X3NpZ25wb3N0KCk7CiAgICBpbml0X3NpcmVuKCk7CiAgICBpbml0X3NraXBfYmFjaygpOwogICAgaW5pdF9za3VsbCgpOwogICAgaW5pdF9za2lwX2ZvcndhcmQoKTsKICAgIGluaXRfc2xhY2soKTsKICAgIGluaXRfc2xhc2goKTsKICAgIGluaXRfc2xpY2UoKTsKICAgIGluaXRfc2xpZGVyc19ob3Jpem9udGFsKCk7CiAgICBpbml0X3NsaWRlcnNfdmVydGljYWwoKTsKICAgIGluaXRfc21hcnRwaG9uZV9jaGFyZ2luZygpOwogICAgaW5pdF9zbWFydHBob25lX25mYygpOwogICAgaW5pdF9zbWFydHBob25lKCk7CiAgICBpbml0X3NtaWxlX3BsdXMoKTsKICAgIGluaXRfc21pbGUoKTsKICAgIGluaXRfc25haWwoKTsKICAgIGluaXRfc25vd2ZsYWtlKCk7CiAgICBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQoKTsKICAgIGluaXRfc29mYSgpOwogICAgaW5pdF9zb2xhcl9wYW5lbCgpOwogICAgaW5pdF9zb3VwKCk7CiAgICBpbml0X3NwYWNlKCk7CiAgICBpbml0X3NwYWRlKCk7CiAgICBpbml0X3NwYXJrbGUoKTsKICAgIGluaXRfc3BhcmtsZXMoKTsKICAgIGluaXRfc3BlYWtlcigpOwogICAgaW5pdF9zcGVlY2goKTsKICAgIGluaXRfc3BlbGxfY2hlY2tfMigpOwogICAgaW5pdF9zcGVsbF9jaGVjaygpOwogICAgaW5pdF9zcGxpbmVfcG9pbnRlcigpOwogICAgaW5pdF9zcGxpbmUoKTsKICAgIGluaXRfc3BsaXQoKTsKICAgIGluaXRfc3Bvb2woKTsKICAgIGluaXRfc3BvdGxpZ2h0KCk7CiAgICBpbml0X3NwcmF5X2NhbigpOwogICAgaW5pdF9zcHJvdXQoKTsKICAgIGluaXRfc3F1YXJlX2FjdGl2aXR5KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X3VwKCk7CiAgICBpbml0X3NxdWFyZV9hc3RlcmlzaygpOwogICAgaW5pdF9zcXVhcmVfYm90dG9tX2Rhc2hlZF9zY2lzc29ycygpOwogICAgaW5pdF9zcXVhcmVfY2hhcnRfZ2FudHQoKTsKICAgIGluaXRfc3F1YXJlX2NoZWNrKCk7CiAgICBpbml0X3NxdWFyZV9jaGVja19iaWcoKTsKICAgIGluaXRfc3F1YXJlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9zcXVhcmVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X3NxdWFyZV9jb2RlKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfYm90dG9tX2NvZGUoKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlX2RpdmlkZSgpOwogICAgaW5pdF9zcXVhcmVfZG90KCk7CiAgICBpbml0X3NxdWFyZV9lcXVhbCgpOwogICAgaW5pdF9zcXVhcmVfZnVuY3Rpb24oKTsKICAgIGluaXRfc3F1YXJlX2thbmJhbigpOwogICAgaW5pdF9zcXVhcmVfbGlicmFyeSgpOwogICAgaW5pdF9zcXVhcmVfbSgpOwogICAgaW5pdF9zcXVhcmVfbWVudSgpOwogICAgaW5pdF9zcXVhcmVfbWludXMoKTsKICAgIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfc3F1YXJlX3Bhcmtpbmdfb2ZmKCk7CiAgICBpbml0X3NxdWFyZV9wYXJraW5nKCk7CiAgICBpbml0X3NxdWFyZV9wZW4oKTsKICAgIGluaXRfc3F1YXJlX3BhdXNlKCk7CiAgICBpbml0X3NxdWFyZV9wZXJjZW50KCk7CiAgICBpbml0X3NxdWFyZV9waSgpOwogICAgaW5pdF9zcXVhcmVfcGlsY3JvdygpOwogICAgaW5pdF9zcXVhcmVfcGxheSgpOwogICAgaW5pdF9zcXVhcmVfcGx1cygpOwogICAgaW5pdF9zcXVhcmVfcG93ZXIoKTsKICAgIGluaXRfc3F1YXJlX3JhZGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NjaXNzb3JzKCk7CiAgICBpbml0X3NxdWFyZV9yb3VuZF9jb3JuZXIoKTsKICAgIGluaXRfc3F1YXJlX3NpZ21hKCk7CiAgICBpbml0X3NxdWFyZV9zbGFzaCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfdmVydGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVfc3RhY2soKTsKICAgIGluaXRfc3F1YXJlX3N0YXIoKTsKICAgIGluaXRfc3F1YXJlX3N0b3AoKTsKICAgIGluaXRfc3F1YXJlX3Rlcm1pbmFsKCk7CiAgICBpbml0X3NxdWFyZV91c2VyX3JvdW5kKCk7CiAgICBpbml0X3NxdWFyZV91c2VyKCk7CiAgICBpbml0X3NxdWFyZV94KCk7CiAgICBpbml0X3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVzX2V4Y2x1ZGUoKTsKICAgIGluaXRfc3F1YXJlc19pbnRlcnNlY3QoKTsKICAgIGluaXRfc3F1YXJlc19zdWJ0cmFjdCgpOwogICAgaW5pdF9zcXVpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlc191bml0ZSgpOwogICAgaW5pdF9zcXVpcmNsZSgpOwogICAgaW5pdF9zcXVpcnJlbCgpOwogICAgaW5pdF9zdGFtcCgpOwogICAgaW5pdF9zdGFyX29mZigpOwogICAgaW5pdF9zdGFyX2hhbGYoKTsKICAgIGluaXRfc3RhcigpOwogICAgaW5pdF9zdGVwX2JhY2soKTsKICAgIGluaXRfc3RlcF9mb3J3YXJkKCk7CiAgICBpbml0X3N0ZXRob3Njb3BlKCk7CiAgICBpbml0X3N0aWNrZXIoKTsKICAgIGluaXRfc3RvbmUoKTsKICAgIGluaXRfc3RpY2t5X25vdGUoKTsKICAgIGluaXRfc3RvcmUoKTsKICAgIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsKCk7CiAgICBpbml0X3N0cmV0Y2hfdmVydGljYWwoKTsKICAgIGluaXRfc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9zdWJzY3JpcHQoKTsKICAgIGluaXRfc3VuX2RpbSgpOwogICAgaW5pdF9zdW5fbWVkaXVtKCk7CiAgICBpbml0X3N1bl9tb29uKCk7CiAgICBpbml0X3N1bl9zbm93KCk7CiAgICBpbml0X3N1bigpOwogICAgaW5pdF9zdW5yaXNlKCk7CiAgICBpbml0X3N1bnNldCgpOwogICAgaW5pdF9zdXBlcnNjcmlwdCgpOwogICAgaW5pdF9zd2F0Y2hfYm9vaygpOwogICAgaW5pdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9zd2l0Y2hfY2FtZXJhKCk7CiAgICBpbml0X3N3b3JkKCk7CiAgICBpbml0X3N3b3JkcygpOwogICAgaW5pdF9zeXJpbmdlKCk7CiAgICBpbml0X3RhYmxlXzIoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfbWVyZ2UoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfc3BsaXQoKTsKICAgIGluaXRfdGFibGVfb2ZfY29udGVudHMoKTsKICAgIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCgpOwogICAgaW5pdF90YWJsZV9wcm9wZXJ0aWVzKCk7CiAgICBpbml0X3RhYmxlX3Jvd3Nfc3BsaXQoKTsKICAgIGluaXRfdGFibGUyKCk7CiAgICBpbml0X3RhYmxldF9zbWFydHBob25lKCk7CiAgICBpbml0X3RhYmxldCgpOwogICAgaW5pdF90YWJsZXRzKCk7CiAgICBpbml0X3RhZygpOwogICAgaW5pdF90YWdzKCk7CiAgICBpbml0X3RhbGx5XzEoKTsKICAgIGluaXRfdGFsbHlfMigpOwogICAgaW5pdF90YWxseV8zKCk7CiAgICBpbml0X3RhbGx5XzQoKTsKICAgIGluaXRfdGFsbHlfNSgpOwogICAgaW5pdF90YW5nZW50KCk7CiAgICBpbml0X3RhcmdldCgpOwogICAgaW5pdF90ZWxlc2NvcGUoKTsKICAgIGluaXRfdGVudF90cmVlKCk7CiAgICBpbml0X3RlbnQoKTsKICAgIGluaXRfdGVzdF90dWJlX2RpYWdvbmFsKCk7CiAgICBpbml0X3Rlcm1pbmFsKCk7CiAgICBpbml0X3Rlc3RfdHViZSgpOwogICAgaW5pdF90ZXN0X3R1YmVzKCk7CiAgICBpbml0X3RleHRfYWxpZ25fY2VudGVyKCk7CiAgICBpbml0X3RleHRfYWxpZ25fZW5kKCk7CiAgICBpbml0X3RleHRfYWxpZ25fanVzdGlmeSgpOwogICAgaW5pdF90ZXh0X2FsaWduX3N0YXJ0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yX2lucHV0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yKCk7CiAgICBpbml0X3RleHRfcXVvdGUoKTsKICAgIGluaXRfdGV4dF9pbml0aWFsKCk7CiAgICBpbml0X3RleHRfc2VhcmNoKCk7CiAgICBpbml0X3RleHRfc2VsZWN0KCk7CiAgICBpbml0X3RoZWF0ZXIoKTsKICAgIGluaXRfdGV4dF93cmFwKCk7CiAgICBpbml0X3RoZXJtb21ldGVyX3Nub3dmbGFrZSgpOwogICAgaW5pdF90aGVybW9tZXRlcl9zdW4oKTsKICAgIGluaXRfdGhlcm1vbWV0ZXIoKTsKICAgIGluaXRfdGh1bWJzX2Rvd24oKTsKICAgIGluaXRfdGh1bWJzX3VwKCk7CiAgICBpbml0X3RpY2tldF9jaGVjaygpOwogICAgaW5pdF90aWNrZXRfbWludXMoKTsKICAgIGluaXRfdGlja2V0X3BlcmNlbnQoKTsKICAgIGluaXRfdGlja2V0X3BsdXMoKTsKICAgIGluaXRfdGlja2V0X3NsYXNoKCk7CiAgICBpbml0X3RpY2tldF94KCk7CiAgICBpbml0X3RpY2tldCgpOwogICAgaW5pdF90aWNrZXRzX3BsYW5lKCk7CiAgICBpbml0X3RpY2tldHMoKTsKICAgIGluaXRfdGltZXJfcmVzZXQoKTsKICAgIGluaXRfdGltZXJfb2ZmKCk7CiAgICBpbml0X3RpbWVyMigpOwogICAgaW5pdF90b2dnbGVfbGVmdCgpOwogICAgaW5pdF90b2dnbGVfcmlnaHQoKTsKICAgIGluaXRfdG9pbGV0KCk7CiAgICBpbml0X3Rvb2xfY2FzZSgpOwogICAgaW5pdF90b29sYm94KCk7CiAgICBpbml0X3Rvcm5hZG8oKTsKICAgIGluaXRfdG9ydXMoKTsKICAgIGluaXRfdG91Y2hwYWRfb2ZmKCk7CiAgICBpbml0X3RvdWNocGFkKCk7CiAgICBpbml0X3Rvd2VyX2NvbnRyb2woKTsKICAgIGluaXRfdG95X2JyaWNrKCk7CiAgICBpbml0X3RyYWZmaWNfY29uZSgpOwogICAgaW5pdF90cmFjdG9yKCk7CiAgICBpbml0X3RyYWluX2Zyb250X3R1bm5lbCgpOwogICAgaW5pdF90cmFpbl9mcm9udCgpOwogICAgaW5pdF90cmFpbl90cmFjaygpOwogICAgaW5pdF90cmFtX2Zyb250KCk7CiAgICBpbml0X3RyYW5zZ2VuZGVyKCk7CiAgICBpbml0X3RyYXNoXzIoKTsKICAgIGluaXRfdHJhc2goKTsKICAgIGluaXRfdHJlZV9kZWNpZHVvdXMoKTsKICAgIGluaXRfdHJlZV9wYWxtKCk7CiAgICBpbml0X3RyZWVfcGluZSgpOwogICAgaW5pdF90cmVlcygpOwogICAgaW5pdF90cmVsbG8oKTsKICAgIGluaXRfdHJlbmRpbmdfZG93bigpOwogICAgaW5pdF90cmVuZGluZ191cF9kb3duKCk7CiAgICBpbml0X3RyZW5kaW5nX3VwKCk7CiAgICBpbml0X3RyaWFuZ2xlX2FsZXJ0KCk7CiAgICBpbml0X3RyaWFuZ2xlX2Rhc2hlZCgpOwogICAgaW5pdF90cmlhbmdsZV9yaWdodCgpOwogICAgaW5pdF90cmlhbmdsZSgpOwogICAgaW5pdF90cm9waHkoKTsKICAgIGluaXRfdHJ1Y2tfZWxlY3RyaWMoKTsKICAgIGluaXRfdHJ1Y2soKTsKICAgIGluaXRfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X3R1cm50YWJsZSgpOwogICAgaW5pdF90dXJ0bGUoKTsKICAgIGluaXRfdHZfbWluaW1hbF9wbGF5KCk7CiAgICBpbml0X3R2X21pbmltYWwoKTsKICAgIGluaXRfdHYoKTsKICAgIGluaXRfdHdpdGNoKCk7CiAgICBpbml0X3R3aXR0ZXIoKTsKICAgIGluaXRfdHlwZV9vdXRsaW5lKCk7CiAgICBpbml0X3R5cGUoKTsKICAgIGluaXRfdW1icmVsbGFfb2ZmKCk7CiAgICBpbml0X3VtYnJlbGxhKCk7CiAgICBpbml0X3VuZGVybGluZSgpOwogICAgaW5pdF91bmRvXzIoKTsKICAgIGluaXRfdW5kb19kb3QoKTsKICAgIGluaXRfdW5kbygpOwogICAgaW5pdF91bmZvbGRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF91bmZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfdW5ncm91cCgpOwogICAgaW5pdF91bml2ZXJzaXR5KCk7CiAgICBpbml0X3VubGlua18yKCk7CiAgICBpbml0X3VubGluaygpOwogICAgaW5pdF91bnBsdWcoKTsKICAgIGluaXRfdXNiKCk7CiAgICBpbml0X3VwbG9hZCgpOwogICAgaW5pdF91c2VyX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfY29nKCk7CiAgICBpbml0X3VzZXJfbG9jaygpOwogICAgaW5pdF91c2VyX21pbnVzKCk7CiAgICBpbml0X3VzZXJfcGVuKCk7CiAgICBpbml0X3VzZXJfcGx1cygpOwogICAgaW5pdF91c2VyX3JvdW5kX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfcm91bmRfY29nKCk7CiAgICBpbml0X3VzZXJfcm91bmRfbWludXMoKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wZW4oKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wbHVzKCk7CiAgICBpbml0X3VzZXJfcm91bmRfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfcm91bmQoKTsKICAgIGluaXRfdXNlcl9yb3VuZF94KCk7CiAgICBpbml0X3VzZXJfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfc3RhcigpOwogICAgaW5pdF91c2VyX3goKTsKICAgIGluaXRfdXNlcigpOwogICAgaW5pdF91c2Vyc19yb3VuZCgpOwogICAgaW5pdF91c2VycygpOwogICAgaW5pdF91dGVuc2lsc19jcm9zc2VkKCk7CiAgICBpbml0X3V0ZW5zaWxzKCk7CiAgICBpbml0X3ZhbigpOwogICAgaW5pdF91dGlsaXR5X3BvbGUoKTsKICAgIGluaXRfdmFyaWFibGUoKTsKICAgIGluaXRfdmF1bHQoKTsKICAgIGluaXRfdmVjdG9yX3NxdWFyZSgpOwogICAgaW5pdF92ZWdhbigpOwogICAgaW5pdF92ZW5ldGlhbl9tYXNrKCk7CiAgICBpbml0X3ZlbnVzKCk7CiAgICBpbml0X3ZlbnVzX2FuZF9tYXJzKCk7CiAgICBpbml0X3ZpYnJhdGVfb2ZmKCk7CiAgICBpbml0X3ZpYnJhdGUoKTsKICAgIGluaXRfdmlkZW9fb2ZmKCk7CiAgICBpbml0X3ZpZGVvKCk7CiAgICBpbml0X3ZvaWNlbWFpbCgpOwogICAgaW5pdF92aWRlb3RhcGUoKTsKICAgIGluaXRfdmlldygpOwogICAgaW5pdF92b2xsZXliYWxsKCk7CiAgICBpbml0X3ZvbHVtZV8xKCk7CiAgICBpbml0X3ZvbHVtZV8yKCk7CiAgICBpbml0X3ZvbHVtZV9vZmYoKTsKICAgIGluaXRfdm9sdW1lX3goKTsKICAgIGluaXRfdm9sdW1lKCk7CiAgICBpbml0X3ZvdGUoKTsKICAgIGluaXRfd2FsbGV0X21pbmltYWwoKTsKICAgIGluaXRfd2FsbGV0X2NhcmRzKCk7CiAgICBpbml0X3dhbGxldCgpOwogICAgaW5pdF93YWxscGFwZXIoKTsKICAgIGluaXRfd2FuZF9zcGFya2xlcygpOwogICAgaW5pdF93YW5kKCk7CiAgICBpbml0X3dhcmVob3VzZSgpOwogICAgaW5pdF93YXNoaW5nX21hY2hpbmUoKTsKICAgIGluaXRfd2F0Y2goKTsKICAgIGluaXRfd2F2ZXNfYXJyb3dfZG93bigpOwogICAgaW5pdF93YXZlc19hcnJvd191cCgpOwogICAgaW5pdF93YXZlc19sYWRkZXIoKTsKICAgIGluaXRfd2F2ZXMoKTsKICAgIGluaXRfd2F5cG9pbnRzKCk7CiAgICBpbml0X3dlYmNhbSgpOwogICAgaW5pdF93ZWJob29rX29mZigpOwogICAgaW5pdF93ZWJob29rKCk7CiAgICBpbml0X3dlaWdodF90aWxkZSgpOwogICAgaW5pdF93ZWlnaHQoKTsKICAgIGluaXRfd2hlYXRfb2ZmKCk7CiAgICBpbml0X3doZWF0KCk7CiAgICBpbml0X3dob2xlX3dvcmQoKTsKICAgIGluaXRfd2lmaV9jb2coKTsKICAgIGluaXRfd2lmaV9sb3coKTsKICAgIGluaXRfd2lmaV9oaWdoKCk7CiAgICBpbml0X3dpZmlfb2ZmKCk7CiAgICBpbml0X3dpZmlfcGVuKCk7CiAgICBpbml0X3dpZmlfc3luYygpOwogICAgaW5pdF93aWZpX3plcm8oKTsKICAgIGluaXRfd2lmaSgpOwogICAgaW5pdF93aW5kX2Fycm93X2Rvd24oKTsKICAgIGluaXRfd2luZCgpOwogICAgaW5pdF93aW5lX29mZigpOwogICAgaW5pdF93aW5lKCk7CiAgICBpbml0X3dvcm0oKTsKICAgIGluaXRfd29ya2Zsb3coKTsKICAgIGluaXRfd3JlbmNoKCk7CiAgICBpbml0X3goKTsKICAgIGluaXRfeW91dHViZSgpOwogICAgaW5pdF96YXBfb2ZmKCk7CiAgICBpbml0X3phcCgpOwogICAgaW5pdF96b29tX2luKCk7CiAgICBpbml0X3pvb21fb3V0KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9sdWNpZGVAMC41NjIuMC9ub2RlX21vZHVsZXMvbHVjaWRlL2Rpc3QvZXNtL2x1Y2lkZS5qcwp2YXIgbHVjaWRlX2V4cG9ydHMgPSB7fTsKX19leHBvcnQobHVjaWRlX2V4cG9ydHMsIHsKICBBQXJyb3dEb3duOiAoKSA9PiBBQXJyb3dEb3duLAogIEFBcnJvd1VwOiAoKSA9PiBBQXJyb3dVcCwKICBBTGFyZ2VTbWFsbDogKCkgPT4gQUxhcmdlU21hbGwsCiAgQWNjZXNzaWJpbGl0eTogKCkgPT4gQWNjZXNzaWJpbGl0eSwKICBBY3Rpdml0eTogKCkgPT4gQWN0aXZpdHksCiAgQWN0aXZpdHlTcXVhcmU6ICgpID0+IFNxdWFyZUFjdGl2aXR5LAogIEFpclZlbnQ6ICgpID0+IEFpclZlbnQsCiAgQWlycGxheTogKCkgPT4gQWlycGxheSwKICBBbGFybUNoZWNrOiAoKSA9PiBBbGFybUNsb2NrQ2hlY2ssCiAgQWxhcm1DbG9jazogKCkgPT4gQWxhcm1DbG9jaywKICBBbGFybUNsb2NrQ2hlY2s6ICgpID0+IEFsYXJtQ2xvY2tDaGVjaywKICBBbGFybUNsb2NrTWludXM6ICgpID0+IEFsYXJtQ2xvY2tNaW51cywKICBBbGFybUNsb2NrT2ZmOiAoKSA9PiBBbGFybUNsb2NrT2ZmLAogIEFsYXJtQ2xvY2tQbHVzOiAoKSA9PiBBbGFybUNsb2NrUGx1cywKICBBbGFybU1pbnVzOiAoKSA9PiBBbGFybUNsb2NrTWludXMsCiAgQWxhcm1QbHVzOiAoKSA9PiBBbGFybUNsb2NrUGx1cywKICBBbGFybVNtb2tlOiAoKSA9PiBBbGFybVNtb2tlLAogIEFsYnVtOiAoKSA9PiBBbGJ1bSwKICBBbGVydENpcmNsZTogKCkgPT4gQ2lyY2xlQWxlcnQsCiAgQWxlcnRPY3RhZ29uOiAoKSA9PiBPY3RhZ29uQWxlcnQsCiAgQWxlcnRUcmlhbmdsZTogKCkgPT4gVHJpYW5nbGVBbGVydCwKICBBbGlnbkNlbnRlcjogKCkgPT4gVGV4dEFsaWduQ2VudGVyLAogIEFsaWduQ2VudGVySG9yaXpvbnRhbDogKCkgPT4gQWxpZ25DZW50ZXJIb3Jpem9udGFsLAogIEFsaWduQ2VudGVyVmVydGljYWw6ICgpID0+IEFsaWduQ2VudGVyVmVydGljYWwsCiAgQWxpZ25FbmRIb3Jpem9udGFsOiAoKSA9PiBBbGlnbkVuZEhvcml6b250YWwsCiAgQWxpZ25FbmRWZXJ0aWNhbDogKCkgPT4gQWxpZ25FbmRWZXJ0aWNhbCwKICBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyOiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlQ2VudGVyLAogIEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQ6ICgpID0+IEFsaWduSG9yaXpvbnRhbERpc3RyaWJ1dGVFbmQsCiAgQWxpZ25Ib3Jpem9udGFsRGlzdHJpYnV0ZVN0YXJ0OiAoKSA9PiBBbGlnbkhvcml6b250YWxEaXN0cmlidXRlU3RhcnQsCiAgQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlcjogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeUNlbnRlciwKICBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxKdXN0aWZ5RW5kLAogIEFsaWduSG9yaXpvbnRhbEp1c3RpZnlTdGFydDogKCkgPT4gQWxpZ25Ib3Jpem9udGFsSnVzdGlmeVN0YXJ0LAogIEFsaWduSG9yaXpvbnRhbFNwYWNlQXJvdW5kOiAoKSA9PiBBbGlnbkhvcml6b250YWxTcGFjZUFyb3VuZCwKICBBbGlnbkhvcml6b250YWxTcGFjZUJldHdlZW46ICgpID0+IEFsaWduSG9yaXpvbnRhbFNwYWNlQmV0d2VlbiwKICBBbGlnbkp1c3RpZnk6ICgpID0+IFRleHRBbGlnbkp1c3RpZnksCiAgQWxpZ25MZWZ0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBBbGlnblJpZ2h0OiAoKSA9PiBUZXh0QWxpZ25FbmQsCiAgQWxpZ25TdGFydEhvcml6b250YWw6ICgpID0+IEFsaWduU3RhcnRIb3Jpem9udGFsLAogIEFsaWduU3RhcnRWZXJ0aWNhbDogKCkgPT4gQWxpZ25TdGFydFZlcnRpY2FsLAogIEFsaWduVmVydGljYWxEaXN0cmlidXRlQ2VudGVyOiAoKSA9PiBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUNlbnRlciwKICBBbGlnblZlcnRpY2FsRGlzdHJpYnV0ZUVuZDogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVFbmQsCiAgQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydDogKCkgPT4gQWxpZ25WZXJ0aWNhbERpc3RyaWJ1dGVTdGFydCwKICBBbGlnblZlcnRpY2FsSnVzdGlmeUNlbnRlcjogKCkgPT4gQWxpZ25WZXJ0aWNhbEp1c3RpZnlDZW50ZXIsCiAgQWxpZ25WZXJ0aWNhbEp1c3RpZnlFbmQ6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5RW5kLAogIEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQ6ICgpID0+IEFsaWduVmVydGljYWxKdXN0aWZ5U3RhcnQsCiAgQWxpZ25WZXJ0aWNhbFNwYWNlQXJvdW5kOiAoKSA9PiBBbGlnblZlcnRpY2FsU3BhY2VBcm91bmQsCiAgQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbjogKCkgPT4gQWxpZ25WZXJ0aWNhbFNwYWNlQmV0d2VlbiwKICBBbWJ1bGFuY2U6ICgpID0+IEFtYnVsYW5jZSwKICBBbXBlcnNhbmQ6ICgpID0+IEFtcGVyc2FuZCwKICBBbXBlcnNhbmRzOiAoKSA9PiBBbXBlcnNhbmRzLAogIEFtcGhvcmE6ICgpID0+IEFtcGhvcmEsCiAgQW5jaG9yOiAoKSA9PiBBbmNob3IsCiAgQW5ncnk6ICgpID0+IEFuZ3J5LAogIEFubm95ZWQ6ICgpID0+IEFubm95ZWQsCiAgQW50ZW5uYTogKCkgPT4gQW50ZW5uYSwKICBBbnZpbDogKCkgPT4gQW52aWwsCiAgQXBlcnR1cmU6ICgpID0+IEFwZXJ0dXJlLAogIEFwcFdpbmRvdzogKCkgPT4gQXBwV2luZG93LAogIEFwcFdpbmRvd01hYzogKCkgPT4gQXBwV2luZG93TWFjLAogIEFwcGxlOiAoKSA9PiBBcHBsZSwKICBBcmNoaXZlOiAoKSA9PiBBcmNoaXZlLAogIEFyY2hpdmVSZXN0b3JlOiAoKSA9PiBBcmNoaXZlUmVzdG9yZSwKICBBcmNoaXZlWDogKCkgPT4gQXJjaGl2ZVgsCiAgQXJlYUNoYXJ0OiAoKSA9PiBDaGFydEFyZWEsCiAgQXJtY2hhaXI6ICgpID0+IEFybWNoYWlyLAogIEFycm93QmlnRG93bjogKCkgPT4gQXJyb3dCaWdEb3duLAogIEFycm93QmlnRG93bkRhc2g6ICgpID0+IEFycm93QmlnRG93bkRhc2gsCiAgQXJyb3dCaWdMZWZ0OiAoKSA9PiBBcnJvd0JpZ0xlZnQsCiAgQXJyb3dCaWdMZWZ0RGFzaDogKCkgPT4gQXJyb3dCaWdMZWZ0RGFzaCwKICBBcnJvd0JpZ1JpZ2h0OiAoKSA9PiBBcnJvd0JpZ1JpZ2h0LAogIEFycm93QmlnUmlnaHREYXNoOiAoKSA9PiBBcnJvd0JpZ1JpZ2h0RGFzaCwKICBBcnJvd0JpZ1VwOiAoKSA9PiBBcnJvd0JpZ1VwLAogIEFycm93QmlnVXBEYXNoOiAoKSA9PiBBcnJvd0JpZ1VwRGFzaCwKICBBcnJvd0Rvd246ICgpID0+IEFycm93RG93biwKICBBcnJvd0Rvd24wMTogKCkgPT4gQXJyb3dEb3duMDEsCiAgQXJyb3dEb3duMTA6ICgpID0+IEFycm93RG93bjEwLAogIEFycm93RG93bkFaOiAoKSA9PiBBcnJvd0Rvd25BWiwKICBBcnJvd0Rvd25BejogKCkgPT4gQXJyb3dEb3duQVosCiAgQXJyb3dEb3duQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd0Rvd24sCiAgQXJyb3dEb3duRnJvbUxpbmU6ICgpID0+IEFycm93RG93bkZyb21MaW5lLAogIEFycm93RG93bkxlZnQ6ICgpID0+IEFycm93RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdEZyb21TcXVhcmU6ICgpID0+IFNxdWFyZUFycm93T3V0RG93bkxlZnQsCiAgQXJyb3dEb3duTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dEb3duTGVmdCwKICBBcnJvd0Rvd25OYXJyb3dXaWRlOiAoKSA9PiBBcnJvd0Rvd25OYXJyb3dXaWRlLAogIEFycm93RG93blJpZ2h0OiAoKSA9PiBBcnJvd0Rvd25SaWdodCwKICBBcnJvd0Rvd25SaWdodEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0RG93blJpZ2h0LAogIEFycm93RG93blJpZ2h0RnJvbVNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgQXJyb3dEb3duUmlnaHRTcXVhcmU6ICgpID0+IFNxdWFyZUFycm93RG93blJpZ2h0LAogIEFycm93RG93blNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dEb3duLAogIEFycm93RG93blRvRG90OiAoKSA9PiBBcnJvd0Rvd25Ub0RvdCwKICBBcnJvd0Rvd25Ub0xpbmU6ICgpID0+IEFycm93RG93blRvTGluZSwKICBBcnJvd0Rvd25VcDogKCkgPT4gQXJyb3dEb3duVXAsCiAgQXJyb3dEb3duV2lkZU5hcnJvdzogKCkgPT4gQXJyb3dEb3duV2lkZU5hcnJvdywKICBBcnJvd0Rvd25aQTogKCkgPT4gQXJyb3dEb3duWkEsCiAgQXJyb3dEb3duWmE6ICgpID0+IEFycm93RG93blpBLAogIEFycm93TGVmdDogKCkgPT4gQXJyb3dMZWZ0LAogIEFycm93TGVmdENpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dMZWZ0LAogIEFycm93TGVmdEZyb21MaW5lOiAoKSA9PiBBcnJvd0xlZnRGcm9tTGluZSwKICBBcnJvd0xlZnRSaWdodDogKCkgPT4gQXJyb3dMZWZ0UmlnaHQsCiAgQXJyb3dMZWZ0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd0xlZnQsCiAgQXJyb3dMZWZ0VG9MaW5lOiAoKSA9PiBBcnJvd0xlZnRUb0xpbmUsCiAgQXJyb3dSaWdodDogKCkgPT4gQXJyb3dSaWdodCwKICBBcnJvd1JpZ2h0Q2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd1JpZ2h0LAogIEFycm93UmlnaHRGcm9tTGluZTogKCkgPT4gQXJyb3dSaWdodEZyb21MaW5lLAogIEFycm93UmlnaHRMZWZ0OiAoKSA9PiBBcnJvd1JpZ2h0TGVmdCwKICBBcnJvd1JpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd1JpZ2h0LAogIEFycm93UmlnaHRUb0xpbmU6ICgpID0+IEFycm93UmlnaHRUb0xpbmUsCiAgQXJyb3dVcDogKCkgPT4gQXJyb3dVcCwKICBBcnJvd1VwMDE6ICgpID0+IEFycm93VXAwMSwKICBBcnJvd1VwMTA6ICgpID0+IEFycm93VXAxMCwKICBBcnJvd1VwQVo6ICgpID0+IEFycm93VXBBWiwKICBBcnJvd1VwQXo6ICgpID0+IEFycm93VXBBWiwKICBBcnJvd1VwQ2lyY2xlOiAoKSA9PiBDaXJjbGVBcnJvd1VwLAogIEFycm93VXBEb3duOiAoKSA9PiBBcnJvd1VwRG93biwKICBBcnJvd1VwRnJvbURvdDogKCkgPT4gQXJyb3dVcEZyb21Eb3QsCiAgQXJyb3dVcEZyb21MaW5lOiAoKSA9PiBBcnJvd1VwRnJvbUxpbmUsCiAgQXJyb3dVcExlZnQ6ICgpID0+IEFycm93VXBMZWZ0LAogIEFycm93VXBMZWZ0RnJvbUNpcmNsZTogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcExlZnQsCiAgQXJyb3dVcExlZnRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dFVwTGVmdCwKICBBcnJvd1VwTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcExlZnQsCiAgQXJyb3dVcE5hcnJvd1dpZGU6ICgpID0+IEFycm93VXBOYXJyb3dXaWRlLAogIEFycm93VXBSaWdodDogKCkgPT4gQXJyb3dVcFJpZ2h0LAogIEFycm93VXBSaWdodEZyb21DaXJjbGU6ICgpID0+IENpcmNsZUFycm93T3V0VXBSaWdodCwKICBBcnJvd1VwUmlnaHRGcm9tU3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd091dFVwUmlnaHQsCiAgQXJyb3dVcFJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgQXJyb3dVcFNxdWFyZTogKCkgPT4gU3F1YXJlQXJyb3dVcCwKICBBcnJvd1VwVG9MaW5lOiAoKSA9PiBBcnJvd1VwVG9MaW5lLAogIEFycm93VXBXaWRlTmFycm93OiAoKSA9PiBBcnJvd1VwV2lkZU5hcnJvdywKICBBcnJvd1VwWkE6ICgpID0+IEFycm93VXBaQSwKICBBcnJvd1VwWmE6ICgpID0+IEFycm93VXBaQSwKICBBcnJvd3NVcEZyb21MaW5lOiAoKSA9PiBBcnJvd3NVcEZyb21MaW5lLAogIEFzdGVyaXNrOiAoKSA9PiBBc3RlcmlzaywKICBBc3Rlcmlza1NxdWFyZTogKCkgPT4gU3F1YXJlQXN0ZXJpc2ssCiAgQXRTaWduOiAoKSA9PiBBdFNpZ24sCiAgQXRvbTogKCkgPT4gQXRvbSwKICBBdWRpb0xpbmVzOiAoKSA9PiBBdWRpb0xpbmVzLAogIEF1ZGlvV2F2ZWZvcm06ICgpID0+IEF1ZGlvV2F2ZWZvcm0sCiAgQXdhcmQ6ICgpID0+IEF3YXJkLAogIEF4ZTogKCkgPT4gQXhlLAogIEF4aXMzRDogKCkgPT4gQXhpczNkLAogIEF4aXMzZDogKCkgPT4gQXhpczNkLAogIEJhYnk6ICgpID0+IEJhYnksCiAgQmFja3BhY2s6ICgpID0+IEJhY2twYWNrLAogIEJhZGdlOiAoKSA9PiBCYWRnZSwKICBCYWRnZUFsZXJ0OiAoKSA9PiBCYWRnZUFsZXJ0LAogIEJhZGdlQ2VudDogKCkgPT4gQmFkZ2VDZW50LAogIEJhZGdlQ2hlY2s6ICgpID0+IEJhZGdlQ2hlY2ssCiAgQmFkZ2VEb2xsYXJTaWduOiAoKSA9PiBCYWRnZURvbGxhclNpZ24sCiAgQmFkZ2VFdXJvOiAoKSA9PiBCYWRnZUV1cm8sCiAgQmFkZ2VIZWxwOiAoKSA9PiBCYWRnZVF1ZXN0aW9uTWFyaywKICBCYWRnZUluZGlhblJ1cGVlOiAoKSA9PiBCYWRnZUluZGlhblJ1cGVlLAogIEJhZGdlSW5mbzogKCkgPT4gQmFkZ2VJbmZvLAogIEJhZGdlSmFwYW5lc2VZZW46ICgpID0+IEJhZGdlSmFwYW5lc2VZZW4sCiAgQmFkZ2VNaW51czogKCkgPT4gQmFkZ2VNaW51cywKICBCYWRnZVBlcmNlbnQ6ICgpID0+IEJhZGdlUGVyY2VudCwKICBCYWRnZVBsdXM6ICgpID0+IEJhZGdlUGx1cywKICBCYWRnZVBvdW5kU3Rlcmxpbmc6ICgpID0+IEJhZGdlUG91bmRTdGVybGluZywKICBCYWRnZVF1ZXN0aW9uTWFyazogKCkgPT4gQmFkZ2VRdWVzdGlvbk1hcmssCiAgQmFkZ2VSdXNzaWFuUnVibGU6ICgpID0+IEJhZGdlUnVzc2lhblJ1YmxlLAogIEJhZGdlU3dpc3NGcmFuYzogKCkgPT4gQmFkZ2VTd2lzc0ZyYW5jLAogIEJhZGdlVHVya2lzaExpcmE6ICgpID0+IEJhZGdlVHVya2lzaExpcmEsCiAgQmFkZ2VYOiAoKSA9PiBCYWRnZVgsCiAgQmFnZ2FnZUNsYWltOiAoKSA9PiBCYWdnYWdlQ2xhaW0sCiAgQmFsbG9vbjogKCkgPT4gQmFsbG9vbiwKICBCYW46ICgpID0+IEJhbiwKICBCYW5hbmE6ICgpID0+IEJhbmFuYSwKICBCYW5kYWdlOiAoKSA9PiBCYW5kYWdlLAogIEJhbmtub3RlOiAoKSA9PiBCYW5rbm90ZSwKICBCYW5rbm90ZUFycm93RG93bjogKCkgPT4gQmFua25vdGVBcnJvd0Rvd24sCiAgQmFua25vdGVBcnJvd1VwOiAoKSA9PiBCYW5rbm90ZUFycm93VXAsCiAgQmFua25vdGVYOiAoKSA9PiBCYW5rbm90ZVgsCiAgQmFyQ2hhcnQ6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZywKICBCYXJDaGFydDI6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uLAogIEJhckNoYXJ0MzogKCkgPT4gQ2hhcnRDb2x1bW4sCiAgQmFyQ2hhcnQ0OiAoKSA9PiBDaGFydENvbHVtbkluY3JlYXNpbmcsCiAgQmFyQ2hhcnRCaWc6ICgpID0+IENoYXJ0Q29sdW1uQmlnLAogIEJhckNoYXJ0SG9yaXpvbnRhbDogKCkgPT4gQ2hhcnRCYXIsCiAgQmFyQ2hhcnRIb3Jpem9udGFsQmlnOiAoKSA9PiBDaGFydEJhckJpZywKICBCYXJjb2RlOiAoKSA9PiBCYXJjb2RlLAogIEJhcnJlbDogKCkgPT4gQmFycmVsLAogIEJhc2VsaW5lOiAoKSA9PiBCYXNlbGluZSwKICBCYXRoOiAoKSA9PiBCYXRoLAogIEJhdHRlcnk6ICgpID0+IEJhdHRlcnksCiAgQmF0dGVyeUNoYXJnaW5nOiAoKSA9PiBCYXR0ZXJ5Q2hhcmdpbmcsCiAgQmF0dGVyeUZ1bGw6ICgpID0+IEJhdHRlcnlGdWxsLAogIEJhdHRlcnlMb3c6ICgpID0+IEJhdHRlcnlMb3csCiAgQmF0dGVyeU1lZGl1bTogKCkgPT4gQmF0dGVyeU1lZGl1bSwKICBCYXR0ZXJ5UGx1czogKCkgPT4gQmF0dGVyeVBsdXMsCiAgQmF0dGVyeVdhcm5pbmc6ICgpID0+IEJhdHRlcnlXYXJuaW5nLAogIEJlYWtlcjogKCkgPT4gQmVha2VyLAogIEJlYW46ICgpID0+IEJlYW4sCiAgQmVhbk9mZjogKCkgPT4gQmVhbk9mZiwKICBCZWQ6ICgpID0+IEJlZCwKICBCZWREb3VibGU6ICgpID0+IEJlZERvdWJsZSwKICBCZWRTaW5nbGU6ICgpID0+IEJlZFNpbmdsZSwKICBCZWVmOiAoKSA9PiBCZWVmLAogIEJlZXI6ICgpID0+IEJlZXIsCiAgQmVlck9mZjogKCkgPT4gQmVlck9mZiwKICBCZWxsOiAoKSA9PiBCZWxsLAogIEJlbGxEb3Q6ICgpID0+IEJlbGxEb3QsCiAgQmVsbEVsZWN0cmljOiAoKSA9PiBCZWxsRWxlY3RyaWMsCiAgQmVsbE1pbnVzOiAoKSA9PiBCZWxsTWludXMsCiAgQmVsbE9mZjogKCkgPT4gQmVsbE9mZiwKICBCZWxsUGx1czogKCkgPT4gQmVsbFBsdXMsCiAgQmVsbFJpbmc6ICgpID0+IEJlbGxSaW5nLAogIEJldHdlZW5Ib3Jpem9uYWxFbmQ6ICgpID0+IEJldHdlZW5Ib3Jpem9udGFsRW5kLAogIEJldHdlZW5Ib3Jpem9uYWxTdGFydDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICBCZXR3ZWVuSG9yaXpvbnRhbEVuZDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxFbmQsCiAgQmV0d2Vlbkhvcml6b250YWxTdGFydDogKCkgPT4gQmV0d2Vlbkhvcml6b250YWxTdGFydCwKICBCZXR3ZWVuVmVydGljYWxFbmQ6ICgpID0+IEJldHdlZW5WZXJ0aWNhbEVuZCwKICBCZXR3ZWVuVmVydGljYWxTdGFydDogKCkgPT4gQmV0d2VlblZlcnRpY2FsU3RhcnQsCiAgQmljZXBzRmxleGVkOiAoKSA9PiBCaWNlcHNGbGV4ZWQsCiAgQmlrZTogKCkgPT4gQmlrZSwKICBCaW5hcnk6ICgpID0+IEJpbmFyeSwKICBCaW5vY3VsYXJzOiAoKSA9PiBCaW5vY3VsYXJzLAogIEJpb2hhemFyZDogKCkgPT4gQmlvaGF6YXJkLAogIEJpcmQ6ICgpID0+IEJpcmQsCiAgQmlyZGhvdXNlOiAoKSA9PiBCaXJkaG91c2UsCiAgQml0Y29pbjogKCkgPT4gQml0Y29pbiwKICBCbGVuZDogKCkgPT4gQmxlbmQsCiAgQmxpbmRzOiAoKSA9PiBCbGluZHMsCiAgQmxvY2tzOiAoKSA9PiBCbG9ja3MsCiAgQmx1ZXRvb3RoOiAoKSA9PiBCbHVldG9vdGgsCiAgQmx1ZXRvb3RoQ29ubmVjdGVkOiAoKSA9PiBCbHVldG9vdGhDb25uZWN0ZWQsCiAgQmx1ZXRvb3RoT2ZmOiAoKSA9PiBCbHVldG9vdGhPZmYsCiAgQmx1ZXRvb3RoU2VhcmNoaW5nOiAoKSA9PiBCbHVldG9vdGhTZWFyY2hpbmcsCiAgQm9sZDogKCkgPT4gQm9sZCwKICBCb2x0OiAoKSA9PiBCb2x0LAogIEJvbWI6ICgpID0+IEJvbWIsCiAgQm9uZTogKCkgPT4gQm9uZSwKICBCb29rOiAoKSA9PiBCb29rLAogIEJvb2tBOiAoKSA9PiBCb29rQSwKICBCb29rQWxlcnQ6ICgpID0+IEJvb2tBbGVydCwKICBCb29rQXVkaW86ICgpID0+IEJvb2tBdWRpbywKICBCb29rQ2hlY2s6ICgpID0+IEJvb2tDaGVjaywKICBCb29rQ29weTogKCkgPT4gQm9va0NvcHksCiAgQm9va0Rhc2hlZDogKCkgPT4gQm9va0Rhc2hlZCwKICBCb29rRG93bjogKCkgPT4gQm9va0Rvd24sCiAgQm9va0hlYWRwaG9uZXM6ICgpID0+IEJvb2tIZWFkcGhvbmVzLAogIEJvb2tIZWFydDogKCkgPT4gQm9va0hlYXJ0LAogIEJvb2tJbWFnZTogKCkgPT4gQm9va0ltYWdlLAogIEJvb2tLZXk6ICgpID0+IEJvb2tLZXksCiAgQm9va0xvY2s6ICgpID0+IEJvb2tMb2NrLAogIEJvb2tNYXJrZWQ6ICgpID0+IEJvb2tNYXJrZWQsCiAgQm9va01pbnVzOiAoKSA9PiBCb29rTWludXMsCiAgQm9va09wZW46ICgpID0+IEJvb2tPcGVuLAogIEJvb2tPcGVuQ2hlY2s6ICgpID0+IEJvb2tPcGVuQ2hlY2ssCiAgQm9va09wZW5UZXh0OiAoKSA9PiBCb29rT3BlblRleHQsCiAgQm9va1BsdXM6ICgpID0+IEJvb2tQbHVzLAogIEJvb2tTZWFyY2g6ICgpID0+IEJvb2tTZWFyY2gsCiAgQm9va1RlbXBsYXRlOiAoKSA9PiBCb29rRGFzaGVkLAogIEJvb2tUZXh0OiAoKSA9PiBCb29rVGV4dCwKICBCb29rVHlwZTogKCkgPT4gQm9va1R5cGUsCiAgQm9va1VwOiAoKSA9PiBCb29rVXAsCiAgQm9va1VwMjogKCkgPT4gQm9va1VwMiwKICBCb29rVXNlcjogKCkgPT4gQm9va1VzZXIsCiAgQm9va1g6ICgpID0+IEJvb2tYLAogIEJvb2ttYXJrOiAoKSA9PiBCb29rbWFyaywKICBCb29rbWFya0NoZWNrOiAoKSA9PiBCb29rbWFya0NoZWNrLAogIEJvb2ttYXJrTWludXM6ICgpID0+IEJvb2ttYXJrTWludXMsCiAgQm9va21hcmtQbHVzOiAoKSA9PiBCb29rbWFya1BsdXMsCiAgQm9va21hcmtYOiAoKSA9PiBCb29rbWFya1gsCiAgQm9vbUJveDogKCkgPT4gQm9vbUJveCwKICBCb3Q6ICgpID0+IEJvdCwKICBCb3RNZXNzYWdlU3F1YXJlOiAoKSA9PiBCb3RNZXNzYWdlU3F1YXJlLAogIEJvdE9mZjogKCkgPT4gQm90T2ZmLAogIEJvdHRsZVdpbmU6ICgpID0+IEJvdHRsZVdpbmUsCiAgQm93QXJyb3c6ICgpID0+IEJvd0Fycm93LAogIEJveDogKCkgPT4gQm94LAogIEJveFNlbGVjdDogKCkgPT4gU3F1YXJlRGFzaGVkLAogIEJveGVzOiAoKSA9PiBCb3hlcywKICBCcmFjZXM6ICgpID0+IEJyYWNlcywKICBCcmFja2V0czogKCkgPT4gQnJhY2tldHMsCiAgQnJhaW46ICgpID0+IEJyYWluLAogIEJyYWluQ2lyY3VpdDogKCkgPT4gQnJhaW5DaXJjdWl0LAogIEJyYWluQ29nOiAoKSA9PiBCcmFpbkNvZywKICBCcmlja1dhbGw6ICgpID0+IEJyaWNrV2FsbCwKICBCcmlja1dhbGxGaXJlOiAoKSA9PiBCcmlja1dhbGxGaXJlLAogIEJyaWNrV2FsbFNoaWVsZDogKCkgPT4gQnJpY2tXYWxsU2hpZWxkLAogIEJyaWVmY2FzZTogKCkgPT4gQnJpZWZjYXNlLAogIEJyaWVmY2FzZUJ1c2luZXNzOiAoKSA9PiBCcmllZmNhc2VCdXNpbmVzcywKICBCcmllZmNhc2VDb252ZXlvckJlbHQ6ICgpID0+IEJyaWVmY2FzZUNvbnZleW9yQmVsdCwKICBCcmllZmNhc2VNZWRpY2FsOiAoKSA9PiBCcmllZmNhc2VNZWRpY2FsLAogIEJyaW5nVG9Gcm9udDogKCkgPT4gQnJpbmdUb0Zyb250LAogIEJydXNoOiAoKSA9PiBCcnVzaCwKICBCcnVzaENsZWFuaW5nOiAoKSA9PiBCcnVzaENsZWFuaW5nLAogIEJ1YmJsZXM6ICgpID0+IEJ1YmJsZXMsCiAgQnVnOiAoKSA9PiBCdWcsCiAgQnVnT2ZmOiAoKSA9PiBCdWdPZmYsCiAgQnVnUGxheTogKCkgPT4gQnVnUGxheSwKICBCdWlsZGluZzogKCkgPT4gQnVpbGRpbmcsCiAgQnVpbGRpbmcyOiAoKSA9PiBCdWlsZGluZzIsCiAgQnVzOiAoKSA9PiBCdXMsCiAgQnVzRnJvbnQ6ICgpID0+IEJ1c0Zyb250LAogIENhYmxlOiAoKSA9PiBDYWJsZSwKICBDYWJsZUNhcjogKCkgPT4gQ2FibGVDYXIsCiAgQ2FrZTogKCkgPT4gQ2FrZSwKICBDYWtlU2xpY2U6ICgpID0+IENha2VTbGljZSwKICBDYWxjdWxhdG9yOiAoKSA9PiBDYWxjdWxhdG9yLAogIENhbGVuZGFyOiAoKSA9PiBDYWxlbmRhciwKICBDYWxlbmRhcjE6ICgpID0+IENhbGVuZGFyMSwKICBDYWxlbmRhckFycm93RG93bjogKCkgPT4gQ2FsZW5kYXJBcnJvd0Rvd24sCiAgQ2FsZW5kYXJBcnJvd1VwOiAoKSA9PiBDYWxlbmRhckFycm93VXAsCiAgQ2FsZW5kYXJDaGVjazogKCkgPT4gQ2FsZW5kYXJDaGVjaywKICBDYWxlbmRhckNoZWNrMjogKCkgPT4gQ2FsZW5kYXJDaGVjazIsCiAgQ2FsZW5kYXJDbG9jazogKCkgPT4gQ2FsZW5kYXJDbG9jaywKICBDYWxlbmRhckNvZzogKCkgPT4gQ2FsZW5kYXJDb2csCiAgQ2FsZW5kYXJEYXlzOiAoKSA9PiBDYWxlbmRhckRheXMsCiAgQ2FsZW5kYXJGb2xkOiAoKSA9PiBDYWxlbmRhckZvbGQsCiAgQ2FsZW5kYXJIZWFydDogKCkgPT4gQ2FsZW5kYXJIZWFydCwKICBDYWxlbmRhck1pbnVzOiAoKSA9PiBDYWxlbmRhck1pbnVzLAogIENhbGVuZGFyTWludXMyOiAoKSA9PiBDYWxlbmRhck1pbnVzMiwKICBDYWxlbmRhck9mZjogKCkgPT4gQ2FsZW5kYXJPZmYsCiAgQ2FsZW5kYXJQbHVzOiAoKSA9PiBDYWxlbmRhclBsdXMsCiAgQ2FsZW5kYXJQbHVzMjogKCkgPT4gQ2FsZW5kYXJQbHVzMiwKICBDYWxlbmRhclJhbmdlOiAoKSA9PiBDYWxlbmRhclJhbmdlLAogIENhbGVuZGFyU2VhcmNoOiAoKSA9PiBDYWxlbmRhclNlYXJjaCwKICBDYWxlbmRhclN5bmM6ICgpID0+IENhbGVuZGFyU3luYywKICBDYWxlbmRhclg6ICgpID0+IENhbGVuZGFyWCwKICBDYWxlbmRhclgyOiAoKSA9PiBDYWxlbmRhclgyLAogIENhbGVuZGFyczogKCkgPT4gQ2FsZW5kYXJzLAogIENhbWVyYTogKCkgPT4gQ2FtZXJhLAogIENhbWVyYU9mZjogKCkgPT4gQ2FtZXJhT2ZmLAogIENhbmRsZXN0aWNrQ2hhcnQ6ICgpID0+IENoYXJ0Q2FuZGxlc3RpY2ssCiAgQ2FuZHk6ICgpID0+IENhbmR5LAogIENhbmR5Q2FuZTogKCkgPT4gQ2FuZHlDYW5lLAogIENhbmR5T2ZmOiAoKSA9PiBDYW5keU9mZiwKICBDYW5uYWJpczogKCkgPT4gQ2FubmFiaXMsCiAgQ2FubmFiaXNPZmY6ICgpID0+IENhbm5hYmlzT2ZmLAogIENhcHRpb25zOiAoKSA9PiBDYXB0aW9ucywKICBDYXB0aW9uc09mZjogKCkgPT4gQ2FwdGlvbnNPZmYsCiAgQ2FyOiAoKSA9PiBDYXIsCiAgQ2FyRnJvbnQ6ICgpID0+IENhckZyb250LAogIENhclRheGlGcm9udDogKCkgPT4gQ2FyVGF4aUZyb250LAogIENhcmF2YW46ICgpID0+IENhcmF2YW4sCiAgQ2FyZFNpbTogKCkgPT4gQ2FyZFNpbSwKICBDYXJyb3Q6ICgpID0+IENhcnJvdCwKICBDYXNlTG93ZXI6ICgpID0+IENhc2VMb3dlciwKICBDYXNlU2Vuc2l0aXZlOiAoKSA9PiBDYXNlU2Vuc2l0aXZlLAogIENhc2VVcHBlcjogKCkgPT4gQ2FzZVVwcGVyLAogIENhc3NldHRlVGFwZTogKCkgPT4gQ2Fzc2V0dGVUYXBlLAogIENhc3Q6ICgpID0+IENhc3QsCiAgQ2FzdGxlOiAoKSA9PiBDYXN0bGUsCiAgQ2F0OiAoKSA9PiBDYXQsCiAgQ2N0djogKCkgPT4gQ2N0diwKICBDaGFydEFyZWE6ICgpID0+IENoYXJ0QXJlYSwKICBDaGFydEJhcjogKCkgPT4gQ2hhcnRCYXIsCiAgQ2hhcnRCYXJCaWc6ICgpID0+IENoYXJ0QmFyQmlnLAogIENoYXJ0QmFyRGVjcmVhc2luZzogKCkgPT4gQ2hhcnRCYXJEZWNyZWFzaW5nLAogIENoYXJ0QmFySW5jcmVhc2luZzogKCkgPT4gQ2hhcnRCYXJJbmNyZWFzaW5nLAogIENoYXJ0QmFyU3RhY2tlZDogKCkgPT4gQ2hhcnRCYXJTdGFja2VkLAogIENoYXJ0Q2FuZGxlc3RpY2s6ICgpID0+IENoYXJ0Q2FuZGxlc3RpY2ssCiAgQ2hhcnRDb2x1bW46ICgpID0+IENoYXJ0Q29sdW1uLAogIENoYXJ0Q29sdW1uQmlnOiAoKSA9PiBDaGFydENvbHVtbkJpZywKICBDaGFydENvbHVtbkRlY3JlYXNpbmc6ICgpID0+IENoYXJ0Q29sdW1uRGVjcmVhc2luZywKICBDaGFydENvbHVtbkluY3JlYXNpbmc6ICgpID0+IENoYXJ0Q29sdW1uSW5jcmVhc2luZywKICBDaGFydENvbHVtblN0YWNrZWQ6ICgpID0+IENoYXJ0Q29sdW1uU3RhY2tlZCwKICBDaGFydEdhbnR0OiAoKSA9PiBDaGFydEdhbnR0LAogIENoYXJ0TGluZTogKCkgPT4gQ2hhcnRMaW5lLAogIENoYXJ0TmV0d29yazogKCkgPT4gQ2hhcnROZXR3b3JrLAogIENoYXJ0Tm9BeGVzQ29sdW1uOiAoKSA9PiBDaGFydE5vQXhlc0NvbHVtbiwKICBDaGFydE5vQXhlc0NvbHVtbkRlY3JlYXNpbmc6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uRGVjcmVhc2luZywKICBDaGFydE5vQXhlc0NvbHVtbkluY3JlYXNpbmc6ICgpID0+IENoYXJ0Tm9BeGVzQ29sdW1uSW5jcmVhc2luZywKICBDaGFydE5vQXhlc0NvbWJpbmVkOiAoKSA9PiBDaGFydE5vQXhlc0NvbWJpbmVkLAogIENoYXJ0Tm9BeGVzR2FudHQ6ICgpID0+IENoYXJ0Tm9BeGVzR2FudHQsCiAgQ2hhcnRQaWU6ICgpID0+IENoYXJ0UGllLAogIENoYXJ0U2NhdHRlcjogKCkgPT4gQ2hhcnRTY2F0dGVyLAogIENoYXJ0U3BsaW5lOiAoKSA9PiBDaGFydFNwbGluZSwKICBDaGVjazogKCkgPT4gQ2hlY2ssCiAgQ2hlY2tDaGVjazogKCkgPT4gQ2hlY2tDaGVjaywKICBDaGVja0NpcmNsZTogKCkgPT4gQ2lyY2xlQ2hlY2tCaWcsCiAgQ2hlY2tDaXJjbGUyOiAoKSA9PiBDaXJjbGVDaGVjaywKICBDaGVja0xpbmU6ICgpID0+IENoZWNrTGluZSwKICBDaGVja1NxdWFyZTogKCkgPT4gU3F1YXJlQ2hlY2tCaWcsCiAgQ2hlY2tTcXVhcmUyOiAoKSA9PiBTcXVhcmVDaGVjaywKICBDaGVmSGF0OiAoKSA9PiBDaGVmSGF0LAogIENoZXJyeTogKCkgPT4gQ2hlcnJ5LAogIENoZXNzQmlzaG9wOiAoKSA9PiBDaGVzc0Jpc2hvcCwKICBDaGVzc0tpbmc6ICgpID0+IENoZXNzS2luZywKICBDaGVzc0tuaWdodDogKCkgPT4gQ2hlc3NLbmlnaHQsCiAgQ2hlc3NQYXduOiAoKSA9PiBDaGVzc1Bhd24sCiAgQ2hlc3NRdWVlbjogKCkgPT4gQ2hlc3NRdWVlbiwKICBDaGVzc1Jvb2s6ICgpID0+IENoZXNzUm9vaywKICBDaGV2cm9uRG93bjogKCkgPT4gQ2hldnJvbkRvd24sCiAgQ2hldnJvbkRvd25DaXJjbGU6ICgpID0+IENpcmNsZUNoZXZyb25Eb3duLAogIENoZXZyb25Eb3duU3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uRG93biwKICBDaGV2cm9uRmlyc3Q6ICgpID0+IENoZXZyb25GaXJzdCwKICBDaGV2cm9uTGFzdDogKCkgPT4gQ2hldnJvbkxhc3QsCiAgQ2hldnJvbkxlZnQ6ICgpID0+IENoZXZyb25MZWZ0LAogIENoZXZyb25MZWZ0Q2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uTGVmdCwKICBDaGV2cm9uTGVmdFNxdWFyZTogKCkgPT4gU3F1YXJlQ2hldnJvbkxlZnQsCiAgQ2hldnJvblJpZ2h0OiAoKSA9PiBDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblJpZ2h0Q2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblJpZ2h0U3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uUmlnaHQsCiAgQ2hldnJvblVwOiAoKSA9PiBDaGV2cm9uVXAsCiAgQ2hldnJvblVwQ2lyY2xlOiAoKSA9PiBDaXJjbGVDaGV2cm9uVXAsCiAgQ2hldnJvblVwU3F1YXJlOiAoKSA9PiBTcXVhcmVDaGV2cm9uVXAsCiAgQ2hldnJvbnNEb3duOiAoKSA9PiBDaGV2cm9uc0Rvd24sCiAgQ2hldnJvbnNEb3duVXA6ICgpID0+IENoZXZyb25zRG93blVwLAogIENoZXZyb25zTGVmdDogKCkgPT4gQ2hldnJvbnNMZWZ0LAogIENoZXZyb25zTGVmdFJpZ2h0OiAoKSA9PiBDaGV2cm9uc0xlZnRSaWdodCwKICBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzOiAoKSA9PiBDaGV2cm9uc0xlZnRSaWdodEVsbGlwc2lzLAogIENoZXZyb25zUmlnaHQ6ICgpID0+IENoZXZyb25zUmlnaHQsCiAgQ2hldnJvbnNSaWdodExlZnQ6ICgpID0+IENoZXZyb25zUmlnaHRMZWZ0LAogIENoZXZyb25zVXA6ICgpID0+IENoZXZyb25zVXAsCiAgQ2hldnJvbnNVcERvd246ICgpID0+IENoZXZyb25zVXBEb3duLAogIENocm9tZTogKCkgPT4gQ2hyb21pdW0sCiAgQ2hyb21pdW06ICgpID0+IENocm9taXVtLAogIENodXJjaDogKCkgPT4gQ2h1cmNoLAogIENpZ2FyZXR0ZTogKCkgPT4gQ2lnYXJldHRlLAogIENpZ2FyZXR0ZU9mZjogKCkgPT4gQ2lnYXJldHRlT2ZmLAogIENpcmNsZTogKCkgPT4gQ2lyY2xlLAogIENpcmNsZUFsZXJ0OiAoKSA9PiBDaXJjbGVBbGVydCwKICBDaXJjbGVBcnJvd0Rvd246ICgpID0+IENpcmNsZUFycm93RG93biwKICBDaXJjbGVBcnJvd0xlZnQ6ICgpID0+IENpcmNsZUFycm93TGVmdCwKICBDaXJjbGVBcnJvd091dERvd25MZWZ0OiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25MZWZ0LAogIENpcmNsZUFycm93T3V0RG93blJpZ2h0OiAoKSA9PiBDaXJjbGVBcnJvd091dERvd25SaWdodCwKICBDaXJjbGVBcnJvd091dFVwTGVmdDogKCkgPT4gQ2lyY2xlQXJyb3dPdXRVcExlZnQsCiAgQ2lyY2xlQXJyb3dPdXRVcFJpZ2h0OiAoKSA9PiBDaXJjbGVBcnJvd091dFVwUmlnaHQsCiAgQ2lyY2xlQXJyb3dSaWdodDogKCkgPT4gQ2lyY2xlQXJyb3dSaWdodCwKICBDaXJjbGVBcnJvd1VwOiAoKSA9PiBDaXJjbGVBcnJvd1VwLAogIENpcmNsZUNoZWNrOiAoKSA9PiBDaXJjbGVDaGVjaywKICBDaXJjbGVDaGVja0JpZzogKCkgPT4gQ2lyY2xlQ2hlY2tCaWcsCiAgQ2lyY2xlQ2hldnJvbkRvd246ICgpID0+IENpcmNsZUNoZXZyb25Eb3duLAogIENpcmNsZUNoZXZyb25MZWZ0OiAoKSA9PiBDaXJjbGVDaGV2cm9uTGVmdCwKICBDaXJjbGVDaGV2cm9uUmlnaHQ6ICgpID0+IENpcmNsZUNoZXZyb25SaWdodCwKICBDaXJjbGVDaGV2cm9uVXA6ICgpID0+IENpcmNsZUNoZXZyb25VcCwKICBDaXJjbGVEYXNoZWQ6ICgpID0+IENpcmNsZURhc2hlZCwKICBDaXJjbGVEaXZpZGU6ICgpID0+IENpcmNsZURpdmlkZSwKICBDaXJjbGVEb2xsYXJTaWduOiAoKSA9PiBDaXJjbGVEb2xsYXJTaWduLAogIENpcmNsZURvdDogKCkgPT4gQ2lyY2xlRG90LAogIENpcmNsZURvdERhc2hlZDogKCkgPT4gQ2lyY2xlRG90RGFzaGVkLAogIENpcmNsZUVsbGlwc2lzOiAoKSA9PiBDaXJjbGVFbGxpcHNpcywKICBDaXJjbGVFcXVhbDogKCkgPT4gQ2lyY2xlRXF1YWwsCiAgQ2lyY2xlRmFkaW5nQXJyb3dVcDogKCkgPT4gQ2lyY2xlRmFkaW5nQXJyb3dVcCwKICBDaXJjbGVGYWRpbmdQbHVzOiAoKSA9PiBDaXJjbGVGYWRpbmdQbHVzLAogIENpcmNsZUdhdWdlOiAoKSA9PiBDaXJjbGVHYXVnZSwKICBDaXJjbGVIZWxwOiAoKSA9PiBDaXJjbGVRdWVzdGlvbk1hcmssCiAgQ2lyY2xlTWludXM6ICgpID0+IENpcmNsZU1pbnVzLAogIENpcmNsZU9mZjogKCkgPT4gQ2lyY2xlT2ZmLAogIENpcmNsZVBhcmtpbmc6ICgpID0+IENpcmNsZVBhcmtpbmcsCiAgQ2lyY2xlUGFya2luZ09mZjogKCkgPT4gQ2lyY2xlUGFya2luZ09mZiwKICBDaXJjbGVQYXVzZTogKCkgPT4gQ2lyY2xlUGF1c2UsCiAgQ2lyY2xlUGVyY2VudDogKCkgPT4gQ2lyY2xlUGVyY2VudCwKICBDaXJjbGVQaWxlOiAoKSA9PiBDaXJjbGVQaWxlLAogIENpcmNsZVBsYXk6ICgpID0+IENpcmNsZVBsYXksCiAgQ2lyY2xlUGx1czogKCkgPT4gQ2lyY2xlUGx1cywKICBDaXJjbGVQb3VuZFN0ZXJsaW5nOiAoKSA9PiBDaXJjbGVQb3VuZFN0ZXJsaW5nLAogIENpcmNsZVBvd2VyOiAoKSA9PiBDaXJjbGVQb3dlciwKICBDaXJjbGVRdWVzdGlvbk1hcms6ICgpID0+IENpcmNsZVF1ZXN0aW9uTWFyaywKICBDaXJjbGVTbGFzaDogKCkgPT4gQ2lyY2xlU2xhc2gsCiAgQ2lyY2xlU2xhc2gyOiAoKSA9PiBDaXJjbGVTbGFzaDIsCiAgQ2lyY2xlU2xhc2hlZDogKCkgPT4gQ2lyY2xlU2xhc2gyLAogIENpcmNsZVNtYWxsOiAoKSA9PiBDaXJjbGVTbWFsbCwKICBDaXJjbGVTdGFyOiAoKSA9PiBDaXJjbGVTdGFyLAogIENpcmNsZVN0b3A6ICgpID0+IENpcmNsZVN0b3AsCiAgQ2lyY2xlVXNlcjogKCkgPT4gQ2lyY2xlVXNlciwKICBDaXJjbGVVc2VyUm91bmQ6ICgpID0+IENpcmNsZVVzZXJSb3VuZCwKICBDaXJjbGVYOiAoKSA9PiBDaXJjbGVYLAogIENpcmN1aXRCb2FyZDogKCkgPT4gQ2lyY3VpdEJvYXJkLAogIENpdHJ1czogKCkgPT4gQ2l0cnVzLAogIENsYXBwZXJib2FyZDogKCkgPT4gQ2xhcHBlcmJvYXJkLAogIENsaXBib2FyZDogKCkgPT4gQ2xpcGJvYXJkLAogIENsaXBib2FyZENoZWNrOiAoKSA9PiBDbGlwYm9hcmRDaGVjaywKICBDbGlwYm9hcmRDbG9jazogKCkgPT4gQ2xpcGJvYXJkQ2xvY2ssCiAgQ2xpcGJvYXJkQ29weTogKCkgPT4gQ2xpcGJvYXJkQ29weSwKICBDbGlwYm9hcmRFZGl0OiAoKSA9PiBDbGlwYm9hcmRQZW4sCiAgQ2xpcGJvYXJkTGlzdDogKCkgPT4gQ2xpcGJvYXJkTGlzdCwKICBDbGlwYm9hcmRNaW51czogKCkgPT4gQ2xpcGJvYXJkTWludXMsCiAgQ2xpcGJvYXJkUGFzdGU6ICgpID0+IENsaXBib2FyZFBhc3RlLAogIENsaXBib2FyZFBlbjogKCkgPT4gQ2xpcGJvYXJkUGVuLAogIENsaXBib2FyZFBlbkxpbmU6ICgpID0+IENsaXBib2FyZFBlbkxpbmUsCiAgQ2xpcGJvYXJkUGx1czogKCkgPT4gQ2xpcGJvYXJkUGx1cywKICBDbGlwYm9hcmRTaWduYXR1cmU6ICgpID0+IENsaXBib2FyZFBlbkxpbmUsCiAgQ2xpcGJvYXJkVHlwZTogKCkgPT4gQ2xpcGJvYXJkVHlwZSwKICBDbGlwYm9hcmRYOiAoKSA9PiBDbGlwYm9hcmRYLAogIENsb2NrOiAoKSA9PiBDbG9jaywKICBDbG9jazE6ICgpID0+IENsb2NrMSwKICBDbG9jazEwOiAoKSA9PiBDbG9jazEwLAogIENsb2NrMTE6ICgpID0+IENsb2NrMTEsCiAgQ2xvY2sxMjogKCkgPT4gQ2xvY2sxMiwKICBDbG9jazI6ICgpID0+IENsb2NrMiwKICBDbG9jazM6ICgpID0+IENsb2NrMywKICBDbG9jazQ6ICgpID0+IENsb2NrNCwKICBDbG9jazU6ICgpID0+IENsb2NrNSwKICBDbG9jazY6ICgpID0+IENsb2NrNiwKICBDbG9jazc6ICgpID0+IENsb2NrNywKICBDbG9jazg6ICgpID0+IENsb2NrOCwKICBDbG9jazk6ICgpID0+IENsb2NrOSwKICBDbG9ja0FsZXJ0OiAoKSA9PiBDbG9ja0FsZXJ0LAogIENsb2NrQXJyb3dEb3duOiAoKSA9PiBDbG9ja0Fycm93RG93biwKICBDbG9ja0Fycm93VXA6ICgpID0+IENsb2NrQXJyb3dVcCwKICBDbG9ja0NoZWNrOiAoKSA9PiBDbG9ja0NoZWNrLAogIENsb2NrRmFkaW5nOiAoKSA9PiBDbG9ja0ZhZGluZywKICBDbG9ja1BsdXM6ICgpID0+IENsb2NrUGx1cywKICBDbG9zZWRDYXB0aW9uOiAoKSA9PiBDbG9zZWRDYXB0aW9uLAogIENsb3VkOiAoKSA9PiBDbG91ZCwKICBDbG91ZEFsZXJ0OiAoKSA9PiBDbG91ZEFsZXJ0LAogIENsb3VkQmFja3VwOiAoKSA9PiBDbG91ZEJhY2t1cCwKICBDbG91ZENoZWNrOiAoKSA9PiBDbG91ZENoZWNrLAogIENsb3VkQ29nOiAoKSA9PiBDbG91ZENvZywKICBDbG91ZERvd25sb2FkOiAoKSA9PiBDbG91ZERvd25sb2FkLAogIENsb3VkRHJpenpsZTogKCkgPT4gQ2xvdWREcml6emxlLAogIENsb3VkRm9nOiAoKSA9PiBDbG91ZEZvZywKICBDbG91ZEhhaWw6ICgpID0+IENsb3VkSGFpbCwKICBDbG91ZExpZ2h0bmluZzogKCkgPT4gQ2xvdWRMaWdodG5pbmcsCiAgQ2xvdWRNb29uOiAoKSA9PiBDbG91ZE1vb24sCiAgQ2xvdWRNb29uUmFpbjogKCkgPT4gQ2xvdWRNb29uUmFpbiwKICBDbG91ZE9mZjogKCkgPT4gQ2xvdWRPZmYsCiAgQ2xvdWRSYWluOiAoKSA9PiBDbG91ZFJhaW4sCiAgQ2xvdWRSYWluV2luZDogKCkgPT4gQ2xvdWRSYWluV2luZCwKICBDbG91ZFNub3c6ICgpID0+IENsb3VkU25vdywKICBDbG91ZFN1bjogKCkgPT4gQ2xvdWRTdW4sCiAgQ2xvdWRTdW5SYWluOiAoKSA9PiBDbG91ZFN1blJhaW4sCiAgQ2xvdWRTeW5jOiAoKSA9PiBDbG91ZFN5bmMsCiAgQ2xvdWRVcGxvYWQ6ICgpID0+IENsb3VkVXBsb2FkLAogIENsb3VkeTogKCkgPT4gQ2xvdWR5LAogIENsb3ZlcjogKCkgPT4gQ2xvdmVyLAogIENsdWI6ICgpID0+IENsdWIsCiAgQ29kZTogKCkgPT4gQ29kZSwKICBDb2RlMjogKCkgPT4gQ29kZVhtbCwKICBDb2RlU3F1YXJlOiAoKSA9PiBTcXVhcmVDb2RlLAogIENvZGVYbWw6ICgpID0+IENvZGVYbWwsCiAgQ29kZXBlbjogKCkgPT4gQ29kZXBlbiwKICBDb2Rlc2FuZGJveDogKCkgPT4gQ29kZXNhbmRib3gsCiAgQ29mZmVlOiAoKSA9PiBDb2ZmZWUsCiAgQ29nOiAoKSA9PiBDb2csCiAgQ29pbnM6ICgpID0+IENvaW5zLAogIENvbHVtbnM6ICgpID0+IENvbHVtbnMyLAogIENvbHVtbnMyOiAoKSA9PiBDb2x1bW5zMiwKICBDb2x1bW5zMzogKCkgPT4gQ29sdW1uczMsCiAgQ29sdW1uczNDb2c6ICgpID0+IENvbHVtbnMzQ29nLAogIENvbHVtbnM0OiAoKSA9PiBDb2x1bW5zNCwKICBDb2x1bW5zU2V0dGluZ3M6ICgpID0+IENvbHVtbnMzQ29nLAogIENvbWJpbmU6ICgpID0+IENvbWJpbmUsCiAgQ29tbWFuZDogKCkgPT4gQ29tbWFuZCwKICBDb21wYXNzOiAoKSA9PiBDb21wYXNzLAogIENvbXBvbmVudDogKCkgPT4gQ29tcG9uZW50LAogIENvbXB1dGVyOiAoKSA9PiBDb21wdXRlciwKICBDb25jaWVyZ2VCZWxsOiAoKSA9PiBDb25jaWVyZ2VCZWxsLAogIENvbmU6ICgpID0+IENvbmUsCiAgQ29uc3RydWN0aW9uOiAoKSA9PiBDb25zdHJ1Y3Rpb24sCiAgQ29udGFjdDogKCkgPT4gQ29udGFjdCwKICBDb250YWN0MjogKCkgPT4gQ29udGFjdFJvdW5kLAogIENvbnRhY3RSb3VuZDogKCkgPT4gQ29udGFjdFJvdW5kLAogIENvbnRhaW5lcjogKCkgPT4gQ29udGFpbmVyLAogIENvbnRyYXN0OiAoKSA9PiBDb250cmFzdCwKICBDb29raWU6ICgpID0+IENvb2tpZSwKICBDb29raW5nUG90OiAoKSA9PiBDb29raW5nUG90LAogIENvcHk6ICgpID0+IENvcHksCiAgQ29weUNoZWNrOiAoKSA9PiBDb3B5Q2hlY2ssCiAgQ29weU1pbnVzOiAoKSA9PiBDb3B5TWludXMsCiAgQ29weVBsdXM6ICgpID0+IENvcHlQbHVzLAogIENvcHlTbGFzaDogKCkgPT4gQ29weVNsYXNoLAogIENvcHlYOiAoKSA9PiBDb3B5WCwKICBDb3B5bGVmdDogKCkgPT4gQ29weWxlZnQsCiAgQ29weXJpZ2h0OiAoKSA9PiBDb3B5cmlnaHQsCiAgQ29ybmVyRG93bkxlZnQ6ICgpID0+IENvcm5lckRvd25MZWZ0LAogIENvcm5lckRvd25SaWdodDogKCkgPT4gQ29ybmVyRG93blJpZ2h0LAogIENvcm5lckxlZnREb3duOiAoKSA9PiBDb3JuZXJMZWZ0RG93biwKICBDb3JuZXJMZWZ0VXA6ICgpID0+IENvcm5lckxlZnRVcCwKICBDb3JuZXJSaWdodERvd246ICgpID0+IENvcm5lclJpZ2h0RG93biwKICBDb3JuZXJSaWdodFVwOiAoKSA9PiBDb3JuZXJSaWdodFVwLAogIENvcm5lclVwTGVmdDogKCkgPT4gQ29ybmVyVXBMZWZ0LAogIENvcm5lclVwUmlnaHQ6ICgpID0+IENvcm5lclVwUmlnaHQsCiAgQ3B1OiAoKSA9PiBDcHUsCiAgQ3JlYXRpdmVDb21tb25zOiAoKSA9PiBDcmVhdGl2ZUNvbW1vbnMsCiAgQ3JlZGl0Q2FyZDogKCkgPT4gQ3JlZGl0Q2FyZCwKICBDcm9pc3NhbnQ6ICgpID0+IENyb2lzc2FudCwKICBDcm9wOiAoKSA9PiBDcm9wLAogIENyb3NzOiAoKSA9PiBDcm9zcywKICBDcm9zc2hhaXI6ICgpID0+IENyb3NzaGFpciwKICBDcm93bjogKCkgPT4gQ3Jvd24sCiAgQ3Vib2lkOiAoKSA9PiBDdWJvaWQsCiAgQ3VwU29kYTogKCkgPT4gQ3VwU29kYSwKICBDdXJseUJyYWNlczogKCkgPT4gQnJhY2VzLAogIEN1cnJlbmN5OiAoKSA9PiBDdXJyZW5jeSwKICBDeWxpbmRlcjogKCkgPT4gQ3lsaW5kZXIsCiAgRGFtOiAoKSA9PiBEYW0sCiAgRGF0YWJhc2U6ICgpID0+IERhdGFiYXNlLAogIERhdGFiYXNlQmFja3VwOiAoKSA9PiBEYXRhYmFzZUJhY2t1cCwKICBEYXRhYmFzZVphcDogKCkgPT4gRGF0YWJhc2VaYXAsCiAgRGVjaW1hbHNBcnJvd0xlZnQ6ICgpID0+IERlY2ltYWxzQXJyb3dMZWZ0LAogIERlY2ltYWxzQXJyb3dSaWdodDogKCkgPT4gRGVjaW1hbHNBcnJvd1JpZ2h0LAogIERlbGV0ZTogKCkgPT4gRGVsZXRlLAogIERlc3NlcnQ6ICgpID0+IERlc3NlcnQsCiAgRGlhbWV0ZXI6ICgpID0+IERpYW1ldGVyLAogIERpYW1vbmQ6ICgpID0+IERpYW1vbmQsCiAgRGlhbW9uZE1pbnVzOiAoKSA9PiBEaWFtb25kTWludXMsCiAgRGlhbW9uZFBlcmNlbnQ6ICgpID0+IERpYW1vbmRQZXJjZW50LAogIERpYW1vbmRQbHVzOiAoKSA9PiBEaWFtb25kUGx1cywKICBEaWNlMTogKCkgPT4gRGljZTEsCiAgRGljZTI6ICgpID0+IERpY2UyLAogIERpY2UzOiAoKSA9PiBEaWNlMywKICBEaWNlNDogKCkgPT4gRGljZTQsCiAgRGljZTU6ICgpID0+IERpY2U1LAogIERpY2U2OiAoKSA9PiBEaWNlNiwKICBEaWNlczogKCkgPT4gRGljZXMsCiAgRGlmZjogKCkgPT4gRGlmZiwKICBEaXNjOiAoKSA9PiBEaXNjLAogIERpc2MyOiAoKSA9PiBEaXNjMiwKICBEaXNjMzogKCkgPT4gRGlzYzMsCiAgRGlzY0FsYnVtOiAoKSA9PiBEaXNjQWxidW0sCiAgRGl2aWRlOiAoKSA9PiBEaXZpZGUsCiAgRGl2aWRlQ2lyY2xlOiAoKSA9PiBDaXJjbGVEaXZpZGUsCiAgRGl2aWRlU3F1YXJlOiAoKSA9PiBTcXVhcmVEaXZpZGUsCiAgRG5hOiAoKSA9PiBEbmEsCiAgRG5hT2ZmOiAoKSA9PiBEbmFPZmYsCiAgRG9jazogKCkgPT4gRG9jaywKICBEb2c6ICgpID0+IERvZywKICBEb2xsYXJTaWduOiAoKSA9PiBEb2xsYXJTaWduLAogIERvbnV0OiAoKSA9PiBEb251dCwKICBEb29yQ2xvc2VkOiAoKSA9PiBEb29yQ2xvc2VkLAogIERvb3JDbG9zZWRMb2NrZWQ6ICgpID0+IERvb3JDbG9zZWRMb2NrZWQsCiAgRG9vck9wZW46ICgpID0+IERvb3JPcGVuLAogIERvdDogKCkgPT4gRG90LAogIERvdFNxdWFyZTogKCkgPT4gU3F1YXJlRG90LAogIERvd25sb2FkOiAoKSA9PiBEb3dubG9hZCwKICBEb3dubG9hZENsb3VkOiAoKSA9PiBDbG91ZERvd25sb2FkLAogIERyYWZ0aW5nQ29tcGFzczogKCkgPT4gRHJhZnRpbmdDb21wYXNzLAogIERyYW1hOiAoKSA9PiBEcmFtYSwKICBEcmliYmJsZTogKCkgPT4gRHJpYmJibGUsCiAgRHJpbGw6ICgpID0+IERyaWxsLAogIERyb25lOiAoKSA9PiBEcm9uZSwKICBEcm9wbGV0OiAoKSA9PiBEcm9wbGV0LAogIERyb3BsZXRPZmY6ICgpID0+IERyb3BsZXRPZmYsCiAgRHJvcGxldHM6ICgpID0+IERyb3BsZXRzLAogIERydW06ICgpID0+IERydW0sCiAgRHJ1bXN0aWNrOiAoKSA9PiBEcnVtc3RpY2ssCiAgRHVtYmJlbGw6ICgpID0+IER1bWJiZWxsLAogIEVhcjogKCkgPT4gRWFyLAogIEVhck9mZjogKCkgPT4gRWFyT2ZmLAogIEVhcnRoOiAoKSA9PiBFYXJ0aCwKICBFYXJ0aExvY2s6ICgpID0+IEVhcnRoTG9jaywKICBFY2xpcHNlOiAoKSA9PiBFY2xpcHNlLAogIEVkaXQ6ICgpID0+IFNxdWFyZVBlbiwKICBFZGl0MjogKCkgPT4gUGVuLAogIEVkaXQzOiAoKSA9PiBQZW5MaW5lLAogIEVnZzogKCkgPT4gRWdnLAogIEVnZ0ZyaWVkOiAoKSA9PiBFZ2dGcmllZCwKICBFZ2dPZmY6ICgpID0+IEVnZ09mZiwKICBFbGxpcHNpczogKCkgPT4gRWxsaXBzaXMsCiAgRWxsaXBzaXNWZXJ0aWNhbDogKCkgPT4gRWxsaXBzaXNWZXJ0aWNhbCwKICBFcXVhbDogKCkgPT4gRXF1YWwsCiAgRXF1YWxBcHByb3hpbWF0ZWx5OiAoKSA9PiBFcXVhbEFwcHJveGltYXRlbHksCiAgRXF1YWxOb3Q6ICgpID0+IEVxdWFsTm90LAogIEVxdWFsU3F1YXJlOiAoKSA9PiBTcXVhcmVFcXVhbCwKICBFcmFzZXI6ICgpID0+IEVyYXNlciwKICBFdGhlcm5ldFBvcnQ6ICgpID0+IEV0aGVybmV0UG9ydCwKICBFdXJvOiAoKSA9PiBFdXJvLAogIEV2Q2hhcmdlcjogKCkgPT4gRXZDaGFyZ2VyLAogIEV4cGFuZDogKCkgPT4gRXhwYW5kLAogIEV4dGVybmFsTGluazogKCkgPT4gRXh0ZXJuYWxMaW5rLAogIEV5ZTogKCkgPT4gRXllLAogIEV5ZUNsb3NlZDogKCkgPT4gRXllQ2xvc2VkLAogIEV5ZU9mZjogKCkgPT4gRXllT2ZmLAogIEZhY2Vib29rOiAoKSA9PiBGYWNlYm9vaywKICBGYWN0b3J5OiAoKSA9PiBGYWN0b3J5LAogIEZhbjogKCkgPT4gRmFuLAogIEZhc3RGb3J3YXJkOiAoKSA9PiBGYXN0Rm9yd2FyZCwKICBGZWF0aGVyOiAoKSA9PiBGZWF0aGVyLAogIEZlbmNlOiAoKSA9PiBGZW5jZSwKICBGZXJyaXNXaGVlbDogKCkgPT4gRmVycmlzV2hlZWwsCiAgRmlnbWE6ICgpID0+IEZpZ21hLAogIEZpbGU6ICgpID0+IEZpbGUsCiAgRmlsZUFyY2hpdmU6ICgpID0+IEZpbGVBcmNoaXZlLAogIEZpbGVBdWRpbzogKCkgPT4gRmlsZUhlYWRwaG9uZSwKICBGaWxlQXVkaW8yOiAoKSA9PiBGaWxlSGVhZHBob25lLAogIEZpbGVBeGlzM0Q6ICgpID0+IEZpbGVBeGlzM2QsCiAgRmlsZUF4aXMzZDogKCkgPT4gRmlsZUF4aXMzZCwKICBGaWxlQmFkZ2U6ICgpID0+IEZpbGVCYWRnZSwKICBGaWxlQmFkZ2UyOiAoKSA9PiBGaWxlQmFkZ2UsCiAgRmlsZUJhckNoYXJ0OiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEZpbGVCYXJDaGFydDI6ICgpID0+IEZpbGVDaGFydENvbHVtbiwKICBGaWxlQm94OiAoKSA9PiBGaWxlQm94LAogIEZpbGVCcmFjZXM6ICgpID0+IEZpbGVCcmFjZXMsCiAgRmlsZUJyYWNlc0Nvcm5lcjogKCkgPT4gRmlsZUJyYWNlc0Nvcm5lciwKICBGaWxlQ2hhcnRDb2x1bW46ICgpID0+IEZpbGVDaGFydENvbHVtbiwKICBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nOiAoKSA9PiBGaWxlQ2hhcnRDb2x1bW5JbmNyZWFzaW5nLAogIEZpbGVDaGFydExpbmU6ICgpID0+IEZpbGVDaGFydExpbmUsCiAgRmlsZUNoYXJ0UGllOiAoKSA9PiBGaWxlQ2hhcnRQaWUsCiAgRmlsZUNoZWNrOiAoKSA9PiBGaWxlQ2hlY2ssCiAgRmlsZUNoZWNrMjogKCkgPT4gRmlsZUNoZWNrQ29ybmVyLAogIEZpbGVDaGVja0Nvcm5lcjogKCkgPT4gRmlsZUNoZWNrQ29ybmVyLAogIEZpbGVDbG9jazogKCkgPT4gRmlsZUNsb2NrLAogIEZpbGVDb2RlOiAoKSA9PiBGaWxlQ29kZSwKICBGaWxlQ29kZTI6ICgpID0+IEZpbGVDb2RlQ29ybmVyLAogIEZpbGVDb2RlQ29ybmVyOiAoKSA9PiBGaWxlQ29kZUNvcm5lciwKICBGaWxlQ29nOiAoKSA9PiBGaWxlQ29nLAogIEZpbGVDb2cyOiAoKSA9PiBGaWxlQ29nLAogIEZpbGVEaWZmOiAoKSA9PiBGaWxlRGlmZiwKICBGaWxlRGlnaXQ6ICgpID0+IEZpbGVEaWdpdCwKICBGaWxlRG93bjogKCkgPT4gRmlsZURvd24sCiAgRmlsZUVkaXQ6ICgpID0+IEZpbGVQZW4sCiAgRmlsZUV4Y2xhbWF0aW9uUG9pbnQ6ICgpID0+IEZpbGVFeGNsYW1hdGlvblBvaW50LAogIEZpbGVIZWFkcGhvbmU6ICgpID0+IEZpbGVIZWFkcGhvbmUsCiAgRmlsZUhlYXJ0OiAoKSA9PiBGaWxlSGVhcnQsCiAgRmlsZUltYWdlOiAoKSA9PiBGaWxlSW1hZ2UsCiAgRmlsZUlucHV0OiAoKSA9PiBGaWxlSW5wdXQsCiAgRmlsZUpzb246ICgpID0+IEZpbGVCcmFjZXMsCiAgRmlsZUpzb24yOiAoKSA9PiBGaWxlQnJhY2VzQ29ybmVyLAogIEZpbGVLZXk6ICgpID0+IEZpbGVLZXksCiAgRmlsZUtleTI6ICgpID0+IEZpbGVLZXksCiAgRmlsZUxpbmVDaGFydDogKCkgPT4gRmlsZUNoYXJ0TGluZSwKICBGaWxlTG9jazogKCkgPT4gRmlsZUxvY2ssCiAgRmlsZUxvY2syOiAoKSA9PiBGaWxlTG9jaywKICBGaWxlTWludXM6ICgpID0+IEZpbGVNaW51cywKICBGaWxlTWludXMyOiAoKSA9PiBGaWxlTWludXNDb3JuZXIsCiAgRmlsZU1pbnVzQ29ybmVyOiAoKSA9PiBGaWxlTWludXNDb3JuZXIsCiAgRmlsZU11c2ljOiAoKSA9PiBGaWxlTXVzaWMsCiAgRmlsZU91dHB1dDogKCkgPT4gRmlsZU91dHB1dCwKICBGaWxlUGVuOiAoKSA9PiBGaWxlUGVuLAogIEZpbGVQZW5MaW5lOiAoKSA9PiBGaWxlUGVuTGluZSwKICBGaWxlUGllQ2hhcnQ6ICgpID0+IEZpbGVDaGFydFBpZSwKICBGaWxlUGxheTogKCkgPT4gRmlsZVBsYXksCiAgRmlsZVBsdXM6ICgpID0+IEZpbGVQbHVzLAogIEZpbGVQbHVzMjogKCkgPT4gRmlsZVBsdXNDb3JuZXIsCiAgRmlsZVBsdXNDb3JuZXI6ICgpID0+IEZpbGVQbHVzQ29ybmVyLAogIEZpbGVRdWVzdGlvbjogKCkgPT4gRmlsZVF1ZXN0aW9uTWFyaywKICBGaWxlUXVlc3Rpb25NYXJrOiAoKSA9PiBGaWxlUXVlc3Rpb25NYXJrLAogIEZpbGVTY2FuOiAoKSA9PiBGaWxlU2NhbiwKICBGaWxlU2VhcmNoOiAoKSA9PiBGaWxlU2VhcmNoLAogIEZpbGVTZWFyY2gyOiAoKSA9PiBGaWxlU2VhcmNoQ29ybmVyLAogIEZpbGVTZWFyY2hDb3JuZXI6ICgpID0+IEZpbGVTZWFyY2hDb3JuZXIsCiAgRmlsZVNpZ25hbDogKCkgPT4gRmlsZVNpZ25hbCwKICBGaWxlU2lnbmF0dXJlOiAoKSA9PiBGaWxlUGVuTGluZSwKICBGaWxlU2xpZGVyczogKCkgPT4gRmlsZVNsaWRlcnMsCiAgRmlsZVNwcmVhZHNoZWV0OiAoKSA9PiBGaWxlU3ByZWFkc2hlZXQsCiAgRmlsZVN0YWNrOiAoKSA9PiBGaWxlU3RhY2ssCiAgRmlsZVN5bWxpbms6ICgpID0+IEZpbGVTeW1saW5rLAogIEZpbGVUZXJtaW5hbDogKCkgPT4gRmlsZVRlcm1pbmFsLAogIEZpbGVUZXh0OiAoKSA9PiBGaWxlVGV4dCwKICBGaWxlVHlwZTogKCkgPT4gRmlsZVR5cGUsCiAgRmlsZVR5cGUyOiAoKSA9PiBGaWxlVHlwZUNvcm5lciwKICBGaWxlVHlwZUNvcm5lcjogKCkgPT4gRmlsZVR5cGVDb3JuZXIsCiAgRmlsZVVwOiAoKSA9PiBGaWxlVXAsCiAgRmlsZVVzZXI6ICgpID0+IEZpbGVVc2VyLAogIEZpbGVWaWRlbzogKCkgPT4gRmlsZVBsYXksCiAgRmlsZVZpZGVvMjogKCkgPT4gRmlsZVZpZGVvQ2FtZXJhLAogIEZpbGVWaWRlb0NhbWVyYTogKCkgPT4gRmlsZVZpZGVvQ2FtZXJhLAogIEZpbGVWb2x1bWU6ICgpID0+IEZpbGVWb2x1bWUsCiAgRmlsZVZvbHVtZTI6ICgpID0+IEZpbGVTaWduYWwsCiAgRmlsZVdhcm5pbmc6ICgpID0+IEZpbGVFeGNsYW1hdGlvblBvaW50LAogIEZpbGVYOiAoKSA9PiBGaWxlWCwKICBGaWxlWDI6ICgpID0+IEZpbGVYQ29ybmVyLAogIEZpbGVYQ29ybmVyOiAoKSA9PiBGaWxlWENvcm5lciwKICBGaWxlczogKCkgPT4gRmlsZXMsCiAgRmlsbTogKCkgPT4gRmlsbSwKICBGaWx0ZXI6ICgpID0+IEZ1bm5lbCwKICBGaWx0ZXJYOiAoKSA9PiBGdW5uZWxYLAogIEZpbmdlcnByaW50OiAoKSA9PiBGaW5nZXJwcmludFBhdHRlcm4sCiAgRmluZ2VycHJpbnRQYXR0ZXJuOiAoKSA9PiBGaW5nZXJwcmludFBhdHRlcm4sCiAgRmlyZUV4dGluZ3Vpc2hlcjogKCkgPT4gRmlyZUV4dGluZ3Vpc2hlciwKICBGaXNoOiAoKSA9PiBGaXNoLAogIEZpc2hPZmY6ICgpID0+IEZpc2hPZmYsCiAgRmlzaFN5bWJvbDogKCkgPT4gRmlzaFN5bWJvbCwKICBGaXNoaW5nSG9vazogKCkgPT4gRmlzaGluZ0hvb2ssCiAgRmxhZzogKCkgPT4gRmxhZywKICBGbGFnT2ZmOiAoKSA9PiBGbGFnT2ZmLAogIEZsYWdUcmlhbmdsZUxlZnQ6ICgpID0+IEZsYWdUcmlhbmdsZUxlZnQsCiAgRmxhZ1RyaWFuZ2xlUmlnaHQ6ICgpID0+IEZsYWdUcmlhbmdsZVJpZ2h0LAogIEZsYW1lOiAoKSA9PiBGbGFtZSwKICBGbGFtZUtpbmRsaW5nOiAoKSA9PiBGbGFtZUtpbmRsaW5nLAogIEZsYXNobGlnaHQ6ICgpID0+IEZsYXNobGlnaHQsCiAgRmxhc2hsaWdodE9mZjogKCkgPT4gRmxhc2hsaWdodE9mZiwKICBGbGFza0NvbmljYWw6ICgpID0+IEZsYXNrQ29uaWNhbCwKICBGbGFza0NvbmljYWxPZmY6ICgpID0+IEZsYXNrQ29uaWNhbE9mZiwKICBGbGFza1JvdW5kOiAoKSA9PiBGbGFza1JvdW5kLAogIEZsaXBIb3Jpem9udGFsOiAoKSA9PiBGbGlwSG9yaXpvbnRhbCwKICBGbGlwSG9yaXpvbnRhbDI6ICgpID0+IEZsaXBIb3Jpem9udGFsMiwKICBGbGlwVmVydGljYWw6ICgpID0+IEZsaXBWZXJ0aWNhbCwKICBGbGlwVmVydGljYWwyOiAoKSA9PiBGbGlwVmVydGljYWwyLAogIEZsb3dlcjogKCkgPT4gRmxvd2VyLAogIEZsb3dlcjI6ICgpID0+IEZsb3dlcjIsCiAgRm9jdXM6ICgpID0+IEZvY3VzLAogIEZvbGRIb3Jpem9udGFsOiAoKSA9PiBGb2xkSG9yaXpvbnRhbCwKICBGb2xkVmVydGljYWw6ICgpID0+IEZvbGRWZXJ0aWNhbCwKICBGb2xkZXI6ICgpID0+IEZvbGRlciwKICBGb2xkZXJBcmNoaXZlOiAoKSA9PiBGb2xkZXJBcmNoaXZlLAogIEZvbGRlckNoZWNrOiAoKSA9PiBGb2xkZXJDaGVjaywKICBGb2xkZXJDbG9jazogKCkgPT4gRm9sZGVyQ2xvY2ssCiAgRm9sZGVyQ2xvc2VkOiAoKSA9PiBGb2xkZXJDbG9zZWQsCiAgRm9sZGVyQ29kZTogKCkgPT4gRm9sZGVyQ29kZSwKICBGb2xkZXJDb2c6ICgpID0+IEZvbGRlckNvZywKICBGb2xkZXJDb2cyOiAoKSA9PiBGb2xkZXJDb2csCiAgRm9sZGVyRG90OiAoKSA9PiBGb2xkZXJEb3QsCiAgRm9sZGVyRG93bjogKCkgPT4gRm9sZGVyRG93biwKICBGb2xkZXJFZGl0OiAoKSA9PiBGb2xkZXJQZW4sCiAgRm9sZGVyR2l0OiAoKSA9PiBGb2xkZXJHaXQsCiAgRm9sZGVyR2l0MjogKCkgPT4gRm9sZGVyR2l0MiwKICBGb2xkZXJIZWFydDogKCkgPT4gRm9sZGVySGVhcnQsCiAgRm9sZGVySW5wdXQ6ICgpID0+IEZvbGRlcklucHV0LAogIEZvbGRlckthbmJhbjogKCkgPT4gRm9sZGVyS2FuYmFuLAogIEZvbGRlcktleTogKCkgPT4gRm9sZGVyS2V5LAogIEZvbGRlckxvY2s6ICgpID0+IEZvbGRlckxvY2ssCiAgRm9sZGVyTWludXM6ICgpID0+IEZvbGRlck1pbnVzLAogIEZvbGRlck9wZW46ICgpID0+IEZvbGRlck9wZW4sCiAgRm9sZGVyT3BlbkRvdDogKCkgPT4gRm9sZGVyT3BlbkRvdCwKICBGb2xkZXJPdXRwdXQ6ICgpID0+IEZvbGRlck91dHB1dCwKICBGb2xkZXJQZW46ICgpID0+IEZvbGRlclBlbiwKICBGb2xkZXJQbHVzOiAoKSA9PiBGb2xkZXJQbHVzLAogIEZvbGRlclJvb3Q6ICgpID0+IEZvbGRlclJvb3QsCiAgRm9sZGVyU2VhcmNoOiAoKSA9PiBGb2xkZXJTZWFyY2gsCiAgRm9sZGVyU2VhcmNoMjogKCkgPT4gRm9sZGVyU2VhcmNoMiwKICBGb2xkZXJTeW1saW5rOiAoKSA9PiBGb2xkZXJTeW1saW5rLAogIEZvbGRlclN5bmM6ICgpID0+IEZvbGRlclN5bmMsCiAgRm9sZGVyVHJlZTogKCkgPT4gRm9sZGVyVHJlZSwKICBGb2xkZXJVcDogKCkgPT4gRm9sZGVyVXAsCiAgRm9sZGVyWDogKCkgPT4gRm9sZGVyWCwKICBGb2xkZXJzOiAoKSA9PiBGb2xkZXJzLAogIEZvb3RwcmludHM6ICgpID0+IEZvb3RwcmludHMsCiAgRm9ya0tuaWZlOiAoKSA9PiBVdGVuc2lscywKICBGb3JrS25pZmVDcm9zc2VkOiAoKSA9PiBVdGVuc2lsc0Nyb3NzZWQsCiAgRm9ya2xpZnQ6ICgpID0+IEZvcmtsaWZ0LAogIEZvcm06ICgpID0+IEZvcm0sCiAgRm9ybUlucHV0OiAoKSA9PiBSZWN0YW5nbGVFbGxpcHNpcywKICBGb3J3YXJkOiAoKSA9PiBGb3J3YXJkLAogIEZyYW1lOiAoKSA9PiBGcmFtZSwKICBGcmFtZXI6ICgpID0+IEZyYW1lciwKICBGcm93bjogKCkgPT4gRnJvd24sCiAgRnVlbDogKCkgPT4gRnVlbCwKICBGdWxsc2NyZWVuOiAoKSA9PiBGdWxsc2NyZWVuLAogIEZ1bmN0aW9uU3F1YXJlOiAoKSA9PiBTcXVhcmVGdW5jdGlvbiwKICBGdW5uZWw6ICgpID0+IEZ1bm5lbCwKICBGdW5uZWxQbHVzOiAoKSA9PiBGdW5uZWxQbHVzLAogIEZ1bm5lbFg6ICgpID0+IEZ1bm5lbFgsCiAgR2FsbGVyeUhvcml6b250YWw6ICgpID0+IEdhbGxlcnlIb3Jpem9udGFsLAogIEdhbGxlcnlIb3Jpem9udGFsRW5kOiAoKSA9PiBHYWxsZXJ5SG9yaXpvbnRhbEVuZCwKICBHYWxsZXJ5VGh1bWJuYWlsczogKCkgPT4gR2FsbGVyeVRodW1ibmFpbHMsCiAgR2FsbGVyeVZlcnRpY2FsOiAoKSA9PiBHYWxsZXJ5VmVydGljYWwsCiAgR2FsbGVyeVZlcnRpY2FsRW5kOiAoKSA9PiBHYWxsZXJ5VmVydGljYWxFbmQsCiAgR2FtZXBhZDogKCkgPT4gR2FtZXBhZCwKICBHYW1lcGFkMjogKCkgPT4gR2FtZXBhZDIsCiAgR2FtZXBhZERpcmVjdGlvbmFsOiAoKSA9PiBHYW1lcGFkRGlyZWN0aW9uYWwsCiAgR2FudHRDaGFydDogKCkgPT4gQ2hhcnROb0F4ZXNHYW50dCwKICBHYW50dENoYXJ0U3F1YXJlOiAoKSA9PiBTcXVhcmVDaGFydEdhbnR0LAogIEdhdWdlOiAoKSA9PiBHYXVnZSwKICBHYXVnZUNpcmNsZTogKCkgPT4gQ2lyY2xlR2F1Z2UsCiAgR2F2ZWw6ICgpID0+IEdhdmVsLAogIEdlbTogKCkgPT4gR2VtLAogIEdlb3JnaWFuTGFyaTogKCkgPT4gR2VvcmdpYW5MYXJpLAogIEdob3N0OiAoKSA9PiBHaG9zdCwKICBHaWZ0OiAoKSA9PiBHaWZ0LAogIEdpdEJyYW5jaDogKCkgPT4gR2l0QnJhbmNoLAogIEdpdEJyYW5jaE1pbnVzOiAoKSA9PiBHaXRCcmFuY2hNaW51cywKICBHaXRCcmFuY2hQbHVzOiAoKSA9PiBHaXRCcmFuY2hQbHVzLAogIEdpdENvbW1pdDogKCkgPT4gR2l0Q29tbWl0SG9yaXpvbnRhbCwKICBHaXRDb21taXRIb3Jpem9udGFsOiAoKSA9PiBHaXRDb21taXRIb3Jpem9udGFsLAogIEdpdENvbW1pdFZlcnRpY2FsOiAoKSA9PiBHaXRDb21taXRWZXJ0aWNhbCwKICBHaXRDb21wYXJlOiAoKSA9PiBHaXRDb21wYXJlLAogIEdpdENvbXBhcmVBcnJvd3M6ICgpID0+IEdpdENvbXBhcmVBcnJvd3MsCiAgR2l0Rm9yazogKCkgPT4gR2l0Rm9yaywKICBHaXRHcmFwaDogKCkgPT4gR2l0R3JhcGgsCiAgR2l0TWVyZ2U6ICgpID0+IEdpdE1lcmdlLAogIEdpdFB1bGxSZXF1ZXN0OiAoKSA9PiBHaXRQdWxsUmVxdWVzdCwKICBHaXRQdWxsUmVxdWVzdEFycm93OiAoKSA9PiBHaXRQdWxsUmVxdWVzdEFycm93LAogIEdpdFB1bGxSZXF1ZXN0Q2xvc2VkOiAoKSA9PiBHaXRQdWxsUmVxdWVzdENsb3NlZCwKICBHaXRQdWxsUmVxdWVzdENyZWF0ZTogKCkgPT4gR2l0UHVsbFJlcXVlc3RDcmVhdGUsCiAgR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdzogKCkgPT4gR2l0UHVsbFJlcXVlc3RDcmVhdGVBcnJvdywKICBHaXRQdWxsUmVxdWVzdERyYWZ0OiAoKSA9PiBHaXRQdWxsUmVxdWVzdERyYWZ0LAogIEdpdGh1YjogKCkgPT4gR2l0aHViLAogIEdpdGxhYjogKCkgPT4gR2l0bGFiLAogIEdsYXNzV2F0ZXI6ICgpID0+IEdsYXNzV2F0ZXIsCiAgR2xhc3NlczogKCkgPT4gR2xhc3NlcywKICBHbG9iZTogKCkgPT4gR2xvYmUsCiAgR2xvYmUyOiAoKSA9PiBFYXJ0aCwKICBHbG9iZUxvY2s6ICgpID0+IEdsb2JlTG9jaywKICBHb2FsOiAoKSA9PiBHb2FsLAogIEdwdTogKCkgPT4gR3B1LAogIEdyYWI6ICgpID0+IEhhbmRHcmFiLAogIEdyYWR1YXRpb25DYXA6ICgpID0+IEdyYWR1YXRpb25DYXAsCiAgR3JhcGU6ICgpID0+IEdyYXBlLAogIEdyaWQ6ICgpID0+IEdyaWQzeDMsCiAgR3JpZDJYMjogKCkgPT4gR3JpZDJ4MiwKICBHcmlkMlgyQ2hlY2s6ICgpID0+IEdyaWQyeDJDaGVjaywKICBHcmlkMlgyUGx1czogKCkgPT4gR3JpZDJ4MlBsdXMsCiAgR3JpZDJYMlg6ICgpID0+IEdyaWQyeDJYLAogIEdyaWQyeDI6ICgpID0+IEdyaWQyeDIsCiAgR3JpZDJ4MkNoZWNrOiAoKSA9PiBHcmlkMngyQ2hlY2ssCiAgR3JpZDJ4MlBsdXM6ICgpID0+IEdyaWQyeDJQbHVzLAogIEdyaWQyeDJYOiAoKSA9PiBHcmlkMngyWCwKICBHcmlkM1gzOiAoKSA9PiBHcmlkM3gzLAogIEdyaWQzeDI6ICgpID0+IEdyaWQzeDIsCiAgR3JpZDN4MzogKCkgPT4gR3JpZDN4MywKICBHcmlwOiAoKSA9PiBHcmlwLAogIEdyaXBIb3Jpem9udGFsOiAoKSA9PiBHcmlwSG9yaXpvbnRhbCwKICBHcmlwVmVydGljYWw6ICgpID0+IEdyaXBWZXJ0aWNhbCwKICBHcm91cDogKCkgPT4gR3JvdXAsCiAgR3VpdGFyOiAoKSA9PiBHdWl0YXIsCiAgSGFtOiAoKSA9PiBIYW0sCiAgSGFtYnVyZ2VyOiAoKSA9PiBIYW1idXJnZXIsCiAgSGFtbWVyOiAoKSA9PiBIYW1tZXIsCiAgSGFuZDogKCkgPT4gSGFuZCwKICBIYW5kQ29pbnM6ICgpID0+IEhhbmRDb2lucywKICBIYW5kRmlzdDogKCkgPT4gSGFuZEZpc3QsCiAgSGFuZEdyYWI6ICgpID0+IEhhbmRHcmFiLAogIEhhbmRIZWFydDogKCkgPT4gSGFuZEhlYXJ0LAogIEhhbmRIZWxwaW5nOiAoKSA9PiBIYW5kSGVscGluZywKICBIYW5kTWV0YWw6ICgpID0+IEhhbmRNZXRhbCwKICBIYW5kUGxhdHRlcjogKCkgPT4gSGFuZFBsYXR0ZXIsCiAgSGFuZGJhZzogKCkgPT4gSGFuZGJhZywKICBIYW5kc2hha2U6ICgpID0+IEhhbmRzaGFrZSwKICBIYXJkRHJpdmU6ICgpID0+IEhhcmREcml2ZSwKICBIYXJkRHJpdmVEb3dubG9hZDogKCkgPT4gSGFyZERyaXZlRG93bmxvYWQsCiAgSGFyZERyaXZlVXBsb2FkOiAoKSA9PiBIYXJkRHJpdmVVcGxvYWQsCiAgSGFyZEhhdDogKCkgPT4gSGFyZEhhdCwKICBIYXNoOiAoKSA9PiBIYXNoLAogIEhhdEdsYXNzZXM6ICgpID0+IEhhdEdsYXNzZXMsCiAgSGF6ZTogKCkgPT4gSGF6ZSwKICBIZDogKCkgPT4gSGQsCiAgSGRtaVBvcnQ6ICgpID0+IEhkbWlQb3J0LAogIEhlYWRpbmc6ICgpID0+IEhlYWRpbmcsCiAgSGVhZGluZzE6ICgpID0+IEhlYWRpbmcxLAogIEhlYWRpbmcyOiAoKSA9PiBIZWFkaW5nMiwKICBIZWFkaW5nMzogKCkgPT4gSGVhZGluZzMsCiAgSGVhZGluZzQ6ICgpID0+IEhlYWRpbmc0LAogIEhlYWRpbmc1OiAoKSA9PiBIZWFkaW5nNSwKICBIZWFkaW5nNjogKCkgPT4gSGVhZGluZzYsCiAgSGVhZHBob25lT2ZmOiAoKSA9PiBIZWFkcGhvbmVPZmYsCiAgSGVhZHBob25lczogKCkgPT4gSGVhZHBob25lcywKICBIZWFkc2V0OiAoKSA9PiBIZWFkc2V0LAogIEhlYXJ0OiAoKSA9PiBIZWFydCwKICBIZWFydENyYWNrOiAoKSA9PiBIZWFydENyYWNrLAogIEhlYXJ0SGFuZHNoYWtlOiAoKSA9PiBIZWFydEhhbmRzaGFrZSwKICBIZWFydE1pbnVzOiAoKSA9PiBIZWFydE1pbnVzLAogIEhlYXJ0T2ZmOiAoKSA9PiBIZWFydE9mZiwKICBIZWFydFBsdXM6ICgpID0+IEhlYXJ0UGx1cywKICBIZWFydFB1bHNlOiAoKSA9PiBIZWFydFB1bHNlLAogIEhlYXRlcjogKCkgPT4gSGVhdGVyLAogIEhlbGljb3B0ZXI6ICgpID0+IEhlbGljb3B0ZXIsCiAgSGVscENpcmNsZTogKCkgPT4gQ2lyY2xlUXVlc3Rpb25NYXJrLAogIEhlbHBpbmdIYW5kOiAoKSA9PiBIYW5kSGVscGluZywKICBIZXhhZ29uOiAoKSA9PiBIZXhhZ29uLAogIEhpZ2hsaWdodGVyOiAoKSA9PiBIaWdobGlnaHRlciwKICBIaXN0b3J5OiAoKSA9PiBIaXN0b3J5LAogIEhvbWU6ICgpID0+IEhvdXNlLAogIEhvcDogKCkgPT4gSG9wLAogIEhvcE9mZjogKCkgPT4gSG9wT2ZmLAogIEhvc3BpdGFsOiAoKSA9PiBIb3NwaXRhbCwKICBIb3RlbDogKCkgPT4gSG90ZWwsCiAgSG91cmdsYXNzOiAoKSA9PiBIb3VyZ2xhc3MsCiAgSG91c2U6ICgpID0+IEhvdXNlLAogIEhvdXNlSGVhcnQ6ICgpID0+IEhvdXNlSGVhcnQsCiAgSG91c2VQbHVnOiAoKSA9PiBIb3VzZVBsdWcsCiAgSG91c2VQbHVzOiAoKSA9PiBIb3VzZVBsdXMsCiAgSG91c2VXaWZpOiAoKSA9PiBIb3VzZVdpZmksCiAgSWNlQ3JlYW06ICgpID0+IEljZUNyZWFtQ29uZSwKICBJY2VDcmVhbTI6ICgpID0+IEljZUNyZWFtQm93bCwKICBJY2VDcmVhbUJvd2w6ICgpID0+IEljZUNyZWFtQm93bCwKICBJY2VDcmVhbUNvbmU6ICgpID0+IEljZUNyZWFtQ29uZSwKICBJZENhcmQ6ICgpID0+IElkQ2FyZCwKICBJZENhcmRMYW55YXJkOiAoKSA9PiBJZENhcmRMYW55YXJkLAogIEltYWdlOiAoKSA9PiBJbWFnZTIsCiAgSW1hZ2VEb3duOiAoKSA9PiBJbWFnZURvd24sCiAgSW1hZ2VNaW51czogKCkgPT4gSW1hZ2VNaW51cywKICBJbWFnZU9mZjogKCkgPT4gSW1hZ2VPZmYsCiAgSW1hZ2VQbGF5OiAoKSA9PiBJbWFnZVBsYXksCiAgSW1hZ2VQbHVzOiAoKSA9PiBJbWFnZVBsdXMsCiAgSW1hZ2VVcDogKCkgPT4gSW1hZ2VVcCwKICBJbWFnZVVwc2NhbGU6ICgpID0+IEltYWdlVXBzY2FsZSwKICBJbWFnZXM6ICgpID0+IEltYWdlcywKICBJbXBvcnQ6ICgpID0+IEltcG9ydCwKICBJbmJveDogKCkgPT4gSW5ib3gsCiAgSW5kZW50OiAoKSA9PiBMaXN0SW5kZW50SW5jcmVhc2UsCiAgSW5kZW50RGVjcmVhc2U6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBJbmRlbnRJbmNyZWFzZTogKCkgPT4gTGlzdEluZGVudEluY3JlYXNlLAogIEluZGlhblJ1cGVlOiAoKSA9PiBJbmRpYW5SdXBlZSwKICBJbmZpbml0eTogKCkgPT4gSW5maW5pdHkyLAogIEluZm86ICgpID0+IEluZm8yLAogIEluc3BlY3Q6ICgpID0+IFNxdWFyZU1vdXNlUG9pbnRlciwKICBJbnNwZWN0aW9uUGFuZWw6ICgpID0+IEluc3BlY3Rpb25QYW5lbCwKICBJbnN0YWdyYW06ICgpID0+IEluc3RhZ3JhbSwKICBJdGFsaWM6ICgpID0+IEl0YWxpYywKICBJdGVyYXRpb25DY3c6ICgpID0+IEl0ZXJhdGlvbkNjdywKICBJdGVyYXRpb25DdzogKCkgPT4gSXRlcmF0aW9uQ3csCiAgSmFwYW5lc2VZZW46ICgpID0+IEphcGFuZXNlWWVuLAogIEpveXN0aWNrOiAoKSA9PiBKb3lzdGljaywKICBLYW5iYW46ICgpID0+IEthbmJhbiwKICBLYW5iYW5TcXVhcmU6ICgpID0+IFNxdWFyZUthbmJhbiwKICBLYW5iYW5TcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZEthbmJhbiwKICBLYXlhazogKCkgPT4gS2F5YWssCiAgS2V5OiAoKSA9PiBLZXkyLAogIEtleVJvdW5kOiAoKSA9PiBLZXlSb3VuZCwKICBLZXlTcXVhcmU6ICgpID0+IEtleVNxdWFyZSwKICBLZXlib2FyZDogKCkgPT4gS2V5Ym9hcmQyLAogIEtleWJvYXJkTXVzaWM6ICgpID0+IEtleWJvYXJkTXVzaWMsCiAgS2V5Ym9hcmRPZmY6ICgpID0+IEtleWJvYXJkT2ZmLAogIExhbXA6ICgpID0+IExhbXAsCiAgTGFtcENlaWxpbmc6ICgpID0+IExhbXBDZWlsaW5nLAogIExhbXBEZXNrOiAoKSA9PiBMYW1wRGVzaywKICBMYW1wRmxvb3I6ICgpID0+IExhbXBGbG9vciwKICBMYW1wV2FsbERvd246ICgpID0+IExhbXBXYWxsRG93biwKICBMYW1wV2FsbFVwOiAoKSA9PiBMYW1wV2FsbFVwLAogIExhbmRQbG90OiAoKSA9PiBMYW5kUGxvdCwKICBMYW5kbWFyazogKCkgPT4gTGFuZG1hcmssCiAgTGFuZ3VhZ2VzOiAoKSA9PiBMYW5ndWFnZXMsCiAgTGFwdG9wOiAoKSA9PiBMYXB0b3AsCiAgTGFwdG9wMjogKCkgPT4gTGFwdG9wTWluaW1hbCwKICBMYXB0b3BNaW5pbWFsOiAoKSA9PiBMYXB0b3BNaW5pbWFsLAogIExhcHRvcE1pbmltYWxDaGVjazogKCkgPT4gTGFwdG9wTWluaW1hbENoZWNrLAogIExhc3NvOiAoKSA9PiBMYXNzbywKICBMYXNzb1NlbGVjdDogKCkgPT4gTGFzc29TZWxlY3QsCiAgTGF1Z2g6ICgpID0+IExhdWdoLAogIExheWVyczogKCkgPT4gTGF5ZXJzMywKICBMYXllcnMyOiAoKSA9PiBMYXllcnMyLAogIExheWVyczM6ICgpID0+IExheWVyczMsCiAgTGF5ZXJzUGx1czogKCkgPT4gTGF5ZXJzUGx1cywKICBMYXlvdXQ6ICgpID0+IFBhbmVsc1RvcExlZnQsCiAgTGF5b3V0RGFzaGJvYXJkOiAoKSA9PiBMYXlvdXREYXNoYm9hcmQsCiAgTGF5b3V0R3JpZDogKCkgPT4gTGF5b3V0R3JpZCwKICBMYXlvdXRMaXN0OiAoKSA9PiBMYXlvdXRMaXN0LAogIExheW91dFBhbmVsTGVmdDogKCkgPT4gTGF5b3V0UGFuZWxMZWZ0LAogIExheW91dFBhbmVsVG9wOiAoKSA9PiBMYXlvdXRQYW5lbFRvcCwKICBMYXlvdXRUZW1wbGF0ZTogKCkgPT4gTGF5b3V0VGVtcGxhdGUsCiAgTGVhZjogKCkgPT4gTGVhZiwKICBMZWFmeUdyZWVuOiAoKSA9PiBMZWFmeUdyZWVuLAogIExlY3Rlcm46ICgpID0+IExlY3Rlcm4sCiAgTGV0dGVyVGV4dDogKCkgPT4gVGV4dEluaXRpYWwsCiAgTGlicmFyeTogKCkgPT4gTGlicmFyeTIsCiAgTGlicmFyeUJpZzogKCkgPT4gTGlicmFyeUJpZywKICBMaWJyYXJ5U3F1YXJlOiAoKSA9PiBTcXVhcmVMaWJyYXJ5LAogIExpZmVCdW95OiAoKSA9PiBMaWZlQnVveSwKICBMaWdhdHVyZTogKCkgPT4gTGlnYXR1cmUsCiAgTGlnaHRidWxiOiAoKSA9PiBMaWdodGJ1bGIsCiAgTGlnaHRidWxiT2ZmOiAoKSA9PiBMaWdodGJ1bGJPZmYsCiAgTGluZUNoYXJ0OiAoKSA9PiBDaGFydExpbmUsCiAgTGluZVNxdWlnZ2xlOiAoKSA9PiBMaW5lU3F1aWdnbGUsCiAgTGluazogKCkgPT4gTGluaywKICBMaW5rMjogKCkgPT4gTGluazIsCiAgTGluazJPZmY6ICgpID0+IExpbmsyT2ZmLAogIExpbmtlZGluOiAoKSA9PiBMaW5rZWRpbiwKICBMaXN0OiAoKSA9PiBMaXN0LAogIExpc3RDaGVjazogKCkgPT4gTGlzdENoZWNrLAogIExpc3RDaGVja3M6ICgpID0+IExpc3RDaGVja3MsCiAgTGlzdENoZXZyb25zRG93blVwOiAoKSA9PiBMaXN0Q2hldnJvbnNEb3duVXAsCiAgTGlzdENoZXZyb25zVXBEb3duOiAoKSA9PiBMaXN0Q2hldnJvbnNVcERvd24sCiAgTGlzdENvbGxhcHNlOiAoKSA9PiBMaXN0Q29sbGFwc2UsCiAgTGlzdEVuZDogKCkgPT4gTGlzdEVuZCwKICBMaXN0RmlsdGVyOiAoKSA9PiBMaXN0RmlsdGVyLAogIExpc3RGaWx0ZXJQbHVzOiAoKSA9PiBMaXN0RmlsdGVyUGx1cywKICBMaXN0SW5kZW50RGVjcmVhc2U6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBMaXN0SW5kZW50SW5jcmVhc2U6ICgpID0+IExpc3RJbmRlbnRJbmNyZWFzZSwKICBMaXN0TWludXM6ICgpID0+IExpc3RNaW51cywKICBMaXN0TXVzaWM6ICgpID0+IExpc3RNdXNpYywKICBMaXN0T3JkZXJlZDogKCkgPT4gTGlzdE9yZGVyZWQsCiAgTGlzdFBsdXM6ICgpID0+IExpc3RQbHVzLAogIExpc3RSZXN0YXJ0OiAoKSA9PiBMaXN0UmVzdGFydCwKICBMaXN0U3RhcnQ6ICgpID0+IExpc3RTdGFydCwKICBMaXN0VG9kbzogKCkgPT4gTGlzdFRvZG8sCiAgTGlzdFRyZWU6ICgpID0+IExpc3RUcmVlLAogIExpc3RWaWRlbzogKCkgPT4gTGlzdFZpZGVvLAogIExpc3RYOiAoKSA9PiBMaXN0WCwKICBMb2FkZXI6ICgpID0+IExvYWRlciwKICBMb2FkZXIyOiAoKSA9PiBMb2FkZXJDaXJjbGUsCiAgTG9hZGVyQ2lyY2xlOiAoKSA9PiBMb2FkZXJDaXJjbGUsCiAgTG9hZGVyUGlud2hlZWw6ICgpID0+IExvYWRlclBpbndoZWVsLAogIExvY2F0ZTogKCkgPT4gTG9jYXRlLAogIExvY2F0ZUZpeGVkOiAoKSA9PiBMb2NhdGVGaXhlZCwKICBMb2NhdGVPZmY6ICgpID0+IExvY2F0ZU9mZiwKICBMb2NhdGlvbkVkaXQ6ICgpID0+IE1hcFBpblBlbiwKICBMb2NrOiAoKSA9PiBMb2NrLAogIExvY2tLZXlob2xlOiAoKSA9PiBMb2NrS2V5aG9sZSwKICBMb2NrS2V5aG9sZU9wZW46ICgpID0+IExvY2tLZXlob2xlT3BlbiwKICBMb2NrT3BlbjogKCkgPT4gTG9ja09wZW4sCiAgTG9nSW46ICgpID0+IExvZ0luLAogIExvZ091dDogKCkgPT4gTG9nT3V0LAogIExvZ3M6ICgpID0+IExvZ3MsCiAgTG9sbGlwb3A6ICgpID0+IExvbGxpcG9wLAogIEx1Z2dhZ2U6ICgpID0+IEx1Z2dhZ2UsCiAgTVNxdWFyZTogKCkgPT4gU3F1YXJlTSwKICBNYWduZXQ6ICgpID0+IE1hZ25ldCwKICBNYWlsOiAoKSA9PiBNYWlsLAogIE1haWxDaGVjazogKCkgPT4gTWFpbENoZWNrLAogIE1haWxNaW51czogKCkgPT4gTWFpbE1pbnVzLAogIE1haWxPcGVuOiAoKSA9PiBNYWlsT3BlbiwKICBNYWlsUGx1czogKCkgPT4gTWFpbFBsdXMsCiAgTWFpbFF1ZXN0aW9uOiAoKSA9PiBNYWlsUXVlc3Rpb25NYXJrLAogIE1haWxRdWVzdGlvbk1hcms6ICgpID0+IE1haWxRdWVzdGlvbk1hcmssCiAgTWFpbFNlYXJjaDogKCkgPT4gTWFpbFNlYXJjaCwKICBNYWlsV2FybmluZzogKCkgPT4gTWFpbFdhcm5pbmcsCiAgTWFpbFg6ICgpID0+IE1haWxYLAogIE1haWxib3g6ICgpID0+IE1haWxib3gsCiAgTWFpbHM6ICgpID0+IE1haWxzLAogIE1hcDogKCkgPT4gTWFwMiwKICBNYXBNaW51czogKCkgPT4gTWFwTWludXMsCiAgTWFwUGluOiAoKSA9PiBNYXBQaW4sCiAgTWFwUGluQ2hlY2s6ICgpID0+IE1hcFBpbkNoZWNrLAogIE1hcFBpbkNoZWNrSW5zaWRlOiAoKSA9PiBNYXBQaW5DaGVja0luc2lkZSwKICBNYXBQaW5Ib3VzZTogKCkgPT4gTWFwUGluSG91c2UsCiAgTWFwUGluTWludXM6ICgpID0+IE1hcFBpbk1pbnVzLAogIE1hcFBpbk1pbnVzSW5zaWRlOiAoKSA9PiBNYXBQaW5NaW51c0luc2lkZSwKICBNYXBQaW5PZmY6ICgpID0+IE1hcFBpbk9mZiwKICBNYXBQaW5QZW46ICgpID0+IE1hcFBpblBlbiwKICBNYXBQaW5QbHVzOiAoKSA9PiBNYXBQaW5QbHVzLAogIE1hcFBpblBsdXNJbnNpZGU6ICgpID0+IE1hcFBpblBsdXNJbnNpZGUsCiAgTWFwUGluWDogKCkgPT4gTWFwUGluWCwKICBNYXBQaW5YSW5zaWRlOiAoKSA9PiBNYXBQaW5YSW5zaWRlLAogIE1hcFBpbm5lZDogKCkgPT4gTWFwUGlubmVkLAogIE1hcFBsdXM6ICgpID0+IE1hcFBsdXMsCiAgTWFyczogKCkgPT4gTWFycywKICBNYXJzU3Ryb2tlOiAoKSA9PiBNYXJzU3Ryb2tlLAogIE1hcnRpbmk6ICgpID0+IE1hcnRpbmksCiAgTWF4aW1pemU6ICgpID0+IE1heGltaXplLAogIE1heGltaXplMjogKCkgPT4gTWF4aW1pemUyLAogIE1lZGFsOiAoKSA9PiBNZWRhbCwKICBNZWdhcGhvbmU6ICgpID0+IE1lZ2FwaG9uZSwKICBNZWdhcGhvbmVPZmY6ICgpID0+IE1lZ2FwaG9uZU9mZiwKICBNZWg6ICgpID0+IE1laCwKICBNZW1vcnlTdGljazogKCkgPT4gTWVtb3J5U3RpY2ssCiAgTWVudTogKCkgPT4gTWVudSwKICBNZW51U3F1YXJlOiAoKSA9PiBTcXVhcmVNZW51LAogIE1lcmdlOiAoKSA9PiBNZXJnZSwKICBNZXNzYWdlQ2lyY2xlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlLAogIE1lc3NhZ2VDaXJjbGVDb2RlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlQ29kZSwKICBNZXNzYWdlQ2lyY2xlRGFzaGVkOiAoKSA9PiBNZXNzYWdlQ2lyY2xlRGFzaGVkLAogIE1lc3NhZ2VDaXJjbGVIZWFydDogKCkgPT4gTWVzc2FnZUNpcmNsZUhlYXJ0LAogIE1lc3NhZ2VDaXJjbGVNb3JlOiAoKSA9PiBNZXNzYWdlQ2lyY2xlTW9yZSwKICBNZXNzYWdlQ2lyY2xlT2ZmOiAoKSA9PiBNZXNzYWdlQ2lyY2xlT2ZmLAogIE1lc3NhZ2VDaXJjbGVQbHVzOiAoKSA9PiBNZXNzYWdlQ2lyY2xlUGx1cywKICBNZXNzYWdlQ2lyY2xlUXVlc3Rpb246ICgpID0+IE1lc3NhZ2VDaXJjbGVRdWVzdGlvbk1hcmssCiAgTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyazogKCkgPT4gTWVzc2FnZUNpcmNsZVF1ZXN0aW9uTWFyaywKICBNZXNzYWdlQ2lyY2xlUmVwbHk6ICgpID0+IE1lc3NhZ2VDaXJjbGVSZXBseSwKICBNZXNzYWdlQ2lyY2xlV2FybmluZzogKCkgPT4gTWVzc2FnZUNpcmNsZVdhcm5pbmcsCiAgTWVzc2FnZUNpcmNsZVg6ICgpID0+IE1lc3NhZ2VDaXJjbGVYLAogIE1lc3NhZ2VTcXVhcmU6ICgpID0+IE1lc3NhZ2VTcXVhcmUsCiAgTWVzc2FnZVNxdWFyZUNvZGU6ICgpID0+IE1lc3NhZ2VTcXVhcmVDb2RlLAogIE1lc3NhZ2VTcXVhcmVEYXNoZWQ6ICgpID0+IE1lc3NhZ2VTcXVhcmVEYXNoZWQsCiAgTWVzc2FnZVNxdWFyZURpZmY6ICgpID0+IE1lc3NhZ2VTcXVhcmVEaWZmLAogIE1lc3NhZ2VTcXVhcmVEb3Q6ICgpID0+IE1lc3NhZ2VTcXVhcmVEb3QsCiAgTWVzc2FnZVNxdWFyZUhlYXJ0OiAoKSA9PiBNZXNzYWdlU3F1YXJlSGVhcnQsCiAgTWVzc2FnZVNxdWFyZUxvY2s6ICgpID0+IE1lc3NhZ2VTcXVhcmVMb2NrLAogIE1lc3NhZ2VTcXVhcmVNb3JlOiAoKSA9PiBNZXNzYWdlU3F1YXJlTW9yZSwKICBNZXNzYWdlU3F1YXJlT2ZmOiAoKSA9PiBNZXNzYWdlU3F1YXJlT2ZmLAogIE1lc3NhZ2VTcXVhcmVQbHVzOiAoKSA9PiBNZXNzYWdlU3F1YXJlUGx1cywKICBNZXNzYWdlU3F1YXJlUXVvdGU6ICgpID0+IE1lc3NhZ2VTcXVhcmVRdW90ZSwKICBNZXNzYWdlU3F1YXJlUmVwbHk6ICgpID0+IE1lc3NhZ2VTcXVhcmVSZXBseSwKICBNZXNzYWdlU3F1YXJlU2hhcmU6ICgpID0+IE1lc3NhZ2VTcXVhcmVTaGFyZSwKICBNZXNzYWdlU3F1YXJlVGV4dDogKCkgPT4gTWVzc2FnZVNxdWFyZVRleHQsCiAgTWVzc2FnZVNxdWFyZVdhcm5pbmc6ICgpID0+IE1lc3NhZ2VTcXVhcmVXYXJuaW5nLAogIE1lc3NhZ2VTcXVhcmVYOiAoKSA9PiBNZXNzYWdlU3F1YXJlWCwKICBNZXNzYWdlc1NxdWFyZTogKCkgPT4gTWVzc2FnZXNTcXVhcmUsCiAgTWljOiAoKSA9PiBNaWMsCiAgTWljMjogKCkgPT4gTWljVm9jYWwsCiAgTWljT2ZmOiAoKSA9PiBNaWNPZmYsCiAgTWljVm9jYWw6ICgpID0+IE1pY1ZvY2FsLAogIE1pY3JvY2hpcDogKCkgPT4gTWljcm9jaGlwLAogIE1pY3Jvc2NvcGU6ICgpID0+IE1pY3Jvc2NvcGUsCiAgTWljcm93YXZlOiAoKSA9PiBNaWNyb3dhdmUsCiAgTWlsZXN0b25lOiAoKSA9PiBNaWxlc3RvbmUsCiAgTWlsazogKCkgPT4gTWlsaywKICBNaWxrT2ZmOiAoKSA9PiBNaWxrT2ZmLAogIE1pbmltaXplOiAoKSA9PiBNaW5pbWl6ZSwKICBNaW5pbWl6ZTI6ICgpID0+IE1pbmltaXplMiwKICBNaW51czogKCkgPT4gTWludXMsCiAgTWludXNDaXJjbGU6ICgpID0+IENpcmNsZU1pbnVzLAogIE1pbnVzU3F1YXJlOiAoKSA9PiBTcXVhcmVNaW51cywKICBNb25pdG9yOiAoKSA9PiBNb25pdG9yLAogIE1vbml0b3JDaGVjazogKCkgPT4gTW9uaXRvckNoZWNrLAogIE1vbml0b3JDbG91ZDogKCkgPT4gTW9uaXRvckNsb3VkLAogIE1vbml0b3JDb2c6ICgpID0+IE1vbml0b3JDb2csCiAgTW9uaXRvckRvdDogKCkgPT4gTW9uaXRvckRvdCwKICBNb25pdG9yRG93bjogKCkgPT4gTW9uaXRvckRvd24sCiAgTW9uaXRvck9mZjogKCkgPT4gTW9uaXRvck9mZiwKICBNb25pdG9yUGF1c2U6ICgpID0+IE1vbml0b3JQYXVzZSwKICBNb25pdG9yUGxheTogKCkgPT4gTW9uaXRvclBsYXksCiAgTW9uaXRvclNtYXJ0cGhvbmU6ICgpID0+IE1vbml0b3JTbWFydHBob25lLAogIE1vbml0b3JTcGVha2VyOiAoKSA9PiBNb25pdG9yU3BlYWtlciwKICBNb25pdG9yU3RvcDogKCkgPT4gTW9uaXRvclN0b3AsCiAgTW9uaXRvclVwOiAoKSA9PiBNb25pdG9yVXAsCiAgTW9uaXRvclg6ICgpID0+IE1vbml0b3JYLAogIE1vb246ICgpID0+IE1vb24sCiAgTW9vblN0YXI6ICgpID0+IE1vb25TdGFyLAogIE1vcmVIb3Jpem9udGFsOiAoKSA9PiBFbGxpcHNpcywKICBNb3JlVmVydGljYWw6ICgpID0+IEVsbGlwc2lzVmVydGljYWwsCiAgTW90b3JiaWtlOiAoKSA9PiBNb3RvcmJpa2UsCiAgTW91bnRhaW46ICgpID0+IE1vdW50YWluLAogIE1vdW50YWluU25vdzogKCkgPT4gTW91bnRhaW5Tbm93LAogIE1vdXNlOiAoKSA9PiBNb3VzZSwKICBNb3VzZU9mZjogKCkgPT4gTW91c2VPZmYsCiAgTW91c2VQb2ludGVyOiAoKSA9PiBNb3VzZVBvaW50ZXIsCiAgTW91c2VQb2ludGVyMjogKCkgPT4gTW91c2VQb2ludGVyMiwKICBNb3VzZVBvaW50ZXIyT2ZmOiAoKSA9PiBNb3VzZVBvaW50ZXIyT2ZmLAogIE1vdXNlUG9pbnRlckJhbjogKCkgPT4gTW91c2VQb2ludGVyQmFuLAogIE1vdXNlUG9pbnRlckNsaWNrOiAoKSA9PiBNb3VzZVBvaW50ZXJDbGljaywKICBNb3VzZVBvaW50ZXJTcXVhcmVEYXNoZWQ6ICgpID0+IFNxdWFyZURhc2hlZE1vdXNlUG9pbnRlciwKICBNb3ZlOiAoKSA9PiBNb3ZlLAogIE1vdmUzRDogKCkgPT4gTW92ZTNkLAogIE1vdmUzZDogKCkgPT4gTW92ZTNkLAogIE1vdmVEaWFnb25hbDogKCkgPT4gTW92ZURpYWdvbmFsLAogIE1vdmVEaWFnb25hbDI6ICgpID0+IE1vdmVEaWFnb25hbDIsCiAgTW92ZURvd246ICgpID0+IE1vdmVEb3duLAogIE1vdmVEb3duTGVmdDogKCkgPT4gTW92ZURvd25MZWZ0LAogIE1vdmVEb3duUmlnaHQ6ICgpID0+IE1vdmVEb3duUmlnaHQsCiAgTW92ZUhvcml6b250YWw6ICgpID0+IE1vdmVIb3Jpem9udGFsLAogIE1vdmVMZWZ0OiAoKSA9PiBNb3ZlTGVmdCwKICBNb3ZlUmlnaHQ6ICgpID0+IE1vdmVSaWdodCwKICBNb3ZlVXA6ICgpID0+IE1vdmVVcCwKICBNb3ZlVXBMZWZ0OiAoKSA9PiBNb3ZlVXBMZWZ0LAogIE1vdmVVcFJpZ2h0OiAoKSA9PiBNb3ZlVXBSaWdodCwKICBNb3ZlVmVydGljYWw6ICgpID0+IE1vdmVWZXJ0aWNhbCwKICBNdXNpYzogKCkgPT4gTXVzaWMsCiAgTXVzaWMyOiAoKSA9PiBNdXNpYzIsCiAgTXVzaWMzOiAoKSA9PiBNdXNpYzMsCiAgTXVzaWM0OiAoKSA9PiBNdXNpYzQsCiAgTmF2aWdhdGlvbjogKCkgPT4gTmF2aWdhdGlvbiwKICBOYXZpZ2F0aW9uMjogKCkgPT4gTmF2aWdhdGlvbjIsCiAgTmF2aWdhdGlvbjJPZmY6ICgpID0+IE5hdmlnYXRpb24yT2ZmLAogIE5hdmlnYXRpb25PZmY6ICgpID0+IE5hdmlnYXRpb25PZmYsCiAgTmV0d29yazogKCkgPT4gTmV0d29yaywKICBOZXdzcGFwZXI6ICgpID0+IE5ld3NwYXBlciwKICBOZmM6ICgpID0+IE5mYywKICBOb25CaW5hcnk6ICgpID0+IE5vbkJpbmFyeSwKICBOb3RlYm9vazogKCkgPT4gTm90ZWJvb2ssCiAgTm90ZWJvb2tQZW46ICgpID0+IE5vdGVib29rUGVuLAogIE5vdGVib29rVGFiczogKCkgPT4gTm90ZWJvb2tUYWJzLAogIE5vdGVib29rVGV4dDogKCkgPT4gTm90ZWJvb2tUZXh0LAogIE5vdGVwYWRUZXh0OiAoKSA9PiBOb3RlcGFkVGV4dCwKICBOb3RlcGFkVGV4dERhc2hlZDogKCkgPT4gTm90ZXBhZFRleHREYXNoZWQsCiAgTnV0OiAoKSA9PiBOdXQsCiAgTnV0T2ZmOiAoKSA9PiBOdXRPZmYsCiAgT2N0YWdvbjogKCkgPT4gT2N0YWdvbiwKICBPY3RhZ29uQWxlcnQ6ICgpID0+IE9jdGFnb25BbGVydCwKICBPY3RhZ29uTWludXM6ICgpID0+IE9jdGFnb25NaW51cywKICBPY3RhZ29uUGF1c2U6ICgpID0+IE9jdGFnb25QYXVzZSwKICBPY3RhZ29uWDogKCkgPT4gT2N0YWdvblgsCiAgT21lZ2E6ICgpID0+IE9tZWdhLAogIE9wdGlvbjogKCkgPT4gT3B0aW9uLAogIE9yYml0OiAoKSA9PiBPcmJpdCwKICBPcmlnYW1pOiAoKSA9PiBPcmlnYW1pLAogIE91dGRlbnQ6ICgpID0+IExpc3RJbmRlbnREZWNyZWFzZSwKICBQYWNrYWdlOiAoKSA9PiBQYWNrYWdlLAogIFBhY2thZ2UyOiAoKSA9PiBQYWNrYWdlMiwKICBQYWNrYWdlQ2hlY2s6ICgpID0+IFBhY2thZ2VDaGVjaywKICBQYWNrYWdlTWludXM6ICgpID0+IFBhY2thZ2VNaW51cywKICBQYWNrYWdlT3BlbjogKCkgPT4gUGFja2FnZU9wZW4sCiAgUGFja2FnZVBsdXM6ICgpID0+IFBhY2thZ2VQbHVzLAogIFBhY2thZ2VTZWFyY2g6ICgpID0+IFBhY2thZ2VTZWFyY2gsCiAgUGFja2FnZVg6ICgpID0+IFBhY2thZ2VYLAogIFBhaW50QnVja2V0OiAoKSA9PiBQYWludEJ1Y2tldCwKICBQYWludFJvbGxlcjogKCkgPT4gUGFpbnRSb2xsZXIsCiAgUGFpbnRicnVzaDogKCkgPT4gUGFpbnRicnVzaCwKICBQYWludGJydXNoMjogKCkgPT4gUGFpbnRicnVzaFZlcnRpY2FsLAogIFBhaW50YnJ1c2hWZXJ0aWNhbDogKCkgPT4gUGFpbnRicnVzaFZlcnRpY2FsLAogIFBhbGV0dGU6ICgpID0+IFBhbGV0dGUsCiAgUGFsbXRyZWU6ICgpID0+IFRyZWVQYWxtLAogIFBhbmRhOiAoKSA9PiBQYW5kYSwKICBQYW5lbEJvdHRvbTogKCkgPT4gUGFuZWxCb3R0b20sCiAgUGFuZWxCb3R0b21DbG9zZTogKCkgPT4gUGFuZWxCb3R0b21DbG9zZSwKICBQYW5lbEJvdHRvbURhc2hlZDogKCkgPT4gUGFuZWxCb3R0b21EYXNoZWQsCiAgUGFuZWxCb3R0b21JbmFjdGl2ZTogKCkgPT4gUGFuZWxCb3R0b21EYXNoZWQsCiAgUGFuZWxCb3R0b21PcGVuOiAoKSA9PiBQYW5lbEJvdHRvbU9wZW4sCiAgUGFuZWxMZWZ0OiAoKSA9PiBQYW5lbExlZnQsCiAgUGFuZWxMZWZ0Q2xvc2U6ICgpID0+IFBhbmVsTGVmdENsb3NlLAogIFBhbmVsTGVmdERhc2hlZDogKCkgPT4gUGFuZWxMZWZ0RGFzaGVkLAogIFBhbmVsTGVmdEluYWN0aXZlOiAoKSA9PiBQYW5lbExlZnREYXNoZWQsCiAgUGFuZWxMZWZ0T3BlbjogKCkgPT4gUGFuZWxMZWZ0T3BlbiwKICBQYW5lbExlZnRSaWdodERhc2hlZDogKCkgPT4gUGFuZWxMZWZ0UmlnaHREYXNoZWQsCiAgUGFuZWxSaWdodDogKCkgPT4gUGFuZWxSaWdodCwKICBQYW5lbFJpZ2h0Q2xvc2U6ICgpID0+IFBhbmVsUmlnaHRDbG9zZSwKICBQYW5lbFJpZ2h0RGFzaGVkOiAoKSA9PiBQYW5lbFJpZ2h0RGFzaGVkLAogIFBhbmVsUmlnaHRJbmFjdGl2ZTogKCkgPT4gUGFuZWxSaWdodERhc2hlZCwKICBQYW5lbFJpZ2h0T3BlbjogKCkgPT4gUGFuZWxSaWdodE9wZW4sCiAgUGFuZWxUb3A6ICgpID0+IFBhbmVsVG9wLAogIFBhbmVsVG9wQm90dG9tRGFzaGVkOiAoKSA9PiBQYW5lbFRvcEJvdHRvbURhc2hlZCwKICBQYW5lbFRvcENsb3NlOiAoKSA9PiBQYW5lbFRvcENsb3NlLAogIFBhbmVsVG9wRGFzaGVkOiAoKSA9PiBQYW5lbFRvcERhc2hlZCwKICBQYW5lbFRvcEluYWN0aXZlOiAoKSA9PiBQYW5lbFRvcERhc2hlZCwKICBQYW5lbFRvcE9wZW46ICgpID0+IFBhbmVsVG9wT3BlbiwKICBQYW5lbHNMZWZ0Qm90dG9tOiAoKSA9PiBQYW5lbHNMZWZ0Qm90dG9tLAogIFBhbmVsc0xlZnRSaWdodDogKCkgPT4gQ29sdW1uczMsCiAgUGFuZWxzUmlnaHRCb3R0b206ICgpID0+IFBhbmVsc1JpZ2h0Qm90dG9tLAogIFBhbmVsc1RvcEJvdHRvbTogKCkgPT4gUm93czMsCiAgUGFuZWxzVG9wTGVmdDogKCkgPT4gUGFuZWxzVG9wTGVmdCwKICBQYXBlcmNsaXA6ICgpID0+IFBhcGVyY2xpcCwKICBQYXJlbnRoZXNlczogKCkgPT4gUGFyZW50aGVzZXMsCiAgUGFya2luZ0NpcmNsZTogKCkgPT4gQ2lyY2xlUGFya2luZywKICBQYXJraW5nQ2lyY2xlT2ZmOiAoKSA9PiBDaXJjbGVQYXJraW5nT2ZmLAogIFBhcmtpbmdNZXRlcjogKCkgPT4gUGFya2luZ01ldGVyLAogIFBhcmtpbmdTcXVhcmU6ICgpID0+IFNxdWFyZVBhcmtpbmcsCiAgUGFya2luZ1NxdWFyZU9mZjogKCkgPT4gU3F1YXJlUGFya2luZ09mZiwKICBQYXJ0eVBvcHBlcjogKCkgPT4gUGFydHlQb3BwZXIsCiAgUGF1c2U6ICgpID0+IFBhdXNlLAogIFBhdXNlQ2lyY2xlOiAoKSA9PiBDaXJjbGVQYXVzZSwKICBQYXVzZU9jdGFnb246ICgpID0+IE9jdGFnb25QYXVzZSwKICBQYXdQcmludDogKCkgPT4gUGF3UHJpbnQsCiAgUGNDYXNlOiAoKSA9PiBQY0Nhc2UsCiAgUGVuOiAoKSA9PiBQZW4sCiAgUGVuQm94OiAoKSA9PiBTcXVhcmVQZW4sCiAgUGVuTGluZTogKCkgPT4gUGVuTGluZSwKICBQZW5PZmY6ICgpID0+IFBlbk9mZiwKICBQZW5TcXVhcmU6ICgpID0+IFNxdWFyZVBlbiwKICBQZW5Ub29sOiAoKSA9PiBQZW5Ub29sLAogIFBlbmNpbDogKCkgPT4gUGVuY2lsLAogIFBlbmNpbExpbmU6ICgpID0+IFBlbmNpbExpbmUsCiAgUGVuY2lsT2ZmOiAoKSA9PiBQZW5jaWxPZmYsCiAgUGVuY2lsUnVsZXI6ICgpID0+IFBlbmNpbFJ1bGVyLAogIFBlbnRhZ29uOiAoKSA9PiBQZW50YWdvbiwKICBQZXJjZW50OiAoKSA9PiBQZXJjZW50LAogIFBlcmNlbnRDaXJjbGU6ICgpID0+IENpcmNsZVBlcmNlbnQsCiAgUGVyY2VudERpYW1vbmQ6ICgpID0+IERpYW1vbmRQZXJjZW50LAogIFBlcmNlbnRTcXVhcmU6ICgpID0+IFNxdWFyZVBlcmNlbnQsCiAgUGVyc29uU3RhbmRpbmc6ICgpID0+IFBlcnNvblN0YW5kaW5nLAogIFBoaWxpcHBpbmVQZXNvOiAoKSA9PiBQaGlsaXBwaW5lUGVzbywKICBQaG9uZTogKCkgPT4gUGhvbmUsCiAgUGhvbmVDYWxsOiAoKSA9PiBQaG9uZUNhbGwsCiAgUGhvbmVGb3J3YXJkZWQ6ICgpID0+IFBob25lRm9yd2FyZGVkLAogIFBob25lSW5jb21pbmc6ICgpID0+IFBob25lSW5jb21pbmcsCiAgUGhvbmVNaXNzZWQ6ICgpID0+IFBob25lTWlzc2VkLAogIFBob25lT2ZmOiAoKSA9PiBQaG9uZU9mZiwKICBQaG9uZU91dGdvaW5nOiAoKSA9PiBQaG9uZU91dGdvaW5nLAogIFBpOiAoKSA9PiBQaSwKICBQaVNxdWFyZTogKCkgPT4gU3F1YXJlUGksCiAgUGlhbm86ICgpID0+IFBpYW5vLAogIFBpY2theGU6ICgpID0+IFBpY2theGUsCiAgUGljdHVyZUluUGljdHVyZTogKCkgPT4gUGljdHVyZUluUGljdHVyZSwKICBQaWN0dXJlSW5QaWN0dXJlMjogKCkgPT4gUGljdHVyZUluUGljdHVyZTIsCiAgUGllQ2hhcnQ6ICgpID0+IENoYXJ0UGllLAogIFBpZ2d5QmFuazogKCkgPT4gUGlnZ3lCYW5rLAogIFBpbGNyb3c6ICgpID0+IFBpbGNyb3csCiAgUGlsY3Jvd0xlZnQ6ICgpID0+IFBpbGNyb3dMZWZ0LAogIFBpbGNyb3dSaWdodDogKCkgPT4gUGlsY3Jvd1JpZ2h0LAogIFBpbGNyb3dTcXVhcmU6ICgpID0+IFNxdWFyZVBpbGNyb3csCiAgUGlsbDogKCkgPT4gUGlsbCwKICBQaWxsQm90dGxlOiAoKSA9PiBQaWxsQm90dGxlLAogIFBpbjogKCkgPT4gUGluLAogIFBpbk9mZjogKCkgPT4gUGluT2ZmLAogIFBpcGV0dGU6ICgpID0+IFBpcGV0dGUsCiAgUGl6emE6ICgpID0+IFBpenphLAogIFBsYW5lOiAoKSA9PiBQbGFuZSwKICBQbGFuZUxhbmRpbmc6ICgpID0+IFBsYW5lTGFuZGluZywKICBQbGFuZVRha2VvZmY6ICgpID0+IFBsYW5lVGFrZW9mZiwKICBQbGF5OiAoKSA9PiBQbGF5LAogIFBsYXlDaXJjbGU6ICgpID0+IENpcmNsZVBsYXksCiAgUGxheVNxdWFyZTogKCkgPT4gU3F1YXJlUGxheSwKICBQbHVnOiAoKSA9PiBQbHVnLAogIFBsdWcyOiAoKSA9PiBQbHVnMiwKICBQbHVnWmFwOiAoKSA9PiBQbHVnWmFwLAogIFBsdWdaYXAyOiAoKSA9PiBQbHVnWmFwLAogIFBsdXM6ICgpID0+IFBsdXMsCiAgUGx1c0NpcmNsZTogKCkgPT4gQ2lyY2xlUGx1cywKICBQbHVzU3F1YXJlOiAoKSA9PiBTcXVhcmVQbHVzLAogIFBvY2tldDogKCkgPT4gUG9ja2V0LAogIFBvY2tldEtuaWZlOiAoKSA9PiBQb2NrZXRLbmlmZSwKICBQb2RjYXN0OiAoKSA9PiBQb2RjYXN0LAogIFBvaW50ZXI6ICgpID0+IFBvaW50ZXIsCiAgUG9pbnRlck9mZjogKCkgPT4gUG9pbnRlck9mZiwKICBQb3Bjb3JuOiAoKSA9PiBQb3Bjb3JuLAogIFBvcHNpY2xlOiAoKSA9PiBQb3BzaWNsZSwKICBQb3VuZFN0ZXJsaW5nOiAoKSA9PiBQb3VuZFN0ZXJsaW5nLAogIFBvd2VyOiAoKSA9PiBQb3dlciwKICBQb3dlckNpcmNsZTogKCkgPT4gQ2lyY2xlUG93ZXIsCiAgUG93ZXJPZmY6ICgpID0+IFBvd2VyT2ZmLAogIFBvd2VyU3F1YXJlOiAoKSA9PiBTcXVhcmVQb3dlciwKICBQcmVzZW50YXRpb246ICgpID0+IFByZXNlbnRhdGlvbiwKICBQcmludGVyOiAoKSA9PiBQcmludGVyLAogIFByaW50ZXJDaGVjazogKCkgPT4gUHJpbnRlckNoZWNrLAogIFByb2plY3RvcjogKCkgPT4gUHJvamVjdG9yLAogIFByb3BvcnRpb25zOiAoKSA9PiBQcm9wb3J0aW9ucywKICBQdXp6bGU6ICgpID0+IFB1enpsZSwKICBQeXJhbWlkOiAoKSA9PiBQeXJhbWlkLAogIFFyQ29kZTogKCkgPT4gUXJDb2RlLAogIFF1b3RlOiAoKSA9PiBRdW90ZSwKICBSYWJiaXQ6ICgpID0+IFJhYmJpdCwKICBSYWRhcjogKCkgPT4gUmFkYXIsCiAgUmFkaWF0aW9uOiAoKSA9PiBSYWRpYXRpb24sCiAgUmFkaWNhbDogKCkgPT4gUmFkaWNhbCwKICBSYWRpbzogKCkgPT4gUmFkaW8sCiAgUmFkaW9SZWNlaXZlcjogKCkgPT4gUmFkaW9SZWNlaXZlciwKICBSYWRpb1Rvd2VyOiAoKSA9PiBSYWRpb1Rvd2VyLAogIFJhZGl1czogKCkgPT4gUmFkaXVzLAogIFJhaWxTeW1ib2w6ICgpID0+IFJhaWxTeW1ib2wsCiAgUmFpbmJvdzogKCkgPT4gUmFpbmJvdywKICBSYXQ6ICgpID0+IFJhdCwKICBSYXRpbzogKCkgPT4gUmF0aW8sCiAgUmVjZWlwdDogKCkgPT4gUmVjZWlwdCwKICBSZWNlaXB0Q2VudDogKCkgPT4gUmVjZWlwdENlbnQsCiAgUmVjZWlwdEV1cm86ICgpID0+IFJlY2VpcHRFdXJvLAogIFJlY2VpcHRJbmRpYW5SdXBlZTogKCkgPT4gUmVjZWlwdEluZGlhblJ1cGVlLAogIFJlY2VpcHRKYXBhbmVzZVllbjogKCkgPT4gUmVjZWlwdEphcGFuZXNlWWVuLAogIFJlY2VpcHRQb3VuZFN0ZXJsaW5nOiAoKSA9PiBSZWNlaXB0UG91bmRTdGVybGluZywKICBSZWNlaXB0UnVzc2lhblJ1YmxlOiAoKSA9PiBSZWNlaXB0UnVzc2lhblJ1YmxlLAogIFJlY2VpcHRTd2lzc0ZyYW5jOiAoKSA9PiBSZWNlaXB0U3dpc3NGcmFuYywKICBSZWNlaXB0VGV4dDogKCkgPT4gUmVjZWlwdFRleHQsCiAgUmVjZWlwdFR1cmtpc2hMaXJhOiAoKSA9PiBSZWNlaXB0VHVya2lzaExpcmEsCiAgUmVjdGFuZ2xlQ2lyY2xlOiAoKSA9PiBSZWN0YW5nbGVDaXJjbGUsCiAgUmVjdGFuZ2xlRWxsaXBzaXM6ICgpID0+IFJlY3RhbmdsZUVsbGlwc2lzLAogIFJlY3RhbmdsZUdvZ2dsZXM6ICgpID0+IFJlY3RhbmdsZUdvZ2dsZXMsCiAgUmVjdGFuZ2xlSG9yaXpvbnRhbDogKCkgPT4gUmVjdGFuZ2xlSG9yaXpvbnRhbCwKICBSZWN0YW5nbGVWZXJ0aWNhbDogKCkgPT4gUmVjdGFuZ2xlVmVydGljYWwsCiAgUmVjeWNsZTogKCkgPT4gUmVjeWNsZSwKICBSZWRvOiAoKSA9PiBSZWRvLAogIFJlZG8yOiAoKSA9PiBSZWRvMiwKICBSZWRvRG90OiAoKSA9PiBSZWRvRG90LAogIFJlZnJlc2hDY3c6ICgpID0+IFJlZnJlc2hDY3csCiAgUmVmcmVzaENjd0RvdDogKCkgPT4gUmVmcmVzaENjd0RvdCwKICBSZWZyZXNoQ3c6ICgpID0+IFJlZnJlc2hDdywKICBSZWZyZXNoQ3dPZmY6ICgpID0+IFJlZnJlc2hDd09mZiwKICBSZWZyaWdlcmF0b3I6ICgpID0+IFJlZnJpZ2VyYXRvciwKICBSZWdleDogKCkgPT4gUmVnZXgsCiAgUmVtb3ZlRm9ybWF0dGluZzogKCkgPT4gUmVtb3ZlRm9ybWF0dGluZywKICBSZXBlYXQ6ICgpID0+IFJlcGVhdCwKICBSZXBlYXQxOiAoKSA9PiBSZXBlYXQxLAogIFJlcGVhdDI6ICgpID0+IFJlcGVhdDIsCiAgUmVwbGFjZTogKCkgPT4gUmVwbGFjZSwKICBSZXBsYWNlQWxsOiAoKSA9PiBSZXBsYWNlQWxsLAogIFJlcGx5OiAoKSA9PiBSZXBseSwKICBSZXBseUFsbDogKCkgPT4gUmVwbHlBbGwsCiAgUmV3aW5kOiAoKSA9PiBSZXdpbmQsCiAgUmliYm9uOiAoKSA9PiBSaWJib24sCiAgUm9ja2V0OiAoKSA9PiBSb2NrZXQsCiAgUm9ja2luZ0NoYWlyOiAoKSA9PiBSb2NraW5nQ2hhaXIsCiAgUm9sbGVyQ29hc3RlcjogKCkgPT4gUm9sbGVyQ29hc3RlciwKICBSb3NlOiAoKSA9PiBSb3NlLAogIFJvdGF0ZTNEOiAoKSA9PiBSb3RhdGUzZCwKICBSb3RhdGUzZDogKCkgPT4gUm90YXRlM2QsCiAgUm90YXRlQ2N3OiAoKSA9PiBSb3RhdGVDY3csCiAgUm90YXRlQ2N3S2V5OiAoKSA9PiBSb3RhdGVDY3dLZXksCiAgUm90YXRlQ2N3U3F1YXJlOiAoKSA9PiBSb3RhdGVDY3dTcXVhcmUsCiAgUm90YXRlQ3c6ICgpID0+IFJvdGF0ZUN3LAogIFJvdGF0ZUN3U3F1YXJlOiAoKSA9PiBSb3RhdGVDd1NxdWFyZSwKICBSb3V0ZTogKCkgPT4gUm91dGUsCiAgUm91dGVPZmY6ICgpID0+IFJvdXRlT2ZmLAogIFJvdXRlcjogKCkgPT4gUm91dGVyLAogIFJvd3M6ICgpID0+IFJvd3MyLAogIFJvd3MyOiAoKSA9PiBSb3dzMiwKICBSb3dzMzogKCkgPT4gUm93czMsCiAgUm93czQ6ICgpID0+IFJvd3M0LAogIFJzczogKCkgPT4gUnNzLAogIFJ1bGVyOiAoKSA9PiBSdWxlciwKICBSdWxlckRpbWVuc2lvbkxpbmU6ICgpID0+IFJ1bGVyRGltZW5zaW9uTGluZSwKICBSdXNzaWFuUnVibGU6ICgpID0+IFJ1c3NpYW5SdWJsZSwKICBTYWlsYm9hdDogKCkgPT4gU2FpbGJvYXQsCiAgU2FsYWQ6ICgpID0+IFNhbGFkLAogIFNhbmR3aWNoOiAoKSA9PiBTYW5kd2ljaCwKICBTYXRlbGxpdGU6ICgpID0+IFNhdGVsbGl0ZSwKICBTYXRlbGxpdGVEaXNoOiAoKSA9PiBTYXRlbGxpdGVEaXNoLAogIFNhdWRpUml5YWw6ICgpID0+IFNhdWRpUml5YWwsCiAgU2F2ZTogKCkgPT4gU2F2ZSwKICBTYXZlQWxsOiAoKSA9PiBTYXZlQWxsLAogIFNhdmVPZmY6ICgpID0+IFNhdmVPZmYsCiAgU2NhbGU6ICgpID0+IFNjYWxlLAogIFNjYWxlM0Q6ICgpID0+IFNjYWxlM2QsCiAgU2NhbGUzZDogKCkgPT4gU2NhbGUzZCwKICBTY2FsaW5nOiAoKSA9PiBTY2FsaW5nLAogIFNjYW46ICgpID0+IFNjYW4sCiAgU2NhbkJhcmNvZGU6ICgpID0+IFNjYW5CYXJjb2RlLAogIFNjYW5FeWU6ICgpID0+IFNjYW5FeWUsCiAgU2NhbkZhY2U6ICgpID0+IFNjYW5GYWNlLAogIFNjYW5IZWFydDogKCkgPT4gU2NhbkhlYXJ0LAogIFNjYW5MaW5lOiAoKSA9PiBTY2FuTGluZSwKICBTY2FuUXJDb2RlOiAoKSA9PiBTY2FuUXJDb2RlLAogIFNjYW5TZWFyY2g6ICgpID0+IFNjYW5TZWFyY2gsCiAgU2NhblRleHQ6ICgpID0+IFNjYW5UZXh0LAogIFNjYXR0ZXJDaGFydDogKCkgPT4gQ2hhcnRTY2F0dGVyLAogIFNjaG9vbDogKCkgPT4gU2Nob29sLAogIFNjaG9vbDI6ICgpID0+IFVuaXZlcnNpdHksCiAgU2Npc3NvcnM6ICgpID0+IFNjaXNzb3JzLAogIFNjaXNzb3JzTGluZURhc2hlZDogKCkgPT4gU2Npc3NvcnNMaW5lRGFzaGVkLAogIFNjaXNzb3JzU3F1YXJlOiAoKSA9PiBTcXVhcmVTY2lzc29ycywKICBTY2lzc29yc1NxdWFyZURhc2hlZEJvdHRvbTogKCkgPT4gU3F1YXJlQm90dG9tRGFzaGVkU2Npc3NvcnMsCiAgU2Nvb3RlcjogKCkgPT4gU2Nvb3RlciwKICBTY3JlZW5TaGFyZTogKCkgPT4gU2NyZWVuU2hhcmUsCiAgU2NyZWVuU2hhcmVPZmY6ICgpID0+IFNjcmVlblNoYXJlT2ZmLAogIFNjcm9sbDogKCkgPT4gU2Nyb2xsLAogIFNjcm9sbFRleHQ6ICgpID0+IFNjcm9sbFRleHQsCiAgU2VhcmNoOiAoKSA9PiBTZWFyY2gsCiAgU2VhcmNoQWxlcnQ6ICgpID0+IFNlYXJjaEFsZXJ0LAogIFNlYXJjaENoZWNrOiAoKSA9PiBTZWFyY2hDaGVjaywKICBTZWFyY2hDb2RlOiAoKSA9PiBTZWFyY2hDb2RlLAogIFNlYXJjaFNsYXNoOiAoKSA9PiBTZWFyY2hTbGFzaCwKICBTZWFyY2hYOiAoKSA9PiBTZWFyY2hYLAogIFNlY3Rpb246ICgpID0+IFNlY3Rpb24sCiAgU2VuZDogKCkgPT4gU2VuZCwKICBTZW5kSG9yaXpvbmFsOiAoKSA9PiBTZW5kSG9yaXpvbnRhbCwKICBTZW5kSG9yaXpvbnRhbDogKCkgPT4gU2VuZEhvcml6b250YWwsCiAgU2VuZFRvQmFjazogKCkgPT4gU2VuZFRvQmFjaywKICBTZXBhcmF0b3JIb3Jpem9udGFsOiAoKSA9PiBTZXBhcmF0b3JIb3Jpem9udGFsLAogIFNlcGFyYXRvclZlcnRpY2FsOiAoKSA9PiBTZXBhcmF0b3JWZXJ0aWNhbCwKICBTZXJ2ZXI6ICgpID0+IFNlcnZlciwKICBTZXJ2ZXJDb2c6ICgpID0+IFNlcnZlckNvZywKICBTZXJ2ZXJDcmFzaDogKCkgPT4gU2VydmVyQ3Jhc2gsCiAgU2VydmVyT2ZmOiAoKSA9PiBTZXJ2ZXJPZmYsCiAgU2V0dGluZ3M6ICgpID0+IFNldHRpbmdzLAogIFNldHRpbmdzMjogKCkgPT4gU2V0dGluZ3MyLAogIFNoYXBlczogKCkgPT4gU2hhcGVzLAogIFNoYXJlOiAoKSA9PiBTaGFyZSwKICBTaGFyZTI6ICgpID0+IFNoYXJlMiwKICBTaGVldDogKCkgPT4gU2hlZXQsCiAgU2hlbGw6ICgpID0+IFNoZWxsLAogIFNoaWVsZDogKCkgPT4gU2hpZWxkLAogIFNoaWVsZEFsZXJ0OiAoKSA9PiBTaGllbGRBbGVydCwKICBTaGllbGRCYW46ICgpID0+IFNoaWVsZEJhbiwKICBTaGllbGRDaGVjazogKCkgPT4gU2hpZWxkQ2hlY2ssCiAgU2hpZWxkQ2xvc2U6ICgpID0+IFNoaWVsZFgsCiAgU2hpZWxkRWxsaXBzaXM6ICgpID0+IFNoaWVsZEVsbGlwc2lzLAogIFNoaWVsZEhhbGY6ICgpID0+IFNoaWVsZEhhbGYsCiAgU2hpZWxkTWludXM6ICgpID0+IFNoaWVsZE1pbnVzLAogIFNoaWVsZE9mZjogKCkgPT4gU2hpZWxkT2ZmLAogIFNoaWVsZFBsdXM6ICgpID0+IFNoaWVsZFBsdXMsCiAgU2hpZWxkUXVlc3Rpb246ICgpID0+IFNoaWVsZFF1ZXN0aW9uTWFyaywKICBTaGllbGRRdWVzdGlvbk1hcms6ICgpID0+IFNoaWVsZFF1ZXN0aW9uTWFyaywKICBTaGllbGRVc2VyOiAoKSA9PiBTaGllbGRVc2VyLAogIFNoaWVsZFg6ICgpID0+IFNoaWVsZFgsCiAgU2hpcDogKCkgPT4gU2hpcCwKICBTaGlwV2hlZWw6ICgpID0+IFNoaXBXaGVlbCwKICBTaGlydDogKCkgPT4gU2hpcnQsCiAgU2hvcHBpbmdCYWc6ICgpID0+IFNob3BwaW5nQmFnLAogIFNob3BwaW5nQmFza2V0OiAoKSA9PiBTaG9wcGluZ0Jhc2tldCwKICBTaG9wcGluZ0NhcnQ6ICgpID0+IFNob3BwaW5nQ2FydCwKICBTaG92ZWw6ICgpID0+IFNob3ZlbCwKICBTaG93ZXJIZWFkOiAoKSA9PiBTaG93ZXJIZWFkLAogIFNocmVkZGVyOiAoKSA9PiBTaHJlZGRlciwKICBTaHJpbXA6ICgpID0+IFNocmltcCwKICBTaHJpbms6ICgpID0+IFNocmluaywKICBTaHJ1YjogKCkgPT4gU2hydWIsCiAgU2h1ZmZsZTogKCkgPT4gU2h1ZmZsZSwKICBTaWRlYmFyOiAoKSA9PiBQYW5lbExlZnQsCiAgU2lkZWJhckNsb3NlOiAoKSA9PiBQYW5lbExlZnRDbG9zZSwKICBTaWRlYmFyT3BlbjogKCkgPT4gUGFuZWxMZWZ0T3BlbiwKICBTaWdtYTogKCkgPT4gU2lnbWEsCiAgU2lnbWFTcXVhcmU6ICgpID0+IFNxdWFyZVNpZ21hLAogIFNpZ25hbDogKCkgPT4gU2lnbmFsLAogIFNpZ25hbEhpZ2g6ICgpID0+IFNpZ25hbEhpZ2gsCiAgU2lnbmFsTG93OiAoKSA9PiBTaWduYWxMb3csCiAgU2lnbmFsTWVkaXVtOiAoKSA9PiBTaWduYWxNZWRpdW0sCiAgU2lnbmFsWmVybzogKCkgPT4gU2lnbmFsWmVybywKICBTaWduYXR1cmU6ICgpID0+IFNpZ25hdHVyZSwKICBTaWducG9zdDogKCkgPT4gU2lnbnBvc3QsCiAgU2lnbnBvc3RCaWc6ICgpID0+IFNpZ25wb3N0QmlnLAogIFNpcmVuOiAoKSA9PiBTaXJlbiwKICBTa2lwQmFjazogKCkgPT4gU2tpcEJhY2ssCiAgU2tpcEZvcndhcmQ6ICgpID0+IFNraXBGb3J3YXJkLAogIFNrdWxsOiAoKSA9PiBTa3VsbCwKICBTbGFjazogKCkgPT4gU2xhY2ssCiAgU2xhc2g6ICgpID0+IFNsYXNoLAogIFNsYXNoU3F1YXJlOiAoKSA9PiBTcXVhcmVTbGFzaCwKICBTbGljZTogKCkgPT4gU2xpY2UsCiAgU2xpZGVyczogKCkgPT4gU2xpZGVyc1ZlcnRpY2FsLAogIFNsaWRlcnNIb3Jpem9udGFsOiAoKSA9PiBTbGlkZXJzSG9yaXpvbnRhbCwKICBTbGlkZXJzVmVydGljYWw6ICgpID0+IFNsaWRlcnNWZXJ0aWNhbCwKICBTbWFydHBob25lOiAoKSA9PiBTbWFydHBob25lLAogIFNtYXJ0cGhvbmVDaGFyZ2luZzogKCkgPT4gU21hcnRwaG9uZUNoYXJnaW5nLAogIFNtYXJ0cGhvbmVOZmM6ICgpID0+IFNtYXJ0cGhvbmVOZmMsCiAgU21pbGU6ICgpID0+IFNtaWxlLAogIFNtaWxlUGx1czogKCkgPT4gU21pbGVQbHVzLAogIFNuYWlsOiAoKSA9PiBTbmFpbCwKICBTbm93Zmxha2U6ICgpID0+IFNub3dmbGFrZSwKICBTb2FwRGlzcGVuc2VyRHJvcGxldDogKCkgPT4gU29hcERpc3BlbnNlckRyb3BsZXQsCiAgU29mYTogKCkgPT4gU29mYSwKICBTb2xhclBhbmVsOiAoKSA9PiBTb2xhclBhbmVsLAogIFNvcnRBc2M6ICgpID0+IEFycm93VXBOYXJyb3dXaWRlLAogIFNvcnREZXNjOiAoKSA9PiBBcnJvd0Rvd25XaWRlTmFycm93LAogIFNvdXA6ICgpID0+IFNvdXAsCiAgU3BhY2U6ICgpID0+IFNwYWNlLAogIFNwYWRlOiAoKSA9PiBTcGFkZSwKICBTcGFya2xlOiAoKSA9PiBTcGFya2xlLAogIFNwYXJrbGVzOiAoKSA9PiBTcGFya2xlcywKICBTcGVha2VyOiAoKSA9PiBTcGVha2VyLAogIFNwZWVjaDogKCkgPT4gU3BlZWNoLAogIFNwZWxsQ2hlY2s6ICgpID0+IFNwZWxsQ2hlY2ssCiAgU3BlbGxDaGVjazI6ICgpID0+IFNwZWxsQ2hlY2syLAogIFNwbGluZTogKCkgPT4gU3BsaW5lLAogIFNwbGluZVBvaW50ZXI6ICgpID0+IFNwbGluZVBvaW50ZXIsCiAgU3BsaXQ6ICgpID0+IFNwbGl0LAogIFNwbGl0U3F1YXJlSG9yaXpvbnRhbDogKCkgPT4gU3F1YXJlU3BsaXRIb3Jpem9udGFsLAogIFNwbGl0U3F1YXJlVmVydGljYWw6ICgpID0+IFNxdWFyZVNwbGl0VmVydGljYWwsCiAgU3Bvb2w6ICgpID0+IFNwb29sLAogIFNwb3RsaWdodDogKCkgPT4gU3BvdGxpZ2h0LAogIFNwcmF5Q2FuOiAoKSA9PiBTcHJheUNhbiwKICBTcHJvdXQ6ICgpID0+IFNwcm91dCwKICBTcXVhcmU6ICgpID0+IFNxdWFyZSwKICBTcXVhcmVBY3Rpdml0eTogKCkgPT4gU3F1YXJlQWN0aXZpdHksCiAgU3F1YXJlQXJyb3dEb3duOiAoKSA9PiBTcXVhcmVBcnJvd0Rvd24sCiAgU3F1YXJlQXJyb3dEb3duTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dEb3duTGVmdCwKICBTcXVhcmVBcnJvd0Rvd25SaWdodDogKCkgPT4gU3F1YXJlQXJyb3dEb3duUmlnaHQsCiAgU3F1YXJlQXJyb3dMZWZ0OiAoKSA9PiBTcXVhcmVBcnJvd0xlZnQsCiAgU3F1YXJlQXJyb3dPdXREb3duTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duTGVmdCwKICBTcXVhcmVBcnJvd091dERvd25SaWdodDogKCkgPT4gU3F1YXJlQXJyb3dPdXREb3duUmlnaHQsCiAgU3F1YXJlQXJyb3dPdXRVcExlZnQ6ICgpID0+IFNxdWFyZUFycm93T3V0VXBMZWZ0LAogIFNxdWFyZUFycm93T3V0VXBSaWdodDogKCkgPT4gU3F1YXJlQXJyb3dPdXRVcFJpZ2h0LAogIFNxdWFyZUFycm93UmlnaHQ6ICgpID0+IFNxdWFyZUFycm93UmlnaHQsCiAgU3F1YXJlQXJyb3dVcDogKCkgPT4gU3F1YXJlQXJyb3dVcCwKICBTcXVhcmVBcnJvd1VwTGVmdDogKCkgPT4gU3F1YXJlQXJyb3dVcExlZnQsCiAgU3F1YXJlQXJyb3dVcFJpZ2h0OiAoKSA9PiBTcXVhcmVBcnJvd1VwUmlnaHQsCiAgU3F1YXJlQXN0ZXJpc2s6ICgpID0+IFNxdWFyZUFzdGVyaXNrLAogIFNxdWFyZUJvdHRvbURhc2hlZFNjaXNzb3JzOiAoKSA9PiBTcXVhcmVCb3R0b21EYXNoZWRTY2lzc29ycywKICBTcXVhcmVDaGFydEdhbnR0OiAoKSA9PiBTcXVhcmVDaGFydEdhbnR0LAogIFNxdWFyZUNoZWNrOiAoKSA9PiBTcXVhcmVDaGVjaywKICBTcXVhcmVDaGVja0JpZzogKCkgPT4gU3F1YXJlQ2hlY2tCaWcsCiAgU3F1YXJlQ2hldnJvbkRvd246ICgpID0+IFNxdWFyZUNoZXZyb25Eb3duLAogIFNxdWFyZUNoZXZyb25MZWZ0OiAoKSA9PiBTcXVhcmVDaGV2cm9uTGVmdCwKICBTcXVhcmVDaGV2cm9uUmlnaHQ6ICgpID0+IFNxdWFyZUNoZXZyb25SaWdodCwKICBTcXVhcmVDaGV2cm9uVXA6ICgpID0+IFNxdWFyZUNoZXZyb25VcCwKICBTcXVhcmVDb2RlOiAoKSA9PiBTcXVhcmVDb2RlLAogIFNxdWFyZURhc2hlZDogKCkgPT4gU3F1YXJlRGFzaGVkLAogIFNxdWFyZURhc2hlZEJvdHRvbTogKCkgPT4gU3F1YXJlRGFzaGVkQm90dG9tLAogIFNxdWFyZURhc2hlZEJvdHRvbUNvZGU6ICgpID0+IFNxdWFyZURhc2hlZEJvdHRvbUNvZGUsCiAgU3F1YXJlRGFzaGVkS2FuYmFuOiAoKSA9PiBTcXVhcmVEYXNoZWRLYW5iYW4sCiAgU3F1YXJlRGFzaGVkTW91c2VQb2ludGVyOiAoKSA9PiBTcXVhcmVEYXNoZWRNb3VzZVBvaW50ZXIsCiAgU3F1YXJlRGFzaGVkVG9wU29saWQ6ICgpID0+IFNxdWFyZURhc2hlZFRvcFNvbGlkLAogIFNxdWFyZURpdmlkZTogKCkgPT4gU3F1YXJlRGl2aWRlLAogIFNxdWFyZURvdDogKCkgPT4gU3F1YXJlRG90LAogIFNxdWFyZUVxdWFsOiAoKSA9PiBTcXVhcmVFcXVhbCwKICBTcXVhcmVGdW5jdGlvbjogKCkgPT4gU3F1YXJlRnVuY3Rpb24sCiAgU3F1YXJlR2FudHRDaGFydDogKCkgPT4gU3F1YXJlQ2hhcnRHYW50dCwKICBTcXVhcmVLYW5iYW46ICgpID0+IFNxdWFyZUthbmJhbiwKICBTcXVhcmVMaWJyYXJ5OiAoKSA9PiBTcXVhcmVMaWJyYXJ5LAogIFNxdWFyZU06ICgpID0+IFNxdWFyZU0sCiAgU3F1YXJlTWVudTogKCkgPT4gU3F1YXJlTWVudSwKICBTcXVhcmVNaW51czogKCkgPT4gU3F1YXJlTWludXMsCiAgU3F1YXJlTW91c2VQb2ludGVyOiAoKSA9PiBTcXVhcmVNb3VzZVBvaW50ZXIsCiAgU3F1YXJlUGFya2luZzogKCkgPT4gU3F1YXJlUGFya2luZywKICBTcXVhcmVQYXJraW5nT2ZmOiAoKSA9PiBTcXVhcmVQYXJraW5nT2ZmLAogIFNxdWFyZVBhdXNlOiAoKSA9PiBTcXVhcmVQYXVzZSwKICBTcXVhcmVQZW46ICgpID0+IFNxdWFyZVBlbiwKICBTcXVhcmVQZXJjZW50OiAoKSA9PiBTcXVhcmVQZXJjZW50LAogIFNxdWFyZVBpOiAoKSA9PiBTcXVhcmVQaSwKICBTcXVhcmVQaWxjcm93OiAoKSA9PiBTcXVhcmVQaWxjcm93LAogIFNxdWFyZVBsYXk6ICgpID0+IFNxdWFyZVBsYXksCiAgU3F1YXJlUGx1czogKCkgPT4gU3F1YXJlUGx1cywKICBTcXVhcmVQb3dlcjogKCkgPT4gU3F1YXJlUG93ZXIsCiAgU3F1YXJlUmFkaWNhbDogKCkgPT4gU3F1YXJlUmFkaWNhbCwKICBTcXVhcmVSb3VuZENvcm5lcjogKCkgPT4gU3F1YXJlUm91bmRDb3JuZXIsCiAgU3F1YXJlU2Npc3NvcnM6ICgpID0+IFNxdWFyZVNjaXNzb3JzLAogIFNxdWFyZVNpZ21hOiAoKSA9PiBTcXVhcmVTaWdtYSwKICBTcXVhcmVTbGFzaDogKCkgPT4gU3F1YXJlU2xhc2gsCiAgU3F1YXJlU3BsaXRIb3Jpem9udGFsOiAoKSA9PiBTcXVhcmVTcGxpdEhvcml6b250YWwsCiAgU3F1YXJlU3BsaXRWZXJ0aWNhbDogKCkgPT4gU3F1YXJlU3BsaXRWZXJ0aWNhbCwKICBTcXVhcmVTcXVhcmU6ICgpID0+IFNxdWFyZVNxdWFyZSwKICBTcXVhcmVTdGFjazogKCkgPT4gU3F1YXJlU3RhY2ssCiAgU3F1YXJlU3RhcjogKCkgPT4gU3F1YXJlU3RhciwKICBTcXVhcmVTdG9wOiAoKSA9PiBTcXVhcmVTdG9wLAogIFNxdWFyZVRlcm1pbmFsOiAoKSA9PiBTcXVhcmVUZXJtaW5hbCwKICBTcXVhcmVVc2VyOiAoKSA9PiBTcXVhcmVVc2VyLAogIFNxdWFyZVVzZXJSb3VuZDogKCkgPT4gU3F1YXJlVXNlclJvdW5kLAogIFNxdWFyZVg6ICgpID0+IFNxdWFyZVgsCiAgU3F1YXJlc0V4Y2x1ZGU6ICgpID0+IFNxdWFyZXNFeGNsdWRlLAogIFNxdWFyZXNJbnRlcnNlY3Q6ICgpID0+IFNxdWFyZXNJbnRlcnNlY3QsCiAgU3F1YXJlc1N1YnRyYWN0OiAoKSA9PiBTcXVhcmVzU3VidHJhY3QsCiAgU3F1YXJlc1VuaXRlOiAoKSA9PiBTcXVhcmVzVW5pdGUsCiAgU3F1aXJjbGU6ICgpID0+IFNxdWlyY2xlLAogIFNxdWlyY2xlRGFzaGVkOiAoKSA9PiBTcXVpcmNsZURhc2hlZCwKICBTcXVpcnJlbDogKCkgPT4gU3F1aXJyZWwsCiAgU3RhbXA6ICgpID0+IFN0YW1wLAogIFN0YXI6ICgpID0+IFN0YXIsCiAgU3RhckhhbGY6ICgpID0+IFN0YXJIYWxmLAogIFN0YXJPZmY6ICgpID0+IFN0YXJPZmYsCiAgU3RhcnM6ICgpID0+IFNwYXJrbGVzLAogIFN0ZXBCYWNrOiAoKSA9PiBTdGVwQmFjaywKICBTdGVwRm9yd2FyZDogKCkgPT4gU3RlcEZvcndhcmQsCiAgU3RldGhvc2NvcGU6ICgpID0+IFN0ZXRob3Njb3BlLAogIFN0aWNrZXI6ICgpID0+IFN0aWNrZXIsCiAgU3RpY2t5Tm90ZTogKCkgPT4gU3RpY2t5Tm90ZSwKICBTdG9uZTogKCkgPT4gU3RvbmUsCiAgU3RvcENpcmNsZTogKCkgPT4gQ2lyY2xlU3RvcCwKICBTdG9yZTogKCkgPT4gU3RvcmUsCiAgU3RyZXRjaEhvcml6b250YWw6ICgpID0+IFN0cmV0Y2hIb3Jpem9udGFsLAogIFN0cmV0Y2hWZXJ0aWNhbDogKCkgPT4gU3RyZXRjaFZlcnRpY2FsLAogIFN0cmlrZXRocm91Z2g6ICgpID0+IFN0cmlrZXRocm91Z2gsCiAgU3Vic2NyaXB0OiAoKSA9PiBTdWJzY3JpcHQsCiAgU3VidGl0bGVzOiAoKSA9PiBDYXB0aW9ucywKICBTdW46ICgpID0+IFN1biwKICBTdW5EaW06ICgpID0+IFN1bkRpbSwKICBTdW5NZWRpdW06ICgpID0+IFN1bk1lZGl1bSwKICBTdW5Nb29uOiAoKSA9PiBTdW5Nb29uLAogIFN1blNub3c6ICgpID0+IFN1blNub3csCiAgU3VucmlzZTogKCkgPT4gU3VucmlzZSwKICBTdW5zZXQ6ICgpID0+IFN1bnNldCwKICBTdXBlcnNjcmlwdDogKCkgPT4gU3VwZXJzY3JpcHQsCiAgU3dhdGNoQm9vazogKCkgPT4gU3dhdGNoQm9vaywKICBTd2lzc0ZyYW5jOiAoKSA9PiBTd2lzc0ZyYW5jLAogIFN3aXRjaENhbWVyYTogKCkgPT4gU3dpdGNoQ2FtZXJhLAogIFN3b3JkOiAoKSA9PiBTd29yZCwKICBTd29yZHM6ICgpID0+IFN3b3JkcywKICBTeXJpbmdlOiAoKSA9PiBTeXJpbmdlLAogIFRhYmxlOiAoKSA9PiBUYWJsZSwKICBUYWJsZTI6ICgpID0+IFRhYmxlMiwKICBUYWJsZUNlbGxzTWVyZ2U6ICgpID0+IFRhYmxlQ2VsbHNNZXJnZSwKICBUYWJsZUNlbGxzU3BsaXQ6ICgpID0+IFRhYmxlQ2VsbHNTcGxpdCwKICBUYWJsZUNvbHVtbnNTcGxpdDogKCkgPT4gVGFibGVDb2x1bW5zU3BsaXQsCiAgVGFibGVDb25maWc6ICgpID0+IENvbHVtbnMzQ29nLAogIFRhYmxlT2ZDb250ZW50czogKCkgPT4gVGFibGVPZkNvbnRlbnRzLAogIFRhYmxlUHJvcGVydGllczogKCkgPT4gVGFibGVQcm9wZXJ0aWVzLAogIFRhYmxlUm93c1NwbGl0OiAoKSA9PiBUYWJsZVJvd3NTcGxpdCwKICBUYWJsZXQ6ICgpID0+IFRhYmxldCwKICBUYWJsZXRTbWFydHBob25lOiAoKSA9PiBUYWJsZXRTbWFydHBob25lLAogIFRhYmxldHM6ICgpID0+IFRhYmxldHMsCiAgVGFnOiAoKSA9PiBUYWcyLAogIFRhZ3M6ICgpID0+IFRhZ3MsCiAgVGFsbHkxOiAoKSA9PiBUYWxseTEsCiAgVGFsbHkyOiAoKSA9PiBUYWxseTIsCiAgVGFsbHkzOiAoKSA9PiBUYWxseTMsCiAgVGFsbHk0OiAoKSA9PiBUYWxseTQsCiAgVGFsbHk1OiAoKSA9PiBUYWxseTUsCiAgVGFuZ2VudDogKCkgPT4gVGFuZ2VudCwKICBUYXJnZXQ6ICgpID0+IFRhcmdldCwKICBUZWxlc2NvcGU6ICgpID0+IFRlbGVzY29wZSwKICBUZW50OiAoKSA9PiBUZW50LAogIFRlbnRUcmVlOiAoKSA9PiBUZW50VHJlZSwKICBUZXJtaW5hbDogKCkgPT4gVGVybWluYWwsCiAgVGVybWluYWxTcXVhcmU6ICgpID0+IFNxdWFyZVRlcm1pbmFsLAogIFRlc3RUdWJlOiAoKSA9PiBUZXN0VHViZSwKICBUZXN0VHViZTI6ICgpID0+IFRlc3RUdWJlRGlhZ29uYWwsCiAgVGVzdFR1YmVEaWFnb25hbDogKCkgPT4gVGVzdFR1YmVEaWFnb25hbCwKICBUZXN0VHViZXM6ICgpID0+IFRlc3RUdWJlcywKICBUZXh0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBUZXh0QWxpZ25DZW50ZXI6ICgpID0+IFRleHRBbGlnbkNlbnRlciwKICBUZXh0QWxpZ25FbmQ6ICgpID0+IFRleHRBbGlnbkVuZCwKICBUZXh0QWxpZ25KdXN0aWZ5OiAoKSA9PiBUZXh0QWxpZ25KdXN0aWZ5LAogIFRleHRBbGlnblN0YXJ0OiAoKSA9PiBUZXh0QWxpZ25TdGFydCwKICBUZXh0Q3Vyc29yOiAoKSA9PiBUZXh0Q3Vyc29yLAogIFRleHRDdXJzb3JJbnB1dDogKCkgPT4gVGV4dEN1cnNvcklucHV0LAogIFRleHRJbml0aWFsOiAoKSA9PiBUZXh0SW5pdGlhbCwKICBUZXh0UXVvdGU6ICgpID0+IFRleHRRdW90ZSwKICBUZXh0U2VhcmNoOiAoKSA9PiBUZXh0U2VhcmNoLAogIFRleHRTZWxlY3Q6ICgpID0+IFRleHRTZWxlY3QsCiAgVGV4dFNlbGVjdGlvbjogKCkgPT4gVGV4dFNlbGVjdCwKICBUZXh0V3JhcDogKCkgPT4gVGV4dFdyYXAsCiAgVGhlYXRlcjogKCkgPT4gVGhlYXRlciwKICBUaGVybW9tZXRlcjogKCkgPT4gVGhlcm1vbWV0ZXIsCiAgVGhlcm1vbWV0ZXJTbm93Zmxha2U6ICgpID0+IFRoZXJtb21ldGVyU25vd2ZsYWtlLAogIFRoZXJtb21ldGVyU3VuOiAoKSA9PiBUaGVybW9tZXRlclN1biwKICBUaHVtYnNEb3duOiAoKSA9PiBUaHVtYnNEb3duLAogIFRodW1ic1VwOiAoKSA9PiBUaHVtYnNVcCwKICBUaWNrZXQ6ICgpID0+IFRpY2tldCwKICBUaWNrZXRDaGVjazogKCkgPT4gVGlja2V0Q2hlY2ssCiAgVGlja2V0TWludXM6ICgpID0+IFRpY2tldE1pbnVzLAogIFRpY2tldFBlcmNlbnQ6ICgpID0+IFRpY2tldFBlcmNlbnQsCiAgVGlja2V0UGx1czogKCkgPT4gVGlja2V0UGx1cywKICBUaWNrZXRTbGFzaDogKCkgPT4gVGlja2V0U2xhc2gsCiAgVGlja2V0WDogKCkgPT4gVGlja2V0WCwKICBUaWNrZXRzOiAoKSA9PiBUaWNrZXRzLAogIFRpY2tldHNQbGFuZTogKCkgPT4gVGlja2V0c1BsYW5lLAogIFRpbWVyOiAoKSA9PiBUaW1lcjIsCiAgVGltZXJPZmY6ICgpID0+IFRpbWVyT2ZmLAogIFRpbWVyUmVzZXQ6ICgpID0+IFRpbWVyUmVzZXQsCiAgVG9nZ2xlTGVmdDogKCkgPT4gVG9nZ2xlTGVmdCwKICBUb2dnbGVSaWdodDogKCkgPT4gVG9nZ2xlUmlnaHQsCiAgVG9pbGV0OiAoKSA9PiBUb2lsZXQsCiAgVG9vbENhc2U6ICgpID0+IFRvb2xDYXNlLAogIFRvb2xib3g6ICgpID0+IFRvb2xib3gsCiAgVG9ybmFkbzogKCkgPT4gVG9ybmFkbywKICBUb3J1czogKCkgPT4gVG9ydXMsCiAgVG91Y2hwYWQ6ICgpID0+IFRvdWNocGFkLAogIFRvdWNocGFkT2ZmOiAoKSA9PiBUb3VjaHBhZE9mZiwKICBUb3dlckNvbnRyb2w6ICgpID0+IFRvd2VyQ29udHJvbCwKICBUb3lCcmljazogKCkgPT4gVG95QnJpY2ssCiAgVHJhY3RvcjogKCkgPT4gVHJhY3RvciwKICBUcmFmZmljQ29uZTogKCkgPT4gVHJhZmZpY0NvbmUsCiAgVHJhaW46ICgpID0+IFRyYW1Gcm9udCwKICBUcmFpbkZyb250OiAoKSA9PiBUcmFpbkZyb250LAogIFRyYWluRnJvbnRUdW5uZWw6ICgpID0+IFRyYWluRnJvbnRUdW5uZWwsCiAgVHJhaW5UcmFjazogKCkgPT4gVHJhaW5UcmFjaywKICBUcmFtRnJvbnQ6ICgpID0+IFRyYW1Gcm9udCwKICBUcmFuc2dlbmRlcjogKCkgPT4gVHJhbnNnZW5kZXIsCiAgVHJhc2g6ICgpID0+IFRyYXNoLAogIFRyYXNoMjogKCkgPT4gVHJhc2gyLAogIFRyZWVEZWNpZHVvdXM6ICgpID0+IFRyZWVEZWNpZHVvdXMsCiAgVHJlZVBhbG06ICgpID0+IFRyZWVQYWxtLAogIFRyZWVQaW5lOiAoKSA9PiBUcmVlUGluZSwKICBUcmVlczogKCkgPT4gVHJlZXMsCiAgVHJlbGxvOiAoKSA9PiBUcmVsbG8sCiAgVHJlbmRpbmdEb3duOiAoKSA9PiBUcmVuZGluZ0Rvd24sCiAgVHJlbmRpbmdVcDogKCkgPT4gVHJlbmRpbmdVcCwKICBUcmVuZGluZ1VwRG93bjogKCkgPT4gVHJlbmRpbmdVcERvd24sCiAgVHJpYW5nbGU6ICgpID0+IFRyaWFuZ2xlLAogIFRyaWFuZ2xlQWxlcnQ6ICgpID0+IFRyaWFuZ2xlQWxlcnQsCiAgVHJpYW5nbGVEYXNoZWQ6ICgpID0+IFRyaWFuZ2xlRGFzaGVkLAogIFRyaWFuZ2xlUmlnaHQ6ICgpID0+IFRyaWFuZ2xlUmlnaHQsCiAgVHJvcGh5OiAoKSA9PiBUcm9waHksCiAgVHJ1Y2s6ICgpID0+IFRydWNrLAogIFRydWNrRWxlY3RyaWM6ICgpID0+IFRydWNrRWxlY3RyaWMsCiAgVHVya2lzaExpcmE6ICgpID0+IFR1cmtpc2hMaXJhLAogIFR1cm50YWJsZTogKCkgPT4gVHVybnRhYmxlLAogIFR1cnRsZTogKCkgPT4gVHVydGxlLAogIFR2OiAoKSA9PiBUdiwKICBUdjI6ICgpID0+IFR2TWluaW1hbCwKICBUdk1pbmltYWw6ICgpID0+IFR2TWluaW1hbCwKICBUdk1pbmltYWxQbGF5OiAoKSA9PiBUdk1pbmltYWxQbGF5LAogIFR3aXRjaDogKCkgPT4gVHdpdGNoLAogIFR3aXR0ZXI6ICgpID0+IFR3aXR0ZXIsCiAgVHlwZTogKCkgPT4gVHlwZSwKICBUeXBlT3V0bGluZTogKCkgPT4gVHlwZU91dGxpbmUsCiAgVW1icmVsbGE6ICgpID0+IFVtYnJlbGxhLAogIFVtYnJlbGxhT2ZmOiAoKSA9PiBVbWJyZWxsYU9mZiwKICBVbmRlcmxpbmU6ICgpID0+IFVuZGVybGluZSwKICBVbmRvOiAoKSA9PiBVbmRvLAogIFVuZG8yOiAoKSA9PiBVbmRvMiwKICBVbmRvRG90OiAoKSA9PiBVbmRvRG90LAogIFVuZm9sZEhvcml6b250YWw6ICgpID0+IFVuZm9sZEhvcml6b250YWwsCiAgVW5mb2xkVmVydGljYWw6ICgpID0+IFVuZm9sZFZlcnRpY2FsLAogIFVuZ3JvdXA6ICgpID0+IFVuZ3JvdXAsCiAgVW5pdmVyc2l0eTogKCkgPT4gVW5pdmVyc2l0eSwKICBVbmxpbms6ICgpID0+IFVubGluaywKICBVbmxpbmsyOiAoKSA9PiBVbmxpbmsyLAogIFVubG9jazogKCkgPT4gTG9ja09wZW4sCiAgVW5sb2NrS2V5aG9sZTogKCkgPT4gTG9ja0tleWhvbGVPcGVuLAogIFVucGx1ZzogKCkgPT4gVW5wbHVnLAogIFVwbG9hZDogKCkgPT4gVXBsb2FkLAogIFVwbG9hZENsb3VkOiAoKSA9PiBDbG91ZFVwbG9hZCwKICBVc2I6ICgpID0+IFVzYiwKICBVc2VyOiAoKSA9PiBVc2VyLAogIFVzZXIyOiAoKSA9PiBVc2VyUm91bmQsCiAgVXNlckNoZWNrOiAoKSA9PiBVc2VyQ2hlY2ssCiAgVXNlckNoZWNrMjogKCkgPT4gVXNlclJvdW5kQ2hlY2ssCiAgVXNlckNpcmNsZTogKCkgPT4gQ2lyY2xlVXNlciwKICBVc2VyQ2lyY2xlMjogKCkgPT4gQ2lyY2xlVXNlclJvdW5kLAogIFVzZXJDb2c6ICgpID0+IFVzZXJDb2csCiAgVXNlckNvZzI6ICgpID0+IFVzZXJSb3VuZENvZywKICBVc2VyTG9jazogKCkgPT4gVXNlckxvY2ssCiAgVXNlck1pbnVzOiAoKSA9PiBVc2VyTWludXMsCiAgVXNlck1pbnVzMjogKCkgPT4gVXNlclJvdW5kTWludXMsCiAgVXNlclBlbjogKCkgPT4gVXNlclBlbiwKICBVc2VyUGx1czogKCkgPT4gVXNlclBsdXMsCiAgVXNlclBsdXMyOiAoKSA9PiBVc2VyUm91bmRQbHVzLAogIFVzZXJSb3VuZDogKCkgPT4gVXNlclJvdW5kLAogIFVzZXJSb3VuZENoZWNrOiAoKSA9PiBVc2VyUm91bmRDaGVjaywKICBVc2VyUm91bmRDb2c6ICgpID0+IFVzZXJSb3VuZENvZywKICBVc2VyUm91bmRNaW51czogKCkgPT4gVXNlclJvdW5kTWludXMsCiAgVXNlclJvdW5kUGVuOiAoKSA9PiBVc2VyUm91bmRQZW4sCiAgVXNlclJvdW5kUGx1czogKCkgPT4gVXNlclJvdW5kUGx1cywKICBVc2VyUm91bmRTZWFyY2g6ICgpID0+IFVzZXJSb3VuZFNlYXJjaCwKICBVc2VyUm91bmRYOiAoKSA9PiBVc2VyUm91bmRYLAogIFVzZXJTZWFyY2g6ICgpID0+IFVzZXJTZWFyY2gsCiAgVXNlclNxdWFyZTogKCkgPT4gU3F1YXJlVXNlciwKICBVc2VyU3F1YXJlMjogKCkgPT4gU3F1YXJlVXNlclJvdW5kLAogIFVzZXJTdGFyOiAoKSA9PiBVc2VyU3RhciwKICBVc2VyWDogKCkgPT4gVXNlclgsCiAgVXNlclgyOiAoKSA9PiBVc2VyUm91bmRYLAogIFVzZXJzOiAoKSA9PiBVc2VycywKICBVc2VyczI6ICgpID0+IFVzZXJzUm91bmQsCiAgVXNlcnNSb3VuZDogKCkgPT4gVXNlcnNSb3VuZCwKICBVdGVuc2lsczogKCkgPT4gVXRlbnNpbHMsCiAgVXRlbnNpbHNDcm9zc2VkOiAoKSA9PiBVdGVuc2lsc0Nyb3NzZWQsCiAgVXRpbGl0eVBvbGU6ICgpID0+IFV0aWxpdHlQb2xlLAogIFZhbjogKCkgPT4gVmFuLAogIFZhcmlhYmxlOiAoKSA9PiBWYXJpYWJsZSwKICBWYXVsdDogKCkgPT4gVmF1bHQsCiAgVmVjdG9yU3F1YXJlOiAoKSA9PiBWZWN0b3JTcXVhcmUsCiAgVmVnYW46ICgpID0+IFZlZ2FuLAogIFZlbmV0aWFuTWFzazogKCkgPT4gVmVuZXRpYW5NYXNrLAogIFZlbnVzOiAoKSA9PiBWZW51cywKICBWZW51c0FuZE1hcnM6ICgpID0+IFZlbnVzQW5kTWFycywKICBWZXJpZmllZDogKCkgPT4gQmFkZ2VDaGVjaywKICBWaWJyYXRlOiAoKSA9PiBWaWJyYXRlLAogIFZpYnJhdGVPZmY6ICgpID0+IFZpYnJhdGVPZmYsCiAgVmlkZW86ICgpID0+IFZpZGVvLAogIFZpZGVvT2ZmOiAoKSA9PiBWaWRlb09mZiwKICBWaWRlb3RhcGU6ICgpID0+IFZpZGVvdGFwZSwKICBWaWV3OiAoKSA9PiBWaWV3LAogIFZvaWNlbWFpbDogKCkgPT4gVm9pY2VtYWlsLAogIFZvbGxleWJhbGw6ICgpID0+IFZvbGxleWJhbGwsCiAgVm9sdW1lOiAoKSA9PiBWb2x1bWUsCiAgVm9sdW1lMTogKCkgPT4gVm9sdW1lMSwKICBWb2x1bWUyOiAoKSA9PiBWb2x1bWUyLAogIFZvbHVtZU9mZjogKCkgPT4gVm9sdW1lT2ZmLAogIFZvbHVtZVg6ICgpID0+IFZvbHVtZVgsCiAgVm90ZTogKCkgPT4gVm90ZSwKICBXYWxsZXQ6ICgpID0+IFdhbGxldCwKICBXYWxsZXQyOiAoKSA9PiBXYWxsZXRNaW5pbWFsLAogIFdhbGxldENhcmRzOiAoKSA9PiBXYWxsZXRDYXJkcywKICBXYWxsZXRNaW5pbWFsOiAoKSA9PiBXYWxsZXRNaW5pbWFsLAogIFdhbGxwYXBlcjogKCkgPT4gV2FsbHBhcGVyLAogIFdhbmQ6ICgpID0+IFdhbmQsCiAgV2FuZDI6ICgpID0+IFdhbmRTcGFya2xlcywKICBXYW5kU3BhcmtsZXM6ICgpID0+IFdhbmRTcGFya2xlcywKICBXYXJlaG91c2U6ICgpID0+IFdhcmVob3VzZSwKICBXYXNoaW5nTWFjaGluZTogKCkgPT4gV2FzaGluZ01hY2hpbmUsCiAgV2F0Y2g6ICgpID0+IFdhdGNoLAogIFdhdmVzOiAoKSA9PiBXYXZlcywKICBXYXZlc0Fycm93RG93bjogKCkgPT4gV2F2ZXNBcnJvd0Rvd24sCiAgV2F2ZXNBcnJvd1VwOiAoKSA9PiBXYXZlc0Fycm93VXAsCiAgV2F2ZXNMYWRkZXI6ICgpID0+IFdhdmVzTGFkZGVyLAogIFdheXBvaW50czogKCkgPT4gV2F5cG9pbnRzLAogIFdlYmNhbTogKCkgPT4gV2ViY2FtLAogIFdlYmhvb2s6ICgpID0+IFdlYmhvb2ssCiAgV2ViaG9va09mZjogKCkgPT4gV2ViaG9va09mZiwKICBXZWlnaHQ6ICgpID0+IFdlaWdodCwKICBXZWlnaHRUaWxkZTogKCkgPT4gV2VpZ2h0VGlsZGUsCiAgV2hlYXQ6ICgpID0+IFdoZWF0LAogIFdoZWF0T2ZmOiAoKSA9PiBXaGVhdE9mZiwKICBXaG9sZVdvcmQ6ICgpID0+IFdob2xlV29yZCwKICBXaWZpOiAoKSA9PiBXaWZpLAogIFdpZmlDb2c6ICgpID0+IFdpZmlDb2csCiAgV2lmaUhpZ2g6ICgpID0+IFdpZmlIaWdoLAogIFdpZmlMb3c6ICgpID0+IFdpZmlMb3csCiAgV2lmaU9mZjogKCkgPT4gV2lmaU9mZiwKICBXaWZpUGVuOiAoKSA9PiBXaWZpUGVuLAogIFdpZmlTeW5jOiAoKSA9PiBXaWZpU3luYywKICBXaWZpWmVybzogKCkgPT4gV2lmaVplcm8sCiAgV2luZDogKCkgPT4gV2luZCwKICBXaW5kQXJyb3dEb3duOiAoKSA9PiBXaW5kQXJyb3dEb3duLAogIFdpbmU6ICgpID0+IFdpbmUsCiAgV2luZU9mZjogKCkgPT4gV2luZU9mZiwKICBXb3JrZmxvdzogKCkgPT4gV29ya2Zsb3csCiAgV29ybTogKCkgPT4gV29ybSwKICBXcmFwVGV4dDogKCkgPT4gVGV4dFdyYXAsCiAgV3JlbmNoOiAoKSA9PiBXcmVuY2gsCiAgWDogKCkgPT4gWCwKICBYQ2lyY2xlOiAoKSA9PiBDaXJjbGVYLAogIFhPY3RhZ29uOiAoKSA9PiBPY3RhZ29uWCwKICBYU3F1YXJlOiAoKSA9PiBTcXVhcmVYLAogIFlvdXR1YmU6ICgpID0+IFlvdXR1YmUsCiAgWmFwOiAoKSA9PiBaYXAsCiAgWmFwT2ZmOiAoKSA9PiBaYXBPZmYsCiAgWm9vbUluOiAoKSA9PiBab29tSW4sCiAgWm9vbU91dDogKCkgPT4gWm9vbU91dCwKICBjcmVhdGVFbGVtZW50OiAoKSA9PiBjcmVhdGVFbGVtZW50MiwKICBjcmVhdGVJY29uczogKCkgPT4gY3JlYXRlSWNvbnMsCiAgaWNvbnM6ICgpID0+IGljb25zQW5kQWxpYXNlc19leHBvcnRzCn0pOwp2YXIgY3JlYXRlSWNvbnM7CnZhciBpbml0X2x1Y2lkZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL2x1Y2lkZUAwLjU2Mi4wL25vZGVfbW9kdWxlcy9sdWNpZGUvZGlzdC9lc20vbHVjaWRlLmpzIigpIHsKICAgIGluaXRfcmVwbGFjZUVsZW1lbnQoKTsKICAgIGluaXRfaWNvbnNBbmRBbGlhc2VzKCk7CiAgICBpbml0X2NyZWF0ZUVsZW1lbnQoKTsKICAgIGluaXRfYV9hcnJvd19kb3duKCk7CiAgICBpbml0X2FfYXJyb3dfdXAoKTsKICAgIGluaXRfYV9sYXJnZV9zbWFsbCgpOwogICAgaW5pdF9hY2Nlc3NpYmlsaXR5KCk7CiAgICBpbml0X2FjdGl2aXR5KCk7CiAgICBpbml0X2Fpcl92ZW50KCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX2NoZWNrKCk7CiAgICBpbml0X2FpcnBsYXkoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfbWludXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2tfb2ZmKCk7CiAgICBpbml0X2FsYXJtX2Nsb2NrX3BsdXMoKTsKICAgIGluaXRfYWxhcm1fY2xvY2soKTsKICAgIGluaXRfYWxhcm1fc21va2UoKTsKICAgIGluaXRfYWxidW0oKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fY2VudGVyX3ZlcnRpY2FsKCk7CiAgICBpbml0X2FsaWduX2VuZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2FsaWduX2VuZF92ZXJ0aWNhbCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfY2VudGVyKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2Rpc3RyaWJ1dGVfZW5kKCk7CiAgICBpbml0X2FsaWduX2hvcml6b250YWxfanVzdGlmeV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl9ob3Jpem9udGFsX2p1c3RpZnlfc3RhcnQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9hcm91bmQoKTsKICAgIGluaXRfYWxpZ25faG9yaXpvbnRhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FsaWduX3N0YXJ0X2hvcml6b250YWwoKTsKICAgIGluaXRfYWxpZ25fc3RhcnRfdmVydGljYWwoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9jZW50ZXIoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9lbmQoKTsKICAgIGluaXRfYWxpZ25fdmVydGljYWxfZGlzdHJpYnV0ZV9zdGFydCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2NlbnRlcigpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X2VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9qdXN0aWZ5X3N0YXJ0KCk7CiAgICBpbml0X2FsaWduX3ZlcnRpY2FsX3NwYWNlX2Fyb3VuZCgpOwogICAgaW5pdF9hbGlnbl92ZXJ0aWNhbF9zcGFjZV9iZXR3ZWVuKCk7CiAgICBpbml0X2FtYnVsYW5jZSgpOwogICAgaW5pdF9hbXBlcnNhbmQoKTsKICAgIGluaXRfYW1wZXJzYW5kcygpOwogICAgaW5pdF9hbXBob3JhKCk7CiAgICBpbml0X2FuY2hvcigpOwogICAgaW5pdF9hbmdyeSgpOwogICAgaW5pdF9hbm5veWVkKCk7CiAgICBpbml0X2FudGVubmEoKTsKICAgIGluaXRfYW52aWwoKTsKICAgIGluaXRfYXBlcnR1cmUoKTsKICAgIGluaXRfYXBwX3dpbmRvd19tYWMoKTsKICAgIGluaXRfYXBwX3dpbmRvdygpOwogICAgaW5pdF9hcHBsZSgpOwogICAgaW5pdF9hcmNoaXZlX3Jlc3RvcmUoKTsKICAgIGluaXRfYXJjaGl2ZV94KCk7CiAgICBpbml0X2FyY2hpdmUoKTsKICAgIGluaXRfYXJtY2hhaXIoKTsKICAgIGluaXRfYXJyb3dfYmlnX2Rvd25fZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfZG93bigpOwogICAgaW5pdF9hcnJvd19iaWdfbGVmdF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19sZWZ0KCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodF9kYXNoKCk7CiAgICBpbml0X2Fycm93X2JpZ19yaWdodCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXBfZGFzaCgpOwogICAgaW5pdF9hcnJvd19iaWdfdXAoKTsKICAgIGluaXRfYXJyb3dfZG93bl8wXzEoKTsKICAgIGluaXRfYXJyb3dfZG93bl8xXzAoKTsKICAgIGluaXRfYXJyb3dfZG93bl9hX3ooKTsKICAgIGluaXRfYXJyb3dfZG93bl9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfZG93bl90b19kb3QoKTsKICAgIGluaXRfYXJyb3dfZG93bl9uYXJyb3dfd2lkZSgpOwogICAgaW5pdF9hcnJvd19kb3duX3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfZG93bl91cCgpOwogICAgaW5pdF9hcnJvd19kb3duX3dpZGVfbmFycm93KCk7CiAgICBpbml0X2Fycm93X2Rvd25fel9hKCk7CiAgICBpbml0X2Fycm93X2Rvd24oKTsKICAgIGluaXRfYXJyb3dfbGVmdF9yaWdodCgpOwogICAgaW5pdF9hcnJvd19sZWZ0X2Zyb21fbGluZSgpOwogICAgaW5pdF9hcnJvd19sZWZ0X3RvX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF9mcm9tX2xpbmUoKTsKICAgIGluaXRfYXJyb3dfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9hcnJvd19yaWdodF90b19saW5lKCk7CiAgICBpbml0X2Fycm93X3JpZ2h0KCk7CiAgICBpbml0X2Fycm93X3VwXzBfMSgpOwogICAgaW5pdF9hcnJvd191cF8xXzAoKTsKICAgIGluaXRfYXJyb3dfdXBfYV96KCk7CiAgICBpbml0X2Fycm93X3VwX2Rvd24oKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9kb3QoKTsKICAgIGluaXRfYXJyb3dfdXBfZnJvbV9saW5lKCk7CiAgICBpbml0X2Fycm93X3VwX2xlZnQoKTsKICAgIGluaXRfYXJyb3dfdXBfbmFycm93X3dpZGUoKTsKICAgIGluaXRfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfYXJyb3dfdXBfdG9fbGluZSgpOwogICAgaW5pdF9hcnJvd191cF93aWRlX25hcnJvdygpOwogICAgaW5pdF9hcnJvd191cF96X2EoKTsKICAgIGluaXRfYXJyb3dfdXAoKTsKICAgIGluaXRfYXJyb3dzX3VwX2Zyb21fbGluZSgpOwogICAgaW5pdF9hc3RlcmlzaygpOwogICAgaW5pdF9hdF9zaWduKCk7CiAgICBpbml0X2F0b20oKTsKICAgIGluaXRfYXVkaW9fbGluZXMoKTsKICAgIGluaXRfYXdhcmQoKTsKICAgIGluaXRfYXVkaW9fd2F2ZWZvcm0oKTsKICAgIGluaXRfYXhlKCk7CiAgICBpbml0X2F4aXNfM2QoKTsKICAgIGluaXRfYmFieSgpOwogICAgaW5pdF9iYWNrcGFjaygpOwogICAgaW5pdF9iYWRnZV9hbGVydCgpOwogICAgaW5pdF9iYWRnZV9jZW50KCk7CiAgICBpbml0X2JhZGdlX2NoZWNrKCk7CiAgICBpbml0X2JhZGdlX2RvbGxhcl9zaWduKCk7CiAgICBpbml0X2JhZGdlX2V1cm8oKTsKICAgIGluaXRfYmFkZ2VfaW5kaWFuX3J1cGVlKCk7CiAgICBpbml0X2JhZGdlX2luZm8oKTsKICAgIGluaXRfYmFkZ2VfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2JhZGdlX21pbnVzKCk7CiAgICBpbml0X2JhZGdlX3BlcmNlbnQoKTsKICAgIGluaXRfYmFkZ2VfcGx1cygpOwogICAgaW5pdF9iYWRnZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9iYWRnZV9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X2JhZGdlX3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfYmFkZ2Vfc3dpc3NfZnJhbmMoKTsKICAgIGluaXRfYmFkZ2VfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X2JhZGdlX3goKTsKICAgIGluaXRfYmFkZ2UoKTsKICAgIGluaXRfYmFnZ2FnZV9jbGFpbSgpOwogICAgaW5pdF9iYWxsb29uKCk7CiAgICBpbml0X2JhbigpOwogICAgaW5pdF9iYW5hbmEoKTsKICAgIGluaXRfYmFuZGFnZSgpOwogICAgaW5pdF9iYW5rbm90ZV9hcnJvd19kb3duKCk7CiAgICBpbml0X2Jhbmtub3RlX2Fycm93X3VwKCk7CiAgICBpbml0X2Jhbmtub3RlX3goKTsKICAgIGluaXRfYmFua25vdGUoKTsKICAgIGluaXRfYmFyY29kZSgpOwogICAgaW5pdF9iYXJyZWwoKTsKICAgIGluaXRfYmFzZWxpbmUoKTsKICAgIGluaXRfYmF0aCgpOwogICAgaW5pdF9iYXR0ZXJ5X2NoYXJnaW5nKCk7CiAgICBpbml0X2JhdHRlcnlfZnVsbCgpOwogICAgaW5pdF9iYXR0ZXJ5X2xvdygpOwogICAgaW5pdF9iYXR0ZXJ5X3BsdXMoKTsKICAgIGluaXRfYmF0dGVyeV9tZWRpdW0oKTsKICAgIGluaXRfYmF0dGVyeV93YXJuaW5nKCk7CiAgICBpbml0X2JhdHRlcnkoKTsKICAgIGluaXRfYmVha2VyKCk7CiAgICBpbml0X2JlYW5fb2ZmKCk7CiAgICBpbml0X2JlYW4oKTsKICAgIGluaXRfYmVkX2RvdWJsZSgpOwogICAgaW5pdF9iZWRfc2luZ2xlKCk7CiAgICBpbml0X2JlZCgpOwogICAgaW5pdF9iZWVmKCk7CiAgICBpbml0X2JlZXJfb2ZmKCk7CiAgICBpbml0X2JlZXIoKTsKICAgIGluaXRfYmVsbF9kb3QoKTsKICAgIGluaXRfYmVsbF9lbGVjdHJpYygpOwogICAgaW5pdF9iZWxsX21pbnVzKCk7CiAgICBpbml0X2JlbGxfb2ZmKCk7CiAgICBpbml0X2JlbGxfcGx1cygpOwogICAgaW5pdF9iZWxsX3JpbmcoKTsKICAgIGluaXRfYmVsbCgpOwogICAgaW5pdF9iZXR3ZWVuX2hvcml6b250YWxfZW5kKCk7CiAgICBpbml0X2JldHdlZW5faG9yaXpvbnRhbF9zdGFydCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX2VuZCgpOwogICAgaW5pdF9iZXR3ZWVuX3ZlcnRpY2FsX3N0YXJ0KCk7CiAgICBpbml0X2JpY2Vwc19mbGV4ZWQoKTsKICAgIGluaXRfYmlrZSgpOwogICAgaW5pdF9iaW5hcnkoKTsKICAgIGluaXRfYmlvaGF6YXJkKCk7CiAgICBpbml0X2Jpbm9jdWxhcnMoKTsKICAgIGluaXRfYmlyZGhvdXNlKCk7CiAgICBpbml0X2JpcmQoKTsKICAgIGluaXRfYml0Y29pbigpOwogICAgaW5pdF9ibGVuZCgpOwogICAgaW5pdF9ibGluZHMoKTsKICAgIGluaXRfYmxvY2tzKCk7CiAgICBpbml0X2JsdWV0b290aF9jb25uZWN0ZWQoKTsKICAgIGluaXRfYmx1ZXRvb3RoX29mZigpOwogICAgaW5pdF9ibHVldG9vdGhfc2VhcmNoaW5nKCk7CiAgICBpbml0X2JsdWV0b290aCgpOwogICAgaW5pdF9ib2xkKCk7CiAgICBpbml0X2JvbHQoKTsKICAgIGluaXRfYm9tYigpOwogICAgaW5pdF9ib25lKCk7CiAgICBpbml0X2Jvb2tfYSgpOwogICAgaW5pdF9ib29rX2FsZXJ0KCk7CiAgICBpbml0X2Jvb2tfYXVkaW8oKTsKICAgIGluaXRfYm9va19jaGVjaygpOwogICAgaW5pdF9ib29rX2NvcHkoKTsKICAgIGluaXRfYm9va19kYXNoZWQoKTsKICAgIGluaXRfYm9va19kb3duKCk7CiAgICBpbml0X2Jvb2tfaGVhZHBob25lcygpOwogICAgaW5pdF9ib29rX2hlYXJ0KCk7CiAgICBpbml0X2Jvb2tfa2V5KCk7CiAgICBpbml0X2Jvb2tfaW1hZ2UoKTsKICAgIGluaXRfYm9va19sb2NrKCk7CiAgICBpbml0X2Jvb2tfbWFya2VkKCk7CiAgICBpbml0X2Jvb2tfbWludXMoKTsKICAgIGluaXRfYm9va19vcGVuX2NoZWNrKCk7CiAgICBpbml0X2Jvb2tfb3Blbl90ZXh0KCk7CiAgICBpbml0X2Jvb2tfb3BlbigpOwogICAgaW5pdF9ib29rX3BsdXMoKTsKICAgIGluaXRfYm9va19zZWFyY2goKTsKICAgIGluaXRfYm9va190ZXh0KCk7CiAgICBpbml0X2Jvb2tfdXAoKTsKICAgIGluaXRfYm9va190eXBlKCk7CiAgICBpbml0X2Jvb2tfdXBfMigpOwogICAgaW5pdF9ib29rX3VzZXIoKTsKICAgIGluaXRfYm9va194KCk7CiAgICBpbml0X2Jvb2soKTsKICAgIGluaXRfYm9va21hcmtfY2hlY2soKTsKICAgIGluaXRfYm9va21hcmtfbWludXMoKTsKICAgIGluaXRfYm9va21hcmtfcGx1cygpOwogICAgaW5pdF9ib29rbWFya194KCk7CiAgICBpbml0X2Jvb2ttYXJrKCk7CiAgICBpbml0X2Jvb21fYm94KCk7CiAgICBpbml0X2JvdF9tZXNzYWdlX3NxdWFyZSgpOwogICAgaW5pdF9ib3Rfb2ZmKCk7CiAgICBpbml0X2JvdCgpOwogICAgaW5pdF9ib3R0bGVfd2luZSgpOwogICAgaW5pdF9ib3dfYXJyb3coKTsKICAgIGluaXRfYm94KCk7CiAgICBpbml0X2JveGVzKCk7CiAgICBpbml0X2JyYWNlcygpOwogICAgaW5pdF9icmFja2V0cygpOwogICAgaW5pdF9icmFpbl9jaXJjdWl0KCk7CiAgICBpbml0X2JyYWluX2NvZygpOwogICAgaW5pdF9icmFpbigpOwogICAgaW5pdF9icmlja193YWxsX2ZpcmUoKTsKICAgIGluaXRfYnJpY2tfd2FsbF9zaGllbGQoKTsKICAgIGluaXRfYnJpY2tfd2FsbCgpOwogICAgaW5pdF9icmllZmNhc2VfYnVzaW5lc3MoKTsKICAgIGluaXRfYnJpZWZjYXNlX2NvbnZleW9yX2JlbHQoKTsKICAgIGluaXRfYnJpZWZjYXNlX21lZGljYWwoKTsKICAgIGluaXRfYnJpZWZjYXNlKCk7CiAgICBpbml0X2JyaW5nX3RvX2Zyb250KCk7CiAgICBpbml0X2JydXNoX2NsZWFuaW5nKCk7CiAgICBpbml0X2JydXNoKCk7CiAgICBpbml0X2J1YmJsZXMoKTsKICAgIGluaXRfYnVnX29mZigpOwogICAgaW5pdF9idWdfcGxheSgpOwogICAgaW5pdF9idWcoKTsKICAgIGluaXRfYnVpbGRpbmdfMigpOwogICAgaW5pdF9idWlsZGluZygpOwogICAgaW5pdF9idXNfZnJvbnQoKTsKICAgIGluaXRfYnVzKCk7CiAgICBpbml0X2NhYmxlX2NhcigpOwogICAgaW5pdF9jYWJsZSgpOwogICAgaW5pdF9jYWtlX3NsaWNlKCk7CiAgICBpbml0X2Nha2UoKTsKICAgIGluaXRfY2FsY3VsYXRvcigpOwogICAgaW5pdF9jYWxlbmRhcl8xKCk7CiAgICBpbml0X2NhbGVuZGFyX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2FsZW5kYXJfYXJyb3dfdXAoKTsKICAgIGluaXRfY2FsZW5kYXJfY2hlY2tfMigpOwogICAgaW5pdF9jYWxlbmRhcl9jaGVjaygpOwogICAgaW5pdF9jYWxlbmRhcl9jb2coKTsKICAgIGluaXRfY2FsZW5kYXJfY2xvY2soKTsKICAgIGluaXRfY2FsZW5kYXJfZGF5cygpOwogICAgaW5pdF9jYWxlbmRhcl9mb2xkKCk7CiAgICBpbml0X2NhbGVuZGFyX2hlYXJ0KCk7CiAgICBpbml0X2NhbGVuZGFyX21pbnVzXzIoKTsKICAgIGluaXRfY2FsZW5kYXJfbWludXMoKTsKICAgIGluaXRfY2FsZW5kYXJfb2ZmKCk7CiAgICBpbml0X2NhbGVuZGFyX3BsdXNfMigpOwogICAgaW5pdF9jYWxlbmRhcl9wbHVzKCk7CiAgICBpbml0X2NhbGVuZGFyX3JhbmdlKCk7CiAgICBpbml0X2NhbGVuZGFyX3NlYXJjaCgpOwogICAgaW5pdF9jYWxlbmRhcl9zeW5jKCk7CiAgICBpbml0X2NhbGVuZGFyX3hfMigpOwogICAgaW5pdF9jYWxlbmRhcl94KCk7CiAgICBpbml0X2NhbGVuZGFyKCk7CiAgICBpbml0X2NhbGVuZGFycygpOwogICAgaW5pdF9jYW1lcmFfb2ZmKCk7CiAgICBpbml0X2NhbWVyYSgpOwogICAgaW5pdF9jYW5keV9jYW5lKCk7CiAgICBpbml0X2NhbmR5X29mZigpOwogICAgaW5pdF9jYW5keSgpOwogICAgaW5pdF9jYW5uYWJpc19vZmYoKTsKICAgIGluaXRfY2FubmFiaXMoKTsKICAgIGluaXRfY2FwdGlvbnNfb2ZmKCk7CiAgICBpbml0X2NhcHRpb25zKCk7CiAgICBpbml0X2Nhcl9mcm9udCgpOwogICAgaW5pdF9jYXJfdGF4aV9mcm9udCgpOwogICAgaW5pdF9jYXIoKTsKICAgIGluaXRfY2FyYXZhbigpOwogICAgaW5pdF9jYXJkX3NpbSgpOwogICAgaW5pdF9jYXJyb3QoKTsKICAgIGluaXRfY2FzZV9sb3dlcigpOwogICAgaW5pdF9jYXNlX3NlbnNpdGl2ZSgpOwogICAgaW5pdF9jYXNlX3VwcGVyKCk7CiAgICBpbml0X2Nhc3NldHRlX3RhcGUoKTsKICAgIGluaXRfY2FzdCgpOwogICAgaW5pdF9jYXN0bGUoKTsKICAgIGluaXRfY2F0KCk7CiAgICBpbml0X2NjdHYoKTsKICAgIGluaXRfY2hhcnRfYXJlYSgpOwogICAgaW5pdF9jaGFydF9iYXJfYmlnKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2Jhcl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2JhcigpOwogICAgaW5pdF9jaGFydF9jYW5kbGVzdGljaygpOwogICAgaW5pdF9jaGFydF9jb2x1bW5fYmlnKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9kZWNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbl9zdGFja2VkKCk7CiAgICBpbml0X2NoYXJ0X2NvbHVtbigpOwogICAgaW5pdF9jaGFydF9nYW50dCgpOwogICAgaW5pdF9jaGFydF9saW5lKCk7CiAgICBpbml0X2NoYXJ0X25ldHdvcmsoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19jb2x1bW5fZGVjcmVhc2luZygpOwogICAgaW5pdF9jaGFydF9ub19heGVzX2NvbHVtbl9pbmNyZWFzaW5nKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29sdW1uKCk7CiAgICBpbml0X2NoYXJ0X25vX2F4ZXNfY29tYmluZWQoKTsKICAgIGluaXRfY2hhcnRfbm9fYXhlc19nYW50dCgpOwogICAgaW5pdF9jaGFydF9waWUoKTsKICAgIGluaXRfY2hhcnRfc2NhdHRlcigpOwogICAgaW5pdF9jaGFydF9zcGxpbmUoKTsKICAgIGluaXRfY2hlY2tfY2hlY2soKTsKICAgIGluaXRfY2hlY2tfbGluZSgpOwogICAgaW5pdF9jaGVjaygpOwogICAgaW5pdF9jaGVmX2hhdCgpOwogICAgaW5pdF9jaGVycnkoKTsKICAgIGluaXRfY2hlc3NfYmlzaG9wKCk7CiAgICBpbml0X2NoZXNzX2tpbmcoKTsKICAgIGluaXRfY2hlc3Nfa25pZ2h0KCk7CiAgICBpbml0X2NoZXNzX3Bhd24oKTsKICAgIGluaXRfY2hlc3NfcXVlZW4oKTsKICAgIGluaXRfY2hldnJvbl9kb3duKCk7CiAgICBpbml0X2NoZXZyb25fZmlyc3QoKTsKICAgIGluaXRfY2hlc3Nfcm9vaygpOwogICAgaW5pdF9jaGV2cm9uX2xhc3QoKTsKICAgIGluaXRfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NoZXZyb25fcmlnaHQoKTsKICAgIGluaXRfY2hldnJvbl91cCgpOwogICAgaW5pdF9jaGV2cm9uc19kb3duX3VwKCk7CiAgICBpbml0X2NoZXZyb25zX2Rvd24oKTsKICAgIGluaXRfY2hldnJvbnNfbGVmdF9yaWdodF9lbGxpcHNpcygpOwogICAgaW5pdF9jaGV2cm9uc19sZWZ0X3JpZ2h0KCk7CiAgICBpbml0X2NoZXZyb25zX2xlZnQoKTsKICAgIGluaXRfY2hldnJvbnNfcmlnaHRfbGVmdCgpOwogICAgaW5pdF9jaGV2cm9uc19yaWdodCgpOwogICAgaW5pdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2NoZXZyb25zX3VwKCk7CiAgICBpbml0X2NodXJjaCgpOwogICAgaW5pdF9jaWdhcmV0dGVfb2ZmKCk7CiAgICBpbml0X2Nocm9taXVtKCk7CiAgICBpbml0X2NpZ2FyZXR0ZSgpOwogICAgaW5pdF9jaXJjbGVfYWxlcnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfY2lyY2xlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9jaXJjbGVfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2NoZWNrKCk7CiAgICBpbml0X2NpcmNsZV9jaGVja19iaWcoKTsKICAgIGluaXRfY2lyY2xlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9jaXJjbGVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X2NpcmNsZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X2NpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RpdmlkZSgpOwogICAgaW5pdF9jaXJjbGVfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfY2lyY2xlX2RvdF9kYXNoZWQoKTsKICAgIGluaXRfY2lyY2xlX2RvdCgpOwogICAgaW5pdF9jaXJjbGVfZWxsaXBzaXMoKTsKICAgIGluaXRfY2lyY2xlX2VxdWFsKCk7CiAgICBpbml0X2NpcmNsZV9mYWRpbmdfYXJyb3dfdXAoKTsKICAgIGluaXRfY2lyY2xlX2ZhZGluZ19wbHVzKCk7CiAgICBpbml0X2NpcmNsZV9nYXVnZSgpOwogICAgaW5pdF9jaXJjbGVfbWludXMoKTsKICAgIGluaXRfY2lyY2xlX29mZigpOwogICAgaW5pdF9jaXJjbGVfcGFya2luZ19vZmYoKTsKICAgIGluaXRfY2lyY2xlX3BhcmtpbmcoKTsKICAgIGluaXRfY2lyY2xlX3BhdXNlKCk7CiAgICBpbml0X2NpcmNsZV9wZXJjZW50KCk7CiAgICBpbml0X2NpcmNsZV9waWxlKCk7CiAgICBpbml0X2NpcmNsZV9wbGF5KCk7CiAgICBpbml0X2NpcmNsZV9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9jaXJjbGVfcGx1cygpOwogICAgaW5pdF9jaXJjbGVfcG93ZXIoKTsKICAgIGluaXRfY2lyY2xlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoXzIoKTsKICAgIGluaXRfY2lyY2xlX3NsYXNoKCk7CiAgICBpbml0X2NpcmNsZV9zbWFsbCgpOwogICAgaW5pdF9jaXJjbGVfc3RhcigpOwogICAgaW5pdF9jaXJjbGVfc3RvcCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcl9yb3VuZCgpOwogICAgaW5pdF9jaXJjbGVfdXNlcigpOwogICAgaW5pdF9jaXJjbGVfeCgpOwogICAgaW5pdF9jaXJjbGUoKTsKICAgIGluaXRfY2lyY3VpdF9ib2FyZCgpOwogICAgaW5pdF9jaXRydXMoKTsKICAgIGluaXRfY2xhcHBlcmJvYXJkKCk7CiAgICBpbml0X2NsaXBib2FyZF9jaGVjaygpOwogICAgaW5pdF9jbGlwYm9hcmRfY2xvY2soKTsKICAgIGluaXRfY2xpcGJvYXJkX2NvcHkoKTsKICAgIGluaXRfY2xpcGJvYXJkX2xpc3QoKTsKICAgIGluaXRfY2xpcGJvYXJkX21pbnVzKCk7CiAgICBpbml0X2NsaXBib2FyZF9wYXN0ZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfcGVuX2xpbmUoKTsKICAgIGluaXRfY2xpcGJvYXJkX3BlbigpOwogICAgaW5pdF9jbGlwYm9hcmRfcGx1cygpOwogICAgaW5pdF9jbGlwYm9hcmRfdHlwZSgpOwogICAgaW5pdF9jbGlwYm9hcmRfeCgpOwogICAgaW5pdF9jbGlwYm9hcmQoKTsKICAgIGluaXRfY2xvY2tfMSgpOwogICAgaW5pdF9jbG9ja18xMCgpOwogICAgaW5pdF9jbG9ja18xMSgpOwogICAgaW5pdF9jbG9ja18xMigpOwogICAgaW5pdF9jbG9ja18yKCk7CiAgICBpbml0X2Nsb2NrXzMoKTsKICAgIGluaXRfY2xvY2tfNCgpOwogICAgaW5pdF9jbG9ja181KCk7CiAgICBpbml0X2Nsb2NrXzYoKTsKICAgIGluaXRfY2xvY2tfNygpOwogICAgaW5pdF9jbG9ja184KCk7CiAgICBpbml0X2Nsb2NrXzkoKTsKICAgIGluaXRfY2xvY2tfYWxlcnQoKTsKICAgIGluaXRfY2xvY2tfYXJyb3dfZG93bigpOwogICAgaW5pdF9jbG9ja19hcnJvd191cCgpOwogICAgaW5pdF9jbG9ja19jaGVjaygpOwogICAgaW5pdF9jbG9ja19mYWRpbmcoKTsKICAgIGluaXRfY2xvY2tfcGx1cygpOwogICAgaW5pdF9jbG9jaygpOwogICAgaW5pdF9jbG9zZWRfY2FwdGlvbigpOwogICAgaW5pdF9jbG91ZF9hbGVydCgpOwogICAgaW5pdF9jbG91ZF9iYWNrdXAoKTsKICAgIGluaXRfY2xvdWRfY2hlY2soKTsKICAgIGluaXRfY2xvdWRfY29nKCk7CiAgICBpbml0X2Nsb3VkX2Rvd25sb2FkKCk7CiAgICBpbml0X2Nsb3VkX2RyaXp6bGUoKTsKICAgIGluaXRfY2xvdWRfZm9nKCk7CiAgICBpbml0X2Nsb3VkX2hhaWwoKTsKICAgIGluaXRfY2xvdWRfbGlnaHRuaW5nKCk7CiAgICBpbml0X2Nsb3VkX21vb25fcmFpbigpOwogICAgaW5pdF9jbG91ZF9tb29uKCk7CiAgICBpbml0X2Nsb3VkX3JhaW5fd2luZCgpOwogICAgaW5pdF9jbG91ZF9vZmYoKTsKICAgIGluaXRfY2xvdWRfcmFpbigpOwogICAgaW5pdF9jbG91ZF9zbm93KCk7CiAgICBpbml0X2Nsb3VkX3N1bl9yYWluKCk7CiAgICBpbml0X2Nsb3VkX3N1bigpOwogICAgaW5pdF9jbG91ZF9zeW5jKCk7CiAgICBpbml0X2Nsb3VkX3VwbG9hZCgpOwogICAgaW5pdF9jbG91ZCgpOwogICAgaW5pdF9jbG91ZHkoKTsKICAgIGluaXRfY2xvdmVyKCk7CiAgICBpbml0X2NsdWIoKTsKICAgIGluaXRfY29kZV94bWwoKTsKICAgIGluaXRfY29kZTQoKTsKICAgIGluaXRfY29kZXBlbigpOwogICAgaW5pdF9jb2Rlc2FuZGJveCgpOwogICAgaW5pdF9jb2ZmZWUoKTsKICAgIGluaXRfY29pbnMoKTsKICAgIGluaXRfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMigpOwogICAgaW5pdF9jb2x1bW5zXzNfY29nKCk7CiAgICBpbml0X2NvbHVtbnNfMygpOwogICAgaW5pdF9jb2x1bW5zXzQoKTsKICAgIGluaXRfY29tYmluZSgpOwogICAgaW5pdF9jb21tYW5kKCk7CiAgICBpbml0X2NvbXBhc3MoKTsKICAgIGluaXRfY29tcG9uZW50KCk7CiAgICBpbml0X2NvbXB1dGVyKCk7CiAgICBpbml0X2NvbmNpZXJnZV9iZWxsKCk7CiAgICBpbml0X2NvbmUoKTsKICAgIGluaXRfY29uc3RydWN0aW9uKCk7CiAgICBpbml0X2NvbnRhY3Rfcm91bmQoKTsKICAgIGluaXRfY29udGFjdDIoKTsKICAgIGluaXRfY29udGFpbmVyMygpOwogICAgaW5pdF9jb250cmFzdCgpOwogICAgaW5pdF9jb29raWUoKTsKICAgIGluaXRfY29va2luZ19wb3QoKTsKICAgIGluaXRfY29weV9jaGVjaygpOwogICAgaW5pdF9jb3B5X21pbnVzKCk7CiAgICBpbml0X2NvcHlfcGx1cygpOwogICAgaW5pdF9jb3B5X3NsYXNoKCk7CiAgICBpbml0X2NvcHkoKTsKICAgIGluaXRfY29weV94KCk7CiAgICBpbml0X2NvcHlsZWZ0KCk7CiAgICBpbml0X2NvcHlyaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9yaWdodCgpOwogICAgaW5pdF9jb3JuZXJfZG93bl9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl9sZWZ0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX2xlZnRfdXAoKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X2Rvd24oKTsKICAgIGluaXRfY29ybmVyX3JpZ2h0X3VwKCk7CiAgICBpbml0X2Nvcm5lcl91cF9sZWZ0KCk7CiAgICBpbml0X2Nvcm5lcl91cF9yaWdodCgpOwogICAgaW5pdF9jcHUoKTsKICAgIGluaXRfY3JlYXRpdmVfY29tbW9ucygpOwogICAgaW5pdF9jcmVkaXRfY2FyZCgpOwogICAgaW5pdF9jcm9pc3NhbnQoKTsKICAgIGluaXRfY3JvcCgpOwogICAgaW5pdF9jcm9zcygpOwogICAgaW5pdF9jcm9zc2hhaXIoKTsKICAgIGluaXRfY3Jvd24oKTsKICAgIGluaXRfY3Vib2lkKCk7CiAgICBpbml0X2N1cF9zb2RhKCk7CiAgICBpbml0X2N1cnJlbmN5MigpOwogICAgaW5pdF9jeWxpbmRlcigpOwogICAgaW5pdF9kYW0oKTsKICAgIGluaXRfZGF0YWJhc2VfYmFja3VwKCk7CiAgICBpbml0X2RhdGFiYXNlX3phcCgpOwogICAgaW5pdF9kYXRhYmFzZTIoKTsKICAgIGluaXRfZGVjaW1hbHNfYXJyb3dfbGVmdCgpOwogICAgaW5pdF9kZWNpbWFsc19hcnJvd19yaWdodCgpOwogICAgaW5pdF9kZWxldGUyKCk7CiAgICBpbml0X2Rlc3NlcnQoKTsKICAgIGluaXRfZGlhbWV0ZXIoKTsKICAgIGluaXRfZGlhbW9uZF9taW51cygpOwogICAgaW5pdF9kaWFtb25kX3BlcmNlbnQoKTsKICAgIGluaXRfZGlhbW9uZF9wbHVzKCk7CiAgICBpbml0X2RpY2VfMSgpOwogICAgaW5pdF9kaWFtb25kKCk7CiAgICBpbml0X2RpY2VfMigpOwogICAgaW5pdF9kaWNlXzMoKTsKICAgIGluaXRfZGljZV81KCk7CiAgICBpbml0X2RpY2VfNigpOwogICAgaW5pdF9kaWNlXzQoKTsKICAgIGluaXRfZGljZXMoKTsKICAgIGluaXRfZGlmZigpOwogICAgaW5pdF9kaXNjXzIoKTsKICAgIGluaXRfZGlzY18zKCk7CiAgICBpbml0X2Rpc2NfYWxidW0oKTsKICAgIGluaXRfZGlzYygpOwogICAgaW5pdF9kaXZpZGUoKTsKICAgIGluaXRfZG5hX29mZigpOwogICAgaW5pdF9kb2NrKCk7CiAgICBpbml0X2RuYSgpOwogICAgaW5pdF9kb2coKTsKICAgIGluaXRfZG9sbGFyX3NpZ24oKTsKICAgIGluaXRfZG9udXQoKTsKICAgIGluaXRfZG9vcl9jbG9zZWRfbG9ja2VkKCk7CiAgICBpbml0X2Rvb3JfY2xvc2VkKCk7CiAgICBpbml0X2RvdCgpOwogICAgaW5pdF9kb29yX29wZW4oKTsKICAgIGluaXRfZG93bmxvYWQoKTsKICAgIGluaXRfZHJhZnRpbmdfY29tcGFzcygpOwogICAgaW5pdF9kcmFtYSgpOwogICAgaW5pdF9kcmliYmJsZSgpOwogICAgaW5pdF9kcmlsbCgpOwogICAgaW5pdF9kcm9uZSgpOwogICAgaW5pdF9kcm9wbGV0X29mZigpOwogICAgaW5pdF9kcm9wbGV0KCk7CiAgICBpbml0X2Ryb3BsZXRzKCk7CiAgICBpbml0X2RydW0oKTsKICAgIGluaXRfZHJ1bXN0aWNrKCk7CiAgICBpbml0X2R1bWJiZWxsKCk7CiAgICBpbml0X2Vhcl9vZmYoKTsKICAgIGluaXRfZWFyKCk7CiAgICBpbml0X2VhcnRoX2xvY2soKTsKICAgIGluaXRfZWFydGgoKTsKICAgIGluaXRfZWNsaXBzZSgpOwogICAgaW5pdF9lZ2dfZnJpZWQoKTsKICAgIGluaXRfZWdnX29mZigpOwogICAgaW5pdF9lZ2coKTsKICAgIGluaXRfZWxsaXBzaXNfdmVydGljYWwoKTsKICAgIGluaXRfZWxsaXBzaXMoKTsKICAgIGluaXRfZXF1YWxfYXBwcm94aW1hdGVseSgpOwogICAgaW5pdF9lcXVhbF9ub3QoKTsKICAgIGluaXRfZXJhc2VyKCk7CiAgICBpbml0X2VxdWFsKCk7CiAgICBpbml0X2V0aGVybmV0X3BvcnQoKTsKICAgIGluaXRfZXVybygpOwogICAgaW5pdF9ldl9jaGFyZ2VyKCk7CiAgICBpbml0X2V4dGVybmFsX2xpbmsoKTsKICAgIGluaXRfZXhwYW5kMigpOwogICAgaW5pdF9leWVfY2xvc2VkKCk7CiAgICBpbml0X2V5ZV9vZmYoKTsKICAgIGluaXRfZXllKCk7CiAgICBpbml0X2ZhY3RvcnkoKTsKICAgIGluaXRfZmFjZWJvb2soKTsKICAgIGluaXRfZmFuKCk7CiAgICBpbml0X2Zhc3RfZm9yd2FyZCgpOwogICAgaW5pdF9mZWF0aGVyKCk7CiAgICBpbml0X2ZlbmNlKCk7CiAgICBpbml0X2ZlcnJpc193aGVlbCgpOwogICAgaW5pdF9maWdtYSgpOwogICAgaW5pdF9maWxlX2FyY2hpdmUoKTsKICAgIGluaXRfZmlsZV9heGlzXzNkKCk7CiAgICBpbml0X2ZpbGVfYmFkZ2UoKTsKICAgIGluaXRfZmlsZV9icmFjZXNfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfYm94KCk7CiAgICBpbml0X2ZpbGVfYnJhY2VzKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfY29sdW1uX2luY3JlYXNpbmcoKTsKICAgIGluaXRfZmlsZV9jaGFydF9jb2x1bW4oKTsKICAgIGluaXRfZmlsZV9jaGFydF9saW5lKCk7CiAgICBpbml0X2ZpbGVfY2hhcnRfcGllKCk7CiAgICBpbml0X2ZpbGVfY2hlY2tfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY2hlY2soKTsKICAgIGluaXRfZmlsZV9jbG9jaygpOwogICAgaW5pdF9maWxlX2NvZGVfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfY29kZSgpOwogICAgaW5pdF9maWxlX2NvZygpOwogICAgaW5pdF9maWxlX2RpZmYoKTsKICAgIGluaXRfZmlsZV9kaWdpdCgpOwogICAgaW5pdF9maWxlX2Rvd24oKTsKICAgIGluaXRfZmlsZV9leGNsYW1hdGlvbl9wb2ludCgpOwogICAgaW5pdF9maWxlX2hlYWRwaG9uZSgpOwogICAgaW5pdF9maWxlX2hlYXJ0KCk7CiAgICBpbml0X2ZpbGVfaW1hZ2UoKTsKICAgIGluaXRfZmlsZV9pbnB1dCgpOwogICAgaW5pdF9maWxlX2tleSgpOwogICAgaW5pdF9maWxlX2xvY2soKTsKICAgIGluaXRfZmlsZV9taW51c19jb3JuZXIoKTsKICAgIGluaXRfZmlsZV9tdXNpYygpOwogICAgaW5pdF9maWxlX21pbnVzKCk7CiAgICBpbml0X2ZpbGVfb3V0cHV0KCk7CiAgICBpbml0X2ZpbGVfcGVuX2xpbmUoKTsKICAgIGluaXRfZmlsZV9wZW4oKTsKICAgIGluaXRfZmlsZV9wbGF5KCk7CiAgICBpbml0X2ZpbGVfcGx1cygpOwogICAgaW5pdF9maWxlX3F1ZXN0aW9uX21hcmsoKTsKICAgIGluaXRfZmlsZV9wbHVzX2Nvcm5lcigpOwogICAgaW5pdF9maWxlX3NjYW4oKTsKICAgIGluaXRfZmlsZV9zZWFyY2hfY29ybmVyKCk7CiAgICBpbml0X2ZpbGVfc2VhcmNoKCk7CiAgICBpbml0X2ZpbGVfc2lnbmFsKCk7CiAgICBpbml0X2ZpbGVfc3ByZWFkc2hlZXQoKTsKICAgIGluaXRfZmlsZV9zbGlkZXJzKCk7CiAgICBpbml0X2ZpbGVfc3RhY2soKTsKICAgIGluaXRfZmlsZV9zeW1saW5rKCk7CiAgICBpbml0X2ZpbGVfdGVybWluYWwoKTsKICAgIGluaXRfZmlsZV90ZXh0KCk7CiAgICBpbml0X2ZpbGVfdHlwZV9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV90eXBlKCk7CiAgICBpbml0X2ZpbGVfdXAoKTsKICAgIGluaXRfZmlsZV91c2VyKCk7CiAgICBpbml0X2ZpbGVfdm9sdW1lKCk7CiAgICBpbml0X2ZpbGVfdmlkZW9fY2FtZXJhKCk7CiAgICBpbml0X2ZpbGVfeF9jb3JuZXIoKTsKICAgIGluaXRfZmlsZV94KCk7CiAgICBpbml0X2ZpbGUoKTsKICAgIGluaXRfZmlsZXMoKTsKICAgIGluaXRfZmlsbSgpOwogICAgaW5pdF9maW5nZXJwcmludF9wYXR0ZXJuKCk7CiAgICBpbml0X2ZpcmVfZXh0aW5ndWlzaGVyKCk7CiAgICBpbml0X2Zpc2hfb2ZmKCk7CiAgICBpbml0X2Zpc2hfc3ltYm9sKCk7CiAgICBpbml0X2Zpc2goKTsKICAgIGluaXRfZmlzaGluZ19ob29rKCk7CiAgICBpbml0X2ZsYWdfb2ZmKCk7CiAgICBpbml0X2ZsYWdfdHJpYW5nbGVfbGVmdCgpOwogICAgaW5pdF9mbGFnX3RyaWFuZ2xlX3JpZ2h0KCk7CiAgICBpbml0X2ZsYW1lX2tpbmRsaW5nKCk7CiAgICBpbml0X2ZsYWcoKTsKICAgIGluaXRfZmxhbWUoKTsKICAgIGluaXRfZmxhc2hsaWdodF9vZmYoKTsKICAgIGluaXRfZmxhc2hsaWdodCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsX29mZigpOwogICAgaW5pdF9mbGFza19yb3VuZCgpOwogICAgaW5pdF9mbGFza19jb25pY2FsKCk7CiAgICBpbml0X2ZsaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9mbGlwX2hvcml6b250YWxfMigpOwogICAgaW5pdF9mbGlwX3ZlcnRpY2FsXzIoKTsKICAgIGluaXRfZmxpcF92ZXJ0aWNhbCgpOwogICAgaW5pdF9mbG93ZXJfMigpOwogICAgaW5pdF9mbG93ZXIoKTsKICAgIGluaXRfZm9jdXMoKTsKICAgIGluaXRfZm9sZF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2ZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfZm9sZGVyX2FyY2hpdmUoKTsKICAgIGluaXRfZm9sZGVyX2NoZWNrKCk7CiAgICBpbml0X2ZvbGRlcl9jbG9jaygpOwogICAgaW5pdF9mb2xkZXJfY2xvc2VkKCk7CiAgICBpbml0X2ZvbGRlcl9jb2RlKCk7CiAgICBpbml0X2ZvbGRlcl9jb2coKTsKICAgIGluaXRfZm9sZGVyX2RvdCgpOwogICAgaW5pdF9mb2xkZXJfZG93bigpOwogICAgaW5pdF9mb2xkZXJfZ2l0XzIoKTsKICAgIGluaXRfZm9sZGVyX2dpdCgpOwogICAgaW5pdF9mb2xkZXJfaGVhcnQoKTsKICAgIGluaXRfZm9sZGVyX2lucHV0KCk7CiAgICBpbml0X2ZvbGRlcl9rYW5iYW4oKTsKICAgIGluaXRfZm9sZGVyX2tleSgpOwogICAgaW5pdF9mb2xkZXJfbG9jaygpOwogICAgaW5pdF9mb2xkZXJfbWludXMoKTsKICAgIGluaXRfZm9sZGVyX29wZW5fZG90KCk7CiAgICBpbml0X2ZvbGRlcl9vcGVuKCk7CiAgICBpbml0X2ZvbGRlcl9vdXRwdXQoKTsKICAgIGluaXRfZm9sZGVyX3BlbigpOwogICAgaW5pdF9mb2xkZXJfcGx1cygpOwogICAgaW5pdF9mb2xkZXJfcm9vdCgpOwogICAgaW5pdF9mb2xkZXJfc2VhcmNoXzIoKTsKICAgIGluaXRfZm9sZGVyX3NlYXJjaCgpOwogICAgaW5pdF9mb2xkZXJfc3ltbGluaygpOwogICAgaW5pdF9mb2xkZXJfc3luYygpOwogICAgaW5pdF9mb2xkZXJfdHJlZSgpOwogICAgaW5pdF9mb2xkZXJfdXAoKTsKICAgIGluaXRfZm9sZGVyX3goKTsKICAgIGluaXRfZm9sZGVyKCk7CiAgICBpbml0X2ZvbGRlcnMoKTsKICAgIGluaXRfZm9vdHByaW50cygpOwogICAgaW5pdF9mb3JrbGlmdCgpOwogICAgaW5pdF9mb3JtKCk7CiAgICBpbml0X2ZvcndhcmQoKTsKICAgIGluaXRfZnJhbWUoKTsKICAgIGluaXRfZnJhbWVyKCk7CiAgICBpbml0X2Zyb3duKCk7CiAgICBpbml0X2Z1ZWwoKTsKICAgIGluaXRfZnVsbHNjcmVlbigpOwogICAgaW5pdF9mdW5uZWxfcGx1cygpOwogICAgaW5pdF9mdW5uZWxfeCgpOwogICAgaW5pdF9mdW5uZWwoKTsKICAgIGluaXRfZ2FsbGVyeV9ob3Jpem9udGFsX2VuZCgpOwogICAgaW5pdF9nYWxsZXJ5X2hvcml6b250YWwoKTsKICAgIGluaXRfZ2FsbGVyeV90aHVtYm5haWxzKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWxfZW5kKCk7CiAgICBpbml0X2dhbGxlcnlfdmVydGljYWwoKTsKICAgIGluaXRfZ2FtZXBhZF8yKCk7CiAgICBpbml0X2dhbWVwYWRfZGlyZWN0aW9uYWwoKTsKICAgIGluaXRfZ2FtZXBhZCgpOwogICAgaW5pdF9nYXVnZSgpOwogICAgaW5pdF9nYXZlbCgpOwogICAgaW5pdF9nZW0oKTsKICAgIGluaXRfZ2VvcmdpYW5fbGFyaSgpOwogICAgaW5pdF9naG9zdCgpOwogICAgaW5pdF9naWZ0KCk7CiAgICBpbml0X2dpdF9icmFuY2hfbWludXMoKTsKICAgIGluaXRfZ2l0X2JyYW5jaCgpOwogICAgaW5pdF9naXRfYnJhbmNoX3BsdXMoKTsKICAgIGluaXRfZ2l0X2NvbW1pdF9ob3Jpem9udGFsKCk7CiAgICBpbml0X2dpdF9jb21taXRfdmVydGljYWwoKTsKICAgIGluaXRfZ2l0X2NvbXBhcmVfYXJyb3dzKCk7CiAgICBpbml0X2dpdF9jb21wYXJlKCk7CiAgICBpbml0X2dpdF9mb3JrKCk7CiAgICBpbml0X2dpdF9ncmFwaCgpOwogICAgaW5pdF9naXRfbWVyZ2UoKTsKICAgIGluaXRfZ2l0X3B1bGxfcmVxdWVzdF9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2Nsb3NlZCgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZV9hcnJvdygpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2NyZWF0ZSgpOwogICAgaW5pdF9naXRfcHVsbF9yZXF1ZXN0X2RyYWZ0KCk7CiAgICBpbml0X2dpdF9wdWxsX3JlcXVlc3QoKTsKICAgIGluaXRfZ2l0aHViKCk7CiAgICBpbml0X2dpdGxhYigpOwogICAgaW5pdF9nbGFzc193YXRlcigpOwogICAgaW5pdF9nbGFzc2VzKCk7CiAgICBpbml0X2dsb2JlX2xvY2soKTsKICAgIGluaXRfZ2xvYmUoKTsKICAgIGluaXRfZ29hbCgpOwogICAgaW5pdF9ncHUoKTsKICAgIGluaXRfZ3JhZHVhdGlvbl9jYXAoKTsKICAgIGluaXRfZ3JhcGUoKTsKICAgIGluaXRfZ3JpZF8yeDJfY2hlY2soKTsKICAgIGluaXRfZ3JpZF8yeDJfcGx1cygpOwogICAgaW5pdF9ncmlkXzJ4Ml94KCk7CiAgICBpbml0X2dyaWRfMngyKCk7CiAgICBpbml0X2dyaWRfM3gyKCk7CiAgICBpbml0X2dyaWRfM3gzKCk7CiAgICBpbml0X2dyaXBfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9ncmlwX3ZlcnRpY2FsKCk7CiAgICBpbml0X2dyaXAoKTsKICAgIGluaXRfZ3JvdXAoKTsKICAgIGluaXRfaGFtKCk7CiAgICBpbml0X2d1aXRhcigpOwogICAgaW5pdF9oYW1idXJnZXIoKTsKICAgIGluaXRfaGFtbWVyKCk7CiAgICBpbml0X2hhbmRfY29pbnMoKTsKICAgIGluaXRfaGFuZF9maXN0KCk7CiAgICBpbml0X2hhbmRfZ3JhYigpOwogICAgaW5pdF9oYW5kX2hlYXJ0KCk7CiAgICBpbml0X2hhbmRfaGVscGluZygpOwogICAgaW5pdF9oYW5kX21ldGFsKCk7CiAgICBpbml0X2hhbmRfcGxhdHRlcigpOwogICAgaW5pdF9oYW5kKCk7CiAgICBpbml0X2hhbmRiYWcoKTsKICAgIGluaXRfaGFuZHNoYWtlKCk7CiAgICBpbml0X2hhcmRfZHJpdmVfZG93bmxvYWQoKTsKICAgIGluaXRfaGFyZF9kcml2ZV91cGxvYWQoKTsKICAgIGluaXRfaGFyZF9oYXQoKTsKICAgIGluaXRfaGFzaCgpOwogICAgaW5pdF9oYXJkX2RyaXZlKCk7CiAgICBpbml0X2hhdF9nbGFzc2VzKCk7CiAgICBpbml0X2hhemUoKTsKICAgIGluaXRfaGQoKTsKICAgIGluaXRfaGRtaV9wb3J0KCk7CiAgICBpbml0X2hlYWRpbmdfMSgpOwogICAgaW5pdF9oZWFkaW5nXzMoKTsKICAgIGluaXRfaGVhZGluZ18yKCk7CiAgICBpbml0X2hlYWRpbmdfNCgpOwogICAgaW5pdF9oZWFkaW5nXzUoKTsKICAgIGluaXRfaGVhZGluZ182KCk7CiAgICBpbml0X2hlYWRpbmczKCk7CiAgICBpbml0X2hlYWRwaG9uZV9vZmYoKTsKICAgIGluaXRfaGVhZHBob25lcygpOwogICAgaW5pdF9oZWFkc2V0KCk7CiAgICBpbml0X2hlYXJ0X2NyYWNrKCk7CiAgICBpbml0X2hlYXJ0X2hhbmRzaGFrZSgpOwogICAgaW5pdF9oZWFydF9taW51cygpOwogICAgaW5pdF9oZWFydF9vZmYoKTsKICAgIGluaXRfaGVhcnRfcGx1cygpOwogICAgaW5pdF9oZWFydF9wdWxzZSgpOwogICAgaW5pdF9oZWF0ZXIoKTsKICAgIGluaXRfaGVhcnQoKTsKICAgIGluaXRfaGVsaWNvcHRlcigpOwogICAgaW5pdF9oZXhhZ29uKCk7CiAgICBpbml0X2hpZ2hsaWdodGVyKCk7CiAgICBpbml0X2hpc3RvcnkoKTsKICAgIGluaXRfaG9wKCk7CiAgICBpbml0X2hvcF9vZmYoKTsKICAgIGluaXRfaG9zcGl0YWwoKTsKICAgIGluaXRfaG90ZWwoKTsKICAgIGluaXRfaG91cmdsYXNzKCk7CiAgICBpbml0X2hvdXNlX2hlYXJ0KCk7CiAgICBpbml0X2hvdXNlX3BsdWcoKTsKICAgIGluaXRfaG91c2VfcGx1cygpOwogICAgaW5pdF9ob3VzZV93aWZpKCk7CiAgICBpbml0X2hvdXNlKCk7CiAgICBpbml0X2ljZV9jcmVhbV9ib3dsKCk7CiAgICBpbml0X2ljZV9jcmVhbV9jb25lKCk7CiAgICBpbml0X2lkX2NhcmRfbGFueWFyZCgpOwogICAgaW5pdF9pZF9jYXJkKCk7CiAgICBpbml0X2ltYWdlX2Rvd24oKTsKICAgIGluaXRfaW1hZ2VfbWludXMoKTsKICAgIGluaXRfaW1hZ2Vfb2ZmKCk7CiAgICBpbml0X2ltYWdlX3BsdXMoKTsKICAgIGluaXRfaW1hZ2VfcGxheSgpOwogICAgaW5pdF9pbWFnZV91cCgpOwogICAgaW5pdF9pbWFnZV91cHNjYWxlKCk7CiAgICBpbml0X2ltYWdlMygpOwogICAgaW5pdF9pbWFnZXMoKTsKICAgIGluaXRfaW1wb3J0KCk7CiAgICBpbml0X2luYm94KCk7CiAgICBpbml0X2luZGlhbl9ydXBlZSgpOwogICAgaW5pdF9pbmZpbml0eSgpOwogICAgaW5pdF9pbmZvMigpOwogICAgaW5pdF9pbnNwZWN0aW9uX3BhbmVsKCk7CiAgICBpbml0X2luc3RhZ3JhbSgpOwogICAgaW5pdF9pdGFsaWMoKTsKICAgIGluaXRfaXRlcmF0aW9uX2NjdygpOwogICAgaW5pdF9pdGVyYXRpb25fY3coKTsKICAgIGluaXRfamFwYW5lc2VfeWVuKCk7CiAgICBpbml0X2pveXN0aWNrKCk7CiAgICBpbml0X2thbmJhbigpOwogICAgaW5pdF9rYXlhaygpOwogICAgaW5pdF9rZXlfcm91bmQoKTsKICAgIGluaXRfa2V5X3NxdWFyZSgpOwogICAgaW5pdF9rZXkoKTsKICAgIGluaXRfa2V5Ym9hcmRfbXVzaWMoKTsKICAgIGluaXRfa2V5Ym9hcmRfb2ZmKCk7CiAgICBpbml0X2tleWJvYXJkKCk7CiAgICBpbml0X2xhbXBfY2VpbGluZygpOwogICAgaW5pdF9sYW1wX2Rlc2soKTsKICAgIGluaXRfbGFtcF9mbG9vcigpOwogICAgaW5pdF9sYW1wX3dhbGxfZG93bigpOwogICAgaW5pdF9sYW1wX3dhbGxfdXAoKTsKICAgIGluaXRfbGFtcCgpOwogICAgaW5pdF9sYW5kX3Bsb3QoKTsKICAgIGluaXRfbGFuZG1hcmsoKTsKICAgIGluaXRfbGFuZ3VhZ2VzKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsX2NoZWNrKCk7CiAgICBpbml0X2xhcHRvcF9taW5pbWFsKCk7CiAgICBpbml0X2xhcHRvcCgpOwogICAgaW5pdF9sYXNzb19zZWxlY3QoKTsKICAgIGluaXRfbGFzc28oKTsKICAgIGluaXRfbGF1Z2goKTsKICAgIGluaXRfbGF5ZXJzXzIoKTsKICAgIGluaXRfbGF5ZXJzKCk7CiAgICBpbml0X2xheWVyc19wbHVzKCk7CiAgICBpbml0X2xheW91dF9kYXNoYm9hcmQoKTsKICAgIGluaXRfbGF5b3V0X2dyaWQoKTsKICAgIGluaXRfbGF5b3V0X2xpc3QoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX2xlZnQoKTsKICAgIGluaXRfbGF5b3V0X3BhbmVsX3RvcCgpOwogICAgaW5pdF9sYXlvdXRfdGVtcGxhdGUoKTsKICAgIGluaXRfbGVhZigpOwogICAgaW5pdF9sZWFmeV9ncmVlbigpOwogICAgaW5pdF9sZWN0ZXJuKCk7CiAgICBpbml0X2xpYnJhcnlfYmlnKCk7CiAgICBpbml0X2xpYnJhcnkoKTsKICAgIGluaXRfbGlmZV9idW95KCk7CiAgICBpbml0X2xpZ2F0dXJlKCk7CiAgICBpbml0X2xpZ2h0YnVsYl9vZmYoKTsKICAgIGluaXRfbGlnaHRidWxiKCk7CiAgICBpbml0X2xpbmVfc3F1aWdnbGUoKTsKICAgIGluaXRfbGlua18yKCk7CiAgICBpbml0X2xpbmtfMl9vZmYoKTsKICAgIGluaXRfbGluazQoKTsKICAgIGluaXRfbGlua2VkaW4oKTsKICAgIGluaXRfbGlzdF9jaGVjaygpOwogICAgaW5pdF9saXN0X2NoZWNrcygpOwogICAgaW5pdF9saXN0X2NoZXZyb25zX2Rvd25fdXAoKTsKICAgIGluaXRfbGlzdF9jaGV2cm9uc191cF9kb3duKCk7CiAgICBpbml0X2xpc3RfY29sbGFwc2UoKTsKICAgIGluaXRfbGlzdF9lbmQoKTsKICAgIGluaXRfbGlzdF9maWx0ZXJfcGx1cygpOwogICAgaW5pdF9saXN0X2ZpbHRlcigpOwogICAgaW5pdF9saXN0X2luZGVudF9kZWNyZWFzZSgpOwogICAgaW5pdF9saXN0X2luZGVudF9pbmNyZWFzZSgpOwogICAgaW5pdF9saXN0X21pbnVzKCk7CiAgICBpbml0X2xpc3RfbXVzaWMoKTsKICAgIGluaXRfbGlzdF9vcmRlcmVkKCk7CiAgICBpbml0X2xpc3RfcGx1cygpOwogICAgaW5pdF9saXN0X3Jlc3RhcnQoKTsKICAgIGluaXRfbGlzdF9zdGFydCgpOwogICAgaW5pdF9saXN0X3RvZG8oKTsKICAgIGluaXRfbGlzdF90cmVlKCk7CiAgICBpbml0X2xpc3RfdmlkZW8oKTsKICAgIGluaXRfbGlzdF94KCk7CiAgICBpbml0X2xvYWRlcl9jaXJjbGUoKTsKICAgIGluaXRfbGlzdDQoKTsKICAgIGluaXRfbG9hZGVyX3BpbndoZWVsKCk7CiAgICBpbml0X2xvYWRlcigpOwogICAgaW5pdF9sb2NhdGVfZml4ZWQoKTsKICAgIGluaXRfbG9jYXRlX29mZigpOwogICAgaW5pdF9sb2NhdGUoKTsKICAgIGluaXRfbG9ja19rZXlob2xlX29wZW4oKTsKICAgIGluaXRfbG9ja19rZXlob2xlKCk7CiAgICBpbml0X2xvY2tfb3BlbigpOwogICAgaW5pdF9sb2NrKCk7CiAgICBpbml0X2xvZ19pbigpOwogICAgaW5pdF9sb2dfb3V0KCk7CiAgICBpbml0X2xvZ3MoKTsKICAgIGluaXRfbG9sbGlwb3AoKTsKICAgIGluaXRfbHVnZ2FnZSgpOwogICAgaW5pdF9tYWduZXQoKTsKICAgIGluaXRfbWFpbF9jaGVjaygpOwogICAgaW5pdF9tYWlsX21pbnVzKCk7CiAgICBpbml0X21haWxfb3BlbigpOwogICAgaW5pdF9tYWlsX3BsdXMoKTsKICAgIGluaXRfbWFpbF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X21haWxfc2VhcmNoKCk7CiAgICBpbml0X21haWxfd2FybmluZygpOwogICAgaW5pdF9tYWlsX3goKTsKICAgIGluaXRfbWFpbCgpOwogICAgaW5pdF9tYWlsYm94KCk7CiAgICBpbml0X21haWxzKCk7CiAgICBpbml0X21hcF9taW51cygpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrX2luc2lkZSgpOwogICAgaW5pdF9tYXBfcGluX2NoZWNrKCk7CiAgICBpbml0X21hcF9waW5faG91c2UoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51c19pbnNpZGUoKTsKICAgIGluaXRfbWFwX3Bpbl9taW51cygpOwogICAgaW5pdF9tYXBfcGluX29mZigpOwogICAgaW5pdF9tYXBfcGluX3BlbigpOwogICAgaW5pdF9tYXBfcGluX3BsdXNfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5fcGx1cygpOwogICAgaW5pdF9tYXBfcGluX3hfaW5zaWRlKCk7CiAgICBpbml0X21hcF9waW5feCgpOwogICAgaW5pdF9tYXBfcGluKCk7CiAgICBpbml0X21hcF9waW5uZWQoKTsKICAgIGluaXRfbWFwX3BsdXMoKTsKICAgIGluaXRfbWFwMigpOwogICAgaW5pdF9tYXJzX3N0cm9rZSgpOwogICAgaW5pdF9tYXJzKCk7CiAgICBpbml0X21hcnRpbmkoKTsKICAgIGluaXRfbWF4aW1pemVfMigpOwogICAgaW5pdF9tYXhpbWl6ZSgpOwogICAgaW5pdF9tZWdhcGhvbmVfb2ZmKCk7CiAgICBpbml0X21lZ2FwaG9uZSgpOwogICAgaW5pdF9tZWRhbCgpOwogICAgaW5pdF9tZWgoKTsKICAgIGluaXRfbWVtb3J5X3N0aWNrKCk7CiAgICBpbml0X21lcmdlNCgpOwogICAgaW5pdF9tZW51KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2NvZGUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfZGFzaGVkKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX2hlYXJ0KCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX21vcmUoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfb2ZmKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3BsdXMoKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGVfcXVlc3Rpb25fbWFyaygpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV9yZXBseSgpOwogICAgaW5pdF9tZXNzYWdlX2NpcmNsZV93YXJuaW5nKCk7CiAgICBpbml0X21lc3NhZ2VfY2lyY2xlX3goKTsKICAgIGluaXRfbWVzc2FnZV9jaXJjbGUoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfY29kZSgpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfZGlmZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9kb3QoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfaGVhcnQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfbG9jaygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9tb3JlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX29mZigpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV9wbHVzKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3F1b3RlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3JlcGx5KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3NoYXJlKCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlX3RleHQoKTsKICAgIGluaXRfbWVzc2FnZV9zcXVhcmVfd2FybmluZygpOwogICAgaW5pdF9tZXNzYWdlX3NxdWFyZV94KCk7CiAgICBpbml0X21lc3NhZ2Vfc3F1YXJlKCk7CiAgICBpbml0X21lc3NhZ2VzX3NxdWFyZSgpOwogICAgaW5pdF9taWNfb2ZmKCk7CiAgICBpbml0X21pY192b2NhbCgpOwogICAgaW5pdF9taWMoKTsKICAgIGluaXRfbWljcm9jaGlwKCk7CiAgICBpbml0X21pY3Jvc2NvcGUoKTsKICAgIGluaXRfbWljcm93YXZlKCk7CiAgICBpbml0X21pbGVzdG9uZSgpOwogICAgaW5pdF9taWxrX29mZigpOwogICAgaW5pdF9taWxrKCk7CiAgICBpbml0X21pbmltaXplXzIoKTsKICAgIGluaXRfbWluaW1pemUoKTsKICAgIGluaXRfbWludXMoKTsKICAgIGluaXRfbW9uaXRvcl9jaGVjaygpOwogICAgaW5pdF9tb25pdG9yX2Nsb3VkKCk7CiAgICBpbml0X21vbml0b3JfY29nKCk7CiAgICBpbml0X21vbml0b3JfZG90KCk7CiAgICBpbml0X21vbml0b3JfZG93bigpOwogICAgaW5pdF9tb25pdG9yX29mZigpOwogICAgaW5pdF9tb25pdG9yX3BhdXNlKCk7CiAgICBpbml0X21vbml0b3JfcGxheSgpOwogICAgaW5pdF9tb25pdG9yX3NtYXJ0cGhvbmUoKTsKICAgIGluaXRfbW9uaXRvcl9zcGVha2VyKCk7CiAgICBpbml0X21vbml0b3Jfc3RvcCgpOwogICAgaW5pdF9tb25pdG9yX3VwKCk7CiAgICBpbml0X21vbml0b3JfeCgpOwogICAgaW5pdF9tb25pdG9yKCk7CiAgICBpbml0X21vb25fc3RhcigpOwogICAgaW5pdF9tb3RvcmJpa2UoKTsKICAgIGluaXRfbW9vbigpOwogICAgaW5pdF9tb3VudGFpbl9zbm93KCk7CiAgICBpbml0X21vdW50YWluKCk7CiAgICBpbml0X21vdXNlX29mZigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyXzJfb2ZmKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXJfMigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2JhbigpOwogICAgaW5pdF9tb3VzZV9wb2ludGVyX2NsaWNrKCk7CiAgICBpbml0X21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfbW91c2UoKTsKICAgIGluaXRfbW92ZV8zZCgpOwogICAgaW5pdF9tb3ZlX2RpYWdvbmFsXzIoKTsKICAgIGluaXRfbW92ZV9kaWFnb25hbCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fbGVmdCgpOwogICAgaW5pdF9tb3ZlX2Rvd25fcmlnaHQoKTsKICAgIGluaXRfbW92ZV9kb3duKCk7CiAgICBpbml0X21vdmVfbGVmdCgpOwogICAgaW5pdF9tb3ZlX2hvcml6b250YWwoKTsKICAgIGluaXRfbW92ZV9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwX2xlZnQoKTsKICAgIGluaXRfbW92ZV91cF9yaWdodCgpOwogICAgaW5pdF9tb3ZlX3VwKCk7CiAgICBpbml0X21vdmVfdmVydGljYWwoKTsKICAgIGluaXRfbW92ZSgpOwogICAgaW5pdF9tdXNpY18yKCk7CiAgICBpbml0X211c2ljXzMoKTsKICAgIGluaXRfbXVzaWNfNCgpOwogICAgaW5pdF9tdXNpYygpOwogICAgaW5pdF9uYXZpZ2F0aW9uXzJfb2ZmKCk7CiAgICBpbml0X25hdmlnYXRpb25fMigpOwogICAgaW5pdF9uYXZpZ2F0aW9uX29mZigpOwogICAgaW5pdF9uYXZpZ2F0aW9uKCk7CiAgICBpbml0X25ld3NwYXBlcigpOwogICAgaW5pdF9uZXR3b3JrMigpOwogICAgaW5pdF9uZmMoKTsKICAgIGluaXRfbm9uX2JpbmFyeSgpOwogICAgaW5pdF9ub3RlYm9va19wZW4oKTsKICAgIGluaXRfbm90ZWJvb2tfdGFicygpOwogICAgaW5pdF9ub3RlYm9va190ZXh0KCk7CiAgICBpbml0X25vdGVib29rKCk7CiAgICBpbml0X25vdGVwYWRfdGV4dF9kYXNoZWQoKTsKICAgIGluaXRfbm90ZXBhZF90ZXh0KCk7CiAgICBpbml0X251dF9vZmYoKTsKICAgIGluaXRfbnV0KCk7CiAgICBpbml0X29jdGFnb25fYWxlcnQoKTsKICAgIGluaXRfb2N0YWdvbl9taW51cygpOwogICAgaW5pdF9vY3RhZ29uX3BhdXNlKCk7CiAgICBpbml0X29jdGFnb25feCgpOwogICAgaW5pdF9vY3RhZ29uKCk7CiAgICBpbml0X29tZWdhKCk7CiAgICBpbml0X29wdGlvbigpOwogICAgaW5pdF9vcmJpdCgpOwogICAgaW5pdF9vcmlnYW1pKCk7CiAgICBpbml0X3BhY2thZ2VfMigpOwogICAgaW5pdF9wYWNrYWdlX2NoZWNrKCk7CiAgICBpbml0X3BhY2thZ2VfbWludXMoKTsKICAgIGluaXRfcGFja2FnZV9vcGVuKCk7CiAgICBpbml0X3BhY2thZ2VfcGx1cygpOwogICAgaW5pdF9wYWNrYWdlX3NlYXJjaCgpOwogICAgaW5pdF9wYWNrYWdlX3goKTsKICAgIGluaXRfcGFja2FnZSgpOwogICAgaW5pdF9wYWludF9idWNrZXQoKTsKICAgIGluaXRfcGFpbnRfcm9sbGVyKCk7CiAgICBpbml0X3BhaW50YnJ1c2hfdmVydGljYWwoKTsKICAgIGluaXRfcGFpbnRicnVzaCgpOwogICAgaW5pdF9wYWxldHRlKCk7CiAgICBpbml0X3BhbmRhKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbV9vcGVuKCk7CiAgICBpbml0X3BhbmVsX2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF9sZWZ0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX2xlZnRfb3BlbigpOwogICAgaW5pdF9wYW5lbF9sZWZ0X3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9sZWZ0KCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Nsb3NlKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0X2Rhc2hlZCgpOwogICAgaW5pdF9wYW5lbF9yaWdodF9vcGVuKCk7CiAgICBpbml0X3BhbmVsX3JpZ2h0KCk7CiAgICBpbml0X3BhbmVsX3RvcF9ib3R0b21fZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9jbG9zZSgpOwogICAgaW5pdF9wYW5lbF90b3BfZGFzaGVkKCk7CiAgICBpbml0X3BhbmVsX3RvcF9vcGVuKCk7CiAgICBpbml0X3BhbmVsc19sZWZ0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbF90b3AoKTsKICAgIGluaXRfcGFuZWxzX3JpZ2h0X2JvdHRvbSgpOwogICAgaW5pdF9wYW5lbHNfdG9wX2xlZnQoKTsKICAgIGluaXRfcGFwZXJjbGlwKCk7CiAgICBpbml0X3BhcmtpbmdfbWV0ZXIoKTsKICAgIGluaXRfcGFyZW50aGVzZXMoKTsKICAgIGluaXRfcGFydHlfcG9wcGVyKCk7CiAgICBpbml0X3BhdXNlKCk7CiAgICBpbml0X3Bhd19wcmludCgpOwogICAgaW5pdF9wY19jYXNlKCk7CiAgICBpbml0X3Blbl9saW5lKCk7CiAgICBpbml0X3Blbl9vZmYoKTsKICAgIGluaXRfcGVuX3Rvb2woKTsKICAgIGluaXRfcGVuKCk7CiAgICBpbml0X3BlbmNpbF9saW5lKCk7CiAgICBpbml0X3BlbmNpbF9vZmYoKTsKICAgIGluaXRfcGVuY2lsX3J1bGVyKCk7CiAgICBpbml0X3BlbmNpbCgpOwogICAgaW5pdF9wZW50YWdvbigpOwogICAgaW5pdF9wZXJjZW50KCk7CiAgICBpbml0X3BlcnNvbl9zdGFuZGluZygpOwogICAgaW5pdF9waGlsaXBwaW5lX3Blc28oKTsKICAgIGluaXRfcGhvbmVfZm9yd2FyZGVkKCk7CiAgICBpbml0X3Bob25lX2NhbGwoKTsKICAgIGluaXRfcGhvbmVfaW5jb21pbmcoKTsKICAgIGluaXRfcGhvbmVfbWlzc2VkKCk7CiAgICBpbml0X3Bob25lX29mZigpOwogICAgaW5pdF9waG9uZV9vdXRnb2luZygpOwogICAgaW5pdF9waG9uZSgpOwogICAgaW5pdF9waSgpOwogICAgaW5pdF9waWFubygpOwogICAgaW5pdF9waWNrYXhlKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZV8yKCk7CiAgICBpbml0X3BpY3R1cmVfaW5fcGljdHVyZSgpOwogICAgaW5pdF9waWdneV9iYW5rKCk7CiAgICBpbml0X3BpbGNyb3dfbGVmdCgpOwogICAgaW5pdF9waWxjcm93X3JpZ2h0KCk7CiAgICBpbml0X3BpbGNyb3coKTsKICAgIGluaXRfcGlsbF9ib3R0bGUoKTsKICAgIGluaXRfcGlsbCgpOwogICAgaW5pdF9waW5fb2ZmKCk7CiAgICBpbml0X3BpbigpOwogICAgaW5pdF9waXBldHRlKCk7CiAgICBpbml0X3BpenphKCk7CiAgICBpbml0X3BsYW5lX2xhbmRpbmcoKTsKICAgIGluaXRfcGxhbmVfdGFrZW9mZigpOwogICAgaW5pdF9wbGFuZSgpOwogICAgaW5pdF9wbGF5KCk7CiAgICBpbml0X3BsdWdfMigpOwogICAgaW5pdF9wbHVnX3phcCgpOwogICAgaW5pdF9wbHVnKCk7CiAgICBpbml0X3BsdXMoKTsKICAgIGluaXRfcG9ja2V0X2tuaWZlKCk7CiAgICBpbml0X3BvY2tldCgpOwogICAgaW5pdF9wb2RjYXN0KCk7CiAgICBpbml0X3BvaW50ZXJfb2ZmKCk7CiAgICBpbml0X3BvaW50ZXIoKTsKICAgIGluaXRfcG9wY29ybigpOwogICAgaW5pdF9wb3BzaWNsZSgpOwogICAgaW5pdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9wb3dlcl9vZmYoKTsKICAgIGluaXRfcG93ZXIoKTsKICAgIGluaXRfcHJlc2VudGF0aW9uKCk7CiAgICBpbml0X3ByaW50ZXIoKTsKICAgIGluaXRfcHJpbnRlcl9jaGVjaygpOwogICAgaW5pdF9wcm9qZWN0b3IoKTsKICAgIGluaXRfcHJvcG9ydGlvbnMoKTsKICAgIGluaXRfcHV6emxlKCk7CiAgICBpbml0X3B5cmFtaWQoKTsKICAgIGluaXRfcXJfY29kZSgpOwogICAgaW5pdF9xdW90ZSgpOwogICAgaW5pdF9yYWJiaXQoKTsKICAgIGluaXRfcmFkYXIoKTsKICAgIGluaXRfcmFkaWF0aW9uKCk7CiAgICBpbml0X3JhZGljYWwoKTsKICAgIGluaXRfcmFkaW9fcmVjZWl2ZXIoKTsKICAgIGluaXRfcmFkaW9fdG93ZXIoKTsKICAgIGluaXRfcmFkaW8oKTsKICAgIGluaXRfcmFkaXVzKCk7CiAgICBpbml0X3JhaWxfc3ltYm9sKCk7CiAgICBpbml0X3JhaW5ib3coKTsKICAgIGluaXRfcmF0KCk7CiAgICBpbml0X3JhdGlvKCk7CiAgICBpbml0X3JlY2VpcHRfY2VudCgpOwogICAgaW5pdF9yZWNlaXB0X2V1cm8oKTsKICAgIGluaXRfcmVjZWlwdF9pbmRpYW5fcnVwZWUoKTsKICAgIGluaXRfcmVjZWlwdF9qYXBhbmVzZV95ZW4oKTsKICAgIGluaXRfcmVjZWlwdF9wb3VuZF9zdGVybGluZygpOwogICAgaW5pdF9yZWNlaXB0X3J1c3NpYW5fcnVibGUoKTsKICAgIGluaXRfcmVjZWlwdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9yZWNlaXB0X3RleHQoKTsKICAgIGluaXRfcmVjZWlwdF90dXJraXNoX2xpcmEoKTsKICAgIGluaXRfcmVjZWlwdCgpOwogICAgaW5pdF9yZWN0YW5nbGVfY2lyY2xlKCk7CiAgICBpbml0X3JlY3RhbmdsZV9lbGxpcHNpcygpOwogICAgaW5pdF9yZWN0YW5nbGVfZ29nZ2xlcygpOwogICAgaW5pdF9yZWN0YW5nbGVfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9yZWN0YW5nbGVfdmVydGljYWwoKTsKICAgIGluaXRfcmVjeWNsZSgpOwogICAgaW5pdF9yZWRvXzIoKTsKICAgIGluaXRfcmVkb19kb3QoKTsKICAgIGluaXRfcmVkbygpOwogICAgaW5pdF9yZWZyZXNoX2Njd19kb3QoKTsKICAgIGluaXRfcmVmcmVzaF9jY3coKTsKICAgIGluaXRfcmVmcmVzaF9jd19vZmYoKTsKICAgIGluaXRfcmVmcmVzaF9jdygpOwogICAgaW5pdF9yZWZyaWdlcmF0b3IoKTsKICAgIGluaXRfcmVnZXgoKTsKICAgIGluaXRfcmVtb3ZlX2Zvcm1hdHRpbmcoKTsKICAgIGluaXRfcmVwZWF0XzEoKTsKICAgIGluaXRfcmVwZWF0XzIoKTsKICAgIGluaXRfcmVwZWF0NCgpOwogICAgaW5pdF9yZXBsYWNlX2FsbCgpOwogICAgaW5pdF9yZXBsYWNlKCk7CiAgICBpbml0X3JlcGx5X2FsbCgpOwogICAgaW5pdF9yZXBseSgpOwogICAgaW5pdF9yZXdpbmQoKTsKICAgIGluaXRfcmliYm9uKCk7CiAgICBpbml0X3JvY2tldCgpOwogICAgaW5pdF9yb2NraW5nX2NoYWlyKCk7CiAgICBpbml0X3JvbGxlcl9jb2FzdGVyKCk7CiAgICBpbml0X3Jvc2UoKTsKICAgIGluaXRfcm90YXRlXzNkKCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfa2V5KCk7CiAgICBpbml0X3JvdGF0ZV9jY3dfc3F1YXJlKCk7CiAgICBpbml0X3JvdGF0ZV9jY3coKTsKICAgIGluaXRfcm90YXRlX2N3X3NxdWFyZSgpOwogICAgaW5pdF9yb3RhdGVfY3coKTsKICAgIGluaXRfcm91dGUoKTsKICAgIGluaXRfcm91dGVfb2ZmKCk7CiAgICBpbml0X3JvdXRlcigpOwogICAgaW5pdF9yb3dzXzIoKTsKICAgIGluaXRfcm93c18zKCk7CiAgICBpbml0X3Jvd3NfNCgpOwogICAgaW5pdF9yc3MoKTsKICAgIGluaXRfcnVsZXJfZGltZW5zaW9uX2xpbmUoKTsKICAgIGluaXRfcnVsZXIoKTsKICAgIGluaXRfcnVzc2lhbl9ydWJsZSgpOwogICAgaW5pdF9zYWlsYm9hdCgpOwogICAgaW5pdF9zYWxhZCgpOwogICAgaW5pdF9zYW5kd2ljaCgpOwogICAgaW5pdF9zYXRlbGxpdGVfZGlzaCgpOwogICAgaW5pdF9zYXRlbGxpdGUoKTsKICAgIGluaXRfc2F1ZGlfcml5YWwoKTsKICAgIGluaXRfc2F2ZV9hbGwoKTsKICAgIGluaXRfc2F2ZV9vZmYoKTsKICAgIGluaXRfc2F2ZSgpOwogICAgaW5pdF9zY2FsZV8zZCgpOwogICAgaW5pdF9zY2FsZSgpOwogICAgaW5pdF9zY2FsaW5nKCk7CiAgICBpbml0X3NjYW5fZXllKCk7CiAgICBpbml0X3NjYW5fYmFyY29kZSgpOwogICAgaW5pdF9zY2FuX2ZhY2UoKTsKICAgIGluaXRfc2Nhbl9oZWFydCgpOwogICAgaW5pdF9zY2FuX2xpbmUoKTsKICAgIGluaXRfc2Nhbl9xcl9jb2RlKCk7CiAgICBpbml0X3NjYW5fc2VhcmNoKCk7CiAgICBpbml0X3NjYW5fdGV4dCgpOwogICAgaW5pdF9zY2FuMigpOwogICAgaW5pdF9zY2hvb2woKTsKICAgIGluaXRfc2Npc3NvcnNfbGluZV9kYXNoZWQoKTsKICAgIGluaXRfc2Npc3NvcnMoKTsKICAgIGluaXRfc2Nvb3RlcigpOwogICAgaW5pdF9zY3JlZW5fc2hhcmVfb2ZmKCk7CiAgICBpbml0X3NjcmVlbl9zaGFyZSgpOwogICAgaW5pdF9zY3JvbGxfdGV4dCgpOwogICAgaW5pdF9zY3JvbGwoKTsKICAgIGluaXRfc2VhcmNoX2FsZXJ0KCk7CiAgICBpbml0X3NlYXJjaF9jb2RlKCk7CiAgICBpbml0X3NlYXJjaF9jaGVjaygpOwogICAgaW5pdF9zZWFyY2hfc2xhc2goKTsKICAgIGluaXRfc2VhcmNoX3goKTsKICAgIGluaXRfc2VhcmNoKCk7CiAgICBpbml0X3NlbmRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zZWN0aW9uKCk7CiAgICBpbml0X3NlbmRfdG9fYmFjaygpOwogICAgaW5pdF9zZW5kKCk7CiAgICBpbml0X3NlcGFyYXRvcl9ob3Jpem9udGFsKCk7CiAgICBpbml0X3NlcGFyYXRvcl92ZXJ0aWNhbCgpOwogICAgaW5pdF9zZXJ2ZXJfY29nKCk7CiAgICBpbml0X3NlcnZlcl9jcmFzaCgpOwogICAgaW5pdF9zZXJ2ZXJfb2ZmKCk7CiAgICBpbml0X3NlcnZlcigpOwogICAgaW5pdF9zZXR0aW5nc18yKCk7CiAgICBpbml0X3NldHRpbmdzKCk7CiAgICBpbml0X3NoYXBlcygpOwogICAgaW5pdF9zaGFyZV8yKCk7CiAgICBpbml0X3NoYXJlMigpOwogICAgaW5pdF9zaGVldCgpOwogICAgaW5pdF9zaGVsbCgpOwogICAgaW5pdF9zaGllbGRfYWxlcnQoKTsKICAgIGluaXRfc2hpZWxkX2JhbigpOwogICAgaW5pdF9zaGllbGRfY2hlY2soKTsKICAgIGluaXRfc2hpZWxkX2VsbGlwc2lzKCk7CiAgICBpbml0X3NoaWVsZF9oYWxmKCk7CiAgICBpbml0X3NoaWVsZF9taW51cygpOwogICAgaW5pdF9zaGllbGRfb2ZmKCk7CiAgICBpbml0X3NoaWVsZF9wbHVzKCk7CiAgICBpbml0X3NoaWVsZF9xdWVzdGlvbl9tYXJrKCk7CiAgICBpbml0X3NoaWVsZF91c2VyKCk7CiAgICBpbml0X3NoaWVsZF94KCk7CiAgICBpbml0X3NoaWVsZCgpOwogICAgaW5pdF9zaGlwX3doZWVsKCk7CiAgICBpbml0X3NoaXAoKTsKICAgIGluaXRfc2hpcnQoKTsKICAgIGluaXRfc2hvcHBpbmdfYmFnKCk7CiAgICBpbml0X3Nob3BwaW5nX2Jhc2tldCgpOwogICAgaW5pdF9zaG9wcGluZ19jYXJ0KCk7CiAgICBpbml0X3Nob3ZlbCgpOwogICAgaW5pdF9zaG93ZXJfaGVhZCgpOwogICAgaW5pdF9zaHJlZGRlcigpOwogICAgaW5pdF9zaHJpbXAoKTsKICAgIGluaXRfc2hyaW5rKCk7CiAgICBpbml0X3NocnViKCk7CiAgICBpbml0X3NodWZmbGUoKTsKICAgIGluaXRfc2lnbmFsX2hpZ2goKTsKICAgIGluaXRfc2lnbWEoKTsKICAgIGluaXRfc2lnbmFsX2xvdygpOwogICAgaW5pdF9zaWduYWxfbWVkaXVtKCk7CiAgICBpbml0X3NpZ25hbF96ZXJvKCk7CiAgICBpbml0X3NpZ25hbCgpOwogICAgaW5pdF9zaWduYXR1cmUoKTsKICAgIGluaXRfc2lnbnBvc3RfYmlnKCk7CiAgICBpbml0X3NpZ25wb3N0KCk7CiAgICBpbml0X3NpcmVuKCk7CiAgICBpbml0X3NraXBfYmFjaygpOwogICAgaW5pdF9za3VsbCgpOwogICAgaW5pdF9za2lwX2ZvcndhcmQoKTsKICAgIGluaXRfc2xhY2soKTsKICAgIGluaXRfc2xhc2goKTsKICAgIGluaXRfc2xpY2UoKTsKICAgIGluaXRfc2xpZGVyc19ob3Jpem9udGFsKCk7CiAgICBpbml0X3NsaWRlcnNfdmVydGljYWwoKTsKICAgIGluaXRfc21hcnRwaG9uZV9jaGFyZ2luZygpOwogICAgaW5pdF9zbWFydHBob25lX25mYygpOwogICAgaW5pdF9zbWFydHBob25lKCk7CiAgICBpbml0X3NtaWxlX3BsdXMoKTsKICAgIGluaXRfc21pbGUoKTsKICAgIGluaXRfc25haWwoKTsKICAgIGluaXRfc25vd2ZsYWtlKCk7CiAgICBpbml0X3NvYXBfZGlzcGVuc2VyX2Ryb3BsZXQoKTsKICAgIGluaXRfc29mYSgpOwogICAgaW5pdF9zb2xhcl9wYW5lbCgpOwogICAgaW5pdF9zb3VwKCk7CiAgICBpbml0X3NwYWNlKCk7CiAgICBpbml0X3NwYWRlKCk7CiAgICBpbml0X3NwYXJrbGUoKTsKICAgIGluaXRfc3BhcmtsZXMoKTsKICAgIGluaXRfc3BlYWtlcigpOwogICAgaW5pdF9zcGVlY2goKTsKICAgIGluaXRfc3BlbGxfY2hlY2tfMigpOwogICAgaW5pdF9zcGVsbF9jaGVjaygpOwogICAgaW5pdF9zcGxpbmVfcG9pbnRlcigpOwogICAgaW5pdF9zcGxpbmUoKTsKICAgIGluaXRfc3BsaXQoKTsKICAgIGluaXRfc3Bvb2woKTsKICAgIGluaXRfc3BvdGxpZ2h0KCk7CiAgICBpbml0X3NwcmF5X2NhbigpOwogICAgaW5pdF9zcHJvdXQoKTsKICAgIGluaXRfc3F1YXJlX2FjdGl2aXR5KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd25fcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2Rvd24oKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX2xlZnQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X291dF9kb3duX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19vdXRfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfb3V0X3VwX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9hcnJvd19yaWdodCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfbGVmdCgpOwogICAgaW5pdF9zcXVhcmVfYXJyb3dfdXBfcmlnaHQoKTsKICAgIGluaXRfc3F1YXJlX2Fycm93X3VwKCk7CiAgICBpbml0X3NxdWFyZV9hc3RlcmlzaygpOwogICAgaW5pdF9zcXVhcmVfYm90dG9tX2Rhc2hlZF9zY2lzc29ycygpOwogICAgaW5pdF9zcXVhcmVfY2hhcnRfZ2FudHQoKTsKICAgIGluaXRfc3F1YXJlX2NoZWNrKCk7CiAgICBpbml0X3NxdWFyZV9jaGVja19iaWcoKTsKICAgIGluaXRfc3F1YXJlX2NoZXZyb25fZG93bigpOwogICAgaW5pdF9zcXVhcmVfY2hldnJvbl9sZWZ0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3JpZ2h0KCk7CiAgICBpbml0X3NxdWFyZV9jaGV2cm9uX3VwKCk7CiAgICBpbml0X3NxdWFyZV9jb2RlKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfYm90dG9tX2NvZGUoKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9ib3R0b20oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9rYW5iYW4oKTsKICAgIGluaXRfc3F1YXJlX2Rhc2hlZF9tb3VzZV9wb2ludGVyKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWRfdG9wX3NvbGlkKCk7CiAgICBpbml0X3NxdWFyZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlX2RpdmlkZSgpOwogICAgaW5pdF9zcXVhcmVfZG90KCk7CiAgICBpbml0X3NxdWFyZV9lcXVhbCgpOwogICAgaW5pdF9zcXVhcmVfZnVuY3Rpb24oKTsKICAgIGluaXRfc3F1YXJlX2thbmJhbigpOwogICAgaW5pdF9zcXVhcmVfbGlicmFyeSgpOwogICAgaW5pdF9zcXVhcmVfbSgpOwogICAgaW5pdF9zcXVhcmVfbWVudSgpOwogICAgaW5pdF9zcXVhcmVfbWludXMoKTsKICAgIGluaXRfc3F1YXJlX21vdXNlX3BvaW50ZXIoKTsKICAgIGluaXRfc3F1YXJlX3Bhcmtpbmdfb2ZmKCk7CiAgICBpbml0X3NxdWFyZV9wYXJraW5nKCk7CiAgICBpbml0X3NxdWFyZV9wZW4oKTsKICAgIGluaXRfc3F1YXJlX3BhdXNlKCk7CiAgICBpbml0X3NxdWFyZV9wZXJjZW50KCk7CiAgICBpbml0X3NxdWFyZV9waSgpOwogICAgaW5pdF9zcXVhcmVfcGlsY3JvdygpOwogICAgaW5pdF9zcXVhcmVfcGxheSgpOwogICAgaW5pdF9zcXVhcmVfcGx1cygpOwogICAgaW5pdF9zcXVhcmVfcG93ZXIoKTsKICAgIGluaXRfc3F1YXJlX3JhZGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NjaXNzb3JzKCk7CiAgICBpbml0X3NxdWFyZV9yb3VuZF9jb3JuZXIoKTsKICAgIGluaXRfc3F1YXJlX3NpZ21hKCk7CiAgICBpbml0X3NxdWFyZV9zbGFzaCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF9zcXVhcmVfc3BsaXRfdmVydGljYWwoKTsKICAgIGluaXRfc3F1YXJlX3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVfc3RhY2soKTsKICAgIGluaXRfc3F1YXJlX3N0YXIoKTsKICAgIGluaXRfc3F1YXJlX3N0b3AoKTsKICAgIGluaXRfc3F1YXJlX3Rlcm1pbmFsKCk7CiAgICBpbml0X3NxdWFyZV91c2VyX3JvdW5kKCk7CiAgICBpbml0X3NxdWFyZV91c2VyKCk7CiAgICBpbml0X3NxdWFyZV94KCk7CiAgICBpbml0X3NxdWFyZSgpOwogICAgaW5pdF9zcXVhcmVzX2V4Y2x1ZGUoKTsKICAgIGluaXRfc3F1YXJlc19pbnRlcnNlY3QoKTsKICAgIGluaXRfc3F1YXJlc19zdWJ0cmFjdCgpOwogICAgaW5pdF9zcXVpcmNsZV9kYXNoZWQoKTsKICAgIGluaXRfc3F1YXJlc191bml0ZSgpOwogICAgaW5pdF9zcXVpcmNsZSgpOwogICAgaW5pdF9zcXVpcnJlbCgpOwogICAgaW5pdF9zdGFtcCgpOwogICAgaW5pdF9zdGFyX29mZigpOwogICAgaW5pdF9zdGFyX2hhbGYoKTsKICAgIGluaXRfc3RhcigpOwogICAgaW5pdF9zdGVwX2JhY2soKTsKICAgIGluaXRfc3RlcF9mb3J3YXJkKCk7CiAgICBpbml0X3N0ZXRob3Njb3BlKCk7CiAgICBpbml0X3N0aWNrZXIoKTsKICAgIGluaXRfc3RvbmUoKTsKICAgIGluaXRfc3RpY2t5X25vdGUoKTsKICAgIGluaXRfc3RvcmUoKTsKICAgIGluaXRfc3RyZXRjaF9ob3Jpem9udGFsKCk7CiAgICBpbml0X3N0cmV0Y2hfdmVydGljYWwoKTsKICAgIGluaXRfc3RyaWtldGhyb3VnaCgpOwogICAgaW5pdF9zdWJzY3JpcHQoKTsKICAgIGluaXRfc3VuX2RpbSgpOwogICAgaW5pdF9zdW5fbWVkaXVtKCk7CiAgICBpbml0X3N1bl9tb29uKCk7CiAgICBpbml0X3N1bl9zbm93KCk7CiAgICBpbml0X3N1bigpOwogICAgaW5pdF9zdW5yaXNlKCk7CiAgICBpbml0X3N1bnNldCgpOwogICAgaW5pdF9zdXBlcnNjcmlwdCgpOwogICAgaW5pdF9zd2F0Y2hfYm9vaygpOwogICAgaW5pdF9zd2lzc19mcmFuYygpOwogICAgaW5pdF9zd2l0Y2hfY2FtZXJhKCk7CiAgICBpbml0X3N3b3JkKCk7CiAgICBpbml0X3N3b3JkcygpOwogICAgaW5pdF9zeXJpbmdlKCk7CiAgICBpbml0X3RhYmxlXzIoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfbWVyZ2UoKTsKICAgIGluaXRfdGFibGVfY2VsbHNfc3BsaXQoKTsKICAgIGluaXRfdGFibGVfb2ZfY29udGVudHMoKTsKICAgIGluaXRfdGFibGVfY29sdW1uc19zcGxpdCgpOwogICAgaW5pdF90YWJsZV9wcm9wZXJ0aWVzKCk7CiAgICBpbml0X3RhYmxlX3Jvd3Nfc3BsaXQoKTsKICAgIGluaXRfdGFibGUyKCk7CiAgICBpbml0X3RhYmxldF9zbWFydHBob25lKCk7CiAgICBpbml0X3RhYmxldCgpOwogICAgaW5pdF90YWJsZXRzKCk7CiAgICBpbml0X3RhZygpOwogICAgaW5pdF90YWdzKCk7CiAgICBpbml0X3RhbGx5XzEoKTsKICAgIGluaXRfdGFsbHlfMigpOwogICAgaW5pdF90YWxseV8zKCk7CiAgICBpbml0X3RhbGx5XzQoKTsKICAgIGluaXRfdGFsbHlfNSgpOwogICAgaW5pdF90YW5nZW50KCk7CiAgICBpbml0X3RhcmdldCgpOwogICAgaW5pdF90ZWxlc2NvcGUoKTsKICAgIGluaXRfdGVudF90cmVlKCk7CiAgICBpbml0X3RlbnQoKTsKICAgIGluaXRfdGVzdF90dWJlX2RpYWdvbmFsKCk7CiAgICBpbml0X3Rlcm1pbmFsKCk7CiAgICBpbml0X3Rlc3RfdHViZSgpOwogICAgaW5pdF90ZXN0X3R1YmVzKCk7CiAgICBpbml0X3RleHRfYWxpZ25fY2VudGVyKCk7CiAgICBpbml0X3RleHRfYWxpZ25fZW5kKCk7CiAgICBpbml0X3RleHRfYWxpZ25fanVzdGlmeSgpOwogICAgaW5pdF90ZXh0X2FsaWduX3N0YXJ0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yX2lucHV0KCk7CiAgICBpbml0X3RleHRfY3Vyc29yKCk7CiAgICBpbml0X3RleHRfcXVvdGUoKTsKICAgIGluaXRfdGV4dF9pbml0aWFsKCk7CiAgICBpbml0X3RleHRfc2VhcmNoKCk7CiAgICBpbml0X3RleHRfc2VsZWN0KCk7CiAgICBpbml0X3RoZWF0ZXIoKTsKICAgIGluaXRfdGV4dF93cmFwKCk7CiAgICBpbml0X3RoZXJtb21ldGVyX3Nub3dmbGFrZSgpOwogICAgaW5pdF90aGVybW9tZXRlcl9zdW4oKTsKICAgIGluaXRfdGhlcm1vbWV0ZXIoKTsKICAgIGluaXRfdGh1bWJzX2Rvd24oKTsKICAgIGluaXRfdGh1bWJzX3VwKCk7CiAgICBpbml0X3RpY2tldF9jaGVjaygpOwogICAgaW5pdF90aWNrZXRfbWludXMoKTsKICAgIGluaXRfdGlja2V0X3BlcmNlbnQoKTsKICAgIGluaXRfdGlja2V0X3BsdXMoKTsKICAgIGluaXRfdGlja2V0X3NsYXNoKCk7CiAgICBpbml0X3RpY2tldF94KCk7CiAgICBpbml0X3RpY2tldCgpOwogICAgaW5pdF90aWNrZXRzX3BsYW5lKCk7CiAgICBpbml0X3RpY2tldHMoKTsKICAgIGluaXRfdGltZXJfcmVzZXQoKTsKICAgIGluaXRfdGltZXJfb2ZmKCk7CiAgICBpbml0X3RpbWVyMigpOwogICAgaW5pdF90b2dnbGVfbGVmdCgpOwogICAgaW5pdF90b2dnbGVfcmlnaHQoKTsKICAgIGluaXRfdG9pbGV0KCk7CiAgICBpbml0X3Rvb2xfY2FzZSgpOwogICAgaW5pdF90b29sYm94KCk7CiAgICBpbml0X3Rvcm5hZG8oKTsKICAgIGluaXRfdG9ydXMoKTsKICAgIGluaXRfdG91Y2hwYWRfb2ZmKCk7CiAgICBpbml0X3RvdWNocGFkKCk7CiAgICBpbml0X3Rvd2VyX2NvbnRyb2woKTsKICAgIGluaXRfdG95X2JyaWNrKCk7CiAgICBpbml0X3RyYWZmaWNfY29uZSgpOwogICAgaW5pdF90cmFjdG9yKCk7CiAgICBpbml0X3RyYWluX2Zyb250X3R1bm5lbCgpOwogICAgaW5pdF90cmFpbl9mcm9udCgpOwogICAgaW5pdF90cmFpbl90cmFjaygpOwogICAgaW5pdF90cmFtX2Zyb250KCk7CiAgICBpbml0X3RyYW5zZ2VuZGVyKCk7CiAgICBpbml0X3RyYXNoXzIoKTsKICAgIGluaXRfdHJhc2goKTsKICAgIGluaXRfdHJlZV9kZWNpZHVvdXMoKTsKICAgIGluaXRfdHJlZV9wYWxtKCk7CiAgICBpbml0X3RyZWVfcGluZSgpOwogICAgaW5pdF90cmVlcygpOwogICAgaW5pdF90cmVsbG8oKTsKICAgIGluaXRfdHJlbmRpbmdfZG93bigpOwogICAgaW5pdF90cmVuZGluZ191cF9kb3duKCk7CiAgICBpbml0X3RyZW5kaW5nX3VwKCk7CiAgICBpbml0X3RyaWFuZ2xlX2FsZXJ0KCk7CiAgICBpbml0X3RyaWFuZ2xlX2Rhc2hlZCgpOwogICAgaW5pdF90cmlhbmdsZV9yaWdodCgpOwogICAgaW5pdF90cmlhbmdsZSgpOwogICAgaW5pdF90cm9waHkoKTsKICAgIGluaXRfdHJ1Y2tfZWxlY3RyaWMoKTsKICAgIGluaXRfdHJ1Y2soKTsKICAgIGluaXRfdHVya2lzaF9saXJhKCk7CiAgICBpbml0X3R1cm50YWJsZSgpOwogICAgaW5pdF90dXJ0bGUoKTsKICAgIGluaXRfdHZfbWluaW1hbF9wbGF5KCk7CiAgICBpbml0X3R2X21pbmltYWwoKTsKICAgIGluaXRfdHYoKTsKICAgIGluaXRfdHdpdGNoKCk7CiAgICBpbml0X3R3aXR0ZXIoKTsKICAgIGluaXRfdHlwZV9vdXRsaW5lKCk7CiAgICBpbml0X3R5cGUoKTsKICAgIGluaXRfdW1icmVsbGFfb2ZmKCk7CiAgICBpbml0X3VtYnJlbGxhKCk7CiAgICBpbml0X3VuZGVybGluZSgpOwogICAgaW5pdF91bmRvXzIoKTsKICAgIGluaXRfdW5kb19kb3QoKTsKICAgIGluaXRfdW5kbygpOwogICAgaW5pdF91bmZvbGRfaG9yaXpvbnRhbCgpOwogICAgaW5pdF91bmZvbGRfdmVydGljYWwoKTsKICAgIGluaXRfdW5ncm91cCgpOwogICAgaW5pdF91bml2ZXJzaXR5KCk7CiAgICBpbml0X3VubGlua18yKCk7CiAgICBpbml0X3VubGluaygpOwogICAgaW5pdF91bnBsdWcoKTsKICAgIGluaXRfdXNiKCk7CiAgICBpbml0X3VwbG9hZCgpOwogICAgaW5pdF91c2VyX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfY29nKCk7CiAgICBpbml0X3VzZXJfbG9jaygpOwogICAgaW5pdF91c2VyX21pbnVzKCk7CiAgICBpbml0X3VzZXJfcGVuKCk7CiAgICBpbml0X3VzZXJfcGx1cygpOwogICAgaW5pdF91c2VyX3JvdW5kX2NoZWNrKCk7CiAgICBpbml0X3VzZXJfcm91bmRfY29nKCk7CiAgICBpbml0X3VzZXJfcm91bmRfbWludXMoKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wZW4oKTsKICAgIGluaXRfdXNlcl9yb3VuZF9wbHVzKCk7CiAgICBpbml0X3VzZXJfcm91bmRfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfcm91bmQoKTsKICAgIGluaXRfdXNlcl9yb3VuZF94KCk7CiAgICBpbml0X3VzZXJfc2VhcmNoKCk7CiAgICBpbml0X3VzZXJfc3RhcigpOwogICAgaW5pdF91c2VyX3goKTsKICAgIGluaXRfdXNlcigpOwogICAgaW5pdF91c2Vyc19yb3VuZCgpOwogICAgaW5pdF91c2VycygpOwogICAgaW5pdF91dGVuc2lsc19jcm9zc2VkKCk7CiAgICBpbml0X3V0ZW5zaWxzKCk7CiAgICBpbml0X3ZhbigpOwogICAgaW5pdF91dGlsaXR5X3BvbGUoKTsKICAgIGluaXRfdmFyaWFibGUoKTsKICAgIGluaXRfdmF1bHQoKTsKICAgIGluaXRfdmVjdG9yX3NxdWFyZSgpOwogICAgaW5pdF92ZWdhbigpOwogICAgaW5pdF92ZW5ldGlhbl9tYXNrKCk7CiAgICBpbml0X3ZlbnVzKCk7CiAgICBpbml0X3ZlbnVzX2FuZF9tYXJzKCk7CiAgICBpbml0X3ZpYnJhdGVfb2ZmKCk7CiAgICBpbml0X3ZpYnJhdGUoKTsKICAgIGluaXRfdmlkZW9fb2ZmKCk7CiAgICBpbml0X3ZpZGVvKCk7CiAgICBpbml0X3ZvaWNlbWFpbCgpOwogICAgaW5pdF92aWRlb3RhcGUoKTsKICAgIGluaXRfdmlldygpOwogICAgaW5pdF92b2xsZXliYWxsKCk7CiAgICBpbml0X3ZvbHVtZV8xKCk7CiAgICBpbml0X3ZvbHVtZV8yKCk7CiAgICBpbml0X3ZvbHVtZV9vZmYoKTsKICAgIGluaXRfdm9sdW1lX3goKTsKICAgIGluaXRfdm9sdW1lKCk7CiAgICBpbml0X3ZvdGUoKTsKICAgIGluaXRfd2FsbGV0X21pbmltYWwoKTsKICAgIGluaXRfd2FsbGV0X2NhcmRzKCk7CiAgICBpbml0X3dhbGxldCgpOwogICAgaW5pdF93YWxscGFwZXIoKTsKICAgIGluaXRfd2FuZF9zcGFya2xlcygpOwogICAgaW5pdF93YW5kKCk7CiAgICBpbml0X3dhcmVob3VzZSgpOwogICAgaW5pdF93YXNoaW5nX21hY2hpbmUoKTsKICAgIGluaXRfd2F0Y2goKTsKICAgIGluaXRfd2F2ZXNfYXJyb3dfZG93bigpOwogICAgaW5pdF93YXZlc19hcnJvd191cCgpOwogICAgaW5pdF93YXZlc19sYWRkZXIoKTsKICAgIGluaXRfd2F2ZXMoKTsKICAgIGluaXRfd2F5cG9pbnRzKCk7CiAgICBpbml0X3dlYmNhbSgpOwogICAgaW5pdF93ZWJob29rX29mZigpOwogICAgaW5pdF93ZWJob29rKCk7CiAgICBpbml0X3dlaWdodF90aWxkZSgpOwogICAgaW5pdF93ZWlnaHQoKTsKICAgIGluaXRfd2hlYXRfb2ZmKCk7CiAgICBpbml0X3doZWF0KCk7CiAgICBpbml0X3dob2xlX3dvcmQoKTsKICAgIGluaXRfd2lmaV9jb2coKTsKICAgIGluaXRfd2lmaV9sb3coKTsKICAgIGluaXRfd2lmaV9oaWdoKCk7CiAgICBpbml0X3dpZmlfb2ZmKCk7CiAgICBpbml0X3dpZmlfcGVuKCk7CiAgICBpbml0X3dpZmlfc3luYygpOwogICAgaW5pdF93aWZpX3plcm8oKTsKICAgIGluaXRfd2lmaSgpOwogICAgaW5pdF93aW5kX2Fycm93X2Rvd24oKTsKICAgIGluaXRfd2luZCgpOwogICAgaW5pdF93aW5lX29mZigpOwogICAgaW5pdF93aW5lKCk7CiAgICBpbml0X3dvcm0oKTsKICAgIGluaXRfd29ya2Zsb3coKTsKICAgIGluaXRfd3JlbmNoKCk7CiAgICBpbml0X3goKTsKICAgIGluaXRfeW91dHViZSgpOwogICAgaW5pdF96YXBfb2ZmKCk7CiAgICBpbml0X3phcCgpOwogICAgaW5pdF96b29tX2luKCk7CiAgICBpbml0X3pvb21fb3V0KCk7CiAgICBjcmVhdGVJY29ucyA9ICh7CiAgICAgIGljb25zOiBpY29uczUgPSB7fSwKICAgICAgbmFtZUF0dHIgPSAiZGF0YS1sdWNpZGUiLAogICAgICBhdHRycyA9IHt9LAogICAgICByb290OiByb290NiA9IGRvY3VtZW50LAogICAgICBpblRlbXBsYXRlcwogICAgfSA9IHt9KSA9PiB7CiAgICAgIGlmICghT2JqZWN0LnZhbHVlcyhpY29uczUpLmxlbmd0aCkgewogICAgICAgIHRocm93IG5ldyBFcnJvcigKICAgICAgICAgICJQbGVhc2UgcHJvdmlkZSBhbiBpY29ucyBvYmplY3QuXG5JZiB5b3Ugd2FudCB0byB1c2UgYWxsIHRoZSBpY29ucyB5b3UgY2FuIGltcG9ydCBpdCBsaWtlOlxuIGBpbXBvcnQgeyBjcmVhdGVJY29ucywgaWNvbnMgfSBmcm9tICdsdWNpZGUnO1xubHVjaWRlLmNyZWF0ZUljb25zKHtpY29uc30pO2AiCiAgICAgICAgKTsKICAgICAgfQogICAgICBpZiAodHlwZW9mIHJvb3Q2ID09PSAidW5kZWZpbmVkIikgewogICAgICAgIHRocm93IG5ldyBFcnJvcigiYGNyZWF0ZUljb25zKClgIG9ubHkgd29ya3MgaW4gYSBicm93c2VyIGVudmlyb25tZW50LiIpOwogICAgICB9CiAgICAgIGNvbnN0IGVsZW1lbnRzVG9SZXBsYWNlID0gQXJyYXkuZnJvbShyb290Ni5xdWVyeVNlbGVjdG9yQWxsKGBbJHtuYW1lQXR0cn1dYCkpOwogICAgICBlbGVtZW50c1RvUmVwbGFjZS5mb3JFYWNoKChlbGVtZW50NCkgPT4gcmVwbGFjZUVsZW1lbnQoZWxlbWVudDQsIHsgbmFtZUF0dHIsIGljb25zOiBpY29uczUsIGF0dHJzIH0pKTsKICAgICAgaWYgKGluVGVtcGxhdGVzKSB7CiAgICAgICAgY29uc3QgdGVtcGxhdGVzID0gQXJyYXkuZnJvbShyb290Ni5xdWVyeVNlbGVjdG9yQWxsKCJ0ZW1wbGF0ZSIpKTsKICAgICAgICB0ZW1wbGF0ZXMuZm9yRWFjaCgKICAgICAgICAgICh0ZW1wbGF0ZSkgPT4gY3JlYXRlSWNvbnMoewogICAgICAgICAgICBpY29uczogaWNvbnM1LAogICAgICAgICAgICBuYW1lQXR0ciwKICAgICAgICAgICAgYXR0cnMsCiAgICAgICAgICAgIHJvb3Q6IHRlbXBsYXRlLmNvbnRlbnQsCiAgICAgICAgICAgIGluVGVtcGxhdGVzCiAgICAgICAgICB9KQogICAgICAgICk7CiAgICAgIH0KICAgICAgaWYgKG5hbWVBdHRyID09PSAiZGF0YS1sdWNpZGUiKSB7CiAgICAgICAgY29uc3QgZGVwcmVjYXRlZEVsZW1lbnRzID0gcm9vdDYucXVlcnlTZWxlY3RvckFsbCgiW2ljb24tbmFtZV0iKTsKICAgICAgICBpZiAoZGVwcmVjYXRlZEVsZW1lbnRzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnNvbGUud2FybigKICAgICAgICAgICAgIltMdWNpZGVdIFNvbWUgaWNvbnMgd2VyZSBmb3VuZCB3aXRoIHRoZSBub3cgZGVwcmVjYXRlZCBpY29uLW5hbWUgYXR0cmlidXRlLiBUaGVzZSB3aWxsIHN0aWxsIGJlIHJlcGxhY2VkIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eSwgYnV0IHdpbGwgbm8gbG9uZ2VyIGJlIHN1cHBvcnRlZCBpbiB2MS4wIGFuZCB5b3Ugc2hvdWxkIHN3aXRjaCB0byBkYXRhLWx1Y2lkZSIKICAgICAgICAgICk7CiAgICAgICAgICBBcnJheS5mcm9tKGRlcHJlY2F0ZWRFbGVtZW50cykuZm9yRWFjaCgKICAgICAgICAgICAgKGVsZW1lbnQ0KSA9PiByZXBsYWNlRWxlbWVudChlbGVtZW50NCwgeyBuYW1lQXR0cjogImljb24tbmFtZSIsIGljb25zOiBpY29uczUsIGF0dHJzIH0pCiAgICAgICAgICApOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmRlbW8uanMKdmFyIGRlbW9GdW5jMjsKdmFyIGluaXRfZGVlc19pY29uX2RlbW8gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5kZW1vLmpzIigpIHsKICAgIGluaXRfZGlzdF90czI2KCk7CiAgICBpbml0X2RlZXNfaWNvbigpOwogICAgaW5pdF9sdWNpZGUoKTsKICAgIGRlbW9GdW5jMiA9ICgpID0+IHsKICAgICAgY29uc3QgZmFJY29uczMgPSBPYmplY3Qua2V5cyhpY29uczQuZmEpOwogICAgICBjb25zb2xlLmxvZygiRmlyc3QgZmV3IEx1Y2lkZSBrZXlzOiIsIE9iamVjdC5rZXlzKGx1Y2lkZV9leHBvcnRzKS5zbGljZSgwLCA1KSk7CiAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdCA9IE9iamVjdC5rZXlzKGx1Y2lkZV9leHBvcnRzKS5maWx0ZXIoKGtleTIpID0+IHsKICAgICAgICBjb25zdCBpc1VwcGVyY2FzZUZpcnN0ID0ga2V5MlswXSA9PT0ga2V5MlswXS50b1VwcGVyQ2FzZSgpICYmIGtleTJbMF0gIT09IGtleTJbMF0udG9Mb3dlckNhc2UoKTsKICAgICAgICBjb25zdCBpc0Z1bmN0aW9uMiA9IHR5cGVvZiBsdWNpZGVfZXhwb3J0c1trZXkyXSA9PT0gImZ1bmN0aW9uIjsKICAgICAgICBjb25zdCBub3RVdGlsaXR5ID0gIVsiY3JlYXRlRWxlbWVudCIsICJjcmVhdGVJY29ucyIsICJkZWZhdWx0Il0uaW5jbHVkZXMoa2V5Mik7CiAgICAgICAgcmV0dXJuIGlzRnVuY3Rpb24yICYmIGlzVXBwZXJjYXNlRmlyc3QgJiYgbm90VXRpbGl0eTsKICAgICAgfSkubWFwKChwYXNjYWxOYW1lKSA9PiB7CiAgICAgICAgcmV0dXJuIHBhc2NhbE5hbWUuY2hhckF0KDApLnRvTG93ZXJDYXNlKCkgKyBwYXNjYWxOYW1lLnNsaWNlKDEpOwogICAgICB9KTsKICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gTHVjaWRlIGljb25zYCk7CiAgICAgIGlmIChsdWNpZGVJY29uc0xpc3QubGVuZ3RoID09PSAwKSB7CiAgICAgICAgY29uc29sZS5sb2coIlRyeWluZyBhbHRlcm5hdGl2ZSBhcHByb2FjaCB0byBmaW5kIEx1Y2lkZSBpY29ucyIpOwogICAgICAgIGlmIChpY29uc0FuZEFsaWFzZXNfZXhwb3J0cykgewogICAgICAgICAgY29uc3QgaWNvblNvdXJjZSA9IGljb25zQW5kQWxpYXNlc19leHBvcnRzIHx8IHt9OwogICAgICAgICAgbHVjaWRlSWNvbnNMaXN0LnB1c2goLi4uT2JqZWN0LmtleXMoaWNvblNvdXJjZSkpOwogICAgICAgICAgY29uc29sZS5sb2coYEZvdW5kICR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnMgdmlhIGFsdGVybmF0aXZlIG1ldGhvZGApOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb3B5QWxsSWNvbk5hbWVzID0gKCkgPT4gewogICAgICAgIGNvbnN0IGZhSWNvbnNMaXN0ID0gZmFJY29uczMubWFwKChuYW1lKSA9PiBgZmE6JHtuYW1lfWApOwogICAgICAgIGNvbnN0IGx1Y2lkZUljb25zTGlzdFByZWZpeGVkID0gbHVjaWRlSWNvbnNMaXN0Lm1hcCgobmFtZSkgPT4gYGx1Y2lkZToke25hbWV9YCk7CiAgICAgICAgY29uc3QgYWxsSWNvbnMgPSBbLi4uZmFJY29uc0xpc3QsIC4uLmx1Y2lkZUljb25zTGlzdFByZWZpeGVkXTsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYWxsSWNvbnMuam9pbigiXG4iKTsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGN1cnJlbnRFdmVudC5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgb3JpZ2luYWxUZXh0ID0gYnV0dG9uLnRleHRDb250ZW50OwogICAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gYFx1MjcxMyBDb3BpZWQgJHthbGxJY29ucy5sZW5ndGh9IGljb24gbmFtZXMhYDsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICB9LCAyZTMpOwogICAgICAgIH0pOwogICAgICB9OwogICAgICBjb25zdCBzZWFyY2hJY29ucyA9IChldmVudCkgPT4gewogICAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWUudG9Mb3dlckNhc2UoKS50cmltKCk7CiAgICAgICAgY29uc3QgZGVtb0NvbnRhaW5lciA9IGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZGVtb0NvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRhaW5lcnMgPSBkZW1vQ29udGFpbmVyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyIik7CiAgICAgICAgY29udGFpbmVycy5mb3JFYWNoKChjb250YWluZXIpID0+IHsKICAgICAgICAgIGNvbnN0IGljb25OYW1lID0gY29udGFpbmVyLmdldEF0dHJpYnV0ZSgiZGF0YS1uYW1lIik7CiAgICAgICAgICBpZiAoc2VhcmNoVGVybSA9PT0gIiIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5yZW1vdmUoImhpZGRlbiIpOwogICAgICAgICAgfSBlbHNlIGlmIChpY29uTmFtZSAmJiBpY29uTmFtZS5pbmNsdWRlcyhzZWFyY2hUZXJtKSkgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIik7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb250YWluZXIuY2xhc3NMaXN0LmFkZCgiaGlkZGVuIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZGVtb0NvbnRhaW5lci5xdWVyeVNlbGVjdG9yQWxsKCIuc2VjdGlvbi1jb250YWluZXIiKS5mb3JFYWNoKChzZWN0aW9uKSA9PiB7CiAgICAgICAgICBjb25zdCB2aXNpYmxlSWNvbnMgPSBzZWN0aW9uLnF1ZXJ5U2VsZWN0b3JBbGwoIi5pY29uQ29udGFpbmVyOm5vdCguaGlkZGVuKSIpLmxlbmd0aDsKICAgICAgICAgIGNvbnN0IGNvdW50RWxlbWVudCA9IHNlY3Rpb24ucXVlcnlTZWxlY3RvcigiLmljb24tY291bnQiKTsKICAgICAgICAgIGlmIChjb3VudEVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgdG90YWxJY29uc0NvdW50ID0gc2VjdGlvbi5jbGFzc0xpc3QuY29udGFpbnMoImZhLXNlY3Rpb24iKSA/IGZhSWNvbnMzLmxlbmd0aCA6IGx1Y2lkZUljb25zTGlzdC5sZW5ndGg7CiAgICAgICAgICAgIGNvdW50RWxlbWVudC50ZXh0Q29udGVudCA9IHZpc2libGVJY29ucyA9PT0gdG90YWxJY29uc0NvdW50ID8gYCR7dG90YWxJY29uc0NvdW50fSBpY29uc2AgOiBgJHt2aXNpYmxlSWNvbnN9IG9mICR7dG90YWxJY29uc0NvdW50fSBpY29uc2A7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIGNvbnN0IGNvcHlJY29uTmFtZSA9IChpY29uTmFtZVRvQ29weSwgdHlwZTUpID0+IHsKICAgICAgICBjb25zdCB0ZXh0VG9Db3B5ID0gYCR7dHlwZTV9OiR7aWNvbk5hbWVUb0NvcHl9YDsKICAgICAgICBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0ZXh0VG9Db3B5KS50aGVuKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRFdmVudCA9IHdpbmRvdy5ldmVudDsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRUYXJnZXQgPSBjdXJyZW50RXZlbnQuY3VycmVudFRhcmdldDsKICAgICAgICAgIGNvbnN0IHRvb2x0aXAgPSBjdXJyZW50VGFyZ2V0LnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRvb2x0aXAiKTsKICAgICAgICAgIGlmICh0b29sdGlwKSB7CiAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIHRvb2x0aXAudGV4dENvbnRlbnQgPSAiQ2xpY2sgdG8gY29weSI7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH07CiAgICAgIHJldHVybiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIGJhY2tncm91bmQ6ICMxMTExMTE7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGZvbnQtc2l6ZTogMzBweDsKICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgUm9ib3RvLCBPeHlnZW4tU2FucywgVWJ1bnR1LCBDYW50YXJlbGwsICJIZWx2ZXRpY2EgTmV1ZSIsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5zZWFyY2gtY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGdhcDogMTBweDsKICAgIH0KICAgIAogICAgI2ljb25TZWFyY2ggewogICAgICBmbGV4OiAxOwogICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIGNvbG9yOiAjZmZmOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgfQogICAgCiAgICAjaWNvblNlYXJjaDpmb2N1cyB7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIGJvcmRlci1jb2xvcjogI2U0MDAyYjsKICAgIH0KICAgIAogICAgLmNvcHktYWxsLWJ1dHRvbiB7CiAgICAgIHBhZGRpbmc6IDEycHggMjBweDsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgY29sb3I6ICNmZmY7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246aG92ZXIgewogICAgICBiYWNrZ3JvdW5kOiAjYzQwMDFiOwogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTFweCk7CiAgICB9CiAgICAKICAgIC5jb3B5LWFsbC1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgfQogICAgCiAgICBkZWVzLWljb24gewogICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgIH0KCiAgICAuaWNvbkNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmc6IDIwcHggMTZweCAwcHggMTZweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzMzMzsKICAgICAgbWFyZ2luLXJpZ2h0OiAxMHB4OwogICAgICBtYXJnaW4tYm90dG9tOiAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4yczsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CiAgICAKICAgIC5pY29uQ29udGFpbmVyOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogIzIyMjsKICAgIH0KCiAgICAuaWNvbk5hbWUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgY29sb3I6ICNjY2M7CiAgICAgIGJhY2tncm91bmQ6ICMzMzMzMzM7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBtYXJnaW4tbGVmdDogLTE2cHg7CiAgICAgIG1hcmdpbi1yaWdodDogLTE2cHg7CiAgICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICBtYXgtd2lkdGg6IDEyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAwIDAgNHB4IDRweDsKICAgIH0KCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICBtYXJnaW46IDIwcHggMDsKICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzMzMzOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICB9CiAgICAKICAgIC5hcGktbm90ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICNlNDAwMmI7CiAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlNDAwMmI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogcmdiYSgyMjgsIDAsIDQzLCAwLjEpOwogICAgfQogICAgCiAgICAuaWNvbi1jb3VudCB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICM4ODg7CiAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgIGJhY2tncm91bmQ6ICMyMjI7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAyMHB4OwogICAgfQogICAgCiAgICAuaWNvbnMtZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBtYXJnaW4tYm90dG9tOiAzMHB4OwogICAgfQogICAgCiAgICAuY29weS10b29sdGlwIHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICBjb2xvcjogd2hpdGU7CiAgICAgIHBhZGRpbmc6IDVweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgdG9wOiAtMzBweDsKICAgICAgb3BhY2l0eTogMDsKICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjNzOwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIH0KICAgIAogICAgLmljb25Db250YWluZXI6aG92ZXIgLmNvcHktdG9vbHRpcCB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLmljb25Db250YWluZXI6aG92ZXIgZGVlcy1pY29uIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjEpOwogICAgfQogICAgCiAgICAuaGlkZGVuIHsKICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtb0NvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtY29udGFpbmVyIj4KICAgICAgPGlucHV0IHR5cGU9InRleHQiIGlkPSJpY29uU2VhcmNoIiBwbGFjZWhvbGRlcj0iU2VhcmNoIGljb25zLi4uIiBAaW5wdXQ9JHtzZWFyY2hJY29uc30+CiAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYWxsLWJ1dHRvbiIgQGNsaWNrPSR7Y29weUFsbEljb25OYW1lc30+8J+TiyBDb3B5IEFsbCBJY29uIE5hbWVzPC9idXR0b24+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iYXBpLW5vdGUiPgogICAgICBOZXcgQVBJOiBVc2UgPGNvZGU+aWNvbj0iZmE6aWNvbk5hbWUiPC9jb2RlPiBvciA8Y29kZT5pY29uPSJsdWNpZGU6aWNvbk5hbWUiPC9jb2RlPiBpbnN0ZWFkIG9mIDxjb2RlPmljb25GQTwvY29kZT4uIAogICAgICBDbGljayBhbnkgaWNvbiB0byBjb3B5IGl0cyBuZXcgZm9ybWF0IHRvIGNsaXBib2FyZC4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWNvbnRhaW5lciBmYS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgRm9udEF3ZXNvbWUgSWNvbnMKICAgICAgICA8c3BhbiBjbGFzcz0iaWNvbi1jb3VudCI+JHtmYUljb25zMy5sZW5ndGh9IGljb25zPC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaWNvbnMtZ3JpZCI+CiAgICAgICAgJHtmYUljb25zMy5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGZhOiR7aWNvbk5hbWV9YDsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaWNvbkNvbnRhaW5lciBmYS1pY29uIiBkYXRhLW5hbWU9JHtpY29uTmFtZS50b0xvd2VyQ2FzZSgpfSBAY2xpY2s9JHsoKSA9PiBjb3B5SWNvbk5hbWUoaWNvbk5hbWUsICJmYSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+ZmE6JHtpY29uTmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb3B5LXRvb2x0aXAiPkNsaWNrIHRvIGNvcHk8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tY29udGFpbmVyIGx1Y2lkZS1zZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+CiAgICAgICAgTHVjaWRlIEljb25zCiAgICAgICAgPHNwYW4gY2xhc3M9Imljb24tY291bnQiPiR7bHVjaWRlSWNvbnNMaXN0Lmxlbmd0aH0gaWNvbnM8L3NwYW4+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJpY29ucy1ncmlkIj4KICAgICAgICAke2x1Y2lkZUljb25zTGlzdC5tYXAoKGljb25OYW1lKSA9PiB7CiAgICAgICAgY29uc3QgcHJlZml4ZWROYW1lID0gYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imljb25Db250YWluZXIgbHVjaWRlLWljb24iIGRhdGEtbmFtZT0ke2ljb25OYW1lLnRvTG93ZXJDYXNlKCl9IEBjbGljaz0keygpID0+IGNvcHlJY29uTmFtZShpY29uTmFtZSwgImx1Y2lkZSIpfT4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHtwcmVmaXhlZE5hbWV9IGljb25TaXplPSIyNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uTmFtZSI+bHVjaWRlOiR7aWNvbk5hbWV9PC9kaXY+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10b29sdGlwIj5DbGljayB0byBjb3B5PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L2Rpdj4KICBgOwogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWljb24vZGVlcy1pY29uLmpzCmZ1bmN0aW9uIGxpbWl0Q2FjaGVTaXplKCkgewogIGlmIChpY29uQ2FjaGUuc2l6ZSA+IE1BWF9DQUNIRV9TSVpFKSB7CiAgICBjb25zdCBrZXlzVG9EZWxldGUgPSBBcnJheS5mcm9tKGljb25DYWNoZS5rZXlzKCkpLnNsaWNlKDAsIE1BWF9DQUNIRV9TSVpFIC8gNSk7CiAgICBrZXlzVG9EZWxldGUuZm9yRWFjaCgoa2V5MikgPT4gaWNvbkNhY2hlLmRlbGV0ZShrZXkyKSk7CiAgfQp9CnZhciBfX2VzRGVjb3JhdGU0LCBfX3J1bkluaXRpYWxpemVyczUsIGZhSWNvbnMyLCBpY29uczQsIGljb25DYWNoZSwgTUFYX0NBQ0hFX1NJWkUsIERlZXNJY29uOwp2YXIgaW5pdF9kZWVzX2ljb24gPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2RlZXMtaWNvbi5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZm9udGF3ZXNvbWVfc3ZnX2NvcmUoKTsKICAgIGluaXRfZnJlZV9icmFuZHNfc3ZnX2ljb25zKCk7CiAgICBpbml0X2ZyZWVfcmVndWxhcl9zdmdfaWNvbnMoKTsKICAgIGluaXRfZnJlZV9zb2xpZF9zdmdfaWNvbnMoKTsKICAgIGluaXRfZGVlc19pY29uX2RlbW8oKTsKICAgIGluaXRfbHVjaWRlKCk7CiAgICBpbml0X2x1Y2lkZSgpOwogICAgX19lc0RlY29yYXRlNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgICAgIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgICAgICByZXR1cm4gZjc7CiAgICAgIH0KICAgICAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICAgICAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogICAgICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICAgICAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgICAgIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgdmFyIGNvbnRleHQyID0ge307CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICAgICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgICAgICB9OwogICAgICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICAgICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogICAgICBkb25lID0gdHJ1ZTsKICAgIH07CiAgICBfX3J1bkluaXRpYWxpemVyczUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIGZhSWNvbnMyID0gewogICAgICAvLyBub3JtYWwKICAgICAgYXJyb3dSaWdodDogZmFBcnJvd1JpZ2h0LAogICAgICBhcnJvd1VwUmlnaHRGcm9tU3F1YXJlOiBmYUFycm93VXBSaWdodEZyb21TcXVhcmUsCiAgICAgIGJlbGw6IGZhQmVsbDIsCiAgICAgIGJ1ZzogZmFCdWcsCiAgICAgIGJ1aWxkaW5nOiBmYUJ1aWxkaW5nMiwKICAgICAgY2FyZXRMZWZ0OiBmYUNhcmV0TGVmdCwKICAgICAgY2FyZXRSaWdodDogZmFDYXJldFJpZ2h0LAogICAgICBjaGVjazogZmFDaGVjaywKICAgICAgY2lyY2xlSW5mbzogZmFDaXJjbGVJbmZvLAogICAgICBjaXJjbGVDaGVjazogZmFDaXJjbGVDaGVjaywKICAgICAgY2lyY2xlQ2hlY2tTb2xpZDogZmFDaXJjbGVDaGVjazIsCiAgICAgIGNpcmNsZVhtYXJrOiBmYUNpcmNsZVhtYXJrLAogICAgICBjaXJjbGVYbWFya1NvbGlkOiBmYUNpcmNsZVhtYXJrMiwKICAgICAgY2xvY2tSb3RhdGVMZWZ0OiBmYUNsb2NrUm90YXRlTGVmdCwKICAgICAgY29weTogZmFDb3B5LAogICAgICBjb3B5U29saWQ6IGZhQ29weTIsCiAgICAgIGRlc2t0b3A6IGZhRGVza3RvcCwKICAgICAgZXllOiBmYUV5ZTIsCiAgICAgIGV5ZVNsYXNoOiBmYUV5ZVNsYXNoMiwKICAgICAgZmlsZUludm9pY2U6IGZhRmlsZUludm9pY2UsCiAgICAgIGZpbGVJbnZvaWNlRG9sbGVyOiBmYUZpbGVJbnZvaWNlRG9sbGFyLAogICAgICBnZWFyOiBmYUdlYXIsCiAgICAgIGdyaXA6IGZhR3JpcCwKICAgICAgbWFnbmlmeWluZ0dsYXNzOiBmYU1hZ25pZnlpbmdHbGFzcywKICAgICAgbWVzc2FnZTogZmFNZXNzYWdlLAogICAgICBtZXNzYWdlU29saWQ6IGZhTWVzc2FnZTIsCiAgICAgIG1vbmV5Q2hlY2tEb2xsYXI6IGZhTW9uZXlDaGVja0RvbGxhciwKICAgICAgbXVnSG90OiBmYU11Z0hvdCwKICAgICAgbWludXM6IGZhTWludXMsCiAgICAgIG5ldHdvcmtXaXJlZDogZmFOZXR3b3JrV2lyZWQsCiAgICAgIHBhcGVyY2xpcDogZmFQYXBlcmNsaXAsCiAgICAgIHBhc3RlOiBmYVBhc3RlLAogICAgICBwYXN0ZVNvbGlkOiBmYVBhc3RlMiwKICAgICAgcGVuVG9TcXVhcmU6IGZhUGVuVG9TcXVhcmUyLAogICAgICBwbHVzOiBmYVBsdXMsCiAgICAgIHJlY2VpcHQ6IGZhUmVjZWlwdCwKICAgICAgcnNzOiBmYVJzcywKICAgICAgc2hhcmU6IGZhU2hhcmUsCiAgICAgIHN1bjogZmFTdW4sCiAgICAgIHN1blNvbGlkOiBmYVN1bjIsCiAgICAgIHRlcm1pbmFsOiBmYVRlcm1pbmFsLAogICAgICB0cmFzaDogZmFUcmFzaCwKICAgICAgdHJhc2hTb2xpZDogZmFUcmFzaCwKICAgICAgdHJhc2hDYW46IGZhVHJhc2hDYW4sCiAgICAgIHRyYXNoQ2FuU29saWQ6IGZhVHJhc2hDYW4yLAogICAgICB1c2VyczogZmFVc2VycywKICAgICAgd2FsbGV0OiBmYVdhbGxldCwKICAgICAgeG1hcms6IGZhWG1hcmssCiAgICAgIC8vIGJyYW5kcwogICAgICBmYWNlYm9vazogZmFGYWNlYm9vaywKICAgICAgZ29vZ2xlOiBmYUdvb2dsZSwKICAgICAgaW5zdGFncmFtOiBmYUluc3RhZ3JhbSwKICAgICAgbGlua2VkaW46IGZhTGlua2VkaW4sCiAgICAgIG1lZGl1bTogZmFNZWRpdW0sCiAgICAgIHNsYWNrOiBmYVNsYWNrSGFzaCwKICAgICAgdGlrdG9rOiBmYVRpa3RvaywKICAgICAgdHdpdHRlcjogZmFUd2l0dGVyCiAgICB9OwogICAgaWNvbnM0ID0gewogICAgICBmYTogZmFJY29uczIKICAgIH07CiAgICBpY29uQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgTUFYX0NBQ0hFX1NJWkUgPSA1MDA7CiAgICBEZWVzSWNvbiA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWljb24iKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2ljb25GQV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2ljb25GQV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgICAgIGxldCBfaWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfaWNvblNpemVfZGVjb3JhdG9yczsKICAgICAgbGV0IF9pY29uU2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pY29uU2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NvbG9yX2RlY29yYXRvcnM7CiAgICAgIGxldCBfY29sb3JfaW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfY29sb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3N0cm9rZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3N0cm9rZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIHZhciBEZWVzSWNvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgICAgICBzdGF0aWMgewogICAgICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgICAgIF9pY29uRkFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICAgICAgY29udmVydGVyOiB7CiAgICAgICAgICAgICAgLy8gQ29udmVydCBhdHRyaWJ1dGUgc3RyaW5nIHRvIHByb3BlcnR5IChmb3IgcmVmbGVjdGVkIGF0dHJpYnV0ZXMpCiAgICAgICAgICAgICAgZnJvbUF0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyLAogICAgICAgICAgICAgIC8vIENvbnZlcnQgcHJvcGVydHkgdG8gYXR0cmlidXRlIChmb3IgcmVmbGVjdGlvbikKICAgICAgICAgICAgICB0b0F0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pY29uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgICAgICB0eXBlOiBTdHJpbmcsCiAgICAgICAgICAgIGNvbnZlcnRlcjogewogICAgICAgICAgICAgIGZyb21BdHRyaWJ1dGU6ICh2YWx1ZTIpID0+IHZhbHVlMiwKICAgICAgICAgICAgICB0b0F0dHJpYnV0ZTogKHZhbHVlMikgPT4gdmFsdWUyCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pXTsKICAgICAgICAgIF9pY29uU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9jb2xvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgICAgIF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2ljb25GQV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpY29uRkEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImljb25GQSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uRkEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pY29uRkEgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25GQV9pbml0aWFsaXplcnMsIF9pY29uRkFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfaWNvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmljb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pY29uX2luaXRpYWxpemVycywgX2ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNCh0aGlzLCBudWxsLCBfaWNvblNpemVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImljb25TaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmljb25TaXplLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouaWNvblNpemUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25TaXplX2luaXRpYWxpemVycywgX2ljb25TaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTQodGhpcywgbnVsbCwgX2NvbG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2xvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmNvbG9yID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xvcl9pbml0aWFsaXplcnMsIF9jb2xvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU0KHRoaXMsIG51bGwsIF9zdHJva2VXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdHJva2VXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3Ryb2tlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3Ryb2tlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zdHJva2VXaWR0aCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3Ryb2tlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfc3Ryb2tlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBEZWVzSWNvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI7CiAgICAgICAgI2ljb25GQV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9pY29uRkFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgICAgIC8qKgogICAgICAgICAqIEBkZXByZWNhdGVkIFVzZSB0aGUgYGljb25gIHByb3BlcnR5IGluc3RlYWQgd2l0aCBmb3JtYXQgImZhOmljb25OYW1lIiBvciAibHVjaWRlOmljb25OYW1lIgogICAgICAgICAqLwogICAgICAgIGdldCBpY29uRkEoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jaWNvbkZBX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uRkEodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNpY29uRkFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25GQV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvbl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgICAgIC8qKgogICAgICAgICAqIFRoZSBwcmVmZXJyZWQgaWNvbiBwcm9wZXJ0eS4gVXNlIGZvcm1hdCAiZmE6aWNvbk5hbWUiIG9yICJsdWNpZGU6aWNvbk5hbWUiCiAgICAgICAgICogRXhhbXBsZXM6ICJmYTpjaGVjayIsICJsdWNpZGU6bWVudSIKICAgICAgICAgKi8KICAgICAgICBnZXQgaWNvbigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjaWNvblNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2ljb25TaXplX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAgICAgZ2V0IGljb25TaXplKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBpY29uU2l6ZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2ljb25TaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNjb2xvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfaWNvblNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUodGhpcywgX2NvbG9yX2luaXRpYWxpemVycywgImN1cnJlbnRDb2xvciIpKTsKICAgICAgICBnZXQgY29sb3IoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY29sb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGNvbG9yKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jY29sb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9jb2xvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNSh0aGlzLCBfc3Ryb2tlV2lkdGhfaW5pdGlhbGl6ZXJzLCAyKSk7CiAgICAgICAgZ2V0IHN0cm9rZVdpZHRoKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzdHJva2VXaWR0aCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3N0cm9rZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIEZvciB0cmFja2luZyB3aGVuIHdlIG5lZWQgdG8gcmUtcmVuZGVyCiAgICAgICAgbGFzdEljb24gPSAoX19ydW5Jbml0aWFsaXplcnM1KHRoaXMsIF9zdHJva2VXaWR0aF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGxhc3RJY29uU2l6ZSA9IG51bGw7CiAgICAgICAgbGFzdENvbG9yID0gbnVsbDsKICAgICAgICBsYXN0U3Ryb2tlV2lkdGggPSBudWxsOwogICAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICAgICAgc3VwZXIoKTsKICAgICAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldHMgdGhlIGVmZmVjdGl2ZSBpY29uIHZhbHVlLCBzdXBwb3J0aW5nIGJvdGggdGhlIG5ldyBgaWNvbmAgcHJvcGVydHkKICAgICAgICAgKiBhbmQgdGhlIGxlZ2FjeSBgaWNvbkZBYCBwcm9wZXJ0eSBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eS4KICAgICAgICAgKiBQcmVmZXJzIGBpY29uYCBpZiBib3RoIGFyZSBzZXQuCiAgICAgICAgICovCiAgICAgICAgZ2V0RWZmZWN0aXZlSWNvbigpIHsKICAgICAgICAgIGlmICh0aGlzLmljb24pIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLmljb25GQSkgewogICAgICAgICAgICBpZiAodGhpcy5pY29uRkEuc3RhcnRzV2l0aCgibHVjaWRlOiIpKSB7CiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuaWNvbkZBOwogICAgICAgICAgICB9CiAgICAgICAgICAgIHJldHVybiBgZmE6JHt0aGlzLmljb25GQX1gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFBhcnNlcyBhbiBpY29uIHN0cmluZyBpbnRvIGl0cyB0eXBlIGFuZCBuYW1lIHBhcnRzCiAgICAgICAgICogQHBhcmFtIGljb25TdHIgVGhlIGljb24gc3RyaW5nIGluIGZvcm1hdCAidHlwZTpuYW1lIgogICAgICAgICAqIEByZXR1cm5zIE9iamVjdCB3aXRoIHR5cGUgYW5kIG5hbWUgcHJvcGVydGllcwogICAgICAgICAqLwogICAgICAgIHBhcnNlSWNvblN0cmluZyhpY29uU3RyKSB7CiAgICAgICAgICBjb25zdCBsb3dlclN0ciA9IGljb25TdHIudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChsb3dlclN0ci5zdGFydHNXaXRoKCJmYToiKSkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJmYSIsCiAgICAgICAgICAgICAgbmFtZTogaWNvblN0ci5zdWJzdHJpbmcoMykKICAgICAgICAgICAgICAvLyBSZW1vdmUgJ2ZhOicgcHJlZml4CiAgICAgICAgICAgIH07CiAgICAgICAgICB9IGVsc2UgaWYgKGxvd2VyU3RyLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSkgewogICAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAgIHR5cGU6ICJsdWNpZGUiLAogICAgICAgICAgICAgIG5hbWU6IGljb25TdHIuc3Vic3RyaW5nKDcpCiAgICAgICAgICAgICAgLy8gUmVtb3ZlICdsdWNpZGU6JyBwcmVmaXgKICAgICAgICAgICAgfTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgdHlwZTogImx1Y2lkZSIsCiAgICAgICAgICAgICAgbmFtZTogaWNvblN0cgogICAgICAgICAgICB9OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZW5kZXJMdWNpZGVJY29uKGljb25OYW1lKSB7CiAgICAgICAgICBjb25zdCBjYWNoZUtleSA9IGBsdWNpZGU6JHtpY29uTmFtZX06JHt0aGlzLmljb25TaXplfToke3RoaXMuY29sb3J9OiR7dGhpcy5zdHJva2VXaWR0aH1gOwogICAgICAgICAgaWYgKGljb25DYWNoZS5oYXMoY2FjaGVLZXkpKSB7CiAgICAgICAgICAgIHJldHVybiBpY29uQ2FjaGUuZ2V0KGNhY2hlS2V5KSB8fCAiIjsKICAgICAgICAgIH0KICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IHBhc2NhbENhc2VOYW1lID0gaWNvbk5hbWUuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkgKyBpY29uTmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgaWYgKCFsdWNpZGVfZXhwb3J0c1twYXNjYWxDYXNlTmFtZV0pIHsKICAgICAgICAgICAgICBjb25zb2xlLndhcm4oYEx1Y2lkZSBpY29uICcke3Bhc2NhbENhc2VOYW1lfScgbm90IGZvdW5kIGluIGx1Y2lkZUljb25zIG9iamVjdGApOwogICAgICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBzdmdFbGVtZW50ID0gY3JlYXRlRWxlbWVudDIobHVjaWRlX2V4cG9ydHNbcGFzY2FsQ2FzZU5hbWVdLCB7CiAgICAgICAgICAgICAgY29sb3I6IHRoaXMuY29sb3IsCiAgICAgICAgICAgICAgc2l6ZTogdGhpcy5pY29uU2l6ZSwKICAgICAgICAgICAgICBzdHJva2VXaWR0aDogdGhpcy5zdHJva2VXaWR0aAogICAgICAgICAgICB9KTsKICAgICAgICAgICAgaWYgKCFzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBjcmVhdGVFbGVtZW50IHJldHVybmVkIGVtcHR5IHJlc3VsdCBmb3IgJHtwYXNjYWxDYXNlTmFtZX1gKTsKICAgICAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gc3ZnRWxlbWVudC5vdXRlckhUTUw7CiAgICAgICAgICAgIGljb25DYWNoZS5zZXQoY2FjaGVLZXksIHJlc3VsdCk7CiAgICAgICAgICAgIGxpbWl0Q2FjaGVTaXplKCk7CiAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgTHVjaWRlIGljb24gJHtpY29uTmFtZX06YCwgZXJyb3IpOwogICAgICAgICAgICByZXR1cm4gYDxzdmcgeG1sbnM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIiB3aWR0aD0iJHt0aGlzLmljb25TaXplfSIgaGVpZ2h0PSIke3RoaXMuaWNvblNpemV9IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iJHt0aGlzLmNvbG9yfSIgc3Ryb2tlLXdpZHRoPSIke3RoaXMuc3Ryb2tlV2lkdGh9IiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiPgogICAgICAgIDx0ZXh0IHg9IjUwJSIgeT0iNTAlIiBmb250LXNpemU9IjYiIHRleHQtYW5jaG9yPSJtaWRkbGUiIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiIGZpbGw9IiR7dGhpcy5jb2xvcn0iPiR7aWNvbk5hbWV9PC90ZXh0PgogICAgICA8L3N2Zz5gOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgfQoKICAgICAgLyogSW1wcm92ZSByZW5kZXJpbmcgcGVyZm9ybWFuY2UgKi8KICAgICAgI2ljb25Db250YWluZXIgc3ZnIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsgLyogSGVscHMgd2l0aCBhbmltYXRpb25zICovCiAgICAgICAgY29udGFpbjogc3RyaWN0OyAvKiBQZXJmb3JtYW5jZSBvcHRpbWl6YXRpb24gKi8KICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgICNpY29uQ29udGFpbmVyIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuaWNvblNpemV9cHg7CiAgICAgICAgICBoZWlnaHQ6ICR7dGhpcy5pY29uU2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgaWQ9Imljb25Db250YWluZXIiPjwvZGl2PgogICAgYDsKICAgICAgICB9CiAgICAgICAgdXBkYXRlZCgpIHsKICAgICAgICAgIGlmICghdGhpcy5pY29uU2l6ZSkgewogICAgICAgICAgICB0aGlzLmljb25TaXplID0gcGFyc2VJbnQoZ2xvYmFsVGhpcy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmZvbnRTaXplLnJlcGxhY2UoL1xEL2csICIiKSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBlZmZlY3RpdmVJY29uID0gdGhpcy5nZXRFZmZlY3RpdmVJY29uKCk7CiAgICAgICAgICBpZiAodGhpcy5sYXN0SWNvbiA9PT0gZWZmZWN0aXZlSWNvbiAmJiB0aGlzLmxhc3RJY29uU2l6ZSA9PT0gdGhpcy5pY29uU2l6ZSAmJiB0aGlzLmxhc3RDb2xvciA9PT0gdGhpcy5jb2xvciAmJiB0aGlzLmxhc3RTdHJva2VXaWR0aCA9PT0gdGhpcy5zdHJva2VXaWR0aCkgewogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLmxhc3RJY29uID0gZWZmZWN0aXZlSWNvbjsKICAgICAgICAgIHRoaXMubGFzdEljb25TaXplID0gdGhpcy5pY29uU2l6ZTsKICAgICAgICAgIHRoaXMubGFzdENvbG9yID0gdGhpcy5jb2xvcjsKICAgICAgICAgIHRoaXMubGFzdFN0cm9rZVdpZHRoID0gdGhpcy5zdHJva2VXaWR0aDsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiI2ljb25Db250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyIHx8ICFlZmZlY3RpdmVJY29uKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBjb25zdCB7IHR5cGU6IHR5cGU1LCBuYW1lIH0gPSB0aGlzLnBhcnNlSWNvblN0cmluZyhlZmZlY3RpdmVJY29uKTsKICAgICAgICAgICAgaWYgKHR5cGU1ID09PSAibHVjaWRlIikgewogICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgICAgY29uc3QgcGFzY2FsQ2FzZU5hbWUgPSBuYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpICsgbmFtZS5zbGljZSgxKTsKICAgICAgICAgICAgICAgIGlmIChsdWNpZGVfZXhwb3J0c1twYXNjYWxDYXNlTmFtZV0pIHsKICAgICAgICAgICAgICAgICAgY29uc3Qgc3ZnRWxlbWVudCA9IGNyZWF0ZUVsZW1lbnQyKGx1Y2lkZV9leHBvcnRzW3Bhc2NhbENhc2VOYW1lXSwgewogICAgICAgICAgICAgICAgICAgIGNvbG9yOiB0aGlzLmNvbG9yLAogICAgICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuaWNvblNpemUsCiAgICAgICAgICAgICAgICAgICAgc3Ryb2tlV2lkdGg6IHRoaXMuc3Ryb2tlV2lkdGgKICAgICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICAgIGlmIChzdmdFbGVtZW50KSB7CiAgICAgICAgICAgICAgICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHN2Z0VsZW1lbnQpOwogICAgICAgICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGBDb3VsZCBub3QgY3JlYXRlIGVsZW1lbnQgZm9yICR7cGFzY2FsQ2FzZU5hbWV9YCk7CiAgICAgICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoYEVycm9yIHJlbmRlcmluZyBMdWNpZGUgaWNvbjpgLCBlcnJvcik7CiAgICAgICAgICAgICAgICBjb25zdCBpY29uSHRtbCA9IHRoaXMucmVuZGVyTHVjaWRlSWNvbihuYW1lKTsKICAgICAgICAgICAgICAgIGlmIChpY29uSHRtbCkgewogICAgICAgICAgICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gaWNvbkh0bWw7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIGNvbnN0IGZhSWNvbiA9IGljb25zNC5mYVtuYW1lXTsKICAgICAgICAgICAgICBpZiAoZmFJY29uKSB7CiAgICAgICAgICAgICAgICBjb25zdCBpY29uSHRtbCA9IGljb24yKGZhSWNvbikuaHRtbFswXTsKICAgICAgICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSBpY29uSHRtbDsKICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgY29uc29sZS53YXJuKGBGb250QXdlc29tZSBpY29uIG5vdCBmb3VuZDogJHtuYW1lfWApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihgRXJyb3IgdXBkYXRpbmcgaWNvbiAke2VmZmVjdGl2ZUljb259OmAsIGVycm9yKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gQ2xlYW4gdXAgcmVzb3VyY2VzIHdoZW4gZWxlbWVudCBpcyByZW1vdmVkCiAgICAgICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgICAgdGhpcy5sYXN0SWNvbiA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RJY29uU2l6ZSA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RDb2xvciA9IG51bGw7CiAgICAgICAgICB0aGlzLmxhc3RTdHJva2VXaWR0aCA9IG51bGw7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmV0dXJuIERlZXNJY29uMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL3ZlcnNpb25zLmpzCnZhciBDRE5fVkVSU0lPTlMsIENETl9CQVNFOwp2YXIgaW5pdF92ZXJzaW9ucyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy92ZXJzaW9ucy5qcyIoKSB7CiAgICBDRE5fVkVSU0lPTlMgPSB7CiAgICAgIHh0ZXJtOiAiNS4zLjAiLAogICAgICB4dGVybUFkZG9uRml0OiAiMC44LjAiLAogICAgICB4dGVybUFkZG9uU2VhcmNoOiAiMC4xMy4wIiwKICAgICAgaGlnaGxpZ2h0SnM6ICIxMS4xMS4xIiwKICAgICAgYXBleGNoYXJ0czogIjUuMy42IiwKICAgICAgdGlwdGFwOiAiMi4yMy4wIiwKICAgICAgZm9udGF3ZXNvbWU6ICI3LjEuMCIKICAgIH07CiAgICBDRE5fQkFTRSA9ICJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9zZXJ2aWNlcy9EZWVzU2VydmljZUxpYkxvYWRlci5qcwp2YXIgRGVlc1NlcnZpY2VMaWJMb2FkZXI7CnZhciBpbml0X0RlZXNTZXJ2aWNlTGliTG9hZGVyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL0RlZXNTZXJ2aWNlTGliTG9hZGVyLmpzIigpIHsKICAgIGluaXRfdmVyc2lvbnMoKTsKICAgIERlZXNTZXJ2aWNlTGliTG9hZGVyID0gY2xhc3MgX0RlZXNTZXJ2aWNlTGliTG9hZGVyIHsKICAgICAgc3RhdGljIGluc3RhbmNlOwogICAgICAvLyBDYWNoZWQgbGlicmFyeSByZWZlcmVuY2VzCiAgICAgIHh0ZXJtTGliID0gbnVsbDsKICAgICAgeHRlcm1GaXRBZGRvbkxpYiA9IG51bGw7CiAgICAgIHh0ZXJtU2VhcmNoQWRkb25MaWIgPSBudWxsOwogICAgICBoaWdobGlnaHRKc0xpYiA9IG51bGw7CiAgICAgIGFwZXhDaGFydHNMaWIgPSBudWxsOwogICAgICB0aXB0YXBMaWIgPSBudWxsOwogICAgICAvLyBMb2FkaW5nIHByb21pc2VzIHRvIHByZXZlbnQgZHVwbGljYXRlIGNvbmN1cnJlbnQgbG9hZHMKICAgICAgeHRlcm1Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIHh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICBhcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2UgPSBudWxsOwogICAgICB0aXB0YXBMb2FkaW5nUHJvbWlzZSA9IG51bGw7CiAgICAgIGNvbnN0cnVjdG9yKCkgewogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGhlIHNpbmdsZXRvbiBpbnN0YW5jZSBvZiBEZWVzU2VydmljZUxpYkxvYWRlcgogICAgICAgKi8KICAgICAgc3RhdGljIGdldEluc3RhbmNlKCkgewogICAgICAgIGlmICghX0RlZXNTZXJ2aWNlTGliTG9hZGVyLmluc3RhbmNlKSB7CiAgICAgICAgICBfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2UgPSBuZXcgX0RlZXNTZXJ2aWNlTGliTG9hZGVyKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybiBfRGVlc1NlcnZpY2VMaWJMb2FkZXIuaW5zdGFuY2U7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIExvYWQgeHRlcm0gdGVybWluYWwgZW11bGF0b3IgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8geHRlcm0gbW9kdWxlIHdpdGggVGVybWluYWwgY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybSgpIHsKICAgICAgICBpZiAodGhpcy54dGVybUxpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm1AJHtDRE5fVkVSU0lPTlMueHRlcm19Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgYXdhaXQgdGhpcy5pbmplY3RYdGVybVN0eWxlcygpOwogICAgICAgICAgdGhpcy54dGVybUxpYiA9IHsKICAgICAgICAgICAgVGVybWluYWw6IG1vZHVsZS5UZXJtaW5hbAogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybS1hZGRvbi1maXQgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gRml0QWRkb24gY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybUZpdEFkZG9uKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtRml0QWRkb25MaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm0tYWRkb24tZml0QCR7Q0ROX1ZFUlNJT05TLnh0ZXJtQWRkb25GaXR9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uTGliID0gewogICAgICAgICAgICBGaXRBZGRvbjogbW9kdWxlLkZpdEFkZG9uCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1GaXRBZGRvbkxpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnh0ZXJtRml0QWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCB4dGVybS1hZGRvbi1zZWFyY2ggZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gU2VhcmNoQWRkb24gY2xhc3MKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRYdGVybVNlYXJjaEFkZG9uKCkgewogICAgICAgIGlmICh0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIpIHsKICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSkgewogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxvYWRpbmdQcm9taXNlOwogICAgICAgIH0KICAgICAgICB0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0veHRlcm0tYWRkb24tc2VhcmNoQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtQWRkb25TZWFyY2h9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy54dGVybVNlYXJjaEFkZG9uTGliID0gewogICAgICAgICAgICBTZWFyY2hBZGRvbjogbW9kdWxlLlNlYXJjaEFkZG9uCiAgICAgICAgICB9OwogICAgICAgICAgcmV0dXJuIHRoaXMueHRlcm1TZWFyY2hBZGRvbkxpYjsKICAgICAgICB9KSgpOwogICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25Mb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogSW5qZWN0IHh0ZXJtIENTUyBzdHlsZXMgaW50byB0aGUgZG9jdW1lbnQgaGVhZAogICAgICAgKi8KICAgICAgYXN5bmMgaW5qZWN0WHRlcm1TdHlsZXMoKSB7CiAgICAgICAgY29uc3Qgc3R5bGVJZCA9ICJ4dGVybS1jZG4tc3R5bGVzIjsKICAgICAgICBpZiAoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKGNzc1VybCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IHJlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgICAgc3R5bGUuaWQgPSBzdHlsZUlkOwogICAgICAgIHN0eWxlLnRleHRDb250ZW50ID0gY3NzVGV4dDsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHN0eWxlKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBoaWdobGlnaHQuanMgc3ludGF4IGhpZ2hsaWdodGVyIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIGhpZ2hsaWdodC5qcyBBUEkKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRIaWdobGlnaHRKcygpIHsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRKc0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2UpIHsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBgJHtDRE5fQkFTRX0vaGlnaGxpZ2h0LmpzQCR7Q0ROX1ZFUlNJT05TLmhpZ2hsaWdodEpzfS8rZXNtYDsKICAgICAgICAgIGNvbnN0IG1vZHVsZSA9IGF3YWl0IGltcG9ydCgKICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgIHVybAogICAgICAgICAgKTsKICAgICAgICAgIHRoaXMuaGlnaGxpZ2h0SnNMaWIgPSBtb2R1bGUuZGVmYXVsdDsKICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuaGlnaGxpZ2h0SnNMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogTG9hZCBBcGV4Q2hhcnRzIGNoYXJ0aW5nIGxpYnJhcnkgZnJvbSBDRE4KICAgICAgICogQHJldHVybnMgUHJvbWlzZSByZXNvbHZpbmcgdG8gQXBleENoYXJ0cyBjb25zdHJ1Y3RvcgogICAgICAgKi8KICAgICAgYXN5bmMgbG9hZEFwZXhDaGFydHMoKSB7CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xpYikgewogICAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xpYjsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTG9hZGluZ1Byb21pc2U7CiAgICAgICAgfQogICAgICAgIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlID0gKGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IHVybCA9IGAke0NETl9CQVNFfS9hcGV4Y2hhcnRzQCR7Q0ROX1ZFUlNJT05TLmFwZXhjaGFydHN9Lytlc21gOwogICAgICAgICAgY29uc3QgbW9kdWxlID0gYXdhaXQgaW1wb3J0KAogICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgdXJsCiAgICAgICAgICApOwogICAgICAgICAgdGhpcy5hcGV4Q2hhcnRzTGliID0gbW9kdWxlLmRlZmF1bHQ7CiAgICAgICAgICByZXR1cm4gdGhpcy5hcGV4Q2hhcnRzTGliOwogICAgICAgIH0pKCk7CiAgICAgICAgcmV0dXJuIHRoaXMuYXBleENoYXJ0c0xvYWRpbmdQcm9taXNlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBMb2FkIFRpcHRhcCByaWNoIHRleHQgZWRpdG9yIGFuZCBleHRlbnNpb25zIGZyb20gQ0ROCiAgICAgICAqIEByZXR1cm5zIFByb21pc2UgcmVzb2x2aW5nIHRvIFRpcHRhcCBidW5kbGUgd2l0aCBFZGl0b3IgYW5kIGV4dGVuc2lvbnMKICAgICAgICovCiAgICAgIGFzeW5jIGxvYWRUaXB0YXAoKSB7CiAgICAgICAgaWYgKHRoaXMudGlwdGFwTGliKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLnRpcHRhcExvYWRpbmdQcm9taXNlKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB2ZXJzaW9uMiA9IENETl9WRVJTSU9OUy50aXB0YXA7CiAgICAgICAgICBjb25zdCBbY29yZU1vZHVsZSwgc3RhcnRlcktpdE1vZHVsZSwgdW5kZXJsaW5lTW9kdWxlLCB0ZXh0QWxpZ25Nb2R1bGUsIGxpbmtNb2R1bGUsIHR5cG9ncmFwaHlNb2R1bGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvY29yZUAke3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvc3RhcnRlci1raXRAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi11bmRlcmxpbmVAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKSwKICAgICAgICAgICAgaW1wb3J0KAogICAgICAgICAgICAgIC8qIEB2aXRlLWlnbm9yZSAqLwogICAgICAgICAgICAgIGAke0NETl9CQVNFfS9AdGlwdGFwL2V4dGVuc2lvbi10ZXh0LWFsaWduQCR7dmVyc2lvbjJ9Lytlc21gCiAgICAgICAgICAgICksCiAgICAgICAgICAgIGltcG9ydCgKICAgICAgICAgICAgICAvKiBAdml0ZS1pZ25vcmUgKi8KICAgICAgICAgICAgICBgJHtDRE5fQkFTRX0vQHRpcHRhcC9leHRlbnNpb24tbGlua0Ake3ZlcnNpb24yfS8rZXNtYAogICAgICAgICAgICApLAogICAgICAgICAgICBpbXBvcnQoCiAgICAgICAgICAgICAgLyogQHZpdGUtaWdub3JlICovCiAgICAgICAgICAgICAgYCR7Q0ROX0JBU0V9L0B0aXB0YXAvZXh0ZW5zaW9uLXR5cG9ncmFwaHlAJHt2ZXJzaW9uMn0vK2VzbWAKICAgICAgICAgICAgKQogICAgICAgICAgXSk7CiAgICAgICAgICB0aGlzLnRpcHRhcExpYiA9IHsKICAgICAgICAgICAgRWRpdG9yOiBjb3JlTW9kdWxlLkVkaXRvciwKICAgICAgICAgICAgU3RhcnRlcktpdDogc3RhcnRlcktpdE1vZHVsZS5kZWZhdWx0IHx8IHN0YXJ0ZXJLaXRNb2R1bGUuU3RhcnRlcktpdCwKICAgICAgICAgICAgVW5kZXJsaW5lOiB1bmRlcmxpbmVNb2R1bGUuZGVmYXVsdCB8fCB1bmRlcmxpbmVNb2R1bGUuVW5kZXJsaW5lLAogICAgICAgICAgICBUZXh0QWxpZ246IHRleHRBbGlnbk1vZHVsZS5kZWZhdWx0IHx8IHRleHRBbGlnbk1vZHVsZS5UZXh0QWxpZ24sCiAgICAgICAgICAgIExpbms6IGxpbmtNb2R1bGUuZGVmYXVsdCB8fCBsaW5rTW9kdWxlLkxpbmssCiAgICAgICAgICAgIFR5cG9ncmFwaHk6IHR5cG9ncmFwaHlNb2R1bGUuZGVmYXVsdCB8fCB0eXBvZ3JhcGh5TW9kdWxlLlR5cG9ncmFwaHkKICAgICAgICAgIH07CiAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWI7CiAgICAgICAgfSkoKTsKICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMb2FkaW5nUHJvbWlzZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogUHJlbG9hZCBtdWx0aXBsZSBsaWJyYXJpZXMgaW4gcGFyYWxsZWwKICAgICAgICogVXNlZnVsIGZvciB3YXJtaW5nIHRoZSBjYWNoZSBiZWZvcmUgY29tcG9uZW50cyBhcmUgcmVuZGVyZWQKICAgICAgICovCiAgICAgIGFzeW5jIHByZWxvYWRBbGwoKSB7CiAgICAgICAgYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgdGhpcy5sb2FkWHRlcm0oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtRml0QWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZFh0ZXJtU2VhcmNoQWRkb24oKSwKICAgICAgICAgIHRoaXMubG9hZEhpZ2hsaWdodEpzKCksCiAgICAgICAgICB0aGlzLmxvYWRBcGV4Q2hhcnRzKCksCiAgICAgICAgICB0aGlzLmxvYWRUaXB0YXAoKQogICAgICAgIF0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiBhIHNwZWNpZmljIGxpYnJhcnkgaXMgYWxyZWFkeSBsb2FkZWQKICAgICAgICovCiAgICAgIGlzTG9hZGVkKGxpYnJhcnkyKSB7CiAgICAgICAgc3dpdGNoIChsaWJyYXJ5MikgewogICAgICAgICAgY2FzZSAieHRlcm0iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUxpYiAhPT0gbnVsbDsKICAgICAgICAgIGNhc2UgInh0ZXJtRml0QWRkb24iOgogICAgICAgICAgICByZXR1cm4gdGhpcy54dGVybUZpdEFkZG9uTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAieHRlcm1TZWFyY2hBZGRvbiI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLnh0ZXJtU2VhcmNoQWRkb25MaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJoaWdobGlnaHRKcyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmhpZ2hsaWdodEpzTGliICE9PSBudWxsOwogICAgICAgICAgY2FzZSAiYXBleENoYXJ0cyI6CiAgICAgICAgICAgIHJldHVybiB0aGlzLmFwZXhDaGFydHNMaWIgIT09IG51bGw7CiAgICAgICAgICBjYXNlICJ0aXB0YXAiOgogICAgICAgICAgICByZXR1cm4gdGhpcy50aXB0YXBMaWIgIT09IG51bGw7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzCnZhciBpbml0X3NlcnZpY2VzID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL3NlcnZpY2VzL2luZGV4LmpzIigpIHsKICAgIGluaXRfRGVlc1NlcnZpY2VMaWJMb2FkZXIoKTsKICAgIGluaXRfdmVyc2lvbnMoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXJ1bnRpbWUvaW50ZXJmYWNlcy9JRXhlY3V0aW9uRW52aXJvbm1lbnQuanMKdmFyIGluaXRfSUV4ZWN1dGlvbkVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9pbnRlcmZhY2VzL0lFeGVjdXRpb25FbnZpcm9ubWVudC5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMKdmFyIGluaXRfaW50ZXJmYWNlczMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2ludGVyZmFjZXMvaW5kZXguanMiKCkgewogICAgaW5pdF9JRXhlY3V0aW9uRW52aXJvbm1lbnQoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcwp2YXIgREVGQVVMVF9FRElUT1JfT1JJR0lOLCBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFLCBTRUFSQ0hfUEFSQU1fRVJST1IsIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiwgQlJPQURDQVNUX0NIQU5ORUxfTkFNRSwgU1RPUkFHRV9UT0tFTlNfTkFNRSwgU1RPUkFHRV9DT0RFX1ZFUklGSUVSX05BTUUsIFNUT1JBR0VfUE9QVVBfTkFNRTsKdmFyIGluaXRfY29uc3RhbnRzMyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2NvbnN0YW50cy5qcyIoKSB7CiAgICBERUZBVUxUX0VESVRPUl9PUklHSU4gPSAiaHR0cHM6Ly9zdGFja2JsaXR6LmNvbSI7CiAgICBTRUFSQ0hfUEFSQU1fQVVUSF9DT0RFID0gImNvZGUiOwogICAgU0VBUkNIX1BBUkFNX0VSUk9SID0gImVycm9yIjsKICAgIFNFQVJDSF9QQVJBTV9FUlJPUl9ERVNDUklQVElPTiA9ICJlcnJvcl9kZXNjcmlwdGlvbiI7CiAgICBCUk9BRENBU1RfQ0hBTk5FTF9OQU1FID0gIl9fd2NfYXBpX2JjX18iOwogICAgU1RPUkFHRV9UT0tFTlNfTkFNRSA9ICJfX3djX2FwaV90b2tlbnNfXyI7CiAgICBTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSA9ICJfX3djX2FwaV92ZXJpZmllcl9fIjsKICAgIFNUT1JBR0VfUE9QVVBfTkFNRSA9ICJfX3djX2FwaV9wb3B1cF9fIjsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL1R5cGVkRXZlbnRUYXJnZXQuanMKdmFyIFR5cGVkRXZlbnRUYXJnZXQ7CnZhciBpbml0X1R5cGVkRXZlbnRUYXJnZXQgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9UeXBlZEV2ZW50VGFyZ2V0LmpzIigpIHsKICAgIFR5cGVkRXZlbnRUYXJnZXQgPSBjbGFzcyB7CiAgICAgIF9idXMgPSBuZXcgRXZlbnRUYXJnZXQoKTsKICAgICAgbGlzdGVuKGxpc3RlbmVyMikgewogICAgICAgIGZ1bmN0aW9uIHdyYXBwZWRMaXN0ZW5lcihldmVudCkgewogICAgICAgICAgbGlzdGVuZXIyKGV2ZW50LmRhdGEpOwogICAgICAgIH0KICAgICAgICB0aGlzLl9idXMuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIHdyYXBwZWRMaXN0ZW5lcik7CiAgICAgICAgcmV0dXJuICgpID0+IHRoaXMuX2J1cy5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgd3JhcHBlZExpc3RlbmVyKTsKICAgICAgfQogICAgICBmaXJlRXZlbnQoZGF0YSkgewogICAgICAgIHRoaXMuX2J1cy5kaXNwYXRjaEV2ZW50KG5ldyBNZXNzYWdlRXZlbnQoIm1lc3NhZ2UiLCB7IGRhdGEgfSkpOwogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvdG9rZW5zLmpzCmZ1bmN0aW9uIGNsZWFyVG9rZW5zSW5TdG9yYWdlKCkgewogIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfVE9LRU5TX05BTUUpOwp9CmZ1bmN0aW9uIGFkZEFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVyKGxpc3RlbmVyMikgewogIHJldHVybiBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMubGlzdGVuKGxpc3RlbmVyMik7Cn0KZnVuY3Rpb24gcmVhZFRva2Vuc0Zyb21TdG9yYWdlKCkgewogIGNvbnN0IHNlcmlhbGl6ZWRUb2tlbnMgPSBsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX1RPS0VOU19OQU1FKTsKICBpZiAoIXNlcmlhbGl6ZWRUb2tlbnMpIHsKICAgIHJldHVybiBudWxsOwogIH0KICB0cnkgewogICAgcmV0dXJuIEpTT04ucGFyc2Uoc2VyaWFsaXplZFRva2Vucyk7CiAgfSBjYXRjaCB7CiAgICByZXR1cm4gbnVsbDsKICB9Cn0KZnVuY3Rpb24gcGVyc2lzdFRva2Vuc0luU3RvcmFnZSh0b2tlbnMpIHsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX1RPS0VOU19OQU1FLCBKU09OLnN0cmluZ2lmeSh0b2tlbnMpKTsKfQpmdW5jdGlvbiBnZXRFeHBpcmVzRnJvbVRva2VuUmVzcG9uc2UoeyBjcmVhdGVkX2F0LCBleHBpcmVzX2luIH0pIHsKICByZXR1cm4gKGNyZWF0ZWRfYXQgKyBleHBpcmVzX2luKSAqIDFlMzsKfQpmdW5jdGlvbiBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuKSB7CiAgaWYgKHR5cGVvZiB0b2tlbiAhPT0gIm9iamVjdCIgfHwgIXRva2VuKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKTsKICB9CiAgaWYgKHR5cGVvZiB0b2tlbi5hY2Nlc3NfdG9rZW4gIT09ICJzdHJpbmciIHx8IHR5cGVvZiB0b2tlbi5yZWZyZXNoX3Rva2VuICE9PSAic3RyaW5nIiB8fCB0eXBlb2YgdG9rZW4uY3JlYXRlZF9hdCAhPT0gIm51bWJlciIgfHwgdHlwZW9mIHRva2VuLmV4cGlyZXNfaW4gIT09ICJudW1iZXIiKSB7CiAgICB0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgVG9rZW4gUmVzcG9uc2UiKTsKICB9Cn0KZnVuY3Rpb24gd2FpdChtcykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIG1zKSk7Cn0KZnVuY3Rpb24gZmlyZUFjY2Vzc1Rva2VuQ2hhbmdlZChhY2Nlc3NUb2tlbikgewogIGFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVycy5maXJlRXZlbnQoYWNjZXNzVG9rZW4pOwp9CnZhciBJR05PUkVEX0VSUk9SLCBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMsIFRva2VuczsKdmFyIGluaXRfdG9rZW5zID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvdG9rZW5zLmpzIigpIHsKICAgIGluaXRfY29uc3RhbnRzMygpOwogICAgaW5pdF9UeXBlZEV2ZW50VGFyZ2V0KCk7CiAgICBJR05PUkVEX0VSUk9SID0gbmV3IEVycm9yKCk7CiAgICBJR05PUkVEX0VSUk9SLnN0YWNrID0gIiI7CiAgICBhY2Nlc3NUb2tlbkNoYW5nZWRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgVG9rZW5zID0gY2xhc3MgX1Rva2VucyB7CiAgICAgIG9yaWdpbjsKICAgICAgcmVmcmVzaDsKICAgICAgYWNjZXNzOwogICAgICBleHBpcmVzOwogICAgICBfcmV2b2tlZCA9IG5ldyBBYm9ydENvbnRyb2xsZXIoKTsKICAgICAgY29uc3RydWN0b3Iob3JpZ2luLCByZWZyZXNoLCBhY2Nlc3MsIGV4cGlyZXMpIHsKICAgICAgICB0aGlzLm9yaWdpbiA9IG9yaWdpbjsKICAgICAgICB0aGlzLnJlZnJlc2ggPSByZWZyZXNoOwogICAgICAgIHRoaXMuYWNjZXNzID0gYWNjZXNzOwogICAgICAgIHRoaXMuZXhwaXJlcyA9IGV4cGlyZXM7CiAgICAgIH0KICAgICAgYXN5bmMgYWN0aXZhdGUob25GYWlsZWRSZWZyZXNoKSB7CiAgICAgICAgaWYgKHRoaXMuX3Jldm9rZWQuc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiVG9rZW4gcmV2b2tlZCIpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5leHBpcmVzIDwgRGF0ZS5ub3coKSkgewogICAgICAgICAgaWYgKCFhd2FpdCB0aGlzLl9mZXRjaE5ld0FjY2Vzc1Rva2VuKCkpIHsKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLl9zeW5jKCk7CiAgICAgICAgdGhpcy5fc3RhcnRSZWZyZXNoVG9rZW5zTG9vcChvbkZhaWxlZFJlZnJlc2gpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGFzeW5jIHJldm9rZShjbGllbnRJZCwgaWdub3JlUmV2b2tlRXJyb3IpIHsKICAgICAgICB0aGlzLl9yZXZva2VkLmFib3J0KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7dGhpcy5vcmlnaW59L29hdXRoL3Jldm9rZWAsIHsKICAgICAgICAgICAgbWV0aG9kOiAiUE9TVCIsCiAgICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgICAiQ29udGVudC1UeXBlIjogImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIKICAgICAgICAgICAgfSwKICAgICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7IHRva2VuOiB0aGlzLnJlZnJlc2gsIHRva2VuX3R5cGVfaGludDogInJlZnJlc2hfdG9rZW4iLCBjbGllbnRfaWQ6IGNsaWVudElkIH0pLAogICAgICAgICAgICBtb2RlOiAiY29ycyIKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFyZXNwb25zZS5vaykgewogICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEZhaWxlZCB0byBsb2dvdXRgKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgaWYgKCFpZ25vcmVSZXZva2VFcnJvcikgewogICAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgfQogICAgICBzdGF0aWMgZnJvbVN0b3JhZ2UoKSB7CiAgICAgICAgY29uc3Qgc2F2ZWRUb2tlbnMgPSByZWFkVG9rZW5zRnJvbVN0b3JhZ2UoKTsKICAgICAgICBpZiAoIXNhdmVkVG9rZW5zKSB7CiAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG5ldyBfVG9rZW5zKHNhdmVkVG9rZW5zLm9yaWdpbiwgc2F2ZWRUb2tlbnMucmVmcmVzaCwgc2F2ZWRUb2tlbnMuYWNjZXNzLCBzYXZlZFRva2Vucy5leHBpcmVzKTsKICAgICAgfQogICAgICBzdGF0aWMgYXN5bmMgZnJvbUF1dGhDb2RlKHsgZWRpdG9yT3JpZ2luOiBlZGl0b3JPcmlnaW4yLCBjbGllbnRJZCwgY29kZVZlcmlmaWVyLCBhdXRoQ29kZSwgcmVkaXJlY3RVcmkgfSkgewogICAgICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgZmV0Y2goYCR7ZWRpdG9yT3JpZ2luMn0vb2F1dGgvdG9rZW5gLCB7CiAgICAgICAgICBtZXRob2Q6ICJQT1NUIiwKICAgICAgICAgIGhlYWRlcnM6IHsKICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCiAgICAgICAgICB9LAogICAgICAgICAgYm9keTogbmV3IFVSTFNlYXJjaFBhcmFtcyh7CiAgICAgICAgICAgIGNsaWVudF9pZDogY2xpZW50SWQsCiAgICAgICAgICAgIGNvZGU6IGF1dGhDb2RlLAogICAgICAgICAgICBjb2RlX3ZlcmlmaWVyOiBjb2RlVmVyaWZpZXIsCiAgICAgICAgICAgIGdyYW50X3R5cGU6ICJhdXRob3JpemF0aW9uX2NvZGUiLAogICAgICAgICAgICByZWRpcmVjdF91cmk6IHJlZGlyZWN0VXJpCiAgICAgICAgICB9KSwKICAgICAgICAgIG1vZGU6ICJjb3JzIgogICAgICAgIH0pOwogICAgICAgIGlmICghcmVzcG9uc2Uub2spIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGZldGNoIHRva2VuOiAke3Jlc3BvbnNlLnN0YXR1c31gKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgdG9rZW5SZXNwb25zZSA9IGF3YWl0IHJlc3BvbnNlLmpzb24oKTsKICAgICAgICBhc3NlcnRUb2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuOiBhY2Nlc3MsIHJlZnJlc2hfdG9rZW46IHJlZnJlc2ggfSA9IHRva2VuUmVzcG9uc2U7CiAgICAgICAgY29uc3QgZXhwaXJlcyA9IGdldEV4cGlyZXNGcm9tVG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICByZXR1cm4gbmV3IF9Ub2tlbnMoZWRpdG9yT3JpZ2luMiwgcmVmcmVzaCwgYWNjZXNzLCBleHBpcmVzKTsKICAgICAgfQogICAgICBhc3luYyBfZmV0Y2hOZXdBY2Nlc3NUb2tlbigpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChgJHt0aGlzLm9yaWdpbn0vb2F1dGgvdG9rZW5gLCB7CiAgICAgICAgICAgIG1ldGhvZDogIlBPU1QiLAogICAgICAgICAgICBoZWFkZXJzOiB7CiAgICAgICAgICAgICAgIkNvbnRlbnQtVHlwZSI6ICJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIGJvZHk6IG5ldyBVUkxTZWFyY2hQYXJhbXMoewogICAgICAgICAgICAgIGdyYW50X3R5cGU6ICJyZWZyZXNoX3Rva2VuIiwKICAgICAgICAgICAgICByZWZyZXNoX3Rva2VuOiB0aGlzLnJlZnJlc2gKICAgICAgICAgICAgfSksCiAgICAgICAgICAgIG1vZGU6ICJjb3JzIiwKICAgICAgICAgICAgc2lnbmFsOiB0aGlzLl9yZXZva2VkLnNpZ25hbAogICAgICAgICAgfSk7CiAgICAgICAgICBpZiAoIXJlc3BvbnNlLm9rKSB7CiAgICAgICAgICAgIHRocm93IElHTk9SRURfRVJST1I7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCB0b2tlblJlc3BvbnNlID0gYXdhaXQgcmVzcG9uc2UuanNvbigpOwogICAgICAgICAgYXNzZXJ0VG9rZW5SZXNwb25zZSh0b2tlblJlc3BvbnNlKTsKICAgICAgICAgIGNvbnN0IHsgYWNjZXNzX3Rva2VuOiBhY2Nlc3MsIHJlZnJlc2hfdG9rZW46IHJlZnJlc2ggfSA9IHRva2VuUmVzcG9uc2U7CiAgICAgICAgICBjb25zdCBleHBpcmVzID0gZ2V0RXhwaXJlc0Zyb21Ub2tlblJlc3BvbnNlKHRva2VuUmVzcG9uc2UpOwogICAgICAgICAgdGhpcy5hY2Nlc3MgPSBhY2Nlc3M7CiAgICAgICAgICB0aGlzLmV4cGlyZXMgPSBleHBpcmVzOwogICAgICAgICAgdGhpcy5yZWZyZXNoID0gcmVmcmVzaDsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgX3N5bmMoKSB7CiAgICAgICAgcGVyc2lzdFRva2Vuc0luU3RvcmFnZSh0aGlzKTsKICAgICAgICBmaXJlQWNjZXNzVG9rZW5DaGFuZ2VkKHRoaXMuYWNjZXNzKTsKICAgICAgfQogICAgICBhc3luYyBfc3RhcnRSZWZyZXNoVG9rZW5zTG9vcChvbkZhaWxlZFJlZnJlc2gpIHsKICAgICAgICB3aGlsZSAodHJ1ZSkgewogICAgICAgICAgY29uc3QgZXhwaXJlc0luID0gdGhpcy5leHBpcmVzIC0gRGF0ZS5ub3coKSAtIDFlMzsKICAgICAgICAgIGF3YWl0IHdhaXQoTWF0aC5tYXgoZXhwaXJlc0luLCAxZTMpKTsKICAgICAgICAgIGlmICh0aGlzLl9yZXZva2VkLnNpZ25hbC5hYm9ydGVkKSB7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICAgIGlmICghdGhpcy5fZmV0Y2hOZXdBY2Nlc3NUb2tlbigpKSB7CiAgICAgICAgICAgIG9uRmFpbGVkUmVmcmVzaCgpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLl9zeW5jKCk7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvaWZyYW1lLXVybC5qcwp2YXIgcGFyYW1zLCBlZGl0b3JPcmlnaW4sIGlmcmFtZVNldHRpbmdzOwp2YXIgaW5pdF9pZnJhbWVfdXJsID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvaWZyYW1lLXVybC5qcyIoKSB7CiAgICBpbml0X2NvbnN0YW50czMoKTsKICAgIHBhcmFtcyA9IHt9OwogICAgZWRpdG9yT3JpZ2luID0gbnVsbDsKICAgIGlmcmFtZVNldHRpbmdzID0gewogICAgICBnZXQgZWRpdG9yT3JpZ2luKCkgewogICAgICAgIGlmIChlZGl0b3JPcmlnaW4gPT0gbnVsbCkgewogICAgICAgICAgZWRpdG9yT3JpZ2luID0gbmV3IFVSTChnbG9iYWxUaGlzLldFQkNPTlRBSU5FUl9BUElfSUZSQU1FX1VSTCA/PyBERUZBVUxUX0VESVRPUl9PUklHSU4pLm9yaWdpbjsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGVkaXRvck9yaWdpbjsKICAgICAgfSwKICAgICAgc2V0IGVkaXRvck9yaWdpbihuZXdPcmlnaW4pIHsKICAgICAgICBlZGl0b3JPcmlnaW4gPSBuZXcgVVJMKG5ld09yaWdpbikub3JpZ2luOwogICAgICB9LAogICAgICBzZXRRdWVyeVBhcmFtKGtleTIsIHZhbHVlMikgewogICAgICAgIHBhcmFtc1trZXkyXSA9IHZhbHVlMjsKICAgICAgfSwKICAgICAgZ2V0IHVybCgpIHsKICAgICAgICBjb25zdCB1cmwgPSBuZXcgVVJMKHRoaXMuZWRpdG9yT3JpZ2luKTsKICAgICAgICB1cmwucGF0aG5hbWUgPSAiL2hlYWRsZXNzIjsKICAgICAgICBmb3IgKGNvbnN0IHBhcmFtIGluIHBhcmFtcykgewogICAgICAgICAgdXJsLnNlYXJjaFBhcmFtcy5zZXQocGFyYW0sIHBhcmFtc1twYXJhbV0pOwogICAgICAgIH0KICAgICAgICB1cmwuc2VhcmNoUGFyYW1zLnNldCgidmVyc2lvbiIsICIxLjYuMSIpOwogICAgICAgIHJldHVybiB1cmw7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9jb2RlLmpzCmFzeW5jIGZ1bmN0aW9uIFMyNTYoaW5wdXQpIHsKICBjb25zdCBhc2NpaSA9IG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShpbnB1dCk7CiAgY29uc3Qgc2hhMjU2ID0gbmV3IFVpbnQ4QXJyYXkoYXdhaXQgY3J5cHRvLnN1YnRsZS5kaWdlc3QoIlNIQS0yNTYiLCBhc2NpaSkpOwogIHJldHVybiBidG9hKHNoYTI1Ni5yZWR1Y2UoKGJpbmFyeSwgYnl0ZSkgPT4gYmluYXJ5ICsgU3RyaW5nLmZyb21Db2RlUG9pbnQoYnl0ZSksICIiKSkucmVwbGFjZSgvXCsvZywgIi0iKS5yZXBsYWNlKC9cLy9nLCAiXyIpLnJlcGxhY2UoLz0rJC8sICIiKTsKfQpmdW5jdGlvbiBuZXdDb2RlVmVyaWZpZXIoKSB7CiAgY29uc3QgcmFuZG9tID0gbmV3IFVpbnQ4QXJyYXkoOTYpOwogIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMocmFuZG9tKTsKICBsZXQgY29kZVZlcmlmaWVyID0gIiI7CiAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgMzI7ICsraTExKSB7CiAgICBjb2RlVmVyaWZpZXIgKz0gbmV4dEZvdXJDaGFycyhyYW5kb21bMyAqIGkxMSArIDBdLCByYW5kb21bMyAqIGkxMSArIDFdLCByYW5kb21bMyAqIGkxMSArIDJdKTsKICB9CiAgcmV0dXJuIGNvZGVWZXJpZmllcjsKfQpmdW5jdGlvbiBuZXh0Rm91ckNoYXJzKGJ5dGUxLCBieXRlMiwgYnl0ZTMpIHsKICBjb25zdCBjaGFyMSA9IGJ5dGUxID4+IDI7CiAgY29uc3QgY2hhcjIgPSAoYnl0ZTEgJiAzKSA8PCA0IHwgYnl0ZTIgPj4gNDsKICBjb25zdCBjaGFyMyA9IGJ5dGUyICYgMTUgfCAoYnl0ZTMgJiAxOTIpID4+IDI7CiAgY29uc3QgY2hhcjQgPSBieXRlMyAmIDYzOwogIHJldHVybiBbY2hhcjEsIGNoYXIyLCBjaGFyMywgY2hhcjRdLm1hcCh1bnJlc2VydmVkQ2hhcmFjdGVycykuam9pbigiIik7Cn0KZnVuY3Rpb24gdW5yZXNlcnZlZENoYXJhY3RlcnMoY29kZTQpIHsKICBsZXQgb2Zmc2V0OwogIGlmIChjb2RlNCA8IDI2KSB7CiAgICBvZmZzZXQgPSBjb2RlNCArIDY1OwogIH0gZWxzZSBpZiAoY29kZTQgPCA1MikgewogICAgb2Zmc2V0ID0gY29kZTQgLSAyNiArIDk3OwogIH0gZWxzZSBpZiAoY29kZTQgPCA2MikgewogICAgb2Zmc2V0ID0gY29kZTQgLSA1MiArIDQ4OwogIH0gZWxzZSB7CiAgICBvZmZzZXQgPSBjb2RlNCA9PT0gNjIgPyAzMCA6IDQ1OwogIH0KICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShvZmZzZXQpOwp9CnZhciBpbml0X2NvZGU1ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW50ZXJuYWwvY29kZS5qcyIoKSB7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9yZXNldC1wcm9taXNlLmpzCmZ1bmN0aW9uIHJlc2V0dGFibGVQcm9taXNlKCkgewogIGxldCByZXNvbHZlMjsKICBsZXQgcHJvbWlzZTsKICBmdW5jdGlvbiByZXNldCgpIHsKICAgIHByb21pc2UgPSBuZXcgUHJvbWlzZSgoX3Jlc29sdmUpID0+IHJlc29sdmUyID0gX3Jlc29sdmUpOwogIH0KICByZXNldCgpOwogIHJldHVybiB7CiAgICBnZXQgcHJvbWlzZSgpIHsKICAgICAgcmV0dXJuIHByb21pc2U7CiAgICB9LAogICAgcmVzb2x2ZSh2YWx1ZTIpIHsKICAgICAgcmV0dXJuIHJlc29sdmUyKHZhbHVlMik7CiAgICB9LAogICAgcmVzZXQKICB9Owp9CnZhciBpbml0X3Jlc2V0X3Byb21pc2UgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9yZXNldC1wcm9taXNlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L2ludGVybmFsL2F1dGgtc3RhdGUuanMKZnVuY3Rpb24gYnJvYWRjYXN0TWVzc2FnZShtZXNzYWdlMikgewogIGlmICghYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwpIHsKICAgIHJldHVybjsKICB9CiAgYXV0aFN0YXRlLmJyb2FkY2FzdENoYW5uZWwucG9zdE1lc3NhZ2UobWVzc2FnZTIpOwogIGlmIChsb2NhbFN0b3JhZ2UuZ2V0SXRlbShTVE9SQUdFX1BPUFVQX05BTUUpID09PSAidHJ1ZSIgJiYgbWVzc2FnZTIudHlwZSAhPT0gImF1dGgtbG9nb3V0IikgewogICAgbG9jYWxTdG9yYWdlLnJlbW92ZUl0ZW0oU1RPUkFHRV9QT1BVUF9OQU1FKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICB3aW5kb3cuY2xvc2UoKTsKICAgIH0pOwogIH0KfQpmdW5jdGlvbiBvbkZhaWxlZFRva2VuUmVmcmVzaCgpIHsKICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWxvZ291dCIgfSk7Cn0KZnVuY3Rpb24gZGVmYXVsdFJlZGlyZWN0VXJpKCkgewogIHJldHVybiB3aW5kb3cubG9jYXRpb24uaHJlZjsKfQphc3luYyBmdW5jdGlvbiBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpIHsKICBjb25zdCBjb2RlVmVyaWZpZXIgPSBuZXdDb2RlVmVyaWZpZXIoKTsKICBsb2NhbFN0b3JhZ2Uuc2V0SXRlbShTVE9SQUdFX0NPREVfVkVSSUZJRVJfTkFNRSwgY29kZVZlcmlmaWVyKTsKICBjb25zdCBjb2RlQ2hhbGxlbmdlID0gYXdhaXQgUzI1Nihjb2RlVmVyaWZpZXIpOwogIGNvbnN0IHVybCA9IG5ldyBVUkwoIi9vYXV0aC9hdXRob3JpemUiLCBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luKTsKICBjb25zdCB7IHNlYXJjaFBhcmFtcyB9ID0gdXJsOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoInJlc3BvbnNlX3R5cGUiLCAiY29kZSIpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoImNsaWVudF9pZCIsIGF1dGhTdGF0ZS5jbGllbnRJZCk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgicmVkaXJlY3RfdXJpIiwgZGVmYXVsdFJlZGlyZWN0VXJpKCkpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoInNjb3BlIiwgYXV0aFN0YXRlLm9hdXRoU2NvcGUpOwogIHNlYXJjaFBhcmFtcy5hcHBlbmQoImNvZGVfY2hhbGxlbmdlIiwgY29kZUNoYWxsZW5nZSk7CiAgc2VhcmNoUGFyYW1zLmFwcGVuZCgiY29kZV9jaGFsbGVuZ2VfbWV0aG9kIiwgIlMyNTYiKTsKICByZXR1cm4gdXJsLnRvU3RyaW5nKCk7Cn0KZnVuY3Rpb24gYXNzZXJ0QXV0aFRva2Vucyh0b2tlbnMpIHsKICBpZiAoIXRva2VucykgewogICAgdGhyb3cgbmV3IEVycm9yKCJPb3BzISBUb2tlbnMgaXMgbm90IGRlZmluZWQgd2hlbiBpdCBhbHdheXMgc2hvdWxkIGJlLiIpOwogIH0KfQp2YXIgYXV0aFN0YXRlLCBhdXRoRmFpbGVkTGlzdGVuZXJzLCBsb2dnZWRPdXRMaXN0ZW5lcnMsIGF1dGg7CnZhciBpbml0X2F1dGhfc3RhdGUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9pbnRlcm5hbC9hdXRoLXN0YXRlLmpzIigpIHsKICAgIGluaXRfdG9rZW5zKCk7CiAgICBpbml0X2NvbnN0YW50czMoKTsKICAgIGluaXRfaWZyYW1lX3VybCgpOwogICAgaW5pdF9jb2RlNSgpOwogICAgaW5pdF9yZXNldF9wcm9taXNlKCk7CiAgICBpbml0X1R5cGVkRXZlbnRUYXJnZXQoKTsKICAgIGF1dGhTdGF0ZSA9IHsKICAgICAgaW5pdGlhbGl6ZWQ6IGZhbHNlLAogICAgICBib290Q2FsbGVkOiBmYWxzZSwKICAgICAgYXV0aENvbXBsZXRlOiByZXNldHRhYmxlUHJvbWlzZSgpLAogICAgICBjbGllbnRJZDogIiIsCiAgICAgIG9hdXRoU2NvcGU6ICIiLAogICAgICBicm9hZGNhc3RDaGFubmVsOiBudWxsLAogICAgICBnZXQgZWRpdG9yT3JpZ2luKCkgewogICAgICAgIHJldHVybiBpZnJhbWVTZXR0aW5ncy5lZGl0b3JPcmlnaW47CiAgICAgIH0sCiAgICAgIHRva2VuczogbnVsbAogICAgfTsKICAgIGF1dGhGYWlsZWRMaXN0ZW5lcnMgPSBuZXcgVHlwZWRFdmVudFRhcmdldCgpOwogICAgbG9nZ2VkT3V0TGlzdGVuZXJzID0gbmV3IFR5cGVkRXZlbnRUYXJnZXQoKTsKICAgIGF1dGggPSB7CiAgICAgIGluaXQoeyBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjIsIGNsaWVudElkLCBzY29wZSB9KSB7CiAgICAgICAgaWYgKGF1dGhTdGF0ZS5pbml0aWFsaXplZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJJbml0IHNob3VsZCBvbmx5IGJlIGNhbGxlZCBvbmNlIik7CiAgICAgICAgfQogICAgICAgIGxldCBlbnRlcnByaXNlID0gdHJ1ZTsKICAgICAgICBpZiAoZW50ZXJwcmlzZSAmJiBhdXRoU3RhdGUuYm9vdENhbGxlZCkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJgYXV0aC5pbml0YCBzaG91bGQgYWx3YXlzIGJlIGNhbGxlZCBiZWZvcmUgYFdlYkNvbnRhaW5lci5ib290YCIpOwogICAgICAgIH0KICAgICAgICBhdXRoU3RhdGUuaW5pdGlhbGl6ZWQgPSB0cnVlOwogICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBUb2tlbnMuZnJvbVN0b3JhZ2UoKTsKICAgICAgICBhdXRoU3RhdGUuY2xpZW50SWQgPSBjbGllbnRJZDsKICAgICAgICBhdXRoU3RhdGUub2F1dGhTY29wZSA9IHNjb3BlOwogICAgICAgIGF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsID0gbmV3IEJyb2FkY2FzdENoYW5uZWwoQlJPQURDQVNUX0NIQU5ORUxfTkFNRSk7CiAgICAgICAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIiwgY2xpZW50SWQpOwogICAgICAgIGlmIChlZGl0b3JPcmlnaW4yKSB7CiAgICAgICAgICBpZnJhbWVTZXR0aW5ncy5lZGl0b3JPcmlnaW4gPSBuZXcgVVJMKGVkaXRvck9yaWdpbjIpLm9yaWdpbjsKICAgICAgICB9CiAgICAgICAgbG9nZ2VkT3V0TGlzdGVuZXJzLmxpc3RlbigoKSA9PiBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc2V0KCkpOwogICAgICAgIGF1dGhTdGF0ZS5icm9hZGNhc3RDaGFubmVsLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBvbkNoYW5uZWxNZXNzYWdlKTsKICAgICAgICBhc3luYyBmdW5jdGlvbiBvbkNoYW5uZWxNZXNzYWdlKGV2ZW50KSB7CiAgICAgICAgICBjb25zdCB0eXBlZEV2ZW50ID0gZXZlbnQuZGF0YTsKICAgICAgICAgIGlmICh0eXBlZEV2ZW50LnR5cGUgPT09ICJhdXRoLWNvbXBsZXRlIikgewogICAgICAgICAgICBhdXRoU3RhdGUudG9rZW5zID0gVG9rZW5zLmZyb21TdG9yYWdlKCk7CiAgICAgICAgICAgIGF3YWl0IGF1dGhTdGF0ZS50b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICBhdXRoU3RhdGUuYXV0aENvbXBsZXRlLnJlc29sdmUoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtZmFpbGVkIikgewogICAgICAgICAgICBhdXRoRmFpbGVkTGlzdGVuZXJzLmZpcmVFdmVudCh0eXBlZEV2ZW50KTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgaWYgKHR5cGVkRXZlbnQudHlwZSA9PT0gImF1dGgtbG9nb3V0IikgewogICAgICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKGF1dGhTdGF0ZS50b2tlbnMpIHsKICAgICAgICAgIGNvbnN0IHRva2VucyA9IGF1dGhTdGF0ZS50b2tlbnM7CiAgICAgICAgICBpZiAodG9rZW5zLm9yaWdpbiA9PT0gYXV0aFN0YXRlLmVkaXRvck9yaWdpbikgewogICAgICAgICAgICAoYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCB0b2tlbnMuYWN0aXZhdGUob25GYWlsZWRUb2tlblJlZnJlc2gpOwogICAgICAgICAgICAgIGlmICghc3VjY2VzcykgewogICAgICAgICAgICAgICAgaWYgKGF1dGhTdGF0ZS50b2tlbnMgIT09IHRva2VucykgewogICAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBsb2dnZWRPdXRMaXN0ZW5lcnMuZmlyZUV2ZW50KCk7CiAgICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucmVzb2x2ZSgpOwogICAgICAgICAgICB9KSgpOwogICAgICAgICAgICByZXR1cm4geyBzdGF0dXM6ICJhdXRob3JpemVkIiB9OwogICAgICAgICAgfQogICAgICAgICAgY2xlYXJUb2tlbnNJblN0b3JhZ2UoKTsKICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICBjb25zdCBsb2NhdGlvblVSTCA9IG5ldyBVUkwod2luZG93LmxvY2F0aW9uLmhyZWYpOwogICAgICAgIGNvbnN0IHsgc2VhcmNoUGFyYW1zIH0gPSBsb2NhdGlvblVSTDsKICAgICAgICBjb25zdCB1cGRhdGVVUkwgPSAoKSA9PiB3aW5kb3cuaGlzdG9yeS5yZXBsYWNlU3RhdGUoe30sIGRvY3VtZW50LnRpdGxlLCBsb2NhdGlvblVSTCk7CiAgICAgICAgaWYgKHNlYXJjaFBhcmFtcy5oYXMoU0VBUkNIX1BBUkFNX0VSUk9SKSkgewogICAgICAgICAgY29uc3QgZXJyb3IgPSBzZWFyY2hQYXJhbXMuZ2V0KFNFQVJDSF9QQVJBTV9FUlJPUik7CiAgICAgICAgICBjb25zdCBkZXNjcmlwdGlvbiA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OKTsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0VSUk9SKTsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0VSUk9SX0RFU0NSSVBUSU9OKTsKICAgICAgICAgIHVwZGF0ZVVSTCgpOwogICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWZhaWxlZCIsIGVycm9yLCBkZXNjcmlwdGlvbiB9KTsKICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGgtZmFpbGVkIiwgZXJyb3IsIGRlc2NyaXB0aW9uIH07CiAgICAgICAgfQogICAgICAgIGlmIChzZWFyY2hQYXJhbXMuaGFzKFNFQVJDSF9QQVJBTV9BVVRIX0NPREUpKSB7CiAgICAgICAgICBjb25zdCBhdXRoQ29kZSA9IHNlYXJjaFBhcmFtcy5nZXQoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSk7CiAgICAgICAgICBjb25zdCBlZGl0b3JPcmlnaW4zID0gYXV0aFN0YXRlLmVkaXRvck9yaWdpbjsKICAgICAgICAgIHNlYXJjaFBhcmFtcy5kZWxldGUoU0VBUkNIX1BBUkFNX0FVVEhfQ09ERSk7CiAgICAgICAgICB1cGRhdGVVUkwoKTsKICAgICAgICAgIGNvbnN0IGNvZGVWZXJpZmllciA9IGxvY2FsU3RvcmFnZS5nZXRJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FKTsKICAgICAgICAgIGlmICghY29kZVZlcmlmaWVyKSB7CiAgICAgICAgICAgIHJldHVybiB7IHN0YXR1czogIm5lZWQtYXV0aCIgfTsKICAgICAgICAgIH0KICAgICAgICAgIGxvY2FsU3RvcmFnZS5yZW1vdmVJdGVtKFNUT1JBR0VfQ09ERV9WRVJJRklFUl9OQU1FKTsKICAgICAgICAgIFRva2Vucy5mcm9tQXV0aENvZGUoewogICAgICAgICAgICBlZGl0b3JPcmlnaW46IGVkaXRvck9yaWdpbjMsCiAgICAgICAgICAgIGNsaWVudElkOiBhdXRoU3RhdGUuY2xpZW50SWQsCiAgICAgICAgICAgIGF1dGhDb2RlLAogICAgICAgICAgICBjb2RlVmVyaWZpZXIsCiAgICAgICAgICAgIHJlZGlyZWN0VXJpOiBkZWZhdWx0UmVkaXJlY3RVcmkoKQogICAgICAgICAgfSkudGhlbihhc3luYyAodG9rZW5zKSA9PiB7CiAgICAgICAgICAgIGF1dGhTdGF0ZS50b2tlbnMgPSB0b2tlbnM7CiAgICAgICAgICAgIGFzc2VydEF1dGhUb2tlbnMoYXV0aFN0YXRlLnRva2Vucyk7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhdXRoU3RhdGUudG9rZW5zLmFjdGl2YXRlKG9uRmFpbGVkVG9rZW5SZWZyZXNoKTsKICAgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgYXV0aFN0YXRlLmF1dGhDb21wbGV0ZS5yZXNvbHZlKCk7CiAgICAgICAgICAgIGJyb2FkY2FzdE1lc3NhZ2UoeyB0eXBlOiAiYXV0aC1jb21wbGV0ZSIgfSk7CiAgICAgICAgICB9KS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICAgICAgYnJvYWRjYXN0TWVzc2FnZSh7IHR5cGU6ICJhdXRoLWxvZ291dCIgfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7IHN0YXR1czogImF1dGhvcml6ZWQiIH07CiAgICAgICAgfQogICAgICAgIHJldHVybiB7IHN0YXR1czogIm5lZWQtYXV0aCIgfTsKICAgICAgfSwKICAgICAgYXN5bmMgc3RhcnRBdXRoRmxvdyh7IHBvcHVwIH0gPSB7fSkgewogICAgICAgIGlmICghYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImF1dGguaW5pdCBtdXN0IGJlIGNhbGxlZCBmaXJzdCIpOwogICAgICAgIH0KICAgICAgICBpZiAocG9wdXApIHsKICAgICAgICAgIGxvY2FsU3RvcmFnZS5zZXRJdGVtKFNUT1JBR0VfUE9QVVBfTkFNRSwgInRydWUiKTsKICAgICAgICAgIGNvbnN0IGhlaWdodCA9IDUwMDsKICAgICAgICAgIGNvbnN0IHdpZHRoID0gNjIwOwogICAgICAgICAgY29uc3QgbGVmdCA9IHdpbmRvdy5zY3JlZW5MZWZ0ICsgKHdpbmRvdy5vdXRlcldpZHRoIC0gd2lkdGgpIC8gMjsKICAgICAgICAgIGNvbnN0IHRvcCA9IHdpbmRvdy5zY3JlZW5Ub3AgKyAod2luZG93Lm91dGVySGVpZ2h0IC0gaGVpZ2h0KSAvIDI7CiAgICAgICAgICB3aW5kb3cub3Blbihhd2FpdCBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpLCAiX2JsYW5rIiwgYHBvcHVwLHdpZHRoPSR7d2lkdGh9LGhlaWdodD0ke2hlaWdodH0sbGVmdD0ke2xlZnR9LHRvcD0ke3RvcH1gKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgd2luZG93LmxvY2F0aW9uLmhyZWYgPSBhd2FpdCBnZW5lcmF0ZU9BdXRoUmVxdWVzdCgpOwogICAgICAgIH0KICAgICAgfSwKICAgICAgYXN5bmMgbG9nb3V0KHsgaWdub3JlUmV2b2tlRXJyb3IgfSA9IHt9KSB7CiAgICAgICAgYXdhaXQgYXV0aFN0YXRlLnRva2Vucz8ucmV2b2tlKGF1dGhTdGF0ZS5jbGllbnRJZCwgaWdub3JlUmV2b2tlRXJyb3IgPz8gZmFsc2UpOwogICAgICAgIGxvZ2dlZE91dExpc3RlbmVycy5maXJlRXZlbnQoKTsKICAgICAgICBicm9hZGNhc3RNZXNzYWdlKHsgdHlwZTogImF1dGgtbG9nb3V0IiB9KTsKICAgICAgfSwKICAgICAgbG9nZ2VkSW4oKSB7CiAgICAgICAgcmV0dXJuIGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucHJvbWlzZTsKICAgICAgfSwKICAgICAgb24oZXZlbnQsIGxpc3RlbmVyMikgewogICAgICAgIHN3aXRjaCAoZXZlbnQpIHsKICAgICAgICAgIGNhc2UgImF1dGgtZmFpbGVkIjogewogICAgICAgICAgICByZXR1cm4gYXV0aEZhaWxlZExpc3RlbmVycy5saXN0ZW4obGlzdGVuZXIyKTsKICAgICAgICAgIH0KICAgICAgICAgIGNhc2UgImxvZ2dlZC1vdXQiOiB7CiAgICAgICAgICAgIHJldHVybiBsb2dnZWRPdXRMaXN0ZW5lcnMubGlzdGVuKGxpc3RlbmVyMik7CiAgICAgICAgICB9CiAgICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgVW5zdXBwb3J0ZWQgZXZlbnQgdHlwZSAnJHtldmVudH0nLmApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ByZXZpZXctbWVzc2FnZS10eXBlcy5qcwp2YXIgUHJldmlld01lc3NhZ2VUeXBlOwp2YXIgaW5pdF9wcmV2aWV3X21lc3NhZ2VfdHlwZXMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC9wcmV2aWV3LW1lc3NhZ2UtdHlwZXMuanMiKCkgewogICAgKGZ1bmN0aW9uKFByZXZpZXdNZXNzYWdlVHlwZTIpIHsKICAgICAgUHJldmlld01lc3NhZ2VUeXBlMlsiVW5jYXVnaHRFeGNlcHRpb24iXSA9ICJQUkVWSUVXX1VOQ0FVR0hUX0VYQ0VQVElPTiI7CiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZTJbIlVuaGFuZGxlZFJlamVjdGlvbiJdID0gIlBSRVZJRVdfVU5IQU5ETEVEX1JFSkVDVElPTiI7CiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZTJbIkNvbnNvbGVFcnJvciJdID0gIlBSRVZJRVdfQ09OU09MRV9FUlJPUiI7CiAgICB9KShQcmV2aWV3TWVzc2FnZVR5cGUgfHwgKFByZXZpZXdNZXNzYWdlVHlwZSA9IHt9KSk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC92ZW5kb3IvaW5kZXguanMKZnVuY3Rpb24gZXhwb3NlKG9iaiwgZXAgPSBzZWxmKSB7CiAgZXAuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIGZ1bmN0aW9uIGNhbGxiYWNrKGV2KSB7CiAgICBpZiAoIWV2IHx8ICFldi5kYXRhKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHsgaWQsIHR5cGU6IHR5cGU1LCBwYXRoOiBwYXRoMiB9ID0gT2JqZWN0LmFzc2lnbih7IHBhdGg6IFtdIH0sIGV2LmRhdGEpOwogICAgY29uc3QgYXJndW1lbnRMaXN0ID0gKGV2LmRhdGEuYXJndW1lbnRMaXN0IHx8IFtdKS5tYXAoZnJvbVdpcmVWYWx1ZSk7CiAgICBsZXQgcmV0dXJuVmFsdWU7CiAgICB0cnkgewogICAgICBjb25zdCBwYXJlbnQgPSBwYXRoMi5zbGljZSgwLCAtMSkucmVkdWNlKChvYmoyLCBwcm9wKSA9PiBvYmoyW3Byb3BdLCBvYmopOwogICAgICBjb25zdCByYXdWYWx1ZSA9IHBhdGgyLnJlZHVjZSgob2JqMiwgcHJvcCkgPT4gb2JqMltwcm9wXSwgb2JqKTsKICAgICAgc3dpdGNoICh0eXBlNSkgewogICAgICAgIGNhc2UgMDoKICAgICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSByYXdWYWx1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgMToKICAgICAgICAgIHsKICAgICAgICAgICAgcGFyZW50W3BhdGgyLnNsaWNlKC0xKVswXV0gPSBmcm9tV2lyZVZhbHVlKGV2LmRhdGEudmFsdWUpOwogICAgICAgICAgICByZXR1cm5WYWx1ZSA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDI6CiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gcmF3VmFsdWUuYXBwbHkocGFyZW50LCBhcmd1bWVudExpc3QpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAzOgogICAgICAgICAgewogICAgICAgICAgICBjb25zdCB2YWx1ZTIgPSBuZXcgcmF3VmFsdWUoLi4uYXJndW1lbnRMaXN0KTsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSBwcm94eSh2YWx1ZTIpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA0OgogICAgICAgICAgewogICAgICAgICAgICBjb25zdCB7IHBvcnQxLCBwb3J0MiB9ID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7CiAgICAgICAgICAgIGV4cG9zZShvYmosIHBvcnQyKTsKICAgICAgICAgICAgcmV0dXJuVmFsdWUgPSB0cmFuc2Zlcihwb3J0MSwgW3BvcnQxXSk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDU6CiAgICAgICAgICB7CiAgICAgICAgICAgIHJldHVyblZhbHVlID0gdm9pZCAwOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0gY2F0Y2ggKHZhbHVlMikgewogICAgICByZXR1cm5WYWx1ZSA9IHsgdmFsdWU6IHZhbHVlMiwgW3Rocm93TWFya2VyXTogMCB9OwogICAgfQogICAgUHJvbWlzZS5yZXNvbHZlKHJldHVyblZhbHVlKS5jYXRjaCgodmFsdWUyKSA9PiB7CiAgICAgIHJldHVybiB7IHZhbHVlOiB2YWx1ZTIsIFt0aHJvd01hcmtlcl06IDAgfTsKICAgIH0pLnRoZW4oKHJldHVyblZhbHVlMikgPT4gewogICAgICBjb25zdCBbd2lyZVZhbHVlLCB0cmFuc2ZlcmFibGVzXSA9IHRvV2lyZVZhbHVlKHJldHVyblZhbHVlMik7CiAgICAgIGVwLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSwgd2lyZVZhbHVlKSwgeyBpZCB9KSwgdHJhbnNmZXJhYmxlcyk7CiAgICAgIGlmICh0eXBlNSA9PT0gNSkgewogICAgICAgIGVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBjYWxsYmFjayk7CiAgICAgICAgY2xvc2VFbmRQb2ludChlcCk7CiAgICAgIH0KICAgIH0pOwogIH0pOwogIGlmIChlcC5zdGFydCkgewogICAgZXAuc3RhcnQoKTsKICB9Cn0KZnVuY3Rpb24gaXNNZXNzYWdlUG9ydChlbmRwb2ludCkgewogIHJldHVybiBlbmRwb2ludC5jb25zdHJ1Y3Rvci5uYW1lID09PSAiTWVzc2FnZVBvcnQiOwp9CmZ1bmN0aW9uIGNsb3NlRW5kUG9pbnQoZW5kcG9pbnQpIHsKICBpZiAoaXNNZXNzYWdlUG9ydChlbmRwb2ludCkpCiAgICBlbmRwb2ludC5jbG9zZSgpOwp9CmZ1bmN0aW9uIHdyYXA0KGVwLCB0YXJnZXQpIHsKICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIFtdLCB0YXJnZXQpOwp9CmZ1bmN0aW9uIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUmVsZWFzZWQpIHsKICBpZiAoaXNSZWxlYXNlZCkgewogICAgdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKTsKICB9Cn0KZnVuY3Rpb24gY3JlYXRlUHJveHkoZXAsIHBhdGgyID0gW10sIHRhcmdldCA9IGZ1bmN0aW9uKCkgewp9KSB7CiAgbGV0IGlzUHJveHlSZWxlYXNlZCA9IGZhbHNlOwogIGNvbnN0IHByb3h5MiA9IG5ldyBQcm94eSh0YXJnZXQsIHsKICAgIGdldChfdGFyZ2V0LCBwcm9wKSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGlmIChwcm9wID09PSByZWxlYXNlUHJveHkpIHsKICAgICAgICByZXR1cm4gKCkgPT4gewogICAgICAgICAgcmV0dXJuIHJlcXVlc3RSZXNwb25zZU1lc3NhZ2UoZXAsIHsKICAgICAgICAgICAgdHlwZTogNSwKICAgICAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSkKICAgICAgICAgIH0pLnRoZW4oKCkgPT4gewogICAgICAgICAgICBjbG9zZUVuZFBvaW50KGVwKTsKICAgICAgICAgICAgaXNQcm94eVJlbGVhc2VkID0gdHJ1ZTsKICAgICAgICAgIH0pOwogICAgICAgIH07CiAgICAgIH0KICAgICAgaWYgKHByb3AgPT09ICJ0aGVuIikgewogICAgICAgIGlmIChwYXRoMi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIHJldHVybiB7IHRoZW46ICgpID0+IHByb3h5MiB9OwogICAgICAgIH0KICAgICAgICBjb25zdCByMTEgPSByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgICB0eXBlOiAwLAogICAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSkKICAgICAgICB9KS50aGVuKGZyb21XaXJlVmFsdWUpOwogICAgICAgIHJldHVybiByMTEudGhlbi5iaW5kKHIxMSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGNyZWF0ZVByb3h5KGVwLCBbLi4ucGF0aDIsIHByb3BdKTsKICAgIH0sCiAgICBzZXQoX3RhcmdldCwgcHJvcCwgcmF3VmFsdWUpIHsKICAgICAgdGhyb3dJZlByb3h5UmVsZWFzZWQoaXNQcm94eVJlbGVhc2VkKTsKICAgICAgY29uc3QgW3ZhbHVlMiwgdHJhbnNmZXJhYmxlc10gPSB0b1dpcmVWYWx1ZShyYXdWYWx1ZSk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMSwKICAgICAgICBwYXRoOiBbLi4ucGF0aDIsIHByb3BdLm1hcCgocDcpID0+IHA3LnRvU3RyaW5nKCkpLAogICAgICAgIHZhbHVlOiB2YWx1ZTIKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0sCiAgICBhcHBseShfdGFyZ2V0LCBfdGhpc0FyZywgcmF3QXJndW1lbnRMaXN0KSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGNvbnN0IGxhc3QzID0gcGF0aDJbcGF0aDIubGVuZ3RoIC0gMV07CiAgICAgIGlmIChsYXN0MyA9PT0gY3JlYXRlRW5kcG9pbnQpIHsKICAgICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgICAgdHlwZTogNAogICAgICAgIH0pLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICAgIH0KICAgICAgaWYgKGxhc3QzID09PSAiYmluZCIpIHsKICAgICAgICByZXR1cm4gY3JlYXRlUHJveHkoZXAsIHBhdGgyLnNsaWNlKDAsIC0xKSk7CiAgICAgIH0KICAgICAgY29uc3QgW2FyZ3VtZW50TGlzdCwgdHJhbnNmZXJhYmxlc10gPSBwcm9jZXNzQXJndW1lbnRzKHJhd0FyZ3VtZW50TGlzdCk7CiAgICAgIHJldHVybiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCB7CiAgICAgICAgdHlwZTogMiwKICAgICAgICBwYXRoOiBwYXRoMi5tYXAoKHA3KSA9PiBwNy50b1N0cmluZygpKSwKICAgICAgICBhcmd1bWVudExpc3QKICAgICAgfSwgdHJhbnNmZXJhYmxlcykudGhlbihmcm9tV2lyZVZhbHVlKTsKICAgIH0sCiAgICBjb25zdHJ1Y3QoX3RhcmdldCwgcmF3QXJndW1lbnRMaXN0KSB7CiAgICAgIHRocm93SWZQcm94eVJlbGVhc2VkKGlzUHJveHlSZWxlYXNlZCk7CiAgICAgIGNvbnN0IFthcmd1bWVudExpc3QsIHRyYW5zZmVyYWJsZXNdID0gcHJvY2Vzc0FyZ3VtZW50cyhyYXdBcmd1bWVudExpc3QpOwogICAgICByZXR1cm4gcmVxdWVzdFJlc3BvbnNlTWVzc2FnZShlcCwgewogICAgICAgIHR5cGU6IDMsCiAgICAgICAgcGF0aDogcGF0aDIubWFwKChwNykgPT4gcDcudG9TdHJpbmcoKSksCiAgICAgICAgYXJndW1lbnRMaXN0CiAgICAgIH0sIHRyYW5zZmVyYWJsZXMpLnRoZW4oZnJvbVdpcmVWYWx1ZSk7CiAgICB9CiAgfSk7CiAgcmV0dXJuIHByb3h5MjsKfQpmdW5jdGlvbiBteUZsYXQoYXJyKSB7CiAgcmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sIGFycik7Cn0KZnVuY3Rpb24gcHJvY2Vzc0FyZ3VtZW50cyhhcmd1bWVudExpc3QpIHsKICBjb25zdCBwcm9jZXNzZWQgPSBhcmd1bWVudExpc3QubWFwKHRvV2lyZVZhbHVlKTsKICByZXR1cm4gW3Byb2Nlc3NlZC5tYXAoKHY1KSA9PiB2NVswXSksIG15RmxhdChwcm9jZXNzZWQubWFwKCh2NSkgPT4gdjVbMV0pKV07Cn0KZnVuY3Rpb24gdHJhbnNmZXIob2JqLCB0cmFuc2ZlcnMpIHsKICB0cmFuc2ZlckNhY2hlLnNldChvYmosIHRyYW5zZmVycyk7CiAgcmV0dXJuIG9iajsKfQpmdW5jdGlvbiBwcm94eShvYmopIHsKICByZXR1cm4gT2JqZWN0LmFzc2lnbihvYmosIHsgW3Byb3h5TWFya2VyXTogdHJ1ZSB9KTsKfQpmdW5jdGlvbiB3aW5kb3dFbmRwb2ludCh3MywgY29udGV4dDIgPSBzZWxmLCB0YXJnZXRPcmlnaW4gPSAiKiIpIHsKICByZXR1cm4gewogICAgcG9zdE1lc3NhZ2U6IChtc2csIHRyYW5zZmVyYWJsZXMpID0+IHczLnBvc3RNZXNzYWdlKG1zZywgdGFyZ2V0T3JpZ2luLCB0cmFuc2ZlcmFibGVzKSwKICAgIGFkZEV2ZW50TGlzdGVuZXI6IGNvbnRleHQyLmFkZEV2ZW50TGlzdGVuZXIuYmluZChjb250ZXh0MiksCiAgICByZW1vdmVFdmVudExpc3RlbmVyOiBjb250ZXh0Mi5yZW1vdmVFdmVudExpc3RlbmVyLmJpbmQoY29udGV4dDIpCiAgfTsKfQpmdW5jdGlvbiB0b1dpcmVWYWx1ZSh2YWx1ZTIpIHsKICBmb3IgKGNvbnN0IFtuYW1lLCBoYW5kbGVyMl0gb2YgdHJhbnNmZXJIYW5kbGVycykgewogICAgaWYgKGhhbmRsZXIyLmNhbkhhbmRsZSh2YWx1ZTIpKSB7CiAgICAgIGNvbnN0IFtzZXJpYWxpemVkVmFsdWUsIHRyYW5zZmVyYWJsZXNdID0gaGFuZGxlcjIuc2VyaWFsaXplKHZhbHVlMik7CiAgICAgIHJldHVybiBbCiAgICAgICAgewogICAgICAgICAgdHlwZTogMywKICAgICAgICAgIG5hbWUsCiAgICAgICAgICB2YWx1ZTogc2VyaWFsaXplZFZhbHVlCiAgICAgICAgfSwKICAgICAgICB0cmFuc2ZlcmFibGVzCiAgICAgIF07CiAgICB9CiAgfQogIHJldHVybiBbCiAgICB7CiAgICAgIHR5cGU6IDAsCiAgICAgIHZhbHVlOiB2YWx1ZTIKICAgIH0sCiAgICB0cmFuc2ZlckNhY2hlLmdldCh2YWx1ZTIpIHx8IFtdCiAgXTsKfQpmdW5jdGlvbiBmcm9tV2lyZVZhbHVlKHZhbHVlMikgewogIHN3aXRjaCAodmFsdWUyLnR5cGUpIHsKICAgIGNhc2UgMzoKICAgICAgcmV0dXJuIHRyYW5zZmVySGFuZGxlcnMuZ2V0KHZhbHVlMi5uYW1lKS5kZXNlcmlhbGl6ZSh2YWx1ZTIudmFsdWUpOwogICAgY2FzZSAwOgogICAgICByZXR1cm4gdmFsdWUyLnZhbHVlOwogIH0KfQpmdW5jdGlvbiByZXF1ZXN0UmVzcG9uc2VNZXNzYWdlKGVwLCBtc2csIHRyYW5zZmVycykgewogIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHsKICAgIGNvbnN0IGlkID0gZ2VuZXJhdGVVVUlEKCk7CiAgICBlcC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwgZnVuY3Rpb24gbDYoZXYpIHsKICAgICAgaWYgKCFldi5kYXRhIHx8ICFldi5kYXRhLmlkIHx8IGV2LmRhdGEuaWQgIT09IGlkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGVwLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCBsNik7CiAgICAgIHJlc29sdmUyKGV2LmRhdGEpOwogICAgfSk7CiAgICBpZiAoZXAuc3RhcnQpIHsKICAgICAgZXAuc3RhcnQoKTsKICAgIH0KICAgIGVwLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oeyBpZCB9LCBtc2cpLCB0cmFuc2ZlcnMpOwogIH0pOwp9CmZ1bmN0aW9uIGdlbmVyYXRlVVVJRCgpIHsKICByZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpID0+IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKTsKfQp2YXIgX19kZWZQcm9wMiwgX19leHBvcnQyLCBjb21saW5rX2V4cG9ydHMsIHByb3h5TWFya2VyLCBjcmVhdGVFbmRwb2ludCwgcmVsZWFzZVByb3h5LCB0aHJvd01hcmtlciwgaXNPYmplY3QyLCBwcm94eVRyYW5zZmVySGFuZGxlciwgdGhyb3dUcmFuc2ZlckhhbmRsZXIsIHRyYW5zZmVySGFuZGxlcnMsIHRyYW5zZmVyQ2FjaGU7CnZhciBpbml0X3ZlbmRvciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3ZlbmRvci9pbmRleC5qcyIoKSB7CiAgICBfX2RlZlByb3AyID0gT2JqZWN0LmRlZmluZVByb3BlcnR5OwogICAgX19leHBvcnQyID0gKHRhcmdldCwgYWxsMykgPT4gewogICAgICBmb3IgKHZhciBuYW1lIGluIGFsbDMpCiAgICAgICAgX19kZWZQcm9wMih0YXJnZXQsIG5hbWUsIHsgZ2V0OiBhbGwzW25hbWVdLCBlbnVtZXJhYmxlOiB0cnVlIH0pOwogICAgfTsKICAgIGNvbWxpbmtfZXhwb3J0cyA9IHt9OwogICAgX19leHBvcnQyKGNvbWxpbmtfZXhwb3J0cywgewogICAgICBjcmVhdGVFbmRwb2ludDogKCkgPT4gY3JlYXRlRW5kcG9pbnQsCiAgICAgIGV4cG9zZTogKCkgPT4gZXhwb3NlLAogICAgICBwcm94eTogKCkgPT4gcHJveHksCiAgICAgIHByb3h5TWFya2VyOiAoKSA9PiBwcm94eU1hcmtlciwKICAgICAgcmVsZWFzZVByb3h5OiAoKSA9PiByZWxlYXNlUHJveHksCiAgICAgIHRyYW5zZmVyOiAoKSA9PiB0cmFuc2ZlciwKICAgICAgdHJhbnNmZXJIYW5kbGVyczogKCkgPT4gdHJhbnNmZXJIYW5kbGVycywKICAgICAgd2luZG93RW5kcG9pbnQ6ICgpID0+IHdpbmRvd0VuZHBvaW50LAogICAgICB3cmFwOiAoKSA9PiB3cmFwNAogICAgfSk7CiAgICBwcm94eU1hcmtlciA9IC8qIEBfX1BVUkVfXyAqLyBTeW1ib2woIkNvbWxpbmsucHJveHkiKTsKICAgIGNyZWF0ZUVuZHBvaW50ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpOwogICAgcmVsZWFzZVByb3h5ID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKTsKICAgIHRocm93TWFya2VyID0gLyogQF9fUFVSRV9fICovIFN5bWJvbCgiQ29tbGluay50aHJvd24iKTsKICAgIGlzT2JqZWN0MiA9ICh2YWwpID0+IHR5cGVvZiB2YWwgPT09ICJvYmplY3QiICYmIHZhbCAhPT0gbnVsbCB8fCB0eXBlb2YgdmFsID09PSAiZnVuY3Rpb24iOwogICAgcHJveHlUcmFuc2ZlckhhbmRsZXIgPSB7CiAgICAgIGNhbkhhbmRsZTogKHZhbCkgPT4gaXNPYmplY3QyKHZhbCkgJiYgdmFsW3Byb3h5TWFya2VyXSwKICAgICAgc2VyaWFsaXplKG9iaikgewogICAgICAgIGNvbnN0IHsgcG9ydDEsIHBvcnQyIH0gPSBuZXcgTWVzc2FnZUNoYW5uZWwoKTsKICAgICAgICBleHBvc2Uob2JqLCBwb3J0MSk7CiAgICAgICAgcmV0dXJuIFtwb3J0MiwgW3BvcnQyXV07CiAgICAgIH0sCiAgICAgIGRlc2VyaWFsaXplKHBvcnQpIHsKICAgICAgICBwb3J0LnN0YXJ0KCk7CiAgICAgICAgcmV0dXJuIHdyYXA0KHBvcnQpOwogICAgICB9CiAgICB9OwogICAgdGhyb3dUcmFuc2ZlckhhbmRsZXIgPSB7CiAgICAgIGNhbkhhbmRsZTogKHZhbHVlMikgPT4gaXNPYmplY3QyKHZhbHVlMikgJiYgdGhyb3dNYXJrZXIgaW4gdmFsdWUyLAogICAgICBzZXJpYWxpemUoeyB2YWx1ZTogdmFsdWUyIH0pIHsKICAgICAgICBsZXQgc2VyaWFsaXplZDsKICAgICAgICBpZiAodmFsdWUyIGluc3RhbmNlb2YgRXJyb3IpIHsKICAgICAgICAgIHNlcmlhbGl6ZWQgPSB7CiAgICAgICAgICAgIGlzRXJyb3I6IHRydWUsCiAgICAgICAgICAgIHZhbHVlOiB7CiAgICAgICAgICAgICAgbWVzc2FnZTogdmFsdWUyLm1lc3NhZ2UsCiAgICAgICAgICAgICAgbmFtZTogdmFsdWUyLm5hbWUsCiAgICAgICAgICAgICAgc3RhY2s6IHZhbHVlMi5zdGFjawogICAgICAgICAgICB9CiAgICAgICAgICB9OwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXJpYWxpemVkID0geyBpc0Vycm9yOiBmYWxzZSwgdmFsdWU6IHZhbHVlMiB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gW3NlcmlhbGl6ZWQsIFtdXTsKICAgICAgfSwKICAgICAgZGVzZXJpYWxpemUoc2VyaWFsaXplZCkgewogICAgICAgIGlmIChzZXJpYWxpemVkLmlzRXJyb3IpIHsKICAgICAgICAgIHRocm93IE9iamVjdC5hc3NpZ24obmV3IEVycm9yKHNlcmlhbGl6ZWQudmFsdWUubWVzc2FnZSksIHNlcmlhbGl6ZWQudmFsdWUpOwogICAgICAgIH0KICAgICAgICB0aHJvdyBzZXJpYWxpemVkLnZhbHVlOwogICAgICB9CiAgICB9OwogICAgdHJhbnNmZXJIYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKFsKICAgICAgWyJwcm94eSIsIHByb3h5VHJhbnNmZXJIYW5kbGVyXSwKICAgICAgWyJ0aHJvdyIsIHRocm93VHJhbnNmZXJIYW5kbGVyXQogICAgXSk7CiAgICB0cmFuc2ZlckNhY2hlID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy9yZWxvYWQtcHJldmlldy5qcwp2YXIgaW5pdF9yZWxvYWRfcHJldmlldyA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL3JlbG9hZC1wcmV2aWV3LmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2lzLXByZXZpZXctbWVzc2FnZS5qcwpmdW5jdGlvbiBpc1ByZXZpZXdNZXNzYWdlKGRhdGEpIHsKICBpZiAoZGF0YSA9PSBudWxsIHx8IHR5cGVvZiBkYXRhICE9PSAib2JqZWN0IikgewogICAgcmV0dXJuIGZhbHNlOwogIH0KICBpZiAoISgidHlwZSIgaW4gZGF0YSkgfHwgIVBSRVZJRVdfTUVTU0FHRV9UWVBFUy5pbmNsdWRlcyhkYXRhLnR5cGUpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHJldHVybiB0cnVlOwp9CnZhciBQUkVWSUVXX01FU1NBR0VfVFlQRVM7CnZhciBpbml0X2lzX3ByZXZpZXdfbWVzc2FnZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2lzLXByZXZpZXctbWVzc2FnZS5qcyIoKSB7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgUFJFVklFV19NRVNTQUdFX1RZUEVTID0gWwogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUuQ29uc29sZUVycm9yLAogICAgICBQcmV2aWV3TWVzc2FnZVR5cGUuVW5jYXVnaHRFeGNlcHRpb24sCiAgICAgIFByZXZpZXdNZXNzYWdlVHlwZS5VbmhhbmRsZWRSZWplY3Rpb24KICAgIF07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy5qcwp2YXIgaW5pdF91dGlsczIgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AdGVtcGZpeCt3ZWJjb250YWluZXJfX2FwaUAxLjYuMS9ub2RlX21vZHVsZXMvQHRlbXBmaXgvd2ViY29udGFpbmVyX19hcGkvZGlzdC91dGlscy5qcyIoKSB7CiAgICBpbml0X3JlbG9hZF9wcmV2aWV3KCk7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgaW5pdF9pc19wcmV2aWV3X21lc3NhZ2UoKTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL251bGwtcHJvdG90eXBlLmpzCmZ1bmN0aW9uIG51bGxQcm90b3R5cGUoc291cmNlKSB7CiAgY29uc3QgcHJvdG90eXBlID0gLyogQF9fUFVSRV9fICovIE9iamVjdC5jcmVhdGUobnVsbCk7CiAgaWYgKCFzb3VyY2UpIHsKICAgIHJldHVybiBwcm90b3R5cGU7CiAgfQogIHJldHVybiBPYmplY3QuYXNzaWduKHByb3RvdHlwZSwgc291cmNlKTsKfQp2YXIgaW5pdF9udWxsX3Byb3RvdHlwZSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL251bGwtcHJvdG90eXBlLmpzIigpIHsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2ZpbGUtc3lzdGVtLmpzCmZ1bmN0aW9uIHRvSW50ZXJuYWxGaWxlU3lzdGVtVHJlZSh0cmVlKSB7CiAgY29uc3QgbmV3VHJlZSA9IHsgZDoge30gfTsKICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModHJlZSkpIHsKICAgIGNvbnN0IGVudHJ5ID0gdHJlZVtuYW1lXTsKICAgIGlmICgiZmlsZSIgaW4gZW50cnkpIHsKICAgICAgaWYgKCJzeW1saW5rIiBpbiBlbnRyeS5maWxlKSB7CiAgICAgICAgbmV3VHJlZS5kW25hbWVdID0geyBmOiB7IGw6IGVudHJ5LmZpbGUuc3ltbGluayB9IH07CiAgICAgICAgY29udGludWU7CiAgICAgIH0KICAgICAgY29uc3QgY29udGVudHMgPSBlbnRyeS5maWxlLmNvbnRlbnRzOwogICAgICBjb25zdCBzdHJpbmdDb250ZW50cyA9IHR5cGVvZiBjb250ZW50cyA9PT0gInN0cmluZyIgPyBjb250ZW50cyA6IGJpbmFyeURlY29kZXIuZGVjb2RlKGNvbnRlbnRzKTsKICAgICAgY29uc3QgYmluYXJ5ID0gdHlwZW9mIGNvbnRlbnRzID09PSAic3RyaW5nIiA/IHt9IDogeyBiOiB0cnVlIH07CiAgICAgIG5ld1RyZWUuZFtuYW1lXSA9IHsgZjogeyBjOiBzdHJpbmdDb250ZW50cywgLi4uYmluYXJ5IH0gfTsKICAgICAgY29udGludWU7CiAgICB9CiAgICBjb25zdCBuZXdFbnRyeSA9IHRvSW50ZXJuYWxGaWxlU3lzdGVtVHJlZShlbnRyeS5kaXJlY3RvcnkpOwogICAgbmV3VHJlZS5kW25hbWVdID0gbmV3RW50cnk7CiAgfQogIHJldHVybiBuZXdUcmVlOwp9CmZ1bmN0aW9uIHRvRXh0ZXJuYWxGaWxlU3lzdGVtVHJlZSh0cmVlKSB7CiAgY29uc3QgbmV3VHJlZSA9IG51bGxQcm90b3R5cGUoKTsKICBpZiAoImYiIGluIHRyZWUpIHsKICAgIHRocm93IG5ldyBFcnJvcigiSXQgaXMgbm90IHBvc3NpYmxlIHRvIGV4cG9ydCBhIHNpbmdsZSBmaWxlIGluIHRoZSBKU09OIGZvcm1hdC4iKTsKICB9CiAgaWYgKCJkIiBpbiB0cmVlKSB7CiAgICBmb3IgKGNvbnN0IG5hbWUgb2YgT2JqZWN0LmtleXModHJlZS5kKSkgewogICAgICBjb25zdCBlbnRyeSA9IHRyZWUuZFtuYW1lXTsKICAgICAgaWYgKCJkIiBpbiBlbnRyeSkgewogICAgICAgIG5ld1RyZWVbbmFtZV0gPSBudWxsUHJvdG90eXBlKHsKICAgICAgICAgIGRpcmVjdG9yeTogdG9FeHRlcm5hbEZpbGVTeXN0ZW1UcmVlKGVudHJ5KQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKCJmIiBpbiBlbnRyeSkgewogICAgICAgIGlmICgiYyIgaW4gZW50cnkuZikgewogICAgICAgICAgbmV3VHJlZVtuYW1lXSA9IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICBmaWxlOiBudWxsUHJvdG90eXBlKHsKICAgICAgICAgICAgICBjb250ZW50czogZW50cnkuZi5iID8gZnJvbUJpbmFyeVN0cmluZyhlbnRyeS5mLmMpIDogZW50cnkuZi5jCiAgICAgICAgICAgIH0pCiAgICAgICAgICB9KTsKICAgICAgICB9IGVsc2UgaWYgKCJsIiBpbiBlbnRyeS5mKSB7CiAgICAgICAgICBuZXdUcmVlW25hbWVdID0gbnVsbFByb3RvdHlwZSh7CiAgICAgICAgICAgIGZpbGU6IG51bGxQcm90b3R5cGUoewogICAgICAgICAgICAgIHN5bWxpbms6IGVudHJ5LmYubAogICAgICAgICAgICB9KQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgfQogIHJldHVybiBuZXdUcmVlOwp9CmZ1bmN0aW9uIGZyb21CaW5hcnlTdHJpbmcoczkpIHsKICBjb25zdCBlbmNvZGVkID0gbmV3IFVpbnQ4QXJyYXkoczkubGVuZ3RoKTsKICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBzOS5sZW5ndGg7IGkxMSsrKSB7CiAgICBlbmNvZGVkW2kxMV0gPSBzOVtpMTFdLmNoYXJDb2RlQXQoMCk7CiAgfQogIHJldHVybiBlbmNvZGVkOwp9CnZhciBiaW5hcnlEZWNvZGVyOwp2YXIgaW5pdF9maWxlX3N5c3RlbSA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0B0ZW1wZml4K3dlYmNvbnRhaW5lcl9fYXBpQDEuNi4xL25vZGVfbW9kdWxlcy9AdGVtcGZpeC93ZWJjb250YWluZXJfX2FwaS9kaXN0L3V0aWxzL2ZpbGUtc3lzdGVtLmpzIigpIHsKICAgIGluaXRfbnVsbF9wcm90b3R5cGUoKTsKICAgIGJpbmFyeURlY29kZXIgPSBuZXcgVGV4dERlY29kZXIoImxhdGluMSIpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMKZnVuY3Rpb24gY29uZmlndXJlQVBJS2V5KGtleTIpIHsKICBpZiAoYXV0aFN0YXRlLmJvb3RDYWxsZWQpIHsKICAgIHRocm93IG5ldyBFcnJvcigiYGNvbmZpZ3VyZUFQSUtleWAgc2hvdWxkIGFsd2F5cyBiZSBjYWxsZWQgYmVmb3JlIGBXZWJDb250YWluZXIuYm9vdGAiKTsKICB9CiAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiY2xpZW50X2lkIiwga2V5Mik7Cn0KYXN5bmMgZnVuY3Rpb24gdW5zeW5jaHJvbml6ZWRCb290KG9wdGlvbnMpIHsKICBjb25zdCB7IHNlcnZlclByb21pc2UgfSA9IHNlcnZlckZhY3Rvcnkob3B0aW9ucyk7CiAgY29uc3Qgc2VydmVyID0gYXdhaXQgc2VydmVyUHJvbWlzZTsKICBjb25zdCBpbnN0YW5jZSA9IGF3YWl0IHNlcnZlci5idWlsZCh7CiAgICBob3N0OiB3aW5kb3cubG9jYXRpb24uaG9zdCwKICAgIHZlcnNpb246ICIxLjYuMSIsCiAgICB3b3JrZGlyTmFtZTogb3B0aW9ucy53b3JrZGlyTmFtZSwKICAgIGZvcndhcmRQcmV2aWV3RXJyb3JzOiBvcHRpb25zLmZvcndhcmRQcmV2aWV3RXJyb3JzCiAgfSk7CiAgY29uc3QgW2ZzLCBwcmV2aWV3U2NyaXB0LCBydW50aW1lSW5mb10gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICBpbnN0YW5jZS5mcygpLAogICAgaW5zdGFuY2UucHJldmlld1NjcmlwdCgpLAogICAgaW5zdGFuY2UucnVudGltZUluZm8oKQogIF0pOwogIHJldHVybiBuZXcgV2ViQ29udGFpbmVyKGluc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgcnVudGltZUluZm8pOwp9CmZ1bmN0aW9uIGJpbmFyeUxpc3RlbmVyKGxpc3RlbmVyMikgewogIGlmIChsaXN0ZW5lcjIgPT0gbnVsbCkgewogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgcmV0dXJuIChkYXRhKSA9PiB7CiAgICBpZiAoZGF0YSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHsKICAgICAgbGlzdGVuZXIyKGRlY29kZXIuZGVjb2RlKGRhdGEpKTsKICAgIH0gZWxzZSBpZiAoZGF0YSA9PSBudWxsKSB7CiAgICAgIGxpc3RlbmVyMihudWxsKTsKICAgIH0KICB9Owp9CmZ1bmN0aW9uIHByb3h5TGlzdGVuZXIobGlzdGVuZXIyKSB7CiAgaWYgKGxpc3RlbmVyMiA9PSBudWxsKSB7CiAgICByZXR1cm4gdm9pZCAwOwogIH0KICByZXR1cm4gY29tbGlua19leHBvcnRzLnByb3h5KGxpc3RlbmVyMik7Cn0KZnVuY3Rpb24gc2VydmVyRmFjdG9yeShvcHRpb25zKSB7CiAgaWYgKGNhY2hlZFNlcnZlclByb21pc2UgIT0gbnVsbCkgewogICAgaWYgKG9wdGlvbnMuY29lcCAhPT0gY2FjaGVkQm9vdE9wdGlvbnMuY29lcCkgewogICAgICBjb25zb2xlLndhcm4oYEF0dGVtcHRpbmcgdG8gYm9vdCBXZWJDb250YWluZXIgd2l0aCAnY29lcDogJHtvcHRpb25zLmNvZXB9J2ApOwogICAgICBjb25zb2xlLndhcm4oYEZpcnN0IGJvb3QgaGFkICdjb2VwOiAke2NhY2hlZEJvb3RPcHRpb25zLmNvZXB9JywgbmV3IHNldHRpbmdzIHdpbGwgbm90IHRha2UgZWZmZWN0IWApOwogICAgfQogICAgcmV0dXJuIHsgc2VydmVyUHJvbWlzZTogY2FjaGVkU2VydmVyUHJvbWlzZSB9OwogIH0KICBpZiAob3B0aW9ucy5jb2VwKSB7CiAgICBpZnJhbWVTZXR0aW5ncy5zZXRRdWVyeVBhcmFtKCJjb2VwIiwgb3B0aW9ucy5jb2VwKTsKICB9CiAgaWYgKG9wdGlvbnMuZXhwZXJpbWVudGFsTm9kZSkgewogICAgaWZyYW1lU2V0dGluZ3Muc2V0UXVlcnlQYXJhbSgiZXhwZXJpbWVudGFsX25vZGUiLCAiMSIpOwogIH0KICBjb25zdCBpZnJhbWUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpZnJhbWUiKTsKICBpZnJhbWUuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICBpZnJhbWUuc2V0QXR0cmlidXRlKCJhbGxvdyIsICJjcm9zcy1vcmlnaW4taXNvbGF0ZWQiKTsKICBjb25zdCB1cmwgPSBpZnJhbWVTZXR0aW5ncy51cmw7CiAgaWZyYW1lLnNyYyA9IHVybC50b1N0cmluZygpOwogIGNvbnN0IHsgb3JpZ2luIH0gPSB1cmw7CiAgY2FjaGVkQm9vdE9wdGlvbnMgPSB7IC4uLm9wdGlvbnMgfTsKICBjYWNoZWRTZXJ2ZXJQcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICBjb25zdCBvbk1lc3NhZ2U1ID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5vcmlnaW4gIT09IG9yaWdpbikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB7IGRhdGEgfSA9IGV2ZW50OwogICAgICBpZiAoZGF0YS50eXBlID09PSAiaW5pdCIpIHsKICAgICAgICByZXNvbHZlMihjb21saW5rX2V4cG9ydHMud3JhcChldmVudC5wb3J0c1swXSkpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZGF0YS50eXBlID09PSAid2FybmluZyIpIHsKICAgICAgICBjb25zb2xlW2RhdGEubGV2ZWxdLmNhbGwoY29uc29sZSwgZGF0YS5tZXNzYWdlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH07CiAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsIG9uTWVzc2FnZTUpOwogIH0pOwogIGRvY3VtZW50LmJvZHkuaW5zZXJ0QmVmb3JlKGlmcmFtZSwgbnVsbCk7CiAgcmV0dXJuIHsgc2VydmVyUHJvbWlzZTogY2FjaGVkU2VydmVyUHJvbWlzZSB9Owp9CmZ1bmN0aW9uIGlzU3RyaW5nQXJyYXkobGlzdDUpIHsKICByZXR1cm4gdHlwZW9mIGxpc3Q1WzBdID09PSAic3RyaW5nIjsKfQpmdW5jdGlvbiBpc1R5cGVkQXJyYXlDb2xsZWN0aW9uKGxpc3Q1KSB7CiAgcmV0dXJuIGxpc3Q1WzBdIGluc3RhbmNlb2YgVWludDhBcnJheTsKfQpmdW5jdGlvbiBzdHJlYW1XaXRoUHVzaCgpIHsKICBsZXQgY29udHJvbGxlciA9IG51bGw7CiAgY29uc3Qgc3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKHsKICAgIHN0YXJ0KGNvbnRyb2xsZXJfKSB7CiAgICAgIGNvbnRyb2xsZXIgPSBjb250cm9sbGVyXzsKICAgIH0KICB9KTsKICBjb25zdCBwdXNoMiA9IChpdGVtKSA9PiB7CiAgICBpZiAoaXRlbSAhPSBudWxsKSB7CiAgICAgIGNvbnRyb2xsZXI/LmVucXVldWUoaXRlbSk7CiAgICB9IGVsc2UgewogICAgICBjb250cm9sbGVyPy5jbG9zZSgpOwogICAgICBjb250cm9sbGVyID0gbnVsbDsKICAgIH0KICB9OwogIHJldHVybiB7IHN0cmVhbSwgcHVzaDogcHVzaDIgfTsKfQpmdW5jdGlvbiBzeW5jU3Vic2NyaXB0aW9uKGxpc3RlbmVyMikgewogIGxldCBzdG9wcGVkID0gZmFsc2U7CiAgbGV0IHVuc3Vic2NyaWJlID0gKCkgPT4gewogIH07CiAgY29uc3Qgd3JhcHBlZCA9ICgoLi4uYXJncykgPT4gewogICAgaWYgKHN0b3BwZWQpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgbGlzdGVuZXIyKC4uLmFyZ3MpOwogIH0pOwogIHJldHVybiB7CiAgICBzdWJzY3JpYmUocHJvbWlzZSkgewogICAgICBwcm9taXNlLnRoZW4oKHVuc3Vic2NyaWJlXykgPT4gewogICAgICAgIHVuc3Vic2NyaWJlID0gdW5zdWJzY3JpYmVfOwogICAgICAgIGlmIChzdG9wcGVkKSB7CiAgICAgICAgICB1bnN1YnNjcmliZSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHJldHVybiAoKSA9PiB7CiAgICAgICAgc3RvcHBlZCA9IHRydWU7CiAgICAgICAgdW5zdWJzY3JpYmUoKTsKICAgICAgfTsKICAgIH0sCiAgICBsaXN0ZW5lcjogd3JhcHBlZAogIH07Cn0KdmFyIGF1dGgyLCBib290UHJvbWlzZSwgY2FjaGVkU2VydmVyUHJvbWlzZSwgY2FjaGVkQm9vdE9wdGlvbnMsIGRlY29kZXIsIGVuY29kZXIsIFdlYkNvbnRhaW5lciwgRElSX0VOVFJZX1RZUEVfRklMRSwgRElSX0VOVFJZX1RZUEVfRElSLCBEaXJFbnRJbXBsLCBGU1dhdGNoZXIsIFdlYkNvbnRhaW5lclByb2Nlc3NJbXBsLCBGaWxlU3lzdGVtQVBJQ2xpZW50Owp2YXIgaW5pdF9kaXN0ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQHRlbXBmaXgrd2ViY29udGFpbmVyX19hcGlAMS42LjEvbm9kZV9tb2R1bGVzL0B0ZW1wZml4L3dlYmNvbnRhaW5lcl9fYXBpL2Rpc3QvaW5kZXguanMiKCkgewogICAgaW5pdF9hdXRoX3N0YXRlKCk7CiAgICBpbml0X3ByZXZpZXdfbWVzc2FnZV90eXBlcygpOwogICAgaW5pdF92ZW5kb3IoKTsKICAgIGluaXRfYXV0aF9zdGF0ZSgpOwogICAgaW5pdF90b2tlbnMoKTsKICAgIGluaXRfaWZyYW1lX3VybCgpOwogICAgaW5pdF91dGlsczIoKTsKICAgIGluaXRfZmlsZV9zeXN0ZW0oKTsKICAgIGluaXRfdXRpbHMyKCk7CiAgICBhdXRoMiA9IGF1dGg7CiAgICBib290UHJvbWlzZSA9IG51bGw7CiAgICBjYWNoZWRTZXJ2ZXJQcm9taXNlID0gbnVsbDsKICAgIGNhY2hlZEJvb3RPcHRpb25zID0ge307CiAgICBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKCk7CiAgICBlbmNvZGVyID0gbmV3IFRleHRFbmNvZGVyKCk7CiAgICBXZWJDb250YWluZXIgPSBjbGFzcyBfV2ViQ29udGFpbmVyIHsKICAgICAgX2luc3RhbmNlOwogICAgICBfcnVudGltZUluZm87CiAgICAgIC8qKgogICAgICAgKiBHaXZlcyBhY2Nlc3MgdG8gdGhlIHVuZGVybHlpbmcgZmlsZSBzeXN0ZW0uCiAgICAgICAqLwogICAgICBmczsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX2luc3RhbmNlID0gbnVsbDsKICAgICAgLyoqIEBpbnRlcm5hbCAqLwogICAgICBzdGF0aWMgX3RlYXJkb3duUHJvbWlzZSA9IG51bGw7CiAgICAgIF90b3JuRG93biA9IGZhbHNlOwogICAgICBfdW5zdWJzY3JpYmVGcm9tVG9rZW5DaGFuZ2VkTGlzdGVuZXIgPSAoKSA9PiB7CiAgICAgIH07CiAgICAgIC8qKiBAaW50ZXJuYWwgKi8KICAgICAgY29uc3RydWN0b3IoX2luc3RhbmNlLCBmcywgcHJldmlld1NjcmlwdCwgX3J1bnRpbWVJbmZvKSB7CiAgICAgICAgdGhpcy5faW5zdGFuY2UgPSBfaW5zdGFuY2U7CiAgICAgICAgdGhpcy5fcnVudGltZUluZm8gPSBfcnVudGltZUluZm87CiAgICAgICAgdGhpcy5mcyA9IG5ldyBGaWxlU3lzdGVtQVBJQ2xpZW50KGZzKTsKICAgICAgICBpZiAoYXV0aFN0YXRlLmluaXRpYWxpemVkKSB7CiAgICAgICAgICB0aGlzLl91bnN1YnNjcmliZUZyb21Ub2tlbkNoYW5nZWRMaXN0ZW5lciA9IGFkZEFjY2Vzc1Rva2VuQ2hhbmdlZExpc3RlbmVyKChhY2Nlc3NUb2tlbikgPT4gewogICAgICAgICAgICB0aGlzLl9pbnN0YW5jZS5zZXRDcmVkZW50aWFscyh7IGFjY2Vzc1Rva2VuLCBlZGl0b3JPcmlnaW46IGF1dGhTdGF0ZS5lZGl0b3JPcmlnaW4gfSk7CiAgICAgICAgICB9KTsKICAgICAgICAgIChhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGF3YWl0IGF1dGhTdGF0ZS5hdXRoQ29tcGxldGUucHJvbWlzZTsKICAgICAgICAgICAgaWYgKHRoaXMuX3Rvcm5Eb3duKSB7CiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICB9CiAgICAgICAgICAgIGFzc2VydEF1dGhUb2tlbnMoYXV0aFN0YXRlLnRva2Vucyk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luc3RhbmNlLnNldENyZWRlbnRpYWxzKHsKICAgICAgICAgICAgICBhY2Nlc3NUb2tlbjogYXV0aFN0YXRlLnRva2Vucy5hY2Nlc3MsCiAgICAgICAgICAgICAgZWRpdG9yT3JpZ2luOiBhdXRoU3RhdGUuZWRpdG9yT3JpZ2luCiAgICAgICAgICAgIH0pOwogICAgICAgICAgfSkoKS5jYXRjaCgoZXJyb3IpID0+IHsKICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnJvcik7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgc3Bhd24oY29tbWFuZCwgb3B0aW9uc09yQXJncywgb3B0aW9ucykgewogICAgICAgIGxldCBhcmdzID0gW107CiAgICAgICAgaWYgKEFycmF5LmlzQXJyYXkob3B0aW9uc09yQXJncykpIHsKICAgICAgICAgIGFyZ3MgPSBvcHRpb25zT3JBcmdzOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBvcHRpb25zID0gb3B0aW9uc09yQXJnczsKICAgICAgICB9CiAgICAgICAgbGV0IG91dHB1dCA9IHZvaWQgMDsKICAgICAgICBsZXQgb3V0cHV0U3RyZWFtID0gbmV3IFJlYWRhYmxlU3RyZWFtKCk7CiAgICAgICAgaWYgKG9wdGlvbnM/Lm91dHB1dCAhPT0gZmFsc2UpIHsKICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IHN0cmVhbVdpdGhQdXNoKCk7CiAgICAgICAgICBvdXRwdXQgPSByZXN1bHQucHVzaDsKICAgICAgICAgIG91dHB1dFN0cmVhbSA9IHJlc3VsdC5zdHJlYW07CiAgICAgICAgfQogICAgICAgIGxldCBzdGRvdXQgPSB2b2lkIDA7CiAgICAgICAgbGV0IHN0ZG91dFN0cmVhbTsKICAgICAgICBsZXQgc3RkZXJyID0gdm9pZCAwOwogICAgICAgIGxldCBzdGRlcnJTdHJlYW07CiAgICAgICAgY29uc3Qgd3JhcHBlZE91dHB1dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIob3V0cHV0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZG91dCA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3Rkb3V0KSk7CiAgICAgICAgY29uc3Qgd3JhcHBlZFN0ZGVyciA9IHByb3h5TGlzdGVuZXIoYmluYXJ5TGlzdGVuZXIoc3RkZXJyKSk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5ydW4oewogICAgICAgICAgY29tbWFuZCwKICAgICAgICAgIGFyZ3MsCiAgICAgICAgICBjd2Q6IG9wdGlvbnM/LmN3ZCwKICAgICAgICAgIGVudjogb3B0aW9ucz8uZW52LAogICAgICAgICAgdGVybWluYWw6IG9wdGlvbnM/LnRlcm1pbmFsCiAgICAgICAgfSwgd3JhcHBlZFN0ZG91dCwgd3JhcHBlZFN0ZGVyciwgd3JhcHBlZE91dHB1dCk7CiAgICAgICAgcmV0dXJuIG5ldyBXZWJDb250YWluZXJQcm9jZXNzSW1wbChwcm9jZXNzNCwgb3V0cHV0U3RyZWFtLCBzdGRvdXRTdHJlYW0sIHN0ZGVyclN0cmVhbSk7CiAgICAgIH0KICAgICAgYXN5bmMgZXhwb3J0KHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3Qgc2VyaWFsaXplT3B0aW9ucyA9IHsKICAgICAgICAgIGZvcm1hdDogb3B0aW9ucz8uZm9ybWF0ID8/ICJqc29uIiwKICAgICAgICAgIGluY2x1ZGVzOiBvcHRpb25zPy5pbmNsdWRlcywKICAgICAgICAgIGV4Y2x1ZGVzOiBvcHRpb25zPy5leGNsdWRlcywKICAgICAgICAgIGV4dGVybmFsOiB0cnVlCiAgICAgICAgfTsKICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLl9pbnN0YW5jZS5zZXJpYWxpemUocGF0aDIsIHNlcmlhbGl6ZU9wdGlvbnMpOwogICAgICAgIGlmIChzZXJpYWxpemVPcHRpb25zLmZvcm1hdCA9PT0gImpzb24iKSB7CiAgICAgICAgICBjb25zdCBkYXRhID0gSlNPTi5wYXJzZShkZWNvZGVyLmRlY29kZShyZXN1bHQpKTsKICAgICAgICAgIHJldHVybiB0b0V4dGVybmFsRmlsZVN5c3RlbVRyZWUoZGF0YSk7CiAgICAgICAgfQogICAgICAgIHJldHVybiByZXN1bHQ7CiAgICAgIH0KICAgICAgb24oZXZlbnQsIGxpc3RlbmVyMikgewogICAgICAgIGlmIChldmVudCA9PT0gInByZXZpZXctbWVzc2FnZSIpIHsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsTGlzdGVuZXIgPSBsaXN0ZW5lcjI7CiAgICAgICAgICBsaXN0ZW5lcjIgPSAoKG1lc3NhZ2UyKSA9PiB7CiAgICAgICAgICAgIGlmIChpc1ByZXZpZXdNZXNzYWdlKG1lc3NhZ2UyKSkgewogICAgICAgICAgICAgIG9yaWdpbmFsTGlzdGVuZXIobWVzc2FnZTIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgY29uc3QgeyBsaXN0ZW5lcjogd3JhcHBlZCwgc3Vic2NyaWJlOiBzdWJzY3JpYmUyIH0gPSBzeW5jU3Vic2NyaXB0aW9uKGxpc3RlbmVyMik7CiAgICAgICAgcmV0dXJuIHN1YnNjcmliZTIodGhpcy5faW5zdGFuY2Uub24oZXZlbnQsIGNvbWxpbmtfZXhwb3J0cy5wcm94eSh3cmFwcGVkKSkpOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBNb3VudHMgYSB0cmVlIG9mIGZpbGVzIGludG8gdGhlIGZpbGVzeXN0ZW0uIFRoaXMgY2FuIGJlIHNwZWNpZmllZCBhcyBhIHRyZWUgb2JqZWN0ICh7QGxpbmsgRmlsZVN5c3RlbVRyZWV9KQogICAgICAgKiBvciBhcyBhIGJpbmFyeSBzbmFwc2hvdCBnZW5lcmF0ZWQgYnkgW2BAd2ViY29udGFpbmVyL3NuYXBzaG90YF0oaHR0cHM6Ly93d3cubnBtanMuY29tL3BhY2thZ2UvQHdlYmNvbnRhaW5lci9zbmFwc2hvdCkuCiAgICAgICAqCiAgICAgICAqIEBwYXJhbSBzbmFwc2hvdE9yVHJlZSAtIEEgdHJlZSBvZiBmaWxlcywgb3IgYSBiaW5hcnkgc25hcHNob3QuIE5vdGUgdGhhdCBiaW5hcnkgcGF5bG9hZHMgd2lsbCBiZSB0cmFuc2ZlcnJlZC4KICAgICAgICogQHBhcmFtIG9wdGlvbnMubW91bnRQb2ludCAtIFNwZWNpZmllcyBhIG5lc3RlZCBwYXRoIHdoZXJlIHRoZSB0cmVlIHNob3VsZCBiZSBtb3VudGVkLgogICAgICAgKi8KICAgICAgbW91bnQoc25hcHNob3RPclRyZWUsIG9wdGlvbnMpIHsKICAgICAgICBjb25zdCBwYXlsb2FkID0gc25hcHNob3RPclRyZWUgaW5zdGFuY2VvZiBVaW50OEFycmF5ID8gc25hcHNob3RPclRyZWUgOiBzbmFwc2hvdE9yVHJlZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyID8gbmV3IFVpbnQ4QXJyYXkoc25hcHNob3RPclRyZWUpIDogZW5jb2Rlci5lbmNvZGUoSlNPTi5zdHJpbmdpZnkodG9JbnRlcm5hbEZpbGVTeXN0ZW1UcmVlKHNuYXBzaG90T3JUcmVlKSkpOwogICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5sb2FkRmlsZXMoY29tbGlua19leHBvcnRzLnRyYW5zZmVyKHBheWxvYWQsIFtwYXlsb2FkLmJ1ZmZlcl0pLCB7CiAgICAgICAgICBtb3VudFBvaW50czogb3B0aW9ucz8ubW91bnRQb2ludAogICAgICAgIH0pOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBTZXQgYSBjdXN0b20gc2NyaXB0IHRvIGJlIGluamVjdGVkIGludG8gYWxsIHByZXZpZXdzLiBXaGVuIHRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkLCBldmVyeQogICAgICAgKiBmdXR1cmUgcGFnZSByZWxvYWQgd2lsbCBjb250YWluIHRoZSBwcm92aWRlZCBzY3JpcHQgdGFnIG9uIGFsbCBIVE1MIHJlc3BvbnNlcy4KICAgICAgICoKICAgICAgICogTm90ZToKICAgICAgICoKICAgICAgICogV2hlbiB0aGlzIGZ1bmN0aW9uIHJlc29sdmVzLCBldmVyeSBwcmV2aWV3IHJlbG9hZGVkIF9hZnRlcl8gd2lsbCBoYXZlIHRoZSBuZXcgc2NyaXB0LgogICAgICAgKiBFeGlzdGluZyBwcmV2aWV3IGhhdmUgdG8gYmUgZXhwbGljaXRlbHkgcmVsb2FkZWQuCiAgICAgICAqCiAgICAgICAqIFRvIHJlbG9hZCBhIHByZXZpZXcgeW91IGNhbiB1c2UgYHJlbG9hZFByZXZpZXdgLgogICAgICAgKgogICAgICAgKiBAcGFyYW0gc2NyaXB0U3JjIFNvdXJjZSBmb3IgdGhlIHNjcmlwdCB0YWcuCiAgICAgICAqIEBwYXJhbSBvcHRpb25zIE9wdGlvbnMgdG8gZGVmaW5lIHdoaWNoIHR5cGUgb2Ygc2NyaXB0IHRoaXMgaXMuCiAgICAgICAqLwogICAgICBzZXRQcmV2aWV3U2NyaXB0KHNjcmlwdFNyYywgb3B0aW9ucykgewogICAgICAgIHJldHVybiB0aGlzLl9pbnN0YW5jZS5zZXRQcmV2aWV3U2NyaXB0KHNjcmlwdFNyYywgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFRoZSBkZWZhdWx0IHZhbHVlIG9mIHRoZSBgUEFUSGAgZW52aXJvbm1lbnQgdmFyaWFibGUgZm9yIHByb2Nlc3NlcyBzdGFydGVkIHRocm91Z2gge0BsaW5rIHNwYXdufS4KICAgICAgICovCiAgICAgIGdldCBwYXRoKCkgewogICAgICAgIHJldHVybiB0aGlzLl9ydW50aW1lSW5mby5wYXRoOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBUaGUgZnVsbCBwYXRoIHRvIHRoZSB3b3JraW5nIGRpcmVjdG9yeSAoc2VlIHtAbGluayBGaWxlU3lzdGVtQVBJfSkuCiAgICAgICAqLwogICAgICBnZXQgd29ya2RpcigpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcnVudGltZUluZm8uY3dkOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEZXN0cm95cyB0aGUgV2ViQ29udGFpbmVyIGluc3RhbmNlLCB0dXJuaW5nIGl0IHVudXNhYmxlLCBhbmQgcmVsZWFzZXMgaXRzIHJlc291cmNlcy4gQWZ0ZXIgdGhpcywKICAgICAgICogYSBuZXcgV2ViQ29udGFpbmVyIGluc3RhbmNlIGNhbiBiZSBvYnRhaW5lZCBieSBjYWxsaW5nIHtAbGluayBXZWJDb250YWluZXIuYm9vdCB8IGBib290YH0uCiAgICAgICAqCiAgICAgICAqIEFsbCBlbnRpdGllcyBkZXJpdmVkIGZyb20gdGhpcyBpbnN0YW5jZSAoZS5nLiBwcm9jZXNzZXMsIHRoZSBmaWxlIHN5c3RlbSwgZXRjLikgYWxzbyBiZWNvbWUgdW51c2FibGUKICAgICAgICogYWZ0ZXIgY2FsbGluZyB0aGlzIG1ldGhvZC4KICAgICAgICovCiAgICAgIHRlYXJkb3duKCkgewogICAgICAgIGlmICh0aGlzLl90b3JuRG93bikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJXZWJDb250YWluZXIgYWxyZWFkeSB0b3JuIGRvd24iKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5fdG9ybkRvd24gPSB0cnVlOwogICAgICAgIHRoaXMuX3Vuc3Vic2NyaWJlRnJvbVRva2VuQ2hhbmdlZExpc3RlbmVyKCk7CiAgICAgICAgY29uc3QgdGVhcmRvd25GbiA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuZnMuX3RlYXJkb3duKCk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuX2luc3RhbmNlLnRlYXJkb3duKCk7CiAgICAgICAgICB9IGZpbmFsbHkgewogICAgICAgICAgICB0aGlzLl9pbnN0YW5jZVtjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgICAgICBpZiAoX1dlYkNvbnRhaW5lci5faW5zdGFuY2UgPT09IHRoaXMpIHsKICAgICAgICAgICAgICBfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9IG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIF9XZWJDb250YWluZXIuX3RlYXJkb3duUHJvbWlzZSA9IHRlYXJkb3duRm4oKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQm9vdHMgYSBXZWJDb250YWluZXIuIE9ubHkgYSBzaW5nbGUgaW5zdGFuY2Ugb2YgV2ViQ29udGFpbmVyIGNhbiBiZSBib290ZWQgY29uY3VycmVudGx5CiAgICAgICAqIChzZWUge0BsaW5rIFdlYkNvbnRhaW5lci50ZWFyZG93biB8IGB0ZWFyZG93bmB9KS4KICAgICAgICoKICAgICAgICogQm9vdGluZyBXZWJDb250YWluZXIgaXMgYW4gZXhwZW5zaXZlIG9wZXJhdGlvbi4KICAgICAgICovCiAgICAgIHN0YXRpYyBhc3luYyBib290KG9wdGlvbnMgPSB7fSkgewogICAgICAgIGF3YWl0IHRoaXMuX3RlYXJkb3duUHJvbWlzZTsKICAgICAgICBfV2ViQ29udGFpbmVyLl90ZWFyZG93blByb21pc2UgPSBudWxsOwogICAgICAgIGNvbnN0IHsgd29ya2Rpck5hbWUgfSA9IG9wdGlvbnM7CiAgICAgICAgaWYgKHdpbmRvdy5jcm9zc09yaWdpbklzb2xhdGVkICYmIG9wdGlvbnMuY29lcCA9PT0gIm5vbmUiKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oYEEgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeSBoZWFkZXIgaXMgcmVxdWlyZWQgaW4gY3Jvc3Mgb3JpZ2luIGlzb2xhdGVkIGVudmlyb25tZW50cy4KU2V0IHRoZSAnY29lcCcgb3B0aW9uIHRvICdyZXF1aXJlLWNvcnAnLmApOwogICAgICAgIH0KICAgICAgICBpZiAod29ya2Rpck5hbWU/LmluY2x1ZGVzKCIvIikgfHwgd29ya2Rpck5hbWUgPT09ICIuLiIgfHwgd29ya2Rpck5hbWUgPT09ICIuIikgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJ3b3JrZGlyTmFtZSBzaG91bGQgYmUgYSB2YWxpZCBmb2xkZXIgbmFtZSIpOwogICAgICAgIH0KICAgICAgICBhdXRoU3RhdGUuYm9vdENhbGxlZCA9IHRydWU7CiAgICAgICAgd2hpbGUgKGJvb3RQcm9taXNlKSB7CiAgICAgICAgICBhd2FpdCBib290UHJvbWlzZTsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXIuX2luc3RhbmNlKSB7CiAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoIk9ubHkgYSBzaW5nbGUgV2ViQ29udGFpbmVyIGluc3RhbmNlIGNhbiBiZSBib290ZWQiKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgaW5zdGFuY2VQcm9taXNlID0gdW5zeW5jaHJvbml6ZWRCb290KG9wdGlvbnMpOwogICAgICAgIGJvb3RQcm9taXNlID0gaW5zdGFuY2VQcm9taXNlLmNhdGNoKCgpID0+IHsKICAgICAgICB9KTsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgaW5zdGFuY2UgPSBhd2FpdCBpbnN0YW5jZVByb21pc2U7CiAgICAgICAgICBfV2ViQ29udGFpbmVyLl9pbnN0YW5jZSA9IGluc3RhbmNlOwogICAgICAgICAgcmV0dXJuIGluc3RhbmNlOwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICBib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgfQogICAgICB9CiAgICB9OwogICAgRElSX0VOVFJZX1RZUEVfRklMRSA9IDE7CiAgICBESVJfRU5UUllfVFlQRV9ESVIgPSAyOwogICAgRGlyRW50SW1wbCA9IGNsYXNzIHsKICAgICAgbmFtZTsKICAgICAgX3R5cGU7CiAgICAgIGNvbnN0cnVjdG9yKG5hbWUsIF90eXBlKSB7CiAgICAgICAgdGhpcy5uYW1lID0gbmFtZTsKICAgICAgICB0aGlzLl90eXBlID0gX3R5cGU7CiAgICAgIH0KICAgICAgaXNGaWxlKCkgewogICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBESVJfRU5UUllfVFlQRV9GSUxFOwogICAgICB9CiAgICAgIGlzRGlyZWN0b3J5KCkgewogICAgICAgIHJldHVybiB0aGlzLl90eXBlID09PSBESVJfRU5UUllfVFlQRV9ESVI7CiAgICAgIH0KICAgIH07CiAgICBGU1dhdGNoZXIgPSBjbGFzcyB7CiAgICAgIF9hcGlDbGllbnQ7CiAgICAgIF9wYXRoOwogICAgICBfb3B0aW9uczsKICAgICAgX2xpc3RlbmVyOwogICAgICBfd3JhcHBlZExpc3RlbmVyOwogICAgICBfd2F0Y2hlcjsKICAgICAgX2Nsb3NlZCA9IGZhbHNlOwogICAgICBjb25zdHJ1Y3RvcihfYXBpQ2xpZW50LCBfcGF0aCwgX29wdGlvbnMsIF9saXN0ZW5lcjIpIHsKICAgICAgICB0aGlzLl9hcGlDbGllbnQgPSBfYXBpQ2xpZW50OwogICAgICAgIHRoaXMuX3BhdGggPSBfcGF0aDsKICAgICAgICB0aGlzLl9vcHRpb25zID0gX29wdGlvbnM7CiAgICAgICAgdGhpcy5fbGlzdGVuZXIgPSBfbGlzdGVuZXIyOwogICAgICAgIHRoaXMuX2FwaUNsaWVudC5fd2F0Y2hlcnMuYWRkKHRoaXMpOwogICAgICAgIHRoaXMuX3dyYXBwZWRMaXN0ZW5lciA9IChldmVudCwgZmlsZW5hbWUpID0+IHsKICAgICAgICAgIGlmICh0aGlzLl9saXN0ZW5lciAmJiAhdGhpcy5fY2xvc2VkKSB7CiAgICAgICAgICAgIHRoaXMuX2xpc3RlbmVyKGV2ZW50LCBmaWxlbmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLl9hcGlDbGllbnQuX2ZzLndhdGNoKHRoaXMuX3BhdGgsIHRoaXMuX29wdGlvbnMsIHByb3h5TGlzdGVuZXIodGhpcy5fd3JhcHBlZExpc3RlbmVyKSkudGhlbigoX3dhdGNoZXIpID0+IHsKICAgICAgICAgIHRoaXMuX3dhdGNoZXIgPSBfd2F0Y2hlcjsKICAgICAgICAgIGlmICh0aGlzLl9jbG9zZWQpIHsKICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3RlYXJkb3duKCk7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdm9pZCAwOwogICAgICAgIH0pLmNhdGNoKGNvbnNvbGUuZXJyb3IpOwogICAgICB9CiAgICAgIGFzeW5jIGNsb3NlKCkgewogICAgICAgIGlmICghdGhpcy5fY2xvc2VkKSB7CiAgICAgICAgICB0aGlzLl9jbG9zZWQgPSB0cnVlOwogICAgICAgICAgdGhpcy5fYXBpQ2xpZW50Ll93YXRjaGVycy5kZWxldGUodGhpcyk7CiAgICAgICAgICBhd2FpdCB0aGlzLl90ZWFyZG93bigpOwogICAgICAgIH0KICAgICAgfQogICAgICAvKioKICAgICAgICogQGludGVybmFsCiAgICAgICAqLwogICAgICBhc3luYyBfdGVhcmRvd24oKSB7CiAgICAgICAgYXdhaXQgdGhpcy5fd2F0Y2hlcj8uY2xvc2UoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICAgIHRoaXMuX3dhdGNoZXI/Lltjb21saW5rX2V4cG9ydHMucmVsZWFzZVByb3h5XSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgV2ViQ29udGFpbmVyUHJvY2Vzc0ltcGwgPSBjbGFzcyB7CiAgICAgIG91dHB1dDsKICAgICAgaW5wdXQ7CiAgICAgIGV4aXQ7CiAgICAgIF9wcm9jZXNzOwogICAgICBzdGRvdXQ7CiAgICAgIHN0ZGVycjsKICAgICAgY29uc3RydWN0b3IocHJvY2VzczQsIG91dHB1dCwgc3Rkb3V0LCBzdGRlcnIpIHsKICAgICAgICB0aGlzLm91dHB1dCA9IG91dHB1dDsKICAgICAgICB0aGlzLl9wcm9jZXNzID0gcHJvY2VzczQ7CiAgICAgICAgdGhpcy5pbnB1dCA9IG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICB3cml0ZTogKGRhdGEpID0+IHsKICAgICAgICAgICAgdGhpcy5fZ2V0UHJvY2VzcygpPy53cml0ZShkYXRhKS5jYXRjaCgoKSA9PiB7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIHRoaXMuZXhpdCA9IHRoaXMuX29uRXhpdCgpOwogICAgICAgIHRoaXMuc3Rkb3V0ID0gc3Rkb3V0OwogICAgICAgIHRoaXMuc3RkZXJyID0gc3RkZXJyOwogICAgICB9CiAgICAgIGtpbGwoKSB7CiAgICAgICAgdGhpcy5fcHJvY2Vzcz8ua2lsbCgpOwogICAgICB9CiAgICAgIHJlc2l6ZShkaW1lbnNpb25zKSB7CiAgICAgICAgdGhpcy5fZ2V0UHJvY2VzcygpPy5yZXNpemUoZGltZW5zaW9ucyk7CiAgICAgIH0KICAgICAgYXN5bmMgX29uRXhpdCgpIHsKICAgICAgICB0cnkgewogICAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuX3Byb2Nlc3Mub25FeGl0OwogICAgICAgIH0gZmluYWxseSB7CiAgICAgICAgICB0aGlzLl9wcm9jZXNzPy5bY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICAgIHRoaXMuX3Byb2Nlc3MgPSBudWxsOwogICAgICAgIH0KICAgICAgfQogICAgICBfZ2V0UHJvY2VzcygpIHsKICAgICAgICBpZiAodGhpcy5fcHJvY2VzcyA9PSBudWxsKSB7CiAgICAgICAgICBjb25zb2xlLndhcm4oIlRoaXMgcHJvY2VzcyBhbHJlYWR5IGV4aXRlZCIpOwogICAgICAgIH0KICAgICAgICByZXR1cm4gdGhpcy5fcHJvY2VzczsKICAgICAgfQogICAgfTsKICAgIEZpbGVTeXN0ZW1BUElDbGllbnQgPSBjbGFzcyB7CiAgICAgIF9mczsKICAgICAgX3dhdGNoZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoW10pOwogICAgICBjb25zdHJ1Y3RvcihmcykgewogICAgICAgIHRoaXMuX2ZzID0gZnM7CiAgICAgIH0KICAgICAgcm0oLi4uYXJncykgewogICAgICAgIHJldHVybiB0aGlzLl9mcy5ybSguLi5hcmdzKTsKICAgICAgfQogICAgICBhc3luYyByZWFkRmlsZShwYXRoMiwgZW5jb2RpbmcpIHsKICAgICAgICByZXR1cm4gYXdhaXQgdGhpcy5fZnMucmVhZEZpbGUocGF0aDIsIGVuY29kaW5nKTsKICAgICAgfQogICAgICBhc3luYyByZW5hbWUob2xkUGF0aCwgbmV3UGF0aCkgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5yZW5hbWUob2xkUGF0aCwgbmV3UGF0aCk7CiAgICAgIH0KICAgICAgYXN5bmMgd3JpdGVGaWxlKHBhdGgyLCBkYXRhLCBvcHRpb25zKSB7CiAgICAgICAgaWYgKGRhdGEgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7CiAgICAgICAgICBjb25zdCBidWZmZXIyID0gZGF0YS5idWZmZXIuc2xpY2UoZGF0YS5ieXRlT2Zmc2V0LCBkYXRhLmJ5dGVPZmZzZXQgKyBkYXRhLmJ5dGVMZW5ndGgpOwogICAgICAgICAgZGF0YSA9IGNvbWxpbmtfZXhwb3J0cy50cmFuc2ZlcihuZXcgVWludDhBcnJheShidWZmZXIyKSwgW2J1ZmZlcjJdKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5fZnMud3JpdGVGaWxlKHBhdGgyLCBkYXRhLCBvcHRpb25zKTsKICAgICAgfQogICAgICBhc3luYyByZWFkZGlyKHBhdGgyLCBvcHRpb25zKSB7CiAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5fZnMucmVhZGRpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgICAgaWYgKGlzU3RyaW5nQXJyYXkocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgaWYgKGlzVHlwZWRBcnJheUNvbGxlY3Rpb24ocmVzdWx0KSkgewogICAgICAgICAgcmV0dXJuIHJlc3VsdDsKICAgICAgICB9CiAgICAgICAgY29uc3QgZW50cmllcyA9IHJlc3VsdC5tYXAoKGVudHJ5KSA9PiBuZXcgRGlyRW50SW1wbChlbnRyeS5uYW1lLCBlbnRyeVsiU3ltYm9sKHR5cGUpIl0pKTsKICAgICAgICByZXR1cm4gZW50cmllczsKICAgICAgfQogICAgICBhc3luYyBta2RpcihwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHJldHVybiBhd2FpdCB0aGlzLl9mcy5ta2RpcihwYXRoMiwgb3B0aW9ucyk7CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIG9wdGlvbnMsIGxpc3RlbmVyMikgewogICAgICAgIGlmICh0eXBlb2Ygb3B0aW9ucyA9PT0gImZ1bmN0aW9uIikgewogICAgICAgICAgbGlzdGVuZXIyID0gb3B0aW9uczsKICAgICAgICAgIG9wdGlvbnMgPSBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gbmV3IEZTV2F0Y2hlcih0aGlzLCBwYXRoMiwgb3B0aW9ucywgbGlzdGVuZXIyKTsKICAgICAgfQogICAgICAvKioKICAgICAgICogQGludGVybmFsCiAgICAgICAqLwogICAgICBhc3luYyBfdGVhcmRvd24oKSB7CiAgICAgICAgdGhpcy5fZnNbY29tbGlua19leHBvcnRzLnJlbGVhc2VQcm94eV0oKTsKICAgICAgICBhd2FpdCBQcm9taXNlLmFsbChbLi4udGhpcy5fd2F0Y2hlcnNdLm1hcCgod2F0Y2hlcikgPT4gd2F0Y2hlci5jbG9zZSgpKSk7CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9XZWJDb250YWluZXJFbnZpcm9ubWVudC5qcwp2YXIgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQ7CnZhciBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50ID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcnVudGltZS9lbnZpcm9ubWVudHMvV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuanMiKCkgewogICAgaW5pdF9kaXN0KCk7CiAgICBXZWJDb250YWluZXJFbnZpcm9ubWVudCA9IGNsYXNzIF9XZWJDb250YWluZXJFbnZpcm9ubWVudCB7CiAgICAgIC8vIFN0YXRpYyBzaGFyZWQgc3RhdGUgLSBXZWJDb250YWluZXIgb25seSBhbGxvd3MgT05FIGJvb3QgcGVyIHBhZ2UKICAgICAgc3RhdGljIHNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgIHN0YXRpYyBib290UHJvbWlzZSA9IG51bGw7CiAgICAgIF9yZWFkeSA9IGZhbHNlOwogICAgICB0eXBlID0gIndlYmNvbnRhaW5lciI7CiAgICAgIGdldCByZWFkeSgpIHsKICAgICAgICByZXR1cm4gdGhpcy5fcmVhZHk7CiAgICAgIH0KICAgICAgZ2V0IGNvbnRhaW5lcigpIHsKICAgICAgICByZXR1cm4gX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcjsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gTGlmZWN5Y2xlID09PT09PT09PT09PQogICAgICBhc3luYyBpbml0KCkgewogICAgICAgIGlmICh0aGlzLl9yZWFkeSAmJiBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuc2hhcmVkQ29udGFpbmVyKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGlmIChfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZTsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIpIHsKICAgICAgICAgIHRoaXMuX3JlYWR5ID0gdHJ1ZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKHR5cGVvZiBTaGFyZWRBcnJheUJ1ZmZlciA9PT0gInVuZGVmaW5lZCIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyIHJlcXVpcmVzIFNoYXJlZEFycmF5QnVmZmVyIHdoaWNoIGlzIG5vdCBhdmFpbGFibGUuIEVuc3VyZSB5b3VyIHNlcnZlciBzZW5kcyB0aGVzZSBoZWFkZXJzOlxuICBDcm9zcy1PcmlnaW4tT3BlbmVyLVBvbGljeTogc2FtZS1vcmlnaW5cbiAgQ3Jvc3MtT3JpZ2luLUVtYmVkZGVyLVBvbGljeTogcmVxdWlyZS1jb3JwIik7CiAgICAgICAgfQogICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IFdlYkNvbnRhaW5lci5ib290KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5zaGFyZWRDb250YWluZXIgPSBhd2FpdCBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2U7CiAgICAgICAgICB0aGlzLl9yZWFkeSA9IHRydWU7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIF9XZWJDb250YWluZXJFbnZpcm9ubWVudC5ib290UHJvbWlzZSA9IG51bGw7CiAgICAgICAgICB0aHJvdyBlcnJvcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgICBpZiAoX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lcikgewogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lci50ZWFyZG93bigpOwogICAgICAgICAgX1dlYkNvbnRhaW5lckVudmlyb25tZW50LnNoYXJlZENvbnRhaW5lciA9IG51bGw7CiAgICAgICAgICBfV2ViQ29udGFpbmVyRW52aXJvbm1lbnQuYm9vdFByb21pc2UgPSBudWxsOwogICAgICAgICAgdGhpcy5fcmVhZHkgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IEZpbGVzeXN0ZW0gT3BlcmF0aW9ucyA9PT09PT09PT09PT0KICAgICAgYXN5bmMgcmVhZEZpbGUocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgcmV0dXJuIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyLCAidXRmLTgiKTsKICAgICAgfQogICAgICBhc3luYyB3cml0ZUZpbGUocGF0aDIsIGNvbnRlbnRzKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLndyaXRlRmlsZShwYXRoMiwgY29udGVudHMsICJ1dGYtOCIpOwogICAgICB9CiAgICAgIGFzeW5jIHJlYWREaXIocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRkaXIocGF0aDIsIHsgd2l0aEZpbGVUeXBlczogdHJ1ZSB9KTsKICAgICAgICByZXR1cm4gZW50cmllcy5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgdHlwZTogZW50cnkuaXNEaXJlY3RvcnkoKSA/ICJkaXJlY3RvcnkiIDogImZpbGUiLAogICAgICAgICAgbmFtZTogZW50cnkubmFtZSwKICAgICAgICAgIHBhdGg6IHBhdGgyID09PSAiLyIgPyBgLyR7ZW50cnkubmFtZX1gIDogYCR7cGF0aDJ9LyR7ZW50cnkubmFtZX1gCiAgICAgICAgfSkpOwogICAgICB9CiAgICAgIGFzeW5jIG1rZGlyKHBhdGgyKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLm1rZGlyKHBhdGgyLCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfQogICAgICBhc3luYyBybShwYXRoMiwgb3B0aW9ucykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5mcy5ybShwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9KTsKICAgICAgfQogICAgICBhc3luYyBleGlzdHMocGF0aDIpIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29udGFpbmVyLmZzLnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0gY2F0Y2ggewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy5jb250YWluZXIuZnMucmVhZGRpcihwYXRoMik7CiAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgd2F0Y2gocGF0aDIsIGNhbGxiYWNrLCBvcHRpb25zKSB7CiAgICAgICAgdGhpcy5lbnN1cmVSZWFkeSgpOwogICAgICAgIGNvbnN0IHdhdGNoZXIgPSB0aGlzLmNvbnRhaW5lci5mcy53YXRjaChwYXRoMiwgeyByZWN1cnNpdmU6IG9wdGlvbnM/LnJlY3Vyc2l2ZSA/PyBmYWxzZSB9LCBjYWxsYmFjayk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIHN0b3A6ICgpID0+IHdhdGNoZXIuY2xvc2UoKQogICAgICAgIH07CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByb2Nlc3MgRXhlY3V0aW9uID09PT09PT09PT09PQogICAgICBhc3luYyBzcGF3bihjb21tYW5kLCBhcmdzID0gW10pIHsKICAgICAgICB0aGlzLmVuc3VyZVJlYWR5KCk7CiAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmNvbnRhaW5lci5zcGF3bihjb21tYW5kLCBhcmdzKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgb3V0cHV0OiBwcm9jZXNzNC5vdXRwdXQsCiAgICAgICAgICBpbnB1dDogcHJvY2VzczQuaW5wdXQsCiAgICAgICAgICBleGl0OiBwcm9jZXNzNC5leGl0LAogICAgICAgICAga2lsbDogKCkgPT4gcHJvY2VzczQua2lsbCgpCiAgICAgICAgfTsKICAgICAgfQogICAgICAvLyA9PT09PT09PT09PT0gV2ViQ29udGFpbmVyLXNwZWNpZmljIG1ldGhvZHMgPT09PT09PT09PT09CiAgICAgIC8qKgogICAgICAgKiBNb3VudCBmaWxlcyBpbnRvIHRoZSB2aXJ0dWFsIGZpbGVzeXN0ZW0uCiAgICAgICAqIFRoaXMgaXMgYSBXZWJDb250YWluZXItc3BlY2lmaWMgb3BlcmF0aW9uLgogICAgICAgKiBAcGFyYW0gZmlsZXMgLSBGaWxlIHRyZWUgc3RydWN0dXJlIHRvIG1vdW50CiAgICAgICAqLwogICAgICBhc3luYyBtb3VudChmaWxlcykgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICBhd2FpdCB0aGlzLmNvbnRhaW5lci5tb3VudChmaWxlcyk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCB0aGUgdW5kZXJseWluZyBXZWJDb250YWluZXIgaW5zdGFuY2UuCiAgICAgICAqIFVzZSBzcGFyaW5nbHkgLSBwcmVmZXIgdGhlIGludGVyZmFjZSBtZXRob2RzLgogICAgICAgKi8KICAgICAgZ2V0Q29udGFpbmVyKCkgewogICAgICAgIHRoaXMuZW5zdXJlUmVhZHkoKTsKICAgICAgICByZXR1cm4gdGhpcy5jb250YWluZXI7CiAgICAgIH0KICAgICAgLy8gPT09PT09PT09PT09IFByaXZhdGUgSGVscGVycyA9PT09PT09PT09PT0KICAgICAgZW5zdXJlUmVhZHkoKSB7CiAgICAgICAgaWYgKCF0aGlzLl9yZWFkeSB8fCAhdGhpcy5jb250YWluZXIpIHsKICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiV2ViQ29udGFpbmVyRW52aXJvbm1lbnQgbm90IGluaXRpYWxpemVkLiBDYWxsIGluaXQoKSBmaXJzdC4iKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcwp2YXIgaW5pdF9lbnZpcm9ubWVudHMgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2Vudmlyb25tZW50cy9pbmRleC5qcyIoKSB7CiAgICBpbml0X1dlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzCnZhciBpbml0X2dyb3VwX3J1bnRpbWUgPSBfX2VzbSh7CiAgIm5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1ydW50aW1lL2luZGV4LmpzIigpIHsKICAgIGluaXRfaW50ZXJmYWNlczMoKTsKICAgIGluaXRfZW52aXJvbm1lbnRzKCk7CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvZGVlcy1hY3Rpb25iYXIuanMKdmFyIF9fZXNEZWNvcmF0ZTUwLCBfX3J1bkluaXRpYWxpemVyczUxLCBEZWVzQWN0aW9uYmFyOwp2YXIgaW5pdF9kZWVzX2FjdGlvbmJhciA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWFjdGlvbmJhci9kZWVzLWFjdGlvbmJhci5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF90aGVtZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIF9fZXNEZWNvcmF0ZTUwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNBY3Rpb25iYXIgPSAoKCkgPT4gewogICAgICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hY3Rpb25iYXIiKV07CiAgICAgIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogICAgICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9jbGFzc1RoaXM7CiAgICAgIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogICAgICBsZXQgX2N1cnJlbnRCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9jdXJyZW50QmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2N1cnJlbnRCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGltZVJlbWFpbmluZ19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90aW1lUmVtYWluaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2RlY29yYXRvcnM7CiAgICAgIGxldCBfcHJvZ3Jlc3NQZXJjZW50X2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2lzVmlzaWJsZV9kZWNvcmF0b3JzOwogICAgICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgdmFyIERlZXNBY3Rpb25iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgewogICAgICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgICAgICBfY3VycmVudEJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX3RpbWVSZW1haW5pbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9wcm9ncmVzc1BlcmNlbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9pc1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUwKHRoaXMsIG51bGwsIF9jdXJyZW50QmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRCYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRCYXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLmN1cnJlbnRCYXIgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRCYXJfaW5pdGlhbGl6ZXJzLCBfY3VycmVudEJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MCh0aGlzLCBudWxsLCBfdGltZVJlbWFpbmluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aW1lUmVtYWluaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lUmVtYWluaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRpbWVSZW1haW5pbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai50aW1lUmVtYWluaW5nID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aW1lUmVtYWluaW5nX2luaXRpYWxpemVycywgX3RpbWVSZW1haW5pbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX3Byb2dyZXNzUGVyY2VudF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcm9ncmVzc1BlcmNlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2dyZXNzUGVyY2VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9ncmVzc1BlcmNlbnQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5wcm9ncmVzc1BlcmNlbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Byb2dyZXNzUGVyY2VudF9pbml0aWFsaXplcnMsIF9wcm9ncmVzc1BlcmNlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAodGhpcywgbnVsbCwgX2lzVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5pc1Zpc2libGUgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc0FjdGlvbmJhcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgICB9CiAgICAgICAgLy8gU1RBVElDCiAgICAgICAgc3RhdGljIGRlbW8gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBnZXRBY3Rpb25iYXIgPSAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGJ1dHRvbiA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgICBjb25zdCBjb250YWluZXIgPSBidXR0b24uY2xvc2VzdCgiLmRlbW8tY29udGFpbmVyIik7CiAgICAgICAgICAgIHJldHVybiBjb250YWluZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYWN0aW9uYmFyIik7CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3Qgc2hvd0FjdGlvbkJhciA9IGFzeW5jIChlMTEpID0+IHsKICAgICAgICAgICAgY29uc3QgYWN0aW9uYmFyID0gZ2V0QWN0aW9uYmFyKGUxMSk7CiAgICAgICAgICAgIGlmICghYWN0aW9uYmFyKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYWN0aW9uYmFyLnNob3coewogICAgICAgICAgICAgIG1lc3NhZ2U6ICJGaWxlIGNoYW5nZWQgZXh0ZXJuYWxseS4gUmVsb2FkPyIsCiAgICAgICAgICAgICAgdHlwZTogIndhcm5pbmciLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6YWxlcnRUcmlhbmdsZSIsCiAgICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgICAgeyBpZDogInJlbG9hZCIsIGxhYmVsOiAiUmVsb2FkIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImlnbm9yZSIsIGxhYmVsOiAiSWdub3JlIiB9CiAgICAgICAgICAgICAgXSwKICAgICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiA1ZTMsIGRlZmF1bHRBY3Rpb25JZDogInJlbG9hZCIgfSwKICAgICAgICAgICAgICBkaXNtaXNzaWJsZTogdHJ1ZQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc29sZS5sb2coIkFjdGlvbiBiYXIgcmVzdWx0OiIsIHJlc3VsdCk7CiAgICAgICAgICB9OwogICAgICAgICAgY29uc3Qgc2hvd0Vycm9yQmFyID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgICAgICBjb25zdCBhY3Rpb25iYXIgPSBnZXRBY3Rpb25iYXIoZTExKTsKICAgICAgICAgICAgaWYgKCFhY3Rpb25iYXIpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhY3Rpb25iYXIuc2hvdyh7CiAgICAgICAgICAgICAgbWVzc2FnZTogIlByb2Nlc3MgZmFpbGVkIHdpdGggZXhpdCBjb2RlIDEiLAogICAgICAgICAgICAgIHR5cGU6ICJlcnJvciIsCiAgICAgICAgICAgICAgaWNvbjogImx1Y2lkZTp4Q2lyY2xlIiwKICAgICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgICB7IGlkOiAicmV0cnkiLCBsYWJlbDogIlJldHJ5IiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImRpc21pc3MiLCBsYWJlbDogIkRpc21pc3MiIH0KICAgICAgICAgICAgICBdLAogICAgICAgICAgICAgIHRpbWVvdXQ6IHsgZHVyYXRpb246IDFlNCwgZGVmYXVsdEFjdGlvbklkOiAiZGlzbWlzcyIgfQogICAgICAgICAgICB9KTsKICAgICAgICAgICAgY29uc29sZS5sb2coIkVycm9yIGJhciByZXN1bHQ6IiwgcmVzdWx0KTsKICAgICAgICAgIH07CiAgICAgICAgICBjb25zdCBzaG93UXVlc3Rpb25CYXIgPSBhc3luYyAoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGFjdGlvbmJhciA9IGdldEFjdGlvbmJhcihlMTEpOwogICAgICAgICAgICBpZiAoIWFjdGlvbmJhcikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFjdGlvbmJhci5zaG93KHsKICAgICAgICAgICAgICBtZXNzYWdlOiAiU2F2ZSBjaGFuZ2VzIGJlZm9yZSBjbG9zaW5nPyIsCiAgICAgICAgICAgICAgdHlwZTogInF1ZXN0aW9uIiwKICAgICAgICAgICAgICBpY29uOiAibHVjaWRlOmhlbHBDaXJjbGUiLAogICAgICAgICAgICAgIGFjdGlvbnM6IFsKICAgICAgICAgICAgICAgIHsgaWQ6ICJzYXZlIiwgbGFiZWw6ICJTYXZlIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgICAgeyBpZDogImRpc2NhcmQiLCBsYWJlbDogIkRpc2NhcmQiIH0sCiAgICAgICAgICAgICAgICB7IGlkOiAiY2FuY2VsIiwgbGFiZWw6ICJDYW5jZWwiIH0KICAgICAgICAgICAgICBdCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBjb25zb2xlLmxvZygiUXVlc3Rpb24gYmFyIHJlc3VsdDoiLCByZXN1bHQpOwogICAgICAgICAgfTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGhlaWdodDogMzAwcHg7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB9CiAgICAgICAgLmRlbW8tY29udGVudCB7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGVudCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd0FjdGlvbkJhcn0+V2FybmluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd0Vycm9yQmFyfT5FcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7c2hvd1F1ZXN0aW9uQmFyfT5RdWVzdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgIDwvZGl2PgogICAgYDsKICAgICAgICB9OwogICAgICAgIC8vIFF1ZXVlIG9mIHBlbmRpbmcgYWN0aW9uIGJhcnMKICAgICAgICBxdWV1ZSA9IFtdOwogICAgICAgICNjdXJyZW50QmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF9jdXJyZW50QmFyX2luaXRpYWxpemVycywgbnVsbCk7CiAgICAgICAgLy8gQ3VycmVudCBhY3RpdmUgYmFyIHN0YXRlCiAgICAgICAgZ2V0IGN1cnJlbnRCYXIoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jY3VycmVudEJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgY3VycmVudEJhcih2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2N1cnJlbnRCYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RpbWVSZW1haW5pbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUxKHRoaXMsIF9jdXJyZW50QmFyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfdGltZVJlbWFpbmluZ19pbml0aWFsaXplcnMsIDApKTsKICAgICAgICBnZXQgdGltZVJlbWFpbmluZygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0aW1lUmVtYWluaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0aW1lUmVtYWluaW5nKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGltZVJlbWFpbmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjcHJvZ3Jlc3NQZXJjZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MSh0aGlzLCBfdGltZVJlbWFpbmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX3Byb2dyZXNzUGVyY2VudF9pbml0aWFsaXplcnMsIDEwMCkpOwogICAgICAgIGdldCBwcm9ncmVzc1BlcmNlbnQoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jcHJvZ3Jlc3NQZXJjZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBwcm9ncmVzc1BlcmNlbnQodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiNwcm9ncmVzc1BlcmNlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX3Byb2dyZXNzUGVyY2VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAgICAgZ2V0IGlzVmlzaWJsZSgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGlzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAvLyBUaW1lb3V0IGhhbmRsaW5nCiAgICAgICAgdGltZW91dEludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTEodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGN1cnJlbnRSZXNvbHZlID0gbnVsbDsKICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYWN0aW9uYmFyLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAwZnI7CiAgICAgICAgdHJhbnNpdGlvbjogZ3JpZC10ZW1wbGF0ZS1yb3dzIDAuMnMgZWFzZS1vdXQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoLnZpc2libGUpIC5hY3Rpb25iYXItaXRlbSB7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiAxZnI7CiAgICAgIH0KCiAgICAgIC5hY3Rpb25iYXItY29udGVudCB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2Utb3V0OwogICAgICB9CgogICAgICA6aG9zdCgudmlzaWJsZSkgLmFjdGlvbmJhci1jb250ZW50IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyIHsKICAgICAgICBoZWlnaHQ6IDNweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAxOCUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzcy1iYXItZmlsbCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNTAlKSIsICJoc2woMjEwIDEwMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjFzIGxpbmVhcjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDUwJSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3MtYmFyLWZpbGwuZXJyb3IgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhci1maWxsLnF1ZXN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI3MCA3MCUgNTAlKSIsICJoc2woMjcwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiAzMnB4OwogICAgICB9CgogICAgICAubWVzc2FnZS1zZWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLmluZm8gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDQ1JSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5tZXNzYWdlLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1NSUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLmVycm9yIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAubWVzc2FnZS1pY29uLnF1ZXN0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCAiaHNsKDI3MCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLm1lc3NhZ2UtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4NSUpIil9OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmFjdGlvbnMtc2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDMwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnNlY29uZGFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkyJSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA1MCUpIiwgImhzbCgyMTAgMTAwJSA1NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQ1JSkiLCAiaHNsKDM4IDkyJSA1MCUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5Lndhcm5pbmc6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMzggOTIlIDQwJSkiLCAiaHNsKDM4IDkyJSA0NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5wcmltYXJ5LmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLnByaW1hcnkuZXJyb3I6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsICJoc2woMCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5xdWVzdGlvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDUwJSkiLCAiaHNsKDI3MCA3MCUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24ucHJpbWFyeS5xdWVzdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNzAgNzAlIDQ1JSkiLCAiaHNsKDI3MCA3MCUgNTAlKSIpfTsKICAgICAgfQoKICAgICAgLmNvdW50ZG93biB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBtYXJnaW4tbGVmdDogMnB4OwogICAgICB9CgogICAgICAuZGlzbWlzcy1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmRpc21pc3MtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAyMiUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3MCUpIil9OwogICAgICB9CiAgICBgCiAgICAgICAgXTsKICAgICAgICByZW5kZXIoKSB7CiAgICAgICAgICBjb25zdCBiYXIgPSB0aGlzLmN1cnJlbnRCYXI7CiAgICAgICAgICBjb25zdCB0eXBlNSA9IGJhcj8udHlwZSB8fCAiaW5mbyI7CiAgICAgICAgICBjb25zdCBoYXNUaW1lb3V0ID0gYmFyPy50aW1lb3V0ICYmIHRoaXMudGltZVJlbWFpbmluZyA+IDA7CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbmJhci1pdGVtIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25iYXItY29udGVudCI+CiAgICAgICAgICAke2JhciA/IGIyYAogICAgICAgICAgICAke2hhc1RpbWVvdXQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzcy1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icHJvZ3Jlc3MtYmFyLWZpbGwgJHt0eXBlNX0iCiAgICAgICAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnByb2dyZXNzUGVyY2VudH0lIgogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1lc3NhZ2Utc2VjdGlvbiI+CiAgICAgICAgICAgICAgICAke2Jhci5pY29uID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibWVzc2FnZS1pY29uICR7dHlwZTV9IgogICAgICAgICAgICAgICAgICAgIC5pY29uPSR7YmFyLmljb259CiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE2IgogICAgICAgICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWVzc2FnZS10ZXh0Ij4ke2Jhci5tZXNzYWdlfTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb25zLXNlY3Rpb24iPgogICAgICAgICAgICAgICAgJHtiYXIuYWN0aW9ucy5tYXAoKGFjdGlvbikgPT4gdGhpcy5yZW5kZXJBY3Rpb25CdXR0b24oYWN0aW9uLCBiYXIsIGhhc1RpbWVvdXQpKX0KICAgICAgICAgICAgICAgICR7YmFyLmRpc21pc3NpYmxlID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzbWlzcy1idXR0b24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVEaXNtaXNzKCl9CiAgICAgICAgICAgICAgICAgICAgdGl0bGU9IkRpc21pc3MiCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICAgICAgfQogICAgICAgIHJlbmRlckFjdGlvbkJ1dHRvbihhY3Rpb24sIGJhciwgaGFzVGltZW91dCkgewogICAgICAgICAgY29uc3QgaXNQcmltYXJ5ID0gYWN0aW9uLnByaW1hcnk7CiAgICAgICAgICBjb25zdCB0eXBlNSA9IGJhci50eXBlIHx8ICJpbmZvIjsKICAgICAgICAgIGNvbnN0IGlzRGVmYXVsdEFjdGlvbiA9IGJhci50aW1lb3V0Py5kZWZhdWx0QWN0aW9uSWQgPT09IGFjdGlvbi5pZDsKICAgICAgICAgIGNvbnN0IHNob3dDb3VudGRvd24gPSBoYXNUaW1lb3V0ICYmIGlzRGVmYXVsdEFjdGlvbjsKICAgICAgICAgIGNvbnN0IHNlY29uZHMgPSBNYXRoLmNlaWwodGhpcy50aW1lUmVtYWluaW5nIC8gMWUzKTsKICAgICAgICAgIHJldHVybiBiMmAKICAgICAgPGJ1dHRvbgogICAgICAgIGNsYXNzPSJhY3Rpb24tYnV0dG9uICR7aXNQcmltYXJ5ID8gYHByaW1hcnkgJHt0eXBlNX1gIDogInNlY29uZGFyeSJ9IgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQWN0aW9uKGFjdGlvbi5pZCwgZmFsc2UpfQogICAgICA+CiAgICAgICAgJHthY3Rpb24uaWNvbiA/IGIyYAogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29ufSBpY29uU2l6ZT0iMTIiPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3Bhbj4ke2FjdGlvbi5sYWJlbH08L3NwYW4+CiAgICAgICAgJHtzaG93Q291bnRkb3duID8gYjJgCiAgICAgICAgICA8c3BhbiBjbGFzcz0iY291bnRkb3duIj4oJHtzZWNvbmRzfXMpPC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgPC9idXR0b24+CiAgICBgOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFB1YmxpYyBBUEkgPT09PT09PT09PQogICAgICAgIC8qKgogICAgICAgICAqIFNob3cgYW4gYWN0aW9uIGJhciB3aXRoIHRoZSBnaXZlbiBvcHRpb25zLgogICAgICAgICAqIFJldHVybnMgYSBwcm9taXNlIHRoYXQgcmVzb2x2ZXMgd2hlbiBhbiBhY3Rpb24gaXMgdGFrZW4uCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgICAgIHRoaXMucXVldWUucHVzaCh7IG9wdGlvbnMsIHJlc29sdmU6IHJlc29sdmUyIH0pOwogICAgICAgICAgICBpZiAoIXRoaXMuY3VycmVudEJhcikgewogICAgICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBEaXNtaXNzIHRoZSBjdXJyZW50IGFjdGlvbiBiYXIgd2l0aG91dCB0cmlnZ2VyaW5nIGFueSBhY3Rpb24uCiAgICAgICAgICovCiAgICAgICAgZGlzbWlzcygpIHsKICAgICAgICAgIHRoaXMuaGFuZGxlRGlzbWlzcygpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDbGVhciBhbGwgcGVuZGluZyBhY3Rpb24gYmFycyBpbiB0aGUgcXVldWUuCiAgICAgICAgICovCiAgICAgICAgY2xlYXJRdWV1ZSgpIHsKICAgICAgICAgIGZvciAoY29uc3QgaXRlbSBvZiB0aGlzLnF1ZXVlKSB7CiAgICAgICAgICAgIGl0ZW0ucmVzb2x2ZSh7IGFjdGlvbklkOiAiZGlzbWlzc2VkIiwgdGltZWRPdXQ6IGZhbHNlIH0pOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5xdWV1ZSA9IFtdOwogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFByaXZhdGUgTWV0aG9kcyA9PT09PT09PT09CiAgICAgICAgLyoqCiAgICAgICAgICogSGlkZSB0aGUgY3VycmVudCBhY3Rpb25iYXIgd2l0aCBhbmltYXRpb24uCiAgICAgICAgICogUmVtb3ZlcyB2aXNpYmxlIGNsYXNzIGZpcnN0IHRvIHRyaWdnZXIgQ1NTIHRyYW5zaXRpb24sIHRoZW4gY2xlYXJzIGNvbnRlbnQgYWZ0ZXIgYW5pbWF0aW9uLgogICAgICAgICAqLwogICAgICAgIGFzeW5jIGhpZGVDdXJyZW50QmFyKCkgewogICAgICAgICAgdGhpcy5jbGFzc0xpc3QucmVtb3ZlKCJ2aXNpYmxlIik7CiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAyMjApKTsKICAgICAgICAgIHRoaXMuY3VycmVudEJhciA9IG51bGw7CiAgICAgICAgICB0aGlzLmN1cnJlbnRSZXNvbHZlID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgYXN5bmMgcHJvY2Vzc1F1ZXVlKCkgewogICAgICAgICAgaWYgKHRoaXMucXVldWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICAgIHRoaXMuaGlkZUN1cnJlbnRCYXIoKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgY29uc3QgaXRlbSA9IHRoaXMucXVldWUuc2hpZnQoKTsKICAgICAgICAgIHRoaXMuY3VycmVudEJhciA9IGl0ZW0ub3B0aW9uczsKICAgICAgICAgIHRoaXMuY3VycmVudFJlc29sdmUgPSBpdGVtLnJlc29sdmU7CiAgICAgICAgICB0aGlzLmlzVmlzaWJsZSA9IHRydWU7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChpdGVtLm9wdGlvbnMudGltZW91dCkgewogICAgICAgICAgICB0aGlzLnN0YXJ0VGltZW91dChpdGVtLm9wdGlvbnMudGltZW91dC5kdXJhdGlvbiwgaXRlbS5vcHRpb25zLnRpbWVvdXQuZGVmYXVsdEFjdGlvbklkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgc3RhcnRUaW1lb3V0KGR1cmF0aW9uLCBkZWZhdWx0QWN0aW9uSWQpIHsKICAgICAgICAgIHRoaXMudGltZVJlbWFpbmluZyA9IGR1cmF0aW9uOwogICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSAxMDA7CiAgICAgICAgICBjb25zdCBzdGFydFRpbWUgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgdXBkYXRlSW50ZXJ2YWwgPSA1MDsKICAgICAgICAgIHRoaXMudGltZW91dEludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgICBjb25zdCBlbGFwc2VkID0gRGF0ZS5ub3coKSAtIHN0YXJ0VGltZTsKICAgICAgICAgICAgdGhpcy50aW1lUmVtYWluaW5nID0gTWF0aC5tYXgoMCwgZHVyYXRpb24gLSBlbGFwc2VkKTsKICAgICAgICAgICAgdGhpcy5wcm9ncmVzc1BlcmNlbnQgPSB0aGlzLnRpbWVSZW1haW5pbmcgLyBkdXJhdGlvbiAqIDEwMDsKICAgICAgICAgICAgaWYgKHRoaXMudGltZVJlbWFpbmluZyA8PSAwKSB7CiAgICAgICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpOwogICAgICAgICAgICAgIHRoaXMuaGFuZGxlQWN0aW9uKGRlZmF1bHRBY3Rpb25JZCwgdHJ1ZSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIHVwZGF0ZUludGVydmFsKTsKICAgICAgICB9CiAgICAgICAgY2xlYXJUaW1lb3V0SW50ZXJ2YWwoKSB7CiAgICAgICAgICBpZiAodGhpcy50aW1lb3V0SW50ZXJ2YWwpIHsKICAgICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLnRpbWVvdXRJbnRlcnZhbCk7CiAgICAgICAgICAgIHRoaXMudGltZW91dEludGVydmFsID0gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaGFuZGxlQWN0aW9uKGFjdGlvbklkLCB0aW1lZE91dCkgewogICAgICAgICAgdGhpcy5jbGVhclRpbWVvdXRJbnRlcnZhbCgpOwogICAgICAgICAgaWYgKHRoaXMuY3VycmVudFJlc29sdmUpIHsKICAgICAgICAgICAgdGhpcy5jdXJyZW50UmVzb2x2ZSh7IGFjdGlvbklkLCB0aW1lZE91dCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMucHJvY2Vzc1F1ZXVlKCk7CiAgICAgICAgfQogICAgICAgIGhhbmRsZURpc21pc3MoKSB7CiAgICAgICAgICB0aGlzLmhhbmRsZUFjdGlvbigiZGlzbWlzc2VkIiwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgICAgICB0aGlzLmNsZWFyVGltZW91dEludGVydmFsKCk7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzQWN0aW9uYmFyMiA9IF9jbGFzc1RoaXM7CiAgICB9KSgpOwogIH0KfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzCnZhciBUZXJtaW5hbFRhYk1hbmFnZXI7CnZhciBpbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyID0gX19lc20oewogICJub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsL3Rlcm1pbmFsLXRhYi1tYW5hZ2VyLmpzIigpIHsKICAgIFRlcm1pbmFsVGFiTWFuYWdlciA9IGNsYXNzIHsKICAgICAgdGFicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICAgIHRhYkNvdW50ZXIgPSAwOwogICAgICB4dGVybUJ1bmRsZSA9IG51bGw7CiAgICAgIHh0ZXJtRml0QWRkb25CdW5kbGUgPSBudWxsOwogICAgICAvKioKICAgICAgICogSW5pdGlhbGl6ZSB0aGUgbWFuYWdlciB3aXRoIGxvYWRlZCB4dGVybSBtb2R1bGVzLgogICAgICAgKiBNdXN0IGJlIGNhbGxlZCBiZWZvcmUgY3JlYXRpbmcgdGFicy4KICAgICAgICovCiAgICAgIHNldFh0ZXJtTW9kdWxlcyh4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGUpIHsKICAgICAgICB0aGlzLnh0ZXJtQnVuZGxlID0geHRlcm1CdW5kbGU7CiAgICAgICAgdGhpcy54dGVybUZpdEFkZG9uQnVuZGxlID0gZml0QWRkb25CdW5kbGU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdlbmVyYXRlIHVuaXF1ZSB0YWIgSUQKICAgICAgICovCiAgICAgIGdlbmVyYXRlVGFiSWQoKSB7CiAgICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgICAgcmV0dXJuIGB0ZXJtaW5hbC0ke3RoaXMudGFiQ291bnRlcn0tJHtEYXRlLm5vdygpfWA7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBkZWZhdWx0IGxhYmVsIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdExhYmVsKHR5cGU1LCBtZXRhZGF0YSkgewogICAgICAgIHN3aXRjaCAodHlwZTUpIHsKICAgICAgICAgIGNhc2UgInNoZWxsIjoKICAgICAgICAgICAgcmV0dXJuICJiYXNoIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiBtZXRhZGF0YT8uc2NyaXB0TmFtZSB8fCAic2NyaXB0IjsKICAgICAgICAgIGNhc2UgInBhY2thZ2UtdXBkYXRlIjoKICAgICAgICAgICAgcmV0dXJuIG1ldGFkYXRhPy5wYWNrYWdlTmFtZSA/IGB1cGRhdGUgJHttZXRhZGF0YS5wYWNrYWdlTmFtZX1gIDogInVwZGF0ZSI7CiAgICAgICAgICBjYXNlICJjdXN0b20iOgogICAgICAgICAgICByZXR1cm4gbWV0YWRhdGE/LmNvbW1hbmQgfHwgInByb2Nlc3MiOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgcmV0dXJuICJ0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgZGVmYXVsdCBpY29uIGZvciB0YWIgdHlwZQogICAgICAgKi8KICAgICAgZ2V0RGVmYXVsdEljb24odHlwZTUpIHsKICAgICAgICBzd2l0Y2ggKHR5cGU1KSB7CiAgICAgICAgICBjYXNlICJzaGVsbCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnRlcm1pbmFsIjsKICAgICAgICAgIGNhc2UgInNjcmlwdCI6CiAgICAgICAgICAgIHJldHVybiAibHVjaWRlOnBsYXkiOwogICAgICAgICAgY2FzZSAicGFja2FnZS11cGRhdGUiOgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTpwYWNrYWdlQ2hlY2siOwogICAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICAgICAgcmV0dXJuICJsdWNpZGU6Y29kZSI7CiAgICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICByZXR1cm4gImx1Y2lkZTp0ZXJtaW5hbCI7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGVybWluYWwgdGhlbWUgY29uZmlndXJhdGlvbgogICAgICAgKi8KICAgICAgZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCkgewogICAgICAgIGlmIChpc0JyaWdodCkgewogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgICAgIGN1cnNvcjogIiMzMzMzMzMiLAogICAgICAgICAgICBjdXJzb3JBY2NlbnQ6ICIjZmZmZmZmIiwKICAgICAgICAgICAgc2VsZWN0aW9uOiAicmdiYSgwLCAwLCAwLCAwLjIpIiwKICAgICAgICAgICAgYmxhY2s6ICIjMDAwMDAwIiwKICAgICAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgICAgIGdyZWVuOiAiIzAwYmMwMCIsCiAgICAgICAgICAgIHllbGxvdzogIiM5NDk4MDAiLAogICAgICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgICAgIG1hZ2VudGE6ICIjYmMwNWJjIiwKICAgICAgICAgICAgY3lhbjogIiMwNTk4YmMiLAogICAgICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgICAgICBicmlnaHRCbGFjazogIiM2NjY2NjYiLAogICAgICAgICAgICBicmlnaHRSZWQ6ICIjY2QzMTMxIiwKICAgICAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2I1YmEwMCIsCiAgICAgICAgICAgIGJyaWdodEJsdWU6ICIjMDQ1MWE1IiwKICAgICAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgICAgICBicmlnaHRDeWFuOiAiIzA1OThiYyIsCiAgICAgICAgICAgIGJyaWdodFdoaXRlOiAiI2E1YTVhNSIKICAgICAgICAgIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICIjMDAwMDAwIiwKICAgICAgICAgICAgZm9yZWdyb3VuZDogIiNmZmZmZmYiLAogICAgICAgICAgICBjdXJzb3I6ICIjZmZmZmZmIiwKICAgICAgICAgICAgY3Vyc29yQWNjZW50OiAiIzAwMDAwMCIsCiAgICAgICAgICAgIHNlbGVjdGlvbjogInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKSIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDcmVhdGUgYSBuZXcgdGFiIGluc3RhbmNlCiAgICAgICAqLwogICAgICBjcmVhdGVUYWIob3B0aW9ucywgaXNCcmlnaHQpIHsKICAgICAgICBpZiAoIXRoaXMueHRlcm1CdW5kbGUgfHwgIXRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZSkgewogICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJUZXJtaW5hbFRhYk1hbmFnZXI6IHh0ZXJtIG1vZHVsZXMgbm90IGluaXRpYWxpemVkLiBDYWxsIHNldFh0ZXJtTW9kdWxlcygpIGZpcnN0LiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2VuZXJhdGVUYWJJZCgpOwogICAgICAgIGNvbnN0IHR5cGU1ID0gb3B0aW9ucy50eXBlOwogICAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IHRoaXMueHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgICAgY29udmVydEVvbDogdHJ1ZSwKICAgICAgICAgIGN1cnNvckJsaW5rOiB0cnVlLAogICAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCksCiAgICAgICAgICBmb250RmFtaWx5OiAnTWVubG8sIE1vbmFjbywgIkNvdXJpZXIgTmV3IiwgbW9ub3NwYWNlJywKICAgICAgICAgIGZvbnRTaXplOiAxMywKICAgICAgICAgIGxpbmVIZWlnaHQ6IDEuMgogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGZpdEFkZG9uID0gbmV3IHRoaXMueHRlcm1GaXRBZGRvbkJ1bmRsZS5GaXRBZGRvbigpOwogICAgICAgIHRlcm1pbmFsLmxvYWRBZGRvbihmaXRBZGRvbik7CiAgICAgICAgY29uc3QgdGFiMiA9IHsKICAgICAgICAgIGlkLAogICAgICAgICAgbGFiZWw6IG9wdGlvbnMubGFiZWwgfHwgdGhpcy5nZXREZWZhdWx0TGFiZWwodHlwZTUsIG9wdGlvbnMubWV0YWRhdGEpLAogICAgICAgICAgaWNvbk5hbWU6IG9wdGlvbnMuaWNvbk5hbWUgfHwgdGhpcy5nZXREZWZhdWx0SWNvbih0eXBlNSksCiAgICAgICAgICB0eXBlOiB0eXBlNSwKICAgICAgICAgIGNsb3NlYWJsZTogb3B0aW9ucy5jbG9zZWFibGUgPz8gdHlwZTUgIT09ICJzaGVsbCIsCiAgICAgICAgICB0ZXJtaW5hbCwKICAgICAgICAgIGZpdEFkZG9uLAogICAgICAgICAgcHJvY2VzczogbnVsbCwKICAgICAgICAgIGlucHV0V3JpdGVyOiBudWxsLAogICAgICAgICAgZXhpdGVkOiBmYWxzZSwKICAgICAgICAgIGV4aXRDb2RlOiBudWxsLAogICAgICAgICAgY3JlYXRlZEF0OiBEYXRlLm5vdygpLAogICAgICAgICAgbWV0YWRhdGE6IG9wdGlvbnMubWV0YWRhdGEKICAgICAgICB9OwogICAgICAgIHRoaXMudGFicy5zZXQoaWQsIHRhYjIpOwogICAgICAgIHJldHVybiB0YWIyOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBHZXQgdGFiIGJ5IElECiAgICAgICAqLwogICAgICBnZXRUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmdldChpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIEdldCBhbGwgdGFicyBhcyBhcnJheSAob3JkZXJlZCBieSBjcmVhdGlvbiB0aW1lKQogICAgICAgKi8KICAgICAgZ2V0QWxsVGFicygpIHsKICAgICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnRhYnMudmFsdWVzKCkpLnNvcnQoKGE1LCBiNSkgPT4gYTUuY3JlYXRlZEF0IC0gYjUuY3JlYXRlZEF0KTsKICAgICAgfQogICAgICAvKioKICAgICAgICogR2V0IHRoZSBudW1iZXIgb2YgdGFicwogICAgICAgKi8KICAgICAgZ2V0VGFiQ291bnQoKSB7CiAgICAgICAgcmV0dXJuIHRoaXMudGFicy5zaXplOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBDaGVjayBpZiB0YWIgZXhpc3RzCiAgICAgICAqLwogICAgICBoYXNUYWIoaWQpIHsKICAgICAgICByZXR1cm4gdGhpcy50YWJzLmhhcyhpZCk7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIENsb3NlIGFuZCBjbGVhbnVwIGEgdGFiCiAgICAgICAqLwogICAgICBjbG9zZVRhYihpZCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgaWYgKHRhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRhYjIucHJvY2Vzcy5raWxsKCk7CiAgICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8ga2lsbCBwcm9jZXNzOiIsIGUxMSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGRpc3Bvc2UgdGVybWluYWw6IiwgZTExKTsKICAgICAgICB9CiAgICAgICAgdGhpcy50YWJzLmRlbGV0ZShpZCk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0KICAgICAgLyoqCiAgICAgICAqIFJlbmFtZSBhIHRhYgogICAgICAgKi8KICAgICAgcmVuYW1lVGFiKGlkLCBuZXdMYWJlbCkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgdGFiMi5sYWJlbCA9IG5ld0xhYmVsOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBVcGRhdGUgdGFiIHByb2Nlc3Mgc3RhdGUgdG8gZXhpdGVkCiAgICAgICAqLwogICAgICBtYXJrVGFiRXhpdGVkKGlkLCBleGl0Q29kZSkgewogICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYnMuZ2V0KGlkKTsKICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgdGFiMi5leGl0ZWQgPSB0cnVlOwogICAgICAgIHRhYjIuZXhpdENvZGUgPSBleGl0Q29kZTsKICAgICAgfQogICAgICAvKioKICAgICAgICogU2V0IHByb2Nlc3MgZm9yIGEgdGFiCiAgICAgICAqLwogICAgICBzZXRUYWJQcm9jZXNzKGlkLCBwcm9jZXNzNCwgaW5wdXRXcml0ZXIpIHsKICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJzLmdldChpZCk7CiAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRhYjIucHJvY2VzcyA9IHByb2Nlc3M0OwogICAgICAgIHRhYjIuaW5wdXRXcml0ZXIgPSBpbnB1dFdyaXRlcjsKICAgICAgfQogICAgICAvKioKICAgICAgICogVXBkYXRlIHRoZW1lIGZvciBhbGwgdGVybWluYWxzCiAgICAgICAqLwogICAgICB1cGRhdGVBbGxUaGVtZXMoaXNCcmlnaHQpIHsKICAgICAgICBjb25zdCB0aGVtZSA9IHRoaXMuZ2V0VGVybWluYWxUaGVtZShpc0JyaWdodCk7CiAgICAgICAgZm9yIChjb25zdCB0YWIyIG9mIHRoaXMudGFicy52YWx1ZXMoKSkgewogICAgICAgICAgdGFiMi50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhlbWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIC8qKgogICAgICAgKiBEaXNwb3NlIGFsbCB0YWJzIGFuZCBjbGVhbnVwCiAgICAgICAqLwogICAgICBkaXNwb3NlQWxsKCkgewogICAgICAgIGZvciAoY29uc3QgW2lkXSBvZiB0aGlzLnRhYnMpIHsKICAgICAgICAgIHRoaXMuY2xvc2VUYWIoaWQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnRhYnMuY2xlYXIoKTsKICAgICAgfQogICAgfTsKICB9Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcwp2YXIgZGVlc193b3Jrc3BhY2VfdGVybWluYWxfZXhwb3J0cyA9IHt9OwpfX2V4cG9ydChkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzLCB7CiAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOiAoKSA9PiBEZWVzV29ya3NwYWNlVGVybWluYWwKfSk7CnZhciBfX2VzRGVjb3JhdGU1MSwgX19ydW5Jbml0aWFsaXplcnM1MiwgRGVlc1dvcmtzcGFjZVRlcm1pbmFsOwp2YXIgaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCA9IF9fZXNtKHsKICAibm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC5qcyIoKSB7CiAgICBpbml0X2Rpc3RfdHMyNigpOwogICAgaW5pdF9kaXN0X3RzMjUoKTsKICAgIGluaXRfdGhlbWUoKTsKICAgIGluaXRfZ3JvdXBfcnVudGltZSgpOwogICAgaW5pdF9kZWVzX2ljb24oKTsKICAgIGluaXRfZGVlc19hY3Rpb25iYXIoKTsKICAgIGluaXRfdGVybWluYWxfdGFiX21hbmFnZXIoKTsKICAgIGluaXRfc2VydmljZXMoKTsKICAgIF9fZXNEZWNvcmF0ZTUxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICAgICAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICAgICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgICAgIHJldHVybiBmNzsKICAgICAgfQogICAgICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogICAgICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgICAgIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogICAgICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICAgICAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgICAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICAgICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgICAgIH07CiAgICAgICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgICAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgICAgIGRvbmUgPSB0cnVlOwogICAgfTsKICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogICAgICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICAgICAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwogICAgfTsKICAgIERlZXNXb3Jrc3BhY2VUZXJtaW5hbCA9ICgoKSA9PiB7CiAgICAgIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbCIpXTsKICAgICAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgICAgIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2NsYXNzVGhpczsKICAgICAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgICAgIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogICAgICBsZXQgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX2Vudmlyb25tZW50VmFyaWFibGVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfdGFiQmFyV2lkdGhfZGVjb3JhdG9yczsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZGVjb3JhdG9yczsKICAgICAgbGV0IF9zaG93VGFiQmFyX2luaXRpYWxpemVycyA9IFtdOwogICAgICBsZXQgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgICAgIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgICAgIGxldCBfYWN0aXZlVGFiSWRfZGVjb3JhdG9yczsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9pbml0aWFsaXplcnMgPSBbXTsKICAgICAgbGV0IF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogICAgICB2YXIgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgICAgICB9CiAgICAgICAgc3RhdGljIHsKICAgICAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICAgICAgX3NldHVwQ29tbWFuZF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICAgICAgX2Vudmlyb25tZW50VmFyaWFibGVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgICAgICBfdGFiQmFyV2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgICAgICBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgICAgICBfdGFic19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICAgICAgX2FjdGl2ZVRhYklkX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9zZXR1cENvbW1hbmRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2V0dXBDb21tYW5kIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2V0dXBDb21tYW5kLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmouc2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBfc2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbnZpcm9ubWVudFZhcmlhYmxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW52aXJvbm1lbnRWYXJpYWJsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW52aXJvbm1lbnRWYXJpYWJsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5lbnZpcm9ubWVudFZhcmlhYmxlcyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfaW5pdGlhbGl6ZXJzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3RhYkJhcldpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkJhcldpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0YWJCYXJXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJCYXJXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICAgICAgb2JqLnRhYkJhcldpZHRoID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIF90YWJCYXJXaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgICAgICBfX2VzRGVjb3JhdGU1MSh0aGlzLCBudWxsLCBfc2hvd1RhYkJhcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93VGFiQmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFiQmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dUYWJCYXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5zaG93VGFiQmFyID0gdmFsdWUyOwogICAgICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VGFiQmFyX2luaXRpYWxpemVycywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgICAgICBvYmoudGFicyA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGFic19pbml0aWFsaXplcnMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICAgIF9fZXNEZWNvcmF0ZTUxKHRoaXMsIG51bGwsIF9hY3RpdmVUYWJJZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVUYWJJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlVGFiSWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlVGFiSWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgICAgIG9iai5hY3RpdmVUYWJJZCA9IHZhbHVlMjsKICAgICAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZlVGFiSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgX19lc0RlY29yYXRlNTEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgZGVtbyA9ICgpID0+IHsKICAgICAgICAgIGNvbnN0IGVudjIgPSBuZXcgV2ViQ29udGFpbmVyRW52aXJvbm1lbnQoKTsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7ZW52Mn0+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbD5gOwogICAgICAgIH07CiAgICAgICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgICAgIC8vIElOU1RBTkNFCiAgICAgICAgcmVzaXplT2JzZXJ2ZXI7CiAgICAgICAgdGFiTWFuYWdlcjsKICAgICAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAgICAgLyoqCiAgICAgICAgICogVGhlIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCAocmVxdWlyZWQpLgogICAgICAgICAqIFVzZSBXZWJDb250YWluZXJFbnZpcm9ubWVudCBmb3IgYnJvd3Nlci1iYXNlZCBleGVjdXRpb24uCiAgICAgICAgICovCiAgICAgICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgICNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3NldHVwQ29tbWFuZF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAgICAgZ2V0IHNldHVwQ29tbWFuZCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IHNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI3NldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9zZXR1cENvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9lbnZpcm9ubWVudFZhcmlhYmxlc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAgICAgLyoqCiAgICAgICAgICogRW52aXJvbm1lbnQgdmFyaWFibGVzIHRvIHNldCBpbiB0aGUgc2hlbGwKICAgICAgICAgKi8KICAgICAgICBnZXQgZW52aXJvbm1lbnRWYXJpYWJsZXMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgICAgICB9CiAgICAgICAgc2V0IGVudmlyb25tZW50VmFyaWFibGVzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jZW52aXJvbm1lbnRWYXJpYWJsZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgICAgICB9CiAgICAgICAgI3RhYkJhcldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfZW52aXJvbm1lbnRWYXJpYWJsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJCYXJXaWR0aF9pbml0aWFsaXplcnMsIDE2MCkpOwogICAgICAgIC8qKgogICAgICAgICAqIFdpZHRoIG9mIHRoZSB0YWIgYmFyIGluIHBpeGVscwogICAgICAgICAqLwogICAgICAgIGdldCB0YWJCYXJXaWR0aCgpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgICAgIH0KICAgICAgICBzZXQgdGFiQmFyV2lkdGgodmFsdWUyKSB7CiAgICAgICAgICB0aGlzLiN0YWJCYXJXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3RhYkJhcldpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfc2hvd1RhYkJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgICAgICAvKioKICAgICAgICAgKiBXaGV0aGVyIHRvIHNob3cgdGhlIHRhYiBiYXIKICAgICAgICAgKi8KICAgICAgICBnZXQgc2hvd1RhYkJhcigpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiQmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBzaG93VGFiQmFyKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jc2hvd1RhYkJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTIodGhpcywgX3Nob3dUYWJCYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgICAgICAvLyBUYWIgc3RhdGUKICAgICAgICBnZXQgdGFicygpIHsKICAgICAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCB0YWJzKHZhbHVlMikgewogICAgICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgICAjYWN0aXZlVGFiSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Mih0aGlzLCBfYWN0aXZlVGFiSWRfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICAgICAgZ2V0IGFjdGl2ZVRhYklkKCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICAgICAgfQogICAgICAgIHNldCBhY3RpdmVUYWJJZCh2YWx1ZTIpIHsKICAgICAgICAgIHRoaXMuI2FjdGl2ZVRhYklkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICAgICAgfQogICAgICAgIC8vIFRoZW1lIHN1YnNjcmlwdGlvbiBmb3IgZHluYW1pYyB0aGVtZSB1cGRhdGVzCiAgICAgICAgdGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IChfX3J1bkluaXRpYWxpemVyczUyKHRoaXMsIF9hY3RpdmVUYWJJZF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgICAgIGlzQnJpZ2h0ID0gZmFsc2U7CiAgICAgICAgLy8gQWN0aW9uYmFyIHJlZmVyZW5jZSBmb3IgdGVybWluYWwtY29udGV4dCBub3RpZmljYXRpb25zCiAgICAgICAgdGVybWluYWxBY3Rpb25iYXIgPSBudWxsOwogICAgICAgIC8qKgogICAgICAgICAqIFByb21pc2UgdGhhdCByZXNvbHZlcyB3aGVuIHRoZSBlbnZpcm9ubWVudCBpcyByZWFkeS4KICAgICAgICAgKiBAZGVwcmVjYXRlZCBVc2UgZXhlY3V0aW9uRW52aXJvbm1lbnQgZGlyZWN0bHkKICAgICAgICAgKi8KICAgICAgICBlbnZpcm9ubWVudERlZmVycmVkID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuRGVmZXJyZWQoKTsKICAgICAgICBlbnZpcm9ubWVudFByb21pc2UgPSB0aGlzLmVudmlyb25tZW50RGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgICAgIHN1cGVyKCk7CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIgPSBuZXcgVGVybWluYWxUYWJNYW5hZ2VyKCk7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICAgICAgdGhpcy5oYW5kbGVSZXNpemUoKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgICNhY3RpdmUtdGVybWluYWwtY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgZGVlcy1hY3Rpb25iYXIgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUYWIgYmFyIG9uIHRoZSByaWdodCBzaWRlICovCiAgICAgIC50YWItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudGFiLWJhci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC41cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItYmFyLXRpdGxlIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC50YWItYmFyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uIHsKICAgICAgICB3aWR0aDogMjJweDsKICAgICAgICBoZWlnaHQ6IDIycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWItYWN0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAudGFiLWxpc3QgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTBweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyNSUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC10YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDk1JSkiLCAiaHNsKDIxMCAzMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0MCUpIiwgImhzbCgyMTAgMTAwJSA3MCUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtdGFiLmV4aXRlZCB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAudGFiLWljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLWljb24ucnVubmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA0MCUpIiwgImhzbCgxNDIgNzAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuZXhpdC1iYWRnZSB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDFweCA1cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSA5MCUpIiwgImhzbCgxNDIgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyIDcwJSAzNSUpIiwgImhzbCgxNDIgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5leGl0LWJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDkzJSkiLCAiaHNsKDAgMzAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNDUlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZSB7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDEgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAyNSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLyogeHRlcm0uanMgc3R5bGVzICovCiAgICAgIC54dGVybSB7CiAgICAgICAgZm9udC1mZWF0dXJlLXNldHRpbmdzOiAnbGlnYScgMDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgLW1zLXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybS5mb2N1cywKICAgICAgLnh0ZXJtOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWhlbHBlcnMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogNTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXItdGV4dGFyZWEgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgYm9yZGVyOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIHRvcDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogLTU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZmZmZmZmIil9OwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC5jb21wb3NpdGlvbi12aWV3LmFjdGl2ZSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwMDAwMDAiKX07CiAgICAgICAgb3ZlcmZsb3cteTogc2Nyb2xsOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXNjcmVlbiBjYW52YXMgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JvbGwtYXJlYSB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAueHRlcm0tY2hhci1tZWFzdXJlLWVsZW1lbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAtOTk5OWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiBub3JtYWw7CiAgICAgIH0KCiAgICAgIC54dGVybSB7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAueHRlcm0uZW5hYmxlLW1vdXNlLWV2ZW50cyB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAueHRlcm0ueHRlcm0tY3Vyc29yLXBvaW50ZXIgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnh0ZXJtLmNvbHVtbi1zZWxlY3QuZm9jdXMgewogICAgICAgIGN1cnNvcjogY3Jvc3NoYWlyOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLWFjY2Vzc2liaWxpdHksCiAgICAgIC54dGVybSAueHRlcm0tbWVzc2FnZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBjb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC54dGVybSAubGl2ZS1yZWdpb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtOTk5OXB4OwogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWRpbSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAueHRlcm0tdW5kZXJsaW5lIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgYAogICAgICAgIF07CiAgICAgICAgcmVuZGVyKCkgewogICAgICAgICAgY29uc3QgYWN0aXZlVGFiID0gdGhpcy5hY3RpdmVUYWJJZCA/IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCkgOiBudWxsOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgIDwhLS0gTWFpbiB0ZXJtaW5hbCBhcmVhIC0tPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWNvbnRlbnQiPgogICAgICAgICAgJHthY3RpdmVUYWIgPyBiMmAKICAgICAgICAgICAgPGRpdiBpZD0iYWN0aXZlLXRlcm1pbmFsLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp0ZXJtaW5hbCJ9IGljb25TaXplPSIzMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4+Tm8gdGVybWluYWwgb3Blbjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgICAgPGRlZXMtYWN0aW9uYmFyPjwvZGVlcy1hY3Rpb25iYXI+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gVmVydGljYWwgdGFiIGJhciBvbiB0aGUgcmlnaHQgLS0+CiAgICAgICAgJHt0aGlzLnNob3dUYWJCYXIgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1iYXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLnRhYkJhcldpZHRofXB4Ij4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1oZWFkZXIiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItYmFyLXRpdGxlIj5UZXJtaW5hbHM8L3NwYW4+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFiLWJhci1hY3Rpb25zIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYi1hY3Rpb24iIEBjbGljaz0ke3RoaXMuaGFuZGxlQWRkVGFifSB0aXRsZT0iTmV3IFRlcm1pbmFsIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGx1cyJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0YWItbGlzdCI+CiAgICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InRlcm1pbmFsLXRhYiAke3RhYjIuaWQgPT09IHRoaXMuYWN0aXZlVGFiSWQgPyAiYWN0aXZlIiA6ICIifSAke3RhYjIuZXhpdGVkID8gImV4aXRlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc3dpdGNoVG9UYWIodGFiMi5pZCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAuaWNvbj0ke3RhYjIuaWNvbk5hbWV9CiAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWItaWNvbiAke3RhYjIucHJvY2VzcyAmJiAhdGFiMi5leGl0ZWQgPyAicnVubmluZyIgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1sYWJlbCI+JHt0YWIyLmxhYmVsfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgJHt0YWIyLmV4aXRlZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJleGl0LWJhZGdlICR7dGFiMi5leGl0Q29kZSA9PT0gMCA/ICJzdWNjZXNzIiA6ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICR7dGFiMi5leGl0Q29kZX0KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0YWIyLmNsb3NlYWJsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItY2xvc2UiIEBjbGljaz0keyhlMTEpID0+IHRoaXMuaGFuZGxlVGFiQ2xvc2UoZTExLCB0YWIyLmlkKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgICAgIH0KICAgICAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgICAgICB0aGlzLmlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICAgICAgdGhpcy5pc0JyaWdodCA9IGdvQnJpZ2h0OwogICAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIudXBkYXRlQWxsVGhlbWVzKGdvQnJpZ2h0KTsKICAgICAgICAgIH0pOwogICAgICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgICAgIGNvbnN0IFt4dGVybUJ1bmRsZSwgZml0QWRkb25CdW5kbGVdID0gYXdhaXQgUHJvbWlzZS5hbGwoWwogICAgICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpCiAgICAgICAgICBdKTsKICAgICAgICAgIHRoaXMudGFiTWFuYWdlci5zZXRYdGVybU1vZHVsZXMoeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlKTsKICAgICAgICAgIGF3YWl0IHRoaXMuY3JlYXRlU2hlbGxUYWIoKTsKICAgICAgICB9CiAgICAgICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICAgIH0KICAgICAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci51bm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIH0KICAgICAgICAgIGlmICh0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24pIHsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uLnVuc3Vic2NyaWJlKCk7CiAgICAgICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgICAgICB9CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIuZGlzcG9zZUFsbCgpOwogICAgICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBUYWIgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgaGFuZGxlQWRkVGFiKCkgewogICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVTaGVsbFRhYigpOwogICAgICAgIH0KICAgICAgICBoYW5kbGVUYWJDbG9zZShlMTEsIHRhYklkKSB7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICB0aGlzLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICB9CiAgICAgICAgc3dpdGNoVG9UYWIodGFiSWQpIHsKICAgICAgICAgIGlmICh0YWJJZCA9PT0gdGhpcy5hY3RpdmVUYWJJZCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwcmV2aW91c1RhYklkID0gdGhpcy5hY3RpdmVUYWJJZDsKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZVRhYklkKSB7CiAgICAgICAgICAgIHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSB0YWJJZDsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgICAgICB0aGlzLmF0dGFjaFRlcm1pbmFsVG9Db250YWluZXIodGFiMik7CiAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1zd2l0Y2hlZCIsIHsKICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgICAgIGRldGFpbDogeyB0YWJJZCwgcHJldmlvdXNUYWJJZCB9CiAgICAgICAgICAgIH0pKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBkZXRhY2hBY3RpdmVUZXJtaW5hbCgpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmIChjb250YWluZXIpIHsKICAgICAgICAgICAgY29udGFpbmVyLmlubmVySFRNTCA9ICIiOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBhdHRhY2hUZXJtaW5hbFRvQ29udGFpbmVyKHRhYjIpIHsKICAgICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8uZ2V0RWxlbWVudEJ5SWQoImFjdGl2ZS10ZXJtaW5hbC1jb250YWluZXIiKTsKICAgICAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUoY29udGFpbmVyKTsKICAgICAgICAgIGNvbnRhaW5lci5pbm5lckhUTUwgPSAiIjsKICAgICAgICAgIHRhYjIudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgIHRhYjIudGVybWluYWwuZm9jdXMoKTsKICAgICAgICB9CiAgICAgICAgaGFuZGxlUmVzaXplKCkgewogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGhpcy5hY3RpdmVUYWJJZCk7CiAgICAgICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICAgICAgdGFiMi5maXRBZGRvbi5maXQoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAvLyA9PT09PT09PT09IFByb2Nlc3MgTWFuYWdlbWVudCA9PT09PT09PT09CiAgICAgICAgYXN5bmMgc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsIGNvbW1hbmQsIGFyZ3MgPSBbXSkgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx4MUJbMzFtIik7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx1Mjc0QyBObyBleGVjdXRpb24gZW52aXJvbm1lbnQgYXZhaWxhYmxlLlxyXG4iKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlswbSIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKCJJbml0aWFsaXppbmcgZW52aXJvbm1lbnQuLi5cclxuIik7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgY29uc3QgcHJvY2VzczQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnNwYXduKGNvbW1hbmQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBpbnB1dFdyaXRlciA9IHByb2Nlc3M0LmlucHV0LmdldFdyaXRlcigpOwogICAgICAgICAgICB0YWIyLnRlcm1pbmFsLm9uRGF0YSgoZGF0YSkgPT4gewogICAgICAgICAgICAgIGlucHV0V3JpdGVyLndyaXRlKGRhdGEpOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLnNldFRhYlByb2Nlc3ModGFiMi5pZCwgcHJvY2VzczQsIGlucHV0V3JpdGVyKTsKICAgICAgICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICAgICAgcHJvY2VzczQuZXhpdC50aGVuKChleGl0Q29kZSkgPT4gewogICAgICAgICAgICAgIHRoaXMuaGFuZGxlUHJvY2Vzc0V4aXQodGFiMi5pZCwgZXhpdENvZGUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoIlx4MUJbMzFtIik7CiAgICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoYFx1Mjc0QyBGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczogJHtlcnJvcn1ccgpgKTsKICAgICAgICAgICAgdGFiMi50ZXJtaW5hbC53cml0ZSgiXHgxQlswbSIpOwogICAgICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gc3Bhd24gcHJvY2VzczoiLCBlcnJvcik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGhhbmRsZVByb2Nlc3NFeGl0KHRhYklkLCBleGl0Q29kZSkgewogICAgICAgICAgY29uc3QgdGFiMiA9IHRoaXMudGFiTWFuYWdlci5nZXRUYWIodGFiSWQpOwogICAgICAgICAgaWYgKCF0YWIyKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB0aGlzLnRhYk1hbmFnZXIubWFya1RhYkV4aXRlZCh0YWJJZCwgZXhpdENvZGUpOwogICAgICAgICAgY29uc3QgbWVzc2FnZTIgPSBleGl0Q29kZSA9PT0gMCA/ICJcclxuXHgxQlszMm1bUHJvY2VzcyBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5XVx4MUJbMG1cclxuIiA6IGBccgpceDFCWzMxbVtQcm9jZXNzIGV4aXRlZCB3aXRoIGNvZGUgJHtleGl0Q29kZX1dXHgxQlswbVxyCmA7CiAgICAgICAgICB0YWIyLnRlcm1pbmFsLndyaXRlKG1lc3NhZ2UyKTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9jZXNzLWNvbXBsZXRlIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkLCBleGl0Q29kZSB9CiAgICAgICAgICB9KSk7CiAgICAgICAgICBpZiAodGFiMi5jbG9zZWFibGUpIHsKICAgICAgICAgICAgdGhpcy5zaG93RXhpdGVkVGFiQWN0aW9uYmFyKHRhYklkLCB0YWIyLmxhYmVsLCBleGl0Q29kZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIFNob3cgYWN0aW9uYmFyIG9mZmVyaW5nIHRvIGNsb3NlIGFuIGV4aXRlZCB0YWIKICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93RXhpdGVkVGFiQWN0aW9uYmFyKHRhYklkLCB0YWJMYWJlbCwgZXhpdENvZGUpIHsKICAgICAgICAgIGNvbnN0IGlzU3VjY2VzcyA9IGV4aXRDb2RlID09PSAwOwogICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5zaG93QWN0aW9uYmFyKHsKICAgICAgICAgICAgbWVzc2FnZTogaXNTdWNjZXNzID8gYCIke3RhYkxhYmVsfSIgY29tcGxldGVkLiBDbG9zZSB0YWI/YCA6IGAiJHt0YWJMYWJlbH0iIGV4aXRlZCAoY29kZSAke2V4aXRDb2RlfSkuIENsb3NlIHRhYj9gLAogICAgICAgICAgICB0eXBlOiBpc1N1Y2Nlc3MgPyAiaW5mbyIgOiAid2FybmluZyIsCiAgICAgICAgICAgIGljb246IGlzU3VjY2VzcyA/ICJsdWNpZGU6Y2hlY2tDaXJjbGUiIDogImx1Y2lkZTphbGVydFRyaWFuZ2xlIiwKICAgICAgICAgICAgYWN0aW9uczogWwogICAgICAgICAgICAgIHsgaWQ6ICJjbG9zZSIsIGxhYmVsOiAiQ2xvc2UgVGFiIiwgcHJpbWFyeTogdHJ1ZSB9LAogICAgICAgICAgICAgIHsgaWQ6ICJrZWVwIiwgbGFiZWw6ICJLZWVwIE9wZW4iIH0KICAgICAgICAgICAgXSwKICAgICAgICAgICAgdGltZW91dDogeyBkdXJhdGlvbjogMWU0LCBkZWZhdWx0QWN0aW9uSWQ6ICJjbG9zZSIgfSwKICAgICAgICAgICAgZGlzbWlzc2libGU6IHRydWUKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKHJlc3VsdC5hY3Rpb25JZCA9PT0gImNsb3NlIikgewogICAgICAgICAgICB0aGlzLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gPT09PT09PT09PSBQdWJsaWMgQVBJID09PT09PT09PT0KICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGUgYSBuZXcgc2hlbGwgdGFiCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgY3JlYXRlU2hlbGxUYWIobGFiZWwpIHsKICAgICAgICAgIGNvbnN0IHRhYjIgPSB0aGlzLnRhYk1hbmFnZXIuY3JlYXRlVGFiKHsKICAgICAgICAgICAgdHlwZTogInNoZWxsIiwKICAgICAgICAgICAgbGFiZWw6IGxhYmVsIHx8IGBiYXNoICR7dGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCkgKyAxfWAsCiAgICAgICAgICAgIGNsb3NlYWJsZTogdGhpcy50YWJNYW5hZ2VyLmdldFRhYkNvdW50KCkgPiAwCiAgICAgICAgICAgIC8vIEZpcnN0IHRhYiBub3QgY2xvc2VhYmxlCiAgICAgICAgICB9LCB0aGlzLmlzQnJpZ2h0KTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYjIuaWQpOwogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IHRoaXMuc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsICJqc2giKTsKICAgICAgICAgIGlmICh0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiQ291bnQoKSA9PT0gMSAmJiB0aGlzLnNldHVwQ29tbWFuZCkgewogICAgICAgICAgICBhd2FpdCB0aGlzLndhaXRGb3JQcm9tcHQodGFiMi50ZXJtaW5hbCwgIn4vIik7CiAgICAgICAgICAgIGlmICh0YWIyLmlucHV0V3JpdGVyKSB7CiAgICAgICAgICAgICAgdGFiMi5pbnB1dFdyaXRlci53cml0ZSh0aGlzLnNldHVwQ29tbWFuZCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkOiB0YWIyLmlkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0YWIyLmlkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDcmVhdGUgYSB0ZXJtaW5hbCB0YWIgZm9yIHJ1bm5pbmcgYSBwcm9jZXNzCiAgICAgICAgICovCiAgICAgICAgYXN5bmMgY3JlYXRlUHJvY2Vzc1RhYihvcHRpb25zKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmNyZWF0ZVRhYihvcHRpb25zLCB0aGlzLmlzQnJpZ2h0KTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICBpZiAob3B0aW9ucy5zd2l0Y2hUb1RhYiAhPT0gZmFsc2UpIHsKICAgICAgICAgICAgdGhpcy5zd2l0Y2hUb1RhYih0YWIyLmlkKTsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICBpZiAob3B0aW9ucy5jb21tYW5kKSB7CiAgICAgICAgICAgIGF3YWl0IHRoaXMuc3Bhd25Qcm9jZXNzRm9yVGFiKHRhYjIsIG9wdGlvbnMuY29tbWFuZCwgb3B0aW9ucy5hcmdzKTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jcmVhdGVkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkOiB0YWIyLmlkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0YWIyLmlkOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIGN1cnJlbnRseSBhY3RpdmUgdGFiCiAgICAgICAgICovCiAgICAgICAgZ2V0QWN0aXZlVGFiKCkgewogICAgICAgICAgaWYgKCF0aGlzLmFjdGl2ZVRhYklkKQogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIHJldHVybiB0aGlzLnRhYk1hbmFnZXIuZ2V0VGFiKHRoaXMuYWN0aXZlVGFiSWQpIHx8IG51bGw7CiAgICAgICAgfQogICAgICAgIC8qKgogICAgICAgICAqIEdldCBhbGwgdGFicwogICAgICAgICAqLwogICAgICAgIGdldFRhYnMoKSB7CiAgICAgICAgICByZXR1cm4gdGhpcy50YWJNYW5hZ2VyLmdldEFsbFRhYnMoKTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU3dpdGNoIHRvIGEgc3BlY2lmaWMgdGFiIGJ5IElECiAgICAgICAgICovCiAgICAgICAgc2VsZWN0VGFiKHRhYklkKSB7CiAgICAgICAgICBpZiAoIXRoaXMudGFiTWFuYWdlci5oYXNUYWIodGFiSWQpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKHRhYklkKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBDbG9zZSBhIHRhYiBieSBJRAogICAgICAgICAqLwogICAgICAgIGNsb3NlVGFiKHRhYklkKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIgfHwgIXRhYjIuY2xvc2VhYmxlKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICBpZiAodGFiSWQgPT09IHRoaXMuYWN0aXZlVGFiSWQpIHsKICAgICAgICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGFsbFRhYnMuZmluZEluZGV4KCh0OSkgPT4gdDkuaWQgPT09IHRhYklkKTsKICAgICAgICAgICAgY29uc3QgbmV4dFRhYiA9IGFsbFRhYnNbY3VycmVudEluZGV4ICsgMV0gfHwgYWxsVGFic1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgICAgICAgaWYgKG5leHRUYWIpIHsKICAgICAgICAgICAgICB0aGlzLnN3aXRjaFRvVGFiKG5leHRUYWIuaWQpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuYWN0aXZlVGFiSWQgPSBudWxsOwogICAgICAgICAgICAgIHRoaXMuZGV0YWNoQWN0aXZlVGVybWluYWwoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgdGhpcy50YWJNYW5hZ2VyLmNsb3NlVGFiKHRhYklkKTsKICAgICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFiTWFuYWdlci5nZXRBbGxUYWJzKCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2VkIiwgewogICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICAgICAgZGV0YWlsOiB7IHRhYklkIH0KICAgICAgICAgIH0pKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBXcml0ZSBkYXRhIHRvIGEgdGFiJ3MgdGVybWluYWwKICAgICAgICAgKi8KICAgICAgICB3cml0ZVRvVGFiKHRhYklkLCBkYXRhKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRhYjIudGVybWluYWwud3JpdGUoZGF0YSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2VuZCBpbnB1dCB0byBhIHRhYidzIHByb2Nlc3MgKGlmIGludGVyYWN0aXZlKQogICAgICAgICAqLwogICAgICAgIHNlbmRJbnB1dFRvVGFiKHRhYklkLCBkYXRhKSB7CiAgICAgICAgICBjb25zdCB0YWIyID0gdGhpcy50YWJNYW5hZ2VyLmdldFRhYih0YWJJZCk7CiAgICAgICAgICBpZiAoIXRhYjIgfHwgIXRhYjIuaW5wdXRXcml0ZXIpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHRhYjIuaW5wdXRXcml0ZXIud3JpdGUoZGF0YSk7CiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgICB9CiAgICAgICAgLyoqCiAgICAgICAgICogU2hvdyBhbiBhY3Rpb25iYXIgbm90aWZpY2F0aW9uIGluIHRoZSB0ZXJtaW5hbCBwYW5lbCBjb250ZXh0LgogICAgICAgICAqIFVzZSB0aGlzIGZvciB0ZXJtaW5hbC1yZWxhdGVkIGRlY2lzaW9ucyAoZS5nLiwgcmV0cnkgZmFpbGVkIHByb2Nlc3MsIGtpbGwgcHJvY2VzcywgZXRjLikKICAgICAgICAgKi8KICAgICAgICBhc3luYyBzaG93QWN0aW9uYmFyKG9wdGlvbnMpIHsKICAgICAgICAgIGlmICghdGhpcy50ZXJtaW5hbEFjdGlvbmJhcikgewogICAgICAgICAgICB0aGlzLnRlcm1pbmFsQWN0aW9uYmFyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLWFjdGlvbmJhciIpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuIHRoaXMudGVybWluYWxBY3Rpb25iYXI/LnNob3cob3B0aW9ucyk7CiAgICAgICAgfQogICAgICAgIC8vID09PT09PT09PT0gVXRpbGl0eSBNZXRob2RzID09PT09PT09PT0KICAgICAgICBhc3luYyB3YWl0Rm9yUHJvbXB0KHRlcm0sIHByb21wdCkgewogICAgICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgICBjb25zdCBjaGVja1Byb21wdCA9ICgpID0+IHsKICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IHRlcm0uYnVmZmVyLmFjdGl2ZTsKICAgICAgICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBsaW5lcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lID0gbGluZXMuZ2V0TGluZShpMTEpOwogICAgICAgICAgICAgICAgaWYgKGxpbmUgJiYgbGluZS50cmFuc2xhdGVUb1N0cmluZygpLmluY2x1ZGVzKHByb21wdCkpIHsKICAgICAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgICAgICAgfSwgMTAwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICBzZXRUaW1lb3V0KGNoZWNrUHJvbXB0LCAxMDApOwogICAgICAgICAgICB9OwogICAgICAgICAgICBjaGVja1Byb21wdCgpOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIGFzeW5jIHNldEVudmlyb25tZW50VmFyaWFibGVzKGVudkFyZykgewogICAgICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigiTm8gZXhlY3V0aW9uIGVudmlyb25tZW50IGF2YWlsYWJsZSIpOwogICAgICAgICAgfQogICAgICAgICAgbGV0IGVudkZpbGUgPSAiIjsKICAgICAgICAgIGZvciAoY29uc3Qga2V5MiBpbiBlbnZBcmcpIHsKICAgICAgICAgICAgZW52RmlsZSArPSBgZXhwb3J0ICR7a2V5Mn09IiR7ZW52QXJnW2tleTJdfSIKYDsKICAgICAgICAgIH0KICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKCIvc291cmNlLmVudiIsIGVudkZpbGUpOwogICAgICAgIH0KICAgICAgICAvKioKICAgICAgICAgKiBHZXQgdGhlIHVuZGVybHlpbmcgZXhlY3V0aW9uIGVudmlyb25tZW50LgogICAgICAgICAqLwogICAgICAgIGdldEV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICAgICAgcmV0dXJuIHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIHN0YXRpYyB7CiAgICAgICAgICBfX3J1bkluaXRpYWxpemVyczUyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgICB9CiAgICAgIH07CiAgICAgIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWwyID0gX2NsYXNzVGhpczsKICAgIH0pKCk7CiAgfQp9KTsKCi8vIHRzX3dlYi9wbHVnaW5zLnRzCnZhciBwbHVnaW5zX2V4cG9ydHM1ID0ge307Cl9fZXhwb3J0KHBsdWdpbnNfZXhwb3J0czUsIHsKICBEZWVzRWxlbWVudDogKCkgPT4gRGVlc0VsZW1lbnQyLAogIGNzczogKCkgPT4gY3NzMiwKICBjc3NNYW5hZ2VyOiAoKSA9PiBjc3NNYW5hZ2VyMiwKICBjdXN0b21FbGVtZW50OiAoKSA9PiBjdXN0b21FbGVtZW50LAogIGRlZXNDYXRhbG9nOiAoKSA9PiBkaXN0X3RzX3dlYl9leHBvcnRzMiwKICBkZWVzRWxlbWVudDogKCkgPT4gZGlzdF90c19leHBvcnRzMjYsCiAgaHRtbDogKCkgPT4gaHRtbDcsCiAgcHJvcGVydHk6ICgpID0+IHByb3BlcnR5LAogIHN0YXRlOiAoKSA9PiBzdGF0ZSwKICB0eXBlZHJlcXVlc3Q6ICgpID0+IGRpc3RfdHNfZXhwb3J0czE1Cn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9pbmRleC5qcwp2YXIgZGlzdF90c193ZWJfZXhwb3J0czIgPSB7fTsKX19leHBvcnQoZGlzdF90c193ZWJfZXhwb3J0czIsIHsKICBDYW52YXNQb29sOiAoKSA9PiBDYW52YXNQb29sLAogIERlZXNBY3Rpb25iYXI6ICgpID0+IERlZXNBY3Rpb25iYXIsCiAgRGVlc0FwcHVpOiAoKSA9PiBEZWVzQXBwdWksCiAgRGVlc0FwcHVpQWN0aXZpdHlsb2c6ICgpID0+IERlZXNBcHB1aUFjdGl2aXR5bG9nLAogIERlZXNBcHB1aUJhcjogKCkgPT4gRGVlc0FwcHVpQmFyLAogIERlZXNBcHB1aUJvdHRvbWJhcjogKCkgPT4gRGVlc0FwcHVpQm90dG9tYmFyLAogIERlZXNBcHB1aU1haW5jb250ZW50OiAoKSA9PiBEZWVzQXBwdWlNYWluY29udGVudCwKICBEZWVzQXBwdWlNYWlubWVudTogKCkgPT4gRGVlc0FwcHVpTWFpbm1lbnUsCiAgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duOiAoKSA9PiBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24sCiAgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTogKCkgPT4gRGVlc0FwcHVpU2Vjb25kYXJ5bWVudSwKICBEZWVzQXBwdWlUYWJzOiAoKSA9PiBEZWVzQXBwdWlUYWJzLAogIERlZXNCYWRnZTogKCkgPT4gRGVlc0JhZGdlLAogIERlZXNCdXR0b246ICgpID0+IERlZXNCdXR0b24sCiAgRGVlc0J1dHRvbkV4aXQ6ICgpID0+IERlZXNCdXR0b25FeGl0LAogIERlZXNCdXR0b25Hcm91cDogKCkgPT4gRGVlc0J1dHRvbkdyb3VwLAogIERlZXNDaGFydEFyZWE6ICgpID0+IERlZXNDaGFydEFyZWEsCiAgRGVlc0NoYXJ0TG9nOiAoKSA9PiBEZWVzQ2hhcnRMb2csCiAgRGVlc0NoaXBzOiAoKSA9PiBEZWVzQ2hpcHMsCiAgRGVlc0NvbnRleHRtZW51OiAoKSA9PiBEZWVzQ29udGV4dG1lbnUsCiAgRGVlc0Rhc2hib2FyZGdyaWQ6ICgpID0+IERlZXNEYXNoYm9hcmRncmlkLAogIERlZXNEYXRhdmlld0NvZGVib3g6ICgpID0+IERlZXNEYXRhdmlld0NvZGVib3gsCiAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0OiAoKSA9PiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QsCiAgRGVlc0Zvcm06ICgpID0+IERlZXNGb3JtLAogIERlZXNGb3JtU3VibWl0OiAoKSA9PiBEZWVzRm9ybVN1Ym1pdCwKICBEZWVzRm9ybWF0dGluZ01lbnU6ICgpID0+IERlZXNGb3JtYXR0aW5nTWVudSwKICBEZWVzSGVhZGluZzogKCkgPT4gRGVlc0hlYWRpbmcsCiAgRGVlc0hpbnQ6ICgpID0+IERlZXNIaW50LAogIERlZXNJY29uOiAoKSA9PiBEZWVzSWNvbiwKICBEZWVzSW5wdXRCYXNlOiAoKSA9PiBEZWVzSW5wdXRCYXNlLAogIERlZXNJbnB1dENoZWNrYm94OiAoKSA9PiBEZWVzSW5wdXRDaGVja2JveCwKICBEZWVzSW5wdXRDb2RlOiAoKSA9PiBEZWVzSW5wdXRDb2RlLAogIERlZXNJbnB1dERhdGVwaWNrZXI6ICgpID0+IERlZXNJbnB1dERhdGVwaWNrZXIsCiAgRGVlc0lucHV0RHJvcGRvd246ICgpID0+IERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQ6ICgpID0+IERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbjogKCkgPT4gRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRMaXN0OiAoKSA9PiBEZWVzSW5wdXRMaXN0LAogIERlZXNJbnB1dE11bHRpdG9nZ2xlOiAoKSA9PiBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZTogKCkgPT4gRGVlc0lucHV0UGhvbmUsCiAgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmU6ICgpID0+IERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlLAogIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3I6ICgpID0+IERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IsCiAgRGVlc0lucHV0UmFkaW9ncm91cDogKCkgPT4gRGVlc0lucHV0UmFkaW9ncm91cCwKICBEZWVzSW5wdXRSaWNodGV4dDogKCkgPT4gRGVlc0lucHV0UmljaHRleHQsCiAgRGVlc0lucHV0VGFnczogKCkgPT4gRGVlc0lucHV0VGFncywKICBEZWVzSW5wdXRUZXh0OiAoKSA9PiBEZWVzSW5wdXRUZXh0LAogIERlZXNJbnB1dFRvZ2dsZTogKCkgPT4gRGVlc0lucHV0VG9nZ2xlLAogIERlZXNJbnB1dFR5cGVsaXN0OiAoKSA9PiBEZWVzSW5wdXRUeXBlbGlzdCwKICBEZWVzSW5wdXRXeXNpd3lnOiAoKSA9PiBEZWVzSW5wdXRXeXNpd3lnLAogIERlZXNMYWJlbDogKCkgPT4gRGVlc0xhYmVsLAogIERlZXNNb2JpbGVuYXZpZ2F0aW9uOiAoKSA9PiBEZWVzTW9iaWxlbmF2aWdhdGlvbiwKICBEZWVzTW9kYWw6ICgpID0+IERlZXNNb2RhbCwKICBEZWVzUGFnaW5hdGlvbjogKCkgPT4gRGVlc1BhZ2luYXRpb24sCiAgRGVlc1BhbmVsOiAoKSA9PiBEZWVzUGFuZWwsCiAgRGVlc1BkZjogKCkgPT4gRGVlc1BkZiwKICBEZWVzUGRmUHJldmlldzogKCkgPT4gRGVlc1BkZlByZXZpZXcsCiAgRGVlc1BkZlZpZXdlcjogKCkgPT4gRGVlc1BkZlZpZXdlciwKICBEZWVzUHJvZ3Jlc3NiYXI6ICgpID0+IERlZXNQcm9ncmVzc2JhciwKICBEZWVzU2VhcmNoYmFyOiAoKSA9PiBEZWVzU2VhcmNoYmFyLAogIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkOiAoKSA9PiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCwKICBEZWVzU2ltcGxlQXBwRGFzaDogKCkgPT4gRGVlc1NpbXBsZUFwcERhc2gsCiAgRGVlc1NpbXBsZUxvZ2luOiAoKSA9PiBEZWVzU2ltcGxlTG9naW4sCiAgRGVlc1NsYXNoTWVudTogKCkgPT4gRGVlc1NsYXNoTWVudSwKICBEZWVzU3BlZWNoYnViYmxlOiAoKSA9PiBEZWVzU3BlZWNoYnViYmxlLAogIERlZXNTcGlubmVyOiAoKSA9PiBEZWVzU3Bpbm5lciwKICBEZWVzU3RhdHNHcmlkOiAoKSA9PiBEZWVzU3RhdHNHcmlkLAogIERlZXNTdGVwcGVyOiAoKSA9PiBEZWVzU3RlcHBlciwKICBEZWVzVGFibGU6ICgpID0+IERlZXNUYWJsZSwKICBEZWVzVGhlbWU6ICgpID0+IERlZXNUaGVtZSwKICBEZWVzVG9hc3Q6ICgpID0+IERlZXNUb2FzdCwKICBEZWVzVXBkYXRlcjogKCkgPT4gRGVlc1VwZGF0ZXIsCiAgRGVlc1dpbmRvd0NvbnRyb2xzOiAoKSA9PiBEZWVzV2luZG93Q29udHJvbHMsCiAgRGVlc1dpbmRvd0xheWVyOiAoKSA9PiBEZWVzV2luZG93TGF5ZXIsCiAgRGVlc1dvcmtzcGFjZTogKCkgPT4gRGVlc1dvcmtzcGFjZSwKICBEZWVzV29ya3NwYWNlQm90dG9tYmFyOiAoKSA9PiBEZWVzV29ya3NwYWNlQm90dG9tYmFyLAogIERlZXNXb3Jrc3BhY2VEaWZmRWRpdG9yOiAoKSA9PiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciwKICBEZWVzV29ya3NwYWNlRmlsZXRyZWU6ICgpID0+IERlZXNXb3Jrc3BhY2VGaWxldHJlZSwKICBEZWVzV29ya3NwYWNlTWFya2Rvd246ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93biwKICBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQ6ICgpID0+IERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldCwKICBEZWVzV29ya3NwYWNlTW9uYWNvOiAoKSA9PiBEZWVzV29ya3NwYWNlTW9uYWNvLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogKCkgPT4gRGVlc1dvcmtzcGFjZVRlcm1pbmFsLAogIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXc6ICgpID0+IERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcsCiAgRGVlc1d5c2l3eWdCbG9jazogKCkgPT4gRGVlc1d5c2l3eWdCbG9jaywKICBQUk9HUkFNTUlOR19MQU5HVUFHRVM6ICgpID0+IFBST0dSQU1NSU5HX0xBTkdVQUdFUywKICBQZGZNYW5hZ2VyOiAoKSA9PiBQZGZNYW5hZ2VyLAogIFBlcmZvcm1hbmNlTW9uaXRvcjogKCkgPT4gUGVyZm9ybWFuY2VNb25pdG9yLAogIFRlcm1pbmFsVGFiTWFuYWdlcjogKCkgPT4gVGVybWluYWxUYWJNYW5hZ2VyLAogIFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyOiAoKSA9PiBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciwKICBWaWV3UmVnaXN0cnk6ICgpID0+IFZpZXdSZWdpc3RyeSwKICBXZWJDb250YWluZXJFbnZpcm9ubWVudDogKCkgPT4gV2ViQ29udGFpbmVyRW52aXJvbm1lbnQsCiAgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9uczogKCkgPT4gV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucywKICBXeXNpd3lnQmxvY2tzOiAoKSA9PiBXeXNpd3lnQmxvY2tzLAogIFd5c2l3eWdDb252ZXJ0ZXJzOiAoKSA9PiBXeXNpd3lnQ29udmVydGVycywKICBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyOiAoKSA9PiBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyLAogIFd5c2l3eWdGb3JtYXR0aW5nOiAoKSA9PiBXeXNpd3lnRm9ybWF0dGluZywKICBXeXNpd3lnSGlzdG9yeTogKCkgPT4gV3lzaXd5Z0hpc3RvcnksCiAgV3lzaXd5Z0lucHV0SGFuZGxlcjogKCkgPT4gV3lzaXd5Z0lucHV0SGFuZGxlciwKICBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyOiAoKSA9PiBXeXNpd3lnS2V5Ym9hcmRIYW5kbGVyLAogIFd5c2l3eWdNb2RhbE1hbmFnZXI6ICgpID0+IFd5c2l3eWdNb2RhbE1hbmFnZXIsCiAgV3lzaXd5Z1NlbGVjdGlvbjogKCkgPT4gV3lzaXd5Z1NlbGVjdGlvbiwKICBXeXNpd3lnU2hvcnRjdXRzOiAoKSA9PiBXeXNpd3lnU2hvcnRjdXRzLAogIFpJbmRleFJlZ2lzdHJ5OiAoKSA9PiBaSW5kZXhSZWdpc3RyeSwKICBjb2xvcnM6ICgpID0+IGNvbG9yc19leHBvcnRzLAogIGNvbW1pdGluZm86ICgpID0+IGNvbW1pdGluZm8sCiAgY29tcG9uZW50WkluZGV4OiAoKSA9PiBjb21wb25lbnRaSW5kZXgsCiAgZGVib3VuY2U6ICgpID0+IGRlYm91bmNlMywKICBmb3JtYXRGaWxlU2l6ZTogKCkgPT4gZm9ybWF0RmlsZVNpemUsCiAgZ2V0WkluZGV4OiAoKSA9PiBnZXRaSW5kZXgsCiAgaWNvbnM6ICgpID0+IGljb25zNCwKICBpc0luVmlld3BvcnQ6ICgpID0+IGlzSW5WaWV3cG9ydCwKICByZWdpc3RlckFsbEJsb2NrSGFuZGxlcnM6ICgpID0+IHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycywKICB0aGVtZURlZmF1bHRTdHlsZXM6ICgpID0+IHRoZW1lRGVmYXVsdFN0eWxlcywKICB0aGVtZURlZmF1bHRzOiAoKSA9PiB0aGVtZURlZmF1bHRzLAogIHRocm90dGxlOiAoKSA9PiB0aHJvdHRsZTIsCiAgd3lzaXd5Z1N0eWxlczogKCkgPT4gd3lzaXd5Z1N0eWxlcywKICB6SW5kZXhMYXllcnM6ICgpID0+IHpJbmRleExheWVycywKICB6SW5kZXhSZWdpc3RyeTogKCkgPT4gekluZGV4UmVnaXN0cnkKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwemluZGV4LmpzCnZhciB6SW5kZXhMYXllcnMgPSB7CiAgLy8gQmFzZSBsYXllcjogUmVndWxhciBjb250ZW50CiAgYmFzZTogewogICAgY29udGVudDogImF1dG8iLAogICAgaW5wdXRFbGVtZW50czogMQogIH0sCiAgLy8gRml4ZWQgVUkgZWxlbWVudHMKICBmaXhlZDogewogICAgYXBwQmFyOiAxMCwKICAgIHNpZGVNZW51OiAxMCwKICAgIG1vYmlsZU5hdjogMjUwCiAgfSwKICAvLyBPdmVybGF5IGJhY2tkcm9wcyAoc2VtaS10cmFuc3BhcmVudCBiYWNrZ3JvdW5kcykKICBiYWNrZHJvcDogewogICAgZHJvcGRvd246IDE5OTksCiAgICAvLyBCZWxvdyBtb2RhbHMgYnV0IGFib3ZlIGZpeGVkIGVsZW1lbnRzCiAgICBtb2RhbDogMjk5OSwKICAgIC8vIEJlbG93IGRyb3Bkb3ducyBvbiBtb2RhbHMKICAgIGNvbnRleHRNZW51OiAzOTk5CiAgICAvLyBCZWxvdyBjcml0aWNhbCBvdmVybGF5cwogIH0sCiAgLy8gSW50ZXJhY3RpdmUgb3ZlcmxheXMKICBvdmVybGF5OiB7CiAgICBkcm9wZG93bjogMmUzLAogICAgLy8gRHJvcGRvd25zIGFuZCBzZWxlY3QgbWVudXMKICAgIG1vZGFsOiAzZTMsCiAgICAvLyBNb2RhbCBkaWFsb2dzCiAgICBjb250ZXh0TWVudTogNGUzLAogICAgLy8gQ29udGV4dCBtZW51cyBhbmQgdG9vbHRpcHMKICAgIHRvYXN0OiA1ZTMKICAgIC8vIFRvYXN0IG5vdGlmaWNhdGlvbnMgKGhpZ2hlc3QgcHJpb3JpdHkpCiAgfSwKICAvLyBTcGVjaWFsIGNhc2VzIGZvciBuZXN0ZWQgZWxlbWVudHMKICBtb2RhbERyb3Bkb3duOiAzNTAwLAogIC8vIERyb3Bkb3ducyBpbnNpZGUgbW9kYWxzCiAgd3lzaXd5Z01lbnVzOiA0NTAwCiAgLy8gRWRpdG9yIGZvcm1hdHRpbmcgbWVudXMKfTsKZnVuY3Rpb24gZ2V0WkluZGV4KGNhdGVnb3J5LCBzdWJjYXRlZ29yeSkgewogIGNvbnN0IGNhdGVnb3J5T2JqID0gekluZGV4TGF5ZXJzW2NhdGVnb3J5XTsKICBpZiAodHlwZW9mIGNhdGVnb3J5T2JqID09PSAib2JqZWN0IiAmJiBzdWJjYXRlZ29yeSkgewogICAgcmV0dXJuIGNhdGVnb3J5T2JqW3N1YmNhdGVnb3J5XSB8fCAiYXV0byI7CiAgfQogIHJldHVybiB0eXBlb2YgY2F0ZWdvcnlPYmogPT09ICJudW1iZXIiID8gY2F0ZWdvcnlPYmogOiAiYXV0byI7Cn0KdmFyIGNvbXBvbmVudFpJbmRleCA9IHsKICAiZGVlcy1tb2RhbCI6IHpJbmRleExheWVycy5vdmVybGF5Lm1vZGFsLAogICJkZWVzLXdpbmRvd2xheWVyIjogekluZGV4TGF5ZXJzLm92ZXJsYXkuZHJvcGRvd24sCiAgImRlZXMtY29udGV4dG1lbnUiOiB6SW5kZXhMYXllcnMub3ZlcmxheS5jb250ZXh0TWVudSwKICAiZGVlcy10b2FzdCI6IHpJbmRleExheWVycy5vdmVybGF5LnRvYXN0LAogICJkZWVzLWFwcHVpLW1haW5tZW51IjogekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhciwKICAiZGVlcy1tb2JpbGVuYXZpZ2F0aW9uIjogekluZGV4TGF5ZXJzLmZpeGVkLm1vYmlsZU5hdiwKICAiZGVlcy1zbGFzaC1tZW51IjogekluZGV4TGF5ZXJzLnd5c2l3eWdNZW51cywKICAiZGVlcy1mb3JtYXR0aW5nLW1lbnUiOiB6SW5kZXhMYXllcnMud3lzaXd5Z01lbnVzCn07CnZhciBaSW5kZXhSZWdpc3RyeSA9IGNsYXNzIF9aSW5kZXhSZWdpc3RyeSB7CiAgc3RhdGljIGluc3RhbmNlOwogIGFjdGl2ZUVsZW1lbnRzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBlbGVtZW50WkluZGV4TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgY3VycmVudFpJbmRleCA9IDFlMzsKICAvLyBTdGFydGluZyB6LWluZGV4CiAgY29uc3RydWN0b3IoKSB7CiAgfQogIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgIGlmICghX1pJbmRleFJlZ2lzdHJ5Lmluc3RhbmNlKSB7CiAgICAgIF9aSW5kZXhSZWdpc3RyeS5pbnN0YW5jZSA9IG5ldyBfWkluZGV4UmVnaXN0cnkoKTsKICAgIH0KICAgIHJldHVybiBfWkluZGV4UmVnaXN0cnkuaW5zdGFuY2U7CiAgfQogIC8qKgogICAqIEdldCB0aGUgbmV4dCBhdmFpbGFibGUgei1pbmRleAogICAqIEByZXR1cm5zIFRoZSBuZXh0IGF2YWlsYWJsZSB6LWluZGV4CiAgICovCiAgZ2V0TmV4dFpJbmRleCgpIHsKICAgIHRoaXMuY3VycmVudFpJbmRleCArPSAxMDsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRaSW5kZXg7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGFuIGVsZW1lbnQgd2l0aCB0aGUgei1pbmRleCByZWdpc3RyeQogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudCB0byByZWdpc3RlcgogICAqIEBwYXJhbSB6SW5kZXggLSBUaGUgei1pbmRleCBhc3NpZ25lZCB0byB0aGlzIGVsZW1lbnQKICAgKi8KICByZWdpc3RlcihlbGVtZW50NCwgekluZGV4KSB7CiAgICB0aGlzLmFjdGl2ZUVsZW1lbnRzLmFkZChlbGVtZW50NCk7CiAgICB0aGlzLmVsZW1lbnRaSW5kZXhNYXAuc2V0KGVsZW1lbnQ0LCB6SW5kZXgpOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGFuIGVsZW1lbnQgZnJvbSB0aGUgei1pbmRleCByZWdpc3RyeQogICAqIEBwYXJhbSBlbGVtZW50IC0gVGhlIEhUTUwgZWxlbWVudCB0byB1bnJlZ2lzdGVyCiAgICovCiAgdW5yZWdpc3RlcihlbGVtZW50NCkgewogICAgdGhpcy5hY3RpdmVFbGVtZW50cy5kZWxldGUoZWxlbWVudDQpOwogICAgdGhpcy5lbGVtZW50WkluZGV4TWFwLmRlbGV0ZShlbGVtZW50NCk7CiAgICBpZiAodGhpcy5hY3RpdmVFbGVtZW50cy5zaXplID09PSAwKSB7CiAgICAgIHRoaXMuY3VycmVudFpJbmRleCA9IDFlMzsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0IHRoZSB6LWluZGV4IGZvciBhIHNwZWNpZmljIGVsZW1lbnQKICAgKiBAcGFyYW0gZWxlbWVudCAtIFRoZSBIVE1MIGVsZW1lbnQKICAgKiBAcmV0dXJucyBUaGUgei1pbmRleCBvciB1bmRlZmluZWQgaWYgbm90IHJlZ2lzdGVyZWQKICAgKi8KICBnZXRFbGVtZW50WkluZGV4KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChlbGVtZW50NCk7CiAgfQogIC8qKgogICAqIEdldCBjb3VudCBvZiBhY3RpdmUgZWxlbWVudHMKICAgKiBAcmV0dXJucyBOdW1iZXIgb2YgYWN0aXZlIGVsZW1lbnRzCiAgICovCiAgZ2V0QWN0aXZlQ291bnQoKSB7CiAgICByZXR1cm4gdGhpcy5hY3RpdmVFbGVtZW50cy5zaXplOwogIH0KICAvKioKICAgKiBHZXQgdGhlIGN1cnJlbnQgaGlnaGVzdCB6LWluZGV4CiAgICogQHJldHVybnMgVGhlIGN1cnJlbnQgei1pbmRleCB2YWx1ZQogICAqLwogIGdldEN1cnJlbnRaSW5kZXgoKSB7CiAgICByZXR1cm4gdGhpcy5jdXJyZW50WkluZGV4OwogIH0KICAvKioKICAgKiBDbGVhciBhbGwgcmVnaXN0cmF0aW9ucyAodXNlZnVsIGZvciB0ZXN0aW5nKQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5hY3RpdmVFbGVtZW50cy5jbGVhcigpOwogICAgdGhpcy5lbGVtZW50WkluZGV4TWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICB0aGlzLmN1cnJlbnRaSW5kZXggPSAxZTM7CiAgfQogIC8qKgogICAqIEdldCBhbGwgYWN0aXZlIGVsZW1lbnRzIGluIHotaW5kZXggb3JkZXIKICAgKiBAcmV0dXJucyBBcnJheSBvZiBlbGVtZW50cyBzb3J0ZWQgYnkgei1pbmRleAogICAqLwogIGdldEFjdGl2ZUVsZW1lbnRzSW5PcmRlcigpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuYWN0aXZlRWxlbWVudHMpLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICBjb25zdCBhWiA9IHRoaXMuZWxlbWVudFpJbmRleE1hcC5nZXQoYTUpIHx8IDA7CiAgICAgIGNvbnN0IGJaID0gdGhpcy5lbGVtZW50WkluZGV4TWFwLmdldChiNSkgfHwgMDsKICAgICAgcmV0dXJuIGFaIC0gYlo7CiAgICB9KTsKICB9Cn07CnZhciB6SW5kZXhSZWdpc3RyeSA9IFpJbmRleFJlZ2lzdHJ5LmdldEluc3RhbmNlKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2luZGV4LmpzCnZhciBkaXN0X3RzX2V4cG9ydHMyNyA9IHt9OwpfX2V4cG9ydChkaXN0X3RzX2V4cG9ydHMyNywgewogIGJ1c2luZXNzOiAoKSA9PiBidXNpbmVzc19leHBvcnRzMiwKICBjb2RlOiAoKSA9PiBjb2RlX2V4cG9ydHMyLAogIGNvbnRhaW5lcjogKCkgPT4gY29udGFpbmVyX2V4cG9ydHMyLAogIGNvbnRlbnQ6ICgpID0+IGNvbnRlbnRfZXhwb3J0czIsCiAgZGF0YWJhc2U6ICgpID0+IGRhdGFiYXNlX2V4cG9ydHMyLAogIGRlc2NyaXB0b3JzOiAoKSA9PiBkZXNjcmlwdG9yc19leHBvcnRzLAogIGZpbmFuY2U6ICgpID0+IGZpbmFuY2VfZXhwb3J0czIsCiAgZ2VuZXJhbDogKCkgPT4gZ2VuZXJhbF9leHBvcnRzMiwKICBuZXR3b3JrOiAoKSA9PiBuZXR3b3JrX2V4cG9ydHMyLAogIHNhYXM6ICgpID0+IHNhYXNfZXhwb3J0czIsCiAgc3RvcmFnZTogKCkgPT4gc3RvcmFnZV9leHBvcnRzMiwKICB3ZWJzaXRlOiAoKSA9PiB3ZWJzaXRlX2V4cG9ydHMyCn0pOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9idXNpbmVzcy9pbmRleC5qcwp2YXIgYnVzaW5lc3NfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvZGF0YWJhc2UvaW5kZXguanMKdmFyIGRhdGFiYXNlX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2ZpbmFuY2UvaW5kZXguanMKdmFyIGZpbmFuY2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvY29kZS9pbmRleC5qcwp2YXIgY29kZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250YWluZXIvaW5kZXguanMKdmFyIGNvbnRhaW5lcl9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9kZXNjcmlwdG9ycy9pbmRleC5qcwp2YXIgZGVzY3JpcHRvcnNfZXhwb3J0cyA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9jb250ZW50L2luZGV4LmpzCnZhciBjb250ZW50X2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL2dlbmVyYWwvaW5kZXguanMKdmFyIGdlbmVyYWxfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvbmV0d29yay9pbmRleC5qcwp2YXIgbmV0d29ya19leHBvcnRzMiA9IHt9OwpfX2V4cG9ydChuZXR3b3JrX2V4cG9ydHMyLCB7CiAgSUNuYW1lRGVzY3JpcHRvcjogKCkgPT4gSUNuYW1lRGVzY3JpcHRvcjIKfSk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL25ldHdvcmsvY25hbWUuanMKdmFyIElDbmFtZURlc2NyaXB0b3IyID0gY2xhc3Mgewp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0B0c2NsYXNzK3RzY2xhc3NAOS4zLjAvbm9kZV9tb2R1bGVzL0B0c2NsYXNzL3RzY2xhc3MvZGlzdF90cy9zYWFzL2luZGV4LmpzCnZhciBzYWFzX2V4cG9ydHMyID0ge307CgovLyBub2RlX21vZHVsZXMvLnBucG0vQHRzY2xhc3MrdHNjbGFzc0A5LjMuMC9ub2RlX21vZHVsZXMvQHRzY2xhc3MvdHNjbGFzcy9kaXN0X3RzL3N0b3JhZ2UvaW5kZXguanMKdmFyIHN0b3JhZ2VfZXhwb3J0czIgPSB7fTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AdHNjbGFzcyt0c2NsYXNzQDkuMy4wL25vZGVfbW9kdWxlcy9AdHNjbGFzcy90c2NsYXNzL2Rpc3RfdHMvd2Vic2l0ZS9pbmRleC5qcwp2YXIgd2Vic2l0ZV9leHBvcnRzMiA9IHt9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMHBsdWdpbnMuanMKaW5pdF9kaXN0X3RzKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY29udGV4dG1lbnUvZGVlcy1jb250ZXh0bWVudS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYyA9ICgpID0+IGIyYAo8c3R5bGU+CiAgLndpdGhNYXJnaW4gewogICAgZGlzcGxheTogYmxvY2s7CiAgICBtYXJnaW46IDIwcHg7CiAgfQogIC5kZW1vLWNvbnRhaW5lciB7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIGdhcDogMjBweDsKICAgIHBhZGRpbmc6IDIwcHg7CiAgICBtaW4taGVpZ2h0OiA0MDBweDsKICB9CiAgLmRlbW8tYXJlYSB7CiAgICBwYWRkaW5nOiA0MHB4OwogICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgY3Vyc29yOiBjb250ZXh0LW1lbnU7CiAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgfQogIC5kZW1vLWFyZWE6aG92ZXIgewogICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjAyKTsKICB9Cjwvc3R5bGU+CjxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJCYXNpYyBDb250ZXh0IE1lbnUgd2l0aCBOZXN0ZWQgU3VibWVudXMiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkZpbGUiLAogICAgICBpY29uTmFtZTogImZpbGVUZXh0IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJOZXciLCBpY29uTmFtZTogImZpbGVQbHVzIiwgc2hvcnRjdXQ6ICJDbWQrTiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuIiwgaWNvbk5hbWU6ICJmb2xkZXJPcGVuIiwgc2hvcnRjdXQ6ICJDbWQrTyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiU2F2ZSIsIGljb25OYW1lOiAic2F2ZSIsIHNob3J0Y3V0OiAiQ21kK1MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTYXZlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJFeHBvcnQgYXMgUERGIiwgaWNvbk5hbWU6ICJkb3dubG9hZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkV4cG9ydCBQREYiKSB9LAogICAgICAgIHsgbmFtZTogIkV4cG9ydCBhcyBIVE1MIiwgaWNvbk5hbWU6ICJjb2RlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhwb3J0IEhUTUwiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgaWNvbk5hbWU6ICJlZGl0MyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiQ3V0IiwgaWNvbk5hbWU6ICJzY2lzc29ycyIsIHNob3J0Y3V0OiAiQ21kK1giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDdXQiKSB9LAogICAgICAgIHsgbmFtZTogIkNvcHkiLCBpY29uTmFtZTogImNvcHkiLCBzaG9ydGN1dDogIkNtZCtDIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29weSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBpY29uTmFtZTogImNsaXBib2FyZCIsIHNob3J0Y3V0OiAiQ21kK1YiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRmluZCIsIGljb25OYW1lOiAic2VhcmNoIiwgc2hvcnRjdXQ6ICJDbWQrRiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZpbmQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlcGxhY2UiLCBpY29uTmFtZTogInJlcGVhdCIsIHNob3J0Y3V0OiAiQ21kK0giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXBsYWNlIikgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVmlldyIsCiAgICAgIGljb25OYW1lOiAiZXllIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJab29tIEluIiwgaWNvbk5hbWU6ICJ6b29tSW4iLCBzaG9ydGN1dDogIkNtZCsrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBpbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBPdXQiLCBpY29uTmFtZTogInpvb21PdXQiLCBzaG9ydGN1dDogIkNtZCstIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBvdXQiKSB9LAogICAgICAgIHsgbmFtZTogIlJlc2V0IFpvb20iLCBpY29uTmFtZTogIm1heGltaXplMiIsIHNob3J0Y3V0OiAiQ21kKzAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZXNldCB6b29tIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJGdWxsIFNjcmVlbiIsIGljb25OYW1lOiAibWF4aW1pemUiLCBzaG9ydGN1dDogIkYxMSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZ1bGwgc2NyZWVuIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICAgIGljb25OYW1lOiAic2V0dGluZ3MiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpCiAgICB9LAogICAgewogICAgICBuYW1lOiAiSGVscCIsCiAgICAgIGljb25OYW1lOiAiaGVscENpcmNsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKSB9LAogICAgICAgIHsgbmFtZTogIktleWJvYXJkIFNob3J0Y3V0cyIsIGljb25OYW1lOiAia2V5Ym9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG9ydGN1dHMiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkFib3V0IiwgaWNvbk5hbWU6ICJpbmZvIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWJvdXQiKSB9CiAgICAgIF0KICAgIH0KICBdKTsKfX0+CiAgICAgIDxoMz5SaWdodC1jbGljayBhbnl3aGVyZSBpbiB0aGlzIGFyZWE8L2gzPgogICAgICA8cD5BIGNvbnRleHQgbWVudSB3aXRoIG5lc3RlZCBzdWJtZW51cyB3aWxsIGFwcGVhcjwvcD4KICAgIDwvZGl2PgogIDwvZGVlcy1wYW5lbD4KICA8ZGVlcy1wYW5lbCBoZWFkaW5nPSJDb21wb25lbnQtU3BlY2lmaWMgQ29udGV4dCBNZW51Ij4KICAgIDxkZWVzLWJ1dHRvbiBzdHlsZT0ibWFyZ2luOiAyMHB4OyIgQGNvbnRleHRtZW51PSR7KGV2ZW50QXJnKSA9PiB7CiAgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50QXJnLCBbCiAgICB7CiAgICAgIG5hbWU6ICJCdXR0b24gQWN0aW9ucyIsCiAgICAgIGljb25OYW1lOiAibW91c2VQb2ludGVyIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJDbGljayIsIGljb25OYW1lOiAibW91c2UiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDbGljayBhY3Rpb24iKSB9LAogICAgICAgIHsgbmFtZTogIkRvdWJsZSBDbGljayIsIGljb25OYW1lOiAiemFwIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRG91YmxlIGNsaWNrIikgfSwKICAgICAgICB7IG5hbWU6ICJMb25nIFByZXNzIiwgaWNvbk5hbWU6ICJjbG9jayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkxvbmcgcHJlc3MiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJCdXR0b24gU3RhdGUiLAogICAgICBpY29uTmFtZTogInRvZ2dsZUxlZnQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIkVuYWJsZSIsIGljb25OYW1lOiAiY2hlY2tDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJFbmFibGUiKSB9LAogICAgICAgIHsgbmFtZTogIkRpc2FibGUiLCBpY29uTmFtZTogInhDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJEaXNhYmxlIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaG93IiwgaWNvbk5hbWU6ICJleWUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTaG93IikgfSwKICAgICAgICB7IG5hbWU6ICJIaWRlIiwgaWNvbk5hbWU6ICJleWVPZmYiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIaWRlIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNhYmxlZCBBY3Rpb24iLAogICAgICBpY29uTmFtZTogImJhbiIsCiAgICAgIGRpc2FibGVkOiB0cnVlLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUaGlzIHNob3VsZCBub3QgcnVuIikKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJQcm9wZXJ0aWVzIiwKICAgICAgaWNvbk5hbWU6ICJzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkJ1dHRvbiBwcm9wZXJ0aWVzIikKICAgIH0KICBdKTsKfX0+UmlnaHQtY2xpY2sgb24gdGhpcyBidXR0b248L2RlZXMtYnV0dG9uPgogIDwvZGVlcy1wYW5lbD4KCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iQWR2YW5jZWQgQ29udGV4dCBNZW51IEV4YW1wbGUiPgogICAgPGRpdiBjbGFzcz0iZGVtby1hcmVhIiBAY29udGV4dG1lbnU9JHsoZXZlbnRBcmcpID0+IHsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgIHsKICAgICAgbmFtZTogIkZvcm1hdCIsCiAgICAgIGljb25OYW1lOiAidHlwZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBQYXJlbnQgaXRlbXMgd2l0aCBzdWJtZW51cyBzdGlsbCBuZWVkIGFuIGFjdGlvbgogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiQm9sZCIsIGljb25OYW1lOiAiYm9sZCIsIHNob3J0Y3V0OiAiQ21kK0IiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJCb2xkIikgfSwKICAgICAgICB7IG5hbWU6ICJJdGFsaWMiLCBpY29uTmFtZTogIml0YWxpYyIsIHNob3J0Y3V0OiAiQ21kK0kiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJJdGFsaWMiKSB9LAogICAgICAgIHsgbmFtZTogIlVuZGVybGluZSIsIGljb25OYW1lOiAidW5kZXJsaW5lIiwgc2hvcnRjdXQ6ICJDbWQrVSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVuZGVybGluZSIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiRm9udCBTaXplIiwgaWNvbk5hbWU6ICJ0eXBlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRm9udCBzaXplIG1lbnUiKSB9LAogICAgICAgIHsgbmFtZTogIkZvbnQgQ29sb3IiLCBpY29uTmFtZTogInBhbGV0dGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGb250IGNvbG9yIG1lbnUiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJUcmFuc2Zvcm0iLAogICAgICBpY29uTmFtZTogInNodWZmbGUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gUGFyZW50IGl0ZW1zIHdpdGggc3VibWVudXMgc3RpbGwgbmVlZCBhbiBhY3Rpb24KICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlRvIFVwcGVyY2FzZSIsIGljb25OYW1lOiAiYXJyb3dVcCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlVwcGVyY2FzZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiVG8gTG93ZXJjYXNlIiwgaWNvbk5hbWU6ICJhcnJvd0Rvd24iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJMb3dlcmNhc2UiKSB9LAogICAgICAgIHsgbmFtZTogIkNhcGl0YWxpemUiLCBpY29uTmFtZTogInR5cGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDYXBpdGFsaXplIikgfQogICAgICBdCiAgICB9LAogICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRlbGV0ZSIpCiAgICB9CiAgXSk7Cn19PgogICAgICA8aDM+QWR2YW5jZWQgTmVzdGVkIE1lbnUgRXhhbXBsZTwvaDM+CiAgICAgIDxwPlRoaXMgc2hvd3MgZGVlcGx5IG5lc3RlZCBzdWJtZW51cyBhbmQgdmFyaW91cyBmb3JtYXR0aW5nIG9wdGlvbnM8L3A+CiAgICA8L2Rpdj4KICA8L2RlZXMtcGFuZWw+CiAgCiAgPGRlZXMtcGFuZWwgaGVhZGluZz0iU3RhdGljIENvbnRleHQgTWVudSAoQWx3YXlzIFZpc2libGUpIj4KICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgIGNsYXNzPSJ3aXRoTWFyZ2luIgogICAgICAubWVudUl0ZW1zPSR7WwogIHsKICAgIG5hbWU6ICJQcm9qZWN0IiwKICAgIGljb25OYW1lOiAiZm9sZGVyIiwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgfSwKICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICBzdWJtZW51OiBbCiAgICAgIHsgbmFtZTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrTiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBwcm9qZWN0IikgfSwKICAgICAgeyBuYW1lOiAiT3BlbiBQcm9qZWN0IiwgaWNvbk5hbWU6ICJmb2xkZXJPcGVuIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrTyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gcHJvamVjdCIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJSZWNlbnQgUHJvamVjdHMiLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEFscGhhIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBBbHBoYSIpIH0sCiAgICAgICAgeyBuYW1lOiAiUHJvamVjdCBCZXRhIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBCZXRhIikgfSwKICAgICAgICB7IG5hbWU6ICJQcm9qZWN0IEdhbW1hIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiBHYW1tYSIpIH0KICAgICAgXSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiVG9vbHMiLAogICAgaWNvbk5hbWU6ICJ0b29sIiwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgfSwKICAgIC8vIFBhcmVudCBpdGVtcyB3aXRoIHN1Ym1lbnVzIHN0aWxsIG5lZWQgYW4gYWN0aW9uCiAgICBzdWJtZW51OiBbCiAgICAgIHsgbmFtZTogIlRlcm1pbmFsIiwgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsIHNob3J0Y3V0OiAiQ21kK1QiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJUZXJtaW5hbCIpIH0sCiAgICAgIHsgbmFtZTogIkNvbnNvbGUiLCBpY29uTmFtZTogIm1vbml0b3IiLCBzaG9ydGN1dDogIkNtZCtLIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ29uc29sZSIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJFeHRlbnNpb25zIiwgaWNvbk5hbWU6ICJwYWNrYWdlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXh0ZW5zaW9ucyIpIH0KICAgIF0KICB9LAogIHsgZGl2aWRlcjogdHJ1ZSB9LAogIHsKICAgIG5hbWU6ICJQcmVmZXJlbmNlcyIsCiAgICBpY29uTmFtZTogInNsaWRlcnMiLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJlZmVyZW5jZXMiKQogIH0KXX0KICAgID48L2RlZXMtY29udGV4dG1lbnU+CiAgPC9kZWVzLXBhbmVsPgo8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy13aW5kb3dsYXllci9kZWVzLXdpbmRvd2xheWVyLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBfX2VzRGVjb3JhdGUzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV2luZG93TGF5ZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdpbmRvd2xheWVyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3B0aW9uc19kZWNvcmF0b3JzOwogIGxldCBfb3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9iYWNrZHJvcFpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50WkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFpJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfdmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dpbmRvd0xheWVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JhY2tkcm9wWkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jb250ZW50WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzKHRoaXMsIG51bGwsIF9iYWNrZHJvcFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJiYWNrZHJvcFpJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYmFja2Ryb3BaSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYmFja2Ryb3BaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJhY2tkcm9wWkluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JhY2tkcm9wWkluZGV4X2luaXRpYWxpemVycywgX2JhY2tkcm9wWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfY29udGVudFpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMsIF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyh0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXaW5kb3dMYXllcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdpbmRvd2xheWVyPjwvZGVlcy13aW5kb3dsYXllcj5gOwogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9uc0FyZykgewogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gZGlzdF90c19leHBvcnRzMjUuRG9tVG9vbHMuZ2V0R2xvYmFsRG9tVG9vbHNTeW5jKCk7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gbmV3IERlZXNXaW5kb3dMYXllcjIoKTsKICAgICAgd2luZG93TGF5ZXIub3B0aW9ucyA9IHsKICAgICAgICAuLi53aW5kb3dMYXllci5vcHRpb25zLAogICAgICAgIC4uLm9wdGlvbnNBcmcKICAgICAgfTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQod2luZG93TGF5ZXIpOwogICAgICBhd2FpdCBkb210b29sc0luc3RhbmNlLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHdpbmRvd0xheWVyLnNob3coKTsKICAgICAgcmV0dXJuIHdpbmRvd0xheWVyOwogICAgfQogICAgI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIHsKICAgICAgYmx1cjogZmFsc2UKICAgIH0pOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JhY2tkcm9wWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9iYWNrZHJvcFpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IGJhY2tkcm9wWkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBiYWNrZHJvcFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYmFja2Ryb3BaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9iYWNrZHJvcFpJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNCh0aGlzLCBfY29udGVudFpJbmRleF9pbml0aWFsaXplcnMsIDEwMDEpKTsKICAgIGdldCBjb250ZW50WkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudFpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRaSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF9jb250ZW50WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmlzaWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0KHRoaXMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZGlzdF90c19leHBvcnRzMjUuZWxlbWVudEJhc2ljLnNldHVwKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHtkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc3R5bGVzfQogICAgICA8c3R5bGU+CiAgICAgICAgLndpbmRvd092ZXJsYXkgewogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4wKTsKICAgICAgICAgIGJhY2tkcm9wLWZpbHRlcjogYnJpZ2h0bmVzcygxKSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMHB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5iYWNrZHJvcFpJbmRleH07CiAgICAgICAgfQogICAgICAgIC5zbG90Q29udGVudCB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHotaW5kZXg6ICR7dGhpcy5jb250ZW50WkluZGV4fTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2xvdENvbnRlbnQgPiAqIHsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAudmlzaWJsZSB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgICBiYWNrZHJvcC1maWx0ZXI6IGJyaWdodG5lc3MoMC45KSAke3RoaXMub3B0aW9ucy5ibHVyID8gImJsdXIoMnB4KSIgOiAiIn07CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBAY2xpY2s9JHt0aGlzLmRpc3BhdGNoQ2xpY2tlZH0gY2xhc3M9IndpbmRvd092ZXJsYXkgJHt0aGlzLnZpc2libGUgPyAidmlzaWJsZSIgOiBudWxsfSI+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzbG90Q29udGVudCI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICAgIH0sIDEwMCk7CiAgICB9CiAgICBkaXNwYXRjaENsaWNrZWQoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiKSk7CiAgICB9CiAgICB0b2dnbGVWaXNpYmlsaXR5KCkgewogICAgICB0aGlzLnZpc2libGUgPSAhdGhpcy52aXNpYmxlOwogICAgfQogICAgZ2V0Q29udGVudFpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuY29udGVudFpJbmRleDsKICAgIH0KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIHRoaXMuYmFja2Ryb3BaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuY29udGVudFpJbmRleCA9IHpJbmRleFJlZ2lzdHJ5LmdldE5leHRaSW5kZXgoKTsKICAgICAgekluZGV4UmVnaXN0cnkucmVnaXN0ZXIodGhpcywgdGhpcy5iYWNrZHJvcFpJbmRleCk7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IHRoaXMuaGlkZSgpOwogICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDMwMCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICAgIHRoaXMucmVtb3ZlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXaW5kb3dMYXllcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWNvbnRleHRtZW51L2RlZXMtY29udGV4dG1lbnUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NvbnRleHRtZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1jb250ZXh0bWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX21lbnVJdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNDb250ZXh0bWVudTcgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9tZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU1KHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ29udGV4dG1lbnU3ID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM7CiAgICAvLyBTVEFUSUMKICAgIC8vIFRoaXMgd2lsbCBzdG9yZSBhbGwgdGhlIGFjY3VtdWxhdGVkIG1lbnUgaXRlbXMKICAgIHN0YXRpYyBjb250ZXh0TWVudURlYWN0aXZhdGVkID0gZmFsc2U7CiAgICBzdGF0aWMgYWNjdW11bGF0ZWRNZW51SXRlbXMgPSBbXTsKICAgIC8vIEFkZCBhIGdsb2JhbCBldmVudCBsaXN0ZW5lciBmb3IgdGhlIHJpZ2h0LWNsaWNrIGNvbnRleHQgbWVudQogICAgc3RhdGljIGluaXRpYWxpemVHbG9iYWxMaXN0ZW5lcigpIHsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUiLCAoZXZlbnQpID0+IHsKICAgICAgICBpZiAodGhpcy5jb250ZXh0TWVudURlYWN0aXZhdGVkKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcyA9IFtdOwogICAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgICAgZm9yIChjb25zdCBlbGVtZW50NCBvZiBwYXRoMikgewogICAgICAgICAgaWYgKGVsZW1lbnQ0LmdldENvbnRleHRNZW51SXRlbXMpIHsKICAgICAgICAgICAgY29uc3QgaXRlbXMgPSBlbGVtZW50NC5nZXRDb250ZXh0TWVudUl0ZW1zKCk7CiAgICAgICAgICAgIGlmIChpdGVtcyAmJiBpdGVtcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgaWYgKERlZXNDb250ZXh0bWVudTcuYWNjdW11bGF0ZWRNZW51SXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgRGVlc0NvbnRleHRtZW51Ny5hY2N1bXVsYXRlZE1lbnVJdGVtcy5wdXNoKC4uLml0ZW1zKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBEZWVzQ29udGV4dG1lbnU3Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBEZWVzQ29udGV4dG1lbnU3LmFjY3VtdWxhdGVkTWVudUl0ZW1zKTsKICAgICAgfSk7CiAgICB9CiAgICAvLyBhbGxvd3Mgb3BlbmluZyBvZiBhIGNvbnRleHRtZW51IHdpdGggb3B0aW9ucwogICAgc3RhdGljIGFzeW5jIG9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50QXJnLCBtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKHRoaXMuY29udGV4dE1lbnVEZWFjdGl2YXRlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudEFyZy5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgY29udGV4dE1lbnUgPSBuZXcgRGVlc0NvbnRleHRtZW51NygpOwogICAgICBjb250ZXh0TWVudS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnpJbmRleCA9IFN0cmluZyh6SW5kZXhMYXllcnMub3ZlcmxheS5jb250ZXh0TWVudSk7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIGNvbnRleHRNZW51LnN0eWxlLnRyYW5zZm9ybSA9ICJzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KSI7CiAgICAgIGNvbnRleHRNZW51Lm1lbnVJdGVtcyA9IG1lbnVJdGVtc0FyZzsKICAgICAgY29udGV4dE1lbnUud2luZG93TGF5ZXIgPSBhd2FpdCBEZWVzV2luZG93TGF5ZXIuY3JlYXRlQW5kU2hvdygpOwogICAgICBjb250ZXh0TWVudS53aW5kb3dMYXllci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jIChldmVudCkgPT4gewogICAgICAgIGNvbnN0IGNsaWNrZWRFbGVtZW50ID0gZXZlbnQudGFyZ2V0OwogICAgICAgIGNvbnN0IGlzQ29udGV4dE1lbnUgPSBjbGlja2VkRWxlbWVudC5jbG9zZXN0KCJkZWVzLWNvbnRleHRtZW51Iik7CiAgICAgICAgaWYgKCFpc0NvbnRleHRNZW51KSB7CiAgICAgICAgICBhd2FpdCBjb250ZXh0TWVudS5kZXN0cm95KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQoY29udGV4dE1lbnUpOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29uc3QgcmVjdCA9IGNvbnRleHRNZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICBjb25zdCB3aW5kb3dIZWlnaHQgPSB3aW5kb3cuaW5uZXJIZWlnaHQ7CiAgICAgIGxldCB0b3AgPSBldmVudEFyZy5jbGllbnRZOwogICAgICBsZXQgbGVmdCA9IGV2ZW50QXJnLmNsaWVudFg7CiAgICAgIGlmIChsZWZ0ICsgcmVjdC53aWR0aCA+IHdpbmRvd1dpZHRoKSB7CiAgICAgICAgbGVmdCA9IHdpbmRvd1dpZHRoIC0gcmVjdC53aWR0aCAtIDEwOwogICAgICB9CiAgICAgIGlmICh0b3AgKyByZWN0LmhlaWdodCA+IHdpbmRvd0hlaWdodCkgewogICAgICAgIHRvcCA9IHdpbmRvd0hlaWdodCAtIHJlY3QuaGVpZ2h0IC0gMTA7CiAgICAgIH0KICAgICAgaWYgKGxlZnQgPCAxMCkKICAgICAgICBsZWZ0ID0gMTA7CiAgICAgIGlmICh0b3AgPCAxMCkKICAgICAgICB0b3AgPSAxMDsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudG9wID0gYCR7dG9wfXB4YDsKICAgICAgY29udGV4dE1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgOwogICAgICBjb250ZXh0TWVudS5zdHlsZS50cmFuc2Zvcm1PcmlnaW4gPSAidG9wIGxlZnQiOwogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgY29udGV4dE1lbnUuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgY29udGV4dE1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDEpIHRyYW5zbGF0ZVkoMCkiOwogICAgfQogICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2KHRoaXMsIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB3aW5kb3dMYXllciA9IF9fcnVuSW5pdGlhbGl6ZXJzNih0aGlzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN1Ym1lbnUgPSBudWxsOwogICAgc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgcGFyZW50TWVudSA9IG51bGw7CiAgICBpc0Rlc3Ryb3lpbmcgPSBmYWxzZTsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICB0aGlzLnRhYkluZGV4ID0gMDsKICAgIH0KICAgIC8qKgogICAgICogU1RBVElDIFNUWUxFUwogICAgICovCiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycywgdHJhbnNmb3JtIDAuMnM7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLm1haW5ib3ggewogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAyODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjY2NjIil9OwogICAgICB9CgogICAgICAubWVudWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWVudWl0ZW0uaGFzLXN1Ym1lbnU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAn4oC6JzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAubWVudWl0ZW06YWN0aXZlOm5vdCguaGFzLXN1Ym1lbnUpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTIpIil9OwogICAgICB9CiAgICAgIAogICAgICAubWVudWl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudWl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudWl0ZW0tdGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm1lbnVpdGVtLXNob3J0Y3V0IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKG1lbnVJdGVtQXJnKSA9PiB7CiAgICAgICAgaWYgKCJkaXZpZGVyIiBpbiBtZW51SXRlbUFyZyAmJiBtZW51SXRlbUFyZy5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICBjb25zdCBtZW51SXRlbSA9IG1lbnVJdGVtQXJnOwogICAgICAgIGNvbnN0IGhhc1N1Ym1lbnUgPSBtZW51SXRlbS5zdWJtZW51ICYmIG1lbnVJdGVtLnN1Ym1lbnUubGVuZ3RoID4gMDsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9Im1lbnVpdGVtICR7bWVudUl0ZW0uZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzU3VibWVudSA/ICJoYXMtc3VibWVudSIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0keygpID0+ICFtZW51SXRlbS5kaXNhYmxlZCAmJiAhaGFzU3VibWVudSAmJiB0aGlzLmhhbmRsZUNsaWNrKG1lbnVJdGVtKX0KICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGFuZGxlTWVudUl0ZW1Ib3ZlcihtZW51SXRlbSwgaGFzU3VibWVudSl9CiAgICAgICAgICAgICAgQG1vdXNlbGVhdmU9JHsoKSA9PiB0aGlzLmhhbmRsZU1lbnVJdGVtTGVhdmUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7bWVudUl0ZW0uaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7bWVudUl0ZW0uaWNvbk5hbWV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPiR7bWVudUl0ZW0ubmFtZX08L3NwYW4+CiAgICAgICAgICAgICAgJHttZW51SXRlbS5zaG9ydGN1dCAmJiAhaGFzU3VibWVudSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXNob3J0Y3V0Ij4ke21lbnVJdGVtLnNob3J0Y3V0fTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYDsKICAgICAgfSl9CiAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5sZW5ndGggPT09IDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWVudWl0ZW0iIEBjbGljaz0keygpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnU3LmNvbnRleHRNZW51RGVhY3RpdmF0ZWQgPSB0cnVlOwogICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICB9fT4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSJsdWNpZGU6eCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnVpdGVtLXRleHQiPkFsbG93IG5hdGl2ZSBjb250ZXh0PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmZvY3VzKCk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMuaGFuZGxlS2V5ZG93bik7CiAgICB9CiAgICBoYW5kbGVLZXlkb3duID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IEFycmF5LmZyb20odGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5tZW51aXRlbTpub3QoLmRpc2FibGVkKSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gbWVudUl0ZW1zLmZpbmRJbmRleCgoaXRlbSkgPT4gaXRlbS5tYXRjaGVzKCI6aG92ZXIiKSk7CiAgICAgIHN3aXRjaCAoZXZlbnQua2V5KSB7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyAxIDwgbWVudUl0ZW1zLmxlbmd0aCA/IGN1cnJlbnRJbmRleCArIDEgOiAwOwogICAgICAgICAgbWVudUl0ZW1zW25leHRJbmRleF0uZGlzcGF0Y2hFdmVudChuZXcgTW91c2VFdmVudCgibW91c2VlbnRlciIpKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93VXAiOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IHByZXZJbmRleCA9IGN1cnJlbnRJbmRleCAtIDEgPj0gMCA/IGN1cnJlbnRJbmRleCAtIDEgOiBtZW51SXRlbXMubGVuZ3RoIC0gMTsKICAgICAgICAgIG1lbnVJdGVtc1twcmV2SW5kZXhdLmRpc3BhdGNoRXZlbnQobmV3IE1vdXNlRXZlbnQoIm1vdXNlZW50ZXIiKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaWYgKGN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgICAgICAgIG1lbnVJdGVtc1tjdXJyZW50SW5kZXhdLmNsaWNrKCk7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVzdHJveSgpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH07CiAgICBhc3luYyBoYW5kbGVDbGljayhtZW51SXRlbSkgewogICAgICBtZW51SXRlbS5hY3Rpb24oKTsKICAgICAgYXdhaXQgdGhpcy5kZXN0cm95QWxsKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVNZW51SXRlbUhvdmVyKG1lbnVJdGVtLCBoYXNTdWJtZW51KSB7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLnN1Ym1lbnUpIHsKICAgICAgICBhd2FpdCB0aGlzLmhpZGVTdWJtZW51KCk7CiAgICAgIH0KICAgICAgaWYgKGhhc1N1Ym1lbnUgJiYgbWVudUl0ZW0uc3VibWVudSkgewogICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuc2hvd1N1Ym1lbnUobWVudUl0ZW0pOwogICAgICAgIH0sIDIwMCk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZU1lbnVJdGVtTGVhdmUoKSB7CiAgICAgIGlmICh0aGlzLnN1Ym1lbnVUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuc3VibWVudVRpbWVvdXQpOwogICAgICB9CiAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdWJtZW51ICYmICF0aGlzLnN1Ym1lbnUubWF0Y2hlcygiOmhvdmVyIikpIHsKICAgICAgICAgIHRoaXMuaGlkZVN1Ym1lbnUoKTsKICAgICAgICB9CiAgICAgIH0sIDMwMCk7CiAgICB9CiAgICBhc3luYyBzaG93U3VibWVudShtZW51SXRlbSkgewogICAgICBpZiAoIW1lbnVJdGVtLnN1Ym1lbnUgfHwgbWVudUl0ZW0uc3VibWVudS5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIubWVudWl0ZW0iKSk7CiAgICAgIGNvbnN0IG1lbnVJdGVtRWxlbWVudCA9IG1lbnVJdGVtcy5maW5kKChlbCkgPT4gZWwucXVlcnlTZWxlY3RvcigiLm1lbnVpdGVtLXRleHQiKT8udGV4dENvbnRlbnQgPT09IG1lbnVJdGVtLm5hbWUpOwogICAgICBpZiAoIW1lbnVJdGVtRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuc3VibWVudSA9IG5ldyBEZWVzQ29udGV4dG1lbnU3KCk7CiAgICAgIHRoaXMuc3VibWVudS5tZW51SXRlbXMgPSBtZW51SXRlbS5zdWJtZW51OwogICAgICB0aGlzLnN1Ym1lbnUucGFyZW50TWVudSA9IHRoaXM7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5wb3NpdGlvbiA9ICJmaXhlZCI7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS56SW5kZXggPSBTdHJpbmcocGFyc2VJbnQodGhpcy5zdHlsZS56SW5kZXgpICsgMSk7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIjsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy5zdWJtZW51KTsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IGl0ZW1SZWN0ID0gbWVudUl0ZW1FbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtZW51UmVjdCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IHN1Ym1lbnVSZWN0ID0gdGhpcy5zdWJtZW51LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCB3aW5kb3dXaWR0aCA9IHdpbmRvdy5pbm5lcldpZHRoOwogICAgICBsZXQgbGVmdCA9IG1lbnVSZWN0LnJpZ2h0IC0gNDsKICAgICAgbGV0IHRvcCA9IGl0ZW1SZWN0LnRvcDsKICAgICAgaWYgKGxlZnQgKyBzdWJtZW51UmVjdC53aWR0aCA+IHdpbmRvd1dpZHRoIC0gMTApIHsKICAgICAgICBsZWZ0ID0gbWVudVJlY3QubGVmdCAtIHN1Ym1lbnVSZWN0LndpZHRoICsgNDsKICAgICAgfQogICAgICBpZiAodG9wICsgc3VibWVudVJlY3QuaGVpZ2h0ID4gd2luZG93LmlubmVySGVpZ2h0IC0gMTApIHsKICAgICAgICB0b3AgPSB3aW5kb3cuaW5uZXJIZWlnaHQgLSBzdWJtZW51UmVjdC5oZWlnaHQgLSAxMDsKICAgICAgfQogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUubGVmdCA9IGAke2xlZnR9cHhgOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudG9wID0gYCR7dG9wfXB4YDsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc3VibWVudS5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgICB0aGlzLnN1Ym1lbnUuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDEpIjsKICAgICAgdGhpcy5zdWJtZW51LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZW50ZXIiLCAoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuc3VibWVudVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KTsKICAgICAgICAgIHRoaXMuc3VibWVudVRpbWVvdXQgPSBudWxsOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc3VibWVudS5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgIHRoaXMuaGFuZGxlTWVudUl0ZW1MZWF2ZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIGhpZGVTdWJtZW51KCkgewogICAgICBpZiAoIXRoaXMuc3VibWVudSkKICAgICAgICByZXR1cm47CiAgICAgIGF3YWl0IHRoaXMuc3VibWVudS5kZXN0cm95KCk7CiAgICAgIHRoaXMuc3VibWVudSA9IG51bGw7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICBpZiAodGhpcy5pc0Rlc3Ryb3lpbmcpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0Rlc3Ryb3lpbmcgPSB0cnVlOwogICAgICBpZiAodGhpcy5zdWJtZW51VGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnN1Ym1lbnVUaW1lb3V0KTsKICAgICAgICB0aGlzLnN1Ym1lbnVUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5zdWJtZW51KSB7CiAgICAgICAgYXdhaXQgdGhpcy5zdWJtZW51LmRlc3Ryb3koKTsKICAgICAgICB0aGlzLnN1Ym1lbnUgPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLndpbmRvd0xheWVyICYmICF0aGlzLnBhcmVudE1lbnUpIHsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB0aGlzLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMuc3R5bGUudHJhbnNmb3JtID0gInNjYWxlKDAuOTUpIHRyYW5zbGF0ZVkoLTEwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTAwKTsKICAgICAgaWYgKHRoaXMucGFyZW50RWxlbWVudCkgewogICAgICAgIHRoaXMucGFyZW50RWxlbWVudC5yZW1vdmVDaGlsZCh0aGlzKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBEZXN0cm95cyB0aGlzIG1lbnUgYW5kIGFsbCBwYXJlbnQgbWVudXMgaW4gdGhlIGNoYWluCiAgICAgKi8KICAgIGFzeW5jIGRlc3Ryb3lBbGwoKSB7CiAgICAgIGxldCByb290TWVudSA9IHRoaXM7CiAgICAgIHdoaWxlIChyb290TWVudS5wYXJlbnRNZW51KSB7CiAgICAgICAgcm9vdE1lbnUgPSByb290TWVudS5wYXJlbnRNZW51OwogICAgICB9CiAgICAgIGF3YWl0IHJvb3RNZW51LmRlc3Ryb3koKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0NvbnRleHRtZW51NyA9IF9jbGFzc1RoaXM7Cn0pKCk7CkRlZXNDb250ZXh0bWVudS5pbml0aWFsaXplR2xvYmFsTGlzdGVuZXIoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLXdjY3Rvb2xzQDMuNy4xL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLXdjY3Rvb2xzL2Rpc3RfdHNfZGVtb3Rvb2xzL2RlbW90b29scy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlNiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RlbW9XcmFwcGVyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1kZW1vd3JhcHBlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9ydW5BZnRlclJlbmRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEZW1vV3JhcHBlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ydW5BZnRlclJlbmRlcl9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTYodGhpcywgbnVsbCwgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ1bkFmdGVyUmVuZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydW5BZnRlclJlbmRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ydW5BZnRlclJlbmRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnVuQWZ0ZXJSZW5kZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RlbW9XcmFwcGVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHJ1bkFmdGVyUmVuZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydW5BZnRlclJlbmRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcnVuQWZ0ZXJSZW5kZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDUwKSk7CiAgICAgIGlmICh0aGlzLmNoaWxkcmVuLmxlbmd0aCA+IDAgJiYgdGhpcy5ydW5BZnRlclJlbmRlcikgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBpbiBydW5BZnRlclJlbmRlcjoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3KHRoaXMsIF9ydW5BZnRlclJlbmRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNEZW1vV3JhcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzMgPSAoKSA9PiB7CiAgY29uc3QgYWN0aXZpdHlMb2cgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIik7CiAgc2V0VGltZW91dCgoKSA9PiB7CiAgICBhY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgeyB0eXBlOiAibG9naW4iLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAibG9nZ2VkIGluIGZyb20gQ2hyb21lIG9uIG1hY09TIiB9LAogICAgICB7IHR5cGU6ICJjcmVhdGUiLCB1c2VyOiAiSm9obiBEb2UiLCBtZXNzYWdlOiAnY3JlYXRlZCBhIG5ldyBwcm9qZWN0ICJGcm9udGVuZCBBcHAiJyB9LAogICAgICB7IHR5cGU6ICJ1cGRhdGUiLCB1c2VyOiAiSmFuZSBTbWl0aCIsIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIiB9LAogICAgICB7IHR5cGU6ICJ2aWV3IiwgdXNlcjogIkpvaG4gRG9lIiwgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIiB9LAogICAgICB7IHR5cGU6ICJkZWxldGUiLCB1c2VyOiAiQWRtaW4iLCBtZXNzYWdlOiAicmVtb3ZlZCBkZXByZWNhdGVkIGVuZHBvaW50IiB9LAogICAgICB7IHR5cGU6ICJjdXN0b20iLCB1c2VyOiAiU3lzdGVtIiwgbWVzc2FnZTogInNjaGVkdWxlZCBiYWNrdXAgY29tcGxldGVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiIH0sCiAgICAgIHsgdHlwZTogImxvZ291dCIsIHVzZXI6ICJBbGljZSBCcm93biIsIG1lc3NhZ2U6ICJsb2dnZWQgb3V0IiB9LAogICAgICB7IHR5cGU6ICJjcmVhdGUiLCB1c2VyOiAiSmFuZSBTbWl0aCIsIG1lc3NhZ2U6ICJjcmVhdGVkIGludm9pY2UgIzEyMzQiIH0KICAgIF0pOwogICAgYWN0aXZpdHlMb2cuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJBY3Rpdml0eSBsb2cgdXBkYXRlZDoiLCBlbnRyaWVzLmxlbmd0aCwgImVudHJpZXMiKTsKICAgIH0pOwogIH0sIDEwMCk7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICAgIDxzdHlsZT4KICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMDkwOTBiIil9OwogICAgICAgICAgcGFkZGluZzogMzJweDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgICAke2FjdGl2aXR5TG9nfQogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYWN0aXZpdHlsb2cvZGVlcy1hcHB1aS1hY3Rpdml0eWxvZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQXBwdWlBY3Rpdml0eWxvZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYWN0aXZpdHlsb2ciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9lbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9lbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoUXVlcnlfZGVjb3JhdG9yczsKICBsZXQgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoUXVlcnlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2RlY29yYXRvcnM7CiAgbGV0IF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUFjdGl2aXR5bG9nMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudHJpZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlYXJjaFF1ZXJ5X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9maWx0ZXJDcml0ZXJpYV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9lbnRyaWVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVudHJpZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVudHJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50cmllcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZW50cmllcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbnRyaWVzX2luaXRpYWxpemVycywgX2VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNyh0aGlzLCBudWxsLCBfZmlsdGVyQ3JpdGVyaWFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyQ3JpdGVyaWEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbHRlckNyaXRlcmlhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlckNyaXRlcmlhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJDcml0ZXJpYSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMsIF9maWx0ZXJDcml0ZXJpYV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlBY3Rpdml0eWxvZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQXBwIFVJIjsKICAgICNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2VudHJpZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgZW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNlbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoUXVlcnlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgodGhpcywgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWFyY2hRdWVyeSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoUXVlcnkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyQ3JpdGVyaWFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4KHRoaXMsIF9maWx0ZXJDcml0ZXJpYV9pbml0aWFsaXplcnMsIHt9KSk7CiAgICBnZXQgZmlsdGVyQ3JpdGVyaWEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlckNyaXRlcmlhKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJDcml0ZXJpYV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gUnhKUyBTdWJqZWN0IGZvciByZWFjdGl2ZSB1cGRhdGVzCiAgICBlbnRyaWVzJCA9IChfX3J1bkluaXRpYWxpemVyczgodGhpcywgX2ZpbHRlckNyaXRlcmlhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpKTsKICAgIC8vIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICAvKiBDU1MgVmFyaWFibGVzIGFsaWduZWQgd2l0aCBzZWNvbmRhcnkgbWVudSAqLwogICAgICAgIC0tYWN0aXZpdHlsb2ctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM1MjUyNTIiLCAiI2EzYTNhMyIpfTsKICAgICAgICAtLWFjdGl2aXR5bG9nLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctZmctYWN0aXZlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctYm9yZGVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIC0tYWN0aXZpdHlsb2ctaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1hY3Rpdml0eWxvZy1hY2NlbnQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzg3MTZjIiwgIiNiNWE5OWEiKX07CgogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZyk7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1hY3Rpdml0eWxvZy1iZyk7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAyODBweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyIHdpdGggc3RyZWFtaW5nIGluZGljYXRvciAqLwogICAgICAudG9wYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgdmFyKC0tYWN0aXZpdHlsb2ctYm9yZGVyKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgLmhlYWRpbmcgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1hY3RpdmUpOwogICAgICB9CgogICAgICAubGl2ZS1pbmRpY2F0b3IgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA1ZW07CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLmxpdmUtaW5kaWNhdG9yIC5kb3QgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyMmM1NWUiLCAiIzIyYzU1ZSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBwdWxzZSAycyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwdWxzZSB7CiAgICAgICAgMCUsIDEwMCUgeyBvcGFjaXR5OiAwLjU7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgfQogICAgICAgIDUwJSB7IG9wYWNpdHk6IDE7IHRyYW5zZm9ybTogc2NhbGUoMS4xKTsgfQogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBjb250YWluZXIgKi8KICAgICAgLmFjdGl2aXR5Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0OHB4OwogICAgICAgIGJvdHRvbTogNDhweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzMzMzMzMyIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5Q29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eUNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ0IiwgIiMzMzMzMzMiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAuYWN0aXZpdHlDb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2EzYTNhMyIsICIjNTI1MjUyIil9OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCAxNnB4OwogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC8qIERhdGUgc2VwYXJhdG9yIC0gd2FybSB0YXVwZSBzdHlsaW5nICovCiAgICAgIC5kYXRlLXNlcGFyYXRvciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxMnB4IDZweDsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctYWNjZW50KTsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHRvcDogMDsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWFjdGl2aXR5bG9nLWJnKTsKICAgICAgfQoKICAgICAgLyogQWN0aXZpdHkgZW50cnkgLSBtb2Rlcm4gc3RhY2tlZCBsYXlvdXQgKi8KICAgICAgLmFjdGl2aXR5ZW50cnkgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBtYXJnaW46IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluIDAuMnMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuYWN0aXZpdHllbnRyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctaG92ZXIpOwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ2luIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNCwgMTk3LCA5NCwgMC4wOCkiLCAicmdiYSgzNCwgMTk3LCA5NCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTZhMzRhIiwgIiM0YWRlODAiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmxvZ291dCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMDgpIiwgInJnYmEoMjM5LCA2OCwgNjgsIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CgogICAgICAuYWN0aXZpdHktaWNvbi52aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDgpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzYwYTVmYSIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNjgsIDg1LCAyNDcsIDAuMDgpIiwgInJnYmEoMTY4LCA4NSwgMjQ3LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5MzMzZWEiLCAiI2MwODRmYyIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24udXBkYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTEsIDE0NiwgNjAsIDAuMDgpIiwgInJnYmEoMjUxLCAxNDYsIDYwLCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlYTU4MGMiLCAiI2ZiOTIzYyIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWljb24uZGVsZXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4wOCkiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4xMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1pY29uLmN1c3RvbSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTAwLCAxMTYsIDEzOSwgMC4wOCkiLCAicmdiYSgxMDAsIDExNiwgMTM5LCAwLjEyKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM0NzU1NjkiLCAiIzk0YTNiOCIpfTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICB9CgogICAgICAuYWN0aXZpdHktdXNlciB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1zZXBhcmF0b3IgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICB9CgogICAgICAudGltZXN0YW1wIHsKICAgICAgICBjb2xvcjogdmFyKC0tYWN0aXZpdHlsb2ctZmctbXV0ZWQpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtdmFyaWFudC1udW1lcmljOiB0YWJ1bGFyLW51bXM7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBNb25vJywgbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuYWN0aXZpdHktbWVzc2FnZSB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay13b3JkOwogICAgICB9CgogICAgICAvKiBTZWFyY2ggYm94IC0gcmVmaW5lZCBzdHlsaW5nICovCiAgICAgIC5zZWFyY2hib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYWN0aXZpdHlsb2ctYmcpOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB2YXIoLS1hY3Rpdml0eWxvZy1ib3JkZXIpOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1pY29uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLW11dGVkKTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dCB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnLWFjdGl2ZSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wMykiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA0KSIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wOCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMCAxMnB4IDAgMzRweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnNlYXJjaGJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpdml0eWxvZy1mZy1tdXRlZCk7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3ggaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtd3JhcHBlcjpoYXMoaW5wdXQ6Zm9jdXMpIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGl2aXR5bG9nLWZnKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vIFJFTkRFUgogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBmaWx0ZXJlZEVudHJpZXMgPSB0aGlzLmdldEZpbHRlcmVkRW50cmllcygpOwogICAgICBjb25zdCBncm91cGVkRW50cmllcyA9IHRoaXMuZ3JvdXBFbnRyaWVzQnlEYXRlKGZpbHRlcmVkRW50cmllcyk7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHtkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zdHlsZXN9CiAgICAgIDxzdHlsZT48L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+QWN0aXZpdHkgTG9nPC9kaXY+CiAgICAgICAgICAke2ZpbHRlcmVkRW50cmllcy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0ibGl2ZS1pbmRpY2F0b3IiPjxzcGFuIGNsYXNzPSJkb3QiPjwvc3Bhbj5MaXZlPC9kaXY+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5Q29udGFpbmVyIj4KICAgICAgICAgICR7ZmlsdGVyZWRFbnRyaWVzLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBhY3Rpdml0eSBlbnRyaWVzPC9kaXY+YCA6IGdyb3VwZWRFbnRyaWVzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLXNlcGFyYXRvciI+JHtncm91cC5sYWJlbH08L2Rpdj4KICAgICAgICAgICAgICAgICAgJHtncm91cC5lbnRyaWVzLm1hcCgoZW50cnkpID0+IHRoaXMucmVuZGVyQWN0aXZpdHlFbnRyeShlbnRyeSkpfQogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VhcmNoYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC13cmFwcGVyIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0ic2VhcmNoLWljb24iIC5pY29uPSR7Imx1Y2lkZTpzZWFyY2gifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VhcmNoIGFjdGl2aXRpZXMsIHVzZXJzLi4uIgogICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuc2VhcmNoUXVlcnl9CiAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVTZWFyY2hJbnB1dH0KICAgICAgICAgICAgLz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJBY3Rpdml0eUVudHJ5KGVudHJ5KSB7CiAgICAgIGNvbnN0IHRpbWVzdGFtcDIgPSBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIGNvbnN0IHRpbWVTdHIgPSB0aGlzLmZvcm1hdFRpbWUodGltZXN0YW1wMik7CiAgICAgIGNvbnN0IGljb25OYW1lID0gZW50cnkuaWNvbk5hbWUgfHwgdGhpcy5nZXRJY29uRm9yVHlwZShlbnRyeS50eXBlKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImFjdGl2aXR5ZW50cnkiCiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIGVudHJ5KX0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWljb24gJHtlbnRyeS50eXBlfSI+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7aWNvbk5hbWV9PjwvZGVlcy1pY29uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGl2aXR5LWNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0iYWN0aXZpdHktaGVhZGVyIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImFjdGl2aXR5LXVzZXIiPiR7ZW50cnkudXNlcn08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1zZXBhcmF0b3IiPsK3PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZXN0YW1wIj4ke3RpbWVTdHJ9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpdml0eS1tZXNzYWdlIj4ke2VudHJ5Lm1lc3NhZ2V9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIEFQSSBNRVRIT0RTCiAgICBhZGQoZW50cnkpIHsKICAgICAgY29uc3QgbmV3RW50cnkgPSB7CiAgICAgICAgLi4uZW50cnksCiAgICAgICAgaWQ6IGVudHJ5LmlkIHx8IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgIHRpbWVzdGFtcDogZW50cnkudGltZXN0YW1wIHx8IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpCiAgICAgIH07CiAgICAgIHRoaXMuZW50cmllcyA9IFtuZXdFbnRyeSwgLi4udGhpcy5lbnRyaWVzXTsKICAgICAgdGhpcy5lbnRyaWVzJC5uZXh0KHRoaXMuZW50cmllcyk7CiAgICB9CiAgICBhZGRNYW55KGVudHJpZXMpIHsKICAgICAgY29uc3QgbmV3RW50cmllcyA9IGVudHJpZXMubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAuLi5lbnRyeSwKICAgICAgICBpZDogZW50cnkuaWQgfHwgdGhpcy5nZW5lcmF0ZUlkKCksCiAgICAgICAgdGltZXN0YW1wOiBlbnRyeS50aW1lc3RhbXAgfHwgLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkKICAgICAgfSkpOwogICAgICB0aGlzLmVudHJpZXMgPSBbLi4ubmV3RW50cmllcy5yZXZlcnNlKCksIC4uLnRoaXMuZW50cmllc107CiAgICAgIHRoaXMuZW50cmllcyQubmV4dCh0aGlzLmVudHJpZXMpOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuZW50cmllcyA9IFtdOwogICAgICB0aGlzLmVudHJpZXMkLm5leHQodGhpcy5lbnRyaWVzKTsKICAgIH0KICAgIGdldEVudHJpZXMoKSB7CiAgICAgIHJldHVybiBbLi4udGhpcy5lbnRyaWVzXTsKICAgIH0KICAgIGZpbHRlcihjcml0ZXJpYSkgewogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IHsKICAgICAgICBpZiAoY3JpdGVyaWEudXNlciAmJiBlbnRyeS51c2VyICE9PSBjcml0ZXJpYS51c2VyKQogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIGlmIChjcml0ZXJpYS50eXBlICYmIGVudHJ5LnR5cGUgIT09IGNyaXRlcmlhLnR5cGUpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0pOwogICAgfQogICAgc2VhcmNoKHF1ZXJ5KSB7CiAgICAgIGNvbnN0IGxvd2VyUXVlcnkgPSBxdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gdGhpcy5lbnRyaWVzLmZpbHRlcigoZW50cnkpID0+IGVudHJ5Lm1lc3NhZ2UudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhsb3dlclF1ZXJ5KSB8fCBlbnRyeS51c2VyLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkpOwogICAgfQogICAgLy8gUFJJVkFURSBIRUxQRVJTCiAgICBnZW5lcmF0ZUlkKCkgewogICAgICByZXR1cm4gYGFjdGl2aXR5LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHIoMiwgOSl9YDsKICAgIH0KICAgIGdldEZpbHRlcmVkRW50cmllcygpIHsKICAgICAgbGV0IHJlc3VsdCA9IHRoaXMuZW50cmllczsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICBjb25zdCBsb3dlclF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5tZXNzYWdlLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMobG93ZXJRdWVyeSkgfHwgZW50cnkudXNlci50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKGxvd2VyUXVlcnkpKTsKICAgICAgfQogICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyIHx8IHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSkgewogICAgICAgIHJlc3VsdCA9IHJlc3VsdC5maWx0ZXIoKGVudHJ5KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5maWx0ZXJDcml0ZXJpYS51c2VyICYmIGVudHJ5LnVzZXIgIT09IHRoaXMuZmlsdGVyQ3JpdGVyaWEudXNlcikKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgaWYgKHRoaXMuZmlsdGVyQ3JpdGVyaWEudHlwZSAmJiBlbnRyeS50eXBlICE9PSB0aGlzLmZpbHRlckNyaXRlcmlhLnR5cGUpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBncm91cEVudHJpZXNCeURhdGUoZW50cmllcykgewogICAgICBjb25zdCBncm91cHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICBjb25zdCB5ZXN0ZXJkYXkgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHllc3RlcmRheS5zZXREYXRlKHllc3RlcmRheS5nZXREYXRlKCkgLSAxKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IGVudHJ5LnRpbWVzdGFtcCB8fCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgICAgICBsZXQgbGFiZWw7CiAgICAgICAgaWYgKHRoaXMuaXNTYW1lRGF5KGRhdGUsIHRvZGF5KSkgewogICAgICAgICAgbGFiZWwgPSAiVG9kYXkiOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5pc1NhbWVEYXkoZGF0ZSwgeWVzdGVyZGF5KSkgewogICAgICAgICAgbGFiZWwgPSAiWWVzdGVyZGF5IjsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbGFiZWwgPSBkYXRlLnRvTG9jYWxlRGF0ZVN0cmluZygiZW4tVVMiLCB7CiAgICAgICAgICAgIG1vbnRoOiAic2hvcnQiLAogICAgICAgICAgICBkYXk6ICJudW1lcmljIiwKICAgICAgICAgICAgeWVhcjogZGF0ZS5nZXRGdWxsWWVhcigpICE9PSB0b2RheS5nZXRGdWxsWWVhcigpID8gIm51bWVyaWMiIDogdm9pZCAwCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKCFncm91cHMuaGFzKGxhYmVsKSkgewogICAgICAgICAgZ3JvdXBzLnNldChsYWJlbCwgW10pOwogICAgICAgIH0KICAgICAgICBncm91cHMuZ2V0KGxhYmVsKS5wdXNoKGVudHJ5KTsKICAgICAgfQogICAgICByZXR1cm4gQXJyYXkuZnJvbShncm91cHMuZW50cmllcygpKS5tYXAoKFtsYWJlbCwgZW50cmllczJdKSA9PiAoewogICAgICAgIGxhYmVsLAogICAgICAgIGVudHJpZXM6IGVudHJpZXMyCiAgICAgIH0pKTsKICAgIH0KICAgIGlzU2FtZURheShkYXRlMSwgZGF0ZTIpIHsKICAgICAgcmV0dXJuIGRhdGUxLmdldEZ1bGxZZWFyKCkgPT09IGRhdGUyLmdldEZ1bGxZZWFyKCkgJiYgZGF0ZTEuZ2V0TW9udGgoKSA9PT0gZGF0ZTIuZ2V0TW9udGgoKSAmJiBkYXRlMS5nZXREYXRlKCkgPT09IGRhdGUyLmdldERhdGUoKTsKICAgIH0KICAgIGZvcm1hdFRpbWUoZGF0ZSkgewogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlCiAgICAgIH0pOwogICAgfQogICAgZ2V0SWNvbkZvclR5cGUodHlwZTUpIHsKICAgICAgY29uc3QgaWNvbnM1ID0gewogICAgICAgIGxvZ2luOiAibHVjaWRlOmxvZ0luIiwKICAgICAgICBsb2dvdXQ6ICJsdWNpZGU6bG9nT3V0IiwKICAgICAgICB2aWV3OiAibHVjaWRlOmV5ZSIsCiAgICAgICAgY3JlYXRlOiAibHVjaWRlOnBsdXMiLAogICAgICAgIHVwZGF0ZTogImx1Y2lkZTplZGl0IiwKICAgICAgICBkZWxldGU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBjdXN0b206ICJsdWNpZGU6YWN0aXZpdHkiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uczVbdHlwZTVdIHx8IGljb25zNS5jdXN0b207CiAgICB9CiAgICBoYW5kbGVTZWFyY2hJbnB1dChlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGUxMSwgZW50cnkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiQ29weSBhY3Rpdml0eSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChgJHtlbnRyeS51c2VyfSAke2VudHJ5Lm1lc3NhZ2V9YCk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRmlsdGVyIGJ5IHVzZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dXNlciIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHsgdXNlcjogZW50cnkudXNlciB9OwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbHRlciBieSB0eXBlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHsgdHlwZTogZW50cnkudHlwZSB9OwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkNsZWFyIGZpbHRlcnMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6eCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5maWx0ZXJDcml0ZXJpYSA9IHt9OwogICAgICAgICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gIiI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQWN0aXZpdHlsb2cyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQgPSAoKSA9PiB7CiAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRmlsZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICB9LAogICAgICAvLyBOby1vcCBhY3Rpb24gZm9yIG1lbnUgd2l0aCBzdWJtZW51CiAgICAgIHN1Ym1lbnU6IFsKICAgICAgICB7IG5hbWU6ICJOZXcgRmlsZSIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGUtcGx1cyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk5ldyBmaWxlIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuLi4uIiwgc2hvcnRjdXQ6ICJDbWQrTyIsIGljb25OYW1lOiAiZm9sZGVyLW9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICB7IG5hbWU6ICJPcGVuIFJlY2VudCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgIHsgbmFtZTogInByb2plY3QtYWxwaGEudHMiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAxIikgfSwKICAgICAgICAgIHsgbmFtZTogImNvbmZpZy5qc29uIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiT3BlbiByZWNlbnQgMiIpIH0sCiAgICAgICAgICB7IG5hbWU6ICJyZWFkbWUubWQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIHJlY2VudCAzIikgfQogICAgICAgIF0gfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTYXZlIiwgc2hvcnRjdXQ6ICJDbWQrUyIsIGljb25OYW1lOiAic2F2ZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNhdmUiKSB9LAogICAgICAgIHsgbmFtZTogIlNhdmUgQXMuLi4iLCBzaG9ydGN1dDogIkNtZCtTaGlmdCtTIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSBhcyIpLCBkaXNhYmxlZDogdHJ1ZSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkV4aXQiLCBzaG9ydGN1dDogIkNtZCtRIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiRXhpdCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkVkaXQiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICB7IG5hbWU6ICJSZWRvIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrWiIsIGljb25OYW1lOiAicmVkbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlZG8iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICB7IG5hbWU6ICJDb3B5Iiwgc2hvcnRjdXQ6ICJDbWQrQyIsIGljb25OYW1lOiAiY29weSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkNvcHkiKSB9LAogICAgICAgIHsgbmFtZTogIlBhc3RlIiwgc2hvcnRjdXQ6ICJDbWQrViIsIGljb25OYW1lOiAiY2xpcGJvYXJkIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUGFzdGUiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIkZpbmQiLCBzaG9ydGN1dDogIkNtZCtGIiwgaWNvbk5hbWU6ICJzZWFyY2giLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJGaW5kIikgfSwKICAgICAgICB7IG5hbWU6ICJSZXBsYWNlIiwgc2hvcnRjdXQ6ICJDbWQrSCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlcGxhY2UiKSB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIH0sCiAgICAgIC8vIE5vLW9wIGFjdGlvbiBmb3IgbWVudSB3aXRoIHN1Ym1lbnUKICAgICAgc3VibWVudTogWwogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBGdWxsc2NyZWVuIiwgc2hvcnRjdXQ6ICJGMTEiLCBpY29uTmFtZTogImV4cGFuZCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkZ1bGxzY3JlZW4iKSB9LAogICAgICAgIHsgbmFtZTogIlpvb20gSW4iLCBzaG9ydGN1dDogIkNtZCsrIiwgaWNvbk5hbWU6ICJ6b29tLWluIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiWm9vbSBpbiIpIH0sCiAgICAgICAgeyBuYW1lOiAiWm9vbSBPdXQiLCBzaG9ydGN1dDogIkNtZCstIiwgaWNvbk5hbWU6ICJ6b29tLW91dCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlpvb20gb3V0IikgfSwKICAgICAgICB7IG5hbWU6ICJSZXNldCBab29tIiwgc2hvcnRjdXQ6ICJDbWQrMCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlc2V0IHpvb20iKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlRvZ2dsZSBTaWRlYmFyIiwgc2hvcnRjdXQ6ICJDbWQrQiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBzaWRlYmFyIikgfSwKICAgICAgICB7IG5hbWU6ICJUb2dnbGUgVGVybWluYWwiLCBzaG9ydGN1dDogIkNtZCtKIiwgaWNvbk5hbWU6ICJ0ZXJtaW5hbCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSB0ZXJtaW5hbCIpIH0KICAgICAgXQogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkhlbHAiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgfSwKICAgICAgLy8gTm8tb3AgYWN0aW9uIGZvciBtZW51IHdpdGggc3VibWVudQogICAgICBzdWJtZW51OiBbCiAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3VtZW50YXRpb24iKSB9LAogICAgICAgIHsgbmFtZTogIlJlbGVhc2UgTm90ZXMiLCBpY29uTmFtZTogImZpbGUtdGV4dCIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlJlbGVhc2Ugbm90ZXMiKSB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsgbmFtZTogIlJlcG9ydCBJc3N1ZSIsIGljb25OYW1lOiAiYnVnIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0IGlzc3VlIikgfSwKICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICBdCiAgICB9CiAgXTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3QgYXBwYmFyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjYXBwYmFyIik7CiAgICBjb25zdCBzdGF0dXNCdXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIuc3RhdHVzLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgc3RhdHVzQnV0dG9uc1swXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJvbmxpbmUiIH07CiAgICB9KTsKICAgIHN0YXR1c0J1dHRvbnNbMV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci51c2VyID0geyAuLi5hcHBiYXIudXNlciwgc3RhdHVzOiAiYnVzeSIgfTsKICAgIH0pOwogICAgc3RhdHVzQnV0dG9uc1syXS5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgYXBwYmFyLnVzZXIgPSB7IC4uLmFwcGJhci51c2VyLCBzdGF0dXM6ICJhd2F5IiB9OwogICAgfSk7CiAgICBzdGF0dXNCdXR0b25zWzNdLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBhcHBiYXIudXNlciA9IHsgLi4uYXBwYmFyLnVzZXIsIHN0YXR1czogIm9mZmxpbmUiIH07CiAgICB9KTsKICAgIGNvbnN0IHdpbmRvd0NvbnRyb2xzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIud2luZG93LWNvbnRyb2xzLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgd2luZG93Q29udHJvbHNCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5zaG93V2luZG93Q29udHJvbHMgPSAhYXBwYmFyLnNob3dXaW5kb3dDb250cm9sczsKICAgIH0pOwogICAgY29uc3QgYnJlYWRjcnVtYkJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi5icmVhZGNydW1iLXRvZ2dsZSBkZWVzLWJ1dHRvbiIpOwogICAgYnJlYWRjcnVtYkJ1dHRvbnNbMF0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5icmVhZGNydW1icyA9ICJIb21lID4gRG9jdW1lbnRzID4gUHJvamVjdHMgPiBNeUFwcCA+IHNyYyA+IGluZGV4LnRzIjsKICAgIH0pOwogICAgYnJlYWRjcnVtYkJ1dHRvbnNbMV0uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGFwcGJhci5icmVhZGNydW1icyA9ICJEYXNoYm9hcmQiOwogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGhlaWdodDogNjAwcHg7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRlbnQgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbnRyb2xzIHsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29udHJvbC1ncm91cCBsYWJlbCB7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIGlkPSJhcHBiYXIiCiAgICAgICAgLm1lbnVJdGVtcz0ke21lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHsiUHJvamVjdCA+IHNyYyA+IGNvbXBvbmVudHMgPiBBcHBCYXIudHMifQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7IiA+ICJ9CiAgICAgICAgLnNob3dXaW5kb3dDb250cm9scz0ke3RydWV9CiAgICAgICAgLnNob3dTZWFyY2g9JHt0cnVlfQogICAgICAgIC50aGVtZT0keyJkYXJrIn0KICAgICAgICAudXNlcj0ke3sKICAgIG5hbWU6ICJKb2huIERvZSIsCiAgICBzdGF0dXM6ICJvbmxpbmUiCiAgfX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTWVudSBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsLml0ZW0pfQogICAgICAgIEBicmVhZGNydW1iLW5hdmlnYXRlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkJyZWFkY3J1bWIgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgICBAc2VhcmNoLWNsaWNrPSR7KCkgPT4gY29uc29sZS5sb2coIlNlYXJjaCBjbGlja2VkIil9CiAgICAgICAgQHVzZXItbWVudS1vcGVuPSR7KCkgPT4gY29uc29sZS5sb2coIlVzZXIgbWVudSBjbGlja2VkIil9CiAgICAgID48L2RlZXMtYXBwdWktYXBwYmFyPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgPGgyPkFwcCBCYXIgRGVtbzwvaDI+CiAgICAgICAgPHA+VGhpcyBkZW1vIHNob3dzIHZhcmlvdXMgZmVhdHVyZXMgb2YgdGhlIGFwcCBiYXIgY29tcG9uZW50OjwvcD4KICAgICAgICA8dWw+CiAgICAgICAgICA8bGk+RHluYW1pYyBtZW51IGl0ZW1zIHdpdGggaWNvbnMsIHNob3J0Y3V0cywgYW5kIHN1Ym1lbnVzPC9saT4KICAgICAgICAgIDxsaT5CcmVhZGNydW1iIG5hdmlnYXRpb248L2xpPgogICAgICAgICAgPGxpPlVzZXIgYWNjb3VudCBzZWN0aW9uIHdpdGggc3RhdHVzIGluZGljYXRvcjwvbGk+CiAgICAgICAgICA8bGk+U2VhcmNoIGljb248L2xpPgogICAgICAgICAgPGxpPldpbmRvdyBjb250cm9scyAocGxhdGZvcm0tc3BlY2lmaWMpPC9saT4KICAgICAgICAgIDxsaT5EYXJrL2xpZ2h0IHRoZW1lIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPktleWJvYXJkIG5hdmlnYXRpb24gKFRhYiwgRW50ZXIsIEVzY2FwZSk8L2xpPgogICAgICAgICAgPGxpPkN1c3RvbSBldmVudHMgZm9yIGFsbCBpbnRlcmFjdGlvbnM8L2xpPgogICAgICAgIDwvdWw+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2wtZ3JvdXAiPgogICAgICAgICAgPGxhYmVsPlRoZW1lPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0idGhlbWUtdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhcms8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TGlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5Vc2VyIFN0YXR1czwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9InN0YXR1cy10b2dnbGUiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+T25saW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkJ1c3k8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QXdheTwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PZmZsaW5lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbC1ncm91cCI+CiAgICAgICAgICA8bGFiZWw+V2luZG93IENvbnRyb2xzPC9sYWJlbD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBjbGFzcz0id2luZG93LWNvbnRyb2xzLXRvZ2dsZSI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Ub2dnbGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sLWdyb3VwIj4KICAgICAgICAgIDxsYWJlbD5CcmVhZGNydW1iczwvbGFiZWw+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgY2xhc3M9ImJyZWFkY3J1bWItdG9nZ2xlIj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkxvbmcgUGF0aDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TaG9ydCBQYXRoPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGFwcHVpQXBwYmFyU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgLyogQ1NTIFZhcmlhYmxlcyBmb3IgdGhlbWluZyAqLwogICAgICAgIC0tYXBwYmFyLWhlaWdodDogNDBweDsKICAgICAgICAtLWFwcGJhci1mb250LXNpemU6IDEycHg7CiAgICAgICAgCiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogdmFyKC0tYXBwYmFyLWhlaWdodCk7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS1hcHBiYXItZm9udC1zaXplKTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnIgYXV0bzsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IGRyYWc7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tZW51cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAtd2Via2l0LWFwcC1yZWdpb246IG5vLWRyYWc7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbmFsOiBTdHlsZSBmb3IgbWVudSBpdGVtcyB3aXRoIGljb25zIChub3QgdHlwaWNhbGx5IHVzZWQgZm9yIHRvcC1sZXZlbCBpdGVtcykgKi8KICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDEwIiwgIiNmZmZmZmYyMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAyMCIsICIjZmZmZmZmMzAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwODAiLCAiI2ZmZmZmZjgwIil9OwogICAgICB9CgoKICAgICAgLyogRHJvcGRvd24gc3R5bGVzICovCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwgIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24ub3BlbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgIH0KCiAgICAgIC5kcm9wZG93bi1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLWl0ZW06aG92ZXIsCiAgICAgIC5kcm9wZG93bi1pdGVtLmZvY3VzZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAuZHJvcGRvd24tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzIwMjAyMCIpfTsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbVtkaXNhYmxlZF0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAuZHJvcGRvd24taXRlbSAuc2hvcnRjdXQgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIH0KCiAgICAgIC8qIEJyZWFkY3J1bWJzICovCiAgICAgIC5icmVhZGNydW1icyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1pdGVtIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDA4MCIsICIjZmZmZmZmODAiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYnJlYWRjcnVtYi1zZXBhcmF0b3IgewogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBBY2NvdW50IHNlY3Rpb24gKi8KICAgICAgLmFjY291bnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbiB7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtaWNvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnVzZXItaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMnM7CiAgICAgIH0KCiAgICAgIC51c2VyLWluZm86aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTAiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMjAiLCAiI2ZmZmZmZjMwIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogLTJweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub25saW5lIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNGNhZjUwOwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMub2ZmbGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzc1NzU3NTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLmJ1c3kgewogICAgICAgIGJhY2tncm91bmQ6ICNmNDQzMzY7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5hd2F5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY5ODAwOwogICAgICB9CgogICAgICAvKiBBY3Rpdml0eSBsb2cgdG9nZ2xlIGJ1dHRvbiAqLwogICAgICAuYWN0aXZpdHktdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgLXdlYmtpdC1hcHAtcmVnaW9uOiBuby1kcmFnOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDYwIiwgIiNmZmZmZmY2MCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAxMCIsICIjZmZmZmZmMTUiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmFjdGl2aXR5LXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS10b2dnbGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpdml0eS1iYWRnZSB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBwYWRkaW5nOiAwIDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjNTI1MjUyIil9OwogICAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWFwcGJhci90ZW1wbGF0ZS5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmVuZGVyQXBwdWlBcHBiYXIgPSAoY29tcG9uZW50KSA9PiB7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVzIj4KICAgICAgICAgICR7Y29tcG9uZW50LnNob3dXaW5kb3dDb250cm9scyA/IGIyYDxkZWVzLXdpbmRvd2NvbnRyb2xzPjwvZGVlcy13aW5kb3djb250cm9scz5gIDogIiJ9CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJNZW51SXRlbXMoKX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJicmVhZGNydW1icyI+CiAgICAgICAgICAke2NvbXBvbmVudC5yZW5kZXJCcmVhZGNydW1icygpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjY291bnQiPgogICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyQWNjb3VudFNlY3Rpb24oKX0KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy13aW5kb3djb250cm9scy9kZWVzLXdpbmRvd2NvbnRyb2xzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXaW5kb3dDb250cm9scyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd2luZG93Y29udHJvbHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dpbmRvd0NvbnRyb2xzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOCh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV2luZG93Q29udHJvbHMyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13aW5kb3djb250cm9scz48L2RlZXMtd2luZG93Y29udHJvbHM+YDsKICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibWFjIik7CiAgICAvLyBJbnN0YW5jZQogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM5KHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IHBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxNnB4OwogICAgICAgIHBhZGRpbmctcmlnaHQ6IDE2cHg7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53aW5kb3dDb250cm9scyBkaXYgewogICAgICAgIHdpZHRoOiAxMnB4OwogICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIG1hcmdpbjogMHB4OwogICAgICAgIHBhZGRpbmc6IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMjIyMjIyOwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2LmNsb3NlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZmY1ZjU3OwogICAgICAgIG1hcmdpbi1yaWdodDogMTJweDsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdi50b0RvY2sgewogICAgICAgIGJhY2tncm91bmQ6ICNmZmJkMmU7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAxMnB4OwogICAgICB9CgogICAgICAud2luZG93Q29udHJvbHMgZGl2Lm1pbk1heCB7CiAgICAgICAgYmFja2dyb3VuZDogIzI3YzkzZjsKICAgICAgfQoKICAgICAgLndpbmRvd0NvbnRyb2xzIGRpdjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzMzMzMzMzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMudHlwZSA9PT0gIm1hYyIgJiYgdGhpcy5wb3NpdGlvbiA9PT0gImxlZnQiIHx8ICh0aGlzLnR5cGUgPT09ICJsaW51eCIgfHwgdGhpcy50eXBlID09PSAid2luZG93cyIpICYmIHRoaXMucG9zaXRpb24gPT09ICJyaWdodCIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0id2luZG93Q29udHJvbHMiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNsb3NlIj48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b0RvY2siPjwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1pbk1heCI+PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IGIyYGB9CiAgICBgOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzOSh0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV2luZG93Q29udHJvbHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bi9kZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bi5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF91c2VyX2RlY29yYXRvcnM7CiAgbGV0IF91c2VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdXNlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3Blbl9kZWNvcmF0b3JzOwogIGxldCBfaXNPcGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdXNlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX21lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX3Bvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF91c2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91c2VyX2luaXRpYWxpemVycywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU5KHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkodGhpcywgbnVsbCwgX2lzT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc09wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc09wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5faW5pdGlhbGl6ZXJzLCBfaXNPcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlOSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlQcm9maWxlRHJvcGRvd24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24KICAgICAgLnVzZXI9JHt7CiAgICAgIG5hbWU6ICJKb2huIERvZSIsCiAgICAgIGVtYWlsOiAiam9obi5kb2VAZXhhbXBsZS5jb20iLAogICAgICBhdmF0YXI6ICJodHRwczovL3JhbmRvbXVzZXIubWUvYXBpL3BvcnRyYWl0cy9tZW4vMS5qcGciLAogICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICB9fQogICAgICAubWVudUl0ZW1zPSR7WwogICAgICB7IG5hbWU6ICJQcm9maWxlIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgIHsgbmFtZTogIkFjY291bnQiLCBpY29uTmFtZTogInNldHRpbmdzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQWNjb3VudCIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJIZWxwICYgU3VwcG9ydCIsIGljb25OYW1lOiAiaGVscENpcmNsZSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkhlbHAiKSB9LAogICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrSyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICBdfQogICAgICAuaXNPcGVuPSR7dHJ1ZX0KICAgID48L2RlZXMtYXBwdWktcHJvZmlsZWRyb3Bkb3duPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfdXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICBnZXQgdXNlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VzZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB1c2VyKHZhbHVlMikgewogICAgICB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfdXNlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTAodGhpcywgX21lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgbWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9pc09wZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3Blbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNPcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9pc09wZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEwKHRoaXMsIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AtcmlnaHQiKSk7CiAgICBnZXQgcG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG1pbi13aWR0aDogMjIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpIiwgIjAgNHB4IDEycHggcmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLm92ZXJsYXkuZHJvcGRvd259OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKC0xMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMsIHRyYW5zZm9ybSAwLjJzOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICA6aG9zdChbaXNvcGVuXSkgLmRyb3Bkb3duIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgfQogICAgICAKICAgICAgLmJhY2tkcm9wIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBQb3NpdGlvbiB2YXJpYW50cyAqLwogICAgICAuZHJvcGRvd24udG9wLXJpZ2h0IHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICB9CgogICAgICAuZHJvcGRvd24udG9wLWxlZnQgewogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLmJvdHRvbS1yaWdodCB7CiAgICAgICAgYm90dG9tOiAxMDAlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLmRyb3Bkb3duLmJvdHRvbS1sZWZ0IHsKICAgICAgICBib3R0b206IDEwMCU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFVzZXIgc2VjdGlvbiAqLwogICAgICAudXNlci1zZWN0aW9uIHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICB9CgogICAgICAudXNlci1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICB9CgogICAgICAudXNlci1hdmF0YXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMzZweDsKICAgICAgICBoZWlnaHQ6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC51c2VyLWF2YXRhciBpbWcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9ubGluZSB7CiAgICAgICAgYmFja2dyb3VuZDogIzRjYWY1MDsKICAgICAgfQoKICAgICAgLnVzZXItc3RhdHVzLm9mZmxpbmUgewogICAgICAgIGJhY2tncm91bmQ6ICM3NTc1NzU7CiAgICAgIH0KCiAgICAgIC51c2VyLXN0YXR1cy5idXN5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjQ0MzM2OwogICAgICB9CgogICAgICAudXNlci1zdGF0dXMuYXdheSB7CiAgICAgICAgYmFja2dyb3VuZDogI2ZmOTgwMDsKICAgICAgfQoKICAgICAgLnVzZXItZGV0YWlscyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC51c2VyLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnVzZXItZW1haWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICB9CgogICAgICAvKiBNZW51IHNlY3Rpb24gKi8KICAgICAgLm1lbnUtc2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjY2NjIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNCkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLm1lbnUtaXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xMikiKX07CiAgICAgIH0KCiAgICAgIC5tZW51LWl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5tZW51LXNob3J0Y3V0IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAubWVudS1kaXZpZGVyIHsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMjAyMDIwIil9OwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KCiAgICAgIC8qIEJhY2tkcm9wIGZvciBtb2JpbGUgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLmJhY2tkcm9wIHsKICAgICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICAgIHRvcDogMDsKICAgICAgICAgIGxlZnQ6IDA7CiAgICAgICAgICByaWdodDogMDsKICAgICAgICAgIGJvdHRvbTogMDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmJhY2tkcm9wLmRyb3Bkb3dufTsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2lzb3Blbl0pIC5iYWNrZHJvcCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICBwb2ludGVyLWV2ZW50czogYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kcm9wZG93biB7CiAgICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgICB0b3A6IDUwJTsKICAgICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICAgIHJpZ2h0OiBhdXRvOwogICAgICAgICAgYm90dG9tOiBhdXRvOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSkgc2NhbGUoMC45NSk7CiAgICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSAzMnB4KTsKICAgICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2lzb3Blbl0pIC5kcm9wZG93biB7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKSBzY2FsZSgxKTsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYmFja2Ryb3AiIEBjbGljaz0keygpID0+IHRoaXMuY2xvc2UoKX0+PC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRyb3Bkb3duICR7dGhpcy5wb3NpdGlvbn0iPgogICAgICAgICR7dGhpcy51c2VyID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLXNlY3Rpb24iPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItYXZhdGFyIj4KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhciA/IGIyYDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gIDogdGhpcy5nZXRJbml0aWFscyh0aGlzLnVzZXIubmFtZSl9CiAgICAgICAgICAgICAgICAke3RoaXMudXNlci5zdGF0dXMgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1kZXRhaWxzIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItbmFtZSI+JHt0aGlzLnVzZXIubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgICR7dGhpcy51c2VyLmVtYWlsID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InVzZXItZW1haWwiPiR7dGhpcy51c2VyLmVtYWlsfTwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LXNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLm1lbnVJdGVtcy5tYXAoKGl0ZW0pID0+IHRoaXMucmVuZGVyTWVudUl0ZW0oaXRlbSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNZW51SXRlbShpdGVtKSB7CiAgICAgIGlmICgiZGl2aWRlciIgaW4gaXRlbSAmJiBpdGVtLmRpdmlkZXIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibWVudS1kaXZpZGVyIj48L2Rpdj5gOwogICAgICB9CiAgICAgIGNvbnN0IG1lbnVJdGVtID0gaXRlbTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51LWl0ZW0iIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlTWVudUNsaWNrKG1lbnVJdGVtKX0+CiAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0ibWVudS1pdGVtLXRleHQiPiR7bWVudUl0ZW0ubmFtZX08L3NwYW4+CiAgICAgICAgJHttZW51SXRlbS5zaG9ydGN1dCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9Im1lbnUtc2hvcnRjdXQiPiR7bWVudUl0ZW0uc2hvcnRjdXR9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5pdGlhbHMobmFtZSkgewogICAgICByZXR1cm4gbmFtZS5zcGxpdCgiICIpLm1hcCgocGFydCkgPT4gcGFydFswXSkuam9pbigiIikudG9VcHBlckNhc2UoKS5zbGljZSgwLCAyKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZU1lbnVDbGljayhpdGVtKSB7CiAgICAgIGF3YWl0IGl0ZW0uYWN0aW9uKCk7CiAgICAgIHRoaXMuY2xvc2UoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIG9wZW4oKSB7CiAgICAgIHRoaXMuaXNPcGVuID0gdHJ1ZTsKICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLmlzT3BlbiA9IGZhbHNlOwogICAgfQogICAgdG9nZ2xlKCkgewogICAgICB0aGlzLmlzT3BlbiA9ICF0aGlzLmlzT3BlbjsKICAgIH0KICAgIC8vIEhhbmRsZSBjbGlja3Mgb3V0c2lkZSB0aGUgZHJvcGRvd24KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmhhbmRsZU91dHNpZGVDbGljayA9IHRoaXMuaGFuZGxlT3V0c2lkZUNsaWNrLmJpbmQodGhpcyk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVPdXRzaWRlQ2xpY2spOwogICAgfQogICAgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLmlzT3BlbiAmJiAhdGhpcy5jb250YWlucyhldmVudC50YXJnZXQpKSB7CiAgICAgICAgY29uc3QgcGFyZW50RWxlbWVudCA9IHRoaXMucGFyZW50RWxlbWVudDsKICAgICAgICBpZiAocGFyZW50RWxlbWVudCAmJiBwYXJlbnRFbGVtZW50LmNvbnRhaW5zKGV2ZW50LnRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdGhpcy5jbG9zZSgpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMCh0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpUHJvZmlsZURyb3Bkb3duMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1hcHBiYXIvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxMCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUJhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYXBwYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJzX2RlY29yYXRvcnM7CiAgbGV0IF9icmVhZGNydW1ic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9icmVhZGNydW1iU2VwYXJhdG9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93V2luZG93Q29udHJvbHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3VzZXJfZGVjb3JhdG9yczsKICBsZXQgX3VzZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9maWxlTWVudUl0ZW1zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJvZmlsZU1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1NlYXJjaF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NlYXJjaF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dBY3RpdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZU1lbnVfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZU1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVNZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3BlbkRyb3Bkb3duc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX2ZvY3VzZWREcm9wZG93bkl0ZW1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlCYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9icmVhZGNydW1ic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdXNlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX3Byb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Nob3dTZWFyY2hfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ0FjdGl2ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9hY3RpdmVNZW51X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vcGVuRHJvcGRvd25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9mb2N1c2VkSXRlbV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9tZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9icmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJicmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2JyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5icmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5icmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9zaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX3Nob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF91c2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91c2VyX2luaXRpYWxpemVycywgX3VzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfcHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9wcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX3Nob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfc2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0FjdGl2aXR5TG9nVG9nZ2xlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93QWN0aXZpdHlMb2dUb2dnbGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0FjdGl2aXR5TG9nVG9nZ2xlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93QWN0aXZpdHlMb2dUb2dnbGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycywgX3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2aXR5TG9nQ291bnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nQ291bnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlMb2dDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZpdHlMb2dDb3VudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5TG9nQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfYWN0aXZpdHlMb2dBY3RpdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dBY3RpdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nQWN0aXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjdGl2aXR5TG9nQWN0aXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0FjdGl2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ0FjdGl2ZV9pbml0aWFsaXplcnMsIF9hY3Rpdml0eUxvZ0FjdGl2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEwKHRoaXMsIG51bGwsIF9hY3RpdmVNZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZU1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZU1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlTWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlTWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVNZW51X2luaXRpYWxpemVycywgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfb3BlbkRyb3Bkb3duc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvcGVuRHJvcGRvd25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRHJvcGRvd25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm9wZW5Ecm9wZG93bnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm9wZW5Ecm9wZG93bnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkRyb3Bkb3duc19pbml0aWFsaXplcnMsIF9vcGVuRHJvcGRvd25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2ZvY3VzZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZvY3VzZWRJdGVtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmb2N1c2VkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5mb2N1c2VkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZm9jdXNlZEl0ZW0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZm9jdXNlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMCh0aGlzLCBudWxsLCBfZm9jdXNlZERyb3Bkb3duSXRlbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmb2N1c2VkRHJvcGRvd25JdGVtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmb2N1c2VkRHJvcGRvd25JdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvY3VzZWREcm9wZG93bkl0ZW0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZvY3VzZWREcm9wZG93bkl0ZW0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZm9jdXNlZERyb3Bkb3duSXRlbV9pbml0aWFsaXplcnMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAodGhpcywgbnVsbCwgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Byb2ZpbGVEcm9wZG93bk9wZW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzUHJvZmlsZURyb3Bkb3duT3BlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Byb2ZpbGVEcm9wZG93bk9wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1Byb2ZpbGVEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlCYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UgUFJPUEVSVElFUwogICAgZ2V0IG1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9tZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9icmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNicmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9icmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNicmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2JyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1c2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfc2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfdXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN1c2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jdXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF91c2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfcHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgcHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNwcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX3Byb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93QWN0aXZpdHlMb2dUb2dnbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93U2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfc2hvd0FjdGl2aXR5TG9nVG9nZ2xlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIEFjdGl2aXR5IGxvZyB0b2dnbGUKICAgIGdldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93QWN0aXZpdHlMb2dUb2dnbGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93QWN0aXZpdHlMb2dUb2dnbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dBY3Rpdml0eUxvZ1RvZ2dsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9zaG93QWN0aXZpdHlMb2dUb2dnbGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGFjdGl2aXR5TG9nQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQWN0aXZlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhY3Rpdml0eUxvZ0FjdGl2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dBY3RpdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQWN0aXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZlTWVudV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2aXR5TG9nQWN0aXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfYWN0aXZlTWVudV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIC8vIFNUQVRFCiAgICBnZXQgYWN0aXZlTWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjdGl2ZU1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVNZW51KHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVNZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbkRyb3Bkb3duc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2FjdGl2ZU1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9vcGVuRHJvcGRvd25zX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgZ2V0IG9wZW5Ecm9wZG93bnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRHJvcGRvd25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3BlbkRyb3Bkb3ducyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3BlbkRyb3Bkb3duc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZvY3VzZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfb3BlbkRyb3Bkb3duc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2ZvY3VzZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGZvY3VzZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmb2N1c2VkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZm9jdXNlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmb2N1c2VkRHJvcGRvd25JdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfZm9jdXNlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBmb2N1c2VkRHJvcGRvd25JdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jZm9jdXNlZERyb3Bkb3duSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvY3VzZWREcm9wZG93bkl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZvY3VzZWREcm9wZG93bkl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Byb2ZpbGVEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczExKHRoaXMsIF9mb2N1c2VkRHJvcGRvd25JdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMSh0aGlzLCBfaXNQcm9maWxlRHJvcGRvd25PcGVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2ZpbGVEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2ZpbGVEcm9wZG93bk9wZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvZmlsZURyb3Bkb3duT3Blbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGFwcHVpQXBwYmFyU3R5bGVzOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckFwcHVpQXBwYmFyKHRoaXMpOwogICAgfQogICAgcmVuZGVyTWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tZW51SXRlbXMubWFwKChpdGVtLCBpbmRleDIpID0+IHRoaXMucmVuZGVyTWVudUl0ZW0oaXRlbSwgYG1lbnUtJHtpbmRleDJ9YCkpfQogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVJdGVtKGl0ZW0sIGl0ZW1JZCkgewogICAgICBpZiAoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICBjb25zdCBpc0FjdGl2ZSA9IHRoaXMuYWN0aXZlTWVudSA9PT0gaXRlbUlkOwogICAgICBjb25zdCBoYXNTdWJtZW51ID0gbWVudUl0ZW0uc3VibWVudSAmJiBtZW51SXRlbS5zdWJtZW51Lmxlbmd0aCA+IDA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSAke2lzQWN0aXZlID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7bWVudUl0ZW0uZGlzYWJsZWR9CiAgICAgICAgdGFiaW5kZXg9IiR7bWVudUl0ZW0uZGlzYWJsZWQgPyAtMSA6IDB9IgogICAgICAgIGRhdGEtaXRlbS1pZD0iJHtpdGVtSWR9IgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlTWVudUNsaWNrKG1lbnVJdGVtLCBpdGVtSWQpfQogICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVNZW51S2V5ZG93bihlMTEsIG1lbnVJdGVtLCBpdGVtSWQpfQogICAgICAgIHJvbGU9Im1lbnVpdGVtIgogICAgICAgIGFyaWEtaGFzcG9wdXA9IiR7aGFzU3VibWVudX0iCiAgICAgICAgYXJpYS1leHBhbmRlZD0iJHtpc0FjdGl2ZX0iCiAgICAgID4KICAgICAgICAke21lbnVJdGVtLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHtgbHVjaWRlOiR7bWVudUl0ZW0uaWNvbk5hbWV9YH0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAke21lbnVJdGVtLm5hbWV9CiAgICAgICAgJHtoYXNTdWJtZW51ID8gdGhpcy5yZW5kZXJEcm9wZG93bihtZW51SXRlbS5zdWJtZW51LCBpdGVtSWQsIGlzQWN0aXZlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJEcm9wZG93bihpdGVtcywgcGFyZW50SWQsIGlzT3BlbikgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImRyb3Bkb3duICR7aXNPcGVuID8gIm9wZW4iIDogIiJ9IiAKICAgICAgICBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9CiAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiB0aGlzLmhhbmRsZURyb3Bkb3duS2V5ZG93bihlMTEsIGl0ZW1zLCBwYXJlbnRJZCl9CiAgICAgICAgdGFiaW5kZXg9IiR7aXNPcGVuID8gMCA6IC0xfSIKICAgICAgICByb2xlPSJtZW51IgogICAgICA+CiAgICAgICAgJHtpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gdGhpcy5yZW5kZXJEcm9wZG93bkl0ZW0oaXRlbSwgYCR7cGFyZW50SWR9LSR7aW5kZXgyfWApKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRHJvcGRvd25JdGVtKGl0ZW0sIGl0ZW1JZCkgewogICAgICBpZiAoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImRyb3Bkb3duLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgbWVudUl0ZW0gPSBpdGVtOwogICAgICBjb25zdCBpdGVtSW5kZXggPSBwYXJzZUludChpdGVtSWQuc3BsaXQoIi0iKS5wb3AoKSB8fCAiMCIpOwogICAgICBjb25zdCBpc0ZvY3VzZWQgPSB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPT09IGl0ZW1JbmRleDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImRyb3Bkb3duLWl0ZW0gJHtpc0ZvY3VzZWQgPyAiZm9jdXNlZCIgOiAiIn0iCiAgICAgICAgP2Rpc2FibGVkPSR7bWVudUl0ZW0uZGlzYWJsZWR9CiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhtZW51SXRlbSl9CiAgICAgICAgQG1vdXNlZW50ZXI9JHsoKSA9PiB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBpdGVtSW5kZXh9CiAgICAgICAgcm9sZT0ibWVudWl0ZW0iCiAgICAgICAgdGFiaW5kZXg9IiR7bWVudUl0ZW0uZGlzYWJsZWQgPyAtMSA6IDB9IgogICAgICA+CiAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7YGx1Y2lkZToke21lbnVJdGVtLmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgPHNwYW4+JHttZW51SXRlbS5uYW1lfTwvc3Bhbj4KICAgICAgICAke21lbnVJdGVtLnNob3J0Y3V0ID8gYjJgPHNwYW4gY2xhc3M9InNob3J0Y3V0Ij4ke21lbnVJdGVtLnNob3J0Y3V0fTwvc3Bhbj5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckJyZWFkY3J1bWJzKCkgewogICAgICBpZiAoIXRoaXMuYnJlYWRjcnVtYnMpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCBwYXJ0cyA9IHRoaXMuYnJlYWRjcnVtYnMuc3BsaXQodGhpcy5icmVhZGNydW1iU2VwYXJhdG9yKTsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3BhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAke2luZGV4MiA+IDAgPyBiMmA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPiR7dGhpcy5icmVhZGNydW1iU2VwYXJhdG9yfTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPHNwYW4gCiAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIiAKICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQnJlYWRjcnVtYkNsaWNrKHBhcnQsIGluZGV4Mil9CiAgICAgICAgPgogICAgICAgICAgJHtwYXJ0fQogICAgICAgIDwvc3Bhbj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyQWNjb3VudFNlY3Rpb24oKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLnNob3dTZWFyY2ggPyBiMmAKICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICBjbGFzcz0ic2VhcmNoLWljb24iCiAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6c2VhcmNoIn0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2VhcmNoQ2xpY2t9CiAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICBgIDogIiJ9CiAgICAgICR7dGhpcy51c2VyID8gYjJgCiAgICAgICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlOyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ1c2VyLWluZm8iIEBjbGljaz0ke3RoaXMuaGFuZGxlVXNlckNsaWNrfT4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1hdmF0YXIiPgogICAgICAgICAgICAgICR7dGhpcy51c2VyLmF2YXRhciA/IGIyYDxpbWcgc3JjPSIke3RoaXMudXNlci5hdmF0YXJ9IiBhbHQ9IiR7dGhpcy51c2VyLm5hbWV9Ij5gIDogYjJgJHt0aGlzLnVzZXIubmFtZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKX1gfQogICAgICAgICAgICAgICR7dGhpcy51c2VyLnN0YXR1cyA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idXNlci1zdGF0dXMgJHt0aGlzLnVzZXIuc3RhdHVzfSI+PC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHNwYW4+JHt0aGlzLnVzZXIubmFtZX08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkZWVzLWFwcHVpLXByb2ZpbGVkcm9wZG93bgogICAgICAgICAgICAudXNlcj0ke3RoaXMudXNlcn0KICAgICAgICAgICAgLm1lbnVJdGVtcz0ke3RoaXMucHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAgICAgLmlzT3Blbj0ke3RoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVufQogICAgICAgICAgICAucG9zaXRpb249JHsidG9wLXJpZ2h0In0KICAgICAgICAgICAgQG1lbnUtc2VsZWN0PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVQcm9maWxlTWVudVNlbGVjdChlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS1wcm9maWxlZHJvcGRvd24+CiAgICAgICAgPC9kaXY+CiAgICAgIGAgOiAiIn0KICAgICAgJHt0aGlzLnNob3dBY3Rpdml0eUxvZ1RvZ2dsZSA/IGIyYAogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJhY3Rpdml0eS10b2dnbGUgJHt0aGlzLmFjdGl2aXR5TG9nQWN0aXZlID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUFjdGl2aXR5VG9nZ2xlfQogICAgICAgICAgdGl0bGU9IkFjdGl2aXR5IExvZyIKICAgICAgICA+CiAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTphY3Rpdml0eSJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgJHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiAwID8gYjJgCiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJhY3Rpdml0eS1iYWRnZSI+JHt0aGlzLmFjdGl2aXR5TG9nQ291bnQgPiA5OSA/ICI5OSsiIDogdGhpcy5hY3Rpdml0eUxvZ0NvdW50fTwvc3Bhbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgYDsKICAgIH0KICAgIC8vIEV2ZW50IGhhbmRsZXJzCiAgICBoYW5kbGVNZW51Q2xpY2soaXRlbSwgaXRlbUlkKSB7CiAgICAgIGlmIChpdGVtLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKGl0ZW0uc3VibWVudSAmJiBpdGVtLnN1Ym1lbnUubGVuZ3RoID4gMCkgewogICAgICAgIGlmICh0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gaXRlbUlkOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgIGlmIChpdGVtLmFjdGlvbikgewogICAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibWVudS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVEcm9wZG93bkl0ZW1DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgaWYgKGl0ZW0uYWN0aW9uKSB7CiAgICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgaXRlbSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWVudUtleWRvd24oZTExLCBpdGVtLCBpdGVtSWQpIHsKICAgICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgICAgY2FzZSAiRW50ZXIiOgogICAgICAgIGNhc2UgIiAiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmhhbmRsZU1lbnVDbGljayhpdGVtLCBpdGVtSWQpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQXJyb3dEb3duIjoKICAgICAgICAgIGlmIChpdGVtLnN1Ym1lbnUgJiYgdGhpcy5hY3RpdmVNZW51ID09PSBpdGVtSWQpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IDA7CiAgICAgICAgICAgIGNvbnN0IGZpcnN0VmFsaWRJdGVtID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtLnN1Ym1lbnUsIC0xLCAxKTsKICAgICAgICAgICAgaWYgKGZpcnN0VmFsaWRJdGVtICE9PSAtMSkgewogICAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGZpcnN0VmFsaWRJdGVtOwogICAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgICAgY29uc3QgZHJvcGRvd24gPSB0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvcigiLmRyb3Bkb3duLm9wZW4iKTsKICAgICAgICAgICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgICAgICAgICBkcm9wZG93bi5mb2N1cygpOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIDApOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFc2NhcGUiOgogICAgICAgICAgdGhpcy5hY3RpdmVNZW51ID0gbnVsbDsKICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IC0xOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiVGFiIjoKICAgICAgICAgIGlmICh0aGlzLmFjdGl2ZU1lbnUgPT09IGl0ZW1JZCkgewogICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKGl0ZW1JZCwgMSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd0xlZnQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmZvY3VzTmV4dE1lbnVJdGVtKGl0ZW1JZCwgLTEpOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUJyZWFkY3J1bWJDbGljayhicmVhZGNydW1iLCBpbmRleDIpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYnJlYWRjcnVtYi1uYXZpZ2F0ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgYnJlYWRjcnVtYiwgaW5kZXg6IGluZGV4MiB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2VhcmNoQ2xpY2soKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jbGljayIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFjdGl2aXR5VG9nZ2xlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhY3Rpdml0eS10b2dnbGUiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVVc2VyQ2xpY2soKSB7CiAgICAgIHRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuID0gIXRoaXMuaXNQcm9maWxlRHJvcGRvd25PcGVuOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ1c2VyLW1lbnUtb3BlbiIsIHsKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVByb2ZpbGVNZW51U2VsZWN0KGUxMSkgewogICAgICB0aGlzLmlzUHJvZmlsZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJwcm9maWxlLW1lbnUtc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIC8vIExpZmVjeWNsZQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUdsb2JhbENsaWNrKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZURvY3VtZW50Q2xpY2spOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVEb2N1bWVudENsaWNrKTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbENsaWNrID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTEodGhpcywgX2lzUHJvZmlsZURyb3Bkb3duT3Blbl9leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfSk7CiAgICBoYW5kbGVEb2N1bWVudENsaWNrID0gKCkgPT4gewogICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgIH07CiAgICBoYW5kbGVEcm9wZG93bktleWRvd24oZTExLCBpdGVtcywgX3BhcmVudElkKSB7CiAgICAgIGNvbnN0IHZhbGlkSXRlbXMgPSBpdGVtcy5maWx0ZXIoKGl0ZW0pID0+ICEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSk7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5leHRJbmRleCA9IHRoaXMuZmluZE5leHRWYWxpZEl0ZW0oaXRlbXMsIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSwgMSk7CiAgICAgICAgICBpZiAobmV4dEluZGV4ICE9PSAtMSkgewogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBuZXh0SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgY29uc3QgcHJldkluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgdGhpcy5mb2N1c2VkRHJvcGRvd25JdGVtLCAtMSk7CiAgICAgICAgICBpZiAocHJldkluZGV4ICE9PSAtMSkgewogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSBwcmV2SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGlmICh0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gIT09IC0xKSB7CiAgICAgICAgICAgIGNvbnN0IGZvY3VzZWRJdGVtID0gdmFsaWRJdGVtc1t0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW1dOwogICAgICAgICAgICBpZiAoZm9jdXNlZEl0ZW0gJiYgImFjdGlvbiIgaW4gZm9jdXNlZEl0ZW0gJiYgIWZvY3VzZWRJdGVtLmRpc2FibGVkKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVEcm9wZG93bkl0ZW1DbGljayhmb2N1c2VkSXRlbSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkhvbWUiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBmaXJzdEluZGV4ID0gdGhpcy5maW5kTmV4dFZhbGlkSXRlbShpdGVtcywgLTEsIDEpOwogICAgICAgICAgaWYgKGZpcnN0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGZpcnN0SW5kZXg7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbmQiOgogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBjb25zdCBsYXN0SW5kZXggPSB0aGlzLmZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCBpdGVtcy5sZW5ndGgsIC0xKTsKICAgICAgICAgIGlmIChsYXN0SW5kZXggIT09IC0xKSB7CiAgICAgICAgICAgIHRoaXMuZm9jdXNlZERyb3Bkb3duSXRlbSA9IGxhc3RJbmRleDsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuYWN0aXZlTWVudSA9IG51bGw7CiAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGhpcy5yZW5kZXJSb290LnF1ZXJ5U2VsZWN0b3IoYC5tZW51SXRlbS5hY3RpdmVgKTsKICAgICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgICBtZW51SXRlbS5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZpbmROZXh0VmFsaWRJdGVtKGl0ZW1zLCBjdXJyZW50SW5kZXgsIGRpcmVjdGlvbikgewogICAgICBsZXQgaW5kZXgyID0gY3VycmVudEluZGV4ICsgZGlyZWN0aW9uOwogICAgICB3aGlsZSAoaW5kZXgyID49IDAgJiYgaW5kZXgyIDwgaXRlbXMubGVuZ3RoKSB7CiAgICAgICAgY29uc3QgaXRlbSA9IGl0ZW1zW2luZGV4Ml07CiAgICAgICAgaWYgKCEoImRpdmlkZXIiIGluIGl0ZW0gJiYgaXRlbS5kaXZpZGVyKSAmJiAhKCJkaXNhYmxlZCIgaW4gaXRlbSAmJiBpdGVtLmRpc2FibGVkKSkgewogICAgICAgICAgcmV0dXJuIGluZGV4MjsKICAgICAgICB9CiAgICAgICAgaW5kZXgyICs9IGRpcmVjdGlvbjsKICAgICAgfQogICAgICByZXR1cm4gLTE7CiAgICB9CiAgICBmb2N1c05leHRNZW51SXRlbShjdXJyZW50SXRlbUlkLCBkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gQXJyYXkuZnJvbSh0aGlzLnJlbmRlclJvb3QucXVlcnlTZWxlY3RvckFsbCgiLm1lbnVJdGVtIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSBtZW51SXRlbXMuZmluZEluZGV4KChpdGVtKSA9PiBpdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWlkIikgPT09IGN1cnJlbnRJdGVtSWQpOwogICAgICBpZiAoY3VycmVudEluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGxldCBuZXh0SW5kZXggPSBjdXJyZW50SW5kZXggKyBkaXJlY3Rpb247CiAgICAgIGlmIChuZXh0SW5kZXggPCAwKSB7CiAgICAgICAgbmV4dEluZGV4ID0gbWVudUl0ZW1zLmxlbmd0aCAtIDE7CiAgICAgIH0gZWxzZSBpZiAobmV4dEluZGV4ID49IG1lbnVJdGVtcy5sZW5ndGgpIHsKICAgICAgICBuZXh0SW5kZXggPSAwOwogICAgICB9CiAgICAgIGxldCBhdHRlbXB0cyA9IDA7CiAgICAgIHdoaWxlIChhdHRlbXB0cyA8IG1lbnVJdGVtcy5sZW5ndGgpIHsKICAgICAgICBjb25zdCBuZXh0SXRlbSA9IG1lbnVJdGVtc1tuZXh0SW5kZXhdOwogICAgICAgIGlmICghbmV4dEl0ZW0uaGFzQXR0cmlidXRlKCJkaXNhYmxlZCIpKSB7CiAgICAgICAgICBuZXh0SXRlbS5mb2N1cygpOwogICAgICAgICAgaWYgKHRoaXMuYWN0aXZlTWVudSkgewogICAgICAgICAgICB0aGlzLmFjdGl2ZU1lbnUgPSBudWxsOwogICAgICAgICAgICB0aGlzLmZvY3VzZWREcm9wZG93bkl0ZW0gPSAtMTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBuZXh0SW5kZXggPSAobmV4dEluZGV4ICsgZGlyZWN0aW9uICsgbWVudUl0ZW1zLmxlbmd0aCkgJSBtZW51SXRlbXMubGVuZ3RoOwogICAgICAgIGF0dGVtcHRzKys7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aUJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktYm90dG9tYmFyL2RlZXMtYXBwdWktYm90dG9tYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hOwp2YXIgZGVtb0Z1bmM1ID0gKCkgPT4gewogIHJldHVybiBiMihfYSB8fCAoX2EgPSBfX3RlbXBsYXRlKFtgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgPHN0eWxlPgogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWExYTFhOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tbGFiZWwgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICM3MzczNzM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIH0KCiAgICAgICAgLmRlbW8tYm90dG9tYmFyLXdyYXBwZXIgewogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgaHNsKDAgMCUgMjAlKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbGFiZWwiPkJvdHRvbSBiYXIgd2l0aCBzdGF0dXMgd2lkZ2V0cyBhbmQgYWN0aW9uczwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ib3R0b21iYXItd3JhcHBlciI+CiAgICAgICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcgogICAgICAgICAgICAgIGlkPSJkZW1vLWJvdHRvbWJhciIKICAgICAgICAgICAgPjwvZGVlcy1hcHB1aS1ib3R0b21iYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbGFiZWwiPkNvbnRyb2xzPC9kaXY+CiAgICAgICAgICA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBnYXA6IDhweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICAgIDxidXR0b24gb25jbGljaz0iYWRkU3VjY2Vzc1dpZGdldCgpIj5BZGQgU3VjY2VzcyBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRXYXJuaW5nV2lkZ2V0KCkiPkFkZCBXYXJuaW5nIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZEVycm9yV2lkZ2V0KCkiPkFkZCBFcnJvciBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRMb2FkaW5nV2lkZ2V0KCkiPkFkZCBMb2FkaW5nIFdpZGdldDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImFkZFJpZ2h0V2lkZ2V0KCkiPkFkZCBSaWdodCBXaWRnZXQ8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbiBvbmNsaWNrPSJhZGRBY3Rpb24oKSI+QWRkIEFjdGlvbjwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIG9uY2xpY2s9ImNsZWFyQWxsKCkiPkNsZWFyIEFsbDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8c2NyaXB0IHR5cGU9Im1vZHVsZSI+CiAgICAgICAgY29uc3QgYm90dG9tYmFyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2RlbW8tYm90dG9tYmFyJyk7CgogICAgICAgIC8vIFdhaXQgZm9yIGNvbXBvbmVudCB0byBpbml0aWFsaXplCiAgICAgICAgYXdhaXQgYm90dG9tYmFyLnVwZGF0ZUNvbXBsZXRlOwoKICAgICAgICAvLyBBZGQgaW5pdGlhbCB3aWRnZXRzCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ3N0YXR1cycsCiAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTphY3Rpdml0eScsCiAgICAgICAgICBsYWJlbDogJ1N5c3RlbSBPbmxpbmUnLAogICAgICAgICAgc3RhdHVzOiAnc3VjY2VzcycsCiAgICAgICAgICB0b29sdGlwOiAnQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ1N0YXR1cyBjbGlja2VkJyksCiAgICAgICAgICBjb250ZXh0TWVudUl0ZW1zOiBbCiAgICAgICAgICAgIHsgbmFtZTogJ1ZpZXcgRGV0YWlscycsIGljb25OYW1lOiAnbHVjaWRlOmluZm8nLCBhY3Rpb246ICgpID0+IGFsZXJ0KCdTeXN0ZW0gZGV0YWlscycpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICdSZWZyZXNoIFN0YXR1cycsIGljb25OYW1lOiAnbHVjaWRlOnJlZnJlc2hDdycsIGFjdGlvbjogKCkgPT4gYWxlcnQoJ1JlZnJlc2hpbmcuLi4nKSB9LAogICAgICAgICAgXSwKICAgICAgICB9KTsKCiAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICBpZDogJ25vdGlmaWNhdGlvbnMnLAogICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6YmVsbCcsCiAgICAgICAgICBsYWJlbDogJzMgbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBzdGF0dXM6ICd3YXJuaW5nJywKICAgICAgICAgIHRvb2x0aXA6ICdZb3UgaGF2ZSB1bnJlYWQgbm90aWZpY2F0aW9ucycsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygnTm90aWZpY2F0aW9ucyBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgaWQ6ICd2ZXJzaW9uJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmdpdEJyYW5jaCcsCiAgICAgICAgICBsYWJlbDogJ3YxLjIuMycsCiAgICAgICAgICB0b29sdGlwOiAnQ3VycmVudCB2ZXJzaW9uJywKICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coJ1ZlcnNpb24gY2xpY2tlZCcpLAogICAgICAgIH0pOwoKICAgICAgICAvLyBBZGQgaW5pdGlhbCBhY3Rpb25zCiAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICBpZDogJ3NldHRpbmdzJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnNldHRpbmdzJywKICAgICAgICAgIHRvb2x0aXA6ICdTZXR0aW5ncycsCiAgICAgICAgICBwb3NpdGlvbjogJ3JpZ2h0JywKICAgICAgICAgIG9uQ2xpY2s6ICgpID0+IGFsZXJ0KCdTZXR0aW5ncyBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIGJvdHRvbWJhci5hZGRBY3Rpb24oewogICAgICAgICAgaWQ6ICdoZWxwJywKICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmhlbHBDaXJjbGUnLAogICAgICAgICAgdG9vbHRpcDogJ0hlbHAnLAogICAgICAgICAgcG9zaXRpb246ICdyaWdodCcsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBhbGVydCgnSGVscCBjbGlja2VkJyksCiAgICAgICAgfSk7CgogICAgICAgIC8vIERlbW8gY29udHJvbCBmdW5jdGlvbnMKICAgICAgICBsZXQgd2lkZ2V0Q291bnRlciA9IDA7CiAgICAgICAgbGV0IGFjdGlvbkNvdW50ZXIgPSAwOwoKICAgICAgICB3aW5kb3cuYWRkU3VjY2Vzc1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3N1Y2Nlc3MtJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmNoZWNrQ2lyY2xlJywKICAgICAgICAgICAgbGFiZWw6ICdTdWNjZXNzICcgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgICAgdG9vbHRpcDogJ1N1Y2Nlc3Mgd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnc3VjY2Vzcy0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkV2FybmluZ1dpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ3dhcm5pbmctJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmFsZXJ0VHJpYW5nbGUnLAogICAgICAgICAgICBsYWJlbDogJ1dhcm5pbmcgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHN0YXR1czogJ3dhcm5pbmcnLAogICAgICAgICAgICB0b29sdGlwOiAnV2FybmluZyB3aWRnZXQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCd3YXJuaW5nLScgKyB3aWRnZXRDb3VudGVyKSwKICAgICAgICAgIH0pOwogICAgICAgIH07CgogICAgICAgIHdpbmRvdy5hZGRFcnJvcldpZGdldCA9ICgpID0+IHsKICAgICAgICAgIHdpZGdldENvdW50ZXIrKzsKICAgICAgICAgIGJvdHRvbWJhci5hZGRXaWRnZXQoewogICAgICAgICAgICBpZDogJ2Vycm9yLScgKyB3aWRnZXRDb3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTp4Q2lyY2xlJywKICAgICAgICAgICAgbGFiZWw6ICdFcnJvciAnICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgc3RhdHVzOiAnZXJyb3InLAogICAgICAgICAgICB0b29sdGlwOiAnRXJyb3Igd2lkZ2V0JywKICAgICAgICAgICAgb25DbGljazogKCkgPT4gYm90dG9tYmFyLnJlbW92ZVdpZGdldCgnZXJyb3ItJyArIHdpZGdldENvdW50ZXIpLAogICAgICAgICAgfSk7CiAgICAgICAgfTsKCiAgICAgICAgd2luZG93LmFkZExvYWRpbmdXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBjb25zdCBpZCA9ICdsb2FkaW5nLScgKyB3aWRnZXRDb3VudGVyOwogICAgICAgICAgYm90dG9tYmFyLmFkZFdpZGdldCh7CiAgICAgICAgICAgIGlkOiBpZCwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6bG9hZGVyMicsCiAgICAgICAgICAgIGxhYmVsOiAnTG9hZGluZy4uLicsCiAgICAgICAgICAgIHN0YXR1czogJ2FjdGl2ZScsCiAgICAgICAgICAgIGxvYWRpbmc6IHRydWUsCiAgICAgICAgICAgIHRvb2x0aXA6ICdMb2FkaW5nIGluIHByb2dyZXNzJywKICAgICAgICAgIH0pOwoKICAgICAgICAgIC8vIFNpbXVsYXRlIGNvbXBsZXRpb24gYWZ0ZXIgMyBzZWNvbmRzCiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgYm90dG9tYmFyLnVwZGF0ZVdpZGdldChpZCwgewogICAgICAgICAgICAgIGljb25OYW1lOiAnbHVjaWRlOmNoZWNrJywKICAgICAgICAgICAgICBsYWJlbDogJ0RvbmUhJywKICAgICAgICAgICAgICBzdGF0dXM6ICdzdWNjZXNzJywKICAgICAgICAgICAgICBsb2FkaW5nOiBmYWxzZSwKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9LCAzMDAwKTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkUmlnaHRXaWRnZXQgPSAoKSA9PiB7CiAgICAgICAgICB3aWRnZXRDb3VudGVyKys7CiAgICAgICAgICBib3R0b21iYXIuYWRkV2lkZ2V0KHsKICAgICAgICAgICAgaWQ6ICdyaWdodC0nICsgd2lkZ2V0Q291bnRlciwKICAgICAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6aW5mbycsCiAgICAgICAgICAgIGxhYmVsOiAnUmlnaHQgJyArIHdpZGdldENvdW50ZXIsCiAgICAgICAgICAgIHBvc2l0aW9uOiAncmlnaHQnLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBib3R0b21iYXIucmVtb3ZlV2lkZ2V0KCdyaWdodC0nICsgd2lkZ2V0Q291bnRlciksCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuYWRkQWN0aW9uID0gKCkgPT4gewogICAgICAgICAgYWN0aW9uQ291bnRlcisrOwogICAgICAgICAgYm90dG9tYmFyLmFkZEFjdGlvbih7CiAgICAgICAgICAgIGlkOiAnYWN0aW9uLScgKyBhY3Rpb25Db3VudGVyLAogICAgICAgICAgICBpY29uTmFtZTogJ2x1Y2lkZTp6YXAnLAogICAgICAgICAgICB0b29sdGlwOiAnQWN0aW9uICcgKyBhY3Rpb25Db3VudGVyLAogICAgICAgICAgICBvbkNsaWNrOiAoKSA9PiB7CiAgICAgICAgICAgICAgYWxlcnQoJ0FjdGlvbiAnICsgYWN0aW9uQ291bnRlciArICcgY2xpY2tlZCcpOwogICAgICAgICAgICAgIGJvdHRvbWJhci5yZW1vdmVBY3Rpb24oJ2FjdGlvbi0nICsgYWN0aW9uQ291bnRlcik7CiAgICAgICAgICAgIH0sCiAgICAgICAgICB9KTsKICAgICAgICB9OwoKICAgICAgICB3aW5kb3cuY2xlYXJBbGwgPSAoKSA9PiB7CiAgICAgICAgICBib3R0b21iYXIuY2xlYXJXaWRnZXRzKCk7CiAgICAgICAgICBib3R0b21iYXIuY2xlYXJBY3Rpb25zKCk7CiAgICAgICAgICB3aWRnZXRDb3VudGVyID0gMDsKICAgICAgICAgIGFjdGlvbkNvdW50ZXIgPSAwOwogICAgICAgIH07CiAgICAgIDxcL3NjcmlwdD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgXSkpKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLWJvdHRvbWJhci9kZWVzLWFwcHVpLWJvdHRvbWJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CmluaXRfZGVlc19pY29uKCk7CnZhciBfX2VzRGVjb3JhdGUxMSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aUJvdHRvbWJhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWktYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfd2lkZ2V0c19kZWNvcmF0b3JzOwogIGxldCBfd2lkZ2V0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2FjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aUJvdHRvbWJhcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF93aWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTExKHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMSh0aGlzLCBudWxsLCBfYWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aW9uc19pbml0aWFsaXplcnMsIF9hY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX3dpZGdldHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRSBQUk9QRVJUSUVTCiAgICBnZXQgd2lkZ2V0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3aWRnZXRzKHZhbHVlMikgewogICAgICB0aGlzLiN3aWRnZXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEyKHRoaXMsIF9hY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBhY3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuYm90dG9tLWJhciB7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTQlKSIsICJoc2woMCAwJSA2JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAud2lkZ2V0OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODglKSIsICJoc2woMCAwJSAxMiUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0IGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQtc2VwYXJhdG9yIHsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODAlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFN0YXR1cyBjb2xvcnMgbWF0Y2hpbmcgZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyICovCiAgICAgIC53aWRnZXQuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0Lndhcm5pbmcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDM4IDkyJSA0NSUpIiwgImhzbCgzOCA5MiUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC5lcnJvciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MCUgNTAlKSIsICJoc2woMCA3MCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICBmcm9tIHsgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7IH0KICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQoKICAgICAgLnNwaW5uaW5nIHsKICAgICAgICBhbmltYXRpb246IHNwaW4gMXMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICAuc3BhY2VyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uZGlzYWJsZWQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBsZWZ0V2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5wb3NpdGlvbiAhPT0gInJpZ2h0Iikuc29ydCgoYTUsIGI1KSA9PiAoYTUub3JkZXIgfHwgMCkgLSAoYjUub3JkZXIgfHwgMCkpOwogICAgICBjb25zdCByaWdodFdpZGdldHMgPSB0aGlzLndpZGdldHMuZmlsdGVyKCh3MykgPT4gdzMucG9zaXRpb24gPT09ICJyaWdodCIpLnNvcnQoKGE1LCBiNSkgPT4gKGE1Lm9yZGVyIHx8IDApIC0gKGI1Lm9yZGVyIHx8IDApKTsKICAgICAgY29uc3QgbGVmdEFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUucG9zaXRpb24gPT09ICJsZWZ0Iik7CiAgICAgIGNvbnN0IHJpZ2h0QWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5wb3NpdGlvbiAhPT0gImxlZnQiKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIExlZnQgYWN0aW9ucyAtLT4KICAgICAgICAke2xlZnRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiB0aGlzLnJlbmRlckFjdGlvbihhY3Rpb24pKX0KCiAgICAgICAgPCEtLSBMZWZ0IHdpZGdldHMgLS0+CiAgICAgICAgJHtsZWZ0V2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICR7aW5kZXgyID4gMCB8fCBsZWZ0QWN0aW9ucy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YCA6ICIifQogICAgICAgICAgJHt0aGlzLnJlbmRlcldpZGdldCh3aWRnZXQpfQogICAgICAgIGApfQoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIFJpZ2h0IHdpZGdldHMgLS0+CiAgICAgICAgJHtyaWdodFdpZGdldHMubWFwKCh3aWRnZXQsIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAke3RoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCl9CiAgICAgICAgICAke2luZGV4MiA8IHJpZ2h0V2lkZ2V0cy5sZW5ndGggLSAxIHx8IHJpZ2h0QWN0aW9ucy5sZW5ndGggPiAwID8gYjJgPGRpdiBjbGFzcz0id2lkZ2V0LXNlcGFyYXRvciI+PC9kaXY+YCA6ICIifQogICAgICAgIGApfQoKICAgICAgICA8IS0tIFJpZ2h0IGFjdGlvbnMgLS0+CiAgICAgICAgJHtyaWdodEFjdGlvbnMubWFwKChhY3Rpb24pID0+IHRoaXMucmVuZGVyQWN0aW9uKGFjdGlvbikpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJXaWRnZXQod2lkZ2V0KSB7CiAgICAgIGNvbnN0IHN0YXR1c0NsYXNzID0gd2lkZ2V0LnN0YXR1cyAmJiB3aWRnZXQuc3RhdHVzICE9PSAiaWRsZSIgPyB3aWRnZXQuc3RhdHVzIDogIiI7CiAgICAgIGNvbnN0IGljb25OYW1lID0gd2lkZ2V0Lmljb25OYW1lID8gd2lkZ2V0Lmljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IHdpZGdldC5pY29uTmFtZSA6IGBsdWNpZGU6JHt3aWRnZXQuaWNvbk5hbWV9YCA6ICIiOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0id2lkZ2V0ICR7c3RhdHVzQ2xhc3N9IgogICAgICAgIHRpdGxlPSIke3dpZGdldC50b29sdGlwIHx8ICIifSIKICAgICAgICBAY2xpY2s9JHsoKSA9PiB3aWRnZXQub25DbGljaz8uKCl9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVXaWRnZXRDb250ZXh0TWVudShlMTEsIHdpZGdldCl9CiAgICAgID4KICAgICAgICAke2ljb25OYW1lID8gYjJgCiAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgIC5pY29uPSR7aWNvbk5hbWV9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7d2lkZ2V0LmxvYWRpbmcgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgIGAgOiAiIn0KICAgICAgICAke3dpZGdldC5sYWJlbCA/IGIyYDxzcGFuPiR7d2lkZ2V0LmxhYmVsfTwvc3Bhbj5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbihhY3Rpb24pIHsKICAgICAgY29uc3QgaWNvbk5hbWUgPSBhY3Rpb24uaWNvbk5hbWUuc3RhcnRzV2l0aCgibHVjaWRlOiIpID8gYWN0aW9uLmljb25OYW1lIDogYGx1Y2lkZToke2FjdGlvbi5pY29uTmFtZX1gOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYWN0aW9uLWJ1dHRvbiAke2FjdGlvbi5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgdGl0bGU9IiR7YWN0aW9uLnRvb2x0aXAgfHwgIiJ9IgogICAgICAgIEBjbGljaz0keygpID0+ICFhY3Rpb24uZGlzYWJsZWQgJiYgYWN0aW9uLm9uQ2xpY2s/LigpfQogICAgICA+CiAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgLmljb249JHtpY29uTmFtZX0KICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVdpZGdldENvbnRleHRNZW51KGUxMSwgd2lkZ2V0KSB7CiAgICAgIGlmICghd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMgfHwgd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBmb3IgKGNvbnN0IGl0ZW0gb2Ygd2lkZ2V0LmNvbnRleHRNZW51SXRlbXMpIHsKICAgICAgICBpZiAoaXRlbS5kaXZpZGVyKSB7CiAgICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogaXRlbS5uYW1lLAogICAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgICAgICAgfSwKICAgICAgICAgICAgZGlzYWJsZWQ6IGl0ZW0uZGlzYWJsZWQKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgICBhd2FpdCBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZTExLCBtZW51SXRlbXMpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBBUEkgTUVUSE9EUyAoaW1wbGVtZW50cyBJQm90dG9tQmFyQVBJKQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIEFkZCBhIHdpZGdldCB0byB0aGUgYm90dG9tIGJhcgogICAgICovCiAgICBhZGRXaWRnZXQod2lkZ2V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5maWx0ZXIoKHczKSA9PiB3My5pZCAhPT0gd2lkZ2V0LmlkKTsKICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgd2lkZ2V0XTsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGFuIGV4aXN0aW5nIHdpZGdldCBieSBJRAogICAgICovCiAgICB1cGRhdGVXaWRnZXQoaWQsIHVwZGF0ZSkgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3MykgPT4gdzMuaWQgPT09IGlkID8geyAuLi53MywgLi4udXBkYXRlIH0gOiB3Myk7CiAgICB9CiAgICAvKioKICAgICAqIFJlbW92ZSBhIHdpZGdldCBieSBJRAogICAgICovCiAgICByZW1vdmVXaWRnZXQoaWQpIHsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigodzMpID0+IHczLmlkICE9PSBpZCk7CiAgICB9CiAgICAvKioKICAgICAqIEdldCBhIHdpZGdldCBieSBJRAogICAgICovCiAgICBnZXRXaWRnZXQoaWQpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5maW5kKCh3MykgPT4gdzMuaWQgPT09IGlkKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYWxsIHdpZGdldHMKICAgICAqLwogICAgY2xlYXJXaWRnZXRzKCkgewogICAgICB0aGlzLndpZGdldHMgPSBbXTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIGFuIGFjdGlvbiBidXR0b24KICAgICAqLwogICAgYWRkQWN0aW9uKGFjdGlvbikgewogICAgICB0aGlzLmFjdGlvbnMgPSB0aGlzLmFjdGlvbnMuZmlsdGVyKChhNSkgPT4gYTUuaWQgIT09IGFjdGlvbi5pZCk7CiAgICAgIHRoaXMuYWN0aW9ucyA9IFsuLi50aGlzLmFjdGlvbnMsIGFjdGlvbl07CiAgICB9CiAgICAvKioKICAgICAqIFJlbW92ZSBhbiBhY3Rpb24gYnkgSUQKICAgICAqLwogICAgcmVtb3ZlQWN0aW9uKGlkKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IHRoaXMuYWN0aW9ucy5maWx0ZXIoKGE1KSA9PiBhNS5pZCAhPT0gaWQpOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgYWN0aW9ucwogICAgICovCiAgICBjbGVhckFjdGlvbnMoKSB7CiAgICAgIHRoaXMuYWN0aW9ucyA9IFtdOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTIodGhpcywgX2FjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWJhY2tncm91bmQgewogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBtYXJnaW46IDMycHggMCAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWN0aW9uLXRpdGxlOmZpcnN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnIgMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDk2OHB4KSB7CiAgICAgICAgLmdyaWQtM2NvbCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tYmFja2dyb3VuZCI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+RGVmYXVsdCBQYW5lbHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlBhbmVsIENvbXBvbmVudCJ9IC5zdWJ0aXRsZT0keyJUaGUgZGVmYXVsdCBwYW5lbCB2YXJpYW50IHdpdGggc2hhZGNuLWluc3BpcmVkIHN0eWxpbmcifT4KICAgICAgICA8cD5UaGUgcGFuZWwgY29tcG9uZW50IGF1dG9tYXRpY2FsbHkgZm9sbG93cyB0aGUgdGhlbWUgYW5kIHByb3ZpZGVzIGNvbnNpc3RlbnQgc3R5bGluZyBmb3IgZ3JvdXBlZCBjb250ZW50LjwvcD4KICAgICAgICA8cD5JdCdzIHBlcmZlY3QgZm9yIGNyZWF0aW5nIHNlY3Rpb25zIGluIHlvdXIgYXBwbGljYXRpb24gd2l0aCBwcm9wZXIgc3BhY2luZyBhbmQgYm9yZGVycy48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImdyaWQtbGF5b3V0Ij4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZSBPdmVydmlldyJ9IC5zdWJ0aXRsZT0keyJLZXkgY2FwYWJpbGl0aWVzIn0+CiAgICAgICAgICA8cD5HcmlkIGxheW91dHMgd29yayBncmVhdCB3aXRoIHBhbmVscyBmb3IgY3JlYXRpbmcgZGFzaGJvYXJkcyBhbmQgZmVhdHVyZSBzZWN0aW9ucy48L3A+CiAgICAgICAgICA8ZGVlcy1idXR0b24+TGVhcm4gTW9yZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJRdWljayBBY3Rpb25zIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiB0YXNrcyJ9PgogICAgICAgICAgPHA+RWFjaCBwYW5lbCBtYWludGFpbnMgY29uc2lzdGVudCBzcGFjaW5nIGFuZCBzdHlsaW5nIGFjcm9zcyB5b3VyIGFwcGxpY2F0aW9uLjwvcD4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5HZXQgU3RhcnRlZDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgVmFyaWFudHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkRlZmF1bHQgVmFyaWFudCJ9IC52YXJpYW50PSR7ImRlZmF1bHQifT4KICAgICAgICA8cD5UaGUgZGVmYXVsdCB2YXJpYW50IGhhcyBhIHdoaXRlIGJhY2tncm91bmQsIHN1YnRsZSBib3JkZXIsIGFuZCBtaW5pbWFsIHNoYWRvdy4gSXQncyB0aGUgc3RhbmRhcmQgY2hvaWNlIGZvciBtb3N0IGNvbnRlbnQuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJkZWZhdWx0IjwvY29kZT4gb3Igb21pdCB0aGUgdmFyaWFudCBwcm9wZXJ0eS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJPdXRsaW5lIFZhcmlhbnQifSAuc3VidGl0bGU9JHsiVHJhbnNwYXJlbnQgYmFja2dyb3VuZCB3aXRoIGJvcmRlciJ9IC52YXJpYW50PSR7Im91dGxpbmUifT4KICAgICAgICA8cD5UaGUgb3V0bGluZSB2YXJpYW50IHJlbW92ZXMgdGhlIGJhY2tncm91bmQgY29sb3IgYW5kIHNoYWRvdywga2VlcGluZyBvbmx5IHRoZSBib3JkZXIuPC9wPgogICAgICAgIDxwPlVzZSA8Y29kZT52YXJpYW50PSJvdXRsaW5lIjwvY29kZT4gZm9yIGEgbGlnaHRlciB2aXN1YWwgd2VpZ2h0LjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikdob3N0IFZhcmlhbnQifSAuc3VidGl0bGU9JHsiTWluaW1hbCBzdHlsaW5nIGZvciBzdWJ0bGUgc2VjdGlvbnMifSAudmFyaWFudD0keyJnaG9zdCJ9PgogICAgICAgIDxwPlRoZSBnaG9zdCB2YXJpYW50IGhhcyBubyBib3JkZXIgb3IgYmFja2dyb3VuZCBieSBkZWZhdWx0LCBvbmx5IHNob3dpbmcgYSBzdWJ0bGUgYmFja2dyb3VuZCBvbiBob3Zlci48L3A+CiAgICAgICAgPHA+VXNlIDxjb2RlPnZhcmlhbnQ9Imdob3N0IjwvY29kZT4gZm9yIHRoZSBtb3N0IG1pbmltYWwgYXBwZWFyYW5jZS48L3A+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UGFuZWwgU2l6ZXM8L2gyPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC0zY29sIj4KICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU21hbGwgUGFuZWwifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+Q29tcGFjdCBwYWRkaW5nIGZvciBkZW5zZSBsYXlvdXRzLjwvcD4KICAgICAgICAgIDxwPlVzZSA8Y29kZT5zaXplPSJzbSI8L2NvZGU+PC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgICAKICAgICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiTWVkaXVtIFBhbmVsIn0gLnNpemU9JHsibWQifT4KICAgICAgICAgIDxwPkRlZmF1bHQgc2l6ZSB3aXRoIGJhbGFuY2VkIHNwYWNpbmcuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9Im1kIjwvY29kZT4gb3Igb21pdC48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYXJnZSBQYW5lbCJ9IC5zaXplPSR7ImxnIn0+CiAgICAgICAgICA8cD5HZW5lcm91cyBwYWRkaW5nIGZvciBwcm9taW5lbnQgc2VjdGlvbnMuPC9wPgogICAgICAgICAgPHA+VXNlIDxjb2RlPnNpemU9ImxnIjwvY29kZT48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxoMiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q29tcGxleCBFeGFtcGxlczwvaDI+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IlBhbmVscyB3b3JrIGdyZWF0IGZvciBvcmdhbml6aW5nIGZvcm0gc2VjdGlvbnMifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUHJvamVjdCBOYW1lIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJEZXNjcmlwdGlvbiJ9IC5pbnB1dFR5cGU9JHsidGV4dGFyZWEifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duIAogICAgICAgICAgICAubGFiZWw9JHsiQ2F0ZWdvcnkifSAKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJXZWIgRGV2ZWxvcG1lbnQiLCBrZXk6ICJ3ZWIiIH0sCiAgeyBvcHRpb246ICJNb2JpbGUgQXBwIiwga2V5OiAibW9iaWxlIiB9LAogIHsgb3B0aW9uOiAiRGVza3RvcCBTb2Z0d2FyZSIsIGtleTogImRlc2t0b3AiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5DcmVhdGUgUHJvamVjdDwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbHMifSAuc3VidGl0bGU9JHsiUGFuZWxzIGNhbiBiZSBuZXN0ZWQgZm9yIGhpZXJhcmNoaWNhbCBvcmdhbml6YXRpb24ifT4KICAgICAgICA8cD5Zb3UgY2FuIG5lc3QgcGFuZWxzIHRvIGNyZWF0ZSBtb3JlIGNvbXBsZXggbGF5b3V0czo8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbCAxIn0gLnZhcmlhbnQ9JHsib3V0bGluZSJ9IC5zaXplPSR7InNtIn0+CiAgICAgICAgICA8cD5UaGlzIGlzIGEgbmVzdGVkIHBhbmVsIHdpdGggb3V0bGluZSB2YXJpYW50IGFuZCBzbWFsbCBzaXplLjwvcD4KICAgICAgICA8L2RlZXMtcGFuZWw+CiAgICAgICAgCiAgICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ik5lc3RlZCBQYW5lbCAyIn0gLnZhcmlhbnQ9JHsiZ2hvc3QifSAuc2l6ZT0keyJzbSJ9PgogICAgICAgICAgPHA+VGhpcyBpcyBhbm90aGVyIG5lc3RlZCBwYW5lbCB3aXRoIGdob3N0IHZhcmlhbnQuPC9wPgogICAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGgyIGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5VbnRpdGxlZCBQYW5lbHM8L2gyPgogICAgICAKICAgICAgPGRlZXMtcGFuZWw+CiAgICAgICAgPHA+UGFuZWxzIHdvcmsgZ3JlYXQgZXZlbiB3aXRob3V0IGEgdGl0bGUgZm9yIHNpbXBsZSBjb250ZW50IGdyb3VwaW5nLjwvcD4KICAgICAgICA8cD5UaGV5IHByb3ZpZGUgdmlzdWFsIHNlcGFyYXRpb24gYW5kIGNvbnNpc3RlbnQgcGFkZGluZyB0aHJvdWdob3V0IHlvdXIgaW50ZXJmYWNlLjwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgIDxkZWVzLXBhbmVsIC52YXJpYW50PSR7Im91dGxpbmUifT4KICAgICAgICAgIDxoNCBzdHlsZT0ibWFyZ2luLXRvcDogMDsiPkN1c3RvbSBDb250ZW50PC9oND4KICAgICAgICAgIDxwPllvdSBjYW4gYWRkIHlvdXIgb3duIGhlYWRpbmdzIGFuZCBzdHJ1Y3R1cmUgd2l0aGluIHVudGl0bGVkIHBhbmVscy48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIAogICAgICAgIDxkZWVzLXBhbmVsIC52YXJpYW50PSR7Imdob3N0In0+CiAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbi10b3A6IDA7Ij5NaW5pbWFsIFN0eWxlPC9oND4KICAgICAgICAgIDxwPkdob3N0IHBhbmVscyB3aXRob3V0IHRpdGxlcyBjcmVhdGUgdmVyeSBzdWJ0bGUgY29udGVudCBzZWN0aW9ucy48L3A+CiAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGZvbnRzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZWlzdFNhbnNGb250ID0gIkdlaXN0IFNhbnMiOwp2YXIgaW50ZWxPbmVNb25vRm9udCA9ICJJbnRlbCBPbmUgTW9ubyI7CnZhciBnZWlzdEZvbnRGYW1pbHkgPSBgJyR7Z2Vpc3RTYW5zRm9udH0nLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCAnT3h5Z2VuJywgJ1VidW50dScsICdDYW50YXJlbGwnLCAnRmlyYSBTYW5zJywgJ0Ryb2lkIFNhbnMnLCAnSGVsdmV0aWNhIE5ldWUnLCBzYW5zLXNlcmlmYDsKdmFyIG1vbm9Gb250RmFtaWx5ID0gYCcke2ludGVsT25lTW9ub0ZvbnR9JywgJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsICdGaXJhIE1vbm8nLCAnRHJvaWQgU2FucyBNb25vJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlYDsKdmFyIGNzc0dlaXN0Rm9udEZhbWlseSA9IHIoZ2Vpc3RGb250RmFtaWx5KTsKdmFyIGNzc01vbm9Gb250RmFtaWx5ID0gcihtb25vRm9udEZhbWlseSk7CnZhciBjYWxTYW5zRm9udCA9ICJDYWwgU2FucyI7CnZhciBjYWxTYW5zRm9udEZhbWlseSA9IGAnJHtjYWxTYW5zRm9udH0nLCAke2dlaXN0Rm9udEZhbWlseX1gOwp2YXIgY3NzQ2FsU2Fuc0ZvbnRGYW1pbHkgPSByKGNhbFNhbnNGb250RmFtaWx5KTsKdmFyIHJvYm90b1NsYWJGb250ID0gIlJvYm90byBTbGFiIjsKdmFyIHJvYm90b1NsYWJGb250RmFtaWx5ID0gYCcke3JvYm90b1NsYWJGb250fScsIEdlb3JnaWEsIHNlcmlmYDsKdmFyIGNzc1JvYm90b1NsYWJGb250RmFtaWx5ID0gcihyb2JvdG9TbGFiRm9udEZhbWlseSk7CnZhciBiYXNlRm9udFN0eWxlcyA9IHIoYAogIGZvbnQtZmFtaWx5OiAke2dlaXN0Rm9udEZhbWlseX07CiAgLXdlYmtpdC1mb250LXNtb290aGluZzogYW50aWFsaWFzZWQ7CiAgLW1vei1vc3gtZm9udC1zbW9vdGhpbmc6IGdyYXlzY2FsZTsKICBmb250LWZlYXR1cmUtc2V0dGluZ3M6ICdjdjExJywgJ3RudW0nLCAnY3YwNScgMTsKYCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFuZWwvZGVlcy1wYW5lbC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxMiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQYW5lbCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFuZWwiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90aXRsZV9kZWNvcmF0b3JzOwogIGxldCBfdGl0bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aXRsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VidGl0bGVfZGVjb3JhdG9yczsKICBsZXQgX3N1YnRpdGxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VidGl0bGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhcmlhbnRfZGVjb3JhdG9yczsKICBsZXQgX3ZhcmlhbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YXJpYW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZGVjb3JhdG9yczsKICBsZXQgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BhbmVsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RpdGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc3VidGl0bGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YXJpYW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3RpdGxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpdGxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aXRsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aXRsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGl0bGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGl0bGVfaW5pdGlhbGl6ZXJzLCBfdGl0bGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc3VidGl0bGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VidGl0bGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1YnRpdGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1YnRpdGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWJ0aXRsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWJ0aXRsZV9pbml0aWFsaXplcnMsIF9zdWJ0aXRsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEyKHRoaXMsIG51bGwsIF92YXJpYW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhcmlhbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhcmlhbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFyaWFudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFyaWFudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YXJpYW50X2luaXRpYWxpemVycywgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTIodGhpcywgbnVsbCwgX3J1bkFmdGVyUmVuZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ1bkFmdGVyUmVuZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJydW5BZnRlclJlbmRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ydW5BZnRlclJlbmRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnVuQWZ0ZXJSZW5kZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcnVuQWZ0ZXJSZW5kZXJfaW5pdGlhbGl6ZXJzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQYW5lbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzY7CiAgICAjdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3RpdGxlX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHRpdGxlKCkgewogICAgICByZXR1cm4gdGhpcy4jdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aXRsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdWJ0aXRsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3RpdGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc3VidGl0bGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHN1YnRpdGxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWJ0aXRsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VidGl0bGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YXJpYW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc3VidGl0bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF92YXJpYW50X2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdmFyaWFudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhcmlhbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YXJpYW50KHZhbHVlMikgewogICAgICB0aGlzLiN2YXJpYW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3ZhcmlhbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczEzKHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgIm1kIikpOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J1bkFmdGVyUmVuZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTModGhpcywgX3J1bkFmdGVyUmVuZGVyX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgcnVuQWZ0ZXJSZW5kZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJ1bkFmdGVyUmVuZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNydW5BZnRlclJlbmRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBkZWZhdWx0ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJkZWZhdWx0Il0pIHsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCBoc2woMCAwJSAwJSAvIDAuMDUpOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBvdXRsaW5lICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJvdXRsaW5lIl0pIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3gtc2hhZG93OiBub25lOwogICAgICB9CgogICAgICAvKiBWYXJpYW50OiBnaG9zdCAqLwogICAgICA6aG9zdChbdmFyaWFudD0iZ2hvc3QiXSkgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm94LXNoYWRvdzogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICB9CgogICAgICAvKiBTaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXI6ZW1wdHkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50aXRsZSB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC8qIFRpdGxlIHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtzaXplPSJsZyJdKSAudGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlIHsKICAgICAgICBtYXJnaW46IDRweCAwIDAgMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMDZlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTdWJ0aXRsZSBzaXplIHZhcmlhdGlvbnMgKi8KICAgICAgOmhvc3QoW3NpemU9InNtIl0pIC5zdWJ0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICA6aG9zdChbc2l6ZT0ibGciXSkgLnN1YnRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgODQuOSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICB9CgogICAgICAvKiBDb250ZW50IHNpemUgdmFyaWF0aW9ucyAqLwogICAgICA6aG9zdChbc2l6ZT0ic20iXSkgLmNvbnRlbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgOmhvc3QoW3NpemU9ImxnIl0pIC5jb250ZW50IHsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgIH0KCiAgICAgIC8qIFJlbW92ZSBtYXJnaW5zIGZyb20gZmlyc3QgYW5kIGxhc3QgY2hpbGRyZW4gKi8KICAgICAgLmNvbnRlbnQgOjpzbG90dGVkKCo6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CgogICAgICAuY29udGVudCA6OnNsb3R0ZWQoKjpsYXN0LWNoaWxkKSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzIGZvciBkZWZhdWx0IHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9ImRlZmF1bHQiXTpob3ZlcikgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgIH0KCiAgICAgIC8qIEludGVyYWN0aXZlIHN0YXRlcyBmb3Igb3V0bGluZSB2YXJpYW50ICovCiAgICAgIDpob3N0KFt2YXJpYW50PSJvdXRsaW5lIl06aG92ZXIpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDcuOCUpIil9OwogICAgICB9CgogICAgICAvKiBJbnRlcmFjdGl2ZSBzdGF0ZXMgZm9yIGdob3N0IHZhcmlhbnQgKi8KICAgICAgOmhvc3QoW3ZhcmlhbnQ9Imdob3N0Il06aG92ZXIpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGVzICovCiAgICAgIDpob3N0KDpmb2N1cy13aXRoaW4pIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLyogTmVzdGVkIHBhbmVscyBzcGFjaW5nICovCiAgICAgIDo6c2xvdHRlZChkZWVzLXBhbmVsKSB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgOjpzbG90dGVkKGRlZXMtcGFuZWw6Zmlyc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgJHt0aGlzLnRpdGxlID8gYjJgPGgzIGNsYXNzPSJ0aXRsZSI+JHt0aGlzLnRpdGxlfTwvaDM+YCA6ICIifQogICAgICAgICR7dGhpcy5zdWJ0aXRsZSA/IGIyYDxwIGNsYXNzPSJzdWJ0aXRsZSI+JHt0aGlzLnN1YnRpdGxlfTwvcD5gIDogIiJ9CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50Ij4KICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMucnVuQWZ0ZXJSZW5kZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLnJ1bkFmdGVyUmVuZGVyKHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMyh0aGlzLCBfcnVuQWZ0ZXJSZW5kZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxMyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1BhbmVsMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMjsKdmFyIGdlbmVyYXRlQ3B1Q29yZXMgPSAoY291bnQyKSA9PiB7CiAgcmV0dXJuIEFycmF5LmZyb20oeyBsZW5ndGg6IGNvdW50MiB9LCAoXzQsIGkxMSkgPT4gKHsKICAgIGlkOiBpMTEsCiAgICB1c2FnZTogTWF0aC5yb3VuZChNYXRoLnJhbmRvbSgpICogMTAwKSwKICAgIGxhYmVsOiBgJHtpMTF9YAogIH0pKTsKfTsKdmFyIGRlbW9GdW5jNyA9ICgpID0+IHsKICByZXR1cm4gYjIoX2EyIHx8IChfYTIgPSBfX3RlbXBsYXRlKFsiXG4gIDxkZWVzLWRlbW93cmFwcGVyPlxuICAgIDxzdHlsZT5cbiAgICAgICIsICdcbiAgICA8L3N0eWxlPlxuICAgIFxuICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5ncmlkQWN0aW9ucz0iLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGRpdiBpZD0iYWN0aW9uLW91dHB1dCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IHBhZGRpbmc6IDEycHg7IGJhY2tncm91bmQ6ICcsICI7IGJvcmRlci1yYWRpdXM6IDZweDsgZm9udC1zaXplOiAxNHB4OyBmb250LWZhbWlseTogbW9ub3NwYWNlOyBjb2xvcjogIiwgJzsiPlxuICAgICAgICAgIDxlbT5DbGljayBvbiB0aWxlIGFjdGlvbnMgb3IgZ3JpZCBhY3Rpb25zIHRvIHNlZSB0aGUgcmVzdWx0Li4uPC9lbT5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgJ1xuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgICAgXG4gICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29uZmlnIj5cbiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+XG4gICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctdGl0bGUiPkNvbmZpZ3VyYXRpb24gT3B0aW9uczwvZGl2PlxuICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLWRlc2NyaXB0aW9uIj5cbiAgICAgICAgICAgICAgRWFjaCB0aWxlIHR5cGUgc3VwcG9ydHMgZGlmZmVyZW50IHByb3BlcnRpZXM6XG4gICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+TnVtYmVyOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgY29sb3IsIGRlc2NyaXB0aW9uPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5HYXVnZTo8L3N0cm9uZz4gdmFsdWUsIHVuaXQsIGdhdWdlT3B0aW9ucyAobWluLCBtYXgsIHRocmVzaG9sZHMpPC9saT5cbiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5QZXJjZW50YWdlOjwvc3Ryb25nPiB2YWx1ZSAoMC0xMDApLCBjb2xvciwgZGVzY3JpcHRpb248L2xpPlxuICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPlRyZW5kOjwvc3Ryb25nPiB2YWx1ZSwgdW5pdCwgdHJlbmREYXRhIGFycmF5LCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+VGV4dDo8L3N0cm9uZz4gdmFsdWUgKHN0cmluZyksIGNvbG9yLCBkZXNjcmlwdGlvbjwvbGk+XG4gICAgICAgICAgICAgIDwvdWw+XG4gICAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgICA8L2Rpdj5cbiAgICAgICAgPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0nLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDE2cHggMDsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyI+Q29tcGFjdCBMYXlvdXQgKDE4MHB4IHRpbGVzKTwvaDQ+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLm1pblRpbGVXaWR0aD0iLCAiXG4gICAgICAgICAgLmdhcD0iLCAnXG4gICAgICAgID48L2RlZXMtc3RhdHNncmlkPlxuICAgICAgICBcbiAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDI0cHggMCAxNnB4IDA7IGZvbnQtc2l6ZTogMTZweDsgZm9udC13ZWlnaHQ6IDYwMDsiPlNwYWNpb3VzIExheW91dCAoMzIwcHggdGlsZXMpPC9oND5cbiAgICAgICAgPGRlZXMtc3RhdHNncmlkXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICBpZD0iY3B1LWNvcmVzLWdyaWQiXG4gICAgICAgICAgLnRpbGVzPScsICJcbiAgICAgICAgICAuZ3JpZEFjdGlvbnM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgIlxuICAgICAgICA+PC9kZWVzLXN0YXRzZ3JpZD5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICc+XG4gICAgICAgIDxkZWVzLXN0YXRzZ3JpZFxuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1ncmlkIlxuICAgICAgICAgIC50aWxlcz0nLCAiXG4gICAgICAgICAgLmdyaWRBY3Rpb25zPSIsICJcbiAgICAgICAgICAubWluVGlsZVdpZHRoPSIsICJcbiAgICAgICAgICAuZ2FwPSIsICJcbiAgICAgICAgPjwvZGVlcy1zdGF0c2dyaWQ+XG4gICAgICA8L2RlZXMtcGFuZWw+XG4gICAgICBcbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrIj4nLCAiPC9kaXY+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1zdGF0c2dyaWRcbiAgICAgICAgICAudGlsZXM9IiwgIlxuICAgICAgICAgIC5taW5UaWxlV2lkdGg9IiwgIlxuICAgICAgICAgIC5nYXA9IiwgYAogICAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWNvbmZpZyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctc2VjdGlvbiI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy10aXRsZSI+UGFydGl0aW9uIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnVzZWQ6PC9zdHJvbmc+IFVzZWQgc3BhY2UgaW4gYnl0ZXMgKGF1dG8tZm9ybWF0dGVkKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLnRvdGFsOjwvc3Ryb25nPiBUb3RhbCBjYXBhY2l0eSBpbiBieXRlczwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLmZpbGVzeXN0ZW06PC9zdHJvbmc+IEZpbGVzeXN0ZW0gdHlwZSAoZXh0NCwgeGZzLCBudGZzKTwvbGk+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5wYXJ0aXRpb25EYXRhLm1vdW50UG9pbnQ6PC9zdHJvbmc+IE1vdW50IHBvaW50IHBhdGggKG9wdGlvbmFsKTwvbGk+CiAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICBDb2xvciB0aHJlc2hvbGRzOiBOb3JtYWwgKCZsdDs3NSUpLCBXYXJuaW5nICg3NS05MCUpLCBDcml0aWNhbCAoJmd0OzkwJSkKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbmZpZy1zZWN0aW9uIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29uZmlnLXRpdGxlIj5EaXNrIFRpbGUgUHJvcGVydGllczwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJjb25maWctZGVzY3JpcHRpb24iPgogICAgICAgICAgICAgIDx1bCBzdHlsZT0ibWFyZ2luOiA4cHggMDsgcGFkZGluZy1sZWZ0OiAyMHB4OyI+CiAgICAgICAgICAgICAgICA8bGk+PHN0cm9uZz5kaXNrRGF0YS5jYXBhY2l0eTo8L3N0cm9uZz4gVG90YWwgY2FwYWNpdHkgaW4gYnl0ZXM8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEubW9kZWw6PC9zdHJvbmc+IERpc2sgbW9kZWwgbmFtZSAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICAgIDxsaT48c3Ryb25nPmRpc2tEYXRhLnR5cGU6PC9zdHJvbmc+IERpc2sgdHlwZTogJ3NzZCcsICdoZGQnLCBvciAnbnZtZSc8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaW9wczo8L3N0cm9uZz4gUmVhZC93cml0ZSBJT1BTIChvcHRpb25hbCk8L2xpPgogICAgICAgICAgICAgICAgPGxpPjxzdHJvbmc+ZGlza0RhdGEuaGVhbHRoOjwvc3Ryb25nPiBIZWFsdGggcGVyY2VudGFnZSAwLTEwMCAob3B0aW9uYWwpPC9saT4KICAgICAgICAgICAgICA8L3VsPgogICAgICAgICAgICAgIEhlYWx0aCB0aHJlc2hvbGRzOiBHb29kICg3MC0xMDAlKSwgV2FybmluZyAoMzAtNzAlKSwgQ3JpdGljYWwgKCZsdDszMCUpCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgoKICAgIDxzY3JpcHQ+CiAgICAgIC8vIENsZWFudXAgbGl2ZSB1cGRhdGVzIG9uIHBhZ2UgdW5sb2FkCiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCdiZWZvcmV1bmxvYWQnLCAoKSA9PiB7CiAgICAgICAgaWYgKCh3aW5kb3cgYXMgYW55KS5saXZlVXBkYXRlSW50ZXJ2YWwpIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwoKHdpbmRvdyBhcyBhbnkpLmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIDxcL3NjcmlwdD4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxNDAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnRpbGUtY29uZmlnIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctc2VjdGlvbiB7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmNvbmZpZy10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb25maWctZGVzY3JpcHRpb24gewogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY29kZS1ibG9jayB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgICB3aGl0ZS1zcGFjZTogcHJlOwogICAgICAgIH0KICAgICAgYCwgIjEuIENvbXByZWhlbnNpdmUgRGFzaGJvYXJkIiwgIkZ1bGwtZmVhdHVyZWQgc3RhdHMgZ3JpZCB3aXRoIHZhcmlvdXMgdGlsZSB0eXBlcywgYWN0aW9ucywgYW5kIEx1Y2lkZSBpY29ucyIsIFsKICAgIHsKICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgdGl0bGU6ICJUb3RhbCBSZXZlbnVlIiwKICAgICAgdmFsdWU6IDEyNTQyMCwKICAgICAgdW5pdDogIiQiLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXItc2lnbiIsCiAgICAgIGRlc2NyaXB0aW9uOiAiKzEyLjUlIGZyb20gbGFzdCBtb250aCIsCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiVmlldyBEZXRhaWxzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyZW5kaW5nLXVwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgICAgICBpZiAob3V0cHV0KSB7CiAgICAgICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIlZpZXdpbmcgcmV2ZW51ZSBkZXRhaWxzOiAkMTI1LDQyMCAoKzEyLjUlKSI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFeHBvcnQgRGF0YSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FjdGlvbi1vdXRwdXQiKTsKICAgICAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJFeHBvcnRpbmcgcmV2ZW51ZSBkYXRhIHRvIENTVi4uLiI7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAidXNlcnMiLAogICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgIHZhbHVlOiAzODQ3LAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgIGRlc2NyaXB0aW9uOiAiMzI0IG5ldyB0aGlzIHdlZWsiLAogICAgICBhY3Rpb25zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlZpZXcgVXNlciBMaXN0IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiT3BlbmluZyB1c2VyIGxpc3QuLi4iOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdCiAgICB9LAogICAgewogICAgICBpZDogImNwdSIsCiAgICAgIHRpdGxlOiAiQ1BVIFVzYWdlIiwKICAgICAgdmFsdWU6IDczLAogICAgICB1bml0OiAiJSIsCiAgICAgIHR5cGU6ICJnYXVnZSIsCiAgICAgIGljb246ICJsdWNpZGU6Y3B1IiwKICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgbWluOiAwLAogICAgICAgIG1heDogMTAwLAogICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgIHsgdmFsdWU6IDAsIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIgfSwKICAgICAgICAgIHsgdmFsdWU6IDgwLCBjb2xvcjogImhzbCgwIDg0LjIlIDYwLjIlKSIgfQogICAgICAgIF0KICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzdG9yYWdlIiwKICAgICAgdGl0bGU6ICJTdG9yYWdlIFVzZWQiLAogICAgICB2YWx1ZTogNjUsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgZGVzY3JpcHRpb246ICI2NTAgR0Igb2YgMSBUQiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibGF0ZW5jeSIsCiAgICAgIHRpdGxlOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAxNDIsCiAgICAgIHVuaXQ6ICJtcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICB0cmVuZERhdGE6IFsxNTAsIDE0NSwgMTQ4LCAxNDIsIDEzOCwgMTQwLCAxMzUsIDE0NSwgMTQyXSwKICAgICAgZGVzY3JpcHRpb246ICJQOTUiCiAgICB9LAogICAgewogICAgICBpZDogInVwdGltZSIsCiAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgIHZhbHVlOiAiOTkuOTUlIiwKICAgICAgdHlwZTogInRleHQiLAogICAgICBpY29uOiAibHVjaWRlOmNoZWNrLWNpcmNsZSIsCiAgICAgIGNvbG9yOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsCiAgICAgIGRlc2NyaXB0aW9uOiAiTGFzdCAzMCBkYXlzIgogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlJlZnJlc2giLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpyZWZyZXNoLWN3IiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtc3RhdHNncmlkIik7CiAgICAgICAgaWYgKGdyaWQpIHsKICAgICAgICAgIGdyaWQuc3R5bGUub3BhY2l0eSA9ICIwLjUiOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICBuYW1lOiAiRXhwb3J0IiwKICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2hhcmUiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjYWN0aW9uLW91dHB1dCIpOwogICAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9ICJFeHBvcnRpbmcgZGFzaGJvYXJkIHJlcG9ydC4uLiI7CiAgICAgICAgfQogICAgICB9CiAgICB9LAogICAgewogICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNhY3Rpb24tb3V0cHV0Iik7CiAgICAgICAgaWYgKG91dHB1dCkgewogICAgICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gIk9wZW5pbmcgZGFzaGJvYXJkIHNldHRpbmdzLi4uIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCBjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpLCBjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpLCAiMi4gVGlsZSBUeXBlcyIsICJEaWZmZXJlbnQgdmlzdWFsaXphdGlvbiB0eXBlcyBhdmFpbGFibGUgaW4gdGhlIHN0YXRzIGdyaWQiLCBbCiAgICB7CiAgICAgIGlkOiAibnVtYmVyLWV4YW1wbGUiLAogICAgICB0aXRsZTogIk51bWJlciBUaWxlIiwKICAgICAgdmFsdWU6IDQyMTk1LAogICAgICB1bml0OiAiJCIsCiAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICBpY29uOiAibHVjaWRlOmhhc2giLAogICAgICBkZXNjcmlwdGlvbjogIlNpbXBsZSBudW1lcmljIGRpc3BsYXkiCiAgICB9LAogICAgewogICAgICBpZDogImdhdWdlLWV4YW1wbGUiLAogICAgICB0aXRsZTogIkdhdWdlIFRpbGUiLAogICAgICB2YWx1ZTogNjgsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpnYXVnZSIsCiAgICAgIGdhdWdlT3B0aW9uczogewogICAgICAgIG1pbjogMCwKICAgICAgICBtYXg6IDEwMCwKICAgICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgICB7IHZhbHVlOiAwLCBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA1MCwgY29sb3I6ICJoc2woNDUuNCA5My40JSA0Ny41JSkiIH0sCiAgICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICJoc2woMCA4NC4yJSA2MC4yJSkiIH0KICAgICAgICBdCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAicGVyY2VudGFnZS1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJQZXJjZW50YWdlIFRpbGUiLAogICAgICB2YWx1ZTogNzgsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpwZXJjZW50IiwKICAgICAgZGVzY3JpcHRpb246ICJQcm9ncmVzcyBiYXIgdmlzdWFsaXphdGlvbiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidHJlbmQtZXhhbXBsZSIsCiAgICAgIHRpdGxlOiAiVHJlbmQgVGlsZSIsCiAgICAgIHZhbHVlOiA4OTIsCiAgICAgIHVuaXQ6ICJvcHMvcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6dHJlbmRpbmctdXAiLAogICAgICB0cmVuZERhdGE6IFs3MjAsIDc1MCwgNzgwLCA3OTUsIDgxMCwgODM1LCA4NTAsIDg2NSwgODgwLCA4OTJdLAogICAgICBkZXNjcmlwdGlvbjogImF2ZyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAidGV4dC1leGFtcGxlIiwKICAgICAgdGl0bGU6ICJUZXh0IFRpbGUiLAogICAgICB2YWx1ZTogIk9wZXJhdGlvbmFsIiwKICAgICAgdHlwZTogInRleHQiLAogICAgICBpY29uOiAibHVjaWRlOmluZm8iLAogICAgICBjb2xvcjogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICBkZXNjcmlwdGlvbjogIlN0YXR1cyBkaXNwbGF5IgogICAgfQogIF0sIDI4MCwgMTYsICIzLiBHcmlkIENvbmZpZ3VyYXRpb25zIiwgIkRpZmZlcmVudCBsYXlvdXQgb3B0aW9ucyBhbmQgcmVzcG9uc2l2ZSBiZWhhdmlvciIsIFsKICAgIHsgaWQ6ICIxIiwgdGl0bGU6ICJPcmRlcnMiLCB2YWx1ZTogMTU2LCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpzaG9wcGluZy1jYXJ0IiB9LAogICAgeyBpZDogIjIiLCB0aXRsZTogIlJldmVudWUiLCB2YWx1ZTogODQyMCwgdW5pdDogIiQiLCB0eXBlOiAibnVtYmVyIiwgaWNvbjogImx1Y2lkZTpkb2xsYXItc2lnbiIgfSwKICAgIHsgaWQ6ICIzIiwgdGl0bGU6ICJVc2VycyIsIHZhbHVlOiA0MjMsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnVzZXJzIiB9LAogICAgeyBpZDogIjQiLCB0aXRsZTogIkdyb3d0aCIsIHZhbHVlOiAxMi41LCB1bml0OiAiJSIsIHR5cGU6ICJudW1iZXIiLCBpY29uOiAibHVjaWRlOnRyZW5kaW5nLXVwIiwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9CiAgXSwgMTgwLCAxMiwgWwogICAgewogICAgICBpZDogInNwYWNpb3VzMSIsCiAgICAgIHRpdGxlOiAiTW9udGhseSBSZXZlbnVlIiwKICAgICAgdmFsdWU6IDE4NDUwMCwKICAgICAgdW5pdDogIiQiLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcmVkaXQtY2FyZCIsCiAgICAgIGRlc2NyaXB0aW9uOiAiVG90YWwgcmV2ZW51ZSB0aGlzIG1vbnRoIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzcGFjaW91czIiLAogICAgICB0aXRsZTogIkN1c3RvbWVyIFNhdGlzZmFjdGlvbiIsCiAgICAgIHZhbHVlOiA5NCwKICAgICAgdHlwZTogInBlcmNlbnRhZ2UiLAogICAgICBpY29uOiAibHVjaWRlOnNtaWxlIiwKICAgICAgZGVzY3JpcHRpb246ICJCYXNlZCBvbiAxLDIzNCByZXZpZXdzIgogICAgfSwKICAgIHsKICAgICAgaWQ6ICJzcGFjaW91czMiLAogICAgICB0aXRsZTogIlNlcnZlciBSZXNwb25zZSIsCiAgICAgIHZhbHVlOiA5OCwKICAgICAgdW5pdDogIm1zIiwKICAgICAgdHlwZTogInRyZW5kIiwKICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICB0cmVuZERhdGE6IFsxMDUsIDEwMiwgMTAwLCA5OSwgOTgsIDk4LCA5NywgOThdLAogICAgICBkZXNjcmlwdGlvbjogImF2ZyByZXNwb25zZSB0aW1lIgogICAgfQogIF0sIDMyMCwgMjAsICI0LiBDUFUgQ29yZXMgVmlzdWFsaXphdGlvbiIsICJWZXJ0aWNhbCBiYXIgdmlzdWFsaXphdGlvbiBmb3IgbXVsdGktY29yZSBDUFUgdXNhZ2Ugd2l0aCBjb2x1bW4gc3Bhbm5pbmciLCBbCiAgICB7CiAgICAgIGlkOiAiY3B1LWNvcmVzLTgiLAogICAgICB0aXRsZTogIkNQVSBDb3JlcyAoOC1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3Jlcyg4KSwKICAgICAgZGVzY3JpcHRpb246ICJJbnRlbCBpNyAtIDggY29yZXMiCiAgICB9LAogICAgewogICAgICBpZDogIm1lbW9yeSIsCiAgICAgIHRpdGxlOiAiTWVtb3J5IFVzYWdlIiwKICAgICAgdmFsdWU6IDY4LAogICAgICB0eXBlOiAicGVyY2VudGFnZSIsCiAgICAgIGljb246ICJsdWNpZGU6ZGF0YWJhc2UiLAogICAgICBkZXNjcmlwdGlvbjogIjEzLjYgR0Igb2YgMjAgR0IiCiAgICB9LAogICAgewogICAgICBpZDogImNwdS1jb3Jlcy0xNiIsCiAgICAgIHRpdGxlOiAiQ1BVIENvcmVzICgxNi1jb3JlKSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiY3B1Q29yZXMiLAogICAgICBpY29uOiAibHVjaWRlOmNwdSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGNvcmVzRGF0YTogZ2VuZXJhdGVDcHVDb3JlcygxNiksCiAgICAgIGRlc2NyaXB0aW9uOiAiQU1EIFJ5emVuIDkgLSAxNiBjb3JlcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAibmV0d29yayIsCiAgICAgIHRpdGxlOiAiTmV0d29yayBJL08iLAogICAgICB2YWx1ZTogMjQ1LAogICAgICB1bml0OiAiTUIvcyIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6bmV0d29yayIsCiAgICAgIHRyZW5kRGF0YTogWzIwMCwgMjIwLCAyMzUsIDI0MCwgMjM4LCAyNDVdLAogICAgICBkZXNjcmlwdGlvbjogInRocm91Z2hwdXQiCiAgICB9LAogICAgewogICAgICBpZDogImNwdS1jb3Jlcy0zMiIsCiAgICAgIHRpdGxlOiAiU2VydmVyIENQVSAoMzItY29yZSkiLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogImNwdUNvcmVzIiwKICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICBjb2x1bW5TcGFuOiAzLAogICAgICBjb3Jlc0RhdGE6IGdlbmVyYXRlQ3B1Q29yZXMoMzIpLAogICAgICBkZXNjcmlwdGlvbjogIkFNRCBFUFlDIC0gMzIgY29yZXMiCiAgICB9LAogICAgewogICAgICBpZDogImRpc2siLAogICAgICB0aXRsZTogIkRpc2sgVXNhZ2UiLAogICAgICB2YWx1ZTogNDIsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpoYXJkLWRyaXZlIiwKICAgICAgZGVzY3JpcHRpb246ICI0MjAgR0Igb2YgMSBUQiIKICAgIH0KICBdLCBbCiAgICB7CiAgICAgIG5hbWU6ICJSYW5kb21pemUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTpzaHVmZmxlIiwKICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNjcHUtY29yZXMtZ3JpZCIpOwogICAgICAgIGlmICghZ3JpZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCB0aWxlcyA9IGdyaWQudGlsZXMubWFwKCh0aWxlKSA9PiB7CiAgICAgICAgICBpZiAodGlsZS50eXBlID09PSAiY3B1Q29yZXMiICYmIHRpbGUuY29yZXNEYXRhKSB7CiAgICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICAgLi4udGlsZSwKICAgICAgICAgICAgICBjb3Jlc0RhdGE6IHRpbGUuY29yZXNEYXRhLm1hcCgoY29yZTIpID0+ICh7CiAgICAgICAgICAgICAgICAuLi5jb3JlMiwKICAgICAgICAgICAgICAgIHVzYWdlOiBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiAxMDApCiAgICAgICAgICAgICAgfSkpCiAgICAgICAgICAgIH07CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGlsZTsKICAgICAgICB9KTsKICAgICAgICBncmlkLnRpbGVzID0gdGlsZXM7CiAgICAgIH0KICAgIH0KICBdLCAyNTAsIDE2LCAiNS4gSW50ZXJhY3RpdmUgRmVhdHVyZXMiLCAiVGlsZXMgd2l0aCBhY3Rpb25zIGFuZCByZWFsLXRpbWUgdXBkYXRlcyIsIFsKICAgIHsKICAgICAgaWQ6ICJsaXZlLWNwdSIsCiAgICAgIHRpdGxlOiAiTGl2ZSBDUFUiLAogICAgICB2YWx1ZTogNDUsCiAgICAgIHVuaXQ6ICIlIiwKICAgICAgdHlwZTogImdhdWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpjcHUiLAogICAgICBnYXVnZU9wdGlvbnM6IHsKICAgICAgICBtaW46IDAsCiAgICAgICAgbWF4OiAxMDAsCiAgICAgICAgdGhyZXNob2xkczogWwogICAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogNjAsIGNvbG9yOiAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiB9LAogICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiaHNsKDAgODQuMiUgNjAuMiUpIiB9CiAgICAgICAgXQogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImxpdmUtcmVxdWVzdHMiLAogICAgICB0aXRsZTogIlJlcXVlc3RzL3NlYyIsCiAgICAgIHZhbHVlOiA4OTIsCiAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICB0cmVuZERhdGE6IFs4NTAsIDg2MCwgODcwLCA4ODAsIDg4NSwgODkwLCA4OTJdCiAgICB9LAogICAgewogICAgICBpZDogImxpdmUtbWVtb3J5IiwKICAgICAgdGl0bGU6ICJNZW1vcnkgVXNhZ2UiLAogICAgICB2YWx1ZTogNjIsCiAgICAgIHR5cGU6ICJwZXJjZW50YWdlIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIKICAgIH0sCiAgICB7CiAgICAgIGlkOiAiY291bnRlciIsCiAgICAgIHRpdGxlOiAiRXZlbnQgQ291bnRlciIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICBhY3Rpb25zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkluY3JlbWVudCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpwbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBncmlkID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2ludGVyYWN0aXZlLWdyaWQiKTsKICAgICAgICAgICAgaWYgKCFncmlkKQogICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgICAgY29uc3QgdGlsZSA9IGdyaWQudGlsZXMuZmluZCgodDkpID0+IHQ5LmlkID09PSAiY291bnRlciIpOwogICAgICAgICAgICB0aWxlLnZhbHVlID0gdHlwZW9mIHRpbGUudmFsdWUgPT09ICJudW1iZXIiID8gdGlsZS52YWx1ZSArIDEgOiAxOwogICAgICAgICAgICBncmlkLnRpbGVzID0gWy4uLmdyaWQudGlsZXNdOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlJlc2V0IiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnJvdGF0ZS1jY3ciLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGdyaWQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjaW50ZXJhY3RpdmUtZ3JpZCIpOwogICAgICAgICAgICBpZiAoIWdyaWQpCiAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICBjb25zdCB0aWxlID0gZ3JpZC50aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJjb3VudGVyIik7CiAgICAgICAgICAgIHRpbGUudmFsdWUgPSAwOwogICAgICAgICAgICBncmlkLnRpbGVzID0gWy4uLmdyaWQudGlsZXNdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXQogICAgfQogIF0sIFsKICAgIHsKICAgICAgbmFtZTogIlN0YXJ0IExpdmUgVXBkYXRlcyIsCiAgICAgIGljb25OYW1lOiAibHVjaWRlOnBsYXkiLAogICAgICBhY3Rpb246IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICghd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCkgewogICAgICAgICAgd2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHsKICAgICAgICAgICAgY29uc3QgZ3JpZCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1ncmlkIik7CiAgICAgICAgICAgIGlmIChncmlkKSB7CiAgICAgICAgICAgICAgY29uc3QgdGlsZXMgPSBbLi4uZ3JpZC50aWxlc107CiAgICAgICAgICAgICAgY29uc3QgY3B1VGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtY3B1Iik7CiAgICAgICAgICAgICAgY3B1VGlsZS52YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgY3B1VGlsZS52YWx1ZSArIChNYXRoLnJhbmRvbSgpICogMjAgLSAxMCkpKTsKICAgICAgICAgICAgICBjb25zdCByZXF1ZXN0c1RpbGUgPSB0aWxlcy5maW5kKCh0OSkgPT4gdDkuaWQgPT09ICJsaXZlLXJlcXVlc3RzIik7CiAgICAgICAgICAgICAgY29uc3QgbmV3VmFsdWUgPSByZXF1ZXN0c1RpbGUudmFsdWUgKyBNYXRoLnJvdW5kKE1hdGgucmFuZG9tKCkgKiA1MCAtIDI1KTsKICAgICAgICAgICAgICByZXF1ZXN0c1RpbGUudmFsdWUgPSBNYXRoLm1heCg4MDAsIG5ld1ZhbHVlKTsKICAgICAgICAgICAgICByZXF1ZXN0c1RpbGUudHJlbmREYXRhID0gWy4uLnJlcXVlc3RzVGlsZS50cmVuZERhdGEuc2xpY2UoMSksIHJlcXVlc3RzVGlsZS52YWx1ZV07CiAgICAgICAgICAgICAgY29uc3QgbWVtb3J5VGlsZSA9IHRpbGVzLmZpbmQoKHQ5KSA9PiB0OS5pZCA9PT0gImxpdmUtbWVtb3J5Iik7CiAgICAgICAgICAgICAgbWVtb3J5VGlsZS52YWx1ZSA9IE1hdGgubWF4KDAsIE1hdGgubWluKDEwMCwgbWVtb3J5VGlsZS52YWx1ZSArIChNYXRoLnJhbmRvbSgpICogMTAgLSA1KSkpOwogICAgICAgICAgICAgIGdyaWQudGlsZXMgPSB0aWxlczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMWUzKTsKICAgICAgICAgIHRoaXMubmFtZSA9ICJTdG9wIExpdmUgVXBkYXRlcyI7CiAgICAgICAgICB0aGlzLmljb25OYW1lID0gImx1Y2lkZTpwYXVzZSI7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNsZWFySW50ZXJ2YWwod2luZG93LmxpdmVVcGRhdGVJbnRlcnZhbCk7CiAgICAgICAgICB3aW5kb3cubGl2ZVVwZGF0ZUludGVydmFsID0gbnVsbDsKICAgICAgICAgIHRoaXMubmFtZSA9ICJTdGFydCBMaXZlIFVwZGF0ZXMiOwogICAgICAgICAgdGhpcy5pY29uTmFtZSA9ICJsdWNpZGU6cGxheSI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgXSwgMjUwLCAxNiwgIjYuIENvZGUgRXhhbXBsZSIsICJIb3cgdG8gaW1wbGVtZW50IGEgc3RhdHMgZ3JpZCB3aXRoIFR5cGVTY3JpcHQiLCBgY29uc3QgdGlsZXM6IElTdGF0c1RpbGVbXSA9IFsKICB7CiAgICBpZDogJ3JldmVudWUnLAogICAgdGl0bGU6ICdUb3RhbCBSZXZlbnVlJywKICAgIHZhbHVlOiAxMjU0MjAsCiAgICB1bml0OiAnJCcsCiAgICB0eXBlOiAnbnVtYmVyJywKICAgIGljb246ICdsdWNpZGU6ZG9sbGFyLXNpZ24nLAogICAgZGVzY3JpcHRpb246ICcrMTIuNSUgZnJvbSBsYXN0IG1vbnRoJywKICAgIGFjdGlvbnM6IFsKICAgICAgewogICAgICAgIG5hbWU6ICdWaWV3IERldGFpbHMnLAogICAgICAgIGljb25OYW1lOiAnbHVjaWRlOnRyZW5kaW5nLXVwJywKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnNvbGUubG9nKCdWaWV3IHJldmVudWUgZGV0YWlscycpOwogICAgICAgIH0KICAgICAgfQogICAgXQogIH0sCiAgewogICAgaWQ6ICdjcHUnLAogICAgdGl0bGU6ICdDUFUgVXNhZ2UnLAogICAgdmFsdWU6IDczLAogICAgdW5pdDogJyUnLAogICAgdHlwZTogJ2dhdWdlJywKICAgIGljb246ICdsdWNpZGU6Y3B1JywKICAgIGdhdWdlT3B0aW9uczogewogICAgICBtaW46IDAsCiAgICAgIG1heDogMTAwLAogICAgICB0aHJlc2hvbGRzOiBbCiAgICAgICAgeyB2YWx1ZTogMCwgY29sb3I6ICdoc2woMTQyLjEgNzYuMiUgMzYuMyUpJyB9LAogICAgICAgIHsgdmFsdWU6IDYwLCBjb2xvcjogJ2hzbCg0NS40IDkzLjQlIDQ3LjUlKScgfSwKICAgICAgICB7IHZhbHVlOiA4MCwgY29sb3I6ICdoc2woMCA4NC4yJSA2MC4yJSknIH0KICAgICAgXQogICAgfQogIH0KXTsKCi8vIFJlbmRlciB0aGUgc3RhdHMgZ3JpZApodG1sXGAKICA8ZGVlcy1zdGF0c2dyaWQKICAgIC50aWxlcz1cJHt0aWxlc30KICAgIC5taW5UaWxlV2lkdGg9XCR7MjUwfQogICAgLmdhcD1cJHsxNn0KICAgIC5ncmlkQWN0aW9ucz1cJHtbCiAgICAgIHsKICAgICAgICBuYW1lOiAnUmVmcmVzaCcsCiAgICAgICAgaWNvbk5hbWU6ICdsdWNpZGU6cmVmcmVzaC1jdycsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygnUmVmcmVzaCcpCiAgICAgIH0KICAgIF19CiAgPjwvZGVlcy1zdGF0c2dyaWQ+ClxgO2AsICI3LiBEaXNrICYgU3RvcmFnZSBUaWxlcyIsICJQYXJ0aXRpb24gYW5kIHBoeXNpY2FsIGRpc2sgdmlzdWFsaXphdGlvbiB0aWxlcyIsIFsKICAgIHsKICAgICAgaWQ6ICJyb290LXBhcnRpdGlvbiIsCiAgICAgIHRpdGxlOiAiUm9vdCBQYXJ0aXRpb24iLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogInBhcnRpdGlvbiIsCiAgICAgIGljb246ICJsdWNpZGU6Zm9sZGVyLXJvb3QiLAogICAgICBwYXJ0aXRpb25EYXRhOiB7CiAgICAgICAgdXNlZDogNjk4MzQxNDI1MTUyLAogICAgICAgIC8vIH42NTAgR0IKICAgICAgICB0b3RhbDogMTA3Mzc0MTgyNGUzLAogICAgICAgIC8vIH4xIFRCCiAgICAgICAgZmlsZXN5c3RlbTogImV4dDQiLAogICAgICAgIG1vdW50UG9pbnQ6ICIvIgogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImhvbWUtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJIb21lIFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpob21lIiwKICAgICAgcGFydGl0aW9uRGF0YTogewogICAgICAgIHVzZWQ6IDIxNDc0ODM2NDgwMCwKICAgICAgICAvLyB+MjAwIEdCCiAgICAgICAgdG90YWw6IDUzNjg3MDkxMmUzLAogICAgICAgIC8vIH41MDAgR0IKICAgICAgICBmaWxlc3lzdGVtOiAiZXh0NCIsCiAgICAgICAgbW91bnRQb2ludDogIi9ob21lIgogICAgICB9CiAgICB9LAogICAgewogICAgICBpZDogImRhdGEtcGFydGl0aW9uIiwKICAgICAgdGl0bGU6ICJEYXRhIFBhcnRpdGlvbiIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAicGFydGl0aW9uIiwKICAgICAgaWNvbjogImx1Y2lkZTpkYXRhYmFzZSIsCiAgICAgIHBhcnRpdGlvbkRhdGE6IHsKICAgICAgICB1c2VkOiAxOTMyNzM1MjgzMjAwLAogICAgICAgIC8vIH4xLjggVEIgKDkwJSAtIGNyaXRpY2FsKQogICAgICAgIHRvdGFsOiAyMTQ3NDgzNjQ4ZTMsCiAgICAgICAgLy8gfjIgVEIKICAgICAgICBmaWxlc3lzdGVtOiAieGZzIiwKICAgICAgICBtb3VudFBvaW50OiAiL2RhdGEiCiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAibnZtZS1zc2QiLAogICAgICB0aXRsZTogIlByaW1hcnkgTlZNZSIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6aGFyZC1kcml2ZSIsCiAgICAgIGNvbHVtblNwYW46IDIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDJlMTIsCiAgICAgICAgLy8gMiBUQgogICAgICAgIG1vZGVsOiAiU2Ftc3VuZyA5OTAgUHJvIiwKICAgICAgICB0eXBlOiAibnZtZSIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogNzQ1MCwKICAgICAgICAgIHdyaXRlOiA2OTAwCiAgICAgICAgfSwKICAgICAgICBoZWFsdGg6IDk4CiAgICAgIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiAic2F0YS1zc2QiLAogICAgICB0aXRsZTogIlNlY29uZGFyeSBTU0QiLAogICAgICB2YWx1ZTogMCwKICAgICAgdHlwZTogImRpc2siLAogICAgICBpY29uOiAibHVjaWRlOmhhcmQtZHJpdmUiLAogICAgICBkaXNrRGF0YTogewogICAgICAgIGNhcGFjaXR5OiAxZTEyLAogICAgICAgIC8vIDEgVEIKICAgICAgICBtb2RlbDogIkNydWNpYWwgTVg1MDAiLAogICAgICAgIHR5cGU6ICJzc2QiLAogICAgICAgIGlvcHM6IHsKICAgICAgICAgIHJlYWQ6IDU2MCwKICAgICAgICAgIHdyaXRlOiA1MTAKICAgICAgICB9LAogICAgICAgIGhlYWx0aDogODUKICAgICAgfQogICAgfSwKICAgIHsKICAgICAgaWQ6ICJoZGQtc3RvcmFnZSIsCiAgICAgIHRpdGxlOiAiQmFja3VwIEhERCIsCiAgICAgIHZhbHVlOiAwLAogICAgICB0eXBlOiAiZGlzayIsCiAgICAgIGljb246ICJsdWNpZGU6YXJjaGl2ZSIsCiAgICAgIGRpc2tEYXRhOiB7CiAgICAgICAgY2FwYWNpdHk6IDhlMTIsCiAgICAgICAgLy8gOCBUQgogICAgICAgIG1vZGVsOiAiU2VhZ2F0ZSBJcm9uV29sZiIsCiAgICAgICAgdHlwZTogImhkZCIsCiAgICAgICAgaW9wczogewogICAgICAgICAgcmVhZDogMjEwLAogICAgICAgICAgd3JpdGU6IDE5NQogICAgICAgIH0sCiAgICAgICAgaGVhbHRoOiA0MgogICAgICB9CiAgICB9CiAgXSwgMjgwLCAxNik7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1iYXNlL2RlZXMtaW5wdXQtYmFzZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwp2YXIgX19lc0RlY29yYXRlMTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRCYXNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xheW91dE1vZGVfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWRfZGVjb3JhdG9yczsKICBsZXQgX2Rpc2FibGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgcmV0dXJuIGNsYXNzIERlZXNJbnB1dEJhc2UgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xheW91dE1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kZXNjcmlwdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2xheW91dE1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0TW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0TW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dE1vZGVfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0TW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9sYWJlbFBvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsUG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWxQb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWxQb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbFBvc2l0aW9uX2luaXRpYWxpemVycywgX2xhYmVsUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfa2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImtleSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAia2V5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoua2V5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2tleV9pbml0aWFsaXplcnMsIF9rZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTEzKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTModGhpcywgbnVsbCwgX2Rpc2FibGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXNhYmxlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXNhYmxlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxMyh0aGlzLCBudWxsLCBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGVzY3JpcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRlc2NyaXB0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRlc2NyaXB0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYXlvdXRNb2RlX2luaXRpYWxpemVycywgImF1dG8iKTsKICAgIC8qKgogICAgICogTGF5b3V0IG1vZGUgZm9yIHRoZSBpbnB1dCBjb21wb25lbnQKICAgICAqIC0gdmVydGljYWw6IFRyYWRpdGlvbmFsIGZvcm0gbGF5b3V0IChsYWJlbCBvbiB0b3ApCiAgICAgKiAtIGhvcml6b250YWw6IElubGluZSBsYXlvdXQgKGxhYmVsIHBvc2l0aW9uIGNvbmZpZ3VyYWJsZSkKICAgICAqIC0gYXV0bzogRGV0ZWN0IGZyb20gcGFyZW50IGNvbnRleHQKICAgICAqLwogICAgZ2V0IGxheW91dE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYXlvdXRNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGF5b3V0TW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGF5b3V0TW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhYmVsUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYXlvdXRNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfbGFiZWxQb3NpdGlvbl9pbml0aWFsaXplcnMsICJ0b3AiKSk7CiAgICAvKioKICAgICAqIFBvc2l0aW9uIG9mIHRoZSBsYWJlbCByZWxhdGl2ZSB0byB0aGUgaW5wdXQKICAgICAqLwogICAgZ2V0IGxhYmVsUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbFBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFiZWxQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8qKgogICAgICogQ29tbW9uIHByb3BlcnRpZXMgZm9yIGFsbCBpbnB1dHMKICAgICAqLwogICAgZ2V0IGtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2tleV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGtleSh2YWx1ZTIpIHsKICAgICAgdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9rZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE0KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlcXVpcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXF1aXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTQodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGVzY3JpcHRpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBkZXNjcmlwdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGVzY3JpcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvKioKICAgICAqIENvbW1vbiBzdHlsZXMgZm9yIGFsbCBpbnB1dCBjb21wb25lbnRzCiAgICAgKi8KICAgIHN0YXRpYyBnZXQgYmFzZVN0eWxlcygpIHsKICAgICAgcmV0dXJuIFsKICAgICAgICBpYAogICAgICAgIC8qIENTUyBWYXJpYWJsZXMgZm9yIGNvbnNpc3RlbnQgc3BhY2luZyAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQ6IDhweDsKICAgICAgICAgIC0tZGVlcy1pbnB1dC12ZXJ0aWNhbC1nYXA6IGNhbGModmFyKC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQpICogMik7IC8qIDE2cHggKi8KICAgICAgICAgIC0tZGVlcy1pbnB1dC1ob3Jpem9udGFsLWdhcDogY2FsYyh2YXIoLS1kZWVzLWlucHV0LXNwYWNpbmctdW5pdCkgKiAyKTsgLyogMTZweCAqLwogICAgICAgICAgLS1kZWVzLWlucHV0LWxhYmVsLWdhcDogdmFyKC0tZGVlcy1pbnB1dC1zcGFjaW5nLXVuaXQpOyAvKiA4cHggKi8KICAgICAgICB9CgogICAgICAgIC8qIERlZmF1bHQgdmVydGljYWwgc3RhY2tpbmcgbW9kZSAoZm9yIGZvcm1zKSAqLwogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogdmFyKC0tZGVlcy1pbnB1dC12ZXJ0aWNhbC1nYXApOwogICAgICAgIH0KCiAgICAgICAgLyogTGFzdCBjaGlsZCBpbiBjb250YWluZXIgc2hvdWxkIGhhdmUgbm8gYm90dG9tIG1hcmdpbiAqLwogICAgICAgIDpob3N0KDpsYXN0LWNoaWxkKSB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLyogSG9yaXpvbnRhbCBsYXlvdXQgbW9kZSAtIGFjdGl2YXRlZCBieSBhdHRyaWJ1dGUgKi8KICAgICAgICA6aG9zdChbbGF5b3V0LW1vZGU9Imhvcml6b250YWwiXSkgewogICAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgICAgbWFyZ2luOiAwOwogICAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1kZWVzLWlucHV0LWhvcml6b250YWwtZ2FwKTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGF5b3V0LW1vZGU9Imhvcml6b250YWwiXTpsYXN0LWNoaWxkKSB7CiAgICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgICAgfQoKICAgICAgICAvKiBBdXRvIG1vZGUgLSBpbmhlcml0IGZyb20gcGFyZW50IGRlZXMtZm9ybSBpZiBwcmVzZW50ICovCgogICAgICAgIC8qIExhYmVsIHBvc2l0aW9uIHZhcmlhdGlvbnMgKi8KICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byAxZnI7CiAgICAgICAgICBnYXA6IHZhcigtLWRlZXMtaW5wdXQtbGFiZWwtZ2FwKTsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciBhdXRvOwogICAgICAgICAgZ2FwOiB2YXIoLS1kZWVzLWlucHV0LWxhYmVsLWdhcCk7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgOmhvc3QoW2xhYmVsLXBvc2l0aW9uPSJ0b3AiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgfQoKICAgICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249Im5vbmUiXSkgZGVlcy1sYWJlbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgYAogICAgICBdOwogICAgfQogICAgLyoqCiAgICAgKiBTdWJqZWN0IGZvciB2YWx1ZSBjaGFuZ2VzIHRoYXQgYWxsIGlucHV0cyBzaG91bGQgaW1wbGVtZW50CiAgICAgKi8KICAgIGNoYW5nZVN1YmplY3QgPSAoX19ydW5Jbml0aWFsaXplcnMxNCh0aGlzLCBfZGVzY3JpcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCkpOwogICAgLyoqCiAgICAgKiBDYWxsZWQgd2hlbiB0aGUgZWxlbWVudCBpcyBjb25uZWN0ZWQgdG8gdGhlIERPTQogICAgICogU2V0cyB1cCBsYXlvdXQgbW9kZSBkZXRlY3Rpb24KICAgICAqLwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGV0ZWN0TGF5b3V0TW9kZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBEZXRlY3RzIHRoZSBhcHByb3ByaWF0ZSBsYXlvdXQgbW9kZSBiYXNlZCBvbiBwYXJlbnQgY29udGV4dAogICAgICovCiAgICBkZXRlY3RMYXlvdXRNb2RlKCkgewogICAgICBpZiAodGhpcy5sYXlvdXRNb2RlICE9PSAiYXV0byIpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCB0aGlzLmxheW91dE1vZGUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtID0gdGhpcy5jbG9zZXN0KCJkZWVzLWZvcm0iKTsKICAgICAgaWYgKHBhcmVudEZvcm0gJiYgcGFyZW50Rm9ybS5oYXNBdHRyaWJ1dGUoImhvcml6b250YWwtbGF5b3V0IikpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibGF5b3V0LW1vZGUiLCAiaG9yaXpvbnRhbCIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJsYXlvdXQtbW9kZSIsICJ2ZXJ0aWNhbCIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIGF0dHJpYnV0ZSB3aGVuIHByb3BlcnR5IGNoYW5nZXMKICAgICAqLwogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGF5b3V0TW9kZSIpKSB7CiAgICAgICAgdGhpcy5kZXRlY3RMYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGFiZWxQb3NpdGlvbiIpKSB7CiAgICAgICAgdGhpcy5zZXRBdHRyaWJ1dGUoImxhYmVsLXBvc2l0aW9uIiwgdGhpcy5sYWJlbFBvc2l0aW9uKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdGFuZGFyZCBtZXRob2QgZm9yIGZyZWV6aW5nIGlucHV0IChkaXNhYmxpbmcpCiAgICAgKi8KICAgIGFzeW5jIGZyZWV6ZSgpIHsKICAgICAgdGhpcy5kaXNhYmxlZCA9IHRydWU7CiAgICB9CiAgICAvKioKICAgICAqIFN0YW5kYXJkIG1ldGhvZCBmb3IgdW5mcmVlemluZyBpbnB1dCAoZW5hYmxpbmcpCiAgICAgKi8KICAgIGFzeW5jIHVuZnJlZXplKCkgewogICAgICB0aGlzLmRpc2FibGVkID0gZmFsc2U7CiAgICB9CiAgfTsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWNoZWNrYm94L2RlZXMtaW5wdXQtY2hlY2tib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjaGVja2JveGVzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LWNoZWNrYm94Iik7CiAgY29uc3Qgc2VsZWN0QWxsQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0LWFsbC1idG4iKTsKICBjb25zdCBjbGVhckFsbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NsZWFyLWFsbC1idG4iKTsKICBpZiAoc2VsZWN0QWxsQnRuICYmIGNsZWFyQWxsQnRuKSB7CiAgICBzZWxlY3RBbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3gpID0+IHsKICAgICAgICBpZiAoIWNoZWNrYm94LmRpc2FibGVkICYmIGNoZWNrYm94LmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpKSB7CiAgICAgICAgICBjaGVja2JveC52YWx1ZSA9IHRydWU7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY2xlYXJBbGxCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNoZWNrYm94ZXMuZm9yRWFjaCgoY2hlY2tib3gpID0+IHsKICAgICAgICBpZiAoIWNoZWNrYm94LmRpc2FibGVkICYmIGNoZWNrYm94LmtleT8uc3RhcnRzV2l0aCgiZmVhdHVyZSIpKSB7CiAgICAgICAgICBjaGVja2JveC52YWx1ZSA9IGZhbHNlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICB9Cn19PgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbDpsYXN0LWNoaWxkIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jaGVja2JveC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmhvcml6b250YWwtY2hlY2tib3hlcyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaW50ZXJhY3RpdmUtc2VjdGlvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZm9ybS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NyUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbGlzdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIENoZWNrYm94ZXMifSAuc3VidGl0bGU9JHsiU2ltcGxlIGNoZWNrYm94IGV4YW1wbGVzIHdpdGggdmFyaW91cyBsYWJlbHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkkgYWdyZWUgdG8gdGhlIFRlcm1zIGFuZCBDb25kaXRpb25zIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsidGVybXMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpYmUgdG8gbmV3c2xldHRlciJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmtleT0keyJuZXdzbGV0dGVyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRW5hYmxlIG5vdGlmaWNhdGlvbnMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZWNlaXZlIGVtYWlsIHVwZGF0ZXMgYWJvdXQgeW91ciBhY2NvdW50In0KICAgICAgICAgICAgLmtleT0keyJub3RpZmljYXRpb25zIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJDaGVja2JveCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGNoZWNrYm94IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkRlZmF1bHQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNoZWNrZWQgc3RhdGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgdW5jaGVja2VkIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBjaGVja2VkIn0gCiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIGNoZWNrYm94In0gCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5rZXk9JHsicmVxdWlyZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IkNoZWNrYm94ZXMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1jaGVja2JveGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEEifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkEifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gQiJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25CIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiT3B0aW9uIEMifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7Im9wdGlvbkMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgIC5sYWJlbD0keyJPcHRpb24gRCJ9IAogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJvcHRpb25EIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGZWF0dXJlIFNlbGVjdGlvbiBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiB1c2UgY2FzZSBmb3IgZmVhdHVyZSB0b2dnbGVzIHdpdGggYmF0Y2ggb3BlcmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gaWQ9InNlbGVjdC1hbGwtYnRuIiB0eXBlPSJzZWNvbmRhcnkiPlNlbGVjdCBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJjbGVhci1hbGwtYnRuIiB0eXBlPSJzZWNvbmRhcnkiPkNsZWFyIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3ggCiAgICAgICAgICAgICAgLmxhYmVsPSR7IkRhcmsgTW9kZSBTdXBwb3J0In0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUxIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBOb3RpZmljYXRpb25zIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgICAua2V5PSR7ImZlYXR1cmUyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUd28tRmFjdG9yIEF1dGhlbnRpY2F0aW9uIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlMyJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiQVBJIEFjY2VzcyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlNCJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiQWR2YW5jZWQgQW5hbHl0aWNzIn0gCiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJmZWF0dXJlNSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByaXZhY3kgU2V0dGluZ3MgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJDaGVja2JveGVzIGluIGEgdHlwaWNhbCBmb3JtIGNvbnRleHQifT4KICAgICAgICA8ZGl2IGNsYXNzPSJmb3JtLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Qcml2YWN5IFByZWZlcmVuY2VzPC9oND4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iY2hlY2tib3gtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiU2hhcmUgYW5hbHl0aWNzIGRhdGEifSAKICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIZWxwIHVzIGltcHJvdmUgYnkgc2hhcmluZyBhbm9ueW1vdXMgdXNhZ2UgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAgIAogICAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCAKICAgICAgICAgICAgICAubGFiZWw9JHsiUGVyc29uYWxpemVkIHJlY29tbWVuZGF0aW9ucyJ9IAogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkdldCBzdWdnZXN0aW9ucyBiYXNlZCBvbiB5b3VyIGFjdGl2aXR5In0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJNYXJrZXRpbmcgY29tbXVuaWNhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiUmVjZWl2ZSBwcm9tb3Rpb25hbCBlbWFpbHMgYW5kIHNwZWNpYWwgb2ZmZXJzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAgIC5sYWJlbD0keyJUaGlyZC1wYXJ0eSBpbnRlZ3JhdGlvbnMifSAKICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWxsb3cgYXBwcm92ZWQgcGFydG5lcnMgdG8gYWNjZXNzIHlvdXIgZGF0YSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2hlY2tib3hlcyB0byBzZWUgdmFsdWUgY2hhbmdlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRmVhdHVyZSB0b2dnbGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIEBjaGFuZ2VTdWJqZWN0PSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2NoZWNrYm94LW91dHB1dCIpOwogIGlmIChvdXRwdXQgJiYgZXZlbnQuZGV0YWlsKSB7CiAgICBjb25zdCBpc0NoZWNrZWQgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBGZWF0dXJlIGlzICR7aXNDaGVja2VkID8gImVuYWJsZWQiIDogImRpc2FibGVkIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IAogICAgICAgICAgICAubGFiZWw9JHsiRGVidWcgbW9kZSJ9IAogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZXZlbnQpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZGVidWctb3V0cHV0Iik7CiAgaWYgKG91dHB1dCAmJiBldmVudC5kZXRhaWwpIHsKICAgIGNvbnN0IGlzQ2hlY2tlZCA9IGV2ZW50LmRldGFpbC5nZXRWYWx1ZSgpOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gYERlYnVnIG1vZGU6ICR7aXNDaGVja2VkID8gIk9OIiA6ICJPRkYifWA7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImNoZWNrYm94LW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5GZWF0dXJlIGlzIGRpc2FibGVkPC9kaXY+CiAgICAgICAgICA8ZGl2IGlkPSJkZWJ1Zy1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRlYnVnIG1vZGU6IE9GRjwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1jaGVja2JveC9kZWVzLWlucHV0LWNoZWNrYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0Q2hlY2tib3ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LWNoZWNrYm94IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9kZWNvcmF0b3JzOwogIGxldCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0Q2hlY2tib3gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9pbmRldGVybWluYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTQodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNCh0aGlzLCBudWxsLCBfaW5kZXRlcm1pbmF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbmRldGVybWluYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbmRldGVybWluYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluZGV0ZXJtaW5hdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluZGV0ZXJtaW5hdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5kZXRlcm1pbmF0ZV9pbml0aWFsaXplcnMsIF9pbmRldGVybWluYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRDaGVja2JveDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jODsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luZGV0ZXJtaW5hdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE1KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX2luZGV0ZXJtaW5hdGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGluZGV0ZXJtaW5hdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbmRldGVybWluYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5kZXRlcm1pbmF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5kZXRlcm1pbmF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTUodGhpcywgX2luZGV0ZXJtaW5hdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICB0aGlzLmxhYmVsUG9zaXRpb24gPSAicmlnaHQiOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAgICogewogICAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICB9CgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LXN0YXJ0OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGhlaWdodDogMThweDsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgbWFyZ2luLXRvcDogMXB4OwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLmNoZWNrYm94IHsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveDpmb2N1cy12aXNpYmxlIHsKICAgICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgICB9CgogICAgICAgIC8qIENoZWNrbWFyayB1c2luZyBMdWNpZGUgaWNvbiBzdHlsZSAqLwogICAgICAgIC5jaGVja2JveCAuY2hlY2ttYXJrIHsKICAgICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICAgIHRvcDogNTAlOwogICAgICAgICAgbGVmdDogNTAlOwogICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LnNlbGVjdGVkIC5jaGVja21hcmsgewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CgogICAgICAgIC5jaGVja2JveCAuY2hlY2ttYXJrIHN2ZyB7CiAgICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICAgIGhlaWdodDogMTJweDsKICAgICAgICAgIHN0cm9rZTogd2hpdGU7CiAgICAgICAgICBzdHJva2Utd2lkdGg6IDM7CiAgICAgICAgfQoKICAgICAgICAvKiBEaXNhYmxlZCBzdGF0ZSAqLwogICAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgfQoKICAgICAgICAuY2hlY2tib3guZGlzYWJsZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLyogTGFiZWwgKi8KICAgICAgICAubGFiZWwtY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIH0KCiAgICAgICAgLm1haW5jb250YWluZXI6aG92ZXIgLmNoZWNrYm94LWxhYmVsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAubWFpbmNvbnRhaW5lci5kaXNhYmxlZDpob3ZlciAuY2hlY2tib3gtbGFiZWwgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgfQoKICAgICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iIEBjbGljaz0iJHt0aGlzLnRvZ2dsZVNlbGVjdGVkfSI+CiAgICAgICAgICA8ZGl2IAogICAgICAgICAgICBjbGFzcz0iY2hlY2tib3ggJHt0aGlzLnZhbHVlID8gInNlbGVjdGVkIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IiAKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZUtleWRvd259IgogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUgPyBiMmAKICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImNoZWNrbWFyayI+CiAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjAgNkw5IDE3TDQgMTIiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2UtbGluZWNhcD0icm91bmQiIHN0cm9rZS1saW5lam9pbj0icm91bmQiLz4KICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgYCA6IHRoaXMuaW5kZXRlcm1pbmF0ZSA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjaGVja21hcmsiPgogICAgICAgICAgICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHhtbG5zPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik01IDEySDE5IiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLWxpbmVjYXA9InJvdW5kIiBzdHJva2UtbGluZWpvaW49InJvdW5kIi8+CiAgICAgICAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJjaGVja2JveC1sYWJlbCI+JHt0aGlzLmxhYmVsfTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgPGRpdiBjbGFzcz0iZGVzY3JpcHRpb24tdGV4dCI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyB0b2dnbGVTZWxlY3RlZCgpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9ICF0aGlzLnZhbHVlOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICB9CiAgICBmb2N1cygpIHsKICAgICAgY29uc3QgY2hlY2tib3hEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoZWNrYm94Iik7CiAgICAgIGlmIChjaGVja2JveERpdikgewogICAgICAgIGNoZWNrYm94RGl2LmZvY3VzKCk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIiAiIHx8IGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVTZWxlY3RlZCgpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczE1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRDaGVja2JveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGNvbG9ycy5qcwp2YXIgY29sb3JzX2V4cG9ydHMgPSB7fTsKX19leHBvcnQoY29sb3JzX2V4cG9ydHMsIHsKICBicmlnaHQ6ICgpID0+IGJyaWdodCwKICBkYXJrOiAoKSA9PiBkYXJrCn0pOwp2YXIgZGFyayA9IHsKICBibHVlOiAiIzAwNTBiOSIsCiAgYmx1ZUFjdGl2ZTogIiMwMDY5ZjIiLAogIGJsdWVNdXRlZDogIiMwMTI0NTIiLAogIHRleHQ6ICIjZmZmZmZmIgp9Owp2YXIgYnJpZ2h0ID0gewogIGJsdWU6ICIjMDA1MGI5IiwKICBibHVlQWN0aXZlOiAiIzAwNjlmMiIsCiAgYmx1ZU11dGVkOiAiIzAwNjlmMiIsCiAgdGV4dDogIiMzMzMzMzMiCn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9kYWwvZGVlcy1tb2RhbC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXNlY3Rpb24gaDMgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tc2VjdGlvbiBwIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NjYiLCAiIzk5OSIpfTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgxNTBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkhlYWRlciBCdXR0b25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIG9wdGlvbmFsIGhlYWRlciBidXR0b25zIGZvciBoZWxwIGFuZCBjbG9zaW5nLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIldpdGggSGVscCBCdXR0b24iLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6IGFzeW5jICgpID0+IHsKICAgICAgY29uc3QgaGVscE1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgIGhlYWRpbmc6ICJIZWxwIiwKICAgICAgICB3aWR0aDogInNtYWxsIiwKICAgICAgICBzaG93Q2xvc2VCdXR0b246IHRydWUsCiAgICAgICAgc2hvd0hlbHBCdXR0b246IGZhbHNlLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgICAgICA8cD5UaGlzIGlzIHRoZSBoZWxwIGNvbnRlbnQgZm9yIHRoZSBtb2RhbC48L3A+CiAgICAgICAgICAgICAgICAgIDxwPllvdSBjYW4gcHJvdmlkZSBjb250ZXh0LXNwZWNpZmljIGhlbHAgaGVyZS48L3A+CiAgICAgICAgICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbewogICAgICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICAgICAgfV0KICAgICAgfSk7CiAgICB9LAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYSBoZWxwIGJ1dHRvbiBpbiB0aGUgaGVhZGVyLiBDbGljayBpdCB0byBzZWUgaGVscCBjb250ZW50LjwvcD4KICAgICAgICAgICAgICA8cD5UaGUgY2xvc2UgYnV0dG9uIGlzIGFsc28gdmlzaWJsZSBieSBkZWZhdWx0LjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiT0siLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5XaXRoIEhlbHAgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJObyBDbG9zZSBCdXR0b24iLAogICAgc2hvd0Nsb3NlQnV0dG9uOiBmYWxzZSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgaGFzIG5vIGNsb3NlIGJ1dHRvbiBpbiB0aGUgaGVhZGVyLjwvcD4KICAgICAgICAgICAgICA8cD5Zb3UgbXVzdCB1c2UgdGhlIGFjdGlvbiBidXR0b25zIG9yIGNsaWNrIG91dHNpZGUgdG8gY2xvc2UgaXQuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk5vIENsb3NlIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQm90aCBCdXR0b25zIiwKICAgIHNob3dIZWxwQnV0dG9uOiB0cnVlLAogICAgc2hvd0Nsb3NlQnV0dG9uOiB0cnVlLAogICAgb25IZWxwOiAoKSA9PiBhbGVydCgiSGVscCBjbGlja2VkISIpLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgYm90aCBoZWxwIGFuZCBjbG9zZSBidXR0b25zLjwvcD4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiRG9uZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkJvdGggQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiQ2xlYW4gSGVhZGVyIiwKICAgIHNob3dDbG9zZUJ1dHRvbjogZmFsc2UsCiAgICBzaG93SGVscEJ1dHRvbjogZmFsc2UsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGNsZWFuIGhlYWRlciB3aXRoIG5vIGJ1dHRvbnMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkNsZWFuIEhlYWRlcjwvZGVlcy1idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgIDxoMz5Nb2RhbCBXaWR0aCBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCB3aWR0aHM6IHNtYWxsLCBtZWRpdW0sIGxhcmdlLCBmdWxsc2NyZWVuLCBvciBjdXN0b20gcGl4ZWwgdmFsdWVzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIlNtYWxsIE1vZGFsIiwKICAgIHdpZHRoOiAic21hbGwiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHNtYWxsIG1vZGFsIHdpdGggYSB3aWR0aCBvZiAzODBweC4gUGVyZmVjdCBmb3Igc2ltcGxlIGNvbmZpcm1hdGlvbnMgb3IgYnJpZWYgbWVzc2FnZXMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJPSyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlNtYWxsIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJNZWRpdW0gTW9kYWwgKERlZmF1bHQpIiwKICAgIHdpZHRoOiAibWVkaXVtIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJVc2VybmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiRW1haWwifSAuaW5wdXRUeXBlPSR7ImVtYWlsIn0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQYXNzd29yZCJ9IC5pbnB1dFR5cGU9JHsicGFzc3dvcmQifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2lnbiBVcCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk1lZGl1bSBNb2RhbDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTGFyZ2UgTW9kYWwiLAogICAgd2lkdGg6ICJsYXJnZSIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8aDQ+V2lkZSBDb250ZW50IEFyZWE8L2g0PgogICAgICAgICAgICAgIDxwPlRoaXMgbGFyZ2UgbW9kYWwgaXMgODAwcHggd2lkZSBhbmQgcGVyZmVjdCBmb3IgZGlzcGxheWluZyBtb3JlIGNvbXBsZXggY29udGVudCBsaWtlIGZvcm1zIHdpdGggbXVsdGlwbGUgY29sdW1ucywgdGFibGVzLCBvciBkZXRhaWxlZCBpbmZvcm1hdGlvbi48L3A+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZ3JpZDsgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgMWZyOyBnYXA6IDE2cHg7IG1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZpcnN0IE5hbWUifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7Ikxhc3QgTmFtZSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQ29tcGFueSJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUG9zaXRpb24ifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCwKICAgIG1lbnVPcHRpb25zOiBbewogICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2F2ZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkxhcmdlIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJGdWxsc2NyZWVuIEVkaXRvciIsCiAgICB3aWR0aDogImZ1bGxzY3JlZW4iLAogICAgc2hvd0hlbHBCdXR0b246IHRydWUsCiAgICBvbkhlbHA6IGFzeW5jICgpID0+IHsKICAgICAgYWxlcnQoIkluIGEgcmVhbCBhcHAsIHRoaXMgd291bGQgc2hvdyBlZGl0b3IgZG9jdW1lbnRhdGlvbiIpOwogICAgfSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxoND5GdWxsc2NyZWVuIEV4cGVyaWVuY2Ugd2l0aCBIZWFkZXIgQ29udHJvbHM8L2g0PgogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgdGFrZXMgdXAgYWxtb3N0IHRoZSBlbnRpcmUgdmlld3BvcnQgd2l0aCBhIDIwcHggbWFyZ2luIG9uIGFsbCBzaWRlcy4gVGhlIGhlYWRlciBidXR0b25zIGFyZSBwYXJ0aWN1bGFybHkgdXNlZnVsIGluIGZ1bGxzY3JlZW4gbW9kZS48L3A+CiAgICAgICAgICAgICAgPHA+VGhlIGNvbnRlbnQgYXJlYSBjYW4gYmUgYXMgdGFsbCBhcyBuZWVkZWQgYW5kIHdpbGwgc2Nyb2xsIGlmIG5lY2Vzc2FyeS48L3A+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iaGVpZ2h0OiAyMDBweDsgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmMGYwZjAiLCAiIzJhMmEyYSIpfTsgYm9yZGVyLXJhZGl1czogOHB4OyBkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsgbWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OSIsICIjNjY2Iil9Ij5MYXJnZSBjb250ZW50IGFyZWE8L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIlNhdmUiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5GdWxsc2NyZWVuIE1vZGFsPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkN1c3RvbSBXaWR0aCAmIENvbnN0cmFpbnRzPC9oMz4KICAgICAgPHA+WW91IGNhbiBhbHNvIHNldCBjdXN0b20gcGl4ZWwgd2lkdGhzIGFuZCBtaW4vbWF4IGNvbnN0cmFpbnRzLjwvcD4KICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIkN1c3RvbSBXaWR0aCAoNzAwcHgpIiwKICAgIHdpZHRoOiA3MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIGhhcyBhIGN1c3RvbSB3aWR0aCBvZiBleGFjdGx5IDcwMCBwaXhlbHMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkN1c3RvbSA3MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBNYXggV2lkdGgiLAogICAgd2lkdGg6ICJsYXJnZSIsCiAgICBtYXhXaWR0aDogNjAwLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBpcyBzZXQgdG8gJ2xhcmdlJyBidXQgY29uc3RyYWluZWQgYnkgYSBtYXhXaWR0aCBvZiA2MDBweC48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIkdvdCBpdCIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19Pk1heCBXaWR0aCA2MDBweDwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiV2l0aCBNaW4gV2lkdGgiLAogICAgd2lkdGg6IDMwMCwKICAgIG1pbldpZHRoOiA0MDAsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgICA8cD5UaGlzIG1vZGFsIHdpZHRoIGlzIHNldCB0byAzMDBweCBidXQgaGFzIGEgbWluV2lkdGggb2YgNDAwcHgsIHNvIGl0IHdpbGwgYmUgNDAwcHggd2lkZS48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW3sKICAgICAgbmFtZTogIk9LIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfV0KICB9KTsKfX0+TWluIFdpZHRoIDQwMHB4PC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPkJ1dHRvbiBWYXJpYXRpb25zPC9oMz4KICAgICAgPHA+TW9kYWxzIGNhbiBoYXZlIGRpZmZlcmVudCBidXR0b24gY29uZmlndXJhdGlvbnMgd2l0aCBwcm9wZXIgc3BhY2luZy48L3A+CiAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJNdWx0aXBsZSBBY3Rpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRoaXMgbW9kYWwgZGVtb25zdHJhdGVzIG11bHRpcGxlIGJ1dHRvbnMgd2l0aCBwcm9wZXIgc3BhY2luZyBiZXR3ZWVuIHRoZW0uPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9LCB7CiAgICAgIG5hbWU6ICJTYXZlIENoYW5nZXMiLAogICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gbW9kYWwuZGVzdHJveSgpCiAgICB9XQogIH0pOwp9fT5UaHJlZSBCdXR0b25zPC9kZWVzLWJ1dHRvbj4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrPSR7KCkgPT4gewogIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgIGhlYWRpbmc6ICJTaW5nbGUgQWN0aW9uIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlNvbWV0aW1lcyB5b3UganVzdCBuZWVkIG9uZSBidXR0b24uPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJBY2tub3dsZWRnZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlNpbmdsZSBCdXR0b248L2RlZXMtYnV0dG9uPgogICAgICAgIAogICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgaGVhZGluZzogIk5vIEFjdGlvbnMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgPHA+VGhpcyBtb2RhbCBoYXMgbm8gYm90dG9tIGJ1dHRvbnMuIFVzZSB0aGUgWCBidXR0b24gb3IgY2xpY2sgb3V0c2lkZSB0byBjbG9zZS48L3A+CiAgICAgICAgICAgICAgPHAgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjOTk5Iil9OyI+VGhpcyBpcyB1c2VmdWwgZm9yIGluZm9ybWF0aW9uYWwgbW9kYWxzIHRoYXQgZG9uJ3QgcmVxdWlyZSB1c2VyIGFjdGlvbi48L3A+CiAgICAgICAgICAgIGAsCiAgICBtZW51T3B0aW9uczogW10KICB9KTsKfX0+Tm8gQnV0dG9uczwvZGVlcy1idXR0b24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiTG9uZyBCdXR0b24gTGFiZWxzIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICAgIDxwPlRlc3RpbmcgYnV0dG9uIGxheW91dCB3aXRoIGxvbmdlciBsYWJlbHMuPC9wPgogICAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJEaXNjYXJkIEFsbCBDaGFuZ2VzIiwKICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWwpID0+IG1vZGFsLmRlc3Ryb3koKQogICAgfSwgewogICAgICBuYW1lOiAiU2F2ZSBhbmQgQ29udGludWUgRWRpdGluZyIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PkxvbmcgTGFiZWxzPC9kZWVzLWJ1dHRvbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlJlc3BvbnNpdmUgQmVoYXZpb3I8L2gzPgogICAgICA8cD5BbGwgbW9kYWxzIGF1dG9tYXRpY2FsbHkgYmVjb21lIGZ1bGwtd2lkdGggb24gbW9iaWxlIGRldmljZXMgKDwgNzY4cHggdmlld3BvcnQgd2lkdGgpIGZvciBiZXR0ZXIgdXNhYmlsaXR5LjwvcD4KICAgICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICBoZWFkaW5nOiAiUmVzcG9uc2l2ZSBNb2RhbCIsCiAgICB3aWR0aDogImxhcmdlIiwKICAgIHNob3dIZWxwQnV0dG9uOiB0cnVlLAogICAgb25IZWxwOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCByZXF1ZXN0ZWQgZm9yIHJlc3BvbnNpdmUgbW9kYWwiKSwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8cD5SZXNpemUgeW91ciBicm93c2VyIHdpbmRvdyB0byBzZWUgaG93IHRoaXMgbW9kYWwgYWRhcHRzLiBPbiBtb2JpbGUgdmlld3BvcnRzLCBpdCB3aWxsIGF1dG9tYXRpY2FsbHkgdGFrZSB0aGUgZnVsbCB3aWR0aCBtaW51cyBtYXJnaW5zLjwvcD4KICAgICAgICAgICAgPHA+VGhlIGhlYWRlciBidXR0b25zIHJlbWFpbiBhY2Nlc3NpYmxlIGF0IGFsbCB2aWV3cG9ydCBzaXplcy48L3A+CiAgICAgICAgICBgLAogICAgbWVudU9wdGlvbnM6IFt7CiAgICAgIG5hbWU6ICJDbG9zZSIsCiAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiBtb2RhbC5kZXN0cm95KCkKICAgIH1dCiAgfSk7Cn19PlRlc3QgUmVzcG9uc2l2ZTwvZGVlcy1idXR0b24+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1tb2RhbC9kZWVzLW1vZGFsLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTE1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMxNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc01vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudU9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVPcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudU9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZHRoX2RlY29yYXRvcnM7CiAgbGV0IF93aWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhXaWR0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX21pbldpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dDbG9zZUJ1dHRvbl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0Nsb3NlQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hlbHBCdXR0b25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93SGVscEJ1dHRvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb25IZWxwX2RlY29yYXRvcnM7CiAgbGV0IF9vbkhlbHBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9yczsKICBsZXQgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVGdWxsc2NyZWVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50UGFkZGluZ19kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFBhZGRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50UGFkZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kYWxaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21vZGFsWkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vZGFsMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2NvbnRlbnRfZGVjb3JhdG9ycyA9IFtyNSh7fSldOwogICAgICBfbWVudU9wdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSh7fSldOwogICAgICBfd2lkdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbldpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfc2hvd0Nsb3NlQnV0dG9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3Nob3dIZWxwQnV0dG9uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX29uSGVscF9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9tb2JpbGVGdWxsc2NyZWVuX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRQYWRkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbW9kYWxaSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9jb250ZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50X2luaXRpYWxpemVycywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWVudU9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWVudU9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVPcHRpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZW51T3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51T3B0aW9uc19pbml0aWFsaXplcnMsIF9tZW51T3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF93aWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3aWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dpZHRoX2luaXRpYWxpemVycywgX3dpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21heFdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFdpZHRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4V2lkdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4V2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWF4V2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNSh0aGlzLCBudWxsLCBfbWluV2lkdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pbldpZHRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbldpZHRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5XaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5XaWR0aF9pbml0aWFsaXplcnMsIF9taW5XaWR0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9zaG93Q2xvc2VCdXR0b25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0Nsb3NlQnV0dG9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93Q2xvc2VCdXR0b24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0Nsb3NlQnV0dG9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q2xvc2VCdXR0b24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0Nsb3NlQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9zaG93SGVscEJ1dHRvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93SGVscEJ1dHRvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0hlbHBCdXR0b24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hlbHBCdXR0b24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dIZWxwQnV0dG9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgX3Nob3dIZWxwQnV0dG9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX29uSGVscF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvbkhlbHAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9uSGVscCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vbkhlbHAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm9uSGVscCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vbkhlbHBfaW5pdGlhbGl6ZXJzLCBfb25IZWxwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21vYmlsZUZ1bGxzY3JlZW5fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9iaWxlRnVsbHNjcmVlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibW9iaWxlRnVsbHNjcmVlbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVGdWxsc2NyZWVuLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2JpbGVGdWxsc2NyZWVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21vYmlsZUZ1bGxzY3JlZW5faW5pdGlhbGl6ZXJzLCBfbW9iaWxlRnVsbHNjcmVlbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE1KHRoaXMsIG51bGwsIF9jb250ZW50UGFkZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50UGFkZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudFBhZGRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFBhZGRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRQYWRkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRQYWRkaW5nX2luaXRpYWxpemVycywgX2NvbnRlbnRQYWRkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTUodGhpcywgbnVsbCwgX21vZGFsWkluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1vZGFsWkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RhbFpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2RhbFpJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubW9kYWxaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kYWxaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9kYWxaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNNb2RhbDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jOTsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KG9wdGlvbnNBcmcpIHsKICAgICAgY29uc3QgYm9keTMgPSBkb2N1bWVudC5ib2R5OwogICAgICBjb25zdCBtb2RhbCA9IG5ldyBEZWVzTW9kYWwyKCk7CiAgICAgIG1vZGFsLmhlYWRpbmcgPSBvcHRpb25zQXJnLmhlYWRpbmc7CiAgICAgIG1vZGFsLmNvbnRlbnQgPSBvcHRpb25zQXJnLmNvbnRlbnQ7CiAgICAgIG1vZGFsLm1lbnVPcHRpb25zID0gb3B0aW9uc0FyZy5tZW51T3B0aW9uczsKICAgICAgaWYgKG9wdGlvbnNBcmcud2lkdGgpCiAgICAgICAgbW9kYWwud2lkdGggPSBvcHRpb25zQXJnLndpZHRoOwogICAgICBpZiAob3B0aW9uc0FyZy5tYXhXaWR0aCkKICAgICAgICBtb2RhbC5tYXhXaWR0aCA9IG9wdGlvbnNBcmcubWF4V2lkdGg7CiAgICAgIGlmIChvcHRpb25zQXJnLm1pbldpZHRoKQogICAgICAgIG1vZGFsLm1pbldpZHRoID0gb3B0aW9uc0FyZy5taW5XaWR0aDsKICAgICAgaWYgKG9wdGlvbnNBcmcuc2hvd0Nsb3NlQnV0dG9uICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuc2hvd0Nsb3NlQnV0dG9uID0gb3B0aW9uc0FyZy5zaG93Q2xvc2VCdXR0b247CiAgICAgIGlmIChvcHRpb25zQXJnLnNob3dIZWxwQnV0dG9uICE9PSB2b2lkIDApCiAgICAgICAgbW9kYWwuc2hvd0hlbHBCdXR0b24gPSBvcHRpb25zQXJnLnNob3dIZWxwQnV0dG9uOwogICAgICBpZiAob3B0aW9uc0FyZy5vbkhlbHApCiAgICAgICAgbW9kYWwub25IZWxwID0gb3B0aW9uc0FyZy5vbkhlbHA7CiAgICAgIGlmIChvcHRpb25zQXJnLm1vYmlsZUZ1bGxzY3JlZW4gIT09IHZvaWQgMCkKICAgICAgICBtb2RhbC5tb2JpbGVGdWxsc2NyZWVuID0gb3B0aW9uc0FyZy5tb2JpbGVGdWxsc2NyZWVuOwogICAgICBpZiAob3B0aW9uc0FyZy5jb250ZW50UGFkZGluZyAhPT0gdm9pZCAwKQogICAgICAgIG1vZGFsLmNvbnRlbnRQYWRkaW5nID0gb3B0aW9uc0FyZy5jb250ZW50UGFkZGluZzsKICAgICAgbW9kYWwud2luZG93TGF5ZXIgPSBhd2FpdCBEZWVzV2luZG93TGF5ZXIuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgYmx1cjogdHJ1ZQogICAgICB9KTsKICAgICAgbW9kYWwud2luZG93TGF5ZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgbW9kYWwuZGVzdHJveSgpOwogICAgICB9KTsKICAgICAgYm9keTMuYXBwZW5kKG1vZGFsLndpbmRvd0xheWVyKTsKICAgICAgYm9keTMuYXBwZW5kKG1vZGFsKTsKICAgICAgbW9kYWwubW9kYWxaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKG1vZGFsLCBtb2RhbC5tb2RhbFpJbmRleCk7CiAgICAgIHJldHVybiBtb2RhbDsKICAgIH0KICAgICNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9oZWFkaW5nX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBjb250ZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX2NvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tZW51T3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgbWVudU9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNtZW51T3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWVudU9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF93aWR0aF9pbml0aWFsaXplcnMsICJtZWRpdW0iKSk7CiAgICBnZXQgd2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3aWR0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiN3aWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21heFdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfd2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tYXhXaWR0aF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1heFdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4V2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5XaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21heFdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWluV2lkdGhfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtaW5XaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbldpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0Nsb3NlQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfbWluV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9zaG93Q2xvc2VCdXR0b25faW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0Nsb3NlQnV0dG9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0Nsb3NlQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0Nsb3NlQnV0dG9uKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q2xvc2VCdXR0b25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93SGVscEJ1dHRvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dDbG9zZUJ1dHRvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX3Nob3dIZWxwQnV0dG9uX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93SGVscEJ1dHRvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hlbHBCdXR0b24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dIZWxwQnV0dG9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb25IZWxwX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfc2hvd0hlbHBCdXR0b25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9vbkhlbHBfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBvbkhlbHAoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvbkhlbHBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvbkhlbHAodmFsdWUyKSB7CiAgICAgIHRoaXMuI29uSGVscF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZUZ1bGxzY3JlZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9vbkhlbHBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tb2JpbGVGdWxsc2NyZWVuX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtb2JpbGVGdWxsc2NyZWVuKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9iaWxlRnVsbHNjcmVlbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZUZ1bGxzY3JlZW4odmFsdWUyKSB7CiAgICAgIHRoaXMuI21vYmlsZUZ1bGxzY3JlZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vYmlsZUZ1bGxzY3JlZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9jb250ZW50UGFkZGluZ19pbml0aWFsaXplcnMsIDE2KSk7CiAgICBnZXQgY29udGVudFBhZGRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRlbnRQYWRkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50UGFkZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vZGFsWkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxNih0aGlzLCBfY29udGVudFBhZGRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE2KHRoaXMsIF9tb2RhbFpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vZGFsWkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RhbFpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9kYWxaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgLm1vZGFsQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgd2lkdGg6IDEwMHZ3OwogICAgICAgIGhlaWdodDogMTAwdmg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CiAgICAgIC5tb2RhbCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgwLjk1KTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEyMHB4OwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0MHB4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBtYXJnaW46IDIwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC8qIFdpZHRoIHZhcmlhdGlvbnMgKi8KICAgICAgLm1vZGFsLndpZHRoLXNtYWxsIHsKICAgICAgICB3aWR0aDogMzgwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1tZWRpdW0gewogICAgICAgIHdpZHRoOiA1NjBweDsKICAgICAgfQoKICAgICAgLm1vZGFsLndpZHRoLWxhcmdlIHsKICAgICAgICB3aWR0aDogODAwcHg7CiAgICAgIH0KCiAgICAgIC5tb2RhbC53aWR0aC1mdWxsc2NyZWVuIHsKICAgICAgICB3aWR0aDogY2FsYygxMDB2dyAtIDQwcHgpOwogICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDQwcHgpOwogICAgICAgIG1heC1oZWlnaHQ6IGNhbGMoMTAwdmggLSA0MHB4KTsKICAgICAgfQoKICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgLm1vZGFsIHsKICAgICAgICAgIHdpZHRoOiBjYWxjKDEwMHZ3IC0gNDBweCkgIWltcG9ydGFudDsKICAgICAgICAgIG1heC13aWR0aDogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAvKiBBbGxvdyBmdWxsIGhlaWdodCBvbiBtb2JpbGUgd2hlbiBjb250ZW50IG5lZWRzIGl0ICovCiAgICAgICAgLm1vZGFsQ29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDEwcHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5tb2RhbCB7CiAgICAgICAgICBtYXJnaW46IDEwcHg7CiAgICAgICAgICBtYXgtaGVpZ2h0OiBjYWxjKDEwMHZoIC0gMjBweCk7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC8qIEZ1bGwgc2NyZWVuIG1vZGUgb24gbW9iaWxlICovCiAgICAgICAgLm1vZGFsLm1vYmlsZS1mdWxsc2NyZWVuIHsKICAgICAgICAgIHdpZHRoOiAxMDB2dyAhaW1wb3J0YW50OwogICAgICAgICAgaGVpZ2h0OiAxMDB2aCAhaW1wb3J0YW50OwogICAgICAgICAgbWF4LWhlaWdodDogMTAwdmggIWltcG9ydGFudDsKICAgICAgICAgIG1hcmdpbjogMDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDA7CiAgICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgfQogICAgICB9CgogICAgICAubW9kYWwuc2hvdyB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMHB4KSBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLm1vZGFsLnNob3cucHJlZGVzdHJveSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyB7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDhweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDI4cHg7CiAgICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAubW9kYWwgLmhlYWRpbmcgLmhlYWRlci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuaGVhZGluZyAuaGVhZGVyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLm1vZGFsIC5oZWFkaW5nIC5oZWFkaW5nLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgNDBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLm1vZGFsIC5jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLm1vZGFsIC5ib3R0b21CdXR0b25zIC5ib3R0b21CdXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzUyNTI1YiIpfTsKICAgICAgfQogICAgICAubW9kYWwgLmJvdHRvbUJ1dHRvbnMgLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItcmlnaHQ6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjMjU2M2ViIil9OwogICAgICB9CiAgICAgIC5tb2RhbCAuYm90dG9tQnV0dG9ucyAuYm90dG9tQnV0dG9uLnByaW1hcnk6YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFkNGVkOCIsICIjMWQ0ZWQ4Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzFkNGVkOCIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3Qgd2lkdGhDbGFzcyA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAic3RyaW5nIiA/IGB3aWR0aC0ke3RoaXMud2lkdGh9YCA6ICIiOwogICAgICBjb25zdCBjdXN0b21XaWR0aCA9IHR5cGVvZiB0aGlzLndpZHRoID09PSAibnVtYmVyIiA/IGAke3RoaXMud2lkdGh9cHhgIDogIiI7CiAgICAgIGNvbnN0IG1heFdpZHRoU3R5bGUgPSB0aGlzLm1heFdpZHRoID8gYCR7dGhpcy5tYXhXaWR0aH1weGAgOiAiIjsKICAgICAgY29uc3QgbWluV2lkdGhTdHlsZSA9IHRoaXMubWluV2lkdGggPyBgJHt0aGlzLm1pbldpZHRofXB4YCA6ICIiOwogICAgICBjb25zdCBtb2JpbGVGdWxsc2NyZWVuQ2xhc3MgPSB0aGlzLm1vYmlsZUZ1bGxzY3JlZW4gPyAibW9iaWxlLWZ1bGxzY3JlZW4iIDogIiI7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7Y3VzdG9tV2lkdGggPyBgLm1vZGFsIHsgd2lkdGg6ICR7Y3VzdG9tV2lkdGh9OyB9YCA6ICIifQogICAgICAgICR7bWF4V2lkdGhTdHlsZSA/IGAubW9kYWwgeyBtYXgtd2lkdGg6ICR7bWF4V2lkdGhTdHlsZX07IH1gIDogIiJ9CiAgICAgICAgJHttaW5XaWR0aFN0eWxlID8gYC5tb2RhbCB7IG1pbi13aWR0aDogJHttaW5XaWR0aFN0eWxlfTsgfWAgOiAiIn0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibW9kYWxDb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlT3V0c2lkZUNsaWNrfSBzdHlsZT0iei1pbmRleDogJHt0aGlzLm1vZGFsWkluZGV4fSI+CiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwgJHt3aWR0aENsYXNzfSAke21vYmlsZUZ1bGxzY3JlZW5DbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmctdGV4dCI+JHt0aGlzLmhlYWRpbmd9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b25zIj4KICAgICAgICAgICAgICAke3RoaXMuc2hvd0hlbHBCdXR0b24gPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1idXR0b24iIEBjbGljaz0ke3RoaXMuaGFuZGxlSGVscH0gdGl0bGU9IkhlbHAiPgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpoZWxwQ2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgJHt0aGlzLnNob3dDbG9zZUJ1dHRvbiA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5kZXN0cm95KCl9IHRpdGxlPSJDbG9zZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiIHN0eWxlPSJwYWRkaW5nOiAke3RoaXMuY29udGVudFBhZGRpbmd9cHg7Ij4ke3RoaXMuY29udGVudH08L2Rpdj4KICAgICAgICAgICR7dGhpcy5tZW51T3B0aW9ucy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImJvdHRvbUJ1dHRvbnMiPgogICAgICAgICAgICAgICR7dGhpcy5tZW51T3B0aW9ucy5tYXAoKGFjdGlvbkFyZywgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQnV0dG9uICR7aW5kZXgyID09PSB0aGlzLm1lbnVPcHRpb25zLmxlbmd0aCAtIDEgPyAicHJpbWFyeSIgOiAiIn0gJHthY3Rpb25BcmcubmFtZSA9PT0gIk9LIiA/ICJvayIgOiAiIn0iIEBjbGljaz0keygpID0+IHsKICAgICAgICBhY3Rpb25BcmcuYWN0aW9uKHRoaXMpOwogICAgICB9fT4ke2FjdGlvbkFyZy5uYW1lfTwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICB3aW5kb3dMYXllciA9IF9fcnVuSW5pdGlhbGl6ZXJzMTYodGhpcywgX21vZGFsWkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzApOwogICAgICBjb25zdCBtb2RhbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWwiKTsKICAgICAgbW9kYWwuY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgYXN5bmMgaGFuZGxlT3V0c2lkZUNsaWNrKGV2ZW50QXJnKSB7CiAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtb2RhbENvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubW9kYWxDb250YWluZXIiKTsKICAgICAgaWYgKGV2ZW50QXJnLnRhcmdldCA9PT0gbW9kYWxDb250YWluZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVzdHJveSgpIHsKICAgICAgY29uc3QgZG9tdG9vbHMgPSBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgbW9kYWwgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1vZGFsIik7CiAgICAgIG1vZGFsLmNsYXNzTGlzdC5hZGQoInByZWRlc3Ryb3kiKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigyMDApOwogICAgICBkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHRoaXMpOwogICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUhlbHAoKSB7CiAgICAgIGlmICh0aGlzLm9uSGVscCkgewogICAgICAgIGF3YWl0IHRoaXMub25IZWxwKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMCA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHsiYSBsYWJlbCJ9PjwvZGVlcy1sYWJlbD4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWxhYmVsL2RlZXMtbGFiZWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMTYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTGFiZWwgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWxhYmVsIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rlc2NyaXB0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVxdWlyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzTGFiZWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcmVxdWlyZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNih0aGlzLCBudWxsLCBfZGVzY3JpcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGVzY3JpcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRlc2NyaXB0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRlc2NyaXB0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kZXNjcmlwdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kZXNjcmlwdGlvbl9pbml0aWFsaXplcnMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE2KHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTGFiZWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxMDsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkZXNjcmlwdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxNyh0aGlzLCBfZGVzY3JpcHRpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBkZXNjcmlwdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGVzY3JpcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rlc2NyaXB0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVxdWlyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE3KHRoaXMsIF9kZXNjcmlwdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX3JlcXVpcmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByZXF1aXJlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVxdWlyZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubGFiZWwgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1hcmdpbi1ib3R0b206IDZweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5yZXF1aXJlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgIH0KCiAgICAgIGRlZXMtaWNvbiB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMXB4KTsKICAgICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLmxhYmVsID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxhYmVsIj4KICAgICAgICAgICAgICAke3RoaXMubGFiZWx9CiAgICAgICAgICAgICAgJHt0aGlzLnJlcXVpcmVkID8gYjJgPHNwYW4gY2xhc3M9InJlcXVpcmVkIj4qPC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTppbmZvIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtc3BlZWNoYnViYmxlIC50ZXh0PSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICAgICAgICAgICAgICAgICAgYCA6IGIyYGB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6IGIyYGB9CiAgICBgOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTcodGhpcywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNMYWJlbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tb25hY28vdmVyc2lvbi5qcwp2YXIgTU9OQUNPX1ZFUlNJT04gPSAiMC41NS4xIjsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtbW9uYWNvL2RlZXMtd29ya3NwYWNlLW1vbmFjby5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUxNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMTggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VNb25hY28gPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9jb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2xhbmd1YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9maWxlUGF0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50U3ViamVjdF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFN1YmplY3RfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZFdyYXBfZGVjb3JhdG9yczsKICBsZXQgX3dvcmRXcmFwX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZU1vbmFjbzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jb250ZW50X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYW5ndWFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2NvbnRlbnRTdWJqZWN0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF93b3JkV3JhcF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2NvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF9sYW5ndWFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYW5ndWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFuZ3VhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFuZ3VhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhbmd1YWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcodGhpcywgbnVsbCwgX2ZpbGVQYXRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWxlUGF0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWxlUGF0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxNyh0aGlzLCBudWxsLCBfY29udGVudFN1YmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29udGVudFN1YmplY3QiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRTdWJqZWN0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRTdWJqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb250ZW50U3ViamVjdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIF9jb250ZW50U3ViamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE3KHRoaXMsIG51bGwsIF93b3JkV3JhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3b3JkV3JhcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZFdyYXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud29yZFdyYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndvcmRXcmFwID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRXcmFwX2luaXRpYWxpemVycywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYDxkZWVzLXdvcmtzcGFjZS1tb25hY28+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+YDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiV29ya3NwYWNlIjsKICAgIC8vIFNUQVRJQwogICAgc3RhdGljIG1vbmFjb0RlZmVycmVkOwogICAgLy8gSU5TVEFOQ0UKICAgIGVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI2NvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRfaW5pdGlhbGl6ZXJzLCAiZnVuY3Rpb24gaGVsbG8oKSB7XG4JYWxlcnQoJ0hlbGxvIHdvcmxkIScpO1xufSIpOwogICAgZ2V0IGNvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfY29udGVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2xhbmd1YWdlX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKSk7CiAgICBnZXQgbGFuZ3VhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhbmd1YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9maWxlUGF0aF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZmlsZVBhdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbGVQYXRoKHZhbHVlMikgewogICAgICB0aGlzLiNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRTdWJqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE4KHRoaXMsIF9jb250ZW50U3ViamVjdF9pbml0aWFsaXplcnMsIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSkpOwogICAgZ2V0IGNvbnRlbnRTdWJqZWN0KCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50U3ViamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFN1YmplY3RfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX2NvbnRlbnRTdWJqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOCh0aGlzLCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCAib2ZmIikpOwogICAgZ2V0IHdvcmRXcmFwKCkgewogICAgICByZXR1cm4gdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3b3JkV3JhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZFdyYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTgodGhpcywgX3dvcmRXcmFwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBpc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgfQoKICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgI2NvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoImNvbnRhaW5lciIpOwogICAgICBjb25zdCBtb25hY29DZG5CYXNlID0gYGh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vbW9uYWNvLWVkaXRvckAke01PTkFDT19WRVJTSU9OfWA7CiAgICAgIGlmICghRGVlc1dvcmtzcGFjZU1vbmFjbzIubW9uYWNvRGVmZXJyZWQpIHsKICAgICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZCA9IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHByb21pc2UuZGVmZXIoKTsKICAgICAgICBjb25zdCBzY3JpcHRVcmwgPSBgJHttb25hY29DZG5CYXNlfS9taW4vdnMvbG9hZGVyLmpzYDsKICAgICAgICBjb25zdCBzY3JpcHQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTsKICAgICAgICBzY3JpcHQuc3JjID0gc2NyaXB0VXJsOwogICAgICAgIHNjcmlwdC5vbmxvYWQgPSAoKSA9PiB7CiAgICAgICAgICBEZWVzV29ya3NwYWNlTW9uYWNvMi5tb25hY29EZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHNjcmlwdCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1dvcmtzcGFjZU1vbmFjbzIubW9uYWNvRGVmZXJyZWQucHJvbWlzZTsKICAgICAgd2luZG93LnJlcXVpcmUuY29uZmlnKHsKICAgICAgICBwYXRoczogeyB2czogYCR7bW9uYWNvQ2RuQmFzZX0vbWluL3ZzYCB9CiAgICAgIH0pOwogICAgICB3aW5kb3cucmVxdWlyZShbInZzL2VkaXRvci9lZGl0b3IubWFpbiJdLCBhc3luYyAoKSA9PiB7CiAgICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICAgIGNvbnN0IGluaXRpYWxUaGVtZSA9IGlzQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgICAgbGV0IG1vZGVsID0gbnVsbDsKICAgICAgICBpZiAodGhpcy5maWxlUGF0aCkgewogICAgICAgICAgY29uc3QgdXJpID0gbW9uYWNvSW5zdGFuY2UuVXJpLnBhcnNlKGBmaWxlOi8vJHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuZ2V0TW9kZWwodXJpKTsKICAgICAgICAgIGlmICghbW9kZWwpIHsKICAgICAgICAgICAgbW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5jb250ZW50LCB0aGlzLmxhbmd1YWdlLCB1cmkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgbW9kZWwuc2V0VmFsdWUodGhpcy5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgZWRpdG9yMiA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGUoY29udGFpbmVyLCB7CiAgICAgICAgICBtb2RlbDogbW9kZWwgfHwgdm9pZCAwLAogICAgICAgICAgdmFsdWU6IG1vZGVsID8gdm9pZCAwIDogdGhpcy5jb250ZW50LAogICAgICAgICAgbGFuZ3VhZ2U6IG1vZGVsID8gdm9pZCAwIDogdGhpcy5sYW5ndWFnZSwKICAgICAgICAgIHRoZW1lOiBpbml0aWFsVGhlbWUsCiAgICAgICAgICB1c2VTaGFkb3dET006IHRydWUsCiAgICAgICAgICBmb250U2l6ZTogMTYsCiAgICAgICAgICBhdXRvbWF0aWNMYXlvdXQ6IHRydWUsCiAgICAgICAgICB3b3JkV3JhcDogdGhpcy53b3JkV3JhcCwKICAgICAgICAgIGhvdmVyOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IHRydWUsCiAgICAgICAgICAgIGRlbGF5OiAzMDAsCiAgICAgICAgICAgIHN0aWNreTogdHJ1ZSwKICAgICAgICAgICAgYWJvdmU6IGZhbHNlCiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbiA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKGdvQnJpZ2h0KSA9PiB7CiAgICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICAgIGVkaXRvcjIudXBkYXRlT3B0aW9ucyh7IHRoZW1lOiBuZXdUaGVtZSB9KTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLmVkaXRvckRlZmVycmVkLnJlc29sdmUoZWRpdG9yMik7CiAgICAgIH0pOwogICAgICBjb25zdCBjc3MxMyA9IGF3YWl0IChhd2FpdCBmZXRjaChgJHttb25hY29DZG5CYXNlfS9taW4vdnMvZWRpdG9yL2VkaXRvci5tYWluLmNzc2ApKS50ZXh0KCk7CiAgICAgIGNvbnN0IHN0eWxlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzczEzOwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kKHN0eWxlRWxlbWVudCk7CiAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgZWRpdG9yLm9uRGlkQ2hhbmdlTW9kZWxDb250ZW50KGFzeW5jIChldmVudEFyZykgPT4gewogICAgICAgIGlmICh0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgdmFsdWUyID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgdGhpcy5jb250ZW50U3ViamVjdC5uZXh0KHZhbHVlMik7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29udGVudC1jaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHZhbHVlMiwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSk7CiAgICAgIHRoaXMuY29udGVudFN1YmplY3QubmV4dChlZGl0b3IuZ2V0VmFsdWUoKSk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJmaWxlUGF0aCIpICYmIHRoaXMuZmlsZVBhdGgpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgdXJpID0gbW9uYWNvSW5zdGFuY2UuVXJpLnBhcnNlKGBmaWxlOi8vJHt0aGlzLmZpbGVQYXRofWApOwogICAgICAgIGxldCBtb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5nZXRNb2RlbCh1cmkpOwogICAgICAgIGlmICghbW9kZWwpIHsKICAgICAgICAgIG1vZGVsID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKHRoaXMuY29udGVudCwgdGhpcy5sYW5ndWFnZSwgdXJpKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgaWYgKG1vZGVsLmdldFZhbHVlKCkgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSB0cnVlOwogICAgICAgICAgICBtb2RlbC5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgICB0aGlzLmlzVXBkYXRpbmdGcm9tRXh0ZXJuYWwgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3QgY3VycmVudE1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKGN1cnJlbnRNb2RlbD8udXJpLnRvU3RyaW5nKCkgIT09IHVyaS50b1N0cmluZygpKSB7CiAgICAgICAgICBlZGl0b3Iuc2V0TW9kZWwobW9kZWwpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY29udGVudCIpKSB7CiAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgdGhpcy5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IGN1cnJlbnRWYWx1ZSA9IGVkaXRvci5nZXRWYWx1ZSgpOwogICAgICAgIGlmIChjdXJyZW50VmFsdWUgIT09IHRoaXMuY29udGVudCkgewogICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gdHJ1ZTsKICAgICAgICAgIGVkaXRvci5zZXRWYWx1ZSh0aGlzLmNvbnRlbnQpOwogICAgICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImxhbmd1YWdlIikpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgY29uc3QgbW9kZWwgPSBlZGl0b3IuZ2V0TW9kZWwoKTsKICAgICAgICBpZiAobW9kZWwpIHsKICAgICAgICAgIG1vbmFjb0luc3RhbmNlLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCB0aGlzLmxhbmd1YWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24udW5zdWJzY3JpYmUoKTsKICAgICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgY29udGVudCBmcm9tIGV4dGVybmFsIHNvdXJjZSB3aXRoIG9wdGlvbmFsIGN1cnNvciBwcmVzZXJ2YXRpb24uCiAgICAgKiBVc2UgdGhpcyB3aGVuIHRoZSBmaWxlIGNvbnRlbnQgY2hhbmdlcyBleHRlcm5hbGx5IChlLmcuLCBmaWxlIGNoYW5nZWQgb24gZGlzaykuCiAgICAgKiBAcGFyYW0gbmV3Q29udGVudCBUaGUgbmV3IGNvbnRlbnQgdG8gc2V0CiAgICAgKiBAcGFyYW0gcHJlc2VydmVDdXJzb3IgV2hldGhlciB0byBwcmVzZXJ2ZSBjdXJzb3Ivc2Nyb2xsIHBvc2l0aW9uIChkZWZhdWx0OiB0cnVlKQogICAgICovCiAgICBhc3luYyBzZXRDb250ZW50RXh0ZXJuYWwobmV3Q29udGVudCwgcHJlc2VydmVDdXJzb3IgPSB0cnVlKSB7CiAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIGlmIChjdXJyZW50VmFsdWUgPT09IG5ld0NvbnRlbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVzZXJ2ZUN1cnNvciA/IGVkaXRvci5nZXRQb3NpdGlvbigpIDogbnVsbDsKICAgICAgY29uc3Qgc2VsZWN0aW9ucyA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNlbGVjdGlvbnMoKSA6IG51bGw7CiAgICAgIGNvbnN0IHNjcm9sbFRvcCA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNjcm9sbFRvcCgpIDogMDsKICAgICAgY29uc3Qgc2Nyb2xsTGVmdCA9IHByZXNlcnZlQ3Vyc29yID8gZWRpdG9yLmdldFNjcm9sbExlZnQoKSA6IDA7CiAgICAgIHRoaXMuaXNVcGRhdGluZ0Zyb21FeHRlcm5hbCA9IHRydWU7CiAgICAgIGVkaXRvci5zZXRWYWx1ZShuZXdDb250ZW50KTsKICAgICAgdGhpcy5pc1VwZGF0aW5nRnJvbUV4dGVybmFsID0gZmFsc2U7CiAgICAgIGlmIChwcmVzZXJ2ZUN1cnNvcikgewogICAgICAgIGlmIChwb3NpdGlvbjMpIHsKICAgICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgICBjb25zdCBsaW5lQ291bnQgPSBtb2RlbD8uZ2V0TGluZUNvdW50KCkgfHwgMTsKICAgICAgICAgIGNvbnN0IGNsYW1wZWRMaW5lID0gTWF0aC5taW4ocG9zaXRpb24zLmxpbmVOdW1iZXIsIGxpbmVDb3VudCk7CiAgICAgICAgICBjb25zdCBsaW5lTGVuZ3RoID0gbW9kZWw/LmdldExpbmVNYXhDb2x1bW4oY2xhbXBlZExpbmUpIHx8IDE7CiAgICAgICAgICBjb25zdCBjbGFtcGVkQ29sdW1uID0gTWF0aC5taW4ocG9zaXRpb24zLmNvbHVtbiwgbGluZUxlbmd0aCk7CiAgICAgICAgICBlZGl0b3Iuc2V0UG9zaXRpb24oeyBsaW5lTnVtYmVyOiBjbGFtcGVkTGluZSwgY29sdW1uOiBjbGFtcGVkQ29sdW1uIH0pOwogICAgICAgIH0KICAgICAgICBpZiAoc2VsZWN0aW9ucyAmJiBzZWxlY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGVkaXRvci5zZXRTZWxlY3Rpb25zKHNlbGVjdGlvbnMpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVkaXRvci5zZXRTY3JvbGxQb3NpdGlvbih7IHNjcm9sbFRvcCwgc2Nyb2xsTGVmdCB9KTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMxOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1dvcmtzcGFjZU1vbmFjbzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtY29kZS9kZWVzLWlucHV0LWNvZGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczE5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBMQU5HVUFHRVMgPSBbCiAgeyBrZXk6ICJ0eXBlc2NyaXB0IiwgbGFiZWw6ICJUeXBlU2NyaXB0IiB9LAogIHsga2V5OiAiamF2YXNjcmlwdCIsIGxhYmVsOiAiSmF2YVNjcmlwdCIgfSwKICB7IGtleTogImpzb24iLCBsYWJlbDogIkpTT04iIH0sCiAgeyBrZXk6ICJodG1sIiwgbGFiZWw6ICJIVE1MIiB9LAogIHsga2V5OiAiY3NzIiwgbGFiZWw6ICJDU1MiIH0sCiAgeyBrZXk6ICJzY3NzIiwgbGFiZWw6ICJTQ1NTIiB9LAogIHsga2V5OiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiB9LAogIHsga2V5OiAieWFtbCIsIGxhYmVsOiAiWUFNTCIgfSwKICB7IGtleTogInhtbCIsIGxhYmVsOiAiWE1MIiB9LAogIHsga2V5OiAic3FsIiwgbGFiZWw6ICJTUUwiIH0sCiAgeyBrZXk6ICJweXRob24iLCBsYWJlbDogIlB5dGhvbiIgfSwKICB7IGtleTogImphdmEiLCBsYWJlbDogIkphdmEiIH0sCiAgeyBrZXk6ICJjc2hhcnAiLCBsYWJlbDogIkMjIiB9LAogIHsga2V5OiAiY3BwIiwgbGFiZWw6ICJDKysiIH0sCiAgeyBrZXk6ICJnbyIsIGxhYmVsOiAiR28iIH0sCiAgeyBrZXk6ICJydXN0IiwgbGFiZWw6ICJSdXN0IiB9LAogIHsga2V5OiAic2hlbGwiLCBsYWJlbDogIlNoZWxsIiB9LAogIHsga2V5OiAicGxhaW50ZXh0IiwgbGFiZWw6ICJQbGFpbiBUZXh0IiB9Cl07CnZhciBEZWVzSW5wdXRDb2RlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1jb2RlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2xhbmd1YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9kZWNvcmF0b3JzOwogIGxldCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkV3JhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGluZU51bWJlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzOwogIGxldCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb3B5U3VjY2Vzc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRDb2RlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbGFuZ3VhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9oZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF93b3JkV3JhcF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3Nob3dMaW5lTnVtYmVyc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jb3B5U3VjY2Vzc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE4KHRoaXMsIG51bGwsIF9sYW5ndWFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYW5ndWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFuZ3VhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFuZ3VhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhbmd1YWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhbmd1YWdlX2luaXRpYWxpemVycywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2hlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oZWlnaHRfaW5pdGlhbGl6ZXJzLCBfaGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX3dvcmRXcmFwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRXcmFwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3b3JkV3JhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai53b3JkV3JhcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZFdyYXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd29yZFdyYXBfaW5pdGlhbGl6ZXJzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfc2hvd0xpbmVOdW1iZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5lTnVtYmVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd0xpbmVOdW1iZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dMaW5lTnVtYmVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmVOdW1iZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dMaW5lTnVtYmVyc19pbml0aWFsaXplcnMsIF9zaG93TGluZU51bWJlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOCh0aGlzLCBudWxsLCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xhbmd1YWdlRHJvcGRvd25PcGVuIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xhbmd1YWdlRHJvcGRvd25PcGVuIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTgodGhpcywgbnVsbCwgX2NvcHlTdWNjZXNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvcHlTdWNjZXNzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb3B5U3VjY2VzcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb3B5U3VjY2Vzcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29weVN1Y2Nlc3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBfY29weVN1Y2Nlc3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy1pbnB1dC1jb2RlCiAgICAgIGxhYmVsPSJUeXBlU2NyaXB0IENvZGUiCiAgICAgIGtleT0iY29kZSIKICAgICAgbGFuZ3VhZ2U9InR5cGVzY3JpcHQiCiAgICAgIGhlaWdodD0iMzAwcHgiCiAgICAgIC52YWx1ZT0keydjb25zdCBncmVldGluZzogc3RyaW5nID0gIkhlbGxvIFdvcmxkIjtcbmNvbnNvbGUubG9nKGdyZWV0aW5nKTsnfQogICAgPjwvZGVlcy1pbnB1dC1jb2RlPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCAidHlwZXNjcmlwdCIpKTsKICAgIGdldCBsYW5ndWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGFuZ3VhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xhbmd1YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9oZWlnaHRfaW5pdGlhbGl6ZXJzLCAiMjAwcHgiKSk7CiAgICBnZXQgaGVpZ2h0KCkgewogICAgICByZXR1cm4gdGhpcy4jaGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNoZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkV3JhcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX2hlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMTkodGhpcywgX3dvcmRXcmFwX2luaXRpYWxpemVycywgIm9mZiIpKTsKICAgIGdldCB3b3JkV3JhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgd29yZFdyYXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI3dvcmRXcmFwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0xpbmVOdW1iZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfd29yZFdyYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9zaG93TGluZU51bWJlcnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0xpbmVOdW1iZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmVOdW1iZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0xpbmVOdW1iZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TGluZU51bWJlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0xhbmd1YWdlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfc2hvd0xpbmVOdW1iZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfaXNMYW5ndWFnZURyb3Bkb3duT3Blbl9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMYW5ndWFnZURyb3Bkb3duT3BlbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTGFuZ3VhZ2VEcm9wZG93bk9wZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xhbmd1YWdlRHJvcGRvd25PcGVuKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xhbmd1YWdlRHJvcGRvd25PcGVuX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczE5KHRoaXMsIF9pc0xhbmd1YWdlRHJvcGRvd25PcGVuX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfY29weVN1Y2Nlc3NfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNvcHlTdWNjZXNzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb3B5U3VjY2Vzcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29weVN1Y2Nlc3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGVkaXRvckVsZW1lbnQgPSAoX19ydW5Jbml0aWFsaXplcnMxOSh0aGlzLCBfY29weVN1Y2Nlc3NfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvZGUtY29udGFpbmVyIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAudG9vbGJhci1sZWZ0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXJpZ2h0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1kcm9wZG93biB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMTAwJTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgICBtYXgtaGVpZ2h0OiAyNTBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG1pbi13aWR0aDogMTQwcHg7CiAgICAgIH0KCiAgICAgIC5sYW5ndWFnZS1vcHRpb24gewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAubGFuZ3VhZ2Utb3B0aW9uLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTAlKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NSUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkwJSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGNvbG9yOiBoc2woMTQyLjEgNzYuMiUgMzYuMyUpOwogICAgICB9CgogICAgICAuZWRpdG9yLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtbW9uYWNvIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBtYXJnaW46IDAgNHB4OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuY29kZS1jb250YWluZXIgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgY3VycmVudExhbmd1YWdlID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IHRoaXMubGFuZ3VhZ2UpIHx8IExBTkdVQUdFU1swXTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLmVkaXRvci13cmFwcGVyIHsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLmhlaWdodH07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1jb250YWluZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnRvZ2dsZUxhbmd1YWdlRHJvcGRvd259CiAgICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVMYW5ndWFnZUJsdXJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7Y3VycmVudExhbmd1YWdlLmxhYmVsfQogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpDaGV2cm9uRG93biJ9IGljb25TaXplPSIxNCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICR7dGhpcy5pc0xhbmd1YWdlRHJvcGRvd25PcGVuID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICAgICAke0xBTkdVQUdFUy5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IHRoaXMubGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gdGhpcy5zZWxlY3RMYW5ndWFnZShlMTEsIGxhbmcua2V5KX0KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtsYW5nLmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1yaWdodCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uICR7dGhpcy53b3JkV3JhcCA9PT0gIm9uIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgdGl0bGU9IldvcmQgV3JhcCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMudG9nZ2xlV29yZFdyYXB9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6V3JhcFRleHQifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuc2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iTGluZSBOdW1iZXJzIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy50b2dnbGVMaW5lTnVtYmVyc30KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpIYXNoIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWRpdmlkZXIiPjwvZGl2PgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke3RoaXMuY29weVN1Y2Nlc3MgPyAic3VjY2VzcyIgOiAiIn0iCiAgICAgICAgICAgICAgICB0aXRsZT0iQ29weSBDb2RlIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jb3B5Q29kZX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5jb3B5U3VjY2VzcyA/ICJsdWNpZGU6Q2hlY2siIDogImx1Y2lkZTpDb3B5In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICB0aXRsZT0iRXhwYW5kIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5vcGVuRnVsbHNjcmVlbn0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpNYXhpbWl6ZTIifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLXdyYXBwZXIiPgogICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbW9uYWNvCiAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgLndvcmRXcmFwPSR7dGhpcy53b3JkV3JhcH0KICAgICAgICAgICAgICBAY29udGVudC1jaGFuZ2U9JHt0aGlzLmhhbmRsZUNvbnRlbnRDaGFuZ2V9CiAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLW1vbmFjbz4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmVkaXRvckVsZW1lbnQuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKChuZXdDb250ZW50KSA9PiB7CiAgICAgICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgICB0aGlzLnZhbHVlID0gbmV3Q29udGVudDsKICAgICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHRvZ2dsZUxhbmd1YWdlRHJvcGRvd24oKSB7CiAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9ICF0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW47CiAgICB9CiAgICBoYW5kbGVMYW5ndWFnZUJsdXIoKSB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIHRoaXMuaXNMYW5ndWFnZURyb3Bkb3duT3BlbiA9IGZhbHNlOwogICAgICB9LCAxNTApOwogICAgfQogICAgYXN5bmMgc2VsZWN0TGFuZ3VhZ2UoZTExLCBsYW5ndWFnZUtleSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICB0aGlzLmlzTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgaWYgKHRoaXMuZWRpdG9yRWxlbWVudCkgewogICAgICAgIHRoaXMuZWRpdG9yRWxlbWVudC5sYW5ndWFnZSA9IGxhbmd1YWdlS2V5OwogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IHRoaXMuZWRpdG9yRWxlbWVudC5lZGl0b3JEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIGNvbnN0IG1vZGVsID0gZWRpdG9yLmdldE1vZGVsKCk7CiAgICAgICAgaWYgKG1vZGVsKSB7CiAgICAgICAgICB3aW5kb3cubW9uYWNvLmVkaXRvci5zZXRNb2RlbExhbmd1YWdlKG1vZGVsLCBsYW5ndWFnZUtleSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICB0b2dnbGVXb3JkV3JhcCgpIHsKICAgICAgdGhpcy53b3JkV3JhcCA9IHRoaXMud29yZFdyYXAgPT09ICJvbiIgPyAib2ZmIiA6ICJvbiI7CiAgICAgIHRoaXMudXBkYXRlRWRpdG9yT3B0aW9uKCJ3b3JkV3JhcCIsIHRoaXMud29yZFdyYXApOwogICAgfQogICAgdG9nZ2xlTGluZU51bWJlcnMoKSB7CiAgICAgIHRoaXMuc2hvd0xpbmVOdW1iZXJzID0gIXRoaXMuc2hvd0xpbmVOdW1iZXJzOwogICAgICB0aGlzLnVwZGF0ZUVkaXRvck9wdGlvbigibGluZU51bWJlcnMiLCB0aGlzLnNob3dMaW5lTnVtYmVycyA/ICJvbiIgOiAib2ZmIik7CiAgICB9CiAgICBhc3luYyB1cGRhdGVFZGl0b3JPcHRpb24ob3B0aW9uMiwgdmFsdWUyKSB7CiAgICAgIGlmICh0aGlzLmVkaXRvckVsZW1lbnQpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCB0aGlzLmVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IudXBkYXRlT3B0aW9ucyh7IFtvcHRpb24yXTogdmFsdWUyIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjb3B5Q29kZSgpIHsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dCh0aGlzLnZhbHVlKTsKICAgICAgICB0aGlzLmNvcHlTdWNjZXNzID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIHRoaXMuY29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgICB9LCAyZTMpOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY29weSBjb2RlOiIsIGVycik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBpZiAodGhpcy52YWx1ZSAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMudmFsdWUgPSBuZXdDb250ZW50OwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBvcGVuRnVsbHNjcmVlbigpIHsKICAgICAgY29uc3QgY3VycmVudFZhbHVlID0gdGhpcy52YWx1ZTsKICAgICAgbGV0IG1vZGFsRWRpdG9yRWxlbWVudCA9IG51bGw7CiAgICAgIGxldCBtb2RhbExhbmd1YWdlID0gdGhpcy5sYW5ndWFnZTsKICAgICAgbGV0IG1vZGFsV29yZFdyYXAgPSB0aGlzLndvcmRXcmFwOwogICAgICBsZXQgbW9kYWxTaG93TGluZU51bWJlcnMgPSB0aGlzLnNob3dMaW5lTnVtYmVyczsKICAgICAgbGV0IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgbGV0IG1vZGFsQ29weVN1Y2Nlc3MgPSBmYWxzZTsKICAgICAgY29uc3QgZ2V0TGFuZ3VhZ2VMYWJlbCA9ICgpID0+IHsKICAgICAgICBjb25zdCBsYW5nID0gTEFOR1VBR0VTLmZpbmQoKGw2KSA9PiBsNi5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UpOwogICAgICAgIHJldHVybiBsYW5nID8gbGFuZy5sYWJlbCA6ICJUeXBlU2NyaXB0IjsKICAgICAgfTsKICAgICAgY29uc3QgdXBkYXRlVG9vbGJhclVJID0gKG1vZGFsMikgPT4gewogICAgICAgIGNvbnN0IHRvb2xiYXIyID0gbW9kYWwyLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5tb2RhbC10b29sYmFyIik7CiAgICAgICAgaWYgKCF0b29sYmFyMikKICAgICAgICAgIHJldHVybjsKICAgICAgICBjb25zdCBsYW5nQnRuID0gdG9vbGJhcjIucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLWJ1dHRvbiBzcGFuIik7CiAgICAgICAgaWYgKGxhbmdCdG4pCiAgICAgICAgICBsYW5nQnRuLnRleHRDb250ZW50ID0gZ2V0TGFuZ3VhZ2VMYWJlbCgpOwogICAgICAgIGNvbnN0IHdyYXBCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICBpZiAod3JhcEJ0bikgewogICAgICAgICAgd3JhcEJ0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFdvcmRXcmFwID09PSAib24iKTsKICAgICAgICB9CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIubGluZXMtYnRuIik7CiAgICAgICAgaWYgKGxpbmVzQnRuKSB7CiAgICAgICAgICBsaW5lc0J0bi5jbGFzc0xpc3QudG9nZ2xlKCJhY3RpdmUiLCBtb2RhbFNob3dMaW5lTnVtYmVycyk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGNvcHlCdG4gPSB0b29sYmFyMi5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb25zdCBjb3B5SWNvbiA9IGNvcHlCdG4/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICAgIGlmIChjb3B5QnRuICYmIGNvcHlJY29uKSB7CiAgICAgICAgICBjb3B5QnRuLmNsYXNzTGlzdC50b2dnbGUoInN1Y2Nlc3MiLCBtb2RhbENvcHlTdWNjZXNzKTsKICAgICAgICAgIGNvcHlJY29uLmljb24gPSBtb2RhbENvcHlTdWNjZXNzID8gImx1Y2lkZTpDaGVjayIgOiAibHVjaWRlOkNvcHkiOwogICAgICAgIH0KICAgICAgICBjb25zdCBkcm9wZG93biA9IHRvb2xiYXIyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1kcm9wZG93biIpOwogICAgICAgIGlmIChkcm9wZG93bikgewogICAgICAgICAgZHJvcGRvd24uc3R5bGUuZGlzcGxheSA9IG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPyAiYmxvY2siIDogIm5vbmUiOwogICAgICAgIH0KICAgICAgfTsKICAgICAgY29uc3QgbW9kYWwgPSBhd2FpdCBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgICAgaGVhZGluZzogdGhpcy5sYWJlbCB8fCAiQ29kZSBFZGl0b3IiLAogICAgICAgIHdpZHRoOiAiZnVsbHNjcmVlbiIsCiAgICAgICAgY29udGVudFBhZGRpbmc6IDAsCiAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgPHN0eWxlPgogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1sZWZ0IHsKICAgICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1yaWdodCB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNHB4OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLXNlbGVjdG9yIHsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICAgIGdhcDogNnB4OwogICAgICAgICAgICBwYWRkaW5nOiA0cHggMTBweDsKICAgICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAyMCUpIil9OwogICAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAubGFuZ3VhZ2UtZHJvcGRvd24gewogICAgICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgICAgIHRvcDogMTAwJTsKICAgICAgICAgICAgbGVmdDogMDsKICAgICAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgYm94LXNoYWRvdzogMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuMTUpOwogICAgICAgICAgICB6LWluZGV4OiAxMDA7CiAgICAgICAgICAgIG1heC1oZWlnaHQ6IDI1MHB4OwogICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICBtaW4td2lkdGg6IDE0MHB4OwogICAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbiB7CiAgICAgICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC5sYW5ndWFnZS1vcHRpb246aG92ZXIgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLmxhbmd1YWdlLW9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtdG9vbGJhciAudG9vbGJhci1idXR0b24gewogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLmFjdGl2ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgICAgfQogICAgICAgICAgLm1vZGFsLXRvb2xiYXIgLnRvb2xiYXItYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgICAgICBjb2xvcjogaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKTsKICAgICAgICAgIH0KICAgICAgICAgIC5tb2RhbC10b29sYmFyIC50b29sYmFyLWRpdmlkZXIgewogICAgICAgICAgICB3aWR0aDogMXB4OwogICAgICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgICAgIG1hcmdpbjogMCA0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAubW9kYWwtZWRpdG9yLXdyYXBwZXIgewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGhlaWdodDogY2FsYygxMDB2aCAtIDE3NXB4KTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC10b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItbGVmdCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLXNlbGVjdG9yIj4KICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJsYW5ndWFnZS1idXR0b24iPgogICAgICAgICAgICAgICAgPHNwYW4+JHtnZXRMYW5ndWFnZUxhYmVsKCl9PC9zcGFuPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Q2hldnJvbkRvd24ifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlLWRyb3Bkb3duIj4KICAgICAgICAgICAgICAgICR7TEFOR1VBR0VTLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2Utb3B0aW9uICR7bGFuZy5rZXkgPT09IG1vZGFsTGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIGRhdGEtbGFuZz0iJHtsYW5nLmtleX0iCiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke2xhbmcubGFiZWx9CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLXJpZ2h0Ij4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gd3JhcC1idG4gJHttb2RhbFdvcmRXcmFwID09PSAib24iID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJXb3JkIFdyYXAiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOldyYXBUZXh0In0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9InRvb2xiYXItYnV0dG9uIGxpbmVzLWJ0biAke21vZGFsU2hvd0xpbmVOdW1iZXJzID8gImFjdGl2ZSIgOiAiIn0iIHRpdGxlPSJMaW5lIE51bWJlcnMiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkhhc2gifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0idG9vbGJhci1idXR0b24gY29weS1idG4iIHRpdGxlPSJDb3B5IENvZGUiPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOkNvcHkifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWVkaXRvci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tb25hY28KICAgICAgICAgICAgLmNvbnRlbnQ9JHtjdXJyZW50VmFsdWV9CiAgICAgICAgICAgIC5sYW5ndWFnZT0ke21vZGFsTGFuZ3VhZ2V9CiAgICAgICAgICAgIC53b3JkV3JhcD0ke21vZGFsV29yZFdyYXB9CiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgIGAsCiAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkNhbmNlbCIsCiAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiU2F2ZSAmIENsb3NlIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICBtb2RhbEVkaXRvckVsZW1lbnQgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tb25hY28iKTsKICAgICAgICAgICAgICBpZiAobW9kYWxFZGl0b3JFbGVtZW50KSB7CiAgICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICAgIGNvbnN0IG5ld1ZhbHVlID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgICAgICB0aGlzLnNldFZhbHVlKG5ld1ZhbHVlKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgYXdhaXQgbW9kYWxSZWYuZGVzdHJveSgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgbW9kYWxFZGl0b3JFbGVtZW50ID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IHRvb2xiYXIgPSBtb2RhbC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwtdG9vbGJhciIpOwogICAgICBpZiAodG9vbGJhcikgewogICAgICAgIGNvbnN0IGxhbmdCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5sYW5ndWFnZS1idXR0b24iKTsKICAgICAgICBsYW5nQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSAhbW9kYWxMYW5ndWFnZURyb3Bkb3duT3BlbjsKICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGFuZ09wdGlvbnMgPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3JBbGwoIi5sYW5ndWFnZS1vcHRpb24iKTsKICAgICAgICBsYW5nT3B0aW9ucy5mb3JFYWNoKChvcHRpb24yKSA9PiB7CiAgICAgICAgICBvcHRpb24yLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgYXN5bmMgKCkgPT4gewogICAgICAgICAgICBjb25zdCBuZXdMYW5nID0gb3B0aW9uMi5kYXRhc2V0Lmxhbmc7CiAgICAgICAgICAgIGlmIChuZXdMYW5nICYmIG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2UgPSBuZXdMYW5nOwogICAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgICBjb25zdCBtb2RlbCA9IGVkaXRvci5nZXRNb2RlbCgpOwogICAgICAgICAgICAgIGlmIChtb2RlbCkgewogICAgICAgICAgICAgICAgd2luZG93Lm1vbmFjby5lZGl0b3Iuc2V0TW9kZWxMYW5ndWFnZShtb2RlbCwgbmV3TGFuZyk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIGxhbmdPcHRpb25zLmZvckVhY2goKG9wdCkgPT4gb3B0LmNsYXNzTGlzdC5yZW1vdmUoInNlbGVjdGVkIikpOwogICAgICAgICAgICAgIG9wdGlvbjIuY2xhc3NMaXN0LmFkZCgic2VsZWN0ZWQiKTsKICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCB3cmFwQnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIud3JhcC1idG4iKTsKICAgICAgICB3cmFwQnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIG1vZGFsV29yZFdyYXAgPSBtb2RhbFdvcmRXcmFwID09PSAib24iID8gIm9mZiIgOiAib24iOwogICAgICAgICAgaWYgKG1vZGFsRWRpdG9yRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBlZGl0b3IgPSBhd2FpdCBtb2RhbEVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICAgICAgZWRpdG9yLnVwZGF0ZU9wdGlvbnMoeyB3b3JkV3JhcDogbW9kYWxXb3JkV3JhcCB9KTsKICAgICAgICAgIH0KICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbGluZXNCdG4gPSB0b29sYmFyLnF1ZXJ5U2VsZWN0b3IoIi5saW5lcy1idG4iKTsKICAgICAgICBsaW5lc0J0bj8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCBhc3luYyAoKSA9PiB7CiAgICAgICAgICBtb2RhbFNob3dMaW5lTnVtYmVycyA9ICFtb2RhbFNob3dMaW5lTnVtYmVyczsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGVkaXRvci51cGRhdGVPcHRpb25zKHsgbGluZU51bWJlcnM6IG1vZGFsU2hvd0xpbmVOdW1iZXJzID8gIm9uIiA6ICJvZmYiIH0pOwogICAgICAgICAgfQogICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICB9KTsKICAgICAgICBjb25zdCBjb3B5QnRuID0gdG9vbGJhci5xdWVyeVNlbGVjdG9yKCIuY29weS1idG4iKTsKICAgICAgICBjb3B5QnRuPy5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChtb2RhbEVkaXRvckVsZW1lbnQpIHsKICAgICAgICAgICAgY29uc3QgZWRpdG9yID0gYXdhaXQgbW9kYWxFZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2U7CiAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gZWRpdG9yLmdldFZhbHVlKCk7CiAgICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgICAgIG1vZGFsQ29weVN1Y2Nlc3MgPSB0cnVlOwogICAgICAgICAgICAgIHVwZGF0ZVRvb2xiYXJVSShtb2RhbCk7CiAgICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgICAgICBtb2RhbENvcHlTdWNjZXNzID0gZmFsc2U7CiAgICAgICAgICAgICAgICB1cGRhdGVUb29sYmFyVUkobW9kYWwpOwogICAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICAgIH0gY2F0Y2ggKGVycikgewogICAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5IGNvZGU6IiwgZXJyKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgICAgaWYgKG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gJiYgIWxhbmdCdG4/LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICAgIG1vZGFsTGFuZ3VhZ2VEcm9wZG93bk9wZW4gPSBmYWxzZTsKICAgICAgICAgICAgdXBkYXRlVG9vbGJhclVJKG1vZGFsKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7IG9uY2U6IHRydWUgfSk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICBpZiAodGhpcy5lZGl0b3JFbGVtZW50KSB7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmNvbnRlbnQgPSB2YWx1ZTI7CiAgICAgICAgdGhpcy5lZGl0b3JFbGVtZW50LmVkaXRvckRlZmVycmVkLnByb21pc2UudGhlbigoZWRpdG9yKSA9PiB7CiAgICAgICAgICBpZiAoZWRpdG9yLmdldFZhbHVlKCkgIT09IHZhbHVlMikgewogICAgICAgICAgICBlZGl0b3Iuc2V0VmFsdWUodmFsdWUyKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMTkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dENvZGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5kYXRlLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVQaWNrZXIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZGF0ZXBpY2tlciIpOwogIGlmIChkYXRlUGlja2VyKSB7CiAgICBkYXRlUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQmFzaWMgZGF0ZSBzZWxlY3RlZDoiLCBldmVudC50YXJnZXQudmFsdWUpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIERhdGUgUGlja2VyIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBkYXRlIHNlbGVjdGlvbiB3aXRob3V0IHRpbWUifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iU2VsZWN0IERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2hvb3NlIGEgZGF0ZSBmcm9tIHRoZSBjYWxlbmRhciIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGRhdGVUaW1lUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IkV2ZW50IERhdGUgJiBUaW1lIl0nKTsKICBjb25zdCBhcHBvaW50bWVudFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJBcHBvaW50bWVudCJdJyk7CiAgaWYgKGRhdGVUaW1lUGlja2VyKSB7CiAgICBkYXRlVGltZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBjb25zb2xlLmxvZygiMjRoIGZvcm1hdCBkYXRldGltZToiLCB2YWx1ZTIpOwogICAgfSk7CiAgfQogIGlmIChhcHBvaW50bWVudFBpY2tlcikgewogICAgYXBwb2ludG1lbnRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IGV2ZW50LnRhcmdldC52YWx1ZTsKICAgICAgY29uc29sZS5sb2coIjEyaCBmb3JtYXQgZGF0ZXRpbWU6IiwgdmFsdWUyKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIGFuZCBUaW1lIFNlbGVjdGlvbiJ9IC5zdWJ0aXRsZT0keyJEYXRlIHBpY2tlcnMgd2l0aCB0aW1lIHNlbGVjdGlvbiBpbiBkaWZmZXJlbnQgZm9ybWF0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEYXRlICYgVGltZSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTZWxlY3QgYm90aCBkYXRlIGFuZCB0aW1lICgyNC1ob3VyIGZvcm1hdCkiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICB0aW1lRm9ybWF0PSIyNGgiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBcHBvaW50bWVudCIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXRlIGFuZCB0aW1lIHdpdGggQU0vUE0gc2VsZWN0b3IgKDE1LW1pbnV0ZSBpbmNyZW1lbnRzKSIKICAgICAgICAgIC5lbmFibGVUaW1lPSR7dHJ1ZX0KICAgICAgICAgIHRpbWVGb3JtYXQ9IjEyaCIKICAgICAgICAgIC5taW51dGVJbmNyZW1lbnQ9JHsxNX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRpbWV6b25lUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgdGltZXpvbmVQaWNrZXJzLmZvckVhY2goKHBpY2tlcikgPT4gewogICAgcGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChldmVudCkgPT4gewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnNvbGUubG9nKGAke3RhcmdldC5sYWJlbH0gdmFsdWU6YCwgdGFyZ2V0LnZhbHVlKTsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXR0ZWQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJUaW1lem9uZSBTdXBwb3J0In0gLnN1YnRpdGxlPSR7IkRhdGUgYW5kIHRpbWUgc2VsZWN0aW9uIHdpdGggdGltZXpvbmUgYXdhcmVuZXNzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgVGltZSAod2l0aCBUaW1lem9uZSkiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2VsZWN0IGEgZGF0ZS90aW1lIGFuZCB0aW1lem9uZSBmb3IgdGhlIG1lZXRpbmciCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMjRoIgogICAgICAgICAgdGltZXpvbmU9IkFtZXJpY2EvTmV3X1lvcmsiCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJHbG9iYWwgRXZlbnQgU2NoZWR1bGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iU2NoZWR1bGUgYW4gZXZlbnQgYWNyb3NzIGRpZmZlcmVudCB0aW1lem9uZXMiCiAgICAgICAgICAuZW5hYmxlVGltZT0ke3RydWV9CiAgICAgICAgICAuZW5hYmxlVGltZXpvbmU9JHt0cnVlfQogICAgICAgICAgdGltZUZvcm1hdD0iMTJoIgogICAgICAgICAgdGltZXpvbmU9IkV1cm9wZS9Mb25kb24iCiAgICAgICAgICAubWludXRlSW5jcmVtZW50PSR7MzB9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmdXR1cmVEYXRlUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LWRhdGVwaWNrZXIiKTsKICBpZiAoZnV0dXJlRGF0ZVBpY2tlcikgewogICAgZnV0dXJlRGF0ZVBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXZlbnQudGFyZ2V0LnZhbHVlOwogICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgY29uc3Qgc2VsZWN0ZWREYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCB0b2RheSA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpOwogICAgICAgIGNvbnN0IGRheXNEaWZmID0gTWF0aC5mbG9vcigoc2VsZWN0ZWREYXRlLmdldFRpbWUoKSAtIHRvZGF5LmdldFRpbWUoKSkgLyAoMWUzICogNjAgKiA2MCAqIDI0KSk7CiAgICAgICAgY29uc29sZS5sb2coYFNlbGVjdGVkIGRhdGUgaXMgJHtkYXlzRGlmZn0gZGF5cyBmcm9tIHRvZGF5YCk7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIFJhbmdlIENvbnN0cmFpbnRzIn0gLnN1YnRpdGxlPSR7IkxpbWl0IHNlbGVjdGFibGUgZGF0ZXMgd2l0aCBtaW4gYW5kIG1heCB2YWx1ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICBsYWJlbD0iRnV0dXJlIERhdGUgT25seSIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW4gb25seSBzZWxlY3QgZGF0ZXMgZnJvbSB0b2RheSB0byA5MCBkYXlzIGluIHRoZSBmdXR1cmUiCiAgICAgICAgICAubWluRGF0ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgIC5tYXhEYXRlPSR7bmV3IERhdGUoRGF0ZS5ub3coKSArIDkwICogMjQgKiA2MCAqIDYwICogMWUzKS50b0lTT1N0cmluZygpfQogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybWF0dGVyczIgPSB7CiAgICAiREQvTU0vWVlZWSI6ICJFdXJvcGVhbiIsCiAgICAiTU0vREQvWVlZWSI6ICJVUyIsCiAgICAiWVlZWS1NTS1ERCI6ICJJU08iCiAgfTsKICBjb25zdCBkYXRlUGlja2VycyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgZGF0ZVBpY2tlcnMuZm9yRWFjaCgocGlja2VyKSA9PiB7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc3QgaW5wdXQgPSB0YXJnZXQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmRhdGUtaW5wdXQiKTsKICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgY29uc29sZS5sb2coYCR7dGFyZ2V0LmxhYmVsfSBmb3JtYXQ6YCwgaW5wdXQudmFsdWUpOwogICAgICB9CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEYXRlIEZvcm1hdHMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGRhdGUgZGlzcGxheSBmb3JtYXRzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IkV1cm9wZWFuIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iREQvTU0vWVlZWSIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kYXRlcGlja2VyCiAgICAgICAgICAgIGxhYmVsPSJVUyBGb3JtYXQiCiAgICAgICAgICAgIGRhdGVGb3JtYXQ9Ik1NL0REL1lZWVkiCiAgICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iSVNPIEZvcm1hdCIKICAgICAgICAgICAgZGF0ZUZvcm1hdD0iWVlZWS1NTS1ERCIKICAgICAgICAgICAgLnZhbHVlPSR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByZXF1aXJlZFBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyW3JlcXVpcmVkXSIpOwogIGlmIChyZXF1aXJlZFBpY2tlcikgewogICAgcmVxdWlyZWRQaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc3QgcGlja2VyID0gcmVxdWlyZWRQaWNrZXI7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHBpY2tlci5nZXRWYWx1ZSgpOwogICAgICBpZiAoIXZhbHVlMikgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBkYXRlIGZpZWxkIGlzIGVtcHR5Iik7CiAgICAgIH0KICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlZCBhbmQgZGlzYWJsZWQgc3RhdGVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkJpcnRoIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBpcyByZXF1aXJlZCIKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICBwbGFjZWhvbGRlcj0iU2VsZWN0IHlvdXIgYmlydGggZGF0ZSIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgbGFiZWw9IkRpc2FibGVkIERhdGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBmaWVsZCBjYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keygvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHVzUGlja2VyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LWRhdGVwaWNrZXJbbGFiZWw9IlVTIENhbGVuZGFyIl0nKTsKICBjb25zdCBldVBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kYXRlcGlja2VyW2xhYmVsPSJFVSBDYWxlbmRhciJdJyk7CiAgaWYgKHVzUGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiVVMgQ2FsZW5kYXIgc3RhcnRzIG9uIFN1bmRheSAoMCkiKTsKICB9CiAgaWYgKGV1UGlja2VyKSB7CiAgICBjb25zb2xlLmxvZygiRVUgQ2FsZW5kYXIgc3RhcnRzIG9uIE1vbmRheSAoMSkiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQ2FsZW5kYXIgQ3VzdG9taXphdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgd2VlayBzdGFydCBkYXlzIGZvciB2YXJpb3VzIHJlZ2lvbnMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJkYXRlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgICAgbGFiZWw9IlVTIENhbGVuZGFyIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iV2VlayBzdGFydHMgb24gU3VuZGF5IgogICAgICAgICAgICAud2Vla1N0YXJ0c09uPSR7MH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZGF0ZXBpY2tlcgogICAgICAgICAgICBsYWJlbD0iRVUgQ2FsZW5kYXIiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJXZWVrIHN0YXJ0cyBvbiBNb25kYXkiCiAgICAgICAgICAgIC53ZWVrU3RhcnRzT249JHsxfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBnZW5lcmF0ZVdlZWtlbmRzID0gKCkgPT4gewogICAgY29uc3Qgd2Vla2VuZHMgPSBbXTsKICAgIGNvbnN0IG5vdzIgPSAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKTsKICAgIGNvbnN0IHllYXIgPSBub3cyLmdldEZ1bGxZZWFyKCk7CiAgICBjb25zdCBtb250aCA9IG5vdzIuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICB3aGlsZSAoZGF0ZS5nZXRNb250aCgpID09PSBtb250aCkgewogICAgICBpZiAoZGF0ZS5nZXREYXkoKSA9PT0gMCB8fCBkYXRlLmdldERheSgpID09PSA2KSB7CiAgICAgICAgd2Vla2VuZHMucHVzaChuZXcgRGF0ZShkYXRlKS50b0lTT1N0cmluZygpKTsKICAgICAgfQogICAgICBkYXRlLnNldERhdGUoZGF0ZS5nZXREYXRlKCkgKyAxKTsKICAgIH0KICAgIHJldHVybiB3ZWVrZW5kczsKICB9OwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmRpc2FibGVkRGF0ZXMgPSBnZW5lcmF0ZVdlZWtlbmRzKCk7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgd2Vla2VuZCBkYXRlcyBmb3IgY3VycmVudCBtb250aCIpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJEaXNhYmxlZCBEYXRlcyJ9IC5zdWJ0aXRsZT0keyJDYWxlbmRhciB3aXRoIHNwZWNpZmljIGRhdGVzIGRpc2FibGVkICh3ZWVrZW5kcyBpbiBjdXJyZW50IG1vbnRoKSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJBdmFpbGFiaWxpdHkgQ2FsZW5kYXIiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iV2Vla2VuZHMgYXJlIGRpc2FibGVkIGZvciB0aGUgY3VycmVudCBtb250aCIKICAgICAgICA+PC9kZWVzLWlucHV0LWRhdGVwaWNrZXI+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgY29uc3QgY3VycmVudE1vbnRoID0gdG9kYXkuZ2V0TW9udGgoKTsKICBjb25zdCBjdXJyZW50WWVhciA9IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgY29uc3Qgc2FtcGxlRXZlbnRzID0gWwogICAgLy8gQ3VycmVudCB3ZWVrIGV2ZW50cwogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0ke3RvZGF5LmdldERhdGUoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJUZWFtIE1lZXRpbmciLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiAyCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJQcm9qZWN0IERlYWRsaW5lIiwKICAgICAgdHlwZTogIndhcm5pbmciCiAgICB9LAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyAyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJSZWxlYXNlIERheSIsCiAgICAgIHR5cGU6ICJzdWNjZXNzIgogICAgfSwKICAgIHsKICAgICAgZGF0ZTogYCR7Y3VycmVudFllYXJ9LSR7KGN1cnJlbnRNb250aCArIDEpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0tJHsodG9kYXkuZ2V0RGF0ZSgpICsgNSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWAsCiAgICAgIHRpdGxlOiAiVXJnZW50IEZpeCBSZXF1aXJlZCIsCiAgICAgIHR5cGU6ICJlcnJvciIKICAgIH0sCiAgICAvLyBNdWx0aXBsZSBldmVudHMgb24gb25lIGRheQogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMSkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0keyh0b2RheS5nZXREYXRlKCkgKyA3KS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9YCwKICAgICAgdGl0bGU6ICJNdWx0aXBsZSBFdmVudHMgVG9kYXkiLAogICAgICB0eXBlOiAiaW5mbyIsCiAgICAgIGNvdW50OiA1CiAgICB9LAogICAgLy8gTmV4dCBtb250aCBldmVudAogICAgewogICAgICBkYXRlOiBgJHtjdXJyZW50WWVhcn0tJHsoY3VycmVudE1vbnRoICsgMikudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfS0xNWAsCiAgICAgIHRpdGxlOiAiRnV0dXJlIFBsYW5uaW5nIFNlc3Npb24iLAogICAgICB0eXBlOiAiaW5mbyIKICAgIH0KICBdOwogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgaWYgKHBpY2tlcikgewogICAgcGlja2VyLmV2ZW50cyA9IHNhbXBsZUV2ZW50czsKICAgIGNvbnNvbGUubG9nKCJDYWxlbmRhciBldmVudHMgbG9hZGVkOiIsIHNhbXBsZUV2ZW50cyk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkNhbGVuZGFyIHdpdGggRXZlbnRzIn0gLnN1YnRpdGxlPSR7IlZpc3VhbCBmZWVkYmFjayBmb3Igc2NoZWR1bGVkIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBDYWxlbmRhciIKICAgICAgICAgIGRlc2NyaXB0aW9uPSJEYXlzIHdpdGggY29sb3JlZCBkb3RzIGhhdmUgZXZlbnRzLiBIb3ZlciB0byBzZWUgZGV0YWlscy4iCiAgICAgICAgPjwvZGVlcy1pbnB1dC1kYXRlcGlja2VyPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgPHN0cm9uZz5FdmVudCBMZWdlbmQ6PC9zdHJvbmc+PGJyPgogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjMDk2OWRhOyI+4pePIEluZm88L3NwYW4+IHwgCiAgICAgICAgICA8c3BhbiBzdHlsZT0iY29sb3I6ICNkMjk5MjI7Ij7il48gV2FybmluZzwvc3Bhbj4gfCAKICAgICAgICAgIDxzcGFuIHN0eWxlPSJjb2xvcjogIzJlYTA0MzsiPuKXjyBTdWNjZXNzPC9zcGFuPiB8IAogICAgICAgICAgPHNwYW4gc3R5bGU9ImNvbG9yOiAjY2YyMjJlOyI+4pePIEVycm9yPC9zcGFuPjxicj4KICAgICAgICAgIDxlbT5EYXlzIHdpdGggbW9yZSB0aGFuIDMgZXZlbnRzIHNob3cgYSBjb3VudCBiYWRnZTwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHBpY2tlciA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kYXRlcGlja2VyIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZXZlbnQtb3V0cHV0Iik7CiAgaWYgKHBpY2tlciAmJiBvdXRwdXQpIHsKICAgIHBpY2tlci5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCB2YWx1ZTIgPSB0YXJnZXQudmFsdWU7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICBjb25zdCBkYXRlID0gbmV3IERhdGUodmFsdWUyKTsKICAgICAgICBjb25zdCBpbnB1dCA9IHRhcmdldC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZGF0ZS1pbnB1dCIpOwogICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gaW5wdXQ/LnZhbHVlIHx8ICJOL0EiOwogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSBgCiAgICAgICAgICAgICAgPHN0cm9uZz5FdmVudCB0cmlnZ2VyZWQhPC9zdHJvbmc+PGJyPgogICAgICAgICAgICAgIElTTyBWYWx1ZTogJHt2YWx1ZTJ9PGJyPgogICAgICAgICAgICAgIEZvcm1hdHRlZDogJHtmb3JtYXR0ZWRWYWx1ZX08YnI+CiAgICAgICAgICAgICAgRGF0ZSBvYmplY3Q6ICR7ZGF0ZS50b0xvY2FsZVN0cmluZygpfQogICAgICAgICAgICBgOwogICAgICB9IGVsc2UgewogICAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPGVtPkRhdGUgY2xlYXJlZDwvZW0+IjsKICAgICAgfQogICAgfSk7CiAgICBwaWNrZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIkRhdGVwaWNrZXIgbG9zdCBmb2N1cyIpOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGRlbW9uc3RyYXRpb24gb2YgY2hhbmdlIGV2ZW50cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRhdGVwaWNrZXIKICAgICAgICAgIGxhYmVsPSJFdmVudCBEZW1vIgogICAgICAgICAgZGVzY3JpcHRpb249IlNlbGVjdCBhIGRhdGUgdG8gc2VlIHRoZSBldmVudCBkZXRhaWxzIgogICAgICAgID48L2RlZXMtaW5wdXQtZGF0ZXBpY2tlcj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJldmVudC1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+U2VsZWN0IGEgZGF0ZSB0byBzZWUgZXZlbnQgZGV0YWlscy4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRhdGVwaWNrZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkYXRlcGlja2VyU3R5bGVzID0gWwogIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLmlucHV0LWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIyNCA3MS40JSA0LjElKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICB9CgogICAgICAuZGF0ZS1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgfQoKICAgICAgLmRhdGUtaW5wdXQ6Zm9jdXMsCiAgICAgIC5kYXRlLWlucHV0Lm9wZW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUgLyAwLjEpIiwgImhzbCgyMTAgMjAlIDk4JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXRlLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIEljb24gY29udGFpbmVyIHVzaW5nIGZsZXhib3ggZm9yIGJldHRlciBwb3NpdGlvbmluZyAqLwogICAgICAuaWNvbi1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5pY29uLWNvbnRhaW5lciA+ICogewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAuY2FsZW5kYXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIGJhY2tncm91bmQtY29sb3IgMC4ycyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBQb3B1cCBTdHlsZXMgKi8KICAgICAgLmNhbGVuZGFyLXBvcHVwIHsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtLCBvcGFjaXR5OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxMHB4IDE1cHggLTNweCBoc2woMCAwJSAwJSAvIDAuMSksIDAgNHB4IDZweCAtNHB4IGhzbCgwIDAlIDAlIC8gMC4xKSIsICIwIDEwcHggMTVweCAtM3B4IGhzbCgwIDAlIDAlIC8gMC4yKSwgMCA0cHggNnB4IC00cHggaHNsKDAgMCUgMCUgLyAwLjIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgei1pbmRleDogNTA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBtaW4td2lkdGg6IDI4MHB4OwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg0cHgpOwogICAgICB9CgogICAgICAuY2FsZW5kYXItcG9wdXAuYm90dG9tIHsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5jYWxlbmRhci1wb3B1cC5zaG93IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogYWxsOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwKTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBDYWxlbmRhciBIZWFkZXIgKi8KICAgICAgLmNhbGVuZGFyLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAubW9udGgteWVhci1kaXNwbGF5IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b24gewogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5uYXYtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBXZWVrZGF5IGhlYWRlcnMgKi8KICAgICAgLndlZWtkYXlzIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KDcsIDFmcik7CiAgICAgICAgZ2FwOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLndlZWtkYXkgewogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgcGFkZGluZzogMCAwIDhweCAwOwogICAgICB9CgogICAgICAvKiBEYXlzIGdyaWQgKi8KICAgICAgLmRheXMtZ3JpZCB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCg3LCAxZnIpOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAuZGF5IHsKICAgICAgICBhc3BlY3QtcmF0aW86IDE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjI0IDcxLjQlIDQuMSUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmRheTpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC5kYXkub3RoZXItbW9udGggewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCA4LjklIDQ2LjElKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC5kYXkudG9kYXkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMTUgMjcuOSUgMTYuOSUpIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5kYXkuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLmRheS5kaXNhYmxlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAvKiBFdmVudCBpbmRpY2F0b3JzICovCiAgICAgIC5kYXkuaGFzLWV2ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ldmVudC1pbmRpY2F0b3IgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC01MCUpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3QgewogICAgICAgIHdpZHRoOiA0cHg7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtZG90LmluZm8gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjExIDcwJSA1MiUpIiwgImhzbCgyMTEgNzAlIDYyJSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Qud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MCUgNDUlKSIsICJoc2woNDUgOTAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5ldmVudC1kb3Quc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIgNjklIDQ1JSkiLCAiaHNsKDE0MiA2OSUgNTUlKSIpfTsKICAgICAgfQoKICAgICAgLmV2ZW50LWRvdC5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICB9CgogICAgICAuZXZlbnQtY291bnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDJweDsKICAgICAgICByaWdodDogMnB4OwogICAgICAgIG1pbi13aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MSUpIiwgImhzbCgwIDcyJSA2MSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICB9CgogICAgICAvKiBUb29sdGlwIGZvciBldmVudCBkZXRhaWxzICovCiAgICAgIC5ldmVudC10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiBjYWxjKDEwMCUgKyA4cHgpOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTUwJSk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICB9CgogICAgICAuZXZlbnQtdG9vbHRpcDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEwMCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWCgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGF5Lmhhcy1ldmVudDpob3ZlciAuZXZlbnQtdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLyogVGltZSBzZWxlY3RvciAqLwogICAgICAudGltZS1zZWxlY3RvciB7CiAgICAgICAgbWFyZ2luLXRvcDogMTJweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0cyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAudGltZS1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDY1cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSAxMS4yJSAvIDAuMSkiLCAiaHNsKDIxMCAyMCUgOTglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRpbWUtc2VwYXJhdG9yIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1zZWxlY3RvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5hbS1wbS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgMTEuMiUpIiwgImhzbCgyMTAgMjAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDIwJSA5OCUpIiwgImhzbCgyMjIuMiA0Ny40JSAxMS4yJSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICB9CgogICAgICAuYW0tcG0tYnV0dG9uOmhvdmVyOm5vdCguc2VsZWN0ZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAyMCUgOTglKSIsICJoc2woMjE1IDI3LjklIDE2LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBidXR0b25zICovCiAgICAgIC5jYWxlbmRhci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDEycHg7CiAgICAgICAgcGFkZGluZy10b3A6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMjQgNzEuNCUgNC4xJSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjQgNzEuNCUgNC4xJSkiLCAiaHNsKDIxMCAyMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnRvZGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudG9kYXktYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNy4yIDMyLjYlIDE3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNsZWFyLWJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIwIDguOSUgNDYuMSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICB9CgogICAgICAuY2xlYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5jbGVhci1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjIpIiwgImhzbCgwIDYyLjglIDMwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogVGltZXpvbmUgc2VsZWN0b3IgKi8KICAgICAgLnRpbWV6b25lLXNlbGVjdG9yIHsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgIHBhZGRpbmctdG9wOiAxMnB4OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0b3ItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjAgOC45JSA0Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3QgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE3LjIgMzIuNiUgMTcuNSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjI0IDcxLjQlIDQuMSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyNCA3MS40JSA0LjElKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGltZXpvbmUtc2VsZWN0OmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTcuMiAzMi42JSAxNy41JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMjAlIDk4JSkiLCAiaHNsKDIxNSAyNy45JSAxNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC50aW1lem9uZS1zZWxlY3Q6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlKSIsICJoc2woMjEwIDIwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDExLjIlIC8gMC4xKSIsICJoc2woMjEwIDIwJSA5OCUgLyAwLjEpIil9OwogICAgICB9CiAgICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL3RlbXBsYXRlLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciByZW5kZXJEYXRlcGlja2VyID0gKGNvbXBvbmVudCkgPT4gewogIGNvbnN0IG1vbnRoTmFtZXMgPSBbCiAgICAiSmFudWFyeSIsCiAgICAiRmVicnVhcnkiLAogICAgIk1hcmNoIiwKICAgICJBcHJpbCIsCiAgICAiTWF5IiwKICAgICJKdW5lIiwKICAgICJKdWx5IiwKICAgICJBdWd1c3QiLAogICAgIlNlcHRlbWJlciIsCiAgICAiT2N0b2JlciIsCiAgICAiTm92ZW1iZXIiLAogICAgIkRlY2VtYmVyIgogIF07CiAgY29uc3Qgd2Vla0RheXMgPSBjb21wb25lbnQud2Vla1N0YXJ0c09uID09PSAxID8gWyJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSIsICJTdSJdIDogWyJTdSIsICJNbyIsICJUdSIsICJXZSIsICJUaCIsICJGciIsICJTYSJdOwogIGNvbnN0IGRheXMyID0gY29tcG9uZW50LmdldERheXNJbk1vbnRoKCk7CiAgY29uc3QgaXNBTSA9IGNvbXBvbmVudC5zZWxlY3RlZEhvdXIgPCAxMjsKICBjb25zdCB0aW1lem9uZXMgPSBjb21wb25lbnQuZ2V0VGltZXpvbmVzKCk7CiAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7Y29tcG9uZW50LmxhYmVsfSAuZGVzY3JpcHRpb249JHtjb21wb25lbnQuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke2NvbXBvbmVudC5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtY29udGFpbmVyIj4KICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICBjbGFzcz0iZGF0ZS1pbnB1dCAke2NvbXBvbmVudC5pc09wZW5lZCA/ICJvcGVuIiA6ICIifSIKICAgICAgICAgICAgICAudmFsdWU9JHtjb21wb25lbnQuZm9ybWF0RGF0ZShjb21wb25lbnQudmFsdWUpfQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke2NvbXBvbmVudC5wbGFjZWhvbGRlcn0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtjb21wb25lbnQuZGlzYWJsZWR9CiAgICAgICAgICAgICAgQGNsaWNrPSR7Y29tcG9uZW50LnRvZ2dsZUNhbGVuZGFyfQogICAgICAgICAgICAgIEBrZXlkb3duPSR7Y29tcG9uZW50LmhhbmRsZUtleWRvd259CiAgICAgICAgICAgICAgQGlucHV0PSR7Y29tcG9uZW50LmhhbmRsZU1hbnVhbElucHV0fQogICAgICAgICAgICAgIEBibHVyPSR7Y29tcG9uZW50LmhhbmRsZUlucHV0Qmx1cn0KICAgICAgICAgICAgICBzdHlsZT0icGFkZGluZy1yaWdodDogJHtjb21wb25lbnQudmFsdWUgPyAiNjRweCIgOiAiNDBweCJ9IgogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQudmFsdWUgJiYgIWNvbXBvbmVudC5kaXNhYmxlZCA/IGIyYAogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJWYWx1ZX0gdGl0bGU9IkNsZWFyIj4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6eCIgaWNvblNpemU9IjE0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjYWxlbmRhci1pY29uIiBpY29uPSJsdWNpZGU6Y2FsZW5kYXIiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICAgIDwhLS0gQ2FsZW5kYXIgUG9wdXAgLS0+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLXBvcHVwICR7Y29tcG9uZW50LmlzT3BlbmVkID8gInNob3ciIDogIiJ9ICR7Y29tcG9uZW50Lm9wZW5zVG9Ub3AgPyAidG9wIiA6ICJib3R0b20ifSI+CiAgICAgICAgICAgICAgPCEtLSBNb250aC9ZZWFyIE5hdmlnYXRpb24gLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FsZW5kYXItaGVhZGVyIj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5wcmV2aW91c01vbnRofT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Y2hldnJvbkxlZnQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1vbnRoLXllYXItZGlzcGxheSI+CiAgICAgICAgICAgICAgICAgICR7bW9udGhOYW1lc1tjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKV19ICR7Y29tcG9uZW50LnZpZXdEYXRlLmdldEZ1bGxZZWFyKCl9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im5hdi1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5uZXh0TW9udGh9PgogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpjaGV2cm9uUmlnaHQiIGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgPCEtLSBXZWVrZGF5IEhlYWRlcnMgLS0+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0id2Vla2RheXMiPgogICAgICAgICAgICAgICAgJHt3ZWVrRGF5cy5tYXAoKGRheSkgPT4gYjJgPGRpdiBjbGFzcz0id2Vla2RheSI+JHtkYXl9PC9kaXY+YCl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gRGF5cyBHcmlkIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRheXMtZ3JpZCI+CiAgICAgICAgICAgICAgICAke2RheXMyLm1hcCgoZGF5KSA9PiB7CiAgICBjb25zdCBpc1RvZGF5MyA9IGNvbXBvbmVudC5pc1RvZGF5KGRheSk7CiAgICBjb25zdCBpc1NlbGVjdGVkID0gY29tcG9uZW50LmlzU2VsZWN0ZWQoZGF5KTsKICAgIGNvbnN0IGlzT3RoZXJNb250aCA9IGRheS5nZXRNb250aCgpICE9PSBjb21wb25lbnQudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgIGNvbnN0IGlzRGlzYWJsZWQgPSBjb21wb25lbnQuaXNEaXNhYmxlZChkYXkpOwogICAgY29uc3QgZGF5RXZlbnRzID0gY29tcG9uZW50LmdldEV2ZW50c0ZvckRhdGUoZGF5KTsKICAgIGNvbnN0IGhhc0V2ZW50cyA9IGRheUV2ZW50cy5sZW5ndGggPiAwOwogICAgY29uc3QgdG90YWxFdmVudENvdW50ID0gZGF5RXZlbnRzLnJlZHVjZSgoc3VtLCBldmVudCkgPT4gc3VtICsgKGV2ZW50LmNvdW50IHx8IDEpLCAwKTsKICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRheSAke2lzT3RoZXJNb250aCA/ICJvdGhlci1tb250aCIgOiAiIn0gJHtpc1RvZGF5MyA/ICJ0b2RheSIgOiAiIn0gJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkIiA6ICIifSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9ICR7aGFzRXZlbnRzID8gImhhcy1ldmVudCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiAhaXNEaXNhYmxlZCAmJiBjb21wb25lbnQuc2VsZWN0RGF0ZShkYXkpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICR7ZGF5LmdldERhdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICR7aGFzRXZlbnRzID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgICR7dG90YWxFdmVudENvdW50ID4gMyA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWNvdW50Ij4ke3RvdGFsRXZlbnRDb3VudH08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LWluZGljYXRvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50cy5zbGljZSgwLCAzKS5tYXAoKGV2ZW50KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZXZlbnQtZG90ICR7ZXZlbnQudHlwZSB8fCAiaW5mbyJ9Ij48L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAke2RheUV2ZW50c1swXS50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImV2ZW50LXRvb2x0aXAiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtkYXlFdmVudHNbMF0udGl0bGV9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RvdGFsRXZlbnRDb3VudCA+IDEgPyBiMmAgKCske3RvdGFsRXZlbnRDb3VudCAtIDF9IG1vcmUpYCA6ICIifQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGA7CiAgfSl9CiAgICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICAgIDwhLS0gVGltZSBTZWxlY3RvciAtLT4KICAgICAgICAgICAgICAke2NvbXBvbmVudC5lbmFibGVUaW1lID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZS1zZWxlY3Rvci10aXRsZSI+VGltZTwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aW1lLWlucHV0cyI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IChjb21wb25lbnQuc2VsZWN0ZWRIb3VyID09PSAwID8gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyID4gMTIgPyBjb21wb25lbnQuc2VsZWN0ZWRIb3VyIC0gMTIgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIikgOiBjb21wb25lbnQuc2VsZWN0ZWRIb3VyLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IGNvbXBvbmVudC5oYW5kbGVIb3VySW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iJHtjb21wb25lbnQudGltZUZvcm1hdCA9PT0gIjEyaCIgPyAxIDogMH0iCiAgICAgICAgICAgICAgICAgICAgICBtYXg9IiR7Y29tcG9uZW50LnRpbWVGb3JtYXQgPT09ICIxMmgiID8gMTIgOiAyM30iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGltZS1zZXBhcmF0b3IiPjo8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0ibnVtYmVyIiAKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0aW1lLWlucHV0IiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke2NvbXBvbmVudC5zZWxlY3RlZE1pbnV0ZS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9CiAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlTWludXRlSW5wdXQoZTExKX0KICAgICAgICAgICAgICAgICAgICAgIG1pbj0iMCIKICAgICAgICAgICAgICAgICAgICAgIG1heD0iNTkiCiAgICAgICAgICAgICAgICAgICAgICBzdGVwPSIke2NvbXBvbmVudC5taW51dGVJbmNyZW1lbnQgfHwgMX0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgICAke2NvbXBvbmVudC50aW1lRm9ybWF0ID09PSAiMTJoIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iYW0tcG0tc2VsZWN0b3IiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHtpc0FNID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiBjb21wb25lbnQuc2V0QU1QTSgiYW0iKX0KICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgIEFNCiAgICAgICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJhbS1wbS1idXR0b24gJHshaXNBTSA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gY29tcG9uZW50LnNldEFNUE0oInBtIil9CiAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICBQTQogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgICAgIDwhLS0gVGltZXpvbmUgU2VsZWN0b3IgLS0+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQuZW5hYmxlVGltZXpvbmUgPyBiMmAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpbWV6b25lLXNlbGVjdG9yIj4KICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGltZXpvbmUtc2VsZWN0b3ItdGl0bGUiPlRpbWV6b25lPC9kaXY+CiAgICAgICAgICAgICAgICAgIDxzZWxlY3QgCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRpbWV6b25lLXNlbGVjdCIgCiAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7Y29tcG9uZW50LnRpbWV6b25lfQogICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiBjb21wb25lbnQuaGFuZGxlVGltZXpvbmVDaGFuZ2UoZTExKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICR7dGltZXpvbmVzLm1hcCgodHopID0+IGIyYAogICAgICAgICAgICAgICAgICAgICAgPG9wdGlvbiB2YWx1ZT0iJHt0ei52YWx1ZX0iID9zZWxlY3RlZD0ke3R6LnZhbHVlID09PSBjb21wb25lbnQudGltZXpvbmV9PgogICAgICAgICAgICAgICAgICAgICAgICAke3R6LmxhYmVsfQogICAgICAgICAgICAgICAgICAgICAgPC9vcHRpb24+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgIDwvc2VsZWN0PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6ICIifQoKICAgICAgICAgICAgICA8IS0tIEFjdGlvbiBCdXR0b25zIC0tPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNhbGVuZGFyLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ1dHRvbiB0b2RheS1idXR0b24iIEBjbGljaz0ke2NvbXBvbmVudC5zZWxlY3RUb2RheX0+CiAgICAgICAgICAgICAgICAgIFRvZGF5CiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2xlYXItYnV0dG9uIiBAY2xpY2s9JHtjb21wb25lbnQuY2xlYXJ9PgogICAgICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kYXRlcGlja2VyL2NvbXBvbmVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlMTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREYXRlcGlja2VyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1kYXRlcGlja2VyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzOwogIGxldCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VuYWJsZVRpbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWVGb3JtYXRfZGVjb3JhdG9yczsKICBsZXQgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aW1lRm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfZGF0ZUZvcm1hdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkRhdGVfZGVjb3JhdG9yczsKICBsZXQgX21pbkRhdGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhEYXRlX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dlZWtTdGFydHNPbl9kZWNvcmF0b3JzOwogIGxldCBfd2Vla1N0YXJ0c09uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2Vla1N0YXJ0c09uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZGVjb3JhdG9yczsKICBsZXQgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2RlY29yYXRvcnM7CiAgbGV0IF90aW1lem9uZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ldmVudHNfZGVjb3JhdG9yczsKICBsZXQgX2V2ZW50c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzT3BlbmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGVfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkRGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZpZXdEYXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlld0RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE1pbnV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREYXRlcGlja2VyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZW5hYmxlVGltZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lRm9ybWF0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWludXRlSW5jcmVtZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZGF0ZUZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX21pbkRhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhEYXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZGlzYWJsZWREYXRlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90aW1lem9uZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2V2ZW50c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaXNPcGVuZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkRGF0ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmlld0RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlbGVjdGVkSG91cl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRNaW51dGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZW5hYmxlVGltZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbmFibGVUaW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVuYWJsZVRpbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW5hYmxlVGltZV9pbml0aWFsaXplcnMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWVGb3JtYXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGltZUZvcm1hdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGltZUZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lRm9ybWF0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50aW1lRm9ybWF0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbWVGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9taW51dGVJbmNyZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWludXRlSW5jcmVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW51dGVJbmNyZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWludXRlSW5jcmVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW51dGVJbmNyZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWludXRlSW5jcmVtZW50X2luaXRpYWxpemVycywgX21pbnV0ZUluY3JlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kYXRlRm9ybWF0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGVGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRhdGVGb3JtYXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGF0ZUZvcm1hdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0ZUZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfbWluRGF0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5EYXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5EYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pbkRhdGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkRhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluRGF0ZV9pbml0aWFsaXplcnMsIF9taW5EYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX21heERhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWF4RGF0ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhEYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21heERhdGVfaW5pdGlhbGl6ZXJzLCBfbWF4RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9kaXNhYmxlZERhdGVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc2FibGVkRGF0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkRGF0ZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlzYWJsZWREYXRlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzYWJsZWREYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZERhdGVzX2luaXRpYWxpemVycywgX2Rpc2FibGVkRGF0ZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfd2Vla1N0YXJ0c09uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndlZWtTdGFydHNPbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid2Vla1N0YXJ0c09uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndlZWtTdGFydHNPbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2Vla1N0YXJ0c09uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIF93ZWVrU3RhcnRzT25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9lbmFibGVUaW1lem9uZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVUaW1lem9uZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW5hYmxlVGltZXpvbmUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW5hYmxlVGltZXpvbmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVRpbWV6b25lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VuYWJsZVRpbWV6b25lX2luaXRpYWxpemVycywgX2VuYWJsZVRpbWV6b25lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkodGhpcywgbnVsbCwgX3RpbWV6b25lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRpbWV6b25lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aW1lem9uZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aW1lem9uZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGltZXpvbmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGltZXpvbmVfaW5pdGlhbGl6ZXJzLCBfdGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfZXZlbnRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50c19pbml0aWFsaXplcnMsIF9ldmVudHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9vcGVuc1RvVG9wX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wZW5zVG9Ub3AiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wZW5zVG9Ub3AiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbnNUb1RvcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3BlbnNUb1RvcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcGVuc1RvVG9wX2luaXRpYWxpemVycywgX29wZW5zVG9Ub3BfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfc2VsZWN0ZWREYXRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkRGF0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWREYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkRGF0ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWREYXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZERhdGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUxOSh0aGlzLCBudWxsLCBfdmlld0RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld0RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdEYXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdEYXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3RGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3RGF0ZV9pbml0aWFsaXplcnMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZEhvdXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRIb3VyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZEhvdXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRIb3VyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZEhvdXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRIb3VyX2luaXRpYWxpemVycywgX3NlbGVjdGVkSG91cl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTE5KHRoaXMsIG51bGwsIF9zZWxlY3RlZE1pbnV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE1pbnV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRNaW51dGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRNaW51dGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkTWludXRlX2luaXRpYWxpemVycywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMTkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREYXRlcGlja2VyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2VuYWJsZVRpbWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVuYWJsZVRpbWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlVGltZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW5hYmxlVGltZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9pbml0aWFsaXplcnMsICIyNGgiKSk7CiAgICBnZXQgdGltZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RpbWVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiN0aW1lRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWludXRlSW5jcmVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdGltZUZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21pbnV0ZUluY3JlbWVudF9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBtaW51dGVJbmNyZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW51dGVJbmNyZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW51dGVJbmNyZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbnV0ZUluY3JlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW51dGVJbmNyZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9kYXRlRm9ybWF0X2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgZGF0ZUZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGVGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkYXRlRm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNkYXRlRm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2RhdGVGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9taW5EYXRlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtaW5EYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1pbkRhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkRhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfbWluRGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX21heERhdGVfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1heERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhEYXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWF4RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWF4RGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9tYXhEYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlzYWJsZWREYXRlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkRGF0ZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZERhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZERhdGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd2Vla1N0YXJ0c09uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZGlzYWJsZWREYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCB3ZWVrU3RhcnRzT24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIERlZmF1bHQgdG8gTW9uZGF5CiAgICBzZXQgd2Vla1N0YXJ0c09uKHZhbHVlMikgewogICAgICB0aGlzLiN3ZWVrU3RhcnRzT25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3dlZWtTdGFydHNPbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIllZWVktTU0tREQiKSk7CiAgICBnZXQgcGxhY2Vob2xkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBsYWNlaG9sZGVyKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VuYWJsZVRpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF9lbmFibGVUaW1lem9uZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZW5hYmxlVGltZXpvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVuYWJsZVRpbWV6b25lKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVUaW1lem9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RpbWV6b25lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfZW5hYmxlVGltZXpvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9pbml0aWFsaXplcnMsIEludGwuRGF0ZVRpbWVGb3JtYXQoKS5yZXNvbHZlZE9wdGlvbnMoKS50aW1lWm9uZSkpOwogICAgZ2V0IHRpbWV6b25lKCkgewogICAgICByZXR1cm4gdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aW1lem9uZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGltZXpvbmVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF90aW1lem9uZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZXZlbnRzKCkgewogICAgICByZXR1cm4gdGhpcy4jZXZlbnRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXZlbnRzKHZhbHVlMikgewogICAgICB0aGlzLiNldmVudHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2V2ZW50c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc09wZW5lZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNPcGVuZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzT3BlbmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3BlbnNUb1RvcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkRGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBzZWxlY3RlZERhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZERhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZERhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkRGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZpZXdEYXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWREYXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfdmlld0RhdGVfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkpOwogICAgZ2V0IHZpZXdEYXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3RGF0ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld0RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIwKHRoaXMsIF92aWV3RGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkSG91cl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBzZWxlY3RlZEhvdXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZEhvdXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEhvdXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkSG91cl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkTWludXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRIb3VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMCh0aGlzLCBfc2VsZWN0ZWRNaW51dGVfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRNaW51dGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkTWludXRlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE1pbnV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGRhdGVwaWNrZXJTdHlsZXM7CiAgICBnZXRUaW1lem9uZXMoKSB7CiAgICAgIHJldHVybiBbCiAgICAgICAgeyB2YWx1ZTogIlVUQyIsIGxhYmVsOiAiVVRDIChDb29yZGluYXRlZCBVbml2ZXJzYWwgVGltZSkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFtZXJpY2EvTmV3X1lvcmsiLCBsYWJlbDogIkVhc3Rlcm4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0NoaWNhZ28iLCBsYWJlbDogIkNlbnRyYWwgVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0RlbnZlciIsIGxhYmVsOiAiTW91bnRhaW4gVGltZSAoVVMgJiBDYW5hZGEpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0xvc19BbmdlbGVzIiwgbGFiZWw6ICJQYWNpZmljIFRpbWUgKFVTICYgQ2FuYWRhKSIgfSwKICAgICAgICB7IHZhbHVlOiAiQW1lcmljYS9QaG9lbml4IiwgbGFiZWw6ICJBcml6b25hIiB9LAogICAgICAgIHsgdmFsdWU6ICJBbWVyaWNhL0FuY2hvcmFnZSIsIGxhYmVsOiAiQWxhc2thIiB9LAogICAgICAgIHsgdmFsdWU6ICJQYWNpZmljL0hvbm9sdWx1IiwgbGFiZWw6ICJIYXdhaWkiIH0sCiAgICAgICAgeyB2YWx1ZTogIkV1cm9wZS9Mb25kb24iLCBsYWJlbDogIkxvbmRvbiIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL1BhcmlzIiwgbGFiZWw6ICJQYXJpcyIgfSwKICAgICAgICB7IHZhbHVlOiAiRXVyb3BlL0JlcmxpbiIsIGxhYmVsOiAiQmVybGluIiB9LAogICAgICAgIHsgdmFsdWU6ICJFdXJvcGUvTW9zY293IiwgbGFiZWw6ICJNb3Njb3ciIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvRHViYWkiLCBsYWJlbDogIkR1YmFpIiB9LAogICAgICAgIHsgdmFsdWU6ICJBc2lhL0tvbGthdGEiLCBsYWJlbDogIkluZGlhIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvU2hhbmdoYWkiLCBsYWJlbDogIkNoaW5hIFN0YW5kYXJkIFRpbWUiIH0sCiAgICAgICAgeyB2YWx1ZTogIkFzaWEvVG9reW8iLCBsYWJlbDogIlRva3lvIiB9LAogICAgICAgIHsgdmFsdWU6ICJBdXN0cmFsaWEvU3lkbmV5IiwgbGFiZWw6ICJTeWRuZXkiIH0sCiAgICAgICAgeyB2YWx1ZTogIlBhY2lmaWMvQXVja2xhbmQiLCBsYWJlbDogIkF1Y2tsYW5kIiB9CiAgICAgIF07CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiByZW5kZXJEYXRlcGlja2VyKHRoaXMpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlID0gdGhpcy5oYW5kbGVDbGlja091dHNpZGUuYmluZCh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZhbHVlKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZSh0aGlzLnZhbHVlKTsKICAgICAgICAgIGlmICghaXNOYU4oZGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gZGF0ZTsKICAgICAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKGRhdGUpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IGRhdGUuZ2V0SG91cnMoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IGRhdGUuZ2V0TWludXRlcygpOwogICAgICAgICAgfQogICAgICAgIH0gY2F0Y2ggewogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKG5vdzIpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gbm93Mi5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSAwOwogICAgICB9CiAgICB9CiAgICBmb3JtYXREYXRlKGlzb1N0cmluZykgewogICAgICBpZiAoIWlzb1N0cmluZykKICAgICAgICByZXR1cm4gIiI7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGlzb1N0cmluZyk7CiAgICAgICAgaWYgKGlzTmFOKGRhdGUuZ2V0VGltZSgpKSkKICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBsZXQgZm9ybWF0dGVkID0gdGhpcy5kYXRlRm9ybWF0OwogICAgICAgIGNvbnN0IGRheSA9IGRhdGUuZ2V0RGF0ZSgpLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKTsKICAgICAgICBjb25zdCBtb250aCA9IChkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgY29uc3QgeWVhciA9IGRhdGUuZ2V0RnVsbFllYXIoKS50b1N0cmluZygpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJZWVlZIiwgeWVhcik7CiAgICAgICAgZm9ybWF0dGVkID0gZm9ybWF0dGVkLnJlcGxhY2UoIllZIiwgeWVhci5zbGljZSgtMikpOwogICAgICAgIGZvcm1hdHRlZCA9IGZvcm1hdHRlZC5yZXBsYWNlKCJNTSIsIG1vbnRoKTsKICAgICAgICBmb3JtYXR0ZWQgPSBmb3JtYXR0ZWQucmVwbGFjZSgiREQiLCBkYXkpOwogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICAgIGNvbnN0IGhvdXJzMjQgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICBjb25zdCBob3VyczEyID0gaG91cnMyNCA9PT0gMCA/IDEyIDogaG91cnMyNCA+IDEyID8gaG91cnMyNCAtIDEyIDogaG91cnMyNDsKICAgICAgICAgIGNvbnN0IG1pbnV0ZXMgPSBkYXRlLmdldE1pbnV0ZXMoKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIik7CiAgICAgICAgICBjb25zdCBhbXBtID0gaG91cnMyNCA+PSAxMiA/ICJQTSIgOiAiQU0iOwogICAgICAgICAgaWYgKHRoaXMudGltZUZvcm1hdCA9PT0gIjEyaCIpIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczEyfToke21pbnV0ZXN9ICR7YW1wbX1gOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZm9ybWF0dGVkICs9IGAgJHtob3VyczI0LnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgICAgICB0aW1lWm9uZU5hbWU6ICJzaG9ydCIsCiAgICAgICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lCiAgICAgICAgICB9KTsKICAgICAgICAgIGNvbnN0IHBhcnRzID0gZm9ybWF0dGVyMi5mb3JtYXRUb1BhcnRzKGRhdGUpOwogICAgICAgICAgY29uc3QgdHpQYXJ0ID0gcGFydHMuZmluZCgocGFydCkgPT4gcGFydC50eXBlID09PSAidGltZVpvbmVOYW1lIik7CiAgICAgICAgICBpZiAodHpQYXJ0KSB7CiAgICAgICAgICAgIGZvcm1hdHRlZCArPSBgICR7dHpQYXJ0LnZhbHVlfWA7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiBmb3JtYXR0ZWQ7CiAgICAgIH0gY2F0Y2ggewogICAgICAgIHJldHVybiAiIjsKICAgICAgfQogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjAodGhpcywgX3NlbGVjdGVkTWludXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0pOwogICAgYXN5bmMgdG9nZ2xlQ2FsZW5kYXIoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IGlucHV0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5pbnB1dC1jb250YWluZXIiKTsKICAgICAgICBjb25zdCByZWN0ID0gaW5wdXRDb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3Qgc3BhY2VCZWxvdyA9IHdpbmRvdy5pbm5lckhlaWdodCAtIHJlY3QuYm90dG9tOwogICAgICAgIGNvbnN0IHNwYWNlQWJvdmUgPSByZWN0LnRvcDsKICAgICAgICB0aGlzLm9wZW5zVG9Ub3AgPSBzcGFjZUJlbG93IDwgNDAwICYmIHNwYWNlQWJvdmUgPiBzcGFjZUJlbG93OwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgICAgfSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZSk7CiAgICAgIH0KICAgIH0KICAgIGdldERheXNJbk1vbnRoKCkgewogICAgICBjb25zdCB5ZWFyID0gdGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpOwogICAgICBjb25zdCBtb250aCA9IHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKTsKICAgICAgY29uc3QgZmlyc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCwgMSk7CiAgICAgIGNvbnN0IGxhc3REYXkgPSBuZXcgRGF0ZSh5ZWFyLCBtb250aCArIDEsIDApOwogICAgICBjb25zdCBkYXlzMiA9IFtdOwogICAgICBjb25zdCBzdGFydE9mZnNldCA9IHRoaXMud2Vla1N0YXJ0c09uID09PSAxID8gZmlyc3REYXkuZ2V0RGF5KCkgPT09IDAgPyA2IDogZmlyc3REYXkuZ2V0RGF5KCkgLSAxIDogZmlyc3REYXkuZ2V0RGF5KCk7CiAgICAgIGZvciAobGV0IGkxMSA9IHN0YXJ0T2Zmc2V0OyBpMTEgPiAwOyBpMTEtLSkgewogICAgICAgIGRheXMyLnB1c2gobmV3IERhdGUoeWVhciwgbW9udGgsIDEgLSBpMTEpKTsKICAgICAgfQogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGFzdERheS5nZXREYXRlKCk7IGkxMSsrKSB7CiAgICAgICAgZGF5czIucHVzaChuZXcgRGF0ZSh5ZWFyLCBtb250aCwgaTExKSk7CiAgICAgIH0KICAgICAgY29uc3QgcmVtYWluaW5nRGF5cyA9IDQyIC0gZGF5czIubGVuZ3RoOwogICAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gcmVtYWluaW5nRGF5czsgaTExKyspIHsKICAgICAgICBkYXlzMi5wdXNoKG5ldyBEYXRlKHllYXIsIG1vbnRoICsgMSwgaTExKSk7CiAgICAgIH0KICAgICAgcmV0dXJuIGRheXMyOwogICAgfQogICAgaXNUb2RheShkYXRlKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdG9kYXkuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdG9kYXkuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRvZGF5LmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc1NlbGVjdGVkKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkRGF0ZSkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHJldHVybiBkYXRlLmdldERhdGUoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0RGF0ZSgpICYmIGRhdGUuZ2V0TW9udGgoKSA9PT0gdGhpcy5zZWxlY3RlZERhdGUuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IHRoaXMuc2VsZWN0ZWREYXRlLmdldEZ1bGxZZWFyKCk7CiAgICB9CiAgICBpc0Rpc2FibGVkKGRhdGUpIHsKICAgICAgaWYgKHRoaXMubWluRGF0ZSkgewogICAgICAgIGNvbnN0IG1pbjMgPSBuZXcgRGF0ZSh0aGlzLm1pbkRhdGUpOwogICAgICAgIGlmIChkYXRlIDwgbWluMykKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heERhdGUpIHsKICAgICAgICBjb25zdCBtYXgzID0gbmV3IERhdGUodGhpcy5tYXhEYXRlKTsKICAgICAgICBpZiAoZGF0ZSA+IG1heDMpCiAgICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICBpZiAodGhpcy5kaXNhYmxlZERhdGVzICYmIHRoaXMuZGlzYWJsZWREYXRlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZGlzYWJsZWREYXRlcy5zb21lKChkaXNhYmxlZFN0cikgPT4gewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgZGlzYWJsZWQyID0gbmV3IERhdGUoZGlzYWJsZWRTdHIpOwogICAgICAgICAgICByZXR1cm4gZGF0ZS5nZXREYXRlKCkgPT09IGRpc2FibGVkMi5nZXREYXRlKCkgJiYgZGF0ZS5nZXRNb250aCgpID09PSBkaXNhYmxlZDIuZ2V0TW9udGgoKSAmJiBkYXRlLmdldEZ1bGxZZWFyKCkgPT09IGRpc2FibGVkMi5nZXRGdWxsWWVhcigpOwogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9CiAgICBnZXRFdmVudHNGb3JEYXRlKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmV2ZW50cyB8fCB0aGlzLmV2ZW50cy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIFtdOwogICAgICBjb25zdCBkYXRlU3RyID0gYCR7ZGF0ZS5nZXRGdWxsWWVhcigpfS0keyhkYXRlLmdldE1vbnRoKCkgKyAxKS50b1N0cmluZygpLnBhZFN0YXJ0KDIsICIwIil9LSR7ZGF0ZS5nZXREYXRlKCkudG9TdHJpbmcoKS5wYWRTdGFydCgyLCAiMCIpfWA7CiAgICAgIHJldHVybiB0aGlzLmV2ZW50cy5maWx0ZXIoKGV2ZW50KSA9PiBldmVudC5kYXRlID09PSBkYXRlU3RyKTsKICAgIH0KICAgIHNlbGVjdERhdGUoZGF0ZSkgewogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG5ldyBEYXRlKGRhdGUuZ2V0RnVsbFllYXIoKSwgZGF0ZS5nZXRNb250aCgpLCBkYXRlLmdldERhdGUoKSwgdGhpcy5zZWxlY3RlZEhvdXIsIHRoaXMuc2VsZWN0ZWRNaW51dGUpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBpZiAoIXRoaXMuZW5hYmxlVGltZSkgewogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2VsZWN0VG9kYXkoKSB7CiAgICAgIGNvbnN0IHRvZGF5ID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gdG9kYXk7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0b2RheSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdG9kYXkuZ2V0SG91cnMoKTsKICAgICAgdGhpcy5zZWxlY3RlZE1pbnV0ZSA9IHRvZGF5LmdldE1pbnV0ZXMoKTsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZm9ybWF0VmFsdWVXaXRoVGltZXpvbmUodGhpcy5zZWxlY3RlZERhdGUpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyKCkgewogICAgICB0aGlzLnZhbHVlID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgIH0KICAgIHByZXZpb3VzTW9udGgoKSB7CiAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZSh0aGlzLnZpZXdEYXRlLmdldEZ1bGxZZWFyKCksIHRoaXMudmlld0RhdGUuZ2V0TW9udGgoKSAtIDEsIDEpOwogICAgfQogICAgbmV4dE1vbnRoKCkgewogICAgICB0aGlzLnZpZXdEYXRlID0gbmV3IERhdGUodGhpcy52aWV3RGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnZpZXdEYXRlLmdldE1vbnRoKCkgKyAxLCAxKTsKICAgIH0KICAgIGhhbmRsZUhvdXJJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBsZXQgdmFsdWUyID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpIHx8IDA7CiAgICAgIGlmICh0aGlzLnRpbWVGb3JtYXQgPT09ICIxMmgiKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMSwgTWF0aC5taW4oMTIsIHZhbHVlMikpOwogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSG91ciA+PSAxMiAmJiB2YWx1ZTIgIT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHZhbHVlMiArIDEyOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zZWxlY3RlZEhvdXIgPCAxMiAmJiB2YWx1ZTIgPT09IDEyKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IDA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gdmFsdWUyOwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IE1hdGgubWF4KDAsIE1hdGgubWluKDIzLCB2YWx1ZTIpKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGhhbmRsZU1pbnV0ZUlucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGxldCB2YWx1ZTIgPSBwYXJzZUludChpbnB1dC52YWx1ZSkgfHwgMDsKICAgICAgdmFsdWUyID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oNTksIHZhbHVlMikpOwogICAgICBpZiAodGhpcy5taW51dGVJbmNyZW1lbnQgJiYgdGhpcy5taW51dGVJbmNyZW1lbnQgPiAxKSB7CiAgICAgICAgdmFsdWUyID0gTWF0aC5yb3VuZCh2YWx1ZTIgLyB0aGlzLm1pbnV0ZUluY3JlbWVudCkgKiB0aGlzLm1pbnV0ZUluY3JlbWVudDsKICAgICAgfQogICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gdmFsdWUyOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIHNldEFNUE0ocGVyaW9kKSB7CiAgICAgIGlmIChwZXJpb2QgPT09ICJhbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPj0gMTIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciAtPSAxMjsKICAgICAgfSBlbHNlIGlmIChwZXJpb2QgPT09ICJwbSIgJiYgdGhpcy5zZWxlY3RlZEhvdXIgPCAxMikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyICs9IDEyOwogICAgICB9CiAgICAgIHRoaXMudXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpOwogICAgfQogICAgdXBkYXRlU2VsZWN0ZWREYXRlVGltZSgpIHsKICAgICAgaWYgKHRoaXMuc2VsZWN0ZWREYXRlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBuZXcgRGF0ZSh0aGlzLnNlbGVjdGVkRGF0ZS5nZXRGdWxsWWVhcigpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXRNb250aCgpLCB0aGlzLnNlbGVjdGVkRGF0ZS5nZXREYXRlKCksIHRoaXMuc2VsZWN0ZWRIb3VyLCB0aGlzLnNlbGVjdGVkTWludXRlKTsKICAgICAgICB0aGlzLnZhbHVlID0gdGhpcy5mb3JtYXRWYWx1ZVdpdGhUaW1lem9uZSh0aGlzLnNlbGVjdGVkRGF0ZSk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVRpbWV6b25lQ2hhbmdlKGUxMSkgewogICAgICBjb25zdCBzZWxlY3QgPSBlMTEudGFyZ2V0OwogICAgICB0aGlzLnRpbWV6b25lID0gc2VsZWN0LnZhbHVlOwogICAgICB0aGlzLnVwZGF0ZVNlbGVjdGVkRGF0ZVRpbWUoKTsKICAgIH0KICAgIGZvcm1hdFZhbHVlV2l0aFRpbWV6b25lKGRhdGUpIHsKICAgICAgaWYgKCF0aGlzLmVuYWJsZVRpbWV6b25lKSB7CiAgICAgICAgcmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKTsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZXIyID0gbmV3IEludGwuRGF0ZVRpbWVGb3JtYXQoImVuLVVTIiwgewogICAgICAgIHllYXI6ICJudW1lcmljIiwKICAgICAgICBtb250aDogIjItZGlnaXQiLAogICAgICAgIGRheTogIjItZGlnaXQiLAogICAgICAgIGhvdXI6ICIyLWRpZ2l0IiwKICAgICAgICBtaW51dGU6ICIyLWRpZ2l0IiwKICAgICAgICBzZWNvbmQ6ICIyLWRpZ2l0IiwKICAgICAgICBob3VyMTI6IGZhbHNlLAogICAgICAgIHRpbWVab25lOiB0aGlzLnRpbWV6b25lLAogICAgICAgIHRpbWVab25lTmFtZTogInNob3J0IgogICAgICB9KTsKICAgICAgY29uc3QgcGFydHMgPSBmb3JtYXR0ZXIyLmZvcm1hdFRvUGFydHMoZGF0ZSk7CiAgICAgIGNvbnN0IGRhdGVQYXJ0cyA9IHt9OwogICAgICBwYXJ0cy5mb3JFYWNoKChwYXJ0KSA9PiB7CiAgICAgICAgZGF0ZVBhcnRzW3BhcnQudHlwZV0gPSBwYXJ0LnZhbHVlOwogICAgICB9KTsKICAgICAgY29uc3QgaXNvU3RyaW5nID0gYCR7ZGF0ZVBhcnRzLnllYXJ9LSR7ZGF0ZVBhcnRzLm1vbnRofS0ke2RhdGVQYXJ0cy5kYXl9VCR7ZGF0ZVBhcnRzLmhvdXJ9OiR7ZGF0ZVBhcnRzLm1pbnV0ZX06JHtkYXRlUGFydHMuc2Vjb25kfWA7CiAgICAgIGNvbnN0IHR6T2Zmc2V0ID0gdGhpcy5nZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aGlzLnRpbWV6b25lKTsKICAgICAgcmV0dXJuIGAke2lzb1N0cmluZ30ke3R6T2Zmc2V0fWA7CiAgICB9CiAgICBnZXRUaW1lem9uZU9mZnNldChkYXRlLCB0aW1lem9uZSkgewogICAgICBjb25zdCB0ekRhdGUgPSBuZXcgRGF0ZShkYXRlLnRvTG9jYWxlU3RyaW5nKCJlbi1VUyIsIHsgdGltZVpvbmU6IHRpbWV6b25lIH0pKTsKICAgICAgY29uc3QgdXRjRGF0ZSA9IG5ldyBEYXRlKGRhdGUudG9Mb2NhbGVTdHJpbmcoImVuLVVTIiwgeyB0aW1lWm9uZTogIlVUQyIgfSkpOwogICAgICBjb25zdCBvZmZzZXRNaW51dGVzID0gKHR6RGF0ZS5nZXRUaW1lKCkgLSB1dGNEYXRlLmdldFRpbWUoKSkgLyAoMWUzICogNjApOwogICAgICBjb25zdCBob3VycyA9IE1hdGguZmxvb3IoTWF0aC5hYnMob2Zmc2V0TWludXRlcykgLyA2MCk7CiAgICAgIGNvbnN0IG1pbnV0ZXMgPSBNYXRoLmFicyhvZmZzZXRNaW51dGVzKSAlIDYwOwogICAgICBjb25zdCBzaWduID0gb2Zmc2V0TWludXRlcyA+PSAwID8gIisiIDogIi0iOwogICAgICByZXR1cm4gYCR7c2lnbn0ke2hvdXJzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX06JHttaW51dGVzLnRvU3RyaW5nKCkucGFkU3RhcnQoMiwgIjAiKX1gOwogICAgfQogICAgaGFuZGxlS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy50b2dnbGVDYWxlbmRhcigpOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiICYmIHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVmFsdWUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlTWFudWFsSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0LnZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCFpbnB1dFZhbHVlKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRlID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgcGFyc2VkRGF0ZSA9IHRoaXMucGFyc2VNYW51YWxEYXRlKGlucHV0VmFsdWUpOwogICAgICBpZiAocGFyc2VkRGF0ZSAmJiAhaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgdGhpcy52YWx1ZSA9IHBhcnNlZERhdGUudG9JU09TdHJpbmcoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IHBhcnNlZERhdGU7CiAgICAgICAgdGhpcy52aWV3RGF0ZSA9IG5ldyBEYXRlKHBhcnNlZERhdGUpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRIb3VyID0gcGFyc2VkRGF0ZS5nZXRIb3VycygpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBwYXJzZWREYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXRCbHVyKGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IGlucHV0VmFsdWUgPSBpbnB1dC52YWx1ZS50cmltKCk7CiAgICAgIGlmICghaW5wdXRWYWx1ZSkgewogICAgICAgIHRoaXMudmFsdWUgPSAiIjsKICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IG51bGw7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHBhcnNlZERhdGUgPSB0aGlzLnBhcnNlTWFudWFsRGF0ZShpbnB1dFZhbHVlKTsKICAgICAgaWYgKHBhcnNlZERhdGUgJiYgIWlzTmFOKHBhcnNlZERhdGUuZ2V0VGltZSgpKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBwYXJzZWREYXRlLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgdGhpcy5zZWxlY3RlZERhdGUgPSBwYXJzZWREYXRlOwogICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShwYXJzZWREYXRlKTsKICAgICAgICB0aGlzLnNlbGVjdGVkSG91ciA9IHBhcnNlZERhdGUuZ2V0SG91cnMoKTsKICAgICAgICB0aGlzLnNlbGVjdGVkTWludXRlID0gcGFyc2VkRGF0ZS5nZXRNaW51dGVzKCk7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLmZvcm1hdERhdGUodGhpcy52YWx1ZSk7CiAgICAgIH0KICAgIH0KICAgIHBhcnNlTWFudWFsRGF0ZShpbnB1dCkgewogICAgICBpZiAoIWlucHV0KQogICAgICAgIHJldHVybiBudWxsOwogICAgICBjb25zdCBwYXJ0cyA9IGlucHV0LnNwbGl0KCIgIik7CiAgICAgIGxldCBkYXRlUGFydCA9IHBhcnRzWzBdOwogICAgICBsZXQgdGltZVBhcnQgPSBwYXJ0c1sxXSB8fCAiIjsKICAgICAgbGV0IHBhcnNlZERhdGUgPSBudWxsOwogICAgICBjb25zdCBpc29NYXRjaCA9IGRhdGVQYXJ0Lm1hdGNoKC9eKFxkezR9KS0oXGR7MSwyfSktKFxkezEsMn0pJC8pOwogICAgICBpZiAoaXNvTWF0Y2gpIHsKICAgICAgICBjb25zdCBbXzQsIHllYXIsIG1vbnRoLCBkYXldID0gaXNvTWF0Y2g7CiAgICAgICAgcGFyc2VkRGF0ZSA9IG5ldyBEYXRlKHBhcnNlSW50KHllYXIpLCBwYXJzZUludChtb250aCkgLSAxLCBwYXJzZUludChkYXkpKTsKICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCBldU1hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLihcZHsxLDJ9KVwuKFxkezR9KSQvKTsKICAgICAgICBpZiAoZXVNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBkYXksIG1vbnRoLCB5ZWFyXSA9IGV1TWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUpIHsKICAgICAgICBjb25zdCB1c01hdGNoID0gZGF0ZVBhcnQubWF0Y2goL14oXGR7MSwyfSlcLyhcZHsxLDJ9KVwvKFxkezR9KSQvKTsKICAgICAgICBpZiAodXNNYXRjaCkgewogICAgICAgICAgY29uc3QgW180LCBtb250aCwgZGF5LCB5ZWFyXSA9IHVzTWF0Y2g7CiAgICAgICAgICBwYXJzZWREYXRlID0gbmV3IERhdGUocGFyc2VJbnQoeWVhciksIHBhcnNlSW50KG1vbnRoKSAtIDEsIHBhcnNlSW50KGRheSkpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIXBhcnNlZERhdGUgfHwgaXNOYU4ocGFyc2VkRGF0ZS5nZXRUaW1lKCkpKSB7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRpbWVQYXJ0KSB7CiAgICAgICAgY29uc3QgdGltZU1hdGNoID0gdGltZVBhcnQubWF0Y2goL14oXGR7MSwyfSk6KFxkezJ9KSQvKTsKICAgICAgICBpZiAodGltZU1hdGNoKSB7CiAgICAgICAgICBjb25zdCBbXzQsIGhvdXJzLCBtaW51dGVzXSA9IHRpbWVNYXRjaDsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0SG91cnMocGFyc2VJbnQoaG91cnMpKTsKICAgICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhwYXJzZUludChtaW51dGVzKSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKCF0aGlzLmVuYWJsZVRpbWUpIHsKICAgICAgICBjb25zdCBub3cyID0gLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRIb3Vycyhub3cyLmdldEhvdXJzKCkpOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWludXRlcyhub3cyLmdldE1pbnV0ZXMoKSk7CiAgICAgICAgcGFyc2VkRGF0ZS5zZXRTZWNvbmRzKDApOwogICAgICAgIHBhcnNlZERhdGUuc2V0TWlsbGlzZWNvbmRzKDApOwogICAgICB9CiAgICAgIHJldHVybiBwYXJzZWREYXRlOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICB0cnkgewogICAgICAgICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKHZhbHVlMik7CiAgICAgICAgICBpZiAoIWlzTmFOKGRhdGUuZ2V0VGltZSgpKSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0ZSA9IGRhdGU7CiAgICAgICAgICAgIHRoaXMudmlld0RhdGUgPSBuZXcgRGF0ZShkYXRlKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEhvdXIgPSBkYXRlLmdldEhvdXJzKCk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRNaW51dGUgPSBkYXRlLmdldE1pbnV0ZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dERhdGVwaWNrZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRleHQvZGVlcy1pbnB1dC10ZXh0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTIgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5ncmlkLWxheW91dCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTglKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWluLWhlaWdodDogMjRweDsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgY2hhbmdlZCB0bzpgLCBpbnB1dC5nZXRWYWx1ZSgpKTsKICAgIH0pOwogICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coYElucHV0ICIke2lucHV0LmxhYmVsfSIgbG9zdCBmb2N1c2ApOwogICAgfSk7CiAgfSk7CiAgY29uc3QgcGFzc3dvcmRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC10ZXh0W2tleT0icGFzc3dvcmQiXScpOwogIGlmIChwYXNzd29yZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiUGFzc3dvcmQgaW5wdXQgaW5jbHVkZXMgdmlzaWJpbGl0eSB0b2dnbGUiKTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVGV4dCBJbnB1dHMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgdGV4dCBpbnB1dHMgd2l0aCBsYWJlbHMgYW5kIGRlc2NyaXB0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiVXNlcm5hbWUifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huZG9lIn0KICAgICAgICAgIC5rZXk9JHsidXNlcm5hbWUifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkVtYWlsIEFkZHJlc3MifSAKICAgICAgICAgIC52YWx1ZT0keyJqb2huQGV4YW1wbGUuY29tIn0gCiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiV2Ugd2lsbCBuZXZlciBzaGFyZSB5b3VyIGVtYWlsIHdpdGggYW55b25lIn0KICAgICAgICAgIC5rZXk9JHsiZW1haWwifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlBhc3N3b3JkIn0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfSAKICAgICAgICAgIC52YWx1ZT0keyJzZWNyZXQxMjMifQogICAgICAgICAgLmtleT0keyJwYXNzd29yZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaG9yaXpvbnRhbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC10ZXh0Iik7CiAgaG9yaXpvbnRhbElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY29tcHV0ZWRTdHlsZSA9IHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKGlucHV0KTsKICAgIGNvbnNvbGUubG9nKGBIb3Jpem9udGFsIGlucHV0ICIke2lucHV0LmxhYmVsfSIgZGlzcGxheTpgLCBjb21wdXRlZFN0eWxlLmRpc3BsYXkpOwogIH0pOwogIGNvbnN0IGZpcnN0TmFtZUlucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRba2V5PSJmaXJzdE5hbWUiXScpOwogIGNvbnN0IGxhc3ROYW1lSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtdGV4dFtrZXk9Imxhc3ROYW1lIl0nKTsKICBpZiAoZmlyc3ROYW1lSW5wdXQgJiYgbGFzdE5hbWVJbnB1dCkgewogICAgY29uc3QgdXBkYXRlRnVsbE5hbWUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGZpcnN0TmFtZSA9IGZpcnN0TmFtZUlucHV0LmdldFZhbHVlKCk7CiAgICAgIGNvbnN0IGxhc3ROYW1lID0gbGFzdE5hbWVJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBjb25zb2xlLmxvZyhgRnVsbCBuYW1lOiAke2ZpcnN0TmFtZX0gJHtsYXN0TmFtZX1gKTsKICAgIH07CiAgICBmaXJzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogICAgbGFzdE5hbWVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2VTdWJqZWN0IiwgdXBkYXRlRnVsbE5hbWUpOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSBpbnB1dHMgYXJyYW5nZWQgaG9yaXpvbnRhbGx5IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRmlyc3QgTmFtZSJ9IAogICAgICAgICAgICAudmFsdWU9JHsiSm9obiJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJmaXJzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiTGFzdCBOYW1lIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyJEb2UifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5rZXk9JHsibGFzdE5hbWUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiQWdlIn0gCiAgICAgICAgICAgIC52YWx1ZT0keyIyOCJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLmtleT0keyJhZ2UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgaW5wdXRzID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWlucHV0LXRleHQiKTsKICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IGlucHV0LmxhYmVsUG9zaXRpb247CiAgICBjb25zb2xlLmxvZyhgSW5wdXQgIiR7aW5wdXQubGFiZWx9IiBoYXMgbGFiZWwgcG9zaXRpb246ICR7cG9zaXRpb24zfWApOwogIH0pOwogIGNvbnN0IGxlZnRMYWJlbElucHV0cyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgnZGVlcy1pbnB1dC10ZXh0W2xhYmVsUG9zaXRpb249ImxlZnQiXScpOwogIGlmIChsZWZ0TGFiZWxJbnB1dHMubGVuZ3RoID4gMCkgewogICAgY29uc29sZS5sb2coYCR7bGVmdExhYmVsSW5wdXRzLmxlbmd0aH0gaW5wdXRzIGhhdmUgbGVmdC1hbGlnbmVkIGxhYmVscyBmb3IgaW5saW5lIGxheW91dGApOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJMYWJlbCBQb3NpdGlvbnMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IGxhYmVsIHBvc2l0aW9uaW5nIG9wdGlvbnMgZm9yIHZhcmlvdXMgbGF5b3V0cyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiTGFiZWwgb24gVG9wIChEZWZhdWx0KSJ9IAogICAgICAgICAgLnZhbHVlPSR7IlN0YW5kYXJkIGxheW91dCJ9IAogICAgICAgICAgLmxhYmVsUG9zaXRpb249JHsidG9wIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJMYWJlbCBvbiBMZWZ0In0gCiAgICAgICAgICAudmFsdWU9JHsiSW5saW5lIGxhYmVsIn0gCiAgICAgICAgICAubGFiZWxQb3NpdGlvbj0keyJsZWZ0In0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IkNpdHkifSAKICAgICAgICAgICAgLnZhbHVlPSR7Ik5ldyBZb3JrIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiWklQIENvZGUifSAKICAgICAgICAgICAgLnZhbHVlPSR7IjEwMDAxIn0gCiAgICAgICAgICAgIC5sYWJlbFBvc2l0aW9uPSR7ImxlZnQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcmVxdWlyZWRJbnB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0W3JlcXVpcmVkXSIpOwogIGNvbnN0IGRpc2FibGVkSW5wdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dFtkaXNhYmxlZF0iKTsKICBjb25zdCBlcnJvcklucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWlucHV0LXRleHRbdmFsaWRhdGlvblN0YXRlPSJpbnZhbGlkIl0nKTsKICBpZiAocmVxdWlyZWRJbnB1dCkgewogICAgcmVxdWlyZWRJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBpZiAoIXJlcXVpcmVkSW5wdXQuZ2V0VmFsdWUoKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJSZXF1aXJlZCBmaWVsZCBpcyBlbXB0eSEiKTsKICAgICAgfQogICAgfSk7CiAgfQogIGlmIChkaXNhYmxlZElucHV0KSB7CiAgICBjb25zb2xlLmxvZygiRGlzYWJsZWQgaW5wdXQgY2Fubm90IGJlIGVkaXRlZCIpOwogIH0KICBpZiAoZXJyb3JJbnB1dCkgewogICAgY29uc29sZS5sb2coIkVycm9yIGlucHV0IHNob3dzIHZhbGlkYXRpb24gbWVzc2FnZToiLCBlcnJvcklucHV0LnZhbGlkYXRpb25UZXh0KTsKICAgIGVycm9ySW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsICgpID0+IHsKICAgICAgY29uc3QgdmFsdWUyID0gZXJyb3JJbnB1dC5nZXRWYWx1ZSgpOwogICAgICBpZiAodmFsdWUyLmluY2x1ZGVzKCJAIikgJiYgdmFsdWUyLmluY2x1ZGVzKCIuIikpIHsKICAgICAgICBlcnJvcklucHV0LnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgICAgZXJyb3JJbnB1dC52YWxpZGF0aW9uVGV4dCA9ICIiOwogICAgICAgIGNvbnNvbGUubG9nKCJFbWFpbCB2YWxpZGF0aW9uIHBhc3NlZCEiKTsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHZhbGlkYXRpb24gc3RhdGVzIGFuZCBpbnB1dCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgRmllbGQifSAKICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAua2V5PSR7InJlcXVpcmVkRmllbGQifQogICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIEZpZWxkIn0gCiAgICAgICAgICAudmFsdWU9JHsiQ2Fubm90IGVkaXQgdGhpcyJ9IAogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJGaWVsZCB3aXRoIEVycm9yIn0gCiAgICAgICAgICAudmFsdWU9JHsiaW52YWxpZEAifSAKICAgICAgICAgIC52YWxpZGF0aW9uVGV4dD0keyJQbGVhc2UgZW50ZXIgYSB2YWxpZCBlbWFpbCBhZGRyZXNzIn0KICAgICAgICAgIC52YWxpZGF0aW9uU3RhdGU9JHsiaW52YWxpZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGFzc3dvcmRJbnB1dHMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dFtpc1Bhc3N3b3JkQm9vbF0iKTsKICBwYXNzd29yZElucHV0cy5mb3JFYWNoKChpbnB1dCkgPT4gewogICAgY29uc3QgY2hlY2tUb2dnbGUgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0RWwgPSBpbnB1dC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIGNvbnNvbGUubG9nKGBQYXNzd29yZCBmaWVsZCAiJHtpbnB1dC5sYWJlbH0iIHR5cGU6YCwgaW5wdXRFbC50eXBlKTsKICAgICAgfQogICAgfTsKICAgIGlmIChpbnB1dC5zaGFkb3dSb290KSB7CiAgICAgIGNvbnN0IG9ic2VydmVyID0gbmV3IE11dGF0aW9uT2JzZXJ2ZXIoY2hlY2tUb2dnbGUpOwogICAgICBjb25zdCBpbnB1dEVsID0gaW5wdXQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJpbnB1dCIpOwogICAgICBpZiAoaW5wdXRFbCkgewogICAgICAgIG9ic2VydmVyLm9ic2VydmUoaW5wdXRFbCwgeyBhdHRyaWJ1dGVzOiB0cnVlLCBhdHRyaWJ1dGVGaWx0ZXI6IFsidHlwZSJdIH0pOwogICAgICB9CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQWR2YW5jZWQgRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiUGFzc3dvcmQgdmlzaWJpbGl0eSB0b2dnbGUgYW5kIG90aGVyIGFkdmFuY2VkIGZlYXR1cmVzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJQYXNzd29yZCB3aXRoIFRvZ2dsZSJ9IAogICAgICAgICAgLmlzUGFzc3dvcmRCb29sPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0keyJteVNlY3VyZVBhc3N3b3JkMTIzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDbGljayB0aGUgZXllIGljb24gdG8gc2hvdy9oaWRlIHBhc3N3b3JkIn0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJBUEkgS2V5In0gCiAgICAgICAgICAuaXNQYXNzd29yZEJvb2w9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7InNrLTEyMzQ1Njc4OTBhYmNkZWYifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IktlZXAgdGhpcyBrZXkgc2VjdXJlIGFuZCBuZXZlciBzaGFyZSBpdCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHluYW1pY0lucHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWlucHV0LXRleHQiKTsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0ZXh0LWlucHV0LW91dHB1dCIpOwogIGlmIChkeW5hbWljSW5wdXQgJiYgb3V0cHV0KSB7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIChldmVudCkgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBldmVudC5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgb3V0cHV0LnRleHRDb250ZW50ID0gYEN1cnJlbnQgdmFsdWU6ICIke3ZhbHVlMn0iYDsKICAgIH0pOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiSW5wdXQgZm9jdXNlZCIpOwogICAgfSk7CiAgICBkeW5hbWljSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIklucHV0IGJsdXJyZWQiKTsKICAgIH0pOwogICAgbGV0IGtleXByZXNzQ291bnQgPSAwOwogICAgZHluYW1pY0lucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoKSA9PiB7CiAgICAgIGtleXByZXNzQ291bnQrKzsKICAgICAgY29uc29sZS5sb2coYEtleXByZXNzIGNvdW50OiAke2tleXByZXNzQ291bnR9YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiSW50ZXJhY3RpdmUgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJUcnkgdHlwaW5nIGluIHRoZSBpbnB1dHMgdG8gc2VlIHJlYWwtdGltZSB2YWx1ZSBjaGFuZ2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJEeW5hbWljIElucHV0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImludGVyYWN0aXZlLXNlY3Rpb24iPgogICAgICAgICAgPGRpdiBpZD0idGV4dC1pbnB1dC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCI+Q3VycmVudCB2YWx1ZTogIiI8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtdGV4dC9kZWVzLWlucHV0LXRleHQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUZXh0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC10ZXh0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgcmVmbGVjdDogdHJ1ZQogICAgICB9KV07CiAgICAgIF92YWxpZGF0aW9uRnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7fSldOwogICAgICBfX2VzRGVjb3JhdGUyMCh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF9pc1Bhc3N3b3JkQm9vbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQYXNzd29yZEJvb2wiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNQYXNzd29yZEJvb2wsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzUGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgX2lzUGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3Nob3dQYXNzd29yZEJvb2xfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Bhc3N3b3JkQm9vbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1Bhc3N3b3JkQm9vbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UGFzc3dvcmRCb29sLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93UGFzc3dvcmRCb29sID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBfc2hvd1Bhc3N3b3JkQm9vbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25GdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uRnVuY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbGlkYXRpb25GdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uRnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25GdW5jdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvbkZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzUGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Bhc3N3b3JkQm9vbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93UGFzc3dvcmRCb29sX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfaXNQYXNzd29yZEJvb2xfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93UGFzc3dvcmRCb29sKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Bhc3N3b3JkQm9vbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dQYXNzd29yZEJvb2wodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dQYXNzd29yZEJvb2xfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF9zaG93UGFzc3dvcmRCb29sX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjEodGhpcywgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCB2YWxpZGF0aW9uVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvbkZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB2YWxpZGF0aW9uRnVuY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uRnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uRnVuY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25GdW5jdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBjdXJzb3I6IHRleHQ7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CgogICAgICBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6aG92ZXI6bm90KDpkaXNhYmxlZCk6bm90KDpmb2N1cykgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIGlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAvKiBQYXNzd29yZCB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5zaG93UGFzc3dvcmQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMXB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM4cHg7CiAgICAgICAgaGVpZ2h0OiAzOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCA1cHggNXB4IDA7CiAgICAgIH0KCiAgICAgIC5zaG93UGFzc3dvcmQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlIC8gMC4xKSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAudmFsaWRhdGlvbkNvbnRhaW5lci53YXJuIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjEpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4xKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uQ29udGFpbmVyLnZhbGlkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAvKiBFcnJvciBzdGF0ZSBmb3IgaW5wdXQgKi8KICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9ImludmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDg0LjIlIDYwLjIlKSIsICJoc2woMCA3Mi4yJSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uLXN0YXRlPSJpbnZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjA1KSIsICJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMDUpIil9OwogICAgICB9CgogICAgICAvKiBXYXJuaW5nIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0id2FybiJdKSBpbnB1dCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUpIiwgImhzbCgyNSA5NSUgNjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9Indhcm4iXSkgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyNSA5NSUgNTMlKSIsICJoc2woMjUgOTUlIDYzJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSAvIDAuMDUpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkIHN0YXRlIGZvciBpbnB1dCAqLwogICAgICA6aG9zdChbdmFsaWRhdGlvbi1zdGF0ZT0idmFsaWQiXSkgaW5wdXQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb24tc3RhdGU9InZhbGlkIl0pIGlucHV0OmZvY3VzIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUgLyAwLjA1KSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUgLyAwLjA1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgaW5wdXQgewogICAgICAgICAgZm9udC1mYW1pbHk6ICR7dGhpcy5pc1Bhc3N3b3JkQm9vbCA/IGNzc01vbm9Gb250RmFtaWx5IDogImluaGVyaXQifTsKICAgICAgICAgIGxldHRlci1zcGFjaW5nOiAke3RoaXMuaXNQYXNzd29yZEJvb2wgPyAiMC41cHgiIDogIm5vcm1hbCJ9OwogICAgICAgICAgcGFkZGluZy1yaWdodDogJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gIjQ4cHgiIDogIjEycHgifTsKICAgICAgICB9CiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gaWAKICAgICAgICAgICAgICAudmFsaWRhdGlvbkNvbnRhaW5lciB7CiAgICAgICAgICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgICAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgYCA6IGlgCiAgICAgICAgICAgICAgLnZhbGlkYXRpb25Db250YWluZXIgewogICAgICAgICAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgICAgICAgICAgcGFkZGluZzogMCAhaW1wb3J0YW50OwogICAgICAgICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNHB4KTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259IC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSIke3RoaXMuaXNQYXNzd29yZEJvb2wgJiYgIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJwYXNzd29yZCIgOiAidGV4dCJ9IgogICAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgICBAaW5wdXQ9IiR7dGhpcy51cGRhdGVWYWx1ZX0iCiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWR9CiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSIke3RoaXMubGFiZWwgPyAiIiA6ICJFbnRlciB0ZXh0Li4uIn0iCiAgICAgICAgICAvPgogICAgICAgICAgJHt0aGlzLmlzUGFzc3dvcmRCb29sID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG93UGFzc3dvcmQiIEBjbGljaz0ke3RoaXMudG9nZ2xlUGFzc3dvcmRWaWV3fT4KICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuc2hvd1Bhc3N3b3JkQm9vbCA/ICJsdWNpZGU6RXllIiA6ICJsdWNpZGU6RXllT2ZmIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICR7dGhpcy52YWxpZGF0aW9uVGV4dCA/IGIyYAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idmFsaWRhdGlvbkNvbnRhaW5lciAke3RoaXMudmFsaWRhdGlvblN0YXRlIHx8ICJlcnJvciJ9Ij4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0fQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYCA6IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb25Db250YWluZXIiPjwvZGl2PmB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVZhbHVlKGV2ZW50QXJnKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50QXJnLnRhcmdldDsKICAgICAgdGhpcy52YWx1ZSA9IHRhcmdldC52YWx1ZTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGFzeW5jIHRvZ2dsZVBhc3N3b3JkVmlldygpIHsKICAgICAgdGhpcy5zaG93UGFzc3dvcmRCb29sID0gIXRoaXMuc2hvd1Bhc3N3b3JkQm9vbDsKICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmZvY3VzKCk7CiAgICB9CiAgICBhc3luYyBibHVyKCkgewogICAgICBjb25zdCB0ZXh0SW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKTsKICAgICAgdGV4dElucHV0LmJsdXIoKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIxKHRoaXMsIF92YWxpZGF0aW9uRnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyMShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGV4dDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5wcm9kdWN0LWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDI4MHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjBweDsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXN1bW1hcnkgewogICAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAyMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5LXRpdGxlIHsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LWl0ZW0gewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBwYWRkaW5nOiA4cHggMDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5jYXJ0LXRvdGFsIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZy10b3A6IDE2cHg7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXRvcDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0ZWQtcHJvZHVjdHMgewogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgUHJvZHVjdCBDYXJkcyJ9IC5zdWJ0aXRsZT0keyJTaW1wbGUgcHJvZHVjdCBkaXNwbGF5IHdpdGggdmFyaW91cyBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIldpcmVsZXNzIEJsdWV0b290aCBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIlByZW1pdW0gc291bmQgcXVhbGl0eSB3aXRoIGFjdGl2ZSBub2lzZSBjYW5jZWxsYXRpb24iLAogIHByaWNlOiAxNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMTk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiU21hcnQgV2F0Y2ggU2VyaWVzIDciLAogIGNhdGVnb3J5OiAiV2VhcmFibGVzIiwKICBkZXNjcmlwdGlvbjogIlRyYWNrIHlvdXIgZml0bmVzcyBhbmQgc3RheSBjb25uZWN0ZWQgb24gdGhlIGdvIiwKICBwcmljZTogMzk5LAogIGljb25OYW1lOiAibHVjaWRlOndhdGNoIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlVTQi1DIEh1YiIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgcHJpY2U6IDQ5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOnVzYiIsCiAgaW5TdG9jazogZmFsc2UKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcmFjdGl2ZSBTaG9wcGluZyBDYXJ0In0gLnN1YnRpdGxlPSR7IlByb2R1Y3QgY2FyZHMgd2l0aCBkeW5hbWljIGNhcnQgY2FsY3VsYXRpb24ifSAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHByb2R1Y3RzID0gWwogICAgeyBpZDogImxhcHRvcCIsIGVsZW1lbnQ6IG51bGwsIGRhdGE6IHsgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsIGNhdGVnb3J5OiAiQ29tcHV0ZXJzIiwgZGVzY3JpcHRpb246ICJNMyBQcm8gY2hpcCB3aXRoIDE4R0IgUkFNIiwgcHJpY2U6IDE5OTksIG9yaWdpbmFsUHJpY2U6IDIxOTksIGljb25OYW1lOiAibHVjaWRlOmxhcHRvcCIgfSB9LAogICAgeyBpZDogImlwYWQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJpUGFkIEFpciIsIGNhdGVnb3J5OiAiVGFibGV0cyIsIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywgcHJpY2U6IDU5OSwgaWNvbk5hbWU6ICJsdWNpZGU6dGFibGV0IiB9IH0sCiAgICB7IGlkOiAia2V5Ym9hcmQiLCBlbGVtZW50OiBudWxsLCBkYXRhOiB7IG5hbWU6ICJNYWdpYyBLZXlib2FyZCIsIGNhdGVnb3J5OiAiQWNjZXNzb3JpZXMiLCBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLCBwcmljZTogMTQ5LCBpY29uTmFtZTogImx1Y2lkZTprZXlib2FyZCIgfSB9CiAgXTsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGxldCB0b3RhbCA9IDA7CiAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgcHJvZHVjdHMuZm9yRWFjaCgocHJvZHVjdCkgPT4gewogICAgICBjb25zdCBlbGVtZW50NCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcihgIyR7cHJvZHVjdC5pZH1gKTsKICAgICAgaWYgKGVsZW1lbnQ0ICYmIGVsZW1lbnQ0LnF1YW50aXR5ID4gMCkgewogICAgICAgIGNvbnN0IHN1YnRvdGFsID0gcHJvZHVjdC5kYXRhLnByaWNlICogZWxlbWVudDQucXVhbnRpdHk7CiAgICAgICAgdG90YWwgKz0gc3VidG90YWw7CiAgICAgICAgaXRlbXMucHVzaChgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LWl0ZW0iPgogICAgICAgICAgICAgICAgICA8c3Bhbj4ke3Byb2R1Y3QuZGF0YS5uYW1lfSAoJHtlbGVtZW50NC5xdWFudGl0eX0pPC9zcGFuPgogICAgICAgICAgICAgICAgICA8c3Bhbj4kJHtzdWJ0b3RhbC50b0ZpeGVkKDIpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHN1bW1hcnkgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNpbnRlcmFjdGl2ZS1jYXJ0LXN1bW1hcnkiKTsKICAgIGlmIChzdW1tYXJ5KSB7CiAgICAgIHN1bW1hcnkuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgICR7aXRlbXMuam9pbigiIil9CiAgICAgICAgICAgICAgJHtpdGVtcy5sZW5ndGggPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibGFwdG9wIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogJ01hY0Jvb2sgUHJvIDE0IicsCiAgY2F0ZWdvcnk6ICJDb21wdXRlcnMiLAogIGRlc2NyaXB0aW9uOiAiTTMgUHJvIGNoaXAgd2l0aCAxOEdCIFJBTSIsCiAgcHJpY2U6IDE5OTksCiAgb3JpZ2luYWxQcmljZTogMjE5OSwKICBpY29uTmFtZTogImx1Y2lkZTpsYXB0b3AiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJpcGFkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogImlQYWQgQWlyIiwKICBjYXRlZ29yeTogIlRhYmxldHMiLAogIGRlc2NyaXB0aW9uOiAnMTAuOSIgTGlxdWlkIFJldGluYSBkaXNwbGF5JywKICBwcmljZTogNTk5LAogIGljb25OYW1lOiAibHVjaWRlOnRhYmxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImtleWJvYXJkIgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIk1hZ2ljIEtleWJvYXJkIiwKICBjYXRlZ29yeTogIkFjY2Vzc29yaWVzIiwKICBkZXNjcmlwdGlvbjogIldpcmVsZXNzIGtleWJvYXJkIHdpdGggVG91Y2ggSUQiLAogIHByaWNlOiAxNDksCiAgaWNvbk5hbWU6ICJsdWNpZGU6a2V5Ym9hcmQiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezJ9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXN1bW1hcnkiPgogICAgICAgICAgPGgzIGNsYXNzPSJjYXJ0LXN1bW1hcnktdGl0bGUiPlNob3BwaW5nIENhcnQ8L2gzPgogICAgICAgICAgPGRpdiBpZD0iaW50ZXJhY3RpdmUtY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgICAgPCEtLSBEeW5hbWljYWxseSB1cGRhdGVkIC0tPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTZWxlY3RhYmxlIFByb2R1Y3QgQ2FyZHMifSAuc3VidGl0bGU9JHsiQ2xpY2sgY2FyZHMgb3IgY2hlY2tib3hlcyB0byBzZWxlY3QgcHJvZHVjdHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJTb255IEFscGhhIDcgSVYiLAogIGNhdGVnb3J5OiAiQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICJGdWxsLWZyYW1lIG1pcnJvcmxlc3MgY2FtZXJhIiwKICBwcmljZTogMjQ5OCwKICBpY29uTmFtZTogImx1Y2lkZTpjYW1lcmEiCn19CiAgICAgICAgICAgIC5zZWxlY3RhYmxlPSR7dHJ1ZX0KICAgICAgICAgICAgLnNob3dRdWFudGl0eVNlbGVjdG9yPSR7ZmFsc2V9CiAgICAgICAgICAgIEBzZWxlY3Rpb25DaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBjb25zdCBzZWxlY3RlZENhcmRzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZFtzZWxlY3RhYmxlXSIpOwogICAgY29uc3Qgc2VsZWN0ZWRQcm9kdWN0cyA9IFtdOwogICAgc2VsZWN0ZWRDYXJkcy5mb3JFYWNoKChjYXJkKSA9PiB7CiAgICAgIGlmIChjYXJkLnNlbGVjdGVkKSB7CiAgICAgICAgc2VsZWN0ZWRQcm9kdWN0cy5wdXNoKGNhcmQucHJvZHVjdERhdGEubmFtZSk7CiAgICAgIH0KICAgIH0pOwogICAgb3V0cHV0LnRleHRDb250ZW50ID0gc2VsZWN0ZWRQcm9kdWN0cy5sZW5ndGggPiAwID8gYFNlbGVjdGVkOiAke3NlbGVjdGVkUHJvZHVjdHMuam9pbigiLCAiKX1gIDogIk5vIHByb2R1Y3RzIHNlbGVjdGVkIjsKICB9Cn19CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgoKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiREpJIE1pbmkgMyBQcm8iLAogIGNhdGVnb3J5OiAiRHJvbmVzIiwKICBkZXNjcmlwdGlvbjogIkxpZ2h0d2VpZ2h0IGRyb25lIHdpdGggNEsgY2FtZXJhIiwKICBwcmljZTogNzU5LAogIGljb25OYW1lOiAibHVjaWRlOnBsYW5lIgp9fQogICAgICAgICAgICAuc2VsZWN0YWJsZT0ke3RydWV9CiAgICAgICAgICAgIC5zaG93UXVhbnRpdHlTZWxlY3Rvcj0ke2ZhbHNlfQogICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNzZWxlY3Rpb24tb3V0cHV0Iik7CiAgaWYgKG91dHB1dCkgewogICAgY29uc3Qgc2VsZWN0ZWRDYXJkcyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmRbc2VsZWN0YWJsZV0iKTsKICAgIGNvbnN0IHNlbGVjdGVkUHJvZHVjdHMgPSBbXTsKICAgIHNlbGVjdGVkQ2FyZHMuZm9yRWFjaCgoY2FyZCkgPT4gewogICAgICBpZiAoY2FyZC5zZWxlY3RlZCkgewogICAgICAgIHNlbGVjdGVkUHJvZHVjdHMucHVzaChjYXJkLnByb2R1Y3REYXRhLm5hbWUpOwogICAgICB9CiAgICB9KTsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IHNlbGVjdGVkUHJvZHVjdHMubGVuZ3RoID4gMCA/IGBTZWxlY3RlZDogJHtzZWxlY3RlZFByb2R1Y3RzLmpvaW4oIiwgIil9YCA6ICJObyBwcm9kdWN0cyBzZWxlY3RlZCI7CiAgfQp9fQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkdvUHJvIEhFUk8xMiIsCiAgY2F0ZWdvcnk6ICJBY3Rpb24gQ2FtZXJhcyIsCiAgZGVzY3JpcHRpb246ICI1LjNLIHZpZGVvIHdpdGggSHlwZXJTbW9vdGggNi4wIiwKICBwcmljZTogMzk5LAogIG9yaWdpbmFsUHJpY2U6IDQ0OSwKICBpY29uTmFtZTogImx1Y2lkZTp2aWRlbyIKfX0KICAgICAgICAgICAgLnNlbGVjdGFibGU9JHt0cnVlfQogICAgICAgICAgICAuc2hvd1F1YW50aXR5U2VsZWN0b3I9JHtmYWxzZX0KICAgICAgICAgICAgQHNlbGVjdGlvbkNoYW5nZT0keyhlMTEpID0+IHsKICBjb25zdCBvdXRwdXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjc2VsZWN0aW9uLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2FyZHMgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkW3NlbGVjdGFibGVdIik7CiAgICBjb25zdCBzZWxlY3RlZFByb2R1Y3RzID0gW107CiAgICBzZWxlY3RlZENhcmRzLmZvckVhY2goKGNhcmQpID0+IHsKICAgICAgaWYgKGNhcmQuc2VsZWN0ZWQpIHsKICAgICAgICBzZWxlY3RlZFByb2R1Y3RzLnB1c2goY2FyZC5wcm9kdWN0RGF0YS5uYW1lKTsKICAgICAgfQogICAgfSk7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBzZWxlY3RlZFByb2R1Y3RzLmxlbmd0aCA+IDAgPyBgU2VsZWN0ZWQ6ICR7c2VsZWN0ZWRQcm9kdWN0cy5qb2luKCIsICIpfWAgOiAiTm8gcHJvZHVjdHMgc2VsZWN0ZWQiOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0ZWQtcHJvZHVjdHMiIGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsiPgogICAgICAgICAgTm8gcHJvZHVjdHMgc2VsZWN0ZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByb2R1Y3QgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxpbWl0ZWQgRWRpdGlvbiBTbmVha2VycyIsCiAgY2F0ZWdvcnk6ICJGb290d2VhciIsCiAgZGVzY3JpcHRpb246ICJFeGNsdXNpdmUgY29sb3J3YXkgLSBPbmx5IDUwMCBwYWlycyIsCiAgcHJpY2U6IDI5OSwKICBpY29uTmFtZTogImx1Y2lkZTpmb290cHJpbnRzIiwKICBpblN0b2NrOiBmYWxzZSwKICBzdG9ja1RleHQ6ICJTb2xkIE91dCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MH0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJNaW5pbWFsaXN0IFdhbGxldCIsCiAgcHJpY2U6IDM5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOndhbGxldCIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7MX0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgLnByb2R1Y3REYXRhPSR7ewogIG5hbWU6ICJQcmVtaXVtIENvZmZlZSBCZWFucyIsCiAgY2F0ZWdvcnk6ICJGb29kICYgQmV2ZXJhZ2UiLAogIGRlc2NyaXB0aW9uOiAiU2luZ2xlIG9yaWdpbiwgbWVkaXVtIHJvYXN0IiwKICBwcmljZTogMTguNSwKICBpY29uTmFtZTogImx1Y2lkZTpjb2ZmZWUiLAogIGN1cnJlbmN5OiAiXHUyMEFDIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsyfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkL2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczIyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wcm9kdWN0RGF0YV9kZWNvcmF0b3JzOwogIGxldCBfcHJvZHVjdERhdGFfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZGVjb3JhdG9yczsKICBsZXQgX3F1YW50aXR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1Nob3BwaW5nUHJvZHVjdGNhcmQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9xdWFudGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NlbGVjdGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfcHJvZHVjdERhdGFfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicHJvZHVjdERhdGEiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInByb2R1Y3REYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnByb2R1Y3REYXRhLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wcm9kdWN0RGF0YSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wcm9kdWN0RGF0YV9pbml0aWFsaXplcnMsIF9wcm9kdWN0RGF0YV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIxKHRoaXMsIG51bGwsIF9xdWFudGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJxdWFudGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicXVhbnRpdHkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucXVhbnRpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnF1YW50aXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3F1YW50aXR5X2luaXRpYWxpemVycywgX3F1YW50aXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dRdWFudGl0eVNlbGVjdG9yIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93UXVhbnRpdHlTZWxlY3RvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93UXVhbnRpdHlTZWxlY3Rvciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1F1YW50aXR5U2VsZWN0b3IgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1F1YW50aXR5U2VsZWN0b3JfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMSh0aGlzLCBudWxsLCBfc2VsZWN0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjEodGhpcywgbnVsbCwgX3NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTaG9wcGluZ1Byb2R1Y3RjYXJkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTM7CiAgICAjcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2luaXRpYWxpemVycywgewogICAgICBuYW1lOiAiUHJvZHVjdCBOYW1lIiwKICAgICAgcHJpY2U6IDAKICAgIH0pOwogICAgZ2V0IHByb2R1Y3REYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcm9kdWN0RGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJvZHVjdERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Byb2R1Y3REYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcXVhbnRpdHkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHF1YW50aXR5KHZhbHVlMikgewogICAgICB0aGlzLiNxdWFudGl0eV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfcXVhbnRpdHlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zaG93UXVhbnRpdHlTZWxlY3Rvcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93UXVhbnRpdHlTZWxlY3RvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1F1YW50aXR5U2VsZWN0b3IodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dRdWFudGl0eVNlbGVjdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjIodGhpcywgX3Nob3dRdWFudGl0eVNlbGVjdG9yX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0YWJsZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2VsZWN0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RhYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyMih0aGlzLCBfc2VsZWN0ZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNlbGVjdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgNHB4IDZweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKSwgMCAycHggNHB4IC0ycHggaHNsKDAgMCUgMCUgLyAwLjEpOwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXJkLnNlbGVjdGFibGUgewogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY2FyZC5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAucHJvZHVjdC1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTYuOCUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtaW1hZ2UgaW1nIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWltYWdlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3ggewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgcmlnaHQ6IDEycHg7CiAgICAgICAgd2lkdGg6IDIwcHg7CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDMwJSA2LjglKSIpfTsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbi1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDApOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb24tY2hlY2tib3guY2hlY2tlZCBkZWVzLWljb24gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnByb2R1Y3QtY29udGVudCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC5wcm9kdWN0LWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucHJvZHVjdC1jYXRlZ29yeSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CiAgICAgIAogICAgICAucHJvZHVjdC1uYW1lIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgICAKICAgICAgLnByb2R1Y3QtZm9vdGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBwYWRkaW5nLXRvcDogMTJweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9kdWN0LXByaWNlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcmljZS1jdXJyZW50IHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAucHJpY2Utb3JpZ2luYWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBsaW5lLXRocm91Z2g7CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG1hcmdpbi10b3A6IDhweDsKICAgICAgfQoKICAgICAgLnN0b2NrLXN0YXR1cy5pbi1zdG9jayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMub3V0LW9mLXN0b2NrIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5zdG9jay1zdGF0dXMgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHsgbmFtZSwgY2F0ZWdvcnksIGRlc2NyaXB0aW9uLCBwcmljZSwgb3JpZ2luYWxQcmljZSwgY3VycmVuY3kgPSAiJCIsIGluU3RvY2sgPSB0cnVlLCBzdG9ja1RleHQgPSBpblN0b2NrID8gIkluIFN0b2NrIiA6ICJPdXQgb2YgU3RvY2siLCBpbWFnZVVybCwgaWNvbk5hbWUgPSAibHVjaWRlOnBhY2thZ2UiIH0gPSB0aGlzLnByb2R1Y3REYXRhOwogICAgICBjb25zdCBmb3JtYXRQcmljZSA9ICh2YWx1ZTIpID0+IHsKICAgICAgICByZXR1cm4gYCR7Y3VycmVuY3l9JHt2YWx1ZTIudG9GaXhlZCgyKX1gOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InByb2R1Y3QtY2FyZCAke3RoaXMuc2VsZWN0YWJsZSA/ICJzZWxlY3RhYmxlIiA6ICIifSAke3RoaXMuc2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2FyZENsaWNrfQogICAgICA+CiAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1pbWFnZSI+CiAgICAgICAgICAke2ltYWdlVXJsID8gYjJgCiAgICAgICAgICAgIDxpbWcgc3JjPSIke2ltYWdlVXJsfSIgYWx0PSIke25hbWV9Ij4KICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2ljb25OYW1lfT48L2RlZXMtaWNvbj4KICAgICAgICAgIGB9CiAgICAgICAgICAke3RoaXMuc2VsZWN0YWJsZSA/IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJzZWxlY3Rpb24tY2hlY2tib3ggJHt0aGlzLnNlbGVjdGVkID8gImNoZWNrZWQiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5oYW5kbGVTZWxlY3Rpb25Ub2dnbGUoKTsKICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmNoZWNrIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtY29udGVudCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWhlYWRlciI+CiAgICAgICAgICAgICR7Y2F0ZWdvcnkgPyBiMmA8ZGl2IGNsYXNzPSJwcm9kdWN0LWNhdGVnb3J5Ij4ke2NhdGVnb3J5fTwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1uYW1lIj4ke25hbWV9PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7ZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZHVjdC1kZXNjcmlwdGlvbiI+JHtkZXNjcmlwdGlvbn08L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDxkaXYgY2xhc3M9InN0b2NrLXN0YXR1cyAke2luU3RvY2sgPyAiaW4tc3RvY2siIDogIm91dC1vZi1zdG9jayJ9Ij4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke2luU3RvY2sgPyAibHVjaWRlOmNoZWNrLWNpcmNsZSIgOiAibHVjaWRlOngtY2lyY2xlIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICR7c3RvY2tUZXh0fQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9kdWN0LWZvb3RlciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2R1Y3QtcHJpY2UiPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmljZS1jdXJyZW50Ij4ke2Zvcm1hdFByaWNlKHByaWNlKX08L3NwYW4+CiAgICAgICAgICAgICAgJHtvcmlnaW5hbFByaWNlICYmIG9yaWdpbmFsUHJpY2UgPiBwcmljZSA/IGIyYAogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InByaWNlLW9yaWdpbmFsIj4ke2Zvcm1hdFByaWNlKG9yaWdpbmFsUHJpY2UpfTwvc3Bhbj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAke3RoaXMuc2hvd1F1YW50aXR5U2VsZWN0b3IgPyBiMmAKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnF1YW50aXR5fQogICAgICAgICAgICAgICAgQGNoYW5nZVN1YmplY3Q9JHsoZTExKSA9PiB7CiAgICAgICAgdGhpcy5xdWFudGl0eSA9IGUxMS5kZXRhaWwuZ2V0VmFsdWUoKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJxdWFudGl0eUNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBxdWFudGl0eTogdGhpcy5xdWFudGl0eSwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH19CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2FyZENsaWNrKCkgewogICAgICBpZiAodGhpcy5zZWxlY3RhYmxlKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgICAgcHJvZHVjdERhdGE6IHRoaXMucHJvZHVjdERhdGEKICAgICAgICAgIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNlbGVjdGlvblRvZ2dsZSgpIHsKICAgICAgdGhpcy5zZWxlY3RlZCA9ICF0aGlzLnNlbGVjdGVkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWxlY3Rpb25DaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBzZWxlY3RlZDogdGhpcy5zZWxlY3RlZCwKICAgICAgICAgIHByb2R1Y3REYXRhOiB0aGlzLnByb2R1Y3REYXRhCiAgICAgICAgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczIyKHRoaXMsIF9zZWxlY3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczIyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2hvcHBpbmdQcm9kdWN0Y2FyZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvci9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxNCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zaG9wcGluZy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgyODBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDIwcHg7CiAgICAgICAgfQoKICAgICAgICAuY2FydC1zdW1tYXJ5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KCiAgICAgICAgLmNhcnQtc3VtbWFyeS10aXRsZSB7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC1pdGVtIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgMjYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA3NC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAuY2FydC10b3RhbCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIHBhZGRpbmctdG9wOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICAgIGJvcmRlci10b3A6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhc2ljIFF1YW50aXR5IFNlbGVjdG9yIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBxdWFudGl0eSBpbnB1dCB3aXRoIGluY3JlbWVudC9kZWNyZW1lbnQgYnV0dG9ucyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJRdWFudGl0eSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHRoZSBkZXNpcmVkIHF1YW50aXR5In0KICAgICAgICAgIC52YWx1ZT0kezF9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IKICAgICAgICAgIC5sYWJlbD0keyJJdGVtcyBpbiBDYXJ0In0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGp1c3QgdGhlIHF1YW50aXR5IG9mIGl0ZW1zIn0KICAgICAgICAgIC52YWx1ZT0kezN9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiU2hvcHBpbmcgQ2FydCJ9IC5zdWJ0aXRsZT0keyJNb2Rlcm4gZS1jb21tZXJjZSBwcm9kdWN0IGNhcmRzIHdpdGggaW50ZXJhY3RpdmUgcXVhbnRpdHkgc2VsZWN0b3JzIn0gLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCB1cGRhdGVDYXJ0U3VtbWFyeSA9ICgpID0+IHsKICAgIGNvbnN0IGNhcmQxID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjaGVhZHBob25lcy1xdHkiKTsKICAgIGNvbnN0IGNhcmQyID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjbW91c2UtcXR5Iik7CiAgICBjb25zdCBjYXJkMyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2tleWJvYXJkLXF0eSIpOwogICAgY29uc3QgcXR5MSA9IGNhcmQxPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MiA9IGNhcmQyPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcXR5MyA9IGNhcmQzPy5xdWFudGl0eSB8fCAwOwogICAgY29uc3QgcHJpY2UxID0gMzQ5Ljk5ICogcXR5MTsKICAgIGNvbnN0IHByaWNlMiA9IDk5Ljk5ICogcXR5MjsKICAgIGNvbnN0IHByaWNlMyA9IDc5Ljk5ICogcXR5MzsKICAgIGNvbnN0IHRvdGFsID0gcHJpY2UxICsgcHJpY2UyICsgcHJpY2UzOwogICAgY29uc3Qgc3VtbWFyeSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2NhcnQtc3VtbWFyeS1jb250ZW50Iik7CiAgICBpZiAoc3VtbWFyeSkgewogICAgICBzdW1tYXJ5LmlubmVySFRNTCA9IGAKICAgICAgICAgICAgICAke3F0eTEgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Tb255IFdILTEwMDBYTTUgKCR7cXR5MX0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UxLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTIgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5Mb2dpdGVjaCBNWCBNYXN0ZXIgM1MgKCR7cXR5Mn0pPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7cHJpY2UyLnRvRml4ZWQoMil9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmAgOiAiIn0KICAgICAgICAgICAgICAke3F0eTMgPiAwID8gYDxkaXYgY2xhc3M9ImNhcnQtaXRlbSI+CiAgICAgICAgICAgICAgICA8c3Bhbj5LZXljaHJvbiBLMiAoJHtxdHkzfSk8L3NwYW4+CiAgICAgICAgICAgICAgICA8c3Bhbj4kJHtwcmljZTMudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+YCA6ICIifQogICAgICAgICAgICAgICR7dG90YWwgPT09IDAgPyAnPGRpdiBjbGFzcz0iY2FydC1pdGVtIiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzk5OTsiPllvdXIgY2FydCBpcyBlbXB0eTwvZGl2PicgOiAiIn0KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjYXJ0LXRvdGFsIj4KICAgICAgICAgICAgICAgIDxzcGFuPlRvdGFsPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4+JCR7dG90YWwudG9GaXhlZCgyKX08L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGA7CiAgICB9CiAgfTsKICBzZXRUaW1lb3V0KHVwZGF0ZUNhcnRTdW1tYXJ5LCAxMDApOwogIGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZCIpLmZvckVhY2goKGNhcmQpID0+IHsKICAgIGNhcmQuYWRkRXZlbnRMaXN0ZW5lcigicXVhbnRpdHlDaGFuZ2UiLCB1cGRhdGVDYXJ0U3VtbWFyeSk7CiAgfSk7Cn19PgogICAgICAgIDxkaXYgY2xhc3M9InNob3BwaW5nLWdyaWQiPgogICAgICAgICAgPGRlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQKICAgICAgICAgICAgaWQ9ImhlYWRwaG9uZXMtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIlNvbnkgV0gtMTAwMFhNNSBXaXJlbGVzcyBIZWFkcGhvbmVzIiwKICBjYXRlZ29yeTogIkF1ZGlvIiwKICBkZXNjcmlwdGlvbjogIkluZHVzdHJ5LWxlYWRpbmcgbm9pc2UgY2FuY2VsaW5nIHdpdGggQXV0byBOQyBPcHRpbWl6ZXIiLAogIHByaWNlOiAzNDkuOTksCiAgb3JpZ2luYWxQcmljZTogMzk5Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmhlYWRwaG9uZXMiCn19CiAgICAgICAgICAgIC5xdWFudGl0eT0kezF9CiAgICAgICAgICA+PC9kZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZAogICAgICAgICAgICBpZD0ibW91c2UtcXR5IgogICAgICAgICAgICAucHJvZHVjdERhdGE9JHt7CiAgbmFtZTogIkxvZ2l0ZWNoIE1YIE1hc3RlciAzUyIsCiAgY2F0ZWdvcnk6ICJBY2Nlc3NvcmllcyIsCiAgZGVzY3JpcHRpb246ICJQZXJmb3JtYW5jZSB3aXJlbGVzcyBtb3VzZSB3aXRoIHVsdHJhLWZhc3Qgc2Nyb2xsaW5nIiwKICBwcmljZTogOTkuOTksCiAgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlciIKfX0KICAgICAgICAgICAgLnF1YW50aXR5PSR7Mn0KICAgICAgICAgID48L2RlZXMtc2hvcHBpbmctcHJvZHVjdGNhcmQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLXNob3BwaW5nLXByb2R1Y3RjYXJkCiAgICAgICAgICAgIGlkPSJrZXlib2FyZC1xdHkiCiAgICAgICAgICAgIC5wcm9kdWN0RGF0YT0ke3sKICBuYW1lOiAiS2V5Y2hyb24gSzIgV2lyZWxlc3MgTWVjaGFuaWNhbCBLZXlib2FyZCIsCiAgY2F0ZWdvcnk6ICJLZXlib2FyZHMiLAogIGRlc2NyaXB0aW9uOiAiQ29tcGFjdCA3NSUgbGF5b3V0IHdpdGggaG90LXN3YXBwYWJsZSBzd2l0Y2hlcyIsCiAgcHJpY2U6IDc5Ljk5LAogIG9yaWdpbmFsUHJpY2U6IDk0Ljk5LAogIGljb25OYW1lOiAibHVjaWRlOmtleWJvYXJkIgp9fQogICAgICAgICAgICAucXVhbnRpdHk9JHsxfQogICAgICAgICAgPjwvZGVlcy1zaG9wcGluZy1wcm9kdWN0Y2FyZD4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY2FydC1zdW1tYXJ5Ij4KICAgICAgICAgIDxoMyBjbGFzcz0iY2FydC1zdW1tYXJ5LXRpdGxlIj5PcmRlciBTdW1tYXJ5PC9oMz4KICAgICAgICAgIDxkaXYgaWQ9ImNhcnQtc3VtbWFyeS1jb250ZW50Ij4KICAgICAgICAgICAgPCEtLSBDb250ZW50IHdpbGwgYmUgZHluYW1pY2FsbHkgdXBkYXRlZCAtLT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUmVxdWlyZWQgJiBEaXNhYmxlZCBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBmb3IgdmFsaWRhdGlvbiBhbmQgcmVzdHJpY3Rpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgLmxhYmVsPSR7Ik51bWJlciBvZiBMaWNlbnNlcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IGhvdyBtYW55IGxpY2Vuc2VzIHlvdSBuZWVkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHsxfQogICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yCiAgICAgICAgICAubGFiZWw9JHsiRml4ZWQgUXVhbnRpdHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgcXVhbnRpdHkgY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0kezV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiT3JkZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBvcmRlciBmb3JtIHdpdGggcXVhbnRpdHkgc2VsZWN0aW9uIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkN1c3RvbWVyIE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkJhc2ljIFBsYW4iLCAiUHJvIFBsYW4iLCAiRW50ZXJwcmlzZSBQbGFuIl19CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgPGRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvcgogICAgICAgICAgICAubGFiZWw9JHsiUXVhbnRpdHkifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTnVtYmVyIG9mIGxpY2Vuc2VzIn0KICAgICAgICAgICAgLnZhbHVlPSR7MX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3Rvcj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWNpYWwgSW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXF1YW50aXR5c2VsZWN0b3IvZGVlcy1pbnB1dC1xdWFudGl0eXNlbGVjdG9yLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTIyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyMyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcXVhbnRpdHlzZWxlY3RvciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyMih0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UXVhbnRpdHlTZWxlY3RvcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE0OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgMSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgICA6aG9zdCB7CiAgICAgICAgICB3aWR0aDogYXV0bzsKICAgICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lciB7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgaGVpZ2h0OiA0MHB4OwogICAgICAgICAgcGFkZGluZzogMDsKICAgICAgICAgIG1pbi13aWR0aDogMTIwcHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAucXVhbnRpdHktY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgICAgfQoKICAgICAgICAuc2VsZWN0b3IgewogICAgICAgICAgZmxleDogMCAwIDQwcHg7CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIH0KCiAgICAgICAgLnNlbGVjdG9yOmhvdmVyIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3RvcjphY3RpdmUgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkxJSkiLCAiaHNsKDAgMCUgMTElKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB9CgogICAgICAgIC5zZWxlY3Rvci5wbHVzIHsKICAgICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgfQoKICAgICAgICAucXVhbnRpdHkgewogICAgICAgICAgZmxleDogMTsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAwNmVtOwogICAgICAgIH0KCiAgICAgICAgLyogS2V5Ym9hcmQgbmF2aWdhdGlvbiBmb2N1cyBzdHlsZXMgKi8KICAgICAgICAuc2VsZWN0b3I6Zm9jdXMgewogICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIH0KCiAgICAgICAgLyogTWluIHZhbHVlIHN0YXRlICovCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51cyB7CiAgICAgICAgICBvcGFjaXR5OiAwLjM7CiAgICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIH0KCiAgICAgICAgLnF1YW50aXR5LWNvbnRhaW5lcltkYXRhLW1pbj0idHJ1ZSJdIC5zZWxlY3Rvci5taW51czpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB9CgogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icXVhbnRpdHktY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICBkYXRhLW1pbj0iJHt0aGlzLnZhbHVlIDw9IDB9IgogICAgICAgID4KICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzZWxlY3RvciBtaW51cyIgCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgdGhpcy5kZWNyZWFzZSgpOwogICAgICB9fSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIgfHwgZTExLmtleSA9PT0gIiAiKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuZGVjcmVhc2UoKTsKICAgICAgICB9CiAgICAgIH19IgogICAgICAgICAgICByb2xlPSJidXR0b24iCiAgICAgICAgICAgIGFyaWEtbGFiZWw9IkRlY3JlYXNlIHF1YW50aXR5IgogICAgICAgICAgPuKIkjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icXVhbnRpdHkiIGFyaWEtbGl2ZT0icG9saXRlIiBhcmlhLWF0b21pYz0idHJ1ZSI+JHt0aGlzLnZhbHVlfTwvZGl2PgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InNlbGVjdG9yIHBsdXMiIAogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgIHRoaXMuaW5jcmVhc2UoKTsKICAgICAgfX0iCiAgICAgICAgICAgIHRhYmluZGV4PSIke3RoaXMuZGlzYWJsZWQgPyAiLTEiIDogIjAifSIKICAgICAgICAgICAgQGtleWRvd249IiR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiIHx8IGUxMS5rZXkgPT09ICIgIikgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICB0aGlzLmluY3JlYXNlKCk7CiAgICAgICAgfQogICAgICB9fSIKICAgICAgICAgICAgcm9sZT0iYnV0dG9uIgogICAgICAgICAgICBhcmlhLWxhYmVsPSJJbmNyZWFzZSBxdWFudGl0eSIKICAgICAgICAgID4rPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGluY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICB0aGlzLnZhbHVlKys7CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGRlY3JlYXNlKCkgewogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy52YWx1ZSA+IDApIHsKICAgICAgICB0aGlzLnZhbHVlLS07CiAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjModGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFF1YW50aXR5U2VsZWN0b3IyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAvZGVlcy1pbnB1dC1yYWRpb2dyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTUgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpdCwgbWlubWF4KDMwMHB4LCAxZnIpKTsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnJlc3VsdC1kaXNwbGF5IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmFkaW8gR3JvdXBzIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBzdHJpbmcgb3B0aW9ucyBmb3IgY29tbW9uIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTdWJzY3JpcHRpb24gUGxhbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJCYXNpYyAtICQ5L21vbnRoIiwgIlBybyAtICQyOS9tb250aCIsICJFbnRlcnByaXNlIC0gJDk5L21vbnRoIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcm8gLSAkMjkvbW9udGgifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHlvdXIgc3Vic2NyaXB0aW9uIHRpZXIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJQcmlvcml0eSBMZXZlbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJIaWdoIiwgIk1lZGl1bSIsICJMb3ciXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1lZGl1bSJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJSYWRpbyBncm91cHMgd2l0aCBob3Jpem9udGFsIGFycmFuZ2VtZW50In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgLmxhYmVsPSR7IkRvIHlvdSBhZ3JlZSB3aXRoIHRoZSB0ZXJtcz8ifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlllcyIsICJObyIsICJNYXliZSJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJZZXMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiRXhwZXJpZW5jZSBMZXZlbCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1siQmVnaW5uZXIiLCAiSW50ZXJtZWRpYXRlIiwgIkV4cGVydCJdfQogICAgICAgICAgLmRpcmVjdGlvbj0keyJob3Jpem9udGFsIn0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJJbnRlcm1lZGlhdGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNlbGVjdCB5b3VyIGV4cGVyaWVuY2UgbGV2ZWwgd2l0aCB3ZWIgZGV2ZWxvcG1lbnQifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEFkdmFuY2VkIE9wdGlvbnMifSAuc3VidGl0bGU9JHsiVXNpbmcgb2JqZWN0IGZvcm1hdCB3aXRoIGtleXMgYW5kIHBheWxvYWRzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgaWQ9ImFkdmFuY2VkLXJhZGlvIgogICAgICAgICAgLmxhYmVsPSR7IlNlbGVjdCBSZWdpb24ifQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIChVUyBFYXN0KSIsIGtleTogInVzLWVhc3QiLCBwYXlsb2FkOiB7IHJlZ2lvbjogInVzLWVhc3QtMSIsIGxhdGVuY3k6IDIwIH0gfSwKICB7IG9wdGlvbjogIkV1cm9wZSAoRnJhbmtmdXJ0KSIsIGtleTogImV1LWNlbnRyYWwiLCBwYXlsb2FkOiB7IHJlZ2lvbjogImV1LWNlbnRyYWwtMSIsIGxhdGVuY3k6IDUwIH0gfSwKICB7IG9wdGlvbjogIkFzaWEgUGFjaWZpYyAoU2luZ2Fwb3JlKSIsIGtleTogImFwLXNvdXRoZWFzdCIsIHBheWxvYWQ6IHsgcmVnaW9uOiAiYXAtc291dGhlYXN0LTEiLCBsYXRlbmN5OiAxMjAgfSB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZXUtY2VudHJhbCJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIHRoZSBjbG9zZXN0IHJlZ2lvbiBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSJ9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IGRpc3BsYXkgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjcmVnaW9uLXJlc3VsdCIpOwogIGlmIChkaXNwbGF5KSB7CiAgICBkaXNwbGF5LnRleHRDb250ZW50ID0gIlNlbGVjdGVkOiAiICsgSlNPTi5zdHJpbmdpZnkoZTExLmRldGFpbC52YWx1ZSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICA8ZGl2IGlkPSJyZWdpb24tcmVzdWx0IiBjbGFzcz0icmVzdWx0LWRpc3BsYXkiPlNlbGVjdGVkOiB7ICJyZWdpb24iOiAiZXUtY2VudHJhbC0xIiwgImxhdGVuY3kiOiA1MCB9PC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdXJ2ZXkgRXhhbXBsZSJ9IC5zdWJ0aXRsZT0keyJNdWx0aXBsZSByYWRpbyBncm91cHMgZm9yIHN1cnZleXMgYW5kIGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkhvdyBzYXRpc2ZpZWQgYXJlIHlvdT8ifQogICAgICAgICAgICAub3B0aW9ucz0ke1siVmVyeSBTYXRpc2ZpZWQiLCAiU2F0aXNmaWVkIiwgIk5ldXRyYWwiLCAiRGlzc2F0aXNmaWVkIiwgIlZlcnkgRGlzc2F0aXNmaWVkIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJTYXRpc2ZpZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJXb3VsZCB5b3UgcmVjb21tZW5kIHVzPyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJEZWZpbml0ZWx5IiwgIlByb2JhYmx5IiwgIk5vdCBTdXJlIiwgIlByb2JhYmx5IE5vdCIsICJEZWZpbml0ZWx5IE5vdCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUHJvYmFibHkifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNS4gU3RhdGVzICYgVmFsaWRhdGlvbiJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCB2YWxpZGF0aW9uIGV4YW1wbGVzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1ncmlkIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIFNlbGVjdGlvbiJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJPcHRpb24gQSIsICJPcHRpb24gQiIsICJPcHRpb24gQyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgICAgLmxhYmVsPSR7IkRpc2FibGVkIFN0YXRlIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIkRpc2FibGVkIE9wdGlvbiAxIiwgIkRpc2FibGVkIE9wdGlvbiAyIiwgIkRpc2FibGVkIE9wdGlvbiAzIl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEaXNhYmxlZCBPcHRpb24gMiJ9CiAgICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBTZXR0aW5ncyBFeGFtcGxlIn0gLnN1YnRpdGxlPSR7IkNvbW1vbiBwYXR0ZXJucyBpbiBhcHBsaWNhdGlvbiBzZXR0aW5ncyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJUaGVtZSBQcmVmZXJlbmNlIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiTGlnaHQgVGhlbWUiLCBrZXk6ICJsaWdodCIsIHBheWxvYWQ6ICJsaWdodCIgfSwKICB7IG9wdGlvbjogIkRhcmsgVGhlbWUiLCBrZXk6ICJkYXJrIiwgcGF5bG9hZDogImRhcmsiIH0sCiAgeyBvcHRpb246ICJTeXN0ZW0gRGVmYXVsdCIsIGtleTogInN5c3RlbSIsIHBheWxvYWQ6ICJhdXRvIiB9Cl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiZGFyayJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQ2hvb3NlIGhvdyB0aGUgYXBwbGljYXRpb24gc2hvdWxkIGFwcGVhciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXJhZGlvZ3JvdXAKICAgICAgICAgIC5sYWJlbD0keyJOb3RpZmljYXRpb24gRnJlcXVlbmN5In0KICAgICAgICAgIC5vcHRpb25zPSR7WyJBbGwgTm90aWZpY2F0aW9ucyIsICJJbXBvcnRhbnQgT25seSIsICJOb25lIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiSW1wb3J0YW50IE9ubHkifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkNvbnRyb2wgaG93IG9mdGVuIHlvdSByZWNlaXZlIG5vdGlmaWNhdGlvbnMifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAubGFiZWw9JHsiTGFuZ3VhZ2UifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkVuZ2xpc2giLCAiR2VybWFuIiwgIkZyZW5jaCIsICJTcGFuaXNoIiwgIkphcGFuZXNlIl19CiAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjcuIEZvcm0gSW50ZWdyYXRpb24ifSAuc3VidGl0bGU9JHsiV29ya3Mgc2VhbWxlc3NseSB3aXRoIGRlZXMtZm9ybSJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0IE5hbWUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7InByb2R1Y3ROYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiUHJvZHVjdCBDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbGVjdHJvbmljcyIsICJDbG90aGluZyIsICJCb29rcyIsICJIb21lICYgR2FyZGVuIiwgIlNwb3J0cyJdfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAua2V5PSR7ImNhdGVnb3J5In0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmFkaW9ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcmFkaW9ncm91cAogICAgICAgICAgICAubGFiZWw9JHsiQ29uZGl0aW9uIn0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbIk5ldyIsICJMaWtlIE5ldyIsICJHb29kIiwgIkZhaXIiLCAiUG9vciJdfQogICAgICAgICAgICAuZGlyZWN0aW9uPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAua2V5PSR7ImNvbmRpdGlvbiJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJOZXcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJTaGlwcGluZyBTcGVlZCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiU3RhbmRhcmQgKDUtNyBkYXlzKSIsIGtleTogInN0YW5kYXJkIiwgcGF5bG9hZDogeyBkYXlzOiA3LCBwcmljZTogMCB9IH0sCiAgeyBvcHRpb246ICJFeHByZXNzICgyLTMgZGF5cykiLCBrZXk6ICJleHByZXNzIiwgcGF5bG9hZDogeyBkYXlzOiAzLCBwcmljZTogMTAgfSB9LAogIHsgb3B0aW9uOiAiT3Zlcm5pZ2h0Iiwga2V5OiAib3Zlcm5pZ2h0IiwgcGF5bG9hZDogeyBkYXlzOiAxLCBwcmljZTogMjUgfSB9Cl19CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJzdGFuZGFyZCJ9CiAgICAgICAgICAgIC5rZXk9JHsic2hpcHBpbmcifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1yYWRpb2dyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdCAudGV4dD0keyJTdWJtaXQgUHJvZHVjdCJ9PjwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmFkaW9ncm91cC9kZWVzLWlucHV0LXJhZGlvZ3JvdXAuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSYWRpb2dyb3VwID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1yYWRpb2dyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9vcHRpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9vcHRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRSYWRpb2dyb3VwMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX29wdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXJlY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyMyh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF9kaXJlY3Rpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlyZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaXJlY3Rpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZGlyZWN0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXJlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTIzKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0UmFkaW9ncm91cDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE1OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkT3B0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZE9wdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI0KHRoaXMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9pbml0aWFsaXplcnMsICJ2ZXJ0aWNhbCIpKTsKICAgIGdldCBkaXJlY3Rpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXJlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX2RpcmVjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjQodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCB2YWxpZGF0aW9uU3RhdGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uU3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25TdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybSBjb21wYXRpYmlsaXR5CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSB0aGlzLmdldE9wdGlvbkJ5S2V5KHRoaXMuc2VsZWN0ZWRPcHRpb24pOwogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiICYmIG9wdGlvbjIucGF5bG9hZCAhPT0gdm9pZCAwKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjIucGF5bG9hZDsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWwpIHsKICAgICAgaWYgKHR5cGVvZiB2YWwgPT09ICJzdHJpbmciKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfSBlbHNlIHsKICAgICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdHlwZW9mIG9wdCA9PT0gIm9iamVjdCIgJiYgb3B0LnBheWxvYWQgPT09IHZhbCk7CiAgICAgICAgaWYgKG9wdGlvbjIgJiYgdHlwZW9mIG9wdGlvbjIgPT09ICJvYmplY3QiKSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gb3B0aW9uMi5rZXk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTBweDsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIuaG9yaXpvbnRhbCB7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAwOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmhvcml6b250YWwgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDIwcHggNnB4IDA7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbjpob3ZlciAucmFkaW8tbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tY2lyY2xlIHsKICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJvcmRlcjogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDIwLjIlIDY1LjElKSIsICJoc2woMjE1IDIwLjIlIDM1LjElKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgNi44JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICB9CgogICAgICAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMCk7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlOjphZnRlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgfQoKICAgICAgLnJhZGlvLWNpcmNsZTpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAzMCUgMy45JSkiKX0sCiAgICAgICAgICAgICAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSkiKX07CiAgICAgIH0KCiAgICAgIC5yYWRpby1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWxhYmVsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnJhZGlvLW9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5yYWRpby1vcHRpb246aG92ZXIgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSkiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMzAlIDYuOCUpIil9OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAucmFkaW8tb3B0aW9uOmhvdmVyIC5yYWRpby1sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAubGFiZWwtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTBweDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDA2ZW07CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbi10ZXh0IHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDEwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDAzZW07CiAgICAgIH0KCiAgICAgIC8qIFZhbGlkYXRpb24gc3R5bGVzICovCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9ImludmFsaWQiXSkgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbGlkYXRpb25TdGF0ZT0iaW52YWxpZCJdKSAucmFkaW8tb3B0aW9uLnNlbGVjdGVkIC5yYWRpby1jaXJjbGUgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9InZhbGlkIl0pIC5yYWRpby1vcHRpb24uc2VsZWN0ZWQgLnJhZGlvLWNpcmNsZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIsICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiwgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWxpZGF0aW9uU3RhdGU9Indhcm4iXSkgLnJhZGlvLW9wdGlvbi5zZWxlY3RlZCAucmFkaW8tY2lyY2xlIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUuNCA5My40JSA0Ny41JSkiLCAiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIil9OwogICAgICB9CgogICAgICAvKiBPdmVycmlkZSBiYXNlIGdyaWQgbGF5b3V0IGZvciByYWRpb2dyb3VwIHRvIHByZXZlbnQgbGFyZ2UgZ2FwcyAqLwogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249ImxlZnQiXSkgLmlucHV0LXdyYXBwZXIgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbbGFiZWwtcG9zaXRpb249InJpZ2h0Il0pIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IGF1dG8gYXV0bzsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJsYWJlbC10ZXh0Ij4ke3RoaXMubGFiZWx9PC9kaXY+YCA6ICIifQogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpcmVjdGlvbn0iPgogICAgICAgICAgJHt0aGlzLm9wdGlvbnMubWFwKChvcHRpb24yKSA9PiB7CiAgICAgICAgY29uc3Qgb3B0aW9uS2V5ID0gdGhpcy5nZXRPcHRpb25LZXkob3B0aW9uMik7CiAgICAgICAgY29uc3Qgb3B0aW9uTGFiZWwgPSB0aGlzLmdldE9wdGlvbkxhYmVsKG9wdGlvbjIpOwogICAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSB0aGlzLnNlbGVjdGVkT3B0aW9uID09PSBvcHRpb25LZXk7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tb3B0aW9uICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5zZWxlY3RPcHRpb24ob3B0aW9uS2V5KX0iCiAgICAgICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB0aGlzLmhhbmRsZUtleWRvd24oZTExLCBvcHRpb25LZXkpfSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0icmFkaW8tY2lyY2xlIiAKICAgICAgICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICAgICAgICByb2xlPSJyYWRpbyIKICAgICAgICAgICAgICAgICAgYXJpYS1jaGVja2VkPSIke2lzU2VsZWN0ZWR9IgogICAgICAgICAgICAgICAgICBhcmlhLWxhYmVsPSIke29wdGlvbkxhYmVsfSIKICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGlvLWxhYmVsIj4ke29wdGlvbkxhYmVsfTwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbi10ZXh0Ij4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+YCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBnZXRPcHRpb25LZXkob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIua2V5OwogICAgfQogICAgZ2V0T3B0aW9uTGFiZWwob3B0aW9uMikgewogICAgICBpZiAodHlwZW9mIG9wdGlvbjIgPT09ICJzdHJpbmciKSB7CiAgICAgICAgcmV0dXJuIG9wdGlvbjI7CiAgICAgIH0KICAgICAgcmV0dXJuIG9wdGlvbjIub3B0aW9uOwogICAgfQogICAgZ2V0T3B0aW9uQnlLZXkoa2V5MikgewogICAgICByZXR1cm4gdGhpcy5vcHRpb25zLmZpbmQoKG9wdCkgPT4gdGhpcy5nZXRPcHRpb25LZXkob3B0KSA9PT0ga2V5Mik7CiAgICB9CiAgICBzZWxlY3RPcHRpb24oa2V5MikgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvbGRWYWx1ZSA9IHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSBrZXkyOwogICAgICBpZiAob2xkVmFsdWUgIT09IGtleTIpIHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpbnB1dCIsIHsKICAgICAgICAgIGRldGFpbDogeyB2YWx1ZTogdGhpcy52YWx1ZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWwpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbDsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAhdGhpcy5zZWxlY3RlZE9wdGlvbikgewogICAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gImludmFsaWQiOwogICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ2YWxpZCI7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24gJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA+IDAgJiYgIXRoaXMucmVxdWlyZWQpIHsKICAgICAgICBjb25zdCBmaXJzdE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5nZXRPcHRpb25LZXkoZmlyc3RPcHRpb24pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVLZXlkb3duKGV2ZW50LCBvcHRpb25LZXkpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNlbGVjdE9wdGlvbihvcHRpb25LZXkpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dSaWdodCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuZm9jdXNOZXh0T3B0aW9uKCk7CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dVcCIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dMZWZ0IikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5mb2N1c1ByZXZpb3VzT3B0aW9uKCk7CiAgICAgIH0KICAgIH0KICAgIGZvY3VzTmV4dE9wdGlvbigpIHsKICAgICAgY29uc3QgcmFkaW9DaXJjbGVzID0gQXJyYXkuZnJvbSh0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvckFsbCgiLnJhZGlvLWNpcmNsZSIpKTsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gcmFkaW9DaXJjbGVzLmZpbmRJbmRleCgoZWwpID0+IGVsID09PSB0aGlzLnNoYWRvd1Jvb3QuYWN0aXZlRWxlbWVudCk7CiAgICAgIGNvbnN0IG5leHRJbmRleCA9IChjdXJyZW50SW5kZXggKyAxKSAlIHJhZGlvQ2lyY2xlcy5sZW5ndGg7CiAgICAgIHJhZGlvQ2lyY2xlc1tuZXh0SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBmb2N1c1ByZXZpb3VzT3B0aW9uKCkgewogICAgICBjb25zdCByYWRpb0NpcmNsZXMgPSBBcnJheS5mcm9tKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yQWxsKCIucmFkaW8tY2lyY2xlIikpOwogICAgICBjb25zdCBjdXJyZW50SW5kZXggPSByYWRpb0NpcmNsZXMuZmluZEluZGV4KChlbCkgPT4gZWwgPT09IHRoaXMuc2hhZG93Um9vdC5hY3RpdmVFbGVtZW50KTsKICAgICAgY29uc3QgcHJldkluZGV4ID0gY3VycmVudEluZGV4IDw9IDAgPyByYWRpb0NpcmNsZXMubGVuZ3RoIC0gMSA6IGN1cnJlbnRJbmRleCAtIDE7CiAgICAgIHJhZGlvQ2lyY2xlc1twcmV2SW5kZXhdLmZvY3VzKCk7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNCh0aGlzLCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFJhZGlvZ3JvdXAyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE2ID0gKCkgPT4gYjJgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+YDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS1zdWJtaXQvZGVlcy1mb3JtLXN1Ym1pdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUyNCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMjUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNGb3JtU3VibWl0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtLXN1Ym1pdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2Rpc2FibGVkX2RlY29yYXRvcnM7CiAgbGV0IF9kaXNhYmxlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Zvcm1TdWJtaXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3N0YXR1c19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMTY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBkaXNhYmxlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzYWJsZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI1KHRoaXMsIF9zdGF0dXNfaW5pdGlhbGl6ZXJzLCAibm9ybWFsIikpOwogICAgZ2V0IHN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbdGhlbWVEZWZhdWx0U3R5bGVzLCBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICBgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1idXR0b24KICAgICAgICBzdGF0dXM9IiR7dGhpcy5zdGF0dXN9IgogICAgICAgIEBjbGljaz0iJHt0aGlzLnN1Ym1pdH0iCiAgICAgICAgP2Rpc2FibGVkPSIke3RoaXMuZGlzYWJsZWR9IgogICAgICA+CiAgICAgICAgJHt0aGlzLnRleHQgfHwgYjJgPHNsb3Q+PC9zbG90PmB9CiAgICAgIDwvZGVlcy1idXR0b24+CiAgICBgOwogICAgfQogICAgYXN5bmMgc3VibWl0KCkgewogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBwYXJlbnRGb3JtRWxlbWVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1mb3JtIik7CiAgICAgIGlmIChwYXJlbnRGb3JtRWxlbWVudCAmJiBwYXJlbnRGb3JtRWxlbWVudC5nYXRoZXJBbmREaXNwYXRjaCkgewogICAgICAgIHBhcmVudEZvcm1FbGVtZW50LmdhdGhlckFuZERpc3BhdGNoKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZvY3VzKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQpIHsKICAgICAgICBhd2FpdCBkb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDApOwogICAgICAgIHRoaXMuc3VibWl0KCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjUoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtU3VibWl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1kcm9wZG93bi9kZWVzLWlucHV0LWRyb3Bkb3duLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMTcgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLnNwYWNlciB7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBjb3VudHJ5RHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBDb3VudHJ5Il0nKTsKICBjb25zdCByb2xlRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtZHJvcGRvd25bbGFiZWw9IlNlbGVjdCBSb2xlIl0nKTsKICBpZiAoY291bnRyeURyb3Bkb3duKSB7CiAgICBjb3VudHJ5RHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkNvdW50cnkgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KICBpZiAocm9sZURyb3Bkb3duKSB7CiAgICByb2xlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJvbGUgc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIxLiBCYXNpYyBEcm9wZG93bnMifSAuc3VidGl0bGU9JHsiU3RhbmRhcmQgZHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBhbmQgdmFyaW91cyBvcHRpb25zIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgQ291bnRyeSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlVuaXRlZCBTdGF0ZXMiLCBrZXk6ICJ1cyIgfSwKICB7IG9wdGlvbjogIkNhbmFkYSIsIGtleTogImNhIiB9LAogIHsgb3B0aW9uOiAiR2VybWFueSIsIGtleTogImRlIiB9LAogIHsgb3B0aW9uOiAiRnJhbmNlIiwga2V5OiAiZnIiIH0sCiAgeyBvcHRpb246ICJVbml0ZWQgS2luZ2RvbSIsIGtleTogInVrIiB9LAogIHsgb3B0aW9uOiAiQXVzdHJhbGlhIiwga2V5OiAiYXUiIH0sCiAgeyBvcHRpb246ICJKYXBhbiIsIGtleTogImpwIiB9LAogIHsgb3B0aW9uOiAiQnJhemlsIiwga2V5OiAiYnIiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiVW5pdGVkIFN0YXRlcyIsIGtleTogInVzIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUm9sZSJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkFkbWluaXN0cmF0b3IiLCBrZXk6ICJhZG1pbiIgfSwKICB7IG9wdGlvbjogIkVkaXRvciIsIGtleTogImVkaXRvciIgfSwKICB7IG9wdGlvbjogIlZpZXdlciIsIGtleTogInZpZXdlciIgfSwKICB7IG9wdGlvbjogIkd1ZXN0Iiwga2V5OiAiZ3Vlc3QiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcHJpb3JpdHlEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGlmIChwcmlvcml0eURyb3Bkb3duKSB7CiAgICBwcmlvcml0eURyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKGBQcmlvcml0eSBjaGFuZ2VkIHRvOiAke2V2ZW50LmRldGFpbC5vcHRpb259YCk7CiAgICB9KTsKICB9Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aG91dCBTZWFyY2gifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gd2l0aCBzZWFyY2ggZnVuY3Rpb25hbGl0eSBkaXNhYmxlZCBmb3Igc2ltcGxlciBzZWxlY3Rpb24ifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlByaW9yaXR5IExldmVsIn0KICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiSGlnaCIsIGtleTogImhpZ2giIH0sCiAgeyBvcHRpb246ICJNZWRpdW0iLCBrZXk6ICJtZWRpdW0iIH0sCiAgeyBvcHRpb246ICJMb3ciLCBrZXk6ICJsb3ciIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiTWVkaXVtIiwga2V5OiAibWVkaXVtIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93bnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBkcm9wZG93bnMuZm9yRWFjaCgoZHJvcGRvd24pID0+IHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IGxhYmVsID0gZHJvcGRvd24uZ2V0QXR0cmlidXRlKCJsYWJlbCIpOwogICAgICBjb25zb2xlLmxvZyhgJHtsYWJlbH06ICR7ZXZlbnQuZGV0YWlsLm9wdGlvbn1gKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIEhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIGRyb3Bkb3ducyBpbiBhIGhvcml6b250YWwgbGF5b3V0IGZvciBjb21wYWN0IGZvcm1zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAubGFiZWw9JHsiRGVwYXJ0bWVudCJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkVuZ2luZWVyaW5nIiwga2V5OiAiZW5nIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiTWFya2V0aW5nIiwga2V5OiAibWFya2V0aW5nIiB9LAogIHsgb3B0aW9uOiAiU2FsZXMiLCBrZXk6ICJzYWxlcyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlRlYW0gU2l6ZSJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiMS01Iiwga2V5OiAic21hbGwiIH0sCiAgeyBvcHRpb246ICI2LTIwIiwga2V5OiAibWVkaXVtIiB9LAogIHsgb3B0aW9uOiAiMjEtNTAiLCBrZXk6ICJsYXJnZSIgfSwKICB7IG9wdGlvbjogIjUwKyIsIGtleTogInhsYXJnZSIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IkxvY2F0aW9uIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVtb3RlIiwga2V5OiAicmVtb3RlIiB9LAogIHsgb3B0aW9uOiAiT24tc2l0ZSIsIGtleTogIm9uc2l0ZSIgfSwKICB7IG9wdGlvbjogIkh5YnJpZCIsIGtleTogImh5YnJpZCIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IHJlcXVpcmVkRHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd25bcmVxdWlyZWRdIik7CiAgaWYgKHJlcXVpcmVkRHJvcGRvd24pIHsKICAgIHJlcXVpcmVkRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlJlcXVpcmVkIGRyb3Bkb3duIGxvc3QgZm9jdXMiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHN0YXRlcyBhbmQgY29uZmlndXJhdGlvbnMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgLmxhYmVsPSR7IlJlcXVpcmVkIEZpZWxkIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk9wdGlvbiBBIiwga2V5OiAiYSIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBCIiwga2V5OiAiYiIgfSwKICB7IG9wdGlvbjogIk9wdGlvbiBDIiwga2V5OiAiYyIgfQpdfQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCBEcm9wZG93biJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJDYW5ub3QgU2VsZWN0Iiwga2V5OiAiZGlzYWJsZWQiIH0KXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0ke3sgb3B0aW9uOiAiQ2Fubm90IFNlbGVjdCIsIGtleTogImRpc2FibGVkIiB9fQogICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRpdiBjbGFzcz0ic3BhY2VyIj4KICAgICAgKFNwYWNlciB0byB0ZXN0IGRyb3Bkb3duIHBvc2l0aW9uaW5nKQogICAgPC9kaXY+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZHJvcGRvd24gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZHJvcGRvd24iKTsKICBpZiAoZHJvcGRvd24pIHsKICAgIGRyb3Bkb3duLmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGVkT3B0aW9uIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJCb3R0b20gZHJvcGRvd24gc2VsZWN0ZWQ6IiwgZXZlbnQuZGV0YWlsKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCb3R0b20gUG9zaXRpb25pbmcifSAuc3VidGl0bGU9JHsiRHJvcGRvd24gdGhhdCBvcGVucyB1cHdhcmQgd2hlbiBuZWFyIGJvdHRvbSBvZiB2aWV3cG9ydCJ9PgogICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAubGFiZWw9JHsiT3BlbnMgVXB3YXJkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiRmlyc3QgT3B0aW9uIiwga2V5OiAiZmlyc3QiIH0sCiAgeyBvcHRpb246ICJTZWNvbmQgT3B0aW9uIiwga2V5OiAic2Vjb25kIiB9LAogIHsgb3B0aW9uOiAiVGhpcmQgT3B0aW9uIiwga2V5OiAidGhpcmQiIH0sCiAgeyBvcHRpb246ICJGb3VydGggT3B0aW9uIiwga2V5OiAiZm91cnRoIiB9LAogIHsgb3B0aW9uOiAiRmlmdGggT3B0aW9uIiwga2V5OiAiZmlmdGgiIH0KXX0KICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBkcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC1kcm9wZG93biIpOwogIGNvbnN0IG91dHB1dCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3NlbGVjdGlvbi1vdXRwdXQiKTsKICBpZiAoZHJvcGRvd24gJiYgb3V0cHV0KSB7CiAgICBvdXRwdXQuaW5uZXJIVE1MID0gIjxlbT5TZWxlY3QgYSBwcm9kdWN0IHRvIHNlZSBkZXRhaWxzLi4uPC9lbT4iOwogICAgZHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGlmIChldmVudC5kZXRhaWwudmFsdWUpIHsKICAgICAgICBvdXRwdXQuaW5uZXJIVE1MID0gYAogICAgICAgICAgICAgIDxzdHJvbmc+U2VsZWN0ZWQ6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLm9wdGlvbn08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5LZXk6PC9zdHJvbmc+ICR7ZXZlbnQuZGV0YWlsLnZhbHVlLmtleX08YnI+CiAgICAgICAgICAgICAgPHN0cm9uZz5QcmljZTo8L3N0cm9uZz4gJCR7ZXZlbnQuZGV0YWlsLnZhbHVlLnBheWxvYWQ/LnByaWNlIHx8ICJOL0EifTxicj4KICAgICAgICAgICAgICA8c3Ryb25nPkZlYXR1cmVzOjwvc3Ryb25nPiAke2V2ZW50LmRldGFpbC52YWx1ZS5wYXlsb2FkPy5mZWF0dXJlcz8uam9pbigiLCAiKSB8fCAiTi9BIn0KICAgICAgICAgICAgYDsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nICYgUGF5bG9hZCJ9IC5zdWJ0aXRsZT0keyJEcm9wZG93biB3aXRoIHBheWxvYWQgZGF0YSBhbmQgY2hhbmdlIGV2ZW50IGhhbmRsaW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgIC5sYWJlbD0keyJTZWxlY3QgUHJvZHVjdCJ9CiAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIkJhc2ljIFBsYW4iLCBrZXk6ICJiYXNpYyIsIHBheWxvYWQ6IHsgcHJpY2U6IDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSJdIH0gfSwKICB7IG9wdGlvbjogIlBybyBQbGFuIiwga2V5OiAicHJvIiwgcGF5bG9hZDogeyBwcmljZTogMTkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiXSB9IH0sCiAgeyBvcHRpb246ICJFbnRlcnByaXNlIFBsYW4iLCBrZXk6ICJlbnRlcnByaXNlIiwgcGF5bG9hZDogeyBwcmljZTogNDkuOTksIGZlYXR1cmVzOiBbIkZlYXR1cmUgQSIsICJGZWF0dXJlIEIiLCAiRmVhdHVyZSBDIl0gfSB9Cl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJzZWxlY3Rpb24tb3V0cHV0IiBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgcGFkZGluZzogMTJweDsgYmFja2dyb3VuZDogcmdiYSgwLCAxMDUsIDI0MiwgMC4xKTsgYm9yZGVyLXJhZGl1czogNHB4OyBmb250LXNpemU6IDE0cHg7Ij48L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3QgcHJvamVjdFR5cGVEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9InByb2plY3RUeXBlIl0nKTsKICBjb25zdCBmcmFtZXdvcmtEcm9wZG93biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1pbnB1dC1kcm9wZG93bltrZXk9ImZyYW1ld29yayJdJyk7CiAgaWYgKGZvcm0pIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBldmVudC5kZXRhaWwuZGF0YSk7CiAgICB9KTsKICB9CiAgaWYgKHByb2plY3RUeXBlRHJvcGRvd24gJiYgZnJhbWV3b3JrRHJvcGRvd24pIHsKICAgIHByb2plY3RUeXBlRHJvcGRvd24uYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0ZWRPcHRpb24iLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0ZWRUeXBlID0gZXZlbnQuZGV0YWlsLmtleTsKICAgICAgY29uc29sZS5sb2coYFByb2plY3QgdHlwZSBjaGFuZ2VkIHRvOiAke3NlbGVjdGVkVHlwZX1gKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkRyb3Bkb3duIHdvcmtpbmcgd2l0aGluIGEgZm9ybSB3aXRoIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgVHlwZSJ9CiAgICAgICAgICAgIC5rZXk9JHsicHJvamVjdFR5cGUifQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIldlYiBBcHBsaWNhdGlvbiIsIGtleTogIndlYiIgfSwKICB7IG9wdGlvbjogIk1vYmlsZSBBcHBsaWNhdGlvbiIsIGtleTogIm1vYmlsZSIgfSwKICB7IG9wdGlvbjogIkRlc2t0b3AgQXBwbGljYXRpb24iLCBrZXk6ICJkZXNrdG9wIiB9LAogIHsgb3B0aW9uOiAiQVBJIFNlcnZpY2UiLCBrZXk6ICJhcGkiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wbWVudCBGcmFtZXdvcmsifQogICAgICAgICAgICAua2V5PSR7ImZyYW1ld29yayJ9CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WwogIHsgb3B0aW9uOiAiUmVhY3QiLCBrZXk6ICJyZWFjdCIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiVnVlLmpzIiwga2V5OiAidnVlIiwgcGF5bG9hZDogeyB0eXBlOiAid2ViIiB9IH0sCiAgeyBvcHRpb246ICJBbmd1bGFyIiwga2V5OiAiYW5ndWxhciIsIHBheWxvYWQ6IHsgdHlwZTogIndlYiIgfSB9LAogIHsgb3B0aW9uOiAiUmVhY3QgTmF0aXZlIiwga2V5OiAicmVhY3QtbmF0aXZlIiwgcGF5bG9hZDogeyB0eXBlOiAibW9iaWxlIiB9IH0sCiAgeyBvcHRpb246ICJGbHV0dGVyIiwga2V5OiAiZmx1dHRlciIsIHBheWxvYWQ6IHsgdHlwZTogIm1vYmlsZSIgfSB9LAogIHsgb3B0aW9uOiAiRWxlY3Ryb24iLCBrZXk6ICJlbGVjdHJvbiIsIHBheWxvYWQ6IHsgdHlwZTogImRlc2t0b3AiIH0gfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiQ3JlYXRlIFByb2plY3QifT48L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWRyb3Bkb3duL2RlZXMtaW5wdXQtZHJvcGRvd24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXREcm9wZG93biA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtZHJvcGRvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVTZWFyY2hfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5zVG9Ub3BfZGVjb3JhdG9yczsKICBsZXQgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuc1RvVG9wX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2RlY29yYXRvcnM7CiAgbGV0IF9pc09wZW5lZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzT3BlbmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXREcm9wZG93bjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZW5hYmxlU2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfb3BlbnNUb1RvcF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyZWRPcHRpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc09wZW5lZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VhcmNoVmFsdWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3B0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3B0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcHRpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZE9wdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRPcHRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRPcHRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgX3NlbGVjdGVkT3B0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX2VuYWJsZVNlYXJjaF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVTZWFyY2giLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZVNlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVTZWFyY2gsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZVNlYXJjaCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUodGhpcywgbnVsbCwgX29wZW5zVG9Ub3BfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbnNUb1RvcCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3BlbnNUb1RvcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vcGVuc1RvVG9wLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuc1RvVG9wID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX29wZW5zVG9Ub3BfaW5pdGlhbGl6ZXJzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9maWx0ZXJlZE9wdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyZWRPcHRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJlZE9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyZWRPcHRpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJlZE9wdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyZWRPcHRpb25zX2luaXRpYWxpemVycywgX2ZpbHRlcmVkT3B0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9oaWdobGlnaHRlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGlnaGxpZ2h0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZEluZGV4X2luaXRpYWxpemVycywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNSh0aGlzLCBudWxsLCBfaXNPcGVuZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNPcGVuZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzT3BlbmVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzT3BlbmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc09wZW5lZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIF9pc09wZW5lZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI1KHRoaXMsIG51bGwsIF9zZWFyY2hWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hWYWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFZhbHVlX2luaXRpYWxpemVycywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXREcm9wZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3B0aW9uc19pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgb3B0aW9ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRPcHRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRPcHRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkT3B0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZE9wdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gQWRkIHZhbHVlIHByb3BlcnR5IGZvciBmb3JtIGNvbXBhdGliaWxpdHkKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWw7CiAgICB9CiAgICAjZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9lbmFibGVTZWFyY2hfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgZW5hYmxlU2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jZW5hYmxlU2VhcmNoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW5hYmxlU2VhcmNoKHZhbHVlMikgewogICAgICB0aGlzLiNlbmFibGVTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZW5hYmxlU2VhcmNoX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgb3BlbnNUb1RvcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29wZW5zVG9Ub3BfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuc1RvVG9wKHZhbHVlMikgewogICAgICB0aGlzLiNvcGVuc1RvVG9wX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfb3BlbnNUb1RvcF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2ZpbHRlcmVkT3B0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZmlsdGVyZWRPcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyZWRPcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyZWRPcHRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNmaWx0ZXJlZE9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoaWdobGlnaHRlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfZmlsdGVyZWRPcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaGlnaGxpZ2h0ZWRJbmRleF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBoaWdobGlnaHRlZEluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhpZ2hsaWdodGVkSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hpZ2hsaWdodGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX2hpZ2hsaWdodGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9pc09wZW5lZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNPcGVuZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzT3BlbmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc09wZW5lZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNih0aGlzLCBfaXNPcGVuZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI2KHRoaXMsIF9zZWFyY2hWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoVmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgKiB7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAubWFpbmNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3ggewogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDM4cHg7CiAgICAgICAgcGFkZGluZzogMCA0MHB4IDAgMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlbGVjdGVkQm94OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3g6Zm9jdXMtdmlzaWJsZSB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWxlY3RlZEJveC5kaXNhYmxlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KCiAgICAgIC8qIERyb3Bkb3duIGFycm93ICovCiAgICAgIC5zZWxlY3RlZEJveDo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogMTJweDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiA0cHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXRvcDogNHB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuc2VsZWN0ZWRCb3gub3Blbjo6YWZ0ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKSByb3RhdGUoMTgwZGVnKTsKICAgICAgfQoKICAgICAgLnNlbGVjdGlvbkJveCB7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybSwgb3BhY2l0eTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtOHB4KSBzY2FsZSgwLjk4KTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIHotaW5kZXg6IDUwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWxlY3Rpb25Cb3gudG9wIHsKICAgICAgICBib3R0b206IGNhbGMoMTAwJSArIDRweCk7CiAgICAgICAgdG9wOiBhdXRvOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSg4cHgpIHNjYWxlKDAuOTgpOwogICAgICB9CiAgICAgIAogICAgICAuc2VsZWN0aW9uQm94LmJvdHRvbSB7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICB9CgogICAgICAuc2VsZWN0aW9uQm94LnNob3cgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhbGw7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApIHNjYWxlKDEpOwogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LWhlaWdodDogMjUwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgIH0KCiAgICAgIC8qIE9wdGlvbnMgKi8KICAgICAgLm9wdGlvbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgbGluZS1oZWlnaHQ6IDMycHg7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5vcHRpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE5vIG9wdGlvbnMgbWVzc2FnZSAqLwogICAgICAubm8tb3B0aW9ucyB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogU2VhcmNoICovCiAgICAgIC5zZWFyY2ggewogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc2VhcmNoLmJvdHRvbSB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5zZWFyY2ggaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2ggaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vcHRpb25zLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLm9wdGlvbnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0ic2VsZWN0ZWRCb3ggJHt0aGlzLmlzT3BlbmVkID8gIm9wZW4iIDogIiJ9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpfSIKICAgICAgICAgICAgdGFiaW5kZXg9IiR7dGhpcy5kaXNhYmxlZCA/ICItMSIgOiAiMCJ9IgogICAgICAgICAgICBAa2V5ZG93bj0iJHt0aGlzLmhhbmRsZVNlbGVjdGVkQm94S2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgICR7dGhpcy5zZWxlY3RlZE9wdGlvbj8ub3B0aW9uIHx8ICJTZWxlY3QgYW4gb3B0aW9uIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0aW9uQm94ICR7dGhpcy5pc09wZW5lZCA/ICJzaG93IiA6ICIifSAke3RoaXMub3BlbnNUb1RvcCA/ICJ0b3AiIDogImJvdHRvbSJ9Ij4KICAgICAgICAgICAgJHt0aGlzLmVuYWJsZVNlYXJjaCA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2giPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCAKICAgICAgICAgICAgICAgICAgICAgIHR5cGU9InRleHQiIAogICAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IlNlYXJjaCBvcHRpb25zLi4uIiAKICAgICAgICAgICAgICAgICAgICAgIC52YWx1ZT0iJHt0aGlzLnNlYXJjaFZhbHVlfSIKICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0iJHt0aGlzLmhhbmRsZVNlYXJjaH0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfSIKICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bn0iCiAgICAgICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9ucy1jb250YWluZXIiPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoID09PSAwID8gYjJgPGRpdiBjbGFzcz0ibm8tb3B0aW9ucyI+Tm8gb3B0aW9ucyBmb3VuZDwvZGl2PmAgOiB0aGlzLmZpbHRlcmVkT3B0aW9ucy5tYXAoKG9wdGlvbjIsIGluZGV4MikgPT4gewogICAgICAgIGNvbnN0IGlzSGlnaGxpZ2h0ZWQgPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPT09IGluZGV4MjsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJvcHRpb24gJHtpc0hpZ2hsaWdodGVkID8gImhpZ2hsaWdodGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMudXBkYXRlU2VsZWN0aW9uKG9wdGlvbjIpfSIKICAgICAgICAgICAgICAgICAgICAgICAgQG1vdXNlZW50ZXI9IiR7KCkgPT4gdGhpcy5oaWdobGlnaHRlZEluZGV4ID0gaW5kZXgyfSIKICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgJHtvcHRpb24yLm9wdGlvbn0KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIGA7CiAgICAgIH0pfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5oYW5kbGVDbGlja091dHNpZGUgPSB0aGlzLmhhbmRsZUNsaWNrT3V0c2lkZS5iaW5kKHRoaXMpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdGhpcy5zZWxlY3RlZE9wdGlvbiB8fCBudWxsOwogICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoIm9wdGlvbnMiKSkgewogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICB9CiAgICB9CiAgICBhc3luYyB1cGRhdGVTZWxlY3Rpb24oc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHNlbGVjdGVkT3B0aW9uOwogICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnM7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGVkT3B0aW9uIiwgewogICAgICAgIGRldGFpbDogc2VsZWN0ZWRPcHRpb24sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgaGFuZGxlQ2xpY2tPdXRzaWRlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjYodGhpcywgX3NlYXJjaFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHBhdGgyID0gZXZlbnQuY29tcG9zZWRQYXRoKCk7CiAgICAgIGlmICghcGF0aDIuaW5jbHVkZXModGhpcykpIHsKICAgICAgICB0aGlzLmlzT3BlbmVkID0gZmFsc2U7CiAgICAgICAgdGhpcy5zZWFyY2hWYWx1ZSA9ICIiOwogICAgICAgIHRoaXMuZmlsdGVyZWRPcHRpb25zID0gdGhpcy5vcHRpb25zOwogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICB9CiAgICB9KTsKICAgIGFzeW5jIHRvZ2dsZVNlbGVjdGlvbkJveCgpIHsKICAgICAgdGhpcy5pc09wZW5lZCA9ICF0aGlzLmlzT3BlbmVkOwogICAgICBpZiAodGhpcy5pc09wZW5lZCkgewogICAgICAgIGNvbnN0IHNlbGVjdGVkQm94ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zZWxlY3RlZEJveCIpOwogICAgICAgIGNvbnN0IHJlY3QgPSBzZWxlY3RlZEJveC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBzcGFjZUJlbG93ID0gd2luZG93LmlubmVySGVpZ2h0IC0gcmVjdC5ib3R0b207CiAgICAgICAgY29uc3Qgc3BhY2VBYm92ZSA9IHJlY3QudG9wOwogICAgICAgIHRoaXMub3BlbnNUb1RvcCA9IHNwYWNlQmVsb3cgPCAzMDAgJiYgc3BhY2VBYm92ZSA+IHNwYWNlQmVsb3c7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCBzZWFyY2hJbnB1dCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoIGlucHV0Iik7CiAgICAgICAgaWYgKHNlYXJjaElucHV0KSB7CiAgICAgICAgICBzZWFyY2hJbnB1dC5mb2N1cygpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgICAgIH0sIDApOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmZpbHRlcmVkT3B0aW9ucyA9IHRoaXMub3B0aW9uczsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIHRoaXMuaGFuZGxlQ2xpY2tPdXRzaWRlKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoKGV2ZW50KSB7CiAgICAgIGNvbnN0IHNlYXJjaFRlcm0gPSBldmVudC50YXJnZXQudmFsdWU7CiAgICAgIHRoaXMuc2VhcmNoVmFsdWUgPSBzZWFyY2hUZXJtOwogICAgICBjb25zdCBzZWFyY2hMb3dlciA9IHNlYXJjaFRlcm0udG9Mb3dlckNhc2UoKTsKICAgICAgdGhpcy5maWx0ZXJlZE9wdGlvbnMgPSB0aGlzLm9wdGlvbnMuZmlsdGVyKChvcHRpb24yKSA9PiBvcHRpb24yLm9wdGlvbi50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHNlYXJjaExvd2VyKSk7CiAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBoYW5kbGVLZXlEb3duKGV2ZW50KSB7CiAgICAgIGNvbnN0IGtleTIgPSBldmVudC5rZXk7CiAgICAgIGNvbnN0IG1heEluZGV4ID0gdGhpcy5maWx0ZXJlZE9wdGlvbnMubGVuZ3RoIC0gMTsKICAgICAgaWYgKGtleTIgPT09ICJBcnJvd0Rvd24iKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkSW5kZXggPSB0aGlzLmhpZ2hsaWdodGVkSW5kZXggKyAxID4gbWF4SW5kZXggPyAwIDogdGhpcy5oaWdobGlnaHRlZEluZGV4ICsgMTsKICAgICAgfSBlbHNlIGlmIChrZXkyID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCA9IHRoaXMuaGlnaGxpZ2h0ZWRJbmRleCAtIDEgPCAwID8gbWF4SW5kZXggOiB0aGlzLmhpZ2hsaWdodGVkSW5kZXggLSAxOwogICAgICB9IGVsc2UgaWYgKGtleTIgPT09ICJFbnRlciIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICh0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVNlbGVjdGlvbih0aGlzLmZpbHRlcmVkT3B0aW9uc1t0aGlzLmhpZ2hsaWdodGVkSW5kZXhdKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoa2V5MiA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiQXJyb3dEb3duIiB8fCBldmVudC5rZXkgPT09ICJBcnJvd1VwIiB8fCBldmVudC5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICB0aGlzLmhhbmRsZUtleURvd24oZXZlbnQpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTZWxlY3RlZEJveEtleWRvd24oZXZlbnQpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoZXZlbnQua2V5ID09PSAiRW50ZXIiIHx8IGV2ZW50LmtleSA9PT0gIiAiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnRvZ2dsZVNlbGVjdGlvbkJveCgpOwogICAgICB9IGVsc2UgaWYgKGV2ZW50LmtleSA9PT0gIkFycm93RG93biIgfHwgZXZlbnQua2V5ID09PSAiQXJyb3dVcCIpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGlmICghdGhpcy5pc09wZW5lZCkgewogICAgICAgICAgdGhpcy50b2dnbGVTZWxlY3Rpb25Cb3goKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZXZlbnQua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaWYgKHRoaXMuaXNPcGVuZWQpIHsKICAgICAgICAgIHRoaXMuaXNPcGVuZWQgPSBmYWxzZTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbjsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNsaWNrIiwgdGhpcy5oYW5kbGVDbGlja091dHNpZGUpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RHJvcGRvd24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMxOCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tc2hlbGwgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDMycHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMTYwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWdyaWQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICB9CgogICAgICAgIEBtZWRpYSAobWluLXdpZHRoOiA5NjBweCkgewogICAgICAgICAgLmRlbW8tZ3JpZC0tdHdvIHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoMiwgbWlubWF4KDAsIDFmcikpOwogICAgICAgICAgfQogICAgICAgIH0KCiAgICAgICAgLmRlbW8tc3RhY2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDE4cHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTUgMjAlIDI2JSkiKX07CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMyAxMDAlIDk3JSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyNSUgMzIlKSIsICJoc2woMjE1IDIwJSA4MiUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTU7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1ub3RlIHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDQ1JSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNoZWxsIj4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiTW9kZXJuIGZpbGUgdXBsb2FkZXIifQogICAgICAgIC5zdWJ0aXRsZT0keyJTaGFkY24taW5zcGlyZWQgbGF5b3V0IHdpdGggZHJhZyAmIGRyb3AsIHByZXZpZXdzIGFuZCB2YWxpZGF0aW9uIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCBkZW1vLWdyaWQtLXR3byI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgIC5sYWJlbD0keyJBdHRhY2htZW50cyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBzdXBwb3J0aW5nIGRvY3VtZW50cyBmb3IgeW91ciByZXF1ZXN0In0KICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyosLnBkZiwuemlwIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezEwICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQnJhbmQgYXNzZXRzIn0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVXBsb2FkIGhpZ2gtcmVzb2x1dGlvbiBpbWFnZXJ5IChKUEcvUE5HKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJpbWFnZS9qcGVnLGltYWdlL3BuZyJ9CiAgICAgICAgICAgICAgLm11bHRpcGxlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm1heFNpemU9JHs1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgICAgLmJ1dHRvblRleHQ9JHsiU2VsZWN0IGNvdmVyIGltYWdlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1zdGFjayI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiQXVkaW8gdXBsb2FkcyJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlNoYXJlIHBvZGNhc3QgZHJhZnRzIChNUDMvV0FWLCBtYXggMjVNQiBlYWNoKSJ9CiAgICAgICAgICAgICAgLmFjY2VwdD0keyJhdWRpby8qIn0KICAgICAgICAgICAgICAubWF4U2l6ZT0kezI1ICogMTAyNCAqIDEwMjR9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAgICAubGFiZWw9JHsiRGlzYWJsZWQgZXhhbXBsZSJ9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZGVyIGlzIGRpc2FibGVkIHdoaWxlIG1vZGVyYXRpb24gaXMgcGVuZGluZyJ9CiAgICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkZvcm0gaW50ZWdyYXRpb24ifQogICAgICAgIC5zdWJ0aXRsZT0keyJDb21iaW5lIGZpbGUgdXBsb2FkcyB3aXRoIHRoZSByZXN0IG9mIHRoZSBERUVTIGZvcm0gZWNvc3lzdGVtIn0KICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXN0YWNrIj4KICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiUHJvamVjdCBuYW1lIn0KICAgICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJIb3cgc2hvdWxkIHdlIHJlZmVyIHRvIHRoaXMgcHJvamVjdCBpbnRlcm5hbGx5PyJ9CiAgICAgICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAgICAgLmtleT0keyJwcm9qZWN0TmFtZSJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAgICAgICAubGFiZWw9JHsiQ29udGFjdCBlbWFpbCJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7ImVtYWlsIn0KICAgICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgICAua2V5PSR7ImNvbnRhY3RFbWFpbCJ9CiAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgoKICAgICAgICAgICAgICA8ZGVlcy1pbnB1dC1maWxldXBsb2FkCiAgICAgICAgICAgICAgICAubGFiZWw9JHsiU3RhdGVtZW50IG9mIHdvcmsifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlVwbG9hZCBhIHNpZ25lZCBzdGF0ZW1lbnQgb2Ygd29yayAoUERGLCBtYXggMTVNQikifQogICAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAgIC5hY2NlcHQ9JHsiYXBwbGljYXRpb24vcGRmIn0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7MTUgKiAxMDI0ICogMTAyNH0KICAgICAgICAgICAgICAgIC5tdWx0aXBsZT0ke2ZhbHNlfQogICAgICAgICAgICAgICAgLmtleT0keyJzb3cifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZmlsZXVwbG9hZD4KCiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtZmlsZXVwbG9hZAogICAgICAgICAgICAgICAgLmxhYmVsPSR7IkNyZWF0aXZlIHJlZmVyZW5jZXMifQogICAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik9wdGlvbmFsLiBVcGxvYWQgdXAgdG8gZml2ZSB2aXN1YWwgcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgICAgICAuYWNjZXB0PSR7ImltYWdlLyoifQogICAgICAgICAgICAgICAgLm1heEZpbGVzPSR7NX0KICAgICAgICAgICAgICAgIC5tYXhTaXplPSR7OCAqIDEwMjQgKiAxMDI0fQogICAgICAgICAgICAgICAgLmtleT0keyJyZWZlcmVuY2VzIn0KICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWZpbGV1cGxvYWQ+CgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgICAgIC5sYWJlbD0keyJOb3RlcyJ9CiAgICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIG9wdGlvbmFsIGNvbnRleHQgZm9yIHJldmlld2VycyJ9CiAgICAgICAgICAgICAgICAuaW5wdXRUeXBlPSR7InRleHRhcmVhIn0KICAgICAgICAgICAgICAgIC5rZXk9JHsibm90ZXMifQogICAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KCiAgICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9JHsiU3VibWl0IGJyaWVmaW5nIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGVlcy1mb3JtPgoKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+R29vZCB0byBrbm93Ojwvc3Ryb25nPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpPkRyYWcgJiBkcm9wIGhpZ2hsaWdodHMgdGhlIGRyb3B6b25lIGFuZCBzdXBwb3J0cyBrZXlib2FyZCBhY3RpdmF0aW9uLjwvbGk+CiAgICAgICAgICAgICAgPGxpPkFjY2VwdGVkIGZpbGUgdHlwZXMgYXJlIHN1bW1hcmlzZWQgYXV0b21hdGljYWxseSBmcm9tIHRoZSA8Y29kZT5hY2NlcHQ8L2NvZGU+IGF0dHJpYnV0ZS48L2xpPgogICAgICAgICAgICAgIDxsaT5JbWFnZSB1cGxvYWRzIHNob3cgbGl2ZSBwcmV2aWV3cyBnZW5lcmF0ZWQgdmlhIDxjb2RlPlVSTC5jcmVhdGVPYmplY3RVUkw8L2NvZGU+LjwvbGk+CiAgICAgICAgICAgICAgPGxpPkZpbGUgc2l6ZSBhbmQgZmlsZS1jb3VudCBsaW1pdHMgc3VyZmFjZSBpbmxpbmUgdmFsaWRhdGlvbiBtZXNzYWdlcy48L2xpPgogICAgICAgICAgICAgIDxsaT5UaGUgY29tcG9uZW50IHN0YXlzIGNvbXBhdGlibGUgd2l0aCA8Y29kZT5kZWVzLWZvcm08L2NvZGU+IHZhbHVlIGFjY2Vzc29ycy48L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWZpbGV1cGxvYWQvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBmaWxldXBsb2FkU3R5bGVzID0gWwogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgaWAKICAgIDpob3N0IHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCgogICAgLmlucHV0LXdyYXBwZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDEycHg7CiAgICB9CgogICAgLmRyb3B6b25lIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBwYWRkaW5nOiAyMHB4OwogICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICBib3JkZXI6IDEuNXB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgODAlKSIsICJoc2woMjE3IDIwJSAyNSUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDIxNSAyMCUgMTIlKSIpfTsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMnMgZWFzZSwgYm94LXNoYWRvdyAwLjJzIGVhc2UsIGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIG91dGxpbmU6IG5vbmU7CiAgICB9CgogICAgLmRyb3B6b25lOmZvY3VzLXZpc2libGUgewogICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDEyJSkiKX0sCiAgICAgICAgMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUgLyAwLjUpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuNCkiKX07CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgYm94LXNoYWRvdzogMCAxMnB4IDMycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUsIDIzLCA0MiwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjM1KSIpfTsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSAvIDAuMDYpIiwgImhzbCgyMTMgOTMlIDY4JSAvIDAuMTIpIil9OwogICAgfQoKICAgIC5kcm9wem9uZS0taGFzLWZpbGVzIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTElKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmUtLWRpc2FibGVkIHsKICAgICAgb3BhY2l0eTogMC42OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2JvZHkgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDE2cHg7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIHsKICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgIGhlaWdodDogNDhweDsKICAgICAgYm9yZGVyLXJhZGl1czogMTZweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlIC8gMC4xMikiLCAiaHNsKDIxMyA5MyUgNjglIC8gMC4xMikiKX07CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19pY29uIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2xvYWRlciB7CiAgICAgIHdpZHRoOiAyMHB4OwogICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxNSwgMjMsIDQyLCAwLjE1KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IGxvYWRlci1zcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgfQoKICAgIC5kcm9wem9uZV9fY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmRyb3B6b25lX19oZWFkbGluZSB7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICB9CgogICAgLmRyb3B6b25lX19zdWJsaW5lIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ2JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX2Jyb3dzZSB7CiAgICAgIGFwcGVhcmFuY2U6IG5vbmU7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgYmFja2dyb3VuZDogbm9uZTsKICAgICAgcGFkZGluZzogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA2MCUpIiwgImhzbCgyMTMgOTMlIDY4JSkiKX07CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgfQoKICAgIC5kcm9wem9uZV9fYnJvd3NlOmhvdmVyIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CgogICAgLmRyb3B6b25lX19icm93c2U6ZGlzYWJsZWQgewogICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICBvcGFjaXR5OiAwLjY7CiAgICB9CgogICAgLmRyb3B6b25lX19tZXRhIHsKICAgICAgbWFyZ2luLXRvcDogMTRweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBnYXA6IDhweDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDUwJSkiLCAiaHNsKDIxNSAxNiUgNzIlKSIpfTsKICAgIH0KCiAgICAuZHJvcHpvbmVfX21ldGEgc3BhbiB7CiAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDk1JSkiLCAiaHNsKDIxMyA5MyUgMTglKSIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDkwJSkiLCAiaHNsKDIxMyA5MyUgMjQlKSIpfTsKICAgIH0KCiAgICAuZmlsZS1saXN0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICBwYWRkaW5nLXRvcDogMjBweDsKICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE3IDkxJSA5MCUpIiwgImhzbCgyMTMgOTMlIDI0JSkiKX07CiAgICB9CgogICAgLmZpbGUtbGlzdF9faGVhZGVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5maWxlLWxpc3RfX2NsZWFyIHsKICAgICAgYXBwZWFyYW5jZTogbm9uZTsKICAgICAgYm9yZGVyOiBub25lOwogICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CgogICAgLmZpbGUtbGlzdF9fY2xlYXI6aG92ZXIgewogICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgIH0KCiAgICAuZmlsZS1saXN0X19pdGVtcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMTJweDsKICAgIH0KCiAgICAuZmlsZS1yb3cgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDEycHg7CiAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUgLyAwLjUpIiwgImhzbCgyMTUgMjAlIDE2JSAvIDAuNSkiKX07CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEzIDI3JSA5MiUpIiwgImhzbCgyMTcgMjUlIDI2JSkiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgfQoKICAgIC5maWxlLXJvdzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlIC8gMC44KSIsICJoc2woMjE1IDIwJSAxNiUgLyAwLjgpIil9OwogICAgfQoKICAgIC5maWxlLXRodW1iIHsKICAgICAgd2lkdGg6IDM2cHg7CiAgICAgIGhlaWdodDogMzZweDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDMyJSAxOCUpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLmZpbGUtdGh1bWIgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzAlKSIpfTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAxOHB4OwogICAgICBoZWlnaHQ6IDE4cHg7CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgICBmbGV4LXNocmluazogMDsKICAgIH0KCgogICAgLnRodW1iLWltYWdlIHsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb2JqZWN0LWZpdDogY292ZXI7CiAgICB9CgogICAgLmZpbGUtbWV0YSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogNHB4OwogICAgICBtaW4td2lkdGg6IDA7CiAgICB9CgogICAgLmZpbGUtbmFtZSB7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyIDQ3JSAxMSUpIiwgImhzbCgyMTAgMjAlIDk2JSkiKX07CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgIC5maWxlLWRldGFpbHMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDYlKSIsICJoc2woMjE1IDE2JSA3MCUpIil9OwogICAgfQoKICAgIC5maWxlLXNpemUgewogICAgICBmb250LXZhcmlhbnQtbnVtZXJpYzogdGFidWxhci1udW1zOwogICAgfQoKICAgIC5maWxlLXR5cGUgewogICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAzMiUgMjglKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NiUpIiwgImhzbCgyMTUgMTYlIDcwJSkiKX07CiAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIGxldHRlci1zcGFjaW5nOiAwLjA4ZW07CiAgICAgIGxpbmUtaGVpZ2h0OiAxOwogICAgfQoKICAgIC5maWxlLWFjdGlvbnMgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICB9CgogICAgLnJlbW92ZS1idXR0b24gewogICAgICB3aWR0aDogMjhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICBib3JkZXI6IG5vbmU7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgdHJhbnNmb3JtIDAuMTVzIGVhc2UsIGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNTIlKSIsICJoc2woMjE1IDE2JSA2OCUpIil9OwogICAgfQoKICAgIC5yZW1vdmUtYnV0dG9uOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyJSA1MCUgLyAwLjA4KSIsICJoc2woMCA2MiUgMzIlIC8gMC4xNSkiKX07CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIlIDQ2JSkiLCAiaHNsKDAgNzAlIDcwJSkiKX07CiAgICB9CgogICAgLnJlbW92ZS1idXR0b246YWN0aXZlIHsKICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk2KTsKICAgIH0KCiAgICAucmVtb3ZlLWJ1dHRvbiBkZWVzLWljb24gewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgd2lkdGg6IDE0cHg7CiAgICAgIGhlaWdodDogMTRweDsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICB9CgogICAgLnZhbGlkYXRpb24tbWVzc2FnZSB7CiAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgIH0KCiAgICBAa2V5ZnJhbWVzIGxvYWRlci1zcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1maWxldXBsb2FkL2NvbXBvbmVudC5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMjYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRGaWxldXBsb2FkID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1maWxldXBsb2FkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZGVjb3JhdG9yczsKICBsZXQgX3N0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfaXNMb2FkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9idXR0b25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9idXR0b25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYnV0dG9uVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0X2RlY29yYXRvcnM7CiAgbGV0IF9hY2NlcHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2RlY29yYXRvcnM7CiAgbGV0IF9tdWx0aXBsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblN0YXRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dEZpbGV1cGxvYWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc3RhdGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzTG9hZGluZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYnV0dG9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FjY2VwdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX211bHRpcGxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heFNpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9tYXhGaWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3ZhbGlkYXRpb25TdGF0ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjYodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfc3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN0YXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdGF0ZV9pbml0aWFsaXplcnMsIF9zdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9pc0xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNMb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0xvYWRpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNMb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0xvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9idXR0b25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJ1dHRvblRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJ1dHRvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYnV0dG9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYnV0dG9uVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9idXR0b25UZXh0X2luaXRpYWxpemVycywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfYWNjZXB0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdF9pbml0aWFsaXplcnMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbXVsdGlwbGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibXVsdGlwbGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm11bHRpcGxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm11bHRpcGxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tdWx0aXBsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIF9tdWx0aXBsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF9tYXhTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhTaXplX2luaXRpYWxpemVycywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyNih0aGlzLCBudWxsLCBfbWF4RmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4RmlsZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEZpbGVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhGaWxlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIF9tYXhGaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KHRoaXMsIG51bGwsIF92YWxpZGF0aW9uU3RhdGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsaWRhdGlvblN0YXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uU3RhdGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblN0YXRlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWxpZGF0aW9uU3RhdGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblN0YXRlX2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzE4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfaW5pdGlhbGl6ZXJzLCAiaWRsZSIpKTsKICAgIGdldCBzdGF0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfc3RhdGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzTG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzTG9hZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfaW5pdGlhbGl6ZXJzLCAiU2VsZWN0IGZpbGVzIikpOwogICAgZ2V0IGJ1dHRvblRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNidXR0b25UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYnV0dG9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYnV0dG9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX2J1dHRvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjY2VwdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbXVsdGlwbGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9hY2NlcHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tdWx0aXBsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBtdWx0aXBsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbXVsdGlwbGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI211bHRpcGxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX211bHRpcGxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4U2l6ZV9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyBubyBsaW1pdAogICAgc2V0IG1heFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYXhGaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX21heFNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF9tYXhGaWxlc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhGaWxlcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyAwIG1lYW5zIG5vIGxpbWl0CiAgICBzZXQgbWF4RmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyNyh0aGlzLCBfbWF4RmlsZXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI3KHRoaXMsIF92YWxpZGF0aW9uU3RhdGVfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgdmFsaWRhdGlvblN0YXRlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblN0YXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvblN0YXRlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWxpZGF0aW9uU3RhdGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjcodGhpcywgX3ZhbGlkYXRpb25TdGF0ZV9leHRyYUluaXRpYWxpemVycyksICIiKTsKICAgIGdldCB2YWxpZGF0aW9uTWVzc2FnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsaWRhdGlvbk1lc3NhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbGlkYXRpb25NZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBwcmV2aWV3VXJsTWFwID0gLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCk7CiAgICBkcm9wQXJlYSA9IG51bGw7CiAgICBzdGF0aWMgc3R5bGVzID0gZmlsZXVwbG9hZFN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWNjZXB0ZWRTdW1tYXJ5ID0gdGhpcy5nZXRBY2NlcHRlZFN1bW1hcnkoKTsKICAgICAgY29uc3QgbWV0YUVudHJpZXMgPSBbCiAgICAgICAgdGhpcy5tdWx0aXBsZSA/ICJNdWx0aXBsZSBmaWxlcyBzdXBwb3J0ZWQiIDogIlNpbmdsZSBmaWxlIG9ubHkiLAogICAgICAgIHRoaXMubWF4U2l6ZSA+IDAgPyBgTWF4ICR7dGhpcy5mb3JtYXRGaWxlU2l6ZSh0aGlzLm1heFNpemUpfWAgOiAiTm8gc2l6ZSBsaW1pdCIKICAgICAgXTsKICAgICAgaWYgKGFjY2VwdGVkU3VtbWFyeSkgewogICAgICAgIG1ldGFFbnRyaWVzLnB1c2goYEFjY2VwdHMgJHthY2NlcHRlZFN1bW1hcnl9YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbAogICAgICAgICAgLmxhYmVsPSR7dGhpcy5sYWJlbH0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259CiAgICAgICAgICAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfQogICAgICAgID48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImRyb3B6b25lICR7dGhpcy5zdGF0ZSA9PT0gImRyYWdPdmVyIiA/ICJkcm9wem9uZS0tYWN0aXZlIiA6ICIifSAke3RoaXMuZGlzYWJsZWQgPyAiZHJvcHpvbmUtLWRpc2FibGVkIiA6ICIifSAke3RoaXMudmFsdWUubGVuZ3RoID4gMCA/ICJkcm9wem9uZS0taGFzLWZpbGVzIiA6ICIifSIKICAgICAgICAgIHJvbGU9ImJ1dHRvbiIKICAgICAgICAgIHRhYmluZGV4PSR7dGhpcy5kaXNhYmxlZCA/IC0xIDogMH0KICAgICAgICAgIGFyaWEtZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgYXJpYS1sYWJlbD0ke2BTZWxlY3QgZmlsZXMke2FjY2VwdGVkU3VtbWFyeSA/IGAgKCR7YWNjZXB0ZWRTdW1tYXJ5fSlgIDogIiJ9YH0KICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlRHJvcHpvbmVDbGlja30KICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVEcm9wem9uZUtleWRvd259CiAgICAgICAgPgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIGNsYXNzPSJmaWxlLWlucHV0IgogICAgICAgICAgICBzdHlsZT0icG9zaXRpb246IGFic29sdXRlOyBvcGFjaXR5OiAwOyBwb2ludGVyLWV2ZW50czogbm9uZTsgd2lkdGg6IDFweDsgaGVpZ2h0OiAxcHg7IHRvcDogMDsgbGVmdDogMDsgb3ZlcmZsb3c6IGhpZGRlbjsiCiAgICAgICAgICAgIHR5cGU9ImZpbGUiCiAgICAgICAgICAgID9tdWx0aXBsZT0ke3RoaXMubXVsdGlwbGV9CiAgICAgICAgICAgIGFjY2VwdD0ke3RoaXMuYWNjZXB0IHx8ICIifQogICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVGaWxlSW5wdXRDaGFuZ2V9CiAgICAgICAgICAgIHRhYmluZGV4PSItMSIKICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fYm9keSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyb3B6b25lX19pY29uIj4KICAgICAgICAgICAgICAke3RoaXMuaXNMb2FkaW5nID8gYjJgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19sb2FkZXIiIGFyaWEtaGlkZGVuPSJ0cnVlIj48L3NwYW4+YCA6IGIyYDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZvbGRlck9wZW4iPjwvZGVlcy1pY29uPmB9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fY29udGVudCI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRyb3B6b25lX19oZWFkbGluZSI+JHt0aGlzLmJ1dHRvblRleHQgfHwgIlNlbGVjdCBmaWxlcyJ9PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkcm9wem9uZV9fc3VibGluZSI+CiAgICAgICAgICAgICAgICBEcmFnIGFuZCBkcm9wIGZpbGVzIGhlcmUgb3IKICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgdHlwZT0iYnV0dG9uIgogICAgICAgICAgICAgICAgICBjbGFzcz0iZHJvcHpvbmVfX2Jyb3dzZSIKICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVCcm93c2VDbGlja30KICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgYnJvd3NlCiAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkcm9wem9uZV9fbWV0YSI+CiAgICAgICAgICAgICR7bWV0YUVudHJpZXMubWFwKChlbnRyeSkgPT4gYjJgPHNwYW4+JHtlbnRyeX08L3NwYW4+YCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICR7dGhpcy5yZW5kZXJGaWxlTGlzdCgpfQogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZSA/IGIyYDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSIgYXJpYS1saXZlPSJwb2xpdGUiPiR7dGhpcy52YWxpZGF0aW9uTWVzc2FnZX08L2Rpdj5gIDogYjJgYH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyRmlsZUxpc3QoKSB7CiAgICAgIGlmICh0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWxpc3RfX2hlYWRlciI+CiAgICAgICAgICA8c3Bhbj4ke3RoaXMudmFsdWUubGVuZ3RofSBmaWxlJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMSA/ICIiIDogInMifSBzZWxlY3RlZDwvc3Bhbj4KICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gYjJgPGJ1dHRvbiB0eXBlPSJidXR0b24iIGNsYXNzPSJmaWxlLWxpc3RfX2NsZWFyIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsZWFyQWxsfT5DbGVhciAke3RoaXMudmFsdWUubGVuZ3RoID4gMSA/ICJhbGwiIDogIiJ9PC9idXR0b24+YCA6IGIyYGB9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1saXN0X19pdGVtcyI+CiAgICAgICAgICAke3RoaXMudmFsdWUubWFwKChmaWxlKSA9PiB0aGlzLnJlbmRlckZpbGVSb3coZmlsZSkpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWxlUm93KGZpbGUpIHsKICAgICAgY29uc3QgZmlsZVR5cGUgPSB0aGlzLmdldEZpbGVUeXBlKGZpbGUpOwogICAgICBjb25zdCBwcmV2aWV3VXJsID0gdGhpcy5jYW5TaG93UHJldmlldyhmaWxlKSA/IHRoaXMuZ2V0UHJldmlld1VybChmaWxlKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZmlsZS1yb3cgJHtmaWxlVHlwZX0tZmlsZSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS10aHVtYiIgYXJpYS1oaWRkZW49InRydWUiPgogICAgICAgICAgJHtwcmV2aWV3VXJsID8gYjJgPGltZyBjbGFzcz0idGh1bWItaW1hZ2UiIHNyYz0ke3ByZXZpZXdVcmx9IGFsdD0ke2BQcmV2aWV3IG9mICR7ZmlsZS5uYW1lfWB9PmAgOiBiMmA8ZGVlcy1pY29uIGljb249JHt0aGlzLmdldEZpbGVJY29uKGZpbGUpfT48L2RlZXMtaWNvbj5gfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtbWV0YSI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLW5hbWUiIHRpdGxlPSR7ZmlsZS5uYW1lfT4ke2ZpbGUubmFtZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZpbGUtZGV0YWlscyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPiR7dGhpcy5mb3JtYXRGaWxlU2l6ZShmaWxlLnNpemUpfTwvc3Bhbj4KICAgICAgICAgICAgJHtmaWxlVHlwZSAhPT0gImZpbGUiID8gYjJgPHNwYW4gY2xhc3M9ImZpbGUtdHlwZSI+JHtmaWxlVHlwZX08L3NwYW4+YCA6IGIyYGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWFjdGlvbnMiPgogICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICB0eXBlPSJidXR0b24iCiAgICAgICAgICAgIGNsYXNzPSJyZW1vdmUtYnV0dG9uIgogICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUZpbGUoZmlsZSl9CiAgICAgICAgICAgIGFyaWEtbGFiZWw9JHtgUmVtb3ZlICR7ZmlsZS5uYW1lfWB9CiAgICAgICAgICA+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZUZpbGVJbnB1dENoYW5nZSA9IGFzeW5jIChldmVudCkgPT4gewogICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGZpbGVzID0gQXJyYXkuZnJvbSh0YXJnZXQuZmlsZXMgPz8gW10pOwogICAgICBpZiAoZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICB9CiAgICAgIHRhcmdldC52YWx1ZSA9ICIiOwogICAgfTsKICAgIGhhbmRsZURyb3B6b25lQ2xpY2sgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnRhcmdldC5jbG9zZXN0KCIuZHJvcHpvbmVfX2Jyb3dzZSwgLmZpbGUtbGlzdCIpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVTZWxlY3RvcigpOwogICAgfTsKICAgIGhhbmRsZUJyb3dzZUNsaWNrID0gKGV2ZW50KSA9PiB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLm9wZW5GaWxlU2VsZWN0b3IoKTsKICAgIH07CiAgICBoYW5kbGVEcm9wem9uZUtleWRvd24gPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIiB8fCBldmVudC5rZXkgPT09ICIgIikgewogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5vcGVuRmlsZVNlbGVjdG9yKCk7CiAgICAgIH0KICAgIH07CiAgICBoYW5kbGVDbGVhckFsbCA9IChldmVudCkgPT4gewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmNsZWFyQWxsKCk7CiAgICB9OwogICAgaGFuZGxlRHJhZ0V2ZW50ID0gYXN5bmMgKGV2ZW50KSA9PiB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyYWdlbnRlciIgfHwgZXZlbnQudHlwZSA9PT0gImRyYWdvdmVyIikgewogICAgICAgIGlmIChldmVudC5kYXRhVHJhbnNmZXIpIHsKICAgICAgICAgIGV2ZW50LmRhdGFUcmFuc2Zlci5kcm9wRWZmZWN0ID0gImNvcHkiOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0YXRlID0gImRyYWdPdmVyIjsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGV2ZW50LnR5cGUgPT09ICJkcmFnbGVhdmUiKSB7CiAgICAgICAgaWYgKCF0aGlzLmRyb3BBcmVhKSB7CiAgICAgICAgICB0aGlzLnN0YXRlID0gImlkbGUiOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCByZWN0ID0gdGhpcy5kcm9wQXJlYS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB7IGNsaWVudFggPSAwLCBjbGllbnRZID0gMCB9ID0gZXZlbnQ7CiAgICAgICAgaWYgKGNsaWVudFggPD0gcmVjdC5sZWZ0IHx8IGNsaWVudFggPj0gcmVjdC5yaWdodCB8fCBjbGllbnRZIDw9IHJlY3QudG9wIHx8IGNsaWVudFkgPj0gcmVjdC5ib3R0b20pIHsKICAgICAgICAgIHRoaXMuc3RhdGUgPSAiaWRsZSI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoZXZlbnQudHlwZSA9PT0gImRyb3AiKSB7CiAgICAgICAgdGhpcy5zdGF0ZSA9ICJpZGxlIjsKICAgICAgICBjb25zdCBmaWxlcyA9IEFycmF5LmZyb20oZXZlbnQuZGF0YVRyYW5zZmVyPy5maWxlcyA/PyBbXSk7CiAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMuYWRkRmlsZXMoZmlsZXMpOwogICAgICAgIH0KICAgICAgfQogICAgfTsKICAgIGF0dGFjaERyb3BMaXN0ZW5lcnMoKSB7CiAgICAgIGlmICghdGhpcy5kcm9wQXJlYSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBbImRyYWdlbnRlciIsICJkcmFnb3ZlciIsICJkcmFnbGVhdmUiLCAiZHJvcCJdLmZvckVhY2goKGV2ZW50TmFtZSkgPT4gewogICAgICAgIHRoaXMuZHJvcEFyZWEuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIHRoaXMuaGFuZGxlRHJhZ0V2ZW50KTsKICAgICAgfSk7CiAgICB9CiAgICBkZXRhY2hEcm9wTGlzdGVuZXJzKCkgewogICAgICBpZiAoIXRoaXMuZHJvcEFyZWEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgWyJkcmFnZW50ZXIiLCAiZHJhZ292ZXIiLCAiZHJhZ2xlYXZlIiwgImRyb3AiXS5mb3JFYWNoKChldmVudE5hbWUpID0+IHsKICAgICAgICB0aGlzLmRyb3BBcmVhLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLCB0aGlzLmhhbmRsZURyYWdFdmVudCk7CiAgICAgIH0pOwogICAgfQogICAgcmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpIHsKICAgICAgY29uc3QgbmV3RHJvcEFyZWEgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kcm9wem9uZSIpOwogICAgICBpZiAobmV3RHJvcEFyZWEgIT09IHRoaXMuZHJvcEFyZWEpIHsKICAgICAgICB0aGlzLmRldGFjaERyb3BMaXN0ZW5lcnMoKTsKICAgICAgICB0aGlzLmRyb3BBcmVhID0gbmV3RHJvcEFyZWE7CiAgICAgICAgdGhpcy5hdHRhY2hEcm9wTGlzdGVuZXJzKCk7CiAgICAgIH0KICAgIH0KICAgIGZvcm1hdEZpbGVTaXplKGJ5dGVzKSB7CiAgICAgIGNvbnN0IHVuaXRzMiA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCeXRlcyI7CiAgICAgIGNvbnN0IGV4cG9uZW50ID0gTWF0aC5taW4oTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZygxMDI0KSksIHVuaXRzMi5sZW5ndGggLSAxKTsKICAgICAgY29uc3Qgc2l6ZSA9IGJ5dGVzIC8gTWF0aC5wb3coMTAyNCwgZXhwb25lbnQpOwogICAgICByZXR1cm4gYCR7TWF0aC5yb3VuZChzaXplICogMTAwKSAvIDEwMH0gJHt1bml0czJbZXhwb25lbnRdfWA7CiAgICB9CiAgICBnZXRGaWxlVHlwZShmaWxlKSB7CiAgICAgIGNvbnN0IHR5cGU1ID0gZmlsZS50eXBlLnRvTG93ZXJDYXNlKCk7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJpbWFnZS8iKSkKICAgICAgICByZXR1cm4gImltYWdlIjsKICAgICAgaWYgKHR5cGU1ID09PSAiYXBwbGljYXRpb24vcGRmIikKICAgICAgICByZXR1cm4gInBkZiI7CiAgICAgIGlmICh0eXBlNS5pbmNsdWRlcygid29yZCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJkb2N1bWVudCIpKQogICAgICAgIHJldHVybiAiZG9jIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJzaGVldCIpIHx8IHR5cGU1LmluY2x1ZGVzKCJleGNlbCIpKQogICAgICAgIHJldHVybiAic3ByZWFkc2hlZXQiOwogICAgICBpZiAodHlwZTUuaW5jbHVkZXMoInByZXNlbnRhdGlvbiIpIHx8IHR5cGU1LmluY2x1ZGVzKCJwb3dlcnBvaW50IikpCiAgICAgICAgcmV0dXJuICJwcmVzZW50YXRpb24iOwogICAgICBpZiAodHlwZTUuc3RhcnRzV2l0aCgidmlkZW8vIikpCiAgICAgICAgcmV0dXJuICJ2aWRlbyI7CiAgICAgIGlmICh0eXBlNS5zdGFydHNXaXRoKCJhdWRpby8iKSkKICAgICAgICByZXR1cm4gImF1ZGlvIjsKICAgICAgaWYgKHR5cGU1LmluY2x1ZGVzKCJ6aXAiKSB8fCB0eXBlNS5pbmNsdWRlcygiY29tcHJlc3NlZCIpKQogICAgICAgIHJldHVybiAiYXJjaGl2ZSI7CiAgICAgIHJldHVybiAiZmlsZSI7CiAgICB9CiAgICBnZXRGaWxlSWNvbihmaWxlKSB7CiAgICAgIGNvbnN0IGZpbGVUeXBlID0gdGhpcy5nZXRGaWxlVHlwZShmaWxlKTsKICAgICAgY29uc3QgaWNvbk1hcCA9IHsKICAgICAgICBpbWFnZTogImx1Y2lkZTpGaWxlSW1hZ2UiLAogICAgICAgIHBkZjogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgZG9jOiAibHVjaWRlOkZpbGVUZXh0IiwKICAgICAgICBzcHJlYWRzaGVldDogImx1Y2lkZTpGaWxlU3ByZWFkc2hlZXQiLAogICAgICAgIHByZXNlbnRhdGlvbjogImx1Y2lkZTpGaWxlQmFyQ2hhcnQiLAogICAgICAgIHZpZGVvOiAibHVjaWRlOkZpbGVWaWRlbyIsCiAgICAgICAgYXVkaW86ICJsdWNpZGU6RmlsZUF1ZGlvIiwKICAgICAgICBhcmNoaXZlOiAibHVjaWRlOkZpbGVBcmNoaXZlIiwKICAgICAgICBmaWxlOiAibHVjaWRlOkZpbGUiCiAgICAgIH07CiAgICAgIHJldHVybiBpY29uTWFwW2ZpbGVUeXBlXSA/PyAibHVjaWRlOkZpbGUiOwogICAgfQogICAgY2FuU2hvd1ByZXZpZXcoZmlsZSkgewogICAgICByZXR1cm4gZmlsZS50eXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpICYmIGZpbGUuc2l6ZSA8IDUgKiAxMDI0ICogMTAyNDsKICAgIH0KICAgIHZhbGlkYXRlRmlsZShmaWxlKSB7CiAgICAgIGlmICh0aGlzLm1heFNpemUgPiAwICYmIGZpbGUuc2l6ZSA+IHRoaXMubWF4U2l6ZSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSAiJHtmaWxlLm5hbWV9IiBleGNlZWRzIHRoZSBtYXhpbXVtIHNpemUgb2YgJHt0aGlzLmZvcm1hdEZpbGVTaXplKHRoaXMubWF4U2l6ZSl9YDsKICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuYWNjZXB0KSB7CiAgICAgICAgY29uc3QgYWNjZXB0ZWRUeXBlcyA9IHRoaXMuYWNjZXB0LnNwbGl0KCIsIikubWFwKChlbnRyeSkgPT4gZW50cnkudHJpbSgpKS5maWx0ZXIoKGVudHJ5KSA9PiBlbnRyeS5sZW5ndGggPiAwKTsKICAgICAgICBpZiAoYWNjZXB0ZWRUeXBlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBsZXQgaXNBY2NlcHRlZCA9IGZhbHNlOwogICAgICAgICAgZm9yIChjb25zdCBhY2NlcHRUeXBlIG9mIGFjY2VwdGVkVHlwZXMpIHsKICAgICAgICAgICAgaWYgKGFjY2VwdFR5cGUuc3RhcnRzV2l0aCgiLiIpKSB7CiAgICAgICAgICAgICAgaWYgKGZpbGUubmFtZS50b0xvd2VyQ2FzZSgpLmVuZHNXaXRoKGFjY2VwdFR5cGUudG9Mb3dlckNhc2UoKSkpIHsKICAgICAgICAgICAgICAgIGlzQWNjZXB0ZWQgPSB0cnVlOwogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9IGVsc2UgaWYgKGFjY2VwdFR5cGUuZW5kc1dpdGgoIi8qIikpIHsKICAgICAgICAgICAgICBjb25zdCBwcmVmaXg0ID0gYWNjZXB0VHlwZS5zbGljZSgwLCAtMik7CiAgICAgICAgICAgICAgaWYgKGZpbGUudHlwZS5zdGFydHNXaXRoKHByZWZpeDQpKSB7CiAgICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSBlbHNlIGlmIChmaWxlLnR5cGUgPT09IGFjY2VwdFR5cGUpIHsKICAgICAgICAgICAgICBpc0FjY2VwdGVkID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgICAgaWYgKCFpc0FjY2VwdGVkKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgRmlsZSB0eXBlIG5vdCBhY2NlcHRlZC4gQWxsb3dlZDogJHthY2NlcHRlZFR5cGVzLmpvaW4oIiwgIil9YDsKICAgICAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBnZXRQcmV2aWV3VXJsKGZpbGUpIHsKICAgICAgbGV0IHVybCA9IHRoaXMucHJldmlld1VybE1hcC5nZXQoZmlsZSk7CiAgICAgIGlmICghdXJsKSB7CiAgICAgICAgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChmaWxlKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuc2V0KGZpbGUsIHVybCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHVybDsKICAgIH0KICAgIHJlbGVhc2VQcmV2aWV3KGZpbGUpIHsKICAgICAgY29uc3QgdXJsID0gdGhpcy5wcmV2aWV3VXJsTWFwLmdldChmaWxlKTsKICAgICAgaWYgKHVybCkgewogICAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgICAgICB0aGlzLnByZXZpZXdVcmxNYXAuZGVsZXRlKGZpbGUpOwogICAgICB9CiAgICB9CiAgICBnZXRBY2NlcHRlZFN1bW1hcnkoKSB7CiAgICAgIGlmICghdGhpcy5hY2NlcHQpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBmb3JtYXR0ZWQgPSBBcnJheS5mcm9tKG5ldyBTZXQodGhpcy5hY2NlcHQuc3BsaXQoIiwiKS5tYXAoKHRva2VuKSA9PiB0b2tlbi50cmltKCkpLmZpbHRlcigodG9rZW4pID0+IHRva2VuLmxlbmd0aCA+IDApLm1hcCgodG9rZW4pID0+IHRoaXMuZm9ybWF0QWNjZXB0VG9rZW4odG9rZW4pKSkpLmZpbHRlcihCb29sZWFuKTsKICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBpZiAoZm9ybWF0dGVkLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHJldHVybiBmb3JtYXR0ZWRbMF07CiAgICAgIH0KICAgICAgaWYgKGZvcm1hdHRlZC5sZW5ndGggPT09IDIpIHsKICAgICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkWzBdfSwgJHtmb3JtYXR0ZWRbMV19YDsKICAgICAgfQogICAgICByZXR1cm4gYCR7Zm9ybWF0dGVkLnNsaWNlKDAsIDIpLmpvaW4oIiwgIil9XHUyMDI2YDsKICAgIH0KICAgIGZvcm1hdEFjY2VwdFRva2VuKHRva2VuKSB7CiAgICAgIGlmICh0b2tlbiA9PT0gIiovKiIpIHsKICAgICAgICByZXR1cm4gIkFsbCBmaWxlcyI7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLmVuZHNXaXRoKCIvKiIpKSB7CiAgICAgICAgY29uc3QgZmFtaWx5ID0gdG9rZW4uc3BsaXQoIi8iKVswXTsKICAgICAgICBpZiAoIWZhbWlseSkgewogICAgICAgICAgcmV0dXJuICJBbGwgZmlsZXMiOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYCR7ZmFtaWx5LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpfSR7ZmFtaWx5LnNsaWNlKDEpfSBmaWxlc2A7CiAgICAgIH0KICAgICAgaWYgKHRva2VuLnN0YXJ0c1dpdGgoIi4iKSkgewogICAgICAgIHJldHVybiB0b2tlbi5zbGljZSgxKS50b1VwcGVyQ2FzZSgpOwogICAgICB9CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicGRmIikpCiAgICAgICAgcmV0dXJuICJQREYiOwogICAgICBpZiAodG9rZW4uaW5jbHVkZXMoInppcCIpKQogICAgICAgIHJldHVybiAiWklQIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJqc29uIikpCiAgICAgICAgcmV0dXJuICJKU09OIjsKICAgICAgaWYgKHRva2VuLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgICByZXR1cm4gIkRPQyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygid29yZHByb2Nlc3NpbmdtbCIpKQogICAgICAgIHJldHVybiAiRE9DWCI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygiZXhjZWwiKSkKICAgICAgICByZXR1cm4gIlhMUyI7CiAgICAgIGlmICh0b2tlbi5pbmNsdWRlcygicHJlc2VudGF0aW9uIikpCiAgICAgICAgcmV0dXJuICJQUFQiOwogICAgICBjb25zdCBzZWdtZW50cyA9IHRva2VuLnNwbGl0KCIvIik7CiAgICAgIGNvbnN0IGxhc3RTZWdtZW50ID0gc2VnbWVudHMucG9wKCkgPz8gdG9rZW47CiAgICAgIHJldHVybiBsYXN0U2VnbWVudC50b1VwcGVyQ2FzZSgpOwogICAgfQogICAgYXR0YWNoTGlmZWN5Y2xlTGlzdGVuZXJzKCkgewogICAgICB0aGlzLnJlYmluZEludGVyYWN0aXZlRWxlbWVudHMoKTsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLmF0dGFjaExpZmVjeWNsZUxpc3RlbmVycygpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygidmFsdWUiKSkgewogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB9CiAgICAgIHRoaXMucmViaW5kSW50ZXJhY3RpdmVFbGVtZW50cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHRoaXMuZGV0YWNoRHJvcExpc3RlbmVycygpOwogICAgICB0aGlzLnZhbHVlLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnByZXZpZXdVcmxNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlU2VsZWN0b3IoKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8IHRoaXMuaXNMb2FkaW5nKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuaXNMb2FkaW5nID0gdHJ1ZTsKICAgICAgY29uc3QgaW5wdXRGaWxlID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZmlsZS1pbnB1dCIpOwogICAgICBpZiAoIWlucHV0RmlsZSkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGhhbmRsZUZvY3VzID0gKCkgPT4gewogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgaWYgKCFpbnB1dEZpbGUuZmlsZXMgfHwgaW5wdXRGaWxlLmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICAgICAgfQogICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgIH0sIDMwMCk7CiAgICAgIH07CiAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgaW5wdXRGaWxlLmNsaWNrKCk7CiAgICB9CiAgICByZW1vdmVGaWxlKGZpbGUpIHsKICAgICAgY29uc3QgaW5kZXgyID0gdGhpcy52YWx1ZS5pbmRleE9mKGZpbGUpOwogICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICB0aGlzLnJlbGVhc2VQcmV2aWV3KGZpbGUpOwogICAgICAgIHRoaXMudmFsdWUuc3BsaWNlKGluZGV4MiwgMSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9CiAgICB9CiAgICBjbGVhckFsbCgpIHsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlcyA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgdGhpcy52YWx1ZSA9IFtdOwogICAgICBleGlzdGluZ0ZpbGVzLmZvckVhY2goKGZpbGUpID0+IHRoaXMucmVsZWFzZVByZXZpZXcoZmlsZSkpOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInZhbHVlIik7CiAgICAgIHZvaWQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICB9CiAgICBhc3luYyB1cGRhdGVWYWx1ZShldmVudEFyZykgewogICAgICBjb25zdCB0YXJnZXQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIHRoaXMudmFsdWUgPSBBcnJheS5mcm9tKHRhcmdldC5maWxlcyA/PyBbXSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh2YWx1ZTIubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCJ2YWx1ZSIpOwogICAgICB2b2lkIHRoaXMudmFsaWRhdGUoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIGFzeW5jIGFkZEZpbGVzKGZpbGVzKSB7CiAgICAgIGNvbnN0IGZpbGVzVG9BZGQgPSBbXTsKICAgICAgZm9yIChjb25zdCBmaWxlIG9mIGZpbGVzKSB7CiAgICAgICAgaWYgKHRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICBmaWxlc1RvQWRkLnB1c2goZmlsZSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmaWxlc1RvQWRkLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1heEZpbGVzID4gMCkgewogICAgICAgIGNvbnN0IHRvdGFsRmlsZXMgPSB0aGlzLnZhbHVlLmxlbmd0aCArIGZpbGVzVG9BZGQubGVuZ3RoOwogICAgICAgIGlmICh0b3RhbEZpbGVzID4gdGhpcy5tYXhGaWxlcykgewogICAgICAgICAgY29uc3QgYWxsb3dlZENvdW50ID0gdGhpcy5tYXhGaWxlcyAtIHRoaXMudmFsdWUubGVuZ3RoOwogICAgICAgICAgaWYgKGFsbG93ZWRDb3VudCA8PSAwKSB7CiAgICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgTWF4aW11bSAke3RoaXMubWF4RmlsZXN9IGZpbGVzIGFsbG93ZWRgOwogICAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJpbnZhbGlkIjsKICAgICAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgICAgZmlsZXNUb0FkZC5zcGxpY2UoYWxsb3dlZENvdW50KTsKICAgICAgICAgIHRoaXMudmFsaWRhdGlvbk1lc3NhZ2UgPSBgT25seSAke2FsbG93ZWRDb3VudH0gbW9yZSBmaWxlKHMpIGNhbiBiZSBhZGRlZGA7CiAgICAgICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9ICJ3YXJuIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLm11bHRpcGxlICYmIGZpbGVzVG9BZGQubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudmFsdWUuZm9yRWFjaCgoZmlsZSkgPT4gdGhpcy5yZWxlYXNlUHJldmlldyhmaWxlKSk7CiAgICAgICAgdGhpcy52YWx1ZSA9IFtmaWxlc1RvQWRkWzBdXTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlLnB1c2goLi4uZmlsZXNUb0FkZCk7CiAgICAgIH0KICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25TdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgidmFsdWUiKTsKICAgICAgYXdhaXQgdGhpcy52YWxpZGF0ZSgpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKHRoaXMudmFsdWUubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMuYnV0dG9uVGV4dCA9IHRoaXMubXVsdGlwbGUgPyAiQWRkIG1vcmUgZmlsZXMiIDogIlJlcGxhY2UgZmlsZSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5idXR0b25UZXh0ID0gIlNlbGVjdCBmaWxlcyI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICB0aGlzLnZhbGlkYXRpb25NZXNzYWdlID0gIiI7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkICYmIHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uU3RhdGUgPSAiaW52YWxpZCI7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uTWVzc2FnZSA9ICJQbGVhc2Ugc2VsZWN0IGF0IGxlYXN0IG9uZSBmaWxlIjsKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgZm9yIChjb25zdCBmaWxlIG9mIHRoaXMudmFsdWUpIHsKICAgICAgICBpZiAoIXRoaXMudmFsaWRhdGVGaWxlKGZpbGUpKSB7CiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblN0YXRlID0gdGhpcy52YWx1ZS5sZW5ndGggPiAwID8gInZhbGlkIiA6IG51bGw7CiAgICAgIHJldHVybiB0cnVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMyNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0RmlsZXVwbG9hZDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL2liYW50b29sc0A0LjUuMS9ub2RlX21vZHVsZXMvaWJhbnRvb2xzL2pzbmV4dC9pYmFudG9vbHMuanMKZnVuY3Rpb24gaXNWYWxpZElCQU4oaWJhbiwgdmFsaWRhdGlvbk9wdGlvbnMpIHsKICBpZiAodmFsaWRhdGlvbk9wdGlvbnMgPT09IHZvaWQgMCkgewogICAgdmFsaWRhdGlvbk9wdGlvbnMgPSB7IGFsbG93UVJJQkFOOiB0cnVlIH07CiAgfQogIGlmIChpYmFuID09PSB2b2lkIDAgfHwgaWJhbiA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXlswLTldezJ9JCIsICIiKTsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2NvdW50cnlDb2RlXTsKICBpZiAoc3BlYyA9PT0gdm9pZCAwIHx8IHNwZWMuYmJhbl9yZWdleHAgPT09IHZvaWQgMCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSBudWxsIHx8IHNwZWMuY2hhcnMgPT09IHZvaWQgMCkKICAgIHJldHVybiBmYWxzZTsKICByZXR1cm4gc3BlYy5jaGFycyA9PT0gaWJhbi5sZW5ndGggJiYgcmVnLnRlc3QoaWJhbi5zbGljZSgyLCA0KSkgJiYgaXNWYWxpZEJCQU4oaWJhbi5zbGljZSg0KSwgY291bnRyeUNvZGUpICYmIGlzVmFsaWRJQkFOQ2hlY2tzdW0oaWJhbikgJiYgKHZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOIHx8ICFpc1FSSUJBTihpYmFuKSk7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNJQkFOOwooZnVuY3Rpb24oVmFsaWRhdGlvbkVycm9yc0lCQU4yKSB7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiTm9JQkFOUHJvdmlkZWQiXSA9IDBdID0gIk5vSUJBTlByb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJOb0lCQU5Db3VudHJ5Il0gPSAxXSA9ICJOb0lCQU5Db3VudHJ5IjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0JCQU5MZW5ndGgiXSA9IDJdID0gIldyb25nQkJBTkxlbmd0aCI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdCQkFORm9ybWF0Il0gPSAzXSA9ICJXcm9uZ0JCQU5Gb3JtYXQiOwogIFZhbGlkYXRpb25FcnJvcnNJQkFOMltWYWxpZGF0aW9uRXJyb3JzSUJBTjJbIkNoZWNrc3VtTm90TnVtYmVyIl0gPSA0XSA9ICJDaGVja3N1bU5vdE51bWJlciI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiV3JvbmdJQkFOQ2hlY2tzdW0iXSA9IDVdID0gIldyb25nSUJBTkNoZWNrc3VtIjsKICBWYWxpZGF0aW9uRXJyb3JzSUJBTjJbVmFsaWRhdGlvbkVycm9yc0lCQU4yWyJXcm9uZ0FjY291bnRCYW5rQnJhbmNoQ2hlY2tzdW0iXSA9IDZdID0gIldyb25nQWNjb3VudEJhbmtCcmFuY2hDaGVja3N1bSI7CiAgVmFsaWRhdGlvbkVycm9yc0lCQU4yW1ZhbGlkYXRpb25FcnJvcnNJQkFOMlsiUVJJQkFOTm90QWxsb3dlZCJdID0gN10gPSAiUVJJQkFOTm90QWxsb3dlZCI7Cn0pKFZhbGlkYXRpb25FcnJvcnNJQkFOIHx8IChWYWxpZGF0aW9uRXJyb3JzSUJBTiA9IHt9KSk7CmZ1bmN0aW9uIHZhbGlkYXRlSUJBTihpYmFuLCB2YWxpZGF0aW9uT3B0aW9ucykgewogIGlmICh2YWxpZGF0aW9uT3B0aW9ucyA9PT0gdm9pZCAwKSB7CiAgICB2YWxpZGF0aW9uT3B0aW9ucyA9IHsgYWxsb3dRUklCQU46IHRydWUgfTsKICB9CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGliYW4gIT09IHZvaWQgMCAmJiBpYmFuICE9PSBudWxsICYmIGliYW4gIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tpYmFuLnNsaWNlKDAsIDIpXTsKICAgIGlmICghc3BlYyB8fCAhKHNwZWMuYmJhbl9yZWdleHAgfHwgc3BlYy5jaGFycykpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOQ291bnRyeSk7CiAgICAgIHJldHVybiByZXN1bHQ7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmNoYXJzICYmIHNwZWMuY2hhcnMgIT09IGliYW4ubGVuZ3RoKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLldyb25nQkJBTkxlbmd0aCk7CiAgICB9CiAgICBpZiAoc3BlYyAmJiBzcGVjLmJiYW5fcmVnZXhwICYmICFjaGVja0Zvcm1hdEJCQU4oaWJhbi5zbGljZSg0KSwgc3BlYy5iYmFuX3JlZ2V4cCkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdCQkFORm9ybWF0KTsKICAgIH0KICAgIGlmIChzcGVjICYmIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMgJiYgIXNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoaWJhbi5zbGljZSg0KSkpIHsKICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uV3JvbmdBY2NvdW50QmFua0JyYW5jaENoZWNrc3VtKTsKICAgIH0KICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeWzAtOV17Mn0kIiwgIiIpOwogICAgaWYgKCFyZWcudGVzdChpYmFuLnNsaWNlKDIsIDQpKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5DaGVja3N1bU5vdE51bWJlcik7CiAgICB9CiAgICBpZiAocmVzdWx0LmVycm9yQ29kZXMuaW5kZXhPZihWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0JCQU5Gb3JtYXQpICE9PSAtMSB8fCAhaXNWYWxpZElCQU5DaGVja3N1bShpYmFuKSkgewogICAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzSUJBTi5Xcm9uZ0lCQU5DaGVja3N1bSk7CiAgICB9CiAgICBpZiAoIXZhbGlkYXRpb25PcHRpb25zLmFsbG93UVJJQkFOICYmIGlzUVJJQkFOKGliYW4pKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNJQkFOLlFSSUJBTk5vdEFsbG93ZWQpOwogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0lCQU4uTm9JQkFOUHJvdmlkZWQpOwogIH0KICByZXR1cm4gcmVzdWx0Owp9CmZ1bmN0aW9uIGlzVmFsaWRCQkFOKGJiYW4sIGNvdW50cnlDb2RlKSB7CiAgaWYgKGJiYW4gPT09IHZvaWQgMCB8fCBiYmFuID09PSBudWxsIHx8IGNvdW50cnlDb2RlID09PSB2b2lkIDAgfHwgY291bnRyeUNvZGUgPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbY291bnRyeUNvZGVdOwogIGlmIChzcGVjID09PSB2b2lkIDAgfHwgc3BlYyA9PT0gbnVsbCB8fCBzcGVjLmJiYW5fcmVnZXhwID09PSB2b2lkIDAgfHwgc3BlYy5iYmFuX3JlZ2V4cCA9PT0gbnVsbCB8fCBzcGVjLmNoYXJzID09PSB2b2lkIDAgfHwgc3BlYy5jaGFycyA9PT0gbnVsbCkKICAgIHJldHVybiBmYWxzZTsKICBpZiAoc3BlYy5jaGFycyAtIDQgPT09IGJiYW4ubGVuZ3RoICYmIGNoZWNrRm9ybWF0QkJBTihiYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgaWYgKHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMpIHsKICAgICAgcmV0dXJuIHNwZWMuYmJhbl92YWxpZGF0aW9uX2Z1bmMoYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpKTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICByZXR1cm4gZmFsc2U7Cn0KZnVuY3Rpb24gaXNTRVBBQ291bnRyeShjb3VudHJ5Q29kZSkgewogIGlmIChjb3VudHJ5Q29kZSAhPT0gdm9pZCAwICYmIGNvdW50cnlDb2RlICE9PSBudWxsKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tjb3VudHJ5Q29kZV07CiAgICBpZiAoc3BlYyAhPT0gdm9pZCAwKSB7CiAgICAgIHJldHVybiBzcGVjLlNFUEEgPyBzcGVjLlNFUEEgOiBmYWxzZTsKICAgIH0KICB9CiAgcmV0dXJuIGZhbHNlOwp9CmZ1bmN0aW9uIGlzUVJJQkFOKGliYW4pIHsKICBpZiAoaWJhbiA9PT0gdm9pZCAwIHx8IGliYW4gPT09IG51bGwpCiAgICByZXR1cm4gZmFsc2U7CiAgdmFyIGNvdW50cnlDb2RlID0gaWJhbi5zbGljZSgwLCAyKTsKICB2YXIgUVJJQkFOQ291bnRyaWVzID0gWyJMSSIsICJDSCJdOwogIGlmICghUVJJQkFOQ291bnRyaWVzLmluY2x1ZGVzKGNvdW50cnlDb2RlKSkKICAgIHJldHVybiBmYWxzZTsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cCgiXjNbMC0xXXsxfVswLTldezN9JCIsICIiKTsKICByZXR1cm4gcmVnLnRlc3QoaWJhbi5zbGljZSg0LCA5KSk7Cn0KZnVuY3Rpb24gY29tcG9zZUlCQU4ocGFyYW1zMikgewogIHZhciBmb3JtYXRlZF9iYmFuID0gZWxlY3Ryb25pY0Zvcm1hdElCQU4ocGFyYW1zMi5iYmFuKSB8fCAiIjsKICBpZiAocGFyYW1zMi5jb3VudHJ5Q29kZSA9PT0gbnVsbCB8fCBwYXJhbXMyLmNvdW50cnlDb2RlID09PSB2b2lkIDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1twYXJhbXMyLmNvdW50cnlDb2RlXTsKICBpZiAoZm9ybWF0ZWRfYmJhbiAhPT0gIiIgJiYgc3BlYyAhPT0gdm9pZCAwICYmIHNwZWMuY2hhcnMgJiYgc3BlYy5jaGFycyAhPT0gbnVsbCAmJiBzcGVjLmNoYXJzID09PSBmb3JtYXRlZF9iYmFuLmxlbmd0aCArIDQgJiYgc3BlYy5iYmFuX3JlZ2V4cCAmJiBzcGVjLmJiYW5fcmVnZXhwICE9PSBudWxsICYmIGNoZWNrRm9ybWF0QkJBTihmb3JtYXRlZF9iYmFuLCBzcGVjLmJiYW5fcmVnZXhwKSkgewogICAgdmFyIGNoZWNrc29tID0gbW9kOTcxMEliYW4ocGFyYW1zMi5jb3VudHJ5Q29kZSArICIwMCIgKyBmb3JtYXRlZF9iYmFuKTsKICAgIHJldHVybiBwYXJhbXMyLmNvdW50cnlDb2RlICsgKCIwIiArICg5OCAtIGNoZWNrc29tKSkuc2xpY2UoLTIpICsgZm9ybWF0ZWRfYmJhbjsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gZXh0cmFjdElCQU4oaWJhbikgewogIHZhciByZXN1bHQgPSB7fTsKICB2YXIgZUZvcm1hdElCQU4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICByZXN1bHQuaWJhbiA9IGVGb3JtYXRJQkFOIHx8IGliYW47CiAgaWYgKCEhZUZvcm1hdElCQU4gJiYgaXNWYWxpZElCQU4oZUZvcm1hdElCQU4pKSB7CiAgICByZXN1bHQuYmJhbiA9IGVGb3JtYXRJQkFOLnNsaWNlKDQpOwogICAgcmVzdWx0LmNvdW50cnlDb2RlID0gZUZvcm1hdElCQU4uc2xpY2UoMCwgMik7CiAgICByZXN1bHQudmFsaWQgPSB0cnVlOwogICAgdmFyIHNwZWMgPSBjb3VudHJ5U3BlY3NbcmVzdWx0LmNvdW50cnlDb2RlXTsKICAgIGlmIChzcGVjLmFjY291bnRfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5hY2NvdW50X2luZGVudGlmaWVyLnNwbGl0KCItIik7CiAgICAgIHZhciBzdGFydGluZyA9IHBhcnNlSW50KGFjWzBdKTsKICAgICAgdmFyIGVuZGluZyA9IHBhcnNlSW50KGFjWzFdKTsKICAgICAgcmVzdWx0LmFjY291bnROdW1iZXIgPSByZXN1bHQuaWJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5iYW5rX2lkZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5iYW5rX2lkZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYmFua0lkZW50aWZpZXIgPSByZXN1bHQuYmJhbi5zbGljZShzdGFydGluZywgZW5kaW5nICsgMSk7CiAgICB9CiAgICBpZiAoc3BlYy5icmFuY2hfaW5kZW50aWZpZXIpIHsKICAgICAgdmFyIGFjID0gc3BlYy5icmFuY2hfaW5kZW50aWZpZXIuc3BsaXQoIi0iKTsKICAgICAgdmFyIHN0YXJ0aW5nID0gcGFyc2VJbnQoYWNbMF0pOwogICAgICB2YXIgZW5kaW5nID0gcGFyc2VJbnQoYWNbMV0pOwogICAgICByZXN1bHQuYnJhbmNoSWRlbnRpZmllciA9IHJlc3VsdC5iYmFuLnNsaWNlKHN0YXJ0aW5nLCBlbmRpbmcgKyAxKTsKICAgIH0KICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KZnVuY3Rpb24gY2hlY2tGb3JtYXRCQkFOKGJiYW4sIGJmb3JtYXQpIHsKICB2YXIgcmVnID0gbmV3IFJlZ0V4cChiZm9ybWF0LCAiIik7CiAgcmV0dXJuIHJlZy50ZXN0KGJiYW4pOwp9CmZ1bmN0aW9uIGVsZWN0cm9uaWNGb3JtYXRJQkFOKGliYW4pIHsKICBpZiAodHlwZW9mIGliYW4gIT09ICJzdHJpbmciKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGliYW4ucmVwbGFjZSgvWy1cIF0vZywgIiIpLnRvVXBwZXJDYXNlKCk7Cn0KZnVuY3Rpb24gZnJpZW5kbHlGb3JtYXRJQkFOKGliYW4sIHNlcGFyYXRvcikgewogIGlmICh0eXBlb2YgaWJhbiAhPT0gInN0cmluZyIpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBpZiAoc2VwYXJhdG9yID09PSB2b2lkIDAgfHwgc2VwYXJhdG9yID09PSBudWxsKSB7CiAgICBzZXBhcmF0b3IgPSAiICI7CiAgfQogIHZhciBlbGVjdHJvbmljX2liYW4gPSBlbGVjdHJvbmljRm9ybWF0SUJBTihpYmFuKTsKICBpZiAoZWxlY3Ryb25pY19pYmFuID09PSBudWxsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgcmV0dXJuIGVsZWN0cm9uaWNfaWJhbi5yZXBsYWNlKC8oLns0fSkoPyEkKS9nLCAiJDEiICsgc2VwYXJhdG9yKTsKfQpmdW5jdGlvbiBpc1ZhbGlkSUJBTkNoZWNrc3VtKGliYW4pIHsKICB2YXIgY291bnRyeUNvZGUgPSBpYmFuLnNsaWNlKDAsIDIpOwogIHZhciBwcm92aWRlZENoZWNrc3VtID0gcGFyc2VJbnQoaWJhbi5zbGljZSgyLCA0KSwgMTApOwogIHZhciBiYmFuID0gaWJhbi5zbGljZSg0KTsKICB2YXIgdmFsaWRhdGlvblN0cmluZyA9IHJlcGxhY2VDaGFyYXRlcldpdGhDb2RlKCIiLmNvbmNhdChiYmFuKS5jb25jYXQoY291bnRyeUNvZGUsICIwMCIpKTsKICB2YXIgcmVzdCA9IG1vZDk3MTAodmFsaWRhdGlvblN0cmluZyk7CiAgcmV0dXJuIDk4IC0gcmVzdCA9PT0gcHJvdmlkZWRDaGVja3N1bTsKfQpmdW5jdGlvbiByZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShzdHIpIHsKICByZXR1cm4gc3RyLnNwbGl0KCIiKS5tYXAoZnVuY3Rpb24oYzExKSB7CiAgICB2YXIgY29kZTQgPSBjMTEuY2hhckNvZGVBdCgwKTsKICAgIHJldHVybiBjb2RlNCA+PSA2NSA/IChjb2RlNCAtIDU1KS50b1N0cmluZygpIDogYzExOwogIH0pLmpvaW4oIiIpOwp9CmZ1bmN0aW9uIG1vZDk3MTBJYmFuKGliYW4pIHsKICByZXR1cm4gbW9kOTcxMChyZXBsYWNlQ2hhcmF0ZXJXaXRoQ29kZShpYmFuLnNsaWNlKDQpICsgaWJhbi5zbGljZSgwLCA0KSkpOwp9CmZ1bmN0aW9uIGdldENvdW50cnlTcGVjaWZpY2F0aW9ucygpIHsKICB2YXIgY291bnR5TWFwID0ge307CiAgZm9yICh2YXIgY291bnR5Q29kZSBpbiBjb3VudHJ5U3BlY3MpIHsKICAgIHZhciBjb3VudHkgPSBjb3VudHJ5U3BlY3NbY291bnR5Q29kZV07CiAgICBjb3VudHlNYXBbY291bnR5Q29kZV0gPSB7CiAgICAgIGNoYXJzOiBjb3VudHkuY2hhcnMgfHwgbnVsbCwKICAgICAgYmJhbl9yZWdleHA6IGNvdW50eS5iYmFuX3JlZ2V4cCB8fCBudWxsLAogICAgICBJQkFOUmVnaXN0cnk6IGNvdW50eS5JQkFOUmVnaXN0cnkgfHwgZmFsc2UsCiAgICAgIFNFUEE6IGNvdW50eS5TRVBBIHx8IGZhbHNlCiAgICB9OwogIH0KICByZXR1cm4gY291bnR5TWFwOwp9CmZ1bmN0aW9uIGlzVmFsaWRCSUMoYmljKSB7CiAgaWYgKCFiaWMpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgdmFyIHJlZyA9IG5ldyBSZWdFeHAoIl5bYS16QS1aXXs2fVthLXpBLVowLTldezJ9KFthLXpBLVowLTldezN9KT8kIiwgIiIpOwogIHZhciBzcGVjID0gY291bnRyeVNwZWNzW2JpYy50b1VwcGVyQ2FzZSgpLnNsaWNlKDQsIDYpXTsKICByZXR1cm4gcmVnLnRlc3QoYmljKSAmJiBzcGVjICE9PSB2b2lkIDA7Cn0KdmFyIFZhbGlkYXRpb25FcnJvcnNCSUM7CihmdW5jdGlvbihWYWxpZGF0aW9uRXJyb3JzQklDMikgewogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJOb0JJQ1Byb3ZpZGVkIl0gPSAwXSA9ICJOb0JJQ1Byb3ZpZGVkIjsKICBWYWxpZGF0aW9uRXJyb3JzQklDMltWYWxpZGF0aW9uRXJyb3JzQklDMlsiTm9CSUNDb3VudHJ5Il0gPSAxXSA9ICJOb0JJQ0NvdW50cnkiOwogIFZhbGlkYXRpb25FcnJvcnNCSUMyW1ZhbGlkYXRpb25FcnJvcnNCSUMyWyJXcm9uZ0JJQ0Zvcm1hdCJdID0gMl0gPSAiV3JvbmdCSUNGb3JtYXQiOwp9KShWYWxpZGF0aW9uRXJyb3JzQklDIHx8IChWYWxpZGF0aW9uRXJyb3JzQklDID0ge30pKTsKZnVuY3Rpb24gdmFsaWRhdGVCSUMoYmljKSB7CiAgdmFyIHJlc3VsdCA9IHsgZXJyb3JDb2RlczogW10sIHZhbGlkOiB0cnVlIH07CiAgaWYgKGJpYyAhPT0gdm9pZCAwICYmIGJpYyAhPT0gbnVsbCAmJiBiaWMgIT09ICIiKSB7CiAgICB2YXIgc3BlYyA9IGNvdW50cnlTcGVjc1tiaWMudG9VcHBlckNhc2UoKS5zbGljZSg0LCA2KV07CiAgICBpZiAoc3BlYyA9PT0gdm9pZCAwKSB7CiAgICAgIHJlc3VsdC52YWxpZCA9IGZhbHNlOwogICAgICByZXN1bHQuZXJyb3JDb2Rlcy5wdXNoKFZhbGlkYXRpb25FcnJvcnNCSUMuTm9CSUNDb3VudHJ5KTsKICAgIH0gZWxzZSB7CiAgICAgIHZhciByZWcgPSBuZXcgUmVnRXhwKCJeW2EtekEtWl17Nn1bYS16QS1aMC05XXsyfShbYS16QS1aMC05XXszfSk/JCIsICIiKTsKICAgICAgaWYgKCFyZWcudGVzdChiaWMpKSB7CiAgICAgICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgICAgICAgcmVzdWx0LmVycm9yQ29kZXMucHVzaChWYWxpZGF0aW9uRXJyb3JzQklDLldyb25nQklDRm9ybWF0KTsKICAgICAgfQogICAgfQogIH0gZWxzZSB7CiAgICByZXN1bHQudmFsaWQgPSBmYWxzZTsKICAgIHJlc3VsdC5lcnJvckNvZGVzLnB1c2goVmFsaWRhdGlvbkVycm9yc0JJQy5Ob0JJQ1Byb3ZpZGVkKTsKICB9CiAgcmV0dXJuIHJlc3VsdDsKfQpmdW5jdGlvbiBleHRyYWN0QklDKGlucHV0QmljKSB7CiAgdmFyIHJlc3VsdCA9IHt9OwogIHZhciBiaWMgPSBpbnB1dEJpYy50b1VwcGVyQ2FzZSgpOwogIGlmIChpc1ZhbGlkQklDKGJpYykpIHsKICAgIHJlc3VsdC5iYW5rQ29kZSA9IGJpYy5zbGljZSgwLCA0KTsKICAgIHJlc3VsdC5jb3VudHJ5Q29kZSA9IGJpYy5zbGljZSg0LCA2KTsKICAgIHJlc3VsdC5sb2NhdGlvbkNvZGUgPSBiaWMuc2xpY2UoNiwgOCk7CiAgICByZXN1bHQudGVzdEJJQyA9IHJlc3VsdC5sb2NhdGlvbkNvZGVbMV0gPT09ICIwIiA/IHRydWUgOiBmYWxzZTsKICAgIHJlc3VsdC5icmFuY2hDb2RlID0gYmljLmxlbmd0aCA+IDggPyBiaWMuc2xpY2UoOCkgOiBudWxsOwogICAgcmVzdWx0LnZhbGlkID0gdHJ1ZTsKICB9IGVsc2UgewogICAgcmVzdWx0LnZhbGlkID0gZmFsc2U7CiAgfQogIHJldHVybiByZXN1bHQ7Cn0KdmFyIGNoZWNrTm9yd2F5QkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs1LCA0LCAzLCAyLCA3LCA2LCA1LCA0LCAzLCAyXTsKICB2YXIgYmJhbldpdGhvdXRTcGFjZXNBbmRQZXJpb2RzID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjb250cm9sRGlnaXQgPSBwYXJzZUludChiYmFuV2l0aG91dFNwYWNlc0FuZFBlcmlvZHMuY2hhckF0KDEwKSwgMTApOwogIHZhciBiYmFuV2l0aG91dENvbnRyb2xEaWdpdCA9IGJiYW5XaXRob3V0U3BhY2VzQW5kUGVyaW9kcy5zdWJzdHJpbmcoMCwgMTApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDEwOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KGJiYW5XaXRob3V0Q29udHJvbERpZ2l0LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbERpZ2l0ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IDExIC0gcmVtYWluZGVyKTsKfTsKdmFyIGNoZWNrQmVsZ2lhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciBjaGVja2luZ1BhcnQgPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoMCwgc3RyaXBwZWQubGVuZ3RoIC0gMiksIDEwKTsKICB2YXIgY2hlY2tzdW0gPSBwYXJzZUludChzdHJpcHBlZC5zdWJzdHJpbmcoc3RyaXBwZWQubGVuZ3RoIC0gMiwgc3RyaXBwZWQubGVuZ3RoKSwgMTApOwogIHZhciByZW1haW5kZXIgPSBjaGVja2luZ1BhcnQgJSA5NyA9PT0gMCA/IDk3IDogY2hlY2tpbmdQYXJ0ICUgOTc7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gY2hlY2tzdW07Cn07CnZhciBtb2Q5NzEwID0gZnVuY3Rpb24odmFsaWRhdGlvblN0cmluZykgewogIHdoaWxlICh2YWxpZGF0aW9uU3RyaW5nLmxlbmd0aCA+IDIpIHsKICAgIHZhciBwYXJ0ID0gdmFsaWRhdGlvblN0cmluZy5zbGljZSgwLCA2KTsKICAgIHZhciBwYXJ0SW50ID0gcGFyc2VJbnQocGFydCwgMTApOwogICAgaWYgKGlzTmFOKHBhcnRJbnQpKSB7CiAgICAgIHJldHVybiBOYU47CiAgICB9CiAgICB2YWxpZGF0aW9uU3RyaW5nID0gcGFydEludCAlIDk3ICsgdmFsaWRhdGlvblN0cmluZy5zbGljZShwYXJ0Lmxlbmd0aCk7CiAgfQogIHJldHVybiBwYXJzZUludCh2YWxpZGF0aW9uU3RyaW5nLCAxMCkgJSA5NzsKfTsKdmFyIGNoZWNrTW9kOTcxMEJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHN0cmlwcGVkID0gYmJhbi5yZXBsYWNlKC9bXHMuXSsvZywgIiIpOwogIHZhciByZW1pbmRlciA9IG1vZDk3MTAoc3RyaXBwZWQpOwogIHJldHVybiByZW1pbmRlciA9PT0gMTsKfTsKdmFyIGNoZWNrUG9sYW5kQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFszLCA5LCA3LCAxLCAzLCA5LCA3XTsKICB2YXIgY29udHJvbERpZ2l0ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoNyksIDEwKTsKICB2YXIgdG9DaGVjayA9IGJiYW4uc3Vic3RyaW5nKDAsIDcpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDc7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQodG9DaGVjay5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogIH0KICB2YXIgcmVtYWluZGVyID0gc3VtICUgMTA7CiAgcmV0dXJuIGNvbnRyb2xEaWdpdCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja1NwYWluQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0c0JhbmtCcmFuY2ggPSBbNCwgOCwgNSwgMTAsIDksIDcsIDMsIDZdOwogIHZhciB3ZWlnaHRzQWNjb3VudCA9IFsxLCAyLCA0LCA4LCA1LCAxMCwgOSwgNywgMywgNl07CiAgdmFyIGNvbnRyb2xCYW5rQnJhbmNoID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoOCksIDEwKTsKICB2YXIgY29udHJvbEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCg5KSwgMTApOwogIHZhciBiYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgOCk7CiAgdmFyIGFjY291bnQgPSBiYmFuLnN1YnN0cmluZygxMCwgMjApOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IDg7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYmFua0JyYW5jaC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0JhbmtCcmFuY2hbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sQmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpKSB7CiAgICByZXR1cm4gZmFsc2U7CiAgfQogIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgMTA7IGluZGV4MisrKSB7CiAgICBzdW0gKz0gcGFyc2VJbnQoYWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c0FjY291bnRbaW5kZXgyXTsKICB9CiAgcmVtYWluZGVyID0gc3VtICUgMTE7CiAgcmV0dXJuIGNvbnRyb2xBY2NvdW50ID09PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcik7Cn07CnZhciBjaGVja01vZDExMTAgPSBmdW5jdGlvbih0b0NoZWNrLCBjb250cm9sKSB7CiAgdmFyIG5yID0gMTA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVjay5sZW5ndGg7IGluZGV4MisrKSB7CiAgICBuciArPSBwYXJzZUludCh0b0NoZWNrLmNoYXJBdChpbmRleDIpLCAxMCk7CiAgICBpZiAobnIgJSAxMCAhPT0gMCkgewogICAgICBuciA9IG5yICUgMTA7CiAgICB9CiAgICBuciA9IG5yICogMjsKICAgIG5yID0gbnIgJSAxMTsKICB9CiAgcmV0dXJuIGNvbnRyb2wgPT09ICgxMSAtIG5yID09PSAxMCA/IDAgOiAxMSAtIG5yKTsKfTsKdmFyIGNoZWNrQ3JvYXRpYW5CQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBjb250cm9sQmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDYpLCAxMCk7CiAgdmFyIGNvbnRyb2xBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMTYpLCAxMCk7CiAgdmFyIGJhbmtCcmFuY2ggPSBiYmFuLnN1YnN0cmluZygwLCA2KTsKICB2YXIgYWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDcsIDE2KTsKICByZXR1cm4gY2hlY2tNb2QxMTEwKGJhbmtCcmFuY2gsIGNvbnRyb2xCYW5rQnJhbmNoKSAmJiBjaGVja01vZDExMTAoYWNjb3VudCwgY29udHJvbEFjY291bnQpOwp9Owp2YXIgY2hlY2tDemVjaEFuZFNsb3Zha0JCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHNQcmVmaXggPSBbMTAsIDUsIDgsIDQsIDIsIDFdOwogIHZhciB3ZWlnaHRzU3VmZml4ID0gWzYsIDMsIDcsIDksIDEwLCA1LCA4LCA0LCAyLCAxXTsKICB2YXIgY29udHJvbFByZWZpeCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDkpLCAxMCk7CiAgdmFyIGNvbnRyb2xTdWZmaXggPSBwYXJzZUludChiYmFuLmNoYXJBdCgxOSksIDEwKTsKICB2YXIgcHJlZml4NCA9IGJiYW4uc3Vic3RyaW5nKDQsIDkpOwogIHZhciBzdWZmaXggPSBiYmFuLnN1YnN0cmluZygxMCwgMTkpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHByZWZpeDQubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHByZWZpeDQuY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNQcmVmaXhbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDExOwogIGlmIChjb250cm9sUHJlZml4ICE9PSAocmVtYWluZGVyID09PSAwID8gMCA6IHJlbWFpbmRlciA9PT0gMSA/IDEgOiAxMSAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCBzdWZmaXgubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHN1ZmZpeC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1N1ZmZpeFtpbmRleDJdOwogIH0KICByZW1haW5kZXIgPSBzdW0gJSAxMTsKICByZXR1cm4gY29udHJvbFN1ZmZpeCA9PT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiByZW1haW5kZXIgPT09IDEgPyAxIDogMTEgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tFc3RvbmlhbkJCQU4gPSBmdW5jdGlvbihiYmFuKSB7CiAgdmFyIHdlaWdodHMgPSBbNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgNywgMSwgMywgN107CiAgdmFyIGNvbnRyb2xEaWdpdCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDE1KSwgMTApOwogIHZhciB0b0NoZWNrID0gYmJhbi5zdWJzdHJpbmcoMiwgMTUpOwogIHZhciBzdW0gPSAwOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2subGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2suY2hhckF0KGluZGV4MiksIDEwKSAqIHdlaWdodHNbaW5kZXgyXTsKICB9CiAgdmFyIHJlbWFpbmRlciA9IHN1bSAlIDEwOwogIHJldHVybiBjb250cm9sRGlnaXQgPT09IChyZW1haW5kZXIgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXIpOwp9Owp2YXIgY2hlY2tGcmVuY2hCQkFOID0gZnVuY3Rpb24oYmJhbikgewogIHZhciBzdHJpcHBlZCA9IGJiYW4ucmVwbGFjZSgvW1xzLl0rL2csICIiKTsKICB2YXIgbm9ybWFsaXplZCA9IEFycmF5LmZyb20oc3RyaXBwZWQpOwogIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHN0cmlwcGVkLmxlbmd0aDsgaW5kZXgyKyspIHsKICAgIHZhciBjMTEgPSBub3JtYWxpemVkW2luZGV4Ml0uY2hhckNvZGVBdCgwKTsKICAgIGlmIChjMTEgPj0gNjUpIHsKICAgICAgc3dpdGNoIChjMTEpIHsKICAgICAgICBjYXNlIDY1OgogICAgICAgIGNhc2UgNzQ6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiMSI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY2OgogICAgICAgIGNhc2UgNzU6CiAgICAgICAgY2FzZSA4MzoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICIyIjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNjc6CiAgICAgICAgY2FzZSA3NjoKICAgICAgICBjYXNlIDg0OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjMiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA2ODoKICAgICAgICBjYXNlIDc3OgogICAgICAgIGNhc2UgODU6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNCI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDY5OgogICAgICAgIGNhc2UgNzg6CiAgICAgICAgY2FzZSA4NjoKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI1IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzA6CiAgICAgICAgY2FzZSA3OToKICAgICAgICBjYXNlIDg3OgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjYiOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSA3MToKICAgICAgICBjYXNlIDgwOgogICAgICAgIGNhc2UgODg6CiAgICAgICAgICBub3JtYWxpemVkW2luZGV4Ml0gPSAiNyI7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlIDcyOgogICAgICAgIGNhc2UgODE6CiAgICAgICAgY2FzZSA4OToKICAgICAgICAgIG5vcm1hbGl6ZWRbaW5kZXgyXSA9ICI4IjsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgNzM6CiAgICAgICAgY2FzZSA4MjoKICAgICAgICBjYXNlIDkwOgogICAgICAgICAgbm9ybWFsaXplZFtpbmRleDJdID0gIjkiOwogICAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICB9CiAgdmFyIHJlbWFpbmRlciA9IG1vZDk3MTAobm9ybWFsaXplZC5qb2luKCIiKSk7CiAgcmV0dXJuIHJlbWFpbmRlciA9PT0gMDsKfTsKdmFyIGNoZWNrSHVuZ2FyaWFuQkJBTiA9IGZ1bmN0aW9uKGJiYW4pIHsKICB2YXIgd2VpZ2h0cyA9IFs5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzLCAxLCA5LCA3LCAzXTsKICB2YXIgY29udHJvbERpZ2l0QmFua0JyYW5jaCA9IHBhcnNlSW50KGJiYW4uY2hhckF0KDcpLCAxMCk7CiAgdmFyIHRvQ2hlY2tCYW5rQnJhbmNoID0gYmJhbi5zdWJzdHJpbmcoMCwgNyk7CiAgdmFyIHN1bSA9IDA7CiAgZm9yICh2YXIgaW5kZXgyID0gMDsgaW5kZXgyIDwgdG9DaGVja0JhbmtCcmFuY2gubGVuZ3RoOyBpbmRleDIrKykgewogICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tCYW5rQnJhbmNoLmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgfQogIHZhciByZW1haW5kZXIgPSBzdW0gJSAxMDsKICBpZiAoY29udHJvbERpZ2l0QmFua0JyYW5jaCAhPT0gKHJlbWFpbmRlciA9PT0gMCA/IDAgOiAxMCAtIHJlbWFpbmRlcikpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgc3VtID0gMDsKICBpZiAoYmJhbi5lbmRzV2l0aCgiMDAwMDAwMDAiKSkgewogICAgdmFyIHRvQ2hlY2tBY2NvdW50ID0gYmJhbi5zdWJzdHJpbmcoOCwgMTUpOwogICAgdmFyIGNvbnRyb2xEaWdpdEFjY291bnQgPSBwYXJzZUludChiYmFuLmNoYXJBdCgxNSksIDEwKTsKICAgIGZvciAodmFyIGluZGV4MiA9IDA7IGluZGV4MiA8IHRvQ2hlY2tBY2NvdW50Lmxlbmd0aDsgaW5kZXgyKyspIHsKICAgICAgc3VtICs9IHBhcnNlSW50KHRvQ2hlY2tBY2NvdW50LmNoYXJBdChpbmRleDIpLCAxMCkgKiB3ZWlnaHRzW2luZGV4Ml07CiAgICB9CiAgICB2YXIgcmVtYWluZGVyXzEgPSBzdW0gJSAxMDsKICAgIHJldHVybiBjb250cm9sRGlnaXRBY2NvdW50ID09PSAocmVtYWluZGVyXzEgPT09IDAgPyAwIDogMTAgLSByZW1haW5kZXJfMSk7CiAgfSBlbHNlIHsKICAgIHZhciB0b0NoZWNrQWNjb3VudCA9IGJiYW4uc3Vic3RyaW5nKDgsIDIzKTsKICAgIHZhciBjb250cm9sRGlnaXRBY2NvdW50ID0gcGFyc2VJbnQoYmJhbi5jaGFyQXQoMjMpLCAxMCk7CiAgICBmb3IgKHZhciBpbmRleDIgPSAwOyBpbmRleDIgPCB0b0NoZWNrQWNjb3VudC5sZW5ndGg7IGluZGV4MisrKSB7CiAgICAgIHN1bSArPSBwYXJzZUludCh0b0NoZWNrQWNjb3VudC5jaGFyQXQoaW5kZXgyKSwgMTApICogd2VpZ2h0c1tpbmRleDJdOwogICAgfQogICAgdmFyIHJlbWFpbmRlcl8yID0gc3VtICUgMTA7CiAgICByZXR1cm4gY29udHJvbERpZ2l0QWNjb3VudCA9PT0gKHJlbWFpbmRlcl8yID09PSAwID8gMCA6IDEwIC0gcmVtYWluZGVyXzIpOwogIH0KfTsKdmFyIHNldENvdW50cnlCQkFOVmFsaWRhdGlvbiA9IGZ1bmN0aW9uKGNvdW50cnksIGZ1bmMpIHsKICBpZiAodHlwZW9mIGNvdW50cnlTcGVjc1tjb3VudHJ5XSA9PT0gInVuZGVmaW5lZCIpIHsKICAgIHJldHVybiBmYWxzZTsKICB9CiAgY291bnRyeVNwZWNzW2NvdW50cnldLmJiYW5fdmFsaWRhdGlvbl9mdW5jID0gZnVuYzsKICByZXR1cm4gdHJ1ZTsKfTsKdmFyIGNvdW50cnlTcGVjcyA9IHsKICBBRDogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgQUU6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9WzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjctMjMiCiAgfSwKICBBRjoge30sCiAgQUc6IHt9LAogIEFJOiB7fSwKICBBTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17OH1bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQU06IHt9LAogIEFPOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgQVE6IHt9LAogIEFSOiB7fSwKICBBUzoge30sCiAgQVQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgQVU6IHt9LAogIEFXOiB7fSwKICBBWDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEFaOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI4IgogIH0sCiAgQkE6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgQkI6IHt9LAogIEJEOiB7fSwKICBCRTogewogICAgY2hhcnM6IDE2LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tCZWxnaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjAtMTYiCiAgfSwKICBCRjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgQkc6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17Nn1bQS1aMC05XXs4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBCSDogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bQS1aMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMiIKICB9LAogIEJJOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI3IgogIH0sCiAgQko6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9WzAtOV17MjJ9JCIKICB9LAogIEJMOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiCiAgfSwKICBCTToge30sCiAgQk46IHt9LAogIEJPOiB7fSwKICBCUToge30sCiAgQlI6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfVtBLVpdezF9W0EtWjAtOV17MX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjgtMTIiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC03IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNy0yOSIKICB9LAogIEJTOiB7fSwKICBCVDoge30sCiAgQlY6IHt9LAogIEJXOiB7fSwKICBCWTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgQlo6IHt9LAogIENBOiB7fSwKICBDQzoge30sCiAgQ0Q6IHt9LAogIENGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgQ0c6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBDSDogewogICAgY2hhcnM6IDIxLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17NX1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiCiAgfSwKICBDSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsyM30kIgogIH0sCiAgQ0s6IHt9LAogIENMOiB7fSwKICBDTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIENOOiB7fSwKICBDTzoge30sCiAgQ1I6IHsKICAgIGNoYXJzOiAyMiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIyIgogIH0sCiAgQ1U6IHt9LAogIENWOiB7IGNoYXJzOiAyNSwgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIgfSwKICBDVzoge30sCiAgQ1g6IHt9LAogIENZOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs4fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjMtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEyLTI4IgogIH0sCiAgQ1o6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIKICB9LAogIERFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTIyIgogIH0sCiAgREo6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNS05IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTQtMjciCiAgfSwKICBESzogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRE06IHt9LAogIERPOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI4IgogIH0sCiAgRFo6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiCiAgfSwKICBFQzoge30sCiAgRUU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE2fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRXN0b25pYW5CQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIEVHOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNX0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBFSDoge30sCiAgRVI6IHt9LAogIEVTOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tTcGFpbkJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yNCIKICB9LAogIEVUOiB7fSwKICBGSTogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTAiCiAgfSwKICBGSjoge30sCiAgRks6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezJ9WzAtOV17MTJ9JCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBGTToge30sCiAgRk86IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgRlI6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tGcmVuY2hCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNCIsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjE0LTI0IgogIH0sCiAgR0E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHQjogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsxNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgR0Q6IHt9LAogIEdFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyfVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI2LTIyIgogIH0sCiAgR0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIEdHOiB7fSwKICBHSDoge30sCiAgR0k6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTIzIgogIH0sCiAgR0w6IHsKICAgIGNoYXJzOiAxOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE4IgogIH0sCiAgR006IHt9LAogIEdOOiB7fSwKICBHUDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgR1E6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIzfSQiCiAgfSwKICBHUjogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17N31bQS1aMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTI3IgogIH0sCiAgR1M6IHt9LAogIEdUOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIEdVOiB7fSwKICBHVzogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsxOX0kIgogIH0sCiAgR1k6IHt9LAogIEhLOiB7fSwKICBITToge30sCiAgSE46IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIKICB9LAogIEhSOiB7CiAgICBjaGFyczogMjEsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxN30kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja0Nyb2F0aWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTYiCiAgfSwKICBIVDoge30sCiAgSFU6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezI0fSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrSHVuZ2FyaWFuQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSUQ6IHt9LAogIElFOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBJTDogewogICAgY2hhcnM6IDIzLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIzLTUiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgSU06IHt9LAogIElOOiB7fSwKICBJTzoge30sCiAgSVE6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MTV9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTYiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIElSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMn0kIgogIH0sCiAgSVM6IHsKICAgIGNoYXJzOiAyNiwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiCiAgfSwKICBJVDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17MX1bMC05XXsxMH1bQS1aMC05XXsxMn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTEwIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjEtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yNyIKICB9LAogIEpFOiB7fSwKICBKTToge30sCiAgSk86IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NH1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjQtNyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICI0LTciCiAgfSwKICBKUDoge30sCiAgS0U6IHt9LAogIEtHOiB7fSwKICBLSDoge30sCiAgS0k6IHt9LAogIEtNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIgogIH0sCiAgS046IHt9LAogIEtQOiB7fSwKICBLUjoge30sCiAgS1c6IHsKICAgIGNoYXJzOiAzMCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MjJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjIwLTMwIgogIH0sCiAgS1k6IHt9LAogIEtaOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezEzfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIwIgogIH0sCiAgTEE6IHt9LAogIExCOiB7CiAgICBjaGFyczogMjgsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs0fVtBLVowLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNC0yOCIKICB9LAogIExDOiB7CiAgICBjaGFyczogMzIsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezI0fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTMyIgogIH0sCiAgTEk6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezV9W0EtWjAtOV17MTJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTEs6IHt9LAogIExSOiB7fSwKICBMUzoge30sCiAgTFQ6IHsgY2hhcnM6IDIwLCBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwgSUJBTlJlZ2lzdHJ5OiB0cnVlLCBTRVBBOiB0cnVlLCBiYW5rX2lkZW50aWZpZXI6ICIwLTQiIH0sCiAgTFU6IHsKICAgIGNoYXJzOiAyMCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezN9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgTFY6IHsKICAgIGNoYXJzOiAyMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9W0EtWjAtOV17MTN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTIxIgogIH0sCiAgTFk6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMy01IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTAtMjUiCiAgfSwKICBNQTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjR9JCIKICB9LAogIE1DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrRnJlbmNoQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI1LTkiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC00IgogIH0sCiAgTUQ6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVowLTldezJ9W0EtWjAtOV17MTh9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMjQiCiAgfSwKICBNRTogewogICAgY2hhcnM6IDIyLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTh9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMiIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiNC0yMiIKICB9LAogIE1GOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBNRzogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIE1IOiB7fSwKICBNSzogewogICAgY2hhcnM6IDE5LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17M31bQS1aMC05XXsxMH1bMC05XXsyfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrTW9kOTcxMEJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBNTDogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17Mn1bMC05XXsyMn0kIgogIH0sCiAgTU06IHt9LAogIE1OOiB7CiAgICBjaGFyczogMjAsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yMCIKICB9LAogIE1POiB7fSwKICBNUDoge30sCiAgTVE6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIE1SOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyM30kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjUtOSIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTQiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjciCiAgfSwKICBNUzoge30sCiAgTVQ6IHsKICAgIGNoYXJzOiAzMSwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17NX1bQS1aMC05XXsxOH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI0LTgiLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxNS0zMSIKICB9LAogIE1VOiB7CiAgICBjaGFyczogMzAsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezE5fVtBLVpdezN9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICI2LTciLAogICAgYmFua19pZGVudGlmaWVyOiAiMC01IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIwLTMwIgogIH0sCiAgTVY6IHt9LAogIE1XOiB7fSwKICBNWDoge30sCiAgTVk6IHt9LAogIE1aOiB7CiAgICBjaGFyczogMjUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyMX0kIgogIH0sCiAgTkE6IHt9LAogIE5DOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBORTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgTkY6IHt9LAogIE5HOiB7fSwKICBOSTogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH0kIiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIE5MOiB7CiAgICBjaGFyczogMTgsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVswLTldezEwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0xOCIKICB9LAogIE5POiB7CiAgICBjaGFyczogMTUsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja05vcndheUJCQU4sCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBTRVBBOiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTE1IgogIH0sCiAgTlA6IHt9LAogIE5SOiB7fSwKICBOVToge30sCiAgTlo6IHt9LAogIE9NOiB7CiAgICBjaGFyczogMjMsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXszfVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogZmFsc2UsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTIiCiAgfSwKICBQQToge30sCiAgUEU6IHt9LAogIFBGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBQRzoge30sCiAgUEg6IHt9LAogIFBLOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aMC05XXs0fVswLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIgogIH0sCiAgUEw6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja1BvbGFuZEJCQU4sCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyNH0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIwLTciLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjItMjgiCiAgfSwKICBQTTogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTB9W0EtWjAtOV17MTF9WzAtOV17Mn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZQogIH0sCiAgUE46IHt9LAogIFBSOiB7fSwKICBQUzogewogICAgY2hhcnM6IDI5LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsyMX0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTctMjkiCiAgfSwKICBQVDogewogICAgY2hhcnM6IDI1LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjF9JCIsCiAgICBiYmFuX3ZhbGlkYXRpb25fZnVuYzogY2hlY2tNb2Q5NzEwQkJBTiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIFNFUEE6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTMiCiAgfSwKICBQVzoge30sCiAgUFk6IHt9LAogIFFBOiB7CiAgICBjaGFyczogMjksCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0zIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI5IgogIH0sCiAgUkU6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFJPOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXs0fVtBLVowLTldezE2fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtMyIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMC0yNCIKICB9LAogIFJTOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0yIgogIH0sCiAgUlU6IHsKICAgIGNoYXJzOiAzMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE0fVtBLVowLTldezE1fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiOS0xMyIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTgiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjEzLTMzIgogIH0sCiAgUlc6IHt9LAogIFNBOiB7CiAgICBjaGFyczogMjQsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsyfVtBLVowLTldezE4fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYmFua19pZGVudGlmaWVyOiAiMC0xIiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMi0yNCIKICB9LAogIFNCOiB7fSwKICBTQzogewogICAgY2hhcnM6IDMxLAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17NH1bMC05XXsyMH1bQS1aXXszfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNi03IiwKICAgIGJhbmtfaWRlbnRpZmllcjogIjAtNSIsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTItMjgiCiAgfSwKICBTRDogewogICAgY2hhcnM6IDE4LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTR9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjYtMTgiCiAgfSwKICBTRTogeyBjaGFyczogMjQsIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLCBJQkFOUmVnaXN0cnk6IHRydWUsIFNFUEE6IHRydWUsIGJhbmtfaWRlbnRpZmllcjogIjAtMiIgfSwKICBTRzoge30sCiAgU0g6IHt9LAogIFNJOiB7CiAgICBjaGFyczogMTksCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxNX0kIiwKICAgIGJiYW5fdmFsaWRhdGlvbl9mdW5jOiBjaGVja01vZDk3MTBCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjItNCIsCiAgICBiYW5rX2lkZW50aWZpZXI6ICIwLTEiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjktMTYiCiAgfSwKICBTSjoge30sCiAgU0s6IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgYmJhbl92YWxpZGF0aW9uX2Z1bmM6IGNoZWNrQ3plY2hBbmRTbG92YWtCQkFOLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZQogIH0sCiAgU0w6IHt9LAogIFNNOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bQS1aXXsxfVswLTldezEwfVtBLVowLTldezEyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGJyYW5jaF9pbmRlbnRpZmllcjogIjYtMTAiCiAgfSwKICBTTjogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgU086IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC02IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICIxMS0yMyIKICB9LAogIFNSOiB7fSwKICBTUzoge30sCiAgU1Q6IHsKICAgIGNoYXJzOiAyNSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIxfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiNC03IgogIH0sCiAgU1Y6IHsKICAgIGNoYXJzOiAyOCwKICAgIGJiYW5fcmVnZXhwOiAiXltBLVpdezR9WzAtOV17MjB9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiOC0yOCIKICB9LAogIFNYOiB7fSwKICBTWToge30sCiAgU1o6IHt9LAogIFRDOiB7fSwKICBURDogewogICAgY2hhcnM6IDI3LAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MjN9JCIKICB9LAogIFRGOiB7CiAgICBjaGFyczogMjcsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxMH1bQS1aMC05XXsxMX1bMC05XXsyfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBURzogewogICAgY2hhcnM6IDI4LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWl17Mn1bMC05XXsyMn0kIgogIH0sCiAgVEg6IHt9LAogIFRKOiB7fSwKICBUSzoge30sCiAgVEw6IHsKICAgIGNoYXJzOiAyMywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezE5fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjMiCiAgfSwKICBUTToge30sCiAgVE46IHsKICAgIGNoYXJzOiAyNCwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezIwfSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgYnJhbmNoX2luZGVudGlmaWVyOiAiMi00IiwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI0LTI0IgogIH0sCiAgVE86IHt9LAogIFRSOiB7CiAgICBjaGFyczogMjYsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXs1fVtBLVowLTldezE3fSQiLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlCiAgfSwKICBUVDoge30sCiAgVFY6IHt9LAogIFRXOiB7fSwKICBUWjoge30sCiAgVUE6IHsKICAgIGNoYXJzOiAyOSwKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezZ9W0EtWjAtOV17MTl9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBhY2NvdW50X2luZGVudGlmaWVyOiAiMTUtMjkiCiAgfSwKICBVRzoge30sCiAgVU06IHt9LAogIFVTOiB7fSwKICBVWToge30sCiAgVVo6IHt9LAogIFZBOiB7CiAgICBjaGFyczogMjIsCiAgICBiYmFuX3JlZ2V4cDogIl5bMC05XXsxOH0iLAogICAgSUJBTlJlZ2lzdHJ5OiB0cnVlLAogICAgU0VQQTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI3LTIyIgogIH0sCiAgVkM6IHt9LAogIFZFOiB7fSwKICBWRzogewogICAgY2hhcnM6IDI0LAogICAgYmJhbl9yZWdleHA6ICJeW0EtWjAtOV17NH1bMC05XXsxNn0kIiwKICAgIElCQU5SZWdpc3RyeTogdHJ1ZSwKICAgIGFjY291bnRfaW5kZW50aWZpZXI6ICI4LTI0IgogIH0sCiAgVkk6IHt9LAogIFZOOiB7fSwKICBWVToge30sCiAgV0Y6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFdTOiB7fSwKICBYSzogewogICAgY2hhcnM6IDIwLAogICAgYmJhbl9yZWdleHA6ICJeWzAtOV17MTZ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUsCiAgICBicmFuY2hfaW5kZW50aWZpZXI6ICIyLTMiLAogICAgYWNjb3VudF9pbmRlbnRpZmllcjogIjQtMjAiCiAgfSwKICBZRToge30sCiAgWVQ6IHsKICAgIGNoYXJzOiAyNywKICAgIGJiYW5fcmVnZXhwOiAiXlswLTldezEwfVtBLVowLTldezExfVswLTldezJ9JCIsCiAgICBJQkFOUmVnaXN0cnk6IHRydWUKICB9LAogIFpBOiB7fSwKICBaTToge30sCiAgWlc6IHt9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1pYmFuL2RlZXMtaW5wdXQtaWJhbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzE5ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnBheW1lbnQtZ3JvdXAgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgSUJBTiBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJJbnRlcm5hdGlvbmFsIEJhbmsgQWNjb3VudCBOdW1iZXIgd2l0aCBhdXRvbWF0aWMgZm9ybWF0dGluZyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiQmFuayBBY2NvdW50IElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJFbnRlciB5b3VyIEludGVybmF0aW9uYWwgQmFuayBBY2NvdW50IE51bWJlciJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiVmVyaWZpZWQgSUJBTiJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgSUJBTiBoYXMgYmVlbiB2ZXJpZmllZCJ9CiAgICAgICAgICAudmFsdWU9JHsiREU4OTM3MDQwMDQ0MDUzMjAxMzAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiUGF5bWVudCBJbmZvcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJJQkFOIGlucHV0IHdpdGggaG9yaXpvbnRhbCBsYXlvdXQgZm9yIHBheW1lbnQgZm9ybXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXltZW50LWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IEhvbGRlciJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnZhbHVlPSR7IkpvaG4gRG9lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtaWJhbiAKICAgICAgICAgICAgLmxhYmVsPSR7IklCQU4ifSAKICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0keyJHQjgyV0VTVDEyMzQ1Njk4NzY1NDMyIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlZhbGlkYXRpb24gJiBTdGF0ZXMifSAuc3VidGl0bGU9JHsiUmVxdWlyZWQgZmllbGRzIGFuZCBkaXNhYmxlZCBzdGF0ZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgLmxhYmVsPSR7IlBheW1lbnQgQWNjb3VudCJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlcXVpcmVkIGZvciBwcm9jZXNzaW5nIHBheW1lbnRzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LWliYW4gCiAgICAgICAgICAubGFiZWw9JHsiTG9ja2VkIElCQU4ifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIElCQU4gY2Fubm90IGJlIGNoYW5nZWQifQogICAgICAgICAgLnZhbHVlPSR7IkZSMTQyMDA0MTAxMDA1MDUwMDAxM00wMjYwNiJ9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgID48L2RlZXMtaW5wdXQtaWJhbj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkJhbmsgVHJhbnNmZXIgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIGV4YW1wbGUgd2l0aCBJQkFOIHZhbGlkYXRpb24ifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiUmVjaXBpZW50IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWliYW4gLmxhYmVsPSR7IlJlY2lwaWVudCBJQkFOIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LWliYW4+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJUcmFuc2ZlciBSZWZlcmVuY2UifSAuZGVzY3JpcHRpb249JHsiT3B0aW9uYWwgcmVmZXJlbmNlIGZvciB0aGUgdHJhbnNmZXIifT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkFtb3VudCJ9IC5pbnB1dFR5cGU9JHsibnVtYmVyIn0gLnJlcXVpcmVkPSR7dHJ1ZX0+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWliYW4vZGVlcy1pbnB1dC1pYmFuLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMyOCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0SWJhbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtaWJhbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfZW50ZXJlZFN0cmluZ19kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZFN0cmluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRJYmFuMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VudGVyZWRJYmFuSXNWYWxpZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlMjcodGhpcywgbnVsbCwgX2VudGVyZWRTdHJpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZFN0cmluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZW50ZXJlZFN0cmluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbnRlcmVkU3RyaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkU3RyaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCBfZW50ZXJlZFN0cmluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF9lbnRlcmVkSWJhbklzVmFsaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZW50ZXJlZEliYW5Jc1ZhbGlkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlbnRlcmVkSWJhbklzVmFsaWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZW50ZXJlZEliYW5Jc1ZhbGlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lbnRlcmVkSWJhbklzVmFsaWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZW50ZXJlZEliYW5Jc1ZhbGlkX2luaXRpYWxpemVycywgX2VudGVyZWRJYmFuSXNWYWxpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI3KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRJYmFuMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMxOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2VudGVyZWRTdHJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGVudGVyZWRTdHJpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbnRlcmVkU3RyaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZW50ZXJlZFN0cmluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZFN0cmluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX2VudGVyZWRTdHJpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVudGVyZWRJYmFuSXNWYWxpZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2VudGVyZWRJYmFuSXNWYWxpZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVudGVyZWRJYmFuSXNWYWxpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZW50ZXJlZEliYW5Jc1ZhbGlkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF9lbnRlcmVkSWJhbklzVmFsaWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI4KHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICAuLi5EZWVzSW5wdXRCYXNlLmJhc2VTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgLyogSUJBTiBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbCB8fCAiSUJBTiJ9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0CiAgICAgICAgICAudmFsdWU9JHt0aGlzLnZhbHVlfQogICAgICAgICAgLmRpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RoaXMucmVxdWlyZWR9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiREU4OSAzNzA0IDAwNDQgMDUzMiAwMTMwIDAwIn0KICAgICAgICAgIEBpbnB1dD0keyhldmVudEFyZykgPT4gewogICAgICAgIHRoaXMudmFsaWRhdGVJYmFuKGV2ZW50QXJnKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChkZWVzSW5wdXRUZXh0ICYmIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGRlZXNJbnB1dFRleHQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlSWJhbihldmVudEFyZykgewogICAgICBjb25zdCBpbnB1dEVsZW1lbnQgPSBldmVudEFyZy50YXJnZXQ7CiAgICAgIGxldCBlbnRlcmVkU3RyaW5nID0gaW5wdXRFbGVtZW50Py52YWx1ZTsKICAgICAgZW50ZXJlZFN0cmluZyA9IGVudGVyZWRTdHJpbmcgfHwgIiI7CiAgICAgIGlmICh0aGlzLmVudGVyZWRTdHJpbmcgIT09IGVudGVyZWRTdHJpbmcpIHsKICAgICAgICB0aGlzLmVudGVyZWRTdHJpbmcgPSBmcmllbmRseUZvcm1hdElCQU4oZW50ZXJlZFN0cmluZykgfHwgIiI7CiAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgaW5wdXRFbGVtZW50LnZhbHVlID0gdGhpcy5lbnRlcmVkU3RyaW5nOwogICAgICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuZW50ZXJlZFN0cmluZzsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmVudGVyZWRJYmFuSXNWYWxpZCA9IGlzVmFsaWRJQkFOKHRoaXMuZW50ZXJlZFN0cmluZy5yZXBsYWNlKC8gL2csICIiKSk7CiAgICAgIGNvbnN0IGRlZXNJbnB1dFRleHQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGRlZXNJbnB1dFRleHQudmFsaWRhdGlvblRleHQgPSBgSUJBTiBpcyB2YWxpZDogJHt0aGlzLmVudGVyZWRJYmFuSXNWYWxpZH1gOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIHRoaXMuZW50ZXJlZFN0cmluZyA9IGZyaWVuZGx5Rm9ybWF0SUJBTih2YWx1ZTIpIHx8ICIiOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dEliYW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogNDhweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuc2VjdGlvbi1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5zZXR0aW5ncy1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLnNldHRpbmdzLWdyaWQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk11bHRpLU9wdGlvbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TZWxlY3QgZnJvbSBtdWx0aXBsZSBvcHRpb25zIHdpdGggYSBzbW9vdGggc2xpZGluZyBpbmRpY2F0b3IgYW5pbWF0aW9uLjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiRGlzcGxheSBNb2RlIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJDaG9vc2UgaG93IGNvbnRlbnQgaXMgZGlzcGxheWVkIn0KICAgICAgICAgIC5vcHRpb25zPSR7WyJMaXN0IFZpZXciLCAiR3JpZCBWaWV3IiwgIkNvbXBhY3QiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJHcmlkIFZpZXcifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlQtU2hpcnQgU2l6ZSJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiU2VsZWN0IHlvdXIgcHJlZmVycmVkIHNpemUifQogICAgICAgICAgLm9wdGlvbnM9JHtbIlhTIiwgIlMiLCAiTSIsICJMIiwgIlhMIiwgIlhYTCJdfQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik0ifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Qm9vbGVhbiBUb2dnbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5TaW1wbGUgb24vb2ZmIHN3aXRjaGVzIHdpdGggY3VzdG9taXphYmxlIGxhYmVscyBmb3IgY2xlYXJlciBjb250ZXh0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAubGFiZWw9JHsiTm90aWZpY2F0aW9ucyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRW5hYmxlIG9yIGRpc2FibGUgcHVzaCBub3RpZmljYXRpb25zIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7InRydWUifQogICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgCiAgICAgICAgPGJyPjxicj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgLmxhYmVsPSR7IlRoZW1lIE1vZGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN3aXRjaCBiZXR3ZWVuIGxpZ2h0IGFuZCBkYXJrIHRoZW1lIn0KICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJEYXJrIn0KICAgICAgICAgIC5ib29sZWFuRmFsc2VOYW1lPSR7IkxpZ2h0In0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJEYXJrIn0KICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNldHRpbmdzIEdyaWQ8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Db25maWd1cmF0aW9uIG9wdGlvbnMgYXJyYW5nZWQgaW4gYSByZXNwb25zaXZlIGdyaWQgbGF5b3V0LjwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLWdyaWQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkF1dG8tU2F2ZSJ9CiAgICAgICAgICAgIC50eXBlPSR7ImJvb2xlYW4ifQogICAgICAgICAgICAuYm9vbGVhblRydWVOYW1lPSR7IkVuYWJsZWQifQogICAgICAgICAgICAuYm9vbGVhbkZhbHNlTmFtZT0keyJEaXNhYmxlZCJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbmFibGVkIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJMYW5ndWFnZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbmdsaXNoIiwgIkdlcm1hbiIsICJGcmVuY2giLCAiU3BhbmlzaCJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiRW5nbGlzaCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUXVhbGl0eSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJMb3ciLCAiTWVkaXVtIiwgIkhpZ2giLCAiVWx0cmEiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkhpZ2gifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IlByaXZhY3kifQogICAgICAgICAgICAudHlwZT0keyJib29sZWFuIn0KICAgICAgICAgICAgLmJvb2xlYW5UcnVlTmFtZT0keyJQcml2YXRlIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IlByaXZhdGUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TdGF0ZXMgJiBGb3JtIEludGVncmF0aW9uPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+RXhhbXBsZXMgb2YgZGlzYWJsZWQgc3RhdGVzIGFuZCBpbnRlZ3JhdGlvbiB3aXRoaW4gZm9ybXMuPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgIC5sYWJlbD0keyJBY2NvdW50IFR5cGUifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoaXMgc2V0dGluZyBpcyBsb2NrZWQifQogICAgICAgICAgLm9wdGlvbnM9JHtbIkZyZWUiLCAiUHJvIiwgIkVudGVycHJpc2UiXX0KICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJFbnRlcnByaXNlIn0KICAgICAgICAgIC5kaXNhYmxlZD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZT4KICAgICAgICAKICAgICAgICA8YnI+PGJyPgogICAgICAgIAogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IC5sYWJlbD0keyJQcm9qZWN0IE5hbWUifSAucmVxdWlyZWQ9JHt0cnVlfT48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJWaXNpYmlsaXR5In0KICAgICAgICAgICAgLnR5cGU9JHsiYm9vbGVhbiJ9CiAgICAgICAgICAgIC5ib29sZWFuVHJ1ZU5hbWU9JHsiUHVibGljIn0KICAgICAgICAgICAgLmJvb2xlYW5GYWxzZU5hbWU9JHsiUHJpdmF0ZSJ9CiAgICAgICAgICAgIC5zZWxlY3RlZE9wdGlvbj0keyJQcml2YXRlIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiTGljZW5zZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJNSVQiLCAiQXBhY2hlIDIuMCIsICJHUEwgdjMiLCAiUHJvcHJpZXRhcnkiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7Ik1JVCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlPgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LW11bHRpdG9nZ2xlL2RlZXMtaW5wdXQtbXVsdGl0b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMjggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczI5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRNdWx0aXRvZ2dsZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtbXVsdGl0b2dnbGUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sZWFuVHJ1ZU5hbWVfZGVjb3JhdG9yczsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5UcnVlTmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9kZWNvcmF0b3JzOwogIGxldCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jvb2xlYW5GYWxzZU5hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX29wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRPcHRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm9vbFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib29sVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdHlwZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfYm9vbGVhblRydWVOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sZWFuRmFsc2VOYW1lX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9vcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkT3B0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9ib29sVmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5UcnVlTmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib29sZWFuVHJ1ZU5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvb2xlYW5UcnVlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuVHJ1ZU5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvb2xlYW5UcnVlTmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib29sZWFuVHJ1ZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjgodGhpcywgbnVsbCwgX2Jvb2xlYW5GYWxzZU5hbWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbGVhbkZhbHNlTmFtZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm9vbGVhbkZhbHNlTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ib29sZWFuRmFsc2VOYW1lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sZWFuRmFsc2VOYW1lID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jvb2xlYW5GYWxzZU5hbWVfaW5pdGlhbGl6ZXJzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9vcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcHRpb25zX2luaXRpYWxpemVycywgX29wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRPcHRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRPcHRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkT3B0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkT3B0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZE9wdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZE9wdGlvbl9pbml0aWFsaXplcnMsIF9zZWxlY3RlZE9wdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KHRoaXMsIG51bGwsIF9ib29sVmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYm9vbFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib29sVmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm9vbFZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ib29sVmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm9vbFZhbHVlX2luaXRpYWxpemVycywgX2Jvb2xWYWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0lucHV0TXVsdGl0b2dnbGUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMDsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAibXVsdGkiKTsKICAgIGdldCB0eXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHR5cGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2luaXRpYWxpemVycywgInRydWUiKSk7CiAgICBnZXQgYm9vbGVhblRydWVOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhblRydWVOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm9vbGVhblRydWVOYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNib29sZWFuVHJ1ZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib29sZWFuRmFsc2VOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhblRydWVOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9pbml0aWFsaXplcnMsICJmYWxzZSIpKTsKICAgIGdldCBib29sZWFuRmFsc2VOYW1lKCkgewogICAgICByZXR1cm4gdGhpcy4jYm9vbGVhbkZhbHNlTmFtZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xlYW5GYWxzZU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jvb2xlYW5GYWxzZU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbGVhbkZhbHNlTmFtZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX29wdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG9wdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcHRpb25zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3B0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfb3B0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMjkodGhpcywgX3NlbGVjdGVkT3B0aW9uX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBzZWxlY3RlZE9wdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRPcHRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkT3B0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfc2VsZWN0ZWRPcHRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczI5KHRoaXMsIF9ib29sVmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJvb2xWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jvb2xWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJvb2xWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm9vbFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBBZGQgdmFsdWUgcHJvcGVydHkgZm9yIGZvcm0gY29tcGF0aWJpbGl0eQogICAgZ2V0IHZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXQgdmFsdWUodmFsKSB7CiAgICAgIGlmICh0aGlzLnR5cGUgPT09ICJib29sZWFuIiAmJiB0eXBlb2YgdmFsID09PSAiYm9vbGVhbiIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsID8gdGhpcy5ib29sZWFuVHJ1ZU5hbWUgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWU7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHZhbDsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgaWYgKHRoaXMuaGFzVXBkYXRlZCkgewogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rpb25zIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAub3B0aW9uIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMnMgZWFzZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAub3B0aW9uOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2U0ZTRlNyIpfTsKICAgICAgfQoKICAgICAgLm9wdGlvbi5zZWxlY3RlZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KCiAgICAgIC5pbmRpY2F0b3IgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gOHB4KTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjE1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CiAgICAgIAogICAgICAuaW5kaWNhdG9yLm5vLXRyYW5zaXRpb24gewogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5zZWxlY3Rpb25zIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLm9wdGlvbiB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmluZGljYXRvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTEzLCAxMTMsIDEyMiwgMC4xNSkiLCAicmdiYSgxMTMsIDExMywgMTIyLCAwLjE1KSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAuZGVzY3JpcHRpb249JHt0aGlzLmRlc2NyaXB0aW9ufT48L2RlZXMtbGFiZWw+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGljYXRvciI+PC9kaXY+CiAgICAgICAgICAke3RoaXMub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYDxkaXYgY2xhc3M9Im9wdGlvbiAke29wdGlvbjIgPT09IHRoaXMuc2VsZWN0ZWRPcHRpb24gPyAic2VsZWN0ZWQiIDogIiJ9IiBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZVNlbGVjdGlvbihvcHRpb24yKX0+CiAgICAgICAgICAgICAgICAke29wdGlvbjJ9CiAgICAgICAgICAgICAgPC9kaXY+IGApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIgJiYgdGhpcy5vcHRpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHRoaXMub3B0aW9ucyA9IFt0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIsIHRoaXMuYm9vbGVhbkZhbHNlTmFtZSB8fCAiZmFsc2UiXTsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRPcHRpb24pIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkT3B0aW9uICYmIHRoaXMub3B0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IHRoaXMub3B0aW9uc1swXTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iKSB7CiAgICAgICAgdGhpcy5vcHRpb25zID0gW3RoaXMuYm9vbGVhblRydWVOYW1lIHx8ICJ0cnVlIiwgdGhpcy5ib29sZWFuRmFsc2VOYW1lIHx8ICJmYWxzZSJdOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmIChkb2N1bWVudC5mb250cykgewogICAgICAgIGF3YWl0IGRvY3VtZW50LmZvbnRzLnJlYWR5OwogICAgICB9CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVTZWxlY3Rpb24ob3B0aW9uQXJnKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5zZWxlY3RlZE9wdGlvbiA9IG9wdGlvbkFyZzsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnNldEluZGljYXRvcigpOwogICAgfQogICAgaW5kaWNhdG9ySW5pdGlhbGl6ZWQgPSAoX19ydW5Jbml0aWFsaXplcnMyOSh0aGlzLCBfYm9vbFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgZmFsc2UpOwogICAgYXN5bmMgc2V0SW5kaWNhdG9yKCkgewogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmluZGljYXRvciIpOwogICAgICBjb25zdCBzZWxlY3RlZEluZGV4ID0gdGhpcy5vcHRpb25zLmluZGV4T2YodGhpcy5zZWxlY3RlZE9wdGlvbik7CiAgICAgIGlmIChzZWxlY3RlZEluZGV4ID09PSAtMSB8fCAhaW5kaWNhdG9yKSB7CiAgICAgICAgaWYgKGluZGljYXRvcikgewogICAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBvcHRpb24yID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYC5vcHRpb246bnRoLWNoaWxkKCR7c2VsZWN0ZWRJbmRleCArIDJ9KWApOwogICAgICBpZiAoaW5kaWNhdG9yICYmIG9wdGlvbjIpIHsKICAgICAgICBpZiAoIXRoaXMuaW5kaWNhdG9ySW5pdGlhbGl6ZWQpIHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QuYWRkKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpbmRpY2F0b3IuY2xhc3NMaXN0LnJlbW92ZSgibm8tdHJhbnNpdGlvbiIpOwogICAgICAgICAgfSwgNTApOwogICAgICAgIH0KICAgICAgICBpbmRpY2F0b3Iuc3R5bGUud2lkdGggPSBgJHtvcHRpb24yLmNsaWVudFdpZHRofXB4YDsKICAgICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke29wdGlvbjIub2Zmc2V0TGVmdH1weGA7CiAgICAgICAgaW5kaWNhdG9yLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0KICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICBpZiAodGhpcy50eXBlID09PSAiYm9vbGVhbiIpIHsKICAgICAgICByZXR1cm4gdGhpcy5zZWxlY3RlZE9wdGlvbiA9PT0gdGhpcy5ib29sZWFuVHJ1ZU5hbWU7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRPcHRpb247CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgaWYgKHRoaXMudHlwZSA9PT0gImJvb2xlYW4iICYmIHR5cGVvZiB2YWx1ZTIgPT09ICJib29sZWFuIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRPcHRpb24gPSB2YWx1ZTIgPyB0aGlzLmJvb2xlYW5UcnVlTmFtZSB8fCAidHJ1ZSIgOiB0aGlzLmJvb2xlYW5GYWxzZU5hbWUgfHwgImZhbHNlIjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkT3B0aW9uID0gdmFsdWUyOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICBpZiAodGhpcy5oYXNVcGRhdGVkKSB7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIHRoaXMuc2V0SW5kaWNhdG9yKCk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMjkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dE11bHRpdG9nZ2xlMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjEgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBQaG9uZSBJbnB1dCJ9IC5zdWJ0aXRsZT0keyJBdXRvbWF0aWMgZm9ybWF0dGluZyBmb3IgcGhvbmUgbnVtYmVycyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IAogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkVudGVyIHlvdXIgcGhvbmUgbnVtYmVyIHdpdGggY291bnRyeSBjb2RlIn0KICAgICAgICAgIC52YWx1ZT0keyI1NTUxMjM0NTY3In0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgLmxhYmVsPSR7IkNvbnRhY3QgUGhvbmUifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJSZXF1aXJlZCBmb3IgYWNjb3VudCB2ZXJpZmljYXRpb24ifQogICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyIrMSAoNTU1KSAwMDAtMDAwMCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7Ikhvcml6b250YWwgTGF5b3V0In0gLnN1YnRpdGxlPSR7IlBob25lIGlucHV0cyBhcnJhbmdlZCBob3Jpem9udGFsbHkifT4KICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXBob25lIAogICAgICAgICAgICAubGFiZWw9JHsiTW9iaWxlIn0gCiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHsiNDE1NTU1MTIzNCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgICAgLmxhYmVsPSR7Ik9mZmljZSJ9IAogICAgICAgICAgICAubGF5b3V0TW9kZT0keyJob3Jpem9udGFsIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IisxICg4MDApIDU1NS0wMDAwIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJJbnRlcm5hdGlvbmFsIE51bWJlcnMifSAuc3VidGl0bGU9JHsiU3VwcG9ydHMgZm9ybWF0dGluZyBmb3IgbnVtYmVycyB3aXRoIGNvdW50cnkgY29kZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSAKICAgICAgICAgIC5sYWJlbD0keyJJbnRlcm5hdGlvbmFsIENvbnRhY3QifSAKICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBdXRvbWF0aWNhbGx5IGZvcm1hdHMgaW50ZXJuYXRpb25hbCBudW1iZXJzIn0KICAgICAgICAgIC52YWx1ZT0keyI0NDEyMzQ1Njc4OTAifQogICAgICAgID48L2RlZXMtaW5wdXQtcGhvbmU+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgCiAgICAgICAgICAubGFiZWw9JHsiRW1lcmdlbmN5IENvbnRhY3QifSAKICAgICAgICAgIC52YWx1ZT0keyI5MTEifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXBob25lPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJQaG9uZSBpbnB1dCBhcyBwYXJ0IG9mIGEgY29udGFjdCBmb3JtIn0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkZ1bGwgTmFtZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtcGhvbmUgLmxhYmVsPSR7IlBob25lIE51bWJlciJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgLmxhYmVsPSR7IkVtYWlsIn0gLmlucHV0VHlwZT0keyJlbWFpbCJ9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1waG9uZS9kZWVzLWlucHV0LXBob25lLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTI5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzMCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0UGhvbmUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXBob25lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9kZWNvcmF0b3JzOwogIGxldCBfZm9ybWF0dGVkUGhvbmVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFBob25lMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2Zvcm1hdHRlZFBob25lX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGUyOSh0aGlzLCBudWxsLCBfZm9ybWF0dGVkUGhvbmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZm9ybWF0dGVkUGhvbmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZvcm1hdHRlZFBob25lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZvcm1hdHRlZFBob25lLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5mb3JtYXR0ZWRQaG9uZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsIF9mb3JtYXR0ZWRQaG9uZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTI5KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMjkodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUyOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMyMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI2Zvcm1hdHRlZFBob25lX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9mb3JtYXR0ZWRQaG9uZV9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZm9ybWF0dGVkUGhvbmUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZvcm1hdHRlZFBob25lKHZhbHVlMikgewogICAgICB0aGlzLiNmb3JtYXR0ZWRQaG9uZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfZm9ybWF0dGVkUGhvbmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMCh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMwKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICIrMSAoNTU1KSAxMjMtNDU2NyIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAvKiBQaG9uZSBpbnB1dCBzcGVjaWZpYyBzdHlsZXMgY2FuIGdvIGhlcmUgKi8KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0+PC9kZWVzLWxhYmVsPgogICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZm9ybWF0dGVkUGhvbmV9CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0ke3RoaXMucGxhY2Vob2xkZXJ9CiAgICAgICAgICBAaW5wdXQ9JHsoZXZlbnQpID0+IHRoaXMuaGFuZGxlUGhvbmVJbnB1dChldmVudCl9CiAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy52YWx1ZSkgewogICAgICAgIHRoaXMuZm9ybWF0dGVkUGhvbmUgPSB0aGlzLmZvcm1hdFBob25lTnVtYmVyKHRoaXMudmFsdWUpOwogICAgICB9CiAgICAgIGNvbnN0IGlubmVySW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1pbnB1dC10ZXh0Iik7CiAgICAgIGlmIChpbm5lcklucHV0ICYmIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdCkgewogICAgICAgIGlubmVySW5wdXQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVBob25lSW5wdXQoZXZlbnQpIHsKICAgICAgY29uc3QgaW5wdXQgPSBldmVudC50YXJnZXQ7CiAgICAgIGNvbnN0IGNsZWFuZWRWYWx1ZSA9IHRoaXMuY2xlYW5QaG9uZU51bWJlcihpbnB1dC52YWx1ZSk7CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0UGhvbmVOdW1iZXIoY2xlYW5lZFZhbHVlKTsKICAgICAgaWYgKGlucHV0LnZhbHVlICE9PSBmb3JtYXR0ZWQpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3NpdGlvbiA9IGlucHV0LnNlbGVjdGlvblN0YXJ0IHx8IDA7CiAgICAgICAgaW5wdXQudmFsdWUgPSBmb3JtYXR0ZWQ7CiAgICAgICAgY29uc3QgbmV3Q3Vyc29yUG9zID0gdGhpcy5jYWxjdWxhdGVDdXJzb3JQb3NpdGlvbihjbGVhbmVkVmFsdWUsIGZvcm1hdHRlZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICAgIGlucHV0LnNldFNlbGVjdGlvblJhbmdlKG5ld0N1cnNvclBvcywgbmV3Q3Vyc29yUG9zKTsKICAgICAgfQogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gZm9ybWF0dGVkOwogICAgICB0aGlzLnZhbHVlID0gY2xlYW5lZFZhbHVlOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIHJldHVybiB2YWx1ZTIucmVwbGFjZSgvXEQvZywgIiIpOwogICAgfQogICAgZm9ybWF0UGhvbmVOdW1iZXIodmFsdWUyKSB7CiAgICAgIGNvbnN0IGNsZWFuZWQgPSB0aGlzLmNsZWFuUGhvbmVOdW1iZXIodmFsdWUyKTsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoID09PSAwKQogICAgICAgIHJldHVybiAiIjsKICAgICAgaWYgKGNsZWFuZWQubGVuZ3RoIDw9IDMpCiAgICAgICAgcmV0dXJuIGNsZWFuZWQ7CiAgICAgIGlmIChjbGVhbmVkLmxlbmd0aCA8PSA2KQogICAgICAgIHJldHVybiBgKCR7Y2xlYW5lZC5zbGljZSgwLCAzKX0pICR7Y2xlYW5lZC5zbGljZSgzKX1gOwogICAgICBpZiAoY2xlYW5lZC5sZW5ndGggPD0gMTApCiAgICAgICAgcmV0dXJuIGAoJHtjbGVhbmVkLnNsaWNlKDAsIDMpfSkgJHtjbGVhbmVkLnNsaWNlKDMsIDYpfS0ke2NsZWFuZWQuc2xpY2UoNil9YDsKICAgICAgcmV0dXJuIGArJHtjbGVhbmVkLnNsaWNlKDAsIGNsZWFuZWQubGVuZ3RoIC0gMTApfSAoJHtjbGVhbmVkLnNsaWNlKC0xMCwgLTcpfSkgJHtjbGVhbmVkLnNsaWNlKC03LCAtNCl9LSR7Y2xlYW5lZC5zbGljZSgtNCl9YDsKICAgIH0KICAgIGNhbGN1bGF0ZUN1cnNvclBvc2l0aW9uKGNsZWFuZWQsIGZvcm1hdHRlZCwgb2xkUG9zKSB7CiAgICAgIGxldCBmb3JtYXR0aW5nQ2hhcnMgPSAwOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBvbGRQb3MgJiYgaTExIDwgZm9ybWF0dGVkLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoIS9cZC8udGVzdChmb3JtYXR0ZWRbaTExXSkpIHsKICAgICAgICAgIGZvcm1hdHRpbmdDaGFycysrOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gTWF0aC5taW4ob2xkUG9zICsgZm9ybWF0dGluZ0NoYXJzLCBmb3JtYXR0ZWQubGVuZ3RoKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgICB0aGlzLmZvcm1hdHRlZFBob25lID0gdGhpcy5mb3JtYXRQaG9uZU51bWJlcih2YWx1ZTIpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFBob25lMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMiA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgdG9nZ2xlQWxsT25CdG4gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiN0b2dnbGUtYWxsLW9uIik7CiAgY29uc3QgdG9nZ2xlQWxsT2ZmQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjdG9nZ2xlLWFsbC1vZmYiKTsKICBjb25zdCBmZWF0dXJlVG9nZ2xlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiLmZlYXR1cmUtdG9nZ2xlcyBkZWVzLWlucHV0LXRvZ2dsZSIpOwogIGlmICh0b2dnbGVBbGxPbkJ0biAmJiB0b2dnbGVBbGxPZmZCdG4pIHsKICAgIHRvZ2dsZUFsbE9uQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBmZWF0dXJlVG9nZ2xlcy5mb3JFYWNoKCh0b2dnbGUpID0+IHsKICAgICAgICBpZiAoIXRvZ2dsZS5kaXNhYmxlZCAmJiAhdG9nZ2xlLnJlcXVpcmVkKSB7CiAgICAgICAgICB0b2dnbGUudmFsdWUgPSB0cnVlOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9KTsKICAgIHRvZ2dsZUFsbE9mZkJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgZmVhdHVyZVRvZ2dsZXMuZm9yRWFjaCgodG9nZ2xlKSA9PiB7CiAgICAgICAgaWYgKCF0b2dnbGUuZGlzYWJsZWQgJiYgIXRvZ2dsZS5yZXF1aXJlZCkgewogICAgICAgICAgdG9nZ2xlLnZhbHVlID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogIH0KfX0+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWwgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICB9CgogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KCiAgICAgICAgLnRvZ2dsZS1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5ob3Jpem9udGFsLXRvZ2dsZXMgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGdhcDogMzJweDsKICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICB9CgogICAgICAgIC5pbnRlcmFjdGl2ZS1zZWN0aW9uIHsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICB9CgogICAgICAgIC5vdXRwdXQtdGV4dCB7CiAgICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjEwIDQwJSA4MCUpIil9OwogICAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk4JSkiLCAiaHNsKDIxNSAyMC4yJSAxMS44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAyNHB4OwogICAgICAgIH0KCiAgICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAyMHB4OwogICAgICAgIH0KCiAgICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLmZlYXR1cmUtdG9nZ2xlcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTEuOCUpIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIH0KCiAgICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICB9CgogICAgICAgIC5kcmFnLWhpbnQgewogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiQmFzaWMgVG9nZ2xlIn0gLnN1YnRpdGxlPSR7IlNpbXBsZSBvbi9vZmYgdG9nZ2xlIHN3aXRjaCB3aXRoIGRyYWcgc3VwcG9ydCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkVuYWJsZSBmZWF0dXJlIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5rZXk9JHsiYmFzaWMifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJBY3RpdmUgdG9nZ2xlIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJhY3RpdmUifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJXaXRoIGRlc2NyaXB0aW9uIn0KICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGlzIHRvZ2dsZSBoYXMgYWRkaXRpb25hbCBoZWxwZXIgdGV4dCBleHBsYWluaW5nIGl0cyBwdXJwb3NlIn0KICAgICAgICAgICAgLmtleT0keyJ3aXRoRGVzYyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgICA8cCBjbGFzcz0iZHJhZy1oaW50Ij5UaXA6IFlvdSBjYW4gZHJhZyB0aGUgdG9nZ2xlIGtub2IgdG8gc3dpdGNoIHN0YXRlczwvcD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlRvZ2dsZSBTdGF0ZXMifSAuc3VidGl0bGU9JHsiRGlmZmVyZW50IHRvZ2dsZSBzdGF0ZXMgYW5kIGNvbmZpZ3VyYXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0idG9nZ2xlLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRGVmYXVsdCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJFbmFibGVkIChvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob2ZmKSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJEaXNhYmxlZCAob24pIn0KICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiUmVxdWlyZWQgKGFsd2F5cyBvbikifQogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiVGhpcyB0b2dnbGUgY2Fubm90IGJlIHR1cm5lZCBvZmYifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJIb3Jpem9udGFsIExheW91dCJ9IC5zdWJ0aXRsZT0keyJUb2dnbGVzIGFycmFuZ2VkIGhvcml6b250YWxseSBmb3IgY29tcGFjdCBpbnRlcmZhY2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaG9yaXpvbnRhbC10b2dnbGVzIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiV2lGaSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJCbHVldG9vdGgifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkdQUyJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJORkMifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNldHRpbmdzIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlcyBpbiBhIHR5cGljYWwgc2V0dGluZ3MgY29udGV4dCJ9PgogICAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgICAgPGg0IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2g0PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJQdXNoIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlJlY2VpdmUgcHVzaCBub3RpZmljYXRpb25zIG9uIHlvdXIgZGV2aWNlIn0KICAgICAgICAgICAgICAua2V5PSR7InB1c2gifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBub3RpZmljYXRpb25zIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJHZXQgaW1wb3J0YW50IHVwZGF0ZXMgdmlhIGVtYWlsIn0KICAgICAgICAgICAgICAua2V5PSR7ImVtYWlsIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiU291bmQifQogICAgICAgICAgICAgIC52YWx1ZT0ke2ZhbHNlfQogICAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJQbGF5IGEgc291bmQgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsic291bmQifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJWaWJyYXRpb24ifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlZpYnJhdGUgZm9yIG5vdGlmaWNhdGlvbnMifQogICAgICAgICAgICAgIC5rZXk9JHsidmlicmF0aW9uIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkZlYXR1cmUgVG9nZ2xlcyJ9IC5zdWJ0aXRsZT0keyJCYXRjaCBvcGVyYXRpb25zIG9uIG11bHRpcGxlIHRvZ2dsZXMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9uIiB0eXBlPSJzZWNvbmRhcnkiPkVuYWJsZSBBbGw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIGlkPSJ0b2dnbGUtYWxsLW9mZiIgdHlwZT0ic2Vjb25kYXJ5Ij5EaXNhYmxlIEFsbDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtdG9nZ2xlcyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2dnbGUtZ3JvdXAiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiRGFyayBNb2RlIn0KICAgICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgICAgIC5rZXk9JHsiZGFya01vZGUifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJBdXRvLXNhdmUifQogICAgICAgICAgICAgIC52YWx1ZT0ke3RydWV9CiAgICAgICAgICAgICAgLmtleT0keyJhdXRvU2F2ZSJ9CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgICAgPGRlZXMtaW5wdXQtdG9nZ2xlCiAgICAgICAgICAgICAgLmxhYmVsPSR7IlNwZWxsIGNoZWNrIn0KICAgICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgICAua2V5PSR7InNwZWxsQ2hlY2sifQogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXRvZ2dsZT4KCiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAgIC5sYWJlbD0keyJEZXZlbG9wZXIgbW9kZSJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJkZXZNb2RlIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgICAubGFiZWw9JHsiQmV0YSBmZWF0dXJlcyJ9CiAgICAgICAgICAgICAgLnZhbHVlPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLmtleT0keyJiZXRhIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10b2dnbGU+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IkludGVyYWN0aXZlIEV4YW1wbGUifSAuc3VidGl0bGU9JHsiVG9nZ2xlIHRvIHNlZSB2YWx1ZSBjaGFuZ2VzIGluIHJlYWwtdGltZSJ9PgogICAgICAgIDxkaXYgY2xhc3M9InRvZ2dsZS1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10b2dnbGUKICAgICAgICAgICAgLmxhYmVsPSR7IkFpcnBsYW5lIG1vZGUifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2FpcnBsYW5lLW91dHB1dCIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBBaXJwbGFuZSBtb2RlOiAke2V2ZW50LmRldGFpbCA/ICJPTiIgOiAiT0ZGIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgoKICAgICAgICAgIDxkZWVzLWlucHV0LXRvZ2dsZQogICAgICAgICAgICAubGFiZWw9JHsiRG8gbm90IGRpc3R1cmIifQogICAgICAgICAgICAudmFsdWU9JHtmYWxzZX0KICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGV2ZW50KSA9PiB7CiAgY29uc3Qgb3V0cHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI2RuZC1vdXRwdXQiKTsKICBpZiAob3V0cHV0KSB7CiAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgRG8gbm90IGRpc3R1cmI6ICR7ZXZlbnQuZGV0YWlsID8gIkVOQUJMRUQiIDogIkRJU0FCTEVEIn1gOwogIH0KfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdG9nZ2xlPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbnRlcmFjdGl2ZS1zZWN0aW9uIj4KICAgICAgICAgIDxkaXYgaWQ9ImFpcnBsYW5lLW91dHB1dCIgY2xhc3M9Im91dHB1dC10ZXh0Ij5BaXJwbGFuZSBtb2RlOiBPRkY8L2Rpdj4KICAgICAgICAgIDxkaXYgaWQ9ImRuZC1vdXRwdXQiIGNsYXNzPSJvdXRwdXQtdGV4dCIgc3R5bGU9Im1hcmdpbi10b3A6IDhweDsiPkRvIG5vdCBkaXN0dXJiOiBESVNBQkxFRDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC10b2dnbGUvZGVlcy1pbnB1dC10b2dnbGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzAgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMxID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUb2dnbGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWlucHV0LXRvZ2dsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0VG9nZ2xlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3ZhbHVlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFRvZ2dsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBmYWxzZSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8qKgogICAgICogS25vYiBwb3NpdGlvbiB0cmFja2luZyAoMCA9IG9mZiwgbWF4VHJhdmVsID0gb24pCiAgICAgKi8KICAgIGN1cnJlbnRYID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzEodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgMCk7CiAgICAvKioKICAgICAqIERyYWcgc3RhdGUKICAgICAqLwogICAgaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgaGFzRHJhZ2dlZCA9IGZhbHNlOwogICAgc3RhcnRYID0gMDsKICAgIC8vIFRvZ2dsZSBkaW1lbnNpb25zCiAgICB0cmFja1dpZHRoID0gMzY7CiAgICB0cmFja0hlaWdodCA9IDIwOwogICAga25vYlNpemUgPSAxNDsKICAgIHBhZGRpbmcgPSAyOwogICAgbWF4VHJhdmVsID0gMTY7CiAgICAvLyB0cmFja1dpZHRoIC0ga25vYlNpemUgLSAocGFkZGluZyAqIDIpIC0gYm9yZGVyCiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgdGhpcy5sYWJlbFBvc2l0aW9uID0gInJpZ2h0IjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgICogewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtdHJhY2sgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBtYXJnaW4tdG9wOiAxcHg7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KFt2YWx1ZV0pIC50b2dnbGUtdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrOmZvY3VzLXZpc2libGUgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC50b2dnbGUta25vYiB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMnB4OwogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA3cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogbGVmdCAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgdG91Y2gtYWN0aW9uOiBub25lOwogICAgICB9CgogICAgICAudG9nZ2xlLWtub2IuZHJhZ2dpbmcgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW3ZhbHVlXSkgLnRvZ2dsZS1rbm9iIHsKICAgICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLm1haW5jb250YWluZXIuZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudG9nZ2xlLXRyYWNrLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAvKiBSZXF1aXJlZCBzdGF0ZSAobG9ja2VkIG9uKSAqLwogICAgICA6aG9zdChbcmVxdWlyZWRdW3ZhbHVlXSkgLnRvZ2dsZS10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA2MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDQ5LjglKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNjEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA0OS44JSkiKX07CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgOmhvc3QoW3JlcXVpcmVkXVt2YWx1ZV0pIC50b2dnbGUta25vYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLyogTGFiZWwgKi8KICAgICAgLmxhYmVsLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b2dnbGUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyLmRpc2FibGVkOmhvdmVyIC50b2dnbGUtbGFiZWwgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiAqLwogICAgICAuZGVzY3JpcHRpb24tdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIgJHt0aGlzLmRpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIgQGNsaWNrPSIke3RoaXMuaGFuZGxlQ2xpY2t9Ij4KICAgICAgICAgIDxkaXYKICAgICAgICAgICAgY2xhc3M9InRvZ2dsZS10cmFjayAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICB0YWJpbmRleD0iJHt0aGlzLmRpc2FibGVkID8gIi0xIiA6ICIwIn0iCiAgICAgICAgICAgIEBrZXlkb3duPSIke3RoaXMuaGFuZGxlS2V5ZG93bn0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0idG9nZ2xlLWtub2IiCiAgICAgICAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wYWRkaW5nICsgdGhpcy5jdXJyZW50WH1weDsiCiAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSIke3RoaXMub25Qb2ludGVyRG93bn0iCiAgICAgICAgICAgICAgQHBvaW50ZXJtb3ZlPSIke3RoaXMub25Qb2ludGVyTW92ZX0iCiAgICAgICAgICAgICAgQHBvaW50ZXJ1cD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgICBAcG9pbnRlcmNhbmNlbD0iJHt0aGlzLm9uUG9pbnRlclVwfSIKICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbC1jb250YWluZXIiPgogICAgICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGl2IGNsYXNzPSJ0b2dnbGUtbGFiZWwiPiR7dGhpcy5sYWJlbH08L2Rpdj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uLXRleHQiPiR7dGhpcy5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgIXRoaXMudmFsdWUpIHsKICAgICAgICB0aGlzLnZhbHVlID0gdHJ1ZTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy52YWx1ZSA/IHRoaXMubWF4VHJhdmVsIDogMDsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIENsaWNrIGhhbmRsZXIgLSB0b2dnbGVzIHRoZSB2YWx1ZQogICAgICovCiAgICBhc3luYyBoYW5kbGVDbGljayhldmVudCkgewogICAgICBpZiAodGhpcy5pc0RyYWdnaW5nIHx8IHRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkKSB7CiAgICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMubWF4VHJhdmVsOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyMTEpID0+IHNldFRpbWVvdXQocjExLCAxMCkpOwogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLm1heFRyYXZlbCAtIDM7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgYXdhaXQgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMTUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRYID0gdGhpcy5tYXhUcmF2ZWw7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLnZhbHVlID0gIXRoaXMudmFsdWU7CiAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgibmV3VmFsdWUiLCB7CiAgICAgICAgZGV0YWlsOiB0aGlzLnZhbHVlLAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCkudGhlbigoKSA9PiB7CiAgICAgICAgdGhpcy5oYXNEcmFnZ2VkID0gZmFsc2U7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQb2ludGVyIGRvd24gLSBzdGFydCBkcmFnZ2luZwogICAgICovCiAgICBvblBvaW50ZXJEb3duKGV2ZW50KSB7CiAgICAgIGlmICh0aGlzLnJlcXVpcmVkIHx8IHRoaXMuZGlzYWJsZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5pc0RyYWdnaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5zdGFydFggPSBldmVudC5jbGllbnRYIC0gdGhpcy5jdXJyZW50WDsKICAgICAgZXZlbnQudGFyZ2V0LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgbW92ZSAtIHRyYWNrIGRyYWcgcG9zaXRpb24KICAgICAqLwogICAgb25Qb2ludGVyTW92ZShldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1ggPSBldmVudC5jbGllbnRYIC0gdGhpcy5zdGFydFg7CiAgICAgIHRoaXMuaGFzRHJhZ2dlZCA9IHRydWU7CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LmFkZCgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICB0aGlzLmN1cnJlbnRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4obmV3WCwgdGhpcy5tYXhUcmF2ZWwpKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICAvKioKICAgICAqIFBvaW50ZXIgdXAgLSBjb21wbGV0ZSBkcmFnIGFuZCBzbmFwIHRvIG5lYXJlc3Qgc2lkZQogICAgICovCiAgICBvblBvaW50ZXJVcChldmVudCkgewogICAgICBpZiAoIXRoaXMuaXNEcmFnZ2luZykKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnRhcmdldC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICAgIGlmICghdGhpcy5oYXNEcmFnZ2VkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHRvZ2dsZUtub2IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUta25vYiIpOwogICAgICBpZiAodG9nZ2xlS25vYikgewogICAgICAgIHRvZ2dsZUtub2IuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciKTsKICAgICAgfQogICAgICBjb25zdCBtaWRwb2ludCA9IHRoaXMubWF4VHJhdmVsIC8gMjsKICAgICAgdGhpcy52YWx1ZSA9IHRoaXMuY3VycmVudFggPiBtaWRwb2ludDsKICAgICAgdGhpcy5jdXJyZW50WCA9IHRoaXMudmFsdWUgPyB0aGlzLm1heFRyYXZlbCA6IDA7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJuZXdWYWx1ZSIsIHsKICAgICAgICBkZXRhaWw6IHRoaXMudmFsdWUsCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKS50aGVuKCgpID0+IHsKICAgICAgICB0aGlzLmhhc0RyYWdnZWQgPSBmYWxzZTsKICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFN5bmMga25vYiBwb3NpdGlvbiB3aGVuIHZhbHVlIGlzIGNoYW5nZWQgZXh0ZXJuYWxseQogICAgICovCiAgICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ2YWx1ZSIpICYmICF0aGlzLmlzRHJhZ2dpbmcgJiYgIXRoaXMuaGFzRHJhZ2dlZCkgewogICAgICAgIHRoaXMuY3VycmVudFggPSB0aGlzLnZhbHVlID8gdGhpcy5tYXhUcmF2ZWwgOiAwOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEtleWJvYXJkIHN1cHBvcnQKICAgICAqLwogICAgaGFuZGxlS2V5ZG93bihldmVudCkgewogICAgICBpZiAoZXZlbnQua2V5ID09PSAiICIgfHwgZXZlbnQua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhhbmRsZUNsaWNrKGV2ZW50KTsKICAgICAgfQogICAgfQogICAgLy8gRGVlc0lucHV0QmFzZSBpbnRlcmZhY2UgaW1wbGVtZW50YXRpb24KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlQXJnKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZUFyZzsKICAgIH0KICAgIGZvY3VzKCkgewogICAgICBjb25zdCB0cmFjazIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50b2dnbGUtdHJhY2siKTsKICAgICAgaWYgKHRyYWNrMikgewogICAgICAgIHRyYWNrMi5mb2N1cygpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMxKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRUb2dnbGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyMyA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyPgogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5ob3Jpem9udGFsLWdyb3VwIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8tYm94IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2UzZjJmZDsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICAgIGNvbG9yOiAjMTk3NmQyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAuaW5mby1ib3ggewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWUzYTVmOwogICAgICAgICAgICBjb2xvcjogIzkwY2FmOTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIGB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJCYXNpYyBUeXBlIExpc3QifSAuc3VidGl0bGU9JHsiQWRkIGFuZCByZW1vdmUgaXRlbXMgZnJvbSBhIGxpc3QifT4KICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlRhZ3MifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCB0YWdzIGJ5IHR5cGluZyBhbmQgcHJlc3NpbmcgRW50ZXIifQogICAgICAgICAgLnZhbHVlPSR7WyJqYXZhc2NyaXB0IiwgInR5cGVzY3JpcHQiLCAid2ViLWNvbXBvbmVudHMiXX0KICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiVGVhbSBNZW1iZXJzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgZW1haWwgYWRkcmVzc2VzIG9mIHRlYW0gbWVtYmVycyJ9CiAgICAgICAgICAudmFsdWU9JHtbImFsaWNlQGV4YW1wbGUuY29tIiwgImJvYkBleGFtcGxlLmNvbSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJTa2lsbHMgJiBLZXl3b3JkcyJ9IC5zdWJ0aXRsZT0keyJNYW5hZ2UgbGlzdHMgb2Ygc2tpbGxzIGFuZCBrZXl3b3JkcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAubGFiZWw9JHsiWW91ciBTa2lsbHMifQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ikxpc3QgeW91ciBwcm9mZXNzaW9uYWwgc2tpbGxzIn0KICAgICAgICAgIC52YWx1ZT0ke1siSFRNTCIsICJDU1MiLCAiSmF2YVNjcmlwdCIsICJOb2RlLmpzIiwgIlJlYWN0Il19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJob3Jpem9udGFsLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yaWVzIn0KICAgICAgICAgICAgLmxheW91dE1vZGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1siVGVjaG5vbG9neSIsICJEZXNpZ24iLCAiQnVzaW5lc3MiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXR5cGVsaXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJLZXl3b3JkcyJ9CiAgICAgICAgICAgIC5sYXlvdXRNb2RlPSR7Imhvcml6b250YWwifQogICAgICAgICAgICAudmFsdWU9JHtbImlubm92YXRpb24iLCAic3RhcnR1cCIsICJncm93dGgiXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJSZXF1aXJlZCAmIERpc2FibGVkIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgaW5wdXQgc3RhdGVzIGZvciB2YWxpZGF0aW9uIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJQcm9qZWN0IERlcGVuZGVuY2llcyJ9CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiTGlzdCBhbGwgcmVxdWlyZWQgbnBtIHBhY2thZ2VzIn0KICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAudmFsdWU9JHtbIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCIsICJAZGVzaWduLmVzdGF0ZS9kZWVzLWRvbXRvb2xzIl19CiAgICAgICAgPjwvZGVlcy1pbnB1dC10eXBlbGlzdD4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBUYWdzIn0KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJUaGVzZSB0YWdzIGFyZSBtYW5hZ2VkIGJ5IHRoZSBzeXN0ZW0ifQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC52YWx1ZT0ke1sic3lzdGVtIiwgInByb3RlY3RlZCIsICJyZWFkb25seSJdfQogICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJBcnRpY2xlIFB1Ymxpc2hpbmcgRm9ybSJ9IC5zdWJ0aXRsZT0keyJDb21wbGV0ZSBmb3JtIHdpdGggdGFnIG1hbmFnZW1lbnQifT4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAubGFiZWw9JHsiQXJ0aWNsZSBUaXRsZSJ9IC5yZXF1aXJlZD0ke3RydWV9PjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLmxhYmVsPSR7IlN1bW1hcnkifSAKICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJCcmllZiBkZXNjcmlwdGlvbiBvZiB0aGUgYXJ0aWNsZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10eXBlbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVGFncyJ9CiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJBZGQgcmVsZXZhbnQgdGFncyBmb3IgYmV0dGVyIGRpc2NvdmVyYWJpbGl0eSJ9CiAgICAgICAgICAgIC52YWx1ZT0ke1sidHV0b3JpYWwiLCAid2ViLWRldmVsb3BtZW50Il19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXR5cGVsaXN0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdHlwZWxpc3QKICAgICAgICAgICAgLmxhYmVsPSR7IkNvLUF1dGhvcnMifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGVtYWlsIGFkZHJlc3NlcyBvZiBjby1hdXRob3JzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdHlwZWxpc3Q+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5mby1ib3giPgogICAgICAgICAgPHN0cm9uZz5UaXA6PC9zdHJvbmc+IFR5cGUgYSB2YWx1ZSBhbmQgcHJlc3MgRW50ZXIgdG8gYWRkIGl0IHRvIHRoZSBsaXN0LiBDbGljayBvbiBhbnkgaXRlbSB0byByZW1vdmUgaXQuCiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXR5cGVsaXN0L2RlZXMtaW5wdXQtdHlwZWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzEgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMyID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRUeXBlbGlzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdHlwZWxpc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9pbnB1dFZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5wdXRWYWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSW5wdXRUeXBlbGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzMSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMxKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjM7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMih0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMyMjIyMjIiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3JkZXItdG9wOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICMyMjIiKX07CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMXB4IHNvbGlkICNDQ0MiLCAiMXB4IHNvbGlkICNmZmZmZmYxMCIpfTsKICAgICAgICBib3JkZXItbGVmdDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjFweCBzb2xpZCAjQ0NDIiwgIjFweCBzb2xpZCAjZmZmZmZmMTAiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjBweCAxcHggNHB4IHJnYmEoMCwwLDAsMC4zKSIsICJub25lIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6aG92ZXIgewogICAgICAgIGZpbHRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImJyaWdodG5lc3MoMC45OCkiLCAiYnJpZ2h0bmVzcygxLjA1KSIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1haW5ib3g6Zm9jdXMtd2l0aGluIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY5ZjIiLCAiIzAwODRmZiIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTJweDsKICAgICAgfQoKICAgICAgLnRhZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICB9CgogICAgICAubm90YWdzIHsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgaW5wdXQgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxOCIpfTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogaW5oZXJpdDsKICAgICAgICBwYWRkaW5nOiAwcHggMTZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgIGhlaWdodDogMHB4OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjJzOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjMzMzIil9OwogICAgICB9CgogICAgICBpbnB1dDpmb2N1cyB7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIGlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgIH0KCiAgICAgIC50YWcgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZjVlOSIsICIjMmQzYTJkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzJlN2QzMiIsICIjODFjNzg0Iil9OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW46IDNweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjMWI1ZTIwIil9OwogICAgICB9CiAgICAgIAogICAgICAudGFnOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2M4ZTZjOSIsICIjM2Q0ZjNkIil9OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgfQoKICAgICAgLnRhZyAucmVtb3ZlIHsKICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzOwogICAgICB9CgogICAgICAudGFnIC5yZW1vdmU6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYzYyODI4IiwgIiNlZjUzNTAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERpc2FibGVkIHN0YXRlICovCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC5tYWluYm94IHsKICAgICAgICBvcGFjaXR5OiAwLjY7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLnRhZ3MgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50YWcgewogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZGlzYWJsZWRdKSBpbnB1dCB7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMWExYTFhIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImlucHV0LXdyYXBwZXIiPgogICAgICAgIDxkZWVzLWxhYmVsIC5sYWJlbD0ke3RoaXMubGFiZWx9IC5kZXNjcmlwdGlvbj0ke3RoaXMuZGVzY3JpcHRpb259PjwvZGVlcy1sYWJlbD4KICAgICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhZ3MiIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiaW5wdXQiKS5mb2N1cygpOwogICAgICB9fT4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9Im5vdGFncyI+Tm8gdGFncyB5ZXQ8L2Rpdj5gIDogdGhpcy52YWx1ZS5tYXAoKHRhZykgPT4gYjJgCiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICAgICAgICAke3RhZ30KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJyZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgdGhpcy5yZW1vdmVUYWcodGFnKTsKICAgICAgfX0+w5c8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJUeXBlLCBwcmVzcyBFbnRlciB0byBhZGQgaXQuLi4iCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuaW5wdXRWYWx1ZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gewogICAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgIH19CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5hZGRUYWcodGhpcy5pbnB1dFZhbHVlLnRyaW0oKSk7CiAgICAgICAgfQogICAgICB9fQogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0aGlzLmRpc2FibGVkfQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYWRkVGFnKHRhZykgewogICAgICBpZiAoIXRoaXMudmFsdWUuaW5jbHVkZXModGFnKSkgewogICAgICAgIHRoaXMudmFsdWUgPSBbLi4udGhpcy52YWx1ZSwgdGFnXTsKICAgICAgICB0aGlzLmlucHV0VmFsdWUgPSAiIjsKICAgICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgICAgfQogICAgfQogICAgcmVtb3ZlVGFnKHRhZykgewogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczMyKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzIoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNJbnB1dFR5cGVsaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGVlcy10YWJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzI0ID0gKCkgPT4gYjJgCiAgPHN0eWxlPgogICAgJHtpYAogICAgICAuZGVtb1dyYXBwZXIgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgwIDAlIDUlKSIpfTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQogICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KICAgICAgLmRlbW8tZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vV3JhcHBlciI+CiAgICA8ZGVlcy1idXR0b24gY2xhc3M9InRoZW1lLXRvZ2dsZSIgQGNsaWNrPSR7KCkgPT4gewogIGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnRvZ2dsZSgiYnJpZ2h0Iik7CiAgZG9jdW1lbnQuYm9keS5jbGFzc0xpc3QudG9nZ2xlKCJkYXJrIik7Cn19PlRvZ2dsZSBUaGVtZTwvZGVlcy1idXR0b24+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkJhc2ljIFRhYmxlIHdpdGggQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgc3RhbmRhcmQgdGFibGUgd2l0aCByb3cgYWN0aW9ucywgZWRpdGFibGUgZmllbGRzLCBhbmQgY29udGV4dCBtZW51IHN1cHBvcnQuIERvdWJsZS1jbGljayBvbiBkZXNjcmlwdGlvbnMgdG8gZWRpdC4gR3JpZCBsaW5lcyBhcmUgZW5hYmxlZCBieSBkZWZhdWx0LjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkN1cnJlbnQgQWNjb3VudCBTdGF0ZW1lbnQiCiAgICAgICAgICBoZWFkaW5nMj0iQnVucSAtIFBheW1lbnQgQWNjb3VudCAyIC0gQXByaWwgMjAyMSIKICAgICAgICAgIC5lZGl0YWJsZUZpZWxkcz0iJHtbImRlc2NyaXB0aW9uIl19IgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJQcmludGluZyBQYXBlciAoT2ZmaWNlIFN1cHBsaWVzKSAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDIiLAogICAgYW1vdW50OiAiMTY1LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIkxvZ2l0ZWNoIE1vdXNlIChIYXJkd2FyZSkgLSBsb2dpLmNvbSBPbmxpbmVTaG9wIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDMiLAogICAgYW1vdW50OiAiMjk5OSwwMCBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJNYWNib29rIFBybyAxNmluY2ggKEhhcmR3YXJlKSAtIEFwcGxlLmRlIE9ubGluZVNob3AiCiAgfSwKICB7CiAgICBkYXRlOiAiMjAyMS0wNC0wMSIsCiAgICBhbW91bnQ6ICIyNDY0LjY1IFx1MjBBQyIsCiAgICBkZXNjcmlwdGlvbjogIk9mZmljZS1TdXBwbGllcyAtIFNUQVBMRVMgQlJFTUVOIgogIH0sCiAgewogICAgZGF0ZTogIjIwMjEtMDQtMDEiLAogICAgYW1vdW50OiAiMjQ2NC42NSBcdTIwQUMiLAogICAgZGVzY3JpcHRpb246ICJPZmZpY2UtU3VwcGxpZXMgLSBTVEFQTEVTIEJSRU1FTiIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idHJhbnNhY3Rpb25zIgogICAgICAgICAgLmRhdGFBY3Rpb25zPSIke1sKICB7CiAgICBuYW1lOiAidXBsb2FkIiwKICAgIGljb25OYW1lOiAiYmVsbCIsCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInVwbG9hZCIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBhbGVydChvcHRpb25zQXJnLml0ZW0uYW1vdW50KTsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ2aXNpYmlsaXR5IiwKICAgIGljb25OYW1lOiAiY29weSIsCiAgICB0eXBlOiBbImluUm93Il0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJjcmVhdGUgbmV3IiwKICAgIGljb25OYW1lOiAiaW5zdGFncmFtIiwKICAgIHR5cGU6IFsiaGVhZGVyIl0sCiAgICB1c2VUYWJsZUJlaGF2aW91cjogInByZXZpZXciLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJ0byBnYWxsZXJ5IiwKICAgIGljb25OYW1lOiAibWVzc2FnZSIsCiAgICB0eXBlOiBbImZvb3RlciJdLAogICAgdXNlVGFibGVCZWhhdmlvdXI6ICJwcmV2aWV3IiwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChpdGVtQXJnKSA9PiB7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiY29weSIsCiAgICBpY29uTmFtZTogImNvcHlTb2xpZCIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51IiwgImluUm93Il0sCiAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiZWRpdCAoZnJvbSBkZW1vKSIsCiAgICBpY29uTmFtZTogInBlblRvU3F1YXJlIiwKICAgIHR5cGU6IFsiY29udGV4dG1lbnUiXSwKICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICB9LAogIHsKICAgIG5hbWU6ICJwYXN0ZSIsCiAgICBpY29uTmFtZTogInBhc3RlU29saWQiLAogICAgdHlwZTogWyJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0sCiAgewogICAgbmFtZTogInByZXZpZXciLAogICAgdHlwZTogWyJkb3VibGVDbGljayIsICJjb250ZXh0bWVudSJdLAogICAgaWNvbk5hbWU6ICJleWUiLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKGl0ZW1BcmcpID0+IHsKICAgICAgYWxlcnQoaXRlbUFyZy5pdGVtLmFtb3VudCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KXX0iCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBWZXJ0aWNhbCBMaW5lczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkVuaGFuY2VkIGNvbHVtbiBzZXBhcmF0aW9uIGZvciBiZXR0ZXIgZGF0YSB0cmFja2luZy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJQcm9kdWN0IEludmVudG9yeSIKICAgICAgICAgIGhlYWRpbmcyPSJDdXJyZW50IHN0b2NrIGxldmVscyBhY3Jvc3Mgd2FyZWhvdXNlcyIKICAgICAgICAgIC5zaG93VmVydGljYWxMaW5lcz0ke3RydWV9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBwcm9kdWN0OiAnTWFjQm9vayBQcm8gMTYiJywKICAgIHdhcmVob3VzZV9hOiAiNDUiLAogICAgd2FyZWhvdXNlX2I6ICIzMiIsCiAgICB3YXJlaG91c2VfYzogIjI4IiwKICAgIHRvdGFsOiAiMTA1IiwKICAgIHN0YXR1czogIlx1MjcxMyBJbiBTdG9jayIKICB9LAogIHsKICAgIHByb2R1Y3Q6ICJpUGhvbmUgMTUgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMTIwIiwKICAgIHdhcmVob3VzZV9iOiAiODkiLAogICAgd2FyZWhvdXNlX2M6ICIxNTYiLAogICAgdG90YWw6ICIzNjUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0sCiAgewogICAgcHJvZHVjdDogIkFpclBvZHMgUHJvIiwKICAgIHdhcmVob3VzZV9hOiAiMCIsCiAgICB3YXJlaG91c2VfYjogIjEyIiwKICAgIHdhcmVob3VzZV9jOiAiNSIsCiAgICB0b3RhbDogIjE3IiwKICAgIHN0YXR1czogIlx1MjZBMCBMb3cgU3RvY2siCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiaVBhZCBBaXIiLAogICAgd2FyZWhvdXNlX2E6ICIyMyIsCiAgICB3YXJlaG91c2VfYjogIjQ1IiwKICAgIHdhcmVob3VzZV9jOiAiNjciLAogICAgdG90YWw6ICIxMzUiLAogICAgc3RhdHVzOiAiXHUyNzEzIEluIFN0b2NrIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5UYWJsZSB3aXRoIEZ1bGwgR3JpZDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkNvbXBsZXRlIGdyaWQgbGluZXMgZm9yIG1heGltdW0gcmVhZGFiaWxpdHkgYW5kIHN0cnVjdHVyZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJTZXJ2ZXIgTW9uaXRvcmluZyBEYXNoYm9hcmQiCiAgICAgICAgICBoZWFkaW5nMj0iUmVhbC10aW1lIG1ldHJpY3MgYWNyb3NzIHJlZ2lvbnMiCiAgICAgICAgICAuc2hvd0dyaWQ9JHt0cnVlfQogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgc2VydmVyOiAiQVBJLTEiLAogICAgcmVnaW9uOiAiVVMtRWFzdCIsCiAgICBjcHU6ICI0NSUiLAogICAgbWVtb3J5OiAiNjIlIiwKICAgIGRpc2s6ICI3OCUiLAogICAgbGF0ZW5jeTogIjEybXMiLAogICAgdXB0aW1lOiAiOTkuOSUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTJ9IEhlYWx0aHkiCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJBUEktMiIsCiAgICByZWdpb246ICJFVS1XZXN0IiwKICAgIGNwdTogIjM4JSIsCiAgICBtZW1vcnk6ICI1NSUiLAogICAgZGlzazogIjQ1JSIsCiAgICBsYXRlbmN5OiAiMjVtcyIsCiAgICB1cHRpbWU6ICI5OS44JSIsCiAgICBzdGF0dXM6ICJcdXsxRjdFMn0gSGVhbHRoeSIKICB9LAogIHsKICAgIHNlcnZlcjogIkRCLU1hc3RlciIsCiAgICByZWdpb246ICJVUy1FYXN0IiwKICAgIGNwdTogIjcyJSIsCiAgICBtZW1vcnk6ICI4MSUiLAogICAgZGlzazogIjkyJSIsCiAgICBsYXRlbmN5OiAiOG1zIiwKICAgIHVwdGltZTogIjEwMCUiLAogICAgc3RhdHVzOiAiXHV7MUY3RTF9IFdhcm5pbmciCiAgfSwKICB7CiAgICBzZXJ2ZXI6ICJEQi1SZXBsaWNhIiwKICAgIHJlZ2lvbjogIkVVLVdlc3QiLAogICAgY3B1OiAiMjMlIiwKICAgIG1lbW9yeTogIjM0JSIsCiAgICBkaXNrOiAiNDUlIiwKICAgIGxhdGVuY3k6ICIxNW1zIiwKICAgIHVwdGltZTogIjk5LjclIiwKICAgIHN0YXR1czogIlx1ezFGN0UyfSBIZWFsdGh5IgogIH0sCiAgewogICAgc2VydmVyOiAiQ2FjaGUtMSIsCiAgICByZWdpb246ICJBUC1Tb3V0aCIsCiAgICBjcHU6ICI4OSUiLAogICAgbWVtb3J5OiAiOTIlIiwKICAgIGRpc2s6ICIxMiUiLAogICAgbGF0ZW5jeTogIjEyMG1zIiwKICAgIHVwdGltZTogIjk4LjUlIiwKICAgIHN0YXR1czogIlx1ezFGNTM0fSBDcml0aWNhbCIKICB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0ic2VydmVycyIKICAgICAgICAgIC5kYXRhQWN0aW9ucz0iJHtbCiAgewogICAgbmFtZTogIlNTSCBDb25uZWN0IiwKICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgIHR5cGU6IFsiaW5Sb3ciXSwKICAgIGFjdGlvbkZ1bmM6IGFzeW5jIChvcHRpb25zQXJnKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJDb25uZWN0aW5nIHRvOiIsIG9wdGlvbnNBcmcuaXRlbS5zZXJ2ZXIpOwogICAgfQogIH0sCiAgewogICAgbmFtZTogIlZpZXcgTG9ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlLXRleHQiLAogICAgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLAogICAgYWN0aW9uRnVuYzogYXN5bmMgKG9wdGlvbnNBcmcpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXdpbmcgbG9ncyBmb3I6Iiwgb3B0aW9uc0FyZy5pdGVtLnNlcnZlcik7CiAgICB9CiAgfSwKICB7CiAgICBuYW1lOiAiUmVzdGFydCBTZXJ2ZXIiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaC1jdyIsCiAgICB0eXBlOiBbImNvbnRleHRtZW51Il0sCiAgICBhY3Rpb25GdW5jOiBhc3luYyAob3B0aW9uc0FyZykgPT4gewogICAgICBjb25zb2xlLmxvZygiUmVzdGFydGluZzoiLCBvcHRpb25zQXJnLml0ZW0uc2VydmVyKTsKICAgIH0KICB9Cl19IgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRhYmxlIHdpdGggSG9yaXpvbnRhbCBMaW5lcyBPbmx5PC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+RW1waGFzaXMgb24gcm93IHNlcGFyYXRpb24gd2l0aG91dCBjb2x1bW4gZGl2aWRlcnMuPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iU2FsZXMgUGVyZm9ybWFuY2UiCiAgICAgICAgICBoZWFkaW5nMj0iVG9wIHBlcmZvcm1lcnMgdGhpcyBxdWFydGVyIgogICAgICAgICAgLnNob3dIb3Jpem9udGFsTGluZXM9JHt0cnVlfQogICAgICAgICAgLnNob3dWZXJ0aWNhbExpbmVzPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBzYWxlc3BlcnNvbjogIkVtaWx5IEpvaG5zb24iLAogICAgcmVnaW9uOiAiTm9ydGggQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICI0MiIsCiAgICByZXZlbnVlOiAiJDEuMk0iLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMjglIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiTWljaGFlbCBDaGVuIiwKICAgIHJlZ2lvbjogIkFzaWEgUGFjaWZpYyIsCiAgICBkZWFsc19jbG9zZWQ6ICIzOCIsCiAgICByZXZlbnVlOiAiJDk4MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICIxMTUlIiwKICAgIHJhdGluZzogIlx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MFx1MkI1MCIKICB9LAogIHsKICAgIHNhbGVzcGVyc29uOiAiU2FyYWggV2lsbGlhbXMiLAogICAgcmVnaW9uOiAiRXVyb3BlIiwKICAgIGRlYWxzX2Nsb3NlZDogIjM1IiwKICAgIHJldmVudWU6ICIkODc1SyIsCiAgICBxdW90YV9hY2hpZXZlbWVudDogIjEwOCUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0sCiAgewogICAgc2FsZXNwZXJzb246ICJEYXZpZCBHYXJjaWEiLAogICAgcmVnaW9uOiAiTGF0aW4gQW1lcmljYSIsCiAgICBkZWFsc19jbG9zZWQ6ICIzMSIsCiAgICByZXZlbnVlOiAiJDc1MEsiLAogICAgcXVvdGFfYWNoaWV2ZW1lbnQ6ICI5NSUiLAogICAgcmF0aW5nOiAiXHUyQjUwXHUyQjUwXHUyQjUwXHUyQjUwIgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJzYWxlcyByZXBzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNpbXBsZSBUYWJsZSAoTm8gR3JpZCk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5DbGVhbiwgbWluaW1hbCBkZXNpZ24gd2l0aG91dCBncmlkIGxpbmVzLiBTZXQgc2hvd0dyaWQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGUgZGVmYXVsdCBncmlkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlRlYW0gTWVtYmVycyIKICAgICAgICAgIGhlYWRpbmcyPSJFbmdpbmVlcmluZyBEZXBhcnRtZW50IgogICAgICAgICAgLnNob3dHcmlkPSR7ZmFsc2V9CiAgICAgICAgICAuZGF0YT0ke1sKICB7CiAgICBuYW1lOiAiQWxpY2UgSm9obnNvbiIsCiAgICByb2xlOiAiTGVhZCBFbmdpbmVlciIsCiAgICBlbWFpbDogImFsaWNlQGNvbXBhbnkuY29tIiwKICAgIGxvY2F0aW9uOiAiU2FuIEZyYW5jaXNjbyIsCiAgICBqb2luZWQ6ICIyMDIwLTAzLTE1IgogIH0sCiAgewogICAgbmFtZTogIkJvYiBTbWl0aCIsCiAgICByb2xlOiAiU2VuaW9yIERldmVsb3BlciIsCiAgICBlbWFpbDogImJvYkBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIk5ldyBZb3JrIiwKICAgIGpvaW5lZDogIjIwMTktMDctMjIiCiAgfSwKICB7CiAgICBuYW1lOiAiQ2hhcmxpZSBEYXZpcyIsCiAgICByb2xlOiAiRGV2T3BzIEVuZ2luZWVyIiwKICAgIGVtYWlsOiAiY2hhcmxpZUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkxvbmRvbiIsCiAgICBqb2luZWQ6ICIyMDIxLTAxLTEwIgogIH0sCiAgewogICAgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwKICAgIHJvbGU6ICJGcm9udGVuZCBEZXZlbG9wZXIiLAogICAgZW1haWw6ICJkaWFuYUBjb21wYW55LmNvbSIsCiAgICBsb2NhdGlvbjogIkJhcmNlbG9uYSIsCiAgICBqb2luZWQ6ICIyMDIyLTA1LTE4IgogIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJ0ZWFtIG1lbWJlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CiAgICAgIAogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VGFibGUgd2l0aCBDdXN0b20gRGlzcGxheSBGdW5jdGlvbjwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlRyYW5zZm9ybSBkYXRhIGZvciBkaXNwbGF5IHVzaW5nIGN1c3RvbSBmb3JtYXR0aW5nLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlNhbGVzIFJlcG9ydCIKICAgICAgICAgIGhlYWRpbmcyPSJRNCAyMDIzIFBlcmZvcm1hbmNlIgogICAgICAgICAgLmRhdGE9JHtbCiAgewogICAgcHJvZHVjdDogIkVudGVycHJpc2UgTGljZW5zZSIsCiAgICB1bml0czogNDUsCiAgICByZXZlbnVlOiAyMjVlMywKICAgIGdyb3d0aDogMC4yMywKICAgIGZvcmVjYXN0OiAyOGU0CiAgfSwKICB7CiAgICBwcm9kdWN0OiAiUHJvZmVzc2lvbmFsIExpY2Vuc2UiLAogICAgdW5pdHM6IDEyOCwKICAgIHJldmVudWU6IDEyOGUzLAogICAgZ3Jvd3RoOiAwLjE1LAogICAgZm9yZWNhc3Q6IDE0N2UzCiAgfSwKICB7CiAgICBwcm9kdWN0OiAiU3RhcnRlciBMaWNlbnNlIiwKICAgIHVuaXRzOiAzNDIsCiAgICByZXZlbnVlOiA2ODQwMCwKICAgIGdyb3d0aDogMC40MiwKICAgIGZvcmVjYXN0OiA5N2UzCiAgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyhpdGVtKSA9PiAoewogIFByb2R1Y3Q6IGl0ZW0ucHJvZHVjdCwKICAiVW5pdHMgU29sZCI6IGl0ZW0udW5pdHMudG9Mb2NhbGVTdHJpbmcoKSwKICBSZXZlbnVlOiAiJCIgKyBpdGVtLnJldmVudWUudG9Mb2NhbGVTdHJpbmcoKSwKICBHcm93dGg6IChpdGVtLmdyb3d0aCAqIDEwMCkudG9GaXhlZCgxKSArICIlIiwKICAiUTEgMjAyNCBGb3JlY2FzdCI6ICIkIiArIGl0ZW0uZm9yZWNhc3QudG9Mb2NhbGVTdHJpbmcoKQp9KX0KICAgICAgICAgIGRhdGFOYW1lPSJwcm9kdWN0cyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5FbXB0eSBUYWJsZSBTdGF0ZTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkhvdyB0aGUgdGFibGUgbG9va3Mgd2hlbiBubyBkYXRhIGlzIGF2YWlsYWJsZS48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGhlYWRpbmcxPSJObyBEYXRhIEF2YWlsYWJsZSIKICAgICAgICAgIGhlYWRpbmcyPSJUaGlzIHRhYmxlIGlzIGN1cnJlbnRseSBlbXB0eSIKICAgICAgICAgIC5kYXRhPSR7W119CiAgICAgICAgICBkYXRhTmFtZT0iaXRlbXMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+U2NoZW1hLUZpcnN0IENvbHVtbnMgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5EZWZpbmVzIGNvbHVtbnMgZXhwbGljaXRseSBhbmQgcmVuZGVycyB2aWEgc2NoZW1hLiBObyBkaXNwbGF5RnVuY3Rpb24gbmVlZGVkLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlVzZXJzIChTY2hlbWEtRmlyc3QpIgogICAgICAgICAgaGVhZGluZzI9IkNvbHVtbnMgZGVmaW5lIHJlbmRlcmluZyBhbmQgb3JkZXIiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCByZW5kZXJlcjogKHY1KSA9PiBiMmA8ZGVlcy1iYWRnZT4ke3Y1fTwvZGVlcy1iYWRnZT5gIH0sCiAgeyBrZXk6ICJqb2luZWRBdCIsIGhlYWRlcjogIkpvaW5lZCIsIHJlbmRlcmVyOiAodjUpID0+IG5ldyBEYXRlKHY1KS50b0xvY2FsZURhdGVTdHJpbmcoKSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSIsIGVtYWlsOiAiYWxpY2VAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjItMDgtMDEiIH0sCiAgeyBuYW1lOiAiQm9iIiwgZW1haWw6ICJib2JAZXhhbXBsZS5jb20iLCBqb2luZWRBdDogIjIwMjEtMTItMTEiIH0sCiAgeyBuYW1lOiAiQ2Fyb2wiLCBlbWFpbDogImNhcm9sQGV4YW1wbGUuY29tIiwgam9pbmVkQXQ6ICIyMDIzLTAzLTIyIiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0idXNlcnMiCiAgICAgICAgPjwvZGVlcy10YWJsZT4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+UGFydGlhbCBTY2hlbWEgKyBBdWdtZW50IChOZXcpPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+UHJvdmlkZXMgb25seSB0aGUgaW1wb3J0YW50IGNvbHVtbnM7IHRoZSByZXN0IGFyZSBtZXJnZWQgaW4gZnJvbSBkaXNwbGF5RnVuY3Rpb24uPC9wPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBoZWFkaW5nMT0iVXNlcnMgKFBhcnRpYWwgKyBBdWdtZW50KSIKICAgICAgICAgIGhlYWRpbmcyPSJNaXNzaW5nIGNvbHVtbnMgYXJlIGRlcml2ZWQiCiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRpc3BsYXlGdW5jdGlvbj0keyh1NykgPT4gKHsgbmFtZTogdTcubmFtZSwgZW1haWw6IHU3LmVtYWlsLCByb2xlOiB1Ny5yb2xlIH0pfQogICAgICAgICAgLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uPSR7dHJ1ZX0KICAgICAgICAgIC5kYXRhPSR7WwogIHsgbmFtZTogIkVyaW4iLCBlbWFpbDogImVyaW5AZXhhbXBsZS5jb20iLCByb2xlOiAiQWRtaW4iIH0sCiAgeyBuYW1lOiAiRmlubiIsIGVtYWlsOiAiZmlubkBleGFtcGxlLmNvbSIsIHJvbGU6ICJVc2VyIiB9LAogIHsgbmFtZTogIkdpbmEiLCBlbWFpbDogImdpbmFAZXhhbXBsZS5jb20iLCByb2xlOiAiVXNlciIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9InVzZXJzIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIiAKICAgICAgICAgICBAc2VsZWN0aW9uQ2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnNvbGUubG9nKCJTZWxlY3Rpb24gY2hhbmdlZCIsIGUxMS5kZXRhaWwpOwp9fQogICAgICAgICAgIEBzZWFyY2gtY2hhbmdlZD0keyhlMTEpID0+IHsKICBjb25zdCB0YmwgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgidGFibGVGaWx0ZXJTZWxlY3REZW1vIik7CiAgaWYgKHRibCkKICAgIHRibC5zZXRGaWx0ZXJUZXh0KGUxMS5kZXRhaWwudmFsdWUpOwp9fQogICAgICAgICAgIEBzZWFyY2gtc3VibWl0PSR7KGUxMSkgPT4gewogIGNvbnN0IHRibCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ0YWJsZUZpbHRlclNlbGVjdERlbW8iKTsKICBpZiAodGJsKQogICAgdGJsLnNldEZpbHRlclRleHQoZTExLmRldGFpbC52YWx1ZSk7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkZpbHRlcmluZyArIE11bHRpLVNlbGVjdGlvbiAoTmV3KTwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlVzZSB0aGUgc2VhcmNoIGJhciB0byBmaWx0ZXIgcm93czsgdG9nZ2xlIHNlbGVjdGlvbiB2aWEgY2hlY2tib3hlcy4gQ2xpY2sgaGVhZGVycyB0byBzb3J0LjwvcD4KICAgICAgICA8ZGVlcy1zZWFyY2hiYXI+PC9kZWVzLXNlYXJjaGJhcj4KICAgICAgICA8ZGl2IHN0eWxlPSJoZWlnaHQ6IDEycHgiPjwvZGl2PgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0idGFibGVGaWx0ZXJTZWxlY3REZW1vIgogICAgICAgICAgaGVhZGluZzE9IkludmVudG9yeSAoRmlsdGVyICsgU2VsZWN0KSIKICAgICAgICAgIGhlYWRpbmcyPSJUcnkgdHlwaW5nIHRvIGZpbHRlciBhbmQgc2VsZWN0aW5nIG11bHRpcGxlIHJvd3MiCiAgICAgICAgICAuc2VsZWN0aW9uTW9kZT0keyJtdWx0aSJ9CiAgICAgICAgICAucm93S2V5PSR7InNrdSJ9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogInNrdSIsIGhlYWRlcjogIlNLVSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdG9jayIsIGhlYWRlcjogIlN0b2NrIiwgc29ydGFibGU6IHRydWUgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBza3U6ICJBLTEwMCIsIG5hbWU6ICJVU0ItQyBDYWJsZSIsIHN0b2NrOiAxMjAgfSwKICB7IHNrdTogIkEtMTAxIiwgbmFtZTogIldpcmVsZXNzIE1vdXNlIiwgc3RvY2s6IDU1IH0sCiAgeyBza3U6ICJBLTEwMiIsIG5hbWU6ICJMYXB0b3AgU3RhbmQiLCBzdG9jazogMTggfSwKICB7IHNrdTogIkItMjAwIiwgbmFtZTogIktleWJvYXJkIChJU08pIiwgc3RvY2s6IDg5IH0sCiAgeyBza3U6ICJCLTIwMSIsIG5hbWU6ICJIRE1JIEFkYXB0ZXIiLCBzdG9jazogMCB9LAogIHsgc2t1OiAiQy0zMDAiLCBuYW1lOiAiV2ViY2FtIDEwODBwIiwgc3RvY2s6IDQyIH0KXX0KICAgICAgICAgIGRhdGFOYW1lPSJpdGVtcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Db2x1bW4gRmlsdGVycyArIFN0aWNreSBIZWFkZXIgKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5QZXItY29sdW1uIHF1aWNrIGZpbHRlcnMgYW5kIHN0aWNreSBoZWFkZXIgd2l0aCBpbnRlcm5hbCBzY3JvbGwuIFRyeSBmaWx0ZXJpbmcgdGhlIE5hbWUgY29sdW1uLiBVc2VzIC0tdGFibGUtbWF4LWhlaWdodCB2YXIuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgIGRlZXMtdGFibGVbc3RpY2t5LWhlYWRlcl0geyAtLXRhYmxlLW1heC1oZWlnaHQ6IDIyMHB4OyB9CiAgICAgICAgPC9zdHlsZT4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IkVtcGxveWVlcyIKICAgICAgICAgIGhlYWRpbmcyPSJRdWljayBmaWx0ZXIgcGVyIGNvbHVtbiArIHN0aWNreSBoZWFkZXIiCiAgICAgICAgICAuc2hvd0NvbHVtbkZpbHRlcnM9JHt0cnVlfQogICAgICAgICAgLnN0aWNreUhlYWRlcj0ke3RydWV9CiAgICAgICAgICAuY29sdW1ucz0ke1sKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiZGVwYXJ0bWVudCIsIGhlYWRlcjogIkRlcGFydG1lbnQiLCBzb3J0YWJsZTogdHJ1ZSB9Cl19CiAgICAgICAgICAuZGF0YT0ke1sKICB7IG5hbWU6ICJBbGljZSBKb2huc29uIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJCb2IgU21pdGgiLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJTYWxlcyIgfSwKICB7IG5hbWU6ICJDaGFybGllIERhdmlzIiwgZW1haWw6ICJjaGFybGllQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkhSIiB9LAogIHsgbmFtZTogIkRpYW5hIE1hcnRpbmV6IiwgZW1haWw6ICJkaWFuYUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJFdGhhbiBCcm93biIsIGVtYWlsOiAiZXRoYW5AY29ycC5jb20iLCBkZXBhcnRtZW50OiAiRmluYW5jZSIgfSwKICB7IG5hbWU6ICJGaW9uYSBDbGFyayIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU2FsZXMiIH0sCiAgeyBuYW1lOiAiR3JhY2UgTGVlIiwgZW1haWw6ICJncmFjZUBjb3JwLmNvbSIsIGRlcGFydG1lbnQ6ICJFbmdpbmVlcmluZyIgfSwKICB7IG5hbWU6ICJIZW5yeSBXaWxzb24iLCBlbWFpbDogImhlbnJ5QGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIk1hcmtldGluZyIgfSwKICB7IG5hbWU6ICJJcmVuZSBXYWxrZXIiLCBlbWFpbDogImlyZW5lQGNvcnAuY29tIiwgZGVwYXJ0bWVudDogIkZpbmFuY2UiIH0sCiAgeyBuYW1lOiAiSmFjayBUdXJuZXIiLCBlbWFpbDogImphY2tAY29ycC5jb20iLCBkZXBhcnRtZW50OiAiU3VwcG9ydCIgfQpdfQogICAgICAgICAgZGF0YU5hbWU9ImVtcGxveWVlcyIKICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiIKICAgICAgICBAc2VhcmNoUmVxdWVzdD0ke2FzeW5jIChlMTEpID0+IHsKICBjb25zdCB7IHF1ZXJ5IH0gPSBlMTEuZGV0YWlsIHx8IHsgcXVlcnk6ICIiIH07CiAgY29uc3QgdGFibGUyID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoInNlcnZlclNlYXJjaERlbW8iKTsKICBjb25zdCBiYXNlRGF0YSA9IFsKICAgIHsgaWQ6IDEsIG5hbWU6ICJBbGljZSIsIGNpdHk6ICJCZXJsaW4iLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogICAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgICB7IGlkOiAzLCBuYW1lOiAiQ2hhcmxpZSIsIGNpdHk6ICJMb25kb24iLCB0aXRsZTogIk1hbmFnZXIiIH0sCiAgICB7IGlkOiA0LCBuYW1lOiAiRGlhbmEiLCBjaXR5OiAiTWFkcmlkIiwgdGl0bGU6ICJFbmdpbmVlciIgfSwKICAgIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9CiAgXTsKICBhd2FpdCBuZXcgUHJvbWlzZSgocjExKSA9PiBzZXRUaW1lb3V0KHIxMSwgMzAwKSk7CiAgY29uc3QgcTIgPSBTdHJpbmcocXVlcnkgfHwgIiIpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgZmlsdGVyZWQgPSBxMiA/IGJhc2VEYXRhLmZpbHRlcigocjExKSA9PiBPYmplY3QudmFsdWVzKHIxMSkuc29tZSgodjUpID0+IFN0cmluZyh2NSkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyhxMikpKSA6IGJhc2VEYXRhOwogIHRhYmxlMi5kYXRhID0gZmlsdGVyZWQ7Cn19CiAgICAgID4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZlciBTZWFyY2ggKE5ldyk8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj5TZWxlY3QgU2VydmVyIG1vZGUsIHR5cGUgYSBxdWVyeSwgYW5kIHdhdGNoIHRoZSB0YWJsZSBmZXRjaCBzaW11bGF0ZWQgcmVzdWx0cy48L3A+CiAgICAgICAgPGRlZXMtdGFibGUKICAgICAgICAgIGlkPSJzZXJ2ZXJTZWFyY2hEZW1vIgogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSAoU2VydmVyIFNlYXJjaCkiCiAgICAgICAgICBoZWFkaW5nMj0iQ2xpY2sgU2VhcmNoLCBjaG9vc2UgU2VydmVyIG1vZGUsIGFuZCB0eXBlIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIgfSwKICB7IGtleTogImNpdHkiLCBoZWFkZXI6ICJDaXR5IiB9LAogIHsga2V5OiAidGl0bGUiLCBoZWFkZXI6ICJUaXRsZSIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIiwgY2l0eTogIkJlcmxpbiIsIHRpdGxlOiAiRW5naW5lZXIiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiIsIGNpdHk6ICJQYXJpcyIsIHRpdGxlOiAiRGVzaWduZXIiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUiLCBjaXR5OiAiTG9uZG9uIiwgdGl0bGU6ICJNYW5hZ2VyIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSIsIGNpdHk6ICJNYWRyaWQiLCB0aXRsZTogIkVuZ2luZWVyIiB9LAogIHsgaWQ6IDUsIG5hbWU6ICJFdGhhbiIsIGNpdHk6ICJSb21lIiwgdGl0bGU6ICJTdXBwb3J0IiB9Cl19CiAgICAgICAgICBkYXRhTmFtZT0icGVvcGxlIgogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPldpZGUgUHJvcGVydGllcyArIE1hbnkgQWN0aW9uczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkEgdGFibGUgd2l0aCBtYW55IGNvbHVtbnMgYW5kIHJpY2ggYWN0aW9ucyB0byBzdHJlc3MgdGVzdCBsYXlvdXQgYW5kIHN0aWNreSBBY3Rpb25zLjwvcD4KICAgICAgICA8ZGVlcy10YWJsZQogICAgICAgICAgaGVhZGluZzE9IlBlb3BsZSBEaXJlY3RvcnkiCiAgICAgICAgICBoZWFkaW5nMj0iTWFueSBwcm9wZXJ0aWVzIGFuZCBhY3Rpb25zIgogICAgICAgICAgLmNvbHVtbnM9JHtbCiAgeyBrZXk6ICJpZCIsIGhlYWRlcjogIklEIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogIm5hbWUiLCBoZWFkZXI6ICJOYW1lIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInJvbGUiLCBoZWFkZXI6ICJSb2xlIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImRlcGFydG1lbnQiLCBoZWFkZXI6ICJEZXBhcnRtZW50Iiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImVtYWlsIiwgaGVhZGVyOiAiRW1haWwiIH0sCiAgeyBrZXk6ICJwaG9uZSIsIGhlYWRlcjogIlBob25lIiB9LAogIHsga2V5OiAibG9jYXRpb24iLCBoZWFkZXI6ICJMb2NhdGlvbiIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJzdGF0dXMiLCBoZWFkZXI6ICJTdGF0dXMiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAiY3JlYXRlZEF0IiwgaGVhZGVyOiAiQ3JlYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJ1cGRhdGVkQXQiLCBoZWFkZXI6ICJVcGRhdGVkIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImxhc3RMb2dpbiIsIGhlYWRlcjogIkxhc3QgTG9naW4iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAicHJvamVjdHMiLCBoZWFkZXI6ICJQcm9qZWN0cyIgfSwKICB7IGtleTogInRhZ3MiLCBoZWFkZXI6ICJUYWdzIiB9LAogIHsga2V5OiAibm90ZXMiLCBoZWFkZXI6ICJOb3RlcyIgfQpdfQogICAgICAgICAgLmRhdGE9JHtbCiAgeyBpZDogMSwgbmFtZTogIkFsaWNlIEpvaG5zb24iLCByb2xlOiAiRW5naW5lZXIiLCBkZXBhcnRtZW50OiAiUiZEIiwgZW1haWw6ICJhbGljZUBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTExIiwgbG9jYXRpb246ICJCZXJsaW4iLCBzdGF0dXM6ICJBY3RpdmUiLCBjcmVhdGVkQXQ6ICIyMDIzLTAxLTEyIiwgdXBkYXRlZEF0OiAiMjAyNC0wNS0wMyIsIGxhc3RMb2dpbjogIjIwMjQtMTAtMDEiLCBwcm9qZWN0czogNSwgdGFnczogInR5cGVzY3JpcHQsIHVpIiwgbm90ZXM6ICJNZW50b3IiIH0sCiAgeyBpZDogMiwgbmFtZTogIkJvYiBTbWl0aCIsIHJvbGU6ICJEZXNpZ25lciIsIGRlcGFydG1lbnQ6ICJEZXNpZ24iLCBlbWFpbDogImJvYkBjb3JwLmNvbSIsIHBob25lOiAiKzEgMjAyIDU1NSAwMTEyIiwgbG9jYXRpb246ICJQYXJpcyIsIHN0YXR1czogIkFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMjItMTEtMDUiLCB1cGRhdGVkQXQ6ICIyMDI0LTA0LTEwIiwgbGFzdExvZ2luOiAiMjAyNC0wOS0yOCIsIHByb2plY3RzOiA4LCB0YWdzOiAiZmlnbWEsIGJyYW5kIiwgbm90ZXM6ICJQYXJ0LXRpbWUiIH0sCiAgeyBpZDogMywgbmFtZTogIkNoYXJsaWUgRGF2aXMiLCByb2xlOiAiTWFuYWdlciIsIGRlcGFydG1lbnQ6ICJPcHMiLCBlbWFpbDogImNoYXJsaWVAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExMyIsIGxvY2F0aW9uOiAiTG9uZG9uIiwgc3RhdHVzOiAiT24gTGVhdmUiLCBjcmVhdGVkQXQ6ICIyMDIxLTA0LTIxIiwgdXBkYXRlZEF0OiAiMjAyNC0wMi0xNSIsIGxhc3RMb2dpbjogIjIwMjQtMDgtMTIiLCBwcm9qZWN0czogMywgdGFnczogInNyZSwgbGVhZGVyc2hpcCIsIG5vdGVzOiAiIiB9LAogIHsgaWQ6IDQsIG5hbWU6ICJEaWFuYSBNYXJ0aW5leiIsIHJvbGU6ICJFbmdpbmVlciIsIGRlcGFydG1lbnQ6ICJQbGF0Zm9ybSIsIGVtYWlsOiAiZGlhbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNCIsIGxvY2F0aW9uOiAiTWFkcmlkIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMC0wNi0zMCIsIHVwZGF0ZWRBdDogIjIwMjQtMDYtMjUiLCBsYXN0TG9naW46ICIyMDI0LTEwLTAyIiwgcHJvamVjdHM6IDYsIHRhZ3M6ICJub2RlLCBhcGkiLCBub3RlczogIk9uLWNhbGwiIH0sCiAgeyBpZDogNSwgbmFtZTogIkV0aGFuIEJyb3duIiwgcm9sZTogIlN1cHBvcnQiLCBkZXBhcnRtZW50OiAiQ1MiLCBlbWFpbDogImV0aGFuQGNvcnAuY29tIiwgcGhvbmU6ICIrMSAyMDIgNTU1IDAxMTUiLCBsb2NhdGlvbjogIlJvbWUiLCBzdGF0dXM6ICJJbmFjdGl2ZSIsIGNyZWF0ZWRBdDogIjIwMTktMDktMTgiLCB1cGRhdGVkQXQ6ICIyMDI0LTAzLTA5IiwgbGFzdExvZ2luOiAiMjAyNC0wNi0xOSIsIHByb2plY3RzOiAyLCB0YWdzOiAiemVuZGVzayIsIG5vdGVzOiAiUmVoaXJlIiB9LAogIHsgaWQ6IDYsIG5hbWU6ICJGaW9uYSBDbGFyayIsIHJvbGU6ICJRQSIsIGRlcGFydG1lbnQ6ICJRQSIsIGVtYWlsOiAiZmlvbmFAY29ycC5jb20iLCBwaG9uZTogIisxIDIwMiA1NTUgMDExNiIsIGxvY2F0aW9uOiAiVmllbm5hIiwgc3RhdHVzOiAiQWN0aXZlIiwgY3JlYXRlZEF0OiAiMjAyMi0wMy0xNCIsIHVwZGF0ZWRBdDogIjIwMjQtMDMtMDEiLCBsYXN0TG9naW46ICIyMDI0LTA5LTA3IiwgcHJvamVjdHM6IDcsIHRhZ3M6ICJwbGF5d3JpZ2h0Iiwgbm90ZXM6ICIiIH0KXX0KICAgICAgICAgIC5kYXRhQWN0aW9ucz0ke1sKICB7IG5hbWU6ICJWaWV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJ2aWV3IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJlZGl0IiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkRlbGV0ZSIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoIiwgdHlwZTogWyJpblJvdyIsICJjb250ZXh0bWVudSJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJkZWxldGUiLCBpdGVtKTsKICB9IH0sCiAgeyBuYW1lOiAiTWVzc2FnZSIsIGljb25OYW1lOiAibHVjaWRlOm1lc3NhZ2Utc3F1YXJlIiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJtZXNzYWdlIiwgaXRlbSk7CiAgfSB9LAogIHsgbmFtZTogIkhpc3RvcnkiLCBpY29uTmFtZTogImx1Y2lkZTpjbG9jayIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiaGlzdG9yeSIsIGl0ZW0pOwogIH0gfSwKICB7IG5hbWU6ICJBZGQgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIHR5cGU6IFsiaGVhZGVyIl0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IHRhYmxlOiB0YWJsZTIgfSkgPT4gewogICAgY29uc29sZS5sb2coImFkZCIpOwogIH0gfSwKICB7IG5hbWU6ICJFeHBvcnQgQ1NWIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCB0eXBlOiBbImhlYWRlciJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyB0YWJsZTogdGFibGUyIH0pID0+IHsKICAgIGNvbnNvbGUubG9nKCJleHBvcnQiKTsKICB9IH0sCiAgeyBuYW1lOiAiQnVsayBEZWxldGUiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaC0yIiwgdHlwZTogWyJmb290ZXIiXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgdGFibGU6IHRhYmxlMiB9KSA9PiB7CiAgICBjb25zb2xlLmxvZygiYnVsayBkZWxldGUiKTsKICB9IH0KXX0KICAgICAgICA+PC9kZWVzLXRhYmxlPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5TY3JvbGxhYmxlIFNtYWxsIEhlaWdodDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPlNhbWUgYXMgYWJvdmUsIGJ1dCB3aXRoIG1hbnkgaXRlbXMgYW5kIGEgc21hbGwgZml4ZWQgaGVpZ2h0IHRvIGZvcmNlIHZlcnRpY2FsIHNjcm9sbGluZyBpbnNpZGUgdGhlIHRhYmxlLiBBY3Rpb25zIHJlbWFpbiB2aXNpYmxlIG9uIHRoZSByaWdodDsgaG9yaXpvbnRhbCBzY3JvbGwgYXBwZWFycyBpZiBuZWVkZWQuPC9wPgogICAgICAgIDxzdHlsZT4KICAgICAgICAgICNzY3JvbGxTbWFsbEhlaWdodCB7IC0tdGFibGUtbWF4LWhlaWdodDogMjQwcHg7IH0KICAgICAgICA8L3N0eWxlPgogICAgICAgIDxkZWVzLXRhYmxlCiAgICAgICAgICBpZD0ic2Nyb2xsU21hbGxIZWlnaHQiCiAgICAgICAgICAuc3RpY2t5SGVhZGVyPSR7dHJ1ZX0KICAgICAgICAgIGhlYWRpbmcxPSJQZW9wbGUgRGlyZWN0b3J5IChTY3JvbGxhYmxlKSIKICAgICAgICAgIGhlYWRpbmcyPSJGb3JjZWQgc2Nyb2xsaW5nIHdpdGggbWFueSBpdGVtcyIKICAgICAgICAgIC5jb2x1bW5zPSR7WwogIHsga2V5OiAiaWQiLCBoZWFkZXI6ICJJRCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJuYW1lIiwgaGVhZGVyOiAiTmFtZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJyb2xlIiwgaGVhZGVyOiAiUm9sZSIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJkZXBhcnRtZW50IiwgaGVhZGVyOiAiRGVwYXJ0bWVudCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJlbWFpbCIsIGhlYWRlcjogIkVtYWlsIiB9LAogIHsga2V5OiAicGhvbmUiLCBoZWFkZXI6ICJQaG9uZSIgfSwKICB7IGtleTogImxvY2F0aW9uIiwgaGVhZGVyOiAiTG9jYXRpb24iLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAic3RhdHVzIiwgaGVhZGVyOiAiU3RhdHVzIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogImNyZWF0ZWRBdCIsIGhlYWRlcjogIkNyZWF0ZWQiLCBzb3J0YWJsZTogdHJ1ZSB9LAogIHsga2V5OiAidXBkYXRlZEF0IiwgaGVhZGVyOiAiVXBkYXRlZCIsIHNvcnRhYmxlOiB0cnVlIH0sCiAgeyBrZXk6ICJsYXN0TG9naW4iLCBoZWFkZXI6ICJMYXN0IExvZ2luIiwgc29ydGFibGU6IHRydWUgfSwKICB7IGtleTogInByb2plY3RzIiwgaGVhZGVyOiAiUHJvamVjdHMiIH0sCiAgeyBrZXk6ICJ0YWdzIiwgaGVhZGVyOiAiVGFncyIgfSwKICB7IGtleTogIm5vdGVzIiwgaGVhZGVyOiAiTm90ZXMiIH0KXX0KICAgICAgICAgIC5kYXRhPSR7QXJyYXkuZnJvbSh7IGxlbmd0aDogMTAwIH0sIChfNCwgaTExKSA9PiAoewogIGlkOiBpMTEgKyAxLAogIG5hbWU6IGBVc2VyICR7aTExICsgMX1gLAogIHJvbGU6IFsiRW5naW5lZXIiLCAiRGVzaWduZXIiLCAiTWFuYWdlciIsICJRQSIsICJTdXBwb3J0Il1baTExICUgNV0sCiAgZGVwYXJ0bWVudDogWyJSJkQiLCAiRGVzaWduIiwgIk9wcyIsICJRQSIsICJDUyJdW2kxMSAlIDVdLAogIGVtYWlsOiBgdXNlciR7aTExICsgMX1AY29ycC5jb21gLAogIHBob25lOiBgKzEgMjAyIDU1NSAke1N0cmluZygxZTMgKyBpMTEpLnNsaWNlKC00KX1gLAogIGxvY2F0aW9uOiBbIkJlcmxpbiIsICJQYXJpcyIsICJMb25kb24iLCAiTWFkcmlkIiwgIlJvbWUiXVtpMTEgJSA1XSwKICBzdGF0dXM6IFsiQWN0aXZlIiwgIkluYWN0aXZlIiwgIk9uIExlYXZlIl1baTExICUgM10sCiAgY3JlYXRlZEF0OiBgMjAyMy0ke1N0cmluZyhpMTEgJSAxMiArIDEpLnBhZFN0YXJ0KDIsICIwIil9LSR7U3RyaW5nKGkxMSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHVwZGF0ZWRBdDogYDIwMjQtJHtTdHJpbmcoKGkxMSArIDMpICUgMTIgKyAxKS5wYWRTdGFydCgyLCAiMCIpfS0ke1N0cmluZygoaTExICsgNykgJSAyOCArIDEpLnBhZFN0YXJ0KDIsICIwIil9YCwKICBsYXN0TG9naW46IGAyMDI0LSR7U3RyaW5nKChpMTEgKyA2KSAlIDEyICsgMSkucGFkU3RhcnQoMiwgIjAiKX0tJHtTdHJpbmcoKGkxMSArIDEwKSAlIDI4ICsgMSkucGFkU3RhcnQoMiwgIjAiKX1gLAogIHByb2plY3RzOiBpMTEgJSAxMiwKICB0YWdzOiBpMTEgJSAyID8gInR5cGVzY3JpcHQiIDogImRlc2lnbiIsCiAgbm90ZXM6IGkxMSAlIDMgPyAiIiA6ICJOb3RlIgp9KSl9CiAgICAgICAgICAuZGF0YUFjdGlvbnM9JHtbCiAgeyBuYW1lOiAiVmlldyIsIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsIHR5cGU6IFsiaW5Sb3ciXSwgYWN0aW9uRnVuYzogYXN5bmMgKHsgaXRlbSB9KSA9PiB7CiAgfSB9LAogIHsgbmFtZTogIkVkaXQiLCBpY29uTmFtZTogImx1Y2lkZTplZGl0IiwgdHlwZTogWyJpblJvdyJdLCBhY3Rpb25GdW5jOiBhc3luYyAoeyBpdGVtIH0pID0+IHsKICB9IH0sCiAgeyBuYW1lOiAiRGVsZXRlIiwgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2giLCB0eXBlOiBbImluUm93Il0sIGFjdGlvbkZ1bmM6IGFzeW5jICh7IGl0ZW0gfSkgPT4gewogIH0gfQpdfQogICAgICAgID48L2RlZXMtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIHRhYmxlU3R5bGVzID0gWwogIHRoZW1lRGVmYXVsdFN0eWxlcywKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLmhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAxNnB4IDI0cHg7CiAgICAgICAgbWluLWhlaWdodDogNjRweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLmhlYWRpbmcxIHsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQogICAgICAKICAgICAgLmhlYWRpbmcyIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQoKICAgICAgLmhlYWRpbmdTZXBhcmF0aW9uIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuaGVhZGVyQWN0aW9ucyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CiAgICAgIAogICAgICAuaGVhZGVyQWN0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5oZWFkZXJBY3Rpb246aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQoKICAgICAgLmhlYWRlckFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLnNlYXJjaEdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC1nYXA6IDE2cHg7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgbWF4LWNvbnRlbnQ7CiAgICAgICAgcGFkZGluZzogMTZweCAyNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogOTAwcHgpIHsKICAgICAgICAuc2VhcmNoR3JpZCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC8qIGxldCBzZWFyY2ggbW9kZSBzaXplIHRvIGNvbnRlbnQgKG5vIGZvcmNlZCB3aWR0aCkgKi8KCiAgICAgIC5zZWFyY2hHcmlkLmhpZGRlbiB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBhZGRpbmc6IDBweCAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b20td2lkdGg6IDBweDsKICAgICAgfQoKICAgICAgLnRhYmxlU2Nyb2xsIHsKICAgICAgICAvKiBlbmFibGUgaG9yaXpvbnRhbCBzY3JvbGwgb25seSB3aGVuIGNvbnRlbnQgZXhjZWVkcyB3aWR0aCAqLwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgLyogcHJldmVudCB2ZXJ0aWNhbCBzY3JvbGwgaW5zaWRlIHRoZSB0YWJsZSBjb250YWluZXIgKi8KICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgLyogYXZvaWQgcmVzZXJ2aW5nIGV4dHJhIHNwYWNlIGZvciBjbGFzc2ljIHNjcm9sbGJhcnMgd2hlcmUgcG9zc2libGUgKi8KICAgICAgICBzY3JvbGxiYXItZ3V0dGVyOiBzdGFibGUgYm90aC1lZGdlczsKICAgICAgfQogICAgICAvKiBIaWRlIGhvcml6b250YWwgc2Nyb2xsYmFyIGVudGlyZWx5IHdoZW4gbm90IHVzaW5nIHN0aWNreSBoZWFkZXIgKi8KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGwgewogICAgICAgIC1tcy1vdmVyZmxvdy1zdHlsZTogbm9uZTsgLyogSUUvRWRnZSAqLwogICAgICAgIHNjcm9sbGJhci13aWR0aDogbm9uZTsgICAvKiBGaXJlZm94IChoaWRlcyBib3RoIGF4ZXMpICovCiAgICAgIH0KICAgICAgOmhvc3QoOm5vdChbc3RpY2t5LWhlYWRlcl0pKSAudGFibGVTY3JvbGw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAvKiBDaHJvbWUvU2FmYXJpICovCiAgICAgIH0KICAgICAgLyogSW4gc3RpY2t5LWhlYWRlciBtb2RlLCBoaWRlIG9ubHkgdGhlIGhvcml6b250YWwgc2Nyb2xsYmFyIGluIFdlYktpdC9CbGluayAqLwogICAgICA6aG9zdChbc3RpY2t5LWhlYWRlcl0pIC50YWJsZVNjcm9sbDo6LXdlYmtpdC1zY3JvbGxiYXI6aG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSAudGFibGVTY3JvbGwgewogICAgICAgIG1heC1oZWlnaHQ6IHZhcigtLXRhYmxlLW1heC1oZWlnaHQsIDM2MHB4KTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIC8qIGFsbG93IHRhYmxlIHRvIGdyb3cgd2lkZXIgdGhhbiBjb250YWluZXIgc28gYWN0aW9ucyBjb2x1bW4gY2FuIHN0aWNrICovCiAgICAgICAgd2lkdGg6IG1heC1jb250ZW50OwogICAgICAgIG1pbi13aWR0aDogMTAwJTsKICAgICAgICBjYXB0aW9uLXNpZGU6IGJvdHRvbTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm5vRGF0YVNldCB7CiAgICAgICAgcGFkZGluZzogNDhweCAyNHB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRoZWFkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KICAgICAgOmhvc3QoW3N0aWNreS1oZWFkZXJdKSB0aGVhZCB0aCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgei1pbmRleDogMjsKICAgICAgfQogICAgICAKICAgICAgdGJvZHkgdHIgewogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIERlZmF1bHQgaG9yaXpvbnRhbCBsaW5lcyAoYm90dG9tIGJvcmRlciBvbmx5KSAqLwogICAgICB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpsYXN0LWNoaWxkIHsKICAgICAgICBib3JkZXItYm90dG9tOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBGdWxsIGhvcml6b250YWwgbGluZXMgd2hlbiBlbmFibGVkICovCiAgICAgIDpob3N0KFtzaG93LWhvcml6b250YWwtbGluZXNdKSB0Ym9keSB0ciB7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctaG9yaXpvbnRhbC1saW5lc10pIHRib2R5IHRyOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ob3Jpem9udGFsLWxpbmVzXSkgdGJvZHkgdHI6bGFzdC1jaGlsZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0Ym9keSB0cjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElIC8gMC41KSIsICJoc2woMCAwJSAxNC45JSAvIDAuNSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvbHVtbiBob3ZlciBlZmZlY3QgZm9yIGJldHRlciB0cmFjZWFiaWxpdHkgKi8KICAgICAgdGQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQogICAgICAKICAgICAgdGQ6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSAvIDAuMykiLCAiaHNsKDAgMCUgMTQuOSUgLyAwLjMpIil9OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICB0ZDpob3Zlcjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEdyaWQgbW9kZSAtIHNob3dzIGJvdGggdmVydGljYWwgYW5kIGhvcml6b250YWwgbGluZXMgKi8KICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRoIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGQgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LWdyaWRdKSB0aDpmaXJzdC1jaGlsZCwKICAgICAgOmhvc3QoW3Nob3ctZ3JpZF0pIHRkOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbc2hvdy1ncmlkXSkgdGJvZHkgdHI6Zmlyc3QtY2hpbGQgdGQgewogICAgICAgIGJvcmRlci10b3A6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFN0aWNreSBBY3Rpb25zIGNvbHVtbiAocmlnaHQgcGlubmVkKSAqLwogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sLAogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICBwb3NpdGlvbjogc3RpY2t5OwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQogICAgICB0aGVhZCB0aC5hY3Rpb25zQ29sIHsgei1pbmRleDogMzsgfQogICAgICB0Ym9keSB0ZC5hY3Rpb25zQ29sIHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIGJveC1zaGFkb3c6IC0xcHggMCAwIDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRib2R5IHRyLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgfQoKICAgICAgdGJvZHkgdHIuaGFzQXR0YWNobWVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgdGggewogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aCB7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIHRkIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDI0cHg7CiAgICAgICAgdmVydGljYWwtYWxpZ246IG1pZGRsZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtzaG93LXZlcnRpY2FsLWxpbmVzXSkgdGQgewogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CiAgICAgIAogICAgICB0aDpmaXJzdC1jaGlsZCwKICAgICAgdGQ6Zmlyc3QtY2hpbGQgewogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgdGg6bGFzdC1jaGlsZCwKICAgICAgdGQ6bGFzdC1jaGlsZCB7CiAgICAgICAgcGFkZGluZy1yaWdodDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgOmhvc3QoW3Nob3ctdmVydGljYWwtbGluZXNdKSB0aDpsYXN0LWNoaWxkLAogICAgICA6aG9zdChbc2hvdy12ZXJ0aWNhbC1saW5lc10pIHRkOmxhc3QtY2hpbGQgewogICAgICAgIGJvcmRlci1yaWdodDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmlubmVyQ2VsbENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1pbi1oZWlnaHQ6IDI0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDI0cHg7CiAgICAgIH0KICAgICAgdGQgaW5wdXQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICBsZWZ0OiAyMHB4OwogICAgICAgIHJpZ2h0OiAyMHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSA0MHB4KTsKICAgICAgICBoZWlnaHQ6IGNhbGMoMTAwJSAtIDhweCk7CiAgICAgICAgcGFkZGluZzogMCAxMnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGZvbnQtc2l6ZTogaW5oZXJpdDsKICAgICAgICBmb250LXdlaWdodDogaW5oZXJpdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQogICAgICAKICAgICAgdGQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMikiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLyogZmlsdGVyIHJvdyAqLwogICAgICB0aGVhZCB0ci5maWx0ZXJzUm93IHRoIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCAxMnB4IDEycHg7CiAgICAgIH0KICAgICAgdGhlYWQgdHIuZmlsdGVyc1JvdyB0aCBpbnB1dFt0eXBlPSd0ZXh0J10gewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzLjklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICB9CiAgICAgIC5hY3Rpb25zQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDExLjglKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmFjdGlvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLmZvb3RlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBoZWlnaHQ6IDUycHg7CiAgICAgICAgcGFkZGluZzogMCAyNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAudGFibGVTdGF0aXN0aWNzIHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuZm9vdGVyQWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmZvb3RlckFjdGlvbnMgLmZvb3RlckFjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgIH0KCiAgICAgIC5mb290ZXJBY3Rpb25zIC5mb290ZXJBY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdGFibGUvZGF0YS5qcwpmdW5jdGlvbiBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKSB7CiAgaWYgKCFkYXRhIHx8IGRhdGEubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIFtdOwogIGNvbnN0IGZpcnN0VHJhbnNmb3JtZWRJdGVtID0gZGlzcGxheUZ1bmN0aW9uKGRhdGFbMF0pOwogIGNvbnN0IGtleXMyID0gT2JqZWN0LmtleXMoZmlyc3RUcmFuc2Zvcm1lZEl0ZW0pOwogIHJldHVybiBrZXlzMi5tYXAoKGtleTIpID0+ICh7CiAgICBrZXk6IGtleTIsCiAgICBoZWFkZXI6IGtleTIsCiAgICB2YWx1ZTogKHJvdykgPT4gZGlzcGxheUZ1bmN0aW9uKHJvdylba2V5Ml0KICB9KSk7Cn0KZnVuY3Rpb24gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnMoY29sdW1ucywgYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24sIGRpc3BsYXlGdW5jdGlvbiwgZGF0YSkgewogIGNvbnN0IGJhc2UgPSAoY29sdW1ucyB8fCBbXSkuc2xpY2UoKTsKICBpZiAoIWF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKQogICAgcmV0dXJuIGJhc2U7CiAgY29uc3QgZnJvbURpc3BsYXkgPSBjb21wdXRlQ29sdW1uc0Zyb21EaXNwbGF5RnVuY3Rpb24oZGlzcGxheUZ1bmN0aW9uLCBkYXRhKTsKICBjb25zdCBleGlzdGluZ0tleXMgPSBuZXcgU2V0KGJhc2UubWFwKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSkpOwogIGZvciAoY29uc3QgY29sIG9mIGZyb21EaXNwbGF5KSB7CiAgICBpZiAoIWV4aXN0aW5nS2V5cy5oYXMoU3RyaW5nKGNvbC5rZXkpKSkgewogICAgICBiYXNlLnB1c2goY29sKTsKICAgIH0KICB9CiAgcmV0dXJuIGJhc2U7Cn0KZnVuY3Rpb24gZ2V0Q2VsbFZhbHVlKHJvdywgY29sLCBkaXNwbGF5RnVuY3Rpb24pIHsKICByZXR1cm4gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07Cn0KZnVuY3Rpb24gZ2V0Vmlld0RhdGEoZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgc29ydEtleSwgc29ydERpciwgZmlsdGVyVGV4dCwgY29sdW1uRmlsdGVycywgZmlsdGVyTW9kZSA9ICJ0YWJsZSIsIGx1Y2VuZVByZWRpY2F0ZSkgewogIGxldCBhcnIgPSBkYXRhLnNsaWNlKCk7CiAgY29uc3QgZnQgPSAoZmlsdGVyVGV4dCB8fCAiIikudHJpbSgpLnRvTG93ZXJDYXNlKCk7CiAgY29uc3QgY2YgPSBjb2x1bW5GaWx0ZXJzIHx8IHt9OwogIGNvbnN0IGNmS2V5cyA9IE9iamVjdC5rZXlzKGNmKS5maWx0ZXIoKGs0KSA9PiAoY2ZbazRdID8/ICIiKS50cmltKCkubGVuZ3RoID4gMCk7CiAgaWYgKGZ0IHx8IGNmS2V5cy5sZW5ndGggPiAwKSB7CiAgICBhcnIgPSBhcnIuZmlsdGVyKChyb3cpID0+IHsKICAgICAgZm9yIChjb25zdCBrNCBvZiBjZktleXMpIHsKICAgICAgICBpZiAoZmlsdGVyTW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICBjb25zdCB2YWwgPSByb3dbazRdOwogICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbmVlZGxlID0gU3RyaW5nKGNmW2s0XSkudG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmICghczkuaW5jbHVkZXMobmVlZGxlKSkKICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBjb2wyID0gZWZmZWN0aXZlQ29sdW1ucy5maW5kKChjMTEpID0+IFN0cmluZyhjMTEua2V5KSA9PT0gazQpOwogICAgICAgICAgaWYgKCFjb2wyIHx8IGNvbDIuaGlkZGVuIHx8IGNvbDIuZmlsdGVyYWJsZSA9PT0gZmFsc2UpCiAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgY29uc3QgdmFsID0gZ2V0Q2VsbFZhbHVlKHJvdywgY29sMik7CiAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICBjb25zdCBuZWVkbGUgPSBTdHJpbmcoY2ZbazRdKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgaWYgKCFzOS5pbmNsdWRlcyhuZWVkbGUpKQogICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChmdCkgewogICAgICAgIGlmIChsdWNlbmVQcmVkaWNhdGUpIHsKICAgICAgICAgIGlmICghbHVjZW5lUHJlZGljYXRlKHJvdykpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgICBsZXQgYW55ID0gZmFsc2U7CiAgICAgICAgaWYgKGZpbHRlck1vZGUgPT09ICJkYXRhIikgewogICAgICAgICAgZm9yIChjb25zdCB2YWwgb2YgT2JqZWN0LnZhbHVlcyhyb3cpKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgaWYgKHM5LmluY2x1ZGVzKGZ0KSkgewogICAgICAgICAgICAgIGFueSA9IHRydWU7CiAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgewogICAgICAgICAgZm9yIChjb25zdCBjb2wyIG9mIGVmZmVjdGl2ZUNvbHVtbnMpIHsKICAgICAgICAgICAgaWYgKGNvbDIuaGlkZGVuKQogICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBnZXRDZWxsVmFsdWUocm93LCBjb2wyKTsKICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICBpZiAoczkuaW5jbHVkZXMoZnQpKSB7CiAgICAgICAgICAgICAgYW55ID0gdHJ1ZTsKICAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoIWFueSkKICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgfQogICAgICByZXR1cm4gdHJ1ZTsKICAgIH0pOwogIH0KICBpZiAoIXNvcnRLZXkgfHwgIXNvcnREaXIpCiAgICByZXR1cm4gYXJyOwogIGNvbnN0IGNvbCA9IGVmZmVjdGl2ZUNvbHVtbnMuZmluZCgoYzExKSA9PiBTdHJpbmcoYzExLmtleSkgPT09IHNvcnRLZXkpOwogIGlmICghY29sKQogICAgcmV0dXJuIGFycjsKICBjb25zdCBkaXIgPSBzb3J0RGlyID09PSAiYXNjIiA/IDEgOiAtMTsKICBhcnIuc29ydCgoYTUsIGI1KSA9PiB7CiAgICBjb25zdCB2YSA9IGdldENlbGxWYWx1ZShhNSwgY29sKTsKICAgIGNvbnN0IHZiID0gZ2V0Q2VsbFZhbHVlKGI1LCBjb2wpOwogICAgaWYgKHZhID09IG51bGwgJiYgdmIgPT0gbnVsbCkKICAgICAgcmV0dXJuIDA7CiAgICBpZiAodmEgPT0gbnVsbCkKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHZiID09IG51bGwpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgaWYgKHR5cGVvZiB2YSA9PT0gIm51bWJlciIgJiYgdHlwZW9mIHZiID09PSAibnVtYmVyIikKICAgICAgcmV0dXJuICh2YSAtIHZiKSAqIGRpcjsKICAgIGNvbnN0IHNhID0gU3RyaW5nKHZhKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3Qgc2IgPSBTdHJpbmcodmIpLnRvTG93ZXJDYXNlKCk7CiAgICBpZiAoc2EgPCBzYikKICAgICAgcmV0dXJuIC0xICogZGlyOwogICAgaWYgKHNhID4gc2IpCiAgICAgIHJldHVybiAxICogZGlyOwogICAgcmV0dXJuIDA7CiAgfSk7CiAgcmV0dXJuIGFycjsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2x1Y2VuZS5qcwpmdW5jdGlvbiBzdHJpcFF1b3RlcyhzOSkgewogIGlmIChzOS5zdGFydHNXaXRoKCciJykgJiYgczkuZW5kc1dpdGgoJyInKSB8fCBzOS5zdGFydHNXaXRoKCInIikgJiYgczkuZW5kc1dpdGgoIiciKSkgewogICAgcmV0dXJuIHM5LnNsaWNlKDEsIC0xKTsKICB9CiAgcmV0dXJuIHM5Owp9CmZ1bmN0aW9uIHNwbGl0QnlPcihpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrT1JccysvaSkubWFwKChzOSkgPT4gczkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik7Cn0KZnVuY3Rpb24gc3BsaXRCeUFuZChpbnB1dCkgewogIHJldHVybiBpbnB1dC5zcGxpdCgvXHMrQU5EXHMrL2kpLm1hcCgoczkpID0+IHM5LnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOwp9CmZ1bmN0aW9uIHBhcnNlVGVybShyYXcyKSB7CiAgaWYgKCFyYXcyKQogICAgcmV0dXJuIG51bGw7CiAgbGV0IG5lZ2F0ZSA9IGZhbHNlOwogIGNvbnN0IG5vdE1hdGNoID0gcmF3Mi5tYXRjaCgvXlxzKihOT1Rccyt8LSlccyooLiopJC9pKTsKICBpZiAobm90TWF0Y2gpIHsKICAgIG5lZ2F0ZSA9IHRydWU7CiAgICByYXcyID0gbm90TWF0Y2hbMl07CiAgfQogIGNvbnN0IHJhbmdlTWF0Y2ggPSByYXcyLm1hdGNoKC9eKFteOlxzXSspXHMqOlxzKlxbKC4qPylccytUT1xzKyguKj8pXF0kL2kpOwogIGlmIChyYW5nZU1hdGNoKSB7CiAgICByZXR1cm4gewogICAgICBmaWVsZDogcmFuZ2VNYXRjaFsxXSwKICAgICAgbmVnYXRlLAogICAgICByYW5nZTogeyBsb3dlcjogc3RyaXBRdW90ZXMocmFuZ2VNYXRjaFsyXSkudG9Mb3dlckNhc2UoKSwgdXBwZXI6IHN0cmlwUXVvdGVzKHJhbmdlTWF0Y2hbM10pLnRvTG93ZXJDYXNlKCksIGluY2x1c2l2ZTogdHJ1ZSB9CiAgICB9OwogIH0KICBjb25zdCBtNiA9IHJhdzIubWF0Y2goL14oW146XHNdKylccyo6XHMqKCJbXiJdKiJ8J1teJ10qJ3xbXiInXHNdKykkLyk7CiAgaWYgKG02KSB7CiAgICByZXR1cm4geyBmaWVsZDogbTZbMV0sIHZhbHVlOiBzdHJpcFF1b3RlcyhtNlsyXSkudG9Mb3dlckNhc2UoKSwgbmVnYXRlIH07CiAgfQogIGlmIChyYXcyLmxlbmd0aCA+IDApIHsKICAgIHJldHVybiB7IHZhbHVlOiBzdHJpcFF1b3RlcyhyYXcyKS50b0xvd2VyQ2FzZSgpLCBuZWdhdGUgfTsKICB9CiAgcmV0dXJuIG51bGw7Cn0KZnVuY3Rpb24gcGFyc2VMdWNlbmUoaW5wdXQpIHsKICBpZiAoIWlucHV0KQogICAgcmV0dXJuIG51bGw7CiAgY29uc3QgY2xhdXNlcyA9IHNwbGl0QnlPcihpbnB1dCkubWFwKChjbGF1c2VTdHIpID0+IHsKICAgIGNvbnN0IHRlcm1zID0gc3BsaXRCeUFuZChjbGF1c2VTdHIpLm1hcChwYXJzZVRlcm0pLmZpbHRlcigodDkpID0+ICEhdDkgJiYgISF0OS52YWx1ZSk7CiAgICByZXR1cm4geyB0ZXJtcyB9OwogIH0pLmZpbHRlcigoYzExKSA9PiBjMTEudGVybXMubGVuZ3RoID4gMCk7CiAgaWYgKGNsYXVzZXMubGVuZ3RoID09PSAwKQogICAgcmV0dXJuIG51bGw7CiAgcmV0dXJuIHsgY2xhdXNlcyB9Owp9CmZ1bmN0aW9uIGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUoaW5wdXQsIG1vZGUsIGNvbHVtbnMpIHsKICBjb25zdCBhc3QgPSBwYXJzZUx1Y2VuZShpbnB1dCk7CiAgaWYgKCFhc3QpCiAgICByZXR1cm4gbnVsbDsKICBjb25zdCBjb2xNYXAgPSBuZXcgTWFwKGNvbHVtbnMubWFwKChjMTEpID0+IFtTdHJpbmcoYzExLmtleSksIGMxMV0pKTsKICBjb25zdCBjbXAgPSAoYTUsIGI1KSA9PiBhNSA8IGI1ID8gLTEgOiBhNSA+IGI1ID8gMSA6IDA7CiAgY29uc3QgY29lcmNlMiA9IChzOSkgPT4gewogICAgY29uc3Qgc3RyID0gU3RyaW5nKHM5ID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgbnVtID0gTnVtYmVyKHN0cik7CiAgICBjb25zdCBkYXRlID0gRGF0ZS5wYXJzZShzdHIpOwogICAgaWYgKCFOdW1iZXIuaXNOYU4obnVtKSAmJiBzdHIudHJpbSgpICE9PSAiIikKICAgICAgcmV0dXJuIHsgdDogIm4iLCB2OiBudW0gfTsKICAgIGlmICghTnVtYmVyLmlzTmFOKGRhdGUpKQogICAgICByZXR1cm4geyB0OiAiZCIsIHY6IGRhdGUgfTsKICAgIHJldHVybiB7IHQ6ICJzIiwgdjogc3RyIH07CiAgfTsKICBjb25zdCBpblJhbmdlID0gKHZhbCwgbG93ZXIsIHVwcGVyKSA9PiB7CiAgICBjb25zdCBhNSA9IGNvZXJjZTIodmFsKTsKICAgIGNvbnN0IGxvID0gY29lcmNlMihsb3dlcik7CiAgICBjb25zdCB1cCA9IGNvZXJjZTIodXBwZXIpOwogICAgaWYgKGE1LnQgPT09ICJzIiAmJiBsby50ID09PSAicyIgJiYgdXAudCA9PT0gInMiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGNtcChhdiwgbG8udikgPj0gMCAmJiBjbXAoYXYsIHVwLnYpIDw9IDA7CiAgICB9CiAgICBpZiAoYTUudCA9PT0gIm4iICYmIGxvLnQgPT09ICJuIiAmJiB1cC50ID09PSAibiIpIHsKICAgICAgY29uc3QgYXYgPSBhNS52OwogICAgICByZXR1cm4gYXYgPj0gbG8udiAmJiBhdiA8PSB1cC52OwogICAgfQogICAgaWYgKGE1LnQgPT09ICJkIiAmJiBsby50ID09PSAiZCIgJiYgdXAudCA9PT0gImQiKSB7CiAgICAgIGNvbnN0IGF2ID0gYTUudjsKICAgICAgcmV0dXJuIGF2ID49IGxvLnYgJiYgYXYgPD0gdXAudjsKICAgIH0KICAgIGNvbnN0IGFzID0gU3RyaW5nKHZhbCA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgIHJldHVybiBjbXAoYXMsIGxvd2VyKSA+PSAwICYmIGNtcChhcywgdXBwZXIpIDw9IDA7CiAgfTsKICByZXR1cm4gKHJvdykgPT4gewogICAgZm9yIChjb25zdCBjbGF1c2Ugb2YgYXN0LmNsYXVzZXMpIHsKICAgICAgbGV0IGNsYXVzZU9rID0gdHJ1ZTsKICAgICAgZm9yIChjb25zdCB0ZXJtIG9mIGNsYXVzZS50ZXJtcykgewogICAgICAgIGxldCBvazMgPSBmYWxzZTsKICAgICAgICBpZiAodGVybS5yYW5nZSAmJiB0ZXJtLmZpZWxkKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIG9rMyA9IGluUmFuZ2Uocm93W3Rlcm0uZmllbGRdLCB0ZXJtLnJhbmdlLmxvd2VyLCB0ZXJtLnJhbmdlLnVwcGVyKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIGNvbnN0IGNvbCA9IGNvbE1hcC5nZXQodGVybS5maWVsZCk7CiAgICAgICAgICAgIGlmICghY29sIHx8IGNvbC5oaWRkZW4pIHsKICAgICAgICAgICAgICBvazMgPSBmYWxzZTsKICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBvazMgPSBpblJhbmdlKHZhbCwgdGVybS5yYW5nZS5sb3dlciwgdGVybS5yYW5nZS51cHBlcik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9IGVsc2UgaWYgKHRlcm0uZmllbGQgJiYgdGVybS52YWx1ZSAhPSBudWxsKSB7CiAgICAgICAgICBpZiAobW9kZSA9PT0gImRhdGEiKSB7CiAgICAgICAgICAgIGNvbnN0IHM5ID0gU3RyaW5nKHJvd1t0ZXJtLmZpZWxkXSA/PyAiIikudG9Mb3dlckNhc2UoKTsKICAgICAgICAgICAgb2szID0gczkuaW5jbHVkZXModGVybS52YWx1ZSk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBjb25zdCBjb2wgPSBjb2xNYXAuZ2V0KHRlcm0uZmllbGQpOwogICAgICAgICAgICBpZiAoIWNvbCB8fCBjb2wuaGlkZGVuID09PSB0cnVlKSB7CiAgICAgICAgICAgICAgb2szID0gZmFsc2U7CiAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgY29uc3QgdmFsID0gY29sLnZhbHVlID8gY29sLnZhbHVlKHJvdykgOiByb3dbY29sLmtleV07CiAgICAgICAgICAgICAgY29uc3QgczkgPSBTdHJpbmcodmFsID8/ICIiKS50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgICAgIG9rMyA9IHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0ZXJtLnZhbHVlICE9IG51bGwpIHsKICAgICAgICAgIGlmIChtb2RlID09PSAiZGF0YSIpIHsKICAgICAgICAgICAgb2szID0gT2JqZWN0LnZhbHVlcyhyb3cpLnNvbWUoKHY1KSA9PiBTdHJpbmcodjUgPz8gIiIpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGVybS52YWx1ZSkpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgb2szID0gY29sdW1ucy5zb21lKChjb2wpID0+IHsKICAgICAgICAgICAgICBpZiAoY29sLmhpZGRlbikKICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICBjb25zdCB2YWwgPSBjb2wudmFsdWUgPyBjb2wudmFsdWUocm93KSA6IHJvd1tjb2wua2V5XTsKICAgICAgICAgICAgICBjb25zdCBzOSA9IFN0cmluZyh2YWwgPz8gIiIpLnRvTG93ZXJDYXNlKCk7CiAgICAgICAgICAgICAgcmV0dXJuIHM5LmluY2x1ZGVzKHRlcm0udmFsdWUpOwogICAgICAgICAgICB9KTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKHRlcm0ubmVnYXRlKQogICAgICAgICAgb2szID0gIW9rMzsKICAgICAgICBpZiAoIW9rMykgewogICAgICAgICAgY2xhdXNlT2sgPSBmYWxzZTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY2xhdXNlT2spCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICByZXR1cm4gZmFsc2U7CiAgfTsKfQoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRhYmxlL2RlZXMtdGFibGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlMzIgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczMzID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGFibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRhYmxlIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfaGVhZGluZzFfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmcxX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nMl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hlYWRpbmcyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kYXRhX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfa2V5X2RlY29yYXRvcnM7CiAgbGV0IF9rZXlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9rZXlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZGVjb3JhdG9yczsKICBsZXQgX3JlcXVpcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVxdWlyZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9kYXRhTmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2RhdGFBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3dLZXlfZGVjb3JhdG9yczsKICBsZXQgX3Jvd0tleV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jvd0tleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9yczsKICBsZXQgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Rpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRhYmxlRmllbGRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd1ZlcnRpY2FsTGluZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0hvcml6b250YWxMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93R3JpZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zb3J0S2V5X2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0S2V5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydEtleV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc29ydERpcl9kZWNvcmF0b3JzOwogIGxldCBfc29ydERpcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnREaXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlclRleHRfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dDb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzOwogIGxldCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RpY2t5SGVhZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWFyY2hNb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZElkc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUYWJsZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nMV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfaGVhZGluZzJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2RhdGFfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfa2V5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfZGlzYWJsZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9yZXF1aXJlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX2RhdGFOYW1lX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX3NlYXJjaGFibGVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9kYXRhQWN0aW9uc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9jb2x1bW5zX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Jvd0tleV9kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9kaXNwbGF5RnVuY3Rpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgYXR0cmlidXRlOiBmYWxzZQogICAgICB9KV07CiAgICAgIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIGF0dHJpYnV0ZTogZmFsc2UKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWREYXRhUm93X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9lZGl0YWJsZUZpZWxkc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9zaG93VmVydGljYWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy12ZXJ0aWNhbC1saW5lcyIKICAgICAgfSldOwogICAgICBfc2hvd0hvcml6b250YWxMaW5lc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ob3Jpem9udGFsLWxpbmVzIgogICAgICB9KV07CiAgICAgIF9zaG93R3JpZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgYXR0cmlidXRlOiAic2hvdy1ncmlkIgogICAgICB9KV07CiAgICAgIF9zb3J0S2V5X2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3NvcnREaXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfZmlsdGVyVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIGF0dHJpYnV0ZTogInNob3ctY29sdW1uLWZpbHRlcnMiIH0pXTsKICAgICAgX3N0aWNreUhlYWRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSwgYXR0cmlidXRlOiAic3RpY2t5LWhlYWRlciIgfSldOwogICAgICBfc2VhcmNoTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZElkc19kZWNvcmF0b3JzID0gW241KHsgYXR0cmlidXRlOiBmYWxzZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9oZWFkaW5nMV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nMSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZzEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaGVhZGluZzEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcxID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmcxX2luaXRpYWxpemVycywgX2hlYWRpbmcxX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2hlYWRpbmcyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhlYWRpbmcyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nMiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nMiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGVhZGluZzIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZzJfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZzJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YV9pbml0aWFsaXplcnMsIF9kYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJrZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImtleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5rZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9rZXlfaW5pdGlhbGl6ZXJzLCBfa2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9yZXF1aXJlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXF1aXJlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVxdWlyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVxdWlyZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlcXVpcmVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlcXVpcmVkX2luaXRpYWxpemVycywgX3JlcXVpcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFOYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFOYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhTmFtZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhTmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YU5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YU5hbWVfaW5pdGlhbGl6ZXJzLCBfZGF0YU5hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VhcmNoYWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWFyY2hhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlYXJjaGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIF9zZWFyY2hhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2RhdGFBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRhdGFBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkYXRhQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kYXRhQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGF0YUFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGF0YUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZGF0YUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfY29sdW1uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2x1bW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2x1bW5zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbHVtbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbHVtbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29sdW1uc19pbml0aWFsaXplcnMsIF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3Jvd0tleV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyb3dLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvd0tleSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb3dLZXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJvd0tleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3dLZXlfaW5pdGlhbGl6ZXJzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfZGlzcGxheUZ1bmN0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpc3BsYXlGdW5jdGlvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc3BsYXlGdW5jdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlzcGxheUZ1bmN0aW9uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9kaXNwbGF5RnVuY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXZlcnNlRGlzcGxheUZ1bmN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJldmVyc2VEaXNwbGF5RnVuY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIF9yZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkRGF0YVJvd19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZERhdGFSb3ciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkRGF0YVJvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZERhdGFSb3csIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkRGF0YVJvdyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZERhdGFSb3dfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWREYXRhUm93X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2VkaXRhYmxlRmllbGRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImVkaXRhYmxlRmllbGRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJlZGl0YWJsZUZpZWxkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0YWJsZUZpZWxkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZWRpdGFibGVGaWVsZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZWRpdGFibGVGaWVsZHNfaW5pdGlhbGl6ZXJzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd1ZlcnRpY2FsTGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1ZlcnRpY2FsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dWZXJ0aWNhbExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dWZXJ0aWNhbExpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VmVydGljYWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zaG93SG9yaXpvbnRhbExpbmVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dIb3Jpem9udGFsTGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dIb3Jpem9udGFsTGluZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0hvcml6b250YWxMaW5lcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0hvcml6b250YWxMaW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93SG9yaXpvbnRhbExpbmVzX2luaXRpYWxpemVycywgX3Nob3dIb3Jpem9udGFsTGluZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0dyaWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0dyaWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dHcmlkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93R3JpZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93R3JpZF9pbml0aWFsaXplcnMsIF9zaG93R3JpZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zb3J0S2V5X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRLZXkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNvcnRLZXkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc29ydEtleSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydEtleSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zb3J0S2V5X2luaXRpYWxpemVycywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc29ydERpcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzb3J0RGlyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0RGlyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNvcnREaXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNvcnREaXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydERpcl9pbml0aWFsaXplcnMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX2ZpbHRlclRleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJUZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJUZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlclRleHRfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9jb2x1bW5GaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbHVtbkZpbHRlcnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29sdW1uRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2x1bW5GaWx0ZXJzX2luaXRpYWxpemVycywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2hvd0NvbHVtbkZpbHRlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0NvbHVtbkZpbHRlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dDb2x1bW5GaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dDb2x1bW5GaWx0ZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93Q29sdW1uRmlsdGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIF9zaG93Q29sdW1uRmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zdGlja3lIZWFkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RpY2t5SGVhZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGlja3lIZWFkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RpY2t5SGVhZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGlja3lIZWFkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgX3N0aWNreUhlYWRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTMyKHRoaXMsIG51bGwsIF9zZWFyY2hNb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlYXJjaE1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlYXJjaE1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VhcmNoTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgX3NlYXJjaE1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMih0aGlzLCBudWxsLCBfc2VsZWN0aW9uTW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3Rpb25Nb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3Rpb25Nb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGlvbk1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGlvbk1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzIodGhpcywgbnVsbCwgX3NlbGVjdGVkSWRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSWRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZElkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZElkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRJZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUYWJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI0OwogICAgI2hlYWRpbmcxX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMV9pbml0aWFsaXplcnMsICJoZWFkaW5nIDEiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgaGVhZGluZzEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcxKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hlYWRpbmcyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfaGVhZGluZzFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9pbml0aWFsaXplcnMsICJoZWFkaW5nIDIiKSk7CiAgICBnZXQgaGVhZGluZzIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcyKHZhbHVlMikgewogICAgICB0aGlzLiNoZWFkaW5nMl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9oZWFkaW5nMl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGRhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9rZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIGRlZXMtZm9ybSBjb21wYXRpYmlsaXR5IC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiAgICBnZXQga2V5KCkgewogICAgICByZXR1cm4gdGhpcy4ja2V5X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQga2V5KHZhbHVlMikgewogICAgICB0aGlzLiNrZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2tleV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgZGlzYWJsZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpc2FibGVkKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNhYmxlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JlcXVpcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzYWJsZWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVxdWlyZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlcXVpcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNyZXF1aXJlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy5kYXRhOwogICAgfQogICAgc2V0IHZhbHVlKF92YWx1ZUFyZykgewogICAgfQogICAgY2hhbmdlU3ViamVjdCA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9yZXF1aXJlZF9leHRyYUluaXRpYWxpemVycyksIG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKSk7CiAgICAjZGF0YU5hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIC8vIGVuZCBkZWVzLWZvcm0gY29tcGF0aWJpbGl0eSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogICAgLyoqCiAgICAgKiBXaGF0IGRvZXMgYSByb3cgb2YgZGF0YSByZXByZXNlbnQ/CiAgICAgKi8KICAgIGdldCBkYXRhTmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGF0YU5hbWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RhdGFOYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2RhdGFOYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoYWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzZWFyY2hhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VhcmNoYWJsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlYXJjaGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlYXJjaGFibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGF0YUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRhdGFBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNkYXRhQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9kYXRhQWN0aW9uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gc2NoZW1hLWZpcnN0IGNvbHVtbnMgQVBJCiAgICBnZXQgY29sdW1ucygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbHVtbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2x1bW5zKHZhbHVlMikgewogICAgICB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm93S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Jvd0tleV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgLyoqCiAgICAgKiBTdGFibGUgcm93IGlkZW50aXR5IGZvciBzZWxlY3Rpb24gYW5kIHVwZGF0ZXMuIElmIHByb3ZpZGVkIGFzIGEgZnVuY3Rpb24sCiAgICAgKiBpdCBpcyBvbmx5IHVzYWJsZSBhcyBhIHByb3BlcnR5IChub3QgdmlhIGF0dHJpYnV0ZSkuCiAgICAgKi8KICAgIGdldCByb3dLZXkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyb3dLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByb3dLZXkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvd0tleV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcm93S2V5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLyoqCiAgICAgKiBXaGVuIHRydWUgYW5kIGNvbHVtbnMgYXJlIHByb3ZpZGVkLCBtZXJnZSBhbnkgbWlzc2luZyBjb2x1bW5zIGRpc2NvdmVyZWQKICAgICAqIHZpYSBkaXNwbGF5RnVuY3Rpb24gaW50byB0aGUgZWZmZWN0aXZlIHNjaGVtYS4KICAgICAqLwogICAgZ2V0IGF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXVnbWVudEZyb21EaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9hdWdtZW50RnJvbURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2Rpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgZGlzcGxheUZ1bmN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZGlzcGxheUZ1bmN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9pbml0aWFsaXplcnMsIChpdGVtQXJnKSA9PiBpdGVtQXJnKSk7CiAgICBnZXQgcmV2ZXJzZURpc3BsYXlGdW5jdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JldmVyc2VEaXNwbGF5RnVuY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZXZlcnNlRGlzcGxheUZ1bmN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNyZXZlcnNlRGlzcGxheUZ1bmN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfcmV2ZXJzZURpc3BsYXlGdW5jdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkRGF0YVJvd19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkRGF0YVJvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkRGF0YVJvd19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkRGF0YVJvdyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWREYXRhUm93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZWRpdGFibGVGaWVsZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3RlZERhdGFSb3dfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9lZGl0YWJsZUZpZWxkc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZWRpdGFibGVGaWVsZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGVkaXRhYmxlRmllbGRzKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0YWJsZUZpZWxkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dWZXJ0aWNhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZWRpdGFibGVGaWVsZHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd1ZlcnRpY2FsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dWZXJ0aWNhbExpbmVzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VmVydGljYWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dIb3Jpem9udGFsTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93VmVydGljYWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dIb3Jpem9udGFsTGluZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHNob3dIb3Jpem9udGFsTGluZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93SG9yaXpvbnRhbExpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0hvcml6b250YWxMaW5lcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0hvcml6b250YWxMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2hvd0hvcml6b250YWxMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dHcmlkKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93R3JpZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0dyaWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGZpbGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dHcmlkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgW10pOwogICAgZmlsZVdlYWtNYXAgPSAvKiBAX19QVVJFX18gKi8gbmV3IFdlYWtNYXAoKTsKICAgIGRhdGFDaGFuZ2VTdWJqZWN0ID0gbmV3IGRvbXRvb2xzX3BsdWdpbmV4cG9ydHNfZXhwb3J0cy5zbWFydHJ4LnJ4anMuU3ViamVjdCgpOwogICAgI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gc2ltcGxlIGNsaWVudC1zaWRlIHNvcnRpbmcgKFBoYXNlIDEpCiAgICBnZXQgc29ydEtleSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRLZXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzb3J0S2V5KHZhbHVlMikgewogICAgICB0aGlzLiNzb3J0S2V5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NvcnRLZXlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNvcnREaXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzb3J0RGlyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydERpcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc29ydERpcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlclRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zb3J0RGlyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfZmlsdGVyVGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICAvLyBzaW1wbGUgY2xpZW50LXNpZGUgZmlsdGVyaW5nIChQaGFzZSAxKQogICAgZ2V0IGZpbHRlclRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJUZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9maWx0ZXJUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfY29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIHt9KSk7CiAgICAvLyBwZXItY29sdW1uIHF1aWNrIGZpbHRlcnMKICAgIGdldCBjb2x1bW5GaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbHVtbkZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbHVtbkZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX2NvbHVtbkZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zaG93Q29sdW1uRmlsdGVyc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2hvd0NvbHVtbkZpbHRlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dDb2x1bW5GaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93Q29sdW1uRmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3Nob3dDb2x1bW5GaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc3RpY2t5SGVhZGVyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzdGlja3lIZWFkZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGlja3lIZWFkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGlja3lIZWFkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0aWNreUhlYWRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaE1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zdGlja3lIZWFkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWFyY2hNb2RlX2luaXRpYWxpemVycywgInRhYmxlIikpOwogICAgLy8gc2VhcmNoIHJvdyBzdGF0ZQogICAgZ2V0IHNlYXJjaE1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VhcmNoTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VhcmNoTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX19zZWFyY2hUZXh0U3ViID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VhcmNoTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICBfX3NlYXJjaE1vZGVTdWI7CiAgICAjc2VsZWN0aW9uTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0aW9uTW9kZV9pbml0aWFsaXplcnMsICJub25lIik7CiAgICAvLyBzZWxlY3Rpb24gKFBoYXNlIDEpCiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczMzKHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzMyh0aGlzLCBfc2VsZWN0ZWRJZHNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICBnZXQgc2VsZWN0ZWRJZHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSWRzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZElkc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgX3Jvd0lkTWFwID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzModGhpcywgX3NlbGVjdGVkSWRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBXZWFrTWFwKCkpOwogICAgX3Jvd0lkQ291bnRlciA9IDA7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSB0YWJsZVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgdXNpbmdDb2x1bW5zID0gQXJyYXkuaXNBcnJheSh0aGlzLmNvbHVtbnMpICYmIHRoaXMuY29sdW1ucy5sZW5ndGggPiAwOwogICAgICBjb25zdCBlZmZlY3RpdmVDb2x1bW5zID0gdXNpbmdDb2x1bW5zID8gY29tcHV0ZUVmZmVjdGl2ZUNvbHVtbnModGhpcy5jb2x1bW5zLCB0aGlzLmF1Z21lbnRGcm9tRGlzcGxheUZ1bmN0aW9uLCB0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKSA6IGNvbXB1dGVDb2x1bW5zRnJvbURpc3BsYXlGdW5jdGlvbih0aGlzLmRpc3BsYXlGdW5jdGlvbiwgdGhpcy5kYXRhKTsKICAgICAgY29uc3QgbHVjZW5lUHJlZCA9IGNvbXBpbGVMdWNlbmVQcmVkaWNhdGUodGhpcy5maWx0ZXJUZXh0LCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGVmZmVjdGl2ZUNvbHVtbnMpOwogICAgICBjb25zdCB2aWV3RGF0YSA9IGdldFZpZXdEYXRhKHRoaXMuZGF0YSwgZWZmZWN0aXZlQ29sdW1ucywgdGhpcy5zb3J0S2V5LCB0aGlzLnNvcnREaXIsIHRoaXMuZmlsdGVyVGV4dCwgdGhpcy5jb2x1bW5GaWx0ZXJzLCB0aGlzLnNlYXJjaE1vZGUgPT09ICJkYXRhIiA/ICJkYXRhIiA6ICJ0YWJsZSIsIGx1Y2VuZVByZWQgfHwgdm9pZCAwKTsKICAgICAgdGhpcy5fbGFzdFZpZXdEYXRhID0gdmlld0RhdGE7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgPCEtLSB0aGUgaGVhZGluZyBwYXJ0IC0tPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZyBoZWFkaW5nMSI+JHt0aGlzLmxhYmVsIHx8IHRoaXMuaGVhZGluZzF9PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRpbmcgaGVhZGluZzIiPiR7dGhpcy5oZWFkaW5nMn08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImhlYWRlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJoZWFkZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGluZ1NlcGFyYXRpb24iPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEdyaWQgaGlkZGVuIj4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Imx1Y2VuZSBzeW50YXggc2VhcmNoIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7YAogICAgICAgICAgICAgIFlvdSBjYW4gdXNlIHRoZSBsdWNlbmUgc3ludGF4IHRvIHNlYXJjaCBmb3IgZGF0YSwgZS5nLjoKICAgICAgICAgICAgICAKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICBuYW1lOiAiam9obiIgQU5EIGFnZTogMTgKICAgICAgICAgICAgICBcYFxgXGAKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpdG9nZ2xlCiAgICAgICAgICAgIC5sYWJlbD0keyJzZWFyY2ggbW9kZSJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJ0YWJsZSIsICJkYXRhIiwgInNlcnZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsidGFibGUifQogICAgICAgICAgICAuZGVzY3JpcHRpb249JHtgCiAgICAgICAgICAgICAgVGhlcmUgYXJlIHRocmVlIGJhc2ljIG1vZGVzOgogICAgICAgICAgICAgIAogICAgICAgICAgICAgICogdGFibGU6IG9ubHkgc2VhcmNoZXMgZGF0YSBhbHJlYWR5IGluIHRoZSB0YWJsZQogICAgICAgICAgICAgICogZGF0YTogc2VhcmNoZXMgb3JpZ2luYWwgZGF0YSwgaWdub3JpbmcgdGFibGUgdHJhbnNmb3JtcwogICAgICAgICAgICAgICogc2VydmVyOiBzZWFyY2hlcyBkYXRhIG9uIHRoZSBzZXJ2ZXIKICAgICAgICAgICAgICAKICAgICAgICAgICAgYH0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDwhLS0gdGhlIGFjdHVhbCB0YWJsZSAtLT4KICAgICAgICA8c3R5bGU+PC9zdHlsZT4KICAgICAgICAke3RoaXMuZGF0YS5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGFibGVTY3JvbGwiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGggc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIiA/IGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5hcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLmluZGV0ZXJtaW5hdGU9JHt0aGlzLmlzVmlzaWJsZVNlbGVjdGlvbkluZGV0ZXJtaW5hdGUoKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQG5ld1ZhbHVlPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnNldFNlbGVjdFZpc2libGUoZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNoZWNrYm94PgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBiMmBgfQogICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3QgaXNTb3J0YWJsZSA9ICEhY29sLnNvcnRhYmxlOwogICAgICAgIGNvbnN0IGFyaWFTb3J0ID0gdGhpcy5nZXRBcmlhU29ydChjb2wpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICA8dGgKICAgICAgICAgICAgICAgICAgICAgICAgICAgIHJvbGU9ImNvbHVtbmhlYWRlciIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFyaWEtc29ydD0ke2FyaWFTb3J0fQogICAgICAgICAgICAgICAgICAgICAgICAgICAgc3R5bGU9IiR7aXNTb3J0YWJsZSA/ICJjdXJzb3I6IHBvaW50ZXI7IiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IGlzU29ydGFibGUgPyB0aGlzLnRvZ2dsZVNvcnQoY29sKSA6IG51bGx9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtjb2wuaGVhZGVyID8/IGNvbC5rZXl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyU29ydEluZGljYXRvcihjb2wpfQogICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGlmICh0aGlzLmRhdGFBY3Rpb25zICYmIHRoaXMuZGF0YUFjdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuIGIyYCA8dGggY2xhc3M9ImFjdGlvbnNDb2wiPkFjdGlvbnM8L3RoPiBgOwogICAgICAgIH0KICAgICAgfSkoKX0KICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLnNob3dDb2x1bW5GaWx0ZXJzID8gYjJgPHRyIGNsYXNzPSJmaWx0ZXJzUm93Ij4KICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGlvbk1vZGUgIT09ICJub25lIiA/IGIyYDx0aCBzdHlsZT0id2lkdGg6NDJweDsiPjwvdGg+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sKSA9PiB7CiAgICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgICBpZiAoY29sLmZpbHRlcmFibGUgPT09IGZhbHNlKQogICAgICAgICAgcmV0dXJuIGIyYDx0aD48L3RoPmA7CiAgICAgICAgcmV0dXJuIGIyYDx0aD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9InRleHQiIHBsYWNlaG9sZGVyPSJGaWx0ZXIuLi4iIC52YWx1ZT0ke3RoaXMuY29sdW1uRmlsdGVyc1trZXkyXSB8fCAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLnNldENvbHVtbkZpbHRlcihrZXkyLCBlMTEudGFyZ2V0LnZhbHVlKX0gLz4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGg+YDsKICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHJldHVybiBiMmAgPHRoPjwvdGg+IGA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICAgICAgICAgICAgICAgICAgPC90cj5gIDogYjJgYH0KICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICAgICR7dmlld0RhdGEubWFwKChpdGVtQXJnLCByb3dJbmRleCkgPT4gewogICAgICAgIGNvbnN0IGdldFRyID0gKGVsZW1lbnRBcmcpID0+IHsKICAgICAgICAgIGlmIChlbGVtZW50QXJnLnRhZ05hbWUgPT09ICJUUiIpIHsKICAgICAgICAgICAgcmV0dXJuIGVsZW1lbnRBcmc7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICByZXR1cm4gZ2V0VHIoZWxlbWVudEFyZy5wYXJlbnRFbGVtZW50KTsKICAgICAgICAgIH0KICAgICAgICB9OwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YVJvdyA9IGl0ZW1Bcmc7CiAgICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgICAgICBjb25zdCBpZCA9IHRoaXMuZ2V0Um93SWQoaXRlbUFyZyk7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuY2xlYXIoKTsKICAgICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgQGRyYWdlbnRlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGV2ZW50QXJnLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgY29uc3QgcmVhbFRhcmdldCA9IGdldFRyKGV2ZW50QXJnLnRhcmdldCk7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgcmVhbFRhcmdldC5jbGFzc0xpc3QuYWRkKCJoYXNBdHRhY2htZW50Iik7CiAgICAgICAgICB9LCAwKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJhZ2xlYXZlPSR7YXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgICAgICBldmVudEFyZy5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZXZlbnRBcmcuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCByZWFsVGFyZ2V0ID0gZ2V0VHIoZXZlbnRBcmcudGFyZ2V0KTsKICAgICAgICAgIHJlYWxUYXJnZXQuY2xhc3NMaXN0LnJlbW92ZSgiaGFzQXR0YWNobWVudCIpOwogICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgIEBkcmFnb3Zlcj0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAZHJvcD0ke2FzeW5jIChldmVudEFyZykgPT4gewogICAgICAgICAgZXZlbnRBcmcucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGNvbnN0IG5ld0ZpbGVzID0gW107CiAgICAgICAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShldmVudEFyZy5kYXRhVHJhbnNmZXIuZmlsZXMpKSB7CiAgICAgICAgICAgIHRoaXMuZmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgbmV3RmlsZXMucHVzaChmaWxlKTsKICAgICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCByZXN1bHQgPSB0aGlzLmZpbGVXZWFrTWFwLmdldChpdGVtQXJnKTsKICAgICAgICAgIGlmICghcmVzdWx0KSB7CiAgICAgICAgICAgIHRoaXMuZmlsZVdlYWtNYXAuc2V0KGl0ZW1BcmcsIG5ld0ZpbGVzKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHJlc3VsdC5wdXNoKC4uLm5ld0ZpbGVzKTsKICAgICAgICAgIH0KICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHthc3luYyAoZXZlbnRBcmcpID0+IHsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgdGhpcy5nZXRBY3Rpb25zRm9yVHlwZSgiY29udGV4dG1lbnUiKS5tYXAoKGFjdGlvbikgPT4gewogICAgICAgICAgICBjb25zdCBtZW51SXRlbSA9IHsKICAgICAgICAgICAgICBuYW1lOiBhY3Rpb24ubmFtZSwKICAgICAgICAgICAgICBpY29uTmFtZTogYWN0aW9uLmljb25OYW1lLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgICAgICBpdGVtOiBpdGVtQXJnLAogICAgICAgICAgICAgICAgICB0YWJsZTogdGhpcwogICAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH07CiAgICAgICAgICAgIHJldHVybiBtZW51SXRlbTsKICAgICAgICAgIH0pKTsKICAgICAgICB9fQogICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iJHtpdGVtQXJnID09PSB0aGlzLnNlbGVjdGVkRGF0YVJvdyA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5zZWxlY3Rpb25Nb2RlICE9PSAibm9uZSIgPyBiMmA8dGQgc3R5bGU9IndpZHRoOjQycHg7IHRleHQtYWxpZ246Y2VudGVyOyI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pc1Jvd1NlbGVjdGVkKGl0ZW1BcmcpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEBuZXdWYWx1ZT0keyhlMTEpID0+IHsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIHRoaXMuc2V0Um93U2VsZWN0ZWQoaXRlbUFyZywgZTExLmRldGFpbCA9PT0gdHJ1ZSk7CiAgICAgICAgfX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+YCA6IGIyYGB9CiAgICAgICAgICAgICAgICAgICAgICAgICR7ZWZmZWN0aXZlQ29sdW1ucy5maWx0ZXIoKGMxMSkgPT4gIWMxMS5oaWRkZW4pLm1hcCgoY29sLCBjb2xJbmRleCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWUyID0gZ2V0Q2VsbFZhbHVlKGl0ZW1BcmcsIGNvbCwgdGhpcy5kaXNwbGF5RnVuY3Rpb24pOwogICAgICAgICAgY29uc3QgY29udGVudDMgPSBjb2wucmVuZGVyZXIgPyBjb2wucmVuZGVyZXIodmFsdWUyLCBpdGVtQXJnLCB7IHJvd0luZGV4LCBjb2xJbmRleCwgY29sdW1uOiBjb2wgfSkgOiB2YWx1ZTI7CiAgICAgICAgICBjb25zdCBlZGl0S2V5ID0gU3RyaW5nKGNvbC5rZXkpOwogICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBAZGJsY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGRibEFjdGlvbiA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiZG91YmxlQ2xpY2siKSk7CiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRhYmxlRmllbGRzLmluY2x1ZGVzKGVkaXRLZXkpKSB7CiAgICAgICAgICAgICAgdGhpcy5oYW5kbGVDZWxsRWRpdGluZyhlMTEsIGl0ZW1BcmcsIGVkaXRLZXkpOwogICAgICAgICAgICB9IGVsc2UgaWYgKGRibEFjdGlvbikgewogICAgICAgICAgICAgIGRibEFjdGlvbi5hY3Rpb25GdW5jKHsgaXRlbTogaXRlbUFyZywgdGFibGU6IHRoaXMgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbm5lckNlbGxDb250YWluZXIiPiR7Y29udGVudDN9PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgIH0pfQogICAgICAgICAgICAgICAgICAgICAgICAkeygoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5kYXRhQWN0aW9ucyAmJiB0aGlzLmRhdGFBY3Rpb25zLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGIyYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImFjdGlvbnNDb2wiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbnNDb250YWluZXIiPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmdldEFjdGlvbnNGb3JUeXBlKCJpblJvdyIpLm1hcCgoYWN0aW9uQXJnKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uIgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gYWN0aW9uQXJnLmFjdGlvbkZ1bmMoewogICAgICAgICAgICAgIGl0ZW06IGl0ZW1BcmcsCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb25BcmcuaWNvbk5hbWUgPyBiMmAgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbkFyZy5pY29uTmFtZX0+PC9kZWVzLWljb24+IGAgOiBhY3Rpb25BcmcubmFtZX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBgOwogICAgICAgICAgfQogICAgICAgIH0pKCl9CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPmA7CiAgICAgIH0pfQogICAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogYjJgIDxkaXYgY2xhc3M9Im5vRGF0YVNldCI+Tm8gZGF0YSBzZXQhPC9kaXY+IGB9CiAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRhYmxlU3RhdGlzdGljcyI+CiAgICAgICAgICAgICR7dGhpcy5kYXRhLmxlbmd0aH0gJHt0aGlzLmRhdGFOYW1lIHx8ICJkYXRhIHJvd3MifSAodG90YWwpIHwKICAgICAgICAgICAgJHt0aGlzLnNlbGVjdGVkRGF0YVJvdyA/IGAjICR7dGhpcy5kYXRhLmluZGV4T2YodGhpcy5zZWxlY3RlZERhdGFSb3cpICsgMX1gIDogYE5vYH0KICAgICAgICAgICAgc2VsZWN0ZWQKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZm9vdGVyQWN0aW9ucyI+CiAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmVFeGVjKGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCByZXN1bHRBcnJheSA9IFtdOwogICAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICAgIGlmICghYWN0aW9uLnR5cGUuaW5jbHVkZXMoImZvb3RlciIpKQogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIHJlc3VsdEFycmF5LnB1c2goYjJgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJmb290ZXJBY3Rpb24iCiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gewogICAgICAgICAgICBhY3Rpb24uYWN0aW9uRnVuYyh7CiAgICAgICAgICAgICAgaXRlbTogdGhpcy5zZWxlY3RlZERhdGFSb3csCiAgICAgICAgICAgICAgdGFibGU6IHRoaXMKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9fQogICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uU2l6ZT0kezE0fSAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICAgICAgJHthY3Rpb24ubmFtZX1gIDogYWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgICAgIDwvZGl2PmApOwogICAgICAgIH0KICAgICAgICByZXR1cm4gcmVzdWx0QXJyYXk7CiAgICAgIH0pfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMuZGV0ZXJtaW5lQ29sdW1uV2lkdGhzKCk7CiAgICAgIGlmICh0aGlzLnNlYXJjaGFibGUpIHsKICAgICAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuZGF0YUFjdGlvbnMuZmluZCgoYWN0aW9uQXJnKSA9PiBhY3Rpb25BcmcudHlwZS5pbmNsdWRlcygiaGVhZGVyIikgJiYgYWN0aW9uQXJnLm5hbWUgPT09ICJTZWFyY2giKTsKICAgICAgICBpZiAoIWV4aXN0aW5nKSB7CiAgICAgICAgICB0aGlzLmRhdGFBY3Rpb25zLnVuc2hpZnQoewogICAgICAgICAgICBuYW1lOiAiU2VhcmNoIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJtYWduaWZ5aW5nR2xhc3MiLAogICAgICAgICAgICB0eXBlOiBbImhlYWRlciJdLAogICAgICAgICAgICBhY3Rpb25GdW5jOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgY29uc29sZS5sb2coIm9wZW4gc2VhcmNoIik7CiAgICAgICAgICAgICAgY29uc3Qgc2VhcmNoR3JpZCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCIpOwogICAgICAgICAgICAgIHNlYXJjaEdyaWQuY2xhc3NMaXN0LnRvZ2dsZSgiaGlkZGVuIik7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY29uc29sZS5sb2codGhpcy5kYXRhQWN0aW9ucyk7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9CiAgICAgICAgOwogICAgICAgIHRoaXMud2lyZVNlYXJjaElucHV0cygpOwogICAgICB9CiAgICB9CiAgICBfX2RlYm91bmNlVGltZXI7CiAgICBkZWJvdW5jZVJ1bihmbiwgbXMgPSAyMDApIHsKICAgICAgaWYgKHRoaXMuX19kZWJvdW5jZVRpbWVyKQogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLl9fZGVib3VuY2VUaW1lcik7CiAgICAgIHRoaXMuX19kZWJvdW5jZVRpbWVyID0gc2V0VGltZW91dChmbiwgbXMpOwogICAgfQogICAgd2lyZVNlYXJjaElucHV0cygpIHsKICAgICAgY29uc3Qgc2VhcmNoVGV4dEVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LXRleHQiKTsKICAgICAgY29uc3Qgc2VhcmNoTW9kZUVsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2VhcmNoR3JpZCBkZWVzLWlucHV0LW11bHRpdG9nZ2xlIik7CiAgICAgIGlmIChzZWFyY2hUZXh0RWwgJiYgIXRoaXMuX19zZWFyY2hUZXh0U3ViKSB7CiAgICAgICAgdGhpcy5fX3NlYXJjaFRleHRTdWIgPSBzZWFyY2hUZXh0RWwuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoKGVsKSA9PiB7CiAgICAgICAgICBjb25zdCB2YWwgPSBlbD8udmFsdWUgPz8gIiI7CiAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgaWYgKHRoaXMuc2VhcmNoTW9kZSA9PT0gInNlcnZlciIpIHsKICAgICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2hSZXF1ZXN0IiwgewogICAgICAgICAgICAgICAgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgIHRoaXMuc2V0RmlsdGVyVGV4dCh2YWwpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoc2VhcmNoTW9kZUVsICYmICF0aGlzLl9fc2VhcmNoTW9kZVN1YikgewogICAgICAgIHRoaXMuX19zZWFyY2hNb2RlU3ViID0gc2VhcmNoTW9kZUVsLmNoYW5nZVN1YmplY3Quc3Vic2NyaWJlKChlbCkgPT4gewogICAgICAgICAgY29uc3QgbW9kZSA9IGVsPy5zZWxlY3RlZE9wdGlvbiB8fCBlbD8udmFsdWUgfHwgInRhYmxlIjsKICAgICAgICAgIGlmIChtb2RlID09PSAidGFibGUiIHx8IG1vZGUgPT09ICJkYXRhIiB8fCBtb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICB0aGlzLnNlYXJjaE1vZGUgPSBtb2RlOwogICAgICAgICAgICBjb25zdCB2YWwgPSBzZWFyY2hUZXh0RWw/LnZhbHVlID8/ICIiOwogICAgICAgICAgICB0aGlzLmRlYm91bmNlUnVuKCgpID0+IHsKICAgICAgICAgICAgICBpZiAodGhpcy5zZWFyY2hNb2RlID09PSAic2VydmVyIikgewogICAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2VhcmNoUmVxdWVzdCIsIHsgZGV0YWlsOiB7IHF1ZXJ5OiB2YWwsIG1vZGU6ICJzZXJ2ZXIiIH0sIGJ1YmJsZXM6IHRydWUgfSkpOwogICAgICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgICAgICB0aGlzLnNldEZpbHRlclRleHQodmFsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkZXRlcm1pbmVDb2x1bW5XaWR0aHMoKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIGNvbnN0IHRhYmxlMiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJ0YWJsZSIpOwogICAgICBpZiAoIXRhYmxlMikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNlbGxzMiA9IHRhYmxlMi5yb3dzWzBdLmNlbGxzOwogICAgICBjb25zdCBoYW5kbGVDb2x1bW5CeUluZGV4ID0gYXN5bmMgKGkxMSwgd2FpdEZvclJlbmRlckFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgY29uc3QgZG9uZSA9IGRpc3RfdHNfZXhwb3J0cy5kZWZlcigpOwogICAgICAgIGNvbnN0IGNlbGwyID0gY2VsbHMyW2kxMV07CiAgICAgICAgY29uc3Qgd2lkdGggPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShjZWxsMikud2lkdGg7CiAgICAgICAgaWYgKGNlbGwyLnRleHRDb250ZW50LmluY2x1ZGVzKCJBY3Rpb25zIikpIHsKICAgICAgICAgIGNvbnN0IG5lZWRlZFdpZHRoID0gdGhpcy5kYXRhQWN0aW9ucy5maWx0ZXIoKGFjdGlvbkFyZykgPT4gYWN0aW9uQXJnLnR5cGUuaW5jbHVkZXMoImluUm93IikpLmxlbmd0aCAqIDM2OwogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSBgJHtNYXRoLm1heChuZWVkZWRXaWR0aCwgNjgpfXB4YDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgY2VsbDIuc3R5bGUud2lkdGggPSB3aWR0aDsKICAgICAgICB9CiAgICAgICAgaWYgKHdhaXRGb3JSZW5kZXJBcmcpIHsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGRvbmUucmVzb2x2ZSgpOwogICAgICAgICAgfSk7CiAgICAgICAgICBhd2FpdCBkb25lLnByb21pc2U7CiAgICAgICAgfQogICAgICB9OwogICAgICBpZiAoY2VsbHMyW2NlbGxzMi5sZW5ndGggLSAxXS50ZXh0Q29udGVudC5pbmNsdWRlcygiQWN0aW9ucyIpKSB7CiAgICAgICAgYXdhaXQgaGFuZGxlQ29sdW1uQnlJbmRleChjZWxsczIubGVuZ3RoIC0gMSwgdHJ1ZSk7CiAgICAgIH0KICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgY2VsbHMyLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBpZiAoY2VsbHMyW2kxMV0udGV4dENvbnRlbnQuaW5jbHVkZXMoIkFjdGlvbnMiKSkgewogICAgICAgICAgY29udGludWU7CiAgICAgICAgfQogICAgICAgIGF3YWl0IGhhbmRsZUNvbHVtbkJ5SW5kZXgoaTExKTsKICAgICAgfQogICAgICB0YWJsZTIuc3R5bGUudGFibGVMYXlvdXQgPSAiZml4ZWQiOwogICAgfQogICAgLy8gY29tcHV0ZSBoZWxwZXJzIG1vdmVkIHRvIC4vZGF0YS50cwogICAgdG9nZ2xlU29ydChjb2wpIHsKICAgICAgY29uc3Qga2V5MiA9IFN0cmluZyhjb2wua2V5KTsKICAgICAgaWYgKHRoaXMuc29ydEtleSAhPT0ga2V5MikgewogICAgICAgIHRoaXMuc29ydEtleSA9IGtleTI7CiAgICAgICAgdGhpcy5zb3J0RGlyID0gImFzYyI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuc29ydERpciA9PT0gImFzYyIpCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiZGVzYyI7CiAgICAgICAgZWxzZSBpZiAodGhpcy5zb3J0RGlyID09PSAiZGVzYyIpIHsKICAgICAgICAgIHRoaXMuc29ydERpciA9IG51bGw7CiAgICAgICAgICB0aGlzLnNvcnRLZXkgPSB2b2lkIDA7CiAgICAgICAgfSBlbHNlCiAgICAgICAgICB0aGlzLnNvcnREaXIgPSAiYXNjIjsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzb3J0Q2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IHRoaXMuc29ydEtleSwgZGlyOiB0aGlzLnNvcnREaXIgfSwKICAgICAgICBidWJibGVzOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBnZXRBcmlhU29ydChjb2wpIHsKICAgICAgaWYgKFN0cmluZyhjb2wua2V5KSAhPT0gdGhpcy5zb3J0S2V5IHx8ICF0aGlzLnNvcnREaXIpCiAgICAgICAgcmV0dXJuICJub25lIjsKICAgICAgcmV0dXJuIHRoaXMuc29ydERpciA9PT0gImFzYyIgPyAiYXNjZW5kaW5nIiA6ICJkZXNjZW5kaW5nIjsKICAgIH0KICAgIHJlbmRlclNvcnRJbmRpY2F0b3IoY29sKSB7CiAgICAgIGlmIChTdHJpbmcoY29sLmtleSkgIT09IHRoaXMuc29ydEtleSB8fCAhdGhpcy5zb3J0RGlyKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICByZXR1cm4gYjJgPHNwYW4gc3R5bGU9Im1hcmdpbi1sZWZ0OjZweDsgb3BhY2l0eTowLjc7Ij4ke3RoaXMuc29ydERpciA9PT0gImFzYyIgPyAiXHUyNUIyIiA6ICJcdTI1QkMifTwvc3Bhbj5gOwogICAgfQogICAgLy8gZmlsdGVyaW5nIGhlbHBlcnMKICAgIHNldEZpbHRlclRleHQodmFsdWUyKSB7CiAgICAgIGNvbnN0IHByZXYgPSB0aGlzLmZpbHRlclRleHQ7CiAgICAgIHRoaXMuZmlsdGVyVGV4dCA9IHZhbHVlMiA/PyAiIjsKICAgICAgaWYgKHByZXYgIT09IHRoaXMuZmlsdGVyVGV4dCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICAgIGRldGFpbDogeyB0ZXh0OiB0aGlzLmZpbHRlclRleHQsIGNvbHVtbnM6IHsgLi4udGhpcy5jb2x1bW5GaWx0ZXJzIH0gfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgIH0KICAgIH0KICAgIHNldENvbHVtbkZpbHRlcihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jb2x1bW5GaWx0ZXJzID0geyAuLi50aGlzLmNvbHVtbkZpbHRlcnMsIFtrZXkyXTogdmFsdWUyIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImZpbHRlckNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGV4dDogdGhpcy5maWx0ZXJUZXh0LCBjb2x1bW5zOiB7IC4uLnRoaXMuY29sdW1uRmlsdGVycyB9IH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfQogICAgLy8gc2VsZWN0aW9uIGhlbHBlcnMKICAgIGdldFJvd0lkKHJvdykgewogICAgICBpZiAodGhpcy5yb3dLZXkpIHsKICAgICAgICBpZiAodHlwZW9mIHRoaXMucm93S2V5ID09PSAiZnVuY3Rpb24iKQogICAgICAgICAgcmV0dXJuIHRoaXMucm93S2V5KHJvdyk7CiAgICAgICAgcmV0dXJuIFN0cmluZyhyb3dbdGhpcy5yb3dLZXldKTsKICAgICAgfQogICAgICBjb25zdCBrZXkyID0gcm93OwogICAgICBpZiAoIXRoaXMuX3Jvd0lkTWFwLmhhcyhrZXkyKSkgewogICAgICAgIHRoaXMuX3Jvd0lkTWFwLnNldChrZXkyLCBTdHJpbmcoKyt0aGlzLl9yb3dJZENvdW50ZXIpKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy5fcm93SWRNYXAuZ2V0KGtleTIpOwogICAgfQogICAgaXNSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocm93KSk7CiAgICB9CiAgICB0b2dnbGVSb3dTZWxlY3RlZChyb3cpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJtdWx0aSIpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3RlZElkcy5oYXMoaWQpKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuYWRkKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzZXRSb3dTZWxlY3RlZChyb3csIGNoZWNrZWQpIHsKICAgICAgY29uc3QgaWQgPSB0aGlzLmdldFJvd0lkKHJvdyk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5jbGVhcigpOwogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpIikgewogICAgICAgIGlmIChjaGVja2VkKQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQoaWQpOwogICAgICAgIGVsc2UKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRJZHMuZGVsZXRlKGlkKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhcmVBbGxWaXNpYmxlU2VsZWN0ZWQoKSB7CiAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLl9sYXN0Vmlld0RhdGEgfHwgW107CiAgICAgIGlmICh2aWV3Lmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIGZvciAoY29uc3QgcjExIG9mIHZpZXcpIHsKICAgICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRJZHMuaGFzKHRoaXMuZ2V0Um93SWQocjExKSkpCiAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBpc1Zpc2libGVTZWxlY3Rpb25JbmRldGVybWluYXRlKCkgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy5fbGFzdFZpZXdEYXRhIHx8IFtdOwogICAgICBpZiAodmlldy5sZW5ndGggPT09IDApCiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICBsZXQgY291bnQyID0gMDsKICAgICAgZm9yIChjb25zdCByMTEgb2YgdmlldykgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWRzLmhhcyh0aGlzLmdldFJvd0lkKHIxMSkpKQogICAgICAgICAgY291bnQyKys7CiAgICAgIH0KICAgICAgcmV0dXJuIGNvdW50MiA+IDAgJiYgY291bnQyIDwgdmlldy5sZW5ndGg7CiAgICB9CiAgICBzZXRTZWxlY3RWaXNpYmxlKGNoZWNrZWQpIHsKICAgICAgY29uc3QgdmlldyA9IHRoaXMuX2xhc3RWaWV3RGF0YSB8fCBbXTsKICAgICAgaWYgKGNoZWNrZWQpIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5hZGQodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfSBlbHNlIHsKICAgICAgICBmb3IgKGNvbnN0IHIxMSBvZiB2aWV3KQogICAgICAgICAgdGhpcy5zZWxlY3RlZElkcy5kZWxldGUodGhpcy5nZXRSb3dJZChyMTEpKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRTZWxlY3Rpb25DaGFuZ2UoKTsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBlbWl0U2VsZWN0aW9uQ2hhbmdlKCkgewogICAgICBjb25zdCBzZWxlY3RlZElkcyA9IEFycmF5LmZyb20odGhpcy5zZWxlY3RlZElkcyk7CiAgICAgIGNvbnN0IHNlbGVjdGVkUm93cyA9IHRoaXMuZGF0YS5maWx0ZXIoKHIxMSkgPT4gdGhpcy5zZWxlY3RlZElkcy5oYXModGhpcy5nZXRSb3dJZChyMTEpKSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlbGVjdGlvbkNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgc2VsZWN0ZWRJZHMsIHNlbGVjdGVkUm93cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZ2V0QWN0aW9uc0ZvclR5cGUodHlwZUFyZykgewogICAgICBjb25zdCBhY3Rpb25zID0gW107CiAgICAgIGZvciAoY29uc3QgYWN0aW9uIG9mIHRoaXMuZGF0YUFjdGlvbnMpIHsKICAgICAgICBpZiAoIWFjdGlvbi50eXBlLmluY2x1ZGVzKHR5cGVBcmcpKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgYWN0aW9ucy5wdXNoKGFjdGlvbik7CiAgICAgIH0KICAgICAgcmV0dXJuIGFjdGlvbnM7CiAgICB9CiAgICBhc3luYyBoYW5kbGVDZWxsRWRpdGluZyhldmVudCwgaXRlbUFyZywga2V5MikgewogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvcmlnaW5hbENvbG9yID0gdGFyZ2V0LnN0eWxlLmNvbG9yOwogICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSAidHJhbnNwYXJlbnQiOwogICAgICBjb25zdCB0cmFuc2Zvcm1lZEl0ZW0gPSB0aGlzLmRpc3BsYXlGdW5jdGlvbihpdGVtQXJnKTsKICAgICAgY29uc3QgaW5pdGlhbFZhbHVlID0gdHJhbnNmb3JtZWRJdGVtW2tleTJdID8/IGl0ZW1Bcmdba2V5Ml0gPz8gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTsKICAgICAgaW5wdXQudHlwZSA9ICJ0ZXh0IjsKICAgICAgaW5wdXQudmFsdWUgPSBpbml0aWFsVmFsdWU7CiAgICAgIGNvbnN0IGJsdXJJbnB1dCA9IGFzeW5jIChibHVyQXJnID0gdHJ1ZSwgc2F2ZUFyZyA9IGZhbHNlKSA9PiB7CiAgICAgICAgaWYgKGJsdXJBcmcpIHsKICAgICAgICAgIGlucHV0LmJsdXIoKTsKICAgICAgICB9CiAgICAgICAgaWYgKHNhdmVBcmcpIHsKICAgICAgICAgIGl0ZW1Bcmdba2V5Ml0gPSBpbnB1dC52YWx1ZTsKICAgICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICAgIH0KICAgICAgICBpbnB1dC5yZW1vdmUoKTsKICAgICAgICB0YXJnZXQuc3R5bGUuY29sb3IgPSBvcmlnaW5hbENvbG9yOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB9OwogICAgICBpbnB1dC5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICAgIGJsdXJJbnB1dChmYWxzZSwgZmFsc2UpOwogICAgICB9KTsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgYmx1cklucHV0KHRydWUsIHRydWUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRhcmdldC5hcHBlbmRDaGlsZChpbnB1dCk7CiAgICAgIGlucHV0LmZvY3VzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczMzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVGFibGUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1mb3JtL2RlZXMtZm9ybS9kZWVzLWZvcm0uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMyNSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgLmZvcm0tb3V0cHV0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2UgewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIAogICAgICAuc3RhdHVzLW1lc3NhZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3MC42JSAzNS4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDY1LjMlKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLnN0YXR1cy1tZXNzYWdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUgLyAwLjEpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDQwLjYlKSIsICJoc2woMCA3Mi4yJSA2MC42JSkiKX07CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGNvbnN0IG91dHB1dERpdiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiLmZvcm0tb3V0cHV0Iik7CiAgaWYgKGZvcm0gJiYgb3V0cHV0RGl2KSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkZvcm0gc3VibWl0dGVkIHdpdGggZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiUHJvY2Vzc2luZyB5b3VyIHJlZ2lzdHJhdGlvbi4uLiIpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gYDxzdHJvbmc+U3VibWl0dGVkIERhdGE6PC9zdHJvbmc+CiR7SlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMil9YDsKICAgICAgYXdhaXQgZGlzdF90c19leHBvcnRzMjUucGx1Z2lucy5zbWFydGRlbGF5LmRlbGF5Rm9yKDJlMyk7CiAgICAgIGZvcm0uc2V0U3RhdHVzKCJzdWNjZXNzIiwgIlJlZ2lzdHJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMmUzKTsKICAgICAgZm9ybS5yZXNldCgpOwogICAgICBvdXRwdXREaXYuaW5uZXJIVE1MID0gIjxlbT5Gb3JtIGhhcyBiZWVuIHJlc2V0PC9lbT4iOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtaW5wdXQtdGV4dCwgZGVlcy1pbnB1dC1kcm9wZG93biwgZGVlcy1pbnB1dC1jaGVja2JveCIpOwogICAgaW5wdXRzLmZvckVhY2goKGlucHV0KSA9PiB7CiAgICAgIGlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZVN1YmplY3QiLCAoKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkZpZWxkIGNoYW5nZWQ6IiwgaW5wdXQuZ2V0QXR0cmlidXRlKCJrZXkiKSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkNvbXBsZXRlIEZvcm0gRXhhbXBsZSIgLmRlc2NyaXB0aW9uPSJBIGNvbXByZWhlbnNpdmUgZm9ybSB3aXRoIHZhcmlvdXMgaW5wdXQgdHlwZXMsIHZhbGlkYXRpb24sIGFuZCBmb3JtIHN1Ym1pc3Npb24gaGFuZGxpbmciPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfSAKICAgICAgICAgICAga2V5PSJmaXJzdE5hbWUiIAogICAgICAgICAgICBsYWJlbD0iRmlyc3QgTmFtZSIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IllvdXIgZ2l2ZW4gbmFtZSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgCiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9IAogICAgICAgICAgICBrZXk9Imxhc3ROYW1lIiAKICAgICAgICAgICAgbGFiZWw9Ikxhc3QgTmFtZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0gCiAgICAgICAgICAgIGtleT0iZW1haWwiIAogICAgICAgICAgICBsYWJlbD0iRW1haWwgQWRkcmVzcyIKICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IldlIHdpbGwgdXNlIHRoaXMgdG8gY29udGFjdCB5b3UifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9ImNvdW50cnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDb3VudHJ5In0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJVbml0ZWQgU3RhdGVzIiwga2V5OiAidXMiIH0sCiAgeyBvcHRpb246ICJDYW5hZGEiLCBrZXk6ICJjYSIgfSwKICB7IG9wdGlvbjogIkdlcm1hbnkiLCBrZXk6ICJkZSIgfSwKICB7IG9wdGlvbjogIkZyYW5jZSIsIGtleTogImZyIiB9LAogIHsgb3B0aW9uOiAiVW5pdGVkIEtpbmdkb20iLCBrZXk6ICJ1ayIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dAogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgICBrZXk9InBhc3N3b3JkIgogICAgICAgICAgICBsYWJlbD0iUGFzc3dvcmQiCiAgICAgICAgICAgIGlzUGFzc3dvcmRCb29sCiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJNaW5pbXVtIDggY2hhcmFjdGVycyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgIGtleT0idGVybXMiCiAgICAgICAgICAgIGxhYmVsPSJJIGFncmVlIHRvIHRoZSBUZXJtcyBhbmQgQ29uZGl0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94CiAgICAgICAgICAgIGtleT0ibmV3c2xldHRlciIKICAgICAgICAgICAgbGFiZWw9IlNlbmQgbWUgcHJvbW90aW9uYWwgZW1haWxzIgogICAgICAgICAgICAudmFsdWU9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q3JlYXRlIEFjY291bnQ8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZm9ybS1vdXRwdXQiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGNvbGxlY3RlZCBkYXRhLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogICAgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGZvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogIGlmIChmb3JtKSB7CiAgICBjb25zb2xlLmxvZygiSG9yaXpvbnRhbCBmb3JtIGxheW91dCBhY3RpdmUiKTsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZmlsdGVycyA9IGV2ZW50LmRldGFpbC5kYXRhOwogICAgICBjb25zb2xlLmxvZygiRmlsdGVyIGFwcGxpZWQ6IiwgZmlsdGVycyk7CiAgICAgIGNvbnN0IHJlc3VsdHNDb3VudCA9IE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDEwMCkgKyAxOwogICAgICBjb25zb2xlLmxvZyhgRm91bmQgJHtyZXN1bHRzQ291bnR9IHJlc3VsdHMgd2l0aCBmaWx0ZXJzOmAsIGZpbHRlcnMpOwogICAgfSk7CiAgICBjb25zdCBpbnB1dHMgPSBmb3JtLnF1ZXJ5U2VsZWN0b3JBbGwoIltrZXldIik7CiAgICBpbnB1dHMuZm9yRWFjaCgoaW5wdXQpID0+IHsKICAgICAgaW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlU3ViamVjdCIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBmb3JtRGF0YSA9IGF3YWl0IGZvcm0uY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgICAgY29uc29sZS5sb2coIkxpdmUgZmlsdGVyIHVwZGF0ZToiLCBmb3JtRGF0YSk7CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9Ikhvcml6b250YWwgRm9ybSBMYXlvdXQiIC5kZXNjcmlwdGlvbj0iQ29tcGFjdCBmb3JtIHdpdGggaW5wdXRzIGFycmFuZ2VkIGhvcml6b250YWxseSAtIHBlcmZlY3QgZm9yIGZpbHRlcnMgYW5kIHF1aWNrIGZvcm1zIj4KICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAga2V5PSJzZWFyY2giIAogICAgICAgICAgICBsYWJlbD0iU2VhcmNoIgogICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIga2V5d29yZHMuLi4iCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iY2F0ZWdvcnkiCiAgICAgICAgICAgIC5sYWJlbD0keyJDYXRlZ29yeSJ9CiAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgeyBvcHRpb246ICJBbGwiLCBrZXk6ICJhbGwiIH0sCiAgeyBvcHRpb246ICJQcm9kdWN0cyIsIGtleTogInByb2R1Y3RzIiB9LAogIHsgb3B0aW9uOiAiU2VydmljZXMiLCBrZXk6ICJzZXJ2aWNlcyIgfSwKICB7IG9wdGlvbjogIlN1cHBvcnQiLCBrZXk6ICJzdXBwb3J0IiB9Cl19CiAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICBrZXk9InNvcnQiCiAgICAgICAgICAgIC5sYWJlbD0keyJTb3J0IEJ5In0KICAgICAgICAgICAgLmVuYWJsZVNlYXJjaD0ke2ZhbHNlfQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIk5ld2VzdCIsIGtleTogIm5ld2VzdCIgfSwKICB7IG9wdGlvbjogIlBvcHVsYXIiLCBrZXk6ICJwb3B1bGFyIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IExvdyB0byBIaWdoIiwga2V5OiAicHJpY2VfYXNjIiB9LAogIHsgb3B0aW9uOiAiUHJpY2U6IEhpZ2ggdG8gTG93Iiwga2V5OiAicHJpY2VfZGVzYyIgfQpdfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtY2hlY2tib3gKICAgICAgICAgICAga2V5PSJpblN0b2NrIgogICAgICAgICAgICBsYWJlbD0iSW4gU3RvY2sgT25seSIKICAgICAgICAgICAgLnZhbHVlPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBmb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICBjb25zdCBzdGF0dXNEaXYgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNzdGF0dXMtZGlzcGxheSIpOwogIGlmIChmb3JtKSB7CiAgICBmb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgYXN5bmMgKGV2ZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBldmVudEFyZy5kZXRhaWwuZGF0YTsKICAgICAgY29uc29sZS5sb2coIkFkdmFuY2VkIGZvcm0gZGF0YToiLCBkYXRhKTsKICAgICAgZm9ybS5zZXRTdGF0dXMoInBlbmRpbmciLCAiVmFsaWRhdGluZyB5b3VyIGluZm9ybWF0aW9uLi4uIik7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigxNTAwKTsKICAgICAgaWYgKGRhdGEuaWJhbiAmJiBkYXRhLmliYW4ubGVuZ3RoID4gMTUpIHsKICAgICAgICBmb3JtLnNldFN0YXR1cygic3VjY2VzcyIsICJBcHBsaWNhdGlvbiBzdWJtaXR0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwogICAgICAgIGlmIChzdGF0dXNEaXYpIHsKICAgICAgICAgIHN0YXR1c0Rpdi5jbGFzc05hbWUgPSAic3RhdHVzLW1lc3NhZ2Ugc3VjY2VzcyI7CiAgICAgICAgICBzdGF0dXNEaXYudGV4dENvbnRlbnQgPSAiXHUyNzEzIFlvdXIgYXBwbGljYXRpb24gaGFzIGJlZW4gc3VibWl0dGVkLiBXZSB3aWxsIGNvbnRhY3QgeW91IHNvb24uIjsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZm9ybS5zZXRTdGF0dXMoImVycm9yIiwgIlBsZWFzZSBjaGVjayB5b3VyIElCQU4iKTsKICAgICAgICBpZiAoc3RhdHVzRGl2KSB7CiAgICAgICAgICBzdGF0dXNEaXYuY2xhc3NOYW1lID0gInN0YXR1cy1tZXNzYWdlIGVycm9yIjsKICAgICAgICAgIHN0YXR1c0Rpdi50ZXh0Q29udGVudCA9ICJcdTI3MTcgSW52YWxpZCBJQkFOIGZvcm1hdC4gUGxlYXNlIGNoZWNrIGFuZCB0cnkgYWdhaW4uIjsKICAgICAgICB9CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coIkZvcm0gZGF0YSBsb2dnZWQ6IiwgZGF0YSk7CiAgICB9KTsKICAgIGNvbnN0IGZpbGVVcGxvYWQgPSBmb3JtLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtZmlsZXVwbG9hZCIpOwogICAgaWYgKGZpbGVVcGxvYWQpIHsKICAgICAgZmlsZVVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCBmaWxlcyA9IGV2ZW50LmRldGFpbD8uZmlsZXMgfHwgW107CiAgICAgICAgY29uc29sZS5sb2coYCR7ZmlsZXMubGVuZ3RofSBmaWxlKHMpIHNlbGVjdGVkIGZvciB1cGxvYWRgKTsKICAgICAgfSk7CiAgICB9CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLmhlYWRpbmc9IkFkdmFuY2VkIEZvcm0gRmVhdHVyZXMiIC5kZXNjcmlwdGlvbj0iRm9ybSB3aXRoIHNwZWNpYWxpemVkIGlucHV0IHR5cGVzIGFuZCBjb21wbGV4IHZhbGlkYXRpb24iPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1pYmFuIAogICAgICAgICAgICBrZXk9ImliYW4iCiAgICAgICAgICAgIGxhYmVsPSJJQkFOIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1pYmFuPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZQogICAgICAgICAgICBrZXk9InBob25lIgogICAgICAgICAgICBsYWJlbD0iUGhvbmUgTnVtYmVyIgogICAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1waG9uZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbXVsdGl0b2dnbGUKICAgICAgICAgICAga2V5PSJwcmVmZXJlbmNlcyIKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGlmaWNhdGlvbiBQcmVmZXJlbmNlcyJ9CiAgICAgICAgICAgIC5vcHRpb25zPSR7WyJFbWFpbCIsICJTTVMiLCAiUHVzaCIsICJJbi1BcHAiXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7IkVtYWlsIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LW11bHRpc2VsZWN0CiAgICAgICAgICAgIGtleT0iaW50ZXJlc3RzIgogICAgICAgICAgICAubGFiZWw9JHsiQXJlYXMgb2YgSW50ZXJlc3QifQogICAgICAgICAgICAub3B0aW9ucz0ke1sKICB7IG9wdGlvbjogIlRlY2hub2xvZ3kiLCBrZXk6ICJ0ZWNoIiB9LAogIHsgb3B0aW9uOiAiRGVzaWduIiwga2V5OiAiZGVzaWduIiB9LAogIHsgb3B0aW9uOiAiQnVzaW5lc3MiLCBrZXk6ICJidXNpbmVzcyIgfSwKICB7IG9wdGlvbjogIk1hcmtldGluZyIsIGtleTogIm1hcmtldGluZyIgfSwKICB7IG9wdGlvbjogIlNhbGVzIiwga2V5OiAic2FsZXMiIH0KXX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGlzZWxlY3Q+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LWZpbGV1cGxvYWQKICAgICAgICAgICAga2V5PSJkb2N1bWVudHMiCiAgICAgICAgICAgIC5sYWJlbD0keyJVcGxvYWQgRG9jdW1lbnRzIn0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlBERiwgRE9DLCBvciBET0NYIGZpbGVzIHVwIHRvIDEwTUIifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1maWxldXBsb2FkPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TdWJtaXQgQXBwbGljYXRpb248L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0ic3RhdHVzLWRpc3BsYXkiPjwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZm9ybS9kZWVzLWZvcm0vZGVlcy1mb3JtLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CnZhciBfX2VzRGVjb3JhdGUzMyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIEZPUk1fSU5QVVRfVFlQRVMgPSBbCiAgRGVlc0lucHV0Q2hlY2tib3gsCiAgRGVlc0lucHV0Q29kZSwKICBEZWVzSW5wdXREYXRlcGlja2VyLAogIERlZXNJbnB1dERyb3Bkb3duLAogIERlZXNJbnB1dEZpbGV1cGxvYWQsCiAgRGVlc0lucHV0SWJhbiwKICBEZWVzSW5wdXRNdWx0aXRvZ2dsZSwKICBEZWVzSW5wdXRQaG9uZSwKICBEZWVzSW5wdXRRdWFudGl0eVNlbGVjdG9yLAogIERlZXNJbnB1dFJhZGlvZ3JvdXAsCiAgRGVlc0lucHV0VGV4dCwKICBEZWVzSW5wdXRUb2dnbGUsCiAgRGVlc0lucHV0VHlwZWxpc3QsCiAgRGVlc1RhYmxlCl07CnZhciBEZWVzRm9ybSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZm9ybSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9yczsKICBsZXQgX2hvcml6b250YWxMYXlvdXRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2hvcml6b250YWxMYXlvdXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUsIGF0dHJpYnV0ZTogImhvcml6b250YWwtbGF5b3V0IiB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTMzKHRoaXMsIG51bGwsIF9ob3Jpem9udGFsTGF5b3V0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhvcml6b250YWxMYXlvdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhvcml6b250YWxMYXlvdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaG9yaXpvbnRhbExheW91dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaG9yaXpvbnRhbExheW91dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ob3Jpem9udGFsTGF5b3V0X2luaXRpYWxpemVycywgX2hvcml6b250YWxMYXlvdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzMyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNGb3JtMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkZvcm0iOwogICAgbmFtZSA9ICJteWZvcm0iOwogICAgY2hhbmdlU3ViamVjdCA9IG5ldyBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRyeC5yeGpzLlN1YmplY3QoKTsKICAgIHJlYWR5RGVmZXJyZWQgPSBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAjaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNCh0aGlzLCBfaG9yaXpvbnRhbExheW91dF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIC8qKgogICAgICogQ29udHJvbHMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMKICAgICAqIFdoZW4gdHJ1ZSwgc2V0cyBhbGwgY2hpbGQgaW5wdXRzIHRvIGhvcml6b250YWwgbGF5b3V0CiAgICAgKi8KICAgIGdldCBob3Jpem9udGFsTGF5b3V0KCkgewogICAgICByZXR1cm4gdGhpcy4jaG9yaXpvbnRhbExheW91dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhvcml6b250YWxMYXlvdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hvcml6b250YWxMYXlvdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogY29udGVudHM7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICB0aGlzLnVwZGF0ZVJlcXVpcmVkU3RhdHVzKCk7CiAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIGZvciAoY29uc3QgY2hpbGQgb2YgZm9ybUNoaWxkcmVuKSB7CiAgICAgICAgY2hpbGQuY2hhbmdlU3ViamVjdC5zdWJzY3JpYmUoYXN5bmMgKCkgPT4gewogICAgICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSBhd2FpdCB0aGlzLmNvbGxlY3RGb3JtRGF0YSgpOwogICAgICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodmFsdWVPYmplY3QpOwogICAgICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgICAgICAgdGhpcy51cGRhdGVSZXF1aXJlZFN0YXR1cygpOwogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMuYWRkQmVoYXZpb3VycygpOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgZ2V0Rm9ybUVsZW1lbnRzKCkgewogICAgICByZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmNoaWxkcmVuKS5maWx0ZXIoKGNoaWxkKSA9PiBGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKGNoaWxkLmNvbnN0cnVjdG9yKSk7CiAgICB9CiAgICBnZXRTdWJtaXRCdXR0b24oKSB7CiAgICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbmQoKGNoaWxkKSA9PiBjaGlsZCBpbnN0YW5jZW9mIERlZXNGb3JtU3VibWl0KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVJlcXVpcmVkU3RhdHVzKCkgewogICAgICBjb25zb2xlLmxvZygiY2hlY2tpbmcgdGhlIHJlcXVpcmVkIHN0YXR1cy4iKTsKICAgICAgbGV0IHJlcXVpcmVkT0sgPSB0cnVlOwogICAgICBmb3IgKGNvbnN0IGNoaWxkQXJnIG9mIHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCkpIHsKICAgICAgICBpZiAoY2hpbGRBcmcucmVxdWlyZWQgJiYgIWNoaWxkQXJnLnZhbHVlKSB7CiAgICAgICAgICByZXF1aXJlZE9LID0gZmFsc2U7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmdldFN1Ym1pdEJ1dHRvbigpKSB7CiAgICAgICAgdGhpcy5nZXRTdWJtaXRCdXR0b24oKS5kaXNhYmxlZCA9ICFyZXF1aXJlZE9LOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIGNvbGxlY3RzIHRoZSBmb3JtIGRhdGEKICAgICAqIEByZXR1cm5zCiAgICAgKi8KICAgIGFzeW5jIGNvbGxlY3RGb3JtRGF0YSgpIHsKICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgY29uc3QgdmFsdWVPYmplY3QgPSB7fTsKICAgICAgZm9yIChjb25zdCBjaGlsZCBvZiBjaGlsZHJlbjIpIHsKICAgICAgICBpZiAoIWNoaWxkLmtleSkgewogICAgICAgICAgY29uc29sZS5sb2coYGZvcm0gZWxlbWVudCB3aXRoIGxhYmVsICIke2NoaWxkLmxhYmVsfSIgaGFzIG5vIGtleS4gc2tpcHBpbmcuYCk7CiAgICAgICAgICBjb250aW51ZTsKICAgICAgICB9CiAgICAgICAgdmFsdWVPYmplY3RbY2hpbGQua2V5XSA9IGNoaWxkLnZhbHVlOwogICAgICB9CiAgICAgIHJldHVybiB2YWx1ZU9iamVjdDsKICAgIH0KICAgIGFzeW5jIGdhdGhlckFuZERpc3BhdGNoKCkgewogICAgICBjb25zdCB2YWx1ZU9iamVjdCA9IGF3YWl0IHRoaXMuY29sbGVjdEZvcm1EYXRhKCk7CiAgICAgIGNvbnN0IGZvcm1EYXRhRXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImZvcm1EYXRhIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgZGF0YTogdmFsdWVPYmplY3QKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChmb3JtRGF0YUV2ZW50KTsKICAgICAgY29uc29sZS5sb2coImRpc3BhdGNoZWQgZGF0YToiKTsKICAgICAgY29uc29sZS5sb2codmFsdWVPYmplY3QpOwogICAgfQogICAgc2V0U3RhdHVzKHZpc3VhbFN0YXRlQXJnLCB0ZXh0U3RhdGVBcmcpIHsKICAgICAgY29uc3QgaW5wdXRDaGlsZHJlbiA9IHRoaXMuZ2V0Rm9ybUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHN1Ym1pdEJ1dHRvbiA9IHRoaXMuZ2V0U3VibWl0QnV0dG9uKCk7CiAgICAgIHN3aXRjaCAodmlzdWFsU3RhdGVBcmcpIHsKICAgICAgICBjYXNlICJub3JtYWwiOgogICAgICAgICAgc3VibWl0QnV0dG9uLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gIm5vcm1hbCI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gZmFsc2U7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJwZW5kaW5nIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInBlbmRpbmciOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJzdWNjZXNzIjoKICAgICAgICAgIHN1Ym1pdEJ1dHRvbi5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICBzdWJtaXRCdXR0b24uc3RhdHVzID0gInN1Y2Nlc3MiOwogICAgICAgICAgZm9yIChjb25zdCBpbnB1dENoaWxkIG9mIGlucHV0Q2hpbGRyZW4pIHsKICAgICAgICAgICAgaW5wdXRDaGlsZC5kaXNhYmxlZCA9IHRydWU7CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICBzdWJtaXRCdXR0b24uZGlzYWJsZWQgPSB0cnVlOwogICAgICAgICAgc3VibWl0QnV0dG9uLnN0YXR1cyA9ICJlcnJvciI7CiAgICAgICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgICAgICBpbnB1dENoaWxkLmRpc2FibGVkID0gdHJ1ZTsKICAgICAgICAgIH0KICAgICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN1Ym1pdEJ1dHRvbi50ZXh0ID0gdGV4dFN0YXRlQXJnOwogICAgfQogICAgLyoqCiAgICAgKiByZXNldHMgdGhlIGZvcm0KICAgICAqLwogICAgcmVzZXQoKSB7CiAgICAgIGNvbnN0IGlucHV0Q2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBjb25zdCBzdWJtaXRCdXR0b24gPSB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpOwogICAgICBmb3IgKGNvbnN0IGlucHV0Q2hpbGQgb2YgaW5wdXRDaGlsZHJlbikgewogICAgICAgIGlucHV0Q2hpbGQudmFsdWUgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuc2V0U3RhdHVzKCJub3JtYWwiLCAiU3VibWl0Iik7CiAgICB9CiAgICBhc3luYyBhZGRCZWhhdmlvdXJzKCkgewogICAgICB0aGlzLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZXZlbnQpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBldmVudC50YXJnZXQ7CiAgICAgICAgaWYgKCFGT1JNX0lOUFVUX1RZUEVTLmluY2x1ZGVzKHRhcmdldC5jb25zdHJ1Y3RvcikpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgaWYgKGV2ZW50LmtleSA9PT0gIkVudGVyIikgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gdGhpcy5nZXRGb3JtRWxlbWVudHMoKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRhcmdldCk7CiAgICAgICAgICBpZiAoY3VycmVudEluZGV4IDwgY2hpbGRyZW4yLmxlbmd0aCAtIDEpIHsKICAgICAgICAgICAgY2hpbGRyZW4yW2N1cnJlbnRJbmRleCArIDFdLmZvY3VzKCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICB0YXJnZXQuYmx1cigpOwogICAgICAgICAgICB0aGlzLmdldFN1Ym1pdEJ1dHRvbigpPy5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICAvKioKICAgICAqIFVwZGF0ZXMgdGhlIGxheW91dCBtb2RlIG9mIGNoaWxkIGlucHV0IGNvbXBvbmVudHMgYmFzZWQgb24gZm9ybSdzIGhvcml6b250YWxMYXlvdXQgcHJvcGVydHkKICAgICAqLwogICAgdXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCkgewogICAgICBjb25zdCBmb3JtQ2hpbGRyZW4gPSB0aGlzLmdldEZvcm1FbGVtZW50cygpOwogICAgICBmb3IgKGNvbnN0IGNoaWxkIG9mIGZvcm1DaGlsZHJlbikgewogICAgICAgIGlmICgibGF5b3V0TW9kZSIgaW4gY2hpbGQpIHsKICAgICAgICAgIGNoaWxkLmxheW91dE1vZGUgPSAiYXV0byI7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENhbGxlZCB3aGVuIHByb3BlcnRpZXMgY2hhbmdlCiAgICAgKi8KICAgIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImhvcml6b250YWxMYXlvdXQiKSkgewogICAgICAgIHRoaXMudXBkYXRlQ2hpbGRyZW5MYXlvdXRNb2RlKCk7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM0KHRoaXMsIF9ob3Jpem9udGFsTGF5b3V0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIGRlbW9GdW5jMjYgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIAogICAgICAudmVydGljYWwtZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXgtd2lkdGg6IDMwMHB4OwogICAgICB9CiAgICAgIAogICAgICAuaG9yaXpvbnRhbC1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICB9CiAgICAgIAogICAgICAuaWNvbi1yb3cgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtc25pcHBldCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgIH0KICAgIGB9CiAgPC9zdHlsZT4KICAKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCB0eXBlNSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInR5cGUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gdmFyaWFudCBjbGlja2VkOiAke3R5cGU1fWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQnV0dG9uIFZhcmlhbnRzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCB2aXN1YWwgc3R5bGVzIGZvciB2YXJpb3VzIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCI+RGVmYXVsdDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5Ij5TZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlc3RydWN0aXZlIj5EZXN0cnVjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+T3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPkdob3N0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJsaW5rIj5MaW5rIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3Qgc2l6ZSA9IGJ1dHRvbi5nZXRBdHRyaWJ1dGUoInNpemUiKSB8fCAiZGVmYXVsdCI7CiAgICAgIGNvbnNvbGUubG9nKGBCdXR0b24gc2l6ZTogJHtzaXplfWApOwogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gQnV0dG9uIFNpemVzIn0gLnN1YnRpdGxlPSR7Ik11bHRpcGxlIHNpemVzIGZvciBkaWZmZXJlbnQgY29udGV4dHMgYW5kIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0ic20iPlNtYWxsIEJ1dHRvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iZGVmYXVsdCI+RGVmYXVsdCBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyI+TGFyZ2UgQnV0dG9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJvdXRsaW5lIiAudGV4dD0keyJcdXsxRjY4MH0ifT48L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJzbSIgdHlwZT0ic2Vjb25kYXJ5Ij5TbWFsbCBTZWNvbmRhcnk8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9ImRlZmF1bHQiIHR5cGU9ImRlc3RydWN0aXZlIj5EZWZhdWx0IERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJsZyIgdHlwZT0ib3V0bGluZSI+TGFyZ2UgT3V0bGluZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBpY29uQnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBpY29uQnV0dG9ucy5mb3JFYWNoKChidXR0b24pID0+IHsKICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zdCBoYXNJY29uID0gYnV0dG9uLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaWNvbiIpOwogICAgICBpZiAoaGFzSWNvbikgewogICAgICAgIGNvbnN0IGljb25OYW1lID0gaGFzSWNvbi5nZXRBdHRyaWJ1dGUoImljb25GQSIpIHx8ICJ1bmtub3duIjsKICAgICAgICBjb25zb2xlLmxvZyhgSWNvbiBidXR0b24gY2xpY2tlZDogJHtpY29uTmFtZX1gKTsKICAgICAgfQogICAgfSk7CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gQnV0dG9ucyB3aXRoIEljb25zIn0gLnN1YnRpdGxlPSR7IkNvbWJpbmluZyBpY29ucyB3aXRoIHRleHQgZm9yIGVuaGFuY2VkIHZpc3VhbCBjb21tdW5pY2F0aW9uIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOnBsdXMiPjwvZGVlcy1pY29uPgogICAgICAgICAgICBBZGQgSXRlbQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICBEZWxldGUKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ib3V0bGluZSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgRG93bmxvYWQKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHNpemU9InNtIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTpnZWFyIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgU2V0dGluZ3MKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249ImZhOmNhcmV0TGVmdCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIEJhY2sKICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZ2hvc3QiPgogICAgICAgICAgICBOZXh0CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Y2FyZXRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0iZGVmYXVsdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6cGx1cyI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9InNlY29uZGFyeSI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6Z2VhciI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9Im91dGxpbmUiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpTZWFyY2giPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCI+CiAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlc3RydWN0aXZlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJmYTp0cmFzaCI+PC9kZWVzLWljb24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBidXR0b25zID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc3QgaWNvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgIm5vbmUiOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJpY29uUG9zaXRpb24iKSB8fCAibGVmdCI7CiAgICAgIGNvbnNvbGUubG9nKGBJY29uIHByb3BlcnR5IGJ1dHRvbjogaWNvbj0ke2ljb24zfSwgcG9zaXRpb249JHtwb3NpdGlvbjN9YCk7CiAgICB9KTsKICB9KTsKfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI0LiBJY29ucyB2aWEgUHJvcGVydHkifSAuc3VidGl0bGU9JHsiU2ltcGxpZmllZCBpY29uIHN5bnRheCB1c2luZyB0aGUgaWNvbiBwcm9wZXJ0eSJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24tcm93Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIj5BZGQgSXRlbTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIGljb249ImZhOnRyYXNoIj5EZWxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIGljb249Imx1Y2lkZTpEb3dubG9hZCI+RG93bmxvYWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpY29uLXJvdyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSIgaWNvbj0iZmE6Z2VhciI+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldExlZnQiPkJhY2s8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBpY29uPSJmYTpjYXJldFJpZ2h0IiBpY29uUG9zaXRpb249InJpZ2h0Ij5OZXh0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iaWNvbi1yb3ciPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHNpemU9Imljb24iIHR5cGU9ImRlZmF1bHQiIGljb249ImZhOnBsdXMiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ic2Vjb25kYXJ5IiBpY29uPSJsdWNpZGU6U2V0dGluZ3MiPjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gc2l6ZT0iaWNvbiIgdHlwZT0ib3V0bGluZSIgaWNvbj0ibHVjaWRlOlNlYXJjaCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJnaG9zdCIgaWNvbj0ibHVjaWRlOk1vcmVWZXJ0aWNhbCI+PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzaXplPSJpY29uIiB0eXBlPSJkZXN0cnVjdGl2ZSIgaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtc25pcHBldCI+CiAgICAgICAgICAgICZsdDtkZWVzLWJ1dHRvbiBpY29uPSJmYTpwbHVzIiZndDtBZGQgSXRlbSZsdDsvZGVlcy1idXR0b24mZ3Q7PGJyPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gaWNvbj0iZmE6Y2FyZXRSaWdodCIgaWNvblBvc2l0aW9uPSJyaWdodCImZ3Q7TmV4dCZsdDsvZGVlcy1idXR0b24mZ3Q7CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgcGVuZGluZ0J1dHRvbiA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bc3RhdHVzPSJwZW5kaW5nIl0nKTsKICBjb25zdCBzdWNjZXNzQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9InN1Y2Nlc3MiXScpOwogIGNvbnN0IGVycm9yQnV0dG9uID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvbltzdGF0dXM9ImVycm9yIl0nKTsKICBpZiAocGVuZGluZ0J1dHRvbikgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJQZW5kaW5nIGJ1dHRvbiBpcyBzaG93aW5nIGxvYWRpbmcgc3RhdGUiKTsKICAgIH0sIDFlMyk7CiAgfQogIGlmIChzdWNjZXNzQnV0dG9uKSB7CiAgICBzdWNjZXNzQnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoKSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTdWNjZXNzIHN0YXRlIGJ1dHRvbiBjbGlja2VkIik7CiAgICB9KTsKICB9CiAgaWYgKGVycm9yQnV0dG9uKSB7CiAgICBlcnJvckJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiRXJyb3Igc3RhdGUgYnV0dG9uIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBCdXR0b24gU3RhdGVzIn0gLnN1YnRpdGxlPSR7IkRpZmZlcmVudCBzdGF0ZXMgdG8gaW5kaWNhdGUgYnV0dG9uIHN0YXR1cyBhbmQgbG9hZGluZyBjb25kaXRpb25zIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9Im5vcm1hbCI+Tm9ybWFsPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBzdGF0dXM9InBlbmRpbmciPlByb2Nlc3NpbmcuLi48L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0ic3VjY2VzcyI+U3VjY2VzcyE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHN0YXR1cz0iZXJyb3IiPkVycm9yITwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gZGlzYWJsZWQ+RGlzYWJsZWQ8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncm91cCIgc3R5bGU9Im1hcmdpbi10b3A6IDE2cHg7Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIHN0YXR1cz0icGVuZGluZyIgc2l6ZT0ic20iPlNtYWxsIExvYWRpbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im91dGxpbmUiIHN0YXR1cz0icGVuZGluZyI+RGVmYXVsdCBMb2FkaW5nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc3RhdHVzPSJwZW5kaW5nIiBzaXplPSJsZyI+TGFyZ2UgTG9hZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIAogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNjbGljay1vdXRwdXQiKTsKICBjb25zdCBjbGlja01lQnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWJ1dHRvbjpmaXJzdC1vZi10eXBlIik7CiAgY29uc3QgZGF0YUJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0ic2Vjb25kYXJ5Il0nKTsKICBjb25zdCBhc3luY0J0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZGVzdHJ1Y3RpdmUiXScpOwogIGlmIChjbGlja01lQnRuICYmIG91dHB1dCkgewogICAgY2xpY2tNZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSBgQ2xpY2tlZDogRGVmYXVsdCBidXR0b24gYXQgJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlVGltZVN0cmluZygpfWA7CiAgICB9KTsKICB9CiAgaWYgKGRhdGFCdG4gJiYgb3V0cHV0KSB7CiAgICBkYXRhQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrZWQiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGBDbGlja2VkOiBTZWNvbmRhcnkgYnV0dG9uIHdpdGggZGF0YTogJHtlMTEuZGV0YWlsLmRhdGF9YDsKICAgIH0pOwogIH0KICBpZiAoYXN5bmNCdG4gJiYgb3V0cHV0KSB7CiAgICBhc3luY0J0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgYXN5bmMgKCkgPT4gewogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiUHJvY2Vzc2luZy4uLiI7CiAgICAgIGF3YWl0IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRkZWxheS5kZWxheUZvcigyZTMpOwogICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSAiQWN0aW9uIGNvbXBsZXRlZCEiOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjYuIEV2ZW50IEhhbmRsaW5nIn0gLnN1YnRpdGxlPSR7IkludGVyYWN0aXZlIGV4YW1wbGVzIHdpdGggY2xpY2sgZXZlbnQgaGFuZGxpbmcifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkNsaWNrIE1lPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiIC5ldmVudERldGFpbERhdGE9JHsiY3VzdG9tLWRhdGEtMTIzIn0+CiAgICAgICAgICAgIENsaWNrIHdpdGggRGF0YQogICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSI+QXN5bmMgQWN0aW9uPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGlkPSJjbGljay1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCI+CiAgICAgICAgICA8ZW0+Q2xpY2sgYSBidXR0b24gdG8gc2VlIHRoZSByZXN1bHQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgY29uc3Qgb3V0cHV0ID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZm9ybS1vdXRwdXQiKTsKICBpZiAoZm9ybSAmJiBvdXRwdXQpIHsKICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZTExKSA9PiB7CiAgICAgIG91dHB1dC5pbm5lckhUTUwgPSAiPHN0cm9uZz5Gb3JtIHN1Ym1pdHRlZCB3aXRoIGRhdGE6PC9zdHJvbmc+PGJyPiIgKyBKU09OLnN0cmluZ2lmeShlMTEuZGV0YWlsLmRhdGEsIG51bGwsIDIpOwogICAgfSk7CiAgfQogIGNvbnN0IGRyYWZ0QnRuID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCdkZWVzLWJ1dHRvblt0eXBlPSJzZWNvbmRhcnkiXScpOwogIGNvbnN0IGNhbmNlbEJ0biA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcignZGVlcy1idXR0b25bdHlwZT0iZ2hvc3QiXScpOwogIGlmIChkcmFmdEJ0bikgewogICAgZHJhZnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgY29uc29sZS5sb2coIlNhdmUgRHJhZnQgY2xpY2tlZCIpOwogICAgfSk7CiAgfQogIGlmIChjYW5jZWxCdG4pIHsKICAgIGNhbmNlbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICBjb25zb2xlLmxvZygiQ2FuY2VsIGNsaWNrZWQiKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI3LiBGb3JtIEludGVncmF0aW9uIn0gLnN1YnRpdGxlPSR7IkJ1dHRvbnMgd29ya2luZyB3aXRoaW4gZm9ybXMgd2l0aCBhdXRvbWF0aWMgc3BhY2luZyJ9PgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGxhYmVsPSJOYW1lIiBrZXk9Im5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBsYWJlbD0iRW1haWwiIGtleT0iZW1haWwiIHR5cGU9ImVtYWlsIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQgbGFiZWw9Ik1lc3NhZ2UiIGtleT0ibWVzc2FnZSIgaXNNdWx0aWxpbmU+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJzZWNvbmRhcnkiPlNhdmUgRHJhZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0Ij5DYW5jZWw8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+U3VibWl0IEZvcm08L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0iZm9ybS1vdXRwdXQiIGNsYXNzPSJkZW1vLW91dHB1dCIgc3R5bGU9IndoaXRlLXNwYWNlOiBwcmUtd3JhcDsiPgogICAgICAgICAgPGVtPlN1Ym1pdCB0aGUgZm9ybSB0byBzZWUgdGhlIGRhdGEuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgY29uc3QgdHlwZTUgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJ0eXBlIik7CiAgICBpZiAodHlwZTUpIHsKICAgICAgY29uc29sZS5sb2coYExlZ2FjeSB0eXBlICIke3R5cGU1fSIgaXMgc3VwcG9ydGVkIGZvciBiYWNrd2FyZCBjb21wYXRpYmlsaXR5YCk7CiAgICB9CiAgfSk7Cn19PgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOC4gQmFja3dhcmQgQ29tcGF0aWJpbGl0eSJ9IC5zdWJ0aXRsZT0keyJPbGQgYnV0dG9uIHR5cGVzIGFyZSBhdXRvbWF0aWNhbGx5IG1hcHBlZCB0byBuZXcgdmFyaWFudHMifT4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Im5vcm1hbCI+Tm9ybWFsIOKGkiBEZWZhdWx0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+SGlnaGxpZ2h0ZWQg4oaSIERlc3RydWN0aXZlPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkaXNjcmVldCI+RGlzY3JlZXQg4oaSIE91dGxpbmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImJpZyI+QmlnIOKGkiBMYXJnZSBTaXplPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8cCBzdHlsZT0ibWFyZ2luLXRvcDogMTZweDsgZm9udC1zaXplOiAxNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07Ij4KICAgICAgICAgIFRoZXNlIGxlZ2FjeSB0eXBlIHZhbHVlcyBhcmUgbWFpbnRhaW5lZCBmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSBidXQgd2UgcmVjb21tZW5kIHVzaW5nIHRoZSBuZXcgdmFyaWFudCBzeXN0ZW0uCiAgICAgICAgPC9wPgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgICAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgYWN0aW9uR3JvdXAgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoIi52ZXJ0aWNhbC1ncm91cCIpWzBdOwogIGNvbnN0IGRhbmdlckdyb3VwID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yQWxsKCIudmVydGljYWwtZ3JvdXAiKVsxXTsKICBpZiAoYWN0aW9uR3JvdXApIHsKICAgIGNvbnN0IGJ1dHRvbnMgPSBhY3Rpb25Hcm91cC5xdWVyeVNlbGVjdG9yQWxsKCJkZWVzLWJ1dHRvbiIpOwogICAgYnV0dG9ucy5mb3JFYWNoKChidXR0b24sIGluZGV4MikgPT4gewogICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2tlZCIsICgpID0+IHsKICAgICAgICBjb25zdCBhY3Rpb24gPSBbIlNhdmUgQ2hhbmdlcyIsICJEaXNjYXJkIiwgIkhlbHAiXVtpbmRleDJdOwogICAgICAgIGNvbnNvbGUubG9nKGBBY3Rpb24gZ3JvdXA6ICR7YWN0aW9ufSBjbGlja2VkYCk7CiAgICAgIH0pOwogICAgfSk7CiAgfQogIGlmIChkYW5nZXJHcm91cCkgewogICAgY29uc3QgYnV0dG9ucyA9IGRhbmdlckdyb3VwLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbiwgaW5kZXgyKSA9PiB7CiAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGlja2VkIiwgKCkgPT4gewogICAgICAgIGNvbnN0IGFjdGlvbiA9IFsiRGVsZXRlIEFjY291bnQiLCAiQXJjaGl2ZSBEYXRhIiwgIk5vdCBBdmFpbGFibGUiXVtpbmRleDJdOwogICAgICAgIGlmIChpbmRleDIgIT09IDIpIHsKICAgICAgICAgIGNvbnNvbGUubG9nKGBEYW5nZXIgem9uZTogJHthY3Rpb259IGNsaWNrZWRgKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIEFkdmFuY2VkIEV4YW1wbGVzIn0gLnN1YnRpdGxlPSR7IkNvbXBsZXggYnV0dG9uIGNvbmZpZ3VyYXRpb25zIGFuZCByZWFsLXdvcmxkIHVzZSBjYXNlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZ3JvdXAiPgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5BY3Rpb24gR3JvdXA8L2g0PgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlNhdmUiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIFNhdmUgQ2hhbmdlcwogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0ic2Vjb25kYXJ5IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6VW5kbzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERpc2NhcmQKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9Imdob3N0IiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6SGVscENpcmNsZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgSGVscAogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgPGRpdiBjbGFzcz0idmVydGljYWwtZ3JvdXAiPgogICAgICAgICAgICA8aDQgc3R5bGU9Im1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE0cHg7IGZvbnQtd2VpZ2h0OiA1MDA7Ij5EYW5nZXIgWm9uZTwvaDQ+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJkZXN0cnVjdGl2ZSIgc2l6ZT0ic20iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0iZmE6dHJhc2giPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIERlbGV0ZSBBY2NvdW50CiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJvdXRsaW5lIiBzaXplPSJzbSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6QXJjaGl2ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgQXJjaGl2ZSBEYXRhCiAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJnaG9zdCIgc2l6ZT0ic20iIGRpc2FibGVkPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkJhbiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgTm90IEF2YWlsYWJsZQogICAgICAgICAgICA8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogMjRweDsiPgogICAgICAgICAgPGg0IHN0eWxlPSJtYXJnaW46IDAgMCA4cHggMDsgZm9udC1zaXplOiAxNHB4OyBmb250LXdlaWdodDogNTAwOyI+Q29kZSBFeGFtcGxlOjwvaDQ+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLXNuaXBwZXQiPgogICAgICAgICAgICAmbHQ7ZGVlcy1idXR0b24gdHlwZT0iZGVmYXVsdCIgc2l6ZT0ic20iIGljb249Imx1Y2lkZTpTYXZlIiBAY2xpY2tlZD0iXCR7aGFuZGxlQ2xpY2t9IiZndDs8YnI+CiAgICAgICAgICAgICZuYnNwOyZuYnNwO1NhdmUgQ2hhbmdlczxicj4KICAgICAgICAgICAgJmx0Oy9kZWVzLWJ1dHRvbiZndDsKICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uL2RlZXMtYnV0dG9uLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V2ZW50RGV0YWlsRGF0YV9kZWNvcmF0b3JzOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9kZWNvcmF0b3JzOwogIGxldCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZGVjb3JhdG9yczsKICBsZXQgX2lzSGlkZGVuX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZGVjb3JhdG9yczsKICBsZXQgX3R5cGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9zdGF0dXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luc2lkZUZvcm1fZGVjb3JhdG9yczsKICBsZXQgX2luc2lkZUZvcm1faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaWNvblBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9pY29uUG9zaXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pY29uUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90ZXh0X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHJlZmxlY3Q6IHRydWUsCiAgICAgICAgaGFzQ2hhbmdlZCgpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfSldOwogICAgICBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9kaXNhYmxlZF9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfaXNIaWRkZW5fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zaXplX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZwogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX2luc2lkZUZvcm1fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbiwKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX2ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZXZlbnREZXRhaWxEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV2ZW50RGV0YWlsRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZXZlbnREZXRhaWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV2ZW50RGV0YWlsRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXZlbnREZXRhaWxEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2V2ZW50RGV0YWlsRGF0YV9pbml0aWFsaXplcnMsIF9ldmVudERldGFpbERhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfZGlzYWJsZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZGlzYWJsZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpc2FibGVkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRpc2FibGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kaXNhYmxlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXNhYmxlZF9pbml0aWFsaXplcnMsIF9kaXNhYmxlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pc0hpZGRlbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0hpZGRlbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNIaWRkZW4iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIaWRkZW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzSGlkZGVuID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzSGlkZGVuX2luaXRpYWxpemVycywgX2lzSGlkZGVuX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX3R5cGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidHlwZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHlwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50eXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50eXBlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3R5cGVfaW5pdGlhbGl6ZXJzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNCh0aGlzLCBudWxsLCBfaW5zaWRlRm9ybV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnNpZGVGb3JtIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnNpZGVGb3JtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluc2lkZUZvcm0sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluc2lkZUZvcm0gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIF9pbnNpZGVGb3JtX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzQodGhpcywgbnVsbCwgX2ljb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvbiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pY29uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ljb25faW5pdGlhbGl6ZXJzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KHRoaXMsIG51bGwsIF9pY29uUG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaWNvblBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpY29uUG9zaXRpb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaWNvblBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pY29uUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaWNvblBvc2l0aW9uX2luaXRpYWxpemVycywgX2ljb25Qb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0J1dHRvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI2OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9ldmVudERldGFpbERhdGFfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBldmVudERldGFpbERhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiNldmVudERldGFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBldmVudERldGFpbERhdGEodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V2ZW50RGV0YWlsRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Rpc2FibGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZXZlbnREZXRhaWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfZGlzYWJsZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGRpc2FibGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkaXNhYmxlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZGlzYWJsZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hpZGRlbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2Rpc2FibGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5faW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzSGlkZGVuKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0hpZGRlbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNIaWRkZW5fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaXNIaWRkZW5fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF90eXBlX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgdHlwZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0eXBlKHZhbHVlMikgewogICAgICB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgImRlZmF1bHQiKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX3N0YXR1c19pbml0aWFsaXplcnMsICJub3JtYWwiKSk7CiAgICBnZXQgc3RhdHVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaW5zaWRlRm9ybV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaW5zaWRlRm9ybSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luc2lkZUZvcm1fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbnNpZGVGb3JtKHZhbHVlMikgewogICAgICB0aGlzLiNpbnNpZGVGb3JtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2luc2lkZUZvcm1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM1KHRoaXMsIF9pY29uX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgaWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpY29uKHZhbHVlMikgewogICAgICB0aGlzLiNpY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzUodGhpcywgX2ljb25Qb3NpdGlvbl9pbml0aWFsaXplcnMsICJsZWZ0IikpOwogICAgZ2V0IGljb25Qb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ljb25Qb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGljb25Qb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jaWNvblBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNSh0aGlzLCBfaWNvblBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAoIXRoaXMuaW5zaWRlRm9ybSAmJiB0aGlzLmNsb3Nlc3QoImRlZXMtZm9ybSIpKSB7CiAgICAgICAgdGhpcy5pbnNpZGVGb3JtID0gdHJ1ZTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgfQogICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEZvcm0gc3BhY2luZyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIDpob3N0KFtpbnNpZGUtZm9ybV06bGFzdC1jaGlsZCkgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtZm9ybVtob3Jpem9udGFsLWxheW91dF0gOmhvc3QoW2luc2lkZS1mb3JtXSkgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgICAKICAgICAgZGVlcy1mb3JtW2hvcml6b250YWwtbGF5b3V0XSA6aG9zdChbaW5zaWRlLWZvcm1dOmxhc3QtY2hpbGQpIHsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5idXR0b24gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIFNpemUgdmFyaWFudHMgKi8KICAgICAgLmJ1dHRvbi5zaXplLWRlZmF1bHQgewogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtc20gewogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtbGcgewogICAgICAgIGhlaWdodDogNDRweDsKICAgICAgICBwYWRkaW5nOiAwIDI0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnNpemUtaWNvbiB7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIHdpZHRoOiAzNnB4OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC8qIERlZmF1bHQgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDkxLjQlKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2IoMCAwIDAgLyAwLjA1KTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgyMTUgMjAuMiUgMTAuMiUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA4NSUpIiwgImhzbCgyMTUgMjAuMiUgMjAlKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5kZWZhdWx0OmFjdGl2ZTpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQuMyAzMS44JSA5MS40JSkiLCAiaHNsKDIxNSAyMC4yJSA5JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERlc3RydWN0aXZlIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5kZXN0cnVjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICAgIGNvbG9yOiBoc2woMCAwJSA5OCUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmRlc3RydWN0aXZlOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Ni4yJSk7CiAgICAgIH0KCiAgICAgIC5idXR0b24uZGVzdHJ1Y3RpdmU6YWN0aXZlOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBiYWNrZ3JvdW5kOiBoc2woMCA4NC4yJSA1Mi4yJSk7CiAgICAgIH0KCiAgICAgIC8qIE91dGxpbmUgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLm91dGxpbmUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMjEuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLm91dGxpbmU6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNC4zIDMxLjglIDg1JSkiLCAiaHNsKDIxNSAyMC4yJSAyNi44JSkiKX07CiAgICAgIH0KCiAgICAgIC5idXR0b24ub3V0bGluZTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBTZWNvbmRhcnkgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLnNlY29uZGFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5zZWNvbmRhcnk6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAuYnV0dG9uLnNlY29uZGFyeTphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgODUlKSIsICJoc2woMjE1IDIwLjIlIDExLjglKSIpfTsKICAgICAgfQoKICAgICAgLyogR2hvc3QgdmFyaWFudCAqLwogICAgICAuYnV0dG9uLmdob3N0IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDpob3Zlcjpub3QoLmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5naG9zdDphY3RpdmU6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0LjMgMzEuOCUgOTEuNCUpIiwgImhzbCgyMTUgMjAuMiUgMTMuOCUpIil9OwogICAgICB9CgogICAgICAvKiBMaW5rIHZhcmlhbnQgKi8KICAgICAgLmJ1dHRvbi5saW5rIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uLWNvbG9yOiB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IGF1dG87CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi5saW5rOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb24tY29sb3I6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogU3RhdHVzIHN0YXRlcyAqLwogICAgICAuYnV0dG9uLnBlbmRpbmcsCiAgICAgIC5idXR0b24uc3VjY2VzcywKICAgICAgLmJ1dHRvbi5lcnJvciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzNnB4OyAvKiBTcGFjZSBmb3Igc3Bpbm5lciAqLwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20ucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLXNtLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1zbS5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtbGcucGVuZGluZywKICAgICAgLmJ1dHRvbi5zaXplLWxnLnN1Y2Nlc3MsCiAgICAgIC5idXR0b24uc2l6ZS1sZy5lcnJvciB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiA0NHB4OwogICAgICB9CgogICAgICAuYnV0dG9uLnBlbmRpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTMuMSA5My45JSA2Ny44JSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjEzLjEgOTMuOSUgNjcuOCUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIiwgImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMikiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAuYnV0dG9uLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDYyLjglIDcwLjYlIC8gMC4yKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDYyLjglIDcwLjYlKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZWQgc3RhdGUgKi8KICAgICAgLmJ1dHRvbi5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEhpZGRlbiBzdGF0ZSAqLwogICAgICAuYnV0dG9uLmhpZGRlbiB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogRm9jdXMgc3RhdGUgKi8KICAgICAgLmJ1dHRvbjpmb2N1cy12aXNpYmxlIHsKICAgICAgICBvdXRsaW5lOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxMy4xIDkzLjklIDY3LjglKSIpfTsKICAgICAgICBvdXRsaW5lLW9mZnNldDogMnB4OwogICAgICB9CgogICAgICAvKiBMb2FkaW5nIHNwaW5uZXIgKi8KICAgICAgZGVlcy1zcGlubmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTBweDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1zbSBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLXNwaW5uZXIgewogICAgICAgIGxlZnQ6IDE0cHg7CiAgICAgICAgd2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBJY29uIHNpemluZyB3aXRoaW4gYnV0dG9ucyAqLwogICAgICAuYnV0dG9uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CiAgICAgIAogICAgICAuYnV0dG9uLnNpemUtc20gZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogMTRweDsKICAgICAgICBoZWlnaHQ6IDE0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5idXR0b24uc2l6ZS1sZyBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgfQoKICAgICAgLyogVGV4dCBhbGlnbm1lbnQgKi8KICAgICAgLnRleHRib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICAvKioKICAgICAqIEV4dHJhY3RzIGljb24gYW5kIHRleHQgZnJvbSBsaWdodCBET00gYW5kIHNldHMgcHJvcGVydGllcwogICAgICovCiAgICBleHRyYWN0TGlnaHREb20oKSB7CiAgICAgIGNvbnN0IGljb25FbGVtZW50ID0gdGhpcy5xdWVyeVNlbGVjdG9yKCJkZWVzLWljb24iKTsKICAgICAgY29uc3QgdGV4dENvbnRlbnQgPSBBcnJheS5mcm9tKHRoaXMuY2hpbGROb2RlcykuZmlsdGVyKChub2RlMikgPT4gbm9kZTIubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKS5tYXAoKG5vZGUyKSA9PiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKS5maWx0ZXIoQm9vbGVhbikuam9pbigiICIpOwogICAgICBpZiAodGV4dENvbnRlbnQgJiYgIXRoaXMudGV4dCkgewogICAgICAgIHRoaXMudGV4dCA9IHRleHRDb250ZW50OwogICAgICB9CiAgICAgIGlmIChpY29uRWxlbWVudCkgewogICAgICAgIGNvbnN0IGljb25WYWx1ZSA9IGljb25FbGVtZW50Lmljb24gfHwgaWNvbkVsZW1lbnQuZ2V0QXR0cmlidXRlKCJpY29uIikgfHwgKGljb25FbGVtZW50Lmljb25GQSA/IGBmYToke2ljb25FbGVtZW50Lmljb25GQX1gIDogbnVsbCk7CiAgICAgICAgaWYgKGljb25WYWx1ZSkgewogICAgICAgICAgY29uc3QgY2hpbGRyZW4yID0gQXJyYXkuZnJvbSh0aGlzLmNoaWxkTm9kZXMpOwogICAgICAgICAgY29uc3QgaWNvbkluZGV4ID0gY2hpbGRyZW4yLmluZGV4T2YoaWNvbkVsZW1lbnQpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGVzID0gY2hpbGRyZW4yLmZpbHRlcigobm9kZTIpID0+IG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKTsKICAgICAgICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBmaXJzdFRleHRJbmRleCA9IGNoaWxkcmVuMi5pbmRleE9mKHRleHROb2Rlc1swXSk7CiAgICAgICAgICAgIHRoaXMuaWNvblBvc2l0aW9uID0gaWNvbkluZGV4IDwgZmlyc3RUZXh0SW5kZXggPyAibGVmdCIgOiAicmlnaHQiOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5pY29uID0gaWNvblZhbHVlOwogICAgICAgIH0KICAgICAgICBpY29uRWxlbWVudC5yZW1vdmUoKTsKICAgICAgfQogICAgICB0aGlzLmlubmVySFRNTCA9ICIiOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBjb25zdCB0eXBlTWFwID0gewogICAgICAgICJub3JtYWwiOiAiZGVmYXVsdCIsCiAgICAgICAgImhpZ2hsaWdodGVkIjogImRlc3RydWN0aXZlIiwKICAgICAgICAiZGlzY3JlZXQiOiAib3V0bGluZSIsCiAgICAgICAgImJpZyI6ICJkZWZhdWx0IgogICAgICAgIC8vIFdpbGwgdXNlIHNpemUgaW5zdGVhZAogICAgICB9OwogICAgICBjb25zdCBhY3R1YWxUeXBlID0gdHlwZU1hcFt0aGlzLnR5cGVdIHx8IHRoaXMudHlwZTsKICAgICAgY29uc3QgYWN0dWFsU2l6ZSA9IHRoaXMudHlwZSA9PT0gImJpZyIgPyAibGciIDogdGhpcy5zaXplOwogICAgICBjb25zdCBsZWZ0SWNvbiA9IHRoaXMuaWNvblBvc2l0aW9uID09PSAibGVmdCIgJiYgdGhpcy5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuaWNvbn0+PC9kZWVzLWljb24+YCA6ICIiOwogICAgICBjb25zdCByaWdodEljb24gPSB0aGlzLmljb25Qb3NpdGlvbiA9PT0gInJpZ2h0IiAmJiB0aGlzLmljb24gPyBiMmA8ZGVlcy1pY29uIC5pY29uPSR7dGhpcy5pY29ufT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICAgIGNvbnN0IGlzSWNvbk9ubHkgPSBhY3R1YWxTaXplID09PSAiaWNvbiIgJiYgdGhpcy5pY29uOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYnV0dG9uICR7dGhpcy5pc0hpZGRlbiA/ICJoaWRkZW4iIDogIiJ9ICR7YWN0dWFsVHlwZX0gc2l6ZS0ke2FjdHVhbFNpemV9ICR7dGhpcy5zdGF0dXN9ICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIke3RoaXMuZGlzcGF0Y2hDbGlja30iCiAgICAgID4KICAgICAgICAke3RoaXMuc3RhdHVzID09PSAibm9ybWFsIiA/IGIyYGAgOiBiMmAKICAgICAgICAgIDxkZWVzLXNwaW5uZXIKICAgICAgICAgICAgLmJudz0ke3RydWV9CiAgICAgICAgICAgIHN0YXR1cz0iJHt0aGlzLnN0YXR1c30iCiAgICAgICAgICAgIHNpemU9IiR7YWN0dWFsU2l6ZSA9PT0gInNtIiA/IDE0IDogYWN0dWFsU2l6ZSA9PT0gImxnIiA/IDE4IDogMTZ9IgogICAgICAgICAgPjwvZGVlcy1zcGlubmVyPgogICAgICAgIGB9CiAgICAgICAgJHtsZWZ0SWNvbn0KICAgICAgICAke2lzSWNvbk9ubHkgPyAiIiA6IGIyYDxkaXYgY2xhc3M9InRleHRib3giPiR7dGhpcy50ZXh0IHx8ICJCdXR0b24ifTwvZGl2PmB9CiAgICAgICAgJHtyaWdodEljb259CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGRpc3BhdGNoQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNsaWNrZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7CiAgICAgICAgICBkYXRhOiB0aGlzLmV2ZW50RGV0YWlsRGF0YQogICAgICAgIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZXh0cmFjdExpZ2h0RG9tKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczM1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQnV0dG9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc3RhdHNncmlkL2RlZXMtc3RhdHNncmlkLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTM1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnMzNiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0YXRzR3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtc3RhdHNncmlkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGlsZXNfZGVjb3JhdG9yczsKICBsZXQgX3RpbGVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGlsZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9nYXBfZGVjb3JhdG9yczsKICBsZXQgX2dhcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2dhcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2dyaWRBY3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZXh0TWVudUFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0YXRzR3JpZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90aWxlc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWluVGlsZVdpZHRoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ2FwX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfZ3JpZEFjdGlvbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX2NvbnRleHRNZW51VmlzaWJsZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29udGV4dE1lbnVBY3Rpb25zX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTM1KHRoaXMsIG51bGwsIF90aWxlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aWxlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGlsZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRpbGVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RpbGVzX2luaXRpYWxpemVycywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX21pblRpbGVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5UaWxlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1pblRpbGVXaWR0aCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5taW5UaWxlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pblRpbGVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9taW5UaWxlV2lkdGhfaW5pdGlhbGl6ZXJzLCBfbWluVGlsZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dhcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJnYXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImdhcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5nYXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmdhcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9nYXBfaW5pdGlhbGl6ZXJzLCBfZ2FwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2dyaWRBY3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImdyaWRBY3Rpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncmlkQWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ncmlkQWN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZ3JpZEFjdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JpZEFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfZ3JpZEFjdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRleHRNZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29udGV4dE1lbnVWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51VmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGV4dE1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbnRleHRNZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNSh0aGlzLCBudWxsLCBfY29udGV4dE1lbnVQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudVBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZXh0TWVudVBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRleHRNZW51UG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51UG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGV4dE1lbnVQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUodGhpcywgbnVsbCwgX2NvbnRleHRNZW51QWN0aW9uc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZXh0TWVudUFjdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRleHRNZW51QWN0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb250ZXh0TWVudUFjdGlvbnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRleHRNZW51QWN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZXh0TWVudUFjdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RhdHNHcmlkMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNzsKICAgICN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfdGlsZXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgdGlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRpbGVzKHZhbHVlMikgewogICAgICB0aGlzLiN0aWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pblRpbGVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX3RpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfbWluVGlsZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICBnZXQgbWluVGlsZVdpZHRoKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluVGlsZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWluVGlsZVdpZHRoKHZhbHVlMikgewogICAgICB0aGlzLiNtaW5UaWxlV2lkdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNnYXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9taW5UaWxlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfaW5pdGlhbGl6ZXJzLCAxNikpOwogICAgZ2V0IGdhcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2dhcF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdhcCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZ2FwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZ3JpZEFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9nYXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9ncmlkQWN0aW9uc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZ3JpZEFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGdyaWRBY3Rpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNncmlkQWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzYodGhpcywgX2dyaWRBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjb250ZXh0TWVudVZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudVZpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBjb250ZXh0TWVudVBvc2l0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY29udGV4dE1lbnVQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbnRleHRNZW51UG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51UG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM2KHRoaXMsIF9jb250ZXh0TWVudVBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBjb250ZXh0TWVudUFjdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZXh0TWVudUFjdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZXh0TWVudUFjdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbnRleHRNZW51QWN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBDU1MgVmFyaWFibGVzIGZvciBjb25zaXN0ZW50IHNwYWNpbmcgYW5kIHNpemluZyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1ncmlkLWdhcDogMTJweDsKICAgICAgICAtLXRpbGUtcGFkZGluZzogMTZweDsKICAgICAgICAtLWhlYWRlci1zcGFjaW5nOiAxMnB4OwogICAgICAgIC0tY29udGVudC1taW4taGVpZ2h0OiA0MHB4OwogICAgICAgIC0tdmFsdWUtZm9udC1zaXplOiAyNnB4OwogICAgICAgIC0tdW5pdC1mb250LXNpemU6IDE0cHg7CiAgICAgICAgLS1sYWJlbC1mb250LXNpemU6IDEycHg7CiAgICAgICAgLS10aXRsZS1mb250LXNpemU6IDEzcHg7CiAgICAgICAgLS1kZXNjcmlwdGlvbi1zcGFjaW5nOiA4cHg7CiAgICAgICAgLS1ib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgLS10cmFuc2l0aW9uLWR1cmF0aW9uOiAwLjE1czsKICAgICAgfQoKICAgICAgLyogR3JpZCBMYXlvdXQgKi8KICAgICAgLmdyaWQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi1ib3R0b206IGNhbGModmFyKC0tZ3JpZC1nYXApICogMS41KTsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JpZC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5ncmlkLWFjdGlvbnMgZGVlcy1idXR0b24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgke3IoMjUwKX1weCwgMWZyKSk7CiAgICAgICAgZ2FwOiAke3IoMTYpfXB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBUaWxlIEJhc2UgU3R5bGVzICovCiAgICAgIC5zdGF0cy10aWxlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMyMDIwMjAiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm9yZGVyLXJhZGl1cyk7CiAgICAgICAgcGFkZGluZzogdmFyKC0tdGlsZS1wYWRkaW5nKTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgdmFyKC0tdHJhbnNpdGlvbi1kdXJhdGlvbikgZWFzZTsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBkMGQwZCIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDBkMGQwIiwgIiMyYTJhMmEiKX07CiAgICAgIH0KCiAgICAgIC5zdGF0cy10aWxlLmNsaWNrYWJsZSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICB9CgogICAgICAuc3RhdHMtdGlsZS5jbGlja2FibGU6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtMXB4KTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA2cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4wMykiLCAicmdiYSgwLDAsMCwwLjE1KSIpfTsKICAgICAgfQoKICAgICAgLyogVGlsZSBIZWFkZXIgKi8KICAgICAgLnRpbGUtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogZmxleC1zdGFydDsKICAgICAgICBtYXJnaW4tYm90dG9tOiB2YXIoLS1oZWFkZXItc3BhY2luZyk7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50aWxlLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXRpdGxlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICAgIH0KCiAgICAgIC50aWxlLWljb24gewogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAvKiBUaWxlIENvbnRlbnQgKi8KICAgICAgLnRpbGUtY29udGVudCB7CiAgICAgICAgbWluLWhlaWdodDogdmFyKC0tY29udGVudC1taW4taGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLnRpbGUtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAudGlsZS11bml0IHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXVuaXQtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNDAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLnRpbGUtZGVzY3JpcHRpb24gewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgbWFyZ2luLXRvcDogdmFyKC0tZGVzY3JpcHRpb24tc3BhY2luZyk7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC8qIEdhdWdlIFN0eWxlcyAqLwogICAgICAuZ2F1Z2Utd3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuZ2F1Z2UtY29udGFpbmVyIHsKICAgICAgICB3aWR0aDogMTIwcHg7CiAgICAgICAgaGVpZ2h0OiA3MHB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW4tdG9wOiAtOHB4OwogICAgICB9CgogICAgICAuZ2F1Z2Utc3ZnIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1iYWNrZ3JvdW5kIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBzdHJva2Utd2lkdGg6IDY7CiAgICAgIH0KCiAgICAgIC5nYXVnZS1maWxsIHsKICAgICAgICBmaWxsOiBub25lOwogICAgICAgIHN0cm9rZS13aWR0aDogNjsKICAgICAgICBzdHJva2UtbGluZWNhcDogcm91bmQ7CiAgICAgICAgdHJhbnNpdGlvbjogc3Ryb2tlLWRhc2hvZmZzZXQgMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ2F1Z2UtdGV4dCB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtYW5jaG9yOiBtaWRkbGU7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CiAgICAgIAogICAgICAuZ2F1Z2UtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAvKiBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAucGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wZXJjZW50YWdlLWJhciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlOGU4ZTgiLCAiIzFhMWExYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAucGVyY2VudGFnZS1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2UwZTBlMCIpfTsKICAgICAgICB0cmFuc2l0aW9uOiB3aWR0aCAwLjZzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAvKiBNdWx0aSBQZXJjZW50YWdlIFN0eWxlcyAqLwogICAgICAubXVsdGktcGVyY2VudGFnZS13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbXMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgbWFyZ2luLXRvcDogYXV0bzsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgfQoKICAgICAgLm11bHRpLXBlcmNlbnRhZ2UtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubXVsdGktcGVyY2VudGFnZS1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tdWx0aS1wZXJjZW50YWdlLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIENQVSBDb3JlcyBTdHlsZXMgKi8KICAgICAgLmNwdS1jb3Jlcy13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiA4MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmVzLWhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS12YWx1ZS1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuMTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtdW5pdCB7CiAgICAgICAgZm9udC1zaXplOiB2YXIoLS11bml0LWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLmNwdS1jb3Jlcy1iYXJzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgICBnYXA6IDNweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZXMtYmFycy5jZW50ZXJlZCB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItY29udGFpbmVyIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogNnB4OwogICAgICAgIG1heC13aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5jcHUtY29yZS1iYXItd3JhcHBlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U4ZThlOCIsICIjMWExYTFhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBtaW4taGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NjY2NiIsICIjODg4ODg4Iil9OwogICAgICAgIHRyYW5zaXRpb246IGhlaWdodCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSksIGJhY2tncm91bmQtY29sb3IgMC4zcyBlYXNlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweCAycHggMCAwOwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubG93IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSIsICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtYmFyLWZpbGwubWVkaXVtIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQ1LjQgOTMuNCUgNDcuNSUpIiwgImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIpfTsKICAgICAgfQoKICAgICAgLmNwdS1jb3JlLWJhci1maWxsLmhpZ2ggewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAuY3B1LWNvcmUtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogOXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAvKiBQYXJ0aXRpb24gU3R5bGVzICovCiAgICAgIC5wYXJ0aXRpb24td3JhcHBlciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1wZXJjZW50YWdlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMzMzMyIsICIjZTBlMGUwIil9OwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuNnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tYmFyLWZpbGwuY3JpdGljYWwgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgODQuMiUgNjAuMiUpIil9OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICAucGFydGl0aW9uLXN0YXQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjAyZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tc3RhdC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgIH0KCiAgICAgIC5wYXJ0aXRpb24tbWV0YSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1maWxlc3lzdGVtIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgfQoKICAgICAgLnBhcnRpdGlvbi1tb3VudHBvaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICB9CgogICAgICAvKiBEaXNrIFN0eWxlcyAqLwogICAgICAuZGlzay13cmFwcGVyIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZmxleDogMTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRpc2stY2FwYWNpdHkgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAuZGlzay1tb2RlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLXR5cGUtYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDIxNSAyMC4yJSAxNi44JSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5kaXNrLW1ldHJpY3MgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiBhdXRvOwogICAgICB9CgogICAgICAuZGlzay1pb3BzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1pb3BzLWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgfQoKICAgICAgLmRpc2staW9wcy12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuZGlzay1oZWFsdGgtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBhbGlnbi1pdGVtczogYmFzZWxpbmU7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC12YWx1ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDguOCUpIiwgImhzbCgyMTAgNDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1iYXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZThlOGU4IiwgIiMxYTFhMWEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC42cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDJweDsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwuZ29vZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmRpc2staGVhbHRoLWZpbGwud2FybmluZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NS40IDkzLjQlIDQ3LjUlKSIsICJoc2woNDUuNCA5My40JSA0Ny41JSkiKX07CiAgICAgIH0KCiAgICAgIC5kaXNrLWhlYWx0aC1maWxsLmNyaXRpY2FsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUpIiwgImhzbCgwIDg0LjIlIDYwLjIlKSIpfTsKICAgICAgfQoKICAgICAgLyogVHJlbmQgU3R5bGVzICovCiAgICAgIC50cmVuZC1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICB9CgogICAgICAudHJlbmQtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBiYXNlbGluZTsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLnRyZW5kLXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IHZhcigtLXZhbHVlLWZvbnQtc2l6ZSk7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgOC44JSkiLCAiaHNsKDIxMCA0MCUgOTglKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS4xOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMjVlbTsKICAgICAgfQoKICAgICAgLnRyZW5kLXVuaXQgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdW5pdC1mb250LXNpemUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAudHJlbmQtbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tbGFiZWwtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDU2LjklKSIsICJoc2woMjE1IDIwLjIlIDU1LjElKSIpfTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLnRyZW5kLWdyYXBoIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDI4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbi10b3A6IGF1dG87CiAgICAgIH0KCiAgICAgIC50cmVuZC1zdmcgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLnRyZW5kLWxpbmUgewogICAgICAgIGZpbGw6IG5vbmU7CiAgICAgICAgc3Ryb2tlOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzk5OTk5OSIsICIjNjY2NjY2Iil9OwogICAgICAgIHN0cm9rZS13aWR0aDogMS41OwogICAgICAgIHN0cm9rZS1saW5lam9pbjogcm91bmQ7CiAgICAgICAgc3Ryb2tlLWxpbmVjYXA6IHJvdW5kOwogICAgICB9CgogICAgICAudHJlbmQtYXJlYSB7CiAgICAgICAgZmlsbDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMTUwLCAxNTAsIDE1MCwgMC4wOCkiLCAicmdiYSgxMDAsIDEwMCwgMTAwLCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLyogVGV4dCBWYWx1ZSBTdHlsZXMgKi8KICAgICAgLnRleHQtdmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogdmFyKC0tdmFsdWUtZm9udC1zaXplKTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSA4LjglKSIsICJoc2woMjEwIDQwJSA5OCUpIil9OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjE7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyNWVtOwogICAgICB9CgogICAgICAvKiBDb250ZXh0IE1lbnUgKi8KICAgICAgZGVlcy1jb250ZXh0bWVudSB7CiAgICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNih0aGlzLCBfY29udGV4dE1lbnVBY3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JpZEFjdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImdyaWQtdGl0bGUiPjwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmdyaWRBY3Rpb25zLm1hcCgoYWN0aW9uKSA9PiBiMmAKICAgICAgICAgICAgICA8ZGVlcy1idXR0b24gCiAgICAgICAgICAgICAgICBAY2xpY2tlZD0keygpID0+IHRoaXMuaGFuZGxlR3JpZEFjdGlvbihhY3Rpb24pfQogICAgICAgICAgICAgICAgdHlwZT0ib3V0bGluZSIKICAgICAgICAgICAgICAgIHNpemU9InNtIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICR7YWN0aW9uLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke2FjdGlvbi5pY29uTmFtZX0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICAgICR7YWN0aW9uLm5hbWV9CiAgICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCA6ICIifQogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCIgc3R5bGU9ImdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoJHt0aGlzLm1pblRpbGVXaWR0aH1weCwgMWZyKSk7IGdhcDogJHt0aGlzLmdhcH1weDsiPgogICAgICAgICR7dGhpcy50aWxlcy5tYXAoKHRpbGUpID0+IHRoaXMucmVuZGVyVGlsZSh0aWxlKSl9CiAgICAgIDwvZGl2PgoKICAgICAgJHt0aGlzLmNvbnRleHRNZW51VmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWNvbnRleHRtZW51CiAgICAgICAgICAueD0ke3RoaXMuY29udGV4dE1lbnVQb3NpdGlvbi54fQogICAgICAgICAgLnk9JHt0aGlzLmNvbnRleHRNZW51UG9zaXRpb24ueX0KICAgICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmNvbnRleHRNZW51QWN0aW9uc30KICAgICAgICAgIEBjbGlja2VkPSR7KCkgPT4gdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZX0KICAgICAgICA+PC9kZWVzLWNvbnRleHRtZW51PgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZSh0aWxlKSB7CiAgICAgIGNvbnN0IGhhc0FjdGlvbnMgPSB0aWxlLmFjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA+IDA7CiAgICAgIGNvbnN0IGNsaWNrYWJsZSA9IGhhc0FjdGlvbnMgJiYgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMTsKICAgICAgY29uc3QgY29sdW1uU3BhbiA9IHRpbGUuY29sdW1uU3BhbiAmJiB0aWxlLmNvbHVtblNwYW4gPiAxID8gdGlsZS5jb2x1bW5TcGFuIDogdm9pZCAwOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0ic3RhdHMtdGlsZSAke2NsaWNrYWJsZSA/ICJjbGlja2FibGUiIDogIiJ9IgogICAgICAgIHN0eWxlPSIke2NvbHVtblNwYW4gPyBgZ3JpZC1jb2x1bW46IHNwYW4gJHtjb2x1bW5TcGFufWAgOiAiIn0iCiAgICAgICAgQGNsaWNrPSR7Y2xpY2thYmxlID8gKCkgPT4gdGhpcy5oYW5kbGVUaWxlQWN0aW9uKHRpbGUuYWN0aW9uc1swXSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgICAgQGNvbnRleHRtZW51PSR7aGFzQWN0aW9ucyA/IChlMTEpID0+IHRoaXMuc2hvd0NvbnRleHRNZW51KGUxMSwgdGlsZSkgOiB2b2lkIDB9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLWhlYWRlciI+CiAgICAgICAgICA8aDMgY2xhc3M9InRpbGUtdGl0bGUiPiR7dGlsZS50aXRsZX08L2gzPgogICAgICAgICAgJHt0aWxlLmljb24gPyBiMmAKICAgICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0idGlsZS1pY29uIiAuaWNvbj0ke3RpbGUuaWNvbn0gc2l6ZT0ic21hbGwiPjwvZGVlcy1pY29uPgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InRpbGUtY29udGVudCI+CiAgICAgICAgICAke3RoaXMucmVuZGVyVGlsZUNvbnRlbnQodGlsZSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgJHt0aWxlLmRlc2NyaXB0aW9uICYmIHRpbGUudHlwZSAhPT0gInRyZW5kIiA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idGlsZS1kZXNjcmlwdGlvbiI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGlsZUNvbnRlbnQodGlsZSkgewogICAgICBzd2l0Y2ggKHRpbGUudHlwZSkgewogICAgICAgIGNhc2UgIm51bWJlciI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgIDxzcGFuPiR7dGlsZS52YWx1ZX08L3NwYW4+CiAgICAgICAgICAgICR7dGlsZS51bml0ID8gYjJgPHNwYW4gY2xhc3M9InRpbGUtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgY2FzZSAiZ2F1Z2UiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyR2F1Z2UodGlsZSk7CiAgICAgICAgY2FzZSAicGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJQZXJjZW50YWdlKHRpbGUpOwogICAgICAgIGNhc2UgInRyZW5kIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRyZW5kKHRpbGUpOwogICAgICAgIGNhc2UgIm11bHRpUGVyY2VudGFnZSI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSk7CiAgICAgICAgY2FzZSAiY3B1Q29yZXMiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyQ3B1Q29yZXModGlsZSk7CiAgICAgICAgY2FzZSAicGFydGl0aW9uIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhcnRpdGlvbih0aWxlKTsKICAgICAgICBjYXNlICJkaXNrIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpc2sodGlsZSk7CiAgICAgICAgY2FzZSAidGV4dCI6CiAgICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXh0LXZhbHVlIiBzdHlsZT0iJHt0aWxlLmNvbG9yID8gYGNvbG9yOiAke3RpbGUuY29sb3J9YCA6ICIifSI+CiAgICAgICAgICAgICR7dGlsZS52YWx1ZX0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGA7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgfQogICAgcmVuZGVyR2F1Z2UodGlsZSkgewogICAgICBjb25zdCB2YWx1ZTIgPSB0eXBlb2YgdGlsZS52YWx1ZSA9PT0gIm51bWJlciIgPyB0aWxlLnZhbHVlIDogcGFyc2VGbG9hdCh0aWxlLnZhbHVlKTsKICAgICAgY29uc3Qgb3B0aW9ucyA9IHRpbGUuZ2F1Z2VPcHRpb25zIHx8IHsgbWluOiAwLCBtYXg6IDEwMCB9OwogICAgICBjb25zdCBwZXJjZW50YWdlID0gKHZhbHVlMiAtIG9wdGlvbnMubWluKSAvIChvcHRpb25zLm1heCAtIG9wdGlvbnMubWluKSAqIDEwMDsKICAgICAgY29uc3Qgd2lkdGggPSAxMjA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDcwOwogICAgICBjb25zdCBzdHJva2VXaWR0aCA9IDY7CiAgICAgIGNvbnN0IHBhZGRpbmcgPSBzdHJva2VXaWR0aCAvIDIgKyAyOwogICAgICBjb25zdCByYWRpdXMgPSA0MDsKICAgICAgY29uc3QgY2VudGVyWCA9IHdpZHRoIC8gMjsKICAgICAgY29uc3QgY2VudGVyWSA9IGhlaWdodCAtIHBhZGRpbmc7CiAgICAgIGNvbnN0IHN0YXJ0WCA9IGNlbnRlclggLSByYWRpdXM7CiAgICAgIGNvbnN0IHN0YXJ0WSA9IGNlbnRlclk7CiAgICAgIGNvbnN0IGVuZFggPSBjZW50ZXJYICsgcmFkaXVzOwogICAgICBjb25zdCBlbmRZID0gY2VudGVyWTsKICAgICAgY29uc3QgYXJjUGF0aCA9IGBNICR7c3RhcnRYfSAke3N0YXJ0WX0gQSAke3JhZGl1c30gJHtyYWRpdXN9IDAgMCAxICR7ZW5kWH0gJHtlbmRZfWA7CiAgICAgIGNvbnN0IGNpcmN1bWZlcmVuY2UgPSBNYXRoLlBJICogcmFkaXVzOwogICAgICBjb25zdCBzdHJva2VEYXNob2Zmc2V0ID0gY2lyY3VtZmVyZW5jZSAtIGNpcmN1bWZlcmVuY2UgKiBwZXJjZW50YWdlIC8gMTAwOwogICAgICBsZXQgc3Ryb2tlQ29sb3IgPSB0aWxlLmNvbG9yIHx8IGNzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyOC44JSkiLCAiaHNsKDIxMCA0MCUgNzglKSIpOwogICAgICBpZiAob3B0aW9ucy50aHJlc2hvbGRzKSB7CiAgICAgICAgY29uc3Qgc29ydGVkVGhyZXNob2xkcyA9IFsuLi5vcHRpb25zLnRocmVzaG9sZHNdLnNvcnQoKGE1LCBiNSkgPT4gYjUudmFsdWUgLSBhNS52YWx1ZSk7CiAgICAgICAgZm9yIChjb25zdCB0aHJlc2hvbGQgb2Ygc29ydGVkVGhyZXNob2xkcykgewogICAgICAgICAgaWYgKHZhbHVlMiA+PSB0aHJlc2hvbGQudmFsdWUpIHsKICAgICAgICAgICAgc3Ryb2tlQ29sb3IgPSB0aHJlc2hvbGQuY29sb3I7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImdhdWdlLWNvbnRhaW5lciI+CiAgICAgICAgICA8c3ZnIGNsYXNzPSJnYXVnZS1zdmciIHZpZXdCb3g9IjAgMCAke3dpZHRofSAke2hlaWdodH0iIHByZXNlcnZlQXNwZWN0UmF0aW89InhNaWRZTWlkIG1lZXQiPgogICAgICAgICAgICA8IS0tIEJhY2tncm91bmQgYXJjIC0tPgogICAgICAgICAgICA8cGF0aAogICAgICAgICAgICAgIGNsYXNzPSJnYXVnZS1iYWNrZ3JvdW5kIgogICAgICAgICAgICAgIGQ9IiR7YXJjUGF0aH0iCiAgICAgICAgICAgIC8+CiAgICAgICAgICAgIDwhLS0gRmlsbGVkIGFyYyAtLT4KICAgICAgICAgICAgPHBhdGgKICAgICAgICAgICAgICBjbGFzcz0iZ2F1Z2UtZmlsbCIKICAgICAgICAgICAgICBkPSIke2FyY1BhdGh9IgogICAgICAgICAgICAgIHN0cm9rZT0iJHtzdHJva2VDb2xvcn0iCiAgICAgICAgICAgICAgc3Ryb2tlLWRhc2hhcnJheT0iJHtjaXJjdW1mZXJlbmNlfSIKICAgICAgICAgICAgICBzdHJva2UtZGFzaG9mZnNldD0iJHtzdHJva2VEYXNob2Zmc2V0fSIKICAgICAgICAgICAgLz4KICAgICAgICAgICAgPCEtLSBWYWx1ZSB0ZXh0IC0tPgogICAgICAgICAgICA8dGV4dCBjbGFzcz0iZ2F1Z2UtdGV4dCIgeD0iJHtjZW50ZXJYfSIgeT0iJHtjZW50ZXJZIC0gOH0iIGRvbWluYW50LWJhc2VsaW5lPSJtaWRkbGUiPgogICAgICAgICAgICAgIDx0c3Bhbj4ke3ZhbHVlMn08L3RzcGFuPiR7dGlsZS51bml0ID8gYjJgPHRzcGFuIGNsYXNzPSJnYXVnZS11bml0IiBkeD0iMiIgZHk9IjAiPiR7dGlsZS51bml0fTwvdHNwYW4+YCA6ICIifQogICAgICAgICAgICA8L3RleHQ+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyUGVyY2VudGFnZSh0aWxlKSB7CiAgICAgIGNvbnN0IHZhbHVlMiA9IHR5cGVvZiB0aWxlLnZhbHVlID09PSAibnVtYmVyIiA/IHRpbGUudmFsdWUgOiBwYXJzZUZsb2F0KHRpbGUudmFsdWUpOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5taW4oMTAwLCBNYXRoLm1heCgwLCB2YWx1ZTIpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwZXJjZW50YWdlLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBlcmNlbnRhZ2UtdmFsdWUiPiR7cGVyY2VudGFnZX0lPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgPGRpdiAKICAgICAgICAgICAgY2xhc3M9InBlcmNlbnRhZ2UtZmlsbCIgCiAgICAgICAgICAgIHN0eWxlPSJ3aWR0aDogJHtwZXJjZW50YWdlfSU7ICR7dGlsZS5jb2xvciA/IGBiYWNrZ3JvdW5kOiAke3RpbGUuY29sb3J9YCA6ICIifSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVHJlbmQodGlsZSkgewogICAgICBpZiAoIXRpbGUudHJlbmREYXRhIHx8IHRpbGUudHJlbmREYXRhLmxlbmd0aCA8IDIpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgZGF0YSA9IHRpbGUudHJlbmREYXRhOwogICAgICBjb25zdCBtYXgzID0gTWF0aC5tYXgoLi4uZGF0YSk7CiAgICAgIGNvbnN0IG1pbjMgPSBNYXRoLm1pbiguLi5kYXRhKTsKICAgICAgY29uc3QgcmFuZ2UyID0gbWF4MyAtIG1pbjMgfHwgMTsKICAgICAgY29uc3Qgd2lkdGggPSAzMDA7CiAgICAgIGNvbnN0IGhlaWdodCA9IDMyOwogICAgICBjb25zdCBwYWRkaW5nID0gMjsKICAgICAgY29uc3QgcG9pbnRzID0gZGF0YS5tYXAoKHZhbHVlMiwgaW5kZXgyKSA9PiB7CiAgICAgICAgY29uc3QgeDMgPSBpbmRleDIgLyAoZGF0YS5sZW5ndGggLSAxKSAqIHdpZHRoOwogICAgICAgIGNvbnN0IHk1ID0gcGFkZGluZyArIChoZWlnaHQgLSAyICogcGFkZGluZykgLSAodmFsdWUyIC0gbWluMykgLyByYW5nZTIgKiAoaGVpZ2h0IC0gMiAqIHBhZGRpbmcpOwogICAgICAgIHJldHVybiBgJHt4M30sJHt5NX1gOwogICAgICB9KS5qb2luKCIgIik7CiAgICAgIGNvbnN0IGFyZWFQb2ludHMgPSBgMCwke2hlaWdodH0gJHtwb2ludHN9ICR7d2lkdGh9LCR7aGVpZ2h0fWA7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idHJlbmQtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0cmVuZC1oZWFkZXIiPgogICAgICAgICAgPHNwYW4gY2xhc3M9InRyZW5kLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9zcGFuPgogICAgICAgICAgJHt0aWxlLnVuaXQgPyBiMmA8c3BhbiBjbGFzcz0idHJlbmQtdW5pdCI+JHt0aWxlLnVuaXR9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICR7dGlsZS5kZXNjcmlwdGlvbiA/IGIyYDxzcGFuIGNsYXNzPSJ0cmVuZC1sYWJlbCI+JHt0aWxlLmRlc2NyaXB0aW9ufTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idHJlbmQtZ3JhcGgiPgogICAgICAgICAgPHN2ZyBjbGFzcz0idHJlbmQtc3ZnIiB2aWV3Qm94PSIwIDAgJHt3aWR0aH0gJHtoZWlnaHR9IiBwcmVzZXJ2ZUFzcGVjdFJhdGlvPSJub25lIj4KICAgICAgICAgICAgPHBvbHlnb24gY2xhc3M9InRyZW5kLWFyZWEiIHBvaW50cz0iJHthcmVhUG9pbnRzfSIgLz4KICAgICAgICAgICAgPHBvbHlsaW5lIGNsYXNzPSJ0cmVuZC1saW5lIiBwb2ludHM9IiR7cG9pbnRzfSIgLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aVBlcmNlbnRhZ2UodGlsZSkgewogICAgICBpZiAoIXRpbGUucGVyY2VudGFnZXMgfHwgdGlsZS5wZXJjZW50YWdlcy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgaXRlbXMgPSB0aWxlLnBlcmNlbnRhZ2VzLnNsaWNlKDAsIDMpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2Utd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtcyI+CiAgICAgICAgICAke2l0ZW1zLm1hcCgoaXRlbSkgPT4gewogICAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGl0ZW0udmFsdWUpKTsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1pdGVtIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtaGVhZGVyIj4KICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtbGFiZWwiPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aS1wZXJjZW50YWdlLXZhbHVlIj4ke3BlcmNlbnRhZ2V9JTwvc3Bhbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibXVsdGktcGVyY2VudGFnZS1iYXIiPgogICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgY2xhc3M9Im11bHRpLXBlcmNlbnRhZ2UtZmlsbCIKICAgICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7cGVyY2VudGFnZX0lOyAke2l0ZW0uY29sb3IgPyBgYmFja2dyb3VuZDogJHtpdGVtLmNvbG9yfWAgOiAiIn0iCiAgICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyQ3B1Q29yZXModGlsZSkgewogICAgICBpZiAoIXRpbGUuY29yZXNEYXRhIHx8IHRpbGUuY29yZXNEYXRhLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCBjb3JlcyA9IHRpbGUuY29yZXNEYXRhOwogICAgICBjb25zdCBhdmdVc2FnZSA9IE1hdGgucm91bmQoY29yZXMucmVkdWNlKChzdW0sIGNvcmUyKSA9PiBzdW0gKyBjb3JlMi51c2FnZSwgMCkgLyBjb3Jlcy5sZW5ndGgpOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKHVzYWdlKSA9PiB7CiAgICAgICAgaWYgKHVzYWdlIDwgNTApCiAgICAgICAgICByZXR1cm4gImxvdyI7CiAgICAgICAgaWYgKHVzYWdlIDwgODApCiAgICAgICAgICByZXR1cm4gIm1lZGl1bSI7CiAgICAgICAgcmV0dXJuICJoaWdoIjsKICAgICAgfTsKICAgICAgY29uc3QgbWF4QmFyc1dpZHRoID0gY29yZXMubGVuZ3RoICogMjQgKyAoY29yZXMubGVuZ3RoIC0gMSkgKiAzOwogICAgICBjb25zdCBjb2x1bW5TcGFuID0gdGlsZS5jb2x1bW5TcGFuIHx8IDE7CiAgICAgIGNvbnN0IGVzdGltYXRlZFRpbGVXaWR0aCA9IHRoaXMubWluVGlsZVdpZHRoICogY29sdW1uU3BhbiArIChjb2x1bW5TcGFuIC0gMSkgKiB0aGlzLmdhcCAtIDMyOwogICAgICBjb25zdCBzaG91bGRDZW50ZXIgPSBtYXhCYXJzV2lkdGggPCBlc3RpbWF0ZWRUaWxlV2lkdGggKiAwLjY2NjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtd3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY3B1LWNvcmVzLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmVzLXZhbHVlIj4ke2F2Z1VzYWdlfTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtdW5pdCI+JTwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJjcHUtY29yZXMtbGFiZWwiPiR7Y29yZXMubGVuZ3RofSBjb3Jlczwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZXMtYmFycyAke3Nob3VsZENlbnRlciA/ICJjZW50ZXJlZCIgOiAiIn0iPgogICAgICAgICAgJHtjb3Jlcy5tYXAoKGNvcmUyKSA9PiB7CiAgICAgICAgY29uc3QgdXNhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIGNvcmUyLnVzYWdlKSk7CiAgICAgICAgY29uc3QgY29sb3JDbGFzcyA9IGdldENvbG9yQ2xhc3ModXNhZ2UpOwogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJjcHUtY29yZS1iYXItY29udGFpbmVyIiB0aXRsZT0iQ29yZSAke2NvcmUyLmxhYmVsIHx8IGNvcmUyLmlkfTogJHt1c2FnZX0lIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNwdS1jb3JlLWJhci13cmFwcGVyIj4KICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJjcHUtY29yZS1iYXItZmlsbCAke2NvbG9yQ2xhc3N9IgogICAgICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dXNhZ2V9JSIKICAgICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAke2NvcmVzLmxlbmd0aCA8PSAxNiA/IGIyYAogICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY3B1LWNvcmUtbGFiZWwiPiR7Y29yZTIubGFiZWwgfHwgY29yZTIuaWR9PC9zcGFuPgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZm9ybWF0Qnl0ZXMoYnl0ZXMpIHsKICAgICAgaWYgKGJ5dGVzID09PSAwKQogICAgICAgIHJldHVybiAiMCBCIjsKICAgICAgY29uc3QgazQgPSAxMDI0OwogICAgICBjb25zdCBzaXplcyA9IFsiQiIsICJLQiIsICJNQiIsICJHQiIsICJUQiIsICJQQiJdOwogICAgICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgICAgIHJldHVybiBwYXJzZUZsb2F0KChieXRlcyAvIE1hdGgucG93KGs0LCBpMTEpKS50b0ZpeGVkKDEpKSArICIgIiArIHNpemVzW2kxMV07CiAgICB9CiAgICByZW5kZXJQYXJ0aXRpb24odGlsZSkgewogICAgICBpZiAoIXRpbGUucGFydGl0aW9uRGF0YSkgewogICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJ0aWxlLXZhbHVlIj4ke3RpbGUudmFsdWV9PC9kaXY+YDsKICAgICAgfQogICAgICBjb25zdCB7IHVzZWQsIHRvdGFsLCBmaWxlc3lzdGVtLCBtb3VudFBvaW50IH0gPSB0aWxlLnBhcnRpdGlvbkRhdGE7CiAgICAgIGNvbnN0IHBlcmNlbnRhZ2UgPSBNYXRoLm1pbigxMDAsIE1hdGgubWF4KDAsIHVzZWQgLyB0b3RhbCAqIDEwMCkpOwogICAgICBjb25zdCBmcmVlID0gdG90YWwgLSB1c2VkOwogICAgICBjb25zdCBnZXRDb2xvckNsYXNzID0gKCkgPT4gewogICAgICAgIGlmIChwZXJjZW50YWdlID49IDkwKQogICAgICAgICAgcmV0dXJuICJjcml0aWNhbCI7CiAgICAgICAgaWYgKHBlcmNlbnRhZ2UgPj0gNzUpCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiIjsKICAgICAgfTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24td3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXBlcmNlbnRhZ2UiPiR7TWF0aC5yb3VuZChwZXJjZW50YWdlKX0lPC9zcGFuPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1iYXIiPgogICAgICAgICAgPGRpdgogICAgICAgICAgICBjbGFzcz0icGFydGl0aW9uLWJhci1maWxsICR7Z2V0Q29sb3JDbGFzcygpfSIKICAgICAgICAgICAgc3R5bGU9IndpZHRoOiAke3BlcmNlbnRhZ2V9JSIKICAgICAgICAgID48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwYXJ0aXRpb24tc3RhdHMiPgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPlVzZWQ8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKHVzZWQpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0icGFydGl0aW9uLXN0YXQiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0icGFydGl0aW9uLXN0YXQtbGFiZWwiPkZyZWU8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tc3RhdC12YWx1ZSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGZyZWUpfTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBhcnRpdGlvbi1tZXRhIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tZmlsZXN5c3RlbSI+JHtmaWxlc3lzdGVtfTwvc3Bhbj4KICAgICAgICAgICR7bW91bnRQb2ludCA/IGIyYDxzcGFuIGNsYXNzPSJwYXJ0aXRpb24tbW91bnRwb2ludCI+JHttb3VudFBvaW50fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpc2sodGlsZSkgewogICAgICBpZiAoIXRpbGUuZGlza0RhdGEpIHsKICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idGlsZS12YWx1ZSI+JHt0aWxlLnZhbHVlfTwvZGl2PmA7CiAgICAgIH0KICAgICAgY29uc3QgeyBjYXBhY2l0eSwgbW9kZWwsIHR5cGU6IHR5cGU1LCBpb3BzLCBoZWFsdGggfSA9IHRpbGUuZGlza0RhdGE7CiAgICAgIGNvbnN0IGdldEhlYWx0aENsYXNzID0gKHZhbHVlMikgPT4gewogICAgICAgIGlmICh2YWx1ZTIgPj0gNzApCiAgICAgICAgICByZXR1cm4gImdvb2QiOwogICAgICAgIGlmICh2YWx1ZTIgPj0gMzApCiAgICAgICAgICByZXR1cm4gIndhcm5pbmciOwogICAgICAgIHJldHVybiAiY3JpdGljYWwiOwogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImRpc2std3JhcHBlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1jYXBhY2l0eSI+JHt0aGlzLmZvcm1hdEJ5dGVzKGNhcGFjaXR5KX08L2Rpdj4KICAgICAgICAke21vZGVsIHx8IHR5cGU1ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1vZGVsIj4KICAgICAgICAgICAgJHttb2RlbCA/IGIyYDxzcGFuPiR7bW9kZWx9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgJHt0eXBlNSA/IGIyYDxzcGFuIGNsYXNzPSJkaXNrLXR5cGUtYmFkZ2UiPiR7dHlwZTV9PC9zcGFuPmAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLW1ldHJpY3MiPgogICAgICAgICAgJHtpb3BzID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1pb3BzLWl0ZW0iPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy1sYWJlbCI+UmVhZDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtdmFsdWUiPiR7aW9wcy5yZWFkLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staW9wcy1pdGVtIj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWlvcHMtbGFiZWwiPldyaXRlPC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImRpc2staW9wcy12YWx1ZSI+JHtpb3BzLndyaXRlLnRvTG9jYWxlU3RyaW5nKCl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICR7aGVhbHRoICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlzay1oZWFsdGgiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRpc2staGVhbHRoLWhlYWRlciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlzay1oZWFsdGgtbGFiZWwiPkhlYWx0aDwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaXNrLWhlYWx0aC12YWx1ZSI+JHtoZWFsdGh9JTwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaXNrLWhlYWx0aC1iYXIiPgogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0iZGlzay1oZWFsdGgtZmlsbCAke2dldEhlYWx0aENsYXNzKGhlYWx0aCl9IgogICAgICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7aGVhbHRofSUiCiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBoYW5kbGVHcmlkQWN0aW9uKGFjdGlvbikgewogICAgICBpZiAoYWN0aW9uLmFjdGlvbikgewogICAgICAgIGF3YWl0IGFjdGlvbi5hY3Rpb24oKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaGFuZGxlVGlsZUFjdGlvbihhY3Rpb24sIF90aWxlKSB7CiAgICAgIGlmIChhY3Rpb24uYWN0aW9uKSB7CiAgICAgICAgYXdhaXQgYWN0aW9uLmFjdGlvbigpOwogICAgICB9CiAgICB9CiAgICBzaG93Q29udGV4dE1lbnUoZXZlbnQsIHRpbGUpIHsKICAgICAgaWYgKCF0aWxlLmFjdGlvbnMgfHwgdGlsZS5hY3Rpb25zLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuY29udGV4dE1lbnVQb3NpdGlvbiA9IHsgeDogZXZlbnQuY2xpZW50WCwgeTogZXZlbnQuY2xpZW50WSB9OwogICAgICB0aGlzLmNvbnRleHRNZW51QWN0aW9ucyA9IHRpbGUuYWN0aW9uczsKICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSB0cnVlOwogICAgICBjb25zdCBjbG9zZUhhbmRsZXIgPSAoKSA9PiB7CiAgICAgICAgdGhpcy5jb250ZXh0TWVudVZpc2libGUgPSBmYWxzZTsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJjbGljayIsIGNsb3NlSGFuZGxlcik7CiAgICAgIH07CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgY2xvc2VIYW5kbGVyKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNTdGF0c0dyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpL2RlZXMtYXBwdWkuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgX19lc0RlY29yYXRlMzYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczM3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZW1vRGFzaGJvYXJkVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tZGFzaGJvYXJkLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hY3RpdmF0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2YXRlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vRGFzaGJvYXJkVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9hY3RpdmF0ZWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2FjdGl2YXRlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmF0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2YXRlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3RpdmF0ZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2YXRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmF0ZWRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vRGFzaGJvYXJkVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2FjdGl2YXRlZF9pbml0aWFsaXplcnMsIGZhbHNlKTsKICAgIGdldCBhY3RpdmF0ZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmF0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmF0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2YXRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3R4ID0gX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfYWN0aXZhdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp1c2VycyIsCiAgICAgICAgZGVzY3JpcHRpb246ICJPbmxpbmUgbm93IiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImFwaS1jYWxscyIsCiAgICAgICAgdGl0bGU6ICJBUEkgQ2FsbHMiLAogICAgICAgIHZhbHVlOiA0NTIwMCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJsdWNpZGU6YWN0aXZpdHkiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzEyJSBmcm9tIGxhc3QgaG91ciIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFszMmUzLCAzNWUzLCAzOGUzLCA0MWUzLCAzOWUzLCA0MmUzLCA0NTIwMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAiaGVhbHRoIiwKICAgICAgICB0aXRsZTogIlN5c3RlbSBIZWFsdGgiLAogICAgICAgIHZhbHVlOiA5OS45LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJsdWNpZGU6aGVhcnQtcHVsc2UiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTUsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSIsCiAgICAgICAgdmFsdWU6IDEyNywKICAgICAgICB1bml0OiAibXMiLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJsdWNpZGU6dGltZXIiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiLTE1bXMgZnJvbSB5ZXN0ZXJkYXkiLAogICAgICAgIGNvbG9yOiAiIzhiNWNmNiIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicmVzb3VyY2VzIiwKICAgICAgICB0aXRsZTogIlJlc291cmNlIFVzYWdlIiwKICAgICAgICB2YWx1ZTogIiIsCiAgICAgICAgdHlwZTogIm11bHRpUGVyY2VudGFnZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpzZXJ2ZXIiLAogICAgICAgIHBlcmNlbnRhZ2VzOiBbCiAgICAgICAgICB7IGxhYmVsOiAiQ1BVIiwgdmFsdWU6IDY3LCBjb2xvcjogIiMzYjgyZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiTWVtb3J5IiwgdmFsdWU6IDg0LCBjb2xvcjogIiM4YjVjZjYiIH0sCiAgICAgICAgICB7IGxhYmVsOiAiRGlzayIsIHZhbHVlOiA0NSwgY29sb3I6ICIjMTBiOTgxIiB9CiAgICAgICAgXQogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXF1ZXN0cyIsCiAgICAgICAgdGl0bGU6ICJSZXF1ZXN0cy9zZWMiLAogICAgICAgIHZhbHVlOiAxODUwLAogICAgICAgIHR5cGU6ICJ0cmVuZCIsCiAgICAgICAgaWNvbjogImx1Y2lkZTp6YXAiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiQ3VycmVudCB0aHJvdWdocHV0IiwKICAgICAgICBjb2xvcjogIiMwNmI2ZDQiLAogICAgICAgIHRyZW5kRGF0YTogWzEyMDAsIDE0MDAsIDEzNTAsIDE2MDAsIDE3NTAsIDE2ODAsIDE4NTBdCiAgICAgIH0KICAgIF07CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIHRoaXMuY3R4ID0gY29udGV4dDI7CiAgICAgIHRoaXMuYWN0aXZhdGVkID0gdHJ1ZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBhY3RpdmF0ZWQgd2l0aCBjb250ZXh0OiIsIGNvbnRleHQyKTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIkRhc2hib2FyZCIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJRdWljayBBY2Nlc3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImxheW91dERhc2hib2FyZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk92ZXJ2aWV3IikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlY2VudCIsIGljb25OYW1lOiAiY2xvY2siLCBiYWRnZTogNSwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVjZW50IikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIlJlZnJlc2ggRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnJlZnJlc2hDdyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIlJlZnJlc2hpbmcgZGFzaGJvYXJkIGRhdGEuLi4iKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsdGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlRpbWUgUmFuZ2UiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiTGl2ZSBVcGRhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6cmFkaW8iLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiTGl2ZSB1cGRhdGVzOiIsIGFjdGl2ZSkgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IEFyY2hpdmVkIiwgaWNvbk5hbWU6ICJsdWNpZGU6YXJjaGl2ZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBhcmNoaXZlZDoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJtdWx0aUZpbHRlciIsIGtleTogIkRhdGEgU291cmNlcyIsIGljb25OYW1lOiAibHVjaWRlOmRhdGFiYXNlIiwgb3B0aW9uczogWwogICAgICAgICAgICAgICAgeyBrZXk6ICJhcGkiLCBsYWJlbDogIkFQSSBTZXJ2ZXIiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgICAgICAgICB7IGtleTogIndlYiIsIGxhYmVsOiAiV2ViIFRyYWZmaWMiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpnbG9iZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibW9iaWxlIiwgbGFiZWw6ICJNb2JpbGUgQXBwIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnNtYXJ0cGhvbmUiIH0KICAgICAgICAgICAgICBdLCBvbkNoYW5nZTogKGtleXMyKSA9PiBjb25zb2xlLmxvZygiRGF0YSBzb3VyY2VzOiIsIGtleXMyKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBbmFseXRpY3MiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpiYXJDaGFydDMiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiTWV0cmljcyIsIGljb25OYW1lOiAiYWN0aXZpdHkiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJNZXRyaWNzIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImZpbGVUZXh0IiwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiQW5hbHl0aWNzIERvY3MiLCBpY29uTmFtZTogImx1Y2lkZTpleHRlcm5hbExpbmsiLCBocmVmOiAiaHR0cHM6Ly9kb2NzLmV4YW1wbGUuY29tL2FuYWx5dGljcyIgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0Q29udGVudFRhYnMoWwogICAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJPdmVydmlldyB0YWIiKSB9LAogICAgICAgIHsga2V5OiAiQW5hbHl0aWNzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbmFseXRpY3MgdGFiIikgfSwKICAgICAgICB7IGtleTogIlJlcG9ydHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlJlcG9ydHMgdGFiIikgfQogICAgICBdKTsKICAgIH0KICAgIG9uRGVhY3RpdmF0ZSgpIHsKICAgICAgdGhpcy5hY3RpdmF0ZWQgPSBmYWxzZTsKICAgICAgY29uc29sZS5sb2coIkRhc2hib2FyZCBkZWFjdGl2YXRlZCIpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogOHB4OyB9CiAgICAgICAgcCB7IGNvbG9yOiAjNzM3MzczOyBtYXJnaW4tYm90dG9tOiAzMnB4OyB9CiAgICAgICAgZGVlcy1zdGF0c2dyaWQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMzJweDsKICAgICAgICB9CgogICAgICAgIC5jdHgtYWN0aW9ucyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LDI1NSwyNTUsMC4wMik7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwyNTUsMjU1LDAuMDgpOwogICAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIH0KICAgICAgICAuY3R4LWFjdGlvbnMgaDIgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC1zaXplOiAxNnB4OyBmb250LXdlaWdodDogNjAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyB9CiAgICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4gewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMSk7CiAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjNjBhNWZhOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG46aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSg1OSwgMTMwLCAyNDYsIDAuMik7CiAgICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4xKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKICAgICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIH0KICAgICAgICAuY3R4LWJ0bi5kYW5nZXI6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyMzksIDY4LCA2OCwgMC41KTsKICAgICAgICB9CiAgICAgICAgLmN0eC1idG4uc3VjY2VzcyB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgfQogICAgICAgIC5jdHgtYnRuLnN1Y2Nlc3M6aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgzNCwgMTk3LCA5NCwgMC4yKTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgzNCwgMTk3LCA5NCwgMC41KTsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIGJhY2shIEhlcmUncyBhbiBvdmVydmlldyBvZiB5b3VyIHN5c3RlbS48L3A+CiAgICAgIDxkZWVzLXN0YXRzZ3JpZAogICAgICAgIC50aWxlcz0ke3RoaXMuc3RhdHNUaWxlc30KICAgICAgICBAdGlsZS1hY3Rpb249JHsoZTExKSA9PiBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCl9CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgoKICAgICAgPGRpdiBjbGFzcz0iY3R4LWFjdGlvbnMiPgogICAgICAgIDxoMj5Db250ZXh0IEFjdGlvbnMgKGN0eC5hcHB1aSk8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRNYWluTWVudVZpc2libGUoZmFsc2UpfT5IaWRlIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0TWFpbk1lbnVWaXNpYmxlKHRydWUpfT5TaG93IE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldFNlY29uZGFyeU1lbnVWaXNpYmxlKGZhbHNlKX0+SGlkZSBTZWNvbmRhcnkgTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodHJ1ZSl9PlNob3cgU2Vjb25kYXJ5IE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic1Zpc2libGUoZmFsc2UpfT5IaWRlIENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBzdWNjZXNzIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuc2V0Q29udGVudFRhYnNWaXNpYmxlKHRydWUpfT5TaG93IENvbnRlbnQgVGFiczwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKHRydWUpfT5Db2xsYXBzZSBNYWluIE1lbnU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51Q29sbGFwc2VkKGZhbHNlKX0+RXhwYW5kIE1haW4gTWVudTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldEJyZWFkY3J1bWJzKFsiRGFzaGJvYXJkIiwgIk92ZXJ2aWV3IiwgIlN0YXRzIl0pfT5TZXQgQnJlYWRjcnVtYnM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygicHJvamVjdHMiKX0+R28gdG8gUHJvamVjdHM8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4iIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5uYXZpZ2F0ZVRvVmlldygic2V0dGluZ3MiLCB7IHNlY3Rpb246ICJzZWN1cml0eSIgfSl9PkdvIHRvIFNldHRpbmdzL1NlY3VyaXR5PC9idXR0b24+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjdHgtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuYWN0aXZpdHlMb2cuYWRkKHsgdHlwZTogImN1c3RvbSIsIHVzZXI6ICJEZW1vIFVzZXIiLCBtZXNzYWdlOiAiQnV0dG9uIGNsaWNrZWQgZnJvbSBjdHghIiwgaWNvbk5hbWU6ICJsdWNpZGU6bW91c2UtcG9pbnRlci1jbGljayIgfSl9PkFkZCBBY3Rpdml0eSBFbnRyeTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldE1haW5NZW51QmFkZ2UoInRhc2tzIiwgOTkpfT5TZXQgVGFza3MgQmFkZ2UgdG8gOTk8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmN0eD8uYXBwdWkuY2xlYXJNYWluTWVudUJhZGdlKCJ0YXNrcyIpfT5DbGVhciBUYXNrcyBCYWRnZTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jdHg/LmFwcHVpLnNldENvbnRlbnRUYWJzQXV0b0hpZGUodHJ1ZSwgMSl9PkF1dG8taGlkZSBUYWJzICjiiaQxKTwvYnV0dG9uPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3R4LWJ0biBkYW5nZXIiIEBjbGljaz0keygpID0+IHRoaXMuY3R4Py5hcHB1aS5zZXRDb250ZW50VGFic0F1dG9IaWRlKGZhbHNlKX0+RGlzYWJsZSBBdXRvLWhpZGU8L2J1dHRvbj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImN0eC1idG4gc3VjY2VzcyIgQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRDbG9zZWFibGVUYWIoKX0+QWRkIENsb3NlYWJsZSBUYWI8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgdGFiQ291bnRlciA9IDA7CiAgICBhZGRDbG9zZWFibGVUYWIoKSB7CiAgICAgIGlmICghdGhpcy5jdHgpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgY29uc3QgdGFiS2V5ID0gYFRhYiAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLmN0eC5hcHB1aS5hZGRDb250ZW50VGFiKHsKICAgICAgICBrZXk6IHRhYktleSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwKICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGBTZWxlY3RlZCAke3RhYktleX1gKSwKICAgICAgICBjbG9zZWFibGU6IHRydWUsCiAgICAgICAgb25DbG9zZTogKCkgPT4gewogICAgICAgICAgdGhpcy5jdHg/LmFwcHVpLnJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9EYXNoYm9hcmRWaWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vU2V0dGluZ3NWaWV3ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1zZXR0aW5ncy12aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2VjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfc2VjdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2hhc0NoYW5nZXNfZGVjb3JhdG9yczsKICBsZXQgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9TZXR0aW5nc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2VjdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaGFzQ2hhbmdlc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGUzNih0aGlzLCBudWxsLCBfc2VjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWN0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWN0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY3Rpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VjdGlvbl9pbml0aWFsaXplcnMsIF9zZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzYodGhpcywgbnVsbCwgX2hhc0NoYW5nZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFzQ2hhbmdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGFzQ2hhbmdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oYXNDaGFuZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYXNDaGFuZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBfaGFzQ2hhbmdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgICNzZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9zZWN0aW9uX2luaXRpYWxpemVycywgImdlbmVyYWwiKTsKICAgIGdldCBzZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY3Rpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzNyh0aGlzLCBfc2VjdGlvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzcodGhpcywgX2hhc0NoYW5nZXNfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGhhc0NoYW5nZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoYXNDaGFuZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFzQ2hhbmdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGFzQ2hhbmdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgYXBwdWkgPSBfX3J1bkluaXRpYWxpemVyczM3KHRoaXMsIF9oYXNDaGFuZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgdGhpcy5hcHB1aSA9IGNvbnRleHQyLmFwcHVpOwogICAgICBjb25zb2xlLmxvZygiU2V0dGluZ3MgYWN0aXZhdGVkIHdpdGggcGFyYW1zOiIsIGNvbnRleHQyLnBhcmFtcyk7CiAgICAgIGlmIChjb250ZXh0Mi5wYXJhbXM/LnNlY3Rpb24pIHsKICAgICAgICB0aGlzLnNlY3Rpb24gPSBjb250ZXh0Mi5wYXJhbXMuc2VjdGlvbjsKICAgICAgfQogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRTZWNvbmRhcnlNZW51KHsKICAgICAgICBoZWFkaW5nOiAiU2V0dGluZ3MiLAogICAgICAgIGdyb3VwczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQWNjb3VudCIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnVzZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsga2V5OiAiZ2VuZXJhbCIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IHRoaXMuc2hvd1NlY3Rpb24oImdlbmVyYWwiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAicHJvZmlsZSIsIGljb25OYW1lOiAidXNlciIsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigicHJvZmlsZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJzZWN1cml0eSIsIGljb25OYW1lOiAic2hpZWxkIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJzZWN1cml0eSIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlByZWZlcmVuY2VzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2xpZGVycyIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJub3RpZmljYXRpb25zIiwgaWNvbk5hbWU6ICJiZWxsIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gdGhpcy5zaG93U2VjdGlvbigibm90aWZpY2F0aW9ucyIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJhcHBlYXJhbmNlIiwgaWNvbk5hbWU6ICJwYWxldHRlIiwgYWN0aW9uOiAoKSA9PiB0aGlzLnNob3dTZWN0aW9uKCJhcHBlYXJhbmNlIikgfQogICAgICAgICAgICBdCiAgICAgICAgICB9CiAgICAgICAgXQogICAgICB9KTsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudVNlbGVjdGlvbih0aGlzLnNlY3Rpb24pOwogICAgICBjb250ZXh0Mi5hcHB1aS5zZXRDb250ZW50VGFicyhbXSk7CiAgICB9CiAgICBvbkRlYWN0aXZhdGUoKSB7CiAgICAgIGNvbnNvbGUubG9nKCJTZXR0aW5ncyBkZWFjdGl2YXRlZCIpOwogICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgIH0KICAgIGNhbkRlYWN0aXZhdGUoKSB7CiAgICAgIGlmICh0aGlzLmhhc0NoYW5nZXMpIHsKICAgICAgICByZXR1cm4gIllvdSBoYXZlIHVuc2F2ZWQgY2hhbmdlcy4gTGVhdmUgYW55d2F5PyI7CiAgICAgIH0KICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzaG93U2VjdGlvbihzZWN0aW9uKSB7CiAgICAgIHRoaXMuc2VjdGlvbiA9IHNlY3Rpb247CiAgICAgIHRoaXMuYXBwdWk/LnNldFNlY29uZGFyeU1lbnVTZWxlY3Rpb24oc2VjdGlvbik7CiAgICB9CiAgICBzaW11bGF0ZUNoYW5nZSgpIHsKICAgICAgdGhpcy5oYXNDaGFuZ2VzID0gdHJ1ZTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgOmhvc3QgewogICAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgY29sb3I6ICNhM2EzYTM7CiAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBzYW5zLXNlcmlmOwogICAgICAgIH0KICAgICAgICBoMSB7IGNvbG9yOiAjZmFmYWZhOyBmb250LXdlaWdodDogNjAwOyBmb250LXNpemU6IDI0cHg7IG1hcmdpbi1ib3R0b206IDhweDsgfQogICAgICAgIHAgeyBjb2xvcjogIzczNzM3MzsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC5zZWN0aW9uLW5hbWUgewogICAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsMjU1LDI1NSwwLjA1KTsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjU1LDI1NSwyNTUsMC4xKTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgICBjb2xvcjogI2ZhZmFmYTsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5hY3Rpb25zIHsKICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbiB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjM2I4MmY2OwogICAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAjMjU2M2ViOwogICAgICAgIH0KICAgICAgICAud2FybmluZyB7CiAgICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8aDE+U2V0dGluZ3M8L2gxPgogICAgICA8cD5NYW5hZ2UgeW91ciBhY2NvdW50IGFuZCBhcHBsaWNhdGlvbiBwcmVmZXJlbmNlcy48L3A+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tbmFtZSI+CiAgICAgICAgQ3VycmVudCBzZWN0aW9uOiA8c3Ryb25nPiR7dGhpcy5zZWN0aW9ufTwvc3Ryb25nPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucyI+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNpbXVsYXRlQ2hhbmdlKCl9Pk1ha2UgQ2hhbmdlczwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLmhhc0NoYW5nZXMgPyBiMmA8cCBjbGFzcz0id2FybmluZyI+WW91IGhhdmUgdW5zYXZlZCBjaGFuZ2VzLiBOYXZpZ2F0aW9uIHdpbGwgcHJvbXB0IGZvciBjb25maXJtYXRpb24uPC9wPmAgOiAiIn0KICAgIGA7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1NldHRpbmdzVmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgRGVtb1Byb2plY3RzVmlldyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tcHJvamVjdHMtdmlldyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICB2YXIgRGVtb1Byb2plY3RzVmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTM2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1Byb2plY3RzVmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgICBfX3J1bkluaXRpYWxpemVyczM3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIG9uQWN0aXZhdGUoY29udGV4dDIpIHsKICAgICAgY29udGV4dDIuYXBwdWkuc2V0U2Vjb25kYXJ5TWVudSh7CiAgICAgICAgaGVhZGluZzogIlByb2plY3RzIiwKICAgICAgICBncm91cHM6IFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk15IFByb2plY3RzIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IGtleTogIkFjdGl2ZSIsIGljb25OYW1lOiAiZm9sZGVyIiwgYmFkZ2U6IDMsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJBcmNoaXZlZCIsIGljb25OYW1lOiAiYXJjaGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIikgfSwKICAgICAgICAgICAgICB7IGtleTogIlNoYXJlZCIsIGljb25OYW1lOiAidXNlcnMiLCBiYWRnZTogMiwgYmFkZ2VWYXJpYW50OiAid2FybmluZyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNoYXJlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlF1aWNrIEFjdGlvbnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp6YXAiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIk5ldyBQcm9qZWN0IiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBuZXcgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiSW1wb3J0IiwgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJJbXBvcnQgcHJvamVjdCIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiVGVtcGxhdGVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0VGVtcGxhdGUiLCBocmVmOiAiaHR0cHM6Ly90ZW1wbGF0ZXMuZXhhbXBsZS5jb20iIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkdyaWQiLCBpY29uTmFtZTogImx1Y2lkZTpncmlkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiR3JpZCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCB2aWV3IikgfSwKICAgICAgICB7IGtleTogIkJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6a2FuYmFuIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQm9hcmQgdmlldyIpIH0KICAgICAgXSk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgc2Fucy1zZXJpZjsKICAgICAgICB9CiAgICAgICAgaDEgeyBjb2xvcjogI2ZhZmFmYTsgZm9udC13ZWlnaHQ6IDYwMDsgZm9udC1zaXplOiAyNHB4OyBtYXJnaW4tYm90dG9tOiAyNHB4OyB9CiAgICAgICAgLnByb2plY3RzIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdCgyLCAxZnIpOwogICAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIH0KICAgICAgICAucHJvamVjdCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0cmFuc2l0aW9uOiBib3JkZXItY29sb3IgMC4yczsKICAgICAgICB9CiAgICAgICAgLnByb2plY3Q6aG92ZXIgewogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDI1NSwyNTUsMjU1LDAuMik7CiAgICAgICAgfQogICAgICAgIC5wcm9qZWN0IGgzIHsgY29sb3I6ICNmYWZhZmE7IG1hcmdpbjogMCAwIDhweCAwOyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgICAucHJvamVjdCBwIHsgY29sb3I6ICM3MzczNzM7IG1hcmdpbjogMDsgZm9udC1zaXplOiAxM3B4OyB9CiAgICAgICAgLmJhZGdlIHsKICAgICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICAgIGJhY2tncm91bmQ6ICMxNDUzMmQ7CiAgICAgICAgICBjb2xvcjogIzRhZGU4MDsKICAgICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGgxPlByb2plY3RzPC9oMT4KICAgICAgPGRpdiBjbGFzcz0icHJvamVjdHMiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkZyb250ZW5kIEFwcCA8c3BhbiBjbGFzcz0iYmFkZ2UiPkFjdGl2ZTwvc3Bhbj48L2gzPgogICAgICAgICAgPHA+UmVhY3QtYmFzZWQgZGFzaGJvYXJkIGFwcGxpY2F0aW9uPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkFQSSBTZXJ2ZXIgPHNwYW4gY2xhc3M9ImJhZGdlIj5BY3RpdmU8L3NwYW4+PC9oMz4KICAgICAgICAgIDxwPk5vZGUuanMgUkVTVCBBUEkgYmFja2VuZDwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJwcm9qZWN0Ij4KICAgICAgICAgIDxoMz5Nb2JpbGUgQXBwIDxzcGFuIGNsYXNzPSJiYWRnZSI+QWN0aXZlPC9zcGFuPjwvaDM+CiAgICAgICAgICA8cD5SZWFjdCBOYXRpdmUgaU9TL0FuZHJvaWQgYXBwPC9wPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InByb2plY3QiPgogICAgICAgICAgPGgzPkRvY3VtZW50YXRpb248L2gzPgogICAgICAgICAgPHA+VGVjaG5pY2FsIGRvY3VtZW50YXRpb24gc2l0ZTwvcD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9Qcm9qZWN0c1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIERlbW9UYXNrc1ZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXRhc2tzLXZpZXciKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9UYXNrc1ZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfX2VzRGVjb3JhdGUzNihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzNyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBvbkFjdGl2YXRlKGNvbnRleHQyKSB7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldFNlY29uZGFyeU1lbnUoewogICAgICAgIGhlYWRpbmc6ICJUYXNrcyIsCiAgICAgICAgZ3JvdXBzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJWaWV3cyIsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmV5ZSIsCiAgICAgICAgICAgIGl0ZW1zOiBbCiAgICAgICAgICAgICAgeyBrZXk6ICJBbGwgVGFza3MiLCBpY29uTmFtZTogImxpc3QiLCBiYWRnZTogMTIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFsbCIpIH0sCiAgICAgICAgICAgICAgeyBrZXk6ICJUb2RheSIsIGljb25OYW1lOiAiY2FsZW5kYXIiLCBiYWRnZTogMywgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVG9kYXkiKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiVXBjb21pbmciLCBpY29uTmFtZTogImNsb2NrIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVXBjb21pbmciKSB9LAogICAgICAgICAgICAgIHsga2V5OiAiQ29tcGxldGVkIiwgaWNvbk5hbWU6ICJjaGVja0NpcmNsZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkNvbXBsZXRlZCIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkZpbHRlcnMiLAogICAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWx0ZXIiLAogICAgICAgICAgICBpdGVtczogWwogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiUHJpb3JpdHkiIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJQcmlvcml0eSIsIGljb25OYW1lOiAibHVjaWRlOmZsYWciLCBvcHRpb25zOiBbCiAgICAgICAgICAgICAgICB7IGtleTogImhpZ2giLCBsYWJlbDogIkhpZ2giLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTphbGVydENpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibWVkaXVtIiwgbGFiZWw6ICJNZWRpdW0iLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTptaW51c0NpcmNsZSIgfSwKICAgICAgICAgICAgICAgIHsga2V5OiAibG93IiwgbGFiZWw6ICJMb3ciLCBjaGVja2VkOiBmYWxzZSwgaWNvbk5hbWU6ICJsdWNpZGU6Y2lyY2xlIiB9CiAgICAgICAgICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlByaW9yaXR5IGZpbHRlcjoiLCBrZXlzMikgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJkaXZpZGVyIiB9LAogICAgICAgICAgICAgIHsgdHlwZTogImhlYWRlciIsIGxhYmVsOiAiT3B0aW9ucyIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJmaWx0ZXIiLCBrZXk6ICJTaG93IFN1YnRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGlzdFRyZWUiLCBhY3RpdmU6IHRydWUsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBzdWJ0YXNrczoiLCBhY3RpdmUpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsIGFjdGl2ZTogZmFsc2UsIG9uVG9nZ2xlOiAoYWN0aXZlKSA9PiBjb25zb2xlLmxvZygiU2hvdyBjb21wbGV0ZWQ6IiwgYWN0aXZlKSB9CiAgICAgICAgICAgIF0KICAgICAgICAgIH0sCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6emFwIiwKICAgICAgICAgICAgaXRlbXM6IFsKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJBZGQgVGFzayIsIGljb25OYW1lOiAibHVjaWRlOnBsdXMiLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJBZGQgbmV3IHRhc2siKSB9LAogICAgICAgICAgICAgIHsgdHlwZTogImFjdGlvbiIsIGtleTogIkltcG9ydCBUYXNrcyIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCB0YXNrcyIpIH0sCiAgICAgICAgICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgICAgICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDbGVhciBDb21wbGV0ZWQiLCBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLCB2YXJpYW50OiAiZGFuZ2VyIiwgY29uZmlybU1lc3NhZ2U6ICJEZWxldGUgYWxsIGNvbXBsZXRlZCB0YXNrcz8iLCBhY3Rpb246ICgpID0+IGFsZXJ0KCJDbGVhcmVkIGNvbXBsZXRlZCB0YXNrcyIpIH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICAgIGNvbnRleHQyLmFwcHVpLnNldENvbnRlbnRUYWJzKFsKICAgICAgICB7IGtleTogIkxpc3QiLCBpY29uTmFtZTogImx1Y2lkZTpsaXN0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiTGlzdCIpIH0sCiAgICAgICAgeyBrZXk6ICJDYWxlbmRhciIsIGljb25OYW1lOiAibHVjaWRlOmNhbGVuZGFyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ2FsZW5kYXIiKSB9CiAgICAgIF0pOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICA6aG9zdCB7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBjb2xvcjogI2EzYTNhMzsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsICdJbnRlcicsIC1hcHBsZS1zeXN0ZW0sIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICAgIGgxIHsgY29sb3I6ICNmYWZhZmE7IGZvbnQtd2VpZ2h0OiA2MDA7IGZvbnQtc2l6ZTogMjRweDsgbWFyZ2luLWJvdHRvbTogMjRweDsgfQogICAgICAgIC50YXNrLWxpc3QgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLnRhc2sgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwyNTUsMjU1LDAuMDMpOwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgyNTUsMjU1LDI1NSwwLjA4KTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICB9CiAgICAgICAgLmNoZWNrYm94IHsKICAgICAgICAgIHdpZHRoOiAxOHB4OwogICAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgICAgYm9yZGVyOiAycHggc29saWQgIzUyNTI1MjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB9CiAgICAgICAgLnRhc2stdGV4dCB7IGNvbG9yOiAjZmFmYWZhOyBmbGV4OiAxOyB9CiAgICAgICAgLmR1ZS1kYXRlIHsgY29sb3I6ICM3MzczNzM7IGZvbnQtc2l6ZTogMTJweDsgfQogICAgICAgIC5wcmlvcml0eSB7CiAgICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIH0KICAgICAgICAucHJpb3JpdHkuaGlnaCB7IGJhY2tncm91bmQ6ICM0NTBhMGE7IGNvbG9yOiAjZjg3MTcxOyB9CiAgICAgICAgLnByaW9yaXR5Lm1lZGl1bSB7IGJhY2tncm91bmQ6ICM0NTFhMDM7IGNvbG9yOiAjZmJiZjI0OyB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxoMT5UYXNrczwvaDE+CiAgICAgIDxkaXYgY2xhc3M9InRhc2stbGlzdCI+CiAgICAgICAgPGRpdiBjbGFzcz0idGFzayI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGVja2JveCI+PC9kaXY+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGFzay10ZXh0Ij5SZXZpZXcgcHVsbCByZXF1ZXN0ICM0Mjwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJkdWUtZGF0ZSI+VG9kYXk8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0icHJpb3JpdHkgaGlnaCI+SGlnaDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPlVwZGF0ZSBkb2N1bWVudGF0aW9uPC9zcGFuPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImR1ZS1kYXRlIj5Ub21vcnJvdzwvc3Bhbj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJwcmlvcml0eSBtZWRpdW0iPk1lZGl1bTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0YXNrIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoZWNrYm94Ij48L2Rpdj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YXNrLXRleHQiPldyaXRlIHVuaXQgdGVzdHM8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZHVlLWRhdGUiPkRlYyAyMDwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9UYXNrc1ZpZXcyID0gX2NsYXNzVGhpczsKfSkoKTsKdmFyIGRlbW9GdW5jMjcgPSAoKSA9PiB7CiAgY29uc3QgYXBwQ29uZmlnID0gewogICAgYnJhbmRpbmc6IHsKICAgICAgbG9nb0ljb246ICJsdWNpZGU6Ym94IiwKICAgICAgbG9nb1RleHQ6ICJBY21lIEFwcCIKICAgIH0sCiAgICBhcHBCYXI6IHsKICAgICAgbWVudUl0ZW1zOiBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkZpbGUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgc3VibWVudTogWwogICAgICAgICAgICB7IG5hbWU6ICJOZXcgUHJvamVjdCIsIHNob3J0Y3V0OiAiQ21kK04iLCBpY29uTmFtZTogImZpbGVQbHVzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiTmV3IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiT3Blbi4uLiIsIHNob3J0Y3V0OiAiQ21kK08iLCBpY29uTmFtZTogImZvbGRlck9wZW4iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVjZW50IFByb2plY3RzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0sIHN1Ym1lbnU6IFsKICAgICAgICAgICAgICB7IG5hbWU6ICJteS1hcHAiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJPcGVuIG15LWFwcCIpIH0sCiAgICAgICAgICAgICAgeyBuYW1lOiAiY29tcG9uZW50LWxpYiIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIk9wZW4gY29tcG9uZW50LWxpYiIpIH0KICAgICAgICAgICAgXSB9LAogICAgICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICAgICAgeyBuYW1lOiAiU2F2ZSBBbGwiLCBzaG9ydGN1dDogIkNtZCtTIiwgaWNvbk5hbWU6ICJzYXZlIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2F2ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJFZGl0IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVW5kbyIsIHNob3J0Y3V0OiAiQ21kK1oiLCBpY29uTmFtZTogInVuZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJVbmRvIikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUmVkbyIsIHNob3J0Y3V0OiAiQ21kK1NoaWZ0K1oiLCBpY29uTmFtZTogInJlZG8iLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJSZWRvIikgfSwKICAgICAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgICAgIHsgbmFtZTogIkN1dCIsIHNob3J0Y3V0OiAiQ21kK1giLCBpY29uTmFtZTogInNjaXNzb3JzIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiQ3V0IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiQ29weSIsIHNob3J0Y3V0OiAiQ21kK0MiLCBpY29uTmFtZTogImNvcHkiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJDb3B5IikgfSwKICAgICAgICAgICAgeyBuYW1lOiAiUGFzdGUiLCBzaG9ydGN1dDogIkNtZCtWIiwgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJQYXN0ZSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiVG9nZ2xlIFNpZGViYXIiLCBzaG9ydGN1dDogIkNtZCtCIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiVG9nZ2xlIHNpZGViYXIiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJUb2dnbGUgQWN0aXZpdHkgTG9nIiwgc2hvcnRjdXQ6ICJDbWQrU2hpZnQrQSIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlRvZ2dsZSBhY3Rpdml0eSIpIH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJIZWxwIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfSwKICAgICAgICAgIHN1Ym1lbnU6IFsKICAgICAgICAgICAgeyBuYW1lOiAiRG9jdW1lbnRhdGlvbiIsIGljb25OYW1lOiAiYm9vayIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkRvY3MiKSB9LAogICAgICAgICAgICB7IG5hbWU6ICJLZXlib2FyZCBTaG9ydGN1dHMiLCBpY29uTmFtZTogImtleWJvYXJkIiwgc2hvcnRjdXQ6ICJDbWQrLyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIlNob3J0Y3V0cyIpIH0sCiAgICAgICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgICAgICB7IG5hbWU6ICJBYm91dCIsIGljb25OYW1lOiAiaW5mbyIsIGFjdGlvbjogYXN5bmMgKCkgPT4gY29uc29sZS5sb2coIkFib3V0IikgfQogICAgICAgICAgXQogICAgICAgIH0KICAgICAgXSwKICAgICAgYnJlYWRjcnVtYnM6ICJEYXNoYm9hcmQiLAogICAgICBzaG93V2luZG93Q29udHJvbHM6IHRydWUsCiAgICAgIHNob3dTZWFyY2g6IHRydWUsCiAgICAgIHVzZXI6IHsKICAgICAgICBuYW1lOiAiSmFuZSBTbWl0aCIsCiAgICAgICAgZW1haWw6ICJqYW5lLnNtaXRoQGV4YW1wbGUuY29tIiwKICAgICAgICBzdGF0dXM6ICJvbmxpbmUiCiAgICAgIH0sCiAgICAgIHByb2ZpbGVNZW51SXRlbXM6IFsKICAgICAgICB7IG5hbWU6ICJQcm9maWxlIiwgaWNvbk5hbWU6ICJ1c2VyIiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSIpIH0sCiAgICAgICAgeyBuYW1lOiAiQWNjb3VudCBTZXR0aW5ncyIsIGljb25OYW1lOiAic2V0dGluZ3MiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyIpIH0sCiAgICAgICAgeyBkaXZpZGVyOiB0cnVlIH0sCiAgICAgICAgeyBuYW1lOiAiSGVscCAmIFN1cHBvcnQiLCBpY29uTmFtZTogImhlbHBDaXJjbGUiLCBhY3Rpb246IGFzeW5jICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIikgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7IG5hbWU6ICJTaWduIE91dCIsIGljb25OYW1lOiAibG9nT3V0IiwgYWN0aW9uOiBhc3luYyAoKSA9PiBjb25zb2xlLmxvZygiU2lnbiBvdXQiKSB9CiAgICAgIF0KICAgIH0sCiAgICB2aWV3czogWwogICAgICB7CiAgICAgICAgaWQ6ICJkYXNoYm9hcmQiLAogICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLAogICAgICAgIGNvbnRlbnQ6ICJkZW1vLWRhc2hib2FyZC12aWV3IiwKICAgICAgICByb3V0ZTogImRhc2hib2FyZCIKICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAicHJvamVjdHMiLAogICAgICAgIG5hbWU6ICJQcm9qZWN0cyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwKICAgICAgICBjb250ZW50OiAiZGVtby1wcm9qZWN0cy12aWV3IiwKICAgICAgICByb3V0ZTogInByb2plY3RzIiwKICAgICAgICBiYWRnZTogMwogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ0YXNrcyIsCiAgICAgICAgbmFtZTogIlRhc2tzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjaGVja1NxdWFyZSIsCiAgICAgICAgY29udGVudDogImRlbW8tdGFza3MtdmlldyIsCiAgICAgICAgcm91dGU6ICJ0YXNrcyIsCiAgICAgICAgYmFkZ2U6IDEyCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInNldHRpbmdzIiwKICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNldHRpbmdzIiwKICAgICAgICBjb250ZW50OiAiZGVtby1zZXR0aW5ncy12aWV3IiwKICAgICAgICByb3V0ZTogInNldHRpbmdzLzpzZWN0aW9uPyIKICAgICAgfQogICAgXSwKICAgIG1haW5NZW51OiB7CiAgICAgIHNlY3Rpb25zOiBbCiAgICAgICAgeyBuYW1lOiAiTWFpbiIsIHZpZXdzOiBbImRhc2hib2FyZCJdIH0sCiAgICAgICAgeyBuYW1lOiAiV29ya3NwYWNlIiwgdmlld3M6IFsicHJvamVjdHMiLCAidGFza3MiXSB9CiAgICAgIF0sCiAgICAgIGJvdHRvbUl0ZW1zOiBbInNldHRpbmdzIl0KICAgIH0sCiAgICBkZWZhdWx0VmlldzogImRhc2hib2FyZCIsCiAgICBib3R0b21CYXI6IHsKICAgICAgdmlzaWJsZTogdHJ1ZSwKICAgICAgd2lkZ2V0czogWwogICAgICAgIHsKICAgICAgICAgIGlkOiAic3RhdHVzIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmFjdGl2aXR5IiwKICAgICAgICAgIGxhYmVsOiAiU3lzdGVtIE9ubGluZSIsCiAgICAgICAgICBzdGF0dXM6ICJzdWNjZXNzIiwKICAgICAgICAgIHRvb2x0aXA6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgICAgICAgICBvbkNsaWNrOiAoKSA9PiBjb25zb2xlLmxvZygiU3RhdHVzIGNsaWNrZWQiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJub3RpZmljYXRpb25zIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLAogICAgICAgICAgbGFiZWw6ICIzIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgc3RhdHVzOiAid2FybmluZyIsCiAgICAgICAgICB0b29sdGlwOiAiWW91IGhhdmUgdW5yZWFkIG5vdGlmaWNhdGlvbnMiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIk5vdGlmaWNhdGlvbnMgY2xpY2tlZCIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInZlcnNpb24iLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0QnJhbmNoIiwKICAgICAgICAgIGxhYmVsOiAidjEuMi4zIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgdG9vbHRpcDogIkN1cnJlbnQgdmVyc2lvbiIKICAgICAgICB9CiAgICAgIF0sCiAgICAgIGFjdGlvbnM6IFsKICAgICAgICB7CiAgICAgICAgICBpZDogInRlcm1pbmFsIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRlcm1pbmFsIiwKICAgICAgICAgIHRvb2x0aXA6ICJPcGVuIFRlcm1pbmFsIiwKICAgICAgICAgIHBvc2l0aW9uOiAicmlnaHQiLAogICAgICAgICAgb25DbGljazogKCkgPT4gY29uc29sZS5sb2coIlRlcm1pbmFsIGNsaWNrZWQiKQogICAgICAgIH0KICAgICAgXQogICAgfSwKICAgIG9uVmlld0NoYW5nZTogKHZpZXdJZCwgdmlldykgPT4gewogICAgICBjb25zb2xlLmxvZyhgVmlldyBjaGFuZ2VkIHRvOiAke3ZpZXdJZH0gKCR7dmlldy5uYW1lfSlgKTsKICAgIH0sCiAgICBvblNlYXJjaDogKHF1ZXJ5KSA9PiB7CiAgICAgIGNvbnNvbGUubG9nKCJTZWFyY2ggcXVlcnk6IiwgcXVlcnkpOwogICAgfQogIH07CiAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogIGNvbnRhaW5lckVsZW1lbnQuY2xhc3NOYW1lID0gImRlbW8tY29udGFpbmVyIjsKICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICBjb25zdCBhcHB1aUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLWFwcHVpIik7CiAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZChhcHB1aUVsZW1lbnQpOwogIHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgYXdhaXQgYXBwdWlFbGVtZW50LnVwZGF0ZUNvbXBsZXRlOwogICAgYXBwdWlFbGVtZW50LmNvbmZpZ3VyZShhcHBDb25maWcpOwogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGRNYW55KFsKICAgICAgICB7CiAgICAgICAgICB0eXBlOiAibG9naW4iLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogImxvZ2dlZCBpbiBmcm9tIENocm9tZSBvbiBtYWNPUyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjcmVhdGUiLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogJ2NyZWF0ZWQgcHJvamVjdCAiRnJvbnRlbmQgQXBwIicKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgICAgdXNlcjogIkpvaG4gRG9lIiwKICAgICAgICAgIG1lc3NhZ2U6ICJ1cGRhdGVkIEFQSSBkb2N1bWVudGF0aW9uIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogInZpZXciLAogICAgICAgICAgdXNlcjogIkphbmUgU21pdGgiLAogICAgICAgICAgbWVzc2FnZTogInZpZXdlZCBkYXNoYm9hcmQgYW5hbHl0aWNzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgdHlwZTogImRlbGV0ZSIsCiAgICAgICAgICB1c2VyOiAiQWRtaW4iLAogICAgICAgICAgbWVzc2FnZTogInJlbW92ZWQgZGVwcmVjYXRlZCBlbmRwb2ludCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIHR5cGU6ICJjdXN0b20iLAogICAgICAgICAgdXNlcjogIlN5c3RlbSIsCiAgICAgICAgICBtZXNzYWdlOiAic2NoZWR1bGVkIGJhY2t1cCBjb21wbGV0ZWQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZGF0YWJhc2UiCiAgICAgICAgfQogICAgICBdKTsKICAgIH0sIDUwMCk7CiAgICBhcHB1aUVsZW1lbnQudmlld0NoYW5nZWQkLnN1YnNjcmliZSgoZXZlbnQpID0+IHsKICAgICAgY29uc29sZS5sb2coIlZpZXcgY2hhbmdlZCBldmVudDoiLCBldmVudCk7CiAgICAgIGFwcHVpRWxlbWVudC5zZXRCcmVhZGNydW1icyhldmVudC52aWV3Lm5hbWUpOwogICAgfSk7CiAgICBhcHB1aUVsZW1lbnQudmlld0xpZmVjeWNsZSQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICBjb25zb2xlLmxvZygiTGlmZWN5Y2xlIGV2ZW50OiIsIGV2ZW50LnR5cGUsIGV2ZW50LnZpZXdJZCk7CiAgICB9KTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBhcHB1aUVsZW1lbnQuc2V0TWFpbk1lbnVCYWRnZSgidGFza3MiLCAxNSk7CiAgICAgIGFwcHVpRWxlbWVudC5hY3Rpdml0eUxvZy5hZGQoewogICAgICAgIHR5cGU6ICJ1cGRhdGUiLAogICAgICAgIHVzZXI6ICJTeXN0ZW0iLAogICAgICAgIG1lc3NhZ2U6ICJuZXcgdGFza3MgYWRkZWQiCiAgICAgIH0pOwogICAgfSwgNWUzKTsKICB9LCAwKTsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgJHtjb250YWluZXJFbGVtZW50fQogICAgPC9kZWVzLWRlbW93cmFwcGVyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS92aWV3LnJlZ2lzdHJ5LmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBWaWV3UmVnaXN0cnkgPSBjbGFzcyB7CiAgdmlld3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIGluc3RhbmNlcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgY3VycmVudFZpZXdJZCA9IG51bGw7CiAgYXBwdWkgPSBudWxsOwogIC8qKgogICAqIFNldCB0aGUgYXBwdWkgcmVmZXJlbmNlIGZvciB2aWV3IGFjdGl2YXRpb24gY29udGV4dAogICAqLwogIHNldEFwcHVpUmVmKGFwcHVpKSB7CiAgICB0aGlzLmFwcHVpID0gYXBwdWk7CiAgfQogIC8qKgogICAqIFJlZ2lzdGVyIGEgc2luZ2xlIHZpZXcKICAgKi8KICByZWdpc3Rlcih2aWV3KSB7CiAgICBpZiAodGhpcy52aWV3cy5oYXModmlldy5pZCkpIHsKICAgICAgY29uc29sZS53YXJuKGBWaWV3IHdpdGggaWQgIiR7dmlldy5pZH0iIGFscmVhZHkgcmVnaXN0ZXJlZC4gT3ZlcndyaXRpbmcuYCk7CiAgICB9CiAgICB0aGlzLnZpZXdzLnNldCh2aWV3LmlkLCB2aWV3KTsKICB9CiAgLyoqCiAgICogUmVnaXN0ZXIgbXVsdGlwbGUgdmlld3MKICAgKi8KICByZWdpc3RlckFsbCh2aWV3cykgewogICAgdmlld3MuZm9yRWFjaCgodmlldykgPT4gdGhpcy5yZWdpc3Rlcih2aWV3KSk7CiAgfQogIC8qKgogICAqIEdldCBhIHZpZXcgZGVmaW5pdGlvbiBieSBJRAogICAqLwogIGdldCh2aWV3SWQpIHsKICAgIHJldHVybiB0aGlzLnZpZXdzLmdldCh2aWV3SWQpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHJlZ2lzdGVyZWQgdmlldyBJRHMKICAgKi8KICBnZXRWaWV3SWRzKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy5rZXlzKCkpOwogIH0KICAvKioKICAgKiBHZXQgYWxsIHZpZXdzCiAgICovCiAgZ2V0QWxsKCkgewogICAgcmV0dXJuIEFycmF5LmZyb20odGhpcy52aWV3cy52YWx1ZXMoKSk7CiAgfQogIC8qKgogICAqIEdldCByb3V0ZSBmb3IgYSB2aWV3CiAgICovCiAgZ2V0Um91dGUodmlld0lkKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIHJldHVybiB2aWV3Py5yb3V0ZSB8fCB2aWV3Py5pZCB8fCAiIjsKICB9CiAgLyoqCiAgICogRmluZCB2aWV3IGJ5IHJvdXRlIChzdXBwb3J0cyBwYXJhbWV0ZXJpemVkIHJvdXRlcyBsaWtlICdzZXR0aW5ncy86c2VjdGlvbicpCiAgICovCiAgZmluZEJ5Um91dGUocm91dGUpIHsKICAgIGZvciAoY29uc3QgdmlldyBvZiB0aGlzLnZpZXdzLnZhbHVlcygpKSB7CiAgICAgIGNvbnN0IHZpZXdSb3V0ZSA9IHZpZXcucm91dGUgfHwgdmlldy5pZDsKICAgICAgY29uc3QgcGFyYW1zMiA9IHRoaXMubWF0Y2hSb3V0ZSh2aWV3Um91dGUsIHJvdXRlKTsKICAgICAgaWYgKHBhcmFtczIgIT09IG51bGwpIHsKICAgICAgICByZXR1cm4geyB2aWV3LCBwYXJhbXM6IHBhcmFtczIgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIHZvaWQgMDsKICB9CiAgLyoqCiAgICogTWF0Y2ggYSByb3V0ZSBwYXR0ZXJuIGFnYWluc3QgYW4gYWN0dWFsIHJvdXRlCiAgICogUmV0dXJucyBwYXJhbXMgaWYgbWF0Y2hlZCwgbnVsbCBvdGhlcndpc2UKICAgKi8KICBtYXRjaFJvdXRlKHBhdHRlcm4sIHJvdXRlKSB7CiAgICBjb25zdCBwYXR0ZXJuUGFydHMgPSBwYXR0ZXJuLnNwbGl0KCIvIik7CiAgICBjb25zdCByb3V0ZVBhcnRzID0gcm91dGUuc3BsaXQoIi8iKTsKICAgIGNvbnN0IGhhc09wdGlvbmFsUGFyYW0gPSBwYXR0ZXJuUGFydHMubGVuZ3RoID4gMCAmJiBwYXR0ZXJuUGFydHNbcGF0dGVyblBhcnRzLmxlbmd0aCAtIDFdLmVuZHNXaXRoKCI/Iik7CiAgICBpZiAoaGFzT3B0aW9uYWxQYXJhbSkgewogICAgICBpZiAocm91dGVQYXJ0cy5sZW5ndGggPCBwYXR0ZXJuUGFydHMubGVuZ3RoIC0gMSB8fCByb3V0ZVBhcnRzLmxlbmd0aCA+IHBhdHRlcm5QYXJ0cy5sZW5ndGgpIHsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgfSBlbHNlIGlmIChwYXR0ZXJuUGFydHMubGVuZ3RoICE9PSByb3V0ZVBhcnRzLmxlbmd0aCkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHBhcmFtczIgPSB7fTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHBhdHRlcm5QYXJ0cy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGxldCBwYXJ0ID0gcGF0dGVyblBhcnRzW2kxMV07CiAgICAgIGNvbnN0IGlzT3B0aW9uYWwgPSBwYXJ0LmVuZHNXaXRoKCI/Iik7CiAgICAgIGlmIChpc09wdGlvbmFsKSB7CiAgICAgICAgcGFydCA9IHBhcnQuc2xpY2UoMCwgLTEpOwogICAgICB9CiAgICAgIGlmIChwYXJ0LnN0YXJ0c1dpdGgoIjoiKSkgewogICAgICAgIGNvbnN0IHBhcmFtTmFtZSA9IHBhcnQuc2xpY2UoMSk7CiAgICAgICAgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gdm9pZCAwKSB7CiAgICAgICAgICBwYXJhbXMyW3BhcmFtTmFtZV0gPSByb3V0ZVBhcnRzW2kxMV07CiAgICAgICAgfSBlbHNlIGlmICghaXNPcHRpb25hbCkgewogICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHJvdXRlUGFydHNbaTExXSAhPT0gcGFydCkgewogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gcGFyYW1zMjsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgbmF2aWdhdGlvbiBhd2F5IGZyb20gY3VycmVudCB2aWV3IGlzIGFsbG93ZWQKICAgKi8KICBhc3luYyBjYW5MZWF2ZUN1cnJlbnRWaWV3KCkgewogICAgaWYgKCF0aGlzLmN1cnJlbnRWaWV3SWQpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgaW5zdGFuY2UgPSB0aGlzLmluc3RhbmNlcy5nZXQodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIGlmICghaW5zdGFuY2UpCiAgICAgIHJldHVybiB0cnVlOwogICAgY29uc3QgbGlmZWN5Y2xlID0gaW5zdGFuY2U7CiAgICBpZiAodHlwZW9mIGxpZmVjeWNsZS5jYW5EZWFjdGl2YXRlID09PSAiZnVuY3Rpb24iKSB7CiAgICAgIHJldHVybiBhd2FpdCBsaWZlY3ljbGUuY2FuRGVhY3RpdmF0ZSgpOwogICAgfQogICAgcmV0dXJuIHRydWU7CiAgfQogIC8qKgogICAqIEFjdGl2YXRlIGEgdmlldyAtIGhhbmRsZXMgY2FjaGluZywgbGlmZWN5Y2xlLCBhbmQgcmVuZGVyaW5nCiAgICovCiAgYXN5bmMgYWN0aXZhdGVWaWV3KHZpZXdJZCwgY29udGFpbmVyLCBwYXJhbXMyKSB7CiAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3cy5nZXQodmlld0lkKTsKICAgIGlmICghdmlldykgewogICAgICBjb25zb2xlLmVycm9yKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHNob3VsZENhY2hlID0gdmlldy5jYWNoZSAhPT0gZmFsc2U7CiAgICBpZiAodGhpcy5jdXJyZW50Vmlld0lkICYmIHRoaXMuY3VycmVudFZpZXdJZCAhPT0gdmlld0lkKSB7CiAgICAgIGF3YWl0IHRoaXMuZGVhY3RpdmF0ZVZpZXcodGhpcy5jdXJyZW50Vmlld0lkKTsKICAgIH0KICAgIGxldCBlbGVtZW50NCA9IHNob3VsZENhY2hlID8gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCkgOiB2b2lkIDA7CiAgICBpZiAoZWxlbWVudDQpIHsKICAgICAgZWxlbWVudDQuc3R5bGUuZGlzcGxheSA9ICIiOwogICAgfSBlbHNlIHsKICAgICAgZWxlbWVudDQgPSBhd2FpdCB0aGlzLmNyZWF0ZVZpZXdFbGVtZW50KHZpZXcpOwogICAgICBpZiAoIWVsZW1lbnQ0KSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGNyZWF0ZSBlbGVtZW50IGZvciB2aWV3ICIke3ZpZXdJZH0iYCk7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29udGFpbmVyLmFwcGVuZENoaWxkKGVsZW1lbnQ0KTsKICAgICAgaWYgKHNob3VsZENhY2hlKSB7CiAgICAgICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSB2aWV3SWQ7CiAgICBhd2FpdCB0aGlzLmNhbGxPbkFjdGl2YXRlKGVsZW1lbnQ0LCB2aWV3SWQsIHBhcmFtczIpOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBEZWFjdGl2YXRlIGEgdmlldyAoaGlkZSBhbmQgY2FsbCBsaWZlY3ljbGUgaG9vaykKICAgKi8KICBhc3luYyBkZWFjdGl2YXRlVmlldyh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIWluc3RhbmNlKQogICAgICByZXR1cm47CiAgICBjb25zdCBsaWZlY3ljbGUgPSBpbnN0YW5jZTsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uRGVhY3RpdmF0ZSA9PT0gImZ1bmN0aW9uIikgewogICAgICBhd2FpdCBsaWZlY3ljbGUub25EZWFjdGl2YXRlKCk7CiAgICB9CiAgICBpbnN0YW5jZS5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOwogIH0KICAvKioKICAgKiBDcmVhdGUgYSB2aWV3IGVsZW1lbnQgZnJvbSBpdHMgZGVmaW5pdGlvbiAoc3VwcG9ydHMgYXN5bmMgY29udGVudCkKICAgKi8KICBhc3luYyBjcmVhdGVWaWV3RWxlbWVudCh2aWV3KSB7CiAgICBsZXQgY29udGVudDMgPSB2aWV3LmNvbnRlbnQ7CiAgICBpZiAodHlwZW9mIGNvbnRlbnQzID09PSAiZnVuY3Rpb24iICYmICEoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpICYmIGNvbnRlbnQzLmNvbnN0cnVjdG9yLm5hbWUgPT09ICJBc3luY0Z1bmN0aW9uIikgewogICAgICB0cnkgewogICAgICAgIGNvbnRlbnQzID0gYXdhaXQgY29udGVudDMoKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gbG9hZCBhc3luYyBjb250ZW50IGZvciB2aWV3ICIke3ZpZXcuaWR9IjpgLCBlcnJvcik7CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgIH0KICAgIGxldCBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlldy5pZH0iYCk7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgZWxlbWVudDQuZGF0YXNldC52aWV3SWQgPSB2aWV3LmlkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBDYWxsIG9uQWN0aXZhdGUgbGlmZWN5Y2xlIGhvb2sgb24gYSB2aWV3IGVsZW1lbnQKICAgKi8KICBhc3luYyBjYWxsT25BY3RpdmF0ZShlbGVtZW50NCwgdmlld0lkLCBwYXJhbXMyKSB7CiAgICBjb25zdCBsaWZlY3ljbGUgPSBlbGVtZW50NDsKICAgIGlmICh0eXBlb2YgbGlmZWN5Y2xlLm9uQWN0aXZhdGUgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgY29uc3QgY29udGV4dDIgPSB7CiAgICAgICAgYXBwdWk6IHRoaXMuYXBwdWksCiAgICAgICAgdmlld0lkLAogICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICB9OwogICAgICBhd2FpdCBsaWZlY3ljbGUub25BY3RpdmF0ZShjb250ZXh0Mik7CiAgICB9CiAgfQogIC8qKgogICAqIExlZ2FjeSBtZXRob2QgLSByZW5kZXJzIHZpZXcgd2l0aG91dCBjYWNoaW5nCiAgICogQGRlcHJlY2F0ZWQgVXNlIGFjdGl2YXRlVmlldyBpbnN0ZWFkCiAgICovCiAgcmVuZGVyVmlldyh2aWV3SWQsIGNvbnRhaW5lcikgewogICAgY29uc3QgdmlldyA9IHRoaXMudmlld3MuZ2V0KHZpZXdJZCk7CiAgICBpZiAoIXZpZXcpIHsKICAgICAgY29uc29sZS5lcnJvcihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuaW5uZXJIVE1MID0gIiI7CiAgICBsZXQgZWxlbWVudDQ7CiAgICBjb25zdCBjb250ZW50MyA9IHZpZXcuY29udGVudDsKICAgIGlmICh0eXBlb2YgY29udGVudDMgPT09ICJzdHJpbmciKSB7CiAgICAgIGVsZW1lbnQ0ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChjb250ZW50Myk7CiAgICB9IGVsc2UgaWYgKHR5cGVvZiBjb250ZW50MyA9PT0gImZ1bmN0aW9uIikgewogICAgICBpZiAoY29udGVudDMucHJvdG90eXBlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnQpIHsKICAgICAgICBlbGVtZW50NCA9IG5ldyBjb250ZW50MygpOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHdyYXBwZXIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJ2aWV3LWNvbnRlbnQtd3JhcHBlciI7CiAgICAgICAgd3JhcHBlci5zdHlsZS5jc3NUZXh0ID0gImRpc3BsYXk6IGNvbnRlbnRzOyI7CiAgICAgICAgY29uc3QgdGVtcGxhdGUgPSBjb250ZW50MygpOwogICAgICAgIEQodGVtcGxhdGUsIHdyYXBwZXIpOwogICAgICAgIGVsZW1lbnQ0ID0gd3JhcHBlcjsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgY29uc29sZS5lcnJvcihgSW52YWxpZCBjb250ZW50IHR5cGUgZm9yIHZpZXcgIiR7dmlld0lkfSJgKTsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb250YWluZXIuYXBwZW5kQ2hpbGQoZWxlbWVudDQpOwogICAgdGhpcy5pbnN0YW5jZXMuc2V0KHZpZXdJZCwgZWxlbWVudDQpOwogICAgdGhpcy5jdXJyZW50Vmlld0lkID0gdmlld0lkOwogICAgcmV0dXJuIGVsZW1lbnQ0OwogIH0KICAvKioKICAgKiBHZXQgY3VycmVudGx5IGFjdGl2ZSB2aWV3IElECiAgICovCiAgZ2V0Q3VycmVudFZpZXdJZCgpIHsKICAgIHJldHVybiB0aGlzLmN1cnJlbnRWaWV3SWQ7CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgaW5zdGFuY2Ugb2YgYSB2aWV3CiAgICovCiAgZ2V0SW5zdGFuY2Uodmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgfQogIC8qKgogICAqIENsZWFyIGEgc3BlY2lmaWMgY2FjaGVkIGluc3RhbmNlCiAgICovCiAgY2xlYXJJbnN0YW5jZSh2aWV3SWQpIHsKICAgIGNvbnN0IGluc3RhbmNlID0gdGhpcy5pbnN0YW5jZXMuZ2V0KHZpZXdJZCk7CiAgICBpZiAoaW5zdGFuY2UgJiYgaW5zdGFuY2UucGFyZW50Tm9kZSkgewogICAgICBpbnN0YW5jZS5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKGluc3RhbmNlKTsKICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZSh2aWV3SWQpOwogICAgaWYgKHRoaXMuY3VycmVudFZpZXdJZCA9PT0gdmlld0lkKSB7CiAgICAgIHRoaXMuY3VycmVudFZpZXdJZCA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIENsZWFyIGFsbCBpbnN0YW5jZXMKICAgKi8KICBjbGVhckluc3RhbmNlcygpIHsKICAgIGZvciAoY29uc3QgW3ZpZXdJZCwgaW5zdGFuY2VdIG9mIHRoaXMuaW5zdGFuY2VzKSB7CiAgICAgIGlmIChpbnN0YW5jZS5wYXJlbnROb2RlKSB7CiAgICAgICAgaW5zdGFuY2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChpbnN0YW5jZSk7CiAgICAgIH0KICAgIH0KICAgIHRoaXMuaW5zdGFuY2VzLmNsZWFyKCk7CiAgICB0aGlzLmN1cnJlbnRWaWV3SWQgPSBudWxsOwogIH0KICAvKioKICAgKiBVbnJlZ2lzdGVyIGEgdmlldwogICAqLwogIHVucmVnaXN0ZXIodmlld0lkKSB7CiAgICB0aGlzLmNsZWFySW5zdGFuY2Uodmlld0lkKTsKICAgIHJldHVybiB0aGlzLnZpZXdzLmRlbGV0ZSh2aWV3SWQpOwogIH0KICAvKioKICAgKiBDbGVhciB0aGUgcmVnaXN0cnkKICAgKi8KICBjbGVhcigpIHsKICAgIHRoaXMudmlld3MuY2xlYXIoKTsKICAgIHRoaXMuY2xlYXJJbnN0YW5jZXMoKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgYSB2aWV3IGlzIHJlZ2lzdGVyZWQKICAgKi8KICBoYXModmlld0lkKSB7CiAgICByZXR1cm4gdGhpcy52aWV3cy5oYXModmlld0lkKTsKICB9CiAgLyoqCiAgICogR2V0IHRoZSBudW1iZXIgb2YgcmVnaXN0ZXJlZCB2aWV3cwogICAqLwogIGdldCBzaXplKCkgewogICAgcmV0dXJuIHRoaXMudmlld3Muc2l6ZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1tYWlubWVudS9kZWVzLWFwcHVpLW1haW5tZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjggPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1tYWlubWVudS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQ6ICMxYTFhMWE7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgIH0KICAgIC5kZW1vLW1haW5tZW51LWNvbnRhaW5lciAuc3BhY2VyIHsKICAgICAgZmxleDogMTsKICAgICAgYmFja2dyb3VuZDogIzBmMGYwZjsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tbWFpbm1lbnUtY29udGFpbmVyIj4KICAgIDxkZWVzLWFwcHVpLW1haW5tZW51CiAgICAgIC5sb2dvSWNvbj0keyJsdWNpZGU6Ym94In0KICAgICAgLmxvZ29UZXh0PSR7IkFjbWUgQXBwIn0KICAgICAgLm1lbnVHcm91cHM9JHtbCiAgewogICAgdGFiczogWwogICAgICB7IGtleTogIkRhc2hib2FyZCIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQiKSB9LAogICAgICB7IGtleTogIkluYm94IiwgaWNvbk5hbWU6ICJsdWNpZGU6aW5ib3giLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbmJveCIpIH0KICAgIF0KICB9LAogIHsKICAgIG5hbWU6ICJXb3Jrc3BhY2UiLAogICAgdGFiczogWwogICAgICB7IGtleTogIlByb2plY3RzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvamVjdHMiKSB9LAogICAgICB7IGtleTogIlRhc2tzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Y2hlY2tTcXVhcmUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYXNrcyIpIH0sCiAgICAgIHsga2V5OiAiRG9jdW1lbnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEb2N1bWVudHMiKSB9CiAgICBdCiAgfSwKICB7CiAgICBuYW1lOiAiQW5hbHl0aWNzIiwKICAgIHRhYnM6IFsKICAgICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6YmFyQ2hhcnQzIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUmVwb3J0cyIpIH0sCiAgICAgIHsga2V5OiAiSW5zaWdodHMiLCBpY29uTmFtZTogImx1Y2lkZTpsaWdodGJ1bGIiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJJbnNpZ2h0cyIpIH0KICAgIF0KICB9Cl19CiAgICAgIC5ib3R0b21UYWJzPSR7WwogIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfSwKICB7IGtleTogIkhlbHAiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSGVscCIpIH0KXX0KICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbm1lbnUvZGVlcy1hcHB1aS1tYWlubWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzNyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzggPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5tZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWlubWVudSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xvZ29JY29uX2RlY29yYXRvcnM7CiAgbGV0IF9sb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ29JY29uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9kZWNvcmF0b3JzOwogIGxldCBfbG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbVRhYnNfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZF9kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNBcHB1aU1haW5tZW51MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2xvZ29JY29uX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbG9nb1RleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9ib3R0b21UYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2xvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxvZ29JY29uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2dvSWNvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubG9nb0ljb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9nb0ljb25faW5pdGlhbGl6ZXJzLCBfbG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfbG9nb1RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nb1RleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvZ29UZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dvVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sb2dvVGV4dF9pbml0aWFsaXplcnMsIF9sb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lbnVHcm91cHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVHcm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVudUdyb3VwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51R3JvdXBzX2luaXRpYWxpemVycywgX21lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzNyh0aGlzLCBudWxsLCBfYm90dG9tVGFic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21UYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbVRhYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbVRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tVGFic19pbml0aWFsaXplcnMsIF9ib3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM3KHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlNYWlubWVudTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI4OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9pbml0aWFsaXplcnMsICIiKTsKICAgIC8vIElOU1RBTkNFCiAgICAvLyBMb2dvIHByb3BlcnRpZXMKICAgIGdldCBsb2dvSWNvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nb1RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9sb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBsb2dvVGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbG9nb1RleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2xvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvLyBNZW51IGdyb3VwcyAobmV3IHdheSkKICAgIGdldCBtZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOCh0aGlzLCBfbWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLy8gQm90dG9tIHRhYnMgKHBpbm5lZCB0byBib3R0b20pCiAgICBnZXQgYm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21UYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2JvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF90YWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIExlZ2FjeSB0YWJzIHByb3BlcnR5IChmb3IgYmFja3dhcmQgY29tcGF0aWJpbGl0eSkKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzMzgodGhpcywgX2NvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1tZW51LXdpZHRoLWV4cGFuZGVkOiAyMDBweDsKICAgICAgICAtLW1lbnUtd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5Db250YWluZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY2NiIsICIjY2NjIil9OwogICAgICAgIHotaW5kZXg6ICR7ekluZGV4TGF5ZXJzLmZpeGVkLmFwcEJhcn07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1leHBhbmRlZCk7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCAnSW50ZXInLCAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsIHNhbnMtc2VyaWY7CiAgICAgICAgdHJhbnNpdGlvbjogd2lkdGggMC4yNXMgZWFzZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tYWluQ29udGFpbmVyIHsKICAgICAgICB3aWR0aDogdmFyKC0tbWVudS13aWR0aC1jb2xsYXBzZWQpOwogICAgICB9CgogICAgICAvKiBGbG9hdGluZyBjb2xsYXBzZSB0b2dnbGUgYnV0dG9uICovCiAgICAgIC5jb2xsYXBzZS10b2dnbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICByaWdodDogLTEycHg7CiAgICAgICAgdG9wOiAyNHB4OwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA0cHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzM3MzczIiwgIiNhMWExYWEiKX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KCiAgICAgIC5jb2xsYXBzZS10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMzZjNmNDYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIDpob3N0KDpob3ZlcikgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLyogTG9nbyBTZWN0aW9uICovCiAgICAgIC5sb2dvU2VjdGlvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTBweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgcGFkZGluZzogMCAxNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjMWExYTFhIil9OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5sb2dvU2VjdGlvbiAubG9nb0ljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubG9nb1NlY3Rpb24gewogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgZ2FwOiAwOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmxvZ29TZWN0aW9uIC5sb2dvVGV4dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTWlkZGxlIFNlY3Rpb24gKHNjcm9sbGFibGUpICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CgogICAgICAubWVudUdyb3VwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHggNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZSwgbWF4LWhlaWdodCAwLjI1cyBlYXNlOwogICAgICAgIG1heC1oZWlnaHQ6IDMwcHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBIZWFkZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbWF4LWhlaWdodDogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQoKICAgICAgLmdyb3VwVGFicyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMnB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC8qIFRhYiBJdGVtICovCiAgICAgIC50YWIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzUyNTI1MiIsICIjYTNhM2EzIil9OwogICAgICB9CgogICAgICAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA0KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDYpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI2MjYyNiIsICIjZTVlNWU1Iil9OwogICAgICB9CgogICAgICAudGFiOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAwIDJweCAycHggMDsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBvcGFjaXR5OiAwLjg1OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYiAudGFiTGFiZWwgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICAvKiBDb2xsYXBzZWQgdGFiIHN0eWxlcyAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYiB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMTBweDsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiIC50YWJMYWJlbCB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAudGFiLnNlbGVjdGVkVGFiOjpiZWZvcmUgewogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAudGFiLXRvb2x0aXAgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAxMDAlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBtYXJnaW4tbGVmdDogMTJweDsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS10b29sdGlwLWJnKTsKICAgICAgICBjb2xvcjogdmFyKC0tdG9vbHRpcC1mZyk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzIGVhc2U7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCA4cHggcmdiYSgwLCAwLCAwLCAwLjE1KTsKICAgICAgfQoKICAgICAgLnRhYi10b29sdGlwOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmlnaHQtY29sb3I6IHZhcigtLXRvb2x0aXAtYmcpOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLnRhYjpob3ZlciAudGFiLXRvb2x0aXAgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNpdGlvbi1kZWxheTogMXM7CiAgICAgIH0KCiAgICAgIC8qIEJhZGdlIHN0eWxlcyAqLwogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IGF1dG87CiAgICAgIH0KCiAgICAgIC5iYWRnZS5kZWZhdWx0IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNmM2Y0NiIsICIjYTFhMWFhIil9OwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkY2ZjZTciLCAiIzE0NTMyZCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTI0MDBlIiwgIiNmYmJmMjQiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzQ1MGEwYSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogQm90dG9tIFNlY3Rpb24gKi8KICAgICAgLmJvdHRvbVNlY3Rpb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuYm90dG9tU2VjdGlvbiB7CiAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYWxsVGFicyA9IHRoaXMuZ2V0QWxsVGFicygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1haW5Db250YWluZXIiIEBjb250ZXh0bWVudT0keyhldmVudEFyZykgPT4gewogICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudEFyZywgW3sKICAgICAgICAgIG5hbWU6ICJhcHAgc2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJnZWFyIgogICAgICAgIH1dKTsKICAgICAgfX0+CiAgICAgICAgJHt0aGlzLmxvZ29JY29uIHx8IHRoaXMubG9nb1RleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImxvZ29TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmxvZ29JY29uID8gYjJgPGRlZXMtaWNvbiBjbGFzcz0ibG9nb0ljb24iIC5pY29uPSIke3RoaXMubG9nb0ljb259Ij48L2RlZXMtaWNvbj5gIDogIiJ9CiAgICAgICAgICAgICR7dGhpcy5sb2dvVGV4dCA/IGIyYDxzcGFuIGNsYXNzPSJsb2dvVGV4dCI+JHt0aGlzLmxvZ29UZXh0fTwvc3Bhbj5gIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVTZWN0aW9uIj4KICAgICAgICAgICR7dGhpcy5tZW51R3JvdXBzLmxlbmd0aCA+IDAgPyB0aGlzLnJlbmRlck1lbnVHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5VGFicygpfQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMuYm90dG9tVGFicy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJib3R0b21TZWN0aW9uIj4KICAgICAgICAgICAgJHt0aGlzLmJvdHRvbVRhYnMubWFwKCh0YWJBcmcpID0+IHRoaXMucmVuZGVyVGFiKHRhYkFyZykpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlck1lbnVHcm91cHMoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgJHt0aGlzLm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWVudUdyb3VwIj4KICAgICAgICAgICR7Z3JvdXAubmFtZSA/IGIyYDxkaXYgY2xhc3M9Imdyb3VwSGVhZGVyIj4ke2dyb3VwLm5hbWV9PC9kaXY+YCA6ICIifQogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JvdXBUYWJzIj4KICAgICAgICAgICAgJHtncm91cC5pdGVtcy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5VGFicygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtZW51R3JvdXAiPgogICAgICAgIDxkaXYgY2xhc3M9Imdyb3VwVGFicyI+CiAgICAgICAgICAke3RoaXMudGFicy5tYXAoKHRhYkFyZykgPT4gdGhpcy5yZW5kZXJUYWIodGFiQXJnKSl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYih0YWJBcmcpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRhYiAke3RhYkFyZyA9PT0gdGhpcy5zZWxlY3RlZFRhYiA/ICJzZWxlY3RlZFRhYiIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYih0YWJBcmcpOwogICAgICB9fSIKICAgICAgPgogICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dGFiQXJnLmljb25OYW1lIHx8ICIifSI+PC9kZWVzLWljb24+CiAgICAgICAgPHNwYW4gY2xhc3M9InRhYkxhYmVsIj4ke3RhYkFyZy5rZXl9PC9zcGFuPgogICAgICAgICR7dGFiQXJnLmJhZGdlICE9PSB2b2lkIDAgPyBiMmAKICAgICAgICAgIDxzcGFuIGNsYXNzPSJiYWRnZSAke3RhYkFyZy5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHt0YWJBcmcuYmFkZ2V9PC9zcGFuPgogICAgICAgIGAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0idGFiLXRvb2x0aXAiPiR7dGFiQXJnLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEFsbFRhYnMoKSB7CiAgICAgIGlmICh0aGlzLm1lbnVHcm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGdyb3VwVGFicyA9IHRoaXMubWVudUdyb3Vwcy5mbGF0TWFwKChncm91cCkgPT4gZ3JvdXAuaXRlbXMpOwogICAgICAgIHJldHVybiBbLi4uZ3JvdXBUYWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgICB9CiAgICAgIHJldHVybiBbLi4udGhpcy50YWJzLCAuLi50aGlzLmJvdHRvbVRhYnNdOwogICAgfQogICAgdXBkYXRlVGFiKHRhYkFyZykgewogICAgICB0aGlzLnNlbGVjdGVkVGFiID0gdGFiQXJnOwogICAgICB0aGlzLnNlbGVjdGVkVGFiLmFjdGlvbigpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICBjb25zdCBhbGxUYWJzID0gdGhpcy5nZXRBbGxUYWJzKCk7CiAgICAgIGlmIChhbGxUYWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnVwZGF0ZVRhYihhbGxUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgdG9nZ2xlQ29sbGFwc2UoKSB7CiAgICAgIHRoaXMuY29sbGFwc2VkID0gIXRoaXMuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGNvbGxhcHNlZDogdGhpcy5jb2xsYXBzZWQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczM4KHRoaXMsIF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpTWFpbm1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMjkgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGJhY2tncm91bmQ6ICMwZjBmMGY7CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIGNvbG9yOiAjYTNhM2EzOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBoMyB7CiAgICAgIGNvbG9yOiAjZmFmYWZhOwogICAgICBtYXJnaW4tdG9wOiAwOwogICAgfQogICAgLmRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIgLnNwYWNlciBjb2RlIHsKICAgICAgYmFja2dyb3VuZDogIzI3MjcyYTsKICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICAuZGVtby1zZWNvbmRhcnltZW51LWNvbnRhaW5lciAuc3BhY2VyIHVsIHsKICAgICAgbGluZS1oZWlnaHQ6IDEuODsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tc2Vjb25kYXJ5bWVudS1jb250YWluZXIiPgogICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAuaGVhZGluZz0keyJQcm9qZWN0cyJ9CiAgICAgIC5ncm91cHM9JHtbCiAgLy8gR3JvdXAgMTogVGFiIGl0ZW1zIChkZWZhdWx0IGJlaGF2aW9yKQogIHsKICAgIG5hbWU6ICJOYXZpZ2F0aW9uIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmNvbXBhc3MiLAogICAgaXRlbXM6IFsKICAgICAgeyBrZXk6ICJEYXNoYm9hcmQiLCBpY29uTmFtZTogImx1Y2lkZTpsYXlvdXREYXNoYm9hcmQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJEYXNoYm9hcmQgY2xpY2tlZCIpLCBiYWRnZTogMywgYmFkZ2VWYXJpYW50OiAid2FybmluZyIgfSwKICAgICAgeyBrZXk6ICJQcm9qZWN0cyIsIGljb25OYW1lOiAibHVjaWRlOmZvbGRlciIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlByb2plY3RzIGNsaWNrZWQiKSwgYmFkZ2U6ICJuZXciLCBiYWRnZVZhcmlhbnQ6ICJzdWNjZXNzIiB9LAogICAgICB7IGtleTogIkFuYWx5dGljcyIsIGljb25OYW1lOiAibHVjaWRlOmJhckNoYXJ0MiIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFuYWx5dGljcyBjbGlja2VkIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMjogQWN0aW9ucwogIHsKICAgIG5hbWU6ICJBY3Rpb25zIiwKICAgIGljb25OYW1lOiAibHVjaWRlOnphcCIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJDcmVhdGUgTmV3IiwgaWNvbk5hbWU6ICJsdWNpZGU6cGx1cyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkNyZWF0ZSBOZXcgY2xpY2tlZCEiKSB9LAogICAgICB7IHR5cGU6ICJhY3Rpb24iLCBrZXk6ICJJbXBvcnQgRGF0YSIsIGljb25OYW1lOiAibHVjaWRlOnVwbG9hZCIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkltcG9ydCBEYXRhIGNsaWNrZWQhIikgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiYWN0aW9uIiwga2V5OiAiRGVsZXRlIEFsbCIsIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsIHZhcmlhbnQ6ICJkYW5nZXIiLCBjb25maXJtTWVzc2FnZTogIkFyZSB5b3Ugc3VyZSB5b3Ugd2FudCB0byBkZWxldGUgYWxsIGl0ZW1zPyIsIGFjdGlvbjogKCkgPT4gYWxlcnQoIkRlbGV0ZWQhIikgfQogICAgXQogIH0sCiAgLy8gR3JvdXAgMzogRmlsdGVycwogIHsKICAgIG5hbWU6ICJGaWx0ZXJzIiwKICAgIGljb25OYW1lOiAibHVjaWRlOmZpbHRlciIsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIlN0YXR1cyIgfSwKICAgICAgeyB0eXBlOiAiZmlsdGVyIiwga2V5OiAiU2hvdyBBY3RpdmUiLCBpY29uTmFtZTogImx1Y2lkZTpjaGVja0NpcmNsZSIsIGFjdGl2ZTogdHJ1ZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFjdGl2ZToiLCBhY3RpdmUpIH0sCiAgICAgIHsgdHlwZTogImZpbHRlciIsIGtleTogIlNob3cgQXJjaGl2ZWQiLCBpY29uTmFtZTogImx1Y2lkZTphcmNoaXZlIiwgYWN0aXZlOiBmYWxzZSwgb25Ub2dnbGU6IChhY3RpdmUpID0+IGNvbnNvbGUubG9nKCJTaG93IEFyY2hpdmVkOiIsIGFjdGl2ZSkgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAibXVsdGlGaWx0ZXIiLCBrZXk6ICJDYXRlZ29yaWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6dGFnIiwgY29sbGFwc2VkOiBmYWxzZSwgb3B0aW9uczogWwogICAgICAgIHsga2V5OiAiZnJvbnRlbmQiLCBsYWJlbDogIkZyb250ZW5kIiwgY2hlY2tlZDogdHJ1ZSwgaWNvbk5hbWU6ICJsdWNpZGU6bW9uaXRvciIgfSwKICAgICAgICB7IGtleTogImJhY2tlbmQiLCBsYWJlbDogIkJhY2tlbmQiLCBjaGVja2VkOiB0cnVlLCBpY29uTmFtZTogImx1Y2lkZTpzZXJ2ZXIiIH0sCiAgICAgICAgeyBrZXk6ICJkZXZvcHMiLCBsYWJlbDogIkRldk9wcyIsIGNoZWNrZWQ6IGZhbHNlLCBpY29uTmFtZTogImx1Y2lkZTpjbG91ZCIgfSwKICAgICAgICB7IGtleTogImRlc2lnbiIsIGxhYmVsOiAiRGVzaWduIiwgY2hlY2tlZDogZmFsc2UsIGljb25OYW1lOiAibHVjaWRlOnBhbGV0dGUiIH0KICAgICAgXSwgb25DaGFuZ2U6IChrZXlzMikgPT4gY29uc29sZS5sb2coIlNlbGVjdGVkIGNhdGVnb3JpZXM6Iiwga2V5czIpIH0KICAgIF0KICB9LAogIC8vIEdyb3VwIDQ6IExpbmtzIGFuZCBtaXNjCiAgewogICAgbmFtZTogIlJlc291cmNlcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpib29rT3BlbiIsCiAgICBjb2xsYXBzZWQ6IHRydWUsCiAgICBpdGVtczogWwogICAgICB7IHR5cGU6ICJoZWFkZXIiLCBsYWJlbDogIkRvY3VtZW50YXRpb24iIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJBUEkgUmVmZXJlbmNlIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBocmVmOiAiaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vZG9jcyIgfSwKICAgICAgeyB0eXBlOiAibGluayIsIGtleTogIlVzZXIgR3VpZGUiLCBpY29uTmFtZTogImx1Y2lkZTpib29rIiwgaHJlZjogImh0dHBzOi8vZG9jcy5leGFtcGxlLmNvbS9ndWlkZSIgfSwKICAgICAgeyB0eXBlOiAiZGl2aWRlciIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGVyIiwgbGFiZWw6ICJTdXBwb3J0IiB9LAogICAgICB7IHR5cGU6ICJsaW5rIiwga2V5OiAiSGVscCBDZW50ZXIiLCBpY29uTmFtZTogImx1Y2lkZTpoZWxwQ2lyY2xlIiwgaHJlZjogIi9oZWxwIiwgZXh0ZXJuYWw6IGZhbHNlIH0sCiAgICAgIHsgdHlwZTogImxpbmsiLCBrZXk6ICJHaXRIdWIgSXNzdWVzIiwgaWNvbk5hbWU6ICJsdWNpZGU6Z2l0aHViIiwgaHJlZjogImh0dHBzOi8vZ2l0aHViLmNvbS9leGFtcGxlL2lzc3VlcyIgfQogICAgXQogIH0KXX0KICAgICAgQGl0ZW0tc2VsZWN0PSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlRhYiBzZWxlY3RlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGFjdGlvbi1jbGljaz0keyhlMTEpID0+IGNvbnNvbGUubG9nKCJBY3Rpb24gY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgICAgQGZpbHRlci10b2dnbGU9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiRmlsdGVyIHRvZ2dsZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBtdWx0aWZpbHRlci1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiTXVsdGktZmlsdGVyIGNoYW5nZWQ6IiwgZTExLmRldGFpbCl9CiAgICAgIEBsaW5rLWNsaWNrPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIkxpbmsgY2xpY2tlZDoiLCBlMTEuZGV0YWlsKX0KICAgID48L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudT4KICAgIDxkaXYgY2xhc3M9InNwYWNlciI+CiAgICAgIDxoMz5TZWNvbmRhcnkgTWVudSBEZW1vPC9oMz4KICAgICAgPHA+VGhpcyBkZW1vIHNob3djYXNlcyBhbGwgOCBpdGVtIHR5cGVzOjwvcD4KICAgICAgPHVsPgogICAgICAgIDxsaT48Y29kZT50YWI8L2NvZGU+IC0gU2VsZWN0YWJsZSBpdGVtcyAoTmF2aWdhdGlvbiBncm91cCk8L2xpPgogICAgICAgIDxsaT48Y29kZT5hY3Rpb248L2NvZGU+IC0gQmx1ZSBhY3Rpb25zIChBY3Rpb25zIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmFjdGlvbjwvY29kZT4gd2l0aCA8Y29kZT52YXJpYW50OiAnZGFuZ2VyJzwvY29kZT4gLSBSZWQgZGFuZ2VyIGFjdGlvbjwvbGk+CiAgICAgICAgPGxpPjxjb2RlPmZpbHRlcjwvY29kZT4gLSBDaGVja2JveCB0b2dnbGVzIChGaWx0ZXJzIGdyb3VwKTwvbGk+CiAgICAgICAgPGxpPjxjb2RlPm11bHRpRmlsdGVyPC9jb2RlPiAtIENvbGxhcHNpYmxlIG11bHRpLXNlbGVjdCAoQ2F0ZWdvcmllcyk8L2xpPgogICAgICAgIDxsaT48Y29kZT5kaXZpZGVyPC9jb2RlPiAtIFZpc3VhbCBzZXBhcmF0b3JzPC9saT4KICAgICAgICA8bGk+PGNvZGU+aGVhZGVyPC9jb2RlPiAtIFNlY3Rpb24gbGFiZWxzPC9saT4KICAgICAgICA8bGk+PGNvZGU+bGluazwvY29kZT4gLSBFeHRlcm5hbC9pbnRlcm5hbCBsaW5rcyAoUmVzb3VyY2VzIGdyb3VwKTwvbGk+CiAgICAgIDwvdWw+CiAgICAgIDxwPlRyeSB0aGUgY29sbGFwc2UgdG9nZ2xlIG9uIHRoZSBsZWZ0IGVkZ2UhPC9wPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS1zZWNvbmRhcnltZW51L2RlZXMtYXBwdWktc2Vjb25kYXJ5bWVudS5qcwppbml0X2RlZXNfaWNvbigpOwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGUzOCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzMzkgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVNlY29uZGFyeW1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9oZWFkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9oZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZ3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9ncm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGlvbk9wdGlvbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJDb3VudGVyX2RlY29yYXRvcnM7CiAgbGV0IF9yZW5kZXJDb3VudGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVuZGVyQ291bnRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpU2Vjb25kYXJ5bWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9oZWFkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZ3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9jb2xsYXBzZWRHcm91cHNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY29sbGFwc2VkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuLCByZWZsZWN0OiB0cnVlIH0pXTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2hlYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGVhZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oZWFkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oZWFkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaGVhZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9ncm91cHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZ3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJncm91cHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZ3JvdXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ncm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZ3JvdXBzX2luaXRpYWxpemVycywgX2dyb3Vwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM4KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25PcHRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk9wdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk9wdGlvbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uT3B0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uT3B0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk9wdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfc2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRJdGVtIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlbGVjdGVkSXRlbSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkSXRlbV9pbml0aWFsaXplcnMsIF9zZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkR3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZEdyb3VwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkR3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZEdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkR3JvdXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZEdyb3Vwc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbGxhcHNlZE11bHRpRmlsdGVycyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sbGFwc2VkTXVsdGlGaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbGxhcHNlZE11bHRpRmlsdGVycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbGxhcHNlZE11bHRpRmlsdGVyc19pbml0aWFsaXplcnMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOCh0aGlzLCBudWxsLCBfcmVuZGVyQ291bnRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJyZW5kZXJDb3VudGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJDb3VudGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJlbmRlckNvdW50ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnJlbmRlckNvdW50ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgodGhpcywgbnVsbCwgX2NvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQXBwdWlTZWNvbmRhcnltZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMjk7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkFwcCBVSSI7CiAgICAjaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfaGVhZGluZ19pbml0aWFsaXplcnMsICJNZW51Iik7CiAgICAvLyBJTlNUQU5DRQogICAgLyoqIER5bmFtaWMgaGVhZGluZyAtIHR5cGljYWxseSBzaG93cyB0aGUgc2VsZWN0ZWQgTWFpbk1lbnUgaXRlbSAqLwogICAgZ2V0IGhlYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNoZWFkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzMzkodGhpcywgX2hlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgLyoqIEdyb3VwZWQgaXRlbXMgd2l0aCBjb2xsYXBzZSBzdXBwb3J0IC0gc3VwcG9ydHMgbmV3IElTZWNvbmRhcnlNZW51R3JvdXAgKi8KICAgIGdldCBncm91cHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNncm91cHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBncm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2dyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9ncm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2luaXRpYWxpemVycywgW10pKTsKICAgIC8qKiBMZWdhY3kgZmxhdCBsaXN0IHN1cHBvcnQgZm9yIGJhY2t3YXJkIGNvbXBhdGliaWxpdHkgKi8KICAgIGdldCBzZWxlY3Rpb25PcHRpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0aW9uT3B0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGlvbk9wdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGlvbk9wdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9zZWxlY3Rpb25PcHRpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgLyoqIEN1cnJlbnRseSBzZWxlY3RlZCB0YWIgaXRlbSAqLwogICAgZ2V0IHNlbGVjdGVkSXRlbSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkSXRlbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfc2VsZWN0ZWRJdGVtX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkR3JvdXBzX2luaXRpYWxpemVycywgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSkpOwogICAgLyoqIEludGVybmFsIHN0YXRlIGZvciBjb2xsYXBzZWQgZ3JvdXBzICovCiAgICBnZXQgY29sbGFwc2VkR3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkR3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkR3JvdXBzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9jb2xsYXBzZWRNdWx0aUZpbHRlcnNfaW5pdGlhbGl6ZXJzLCAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpKSk7CiAgICAvKiogSW50ZXJuYWwgc3RhdGUgZm9yIGNvbGxhcHNlZCBtdWx0aS1maWx0ZXJzICovCiAgICBnZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkTXVsdGlGaWx0ZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRNdWx0aUZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyZW5kZXJDb3VudGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkTXVsdGlGaWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfcmVuZGVyQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIC8qKiBSZW5kZXIgY291bnRlciB0byBmb3JjZSByZS1yZW5kZXJzIHdoZW4gaXRlbXMgYXJlIG11dGF0ZWQgKi8KICAgIGdldCByZW5kZXJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJlbmRlckNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JlbmRlckNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczM5KHRoaXMsIF9yZW5kZXJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8qKiBIb3Jpem9udGFsIGNvbGxhcHNlIHN0YXRlICovCiAgICBnZXQgY29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jY29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNjb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkOiAyNDBweDsKICAgICAgICAtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkOiA1NnB4OwogICAgICAgIC0tc2lkZWJhci1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICAtLXNpZGViYXItZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNTI1MjUyIiwgIiNhM2EzYTMiKX07CiAgICAgICAgLS1zaWRlYmFyLWZnLW11dGVkOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzczNzM3MyIsICIjNzM3MzczIil9OwogICAgICAgIC0tc2lkZWJhci1mZy1hY3RpdmU6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGEwYTBhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgLS1zaWRlYmFyLWJvcmRlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU1ZTUiLCAiIzFhMWExYSIpfTsKICAgICAgICAtLXNpZGViYXItaG92ZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDQpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgLS1zaWRlYmFyLWFjdGl2ZTogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KSIpfTsKICAgICAgICAtLXNpZGViYXItYWNjZW50OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBhMGEwYSIsICIjZmFmYWZhIil9OwogICAgICAgIC0tdG9vbHRpcC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxODE4MWIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICAtLXRvb2x0aXAtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMxODE4MWIiKX07CgogICAgICAgIC8qIEJhZGdlIGNvbG9ycyAqLwogICAgICAgIC0tYmFkZ2UtZGVmYXVsdC1iZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgICAtLWJhZGdlLWRlZmF1bHQtZmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2YzZjQ2IiwgIiNhMWExYWEiKX07CiAgICAgICAgLS1iYWRnZS1zdWNjZXNzLWJnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjZmNlNyIsICIjMTQ1MzJkIil9OwogICAgICAgIC0tYmFkZ2Utc3VjY2Vzcy1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxNjY1MzQiLCAiIzRhZGU4MCIpfTsKICAgICAgICAtLWJhZGdlLXdhcm5pbmctYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVmM2M3IiwgIiM0NTFhMDMiKX07CiAgICAgICAgLS1iYWRnZS13YXJuaW5nLWZnOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzkyNDAwZSIsICIjZmJiZjI0Iil9OwogICAgICAgIC0tYmFkZ2UtZXJyb3ItYmc6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmVlMmUyIiwgIiM0NTBhMGEiKX07CiAgICAgICAgLS1iYWRnZS1lcnJvci1mZzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5OTFiMWIiLCAiI2Y4NzE3MSIpfTsKCiAgICAgICAgLyogQWN0aW9uIGNvbG9ycyAqLwogICAgICAgIC0tYWN0aW9uLXByaW1hcnk6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMzYjgyZjYiKX07CiAgICAgICAgLS1hY3Rpb24tcHJpbWFyeS1ob3ZlcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZDRlZDgiLCAiIzYwYTVmYSIpfTsKICAgICAgICAtLWFjdGlvbi1kYW5nZXI6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgLS1hY3Rpb24tZGFuZ2VyLWhvdmVyOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2I5MWMxYyIsICIjZjg3MTcxIil9OwoKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiB2YXIoLS1zaWRlYmFyLXdpZHRoLWV4cGFuZGVkKTsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWJnKTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCB2YXIoLS1zaWRlYmFyLWJvcmRlcik7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgJ0ludGVyJywgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCBzYW5zLXNlcmlmOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSB7CiAgICAgICAgd2lkdGg6IHZhcigtLXNpZGViYXItd2lkdGgtY29sbGFwc2VkKTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC8qIEZsb2F0aW5nIGNvbGxhcHNlIHRvZ2dsZSBidXR0b24gKi8KICAgICAgLmNvbGxhcHNlLXRvZ2dsZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMTJweDsKICAgICAgICB0b3A6IDI0cHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI3MjcyYSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTVlNSIsICIjM2YzZjQ2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MzczNzMiLCAiI2ExYTFhYSIpfTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQoKICAgICAgLmNvbGxhcHNlLXRvZ2dsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwYTBhMGEiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSAuY29sbGFwc2UtdG9nZ2xlIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuY29sbGFwc2UtdG9nZ2xlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAvKiBIZWFkZXIgU2VjdGlvbiAqLwogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHZhcigtLXNpZGViYXItYm9yZGVyKTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlLCB3aWR0aCAwLjI1cyBlYXNlOwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmhlYWRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuaGVhZGVyIC5oZWFkaW5nIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC8qIFNjcm9sbGFibGUgTWVudSBTZWN0aW9uICovCiAgICAgIC5tZW51U2VjdGlvbiB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIG92ZXJmbG93LXg6IGhpZGRlbjsKICAgICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICB9CgogICAgICAubWVudVNlY3Rpb246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLm1lbnVTZWN0aW9uOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5tZW51U2VjdGlvbjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMjUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yNSkiKX07CiAgICAgIH0KCiAgICAgIC8qIE1lbnUgR3JvdXAgKi8KICAgICAgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVHcm91cCB7CiAgICAgICAgcGFkZGluZzogMCA0cHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZSwgb3BhY2l0eSAwLjJzIGVhc2UsIG1heC1oZWlnaHQgMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA0MHB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXI6aG92ZXIgewogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgcGFkZGluZzogN3B4IDExcHg7CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlcjpub3QoLmNvbGxhcHNlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE0MCwgMTIwLCAxMDAsIDAuMDYpIiwgInJnYmEoMTgwLCAxNjAsIDE0MCwgMC4wOCkiKX07CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBIZWFkZXIgLmdyb3VwVGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5ncm91cEhlYWRlciAuZ3JvdXBUaXRsZSBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyIC5jaGV2cm9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3ODcxNmMiLCAiI2I1YTk5YSIpfTsKICAgICAgfQoKICAgICAgLmdyb3VwSGVhZGVyLmNvbGxhcHNlZCAuY2hldnJvbiB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTkwZGVnKTsKICAgICAgfQoKICAgICAgLyogSGlkZSBncm91cCBoZWFkZXJzIHdoZW4gaG9yaXpvbnRhbGx5IGNvbGxhcHNlZCAqLwogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLmdyb3VwSGVhZGVyIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIEdyb3VwIEl0ZW1zIENvbnRhaW5lciAqLwogICAgICAuZ3JvdXBJdGVtcyB7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBtYXgtaGVpZ2h0IDAuMjVzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlLCBtYXJnaW4gMC4yNXMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDAwcHg7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuZ3JvdXBJdGVtcy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBBbHdheXMgc2hvdyBpdGVtcyB3aGVuIGhvcml6b250YWxseSBjb2xsYXBzZWQgKHJlZ2FyZGxlc3Mgb2YgZ3JvdXAgY29sbGFwc2Ugc3RhdGUpICovCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAuZ3JvdXBJdGVtcyB7CiAgICAgICAgbWF4LWhlaWdodDogbm9uZTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBNZW51IEl0ZW0gQmFzZSAqLwogICAgICAubWVudUl0ZW0gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA0NTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZyk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY3RpdmUpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItYWN0aXZlKTsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1hY3RpdmUpOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgd2lkdGg6IDNweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWVudUl0ZW0uc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0gLml0ZW1MYWJlbCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHdpZHRoIDAuMjVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEFjdGlvbiBJdGVtIFN0eWxlcyAqLwogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgewogICAgICAgIGNvbG9yOiB2YXIoLS1hY3Rpb24tcHJpbWFyeSk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5hY3Rpb24tcHJpbWFyeTpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1wcmltYXJ5LWhvdmVyKTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgzNywgOTksIDIzNSwgMC4wOCkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMTIpIil9OwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLXByaW1hcnkgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXIpOwogICAgICB9CgogICAgICAubWVudUl0ZW0uYWN0aW9uLWRhbmdlcjpob3ZlciB7CiAgICAgICAgY29sb3I6IHZhcigtLWFjdGlvbi1kYW5nZXItaG92ZXIpOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyMCwgMzgsIDM4LCAwLjA4KSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEyKSIpfTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtLmFjdGlvbi1kYW5nZXIgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAvKiBGaWx0ZXIgSXRlbSBTdHlsZXMgKi8KICAgICAgLm1lbnVJdGVtLmZpbHRlciB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyIC5maWx0ZXItY2hlY2tib3ggewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q0ZDRkNCIsICIjNTI1MjUyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveC5jaGVja2VkIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgICAgYm9yZGVyLWNvbG9yOiB2YXIoLS1zaWRlYmFyLWFjY2VudCk7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS5maWx0ZXIgLmZpbHRlci1jaGVja2JveCBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubWVudUl0ZW0uZmlsdGVyLmFjdGl2ZSB7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLyogTXVsdGktRmlsdGVyIENvbnRhaW5lciAqLwogICAgICAubXVsdGlGaWx0ZXIgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDIpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMikiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXNpZGViYXItaG92ZXIpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItaGVhZGVyIC5tdWx0aUZpbHRlci10aXRsZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLWFjdGl2ZSk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLm11bHRpRmlsdGVyLXRpdGxlIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNzsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlciAubXVsdGlGaWx0ZXItY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogdmFyKC0tc2lkZWJhci1mZy1tdXRlZCk7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tYmFkZ2UtZGVmYXVsdC1iZyk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1oZWFkZXIgLmNoZXZyb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnLW11dGVkKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLWhlYWRlci5jb2xsYXBzZWQgLmNoZXZyb24gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKC05MGRlZyk7CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb25zIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogbWF4LWhlaWdodCAwLjI1cyBlYXNlLCBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgICBtYXgtaGVpZ2h0OiA1MDBweDsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9ucy5jb2xsYXBzZWQgewogICAgICAgIG1heC1oZWlnaHQ6IDA7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBib3JkZXItdG9wOiBub25lOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMHB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiB2YXIoLS1zaWRlYmFyLWZnKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ob3Zlcik7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctYWN0aXZlKTsKICAgICAgfQoKICAgICAgLm11bHRpRmlsdGVyLW9wdGlvbiAub3B0aW9uLWNoZWNrYm94IHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgYm9yZGVyOiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkNGQ0ZDQiLCAiIzUyNTI1MiIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3guY2hlY2tlZCB7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICAgIGJvcmRlci1jb2xvcjogdmFyKC0tc2lkZWJhci1hY2NlbnQpOwogICAgICB9CgogICAgICAubXVsdGlGaWx0ZXItb3B0aW9uIC5vcHRpb24tY2hlY2tib3ggZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgIH0KCiAgICAgIC5tdWx0aUZpbHRlci1vcHRpb24gZGVlcy1pY29uLm9wdGlvbi1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAvKiBEaXZpZGVyICovCiAgICAgIC5tZW51RGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudURpdmlkZXIgewogICAgICAgIG1hcmdpbjogOHB4IDRweDsKICAgICAgfQoKICAgICAgLyogSGVhZGVyL0xhYmVsICovCiAgICAgIC5tZW51SGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDEycHggNHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6IHZhcigtLXNpZGViYXItZmctbXV0ZWQpOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuNXB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVIZWFkZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExpbmsgSXRlbSAqLwogICAgICAubWVudUl0ZW0ubGluayAuZXh0ZXJuYWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgfQoKICAgICAgLyogQ29sbGFwc2VkIG1lbnUgaXRlbSBzdHlsZXMgKi8KICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSB7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIGdhcDogMDsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbSAuaXRlbUxhYmVsIHsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHdpZHRoOiAwOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5tZW51SXRlbS5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBsZWZ0OiAtNHB4OwogICAgICB9CgogICAgICA6aG9zdChbY29sbGFwc2VkXSkgLm1lbnVJdGVtIC5maWx0ZXItY2hlY2tib3gsCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW0gLmV4dGVybmFsLWljb24gewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubXVsdGlGaWx0ZXIgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIFRvb2x0aXAgZm9yIGNvbGxhcHNlZCBzdGF0ZSAqLwogICAgICAuaXRlbS10b29sdGlwIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMTAwJTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTUwJSk7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDEycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLXRvb2x0aXAtZmcpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgYm94LXNoYWRvdzogMCAycHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRvb2x0aXA6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IC00cHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIGJvcmRlcjogNHB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yaWdodC1jb2xvcjogdmFyKC0tdG9vbHRpcC1iZyk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtjb2xsYXBzZWRdKSAubWVudUl0ZW06aG92ZXIgLml0ZW0tdG9vbHRpcCB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2l0aW9uLWRlbGF5OiAxczsKICAgICAgfQoKICAgICAgLyogQmFkZ2UgU3R5bGVzICovCiAgICAgIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDE4cHg7CiAgICAgICAgaGVpZ2h0OiAxOHB4OwogICAgICAgIHBhZGRpbmc6IDAgNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTBweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDlweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLWRlZmF1bHQtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1kZWZhdWx0LWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLnN1Y2Nlc3MgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXN1Y2Nlc3MtYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS1zdWNjZXNzLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLWJhZGdlLXdhcm5pbmctYmcpOwogICAgICAgIGNvbG9yOiB2YXIoLS1iYWRnZS13YXJuaW5nLWZnKTsKICAgICAgfQoKICAgICAgLmJhZGdlLmVycm9yIHsKICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWRnZS1lcnJvci1iZyk7CiAgICAgICAgY29sb3I6IHZhcigtLWJhZGdlLWVycm9yLWZnKTsKICAgICAgfQoKICAgICAgOmhvc3QoW2NvbGxhcHNlZF0pIC5iYWRnZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLyogTGVnYWN5IG9wdGlvbnMgY29udGFpbmVyICovCiAgICAgIC5sZWdhY3lPcHRpb25zIHsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgfQoKICAgICAgLyogRGl2aWRlciAobGVnYWN5KSAqLwogICAgICAuZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogdmFyKC0tc2lkZWJhci1ib3JkZXIpOwogICAgICAgIG1hcmdpbjogOHB4IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ibWFpbmNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWFkaW5nIj4ke3RoaXMuaGVhZGluZ308L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWVudVNlY3Rpb24iPgogICAgICAgICAgJHt0aGlzLmdyb3Vwcy5sZW5ndGggPiAwID8gdGhpcy5yZW5kZXJHcm91cHMoKSA6IHRoaXMucmVuZGVyTGVnYWN5T3B0aW9ucygpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGJ1dHRvbiBjbGFzcz0iY29sbGFwc2UtdG9nZ2xlIiBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVDb2xsYXBzZSgpfSI+CiAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLmNvbGxhcHNlZCA/ICJsdWNpZGU6Y2hldnJvblJpZ2h0IiA6ICJsdWNpZGU6Y2hldnJvbkxlZnQifSI+PC9kZWVzLWljb24+CiAgICAgIDwvYnV0dG9uPgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyb3VwcygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke3RoaXMuZ3JvdXBzLm1hcCgoZ3JvdXApID0+IGIyYAogICAgICAgIDxkaXYgY2xhc3M9Im1lbnVHcm91cCI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJncm91cEhlYWRlciAke3RoaXMuY29sbGFwc2VkR3JvdXBzLmhhcyhncm91cC5uYW1lKSA/ICJjb2xsYXBzZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVHcm91cChncm91cC5uYW1lKX0iCiAgICAgICAgICA+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJncm91cFRpdGxlIj4KICAgICAgICAgICAgICAke2dyb3VwLmljb25OYW1lID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHt0aGlzLm5vcm1hbGl6ZUljb24oZ3JvdXAuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgICR7Z3JvdXAubmFtZX0KICAgICAgICAgICAgPC9zcGFuPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJjaGV2cm9uIiAuaWNvbj0iJHsibHVjaWRlOmNoZXZyb25Eb3duIn0iPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJncm91cEl0ZW1zICR7dGhpcy5jb2xsYXBzZWRHcm91cHMuaGFzKGdyb3VwLm5hbWUpID8gImNvbGxhcHNlZCIgOiAiIn0iPgogICAgICAgICAgICAke2dyb3VwLml0ZW1zLm1hcCgoaXRlbSkgPT4gdGhpcy5yZW5kZXJJdGVtKGl0ZW0sIGdyb3VwKSl9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYCl9CiAgICBgOwogICAgfQogICAgcmVuZGVySXRlbShpdGVtLCBncm91cCkgewogICAgICBpZiAoImhpZGRlbiIgaW4gaXRlbSAmJiBpdGVtLmhpZGRlbikgewogICAgICAgIHJldHVybiBiMmBgOwogICAgICB9CiAgICAgIGNvbnN0IGl0ZW1UeXBlID0gInR5cGUiIGluIGl0ZW0gPyBpdGVtLnR5cGUgOiAidGFiIjsKICAgICAgc3dpdGNoIChpdGVtVHlwZSkgewogICAgICAgIGNhc2UgImFjdGlvbiI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJBY3Rpb25JdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgImZpbHRlciI6CiAgICAgICAgICByZXR1cm4gdGhpcy5yZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pOwogICAgICAgIGNhc2UgIm11bHRpRmlsdGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlck11bHRpRmlsdGVySXRlbShpdGVtKTsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiB0aGlzLnJlbmRlckRpdmlkZXIoKTsKICAgICAgICBjYXNlICJoZWFkZXIiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVySGVhZGVyKGl0ZW0pOwogICAgICAgIGNhc2UgImxpbmsiOgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyTGlua0l0ZW0oaXRlbSk7CiAgICAgICAgY2FzZSAidGFiIjoKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuIHRoaXMucmVuZGVyVGFiSXRlbShpdGVtLCBncm91cCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlclRhYkl0ZW0oaXRlbSwgZ3JvdXApIHsKICAgICAgY29uc3QgaXNTZWxlY3RlZCA9IHRoaXMuc2VsZWN0ZWRJdGVtPy5rZXkgPT09IGl0ZW0ua2V5OwogICAgICBjb25zdCBpc0Rpc2FibGVkID0gaXRlbS5kaXNhYmxlZCA9PT0gdHJ1ZTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9Im1lbnVJdGVtICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0gJHtpc0Rpc2FibGVkID8gImRpc2FibGVkIiA6ICIifSIKICAgICAgICBAY2xpY2s9IiR7KCkgPT4gIWlzRGlzYWJsZWQgJiYgdGhpcy5zZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKX0iCiAgICAgICAgQGNvbnRleHRtZW51PSIkeyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGV4dE1lbnUoZTExLCBpdGVtKX0iCiAgICAgID4KICAgICAgICAke2l0ZW0uaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIke3RoaXMubm9ybWFsaXplSWNvbihpdGVtLmljb25OYW1lKX0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbUxhYmVsIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgICAke2l0ZW0uYmFkZ2UgIT09IHZvaWQgMCA/IGIyYAogICAgICAgICAgPHNwYW4gY2xhc3M9ImJhZGdlICR7aXRlbS5iYWRnZVZhcmlhbnQgfHwgImRlZmF1bHQifSI+JHtpdGVtLmJhZGdlfTwvc3Bhbj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgPHNwYW4gY2xhc3M9Iml0ZW0tdG9vbHRpcCI+JHtpdGVtLmtleX08L3NwYW4+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckFjdGlvbkl0ZW0oaXRlbSkgewogICAgICBjb25zdCB2YXJpYW50ID0gaXRlbS52YXJpYW50IHx8ICJwcmltYXJ5IjsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBhY3Rpb24tJHt2YXJpYW50fSAke2lzRGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgIEBjbGljaz0iJHsoKSA9PiAhaXNEaXNhYmxlZCAmJiB0aGlzLmhhbmRsZUFjdGlvbkNsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJGaWx0ZXJJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBmaWx0ZXIgJHtpdGVtLmFjdGl2ZSA/ICJhY3RpdmUiIDogIiJ9ICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlRmlsdGVyVG9nZ2xlKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImZpbHRlci1jaGVja2JveCAke2l0ZW0uYWN0aXZlID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICR7aXRlbS5hY3RpdmUgPyBiMmA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6Y2hlY2sifSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDwvZGl2PgogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtLXRvb2x0aXAiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICByZW5kZXJNdWx0aUZpbHRlckl0ZW0oaXRlbSkgewogICAgICBjb25zdCBpc0NvbGxhcHNlZCA9IHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzLmhhcyhpdGVtLmtleSk7CiAgICAgIGNvbnN0IGNoZWNrZWRDb3VudCA9IGl0ZW0ub3B0aW9ucy5maWx0ZXIoKG9wdCkgPT4gb3B0LmNoZWNrZWQpLmxlbmd0aDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlciI+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLWhlYWRlciAke2lzQ29sbGFwc2VkID8gImNvbGxhcHNlZCIgOiAiIn0iCiAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy50b2dnbGVNdWx0aUZpbHRlcihpdGVtLmtleSl9IgogICAgICAgID4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJtdWx0aUZpbHRlci10aXRsZSI+CiAgICAgICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAke2l0ZW0ua2V5fQogICAgICAgICAgPC9zcGFuPgogICAgICAgICAgJHtjaGVja2VkQ291bnQgPiAwID8gYjJgPHNwYW4gY2xhc3M9Im11bHRpRmlsdGVyLWNvdW50Ij4ke2NoZWNrZWRDb3VudH08L3NwYW4+YCA6ICIifQogICAgICAgICAgPGRlZXMtaWNvbiBjbGFzcz0iY2hldnJvbiIgLmljb249IiR7Imx1Y2lkZTpjaGV2cm9uRG93biJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtdWx0aUZpbHRlci1vcHRpb25zICR7aXNDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSI+CiAgICAgICAgICAke2l0ZW0ub3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IGIyYAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9Im11bHRpRmlsdGVyLW9wdGlvbiIKICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gdGhpcy5oYW5kbGVNdWx0aUZpbHRlck9wdGlvblRvZ2dsZShpdGVtLCBvcHRpb24yLmtleSl9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3B0aW9uLWNoZWNrYm94ICR7b3B0aW9uMi5jaGVja2VkID8gImNoZWNrZWQiIDogIiJ9Ij4KICAgICAgICAgICAgICAgICR7b3B0aW9uMi5jaGVja2VkID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmNoZWNrIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAke29wdGlvbjIuaWNvbk5hbWUgPyBiMmA8ZGVlcy1pY29uIGNsYXNzPSJvcHRpb24taWNvbiIgLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKG9wdGlvbjIuaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgICAgICAgIDxzcGFuPiR7b3B0aW9uMi5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckRpdmlkZXIoKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51RGl2aWRlciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckhlYWRlcihpdGVtKSB7CiAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJtZW51SGVhZGVyIj4ke2l0ZW0ubGFiZWx9PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckxpbmtJdGVtKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgY29uc3QgaXNEaXNhYmxlZCA9IGl0ZW0uZGlzYWJsZWQgPT09IHRydWU7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtZW51SXRlbSBsaW5rICR7aXNEaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iCiAgICAgICAgQGNsaWNrPSIkeygpID0+ICFpc0Rpc2FibGVkICYmIHRoaXMuaGFuZGxlTGlua0NsaWNrKGl0ZW0pfSIKICAgICAgPgogICAgICAgICR7aXRlbS5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249IiR7dGhpcy5ub3JtYWxpemVJY29uKGl0ZW0uaWNvbk5hbWUpfSI+PC9kZWVzLWljb24+YCA6ICIifQogICAgICAgIDxzcGFuIGNsYXNzPSJpdGVtTGFiZWwiPiR7aXRlbS5rZXl9PC9zcGFuPgogICAgICAgICR7aXNFeHRlcm5hbCA/IGIyYDxkZWVzLWljb24gY2xhc3M9ImV4dGVybmFsLWljb24iIC5pY29uPSIkeyJsdWNpZGU6ZXh0ZXJuYWxMaW5rIn0iPjwvZGVlcy1pY29uPmAgOiAiIn0KICAgICAgICA8c3BhbiBjbGFzcz0iaXRlbS10b29sdGlwIj4ke2l0ZW0ua2V5fTwvc3Bhbj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyTGVnYWN5T3B0aW9ucygpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJsZWdhY3lPcHRpb25zIj4KICAgICAgICAke3RoaXMuc2VsZWN0aW9uT3B0aW9ucy5tYXAoKG9wdGlvbjIpID0+IHsKICAgICAgICBpZiAoImRpdmlkZXIiIGluIG9wdGlvbjIgJiYgb3B0aW9uMi5kaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0iZGl2aWRlciI+PC9kaXY+YDsKICAgICAgICB9CiAgICAgICAgY29uc3QgaXRlbSA9IG9wdGlvbjI7CiAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgIGtleTogaXRlbS5rZXksCiAgICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uTmFtZSwKICAgICAgICAgIGFjdGlvbjogaXRlbS5hY3Rpb24sCiAgICAgICAgICBiYWRnZTogaXRlbS5iYWRnZSwKICAgICAgICAgIGJhZGdlVmFyaWFudDogaXRlbS5iYWRnZVZhcmlhbnQKICAgICAgICB9OwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclRhYkl0ZW0odGFiSXRlbSk7CiAgICAgIH0pfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICAvLyBIZWxwZXIgdG8gbm9ybWFsaXplIGljb24gbmFtZXMKICAgIG5vcm1hbGl6ZUljb24oaWNvbk5hbWUpIHsKICAgICAgcmV0dXJuIGljb25OYW1lLnN0YXJ0c1dpdGgoImx1Y2lkZToiKSA/IGljb25OYW1lIDogYGx1Y2lkZToke2ljb25OYW1lfWA7CiAgICB9CiAgICB0b2dnbGVHcm91cChncm91cE5hbWUpIHsKICAgICAgY29uc3QgbmV3Q29sbGFwc2VkID0gbmV3IFNldCh0aGlzLmNvbGxhcHNlZEdyb3Vwcyk7CiAgICAgIGlmIChuZXdDb2xsYXBzZWQuaGFzKGdyb3VwTmFtZSkpIHsKICAgICAgICBuZXdDb2xsYXBzZWQuZGVsZXRlKGdyb3VwTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmFkZChncm91cE5hbWUpOwogICAgICB9CiAgICAgIHRoaXMuY29sbGFwc2VkR3JvdXBzID0gbmV3Q29sbGFwc2VkOwogICAgfQogICAgdG9nZ2xlTXVsdGlGaWx0ZXIoZmlsdGVyS2V5KSB7CiAgICAgIGNvbnN0IG5ld0NvbGxhcHNlZCA9IG5ldyBTZXQodGhpcy5jb2xsYXBzZWRNdWx0aUZpbHRlcnMpOwogICAgICBpZiAobmV3Q29sbGFwc2VkLmhhcyhmaWx0ZXJLZXkpKSB7CiAgICAgICAgbmV3Q29sbGFwc2VkLmRlbGV0ZShmaWx0ZXJLZXkpOwogICAgICB9IGVsc2UgewogICAgICAgIG5ld0NvbGxhcHNlZC5hZGQoZmlsdGVyS2V5KTsKICAgICAgfQogICAgICB0aGlzLmNvbGxhcHNlZE11bHRpRmlsdGVycyA9IG5ld0NvbGxhcHNlZDsKICAgIH0KICAgIHRvZ2dsZUNvbGxhcHNlKCkgewogICAgICB0aGlzLmNvbGxhcHNlZCA9ICF0aGlzLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiY29sbGFwc2UtY2hhbmdlIiwgewogICAgICAgIGRldGFpbDogeyBjb2xsYXBzZWQ6IHRoaXMuY29sbGFwc2VkIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBzZWxlY3RUYWJJdGVtKGl0ZW0sIGdyb3VwKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRJdGVtID0gaXRlbTsKICAgICAgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIGdyb3VwIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBhc3luYyBoYW5kbGVBY3Rpb25DbGljayhpdGVtKSB7CiAgICAgIGlmIChpdGVtLmNvbmZpcm1NZXNzYWdlKSB7CiAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oaXRlbS5jb25maXJtTWVzc2FnZSk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgYXdhaXQgaXRlbS5hY3Rpb24oKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYWN0aW9uLWNsaWNrIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVGaWx0ZXJUb2dnbGUoaXRlbSkgewogICAgICBjb25zdCBuZXdBY3RpdmUgPSAhaXRlbS5hY3RpdmU7CiAgICAgIGl0ZW0uYWN0aXZlID0gbmV3QWN0aXZlOwogICAgICBpdGVtLm9uVG9nZ2xlKG5ld0FjdGl2ZSk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJmaWx0ZXItdG9nZ2xlIiwgewogICAgICAgIGRldGFpbDogeyBpdGVtLCBhY3RpdmU6IG5ld0FjdGl2ZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTXVsdGlGaWx0ZXJPcHRpb25Ub2dnbGUoaXRlbSwgb3B0aW9uS2V5KSB7CiAgICAgIGNvbnN0IG9wdGlvbjIgPSBpdGVtLm9wdGlvbnMuZmluZCgob3B0KSA9PiBvcHQua2V5ID09PSBvcHRpb25LZXkpOwogICAgICBpZiAob3B0aW9uMikgewogICAgICAgIG9wdGlvbjIuY2hlY2tlZCA9ICFvcHRpb24yLmNoZWNrZWQ7CiAgICAgIH0KICAgICAgY29uc3Qgc2VsZWN0ZWRLZXlzID0gaXRlbS5vcHRpb25zLmZpbHRlcigob3B0KSA9PiBvcHQuY2hlY2tlZCkubWFwKChvcHQpID0+IG9wdC5rZXkpOwogICAgICBpdGVtLm9uQ2hhbmdlKHNlbGVjdGVkS2V5cyk7CiAgICAgIHRoaXMucmVuZGVyQ291bnRlcisrOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtdWx0aWZpbHRlci1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0sIHNlbGVjdGVkS2V5cyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTGlua0NsaWNrKGl0ZW0pIHsKICAgICAgY29uc3QgaXNFeHRlcm5hbCA9IGl0ZW0uZXh0ZXJuYWwgPz8gaXRlbS5ocmVmLnN0YXJ0c1dpdGgoImh0dHAiKTsKICAgICAgaWYgKGlzRXh0ZXJuYWwpIHsKICAgICAgICB3aW5kb3cub3BlbihpdGVtLmhyZWYsICJfYmxhbmsiLCAibm9vcGVuZXIsbm9yZWZlcnJlciIpOwogICAgICB9IGVsc2UgewogICAgICAgIHdpbmRvdy5sb2NhdGlvbi5ocmVmID0gaXRlbS5ocmVmOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxpbmstY2xpY2siLCB7CiAgICAgICAgZGV0YWlsOiB7IGl0ZW0gfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUNvbnRleHRNZW51KGV2ZW50LCBpdGVtKSB7CiAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJWaWV3IGRldGFpbHMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkVkaXQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB9LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cGVuY2lsIgogICAgICAgIH0KICAgICAgXSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAodGhpcy5ncm91cHMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGluaXRpYWxDb2xsYXBzZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldCgpOwogICAgICAgIGNvbnN0IGluaXRpYWxNdWx0aUZpbHRlckNvbGxhcHNlZCA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgU2V0KCk7CiAgICAgICAgdGhpcy5ncm91cHMuZm9yRWFjaCgoZ3JvdXApID0+IHsKICAgICAgICAgIGlmIChncm91cC5jb2xsYXBzZWQpIHsKICAgICAgICAgICAgaW5pdGlhbENvbGxhcHNlZC5hZGQoZ3JvdXAubmFtZSk7CiAgICAgICAgICB9CiAgICAgICAgICBncm91cC5pdGVtcy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGlmICgidHlwZSIgaW4gaXRlbSAmJiBpdGVtLnR5cGUgPT09ICJtdWx0aUZpbHRlciIpIHsKICAgICAgICAgICAgICBjb25zdCBtdWx0aUZpbHRlciA9IGl0ZW07CiAgICAgICAgICAgICAgaWYgKG11bHRpRmlsdGVyLmNvbGxhcHNlZCkgewogICAgICAgICAgICAgICAgaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkLmFkZChtdWx0aUZpbHRlci5rZXkpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgICAgdGhpcy5jb2xsYXBzZWRHcm91cHMgPSBpbml0aWFsQ29sbGFwc2VkOwogICAgICAgIHRoaXMuY29sbGFwc2VkTXVsdGlGaWx0ZXJzID0gaW5pdGlhbE11bHRpRmlsdGVyQ29sbGFwc2VkOwogICAgICAgIGlmICghdGhpcy5zZWxlY3RlZEl0ZW0pIHsKICAgICAgICAgIGZvciAoY29uc3QgZ3JvdXAgb2YgdGhpcy5ncm91cHMpIHsKICAgICAgICAgICAgZm9yIChjb25zdCBpdGVtIG9mIGdyb3VwLml0ZW1zKSB7CiAgICAgICAgICAgICAgY29uc3QgaXRlbVR5cGUgPSAidHlwZSIgaW4gaXRlbSA/IGl0ZW0udHlwZSA6ICJ0YWIiOwogICAgICAgICAgICAgIGlmIChpdGVtVHlwZSA9PT0gInRhYiIgfHwgaXRlbVR5cGUgPT09IHZvaWQgMCkgewogICAgICAgICAgICAgICAgY29uc3QgdGFiSXRlbSA9IGl0ZW07CiAgICAgICAgICAgICAgICBpZiAoIXRhYkl0ZW0uZGlzYWJsZWQpIHsKICAgICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RUYWJJdGVtKHRhYkl0ZW0sIGdyb3VwKTsKICAgICAgICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLnNlbGVjdGlvbk9wdGlvbnMubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IGZpcnN0T3B0aW9uID0gdGhpcy5zZWxlY3Rpb25PcHRpb25zLmZpbmQoKG9wdCkgPT4gISgiZGl2aWRlciIgaW4gb3B0KSk7CiAgICAgICAgaWYgKGZpcnN0T3B0aW9uICYmICF0aGlzLnNlbGVjdGVkSXRlbSkgewogICAgICAgICAgY29uc3QgdGFiSXRlbSA9IHsKICAgICAgICAgICAga2V5OiBmaXJzdE9wdGlvbi5rZXksCiAgICAgICAgICAgIGljb25OYW1lOiBmaXJzdE9wdGlvbi5pY29uTmFtZSwKICAgICAgICAgICAgYWN0aW9uOiBmaXJzdE9wdGlvbi5hY3Rpb24KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLnNlbGVjdFRhYkl0ZW0odGFiSXRlbSk7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnMzOSh0aGlzLCBfY29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzMzkoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aVNlY29uZGFyeW1lbnUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1hcHB1aS9kZWVzLWFwcHVpLXRhYnMvZGVlcy1hcHB1aS10YWJzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTM5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb0Nsb3NlYWJsZVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLWNsb3NlYWJsZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYkNvdW50ZXJfZGVjb3JhdG9yczsKICBsZXQgX3RhYkNvdW50ZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlbW9DbG9zZWFibGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhYkNvdW50ZXJfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF90YWJDb3VudGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYkNvdW50ZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhYkNvdW50ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiQ291bnRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFiQ291bnRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YWJDb3VudGVyX2luaXRpYWxpemVycywgX3RhYkNvdW50ZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGUzOShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJNYWluIiwgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIk1haW4gY2xpY2tlZCIpIH0KICAgIF0pOwogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFiQ291bnRlcl9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJDb3VudGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFiQ291bnRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYkNvdW50ZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYkNvdW50ZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAuY29udHJvbHMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMykiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMikiKX07CiAgICAgIH0KICAgICAgLmluZm8gewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMDIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4wMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGFkZFRhYigpIHsKICAgICAgdGhpcy50YWJDb3VudGVyKys7CiAgICAgIGNvbnN0IHRhYktleSA9IGBEb2N1bWVudCAke3RoaXMudGFiQ291bnRlcn1gOwogICAgICB0aGlzLnRhYnMgPSBbCiAgICAgICAgLi4udGhpcy50YWJzLAogICAgICAgIHsKICAgICAgICAgIGtleTogdGFiS2V5LAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKGAke3RhYktleX0gY2xpY2tlZGApLAogICAgICAgICAgY2xvc2VhYmxlOiB0cnVlLAogICAgICAgICAgb25DbG9zZTogKCkgPT4gdGhpcy5yZW1vdmVUYWIodGFiS2V5KQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHJlbW92ZVRhYih0YWJLZXkpIHsKICAgICAgdGhpcy50YWJzID0gdGhpcy50YWJzLmZpbHRlcigodDkpID0+IHQ5LmtleSAhPT0gdGFiS2V5KTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1hcHB1aS10YWJzCiAgICAgICAgLnRhYnM9JHt0aGlzLnRhYnN9CiAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFiKGUxMS5kZXRhaWwudGFiLmtleSl9CiAgICAgID48L2RlZXMtYXBwdWktdGFicz4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgTmV3IFRhYjwvYnV0dG9uPgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgQ2xpY2sgdGhlIFggYnV0dG9uIG9uIHRhYnMgdG8gY2xvc2UgdGhlbS4gVGhlICJNYWluIiB0YWIgaXMgbm90IGNsb3NlYWJsZS4KICAgICAgICA8YnI+Q3VycmVudCB0YWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90YWJDb3VudGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9DbG9zZWFibGVUYWJzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vQXV0b0hpZGVUYWJzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby1hdXRvaGlkZS10YWJzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfdGFic19kZWNvcmF0b3JzOwogIGxldCBfdGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZW1vQXV0b0hpZGVUYWJzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3RhYnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF90aHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTM5KHRoaXMsIG51bGwsIF9hdXRvSGlkZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b0hpZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2F1dG9IaWRlX2luaXRpYWxpemVycywgX2F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkodGhpcywgbnVsbCwgX3RocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRocmVzaG9sZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50aHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCBfdGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlMzkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vQXV0b0hpZGVUYWJzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAjdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfdGFic19pbml0aWFsaXplcnMsIFsKICAgICAgeyBrZXk6ICJUYWIgMSIsIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJUYWIgMSIpIH0sCiAgICAgIHsga2V5OiAiVGFiIDIiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiVGFiIDIiKSB9CiAgICBdKTsKICAgIGdldCB0YWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MCh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQwKHRoaXMsIF90aHJlc2hvbGRfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgdGhyZXNob2xkKCkgewogICAgICByZXR1cm4gdGhpcy4jdGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGhyZXNob2xkKHZhbHVlMikgewogICAgICB0aGlzLiN0aHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgewogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgYm9yZGVyOiAxcHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQogICAgICAudGFicy1jb250YWluZXIgZGVlcy1hcHB1aS10YWJzIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQogICAgICAucGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ExYTFhYSIsICIjNzE3MTdhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICBidXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4xKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjEpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjM5LCA2OCwgNjgsIDAuMykiLCAicmdiYSgyMzksIDY4LCA2OCwgMC4zKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZjQ0NDQiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICBidXR0b24uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMzksIDY4LCA2OCwgMC4yKSIsICJyZ2JhKDIzOSwgNjgsIDY4LCAwLjIpIil9OwogICAgICB9CiAgICAgIC5pbmZvIHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjAyKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMDIpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KICAgIGAKICAgIF07CiAgICB0YWJDb3VudGVyID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDAodGhpcywgX3RocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyksIDIpOwogICAgYWRkVGFiKCkgewogICAgICB0aGlzLnRhYkNvdW50ZXIrKzsKICAgICAgdGhpcy50YWJzID0gWy4uLnRoaXMudGFicywgewogICAgICAgIGtleTogYFRhYiAke3RoaXMudGFiQ291bnRlcn1gLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGUiLAogICAgICAgIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coYFRhYiAke3RoaXMudGFiQ291bnRlcn1gKQogICAgICB9XTsKICAgIH0KICAgIHJlbW92ZUxhc3RUYWIoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMubGVuZ3RoID4gMCkgewogICAgICAgIHRoaXMudGFicyA9IHRoaXMudGFicy5zbGljZSgwLCAtMSk7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyVGFicygpIHsKICAgICAgdGhpcy50YWJzID0gW107CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IHNob3VsZEhpZGUgPSB0aGlzLmF1dG9IaWRlICYmIHRoaXMudGFicy5sZW5ndGggPD0gdGhpcy50aHJlc2hvbGQ7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0idGFicy1jb250YWluZXIiPgogICAgICAgICR7c2hvdWxkSGlkZSA/IGIyYDxzcGFuIGNsYXNzPSJwbGFjZWhvbGRlciI+VGFicyBoaWRkZW4gKCR7dGhpcy50YWJzLmxlbmd0aH0gdGFicyDiiaQgdGhyZXNob2xkICR7dGhpcy50aHJlc2hvbGR9KTwvc3Bhbj5gIDogYjJgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAgIC50YWJzPSR7dGhpcy50YWJzfQogICAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMuYXV0b0hpZGV9CiAgICAgICAgICAgICAgLmF1dG9IaWRlVGhyZXNob2xkPSR7dGhpcy50aHJlc2hvbGR9CiAgICAgICAgICAgID48L2RlZXMtYXBwdWktdGFicz5gfQogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gdGhpcy5hZGRUYWIoKX0+KyBBZGQgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUxhc3RUYWIoKX0+LSBSZW1vdmUgVGFiPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGFuZ2VyIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyVGFicygpfT5DbGVhciBBbGw8L2J1dHRvbj4KICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLnRocmVzaG9sZCA9IDA7CiAgICAgIH19PlRocmVzaG9sZDogMDwvYnV0dG9uPgogICAgICAgIDxidXR0b24gQGNsaWNrPSR7KCkgPT4gewogICAgICAgIHRoaXMudGhyZXNob2xkID0gMTsKICAgICAgfX0+VGhyZXNob2xkOiAxPC9idXR0b24+CiAgICAgICAgPGJ1dHRvbiBAY2xpY2s9JHsoKSA9PiB7CiAgICAgICAgdGhpcy50aHJlc2hvbGQgPSAyOwogICAgICB9fT5UaHJlc2hvbGQ6IDI8L2J1dHRvbj4KICAgICAgPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImluZm8iPgogICAgICAgIEF1dG8taGlkZTogJHt0aGlzLmF1dG9IaWRlID8gIk9OIiA6ICJPRkYifSB8IFRocmVzaG9sZDogJHt0aGlzLnRocmVzaG9sZH0gfCBUYWJzOiAke3RoaXMudGFicy5sZW5ndGh9CiAgICAgICAgPGJyPlRhYnMgd2lsbCBoaWRlIHdoZW4gY291bnQg4omkIHRocmVzaG9sZC4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb0F1dG9IaWRlVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmMzMCA9ICgpID0+IHsKICBjb25zdCBob3Jpem9udGFsVGFicyA9IFsKICAgIHsga2V5OiAiSG9tZSIsIGljb25OYW1lOiAibHVjaWRlOmhvbWUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIb21lIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBbmFseXRpY3MgRGFzaGJvYXJkIiwgaWNvbk5hbWU6ICJsdWNpZGU6bGluZUNoYXJ0IiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQW5hbHl0aWNzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJSZXBvcnRzIiwgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVRleHQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJSZXBvcnRzIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJVc2VyIFNldHRpbmdzIiwgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZXR0aW5ncyBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiSGVscCIsIGljb25OYW1lOiAibHVjaWRlOmhlbHBDaXJjbGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJIZWxwIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCB2ZXJ0aWNhbFRhYnMgPSBbCiAgICB7IGtleTogIlByb2ZpbGUiLCBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiUHJvZmlsZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiU2VjdXJpdHkiLCBpY29uTmFtZTogImx1Y2lkZTpzaGllbGQiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJTZWN1cml0eSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiTm90aWZpY2F0aW9ucyIsIGljb25OYW1lOiAibHVjaWRlOmJlbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJOb3RpZmljYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJJbnRlZ3JhdGlvbnMiLCBpY29uTmFtZTogImx1Y2lkZTpsaW5rIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiSW50ZWdyYXRpb25zIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBZHZhbmNlZCIsIGljb25OYW1lOiAibHVjaWRlOmNvZGUiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBZHZhbmNlZCBjbGlja2VkIikgfQogIF07CiAgY29uc3Qgbm9JbmRpY2F0b3JUYWJzID0gWwogICAgeyBrZXk6ICJBbGwiLCBhY3Rpb246ICgpID0+IGNvbnNvbGUubG9nKCJBbGwgY2xpY2tlZCIpIH0sCiAgICB7IGtleTogIkFjdGl2ZSIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFjdGl2ZSBjbGlja2VkIikgfSwKICAgIHsga2V5OiAiQ29tcGxldGVkIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiQ29tcGxldGVkIGNsaWNrZWQiKSB9LAogICAgeyBrZXk6ICJBcmNoaXZlZCIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIkFyY2hpdmVkIGNsaWNrZWQiKSB9CiAgXTsKICBjb25zdCBkZW1vQ29udGVudCA9ICh0ZXh0OSkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsiPgogICAgICAke3RleHQ5fQogICAgPC9kaXY+CiAgYDsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiA0OHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjhmOWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgIH0KCiAgICAgIC5zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC50d28tY29sdW1uIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjAwcHggMWZyOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBhbGlnbi1pdGVtczogc3RhcnQ7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkhvcml6b250YWwgVGFicyB3aXRoIEFuaW1hdGVkIEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnRhYnM9JHtob3Jpem9udGFsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgJHtkZW1vQ29udGVudCgiU2VsZWN0IGEgdGFiIHRvIHNlZSB0aGUgc21vb3RoIHNsaWRpbmcgYW5pbWF0aW9uIG9mIHRoZSBpbmRpY2F0b3IuIFRoZSBpbmRpY2F0b3IgYXV0b21hdGljYWxseSBhZGp1c3RzIGl0cyB3aWR0aCB0byBtYXRjaCB0aGUgdGFiIGNvbnRlbnQgd2l0aCBtaW5pbWFsIHBhZGRpbmcuIil9CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+Q2xvc2VhYmxlIFRhYnMgKEJyb3dzZXItc3R5bGUpPC9kaXY+CiAgICAgICAgPGRlbW8tY2xvc2VhYmxlLXRhYnM+PC9kZW1vLWNsb3NlYWJsZS10YWJzPgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkF1dG8taGlkZSBUYWJzPC9kaXY+CiAgICAgICAgPGRlbW8tYXV0b2hpZGUtdGFicz48L2RlbW8tYXV0b2hpZGUtdGFicz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5WZXJ0aWNhbCBUYWJzIExheW91dDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InR3by1jb2x1bW4iPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicyAudGFiU3R5bGU9JHsidmVydGljYWwifSAudGFicz0ke3ZlcnRpY2FsVGFic30+PC9kZWVzLWFwcHVpLXRhYnM+CiAgICAgICAgICAke2RlbW9Db250ZW50KCJWZXJ0aWNhbCB0YWJzIHdvcmsgZ3JlYXQgZm9yIHNldHRpbmdzIHBhZ2VzIGFuZCBuYXZpZ2F0aW9uIG1lbnVzLiBUaGUgYW5pbWF0ZWQgaW5kaWNhdG9yIHNtb290aGx5IHRyYW5zaXRpb25zIGJldHdlZW4gc2VsZWN0aW9ucy4iKX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5XaXRob3V0IEluZGljYXRvcjwvZGl2PgogICAgICAgIDxkZWVzLWFwcHVpLXRhYnMgLnNob3dUYWJJbmRpY2F0b3I9JHtmYWxzZX0gLnRhYnM9JHtub0luZGljYXRvclRhYnN9PjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgICR7ZGVtb0NvbnRlbnQoIlRhYnMgY2FuIGFsc28gYmUgdXNlZCB3aXRob3V0IHRoZSBhbmltYXRlZCBpbmRpY2F0b3IgYnkgc2V0dGluZyBzaG93VGFiSW5kaWNhdG9yIHRvIGZhbHNlLiIpfQogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYXBwdWkvZGVlcy1hcHB1aS10YWJzL2RlZXMtYXBwdWktdGFicy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aVRhYnMgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWFwcHVpLXRhYnMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90YWJzX2RlY29yYXRvcnM7CiAgbGV0IF90YWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGFiSW5kaWNhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9kZWNvcmF0b3JzOwogIGxldCBfdGFiU3R5bGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJTdHlsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnM7CiAgbGV0IF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9yczsKICBsZXQgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2FuU2Nyb2xsUmlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpVGFiczIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYkluZGljYXRvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF90YWJTdHlsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY2FuU2Nyb2xsTGVmdF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX3Nob3dUYWJJbmRpY2F0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1RhYkluZGljYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1RhYkluZGljYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFiSW5kaWNhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGFiSW5kaWNhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dUYWJJbmRpY2F0b3JfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF90YWJTdHlsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0YWJTdHlsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFiU3R5bGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGFiU3R5bGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRhYlN0eWxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYlN0eWxlX2luaXRpYWxpemVycywgX3RhYlN0eWxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDAodGhpcywgbnVsbCwgX2F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9IaWRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhdXRvSGlkZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b0hpZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXV0b0hpZGVfaW5pdGlhbGl6ZXJzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfYXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b0hpZGVUaHJlc2hvbGQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9IaWRlVGhyZXNob2xkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvSGlkZVRocmVzaG9sZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9hdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKHRoaXMsIG51bGwsIF9jYW5TY3JvbGxMZWZ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNhblNjcm9sbExlZnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbExlZnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY2FuU2Nyb2xsTGVmdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2FuU2Nyb2xsTGVmdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxMZWZ0X2luaXRpYWxpemVycywgX2NhblNjcm9sbExlZnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MCh0aGlzLCBudWxsLCBfY2FuU2Nyb2xsUmlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2FuU2Nyb2xsUmlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNhblNjcm9sbFJpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNhblNjcm9sbFJpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jYW5TY3JvbGxSaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jYW5TY3JvbGxSaWdodF9pbml0aWFsaXplcnMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzMwOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9zaG93VGFiSW5kaWNhdG9yX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dUYWJJbmRpY2F0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFiSW5kaWNhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1RhYkluZGljYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1RhYkluZGljYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYlN0eWxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfc2hvd1RhYkluZGljYXRvcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX3RhYlN0eWxlX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgdGFiU3R5bGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhYlN0eWxlKHZhbHVlMikgewogICAgICB0aGlzLiN0YWJTdHlsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfdGFiU3R5bGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGF1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfYXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9hdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhdXRvSGlkZVRocmVzaG9sZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBTY3JvbGwgc3RhdGUgZm9yIGZhZGUgaW5kaWNhdG9ycwogICAgZ2V0IGNhblNjcm9sbExlZnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjYW5TY3JvbGxMZWZ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsTGVmdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2FuU2Nyb2xsTGVmdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0MSh0aGlzLCBfY2FuU2Nyb2xsTGVmdF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDEodGhpcywgX2NhblNjcm9sbFJpZ2h0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBjYW5TY3JvbGxSaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2FuU2Nyb2xsUmlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NhblNjcm9sbFJpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IChfX3J1bkluaXRpYWxpemVyczQxKHRoaXMsIF9jYW5TY3JvbGxSaWdodF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzLXdyYXBwZXIuaG9yaXpvbnRhbC13cmFwcGVyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAvKiBTY3JvbGwgZmFkZSBpbmRpY2F0b3JzICovCiAgICAgIC5zY3JvbGwtZmFkZSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDFweDsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUtbGVmdCB7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTYxNjE2Iil9IDAlLAogICAgICAgICAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LDI1NSwyNTUsMCkiLCAicmdiYSgyMiwyMiwyMiwwKSIpfSAxMDAlKTsKICAgICAgfQoKICAgICAgLnNjcm9sbC1mYWRlLXJpZ2h0IHsKICAgICAgICByaWdodDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiBsaW5lYXItZ3JhZGllbnQodG8gbGVmdCwKICAgICAgICAgICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX0gMCUsCiAgICAgICAgICAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsMjU1LDI1NSwwKSIsICJyZ2JhKDIyLDIyLDIyLDApIil9IDEwMCUpOwogICAgICB9CgogICAgICAuc2Nyb2xsLWZhZGUudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgICAgb3ZlcnNjcm9sbC1iZWhhdmlvcjogY29udGFpbjsKICAgICAgICBzY3JvbGxiYXItd2lkdGg6IHRoaW47CiAgICAgICAgc2Nyb2xsYmFyLWNvbG9yOiB0cmFuc3BhcmVudCB0cmFuc3BhcmVudDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAvKiBTaG93IHNjcm9sbGJhciBvbiBob3ZlciAqLwogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWwgewogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4yKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMikiKX0gdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMnB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4ycyBlYXNlOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyOmhvdmVyIC50YWJzQ29udGFpbmVyLmhvcml6b250YWw6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLDAsMCwwLjIpIiwgInJnYmEoMjU1LDI1NSwyNTUsMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtd3JhcHBlcjpob3ZlciAudGFic0NvbnRhaW5lci5ob3Jpem9udGFsOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4zNSkiLCAicmdiYSgyNTUsMjU1LDI1NSwwLjM1KSIpfTsKICAgICAgfQoKICAgICAgLnRhYnNDb250YWluZXIudmVydGljYWwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMnB4OwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTgxODFiIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAuaG9yaXpvbnRhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweCA2cHggMCAwOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQtY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYjpub3QoOmxhc3QtY2hpbGQpOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAtMnB4OwogICAgICAgIHRvcDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQogICAgICAKICAgICAgLmhvcml6b250YWwgLnRhYiAudGFiLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiIHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDMpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMykiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWI6aG92ZXI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiOmhvdmVyICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNDQsIDI0NCwgMjQ1LCAwLjUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC41KSIpfTsKICAgICAgfQoKICAgICAgLmhvcml6b250YWwgLnRhYi5zZWxlY3RlZFRhYiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5ob3Jpem9udGFsIC50YWIuc2VsZWN0ZWRUYWI6OmFmdGVyLAogICAgICAuaG9yaXpvbnRhbCAudGFiLnNlbGVjdGVkVGFiICsgLnRhYjo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbCAudGFiLnNlbGVjdGVkVGFiIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLnRhYiBkZWVzLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgfQoKICAgICAgLnRhYkluZGljYXRvciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAKICAgICAgLnRhYkluZGljYXRvci5uby10cmFuc2l0aW9uIHsKICAgICAgICB0cmFuc2l0aW9uOiBub25lOwogICAgICB9CgogICAgICAudGFicy13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweCAzcHggMCAwOwogICAgICAgIHotaW5kZXg6IDM7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC52ZXJ0aWNhbC13cmFwcGVyIC50YWJJbmRpY2F0b3IgewogICAgICAgIGxlZnQ6IDhweDsKICAgICAgICByaWdodDogOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMjcyNzJhIil9OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4wOCk7CiAgICAgIH0KCiAgICAgIC8qIENsb3NlIGJ1dHRvbiAqLwogICAgICAudGFiLWNsb3NlIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgICBvcGFjaXR5OiAwLjQ7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiIzcxNzE3YSIpfTsKICAgICAgfQoKICAgICAgLnRhYjpob3ZlciAudGFiLWNsb3NlIHsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2U6aG92ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwwLDAsMC4xKSIsICJyZ2JhKDI1NSwyNTUsMjU1LDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNmODcxNzEiKX07CiAgICAgIH0KCiAgICAgIC50YWIuc2VsZWN0ZWRUYWIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFiLnNlbGVjdGVkVGFiOmhvdmVyIC50YWItY2xvc2UgewogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQoKICAgICAgLnRhYi5zZWxlY3RlZFRhYiAudGFiLWNsb3NlOmhvdmVyIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAodGhpcy5hdXRvSGlkZSAmJiB0aGlzLnRhYnMubGVuZ3RoIDw9IHRoaXMuYXV0b0hpZGVUaHJlc2hvbGQpIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJzV3JhcHBlcigpfQogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYnNXcmFwcGVyKCkgewogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHdyYXBwZXJDbGFzcyA9IGlzSG9yaXpvbnRhbCA/ICJ0YWJzLXdyYXBwZXIgaG9yaXpvbnRhbC13cmFwcGVyIiA6ICJ2ZXJ0aWNhbC13cmFwcGVyIjsKICAgICAgY29uc3QgY29udGFpbmVyQ2xhc3MgPSBgdGFic0NvbnRhaW5lciAke3RoaXMudGFiU3R5bGV9YDsKICAgICAgaWYgKGlzSG9yaXpvbnRhbCkgewogICAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtbGVmdCAke3RoaXMuY2FuU2Nyb2xsTGVmdCA/ICJ2aXNpYmxlIiA6ICIifSI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSIke2NvbnRhaW5lckNsYXNzfSIgQHNjcm9sbD0ke3RoaXMuaGFuZGxlU2Nyb2xsfT4KICAgICAgICAgICAgJHt0aGlzLnRhYnMubWFwKCh0YWIyKSA9PiB0aGlzLnJlbmRlclRhYih0YWIyLCBpc0hvcml6b250YWwpKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ic2Nyb2xsLWZhZGUgc2Nyb2xsLWZhZGUtcmlnaHQgJHt0aGlzLmNhblNjcm9sbFJpZ2h0ID8gInZpc2libGUiIDogIiJ9Ij48L2Rpdj4KICAgICAgICAgICR7dGhpcy5zaG93VGFiSW5kaWNhdG9yID8gYjJgPGRpdiBjbGFzcz0idGFiSW5kaWNhdG9yIj48L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSIke3dyYXBwZXJDbGFzc30iPgogICAgICAgIDxkaXYgY2xhc3M9IiR7Y29udGFpbmVyQ2xhc3N9Ij4KICAgICAgICAgICR7dGhpcy50YWJzLm1hcCgodGFiMikgPT4gdGhpcy5yZW5kZXJUYWIodGFiMiwgaXNIb3Jpem9udGFsKSl9CiAgICAgICAgPC9kaXY+CiAgICAgICAgJHt0aGlzLnNob3dUYWJJbmRpY2F0b3IgPyBiMmA8ZGl2IGNsYXNzPSJ0YWJJbmRpY2F0b3IiPjwvZGl2PmAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyVGFiKHRhYjIsIGlzSG9yaXpvbnRhbCkgewogICAgICBjb25zdCBpc1NlbGVjdGVkID0gdGFiMiA9PT0gdGhpcy5zZWxlY3RlZFRhYjsKICAgICAgY29uc3QgY2xhc3NlcyA9IGB0YWIgJHtpc1NlbGVjdGVkID8gInNlbGVjdGVkVGFiIiA6ICIifWA7CiAgICAgIGNvbnN0IGNsb3NlQnV0dG9uID0gdGFiMi5jbG9zZWFibGUgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSIkeyhlMTEpID0+IHRoaXMuY2xvc2VUYWIoZTExLCB0YWIyKX0iPgogICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOngifSBzdHlsZT0iZm9udC1zaXplOiAxMnB4OyI+PC9kZWVzLWljb24+CiAgICAgIDwvc3Bhbj4KICAgIGAgOiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBpc0hvcml6b250YWwgPyBiMmAKICAgICAgPHNwYW4gY2xhc3M9InRhYi1jb250ZW50Ij4KICAgICAgICAke3RoaXMucmVuZGVyVGFiSWNvbih0YWIyKX0KICAgICAgICAke3RhYjIua2V5fQogICAgICA8L3NwYW4+CiAgICAgICR7Y2xvc2VCdXR0b259CiAgICBgIDogYjJgCiAgICAgICR7dGhpcy5yZW5kZXJUYWJJY29uKHRhYjIpfQogICAgICAke3RhYjIua2V5fQogICAgICAke2Nsb3NlQnV0dG9ufQogICAgYDsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9IiR7Y2xhc3Nlc30iCiAgICAgICAgQGNsaWNrPSIkeygpID0+IHRoaXMuc2VsZWN0VGFiKHRhYjIpfSIKICAgICAgPgogICAgICAgICR7Y29udGVudDN9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclRhYkljb24odGFiMikgewogICAgICByZXR1cm4gdGFiMi5pY29uTmFtZSA/IGIyYDxkZWVzLWljb24gLmljb249JHt0YWIyLmljb25OYW1lfT48L2RlZXMtaWNvbj5gIDogIiI7CiAgICB9CiAgICBzZWxlY3RUYWIodGFiQXJnKSB7CiAgICAgIHRoaXMuc2VsZWN0ZWRUYWIgPSB0YWJBcmc7CiAgICAgIHRhYkFyZy5hY3Rpb24oKTsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLnNjcm9sbFRhYkludG9WaWV3KHRhYkFyZyk7CiAgICAgIH0pOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogeyB0YWI6IHRhYkFyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2VUYWIoZTExLCB0YWIyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKHRhYjIub25DbG9zZSkgewogICAgICAgIHRhYjIub25DbG9zZSgpOwogICAgICB9CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInRhYi1jbG9zZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdGFiOiB0YWIyIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGlmICh0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc2V0dXBSZXNpemVPYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMudGFiU3R5bGUgIT09ICJob3Jpem9udGFsIikKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlU2Nyb2xsU3RhdGUoKTsKICAgICAgfSk7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBpZiAoY29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZVNjcm9sbCA9ICgpID0+IHsKICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgfTsKICAgIHVwZGF0ZVNjcm9sbFN0YXRlKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWJzQ29udGFpbmVyLmhvcml6b250YWwiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxMZWZ0ID0gY29udGFpbmVyLnNjcm9sbExlZnQ7CiAgICAgIGNvbnN0IHNjcm9sbFdpZHRoID0gY29udGFpbmVyLnNjcm9sbFdpZHRoOwogICAgICBjb25zdCBjbGllbnRXaWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aDsKICAgICAgY29uc3QgdGhyZXNob2xkID0gMjsKICAgICAgdGhpcy5jYW5TY3JvbGxMZWZ0ID0gc2Nyb2xsTGVmdCA+IHRocmVzaG9sZDsKICAgICAgdGhpcy5jYW5TY3JvbGxSaWdodCA9IHNjcm9sbExlZnQgPCBzY3JvbGxXaWR0aCAtIGNsaWVudFdpZHRoIC0gdGhyZXNob2xkOwogICAgfQogICAgc2Nyb2xsVGFiSW50b1ZpZXcodGFiMikgewogICAgICBpZiAodGhpcy50YWJTdHlsZSAhPT0gImhvcml6b250YWwiKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgdGFiSW5kZXggPSB0aGlzLnRhYnMuaW5kZXhPZih0YWIyKTsKICAgICAgaWYgKHRhYkluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnRhYnNDb250YWluZXIuaG9yaXpvbnRhbCIpOwogICAgICBjb25zdCB0YWJFbGVtZW50ID0gY29udGFpbmVyPy5xdWVyeVNlbGVjdG9yKGAudGFiOm50aC1jaGlsZCgke3RhYkluZGV4ICsgMX0pYCk7CiAgICAgIGlmICh0YWJFbGVtZW50ICYmIGNvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgdGFiUmVjdCA9IHRhYkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNGdWxseVZpc2libGUgPSB0YWJSZWN0LmxlZnQgPj0gY29udGFpbmVyUmVjdC5sZWZ0ICYmIHRhYlJlY3QucmlnaHQgPD0gY29udGFpbmVyUmVjdC5yaWdodDsKICAgICAgICBpZiAoIWlzRnVsbHlWaXNpYmxlKSB7CiAgICAgICAgICB0YWJFbGVtZW50LnNjcm9sbEludG9WaWV3KHsgYmVoYXZpb3I6ICJzbW9vdGgiLCBibG9jazogIm5lYXJlc3QiLCBpbmxpbmU6ICJuZWFyZXN0IiB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgc3VwZXIudXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInRhYnMiKSAmJiB0aGlzLnRhYnMgJiYgdGhpcy50YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRUYWIpIHsKICAgICAgICB0aGlzLnNlbGVjdFRhYih0aGlzLnRhYnNbMF0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInNlbGVjdGVkVGFiIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ0YWJzIikpIHsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIGlmICghdGhpcy5pbmRpY2F0b3JJbml0aWFsaXplZCAmJiBkb2N1bWVudC5mb250cykgewogICAgICAgICAgYXdhaXQgZG9jdW1lbnQuZm9udHMucmVhZHk7CiAgICAgICAgfQogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRhYkluZGljYXRvcigpOwogICAgICAgICAgdGhpcy51cGRhdGVTY3JvbGxTdGF0ZSgpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBpbmRpY2F0b3JJbml0aWFsaXplZCA9IGZhbHNlOwogICAgdXBkYXRlVGFiSW5kaWNhdG9yKCkgewogICAgICBpZiAoIXRoaXMuc2hvdWxkU2hvd0luZGljYXRvcigpKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUYWJFbGVtZW50ID0gdGhpcy5nZXRTZWxlY3RlZFRhYkVsZW1lbnQoKTsKICAgICAgaWYgKCFzZWxlY3RlZFRhYkVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBpbmRpY2F0b3IgPSB0aGlzLmdldEluZGljYXRvckVsZW1lbnQoKTsKICAgICAgaWYgKCFpbmRpY2F0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmhhbmRsZUluaXRpYWxUcmFuc2l0aW9uKGluZGljYXRvcik7CiAgICAgIGlmICh0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCIpIHsKICAgICAgICB0aGlzLnVwZGF0ZUhvcml6b250YWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMudXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCBzZWxlY3RlZFRhYkVsZW1lbnQpOwogICAgICB9CiAgICAgIGluZGljYXRvci5zdHlsZS5vcGFjaXR5ID0gIjEiOwogICAgfQogICAgc2hvdWxkU2hvd0luZGljYXRvcigpIHsKICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRUYWIgJiYgdGhpcy5zaG93VGFiSW5kaWNhdG9yICYmIHRoaXMudGFicy5pbmNsdWRlcyh0aGlzLnNlbGVjdGVkVGFiKTsKICAgIH0KICAgIGdldFNlbGVjdGVkVGFiRWxlbWVudCgpIHsKICAgICAgY29uc3Qgc2VsZWN0ZWRJbmRleCA9IHRoaXMudGFicy5pbmRleE9mKHRoaXMuc2VsZWN0ZWRUYWIpOwogICAgICBjb25zdCBpc0hvcml6b250YWwgPSB0aGlzLnRhYlN0eWxlID09PSAiaG9yaXpvbnRhbCI7CiAgICAgIGNvbnN0IHNlbGVjdG9yID0gaXNIb3Jpem9udGFsID8gYC50YWJzLXdyYXBwZXIgLnRhYnNDb250YWluZXIgLnRhYjpudGgtY2hpbGQoJHtzZWxlY3RlZEluZGV4ICsgMX0pYCA6IGAudmVydGljYWwtd3JhcHBlciAudGFic0NvbnRhaW5lciAudGFiOm50aC1jaGlsZCgke3NlbGVjdGVkSW5kZXggKyAxfSlgOwogICAgICByZXR1cm4gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgfQogICAgZ2V0SW5kaWNhdG9yRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGFiSW5kaWNhdG9yIik7CiAgICB9CiAgICBoYW5kbGVJbml0aWFsVHJhbnNpdGlvbihpbmRpY2F0b3IpIHsKICAgICAgaWYgKCF0aGlzLmluZGljYXRvckluaXRpYWxpemVkKSB7CiAgICAgICAgaW5kaWNhdG9yLmNsYXNzTGlzdC5hZGQoIm5vLXRyYW5zaXRpb24iKTsKICAgICAgICB0aGlzLmluZGljYXRvckluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgIGluZGljYXRvci5jbGFzc0xpc3QucmVtb3ZlKCJuby10cmFuc2l0aW9uIik7CiAgICAgICAgfSwgNTApOwogICAgICB9CiAgICB9CiAgICB1cGRhdGVIb3Jpem9udGFsSW5kaWNhdG9yKGluZGljYXRvciwgdGFiRWxlbWVudCkgewogICAgICBjb25zdCB0YWJDb250ZW50ID0gdGFiRWxlbWVudC5xdWVyeVNlbGVjdG9yKCIudGFiLWNvbnRlbnQiKTsKICAgICAgaWYgKCF0YWJDb250ZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlclJlY3QgPSBpbmRpY2F0b3IucGFyZW50RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgY29udGVudFJlY3QgPSB0YWJDb250ZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBjb250ZW50TGVmdCA9IGNvbnRlbnRSZWN0LmxlZnQgLSB3cmFwcGVyUmVjdC5sZWZ0OwogICAgICBjb25zdCBpbmRpY2F0b3JXaWR0aCA9IGNvbnRlbnRSZWN0LndpZHRoICsgODsKICAgICAgY29uc3QgaW5kaWNhdG9yTGVmdCA9IGNvbnRlbnRMZWZ0IC0gNDsKICAgICAgaW5kaWNhdG9yLnN0eWxlLndpZHRoID0gYCR7aW5kaWNhdG9yV2lkdGh9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUubGVmdCA9IGAke2luZGljYXRvckxlZnR9cHhgOwogICAgfQogICAgdXBkYXRlVmVydGljYWxJbmRpY2F0b3IoaW5kaWNhdG9yLCB0YWJFbGVtZW50KSB7CiAgICAgIGNvbnN0IHRhYnNDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnZlcnRpY2FsLXdyYXBwZXIgLnRhYnNDb250YWluZXIiKTsKICAgICAgaWYgKCF0YWJzQ29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgaW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke3RhYkVsZW1lbnQub2Zmc2V0VG9wICsgdGFic0NvbnRhaW5lci5vZmZzZXRUb3B9cHhgOwogICAgICBpbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGFiRWxlbWVudC5jbGllbnRIZWlnaHR9cHhgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0FwcHVpVGFiczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWktbWFpbmNvbnRlbnQvZGVlcy1hcHB1aS1tYWluY29udGVudC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aU1haW5jb250ZW50ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1hcHB1aS1tYWluY29udGVudCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZV9kZWNvcmF0b3JzOwogIGxldCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGFic0F1dG9IaWRlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9yczsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQXBwdWlNYWluY29udGVudDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90YWJzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2hvd1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50YWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNfaW5pdGlhbGl6ZXJzLCBfdGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQxKHRoaXMsIG51bGwsIF9zZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRhYiIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGFiID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDEodGhpcywgbnVsbCwgX3Nob3dUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGFicyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1RhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCBfc2hvd1RhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MSh0aGlzLCBudWxsLCBfdGFic0F1dG9IaWRlVGhyZXNob2xkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRhYnNBdXRvSGlkZVRocmVzaG9sZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhYnNBdXRvSGlkZVRocmVzaG9sZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGFic0F1dG9IaWRlVGhyZXNob2xkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF90YWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aU1haW5jb250ZW50MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYXBwdWktbWFpbmNvbnRlbnQKICAgICAgLnRhYnM9JHtbCiAgICAgIHsga2V5OiAiT3ZlcnZpZXciLCBpY29uTmFtZTogImx1Y2lkZTpob21lIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiT3ZlcnZpZXciKSB9LAogICAgICB7IGtleTogIkRldGFpbHMiLCBpY29uTmFtZTogImx1Y2lkZTpmaWxlIiwgYWN0aW9uOiAoKSA9PiBjb25zb2xlLmxvZygiRGV0YWlscyIpIH0sCiAgICAgIHsga2V5OiAiU2V0dGluZ3MiLCBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS5sb2coIlNldHRpbmdzIikgfQogICAgXX0KICAgID4KICAgICAgPGRpdiBzbG90PSJjb250ZW50IiBzdHlsZT0icGFkZGluZzogNDBweDsgY29sb3I6ICNjY2M7Ij4KICAgICAgICA8aDE+TWFpbiBDb250ZW50IEFyZWE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgd2hlcmUgeW91ciBhcHBsaWNhdGlvbiBjb250ZW50IGdvZXMuPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1hcHB1aS1tYWluY29udGVudD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgI3RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsga2V5OiAiXHUyNkEwXHVGRTBGIFBsZWFzZSBzZXQgdGFicyIsIGFjdGlvbjogKCkgPT4gY29uc29sZS53YXJuKCJObyB0YWJzIGNvbmZpZ3VyZWQgZm9yIG1haW5jb250ZW50IikgfQogICAgXSk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHNlbGVjdGVkVGFiKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3NlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfc2hvd1RhYnNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1RhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3Nob3dUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Mih0aGlzLCBfdGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0YWJzQXV0b0hpZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YWJzQXV0b0hpZGVUaHJlc2hvbGRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0YWJzQXV0b0hpZGVUaHJlc2hvbGQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3RhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogYXV0byAxZnI7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxNjE2MTYiKX07CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnRvcGJhciB7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDFmcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtcm93cyAwLjNzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50b3BiYXIgPiAqIHsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIDpob3N0KFtub3RhYnNdKSAudG9wYmFyIHsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IDBmcjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b3BiYXIiPgogICAgICAgICAgPGRlZXMtYXBwdWktdGFicwogICAgICAgICAgICAudGFicz0ke3RoaXMudGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5zZWxlY3RlZFRhYn0KICAgICAgICAgICAgLnNob3dUYWJJbmRpY2F0b3I9JHt0cnVlfQogICAgICAgICAgICAudGFiU3R5bGU9JHsiaG9yaXpvbnRhbCJ9CiAgICAgICAgICAgIC5hdXRvSGlkZT0ke3RoaXMudGFic0F1dG9IaWRlfQogICAgICAgICAgICAuYXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLnRhYnNBdXRvSGlkZVRocmVzaG9sZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZVRhYlNlbGVjdChlMTEpfQogICAgICAgICAgICBAdGFiLWNsb3NlPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVUYWJDbG9zZShlMTEpfQogICAgICAgICAgPjwvZGVlcy1hcHB1aS10YWJzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQtYXJlYSI+CiAgICAgICAgICA8c2xvdD48L3Nsb3Q+CiAgICAgICAgICA8c2xvdCBuYW1lPSJjb250ZW50Ij48L3Nsb3Q+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGhhbmRsZVRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5zZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVRhYkNsb3NlKGUxMSkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ0YWItY2xvc2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1RhYnMiKSkgewogICAgICAgIGlmICh0aGlzLnNob3dUYWJzKSB7CiAgICAgICAgICB0aGlzLnJlbW92ZUF0dHJpYnV0ZSgibm90YWJzIik7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJub3RhYnMiLCAiIik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGF3YWl0IHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoIXRoaXMuc2hvd1RhYnMpIHsKICAgICAgICB0aGlzLnNldEF0dHJpYnV0ZSgibm90YWJzIiwgIiIpOwogICAgICB9CiAgICAgIGNvbnN0IHRhYnNDb21wb25lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS10YWJzIik7CiAgICAgIGlmICh0YWJzQ29tcG9uZW50KSB7CiAgICAgICAgYXdhaXQgdGFic0NvbXBvbmVudC51cGRhdGVDb21wbGV0ZTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDIodGhpcywgX3RhYnNBdXRvSGlkZVRocmVzaG9sZF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQXBwdWlNYWluY29udGVudDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWFwcHVpL2RlZXMtYXBwdWkvZGVlcy1hcHB1aS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNBcHB1aSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYXBwdWkiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyQnJlYWRjcnVtYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyVXNlcl9kZWNvcmF0b3JzOwogIGxldCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnM7CiAgbGV0IF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVMb2dvSWNvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51TG9nb1RleHRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VGFic19kZWNvcmF0b3JzOwogIGxldCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnM7CiAgbGV0IF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnM7CiAgbGV0IF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzOwogIGxldCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eUxvZ0NvdW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbmNvbnRlbnRUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF9tYWluY29udGVudFRhYnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFRhYnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZGVjb3JhdG9yczsKICBsZXQgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudFNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hcHBiYXJfZGVjb3JhdG9yczsKICBsZXQgX2FwcGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FwcGJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZGVjb3JhdG9yczsKICBsZXQgX21haW5tZW51X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9yczsKICBsZXQgX3NlY29uZGFyeW1lbnVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZpdHlsb2dFbGVtZW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2JvdHRvbWJhckVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0FwcHVpMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2FwcGJhck1lbnVJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfYXBwYmFyQnJlYWRjcnVtYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FwcGJhclVzZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hcHBiYXJTaG93U2VhcmNoX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21haW5tZW51TG9nb0ljb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYWlubWVudUxvZ29UZXh0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWFpbm1lbnVHcm91cHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX21haW5tZW51Qm90dG9tVGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9tYWlubWVudVNlbGVjdGVkVGFiX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51R3JvdXBzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfbWFpbm1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2Vjb25kYXJ5bWVudVZpc2libGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9hY3Rpdml0eUxvZ1Zpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50VGFic19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2FwcGJhcl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWFpbm1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3NlY29uZGFyeW1lbnVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21haW5jb250ZW50X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhckVsZW1lbnRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2JvdHRvbWJhclZpc2libGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJNZW51SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJNZW51SXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyTWVudUl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyTWVudUl0ZW1zX2luaXRpYWxpemVycywgX2FwcGJhck1lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJCcmVhZGNydW1ic19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJCcmVhZGNydW1icyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyQnJlYWRjcnVtYnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhckJyZWFkY3J1bWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJzX2luaXRpYWxpemVycywgX2FwcGJhckJyZWFkY3J1bWJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJTaG93V2luZG93Q29udHJvbHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93V2luZG93Q29udHJvbHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2luaXRpYWxpemVycywgX2FwcGJhclNob3dXaW5kb3dDb250cm9sc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hcHBiYXJVc2VyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhclVzZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFwcGJhclVzZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXBwYmFyVXNlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyVXNlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hcHBiYXJVc2VyX2luaXRpYWxpemVycywgX2FwcGJhclVzZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhcHBiYXJQcm9maWxlTWVudUl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFwcGJhclByb2ZpbGVNZW51SXRlbXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIF9hcHBiYXJQcm9maWxlTWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FwcGJhclNob3dTZWFyY2hfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXBwYmFyU2hvd1NlYXJjaCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyU2hvd1NlYXJjaCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hcHBiYXJTaG93U2VhcmNoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hcHBiYXJTaG93U2VhcmNoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhclNob3dTZWFyY2hfaW5pdGlhbGl6ZXJzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUxvZ29JY29uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51TG9nb0ljb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51TG9nb0ljb24iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVMb2dvSWNvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVMb2dvSWNvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudUxvZ29JY29uX2luaXRpYWxpemVycywgX21haW5tZW51TG9nb0ljb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVMb2dvVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUxvZ29UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUxvZ29UZXh0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51TG9nb1RleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51TG9nb1RleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVMb2dvVGV4dF9pbml0aWFsaXplcnMsIF9tYWlubWVudUxvZ29UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5tZW51R3JvdXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudUdyb3VwcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWlubWVudUdyb3Vwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVHcm91cHNfaW5pdGlhbGl6ZXJzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVCb3R0b21UYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51Qm90dG9tVGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVCb3R0b21UYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51Qm90dG9tVGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVCb3R0b21UYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Qm90dG9tVGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudUJvdHRvbVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVUYWJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5tZW51VGFicyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51VGFicywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbm1lbnVUYWJzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51VGFic19pbml0aWFsaXplcnMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudVNlbGVjdGVkVGFiIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVNlbGVjdGVkVGFiIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVIZWFkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnVIZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51SGVhZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51SGVhZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudUhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51R3JvdXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWNvbmRhcnltZW51R3JvdXBzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNlY29uZGFyeW1lbnVHcm91cHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19pbml0aWFsaXplcnMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudUNvbGxhcHNlZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYWlubWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbm1lbnVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVDb2xsYXBzZWQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1haW5tZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5tZW51Q29sbGFwc2VkX2luaXRpYWxpemVycywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudUNvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWNvbmRhcnltZW51Q29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWlubWVudVZpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnVWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWlubWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbm1lbnVWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudVZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbm1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51VmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWNvbmRhcnltZW51VmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2Vjb25kYXJ5bWVudVZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudVZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX21haW5jb250ZW50VGFic1Zpc2libGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFpbmNvbnRlbnRUYWJzVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21haW5jb250ZW50VGFic1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9jb250ZW50VGFic0F1dG9IaWRlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbnRlbnRUYWJzQXV0b0hpZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbnRlbnRUYWJzQXV0b0hpZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29udGVudFRhYnNBdXRvSGlkZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29udGVudFRhYnNBdXRvSGlkZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb250ZW50VGFic0F1dG9IaWRlX2luaXRpYWxpemVycywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9pbml0aWFsaXplcnMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3Rpdml0eUxvZ1Zpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2aXR5TG9nVmlzaWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ1Zpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2aXR5TG9nVmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2FjdGl2aXR5TG9nQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlMb2dDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZpdHlMb2dDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hY3Rpdml0eUxvZ0NvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eUxvZ0NvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2aXR5TG9nQ291bnRfaW5pdGlhbGl6ZXJzLCBfYWN0aXZpdHlMb2dDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFRhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnRUYWJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYWluY29udGVudFRhYnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudFRhYnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgX21haW5jb250ZW50VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50U2VsZWN0ZWRUYWIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudFNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYXBwYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFwcGJhciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYXBwYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFwcGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXBwYmFyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FwcGJhcl9pbml0aWFsaXplcnMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbm1lbnVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbm1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5tZW51IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5tZW51LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWlubWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWlubWVudV9pbml0aWFsaXplcnMsIF9tYWlubWVudV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9zZWNvbmRhcnltZW51X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlY29uZGFyeW1lbnUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlY29uZGFyeW1lbnUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2Vjb25kYXJ5bWVudSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2Vjb25kYXJ5bWVudSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgX3NlY29uZGFyeW1lbnVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfbWFpbmNvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFpbmNvbnRlbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1haW5jb250ZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1haW5jb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYWluY29udGVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYWluY29udGVudF9pbml0aWFsaXplcnMsIF9tYWluY29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWN0aXZpdHlsb2dFbGVtZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJhY3Rpdml0eWxvZ0VsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZpdHlsb2dFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYWN0aXZpdHlsb2dFbGVtZW50X2luaXRpYWxpemVycywgX2FjdGl2aXR5bG9nRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQyKHRoaXMsIG51bGwsIF9ib3R0b21iYXJFbGVtZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJvdHRvbWJhckVsZW1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJvdHRvbWJhckVsZW1lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYm90dG9tYmFyRWxlbWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm90dG9tYmFyRWxlbWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Mih0aGlzLCBudWxsLCBfYm90dG9tYmFyVmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJib3R0b21iYXJWaXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJib3R0b21iYXJWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJvdHRvbWJhclZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJvdHRvbWJhclZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfYm90dG9tYmFyVmlzaWJsZV9pbml0aWFsaXplcnMsIF9ib3R0b21iYXJWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDIodGhpcywgbnVsbCwgX2N1cnJlbnRWaWV3X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWaWV3Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50Vmlldywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZpZXcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZpZXdfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFZpZXdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0MihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzI3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJBcHAgVUkiOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSRUFDVElWRSBPQlNFUlZBQkxFUyAoUnhKUyBTdWJqZWN0cykKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqIE9ic2VydmFibGUgc3RyZWFtIG9mIHZpZXcgbGlmZWN5Y2xlIGV2ZW50cyAqLwogICAgdmlld0xpZmVjeWNsZSQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAvKiogT2JzZXJ2YWJsZSBzdHJlYW0gb2YgdmlldyBjaGFuZ2UgZXZlbnRzICovCiAgICB2aWV3Q2hhbmdlZCQgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cngucnhqcy5TdWJqZWN0KCk7CiAgICAjYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIElOVEVSTkFMIFBST1BFUlRJRVMgKFByb3BlcnRpZXMgZm9yIGNoaWxkIGNvbXBvbmVudHMpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIGFwcGJhcgogICAgZ2V0IGFwcGJhck1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhck1lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhck1lbnVJdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyQnJlYWRjcnVtYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgYXBwYmFyQnJlYWRjcnVtYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhckJyZWFkY3J1bWJzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJCcmVhZGNydW1ic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJCcmVhZGNydW1ic19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfaW5pdGlhbGl6ZXJzLCAiID4gIikpOwogICAgZ2V0IGFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclNob3dXaW5kb3dDb250cm9sc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93V2luZG93Q29udHJvbHNfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJTaG93V2luZG93Q29udHJvbHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyVXNlcl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IGFwcGJhclVzZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhcHBiYXJVc2VyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXBwYmFyVXNlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyVXNlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJVc2VyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyUHJvZmlsZU1lbnVJdGVtc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgYXBwYmFyUHJvZmlsZU1lbnVJdGVtcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhclByb2ZpbGVNZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhcHBiYXJQcm9maWxlTWVudUl0ZW1zKHZhbHVlMikgewogICAgICB0aGlzLiNhcHBiYXJQcm9maWxlTWVudUl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2FwcGJhclByb2ZpbGVNZW51SXRlbXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJTaG93U2VhcmNoX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBhcHBiYXJTaG93U2VhcmNoKCkgewogICAgICByZXR1cm4gdGhpcy4jYXBwYmFyU2hvd1NlYXJjaF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhclNob3dTZWFyY2godmFsdWUyKSB7CiAgICAgIHRoaXMuI2FwcGJhclNob3dTZWFyY2hfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29JY29uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYXBwYmFyU2hvd1NlYXJjaF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb0ljb25faW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3IgbWFpbm1lbnUKICAgIGdldCBtYWlubWVudUxvZ29JY29uKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVMb2dvSWNvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51TG9nb0ljb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51TG9nb0ljb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvSWNvbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51TG9nb1RleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IG1haW5tZW51TG9nb1RleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudUxvZ29UZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVMb2dvVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVMb2dvVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVMb2dvVGV4dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudUdyb3VwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVHcm91cHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUJvdHRvbVRhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IG1haW5tZW51Qm90dG9tVGFicygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Qm90dG9tVGFic19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1haW5tZW51Qm90dG9tVGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVCb3R0b21UYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVUYWJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVCb3R0b21UYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtYWlubWVudVRhYnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWlubWVudVRhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVRhYnModmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51VGFic19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVRhYnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgbWFpbm1lbnVTZWxlY3RlZFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51U2VsZWN0ZWRUYWJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudVNlbGVjdGVkVGFiKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudVNlbGVjdGVkVGFiX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgLy8gUHJvcGVydGllcyBmb3Igc2Vjb25kYXJ5bWVudQogICAgZ2V0IHNlY29uZGFyeW1lbnVIZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51SGVhZGluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudUhlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51R3JvdXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUhlYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51R3JvdXBzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBzZWNvbmRhcnltZW51R3JvdXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudUdyb3Vwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVHcm91cHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVHcm91cHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUdyb3Vwc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBzZWNvbmRhcnltZW51U2VsZWN0ZWRJdGVtKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVNlbGVjdGVkSXRlbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWlubWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW1fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICAvLyBDb2xsYXBzZSBzdGF0ZXMKICAgIGdldCBtYWlubWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5tZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51Q29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51Q29sbGFwc2VkKHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51Q29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIC8vIFZpc2liaWxpdHkgc3RhdGVzCiAgICBnZXQgbWFpbm1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbm1lbnVWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNtYWlubWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51VmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5tZW51VmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX3NlY29uZGFyeW1lbnVWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNlY29uZGFyeW1lbnVWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51VmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2Vjb25kYXJ5bWVudVZpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfc2Vjb25kYXJ5bWVudVZpc2libGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IG1haW5jb250ZW50VGFic1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFRhYnNWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRUYWJzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWluY29udGVudFRhYnNWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfY29udGVudFRhYnNBdXRvSGlkZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29udGVudFRhYnNBdXRvSGlkZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbnRlbnRUYWJzQXV0b0hpZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb250ZW50VGFic0F1dG9IaWRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29udGVudFRhYnNBdXRvSGlkZVRocmVzaG9sZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2aXR5TG9nVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2NvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ1Zpc2libGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgLy8gQWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgYW5kIGNvdW50CiAgICBnZXQgYWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWN0aXZpdHlMb2dWaXNpYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNhY3Rpdml0eUxvZ1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3Rpdml0eUxvZ0NvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dWaXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYWN0aXZpdHlMb2dDb3VudF9pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBhY3Rpdml0eUxvZ0NvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZpdHlMb2dDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2aXR5TG9nQ291bnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5TG9nQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eUxvZ0NvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2luaXRpYWxpemVycywgW10pKTsKICAgIC8vIFByb3BlcnRpZXMgZm9yIG1haW5jb250ZW50CiAgICBnZXQgbWFpbmNvbnRlbnRUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbmNvbnRlbnRUYWJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRUYWJzKHZhbHVlMikgewogICAgICB0aGlzLiNtYWluY29udGVudFRhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5jb250ZW50U2VsZWN0ZWRUYWIoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYWluY29udGVudFNlbGVjdGVkVGFiX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnRTZWxlY3RlZFRhYih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbmNvbnRlbnRTZWxlY3RlZFRhYl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX21haW5jb250ZW50U2VsZWN0ZWRUYWJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIC8vIFJlZmVyZW5jZXMgdG8gY2hpbGQgY29tcG9uZW50cwogICAgZ2V0IGFwcGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FwcGJhcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFwcGJhcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXBwYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hcHBiYXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9tYWlubWVudV9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IG1haW5tZW51KCkgewogICAgICByZXR1cm4gdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYWlubWVudSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFpbm1lbnVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbm1lbnVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2Vjb25kYXJ5bWVudSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlY29uZGFyeW1lbnVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWNvbmRhcnltZW51KHZhbHVlMikgewogICAgICB0aGlzLiNzZWNvbmRhcnltZW51X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFpbmNvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9zZWNvbmRhcnltZW51X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBtYWluY29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWFpbmNvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21haW5jb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWN0aXZpdHlsb2dFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfbWFpbmNvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBhY3Rpdml0eWxvZ0VsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3Rpdml0eWxvZ0VsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3Rpdml0eWxvZ0VsZW1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2aXR5bG9nRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9hY3Rpdml0eWxvZ0VsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJFbGVtZW50X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgYm90dG9tYmFyRWxlbWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2JvdHRvbWJhckVsZW1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBib3R0b21iYXJFbGVtZW50KHZhbHVlMikgewogICAgICB0aGlzLiNib3R0b21iYXJFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2JvdHRvbWJhckVsZW1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQzKHRoaXMsIF9ib3R0b21iYXJWaXNpYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGJvdHRvbWJhclZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNib3R0b21iYXJWaXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYm90dG9tYmFyVmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm90dG9tYmFyVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Myh0aGlzLCBfYm90dG9tYmFyVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICAvLyBDdXJyZW50IHZpZXcgc3RhdGUKICAgIGdldCBjdXJyZW50VmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFZpZXcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBJbnRlcm5hbCBzZXJ2aWNlcwogICAgdmlld1JlZ2lzdHJ5ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDModGhpcywgX2N1cnJlbnRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbmV3IFZpZXdSZWdpc3RyeSgpKTsKICAgIHJvdXRlckNsZWFudXAgPSBudWxsOwogICAgc2VhcmNoQ2FsbGJhY2sgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjBmMGYwIiwgIiMxYTFhMWEiKX07CiAgICAgIH0KICAgICAgLm1haW5ncmlkIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA0MHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCAtIDI0cHgpOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgLyogZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zIHNldCBkeW5hbWljYWxseSBpbiB0ZW1wbGF0ZSAqLwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogMWZyOwogICAgICAgIHRyYW5zaXRpb246IGdyaWQtdGVtcGxhdGUtY29sdW1ucyAwLjNzIGVhc2UsIGhlaWdodCAwLjNzIGVhc2U7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgOmhvc3QoW2JvdHRvbWJhci1oaWRkZW5dKSAubWFpbmdyaWQgewogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gNDBweCk7CiAgICAgIH0KCiAgICAgIGRlZXMtYXBwdWktYm90dG9tYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogNDsKICAgICAgfQoKICAgICAgLyogWi1pbmRleCBsYXllcmluZyBmb3IgcHJvcGVyIHN0YWNraW5nICovCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktbWFpbm1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAzOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLXNlY29uZGFyeW1lbnUgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB6LWluZGV4OiAyOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLW1haW5jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4zcyBlYXNlLCB0cmFuc2Zvcm0gMC4zcyBlYXNlOwogICAgICB9CgogICAgICAubWFpbmdyaWQgPiBkZWVzLWFwcHVpLWFjdGl2aXR5bG9nLmhpZGRlbiB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluZ3JpZCA+IGRlZXMtYXBwdWktYWN0aXZpdHlsb2cudmlzaWJsZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgIH0KCiAgICAgIC8qIFZpZXcgY29udGFpbmVyIGZvciBkeW5hbWljYWxseSBsb2FkZWQgdmlld3MgKi8KICAgICAgLnZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQoKICAgICAgLnZpZXctY29udGFpbmVyOmVtcHR5IHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkZWVzLWFwcHVpLWFwcGJhcgogICAgICAgIC5tZW51SXRlbXM9JHt0aGlzLmFwcGJhck1lbnVJdGVtc30KICAgICAgICAuYnJlYWRjcnVtYnM9JHt0aGlzLmFwcGJhckJyZWFkY3J1bWJzfQogICAgICAgIC5icmVhZGNydW1iU2VwYXJhdG9yPSR7dGhpcy5hcHBiYXJCcmVhZGNydW1iU2VwYXJhdG9yfQogICAgICAgIC5zaG93V2luZG93Q29udHJvbHM9JHt0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9sc30KICAgICAgICAudXNlcj0ke3RoaXMuYXBwYmFyVXNlcn0KICAgICAgICAucHJvZmlsZU1lbnVJdGVtcz0ke3RoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtc30KICAgICAgICAuc2hvd1NlYXJjaD0ke3RoaXMuYXBwYmFyU2hvd1NlYXJjaH0KICAgICAgICAuc2hvd0FjdGl2aXR5TG9nVG9nZ2xlPSR7dHJ1ZX0KICAgICAgICAuYWN0aXZpdHlMb2dDb3VudD0ke3RoaXMuYWN0aXZpdHlMb2dDb3VudH0KICAgICAgICAuYWN0aXZpdHlMb2dBY3RpdmU9JHt0aGlzLmFjdGl2aXR5TG9nVmlzaWJsZX0KICAgICAgICBAbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKX0KICAgICAgICBAYnJlYWRjcnVtYi1uYXZpZ2F0ZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQXBwYmFyQnJlYWRjcnVtYk5hdmlnYXRlKGUxMSl9CiAgICAgICAgQHNlYXJjaC1jbGljaz0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyU2VhcmNoQ2xpY2soKX0KICAgICAgICBAc2VhcmNoLXF1ZXJ5PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVBcHBiYXJTZWFyY2hRdWVyeShlMTEpfQogICAgICAgIEB1c2VyLW1lbnUtb3Blbj0keygpID0+IHRoaXMuaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCl9CiAgICAgICAgQHByb2ZpbGUtbWVudS1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUFwcGJhclByb2ZpbGVNZW51U2VsZWN0KGUxMSl9CiAgICAgICAgQGFjdGl2aXR5LXRvZ2dsZT0keygpID0+IHRoaXMudG9nZ2xlQWN0aXZpdHlMb2coKX0KICAgICAgPjwvZGVlcy1hcHB1aS1hcHBiYXI+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5ncmlkIiBzdHlsZT0iZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiBhdXRvIGF1dG8gMWZyICR7dGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPyAiMjgwcHgiIDogIjBweCJ9OyI+CiAgICAgICAgJHt0aGlzLm1haW5tZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktbWFpbm1lbnUKICAgICAgICAgICAgLmxvZ29JY29uPSR7dGhpcy5tYWlubWVudUxvZ29JY29ufQogICAgICAgICAgICAubG9nb1RleHQ9JHt0aGlzLm1haW5tZW51TG9nb1RleHR9CiAgICAgICAgICAgIC5tZW51R3JvdXBzPSR7dGhpcy5tYWlubWVudUdyb3Vwc30KICAgICAgICAgICAgLmJvdHRvbVRhYnM9JHt0aGlzLm1haW5tZW51Qm90dG9tVGFic30KICAgICAgICAgICAgLnRhYnM9JHt0aGlzLm1haW5tZW51VGFic30KICAgICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWlubWVudVNlbGVjdGVkVGFifQogICAgICAgICAgICAuY29sbGFwc2VkPSR7dGhpcy5tYWlubWVudUNvbGxhcHNlZH0KICAgICAgICAgICAgQHRhYi1zZWxlY3Q9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51VGFiU2VsZWN0KGUxMSl9CiAgICAgICAgICAgIEBjb2xsYXBzZS1jaGFuZ2U9JHsoZTExKSA9PiB0aGlzLmhhbmRsZU1haW5tZW51Q29sbGFwc2VDaGFuZ2UoZTExKX0KICAgICAgICAgID48L2RlZXMtYXBwdWktbWFpbm1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgICR7dGhpcy5zZWNvbmRhcnltZW51VmlzaWJsZSA/IGIyYAogICAgICAgICAgPGRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudQogICAgICAgICAgICAuaGVhZGluZz0ke3RoaXMuc2Vjb25kYXJ5bWVudUhlYWRpbmd9CiAgICAgICAgICAgIC5ncm91cHM9JHt0aGlzLnNlY29uZGFyeW1lbnVHcm91cHN9CiAgICAgICAgICAgIC5zZWxlY3RlZEl0ZW09JHt0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW19CiAgICAgICAgICAgIC5jb2xsYXBzZWQ9JHt0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWR9CiAgICAgICAgICAgIEBpdGVtLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUl0ZW1TZWxlY3QoZTExKX0KICAgICAgICAgICAgQGNvbGxhcHNlLWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSl9CiAgICAgICAgICA+PC9kZWVzLWFwcHVpLXNlY29uZGFyeW1lbnU+CiAgICAgICAgYCA6ICIifQogICAgICAgIDxkZWVzLWFwcHVpLW1haW5jb250ZW50CiAgICAgICAgICAudGFicz0ke3RoaXMubWFpbmNvbnRlbnRUYWJzfQogICAgICAgICAgLnNlbGVjdGVkVGFiPSR7dGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFifQogICAgICAgICAgLnNob3dUYWJzPSR7dGhpcy5tYWluY29udGVudFRhYnNWaXNpYmxlfQogICAgICAgICAgLnRhYnNBdXRvSGlkZT0ke3RoaXMuY29udGVudFRhYnNBdXRvSGlkZX0KICAgICAgICAgIC50YWJzQXV0b0hpZGVUaHJlc2hvbGQ9JHt0aGlzLmNvbnRlbnRUYWJzQXV0b0hpZGVUaHJlc2hvbGR9CiAgICAgICAgICBAdGFiLXNlbGVjdD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpfQogICAgICAgICAgQHRhYi1jbG9zZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudFRhYkNsb3NlKGUxMSl9CiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0idmlldy1jb250YWluZXIiPjwvZGl2PgogICAgICAgICAgPHNsb3QgbmFtZT0ibWFpbmNvbnRlbnQiPjwvc2xvdD4KICAgICAgICA8L2RlZXMtYXBwdWktbWFpbmNvbnRlbnQ+CiAgICAgICAgPGRlZXMtYXBwdWktYWN0aXZpdHlsb2cKICAgICAgICAgIGNsYXNzPSIke3RoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID8gInZpc2libGUiIDogImhpZGRlbiJ9IgogICAgICAgID48L2RlZXMtYXBwdWktYWN0aXZpdHlsb2c+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuYm90dG9tYmFyVmlzaWJsZSA/IGIyYAogICAgICAgIDxkZWVzLWFwcHVpLWJvdHRvbWJhcj48L2RlZXMtYXBwdWktYm90dG9tYmFyPgogICAgICBgIDogIiJ9CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmFwcGJhciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJkZWVzLWFwcHVpLWFwcGJhciIpOwogICAgICB0aGlzLm1haW5tZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbm1lbnUiKTsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktc2Vjb25kYXJ5bWVudSIpOwogICAgICB0aGlzLm1haW5jb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtYXBwdWktbWFpbmNvbnRlbnQiKTsKICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1hY3Rpdml0eWxvZyIpOwogICAgICB0aGlzLmJvdHRvbWJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy1hcHB1aS1ib3R0b21iYXIiKTsKICAgICAgaWYgKHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50KSB7CiAgICAgICAgdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZW50cmllcyQuc3Vic2NyaWJlKChlbnRyaWVzKSA9PiB7CiAgICAgICAgICB0aGlzLmFjdGl2aXR5TG9nQ291bnQgPSBlbnRyaWVzLmxlbmd0aDsKICAgICAgICB9KTsKICAgICAgfQogICAgICB0aGlzLnZpZXdSZWdpc3RyeS5zZXRBcHB1aVJlZih0aGlzKTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5yb3V0ZXJDbGVhbnVwKSB7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwKCk7CiAgICAgICAgdGhpcy5yb3V0ZXJDbGVhbnVwID0gbnVsbDsKICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLmNvbXBsZXRlKCk7CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLmNvbXBsZXRlKCk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEFQUCBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGFwcCBiYXIgbWVudSBpdGVtcyAoRmlsZSwgRWRpdCwgVmlldywgZXRjLikKICAgICAqLwogICAgc2V0QXBwQmFyTWVudXMobWVudXMpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSBbLi4ubWVudXNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzaW5nbGUgYXBwIGJhciBtZW51IGJ5IG5hbWUKICAgICAqLwogICAgdXBkYXRlQXBwQmFyTWVudShuYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5hcHBiYXJNZW51SXRlbXMgPSB0aGlzLmFwcGJhck1lbnVJdGVtcy5tYXAoKG1lbnUpID0+IHsKICAgICAgICBpZiAoIm5hbWUiIGluIG1lbnUgJiYgbWVudS5uYW1lID09PSBuYW1lKSB7CiAgICAgICAgICByZXR1cm4geyAuLi5tZW51LCAuLi51cGRhdGUgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG1lbnU7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIGJyZWFkY3J1bWJzIChzdHJpbmcgb3IgYXJyYXkpCiAgICAgKi8KICAgIHNldEJyZWFkY3J1bWJzKGJyZWFkY3J1bWJzKSB7CiAgICAgIGlmIChBcnJheS5pc0FycmF5KGJyZWFkY3J1bWJzKSkgewogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBicmVhZGNydW1icy5qb2luKHRoaXMuYXBwYmFyQnJlYWRjcnVtYlNlcGFyYXRvcik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hcHBiYXJCcmVhZGNydW1icyA9IGJyZWFkY3J1bWJzOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCB0aGUgY3VycmVudCB1c2VyCiAgICAgKi8KICAgIHNldFVzZXIodXNlcikgewogICAgICB0aGlzLmFwcGJhclVzZXIgPSB1c2VyOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHByb2ZpbGUgZHJvcGRvd24gbWVudSBpdGVtcwogICAgICovCiAgICBzZXRQcm9maWxlTWVudUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IFsuLi5pdGVtc107CiAgICB9CiAgICAvKioKICAgICAqIFNldCBzZWFyY2ggYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2VhcmNoVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYXBwYmFyU2hvd1NlYXJjaCA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCB3aW5kb3cgY29udHJvbHMgdmlzaWJpbGl0eQogICAgICovCiAgICBzZXRXaW5kb3dDb250cm9sc1Zpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLmFwcGJhclNob3dXaW5kb3dDb250cm9scyA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFJlZ2lzdGVyIGEgc2VhcmNoIGNhbGxiYWNrCiAgICAgKi8KICAgIG9uU2VhcmNoKGNhbGxiYWNrKSB7CiAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjYWxsYmFjazsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogTUFJTiBNRU5VCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogU2V0IHRoZSBlbnRpcmUgbWFpbiBtZW51IGNvbmZpZ3VyYXRpb24KICAgICAqLwogICAgc2V0TWFpbk1lbnUoY29uZmlnMykgewogICAgICBpZiAoY29uZmlnMy5sb2dvSWNvbiAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5sb2dvSWNvbjsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5sb2dvVGV4dCAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5sb2dvVGV4dDsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ncm91cHMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJvdHRvbVRhYnMgIT09IHZvaWQgMCkgewogICAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gWy4uLmNvbmZpZzMuYm90dG9tVGFic107CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGEgc3BlY2lmaWMgbWVudSBncm91cCBieSBuYW1lCiAgICAgKi8KICAgIHVwZGF0ZU1haW5NZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lID8geyAuLi5ncm91cCwgLi4udXBkYXRlIH0gOiBncm91cCk7CiAgICB9CiAgICAvKioKICAgICAqIEFkZCBhIG1lbnUgaXRlbSB0byBhIHNwZWNpZmljIGdyb3VwCiAgICAgKi8KICAgIGFkZE1haW5NZW51SXRlbShncm91cE5hbWUsIHRhYjIpIHsKICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMubWFpbm1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zIHx8IFtdLCB0YWIyXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgbWVudSBpdGVtIGZyb20gYSBncm91cCBieSBrZXkKICAgICAqLwogICAgcmVtb3ZlTWFpbk1lbnVJdGVtKGdyb3VwTmFtZSwgdGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbm1lbnVHcm91cHMgPSB0aGlzLm1haW5tZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IHsKICAgICAgICBpZiAoZ3JvdXAubmFtZSA9PT0gZ3JvdXBOYW1lKSB7CiAgICAgICAgICByZXR1cm4gewogICAgICAgICAgICAuLi5ncm91cCwKICAgICAgICAgICAgaXRlbXM6IChncm91cC5pdGVtcyB8fCBbXSkuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gZ3JvdXA7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgdGhlIHNlbGVjdGVkIG1haW4gbWVudSBpdGVtIGJ5IGtleQogICAgICovCiAgICBzZXRNYWluTWVudVNlbGVjdGlvbih0YWJLZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLm1haW5tZW51R3JvdXBzKSB7CiAgICAgICAgY29uc3QgdGFiMiA9IGdyb3VwLml0ZW1zPy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICAgIGlmICh0YWIyKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBib3R0b21UYWIgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5maW5kKCh0OSkgPT4gdDkua2V5ID09PSB0YWJLZXkpOwogICAgICBpZiAoYm90dG9tVGFiKSB7CiAgICAgICAgdGhpcy5tYWlubWVudVNlbGVjdGVkVGFiID0gYm90dG9tVGFiOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNldCBtYWluIG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldE1haW5NZW51Q29sbGFwc2VkKGNvbGxhcHNlZCkgewogICAgICB0aGlzLm1haW5tZW51Q29sbGFwc2VkID0gY29sbGFwc2VkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgbWFpbiBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0TWFpbk1lbnVWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5tYWlubWVudVZpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgc2Vjb25kYXJ5IG1lbnUgY29sbGFwc2VkIHN0YXRlCiAgICAgKi8KICAgIHNldFNlY29uZGFyeU1lbnVDb2xsYXBzZWQoY29sbGFwc2VkKSB7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUNvbGxhcHNlZCA9IGNvbGxhcHNlZDsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHNlY29uZGFyeSBtZW51IHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0U2Vjb25kYXJ5TWVudVZpc2libGUodmlzaWJsZSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVWaXNpYmxlID0gdmlzaWJsZTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGNvbnRlbnQgdGFicyB2aXNpYmlsaXR5CiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzVmlzaWJsZSA9IHZpc2libGU7CiAgICB9CiAgICAvKioKICAgICAqIFNldCBjb250ZW50IHRhYnMgYXV0by1oaWRlIGJlaGF2aW9yCiAgICAgKiBAcGFyYW0gZW5hYmxlZCAtIEVuYWJsZSBhdXRvLWhpZGUgZmVhdHVyZQogICAgICogQHBhcmFtIHRocmVzaG9sZCAtIEhpZGUgd2hlbiB0YWJzLmxlbmd0aCA8PSB0aHJlc2hvbGQgKGRlZmF1bHQgMCA9IGhpZGUgd2hlbiBubyB0YWJzKQogICAgICovCiAgICBzZXRDb250ZW50VGFic0F1dG9IaWRlKGVuYWJsZWQsIHRocmVzaG9sZCA9IDApIHsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlID0gZW5hYmxlZDsKICAgICAgdGhpcy5jb250ZW50VGFic0F1dG9IaWRlVGhyZXNob2xkID0gdGhyZXNob2xkOwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYSBiYWRnZSBvbiBhIG1haW4gbWVudSBpdGVtCiAgICAgKi8KICAgIHNldE1haW5NZW51QmFkZ2UodGFiS2V5LCBiYWRnZSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gdGFiMi5rZXkgPT09IHRhYktleSA/IHsgLi4udGFiMiwgYmFkZ2UgfSA6IHRhYjIpCiAgICAgIH0pKTsKICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSB0aGlzLm1haW5tZW51Qm90dG9tVGFicy5tYXAoKHRhYjIpID0+IHRhYjIua2V5ID09PSB0YWJLZXkgPyB7IC4uLnRhYjIsIGJhZGdlIH0gOiB0YWIyKTsKICAgIH0KICAgIC8qKgogICAgICogQ2xlYXIgYSBiYWRnZSBmcm9tIGEgbWFpbiBtZW51IGl0ZW0KICAgICAqLwogICAgY2xlYXJNYWluTWVudUJhZGdlKHRhYktleSkgewogICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gdGhpcy5tYWlubWVudUdyb3Vwcy5tYXAoKGdyb3VwKSA9PiAoewogICAgICAgIC4uLmdyb3VwLAogICAgICAgIGl0ZW1zOiAoZ3JvdXAuaXRlbXMgfHwgW10pLm1hcCgodGFiMikgPT4gewogICAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgICAgY29uc3QgeyBiYWRnZSwgLi4ucmVzdCB9ID0gdGFiMjsKICAgICAgICAgICAgcmV0dXJuIHJlc3Q7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gdGFiMjsKICAgICAgICB9KQogICAgICB9KSk7CiAgICAgIHRoaXMubWFpbm1lbnVCb3R0b21UYWJzID0gdGhpcy5tYWlubWVudUJvdHRvbVRhYnMubWFwKCh0YWIyKSA9PiB7CiAgICAgICAgaWYgKHRhYjIua2V5ID09PSB0YWJLZXkpIHsKICAgICAgICAgIGNvbnN0IHsgYmFkZ2UsIC4uLnJlc3QgfSA9IHRhYjI7CiAgICAgICAgICByZXR1cm4gcmVzdDsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRhYjI7CiAgICAgIH0pOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBTRUNPTkRBUlkgTUVOVQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgc2Vjb25kYXJ5IG1lbnUgY29uZmlndXJhdGlvbgogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51KGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMuaGVhZGluZyAhPT0gdm9pZCAwKSB7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IGNvbmZpZzMuaGVhZGluZzsKICAgICAgfQogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSBbLi4uY29uZmlnMy5ncm91cHNdOwogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgYSBzcGVjaWZpYyBzZWNvbmRhcnkgbWVudSBncm91cAogICAgICovCiAgICB1cGRhdGVTZWNvbmRhcnlNZW51R3JvdXAoZ3JvdXBOYW1lLCB1cGRhdGUpIHsKICAgICAgdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzID0gdGhpcy5zZWNvbmRhcnltZW51R3JvdXBzLm1hcCgoZ3JvdXApID0+IGdyb3VwLm5hbWUgPT09IGdyb3VwTmFtZSA/IHsgLi4uZ3JvdXAsIC4uLnVwZGF0ZSB9IDogZ3JvdXApOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYW4gaXRlbSB0byBhIHNlY29uZGFyeSBtZW51IGdyb3VwCiAgICAgKi8KICAgIGFkZFNlY29uZGFyeU1lbnVJdGVtKGdyb3VwTmFtZSwgaXRlbSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMubWFwKChncm91cCkgPT4gewogICAgICAgIGlmIChncm91cC5uYW1lID09PSBncm91cE5hbWUpIHsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIC4uLmdyb3VwLAogICAgICAgICAgICBpdGVtczogWy4uLmdyb3VwLml0ZW1zLCBpdGVtXQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGdyb3VwOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IHRoZSBzZWxlY3RlZCBzZWNvbmRhcnkgbWVudSBpdGVtIGJ5IGtleSAoZm9yIHRhYiBpdGVtcyBvbmx5KQogICAgICovCiAgICBzZXRTZWNvbmRhcnlNZW51U2VsZWN0aW9uKGl0ZW1LZXkpIHsKICAgICAgZm9yIChjb25zdCBncm91cCBvZiB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMpIHsKICAgICAgICBjb25zdCBpdGVtID0gZ3JvdXAuaXRlbXMuZmluZCgoaTExKSA9PiAia2V5IiBpbiBpMTEgJiYgaTExLmtleSA9PT0gaXRlbUtleSk7CiAgICAgICAgaWYgKGl0ZW0gJiYgKCEoInR5cGUiIGluIGl0ZW0pIHx8IGl0ZW0udHlwZSA9PT0gInRhYiIgfHwgaXRlbS50eXBlID09PSB2b2lkIDApKSB7CiAgICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBpdGVtOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciB0aGUgc2Vjb25kYXJ5IG1lbnUKICAgICAqLwogICAgY2xlYXJTZWNvbmRhcnlNZW51KCkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVIZWFkaW5nID0gIiI7CiAgICAgIHRoaXMuc2Vjb25kYXJ5bWVudUdyb3VwcyA9IFtdOwogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSB2b2lkIDA7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IENPTlRFTlQgVEFCUwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCB0aGUgY29udGVudCB0YWJzCiAgICAgKi8KICAgIHNldENvbnRlbnRUYWJzKHRhYnMpIHsKICAgICAgdGhpcy5tYWluY29udGVudFRhYnMgPSBbLi4udGFic107CiAgICAgIGlmICh0YWJzLmxlbmd0aCA+IDAgJiYgIXRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYikgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRhYnNbMF07CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogQWRkIGEgY29udGVudCB0YWIKICAgICAqLwogICAgYWRkQ29udGVudFRhYih0YWIyKSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gWy4uLnRoaXMubWFpbmNvbnRlbnRUYWJzLCB0YWIyXTsKICAgIH0KICAgIC8qKgogICAgICogUmVtb3ZlIGEgY29udGVudCB0YWIgYnkga2V5CiAgICAgKi8KICAgIHJlbW92ZUNvbnRlbnRUYWIodGFiS2V5KSB7CiAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdGhpcy5tYWluY29udGVudFRhYnMuZmlsdGVyKCh0OSkgPT4gdDkua2V5ICE9PSB0YWJLZXkpOwogICAgICBpZiAodGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiPy5rZXkgPT09IHRhYktleSkgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYiA9IHRoaXMubWFpbmNvbnRlbnRUYWJzWzBdOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFNlbGVjdCBhIGNvbnRlbnQgdGFiIGJ5IGtleQogICAgICovCiAgICBzZWxlY3RDb250ZW50VGFiKHRhYktleSkgewogICAgICBjb25zdCB0YWIyID0gdGhpcy5tYWluY29udGVudFRhYnMuZmluZCgodDkpID0+IHQ5LmtleSA9PT0gdGFiS2V5KTsKICAgICAgaWYgKHRhYjIpIHsKICAgICAgICB0aGlzLm1haW5jb250ZW50U2VsZWN0ZWRUYWIgPSB0YWIyOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudGx5IHNlbGVjdGVkIGNvbnRlbnQgdGFiCiAgICAgKi8KICAgIGdldFNlbGVjdGVkQ29udGVudFRhYigpIHsKICAgICAgcmV0dXJuIHRoaXMubWFpbmNvbnRlbnRTZWxlY3RlZFRhYjsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gUFJPR1JBTU1BVElDIEFQSTogQUNUSVZJVFkgTE9HCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogR2V0IHRoZSBhY3Rpdml0eSBsb2cgQVBJCiAgICAgKi8KICAgIGdldCBhY3Rpdml0eUxvZygpIHsKICAgICAgaWYgKCF0aGlzLmFjdGl2aXR5bG9nRWxlbWVudCkgewogICAgICAgIHJldHVybiB7CiAgICAgICAgICBhZGQ6IChlbnRyeSkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQ/LmFkZChlbnRyeSkpOwogICAgICAgICAgfSwKICAgICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uYWRkTWFueShlbnRyaWVzKSk7CiAgICAgICAgICB9LAogICAgICAgICAgY2xlYXI6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5jbGVhcigpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBnZXRFbnRyaWVzOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudD8uZ2V0RW50cmllcygpIHx8IFtdLAogICAgICAgICAgZmlsdGVyOiAoY3JpdGVyaWEpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5maWx0ZXIoY3JpdGVyaWEpIHx8IFtdLAogICAgICAgICAgc2VhcmNoOiAocXVlcnkpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50Py5zZWFyY2gocXVlcnkpIHx8IFtdCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gewogICAgICAgIGFkZDogKGVudHJ5KSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGQoZW50cnkpLAogICAgICAgIGFkZE1hbnk6IChlbnRyaWVzKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5hZGRNYW55KGVudHJpZXMpLAogICAgICAgIGNsZWFyOiAoKSA9PiB0aGlzLmFjdGl2aXR5bG9nRWxlbWVudC5jbGVhcigpLAogICAgICAgIGdldEVudHJpZXM6ICgpID0+IHRoaXMuYWN0aXZpdHlsb2dFbGVtZW50LmdldEVudHJpZXMoKSwKICAgICAgICBmaWx0ZXI6IChjcml0ZXJpYSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuZmlsdGVyKGNyaXRlcmlhKSwKICAgICAgICBzZWFyY2g6IChxdWVyeSkgPT4gdGhpcy5hY3Rpdml0eWxvZ0VsZW1lbnQuc2VhcmNoKHF1ZXJ5KQogICAgICB9OwogICAgfQogICAgLyoqCiAgICAgKiBTZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0QWN0aXZpdHlMb2dWaXNpYmxlKHZpc2libGUpIHsKICAgICAgdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGUgPSB2aXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkKICAgICAqLwogICAgdG9nZ2xlQWN0aXZpdHlMb2coKSB7CiAgICAgIHRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlID0gIXRoaXMuYWN0aXZpdHlMb2dWaXNpYmxlOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYWN0aXZpdHkgbG9nIHZpc2liaWxpdHkgc3RhdGUKICAgICAqLwogICAgZ2V0QWN0aXZpdHlMb2dWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5hY3Rpdml0eUxvZ1Zpc2libGU7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFBST0dSQU1NQVRJQyBBUEk6IEJPVFRPTSBCQVIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBHZXQgdGhlIGJvdHRvbSBiYXIgQVBJIGZvciB3aWRnZXQvYWN0aW9uIG1hbmFnZW1lbnQKICAgICAqLwogICAgZ2V0IGJvdHRvbUJhcigpIHsKICAgICAgaWYgKCF0aGlzLmJvdHRvbWJhckVsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYWRkV2lkZ2V0OiAod2lkZ2V0KSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZFdpZGdldCh3aWRnZXQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LnVwZGF0ZVdpZGdldChpZCwgdXBkYXRlKSk7CiAgICAgICAgICB9LAogICAgICAgICAgcmVtb3ZlV2lkZ2V0OiAoaWQpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8ucmVtb3ZlV2lkZ2V0KGlkKSk7CiAgICAgICAgICB9LAogICAgICAgICAgZ2V0V2lkZ2V0OiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uZ2V0V2lkZ2V0KGlkKSwKICAgICAgICAgIGNsZWFyV2lkZ2V0czogKCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5jbGVhcldpZGdldHMoKSk7CiAgICAgICAgICB9LAogICAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQ/LmFkZEFjdGlvbihhY3Rpb24pKTsKICAgICAgICAgIH0sCiAgICAgICAgICByZW1vdmVBY3Rpb246IChpZCkgPT4gewogICAgICAgICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50Py5yZW1vdmVBY3Rpb24oaWQpKTsKICAgICAgICAgIH0sCiAgICAgICAgICBjbGVhckFjdGlvbnM6ICgpID0+IHsKICAgICAgICAgICAgdGhpcy51cGRhdGVDb21wbGV0ZS50aGVuKCgpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudD8uY2xlYXJBY3Rpb25zKCkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgIH0KICAgICAgcmV0dXJuIHsKICAgICAgICBhZGRXaWRnZXQ6ICh3aWRnZXQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5hZGRXaWRnZXQod2lkZ2V0KSwKICAgICAgICB1cGRhdGVXaWRnZXQ6IChpZCwgdXBkYXRlKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQudXBkYXRlV2lkZ2V0KGlkLCB1cGRhdGUpLAogICAgICAgIHJlbW92ZVdpZGdldDogKGlkKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQucmVtb3ZlV2lkZ2V0KGlkKSwKICAgICAgICBnZXRXaWRnZXQ6IChpZCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmdldFdpZGdldChpZCksCiAgICAgICAgY2xlYXJXaWRnZXRzOiAoKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuY2xlYXJXaWRnZXRzKCksCiAgICAgICAgYWRkQWN0aW9uOiAoYWN0aW9uKSA9PiB0aGlzLmJvdHRvbWJhckVsZW1lbnQuYWRkQWN0aW9uKGFjdGlvbiksCiAgICAgICAgcmVtb3ZlQWN0aW9uOiAoaWQpID0+IHRoaXMuYm90dG9tYmFyRWxlbWVudC5yZW1vdmVBY3Rpb24oaWQpLAogICAgICAgIGNsZWFyQWN0aW9uczogKCkgPT4gdGhpcy5ib3R0b21iYXJFbGVtZW50LmNsZWFyQWN0aW9ucygpCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBib3R0b20gYmFyIHZpc2liaWxpdHkKICAgICAqLwogICAgc2V0Qm90dG9tQmFyVmlzaWJsZSh2aXNpYmxlKSB7CiAgICAgIHRoaXMuYm90dG9tYmFyVmlzaWJsZSA9IHZpc2libGU7CiAgICAgIGlmICghdmlzaWJsZSkgewogICAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIiwgIiIpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucmVtb3ZlQXR0cmlidXRlKCJib3R0b21iYXItaGlkZGVuIik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGJvdHRvbSBiYXIgdmlzaWJpbGl0eSBzdGF0ZQogICAgICovCiAgICBnZXRCb3R0b21CYXJWaXNpYmxlKCkgewogICAgICByZXR1cm4gdGhpcy5ib3R0b21iYXJWaXNpYmxlOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUk9HUkFNTUFUSUMgQVBJOiBOQVZJR0FUSU9OCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogTmF2aWdhdGUgdG8gYSB2aWV3IGJ5IElECiAgICAgKi8KICAgIGFzeW5jIG5hdmlnYXRlVG9WaWV3KHZpZXdJZCwgcGFyYW1zMikgewogICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgIGlmICghdmlldykgewogICAgICAgIGNvbnNvbGUud2FybihgQ2Fubm90IG5hdmlnYXRlIHRvIHVua25vd24gdmlldzogJHt2aWV3SWR9YCk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGNvbnN0IGNhbkxlYXZlID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuY2FuTGVhdmVDdXJyZW50VmlldygpOwogICAgICBpZiAoY2FuTGVhdmUgIT09IHRydWUpIHsKICAgICAgICBpZiAodHlwZW9mIGNhbkxlYXZlID09PSAic3RyaW5nIikgewogICAgICAgICAgY29uc3QgY29uZmlybWVkID0gd2luZG93LmNvbmZpcm0oY2FuTGVhdmUpOwogICAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnZpZXdMaWZlY3ljbGUkLm5leHQoeyB0eXBlOiAibG9hZGluZyIsIHZpZXdJZCB9KTsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRWaWV3KHZpZXcsIHBhcmFtczIpOwogICAgICAgIGNvbnN0IHJvdXRlID0gdmlldy5yb3V0ZSB8fCB2aWV3SWQ7CiAgICAgICAgY29uc3QgbmV3SGFzaCA9IGAjJHtyb3V0ZX1gOwogICAgICAgIGlmICh3aW5kb3cubG9jYXRpb24uaGFzaCAhPT0gbmV3SGFzaCkgewogICAgICAgICAgd2luZG93Lmhpc3RvcnkucHVzaFN0YXRlKHsgdmlld0lkIH0sICIiLCBuZXdIYXNoKTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsgdHlwZTogImxvYWRFcnJvciIsIHZpZXdJZCwgZXJyb3IgfSk7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEdldCB0aGUgY3VycmVudCB2aWV3CiAgICAgKi8KICAgIGdldEN1cnJlbnRWaWV3KCkgewogICAgICByZXR1cm4gdGhpcy5jdXJyZW50VmlldzsKICAgIH0KICAgIC8qKgogICAgICogR2V0IGFjY2VzcyB0byB0aGUgdmlldyByZWdpc3RyeSAoZm9yIGFkdmFuY2VkIHVzZSkKICAgICAqLwogICAgZ2V0Vmlld1JlZ2lzdHJ5KCkgewogICAgICByZXR1cm4gdGhpcy52aWV3UmVnaXN0cnk7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFVOSUZJRUQgQ09ORklHVVJBVElPTgogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIENvbmZpZ3VyZSB0aGUgYXBwIHNoZWxsIHdpdGggYSB1bmlmaWVkIGNvbmZpZyBvYmplY3QKICAgICAqLwogICAgY29uZmlndXJlKGNvbmZpZzMpIHsKICAgICAgaWYgKGNvbmZpZzMudmlld3MpIHsKICAgICAgICB0aGlzLnZpZXdSZWdpc3RyeS5jbGVhcigpOwogICAgICAgIHRoaXMudmlld1JlZ2lzdHJ5LnJlZ2lzdGVyQWxsKGNvbmZpZzMudmlld3MpOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmJyYW5kaW5nKSB7CiAgICAgICAgdGhpcy5tYWlubWVudUxvZ29JY29uID0gY29uZmlnMy5icmFuZGluZy5sb2dvSWNvbiB8fCAiIjsKICAgICAgICB0aGlzLm1haW5tZW51TG9nb1RleHQgPSBjb25maWczLmJyYW5kaW5nLmxvZ29UZXh0IHx8ICIiOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmFwcEJhcikgewogICAgICAgIHRoaXMuYXBwYmFyTWVudUl0ZW1zID0gY29uZmlnMy5hcHBCYXIubWVudUl0ZW1zIHx8IFtdOwogICAgICAgIHRoaXMuYXBwYmFyQnJlYWRjcnVtYnMgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1icyB8fCAiIjsKICAgICAgICB0aGlzLmFwcGJhckJyZWFkY3J1bWJTZXBhcmF0b3IgPSBjb25maWczLmFwcEJhci5icmVhZGNydW1iU2VwYXJhdG9yIHx8ICIgPiAiOwogICAgICAgIHRoaXMuYXBwYmFyU2hvd1dpbmRvd0NvbnRyb2xzID0gY29uZmlnMy5hcHBCYXIuc2hvd1dpbmRvd0NvbnRyb2xzID8/IHRydWU7CiAgICAgICAgdGhpcy5hcHBiYXJTaG93U2VhcmNoID0gY29uZmlnMy5hcHBCYXIuc2hvd1NlYXJjaCA/PyBmYWxzZTsKICAgICAgICB0aGlzLmFwcGJhclVzZXIgPSBjb25maWczLmFwcEJhci51c2VyOwogICAgICAgIHRoaXMuYXBwYmFyUHJvZmlsZU1lbnVJdGVtcyA9IGNvbmZpZzMuYXBwQmFyLnByb2ZpbGVNZW51SXRlbXMgfHwgW107CiAgICAgIH0KICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUpIHsKICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucykgewogICAgICAgICAgdGhpcy5tYWlubWVudUdyb3VwcyA9IHRoaXMuYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKTsKICAgICAgICB9IGVsc2UgaWYgKGNvbmZpZzMubWFpbk1lbnUuZ3JvdXBzKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51R3JvdXBzID0gY29uZmlnMy5tYWluTWVudS5ncm91cHM7CiAgICAgICAgfQogICAgICAgIGlmIChjb25maWczLm1haW5NZW51LmxvZ29JY29uKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51TG9nb0ljb24gPSBjb25maWczLm1haW5NZW51LmxvZ29JY29uOwogICAgICAgIH0KICAgICAgICBpZiAoY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dCkgewogICAgICAgICAgdGhpcy5tYWlubWVudUxvZ29UZXh0ID0gY29uZmlnMy5tYWluTWVudS5sb2dvVGV4dDsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tVGFicykgewogICAgICAgICAgdGhpcy5tYWlubWVudUJvdHRvbVRhYnMgPSBjb25maWczLm1haW5NZW51LmJvdHRvbVRhYnM7CiAgICAgICAgfSBlbHNlIGlmIChjb25maWczLm1haW5NZW51LmJvdHRvbUl0ZW1zKSB7CiAgICAgICAgICB0aGlzLm1haW5tZW51Qm90dG9tVGFicyA9IHRoaXMuYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGNvbmZpZzMubWFpbk1lbnUuYm90dG9tSXRlbXMpOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIpIHsKICAgICAgICB0aGlzLnNldEJvdHRvbUJhclZpc2libGUoY29uZmlnMy5ib3R0b21CYXIudmlzaWJsZSA/PyB0cnVlKTsKICAgICAgICBpZiAoY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cykgewogICAgICAgICAgY29uZmlnMy5ib3R0b21CYXIud2lkZ2V0cy5mb3JFYWNoKCh3aWRnZXQpID0+IHsKICAgICAgICAgICAgdGhpcy5ib3R0b21CYXIuYWRkV2lkZ2V0KHdpZGdldCk7CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMpIHsKICAgICAgICAgIGNvbmZpZzMuYm90dG9tQmFyLmFjdGlvbnMuZm9yRWFjaCgoYWN0aW9uKSA9PiB7CiAgICAgICAgICAgIHRoaXMuYm90dG9tQmFyLmFkZEFjdGlvbihhY3Rpb24pOwogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMuc2V0dXBSb3V0ZXJJbnRlZ3JhdGlvbihjb25maWczKTsKICAgICAgaWYgKGNvbmZpZzMub25WaWV3Q2hhbmdlKSB7CiAgICAgICAgdGhpcy52aWV3Q2hhbmdlZCQuc3Vic2NyaWJlKChldmVudCkgPT4gewogICAgICAgICAgY29uZmlnMy5vblZpZXdDaGFuZ2UoZXZlbnQudmlld0lkLCBldmVudC52aWV3KTsKICAgICAgICB9KTsKICAgICAgfQogICAgICBpZiAoY29uZmlnMy5vblNlYXJjaCkgewogICAgICAgIHRoaXMuc2VhcmNoQ2FsbGJhY2sgPSBjb25maWczLm9uU2VhcmNoOwogICAgICB9CiAgICAgIGlmIChjb25maWczLmRlZmF1bHRWaWV3KSB7CiAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhjb25maWczLmRlZmF1bHRWaWV3KTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQUklWQVRFIEhFTFBFUiBNRVRIT0RTCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIHNldHVwUm91dGVySW50ZWdyYXRpb24oY29uZmlnMykgewogICAgICBjb25zdCBoYW5kbGVIYXNoQ2hhbmdlID0gKCkgPT4gewogICAgICAgIGNvbnN0IGhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgICBpZiAoIWhhc2gpCiAgICAgICAgICByZXR1cm47CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoaGFzaCk7CiAgICAgICAgaWYgKG1hdGNoMikgewogICAgICAgICAgdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyk7CiAgICAgICAgfQogICAgICB9OwogICAgICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigiaGFzaGNoYW5nZSIsIGhhbmRsZUhhc2hDaGFuZ2UpOwogICAgICB0aGlzLnJvdXRlckNsZWFudXAgPSAoKSA9PiB7CiAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImhhc2hjaGFuZ2UiLCBoYW5kbGVIYXNoQ2hhbmdlKTsKICAgICAgfTsKICAgICAgY29uc3QgY3VycmVudEhhc2ggPSB3aW5kb3cubG9jYXRpb24uaGFzaC5zbGljZSgxKTsKICAgICAgaWYgKGN1cnJlbnRIYXNoKSB7CiAgICAgICAgY29uc3QgbWF0Y2gyID0gdGhpcy52aWV3UmVnaXN0cnkuZmluZEJ5Um91dGUoY3VycmVudEhhc2gpOwogICAgICAgIGlmIChtYXRjaDIpIHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyhtYXRjaDIudmlldy5pZCwgbWF0Y2gyLnBhcmFtcyksIDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYnVpbGRNYWluTWVudUZyb21TZWN0aW9ucyhjb25maWczKSB7CiAgICAgIGlmICghY29uZmlnMy5tYWluTWVudT8uc2VjdGlvbnMpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gY29uZmlnMy5tYWluTWVudS5zZWN0aW9ucy5tYXAoKHNlY3Rpb24pID0+ICh7CiAgICAgICAgbmFtZTogc2VjdGlvbi5uYW1lLAogICAgICAgIGl0ZW1zOiBzZWN0aW9uLnZpZXdzLm1hcCgodmlld0lkKSA9PiB7CiAgICAgICAgICBjb25zdCB2aWV3ID0gdGhpcy52aWV3UmVnaXN0cnkuZ2V0KHZpZXdJZCk7CiAgICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgICAgY29uc29sZS53YXJuKGBWaWV3ICIke3ZpZXdJZH0iIG5vdCBmb3VuZCBpbiByZWdpc3RyeWApOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGtleTogdmlldy5pZCwKICAgICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5uYXZpZ2F0ZVRvVmlldyh2aWV3SWQpLAogICAgICAgICAgICBiYWRnZTogdmlldy5iYWRnZQogICAgICAgICAgfTsKICAgICAgICB9KS5maWx0ZXIoQm9vbGVhbikKICAgICAgfSkpOwogICAgfQogICAgYnVpbGRCb3R0b21UYWJzRnJvbUl0ZW1zKGl0ZW1zKSB7CiAgICAgIHJldHVybiBpdGVtcy5tYXAoKHZpZXdJZCkgPT4gewogICAgICAgIGNvbnN0IHZpZXcgPSB0aGlzLnZpZXdSZWdpc3RyeS5nZXQodmlld0lkKTsKICAgICAgICBpZiAoIXZpZXcpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgVmlldyAiJHt2aWV3SWR9IiBub3QgZm91bmQgaW4gcmVnaXN0cnlgKTsKICAgICAgICAgIHJldHVybiBudWxsOwogICAgICAgIH0KICAgICAgICByZXR1cm4gewogICAgICAgICAga2V5OiB2aWV3LmlkLAogICAgICAgICAgaWNvbk5hbWU6IHZpZXcuaWNvbk5hbWUsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMubmF2aWdhdGVUb1ZpZXcodmlld0lkKQogICAgICAgIH07CiAgICAgIH0pLmZpbHRlcihCb29sZWFuKTsKICAgIH0KICAgIGFzeW5jIGxvYWRWaWV3KHZpZXcsIHBhcmFtczIpIHsKICAgICAgY29uc3QgcHJldmlvdXNWaWV3ID0gdGhpcy5jdXJyZW50VmlldzsKICAgICAgdGhpcy5jdXJyZW50VmlldyA9IHZpZXc7CiAgICAgIGNvbnN0IHZpZXdDb250YWluZXIgPSB0aGlzLm1haW5jb250ZW50Py5xdWVyeVNlbGVjdG9yKCIudmlldy1jb250YWluZXIiKSB8fCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi52aWV3LWNvbnRhaW5lciIpOwogICAgICBpZiAodmlld0NvbnRhaW5lcikgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gYXdhaXQgdGhpcy52aWV3UmVnaXN0cnkuYWN0aXZhdGVWaWV3KHZpZXcuaWQsIHZpZXdDb250YWluZXIsIHBhcmFtczIpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgdGhpcy52aWV3TGlmZWN5Y2xlJC5uZXh0KHsKICAgICAgICAgICAgdHlwZTogImFjdGl2YXRlZCIsCiAgICAgICAgICAgIHZpZXdJZDogdmlldy5pZCwKICAgICAgICAgICAgZWxlbWVudDogZWxlbWVudDQsCiAgICAgICAgICAgIHBhcmFtczogcGFyYW1zMgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh2aWV3LnNlY29uZGFyeU1lbnUpIHsKICAgICAgICB0aGlzLnNlY29uZGFyeW1lbnVHcm91cHMgPSB2aWV3LnNlY29uZGFyeU1lbnU7CiAgICAgICAgdGhpcy5zZWNvbmRhcnltZW51SGVhZGluZyA9IHZpZXcubmFtZTsKICAgICAgfQogICAgICBpZiAodmlldy5jb250ZW50VGFicykgewogICAgICAgIHRoaXMubWFpbmNvbnRlbnRUYWJzID0gdmlldy5jb250ZW50VGFiczsKICAgICAgfQogICAgICB0aGlzLnNldE1haW5NZW51U2VsZWN0aW9uKHZpZXcuaWQpOwogICAgICBjb25zdCBjaGFuZ2VFdmVudCA9IHsKICAgICAgICB2aWV3SWQ6IHZpZXcuaWQsCiAgICAgICAgdmlldywKICAgICAgICBwcmV2aW91c1ZpZXcsCiAgICAgICAgcGFyYW1zOiBwYXJhbXMyCiAgICAgIH07CiAgICAgIHRoaXMudmlld0NoYW5nZWQkLm5leHQoY2hhbmdlRXZlbnQpOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LWNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IGNoYW5nZUV2ZW50LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBFVkVOVCBIQU5ETEVSUyAoSW50ZXJuYWwpCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZUFwcGJhck1lbnVTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1tZW51LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJCcmVhZGNydW1iTmF2aWdhdGUoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImFwcGJhci1icmVhZGNydW1iLW5hdmlnYXRlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZUFwcGJhclNlYXJjaENsaWNrKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItc2VhcmNoLWNsaWNrIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyU2VhcmNoUXVlcnkoZTExKSB7CiAgICAgIGlmICh0aGlzLnNlYXJjaENhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5zZWFyY2hDYWxsYmFjayhlMTEuZGV0YWlsLnF1ZXJ5KTsKICAgICAgfQogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtcXVlcnkiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQXBwYmFyVXNlck1lbnVPcGVuKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJhcHBiYXItdXNlci1tZW51LW9wZW4iLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVBcHBiYXJQcm9maWxlTWVudVNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYXBwYmFyLXByb2ZpbGUtbWVudS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVUYWJTZWxlY3QoZTExKSB7CiAgICAgIHRoaXMubWFpbm1lbnVTZWxlY3RlZFRhYiA9IGUxMS5kZXRhaWwudGFiOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS10YWItc2VsZWN0IiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIGhhbmRsZVNlY29uZGFyeW1lbnVJdGVtU2VsZWN0KGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVTZWxlY3RlZEl0ZW0gPSBlMTEuZGV0YWlsLml0ZW07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlY29uZGFyeW1lbnUtaXRlbS1zZWxlY3QiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlTWFpbm1lbnVDb2xsYXBzZUNoYW5nZShlMTEpIHsKICAgICAgdGhpcy5tYWlubWVudUNvbGxhcHNlZCA9IGUxMS5kZXRhaWwuY29sbGFwc2VkOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJtYWlubWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlU2Vjb25kYXJ5bWVudUNvbGxhcHNlQ2hhbmdlKGUxMSkgewogICAgICB0aGlzLnNlY29uZGFyeW1lbnVDb2xsYXBzZWQgPSBlMTEuZGV0YWlsLmNvbGxhcHNlZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2Vjb25kYXJ5bWVudS1jb2xsYXBzZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiBlMTEuZGV0YWlsLAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgaGFuZGxlQ29udGVudFRhYlNlbGVjdChlMTEpIHsKICAgICAgdGhpcy5tYWluY29udGVudFNlbGVjdGVkVGFiID0gZTExLmRldGFpbC50YWI7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IGUxMS5kZXRhaWwsCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICB9CiAgICBoYW5kbGVDb250ZW50VGFiQ2xvc2UoZTExKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNvbnRlbnQtdGFiLWNsb3NlIiwgewogICAgICAgIGRldGFpbDogZTExLmRldGFpbCwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNBcHB1aTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1leGl0L2RlZXMtYnV0dG9uLWV4aXQuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTQzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0J1dHRvbkV4aXQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWJ1dHRvbi1leGl0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfc2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfc2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0J1dHRvbkV4aXQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc2l6ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU0Myh0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDMobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uRXhpdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gREVNTwogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLWJ1dHRvbi1leGl0PjwvZGVlcy1idXR0b24tZXhpdD4KICBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJCdXR0b24iOwogICAgI3NpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfaW5pdGlhbGl6ZXJzLCAyNCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgc3R5bGVzID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKCiAgICBgCiAgICBdKTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8c3R5bGU+CiAgICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgd2lkdGg6ICR7dGhpcy5zaXplfXB4OwogICAgICAgICAgaGVpZ2h0OiAke3RoaXMuc2l6ZX1weDsKICAgICAgICB9CiAgICAgIDwvc3R5bGU+CiAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImZpcnN0TGluZSI+PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2Vjb25kTGluZSI+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNCdXR0b25FeGl0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtYnV0dG9uL2RlZXMtYnV0dG9uLWdyb3VwL2RlZXMtYnV0dG9uLWdyb3VwLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzEgPSAoKSA9PiB7CiAgcmV0dXJuIGIyYAogICAgPHN0eWxlPgogICAgICAke2lgCiAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgYmFja2dyb3VuZDogIzAwMDAwMDsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBtaW4taGVpZ2h0OiAxMDB2aDsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgfQoKICAgICAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDMycHg7CiAgICAgICAgfQoKICAgICAgICAuZGVtby10aXRsZSB7CiAgICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICB9CgogICAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICAgIGNvbG9yOiAjOTk5OwogICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRlbW9Cb3giPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+QmFzaWMgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aG91dCBsYWJlbHMgZm9yIHNpbXBsZSBncm91cGluZzwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1idXR0b24+T3B0aW9uIDE8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk9wdGlvbiAyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5PcHRpb24gMzwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TGFiZWxlZCBCdXR0b24gR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+QnV0dG9uIGdyb3VwcyB3aXRoIGRlc2NyaXB0aXZlIGxhYmVsczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlZpZXcgTW9kZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5HcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5MaXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5DYXJkczwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgR3JvdXBzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+TXVsdGlwbGUgYnV0dG9uIGdyb3VwcyB1c2VkIHRvZ2V0aGVyPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogMTZweDsgZmxleC13cmFwOiB3cmFwOyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkRhdGFzZXQ6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+TmV0d29yazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TYWxlczwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlRpbWUgUmFuZ2U6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPjFIPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj4yNEg8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+N0Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+MzBEPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iQWN0aW9uczoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+UmVmcmVzaDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5FeHBvcnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VmVydGljYWwgQnV0dG9uIEdyb3VwczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkJ1dHRvbiBncm91cHMgd2l0aCB2ZXJ0aWNhbCBsYXlvdXQ8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgZ2FwOiAyNHB4OyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgZGlyZWN0aW9uPSJ2ZXJ0aWNhbCIgbGFiZWw9Ik5hdmlnYXRpb246Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRhc2hib2FyZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCI+QW5hbHl0aWNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlcG9ydHM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+U2V0dGluZ3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uLWdyb3VwIGRpcmVjdGlvbj0idmVydGljYWwiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIEl0ZW08L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+RWRpdCBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkRlbGV0ZSBJdGVtPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPk1peGVkIEJ1dHRvbiBUeXBlczwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPkRpZmZlcmVudCBidXR0b24gdHlwZXMgd2l0aGluIGdyb3VwczwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlN0YXR1czoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9InN1Y2Nlc3MiPkFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+UGVuZGluZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGFuZ2VyIj5JbmFjdGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWJ1dHRvbi9kZWVzLWJ1dHRvbi1ncm91cC9kZWVzLWJ1dHRvbi1ncm91cC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU0NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNDUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCdXR0b25Hcm91cCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYnV0dG9uLWdyb3VwIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGFiZWxfZGVjb3JhdG9yczsKICBsZXQgX2xhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RpcmVjdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfZGlyZWN0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCdXR0b25Hcm91cDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9sYWJlbF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfZGlyZWN0aW9uX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ0KHRoaXMsIG51bGwsIF9sYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsYWJlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxhYmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xhYmVsX2luaXRpYWxpemVycywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQodGhpcywgbnVsbCwgX2RpcmVjdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkaXJlY3Rpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRpcmVjdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaXJlY3Rpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRpcmVjdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kaXJlY3Rpb25faW5pdGlhbGl6ZXJzLCBfZGlyZWN0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQnV0dG9uR3JvdXAyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQnV0dG9uIjsKICAgICNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgbGFiZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxhYmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpcmVjdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDUodGhpcywgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0NSh0aGlzLCBfZGlyZWN0aW9uX2luaXRpYWxpemVycywgImhvcml6b250YWwiKSk7CiAgICBnZXQgZGlyZWN0aW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jZGlyZWN0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlyZWN0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkaXJlY3Rpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczQ1KHRoaXMsIF9kaXJlY3Rpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5idXR0b24tZ3JvdXAudmVydGljYWwgewogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiM5OTkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA4cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncm91cC52ZXJ0aWNhbCAubGFiZWwgewogICAgICAgIG1hcmdpbi1yaWdodDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIDo6c2xvdHRlZCgqKSB7CiAgICAgICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyb3VwICR7dGhpcy5kaXJlY3Rpb259Ij4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8c3BhbiBjbGFzcz0ibGFiZWwiPiR7dGhpcy5sYWJlbH08L3NwYW4+YCA6ICIifQogICAgICAgIDxzbG90Pjwvc2xvdD4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0NShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0J1dHRvbkdyb3VwMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1hcmVhL2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzIgPSAoKSA9PiB7CiAgY29uc3QgaW5pdGlhbERhdGFzZXRzID0gewogICAgc3lzdGVtOiB7CiAgICAgIGxhYmVsOiAiU3lzdGVtIFVzYWdlICglKSIsCiAgICAgIHNlcmllczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDUFUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDI1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDI4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDM1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogMzIgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDM4IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJNZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6IG5ldyBEYXRlKERhdGUubm93KCkgLSAzZTUpLnRvSVNPU3RyaW5nKCksIHk6IDQ1IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDI0ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ4IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDE4ZTQpLnRvSVNPU3RyaW5nKCksIHk6IDQ2IH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDEyZTQpLnRvSVNPU3RyaW5nKCksIHk6IDUyIH0sCiAgICAgICAgICAgIHsgeDogbmV3IERhdGUoRGF0ZS5ub3coKSAtIDZlNCkudG9JU09TdHJpbmcoKSwgeTogNTAgfSwKICAgICAgICAgICAgeyB4OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCksIHk6IDU1IH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF0KICAgIH0KICB9OwogIGNvbnN0IGluaXRpYWxGb3JtYXR0ZXJzID0gewogICAgc3lzdGVtOiAodmFsKSA9PiBgJHt2YWx9JWAKICB9OwogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBjaGFydEVsZW1lbnQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNtYWluLWNoYXJ0Iik7CiAgICBjb25zdCBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Nvbm5lY3Rpb25zLWNoYXJ0Iik7CiAgICBsZXQgaW50ZXJ2YWxJZDsKICAgIGxldCBjb25uZWN0aW9uc0ludGVydmFsSWQ7CiAgICBsZXQgY3VycmVudERhdGFzZXQgPSAic3lzdGVtIjsKICAgIGNvbnN0IGZvcm1hdHRlcnMyID0gewogICAgICBzeXN0ZW06ICh2YWwpID0+IGAke3ZhbH0lYCwKICAgICAgbmV0d29yazogKHZhbCkgPT4gYCR7dmFsfSBNYnBzYCwKICAgICAgc2FsZXM6ICh2YWwpID0+IGAkJHt2YWwudG9Mb2NhbGVTdHJpbmcoKX1gCiAgICB9OwogICAgY29uc3QgVElNRV9XSU5ET1cgPSAyICogNjAgKiAxZTM7CiAgICBjb25zdCBVUERBVEVfSU5URVJWQUwgPSAxZTM7CiAgICBjb25zdCBEQVRBX1BPSU5UX0lOVEVSVkFMID0gNWUzOwogICAgbGV0IHByZXZpb3VzVmFsdWVzID0gewogICAgICBjcHU6IDMwLAogICAgICBtZW1vcnk6IDUwLAogICAgICBkb3dubG9hZDogMTUwLAogICAgICB1cGxvYWQ6IDMwLAogICAgICBjb25uZWN0aW9uczogMTUwCiAgICB9OwogICAgY29uc3QgZ2VuZXJhdGVJbml0aWFsRGF0YSA9IChiYXNlVmFsdWUsIHZhcmlhbmNlLCBpbnRlcnZhbDMgPSBEQVRBX1BPSU5UX0lOVEVSVkFMKSA9PiB7CiAgICAgIGNvbnN0IGRhdGEgPSBbXTsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHBvaW50Q291bnQgPSBNYXRoLmZsb29yKFRJTUVfV0lORE9XIC8gaW50ZXJ2YWwzKTsKICAgICAgZm9yIChsZXQgaTExID0gcG9pbnRDb3VudDsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgICAgY29uc3QgdGltZXN0YW1wMiA9IG5ldyBEYXRlKG5vdzIgLSBpMTEgKiBpbnRlcnZhbDMpLnRvSVNPU3RyaW5nKCk7CiAgICAgICAgY29uc3QgdmFsdWUyID0gYmFzZVZhbHVlICsgKE1hdGgucmFuZG9tKCkgLSAwLjUpICogdmFyaWFuY2U7CiAgICAgICAgZGF0YS5wdXNoKHsgeDogdGltZXN0YW1wMiwgeTogTWF0aC5yb3VuZCh2YWx1ZTIpIH0pOwogICAgICB9CiAgICAgIHJldHVybiBkYXRhOwogICAgfTsKICAgIGNvbnN0IGRhdGFzZXRzID0gewogICAgICBzeXN0ZW06IHsKICAgICAgICBsYWJlbDogIlN5c3RlbSBVc2FnZSAoJSkiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiQ1BVIiwKICAgICAgICAgICAgZGF0YTogZ2VuZXJhdGVJbml0aWFsRGF0YShwcmV2aW91c1ZhbHVlcy5jcHUsIDEwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIk1lbW9yeSIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA4KQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSwKICAgICAgbmV0d29yazogewogICAgICAgIGxhYmVsOiAiTmV0d29yayBUcmFmZmljIChNYnBzKSIsCiAgICAgICAgc2VyaWVzOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJEb3dubG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMuZG93bmxvYWQsIDMwKQogICAgICAgICAgfSwKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIlVwbG9hZCIsCiAgICAgICAgICAgIGRhdGE6IGdlbmVyYXRlSW5pdGlhbERhdGEocHJldmlvdXNWYWx1ZXMudXBsb2FkLCAxMCkKICAgICAgICAgIH0KICAgICAgICBdCiAgICAgIH0sCiAgICAgIHNhbGVzOiB7CiAgICAgICAgbGFiZWw6ICJTYWxlcyBBbmFseXRpY3MiLAogICAgICAgIHNlcmllczogWwogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUmV2ZW51ZSIsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAxIiwgeTogNDVlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDIiLCB5OiA1MmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMyIsIHk6IDQ4ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA0IiwgeTogNjFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDUiLCB5OiA1OGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNiIsIHk6IDY1ZTMgfQogICAgICAgICAgICBdCiAgICAgICAgICB9LAogICAgICAgICAgewogICAgICAgICAgICBuYW1lOiAiUHJvZml0IiwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDEiLCB5OiAxMmUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wMiIsIHk6IDE0ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTAzIiwgeTogMTFlMyB9LAogICAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMDQiLCB5OiAxOGUzIH0sCiAgICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0wNSIsIHk6IDE2ZTMgfSwKICAgICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTA2IiwgeTogMmU0IH0KICAgICAgICAgICAgXQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfQogICAgfTsKICAgIGNvbnN0IGdldE5leHRWYWx1ZSA9IChjdXJyZW50LCBtaW4zLCBtYXgzLCBtYXhDaGFuZ2UgPSA1KSA9PiB7CiAgICAgIGNvbnN0IGNoYW5nZSA9IChNYXRoLnJhbmRvbSgpIC0gMC41KSAqIG1heENoYW5nZSAqIDI7CiAgICAgIGxldCBuZXdWYWx1ZSA9IGN1cnJlbnQgKyBjaGFuZ2U7CiAgICAgIGNvbnN0IGNlbnRlciA9IChtaW4zICsgbWF4MykgLyAyOwogICAgICBjb25zdCBwcmVzc3VyZSA9IChjZW50ZXIgLSBuZXdWYWx1ZSkgKiAwLjE7CiAgICAgIG5ld1ZhbHVlICs9IHByZXNzdXJlOwogICAgICBuZXdWYWx1ZSA9IE1hdGgubWF4KG1pbjMsIE1hdGgubWluKG1heDMsIG5ld1ZhbHVlKSk7CiAgICAgIHJldHVybiBNYXRoLnJvdW5kKG5ld1ZhbHVlKTsKICAgIH07CiAgICBsZXQgbGFzdERhdGFQb2ludFRpbWUgPSBEYXRlLm5vdygpOwogICAgbGV0IGNvbm5lY3Rpb25zTGFzdFVwZGF0ZSA9IERhdGUubm93KCk7CiAgICBjb25zdCBhZGRSZWFsdGltZURhdGEgPSAoKSA9PiB7CiAgICAgIGlmICghY2hhcnRFbGVtZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICAgIGNvbnN0IHNob3VsZEFkZFBvaW50ID0gbm93MiAtIGxhc3REYXRhUG9pbnRUaW1lID49IERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICAgIGlmIChzaG91bGRBZGRQb2ludCkgewogICAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gbm93MjsKICAgICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICAgIGlmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmNwdSA9IGdldE5leHRWYWx1ZShwcmV2aW91c1ZhbHVlcy5jcHUsIDIwLCA1MCwgMyk7CiAgICAgICAgICBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgPSBnZXROZXh0VmFsdWUocHJldmlvdXNWYWx1ZXMubWVtb3J5LCA0MCwgNzAsIDIpOwogICAgICAgICAgY29uc3QgY3VycmVudFNlcmllcyA9IGNoYXJ0RWxlbWVudC5jaGFydFNlcmllcy5tYXAoKHNlcmllcywgaW5kZXgyKSA9PiAoewogICAgICAgICAgICBuYW1lOiBzZXJpZXMubmFtZSwKICAgICAgICAgICAgZGF0YTogWwogICAgICAgICAgICAgIC4uLnNlcmllcy5kYXRhLAogICAgICAgICAgICAgIGluZGV4MiA9PT0gMCA/IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5jcHUgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy5tZW1vcnkgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9IGVsc2UgaWYgKGN1cnJlbnREYXRhc2V0ID09PSAibmV0d29yayIpIHsKICAgICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLmRvd25sb2FkLCAxMDAsIDIwMCwgMTApOwogICAgICAgICAgcHJldmlvdXNWYWx1ZXMudXBsb2FkID0gZ2V0TmV4dFZhbHVlKHByZXZpb3VzVmFsdWVzLnVwbG9hZCwgMjAsIDUwLCA1KTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRTZXJpZXMgPSBjaGFydEVsZW1lbnQuY2hhcnRTZXJpZXMubWFwKChzZXJpZXMsIGluZGV4MikgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IFsKICAgICAgICAgICAgICAuLi5zZXJpZXMuZGF0YSwKICAgICAgICAgICAgICBpbmRleDIgPT09IDAgPyB7IHg6IG5ld1RpbWVzdGFtcCwgeTogcHJldmlvdXNWYWx1ZXMuZG93bmxvYWQgfSA6IHsgeDogbmV3VGltZXN0YW1wLCB5OiBwcmV2aW91c1ZhbHVlcy51cGxvYWQgfQogICAgICAgICAgICBdCiAgICAgICAgICB9KSk7CiAgICAgICAgICBjaGFydEVsZW1lbnQudXBkYXRlU2VyaWVzKGN1cnJlbnRTZXJpZXMsIGZhbHNlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBjb25zdCB1cGRhdGVDb25uZWN0aW9ucyA9ICgpID0+IHsKICAgICAgaWYgKCFjb25uZWN0aW9uc0NoYXJ0RWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBuZXdUaW1lc3RhbXAgPSBuZXcgRGF0ZShub3cyKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBjaGFuZ2UgPSBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAyMSkgLSAxMDsKICAgICAgcHJldmlvdXNWYWx1ZXMuY29ubmVjdGlvbnMgPSBNYXRoLm1heCg1MCwgTWF0aC5taW4oMzAwLCBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyArIGNoYW5nZSkpOwogICAgICBjb25zdCBjdXJyZW50U2VyaWVzID0gY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuY2hhcnRTZXJpZXM7CiAgICAgIGNvbnN0IG5ld0RhdGEgPSBbewogICAgICAgIG5hbWU6IGN1cnJlbnRTZXJpZXNbMF0/Lm5hbWUgfHwgIkNvbm5lY3Rpb25zIiwKICAgICAgICBkYXRhOiBbCiAgICAgICAgICAuLi5jdXJyZW50U2VyaWVzWzBdPy5kYXRhIHx8IFtdLAogICAgICAgICAgeyB4OiBuZXdUaW1lc3RhbXAsIHk6IHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zIH0KICAgICAgICBdCiAgICAgIH1dOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC51cGRhdGVTZXJpZXMobmV3RGF0YSwgZmFsc2UpOwogICAgfTsKICAgIGNvbnN0IHN3aXRjaERhdGFzZXQgPSAobmFtZSkgPT4gewogICAgICBjdXJyZW50RGF0YXNldCA9IG5hbWU7CiAgICAgIGNvbnN0IGRhdGFzZXQgPSBkYXRhc2V0c1tuYW1lXTsKICAgICAgY2hhcnRFbGVtZW50LmxhYmVsID0gZGF0YXNldC5sYWJlbDsKICAgICAgY2hhcnRFbGVtZW50LnNlcmllcyA9IGRhdGFzZXQuc2VyaWVzOwogICAgICBjaGFydEVsZW1lbnQueUF4aXNGb3JtYXR0ZXIgPSBmb3JtYXR0ZXJzMltuYW1lXTsKICAgICAgaWYgKG5hbWUgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNNYXggPSAxMDA7CiAgICAgIH0gZWxzZSBpZiAobmFtZSA9PT0gIm5ldHdvcmsiKSB7CiAgICAgICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJkeW5hbWljIjsKICAgICAgfSBlbHNlIHsKICAgICAgICBjaGFydEVsZW1lbnQueUF4aXNTY2FsaW5nID0gImR5bmFtaWMiOwogICAgICB9CiAgICAgIGxhc3REYXRhUG9pbnRUaW1lID0gRGF0ZS5ub3coKSAtIERBVEFfUE9JTlRfSU5URVJWQUw7CiAgICB9OwogICAgY29uc3Qgc3RhcnRSZWFsdGltZSA9ICgpID0+IHsKICAgICAgaWYgKCFpbnRlcnZhbElkICYmIChjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgfHwgY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikpIHsKICAgICAgICBjaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gdHJ1ZTsKICAgICAgICBpbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IGFkZFJlYWx0aW1lRGF0YSgpLCBEQVRBX1BPSU5UX0lOVEVSVkFMKTsKICAgICAgfQogICAgICBpZiAoIWNvbm5lY3Rpb25zSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IHRydWU7CiAgICAgICAgY29ubmVjdGlvbnNJbnRlcnZhbElkID0gd2luZG93LnNldEludGVydmFsKCgpID0+IHVwZGF0ZUNvbm5lY3Rpb25zKCksIFVQREFURV9JTlRFUlZBTCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmVhbHRpbWUgPSAoKSA9PiB7CiAgICAgIGlmIChpbnRlcnZhbElkKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwoaW50ZXJ2YWxJZCk7CiAgICAgICAgaW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjb25uZWN0aW9uc0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJJbnRlcnZhbChjb25uZWN0aW9uc0ludGVydmFsSWQpOwogICAgICAgIGNvbm5lY3Rpb25zSW50ZXJ2YWxJZCA9IG51bGw7CiAgICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCByYW5kb21pemVEYXRhID0gKCkgPT4gewogICAgICBpZiAoY3VycmVudERhdGFzZXQgPT09ICJzeXN0ZW0iKSB7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMuY3B1ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDg1IDogMjU7CiAgICAgICAgcHJldmlvdXNWYWx1ZXMubWVtb3J5ID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDgwIDogNDU7CiAgICAgIH0gZWxzZSBpZiAoY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIikgewogICAgICAgIHByZXZpb3VzVmFsdWVzLmRvd25sb2FkID0gTWF0aC5yYW5kb20oKSA+IDAuNSA/IDI1MCA6IDEwMDsKICAgICAgICBwcmV2aW91c1ZhbHVlcy51cGxvYWQgPSBNYXRoLnJhbmRvbSgpID4gMC41ID8gODAgOiAyMDsKICAgICAgfQogICAgICBwcmV2aW91c1ZhbHVlcy5jb25uZWN0aW9ucyA9IE1hdGgucmFuZG9tKCkgPiAwLjUgPyAyODAgOiA4MDsKICAgICAgbGFzdERhdGFQb2ludFRpbWUgPSAwOwogICAgICBjb25uZWN0aW9uc0xhc3RVcGRhdGUgPSAwOwogICAgfTsKICAgIGNvbnN0IGJ1dHRvbnMgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICBidXR0b25zLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICBjb25zdCB0ZXh0OSA9IGJ1dHRvbi50ZXh0Q29udGVudD8udHJpbSgpOwogICAgICBpZiAodGV4dDkgPT09ICJTeXN0ZW0gVXNhZ2UiKSB7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldCgic3lzdGVtIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiTmV0d29yayBUcmFmZmljIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoIm5ldHdvcmsiKSk7CiAgICAgIH0gZWxzZSBpZiAodGV4dDkgPT09ICJTYWxlcyBEYXRhIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXQoInNhbGVzIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RhcnQgTGl2ZSIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzdGFydFJlYWx0aW1lKCkpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU3RvcCBMaXZlIikgewogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0b3BSZWFsdGltZSgpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIlNwaWtlIFZhbHVlcyIpIHsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiByYW5kb21pemVEYXRhKCkpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IHVwZGF0ZUJ1dHRvblN0YXRlcyA9ICgpID0+IHsKICAgICAgY29uc3QgYnV0dG9uczIgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3JBbGwoImRlZXMtYnV0dG9uIik7CiAgICAgIGJ1dHRvbnMyLmZvckVhY2goKGJ1dHRvbikgPT4gewogICAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgICAgaWYgKHRleHQ5ID09PSAiU3lzdGVtIFVzYWdlIikgewogICAgICAgICAgYnV0dG9uLnR5cGUgPSBjdXJyZW50RGF0YXNldCA9PT0gInN5c3RlbSIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJuZXR3b3JrIiA/ICJoaWdobGlnaHRlZCIgOiAibm9ybWFsIjsKICAgICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICAgIGJ1dHRvbi50eXBlID0gY3VycmVudERhdGFzZXQgPT09ICJzYWxlcyIgPyAiaGlnaGxpZ2h0ZWQiIDogIm5vcm1hbCI7CiAgICAgICAgfQogICAgICB9KTsKICAgIH07CiAgICBjaGFydEVsZW1lbnQucm9sbGluZ1dpbmRvdyA9IFRJTUVfV0lORE9XOwogICAgY2hhcnRFbGVtZW50LnJlYWx0aW1lTW9kZSA9IGZhbHNlOwogICAgY2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJwZXJjZW50YWdlIjsKICAgIGNoYXJ0RWxlbWVudC55QXhpc01heCA9IDEwMDsKICAgIGNoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgIH0sIDEwMCk7CiAgICBjb25zdCBvcmlnaW5hbFN3aXRjaERhdGFzZXQgPSBzd2l0Y2hEYXRhc2V0OwogICAgY29uc3Qgc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUgPSAobmFtZSkgPT4gewogICAgICBvcmlnaW5hbFN3aXRjaERhdGFzZXQobmFtZSk7CiAgICAgIHVwZGF0ZUJ1dHRvblN0YXRlcygpOwogICAgfTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIGlmICh0ZXh0OSA9PT0gIlN5c3RlbSBVc2FnZSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzeXN0ZW0iKSk7CiAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3dpdGNoRGF0YXNldFdpdGhCdXR0b25VcGRhdGUoInN5c3RlbSIpKTsKICAgICAgfSBlbHNlIGlmICh0ZXh0OSA9PT0gIk5ldHdvcmsgVHJhZmZpYyIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJuZXR3b3JrIikpOwogICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN3aXRjaERhdGFzZXRXaXRoQnV0dG9uVXBkYXRlKCJuZXR3b3JrIikpOwogICAgICB9IGVsc2UgaWYgKHRleHQ5ID09PSAiU2FsZXMgRGF0YSIpIHsKICAgICAgICBidXR0b24ucmVtb3ZlRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0KCJzYWxlcyIpKTsKICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiBzd2l0Y2hEYXRhc2V0V2l0aEJ1dHRvblVwZGF0ZSgic2FsZXMiKSk7CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50KSB7CiAgICAgIGNvbnN0IGluaXRpYWxDb25uZWN0aW9uc0RhdGEgPSBnZW5lcmF0ZUluaXRpYWxEYXRhKHByZXZpb3VzVmFsdWVzLmNvbm5lY3Rpb25zLCAzMCwgVVBEQVRFX0lOVEVSVkFMKTsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQuc2VyaWVzID0gW3sKICAgICAgICBuYW1lOiAiQ29ubmVjdGlvbnMiLAogICAgICAgIGRhdGE6IGluaXRpYWxDb25uZWN0aW9uc0RhdGEKICAgICAgfV07CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnJvbGxpbmdXaW5kb3cgPSBUSU1FX1dJTkRPVzsKICAgICAgY29ubmVjdGlvbnNDaGFydEVsZW1lbnQucmVhbHRpbWVNb2RlID0gZmFsc2U7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzU2NhbGluZyA9ICJmaXhlZCI7CiAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnlBeGlzTWF4ID0gMzUwOwogICAgICBjb25uZWN0aW9uc0NoYXJ0RWxlbWVudC5hdXRvU2Nyb2xsSW50ZXJ2YWwgPSAxZTM7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbm5lY3Rpb25zQ2hhcnRFbGVtZW50LnVwZGF0ZVRpbWVXaW5kb3coKTsKICAgICAgfSwgMTAwKTsKICAgIH0KICB9fT4KICAgICAgPHN0eWxlPgogICAgICAgICR7aWAKICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuY2hhcnQtY29udGFpbmVyIHsKICAgICAgICAgIGZsZXg6IDE7CiAgICAgICAgICBtaW4taGVpZ2h0OiA0MDBweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmluZm8gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGF0YXNldDoiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImhpZ2hsaWdodGVkIj5TeXN0ZW0gVXNhZ2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPk5ldHdvcmsgVHJhZmZpYzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U2FsZXMgRGF0YTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IlJlYWwtdGltZToiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IExpdmU8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0b3AgTGl2ZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KICAgICAgICAKICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgIDxkZWVzLWJ1dHRvbj5TcGlrZSBWYWx1ZXM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGVlcy1idXR0b24tZ3JvdXA+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iY2hhcnQtY29udGFpbmVyIj4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0ibWFpbi1jaGFydCIKICAgICAgICAgIC5sYWJlbD0ke2luaXRpYWxEYXRhc2V0cy5zeXN0ZW0ubGFiZWx9CiAgICAgICAgICAuc2VyaWVzPSR7aW5pdGlhbERhdGFzZXRzLnN5c3RlbS5zZXJpZXN9CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHtpbml0aWFsRm9ybWF0dGVycy5zeXN0ZW19CiAgICAgICAgPjwvZGVlcy1jaGFydC1hcmVhPgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0LWNvbnRhaW5lciIgc3R5bGU9Im1hcmdpbi10b3A6IDIwcHg7Ij4KICAgICAgICA8ZGVlcy1jaGFydC1hcmVhCiAgICAgICAgICBpZD0iY29ubmVjdGlvbnMtY2hhcnQiCiAgICAgICAgICAubGFiZWw9JHsiQWN0aXZlIENvbm5lY3Rpb25zIn0KICAgICAgICAgIC5zZXJpZXM9JHtbewogICAgbmFtZTogIkNvbm5lY3Rpb25zIiwKICAgIGRhdGE6IFtdCiAgfV19CiAgICAgICAgICAueUF4aXNGb3JtYXR0ZXI9JHsodmFsKSA9PiBgJHt2YWx9YH0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWFyZWE+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iaW5mbyI+CiAgICAgICAgUmVhbC10aW1lIG1vbml0b3Jpbmcgd2l0aCAyLW1pbnV0ZSByb2xsaW5nIHdpbmRvdyDigKIgCiAgICAgICAgVXBkYXRlcyBldmVyeSBzZWNvbmQgd2l0aCBzbW9vdGggdmFsdWUgdHJhbnNpdGlvbnMg4oCiIAogICAgICAgIENsaWNrICdTcGlrZSBWYWx1ZXMnIHRvIHNpbXVsYXRlIGxvYWQgc3Bpa2VzCiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBjaGFydEFyZWFTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KICAgICAgLm1haW5ib3ggewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNoYXJ0VGl0bGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHBhZGRpbmc6IDE2cHggMjRweDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDFlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICB9CiAgICAgIC5jaGFydENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMHB4OwogICAgICAgIGxlZnQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIHBhZGRpbmc6IDQ0cHggMTZweCAxNnB4IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OyAvKiBFbnN1cmUgY29udGFpbmVyIGRvZXNuJ3Qgb3ZlcnJpZGUgY2hhcnQgYmFja2dyb3VuZCAqLwogICAgICB9CiAgICAgIAogICAgICAvKiBBcGV4Q2hhcnRzIHRoZW1lIG92ZXJyaWRlcyAqLwogICAgICAuYXBleGNoYXJ0cy1jYW52YXMgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5hcGV4Y2hhcnRzLWlubmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAuYXBleGNoYXJ0cy1ncmFwaGljYWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgIGAKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlckNoYXJ0QXJlYSA9IChjb21wb25lbnQpID0+IHsKICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibWFpbmJveCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjaGFydFRpdGxlIj4ke2NvbXBvbmVudC5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNoYXJ0Q29udGFpbmVyIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1jaGFydC9kZWVzLWNoYXJ0LWFyZWEvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ1ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0NiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0NoYXJ0QXJlYSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hhcnQtYXJlYSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2NoYXJ0X2RlY29yYXRvcnM7CiAgbGV0IF9jaGFydF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NoYXJ0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbGFiZWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9zZXJpZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZXJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2RlY29yYXRvcnM7CiAgbGV0IF95QXhpc0Zvcm1hdHRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb2xsaW5nV2luZG93X2RlY29yYXRvcnM7CiAgbGV0IF9yb2xsaW5nV2luZG93X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcmVhbHRpbWVNb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9yZWFsdGltZU1vZGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3lBeGlzU2NhbGluZ19kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9kZWNvcmF0b3JzOwogIGxldCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF95QXhpc01heF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1Njcm9sbEludGVydmFsX2RlY29yYXRvcnM7CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsSW50ZXJ2YWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoYXJ0QXJlYTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jaGFydF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX3Nlcmllc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfeUF4aXNGb3JtYXR0ZXJfZGVjb3JhdG9ycyA9IFtuNSh7IGF0dHJpYnV0ZTogZmFsc2UgfSldOwogICAgICBfcm9sbGluZ1dpbmRvd19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3JlYWx0aW1lTW9kZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF95QXhpc01heF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2NoYXJ0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNoYXJ0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjaGFydCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jaGFydCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2hhcnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCBfY2hhcnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0NSh0aGlzLCBudWxsLCBfbGFiZWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxhYmVsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9sYWJlbF9pbml0aWFsaXplcnMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9zZXJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZXJpZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZXJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VyaWVzX2luaXRpYWxpemVycywgX3Nlcmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc0Zvcm1hdHRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc0Zvcm1hdHRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNGb3JtYXR0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNGb3JtYXR0ZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzRm9ybWF0dGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzRm9ybWF0dGVyX2luaXRpYWxpemVycywgX3lBeGlzRm9ybWF0dGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX3JvbGxpbmdXaW5kb3dfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9sbGluZ1dpbmRvdyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicm9sbGluZ1dpbmRvdyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yb2xsaW5nV2luZG93LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb2xsaW5nV2luZG93ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF9yZWFsdGltZU1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVhbHRpbWVNb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZWFsdGltZU1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVhbHRpbWVNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWFsdGltZU1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVhbHRpbWVNb2RlX2luaXRpYWxpemVycywgX3JlYWx0aW1lTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc1NjYWxpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAieUF4aXNTY2FsaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ5QXhpc1NjYWxpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNTY2FsaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai55QXhpc1NjYWxpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfeUF4aXNTY2FsaW5nX2luaXRpYWxpemVycywgX3lBeGlzU2NhbGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ1KHRoaXMsIG51bGwsIF95QXhpc01heF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ5QXhpc01heCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAieUF4aXNNYXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoueUF4aXNNYXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnlBeGlzTWF4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3lBeGlzTWF4X2luaXRpYWxpemVycywgX3lBeGlzTWF4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUodGhpcywgbnVsbCwgX2F1dG9TY3JvbGxJbnRlcnZhbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhdXRvU2Nyb2xsSW50ZXJ2YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGxJbnRlcnZhbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hdXRvU2Nyb2xsSW50ZXJ2YWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmF1dG9TY3JvbGxJbnRlcnZhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCBfYXV0b1Njcm9sbEludGVydmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkNoYXJ0IjsKICAgICNjaGFydF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfY2hhcnRfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgLy8gaW5zdGFuY2UKICAgIGdldCBjaGFydCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2hhcnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NoYXJ0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9jaGFydF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2xhYmVsX2luaXRpYWxpemVycywgIlVudGl0bGVkIENoYXJ0IikpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9sYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3Nlcmllc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VyaWVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNzZXJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE92ZXJyaWRlIGdldHRlciB0byByZXR1cm4gaW50ZXJuYWwgY2hhcnQgZGF0YQogICAgZ2V0IGNoYXJ0U2VyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YS5sZW5ndGggPiAwID8gdGhpcy5pbnRlcm5hbENoYXJ0RGF0YSA6IHRoaXMuc2VyaWVzOwogICAgfQogICAgI3lBeGlzRm9ybWF0dGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfc2VyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNGb3JtYXR0ZXJfaW5pdGlhbGl6ZXJzLCAodmFsKSA9PiBgJHt2YWx9IE1icHNgKSk7CiAgICBnZXQgeUF4aXNGb3JtYXR0ZXIoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHlBeGlzRm9ybWF0dGVyKHZhbHVlMikgewogICAgICB0aGlzLiN5QXhpc0Zvcm1hdHRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc0Zvcm1hdHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JvbGxpbmdXaW5kb3dfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcm9sbGluZ1dpbmRvdygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3JvbGxpbmdXaW5kb3dfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgbm8gcm9sbGluZyB3aW5kb3cKICAgIHNldCByb2xsaW5nV2luZG93KHZhbHVlMikgewogICAgICB0aGlzLiNyb2xsaW5nV2luZG93X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfcm9sbGluZ1dpbmRvd19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX3JlYWx0aW1lTW9kZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgcmVhbHRpbWVNb2RlKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVhbHRpbWVNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVhbHRpbWVNb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNyZWFsdGltZU1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9yZWFsdGltZU1vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF95QXhpc1NjYWxpbmdfaW5pdGlhbGl6ZXJzLCAiZHluYW1pYyIpKTsKICAgIGdldCB5QXhpc1NjYWxpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiN5QXhpc1NjYWxpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB5QXhpc1NjYWxpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzU2NhbGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNTY2FsaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfaW5pdGlhbGl6ZXJzLCAxMDApKTsKICAgIGdldCB5QXhpc01heCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBVc2VkIHdoZW4geUF4aXNTY2FsaW5nIGlzICdmaXhlZCcgb3IgJ3BlcmNlbnRhZ2UnCiAgICBzZXQgeUF4aXNNYXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3lBeGlzTWF4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nih0aGlzLCBfeUF4aXNNYXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ2KHRoaXMsIF9hdXRvU2Nyb2xsSW50ZXJ2YWxfaW5pdGlhbGl6ZXJzLCAxZTMpKTsKICAgIGdldCBhdXRvU2Nyb2xsSW50ZXJ2YWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhdXRvU2Nyb2xsSW50ZXJ2YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIEF1dG8tc2Nyb2xsIGludGVydmFsIGluIG1pbGxpc2Vjb25kcyAoMCB0byBkaXNhYmxlKQogICAgc2V0IGF1dG9TY3JvbGxJbnRlcnZhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYXV0b1Njcm9sbEludGVydmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZXNpemVPYnNlcnZlciA9IF9fcnVuSW5pdGlhbGl6ZXJzNDYodGhpcywgX2F1dG9TY3JvbGxJbnRlcnZhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICByZXNpemVUaW1lb3V0OwogICAgaW50ZXJuYWxDaGFydERhdGEgPSBbXTsKICAgIGF1dG9TY3JvbGxUaW1lciA9IG51bGw7CiAgICBERUJVR19SRVNJWkUgPSBmYWxzZTsKICAgIC8vIFNldCB0byB0cnVlIHRvIGVuYWJsZSByZXNpemUgZGVidWdnaW5nCiAgICAvLyBDaGFydCBjb2xvciBzY2hlbWVzCiAgICBDSEFSVF9DT0xPUlMgPSB7CiAgICAgIGRhcms6IFsKICAgICAgICAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIsCiAgICAgICAgLy8gQmx1ZQogICAgICAgICJoc2woMTczLjQgODAuNCUgNDAlKSIsCiAgICAgICAgLy8gVGVhbAogICAgICAgICJoc2woMjgwLjMgODcuNCUgNjYuNyUpIiwKICAgICAgICAvLyBQdXJwbGUKICAgICAgICAiaHNsKDI0LjYgOTUlIDUzLjElKSIKICAgICAgICAvLyBPcmFuZ2UKICAgICAgXSwKICAgICAgbGlnaHQ6IFsKICAgICAgICAiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsCiAgICAgICAgLy8gQmx1ZSAoc2hhZGNuIHByaW1hcnkpCiAgICAgICAgImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLAogICAgICAgIC8vIEdyZWVuIChzaGFkY24gc3VjY2VzcykKICAgICAgICAiaHNsKDI4MC4zIDQ3LjclIDUwLjIlKSIsCiAgICAgICAgLy8gUHVycGxlIChtdXRlZCkKICAgICAgICAiaHNsKDIwLjUgOTAuMiUgNDguMiUpIgogICAgICAgIC8vIE9yYW5nZSAoc2hhZGNuIGRlc3RydWN0aXZlIHZhcmlhbnQpCiAgICAgIF0KICAgIH07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoZW50cmllcykgPT4gewogICAgICAgIGlmICh0aGlzLnJlc2l6ZVRpbWVvdXQpIHsKICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlc2l6ZVRpbWVvdXQpOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlc2l6ZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5jaGFydCkgewogICAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUgJiYgZW50cmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgICAgY29uc3QgZW50cnkgPSBlbnRyaWVzWzBdOwogICAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gUmVzaXplIGRldGVjdGVkOiIsIHsKICAgICAgICAgICAgICAgIHdpZHRoOiBlbnRyeS5jb250ZW50UmVjdC53aWR0aCwKICAgICAgICAgICAgICAgIGhlaWdodDogZW50cnkuY29udGVudFJlY3QuaGVpZ2h0CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgdGhpcy5yZXNpemVDaGFydCgpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgICB0aGlzLnJlZ2lzdGVyR2FyYmFnZUZ1bmN0aW9uKGFzeW5jICgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZXNpemVUaW1lb3V0KSB7CiAgICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5yZXNpemVUaW1lb3V0KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMucmVzaXplT2JzZXJ2ZXIpIHsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICAgIH0KICAgICAgICB0aGlzLnN0b3BBdXRvU2Nyb2xsKCk7CiAgICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHRoaXMuY2hhcnQuZGVzdHJveSgpOwogICAgICAgICAgICB0aGlzLmNoYXJ0ID0gbnVsbDsKICAgICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGRlc3Ryb3lpbmcgY2hhcnQ6IiwgZXJyb3IpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IGNoYXJ0QXJlYVN0eWxlczsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIHJlbmRlckNoYXJ0QXJlYSh0aGlzKTsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IEFwZXhDaGFydHNMaWIgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRBcGV4Q2hhcnRzKCk7CiAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgIGNvbnN0IG1haW5ib3ggPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW5ib3giKTsKICAgICAgY29uc3QgY2hhcnRDb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNoYXJ0Q29udGFpbmVyIik7CiAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJDaGFydCBjb250YWluZXJzIG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICBjb25zdCBwYWRkaW5nVG9wID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nVG9wLCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdCb3R0b20gPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdCb3R0b20sIDEwKTsKICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgIGNvbnN0IHBhZGRpbmdSaWdodCA9IHBhcnNlSW50KHN0eWxlQ2hhcnRDb250YWluZXIucGFkZGluZ1JpZ2h0LCAxMCk7CiAgICAgIGNvbnN0IGluaXRpYWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgY29uc3QgaW5pdGlhbEhlaWdodCA9IG1haW5ib3gub2Zmc2V0SGVpZ2h0IC0gcGFkZGluZ1RvcCAtIHBhZGRpbmdCb3R0b207CiAgICAgIGNvbnN0IGNoYXJ0U2VyaWVzID0gdGhpcy5zZXJpZXMubGVuZ3RoID4gMCA/IHRoaXMuc2VyaWVzIDogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJjcHUiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMjUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDMwIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAyMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzUgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDI1IH0KICAgICAgICAgIF0KICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJtZW1vcnkiLAogICAgICAgICAgZGF0YTogWwogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDAzOjAwOjAwIiwgeTogMTAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQwNzowMDowMCIsIHk6IDEyIH0sCiAgICAgICAgICAgIHsgeDogIjIwMjUtMDEtMTVUMTE6MDA6MDAiLCB5OiAxMCB9LAogICAgICAgICAgICB7IHg6ICIyMDI1LTAxLTE1VDE1OjAwOjAwIiwgeTogMzAgfSwKICAgICAgICAgICAgeyB4OiAiMjAyNS0wMS0xNVQxOTowMDowMCIsIHk6IDQwIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBjaGFydFNlcmllczsKICAgICAgY29uc3QgaXNEYXJrID0gIXRoaXMuZ29CcmlnaHQ7CiAgICAgIGNvbnN0IHRoZW1lID0gaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IjsKICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgc2VyaWVzOiBjaGFydFNlcmllcywKICAgICAgICBjaGFydDogewogICAgICAgICAgd2lkdGg6IGluaXRpYWxXaWR0aCB8fCAxMDAsCiAgICAgICAgICAvLyBVc2UgYWN0dWFsIHdpZHRoIG9yIGZhbGxiYWNrCiAgICAgICAgICBoZWlnaHQ6IGluaXRpYWxIZWlnaHQgfHwgMTAwLAogICAgICAgICAgLy8gVXNlIGFjdHVhbCBoZWlnaHQgb3IgZmFsbGJhY2sKICAgICAgICAgIHR5cGU6ICJhcmVhIiwKICAgICAgICAgIGJhY2tncm91bmQ6ICJ0cmFuc3BhcmVudCIsCiAgICAgICAgICAvLyBUcmFuc3BhcmVudCBiYWNrZ3JvdW5kIHRvIGluaGVyaXQgZnJvbSBjb250YWluZXIKICAgICAgICAgIHRvb2xiYXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gVGhpcyBsaW5lIGRpc2FibGVzIHRoZSB0b29sYmFyCiAgICAgICAgICB9LAogICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICBlbmFibGVkOiAhdGhpcy5yZWFsdGltZU1vZGUsCiAgICAgICAgICAgIC8vIERpc2FibGUgYW5pbWF0aW9ucyBpbiByZWFsdGltZSBtb2RlCiAgICAgICAgICAgIHNwZWVkOiA0MDAsCiAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICBlbmFibGVkOiBmYWxzZSwKICAgICAgICAgICAgICAvLyBEaXNhYmxlIGdyYWR1YWwgYW5pbWF0aW9uIGZvciBjbGVhbmVyIHVwZGF0ZXMKICAgICAgICAgICAgICBkZWxheTogMAogICAgICAgICAgICB9LAogICAgICAgICAgICBkeW5hbWljQW5pbWF0aW9uOiB7CiAgICAgICAgICAgICAgZW5hYmxlZDogIXRoaXMucmVhbHRpbWVNb2RlLAogICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHpvb206IHsKICAgICAgICAgICAgZW5hYmxlZDogZmFsc2UKICAgICAgICAgICAgLy8gRGlzYWJsZSB6b29tIGZvciBjbGVhbmVyIGludGVyYWN0aW9uCiAgICAgICAgICB9LAogICAgICAgICAgc2VsZWN0aW9uOiB7CiAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgICAgIC8vIERpc2FibGUgc2VsZWN0aW9uCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBkYXRhTGFiZWxzOiB7CiAgICAgICAgICBlbmFibGVkOiBmYWxzZQogICAgICAgIH0sCiAgICAgICAgc3Ryb2tlOiB7CiAgICAgICAgICB3aWR0aDogMiwKICAgICAgICAgIGN1cnZlOiAic21vb3RoIgogICAgICAgIH0sCiAgICAgICAgeGF4aXM6IHsKICAgICAgICAgIHR5cGU6ICJkYXRldGltZSIsCiAgICAgICAgICAvLyBUaW1lLXNlcmllcyBkYXRhCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0OiAiSEg6bW06c3MiLAogICAgICAgICAgICAvLyBUaW1lIGZvcm1hdHRpbmcgd2l0aCBzZWNvbmRzCiAgICAgICAgICAgIGRhdGV0aW1lVVRDOiBmYWxzZSwKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0sCiAgICAgICAgICAgICAgLy8gTGFiZWwgY29sb3IKICAgICAgICAgICAgICBmb250U2l6ZTogIjEycHgiLAogICAgICAgICAgICAgIGZvbnRGYW1pbHk6ICctYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICJTZWdvZSBVSSIsIHNhbnMtc2VyaWYnLAogICAgICAgICAgICAgIGZvbnRXZWlnaHQ6ICI0MDAiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBheGlzQm9yZGVyOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeC1heGlzIGJvcmRlcgogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNUaWNrczogewogICAgICAgICAgICBzaG93OiBmYWxzZQogICAgICAgICAgICAvLyBIaWRlIHgtYXhpcyB0aWNrcwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgeWF4aXM6IHsKICAgICAgICAgIG1pbjogMCwKICAgICAgICAgIG1heDogdGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIiA/IHZvaWQgMCA6IHRoaXMueUF4aXNNYXgsCiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgZm9ybWF0dGVyOiB0aGlzLnlBeGlzRm9ybWF0dGVyLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogW2lzRGFyayA/ICJoc2woMCAwJSA2My45JSkiIDogImhzbCgwIDAlIDIwJSkiXSwKICAgICAgICAgICAgICAvLyBMYWJlbCBjb2xvcgogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIGF4aXNCb3JkZXI6IHsKICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgLy8gSGlkZSB5LWF4aXMgYm9yZGVyCiAgICAgICAgICB9LAogICAgICAgICAgYXhpc1RpY2tzOiB7CiAgICAgICAgICAgIHNob3c6IGZhbHNlCiAgICAgICAgICAgIC8vIEhpZGUgeS1heGlzIHRpY2tzCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB0b29sdGlwOiB7CiAgICAgICAgICBzaGFyZWQ6IHRydWUsCiAgICAgICAgICAvLyBFbmFibGVzIHRoZSB0b29sdGlwIHRvIGRpc3BsYXkgYWNyb3NzIHNlcmllcwogICAgICAgICAgaW50ZXJzZWN0OiBmYWxzZSwKICAgICAgICAgIC8vIEFsbG93cyBob3ZlcmluZyBhbnl3aGVyZSBvbiB0aGUgY2hhcnQKICAgICAgICAgIGZvbGxvd0N1cnNvcjogdHJ1ZSwKICAgICAgICAgIC8vIE1ha2VzIHRvb2x0aXAgZm9sbG93IG1vdXNlIGV2ZW4gYmV0d2VlbiBwb2ludHMKICAgICAgICAgIHg6IHsKICAgICAgICAgICAgZm9ybWF0OiAiZGQvTU0veXkgSEg6bW0iCiAgICAgICAgICB9LAogICAgICAgICAgY3VzdG9tOiAoeyBzZXJpZXMsIGRhdGFQb2ludEluZGV4LCB3OiB3MyB9KSA9PiB7CiAgICAgICAgICAgIGNvbnN0IGN1cnJlbnRUaGVtZSA9IHczLmNvbmZpZy50aGVtZS5tb2RlOwogICAgICAgICAgICBjb25zdCBpc0RhcmtNb2RlID0gY3VycmVudFRoZW1lID09PSAiZGFyayI7CiAgICAgICAgICAgIGNvbnN0IGJnQ29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDklKSIgOiAiaHNsKDAgMCUgMTAwJSkiOwogICAgICAgICAgICBjb25zdCB0ZXh0Q29sb3IgPSBpc0RhcmtNb2RlID8gImhzbCgwIDAlIDk1JSkiIDogImhzbCgwIDAlIDklKSI7CiAgICAgICAgICAgIGNvbnN0IGJvcmRlckNvbG9yID0gaXNEYXJrTW9kZSA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDg5LjglKSI7CiAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlcjIgPSB3My5jb25maWcueWF4aXNbMF0/LmxhYmVscz8uZm9ybWF0dGVyIHx8ICgodmFsKSA9PiB2YWwudG9TdHJpbmcoKSk7CiAgICAgICAgICAgIGxldCB0b29sdGlwQ29udGVudCA9IGA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAxMnB4OyBiYWNrZ3JvdW5kOiAke2JnQ29sb3J9OyBjb2xvcjogJHt0ZXh0Q29sb3J9OyBib3JkZXItcmFkaXVzOiA2cHg7IGJveC1zaGFkb3c6IDAgMnB4IDhweCAwIGhzbCgwIDAlIDAlIC8gJHtpc0RhcmtNb2RlID8gIjAuMiIgOiAiMC4xIn0pOyBib3JkZXI6IDFweCBzb2xpZCAke2JvcmRlckNvbG9yfTtmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOyBmb250LXNpemU6IDEycHg7Ij5gOwogICAgICAgICAgICBzZXJpZXMuZm9yRWFjaCgoczksIGluZGV4MikgPT4gewogICAgICAgICAgICAgIGNvbnN0IGxhYmVsID0gdzMuZ2xvYmFscy5zZXJpZXNOYW1lc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IHZhbHVlMiA9IHM5W2RhdGFQb2ludEluZGV4XTsKICAgICAgICAgICAgICBjb25zdCBjb2xvcjIgPSB3My5nbG9iYWxzLmNvbG9yc1tpbmRleDJdOwogICAgICAgICAgICAgIGNvbnN0IGZvcm1hdHRlZFZhbHVlID0gZm9ybWF0dGVyMih2YWx1ZTIpOwogICAgICAgICAgICAgIHRvb2x0aXBDb250ZW50ICs9IGA8ZGl2IHN0eWxlPSJkaXNwbGF5OiBmbGV4OyBhbGlnbi1pdGVtczogY2VudGVyOyBnYXA6IDhweDsgbWFyZ2luOiAke2luZGV4MiA+IDAgPyAiNnB4IiA6ICIwIn0gMDsiPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHdpZHRoOiAxMHB4OyBoZWlnaHQ6IDEwcHg7IGJhY2tncm91bmQ6ICR7Y29sb3IyfTsgYm9yZGVyLXJhZGl1czogMnB4OyI+PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJmb250LXdlaWdodDogNTAwOyI+JHtsYWJlbH06PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIHN0eWxlPSJtYXJnaW4tbGVmdDogYXV0bzsgZm9udC13ZWlnaHQ6IDYwMDsiPiR7Zm9ybWF0dGVkVmFsdWV9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj5gOwogICAgICAgICAgICB9KTsKICAgICAgICAgICAgdG9vbHRpcENvbnRlbnQgKz0gYDwvZGl2PmA7CiAgICAgICAgICAgIHJldHVybiB0b29sdGlwQ29udGVudDsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGdyaWQ6IHsKICAgICAgICAgIHhheGlzOiB7CiAgICAgICAgICAgIGxpbmVzOiB7CiAgICAgICAgICAgICAgc2hvdzogZmFsc2UKICAgICAgICAgICAgICAvLyBIaWRlIHZlcnRpY2FsIGdyaWQgbGluZXMgZm9yIGNsZWFuZXIgbG9vawogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbGluZXM6IHsKICAgICAgICAgICAgICBzaG93OiB0cnVlCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBib3JkZXJDb2xvcjogaXNEYXJrID8gImhzbCgwIDAlIDE0LjklKSIgOiAiaHNsKDAgMCUgOTQlKSIsCiAgICAgICAgICAvLyBWZXJ5IHN1YnRsZSBncmlkIGxpbmVzCiAgICAgICAgICBzdHJva2VEYXNoQXJyYXk6IDAsCiAgICAgICAgICAvLyBTb2xpZCBsaW5lCiAgICAgICAgICBwYWRkaW5nOiB7CiAgICAgICAgICAgIHRvcDogMTAsCiAgICAgICAgICAgIHJpZ2h0OiAyMCwKICAgICAgICAgICAgYm90dG9tOiAxMCwKICAgICAgICAgICAgbGVmdDogMjAKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIGZpbGw6IHsKICAgICAgICAgIHR5cGU6ICJncmFkaWVudCIsCiAgICAgICAgICAvLyBHcmFkaWVudCBmaWxsIGZvciB0aGUgYXJlYQogICAgICAgICAgZ3JhZGllbnQ6IHsKICAgICAgICAgICAgc2hhZGU6IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCIsCiAgICAgICAgICAgIHR5cGU6ICJ2ZXJ0aWNhbCIsCiAgICAgICAgICAgIHNoYWRlSW50ZW5zaXR5OiAwLjEsCiAgICAgICAgICAgIG9wYWNpdHlGcm9tOiBpc0RhcmsgPyAwLjIgOiAwLjMsCiAgICAgICAgICAgIG9wYWNpdHlUbzogMCwKICAgICAgICAgICAgc3RvcHM6IFswLCAxMDBdCiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB0aGVtZTogewogICAgICAgICAgbW9kZTogdGhlbWUKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5jaGFydCA9IG5ldyBBcGV4Q2hhcnRzTGliKHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY2hhcnRDb250YWluZXIiKSwgb3B0aW9ucyk7CiAgICAgICAgYXdhaXQgdGhpcy5jaGFydC5yZW5kZXIoKTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDEwMCkpOwogICAgICAgIGF3YWl0IHRoaXMucmVzaXplQ2hhcnQoKTsKICAgICAgICBjb25zdCBtYWluYm94MiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGlmIChtYWluYm94MiAmJiB0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShtYWluYm94Mik7CiAgICAgICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICAgICAgY29uc29sZS5sb2coIkRlZXNDaGFydEFyZWEgLSBSZXNpemVPYnNlcnZlciBhdHRhY2hlZCB0byBtYWluYm94Iik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBpbml0aWFsaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZ29CcmlnaHQiKSAmJiB0aGlzLmNoYXJ0KSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDaGFydFRoZW1lKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2VyaWVzIikgJiYgdGhpcy5jaGFydCAmJiB0aGlzLnNlcmllcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVTZXJpZXModGhpcy5zZXJpZXMpOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzRm9ybWF0dGVyIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgICB5YXhpczogewogICAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgICBmb3JtYXR0ZXI6IHRoaXMueUF4aXNGb3JtYXR0ZXIKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoInJlYWx0aW1lTW9kZSIpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgYW5pbWF0aW9uczogewogICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICBzcGVlZDogNDAwLAogICAgICAgICAgICAgIGFuaW1hdGVHcmFkdWFsbHk6IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlLAogICAgICAgICAgICAgICAgZGVsYXk6IDAKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGR5bmFtaWNBbmltYXRpb246IHsKICAgICAgICAgICAgICAgIGVuYWJsZWQ6ICF0aGlzLnJlYWx0aW1lTW9kZSwKICAgICAgICAgICAgICAgIHNwZWVkOiAzNTAKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYXV0b1Njcm9sbEludGVydmFsIikgJiYgdGhpcy5jaGFydCkgewogICAgICAgIHRoaXMuc3RvcEF1dG9TY3JvbGwoKTsKICAgICAgICBpZiAodGhpcy5yZWFsdGltZU1vZGUgJiYgdGhpcy5yb2xsaW5nV2luZG93ID4gMCAmJiB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCA+IDApIHsKICAgICAgICAgIHRoaXMuc3RhcnRBdXRvU2Nyb2xsKCk7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICgoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJ5QXhpc1NjYWxpbmciKSB8fCBjaGFuZ2VkUHJvcGVydGllcy5oYXMoInlBeGlzTWF4IikpICYmIHRoaXMuY2hhcnQpIHsKICAgICAgICBhd2FpdCB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMoewogICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgbWluOiAwLAogICAgICAgICAgICBtYXg6IHRoaXMueUF4aXNTY2FsaW5nID09PSAiZHluYW1pYyIgPyB2b2lkIDAgOiB0aGlzLnlBeGlzTWF4CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZVNlcmllcyhuZXdTZXJpZXMsIGFuaW1hdGUgPSB0cnVlKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIHRoaXMuaW50ZXJuYWxDaGFydERhdGEgPSBuZXdTZXJpZXM7CiAgICAgICAgaWYgKHRoaXMucm9sbGluZ1dpbmRvdyA+IDAgJiYgdGhpcy5yZWFsdGltZU1vZGUpIHsKICAgICAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICAgICAgY29uc3QgY3V0b2ZmVGltZSA9IG5vdzIgLSB0aGlzLnJvbGxpbmdXaW5kb3c7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFNlcmllcyA9IG5ld1Nlcmllcy5tYXAoKHNlcmllcykgPT4gKHsKICAgICAgICAgICAgbmFtZTogc2VyaWVzLm5hbWUsCiAgICAgICAgICAgIGRhdGE6IHNlcmllcy5kYXRhLmZpbHRlcigocG9pbnQ0KSA9PiB7CiAgICAgICAgICAgICAgaWYgKHR5cGVvZiBwb2ludDQgPT09ICJvYmplY3QiICYmIHBvaW50NCAhPT0gbnVsbCAmJiAieCIgaW4gcG9pbnQ0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gbmV3IERhdGUocG9pbnQ0LngpLmdldFRpbWUoKSA+IGN1dG9mZlRpbWU7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgfSkKICAgICAgICAgIH0pKTsKICAgICAgICAgIGlmIChmaWx0ZXJlZFNlcmllcy5zb21lKChzOSkgPT4gczkuZGF0YS5sZW5ndGggPiAwKSkgewogICAgICAgICAgICBpZiAodGhpcy55QXhpc1NjYWxpbmcgPT09ICJkeW5hbWljIikgewogICAgICAgICAgICAgIGNvbnN0IGFsbFZhbHVlcyA9IGZpbHRlcmVkU2VyaWVzLmZsYXRNYXAoKHM5KSA9PiBzOS5kYXRhLm1hcCgoZDYpID0+IGQ2LnkpKTsKICAgICAgICAgICAgICBpZiAoYWxsVmFsdWVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgICAgIGNvbnN0IG1heFZhbHVlID0gTWF0aC5tYXgoLi4uYWxsVmFsdWVzKTsKICAgICAgICAgICAgICAgIGNvbnN0IGR5bmFtaWNNYXggPSBNYXRoLmNlaWwobWF4VmFsdWUgKiAxLjEpOwogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgICAgICAgeWF4aXM6IHsKICAgICAgICAgICAgICAgICAgICBtaW46IDAsCiAgICAgICAgICAgICAgICAgICAgbWF4OiBkeW5hbWljTWF4CiAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKGZpbHRlcmVkU2VyaWVzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlU2VyaWVzKG5ld1NlcmllcywgYW5pbWF0ZSk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGRhdGUgY2hhcnQgc2VyaWVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLy8gVXBkYXRlIGp1c3QgdGhlIHgtYXhpcyBmb3Igc21vb3RoIHNjcm9sbGluZyBpbiByZWFsdGltZSBtb2RlCiAgICAvLyBQdWJsaWMgZm9yIGFkdmFuY2VkIHVzYWdlIGluIGRlbW9zLCBidXQgdHlwaWNhbGx5IGhhbmRsZWQgYXV0b21hdGljYWxseQogICAgYXN5bmMgdXBkYXRlVGltZVdpbmRvdygpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0IHx8IHRoaXMucm9sbGluZ1dpbmRvdyA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IG5vdzIgPSBEYXRlLm5vdygpOwogICAgICBjb25zdCBjdXRvZmZUaW1lID0gbm93MiAtIHRoaXMucm9sbGluZ1dpbmRvdzsKICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICB4YXhpczogewogICAgICAgICAgbWluOiBjdXRvZmZUaW1lLAogICAgICAgICAgbWF4OiBub3cyLAogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIGZvcm1hdDogIkhIOm1tOnNzIiwKICAgICAgICAgICAgZGF0ZXRpbWVVVEM6IGZhbHNlLAogICAgICAgICAgICBzdHlsZTogewogICAgICAgICAgICAgIGNvbG9yczogWyF0aGlzLmdvQnJpZ2h0ID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdLAogICAgICAgICAgICAgIGZvbnRTaXplOiAiMTJweCIsCiAgICAgICAgICAgICAgZm9udEZhbWlseTogJy1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgIlNlZ29lIFVJIiwgc2Fucy1zZXJpZicsCiAgICAgICAgICAgICAgZm9udFdlaWdodDogIjQwMCIKICAgICAgICAgICAgfQogICAgICAgICAgfSwKICAgICAgICAgIHRpY2tBbW91bnQ6IDYKICAgICAgICB9CiAgICAgIH0sIGZhbHNlLCBmYWxzZSk7CiAgICB9CiAgICBhc3luYyBhcHBlbmREYXRhKG5ld0RhdGEpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMuY2hhcnQuYXBwZW5kRGF0YShuZXdEYXRhKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHJldHVybiB0aGlzLmNoYXJ0LnVwZGF0ZU9wdGlvbnMob3B0aW9ucywgcmVkcmF3UGF0aHMsIGFuaW1hdGUpOwogICAgfQogICAgYXN5bmMgcmVzaXplQ2hhcnQoKSB7CiAgICAgIGlmICghdGhpcy5jaGFydCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5ERUJVR19SRVNJWkUpIHsKICAgICAgICBjb25zb2xlLmxvZygiRGVlc0NoYXJ0QXJlYSAtIHJlc2l6ZUNoYXJ0IGNhbGxlZCIpOwogICAgICB9CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgbWFpbmJveCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmJveCIpOwogICAgICAgIGNvbnN0IGNoYXJ0Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jaGFydENvbnRhaW5lciIpOwogICAgICAgIGlmICghbWFpbmJveCB8fCAhY2hhcnRDb250YWluZXIpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgdm9pZCBtYWluYm94Lm9mZnNldEhlaWdodDsKICAgICAgICBjb25zdCBzdHlsZUNoYXJ0Q29udGFpbmVyID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoY2hhcnRDb250YWluZXIpOwogICAgICAgIGNvbnN0IHBhZGRpbmdUb3AgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdUb3AsIDEwKTsKICAgICAgICBjb25zdCBwYWRkaW5nQm90dG9tID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nQm90dG9tLCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ0xlZnQgPSBwYXJzZUludChzdHlsZUNoYXJ0Q29udGFpbmVyLnBhZGRpbmdMZWZ0LCAxMCk7CiAgICAgICAgY29uc3QgcGFkZGluZ1JpZ2h0ID0gcGFyc2VJbnQoc3R5bGVDaGFydENvbnRhaW5lci5wYWRkaW5nUmlnaHQsIDEwKTsKICAgICAgICBjb25zdCBhY3R1YWxXaWR0aCA9IG1haW5ib3guY2xpZW50V2lkdGggLSBwYWRkaW5nTGVmdCAtIHBhZGRpbmdSaWdodDsKICAgICAgICBjb25zdCBhY3R1YWxIZWlnaHQgPSBtYWluYm94Lm9mZnNldEhlaWdodCAtIHBhZGRpbmdUb3AgLSBwYWRkaW5nQm90dG9tOwogICAgICAgIGlmIChhY3R1YWxXaWR0aCA+IDAgJiYgYWN0dWFsSGVpZ2h0ID4gMCkgewogICAgICAgICAgaWYgKHRoaXMuREVCVUdfUkVTSVpFKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJEZWVzQ2hhcnRBcmVhIC0gVXBkYXRpbmcgY2hhcnQgZGltZW5zaW9uczoiLCB7CiAgICAgICAgICAgICAgd2lkdGg6IGFjdHVhbFdpZHRoLAogICAgICAgICAgICAgIGhlaWdodDogYWN0dWFsSGVpZ2h0CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgICAgYXdhaXQgdGhpcy5jaGFydC51cGRhdGVPcHRpb25zKHsKICAgICAgICAgICAgY2hhcnQ6IHsKICAgICAgICAgICAgICB3aWR0aDogYWN0dWFsV2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBhY3R1YWxIZWlnaHQKICAgICAgICAgICAgfQogICAgICAgICAgfSwgdHJ1ZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gcmVzaXplIGNoYXJ0OiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgY2hhcnQgcmVzaXplLiBVc2VmdWwgd2hlbiBhdXRvbWF0aWMgZGV0ZWN0aW9uIGRvZXNuJ3Qgd29yay4KICAgICAqIFRoaXMgaXMgYSBjb252ZW5pZW5jZSBtZXRob2QgdGhhdCBjYW4gYmUgY2FsbGVkIGZyb20gb3V0c2lkZSB0aGUgY29tcG9uZW50LgogICAgICovCiAgICBhc3luYyBmb3JjZVJlc2l6ZSgpIHsKICAgICAgYXdhaXQgdGhpcy5yZXNpemVDaGFydCgpOwogICAgfQogICAgc3RhcnRBdXRvU2Nyb2xsKCkgewogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsVGltZXIpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5hdXRvU2Nyb2xsVGltZXIgPSB3aW5kb3cuc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlVGltZVdpbmRvdygpOwogICAgICB9LCB0aGlzLmF1dG9TY3JvbGxJbnRlcnZhbCk7CiAgICB9CiAgICBzdG9wQXV0b1Njcm9sbCgpIHsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbFRpbWVyKSB7CiAgICAgICAgd2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5hdXRvU2Nyb2xsVGltZXIpOwogICAgICAgIHRoaXMuYXV0b1Njcm9sbFRpbWVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlQ2hhcnRUaGVtZSgpIHsKICAgICAgaWYgKCF0aGlzLmNoYXJ0KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICBjb25zdCB0aGVtZSA9IGlzRGFyayA/ICJkYXJrIiA6ICJsaWdodCI7CiAgICAgIGF3YWl0IHRoaXMuY2hhcnQudXBkYXRlT3B0aW9ucyh7CiAgICAgICAgdGhlbWU6IHsKICAgICAgICAgIG1vZGU6IHRoZW1lCiAgICAgICAgfSwKICAgICAgICBjb2xvcnM6IGlzRGFyayA/IHRoaXMuQ0hBUlRfQ09MT1JTLmRhcmsgOiB0aGlzLkNIQVJUX0NPTE9SUy5saWdodCwKICAgICAgICB4YXhpczogewogICAgICAgICAgbGFiZWxzOiB7CiAgICAgICAgICAgIHN0eWxlOiB7CiAgICAgICAgICAgICAgY29sb3JzOiBbaXNEYXJrID8gImhzbCgwIDAlIDYzLjklKSIgOiAiaHNsKDAgMCUgMjAlKSJdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHlheGlzOiB7CiAgICAgICAgICBsYWJlbHM6IHsKICAgICAgICAgICAgc3R5bGU6IHsKICAgICAgICAgICAgICBjb2xvcnM6IFtpc0RhcmsgPyAiaHNsKDAgMCUgNjMuOSUpIiA6ICJoc2woMCAwJSAyMCUpIl0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgZ3JpZDogewogICAgICAgICAgYm9yZGVyQ29sb3I6IGlzRGFyayA/ICJoc2woMCAwJSAxNC45JSkiIDogImhzbCgwIDAlIDk0JSkiCiAgICAgICAgfSwKICAgICAgICBmaWxsOiB7CiAgICAgICAgICBncmFkaWVudDogewogICAgICAgICAgICBzaGFkZTogaXNEYXJrID8gImRhcmsiIDogImxpZ2h0IiwKICAgICAgICAgICAgb3BhY2l0eUZyb206IGlzRGFyayA/IDAuMiA6IDAuMwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ2KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hhcnRBcmVhMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtY2hhcnQvZGVlcy1jaGFydC1sb2cvZGVlcy1jaGFydC1sb2cuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzMyA9ICgpID0+IHsKICByZXR1cm4gYjJgCiAgICA8ZGVlcy1kZW1vd3JhcHBlciAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAoZWxlbWVudEFyZykgPT4gewogICAgY29uc3Qgc3RydWN0dXJlZExvZyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI3N0cnVjdHVyZWQtbG9nIik7CiAgICBjb25zdCByYXdMb2cgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNyYXctbG9nIik7CiAgICBsZXQgc3RydWN0dXJlZEludGVydmFsSWQ7CiAgICBsZXQgcmF3SW50ZXJ2YWxJZDsKICAgIGNvbnN0IHNlcnZlclNvdXJjZXMgPSBbIlNlcnZlciIsICJEYXRhYmFzZSIsICJBUEkiLCAiQXV0aCIsICJDYWNoZSIsICJRdWV1ZSIsICJXZWJTb2NrZXQiLCAiU2NoZWR1bGVyIl07CiAgICBjb25zdCBsb2dUZW1wbGF0ZXMgPSB7CiAgICAgIGRlYnVnOiBbCiAgICAgICAgIkxvYWRpbmcgbW9kdWxlOiB7e21vZHVsZX19IiwKICAgICAgICAiQ2FjaGUgaGl0IGZvciBrZXk6IHt7a2V5fX0iLAogICAgICAgICJTUUwgcXVlcnkgZXhlY3V0ZWQgaW4ge3t0aW1lfX1tcyIsCiAgICAgICAgIlJlcXVlc3QgaGVhZGVyczoge3toZWFkZXJzfX0iLAogICAgICAgICJFbnZpcm9ubWVudCB2YXJpYWJsZSBsb2FkZWQ6IHt7dmFyfX0iCiAgICAgIF0sCiAgICAgIGluZm86IFsKICAgICAgICAiUmVxdWVzdCByZWNlaXZlZDoge3ttZXRob2R9fSB7e3BhdGh9fSIsCiAgICAgICAgIlVzZXIge3t1c2VySWR9fSBhdXRoZW50aWNhdGVkIHN1Y2Nlc3NmdWxseSIsCiAgICAgICAgIlByb2Nlc3Npbmcgam9iIHt7am9iSWR9fSBmcm9tIHF1ZXVlIiwKICAgICAgICAnU2NoZWR1bGVkIHRhc2sgInt7dGFza319IiBzdGFydGVkJywKICAgICAgICAiV2ViU29ja2V0IGNvbm5lY3Rpb24gZXN0YWJsaXNoZWQgZnJvbSB7e2lwfX0iCiAgICAgIF0sCiAgICAgIHdhcm46IFsKICAgICAgICAiU2xvdyBxdWVyeSBkZXRlY3RlZDoge3txdWVyeX19ICh7e3RpbWV9fW1zKSIsCiAgICAgICAgIk1lbW9yeSB1c2FnZSBhdCB7e3BlcmNlbnR9fSUiLAogICAgICAgICJSYXRlIGxpbWl0IGFwcHJvYWNoaW5nIGZvciBJUCB7e2lwfX0iLAogICAgICAgICJEZXByZWNhdGVkIEFQSSBlbmRwb2ludCBjYWxsZWQ6IHt7ZW5kcG9pbnR9fSIsCiAgICAgICAgIkNlcnRpZmljYXRlIGV4cGlyZXMgaW4ge3tkYXlzfX0gZGF5cyIKICAgICAgXSwKICAgICAgZXJyb3I6IFsKICAgICAgICAiRGF0YWJhc2UgY29ubmVjdGlvbiBsb3N0OiB7e2Vycm9yfX0iLAogICAgICAgICJGYWlsZWQgdG8gcHJvY2VzcyByZXF1ZXN0OiB7e2Vycm9yfX0iLAogICAgICAgICJBdXRoZW50aWNhdGlvbiBmYWlsZWQgZm9yIHVzZXIge3t1c2VyfX0iLAogICAgICAgICJGaWxlIG5vdCBmb3VuZDoge3twYXRofX0iLAogICAgICAgICJTZXJ2aWNlIHVuYXZhaWxhYmxlOiB7e3NlcnZpY2V9fSIKICAgICAgXSwKICAgICAgc3VjY2VzczogWwogICAgICAgICJTZXJ2ZXIgc3RhcnRlZCBzdWNjZXNzZnVsbHkgb24gcG9ydCB7e3BvcnR9fSIsCiAgICAgICAgIkRhdGFiYXNlIG1pZ3JhdGlvbiBjb21wbGV0ZWQiLAogICAgICAgICJCYWNrdXAgY29tcGxldGVkOiB7e3NpemV9fSBNQiIsCiAgICAgICAgIlNTTCBjZXJ0aWZpY2F0ZSByZW5ld2VkIiwKICAgICAgICAiSGVhbHRoIGNoZWNrIHBhc3NlZDogYWxsIHN5c3RlbXMgb3BlcmF0aW9uYWwiCiAgICAgIF0KICAgIH07CiAgICBjb25zdCBkb2NrZXJMb2dUZW1wbGF0ZXMgPSBbCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuMTIzWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW25naW54XSBHRVQgL2FwaS9oZWFsdGggMjAwIC0gMm1zIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0NS40NTZaXHgxQlswbSBceDFCWzMzbVdBUk5ceDFCWzBtICBbcmVkaXNdIENvbm5lY3Rpb24gcG9vbCBydW5uaW5nIGxvdzogMy8xMCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDUuNzg5Wlx4MUJbMG0gXHgxQlszMW1FUlJPUlx4MUJbMG0gW21vbmdvZGJdIFF1ZXJ5IHRpbWVvdXQgYWZ0ZXIgMzAwMDBtcyIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMDEyWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW2FwcF0gUHJvY2Vzc2luZyBiYXRjaCBqb2IgI3t7am9iSWR9fSIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDYuMzQ1Wlx4MUJbMG0gXHgxQlszMm1PS1x4MUJbMG0gICAgW2hlYWx0aF0gQWxsIHNlcnZpY2VzIGhlYWx0aHkiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ2LjY3OFpceDFCWzBtIFx4MUJbMzZtSU5GT1x4MUJbMG0gIFtrYWZrYV0gTWVzc2FnZSBjb25zdW1lZCBmcm9tIHRvcGljOiBldmVudHMiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjAwMVpceDFCWzBtIFx4MUJbMzVtREVCVUdceDFCWzBtIFtncnBjXSBSZXF1ZXN0IHJlY2VpdmVkOiBHZXRVc2VyKGlkPXt7dXNlcklkfX0pIiwKICAgICAgIlx4MUJbOTBtMjAyNC0wMS0xNVQxMDoyMzo0Ny4yMzRaXHgxQlswbSBceDFCWzMxbUVSUk9SXHgxQlswbSBbYXV0aF0gVG9rZW4gdmFsaWRhdGlvbiBmYWlsZWQ6IGV4cGlyZWQiLAogICAgICAiXHgxQls5MG0yMDI0LTAxLTE1VDEwOjIzOjQ3LjU2N1pceDFCWzBtIFx4MUJbMzNtV0FSTlx4MUJbMG0gIFtyYXRlLWxpbWl0XSBJUCB7e2lwfX0gYXBwcm9hY2hpbmcgcmF0ZSBsaW1pdCIsCiAgICAgICJceDFCWzkwbTIwMjQtMDEtMTVUMTA6MjM6NDcuODkwWlx4MUJbMG0gXHgxQlszNm1JTkZPXHgxQlswbSAgW3dlYnNvY2tldF0gQ2xpZW50IGNvbm5lY3RlZDogc2Vzc2lvbj17e3Nlc3Npb259fSIsCiAgICAgIC8vIE11bHRpLWxpbmUgbG9nIGVudHJ5IGxpa2Ugc3RhY2sgdHJhY2VzCiAgICAgICJceDFCWzMxbUVycm9yOiBDb25uZWN0aW9uIHJlZnVzZWRceDFCWzBtXG4gICAgYXQgVGNwQ29ubmVjdGlvbi5jb25uZWN0ICgvYXBwL25vZGVfbW9kdWxlcy9wZy9saWIvY29ubmVjdGlvbi5qczoxMjoxNSlcbiAgICBhdCBQb29sLmNvbm5lY3QgKC9hcHAvbm9kZV9tb2R1bGVzL3BnL2xpYi9wb29sLmpzOjQ1OjIzKVxuICAgIGF0IGFzeW5jIERhdGFiYXNlU2VydmljZS5xdWVyeSAoL2FwcC9zcmMvZGIvc2VydmljZS50czo4OToxMikiCiAgICBdOwogICAgY29uc3QgZ2VuZXJhdGVSYW5kb21Mb2cgPSAoKSA9PiB7CiAgICAgIGNvbnN0IGxldmVscyA9IFsiZGVidWciLCAiaW5mbyIsICJ3YXJuIiwgImVycm9yIiwgInN1Y2Nlc3MiXTsKICAgICAgY29uc3Qgd2VpZ2h0cyA9IFswLjIsIDAuNSwgMC4xNSwgMC4xLCAwLjA1XTsKICAgICAgY29uc3QgcmFuZG9tID0gTWF0aC5yYW5kb20oKTsKICAgICAgbGV0IGN1bXVsYXRpdmUgPSAwOwogICAgICBsZXQgbGV2ZWwgPSAiaW5mbyI7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdlaWdodHMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGN1bXVsYXRpdmUgKz0gd2VpZ2h0c1tpMTFdOwogICAgICAgIGlmIChyYW5kb20gPCBjdW11bGF0aXZlKSB7CiAgICAgICAgICBsZXZlbCA9IGxldmVsc1tpMTFdOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHNvdXJjZSA9IHNlcnZlclNvdXJjZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogc2VydmVyU291cmNlcy5sZW5ndGgpXTsKICAgICAgY29uc3QgdGVtcGxhdGVzID0gbG9nVGVtcGxhdGVzW2xldmVsXTsKICAgICAgY29uc3QgdGVtcGxhdGUgPSB0ZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBtZXNzYWdlMiA9IHRlbXBsYXRlLnJlcGxhY2UoInt7bW9kdWxlfX0iLCBbImV4cHJlc3MiLCAibW9uZ29vc2UiLCAicmVkaXMiLCAic29ja2V0LmlvIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2tleX19IiwgInVzZXI6IiArIE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDFlMykpLnJlcGxhY2UoInt7dGltZX19IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDUwMCkgKyA1MCkpLnJlcGxhY2UoInt7aGVhZGVyc319IiwgIkNvbnRlbnQtVHlwZTogYXBwbGljYXRpb24vanNvbiwgQXV0aG9yaXphdGlvbjogQmVhcmVyIC4uLiIpLnJlcGxhY2UoInt7dmFyfX0iLCBbIk5PREVfRU5WIiwgIkRBVEFCQVNFX1VSTCIsICJBUElfS0VZIiwgIlBPUlQiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7bWV0aG9kfX0iLCBbIkdFVCIsICJQT1NUIiwgIlBVVCIsICJERUxFVEUiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7cGF0aH19IiwgWyIvYXBpL3VzZXJzIiwgIi9hcGkvYXV0aC9sb2dpbiIsICIvYXBpL3Byb2R1Y3RzIiwgIi9oZWFsdGgiXVtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA0KV0pLnJlcGxhY2UoInt7dXNlcklkfX0iLCBTdHJpbmcoTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMWU0KSkpLnJlcGxhY2UoInt7am9iSWR9fSIsICJqb2JfIiArIE1hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCAxMSkpLnJlcGxhY2UoInt7dGFza319IiwgWyJjbGVhbnVwIiwgImJhY2t1cCIsICJyZXBvcnQtZ2VuZXJhdGlvbiIsICJjYWNoZS1yZWZyZXNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogNCldKS5yZXBsYWNlKCJ7e2lwfX0iLCBgMTkyLjE2OC4xLiR7TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMjU1KX1gKS5yZXBsYWNlKCJ7e3F1ZXJ5fX0iLCAiU0VMRUNUICogRlJPTSB1c2VycyBXSEVSRSAuLi4iKS5yZXBsYWNlKCJ7e3BlcmNlbnR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAzMCkgKyA3MCkpLnJlcGxhY2UoInt7ZW5kcG9pbnR9fSIsICIvYXBpL3YxL2xlZ2FjeSIpLnJlcGxhY2UoInt7ZGF5c319IiwgU3RyaW5nKE1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDMwKSArIDEpKS5yZXBsYWNlKCJ7e2Vycm9yfX0iLCBbIkVDT05OUkVGVVNFRCIsICJFVElNRURPVVQiLCAiRU5PVEZPVU5EIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3VzZXJ9fSIsICJ1c2VyXyIgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpKS5yZXBsYWNlKCJ7e3NlcnZpY2V9fSIsIFsiUmVkaXMiLCAiTW9uZ29EQiIsICJFbGFzdGljU2VhcmNoIl1bTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogMyldKS5yZXBsYWNlKCJ7e3BvcnR9fSIsIFN0cmluZygzZTMgKyBNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxMCkpKS5yZXBsYWNlKCJ7e3NpemV9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiA1MDApICsgMTAwKSk7CiAgICAgIHN0cnVjdHVyZWRMb2cuYWRkTG9nKGxldmVsLCBtZXNzYWdlMiwgc291cmNlKTsKICAgIH07CiAgICBjb25zdCBnZW5lcmF0ZURvY2tlckxvZyA9ICgpID0+IHsKICAgICAgY29uc3QgdGVtcGxhdGUgPSBkb2NrZXJMb2dUZW1wbGF0ZXNbTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogZG9ja2VyTG9nVGVtcGxhdGVzLmxlbmd0aCldOwogICAgICBjb25zdCBub3cyID0gKC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpOwogICAgICBjb25zdCBsb2dMaW5lID0gdGVtcGxhdGUucmVwbGFjZSgvMjAyNC0wMS0xNVQxMDoyMzpcZHsyfVwuXGR7M31aL2csIG5vdzIpLnJlcGxhY2UoInt7am9iSWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3t1c2VySWR9fSIsIFN0cmluZyhNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTQpKSkucmVwbGFjZSgie3tpcH19IiwgYDE5Mi4xNjguMS4ke01hdGguZmxvb3IoTWF0aC5yYW5kb20oKSAqIDI1NSl9YCkucmVwbGFjZSgie3tzZXNzaW9ufX0iLCBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgMTEpKTsKICAgICAgcmF3TG9nLndyaXRlbG5SYXcobG9nTGluZSk7CiAgICB9OwogICAgY29uc3Qgc3RhcnRTdHJ1Y3R1cmVkU2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIGNvbnN0IHNjaGVkdWxlTmV4dCA9ICgpID0+IHsKICAgICAgICAgIGdlbmVyYXRlUmFuZG9tTG9nKCk7CiAgICAgICAgICBjb25zdCBuZXh0RGVsYXkgPSBNYXRoLnJhbmRvbSgpICogMmUzICsgNTAwOwogICAgICAgICAgc3RydWN0dXJlZEludGVydmFsSWQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wU3RydWN0dXJlZFNpbXVsYXRpb24gPSAoKSA9PiB7CiAgICAgIGlmIChzdHJ1Y3R1cmVkSW50ZXJ2YWxJZCkgewogICAgICAgIHdpbmRvdy5jbGVhclRpbWVvdXQoc3RydWN0dXJlZEludGVydmFsSWQpOwogICAgICAgIHN0cnVjdHVyZWRJbnRlcnZhbElkID0gbnVsbDsKICAgICAgfQogICAgfTsKICAgIGNvbnN0IHN0YXJ0UmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKCFyYXdJbnRlcnZhbElkKSB7CiAgICAgICAgY29uc3Qgc2NoZWR1bGVOZXh0ID0gKCkgPT4gewogICAgICAgICAgZ2VuZXJhdGVEb2NrZXJMb2coKTsKICAgICAgICAgIGNvbnN0IG5leHREZWxheSA9IE1hdGgucmFuZG9tKCkgKiAxZTMgKyAyMDA7CiAgICAgICAgICByYXdJbnRlcnZhbElkID0gd2luZG93LnNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAocmF3SW50ZXJ2YWxJZCkgewogICAgICAgICAgICAgIHNjaGVkdWxlTmV4dCgpOwogICAgICAgICAgICB9CiAgICAgICAgICB9LCBuZXh0RGVsYXkpOwogICAgICAgIH07CiAgICAgICAgc2NoZWR1bGVOZXh0KCk7CiAgICAgIH0KICAgIH07CiAgICBjb25zdCBzdG9wUmF3U2ltdWxhdGlvbiA9ICgpID0+IHsKICAgICAgaWYgKHJhd0ludGVydmFsSWQpIHsKICAgICAgICB3aW5kb3cuY2xlYXJUaW1lb3V0KHJhd0ludGVydmFsSWQpOwogICAgICAgIHJhd0ludGVydmFsSWQgPSBudWxsOwogICAgICB9CiAgICB9OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJBZGQgU3RydWN0dXJlZCBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVSYW5kb21Mb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBTdHJ1Y3R1cmVkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHN0YXJ0U3RydWN0dXJlZFNpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdG9wIFN0cnVjdHVyZWQiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFN0cnVjdHVyZWRTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIERvY2tlciBMb2ciOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gZ2VuZXJhdGVEb2NrZXJMb2coKSk7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJTdGFydCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RhcnRSYXdTaW11bGF0aW9uKCkpOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiU3RvcCBEb2NrZXIiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gc3RvcFJhd1NpbXVsYXRpb24oKSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgfX0+CiAgICAgIDxzdHlsZT4KICAgICAgICAke2lgCiAgICAgICAgICAuZGVtb0JveCB7CiAgICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICB9CiAgICAgICAgICAuc2VjdGlvbiB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMTJweDsKICAgICAgICAgIH0KICAgICAgICAgIC5zZWN0aW9uLXRpdGxlIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgICAgfQogICAgICAgICAgLnNlY3Rpb24tZGVzY3JpcHRpb24gewogICAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgIH0KICAgICAgICAgIC5jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGdhcDogMTBweDsKICAgICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgfQogICAgICAgIGB9CiAgICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkZW1vQm94Ij4KICAgICAgPCEtLSBTdHJ1Y3R1cmVkIExvZ3MgU2VjdGlvbiAtLT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3RydWN0dXJlZCBMb2dzIChJTG9nRW50cnkpPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBTdHJ1Y3R1cmVkIGxvZyBlbnRyaWVzIHdpdGggbGV2ZWwsIG1lc3NhZ2UsIGFuZCBzb3VyY2UuIFN1cHBvcnRzIHNlYXJjaCBhbmQga2V5d29yZCBoaWdobGlnaHRpbmcuCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbHMiPgogICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBTdHJ1Y3R1cmVkIExvZzwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RhcnQgU3RydWN0dXJlZDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBTdHJ1Y3R1cmVkPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGVlcy1jaGFydC1sb2cKICAgICAgICAgIGlkPSJzdHJ1Y3R1cmVkLWxvZyIKICAgICAgICAgIC5sYWJlbD0keyJQcm9kdWN0aW9uIFNlcnZlciBMb2dzIn0KICAgICAgICAgIC5oaWdobGlnaHRLZXl3b3Jkcz0ke1siZXJyb3IiLCAiZmFpbGVkIiwgInRpbWVvdXQiXX0KICAgICAgICAgIC5zaG93TWV0cmljcz0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1jaGFydC1sb2c+CiAgICAgIDwvZGl2PgoKICAgICAgPCEtLSBSYXcgTG9ncyBTZWN0aW9uIC0tPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5SYXcgTG9ncyAoRG9ja2VyL0NvbnRhaW5lciBTdHlsZSk8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFJhdyBsb2cgb3V0cHV0IHdpdGggQU5TSSBlc2NhcGUgc2VxdWVuY2VzIGZvciByZWFsIERvY2tlci9jb250YWluZXIgbG9ncy4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24+QWRkIERvY2tlciBMb2c8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPGRlZXMtYnV0dG9uPlN0YXJ0IERvY2tlcjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8ZGVlcy1idXR0b24+U3RvcCBEb2NrZXI8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkZWVzLWNoYXJ0LWxvZwogICAgICAgICAgaWQ9InJhdy1sb2ciCiAgICAgICAgICAubGFiZWw9JHsiRG9ja2VyIENvbnRhaW5lciBMb2dzIn0KICAgICAgICAgIC5tb2RlPSR7InJhdyJ9CiAgICAgICAgICAuc2hvd01ldHJpY3M9JHtmYWxzZX0KICAgICAgICA+PC9kZWVzLWNoYXJ0LWxvZz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWNoYXJ0L2RlZXMtY2hhcnQtbG9nL2RlZXMtY2hhcnQtbG9nLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNDYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzQ2hhcnRMb2cgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWNoYXJ0LWxvZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2xhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9sYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9tb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9nRW50cmllc19kZWNvcmF0b3JzOwogIGxldCBfbG9nRW50cmllc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvZ0VudHJpZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2F1dG9TY3JvbGxfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hdXRvU2Nyb2xsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhFbnRyaWVzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhFbnRyaWVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RW50cmllc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodEtleXdvcmRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TWV0cmljc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dNZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzOwogIGxldCBfc2VhcmNoUXVlcnlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyTW9kZV9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyTW9kZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlck1vZGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzQ2hhcnRMb2cyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGFiZWxfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX21vZGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9sb2dFbnRyaWVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEVudHJpZXNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9oaWdobGlnaHRLZXl3b3Jkc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2VhcmNoUXVlcnlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX21ldHJpY3NfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3Rlcm1pbmFsUmVhZHlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYWJlbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFiZWxfaW5pdGlhbGl6ZXJzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbW9kZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kZV9pbml0aWFsaXplcnMsIF9tb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2xvZ0VudHJpZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9nRW50cmllcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9nRW50cmllcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2dFbnRyaWVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2dFbnRyaWVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvZ0VudHJpZXNfaW5pdGlhbGl6ZXJzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9hdXRvU2Nyb2xsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImF1dG9TY3JvbGwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TY3JvbGwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYXV0b1Njcm9sbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYXV0b1Njcm9sbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2Nyb2xsX2luaXRpYWxpemVycywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfbWF4RW50cmllc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXhFbnRyaWVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhFbnRyaWVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEVudHJpZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1heEVudHJpZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RW50cmllc19pbml0aWFsaXplcnMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2hpZ2hsaWdodEtleXdvcmRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImhpZ2hsaWdodEtleXdvcmRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoaWdobGlnaHRLZXl3b3JkcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5oaWdobGlnaHRLZXl3b3Jkcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaGlnaGxpZ2h0S2V5d29yZHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBfaGlnaGxpZ2h0S2V5d29yZHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfc2hvd01ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd01ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dNZXRyaWNzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dNZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93TWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TWV0cmljc19pbml0aWFsaXplcnMsIF9zaG93TWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9zZWFyY2hRdWVyeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWFyY2hRdWVyeSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2VhcmNoUXVlcnkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VhcmNoUXVlcnksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlYXJjaFF1ZXJ5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3NlYXJjaFF1ZXJ5X2luaXRpYWxpemVycywgX3NlYXJjaFF1ZXJ5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYodGhpcywgbnVsbCwgX2ZpbHRlck1vZGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyTW9kZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZmlsdGVyTW9kZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5maWx0ZXJNb2RlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXJNb2RlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBfZmlsdGVyTW9kZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ2KHRoaXMsIG51bGwsIF9tZXRyaWNzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1ldHJpY3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1ldHJpY3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWV0cmljcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWV0cmljcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXRyaWNzX2luaXRpYWxpemVycywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nih0aGlzLCBudWxsLCBfdGVybWluYWxSZWFkeV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFJlYWR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0ZXJtaW5hbFJlYWR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsUmVhZHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsUmVhZHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGVybWluYWxSZWFkeV9pbml0aWFsaXplcnMsIF90ZXJtaW5hbFJlYWR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzQ2hhcnRMb2cyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzMzsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiQ2hhcnQiOwogICAgI2xhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sYWJlbF9pbml0aWFsaXplcnMsICJTZXJ2ZXIgTG9ncyIpOwogICAgZ2V0IGxhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYWJlbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tb2RlX2luaXRpYWxpemVycywgInN0cnVjdHVyZWQiKSk7CiAgICBnZXQgbW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNtb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21vZGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9sb2dFbnRyaWVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBsb2dFbnRyaWVzKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9nRW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvZ0VudHJpZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvZ0VudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbG9nRW50cmllc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYXV0b1Njcm9sbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TY3JvbGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhdXRvU2Nyb2xsKHZhbHVlMikgewogICAgICB0aGlzLiNhdXRvU2Nyb2xsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RW50cmllc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2F1dG9TY3JvbGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2luaXRpYWxpemVycywgMWU0KSk7CiAgICBnZXQgbWF4RW50cmllcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21heEVudHJpZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtYXhFbnRyaWVzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhFbnRyaWVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9tYXhFbnRyaWVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfaGlnaGxpZ2h0S2V5d29yZHNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGhpZ2hsaWdodEtleXdvcmRzKCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRLZXl3b3Jkcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0S2V5d29yZHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2hpZ2hsaWdodEtleXdvcmRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd01ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dNZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93TWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlYXJjaFF1ZXJ5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfc2hvd01ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgc2VhcmNoUXVlcnkoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlYXJjaFF1ZXJ5KHZhbHVlMikgewogICAgICB0aGlzLiNzZWFyY2hRdWVyeV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2ZpbHRlck1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9zZWFyY2hRdWVyeV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX2ZpbHRlck1vZGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGZpbHRlck1vZGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWx0ZXJNb2RlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsdGVyTW9kZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyTW9kZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF9maWx0ZXJNb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfbWV0cmljc19pbml0aWFsaXplcnMsIHsgZGVidWc6IDAsIGluZm86IDAsIHdhcm46IDAsIGVycm9yOiAwLCBzdWNjZXNzOiAwLCB0b3RhbDogMCwgcmF0ZTogMCB9KSk7CiAgICBnZXQgbWV0cmljcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI21ldHJpY3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZXRyaWNzKHZhbHVlMikgewogICAgICB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDcodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczQ3KHRoaXMsIF90ZXJtaW5hbFJlYWR5X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCB0ZXJtaW5hbFJlYWR5KCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxSZWFkeV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsUmVhZHkodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Rlcm1pbmFsUmVhZHlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIEJ1ZmZlciBvZiBhbGwgbG9nIGVudHJpZXMgZm9yIGZpbHRlciBtb2RlCiAgICBsb2dCdWZmZXIgPSAoX19ydW5Jbml0aWFsaXplcnM0Nyh0aGlzLCBfdGVybWluYWxSZWFkeV9leHRyYUluaXRpYWxpemVycyksIFtdKTsKICAgIC8vIFRyYWNrIHRyYWlsaW5nIGhpZGRlbiBlbnRyaWVzIGNvdW50IGZvciBsaXZlIHVwZGF0ZXMgaW4gZmlsdGVyIG1vZGUKICAgIHRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgLy8geHRlcm0gaW5zdGFuY2VzCiAgICB0ZXJtaW5hbCA9IG51bGw7CiAgICBmaXRBZGRvbiA9IG51bGw7CiAgICBzZWFyY2hBZGRvbiA9IG51bGw7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIGRvbXRvb2xzSW5zdGFuY2UgPSBudWxsOwogICAgLy8gUmF0ZSBjYWxjdWxhdGlvbgogICAgcmF0ZUJ1ZmZlciA9IFtdOwogICAgcmF0ZUludGVydmFsID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiA0MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICB9CgogICAgICAudGl0bGUgewogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk1JSkiKX07CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMTUwcHg7CiAgICAgICAgbWF4LXdpZHRoOiAzMDBweDsKICAgICAgfQoKICAgICAgLnNlYXJjaC1ib3ggaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICB9CgogICAgICAuc2VhcmNoLWJveCBpbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2gtbmF2IGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNHB4IDZweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBsaW5lLWhlaWdodDogMTsKICAgICAgfQoKICAgICAgLnNlYXJjaC1uYXYgYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQoKICAgICAgLmZpbHRlci10b2dnbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuZmlsdGVyLXRvZ2dsZS5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgOTMlIDQ3JSkiLCAiaHNsKDQ1IDkzJSA0NyUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCg0NSA5MyUgNDclKSIsICJoc2woNDUgOTMlIDQ3JSkiKX07CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDklKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCAxMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29udHJvbC1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBjb2xvcjogd2hpdGU7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDMuOSUpIil9OwogICAgICB9CgogICAgICAudGVybWluYWwtY29udGFpbmVyIC54dGVybSB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLm1ldHJpY3MtYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubWV0cmljIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5tZXRyaWM6OmJlZm9yZSB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZXJyb3I6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgODQuMiUgNjAuMiUpOwogICAgICB9CgogICAgICAubWV0cmljLndhcm46OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDI1IDk1JSA1MyUpOwogICAgICB9CgogICAgICAubWV0cmljLmluZm86OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5zdWNjZXNzOjpiZWZvcmUgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgxNDIuMSA3Ni4yJSAzNi4zJSk7CiAgICAgIH0KCiAgICAgIC5tZXRyaWMuZGVidWc6OmJlZm9yZSB7CiAgICAgICAgYmFja2dyb3VuZDogaHNsKDAgMCUgNjMuOSUpOwogICAgICB9CgogICAgICAubWV0cmljLnJhdGUgewogICAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLm1ldHJpYy5yYXRlOjpiZWZvcmUgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0idGl0bGUiPiR7dGhpcy5sYWJlbH08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaC1ib3giPgogICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJTZWFyY2ggbG9ncy4uLiIKICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLnNlYXJjaFF1ZXJ5fQogICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoSW5wdXQoZTExKX0KICAgICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IHRoaXMuaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpfQogICAgICAgICAgICAvPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWFyY2gtbmF2Ij4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoUHJldmlvdXMoKX0gdGl0bGU9IlByZXZpb3VzIG1hdGNoIj7ihpE8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0keygpID0+IHRoaXMuc2VhcmNoTmV4dCgpfSB0aXRsZT0iTmV4dCBtYXRjaCI+4oaTPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImZpbHRlci10b2dnbGUgJHt0aGlzLmZpbHRlck1vZGUgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnRvZ2dsZUZpbHRlck1vZGUoKX0KICAgICAgICAgICAgICB0aXRsZT0iJHt0aGlzLmZpbHRlck1vZGUgPyAiU3dpdGNoIHRvIGhpZ2hsaWdodCBtb2RlIiA6ICJTd2l0Y2ggdG8gZmlsdGVyIG1vZGUifSIKICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5maWx0ZXJNb2RlID8gIkZpbHRlciIgOiAiSGlnaGxpZ2h0In0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbnRyb2xzIj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJjb250cm9sLWJ1dHRvbiAke3RoaXMuYXV0b1Njcm9sbCA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMudG9nZ2xlQXV0b1Njcm9sbCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQXV0byBTY3JvbGwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvbnRyb2wtYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNsZWFyTG9ncygpfT4KICAgICAgICAgICAgICBDbGVhcgogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJ0ZXJtaW5hbC1jb250YWluZXIiPgogICAgICAgICAgJHshdGhpcy50ZXJtaW5hbFJlYWR5ID8gYjJgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZyB0ZXJtaW5hbC4uLjwvZGl2PmAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnNob3dNZXRyaWNzID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibWV0cmljcy1iYXIiPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBlcnJvciI+ZXJyb3JzOiAke3RoaXMubWV0cmljcy5lcnJvcn08L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHdhcm4iPndhcm5zOiAke3RoaXMubWV0cmljcy53YXJufTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgaW5mbyI+aW5mbzogJHt0aGlzLm1ldHJpY3MuaW5mb308L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0cmljIHN1Y2Nlc3MiPnN1Y2Nlc3M6ICR7dGhpcy5tZXRyaWNzLnN1Y2Nlc3N9PC9zcGFuPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im1ldHJpYyBkZWJ1ZyI+ZGVidWc6ICR7dGhpcy5tZXRyaWNzLmRlYnVnfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRyaWMgcmF0ZSI+JHt0aGlzLm1ldHJpY3MucmF0ZS50b0ZpeGVkKDEpfSBsb2dzL3NlYzwvc3Bhbj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmluaXRpYWxpemVUZXJtaW5hbCgpOwogICAgICBpZiAodGhpcy5sb2dFbnRyaWVzLmxlbmd0aCA+IDApIHsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nRW50cmllcykgewogICAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGluaXRpYWxpemVUZXJtaW5hbCgpIHsKICAgICAgY29uc3QgbGliTG9hZGVyID0gRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKTsKICAgICAgY29uc3QgW3h0ZXJtQnVuZGxlLCBmaXRCdW5kbGUsIHNlYXJjaEJ1bmRsZV0gPSBhd2FpdCBQcm9taXNlLmFsbChbCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybSgpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1GaXRBZGRvbigpLAogICAgICAgIGxpYkxvYWRlci5sb2FkWHRlcm1TZWFyY2hBZGRvbigpCiAgICAgIF0pOwogICAgICBhd2FpdCB0aGlzLmluamVjdFh0ZXJtU3R5bGVzSW50b1NoYWRvdygpOwogICAgICB0aGlzLnRlcm1pbmFsID0gbmV3IHh0ZXJtQnVuZGxlLlRlcm1pbmFsKHsKICAgICAgICBjdXJzb3JCbGluazogZmFsc2UsCiAgICAgICAgZGlzYWJsZVN0ZGluOiB0cnVlLAogICAgICAgIGZvbnRTaXplOiAxMiwKICAgICAgICBmb250RmFtaWx5OiAiJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0xpYmVyYXRpb24gTW9ubycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZSIsCiAgICAgICAgdGhlbWU6IHRoaXMuZ2V0VGVybWluYWxUaGVtZSgpLAogICAgICAgIHNjcm9sbGJhY2s6IHRoaXMubWF4RW50cmllcywKICAgICAgICBjb252ZXJ0RW9sOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEJ1bmRsZS5GaXRBZGRvbigpOwogICAgICB0aGlzLnNlYXJjaEFkZG9uID0gbmV3IHNlYXJjaEJ1bmRsZS5TZWFyY2hBZGRvbigpOwogICAgICB0aGlzLnRlcm1pbmFsLmxvYWRBZGRvbih0aGlzLmZpdEFkZG9uKTsKICAgICAgdGhpcy50ZXJtaW5hbC5sb2FkQWRkb24odGhpcy5zZWFyY2hBZGRvbik7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIudGVybWluYWwtY29udGFpbmVyIik7CiAgICAgIHRoaXMudGVybWluYWwub3Blbihjb250YWluZXIpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICB0aGlzLmZpdEFkZG9uLmZpdCgpOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICB0aGlzLmZpdEFkZG9uPy5maXQoKTsKICAgICAgfSk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIub2JzZXJ2ZShjb250YWluZXIpOwogICAgICB0aGlzLnRlcm1pbmFsVGhlbWVTdWJzY3JpcHRpb24gPSB0aGlzLmRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLnRoZW1lT2JzZXJ2YWJsZS5zdWJzY3JpYmUoKCkgPT4gewogICAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLm9wdGlvbnMudGhlbWUgPSB0aGlzLmdldFRlcm1pbmFsVGhlbWUoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnJhdGVJbnRlcnZhbCA9IHNldEludGVydmFsKCgpID0+IHRoaXMuY2FsY3VsYXRlUmF0ZSgpLCAxZTMpOwogICAgICB0aGlzLnRlcm1pbmFsUmVhZHkgPSB0cnVlOwogICAgfQogICAgZ2V0VGVybWluYWxUaGVtZSgpIHsKICAgICAgY29uc3QgaXNEYXJrID0gdGhpcy5kb210b29sc0luc3RhbmNlPy50aGVtZU1hbmFnZXI/LmlzRGFya01vZGUgPz8gdHJ1ZTsKICAgICAgcmV0dXJuIGlzRGFyayA/IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzBhMGEwYSIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNlMGUwZTAiLAogICAgICAgIGN1cnNvcjogIiNlMGUwZTAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICIjNDA0MDQwIiwKICAgICAgICBibGFjazogIiMwMDAwMDAiLAogICAgICAgIHJlZDogIiNmZjU1NTUiLAogICAgICAgIGdyZWVuOiAiIzUwZmE3YiIsCiAgICAgICAgeWVsbG93OiAiI2YxZmE4YyIsCiAgICAgICAgYmx1ZTogIiM2MjcyYTQiLAogICAgICAgIG1hZ2VudGE6ICIjZmY3OWM2IiwKICAgICAgICBjeWFuOiAiIzhiZTlmZCIsCiAgICAgICAgd2hpdGU6ICIjZjhmOGYyIiwKICAgICAgICBicmlnaHRCbGFjazogIiM2MjcyYTQiLAogICAgICAgIGJyaWdodFJlZDogIiNmZjZlNmUiLAogICAgICAgIGJyaWdodEdyZWVuOiAiIzY5ZmY5NCIsCiAgICAgICAgYnJpZ2h0WWVsbG93OiAiI2ZmZmZhNSIsCiAgICAgICAgYnJpZ2h0Qmx1ZTogIiNkNmFjZmYiLAogICAgICAgIGJyaWdodE1hZ2VudGE6ICIjZmY5MmRmIiwKICAgICAgICBicmlnaHRDeWFuOiAiI2E0ZmZmZiIsCiAgICAgICAgYnJpZ2h0V2hpdGU6ICIjZmZmZmZmIgogICAgICB9IDogewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogIiNhZGQ2ZmYiLAogICAgICAgIGJsYWNrOiAiIzAwMDAwMCIsCiAgICAgICAgcmVkOiAiI2NkMzEzMSIsCiAgICAgICAgZ3JlZW46ICIjMDBiYzAwIiwKICAgICAgICB5ZWxsb3c6ICIjOTQ5ODAwIiwKICAgICAgICBibHVlOiAiIzA0NTFhNSIsCiAgICAgICAgbWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGN5YW46ICIjMDU5OGJjIiwKICAgICAgICB3aGl0ZTogIiM1NTU1NTUiLAogICAgICAgIGJyaWdodEJsYWNrOiAiIzY2NjY2NiIsCiAgICAgICAgYnJpZ2h0UmVkOiAiI2NkMzEzMSIsCiAgICAgICAgYnJpZ2h0R3JlZW46ICIjMTRjZTE0IiwKICAgICAgICBicmlnaHRZZWxsb3c6ICIjYjViYTAwIiwKICAgICAgICBicmlnaHRCbHVlOiAiIzA0NTFhNSIsCiAgICAgICAgYnJpZ2h0TWFnZW50YTogIiNiYzA1YmMiLAogICAgICAgIGJyaWdodEN5YW46ICIjMDU5OGJjIiwKICAgICAgICBicmlnaHRXaGl0ZTogIiNhNWE1YTUiCiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIEluamVjdCB4dGVybSBDU1Mgc3R5bGVzIGludG8gc2hhZG93IHJvb3QKICAgICAqIFRoaXMgaXMgbmVlZGVkIGJlY2F1c2Ugc2hhZG93IERPTSBkb2Vzbid0IGluaGVyaXQgc3R5bGVzIGZyb20gZG9jdW1lbnQuaGVhZAogICAgICovCiAgICBhc3luYyBpbmplY3RYdGVybVN0eWxlc0ludG9TaGFkb3coKSB7CiAgICAgIGNvbnN0IHN0eWxlSWQgPSAieHRlcm0tc2hhZG93LXN0eWxlcyI7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QuZ2V0RWxlbWVudEJ5SWQoc3R5bGVJZCkpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgY3NzVXJsID0gYCR7Q0ROX0JBU0V9L3h0ZXJtQCR7Q0ROX1ZFUlNJT05TLnh0ZXJtfS9jc3MveHRlcm0uY3NzYDsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaChjc3NVcmwpOwogICAgICBjb25zdCBjc3NUZXh0ID0gYXdhaXQgcmVzcG9uc2UudGV4dCgpOwogICAgICBjb25zdCBzdHlsZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7CiAgICAgIHN0eWxlLmlkID0gc3R5bGVJZDsKICAgICAgc3R5bGUudGV4dENvbnRlbnQgPSBjc3NUZXh0OwogICAgICB0aGlzLnNoYWRvd1Jvb3QuYXBwZW5kQ2hpbGQoc3R5bGUpOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBTdHJ1Y3R1cmVkIExvZyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8qKgogICAgICogQWRkIGEgc2luZ2xlIHN0cnVjdHVyZWQgbG9nIGVudHJ5CiAgICAgKi8KICAgIGFkZExvZyhsZXZlbCwgbWVzc2FnZTIsIHNvdXJjZSkgewogICAgICBjb25zdCBlbnRyeSA9IHsKICAgICAgICB0aW1lc3RhbXA6ICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSwKICAgICAgICBsZXZlbCwKICAgICAgICBtZXNzYWdlOiBtZXNzYWdlMiwKICAgICAgICBzb3VyY2UKICAgICAgfTsKICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgIGlmICh0aGlzLmxvZ0J1ZmZlci5sZW5ndGggPiB0aGlzLm1heEVudHJpZXMpIHsKICAgICAgICB0aGlzLmxvZ0J1ZmZlci5zaGlmdCgpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgdGhpcy53cml0ZUxvZ0VudHJ5KGVudHJ5KTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICB0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQgPSAwOwogICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy51cGRhdGVUcmFpbGluZ1BsYWNlaG9sZGVyKCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgIH0KICAgIC8qKgogICAgICogQWRkIG11bHRpcGxlIHN0cnVjdHVyZWQgbG9nIGVudHJpZXMKICAgICAqLwogICAgdXBkYXRlTG9nKGVudHJpZXMpIHsKICAgICAgaWYgKCFlbnRyaWVzKQogICAgICAgIHJldHVybjsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgdGhpcy5sb2dCdWZmZXIucHVzaChlbnRyeSk7CiAgICAgICAgaWYgKHRoaXMubG9nQnVmZmVyLmxlbmd0aCA+IHRoaXMubWF4RW50cmllcykgewogICAgICAgICAgdGhpcy5sb2dCdWZmZXIuc2hpZnQoKTsKICAgICAgICB9CiAgICAgICAgaWYgKCF0aGlzLmZpbHRlck1vZGUgfHwgIXRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICAgIHRoaXMud3JpdGVMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkpIHsKICAgICAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgICAgICB0aGlzLndyaXRlTG9nRW50cnkoZW50cnkpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVRyYWlsaW5nUGxhY2Vob2xkZXIoKTsKICAgICAgICB9CiAgICAgICAgdGhpcy51cGRhdGVNZXRyaWNzKGVudHJ5LmxldmVsKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBVcGRhdGUgdGhlIHRyYWlsaW5nIGhpZGRlbiBwbGFjZWhvbGRlciBpbiByZWFsLXRpbWUKICAgICAqIENsZWFycyB0aGUgbGFzdCBsaW5lIGlmIGEgcGxhY2Vob2xkZXIgYWxyZWFkeSBleGlzdHMsIHRoZW4gd3JpdGVzIHVwZGF0ZWQgY291bnQKICAgICAqLwogICAgdXBkYXRlVHJhaWxpbmdQbGFjZWhvbGRlcigpIHsKICAgICAgaWYgKCF0aGlzLnRlcm1pbmFsKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA+IDApIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKCJceDFCWzFBXHgxQlsyS1xyIik7CiAgICAgIH0KICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50Kys7CiAgICAgIHRoaXMud3JpdGVIaWRkZW5QbGFjZWhvbGRlcih0aGlzLnRyYWlsaW5nSGlkZGVuQ291bnQpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENoZWNrIGlmIGEgbG9nIGVudHJ5IG1hdGNoZXMgdGhlIGN1cnJlbnQgZmlsdGVyCiAgICAgKi8KICAgIGVudHJ5TWF0Y2hlc0ZpbHRlcihlbnRyeSkgewogICAgICBpZiAoIXRoaXMuc2VhcmNoUXVlcnkpCiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNvbnN0IHF1ZXJ5ID0gdGhpcy5zZWFyY2hRdWVyeS50b0xvd2VyQ2FzZSgpOwogICAgICByZXR1cm4gZW50cnkubWVzc2FnZS50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCBlbnRyeS5sZXZlbC50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSB8fCAoZW50cnkuc291cmNlPy50b0xvd2VyQ2FzZSgpLmluY2x1ZGVzKHF1ZXJ5KSA/PyBmYWxzZSk7CiAgICB9CiAgICB3cml0ZUxvZ0VudHJ5KGVudHJ5KSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZvcm1hdHRlZCA9IHRoaXMuZm9ybWF0TG9nRW50cnkoZW50cnkpOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgaWYgKHRoaXMuYXV0b1Njcm9sbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgZm9ybWF0TG9nRW50cnkoZW50cnkpIHsKICAgICAgY29uc3QgdGltZXN0YW1wMiA9IHRoaXMuZm9ybWF0VGltZXN0YW1wKGVudHJ5LnRpbWVzdGFtcCk7CiAgICAgIGNvbnN0IGxldmVsQ29sb3JzID0gewogICAgICAgIGRlYnVnOiAiXHgxQls5MG0iLAogICAgICAgIC8vIEdyYXkKICAgICAgICBpbmZvOiAiXHgxQlszNm0iLAogICAgICAgIC8vIEN5YW4KICAgICAgICB3YXJuOiAiXHgxQlszM20iLAogICAgICAgIC8vIFllbGxvdwogICAgICAgIGVycm9yOiAiXHgxQlszMW0iLAogICAgICAgIC8vIFJlZAogICAgICAgIHN1Y2Nlc3M6ICJceDFCWzMybSIKICAgICAgICAvLyBHcmVlbgogICAgICB9OwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCBsZXZlbFN0ciA9IGAke2xldmVsQ29sb3JzW2VudHJ5LmxldmVsXX1bJHtlbnRyeS5sZXZlbC50b1VwcGVyQ2FzZSgpLnBhZEVuZCg3KX1dJHtyZXNldH1gOwogICAgICBjb25zdCBzb3VyY2VTdHIgPSBlbnRyeS5zb3VyY2UgPyBgJHtkaW19WyR7ZW50cnkuc291cmNlfV0ke3Jlc2V0fSBgIDogIiI7CiAgICAgIGNvbnN0IG1lc3NhZ2VTdHIgPSB0aGlzLmFwcGx5SGlnaGxpZ2h0cyhlbnRyeS5tZXNzYWdlKTsKICAgICAgcmV0dXJuIGAke2RpbX0ke3RpbWVzdGFtcDJ9JHtyZXNldH0gJHtsZXZlbFN0cn0gJHtzb3VyY2VTdHJ9JHttZXNzYWdlU3RyfWA7CiAgICB9CiAgICBmb3JtYXRUaW1lc3RhbXAoaXNvU3RyaW5nKSB7CiAgICAgIGNvbnN0IGRhdGUgPSBuZXcgRGF0ZShpc29TdHJpbmcpOwogICAgICByZXR1cm4gZGF0ZS50b0xvY2FsZVRpbWVTdHJpbmcoImVuLVVTIiwgewogICAgICAgIGhvdXIxMjogZmFsc2UsCiAgICAgICAgaG91cjogIjItZGlnaXQiLAogICAgICAgIG1pbnV0ZTogIjItZGlnaXQiLAogICAgICAgIHNlY29uZDogIjItZGlnaXQiLAogICAgICAgIGZyYWN0aW9uYWxTZWNvbmREaWdpdHM6IDMKICAgICAgfSk7CiAgICB9CiAgICBhcHBseUhpZ2hsaWdodHModGV4dDkpIHsKICAgICAgY29uc3Qga2V5d29yZHMgPSBbLi4udGhpcy5oaWdobGlnaHRLZXl3b3Jkc107CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgdGhpcy5zZWFyY2hRdWVyeSkgewogICAgICAgIGtleXdvcmRzLnB1c2godGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgICAgaWYgKGtleXdvcmRzLmxlbmd0aCA9PT0gMCkKICAgICAgICByZXR1cm4gdGV4dDk7CiAgICAgIGxldCByZXN1bHQgPSB0ZXh0OTsKICAgICAgZm9yIChjb25zdCBrZXl3b3JkIG9mIGtleXdvcmRzKSB7CiAgICAgICAgY29uc3QgZXNjYXBlZCA9IGtleXdvcmQucmVwbGFjZSgvWy4qKz9eJHt9KCl8W1xdXFxdL2csICJcXCQmIik7CiAgICAgICAgY29uc3QgcmVnZXggPSBuZXcgUmVnRXhwKGAoJHtlc2NhcGVkfSlgLCAiZ2kiKTsKICAgICAgICByZXN1bHQgPSByZXN1bHQucmVwbGFjZShyZWdleCwgIlx4MUJbNDNtXHgxQlszMG0kMVx4MUJbMG0iKTsKICAgICAgfQogICAgICByZXR1cm4gcmVzdWx0OwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSYXcgTG9nIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLyoqCiAgICAgKiBXcml0ZSByYXcgZGF0YSB0byB0aGUgdGVybWluYWwgKGZvciBEb2NrZXIgbG9ncywgZXRjLikKICAgICAqLwogICAgd3JpdGVSYXcoZGF0YSkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLndyaXRlKGRhdGEpOwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSByYXcgbGluZSB0byB0aGUgdGVybWluYWwKICAgICAqLwogICAgd3JpdGVsblJhdyhsaW5lKSB7CiAgICAgIGlmICghdGhpcy50ZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMudGVybWluYWwud3JpdGVsbihsaW5lKTsKICAgICAgdGhpcy5yZWNvcmRMb2dFdmVudCgpOwogICAgICBpZiAodGhpcy5hdXRvU2Nyb2xsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5zY3JvbGxUb0JvdHRvbSgpOwogICAgICB9CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFNlYXJjaCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIGhhbmRsZVNlYXJjaElucHV0KGUxMSkgewogICAgICBjb25zdCBpbnB1dCA9IGUxMS50YXJnZXQ7CiAgICAgIGNvbnN0IG5ld1F1ZXJ5ID0gaW5wdXQudmFsdWU7CiAgICAgIGNvbnN0IHF1ZXJ5Q2hhbmdlZCA9IHRoaXMuc2VhcmNoUXVlcnkgIT09IG5ld1F1ZXJ5OwogICAgICB0aGlzLnNlYXJjaFF1ZXJ5ID0gbmV3UXVlcnk7CiAgICAgIGlmICh0aGlzLmZpbHRlck1vZGUgJiYgcXVlcnlDaGFuZ2VkKSB7CiAgICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgaGFuZGxlU2VhcmNoS2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICB0aGlzLnNlYXJjaFByZXZpb3VzKCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VhcmNoTmV4dCgpOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIHRoaXMuc2VhcmNoUXVlcnkgPSAiIjsKICAgICAgICBlMTEudGFyZ2V0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogU2VhcmNoIGZvciBhIHF1ZXJ5IGluIHRoZSB0ZXJtaW5hbAogICAgICovCiAgICBzZWFyY2gocXVlcnkpIHsKICAgICAgdGhpcy5zZWFyY2hRdWVyeSA9IHF1ZXJ5OwogICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dChxdWVyeSk7CiAgICB9CiAgICAvKioKICAgICAqIEZpbmQgbmV4dCBzZWFyY2ggbWF0Y2gKICAgICAqLwogICAgc2VhcmNoTmV4dCgpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kTmV4dCh0aGlzLnNlYXJjaFF1ZXJ5KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBGaW5kIHByZXZpb3VzIHNlYXJjaCBtYXRjaAogICAgICovCiAgICBzZWFyY2hQcmV2aW91cygpIHsKICAgICAgaWYgKHRoaXMuc2VhcmNoUXVlcnkpIHsKICAgICAgICB0aGlzLnNlYXJjaEFkZG9uPy5maW5kUHJldmlvdXModGhpcy5zZWFyY2hRdWVyeSk7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gQ29udHJvbCBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHRvZ2dsZUF1dG9TY3JvbGwoKSB7CiAgICAgIHRoaXMuYXV0b1Njcm9sbCA9ICF0aGlzLmF1dG9TY3JvbGw7CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwgJiYgdGhpcy50ZXJtaW5hbCkgewogICAgICAgIHRoaXMudGVybWluYWwuc2Nyb2xsVG9Cb3R0b20oKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBUb2dnbGUgYmV0d2VlbiBmaWx0ZXIgbW9kZSBhbmQgaGlnaGxpZ2h0IG1vZGUKICAgICAqLwogICAgdG9nZ2xlRmlsdGVyTW9kZSgpIHsKICAgICAgdGhpcy5maWx0ZXJNb2RlID0gIXRoaXMuZmlsdGVyTW9kZTsKICAgICAgdGhpcy5yZVJlbmRlckZpbHRlcmVkTG9ncygpOwogICAgfQogICAgLyoqCiAgICAgKiBSZS1yZW5kZXIgbG9ncyBiYXNlZCBvbiBjdXJyZW50IGZpbHRlciBzdGF0ZQogICAgICogSW4gZmlsdGVyIG1vZGU6IHNob3cgbWF0Y2hpbmcgbG9ncyB3aXRoIHBsYWNlaG9sZGVycyBmb3IgaGlkZGVuIGVudHJpZXMKICAgICAqIEluIGhpZ2hsaWdodCBtb2RlOiBzaG93IGFsbCBsb2dzCiAgICAgKi8KICAgIHJlUmVuZGVyRmlsdGVyZWRMb2dzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnRlcm1pbmFsLmNsZWFyKCk7CiAgICAgIHRoaXMudHJhaWxpbmdIaWRkZW5Db3VudCA9IDA7CiAgICAgIGlmICghdGhpcy5maWx0ZXJNb2RlIHx8ICF0aGlzLnNlYXJjaFF1ZXJ5KSB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiB0aGlzLmxvZ0J1ZmZlcikgewogICAgICAgICAgY29uc3QgZm9ybWF0dGVkID0gdGhpcy5mb3JtYXRMb2dFbnRyeShlbnRyeSk7CiAgICAgICAgICB0aGlzLnRlcm1pbmFsLndyaXRlbG4oZm9ybWF0dGVkKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IGhpZGRlbkNvdW50ID0gMDsKICAgICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIHRoaXMubG9nQnVmZmVyKSB7CiAgICAgICAgICBpZiAodGhpcy5lbnRyeU1hdGNoZXNGaWx0ZXIoZW50cnkpKSB7CiAgICAgICAgICAgIGlmIChoaWRkZW5Db3VudCA+IDApIHsKICAgICAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgICAgIGhpZGRlbkNvdW50ID0gMDsKICAgICAgICAgICAgfQogICAgICAgICAgICBjb25zdCBmb3JtYXR0ZWQgPSB0aGlzLmZvcm1hdExvZ0VudHJ5KGVudHJ5KTsKICAgICAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGZvcm1hdHRlZCk7CiAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICBoaWRkZW5Db3VudCsrOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBpZiAoaGlkZGVuQ291bnQgPiAwKSB7CiAgICAgICAgICB0aGlzLndyaXRlSGlkZGVuUGxhY2Vob2xkZXIoaGlkZGVuQ291bnQpOwogICAgICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gaGlkZGVuQ291bnQ7CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICh0aGlzLmF1dG9TY3JvbGwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLnNjcm9sbFRvQm90dG9tKCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogV3JpdGUgYSBwbGFjZWhvbGRlciBsaW5lIHNob3dpbmcgaG93IG1hbnkgbG9nIGVudHJpZXMgYXJlIGhpZGRlbiBieSBmaWx0ZXIKICAgICAqLwogICAgd3JpdGVIaWRkZW5QbGFjZWhvbGRlcihjb3VudDIpIHsKICAgICAgY29uc3QgZGltID0gIlx4MUJbMm0iOwogICAgICBjb25zdCByZXNldCA9ICJceDFCWzBtIjsKICAgICAgY29uc3QgdGV4dDkgPSBjb3VudDIgPT09IDEgPyBgWzEgbG9nIGxpbmUgaGlkZGVuIGJ5IGZpbHRlciAuLi5dYCA6IGBbJHtjb3VudDJ9IGxvZyBsaW5lcyBoaWRkZW4gYnkgZmlsdGVyIC4uLl1gOwogICAgICB0aGlzLnRlcm1pbmFsPy53cml0ZWxuKGAke2RpbX0ke3RleHQ5fSR7cmVzZXR9YCk7CiAgICB9CiAgICAvKioKICAgICAqIENsZWFyIGFsbCBsb2dzIGFuZCByZXNldCBtZXRyaWNzCiAgICAgKi8KICAgIGNsZWFyTG9ncygpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uY2xlYXIoKTsKICAgICAgdGhpcy5sb2dCdWZmZXIgPSBbXTsKICAgICAgdGhpcy50cmFpbGluZ0hpZGRlbkNvdW50ID0gMDsKICAgICAgdGhpcy5yZXNldE1ldHJpY3MoKTsKICAgIH0KICAgIC8qKgogICAgICogU2Nyb2xsIHRvIHRoZSBib3R0b20gb2YgdGhlIGxvZwogICAgICovCiAgICBzY3JvbGxUb0JvdHRvbSgpIHsKICAgICAgdGhpcy50ZXJtaW5hbD8uc2Nyb2xsVG9Cb3R0b20oKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgLy8gTWV0cmljcyBNZXRob2RzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT0KICAgIHVwZGF0ZU1ldHJpY3MobGV2ZWwpIHsKICAgICAgdGhpcy5tZXRyaWNzID0gewogICAgICAgIC4uLnRoaXMubWV0cmljcywKICAgICAgICBbbGV2ZWxdOiB0aGlzLm1ldHJpY3NbbGV2ZWxdICsgMSwKICAgICAgICB0b3RhbDogdGhpcy5tZXRyaWNzLnRvdGFsICsgMQogICAgICB9OwogICAgICB0aGlzLnJlY29yZExvZ0V2ZW50KCk7CiAgICB9CiAgICByZWNvcmRMb2dFdmVudCgpIHsKICAgICAgdGhpcy5yYXRlQnVmZmVyLnB1c2goRGF0ZS5ub3coKSk7CiAgICB9CiAgICBjYWxjdWxhdGVSYXRlKCkgewogICAgICBjb25zdCBub3cyID0gRGF0ZS5ub3coKTsKICAgICAgdGhpcy5yYXRlQnVmZmVyID0gdGhpcy5yYXRlQnVmZmVyLmZpbHRlcigodDkpID0+IG5vdzIgLSB0OSA8IDFlNCk7CiAgICAgIGNvbnN0IHJhdGUgPSB0aGlzLnJhdGVCdWZmZXIubGVuZ3RoIC8gMTA7CiAgICAgIGlmIChyYXRlICE9PSB0aGlzLm1ldHJpY3MucmF0ZSkgewogICAgICAgIHRoaXMubWV0cmljcyA9IHsgLi4udGhpcy5tZXRyaWNzLCByYXRlIH07CiAgICAgIH0KICAgIH0KICAgIHJlc2V0TWV0cmljcygpIHsKICAgICAgdGhpcy5tZXRyaWNzID0geyBkZWJ1ZzogMCwgaW5mbzogMCwgd2FybjogMCwgZXJyb3I6IDAsIHN1Y2Nlc3M6IDAsIHRvdGFsOiAwLCByYXRlOiAwIH07CiAgICAgIHRoaXMucmF0ZUJ1ZmZlciA9IFtdOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBMaWZlY3ljbGUKICAgIC8vID09PT09PT09PT09PT09PT09PT09PQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJhdGVJbnRlcnZhbCkgewogICAgICAgIGNsZWFySW50ZXJ2YWwodGhpcy5yYXRlSW50ZXJ2YWwpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5kaXNwb3NlKCk7CiAgICAgIH0KICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNDaGFydExvZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctY29kZWJveC9kZWVzLWRhdGF2aWV3LWNvZGVib3guZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmMzNCA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vV3JhcHBlciB7CiAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHZoOwogICAgICBwYWRkaW5nOiA0OHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y4ZjlmYSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBnYXA6IDMycHg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9XcmFwcGVyIj4KICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5UeXBlU2NyaXB0IENvZGUgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5BIGNvbXByZWhlbnNpdmUgVHlwZVNjcmlwdCBjb2RlIGV4YW1wbGUgd2l0aCB2YXJpb3VzIHN5bnRheCBoaWdobGlnaHRpbmcuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9InR5cGVzY3JpcHQiPgppbnRlcmZhY2UgVXNlciB7CiAgaWQ6IG51bWJlcjsKICBuYW1lOiBzdHJpbmc7CiAgZW1haWw6IHN0cmluZzsKICBpc0FjdGl2ZTogYm9vbGVhbjsKfQoKY2xhc3MgVXNlclNlcnZpY2UgewogIHByaXZhdGUgdXNlcnM6IFVzZXJbXSA9IFtdOwogIAogIGNvbnN0cnVjdG9yKHByaXZhdGUgYXBpVXJsOiBzdHJpbmcpIHsKICAgIGNvbnNvbGUubG9nKCdVc2VyU2VydmljZSBpbml0aWFsaXplZCcpOwogIH0KICAKICBhc3luYyBnZXRVc2VycygpOiBQcm9taXNlPFVzZXJbXT4gewogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzcG9uc2UgPSBhd2FpdCBmZXRjaCh0aGlzLmFwaVVybCk7CiAgICAgIGNvbnN0IGRhdGEgPSBhd2FpdCByZXNwb25zZS5qc29uKCk7CiAgICAgIHJldHVybiBkYXRhLnVzZXJzOwogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGZldGNoIHVzZXJzOicsIGVycm9yKTsKICAgICAgcmV0dXJuIFtdOwogICAgfQogIH0KICAKICBhZGRVc2VyKHVzZXI6IFVzZXIpOiB2b2lkIHsKICAgIHRoaXMudXNlcnMucHVzaCh1c2VyKTsKICB9Cn0KCi8vIFVzYWdlIGV4YW1wbGUKY29uc3Qgc2VydmljZSA9IG5ldyBVc2VyU2VydmljZSgnaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMnKTsKY29uc3QgdXNlcnMgPSBhd2FpdCBzZXJ2aWNlLmdldFVzZXJzKCk7CmNvbnNvbGUubG9nKCdGb3VuZCB1c2VyczonLCB1c2Vycy5sZW5ndGgpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SmF2YVNjcmlwdCBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPk1vZGVybiBKYXZhU2NyaXB0IHdpdGggRVM2KyBmZWF0dXJlcy48L2Rpdj4KICAgICAgPGRlZXMtZGF0YXZpZXctY29kZWJveCBwcm9nbGFuZz0iamF2YXNjcmlwdCI+Ci8vIEFycmF5IG1hbmlwdWxhdGlvbiBleGFtcGxlcwpjb25zdCBudW1iZXJzID0gWzEsIDIsIDMsIDQsIDVdOwpjb25zdCBkb3VibGVkID0gbnVtYmVycy5tYXAobiA9PiBuICogMik7CmNvbnN0IGZpbHRlcmVkID0gbnVtYmVycy5maWx0ZXIobiA9PiBuID4gMyk7CgovLyBPYmplY3QgZGVzdHJ1Y3R1cmluZwpjb25zdCB1c2VyID0geyBuYW1lOiAnSm9obicsIGFnZTogMzAsIGNpdHk6ICdOZXcgWW9yaycgfTsKY29uc3QgeyBuYW1lLCBhZ2UgfSA9IHVzZXI7CgovLyBQcm9taXNlIGhhbmRsaW5nCmNvbnN0IGZldGNoRGF0YSA9IGFzeW5jICh1cmwpID0+IHsKICBjb25zdCByZXNwb25zZSA9IGF3YWl0IGZldGNoKHVybCk7CiAgcmV0dXJuIHJlc3BvbnNlLmpzb24oKTsKfTsKCi8vIE1vZGVybiBzeW50YXgKY29uc3QgZ3JlZXQgPSAobmFtZSA9ICdXb3JsZCcpID0+IFxgSGVsbG8sIFwke25hbWV9IVxgOwpjb25zb2xlLmxvZyhncmVldCgnU2hhZENOJykpOwogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UHl0aG9uIEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+UHl0aG9uIGNvZGUgd2l0aCBjbGFzc2VzIGFuZCB0eXBlIGhpbnRzLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJweXRob24iPgpmcm9tIHR5cGluZyBpbXBvcnQgTGlzdCwgT3B0aW9uYWwKaW1wb3J0IGFzeW5jaW8KCmNsYXNzIERhdGFQcm9jZXNzb3I6CiAgICAiIiJBIHNpbXBsZSBkYXRhIHByb2Nlc3NvciBjbGFzcyIiIgogICAgCiAgICBkZWYgX19pbml0X18oc2VsZiwgbmFtZTogc3RyKToKICAgICAgICBzZWxmLm5hbWUgPSBuYW1lCiAgICAgICAgc2VsZi5kYXRhOiBMaXN0W2RpY3RdID0gW10KICAgIAogICAgYXN5bmMgZGVmIHByb2Nlc3NfZGF0YShzZWxmLCBpdGVtczogTGlzdFtkaWN0XSkgLT4gTGlzdFtkaWN0XToKICAgICAgICAiIiJQcm9jZXNzIGRhdGEgaXRlbXMgYXN5bmNocm9ub3VzbHkiIiIKICAgICAgICByZXN1bHRzID0gW10KICAgICAgICBmb3IgaXRlbSBpbiBpdGVtczoKICAgICAgICAgICAgIyBTaW11bGF0ZSBhc3luYyBwcm9jZXNzaW5nCiAgICAgICAgICAgIGF3YWl0IGFzeW5jaW8uc2xlZXAoMC4xKQogICAgICAgICAgICByZXN1bHRzLmFwcGVuZCh7CiAgICAgICAgICAgICAgICAnaWQnOiBpdGVtLmdldCgnaWQnKSwKICAgICAgICAgICAgICAgICdwcm9jZXNzZWQnOiBUcnVlLAogICAgICAgICAgICAgICAgJ3Byb2Nlc3Nvcic6IHNlbGYubmFtZQogICAgICAgICAgICB9KQogICAgICAgIHJldHVybiByZXN1bHRzCiAgICAKICAgIGRlZiBnZXRfc3VtbWFyeShzZWxmKSAtPiBkaWN0OgogICAgICAgIHJldHVybiB7CiAgICAgICAgICAgICdwcm9jZXNzb3InOiBzZWxmLm5hbWUsCiAgICAgICAgICAgICdpdGVtc19wcm9jZXNzZWQnOiBsZW4oc2VsZi5kYXRhKQogICAgICAgIH0KCiMgVXNhZ2UKcHJvY2Vzc29yID0gRGF0YVByb2Nlc3NvcigiTWFpbiIpCmRhdGEgPSBhd2FpdCBwcm9jZXNzb3IucHJvY2Vzc19kYXRhKFt7J2lkJzogMX0sIHsnaWQnOiAyfV0pCiAgICAgIDwvZGVlcy1kYXRhdmlldy1jb2RlYm94PgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5DU1MgRXhhbXBsZTwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5Nb2Rlcm4gQ1NTIHdpdGggY3VzdG9tIHByb3BlcnRpZXMgYW5kIGFuaW1hdGlvbnMuIE5vdGUgdGhlIHNob3J0ZXIgbGFuZ3VhZ2UgbGFiZWwuPC9kaXY+CiAgICAgIDxkZWVzLWRhdGF2aWV3LWNvZGVib3ggcHJvZ2xhbmc9ImNzcyI+Ci8qIE1vZGVybiBDU1Mgd2l0aCBjdXN0b20gcHJvcGVydGllcyAqLwo6cm9vdCB7CiAgLS1wcmltYXJ5LWNvbG9yOiAjM2I4MmY2OwogIC0tc2Vjb25kYXJ5LWNvbG9yOiAjMTBiOTgxOwogIC0tYmFja2dyb3VuZDogI2ZmZmZmZjsKICAtLXRleHQtY29sb3I6ICMwOTA5MGI7CiAgLS1ib3JkZXItcmFkaXVzOiA2cHg7Cn0KCi5jYXJkIHsKICBiYWNrZ3JvdW5kOiB2YXIoLS1iYWNrZ3JvdW5kKTsKICBib3JkZXI6IDFweCBzb2xpZCAjZTVlN2ViOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIHBhZGRpbmc6IDI0cHg7CiAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKTsKICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwp9CgouY2FyZDpob3ZlciB7CiAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC0ycHgpOwogIGJveC1zaGFkb3c6IDAgNHB4IDZweCByZ2JhKDAsIDAsIDAsIDAuMSk7Cn0KCkBrZXlmcmFtZXMgZmFkZUluIHsKICBmcm9tIHsgb3BhY2l0eTogMDsgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDEwcHgpOyB9CiAgdG8geyBvcGFjaXR5OiAxOyB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7IH0KfQogICAgICA8L2RlZXMtZGF0YXZpZXctY29kZWJveD4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+SlNPTiBFeGFtcGxlPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkpTT04gY29uZmlndXJhdGlvbiB3aXRoIHByb3BlciBmb3JtYXR0aW5nLjwvZGl2PgogICAgICA8ZGVlcy1kYXRhdmlldy1jb2RlYm94IHByb2dsYW5nPSJqc29uIj4KewogICJuYW1lIjogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgInZlcnNpb24iOiAiMS4xMC43IiwKICAiZGVzY3JpcHRpb24iOiAiQSBjb21wcmVoZW5zaXZlIGNhdGFsb2cgb2Ygd2ViIGNvbXBvbmVudHMiLAogICJtYWluIjogImRpc3RfdHNfd2ViL2luZGV4LmpzIiwKICAidHlwZSI6ICJtb2R1bGUiLAogICJzY3JpcHRzIjogewogICAgImJ1aWxkIjogInRzYnVpbGQgdHNmb2xkZXJzIC0tYWxsb3dpbXBsaWNpdGFueSAmJiB0c2J1bmRsZSBlbGVtZW50IC0tcHJvZHVjdGlvbiIsCiAgICAid2F0Y2giOiAidHN3YXRjaCBlbGVtZW50IiwKICAgICJ0ZXN0IjogInRzdGVzdCB0ZXN0LyAtLXdlYiAtLXZlcmJvc2UiCiAgfSwKICAiZGVwZW5kZW5jaWVzIjogewogICAgIkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI6ICJeMi4wLjQ1IiwKICAgICJoaWdobGlnaHQuanMiOiAiXjExLjkuMCIKICB9Cn0KICAgICAgPC9kZWVzLWRhdGF2aWV3LWNvZGVib3g+CiAgICA8L2Rpdj4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1kYXRhdmlldy9kZWVzLWRhdGF2aWV3LWNvZGVib3gvZGVlcy1kYXRhdmlldy1jb2RlYm94LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czExKCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfc2VydmljZXMoKTsKdmFyIF9fZXNEZWNvcmF0ZTQ3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM0OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0RhdGF2aWV3Q29kZWJveCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGF0YXZpZXctY29kZWJveCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3Byb2dMYW5nX2RlY29yYXRvcnM7CiAgbGV0IF9wcm9nTGFuZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnM7CiAgbGV0IF9jb2RlVG9EaXNwbGF5X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29kZVRvRGlzcGxheV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3Byb2dMYW5nX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9jb2RlVG9EaXNwbGF5X2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IFN0cmluZywKICAgICAgICByZWZsZWN0OiB0cnVlCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlNDcodGhpcywgbnVsbCwgX3Byb2dMYW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInByb2dMYW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwcm9nTGFuZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wcm9nTGFuZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucHJvZ0xhbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcHJvZ0xhbmdfaW5pdGlhbGl6ZXJzLCBfcHJvZ0xhbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0Nyh0aGlzLCBudWxsLCBfY29kZVRvRGlzcGxheV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb2RlVG9EaXNwbGF5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb2RlVG9EaXNwbGF5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvZGVUb0Rpc3BsYXksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvZGVUb0Rpc3BsYXkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsIF9jb2RlVG9EaXNwbGF5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGF0YXZpZXdDb2RlYm94MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzQ7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjcHJvZ0xhbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2luaXRpYWxpemVycywgInR5cGVzY3JpcHQiKTsKICAgIGdldCBwcm9nTGFuZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcHJvZ0xhbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Byb2dMYW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29kZVRvRGlzcGxheV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX3Byb2dMYW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM0OCh0aGlzLCBfY29kZVRvRGlzcGxheV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgY29kZVRvRGlzcGxheSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvZGVUb0Rpc3BsYXlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb2RlVG9EaXNwbGF5KHZhbHVlMikgewogICAgICB0aGlzLiNjb2RlVG9EaXNwbGF5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICAke2RvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnN0eWxlc30KICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgfQogICAgICAgIC5tYWluYm94IHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGJveC1zaGFkb3c6IDAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMSksIDAgMXB4IDJweCByZ2JhKDAsIDAsIDAsIDAuMDYpOwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuYXBwYmFyIHsKICAgICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzE4MTgxYiIpfTsKICAgICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAzMnB4OwogICAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmFwcGJhciAuZmlsZU5hbWUgewogICAgICAgICAgbGluZS1oZWlnaHQ6IGluaGVyaXQ7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIH0KCiAgICAgICAgLmJvdHRvbUJhciB7CiAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxODE4MWIiKX07CiAgICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAuc3BhY2VzTGFiZWwgewogICAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAubGFuZ3VhZ2VMYWJlbCB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGxpbmUtaGVpZ2h0OiAyOHB4OwogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1rZXl3b3JkIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmNvZGVncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDUwcHggYXV0bzsKICAgICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgfQoKICAgICAgICAubGluZU51bWJlcnMgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM1MjUyNWIiKX07CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDE2cHggMHB4IDBweDsKICAgICAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICB9CgogICAgICAgIC5saW5lQ291bnRlcjpsYXN0LWNoaWxkIHsKICAgICAgICAgIG9wYWNpdHk6IDUwJTsKICAgICAgICB9CgogICAgICAgIHByZSB7CiAgICAgICAgICBvdmVyZmxvdy14OiBhdXRvOwogICAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4IDI0cHg7CiAgICAgICAgfQoKICAgICAgICBjb2RlIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA0MDA7CiAgICAgICAgICBwYWRkaW5nOiAwcHg7CiAgICAgICAgICBtYXJnaW46IDBweDsKICAgICAgICB9CgogICAgICAgIGNvZGUsCiAgICAgICAgY29kZSAqLAogICAgICAgIC5saW5lTnVtYmVycyB7CiAgICAgICAgICBsaW5lLWhlaWdodDogMS40ZW07CiAgICAgICAgICBmb250LXdlaWdodDogMjAwOwogICAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtc3RyaW5nIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYnVpbHRfaW4gewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOGI1Y2Y2IiwgIiNhNzhiZmEiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXBhcmFtcyB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwODkxYjIiLCAiIzA2YjZkNCIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLWNvbW1lbnQgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1udW1iZXIgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWE1ODBjIiwgIiNmYjkyM2MiKX07CiAgICAgICAgfQoKICAgICAgICAuaGxqcy1saXRlcmFsIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICAgIH0KCiAgICAgICAgLmhsanMtYXR0ciB7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4YjVjZjYiLCAiI2E3OGJmYSIpfTsKICAgICAgICB9CgogICAgICAgIC5obGpzLXZhcmlhYmxlIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJtYWluYm94IgogICAgICAgIEBjb250ZXh0bWVudT0iJHsoZXZlbnRBcmcpID0+IHsKICAgICAgICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnRBcmcsIFsKICAgICAgICAgIHsKICAgICAgICAgICAgbmFtZTogIkFib3V0IiwKICAgICAgICAgICAgaWNvbk5hbWU6ICJjaXJjbGVJbmZvIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICBdKTsKICAgICAgfX0iCiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRlZXMtd2luZG93Y29udHJvbHMgdHlwZT0ibWFjIiBwb3NpdGlvbj0ibGVmdCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZU5hbWUiPmluZGV4LnRzPC9kaXY+CiAgICAgICAgICA8ZGVlcy13aW5kb3djb250cm9scyB0eXBlPSJtYWMiIHBvc2l0aW9uPSJyaWdodCI+PC9kZWVzLXdpbmRvd2NvbnRyb2xzPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvZGVncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmVOdW1iZXJzIj4KICAgICAgICAgICAgJHsoKCkgPT4gewogICAgICAgIGxldCBsaW5lQ291bnRlciA9IDA7CiAgICAgICAgcmV0dXJuIHRoaXMuY29kZVRvRGlzcGxheS5zcGxpdCgiXG4iKS5tYXAoKGxpbmVBcmcpID0+IHsKICAgICAgICAgIGxpbmVDb3VudGVyKys7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0ibGluZUNvdW50ZXIiPiR7bGluZUNvdW50ZXJ9PC9kaXY+YDsKICAgICAgICB9KTsKICAgICAgfSkoKX0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPHByZT48Y29kZT48L2NvZGU+PC9wcmU+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYm90dG9tQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNlc0xhYmVsIj5TcGFjZXM6IDI8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imxhbmd1YWdlTGFiZWwiPiR7dGhpcy5wcm9nTGFuZ308L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgY29kZVRvRGlzcGxheVN0b3JlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNDgodGhpcywgX2NvZGVUb0Rpc3BsYXlfZXh0cmFJbml0aWFsaXplcnMpLCAiIik7CiAgICBoaWdobGlnaHRKcyA9IG51bGw7CiAgICBhc3luYyB1cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIGNvbnNvbGUubG9nKCJoaWdobGlnaHRpbmcgbm93Iik7CiAgICAgIGNvbnNvbGUubG9nKHRoaXMuY2hpbGROb2Rlcyk7CiAgICAgIGNvbnN0IHNsb3R0ZWRDb2RlTm9kZXMgPSBbXTsKICAgICAgdGhpcy5jaGlsZE5vZGVzLmZvckVhY2goKGNoaWxkTm9kZSkgPT4gewogICAgICAgIGlmIChjaGlsZE5vZGUubm9kZU5hbWUgPT09ICIjdGV4dCIpIHsKICAgICAgICAgIHNsb3R0ZWRDb2RlTm9kZXMucHVzaChjaGlsZE5vZGUpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGlmICh0aGlzLmNvZGVUb0Rpc3BsYXkgJiYgdGhpcy5jb2RlVG9EaXNwbGF5ICE9PSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHRoaXMuY29kZVRvRGlzcGxheSkudHJpbVN0YXJ0KCk7CiAgICAgIH0KICAgICAgaWYgKHNsb3R0ZWRDb2RlTm9kZXNbMF0gJiYgc2xvdHRlZENvZGVOb2Rlc1swXS53aG9sZVRleHQgJiYgIXRoaXMuY29kZVRvRGlzcGxheSkgewogICAgICAgIHRoaXMuY29kZVRvRGlzcGxheVN0b3JlID0gc21hcnRzdHJpbmdfaW5kZW50X2V4cG9ydHMubm9ybWFsaXplKHNsb3R0ZWRDb2RlTm9kZXNbMF0ud2hvbGVUZXh0KS50cmltU3RhcnQoKTsKICAgICAgICB0aGlzLmNvZGVUb0Rpc3BsYXkgPSB0aGlzLmNvZGVUb0Rpc3BsYXlTdG9yZTsKICAgICAgfQogICAgICBhd2FpdCBkb210b29sc19wbHVnaW5leHBvcnRzX2V4cG9ydHMuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgICAgdGhpcy5oaWdobGlnaHRKcyA9IGF3YWl0IERlZXNTZXJ2aWNlTGliTG9hZGVyLmdldEluc3RhbmNlKCkubG9hZEhpZ2hsaWdodEpzKCk7CiAgICAgIH0KICAgICAgY29uc3QgbG9jYWxDb2RlTm9kZSA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCJjb2RlIik7CiAgICAgIGNvbnN0IGhpZ2hsaWdodGVkSHRtbCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KHRoaXMuY29kZVRvRGlzcGxheVN0b3JlLCB7CiAgICAgICAgbGFuZ3VhZ2U6IHRoaXMucHJvZ0xhbmcsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGxvY2FsQ29kZU5vZGUuaW5uZXJIVE1MID0gaGlnaGxpZ2h0ZWRIdG1sLnZhbHVlOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM0OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0RhdGF2aWV3Q29kZWJveDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWRhdGF2aWV3L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzUgPSAoKSA9PiBiMmAgPHN0eWxlPgogICAgLmRlbW8gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMGEwYTBhIil9OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgY29udGVudDogJyc7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICB9CiAgICAKICAgIC5kZW1vLWdyaWQgewogICAgICBkaXNwbGF5OiBncmlkOwogICAgICBnYXA6IDI0cHg7CiAgICAgIG1heC13aWR0aDogODAwcHg7CiAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgfQogICAgCiAgICAuZGVtby1zZWN0aW9uIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZ2FwOiAxNnB4OwogICAgfQogICAgCiAgICAuZGVtby10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9OwogICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgICAKICAgIC5kZW1vLW5vdGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vIj4KICAgIDxkaXYgY2xhc3M9ImRlbW8tbm90ZSI+CiAgICAgIFJpZ2h0LWNsaWNrIG9uIGFueSBkZXRhaWwgcm93IHRvIGNvcHkgdGhlIHZhbHVlLCBrZXksIG9yIGtleTp2YWx1ZSBjb21iaW5hdGlvbgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLWdyaWQiPgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tdGl0bGUiPlNlcnZpY2UgSGVhbHRoIFN0YXR1czwvZGl2PgogICAgICAgIDxkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdAogICAgICAgICAgLnN0YXR1c09iamVjdD0ke3sKICBpZDogIjEiLAogIG5hbWU6ICJBUEkgR2F0ZXdheSBTZXJ2aWNlIiwKICBjb21iaW5lZFN0YXR1czogIm9rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJBbGwgc3lzdGVtcyBvcGVyYXRpb25hbCIsCiAgZGV0YWlsczogWwogICAgewogICAgICBuYW1lOiAiUmVzcG9uc2UgVGltZSIsCiAgICAgIHZhbHVlOiAiNDVtcyAoYXZnKSIsCiAgICAgIHN0YXR1czogIm9rIiwKICAgICAgc3RhdHVzVGV4dDogIldpdGhpbiBub3JtYWwgcmFuZ2UiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiVXB0aW1lIiwKICAgICAgdmFsdWU6ICI5OS45OSUgKDMwIGRheXMpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiRXhjZWxsZW50IHVwdGltZSIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJBY3RpdmUgQ29ubmVjdGlvbnMiLAogICAgICB2YWx1ZTogIjEsMjM0IC8gMTAsMDAwIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiTm9ybWFsIGxvYWQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiU1NMIENlcnRpZmljYXRlIiwKICAgICAgdmFsdWU6ICJWYWxpZCB1bnRpbCAyMDI0LTEyLTMxIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiQ2VydGlmaWNhdGUgdmFsaWQiCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby10aXRsZSI+RGF0YWJhc2UgQ2x1c3RlciBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIyIiwKICBuYW1lOiAiUG9zdGdyZVNRTCBDbHVzdGVyIiwKICBjb21iaW5lZFN0YXR1czogInBhcnRseV9vayIsCiAgY29tYmluZWRTdGF0dXNUZXh0OiAiTWlub3IgaXNzdWVzIGRldGVjdGVkIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJQcmltYXJ5IE5vZGUiLAogICAgICB2YWx1ZTogImRiLXByaW1hcnktMDEgKGhlYWx0aHkpIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiT3BlcmF0aW5nIG5vcm1hbGx5IgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIlJlcGxpY2EgTGFnIiwKICAgICAgdmFsdWU6ICIyLjUgc2Vjb25kcyIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJTbGlnaHRseSBlbGV2YXRlZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJEaXNrIFVzYWdlIiwKICAgICAgdmFsdWU6ICI3OCUgKDMxMkdCIC8gNDAwR0IpIiwKICAgICAgc3RhdHVzOiAicGFydGx5X29rIiwKICAgICAgc3RhdHVzVGV4dDogIkFwcHJvYWNoaW5nIHRocmVzaG9sZCIKICAgIH0sCiAgICB7CiAgICAgIG5hbWU6ICJDb25uZWN0aW9uIFBvb2wiLAogICAgICB2YWx1ZTogIjg5IC8gMTAwIGNvbm5lY3Rpb25zIiwKICAgICAgc3RhdHVzOiAib2siLAogICAgICBzdGF0dXNUZXh0OiAiV2l0aGluIGxpbWl0cyIKICAgIH0KICBdCn19CiAgICAgICAgPgogICAgICAgIDwvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3Q+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJkZW1vLXRpdGxlIj5CdWlsZCBQaXBlbGluZSBTdGF0dXM8L2Rpdj4KICAgICAgICA8ZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QKICAgICAgICAgIC5zdGF0dXNPYmplY3Q9JHt7CiAgaWQ6ICIzIiwKICBuYW1lOiAiQ0kvQ0QgUGlwZWxpbmUiLAogIGNvbWJpbmVkU3RhdHVzOiAibm90X29rIiwKICBjb21iaW5lZFN0YXR1c1RleHQ6ICJCdWlsZCBmYWlsdXJlIiwKICBkZXRhaWxzOiBbCiAgICB7CiAgICAgIG5hbWU6ICJMYXN0IEJ1aWxkIiwKICAgICAgdmFsdWU6ICJCdWlsZCAjMTIzNCAtIEZhaWxlZCIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJUZXN0IGZhaWx1cmVzIgogICAgfSwKICAgIHsKICAgICAgbmFtZTogIkZhaWxlZCBUZXN0cyIsCiAgICAgIHZhbHVlOiAiMyB0ZXN0cyBmYWlsZWQ6IGF1dGguc3BlYy50cywgdXNlci5zcGVjLnRzLCBhcGkuc3BlYy50cyIsCiAgICAgIHN0YXR1czogIm5vdF9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJVbml0IHRlc3QgZmFpbHVyZXMiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQ29kZSBDb3ZlcmFnZSIsCiAgICAgIHZhbHVlOiAiODIuNSUgKHRhcmdldDogODUlKSIsCiAgICAgIHN0YXR1czogInBhcnRseV9vayIsCiAgICAgIHN0YXR1c1RleHQ6ICJCZWxvdyB0YXJnZXQiCiAgICB9LAogICAgewogICAgICBuYW1lOiAiQnVpbGQgRHVyYXRpb24iLAogICAgICB2YWx1ZTogIjEybSAzNHMiLAogICAgICBzdGF0dXM6ICJvayIsCiAgICAgIHN0YXR1c1RleHQ6ICJOb3JtYWwgZHVyYXRpb24iCiAgICB9CiAgXQp9fQogICAgICAgID4KICAgICAgICA8L2RlZXMtZGF0YXZpZXctc3RhdHVzb2JqZWN0PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIDwvZGl2PmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtZGF0YXZpZXcvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QvZGVlcy1kYXRhdmlldy1zdGF0dXNvYmplY3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNDggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczQ5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWRhdGF2aWV3LXN0YXR1c29iamVjdCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3N0YXR1c09iamVjdF9kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzT2JqZWN0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNEYXRhdmlld1N0YXR1c29iamVjdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KHRoaXMsIG51bGwsIF9zdGF0dXNPYmplY3RfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzT2JqZWN0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXNPYmplY3QiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzT2JqZWN0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXNPYmplY3QgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzT2JqZWN0X2luaXRpYWxpemVycywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ4KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc0RhdGF2aWV3U3RhdHVzb2JqZWN0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzU7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIkRhdGEgVmlldyI7CiAgICAjc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczQ5KHRoaXMsIF9zdGF0dXNPYmplY3RfaW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IHN0YXR1c09iamVjdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3N0YXR1c09iamVjdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0YXR1c09iamVjdCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3RhdHVzT2JqZWN0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdSb2JvdG8nLCBzYW5zLXNlcmlmOwogICAgICB9CgogICAgICAubWFpbmJveCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggMCBoc2woMCAwJSAwJSAvIDAuMSksIDAgMXB4IDJweCAtMXB4IGhzbCgwIDAlIDAlIC8gMC4xKTsKICAgICAgICBtaW4taGVpZ2h0OiA0OHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG8gMTAwcHg7CiAgICAgICAgaGVpZ2h0OiA1NnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMCAwJSA3JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luOiAwcHg7CiAgICAgICAgcGFkZGluZzogMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdCB7CiAgICAgICAgaGVpZ2h0OiAxMHB4OwogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSAvIDAuMikiLCAiaHNsKDAgMCUgNDUuMSUgLyAwLjIpIil9OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jb3B5TWFpbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTMuOSUpIil9OwogICAgICB9CgogICAgICAuY29weU1haW46YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5vayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMikiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5ub3Rfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NC4yJSA2MC4yJSkiLCAiaHNsKDAgNzIuMiUgNTAuNiUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQuMiUgNjAuMiUgLyAwLjIpIiwgImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnN0YXR1c2RvdC5wYXJ0bHlfb2sgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjUgOTUlIDUzJSkiLCAiaHNsKDI1IDk1JSA2MyUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDI1IDk1JSA1MyUgLyAwLjIpIiwgImhzbCgyNSA5NSUgNjMlIC8gMC4yKSIpfTsKICAgICAgfQoKICAgICAgLmRldGFpbCB7CiAgICAgICAgbWluLWhlaWdodDogNjBweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiA0OHB4IGF1dG87CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgICAgcGFkZGluZy1yaWdodDogMTZweDsKICAgICAgICBjdXJzb3I6IGNvbnRleHQtbWVudTsKICAgICAgfQoKICAgICAgLmRldGFpbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNyUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsOmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1JSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5kZXRhaWwgLmRldGFpbHNUZXh0IC5sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0NS4xJSkiLCAiaHNsKDAgMCUgNjMuOSUpIil9CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuZGV0YWlsIC5kZXRhaWxzVGV4dCAudmFsdWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogJ0ludGVsIE9uZSBNb25vJywgJ0dlaXN0IE1vbm8nLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkwJSkiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke3RoaXMuc3RhdHVzT2JqZWN0Py5jb21iaW5lZFN0YXR1c30iPjwvZGl2PgogICAgICAgICAgPGgxPiR7dGhpcy5zdGF0dXNPYmplY3Q/Lm5hbWUgfHwgIk5vIHN0YXR1cyBvYmplY3QgYXNzaWduZWQifTwvaDE+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb3B5TWFpbiIgQGNsaWNrPSR7dGhpcy5oYW5kbGVDb3B5QXNKc29ufT5Db3B5IEpTT048L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc3RhdHVzT2JqZWN0Py5kZXRhaWxzPy5tYXAoKGRldGFpbEFyZykgPT4gewogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgPGRpdiAKICAgICAgICAgICAgICBjbGFzcz0iZGV0YWlsIgogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldmVudCkgPT4gewogICAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkNvcHkgVmFsdWUiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmNvcHkiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jb3B5VG9DbGlwYm9hcmQoZGV0YWlsQXJnLnZhbHVlLCAiVmFsdWUiKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ29weSBLZXkiLAogICAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmtleSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlUb0NsaXBib2FyZChkZXRhaWxBcmcubmFtZSwgIktleSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSwKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDb3B5IEtleTpWYWx1ZSIsCiAgICAgICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weS1wbHVzIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICAgIGF3YWl0IHRoaXMuY29weVRvQ2xpcGJvYXJkKGAke2RldGFpbEFyZy5uYW1lfTogJHtkZXRhaWxBcmcudmFsdWV9YCwgIktleTpWYWx1ZSIpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgXSk7CiAgICAgICAgfX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXR1c2RvdCAke2RldGFpbEFyZy5zdGF0dXN9Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzVGV4dCI+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsYWJlbCI+JHtkZXRhaWxBcmcubmFtZX08L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InZhbHVlIj4ke2RldGFpbEFyZy52YWx1ZX08L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgYXN5bmMgY29weVRvQ2xpcGJvYXJkKHRleHQ5LCB0eXBlNSA9ICJUZXh0IikgewogICAgICB0cnkgewogICAgICAgIGF3YWl0IG5hdmlnYXRvci5jbGlwYm9hcmQud3JpdGVUZXh0KHRleHQ5KTsKICAgICAgICBjb25zb2xlLmxvZyhgJHt0eXBlNX0gY29waWVkIHRvIGNsaXBib2FyZGApOwogICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gY29weSAke3R5cGU1fTpgLCBlcnIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb3B5QXNKc29uKCkgewogICAgICBpZiAoIXRoaXMuc3RhdHVzT2JqZWN0KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeSh0aGlzLnN0YXR1c09iamVjdCwgbnVsbCwgMikpOwogICAgICAgIGNvbnN0IGJ1dHRvbiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29weU1haW4iKTsKICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBidXR0b24udGV4dENvbnRlbnQ7CiAgICAgICAgYnV0dG9uLnRleHRDb250ZW50ID0gIkNvcGllZCEiOwogICAgICAgIGNvbnN0IGlzRGFyayA9ICF0aGlzLmdvQnJpZ2h0OwogICAgICAgIGJ1dHRvbi5zdHlsZS5iYWNrZ3JvdW5kID0gaXNEYXJrID8gImhzbCgxNDIuMSA3MC42JSA0NS4zJSAvIDAuMSkiIDogImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiOwogICAgICAgIGJ1dHRvbi5zdHlsZS5ib3JkZXJDb2xvciA9IGlzRGFyayA/ICJoc2woMTQyLjEgNzAuNiUgNDUuMyUpIiA6ICJoc2woMTQyLjEgNzYuMiUgMzYuMyUpIjsKICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSBpc0RhcmsgPyAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIgOiAiaHNsKDE0Mi4xIDc2LjIlIDM2LjMlKSI7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBidXR0b24udGV4dENvbnRlbnQgPSBvcmlnaW5hbFRleHQ7CiAgICAgICAgICBidXR0b24uc3R5bGUuYmFja2dyb3VuZCA9ICIiOwogICAgICAgICAgYnV0dG9uLnN0eWxlLmJvcmRlckNvbG9yID0gIiI7CiAgICAgICAgICBidXR0b24uc3R5bGUuY29sb3IgPSAiIjsKICAgICAgICB9LCAxNTAwKTsKICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGNvcHk6IiwgZXJyKTsKICAgICAgfQogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNDkodGhpcywgX3N0YXR1c09iamVjdF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczQ5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzRGF0YXZpZXdTdGF0dXNvYmplY3QyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUvZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNDkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczUwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRmlsZXRyZWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS1maWxldHJlZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnM7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9kZWNvcmF0b3JzOwogIGxldCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRQYXRoX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90cmVlRGF0YV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzTG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JNZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lcnJvck1lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1dvcmtzcGFjZUZpbGV0cmVlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfcm9vdFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90cmVlRGF0YV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lcnJvck1lc3NhZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU0OSh0aGlzLCBudWxsLCBfcm9vdFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicm9vdFBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvb3RQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJvb3RQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yb290UGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb290UGF0aF9pbml0aWFsaXplcnMsIF9yb290UGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF9zZWxlY3RlZFBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRQYXRoIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZFBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZFBhdGggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRQYXRoX2luaXRpYWxpemVycywgX3NlbGVjdGVkUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTQ5KHRoaXMsIG51bGwsIF90cmVlRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0cmVlRGF0YSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidHJlZURhdGEiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudHJlZURhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRyZWVEYXRhID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RyZWVEYXRhX2luaXRpYWxpemVycywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2lzTG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0xvYWRpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzTG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0xvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzTG9hZGluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkodGhpcywgbnVsbCwgX2Vycm9yTWVzc2FnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlcnJvck1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yTWVzc2FnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lcnJvck1lc3NhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVycm9yTWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvck1lc3NhZ2VfaW5pdGlhbGl6ZXJzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNDkobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzV29ya3NwYWNlRmlsZXRyZWUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGl2IHN0eWxlPSJ3aWR0aDogMzAwcHg7IGhlaWdodDogNDAwcHg7IHBvc2l0aW9uOiByZWxhdGl2ZTsiPgogICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWU+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgIDwvZGl2PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycywgbnVsbCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KCkgewogICAgICByZXR1cm4gdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBleGVjdXRpb25FbnZpcm9ubWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXhlY3V0aW9uRW52aXJvbm1lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNyb290UGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2V4ZWN1dGlvbkVudmlyb25tZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfaW5pdGlhbGl6ZXJzLCAiLyIpKTsKICAgIGdldCByb290UGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcm9vdFBhdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Jvb3RQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfcm9vdFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHNlbGVjdGVkUGF0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdHJlZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF9zZWxlY3RlZFBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUwKHRoaXMsIF90cmVlRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdHJlZURhdGEoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRyZWVEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0cmVlRGF0YV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX3RyZWVEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfaXNMb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0xvYWRpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0xvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzTG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Vycm9yTWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2lzTG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTAodGhpcywgX2Vycm9yTWVzc2FnZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZXJyb3JNZXNzYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JNZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXJyb3JNZXNzYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNlcnJvck1lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGV4cGFuZGVkUGF0aHMgPSAoX19ydW5Jbml0aWFsaXplcnM1MCh0aGlzLCBfZXJyb3JNZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKSk7CiAgICBsb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgIC8vIENsaXBib2FyZCBzdGF0ZSBmb3IgY29weS9wYXN0ZSBvcGVyYXRpb25zCiAgICBjbGlwYm9hcmRQYXRoID0gbnVsbDsKICAgIGNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAvLyBGaWxlIHdhdGNoZXIgZm9yIGF1dG8tcmVmcmVzaAogICAgZmlsZVdhdGNoZXIgPSBudWxsOwogICAgcmVmcmVzaERlYm91bmNlVGltZW91dCA9IG51bGw7CiAgICBsYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAudHJlZS1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAwOwogICAgICB9CgogICAgICAudHJlZS1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbjogMXB4IDRweDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXMgZWFzZTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDkzJSkiLCAiaHNsKDAgMCUgMTQlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5NSUpIiwgImhzbCgyMTAgNTAlIDIwJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDEwMCUgNDAlKSIsICJoc2woMjEwIDEwMCUgNzAlKSIpfTsKICAgICAgfQoKICAgICAgLnRyZWUtaXRlbS5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA5MiUpIiwgImhzbCgyMTAgNTAlIDI1JSkiKX07CiAgICAgIH0KCiAgICAgIC5pbmRlbnQgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZXhwYW5kLWljb24uZXhwYW5kZWQgewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDkwZGVnKTsKICAgICAgfQoKICAgICAgLmV4cGFuZC1pY29uLmhpZGRlbiB7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiA2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB9CgogICAgICAuZmlsZS1pY29uIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDUgODAlIDQ1JSkiLCAiaHNsKDQ1IDcwJSA1NSUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmZpbGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZmlsZS1pY29uLnR5cGVzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woMjExIDYwJSA0OCUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmphdmFzY3JpcHQgewogICAgICAgIGNvbG9yOiBoc2woNTMgOTMlIDU0JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24uanNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA4MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmZpbGUtaWNvbi5odG1sIHsKICAgICAgICBjb2xvcjogaHNsKDE0IDc3JSA1MiUpOwogICAgICB9CgogICAgICAuZmlsZS1pY29uLmNzcyB7CiAgICAgICAgY29sb3I6IGhzbCgyMjggNzclIDU5JSk7CiAgICAgIH0KCiAgICAgIC5maWxlLWljb24ubWFya2Rvd24gewogICAgICAgIGNvbG9yOiBoc2woMCAwJSA1MCUpOwogICAgICB9CgogICAgICAuZmlsZS1uYW1lIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgODUlKSIpfTsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAuZXJyb3IgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiBoc2woMCA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmVtcHR5IHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5maWxldHJlZS10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICAgIHBvc2l0aW9uOiBzdGlja3k7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLXRpdGxlIHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICB0ZXh0LXRyYW5zZm9ybTogdXBwZXJjYXNlOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAwLjVweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cywgYmFja2dyb3VuZCAwLjE1czsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDcwJSkiKX07CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5Ij4KICAgICAgICAgIE5vIGV4ZWN1dGlvbiBlbnZpcm9ubWVudCBwcm92aWRlZC4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICBpZiAodGhpcy5pc0xvYWRpbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZyI+CiAgICAgICAgICBMb2FkaW5nIGZpbGVzLi4uCiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuZXJyb3JNZXNzYWdlKSB7CiAgICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIj4KICAgICAgICAgICR7dGhpcy5lcnJvck1lc3NhZ2V9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJmaWxldHJlZS10b29sYmFyIj4KICAgICAgICA8c3BhbiBjbGFzcz0idG9vbGJhci10aXRsZSI+RXhwbG9yZXI8L3NwYW4+CiAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1hY3Rpb25zIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKX0gdGl0bGU9Ik5ldyBGaWxlIj4KICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6ZmlsZVBsdXMifSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIgQGNsaWNrPSR7KCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKX0gdGl0bGU9Ik5ldyBGb2xkZXIiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmb2xkZXJQbHVzIn0gaWNvblNpemU9IjE2Ij48L2RlZXMtaWNvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnRyZWVEYXRhLmxlbmd0aCA9PT0gMCA/IGIyYDxkaXYgY2xhc3M9ImVtcHR5Ij5ObyBmaWxlcyBmb3VuZC48L2Rpdj5gIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRyZWUtY29udGFpbmVyIiBAY29udGV4dG1lbnU9JHt0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudX0+CiAgICAgICAgICAgICAgJHt0aGlzLnJlbmRlclRyZWUodGhpcy50cmVlRGF0YSl9CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYH0KICAgIGA7CiAgICB9CiAgICByZW5kZXJUcmVlKG5vZGVzKSB7CiAgICAgIHJldHVybiBub2Rlcy5tYXAoKG5vZGUyKSA9PiB0aGlzLnJlbmRlck5vZGUobm9kZTIpKTsKICAgIH0KICAgIHJlbmRlck5vZGUobm9kZTIpIHsKICAgICAgY29uc3QgaXNEaXJlY3RvcnkgPSBub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IjsKICAgICAgY29uc3QgaXNFeHBhbmRlZCA9IHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCk7CiAgICAgIGNvbnN0IGlzU2VsZWN0ZWQgPSBub2RlMi5wYXRoID09PSB0aGlzLnNlbGVjdGVkUGF0aDsKICAgICAgY29uc3QgaWNvbkNsYXNzID0gdGhpcy5nZXRGaWxlSWNvbkNsYXNzKG5vZGUyKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9InRyZWUtaXRlbSAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgIHN0eWxlPSJwYWRkaW5nLWxlZnQ6ICR7OCArIG5vZGUyLmxldmVsICogMTZ9cHgiCiAgICAgICAgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMil9CiAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKX0KICAgICAgPgogICAgICAgIDxzcGFuIGNsYXNzPSJleHBhbmQtaWNvbiAke2lzRXhwYW5kZWQgPyAiZXhwYW5kZWQiIDogIiJ9ICR7IWlzRGlyZWN0b3J5ID8gImhpZGRlbiIgOiAiIn0iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hldnJvblJpZ2h0In0gaWNvblNpemU9IjEyIj48L2RlZXMtaWNvbj4KICAgICAgICA8L3NwYW4+CiAgICAgICAgPHNwYW4gY2xhc3M9ImZpbGUtaWNvbiAke2ljb25DbGFzc30iPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0ke3RoaXMuZ2V0RmlsZUljb24obm9kZTIpfSBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgIDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0iZmlsZS1uYW1lIj4ke25vZGUyLm5hbWV9PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgJHtpc0RpcmVjdG9yeSAmJiBpc0V4cGFuZGVkICYmIG5vZGUyLmNoaWxkcmVuID8gdGhpcy5yZW5kZXJUcmVlKG5vZGUyLmNoaWxkcmVuKSA6ICIifQogICAgYDsKICAgIH0KICAgIGdldEZpbGVJY29uKG5vZGUyKSB7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIHJldHVybiB0aGlzLmV4cGFuZGVkUGF0aHMuaGFzKG5vZGUyLnBhdGgpID8gImx1Y2lkZTpmb2xkZXJPcGVuIiA6ICJsdWNpZGU6Zm9sZGVyIjsKICAgICAgfQogICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICAgIHN3aXRjaCAoZXh0KSB7CiAgICAgICAgY2FzZSAidHMiOgogICAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianMiOgogICAgICAgIGNhc2UgImpzeCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlSnNvbiI7CiAgICAgICAgY2FzZSAiaHRtbCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlQ29kZSI7CiAgICAgICAgY2FzZSAiY3NzIjoKICAgICAgICBjYXNlICJzY3NzIjoKICAgICAgICBjYXNlICJsZXNzIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmZpbGVDb2RlIjsKICAgICAgICBjYXNlICJtZCI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTpmaWxlVGV4dCI7CiAgICAgICAgY2FzZSAicG5nIjoKICAgICAgICBjYXNlICJqcGciOgogICAgICAgIGNhc2UgImpwZWciOgogICAgICAgIGNhc2UgImdpZiI6CiAgICAgICAgY2FzZSAic3ZnIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmltYWdlIjsKICAgICAgICBkZWZhdWx0OgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6ZmlsZSI7CiAgICAgIH0KICAgIH0KICAgIGdldEZpbGVJY29uQ2xhc3Mobm9kZTIpIHsKICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiKQogICAgICAgIHJldHVybiAiZm9sZGVyIjsKICAgICAgY29uc3QgZXh0ID0gbm9kZTIubmFtZS5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBzd2l0Y2ggKGV4dCkgewogICAgICAgIGNhc2UgInRzIjoKICAgICAgICBjYXNlICJ0c3giOgogICAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgICBjYXNlICJqcyI6CiAgICAgICAgY2FzZSAianN4IjoKICAgICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgICAgY2FzZSAianNvbiI6CiAgICAgICAgICByZXR1cm4gImpzb24iOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuICJodG1sIjsKICAgICAgICBjYXNlICJjc3MiOgogICAgICAgIGNhc2UgInNjc3MiOgogICAgICAgIGNhc2UgImxlc3MiOgogICAgICAgICAgcmV0dXJuICJjc3MiOwogICAgICAgIGNhc2UgIm1kIjoKICAgICAgICAgIHJldHVybiAibWFya2Rvd24iOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gImZpbGUiOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVJdGVtQ2xpY2soZTExLCBub2RlMikgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IikgewogICAgICAgIGF3YWl0IHRoaXMudG9nZ2xlRGlyZWN0b3J5KG5vZGUyKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkUGF0aCA9IG5vZGUyLnBhdGg7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1zZWxlY3QiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbm9kZTIucGF0aCwgbmFtZTogbm9kZTIubmFtZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICBhc3luYyB0b2dnbGVEaXJlY3Rvcnkobm9kZTIpIHsKICAgICAgaWYgKHRoaXMuZXhwYW5kZWRQYXRocy5oYXMobm9kZTIucGF0aCkpIHsKICAgICAgICB0aGlzLmV4cGFuZGVkUGF0aHMuZGVsZXRlKG5vZGUyLnBhdGgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZXhwYW5kZWRQYXRocy5hZGQobm9kZTIucGF0aCk7CiAgICAgICAgaWYgKCFub2RlMi5jaGlsZHJlbiB8fCBub2RlMi5jaGlsZHJlbi5sZW5ndGggPT09IDApIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERpcmVjdG9yeUNvbnRlbnRzKG5vZGUyKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBhc3luYyBsb2FkRGlyZWN0b3J5Q29udGVudHMobm9kZTIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKG5vZGUyLnBhdGgpOwogICAgICAgIG5vZGUyLmNoaWxkcmVuID0gdGhpcy5zb3J0RW50cmllcyhlbnRyaWVzKS5tYXAoKGVudHJ5KSA9PiAoewogICAgICAgICAgLi4uZW50cnksCiAgICAgICAgICBsZXZlbDogbm9kZTIubGV2ZWwgKyAxLAogICAgICAgICAgZXhwYW5kZWQ6IGZhbHNlLAogICAgICAgICAgY2hpbGRyZW46IGVudHJ5LnR5cGUgPT09ICJkaXJlY3RvcnkiID8gW10gOiB2b2lkIDAKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIGxvYWQgZGlyZWN0b3J5ICR7bm9kZTIucGF0aH06YCwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBoYW5kbGVDb250ZXh0TWVudShlMTEsIG5vZGUyKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IG1lbnVJdGVtcyA9IFtdOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJmaWxlUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3RmlsZShub2RlMi5wYXRoKQogICAgICAgIH0sIHsKICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICAgIGljb25OYW1lOiAiZm9sZGVyUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuY3JlYXRlTmV3Rm9sZGVyKG5vZGUyLnBhdGgpCiAgICAgICAgfSwgeyBkaXZpZGVyOiB0cnVlIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiUmVuYW1lIiwKICAgICAgICBpY29uTmFtZTogInBlbmNpbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnJlbmFtZUl0ZW0obm9kZTIpCiAgICAgIH0sIHsKICAgICAgICBuYW1lOiAiRHVwbGljYXRlIiwKICAgICAgICBpY29uTmFtZTogImZpbGVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMuZHVwbGljYXRlSXRlbShub2RlMikKICAgICAgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IiwKICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jb3B5SXRlbShub2RlMikKICAgICAgfSk7CiAgICAgIGlmIChub2RlMi50eXBlID09PSAiZGlyZWN0b3J5IiAmJiB0aGlzLmNsaXBib2FyZFBhdGgpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbShub2RlMi5wYXRoKQogICAgICAgIH0pOwogICAgICB9CiAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJ0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5kZWxldGVJdGVtKG5vZGUyKQogICAgICB9KTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbG9zZXN0KCIudHJlZS1pdGVtIikpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGaWxlIiwKICAgICAgICAgIGljb25OYW1lOiAiZmlsZVBsdXMiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLmNyZWF0ZU5ld0ZpbGUoIi8iKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIiLAogICAgICAgICAgaWNvbk5hbWU6ICJmb2xkZXJQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5jcmVhdGVOZXdGb2xkZXIoIi8iKQogICAgICAgIH0KICAgICAgXTsKICAgICAgaWYgKHRoaXMuY2xpcGJvYXJkUGF0aCkgewogICAgICAgIG1lbnVJdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnBhc3RlSXRlbSgiLyIpCiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHNob3dJbnB1dE1vZGFsKG9wdGlvbnMpIHsKICAgICAgcmV0dXJuIG5ldyBQcm9taXNlKGFzeW5jIChyZXNvbHZlMikgPT4gewogICAgICAgIGNvbnN0IG1vZGFsID0gYXdhaXQgRGVlc01vZGFsLmNyZWF0ZUFuZFNob3coewogICAgICAgICAgaGVhZGluZzogb3B0aW9ucy5oZWFkaW5nLAogICAgICAgICAgd2lkdGg6ICJzbWFsbCIsCiAgICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7b3B0aW9ucy5sYWJlbH0KICAgICAgICAgICAgLnZhbHVlPSR7b3B0aW9ucy52YWx1ZSB8fCAiIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICBgLAogICAgICAgICAgbWVudU9wdGlvbnM6IFsKICAgICAgICAgICAgewogICAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsUmVmKSA9PiB7CiAgICAgICAgICAgICAgICBhd2FpdCBtb2RhbFJlZi5kZXN0cm95KCk7CiAgICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiBvcHRpb25zLmJ1dHRvbk5hbWUgfHwgIkNyZWF0ZSIsCiAgICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAobW9kYWxSZWYpID0+IHsKICAgICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnRFbDIgPSBtb2RhbFJlZi5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubW9kYWwgLmNvbnRlbnQiKTsKICAgICAgICAgICAgICAgIGNvbnN0IGlucHV0RWxlbWVudCA9IGNvbnRlbnRFbDI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgICAgICAgY29uc3QgaW5wdXRWYWx1ZSA9IGlucHV0RWxlbWVudD8udmFsdWU/LnRyaW0oKSB8fCAiIjsKICAgICAgICAgICAgICAgIGF3YWl0IG1vZGFsUmVmLmRlc3Ryb3koKTsKICAgICAgICAgICAgICAgIHJlc29sdmUyKGlucHV0VmFsdWUgfHwgbnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgYXdhaXQgbW9kYWwudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY29udGVudEVsID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLm1vZGFsIC5jb250ZW50Iik7CiAgICAgICAgaWYgKGNvbnRlbnRFbCkgewogICAgICAgICAgY29uc3QgaW5wdXRFbGVtZW50ID0gY29udGVudEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtdGV4dCIpOwogICAgICAgICAgaWYgKGlucHV0RWxlbWVudCkgewogICAgICAgICAgICBhd2FpdCBpbnB1dEVsZW1lbnQudXBkYXRlQ29tcGxldGU7CiAgICAgICAgICAgIGlucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGaWxlKHBhcmVudFBhdGgpIHsKICAgICAgY29uc3QgZmlsZU5hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiTmV3IEZpbGUiLAogICAgICAgIGxhYmVsOiAiRmlsZSBuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFmaWxlTmFtZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7ZmlsZU5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7ZmlsZU5hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShuZXdQYXRoLCAiIik7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZmlsZS1jcmVhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHBhdGg6IG5ld1BhdGggfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gY3JlYXRlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBjcmVhdGVOZXdGb2xkZXIocGFyZW50UGF0aCkgewogICAgICBjb25zdCBmb2xkZXJOYW1lID0gYXdhaXQgdGhpcy5zaG93SW5wdXRNb2RhbCh7CiAgICAgICAgaGVhZGluZzogIk5ldyBGb2xkZXIiLAogICAgICAgIGxhYmVsOiAiRm9sZGVyIG5hbWUiCiAgICAgIH0pOwogICAgICBpZiAoIWZvbGRlck5hbWUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdQYXRoID0gcGFyZW50UGF0aCA9PT0gIi8iID8gYC8ke2ZvbGRlck5hbWV9YCA6IGAke3BhcmVudFBhdGh9LyR7Zm9sZGVyTmFtZX1gOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQubWtkaXIobmV3UGF0aCk7CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZm9sZGVyLWNyZWF0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgcGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgZm9sZGVyOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGVsZXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb25maXJtZWQgPSBjb25maXJtKGBEZWxldGUgJHtub2RlMi5uYW1lfT9gKTsKICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucm0obm9kZTIucGF0aCwgeyByZWN1cnNpdmU6IG5vZGUyLnR5cGUgPT09ICJkaXJlY3RvcnkiIH0pOwogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBwYXRoOiBub2RlMi5wYXRoLCB0eXBlOiBub2RlMi50eXBlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGRlbGV0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZW5hbWUgYSBmaWxlIG9yIGZvbGRlcgogICAgICovCiAgICBhc3luYyByZW5hbWVJdGVtKG5vZGUyKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld05hbWUgPSBhd2FpdCB0aGlzLnNob3dJbnB1dE1vZGFsKHsKICAgICAgICBoZWFkaW5nOiAiUmVuYW1lIiwKICAgICAgICBsYWJlbDogIk5ldyBuYW1lIiwKICAgICAgICB2YWx1ZTogbm9kZTIubmFtZSwKICAgICAgICBidXR0b25OYW1lOiAiUmVuYW1lIgogICAgICB9KTsKICAgICAgaWYgKCFuZXdOYW1lIHx8IG5ld05hbWUgPT09IG5vZGUyLm5hbWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5ybShub2RlMi5wYXRoKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgYXdhaXQgdGhpcy5jb3B5RGlyZWN0b3J5Q29udGVudHMobm9kZTIucGF0aCwgbmV3UGF0aCk7CiAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJtKG5vZGUyLnBhdGgsIHsgcmVjdXJzaXZlOiB0cnVlIH0pOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLnJlZnJlc2goKTsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJpdGVtLXJlbmFtZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgb2xkUGF0aDogbm9kZTIucGF0aCwgbmV3UGF0aCwgdHlwZTogbm9kZTIudHlwZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5hbWUgaXRlbToiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogRHVwbGljYXRlIGEgZmlsZSBvciBmb2xkZXIKICAgICAqLwogICAgYXN5bmMgZHVwbGljYXRlSXRlbShub2RlMikgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBwYXJlbnRQYXRoID0gbm9kZTIucGF0aC5zdWJzdHJpbmcoMCwgbm9kZTIucGF0aC5sYXN0SW5kZXhPZigiLyIpKSB8fCAiLyI7CiAgICAgIGxldCBuZXdOYW1lOwogICAgICBpZiAobm9kZTIudHlwZSA9PT0gImZpbGUiKSB7CiAgICAgICAgY29uc3QgbGFzdERvdCA9IG5vZGUyLm5hbWUubGFzdEluZGV4T2YoIi4iKTsKICAgICAgICBpZiAobGFzdERvdCA+IDApIHsKICAgICAgICAgIGNvbnN0IGJhc2VOYW1lID0gbm9kZTIubmFtZS5zdWJzdHJpbmcoMCwgbGFzdERvdCk7CiAgICAgICAgICBjb25zdCBleHQgPSBub2RlMi5uYW1lLnN1YnN0cmluZyhsYXN0RG90KTsKICAgICAgICAgIG5ld05hbWUgPSBgJHtiYXNlTmFtZX1fY29weSR7ZXh0fWA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIG5ld05hbWUgPSBgJHtub2RlMi5uYW1lfV9jb3B5YDsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbmV3TmFtZSA9IGAke25vZGUyLm5hbWV9X2NvcHlgOwogICAgICB9CiAgICAgIGNvbnN0IG5ld1BhdGggPSBwYXJlbnRQYXRoID09PSAiLyIgPyBgLyR7bmV3TmFtZX1gIDogYCR7cGFyZW50UGF0aH0vJHtuZXdOYW1lfWA7CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKG5vZGUyLnR5cGUgPT09ICJmaWxlIikgewogICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKG5vZGUyLnBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUobmV3UGF0aCwgY29udGVudDMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmNvcHlEaXJlY3RvcnlDb250ZW50cyhub2RlMi5wYXRoLCBuZXdQYXRoKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZWZyZXNoKCk7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiaXRlbS1kdXBsaWNhdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IG5vZGUyLnBhdGgsIG5ld1BhdGgsIHR5cGU6IG5vZGUyLnR5cGUgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGYWlsZWQgdG8gZHVwbGljYXRlIGl0ZW06IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIENvcHkgaXRlbSBwYXRoIHRvIGNsaXBib2FyZAogICAgICovCiAgICBhc3luYyBjb3B5SXRlbShub2RlMikgewogICAgICB0aGlzLmNsaXBib2FyZFBhdGggPSBub2RlMi5wYXRoOwogICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9ICJjb3B5IjsKICAgIH0KICAgIC8qKgogICAgICogUGFzdGUgY29waWVkIGl0ZW0gdG8gdGFyZ2V0IGRpcmVjdG9yeQogICAgICovCiAgICBhc3luYyBwYXN0ZUl0ZW0odGFyZ2V0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRoaXMuY2xpcGJvYXJkUGF0aCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5hbWUgPSB0aGlzLmNsaXBib2FyZFBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAicGFzdGVkIjsKICAgICAgY29uc3QgbmV3UGF0aCA9IHRhcmdldFBhdGggPT09ICIvIiA/IGAvJHtuYW1lfWAgOiBgJHt0YXJnZXRQYXRofS8ke25hbWV9YDsKICAgICAgdHJ5IHsKICAgICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKHRoaXMuY2xpcGJvYXJkUGF0aCkpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIlNvdXJjZSBmaWxlIG5vIGxvbmdlciBleGlzdHMiKTsKICAgICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgICB0aGlzLmNsaXBib2FyZE9wZXJhdGlvbiA9IG51bGw7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRyeSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUodGhpcy5jbGlwYm9hcmRQYXRoKTsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQud3JpdGVGaWxlKG5ld1BhdGgsIGNvbnRlbnQzKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHRoaXMuY2xpcGJvYXJkUGF0aCwgbmV3UGF0aCk7CiAgICAgICAgfQogICAgICAgIGF3YWl0IHRoaXMucmVmcmVzaCgpOwogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoIml0ZW0tcGFzdGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IHNvdXJjZVBhdGg6IHRoaXMuY2xpcGJvYXJkUGF0aCwgdGFyZ2V0UGF0aDogbmV3UGF0aCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMuY2xpcGJvYXJkUGF0aCA9IG51bGw7CiAgICAgICAgdGhpcy5jbGlwYm9hcmRPcGVyYXRpb24gPSBudWxsOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBwYXN0ZSBpdGVtOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWN1cnNpdmVseSBjb3B5IGRpcmVjdG9yeSBjb250ZW50cyB0byBhIG5ldyBwYXRoCiAgICAgKi8KICAgIGFzeW5jIGNvcHlEaXJlY3RvcnlDb250ZW50cyhzb3VyY2VQYXRoLCBkZXN0UGF0aCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50Lm1rZGlyKGRlc3RQYXRoKTsKICAgICAgY29uc3QgZW50cmllcyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZERpcihzb3VyY2VQYXRoKTsKICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgY29uc3Qgc3JjRW50cnlQYXRoID0gc291cmNlUGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke3NvdXJjZVBhdGh9LyR7ZW50cnkubmFtZX1gOwogICAgICAgIGNvbnN0IGRlc3RFbnRyeVBhdGggPSBkZXN0UGF0aCA9PT0gIi8iID8gYC8ke2VudHJ5Lm5hbWV9YCA6IGAke2Rlc3RQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuY29weURpcmVjdG9yeUNvbnRlbnRzKHNyY0VudHJ5UGF0aCwgZGVzdEVudHJ5UGF0aCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShzcmNFbnRyeVBhdGgpOwogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZGVzdEVudHJ5UGF0aCwgY29udGVudDMpOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikpIHsKICAgICAgICBpZiAodGhpcy5sYXN0RXhlY3V0aW9uRW52aXJvbm1lbnQgIT09IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpIHsKICAgICAgICAgIHRoaXMuc3RvcEZpbGVXYXRjaGVyKCk7CiAgICAgICAgICB0aGlzLmxhc3RFeGVjdXRpb25FbnZpcm9ubWVudCA9IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQ7CiAgICAgICAgfQogICAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUcmVlKCk7CiAgICAgICAgICB0aGlzLnN0YXJ0RmlsZVdhdGNoZXIoKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnN0b3BGaWxlV2F0Y2hlcigpOwogICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMucmVmcmVzaERlYm91bmNlVGltZW91dCk7CiAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgc3RhcnRGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMuZmlsZVdhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuZmlsZVdhdGNoZXIgPSB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndhdGNoKCIvIiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0KSB7CiAgICAgICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnJlZnJlc2hEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5yZWZyZXNoRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMucmVmcmVzaCgpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9LCB7IHJlY3Vyc2l2ZTogdHJ1ZSB9KTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZpbGUgd2F0Y2hpbmcgbm90IHN1cHBvcnRlZDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIHN0b3BGaWxlV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMuZmlsZVdhdGNoZXIpIHsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyLnN0b3AoKTsKICAgICAgICB0aGlzLmZpbGVXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFRyZWUoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICh0aGlzLmxvYWRUcmVlU3RhcnRlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gdHJ1ZTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICB0aGlzLmVycm9yTWVzc2FnZSA9ICIiOwogICAgICB0cnkgewogICAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkeSkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5pbml0KCk7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGVudHJpZXMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWREaXIodGhpcy5yb290UGF0aCk7CiAgICAgICAgdGhpcy50cmVlRGF0YSA9IHRoaXMuc29ydEVudHJpZXMoZW50cmllcykubWFwKChlbnRyeSkgPT4gKHsKICAgICAgICAgIC4uLmVudHJ5LAogICAgICAgICAgbGV2ZWw6IDAsCiAgICAgICAgICBleHBhbmRlZDogZmFsc2UsCiAgICAgICAgICBjaGlsZHJlbjogZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIgPyBbXSA6IHZvaWQgMAogICAgICAgIH0pKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB0aGlzLmVycm9yTWVzc2FnZSA9IGBGYWlsZWQgdG8gbG9hZCBmaWxlczogJHtlcnJvcn1gOwogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIGZpbGUgdHJlZToiLCBlcnJvcik7CiAgICAgICAgdGhpcy5sb2FkVHJlZVN0YXJ0ZWQgPSBmYWxzZTsKICAgICAgfSBmaW5hbGx5IHsKICAgICAgICB0aGlzLmlzTG9hZGluZyA9IGZhbHNlOwogICAgICB9CiAgICB9CiAgICBzb3J0RW50cmllcyhlbnRyaWVzKSB7CiAgICAgIHJldHVybiBlbnRyaWVzLnNvcnQoKGE1LCBiNSkgPT4gewogICAgICAgIGlmIChhNS50eXBlICE9PSBiNS50eXBlKSB7CiAgICAgICAgICByZXR1cm4gYTUudHlwZSA9PT0gImRpcmVjdG9yeSIgPyAtMSA6IDE7CiAgICAgICAgfQogICAgICAgIHJldHVybiBhNS5uYW1lLmxvY2FsZUNvbXBhcmUoYjUubmFtZSk7CiAgICAgIH0pOwogICAgfQogICAgYXN5bmMgcmVmcmVzaCgpIHsKICAgICAgdGhpcy5leHBhbmRlZFBhdGhzLmNsZWFyKCk7CiAgICAgIHRoaXMubG9hZFRyZWVTdGFydGVkID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZFRyZWUoKTsKICAgIH0KICAgIHNlbGVjdEZpbGUocGF0aDIpIHsKICAgICAgdGhpcy5zZWxlY3RlZFBhdGggPSBwYXRoMjsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VGaWxldHJlZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsLXByZXZpZXcuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X3NlcnZpY2VzKCk7CnZhciBfX2VzRGVjb3JhdGU1MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNTMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfY29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2RlY29yYXRvcnM7CiAgbGV0IF9saW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VUZXJtaW5hbFByZXZpZXcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfY29tbWFuZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xpbmVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTUyKHRoaXMsIG51bGwsIF9jb21tYW5kX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNvbW1hbmQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY29tbWFuZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY29tbWFuZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jb21tYW5kX2luaXRpYWxpemVycywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Mih0aGlzLCBudWxsLCBfbGluZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGluZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImxpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxpbmVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5saW5lcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9saW5lc19pbml0aWFsaXplcnMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZVRlcm1pbmFsUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmAKICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgIC5jb21tYW5kPSR7InBucG0gaW5zdGFsbCJ9CiAgICAgIC5saW5lcz0ke1sKICAgICAgIlBhY2thZ2VzOiArNDIiLAogICAgICAiUHJvZ3Jlc3M6IHJlc29sdmVkIDE0MiwgcmV1c2VkIDE0MCwgZG93bmxvYWRlZCAyLCBhZGRlZCA0MiwgZG9uZSIsCiAgICAgICIiLAogICAgICAiZGVwZW5kZW5jaWVzOiIsCiAgICAgICIrIEBwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSA0LjIuMyIsCiAgICAgICIrIHR5cGVzY3JpcHQgNS4zLjMiLAogICAgICAiIiwKICAgICAgIkRvbmUgaW4gMi4zcyIKICAgIF19CiAgICA+PC9kZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3PgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAjY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1Myh0aGlzLCBfY29tbWFuZF9pbml0aWFsaXplcnMsICIiKTsKICAgIC8qKgogICAgICogVGhlIGNvbW1hbmQgYmVpbmcgZGlzcGxheWVkIChzaG93biBpbiBoZWFkZXIpCiAgICAgKi8KICAgIGdldCBjb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jY29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNvbW1hbmQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2NvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsaW5lc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTModGhpcywgX2NvbW1hbmRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICAvKioKICAgICAqIE91dHB1dCBsaW5lcyB0byBkaXNwbGF5CiAgICAgKi8KICAgIGdldCBsaW5lcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xpbmVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICB0ZXJtaW5hbCA9IChfX3J1bkluaXRpYWxpemVyczUzKHRoaXMsIF9saW5lc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZml0QWRkb24gPSBudWxsOwogICAgbGFzdExpbmVDb3VudCA9IDA7CiAgICByZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICB0ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLXByZXZpZXcgewogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICB9CgogICAgICAudGVybWluYWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTAlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1oZWFkZXItY29tbWFuZCB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRhaW5lciB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAjeHRlcm0tY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA4cHg7CiAgICAgICAgbGVmdDogOHB4OwogICAgICAgIHJpZ2h0OiA4cHg7CiAgICAgICAgYm90dG9tOiA4cHg7CiAgICAgIH0KCiAgICAgIC8qIHh0ZXJtLmpzIHN0eWxlcyAqLwogICAgICAueHRlcm0gewogICAgICAgIGZvbnQtZmVhdHVyZS1zZXR0aW5nczogJ2xpZ2EnIDA7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIC1tcy11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAueHRlcm0uZm9jdXMsCiAgICAgIC54dGVybTpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1oZWxwZXJzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0taGVscGVyLXRleHRhcmVhIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICAgIHotaW5kZXg6IC01OwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzAwMDAwMCIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMzMzMiLCAiI2ZmZmZmZiIpfTsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KCiAgICAgIC54dGVybSAuY29tcG9zaXRpb24tdmlldy5hY3RpdmUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDAwMDAwIil9OwogICAgICAgIG92ZXJmbG93LXk6IHNjcm9sbDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1zY3JlZW4gY2FudmFzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDA7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tc2Nyb2xsLWFyZWEgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnh0ZXJtLWNoYXItbWVhc3VyZS1lbGVtZW50IHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogLTk5OTllbTsKICAgICAgICBsaW5lLWhlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAueHRlcm0gewogICAgICAgIGN1cnNvcjogdGV4dDsKICAgICAgfQoKICAgICAgLnh0ZXJtLmVuYWJsZS1tb3VzZS1ldmVudHMgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgfQoKICAgICAgLnh0ZXJtLnh0ZXJtLWN1cnNvci1wb2ludGVyIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC54dGVybS5jb2x1bW4tc2VsZWN0LmZvY3VzIHsKICAgICAgICBjdXJzb3I6IGNyb3NzaGFpcjsKICAgICAgfQoKICAgICAgLnh0ZXJtIC54dGVybS1hY2Nlc3NpYmlsaXR5LAogICAgICAueHRlcm0gLnh0ZXJtLW1lc3NhZ2UgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgICAgY29sb3I6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAueHRlcm0gLmxpdmUtcmVnaW9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogLTk5OTlweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC54dGVybS1kaW0gewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLnh0ZXJtLXVuZGVybGluZSB7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICAgIH0KCiAgICAgIC8qIEN1c3RvbSBzY3JvbGxiYXIgZm9yIHh0ZXJtIHZpZXdwb3J0ICovCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgOCUpIil9OwogICAgICB9CgogICAgICAueHRlcm0gLnh0ZXJtLXZpZXdwb3J0Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDgwJSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KCiAgICAgIC54dGVybSAueHRlcm0tdmlld3BvcnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzAlKSIsICJoc2woMCAwJSAzNSUpIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLXByZXZpZXciPgogICAgICAgIDxkaXYgY2xhc3M9InRlcm1pbmFsLWhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWljb24iPiQ8L3NwYW4+CiAgICAgICAgICA8c3BhbiBjbGFzcz0idGVybWluYWwtaGVhZGVyLWNvbW1hbmQiPiR7dGhpcy5jb21tYW5kIHx8ICJXYWl0aW5nLi4uIn08L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9Inh0ZXJtLWNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRlcm1pbmFsIHRoZW1lIGNvbG9ycyBiYXNlZCBvbiBicmlnaHQvZGFyayBtb2RlCiAgICAgKi8KICAgIGdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpIHsKICAgICAgcmV0dXJuIGlzQnJpZ2h0ID8gewogICAgICAgIGJhY2tncm91bmQ6ICIjZmZmZmZmIiwKICAgICAgICBmb3JlZ3JvdW5kOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yOiAiIzMzMzMzMyIsCiAgICAgICAgY3Vyc29yQWNjZW50OiAiI2ZmZmZmZiIsCiAgICAgICAgc2VsZWN0aW9uQmFja2dyb3VuZDogInJnYmEoMCwgMCwgMCwgMC4yKSIKICAgICAgfSA6IHsKICAgICAgICBiYWNrZ3JvdW5kOiAiIzAwMDAwMCIsCiAgICAgICAgZm9yZWdyb3VuZDogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvcjogIiNjY2NjY2MiLAogICAgICAgIGN1cnNvckFjY2VudDogIiMwMDAwMDAiLAogICAgICAgIHNlbGVjdGlvbkJhY2tncm91bmQ6ICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMikiCiAgICAgIH07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LmdldEVsZW1lbnRCeUlkKCJ4dGVybS1jb250YWluZXIiKTsKICAgICAgaWYgKCFjb250YWluZXIpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkb210b29sc0luc3RhbmNlID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IGlzQnJpZ2h0ID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIuZ29CcmlnaHRCb29sZWFuOwogICAgICBjb25zdCBsaWJMb2FkZXIgPSBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpOwogICAgICBjb25zdCBbeHRlcm1CdW5kbGUsIGZpdEFkZG9uQnVuZGxlXSA9IGF3YWl0IFByb21pc2UuYWxsKFsKICAgICAgICBsaWJMb2FkZXIubG9hZFh0ZXJtKCksCiAgICAgICAgbGliTG9hZGVyLmxvYWRYdGVybUZpdEFkZG9uKCkKICAgICAgXSk7CiAgICAgIHRoaXMudGVybWluYWwgPSBuZXcgeHRlcm1CdW5kbGUuVGVybWluYWwoewogICAgICAgIGNvbnZlcnRFb2w6IHRydWUsCiAgICAgICAgY3Vyc29yQmxpbms6IGZhbHNlLAogICAgICAgIGRpc2FibGVTdGRpbjogdHJ1ZSwKICAgICAgICBmb250U2l6ZTogMTIsCiAgICAgICAgZm9udEZhbWlseTogIidTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2UiLAogICAgICAgIHRoZW1lOiB0aGlzLmdldFRlcm1pbmFsVGhlbWUoaXNCcmlnaHQpLAogICAgICAgIHNjcm9sbGJhY2s6IDFlMwogICAgICB9KTsKICAgICAgdGhpcy50ZXJtaW5hbFRoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBpZiAodGhpcy50ZXJtaW5hbCkgewogICAgICAgICAgdGhpcy50ZXJtaW5hbC5vcHRpb25zLnRoZW1lID0gdGhpcy5nZXRUZXJtaW5hbFRoZW1lKGdvQnJpZ2h0KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLmZpdEFkZG9uID0gbmV3IGZpdEFkZG9uQnVuZGxlLkZpdEFkZG9uKCk7CiAgICAgIHRoaXMudGVybWluYWwubG9hZEFkZG9uKHRoaXMuZml0QWRkb24pOwogICAgICB0aGlzLnRlcm1pbmFsLm9wZW4oY29udGFpbmVyKTsKICAgICAgdGhpcy5maXRBZGRvbi5maXQoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgaWYgKHRoaXMuZml0QWRkb24pIHsKICAgICAgICAgIHRoaXMuZml0QWRkb24uZml0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKGNvbnRhaW5lcik7CiAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygibGluZXMiKSkgewogICAgICAgIHRoaXMud3JpdGVOZXdMaW5lcygpOwogICAgICB9CiAgICB9CiAgICB3cml0ZU5ld0xpbmVzKCkgewogICAgICBpZiAoIXRoaXMudGVybWluYWwpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBuZXdMaW5lcyA9IHRoaXMubGluZXMuc2xpY2UodGhpcy5sYXN0TGluZUNvdW50KTsKICAgICAgZm9yIChjb25zdCBsaW5lIG9mIG5ld0xpbmVzKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC53cml0ZWxuKGxpbmUpOwogICAgICB9CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IHRoaXMubGluZXMubGVuZ3RoOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKSB7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5kaXNjb25uZWN0KCk7CiAgICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbikgewogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMudGVybWluYWxUaGVtZVN1YnNjcmlwdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudGVybWluYWwpIHsKICAgICAgICB0aGlzLnRlcm1pbmFsLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLnRlcm1pbmFsID0gbnVsbDsKICAgICAgfQogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgfQogICAgLyoqCiAgICAgKiBBZGQgYSBuZXcgbGluZSB0byB0aGUgb3V0cHV0CiAgICAgKi8KICAgIGFkZExpbmUobGluZSkgewogICAgICB0aGlzLmxpbmVzID0gWy4uLnRoaXMubGluZXMsIGxpbmVdOwogICAgfQogICAgLyoqCiAgICAgKiBDbGVhciBhbGwgb3V0cHV0IGxpbmVzCiAgICAgKi8KICAgIGNsZWFyKCkgewogICAgICB0aGlzLmxpbmVzID0gW107CiAgICAgIHRoaXMubGFzdExpbmVDb3VudCA9IDA7CiAgICAgIGlmICh0aGlzLnRlcm1pbmFsKSB7CiAgICAgICAgdGhpcy50ZXJtaW5hbC5jbGVhcigpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczUzKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlVGVybWluYWxQcmV2aWV3MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLWJvdHRvbWJhci9kZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNTMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlQm90dG9tYmFyID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9yczsKICBsZXQgX2V4ZWN1dGlvbkVudmlyb25tZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NjcmlwdHNfZGVjb3JhdG9yczsKICBsZXQgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnM7CiAgbGV0IF9wYWNrYWdlU3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfb3V0ZGF0ZWRQYWNrYWdlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzQ2hlY2tpbmdQYWNrYWdlc19kZWNvcmF0b3JzOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNDaGVja2luZ1BhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9zY3JpcHRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wYWNrYWdlU3RhdHVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0NoZWNraW5nUGFja2FnZXNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImV4ZWN1dGlvbkVudmlyb25tZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJleGVjdXRpb25FbnZpcm9ubWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5leGVjdXRpb25FbnZpcm9ubWVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZXhlY3V0aW9uRW52aXJvbm1lbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfc2NyaXB0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzY3JpcHRzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzY3JpcHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNjcmlwdHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNjcmlwdHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2NyaXB0c19pbml0aWFsaXplcnMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTModGhpcywgbnVsbCwgX3BhY2thZ2VTdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGFja2FnZVN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFja2FnZVN0YXR1cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWNrYWdlU3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wYWNrYWdlU3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhY2thZ2VTdGF0dXNfaW5pdGlhbGl6ZXJzLCBfcGFja2FnZVN0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTUzKHRoaXMsIG51bGwsIF9vdXRkYXRlZFBhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dGRhdGVkUGFja2FnZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dGRhdGVkUGFja2FnZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0ZGF0ZWRQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0ZGF0ZWRQYWNrYWdlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgX291dGRhdGVkUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Myh0aGlzLCBudWxsLCBfaXNDaGVja2luZ1BhY2thZ2VzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzQ2hlY2tpbmdQYWNrYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNDaGVja2luZ1BhY2thZ2VzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQ2hlY2tpbmdQYWNrYWdlcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNDaGVja2luZ1BhY2thZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzQ2hlY2tpbmdQYWNrYWdlc19pbml0aWFsaXplcnMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VCb3R0b21iYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzLCBudWxsKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGV4ZWN1dGlvbkVudmlyb25tZW50KHZhbHVlMikgewogICAgICB0aGlzLiNleGVjdXRpb25FbnZpcm9ubWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NjcmlwdHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3NjcmlwdHNfaW5pdGlhbGl6ZXJzLCB7fSkpOwogICAgLy8gU2NyaXB0IHJ1bm5lciBzdGF0ZQogICAgZ2V0IHNjcmlwdHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzY3JpcHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2NyaXB0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2NyaXB0c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9zY3JpcHRzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfcGFja2FnZVN0YXR1c19pbml0aWFsaXplcnMsICJpZGxlIikpOwogICAgLy8gUGFja2FnZSBjaGVja2VyIHN0YXRlCiAgICBnZXQgcGFja2FnZVN0YXR1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BhY2thZ2VTdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWNrYWdlU3RhdHVzKHZhbHVlMikgewogICAgICB0aGlzLiNwYWNrYWdlU3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTQodGhpcywgX3BhY2thZ2VTdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvdXRkYXRlZFBhY2thZ2VzKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0ZGF0ZWRQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dGRhdGVkUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI291dGRhdGVkUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9vdXRkYXRlZFBhY2thZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NCh0aGlzLCBfaXNDaGVja2luZ1BhY2thZ2VzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0NoZWNraW5nUGFja2FnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0NoZWNraW5nUGFja2FnZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0NoZWNraW5nUGFja2FnZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzQ2hlY2tpbmdQYWNrYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gVHJhY2sgaWYgd2UgaGF2ZSBhIHBlbmRpbmcgcGFja2FnZSB1cGRhdGUgdGhhdCBzaG91bGQgdHJpZ2dlciByZWZyZXNoCiAgICBwZW5kaW5nUGFja2FnZVVwZGF0ZSA9IChfX3J1bkluaXRpYWxpemVyczU0KHRoaXMsIF9pc0NoZWNraW5nUGFja2FnZXNfZXh0cmFJbml0aWFsaXplcnMpLCBmYWxzZSk7CiAgICAvLyBCb3VuZCBoYW5kbGVyIGZvciBwcm9jZXNzLWNvbXBsZXRlIGV2ZW50cwogICAgaGFuZGxlUHJvY2Vzc0NvbXBsZXRlID0gKGUxMSkgPT4gewogICAgICBpZiAodGhpcy5wZW5kaW5nUGFja2FnZVVwZGF0ZSkgewogICAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSBmYWxzZTsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMuY2hlY2tQYWNrYWdlcygpLCA1MDApOwogICAgICB9CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5ib3R0b20tYmFyIHsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDAgOHB4OwogICAgICAgIGdhcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDYlKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBjb2xvciAwLjE1cyBlYXNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC53aWRnZXQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAyMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQgZGVlcy1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLndpZGdldC1zZXBhcmF0b3IgewogICAgICAgIHdpZHRoOiAxcHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4MCUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLndpZGdldC5ydW5uaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgMTAwJSA0NSUpIiwgImhzbCgyMTAgMTAwJSA2MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwLXRvLWRhdGUgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDE0MiA3MCUgMzUlKSIsICJoc2woMTQyIDcwJSA1MCUpIil9OwogICAgICB9CgogICAgICAud2lkZ2V0LnVwZGF0ZXMtYXZhaWxhYmxlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgzOCA5MiUgNDUlKSIsICJoc2woMzggOTIlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQuZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgZnJvbSB7IHRyYW5zZm9ybTogcm90YXRlKDBkZWcpOyB9CiAgICAgICAgdG8geyB0cmFuc2Zvcm06IHJvdGF0ZSgzNjBkZWcpOyB9CiAgICAgIH0KCiAgICAgIC5zcGlubmluZyB7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDFzIGxpbmVhciBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgLnNwYWNlciB7CiAgICAgICAgZmxleDogMTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJib3R0b20tYmFyIj4KICAgICAgICA8IS0tIFNjcmlwdCBSdW5uZXIgV2lkZ2V0IC0tPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJ3aWRnZXQiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZVNjcmlwdENsaWNrfQogICAgICAgICAgdGl0bGU9IlJ1biBzY3JpcHQiCiAgICAgICAgPgogICAgICAgICAgPGRlZXMtaWNvbgogICAgICAgICAgICAuaWNvbj0keyJsdWNpZGU6cGxheSJ9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgID48L2RlZXMtaWNvbj4KICAgICAgICAgIDxzcGFuPlNjcmlwdHM8L3NwYW4+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1zZXBhcmF0b3IiPjwvZGl2PgoKICAgICAgICA8IS0tIFBhY2thZ2UgQ2hlY2tlciBXaWRnZXQgLS0+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9IndpZGdldCAke3RoaXMuZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCl9IgogICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVQYWNrYWdlQ2xpY2t9CiAgICAgICAgICB0aXRsZT0iJHt0aGlzLmdldFBhY2thZ2VUb29sdGlwKCl9IgogICAgICAgID4KICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgLmljb249JHt0aGlzLmdldFBhY2thZ2VJY29uKCl9CiAgICAgICAgICAgIGljb25TaXplPSIxMiIKICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPyAic3Bpbm5pbmciIDogIiJ9IgogICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+JHt0aGlzLmdldFBhY2thZ2VTdGF0dXNUZXh0KCl9PC9zcGFuPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjZXIiPjwvZGl2PgoKICAgICAgICA8IS0tIEZ1dHVyZSB3aWRnZXRzIGNhbiBiZSBhZGRlZCBoZXJlIC0tPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoInByb2Nlc3MtY29tcGxldGUiLCB0aGlzLmhhbmRsZVByb2Nlc3NDb21wbGV0ZSk7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImV4ZWN1dGlvbkVudmlyb25tZW50IikgJiYgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkgewogICAgICAgIGF3YWl0IHRoaXMubG9hZFNjcmlwdHMoKTsKICAgICAgICBhd2FpdCB0aGlzLmNoZWNrUGFja2FnZXMoKTsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBTY3JpcHQgUnVubmVyID09PT09PT09PT0KICAgIGFzeW5jIGxvYWRTY3JpcHRzKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnNjcmlwdHMgPSB7fTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKCIvcGFja2FnZS5qc29uIik7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb24gPSBKU09OLnBhcnNlKGNvbnRlbnQzKTsKICAgICAgICB0aGlzLnNjcmlwdHMgPSBwYWNrYWdlSnNvbi5zY3JpcHRzIHx8IHt9OwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGxvYWQgc2NyaXB0cyBmcm9tIHBhY2thZ2UuanNvbjoiLCBlcnJvcik7CiAgICAgICAgdGhpcy5zY3JpcHRzID0ge307CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGhhbmRsZVNjcmlwdENsaWNrKGUxMSkgewogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnN0IHNjcmlwdE5hbWVzID0gT2JqZWN0LmtleXModGhpcy5zY3JpcHRzKTsKICAgICAgaWYgKHNjcmlwdE5hbWVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBtZW51SXRlbXMgPSBzY3JpcHROYW1lcy5tYXAoKG5hbWUpID0+ICh7CiAgICAgICAgbmFtZSwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0ZXJtaW5hbCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJ1blNjcmlwdChuYW1lKTsKICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIGFzeW5jIHJ1blNjcmlwdChzY3JpcHROYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRldGFpbCA9IHsKICAgICAgICB0eXBlOiAic2NyaXB0IiwKICAgICAgICBsYWJlbDogc2NyaXB0TmFtZSwKICAgICAgICBjb21tYW5kOiAicG5wbSIsCiAgICAgICAgYXJnczogWyJydW4iLCBzY3JpcHROYW1lXSwKICAgICAgICBtZXRhZGF0YTogeyBzY3JpcHROYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgLy8gPT09PT09PT09PSBQYWNrYWdlIENoZWNrZXIgPT09PT09PT09PQogICAgYXN5bmMgY2hlY2tQYWNrYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImlkbGUiOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0cnkgewogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoIi9wYWNrYWdlLmpzb24iKTsKICAgICAgICBpZiAoIXBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAiaWRsZSI7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJjaGVja2luZyI7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSB0cnVlOwogICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bigicG5wbSIsIFsib3V0ZGF0ZWQiLCAiLS1qc29uIl0pOwogICAgICAgIGxldCBvdXRwdXQgPSAiIjsKICAgICAgICBjb25zdCBvdXRwdXRSZWFkZXIgPSBwcm9jZXNzNC5vdXRwdXQuZ2V0UmVhZGVyKCk7CiAgICAgICAgY29uc3QgcmVhZE91dHB1dCA9IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIHdoaWxlICh0cnVlKSB7CiAgICAgICAgICAgICAgY29uc3QgeyBkb25lLCB2YWx1ZTogdmFsdWUyIH0gPSBhd2FpdCBvdXRwdXRSZWFkZXIucmVhZCgpOwogICAgICAgICAgICAgIGlmIChkb25lKQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgb3V0cHV0ICs9IHZhbHVlMjsKICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICByZWFkT3V0cHV0KCk7CiAgICAgICAgY29uc3QgZXhpdENvZGUgPSBhd2FpdCBQcm9taXNlLnJhY2UoWwogICAgICAgICAgcHJvY2VzczQuZXhpdCwKICAgICAgICAgIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dCgoKSA9PiByZXNvbHZlMigtMSksIDFlNCkpCiAgICAgICAgXSk7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IG91dHB1dFJlYWRlci5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAtMSkgewogICAgICAgICAgY29uc29sZS53YXJuKCJQYWNrYWdlIGNoZWNrIHRpbWVkIG91dCIpOwogICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gImVycm9yIjsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGV4aXRDb2RlID09PSAwKSB7CiAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSBbXTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgb3V0ZGF0ZWREYXRhID0gSlNPTi5wYXJzZShvdXRwdXQpOwogICAgICAgICAgICB0aGlzLm91dGRhdGVkUGFja2FnZXMgPSB0aGlzLnBhcnNlT3V0ZGF0ZWRQYWNrYWdlcyhvdXRkYXRlZERhdGEpOwogICAgICAgICAgICB0aGlzLnBhY2thZ2VTdGF0dXMgPSB0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoID4gMCA/ICJ1cGRhdGVzLWF2YWlsYWJsZSIgOiAidXAtdG8tZGF0ZSI7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgICAgdGhpcy5wYWNrYWdlU3RhdHVzID0gInVwZGF0ZXMtYXZhaWxhYmxlIjsKICAgICAgICAgICAgdGhpcy5vdXRkYXRlZFBhY2thZ2VzID0gW107CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIGNoZWNrIGZvciBwYWNrYWdlIHVwZGF0ZXM6IiwgZXJyb3IpOwogICAgICAgIHRoaXMucGFja2FnZVN0YXR1cyA9ICJlcnJvciI7CiAgICAgIH0gZmluYWxseSB7CiAgICAgICAgdGhpcy5pc0NoZWNraW5nUGFja2FnZXMgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgcGFyc2VPdXRkYXRlZFBhY2thZ2VzKGRhdGEpIHsKICAgICAgY29uc3QgcGFja2FnZXMgPSBbXTsKICAgICAgaWYgKHR5cGVvZiBkYXRhID09PSAib2JqZWN0IiAmJiBkYXRhICE9PSBudWxsKSB7CiAgICAgICAgZm9yIChjb25zdCBbbmFtZSwgaW5mb10gb2YgT2JqZWN0LmVudHJpZXMoZGF0YSkpIHsKICAgICAgICAgIGNvbnN0IHBrZ0luZm8gPSBpbmZvOwogICAgICAgICAgcGFja2FnZXMucHVzaCh7CiAgICAgICAgICAgIG5hbWUsCiAgICAgICAgICAgIGN1cnJlbnQ6IHBrZ0luZm8uY3VycmVudCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHdhbnRlZDogcGtnSW5mby53YW50ZWQgfHwgcGtnSW5mby5jdXJyZW50IHx8ICJ1bmtub3duIiwKICAgICAgICAgICAgbGF0ZXN0OiBwa2dJbmZvLmxhdGVzdCB8fCBwa2dJbmZvLndhbnRlZCB8fCAidW5rbm93biIsCiAgICAgICAgICAgIHR5cGU6IHBrZ0luZm8uZGVwZW5kZW5jeVR5cGUgPT09ICJkZXZEZXBlbmRlbmNpZXMiID8gImRldkRlcGVuZGVuY2llcyIgOiAiZGVwZW5kZW5jaWVzIgogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBwYWNrYWdlczsKICAgIH0KICAgIGFzeW5jIGhhbmRsZVBhY2thZ2VDbGljayhlMTEpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb25zdCBtZW51SXRlbXMgPSBbXTsKICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgIG5hbWU6IHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzID8gIkNoZWNraW5nLi4uIiA6ICJDaGVjayBmb3IgdXBkYXRlcyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6cmVmcmVzaEN3IiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3QgZGV0YWlsID0gewogICAgICAgICAgICB0eXBlOiAicGFja2FnZS11cGRhdGUiLAogICAgICAgICAgICBsYWJlbDogImNoZWNrIHBhY2thZ2VzIiwKICAgICAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgICAgICBhcmdzOiBbIm91dGRhdGVkIl0KICAgICAgICAgIH07CiAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJydW4tcHJvY2VzcyIsIHsKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgICAgIGRldGFpbAogICAgICAgICAgfSkpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB0aGlzLmNoZWNrUGFja2FnZXMoKSwgM2UzKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgY29uc3QgZGlzcGxheVBhY2thZ2VzID0gdGhpcy5vdXRkYXRlZFBhY2thZ2VzLnNsaWNlKDAsIDEwKTsKICAgICAgICBmb3IgKGNvbnN0IHBrZyBvZiBkaXNwbGF5UGFja2FnZXMpIHsKICAgICAgICAgIG1lbnVJdGVtcy5wdXNoKHsKICAgICAgICAgICAgbmFtZTogYCR7cGtnLm5hbWV9OiAke3BrZy5jdXJyZW50fSBcdTIxOTIgJHtwa2cubGF0ZXN0fWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnBhY2thZ2UiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZVBhY2thZ2UocGtnLm5hbWUpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgaWYgKHRoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggPiAxMCkgewogICAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgICBuYW1lOiBgLi4uIGFuZCAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGggLSAxMH0gbW9yZWAsCiAgICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOm1vcmVIb3Jpem9udGFsIiwKICAgICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSk7CiAgICAgICAgbWVudUl0ZW1zLnB1c2goewogICAgICAgICAgbmFtZTogIlVwZGF0ZSBhbGwgcGFja2FnZXMiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6YXJyb3dVcENpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVBbGxQYWNrYWdlcygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGF3YWl0IERlZXNDb250ZXh0bWVudS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhlMTEsIG1lbnVJdGVtcyk7CiAgICB9CiAgICBhc3luYyB1cGRhdGVQYWNrYWdlKHBhY2thZ2VOYW1lKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogYHVwZGF0ZSAke3BhY2thZ2VOYW1lfWAsCiAgICAgICAgY29tbWFuZDogInBucG0iLAogICAgICAgIGFyZ3M6IFsidXBkYXRlIiwgIi0tbGF0ZXN0IiwgcGFja2FnZU5hbWVdLAogICAgICAgIG1ldGFkYXRhOiB7IHBhY2thZ2VOYW1lIH0KICAgICAgfTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicnVuLXByb2Nlc3MiLCB7CiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZSwKICAgICAgICBkZXRhaWwKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlQWxsUGFja2FnZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMucGVuZGluZ1BhY2thZ2VVcGRhdGUgPSB0cnVlOwogICAgICBjb25zdCBkZXRhaWwgPSB7CiAgICAgICAgdHlwZTogInBhY2thZ2UtdXBkYXRlIiwKICAgICAgICBsYWJlbDogInVwZGF0ZSBhbGwiLAogICAgICAgIGNvbW1hbmQ6ICJwbnBtIiwKICAgICAgICBhcmdzOiBbInVwZGF0ZSIsICItLWxhdGVzdCJdCiAgICAgIH07CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInJ1bi1wcm9jZXNzIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsCiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gSGVscGVyIE1ldGhvZHMgPT09PT09PT09PQogICAgZ2V0UGFja2FnZVN0YXR1c0NsYXNzKCkgewogICAgICBpZiAodGhpcy5pc0NoZWNraW5nUGFja2FnZXMpCiAgICAgICAgcmV0dXJuICIiOwogICAgICByZXR1cm4gdGhpcy5wYWNrYWdlU3RhdHVzOwogICAgfQogICAgZ2V0UGFja2FnZUljb24oKSB7CiAgICAgIGlmICh0aGlzLmlzQ2hlY2tpbmdQYWNrYWdlcykKICAgICAgICByZXR1cm4gImx1Y2lkZTpsb2FkZXIyIjsKICAgICAgc3dpdGNoICh0aGlzLnBhY2thZ2VTdGF0dXMpIHsKICAgICAgICBjYXNlICJ1cC10by1kYXRlIjoKICAgICAgICAgIHJldHVybiAibHVjaWRlOmNoZWNrQ2lyY2xlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gImx1Y2lkZTphbGVydENpcmNsZSI7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJsdWNpZGU6eENpcmNsZSI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAibHVjaWRlOnBhY2thZ2UiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlU3RhdHVzVGV4dCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcuLi4iOwogICAgICBzd2l0Y2ggKHRoaXMucGFja2FnZVN0YXR1cykgewogICAgICAgIGNhc2UgInVwLXRvLWRhdGUiOgogICAgICAgICAgcmV0dXJuICJVcCB0byBkYXRlIjsKICAgICAgICBjYXNlICJ1cGRhdGVzLWF2YWlsYWJsZSI6CiAgICAgICAgICByZXR1cm4gYCR7dGhpcy5vdXRkYXRlZFBhY2thZ2VzLmxlbmd0aH0gdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9YDsKICAgICAgICBjYXNlICJlcnJvciI6CiAgICAgICAgICByZXR1cm4gIkNoZWNrIGZhaWxlZCI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiUGFja2FnZXMiOwogICAgICB9CiAgICB9CiAgICBnZXRQYWNrYWdlVG9vbHRpcCgpIHsKICAgICAgaWYgKHRoaXMuaXNDaGVja2luZ1BhY2thZ2VzKQogICAgICAgIHJldHVybiAiQ2hlY2tpbmcgZm9yIHBhY2thZ2UgdXBkYXRlcy4uLiI7CiAgICAgIHN3aXRjaCAodGhpcy5wYWNrYWdlU3RhdHVzKSB7CiAgICAgICAgY2FzZSAidXAtdG8tZGF0ZSI6CiAgICAgICAgICByZXR1cm4gIkFsbCBwYWNrYWdlcyBhcmUgdXAgdG8gZGF0ZSI7CiAgICAgICAgY2FzZSAidXBkYXRlcy1hdmFpbGFibGUiOgogICAgICAgICAgcmV0dXJuIGAke3RoaXMub3V0ZGF0ZWRQYWNrYWdlcy5sZW5ndGh9IHBhY2thZ2UgdXBkYXRlJHt0aGlzLm91dGRhdGVkUGFja2FnZXMubGVuZ3RoICE9PSAxID8gInMiIDogIiJ9IGF2YWlsYWJsZWA7CiAgICAgICAgY2FzZSAiZXJyb3IiOgogICAgICAgICAgcmV0dXJuICJGYWlsZWQgdG8gY2hlY2sgZm9yIHVwZGF0ZXMuIENsaWNrIHRvIHJldHJ5LiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiAiQ2xpY2sgdG8gY2hlY2sgZm9yIHBhY2thZ2UgdXBkYXRlcyI7CiAgICAgIH0KICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIE1ldGhvZHMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBNYW51YWxseSB0cmlnZ2VyIGEgcGFja2FnZSBjaGVjawogICAgICovCiAgICBhc3luYyByZWZyZXNoUGFja2FnZVN0YXR1cygpIHsKICAgICAgYXdhaXQgdGhpcy5jaGVja1BhY2thZ2VzKCk7CiAgICB9CiAgICAvKioKICAgICAqIE1hbnVhbGx5IHJlbG9hZCBzY3JpcHRzIGZyb20gcGFja2FnZS5qc29uCiAgICAgKi8KICAgIGFzeW5jIHJlZnJlc2hTY3JpcHRzKCkgewogICAgICBhd2FpdCB0aGlzLmxvYWRTY3JpcHRzKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlQm90dG9tYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlL3R5cGVzY3JpcHQtaW50ZWxsaXNlbnNlLmpzCnZhciBUeXBlU2NyaXB0SW50ZWxsaVNlbnNlTWFuYWdlciA9IGNsYXNzIHsKICBsb2FkZWRMaWJzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICBub3RGb3VuZFBhY2thZ2VzID0gLyogQF9fUFVSRV9fICovIG5ldyBTZXQoKTsKICAvLyBQYWNrYWdlcyBjaGVja2VkIGJ1dCBub3QgZm91bmQKICBtb25hY29JbnN0YW5jZSA9IG51bGw7CiAgZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBudWxsOwogIC8vIENhY2hlIG9mIGZpbGUgY29udGVudHMgZm9yIHN5bmNocm9ub3VzIGFjY2VzcyBhbmQgbW9kdWxlIHJlc29sdXRpb24KICBmaWxlQ2FjaGUgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIC8vIFRyYWNrIGV4dHJhIGxpYnMgYWRkZWQgZm9yIGNsZWFudXAKICBhZGRlZEV4dHJhTGlicyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgLyoqCiAgICogR2V0IFR5cGVTY3JpcHQgQVBJIHdpdGggcHJvcGVyIHR5cGluZyBmb3IgTW9uYWNvIDAuNTUrCiAgICovCiAgZ2V0IHRzQXBpKCkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlKQogICAgICByZXR1cm4gbnVsbDsKICAgIHJldHVybiB0aGlzLm1vbmFjb0luc3RhbmNlLmxhbmd1YWdlcy50eXBlc2NyaXB0OwogIH0KICAvKioKICAgKiBJbml0aWFsaXplIHdpdGggTW9uYWNvIGFuZCBleGVjdXRpb24gZW52aXJvbm1lbnQKICAgKi8KICBhc3luYyBpbml0KG1vbmFjb0luc3QsIGVudjIpIHsKICAgIHRoaXMubW9uYWNvSW5zdGFuY2UgPSBtb25hY29JbnN0OwogICAgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCA9IGVudjI7CiAgICB0aGlzLmNvbmZpZ3VyZUNvbXBpbGVyT3B0aW9ucygpOwogICAgYXdhaXQgdGhpcy5sb2FkQWxsUHJvamVjdEZpbGVzKCk7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgYWxsIC50cy8uanMgZmlsZXMgZnJvbSB0aGUgdmlydHVhbCBmaWxlc3lzdGVtIGludG8gTW9uYWNvCiAgICovCiAgYXN5bmMgbG9hZEFsbFByb2plY3RGaWxlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRmlsZXNGcm9tRGlyZWN0b3J5KCIvIik7CiAgfQogIC8qKgogICAqIFJlY3Vyc2l2ZWx5IGxvYWQgZmlsZXMgZnJvbSBhIGRpcmVjdG9yeQogICAqLwogIGFzeW5jIGxvYWRGaWxlc0Zyb21EaXJlY3RvcnkoZGlyUGF0aCkgewogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIpIHsKICAgICAgICAgIGNvbnN0IGV4dCA9IGVudHJ5Lm5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKTsKICAgICAgICAgIGlmIChleHQgPT09ICJ0cyIgfHwgZXh0ID09PSAidHN4IiB8fCBleHQgPT09ICJqcyIgfHwgZXh0ID09PSAianN4IikgewogICAgICAgICAgICB0cnkgewogICAgICAgICAgICAgIGNvbnN0IGNvbnRlbnQzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShmdWxsUGF0aCk7CiAgICAgICAgICAgICAgdGhpcy5hZGRGaWxlTW9kZWwoZnVsbFBhdGgsIGNvbnRlbnQzKTsKICAgICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBjb25maWd1cmVDb21waWxlck9wdGlvbnMoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICB0cy50eXBlc2NyaXB0RGVmYXVsdHMuc2V0Q29tcGlsZXJPcHRpb25zKHsKICAgICAgdGFyZ2V0OiB0cy5TY3JpcHRUYXJnZXQuRVMyMDIwLAogICAgICBtb2R1bGU6IHRzLk1vZHVsZUtpbmQuRVNOZXh0LAogICAgICAvLyBVc2UgQnVuZGxlciByZXNvbHV0aW9uIGlmIGF2YWlsYWJsZSAoTW9uYWNvIDAuNDUrKSwgZmFsbGJhY2sgdG8gTm9kZUpzCiAgICAgIG1vZHVsZVJlc29sdXRpb246IHRzLk1vZHVsZVJlc29sdXRpb25LaW5kLkJ1bmRsZXIgPz8gdHMuTW9kdWxlUmVzb2x1dGlvbktpbmQuTm9kZUpzLAogICAgICBhbGxvd1N5bnRoZXRpY0RlZmF1bHRJbXBvcnRzOiB0cnVlLAogICAgICBlc01vZHVsZUludGVyb3A6IHRydWUsCiAgICAgIHN0cmljdDogdHJ1ZSwKICAgICAgbm9FbWl0OiB0cnVlLAogICAgICBhbGxvd0pzOiB0cnVlLAogICAgICBjaGVja0pzOiBmYWxzZSwKICAgICAgYWxsb3dOb25Uc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIGxpYjogWyJlczIwMjAiLCAiZG9tIiwgImRvbS5pdGVyYWJsZSJdLAogICAgICAvLyBTZXQgYmFzZVVybCB0byByb290IGZvciByZXNvbHZpbmcgYWJzb2x1dGUgaW1wb3J0cwogICAgICBiYXNlVXJsOiAiLyIsCiAgICAgIC8vIEFsbG93IGltcG9ydGluZyAudHMgZXh0ZW5zaW9ucyBkaXJlY3RseSAodXNlZnVsIGZvciBzb21lIHNldHVwcykKICAgICAgYWxsb3dJbXBvcnRpbmdUc0V4dGVuc2lvbnM6IHRydWUsCiAgICAgIC8vIFJlc29sdmUgSlNPTiBtb2R1bGVzCiAgICAgIHJlc29sdmVKc29uTW9kdWxlOiB0cnVlCiAgICB9KTsKICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5zZXREaWFnbm9zdGljc09wdGlvbnMoewogICAgICBub1NlbWFudGljVmFsaWRhdGlvbjogZmFsc2UsCiAgICAgIG5vU3ludGF4VmFsaWRhdGlvbjogZmFsc2UKICAgIH0pOwogICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLnNldEVhZ2VyTW9kZWxTeW5jKHRydWUpOwogIH0KICAvKioKICAgKiBQYXJzZSBpbXBvcnRzIGZyb20gVHlwZVNjcmlwdC9KYXZhU2NyaXB0IGNvbnRlbnQKICAgKi8KICBwYXJzZUltcG9ydHMoY29udGVudDMpIHsKICAgIGNvbnN0IGltcG9ydHMgPSBbXTsKICAgIGNvbnN0IGltcG9ydFJlZ2V4ID0gL2ltcG9ydFxzKyg/Oltcdyp7fVxzLF0rZnJvbVxzKyk/WyciXShbXiciXSspWyciXS9nOwogICAgbGV0IG1hdGNoMjsKICAgIHdoaWxlICgobWF0Y2gyID0gaW1wb3J0UmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgY29uc3QgcmVxdWlyZVJlZ2V4ID0gL3JlcXVpcmVccypcKFxzKlsnIl0oW14nIl0rKVsnIl1ccypcKS9nOwogICAgd2hpbGUgKChtYXRjaDIgPSByZXF1aXJlUmVnZXguZXhlYyhjb250ZW50MykpICE9PSBudWxsKSB7CiAgICAgIGNvbnN0IGltcG9ydFBhdGggPSBtYXRjaDJbMV07CiAgICAgIGlmICghaW1wb3J0UGF0aC5zdGFydHNXaXRoKCIuIikgJiYgIWltcG9ydFBhdGguc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgICAgY29uc3QgcGFja2FnZU5hbWUgPSBpbXBvcnRQYXRoLnN0YXJ0c1dpdGgoIkAiKSA/IGltcG9ydFBhdGguc3BsaXQoIi8iKS5zbGljZSgwLCAyKS5qb2luKCIvIikgOiBpbXBvcnRQYXRoLnNwbGl0KCIvIilbMF07CiAgICAgICAgaW1wb3J0cy5wdXNoKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIFsuLi5uZXcgU2V0KGltcG9ydHMpXTsKICB9CiAgLyoqCiAgICogTG9hZCB0eXBlIGRlZmluaXRpb25zIGZvciBhIHBhY2thZ2UgZnJvbSB2aXJ0dWFsIEZTCiAgICovCiAgYXN5bmMgbG9hZFR5cGVzRm9yUGFja2FnZShwYWNrYWdlTmFtZSkgewogICAgaWYgKCF0aGlzLm1vbmFjb0luc3RhbmNlIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICByZXR1cm47CiAgICBpZiAodGhpcy5sb2FkZWRMaWJzLmhhcyhwYWNrYWdlTmFtZSkpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLm5vdEZvdW5kUGFja2FnZXMuaGFzKHBhY2thZ2VOYW1lKSkKICAgICAgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgbGV0IHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkUGFja2FnZVR5cGVzKHBhY2thZ2VOYW1lKTsKICAgICAgaWYgKCF0eXBlc0xvYWRlZCkgewogICAgICAgIHR5cGVzTG9hZGVkID0gYXdhaXQgdGhpcy50cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICB9CiAgICAgIGlmICh0eXBlc0xvYWRlZCkgewogICAgICAgIHRoaXMubG9hZGVkTGlicy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMubm90Rm91bmRQYWNrYWdlcy5hZGQocGFja2FnZU5hbWUpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnJvcikgewogICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBsb2FkIHR5cGVzIGZvciAke3BhY2thZ2VOYW1lfTpgLCBlcnJvcik7CiAgICB9CiAgfQogIGFzeW5jIHRyeUxvYWRQYWNrYWdlVHlwZXMocGFja2FnZU5hbWUpIHsKICAgIGNvbnN0IHRzID0gdGhpcy50c0FwaTsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCB8fCAhdHMpCiAgICAgIHJldHVybiBmYWxzZTsKICAgIGNvbnN0IGJhc2VQYXRoID0gYC9ub2RlX21vZHVsZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgdHJ5IHsKICAgICAgY29uc3QgcGFja2FnZUpzb25QYXRoID0gYCR7YmFzZVBhdGh9L3BhY2thZ2UuanNvbmA7CiAgICAgIGNvbnN0IHBhY2thZ2VKc29uRXhpc3RzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMocGFja2FnZUpzb25QYXRoKTsKICAgICAgaWYgKHBhY2thZ2VKc29uRXhpc3RzKSB7CiAgICAgICAgY29uc3QgcGFja2FnZUpzb25Db250ZW50ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRmlsZShwYWNrYWdlSnNvblBhdGgpOwogICAgICAgIGNvbnN0IHBhY2thZ2VKc29uID0gSlNPTi5wYXJzZShwYWNrYWdlSnNvbkNvbnRlbnQpOwogICAgICAgIHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihwYWNrYWdlSnNvbkNvbnRlbnQsIGBmaWxlOi8vJHtwYWNrYWdlSnNvblBhdGh9YCk7CiAgICAgICAgY29uc3QgdHlwZXNQYXRoID0gcGFja2FnZUpzb24udHlwZXMgfHwgcGFja2FnZUpzb24udHlwaW5nczsKICAgICAgICBpZiAodHlwZXNQYXRoKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBjb21tb25QYXRocyA9IFsKICAgICAgICBgJHtiYXNlUGF0aH0vaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2Rpc3QvaW5kZXguZC50c2AsCiAgICAgICAgYCR7YmFzZVBhdGh9L2xpYi9pbmRleC5kLnRzYAogICAgICBdOwogICAgICBmb3IgKGNvbnN0IGR0c1BhdGggb2YgY29tbW9uUGF0aHMpIHsKICAgICAgICBpZiAoYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5leGlzdHMoZHRzUGF0aCkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEFsbER0c0ZpbGVzRnJvbVBhY2thZ2UoYmFzZVBhdGgpOwogICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byBsb2FkIHBhY2thZ2UgdHlwZXMgZm9yICR7cGFja2FnZU5hbWV9OmAsIGVycm9yKTsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBSZWN1cnNpdmVseSBsb2FkIGFsbCAuZC50cyBmaWxlcyBmcm9tIGEgcGFja2FnZSBkaXJlY3RvcnkKICAgKi8KICBhc3luYyBsb2FkQWxsRHRzRmlsZXNGcm9tUGFja2FnZShiYXNlUGF0aCkgewogICAgY29uc3QgdHMgPSB0aGlzLnRzQXBpOwogICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8ICF0cykKICAgICAgcmV0dXJuOwogICAgYXdhaXQgdGhpcy5sb2FkRHRzRmlsZXNGcm9tRGlyZWN0b3J5KGJhc2VQYXRoKTsKICB9CiAgLyoqCiAgICogUmVjdXJzaXZlbHkgbG9hZCAuZC50cyBmaWxlcyBmcm9tIGEgZGlyZWN0b3J5CiAgICovCiAgYXN5bmMgbG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShkaXJQYXRoKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgIXRzKQogICAgICByZXR1cm47CiAgICB0cnkgewogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKGRpclBhdGgpOwogICAgICBmb3IgKGNvbnN0IGVudHJ5IG9mIGVudHJpZXMpIHsKICAgICAgICBjb25zdCBmdWxsUGF0aCA9IGRpclBhdGggPT09ICIvIiA/IGAvJHtlbnRyeS5uYW1lfWAgOiBgJHtkaXJQYXRofS8ke2VudHJ5Lm5hbWV9YDsKICAgICAgICBpZiAoZW50cnkubmFtZSA9PT0gIm5vZGVfbW9kdWxlcyIpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBpZiAoZW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZER0c0ZpbGVzRnJvbURpcmVjdG9yeShmdWxsUGF0aCk7CiAgICAgICAgfSBlbHNlIGlmIChlbnRyeS50eXBlID09PSAiZmlsZSIgJiYgZW50cnkubmFtZS5lbmRzV2l0aCgiLmQudHMiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKGZ1bGxQYXRoKTsKICAgICAgICAgICAgdHMudHlwZXNjcmlwdERlZmF1bHRzLmFkZEV4dHJhTGliKGNvbnRlbnQzLCBgZmlsZTovLyR7ZnVsbFBhdGh9YCk7CiAgICAgICAgICB9IGNhdGNoIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggewogICAgfQogIH0KICBhc3luYyB0cnlMb2FkQXRUeXBlc1BhY2thZ2UocGFja2FnZU5hbWUpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuIGZhbHNlOwogICAgY29uc3QgdHlwZXNQYWNrYWdlTmFtZSA9IHBhY2thZ2VOYW1lLnN0YXJ0c1dpdGgoIkAiKSA/IGBAdHlwZXMvJHtwYWNrYWdlTmFtZS5zbGljZSgxKS5yZXBsYWNlKCIvIiwgIl9fIil9YCA6IGBAdHlwZXMvJHtwYWNrYWdlTmFtZX1gOwogICAgY29uc3QgYmFzZVBhdGggPSBgL25vZGVfbW9kdWxlcy8ke3R5cGVzUGFja2FnZU5hbWV9YDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGluZGV4UGF0aCA9IGAke2Jhc2VQYXRofS9pbmRleC5kLnRzYDsKICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKGluZGV4UGF0aCkpIHsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRBbGxEdHNGaWxlc0Zyb21QYWNrYWdlKGJhc2VQYXRoKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgfQogICAgICByZXR1cm4gZmFsc2U7CiAgICB9IGNhdGNoIHsKICAgICAgcmV0dXJuIGZhbHNlOwogICAgfQogIH0KICAvKioKICAgKiBQcm9jZXNzIGNvbnRlbnQgY2hhbmdlIGFuZCBsb2FkIHR5cGVzIGZvciBhbnkgbmV3IGltcG9ydHMKICAgKi8KICBhc3luYyBwcm9jZXNzQ29udGVudENoYW5nZShjb250ZW50MykgewogICAgY29uc3QgaW1wb3J0cyA9IHRoaXMucGFyc2VJbXBvcnRzKGNvbnRlbnQzKTsKICAgIGZvciAoY29uc3QgcGFja2FnZU5hbWUgb2YgaW1wb3J0cykgewogICAgICBpZiAoIXRoaXMubG9hZGVkTGlicy5oYXMocGFja2FnZU5hbWUpKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVHlwZXNGb3JQYWNrYWdlKHBhY2thZ2VOYW1lKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBTY2FuIG5vZGVfbW9kdWxlcyBmb3IgcGFja2FnZXMgYW5kIGxvYWQgdHlwZXMgZm9yIGFueSBub3QgeWV0IGxvYWRlZC4KICAgKiBDYWxsZWQgd2hlbiBub2RlX21vZHVsZXMgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKS4KICAgKi8KICBhc3luYyBzY2FuQW5kTG9hZE5ld1BhY2thZ2VUeXBlcygpIHsKICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgcmV0dXJuOwogICAgdGhpcy5ub3RGb3VuZFBhY2thZ2VzLmNsZWFyKCk7CiAgICB0cnkgewogICAgICBpZiAoIWF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbm9kZV9tb2R1bGVzIikpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBlbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKCIvbm9kZV9tb2R1bGVzIik7CiAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgIGlmIChlbnRyeS50eXBlICE9PSAiZGlyZWN0b3J5IikKICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgIGlmIChlbnRyeS5uYW1lLnN0YXJ0c1dpdGgoIkAiKSkgewogICAgICAgICAgdHJ5IHsKICAgICAgICAgICAgY29uc3Qgc2NvcGVkUGF0aCA9IGAvbm9kZV9tb2R1bGVzLyR7ZW50cnkubmFtZX1gOwogICAgICAgICAgICBjb25zdCBzY29wZWRFbnRyaWVzID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5yZWFkRGlyKHNjb3BlZFBhdGgpOwogICAgICAgICAgICBmb3IgKGNvbnN0IHNjb3BlZEVudHJ5IG9mIHNjb3BlZEVudHJpZXMpIHsKICAgICAgICAgICAgICBpZiAoc2NvcGVkRW50cnkudHlwZSA9PT0gImRpcmVjdG9yeSIpIHsKICAgICAgICAgICAgICAgIGNvbnN0IHBhY2thZ2VOYW1lID0gYCR7ZW50cnkubmFtZX0vJHtzY29wZWRFbnRyeS5uYW1lfWA7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRUeXBlc0ZvclBhY2thZ2UocGFja2FnZU5hbWUpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICghZW50cnkubmFtZS5zdGFydHNXaXRoKCIuIikpIHsKICAgICAgICAgIGF3YWl0IHRoaXMubG9hZFR5cGVzRm9yUGFja2FnZShlbnRyeS5uYW1lKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUud2FybigiRmFpbGVkIHRvIHNjYW4gbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgIH0KICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBtb2RlbCB0byBNb25hY28gZm9yIGNyb3NzLWZpbGUgSW50ZWxsaVNlbnNlCiAgICogQWxzbyByZWdpc3RlcnMgdGhlIGZpbGUgd2l0aCBUeXBlU2NyaXB0IHZpYSBhZGRFeHRyYUxpYiBmb3IgbW9kdWxlIHJlc29sdXRpb24KICAgKi8KICBhZGRGaWxlTW9kZWwocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBpZiAoIXRoaXMubW9uYWNvSW5zdGFuY2UpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZmlsZUNhY2hlLnNldChwYXRoMiwgY29udGVudDMpOwogICAgY29uc3QgdXJpID0gdGhpcy5tb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGZpbGU6Ly8ke3BhdGgyfWApOwogICAgY29uc3QgZXhpc3RpbmdNb2RlbCA9IHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsKHVyaSk7CiAgICBpZiAoZXhpc3RpbmdNb2RlbCkgewogICAgICBpZiAoZXhpc3RpbmdNb2RlbC5nZXRWYWx1ZSgpICE9PSBjb250ZW50MykgewogICAgICAgIGV4aXN0aW5nTW9kZWwuc2V0VmFsdWUoY29udGVudDMpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMik7CiAgICAgIHRoaXMubW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZU1vZGVsKGNvbnRlbnQzLCBsYW5ndWFnZSwgdXJpKTsKICAgIH0KICAgIHRoaXMuYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKTsKICB9CiAgLyoqCiAgICogQWRkIGEgZmlsZSBhcyBhbiBleHRyYSBsaWIgZm9yIFR5cGVTY3JpcHQgbW9kdWxlIHJlc29sdXRpb24uCiAgICogVGhpcyBlbmFibGVzIFR5cGVTY3JpcHQgdG8gcmVzb2x2ZSBpbXBvcnRzIHRvIHByb2plY3QgZmlsZXMuCiAgICovCiAgYWRkRmlsZUFzRXh0cmFMaWIocGF0aDIsIGNvbnRlbnQzKSB7CiAgICBjb25zdCB0cyA9IHRoaXMudHNBcGk7CiAgICBpZiAoIXRzKQogICAgICByZXR1cm47CiAgICBjb25zdCBleGlzdGluZyA9IHRoaXMuYWRkZWRFeHRyYUxpYnMuZ2V0KHBhdGgyKTsKICAgIGlmIChleGlzdGluZykgewogICAgICBleGlzdGluZy5kaXNwb3NlKCk7CiAgICB9CiAgICBjb25zdCBmaWxlUGF0aCA9IGBmaWxlOi8vJHtwYXRoMn1gOwogICAgY29uc3QgZGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywgZmlsZVBhdGgpOwogICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQocGF0aDIsIGRpc3Bvc2FibGUpOwogICAgaWYgKHBhdGgyLmVuZHNXaXRoKCIudHMiKSAmJiAhcGF0aDIuZW5kc1dpdGgoIi5kLnRzIikpIHsKICAgICAgY29uc3QganNQYXRoID0gcGF0aDIucmVwbGFjZSgvXC50cyQvLCAiLmpzIik7CiAgICAgIGNvbnN0IGpzRmlsZVBhdGggPSBgZmlsZTovLyR7anNQYXRofWA7CiAgICAgIGNvbnN0IGpzRGlzcG9zYWJsZSA9IHRzLnR5cGVzY3JpcHREZWZhdWx0cy5hZGRFeHRyYUxpYihjb250ZW50MywganNGaWxlUGF0aCk7CiAgICAgIHRoaXMuYWRkZWRFeHRyYUxpYnMuc2V0KGpzUGF0aCwganNEaXNwb3NhYmxlKTsKICAgICAgdGhpcy5maWxlQ2FjaGUuc2V0KGpzUGF0aCwgY29udGVudDMpOwogICAgfSBlbHNlIGlmIChwYXRoMi5lbmRzV2l0aCgiLnRzeCIpKSB7CiAgICAgIGNvbnN0IGpzeFBhdGggPSBwYXRoMi5yZXBsYWNlKC9cLnRzeCQvLCAiLmpzeCIpOwogICAgICBjb25zdCBqc3hGaWxlUGF0aCA9IGBmaWxlOi8vJHtqc3hQYXRofWA7CiAgICAgIGNvbnN0IGpzeERpc3Bvc2FibGUgPSB0cy50eXBlc2NyaXB0RGVmYXVsdHMuYWRkRXh0cmFMaWIoY29udGVudDMsIGpzeEZpbGVQYXRoKTsKICAgICAgdGhpcy5hZGRlZEV4dHJhTGlicy5zZXQoanN4UGF0aCwganN4RGlzcG9zYWJsZSk7CiAgICAgIHRoaXMuZmlsZUNhY2hlLnNldChqc3hQYXRoLCBjb250ZW50Myk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldCBjYWNoZWQgZmlsZSBjb250ZW50IGZvciBzeW5jaHJvbm91cyBhY2Nlc3MKICAgKi8KICBnZXRGaWxlQ29udGVudChwYXRoMikgewogICAgcmV0dXJuIHRoaXMuZmlsZUNhY2hlLmdldChwYXRoMik7CiAgfQogIGdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpIHsKICAgIGNvbnN0IGV4dCA9IHBhdGgyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCk7CiAgICBzd2l0Y2ggKGV4dCkgewogICAgICBjYXNlICJ0cyI6CiAgICAgIGNhc2UgInRzeCI6CiAgICAgICAgcmV0dXJuICJ0eXBlc2NyaXB0IjsKICAgICAgY2FzZSAianMiOgogICAgICBjYXNlICJqc3giOgogICAgICAgIHJldHVybiAiamF2YXNjcmlwdCI7CiAgICAgIGNhc2UgImpzb24iOgogICAgICAgIHJldHVybiAianNvbiI7CiAgICAgIGRlZmF1bHQ6CiAgICAgICAgcmV0dXJuICJwbGFpbnRleHQiOwogICAgfQogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjUoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTQgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU1ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfb3JpZ2luYWxDb250ZW50X2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkQ29udGVudF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnM7CiAgbGV0IF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzOwogIGxldCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9sYW5ndWFnZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2xhbmd1YWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfZmlsZVBhdGhfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3JpZ2luYWxDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcmlnaW5hbENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcmlnaW5hbENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgX29yaWdpbmFsQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9tb2RpZmllZENvbnRlbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibW9kaWZpZWRDb250ZW50Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZENvbnRlbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubW9kaWZpZWRDb250ZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tb2RpZmllZENvbnRlbnQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgX21vZGlmaWVkQ29udGVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KHRoaXMsIG51bGwsIF9vcmlnaW5hbExhYmVsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm9yaWdpbmFsTGFiZWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm9yaWdpbmFsTGFiZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3JpZ2luYWxMYWJlbCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3JpZ2luYWxMYWJlbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgX29yaWdpbmFsTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfbW9kaWZpZWRMYWJlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2RpZmllZExhYmVsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtb2RpZmllZExhYmVsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1vZGlmaWVkTGFiZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vZGlmaWVkTGFiZWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbW9kaWZpZWRMYWJlbF9pbml0aWFsaXplcnMsIF9tb2RpZmllZExhYmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTQodGhpcywgbnVsbCwgX2xhbmd1YWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImxhbmd1YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsYW5ndWFnZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYW5ndWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubGFuZ3VhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbGFuZ3VhZ2VfaW5pdGlhbGl6ZXJzLCBfbGFuZ3VhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NCh0aGlzLCBudWxsLCBfZmlsZVBhdGhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsZVBhdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVQYXRoIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbGVQYXRoLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWxlUGF0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlUGF0aF9pbml0aWFsaXplcnMsIF9maWxlUGF0aF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU0KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZURpZmZFZGl0b3IyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgCiAgICA8ZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3IKICAgICAgLm9yaWdpbmFsQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIik7XG59J30KICAgICAgLm1vZGlmaWVkQ29udGVudD0keydmdW5jdGlvbiBoZWxsbygpIHtcbiAgY29uc29sZS5sb2coIkhlbGxvIFdvcmxkISIpO1xuICByZXR1cm4gdHJ1ZTtcbn0nfQogICAgICAubGFuZ3VhZ2U9JHsidHlwZXNjcmlwdCJ9CiAgICAgIC5maWxlUGF0aD0keyIvZGVtby9leGFtcGxlLnRzIn0KICAgID48L2RlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yPgogIGA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICAvLyBJTlNUQU5DRQogICAgZGlmZkVkaXRvckRlZmVycmVkID0gZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwogICAgI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IG9yaWdpbmFsQ29udGVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI29yaWdpbmFsQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsQ29udGVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3JpZ2luYWxDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbW9kaWZpZWRDb250ZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxDb250ZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfbW9kaWZpZWRDb250ZW50X2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBtb2RpZmllZENvbnRlbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtb2RpZmllZENvbnRlbnRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtb2RpZmllZENvbnRlbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkQ29udGVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9tb2RpZmllZENvbnRlbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9vcmlnaW5hbExhYmVsX2luaXRpYWxpemVycywgIkRpc2sgVmVyc2lvbiIpKTsKICAgIGdldCBvcmlnaW5hbExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jb3JpZ2luYWxMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG9yaWdpbmFsTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI29yaWdpbmFsTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtb2RpZmllZExhYmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfb3JpZ2luYWxMYWJlbF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfaW5pdGlhbGl6ZXJzLCAiTG9jYWwgVmVyc2lvbiIpKTsKICAgIGdldCBtb2RpZmllZExhYmVsKCkgewogICAgICByZXR1cm4gdGhpcy4jbW9kaWZpZWRMYWJlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vZGlmaWVkTGFiZWwodmFsdWUyKSB7CiAgICAgIHRoaXMuI21vZGlmaWVkTGFiZWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYW5ndWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX21vZGlmaWVkTGFiZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU1KHRoaXMsIF9sYW5ndWFnZV9pbml0aWFsaXplcnMsICJ0eXBlc2NyaXB0IikpOwogICAgZ2V0IGxhbmd1YWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsYW5ndWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbGFuZ3VhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlUGF0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTUodGhpcywgX2xhbmd1YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBmaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGRpZmZFZGl0b3IgPSAoX19ydW5Jbml0aWFsaXplcnM1NSh0aGlzLCBfZmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIG1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gbnVsbDsKICAgIG9yaWdpbmFsTW9kZWwgPSBudWxsOwogICAgbW9kaWZpZWRNb2RlbCA9IG51bGw7CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgRG9tVG9vbHMuc2V0dXBEb21Ub29scygpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICB9CgogICAgICAqIHsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlmZi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZGlmZi10b29sYmFyIHsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk2JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmRpZmYtaW5mbyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAzMCUpIiwgImhzbCgwIDAlIDgwJSkiKX07CiAgICAgIH0KCiAgICAgIC5kaWZmLWZpbGVuYW1lIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAuZGlmZi1sYWJlbHMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLmRpZmYtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZGlmZi1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgbWluLWhlaWdodDogMDsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm5hdi1idXR0b25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDE2cHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gdGhpcy5maWxlUGF0aC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJmaWxlIjsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJkaWZmLXdyYXBwZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtdG9vbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWZmLWluZm8iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZGlmZi1maWxlbmFtZSI+JHtmaWxlTmFtZX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJkaWZmLWxhYmVscyI+JHt0aGlzLm9yaWdpbmFsTGFiZWx9IOKGlCAke3RoaXMubW9kaWZpZWRMYWJlbH08L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtYWN0aW9ucyI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im5hdi1idXR0b25zIj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9QcmV2aW91c0RpZmZ9CiAgICAgICAgICAgICAgPlByZXZpb3VzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgICA8ZGVlcy1idXR0b24KICAgICAgICAgICAgICAgIHR5cGU9Im91dGxpbmUiCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmdvVG9OZXh0RGlmZn0KICAgICAgICAgICAgICA+TmV4dDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24tYnV0dG9ucyI+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJoaWdobGlnaHRlZCIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuYWNjZXB0TG9jYWx9CiAgICAgICAgICAgICAgPlVzZSBMb2NhbDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5hY2NlcHREaXNrfQogICAgICAgICAgICAgID5Vc2UgRGlzazwvZGVlcy1idXR0b24+CiAgICAgICAgICAgICAgPGRlZXMtYnV0dG9uCiAgICAgICAgICAgICAgICB0eXBlPSJvdXRsaW5lIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5jbG9zZX0KICAgICAgICAgICAgICA+Q2xvc2U8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImRpZmYtY29udGFpbmVyIj48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKSk7CiAgICAgIGF3YWl0IHRoaXMuaW5pdERpZmZFZGl0b3IoKTsKICAgIH0KICAgIGFzeW5jIGluaXREaWZmRWRpdG9yKCkgewogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5kaWZmLWNvbnRhaW5lciIpOwogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG1vbmFjb0NkbkJhc2UgPSBgaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9tb25hY28tZWRpdG9yQCR7TU9OQUNPX1ZFUlNJT059YDsKICAgICAgbGV0IG1vbmFjb0luc3RhbmNlID0gd2luZG93Lm1vbmFjbzsKICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICAgICAgY29uc3QgY2hlY2tNb25hY28gPSBzZXRJbnRlcnZhbCgoKSA9PiB7CiAgICAgICAgICAgIGlmICh3aW5kb3cubW9uYWNvKSB7CiAgICAgICAgICAgICAgY2xlYXJJbnRlcnZhbChjaGVja01vbmFjbyk7CiAgICAgICAgICAgICAgcmVzb2x2ZTIoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTAwKTsKICAgICAgICB9KTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgY29uc3QgZG9tdG9vbHNJbnN0YW5jZSA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBpc0JyaWdodCA9IGRvbXRvb2xzSW5zdGFuY2UudGhlbWVNYW5hZ2VyLmdvQnJpZ2h0Qm9vbGVhbjsKICAgICAgY29uc3QgaW5pdGlhbFRoZW1lID0gaXNCcmlnaHQgPyAidnMiIDogInZzLWRhcmsiOwogICAgICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICAgICAgY29uc3Qgb3JpZ2luYWxVcmkgPSBtb25hY29JbnN0YW5jZS5VcmkucGFyc2UoYGRpZmY6Ly9vcmlnaW5hbC8ke3RpbWVzdGFtcDJ9JHt0aGlzLmZpbGVQYXRofWApOwogICAgICBjb25zdCBtb2RpZmllZFVyaSA9IG1vbmFjb0luc3RhbmNlLlVyaS5wYXJzZShgZGlmZjovL21vZGlmaWVkLyR7dGltZXN0YW1wMn0ke3RoaXMuZmlsZVBhdGh9YCk7CiAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG1vbmFjb0luc3RhbmNlLmVkaXRvci5jcmVhdGVNb2RlbCh0aGlzLm9yaWdpbmFsQ29udGVudCwgdGhpcy5sYW5ndWFnZSwgb3JpZ2luYWxVcmkpOwogICAgICB0aGlzLm1vZGlmaWVkTW9kZWwgPSBtb25hY29JbnN0YW5jZS5lZGl0b3IuY3JlYXRlTW9kZWwodGhpcy5tb2RpZmllZENvbnRlbnQsIHRoaXMubGFuZ3VhZ2UsIG1vZGlmaWVkVXJpKTsKICAgICAgdGhpcy5kaWZmRWRpdG9yID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmNyZWF0ZURpZmZFZGl0b3IoY29udGFpbmVyLCB7CiAgICAgICAgYXV0b21hdGljTGF5b3V0OiB0cnVlLAogICAgICAgIHJlYWRPbmx5OiBmYWxzZSwKICAgICAgICAvLyBBbGxvdyBlZGl0aW5nIHRoZSBtb2RpZmllZCAobG9jYWwpIHNpZGUKICAgICAgICBvcmlnaW5hbEVkaXRhYmxlOiBmYWxzZSwKICAgICAgICAvLyBEaXNrIHZlcnNpb24gaXMgcmVhZC1vbmx5CiAgICAgICAgcmVuZGVyU2lkZUJ5U2lkZTogdHJ1ZSwKICAgICAgICBpZ25vcmVUcmltV2hpdGVzcGFjZTogZmFsc2UsCiAgICAgICAgZm9udFNpemU6IDE0LAogICAgICAgIG1pbmltYXA6IHsKICAgICAgICAgIGVuYWJsZWQ6IGZhbHNlCiAgICAgICAgfQogICAgICB9KTsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLnNldFRoZW1lKGluaXRpYWxUaGVtZSk7CiAgICAgIHRoaXMuZGlmZkVkaXRvci5zZXRNb2RlbCh7CiAgICAgICAgb3JpZ2luYWw6IHRoaXMub3JpZ2luYWxNb2RlbCwKICAgICAgICBtb2RpZmllZDogdGhpcy5tb2RpZmllZE1vZGVsCiAgICAgIH0pOwogICAgICB0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uID0gZG9tdG9vbHNJbnN0YW5jZS50aGVtZU1hbmFnZXIudGhlbWVPYnNlcnZhYmxlLnN1YnNjcmliZSgoZ29CcmlnaHQpID0+IHsKICAgICAgICBjb25zdCBuZXdUaGVtZSA9IGdvQnJpZ2h0ID8gInZzIiA6ICJ2cy1kYXJrIjsKICAgICAgICBtb25hY29JbnN0YW5jZS5lZGl0b3Iuc2V0VGhlbWUobmV3VGhlbWUpOwogICAgICB9KTsKICAgICAgY29uc3QgY3NzSWQgPSAibW9uYWNvLWRpZmYtZWRpdG9yLWNzcyI7CiAgICAgIGlmICghdGhpcy5zaGFkb3dSb290Py5nZXRFbGVtZW50QnlJZChjc3NJZCkpIHsKICAgICAgICBjb25zdCBjc3NSZXNwb25zZSA9IGF3YWl0IGZldGNoKGAke21vbmFjb0NkbkJhc2V9L21pbi92cy9lZGl0b3IvZWRpdG9yLm1haW4uY3NzYCk7CiAgICAgICAgY29uc3QgY3NzVGV4dCA9IGF3YWl0IGNzc1Jlc3BvbnNlLnRleHQoKTsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC5pZCA9IGNzc0lkOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IGNzc1RleHQ7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmQoc3R5bGVFbGVtZW50KTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGhpcy5kaWZmRWRpdG9yPy5yZXZlYWxGaXJzdERpZmYoKTsKICAgICAgICB9IGNhdGNoIHsKICAgICAgICB9CiAgICAgIH0sIDEwMCk7CiAgICAgIHRoaXMuZGlmZkVkaXRvckRlZmVycmVkLnJlc29sdmUodGhpcy5kaWZmRWRpdG9yKTsKICAgIH0KICAgIGdvVG9OZXh0RGlmZigpIHsKICAgICAgdHJ5IHsKICAgICAgICB0aGlzLmRpZmZFZGl0b3I/LmdvVG9EaWZmKCJuZXh0Iik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBnb1RvUHJldmlvdXNEaWZmKCkgewogICAgICB0cnkgewogICAgICAgIHRoaXMuZGlmZkVkaXRvcj8uZ29Ub0RpZmYoInByZXZpb3VzIik7CiAgICAgIH0gY2F0Y2ggewogICAgICB9CiAgICB9CiAgICBhY2NlcHRMb2NhbCgpIHsKICAgICAgY29uc3QgbW9kaWZpZWRDb250ZW50ID0gdGhpcy5kaWZmRWRpdG9yPy5nZXRNb2RpZmllZEVkaXRvcigpLmdldFZhbHVlKCkgfHwgdGhpcy5tb2RpZmllZENvbnRlbnQ7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtcmVzb2x2ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGFjdGlvbjogInVzZS1sb2NhbCIsIGNvbnRlbnQ6IG1vZGlmaWVkQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYWNjZXB0RGlzaygpIHsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiZGlmZi1yZXNvbHZlZCIsIHsKICAgICAgICBkZXRhaWw6IHsgYWN0aW9uOiAidXNlLWRpc2siLCBjb250ZW50OiB0aGlzLm9yaWdpbmFsQ29udGVudCB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY2xvc2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImRpZmYtY2xvc2VkIiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLm1vbmFjb1RoZW1lU3Vic2NyaXB0aW9uKSB7CiAgICAgICAgdGhpcy5tb25hY29UaGVtZVN1YnNjcmlwdGlvbi51bnN1YnNjcmliZSgpOwogICAgICAgIHRoaXMubW9uYWNvVGhlbWVTdWJzY3JpcHRpb24gPSBudWxsOwogICAgICB9CiAgICAgIGlmICh0aGlzLm9yaWdpbmFsTW9kZWwpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsTW9kZWwuZGlzcG9zZSgpOwogICAgICAgIHRoaXMub3JpZ2luYWxNb2RlbCA9IG51bGw7CiAgICAgIH0KICAgICAgaWYgKHRoaXMubW9kaWZpZWRNb2RlbCkgewogICAgICAgIHRoaXMubW9kaWZpZWRNb2RlbC5kaXNwb3NlKCk7CiAgICAgICAgdGhpcy5tb2RpZmllZE1vZGVsID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5kaWZmRWRpdG9yKSB7CiAgICAgICAgdGhpcy5kaWZmRWRpdG9yLmRpc3Bvc2UoKTsKICAgICAgICB0aGlzLmRpZmZFZGl0b3IgPSBudWxsOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlRGlmZkVkaXRvcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwppbml0X2RlZXNfd29ya3NwYWNlX3Rlcm1pbmFsKCk7CmluaXRfZGVlc193b3Jrc3BhY2VfdGVybWluYWwoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwp2YXIgX19lc0RlY29yYXRlNTUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV29ya3NwYWNlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9kZWNvcmF0b3JzOwogIGxldCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzOwogIGxldCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93VGVybWluYWxfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dUZXJtaW5hbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzOwogIGxldCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vcGVuRmlsZXNfZGVjb3JhdG9yczsKICBsZXQgX29wZW5GaWxlc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZGVjb3JhdG9yczsKICBsZXQgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnM7CiAgbGV0IF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNJbml0aWFsaXppbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCb3R0b21QYW5lbF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzOwogIGxldCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZGVjb3JhdG9yczsKICBsZXQgX2F1dG9TYXZlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYXV0b1NhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2RlY29yYXRvcnM7CiAgbGV0IF9pbml0Q29tbWFuZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0T3V0cHV0X2RlY29yYXRvcnM7CiAgbGV0IF9pbml0T3V0cHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9yczsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzRHJhZ2dpbmdGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nVGVybWluYWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzOwogIGxldCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX2V4ZWN1dGlvbkVudmlyb25tZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX3Nob3dGaWxlVHJlZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfZmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3Rlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3BlbkZpbGVzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNUZXJtaW5hbENvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNGaWxlVHJlZUNvbGxhcHNlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2FjdGl2ZUJvdHRvbVBhbmVsX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWFnbm9zdGljTWFya2Vyc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfYXV0b1NhdmVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2luaXRDb21tYW5kX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pbml0T3V0cHV0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nRmlsZVRyZWVfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2hvd0RpZmZWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kaWZmVmlld0NvbmZpZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXhlY3V0aW9uRW52aXJvbm1lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImV4ZWN1dGlvbkVudmlyb25tZW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmV4ZWN1dGlvbkVudmlyb25tZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5leGVjdXRpb25FbnZpcm9ubWVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0aWFsaXphdGlvblByb21pc2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbGl6YXRpb25Qcm9taXNlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbml0aWFsaXphdGlvblByb21pc2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbGl6YXRpb25Qcm9taXNlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsaXphdGlvblByb21pc2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5pdGlhbGl6YXRpb25Qcm9taXNlX2luaXRpYWxpemVycywgX2luaXRpYWxpemF0aW9uUHJvbWlzZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93RmlsZVRyZWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd0ZpbGVUcmVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93RmlsZVRyZWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0ZpbGVUcmVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93RmlsZVRyZWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0ZpbGVUcmVlX2luaXRpYWxpemVycywgX3Nob3dGaWxlVHJlZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9zaG93VGVybWluYWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1Rlcm1pbmFsIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VGVybWluYWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd1Rlcm1pbmFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93VGVybWluYWwgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rlcm1pbmFsX2luaXRpYWxpemVycywgX3Nob3dUZXJtaW5hbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9maWxlVHJlZVdpZHRoX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImZpbGVUcmVlV2lkdGgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsZVRyZWVXaWR0aCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZmlsZVRyZWVXaWR0aCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9maWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2ZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfdGVybWluYWxIZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRlcm1pbmFsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRlcm1pbmFsSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXJtaW5hbEhlaWdodF9pbml0aWFsaXplcnMsIF90ZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9vcGVuRmlsZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3BlbkZpbGVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvcGVuRmlsZXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3BlbkZpbGVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vcGVuRmlsZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgX29wZW5GaWxlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVGaWxlUGF0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVGaWxlUGF0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlRmlsZVBhdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlRmlsZVBhdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUZpbGVQYXRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUZpbGVQYXRoX2luaXRpYWxpemVycywgX2FjdGl2ZUZpbGVQYXRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzVGVybWluYWxDb2xsYXBzZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNUZXJtaW5hbENvbGxhcHNlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNUZXJtaW5hbENvbGxhcHNlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVGVybWluYWxDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRmlsZVRyZWVDb2xsYXBzZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRmlsZVRyZWVDb2xsYXBzZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNGaWxlVHJlZUNvbGxhcHNlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0ZpbGVUcmVlQ29sbGFwc2VkX2luaXRpYWxpemVycywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfaXNJbml0aWFsaXppbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNJbml0aWFsaXppbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSW5pdGlhbGl6aW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzSW5pdGlhbGl6aW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0luaXRpYWxpemluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0luaXRpYWxpemluZ19pbml0aWFsaXplcnMsIF9pc0luaXRpYWxpemluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9hY3RpdmVCb3R0b21QYW5lbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhY3RpdmVCb3R0b21QYW5lbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWN0aXZlQm90dG9tUGFuZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQm90dG9tUGFuZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFjdGl2ZUJvdHRvbVBhbmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjdGl2ZUJvdHRvbVBhbmVsX2luaXRpYWxpemVycywgX2FjdGl2ZUJvdHRvbVBhbmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpYWdub3N0aWNNYXJrZXJzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpYWdub3N0aWNNYXJrZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWFnbm9zdGljTWFya2VycyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWFnbm9zdGljTWFya2Vycywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlhZ25vc3RpY01hcmtlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlhZ25vc3RpY01hcmtlcnNfaW5pdGlhbGl6ZXJzLCBfZGlhZ25vc3RpY01hcmtlcnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NSh0aGlzLCBudWxsLCBfYXV0b1NhdmVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYXV0b1NhdmUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImF1dG9TYXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmF1dG9TYXZlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hdXRvU2F2ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hdXRvU2F2ZV9pbml0aWFsaXplcnMsIF9hdXRvU2F2ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9pbml0Q29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0Q29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgX2luaXRDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2luaXRPdXRwdXRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdE91dHB1dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdE91dHB1dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pbml0T3V0cHV0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0T3V0cHV0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU1KHRoaXMsIG51bGwsIF9jdXJyZW50RmlsZVRyZWVXaWR0aF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50RmlsZVRyZWVXaWR0aCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudEZpbGVUcmVlV2lkdGgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudEZpbGVUcmVlV2lkdGgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50VGVybWluYWxIZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRUZXJtaW5hbEhlaWdodCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VGVybWluYWxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFRlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdGaWxlVHJlZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nRmlsZVRyZWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdGaWxlVHJlZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nRmlsZVRyZWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdGaWxlVHJlZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nRmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ0ZpbGVUcmVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2lzRHJhZ2dpbmdUZXJtaW5hbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0RyYWdnaW5nVGVybWluYWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmdUZXJtaW5hbCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5pc0RyYWdnaW5nVGVybWluYWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX3Nob3dEaWZmVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93RGlmZlZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dEaWZmVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93RGlmZlZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dEaWZmVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93RGlmZlZpZXdfaW5pdGlhbGl6ZXJzLCBfc2hvd0RpZmZWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTUodGhpcywgbnVsbCwgX2RpZmZWaWV3Q29uZmlnX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRpZmZWaWV3Q29uZmlnIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkaWZmVmlld0NvbmZpZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kaWZmVmlld0NvbmZpZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZGlmZlZpZXdDb25maWcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZGlmZlZpZXdDb25maWdfaW5pdGlhbGl6ZXJzLCBfZGlmZlZpZXdDb25maWdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gewogICAgICBjb25zdCBlbnYyID0gbmV3IFdlYkNvbnRhaW5lckVudmlyb25tZW50KCk7CiAgICAgIGNvbnN0IG1vdW50UHJvbWlzZSA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgZW52Mi5pbml0KCk7CiAgICAgICAgY29uc3QgZmlsZVRyZWUgPSB7CiAgICAgICAgICAicGFja2FnZS5qc29uIjogewogICAgICAgICAgICBmaWxlOiB7CiAgICAgICAgICAgICAgY29udGVudHM6IEpTT04uc3RyaW5naWZ5KHsKICAgICAgICAgICAgICAgIG5hbWU6ICJkZW1vLXByb2plY3QiLAogICAgICAgICAgICAgICAgdmVyc2lvbjogIjEuMC4wIiwKICAgICAgICAgICAgICAgIHR5cGU6ICJtb2R1bGUiLAogICAgICAgICAgICAgICAgc2NyaXB0czogewogICAgICAgICAgICAgICAgICBidWlsZDogInRzYyIsCiAgICAgICAgICAgICAgICAgIGRldjogInRzYyAtLXdhdGNoIgogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGRlcGVuZGVuY2llczogewogICAgICAgICAgICAgICAgICAiQHB1c2gucm9ja3Mvc21hcnRwcm9taXNlIjogIl40LjIuMyIKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICBkZXZEZXBlbmRlbmNpZXM6IHsKICAgICAgICAgICAgICAgICAgIkB0eXBlcy9ub2RlIjogIl4yMi4wLjAiLAogICAgICAgICAgICAgICAgICB0eXBlc2NyaXB0OiAiXjUuMC4wIgogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICAibnBtZXh0cmEuanNvbiI6IHsKICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgIGNvbnRlbnRzOiBKU09OLnN0cmluZ2lmeSh7CiAgICAgICAgICAgICAgICBkZWVzRWRpdG9yV29ya3NwYWNlOiB7CiAgICAgICAgICAgICAgICAgIG9uSW5pdDogInBucG0gaW5zdGFsbCIKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB9LCBudWxsLCAyKQogICAgICAgICAgICB9CiAgICAgICAgICB9LAogICAgICAgICAgInRzY29uZmlnLmpzb24iOiB7CiAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICBjb250ZW50czogSlNPTi5zdHJpbmdpZnkoewogICAgICAgICAgICAgICAgY29tcGlsZXJPcHRpb25zOiB7CiAgICAgICAgICAgICAgICAgIHRhcmdldDogIkVTMjAyMiIsCiAgICAgICAgICAgICAgICAgIG1vZHVsZTogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgbW9kdWxlUmVzb2x1dGlvbjogIk5vZGVOZXh0IiwKICAgICAgICAgICAgICAgICAgc3RyaWN0OiB0cnVlLAogICAgICAgICAgICAgICAgICBvdXREaXI6ICIuL2Rpc3QiLAogICAgICAgICAgICAgICAgICByb290RGlyOiAiLi9zcmMiLAogICAgICAgICAgICAgICAgICBkZWNsYXJhdGlvbjogdHJ1ZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGluY2x1ZGU6IFsic3JjLyoqLyoiXQogICAgICAgICAgICAgIH0sIG51bGwsIDIpCiAgICAgICAgICAgIH0KICAgICAgICAgIH0sCiAgICAgICAgICBzcmM6IHsKICAgICAgICAgICAgZGlyZWN0b3J5OiB7CiAgICAgICAgICAgICAgImluZGV4LnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIE1haW4gZW50cnkgcG9pbnQKaW1wb3J0IHsgZ3JlZXQsIGZvcm1hdE5hbWUgfSBmcm9tICcuL3V0aWxzLmpzJzsKCmNvbnN0IG5hbWUgPSBmb3JtYXROYW1lKCdXb3JsZCcpOwpjb25zb2xlLmxvZyhncmVldChuYW1lKSk7CgovLyBFeGFtcGxlIGFzeW5jIGZ1bmN0aW9uCmFzeW5jIGZ1bmN0aW9uIG1haW4oKSB7CiAgY29uc3QgcmVzdWx0ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCdIZWxsbyBmcm9tIGFzeW5jIScpOwogIGNvbnNvbGUubG9nKHJlc3VsdCk7Cn0KCm1haW4oKTsKYAogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgInV0aWxzLnRzIjogewogICAgICAgICAgICAgICAgZmlsZTogewogICAgICAgICAgICAgICAgICBjb250ZW50czogYC8vIFV0aWxpdHkgZnVuY3Rpb25zCgpleHBvcnQgaW50ZXJmYWNlIElVc2VyIHsKICBmaXJzdE5hbWU6IHN0cmluZzsKICBsYXN0TmFtZTogc3RyaW5nOwp9CgpleHBvcnQgZnVuY3Rpb24gZ3JlZXQobmFtZTogc3RyaW5nKTogc3RyaW5nIHsKICByZXR1cm4gXGBIZWxsbywgXCR7bmFtZX0hXGA7Cn0KCmV4cG9ydCBmdW5jdGlvbiBmb3JtYXROYW1lKG5hbWU6IHN0cmluZyk6IHN0cmluZyB7CiAgcmV0dXJuIG5hbWUudHJpbSgpLnRvVXBwZXJDYXNlKCk7Cn0KCmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVVc2VyKGZpcnN0TmFtZTogc3RyaW5nLCBsYXN0TmFtZTogc3RyaW5nKTogSVVzZXIgewogIHJldHVybiB7IGZpcnN0TmFtZSwgbGFzdE5hbWUgfTsKfQpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAiaW1wb3J0dGVzdC50cyI6IHsKICAgICAgICAgICAgICAgIGZpbGU6IHsKICAgICAgICAgICAgICAgICAgY29udGVudHM6IGAvLyBUZXN0IG5wbSBwYWNrYWdlIGltcG9ydHMKaW1wb3J0ICogYXMgc21hcnRwcm9taXNlIGZyb20gJ0BwdXNoLnJvY2tzL3NtYXJ0cHJvbWlzZSc7CgovLyBUaGlzIHNob3VsZCBoYXZlIEludGVsbGlTZW5zZSBzaG93aW5nIGRlZmVyKCkgbWV0aG9kCmNvbnN0IGRlZmVycmVkID0gc21hcnRwcm9taXNlLmRlZmVyPHN0cmluZz4oKTsKCi8vIFRlc3QgdXNpbmcgdGhlIGRlZmVycmVkIHByb21pc2UKYXN5bmMgZnVuY3Rpb24gdGVzdFNtYXJ0UHJvbWlzZSgpIHsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIGRlZmVycmVkLnJlc29sdmUoJ0hlbGxvIGZyb20gc21hcnRwcm9taXNlIScpOwogIH0sIDEwMCk7CgogIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGRlZmVycmVkLnByb21pc2U7CiAgY29uc29sZS5sb2cocmVzdWx0KTsKfQoKdGVzdFNtYXJ0UHJvbWlzZSgpOwpgCiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfTsKICAgICAgICBhd2FpdCBlbnYyLm1vdW50KGZpbGVUcmVlKTsKICAgICAgfSkoKTsKICAgICAgY29uc3QgY29udGFpbmVyRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICBjb250YWluZXJFbGVtZW50LnN0eWxlLmNzc1RleHQgPSAicG9zaXRpb246IGFic29sdXRlOyB0b3A6IDA7IGxlZnQ6IDA7IGhlaWdodDogMTAwJTsgd2lkdGg6IDEwMCU7IG92ZXJmbG93OiBoaWRkZW47IjsKICAgICAgY29uc3Qgd29ya3NwYWNlRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd29ya3NwYWNlIik7CiAgICAgIHdvcmtzcGFjZUVsZW1lbnQuZXhlY3V0aW9uRW52aXJvbm1lbnQgPSBlbnYyOwogICAgICB3b3Jrc3BhY2VFbGVtZW50LmluaXRpYWxpemF0aW9uUHJvbWlzZSA9IG1vdW50UHJvbWlzZTsKICAgICAgY29udGFpbmVyRWxlbWVudC5hcHBlbmRDaGlsZCh3b3Jrc3BhY2VFbGVtZW50KTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgICAgICAke2NvbnRhaW5lckVsZW1lbnR9CiAgICAgIDwvZGVlcy1kZW1vd3JhcHBlcj4KICAgIGA7CiAgICB9OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9leGVjdXRpb25FbnZpcm9ubWVudF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBleGVjdXRpb25FbnZpcm9ubWVudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZXhlY3V0aW9uRW52aXJvbm1lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2V4ZWN1dGlvbkVudmlyb25tZW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZXhlY3V0aW9uRW52aXJvbm1lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5pdGlhbGl6YXRpb25Qcm9taXNlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbGl6YXRpb25Qcm9taXNlKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsaXphdGlvblByb21pc2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0aWFsaXphdGlvblByb21pc2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93RmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93VGVybWluYWxfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgc2hvd1Rlcm1pbmFsKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rlcm1pbmFsKHZhbHVlMikgewogICAgICB0aGlzLiNzaG93VGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9pbml0aWFsaXplcnMsIDI1MCkpOwogICAgZ2V0IGZpbGVUcmVlV2lkdGgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNmaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZmlsZVRyZWVXaWR0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsZVRyZWVXaWR0aF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Rlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfZmlsZVRyZWVXaWR0aF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2luaXRpYWxpemVycywgMjAwKSk7CiAgICBnZXQgdGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRlcm1pbmFsSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX3Rlcm1pbmFsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBvcGVuRmlsZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNvcGVuRmlsZXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvcGVuRmlsZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI29wZW5GaWxlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FjdGl2ZUZpbGVQYXRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfb3BlbkZpbGVzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGFjdGl2ZUZpbGVQYXRoKCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBhY3RpdmVGaWxlUGF0aCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWN0aXZlRmlsZVBhdGhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc1Rlcm1pbmFsQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlRmlsZVBhdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc1Rlcm1pbmFsQ29sbGFwc2VkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Rlcm1pbmFsQ29sbGFwc2VkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNUZXJtaW5hbENvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzVGVybWluYWxDb2xsYXBzZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVGVybWluYWxDb2xsYXBzZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNUZXJtaW5hbENvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRmlsZVRyZWVDb2xsYXBzZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRmlsZVRyZWVDb2xsYXBzZWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc0ZpbGVUcmVlQ29sbGFwc2VkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNGaWxlVHJlZUNvbGxhcHNlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNGaWxlVHJlZUNvbGxhcHNlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzSW5pdGlhbGl6aW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNGaWxlVHJlZUNvbGxhcHNlZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGlzSW5pdGlhbGl6aW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0luaXRpYWxpemluZyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNJbml0aWFsaXppbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzSW5pdGlhbGl6aW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfaW5pdGlhbGl6ZXJzLCAidGVybWluYWwiKSk7CiAgICBnZXQgYWN0aXZlQm90dG9tUGFuZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJvdHRvbVBhbmVsKHZhbHVlMikgewogICAgICB0aGlzLiNhY3RpdmVCb3R0b21QYW5lbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RpYWdub3N0aWNNYXJrZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfYWN0aXZlQm90dG9tUGFuZWxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgZGlhZ25vc3RpY01hcmtlcnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRpYWdub3N0aWNNYXJrZXJzKHZhbHVlMikgewogICAgICB0aGlzLiNkaWFnbm9zdGljTWFya2Vyc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yRWxlbWVudCA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWFnbm9zdGljTWFya2Vyc19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgaW5pdGlhbGl6YXRpb25TdGFydGVkID0gZmFsc2U7CiAgICBpbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbnVsbDsKICAgIGludGVsbGlTZW5zZUluaXRpYWxpemVkID0gZmFsc2U7CiAgICAvLyBub2RlX21vZHVsZXMgd2F0Y2hlciBmb3IgYXV0by1sb2FkaW5nIHR5cGVzCiAgICBub2RlTW9kdWxlc1dhdGNoZXIgPSBudWxsOwogICAgbm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQgPSBudWxsOwogICAgaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgIC8vIE9wZW4gZmlsZSB3YXRjaGVycyBmb3IgZXh0ZXJuYWwgY2hhbmdlIGRldGVjdGlvbgogICAgb3BlbkZpbGVXYXRjaGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBmaWxlQ2hhbmdlRGVib3VuY2UgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgYWN0aW9uYmFyRWxlbWVudCA9IG51bGw7CiAgICAjYXV0b1NhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgLy8gQXV0by1zYXZlIGZ1bmN0aW9uYWxpdHkKICAgIGdldCBhdXRvU2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYXV0b1NhdmUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2F1dG9TYXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBhdXRvU2F2ZUludGVydmFsID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2F1dG9TYXZlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAjaW5pdENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRDb21tYW5kX2luaXRpYWxpemVycywgIiIpOwogICAgLy8gSW5pdCB0ZXJtaW5hbCBwcmV2aWV3IHN0YXRlCiAgICBnZXQgaW5pdENvbW1hbmQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRDb21tYW5kKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0Q29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2luaXRPdXRwdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pbml0Q29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2luaXRPdXRwdXRfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IGluaXRPdXRwdXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0T3V0cHV0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdE91dHB1dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaW5pdE91dHB1dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaW5pdE91dHB1dF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRGaWxlVHJlZVdpZHRoX2luaXRpYWxpemVycywgMjUwKSk7CiAgICAvLyBSZXNpemUgc3RhdGUKICAgIGdldCBjdXJyZW50RmlsZVRyZWVXaWR0aCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudEZpbGVUcmVlV2lkdGgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRGaWxlVHJlZVdpZHRoX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFRlcm1pbmFsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfY3VycmVudEZpbGVUcmVlV2lkdGhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9jdXJyZW50VGVybWluYWxIZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBjdXJyZW50VGVybWluYWxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXJyZW50VGVybWluYWxIZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VGVybWluYWxIZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRUZXJtaW5hbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzRHJhZ2dpbmdGaWxlVHJlZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2N1cnJlbnRUZXJtaW5hbEhlaWdodF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTYodGhpcywgX2lzRHJhZ2dpbmdGaWxlVHJlZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ0ZpbGVUcmVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNEcmFnZ2luZ0ZpbGVUcmVlKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nRmlsZVRyZWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nVGVybWluYWxfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nRmlsZVRyZWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9pc0RyYWdnaW5nVGVybWluYWxfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdUZXJtaW5hbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmdUZXJtaW5hbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaXNEcmFnZ2luZ1Rlcm1pbmFsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfaXNEcmFnZ2luZ1Rlcm1pbmFsX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nih0aGlzLCBfc2hvd0RpZmZWaWV3X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIC8vIERpZmYgdmlldyBzdGF0ZQogICAgZ2V0IHNob3dEaWZmVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dEaWZmVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dEaWZmVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd0RpZmZWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZGlmZlZpZXdDb25maWdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9zaG93RGlmZlZpZXdfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkaWZmVmlld0NvbmZpZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZGlmZlZpZXdDb25maWcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RpZmZWaWV3Q29uZmlnX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBLZXlib2FyZCBzaG9ydGN1dCBoYW5kbGVyIChib3VuZCBmb3IgcHJvcGVyIGNsZWFudXApCiAgICBrZXlkb3duSGFuZGxlciA9IChfX3J1bkluaXRpYWxpemVyczU2KHRoaXMsIF9kaWZmVmlld0NvbmZpZ19leHRyYUluaXRpYWxpemVycyksIChlMTEpID0+IHsKICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLmtleSA9PT0gInMiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVBY3RpdmVGaWxlKCk7CiAgICAgIH0KICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgZTExLnNoaWZ0S2V5ICYmIGUxMS5rZXkudG9Mb3dlckNhc2UoKSA9PT0gInMiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5zYXZlQWxsRmlsZXMoKTsKICAgICAgfQogICAgfSk7CiAgICAvLyA9PT09PT09PT09IEZpbGV0cmVlIFJlc2l6ZSBIYW5kbGVycyA9PT09PT09PT09CiAgICBoYW5kbGVGaWxlVHJlZU1vdXNlRG93biA9IChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlID0gdHJ1ZTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICB9OwogICAgaGFuZGxlRmlsZVRyZWVNb3VzZU1vdmUgPSAoZTExKSA9PiB7CiAgICAgIGlmICghdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IGNvbnRhaW5lclJlY3Qud2lkdGggKiAwLjU7CiAgICAgIGNvbnN0IG5ld1dpZHRoID0gTWF0aC5tYXgobWluV2lkdGgsIE1hdGgubWluKG1heFdpZHRoLCBtb3VzZVgpKTsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IG5ld1dpZHRoOwogICAgfTsKICAgIGhhbmRsZUZpbGVUcmVlTW91c2VVcCA9ICgpID0+IHsKICAgICAgdGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPSBmYWxzZTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfTsKICAgIC8vID09PT09PT09PT0gVGVybWluYWwgUmVzaXplIEhhbmRsZXJzID09PT09PT09PT0KICAgIGhhbmRsZVRlcm1pbmFsTW91c2VEb3duID0gKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgdGhpcy5pc0RyYWdnaW5nVGVybWluYWwgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgIH07CiAgICBoYW5kbGVUZXJtaW5hbE1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBtb3VzZVkgPSBlMTEuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wOwogICAgICBjb25zdCB0ZXJtaW5hbEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0IC0gbW91c2VZOwogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IGNvbnRhaW5lclJlY3QuaGVpZ2h0ICogMC43OwogICAgICBjb25zdCBuZXdIZWlnaHQgPSBNYXRoLm1heChtaW5IZWlnaHQsIE1hdGgubWluKG1heEhlaWdodCwgdGVybWluYWxIZWlnaHQpKTsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSBuZXdIZWlnaHQ7CiAgICB9OwogICAgaGFuZGxlVGVybWluYWxNb3VzZVVwID0gKCkgPT4gewogICAgICB0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVRlcm1pbmFsTW91c2VNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZVVwKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9OwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NiUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2Utb3V0ZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4taGVpZ2h0OiAwOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAuZWRpdG9yLWFyZWEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZmlsZXRyZWUtcGFuZWwuY29sbGFwc2VkIHsKICAgICAgICB3aWR0aDogMCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAuZWRpdG9yLXBhbmVsIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMjAwcHg7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbCB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC50ZXJtaW5hbC1wYW5lbC5jb2xsYXBzZWQgewogICAgICAgIGhlaWdodDogMzJweCAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAucGFuZWwtaGVhZGVyIHsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICBwYWRkaW5nOiAwIDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC1oZWFkZXItdGl0bGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLnBhbmVsLWhlYWRlci1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5wYW5lbC1hY3Rpb24gewogICAgICAgIHdpZHRoOiAyNHB4OwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnBhbmVsLWFjdGlvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMwJSkiLCAiaHNsKDAgMCUgODAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBzdHJldGNoOwogICAgICAgIGhlaWdodDogMzZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTYlKSIsICJoc2woMCAwJSA4JSkiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDE1JSkiKX07CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLnRhYiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIG1heC13aWR0aDogMjAwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg4JSkiLCAiaHNsKDAgMCUgMTIlKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTAlKSIsICJoc2woMCAwJSA2MCUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NCUpIiwgImhzbCgwIDAlIDEwJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MiUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMjAlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIGJvcmRlci1ib3R0b206IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWItbmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KCiAgICAgIC50YWItY2xvc2UgewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgLnRhYi1jbG9zZSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLnRhYi1jbG9zZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjUlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYi1tb2RpZmllZCB7CiAgICAgICAgd2lkdGg6IDhweDsKICAgICAgICBoZWlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNjAlKSIpfTsKICAgICAgfQoKICAgICAgLnRhYnMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDRweDsKICAgICAgICBtYXJnaW4tbGVmdDogYXV0bzsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIG9wYWNpdHk6IDAuNjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMTVzLCBiYWNrZ3JvdW5kIDAuMTVzOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1tZW51LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnRlcm1pbmFsLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDMycHg7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAzMnB4OwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDA7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgICBwYWRkaW5nOiAwIDEycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTUlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWI6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA3NSUpIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MCUpIiwgImhzbCgwIDAlIDEyJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWIuYWN0aXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDIwJSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCAxMDAlIDUwJSkiLCAiaHNsKDIxMCAxMDAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wYW5lbC10YWItYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgbWluLXdpZHRoOiAxOHB4OwogICAgICAgIGhlaWdodDogMThweDsKICAgICAgICBwYWRkaW5nOiAwIDVweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcwJSA1MCUpIiwgImhzbCgwIDcwJSA0NSUpIil9OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS53YXJuaW5nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDQwIDcwJSA1MCUpIiwgImhzbCg0MCA3MCUgNDUlKSIpfTsKICAgICAgfQoKICAgICAgLnBhbmVsLXRhYi1iYWRnZS5ub25lIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAucHJvYmxlbXMtbGlzdCB7CiAgICAgICAgcGFkZGluZzogNHB4IDA7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGZsZXgtc3RhcnQ7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMzAlKSIsICJoc2woMCAwJSA4MCUpIil9OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xcyBlYXNlOwogICAgICB9CgogICAgICAucHJvYmxlbS1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUlKSIsICJoc2woMCAwJSAxNSUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBtYXJnaW4tdG9wOiAycHg7CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24uZXJyb3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzAlIDUwJSkiLCAiaHNsKDAgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtLWljb24ud2FybmluZyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woNDAgNzAlIDUwJSkiLCAiaHNsKDQwIDcwJSA2MCUpIil9OwogICAgICB9CgogICAgICAucHJvYmxlbS1kZXRhaWxzIHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbWVzc2FnZSB7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLnByb2JsZW0tbG9jYXRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDU1JSkiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ibGVtcy1lbXB0eSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNTUlKSIsICJoc2woMCAwJSA1MCUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDUwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICB3aWR0aDogNDhweDsKICAgICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIGZyb20geyB0cmFuc2Zvcm06IHJvdGF0ZSgwZGVnKTsgfQogICAgICAgIHRvIHsgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsgfQogICAgICB9CgogICAgICAuaW5pdGlhbGl6aW5nIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA1MCUpIiwgImhzbCgwIDAlIDYwJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLmluaXRpYWxpemluZyBkZWVzLWljb24gewogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIC5pbml0aWFsaXppbmcgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldyB7CiAgICAgICAgbWFyZ2luLXRvcDogMjRweDsKICAgICAgICB3aWR0aDogODAlOwogICAgICAgIG1heC13aWR0aDogNjAwcHg7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIGRlZXMtd29ya3NwYWNlLW1vbmFjbyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgfQoKICAgICAgZGVlcy13b3Jrc3BhY2UtdGVybWluYWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFJlc2l6ZSBoYW5kbGVzICovCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsIHsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGN1cnNvcjogY29sLXJlc2l6ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHotaW5kZXg6IDEwOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbDpob3ZlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLXZlcnRpY2FsOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB3aWR0aDogMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmU3NjgxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDFweDsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtdmVydGljYWw6aG92ZXI6OmFmdGVyLAogICAgICAucmVzaXplLWhhbmRsZS12ZXJ0aWNhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbCB7CiAgICAgICAgaGVpZ2h0OiA2cHg7CiAgICAgICAgY3Vyc29yOiByb3ctcmVzaXplOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgei1pbmRleDogMTA7CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6aG92ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWwuZHJhZ2dpbmcgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM1OGE2ZmYiKX07CiAgICAgIH0KCiAgICAgIC5yZXNpemUtaGFuZGxlLWhvcml6b250YWw6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgbGVmdDogNTAlOwogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlKC01MCUsIC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2ZTc2ODEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogMXB4OwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1ob3Jpem9udGFsOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZS1oYW5kbGUtaG9yaXpvbnRhbC5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiI2ZmZmZmZiIpfTsKICAgICAgfQoKICAgICAgLyogUHJldmVudCB0ZXh0IHNlbGVjdGlvbiB3aGlsZSBkcmFnZ2luZyAqLwogICAgICAud29ya3NwYWNlLWNvbnRhaW5lci5kcmFnZ2luZyB7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC53b3Jrc3BhY2UtY29udGFpbmVyLmRyYWdnaW5nIC5maWxldHJlZS1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLmVkaXRvci1wYW5lbCwKICAgICAgLndvcmtzcGFjZS1jb250YWluZXIuZHJhZ2dpbmcgLnRlcm1pbmFsLXBhbmVsIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGNvbnN0IGNvbnRhaW5lckNsYXNzZXMgPSBbCiAgICAgICAgIndvcmtzcGFjZS1jb250YWluZXIiLAogICAgICAgIHRoaXMuaXNEcmFnZ2luZ0ZpbGVUcmVlIHx8IHRoaXMuaXNEcmFnZ2luZ1Rlcm1pbmFsID8gImRyYWdnaW5nIiA6ICIiCiAgICAgIF0uZmlsdGVyKEJvb2xlYW4pLmpvaW4oIiAiKTsKICAgICAgaWYgKHRoaXMuaXNJbml0aWFsaXppbmcpIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iaW5pdGlhbGl6aW5nIj4KICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOmxvYWRlcjIifSBpY29uU2l6ZT0iMzIiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+SW5pdGlhbGl6aW5nIHdvcmtzcGFjZS4uLjwvc3Bhbj4KICAgICAgICAgIDxkZWVzLXdvcmtzcGFjZS10ZXJtaW5hbC1wcmV2aWV3CiAgICAgICAgICAgIC5jb21tYW5kPSR7dGhpcy5pbml0Q29tbWFuZCB8fCAiIn0KICAgICAgICAgICAgLmxpbmVzPSR7dGhpcy5pbml0T3V0cHV0fQogICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9IndvcmtzcGFjZS1vdXRlciI+CiAgICAgICAgPGRpdiBjbGFzcz0iJHtjb250YWluZXJDbGFzc2VzfSI+CiAgICAgICAgICA8IS0tIEZpbGV0cmVlIHBhbmVsIChmdWxsIGhlaWdodCkgLS0+CiAgICAgICAgICAke3RoaXMuc2hvd0ZpbGVUcmVlID8gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBjbGFzcz0iZmlsZXRyZWUtcGFuZWwgJHt0aGlzLmlzRmlsZVRyZWVDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICBzdHlsZT0id2lkdGg6ICR7dGhpcy5pc0ZpbGVUcmVlQ29sbGFwc2VkID8gMCA6IHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGh9cHgiCiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtZmlsZXRyZWUKICAgICAgICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICAgICAgICAuc2VsZWN0ZWRQYXRoPSR7dGhpcy5hY3RpdmVGaWxlUGF0aH0KICAgICAgICAgICAgICAgIEBmaWxlLXNlbGVjdD0ke3RoaXMuaGFuZGxlRmlsZVNlbGVjdH0KICAgICAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1maWxldHJlZT4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICR7IXRoaXMuaXNGaWxlVHJlZUNvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLXZlcnRpY2FsICR7dGhpcy5pc0RyYWdnaW5nRmlsZVRyZWUgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgQG1vdXNlZG93bj0ke3RoaXMuaGFuZGxlRmlsZVRyZWVNb3VzZURvd259CiAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPCEtLSBFZGl0b3IgKyBUZXJtaW5hbCBhcmVhIC0tPgogICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWFyZWEiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItcGFuZWwiPgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtYmFyIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMtY29udGFpbmVyIj4KICAgICAgICAgICAgICAgICAgJHt0aGlzLm9wZW5GaWxlcy5tYXAoKGZpbGUpID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHtmaWxlLnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGggPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuYWN0aXZhdGVGaWxlKGZpbGUucGF0aCl9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgJHtmaWxlLm1vZGlmaWVkID8gYjJgPHNwYW4gY2xhc3M9InRhYi1tb2RpZmllZCI+PC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ0YWItbmFtZSI+JHtmaWxlLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InRhYi1jbG9zZSIgQGNsaWNrPSR7KGUxMSkgPT4gdGhpcy5jbG9zZUZpbGUoZTExLCBmaWxlLnBhdGgpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9IGljb25TaXplPSIxMiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGApfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItbWVudS1idXR0b24iIEBjbGljaz0ke3RoaXMuc2hvd0VkaXRvck1lbnV9IHRpdGxlPSJFZGl0b3Igb3B0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOm1vcmVWZXJ0aWNhbCJ9IGljb25TaXplPSIxNiI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGVudCI+CiAgICAgICAgICAgICAgICAke3RoaXMuc2hvd0RpZmZWaWV3ICYmIHRoaXMuZGlmZlZpZXdDb25maWcgPyBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLWRpZmYtZWRpdG9yCiAgICAgICAgICAgICAgICAgICAgLmZpbGVQYXRoPSR7dGhpcy5kaWZmVmlld0NvbmZpZy5maWxlUGF0aH0KICAgICAgICAgICAgICAgICAgICAub3JpZ2luYWxDb250ZW50PSR7dGhpcy5kaWZmVmlld0NvbmZpZy5vcmlnaW5hbENvbnRlbnR9CiAgICAgICAgICAgICAgICAgICAgLm1vZGlmaWVkQ29udGVudD0ke3RoaXMuZGlmZlZpZXdDb25maWcubW9kaWZpZWRDb250ZW50fQogICAgICAgICAgICAgICAgICAgIC5sYW5ndWFnZT0ke3RoaXMuZGlmZlZpZXdDb25maWcubGFuZ3VhZ2V9CiAgICAgICAgICAgICAgICAgICAgQGRpZmYtcmVzb2x2ZWQ9JHt0aGlzLmhhbmRsZURpZmZSZXNvbHZlZH0KICAgICAgICAgICAgICAgICAgICBAZGlmZi1jbG9zZWQ9JHsoKSA9PiB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgfX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtZGlmZi1lZGl0b3I+CiAgICAgICAgICAgICAgICBgIDogdGhpcy5vcGVuRmlsZXMubGVuZ3RoID09PSAwID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpmaWxlQ29kZSJ9IGljb25TaXplPSI0OCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4+U2VsZWN0IGEgZmlsZSB0byBlZGl0PC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAgICAgICAgIC5maWxlUGF0aD0ke3RoaXMuYWN0aXZlRmlsZVBhdGh9CiAgICAgICAgICAgICAgICAgICAgLmNvbnRlbnQ9JHt0aGlzLmdldEFjdGl2ZUZpbGVDb250ZW50KCl9CiAgICAgICAgICAgICAgICAgICAgLmxhbmd1YWdlPSR7dGhpcy5nZXRMYW5ndWFnZUZyb21QYXRoKHRoaXMuYWN0aXZlRmlsZVBhdGgpfQogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0ke3RoaXMuaGFuZGxlQ29udGVudENoYW5nZX0KICAgICAgICAgICAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtbW9uYWNvPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8ZGVlcy1hY3Rpb25iYXI+PC9kZWVzLWFjdGlvbmJhcj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8IS0tIEhvcml6b250YWwgcmVzaXplIGhhbmRsZSBmb3IgdGVybWluYWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgJiYgIXRoaXMuaXNUZXJtaW5hbENvbGxhcHNlZCA/IGIyYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlLWhvcml6b250YWwgJHt0aGlzLmlzRHJhZ2dpbmdUZXJtaW5hbCA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlRG93bn0KICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAgIDwhLS0gVGVybWluYWwgcGFuZWwgLS0+CiAgICAgICAgICAgICR7dGhpcy5zaG93VGVybWluYWwgPyBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0idGVybWluYWwtcGFuZWwgJHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAiY29sbGFwc2VkIiA6ICIifSIKICAgICAgICAgICAgICAgIHN0eWxlPSJoZWlnaHQ6ICR7dGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID8gMzIgOiB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodH1weCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXIiPgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC10YWJzIj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6dGVybWluYWwifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgVGVybWluYWwKICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFuZWwtdGFiICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInByb2JsZW1zIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJwcm9ibGVtcyJ9CiAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2lyY2xlQWxlcnQifSBpY29uU2l6ZT0iMTQiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgUHJvYmxlbXMKICAgICAgICAgICAgICAgICAgICAgICR7dGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYW5lbC10YWItYmFkZ2UgJHt0aGlzLmdldEVycm9yQ291bnQoKSA9PT0gMCA/ICJ3YXJuaW5nIiA6ICIifSI+JHt0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmxlbmd0aH08L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYW5lbC1oZWFkZXItYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFuZWwtYWN0aW9uIiBAY2xpY2s9JHt0aGlzLnRvZ2dsZVRlcm1pbmFsfT4KICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24KICAgICAgICAgICAgICAgICAgICAgICAgLmljb249JHt0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPyAibHVjaWRlOmNoZXZyb25VcCIgOiAibHVjaWRlOmNoZXZyb25Eb3duIn0KICAgICAgICAgICAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0idGVybWluYWwtY29udGVudCIgc3R5bGU9ImRpc3BsYXk6ICR7dGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9PT0gInRlcm1pbmFsIiA/ICJibG9jayIgOiAibm9uZSJ9Ij4KICAgICAgICAgICAgICAgICAgPGRlZXMtd29ya3NwYWNlLXRlcm1pbmFsCiAgICAgICAgICAgICAgICAgICAgLmV4ZWN1dGlvbkVudmlyb25tZW50PSR7dGhpcy5leGVjdXRpb25FbnZpcm9ubWVudH0KICAgICAgICAgICAgICAgICAgICAuc2V0dXBDb21tYW5kPSR7IiJ9CiAgICAgICAgICAgICAgICAgID48L2RlZXMtd29ya3NwYWNlLXRlcm1pbmFsPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1jb250ZW50IiBzdHlsZT0iZGlzcGxheTogJHt0aGlzLmFjdGl2ZUJvdHRvbVBhbmVsID09PSAicHJvYmxlbXMiID8gImJsb2NrIiA6ICJub25lIn0iPgogICAgICAgICAgICAgICAgICAke3RoaXMucmVuZGVyUHJvYmxlbXNQYW5lbCgpfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8IS0tIEJvdHRvbSBCYXIgKGZ1bGwgd2lkdGgpIC0tPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1ib3R0b21iYXIKICAgICAgICAgIC5leGVjdXRpb25FbnZpcm9ubWVudD0ke3RoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnR9CiAgICAgICAgICBAcnVuLXByb2Nlc3M9JHt0aGlzLmhhbmRsZVJ1blByb2Nlc3N9CiAgICAgICAgPjwvZGVlcy13b3Jrc3BhY2UtYm90dG9tYmFyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIHRoaXMua2V5ZG93bkhhbmRsZXIpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImtleWRvd24iLCB0aGlzLmtleWRvd25IYW5kbGVyKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2Vtb3ZlIiwgdGhpcy5oYW5kbGVGaWxlVHJlZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZUZpbGVUcmVlTW91c2VVcCk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlVGVybWluYWxNb3VzZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVUZXJtaW5hbE1vdXNlVXApOwogICAgICBpZiAodGhpcy5hdXRvU2F2ZUludGVydmFsKSB7CiAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgIHRoaXMuYXV0b1NhdmVJbnRlcnZhbCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5zdG9wTm9kZU1vZHVsZXNXYXRjaGVyKCk7CiAgICAgIHRoaXMuc3RvcEFsbEZpbGVXYXRjaGVycygpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmN1cnJlbnRGaWxlVHJlZVdpZHRoID0gdGhpcy5maWxlVHJlZVdpZHRoOwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IHRoaXMudGVybWluYWxIZWlnaHQ7CiAgICAgIGlmICh0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZXhlY3V0aW9uRW52aXJvbm1lbnQiKSAmJiB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplV29ya3NwYWNlKCk7CiAgICAgIH0KICAgICAgaWYgKCF0aGlzLmFjdGlvbmJhckVsZW1lbnQpIHsKICAgICAgICB0aGlzLmFjdGlvbmJhckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5lZGl0b3ItcGFuZWwgZGVlcy1hY3Rpb25iYXIiKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZVdvcmtzcGFjZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW5pdGlhbGl6YXRpb25TdGFydGVkKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5pbml0aWFsaXphdGlvblN0YXJ0ZWQgPSB0cnVlOwogICAgICB0aGlzLmlzSW5pdGlhbGl6aW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBpZiAodGhpcy5pbml0aWFsaXphdGlvblByb21pc2UpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6YXRpb25Qcm9taXNlOwogICAgICAgIH0gZWxzZSBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZHkpIHsKICAgICAgICAgIGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuaW5pdCgpOwogICAgICAgIH0KICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGVPbkluaXRDb21tYW5kKCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGluaXRpYWxpemUgd29ya3NwYWNlOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmluaXRpYWxpemF0aW9uU3RhcnRlZCA9IGZhbHNlOwogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMuaXNJbml0aWFsaXppbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeGVjdXRlIG9uSW5pdCBjb21tYW5kIGZyb20gbnBtZXh0cmEuanNvbiBpZiBwcmVzZW50CiAgICAgKiBUaGlzIGFsbG93cyBhdXRvbWF0aWMgc2V0dXAgbGlrZSBgcG5wbSBpbnN0YWxsYCBvbiB3b3Jrc3BhY2UgaW5pdGlhbGl6YXRpb24KICAgICAqLwogICAgYXN5bmMgZXhlY3V0ZU9uSW5pdENvbW1hbmQoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgaWYgKGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQuZXhpc3RzKCIvbnBtZXh0cmEuanNvbiIpKSB7CiAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGF3YWl0IHRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQucmVhZEZpbGUoIi9ucG1leHRyYS5qc29uIik7CiAgICAgICAgICBjb25zdCBjb25maWczID0gSlNPTi5wYXJzZShjb250ZW50Myk7CiAgICAgICAgICBjb25zdCBvbkluaXQgPSBjb25maWczPy5kZWVzRWRpdG9yV29ya3NwYWNlPy5vbkluaXQ7CiAgICAgICAgICBpZiAob25Jbml0ICYmIHR5cGVvZiBvbkluaXQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJFeGVjdXRpbmcgb25Jbml0IGNvbW1hbmQ6Iiwgb25Jbml0KTsKICAgICAgICAgICAgdGhpcy5pbml0Q29tbWFuZCA9IG9uSW5pdDsKICAgICAgICAgICAgdGhpcy5pbml0T3V0cHV0ID0gW107CiAgICAgICAgICAgIGNvbnN0IFtjbWQsIC4uLmFyZ3NdID0gb25Jbml0LnNwbGl0KCIgIik7CiAgICAgICAgICAgIGNvbnN0IHByb2Nlc3M0ID0gYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC5zcGF3bihjbWQsIGFyZ3MpOwogICAgICAgICAgICBwcm9jZXNzNC5vdXRwdXQucGlwZVRvKG5ldyBXcml0YWJsZVN0cmVhbSh7CiAgICAgICAgICAgICAgd3JpdGU6IChkYXRhKSA9PiB7CiAgICAgICAgICAgICAgICBjb25zdCBsaW5lcyA9IGRhdGEuc3BsaXQoIlxuIik7CiAgICAgICAgICAgICAgICBmb3IgKGNvbnN0IGxpbmUgb2YgbGluZXMpIHsKICAgICAgICAgICAgICAgICAgaWYgKGxpbmUpIHsKICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCBsaW5lXTsKICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfSkpOwogICAgICAgICAgICBjb25zdCBleGl0Q29kZSA9IGF3YWl0IHByb2Nlc3M0LmV4aXQ7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJvbkluaXQgY29tbWFuZCBjb21wbGV0ZWQgd2l0aCBleGl0IGNvZGU6IiwgZXhpdENvZGUpOwogICAgICAgICAgICB0aGlzLmluaXRPdXRwdXQgPSBbLi4udGhpcy5pbml0T3V0cHV0LCAiIiwgYENvbW1hbmQgY29tcGxldGVkIHdpdGggZXhpdCBjb2RlOiAke2V4aXRDb2RlfWBdOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oIkZhaWxlZCB0byBleGVjdXRlIG9uSW5pdCBjb21tYW5kOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlSW5pdGlhbGl6ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBsZXQgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKSB7CiAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMDApKTsKICAgICAgICBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIH0KICAgICAgaWYgKCFtb25hY29JbnN0YW5jZSkgewogICAgICAgIGNvbnNvbGUud2FybigiTW9uYWNvIG5vdCB5ZXQgbG9hZGVkLCBJbnRlbGxpU2Vuc2Ugd2lsbCBiZSBpbml0aWFsaXplZCBsYXRlciIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkID0gdHJ1ZTsKICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyID0gbmV3IFR5cGVTY3JpcHRJbnRlbGxpU2Vuc2VNYW5hZ2VyKCk7CiAgICAgIGF3YWl0IHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlci5pbml0KG1vbmFjb0luc3RhbmNlLCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KTsKICAgICAgdGhpcy5zZXR1cE1hcmtlckxpc3RlbmVyKCk7CiAgICAgIHRoaXMuc3RhcnROb2RlTW9kdWxlc1dhdGNoZXIoKTsKICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICB9CiAgICAvKioKICAgICAqIFdhdGNoIG5vZGVfbW9kdWxlcyBmb3IgY2hhbmdlcyAoZS5nLiwgYWZ0ZXIgcG5wbSBpbnN0YWxsKQogICAgICogYW5kIGF1dG9tYXRpY2FsbHkgbG9hZCB0eXBlcyBmb3IgbmV3IHBhY2thZ2VzCiAgICAgKi8KICAgIHN0YXJ0Tm9kZU1vZHVsZXNXYXRjaGVyKCkgewogICAgICBpZiAoIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQgfHwgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaCgiL25vZGVfbW9kdWxlcyIsIChfZXZlbnQsIF9maWxlbmFtZSkgPT4gewogICAgICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMubm9kZU1vZHVsZXNEZWJvdW5jZVRpbWVvdXQpOwogICAgICAgICAgfQogICAgICAgICAgdGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCA9IHNldFRpbWVvdXQoYXN5bmMgKCkgPT4gewogICAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyKSB7CiAgICAgICAgICAgICAgYXdhaXQgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLnNjYW5BbmRMb2FkTmV3UGFja2FnZVR5cGVzKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgfSwgeyByZWN1cnNpdmU6IHRydWUgfSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS53YXJuKCJDb3VsZCBub3Qgd2F0Y2ggbm9kZV9tb2R1bGVzOiIsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgc3RvcE5vZGVNb2R1bGVzV2F0Y2hlcigpIHsKICAgICAgaWYgKHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyKSB7CiAgICAgICAgdGhpcy5ub2RlTW9kdWxlc1dhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMubm9kZU1vZHVsZXNXYXRjaGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ub2RlTW9kdWxlc0RlYm91bmNlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICB0aGlzLm5vZGVNb2R1bGVzRGVib3VuY2VUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgfQogICAgLy8gPT09PT09PT09PSBPcGVuIEZpbGUgV2F0Y2hpbmcgZm9yIEV4dGVybmFsIENoYW5nZXMgPT09PT09PT09PQogICAgLyoqCiAgICAgKiBTdGFydCB3YXRjaGluZyBhbiBvcGVuIGZpbGUgZm9yIGV4dGVybmFsIGNoYW5nZXMKICAgICAqLwogICAgc3RhcnRXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgaWYgKCF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50IHx8IHRoaXMub3BlbkZpbGVXYXRjaGVycy5oYXMocGF0aDIpKQogICAgICAgIHJldHVybjsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCB3YXRjaGVyID0gdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53YXRjaChwYXRoMiwgKF9ldmVudCwgX2ZpbGVuYW1lKSA9PiB7CiAgICAgICAgICBjb25zdCBleGlzdGluZ1RpbWVvdXQgPSB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5nZXQocGF0aDIpOwogICAgICAgICAgaWYgKGV4aXN0aW5nVGltZW91dCkgewogICAgICAgICAgICBjbGVhclRpbWVvdXQoZXhpc3RpbmdUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHRpbWVvdXQyID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKTsKICAgICAgICAgICAgdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZGVsZXRlKHBhdGgyKTsKICAgICAgICAgIH0sIDMwMCk7CiAgICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5zZXQocGF0aDIsIHRpbWVvdXQyKTsKICAgICAgICB9KTsKICAgICAgICB0aGlzLm9wZW5GaWxlV2F0Y2hlcnMuc2V0KHBhdGgyLCB3YXRjaGVyKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYENvdWxkIG5vdCB3YXRjaCBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBTdG9wIHdhdGNoaW5nIGEgZmlsZSB3aGVuIGl0J3MgY2xvc2VkCiAgICAgKi8KICAgIHN0b3BXYXRjaGluZ0ZpbGUocGF0aDIpIHsKICAgICAgY29uc3Qgd2F0Y2hlciA9IHRoaXMub3BlbkZpbGVXYXRjaGVycy5nZXQocGF0aDIpOwogICAgICBpZiAod2F0Y2hlcikgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICAgIGNvbnN0IHRpbWVvdXQyID0gdGhpcy5maWxlQ2hhbmdlRGVib3VuY2UuZ2V0KHBhdGgyKTsKICAgICAgaWYgKHRpbWVvdXQyKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5kZWxldGUocGF0aDIpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIFN0b3AgYWxsIGZpbGUgd2F0Y2hlcnMKICAgICAqLwogICAgc3RvcEFsbEZpbGVXYXRjaGVycygpIHsKICAgICAgZm9yIChjb25zdCB3YXRjaGVyIG9mIHRoaXMub3BlbkZpbGVXYXRjaGVycy52YWx1ZXMoKSkgewogICAgICAgIHdhdGNoZXIuc3RvcCgpOwogICAgICB9CiAgICAgIHRoaXMub3BlbkZpbGVXYXRjaGVycy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRpbWVvdXQyIG9mIHRoaXMuZmlsZUNoYW5nZURlYm91bmNlLnZhbHVlcygpKSB7CiAgICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgfQogICAgICB0aGlzLmZpbGVDaGFuZ2VEZWJvdW5jZS5jbGVhcigpOwogICAgfQogICAgLyoqCiAgICAgKiBIYW5kbGUgZXh0ZXJuYWwgZmlsZSBjaGFuZ2UgLSBzaG93IGFjdGlvbmJhciBpZiBmaWxlIGhhcyBsb2NhbCBjaGFuZ2VzLAogICAgICogb3RoZXJ3aXNlIHNpbGVudGx5IHVwZGF0ZSB3aXRoIGN1cnNvciBwcmVzZXJ2YXRpb24KICAgICAqLwogICAgYXN5bmMgaGFuZGxlRXh0ZXJuYWxGaWxlQ2hhbmdlKHBhdGgyKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoIWZpbGUgfHwgIXRoaXMuZXhlY3V0aW9uRW52aXJvbm1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICBpZiAobmV3Q29udGVudCA9PT0gZmlsZS5jb250ZW50KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmIChmaWxlLm1vZGlmaWVkKSB7CiAgICAgICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLmFjdGlvbmJhckVsZW1lbnQ/LnNob3coewogICAgICAgICAgICBtZXNzYWdlOiBgIiR7ZmlsZS5uYW1lfSIgY2hhbmdlZCBvbiBkaXNrLiBXaGF0IGRvIHlvdSB3YW50IHRvIGRvP2AsCiAgICAgICAgICAgIHR5cGU6ICJxdWVzdGlvbiIsCiAgICAgICAgICAgIGljb246ICJsdWNpZGU6Z2l0TWVyZ2UiLAogICAgICAgICAgICBhY3Rpb25zOiBbCiAgICAgICAgICAgICAgeyBpZDogImxvYWQtZGlzayIsIGxhYmVsOiAiTG9hZCBmcm9tIERpc2siLCBwcmltYXJ5OiB0cnVlIH0sCiAgICAgICAgICAgICAgeyBpZDogInNhdmUtbG9jYWwiLCBsYWJlbDogIlNhdmUgTG9jYWwgdG8gRGlzayIgfSwKICAgICAgICAgICAgICB7IGlkOiAiY29tcGFyZSIsIGxhYmVsOiAiQ29tcGFyZSIgfQogICAgICAgICAgICBdLAogICAgICAgICAgICB0aW1lb3V0OiB7IGR1cmF0aW9uOiAxNWUzLCBkZWZhdWx0QWN0aW9uSWQ6ICJsb2FkLWRpc2siIH0sCiAgICAgICAgICAgIGRpc21pc3NpYmxlOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICAgIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAibG9hZC1kaXNrIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBmYWxzZSk7CiAgICAgICAgICB9IGVsc2UgaWYgKHJlc3VsdD8uYWN0aW9uSWQgPT09ICJzYXZlLWxvY2FsIikgewogICAgICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgZmlsZS5jb250ZW50KTsKICAgICAgICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMiA/IHsgLi4uZjcsIG1vZGlmaWVkOiBmYWxzZSB9IDogZjcpOwogICAgICAgICAgfSBlbHNlIGlmIChyZXN1bHQ/LmFjdGlvbklkID09PSAiY29tcGFyZSIpIHsKICAgICAgICAgICAgdGhpcy5vcGVuRGlmZlZpZXcocGF0aDIsIGZpbGUuY29udGVudCwgbmV3Q29udGVudCk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIG5ld0NvbnRlbnQsIHRydWUpOwogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLndhcm4oYEZhaWxlZCB0byBoYW5kbGUgZXh0ZXJuYWwgY2hhbmdlIGZvciAke3BhdGgyfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlIGZpbGUgY29udGVudCBpbiBzdGF0ZSBhbmQgb3B0aW9uYWxseSBpbiB0aGUgZWRpdG9yCiAgICAgKi8KICAgIGFzeW5jIHVwZGF0ZUZpbGVDb250ZW50KHBhdGgyLCBuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcikgewogICAgICB0aGlzLm9wZW5GaWxlcyA9IHRoaXMub3BlbkZpbGVzLm1hcCgoZjcpID0+IGY3LnBhdGggPT09IHBhdGgyID8geyAuLi5mNywgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgIGlmIChwYXRoMiA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYXdhaXQgZWRpdG9yLnNldENvbnRlbnRFeHRlcm5hbChuZXdDb250ZW50LCBwcmVzZXJ2ZUN1cnNvcik7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIE9wZW4gdGhlIGRpZmYgdmlldyB0byBjb21wYXJlIGxvY2FsIGFuZCBkaXNrIHZlcnNpb25zCiAgICAgKi8KICAgIG9wZW5EaWZmVmlldyhwYXRoMiwgbG9jYWxDb250ZW50LCBkaXNrQ29udGVudCkgewogICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gewogICAgICAgIGZpbGVQYXRoOiBwYXRoMiwKICAgICAgICBvcmlnaW5hbENvbnRlbnQ6IGRpc2tDb250ZW50LAogICAgICAgIG1vZGlmaWVkQ29udGVudDogbG9jYWxDb250ZW50LAogICAgICAgIGxhbmd1YWdlOiB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpCiAgICAgIH07CiAgICAgIHRoaXMuc2hvd0RpZmZWaWV3ID0gdHJ1ZTsKICAgIH0KICAgIC8qKgogICAgICogSGFuZGxlIGRpZmYgdmlldyByZXNvbHV0aW9uCiAgICAgKi8KICAgIGFzeW5jIGhhbmRsZURpZmZSZXNvbHZlZChlMTEpIHsKICAgICAgY29uc3QgeyBhY3Rpb24sIGNvbnRlbnQ6IGNvbnRlbnQzIH0gPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBwYXRoMiA9IHRoaXMuZGlmZlZpZXdDb25maWc/LmZpbGVQYXRoOwogICAgICBpZiAoIXBhdGgyIHx8ICF0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50KSB7CiAgICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgICB0aGlzLmRpZmZWaWV3Q29uZmlnID0gbnVsbDsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGFjdGlvbiA9PT0gInVzZS1sb2NhbCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LndyaXRlRmlsZShwYXRoMiwgY29udGVudDMpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIgPyB7IC4uLmY3LCBjb250ZW50OiBjb250ZW50MywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHBhdGgyID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKSB7CiAgICAgICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgICBhd2FpdCBlZGl0b3Iuc2V0Q29udGVudEV4dGVybmFsKGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGFjdGlvbiA9PT0gInVzZS1kaXNrIikgewogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlRmlsZUNvbnRlbnQocGF0aDIsIGNvbnRlbnQzLCBmYWxzZSk7CiAgICAgIH0KICAgICAgdGhpcy5zaG93RGlmZlZpZXcgPSBmYWxzZTsKICAgICAgdGhpcy5kaWZmVmlld0NvbmZpZyA9IG51bGw7CiAgICB9CiAgICBhc3luYyBoYW5kbGVGaWxlU2VsZWN0KGUxMSkgewogICAgICBjb25zdCB7IHBhdGg6IHBhdGgyLCBuYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKHBhdGgyLCBuYW1lKTsKICAgIH0KICAgIGFzeW5jIG9wZW5GaWxlKHBhdGgyLCBuYW1lKSB7CiAgICAgIGNvbnN0IGV4aXN0aW5nRmlsZSA9IHRoaXMub3BlbkZpbGVzLmZpbmQoKGY3KSA9PiBmNy5wYXRoID09PSBwYXRoMik7CiAgICAgIGlmIChleGlzdGluZ0ZpbGUpIHsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBhd2FpdCB0aGlzLmV4ZWN1dGlvbkVudmlyb25tZW50LnJlYWRGaWxlKHBhdGgyKTsKICAgICAgICB0aGlzLm9wZW5GaWxlcyA9IFsKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLAogICAgICAgICAgeyBwYXRoOiBwYXRoMiwgbmFtZSwgY29udGVudDogY29udGVudDMsIG1vZGlmaWVkOiBmYWxzZSB9CiAgICAgICAgXTsKICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gcGF0aDI7CiAgICAgICAgdGhpcy5zdGFydFdhdGNoaW5nRmlsZShwYXRoMik7CiAgICAgICAgaWYgKCF0aGlzLmludGVsbGlTZW5zZUluaXRpYWxpemVkKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICAgICAgICAgIGF3YWl0IHRoaXMuaW5pdGlhbGl6ZUludGVsbGlTZW5zZSgpOwogICAgICAgICAgY29uc3QgbGFuZ3VhZ2UgPSB0aGlzLmdldExhbmd1YWdlRnJvbVBhdGgocGF0aDIpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlciAmJiAobGFuZ3VhZ2UgPT09ICJ0eXBlc2NyaXB0IiB8fCBsYW5ndWFnZSA9PT0gImphdmFzY3JpcHQiKSkgewogICAgICAgICAgICBhd2FpdCB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIucHJvY2Vzc0NvbnRlbnRDaGFuZ2UoY29udGVudDMpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBjb25zb2xlLmVycm9yKGBGYWlsZWQgdG8gb3BlbiBmaWxlICR7cGF0aDJ9OmAsIGVycm9yKTsKICAgICAgfQogICAgfQogICAgYWN0aXZhdGVGaWxlKHBhdGgyKSB7CiAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSBwYXRoMjsKICAgIH0KICAgIGNsb3NlRmlsZShlMTEsIHBhdGgyKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgZmlsZUluZGV4ID0gdGhpcy5vcGVuRmlsZXMuZmluZEluZGV4KChmNykgPT4gZjcucGF0aCA9PT0gcGF0aDIpOwogICAgICBpZiAoZmlsZUluZGV4ID09PSAtMSkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlc1tmaWxlSW5kZXhdOwogICAgICBpZiAoZmlsZS5tb2RpZmllZCkgewogICAgICAgIGNvbnN0IGNvbmZpcm1lZCA9IGNvbmZpcm0oYCR7ZmlsZS5uYW1lfSBoYXMgdW5zYXZlZCBjaGFuZ2VzLiBDbG9zZSBhbnl3YXk/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5zdG9wV2F0Y2hpbmdGaWxlKHBhdGgyKTsKICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5wYXRoICE9PSBwYXRoMik7CiAgICAgIGlmICh0aGlzLmFjdGl2ZUZpbGVQYXRoID09PSBwYXRoMikgewogICAgICAgIGlmICh0aGlzLm9wZW5GaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBjb25zdCBuZXdJbmRleCA9IE1hdGgubWluKGZpbGVJbmRleCwgdGhpcy5vcGVuRmlsZXMubGVuZ3RoIC0gMSk7CiAgICAgICAgICB0aGlzLmFjdGl2ZUZpbGVQYXRoID0gdGhpcy5vcGVuRmlsZXNbbmV3SW5kZXhdLnBhdGg7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuYWN0aXZlRmlsZVBhdGggPSAiIjsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEFjdGl2ZUZpbGVDb250ZW50KCkgewogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IHRoaXMuYWN0aXZlRmlsZVBhdGgpOwogICAgICByZXR1cm4gZmlsZT8uY29udGVudCB8fCAiIjsKICAgIH0KICAgIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZTExKSB7CiAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCBmaWxlSW5kZXggPSB0aGlzLm9wZW5GaWxlcy5maW5kSW5kZXgoKGY3KSA9PiBmNy5wYXRoID09PSB0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgaWYgKGZpbGVJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBmaWxlID0gdGhpcy5vcGVuRmlsZXNbZmlsZUluZGV4XTsKICAgICAgaWYgKGZpbGUuY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIHRoaXMub3BlbkZpbGVzID0gWwogICAgICAgICAgLi4udGhpcy5vcGVuRmlsZXMuc2xpY2UoMCwgZmlsZUluZGV4KSwKICAgICAgICAgIHsgLi4uZmlsZSwgY29udGVudDogbmV3Q29udGVudCwgbW9kaWZpZWQ6IHRydWUgfSwKICAgICAgICAgIC4uLnRoaXMub3BlbkZpbGVzLnNsaWNlKGZpbGVJbmRleCArIDEpCiAgICAgICAgXTsKICAgICAgICBjb25zdCBsYW5ndWFnZSA9IHRoaXMuZ2V0TGFuZ3VhZ2VGcm9tUGF0aCh0aGlzLmFjdGl2ZUZpbGVQYXRoKTsKICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyICYmIChsYW5ndWFnZSA9PT0gInR5cGVzY3JpcHQiIHx8IGxhbmd1YWdlID09PSAiamF2YXNjcmlwdCIpKSB7CiAgICAgICAgICBpZiAodGhpcy5pbnRlbGxpU2Vuc2VEZWJvdW5jZVRpbWVvdXQpIHsKICAgICAgICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0KTsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlRGVib3VuY2VUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcj8ucHJvY2Vzc0NvbnRlbnRDaGFuZ2UobmV3Q29udGVudCk7CiAgICAgICAgICB9LCA1MDApOwogICAgICAgIH0KICAgICAgfQogICAgfQogICAgZ2V0TGFuZ3VhZ2VGcm9tUGF0aChwYXRoMikgewogICAgICBjb25zdCBleHQgPSBwYXRoMi5zcGxpdCgiLiIpLnBvcCgpPy50b0xvd2VyQ2FzZSgpOwogICAgICBjb25zdCBsYW5ndWFnZU1hcCA9IHsKICAgICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICAgIHRzeDogInR5cGVzY3JpcHQiLAogICAgICAgIGpzOiAiamF2YXNjcmlwdCIsCiAgICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgICAganNvbjogImpzb24iLAogICAgICAgIGh0bWw6ICJodG1sIiwKICAgICAgICBjc3M6ICJjc3MiLAogICAgICAgIHNjc3M6ICJzY3NzIiwKICAgICAgICBsZXNzOiAibGVzcyIsCiAgICAgICAgbWQ6ICJtYXJrZG93biIsCiAgICAgICAgeWFtbDogInlhbWwiLAogICAgICAgIHltbDogInlhbWwiLAogICAgICAgIHhtbDogInhtbCIsCiAgICAgICAgc3FsOiAic3FsIiwKICAgICAgICBweTogInB5dGhvbiIsCiAgICAgICAgc2g6ICJzaGVsbCIsCiAgICAgICAgYmFzaDogInNoZWxsIgogICAgICB9OwogICAgICByZXR1cm4gbGFuZ3VhZ2VNYXBbZXh0IHx8ICIiXSB8fCAicGxhaW50ZXh0IjsKICAgIH0KICAgIHRvZ2dsZVRlcm1pbmFsKCkgewogICAgICB0aGlzLmlzVGVybWluYWxDb2xsYXBzZWQgPSAhdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkOwogICAgfQogICAgLy8gPT09PT09PT09PSBTYXZlIE9wZXJhdGlvbnMgPT09PT09PT09PQogICAgYXN5bmMgc2F2ZUFjdGl2ZUZpbGUoKSB7CiAgICAgIGNvbnN0IGZpbGUgPSB0aGlzLm9wZW5GaWxlcy5maW5kKChmNykgPT4gZjcucGF0aCA9PT0gdGhpcy5hY3RpdmVGaWxlUGF0aCk7CiAgICAgIGlmICghZmlsZSB8fCAhdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgIHRoaXMub3BlbkZpbGVzID0gdGhpcy5vcGVuRmlsZXMubWFwKChmNykgPT4gZjcucGF0aCA9PT0gZmlsZS5wYXRoID8geyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0gOiBmNyk7CiAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgdGhpcy5pbnRlbGxpU2Vuc2VNYW5hZ2VyLmFkZEZpbGVNb2RlbChmaWxlLnBhdGgsIGZpbGUuY29udGVudCk7CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBzYXZlIGZpbGU6IiwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBzYXZlQWxsRmlsZXMoKSB7CiAgICAgIGlmICghdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGZvciAoY29uc3QgZmlsZSBvZiB0aGlzLm9wZW5GaWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5tb2RpZmllZCkpIHsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgdGhpcy5leGVjdXRpb25FbnZpcm9ubWVudC53cml0ZUZpbGUoZmlsZS5wYXRoLCBmaWxlLmNvbnRlbnQpOwogICAgICAgICAgaWYgKHRoaXMuaW50ZWxsaVNlbnNlTWFuYWdlcikgewogICAgICAgICAgICB0aGlzLmludGVsbGlTZW5zZU1hbmFnZXIuYWRkRmlsZU1vZGVsKGZpbGUucGF0aCwgZmlsZS5jb250ZW50KTsKICAgICAgICAgIH0KICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgICAgY29uc29sZS5lcnJvcihgRmFpbGVkIHRvIHNhdmUgJHtmaWxlLnBhdGh9OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5vcGVuRmlsZXMgPSB0aGlzLm9wZW5GaWxlcy5tYXAoKGY3KSA9PiAoeyAuLi5mNywgbW9kaWZpZWQ6IGZhbHNlIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gRWRpdG9yIE1lbnUgPT09PT09PT09PQogICAgYXN5bmMgc2hvd0VkaXRvck1lbnUoZTExKSB7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6IHRoaXMuYXV0b1NhdmUgPyAiXHUyNzEzIEF1dG8gU2F2ZSIgOiAiQXV0byBTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnRvZ2dsZUF1dG9TYXZlKCkKICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOnNhdmUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLnNhdmVBY3RpdmVGaWxlKCkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJTYXZlIEFsbCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpzYXZlIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5zYXZlQWxsRmlsZXMoKQogICAgICAgIH0KICAgICAgXTsKICAgICAgYXdhaXQgRGVlc0NvbnRleHRtZW51Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGUxMSwgbWVudUl0ZW1zKTsKICAgIH0KICAgIHRvZ2dsZUF1dG9TYXZlKCkgewogICAgICB0aGlzLmF1dG9TYXZlID0gIXRoaXMuYXV0b1NhdmU7CiAgICAgIGlmICh0aGlzLmF1dG9TYXZlKSB7CiAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gc2V0SW50ZXJ2YWwoKCkgPT4gewogICAgICAgICAgY29uc3QgaGFzVW5zYXZlZCA9IHRoaXMub3BlbkZpbGVzLnNvbWUoKGY3KSA9PiBmNy5tb2RpZmllZCk7CiAgICAgICAgICBpZiAoaGFzVW5zYXZlZCkgewogICAgICAgICAgICB0aGlzLnNhdmVBbGxGaWxlcygpOwogICAgICAgICAgfQogICAgICAgIH0sIDJlMyk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaWYgKHRoaXMuYXV0b1NhdmVJbnRlcnZhbCkgewogICAgICAgICAgY2xlYXJJbnRlcnZhbCh0aGlzLmF1dG9TYXZlSW50ZXJ2YWwpOwogICAgICAgICAgdGhpcy5hdXRvU2F2ZUludGVydmFsID0gbnVsbDsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGdldEVycm9yQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLmRpYWdub3N0aWNNYXJrZXJzLmZpbHRlcigobTYpID0+IG02LnNldmVyaXR5ID09PSA4KS5sZW5ndGg7CiAgICB9CiAgICByZW5kZXJQcm9ibGVtc1BhbmVsKCkgewogICAgICBpZiAodGhpcy5kaWFnbm9zdGljTWFya2Vycy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbXMtZW1wdHkiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6Y2hlY2tDaXJjbGUifSBpY29uU2l6ZT0iMjQiPjwvZGVlcy1pY29uPgogICAgICAgICAgPHNwYW4+Tm8gcHJvYmxlbXMgZGV0ZWN0ZWQ8L3NwYW4+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJwcm9ibGVtcy1saXN0Ij4KICAgICAgICAke3RoaXMuZGlhZ25vc3RpY01hcmtlcnMubWFwKChtYXJrZXIpID0+IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1pdGVtIiBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9Qcm9ibGVtKG1hcmtlcil9PgogICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgY2xhc3M9InByb2JsZW0taWNvbiAke21hcmtlci5zZXZlcml0eSA9PT0gOCA/ICJlcnJvciIgOiAid2FybmluZyJ9IgogICAgICAgICAgICAgIC5pY29uPSR7bWFya2VyLnNldmVyaXR5ID09PSA4ID8gImx1Y2lkZTpjaXJjbGVYIiA6ICJsdWNpZGU6dHJpYW5nbGVBbGVydCJ9CiAgICAgICAgICAgICAgaWNvblNpemU9IjE0IgogICAgICAgICAgICA+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tZGV0YWlscyI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvYmxlbS1tZXNzYWdlIj4ke21hcmtlci5tZXNzYWdlfTwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InByb2JsZW0tbG9jYXRpb24iPgogICAgICAgICAgICAgICAgJHttYXJrZXIucmVzb3VyY2UucGF0aC5zcGxpdCgiLyIpLnBvcCgpfSAoJHttYXJrZXIuc3RhcnRMaW5lTnVtYmVyfSwgJHttYXJrZXIuc3RhcnRDb2x1bW59KQogICAgICAgICAgICAgICAgJHttYXJrZXIuc291cmNlID8gYFske21hcmtlci5zb3VyY2V9XWAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgbmF2aWdhdGVUb1Byb2JsZW0obWFya2VyKSB7CiAgICAgIGNvbnN0IGZpbGVQYXRoID0gbWFya2VyLnJlc291cmNlLnBhdGg7CiAgICAgIGNvbnN0IGZpbGVOYW1lID0gZmlsZVBhdGguc3BsaXQoIi8iKS5wb3AoKSB8fCAiIjsKICAgICAgY29uc3QgZXhpc3RpbmdGaWxlID0gdGhpcy5vcGVuRmlsZXMuZmluZCgoZjcpID0+IGY3LnBhdGggPT09IGZpbGVQYXRoKTsKICAgICAgaWYgKCFleGlzdGluZ0ZpbGUpIHsKICAgICAgICBhd2FpdCB0aGlzLm9wZW5GaWxlKGZpbGVQYXRoLCBmaWxlTmFtZSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5hY3RpdmVGaWxlUGF0aCA9IGZpbGVQYXRoOwogICAgICB9CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IGVkaXRvckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1vbmFjbyIpOwogICAgICBpZiAoZWRpdG9yRWxlbWVudCkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGF3YWl0IGVkaXRvckVsZW1lbnQuZWRpdG9yRGVmZXJyZWQucHJvbWlzZTsKICAgICAgICBlZGl0b3IucmV2ZWFsTGluZUluQ2VudGVyKG1hcmtlci5zdGFydExpbmVOdW1iZXIpOwogICAgICAgIGVkaXRvci5zZXRQb3NpdGlvbih7CiAgICAgICAgICBsaW5lTnVtYmVyOiBtYXJrZXIuc3RhcnRMaW5lTnVtYmVyLAogICAgICAgICAgY29sdW1uOiBtYXJrZXIuc3RhcnRDb2x1bW4KICAgICAgICB9KTsKICAgICAgICBlZGl0b3IuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0dXBNYXJrZXJMaXN0ZW5lcigpIHsKICAgICAgY29uc3QgbW9uYWNvSW5zdGFuY2UgPSB3aW5kb3cubW9uYWNvOwogICAgICBpZiAoIW1vbmFjb0luc3RhbmNlKQogICAgICAgIHJldHVybjsKICAgICAgbW9uYWNvSW5zdGFuY2UuZWRpdG9yLm9uRGlkQ2hhbmdlTWFya2VycygodXJpcykgPT4gewogICAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgICAgfSk7CiAgICAgIHRoaXMudXBkYXRlRGlhZ25vc3RpY01hcmtlcnMoKTsKICAgIH0KICAgIHVwZGF0ZURpYWdub3N0aWNNYXJrZXJzKCkgewogICAgICBjb25zdCBtb25hY29JbnN0YW5jZSA9IHdpbmRvdy5tb25hY287CiAgICAgIGlmICghbW9uYWNvSW5zdGFuY2UpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBhbGxNYXJrZXJzID0gbW9uYWNvSW5zdGFuY2UuZWRpdG9yLmdldE1vZGVsTWFya2Vycyh7fSk7CiAgICAgIHRoaXMuZGlhZ25vc3RpY01hcmtlcnMgPSBhbGxNYXJrZXJzLm1hcCgobTYpID0+ICh7CiAgICAgICAgbWVzc2FnZTogbTYubWVzc2FnZSwKICAgICAgICBzZXZlcml0eTogbTYuc2V2ZXJpdHksCiAgICAgICAgc3RhcnRMaW5lTnVtYmVyOiBtNi5zdGFydExpbmVOdW1iZXIsCiAgICAgICAgc3RhcnRDb2x1bW46IG02LnN0YXJ0Q29sdW1uLAogICAgICAgIGVuZExpbmVOdW1iZXI6IG02LmVuZExpbmVOdW1iZXIsCiAgICAgICAgZW5kQ29sdW1uOiBtNi5lbmRDb2x1bW4sCiAgICAgICAgc291cmNlOiBtNi5zb3VyY2UsCiAgICAgICAgcmVzb3VyY2U6IHsgcGF0aDogbTYucmVzb3VyY2UucGF0aCB9CiAgICAgIH0pKTsKICAgIH0KICAgIC8vID09PT09PT09PT0gQm90dG9tIEJhciBFdmVudCBIYW5kbGVycyA9PT09PT09PT09CiAgICAvKioKICAgICAqIEhhbmRsZSBydW4tcHJvY2VzcyBldmVudHMgZnJvbSBib3R0b20gYmFyIHdpZGdldHMKICAgICAqIENyZWF0ZXMgYSBuZXcgdGVybWluYWwgdGFiIGZvciB0aGUgcHJvY2VzcwogICAgICovCiAgICBhc3luYyBoYW5kbGVSdW5Qcm9jZXNzKGUxMSkgewogICAgICBjb25zdCBkZXRhaWwgPSBlMTEuZGV0YWlsOwogICAgICBjb25zdCB0ZXJtaW5hbCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtdGVybWluYWwiKTsKICAgICAgaWYgKCF0ZXJtaW5hbCkgewogICAgICAgIGNvbnNvbGUud2FybigiVGVybWluYWwgY29tcG9uZW50IG5vdCBmb3VuZCIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkKSB7CiAgICAgICAgdGhpcy5pc1Rlcm1pbmFsQ29sbGFwc2VkID0gZmFsc2U7CiAgICAgIH0KICAgICAgdGhpcy5hY3RpdmVCb3R0b21QYW5lbCA9ICJ0ZXJtaW5hbCI7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGF3YWl0IHRlcm1pbmFsLmNyZWF0ZVByb2Nlc3NUYWIoewogICAgICAgIHR5cGU6IGRldGFpbC50eXBlLAogICAgICAgIGxhYmVsOiBkZXRhaWwubGFiZWwsCiAgICAgICAgY29tbWFuZDogZGV0YWlsLmNvbW1hbmQsCiAgICAgICAgYXJnczogZGV0YWlsLmFyZ3MsCiAgICAgICAgbWV0YWRhdGE6IGRldGFpbC5tZXRhZGF0YSwKICAgICAgICBzd2l0Y2hUb1RhYjogdHJ1ZQogICAgICB9KTsKICAgIH0KICAgIC8vID09PT09PT09PT0gUHVibGljIExheW91dCBNZXRob2RzID09PT09PT09PT0KICAgIC8qKgogICAgICogUHJvZ3JhbW1hdGljYWxseSBzZXQgdGhlIGZpbGUgdHJlZSB3aWR0aAogICAgICovCiAgICBzZXRGaWxlVHJlZVdpZHRoKHdpZHRoKSB7CiAgICAgIGNvbnN0IG1pbldpZHRoID0gMTUwOwogICAgICBjb25zdCBtYXhXaWR0aCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkud2lkdGggKiAwLjU7CiAgICAgIHRoaXMuY3VycmVudEZpbGVUcmVlV2lkdGggPSBNYXRoLm1heChtaW5XaWR0aCwgTWF0aC5taW4obWF4V2lkdGgsIHdpZHRoKSk7CiAgICAgIHdpbmRvdy5kaXNwYXRjaEV2ZW50KG5ldyBFdmVudCgicmVzaXplIikpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgdGVybWluYWwgaGVpZ2h0CiAgICAgKi8KICAgIHNldFRlcm1pbmFsSGVpZ2h0KGhlaWdodCkgewogICAgICBjb25zdCBtaW5IZWlnaHQgPSAxMDA7CiAgICAgIGNvbnN0IG1heEhlaWdodCA9IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0ICogMC43OwogICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbEhlaWdodCA9IE1hdGgubWF4KG1pbkhlaWdodCwgTWF0aC5taW4obWF4SGVpZ2h0LCBoZWlnaHQpKTsKICAgICAgd2luZG93LmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCJyZXNpemUiKSk7CiAgICB9CiAgICAvKioKICAgICAqIFJlc2V0IGxheW91dCB0byBpbml0aWFsIHByb3BlcnR5IHZhbHVlcwogICAgICovCiAgICByZXNldExheW91dCgpIHsKICAgICAgdGhpcy5jdXJyZW50RmlsZVRyZWVXaWR0aCA9IHRoaXMuZmlsZVRyZWVXaWR0aDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWxIZWlnaHQgPSB0aGlzLnRlcm1pbmFsSGVpZ2h0OwogICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC13b3Jrc3BhY2UvZGVlcy13b3Jrc3BhY2UtdGVybWluYWwvaW5kZXguanMKaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpOwppbml0X3Rlcm1pbmFsX3RhYl9tYW5hZ2VyKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duL2RlZXMtd29ya3NwYWNlLW1hcmtkb3duLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU2ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1NyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgZGVmZXJyZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0cHJvbWlzZS5kZWZlcigpOwp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3duID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9zcGxpdFJhdGlvX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9taW5QYW5lbFNpemVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRTcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzV29ya3NwYWNlTWFya2Rvd24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3BsaXRSYXRpb19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pblBhbmVsU2l6ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTcGxpdFJhdGlvX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9zcGxpdFJhdGlvX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNwbGl0UmF0aW8iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3BsaXRSYXRpbywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgX3NwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfbWluUGFuZWxTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1pblBhbmVsU2l6ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluUGFuZWxTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1pblBhbmVsU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWluUGFuZWxTaXplID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pblBhbmVsU2l6ZV9pbml0aWFsaXplcnMsIF9taW5QYW5lbFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1Nih0aGlzLCBudWxsLCBfY3VycmVudFNwbGl0UmF0aW9fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VycmVudFNwbGl0UmF0aW8iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1cnJlbnRTcGxpdFJhdGlvIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRTcGxpdFJhdGlvLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXJyZW50U3BsaXRSYXRpbyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXJyZW50U3BsaXRSYXRpb19pbml0aWFsaXplcnMsIF9jdXJyZW50U3BsaXRSYXRpb19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSAoKSA9PiBiMmA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd24+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bj5gOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJXb3Jrc3BhY2UiOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuc3BsaXRDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICB9CgogICAgICAuZWRpdG9yQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG1pbi13aWR0aDogMTAwcHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzMwMzYzZCIpfTsKICAgICAgICBjdXJzb3I6IGNvbC1yZXNpemU7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTpob3ZlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZyB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzU4YTZmZiIpfTsKICAgICAgfQoKICAgICAgLnJlc2l6ZUhhbmRsZTo6YWZ0ZXIgewogICAgICAgIGNvbnRlbnQ6ICcnOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDUwJTsKICAgICAgICBsZWZ0OiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGUoLTUwJSwgLTUwJSk7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZlNzY4MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxcHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICB9CgogICAgICAucmVzaXplSGFuZGxlOmhvdmVyOjphZnRlciwKICAgICAgLnJlc2l6ZUhhbmRsZS5kcmFnZ2luZzo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiNmZmZmZmYiKX07CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLm91dGxldENvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBtaW4td2lkdGg6IDEwMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwZDExMTciKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjQyOTJmIiwgIiNlNmVkZjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgJ05vdG8gU2FucycsIEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7CiAgICAgICAgcGFkZGluZzogMjBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC8qIFByZXZlbnQgdGV4dCBzZWxlY3Rpb24gd2hpbGUgZHJhZ2dpbmcgKi8KICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNwbGl0Q29udGFpbmVyLmRyYWdnaW5nIC5lZGl0b3JDb250YWluZXIsCiAgICAgIC5zcGxpdENvbnRhaW5lci5kcmFnZ2luZyAub3V0bGV0Q29udGFpbmVyIHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYAogICAgXTsKICAgICNzcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2luaXRpYWxpemVycywgNTApOwogICAgLyoqCiAgICAgKiBJbml0aWFsIHNwbGl0IHJhdGlvIGZvciB0aGUgZWRpdG9yIChsZWZ0KSBwYW5lbC4KICAgICAqIFZhbHVlIGZyb20gMCB0byAxMDAgcmVwcmVzZW50aW5nIHBlcmNlbnRhZ2Ugd2lkdGguCiAgICAgKiBEZWZhdWx0IGlzIDUwICg1MC81MCBzcGxpdCkuCiAgICAgKi8KICAgIGdldCBzcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jc3BsaXRSYXRpb19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNwbGl0UmF0aW8odmFsdWUyKSB7CiAgICAgIHRoaXMuI3NwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9zcGxpdFJhdGlvX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2luaXRpYWxpemVycywgMTApKTsKICAgIC8qKgogICAgICogTWluaW11bSB3aWR0aCBwZXJjZW50YWdlIGZvciBlaXRoZXIgcGFuZWwuCiAgICAgKi8KICAgIGdldCBtaW5QYW5lbFNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5QYW5lbFNpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5QYW5lbFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pblBhbmVsU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRTcGxpdFJhdGlvX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfbWluUGFuZWxTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9faW5pdGlhbGl6ZXJzLCA1MCkpOwogICAgZ2V0IGN1cnJlbnRTcGxpdFJhdGlvKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50U3BsaXRSYXRpbyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFNwbGl0UmF0aW9fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1Nyh0aGlzLCBfY3VycmVudFNwbGl0UmF0aW9fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0RyYWdnaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNEcmFnZ2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzRHJhZ2dpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHJlc2l6ZUhhbmRsZUVsZW1lbnQgPSBfX3J1bkluaXRpYWxpemVyczU3KHRoaXMsIF9pc0RyYWdnaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGNvbnRhaW5lckVsZW1lbnQ7CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic3BsaXRDb250YWluZXIgJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3JDb250YWluZXIiIHN0eWxlPSJ3aWR0aDogJHt0aGlzLmN1cnJlbnRTcGxpdFJhdGlvfSUiPgogICAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1vbmFjbwogICAgICAgICAgICAubGFuZ3VhZ2U9JHsibWFya2Rvd24ifQogICAgICAgICAgICAuY29udGVudD0ke2AjIGEgdGVzdCBjb250ZW50CgpUaGlzIGlzIHRlc3QgY29udGVudCB0aGF0IGlzIG9mIGxvbmdlciBmb3JtIGFuIGhvcGVmdWxseSBzdGFydHMgdG8gd3JhcCB3aGVuIEkgbmVlZCBpdC4gQW5kIHllcywgaXQgZG9lcyBwZXJmZWN0bHkuIG5pY2UuCgpUZXN0IHwgSGVsbG8KLS0tIHwgLS0tClllYWggfCBTbyBnb29kCgpUaGlzIGlzIHJlYWwgYXNzZXQgSSB0aGluay4gV2h5IHdvdWxkIHdlIHdhbnQgdG8gbGVhdmUgdGhhdCBvbiB0aGUgdGFibGU/IENhbiB5b3UgdGVsbCBteSB0aGF0PwoKV2h5IGFyZSB3ZSBoZXJlPwoKRG8geW91IGtub3c/Cgo+IG5vdGU6ClRoZXJlIGlzIHNvbWV0aGluZyBnb2luZyBvbi4KClxgXGBcYHR5cGVzY3JpcHQKY29uc3QgaGVsbG8gPSAneWVzJwpcYFxgXGAKYH0KICAgICAgICAgICAgd29yZFdyYXA9ImJvdW5kZWQiCiAgICAgICAgICA+PC9kZWVzLXdvcmtzcGFjZS1tb25hY28+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9InJlc2l6ZUhhbmRsZSAke3RoaXMuaXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0iCiAgICAgICAgICBAbW91c2Vkb3duPSR7dGhpcy5oYW5kbGVNb3VzZURvd259CiAgICAgICAgPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Im91dGxldENvbnRhaW5lciIgc3R5bGU9IndpZHRoOiAkezEwMCAtIHRoaXMuY3VycmVudFNwbGl0UmF0aW99JSI+CiAgICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllc0FyZykgewogICAgICBhd2FpdCBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzQXJnKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgICAgdGhpcy5jb250YWluZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zcGxpdENvbnRhaW5lciIpOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnJlc2l6ZUhhbmRsZSIpOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGNvbnN0IG1hcmtkb3duT3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgICAgIGNvbnN0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZSA9IG5ldyBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bigpOwogICAgICBjb25zdCBtZFBhcnNlZFJlc3VsdCA9IGF3YWl0IHNtYXJ0bWFya2Rvd25JbnN0YW5jZS5nZXRNZFBhcnNlZFJlc3VsdEZyb21NYXJrZG93bigibG9hZGluZy4uLiIpOwogICAgICBlZGl0b3IuY29udGVudFN1YmplY3Quc3Vic2NyaWJlKGFzeW5jIChjb250ZW50QXJnKSA9PiB7CiAgICAgICAgYXdhaXQgbWRQYXJzZWRSZXN1bHQudXBkYXRlRnJvbU1hcmtkb3duU3RyaW5nKGNvbnRlbnRBcmcpOwogICAgICAgIGNvbnN0IGh0bWwxOCA9IG1kUGFyc2VkUmVzdWx0Lmh0bWw7CiAgICAgICAgbWFya2Rvd25PdXRsZXQudXBkYXRlSHRtbFRleHQoaHRtbDE4KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVNb3VzZURvd24gPSAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmlzRHJhZ2dpbmcgPSB0cnVlOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfTsKICAgIGhhbmRsZU1vdXNlTW92ZSA9IChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLmlzRHJhZ2dpbmcgfHwgIXRoaXMuY29udGFpbmVyRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSB0aGlzLmNvbnRhaW5lckVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNvbnRhaW5lcldpZHRoID0gY29udGFpbmVyUmVjdC53aWR0aDsKICAgICAgY29uc3QgbW91c2VYID0gZTExLmNsaWVudFggLSBjb250YWluZXJSZWN0LmxlZnQ7CiAgICAgIGxldCBuZXdSYXRpbyA9IG1vdXNlWCAvIGNvbnRhaW5lcldpZHRoICogMTAwOwogICAgICBuZXdSYXRpbyA9IE1hdGgubWF4KHRoaXMubWluUGFuZWxTaXplLCBNYXRoLm1pbigxMDAgLSB0aGlzLm1pblBhbmVsU2l6ZSwgbmV3UmF0aW8pKTsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IG5ld1JhdGlvOwogICAgfTsKICAgIGhhbmRsZU1vdXNlVXAgPSAoKSA9PiB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgICBjb25zdCBlZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbW9uYWNvIik7CiAgICAgIGlmIChlZGl0b3IpIHsKICAgICAgICB3aW5kb3cuZGlzcGF0Y2hFdmVudChuZXcgRXZlbnQoInJlc2l6ZSIpKTsKICAgICAgfQogICAgfTsKICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZSk7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCB0aGlzLmhhbmRsZU1vdXNlVXApOwogICAgfQogICAgLyoqCiAgICAgKiBQcm9ncmFtbWF0aWNhbGx5IHNldCB0aGUgc3BsaXQgcmF0aW8KICAgICAqLwogICAgc2V0U3BsaXRSYXRpbyhyYXRpbykgewogICAgICB0aGlzLmN1cnJlbnRTcGxpdFJhdGlvID0gTWF0aC5tYXgodGhpcy5taW5QYW5lbFNpemUsIE1hdGgubWluKDEwMCAtIHRoaXMubWluUGFuZWxTaXplLCByYXRpbykpOwogICAgfQogICAgLyoqCiAgICAgKiBSZXNldCB0byBpbml0aWFsIHNwbGl0IHJhdGlvCiAgICAgKi8KICAgIHJlc2V0U3BsaXRSYXRpbygpIHsKICAgICAgdGhpcy5jdXJyZW50U3BsaXRSYXRpbyA9IHRoaXMuc3BsaXRSYXRpbzsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNTcoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXb3Jrc3BhY2VNYXJrZG93bjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXdvcmtzcGFjZS9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM2ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiA5MDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8IS0tIERlbW8gMTogSGVhZGluZ3MgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IkhlYWRpbmdzIn0KICAgICAgICAuc3VidGl0bGU9JHsiQWxsIGhlYWRpbmcgbGV2ZWxzIGZyb20gSDEgdG8gSDYifQogICAgICAgIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChwYW5lbEVsKSA9PiB7CiAgY29uc3Qgb3V0bGV0ID0gcGFuZWxFbC5xdWVyeVNlbGVjdG9yKCJkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldCIpOwogIGF3YWl0IG91dGxldD8udXBkYXRlSHRtbFRleHQoYAogICAgICAgICAgICA8aDE+SGVhZGluZyBMZXZlbCAxPC9oMT4KICAgICAgICAgICAgPGgyPkhlYWRpbmcgTGV2ZWwgMjwvaDI+CiAgICAgICAgICAgIDxoMz5IZWFkaW5nIExldmVsIDM8L2gzPgogICAgICAgICAgICA8aDQ+SGVhZGluZyBMZXZlbCA0PC9oND4KICAgICAgICAgICAgPGg1PkhlYWRpbmcgTGV2ZWwgNTwvaDU+CiAgICAgICAgICAgIDxoNj5IZWFkaW5nIExldmVsIDY8L2g2PgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDI6IFRleHQgRm9ybWF0dGluZyAtLT4KICAgICAgPGRlZXMtcGFuZWwKICAgICAgICAudGl0bGU9JHsiVGV4dCBGb3JtYXR0aW5nIn0KICAgICAgICAuc3VidGl0bGU9JHsiQm9sZCwgaXRhbGljLCBsaW5rcywgY29kZSwgYW5kIGtleWJvYXJkIGlucHV0In0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+VGhpcyBpcyBhIHBhcmFncmFwaCB3aXRoIDxzdHJvbmc+Ym9sZCB0ZXh0PC9zdHJvbmc+IGFuZCA8ZW0+aXRhbGljIHRleHQ8L2VtPi48L3A+CiAgICAgICAgICAgIDxwPllvdSBjYW4gYWxzbyB1c2UgPHN0cm9uZz48ZW0+Ym9sZCBpdGFsaWM8L2VtPjwvc3Ryb25nPiBmb3IgZW1waGFzaXMuPC9wPgogICAgICAgICAgICA8cD5IZXJlJ3MgYSA8YSBocmVmPSIjIj5saW5rIGV4YW1wbGU8L2E+IGFuZCBzb21lIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPi48L3A+CiAgICAgICAgICAgIDxwPlByZXNzIDxrYmQ+Q3RybDwva2JkPiArIDxrYmQ+Qzwva2JkPiB0byBjb3B5IHRleHQuPC9wPgogICAgICAgICAgICA8aHI+CiAgICAgICAgICAgIDxwPkFib3ZlIGlzIGEgaG9yaXpvbnRhbCBydWxlIHNlcGFyYXRvci48L3A+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8IS0tIERlbW8gMzogTGlzdHMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7Ikxpc3RzIn0KICAgICAgICAuc3VidGl0bGU9JHsiT3JkZXJlZCwgdW5vcmRlcmVkLCBhbmQgdGFzayBsaXN0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxoMz5Vbm9yZGVyZWQgTGlzdDwvaDM+CiAgICAgICAgICAgIDx1bD4KICAgICAgICAgICAgICA8bGk+Rmlyc3QgaXRlbTwvbGk+CiAgICAgICAgICAgICAgPGxpPlNlY29uZCBpdGVtCiAgICAgICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgICAgIDxsaT5OZXN0ZWQgaXRlbSAxPC9saT4KICAgICAgICAgICAgICAgICAgPGxpPk5lc3RlZCBpdGVtIDI8L2xpPgogICAgICAgICAgICAgICAgPC91bD4KICAgICAgICAgICAgICA8L2xpPgogICAgICAgICAgICAgIDxsaT5UaGlyZCBpdGVtPC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxoMz5PcmRlcmVkIExpc3Q8L2gzPgogICAgICAgICAgICA8b2w+CiAgICAgICAgICAgICAgPGxpPlN0ZXAgb25lPC9saT4KICAgICAgICAgICAgICA8bGk+U3RlcCB0d288L2xpPgogICAgICAgICAgICAgIDxsaT5TdGVwIHRocmVlPC9saT4KICAgICAgICAgICAgPC9vbD4KCiAgICAgICAgICAgIDxoMz5UYXNrIExpc3Q8L2gzPgogICAgICAgICAgICA8dWw+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBjaGVja2VkIGRpc2FibGVkPiBDb21wbGV0ZWQgdGFzazwvbGk+CiAgICAgICAgICAgICAgPGxpIGNsYXNzPSJ0YXNrLWxpc3QtaXRlbSI+PGlucHV0IHR5cGU9ImNoZWNrYm94IiBkaXNhYmxlZD4gUGVuZGluZyB0YXNrPC9saT4KICAgICAgICAgICAgICA8bGkgY2xhc3M9InRhc2stbGlzdC1pdGVtIj48aW5wdXQgdHlwZT0iY2hlY2tib3giIGRpc2FibGVkPiBBbm90aGVyIHRhc2s8L2xpPgogICAgICAgICAgICA8L3VsPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDQ6IENvZGUgQmxvY2tzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJDb2RlIEJsb2NrcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN5bnRheCBoaWdobGlnaHRlZCBjb2RlIGV4YW1wbGVzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHA+SW5saW5lIGNvZGU6IDxjb2RlPmNvbnN0IGdyZWV0aW5nID0gIkhlbGxvLCBXb3JsZCEiOzwvY29kZT48L3A+CgogICAgICAgICAgICA8aDM+VHlwZVNjcmlwdCBFeGFtcGxlPC9oMz4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbXBvcnQ8L3NwYW4+IHsgaHRtbCwgY3NzIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1lbGVtZW50Jzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1rZXl3b3JkIj5pbnRlcmZhY2U8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5JVXNlcjwvc3Bhbj4gewogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPm5hbWU8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPjsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj5lbWFpbDwvc3Bhbj46IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5zdHJpbmc8L3NwYW4+OwogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPmFnZTwvc3Bhbj4/OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+bnVtYmVyPC9zcGFuPjsKfQoKPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+Y29uc3Q8L3NwYW4+IDxzcGFuIGNsYXNzPSJobGpzLXRpdGxlIj5nZXRVc2VyPC9zcGFuPiA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmFzeW5jPC9zcGFuPiAoPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+aWQ8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1idWlsdF9pbiI+c3RyaW5nPC9zcGFuPik6IDxzcGFuIGNsYXNzPSJobGpzLWJ1aWx0X2luIj5Qcm9taXNlPC9zcGFuPiZsdDtJVXNlciZndDsgPSZndDsgewogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmNvbnN0PC9zcGFuPiByZXNwb25zZSA9IDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmF3YWl0PC9zcGFuPiBmZXRjaChcYC9hcGkvdXNlcnMvXCR7aWR9XGApOwogIDxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPnJldHVybjwvc3Bhbj4gcmVzcG9uc2UuanNvbigpOwp9OzwvY29kZT48L3ByZT4KCiAgICAgICAgICAgIDxoMz5KU09OIEV4YW1wbGU8L2gzPgogICAgICAgICAgICA8cHJlPjxjb2RlPnsKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4ibmFtZSI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJkZWVzLWNhdGFsb2ciPC9zcGFuPiwKICA8c3BhbiBjbGFzcz0iaGxqcy1hdHRyIj4idmVyc2lvbiI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiIzLjAuMCI8L3NwYW4+LAogIDxzcGFuIGNsYXNzPSJobGpzLWF0dHIiPiJkZXBlbmRlbmNpZXMiPC9zcGFuPjogewogICAgPHNwYW4gY2xhc3M9ImhsanMtYXR0ciI+IkBkZXNpZ24uZXN0YXRlL2RlZXMtZWxlbWVudCI8L3NwYW4+OiA8c3BhbiBjbGFzcz0iaGxqcy1zdHJpbmciPiJeMi4wLjAiPC9zcGFuPgogIH0KfTwvY29kZT48L3ByZT4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA1OiBUYWJsZXMgLS0+CiAgICAgIDxkZWVzLXBhbmVsCiAgICAgICAgLnRpdGxlPSR7IlRhYmxlcyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlN0eWxlZCB0YWJsZXMgd2l0aCBhbHRlcm5hdGluZyByb3dzIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkZlYXR1cmU8L3RoPgogICAgICAgICAgICAgICAgICA8dGg+U3RhdHVzPC90aD4KICAgICAgICAgICAgICAgICAgPHRoPlByaW9yaXR5PC90aD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90aGVhZD4KICAgICAgICAgICAgICA8dGJvZHk+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXJrIG1vZGUgc3VwcG9ydDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Db21wbGV0ZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+UmVzcG9uc2l2ZSBkZXNpZ248L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SW4gUHJvZ3Jlc3M8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TWVkaXVtPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD5BY2Nlc3NpYmlsaXR5PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlBsYW5uZWQ8L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+SGlnaDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+RG9jdW1lbnRhdGlvbjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5JbiBQcm9ncmVzczwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5Mb3c8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgYCk7Cn19CiAgICAgID4KICAgICAgICA8ZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+PC9kZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPCEtLSBEZW1vIDY6IEJsb2NrcXVvdGVzICYgQWxlcnRzIC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJCbG9ja3F1b3RlcyAmIEFsZXJ0cyJ9CiAgICAgICAgLnN1YnRpdGxlPSR7IlF1b3RlcyBhbmQgR2l0SHViLXN0eWxlIGFsZXJ0cyJ9CiAgICAgICAgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKHBhbmVsRWwpID0+IHsKICBjb25zdCBvdXRsZXQgPSBwYW5lbEVsLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0Iik7CiAgYXdhaXQgb3V0bGV0Py51cGRhdGVIdG1sVGV4dChgCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPlRoaXMgaXMgYSBzdGFuZGFyZCBibG9ja3F1b3RlLiBJdCdzIGdyZWF0IGZvciBoaWdobGlnaHRpbmcgaW1wb3J0YW50IGluZm9ybWF0aW9uIG9yIHF1b3RlcyBmcm9tIG90aGVyIHNvdXJjZXMuPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC1ub3RlIj4KICAgICAgICAgICAgICA8cD48c3Ryb25nPk5vdGU6PC9zdHJvbmc+IFRoaXMgaXMgYW4gaW5mb3JtYXRpb25hbCBub3RlIHRvIGRyYXcgYXR0ZW50aW9uIHRvIGltcG9ydGFudCBkZXRhaWxzLjwvcD4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBIZXJlJ3MgYSBoZWxwZnVsIHRpcCB0byBpbXByb3ZlIHlvdXIgd29ya2Zsb3cuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWltcG9ydGFudCI+CiAgICAgICAgICAgICAgPHA+PHN0cm9uZz5JbXBvcnRhbnQ6PC9zdHJvbmc+IFRoaXMgaW5mb3JtYXRpb24gaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyB0aGUgdG9waWMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LXdhcm5pbmciPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+V2FybmluZzo8L3N0cm9uZz4gQmUgY2FyZWZ1bCB3aGVuIHBlcmZvcm1pbmcgdGhpcyBhY3Rpb24uPC9wPgogICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1hcmtkb3duLWFsZXJ0IG1hcmtkb3duLWFsZXJ0LWNhdXRpb24iPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+Q2F1dGlvbjo8L3N0cm9uZz4gVGhpcyBhY3Rpb24gbWF5IGhhdmUgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMuPC9wPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGApOwp9fQogICAgICA+CiAgICAgICAgPGRlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PjwvZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDwhLS0gRGVtbyA3OiBGdWxsIERvY3VtZW50IC0tPgogICAgICA8ZGVlcy1wYW5lbAogICAgICAgIC50aXRsZT0keyJGdWxsIERvY3VtZW50In0KICAgICAgICAuc3VidGl0bGU9JHsiQSBjb21wbGV0ZSBtYXJrZG93biBkb2N1bWVudCBleGFtcGxlIn0KICAgICAgICAucnVuQWZ0ZXJSZW5kZXI9JHthc3luYyAocGFuZWxFbCkgPT4gewogIGNvbnN0IG91dGxldCA9IHBhbmVsRWwucXVlcnlTZWxlY3RvcigiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKTsKICBhd2FpdCBvdXRsZXQ/LnVwZGF0ZUh0bWxUZXh0KGAKICAgICAgICAgICAgPGgxPkdldHRpbmcgU3RhcnRlZCBHdWlkZTwvaDE+CiAgICAgICAgICAgIDxwPldlbGNvbWUgdG8gdGhlIDxzdHJvbmc+ZGVlcy1jYXRhbG9nPC9zdHJvbmc+IGNvbXBvbmVudCBsaWJyYXJ5LiBUaGlzIGd1aWRlIHdpbGwgaGVscCB5b3UgZ2V0IHVwIGFuZCBydW5uaW5nIHF1aWNrbHkuPC9wPgoKICAgICAgICAgICAgPGgyPkluc3RhbGxhdGlvbjwvaDI+CiAgICAgICAgICAgIDxwPkluc3RhbGwgdGhlIHBhY2thZ2UgdXNpbmcgeW91ciBwcmVmZXJyZWQgcGFja2FnZSBtYW5hZ2VyOjwvcD4KICAgICAgICAgICAgPHByZT48Y29kZT48c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIHBucG0gKHJlY29tbWVuZGVkKTwvc3Bhbj4KcG5wbSBhZGQgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nCgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4jIFVzaW5nIG5wbTwvc3Bhbj4KbnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPgoKICAgICAgICAgICAgPGgyPkJhc2ljIFVzYWdlPC9oMj4KICAgICAgICAgICAgPHA+SW1wb3J0IGFuZCB1c2UgY29tcG9uZW50cyBpbiB5b3VyIFR5cGVTY3JpcHQgZmlsZXM6PC9wPgogICAgICAgICAgICA8cHJlPjxjb2RlPjxzcGFuIGNsYXNzPSJobGpzLWtleXdvcmQiPmltcG9ydDwvc3Bhbj4geyBEZWVzQnV0dG9uIH0gPHNwYW4gY2xhc3M9ImhsanMta2V5d29yZCI+ZnJvbTwvc3Bhbj4gPHNwYW4gY2xhc3M9ImhsanMtc3RyaW5nIj4nQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nJzwvc3Bhbj47Cgo8c3BhbiBjbGFzcz0iaGxqcy1jb21tZW50Ij4vLyBVc2UgaW4geW91ciB0ZW1wbGF0ZXM8L3NwYW4+Cmh0bWxcYCZsdDtkZWVzLWJ1dHRvbiZndDtDbGljayBtZSZsdDsvZGVlcy1idXR0b24mZ3Q7XGA8L2NvZGU+PC9wcmU+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1hbGVydCBtYXJrZG93bi1hbGVydC10aXAiPgogICAgICAgICAgICAgIDxwPjxzdHJvbmc+VGlwOjwvc3Ryb25nPiBDaGVjayB0aGUgZGVtbyBzaG93Y2FzZSBmb3IgbGl2ZSBleGFtcGxlcyBvZiBhbGwgY29tcG9uZW50cy48L3A+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGgyPkF2YWlsYWJsZSBDb21wb25lbnRzPC9oMj4KICAgICAgICAgICAgPHRhYmxlPgogICAgICAgICAgICAgIDx0aGVhZD4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRoPkNvbXBvbmVudDwvdGg+CiAgICAgICAgICAgICAgICAgIDx0aD5EZXNjcmlwdGlvbjwvdGg+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1idXR0b248L2NvZGU+PC90ZD4KICAgICAgICAgICAgICAgICAgPHRkPlByaW1hcnkgYnV0dG9uIGNvbXBvbmVudDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1pbnB1dC10ZXh0PC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5UZXh0IGlucHV0IGZpZWxkPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZD48Y29kZT5kZWVzLXRhYmxlPC9jb2RlPjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZD5EYXRhIHRhYmxlIHdpdGggc29ydGluZzwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQ+PGNvZGU+ZGVlcy1tb2RhbDwvY29kZT48L3RkPgogICAgICAgICAgICAgICAgICA8dGQ+TW9kYWwgZGlhbG9nPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgPC90Ym9keT4KICAgICAgICAgICAgPC90YWJsZT4KCiAgICAgICAgICAgIDxoMj5OZXh0IFN0ZXBzPC9oMj4KICAgICAgICAgICAgPHVsPgogICAgICAgICAgICAgIDxsaT5FeHBsb3JlIHRoZSA8YSBocmVmPSIjIj5jb21wb25lbnQgZG9jdW1lbnRhdGlvbjwvYT48L2xpPgogICAgICAgICAgICAgIDxsaT5DaGVjayBvdXQgdGhlIDxhIGhyZWY9IiMiPnRoZW1pbmcgZ3VpZGU8L2E+PC9saT4KICAgICAgICAgICAgICA8bGk+Sm9pbiBvdXIgPGEgaHJlZj0iIyI+Y29tbXVuaXR5IERpc2NvcmQ8L2E+PC9saT4KICAgICAgICAgICAgPC91bD4KCiAgICAgICAgICAgIDxibG9ja3F1b3RlPgogICAgICAgICAgICAgIDxwPiJUaGUgYmVzdCBjb21wb25lbnQgbGlicmFyeSBpcyBvbmUgdGhhdCBnZXRzIG91dCBvZiB5b3VyIHdheS4iIFx1MjAxNCBEZXNpZ24gU3lzdGVtcyBUZWFtPC9wPgogICAgICAgICAgICA8L2Jsb2NrcXVvdGU+CiAgICAgICAgICBgKTsKfX0KICAgICAgPgogICAgICAgIDxkZWVzLXdvcmtzcGFjZS1tYXJrZG93bm91dGxldD48L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2Rpdj4KICA8L2RlZXMtZGVtb3dyYXBwZXI+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtd29ya3NwYWNlL2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0L2RlZXMtd29ya3NwYWNlLW1hcmtkb3dub3V0bGV0LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTU3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM1OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13b3Jrc3BhY2UtbWFya2Rvd25vdXRsZXQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlZXNXb3Jrc3BhY2VNYXJrZG93bm91dGxldDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTU3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1dvcmtzcGFjZU1hcmtkb3dub3V0bGV0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzY7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIldvcmtzcGFjZSI7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsICdOb3RvIFNhbnMnLCBIZWx2ZXRpY2EsIEFyaWFsLCBzYW5zLXNlcmlmOwogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI0MjkyZiIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICAub3V0bGV0IHsKICAgICAgICB3b3JkLXdyYXA6IGJyZWFrLXdvcmQ7CiAgICAgIH0KCiAgICAgIC8qIEhlYWRpbmdzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjI1OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZjBmNmZjIil9OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyZW07CiAgICAgICAgcGFkZGluZy1ib3R0b206IDAuM2VtOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICB9CgogICAgICBoMiB7CiAgICAgICAgZm9udC1zaXplOiAxLjVlbTsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMC4zZW07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkOWUwIiwgIiMzMDM2M2QiKX07CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgfQoKICAgICAgaDQgewogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICB9CgogICAgICBoNSB7CiAgICAgICAgZm9udC1zaXplOiAwLjg3NWVtOwogICAgICB9CgogICAgICBoNiB7CiAgICAgICAgZm9udC1zaXplOiAwLjg1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjU2ZDc2IiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC8qIFBhcmFncmFwaHMgYW5kIHRleHQgKi8KICAgICAgcCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAvKiBMaW5rcyAqLwogICAgICBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTY5ZGEiLCAiIzU4YTZmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgIGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAvKiBTdHJvbmcgYW5kIGVtcGhhc2lzICovCiAgICAgIHN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2YwZjZmYyIpfTsKICAgICAgfQoKICAgICAgZW0gewogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQoKICAgICAgLyogTGlzdHMgKi8KICAgICAgdWwsIG9sIHsKICAgICAgICBtYXJnaW4tdG9wOiAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyZW07CiAgICAgIH0KCiAgICAgIGxpIHsKICAgICAgICBtYXJnaW4tdG9wOiA0cHg7CiAgICAgIH0KCiAgICAgIGxpICsgbGkgewogICAgICAgIG1hcmdpbi10b3A6IDRweDsKICAgICAgfQoKICAgICAgdWwgdWwsIHVsIG9sLCBvbCB1bCwgb2wgb2wgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQoKICAgICAgLyogQmxvY2txdW90ZXMgKi8KICAgICAgYmxvY2txdW90ZSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMTZweCAwOwogICAgICAgIHBhZGRpbmc6IDAgMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzY1NmQ3NiIsICIjOGI5NDllIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgYmxvY2txdW90ZSA+IDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICB9CgogICAgICAvKiBJbmxpbmUgY29kZSAqLwogICAgICBjb2RlIHsKICAgICAgICBwYWRkaW5nOiAwLjJlbSAwLjRlbTsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1zaXplOiA4NSU7CiAgICAgICAgZm9udC1mYW1pbHk6IHVpLW1vbm9zcGFjZSwgU0ZNb25vLVJlZ3VsYXIsICdTRiBNb25vJywgTWVubG8sIENvbnNvbGFzLCAnTGliZXJhdGlvbiBNb25vJywgbW9ub3NwYWNlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE3NSwgMTg0LCAxOTMsIDAuMikiLCAicmdiYSgxMTAsIDExOCwgMTI5LCAwLjQpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3aGl0ZS1zcGFjZTogYnJlYWstc3BhY2VzOwogICAgICB9CgogICAgICAvKiBDb2RlIGJsb2NrcyAqLwogICAgICBwcmUgewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGZvbnQtc2l6ZTogODUlOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjQ1OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y2ZjhmYSIsICIjMTYxYjIyIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB3b3JkLXdyYXA6IG5vcm1hbDsKICAgICAgfQoKICAgICAgcHJlIGNvZGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIG92ZXJmbG93OiB2aXNpYmxlOwogICAgICAgIGxpbmUtaGVpZ2h0OiBpbmhlcml0OwogICAgICAgIHdvcmQtd3JhcDogbm9ybWFsOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBmb250LXNpemU6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgICAgfQoKICAgICAgLyogVGFibGVzICovCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogbWF4LWNvbnRlbnQ7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICB0YWJsZSB0aCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyMzI4IiwgIiNlNmVkZjMiKX07CiAgICAgIH0KCiAgICAgIHRhYmxlIHRkIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTNweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjMyOCIsICIjZTZlZGYzIil9OwogICAgICB9CgogICAgICB0YWJsZSB0ciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBkMTExNyIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzIxMjYyZCIpfTsKICAgICAgfQoKICAgICAgdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNmY4ZmEiLCAiIzE2MWIyMiIpfTsKICAgICAgfQoKICAgICAgLyogSG9yaXpvbnRhbCBydWxlcyAqLwogICAgICBociB7CiAgICAgICAgaGVpZ2h0OiA0cHg7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW46IDI0cHggMDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDllMCIsICIjMzAzNjNkIil9OwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAycHg7CiAgICAgIH0KCiAgICAgIC8qIEltYWdlcyAqLwogICAgICBpbWcgewogICAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgfQoKICAgICAgLyogVGFzayBsaXN0cyAqLwogICAgICAudGFzay1saXN0LWl0ZW0gewogICAgICAgIGxpc3Qtc3R5bGUtdHlwZTogbm9uZTsKICAgICAgfQoKICAgICAgLnRhc2stbGlzdC1pdGVtIGlucHV0IHsKICAgICAgICBtYXJnaW46IDAgMC4yZW0gMC4yNWVtIC0xLjRlbTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICAvKiBEZWZpbml0aW9uIGxpc3RzICovCiAgICAgIGRsIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICB9CgogICAgICBkbCBkdCB7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMWVtOwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICBkbCBkZCB7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC8qIEtleWJvYXJkIGlucHV0ICovCiAgICAgIGtiZCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBhZGRpbmc6IDNweCA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGZvbnQtZmFtaWx5OiB1aS1tb25vc3BhY2UsIFNGTW9uby1SZWd1bGFyLCAnU0YgTW9ubycsIE1lbmxvLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIG1vbm9zcGFjZTsKICAgICAgICBsaW5lLWhlaWdodDogMTBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjIzMjgiLCAiI2U2ZWRmMyIpfTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogaW5zZXQgMCAtMXB4IDAgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgfQoKICAgICAgLyogRm9vdG5vdGVzICovCiAgICAgIC5mb290bm90ZXMgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NTZkNzYiLCAiIzhiOTQ5ZSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ5ZTAiLCAiIzMwMzYzZCIpfTsKICAgICAgICBwYWRkaW5nLXRvcDogMTZweDsKICAgICAgICBtYXJnaW4tdG9wOiAzMnB4OwogICAgICB9CgogICAgICAvKiBBbGVydHMvQWRtb25pdGlvbnMgKi8KICAgICAgLm1hcmtkb3duLWFsZXJ0IHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJvcmRlci1sZWZ0OiA0cHggc29saWQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtbm90ZSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5NjlkYSIsICIjNThhNmZmIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDksIDEwNSwgMjE4LCAwLjEpIiwgInJnYmEoNTYsIDEzOSwgMjUzLCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtd2FybmluZyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2JmODcwMCIsICIjZDI5OTIyIil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDE5MSwgMTM1LCAwLCAwLjEpIiwgInJnYmEoMTg3LCAxMjgsIDksIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC1pbXBvcnRhbnQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM4MjUwZGYiLCAiI2EzNzFmNyIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgxMzAsIDgwLCAyMjMsIDAuMSkiLCAicmdiYSgxNjMsIDExMywgMjQ3LCAwLjEpIil9OwogICAgICB9CgogICAgICAubWFya2Rvd24tYWxlcnQtY2F1dGlvbiB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2NmMjIyZSIsICIjZjg1MTQ5Iil9OwogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIwNywgMzQsIDQ2LCAwLjEpIiwgInJnYmEoMjQ4LCA4MSwgNzMsIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5tYXJrZG93bi1hbGVydC10aXAgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxYTdmMzciLCAiIzNmYjk1MCIpfTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNiwgMTI3LCA1NSwgMC4xKSIsICJyZ2JhKDQ2LCAxNjAsIDY3LCAwLjEpIil9OwogICAgICB9CgogICAgICAvKiBTeW50YXggaGlnaGxpZ2h0aW5nIGZvciBjb2RlIGJsb2NrcyAqLwogICAgICAuaGxqcy1jb21tZW50LAogICAgICAuaGxqcy1xdW90ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmE3MzdkIiwgIiM4Yjk0OWUiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLXRhZywKICAgICAgLmhsanMtYWRkaXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Q3M2E0OSIsICIjZmY3YjcyIil9OwogICAgICB9CgogICAgICAuaGxqcy1udW1iZXIsCiAgICAgIC5obGpzLXN0cmluZywKICAgICAgLmhsanMtbWV0YSAuaGxqcy1tZXRhLXN0cmluZywKICAgICAgLmhsanMtbGl0ZXJhbCwKICAgICAgLmhsanMtZG9jdGFnLAogICAgICAuaGxqcy1yZWdleHAgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAzMmY2MiIsICIjYTVkNmZmIil9OwogICAgICB9CgogICAgICAuaGxqcy10aXRsZSwKICAgICAgLmhsanMtc2VjdGlvbiwKICAgICAgLmhsanMtbmFtZSwKICAgICAgLmhsanMtc2VsZWN0b3ItaWQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWNsYXNzIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2ZjQyYzEiLCAiI2QyYThmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtYXR0cmlidXRlLAogICAgICAuaGxqcy1hdHRyLAogICAgICAuaGxqcy12YXJpYWJsZSwKICAgICAgLmhsanMtdGVtcGxhdGUtdmFyaWFibGUsCiAgICAgIC5obGpzLWNsYXNzIC5obGpzLXRpdGxlLAogICAgICAuaGxqcy10eXBlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDVjYzUiLCAiIzc5YzBmZiIpfTsKICAgICAgfQoKICAgICAgLmhsanMtc3ltYm9sLAogICAgICAuaGxqcy1idWxsZXQsCiAgICAgIC5obGpzLXN1YnN0LAogICAgICAuaGxqcy1tZXRhLAogICAgICAuaGxqcy1tZXRhIC5obGpzLWtleXdvcmQsCiAgICAgIC5obGpzLXNlbGVjdG9yLWF0dHIsCiAgICAgIC5obGpzLXNlbGVjdG9yLXBzZXVkbywKICAgICAgLmhsanMtbGluayB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTM2MjA5IiwgIiNmZmE2NTciKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWJ1aWx0X2luLAogICAgICAuaGxqcy1kZWxldGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjYjMxZDI4IiwgIiNmZmExOTgiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWZvcm11bGEgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjZmOGZhIiwgIiMxNjFiMjIiKX07CiAgICAgIH0KCiAgICAgIC5obGpzLWVtcGhhc2lzIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5obGpzLXN0cm9uZyB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICAvLyBJTlNUQU5DRQogICAgb3V0bGV0OwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im91dGxldCI+CiAgICAgICAgPGgxPk1hcmtkb3duIFByZXZpZXc8L2gxPgogICAgICAgIDxwPkNvbnRlbnQgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIG1hcmtkb3duIGlzIHBhcnNlZC48L3A+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpIHsKICAgICAgYXdhaXQgc3VwZXIuZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcyk7CiAgICAgIHRoaXMub3V0bGV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5vdXRsZXQiKTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZUh0bWxUZXh0KGh0bWxUZXh0QXJnKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGlmICghdGhpcy5vdXRsZXQpIHsKICAgICAgICB0aGlzLm91dGxldCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIub3V0bGV0Iik7CiAgICAgIH0KICAgICAgdGhpcy5vdXRsZXQuaW5uZXJIVE1MID0gaHRtbFRleHRBcmc7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU4KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzV29ya3NwYWNlTWFya2Rvd25vdXRsZXQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LWxpc3QvZGVlcy1pbnB1dC1saXN0LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jMzcgPSAoKSA9PiBiMmAKICA8ZGVlcy1kZW1vd3JhcHBlcj4KICAgIDxzdHlsZT4KICAgICAgJHtpYAogICAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgICBtYXgtd2lkdGg6IDEyMDBweDsKICAgICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIGRlZXMtcGFuZWw6bGFzdC1jaGlsZCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAwOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDFmcjsKICAgICAgICAgIGdhcDogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDc2OHB4KSB7CiAgICAgICAgICAuZ3JpZC1sYXlvdXQgewogICAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2YzZjRmNjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIGNvbG9yOiAjMzc0MTUxOwogICAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMmMyYzJjOwogICAgICAgICAgICBjb2xvcjogI2U0ZTRlNzsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlZmY2ZmY7CiAgICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICMzYjgyZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgICBjb2xvcjogIzFlNDBhZjsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLmZlYXR1cmUtbm90ZSB7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICMxZTNhNWY7CiAgICAgICAgICAgIGNvbG9yOiAjOTNjNWZkOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgYH0KICAgIDwvc3R5bGU+CiAgICAKICAgIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjEuIEJhc2ljIExpc3QgSW5wdXQifSAuc3VidGl0bGU9JHsiU2ltcGxlIGxpc3QgbWFuYWdlbWVudCB3aXRoIGFkZCwgZWRpdCwgYW5kIGRlbGV0ZSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJTaG9wcGluZyBMaXN0In0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaXRlbSB0byB5b3VyIGxpc3QuLi4ifQogICAgICAgICAgLnZhbHVlPSR7WyJNaWxrIiwgIkJyZWFkIiwgIkVnZ3MiLCAiQ2hlZXNlIl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRG91YmxlLWNsaWNrIHRvIGVkaXQgaXRlbXMsIG9yIHVzZSB0aGUgZWRpdCBidXR0b24ifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg8J+SoSBEb3VibGUtY2xpY2sgYW55IGl0ZW0gdG8gcXVpY2tseSBlZGl0IGl0IGlubGluZQogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gU29ydGFibGUgTGlzdCJ9IC5zdWJ0aXRsZT0keyJEcmFnIGFuZCBkcm9wIHRvIHJlb3JkZXIgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiVGFzayBQcmlvcml0eSJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGEgdGFzay4uLiJ9CiAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJSZXZpZXcgcHVsbCByZXF1ZXN0cyIsCiAgIkZpeCBjcml0aWNhbCBidWciLAogICJVcGRhdGUgZG9jdW1lbnRhdGlvbiIsCiAgIkRlcGxveSB0byBwcm9kdWN0aW9uIiwKICAiVGVhbSBzdGFuZHVwIG1lZXRpbmciCl19CiAgICAgICAgICAuZGVzY3JpcHRpb249JHsiRHJhZyBpdGVtcyB1c2luZyB0aGUgaGFuZGxlIHRvIHJlb3JkZXIgdGhlbSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtbm90ZSI+CiAgICAgICAgICDwn5SEIERyYWcgdGhlIGdyaXAgaGFuZGxlIHRvIHJlb3JkZXIgdGFza3MgYnkgcHJpb3JpdHkKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjMuIFZhbGlkYXRpb24gJiBDb25zdHJhaW50cyJ9IC5zdWJ0aXRsZT0keyJMaXN0cyB3aXRoIG1pbmltdW0vbWF4aW11bSBpdGVtcyBhbmQgZHVwbGljYXRlIHByZXZlbnRpb24ifT4KICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgIC5sYWJlbD0keyJUZWFtIE1lbWJlcnMgKE1pbiAyLCBNYXggNSkifQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIHRlYW0gbWVtYmVyLi4uIn0KICAgICAgICAgICAgLm1pbkl0ZW1zPSR7Mn0KICAgICAgICAgICAgLm1heEl0ZW1zPSR7NX0KICAgICAgICAgICAgLnZhbHVlPSR7WyJBbGljZSIsICJCb2IiXX0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCAyLTUgdGVhbSBtZW1iZXJzIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAubGFiZWw9JHsiVW5pcXVlIFRhZ3MgKE5vIER1cGxpY2F0ZXMpIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCB1bmlxdWUgdGFnLi4uIn0KICAgICAgICAgICAgLmFsbG93RHVwbGljYXRlcz0ke2ZhbHNlfQogICAgICAgICAgICAudmFsdWU9JHtbImZyb250ZW5kIiwgImJhY2tlbmQiLCAiZGF0YWJhc2UiXX0KICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkR1cGxpY2F0ZSBpdGVtcyBhcmUgbm90IGFsbG93ZWQifQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gRGVsZXRlIENvbmZpcm1hdGlvbiJ9IC5zdWJ0aXRsZT0keyJSZXF1aXJlIGNvbmZpcm1hdGlvbiBiZWZvcmUgZGVsZXRpbmcgaXRlbXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAubGFiZWw9JHsiSW1wb3J0YW50IERvY3VtZW50cyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGRvY3VtZW50IG5hbWUuLi4ifQogICAgICAgICAgLmNvbmZpcm1EZWxldGU9JHt0cnVlfQogICAgICAgICAgLnZhbHVlPSR7WwogICJDb250cmFjdF8yMDI0LnBkZiIsCiAgIkZpbmFuY2lhbF9SZXBvcnRfUTMueGxzeCIsCiAgIlByb2plY3RfUHJvcG9zYWwuZG9jeCIsCiAgIk1lZXRpbmdfTm90ZXMudHh0IgpdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkRlbGV0aW9uIHJlcXVpcmVzIGNvbmZpcm1hdGlvbiBmb3Igc2FmZXR5In0KICAgICAgICA+PC9kZWVzLWlucHV0LWxpc3Q+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI1LiBEaXNhYmxlZCBTdGF0ZSJ9IC5zdWJ0aXRsZT0keyJSZWFkLW9ubHkgbGlzdCBkaXNwbGF5In0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlN5c3RlbSBEZWZhdWx0cyJ9CiAgICAgICAgICAudmFsdWU9JHtbIkRlZmF1bHQgU2V0dGluZyAxIiwgIkRlZmF1bHQgU2V0dGluZyAyIiwgIkRlZmF1bHQgU2V0dGluZyAzIl19CiAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlRoZXNlIGl0ZW1zIGNhbm5vdCBiZSBtb2RpZmllZCJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gRm9ybSBJbnRlZ3JhdGlvbiJ9IC5zdWJ0aXRsZT0keyJMaXN0IGlucHV0IHdvcmtpbmcgd2l0aGluIGEgZm9ybSBjb250ZXh0In0+CiAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7IlJlY2lwZSBOYW1lIn0KICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSR7Ik15IEFtYXppbmcgUmVjaXBlIn0KICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgLmtleT0keyJuYW1lIn0KICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1saXN0CiAgICAgICAgICAgICAgLmxhYmVsPSR7IkluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIGluZ3JlZGllbnQuLi4ifQogICAgICAgICAgICAgIC5yZXF1aXJlZD0ke3RydWV9CiAgICAgICAgICAgICAgLm1pbkl0ZW1zPSR7M30KICAgICAgICAgICAgICAua2V5PSR7ImluZ3JlZGllbnRzIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiMiBjdXBzIGZsb3VyIiwKICAiMSBjdXAgc3VnYXIiLAogICIzIGVnZ3MiCl19CiAgICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IkFkZCBhdCBsZWFzdCAzIGluZ3JlZGllbnRzIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgICAKICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIC5sYWJlbD0keyJJbnN0cnVjdGlvbnMifQogICAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBZGQgaW5zdHJ1Y3Rpb24gc3RlcC4uLiJ9CiAgICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgICAgICAubWluSXRlbXM9JHsyfQogICAgICAgICAgICAgIC5rZXk9JHsiaW5zdHJ1Y3Rpb25zIn0KICAgICAgICAgICAgICAuc29ydGFibGU9JHt0cnVlfQogICAgICAgICAgICAgIC52YWx1ZT0ke1sKICAiUHJlaGVhdCBvdmVuIHRvIDM1MFx4QjBGIiwKICAiTWl4IGRyeSBpbmdyZWRpZW50cyIKXX0KICAgICAgICAgICAgICAuZGVzY3JpcHRpb249JHsiQWRkIGNvb2tpbmcgaW5zdHJ1Y3Rpb25zIGluIG9yZGVyIn0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQKICAgICAgICAgICAgLmxhYmVsPSR7Ik5vdGVzIn0KICAgICAgICAgICAgLmlucHV0VHlwZT0keyJ0ZXh0YXJlYSJ9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJBbnkgc3BlY2lhbCBub3RlcyBvciB0aXBzLi4uIn0KICAgICAgICAgICAgLmtleT0keyJub3RlcyJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0IC50ZXh0PSR7IlNhdmUgUmVjaXBlIn0+PC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgIDwvZGVlcy1mb3JtPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJCdWlsZCB5b3VyIG93biBmZWF0dXJlIGxpc3QgYW5kIHNlZSB0aGUgZGF0YSJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1saXN0IgogICAgICAgICAgLmxhYmVsPSR7IlByb2R1Y3QgRmVhdHVyZXMifQogICAgICAgICAgLnBsYWNlaG9sZGVyPSR7IkFkZCBhIGZlYXR1cmUuLi4ifQogICAgICAgICAgLnNvcnRhYmxlPSR7dHJ1ZX0KICAgICAgICAgIC5jb25maXJtRGVsZXRlPSR7ZmFsc2V9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWF4SXRlbXM9JHsxMH0KICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNsaXN0LWpzb24iKTsKICBpZiAocHJldmlldykgewogICAgY29uc3QgZGF0YSA9IHsKICAgICAgaXRlbXM6IGUxMS5kZXRhaWwudmFsdWUsCiAgICAgIGNvdW50OiBlMTEuZGV0YWlsLnZhbHVlLmxlbmd0aCwKICAgICAgdGltZXN0YW1wOiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkKICAgIH07CiAgICBwcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZGF0YSwgbnVsbCwgMik7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtcHJldmlldyIgaWQ9Imxpc3QtanNvbiI+CiAgICAgICAgICB7CiAgICAgICAgICAgICJpdGVtcyI6IFtdLAogICAgICAgICAgICAiY291bnQiOiAwLAogICAgICAgICAgICAidGltZXN0YW1wIjogIiR7KC8qIEBfX1BVUkVfXyAqLyBuZXcgRGF0ZSgpKS50b0lTT1N0cmluZygpfSIKICAgICAgICAgIH0KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLW5vdGUiPgogICAgICAgICAg4pyoIEFkZCwgZWRpdCwgcmVtb3ZlLCBhbmQgcmVvcmRlciBpdGVtcyB0byBzZWUgdGhlIEpTT04gb3V0cHV0IHVwZGF0ZSBpbiByZWFsLXRpbWUKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIEFkdmFuY2VkIENvbmZpZ3VyYXRpb24ifSAuc3VidGl0bGU9JHsiQ29tYmluZSBhbGwgZmVhdHVyZXMgZm9yIGNvbXBsZXggdXNlIGNhc2VzIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgLmxhYmVsPSR7IlByb2plY3QgTWlsZXN0b25lcyJ9CiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiQWRkIG1pbGVzdG9uZS4uLiJ9CiAgICAgICAgICAudmFsdWU9JHtbCiAgIlByb2plY3QgS2lja29mZiAtIFdlZWsgMSIsCiAgIlJlcXVpcmVtZW50cyBHYXRoZXJpbmcgLSBXZWVrIDItMyIsCiAgIkRlc2lnbiBQaGFzZSAtIFdlZWsgNC02IiwKICAiRGV2ZWxvcG1lbnQgU3ByaW50IDEgLSBXZWVrIDctOSIsCiAgIlRlc3RpbmcgJiBRQSAtIFdlZWsgMTAtMTEiLAogICJEZXBsb3ltZW50IC0gV2VlayAxMiIKXX0KICAgICAgICAgIC5zb3J0YWJsZT0ke3RydWV9CiAgICAgICAgICAuY29uZmlybURlbGV0ZT0ke3RydWV9CiAgICAgICAgICAuYWxsb3dEdXBsaWNhdGVzPSR7ZmFsc2V9CiAgICAgICAgICAubWluSXRlbXM9JHszfQogICAgICAgICAgLm1heEl0ZW1zPSR7MTJ9CiAgICAgICAgICAucmVxdWlyZWQ9JHt0cnVlfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7Ik1hbmFnZSBwcm9qZWN0IG1pbGVzdG9uZXMgKDMtMTIgaXRlbXMsIHNvcnRhYmxlLCBubyBkdXBsaWNhdGVzKSJ9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1saXN0PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiOS4gRW1wdHkgU3RhdGUifSAuc3VidGl0bGU9JHsiSG93IHRoZSBjb21wb25lbnQgbG9va3Mgd2l0aCBubyBpdGVtcyJ9PgogICAgICAgIDxkZWVzLWlucHV0LWxpc3QKICAgICAgICAgIC5sYWJlbD0keyJZb3VyIElkZWFzIn0KICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJTaGFyZSB5b3VyIGlkZWFzLi4uIn0KICAgICAgICAgIC52YWx1ZT0ke1tdfQogICAgICAgICAgLmRlc2NyaXB0aW9uPSR7IlN0YXJ0IGFkZGluZyBpdGVtcyB0byBidWlsZCB5b3VyIGxpc3QifQogICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kaXY+CiAgPC9kZWVzLWRlbW93cmFwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtbGlzdC9kZWVzLWlucHV0LWxpc3QuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNTggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczU5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRMaXN0ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1saXN0IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNJbnB1dEJhc2U7CiAgbGV0IF92YWx1ZV9kZWNvcmF0b3JzOwogIGxldCBfdmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF92YWx1ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21heEl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19kZWNvcmF0b3JzOwogIGxldCBfbWluSXRlbXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0R1cGxpY2F0ZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2RlY29yYXRvcnM7CiAgbGV0IF9zb3J0YWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb25maXJtRGVsZXRlX2RlY29yYXRvcnM7CiAgbGV0IF9jb25maXJtRGVsZXRlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY29uZmlybURlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9yczsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2VkaXRpbmdJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZWRpdGluZ1ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ2dlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlckluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ1N0YXJ0WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdDdXJyZW50WV9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ0N1cnJlbnRZX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfdGFyZ2V0SW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXRlbUhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfaXRlbUhlaWdodF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0TGlzdDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9tYXhJdGVtc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21pbkl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWxsb3dEdXBsaWNhdGVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX3NvcnRhYmxlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2NvbmZpcm1EZWxldGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfdmFsaWRhdGlvblRleHRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9lZGl0aW5nSW5kZXhfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnT3ZlckluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9kcmFnQ3VycmVudFlfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3RhcmdldEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfbWF4SXRlbXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWF4SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heEl0ZW1zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1heEl0ZW1zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYXhJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhJdGVtc19pbml0aWFsaXplcnMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9taW5JdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtaW5JdGVtcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWluSXRlbXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1pbkl0ZW1zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21pbkl0ZW1zX2luaXRpYWxpemVycywgX21pbkl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2FsbG93RHVwbGljYXRlc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0R1cGxpY2F0ZXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93RHVwbGljYXRlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5hbGxvd0R1cGxpY2F0ZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RHVwbGljYXRlcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd0R1cGxpY2F0ZXNfaW5pdGlhbGl6ZXJzLCBfYWxsb3dEdXBsaWNhdGVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3NvcnRhYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNvcnRhYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzb3J0YWJsZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zb3J0YWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc29ydGFibGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc29ydGFibGVfaW5pdGlhbGl6ZXJzLCBfc29ydGFibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfY29uZmlybURlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjb25maXJtRGVsZXRlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjb25maXJtRGVsZXRlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNvbmZpcm1EZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNvbmZpcm1EZWxldGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbGlkYXRpb25UZXh0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWxpZGF0aW9uVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWxpZGF0aW9uVGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsaWRhdGlvblRleHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfaW5wdXRWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbnB1dFZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpbnB1dFZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlucHV0VmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlucHV0VmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaW5wdXRWYWx1ZV9pbml0aWFsaXplcnMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ0luZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2VkaXRpbmdWYWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0aW5nVmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVkaXRpbmdWYWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lZGl0aW5nVmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRpbmdWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lZGl0aW5nVmFsdWVfaW5pdGlhbGl6ZXJzLCBfZWRpdGluZ1ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdnZWRJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnZ2VkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdnZWRJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdnZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTgodGhpcywgbnVsbCwgX2RyYWdPdmVySW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZHJhZ092ZXJJbmRleCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnT3ZlckluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5kcmFnT3ZlckluZGV4ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCBfZHJhZ092ZXJJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9kcmFnU3RhcnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdTdGFydFkiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRyYWdTdGFydFkiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZHJhZ1N0YXJ0WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ1N0YXJ0WSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kcmFnU3RhcnRZX2luaXRpYWxpemVycywgX2RyYWdTdGFydFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfZHJhZ0N1cnJlbnRZX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdDdXJyZW50WSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ0N1cnJlbnRZIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdDdXJyZW50WSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ0N1cnJlbnRZID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdDdXJyZW50WV9pbml0aWFsaXplcnMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OCh0aGlzLCBudWxsLCBfdGFyZ2V0SW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGFyZ2V0SW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRhcmdldEluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRhcmdldEluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50YXJnZXRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU4KHRoaXMsIG51bGwsIF9pdGVtSGVpZ2h0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIml0ZW1IZWlnaHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIml0ZW1IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXRlbUhlaWdodCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXRlbUhlaWdodCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pdGVtSGVpZ2h0X2luaXRpYWxpemVycywgX2l0ZW1IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dExpc3QyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzM3OwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJJbnB1dCI7CiAgICAjdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3ZhbHVlX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCB2YWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgIkFkZCBuZXcgaXRlbS4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21heEl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1heEl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIC8vIDAgbWVhbnMgdW5saW1pdGVkCiAgICBzZXQgbWF4SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEl0ZW1zX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9tYXhJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX21pbkl0ZW1zX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IG1pbkl0ZW1zKCkgewogICAgICByZXR1cm4gdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5JdGVtcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWluSXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9taW5JdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgYWxsb3dEdXBsaWNhdGVzKCkgewogICAgICByZXR1cm4gdGhpcy4jYWxsb3dEdXBsaWNhdGVzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEdXBsaWNhdGVzKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd0R1cGxpY2F0ZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzb3J0YWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2FsbG93RHVwbGljYXRlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzb3J0YWJsZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc29ydGFibGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NvcnRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29uZmlybURlbGV0ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX3NvcnRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfY29uZmlybURlbGV0ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgY29uZmlybURlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2NvbmZpcm1EZWxldGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjb25maXJtRGVsZXRlKHZhbHVlMikgewogICAgICB0aGlzLiNjb25maXJtRGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9jb25maXJtRGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZWRpdGluZ0luZGV4X2luaXRpYWxpemVycywgLTEpKTsKICAgIGdldCBlZGl0aW5nSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNlZGl0aW5nSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0aW5nSW5kZXgodmFsdWUyKSB7CiAgICAgIHRoaXMuI2VkaXRpbmdJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRpbmdWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2VkaXRpbmdWYWx1ZV9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgZWRpdGluZ1ZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGluZ1ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZWRpdGluZ1ZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiNlZGl0aW5nVmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnZ2VkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9lZGl0aW5nVmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnZ2VkSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdnZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdnZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdnZWRJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdnZWRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2RyYWdPdmVySW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGRyYWdPdmVySW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnT3ZlckluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ1N0YXJ0WV9pbml0aWFsaXplcnMsIDApKTsKICAgIC8vIEVuaGFuY2VkIGRyYWcgc3RhdGUgZm9yIGludGVyYWN0aXZlIHJlb3JkZXJpbmcKICAgIGdldCBkcmFnU3RhcnRZKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ1N0YXJ0WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdTdGFydFkodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdTdGFydFlfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnQ3VycmVudFlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnU3RhcnRZX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM1OSh0aGlzLCBfZHJhZ0N1cnJlbnRZX2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IGRyYWdDdXJyZW50WSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2RyYWdDdXJyZW50WV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGRyYWdDdXJyZW50WSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ0N1cnJlbnRZX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdGFyZ2V0SW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9kcmFnQ3VycmVudFlfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9pbml0aWFsaXplcnMsIC0xKSk7CiAgICBnZXQgdGFyZ2V0SW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHRhcmdldEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiN0YXJnZXRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF90YXJnZXRJbmRleF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNTkodGhpcywgX2l0ZW1IZWlnaHRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgaXRlbUhlaWdodCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2l0ZW1IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpdGVtSGVpZ2h0KHZhbHVlMikgewogICAgICB0aGlzLiNpdGVtSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyBCb3VuZCBldmVudCBoYW5kbGVycyBmb3IgY2xlYW51cAogICAgYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IChfX3J1bkluaXRpYWxpemVyczU5KHRoaXMsIF9pdGVtSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSBudWxsOwogICAgLy8gU3RvcmUgb3JpZ2luYWwgaXRlbSBwb3NpdGlvbnMgZm9yIGFjY3VyYXRlIGhpdCBkZXRlY3Rpb24gKGJlZm9yZSB0cmFuc2Zvcm1zKQogICAgb3JpZ2luYWxJdGVtUmVjdHMgPSBbXTsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmxpc3QtY29udGFpbmVyOmhvdmVyOm5vdCguZGlzYWJsZWQpIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA3OS44JSkiLCAiaHNsKDAgMCUgMjAuOSUpIil9OwogICAgICB9CgogICAgICAubGlzdC1jb250YWluZXI6Zm9jdXMtd2l0aGluIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUgLyAwLjEpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5saXN0LWNvbnRhaW5lci5kaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zIHsKICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CgogICAgICAubGlzdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogdHJhbnNmb3JtIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjE1cyBlYXNlLCBib3gtc2hhZG93IDAuMTVzIGVhc2U7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47IC8qIFByZXZlbnQgYW5pbWF0aW9uIGZyb20gYWZmZWN0aW5nIHNjcm9sbCBib3VuZHMgKi8KICAgICAgfQoKICAgICAgLmxpc3QtaXRlbTpsYXN0LW9mLXR5cGUgewogICAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICAgIH0KCiAgICAgIC5saXN0LWl0ZW1zOm5vdCguaXMtZHJhZ2dpbmcpIC5saXN0LWl0ZW06aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5Ny41JSkiLCAiaHNsKDAgMCUgNi45JSkiKX07CiAgICAgIH0KCiAgICAgIC8qIERyYWdnaW5nIGl0ZW0gLSBmb2xsb3dzIGN1cnNvciAqLwogICAgICAubGlzdC1pdGVtLmRyYWdnaW5nIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgei1pbmRleDogMTAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5OCUpIiwgImhzbCgyMTUgMjAuMiUgMTIlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMTUpIiwgInJnYmEoMCwgMCwgMCwgMC40KSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjE1cyBlYXNlLCBiYWNrZ3JvdW5kIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC8qIEl0ZW1zIHRoYXQgbmVlZCB0byBtb3ZlIHVwIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLXVwIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoY2FsYygtMSAqIHZhcigtLWl0ZW0taGVpZ2h0LCA0OHB4KSkpOwogICAgICB9CgogICAgICAvKiBJdGVtcyB0aGF0IG5lZWQgdG8gbW92ZSBkb3duIHRvIG1ha2Ugc3BhY2UgKi8KICAgICAgLmxpc3QtaXRlbS5tb3ZlLWRvd24gewogICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSh2YXIoLS1pdGVtLWhlaWdodCwgNDhweCkpOwogICAgICB9CgoKICAgICAgLmRyYWctaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgY3Vyc29yOiBtb3ZlOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNjMuOSUpIiwgImhzbCgwIDAlIDQ1LjElKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBjb2xvciAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuZHJhZy1oYW5kbGU6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRyYWctaGFuZGxlIGRlZXMtaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICB9CgogICAgICAuaXRlbS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KCiAgICAgIC5pdGVtLXRleHQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstd29yZDsKICAgICAgfQoKICAgICAgLml0ZW0tZWRpdC1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiA0cHggOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjIyLjIgNDcuNCUgNTEuMiUpIiwgImhzbCgyMTcuMiA5MS4yJSA1OS44JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLml0ZW0tYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAyOHB4OwogICAgICAgIGhlaWdodDogMjhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQ1LjElKSIsICJoc2woMCAwJSA2My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5zYXZlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uc2F2ZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgxNDIuMSA3Ni4yJSAzNi4zJSAvIDAuMSkiLCAiaHNsKDE0Mi4xIDcwLjYlIDQ1LjMlIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idXR0b24uY2FuY2VsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSA1MC42JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlIC8gMC4xKSIsICJoc2woMCA2Mi44JSA1MC42JSAvIDAuMSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnV0dG9uLmRlbGV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3Mi4yJSA1MC42JSAvIDAuMSkiLCAiaHNsKDAgNjIuOCUgNTAuNiUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWN0aW9uLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNHB4OwogICAgICAgIGhlaWdodDogMTRweDsKICAgICAgfQoKICAgICAgLmFkZC1pdGVtLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3LjUlKSIsICJoc2woMCAwJSA2LjklKSIpfTsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5hZGQtaW5wdXQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLmFkZC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDNweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlIC8gMC4xKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUgLyAwLjEpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICB9CgogICAgICAuYWRkLWlucHV0OmRpc2FibGVkIHsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmFkZC1idXR0b24gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDMycHggMTZweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA2My45JSkiLCAiaHNsKDAgMCUgNDUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC52YWxpZGF0aW9uLW1lc3NhZ2UgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgNzIuMiUgNTAuNiUpIiwgImhzbCgwIDYyLjglIDMwLjYlKSIpfTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbWFyZ2luLXRvcDogNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgIH0KCiAgICAgIC5kZXNjcmlwdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNTYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNTUuMSUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBtYXJnaW4tdG9wOiA2cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CgogICAgICAubGlzdC1pdGVtczo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMjQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLmxpc3QtaXRlbXM6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDM0LjklKSIpfTsKICAgICAgfQoKICAgICAgLyogRGlzYWJsZSB0cmFuc2l0aW9ucyBkdXJpbmcgZHJvcCB0byBwcmV2ZW50IGZsYXNoICovCiAgICAgIC5saXN0LWl0ZW1zLmRyb3BwaW5nIC5saXN0LWl0ZW0gewogICAgICAgIHRyYW5zaXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Imxpc3QtY29udGFpbmVyICR7dGhpcy5kaXNhYmxlZCA/ICJkaXNhYmxlZCIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGlzdC1pdGVtcyI+CiAgICAgICAgICAgICR7dGhpcy52YWx1ZS5sZW5ndGggPiAwID8gdGhpcy52YWx1ZS5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYjJgCiAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgY2xhc3M9Imxpc3QtaXRlbSAke3RoaXMuZHJhZ2dlZEluZGV4ID09PSBpbmRleDIgPyAiZHJhZ2dpbmciIDogIiJ9IgogICAgICAgICAgICAgICAgZHJhZ2dhYmxlPSIke3RoaXMuc29ydGFibGUgJiYgIXRoaXMuZGlzYWJsZWR9IgogICAgICAgICAgICAgICAgQGRyYWdzdGFydD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJhZ1N0YXJ0KGUxMSwgaW5kZXgyKX0KICAgICAgICAgICAgICAgIEBkcmFnZW5kPSR7dGhpcy5oYW5kbGVEcmFnRW5kfQogICAgICAgICAgICAgICAgQGRyYWdvdmVyPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVEcmFnT3ZlcihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICBAZHJvcD0keyhlMTEpID0+IHRoaXMuaGFuZGxlRHJvcChlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHt0aGlzLnNvcnRhYmxlICYmICF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj4KICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpncmlwVmVydGljYWwifT48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Iml0ZW0tY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5lZGl0aW5nSW5kZXggPT09IGluZGV4MiA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgICAgICAgIGNsYXNzPSJpdGVtLWVkaXQtaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRpbmdWYWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuZWRpdGluZ1ZhbHVlID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVFZGl0S2V5RG93bihlMTEsIGluZGV4Mil9CiAgICAgICAgICAgICAgICAgICAgICBAYmx1cj0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0KICAgICAgICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaXRlbS10ZXh0IiBAZGJsY2xpY2s9JHsoKSA9PiAhdGhpcy5kaXNhYmxlZCAmJiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICR7aXRlbX0KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpdGVtLWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAke3RoaXMuZWRpdGluZ0luZGV4ID09PSBpbmRleDIgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIHNhdmUiIEBjbGljaz0keygpID0+IHRoaXMuc2F2ZUVkaXQoaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpjaGVjayJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLmNhbmNlbEVkaXQoKX0+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTp4In0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiBiMmAKICAgICAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnV0dG9uIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnN0YXJ0RWRpdChpbmRleDIpfT4KICAgICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6cGVuY2lsIn0+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnJlbW92ZUl0ZW0oaW5kZXgyKX0+CiAgICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249JHsibHVjaWRlOnRyYXNoMiJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGApIDogYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgICAgTm8gaXRlbXMgYWRkZWQgeWV0CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIAogICAgICAgICAgJHshdGhpcy5kaXNhYmxlZCAmJiAoIXRoaXMubWF4SXRlbXMgfHwgdGhpcy52YWx1ZS5sZW5ndGggPCB0aGlzLm1heEl0ZW1zKSA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhZGQtaXRlbS1jb250YWluZXIiPgogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJhZGQtaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVBZGRLZXlEb3dufQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICAgIDxkZWVzLWJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9ImFkZC1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmFkZEl0ZW19CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5pbnB1dFZhbHVlLnRyaW0oKX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7Imx1Y2lkZTpwbHVzIn0+PC9kZWVzLWljb24+IEFkZAogICAgICAgICAgICAgIDwvZGVlcy1idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCA6ICIifQogICAgICAgIDwvZGl2PgoKICAgICAgICAke3RoaXMudmFsaWRhdGlvblRleHQgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InZhbGlkYXRpb24tbWVzc2FnZSI+JHt0aGlzLnZhbGlkYXRpb25UZXh0fTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgICAKICAgICAgICAke3RoaXMuZGVzY3JpcHRpb24gPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke3RoaXMuZGVzY3JpcHRpb259PC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVJbnB1dChlMTEpIHsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gZTExLnRhcmdldC52YWx1ZTsKICAgIH0KICAgIGhhbmRsZUFkZEtleURvd24oZTExKSB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaW5wdXRWYWx1ZS50cmltKCkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmFkZEl0ZW0oKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlRWRpdEtleURvd24oZTExLCBpbmRleDIpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVFZGl0KGluZGV4Mik7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmNhbmNlbEVkaXQoKTsKICAgICAgfQogICAgfQogICAgYWRkSXRlbSgpIHsKICAgICAgY29uc3QgdHJpbW1lZFZhbHVlID0gdGhpcy5pbnB1dFZhbHVlLnRyaW0oKTsKICAgICAgaWYgKCF0cmltbWVkVmFsdWUpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIXRoaXMuYWxsb3dEdXBsaWNhdGVzICYmIHRoaXMudmFsdWUuaW5jbHVkZXModHJpbW1lZFZhbHVlKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiVGhpcyBpdGVtIGFscmVhZHkgZXhpc3RzIGluIHRoZSBsaXN0IjsKICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHRoaXMudmFsaWRhdGlvblRleHQgPSAiIiwgM2UzKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMubWF4SXRlbXMgJiYgdGhpcy52YWx1ZS5sZW5ndGggPj0gdGhpcy5tYXhJdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgTWF4aW11bSAke3RoaXMubWF4SXRlbXN9IGl0ZW1zIGFsbG93ZWRgOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRyaW1tZWRWYWx1ZV07CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYWRkLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgICB0aGlzLmVtaXRDaGFuZ2UoKTsKICAgIH0KICAgIHN0YXJ0RWRpdChpbmRleDIpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSBpbmRleDI7CiAgICAgIHRoaXMuZWRpdGluZ1ZhbHVlID0gdGhpcy52YWx1ZVtpbmRleDJdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuaXRlbS1lZGl0LWlucHV0Iik7CiAgICAgICAgaWYgKGlucHV0KSB7CiAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgaW5wdXQuc2VsZWN0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIHNhdmVFZGl0KGluZGV4MikgewogICAgICBjb25zdCB0cmltbWVkVmFsdWUgPSB0aGlzLmVkaXRpbmdWYWx1ZS50cmltKCk7CiAgICAgIGlmICghdHJpbW1lZFZhbHVlKSB7CiAgICAgICAgdGhpcy5jYW5jZWxFZGl0KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghdGhpcy5hbGxvd0R1cGxpY2F0ZXMgJiYgdHJpbW1lZFZhbHVlICE9PSB0aGlzLnZhbHVlW2luZGV4Ml0gJiYgdGhpcy52YWx1ZS5pbmNsdWRlcyh0cmltbWVkVmFsdWUpKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJUaGlzIGl0ZW0gYWxyZWFkeSBleGlzdHMgaW4gdGhlIGxpc3QiOwogICAgICAgIHNldFRpbWVvdXQoKCkgPT4gdGhpcy52YWxpZGF0aW9uVGV4dCA9ICIiLCAzZTMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBuZXdWYWx1ZSA9IFsuLi50aGlzLnZhbHVlXTsKICAgICAgbmV3VmFsdWVbaW5kZXgyXSA9IHRyaW1tZWRWYWx1ZTsKICAgICAgdGhpcy52YWx1ZSA9IG5ld1ZhbHVlOwogICAgICB0aGlzLmVkaXRpbmdJbmRleCA9IC0xOwogICAgICB0aGlzLmVkaXRpbmdWYWx1ZSA9ICIiOwogICAgICB0aGlzLnZhbGlkYXRpb25UZXh0ID0gIiI7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgY2FuY2VsRWRpdCgpIHsKICAgICAgdGhpcy5lZGl0aW5nSW5kZXggPSAtMTsKICAgICAgdGhpcy5lZGl0aW5nVmFsdWUgPSAiIjsKICAgIH0KICAgIGFzeW5jIHJlbW92ZUl0ZW0oaW5kZXgyKSB7CiAgICAgIGlmICh0aGlzLmNvbmZpcm1EZWxldGUpIHsKICAgICAgICBjb25zdCBjb25maXJtZWQgPSBhd2FpdCB0aGlzLnNob3dDb25maXJtRGlhbG9nKGBEZWxldGUgIiR7dGhpcy52YWx1ZVtpbmRleDJdfSI/YCk7CiAgICAgICAgaWYgKCFjb25maXJtZWQpCiAgICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy52YWx1ZSA9IHRoaXMudmFsdWUuZmlsdGVyKChfNCwgaTExKSA9PiBpMTEgIT09IGluZGV4Mik7CiAgICAgIHRoaXMuZW1pdENoYW5nZSgpOwogICAgfQogICAgYXN5bmMgc2hvd0NvbmZpcm1EaWFsb2cobWVzc2FnZTIpIHsKICAgICAgcmV0dXJuIGNvbmZpcm0obWVzc2FnZTIpOwogICAgfQogICAgLy8gRHJhZyBhbmQgZHJvcCBoYW5kbGVycyAtIEludGVyYWN0aXZlIGltcGxlbWVudGF0aW9uCiAgICBoYW5kbGVEcmFnU3RhcnQoZTExLCBpbmRleDIpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmRyYWdnZWRJbmRleCA9IGluZGV4MjsKICAgICAgdGhpcy50YXJnZXRJbmRleCA9IGluZGV4MjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5lZmZlY3RBbGxvd2VkID0gIm1vdmUiOwogICAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERhdGEoInRleHQvcGxhaW4iLCBpbmRleDIudG9TdHJpbmcoKSk7CiAgICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICAgIGVtcHR5SW1nLnNyYyA9ICJkYXRhOmltYWdlL2dpZjtiYXNlNjQsUjBsR09EbGhBUUFCQUlBQUFBVUVCQUFBQUN3QUFBQUFBUUFCQUFBQ0FrUUJBRHM9IjsKICAgICAgZTExLmRhdGFUcmFuc2Zlci5zZXREcmFnSW1hZ2UoZW1wdHlJbWcsIDAsIDApOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSBlMTEuY2xpZW50WTsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBjb25zdCBhbGxJdGVtcyA9IEFycmF5LmZyb20obGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIikgfHwgW10pOwogICAgICBpZiAoYWxsSXRlbXNbaW5kZXgyXSkgewogICAgICAgIHRoaXMuaXRlbUhlaWdodCA9IGFsbEl0ZW1zW2luZGV4Ml0ub2Zmc2V0SGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMub3JpZ2luYWxJdGVtUmVjdHMgPSBhbGxJdGVtcy5tYXAoKGl0ZW0pID0+IGl0ZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkpOwogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImlzLWRyYWdnaW5nIik7CiAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3ZlciA9IHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIuYmluZCh0aGlzKTsKICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQgPSB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQuYmluZCh0aGlzKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCB0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgfQogICAgaGFuZGxlR2xvYmFsRHJhZ092ZXIoZTExKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5kcmFnZ2VkSW5kZXggPT09IC0xKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5kcmFnQ3VycmVudFkgPSBlMTEuY2xpZW50WTsKICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIubGlzdC1pdGVtcyIpOwogICAgICBpZiAoIWxpc3RJdGVtcykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGl0ZW1zID0gQXJyYXkuZnJvbShsaXN0SXRlbXMucXVlcnlTZWxlY3RvckFsbCgiLmxpc3QtaXRlbSIpKTsKICAgICAgY29uc3QgZHJhZ2dlZEVsZW1lbnQgPSBpdGVtc1t0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBkZWx0YVkgPSB0aGlzLmRyYWdDdXJyZW50WSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNmb3JtID0gYHRyYW5zbGF0ZVkoJHtkZWx0YVl9cHgpYDsKICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgaWYgKCFkcmFnZ2VkUmVjdCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRDZW50ZXIgPSBkcmFnZ2VkUmVjdC50b3AgKyBkcmFnZ2VkUmVjdC5oZWlnaHQgLyAyICsgZGVsdGFZOwogICAgICBsZXQgbmV3VGFyZ2V0SW5kZXggPSB0aGlzLmRyYWdnZWRJbmRleDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgaXRlbXMubGVuZ3RoOyBpMTErKykgewogICAgICAgIGlmIChpMTEgPT09IHRoaXMuZHJhZ2dlZEluZGV4KQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbaTExXTsKICAgICAgICBpZiAoIXJlY3QpCiAgICAgICAgICBjb250aW51ZTsKICAgICAgICBsZXQgaXRlbUNlbnRlciA9IHJlY3QudG9wICsgcmVjdC5oZWlnaHQgLyAyOwogICAgICAgIGlmIChpdGVtc1tpMTFdLmNsYXNzTGlzdC5jb250YWlucygibW92ZS11cCIpKSB7CiAgICAgICAgICBpdGVtQ2VudGVyIC09IHRoaXMuaXRlbUhlaWdodDsKICAgICAgICB9IGVsc2UgaWYgKGl0ZW1zW2kxMV0uY2xhc3NMaXN0LmNvbnRhaW5zKCJtb3ZlLWRvd24iKSkgewogICAgICAgICAgaXRlbUNlbnRlciArPSB0aGlzLml0ZW1IZWlnaHQ7CiAgICAgICAgfQogICAgICAgIGlmIChkcmFnZ2VkQ2VudGVyIDwgaXRlbUNlbnRlciAmJiBpMTEgPCB0aGlzLmRyYWdnZWRJbmRleCkgewogICAgICAgICAgbmV3VGFyZ2V0SW5kZXggPSBpMTE7CiAgICAgICAgICBicmVhazsKICAgICAgICB9IGVsc2UgaWYgKGRyYWdnZWRDZW50ZXIgPiBpdGVtQ2VudGVyICYmIGkxMSA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBuZXdUYXJnZXRJbmRleCA9IGkxMTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKG5ld1RhcmdldEluZGV4ICE9PSB0aGlzLnRhcmdldEluZGV4KSB7CiAgICAgICAgdGhpcy50YXJnZXRJbmRleCA9IG5ld1RhcmdldEluZGV4OwogICAgICAgIHRoaXMudXBkYXRlSXRlbVBvc2l0aW9ucyhpdGVtcyk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZUl0ZW1Qb3NpdGlvbnMoaXRlbXMpIHsKICAgICAgY29uc3QgZHJhZ2dlZElkeCA9IHRoaXMuZHJhZ2dlZEluZGV4OwogICAgICBjb25zdCB0YXJnZXRJZHggPSB0aGlzLnRhcmdldEluZGV4OwogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGlmIChsaXN0SXRlbXMpIHsKICAgICAgICBsaXN0SXRlbXMuc3R5bGUuc2V0UHJvcGVydHkoIi0taXRlbS1oZWlnaHQiLCBgJHt0aGlzLml0ZW1IZWlnaHR9cHhgKTsKICAgICAgfQogICAgICBpdGVtcy5mb3JFYWNoKChpdGVtLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSBkcmFnZ2VkSWR4KQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGl0ZW0uY2xhc3NMaXN0LnJlbW92ZSgibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgICBpdGVtLnN0eWxlLnNldFByb3BlcnR5KCItLWl0ZW0taGVpZ2h0IiwgYCR7dGhpcy5pdGVtSGVpZ2h0fXB4YCk7CiAgICAgICAgaWYgKGRyYWdnZWRJZHggPCB0YXJnZXRJZHgpIHsKICAgICAgICAgIGlmIChpMTEgPiBkcmFnZ2VkSWR4ICYmIGkxMSA8PSB0YXJnZXRJZHgpIHsKICAgICAgICAgICAgaXRlbS5jbGFzc0xpc3QuYWRkKCJtb3ZlLXVwIik7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSWR4ID4gdGFyZ2V0SWR4KSB7CiAgICAgICAgICBpZiAoaTExID49IHRhcmdldElkeCAmJiBpMTEgPCBkcmFnZ2VkSWR4KSB7CiAgICAgICAgICAgIGl0ZW0uY2xhc3NMaXN0LmFkZCgibW92ZS1kb3duIik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGhhbmRsZUdsb2JhbERyYWdFbmQoKSB7CiAgICAgIGlmICh0aGlzLmJvdW5kSGFuZGxlR2xvYmFsRHJhZ092ZXIpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnT3Zlcik7CiAgICAgICAgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdPdmVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpIHsKICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5ib3VuZEhhbmRsZUdsb2JhbERyYWdFbmQpOwogICAgICAgIHRoaXMuYm91bmRIYW5kbGVHbG9iYWxEcmFnRW5kID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBsaXN0SXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik7CiAgICAgIGNvbnN0IGl0ZW1zID0gbGlzdEl0ZW1zPy5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gaXRlbXM/Llt0aGlzLmRyYWdnZWRJbmRleF07CiAgICAgIGlmICh0aGlzLmRyYWdnZWRJbmRleCA9PT0gLTEgfHwgdGhpcy50YXJnZXRJbmRleCA9PT0gLTEgfHwgdGhpcy5kcmFnZ2VkSW5kZXggPT09IHRoaXMudGFyZ2V0SW5kZXgpIHsKICAgICAgICBpZiAoZHJhZ2dlZEVsZW1lbnQgJiYgdGhpcy5kcmFnZ2VkSW5kZXggIT09IC0xKSB7CiAgICAgICAgICBkcmFnZ2VkRWxlbWVudC5zdHlsZS50cmFuc2l0aW9uID0gInRyYW5zZm9ybSAwLjE1cyBlYXNlIjsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDApIjsKICAgICAgICAgIGxldCBoYW5kbGVkMiA9IGZhbHNlOwogICAgICAgICAgY29uc3Qgb25SZXR1cm4gPSAoKSA9PiB7CiAgICAgICAgICAgIGlmIChoYW5kbGVkMikKICAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgICAgIGhhbmRsZWQyID0gdHJ1ZTsKICAgICAgICAgICAgZHJhZ2dlZEVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uUmV0dXJuKTsKICAgICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgICAgfTsKICAgICAgICAgIGRyYWdnZWRFbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoInRyYW5zaXRpb25lbmQiLCBvblJldHVybiwgeyBvbmNlOiB0cnVlIH0pOwogICAgICAgICAgc2V0VGltZW91dChvblJldHVybiwgMjAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZHJhZ2dlZFJlY3QgPSB0aGlzLm9yaWdpbmFsSXRlbVJlY3RzW3RoaXMuZHJhZ2dlZEluZGV4XTsKICAgICAgY29uc3QgdGFyZ2V0UmVjdCA9IHRoaXMub3JpZ2luYWxJdGVtUmVjdHNbdGhpcy50YXJnZXRJbmRleF07CiAgICAgIGlmICghZHJhZ2dlZFJlY3QgfHwgIXRhcmdldFJlY3QgfHwgIWRyYWdnZWRFbGVtZW50KSB7CiAgICAgICAgdGhpcy5jbGVhbnVwRHJhZ1N0YXRlKGxpc3RJdGVtcywgaXRlbXMpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBsZXQgZmluYWxZOwogICAgICBpZiAodGhpcy50YXJnZXRJbmRleCA+IHRoaXMuZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC5ib3R0b20gLSBkcmFnZ2VkUmVjdC5ib3R0b207CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZmluYWxZID0gdGFyZ2V0UmVjdC50b3AgLSBkcmFnZ2VkUmVjdC50b3A7CiAgICAgIH0KICAgICAgZHJhZ2dlZEVsZW1lbnQuc3R5bGUudHJhbnNpdGlvbiA9ICJ0cmFuc2Zvcm0gMC4xNXMgZWFzZSI7CiAgICAgIGRyYWdnZWRFbGVtZW50LnN0eWxlLnRyYW5zZm9ybSA9IGB0cmFuc2xhdGVZKCR7ZmluYWxZfXB4KWA7CiAgICAgIGxldCBoYW5kbGVkID0gZmFsc2U7CiAgICAgIGNvbnN0IG9uVHJhbnNpdGlvbkVuZCA9ICgpID0+IHsKICAgICAgICBpZiAoaGFuZGxlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICBoYW5kbGVkID0gdHJ1ZTsKICAgICAgICBkcmFnZ2VkRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJ0cmFuc2l0aW9uZW5kIiwgb25UcmFuc2l0aW9uRW5kKTsKICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgICAgdm9pZCBsaXN0SXRlbXM/Lm9mZnNldEhlaWdodDsKICAgICAgICBpdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgICAgaXRlbS5zdHlsZS5yZW1vdmVQcm9wZXJ0eSgidHJhbnNmb3JtIik7CiAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgbmV3VmFsdWUgPSBbLi4udGhpcy52YWx1ZV07CiAgICAgICAgY29uc3QgW2RyYWdnZWRJdGVtXSA9IG5ld1ZhbHVlLnNwbGljZSh0aGlzLmRyYWdnZWRJbmRleCwgMSk7CiAgICAgICAgbmV3VmFsdWUuc3BsaWNlKHRoaXMudGFyZ2V0SW5kZXgsIDAsIGRyYWdnZWRJdGVtKTsKICAgICAgICB0aGlzLnZhbHVlID0gbmV3VmFsdWU7CiAgICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICAgICAgdGhpcy5kcmFnZ2VkSW5kZXggPSAtMTsKICAgICAgICB0aGlzLmRyYWdPdmVySW5kZXggPSAtMTsKICAgICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgICAgdGhpcy5kcmFnU3RhcnRZID0gMDsKICAgICAgICB0aGlzLmRyYWdDdXJyZW50WSA9IDA7CiAgICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB7CiAgICAgICAgICBjb25zdCBmcmVzaEl0ZW1zID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIubGlzdC1pdGVtIik7CiAgICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICAgIGl0ZW0uc3R5bGUudHJhbnNpdGlvbiA9ICJub25lIjsKICAgICAgICAgIH0pOwogICAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgIGZyZXNoSXRlbXM/LmZvckVhY2goKGl0ZW0pID0+IHsKICAgICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5yZW1vdmUoImRyb3BwaW5nIiwgImlzLWRyYWdnaW5nIik7CiAgICAgICAgICB9KTsKICAgICAgICB9KTsKICAgICAgfTsKICAgICAgZHJhZ2dlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigidHJhbnNpdGlvbmVuZCIsIG9uVHJhbnNpdGlvbkVuZCwgeyBvbmNlOiB0cnVlIH0pOwogICAgICBzZXRUaW1lb3V0KG9uVHJhbnNpdGlvbkVuZCwgMjAwKTsKICAgIH0KICAgIGNsZWFudXBEcmFnU3RhdGUobGlzdEl0ZW1zLCBpdGVtcykgewogICAgICBsaXN0SXRlbXM/LmNsYXNzTGlzdC5hZGQoImRyb3BwaW5nIik7CiAgICAgIHZvaWQgbGlzdEl0ZW1zPy5vZmZzZXRIZWlnaHQ7CiAgICAgIGl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgaXRlbS5jbGFzc0xpc3QucmVtb3ZlKCJtb3ZlLXVwIiwgIm1vdmUtZG93biIsICJkcmFnZ2luZyIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgICAgIGl0ZW0uc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zaXRpb24iKTsKICAgICAgfSk7CiAgICAgIHRoaXMuZHJhZ2dlZEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ092ZXJJbmRleCA9IC0xOwogICAgICB0aGlzLnRhcmdldEluZGV4ID0gLTE7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IDA7CiAgICAgIHRoaXMuZHJhZ0N1cnJlbnRZID0gMDsKICAgICAgdGhpcy5vcmlnaW5hbEl0ZW1SZWN0cyA9IFtdOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIGNvbnN0IGZyZXNoSXRlbXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5saXN0LWl0ZW0iKTsKICAgICAgICBmcmVzaEl0ZW1zPy5mb3JFYWNoKChpdGVtKSA9PiB7CiAgICAgICAgICBpdGVtLnN0eWxlLnRyYW5zaXRpb24gPSAibm9uZSI7CiAgICAgICAgfSk7CiAgICAgICAgdm9pZCB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5saXN0LWl0ZW1zIik/Lm9mZnNldEhlaWdodDsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgZnJlc2hJdGVtcz8uZm9yRWFjaCgoaXRlbSkgPT4gewogICAgICAgICAgICBpdGVtLnN0eWxlLnJlbW92ZVByb3BlcnR5KCJ0cmFuc2l0aW9uIik7CiAgICAgICAgICB9KTsKICAgICAgICAgIGxpc3RJdGVtcz8uY2xhc3NMaXN0LnJlbW92ZSgiZHJvcHBpbmciLCAiaXMtZHJhZ2dpbmciKTsKICAgICAgICB9KTsKICAgICAgfSk7CiAgICB9CiAgICBoYW5kbGVEcmFnRW5kKCkgewogICAgICB0aGlzLmhhbmRsZUdsb2JhbERyYWdFbmQoKTsKICAgIH0KICAgIGhhbmRsZURyYWdPdmVyKGUxMSwgaW5kZXgyKSB7CiAgICAgIGlmICghdGhpcy5zb3J0YWJsZSB8fCB0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgIH0KICAgIGhhbmRsZURyb3AoZTExLCBkcm9wSW5kZXgpIHsKICAgICAgaWYgKCF0aGlzLnNvcnRhYmxlIHx8IHRoaXMuZGlzYWJsZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIH0KICAgIGVtaXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcyk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMiB8fCBbXTsKICAgIH0KICAgIGFzeW5jIHZhbGlkYXRlKCkgewogICAgICBpZiAodGhpcy5yZXF1aXJlZCAmJiAoIXRoaXMudmFsdWUgfHwgdGhpcy52YWx1ZS5sZW5ndGggPT09IDApKSB7CiAgICAgICAgdGhpcy52YWxpZGF0aW9uVGV4dCA9ICJBdCBsZWFzdCBvbmUgaXRlbSBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmICh0aGlzLm1pbkl0ZW1zICYmIHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5taW5JdGVtcykgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSBgQXQgbGVhc3QgJHt0aGlzLm1pbkl0ZW1zfSBpdGVtcyByZXF1aXJlZGA7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczU5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRMaXN0MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzM4ID0gKCkgPT4gYjJgCiAgPGRlZXMtZGVtb3dyYXBwZXI+CiAgICA8c3R5bGU+CiAgICAgICR7aWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgfQogICAgPC9zdHlsZT4KICAgIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gQmFzaWMgUmljaCBUZXh0IEVkaXRvciJ9IC5zdWJ0aXRsZT0keyJBIGZ1bGwtZmVhdHVyZWQgcmljaCB0ZXh0IGVkaXRvciB3aXRoIGZvcm1hdHRpbmcgdG9vbGJhciJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IkFydGljbGUgQ29udGVudCJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMT5XZWxjb21lIHRvIHRoZSBSaWNoIFRleHQgRWRpdG9yITwvaDE+PHA+VGhpcyBpcyBhIGZlYXR1cmUtcmljaCBlZGl0b3IgYnVpbHQgd2l0aCBUaXBUYXAuIFlvdSBjYW46PC9wPjx1bD48bGk+PHN0cm9uZz5Gb3JtYXQgdGV4dDwvc3Ryb25nPiB3aXRoIDxlbT52YXJpb3VzPC9lbT4gPHU+c3R5bGVzPC91PjwvbGk+PGxpPkNyZWF0ZSBkaWZmZXJlbnQgaGVhZGluZyBsZXZlbHM8L2xpPjxsaT5BZGQgPGEgaHJlZj0iaHR0cHM6Ly9leGFtcGxlLmNvbSI+bGlua3M8L2E+IHRvIGV4dGVybmFsIHJlc291cmNlczwvbGk+PGxpPldyaXRlIDxjb2RlPmlubGluZSBjb2RlPC9jb2RlPiBvciBjb2RlIGJsb2NrczwvbGk+PC91bD48YmxvY2txdW90ZT48cD5Vc2UgdGhlIHRvb2xiYXIgYWJvdmUgdG8gZXhwbG9yZSBhbGwgdGhlIGZvcm1hdHRpbmcgb3B0aW9ucyBhdmFpbGFibGUhPC9wPjwvYmxvY2txdW90ZT48cD5TdGFydCB0eXBpbmcgdG8gc2VlIHRoZSBtYWdpYyBoYXBwZW4uLi48L3A+J30KICAgICAgICAgIC5kZXNjcmlwdGlvbj0keyJVc2UgdGhlIHRvb2xiYXIgdG8gZm9ybWF0IHlvdXIgY29udGVudCB3aXRoIGhlYWRpbmdzLCBsaXN0cywgbGlua3MsIGFuZCBtb3JlIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMi4gV2l0aCBQbGFjZWhvbGRlciJ9IC5zdWJ0aXRsZT0keyJFbXB0eSBlZGl0b3Igd2l0aCBwbGFjZWhvbGRlciB0ZXh0In0+CiAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAubGFiZWw9JHsiQmxvZyBQb3N0In0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiU3RhcnQgd3JpdGluZyB5b3VyIGJsb2cgcG9zdCBoZXJlLi4uIn0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMy4gRGlmZmVyZW50IEhlaWdodHMifSAuc3VidGl0bGU9JHsiRWRpdG9ycyB3aXRoIGRpZmZlcmVudCBtaW5pbXVtIGhlaWdodHMgZm9yIHZhcmlvdXMgdXNlIGNhc2VzIn0+CiAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPgogICAgICAgICAgPGRlZXMtaW5wdXQtcmljaHRleHQgCiAgICAgICAgICAgIC5sYWJlbD0keyJTaG9ydCBOb3RlIn0gCiAgICAgICAgICAgIC5taW5IZWlnaHQ9JHsxNTB9CiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0keyJRdWljayBub3RlLi4uIn0KICAgICAgICAgICAgLnNob3dXb3JkQ291bnQ9JHtmYWxzZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgICAubGFiZWw9JHsiRXh0ZW5kZWQgQ29udGVudCJ9IAogICAgICAgICAgICAubWluSGVpZ2h0PSR7MzAwfQogICAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiV3JpdGUgeW91ciBleHRlbmRlZCBjb250ZW50IGhlcmUuLi4ifQogICAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gQ29kZSBFeGFtcGxlcyJ9IC5zdWJ0aXRsZT0keyJFZGl0b3IgcHJlLWZpbGxlZCB3aXRoIGNvZGUgZXhhbXBsZXMifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIC5sYWJlbD0keyJUZWNobmljYWwgRG9jdW1lbnRhdGlvbiJ9IAogICAgICAgICAgLnZhbHVlPSR7JzxoMj5JbnN0YWxsYXRpb24gR3VpZGU8L2gyPjxwPlRvIGluc3RhbGwgdGhlIHBhY2thZ2UsIHJ1biB0aGUgZm9sbG93aW5nIGNvbW1hbmQ6PC9wPjxwcmU+PGNvZGU+bnBtIGluc3RhbGwgQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nPC9jb2RlPjwvcHJlPjxwPlRoZW4gaW1wb3J0IHRoZSBjb21wb25lbnQgaW4geW91ciBUeXBlU2NyaXB0IGZpbGU6PC9wPjxwcmU+PGNvZGU+aW1wb3J0IHsgRGVlc0lucHV0UmljaHRleHQgfSBmcm9tICJAZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2ciOzwvY29kZT48L3ByZT48cD5Zb3UgY2FuIG5vdyB1c2UgdGhlIDxjb2RlPiZsdDtkZWVzLWlucHV0LXJpY2h0ZXh0Jmd0OzwvY29kZT4gZWxlbWVudCBpbiB5b3VyIHRlbXBsYXRlcy48L3A+J30KICAgICAgICAgIC5taW5IZWlnaHQ9JHsyNTB9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgPjwvZGVlcy1pbnB1dC1yaWNodGV4dD4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIERpc2FibGVkIFN0YXRlIn0gLnN1YnRpdGxlPSR7IlJlYWQtb25seSByaWNoIHRleHQgY29udGVudCJ9PgogICAgICAgIDxkZWVzLWlucHV0LXJpY2h0ZXh0IAogICAgICAgICAgLmxhYmVsPSR7IlB1Ymxpc2hlZCBBcnRpY2xlIChSZWFkIE9ubHkpIn0gCiAgICAgICAgICAudmFsdWU9JHsnPGgyPlRoZSBGdXR1cmUgb2YgV2ViIENvbXBvbmVudHM8L2gyPjxwPldlYiBDb21wb25lbnRzIGhhdmUgcmV2b2x1dGlvbml6ZWQgaG93IHdlIGJ1aWxkIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zLi4uPC9wPjxibG9ja3F1b3RlPjxwPiJUaGUgZnV0dXJlIG9mIHdlYiBkZXZlbG9wbWVudCBsaWVzIGluIHJldXNhYmxlLCBlbmNhcHN1bGF0ZWQgY29tcG9uZW50cy4iPC9wPjwvYmxvY2txdW90ZT4nfQogICAgICAgICAgLmRpc2FibGVkPSR7dHJ1ZX0KICAgICAgICAgIC5zaG93V29yZENvdW50PSR7dHJ1ZX0KICAgICAgICA+PC9kZWVzLWlucHV0LXJpY2h0ZXh0PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICAgIAogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNi4gSW50ZXJhY3RpdmUgRGVtbyJ9IC5zdWJ0aXRsZT0keyJUeXBlIGluIHRoZSBlZGl0b3IgYmVsb3cgYW5kIHNlZSB0aGUgSFRNTCBvdXRwdXQifT4KICAgICAgICA8ZGVlcy1pbnB1dC1yaWNodGV4dCAKICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS1lZGl0b3IiCiAgICAgICAgICAubGFiZWw9JHsiVHJ5IGl0IHlvdXJzZWxmIn0gCiAgICAgICAgICAucGxhY2Vob2xkZXI9JHsiVHlwZSBzb21ldGhpbmcgaGVyZS4uLiJ9CiAgICAgICAgICAuc2hvd1dvcmRDb3VudD0ke3RydWV9CiAgICAgICAgICBAY2hhbmdlPSR7KGUxMSkgPT4gewogIGNvbnN0IG91dHB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNvdXRwdXQtcHJldmlldyIpOwogIGlmIChvdXRwdXQpIHsKICAgIG91dHB1dC50ZXh0Q29udGVudCA9IGUxMS5kZXRhaWwudmFsdWU7CiAgfQp9fQogICAgICAgID48L2RlZXMtaW5wdXQtcmljaHRleHQ+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGlkPSJvdXRwdXQtcHJldmlldyI+CiAgICAgICAgICA8ZW0+SFRNTCBvdXRwdXQgd2lsbCBhcHBlYXIgaGVyZS4uLjwvZW0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXJpY2h0ZXh0L3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgcmljaHRleHRTdHlsZXMgPSBbCiAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZvbnQtZmFtaWx5OiBJbnRlciwgLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5pbnB1dC13cmFwcGVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5sYWJlbCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgbWluLWhlaWdodDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjIwMHB4IiwgIjIwMHB4Iil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgOSUpIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250YWluZXI6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGFpbmVyLmZvY3VzZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci10b29sYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxMCA0MCUgOTYuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA0Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA2NS4xJSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC50b29sYmFyLWJ1dHRvbiBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxNnB4OwogICAgICAgIGhlaWdodDogMTZweDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAudG9vbGJhci1idXR0b24uYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgfQoKICAgICAgLnRvb2xiYXItYnV0dG9uOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLnRvb2xiYXItZGl2aWRlciB7CiAgICAgICAgd2lkdGg6IDFweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBtaW4taGVpZ2h0OiB2YXIoLS1taW4taGVpZ2h0LCAyMDBweCk7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgbWluLWhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwIHsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcDpmaXJzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBwOmxhc3QtY2hpbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgaDEgewogICAgICAgIGZvbnQtc2l6ZTogMmVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgyIHsKICAgICAgICBmb250LXNpemU6IDEuNWVtOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMWVtIDAgMC41ZW0gMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGgzIHsKICAgICAgICBmb250LXNpemU6IDEuMjVlbTsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDFlbSAwIDAuNWVtIDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciB1bCwKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBvbCB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxLjVlbTsKICAgICAgICBtYXJnaW46IDAuNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgbGkgewogICAgICAgIG1hcmdpbjogMC4yNWVtIDA7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgYmxvY2txdW90ZSB7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBhZGRpbmc6IDAuMmVtIDAuNGVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAnSW50ZWwgT25lIE1vbm8nLCAnRmlyYSBDb2RlJywgJ1NGIE1vbm8nLCBNb25hY28sICdDYXNjYWRpYSBDb2RlJywgJ1JvYm90byBNb25vJywgQ29uc29sYXMsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5My45JSkiKX07CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk4JSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIHBhZGRpbmc6IDFlbTsKICAgICAgICBtYXJnaW46IDFlbSAwOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgIH0KCiAgICAgIC5lZGl0b3ItY29udGVudCAuUHJvc2VNaXJyb3IgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiAwOwogICAgICB9CgogICAgICAuZWRpdG9yLWNvbnRlbnQgLlByb3NlTWlycm9yIGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMi4yIDQ3LjQlIDUxLjIlKSIsICJoc2woMjE3LjIgOTEuMiUgNTkuOCUpIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmVkaXRvci1jb250ZW50IC5Qcm9zZU1pcnJvciBhOmhvdmVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA0MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDY5LjglKSIpfTsKICAgICAgfQoKICAgICAgLmVkaXRvci1mb290ZXIgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjEwIDQwJSA5Ni4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjQgMTYuMyUgNDYuOSUpIiwgImhzbCgyMTUgMjAuMiUgNjUuMSUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC53b3JkLWNvdW50IHsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQuc2hvdyB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0IGlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDMuOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUgLyAwLjA1KSIsICJoc2woMCAwJSA5OCUgLyAwLjA1KSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgwIDAlIDklKSIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAubGluay1pbnB1dC1idXR0b25zIGJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk1LjElKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTUlKSIpfTsKICAgICAgfQoKICAgICAgLmxpbmstaW5wdXQtYnV0dG9ucyBidXR0b24ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5OCUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOSUpIiwgImhzbCgwIDAlIDk4JSkiKX07CiAgICAgIH0KCiAgICAgIC5saW5rLWlucHV0LWJ1dHRvbnMgYnV0dG9uLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxNSUpIiwgImhzbCgwIDAlIDkzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBtYXJnaW4tdG9wOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS40IDE2LjMlIDQ2LjklKSIsICJoc2woMjE1IDIwLjIlIDY1LjElKSIpfTsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICB9CgogICAgICA6aG9zdChbZGlzYWJsZWRdKSAuZWRpdG9yLWNvbnRhaW5lciB7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIDpob3N0KFtkaXNhYmxlZF0pIC50b29sYmFyLWJ1dHRvbiwKICAgICAgOmhvc3QoW2Rpc2FibGVkXSkgLmVkaXRvci1jb250ZW50IHsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQogICAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtcmljaHRleHQvdGVtcGxhdGUuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHJlbmRlclJpY2h0ZXh0ID0gKGNvbXBvbmVudCkgPT4gewogIHJldHVybiBiMmAKICAgICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAgICR7Y29tcG9uZW50LmxhYmVsID8gYjJgPGxhYmVsIGNsYXNzPSJsYWJlbCI+JHtjb21wb25lbnQubGFiZWx9PC9sYWJlbD5gIDogIiJ9CiAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItY29udGFpbmVyICR7Y29tcG9uZW50LmVkaXRvcj8uaXNGb2N1c2VkID8gImZvY3VzZWQiIDogIiJ9IiBzdHlsZT0iLS1taW4taGVpZ2h0OiAke2NvbXBvbmVudC5taW5IZWlnaHR9cHgiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJlZGl0b3ItdG9vbGJhciI+CiAgICAgICAgICAgICAgJHtjb21wb25lbnQucmVuZGVyVG9vbGJhcigpfQogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmstaW5wdXQgJHtjb21wb25lbnQuc2hvd0xpbmtJbnB1dCA/ICJzaG93IiA6ICIifSI+CiAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiBwbGFjZWhvbGRlcj0iRW50ZXIgVVJMLi4uIiBAa2V5ZG93bj0ke2NvbXBvbmVudC5oYW5kbGVMaW5rSW5wdXRLZXlkb3dufSAvPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGluay1pbnB1dC1idXR0b25zIj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0icHJpbWFyeSIgQGNsaWNrPSR7Y29tcG9uZW50LnNhdmVMaW5rfT5TYXZlPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gQGNsaWNrPSR7Y29tcG9uZW50LnJlbW92ZUxpbmt9PlJlbW92ZTwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uIEBjbGljaz0ke2NvbXBvbmVudC5oaWRlTGlua0lucHV0fT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZWRpdG9yLWNvbnRlbnQiPjwvZGl2PgogICAgICAgICAgICAke2NvbXBvbmVudC5zaG93V29yZENvdW50ID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImVkaXRvci1mb290ZXIiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ3b3JkLWNvdW50Ij4ke2NvbXBvbmVudC53b3JkQ291bnR9IHdvcmQke2NvbXBvbmVudC53b3JkQ291bnQgIT09IDEgPyAicyIgOiAiIn08L3NwYW4+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgICAke2NvbXBvbmVudC5kZXNjcmlwdGlvbiA/IGIyYDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4ke2NvbXBvbmVudC5kZXNjcmlwdGlvbn08L2Rpdj5gIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC1yaWNodGV4dC9jb21wb25lbnQuanMKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9zZXJ2aWNlcygpOwp2YXIgX19lc0RlY29yYXRlNTkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczYwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzSW5wdXRSaWNodGV4dCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtcmljaHRleHQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0lucHV0QmFzZTsKICBsZXQgX3ZhbHVlX2RlY29yYXRvcnM7CiAgbGV0IF92YWx1ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd1dvcmRDb3VudF9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1dvcmRDb3VudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21pbkhlaWdodF9kZWNvcmF0b3JzOwogIGxldCBfbWluSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWluSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93TGlua0lucHV0X2RlY29yYXRvcnM7CiAgbGV0IF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0xpbmtJbnB1dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd29yZENvdW50X2RlY29yYXRvcnM7CiAgbGV0IF93b3JkQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UmljaHRleHQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9taW5IZWlnaHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX3Nob3dMaW5rSW5wdXRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3dvcmRDb3VudF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfdmFsdWVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZhbHVlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZhbHVlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52YWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92YWx1ZV9pbml0aWFsaXplcnMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlciIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGxhY2Vob2xkZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGxhY2Vob2xkZXIsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNTkodGhpcywgbnVsbCwgX3Nob3dXb3JkQ291bnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1dvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1dvcmRDb3VudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93V29yZENvdW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93V29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dXb3JkQ291bnRfaW5pdGlhbGl6ZXJzLCBfc2hvd1dvcmRDb3VudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9taW5IZWlnaHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWluSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtaW5IZWlnaHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWluSGVpZ2h0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5taW5IZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWluSGVpZ2h0X2luaXRpYWxpemVycywgX21pbkhlaWdodF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTU5KHRoaXMsIG51bGwsIF9zaG93TGlua0lucHV0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dMaW5rSW5wdXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dMaW5rSW5wdXQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2hvd0xpbmtJbnB1dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd0xpbmtJbnB1dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgX3Nob3dMaW5rSW5wdXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OSh0aGlzLCBudWxsLCBfd29yZENvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndvcmRDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAid29yZENvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndvcmRDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud29yZENvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3dvcmRDb3VudF9pbml0aWFsaXplcnMsIF93b3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU1OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFJpY2h0ZXh0MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jMzg7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93V29yZENvdW50X2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IHNob3dXb3JkQ291bnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93V29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1dvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hvd1dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjAodGhpcywgX3Nob3dXb3JkQ291bnRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfaW5pdGlhbGl6ZXJzLCAyMDApKTsKICAgIGdldCBtaW5IZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtaW5IZWlnaHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtaW5IZWlnaHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21pbkhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9taW5IZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93TGlua0lucHV0KCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0xpbmtJbnB1dF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dMaW5rSW5wdXQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dMaW5rSW5wdXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN3b3JkQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYwKHRoaXMsIF9zaG93TGlua0lucHV0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2luaXRpYWxpemVycywgMCkpOwogICAgZ2V0IHdvcmRDb3VudCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dvcmRDb3VudF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdvcmRDb3VudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jd29yZENvdW50X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBlZGl0b3JFbGVtZW50ID0gX19ydW5Jbml0aWFsaXplcnM2MCh0aGlzLCBfd29yZENvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGxpbmtJbnB1dEVsZW1lbnQ7CiAgICB0aXB0YXBCdW5kbGUgPSBudWxsOwogICAgZWRpdG9yOwogICAgc3RhdGljIHN0eWxlcyA9IHJpY2h0ZXh0U3R5bGVzOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gcmVuZGVyUmljaHRleHQodGhpcyk7CiAgICB9CiAgICByZW5kZXJUb29sYmFyKCkgewogICAgICBjb25zdCBidXR0b25zID0gdGhpcy5nZXRUb29sYmFyQnV0dG9ucygpOwogICAgICByZXR1cm4gYjJgCiAgICAgICR7YnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gewogICAgICAgIGlmIChidXR0b24uaXNEaXZpZGVyKSB7CiAgICAgICAgICByZXR1cm4gYjJgPGRpdiBjbGFzcz0idG9vbGJhci1kaXZpZGVyIj48L2Rpdj5gOwogICAgICAgIH0KICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiAke2J1dHRvbi5pc0FjdGl2ZT8uKCkgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgQGNsaWNrPSR7YnV0dG9uLmFjdGlvbn0KICAgICAgICAgICAgdGl0bGU9JHtidXR0b24udGl0bGV9CiAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuZGlzYWJsZWQgfHwgIXRoaXMuZWRpdG9yfQogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7YnV0dG9uLmljb259PjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYDsKICAgICAgfSl9CiAgICBgOwogICAgfQogICAgZ2V0VG9vbGJhckJ1dHRvbnMoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuIFtdOwogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJib2xkIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6Ym9sZCIsCiAgICAgICAgICB0aXRsZTogIkJvbGQgKEN0cmwrQikiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlQm9sZCgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJib2xkIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJpdGFsaWMiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTppdGFsaWMiLAogICAgICAgICAgdGl0bGU6ICJJdGFsaWMgKEN0cmwrSSkiLAogICAgICAgICAgYWN0aW9uOiAoKSA9PiB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudG9nZ2xlSXRhbGljKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIml0YWxpYyIpCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kZXJsaW5lIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6dW5kZXJsaW5lIiwKICAgICAgICAgIHRpdGxlOiAiVW5kZXJsaW5lIChDdHJsK1UpIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVVuZGVybGluZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJ1bmRlcmxpbmUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInN0cmlrZSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnN0cmlrZXRocm91Z2giLAogICAgICAgICAgdGl0bGU6ICJTdHJpa2V0aHJvdWdoIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZVN0cmlrZSgpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJzdHJpa2UiKQogICAgICAgIH0sCiAgICAgICAgeyBuYW1lOiAiZGl2aWRlcjEiLCB0aXRsZTogIiIsIGlzRGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMSIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAxIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMSB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDEgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMiIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmcyIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMiB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJoMyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmhlYWRpbmczIiwKICAgICAgICAgIHRpdGxlOiAiSGVhZGluZyAzIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZUhlYWRpbmcoeyBsZXZlbDogMyB9KS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiaGVhZGluZyIsIHsgbGV2ZWw6IDMgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIyIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYnVsbGV0TGlzdCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpc3QiLAogICAgICAgICAgdGl0bGU6ICJCdWxsZXQgTGlzdCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCdWxsZXRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJ1bGxldExpc3QiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIm9yZGVyZWRMaXN0IiwKICAgICAgICAgIGljb246ICJsdWNpZGU6bGlzdE9yZGVyZWQiLAogICAgICAgICAgdGl0bGU6ICJOdW1iZXJlZCBMaXN0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnRvZ2dsZU9yZGVyZWRMaXN0KCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoIm9yZGVyZWRMaXN0IikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJibG9ja3F1b3RlIiwKICAgICAgICAgIGljb246ICJsdWNpZGU6cXVvdGUiLAogICAgICAgICAgdGl0bGU6ICJRdW90ZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVCbG9ja3F1b3RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImJsb2NrcXVvdGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGUiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpjb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlKCkucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoImNvZGUiKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogImNvZGVCbG9jayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmZpbGVDb2RlIiwKICAgICAgICAgIHRpdGxlOiAiQ29kZSBCbG9jayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS50b2dnbGVDb2RlQmxvY2soKS5ydW4oKSwKICAgICAgICAgIGlzQWN0aXZlOiAoKSA9PiB0aGlzLmVkaXRvci5pc0FjdGl2ZSgiY29kZUJsb2NrIikKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXIzIiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAibGluayIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmxpbmsiLAogICAgICAgICAgdGl0bGU6ICJBZGQgTGluayIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMudG9nZ2xlTGluaygpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKCJsaW5rIikKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkxlZnQiLAogICAgICAgICAgaWNvbjogImx1Y2lkZTphbGlnbkxlZnQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBMZWZ0IiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigibGVmdCIpLnJ1bigpLAogICAgICAgICAgaXNBY3RpdmU6ICgpID0+IHRoaXMuZWRpdG9yLmlzQWN0aXZlKHsgdGV4dEFsaWduOiAibGVmdCIgfSkKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJhbGlnbkNlbnRlciIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduQ2VudGVyIiwKICAgICAgICAgIHRpdGxlOiAiQWxpZ24gQ2VudGVyIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnNldFRleHRBbGlnbigiY2VudGVyIikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJjZW50ZXIiIH0pCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiYWxpZ25SaWdodCIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOmFsaWduUmlnaHQiLAogICAgICAgICAgdGl0bGU6ICJBbGlnbiBSaWdodCIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5zZXRUZXh0QWxpZ24oInJpZ2h0IikucnVuKCksCiAgICAgICAgICBpc0FjdGl2ZTogKCkgPT4gdGhpcy5lZGl0b3IuaXNBY3RpdmUoeyB0ZXh0QWxpZ246ICJyaWdodCIgfSkKICAgICAgICB9LAogICAgICAgIHsgbmFtZTogImRpdmlkZXI0IiwgdGl0bGU6ICIiLCBpc0RpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAidW5kbyIsCiAgICAgICAgICBpY29uOiAibHVjaWRlOnVuZG8iLAogICAgICAgICAgdGl0bGU6ICJVbmRvIChDdHJsK1opIiwKICAgICAgICAgIGFjdGlvbjogKCkgPT4gdGhpcy5lZGl0b3IuY2hhaW4oKS5mb2N1cygpLnVuZG8oKS5ydW4oKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogInJlZG8iLAogICAgICAgICAgaWNvbjogImx1Y2lkZTpyZWRvIiwKICAgICAgICAgIHRpdGxlOiAiUmVkbyAoQ3RybCtZKSIsCiAgICAgICAgICBhY3Rpb246ICgpID0+IHRoaXMuZWRpdG9yLmNoYWluKCkuZm9jdXMoKS5yZWRvKCkucnVuKCkKICAgICAgICB9CiAgICAgIF07CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMudGlwdGFwQnVuZGxlID0gYXdhaXQgRGVlc1NlcnZpY2VMaWJMb2FkZXIuZ2V0SW5zdGFuY2UoKS5sb2FkVGlwdGFwKCk7CiAgICAgIHRoaXMuZWRpdG9yRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5saW5rLWlucHV0IGlucHV0Iik7CiAgICAgIHRoaXMuaW5pdGlhbGl6ZUVkaXRvcigpOwogICAgfQogICAgaW5pdGlhbGl6ZUVkaXRvcigpIHsKICAgICAgaWYgKHRoaXMuZGlzYWJsZWQgfHwgIXRoaXMudGlwdGFwQnVuZGxlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgeyBFZGl0b3IsIFN0YXJ0ZXJLaXQsIFVuZGVybGluZTogVW5kZXJsaW5lMiwgVGV4dEFsaWduLCBMaW5rOiBMaW5rMywgVHlwb2dyYXBoeSB9ID0gdGhpcy50aXB0YXBCdW5kbGU7CiAgICAgIHRoaXMuZWRpdG9yID0gbmV3IEVkaXRvcih7CiAgICAgICAgZWxlbWVudDogdGhpcy5lZGl0b3JFbGVtZW50LAogICAgICAgIGV4dGVuc2lvbnM6IFsKICAgICAgICAgIFN0YXJ0ZXJLaXQuY29uZmlndXJlKHsKICAgICAgICAgICAgaGVhZGluZzogewogICAgICAgICAgICAgIGxldmVsczogWzEsIDIsIDNdCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVW5kZXJsaW5lMi5jb25maWd1cmUoe30pLAogICAgICAgICAgVGV4dEFsaWduLmNvbmZpZ3VyZSh7CiAgICAgICAgICAgIHR5cGVzOiBbImhlYWRpbmciLCAicGFyYWdyYXBoIl0KICAgICAgICAgIH0pLAogICAgICAgICAgTGluazMuY29uZmlndXJlKHsKICAgICAgICAgICAgb3Blbk9uQ2xpY2s6IGZhbHNlLAogICAgICAgICAgICBIVE1MQXR0cmlidXRlczogewogICAgICAgICAgICAgIGNsYXNzOiAiZWRpdG9yLWxpbmsiCiAgICAgICAgICAgIH0KICAgICAgICAgIH0pLAogICAgICAgICAgVHlwb2dyYXBoeS5jb25maWd1cmUoe30pCiAgICAgICAgXSwKICAgICAgICBjb250ZW50OiB0aGlzLnZhbHVlIHx8ICh0aGlzLnBsYWNlaG9sZGVyID8gYDxwPiR7dGhpcy5wbGFjZWhvbGRlcn08L3A+YCA6ICIiKSwKICAgICAgICBvblVwZGF0ZTogKHsgZWRpdG9yIH0pID0+IHsKICAgICAgICAgIHRoaXMudmFsdWUgPSBlZGl0b3IuZ2V0SFRNTCgpOwogICAgICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImlucHV0IiwgewogICAgICAgICAgICBkZXRhaWw6IHsgdmFsdWU6IHRoaXMudmFsdWUgfSwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImNoYW5nZSIsIHsKICAgICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICB9KSk7CiAgICAgICAgfSwKICAgICAgICBvblNlbGVjdGlvblVwZGF0ZTogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB7CiAgICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgICB9LAogICAgICAgIG9uQmx1cjogKCkgPT4gewogICAgICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy51cGRhdGVXb3JkQ291bnQoKTsKICAgIH0KICAgIHVwZGF0ZVdvcmRDb3VudCgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHRleHQ5ID0gdGhpcy5lZGl0b3IuZ2V0VGV4dCgpOwogICAgICB0aGlzLndvcmRDb3VudCA9IHRleHQ5LnRyaW0oKSA/IHRleHQ5LnRyaW0oKS5zcGxpdCgvXHMrLykubGVuZ3RoIDogMDsKICAgIH0KICAgIHRvZ2dsZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAodGhpcy5lZGl0b3IuaXNBY3RpdmUoImxpbmsiKSkgewogICAgICAgIGNvbnN0IGhyZWYgPSB0aGlzLmVkaXRvci5nZXRBdHRyaWJ1dGVzKCJsaW5rIikuaHJlZjsKICAgICAgICB0aGlzLnNob3dMaW5rSW5wdXQgPSB0cnVlOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAodGhpcy5saW5rSW5wdXRFbGVtZW50KSB7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC52YWx1ZSA9IGhyZWYgfHwgIiI7CiAgICAgICAgICAgIHRoaXMubGlua0lucHV0RWxlbWVudC5mb2N1cygpOwogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQuc2VsZWN0KCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gdHJ1ZTsKICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgaWYgKHRoaXMubGlua0lucHV0RWxlbWVudCkgewogICAgICAgICAgICB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWUgPSAiIjsKICAgICAgICAgICAgdGhpcy5saW5rSW5wdXRFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHNhdmVMaW5rKCkgewogICAgICBpZiAoIXRoaXMuZWRpdG9yIHx8ICF0aGlzLmxpbmtJbnB1dEVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCB1cmwgPSB0aGlzLmxpbmtJbnB1dEVsZW1lbnQudmFsdWU7CiAgICAgIGlmICh1cmwpIHsKICAgICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkuc2V0TGluayh7IGhyZWY6IHVybCB9KS5ydW4oKTsKICAgICAgfQogICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgIH0KICAgIHJlbW92ZUxpbmsoKSB7CiAgICAgIGlmICghdGhpcy5lZGl0b3IpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvci5jaGFpbigpLmZvY3VzKCkudW5zZXRMaW5rKCkucnVuKCk7CiAgICAgIHRoaXMuaGlkZUxpbmtJbnB1dCgpOwogICAgfQogICAgaGlkZUxpbmtJbnB1dCgpIHsKICAgICAgdGhpcy5zaG93TGlua0lucHV0ID0gZmFsc2U7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgaGFuZGxlTGlua0lucHV0S2V5ZG93bihlMTEpIHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLnNhdmVMaW5rKCk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkVzY2FwZSIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZGVMaW5rSW5wdXQoKTsKICAgICAgfQogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTI7CiAgICAgIGlmICh0aGlzLmVkaXRvciAmJiB2YWx1ZTIgIT09IHRoaXMuZWRpdG9yLmdldEhUTUwoKSkgewogICAgICAgIHRoaXMuZWRpdG9yLmNvbW1hbmRzLnNldENvbnRlbnQodmFsdWUyKTsKICAgICAgfQogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgY2xlYXIoKSB7CiAgICAgIHRoaXMuc2V0VmFsdWUoIiIpOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIHRoaXMuZWRpdG9yPy5jb21tYW5kcy5mb2N1cygpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICh0aGlzLmVkaXRvcikgewogICAgICAgIHRoaXMuZWRpdG9yLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UmljaHRleHQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9hMzsKdmFyIGRlbW9GdW5jMzkgPSAoKSA9PiBiMihfYTMgfHwgKF9hMyA9IF9fdGVtcGxhdGUoWyJcbiAgPGRlZXMtZGVtb3dyYXBwZXI+XG4gICAgPHN0eWxlPlxuICAgICAgIiwgJ1xuICAgIDwvc3R5bGU+XG4gICAgXG4gICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPlxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPScsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgIC5zdWdnZXN0aW9ucz0iLCAiXG4gICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAnPlxuICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWxheW91dCI+XG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPScsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAubWF4VGFncz0iLCAiXG4gICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgLnZhbHVlPSIsICJcbiAgICAgICAgICAgIC5kZXNjcmlwdGlvbj0iLCAiXG4gICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICA8L2Rpdj5cbiAgICAgIDwvZGVlcy1wYW5lbD5cblxuICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSIsICIgLnN1YnRpdGxlPSIsICI+XG4gICAgICAgIDxkZWVzLWlucHV0LXRhZ3NcbiAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgLnJlcXVpcmVkPSIsICJcbiAgICAgICAgICAuZGVzY3JpcHRpb249IiwgIlxuICAgICAgICA+PC9kZWVzLWlucHV0LXRhZ3M+XG4gICAgICA8L2RlZXMtcGFuZWw+XG5cbiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0iLCAiIC5zdWJ0aXRsZT0iLCAiPlxuICAgICAgICA8ZGVlcy1pbnB1dC10YWdzXG4gICAgICAgICAgLmxhYmVsPSIsICJcbiAgICAgICAgICAudmFsdWU9IiwgIlxuICAgICAgICAgIC5kaXNhYmxlZD0iLCAiXG4gICAgICAgICAgLmRlc2NyaXB0aW9uPSIsICJcbiAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgIj5cbiAgICAgICAgPGRlZXMtZm9ybT5cbiAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0XG4gICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAgIC5yZXF1aXJlZD0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICdcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1sYXlvdXQiPlxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9JywgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAucmVxdWlyZWQ9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLnN1Z2dlc3Rpb25zPSIsICJcbiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz5cbiAgICAgICAgICAgIFxuICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgICAgICAubGFiZWw9IiwgIlxuICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9IiwgIlxuICAgICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICAgICAgLm1heFRhZ3M9IiwgIlxuICAgICAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC10YWdzPlxuICAgICAgICAgIDwvZGl2PlxuICAgICAgICAgIFxuICAgICAgICAgIDxkZWVzLWlucHV0LXRleHRcbiAgICAgICAgICAgIC5sYWJlbD0iLCAiXG4gICAgICAgICAgICAuaW5wdXRUeXBlPSIsICJcbiAgICAgICAgICAgIC5wbGFjZWhvbGRlcj0iLCAiXG4gICAgICAgICAgICAua2V5PSIsICJcbiAgICAgICAgICA+PC9kZWVzLWlucHV0LXRleHQ+XG4gICAgICAgICAgXG4gICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQgLnRleHQ9IiwgIj48L2RlZXMtZm9ybS1zdWJtaXQ+XG4gICAgICAgIDwvZGVlcy1mb3JtPlxuICAgICAgPC9kZWVzLXBhbmVsPlxuXG4gICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9IiwgIiAuc3VidGl0bGU9IiwgJz5cbiAgICAgICAgPGRlZXMtaW5wdXQtdGFnc1xuICAgICAgICAgIGlkPSJpbnRlcmFjdGl2ZS10YWdzIlxuICAgICAgICAgIC5sYWJlbD0nLCAiXG4gICAgICAgICAgLnBsYWNlaG9sZGVyPSIsICJcbiAgICAgICAgICAuc3VnZ2VzdGlvbnM9IiwgIlxuICAgICAgICAgIEBjaGFuZ2U9IiwgYAogICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJ0YWctcHJldmlldyIgaWQ9InRhZ3MtcHJldmlldyI+CiAgICAgICAgICA8ZW0gc3R5bGU9ImNvbG9yOiAjOTk5OyI+Tm8gdGFncyBhZGRlZCB5ZXQuLi48L2VtPgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1wcmV2aWV3IiBpZD0idGFncy1qc29uIj4KICAgICAgICAgIDxlbT5KU09OIG91dHB1dCB3aWxsIGFwcGVhciBoZXJlLi4uPC9lbT4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8c2NyaXB0PgogICAgICAgICAgLy8gVXBkYXRlIEpTT04gcHJldmlldwogICAgICAgICAgY29uc3QgdGFnc0lucHV0ID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcignI2ludGVyYWN0aXZlLXRhZ3MnKTsKICAgICAgICAgIHRhZ3NJbnB1dD8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJywgKGUpID0+IHsKICAgICAgICAgICAgY29uc3QganNvblByZXZpZXcgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCcjdGFncy1qc29uJyk7CiAgICAgICAgICAgIGlmIChqc29uUHJldmlldykgewogICAgICAgICAgICAgIGpzb25QcmV2aWV3LnRleHRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkoZS5kZXRhaWwudmFsdWUsIG51bGwsIDIpOwogICAgICAgICAgICB9CiAgICAgICAgICB9KTsKICAgICAgICA8XC9zY3JpcHQ+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYF0pKSwgaWAKICAgICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgICBtYXJnaW46IDAgYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgZGVlcy1wYW5lbCB7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICAgIH0KICAgICAgICAKICAgICAgICBkZWVzLXBhbmVsOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmciAxZnI7CiAgICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgICAgLmdyaWQtbGF5b3V0IHsKICAgICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC5vdXRwdXQtcHJldmlldyB7CiAgICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNmM2Y0ZjY7CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgICBjb2xvcjogIzM3NDE1MTsKICAgICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICAgIG1heC1oZWlnaHQ6IDIwMHB4OwogICAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgICAgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzJjMmMyYzsKICAgICAgICAgICAgY29sb3I6ICNlNGU0ZTc7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIAogICAgICAgIC50YWctcHJldmlldyB7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgICAgYmFja2dyb3VuZDogI2Y5ZmFmYjsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIG1pbi1oZWlnaHQ6IDQwcHg7CiAgICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIH0KICAgICAgICAKICAgICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgICAudGFnLXByZXZpZXcgewogICAgICAgICAgICBiYWNrZ3JvdW5kOiAjMWYyOTM3OwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICAKICAgICAgICAudGFnLXByZXZpZXctaXRlbSB7CiAgICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgICBwYWRkaW5nOiA0cHggMTJweDsKICAgICAgICAgIGJhY2tncm91bmQ6ICNlMGU3ZmY7CiAgICAgICAgICBjb2xvcjogIzQzMzhjYTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgfQogICAgICAgIAogICAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAgIC50YWctcHJldmlldy1pdGVtIHsKICAgICAgICAgICAgYmFja2dyb3VuZDogIzMxMmU4MTsKICAgICAgICAgICAgY29sb3I6ICNjN2QyZmU7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBgLCAiMS4gQmFzaWMgVGFncyBJbnB1dCIsICJTaW1wbGUgdGFnIGlucHV0IHdpdGggY29tbW9uIHByb2dyYW1taW5nIGxhbmd1YWdlcyIsICJQcm9ncmFtbWluZyBMYW5ndWFnZXMiLCAiQWRkIGEgbGFuZ3VhZ2UuLi4iLCBbIkphdmFTY3JpcHQiLCAiVHlwZVNjcmlwdCIsICJQeXRob24iLCAiR28iXSwgIlByZXNzIEVudGVyIG9yIGNvbW1hIHRvIGFkZCB0YWdzIiwgIjIuIFRhZ3Mgd2l0aCBTdWdnZXN0aW9ucyIsICJBdXRvLWNvbXBsZXRlIHN1Z2dlc3Rpb25zIGZvciBmYXN0ZXIgaW5wdXQiLCAiVGVjaCBTdGFjayIsICJUeXBlIHRvIHNlZSBzdWdnZXN0aW9ucy4uLiIsIFsKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTGl0IiwKICAiTmV4dC5qcyIsCiAgIk51eHQiLAogICJTdmVsdGVLaXQiLAogICJOb2RlLmpzIiwKICAiRGVubyIsCiAgIkJ1biIsCiAgIkV4cHJlc3MiLAogICJGYXN0aWZ5IiwKICAiTmVzdC5qcyIsCiAgIktvYSIsCiAgIk1vbmdvREIiLAogICJQb3N0Z3JlU1FMIiwKICAiUmVkaXMiLAogICJNeVNRTCIsCiAgIlNRTGl0ZSIsCiAgIkNhc3NhbmRyYSIsCiAgIkRvY2tlciIsCiAgIkt1YmVybmV0ZXMiLAogICJBV1MiLAogICJBenVyZSIsCiAgIkdDUCIsCiAgIlZlcmNlbCIsCiAgIk5ldGxpZnkiCl0sIFsiUmVhY3QiLCAiTm9kZS5qcyIsICJQb3N0Z3JlU1FMIiwgIkRvY2tlciJdLCAiU3RhcnQgdHlwaW5nIHRvIHNlZSBzdWdnZXN0aW9ucyBmcm9tIHBvcHVsYXIgdGVjaG5vbG9naWVzIiwgIjMuIExpbWl0ZWQgVGFncyIsICJSZXN0cmljdCB0aGUgbnVtYmVyIG9mIHRhZ3MgdXNlcnMgY2FuIGFkZCIsICJUb3AgMyBTa2lsbHMiLCAiQWRkIHVwIHRvIDMgc2tpbGxzLi4uIiwgMywgWyJEZXNpZ24iLCAiRGV2ZWxvcG1lbnQiXSwgIk1heGltdW0gMyB0YWdzIGFsbG93ZWQiLCAiQ2F0ZWdvcmllcyAoTWF4IDUpIiwgIlNlbGVjdCBjYXRlZ29yaWVzLi4uIiwgNSwgWyJCbG9nIiwgIlR1dG9yaWFsIiwgIk5ld3MiLCAiUmV2aWV3IiwgIkd1aWRlIiwgIkNhc2UgU3R1ZHkiLCAiSW50ZXJ2aWV3Il0sIFsiVHV0b3JpYWwiLCAiR3VpZGUiXSwgIkNob29zZSB1cCB0byA1IGNhdGVnb3JpZXMiLCAiNC4gUmVxdWlyZWQgJiBWYWxpZGF0aW9uIiwgIlRhZ3MgaW5wdXQgd2l0aCB2YWxpZGF0aW9uIHJlcXVpcmVtZW50cyIsICJQcm9qZWN0IFRhZ3MiLCAiQWRkIGF0IGxlYXN0IG9uZSB0YWcuLi4iLCB0cnVlLCAiVGhpcyBmaWVsZCBpcyByZXF1aXJlZCAtIGFkZCBhdCBsZWFzdCBvbmUgdGFnIiwgIjUuIERpc2FibGVkIFN0YXRlIiwgIlJlYWQtb25seSB0YWdzIGRpc3BsYXkiLCAiU3lzdGVtIFRhZ3MiLCBbIlN5c3RlbSIsICJQcm90ZWN0ZWQiLCAiUmVhZC1Pbmx5IiwgIkFyY2hpdmUiXSwgdHJ1ZSwgIlRoZXNlIHRhZ3MgY2Fubm90IGJlIG1vZGlmaWVkIiwgIjYuIEZvcm0gSW50ZWdyYXRpb24iLCAiVGFncyBpbnB1dCB3b3JraW5nIHdpdGhpbiBhIGZvcm0gY29udGV4dCIsICJQcm9qZWN0IE5hbWUiLCAiTXkgQXdlc29tZSBQcm9qZWN0IiwgdHJ1ZSwgIm5hbWUiLCAiVGVjaG5vbG9naWVzIFVzZWQiLCAiQWRkIHRlY2hub2xvZ2llcy4uLiIsIHRydWUsICJ0ZWNobm9sb2dpZXMiLCBbCiAgIlR5cGVTY3JpcHQiLAogICJKYXZhU2NyaXB0IiwKICAiUHl0aG9uIiwKICAiR28iLAogICJSdXN0IiwKICAiUmVhY3QiLAogICJWdWUiLAogICJBbmd1bGFyIiwKICAiU3ZlbHRlIiwKICAiTm9kZS5qcyIsCiAgIkRlbm8iLAogICJFeHByZXNzIiwKICAiRmFzdEFQSSIKXSwgIlByb2plY3QgVGFncyIsICJBZGQgZGVzY3JpcHRpdmUgdGFncy4uLiIsICJ0YWdzIiwgMTAsIFsKICAiZnJvbnRlbmQiLAogICJiYWNrZW5kIiwKICAiZnVsbHN0YWNrIiwKICAibW9iaWxlIiwKICAiZGVza3RvcCIsCiAgIndlYiIsCiAgImFwaSIsCiAgImRhdGFiYXNlIiwKICAiZGV2b3BzIiwKICAidWkvdXgiLAogICJvcGVuc291cmNlIiwKICAic2FhcyIsCiAgImVudGVycHJpc2UiLAogICJzdGFydHVwIgpdLCAiRGVzY3JpcHRpb24iLCAidGV4dGFyZWEiLCAiRGVzY3JpYmUgeW91ciBwcm9qZWN0Li4uIiwgImRlc2NyaXB0aW9uIiwgIkNyZWF0ZSBQcm9qZWN0IiwgIjcuIEludGVyYWN0aXZlIERlbW8iLCAiQWRkIHRhZ3MgYW5kIHNlZSB0aGVtIGNvbGxlY3RlZCBpbiByZWFsLXRpbWUiLCAiWW91ciBJbnRlcmVzdHMiLCAiVHlwZSB5b3VyIGludGVyZXN0cy4uLiIsIFsKICAiTXVzaWMiLAogICJNb3ZpZXMiLAogICJCb29rcyIsCiAgIlRyYXZlbCIsCiAgIlBob3RvZ3JhcGh5IiwKICAiQ29va2luZyIsCiAgIkdhbWluZyIsCiAgIlNwb3J0cyIsCiAgIkFydCIsCiAgIlRlY2hub2xvZ3kiLAogICJGYXNoaW9uIiwKICAiRml0bmVzcyIsCiAgIk5hdHVyZSIsCiAgIlNjaWVuY2UiLAogICJIaXN0b3J5IgpdLCAoZTExKSA9PiB7CiAgY29uc3QgcHJldmlldyA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiN0YWdzLXByZXZpZXciKTsKICBjb25zdCB0YWdzID0gZTExLmRldGFpbC52YWx1ZTsKICBpZiAocHJldmlldykgewogICAgaWYgKHRhZ3MubGVuZ3RoID09PSAwKSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gJzxlbSBzdHlsZT0iY29sb3I6ICM5OTk7Ij5ObyB0YWdzIGFkZGVkIHlldC4uLjwvZW0+JzsKICAgIH0gZWxzZSB7CiAgICAgIHByZXZpZXcuaW5uZXJIVE1MID0gdGFncy5tYXAoKHRhZykgPT4gYDxzcGFuIGNsYXNzPSJ0YWctcHJldmlldy1pdGVtIj4ke3RhZ308L3NwYW4+YCkuam9pbigiIik7CiAgICB9CiAgfQp9KTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXRhZ3MvZGVlcy1pbnB1dC10YWdzLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0VGFncyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtdGFncyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnM7CiAgbGV0IF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXhUYWdzX2RlY29yYXRvcnM7CiAgbGV0IF9tYXhUYWdzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4VGFnc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3N1Z2dlc3Rpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lucHV0VmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX2lucHV0VmFsdWVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dTdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2RlY29yYXRvcnM7CiAgbGV0IF92YWxpZGF0aW9uVGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNJbnB1dFRhZ3MyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfbWF4VGFnc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX3N1Z2dlc3Rpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zaG93U3VnZ2VzdGlvbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX19lc0RlY29yYXRlNjAodGhpcywgbnVsbCwgX3ZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZhbHVlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2YWx1ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai52YWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmFsdWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicGxhY2Vob2xkZXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBsYWNlaG9sZGVyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wbGFjZWhvbGRlciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9tYXhUYWdzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heFRhZ3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1heFRhZ3MiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWF4VGFncywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4VGFncyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXhUYWdzX2luaXRpYWxpemVycywgX21heFRhZ3NfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc3VnZ2VzdGlvbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3VnZ2VzdGlvbnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInN1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN1Z2dlc3Rpb25zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdWdnZXN0aW9ucyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zdWdnZXN0aW9uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF9pbnB1dFZhbHVlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlucHV0VmFsdWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlucHV0VmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5wdXRWYWx1ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5wdXRWYWx1ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgX2lucHV0VmFsdWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfc2hvd1N1Z2dlc3Rpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dTdWdnZXN0aW9ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic2hvd1N1Z2dlc3Rpb25zIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTdWdnZXN0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1N1Z2dlc3Rpb25zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Nob3dTdWdnZXN0aW9uc19pbml0aWFsaXplcnMsIF9zaG93U3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MCh0aGlzLCBudWxsLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9pbml0aWFsaXplcnMsIF9oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYwKHRoaXMsIG51bGwsIF92YWxpZGF0aW9uVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWxpZGF0aW9uVGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsaWRhdGlvblRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsaWRhdGlvblRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbGlkYXRpb25UZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbGlkYXRpb25UZXh0X2luaXRpYWxpemVycywgX3ZhbGlkYXRpb25UZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRUYWdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmMzOTsKICAgIHN0YXRpYyBkZW1vR3JvdXAgPSAiSW5wdXQiOwogICAgI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF92YWx1ZV9pbml0aWFsaXplcnMsIFtdKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9wbGFjZWhvbGRlcl9pbml0aWFsaXplcnMsICJBZGQgdGFncy4uLiIpKTsKICAgIGdldCBwbGFjZWhvbGRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGxhY2Vob2xkZXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BsYWNlaG9sZGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfbWF4VGFnc19pbml0aWFsaXplcnMsIDApKTsKICAgIGdldCBtYXhUYWdzKCkgewogICAgICByZXR1cm4gdGhpcy4jbWF4VGFnc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMCBtZWFucyB1bmxpbWl0ZWQKICAgIHNldCBtYXhUYWdzKHZhbHVlMikgewogICAgICB0aGlzLiNtYXhUYWdzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9tYXhUYWdzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHN1Z2dlc3Rpb25zKCkgewogICAgICByZXR1cm4gdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdWdnZXN0aW9ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpbnB1dFZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc3VnZ2VzdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2luaXRpYWxpemVycywgIiIpKTsKICAgIGdldCBpbnB1dFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy4jaW5wdXRWYWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlucHV0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lucHV0VmFsdWVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczYxKHRoaXMsIF9pbnB1dFZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U3VnZ2VzdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaG93U3VnZ2VzdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaG93U3VnZ2VzdGlvbnModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTdWdnZXN0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfc2hvd1N1Z2dlc3Rpb25zX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfaW5pdGlhbGl6ZXJzLCAtMSkpOwogICAgZ2V0IGhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4KCkgewogICAgICByZXR1cm4gdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBoaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN2YWxpZGF0aW9uVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjEodGhpcywgX2hpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHZhbGlkYXRpb25UZXh0KCkgewogICAgICByZXR1cm4gdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2YWxpZGF0aW9uVGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmFsaWRhdGlvblRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgLi4uRGVlc0lucHV0QmFzZS5iYXNlU3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCAnUm9ib3RvJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmlucHV0LXdyYXBwZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgbWluLWhlaWdodDogNDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwogICAgICB9CgogICAgICAudGFncy1jb250YWluZXI6aG92ZXI6bm90KC5kaXNhYmxlZCkgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc5LjglKSIsICJoc2woMCAwJSAyMC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWdzLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIuMiA0Ny40JSA1MS4yJSAvIDAuMSkiLCAiaHNsKDIxNy4yIDkxLjIlIDU5LjglIC8gMC4xKSIpfTsKICAgICAgfQoKICAgICAgLnRhZ3MtY29udGFpbmVyLmRpc2FibGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTUuMSUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4OS44JSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAudGFnIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNHB4OwogICAgICAgIHBhZGRpbmc6IDJweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjAuMiUgNjUuMSUgLyAwLjIpIiwgImhzbCgyMTUgMjAuMiUgMzUuMSUgLyAwLjIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNS4zIDI1JSAyNi43JSkiLCAiaHNsKDIxNy45IDEwLjYlIDc0LjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMC4yJSA2NS4xJSAvIDAuMykiLCAiaHNsKDIxNSAyMC4yJSAzNS4xJSAvIDAuMykiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGxpbmUtaGVpZ2h0OiAxOHB4OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogdGFnQXBwZWFyIDAuMTVzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgdGFnQXBwZWFyIHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIH0KICAgICAgICB0byB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuMyAyNSUgNDYuNyUpIiwgImhzbCgyMTcuOSAxMC42JSA1NC45JSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctcmVtb3ZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMCUgLyAwLjA4KSIsICJoc2woMCAwJSAxMDAlIC8gMC4wOCkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1LjMgMjUlIDI2LjclKSIsICJoc2woMjE3LjkgMTAuNiUgNzQuOSUpIil9OwogICAgICB9CgogICAgICAudGFnLXJlbW92ZSBkZWVzLWljb24gewogICAgICAgIHdpZHRoOiAxMHB4OwogICAgICAgIGhlaWdodDogMTBweDsKICAgICAgfQoKICAgICAgLnRhZy1pbnB1dCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDEyMHB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogaW5oZXJpdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDIwcHg7CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDYzLjklKSIsICJoc2woMCAwJSA0NS4xJSkiKX07CiAgICAgIH0KCiAgICAgIC50YWctaW5wdXQ6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KCiAgICAgIC8qIFN1Z2dlc3Rpb25zIGRyb3Bkb3duICovCiAgICAgIC5zdWdnZXN0aW9ucy1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMDAlOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgbWFyZ2luLXRvcDogNHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSAzLjklKSIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgODkuOCUpIiwgImhzbCgwIDAlIDE0LjklKSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggNnB4IC0xcHggaHNsKDAgMCUgMCUgLyAwLjEpLCAwIDJweCA0cHggLTJweCBoc2woMCAwJSAwJSAvIDAuMSk7CiAgICAgICAgbWF4LWhlaWdodDogMjAwcHg7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbiB7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDE1JSkiLCAiaHNsKDAgMCUgOTAlKSIpfTsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NS4xJSkiLCAiaHNsKDAgMCUgMTQuOSUpIil9OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbi5oaWdobGlnaHRlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTAgNDAlIDk2LjElKSIsICJoc2woMjE1IDIwLjIlIDE2LjglKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDklKSIsICJoc2woMCAwJSA5NSUpIil9OwogICAgICB9CgogICAgICAvKiBWYWxpZGF0aW9uIHN0eWxlcyAqLwogICAgICAudmFsaWRhdGlvbi1tZXNzYWdlIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDcyLjIlIDUwLjYlKSIsICJoc2woMCA2Mi44JSAzMC42JSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBEZXNjcmlwdGlvbiBzdHlsZXMgKi8KICAgICAgLmRlc2NyaXB0aW9uIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUuNCAxNi4zJSA1Ni45JSkiLCAiaHNsKDIxNSAyMC4yJSA1NS4xJSkiKX07CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1hcmdpbi10b3A6IDZweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICB9CgogICAgICAvKiBTY3JvbGxiYXIgc3R5bGluZyAqLwogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICB3aWR0aDogOHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnN1Z2dlc3Rpb25zLWRyb3Bkb3duOjotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICB9CgogICAgICAuc3VnZ2VzdGlvbnMtZHJvcGRvd246Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNzkuOCUpIiwgImhzbCgwIDAlIDIwLjklKSIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgZmlsdGVyZWRTdWdnZXN0aW9ucyA9IHRoaXMuc3VnZ2VzdGlvbnMuZmlsdGVyKChzdWdnZXN0aW9uKSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzdWdnZXN0aW9uKSAmJiBzdWdnZXN0aW9uLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXModGhpcy5pbnB1dFZhbHVlLnRvTG93ZXJDYXNlKCkpKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJpbnB1dC13cmFwcGVyIj4KICAgICAgICAke3RoaXMubGFiZWwgPyBiMmA8ZGVlcy1sYWJlbCAubGFiZWw9JHt0aGlzLmxhYmVsfSAucmVxdWlyZWQ9JHt0aGlzLnJlcXVpcmVkfT48L2RlZXMtbGFiZWw+YCA6ICIifQogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9InN1Z2dlc3Rpb25zLWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJ0YWdzLWNvbnRhaW5lciAke3RoaXMuZGlzYWJsZWQgPyAiZGlzYWJsZWQiIDogIiJ9IgogICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNvbnRhaW5lckNsaWNrfQogICAgICAgICAgPgogICAgICAgICAgICAke3RoaXMudmFsdWUubWFwKCh0YWcpID0+IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZyI+CiAgICAgICAgICAgICAgICA8c3Bhbj4ke3RhZ308L3NwYW4+CiAgICAgICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkID8gYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRhZy1yZW1vdmUiIEBjbGljaz0keyhlMTEpID0+IHRoaXMucmVtb3ZlVGFnKGUxMSwgdGFnKX0+CiAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6eCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCl9CiAgICAgICAgICAgIAogICAgICAgICAgICAkeyF0aGlzLmRpc2FibGVkICYmICghdGhpcy5tYXhUYWdzIHx8IHRoaXMudmFsdWUubGVuZ3RoIDwgdGhpcy5tYXhUYWdzKSA/IGIyYAogICAgICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgICAgIGNsYXNzPSJ0YWctaW5wdXQiCiAgICAgICAgICAgICAgICAucGxhY2Vob2xkZXI9JHt0aGlzLnBsYWNlaG9sZGVyfQogICAgICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5pbnB1dFZhbHVlfQogICAgICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVJbnB1dH0KICAgICAgICAgICAgICAgIEBrZXlkb3duPSR7dGhpcy5oYW5kbGVLZXlEb3dufQogICAgICAgICAgICAgICAgQGZvY3VzPSR7dGhpcy5oYW5kbGVGb2N1c30KICAgICAgICAgICAgICAgIEBibHVyPSR7dGhpcy5oYW5kbGVCbHVyfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5kaXNhYmxlZH0KICAgICAgICAgICAgICAvPgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAke3RoaXMuc2hvd1N1Z2dlc3Rpb25zICYmIGZpbHRlcmVkU3VnZ2VzdGlvbnMubGVuZ3RoID4gMCA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdWdnZXN0aW9ucy1kcm9wZG93biI+CiAgICAgICAgICAgICAgJHtmaWx0ZXJlZFN1Z2dlc3Rpb25zLm1hcCgoc3VnZ2VzdGlvbiwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InN1Z2dlc3Rpb24gJHtpbmRleDIgPT09IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPyAiaGlnaGxpZ2h0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICBAbW91c2Vkb3duPSR7KGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuYWRkVGFnKHN1Z2dlc3Rpb24pOwogICAgICB9fQogICAgICAgICAgICAgICAgICBAbW91c2VlbnRlcj0keygpID0+IHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSBpbmRleDJ9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7c3VnZ2VzdGlvbn0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIGApfQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnZhbGlkYXRpb25UZXh0ID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2YWxpZGF0aW9uLW1lc3NhZ2UiPiR7dGhpcy52YWxpZGF0aW9uVGV4dH08L2Rpdj4KICAgICAgICBgIDogIiJ9CiAgICAgICAgCiAgICAgICAgJHt0aGlzLmRlc2NyaXB0aW9uID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXNjcmlwdGlvbiI+JHt0aGlzLmRlc2NyaXB0aW9ufTwvZGl2PgogICAgICAgIGAgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ29udGFpbmVyQ2xpY2soZTExKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi50YWctaW5wdXQiKTsKICAgICAgaWYgKGlucHV0ICYmIGUxMS50YXJnZXQgIT09IGlucHV0KSB7CiAgICAgICAgaW5wdXQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlSW5wdXQoZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgdGhpcy5pbnB1dFZhbHVlID0gaW5wdXQudmFsdWU7CiAgICAgIGlmICh0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIiwiKSB8fCB0aGlzLmlucHV0VmFsdWUuaW5jbHVkZXMoIjsiKSkgewogICAgICAgIGNvbnN0IHRhZyA9IHRoaXMuaW5wdXRWYWx1ZS5yZXBsYWNlKC9bLDtdL2csICIiKS50cmltKCk7CiAgICAgICAgaWYgKHRhZykgewogICAgICAgICAgdGhpcy5hZGRUYWcodGFnKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUtleURvd24oZTExKSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBpZiAodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCA+PSAwICYmIHRoaXMuc2hvd1N1Z2dlc3Rpb25zKSB7CiAgICAgICAgICBjb25zdCBmaWx0ZXJlZFN1Z2dlc3Rpb25zID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHN1Z2dlc3Rpb24pID0+ICF0aGlzLnZhbHVlLmluY2x1ZGVzKHN1Z2dlc3Rpb24pICYmIHN1Z2dlc3Rpb24udG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpOwogICAgICAgICAgaWYgKGZpbHRlcmVkU3VnZ2VzdGlvbnNbdGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleF0pIHsKICAgICAgICAgICAgdGhpcy5hZGRUYWcoZmlsdGVyZWRTdWdnZXN0aW9uc1t0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4XSk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIGlmICh0aGlzLmlucHV0VmFsdWUudHJpbSgpKSB7CiAgICAgICAgICB0aGlzLmFkZFRhZyh0aGlzLmlucHV0VmFsdWUudHJpbSgpKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkJhY2tzcGFjZSIgJiYgIXRoaXMuaW5wdXRWYWx1ZSAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+IDApIHsKICAgICAgICB0aGlzLnJlbW92ZVRhZyhlMTEsIHRoaXMudmFsdWVbdGhpcy52YWx1ZS5sZW5ndGggLSAxXSk7CiAgICAgIH0gZWxzZSBpZiAoZTExLmtleSA9PT0gIkFycm93RG93biIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBmaWx0ZXJlZENvdW50ID0gdGhpcy5zdWdnZXN0aW9ucy5maWx0ZXIoKHM5KSA9PiAhdGhpcy52YWx1ZS5pbmNsdWRlcyhzOSkgJiYgczkudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmlucHV0VmFsdWUudG9Mb3dlckNhc2UoKSkpLmxlbmd0aDsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5taW4odGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCArIDEsIGZpbHRlcmVkQ291bnQgLSAxKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiQXJyb3dVcCIgJiYgdGhpcy5zaG93U3VnZ2VzdGlvbnMpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gTWF0aC5tYXgodGhpcy5oaWdobGlnaHRlZFN1Z2dlc3Rpb25JbmRleCAtIDEsIDApOwogICAgICB9IGVsc2UgaWYgKGUxMS5rZXkgPT09ICJFc2NhcGUiKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSBmYWxzZTsKICAgICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZUZvY3VzKCkgewogICAgICBpZiAodGhpcy5zdWdnZXN0aW9ucy5sZW5ndGggPiAwKSB7CiAgICAgICAgdGhpcy5zaG93U3VnZ2VzdGlvbnMgPSB0cnVlOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVCbHVyKCkgewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICAgIHRoaXMuaGlnaGxpZ2h0ZWRTdWdnZXN0aW9uSW5kZXggPSAtMTsKICAgICAgfSwgMjAwKTsKICAgIH0KICAgIGFkZFRhZyh0YWcpIHsKICAgICAgaWYgKCF0YWcgfHwgdGhpcy52YWx1ZS5pbmNsdWRlcyh0YWcpKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKHRoaXMubWF4VGFncyAmJiB0aGlzLnZhbHVlLmxlbmd0aCA+PSB0aGlzLm1heFRhZ3MpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnZhbHVlID0gWy4uLnRoaXMudmFsdWUsIHRhZ107CiAgICAgIHRoaXMuaW5wdXRWYWx1ZSA9ICIiOwogICAgICB0aGlzLnNob3dTdWdnZXN0aW9ucyA9IGZhbHNlOwogICAgICB0aGlzLmhpZ2hsaWdodGVkU3VnZ2VzdGlvbkluZGV4ID0gLTE7CiAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIudGFnLWlucHV0Iik7CiAgICAgIGlmIChpbnB1dCkgewogICAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICAgIH0KICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICByZW1vdmVUYWcoZTExLCB0YWcpIHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB0aGlzLnZhbHVlID0gdGhpcy52YWx1ZS5maWx0ZXIoKHQ5KSA9PiB0OSAhPT0gdGFnKTsKICAgICAgdGhpcy5lbWl0Q2hhbmdlKCk7CiAgICB9CiAgICBlbWl0Q2hhbmdlKCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJjaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnZhbHVlIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KSk7CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgfQogICAgZ2V0VmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLnZhbHVlOwogICAgfQogICAgc2V0VmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMudmFsdWUgPSB2YWx1ZTIgfHwgW107CiAgICB9CiAgICBhc3luYyB2YWxpZGF0ZSgpIHsKICAgICAgaWYgKHRoaXMucmVxdWlyZWQgJiYgKCF0aGlzLnZhbHVlIHx8IHRoaXMudmFsdWUubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiQXQgbGVhc3Qgb25lIHRhZyBpcyByZXF1aXJlZCI7CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIHRoaXMudmFsaWRhdGlvblRleHQgPSAiIjsKICAgICAgcmV0dXJuIHRydWU7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MSh0aGlzLCBfdmFsaWRhdGlvblRleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0VGFnczIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBnZW5lcmF0ZVJlcG9ydEJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHRpdGxlLSR7dGltZXN0YW1wMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0xIiwKICAgICAgY29udGVudDogIlN5c3RlbSBQZXJmb3JtYW5jZSBSZXBvcnQiCiAgICB9LAogICAgewogICAgICBpZDogYGRhdGUtJHt0aW1lc3RhbXAyICsgMX1gLAogICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgY29udGVudDogYEdlbmVyYXRlZCBvbjogJHsoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvTG9jYWxlU3RyaW5nKCl9YAogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LWhlYWRpbmctJHt0aW1lc3RhbXAyICsgMn1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIkV4ZWN1dGl2ZSBTdW1tYXJ5IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdW1tYXJ5LSR7dGltZXN0YW1wMiArIDN9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJUaGlzIHJlcG9ydCBwcm92aWRlcyBhbiBhbmFseXNpcyBvZiBzeXN0ZW0gcGVyZm9ybWFuY2UgbWV0cmljcyBvdmVyIHRoZSBsYXN0IDMwIGRheXMuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgNH1gLAogICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgY29udGVudDogIktleSBNZXRyaWNzIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBtZXRyaWNzLWxpc3QtJHt0aW1lc3RhbXAyICsgNX1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICJBdmVyYWdlIHJlc3BvbnNlIHRpbWU6IDEyNG1zXG5VcHRpbWU6IDk5Ljk3JVxuQ1BVIHV0aWxpemF0aW9uOiA0NSVcbk1lbW9yeSB1c2FnZTogMi4zR0IgLyA4R0IiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgfSwKICAgIHsKICAgICAgaWQ6IGBhbmFseXNpcy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDZ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJQZXJmb3JtYW5jZSBBbmFseXNpcyIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgYW5hbHlzaXMtcXVvdGUtJHt0aW1lc3RhbXAyICsgN31gLAogICAgICB0eXBlOiAicXVvdGUiLAogICAgICBjb250ZW50OiAiU3lzdGVtIHBlcmZvcm1hbmNlIHJlbWFpbnMgd2l0aGluIGFjY2VwdGFibGUgcGFyYW1ldGVycyB3aXRoIHJvb20gZm9yIG9wdGltaXphdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudC4iCiAgICB9LAogICAgewogICAgICBpZDogYGNvZGUtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA4fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiU2FtcGxlIFF1ZXJ5IFBlcmZvcm1hbmNlIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBjb2RlLWJsb2NrLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogImNvZGUiLAogICAgICBjb250ZW50OiAiU0VMRUNUIEFWRyhyZXNwb25zZV90aW1lKSBhcyBhdmdfdGltZSxcbiAgICAgICBDT1VOVCgqKSBhcyB0b3RhbF9yZXF1ZXN0cyxcbiAgICAgICBEQVRFKGNyZWF0ZWRfYXQpIGFzIGRhdGVcbkZST00gcGVyZm9ybWFuY2VfbG9nc1xuV0hFUkUgY3JlYXRlZF9hdCA+PSBOT1coKSAtIElOVEVSVkFMIDMwIERBWVxuR1JPVVAgQlkgREFURShjcmVhdGVkX2F0KVxuT1JERVIgQlkgZGF0ZSBERVNDOyIsCiAgICAgIG1ldGFkYXRhOiB7IGxhbmd1YWdlOiAic3FsIiB9CiAgICB9LAogICAgewogICAgICBpZDogYGRpdmlkZXItJHt0aW1lc3RhbXAyICsgMTB9YCwKICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICBjb250ZW50OiAiIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBmb290ZXItJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJSZXBvcnQgZ2VuZXJhdGVkIGF1dG9tYXRpY2FsbHkgYnkgU3lzdGVtIE1vbml0b3IgdjIuNS4wIgogICAgfQogIF07Cn07CnZhciBnZW5lcmF0ZVJlY2lwZUJsb2NrcyA9ICgpID0+IHsKICBjb25zdCB0aW1lc3RhbXAyID0gRGF0ZS5ub3coKTsKICByZXR1cm4gWwogICAgewogICAgICBpZDogYHJlY2lwZS10aXRsZS0ke3RpbWVzdGFtcDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgIGNvbnRlbnQ6ICJDbGFzc2ljIE1hcmdoZXJpdGEgUGl6emEiCiAgICB9LAogICAgewogICAgICBpZDogYHJlY2lwZS1pbnRyby0ke3RpbWVzdGFtcDIgKyAxfWAsCiAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICBjb250ZW50OiAiQSB0cmFkaXRpb25hbCBJdGFsaWFuIHBpenphIHdpdGggZnJlc2ggYmFzaWwsIG1venphcmVsbGEsIGFuZCB0b21hdG8gc2F1Y2UuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBpbmdyZWRpZW50cy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDJ9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjM1NX0gSW5ncmVkaWVudHMiCiAgICB9LAogICAgewogICAgICBpZDogYGRvdWdoLWhlYWRpbmctJHt0aW1lc3RhbXAyICsgM31gLAogICAgICB0eXBlOiAiaGVhZGluZy0zIiwKICAgICAgY29udGVudDogIkZvciB0aGUgRG91Z2g6IgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkb3VnaC1saXN0LSR7dGltZXN0YW1wMiArIDR9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAnNTAwZyB0aXBvICIwMCIgZmxvdXJcbjMyNW1sIHdhcm0gd2F0ZXJcbjEwZyBzYWx0XG43ZyBhY3RpdmUgZHJ5IHllYXN0XG4yIHRic3Agb2xpdmUgb2lsJywKICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJidWxsZXQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdG9wcGluZ3MtaGVhZGluZy0ke3RpbWVzdGFtcDIgKyA1fWAsCiAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICBjb250ZW50OiAiRm9yIHRoZSBUb3BwaW5nczoiCiAgICB9LAogICAgewogICAgICBpZDogYHRvcHBpbmdzLWxpc3QtJHt0aW1lc3RhbXAyICsgNn1gLAogICAgICB0eXBlOiAibGlzdCIsCiAgICAgIGNvbnRlbnQ6ICI0MDBnIGNhbm5lZCBTYW4gTWFyemFubyB0b21hdG9lc1xuMjUwZyBmcmVzaCBtb3p6YXJlbGxhXG5GcmVzaCBiYXNpbCBsZWF2ZXNcbkV4dHJhIHZpcmdpbiBvbGl2ZSBvaWxcblNhbHQgYW5kIHBlcHBlciB0byB0YXN0ZSIsCiAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9CiAgICB9LAogICAgewogICAgICBpZDogYGluc3RydWN0aW9ucy1oZWFkaW5nLSR7dGltZXN0YW1wMiArIDd9YCwKICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgIGNvbnRlbnQ6ICJcdXsxRjQ2OH1cdTIwMERcdXsxRjM3M30gSW5zdHJ1Y3Rpb25zIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBzdGVwcy1saXN0LSR7dGltZXN0YW1wMiArIDh9YCwKICAgICAgdHlwZTogImxpc3QiLAogICAgICBjb250ZW50OiAiRGlzc29sdmUgeWVhc3QgaW4gd2FybSB3YXRlciBhbmQgbGV0IHN0YW5kIGZvciA1IG1pbnV0ZXNcbk1peCBmbG91ciBhbmQgc2FsdCwgY3JlYXRlIGEgd2VsbCBpbiBjZW50ZXJcbkFkZCB5ZWFzdCBtaXh0dXJlIGFuZCBvbGl2ZSBvaWxcbktuZWFkIGZvciAxMCBtaW51dGVzIHVudGlsIHNtb290aFxuTGV0IHJpc2UgZm9yIDEtMiBob3VycyB1bnRpbCBkb3VibGVkXG5QdW5jaCBkb3duIGFuZCBkaXZpZGUgaW50byBwb3J0aW9uc1xuUm9sbCBvdXQgZWFjaCBwb3J0aW9uIHRvIDEyLWluY2ggY2lyY2xlc1xuVG9wIHdpdGggY3J1c2hlZCB0b21hdG9lcywgbW96emFyZWxsYSwgYW5kIGJhc2lsXG5CYWtlIGF0IDQ3NVx4QjBGICgyNDVceEIwQykgZm9yIDEwLTEyIG1pbnV0ZXMiLAogICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgIH0sCiAgICB7CiAgICAgIGlkOiBgdGlwLSR7dGltZXN0YW1wMiArIDl9YCwKICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgY29udGVudDogIlBybyB0aXA6IEZvciBhbiBhdXRoZW50aWMgdGFzdGUsIHVzZSBhIHBpenphIHN0b25lIGFuZCBwcmVoZWF0IGl0IGluIHRoZSBvdmVuIGZvciBhdCBsZWFzdCAzMCBtaW51dGVzIGJlZm9yZSBiYWtpbmcuIgogICAgfSwKICAgIHsKICAgICAgaWQ6IGBkaXZpZGVyLSR7dGltZXN0YW1wMiArIDEwfWAsCiAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgY29udGVudDogIiIKICAgIH0sCiAgICB7CiAgICAgIGlkOiBgc2VydmluZ3MtJHt0aW1lc3RhbXAyICsgMTF9YCwKICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgIGNvbnRlbnQ6ICJTZXJ2aW5nczogNCBwaXp6YXMgfCBQcmVwIHRpbWU6IDIgaG91cnMgfCBDb29rIHRpbWU6IDEyIG1pbnV0ZXMiCiAgICB9CiAgXTsKfTsKdmFyIGluaXRpYWxpemVFZGl0b3JzID0gKGNvbnRhaW5lcikgPT4gewogIGNvbnN0IGVkaXRvcnMgPSB7fTsKICBlZGl0b3JzLmJhc2ljID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItYmFzaWMiKTsKICBlZGl0b3JzLmFydGljbGUgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci1hcnRpY2xlIik7CiAgZWRpdG9ycy5kcmFnRHJvcCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWRyYWdkcm9wIik7CiAgZWRpdG9ycy50dXRvcmlhbCA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXR1dG9yaWFsIik7CiAgZWRpdG9ycy5tZWV0aW5nID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItbWVldGluZyIpOwogIGVkaXRvcnMucmVjaXBlID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNlZGl0b3ItcmVjaXBlIik7CiAgZWRpdG9ycy50ZWNobmljYWwgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2VkaXRvci10ZWNobmljYWwiKTsKICBlZGl0b3JzLmZvcm1JbnRlZ3JhdGlvbiA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWZvcm0taW50ZWdyYXRpb24iKTsKICBlZGl0b3JzLnByb2dyYW1tYXRpYyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLXByb2dyYW1tYXRpYyIpOwogIGVkaXRvcnMuZXhwb3J0RGVtbyA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjZWRpdG9yLWV4cG9ydCIpOwogIHJldHVybiBlZGl0b3JzOwp9Owp2YXIgc2V0dXBQcm9ncmFtbWF0aWNEZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgcmVwb3J0QnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVwb3J0Iik7CiAgY29uc3QgcmVjaXBlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZ2VuZXJhdGUtcmVjaXBlIik7CiAgY29uc3QgY2xlYXJCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1jbGVhci1lZGl0b3IiKTsKICBpZiAocmVwb3J0QnRuKSB7CiAgICByZXBvcnRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoZ2VuZXJhdGVSZXBvcnRCbG9ja3MoKSk7CiAgICB9KTsKICB9CiAgaWYgKHJlY2lwZUJ0bikgewogICAgcmVjaXBlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBlZGl0b3IuaW1wb3J0QmxvY2tzKGdlbmVyYXRlUmVjaXBlQmxvY2tzKCkpOwogICAgfSk7CiAgfQogIGlmIChjbGVhckJ0bikgewogICAgY2xlYXJCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGVkaXRvci5pbXBvcnRCbG9ja3MoW10pOwogICAgfSk7CiAgfQp9Owp2YXIgc2V0dXBFeHBvcnREZW1vID0gKGNvbnRhaW5lciwgZWRpdG9yKSA9PiB7CiAgY29uc3QgZXhwb3J0QmxvY2tzQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LWJsb2NrcyIpOwogIGNvbnN0IGV4cG9ydEh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1leHBvcnQtaHRtbCIpOwogIGNvbnN0IGV4cG9ydE1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tZXhwb3J0LW1hcmtkb3duIik7CiAgY29uc3Qgc2F2ZVN0YXRlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2F2ZS1zdGF0ZSIpOwogIGNvbnN0IHJlc3RvcmVTdGF0ZUJ0biA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIjYnRuLXJlc3RvcmUtc3RhdGUiKTsKICBsZXQgc2F2ZWRTdGF0ZSA9IG51bGw7CiAgaWYgKGV4cG9ydEJsb2Nrc0J0bikgewogICAgZXhwb3J0QmxvY2tzQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBjb25zdCBibG9ja3MgPSBlZGl0b3IuZXhwb3J0QmxvY2tzKCk7CiAgICAgIGNvbnNvbGUubG9nKCJFeHBvcnRlZCBibG9ja3M6IiwgYmxvY2tzKTsKICAgICAgYWxlcnQoYEV4cG9ydGVkICR7YmxvY2tzLmxlbmd0aH0gYmxvY2tzIHRvIGNvbnNvbGUuIENoZWNrIGRldmVsb3BlciB0b29scy5gKTsKICAgIH0pOwogIH0KICBpZiAoZXhwb3J0SHRtbEJ0bikgewogICAgZXhwb3J0SHRtbEJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgY29uc3QgaHRtbDE4ID0gZWRpdG9yLmV4cG9ydEFzSHRtbCgpOwogICAgICBjb25zb2xlLmxvZygiSFRNTCBFeHBvcnQ6IiwgaHRtbDE4KTsKICAgICAgYWxlcnQoIkhUTUwgZXhwb3J0ZWQgdG8gY29uc29sZS4gQ2hlY2sgZGV2ZWxvcGVyIHRvb2xzLiIpOwogICAgfSk7CiAgfQogIGlmIChleHBvcnRNYXJrZG93bkJ0bikgewogICAgZXhwb3J0TWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGNvbnN0IG1hcmtkb3duID0gZWRpdG9yLmV4cG9ydEFzTWFya2Rvd24oKTsKICAgICAgY29uc29sZS5sb2coIk1hcmtkb3duIEV4cG9ydDoiLCBtYXJrZG93bik7CiAgICAgIGFsZXJ0KCJNYXJrZG93biBleHBvcnRlZCB0byBjb25zb2xlLiBDaGVjayBkZXZlbG9wZXIgdG9vbHMuIik7CiAgICB9KTsKICB9CiAgaWYgKHNhdmVTdGF0ZUJ0bikgewogICAgc2F2ZVN0YXRlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBzYXZlZFN0YXRlID0gZWRpdG9yLmV4cG9ydFN0YXRlKCk7CiAgICAgIGNvbnNvbGUubG9nKCJTYXZlZCBzdGF0ZToiLCBzYXZlZFN0YXRlKTsKICAgICAgYWxlcnQoIkVkaXRvciBzdGF0ZSBzYXZlZCEiKTsKICAgIH0pOwogIH0KICBpZiAocmVzdG9yZVN0YXRlQnRuKSB7CiAgICByZXN0b3JlU3RhdGVCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGlmIChzYXZlZFN0YXRlKSB7CiAgICAgICAgZWRpdG9yLmltcG9ydFN0YXRlKHNhdmVkU3RhdGUpOwogICAgICAgIGFsZXJ0KCJFZGl0b3Igc3RhdGUgcmVzdG9yZWQhIik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYWxlcnQoIk5vIHNhdmVkIHN0YXRlIGZvdW5kLiBTYXZlIHN0YXRlIGZpcnN0ISIpOwogICAgICB9CiAgICB9KTsKICB9Cn07CnZhciBzZXR1cE91dHB1dEZvcm1hdERlbW8gPSAoY29udGFpbmVyLCBodG1sRWRpdG9yLCBtYXJrZG93bkVkaXRvcikgPT4gewogIGNvbnN0IGh0bWxCdG4gPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI2J0bi1zaG93LWh0bWwtb3V0cHV0Iik7CiAgY29uc3QgaHRtbFByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LWh0bWwiKTsKICBpZiAoaHRtbEJ0biAmJiBodG1sUHJldmlldyAmJiBodG1sRWRpdG9yKSB7CiAgICBodG1sQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICBodG1sUHJldmlldy50ZXh0Q29udGVudCA9IGh0bWxFZGl0b3IuZ2V0VmFsdWUoKTsKICAgICAgaHRtbFByZXZpZXcuY2xhc3NMaXN0LmFkZCgidmlzaWJsZSIpOwogICAgfSk7CiAgfQogIGNvbnN0IG1hcmtkb3duQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIiNidG4tc2hvdy1tYXJrZG93bi1vdXRwdXQiKTsKICBjb25zdCBtYXJrZG93blByZXZpZXcgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiI291dHB1dC1wcmV2aWV3LW1hcmtkb3duIik7CiAgaWYgKG1hcmtkb3duQnRuICYmIG1hcmtkb3duUHJldmlldyAmJiBtYXJrZG93bkVkaXRvcikgewogICAgbWFya2Rvd25CdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIG1hcmtkb3duUHJldmlldy50ZXh0Q29udGVudCA9IG1hcmtkb3duRWRpdG9yLmdldFZhbHVlKCk7CiAgICAgIG1hcmtkb3duUHJldmlldy5jbGFzc0xpc3QuYWRkKCJ2aXNpYmxlIik7CiAgICB9KTsKICB9Cn07CnZhciBwb3B1bGF0ZUluaXRpYWxDb250ZW50ID0gKGVkaXRvcnMpID0+IHsKICBpZiAoZWRpdG9ycy5hcnRpY2xlKSB7CiAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgY29uc3QgYXJ0aWNsZUJsb2NrcyA9IFsKICAgICAgICB7CiAgICAgICAgICBpZDogImludHJvLWhlYWRpbmctIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6ICJJbnRyb2R1Y3Rpb24gdG8gTW9kZXJuIFdlYiBEZXZlbG9wbWVudCIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiaW50cm8tcGFyYS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk1vZGVybiB3ZWIgZGV2ZWxvcG1lbnQgaGFzIGV2b2x2ZWQgc2lnbmlmaWNhbnRseSBvdmVyIHRoZSBwYXN0IGRlY2FkZS4gSW4gdGhpcyBhcnRpY2xlLCB3ZSdsbCBleHBsb3JlIHRoZSBrZXkgdGVjaG5vbG9naWVzIGFuZCBiZXN0IHByYWN0aWNlcyB0aGF0IGRlZmluZSB3ZWIgZGV2ZWxvcG1lbnQgaW4gMjAyNC4iCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIktleSBUZWNobm9sb2dpZXMiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogInRlY2gtbGlzdC0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgIGNvbnRlbnQ6ICJUeXBlU2NyaXB0IC0gVHlwZS1zYWZlIEphdmFTY3JpcHQgZGV2ZWxvcG1lbnRcbldlYiBDb21wb25lbnRzIC0gTmF0aXZlIGNvbXBvbmVudCBtb2RlbFxuRVMgTW9kdWxlcyAtIE1vZGVybiBtb2R1bGUgc3lzdGVtXG5XZWJBc3NlbWJseSAtIEhpZ2gtcGVyZm9ybWFuY2UgY29tcHV0aW5nIiwKICAgICAgICAgIG1ldGFkYXRhOiB7IGxpc3RUeXBlOiAib3JkZXJlZCIgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJxdW90ZS0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiAiVGhlIGJlc3Qgd2F5IHRvIHByZWRpY3QgdGhlIGZ1dHVyZSBpcyB0byBpbnZlbnQgaXQuIC0gQWxhbiBLYXkiCiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImV4YW1wbGUtaGVhZGluZy0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogIkNvZGUgRXhhbXBsZSIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiY29kZS1leGFtcGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgY29udGVudDogImNsYXNzIE1vZGVybldlYkFwcCBleHRlbmRzIEhUTUxFbGVtZW50IHtcbiAgY29uc3RydWN0b3IoKSB7XG4gICAgc3VwZXIoKTtcbiAgICB0aGlzLmF0dGFjaFNoYWRvdyh7IG1vZGU6ICdvcGVuJyB9KTtcbiAgfVxuICBcbiAgY29ubmVjdGVkQ2FsbGJhY2soKSB7XG4gICAgdGhpcy5yZW5kZXIoKTtcbiAgfVxufSIsCiAgICAgICAgICBtZXRhZGF0YTogeyBsYW5ndWFnZTogImphdmFzY3JpcHQiIH0KICAgICAgICB9CiAgICAgIF07CiAgICAgIGVkaXRvcnMuYXJ0aWNsZS5pbXBvcnRCbG9ja3MoYXJ0aWNsZUJsb2Nrcyk7CiAgICB9LCA1MDApOwogIH0KICBpZiAoZWRpdG9ycy5kcmFnRHJvcCkgewogICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgIGNvbnN0IGRyYWdCbG9ja3MgPSBbCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLXRpdGxlLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMSIsCiAgICAgICAgICBjb250ZW50OiAiRHJhZyAmIERyb3AgRGVtbyIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1pbnRyby0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIlRoaXMgZWRpdG9yIGRlbW9uc3RyYXRlcyBkcmFnIGFuZCBkcm9wIGZ1bmN0aW9uYWxpdHkuIFRyeSBkcmFnZ2luZyB0aGVzZSBibG9ja3MgYXJvdW5kISIKICAgICAgICB9LAogICAgICAgIHsKICAgICAgICAgIGlkOiAiZHJhZy1oZWFkaW5nLSIgKyBEYXRlLm5vdygpLAogICAgICAgICAgdHlwZTogImhlYWRpbmctMiIsCiAgICAgICAgICBjb250ZW50OiAiSG93IEl0IFdvcmtzIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWxpc3QtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICBjb250ZW50OiAiSG92ZXIgb3ZlciBhbnkgYmxvY2sgdG8gc2VlIHRoZSBkcmFnIGhhbmRsZVxuQ2xpY2sgYW5kIGhvbGQgdGhlIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZ1xuRHJhZyB0byByZW9yZGVyIGJsb2Nrc1xuUmVsZWFzZSB0byBkcm9wIGluIHRoZSBuZXcgcG9zaXRpb24iLAogICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6ICJvcmRlcmVkIiB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBpZDogImRyYWctcXVvdGUtIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAicXVvdGUiLAogICAgICAgICAgY29udGVudDogIlRoZSBkcmFnIGFuZCBkcm9wIGZlYXR1cmUgbWFrZXMgaXQgZWFzeSB0byByZW9yZ2FuaXplIHlvdXIgY29udGVudCB3aXRob3V0IGN1dHRpbmcgYW5kIHBhc3RpbmcuIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWRpdmlkZXItIiArIERhdGUubm93KCksCiAgICAgICAgICB0eXBlOiAiZGl2aWRlciIsCiAgICAgICAgICBjb250ZW50OiAiIgogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgaWQ6ICJkcmFnLWZvb3Rlci0iICsgRGF0ZS5ub3coKSwKICAgICAgICAgIHR5cGU6ICJwYXJhZ3JhcGgiLAogICAgICAgICAgY29udGVudDogIk5vdGU6IERpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkLCBidXQgb3RoZXIgYmxvY2tzIGNhbiBiZSBtb3ZlZCBhcm91bmQgdGhlbS4iCiAgICAgICAgfQogICAgICBdOwogICAgICBlZGl0b3JzLmRyYWdEcm9wLmltcG9ydEJsb2NrcyhkcmFnQmxvY2tzKTsKICAgIH0sIDYwMCk7CiAgfQp9Owp2YXIgZGVtb0Z1bmM0MCA9ICgpID0+IGIyYAogIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCA1MDApKTsKICBjb25zdCBlZGl0b3JzID0gaW5pdGlhbGl6ZUVkaXRvcnMoZWxlbWVudEFyZyk7CiAgaWYgKGVkaXRvcnMucHJvZ3JhbW1hdGljKSB7CiAgICBzZXR1cFByb2dyYW1tYXRpY0RlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5wcm9ncmFtbWF0aWMpOwogIH0KICBpZiAoZWRpdG9ycy5leHBvcnREZW1vKSB7CiAgICBzZXR1cEV4cG9ydERlbW8oZWxlbWVudEFyZywgZWRpdG9ycy5leHBvcnREZW1vKTsKICB9CiAgc2V0dXBPdXRwdXRGb3JtYXREZW1vKGVsZW1lbnRBcmcsIGVkaXRvcnMubWVldGluZywgZWRpdG9ycy5yZWNpcGUpOwogIHBvcHVsYXRlSW5pdGlhbENvbnRlbnQoZWRpdG9ycyk7CiAgY29uc29sZS5sb2coIldZU0lXWUcgRGVtbyBpbml0aWFsaXplZCB3aXRoIGVkaXRvcnM6IiwgT2JqZWN0LmtleXMoZWRpdG9ycykpOwp9fT4KICA8c3R5bGU+CiAgICAke2lgCiAgICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMzJweDsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG1heC13aWR0aDogMTIwMHB4OwogICAgICAgIG1hcmdpbjogMCBhdXRvOwogICAgICB9CiAgICAgIAogICAgICBkZWVzLXBhbmVsIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGFuZWwtZGVzY3JpcHRpb24gewogICAgICAgIG1hcmdpbi10b3A6IDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5wYW5lbC1kZXNjcmlwdGlvbiB7CiAgICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maXQsIG1pbm1heCgyMDBweCwgMWZyKSk7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5mZWF0dXJlLWljb24gewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZmVhdHVyZS1pdGVtIHsKICAgICAgICAgIGNvbG9yOiAjYWFhOwogICAgICAgIH0KICAgICAgICAuZmVhdHVyZS1pY29uIHsKICAgICAgICAgIGNvbG9yOiAjNGQ5NGZmOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLnNob3J0Y3V0cy1ib3ggewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMTAyLCAyMDQsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtYm94IHsKICAgICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNzcsIDE0OCwgMjU1LCAwLjEpOwogICAgICAgICAgYm9yZGVyLWNvbG9yOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4zKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgIG1hcmdpbjogMCAwIDEycHggMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogIzAwNjZjYzsKICAgICAgfQoKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC5zaG9ydGN1dHMtdGl0bGUgewogICAgICAgICAgY29sb3I6ICM0ZDk0ZmY7CiAgICAgICAgfQogICAgICB9CgogICAgICAuc2hvcnRjdXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTgwcHgsIDFmcikpOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuc2hvcnRjdXQtaXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnNob3J0Y3V0LWtleSB7CiAgICAgICAgYmFja2dyb3VuZDogI2YwZjBmMDsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzMzMzsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnNob3J0Y3V0LWl0ZW0gewogICAgICAgICAgY29sb3I6ICNiYmI7CiAgICAgICAgfQogICAgICAgIC5zaG9ydGN1dC1rZXkgewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm91dHB1dC1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMzIwcHgsIDFmcikpOwogICAgICAgIGdhcDogMjRweDsKICAgICAgICBtYXJnaW4tdG9wOiAyNHB4OwogICAgICB9CgogICAgICAub3V0cHV0LWNhcmQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5vdXRwdXQtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAub3V0cHV0LXByZXZpZXcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgxNSwgMjMsIDQyLCAwLjA0KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjMGYxNzJhKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDE1LCAyMywgNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgTW9ubycsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIG1heC1oZWlnaHQ6IDI4MHB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdChbdGhlbWU9J2RhcmsnXSkgLm91dHB1dC1wcmV2aWV3IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1MCwgMjUwLCAyNTAsIDAuMDYpOwogICAgICAgIGJvcmRlci1jb2xvcjogcmdiYSgyNTAsIDI1MCwgMjUwLCAwLjE1KTsKICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0LCAjZjRmNGY1KTsKICAgICAgfQoKICAgICAgLm91dHB1dC1wcmV2aWV3LnZpc2libGUgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogNzY4cHgpIHsKICAgICAgICAub3V0cHV0LWdyaWQgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQogICAgICB9CiAgICAgIAogICAgICAudGlwcy1ib3ggewogICAgICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjBmOGZmOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgQG1lZGlhIChwcmVmZXJzLWNvbG9yLXNjaGVtZTogZGFyaykgewogICAgICAgIC50aXBzLWJveCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDc3LCAxNDgsIDI1NSwgMC4xKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWJveCBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICBAbWVkaWEgKHByZWZlcnMtY29sb3Itc2NoZW1lOiBkYXJrKSB7CiAgICAgICAgLnRpcHMtYm94IHN0cm9uZyB7CiAgICAgICAgICBjb2xvcjogIzRkOTRmZjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC50aXBzLWxpc3QgewogICAgICAgIG1hcmdpbjogOHB4IDAgMCAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLnRpcHMtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmJ1dHRvbi1ncm91cCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjZGRkOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjZjhmOGY4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC1mYW1pbHk6IGluaGVyaXQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjZThlOGU4OwogICAgICAgIGJvcmRlci1jb2xvcjogI2NjYzsKICAgICAgfQogICAgICAKICAgICAgLmRlbW8tYnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDFweCk7CiAgICAgIH0KICAgICAgCiAgICAgIEBtZWRpYSAocHJlZmVycy1jb2xvci1zY2hlbWU6IGRhcmspIHsKICAgICAgICAuZGVtby1idXR0b24gewogICAgICAgICAgYmFja2dyb3VuZDogIzMzMzsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICAgIGNvbG9yOiAjZGRkOwogICAgICAgIH0KICAgICAgICAKICAgICAgICAuZGVtby1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogIzQ0NDsKICAgICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICB9CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZCB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAxMDIsIDIwNCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQuaHRtbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSg3NiwgMTc1LCA4MCwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQubWFya2Rvd24gewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAxNTIsIDAsIDAuMSk7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDE1NiwgMzksIDE3NiwgMC4xKTsKICAgICAgfQogICAgICAKICAgICAgLmV4cG9ydC1pbmZvLWNhcmQgc3Ryb25nIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLmJsb2NrcyBzdHJvbmcgewogICAgICAgIGNvbG9yOiAjMDA2NmNjOwogICAgICB9CiAgICAgIAogICAgICAuZXhwb3J0LWluZm8tY2FyZC5odG1sIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM0Q0FGNTA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLm1hcmtkb3duIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICNGRjk4MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkLnN0YXRlIHN0cm9uZyB7CiAgICAgICAgY29sb3I6ICM5QzI3QjA7CiAgICAgIH0KICAgICAgCiAgICAgIC5leHBvcnQtaW5mby1jYXJkIHAgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgfQogICAgYH0KICA8L3N0eWxlPgogIAogICAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiMS4gXHV7MUY2ODB9IE1vZGVybiBXWVNJV1lHIEVkaXRvciJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBBIHBvd2VyZnVsIGJsb2NrLWJhc2VkIGVkaXRvciB3aXRoIHNsYXNoIGNvbW1hbmRzLCBrZXlib2FyZCBzaG9ydGN1dHMsIGFuZCBtdWx0aXBsZSBvdXRwdXQgZm9ybWF0cy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBjb250ZW50IGNyZWF0aW9uLCBibG9nIHBvc3RzLCBkb2N1bWVudGF0aW9uLCBhbmQgbW9yZS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+U2xhc2ggY29tbWFuZHMgKC8pPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPktleWJvYXJkIHNob3J0Y3V0czwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5CbG9jay1iYXNlZCBlZGl0aW5nPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJmZWF0dXJlLWl0ZW0iPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iZmVhdHVyZS1pY29uIj7inJM8L3NwYW4+CiAgICAgICAgICAgIDxzcGFuPkRyYWcgJiBkcm9wIHJlb3JkZXJpbmc8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImZlYXR1cmUtaXRlbSI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmZWF0dXJlLWljb24iPuKckzwvc3Bhbj4KICAgICAgICAgICAgPHNwYW4+SFRNTCAmIE1hcmtkb3duIG91dHB1dDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5EYXJrIG1vZGUgc3VwcG9ydDwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmVhdHVyZS1pdGVtIj4KICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImZlYXR1cmUtaWNvbiI+4pyTPC9zcGFuPgogICAgICAgICAgICA8c3Bhbj5Nb2JpbGUgcmVzcG9uc2l2ZTwvc3Bhbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWJhc2ljIgogICAgICAgICAgbGFiZWw9IlJpY2ggVGV4dCBFZGl0b3IiIAogICAgICAgICAgZGVzY3JpcHRpb249IlN0YXJ0IHR5cGluZyBvciB1c2UgJy8nIHRvIGluc2VydCBkaWZmZXJlbnQgYmxvY2sgdHlwZXMiCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgoKICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dHMtYm94Ij4KICAgICAgICAgIDxoNCBjbGFzcz0ic2hvcnRjdXRzLXRpdGxlIj7ijKjvuI8gS2V5Ym9hcmQgU2hvcnRjdXRzPC9oND4KICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0cy1ncmlkIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+Lzwvc3Bhbj4gU2xhc2ggY29tbWFuZHMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPiM8L3NwYW4+IEhlYWRpbmcgMQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyM8L3NwYW4+IEhlYWRpbmcgMgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+IyMjPC9zcGFuPiBIZWFkaW5nIDMKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPj48L3NwYW4+IFF1b3RlCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij5cYFxgXGA8L3NwYW4+IENvZGUgYmxvY2sKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNob3J0Y3V0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPio8L3NwYW4+IG9yIDxzcGFuIGNsYXNzPSJzaG9ydGN1dC1rZXkiPi08L3NwYW4+IEJ1bGxldCBsaXN0CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaG9ydGN1dC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2hvcnRjdXQta2V5Ij4xLjwvc3Bhbj4gTnVtYmVyZWQgbGlzdAogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hvcnRjdXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InNob3J0Y3V0LWtleSI+LS0tPC9zcGFuPiBEaXZpZGVyCiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgICAgCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIyLiBcdXsxRjRERH0gQmxvZyBQb3N0IEV4YW1wbGUifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgUGVyZmVjdCBmb3IgY3JlYXRpbmcgcmljaCBjb250ZW50IHdpdGggbXVsdGlwbGUgYmxvY2sgdHlwZXMuIAogICAgICAgICAgVGhlIGVkaXRvciBwcmVzZXJ2ZXMgZm9ybWF0dGluZyBhbmQgcHJvdmlkZXMgYSBjbGVhbiBlZGl0aW5nIGV4cGVyaWVuY2UuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWFydGljbGUiCiAgICAgICAgICBsYWJlbD0iQmxvZyBQb3N0IENvbnRlbnQiIAogICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSB1c2luZyB2YXJpb3VzIGZvcm1hdHRpbmcgb3B0aW9ucyIKICAgICAgICAgIG91dHB1dEZvcm1hdD0iaHRtbCIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyIzLiBcdXsxRjUwMH0gRHJhZyAmIERyb3AgUmVvcmRlcmluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBFYXNpbHkgcmVhcnJhbmdlIHlvdXIgY29udGVudCBibG9ja3MgYnkgZHJhZ2dpbmcgdGhlbS4gCiAgICAgICAgICBIb3ZlciBvdmVyIGFueSBibG9jayB0byByZXZlYWwgdGhlIGRyYWcgaGFuZGxlIG9uIHRoZSBsZWZ0IHNpZGUuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICBpZD0iZWRpdG9yLWRyYWdkcm9wIgogICAgICAgICAgbGFiZWw9IkRyYWcgJiBEcm9wIERlbW8iIAogICAgICAgICAgZGVzY3JpcHRpb249IlRyeSBkcmFnZ2luZyBibG9ja3MgdG8gcmVvcmRlciB0aGVtIC0gaG92ZXIgdG8gc2VlIGRyYWcgaGFuZGxlcyIKICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0idGlwcy1ib3giPgogICAgICAgICAgPHN0cm9uZz7wn5KhIFRpcHM6PC9zdHJvbmc+CiAgICAgICAgICA8dWwgY2xhc3M9InRpcHMtbGlzdCI+CiAgICAgICAgICAgIDxsaT5Ib3ZlciBvdmVyIGFueSBibG9jayB0byBzZWUgdGhlIGRyYWcgaGFuZGxlICjii67ii64pIG9uIHRoZSBsZWZ0PC9saT4KICAgICAgICAgICAgPGxpPkNsaWNrIGFuZCBob2xkIHRoZSBkcmFnIGhhbmRsZSB0byBzdGFydCBkcmFnZ2luZzwvbGk+CiAgICAgICAgICAgIDxsaT5CbHVlIGluZGljYXRvcnMgc2hvdyB3aGVyZSB0aGUgYmxvY2sgd2lsbCBiZSBkcm9wcGVkPC9saT4KICAgICAgICAgICAgPGxpPkRpdmlkZXIgYmxvY2tzIGNhbm5vdCBiZSBkcmFnZ2VkPC9saT4KICAgICAgICAgICAgPGxpPlRoZSBlZGl0b3IgbWFpbnRhaW5zIGZvY3VzIG9uIHRoZSBtb3ZlZCBibG9jayBhZnRlciBkcm9wcGluZzwvbGk+CiAgICAgICAgICA8L3VsPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNC4gXHV7MUY0REF9IFR1dG9yaWFsICYgRG9jdW1lbnRhdGlvbiJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcHJlaGVuc2l2ZSB0dXRvcmlhbHMgYW5kIGRvY3VtZW50YXRpb24gd2l0aCBjb2RlIGV4YW1wbGVzLCBsaXN0cywgYW5kIHN0cnVjdHVyZWQgY29udGVudC4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdHV0b3JpYWwiCiAgICAgICAgICBsYWJlbD0iR2l0IFR1dG9yaWFsIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdGVwLWJ5LXN0ZXAgZ3VpZGUgd2l0aCBjb21tYW5kcyBhbmQgZXhwbGFuYXRpb25zIgogICAgICAgICAgb3V0cHV0Rm9ybWF0PSJtYXJrZG93biIKICAgICAgICAgIHZhbHVlPSIjIEdpdCBUdXRvcmlhbCBmb3IgQmVnaW5uZXJzCgpHaXQgaXMgYSBkaXN0cmlidXRlZCB2ZXJzaW9uIGNvbnRyb2wgc3lzdGVtIHRoYXQgaGVscHMgeW91IHRyYWNrIGNoYW5nZXMgaW4geW91ciBjb2RlIG92ZXIgdGltZS4gVGhpcyB0dXRvcmlhbCB3aWxsIGd1aWRlIHlvdSB0aHJvdWdoIHRoZSBiYXNpY3MuCgojIyBQcmVyZXF1aXNpdGVzCgpCZWZvcmUgc3RhcnRpbmcsIGVuc3VyZSB5b3UgaGF2ZToKCi0gR2l0IGluc3RhbGxlZCBvbiB5b3VyIHN5c3RlbQotIEEgdGV4dCBlZGl0b3Igb3IgSURFCi0gQmFzaWMgY29tbWFuZCBsaW5lIGtub3dsZWRnZQoKIyMgR2V0dGluZyBTdGFydGVkCgojIyMgMS4gQ29uZmlndXJlIEdpdAoKRmlyc3QsIHNldCB1cCB5b3VyIGlkZW50aXR5OgoKXGBcYFxgYmFzaApnaXQgY29uZmlnIC0tZ2xvYmFsIHVzZXIubmFtZSAmcXVvdDtZb3VyIE5hbWUmcXVvdDsKZ2l0IGNvbmZpZyAtLWdsb2JhbCB1c2VyLmVtYWlsICZxdW90O3lvdXIuZW1haWxAZXhhbXBsZS5jb20mcXVvdDsKXGBcYFxgCgojIyMgMi4gSW5pdGlhbGl6ZSBhIFJlcG9zaXRvcnkKCkNyZWF0ZSBhIG5ldyBHaXQgcmVwb3NpdG9yeToKClxgXGBcYGJhc2gKbWtkaXIgbXktcHJvamVjdApjZCBteS1wcm9qZWN0CmdpdCBpbml0ClxgXGBcYAoKIyMjIDMuIEJhc2ljIEdpdCBXb3JrZmxvdwoKIyMjIyBBZGRpbmcgRmlsZXMKCkNyZWF0ZSBhIGZpbGUgYW5kIGFkZCBpdCB0byBzdGFnaW5nOgoKXGBcYFxgYmFzaAplY2hvICZxdW90OyMgTXkgUHJvamVjdCZxdW90OyA+IFJFQURNRS5tZApnaXQgYWRkIFJFQURNRS5tZApcYFxgXGAKCiMjIyMgQ29tbWl0dGluZyBDaGFuZ2VzCgpcYFxgXGBiYXNoCmdpdCBjb21taXQgLW0gJnF1b3Q7SW5pdGlhbCBjb21taXQmcXVvdDsKXGBcYFxgCgo+ICoqQmVzdCBQcmFjdGljZToqKiBXcml0ZSBjbGVhciwgZGVzY3JpcHRpdmUgY29tbWl0IG1lc3NhZ2VzIHRoYXQgZXhwbGFpbiB3aGF0IGNoYW5nZXMgd2VyZSBtYWRlIGFuZCB3aHkuCgojIyMgNC4gV29ya2luZyB3aXRoIEJyYW5jaGVzCgpCcmFuY2hlcyBhbGxvdyB5b3UgdG8gd29yayBvbiBmZWF0dXJlcyBpbmRlcGVuZGVudGx5OgoKXGBcYFxgYmFzaAojIENyZWF0ZSBhbmQgc3dpdGNoIHRvIGEgbmV3IGJyYW5jaApnaXQgY2hlY2tvdXQgLWIgZmVhdHVyZS1icmFuY2gKCiMgTWFrZSBjaGFuZ2VzIGFuZCBjb21taXQKZ2l0IGFkZCAuCmdpdCBjb21taXQgLW0gJnF1b3Q7QWRkIG5ldyBmZWF0dXJlJnF1b3Q7CgojIFN3aXRjaCBiYWNrIHRvIG1haW4KZ2l0IGNoZWNrb3V0IG1haW4KCiMgTWVyZ2UgdGhlIGZlYXR1cmUKZ2l0IG1lcmdlIGZlYXR1cmUtYnJhbmNoClxgXGBcYAoKLS0tCgojIyBDb21tb24gQ29tbWFuZHMgUmVmZXJlbmNlCgp8IENvbW1hbmQgfCBEZXNjcmlwdGlvbiB8CnwtLS0tLS0tLS18LS0tLS0tLS0tLS0tLXwKfCBcYGdpdCBzdGF0dXNcYCB8IENoZWNrIHJlcG9zaXRvcnkgc3RhdHVzIHwKfCBcYGdpdCBsb2dcYCB8IFZpZXcgY29tbWl0IGhpc3RvcnkgfAp8IFxgZ2l0IGRpZmZcYCB8IFNob3cgY2hhbmdlcyB8CnwgXGBnaXQgcHVsbFxgIHwgRmV0Y2ggYW5kIG1lcmdlIGNoYW5nZXMgfAp8IFxgZ2l0IHB1c2hcYCB8IFVwbG9hZCBjaGFuZ2VzIHRvIHJlbW90ZSB8CgojIyBOZXh0IFN0ZXBzCgoxLiBMZWFybiBhYm91dCByZW1vdGUgcmVwb3NpdG9yaWVzCjIuIEV4cGxvcmUgYWR2YW5jZWQgR2l0IGZlYXR1cmVzCjMuIFByYWN0aWNlIHdpdGggcmVhbCBwcm9qZWN0cwo0LiBDb250cmlidXRlIHRvIG9wZW4gc291cmNlCgoqKkhhcHB5IGNvZGluZyEqKiDwn5qAIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjUuIFx1ezFGNTA0fSBPdXRwdXQgRm9ybWF0cyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDaG9vc2UgYmV0d2VlbiBIVE1MIGFuZCBNYXJrZG93biBvdXRwdXQgZm9ybWF0cyBkZXBlbmRpbmcgb24geW91ciBuZWVkcy4gCiAgICAgICAgICBQZXJmZWN0IGZvciBzdGF0aWMgc2l0ZSBnZW5lcmF0b3JzLCBkb2N1bWVudGF0aW9uIHN5c3RlbXMsIG9yIGFueSBjb250ZW50IG1hbmFnZW1lbnQgd29ya2Zsb3cuCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1ncmlkIj4KICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1jYXJkIj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgICBpZD0iZWRpdG9yLW1lZXRpbmciCiAgICAgICAgICAgICAgbGFiZWw9Ik1lZXRpbmcgTm90ZXMiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJTdHJ1Y3R1cmVkIG1lZXRpbmcgZG9jdW1lbnRhdGlvbiIKICAgICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgICAgICAgdmFsdWU9IjxoMj5RNCBQbGFubmluZyBNZWV0aW5nPC9oMj48cD48c3Ryb25nPkRhdGU6PC9zdHJvbmc+IERlY2VtYmVyIDE1LCAyMDI0PGJyPjxzdHJvbmc+QXR0ZW5kZWVzOjwvc3Ryb25nPiBQcm9kdWN0IFRlYW0sIEVuZ2luZWVyaW5nLCBEZXNpZ248L3A+PGgzPkFnZW5kYSBJdGVtczwvaDM+PG9sPjxsaT5SZXZpZXcgUTMgYWNoaWV2ZW1lbnRzPC9saT48bGk+U2V0IFE0IG9iamVjdGl2ZXM8L2xpPjxsaT5SZXNvdXJjZSBhbGxvY2F0aW9uPC9saT48bGk+VGltZWxpbmUgZGlzY3Vzc2lvbjwvbGk+PC9vbD48aDM+S2V5IERlY2lzaW9uczwvaDM+PHVsPjxsaT5MYXVuY2ggbmV3IGRhc2hib2FyZCBmZWF0dXJlIGJ5IGVuZCBvZiBKYW51YXJ5PC9saT48bGk+SW5jcmVhc2UgZW5naW5lZXJpbmcgdGVhbSBieSAyIGRldmVsb3BlcnM8L2xpPjxsaT5JbXBsZW1lbnQgd2Vla2x5IGRlc2lnbiByZXZpZXdzPC9saT48L3VsPjxibG9ja3F1b3RlPiZxdW90O0ZvY3VzIG9uIHVzZXIgZXhwZXJpZW5jZSBpbXByb3ZlbWVudHMgYmFzZWQgb24gUTMgZmVlZGJhY2smcXVvdDsgLSBQcm9kdWN0IE1hbmFnZXI8L2Jsb2NrcXVvdGU+PGgzPkFjdGlvbiBJdGVtczwvaDM+PHVsPjxsaT5TYXJhaDogQ3JlYXRlIGRldGFpbGVkIHByb2plY3QgdGltZWxpbmU8L2xpPjxsaT5NaWtlOiBEcmFmdCB0ZWNobmljYWwgcmVxdWlyZW1lbnRzPC9saT48bGk+TGlzYTogU2NoZWR1bGUgdXNlciByZXNlYXJjaCBzZXNzaW9uczwvbGk+PC91bD48aHI+PHA+TmV4dCBtZWV0aW5nOiBKYW51YXJ5IDUsIDIwMjU8L3A+IgogICAgICAgICAgICA+PC9kZWVzLWlucHV0LXd5c2l3eWc+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im91dHB1dC1hY3Rpb25zIj4KICAgICAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tc2hvdy1odG1sLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IEhUTUwgT3V0cHV0PC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8cHJlIGlkPSJvdXRwdXQtcHJldmlldy1odG1sIiBjbGFzcz0ib3V0cHV0LXByZXZpZXciIGFyaWEtbGl2ZT0icG9saXRlIj48L3ByZT4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJvdXRwdXQtY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcgCiAgICAgICAgICAgICAgaWQ9ImVkaXRvci1yZWNpcGUiCiAgICAgICAgICAgICAgbGFiZWw9IlJlY2lwZSBCbG9nIFBvc3QiIAogICAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJGb29kIGJsb2cgd2l0aCBtaXhlZCBjb250ZW50IgogICAgICAgICAgICAgIG91dHB1dEZvcm1hdD0ibWFya2Rvd24iCiAgICAgICAgICAgICAgdmFsdWU9IiMgVWx0aW1hdGUgQ2hvY29sYXRlIENoaXAgQ29va2llcwoKVGhlcmUncyBub3RoaW5nIHF1aXRlIGxpa2UgdGhlIHNtZWxsIG9mIGZyZXNobHkgYmFrZWQgY2hvY29sYXRlIGNoaXAgY29va2llcy4gVGhpcyByZWNpcGUgaGFzIGJlZW4gcGVyZmVjdGVkIG92ZXIgeWVhcnMgb2YgdGVzdGluZyEKCiMjIEluZ3JlZGllbnRzCgotIDLCvCBjdXBzIGFsbC1wdXJwb3NlIGZsb3VyCi0gMSB0c3AgYmFraW5nIHNvZGEKLSAxIHRzcCBzYWx0Ci0gMSBjdXAgYnV0dGVyLCBzb2Z0ZW5lZAotIMK+IGN1cCBncmFudWxhdGVkIHN1Z2FyCi0gwr4gY3VwIHBhY2tlZCBicm93biBzdWdhcgotIDIgbGFyZ2UgZWdncwotIDIgdHNwIHZhbmlsbGEgZXh0cmFjdAotIDIgY3VwcyBjaG9jb2xhdGUgY2hpcHMKCiMjIEluc3RydWN0aW9ucwoKIyMjIFN0ZXAgMTogUHJlcGFyYXRpb24KClByZWhlYXQgeW91ciBvdmVuIHRvICoqMzc1wrBGICgxOTDCsEMpKiouIFRoaXMgdGVtcGVyYXR1cmUgaXMgY3J1Y2lhbCBmb3IgYWNoaWV2aW5nIHRoZSBwZXJmZWN0IHRleHR1cmUuCgojIyMgU3RlcCAyOiBNaXggRHJ5IEluZ3JlZGllbnRzCgpJbiBhIG1lZGl1bSBib3dsLCB3aGlzayB0b2dldGhlcjoKCjEuIEZsb3VyCjIuIEJha2luZyBzb2RhCjMuIFNhbHQKCiMjIyBTdGVwIDM6IENyZWFtIEJ1dHRlciBhbmQgU3VnYXJzCgpcYFxgXGAKQ3JlYW0gYnV0dGVyIGFuZCBzdWdhcnMgZm9yIDMtNCBtaW51dGVzCnVudGlsIGxpZ2h0IGFuZCBmbHVmZnkKXGBcYFxgCgo+ICoqUHJvIHRpcDoqKiBSb29tIHRlbXBlcmF0dXJlIGluZ3JlZGllbnRzIG1peCBiZXR0ZXIgYW5kIGNyZWF0ZSBhIG1vcmUgdW5pZm9ybSBkb3VnaC4KCiMjIyBTdGVwIDQ6IEFkZCBXZXQgSW5ncmVkaWVudHMKCkJlYXQgaW4gZWdncyBvbmUgYXQgYSB0aW1lLCB0aGVuIGFkZCB2YW5pbGxhIGV4dHJhY3QuCgojIyMgU3RlcCA1OiBDb21iaW5lIGFuZCBCYWtlCgpHcmFkdWFsbHkgYmxlbmQgaW4gZmxvdXIgbWl4dHVyZSwgdGhlbiBzdGlyIGluIGNob2NvbGF0ZSBjaGlwcy4gRHJvcCByb3VuZGVkIHRhYmxlc3Bvb25zIG9udG8gdW5ncmVhc2VkIGNvb2tpZSBzaGVldHMuCgotLS0KCioqQmFraW5nIHRpbWU6KiogOS0xMSBtaW51dGVzIG9yIHVudGlsIGdvbGRlbiBicm93bgoKKipZaWVsZDoqKiBBYm91dCA1IGRvemVuIGNvb2tpZXMiCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3V0cHV0LWFjdGlvbnMiPgogICAgICAgICAgICAgIDxidXR0b24gaWQ9ImJ0bi1zaG93LW1hcmtkb3duLW91dHB1dCIgY2xhc3M9ImRlbW8tYnV0dG9uIj5TaG93IE1hcmtkb3duIE91dHB1dDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPHByZSBpZD0ib3V0cHV0LXByZXZpZXctbWFya2Rvd24iIGNsYXNzPSJvdXRwdXQtcHJldmlldyIgYXJpYS1saXZlPSJwb2xpdGUiPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KCiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyI2LiBcdXsxRjNBOH0gQWR2YW5jZWQgRWRpdGluZyJ9PgogICAgICAgIDxwIGNsYXNzPSJwYW5lbC1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDcmVhdGUgY29tcGxleCBkb2N1bWVudHMgd2l0aCBtaXhlZCBjb250ZW50IHR5cGVzLiBUaGUgZWRpdG9yIGhhbmRsZXMgYWxsIGZvcm1hdHRpbmcgc2VhbWxlc3NseS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgIGlkPSJlZGl0b3ItdGVjaG5pY2FsIgogICAgICAgICAgbGFiZWw9IlRlY2huaWNhbCBEb2N1bWVudGF0aW9uIiAKICAgICAgICAgIGRlc2NyaXB0aW9uPSJDcmVhdGUgdGVjaG5pY2FsIGRvY3Mgd2l0aCBjb2RlIGV4YW1wbGVzIGFuZCBzdHJ1Y3R1cmVkIGNvbnRlbnQiCiAgICAgICAgICB2YWx1ZT0iPGgxPkFQSSBEb2N1bWVudGF0aW9uPC9oMT48cD5XZWxjb21lIHRvIG91ciBBUEkgZG9jdW1lbnRhdGlvbi4gQmVsb3cgeW91J2xsIGZpbmQgZXhhbXBsZXMgb2YgaG93IHRvIHVzZSBvdXIgZW5kcG9pbnRzLjwvcD48aDI+QXV0aGVudGljYXRpb248L2gyPjxwPkFsbCBBUEkgcmVxdWVzdHMgcmVxdWlyZSBhdXRoZW50aWNhdGlvbiB1c2luZyBhbiBBUEkga2V5OjwvcD48cHJlPjxjb2RlPkF1dGhvcml6YXRpb246IEJlYXJlciBZT1VSX0FQSV9LRVk8L2NvZGU+PC9wcmU+PGgyPkVuZHBvaW50czwvaDI+PGgzPkdFVCAvdXNlcnM8L2gzPjxwPlJldHJpZXZlIGEgbGlzdCBvZiB1c2VycyBmcm9tIHRoZSBzeXN0ZW0uPC9wPjxwcmU+PGNvZGU+Y3VybCAtWCBHRVQgaHR0cHM6Ly9hcGkuZXhhbXBsZS5jb20vdXNlcnMgXFwKICAtSCAmcXVvdDtBdXRob3JpemF0aW9uOiBCZWFyZXIgWU9VUl9BUElfS0VZJnF1b3Q7PC9jb2RlPjwvcHJlPjxibG9ja3F1b3RlPk5vdGU6IFJhdGUgbGltaXRpbmcgYXBwbGllcyB0byBhbGwgZW5kcG9pbnRzLiBZb3UgY2FuIG1ha2UgdXAgdG8gMTAwIHJlcXVlc3RzIHBlciBtaW51dGUuPC9ibG9ja3F1b3RlPjxoMz5QT1NUIC91c2VyczwvaDM+PHA+Q3JlYXRlIGEgbmV3IHVzZXIgaW4gdGhlIHN5c3RlbS48L3A+PHByZT48Y29kZT57CiAgJnF1b3Q7bmFtZSZxdW90OzogJnF1b3Q7Sm9obiBEb2UmcXVvdDssCiAgJnF1b3Q7ZW1haWwmcXVvdDs6ICZxdW90O2pvaG5AZXhhbXBsZS5jb20mcXVvdDssCiAgJnF1b3Q7cm9sZSZxdW90OzogJnF1b3Q7dXNlciZxdW90Owp9PC9jb2RlPjwvcHJlPjxocj48cD5Gb3IgbW9yZSBpbmZvcm1hdGlvbiwgcGxlYXNlIHJlZmVyIHRvIG91ciBjb21wbGV0ZSBkb2N1bWVudGF0aW9uLjwvcD4iCiAgICAgICAgICBvdXRwdXRGb3JtYXQ9Imh0bWwiCiAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICA8L2RlZXMtcGFuZWw+CgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiNy4gXHUyNjk5XHVGRTBGIEZvcm0gSW50ZWdyYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgU2VhbWxlc3NseSBpbnRlZ3JhdGVzIHdpdGggZGVlcy1mb3JtIGZvciBjb21wbGV0ZSBmb3JtIHNvbHV0aW9ucy4gCiAgICAgICAgICBBbGwgc3RhbmRhcmQgZm9ybSBmZWF0dXJlcyBsaWtlIHZhbGlkYXRpb24sIHJlcXVpcmVkIGZpZWxkcywgYW5kIGRhdGEgYmluZGluZyB3b3JrIG91dCBvZiB0aGUgYm94LgogICAgICAgIDwvcD4KICAgICAgICAKICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCAKICAgICAgICAgICAgbGFiZWw9IkFydGljbGUgVGl0bGUiIAogICAgICAgICAgICByZXF1aXJlZD0idHJ1ZSIKICAgICAgICAgICAgdmFsdWU9IkhvdyB0byBCdWlsZCBNb2Rlcm4gV2ViIEFwcGxpY2F0aW9ucyIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtd3lzaXd5ZyAKICAgICAgICAgICAgaWQ9ImVkaXRvci1mb3JtLWludGVncmF0aW9uIgogICAgICAgICAgICBsYWJlbD0iQXJ0aWNsZSBDb250ZW50IiAKICAgICAgICAgICAgZGVzY3JpcHRpb249IldyaXRlIHlvdXIgYXJ0aWNsZSBjb250ZW50IGhlcmUiCiAgICAgICAgICAgIHJlcXVpcmVkPSJ0cnVlIgogICAgICAgICAgICBvdXRwdXRGb3JtYXQ9Im1hcmtkb3duIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC13eXNpd3lnPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC10YWdzCiAgICAgICAgICAgIGxhYmVsPSJUYWdzIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iQWRkIHJlbGV2YW50IHRhZ3MgZm9yIHlvdXIgYXJ0aWNsZSIKICAgICAgICAgID48L2RlZXMtaW5wdXQtdGFncz4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjguIFx1ezFGOUU5fSBQcm9ncmFtbWF0aWMgQmxvY2sgQ3JlYXRpb24ifT4KICAgICAgICA8cCBjbGFzcz0icGFuZWwtZGVzY3JpcHRpb24iPgogICAgICAgICAgQ3JlYXRlIGNvbnRlbnQgcHJvZ3JhbW1hdGljYWxseSB1c2luZyB0aGUgYmxvY2sgQVBJIGZvciBkeW5hbWljIGRvY3VtZW50IGdlbmVyYXRpb24uCiAgICAgICAgPC9wPgogICAgICAgIAogICAgICAgIDxkZWVzLWlucHV0LXd5c2l3eWcKICAgICAgICAgIGlkPSJlZGl0b3ItcHJvZ3JhbW1hdGljIgogICAgICAgICAgbGFiZWw9IlByb2dyYW1tYXRpY2FsbHkgR2VuZXJhdGVkIENvbnRlbnQiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVGhpcyBjb250ZW50IHdhcyBjcmVhdGVkIHVzaW5nIHRoZSBpbXBvcnRCbG9ja3MgQVBJIgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlcG9ydCIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVwb3J0CiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWdlbmVyYXRlLXJlY2lwZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgR2VuZXJhdGUgUmVjaXBlCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWNsZWFyLWVkaXRvciIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgQ2xlYXIgRWRpdG9yCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgoKICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IjkuIFx1ezFGNEU0fSBFeHBvcnQvSW1wb3J0IEZlYXR1cmVzIn0+CiAgICAgICAgPHAgY2xhc3M9InBhbmVsLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIFRoZSBXWVNJV1lHIGVkaXRvciBwcm92aWRlcyBtdWx0aXBsZSBleHBvcnQgZm9ybWF0cyBhbmQgbG9zc2xlc3Mgc2F2ZS9yZXN0b3JlIGNhcGFiaWxpdGllcyBmb3IgbWF4aW11bSBmbGV4aWJpbGl0eS4KICAgICAgICA8L3A+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGJsb2NrcyI+CiAgICAgICAgICAgIDxzdHJvbmc+TG9zc2xlc3MgQmxvY2tzPC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhbmQgaW1wb3J0IHJhdyBibG9jayBzdHJ1Y3R1cmUgZm9yIHBlcmZlY3Qgcm91bmQtdHJpcCBlZGl0aW5nPC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJleHBvcnQtaW5mby1jYXJkIGh0bWwiPgogICAgICAgICAgICA8c3Ryb25nPkhUTUwgRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkdldCBjbGVhbiwgc2VtYW50aWMgSFRNTCByZWdhcmRsZXNzIG9mIG91dHB1dCBmb3JtYXQgc2V0dGluZzwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBtYXJrZG93biI+CiAgICAgICAgICAgIDxzdHJvbmc+TWFya2Rvd24gRXhwb3J0PC9zdHJvbmc+CiAgICAgICAgICAgIDxwPkV4cG9ydCBhcyBNYXJrZG93biBmb3IgZG9jcywgUkVBRE1FcywgYW5kIHN0YXRpYyBzaXRlczwvcD4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZXhwb3J0LWluZm8tY2FyZCBzdGF0ZSI+CiAgICAgICAgICAgIDxzdHJvbmc+U3RhdGUgTWFuYWdlbWVudDwvc3Ryb25nPgogICAgICAgICAgICA8cD5TYXZlIGFuZCByZXN0b3JlIGNvbXBsZXRlIGVkaXRvciBzdGF0ZSBpbmNsdWRpbmcgc2V0dGluZ3M8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICAKICAgICAgICA8ZGVlcy1pbnB1dC13eXNpd3lnCiAgICAgICAgICBpZD0iZWRpdG9yLWV4cG9ydCIKICAgICAgICAgIGxhYmVsPSJFeHBvcnQgRGVtbyBFZGl0b3IiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iVHJ5IHRoZSBleHBvcnQgYnV0dG9ucyBiZWxvdyB0byBzZWUgZGlmZmVyZW50IG91dHB1dCBmb3JtYXRzIgogICAgICAgICAgdmFsdWU9IjxoMT5Tb2Z0d2FyZSBSZWxlYXNlIE5vdGVzPC9oMT48cD48c3Ryb25nPlZlcnNpb24gMi41LjA8L3N0cm9uZz4gLSBSZWxlYXNlZCBEZWNlbWJlciAxNSwgMjAyNDwvcD48aDI+8J+OiSBOZXcgRmVhdHVyZXM8L2gyPjx1bD48bGk+QWRkZWQgZGFyayBtb2RlIHN1cHBvcnQgYWNyb3NzIGFsbCBjb21wb25lbnRzPC9saT48bGk+SW1wbGVtZW50ZWQgcmVhbC10aW1lIGNvbGxhYm9yYXRpb24gZmVhdHVyZXM8L2xpPjxsaT5OZXcgZGFzaGJvYXJkIGFuYWx5dGljcyB3aWRnZXRzPC9saT48bGk+RXhwb3J0IGZ1bmN0aW9uYWxpdHkgZm9yIGFsbCByZXBvcnQgdHlwZXM8L2xpPjwvdWw+PGgyPvCfkJsgQnVnIEZpeGVzPC9oMj48dWw+PGxpPkZpeGVkIG1lbW9yeSBsZWFrIGluIGRhdGEgcHJvY2Vzc2luZyBtb2R1bGU8L2xpPjxsaT5SZXNvbHZlZCBhdXRoZW50aWNhdGlvbiB0aW1lb3V0IGlzc3VlczwvbGk+PGxpPkNvcnJlY3RlZCB0aW1lem9uZSBoYW5kbGluZyBpbiBzY2hlZHVsZWQgdGFza3M8L2xpPjwvdWw+PGgyPuKaoSBQZXJmb3JtYW5jZSBJbXByb3ZlbWVudHM8L2gyPjxibG9ja3F1b3RlPlBhZ2UgbG9hZCB0aW1lcyByZWR1Y2VkIGJ5IDQwJSB0aHJvdWdoIGxhenkgbG9hZGluZyBhbmQgY29kZSBzcGxpdHRpbmc8L2Jsb2NrcXVvdGU+PGgyPvCflKcgVGVjaG5pY2FsIERldGFpbHM8L2gyPjxwcmU+PGNvZGU+Ly8gTmV3IEFQSSBlbmRwb2ludCBmb3IgYmF0Y2ggb3BlcmF0aW9ucwpQT1NUIC9hcGkvdjIvYmF0Y2gKewogICZxdW90O29wZXJhdGlvbnMmcXVvdDs6IFsKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtHRVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy91c2Vycy8xMjMmcXVvdDsgfSwKICAgIHsgJnF1b3Q7bWV0aG9kJnF1b3Q7OiAmcXVvdDtQVVQmcXVvdDssICZxdW90O3BhdGgmcXVvdDs6ICZxdW90Oy9zZXR0aW5ncyZxdW90OywgJnF1b3Q7Ym9keSZxdW90Ozogey4uLn0gfQogIF0KfTwvY29kZT48L3ByZT48aDI+8J+SoSBNaWdyYXRpb24gR3VpZGU8L2gyPjxvbD48bGk+VXBkYXRlIHlvdXIgZGVwZW5kZW5jaWVzIHRvIHRoZSBsYXRlc3QgdmVyc2lvbnM8L2xpPjxsaT5SdW4gZGF0YWJhc2UgbWlncmF0aW9uczogPGNvZGU+bnBtIHJ1biBtaWdyYXRlPC9jb2RlPjwvbGk+PGxpPkNsZWFyIGNhY2hlOiA8Y29kZT5ucG0gcnVuIGNhY2hlOmNsZWFyPC9jb2RlPjwvbGk+PGxpPlJlc3RhcnQgYWxsIHNlcnZpY2VzPC9saT48L29sPjxocj48cD5Gb3IgcXVlc3Rpb25zIG9yIGlzc3VlcywgcGxlYXNlIGNvbnRhY3QgdGhlIGRldmVsb3BtZW50IHRlYW0gb3IgZmlsZSBhIHRpY2tldCBpbiBvdXIgaXNzdWUgdHJhY2tlci48L3A+IgogICAgICAgID48L2RlZXMtaW5wdXQtd3lzaXd5Zz4KICAgICAgICAKICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JvdXAiPgogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1ibG9ja3MiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBCbG9ja3MKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tZXhwb3J0LWh0bWwiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIEV4cG9ydCBhcyBIVE1MCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLWV4cG9ydC1tYXJrZG93biIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgRXhwb3J0IGFzIE1hcmtkb3duCiAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGJ1dHRvbiBpZD0iYnRuLXNhdmUtc3RhdGUiIGNsYXNzPSJkZW1vLWJ1dHRvbiI+CiAgICAgICAgICAgIFNhdmUgU3RhdGUKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8YnV0dG9uIGlkPSJidG4tcmVzdG9yZS1zdGF0ZSIgY2xhc3M9ImRlbW8tYnV0dG9uIj4KICAgICAgICAgICAgUmVzdG9yZSBTdGF0ZQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGVlcy1wYW5lbD4KICAgIDwvZGl2PgogIDwvZGVlcy1kZW1vd3JhcHBlcj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zaG9ydGN1dHMuanMKdmFyIFd5c2l3eWdTaG9ydGN1dHMgPSBjbGFzcyB7CiAgc3RhdGljIEhFQURJTkdfUEFUVEVSTlMgPSBbCiAgICB7IHBhdHRlcm46IC9eI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMSIgfSwKICAgIHsgcGF0dGVybjogL14jI1tcc1x1MDBBMF0kLywgdHlwZTogImhlYWRpbmctMiIgfSwKICAgIHsgcGF0dGVybjogL14jIyNbXHNcdTAwQTBdJC8sIHR5cGU6ICJoZWFkaW5nLTMiIH0KICBdOwogIHN0YXRpYyBMSVNUX1BBVFRFUk5TID0gWwogICAgeyBwYXR0ZXJuOiAvXlsqLV1bXHNcdTAwQTBdJC8sIHR5cGU6ICJidWxsZXQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcLltcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0sCiAgICB7IHBhdHRlcm46IC9eKFxkKylcKVtcc1x1MDBBMF0kLywgdHlwZTogIm9yZGVyZWQiIH0KICBdOwogIHN0YXRpYyBRVU9URV9QQVRURVJOID0gL14+W1xzXHUwMEEwXSQvOwogIHN0YXRpYyBDT0RFX1BBVFRFUk4gPSAvXmBgYCQvOwogIHN0YXRpYyBESVZJREVSX1BBVFRFUk5TID0gWyItLS0iLCAiKioqIiwgIl9fXyJdOwogIHN0YXRpYyBjaGVja0hlYWRpbmdTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5IRUFESU5HX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja0xpc3RTaG9ydGN1dChjb250ZW50MykgewogICAgZm9yIChjb25zdCB7IHBhdHRlcm4sIHR5cGU6IHR5cGU1IH0gb2YgdGhpcy5MSVNUX1BBVFRFUk5TKSB7CiAgICAgIGlmIChwYXR0ZXJuLnRlc3QoY29udGVudDMpKSB7CiAgICAgICAgcmV0dXJuIHsgdHlwZTogImxpc3QiLCBsaXN0VHlwZTogdHlwZTUgfTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIHN0YXRpYyBjaGVja1F1b3RlU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLlFVT1RFX1BBVFRFUk4udGVzdChjb250ZW50Myk7CiAgfQogIHN0YXRpYyBjaGVja0NvZGVTaG9ydGN1dChjb250ZW50MykgewogICAgcmV0dXJuIHRoaXMuQ09ERV9QQVRURVJOLnRlc3QoY29udGVudDMpOwogIH0KICBzdGF0aWMgY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpIHsKICAgIHJldHVybiB0aGlzLkRJVklERVJfUEFUVEVSTlMuaW5jbHVkZXMoY29udGVudDMpOwogIH0KICBzdGF0aWMgZ2V0U2xhc2hNZW51SXRlbXMoKSB7CiAgICByZXR1cm4gWwogICAgICB7IHR5cGU6ICJwYXJhZ3JhcGgiLCBsYWJlbDogIlBhcmFncmFwaCIsIGljb246ICJsdWNpZGU6cGlsY3JvdyIgfSwKICAgICAgeyB0eXBlOiAiaGVhZGluZy0xIiwgbGFiZWw6ICJIZWFkaW5nIDEiLCBpY29uOiAibHVjaWRlOmhlYWRpbmcxIiB9LAogICAgICB7IHR5cGU6ICJoZWFkaW5nLTIiLCBsYWJlbDogIkhlYWRpbmcgMiIsIGljb246ICJsdWNpZGU6aGVhZGluZzIiIH0sCiAgICAgIHsgdHlwZTogImhlYWRpbmctMyIsIGxhYmVsOiAiSGVhZGluZyAzIiwgaWNvbjogImx1Y2lkZTpoZWFkaW5nMyIgfSwKICAgICAgeyB0eXBlOiAicXVvdGUiLCBsYWJlbDogIlF1b3RlIiwgaWNvbjogImx1Y2lkZTpxdW90ZSIgfSwKICAgICAgeyB0eXBlOiAiY29kZSIsIGxhYmVsOiAiQ29kZSBCbG9jayIsIGljb246ICJsdWNpZGU6ZmlsZUNvZGUiIH0sCiAgICAgIHsgdHlwZTogImxpc3QiLCBsYWJlbDogIkJ1bGxldCBMaXN0IiwgaWNvbjogImx1Y2lkZTpsaXN0IiB9LAogICAgICB7IHR5cGU6ICJpbWFnZSIsIGxhYmVsOiAiSW1hZ2UiLCBpY29uOiAibHVjaWRlOmltYWdlIiB9LAogICAgICB7IHR5cGU6ICJkaXZpZGVyIiwgbGFiZWw6ICJEaXZpZGVyIiwgaWNvbjogImx1Y2lkZTptaW51cyIgfSwKICAgICAgeyB0eXBlOiAieW91dHViZSIsIGxhYmVsOiAiWW91VHViZSIsIGljb246ICJsdWNpZGU6eW91dHViZSIgfSwKICAgICAgeyB0eXBlOiAibWFya2Rvd24iLCBsYWJlbDogIk1hcmtkb3duIiwgaWNvbjogImx1Y2lkZTpmaWxlVGV4dCIgfSwKICAgICAgeyB0eXBlOiAiaHRtbCIsIGxhYmVsOiAiSFRNTCIsIGljb246ICJsdWNpZGU6Y29kZSIgfSwKICAgICAgeyB0eXBlOiAiYXR0YWNobWVudCIsIGxhYmVsOiAiRmlsZSBBdHRhY2htZW50IiwgaWNvbjogImx1Y2lkZTpwYXBlcmNsaXAiIH0KICAgIF07CiAgfQogIHN0YXRpYyBnZW5lcmF0ZUJsb2NrSWQoKSB7CiAgICByZXR1cm4gYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtc2xhc2gtbWVudS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTbGFzaE1lbnUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNsYXNoLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2ZpbHRlcl9kZWNvcmF0b3JzOwogIGxldCBfZmlsdGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZmlsdGVyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRJbmRleF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVudVpJbmRleF9kZWNvcmF0b3JzOwogIGxldCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NsYXNoTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZmlsdGVyX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZW51WkluZGV4X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF92aXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInZpc2libGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpc2libGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudmlzaWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aXNpYmxlX2luaXRpYWxpemVycywgX3Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfcG9zaXRpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicG9zaXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBvc2l0aW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5wb3NpdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9maWx0ZXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZmlsdGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXIiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZmlsdGVyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5maWx0ZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyX2luaXRpYWxpemVycywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYxKHRoaXMsIG51bGwsIF9zZWxlY3RlZEluZGV4X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkSW5kZXgiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRJbmRleCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZEluZGV4X2luaXRpYWxpemVycywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MSh0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgaW5zdGFuY2U7CiAgICBzdGF0aWMgZ2V0SW5zdGFuY2UoKSB7CiAgICAgIGlmICghRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpIHsKICAgICAgICBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzU2xhc2hNZW51MigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoRGVlc1NsYXNoTWVudTIuaW5zdGFuY2UpOwogICAgICB9CiAgICAgIHJldHVybiBEZWVzU2xhc2hNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Mih0aGlzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9maWx0ZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGZpbHRlcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI2ZpbHRlcl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZmlsdGVyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2VsZWN0ZWRJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX2ZpbHRlcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZEluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZEluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjIodGhpcywgX3NlbGVjdGVkSW5kZXhfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2luaXRpYWxpemVycywgMWUzKSk7CiAgICBnZXQgbWVudVpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21lbnVaSW5kZXhfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51WkluZGV4KHZhbHVlMikgewogICAgICB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjYWxsYmFjayA9IChfX3J1bkluaXRpYWxpemVyczYyKHRoaXMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB3aWR0aDogMDsKICAgICAgICBoZWlnaHQ6IDA7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgICAgICBwYWRkaW5nOiA0cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMjBweDsKICAgICAgICBtYXgtaGVpZ2h0OiAzMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGFuaW1hdGlvbjogZmFkZUluU2NhbGUgMC4xNXMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgICAgIGZyb20gewogICAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgtMnB4KTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgdHJhbnNsYXRlWSgwKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gewogICAgICAgIHBhZGRpbmc6IDhweCAxMHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIsCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0gLmljb24gewogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5zbGFzaC1tZW51LWl0ZW06aG92ZXIgLmljb24sCiAgICAgIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMudmlzaWJsZSkKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgdGhpcy5zdHlsZS56SW5kZXggPSB0aGlzLm1lbnVaSW5kZXgudG9TdHJpbmcoKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gdGhpcy5nZXRGaWx0ZXJlZE1lbnVJdGVtcygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9InNsYXNoLW1lbnUiIAogICAgICAgIHN0eWxlPSJsZWZ0OiAke3RoaXMucG9zaXRpb24ueH1weDsgdG9wOiAke3RoaXMucG9zaXRpb24ueX1weDsiCiAgICAgICAgdGFiaW5kZXg9Ii0xIgogICAgICAgIGRhdGEtbWVudS10eXBlPSJzbGFzaCIKICAgICAgPgogICAgICAgICR7bWVudUl0ZW1zLm1hcCgoaXRlbSwgaW5kZXgyKSA9PiBiMmAKICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgIGNsYXNzPSJzbGFzaC1tZW51LWl0ZW0gJHtpbmRleDIgPT09IHRoaXMuc2VsZWN0ZWRJbmRleCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGRhdGEtaXRlbS10eXBlPSIke2l0ZW0udHlwZX0iCiAgICAgICAgICAgIGRhdGEtaXRlbS1pbmRleD0iJHtpbmRleDJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8ZGVlcy1pY29uIGNsYXNzPSJpY29uIiAuaWNvbj0iJHtpdGVtLmljb259IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICA8c3Bhbj4ke2l0ZW0ubGFiZWx9PC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGdldEZpbHRlcmVkTWVudUl0ZW1zKCkgewogICAgICBjb25zdCBhbGxJdGVtcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgcmV0dXJuIGFsbEl0ZW1zLmZpbHRlcigoaXRlbSkgPT4gdGhpcy5maWx0ZXIgPT09ICIiIHx8IGl0ZW0ubGFiZWwudG9Mb3dlckNhc2UoKS5pbmNsdWRlcyh0aGlzLmZpbHRlci50b0xvd2VyQ2FzZSgpKSk7CiAgICB9CiAgICBzZWxlY3RJdGVtKHR5cGU1KSB7CiAgICAgIGlmICh0aGlzLmNhbGxiYWNrKSB7CiAgICAgICAgdGhpcy5jYWxsYmFjayh0eXBlNSk7CiAgICAgIH0KICAgICAgdGhpcy5oaWRlKCk7CiAgICB9CiAgICBzaG93KHBvc2l0aW9uMywgY2FsbGJhY2spIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLmZpbHRlciA9ICIiOwogICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSAwOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHRoaXMuZmlsdGVyID0gIiI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVGaWx0ZXIoZmlsdGVyMikgewogICAgICB0aGlzLmZpbHRlciA9IGZpbHRlcjI7CiAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9IDA7CiAgICB9CiAgICBuYXZpZ2F0ZShkaXJlY3Rpb24pIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChkaXJlY3Rpb24gPT09ICJkb3duIikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRJbmRleCA9ICh0aGlzLnNlbGVjdGVkSW5kZXggKyAxKSAlIGl0ZW1zLmxlbmd0aDsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSB0aGlzLnNlbGVjdGVkSW5kZXggPT09IDAgPyBpdGVtcy5sZW5ndGggLSAxIDogdGhpcy5zZWxlY3RlZEluZGV4IC0gMTsKICAgICAgfQogICAgfQogICAgc2VsZWN0Q3VycmVudCgpIHsKICAgICAgY29uc3QgaXRlbXMgPSB0aGlzLmdldEZpbHRlcmVkTWVudUl0ZW1zKCk7CiAgICAgIGlmIChpdGVtc1t0aGlzLnNlbGVjdGVkSW5kZXhdKSB7CiAgICAgICAgdGhpcy5zZWxlY3RJdGVtKGl0ZW1zW3RoaXMuc2VsZWN0ZWRJbmRleF0udHlwZSk7CiAgICAgIH0KICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnNsYXNoLW1lbnUiKTsKICAgICAgICBpZiAobWVudSAmJiBtZW51LmNvbnRhaW5zKGUxMS50YXJnZXQpKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnNoYWRvd1Jvb3Q/LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgICAgY29uc3QgbWVudUl0ZW0gPSB0YXJnZXQuY2xvc2VzdCgiLnNsYXNoLW1lbnUtaXRlbSIpOwogICAgICAgIGlmIChtZW51SXRlbSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgICBjb25zdCBpdGVtVHlwZSA9IG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLXR5cGUiKTsKICAgICAgICAgIGlmIChpdGVtVHlwZSkgewogICAgICAgICAgICB0aGlzLnNlbGVjdEl0ZW0oaXRlbVR5cGUpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGNvbnN0IG1lbnVJdGVtID0gdGFyZ2V0LmNsb3Nlc3QoIi5zbGFzaC1tZW51LWl0ZW0iKTsKICAgICAgICBpZiAobWVudUl0ZW0pIHsKICAgICAgICAgIGNvbnN0IGluZGV4MiA9IHBhcnNlSW50KG1lbnVJdGVtLmdldEF0dHJpYnV0ZSgiZGF0YS1pdGVtLWluZGV4IikgfHwgIjAiLCAxMCk7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkSW5kZXggPSBpbmRleDI7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2xhc2gtbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSwgdHJ1ZSk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczYyKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2xhc2hNZW51MiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuc2VsZWN0aW9uLmpzCnZhciBXeXNpd3lnU2VsZWN0aW9uID0gY2xhc3MgewogIC8qKgogICAqIEdldHMgc2VsZWN0aW9uIGluZm8gdGhhdCB3b3JrcyBhY3Jvc3MgU2hhZG93IERPTSBib3VuZGFyaWVzCiAgICogQHBhcmFtIHNoYWRvd1Jvb3RzIC0gU2hhZG93IHJvb3RzIHRvIGluY2x1ZGUgaW4gdGhlIHNlbGVjdGlvbiBzZWFyY2gKICAgKi8KICBzdGF0aWMgZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgY29uc29sZS5sb2coIld5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyAtIHNlbGVjdGlvbjoiLCBzZWxlY3Rpb24sICJyYW5nZUNvdW50OiIsIHNlbGVjdGlvbj8ucmFuZ2VDb3VudCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuIG51bGw7CiAgICBpZiAoImdldENvbXBvc2VkUmFuZ2VzIiBpbiBzZWxlY3Rpb24gJiYgdHlwZW9mIHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyA9PT0gImZ1bmN0aW9uIikgewogICAgICBjb25zb2xlLmxvZygiVXNpbmcgZ2V0Q29tcG9zZWRSYW5nZXMgd2l0aCIsIHNoYWRvd1Jvb3RzLmxlbmd0aCwgInNoYWRvdyByb290cyIpOwogICAgICB0cnkgewogICAgICAgIGNvbnN0IHJhbmdlcyA9IHNlbGVjdGlvbi5nZXRDb21wb3NlZFJhbmdlcyh7IHNoYWRvd1Jvb3RzIH0pOwogICAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyByZXR1cm5lZCIsIHJhbmdlcy5sZW5ndGgsICJyYW5nZXMiKTsKICAgICAgICBpZiAocmFuZ2VzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHJhbmdlc1swXTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIHN0YXJ0Q29udGFpbmVyOiByYW5nZTIuc3RhcnRDb250YWluZXIsCiAgICAgICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgICAgIGVuZENvbnRhaW5lcjogcmFuZ2UyLmVuZENvbnRhaW5lciwKICAgICAgICAgICAgZW5kT2Zmc2V0OiByYW5nZTIuZW5kT2Zmc2V0LAogICAgICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUud2FybigiZ2V0Q29tcG9zZWRSYW5nZXMgZmFpbGVkLCBmYWxsaW5nIGJhY2sgdG8gZ2V0UmFuZ2VBdDoiLCBlcnJvcik7CiAgICAgIH0KICAgIH0gZWxzZSB7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRDb21wb3NlZFJhbmdlcyBub3QgYXZhaWxhYmxlLCB1c2luZyBmYWxsYmFjayIpOwogICAgfQogICAgaWYgKHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgcmV0dXJuIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiByYW5nZTIuc3RhcnRPZmZzZXQsCiAgICAgICAgZW5kQ29udGFpbmVyOiByYW5nZTIuZW5kQ29udGFpbmVyLAogICAgICAgIGVuZE9mZnNldDogcmFuZ2UyLmVuZE9mZnNldCwKICAgICAgICBjb2xsYXBzZWQ6IHJhbmdlMi5jb2xsYXBzZWQKICAgICAgfTsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBzZWxlY3Rpb24gaXMgd2l0aGluIGEgc3BlY2lmaWMgZWxlbWVudCAoY29uc2lkZXJpbmcgU2hhZG93IERPTSkKICAgKi8KICBzdGF0aWMgaXNTZWxlY3Rpb25JbkVsZW1lbnQoZWxlbWVudDQsIHNoYWRvd1Jvb3QpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBzaGFkb3dSb290ID8gdGhpcy5nZXRTZWxlY3Rpb25JbmZvKHNoYWRvd1Jvb3QpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgIHJldHVybiBmYWxzZTsKICAgIHJldHVybiBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSB8fCBlbGVtZW50NC5jb250YWlucyhzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIHNlbGVjdGVkIHRleHQgYWNyb3NzIFNoYWRvdyBET00gYm91bmRhcmllcwogICAqLwogIHN0YXRpYyBnZXRTZWxlY3RlZFRleHQoKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICByZXR1cm4gc2VsZWN0aW9uID8gc2VsZWN0aW9uLnRvU3RyaW5nKCkgOiAiIjsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIHJhbmdlIGZyb20gc2VsZWN0aW9uIGluZm8KICAgKi8KICBzdGF0aWMgY3JlYXRlUmFuZ2VGcm9tSW5mbyhpbmZvKSB7CiAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcmFuZ2UyLnNldFN0YXJ0KGluZm8uc3RhcnRDb250YWluZXIsIGluZm8uc3RhcnRPZmZzZXQpOwogICAgcmFuZ2UyLnNldEVuZChpbmZvLmVuZENvbnRhaW5lciwgaW5mby5lbmRPZmZzZXQpOwogICAgcmV0dXJuIHJhbmdlMjsKICB9CiAgLyoqCiAgICogU2V0cyBzZWxlY3Rpb24gZnJvbSBhIHJhbmdlICh3b3JrcyB3aXRoIFNoYWRvdyBET00pCiAgICovCiAgc3RhdGljIHNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpIHsKICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgIGlmIChzZWxlY3Rpb24pIHsKICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICBzZWxlY3Rpb24uYWRkUmFuZ2UocmFuZ2UyKTsKICAgIH0KICB9CiAgLyoqCiAgICogR2V0cyBjdXJzb3IgcG9zaXRpb24gcmVsYXRpdmUgdG8gYSBzcGVjaWZpYyBlbGVtZW50CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KGVsZW1lbnQ0LCAuLi5zaGFkb3dSb290cykgewogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IHNoYWRvd1Jvb3RzLmxlbmd0aCA+IDAgPyB0aGlzLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpIDogdGhpcy5nZXRTZWxlY3Rpb25JbmZvKCk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm4gbnVsbDsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMoZWxlbWVudDQpOwogICAgICBjb25zdCBpc0NvbnRhaW5lZCA9IHRoaXMuY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWxlbWVudDQsIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBpZiAoaXNDb250YWluZWQpIHsKICAgICAgICByYW5nZTIuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IHJhbmdlMi50b1N0cmluZygpLmxlbmd0aDsKICAgICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgICB9IGVsc2UgewogICAgICAgIGNvbnN0IHRleHQ5ID0gZWxlbWVudDQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uVGV4dCA9IHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgaWYgKHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQgPT09IDApIHsKICAgICAgICAgIHJldHVybiAwOwogICAgICAgIH0gZWxzZSBpZiAoc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCA9PT0gc2VsZWN0aW9uVGV4dC5sZW5ndGgpIHsKICAgICAgICAgIHJldHVybiB0ZXh0OS5sZW5ndGg7CiAgICAgICAgfQogICAgICAgIGNvbnNvbGUud2FybigiU2VsZWN0aW9uIGNvbnRhaW5lciBub3Qgd2l0aGluIGVsZW1lbnQsIHVzaW5nIHRleHQgbWF0Y2hpbmcgZmFsbGJhY2siKTsKICAgICAgICByZXR1cm4gc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldDsKICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJGYWlsZWQgdG8gZ2V0IGN1cnNvciBwb3NpdGlvbjoiLCBlcnJvcik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogIH0KICAvKioKICAgKiBHZXRzIGN1cnNvciBwb3NpdGlvbiBmcm9tIG1vdXNlIGNvb3JkaW5hdGVzIHdpdGggU2hhZG93IERPTSBzdXBwb3J0CiAgICovCiAgc3RhdGljIGdldEN1cnNvclBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgY29udGFpbmVyLCAuLi5zaGFkb3dSb290cykgewogICAgaWYgKCJjYXJldFBvc2l0aW9uRnJvbVBvaW50IiBpbiBkb2N1bWVudCAmJiBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KSB7CiAgICAgIGxldCBjYXJldFBvcyA9IG51bGw7CiAgICAgIHRyeSB7CiAgICAgICAgY2FyZXRQb3MgPSBkb2N1bWVudC5jYXJldFBvc2l0aW9uRnJvbVBvaW50KHgzLCB5NSwgLi4uc2hhZG93Um9vdHMpOwogICAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgICBjYXJldFBvcyA9IGRvY3VtZW50LmNhcmV0UG9zaXRpb25Gcm9tUG9pbnQoeDMsIHk1KTsKICAgICAgfQogICAgICBpZiAoY2FyZXRQb3MgJiYgY29udGFpbmVyLmNvbnRhaW5zKGNhcmV0UG9zLm9mZnNldE5vZGUpKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuZ2V0T2Zmc2V0SW5FbGVtZW50KGNhcmV0UG9zLm9mZnNldE5vZGUsIGNhcmV0UG9zLm9mZnNldCwgY29udGFpbmVyKTsKICAgICAgfQogICAgfQogICAgaWYgKCJjYXJldFJhbmdlRnJvbVBvaW50IiBpbiBkb2N1bWVudCkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jYXJldFJhbmdlRnJvbVBvaW50KHgzLCB5NSk7CiAgICAgIGlmIChyYW5nZTIgJiYgY29udGFpbmVyLmNvbnRhaW5zKHJhbmdlMi5zdGFydENvbnRhaW5lcikpIHsKICAgICAgICByZXR1cm4gdGhpcy5nZXRPZmZzZXRJbkVsZW1lbnQocmFuZ2UyLnN0YXJ0Q29udGFpbmVyLCByYW5nZTIuc3RhcnRPZmZzZXQsIGNvbnRhaW5lcik7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSB0b3RhbCBjaGFyYWN0ZXIgb2Zmc2V0IG9mIGEgcG9zaXRpb24gd2l0aGluIGFuIGVsZW1lbnQKICAgKi8KICBzdGF0aWMgZ2V0T2Zmc2V0SW5FbGVtZW50KG5vZGUyLCBvZmZzZXQsIGNvbnRhaW5lcikgewogICAgbGV0IHRvdGFsT2Zmc2V0ID0gMDsKICAgIGxldCBmb3VuZCA9IGZhbHNlOwogICAgY29uc3Qgd2Fsa2VyID0gZG9jdW1lbnQuY3JlYXRlVHJlZVdhbGtlcihjb250YWluZXIsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCB0ZXh0Tm9kZTsKICAgIHdoaWxlICh0ZXh0Tm9kZSA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIGlmICh0ZXh0Tm9kZSA9PT0gbm9kZTIpIHsKICAgICAgICB0b3RhbE9mZnNldCArPSBvZmZzZXQ7CiAgICAgICAgZm91bmQgPSB0cnVlOwogICAgICAgIGJyZWFrOwogICAgICB9IGVsc2UgewogICAgICAgIHRvdGFsT2Zmc2V0ICs9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgfQogICAgfQogICAgcmV0dXJuIGZvdW5kID8gdG90YWxPZmZzZXQgOiAwOwogIH0KICAvKioKICAgKiBTZXRzIGN1cnNvciBwb3NpdGlvbiBpbiBhbiBlbGVtZW50CiAgICovCiAgc3RhdGljIHNldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBwb3NpdGlvbjMpIHsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIoZWxlbWVudDQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBjdXJyZW50UG9zaXRpb24gPSAwOwogICAgbGV0IHRhcmdldE5vZGUgPSBudWxsOwogICAgbGV0IHRhcmdldE9mZnNldCA9IDA7CiAgICB3aGlsZSAod2Fsa2VyLm5leHROb2RlKCkpIHsKICAgICAgY29uc3Qgbm9kZTIgPSB3YWxrZXIuY3VycmVudE5vZGU7CiAgICAgIGNvbnN0IG5vZGVMZW5ndGggPSBub2RlMi50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIGlmIChjdXJyZW50UG9zaXRpb24gKyBub2RlTGVuZ3RoID49IHBvc2l0aW9uMykgewogICAgICAgIHRhcmdldE5vZGUgPSBub2RlMjsKICAgICAgICB0YXJnZXRPZmZzZXQgPSBwb3NpdGlvbjMgLSBjdXJyZW50UG9zaXRpb247CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgICAgY3VycmVudFBvc2l0aW9uICs9IG5vZGVMZW5ndGg7CiAgICB9CiAgICBpZiAodGFyZ2V0Tm9kZSkgewogICAgICBjb25zdCByYW5nZTIgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICByYW5nZTIuc2V0U3RhcnQodGFyZ2V0Tm9kZSwgdGFyZ2V0T2Zmc2V0KTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgICB0aGlzLnNldFNlbGVjdGlvbkZyb21SYW5nZShyYW5nZTIpOwogICAgfQogIH0KICAvKioKICAgKiBDaGVjayBpZiBhIG5vZGUgaXMgY29udGFpbmVkIHdpdGhpbiBhbiBlbGVtZW50IGFjcm9zcyBTaGFkb3cgRE9NIGJvdW5kYXJpZXMKICAgKiBUaGlzIGlzIG5lZWRlZCBiZWNhdXNlIGVsZW1lbnQuY29udGFpbnMoKSBkb2Vzbid0IHdvcmsgYWNyb3NzIFNoYWRvdyBET00KICAgKi8KICBzdGF0aWMgY29udGFpbnNBY3Jvc3NTaGFkb3dET00oY29udGFpbmVyLCBub2RlMikgewogICAgaWYgKCFjb250YWluZXIgfHwgIW5vZGUyKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBsZXQgY3VycmVudCA9IG5vZGUyOwogICAgd2hpbGUgKGN1cnJlbnQpIHsKICAgICAgaWYgKGN1cnJlbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgIHJldHVybiB0cnVlOwogICAgICB9CiAgICAgIGlmIChjdXJyZW50Lm5vZGVUeXBlID09PSBOb2RlLkRPQ1VNRU5UX0ZSQUdNRU5UX05PREUgJiYgY3VycmVudC5ob3N0KSB7CiAgICAgICAgY29uc3Qgc2hhZG93Um9vdCA9IGN1cnJlbnQ7CiAgICAgICAgaWYgKHNoYWRvd1Jvb3QuY29udGFpbnMoY29udGFpbmVyKSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBjdXJyZW50ID0gc2hhZG93Um9vdC5ob3N0OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnQgPSBjdXJyZW50LnBhcmVudE5vZGU7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZm9ybWF0dGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Zvcm1hdHRpbmcgPSBjbGFzcyB7CiAgc3RhdGljIGZvcm1hdEJ1dHRvbnMgPSBbCiAgICB7IGNvbW1hbmQ6ICJib2xkIiwgaWNvbjogIkIiLCBsYWJlbDogIkJvbGQiLCBzaG9ydGN1dDogIlx1MjMxOEIiIH0sCiAgICB7IGNvbW1hbmQ6ICJpdGFsaWMiLCBpY29uOiAiSSIsIGxhYmVsOiAiSXRhbGljIiwgc2hvcnRjdXQ6ICJcdTIzMThJIiB9LAogICAgeyBjb21tYW5kOiAidW5kZXJsaW5lIiwgaWNvbjogIlUiLCBsYWJlbDogIlVuZGVybGluZSIsIHNob3J0Y3V0OiAiXHUyMzE4VSIgfSwKICAgIHsgY29tbWFuZDogInN0cmlrZVRocm91Z2giLCBpY29uOiAiU1x1MDMzNiIsIGxhYmVsOiAiU3RyaWtldGhyb3VnaCIgfSwKICAgIHsgY29tbWFuZDogImNvZGUiLCBpY29uOiAieyB9IiwgbGFiZWw6ICJJbmxpbmUgQ29kZSIgfSwKICAgIHsgY29tbWFuZDogImxpbmsiLCBpY29uOiAiXHV7MUY1MTd9IiwgbGFiZWw6ICJMaW5rIiwgc2hvcnRjdXQ6ICJcdTIzMThLIiB9CiAgXTsKICBzdGF0aWMgcmVuZGVyRm9ybWF0dGluZ01lbnUocG9zaXRpb24zLCBvbkZvcm1hdCkgewogICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IAogICAgICAgIGNsYXNzPSJmb3JtYXR0aW5nLW1lbnUiIAogICAgICAgIHN0eWxlPSJ0b3A6ICR7cG9zaXRpb24zLnl9cHg7IGxlZnQ6ICR7cG9zaXRpb24zLnh9cHg7IgogICAgICAgIEBtb3VzZWRvd249IiR7KGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgfX0iCiAgICAgICAgQGNsaWNrPSIkeyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0iCiAgICAgID4KICAgICAgICAke3RoaXMuZm9ybWF0QnV0dG9ucy5tYXAoKGJ1dHRvbikgPT4gYjJgCiAgICAgICAgICA8YnV0dG9uIAogICAgICAgICAgICBjbGFzcz0iZm9ybWF0LWJ1dHRvbiAke2J1dHRvbi5jb21tYW5kfSIKICAgICAgICAgICAgQGNsaWNrPSIkeygpID0+IG9uRm9ybWF0KGJ1dHRvbi5jb21tYW5kKX0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc3RhdGljIGFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZhbHVlMiwgcmFuZ2UyLCBzaGFkb3dSb290cykgewogICAgbGV0IHdvcmtpbmdSYW5nZTsKICAgIGlmIChyYW5nZTIpIHsKICAgICAgd29ya2luZ1JhbmdlID0gcmFuZ2UyOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgIHdvcmtpbmdSYW5nZSA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgfQogICAgc3dpdGNoIChjb21tYW5kKSB7CiAgICAgIGNhc2UgImJvbGQiOgogICAgICAgIHRoaXMud3JhcFNlbGVjdGlvbih3b3JraW5nUmFuZ2UsICJzdHJvbmciKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAiaXRhbGljIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiZW0iKTsKICAgICAgICBicmVhazsKICAgICAgY2FzZSAidW5kZXJsaW5lIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAidSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJzdHJpa2VUaHJvdWdoIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAicyIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJjb2RlIjoKICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb24od29ya2luZ1JhbmdlLCAiY29kZSIpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJsaW5rIjoKICAgICAgICBpZiAoIXZhbHVlMikgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICB0aGlzLndyYXBTZWxlY3Rpb25XaXRoTGluayh3b3JraW5nUmFuZ2UsIHZhbHVlMik7CiAgICAgICAgYnJlYWs7CiAgICB9CiAgICBpZiAoc2hhZG93Um9vdHMgJiYgc2hhZG93Um9vdHMubGVuZ3RoID4gMCkgewogICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldFNlbGVjdGlvbkZyb21SYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsZWN0aW9uKSB7CiAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZSh3b3JraW5nUmFuZ2UpOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gdHJ1ZTsKICB9CiAgc3RhdGljIHdyYXBTZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFzRm9ybWF0dGluZyA9IHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKTsKICAgIGlmIChoYXNGb3JtYXR0aW5nKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsIHRhZ05hbWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgY29udGVudHMgPSByYW5nZTIuZXh0cmFjdENvbnRlbnRzKCk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChjb250ZW50cyk7CiAgICAgICAgcmFuZ2UyLmluc2VydE5vZGUod3JhcHBlcik7CiAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyh3cmFwcGVyKTsKICAgICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB3cmFwIHNlbGVjdGlvbjoiLCBlMTEpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIHRoZSBzZWxlY3Rpb24gY29udGFpbnMgb3IgaXMgd2l0aGluIGFueSBpbnN0YW5jZXMgb2YgYSB0YWcKICAgKi8KICBzdGF0aWMgc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBsZXQgbm9kZTIgPSByYW5nZTIuc3RhcnRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBub2RlMiA9IHJhbmdlMi5lbmRDb250YWluZXI7CiAgICB3aGlsZSAobm9kZTIgJiYgbm9kZTIgIT09IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lci5vd25lckRvY3VtZW50KSB7CiAgICAgIGlmIChub2RlMi5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUpIHsKICAgICAgICBjb25zdCBlbGVtZW50NCA9IG5vZGUyOwogICAgICAgIGlmIChlbGVtZW50NC50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgIH0KICAgICAgfQogICAgICBub2RlMiA9IG5vZGUyLnBhcmVudE5vZGU7CiAgICB9CiAgICBjb25zdCB0ZW1wRGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5jbG9uZUNvbnRlbnRzKCk7CiAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGNvbnRlbnRzKTsKICAgIGNvbnN0IHRhZ3MgPSB0ZW1wRGl2LmdldEVsZW1lbnRzQnlUYWdOYW1lKHRhZ05hbWUpOwogICAgcmV0dXJuIHRhZ3MubGVuZ3RoID4gMDsKICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSB0aGUgc2VsZWN0aW9uCiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ0Zyb21TZWxlY3Rpb24ocmFuZ2UyLCB0YWdOYW1lKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgbGV0IGV4cGFuZGVkUmFuZ2UgPSByYW5nZTIuY2xvbmVSYW5nZSgpOwogICAgbGV0IHN0YXJ0Tm9kZSA9IHJhbmdlMi5zdGFydENvbnRhaW5lcjsKICAgIGxldCBzdGFydFRhZyA9IG51bGw7CiAgICB3aGlsZSAoc3RhcnROb2RlICYmIHN0YXJ0Tm9kZSAhPT0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyLm93bmVyRG9jdW1lbnQpIHsKICAgICAgaWYgKHN0YXJ0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgc3RhcnROb2RlLnRhZ05hbWUudG9Mb3dlckNhc2UoKSA9PT0gdGFnTmFtZSkgewogICAgICAgIHN0YXJ0VGFnID0gc3RhcnROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIHN0YXJ0Tm9kZSA9IHN0YXJ0Tm9kZS5wYXJlbnROb2RlOwogICAgfQogICAgbGV0IGVuZE5vZGUgPSByYW5nZTIuZW5kQ29udGFpbmVyOwogICAgbGV0IGVuZFRhZyA9IG51bGw7CiAgICB3aGlsZSAoZW5kTm9kZSAmJiBlbmROb2RlICE9PSByYW5nZTIuY29tbW9uQW5jZXN0b3JDb250YWluZXIub3duZXJEb2N1bWVudCkgewogICAgICBpZiAoZW5kTm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5FTEVNRU5UX05PREUgJiYgZW5kTm9kZS50YWdOYW1lLnRvTG93ZXJDYXNlKCkgPT09IHRhZ05hbWUpIHsKICAgICAgICBlbmRUYWcgPSBlbmROb2RlOwogICAgICAgIGJyZWFrOwogICAgICB9CiAgICAgIGVuZE5vZGUgPSBlbmROb2RlLnBhcmVudE5vZGU7CiAgICB9CiAgICBpZiAoc3RhcnRUYWcpIHsKICAgICAgZXhwYW5kZWRSYW5nZS5zZXRTdGFydEJlZm9yZShzdGFydFRhZyk7CiAgICB9CiAgICBpZiAoZW5kVGFnKSB7CiAgICAgIGV4cGFuZGVkUmFuZ2Uuc2V0RW5kQWZ0ZXIoZW5kVGFnKTsKICAgIH0KICAgIGNvbnN0IGZyYWdtZW50ID0gZXhwYW5kZWRSYW5nZS5leHRyYWN0Q29udGVudHMoKTsKICAgIGNvbnN0IHByb2Nlc3NlZEZyYWdtZW50ID0gdGhpcy5yZW1vdmVUYWdzRnJvbUZyYWdtZW50KGZyYWdtZW50LCB0YWdOYW1lKTsKICAgIGV4cGFuZGVkUmFuZ2UuaW5zZXJ0Tm9kZShwcm9jZXNzZWRGcmFnbWVudCk7CiAgICBjb25zdCB0ZXh0Tm9kZXMgPSBbXTsKICAgIGNvbnN0IHdhbGtlciA9IGRvY3VtZW50LmNyZWF0ZVRyZWVXYWxrZXIocHJvY2Vzc2VkRnJhZ21lbnQsIE5vZGVGaWx0ZXIuU0hPV19URVhULCBudWxsKTsKICAgIGxldCBub2RlMjsKICAgIHdoaWxlIChub2RlMiA9IHdhbGtlci5uZXh0Tm9kZSgpKSB7CiAgICAgIHRleHROb2Rlcy5wdXNoKG5vZGUyKTsKICAgIH0KICAgIGlmICh0ZXh0Tm9kZXMubGVuZ3RoID4gMCkgewogICAgICBjb25zdCBuZXdSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIG5ld1JhbmdlLnNldFN0YXJ0KHRleHROb2Rlc1swXSwgMCk7CiAgICAgIG5ld1JhbmdlLnNldEVuZCh0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLCB0ZXh0Tm9kZXNbdGV4dE5vZGVzLmxlbmd0aCAtIDFdLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgIHNlbGVjdGlvbi5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKG5ld1JhbmdlKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlIGFsbCBpbnN0YW5jZXMgb2YgYSB0YWcgZnJvbSBhIGRvY3VtZW50IGZyYWdtZW50CiAgICovCiAgc3RhdGljIHJlbW92ZVRhZ3NGcm9tRnJhZ21lbnQoZnJhZ21lbnQsIHRhZ05hbWUpIHsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoZnJhZ21lbnQpOwogICAgY29uc3QgdGFncyA9IHRlbXBEaXYuZ2V0RWxlbWVudHNCeVRhZ05hbWUodGFnTmFtZSk7CiAgICBjb25zdCB0YWdBcnJheSA9IEFycmF5LmZyb20odGFncyk7CiAgICB0YWdBcnJheS5mb3JFYWNoKCh0YWcpID0+IHsKICAgICAgY29uc3QgcGFyZW50ID0gdGFnLnBhcmVudE5vZGU7CiAgICAgIGlmIChwYXJlbnQpIHsKICAgICAgICB3aGlsZSAodGFnLmZpcnN0Q2hpbGQpIHsKICAgICAgICAgIHBhcmVudC5pbnNlcnRCZWZvcmUodGFnLmZpcnN0Q2hpbGQsIHRhZyk7CiAgICAgICAgfQogICAgICAgIHBhcmVudC5yZW1vdmVDaGlsZCh0YWcpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG5ld0ZyYWdtZW50ID0gZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgd2hpbGUgKHRlbXBEaXYuZmlyc3RDaGlsZCkgewogICAgICBuZXdGcmFnbWVudC5hcHBlbmRDaGlsZCh0ZW1wRGl2LmZpcnN0Q2hpbGQpOwogICAgfQogICAgcmV0dXJuIG5ld0ZyYWdtZW50OwogIH0KICBzdGF0aWMgd3JhcFNlbGVjdGlvbldpdGhMaW5rKHJhbmdlMiwgdXJsKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbGVjdGlvbikKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuc2VsZWN0aW9uQ29udGFpbnNUYWcocmFuZ2UyLCAiYSIpKSB7CiAgICAgIHRoaXMucmVtb3ZlVGFnRnJvbVNlbGVjdGlvbihyYW5nZTIsICJhIik7CiAgICAgIGlmIChzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgfQogICAgfQogICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgbGluazMudGFyZ2V0ID0gIl9ibGFuayI7CiAgICBsaW5rMy5yZWwgPSAibm9vcGVuZXIgbm9yZWZlcnJlciI7CiAgICB0cnkgewogICAgICBjb25zdCBjb250ZW50cyA9IHJhbmdlMi5leHRyYWN0Q29udGVudHMoKTsKICAgICAgbGluazMuYXBwZW5kQ2hpbGQoY29udGVudHMpOwogICAgICByYW5nZTIuaW5zZXJ0Tm9kZShsaW5rMyk7CiAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGluazMpOwogICAgICBzZWxlY3Rpb24ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgIHNlbGVjdGlvbi5hZGRSYW5nZShyYW5nZTIpOwogICAgfSBjYXRjaCAoZTExKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjcmVhdGUgbGluazoiLCBlMTEpOwogICAgfQogIH0KICBzdGF0aWMgZ2V0U2VsZWN0aW9uQ29vcmRpbmF0ZXMoLi4uc2hhZG93Um9vdHMpIHsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgY29uc29sZS5sb2coImdldFNlbGVjdGlvbkNvb3JkaW5hdGVzIC0gc2VsZWN0aW9uSW5mbzoiLCBzZWxlY3Rpb25JbmZvKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBjb25zb2xlLmxvZygiTm8gc2VsZWN0aW9uIGluZm8gYXZhaWxhYmxlIik7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnNvbGUubG9nKCJSYW5nZSByZWN0OiIsIHJlY3QpOwogICAgaWYgKHJlY3Qud2lkdGggPT09IDAgJiYgcmVjdC5oZWlnaHQgPT09IDApIHsKICAgICAgY29uc29sZS5sb2coIlJlY3Qgd2lkdGggYW5kIGhlaWdodCBhcmUgMCwgdHJ5aW5nIGRpZmZlcmVudCBhcHByb2FjaCIpOwogICAgICBpZiAoImNhcmV0UG9zaXRpb25Gcm9tUG9pbnQiIGluIGRvY3VtZW50KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTMgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRlbXBTcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICAgdGVtcFNwYW4udGV4dENvbnRlbnQgPSAiXHUyMDBCIjsKICAgICAgICAgIHJhbmdlMy5pbnNlcnROb2RlKHRlbXBTcGFuKTsKICAgICAgICAgIGNvbnN0IHNwYW5SZWN0ID0gdGVtcFNwYW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0ZW1wU3Bhbi5yZW1vdmUoKTsKICAgICAgICAgIGlmIChzcGFuUmVjdC53aWR0aCA+IDAgfHwgc3BhblJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgICAgICBjb25zdCBjb29yZHMyID0gewogICAgICAgICAgICAgIHg6IHNwYW5SZWN0LmxlZnQsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIHNwYW5SZWN0LnRvcCAtIDQ1KQogICAgICAgICAgICB9OwogICAgICAgICAgICBjb25zb2xlLmxvZygiVXNlZCBzcGFuIHRyaWNrIGZvciBjb29yZHM6IiwgY29vcmRzMik7CiAgICAgICAgICAgIHJldHVybiBjb29yZHMyOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgeDogcmVjdC5sZWZ0ICsgcmVjdC53aWR0aCAvIDIsCiAgICAgIHk6IE1hdGgubWF4KDQ1LCByZWN0LnRvcCAtIDQ1KQogICAgICAvLyBQb3NpdGlvbiBhYm92ZSBzZWxlY3Rpb24sIGJ1dCBlbnN1cmUgaXQncyBub3QgbmVnYXRpdmUKICAgIH07CiAgICBjb25zb2xlLmxvZygiUmV0dXJuaW5nIGNvb3JkczoiLCBjb29yZHMpOwogICAgcmV0dXJuIGNvb3JkczsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2RlZXMtZm9ybWF0dGluZy1tZW51LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTYyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0Zvcm1hdHRpbmdNZW51ID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1mb3JtYXR0aW5nLW1lbnUiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF92aXNpYmxlX2RlY29yYXRvcnM7CiAgbGV0IF92aXNpYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZGVjb3JhdG9yczsKICBsZXQgX3Bvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVaSW5kZXhfZGVjb3JhdG9yczsKICBsZXQgX21lbnVaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNGb3JtYXR0aW5nTWVudTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92aXNpYmxlX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9wb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfbWVudVpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfdmlzaWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2aXNpYmxlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ2aXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpc2libGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZpc2libGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdmlzaWJsZV9pbml0aWFsaXplcnMsIF92aXNpYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIodGhpcywgbnVsbCwgX3Bvc2l0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwb3NpdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wb3NpdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcG9zaXRpb25faW5pdGlhbGl6ZXJzLCBfcG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Mih0aGlzLCBudWxsLCBfbWVudVpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51WkluZGV4Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtZW51WkluZGV4IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm1lbnVaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVaSW5kZXggPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIF9tZW51WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRm9ybWF0dGluZ01lbnUyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBpbnN0YW5jZTsKICAgIHN0YXRpYyBnZXRJbnN0YW5jZSgpIHsKICAgICAgaWYgKCFEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKSB7CiAgICAgICAgRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZSA9IG5ldyBEZWVzRm9ybWF0dGluZ01lbnUyKCk7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChEZWVzRm9ybWF0dGluZ01lbnUyLmluc3RhbmNlKTsKICAgICAgfQogICAgICByZXR1cm4gRGVlc0Zvcm1hdHRpbmdNZW51Mi5pbnN0YW5jZTsKICAgIH0KICAgICN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczYzKHRoaXMsIF92aXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpOwogICAgZ2V0IHZpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2aXNpYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdmlzaWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfdmlzaWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2luaXRpYWxpemVycywgeyB4OiAwLCB5OiAwIH0pKTsKICAgIGdldCBwb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcG9zaXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3Bvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjModGhpcywgX3Bvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1lbnVaSW5kZXgoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVudVpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVudVpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY2FsbGJhY2sgPSAoX19ydW5Jbml0aWFsaXplcnM2Myh0aGlzLCBfbWVudVpJbmRleF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDA7CiAgICAgICAgaGVpZ2h0OiAwOwogICAgICB9CgogICAgICAuZm9ybWF0dGluZy1tZW51IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzI2MjYyNiIpfTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2UwZTBlMCIsICIjNDA0MDQwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBib3gtc2hhZG93OiAwIDJweCAxNnB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgICAgcGFkZGluZzogNHB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiAycHg7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBmYWRlSW5TY2FsZSB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk1KSB0cmFuc2xhdGVZKDVweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiB7CiAgICAgICAgd2lkdGg6IDMycHg7CiAgICAgICAgaGVpZ2h0OiAzMnB4OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YwZjBmMCIsICIjMzMzMzMzIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwNjZjYyIsICIjNGQ5NGZmIil9OwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLmJvbGQgewogICAgICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgICAgIH0KCiAgICAgIC5mb3JtYXQtYnV0dG9uLml0YWxpYyB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbi51bmRlcmxpbmUgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CgogICAgICAuZm9ybWF0LWJ1dHRvbiAuY29kZS1pY29uIHsKICAgICAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIGlmICghdGhpcy52aXNpYmxlKQogICAgICAgIHJldHVybiBiMmBgOwogICAgICB0aGlzLnN0eWxlLnpJbmRleCA9IHRoaXMubWVudVpJbmRleC50b1N0cmluZygpOwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgCiAgICAgICAgY2xhc3M9ImZvcm1hdHRpbmctbWVudSIgCiAgICAgICAgc3R5bGU9ImxlZnQ6ICR7dGhpcy5wb3NpdGlvbi54fXB4OyB0b3A6ICR7dGhpcy5wb3NpdGlvbi55fXB4OyIKICAgICAgICB0YWJpbmRleD0iLTEiCiAgICAgICAgZGF0YS1tZW51LXR5cGU9ImZvcm1hdHRpbmciCiAgICAgID4KICAgICAgICAke1d5c2l3eWdGb3JtYXR0aW5nLmZvcm1hdEJ1dHRvbnMubWFwKChidXR0b24pID0+IGIyYAogICAgICAgICAgPGJ1dHRvbiAKICAgICAgICAgICAgY2xhc3M9ImZvcm1hdC1idXR0b24gJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIGRhdGEtY29tbWFuZD0iJHtidXR0b24uY29tbWFuZH0iCiAgICAgICAgICAgIHRpdGxlPSIke2J1dHRvbi5sYWJlbH0ke2J1dHRvbi5zaG9ydGN1dCA/IGAgKCR7YnV0dG9uLnNob3J0Y3V0fSlgIDogIiJ9IgogICAgICAgICAgPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iJHtidXR0b24uY29tbWFuZCA9PT0gImNvZGUiID8gImNvZGUtaWNvbiIgOiAiIn0iPiR7YnV0dG9uLmljb259PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgYCl9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIGFwcGx5Rm9ybWF0KGNvbW1hbmQpIHsKICAgICAgaWYgKHRoaXMuY2FsbGJhY2spIHsKICAgICAgICB0aGlzLmNhbGxiYWNrKGNvbW1hbmQpOwogICAgICB9CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGUoKTsKICAgICAgfQogICAgfQogICAgc2hvdyhwb3NpdGlvbjMsIGNhbGxiYWNrKSB7CiAgICAgIGNvbnNvbGUubG9nKCJGb3JtYXR0aW5nTWVudS5zaG93IGNhbGxlZDoiLCB7IHBvc2l0aW9uOiBwb3NpdGlvbjMsIHZpc2libGU6IHRoaXMudmlzaWJsZSB9KTsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgICAgdGhpcy5jYWxsYmFjayA9IGNhbGxiYWNrOwogICAgICB0aGlzLm1lbnVaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubWVudVpJbmRleCk7CiAgICAgIHRoaXMuc3R5bGUuekluZGV4ID0gdGhpcy5tZW51WkluZGV4LnRvU3RyaW5nKCk7CiAgICAgIHRoaXMudmlzaWJsZSA9IHRydWU7CiAgICB9CiAgICBoaWRlKCkgewogICAgICB0aGlzLnZpc2libGUgPSBmYWxzZTsKICAgICAgdGhpcy5jYWxsYmFjayA9IG51bGw7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnVucmVnaXN0ZXIodGhpcyk7CiAgICB9CiAgICB1cGRhdGVQb3NpdGlvbihwb3NpdGlvbjMpIHsKICAgICAgdGhpcy5wb3NpdGlvbiA9IHBvc2l0aW9uMzsKICAgIH0KICAgIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgbWVudSA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmZvcm1hdHRpbmctbWVudSIpOwogICAgICAgIGlmIChtZW51ICYmIG1lbnUuY29udGFpbnMoZTExLnRhcmdldCkpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuc2hhZG93Um9vdD8uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgICBjb25zdCBidXR0b24gPSB0YXJnZXQuY2xvc2VzdCgiLmZvcm1hdC1idXR0b24iKTsKICAgICAgICBpZiAoYnV0dG9uKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIGNvbnN0IGNvbW1hbmQgPSBidXR0b24uZ2V0QXR0cmlidXRlKCJkYXRhLWNvbW1hbmQiKTsKICAgICAgICAgIGlmIChjb21tYW5kKSB7CiAgICAgICAgICAgIHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zaGFkb3dSb290Py5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBtZW51ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuZm9ybWF0dGluZy1tZW51Iik7CiAgICAgICAgaWYgKG1lbnUgJiYgbWVudS5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgfQogICAgICB9LCB0cnVlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjMoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNGb3JtYXR0aW5nTWVudTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmludGVyZmFjZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb25zdGFudHMuanMKdmFyIFBST0dSQU1NSU5HX0xBTkdVQUdFUyA9IFsKICAiSmF2YVNjcmlwdCIsCiAgIlR5cGVTY3JpcHQiLAogICJQeXRob24iLAogICJKYXZhIiwKICAiQysrIiwKICAiQyMiLAogICJHbyIsCiAgIlJ1c3QiLAogICJIVE1MIiwKICAiQ1NTIiwKICAiU1FMIiwKICAiU2hlbGwiLAogICJKU09OIiwKICAiWUFNTCIsCiAgIk1hcmtkb3duIiwKICAiUGxhaW4gVGV4dCIKXTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHd5c2l3eWdTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIGRpc3BsYXk6IGJsb2NrOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgbWluLWhlaWdodDogMjAwcHg7CiAgICBwYWRkaW5nOiAyNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnd5c2l3eWctY29udGFpbmVyOmhvdmVyIHsKICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzNmM2Y0NiIpfTsKICB9CgogIC53eXNpd3lnLWNvbnRhaW5lcjpmb2N1cy13aXRoaW4gewogICAgb3V0bGluZTogMnB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgb3V0bGluZS1vZmZzZXQ6IDJweDsKICAgIGJveC1zaGFkb3c6IDAgMCAwIDJweCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMTgxODFiIil9LCAwIDAgMCA0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjUpIil9OwogICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLyogVmlzdWFsIGhpbnQgZm9yIHRleHQgc2VsZWN0aW9uICovCiAgLmVkaXRvci1jb250ZW50OmhvdmVyIHsKICAgIGN1cnNvcjogdGV4dDsKICB9CgogIC5lZGl0b3ItY29udGVudCB7CiAgICBvdXRsaW5lOiBub25lOwogICAgbWluLWhlaWdodDogMTYwcHg7CiAgICBtYXJnaW46IDAgLThweDsKICAgIHBhZGRpbmc6IDAgOHB4OwogIH0KCiAgLmJsb2NrIHsKICAgIG1hcmdpbjogMDsKICAgIHBhZGRpbmc6IDRweCAwOwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBtaW4taGVpZ2h0OiAxLjZlbTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLyogRmlyc3QgYW5kIGxhc3QgYmxvY2tzIGRvbid0IG5lZWQgZXh0cmEgc3BhY2luZyAqLwogIC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tdG9wOiAwICFpbXBvcnRhbnQ7CiAgfQoKICAuYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkIC5ibG9jayB7CiAgICBtYXJnaW4tYm90dG9tOiAwOwogIH0KCiAgLmJsb2NrLnNlbGVjdGVkIHsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiLCAicmdiYSg1OSwgMTMwLCAyNDYsIDAuMDUpIil9OwogICAgb3V0bGluZTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4yKSIpfTsKICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgIHBhZGRpbmctcmlnaHQ6IDhweDsKICB9CgogIC5ibG9ja1tjb250ZW50ZWRpdGFibGVdIHsKICAgIG91dGxpbmU6IG5vbmU7CiAgfQoKICAuYmxvY2sucGFyYWdyYXBoIHsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLnBhcmFncmFwaDplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJUeXBlICcvJyBmb3IgY29tbWFuZHMuLi4iOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMTZweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMSB7CiAgICBmb250LXNpemU6IDMycHg7CiAgICBmb250LXdlaWdodDogNzAwOwogICAgbGluZS1oZWlnaHQ6IDEuMjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDEiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjI7CiAgICBmb250LXdlaWdodDogNzAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMiB7CiAgICBmb250LXNpemU6IDI0cHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuMzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMjplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDIiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjM7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMyB7CiAgICBmb250LXNpemU6IDIwcHg7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgbGluZS1oZWlnaHQ6IDEuNDsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLmJsb2NrLmhlYWRpbmctMzplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICJIZWFkaW5nIDMiOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIGZvbnQtc2l6ZTogMjBweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjQ7CiAgICBmb250LXdlaWdodDogNjAwOwogIH0KCiAgLmJsb2NrLnF1b3RlIHsKICAgIGJvcmRlci1sZWZ0OiAycHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgbWFyZ2luLWxlZnQ6IDA7CiAgICBtYXJnaW4tcmlnaHQ6IDA7CiAgICBsaW5lLWhlaWdodDogMS42OwogIH0KCiAgLmJsb2NrLnF1b3RlOmVtcHR5OjpiZWZvcmUgewogICAgY29udGVudDogIlF1b3RlIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBsaW5lLWhlaWdodDogMS42OwogICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICB9CgogIC5jb2RlLWJsb2NrLWNvbnRhaW5lciB7CiAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICBtYXJnaW46IDIwcHggMDsKICB9CgogIC5jb2RlLWxhbmd1YWdlIHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIHRvcDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgcGFkZGluZzogNHB4IDEycHg7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBib3JkZXItcmFkaXVzOiAwIDRweCAwIDRweDsKICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIFJvYm90bywgc2Fucy1zZXJpZjsKICAgIHRleHQtdHJhbnNmb3JtOiBsb3dlcmNhc2U7CiAgICB6LWluZGV4OiAxOwogIH0KCiAgLmJsb2NrLmNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzE4MTgxYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBwYWRkaW5nOiAxNnB4OwogICAgcGFkZGluZy10b3A6IDMycHg7IC8qIE1ha2Ugcm9vbSBmb3IgbGFuZ3VhZ2UgaW5kaWNhdG9yICovCiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgIG92ZXJmbG93LXg6IGF1dG87CiAgfQoKICAuYmxvY2suY29kZTplbXB0eTo6YmVmb3JlIHsKICAgIGNvbnRlbnQ6ICIvLyBDb2RlIGJsb2NrIjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTRweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICBmb250LXdlaWdodDogNDAwOwogIH0KCiAgLmJsb2NrLmxpc3QgewogICAgcGFkZGluZy1sZWZ0OiAwOwogIH0KCiAgLmJsb2NrLmxpc3QgdWwsCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbWFyZ2luOiAwOwogICAgcGFkZGluZzogMCAwIDAgMjRweDsKICAgIGxpc3Qtc3R5bGUtcG9zaXRpb246IG91dHNpZGU7CiAgfQoKICAuYmxvY2subGlzdCB1bCB7CiAgICBsaXN0LXN0eWxlOiBkaXNjOwogIH0KCiAgLmJsb2NrLmxpc3Qgb2wgewogICAgbGlzdC1zdHlsZTogZGVjaW1hbDsKICB9CgogIC5ibG9jay5saXN0IGxpIHsKICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgfQoKICAuYmxvY2subGlzdCBsaTpsYXN0LWNoaWxkIHsKICAgIG1hcmdpbi1ib3R0b206IDA7CiAgfQoKICAuYmxvY2suZGl2aWRlciB7CiAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICBwYWRkaW5nOiAyMHB4IDA7CiAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICB9CgogIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgbWFyZ2luOiAwOwogIH0KCiAgLnNsYXNoLW1lbnUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzA5MDkwYiIpfTsKICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDFweCAycHggcmdiYSgwLCAwLCAwLCAwLjA2KTsKICAgIHBhZGRpbmc6IDRweDsKICAgIHotaW5kZXg6IDEwMDA7CiAgICBtaW4td2lkdGg6IDIyMHB4OwogICAgbWF4LWhlaWdodDogMzAwcHg7CiAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgcG9pbnRlci1ldmVudHM6IGF1dG87CiAgICB1c2VyLXNlbGVjdDogbm9uZTsKICB9CgogIC5zbGFzaC1tZW51LWl0ZW0gewogICAgcGFkZGluZzogOHB4IDEwcHg7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgZ2FwOiAxMnB4OwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXNpemU6IDE0cHg7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogIH0KCiAgLnNsYXNoLW1lbnUtaXRlbSAuaWNvbiB7CiAgICB3aWR0aDogMjRweDsKICAgIGhlaWdodDogMjRweDsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBmb250LXNpemU6IDE2cHg7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgfQoKICAuc2xhc2gtbWVudS1pdGVtOmhvdmVyIC5pY29uLAogIC5zbGFzaC1tZW51LWl0ZW0uc2VsZWN0ZWQgLmljb24gewogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAudG9vbGJhciB7CiAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICB0b3A6IC00MHB4OwogICAgbGVmdDogMDsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBub25lOwogICAgZ2FwOiA0cHg7CiAgICB6LWluZGV4OiAxMDAwOwogIH0KCiAgLnRvb2xiYXIudmlzaWJsZSB7CiAgICBkaXNwbGF5OiBmbGV4OwogIH0KCiAgLnRvb2xiYXItYnV0dG9uIHsKICAgIHdpZHRoOiAzMnB4OwogICAgaGVpZ2h0OiAzMnB4OwogICAgYm9yZGVyOiBub25lOwogICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgIGRpc3BsYXk6IGZsZXg7CiAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC50b29sYmFyLWJ1dHRvbjpob3ZlciB7CiAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y0ZjRmNSIsICIjMjcyNzJhIil9OwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgfQoKICAvKiBEcmFnIGFuZCBEcm9wIFN0eWxlcyAqLwogIC5ibG9jay13cmFwcGVyIHsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjNzIGVhc2UsIG9wYWNpdHkgMC4ycyBlYXNlOwogIH0KCiAgLyogRW5zdXJlIHByb3BlciBzcGFjaW5nIGNvbnRleHQgZm9yIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrIHsKICAgIG1hcmdpbi10b3A6IDE2cHg7CiAgfQoKICAvKiBPdmVycmlkZSBmb3IgaGVhZGluZ3MgZm9sbG93aW5nIG90aGVyIGJsb2NrcyAqLwogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLmhlYWRpbmctMSwKICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5oZWFkaW5nLTIsCiAgLmJsb2NrLXdyYXBwZXIgKyAuYmxvY2std3JhcHBlciAuYmxvY2suaGVhZGluZy0zIHsKICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgfQoKICAvKiBDb2RlIGFuZCBxdW90ZSBibG9ja3MgbmVlZCBjb25zaXN0ZW50IHNwYWNpbmcgKi8KICAuYmxvY2std3JhcHBlciArIC5ibG9jay13cmFwcGVyIC5ibG9jay5jb2RlLAogIC5ibG9jay13cmFwcGVyICsgLmJsb2NrLXdyYXBwZXIgLmJsb2NrLnF1b3RlIHsKICAgIG1hcmdpbi10b3A6IDIwcHg7CiAgfQoKICAuZHJhZy1oYW5kbGUgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogLTI4cHg7CiAgICB0b3A6IDUwJTsKICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgtNTAlKTsKICAgIHdpZHRoOiAyNHB4OwogICAgaGVpZ2h0OiAyNHB4OwogICAgY3Vyc29yOiBncmFiOwogICAgb3BhY2l0eTogMDsKICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgZGlzcGxheTogZmxleDsKICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogIH0KCiAgLmRyYWctaGFuZGxlOjpiZWZvcmUgewogICAgY29udGVudDogIuKLruKLriI7CiAgICBmb250LXNpemU6IDEycHg7CiAgICBsZXR0ZXItc3BhY2luZzogLTJweDsKICB9CgogIC5ibG9jay13cmFwcGVyOmhvdmVyIC5kcmFnLWhhbmRsZSB7CiAgICBvcGFjaXR5OiAxOwogIH0KCiAgLmRyYWctaGFuZGxlOmhvdmVyIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICB9CgogIC5kcmFnLWhhbmRsZTphY3RpdmUgewogICAgY3Vyc29yOiBncmFiYmluZzsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgfQoKICAuYmxvY2std3JhcHBlci5kcmFnZ2luZyB7CiAgICBvcGFjaXR5OiAwLjg7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIHotaW5kZXg6IDIwMDE7CiAgICB0cmFuc2l0aW9uOiBub25lICFpbXBvcnRhbnQ7CiAgfQoKCiAgLyogQmxvY2tzIHRoYXQgc2hvdWxkIG1vdmUgb3V0IG9mIHRoZSB3YXkgKi8KICAuYmxvY2std3JhcHBlci5tb3ZlLWRvd24gewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKHZhcigtLWRyYWctb2Zmc2V0LCAwcHgpKTsKICB9CgogIC5ibG9jay13cmFwcGVyLm1vdmUtdXAgewogICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKGNhbGMoLTEgKiB2YXIoLS1kcmFnLW9mZnNldCwgMHB4KSkpOwogIH0KCiAgLyogRHJvcCBpbmRpY2F0b3IgKi8KICAuZHJvcC1pbmRpY2F0b3IgewogICAgcG9zaXRpb246IGFic29sdXRlOwogICAgbGVmdDogMDsKICAgIHJpZ2h0OiAwOwogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjA1KSIsICJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4wNSkiKX07CiAgICBib3JkZXI6IDJweCBkYXNoZWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIHRyYW5zaXRpb246IHRvcCAwLjJzIGVhc2UsIGhlaWdodCAwLjJzIGVhc2U7CiAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgIHotaW5kZXg6IDE5OTk7CiAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogIH0KCiAgLyogUmVtb3ZlIG9sZCBkcmFnLW92ZXIgc3R5bGVzICovCiAgLmJsb2NrLXdyYXBwZXIuZHJhZy1vdmVyLWJlZm9yZSwKICAuYmxvY2std3JhcHBlci5kcmFnLW92ZXItYWZ0ZXIgewogICAgLyogTm8gbG9uZ2VyIG5lZWRlZCwgdXNpbmcgZHJvcCBpbmRpY2F0b3IgaW5zdGVhZCAqLwogIH0KCiAgLmVkaXRvci1jb250ZW50LmRyYWdnaW5nICogewogICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgfQoKICAvKiBCbG9jayBTZXR0aW5ncyBCdXR0b24gLSBSZW1vdmVkIGluIGZhdm9yIG9mIGNvbnRleHQgbWVudSAqLwoKICAvKiBUZXh0IFNlbGVjdGlvbiBTdHlsZXMgKi8KICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjIpIil9OwogICAgY29sb3I6IGluaGVyaXQ7CiAgfQoKICAvKiBGb3JtYXR0aW5nIE1lbnUgKi8KICAuZm9ybWF0dGluZy1tZW51IHsKICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMwOTA5MGIiKX07CiAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgYm94LXNoYWRvdzogMCAxcHggM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCAxcHggMnB4IHJnYmEoMCwgMCwgMCwgMC4wNik7CiAgICBwYWRkaW5nOiA0cHg7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgZ2FwOiAycHg7CiAgICB6LWluZGV4OiAxMDAxOwogICAgYW5pbWF0aW9uOiBmYWRlSW5TY2FsZSAwLjE1cyBlYXNlLW91dDsKICB9CgogIEBrZXlmcmFtZXMgZmFkZUluU2NhbGUgewogICAgZnJvbSB7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCkgdHJhbnNsYXRlWSgycHgpOwogICAgfQogICAgdG8gewogICAgICBvcGFjaXR5OiAxOwogICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpIHRyYW5zbGF0ZVkoMCk7CiAgICB9CiAgfQoKICAuZm9ybWF0LWJ1dHRvbiB7CiAgICB3aWR0aDogMzJweDsKICAgIGhlaWdodDogMzJweDsKICAgIGJvcmRlcjogbm9uZTsKICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgY3Vyc29yOiBwb2ludGVyOwogICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICBkaXNwbGF5OiBmbGV4OwogICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICBmb250LXdlaWdodDogNjAwOwogICAgZm9udC1zaXplOiAxNHB4OwogICAgcG9zaXRpb246IHJlbGF0aXZlOwogIH0KCiAgLmZvcm1hdC1idXR0b246aG92ZXIgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KCiAgLmZvcm1hdC1idXR0b246YWN0aXZlIHsKICAgIHRyYW5zZm9ybTogc2NhbGUoMC45NSk7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5ib2xkIHsKICAgIGZvbnQtd2VpZ2h0OiA3MDA7CiAgfQoKICAuZm9ybWF0LWJ1dHRvbi5pdGFsaWMgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmZvcm1hdC1idXR0b24udW5kZXJsaW5lIHsKICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogIH0KCiAgLmZvcm1hdC1idXR0b24gLmNvZGUtaWNvbiB7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMTJweDsKICB9CgogIC8qIEFwcGxpZWQgZm9ybWF0IHN0eWxlcyBpbiBjb250ZW50ICovCiAgLmJsb2NrIHN0cm9uZywKICAuYmxvY2sgYiB7CiAgICBmb250LXdlaWdodDogNjAwOwogICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgfQoKICAuYmxvY2sgZW0sCiAgLmJsb2NrIGkgewogICAgZm9udC1zdHlsZTogaXRhbGljOwogIH0KCiAgLmJsb2NrIHUgewogICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgfQoKICAuYmxvY2sgc3RyaWtlLAogIC5ibG9jayBzIHsKICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgb3BhY2l0eTogMC43OwogIH0KCiAgLmJsb2NrIGNvZGUgewogICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICBmb250LWZhbWlseTogJ1NGIE1vbm8nLCAnTW9uYWNvJywgJ0luY29uc29sYXRhJywgJ0ZpcmEgQ29kZScsIG1vbm9zcGFjZTsKICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICB9CgogIC5ibG9jayBhIHsKICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgfQoKICAuYmxvY2sgYTpob3ZlciB7CiAgICBib3JkZXItYm90dG9tLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogIH0KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvd3lzaXd5Zy5jb252ZXJ0ZXJzLmpzCnZhciBXeXNpd3lnQ29udmVydGVycyA9IGNsYXNzIHsKICBzdGF0aWMgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBzdGF0aWMgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgc3RhdGljIGdldEh0bWxPdXRwdXQoYmxvY2tzKSB7CiAgICByZXR1cm4gYmxvY2tzLm1hcCgoYmxvY2spID0+IHsKICAgICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50LmluY2x1ZGVzKCI8IikgJiYgYmxvY2suY29udGVudC5pbmNsdWRlcygiPiIpID8gYmxvY2suY29udGVudCA6IHRoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KTsKICAgICAgc3dpdGNoIChibG9jay50eXBlKSB7CiAgICAgICAgY2FzZSAicGFyYWdyYXBoIjoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50ID8gYDxwPiR7Y29udGVudDN9PC9wPmAgOiAiIjsKICAgICAgICBjYXNlICJoZWFkaW5nLTEiOgogICAgICAgICAgcmV0dXJuIGA8aDE+JHtjb250ZW50M308L2gxPmA7CiAgICAgICAgY2FzZSAiaGVhZGluZy0yIjoKICAgICAgICAgIHJldHVybiBgPGgyPiR7Y29udGVudDN9PC9oMj5gOwogICAgICAgIGNhc2UgImhlYWRpbmctMyI6CiAgICAgICAgICByZXR1cm4gYDxoMz4ke2NvbnRlbnQzfTwvaDM+YDsKICAgICAgICBjYXNlICJxdW90ZSI6CiAgICAgICAgICByZXR1cm4gYDxibG9ja3F1b3RlPiR7Y29udGVudDN9PC9ibG9ja3F1b3RlPmA7CiAgICAgICAgY2FzZSAiY29kZSI6CiAgICAgICAgICByZXR1cm4gYDxwcmU+PGNvZGU+JHt0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCl9PC9jb2RlPjwvcHJlPmA7CiAgICAgICAgY2FzZSAibGlzdCI6CiAgICAgICAgICBjb25zdCBpdGVtcyA9IGJsb2NrLmNvbnRlbnQuc3BsaXQoIlxuIikuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnRyaW0oKSk7CiAgICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID4gMCkgewogICAgICAgICAgICBjb25zdCBsaXN0VGFnID0gYmxvY2subWV0YWRhdGE/Lmxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgICAgICAgICAgcmV0dXJuIGA8JHtsaXN0VGFnfT4ke2l0ZW1zLm1hcCgoaXRlbSkgPT4gYDxsaT4ke2l0ZW19PC9saT5gKS5qb2luKCIiKX08LyR7bGlzdFRhZ30+YDsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybiAiIjsKICAgICAgICBjYXNlICJkaXZpZGVyIjoKICAgICAgICAgIHJldHVybiAiPGhyPiI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgaWYgKGltYWdlVXJsKSB7CiAgICAgICAgICAgIGNvbnN0IGFsdFRleHQgPSB0aGlzLmVzY2FwZUh0bWwoYmxvY2suY29udGVudCB8fCAiSW1hZ2UiKTsKICAgICAgICAgICAgcmV0dXJuIGA8aW1nIHNyYz0iJHtpbWFnZVVybH0iIGFsdD0iJHthbHRUZXh0fSIgLz5gOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuICIiOwogICAgICAgIGNhc2UgInlvdXR1YmUiOgogICAgICAgICAgY29uc3QgdmlkZW9JZCA9IGJsb2NrLm1ldGFkYXRhPy52aWRlb0lkOwogICAgICAgICAgaWYgKHZpZGVvSWQpIHsKICAgICAgICAgICAgcmV0dXJuIGA8aWZyYW1lIHdpZHRoPSI1NjAiIGhlaWdodD0iMzE1IiBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iIGZyYW1lYm9yZGVyPSIwIiBhbGxvdz0iYWNjZWxlcm9tZXRlcjsgYXV0b3BsYXk7IGNsaXBib2FyZC13cml0ZTsgZW5jcnlwdGVkLW1lZGlhOyBneXJvc2NvcGU7IHBpY3R1cmUtaW4tcGljdHVyZSIgYWxsb3dmdWxsc2NyZWVuPjwvaWZyYW1lPmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgY2FzZSAibWFya2Rvd24iOgogICAgICAgICAgcmV0dXJuIGA8ZGl2IGNsYXNzPSJtYXJrZG93bi1jb250ZW50Ij4ke3RoaXMuZXNjYXBlSHRtbChibG9jay5jb250ZW50KX08L2Rpdj5gOwogICAgICAgIGNhc2UgImh0bWwiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiYXR0YWNobWVudCI6CiAgICAgICAgICBjb25zdCBmaWxlcyA9IGJsb2NrLm1ldGFkYXRhPy5maWxlcyB8fCBbXTsKICAgICAgICAgIGlmIChmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgICAgIHJldHVybiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudHMiPiR7ZmlsZXMubWFwKChmaWxlKSA9PiBgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1pdGVtIiBkYXRhLWZpbGUtaWQ9IiR7ZmlsZS5pZH0iPgogICAgICAgICAgICAgICAgPGEgaHJlZj0iJHtmaWxlLmRhdGF9IiBkb3dubG9hZD0iJHtmaWxlLm5hbWV9Ij4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvYT4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJmaWxlLXNpemUiPigke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX0pPC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PmApLmpvaW4oIiIpfTwvZGl2PmA7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBgPHA+JHtjb250ZW50M308L3A+YDsKICAgICAgfQogICAgfSkuZmlsdGVyKChodG1sMTgpID0+IGh0bWwxOCAhPT0gIiIpLmpvaW4oIlxuIik7CiAgfQogIHN0YXRpYyBnZXRNYXJrZG93bk91dHB1dChibG9ja3MpIHsKICAgIHJldHVybiBibG9ja3MubWFwKChibG9jaykgPT4gewogICAgICBzd2l0Y2ggKGJsb2NrLnR5cGUpIHsKICAgICAgICBjYXNlICJwYXJhZ3JhcGgiOgogICAgICAgICAgcmV0dXJuIGJsb2NrLmNvbnRlbnQ7CiAgICAgICAgY2FzZSAiaGVhZGluZy0xIjoKICAgICAgICAgIHJldHVybiBgIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTIiOgogICAgICAgICAgcmV0dXJuIGAjIyAke2Jsb2NrLmNvbnRlbnR9YDsKICAgICAgICBjYXNlICJoZWFkaW5nLTMiOgogICAgICAgICAgcmV0dXJuIGAjIyMgJHtibG9jay5jb250ZW50fWA7CiAgICAgICAgY2FzZSAicXVvdGUiOgogICAgICAgICAgcmV0dXJuIGA+ICR7YmxvY2suY29udGVudH1gOwogICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgcmV0dXJuIGBcYFxgXGAKJHtibG9jay5jb250ZW50fQpcYFxgXGBgOwogICAgICAgIGNhc2UgImxpc3QiOgogICAgICAgICAgY29uc3QgaXRlbXMgPSBibG9jay5jb250ZW50LnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiKSB7CiAgICAgICAgICAgIHJldHVybiBpdGVtcy5tYXAoKGl0ZW0sIGluZGV4MikgPT4gYCR7aW5kZXgyICsgMX0uICR7aXRlbX1gKS5qb2luKCJcbiIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgcmV0dXJuIGl0ZW1zLm1hcCgoaXRlbSkgPT4gYC0gJHtpdGVtfWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgY2FzZSAiZGl2aWRlciI6CiAgICAgICAgICByZXR1cm4gIi0tLSI7CiAgICAgICAgY2FzZSAiaW1hZ2UiOgogICAgICAgICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgICAgICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgICAgICAgIHJldHVybiBpbWFnZVVybCA/IGAhWyR7YWx0VGV4dH1dKCR7aW1hZ2VVcmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJ5b3V0dWJlIjoKICAgICAgICAgIGNvbnN0IHZpZGVvSWQgPSBibG9jay5tZXRhZGF0YT8udmlkZW9JZDsKICAgICAgICAgIGNvbnN0IHVybCA9IGJsb2NrLm1ldGFkYXRhPy51cmwgfHwgKHZpZGVvSWQgPyBgaHR0cHM6Ly95b3V0dWJlLmNvbS93YXRjaD92PSR7dmlkZW9JZH1gIDogIiIpOwogICAgICAgICAgcmV0dXJuIHVybCA/IGBbWW91VHViZSBWaWRlb10oJHt1cmx9KWAgOiAiIjsKICAgICAgICBjYXNlICJtYXJrZG93biI6CiAgICAgICAgICByZXR1cm4gYmxvY2suY29udGVudDsKICAgICAgICBjYXNlICJodG1sIjoKICAgICAgICAgIHJldHVybiBgPCEtLSBIVE1MIEJsb2NrCiR7YmxvY2suY29udGVudH0KLS0+YDsKICAgICAgICBjYXNlICJhdHRhY2htZW50IjoKICAgICAgICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgICAgICAgaWYgKGZpbGVzLmxlbmd0aCA+IDApIHsKICAgICAgICAgICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYC0gWyR7ZmlsZS5uYW1lfV0oJHtmaWxlLmRhdGF9KWApLmpvaW4oIlxuIik7CiAgICAgICAgICB9CiAgICAgICAgICByZXR1cm4gIiI7CiAgICAgICAgZGVmYXVsdDoKICAgICAgICAgIHJldHVybiBibG9jay5jb250ZW50OwogICAgICB9CiAgICB9KS5maWx0ZXIoKG1kKSA9PiBtZCAhPT0gIiIpLmpvaW4oIlxuXG4iKTsKICB9CiAgc3RhdGljIHBhcnNlSHRtbFRvQmxvY2tzKGh0bWwxOCkgewogICAgY29uc3QgcGFyc2VyID0gbmV3IERPTVBhcnNlcigpOwogICAgY29uc3QgZG9jID0gcGFyc2VyLnBhcnNlRnJvbVN0cmluZyhodG1sMTgsICJ0ZXh0L2h0bWwiKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgY29uc3QgcHJvY2Vzc05vZGUgPSAobm9kZTIpID0+IHsKICAgICAgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSAmJiBub2RlMi50ZXh0Q29udGVudD8udHJpbSgpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6IG5vZGUyLnRleHRDb250ZW50LnRyaW0oKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKG5vZGUyLm5vZGVUeXBlID09PSBOb2RlLkVMRU1FTlRfTk9ERSkgewogICAgICAgIGNvbnN0IGVsZW1lbnQ0ID0gbm9kZTI7CiAgICAgICAgY29uc3QgdGFnTmFtZSA9IGVsZW1lbnQ0LnRhZ05hbWUudG9Mb3dlckNhc2UoKTsKICAgICAgICBzd2l0Y2ggKHRhZ05hbWUpIHsKICAgICAgICAgIGNhc2UgInAiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImgxIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LmlubmVySFRNTCB8fCAiIgogICAgICAgICAgICB9KTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICBjYXNlICJoMiI6CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaDMiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImhlYWRpbmctMyIsCiAgICAgICAgICAgICAgY29udGVudDogZWxlbWVudDQuaW5uZXJIVE1MIHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJsb2NrcXVvdGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogInF1b3RlIiwKICAgICAgICAgICAgICBjb250ZW50OiBlbGVtZW50NC5pbm5lckhUTUwgfHwgIiIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAicHJlIjoKICAgICAgICAgIGNhc2UgImNvZGUiOgogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImNvZGUiLAogICAgICAgICAgICAgIGNvbnRlbnQ6IGVsZW1lbnQ0LnRleHRDb250ZW50IHx8ICIiCiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInVsIjoKICAgICAgICAgIGNhc2UgIm9sIjoKICAgICAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gQXJyYXkuZnJvbShlbGVtZW50NC5xdWVyeVNlbGVjdG9yQWxsKCJsaSIpKTsKICAgICAgICAgICAgY29uc3QgY29udGVudDMgPSBsaXN0SXRlbXMubWFwKChsaTIpID0+IGxpMi5pbm5lckhUTUwgfHwgIiIpLmpvaW4oIlxuIik7CiAgICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgICAgICB0eXBlOiAibGlzdCIsCiAgICAgICAgICAgICAgY29udGVudDogY29udGVudDMsCiAgICAgICAgICAgICAgbWV0YWRhdGE6IHsgbGlzdFR5cGU6IHRhZ05hbWUgPT09ICJvbCIgPyAib3JkZXJlZCIgOiAiYnVsbGV0IiB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImhyIjoKICAgICAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICAgIHR5cGU6ICJkaXZpZGVyIiwKICAgICAgICAgICAgICBjb250ZW50OiAiICIKICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiaW1nIjoKICAgICAgICAgICAgY29uc3QgaW1nRWxlbWVudCA9IGVsZW1lbnQ0OwogICAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgICAgdHlwZTogImltYWdlIiwKICAgICAgICAgICAgICBjb250ZW50OiBpbWdFbGVtZW50LmFsdCB8fCAiIiwKICAgICAgICAgICAgICBtZXRhZGF0YTogeyB1cmw6IGltZ0VsZW1lbnQuc3JjIH0KICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgZGVmYXVsdDoKICAgICAgICAgICAgZWxlbWVudDQuY2hpbGROb2Rlcy5mb3JFYWNoKChjaGlsZCkgPT4gcHJvY2Vzc05vZGUoY2hpbGQpKTsKICAgICAgICB9CiAgICAgIH0KICAgIH07CiAgICBkb2MuYm9keS5jaGlsZE5vZGVzLmZvckVhY2goKG5vZGUyKSA9PiBwcm9jZXNzTm9kZShub2RlMikpOwogICAgcmV0dXJuIGJsb2NrczsKICB9CiAgc3RhdGljIHBhcnNlTWFya2Rvd25Ub0Jsb2NrcyhtYXJrZG93bikgewogICAgY29uc3QgbGluZXMgPSBtYXJrZG93bi5zcGxpdCgiXG4iKTsKICAgIGNvbnN0IGJsb2NrcyA9IFtdOwogICAgbGV0IGN1cnJlbnRMaXN0SXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGxpbmVzLmxlbmd0aDsgaTExKyspIHsKICAgICAgY29uc3QgbGluZSA9IGxpbmVzW2kxMV07CiAgICAgIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTEiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoMikKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIiMjICIpKSB7CiAgICAgICAgYmxvY2tzLnB1c2goewogICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICB0eXBlOiAiaGVhZGluZy0yIiwKICAgICAgICAgIGNvbnRlbnQ6IGxpbmUuc3Vic3RyaW5nKDMpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5zdGFydHNXaXRoKCIjIyMgIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJoZWFkaW5nLTMiLAogICAgICAgICAgY29udGVudDogbGluZS5zdWJzdHJpbmcoNCkKICAgICAgICB9KTsKICAgICAgfSBlbHNlIGlmIChsaW5lLnN0YXJ0c1dpdGgoIj4gIikpIHsKICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJxdW90ZSIsCiAgICAgICAgICBjb250ZW50OiBsaW5lLnN1YnN0cmluZygyKQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKGxpbmUuc3RhcnRzV2l0aCgiYGBgIikpIHsKICAgICAgICBjb25zdCBjb2RlTGluZXMgPSBbXTsKICAgICAgICBpMTErKzsKICAgICAgICB3aGlsZSAoaTExIDwgbGluZXMubGVuZ3RoICYmICFsaW5lc1tpMTFdLnN0YXJ0c1dpdGgoImBgYCIpKSB7CiAgICAgICAgICBjb2RlTGluZXMucHVzaChsaW5lc1tpMTFdKTsKICAgICAgICAgIGkxMSsrOwogICAgICAgIH0KICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICBpZDogYGJsb2NrLSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMiwgOSl9YCwKICAgICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICAgIGNvbnRlbnQ6IGNvZGVMaW5lcy5qb2luKCJcbiIpCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXihcKnwtKSAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnN1YnN0cmluZygyKSk7CiAgICAgICAgaWYgKGkxMSA9PT0gbGluZXMubGVuZ3RoIC0gMSB8fCAhbGluZXNbaTExICsgMV0ubWF0Y2goL14oXCp8LSkgLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogImJ1bGxldCIgfQogICAgICAgICAgfSk7CiAgICAgICAgICBjdXJyZW50TGlzdEl0ZW1zID0gW107CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGxpbmUubWF0Y2goL15cZCtcLiAvKSkgewogICAgICAgIGN1cnJlbnRMaXN0SXRlbXMucHVzaChsaW5lLnJlcGxhY2UoL15cZCtcLiAvLCAiIikpOwogICAgICAgIGlmIChpMTEgPT09IGxpbmVzLmxlbmd0aCAtIDEgfHwgIWxpbmVzW2kxMSArIDFdLm1hdGNoKC9eXGQrXC4gLykpIHsKICAgICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgICAgaWQ6IGBibG9jay0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyaW5nKDIsIDkpfWAsCiAgICAgICAgICAgIHR5cGU6ICJsaXN0IiwKICAgICAgICAgICAgY29udGVudDogY3VycmVudExpc3RJdGVtcy5qb2luKCJcbiIpLAogICAgICAgICAgICBtZXRhZGF0YTogeyBsaXN0VHlwZTogIm9yZGVyZWQiIH0KICAgICAgICAgIH0pOwogICAgICAgICAgY3VycmVudExpc3RJdGVtcyA9IFtdOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lID09PSAiLS0tIiB8fCBsaW5lID09PSAiKioqIiB8fCBsaW5lID09PSAiX19fIikgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogImRpdmlkZXIiLAogICAgICAgICAgY29udGVudDogIiAiCiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSBpZiAobGluZS5tYXRjaCgvXiFcWyhbXlxdXSopXF1cKChbXlwpXSspXCkkLykpIHsKICAgICAgICBjb25zdCBtYXRjaDIgPSBsaW5lLm1hdGNoKC9eIVxbKFteXF1dKilcXVwoKFteXCldKylcKSQvKTsKICAgICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgICBibG9ja3MucHVzaCh7CiAgICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgICB0eXBlOiAiaW1hZ2UiLAogICAgICAgICAgICBjb250ZW50OiBtYXRjaDJbMV0gfHwgIiIsCiAgICAgICAgICAgIG1ldGFkYXRhOiB7IHVybDogbWF0Y2gyWzJdIH0KICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChsaW5lLnRyaW0oKSkgewogICAgICAgIGJsb2Nrcy5wdXNoKHsKICAgICAgICAgIGlkOiBgYmxvY2stJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCkudG9TdHJpbmcoMzYpLnN1YnN0cmluZygyLCA5KX1gLAogICAgICAgICAgdHlwZTogInBhcmFncmFwaCIsCiAgICAgICAgICBjb250ZW50OiBsaW5lCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH0KICAgIHJldHVybiBibG9ja3M7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z0Jsb2NrcyA9IGNsYXNzIHsKICBzdGF0aWMgcmVuZGVyTGlzdENvbnRlbnQoY29udGVudDMsIG1ldGFkYXRhKSB7CiAgICBjb25zdCBpdGVtcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpLmZpbHRlcigoaXRlbSkgPT4gaXRlbS50cmltKCkpOwogICAgaWYgKGl0ZW1zLmxlbmd0aCA9PT0gMCkKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdFRhZyA9IG1ldGFkYXRhPy5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7aXRlbXMubWFwKChpdGVtKSA9PiBgPGxpPiR7aXRlbX08L2xpPmApLmpvaW4oIiIpfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzdGF0aWMgcmVuZGVyQmxvY2soYmxvY2ssIGlzU2VsZWN0ZWQsIGhhbmRsZXJzMikgewogICAgaWYgKGJsb2NrLnR5cGUgPT09ICJkaXZpZGVyIikgewogICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdgogICAgICAgICAgY2xhc3M9ImJsb2NrIGRpdmlkZXIiCiAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICA+CiAgICAgICAgICA8aHI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgICA8ZGl2CiAgICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCAke2lzU2VsZWN0ZWQgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICBAaW5wdXQ9IiR7aGFuZGxlcnMyLm9uSW5wdXR9IgogICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICBAZm9jdXM9IiR7aGFuZGxlcnMyLm9uRm9jdXN9IgogICAgICAgICAgQGJsdXI9IiR7aGFuZGxlcnMyLm9uQmx1cn0iCiAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgIEBjb21wb3NpdGlvbmVuZD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZH0iCiAgICAgICAgICBAbW91c2V1cD0iJHsoZTExKSA9PiB7CiAgICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgICBpZiAoaGFuZGxlcnMyLm9uTW91c2VVcCkKICAgICAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXAoZTExKTsKICAgICAgfX0iCiAgICAgICAgICAuaW5uZXJIVE1MPSIke3RoaXMucmVuZGVyTGlzdENvbnRlbnQoYmxvY2suY29udGVudCwgYmxvY2subWV0YWRhdGEpfSIKICAgICAgICA+PC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJwbGFpbiB0ZXh0IjsKICAgICAgcmV0dXJuIGIyYAogICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtYmxvY2stY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvZGUtbGFuZ3VhZ2UiPiR7bGFuZ3VhZ2V9PC9kaXY+CiAgICAgICAgICA8ZGl2CiAgICAgICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICAgICAgQGlucHV0PSIke2hhbmRsZXJzMi5vbklucHV0fSIKICAgICAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgICAgIEBmb2N1cz0iJHtoYW5kbGVyczIub25Gb2N1c30iCiAgICAgICAgICAgIEBibHVyPSIke2hhbmRsZXJzMi5vbkJsdXJ9IgogICAgICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICAgICAgQGNvbXBvc2l0aW9uZW5kPSIke2hhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kfSIKICAgICAgICAgICAgQG1vdXNldXA9IiR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJCbG9jayBtb3VzZXVwIGV2ZW50IGZpcmVkIik7CiAgICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgICBoYW5kbGVyczIub25Nb3VzZVVwKGUxMSk7CiAgICAgIH19IgogICAgICAgICAgICAudGV4dENvbnRlbnQ9IiR7YmxvY2suY29udGVudCB8fCAiIn0iCiAgICAgICAgICA+PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBjb25zdCBibG9ja0VsZW1lbnQgPSBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayAke2Jsb2NrLnR5cGV9ICR7aXNTZWxlY3RlZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIEBpbnB1dD0iJHtoYW5kbGVyczIub25JbnB1dH0iCiAgICAgICAgQGtleWRvd249IiR7aGFuZGxlcnMyLm9uS2V5RG93bn0iCiAgICAgICAgQGZvY3VzPSIke2hhbmRsZXJzMi5vbkZvY3VzfSIKICAgICAgICBAYmx1cj0iJHtoYW5kbGVyczIub25CbHVyfSIKICAgICAgICBAY29tcG9zaXRpb25zdGFydD0iJHtoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0fSIKICAgICAgICBAY29tcG9zaXRpb25lbmQ9IiR7aGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmR9IgogICAgICAgIEBtb3VzZXVwPSIkeyhlMTEpID0+IHsKICAgICAgY29uc29sZS5sb2coIkJsb2NrIG1vdXNldXAgZXZlbnQgZmlyZWQiKTsKICAgICAgaWYgKGhhbmRsZXJzMi5vbk1vdXNlVXApCiAgICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcChlMTEpOwogICAgfX0iCiAgICAgICAgLmlubmVySFRNTD0iJHtibG9jay5jb250ZW50IHx8ICIifSIKICAgICAgPjwvZGl2PgogICAgYDsKICAgIHJldHVybiBibG9ja0VsZW1lbnQ7CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWwpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBpZiAoZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiXHUyMDBCIik7CiAgICAgIGVsZW1lbnQ0LmFwcGVuZENoaWxkKHRleHROb2RlKTsKICAgICAgcmFuZ2UyLnNldFN0YXJ0KHRleHROb2RlLCAxKTsKICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfSBlbHNlIHsKICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3ROb2RlKGVsZW1lbnQ0KTsKICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgfSBlbHNlIHsKICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcihsYXN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICBpZiAoZWxlbWVudDQudGV4dENvbnRlbnQgPT09ICJcdTIwMEIiKSB7CiAgICAgIGVsZW1lbnQ0LnRleHRDb250ZW50ID0gIiI7CiAgICB9CiAgfQogIHN0YXRpYyBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWwgPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoIXNlbCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGlmIChlbGVtZW50NC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByYW5nZTIuc2V0U3RhcnQoZWxlbWVudDQsIDApOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBmaXJzdE5vZGUgPSB0aGlzLmdldEZpcnN0Tm9kZShlbGVtZW50NCk7CiAgICAgIGlmIChmaXJzdE5vZGUubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGZpcnN0Tm9kZSwgMCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcmFuZ2UyLnNldFN0YXJ0QmVmb3JlKGZpcnN0Tm9kZSk7CiAgICAgIH0KICAgICAgcmFuZ2UyLmNvbGxhcHNlKHRydWUpOwogICAgfQogICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgfQogIHN0YXRpYyBnZXRMYXN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGxhc3RDaGlsZCA9IGVsZW1lbnQ0LmNoaWxkTm9kZXNbZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxXTsKICAgIGlmIChsYXN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGxhc3RDaGlsZC5jaGlsZE5vZGVzLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gbGFzdENoaWxkOwogICAgfQogICAgcmV0dXJuIHRoaXMuZ2V0TGFzdE5vZGUobGFzdENoaWxkKTsKICB9CiAgc3RhdGljIGdldEZpcnN0Tm9kZShlbGVtZW50NCkgewogICAgaWYgKGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGNvbnN0IGZpcnN0Q2hpbGQgPSBlbGVtZW50NC5jaGlsZE5vZGVzWzBdOwogICAgaWYgKGZpcnN0Q2hpbGQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFIHx8IGZpcnN0Q2hpbGQuY2hpbGROb2Rlcy5sZW5ndGggPT09IDApIHsKICAgICAgcmV0dXJuIGZpcnN0Q2hpbGQ7CiAgICB9CiAgICByZXR1cm4gdGhpcy5nZXRGaXJzdE5vZGUoZmlyc3RDaGlsZCk7CiAgfQogIHN0YXRpYyBmb2N1c0xpc3RJdGVtKGxpc3RFbGVtZW50KSB7CiAgICBjb25zdCBmaXJzdExpID0gbGlzdEVsZW1lbnQucXVlcnlTZWxlY3RvcigibGkiKTsKICAgIGlmIChmaXJzdExpKSB7CiAgICAgIGZpcnN0TGkuZm9jdXMoKTsKICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICByYW5nZTIuc2VsZWN0Tm9kZUNvbnRlbnRzKGZpcnN0TGkpOwogICAgICByYW5nZTIuY29sbGFwc2UodHJ1ZSk7CiAgICAgIHNlbC5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2Nrb3BlcmF0aW9ucy5qcwp2YXIgV3lzaXd5Z0Jsb2NrT3BlcmF0aW9ucyA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogQ3JlYXRlcyBhIG5ldyBibG9jayB3aXRoIHRoZSBzcGVjaWZpZWQgcGFyYW1ldGVycwogICAqLwogIGNyZWF0ZUJsb2NrKHR5cGU1ID0gInBhcmFncmFwaCIsIGNvbnRlbnQzID0gIiIsIG1ldGFkYXRhKSB7CiAgICByZXR1cm4gewogICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgdHlwZTogdHlwZTUsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAuLi5tZXRhZGF0YSAmJiB7IG1ldGFkYXRhIH0KICAgIH07CiAgfQogIC8qKgogICAqIEluc2VydHMgYSBibG9jayBhZnRlciB0aGUgc3BlY2lmaWVkIGJsb2NrCiAgICovCiAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgIGNvbnN0IGJsb2NrcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrczsKICAgIGNvbnN0IGJsb2NrSW5kZXggPSBibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGFmdGVyQmxvY2suaWQpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gWwogICAgICAuLi5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLAogICAgICBuZXdCbG9jaywKICAgICAgLi4uYmxvY2tzLnNsaWNlKGJsb2NrSW5kZXggKyAxKQogICAgXTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IGFmdGVyV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YWZ0ZXJCbG9jay5pZH0iXWApOwogICAgICBpZiAoYWZ0ZXJXcmFwcGVyKSB7CiAgICAgICAgY29uc3QgbmV3V3JhcHBlciA9IHRoaXMuY29tcG9uZW50LmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgfQogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgYXdhaXQgdGhpcy5mb2N1c0Jsb2NrKG5ld0Jsb2NrLmlkLCAic3RhcnQiKTsKICAgIH0KICB9CiAgLyoqCiAgICogUmVtb3ZlcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIHJlbW92ZUJsb2NrKGJsb2NrSWQpIHsKICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbHRlcigoYjUpID0+IGI1LmlkICE9PSBibG9ja0lkKTsKICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgIGNvbnN0IHdyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgICAgaWYgKHdyYXBwZXIpIHsKICAgICAgICB3cmFwcGVyLnJlbW92ZSgpOwogICAgICB9CiAgICB9CiAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogIH0KICAvKioKICAgKiBGaW5kcyBhIGJsb2NrIGJ5IGl0cyBJRAogICAqLwogIGZpbmRCbG9jayhibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gYmxvY2tJZCk7CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGluZGV4IG9mIGEgYmxvY2sKICAgKi8KICBnZXRCbG9ja0luZGV4KGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmNvbXBvbmVudC5ibG9ja3MuZmluZEluZGV4KChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogIH0KICAvKioKICAgKiBGb2N1c2VzIGEgc3BlY2lmaWMgYmxvY2sKICAgKi8KICBhc3luYyBmb2N1c0Jsb2NrKGJsb2NrSWQsIGN1cnNvclBvc2l0aW9uID0gInN0YXJ0IikgewogICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrSWR9Il1gKTsKICAgIGlmICh3cmFwcGVyRWxlbWVudCkgewogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogVXBkYXRlcyB0aGUgY29udGVudCBvZiBhIGJsb2NrCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrSWQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZmluZEJsb2NrKGJsb2NrSWQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIH0KICB9CiAgLyoqCiAgICogVHJhbnNmb3JtcyBhIGJsb2NrIHRvIGEgZGlmZmVyZW50IHR5cGUKICAgKi8KICB0cmFuc2Zvcm1CbG9jayhibG9ja0lkLCBuZXdUeXBlLCBtZXRhZGF0YSkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmZpbmRCbG9jayhibG9ja0lkKTsKICAgIGlmIChibG9jaykgewogICAgICB0aGlzLmNvbXBvbmVudC5zYXZlVG9IaXN0b3J5KGZhbHNlKTsKICAgICAgYmxvY2sudHlwZSA9IG5ld1R5cGU7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgaWYgKG1ldGFkYXRhKSB7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSBtZXRhZGF0YTsKICAgICAgfQogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgfQogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfQogIH0KICAvKioKICAgKiBNb3ZlcyBhIGJsb2NrIHRvIGEgbmV3IHBvc2l0aW9uCiAgICovCiAgbW92ZUJsb2NrKGJsb2NrSWQsIHRhcmdldEluZGV4KSB7CiAgICBjb25zdCBibG9ja3MgPSBbLi4udGhpcy5jb21wb25lbnQuYmxvY2tzXTsKICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIGlmIChjdXJyZW50SW5kZXggPT09IC0xIHx8IHRhcmdldEluZGV4IDwgMCB8fCB0YXJnZXRJbmRleCA+PSBibG9ja3MubGVuZ3RoKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IFttb3ZlZEJsb2NrXSA9IGJsb2Nrcy5zcGxpY2UoY3VycmVudEluZGV4LCAxKTsKICAgIGJsb2Nrcy5zcGxpY2UodGFyZ2V0SW5kZXgsIDAsIG1vdmVkQmxvY2spOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gYmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgcHJldmlvdXMgYmxvY2sKICAgKi8KICBnZXRQcmV2aW91c0Jsb2NrKGJsb2NrSWQpIHsKICAgIGNvbnN0IGluZGV4MiA9IHRoaXMuZ2V0QmxvY2tJbmRleChibG9ja0lkKTsKICAgIHJldHVybiBpbmRleDIgPiAwID8gdGhpcy5jb21wb25lbnQuYmxvY2tzW2luZGV4MiAtIDFdIDogbnVsbDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgbmV4dCBibG9jawogICAqLwogIGdldE5leHRCbG9jayhibG9ja0lkKSB7CiAgICBjb25zdCBpbmRleDIgPSB0aGlzLmdldEJsb2NrSW5kZXgoYmxvY2tJZCk7CiAgICByZXR1cm4gaW5kZXgyIDwgdGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCAtIDEgPyB0aGlzLmNvbXBvbmVudC5ibG9ja3NbaW5kZXgyICsgMV0gOiBudWxsOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLmJhc2UuanMKdmFyIEJhc2VCbG9ja0hhbmRsZXIgPSBjbGFzcyB7CiAgLy8gRGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBmb3IgY29tbW9uIHNldHVwCiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICB9CiAgLy8gQ29tbW9uIHN0eWxlcyBjYW4gYmUgZGVmaW5lZCBoZXJlCiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuICIiOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2Jsb2NrLnJlZ2lzdHJ5LmpzCnZhciBCbG9ja1JlZ2lzdHJ5ID0gY2xhc3MgewogIHN0YXRpYyBoYW5kbGVycyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgc3RhdGljIHJlZ2lzdGVyKHR5cGU1LCBoYW5kbGVyMikgewogICAgdGhpcy5oYW5kbGVycy5zZXQodHlwZTUsIGhhbmRsZXIyKTsKICB9CiAgc3RhdGljIGdldEhhbmRsZXIodHlwZTUpIHsKICAgIHJldHVybiB0aGlzLmhhbmRsZXJzLmdldCh0eXBlNSk7CiAgfQogIHN0YXRpYyBnZXRBbGxUeXBlcygpIHsKICAgIHJldHVybiBBcnJheS5mcm9tKHRoaXMuaGFuZGxlcnMua2V5cygpKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L3BhcmFncmFwaC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgUGFyYWdyYXBoQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInBhcmFncmFwaCI7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBwYXJhZ3JhcGgke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgY29uc29sZS5lcnJvcigiUGFyYWdyYXBoQmxvY2tIYW5kbGVyLnNldHVwOiBObyBwYXJhZ3JhcGggYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsIChlMTEpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uSW5wdXQoZTExKTsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBwYXJhZ3JhcGhCbG9jay5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25CbHVyKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHBhcmFncmFwaEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNldXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgICBoYW5kbGVyczIub25Nb3VzZVVwPy4oZTExKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgcGFyYWdyYXBoQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcGFyYWdyYXBoQmxvY2ssIGJsb2NrKTsKICB9CiAgc2V0dXBTZWxlY3Rpb25IYW5kbGVyKGVsZW1lbnQ0LCBwYXJhZ3JhcGhCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBwYXJhZ3JhcGhCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocGFyYWdyYXBoQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpOwogICAgICBjb25zdCBlbmRJbkJsb2NrID0gV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gZWxlbWVudDQuY2xvc2VzdCgiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAod3lzaXd5Z0Jsb2NrKSB7CiAgICAgIGNvbnN0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2sgPSB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2s7CiAgICAgIHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjayA9IGFzeW5jIGZ1bmN0aW9uKCkgewogICAgICAgIGlmICh0aGlzLnNlbGVjdGlvbkhhbmRsZXIpIHsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuc2VsZWN0aW9uSGFuZGxlcik7CiAgICAgICAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogICAgICAgIH0KICAgICAgICBpZiAob3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjaykgewogICAgICAgICAgYXdhaXQgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjay5jYWxsKHd5c2l3eWdCbG9jayk7CiAgICAgICAgfQogICAgICB9LmJpbmQodGhpcyk7CiAgICB9CiAgfQogIGRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIGRldGFpbCkgewogICAgY29uc3QgZXZlbnQgPSBuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgIGRldGFpbCwKICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgY29tcG9zZWQ6IHRydWUKICAgIH0pOwogICAgZWxlbWVudDQuZGlzcGF0Y2hFdmVudChldmVudCk7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIFBhcmFncmFwaCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnBhcmFncmFwaCB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgZm9udC13ZWlnaHQ6IDQwMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIlR5cGUgJy8nIGZvciBjb21tYW5kcy4uLiI7CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBwYXJhZ3JhcGggZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcGFyYWdyYXBoQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucGFyYWdyYXBoIik7CiAgICBpZiAoIXBhcmFncmFwaEJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKHBhcmFncmFwaEJsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybiAiIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gcGFyYWdyYXBoQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBwYXJhZ3JhcGhCbG9jazsKICAgIHBhcmFncmFwaEJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmIChwYXJhZ3JhcGhCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKHBhcmFncmFwaEJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9FbmQocGFyYWdyYXBoQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHBhcmFncmFwaEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnBhcmFncmFwaCIpOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFwYXJhZ3JhcGhCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHBhcmFncmFwaEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgcGFyYWdyYXBoQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcGFyYWdyYXBoQmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBwYXJhZ3JhcGhCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCAmJiBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudC5sZW5ndGggPiAwKSB7CiAgICAgIGNvbnN0IHNlbCA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKHNlbCkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3QgbGFzdE5vZGUgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShwYXJhZ3JhcGhCbG9jaykgfHwgcGFyYWdyYXBoQmxvY2s7CiAgICAgICAgaWYgKGxhc3ROb2RlLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGxhc3ROb2RlLCBsYXN0Tm9kZS50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDApOwogICAgICAgICAgcmFuZ2UyLnNldEVuZChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgcmFuZ2UyLnNlbGVjdE5vZGVDb250ZW50cyhsYXN0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuY29sbGFwc2UoZmFsc2UpOwogICAgICAgIH0KICAgICAgICBzZWwucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICAgIHBhcmFncmFwaEJsb2NrLmZvY3VzKCk7CiAgICBjb25zdCBzZXRDdXJzb3IgPSAoKSA9PiB7CiAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiICYmICghcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQgfHwgcGFyYWdyYXBoQmxvY2sudGV4dENvbnRlbnQubGVuZ3RoID09PSAwKSkgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocGFyYWdyYXBoQmxvY2ssIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH07CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gcGFyYWdyYXBoQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHBhcmFncmFwaEJsb2NrKSB7CiAgICAgICAgICAgICAgc2V0Q3Vyc29yKCk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0sIDEwKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBwYXJhZ3JhcGhCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5wYXJhZ3JhcGgiKTsKICAgIGlmICghcGFyYWdyYXBoQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBwYXJhZ3JhcGhCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShwYXJhZ3JhcGhCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IHBhcmFncmFwaEJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBwYXJhZ3JhcGhCbG9jay5pbm5lckhUTUwKICAgICAgfTsKICAgIH0KICAgIGNvbnN0IGJlZm9yZVJhbmdlID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgYmVmb3JlUmFuZ2Uuc2V0U3RhcnQocGFyYWdyYXBoQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKHBhcmFncmFwaEJsb2NrLCBwYXJhZ3JhcGhCbG9jay5jaGlsZE5vZGVzLmxlbmd0aCk7CiAgICBjb25zdCBiZWZvcmVGcmFnbWVudCA9IGJlZm9yZVJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgIGNvbnN0IHRlbXBEaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYmVmb3JlRnJhZ21lbnQpOwogICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgdGVtcERpdi5pbm5lckhUTUwgPSAiIjsKICAgIHRlbXBEaXYuYXBwZW5kQ2hpbGQoYWZ0ZXJGcmFnbWVudCk7CiAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogYmVmb3JlSHRtbCwKICAgICAgYWZ0ZXI6IGFmdGVySHRtbAogICAgfTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy90ZXh0L2hlYWRpbmcuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIEhlYWRpbmdCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGU7CiAgbGV2ZWw7CiAgLy8gVHJhY2sgY3Vyc29yIHBvc2l0aW9uCiAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogIGxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICBzZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICBjb25zdHJ1Y3Rvcih0eXBlNSkgewogICAgc3VwZXIoKTsKICAgIHRoaXMudHlwZSA9IHR5cGU1OwogICAgdGhpcy5sZXZlbCA9IHBhcnNlSW50KHR5cGU1LnNwbGl0KCItIilbMV0pOwogIH0KICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gdGhpcy5nZXRQbGFjZWhvbGRlcigpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJibG9jayBoZWFkaW5nLSR7dGhpcy5sZXZlbH0ke3NlbGVjdGVkQ2xhc3N9IgogICAgICAgIGNvbnRlbnRlZGl0YWJsZT0idHJ1ZSIKICAgICAgICBkYXRhLXBsYWNlaG9sZGVyPSIke3BsYWNlaG9sZGVyfSIKICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICBkYXRhLWJsb2NrLXR5cGU9IiR7YmxvY2sudHlwZX0iCiAgICAgID48L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICBjb25zb2xlLmVycm9yKCJIZWFkaW5nQmxvY2tIYW5kbGVyLnNldHVwOiBObyBoZWFkaW5nIGJsb2NrIGVsZW1lbnQgZm91bmQiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKGJsb2NrLmNvbnRlbnQgJiYgIWhlYWRpbmdCbG9jay5pbm5lckhUTUwpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgaGVhZGluZ0Jsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQmx1cigpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25zdGFydCIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25TdGFydCgpOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uTW91c2VVcD8uKGUxMSk7CiAgICB9KTsKICAgIGhlYWRpbmdCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICB9CiAgICAgIH0sIDApOwogICAgfSk7CiAgICBoZWFkaW5nQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jayk7CiAgfQogIHNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgaGVhZGluZ0Jsb2NrLCBibG9jaykgewogICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgIGNvbnN0IHNlbGVjdGlvbiA9IHdpbmRvdy5nZXRTZWxlY3Rpb24oKTsKICAgICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzZWxlY3RlZFRleHQgPSBzZWxlY3Rpb24udG9TdHJpbmcoKTsKICAgICAgaWYgKHNlbGVjdGVkVGV4dC5sZW5ndGggPT09IDApIHsKICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3lzaXd5Z0Jsb2NrMiA9IGhlYWRpbmdCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgY29uc3QgZW5kSW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgIGlmIChzdGFydEluQmxvY2sgfHwgZW5kSW5CbG9jaykgewogICAgICAgIGlmIChzZWxlY3RlZFRleHQgIT09IHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgICB0ZXh0OiBzZWxlY3RlZFRleHQudHJpbSgpLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0gZWxzZSBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgIH0pOwogICAgICB9CiAgICB9OwogICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gY2hlY2tTZWxlY3Rpb247CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBoZWFkaW5nQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suaGVhZGluZy0xIHsKICAgICAgICBmb250LXNpemU6IDMycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDcwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4yOwogICAgICAgIG1hcmdpbjogMjRweCAwIDhweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0yIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS4zOwogICAgICAgIG1hcmdpbjogMjBweCAwIDZweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CgogICAgICAuYmxvY2suaGVhZGluZy0zIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS40OwogICAgICAgIG1hcmdpbjogMTZweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZmZmZmZmIil9OwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHN3aXRjaCAodGhpcy5sZXZlbCkgewogICAgICBjYXNlIDE6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDEiOwogICAgICBjYXNlIDI6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDIiOwogICAgICBjYXNlIDM6CiAgICAgICAgcmV0dXJuICJIZWFkaW5nIDMiOwogICAgICBkZWZhdWx0OgogICAgICAgIHJldHVybiAiSGVhZGluZyI7CiAgICB9CiAgfQogIC8qKgogICAqIEhlbHBlciB0byBnZXQgdGhlIGxhc3QgdGV4dCBub2RlIGluIGFuIGVsZW1lbnQKICAgKi8KICBnZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgICAgY29uc3QgbGFzdFRleHQgPSB0aGlzLmdldExhc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAobGFzdFRleHQpCiAgICAgICAgcmV0dXJuIGxhc3RUZXh0OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBoZWFkaW5nIGZ1bmN0aW9uYWxpdHkgKG1vc3RseSB0aGUgc2FtZSBhcyBwYXJhZ3JhcGgpCiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IGNvbnRleHQyPy5jb21wb25lbnQ7CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2s/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgIGNvbnN0IGJsb2NrU2hhZG93Um9vdCA9IGNvbnRleHQyPy5zaGFkb3dSb290OwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja1NoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8pIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oaGVhZGluZ0Jsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoaGVhZGluZ0Jsb2NrKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgY29uc3QgcG9zaXRpb24zID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICAgIHJldHVybiBwb3NpdGlvbjM7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoIWhlYWRpbmdCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgY29udGVudDMgPSBoZWFkaW5nQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2s7CiAgICBoZWFkaW5nQmxvY2suaW5uZXJIVE1MID0gY29udGVudDM7CiAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgaGVhZGluZ0Jsb2NrLmZvY3VzKCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBoZWFkaW5nQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKGAuYmxvY2suaGVhZGluZy0ke3RoaXMubGV2ZWx9YCk7CiAgICBpZiAoaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmIChoZWFkaW5nQmxvY2spIHsKICAgICAgV3lzaXd5Z0Jsb2Nrcy5zZXRDdXJzb3JUb0VuZChoZWFkaW5nQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBoZWFkaW5nQmxvY2sgJiYgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIGhlYWRpbmdCbG9jay5mb2N1cygpOwogICAgICB9KTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIiwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKQogICAgICByZXR1cm47CiAgICBpZiAoIWhlYWRpbmdCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIGhlYWRpbmdCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBpZiAocG9zaXRpb24zID09PSAiZW5kIiAmJiBoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgJiYgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA+IDApIHsKICAgICAgY29uc3Qgc2VsID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoc2VsKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBsYXN0Tm9kZSA9IHRoaXMuZ2V0TGFzdFRleHROb2RlKGhlYWRpbmdCbG9jaykgfHwgaGVhZGluZ0Jsb2NrOwogICAgICAgIGlmIChsYXN0Tm9kZS5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICAgIHJhbmdlMi5zZXRTdGFydChsYXN0Tm9kZSwgbGFzdE5vZGUudGV4dENvbnRlbnQ/Lmxlbmd0aCB8fCAwKTsKICAgICAgICAgIHJhbmdlMi5zZXRFbmQobGFzdE5vZGUsIGxhc3ROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJhbmdlMi5zZWxlY3ROb2RlQ29udGVudHMobGFzdE5vZGUpOwogICAgICAgICAgcmFuZ2UyLmNvbGxhcHNlKGZhbHNlKTsKICAgICAgICB9CiAgICAgICAgc2VsLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgIHNlbC5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgICBoZWFkaW5nQmxvY2suZm9jdXMoKTsKICAgIGNvbnN0IHNldEN1cnNvciA9ICgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9IGVsc2UgaWYgKHBvc2l0aW9uMyA9PT0gImVuZCIgJiYgKCFoZWFkaW5nQmxvY2sudGV4dENvbnRlbnQgfHwgaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50Lmxlbmd0aCA9PT0gMCkpIHsKICAgICAgICB0aGlzLnNldEN1cnNvclRvRW5kKGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGhlYWRpbmdCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGhlYWRpbmdCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBoZWFkaW5nQmxvY2spIHsKICAgICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMTApOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGhlYWRpbmdCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoYC5ibG9jay5oZWFkaW5nLSR7dGhpcy5sZXZlbH1gKTsKICAgIGlmICghaGVhZGluZ0Jsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgIGNvbnN0IGZ1bGxUZXh0ID0gaGVhZGluZ0Jsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGhlYWRpbmdCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcikpIHsKICAgICAgaWYgKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gIT09IG51bGwpIHsKICAgICAgICBjb25zdCBmdWxsVGV4dCA9IGhlYWRpbmdCbG9jay50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgIHJldHVybiB7CiAgICAgICAgICBiZWZvcmU6IGZ1bGxUZXh0LnN1YnN0cmluZygwLCBwb3MpLAogICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgfTsKICAgICAgfQogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGN1cnNvclBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQsIGNvbnRleHQyKTsKICAgIGlmIChjdXJzb3JQb3MgPT09IG51bGwgfHwgY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICBhZnRlcjogaGVhZGluZ0Jsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChoZWFkaW5nQmxvY2ssIDApOwogICAgYmVmb3JlUmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgYWZ0ZXJSYW5nZS5zZXRTdGFydChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGhlYWRpbmdCbG9jaywgaGVhZGluZ0Jsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvcXVvdGUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFF1b3RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gInF1b3RlIjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24KICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSB0aGlzLmdldFBsYWNlaG9sZGVyKCk7CiAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrIHF1b3RlJHtzZWxlY3RlZENsYXNzfSIKICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgZGF0YS1wbGFjZWhvbGRlcj0iJHtwbGFjZWhvbGRlcn0iCiAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICA+PC9kaXY+CiAgICBgOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIlF1b3RlQmxvY2tIYW5kbGVyLnNldHVwOiBObyBxdW90ZSBibG9jayBlbGVtZW50IGZvdW5kIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmIChibG9jay5jb250ZW50ICYmICFxdW90ZUJsb2NrLmlubmVySFRNTCkgewogICAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGJsb2NrLmNvbnRlbnQ7CiAgICB9CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Gb2N1cygpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgcXVvdGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY29tcG9zaXRpb25lbmQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uRW5kKCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBxdW90ZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHF1b3RlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5dXAiLCAoZTExKSA9PiB7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICB0aGlzLnNldHVwU2VsZWN0aW9uSGFuZGxlcihlbGVtZW50NCwgcXVvdGVCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIHF1b3RlQmxvY2ssIGJsb2NrKSB7CiAgICBjb25zdCBjaGVja1NlbGVjdGlvbiA9ICgpID0+IHsKICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHNlbGVjdGVkVGV4dCA9IHNlbGVjdGlvbi50b1N0cmluZygpOwogICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3eXNpd3lnQmxvY2syID0gcXVvdGVCbG9jay5nZXRSb290Tm9kZSgpLmhvc3Q7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jazI/LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSB3eXNpd3lnQmxvY2syPy5zaGFkb3dSb290OwogICAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudFNoYWRvd1Jvb3QpOwogICAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IHN0YXJ0SW5CbG9jayA9IFd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00ocXVvdGVCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKTsKICAgICAgaWYgKHN0YXJ0SW5CbG9jayB8fCBlbmRJbkJsb2NrKSB7CiAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSBzZWxlY3RlZFRleHQ7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBXeXNpd3lnU2VsZWN0aW9uLmNyZWF0ZVJhbmdlRnJvbUluZm8oc2VsZWN0aW9uSW5mbyk7CiAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgdGhpcy5kaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCB7CiAgICAgICAgICAgIHRleHQ6IHNlbGVjdGVkVGV4dC50cmltKCksCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICByYW5nZTogcmFuZ2UyLAogICAgICAgICAgICByZWN0LAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IHRydWUKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmICh0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgfSk7CiAgICAgIH0KICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCBjaGVja1NlbGVjdGlvbik7CiAgICB0aGlzLnNlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgIGNvbnN0IHd5c2l3eWdCbG9jayA9IHF1b3RlQmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgaWYgKHd5c2l3eWdCbG9jaykgewogICAgICBjb25zdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrID0gd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrOwogICAgICB3eXNpd3lnQmxvY2suZGlzY29ubmVjdGVkQ2FsbGJhY2sgPSBhc3luYyBmdW5jdGlvbigpIHsKICAgICAgICBpZiAodGhpcy5zZWxlY3Rpb25IYW5kbGVyKSB7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJzZWxlY3Rpb25jaGFuZ2UiLCB0aGlzLnNlbGVjdGlvbkhhbmRsZXIpOwogICAgICAgICAgdGhpcy5zZWxlY3Rpb25IYW5kbGVyID0gbnVsbDsKICAgICAgICB9CiAgICAgICAgaWYgKG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2spIHsKICAgICAgICAgIGF3YWl0IG9yaWdpbmFsRGlzY29ubmVjdGVkQ2FsbGJhY2suY2FsbCh3eXNpd3lnQmxvY2spOwogICAgICAgIH0KICAgICAgfS5iaW5kKHRoaXMpOwogICAgfQogIH0KICBkaXNwYXRjaFNlbGVjdGlvbkV2ZW50KGVsZW1lbnQ0LCBkZXRhaWwpIHsKICAgIGNvbnN0IGV2ZW50ID0gbmV3IEN1c3RvbUV2ZW50KCJibG9jay10ZXh0LXNlbGVjdGVkIiwgewogICAgICBkZXRhaWwsCiAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICB9KTsKICAgIGVsZW1lbnQ0LmRpc3BhdGNoRXZlbnQoZXZlbnQpOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBRdW90ZSBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLnF1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzU1NSIsICIjYjBiMGIwIil9OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIG1hcmdpbjogMTZweCAwOwogICAgICB9CiAgICBgOwogIH0KICBnZXRQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiAiQWRkIGEgcXVvdGUuLi4iOwogIH0KICAvLyBIZWxwZXIgbWV0aG9kcyBmb3IgcXVvdGUgZnVuY3Rpb25hbGl0eQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gY29udGV4dDI/LmNvbXBvbmVudDsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHd5c2l3eWdCbG9jaz8uY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBwYXJlbnRTaGFkb3dSb290ID0gcGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290OwogICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gY29udGV4dDI/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICBpZiAoYmxvY2tTaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShxdW90ZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMocXVvdGVCbG9jayk7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHByZUNhcmV0UmFuZ2UudG9TdHJpbmcoKS5sZW5ndGg7CiAgICByZXR1cm4gcG9zaXRpb24zOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZXh0MikgewogICAgY29uc3QgcXVvdGVCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5xdW90ZSIpOwogICAgaWYgKCFxdW90ZUJsb2NrKQogICAgICByZXR1cm4gIiI7CiAgICBjb25zdCBjb250ZW50MyA9IHF1b3RlQmxvY2suaW5uZXJIVE1MIHx8ICIiOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2s7CiAgICBxdW90ZUJsb2NrLmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgaWYgKGhhZEZvY3VzKSB7CiAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmIChxdW90ZUJsb2NrKSB7CiAgICAgIFd5c2l3eWdCbG9ja3Muc2V0Q3Vyc29yVG9TdGFydChxdW90ZUJsb2NrKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAocXVvdGVCbG9jaykgewogICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKHF1b3RlQmxvY2spOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IHF1b3RlQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2sucXVvdGUiKTsKICAgIGlmICghcXVvdGVCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFxdW90ZUJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgcXVvdGVCbG9jay5zZXRBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIsICJ0cnVlIik7CiAgICB9CiAgICBxdW90ZUJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gcXVvdGVCbG9jayAmJiBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ICE9PSBxdW90ZUJsb2NrKSB7CiAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgIHF1b3RlQmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghcXVvdGVCbG9jay5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgIHF1b3RlQmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgcXVvdGVCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24ocXVvdGVCbG9jaywgcG9zaXRpb24zKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrIHx8IGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IHF1b3RlQmxvY2spIHsKICAgICAgc2V0Q3Vyc29yKCk7CiAgICB9IGVsc2UgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCA9PT0gcXVvdGVCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBxdW90ZUJsb2NrKSB7CiAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBxdW90ZUJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLnF1b3RlIik7CiAgICBpZiAoIXF1b3RlQmxvY2spIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgaWYgKCFXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKHF1b3RlQmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIGlmICh0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uICE9PSBudWxsKSB7CiAgICAgICAgY29uc3QgZnVsbFRleHQgPSBxdW90ZUJsb2NrLnRleHRDb250ZW50IHx8ICIiOwogICAgICAgIGNvbnN0IHBvcyA9IE1hdGgubWluKHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24sIGZ1bGxUZXh0Lmxlbmd0aCk7CiAgICAgICAgcmV0dXJuIHsKICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICBhZnRlcjogZnVsbFRleHQuc3Vic3RyaW5nKHBvcykKICAgICAgICB9OwogICAgICB9CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgaWYgKGN1cnNvclBvcyA9PT0gbnVsbCB8fCBjdXJzb3JQb3MgPT09IDApIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBiZWZvcmU6ICIiLAogICAgICAgIGFmdGVyOiBxdW90ZUJsb2NrLmlubmVySFRNTAogICAgICB9OwogICAgfQogICAgY29uc3QgYmVmb3JlUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgY29uc3QgYWZ0ZXJSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChxdW90ZUJsb2NrLCAwKTsKICAgIGJlZm9yZVJhbmdlLnNldEVuZChzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLCBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0KTsKICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICBhZnRlclJhbmdlLnNldEVuZChxdW90ZUJsb2NrLCBxdW90ZUJsb2NrLmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgIGNvbnN0IGJlZm9yZUZyYWdtZW50ID0gYmVmb3JlUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgYWZ0ZXJGcmFnbWVudCA9IGFmdGVyUmFuZ2UuY2xvbmVDb250ZW50cygpOwogICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChiZWZvcmVGcmFnbWVudCk7CiAgICBjb25zdCBiZWZvcmVIdG1sID0gdGVtcERpdi5pbm5lckhUTUw7CiAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgdGVtcERpdi5hcHBlbmRDaGlsZChhZnRlckZyYWdtZW50KTsKICAgIGNvbnN0IGFmdGVySHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgcmV0dXJuIHsKICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICBhZnRlcjogYWZ0ZXJIdG1sCiAgICB9OwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvY29kZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3NlcnZpY2VzKCk7CnZhciBDb2RlQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImNvZGUiOwogIGhpZ2hsaWdodFRpbWVyID0gbnVsbDsKICBoaWdobGlnaHRKcyA9IG51bGw7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCBsYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAidHlwZXNjcmlwdCI7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lQ291bnQgPSBjb250ZW50My5zcGxpdCgiXG4iKS5sZW5ndGg7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgY29uc3QgbGFuZ3VhZ2VPcHRpb25zID0gUFJPR1JBTU1JTkdfTEFOR1VBR0VTLm1hcCgobGFuZykgPT4gewogICAgICBjb25zdCB2YWx1ZTIgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIHJldHVybiBgPG9wdGlvbiB2YWx1ZT0iJHt2YWx1ZTJ9IiAke3ZhbHVlMiA9PT0gbGFuZ3VhZ2UgPyAic2VsZWN0ZWQiIDogIiJ9PiR7bGFuZ308L29wdGlvbj5gOwogICAgfSkuam9pbigiIik7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJjb2RlLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiBkYXRhLWxhbmd1YWdlPSIke2xhbmd1YWdlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1oZWFkZXIiPgogICAgICAgICAgPHNlbGVjdCBjbGFzcz0ibGFuZ3VhZ2Utc2VsZWN0b3IiIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Ij4KICAgICAgICAgICAgJHtsYW5ndWFnZU9wdGlvbnN9CiAgICAgICAgICA8L3NlbGVjdD4KICAgICAgICAgIDxidXR0b24gY2xhc3M9ImNvcHktYnV0dG9uIiB0aXRsZT0iQ29weSBjb2RlIj4KICAgICAgICAgICAgPHN2ZyBjbGFzcz0iY29weS1pY29uIiB3aWR0aD0iMTYiIGhlaWdodD0iMTYiIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgICA8cGF0aCBkPSJNMCA2Ljc1QzAgNS43ODQuNzg0IDUgMS43NSA1aDEuNWEuNzUuNzUgMCAwMTAgMS41aC0xLjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTEuNWEuNzUuNzUgMCAwMTEuNSAwdjEuNUExLjc1IDEuNzUgMCAwMTkuMjUgMTZoLTcuNUExLjc1IDEuNzUgMCAwMTAgMTQuMjV2LTcuNXoiPjwvcGF0aD4KICAgICAgICAgICAgICA8cGF0aCBkPSJNNSAxLjc1QzUgLjc4NCA1Ljc4NCAwIDYuNzUgMGg3LjVDMTUuMjE2IDAgMTYgLjc4NCAxNiAxLjc1djcuNUExLjc1IDEuNzUgMCAwMTE0LjI1IDExaC03LjVBMS43NSAxLjc1IDAgMDE1IDkuMjV2LTcuNXptMS43NS0uMjVhLjI1LjI1IDAgMDAtLjI1LjI1djcuNWMwIC4xMzguMTEyLjI1LjI1LjI1aDcuNWEuMjUuMjUgMCAwMC4yNS0uMjV2LTcuNWEuMjUuMjUgMCAwMC0uMjUtLjI1aC03LjV6Ij48L3BhdGg+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29weS10ZXh0Ij5Db3B5PC9zcGFuPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29kZS1ib2R5Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVycyI+JHtsaW5lTnVtYmVyc0h0bWx9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb2RlLWNvbnRlbnQiPgogICAgICAgICAgICA8cHJlIGNsYXNzPSJjb2RlLXByZSI+PGNvZGUgY2xhc3M9ImNvZGUtZWRpdG9yIiAKICAgICAgICAgICAgICAgICBjb250ZW50ZWRpdGFibGU9InRydWUiCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgICAgICAgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IgogICAgICAgICAgICAgICAgIHNwZWxsY2hlY2s9ImZhbHNlIj4ke3RoaXMuZXNjYXBlSHRtbChjb250ZW50Myl9PC9jb2RlPjwvcHJlPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBjb3B5QnV0dG9uID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvcHktYnV0dG9uIik7CiAgICBjb25zdCBsYW5ndWFnZVNlbGVjdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmxhbmd1YWdlLXNlbGVjdG9yIik7CiAgICBpZiAoIWVkaXRvciB8fCAhY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAobGFuZ3VhZ2VTZWxlY3RvcikgewogICAgICBsYW5ndWFnZVNlbGVjdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBuZXdMYW5ndWFnZSA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IC4uLmJsb2NrLm1ldGFkYXRhLCBsYW5ndWFnZTogbmV3TGFuZ3VhZ2UgfTsKICAgICAgICBjb250YWluZXIuc2V0QXR0cmlidXRlKCJkYXRhLWxhbmd1YWdlIiwgbmV3TGFuZ3VhZ2UpOwogICAgICAgIGlmIChibG9jay5jb250ZW50ICYmIGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgIT09IGVkaXRvcikgewogICAgICAgICAgdGhpcy5hcHBseUhpZ2hsaWdodGluZyhlbGVtZW50NCwgYmxvY2spOwogICAgICAgIH0KICAgICAgICBpZiAoaGFuZGxlcnMyLm9uSW5wdXQpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgfQogICAgaWYgKGNvcHlCdXR0b24pIHsKICAgICAgY29weUJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIGFzeW5jICgpID0+IHsKICAgICAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgICAgICB0cnkgewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQoY29udGVudDMpOwogICAgICAgICAgY29uc3QgY29weVRleHQgPSBjb3B5QnV0dG9uLnF1ZXJ5U2VsZWN0b3IoIi5jb3B5LXRleHQiKTsKICAgICAgICAgIGNvbnN0IG9yaWdpbmFsVGV4dCA9IGNvcHlUZXh0LnRleHRDb250ZW50OwogICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5hZGQoImNvcGllZCIpOwogICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICBjb3B5QnV0dG9uLmNsYXNzTGlzdC5yZW1vdmUoImNvcGllZCIpOwogICAgICAgICAgfSwgMmUzKTsKICAgICAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBjb3B5OiIsIGVycik7CiAgICAgICAgICBjb25zdCB0ZXh0QXJlYSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIik7CiAgICAgICAgICB0ZXh0QXJlYS52YWx1ZSA9IGNvbnRlbnQzOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICAgICAgdGV4dEFyZWEuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQodGV4dEFyZWEpOwogICAgICAgICAgdGV4dEFyZWEuc2VsZWN0KCk7CiAgICAgICAgICB0cnkgewogICAgICAgICAgICBkb2N1bWVudC5leGVjQ29tbWFuZCgiY29weSIpOwogICAgICAgICAgICBjb25zdCBjb3B5VGV4dCA9IGNvcHlCdXR0b24ucXVlcnlTZWxlY3RvcigiLmNvcHktdGV4dCIpOwogICAgICAgICAgICBjb25zdCBvcmlnaW5hbFRleHQgPSBjb3B5VGV4dC50ZXh0Q29udGVudDsKICAgICAgICAgICAgY29weVRleHQudGV4dENvbnRlbnQgPSAiQ29waWVkISI7CiAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LmFkZCgiY29waWVkIik7CiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICAgIGNvcHlUZXh0LnRleHRDb250ZW50ID0gb3JpZ2luYWxUZXh0OwogICAgICAgICAgICAgIGNvcHlCdXR0b24uY2xhc3NMaXN0LnJlbW92ZSgiY29waWVkIik7CiAgICAgICAgICAgIH0sIDJlMyk7CiAgICAgICAgICB9IGNhdGNoIChlcnIyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhbGxiYWNrIGNvcHkgZmFpbGVkOiIsIGVycjIpOwogICAgICAgICAgfQogICAgICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZCh0ZXh0QXJlYSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0KICAgIGxldCBpc0VkaXRpbmcgPSBmYWxzZTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaXNFZGl0aW5nID0gdHJ1ZTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImVkaXRpbmciKTsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChlZGl0b3IuZmlyc3RDaGlsZCkgewogICAgICAgICAgcmFuZ2UyLnNldFN0YXJ0KGVkaXRvci5maXJzdENoaWxkLCAwKTsKICAgICAgICAgIHJhbmdlMi5jb2xsYXBzZSh0cnVlKTsKICAgICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGlzRWRpdGluZyA9IGZhbHNlOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZWRpdGluZyIpOwogICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKGUxMSkgPT4gewogICAgICBoYW5kbGVyczIub25JbnB1dChlMTEpOwogICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgY2xlYXJUaW1lb3V0KHRoaXMuaGlnaGxpZ2h0VGltZXIpOwogICAgfSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJUYWIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIGNvbnN0IHRleHROb2RlID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiAgIik7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmIChbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoZTExLmtleSkpIHsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gZWRpdG9yLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93TGVmdCIgJiYgY3Vyc29yUG9zID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd1JpZ2h0IiAmJiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJBcnJvd1VwIiB8fCBlMTEua2V5ID09PSAiQXJyb3dEb3duIikgewogICAgICAgICAgY29uc3QgbGluZXMgPSAoZWRpdG9yLnRleHRDb250ZW50IHx8ICIiKS5zcGxpdCgiXG4iKTsKICAgICAgICAgIGNvbnN0IGN1cnJlbnRMaW5lID0gdGhpcy5nZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcik7CiAgICAgICAgICBpZiAoZTExLmtleSA9PT0gIkFycm93VXAiICYmIGN1cnJlbnRMaW5lID09PSAwIHx8IGUxMS5rZXkgPT09ICJBcnJvd0Rvd24iICYmIGN1cnJlbnRMaW5lID09PSBsaW5lcy5sZW5ndGggLSAxKSB7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IHRleHQ5ID0gZTExLmNsaXBib2FyZERhdGE/LmdldERhdGEoInRleHQvcGxhaW4iKTsKICAgICAgaWYgKHRleHQ5KSB7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIGlmIChzZWxlY3Rpb24gJiYgc2VsZWN0aW9uLnJhbmdlQ291bnQgPiAwKSB7CiAgICAgICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgICAgIHJhbmdlMi5kZWxldGVDb250ZW50cygpOwogICAgICAgICAgY29uc3QgdGV4dE5vZGUgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0OSk7CiAgICAgICAgICByYW5nZTIuaW5zZXJ0Tm9kZSh0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0U3RhcnRBZnRlcih0ZXh0Tm9kZSk7CiAgICAgICAgICByYW5nZTIuc2V0RW5kQWZ0ZXIodGV4dE5vZGUpOwogICAgICAgICAgc2VsZWN0aW9uLnJlbW92ZUFsbFJhbmdlcygpOwogICAgICAgICAgc2VsZWN0aW9uLmFkZFJhbmdlKHJhbmdlMik7CiAgICAgICAgICBoYW5kbGVyczIub25JbnB1dChuZXcgSW5wdXRFdmVudCgiaW5wdXQiKSk7CiAgICAgICAgICB0aGlzLnVwZGF0ZUxpbmVOdW1iZXJzKGVsZW1lbnQ0KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiBoYW5kbGVyczIub25Db21wb3NpdGlvblN0YXJ0KCkpOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gaGFuZGxlcnMyLm9uQ29tcG9zaXRpb25FbmQoKSk7CiAgICBpZiAoYmxvY2suY29udGVudCAmJiBkb2N1bWVudC5hY3RpdmVFbGVtZW50ICE9PSBlZGl0b3IpIHsKICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICB0aGlzLmFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jayk7CiAgICAgIH0pOwogICAgfQogIH0KICB1cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBjb25zdCBsaW5lTnVtYmVyc0NvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5saW5lLW51bWJlcnMiKTsKICAgIGlmICghZWRpdG9yIHx8ICFsaW5lTnVtYmVyc0NvbnRhaW5lcikKICAgICAgcmV0dXJuOwogICAgY29uc3QgY29udGVudDMgPSBlZGl0b3IudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBsaW5lcyA9IGNvbnRlbnQzLnNwbGl0KCJcbiIpOwogICAgY29uc3QgbGluZUNvdW50ID0gbGluZXMubGVuZ3RoIHx8IDE7CiAgICBsZXQgbGluZU51bWJlcnNIdG1sID0gIiI7CiAgICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gbGluZUNvdW50OyBpMTErKykgewogICAgICBsaW5lTnVtYmVyc0h0bWwgKz0gYDxkaXYgY2xhc3M9ImxpbmUtbnVtYmVyIj4ke2kxMX08L2Rpdj5gOwogICAgfQogICAgbGluZU51bWJlcnNDb250YWluZXIuaW5uZXJIVE1MID0gbGluZU51bWJlcnNIdG1sOwogIH0KICBnZXRDdXJyZW50TGluZUluZGV4KGVkaXRvcikgewogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiAwOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBjb25zdCBwcmVDYXJldFJhbmdlID0gcmFuZ2UyLmNsb25lUmFuZ2UoKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2VsZWN0Tm9kZUNvbnRlbnRzKGVkaXRvcik7CiAgICBwcmVDYXJldFJhbmdlLnNldEVuZChyYW5nZTIuc3RhcnRDb250YWluZXIsIHJhbmdlMi5zdGFydE9mZnNldCk7CiAgICBjb25zdCB0ZXh0QmVmb3JlQ3Vyc29yID0gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpOwogICAgY29uc3QgbGluZXNCZWZvcmVDdXJzb3IgPSB0ZXh0QmVmb3JlQ3Vyc29yLnNwbGl0KCJcbiIpOwogICAgcmV0dXJuIGxpbmVzQmVmb3JlQ3Vyc29yLmxlbmd0aCAtIDE7CiAgfQogIGFzeW5jIGFwcGx5SGlnaGxpZ2h0aW5nKGVsZW1lbnQ0LCBibG9jaykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgaWYgKCF0aGlzLmhpZ2hsaWdodEpzKSB7CiAgICAgIHRoaXMuaGlnaGxpZ2h0SnMgPSBhd2FpdCBEZWVzU2VydmljZUxpYkxvYWRlci5nZXRJbnN0YW5jZSgpLmxvYWRIaWdobGlnaHRKcygpOwogICAgfQogICAgY29uc3QgY3Vyc29yUG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICBjb25zdCBjb250ZW50MyA9IGVkaXRvci50ZXh0Q29udGVudCB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlID0gYmxvY2subWV0YWRhdGE/Lmxhbmd1YWdlIHx8ICJ0eXBlc2NyaXB0IjsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJlc3VsdCA9IHRoaXMuaGlnaGxpZ2h0SnMuaGlnaGxpZ2h0KGNvbnRlbnQzLCB7CiAgICAgICAgbGFuZ3VhZ2UsCiAgICAgICAgaWdub3JlSWxsZWdhbHM6IHRydWUKICAgICAgfSk7CiAgICAgIGlmIChyZXN1bHQudmFsdWUpIHsKICAgICAgICBlZGl0b3IuaW5uZXJIVE1MID0gcmVzdWx0LnZhbHVlOwogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBlZGl0b3IgJiYgY3Vyc29yUG9zICE9PSBudWxsKSB7CiAgICAgICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgICAgICBXeXNpd3lnU2VsZWN0aW9uLnNldEN1cnNvclBvc2l0aW9uKGVkaXRvciwgY3Vyc29yUG9zKTsKICAgICAgICAgIH0pOwogICAgICAgIH0KICAgICAgfQogICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgY29uc29sZS53YXJuKCJTeW50YXggaGlnaGxpZ2h0aW5nIGZhaWxlZDoiLCBlcnJvcik7CiAgICB9CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yPy50ZXh0Q29udGVudCB8fCAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci50ZXh0Q29udGVudCA9IGNvbnRlbnQzOwogICAgdGhpcy51cGRhdGVMaW5lTnVtYmVycyhlbGVtZW50NCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdG9yKSB7CiAgICAgIGNvbnN0IGJsb2NrID0gewogICAgICAgIGlkOiBlZGl0b3IuZGF0YXNldC5ibG9ja0lkIHx8ICIiLAogICAgICAgIHR5cGU6ICJjb2RlIiwKICAgICAgICBjb250ZW50OiBjb250ZW50MywKICAgICAgICBtZXRhZGF0YTogewogICAgICAgICAgbGFuZ3VhZ2U6IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWJsb2NrLWNvbnRhaW5lciIpPy5nZXRBdHRyaWJ1dGUoImRhdGEtbGFuZ3VhZ2UiKSB8fCAidHlwZXNjcmlwdCIKICAgICAgICB9CiAgICAgIH07CiAgICAgIHRoaXMuYXBwbHlIaWdobGlnaHRpbmcoZWxlbWVudDQsIGJsb2NrKTsKICAgIH0KICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgaWYgKCFzZWxlY3Rpb24gfHwgc2VsZWN0aW9uLnJhbmdlQ291bnQgPT09IDApCiAgICAgIHJldHVybiBudWxsOwogICAgY29uc3QgcmFuZ2UyID0gc2VsZWN0aW9uLmdldFJhbmdlQXQoMCk7CiAgICBpZiAoIWVkaXRvci5jb250YWlucyhyYW5nZTIuc3RhcnRDb250YWluZXIpKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgcHJlQ2FyZXRSYW5nZS5zZWxlY3ROb2RlQ29udGVudHMoZWRpdG9yKTsKICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHJhbmdlMi5zdGFydENvbnRhaW5lciwgcmFuZ2UyLnN0YXJ0T2Zmc2V0KTsKICAgIHJldHVybiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIDApOwogICAgfQogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBpZiAoZWRpdG9yKSB7CiAgICAgIGNvbnN0IGxlbmd0aCA9IGVkaXRvci50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdG9yLCBsZW5ndGgpOwogICAgfQogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIik7CiAgICBlZGl0b3I/LmZvY3VzKCk7CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpOwogICAgaWYgKCFlZGl0b3IpCiAgICAgIHJldHVybjsKICAgIGVkaXRvci5mb2N1cygpOwogICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgaWYgKHBvc2l0aW9uMyA9PT0gInN0YXJ0IikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpOwogICAgICB9IGVsc2UgaWYgKHR5cGVvZiBwb3NpdGlvbjMgPT09ICJudW1iZXIiKSB7CiAgICAgICAgV3lzaXd5Z1NlbGVjdGlvbi5zZXRDdXJzb3JQb3NpdGlvbihlZGl0b3IsIHBvc2l0aW9uMyk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTcGxpdENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IHBvc2l0aW9uMyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgaWYgKHBvc2l0aW9uMyA9PT0gbnVsbCkKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuZ2V0Q29udGVudChlbGVtZW50NCk7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGNvbnRlbnQzLnN1YnN0cmluZygwLCBwb3NpdGlvbjMpLAogICAgICBhZnRlcjogY29udGVudDMuc3Vic3RyaW5nKHBvc2l0aW9uMykKICAgIH07CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIENvZGUgQmxvY2sgQ29udGFpbmVyIC0gTWluaW1hbGlzdCBzaGFkY24gc3R5bGUgKi8KICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyIC0gU2ltcGxpZmllZCAqLwogICAgICAuY29kZS1oZWFkZXIgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3RvciB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5sYW5ndWFnZS1zZWxlY3Rvcjpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb3B5IEJ1dHRvbiAtIE1pbmltYWwgKi8KICAgICAgLmNvcHktYnV0dG9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjphY3RpdmUgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbi5jb3BpZWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA1OTY2OSIsICIjMTBiOTgxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29weS1pY29uIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb3B5LWJ1dHRvbjpob3ZlciAuY29weS1pY29uIHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CiAgICAgIAogICAgICAuY29weS10ZXh0IHsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CiAgICAgIAogICAgICAvKiBDb2RlIEJvZHkgKi8KICAgICAgLmNvZGUtYm9keSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmYWZhZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogTGluZSBOdW1iZXJzIC0gU3VidGxlICovCiAgICAgIC5saW5lLW51bWJlcnMgewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHBhZGRpbmc6IDEycHggMDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB0ZXh0LWFsaWduOiByaWdodDsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBtaW4td2lkdGg6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmxpbmUtbnVtYmVyIHsKICAgICAgICBwYWRkaW5nOiAwIDEycHggMCA4cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBoZWlnaHQ6IDIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIENvZGUgQ29udGVudCAqLwogICAgICAuY29kZS1jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1wcmUgewogICAgICAgIG1hcmdpbjogMDsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDEycHggMTZweDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzTW9ub0ZvbnRGYW1pbHl9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIG1pbi1oZWlnaHQ6IDYwcHg7CiAgICAgICAgb3ZlcmZsb3c6IHZpc2libGU7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFBsYWNlaG9sZGVyICovCiAgICAgIC5jb2RlLWVkaXRvcjplbXB0eTo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAiLy8gVHlwZSBvciBwYXN0ZSBjb2RlIGhlcmUuLi4iOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICAgIAogICAgICAvKiBXaGVuIGVkaXRpbmcgKGZvY3VzZWQpLCBzaG93IGdyZXkgdGV4dCB3aXRob3V0IGhpZ2hsaWdodGluZyAqLwogICAgICAuY29kZS1ibG9jay1jb250YWluZXIuZWRpdGluZyAuY29kZS1lZGl0b3IgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9ICFpbXBvcnRhbnQ7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWJsb2NrLWNvbnRhaW5lci5lZGl0aW5nIC5jb2RlLWVkaXRvciAqIHsKICAgICAgICBjb2xvcjogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAvKiBTeW50YXggSGlnaGxpZ2h0aW5nIC0gTXV0ZWQgY29sb3JzICovCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1rZXl3b3JkIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc3RyaW5nIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwNTk2NjkiLCAiIzEwYjk4MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW51bWJlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1mdW5jdGlvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1jb21tZW50IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy12YXJpYWJsZSwKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VhNTgwYyIsICIjZmI5MjNjIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtY2xhc3MsCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy10aXRsZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLXBhcmFtcyB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1idWlsdF9pbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjN2MzYWVkIiwgIiNhNzhiZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1saXRlcmFsIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3YzNhZWQiLCAiI2E3OGJmYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLW1ldGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtcHVuY3R1YXRpb24gewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZDFkNWRiIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtdGFnIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkYzI2MjYiLCAiI2Y4NzE3MSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtZWRpdG9yIC5obGpzLWF0dHJpYnV0ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiM2MGE1ZmEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWVkaXRvciAuaGxqcy1zZWxlY3Rvci10YWcgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2RjMjYyNiIsICIjZjg3MTcxIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItY2xhc3MgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzI1NjNlYiIsICIjNjBhNWZhIil9OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1lZGl0b3IgLmhsanMtc2VsZWN0b3ItaWQgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzdjM2FlZCIsICIjYTc4YmZhIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBTZWxlY3Rpb24gKi8KICAgICAgLmNvZGUtZWRpdG9yOjpzZWxlY3Rpb24sCiAgICAgIC5jb2RlLWVkaXRvciAqOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4yKSIsICJyZ2JhKDk5LCAxMDIsIDI0MSwgMC4zKSIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgLSBNaW5pbWFsICovCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyIHsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgfQogICAgICAKICAgICAgLmNvZGUtY29udGVudDo6LXdlYmtpdC1zY3JvbGxiYXItdHJhY2sgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICB9CiAgICAgIAogICAgICAuY29kZS1jb250ZW50Ojotd2Via2l0LXNjcm9sbGJhci10aHVtYiB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5jb2RlLWNvbnRlbnQ6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL3RleHQvbGlzdC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgTGlzdEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJsaXN0IjsKICAvLyBUcmFjayBjdXJzb3IgcG9zaXRpb24gYW5kIGxpc3Qgc3RhdGUKICBsYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IDA7CiAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogIHNlbGVjdGlvbkhhbmRsZXIgPSBudWxsOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3Qgc2VsZWN0ZWRDbGFzcyA9IGlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgY29uc3QgbGlzdFR5cGUgPSBibG9jay5tZXRhZGF0YT8ubGlzdFR5cGUgfHwgInVub3JkZXJlZCI7CiAgICBjb25zdCBsaXN0VGFnID0gbGlzdFR5cGUgPT09ICJvcmRlcmVkIiA/ICJvbCIgOiAidWwiOwogICAgY29uc3QgbGlzdENvbnRlbnQgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGJsb2NrLmNvbnRlbnQsIGJsb2NrLm1ldGFkYXRhKTsKICAgIHJldHVybiBgCiAgICAgIDxkaXYKICAgICAgICBjbGFzcz0iYmxvY2sgbGlzdCR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgIGRhdGEtYmxvY2stdHlwZT0iJHtibG9jay50eXBlfSIKICAgICAgPiR7bGlzdENvbnRlbnR9PC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJMaXN0Q29udGVudChjb250ZW50MywgbWV0YWRhdGEpIHsKICAgIGlmICghY29udGVudDMpCiAgICAgIHJldHVybiAiPHVsPjxsaT48L2xpPjwvdWw+IjsKICAgIGNvbnN0IGxpc3RUeXBlID0gbWV0YWRhdGE/Lmxpc3RUeXBlIHx8ICJ1bm9yZGVyZWQiOwogICAgY29uc3QgbGlzdFRhZyA9IGxpc3RUeXBlID09PSAib3JkZXJlZCIgPyAib2wiIDogInVsIjsKICAgIGNvbnN0IGxpbmVzID0gY29udGVudDMuc3BsaXQoIlxuIikuZmlsdGVyKChsaW5lKSA9PiBsaW5lLnRyaW0oKSk7CiAgICBpZiAobGluZXMubGVuZ3RoID09PSAwKSB7CiAgICAgIHJldHVybiBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICB9CiAgICBjb25zdCBsaXN0SXRlbXMgPSBsaW5lcy5tYXAoKGxpbmUpID0+IGA8bGk+JHtsaW5lfTwvbGk+YCkuam9pbigiIik7CiAgICByZXR1cm4gYDwke2xpc3RUYWd9PiR7bGlzdEl0ZW1zfTwvJHtsaXN0VGFnfT5gOwogIH0KICBzZXR1cChlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgbGlzdEJsb2NrID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmJsb2NrLmxpc3QiKTsKICAgIGlmICghbGlzdEJsb2NrKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkxpc3RCbG9ja0hhbmRsZXIuc2V0dXA6IE5vIGxpc3QgYmxvY2sgZWxlbWVudCBmb3VuZCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2suY29udGVudCAmJiAhbGlzdEJsb2NrLmlubmVySFRNTCkgewogICAgICBsaXN0QmxvY2suaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJMaXN0Q29udGVudChibG9jay5jb250ZW50LCBibG9jay5tZXRhZGF0YSk7CiAgICB9CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbklucHV0KGUxMSk7CiAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgfQogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24ucmFuZ2VDb3VudCA+IDApIHsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IHNlbGVjdGlvbi5nZXRSYW5nZUF0KDApOwogICAgICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgICAgICBpZiAoY3VycmVudExpICYmIGN1cnJlbnRMaS50ZXh0Q29udGVudCA9PT0gIiIpIHsKICAgICAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICB9KTsKICAgIGxpc3RCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXMoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXIoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uc3RhcnQiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkNvbXBvc2l0aW9uU3RhcnQoKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICBoYW5kbGVyczIub25Db21wb3NpdGlvbkVuZCgpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIChlMTEpID0+IHsKICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCk7CiAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uID0gcG9zOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbk1vdXNlVXA/LihlMTEpOwogICAgfSk7CiAgICBsaXN0QmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoZTExKSA9PiB7CiAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpOwogICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgfQogICAgICB9LCAwKTsKICAgIH0pOwogICAgbGlzdEJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KTsKICAgICAgaWYgKHBvcyAhPT0gbnVsbCkgewogICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgIH0KICAgIH0pOwogICAgdGhpcy5zZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spOwogIH0KICBzZXR1cFNlbGVjdGlvbkhhbmRsZXIoZWxlbWVudDQsIGxpc3RCbG9jaywgYmxvY2spIHsKICAgIGNvbnN0IGNoZWNrU2VsZWN0aW9uID0gKCkgPT4gewogICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgIGlmICghc2VsZWN0aW9uIHx8IHNlbGVjdGlvbi5yYW5nZUNvdW50ID09PSAwKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgIGlmIChzZWxlY3RlZFRleHQubGVuZ3RoID09PSAwKSB7CiAgICAgICAgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICAgIGJsb2NrSWQ6IGJsb2NrLmlkLAogICAgICAgICAgICBoYXNTZWxlY3Rpb246IGZhbHNlCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHd5c2l3eWdCbG9jazIgPSBsaXN0QmxvY2suZ2V0Um9vdE5vZGUoKS5ob3N0OwogICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB3eXNpd3lnQmxvY2syPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgY29uc3QgYmxvY2tTaGFkb3dSb290ID0gd3lzaXd5Z0Jsb2NrMj8uc2hhZG93Um9vdDsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHBhcmVudFNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgaWYgKGJsb2NrU2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrU2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICBpZiAoIXNlbGVjdGlvbkluZm8pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lcik7CiAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGxpc3RCbG9jaywgc2VsZWN0aW9uSW5mby5lbmRDb250YWluZXIpOwogICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0ICE9PSB0aGlzLmxhc3RTZWxlY3RlZFRleHQpIHsKICAgICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9IHNlbGVjdGVkVGV4dDsKICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgIGNvbnN0IHJlY3QgPSByYW5nZTIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgICB0aGlzLmRpc3BhdGNoU2VsZWN0aW9uRXZlbnQoZWxlbWVudDQsIHsKICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgYmxvY2tJZDogYmxvY2suaWQsCiAgICAgICAgICAgIHJhbmdlOiByYW5nZTIsCiAgICAgICAgICAgIHJlY3QsCiAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogdHJ1ZQogICAgICAgICAgfSk7CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgIHRoaXMubGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgICAgIHRoaXMuZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgewogICAgICAgICAgdGV4dDogIiIsCiAgICAgICAgICBibG9ja0lkOiBibG9jay5pZCwKICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICB9KTsKICAgICAgfQogICAgfTsKICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIGNoZWNrU2VsZWN0aW9uKTsKICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IGNoZWNrU2VsZWN0aW9uOwogICAgY29uc3Qgd3lzaXd5Z0Jsb2NrID0gbGlzdEJsb2NrLmdldFJvb3ROb2RlKCkuaG9zdDsKICAgIGlmICh3eXNpd3lnQmxvY2spIHsKICAgICAgY29uc3Qgb3JpZ2luYWxEaXNjb25uZWN0ZWRDYWxsYmFjayA9IHd5c2l3eWdCbG9jay5kaXNjb25uZWN0ZWRDYWxsYmFjazsKICAgICAgd3lzaXd5Z0Jsb2NrLmRpc2Nvbm5lY3RlZENhbGxiYWNrID0gYXN5bmMgZnVuY3Rpb24oKSB7CiAgICAgICAgaWYgKHRoaXMuc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgdGhpcy5zZWxlY3Rpb25IYW5kbGVyKTsKICAgICAgICAgIHRoaXMuc2VsZWN0aW9uSGFuZGxlciA9IG51bGw7CiAgICAgICAgfQogICAgICAgIGlmIChvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrKSB7CiAgICAgICAgICBhd2FpdCBvcmlnaW5hbERpc2Nvbm5lY3RlZENhbGxiYWNrLmNhbGwod3lzaXd5Z0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0uYmluZCh0aGlzKTsKICAgIH0KICB9CiAgZGlzcGF0Y2hTZWxlY3Rpb25FdmVudChlbGVtZW50NCwgZGV0YWlsKSB7CiAgICBjb25zdCBldmVudCA9IG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgZGV0YWlsLAogICAgICBidWJibGVzOiB0cnVlLAogICAgICBjb21wb3NlZDogdHJ1ZQogICAgfSk7CiAgICBlbGVtZW50NC5kaXNwYXRjaEV2ZW50KGV2ZW50KTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTGlzdCBzcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgLmJsb2NrLmxpc3QgewogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5ibG9jay5saXN0IHVsLAogICAgICAuYmxvY2subGlzdCBvbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBhZGRpbmctbGVmdDogMjRweDsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGkgewogICAgICAgIG1hcmdpbjogNHB4IDA7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgfQogICAgICAKICAgICAgLmJsb2NrLmxpc3QgbGk6bGFzdC1jaGlsZCB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgfQogICAgYDsKICB9CiAgZ2V0UGxhY2Vob2xkZXIoKSB7CiAgICByZXR1cm4gIiI7CiAgfQogIC8vIEhlbHBlciBtZXRob2RzIGZvciBsaXN0IGZ1bmN0aW9uYWxpdHkKICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCB3eXNpd3lnQmxvY2sgPSBjb250ZXh0Mj8uY29tcG9uZW50OwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gd3lzaXd5Z0Jsb2NrPy5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICBjb25zdCBibG9ja1NoYWRvd1Jvb3QgPSBjb250ZXh0Mj8uc2hhZG93Um9vdDsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgIGlmIChibG9ja1NoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tTaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICByZXR1cm4gbnVsbDsKICAgIGlmICghV3lzaXd5Z1NlbGVjdGlvbi5jb250YWluc0Fjcm9zc1NoYWRvd0RPTShsaXN0QmxvY2ssIHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgIHJldHVybiBudWxsOwogICAgfQogICAgY29uc3QgcHJlQ2FyZXRSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhsaXN0QmxvY2spOwogICAgcHJlQ2FyZXRSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICByZXR1cm4gcHJlQ2FyZXRSYW5nZS50b1N0cmluZygpLmxlbmd0aDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuICIiOwogICAgY29uc3QgbGlzdEl0ZW1zID0gbGlzdEJsb2NrLnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICBjb25zdCBjb250ZW50MyA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLnRleHRDb250ZW50IHx8ICIiKS5qb2luKCJcbiIpOwogICAgcmV0dXJuIGNvbnRlbnQzOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MywgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgaGFkRm9jdXMgPSBkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrOwogICAgY29uc3QgbGlzdEVsZW1lbnQgPSBsaXN0QmxvY2sucXVlcnlTZWxlY3RvcigidWwsIG9sIik7CiAgICBjb25zdCBpc09yZGVyZWQgPSBsaXN0RWxlbWVudD8udGFnTmFtZSA9PT0gIk9MIjsKICAgIGxpc3RCbG9jay5pbm5lckhUTUwgPSB0aGlzLnJlbmRlckxpc3RDb250ZW50KGNvbnRlbnQzLCB7IGxpc3RUeXBlOiBpc09yZGVyZWQgPyAib3JkZXJlZCIgOiAidW5vcmRlcmVkIiB9KTsKICAgIGlmIChoYWRGb2N1cykgewogICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgY29uc3QgZmlyc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaSIpOwogICAgaWYgKGZpcnN0TGkpIHsKICAgICAgY29uc3QgdGV4dE5vZGUgPSB0aGlzLmdldEZpcnN0VGV4dE5vZGUoZmlyc3RMaSk7CiAgICAgIGlmICh0ZXh0Tm9kZSkgewogICAgICAgIGNvbnN0IHJhbmdlMiA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgICAgY29uc3Qgc2VsZWN0aW9uID0gd2luZG93LmdldFNlbGVjdGlvbigpOwogICAgICAgIHJhbmdlMi5zZXRTdGFydCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgcmFuZ2UyLnNldEVuZCh0ZXh0Tm9kZSwgMCk7CiAgICAgICAgc2VsZWN0aW9uPy5yZW1vdmVBbGxSYW5nZXMoKTsKICAgICAgICBzZWxlY3Rpb24/LmFkZFJhbmdlKHJhbmdlMik7CiAgICAgIH0KICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGxhc3RMaSA9IGxpc3RCbG9jay5xdWVyeVNlbGVjdG9yKCJsaTpsYXN0LWNoaWxkIik7CiAgICBpZiAobGFzdExpKSB7CiAgICAgIGNvbnN0IHRleHROb2RlID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUobGFzdExpKTsKICAgICAgaWYgKHRleHROb2RlKSB7CiAgICAgICAgY29uc3QgcmFuZ2UyID0gZG9jdW1lbnQuY3JlYXRlUmFuZ2UoKTsKICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgY29uc3QgdGV4dExlbmd0aCA9IHRleHROb2RlLnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICByYW5nZTIuc2V0U3RhcnQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHJhbmdlMi5zZXRFbmQodGV4dE5vZGUsIHRleHRMZW5ndGgpOwogICAgICAgIHNlbGVjdGlvbj8ucmVtb3ZlQWxsUmFuZ2VzKCk7CiAgICAgICAgc2VsZWN0aW9uPy5hZGRSYW5nZShyYW5nZTIpOwogICAgICB9CiAgICB9CiAgfQogIGdldEZpcnN0VGV4dE5vZGUoZWxlbWVudDQpIHsKICAgIGlmIChlbGVtZW50NC5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgcmV0dXJuIGVsZW1lbnQ0OwogICAgfQogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgZWxlbWVudDQuY2hpbGROb2Rlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGNvbnN0IGZpcnN0VGV4dCA9IHRoaXMuZ2V0Rmlyc3RUZXh0Tm9kZShlbGVtZW50NC5jaGlsZE5vZGVzW2kxMV0pOwogICAgICBpZiAoZmlyc3RUZXh0KQogICAgICAgIHJldHVybiBmaXJzdFRleHQ7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICBmb2N1cyhlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuOwogICAgaWYgKCFsaXN0QmxvY2suaGFzQXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiKSkgewogICAgICBsaXN0QmxvY2suc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgfQogICAgbGlzdEJsb2NrLmZvY3VzKCk7CiAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gbGlzdEJsb2NrICYmIGVsZW1lbnQ0LnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgIT09IGxpc3RCbG9jaykgewogICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHsKICAgICAgICBsaXN0QmxvY2suZm9jdXMoKTsKICAgICAgfSk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIsIGNvbnRleHQyKSB7CiAgICBjb25zdCBsaXN0QmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2subGlzdCIpOwogICAgaWYgKCFsaXN0QmxvY2spCiAgICAgIHJldHVybjsKICAgIGlmICghbGlzdEJsb2NrLmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgbGlzdEJsb2NrLnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgIH0KICAgIGxpc3RCbG9jay5mb2N1cygpOwogICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0LCBjb250ZXh0Mik7CiAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfSBlbHNlIGlmICh0eXBlb2YgcG9zaXRpb24zID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQsIGNvbnRleHQyKTsKICAgICAgfQogICAgfTsKICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2sgfHwgZWxlbWVudDQuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCA9PT0gbGlzdEJsb2NrKSB7CiAgICAgIHNldEN1cnNvcigpOwogICAgfSBlbHNlIHsKICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGxpc3RCbG9jayB8fCBlbGVtZW50NC5zaGFkb3dSb290Py5hY3RpdmVFbGVtZW50ID09PSBsaXN0QmxvY2spIHsKICAgICAgICAgIHNldEN1cnNvcigpOwogICAgICAgIH0KICAgICAgfSk7CiAgICB9CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCwgY29udGV4dDIpIHsKICAgIGNvbnN0IGxpc3RCbG9jayA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jay5saXN0Iik7CiAgICBpZiAoIWxpc3RCbG9jaykKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gbnVsbDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL2Jsb2Nrcy9tZWRpYS9pbWFnZS5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgSW1hZ2VCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAiaW1hZ2UiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaW1hZ2VVcmwgPSBibG9jay5tZXRhZGF0YT8udXJsOwogICAgY29uc3QgYWx0VGV4dCA9IGJsb2NrLmNvbnRlbnQgfHwgIkltYWdlIjsKICAgIGNvbnN0IGlzTG9hZGluZyA9IGJsb2NrLm1ldGFkYXRhPy5sb2FkaW5nOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtaGFzLWltYWdlPSIkeyEhaW1hZ2VVcmx9IgogICAgICAgICAgIHRhYmluZGV4PSIwIj4KICAgICAgICAke2lzTG9hZGluZyA/IHRoaXMucmVuZGVyTG9hZGluZygpIDogaW1hZ2VVcmwgPyB0aGlzLnJlbmRlckltYWdlKGltYWdlVXJsLCBhbHRUZXh0KSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIoKX0KICAgICAgICA8aW5wdXQgdHlwZT0iZmlsZSIgCiAgICAgICAgICAgICAgIGNsYXNzPSJpbWFnZS1maWxlLWlucHV0IiAKICAgICAgICAgICAgICAgYWNjZXB0PSJpbWFnZS8qIiAKICAgICAgICAgICAgICAgc3R5bGU9ImRpc3BsYXk6IG5vbmU7IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclBsYWNlaG9sZGVyKCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIiBzdHlsZT0iY3Vyc29yOiBwb2ludGVyOyI+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLWljb24iIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMS41Ij4KICAgICAgICAgICAgPHJlY3QgeD0iMyIgeT0iMyIgd2lkdGg9IjE4IiBoZWlnaHQ9IjE4IiByeD0iMiIgcnk9IjIiLz4KICAgICAgICAgICAgPGNpcmNsZSBjeD0iOC41IiBjeT0iOC41IiByPSIxLjUiLz4KICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMjEgMTUgMTYgMTAgNSAyMSIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idXBsb2FkLXRleHQiIHN0eWxlPSJwb2ludGVyLWV2ZW50czogbm9uZTsiPkNsaWNrIHRvIHVwbG9hZCBhbiBpbWFnZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InVwbG9hZC1oaW50IiBzdHlsZT0icG9pbnRlci1ldmVudHM6IG5vbmU7Ij5vciBkcmFnIGFuZCBkcm9wPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVySW1hZ2UodXJsLCBhbHRUZXh0KSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1jb250YWluZXIiPgogICAgICAgIDxpbWcgc3JjPSIke3VybH0iIGFsdD0iJHt0aGlzLmVzY2FwZUh0bWwoYWx0VGV4dCl9IiAvPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckxvYWRpbmcoKSB7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJpbWFnZS1sb2FkaW5nIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+VXBsb2FkaW5nIGltYWdlLi4uPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS1maWxlLWlucHV0Iik7CiAgICBpZiAoIWNvbnRhaW5lcikgewogICAgICBjb25zb2xlLmVycm9yKCJJbWFnZUJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgY29udGFpbmVyIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZmlsZUlucHV0KSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkltYWdlQmxvY2tIYW5kbGVyOiBDb3VsZCBub3QgZmluZCBmaWxlIGlucHV0Iik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IHBsYWNlaG9sZGVyID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIiKTsKICAgIGlmIChwbGFjZWhvbGRlcikgewogICAgICBwbGFjZWhvbGRlci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBQbGFjZWhvbGRlciBjbGlja2VkLCBvcGVuaW5nIGZpbGUgc2VsZWN0b3IiKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzKCk7CiAgICB9KTsKICAgIGZpbGVJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGNvbnN0IGlucHV0ID0gZTExLnRhcmdldDsKICAgICAgY29uc3QgZmlsZSA9IGlucHV0LmZpbGVzPy5bMF07CiAgICAgIGlmIChmaWxlKSB7CiAgICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBGaWxlIHNlbGVjdGVkOiIsIGZpbGUubmFtZSk7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlVXBsb2FkKGZpbGUsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKCFibG9jay5tZXRhZGF0YT8udXJsKSB7CiAgICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnbGVhdmUiLCAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImRyb3AiLCBhc3luYyAoZTExKSA9PiB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgIGNvbnRhaW5lci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXIiKTsKICAgICAgY29uc3QgZmlsZSA9IGUxMS5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSAmJiBmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikgJiYgIWJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgIH0KICAgIH0pOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJEZWxldGUiIHx8IGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiKSB7CiAgICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhPy51cmwpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHZvaWQgMDsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICAgIGhhbmRsZXJzMi5vbklucHV0KG5ldyBJbnB1dEV2ZW50KCJpbnB1dCIpKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVVcGxvYWQoZmlsZSwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTdGFydGluZyBmaWxlIHVwbG9hZCIsIHsKICAgICAgZmlsZU5hbWU6IGZpbGUubmFtZSwKICAgICAgZmlsZVNpemU6IGZpbGUuc2l6ZSwKICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgIH0pOwogICAgaWYgKCFmaWxlLnR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpIHsKICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgbWF4U2l6ZSA9IDEwICogMTAyNCAqIDEwMjQ7CiAgICBpZiAoZmlsZS5zaXplID4gbWF4U2l6ZSkgewogICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZS4gTWF4aW11bSBzaXplIGlzIDEwTUIiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGJsb2NrLm1ldGFkYXRhLmxvYWRpbmcgPSB0cnVlOwogICAgYmxvY2subWV0YWRhdGEuZmlsZU5hbWUgPSBmaWxlLm5hbWU7CiAgICBibG9jay5tZXRhZGF0YS5maWxlU2l6ZSA9IGZpbGUuc2l6ZTsKICAgIGJsb2NrLm1ldGFkYXRhLm1pbWVUeXBlID0gZmlsZS50eXBlOwogICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBTZXQgbG9hZGluZyBzdGF0ZSwgcmVxdWVzdGluZyB1cGRhdGUiKTsKICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgdHJ5IHsKICAgICAgY29uc3QgZGF0YVVybCA9IGF3YWl0IHRoaXMuZmlsZVRvRGF0YVVybChmaWxlKTsKICAgICAgYmxvY2subWV0YWRhdGEudXJsID0gZGF0YVVybDsKICAgICAgYmxvY2subWV0YWRhdGEubG9hZGluZyA9IGZhbHNlOwogICAgICBjb25zdCBuYW1lV2l0aG91dEV4dCA9IGZpbGUubmFtZS5yZXBsYWNlKC9cLlteLy5dKyQvLCAiIik7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBuYW1lV2l0aG91dEV4dDsKICAgICAgY29uc29sZS5sb2coIkltYWdlQmxvY2tIYW5kbGVyOiBVcGxvYWQgY29tcGxldGUsIHJlcXVlc3RpbmcgdXBkYXRlIiwgewogICAgICAgIGhhc1VybDogISFibG9jay5tZXRhZGF0YS51cmwsCiAgICAgICAgdXJsTGVuZ3RoOiBkYXRhVXJsLmxlbmd0aCwKICAgICAgICBhbHRUZXh0OiBibG9jay5jb250ZW50CiAgICAgIH0pOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byB1cGxvYWQgaW1hZ2U6IiwgZXJyb3IpOwogICAgICBibG9jay5tZXRhZGF0YS5sb2FkaW5nID0gZmFsc2U7CiAgICAgIGhhbmRsZXJzMi5vblJlcXVlc3RVcGRhdGU/LigpOwogICAgfQogIH0KICBmaWxlVG9EYXRhVXJsKGZpbGUpIHsKICAgIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZTIsIHJlamVjdCkgPT4gewogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gKGUxMSkgPT4gewogICAgICAgIGNvbnN0IHJlc3VsdCA9IGUxMS50YXJnZXQ/LnJlc3VsdDsKICAgICAgICBpZiAodHlwZW9mIHJlc3VsdCA9PT0gInN0cmluZyIpIHsKICAgICAgICAgIHJlc29sdmUyKHJlc3VsdCk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHJlamVjdChuZXcgRXJyb3IoIkZhaWxlZCB0byByZWFkIGZpbGUiKSk7CiAgICAgICAgfQogICAgICB9OwogICAgICByZWFkZXIub25lcnJvciA9IHJlamVjdDsKICAgICAgcmVhZGVyLnJlYWRBc0RhdGFVUkwoZmlsZSk7CiAgICB9KTsKICB9CiAgZXNjYXBlSHRtbCh0ZXh0OSkgewogICAgY29uc3QgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICBkaXYudGV4dENvbnRlbnQgPSB0ZXh0OTsKICAgIHJldHVybiBkaXYuaW5uZXJIVE1MOwogIH0KICBnZXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICByZXR1cm4gYmxvY2s/LmNvbnRlbnQgfHwgIiI7CiAgfQogIHNldENvbnRlbnQoZWxlbWVudDQsIGNvbnRlbnQzKSB7CiAgICBjb25zdCBibG9jayA9IHRoaXMuZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCk7CiAgICBpZiAoYmxvY2spIHsKICAgICAgYmxvY2suY29udGVudCA9IGNvbnRlbnQzOwogICAgfQogIH0KICBnZXRCbG9ja0Zyb21FbGVtZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaW1hZ2UtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImltYWdlIiwKICAgICAgY29udGVudDogIiIsCiAgICAgIG1ldGFkYXRhOiB7fQogICAgfTsKICB9CiAgZ2V0Q3Vyc29yUG9zaXRpb24oZWxlbWVudDQpIHsKICAgIHJldHVybiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBmb2N1cyhlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmltYWdlLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29udGFpbmVyPy5mb2N1cygpOwogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogSW1hZ2UgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQogICAgICAKICAgICAgLmltYWdlLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFVwbG9hZCBQbGFjZWhvbGRlciAqLwogICAgICAuaW1hZ2UtdXBsb2FkLXBsYWNlaG9sZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiA0OHB4IDI0cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXI6aG92ZXIgLmltYWdlLXVwbG9hZC1wbGFjZWhvbGRlciB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5pbWFnZS1ibG9jay1jb250YWluZXIuZHJhZy1vdmVyIC5pbWFnZS11cGxvYWQtcGxhY2Vob2xkZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmZjZmZiIsICIjMWUxYjRiIil9OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWljb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM0YjU1NjMiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC51cGxvYWQtdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CiAgICAgIAogICAgICAudXBsb2FkLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSW1hZ2UgQ29udGFpbmVyICovCiAgICAgIC5pbWFnZS1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtaW4taGVpZ2h0OiAyMDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuaW1hZ2UtY29udGFpbmVyIGltZyB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogYXV0bzsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIExvYWRpbmcgU3RhdGUgKi8KICAgICAgLmltYWdlLWxvYWRpbmcgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDQ4cHggMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZhZmFmYSIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogMzJweDsKICAgICAgICBoZWlnaHQ6IDMycHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzYzNjZmMSIsICIjODE4Y2Y4Iil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQogICAgICAKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0KICAgICAgfQogICAgICAKICAgICAgLmxvYWRpbmctdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIGlucHV0IGhpZGRlbiAqLwogICAgICAuaW1hZ2UtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL21lZGlhL3lvdXR1YmUuYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFlvdVR1YmVCbG9ja0hhbmRsZXIgPSBjbGFzcyBleHRlbmRzIEJhc2VCbG9ja0hhbmRsZXIgewogIHR5cGUgPSAieW91dHViZSI7CiAgcmVuZGVyKGJsb2NrLCBpc1NlbGVjdGVkKSB7CiAgICBjb25zdCB2aWRlb0lkID0gYmxvY2subWV0YWRhdGE/LnZpZGVvSWQ7CiAgICBjb25zdCB1cmwgPSBibG9jay5tZXRhZGF0YT8udXJsIHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgZGF0YS1oYXMtdmlkZW89IiR7ISF2aWRlb0lkfSI+CiAgICAgICAgJHt2aWRlb0lkID8gdGhpcy5yZW5kZXJWaWRlbyh2aWRlb0lkKSA6IHRoaXMucmVuZGVyUGxhY2Vob2xkZXIodXJsKX0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcih1cmwpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9InlvdXR1YmUtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWljb24iPgogICAgICAgICAgPHN2ZyB3aWR0aD0iNDgiIGhlaWdodD0iNDgiIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTE5LjYxNSAzLjE4NGMtMy42MDQtLjI0Ni0xMS42MzEtLjI0NS0xNS4yMyAwLTMuODk3LjI2Ni00LjM1NiAyLjYyLTQuMzg1IDguODE2LjAyOSA2LjE4NS40ODQgOC41NDkgNC4zODUgOC44MTYgMy42LjI0NSAxMS42MjYuMjQ2IDE1LjIzIDAgMy44OTctLjI2NiA0LjM1Ni0yLjYyIDQuMzg1LTguODE2LS4wMjktNi4xODUtLjQ4NC04LjU0OS00LjM4NS04LjgxNnptLTEwLjYxNSAxMi44MTZ2LThsOCAzLjk5My04IDQuMDA3eiIvPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0icGxhY2Vob2xkZXItdGV4dCI+RW50ZXIgWW91VHViZSBVUkw8L2Rpdj4KICAgICAgICA8aW5wdXQgdHlwZT0idXJsIiAKICAgICAgICAgICAgICAgY2xhc3M9InlvdXR1YmUtdXJsLWlucHV0IiAKICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8veW91dHViZS5jb20vd2F0Y2g/dj0uLi4iIAogICAgICAgICAgICAgICB2YWx1ZT0iJHt0aGlzLmVzY2FwZUh0bWwodXJsKX0iIC8+CiAgICAgICAgPGJ1dHRvbiBjbGFzcz0ieW91dHViZS1lbWJlZC1idG4iPkVtYmVkIFZpZGVvPC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyVmlkZW8odmlkZW9JZCkgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ieW91dHViZS1jb250YWluZXIiPgogICAgICAgIDxpZnJhbWUgCiAgICAgICAgICBzcmM9Imh0dHBzOi8vd3d3LnlvdXR1YmUuY29tL2VtYmVkLyR7dmlkZW9JZH0iCiAgICAgICAgICBmcmFtZWJvcmRlcj0iMCIKICAgICAgICAgIGFsbG93PSJhY2NlbGVyb21ldGVyOyBhdXRvcGxheTsgY2xpcGJvYXJkLXdyaXRlOyBlbmNyeXB0ZWQtbWVkaWE7IGd5cm9zY29wZTsgcGljdHVyZS1pbi1waWN0dXJlIgogICAgICAgICAgYWxsb3dmdWxsc2NyZWVuCiAgICAgICAgPjwvaWZyYW1lPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGlmICghY29udGFpbmVyKQogICAgICByZXR1cm47CiAgICBpZiAoYmxvY2subWV0YWRhdGE/LnZpZGVvSWQpIHsKICAgICAgY29udGFpbmVyLnNldEF0dHJpYnV0ZSgidGFiaW5kZXgiLCAiMCIpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBpZiAoZTExLmtleSA9PT0gIkRlbGV0ZSIgfHwgZTExLmtleSA9PT0gIkJhY2tzcGFjZSIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBoYW5kbGVyczIub25LZXlEb3duKGUxMSk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgdXJsSW5wdXQgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS11cmwtaW5wdXQiKTsKICAgIGNvbnN0IGVtYmVkQnRuID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtZW1iZWQtYnRuIik7CiAgICBpZiAoIXVybElucHV0IHx8ICFlbWJlZEJ0bikKICAgICAgcmV0dXJuOwogICAgdXJsSW5wdXQuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgZW1iZWRCdG4uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgIHRoaXMuZW1iZWRWaWRlbyh1cmxJbnB1dC52YWx1ZSwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy5lbWJlZFZpZGVvKHVybElucHV0LnZhbHVlLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgfSBlbHNlIGlmIChlMTEua2V5ID09PSAiRXNjYXBlIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHVybElucHV0LmJsdXIoKTsKICAgICAgfQogICAgfSk7CiAgICB1cmxJbnB1dC5hZGRFdmVudExpc3RlbmVyKCJwYXN0ZSIsIChlMTEpID0+IHsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgcGFzdGVkVXJsID0gdXJsSW5wdXQudmFsdWU7CiAgICAgICAgaWYgKHRoaXMuZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHBhc3RlZFVybCkpIHsKICAgICAgICAgIHRoaXMuZW1iZWRWaWRlbyhwYXN0ZWRVcmwsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICAgIH0KICAgICAgfSwgMCk7CiAgICB9KTsKICAgIHVybElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICBpZiAoIWJsb2NrLm1ldGFkYXRhKQogICAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybElucHV0LnZhbHVlOwogICAgfSk7CiAgfQogIGVtYmVkVmlkZW8odXJsLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCB2aWRlb0lkID0gdGhpcy5leHRyYWN0WW91VHViZVZpZGVvSWQodXJsKTsKICAgIGlmICghdmlkZW9JZCkgewogICAgICBjb25zb2xlLmVycm9yKCJJbnZhbGlkIFlvdVR1YmUgVVJMIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBibG9jay5tZXRhZGF0YS52aWRlb0lkID0gdmlkZW9JZDsKICAgIGJsb2NrLm1ldGFkYXRhLnVybCA9IHVybDsKICAgIGJsb2NrLmNvbnRlbnQgPSBgWW91VHViZSBWaWRlbzogJHt2aWRlb0lkfWA7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZXh0cmFjdFlvdVR1YmVWaWRlb0lkKHVybCkgewogICAgY29uc3QgcGF0dGVybnMyID0gWwogICAgICAvKD86eW91dHViZVwuY29tXC8oPzpbXlwvXStcLy4rXC98KD86dnxlKD86bWJlZCk/KVwvfC4qWz8mXXY9KXx5b3V0dVwuYmVcLykoW14iJj9cLyBdezExfSkvLAogICAgICAveW91dHViZVwuY29tXC9lbWJlZFwvKFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1YmVcLmNvbVwvd2F0Y2hcP3Y9KFteIiY/XC8gXXsxMX0pLywKICAgICAgL3lvdXR1XC5iZVwvKFteIiY/XC8gXXsxMX0pLwogICAgXTsKICAgIGZvciAoY29uc3QgcGF0dGVybiBvZiBwYXR0ZXJuczIpIHsKICAgICAgY29uc3QgbWF0Y2gyID0gdXJsLm1hdGNoKHBhdHRlcm4pOwogICAgICBpZiAobWF0Y2gyKSB7CiAgICAgICAgcmV0dXJuIG1hdGNoMlsxXTsKICAgICAgfQogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogInlvdXR1YmUiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIueW91dHViZS1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHVybElucHV0ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLnlvdXR1YmUtdXJsLWlucHV0Iik7CiAgICBpZiAodXJsSW5wdXQpIHsKICAgICAgdXJsSW5wdXQuZm9jdXMoKTsKICAgIH0gZWxzZSBpZiAoY29udGFpbmVyKSB7CiAgICAgIGNvbnRhaW5lci5mb2N1cygpOwogICAgfQogIH0KICBmb2N1c1dpdGhDdXJzb3IoZWxlbWVudDQsIHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogWW91VHViZSBCbG9jayBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWFyZ2luOiAxMnB4IDA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtYmxvY2stY29udGFpbmVyLnNlbGVjdGVkIHsKICAgICAgICBib3gtc2hhZG93OiAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2MzY2ZjEiLCAiIzgxOGNmOCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBQbGFjZWhvbGRlciAqLwogICAgICAueW91dHViZS1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMzJweCAyNHB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmFmYWZhIiwgIiMwYTBhMGEiKX07CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNlZjQ0NDQiKX07CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiA0MDBweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBzYW5zLXNlcmlmOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDpmb2N1cyB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxZjI5MzciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLXVybC1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1lbWJlZC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxMTE4MjciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGZvbnQtZmFtaWx5OiAtYXBwbGUtc3lzdGVtLCBCbGlua01hY1N5c3RlbUZvbnQsICdTZWdvZSBVSScsIHNhbnMtc2VyaWY7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC55b3V0dWJlLWVtYmVkLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLnlvdXR1YmUtZW1iZWQtYnRuOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQogICAgICAKICAgICAgLyogWW91VHViZSBDb250YWluZXIgKi8KICAgICAgLnlvdXR1YmUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDU2LjI1JTsgLyogMTY6OSBhc3BlY3QgcmF0aW8gKi8KICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICB9CiAgICAgIAogICAgICAueW91dHViZS1jb250YWluZXIgaWZyYW1lIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJvcmRlcjogMDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvbWVkaWEvYXR0YWNobWVudC5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgQXR0YWNobWVudEJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJhdHRhY2htZW50IjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGZpbGVzID0gYmxvY2subWV0YWRhdGE/LmZpbGVzIHx8IFtdOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1ibG9jay1jb250YWluZXIke2lzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iCiAgICAgICAgICAgdGFiaW5kZXg9IjAiPgogICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtaWNvbiI+XHV7MUY0Q0V9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LXRpdGxlIj5GaWxlIEF0dGFjaG1lbnRzPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYXR0YWNobWVudC1saXN0Ij4KICAgICAgICAgICR7ZmlsZXMubGVuZ3RoID4gMCA/IHRoaXMucmVuZGVyRmlsZXMoZmlsZXMpIDogdGhpcy5yZW5kZXJQbGFjZWhvbGRlcigpfQogICAgICAgIDwvZGl2PgogICAgICAgIDxpbnB1dCB0eXBlPSJmaWxlIiAKICAgICAgICAgICAgICAgY2xhc3M9ImF0dGFjaG1lbnQtZmlsZS1pbnB1dCIgCiAgICAgICAgICAgICAgIG11bHRpcGxlIAogICAgICAgICAgICAgICBzdHlsZT0iZGlzcGxheTogbm9uZTsiIC8+CiAgICAgICAgJHtmaWxlcy5sZW5ndGggPiAwID8gJzxidXR0b24gY2xhc3M9ImFkZC1tb3JlLWZpbGVzIj5BZGQgTW9yZSBGaWxlczwvYnV0dG9uPicgOiAiIn0KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJQbGFjZWhvbGRlcigpIHsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImF0dGFjaG1lbnQtcGxhY2Vob2xkZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLXRleHQiPkNsaWNrIHRvIGFkZCBmaWxlczwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InBsYWNlaG9sZGVyLWhpbnQiPm9yIGRyYWcgYW5kIGRyb3A8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJGaWxlcyhmaWxlcykgewogICAgcmV0dXJuIGZpbGVzLm1hcCgoZmlsZSkgPT4gYAogICAgICA8ZGl2IGNsYXNzPSJhdHRhY2htZW50LWl0ZW0iIGRhdGEtZmlsZS1pZD0iJHtmaWxlLmlkfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1pY29uIj4ke3RoaXMuZ2V0RmlsZUljb24oZmlsZS50eXBlKX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWxlLWluZm8iPgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1uYW1lIj4ke3RoaXMuZXNjYXBlSHRtbChmaWxlLm5hbWUpfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZmlsZS1zaXplIj4ke3RoaXMuZm9ybWF0RmlsZVNpemUoZmlsZS5zaXplKX08L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8YnV0dG9uIGNsYXNzPSJyZW1vdmUtZmlsZSIgZGF0YS1maWxlLWlkPSIke2ZpbGUuaWR9Ij5ceEQ3PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgYCkuam9pbigiIik7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGZpbGVJbnB1dCA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5hdHRhY2htZW50LWZpbGUtaW5wdXQiKTsKICAgIGlmICghY29udGFpbmVyIHx8ICFmaWxlSW5wdXQpIHsKICAgICAgY29uc29sZS5lcnJvcigiQXR0YWNobWVudEJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1wbGFjZWhvbGRlciIpOwogICAgaWYgKHBsYWNlaG9sZGVyKSB7CiAgICAgIHBsYWNlaG9sZGVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICBmaWxlSW5wdXQuY2xpY2soKTsKICAgICAgfSk7CiAgICB9CiAgICBjb25zdCBhZGRNb3JlQnRuID0gY29udGFpbmVyLnF1ZXJ5U2VsZWN0b3IoIi5hZGQtbW9yZS1maWxlcyIpOwogICAgaWYgKGFkZE1vcmVCdG4pIHsKICAgICAgYWRkTW9yZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgZmlsZUlucHV0LmNsaWNrKCk7CiAgICAgIH0pOwogICAgfQogICAgZmlsZUlucHV0LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGFzeW5jIChlMTEpID0+IHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBmaWxlcyA9IGlucHV0LmZpbGVzOwogICAgICBpZiAoZmlsZXMgJiYgZmlsZXMubGVuZ3RoID4gMCkgewogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRmlsZUF0dGFjaG1lbnRzKGZpbGVzLCBibG9jaywgaGFuZGxlcnMyKTsKICAgICAgICBpbnB1dC52YWx1ZSA9ICIiOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZTExLnRhcmdldDsKICAgICAgaWYgKHRhcmdldC5jbGFzc0xpc3QuY29udGFpbnMoInJlbW92ZS1maWxlIikpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICAgICAgY29uc3QgZmlsZUlkID0gdGFyZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlLWlkIik7CiAgICAgICAgaWYgKGZpbGVJZCkgewogICAgICAgICAgdGhpcy5yZW1vdmVGaWxlKGZpbGVJZCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29udGFpbmVyLmNsYXNzTGlzdC5hZGQoImRyYWctb3ZlciIpOwogICAgfSk7CiAgICBjb250YWluZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ2xlYXZlIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJkcm9wIiwgYXN5bmMgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBjb250YWluZXIuY2xhc3NMaXN0LnJlbW92ZSgiZHJhZy1vdmVyIik7CiAgICAgIGNvbnN0IGZpbGVzID0gZTExLmRhdGFUcmFuc2Zlcj8uZmlsZXM7CiAgICAgIGlmIChmaWxlcyAmJiBmaWxlcy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVGaWxlQXR0YWNobWVudHMoZmlsZXMsIGJsb2NrLCBoYW5kbGVyczIpOwogICAgICB9CiAgICB9KTsKICAgIGNvbnRhaW5lci5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IGhhbmRsZXJzMi5vbkZvY3VzKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgY29udGFpbmVyLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRGVsZXRlIiB8fCBlMTEua2V5ID09PSAiQmFja3NwYWNlIikgewogICAgICAgIGlmIChkb2N1bWVudC5hY3RpdmVFbGVtZW50ID09PSBjb250YWluZXIgJiYgYmxvY2subWV0YWRhdGE/LmZpbGVzPy5sZW5ndGggPiAwKSB7CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIGFzeW5jIGhhbmRsZUZpbGVBdHRhY2htZW50cyhmaWxlcywgYmxvY2ssIGhhbmRsZXJzMikgewogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmICghYmxvY2subWV0YWRhdGEuZmlsZXMpCiAgICAgIGJsb2NrLm1ldGFkYXRhLmZpbGVzID0gW107CiAgICBmb3IgKGNvbnN0IGZpbGUgb2YgQXJyYXkuZnJvbShmaWxlcykpIHsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBkYXRhVXJsID0gYXdhaXQgdGhpcy5maWxlVG9EYXRhVXJsKGZpbGUpOwogICAgICAgIGNvbnN0IGZpbGVEYXRhID0gewogICAgICAgICAgaWQ6IHRoaXMuZ2VuZXJhdGVJZCgpLAogICAgICAgICAgbmFtZTogZmlsZS5uYW1lLAogICAgICAgICAgc2l6ZTogZmlsZS5zaXplLAogICAgICAgICAgdHlwZTogZmlsZS50eXBlLAogICAgICAgICAgZGF0YTogZGF0YVVybAogICAgICAgIH07CiAgICAgICAgYmxvY2subWV0YWRhdGEuZmlsZXMucHVzaChmaWxlRGF0YSk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRmFpbGVkIHRvIGF0dGFjaCBmaWxlOiIsIGZpbGUubmFtZSwgZXJyb3IpOwogICAgICB9CiAgICB9CiAgICBibG9jay5jb250ZW50ID0gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgOwogICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgfQogIHJlbW92ZUZpbGUoZmlsZUlkLCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBpZiAoIWJsb2NrLm1ldGFkYXRhPy5maWxlcykKICAgICAgcmV0dXJuOwogICAgYmxvY2subWV0YWRhdGEuZmlsZXMgPSBibG9jay5tZXRhZGF0YS5maWxlcy5maWx0ZXIoKGY3KSA9PiBmNy5pZCAhPT0gZmlsZUlkKTsKICAgIGJsb2NrLmNvbnRlbnQgPSBibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggPiAwID8gYCR7YmxvY2subWV0YWRhdGEuZmlsZXMubGVuZ3RofSBmaWxlJHtibG9jay5tZXRhZGF0YS5maWxlcy5sZW5ndGggIT09IDEgPyAicyIgOiAiIn0gYXR0YWNoZWRgIDogIiI7CiAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICB9CiAgZmlsZVRvRGF0YVVybChmaWxlKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgY29uc3QgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKTsKICAgICAgcmVhZGVyLm9ubG9hZCA9IChlMTEpID0+IHsKICAgICAgICBjb25zdCByZXN1bHQgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgaWYgKHR5cGVvZiByZXN1bHQgPT09ICJzdHJpbmciKSB7CiAgICAgICAgICByZXNvbHZlMihyZXN1bHQpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICByZWplY3QobmV3IEVycm9yKCJGYWlsZWQgdG8gcmVhZCBmaWxlIikpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgcmVhZGVyLm9uZXJyb3IgPSByZWplY3Q7CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfSk7CiAgfQogIGdldEZpbGVJY29uKG1pbWVUeXBlKSB7CiAgICBpZiAobWltZVR5cGUuc3RhcnRzV2l0aCgiaW1hZ2UvIikpCiAgICAgIHJldHVybiAiXHV7MUY1QkN9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5zdGFydHNXaXRoKCJ2aWRlby8iKSkKICAgICAgcmV0dXJuICJcdXsxRjNBNX0iOwogICAgaWYgKG1pbWVUeXBlLnN0YXJ0c1dpdGgoImF1ZGlvLyIpKQogICAgICByZXR1cm4gIlx1ezFGM0I1fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInBkZiIpKQogICAgICByZXR1cm4gIlx1ezFGNEM0fSI7CiAgICBpZiAobWltZVR5cGUuaW5jbHVkZXMoInppcCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJyYXIiKSB8fCBtaW1lVHlwZS5pbmNsdWRlcygidGFyIikpCiAgICAgIHJldHVybiAiXHV7MUY1QzR9XHVGRTBGIjsKICAgIGlmIChtaW1lVHlwZS5pbmNsdWRlcygic2hlZXQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQX0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJkb2N1bWVudCIpIHx8IG1pbWVUeXBlLmluY2x1ZGVzKCJtc3dvcmQiKSkKICAgICAgcmV0dXJuICJcdXsxRjRERH0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJwcmVzZW50YXRpb24iKSkKICAgICAgcmV0dXJuICJcdXsxRjRDQn0iOwogICAgaWYgKG1pbWVUeXBlLmluY2x1ZGVzKCJ0ZXh0IikpCiAgICAgIHJldHVybiAiXHV7MUY0QzN9IjsKICAgIHJldHVybiAiXHV7MUY0QzF9IjsKICB9CiAgZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICAgIGlmIChieXRlcyA9PT0gMCkKICAgICAgcmV0dXJuICIwIEJ5dGVzIjsKICAgIGNvbnN0IGs0ID0gMTAyNDsKICAgIGNvbnN0IHNpemVzID0gWyJCeXRlcyIsICJLQiIsICJNQiIsICJHQiJdOwogICAgY29uc3QgaTExID0gTWF0aC5mbG9vcihNYXRoLmxvZyhieXRlcykgLyBNYXRoLmxvZyhrNCkpOwogICAgcmV0dXJuIHBhcnNlRmxvYXQoKGJ5dGVzIC8gTWF0aC5wb3coazQsIGkxMSkpLnRvRml4ZWQoMikpICsgIiAiICsgc2l6ZXNbaTExXTsKICB9CiAgZ2VuZXJhdGVJZCgpIHsKICAgIHJldHVybiBgZmlsZS0ke0RhdGUubm93KCl9LSR7TWF0aC5yYW5kb20oKS50b1N0cmluZygzNikuc3Vic3RyKDIsIDkpfWA7CiAgfQogIGVzY2FwZUh0bWwodGV4dDkpIHsKICAgIGNvbnN0IGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgZGl2LnRleHRDb250ZW50ID0gdGV4dDk7CiAgICByZXR1cm4gZGl2LmlubmVySFRNTDsKICB9CiAgZ2V0Q29udGVudChlbGVtZW50NCkgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgcmV0dXJuIGJsb2NrPy5jb250ZW50IHx8ICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgYmxvY2sgPSB0aGlzLmdldEJsb2NrRnJvbUVsZW1lbnQoZWxlbWVudDQpOwogICAgaWYgKGJsb2NrKSB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBjb250ZW50MzsKICAgIH0KICB9CiAgZ2V0QmxvY2tGcm9tRWxlbWVudChlbGVtZW50NCkgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIGlmICghYmxvY2tJZCkKICAgICAgcmV0dXJuIG51bGw7CiAgICByZXR1cm4gewogICAgICBpZDogYmxvY2tJZCwKICAgICAgdHlwZTogImF0dGFjaG1lbnQiLAogICAgICBjb250ZW50OiAiIiwKICAgICAgbWV0YWRhdGE6IHt9CiAgICB9OwogIH0KICBnZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIHNldEN1cnNvclRvU3RhcnQoZWxlbWVudDQpIHsKICAgIHRoaXMuZm9jdXMoZWxlbWVudDQpOwogIH0KICBzZXRDdXJzb3JUb0VuZChlbGVtZW50NCkgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGZvY3VzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnRhaW5lcj8uZm9jdXMoKTsKICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgfQogIGdldFNwbGl0Q29udGVudChlbGVtZW50NCkgewogICAgcmV0dXJuIG51bGw7CiAgfQogIGdldFN0eWxlcygpIHsKICAgIHJldHVybiBgCiAgICAgIC8qIEF0dGFjaG1lbnQgQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5hdHRhY2htZW50LWJsb2NrLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIG1hcmdpbjogMTJweCAwOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTExODI3Iil9OwogICAgICB9CiAgICAgIAogICAgICAuYXR0YWNobWVudC1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtYmxvY2stY29udGFpbmVyLmRyYWctb3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjM2NmYxIiwgIiM4MThjZjgiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEhlYWRlciAqLwogICAgICAuYXR0YWNobWVudC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgfQogICAgICAKICAgICAgLmF0dGFjaG1lbnQtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBGaWxlIExpc3QgKi8KICAgICAgLmF0dGFjaG1lbnQtbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICAgIG1pbi1oZWlnaHQ6IDgwcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogNHB4OwogICAgICB9CiAgICAgIAogICAgICAvKiBQbGFjZWhvbGRlciAqLwogICAgICAuYXR0YWNobWVudC1wbGFjZWhvbGRlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LXBsYWNlaG9sZGVyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICB9CiAgICAgIAogICAgICAucGxhY2Vob2xkZXItdGV4dCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQogICAgICAKICAgICAgLnBsYWNlaG9sZGVyLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogRmlsZSBJdGVtcyAqLwogICAgICAuYXR0YWNobWVudC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KICAgICAgCiAgICAgIC5hdHRhY2htZW50LWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLWljb24gewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtaW5mbyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBtaW4td2lkdGg6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5maWxlLW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgfQogICAgICAKICAgICAgLmZpbGUtc2l6ZSB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzZiNzI4MCIsICIjOWNhM2FmIil9OwogICAgICAgIG1hcmdpbi10b3A6IDJweDsKICAgICAgfQogICAgICAKICAgICAgLnJlbW92ZS1maWxlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMjRweDsKICAgICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDE7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5yZW1vdmUtZmlsZTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZWUyZTIiLCAiIzk5MWIxYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmNhNWE1IiwgIiNkYzI2MjYiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZGMyNjI2IiwgIiNmY2E1YTUiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEFkZCBNb3JlIEZpbGVzIEJ1dHRvbiAqLwogICAgICAuYWRkLW1vcmUtZmlsZXMgewogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgZm9udC1mYW1pbHk6IC1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgc2Fucy1zZXJpZjsKICAgICAgfQogICAgICAKICAgICAgLmFkZC1tb3JlLWZpbGVzOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGlkZGVuIGZpbGUgaW5wdXQgKi8KICAgICAgLmF0dGFjaG1lbnQtZmlsZS1pbnB1dCB7CiAgICAgICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvZGl2aWRlci5ibG9jay5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgRGl2aWRlckJsb2NrSGFuZGxlciA9IGNsYXNzIGV4dGVuZHMgQmFzZUJsb2NrSGFuZGxlciB7CiAgdHlwZSA9ICJkaXZpZGVyIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSBpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIjsKICAgIHJldHVybiBgCiAgICAgIDxkaXYgY2xhc3M9ImJsb2NrIGRpdmlkZXIke3NlbGVjdGVkQ2xhc3N9IiBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIgZGF0YS1ibG9jay10eXBlPSIke2Jsb2NrLnR5cGV9IiB0YWJpbmRleD0iMCI+CiAgICAgICAgPGhyPgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBkaXZpZGVyQmxvY2sgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuYmxvY2suZGl2aWRlciIpOwogICAgaWYgKCFkaXZpZGVyQmxvY2spCiAgICAgIHJldHVybjsKICAgIGRpdmlkZXJCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBkaXZpZGVyQmxvY2suZm9jdXMoKTsKICAgICAgaGFuZGxlcnMyLm9uRm9jdXM/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkZvY3VzPy4oKTsKICAgIH0pOwogICAgZGl2aWRlckJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiB7CiAgICAgIGhhbmRsZXJzMi5vbkJsdXI/LigpOwogICAgfSk7CiAgICBkaXZpZGVyQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgaWYgKGUxMS5rZXkgPT09ICJCYWNrc3BhY2UiIHx8IGUxMS5rZXkgPT09ICJEZWxldGUiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bj8uKGUxMSk7CiAgICAgIH0KICAgIH0pOwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAuYmxvY2suZGl2aWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyOmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CgogICAgICAuYmxvY2suZGl2aWRlci5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jay5kaXZpZGVyIGhyIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTBlMGUwIiwgIiMzMzMiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CiAgICBgOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvYmxvY2tzL2NvbnRlbnQvbWFya2Rvd24uYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIE1hcmtkb3duQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gIm1hcmtkb3duIjsKICByZW5kZXIoYmxvY2ssIGlzU2VsZWN0ZWQpIHsKICAgIGNvbnN0IGlzRWRpdE1vZGUgPSBibG9jay5tZXRhZGF0YT8uaXNFZGl0TW9kZSA/PyB0cnVlOwogICAgY29uc3QgY29udGVudDMgPSBibG9jay5jb250ZW50IHx8ICIiOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tYmxvY2stY29udGFpbmVyJHtpc1NlbGVjdGVkID8gIiBzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgIGRhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9IgogICAgICAgICAgIGRhdGEtZWRpdC1tb2RlPSIke2lzRWRpdE1vZGV9Ij4KICAgICAgICA8ZGl2IGNsYXNzPSJtYXJrZG93bi1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24taWNvbiI+TVx1MjE5MzwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tdGl0bGUiPk1hcmtkb3duPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJtYXJrZG93bi10b2dnbGUtbW9kZSIgdGl0bGU9IiR7aXNFZGl0TW9kZSA/ICJQcmV2aWV3IiA6ICJFZGl0In0iPgogICAgICAgICAgICAke2lzRWRpdE1vZGUgPyAiXHV7MUY0NDF9XHVGRTBGIiA6ICJcdTI3MEZcdUZFMEYifQogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJtYXJrZG93bi1lZGl0b3IiIAogICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkVudGVyIG1hcmtkb3duIGNvbnRlbnQuLi4iCiAgICAgICAgICAgICAgICBzcGVsbGNoZWNrPSJmYWxzZSI+JHt0aGlzLmVzY2FwZUh0bWwoY29udGVudDMpfTwvdGV4dGFyZWE+CiAgICBgOwogIH0KICByZW5kZXJQcmV2aWV3KGNvbnRlbnQzKSB7CiAgICBjb25zdCBodG1sMTggPSB0aGlzLnBhcnNlTWFya2Rvd24oY29udGVudDMpOwogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0ibWFya2Rvd24tcHJldmlldyI+CiAgICAgICAgJHtodG1sMTggfHwgJzxkaXYgY2xhc3M9InByZXZpZXctZW1wdHkiPk5vIGNvbnRlbnQgdG8gcHJldmlldzwvZGl2Pid9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgc2V0dXAoZWxlbWVudDQsIGJsb2NrLCBoYW5kbGVyczIpIHsKICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi10b2dnbGUtbW9kZSIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXRvZ2dsZUJ0bikgewogICAgICBjb25zb2xlLmVycm9yKCJNYXJrZG93bkJsb2NrSGFuZGxlcjogQ291bGQgbm90IGZpbmQgcmVxdWlyZWQgZWxlbWVudHMiKTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKCFibG9jay5tZXRhZGF0YSkKICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgIGlmIChibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID09PSB2b2lkIDApCiAgICAgIGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUgPSB0cnVlOwogICAgdG9nZ2xlQnRuLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKGUxMSkgPT4gewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSkgewogICAgICAgIGNvbnN0IGVkaXRvciA9IGNvbnRhaW5lci5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICB9KTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIlRhYiIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgICAgICBjb25zdCBlbmQzID0gZWRpdG9yLnNlbGVjdGlvbkVuZDsKICAgICAgICBjb25zdCB2YWx1ZTIgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgaWYgKGUxMS5zaGlmdEtleSkgewogICAgICAgICAgY29uc3QgYmVmb3JlQ3Vyc29yID0gdmFsdWUyLnN1YnN0cmluZygwLCBzdGFydCk7CiAgICAgICAgICBjb25zdCBsYXN0TmV3bGluZSA9IGJlZm9yZUN1cnNvci5sYXN0SW5kZXhPZigiXG4iKTsKICAgICAgICAgIGNvbnN0IGxpbmVTdGFydCA9IGxhc3ROZXdsaW5lICsgMTsKICAgICAgICAgIGNvbnN0IGxpbmVDb250ZW50ID0gdmFsdWUyLnN1YnN0cmluZyhsaW5lU3RhcnQsIHN0YXJ0KTsKICAgICAgICAgIGlmIChsaW5lQ29udGVudC5zdGFydHNXaXRoKCIgICIpKSB7CiAgICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgbGluZVN0YXJ0KSArIGxpbmVDb250ZW50LnN1YnN0cmluZygyKSArIHZhbHVlMi5zdWJzdHJpbmcoc3RhcnQpOwogICAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgLSAyOwogICAgICAgICAgfQogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBlZGl0b3IudmFsdWUgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KSArICIgICIgKyB2YWx1ZTIuc3Vic3RyaW5nKGVuZDMpOwogICAgICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IHN0YXJ0ICsgMjsKICAgICAgICB9CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIioqIiwgIioqIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKChlMTEuY3RybEtleSB8fCBlMTEubWV0YUtleSkgJiYgZTExLmtleSA9PT0gImkiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgdGhpcy53cmFwU2VsZWN0aW9uKGVkaXRvciwgIl8iLCAiXyIpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICgoZTExLmN0cmxLZXkgfHwgZTExLm1ldGFLZXkpICYmIGUxMS5rZXkgPT09ICJrIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIHRoaXMuaW5zZXJ0TGluayhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWJsb2NrLWNvbnRhaW5lciIpOwogICAgY29uc3QgcHJldmlldyA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1wcmV2aWV3Iik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhcHJldmlldykKICAgICAgcmV0dXJuOwogICAgcHJldmlldy5zZXRBdHRyaWJ1dGUoInRhYmluZGV4IiwgIjAiKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIHByZXZpZXcuYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IGhhbmRsZXJzMi5vbkJsdXIoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiICYmICFlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaGFuZGxlcnMyLm9uS2V5RG93bihlMTEpOwogICAgfSk7CiAgfQogIHdyYXBTZWxlY3Rpb24oZWRpdG9yLCBiZWZvcmUsIGFmdGVyKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCByZXBsYWNlbWVudCA9IGJlZm9yZSArIChzZWxlY3RlZFRleHQgfHwgInRleHQiKSArIGFmdGVyOwogICAgZWRpdG9yLnZhbHVlID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBzdGFydCkgKyByZXBsYWNlbWVudCArIGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoZW5kMyk7CiAgICBpZiAoc2VsZWN0ZWRUZXh0KSB7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0OwogICAgICBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyByZXBsYWNlbWVudC5sZW5ndGg7CiAgICB9IGVsc2UgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGg7CiAgICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGJlZm9yZS5sZW5ndGggKyA0OwogICAgfQogICAgZWRpdG9yLmZvY3VzKCk7CiAgfQogIGluc2VydExpbmsoZWRpdG9yKSB7CiAgICBjb25zdCBzdGFydCA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhzdGFydCwgZW5kMyk7CiAgICBjb25zdCBsaW5rVGV4dCA9IHNlbGVjdGVkVGV4dCB8fCAibGluayB0ZXh0IjsKICAgIGNvbnN0IHJlcGxhY2VtZW50ID0gYFske2xpbmtUZXh0fV0odXJsKWA7CiAgICBlZGl0b3IudmFsdWUgPSBlZGl0b3IudmFsdWUuc3Vic3RyaW5nKDAsIHN0YXJ0KSArIHJlcGxhY2VtZW50ICsgZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhlbmQzKTsKICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IHN0YXJ0ICsgbGlua1RleHQubGVuZ3RoICsgMzsKICAgIGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCArIGxpbmtUZXh0Lmxlbmd0aCArIDY7CiAgICBlZGl0b3IuZm9jdXMoKTsKICB9CiAgYXV0b1Jlc2l6ZShlZGl0b3IpIHsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSAiYXV0byI7CiAgICBlZGl0b3Iuc3R5bGUuaGVpZ2h0ID0gZWRpdG9yLnNjcm9sbEhlaWdodCArICJweCI7CiAgfQogIHBhcnNlTWFya2Rvd24obWFya2Rvd24pIHsKICAgIGxldCBodG1sMTggPSB0aGlzLmVzY2FwZUh0bWwobWFya2Rvd24pOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL14jIyMgKC4rKSQvZ20sICI8aDM+JDE8L2gzPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL14jIyAoLispJC9nbSwgIjxoMj4kMTwvaDI+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXiMgKC4rKSQvZ20sICI8aDE+JDE8L2gxPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1wqXCooLis/KVwqXCovZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9fXyguKz8pX18vZywgIjxzdHJvbmc+JDE8L3N0cm9uZz4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9cKiguKz8pXCovZywgIjxlbT4kMTwvZW0+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXyguKz8pXy9nLCAiPGVtPiQxPC9lbT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9gYGAoW1xzXFNdKj8pYGBgL2csICI8cHJlPjxjb2RlPiQxPC9jb2RlPjwvcHJlPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL2AoLis/KWAvZywgIjxjb2RlPiQxPC9jb2RlPiIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1xbKFteXF1dKylcXVwoKFteKV0rKVwpL2csICc8YSBocmVmPSIkMiI+JDE8L2E+Jyk7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXlwqICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC9eLSAoLispJC9nbSwgIjxsaT4kMTwvbGk+Iik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvXlxkK1wuICguKykkL2dtLCAiPGxpPiQxPC9saT4iKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC8oPGxpPi4qPFwvbGk+XG4/KSsvZywgKG1hdGNoMikgPT4gewogICAgICByZXR1cm4gIjx1bD4iICsgbWF0Y2gyICsgIjwvdWw+IjsKICAgIH0pOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoL1xuXG4vZywgIjwvcD48cD4iKTsKICAgIGh0bWwxOCA9ICI8cD4iICsgaHRtbDE4ICsgIjwvcD4iOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPjxcL3A+L2csICIiKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC88cD4oPGhbMS0zXT4pL2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLyg8XC9oWzEtM10+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPig8dWw+KS9nLCAiJDEiKTsKICAgIGh0bWwxOCA9IGh0bWwxOC5yZXBsYWNlKC8oPFwvdWw+KTxcL3A+L2csICIkMSIpOwogICAgaHRtbDE4ID0gaHRtbDE4LnJlcGxhY2UoLzxwPig8cHJlPikvZywgIiQxIik7CiAgICBodG1sMTggPSBodG1sMTgucmVwbGFjZSgvKDxcL3ByZT4pPFwvcD4vZywgIiQxIik7CiAgICByZXR1cm4gaHRtbDE4OwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgcmV0dXJuIGVkaXRvci52YWx1ZTsKICAgIH0KICAgIGNvbnN0IGNvbnRhaW5lciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IGJsb2NrSWQgPSBjb250YWluZXI/LmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgcmV0dXJuICIiOwogIH0KICBzZXRDb250ZW50KGVsZW1lbnQ0LCBjb250ZW50MykgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICByZXR1cm4gZWRpdG9yID8gZWRpdG9yLnNlbGVjdGlvblN0YXJ0IDogbnVsbDsKICB9CiAgc2V0Q3Vyc29yVG9TdGFydChlbGVtZW50NCkgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gMDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgc2V0Q3Vyc29yVG9FbmQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5tYXJrZG93bi1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLXByZXZpZXciKTsKICAgICAgcHJldmlldz8uZm9jdXMoKTsKICAgIH0KICB9CiAgZm9jdXNXaXRoQ3Vyc29yKGVsZW1lbnQ0LCBwb3NpdGlvbjMgPSAiZW5kIikgewogICAgY29uc3QgZWRpdG9yID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLm1hcmtkb3duLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIubWFya2Rvd24tZWRpdG9yIik7CiAgICBpZiAoIWVkaXRvcikKICAgICAgcmV0dXJuIG51bGw7CiAgICBjb25zdCBjdXJzb3JQb3MgPSBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQ7CiAgICByZXR1cm4gewogICAgICBiZWZvcmU6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSwKICAgICAgYWZ0ZXI6IGVkaXRvci52YWx1ZS5zdWJzdHJpbmcoY3Vyc29yUG9zKQogICAgfTsKICB9CiAgZ2V0U3R5bGVzKCkgewogICAgcmV0dXJuIGAKICAgICAgLyogTWFya2Rvd24gQmxvY2sgQ29udGFpbmVyICovCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1ibG9jay1jb250YWluZXIuc2VsZWN0ZWQgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgfQogICAgICAKICAgICAgLyogSGVhZGVyICovCiAgICAgIC5tYXJrZG93bi1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24taWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdGl0bGUgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi10b2dnbGUtbW9kZSB7CiAgICAgICAgcGFkZGluZzogNHB4IDhweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5tYXJrZG93bi1jb250ZW50IHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIEVkaXRvciAqLwogICAgICAubWFya2Rvd24tZWRpdG9yIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIHJlc2l6ZTogbm9uZTsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxZjI5MzciLCAiI2YzZjRmNiIpfTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLm1hcmtkb3duLXByZXZpZXcgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgbWluLWhlaWdodDogOTZweDsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBsaW5lLWhlaWdodDogMS42OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzFmMjkzNyIsICIjZjNmNGY2Iil9OwogICAgICB9CiAgICAgIAogICAgICAucHJldmlldy1lbXB0eSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAvKiBNYXJrZG93biBwcmV2aWV3IHN0eWxlcyAqLwogICAgICAubWFya2Rvd24tcHJldmlldyBoMSB7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luOiAxNnB4IDAgOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGgyIHsKICAgICAgICBmb250LXNpemU6IDIwcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBtYXJnaW46IDE0cHggMCA2cHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMxMTE4MjciLCAiI2Y5ZmFmYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgaDMgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbjogMTJweCAwIDRweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyB1bCwKICAgICAgLm1hcmtkb3duLXByZXZpZXcgb2wgewogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAyNHB4OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBsaSB7CiAgICAgICAgbWFyZ2luOiA0cHggMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzFmMjkzNyIpfTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdDb25zb2xhcycsICdDb3VyaWVyIE5ldycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDAuOWVtOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBwcmUgY29kZSB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgfQogICAgICAKICAgICAgLm1hcmtkb3duLXByZXZpZXcgc3Ryb25nIHsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBlbSB7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgIH0KICAgICAgCiAgICAgIC5tYXJrZG93bi1wcmV2aWV3IGE6aG92ZXIgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogdW5kZXJsaW5lOwogICAgICB9CiAgICAgIAogICAgICAubWFya2Rvd24tcHJldmlldyBibG9ja3F1b3RlIHsKICAgICAgICBib3JkZXItbGVmdDogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNmI3MjgwIiwgIiM5Y2EzYWYiKX07CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9ibG9ja3MvY29udGVudC9odG1sLmJsb2NrLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBIdG1sQmxvY2tIYW5kbGVyID0gY2xhc3MgZXh0ZW5kcyBCYXNlQmxvY2tIYW5kbGVyIHsKICB0eXBlID0gImh0bWwiOwogIHJlbmRlcihibG9jaywgaXNTZWxlY3RlZCkgewogICAgY29uc3QgaXNFZGl0TW9kZSA9IGJsb2NrLm1ldGFkYXRhPy5pc0VkaXRNb2RlID8/IHRydWU7CiAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICByZXR1cm4gYAogICAgICA8ZGl2IGNsYXNzPSJodG1sLWJsb2NrLWNvbnRhaW5lciR7aXNTZWxlY3RlZCA/ICIgc2VsZWN0ZWQiIDogIiJ9IiAKICAgICAgICAgICBkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSIKICAgICAgICAgICBkYXRhLWVkaXQtbW9kZT0iJHtpc0VkaXRNb2RlfSI+CiAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0iaHRtbC1pY29uIj4mbHQ7LyZndDs8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtdGl0bGUiPkhUTUw8L2Rpdj4KICAgICAgICAgIDxidXR0b24gY2xhc3M9Imh0bWwtdG9nZ2xlLW1vZGUiIHRpdGxlPSIke2lzRWRpdE1vZGUgPyAiUHJldmlldyIgOiAiRWRpdCJ9Ij4KICAgICAgICAgICAgJHtpc0VkaXRNb2RlID8gIlx1ezFGNDQxfVx1RkUwRiIgOiAiXHUyNzBGXHVGRTBGIn0KICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9Imh0bWwtY29udGVudCI+CiAgICAgICAgICAke2lzRWRpdE1vZGUgPyB0aGlzLnJlbmRlckVkaXRvcihjb250ZW50MykgOiB0aGlzLnJlbmRlclByZXZpZXcoY29udGVudDMpfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckVkaXRvcihjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPHRleHRhcmVhIGNsYXNzPSJodG1sLWVkaXRvciIgCiAgICAgICAgICAgICAgICBwbGFjZWhvbGRlcj0iRW50ZXIgSFRNTCBjb250ZW50Li4uIgogICAgICAgICAgICAgICAgc3BlbGxjaGVjaz0iZmFsc2UiPiR7dGhpcy5lc2NhcGVIdG1sKGNvbnRlbnQzKX08L3RleHRhcmVhPgogICAgYDsKICB9CiAgcmVuZGVyUHJldmlldyhjb250ZW50MykgewogICAgcmV0dXJuIGAKICAgICAgPGRpdiBjbGFzcz0iaHRtbC1wcmV2aWV3Ij4KICAgICAgICAke2NvbnRlbnQzIHx8ICc8ZGl2IGNsYXNzPSJwcmV2aWV3LWVtcHR5Ij5ObyBjb250ZW50IHRvIHByZXZpZXc8L2Rpdj4nfQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHNldHVwKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBjb250YWluZXIgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1ibG9jay1jb250YWluZXIiKTsKICAgIGNvbnN0IHRvZ2dsZUJ0biA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLXRvZ2dsZS1tb2RlIik7CiAgICBpZiAoIWNvbnRhaW5lciB8fCAhdG9nZ2xlQnRuKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkh0bWxCbG9ja0hhbmRsZXI6IENvdWxkIG5vdCBmaW5kIHJlcXVpcmVkIGVsZW1lbnRzIik7CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgIGJsb2NrLm1ldGFkYXRhID0ge307CiAgICBpZiAoYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9PT0gdm9pZCAwKQogICAgICBibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlID0gdHJ1ZTsKICAgIHRvZ2dsZUJ0bi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgICBjb25zdCBlZGl0b3IgPSBjb250YWluZXIucXVlcnlTZWxlY3RvcigiLmh0bWwtZWRpdG9yIik7CiAgICAgICAgaWYgKGVkaXRvcikgewogICAgICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgICB9CiAgICAgIH0KICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9ICFibG9jay5tZXRhZGF0YS5pc0VkaXRNb2RlOwogICAgICBoYW5kbGVyczIub25SZXF1ZXN0VXBkYXRlPy4oKTsKICAgIH0pOwogICAgaWYgKGJsb2NrLm1ldGFkYXRhLmlzRWRpdE1vZGUpIHsKICAgICAgdGhpcy5zZXR1cEVkaXRvcihlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9IGVsc2UgewogICAgICB0aGlzLnNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMik7CiAgICB9CiAgfQogIHNldHVwRWRpdG9yKGVsZW1lbnQ0LCBibG9jaywgaGFuZGxlcnMyKSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm47CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiZm9jdXMiLCAoKSA9PiBoYW5kbGVyczIub25Gb2N1cygpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJibHVyIiwgKCkgPT4gaGFuZGxlcnMyLm9uQmx1cigpKTsKICAgIGVkaXRvci5hZGRFdmVudExpc3RlbmVyKCJpbnB1dCIsICgpID0+IHsKICAgICAgYmxvY2suY29udGVudCA9IGVkaXRvci52YWx1ZTsKICAgICAgdGhpcy52YWxpZGF0ZUh0bWwoZWRpdG9yLnZhbHVlKTsKICAgIH0pOwogICAgZWRpdG9yLmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgIGlmIChlMTEua2V5ID09PSAiVGFiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IHN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgICAgIGNvbnN0IGVuZDMgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kOwogICAgICAgIGNvbnN0IHZhbHVlMiA9IGVkaXRvci52YWx1ZTsKICAgICAgICBpZiAoZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgICBjb25zdCBiZWZvcmVDdXJzb3IgPSB2YWx1ZTIuc3Vic3RyaW5nKDAsIHN0YXJ0KTsKICAgICAgICAgIGNvbnN0IGxhc3ROZXdsaW5lID0gYmVmb3JlQ3Vyc29yLmxhc3RJbmRleE9mKCJcbiIpOwogICAgICAgICAgY29uc3QgbGluZVN0YXJ0ID0gbGFzdE5ld2xpbmUgKyAxOwogICAgICAgICAgY29uc3QgbGluZUNvbnRlbnQgPSB2YWx1ZTIuc3Vic3RyaW5nKGxpbmVTdGFydCwgc3RhcnQpOwogICAgICAgICAgaWYgKGxpbmVDb250ZW50LnN0YXJ0c1dpdGgoIiAgIikpIHsKICAgICAgICAgICAgZWRpdG9yLnZhbHVlID0gdmFsdWUyLnN1YnN0cmluZygwLCBsaW5lU3RhcnQpICsgbGluZUNvbnRlbnQuc3Vic3RyaW5nKDIpICsgdmFsdWUyLnN1YnN0cmluZyhzdGFydCk7CiAgICAgICAgICAgIGVkaXRvci5zZWxlY3Rpb25TdGFydCA9IGVkaXRvci5zZWxlY3Rpb25FbmQgPSBzdGFydCAtIDI7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGVkaXRvci52YWx1ZSA9IHZhbHVlMi5zdWJzdHJpbmcoMCwgc3RhcnQpICsgIiAgIiArIHZhbHVlMi5zdWJzdHJpbmcoZW5kMyk7CiAgICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gc3RhcnQgKyAyOwogICAgICAgIH0KICAgICAgICBibG9jay5jb250ZW50ID0gZWRpdG9yLnZhbHVlOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAoKGUxMS5jdHJsS2V5IHx8IGUxMS5tZXRhS2V5KSAmJiBlMTEua2V5ID09PSAiLyIpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICB0aGlzLmF1dG9DbG9zZVRhZyhlZGl0b3IpOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBlZGl0b3IudmFsdWU7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICBlZGl0b3IuYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoKSA9PiB0aGlzLmF1dG9SZXNpemUoZWRpdG9yKSk7CiAgfQogIHNldHVwUHJldmlldyhlbGVtZW50NCwgYmxvY2ssIGhhbmRsZXJzMikgewogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBwcmV2aWV3ID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtcHJldmlldyIpOwogICAgaWYgKCFjb250YWluZXIgfHwgIXByZXZpZXcpCiAgICAgIHJldHVybjsKICAgIHByZXZpZXcuc2V0QXR0cmlidXRlKCJ0YWJpbmRleCIsICIwIik7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImZvY3VzIiwgKCkgPT4gaGFuZGxlcnMyLm9uRm9jdXMoKSk7CiAgICBwcmV2aWV3LmFkZEV2ZW50TGlzdGVuZXIoImJsdXIiLCAoKSA9PiBoYW5kbGVyczIub25CbHVyKCkpOwogICAgcHJldmlldy5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICBpZiAoZTExLmtleSA9PT0gIkVudGVyIiAmJiAhZTExLnNoaWZ0S2V5KSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYmxvY2subWV0YWRhdGEuaXNFZGl0TW9kZSA9IHRydWU7CiAgICAgICAgaGFuZGxlcnMyLm9uUmVxdWVzdFVwZGF0ZT8uKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGhhbmRsZXJzMi5vbktleURvd24oZTExKTsKICAgIH0pOwogICAgdGhpcy5zYW5kYm94Q29udGVudChwcmV2aWV3KTsKICB9CiAgYXV0b0Nsb3NlVGFnKGVkaXRvcikgewogICAgY29uc3QgY3Vyc29yUG9zID0gZWRpdG9yLnNlbGVjdGlvblN0YXJ0OwogICAgY29uc3QgdGV4dDkgPSBlZGl0b3IudmFsdWU7CiAgICBsZXQgdGFnU3RhcnQgPSBjdXJzb3JQb3M7CiAgICB3aGlsZSAodGFnU3RhcnQgPiAwICYmIHRleHQ5W3RhZ1N0YXJ0IC0gMV0gIT09ICI8IikgewogICAgICB0YWdTdGFydC0tOwogICAgfQogICAgaWYgKHRhZ1N0YXJ0ID4gMCkgewogICAgICBjb25zdCB0YWdDb250ZW50ID0gdGV4dDkuc3Vic3RyaW5nKHRhZ1N0YXJ0LCBjdXJzb3JQb3MpOwogICAgICBjb25zdCB0YWdNYXRjaCA9IHRhZ0NvbnRlbnQubWF0Y2goL14oXHcrKS8pOwogICAgICBpZiAodGFnTWF0Y2gpIHsKICAgICAgICBjb25zdCB0YWdOYW1lID0gdGFnTWF0Y2hbMV07CiAgICAgICAgY29uc3QgY2xvc2luZ1RhZyA9IGA8LyR7dGFnTmFtZX0+YDsKICAgICAgICBlZGl0b3IudmFsdWUgPSB0ZXh0OS5zdWJzdHJpbmcoMCwgY3Vyc29yUG9zKSArICI+IiArIGNsb3NpbmdUYWcgKyB0ZXh0OS5zdWJzdHJpbmcoY3Vyc29yUG9zKTsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gY3Vyc29yUG9zICsgMTsKICAgICAgfQogICAgfQogIH0KICBhdXRvUmVzaXplKGVkaXRvcikgewogICAgZWRpdG9yLnN0eWxlLmhlaWdodCA9ICJhdXRvIjsKICAgIGVkaXRvci5zdHlsZS5oZWlnaHQgPSBlZGl0b3Iuc2Nyb2xsSGVpZ2h0ICsgInB4IjsKICB9CiAgdmFsaWRhdGVIdG1sKGh0bWwxOCkgewogICAgY29uc3Qgb3BlblRhZ3MgPSBbXTsKICAgIGNvbnN0IHRhZ1JlZ2V4ID0gLzxcLz8oW2EtekEtWl1bYS16QS1aMC05XSopXGJbXj5dKj4vZzsKICAgIGxldCBtYXRjaDI7CiAgICB3aGlsZSAoKG1hdGNoMiA9IHRhZ1JlZ2V4LmV4ZWMoaHRtbDE4KSkgIT09IG51bGwpIHsKICAgICAgY29uc3QgaXNDbG9zaW5nID0gbWF0Y2gyWzBdLnN0YXJ0c1dpdGgoIjwvIik7CiAgICAgIGNvbnN0IHRhZ05hbWUgPSBtYXRjaDJbMV0udG9Mb3dlckNhc2UoKTsKICAgICAgaWYgKGlzQ2xvc2luZykgewogICAgICAgIGlmIChvcGVuVGFncy5sZW5ndGggPT09IDAgfHwgb3BlblRhZ3Nbb3BlblRhZ3MubGVuZ3RoIC0gMV0gIT09IHRhZ05hbWUpIHsKICAgICAgICAgIGNvbnNvbGUud2FybihgTWlzbWF0Y2hlZCBjbG9zaW5nIHRhZzogJHt0YWdOYW1lfWApOwogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgICBvcGVuVGFncy5wb3AoKTsKICAgICAgfSBlbHNlIGlmICghbWF0Y2gyWzBdLmVuZHNXaXRoKCIvPiIpKSB7CiAgICAgICAgb3BlblRhZ3MucHVzaCh0YWdOYW1lKTsKICAgICAgfQogICAgfQogICAgaWYgKG9wZW5UYWdzLmxlbmd0aCA+IDApIHsKICAgICAgY29uc29sZS53YXJuKGBVbmNsb3NlZCB0YWdzOiAke29wZW5UYWdzLmpvaW4oIiwgIil9YCk7CiAgICAgIHJldHVybiBmYWxzZTsKICAgIH0KICAgIHJldHVybiB0cnVlOwogIH0KICBzYW5kYm94Q29udGVudChwcmV2aWV3KSB7CiAgICBjb25zdCBzY3JpcHRzID0gcHJldmlldy5xdWVyeVNlbGVjdG9yQWxsKCJzY3JpcHQiKTsKICAgIHNjcmlwdHMuZm9yRWFjaCgoc2NyaXB0KSA9PiBzY3JpcHQucmVtb3ZlKCkpOwogICAgY29uc3QgYWxsRWxlbWVudHMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoIioiKTsKICAgIGFsbEVsZW1lbnRzLmZvckVhY2goKGVsKSA9PiB7CiAgICAgIEFycmF5LmZyb20oZWwuYXR0cmlidXRlcykuZm9yRWFjaCgoYXR0cikgPT4gewogICAgICAgIGlmIChhdHRyLm5hbWUuc3RhcnRzV2l0aCgib24iKSkgewogICAgICAgICAgZWwucmVtb3ZlQXR0cmlidXRlKGF0dHIubmFtZSk7CiAgICAgICAgfQogICAgICB9KTsKICAgIH0pOwogICAgY29uc3QgZm9ybXMgPSBwcmV2aWV3LnF1ZXJ5U2VsZWN0b3JBbGwoImZvcm0iKTsKICAgIGZvcm1zLmZvckVhY2goKGZvcm0pID0+IHsKICAgICAgZm9ybS5hZGRFdmVudExpc3RlbmVyKCJzdWJtaXQiLCAoZTExKSA9PiB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICB9KTsKICAgIH0pOwogIH0KICBlc2NhcGVIdG1sKHRleHQ5KSB7CiAgICBjb25zdCBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgIGRpdi50ZXh0Q29udGVudCA9IHRleHQ5OwogICAgcmV0dXJuIGRpdi5pbm5lckhUTUw7CiAgfQogIGdldENvbnRlbnQoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICByZXR1cm4gZWRpdG9yLnZhbHVlOwogICAgfQogICAgY29uc3QgY29udGFpbmVyID0gZWxlbWVudDQucXVlcnlTZWxlY3RvcigiLmh0bWwtYmxvY2stY29udGFpbmVyIik7CiAgICBjb25zdCBibG9ja0lkID0gY29udGFpbmVyPy5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKTsKICAgIHJldHVybiAiIjsKICB9CiAgc2V0Q29udGVudChlbGVtZW50NCwgY29udGVudDMpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IudmFsdWUgPSBjb250ZW50MzsKICAgICAgdGhpcy5hdXRvUmVzaXplKGVkaXRvcik7CiAgICB9CiAgfQogIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIHJldHVybiBlZGl0b3IgPyBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgOiBudWxsOwogIH0KICBzZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IDA7CiAgICAgIGVkaXRvci5mb2N1cygpOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5mb2N1cyhlbGVtZW50NCk7CiAgICB9CiAgfQogIHNldEN1cnNvclRvRW5kKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmIChlZGl0b3IpIHsKICAgICAgY29uc3QgbGVuZ3RoID0gZWRpdG9yLnZhbHVlLmxlbmd0aDsKICAgICAgZWRpdG9yLnNlbGVjdGlvblN0YXJ0ID0gZWRpdG9yLnNlbGVjdGlvbkVuZCA9IGxlbmd0aDsKICAgICAgZWRpdG9yLmZvY3VzKCk7CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZm9jdXMoZWxlbWVudDQpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBlZGl0b3IuZm9jdXMoKTsKICAgIH0gZWxzZSB7CiAgICAgIGNvbnN0IHByZXZpZXcgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1wcmV2aWV3Iik7CiAgICAgIHByZXZpZXc/LmZvY3VzKCk7CiAgICB9CiAgfQogIGZvY3VzV2l0aEN1cnNvcihlbGVtZW50NCwgcG9zaXRpb24zID0gImVuZCIpIHsKICAgIGNvbnN0IGVkaXRvciA9IGVsZW1lbnQ0LnF1ZXJ5U2VsZWN0b3IoIi5odG1sLWVkaXRvciIpOwogICAgaWYgKGVkaXRvcikgewogICAgICBpZiAocG9zaXRpb24zID09PSAic3RhcnQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb1N0YXJ0KGVsZW1lbnQ0KTsKICAgICAgfSBlbHNlIGlmIChwb3NpdGlvbjMgPT09ICJlbmQiKSB7CiAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZChlbGVtZW50NCk7CiAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICBlZGl0b3Iuc2VsZWN0aW9uU3RhcnQgPSBlZGl0b3Iuc2VsZWN0aW9uRW5kID0gcG9zaXRpb24zOwogICAgICAgIGVkaXRvci5mb2N1cygpOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICB0aGlzLmZvY3VzKGVsZW1lbnQ0KTsKICAgIH0KICB9CiAgZ2V0U3BsaXRDb250ZW50KGVsZW1lbnQ0KSB7CiAgICBjb25zdCBlZGl0b3IgPSBlbGVtZW50NC5xdWVyeVNlbGVjdG9yKCIuaHRtbC1lZGl0b3IiKTsKICAgIGlmICghZWRpdG9yKQogICAgICByZXR1cm4gbnVsbDsKICAgIGNvbnN0IGN1cnNvclBvcyA9IGVkaXRvci5zZWxlY3Rpb25TdGFydDsKICAgIHJldHVybiB7CiAgICAgIGJlZm9yZTogZWRpdG9yLnZhbHVlLnN1YnN0cmluZygwLCBjdXJzb3JQb3MpLAogICAgICBhZnRlcjogZWRpdG9yLnZhbHVlLnN1YnN0cmluZyhjdXJzb3JQb3MpCiAgICB9OwogIH0KICBnZXRTdHlsZXMoKSB7CiAgICByZXR1cm4gYAogICAgICAvKiBIVE1MIEJsb2NrIENvbnRhaW5lciAqLwogICAgICAuaHRtbC1ibG9jay1jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IDEycHggMDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMxMTE4MjciKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLWJsb2NrLWNvbnRhaW5lci5zZWxlY3RlZCB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBIZWFkZXIgKi8KICAgICAgLmh0bWwtaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgb3BhY2l0eTogMC44OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC10aXRsZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzNzQxNTEiLCAiI2U1ZTdlYiIpfTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGUgewogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtdG9nZ2xlLW1vZGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMxZjI5MzciKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICB9CiAgICAgIAogICAgICAvKiBDb250ZW50ICovCiAgICAgIC5odG1sLWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtaW4taGVpZ2h0OiAxMjBweDsKICAgICAgfQogICAgICAKICAgICAgLyogRWRpdG9yICovCiAgICAgIC5odG1sLWVkaXRvciB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWluLWhlaWdodDogMTIwcHg7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnQ29uc29sYXMnLCAnQ291cmllciBOZXcnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtZWRpdG9yOjpwbGFjZWhvbGRlciB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOWNhM2FmIiwgIiM2YjcyODAiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFByZXZpZXcgKi8KICAgICAgLmh0bWwtcHJldmlldyB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBtaW4taGVpZ2h0OiA5NnB4OwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMWYyOTM3IiwgIiNmM2Y0ZjYiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC5wcmV2aWV3LWVtcHR5IHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KICAgICAgCiAgICAgIC8qIFNhbmRib3hlZCBIVE1MIHByZXZpZXcgc3R5bGVzICovCiAgICAgIC5odG1sLXByZXZpZXcgKiB7CiAgICAgICAgbWF4LXdpZHRoOiAxMDAlOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGltZyB7CiAgICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IGEgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBhOmhvdmVyIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyB0YWJsZSB7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBjb2xsYXBzZTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoLAogICAgICAuaHRtbC1wcmV2aWV3IHRkIHsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICB9CiAgICAgIAogICAgICAuaHRtbC1wcmV2aWV3IHRoIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICAgICAgbWFyZ2luOiA4cHggMDsKICAgICAgfQogICAgICAKICAgICAgLmh0bWwtcHJldmlldyBjb2RlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMWYyOTM3Iil9OwogICAgICAgIHBhZGRpbmc6IDJweCA0cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnTW9uYWNvJywgJ0NvbnNvbGFzJywgJ0NvdXJpZXIgTmV3JywgbW9ub3NwYWNlOwogICAgICAgIGZvbnQtc2l6ZTogMC45ZW07CiAgICAgIH0KICAgICAgCiAgICAgIC5odG1sLXByZXZpZXcgcHJlIGNvZGUgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIHBhZGRpbmc6IDA7CiAgICAgIH0KICAgIGA7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmJsb2NrcmVnaXN0cmF0aW9uLmpzCmZ1bmN0aW9uIHJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpIHsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJkaXZpZGVyIiwgbmV3IERpdmlkZXJCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigicGFyYWdyYXBoIiwgbmV3IFBhcmFncmFwaEJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJoZWFkaW5nLTEiLCBuZXcgSGVhZGluZ0Jsb2NrSGFuZGxlcigiaGVhZGluZy0xIikpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImhlYWRpbmctMiIsIG5ldyBIZWFkaW5nQmxvY2tIYW5kbGVyKCJoZWFkaW5nLTIiKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaGVhZGluZy0zIiwgbmV3IEhlYWRpbmdCbG9ja0hhbmRsZXIoImhlYWRpbmctMyIpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJxdW90ZSIsIG5ldyBRdW90ZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJjb2RlIiwgbmV3IENvZGVCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibGlzdCIsIG5ldyBMaXN0QmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoImltYWdlIiwgbmV3IEltYWdlQmxvY2tIYW5kbGVyKCkpOwogIEJsb2NrUmVnaXN0cnkucmVnaXN0ZXIoInlvdXR1YmUiLCBuZXcgWW91VHViZUJsb2NrSGFuZGxlcigpKTsKICBCbG9ja1JlZ2lzdHJ5LnJlZ2lzdGVyKCJhdHRhY2htZW50IiwgbmV3IEF0dGFjaG1lbnRCbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigibWFya2Rvd24iLCBuZXcgTWFya2Rvd25CbG9ja0hhbmRsZXIoKSk7CiAgQmxvY2tSZWdpc3RyeS5yZWdpc3RlcigiaHRtbCIsIG5ldyBIdG1sQmxvY2tIYW5kbGVyKCkpOwp9CnJlZ2lzdGVyQWxsQmxvY2tIYW5kbGVycygpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLm1vZGFsbWFuYWdlci5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgV3lzaXd5Z01vZGFsTWFuYWdlciA9IGNsYXNzIHsKICAvKioKICAgKiBTaG93cyBsYW5ndWFnZSBzZWxlY3Rpb24gbW9kYWwgZm9yIGNvZGUgYmxvY2tzCiAgICovCiAgc3RhdGljIGFzeW5jIHNob3dMYW5ndWFnZVNlbGVjdGlvbk1vZGFsKCkgewogICAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gewogICAgICBsZXQgc2VsZWN0ZWRMYW5ndWFnZSA9IG51bGw7CiAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICBoZWFkaW5nOiAiU2VsZWN0IFByb2dyYW1taW5nIExhbmd1YWdlIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxhbmd1YWdlLWNvbnRhaW5lciB7CiAgICAgICAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICAgICAgICBtYXgtaGVpZ2h0OiA0MDBweDsKICAgICAgICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1ncmlkIHsKICAgICAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDEyMHB4LCAxZnIpKTsKICAgICAgICAgICAgICBnYXA6IDhweDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGFuZ3VhZ2UtYnV0dG9uIHsKICAgICAgICAgICAgICBwYWRkaW5nOiAxMnB4IDhweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMzc0MTUxIil9OwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzM3NDE1MSIsICIjZTVlN2ViIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjlmYWZiIiwgIiMxZjI5MzciKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIC5sYW5ndWFnZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjNmNGY2IiwgIiMzNzQxNTEiKX07CiAgICAgICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgICAgICB9CiAgICAgICAgICA8L3N0eWxlPgogICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtY29udGFpbmVyIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ibGFuZ3VhZ2UtZ3JpZCI+CiAgICAgICAgICAgICAgJHt0aGlzLmdldExhbmd1YWdlcygpLm1hcCgobGFuZykgPT4gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgICAgICBjbGFzcz0ibGFuZ3VhZ2UtYnV0dG9uICR7c2VsZWN0ZWRMYW5ndWFnZSA9PT0gbGFuZy50b0xvd2VyQ2FzZSgpID8gInNlbGVjdGVkIiA6ICIifSIgCiAgICAgICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgICAgICBzZWxlY3RlZExhbmd1YWdlID0gbGFuZy50b0xvd2VyQ2FzZSgpOwogICAgICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgfQogICAgICAgICAgcmVzb2x2ZTIoc2VsZWN0ZWRMYW5ndWFnZSk7CiAgICAgICAgfX0iPgogICAgICAgICAgICAgICAgICAke2xhbmd9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgLAogICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICB7CiAgICAgICAgICAgIG5hbWU6ICJDYW5jZWwiLAogICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgICAgICByZXNvbHZlMihudWxsKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIF0KICAgICAgfSk7CiAgICB9KTsKICB9CiAgLyoqCiAgICogU2hvd3MgYmxvY2sgc2V0dGluZ3MgbW9kYWwKICAgKi8KICBzdGF0aWMgYXN5bmMgc2hvd0Jsb2NrU2V0dGluZ3NNb2RhbChibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGNvbnRlbnQzID0gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAuc2V0dGluZ3MtY29udGFpbmVyIHsKICAgICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uIHsKICAgICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgICAgfQogICAgICAgIC5zZXR0aW5ncy1zZWN0aW9uOmxhc3QtY2hpbGQgewogICAgICAgICAgbWFyZ2luLWJvdHRvbTogMDsKICAgICAgICB9CiAgICAgICAgLnNldHRpbmdzLWxhYmVsIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2YjcyODAiLCAiIzljYTNhZiIpfTsKICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wNWVtOwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1ncmlkIHsKICAgICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IHJlcGVhdChhdXRvLWZpbGwsIG1pbm1heCgxNjBweCwgMWZyKSk7CiAgICAgICAgICBnYXA6IDhweDsKICAgICAgICB9CiAgICAgICAgLmJsb2NrLXR5cGUtYnV0dG9uIHsKICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzNzQxNTEiKX07CiAgICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICAgIGdhcDogOHB4OwogICAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5ibG9jay10eXBlLWJ1dHRvbjpob3ZlciB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMWYyOTM3Iil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNGI1NTYzIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1idXR0b24uc2VsZWN0ZWQgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmM2Y0ZjYiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM5Y2EzYWYiLCAiIzZiNzI4MCIpfTsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzExMTgyNyIsICIjZjlmYWZiIil9OwogICAgICAgIH0KICAgICAgICAuYmxvY2stdHlwZS1pY29uIHsKICAgICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgICB3aWR0aDogMjBweDsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgICAgb3BhY2l0eTogMC43OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtY29udGFpbmVyIj4KICAgICAgICAke3RoaXMuZ2V0QmxvY2tUeXBlU2VsZWN0b3IoYmxvY2ssIG9uVXBkYXRlKX0KICAgICAgICAke2Jsb2NrLnR5cGUgPT09ICJjb2RlIiA/IHRoaXMuZ2V0Q29kZUJsb2NrU2V0dGluZ3MoYmxvY2ssIG9uVXBkYXRlKSA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICBEZWVzTW9kYWwuY3JlYXRlQW5kU2hvdyh7CiAgICAgIGhlYWRpbmc6ICJCbG9jayBTZXR0aW5ncyIsCiAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICBtZW51T3B0aW9uczogWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEb25lIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKG1vZGFsKSA9PiB7CiAgICAgICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0KICAgIH0pOwogIH0KICAvKioKICAgKiBHZXRzIGNvZGUgYmxvY2sgc2V0dGluZ3MgY29udGVudAogICAqLwogIHN0YXRpYyBnZXRDb2RlQmxvY2tTZXR0aW5ncyhibG9jaywgb25VcGRhdGUpIHsKICAgIGNvbnN0IGN1cnJlbnRMYW5ndWFnZSA9IGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSB8fCAiamF2YXNjcmlwdCI7CiAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubGFuZ3VhZ2UtZ3JpZCB7CiAgICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTAwcHgsIDFmcikpOwogICAgICAgICAgZ2FwOiA2cHg7CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b24gewogICAgICAgICAgcGFkZGluZzogOHB4IDRweDsKICAgICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzM3NDE1MSIpfTsKICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzc0MTUxIiwgIiNlNWU3ZWIiKX07CiAgICAgICAgfQogICAgICAgIC5sYW5ndWFnZS1idXR0b246aG92ZXIgewogICAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzFmMjkzNyIpfTsKICAgICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNkMWQ1ZGIiLCAiIzRiNTU2MyIpfTsKICAgICAgICB9CiAgICAgICAgLmxhbmd1YWdlLWJ1dHRvbi5zZWxlY3RlZCB7CiAgICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2YzZjRmNiIsICIjMzc0MTUxIil9OwogICAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzljYTNhZiIsICIjNmI3MjgwIil9OwogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTExODI3IiwgIiNmOWZhZmIiKX07CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1zZWN0aW9uIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZXR0aW5ncy1sYWJlbCI+UHJvZ3JhbW1pbmcgTGFuZ3VhZ2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJsYW5ndWFnZS1ncmlkIj4KICAgICAgICAgICR7dGhpcy5nZXRMYW5ndWFnZXMoKS5tYXAoKGxhbmcpID0+IGIyYAogICAgICAgICAgICA8ZGl2IAogICAgICAgICAgICAgIGNsYXNzPSJsYW5ndWFnZS1idXR0b24gJHtjdXJyZW50TGFuZ3VhZ2UgPT09IGxhbmcudG9Mb3dlckNhc2UoKSA/ICJzZWxlY3RlZCIgOiAiIn0iIAogICAgICAgICAgICAgIEBjbGljaz0iJHsoKSA9PiB7CiAgICAgIGlmICghYmxvY2subWV0YWRhdGEpCiAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7fTsKICAgICAgYmxvY2subWV0YWRhdGEubGFuZ3VhZ2UgPSBsYW5nLnRvTG93ZXJDYXNlKCk7CiAgICAgIG9uVXBkYXRlKGJsb2NrKTsKICAgICAgY29uc3QgbW9kYWwgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCJkZWVzLW1vZGFsIik7CiAgICAgIGlmIChtb2RhbCAmJiB0eXBlb2YgbW9kYWwuZGVzdHJveSA9PT0gImZ1bmN0aW9uIikgewogICAgICAgIG1vZGFsLmRlc3Ryb3koKTsKICAgICAgfQogICAgfX0iCiAgICAgICAgICAgICAgZGF0YS1sYW5nPSIke2xhbmd9IgogICAgICAgICAgICA+JHtsYW5nfTwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgLyoqCiAgICogR2V0cyBhdmFpbGFibGUgcHJvZ3JhbW1pbmcgbGFuZ3VhZ2VzCiAgICovCiAgc3RhdGljIGdldExhbmd1YWdlcygpIHsKICAgIHJldHVybiBbLi4uUFJPR1JBTU1JTkdfTEFOR1VBR0VTXTsKICB9CiAgLyoqCiAgICogR2V0cyBibG9jayB0eXBlIHNlbGVjdG9yCiAgICovCiAgc3RhdGljIGdldEJsb2NrVHlwZVNlbGVjdG9yKGJsb2NrLCBvblVwZGF0ZSkgewogICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKS5maWx0ZXIoKGl0ZW0pID0+IGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKTsKICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3MtbGFiZWwiPkJsb2NrIFR5cGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJibG9jay10eXBlLWdyaWQiPgogICAgICAgICAgJHtibG9ja1R5cGVzLm1hcCgoaXRlbSkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYgCiAgICAgICAgICAgICAgY2xhc3M9ImJsb2NrLXR5cGUtYnV0dG9uICR7YmxvY2sudHlwZSA9PT0gaXRlbS50eXBlID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9IiR7YXN5bmMgKGUxMSkgPT4gewogICAgICBjb25zdCBidXR0b24gPSBlMTEuY3VycmVudFRhcmdldDsKICAgICAgY29uc3Qgb2xkVHlwZSA9IGJsb2NrLnR5cGU7CiAgICAgIGJsb2NrLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgIGlmIChvbGRUeXBlID09PSAiY29kZSIgJiYgYmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZTsKICAgICAgfSBlbHNlIGlmIChvbGRUeXBlID09PSAibGlzdCIgJiYgYmxvY2sudHlwZSAhPT0gImxpc3QiKSB7CiAgICAgICAgZGVsZXRlIGJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIgJiYgIWJsb2NrLm1ldGFkYXRhPy5saXN0VHlwZSkgewogICAgICAgIGJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAiY29kZSIgJiYgIWJsb2NrLm1ldGFkYXRhPy5sYW5ndWFnZSkgewogICAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgdGhpcy5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICAgIGlmIChsYW5ndWFnZSkgewogICAgICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlIH07CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGJsb2NrLnR5cGUgPSBvbGRUeXBlOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBvblVwZGF0ZShibG9jayk7CiAgICAgIGNvbnN0IG1vZGFsID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiZGVlcy1tb2RhbCIpOwogICAgICBpZiAobW9kYWwgJiYgdHlwZW9mIG1vZGFsLmRlc3Ryb3kgPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICBtb2RhbC5kZXN0cm95KCk7CiAgICAgIH0KICAgIH19IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9ImJsb2NrLXR5cGUtaWNvbiI+JHtpdGVtLmljb259PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuPiR7aXRlbS5sYWJlbH08L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgYCl9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuaW5wdXRoYW5kbGVyLmpzCnZhciBXeXNpd3lnSW5wdXRIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBzYXZlVGltZW91dCA9IG51bGw7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBpbnB1dCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGhhbmRsZUJsb2NrSW5wdXQoZTExLCBibG9jaykgewogICAgaWYgKHRoaXMuY29tcG9uZW50LmlzQ29tcG9zaW5nKQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgY29uc3QgdGV4dENvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICBjb25zdCBkZXRlY3RlZFR5cGUgPSB0aGlzLmRldGVjdEJsb2NrVHlwZUludGVudCh0ZXh0Q29udGVudCk7CiAgICBpZiAoZGV0ZWN0ZWRUeXBlICYmIGRldGVjdGVkVHlwZS50eXBlICE9PSBibG9jay50eXBlKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICB0aGlzLmhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KTsKICAgICAgcmV0dXJuOwogICAgfQogICAgdGhpcy5oYW5kbGVTbGFzaENvbW1hbmQodGV4dENvbnRlbnQsIHRhcmdldCk7CiAgICB0aGlzLnNjaGVkdWxlQXV0b1NhdmUoKTsKICB9CiAgLyoqCiAgICogVXBkYXRlcyBibG9jayBjb250ZW50IGJhc2VkIG9uIGl0cyB0eXBlCiAgICovCiAgdXBkYXRlQmxvY2tDb250ZW50KGJsb2NrLCB0YXJnZXQpIHsKICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGFyZ2V0LmNsb3Nlc3QoIi5ibG9jay13cmFwcGVyIik7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICBjb25zdCBuZXdDb250ZW50ID0gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICB9CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9CiAgICB9IGVsc2UgewogICAgICBpZiAoYmxvY2sudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgICAgY29uc3QgbGlzdEl0ZW1zID0gdGFyZ2V0LnF1ZXJ5U2VsZWN0b3JBbGwoImxpIik7CiAgICAgICAgYmxvY2suY29udGVudCA9IEFycmF5LmZyb20obGlzdEl0ZW1zKS5tYXAoKGxpMikgPT4gbGkyLmlubmVySFRNTCB8fCAiIikuam9pbigiXG4iKTsKICAgICAgICBjb25zdCBsaXN0RWxlbWVudCA9IHRhcmdldC5xdWVyeVNlbGVjdG9yKCJvbCwgdWwiKTsKICAgICAgICBpZiAobGlzdEVsZW1lbnQpIHsKICAgICAgICAgIGJsb2NrLm1ldGFkYXRhID0gewogICAgICAgICAgICBsaXN0VHlwZTogbGlzdEVsZW1lbnQudGFnTmFtZS50b0xvd2VyQ2FzZSgpID09PSAib2wiID8gIm9yZGVyZWQiIDogImJ1bGxldCIKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgIGJsb2NrLmNvbnRlbnQgPSB0YXJnZXQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgYmxvY2suY29udGVudCA9IHRhcmdldC5pbm5lckhUTUwgfHwgIiI7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogRGV0ZWN0cyBpZiB0aGUgdXNlciBpcyB0cnlpbmcgdG8gY3JlYXRlIGEgc3BlY2lmaWMgYmxvY2sgdHlwZQogICAqLwogIGRldGVjdEJsb2NrVHlwZUludGVudChjb250ZW50MykgewogICAgY29uc3QgaGVhZGluZ1Jlc3VsdCA9IFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tIZWFkaW5nU2hvcnRjdXQoY29udGVudDMpOwogICAgaWYgKGhlYWRpbmdSZXN1bHQpIHsKICAgICAgcmV0dXJuIGhlYWRpbmdSZXN1bHQ7CiAgICB9CiAgICBjb25zdCBsaXN0UmVzdWx0ID0gV3lzaXd5Z1Nob3J0Y3V0cy5jaGVja0xpc3RTaG9ydGN1dChjb250ZW50Myk7CiAgICBpZiAobGlzdFJlc3VsdCkgewogICAgICByZXR1cm4gbGlzdFJlc3VsdDsKICAgIH0KICAgIGlmIChXeXNpd3lnU2hvcnRjdXRzLmNoZWNrUXVvdGVTaG9ydGN1dChjb250ZW50MykpIHsKICAgICAgcmV0dXJuIHsgdHlwZTogInF1b3RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tDb2RlU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJjb2RlIiB9OwogICAgfQogICAgaWYgKFd5c2l3eWdTaG9ydGN1dHMuY2hlY2tEaXZpZGVyU2hvcnRjdXQoY29udGVudDMpKSB7CiAgICAgIHJldHVybiB7IHR5cGU6ICJkaXZpZGVyIiB9OwogICAgfQogICAgcmV0dXJuIG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgYmxvY2sgdHlwZSB0cmFuc2Zvcm1hdGlvbgogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrVHJhbnNmb3JtYXRpb24oYmxvY2ssIGRldGVjdGVkVHlwZSwgdGFyZ2V0KSB7CiAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImxpc3QiKSB7CiAgICAgIGJsb2NrLnR5cGUgPSAibGlzdCI7CiAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgYmxvY2subWV0YWRhdGEgPSB7IGxpc3RUeXBlOiBkZXRlY3RlZFR5cGUubGlzdFR5cGUgfTsKICAgICAgY29uc3QgbGlzdFRhZyA9IGRldGVjdGVkVHlwZS5saXN0VHlwZSA9PT0gIm9yZGVyZWQiID8gIm9sIiA6ICJ1bCI7CiAgICAgIHRhcmdldC5pbm5lckhUTUwgPSBgPCR7bGlzdFRhZ30+PGxpPjwvbGk+PC8ke2xpc3RUYWd9PmA7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrLmlkKTsKICAgICAgfQogICAgICBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgICBXeXNpd3lnQmxvY2tzLmZvY3VzTGlzdEl0ZW0odGFyZ2V0KTsKICAgICAgfSwgMCk7CiAgICB9IGVsc2UgaWYgKGRldGVjdGVkVHlwZS50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgYmxvY2sudHlwZSA9ICJkaXZpZGVyIjsKICAgICAgYmxvY2suY29udGVudCA9ICIgIjsKICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICB9CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgfSBlbHNlIGlmIChkZXRlY3RlZFR5cGUudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGNvbnN0IGxhbmd1YWdlID0gYXdhaXQgV3lzaXd5Z01vZGFsTWFuYWdlci5zaG93TGFuZ3VhZ2VTZWxlY3Rpb25Nb2RhbCgpOwogICAgICBpZiAobGFuZ3VhZ2UpIHsKICAgICAgICBibG9jay50eXBlID0gImNvZGUiOwogICAgICAgIGJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBibG9jay5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2UgfTsKICAgICAgICB0YXJnZXQudGV4dENvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgIGlmICh0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmKSB7CiAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVCbG9ja0VsZW1lbnQoYmxvY2suaWQpOwogICAgICAgIH0KICAgICAgICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2soYmxvY2suaWQsICJzdGFydCIpOwogICAgICAgIH0sIDUwKTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgYmxvY2sudHlwZSA9IGRldGVjdGVkVHlwZS50eXBlOwogICAgICBibG9jay5jb250ZW50ID0gIiI7CiAgICAgIHRhcmdldC50ZXh0Q29udGVudCA9ICIiOwogICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCk7CiAgICAgIH0KICAgICAgc2V0VGltZW91dChhc3luYyAoKSA9PiB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhibG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0sIDUwKTsKICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBzbGFzaCBjb21tYW5kIGRldGVjdGlvbiBhbmQgbWVudSBkaXNwbGF5CiAgICovCiAgaGFuZGxlU2xhc2hDb21tYW5kKHRleHRDb250ZW50LCB0YXJnZXQpIHsKICAgIGNvbnN0IHNsYXNoTWVudSA9IHRoaXMuY29tcG9uZW50LnNsYXNoTWVudTsKICAgIGNvbnN0IGlzU2xhc2hNZW51VmlzaWJsZSA9IHNsYXNoTWVudSAmJiBzbGFzaE1lbnUudmlzaWJsZTsKICAgIGlmICh0ZXh0Q29udGVudCA9PT0gIi8iIHx8IHRleHRDb250ZW50LnN0YXJ0c1dpdGgoIi8iKSAmJiBpc1NsYXNoTWVudVZpc2libGUpIHsKICAgICAgaWYgKCFpc1NsYXNoTWVudVZpc2libGUgJiYgdGV4dENvbnRlbnQgPT09ICIvIikgewogICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldENhcmV0Q29vcmRpbmF0ZXModGFyZ2V0KTsKICAgICAgICBzbGFzaE1lbnUuc2hvdyh7IHg6IHJlY3QubGVmdCwgeTogcmVjdC5ib3R0b20gKyA0IH0sICh0eXBlNSkgPT4gewogICAgICAgICAgdGhpcy5jb21wb25lbnQuaW5zZXJ0QmxvY2sodHlwZTUpOwogICAgICAgIH0pOwogICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gdGFyZ2V0KSB7CiAgICAgICAgICAgIHRhcmdldC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIGlmIChzbGFzaE1lbnUpIHsKICAgICAgICBzbGFzaE1lbnUudXBkYXRlRmlsdGVyKHRleHRDb250ZW50LnNsaWNlKDEpKTsKICAgICAgfQogICAgfSBlbHNlIGlmICghdGV4dENvbnRlbnQuc3RhcnRzV2l0aCgiLyIpKSB7CiAgICAgIHRoaXMuY29tcG9uZW50LmNsb3NlU2xhc2hNZW51KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEdldHMgdGhlIGNvb3JkaW5hdGVzIG9mIHRoZSBjYXJldC9jdXJzb3IKICAgKi8KICBnZXRDYXJldENvb3JkaW5hdGVzKGVsZW1lbnQ0KSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgaWYgKHJlY3Qud2lkdGggPiAwIHx8IHJlY3QuaGVpZ2h0ID4gMCkgewogICAgICAgIHJldHVybiByZWN0OwogICAgICB9CiAgICB9CiAgICByZXR1cm4gZWxlbWVudDQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgfQogIC8qKgogICAqIFNjaGVkdWxlcyBhdXRvLXNhdmUgYWZ0ZXIgYSBkZWxheQogICAqLwogIHNjaGVkdWxlQXV0b1NhdmUoKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51ICYmIHRoaXMuY29tcG9uZW50LnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMuc2F2ZVRpbWVvdXQgPSBzZXRUaW1lb3V0KCgpID0+IHsKICAgICAgdGhpcy5zeW5jQWxsQmxvY2tDb250ZW50KCk7CiAgICAgIHRoaXMuY29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICB9LCAyZTMpOwogIH0KICAvKioKICAgKiBTeW5jcyBjb250ZW50IGZyb20gYWxsIGJsb2NrIERPTXMgdG8gdGhlIGRhdGEgbW9kZWwKICAgKi8KICBzeW5jQWxsQmxvY2tDb250ZW50KCkgewogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyRWxlbWVudD8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgbmV3Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICBpZiAoYmxvY2suY29udGVudCAhPT0gbmV3Q29udGVudCkgewogICAgICAgICAgYmxvY2suY29udGVudCA9IG5ld0NvbnRlbnQ7CiAgICAgICAgfQogICAgICB9CiAgICB9KTsKICB9CiAgLyoqCiAgICogQ2xlYW5zIHVwIHJlc291cmNlcwogICAqLwogIGRlc3Ryb3koKSB7CiAgICBpZiAodGhpcy5zYXZlVGltZW91dCkgewogICAgICBjbGVhclRpbWVvdXQodGhpcy5zYXZlVGltZW91dCk7CiAgICB9CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmtleWJvYXJkaGFuZGxlci5qcwp2YXIgV3lzaXd5Z0tleWJvYXJkSGFuZGxlciA9IGNsYXNzIHsKICBjb21wb25lbnQ7CiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBrZXlib2FyZCBldmVudHMgZm9yIGJsb2NrcwogICAqLwogIGFzeW5jIGhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSB7CiAgICBpZiAodGhpcy5jb21wb25lbnQuc2xhc2hNZW51LnZpc2libGUgJiYgdGhpcy5pc1NsYXNoTWVudUtleShlMTEua2V5KSkgewogICAgICB0aGlzLmNvbXBvbmVudC5oYW5kbGVTbGFzaE1lbnVLZXlib2FyZChlMTEpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAodGhpcy5oYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkpIHsKICAgICAgcmV0dXJuOwogICAgfQogICAgc3dpdGNoIChlMTEua2V5KSB7CiAgICAgIGNhc2UgIlRhYiI6CiAgICAgICAgdGhpcy5oYW5kbGVUYWIoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkVudGVyIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVyKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJCYWNrc3BhY2UiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJEZWxldGUiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUFycm93VXAoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0Rvd24oZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93TGVmdCI6CiAgICAgICAgYXdhaXQgdGhpcy5oYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jayk7CiAgICAgICAgYnJlYWs7CiAgICAgIGNhc2UgIkFycm93UmlnaHQiOgogICAgICAgIGF3YWl0IHRoaXMuaGFuZGxlQXJyb3dSaWdodChlMTEsIGJsb2NrKTsKICAgICAgICBicmVhazsKICAgIH0KICB9CiAgLyoqCiAgICogQ2hlY2tzIGlmIGtleSBpcyBmb3Igc2xhc2ggbWVudSBuYXZpZ2F0aW9uCiAgICovCiAgaXNTbGFzaE1lbnVLZXkoa2V5MikgewogICAgcmV0dXJuIFsiQXJyb3dEb3duIiwgIkFycm93VXAiLCAiRW50ZXIiLCAiRXNjYXBlIl0uaW5jbHVkZXMoa2V5Mik7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZm9ybWF0dGluZyBrZXlib2FyZCBzaG9ydGN1dHMKICAgKi8KICBoYW5kbGVGb3JtYXR0aW5nU2hvcnRjdXRzKGUxMSkgewogICAgaWYgKCEoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpKQogICAgICByZXR1cm4gZmFsc2U7CiAgICBzd2l0Y2ggKGUxMS5rZXkudG9Mb3dlckNhc2UoKSkgewogICAgICBjYXNlICJiIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJib2xkIikpOwogICAgICAgIHJldHVybiB0cnVlOwogICAgICBjYXNlICJpIjoKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBQcm9taXNlLnJlc29sdmUoKS50aGVuKCgpID0+IHRoaXMuY29tcG9uZW50LmFwcGx5Rm9ybWF0KCJpdGFsaWMiKSk7CiAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgIGNhc2UgInUiOgogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gdGhpcy5jb21wb25lbnQuYXBwbHlGb3JtYXQoInVuZGVybGluZSIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgICAgY2FzZSAiayI6CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB0aGlzLmNvbXBvbmVudC5hcHBseUZvcm1hdCgibGluayIpKTsKICAgICAgICByZXR1cm4gdHJ1ZTsKICAgIH0KICAgIHJldHVybiBmYWxzZTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBUYWIga2V5CiAgICovCiAgaGFuZGxlVGFiKGUxMSwgYmxvY2spIHsKICAgIGlmIChibG9jay50eXBlID09PSAiY29kZSIpIHsKICAgICAgcmV0dXJuOwogICAgfSBlbHNlIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgRW50ZXIga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRW50ZXIoZTExLCBibG9jaykgewogICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgaWYgKG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMoYmxvY2sudHlwZSkpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoYmxvY2sudHlwZSA9PT0gImNvZGUiKSB7CiAgICAgIGlmIChlMTEuc2hpZnRLZXkpIHsKICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGlmICghZTExLnNoaWZ0S2V5KSB7CiAgICAgIGlmIChibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICBhd2FpdCB0aGlzLmhhbmRsZUVudGVySW5MaXN0KGUxMSwgYmxvY2spOwogICAgICB9IGVsc2UgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiBibG9ja0NvbXBvbmVudC5nZXRTcGxpdENvbnRlbnQpIHsKICAgICAgICAgIGNvbnN0IHNwbGl0Q29udGVudCA9IGJsb2NrQ29tcG9uZW50LmdldFNwbGl0Q29udGVudCgpOwogICAgICAgICAgaWYgKHNwbGl0Q29udGVudCkgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudC5zZXRDb250ZW50KHNwbGl0Q29udGVudC5iZWZvcmUpOwogICAgICAgICAgICBibG9jay5jb250ZW50ID0gc3BsaXRDb250ZW50LmJlZm9yZTsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygicGFyYWdyYXBoIiwgc3BsaXRDb250ZW50LmFmdGVyKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuaW5zZXJ0QmxvY2tBZnRlcihibG9jaywgbmV3QmxvY2spOwogICAgICAgICAgICB0aGlzLmNvbXBvbmVudC51cGRhdGVWYWx1ZSgpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgY29uc3QgbmV3QmxvY2sgPSBibG9ja09wcy5jcmVhdGVCbG9jaygpOwogICAgICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgICAgICB9CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICAgIGF3YWl0IGJsb2NrT3BzLmluc2VydEJsb2NrQWZ0ZXIoYmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBFbnRlciBrZXkgaW4gbGlzdCBibG9ja3MKICAgKi8KICBhc3luYyBoYW5kbGVFbnRlckluTGlzdChlMTEsIGJsb2NrKSB7CiAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICBpZiAoc2VsZWN0aW9uICYmIHNlbGVjdGlvbi5yYW5nZUNvdW50ID4gMCkgewogICAgICBjb25zdCByYW5nZTIgPSBzZWxlY3Rpb24uZ2V0UmFuZ2VBdCgwKTsKICAgICAgY29uc3QgY3VycmVudExpID0gcmFuZ2UyLnN0YXJ0Q29udGFpbmVyLnBhcmVudEVsZW1lbnQ/LmNsb3Nlc3QoImxpIik7CiAgICAgIGlmIChjdXJyZW50TGkgJiYgY3VycmVudExpLnRleHRDb250ZW50ID09PSAiIikgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gYmxvY2tPcHMuY3JlYXRlQmxvY2soKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5pbnNlcnRCbG9ja0FmdGVyKGJsb2NrLCBuZXdCbG9jayk7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBCYWNrc3BhY2Uga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlQmFja3NwYWNlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2sgJiYgcHJldkJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImltYWdlIikgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCAiZW5kIik7CiAgICAgIH0gZWxzZSBpZiAobmV4dEJsb2NrICYmIG5leHRCbG9jay50eXBlICE9PSAiZGl2aWRlciIgJiYgbmV4dEJsb2NrLnR5cGUgIT09ICJpbWFnZSIpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgIGNvbnN0IGFjdHVhbENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogdGFyZ2V0LnRleHRDb250ZW50OwogICAgaWYgKGN1cnNvclBvcyA9PT0gMCkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBpZiAobm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpKSB7CiAgICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgIT09ICJjb2RlIikgewogICAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKGJsb2NrLnR5cGUgPT09ICJjb2RlIiAmJiBwcmV2QmxvY2sudHlwZSAhPT0gImNvZGUiKSB7CiAgICAgICAgICBjb25zdCBhY3R1YWxDb250ZW50MiA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQgPyBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgOiBibG9jay5jb250ZW50OwogICAgICAgICAgaWYgKGFjdHVhbENvbnRlbnQyID09PSAiIiB8fCBhY3R1YWxDb250ZW50Mi50cmltKCkgPT09ICIiKSB7CiAgICAgICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcHJldkJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3ByZXZCbG9jay5pZH0iXWApOwogICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZCbG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGNvbnN0IHByZXZDb250ZW50ID0gcHJldkJsb2NrQ29tcG9uZW50Py5nZXRDb250ZW50KCkgfHwgcHJldkJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCkgfHwgYmxvY2suY29udGVudCB8fCAiIjsKICAgICAgICBsZXQgbWVyZ2VkQ29udGVudCA9ICIiOwogICAgICAgIGlmIChwcmV2QmxvY2sudHlwZSA9PT0gImNvZGUiICYmIGJsb2NrLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIlxuIiA6ICIiKSArIGN1cnJlbnRDb250ZW50OwogICAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrLnR5cGUgPT09ICJsaXN0IiAmJiBibG9jay50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgIG1lcmdlZENvbnRlbnQgPSBwcmV2Q29udGVudCArIChwcmV2Q29udGVudCAmJiBjdXJyZW50Q29udGVudCA/ICJcbiIgOiAiIikgKyBjdXJyZW50Q29udGVudDsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgbWVyZ2VkQ29udGVudCA9IHByZXZDb250ZW50ICsgKHByZXZDb250ZW50ICYmIGN1cnJlbnRDb250ZW50ID8gIiAiIDogIiIpICsgY3VycmVudENvbnRlbnQ7CiAgICAgICAgfQogICAgICAgIGNvbnN0IG1lcmdlUG9pbnQgPSBwcmV2Q29udGVudC5sZW5ndGg7CiAgICAgICAgYmxvY2tPcHMudXBkYXRlQmxvY2tDb250ZW50KHByZXZCbG9jay5pZCwgbWVyZ2VkQ29udGVudCk7CiAgICAgICAgaWYgKHByZXZCbG9ja0NvbXBvbmVudCkgewogICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQobWVyZ2VkQ29udGVudCk7CiAgICAgICAgfQogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbWVyZ2VQb2ludCk7CiAgICAgIH0KICAgIH0gZWxzZSBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA+IDEpIHsKICAgICAgY29uc3QgY3VycmVudENvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50ID8gYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpIDogYmxvY2suY29udGVudDsKICAgICAgaWYgKGN1cnJlbnRDb250ZW50ID09PSAiIiB8fCBjdXJyZW50Q29udGVudC50cmltKCkgPT09ICIiKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgICAgYmxvY2tPcHMucmVtb3ZlQmxvY2soYmxvY2suaWQpOwogICAgICAgICAgaWYgKHByZXZCbG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsICJlbmQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBEZWxldGUga2V5CiAgICovCiAgYXN5bmMgaGFuZGxlRGVsZXRlKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAodGhpcy5jb21wb25lbnQuYmxvY2tzLmxlbmd0aCA9PT0gMSkgewogICAgICAgIHRoaXMuY29tcG9uZW50LnNhdmVUb0hpc3RvcnkoZmFsc2UpOwogICAgICAgIGJsb2NrT3BzLnJlbW92ZUJsb2NrKGJsb2NrLmlkKTsKICAgICAgICBjb25zdCBuZXdCbG9jayA9IGJsb2NrT3BzLmNyZWF0ZUJsb2NrKCJwYXJhZ3JhcGgiLCAiIik7CiAgICAgICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gW25ld0Jsb2NrXTsKICAgICAgICB0aGlzLmNvbXBvbmVudC5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXdCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5jb21wb25lbnQuc2F2ZVRvSGlzdG9yeShmYWxzZSk7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBibG9ja09wcy5yZW1vdmVCbG9jayhibG9jay5pZCk7CiAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICBpZiAobmV4dEJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAocHJldkJsb2NrICYmICFub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkpIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgImVuZCIpOwogICAgICB9IGVsc2UgaWYgKG5leHRCbG9jaykgewogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkKTsKICAgICAgfSBlbHNlIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCk7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgIGlmIChjdXJzb3JQb3MgPT09IHRleHRMZW5ndGgpIHsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgIGlmIChuZXh0QmxvY2sgJiYgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93VXAga2V5IC0gbmF2aWdhdGUgdG8gcHJldmlvdXMgYmxvY2sgaWYgYXQgYmVnaW5uaW5nIG9yIGZpcnN0IGxpbmUKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd1VwKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IHByZXZCbG9jayA9IGJsb2NrT3BzLmdldFByZXZpb3VzQmxvY2soYmxvY2suaWQpOwogICAgICBpZiAocHJldkJsb2NrKSB7CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhwcmV2QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGlmICh0aGlzLmlzT25GaXJzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykpIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhwcmV2QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAiZW5kIik7CiAgICAgIH0KICAgIH0KICB9CiAgLyoqCiAgICogSGFuZGxlcyBBcnJvd0Rvd24ga2V5IC0gbmF2aWdhdGUgdG8gbmV4dCBibG9jayBpZiBhdCBlbmQgb3IgbGFzdCBsaW5lCiAgICovCiAgYXN5bmMgaGFuZGxlQXJyb3dEb3duKGUxMSwgYmxvY2spIHsKICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICBpZiAobm9uRWRpdGFibGVUeXBlcy5pbmNsdWRlcyhibG9jay50eXBlKSkgewogICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgY29uc3QgYmxvY2tPcHMgPSB0aGlzLmNvbXBvbmVudC5ibG9ja09wZXJhdGlvbnM7CiAgICAgIGNvbnN0IG5leHRCbG9jayA9IGJsb2NrT3BzLmdldE5leHRCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChuZXh0QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKG5leHRCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMobmV4dEJsb2NrLnR5cGUpID8gdm9pZCAwIDogInN0YXJ0Iik7CiAgICAgIH0KICAgICAgcmV0dXJuOwogICAgfQogICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jb21wb25lbnQuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gYmxvY2tXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgIGlmICghYmxvY2tDb21wb25lbnQgfHwgIWJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHRhcmdldCA9IGJsb2NrLnR5cGUgPT09ICJjb2RlIiA/IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmNvZGUtZWRpdG9yIikgOiBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgaWYgKCF0YXJnZXQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IGJsb2NrQ29tcG9uZW50LmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgIGlmIChwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3QpCiAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50Q29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgaWYgKCFzZWxlY3Rpb25JbmZvIHx8ICFzZWxlY3Rpb25JbmZvLmNvbGxhcHNlZCkKICAgICAgcmV0dXJuOwogICAgaWYgKHRoaXMuaXNPbkxhc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgfQogIH0KICAvKioKICAgKiBIZWxwZXIgdG8gZ2V0IHRoZSBsYXN0IHRleHQgbm9kZSBpbiBhbiBlbGVtZW50CiAgICovCiAgZ2V0TGFzdFRleHROb2RlKGVsZW1lbnQ0KSB7CiAgICBpZiAoZWxlbWVudDQubm9kZVR5cGUgPT09IE5vZGUuVEVYVF9OT0RFKSB7CiAgICAgIHJldHVybiBlbGVtZW50NDsKICAgIH0KICAgIGZvciAobGV0IGkxMSA9IGVsZW1lbnQ0LmNoaWxkTm9kZXMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICAgIGNvbnN0IGxhc3RUZXh0ID0gdGhpcy5nZXRMYXN0VGV4dE5vZGUoZWxlbWVudDQuY2hpbGROb2Rlc1tpMTFdKTsKICAgICAgaWYgKGxhc3RUZXh0KQogICAgICAgIHJldHVybiBsYXN0VGV4dDsKICAgIH0KICAgIHJldHVybiBudWxsOwogIH0KICAvKioKICAgKiBIYW5kbGVzIEFycm93TGVmdCBrZXkgLSBuYXZpZ2F0ZSB0byBwcmV2aW91cyBibG9jayBpZiBhdCBiZWdpbm5pbmcKICAgKi8KICBhc3luYyBoYW5kbGVBcnJvd0xlZnQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgcHJldkJsb2NrID0gYmxvY2tPcHMuZ2V0UHJldmlvdXNCbG9jayhibG9jay5pZCk7CiAgICAgIGlmIChwcmV2QmxvY2spIHsKICAgICAgICBjb25zdCBub25FZGl0YWJsZVR5cGVzMiA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgICAgICBhd2FpdCBibG9ja09wcy5mb2N1c0Jsb2NrKHByZXZCbG9jay5pZCwgbm9uRWRpdGFibGVUeXBlczIuaW5jbHVkZXMocHJldkJsb2NrLnR5cGUpID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICAgIHJldHVybjsKICAgIH0KICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuY29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGJsb2NrV3JhcHBlcj8ucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICBpZiAoIWJsb2NrQ29tcG9uZW50IHx8ICFibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KQogICAgICByZXR1cm47CiAgICBjb25zdCB0YXJnZXQgPSBibG9jay50eXBlID09PSAiY29kZSIgPyBibG9ja0NvbXBvbmVudC5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5jb2RlLWVkaXRvciIpIDogYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgIGlmICghdGFyZ2V0KQogICAgICByZXR1cm47CiAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudC5jbG9zZXN0KCJkZWVzLWlucHV0LXd5c2l3eWciKTsKICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICBpZiAocGFyZW50Q29tcG9uZW50Py5zaGFkb3dSb290KQogICAgICBzaGFkb3dSb290cy5wdXNoKHBhcmVudENvbXBvbmVudC5zaGFkb3dSb290KTsKICAgIHNoYWRvd1Jvb3RzLnB1c2goYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgIGlmICghc2VsZWN0aW9uSW5mbyB8fCAhc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IGN1cnNvclBvcyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0Q3Vyc29yUG9zaXRpb25JbkVsZW1lbnQodGFyZ2V0LCAuLi5zaGFkb3dSb290cyk7CiAgICBpZiAoY3Vyc29yUG9zID09PSAwKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBwcmV2QmxvY2sgPSBibG9ja09wcy5nZXRQcmV2aW91c0Jsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKHByZXZCbG9jaykgewogICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGNvbnN0IHBvc2l0aW9uMyA9IG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKHByZXZCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJlbmQiOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2socHJldkJsb2NrLmlkLCBwb3NpdGlvbjMpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgQXJyb3dSaWdodCBrZXkgLSBuYXZpZ2F0ZSB0byBuZXh0IGJsb2NrIGlmIGF0IGVuZAogICAqLwogIGFzeW5jIGhhbmRsZUFycm93UmlnaHQoZTExLCBibG9jaykgewogICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlcyA9IFsiZGl2aWRlciIsICJpbWFnZSIsICJ5b3V0dWJlIiwgImF0dGFjaG1lbnQiXTsKICAgIGlmIChub25FZGl0YWJsZVR5cGVzLmluY2x1ZGVzKGJsb2NrLnR5cGUpKSB7CiAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBibG9ja09wcyA9IHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9uczsKICAgICAgY29uc3QgbmV4dEJsb2NrID0gYmxvY2tPcHMuZ2V0TmV4dEJsb2NrKGJsb2NrLmlkKTsKICAgICAgaWYgKG5leHRCbG9jaykgewogICAgICAgIGNvbnN0IG5vbkVkaXRhYmxlVHlwZXMyID0gWyJkaXZpZGVyIiwgImltYWdlIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdOwogICAgICAgIGF3YWl0IGJsb2NrT3BzLmZvY3VzQmxvY2sobmV4dEJsb2NrLmlkLCBub25FZGl0YWJsZVR5cGVzMi5pbmNsdWRlcyhuZXh0QmxvY2sudHlwZSkgPyB2b2lkIDAgOiAic3RhcnQiKTsKICAgICAgfQogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLmNvbXBvbmVudC5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9jay5pZH0iXWApOwogICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgaWYgKCFibG9ja0NvbXBvbmVudCB8fCAhYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgdGFyZ2V0ID0gYmxvY2sudHlwZSA9PT0gImNvZGUiID8gYmxvY2tDb21wb25lbnQuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuY29kZS1lZGl0b3IiKSA6IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICBpZiAoIXRhcmdldCkKICAgICAgcmV0dXJuOwogICAgY29uc3QgcGFyZW50Q29tcG9uZW50ID0gYmxvY2tDb21wb25lbnQuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICBjb25zdCBzaGFkb3dSb290cyA9IFtdOwogICAgaWYgKHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdCkKICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRDb21wb25lbnQuc2hhZG93Um9vdCk7CiAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgY29uc3Qgc2VsZWN0aW9uSW5mbyA9IFd5c2l3eWdTZWxlY3Rpb24uZ2V0U2VsZWN0aW9uSW5mbyguLi5zaGFkb3dSb290cyk7CiAgICBpZiAoIXNlbGVjdGlvbkluZm8gfHwgIXNlbGVjdGlvbkluZm8uY29sbGFwc2VkKQogICAgICByZXR1cm47CiAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgY29uc3QgdGV4dExlbmd0aCA9IHRhcmdldC50ZXh0Q29udGVudD8ubGVuZ3RoIHx8IDA7CiAgICBpZiAoY3Vyc29yUG9zID09PSB0ZXh0TGVuZ3RoKSB7CiAgICAgIGNvbnN0IGJsb2NrT3BzID0gdGhpcy5jb21wb25lbnQuYmxvY2tPcGVyYXRpb25zOwogICAgICBjb25zdCBuZXh0QmxvY2sgPSBibG9ja09wcy5nZXROZXh0QmxvY2soYmxvY2suaWQpOwogICAgICBpZiAobmV4dEJsb2NrKSB7CiAgICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgICAgY29uc3Qgbm9uRWRpdGFibGVUeXBlczIgPSBbImRpdmlkZXIiLCAiaW1hZ2UiLCAieW91dHViZSIsICJhdHRhY2htZW50Il07CiAgICAgICAgYXdhaXQgYmxvY2tPcHMuZm9jdXNCbG9jayhuZXh0QmxvY2suaWQsIG5vbkVkaXRhYmxlVHlwZXMyLmluY2x1ZGVzKG5leHRCbG9jay50eXBlKSA/IHZvaWQgMCA6ICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgc2xhc2ggbWVudSBrZXlib2FyZCBuYXZpZ2F0aW9uCiAgICogTm90ZTogVGhpcyBpcyBub3cgaGFuZGxlZCBieSB0aGUgY29tcG9uZW50IGRpcmVjdGx5CiAgICovCiAgLyoqCiAgICogQ2hlY2sgaWYgY3Vyc29yIGlzIG9uIHRoZSBmaXJzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uRmlyc3RMaW5lKHNlbGVjdGlvbkluZm8sIHRhcmdldCwgLi4uc2hhZG93Um9vdHMpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgY29uc3QgcmVjdCA9IHJhbmdlMi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgbGV0IGNvbnRhaW5lciA9IHJhbmdlMi5jb21tb25BbmNlc3RvckNvbnRhaW5lcjsKICAgICAgaWYgKGNvbnRhaW5lci5ub2RlVHlwZSA9PT0gTm9kZS5URVhUX05PREUpIHsKICAgICAgICBjb250YWluZXIgPSBjb250YWluZXIucGFyZW50RWxlbWVudDsKICAgICAgfQogICAgICBjb25zdCBjb250YWluZXJSZWN0ID0gY29udGFpbmVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBjb25zdCBpc05lYXJUb3AgPSByZWN0LnRvcCAtIGNvbnRhaW5lclJlY3QudG9wIDwgNTsKICAgICAgaWYgKGNvbnRhaW5lci50ZXh0Q29udGVudCAmJiAhY29udGFpbmVyLnRleHRDb250ZW50LmluY2x1ZGVzKCJcbiIpKSB7CiAgICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudChjb250YWluZXIsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgICByZXR1cm4gY3Vyc29yUG9zID09PSAwOwogICAgICB9CiAgICAgIHJldHVybiBpc05lYXJUb3A7CiAgICB9IGNhdGNoIChlMTEpIHsKICAgICAgY29uc29sZS53YXJuKCJFcnJvciBjaGVja2luZyBmaXJzdCBsaW5lOiIsIGUxMSk7CiAgICAgIGNvbnN0IGN1cnNvclBvcyA9IHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQ7CiAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IDA7CiAgICB9CiAgfQogIC8qKgogICAqIENoZWNrIGlmIGN1cnNvciBpcyBvbiB0aGUgbGFzdCBsaW5lIG9mIGEgYmxvY2sKICAgKi8KICBpc09uTGFzdExpbmUoc2VsZWN0aW9uSW5mbywgdGFyZ2V0LCAuLi5zaGFkb3dSb290cykgewogICAgdHJ5IHsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgY29udGFpbmVyID0gcmFuZ2UyLmNvbW1vbkFuY2VzdG9yQ29udGFpbmVyOwogICAgICBpZiAoY29udGFpbmVyLm5vZGVUeXBlID09PSBOb2RlLlRFWFRfTk9ERSkgewogICAgICAgIGNvbnRhaW5lciA9IGNvbnRhaW5lci5wYXJlbnRFbGVtZW50OwogICAgICB9CiAgICAgIGNvbnN0IGNvbnRhaW5lclJlY3QgPSBjb250YWluZXIuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGlzTmVhckJvdHRvbSA9IGNvbnRhaW5lclJlY3QuYm90dG9tIC0gcmVjdC5ib3R0b20gPCA1OwogICAgICBpZiAoY29udGFpbmVyLnRleHRDb250ZW50ICYmICFjb250YWluZXIudGV4dENvbnRlbnQuaW5jbHVkZXMoIlxuIikpIHsKICAgICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgICBjb25zdCBjdXJzb3JQb3MgPSBXeXNpd3lnU2VsZWN0aW9uLmdldEN1cnNvclBvc2l0aW9uSW5FbGVtZW50KHRhcmdldCwgLi4uc2hhZG93Um9vdHMpOwogICAgICAgIHJldHVybiBjdXJzb3JQb3MgPT09IHRleHRMZW5ndGg7CiAgICAgIH0KICAgICAgcmV0dXJuIGlzTmVhckJvdHRvbTsKICAgIH0gY2F0Y2ggKGUxMSkgewogICAgICBjb25zb2xlLndhcm4oIkVycm9yIGNoZWNraW5nIGxhc3QgbGluZToiLCBlMTEpOwogICAgICBjb25zdCB0ZXh0TGVuZ3RoID0gdGFyZ2V0LnRleHRDb250ZW50Py5sZW5ndGggfHwgMDsKICAgICAgY29uc3QgY3Vyc29yUG9zID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRDdXJzb3JQb3NpdGlvbkluRWxlbWVudCh0YXJnZXQsIC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgcmV0dXJuIGN1cnNvclBvcyA9PT0gdGV4dExlbmd0aDsKICAgIH0KICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvZGVlcy1pbnB1dC13eXNpd3lnL3d5c2l3eWcuZHJhZ2Ryb3BoYW5kbGVyLmpzCnZhciBXeXNpd3lnRHJhZ0Ryb3BIYW5kbGVyID0gY2xhc3MgewogIGNvbXBvbmVudDsKICBkcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICBkcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICBkcm9wSW5kaWNhdG9yID0gbnVsbDsKICBpbml0aWFsTW91c2VZID0gMDsKICBpbml0aWFsQmxvY2tZID0gMDsKICBkcmFnZ2VkQmxvY2tFbGVtZW50ID0gbnVsbDsKICBkcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSAwOwogIGRyYWdnZWRCbG9ja01hcmdpblRvcCA9IDA7CiAgbGFzdFVwZGF0ZVRpbWUgPSAwOwogIHVwZGF0ZVRocm90dGxlID0gODA7CiAgLy8gbWlsbGlzZWNvbmRzCiAgY29uc3RydWN0b3IoY29tcG9uZW50KSB7CiAgICB0aGlzLmNvbXBvbmVudCA9IGNvbXBvbmVudDsKICB9CiAgLyoqCiAgICogR2V0cyB0aGUgY3VycmVudCBkcmFnIHN0YXRlCiAgICovCiAgZ2V0IGRyYWdTdGF0ZSgpIHsKICAgIHJldHVybiB7CiAgICAgIGRyYWdnZWRCbG9ja0lkOiB0aGlzLmRyYWdnZWRCbG9ja0lkLAogICAgICBkcmFnT3ZlckJsb2NrSWQ6IHRoaXMuZHJhZ092ZXJCbG9ja0lkLAogICAgICBkcmFnT3ZlclBvc2l0aW9uOiB0aGlzLmRyYWdPdmVyUG9zaXRpb24KICAgIH07CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBzdGFydAogICAqLwogIGhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSB7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIpCiAgICAgIHJldHVybjsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBibG9jay5pZDsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZWZmZWN0QWxsb3dlZCA9ICJtb3ZlIjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuc2V0RGF0YSgidGV4dC9wbGFpbiIsIGJsb2NrLmlkKTsKICAgIGNvbnN0IGVtcHR5SW1nID0gbmV3IEltYWdlKCk7CiAgICBlbXB0eUltZy5zcmMgPSAiZGF0YTppbWFnZS9naWY7YmFzZTY0LFIwbEdPRGxoQVFBQkFJQUFBQVVFQkFBQUFDd0FBQUFBQVFBQkFBQUNBa1FCQURzPSI7CiAgICBlMTEuZGF0YVRyYW5zZmVyLnNldERyYWdJbWFnZShlbXB0eUltZywgMCwgMCk7CiAgICB0aGlzLmluaXRpYWxNb3VzZVkgPSBlMTEuY2xpZW50WTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudCA9IHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgcmVjdCA9IHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5pbml0aWFsQmxvY2tZID0gcmVjdC50b3A7CiAgICAgIGNvbnN0IGlubmVyQmxvY2sgPSB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChpbm5lckJsb2NrKSB7CiAgICAgICAgY29uc3QgaW5uZXJSZWN0ID0gaW5uZXJCbG9jay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCBjb21wdXRlZFN0eWxlID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoaW5uZXJCbG9jayk7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tNYXJnaW5Ub3AgPSBwYXJzZUludChjb21wdXRlZFN0eWxlLm1hcmdpblRvcCkgfHwgMDsKICAgICAgICB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQgPSBpbm5lclJlY3QuaGVpZ2h0OwogICAgICB9CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSGVpZ2h0ID0gcmVjdC5oZWlnaHQ7CiAgICAgIGNvbnNvbGUubG9nKCJEcmFnIG1lYXN1cmVtZW50czoiLCB7CiAgICAgICAgd3JhcHBlckhlaWdodDogcmVjdC5oZWlnaHQsCiAgICAgICAgbWFyZ2luVG9wOiB0aGlzLmRyYWdnZWRCbG9ja01hcmdpblRvcCwKICAgICAgICBkcm9wSW5kaWNhdG9ySGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0hlaWdodCwKICAgICAgICBjb250ZW50SGVpZ2h0OiB0aGlzLmRyYWdnZWRCbG9ja0NvbnRlbnRIZWlnaHQsCiAgICAgICAgYmxvY2tJZDogYmxvY2suaWQKICAgICAgfSk7CiAgICAgIHRoaXMuY3JlYXRlRHJvcEluZGljYXRvcigpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJkcmFnZW5kIiwgdGhpcy5oYW5kbGVHbG9iYWxEcmFnRW5kKTsKICAgIH0KICAgIHRoaXMuY29tcG9uZW50LmRyYWdnZWRCbG9ja0lkID0gdGhpcy5kcmFnZ2VkQmxvY2tJZDsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAodGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50LmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5hZGQoImRyYWdnaW5nIik7CiAgICAgIH0KICAgIH0sIDEwKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGVuZAogICAqLwogIGhhbmRsZURyYWdFbmQoKSB7CiAgICBjb25zdCBhbGxCbG9ja3MgPSB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICBhbGxCbG9ja3MuZm9yRWFjaCgoYmxvY2spID0+IHsKICAgICAgYmxvY2suY2xhc3NMaXN0LnJlbW92ZSgiZHJhZ2dpbmciLCAibW92ZS11cCIsICJtb3ZlLWRvd24iKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoInRyYW5zZm9ybSIpOwogICAgfSk7CiAgICBpZiAodGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZikgewogICAgICB0aGlzLmNvbXBvbmVudC5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICB9CiAgICB0aGlzLmRyYWdnZWRCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQgPSBudWxsOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQgPSAwOwogICAgdGhpcy5kcmFnZ2VkQmxvY2tDb250ZW50SGVpZ2h0ID0gMDsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrTWFyZ2luVG9wID0gMDsKICAgIHRoaXMuaW5pdGlhbEJsb2NrWSA9IDA7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnZ2VkQmxvY2tJZCA9IG51bGw7CiAgICB0aGlzLmNvbXBvbmVudC5kcmFnT3ZlckJsb2NrSWQgPSBudWxsOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJhZyBvdmVyCiAgICovCiAgaGFuZGxlRHJhZ092ZXIoZTExLCBibG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIWUxMS5kYXRhVHJhbnNmZXIgfHwgIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gYmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIGUxMS5kYXRhVHJhbnNmZXIuZHJvcEVmZmVjdCA9ICJtb3ZlIjsKICAgIGNvbnN0IHJlY3QgPSBlMTEuY3VycmVudFRhcmdldC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGNvbnN0IG1pZHBvaW50ID0gcmVjdC50b3AgKyByZWN0LmhlaWdodCAvIDI7CiAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gZTExLmNsaWVudFkgPCBtaWRwb2ludCA/ICJiZWZvcmUiIDogImFmdGVyIjsKICAgIHRoaXMuY29tcG9uZW50LmRyYWdPdmVyQmxvY2tJZCA9IHRoaXMuZHJhZ092ZXJCbG9ja0lkOwogICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IHRoaXMuZHJhZ092ZXJQb3NpdGlvbjsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBkcmFnIGxlYXZlCiAgICovCiAgaGFuZGxlRHJhZ0xlYXZlKGJsb2NrKSB7CiAgICBpZiAodGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrLmlkKSB7CiAgICAgIHRoaXMuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5kcmFnT3ZlclBvc2l0aW9uID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJCbG9ja0lkID0gbnVsbDsKICAgICAgdGhpcy5jb21wb25lbnQuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgfQogIC8qKgogICAqIEhhbmRsZXMgZHJvcAogICAqLwogIGhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jaykgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoIXRoaXMuZHJhZ2dlZEJsb2NrSWQgfHwgdGhpcy5kcmFnZ2VkQmxvY2tJZCA9PT0gdGFyZ2V0QmxvY2suaWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMuY29tcG9uZW50LmhhbmRsZURyb3AoZTExLCB0YXJnZXRCbG9jayk7CiAgfQogIC8qKgogICAqIENoZWNrcyBpZiBhIGJsb2NrIGlzIGJlaW5nIGRyYWdnZWQKICAgKi8KICBpc0RyYWdnaW5nKGJsb2NrSWQpIHsKICAgIHJldHVybiB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSBibG9ja0lkOwogIH0KICAvKioKICAgKiBDaGVja3MgaWYgYSBibG9jayBoYXMgZHJhZyBvdmVyIHN0YXRlCiAgICovCiAgaXNEcmFnT3ZlcihibG9ja0lkKSB7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlckJsb2NrSWQgPT09IGJsb2NrSWQ7CiAgfQogIC8qKgogICAqIEdldHMgZHJhZyBvdmVyIENTUyBjbGFzc2VzIGZvciBhIGJsb2NrCiAgICovCiAgZ2V0RHJhZ092ZXJDbGFzc2VzKGJsb2NrSWQpIHsKICAgIGlmICghdGhpcy5pc0RyYWdPdmVyKGJsb2NrSWQpKQogICAgICByZXR1cm4gIiI7CiAgICByZXR1cm4gdGhpcy5kcmFnT3ZlclBvc2l0aW9uID09PSAiYmVmb3JlIiA/ICJkcmFnLW92ZXItYmVmb3JlIiA6ICJkcmFnLW92ZXItYWZ0ZXIiOwogIH0KICAvKioKICAgKiBDcmVhdGVzIHRoZSBkcm9wIGluZGljYXRvciBlbGVtZW50CiAgICovCiAgY3JlYXRlRHJvcEluZGljYXRvcigpIHsKICAgIHRoaXMuZHJvcEluZGljYXRvciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLmNsYXNzTmFtZSA9ICJkcm9wLWluZGljYXRvciI7CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKICAgIHRoaXMuY29tcG9uZW50LmVkaXRvckNvbnRlbnRSZWYuYXBwZW5kQ2hpbGQodGhpcy5kcm9wSW5kaWNhdG9yKTsKICB9CiAgLyoqCiAgICogSGFuZGxlcyBnbG9iYWwgZHJhZ292ZXIgdG8gdXBkYXRlIGRyYWdnZWQgYmxvY2sgcG9zaXRpb24gYW5kIG1vdmUgb3RoZXIgYmxvY2tzCiAgICovCiAgaGFuZGxlR2xvYmFsRHJhZ092ZXIgPSAoZTExKSA9PiB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICBjb25zdCBkZWx0YVkgPSBlMTEuY2xpZW50WSAtIHRoaXMuaW5pdGlhbE1vdXNlWTsKICAgIHRoaXMuZHJhZ2dlZEJsb2NrRWxlbWVudC5zdHlsZS50cmFuc2Zvcm0gPSBgdHJhbnNsYXRlWSgke2RlbHRhWX1weClgOwogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFVwZGF0ZVRpbWUgPCB0aGlzLnVwZGF0ZVRocm90dGxlKSB7CiAgICAgIHJldHVybjsKICAgIH0KICAgIHRoaXMubGFzdFVwZGF0ZVRpbWUgPSBub3cyOwogICAgdGhpcy51cGRhdGVCbG9ja1Bvc2l0aW9ucyhlMTEuY2xpZW50WSk7CiAgfTsKICAvKioKICAgKiBVcGRhdGVzIGJsb2NrIHBvc2l0aW9ucyBiYXNlZCBvbiBjdXJzb3IgcG9zaXRpb24KICAgKi8KICB1cGRhdGVCbG9ja1Bvc2l0aW9ucyhtb3VzZVkpIHsKICAgIGNvbnN0IGJsb2NrcyA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IGJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSkKICAgICAgcmV0dXJuOwogICAgYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgIGlmIChibG9jay5nZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiKSAhPT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCkgewogICAgICAgIGJsb2NrLmNsYXNzTGlzdC5yZW1vdmUoIm1vdmUtdXAiLCAibW92ZS1kb3duIik7CiAgICAgICAgYmxvY2suc3R5bGUucmVtb3ZlUHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiKTsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbmV3SW5kZXggPSBibG9ja3MubGVuZ3RoOwogICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgYmxvY2tzLmxlbmd0aDsgaTExKyspIHsKICAgICAgaWYgKGkxMSA9PT0gZHJhZ2dlZEluZGV4KQogICAgICAgIGNvbnRpbnVlOwogICAgICBjb25zdCBibG9jayA9IGJsb2Nrc1tpMTFdOwogICAgICBjb25zdCByZWN0ID0gYmxvY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGJsb2NrVG9wID0gcmVjdC50b3A7CiAgICAgIGlmIChtb3VzZVkgPCBibG9ja1RvcCArIHJlY3QuaGVpZ2h0ICogMC41KSB7CiAgICAgICAgbmV3SW5kZXggPSBpMTE7CiAgICAgICAgYnJlYWs7CiAgICAgIH0KICAgIH0KICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgaWYgKGRyYWdnZWRJbmRleCA8IG5ld0luZGV4KSB7CiAgICAgICAgaWYgKGkxMSA+IGRyYWdnZWRJbmRleCAmJiBpMTEgPCBuZXdJbmRleCkgewogICAgICAgICAgYmxvY2suY2xhc3NMaXN0LmFkZCgibW92ZS11cCIpOwogICAgICAgICAgYmxvY2suc3R5bGUuc2V0UHJvcGVydHkoIi0tZHJhZy1vZmZzZXQiLCBgJHt0aGlzLmRyYWdnZWRCbG9ja0hlaWdodH1weGApOwogICAgICAgIH0KICAgICAgfSBlbHNlIGlmIChkcmFnZ2VkSW5kZXggPiBuZXdJbmRleCkgewogICAgICAgIGlmIChpMTEgPj0gbmV3SW5kZXggJiYgaTExIDwgZHJhZ2dlZEluZGV4KSB7CiAgICAgICAgICBibG9jay5jbGFzc0xpc3QuYWRkKCJtb3ZlLWRvd24iKTsKICAgICAgICAgIGJsb2NrLnN0eWxlLnNldFByb3BlcnR5KCItLWRyYWctb2Zmc2V0IiwgYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMudXBkYXRlRHJvcEluZGljYXRvcihibG9ja3MsIG5ld0luZGV4LCBkcmFnZ2VkSW5kZXgpOwogIH0KICAvKioKICAgKiBVcGRhdGVzIHRoZSBkcm9wIGluZGljYXRvciBwb3NpdGlvbgogICAqLwogIHVwZGF0ZURyb3BJbmRpY2F0b3IoYmxvY2tzLCB0YXJnZXRJbmRleCwgZHJhZ2dlZEluZGV4KSB7CiAgICBpZiAoIXRoaXMuZHJvcEluZGljYXRvciB8fCAhdGhpcy5kcmFnZ2VkQmxvY2tFbGVtZW50KQogICAgICByZXR1cm47CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuZGlzcGxheSA9ICJibG9jayI7CiAgICBjb25zdCBjb250YWluZXJSZWN0ID0gdGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgIGxldCB0b3BQb3NpdGlvbiA9IDA7CiAgICBjb25zdCB2aXN1YWxCbG9ja3MgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGJsb2Nrcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgIGlmIChpMTEgPT09IGRyYWdnZWRJbmRleCkKICAgICAgICBjb250aW51ZTsKICAgICAgY29uc3QgYmxvY2sgPSBibG9ja3NbaTExXTsKICAgICAgY29uc3QgcmVjdCA9IGJsb2NrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICBsZXQgdG9wID0gcmVjdC50b3AgLSBjb250YWluZXJSZWN0LnRvcDsKICAgICAgbGV0IGJvdHRvbSA9IHJlY3QuYm90dG9tIC0gY29udGFpbmVyUmVjdC50b3A7CiAgICAgIGNvbnN0IHRyYW5zZm9ybTIgPSB3aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShibG9jaykudHJhbnNmb3JtOwogICAgICBpZiAodHJhbnNmb3JtMiAmJiB0cmFuc2Zvcm0yICE9PSAibm9uZSIpIHsKICAgICAgICBjb25zdCBtYXRyaXggPSBuZXcgRE9NTWF0cml4KHRyYW5zZm9ybTIpOwogICAgICAgIGNvbnN0IHlPZmZzZXQgPSBtYXRyaXgubTQyOwogICAgICAgIHRvcCArPSB5T2Zmc2V0OwogICAgICAgIGJvdHRvbSArPSB5T2Zmc2V0OwogICAgICB9CiAgICAgIHZpc3VhbEJsb2Nrcy5wdXNoKHsgaW5kZXg6IGkxMSwgdG9wLCBib3R0b20gfSk7CiAgICB9CiAgICB2aXN1YWxCbG9ja3Muc29ydCgoYTUsIGI1KSA9PiBhNS50b3AgLSBiNS50b3ApOwogICAgbGV0IGFkanVzdGVkVGFyZ2V0SW5kZXggPSB0YXJnZXRJbmRleDsKICAgIGlmICh0YXJnZXRJbmRleCA+IGRyYWdnZWRJbmRleCkgewogICAgICBhZGp1c3RlZFRhcmdldEluZGV4LS07CiAgICB9CiAgICBsZXQgYmxvY2tNYXJnaW4gPSAxNjsKICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0VsZW1lbnQpIHsKICAgICAgY29uc3QgZHJhZ2dlZEJsb2NrID0gdGhpcy5jb21wb25lbnQuYmxvY2tzLmZpbmQoKGI1KSA9PiBiNS5pZCA9PT0gdGhpcy5kcmFnZ2VkQmxvY2tJZCk7CiAgICAgIGlmIChkcmFnZ2VkQmxvY2spIHsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSBkcmFnZ2VkQmxvY2sudHlwZTsKICAgICAgICBpZiAoYmxvY2tUeXBlID09PSAiaGVhZGluZy0xIiB8fCBibG9ja1R5cGUgPT09ICJoZWFkaW5nLTIiIHx8IGJsb2NrVHlwZSA9PT0gImhlYWRpbmctMyIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjQ7CiAgICAgICAgfSBlbHNlIGlmIChibG9ja1R5cGUgPT09ICJjb2RlIiB8fCBibG9ja1R5cGUgPT09ICJxdW90ZSIpIHsKICAgICAgICAgIGJsb2NrTWFyZ2luID0gMjA7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBpZiAoYWRqdXN0ZWRUYXJnZXRJbmRleCA9PT0gMCkgewogICAgICB0b3BQb3NpdGlvbiA9IDA7CiAgICB9IGVsc2UgaWYgKGFkanVzdGVkVGFyZ2V0SW5kZXggPj0gdmlzdWFsQmxvY2tzLmxlbmd0aCkgewogICAgICBjb25zdCBsYXN0QmxvY2sgPSB2aXN1YWxCbG9ja3NbdmlzdWFsQmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICBpZiAobGFzdEJsb2NrKSB7CiAgICAgICAgdG9wUG9zaXRpb24gPSBsYXN0QmxvY2suYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9IGVsc2UgewogICAgICBjb25zdCBibG9ja0JlZm9yZSA9IHZpc3VhbEJsb2Nrc1thZGp1c3RlZFRhcmdldEluZGV4IC0gMV07CiAgICAgIGlmIChibG9ja0JlZm9yZSkgewogICAgICAgIHRvcFBvc2l0aW9uID0gYmxvY2tCZWZvcmUuYm90dG9tOwogICAgICAgIHRvcFBvc2l0aW9uICs9IGJsb2NrTWFyZ2luOwogICAgICB9CiAgICB9CiAgICB0aGlzLmRyb3BJbmRpY2F0b3Iuc3R5bGUuaGVpZ2h0ID0gYCR7dGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHR9cHhgOwogICAgdGhpcy5kcm9wSW5kaWNhdG9yLnN0eWxlLnRvcCA9IGAke01hdGgubWF4KDAsIHRvcFBvc2l0aW9uKX1weGA7CiAgICBjb25zb2xlLmxvZygiRHJvcCBpbmRpY2F0b3IgdXBkYXRlOiIsIHsKICAgICAgdGFyZ2V0SW5kZXgsCiAgICAgIGFkanVzdGVkVGFyZ2V0SW5kZXgsCiAgICAgIGRyYWdnZWRJbmRleCwKICAgICAgdG9wUG9zaXRpb24sCiAgICAgIGhlaWdodDogdGhpcy5kcmFnZ2VkQmxvY2tIZWlnaHQsCiAgICAgIGJsb2NrTWFyZ2luLAogICAgICB2aXN1YWxCbG9ja3M6IHZpc3VhbEJsb2Nrcy5tYXAoKGI1KSA9PiAoeyBpbmRleDogYjUuaW5kZXgsIHRvcDogYjUudG9wLCBib3R0b206IGI1LmJvdHRvbSB9KSkKICAgIH0pOwogIH0KICAvKioKICAgKiBIYW5kbGVzIGdsb2JhbCBkcmFnIGVuZAogICAqLwogIGhhbmRsZUdsb2JhbERyYWdFbmQgPSAoKSA9PiB7CiAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJkcmFnb3ZlciIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ092ZXIpOwogICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigiZHJhZ2VuZCIsIHRoaXMuaGFuZGxlR2xvYmFsRHJhZ0VuZCk7CiAgICBpZiAodGhpcy5kcm9wSW5kaWNhdG9yKSB7CiAgICAgIHRoaXMuZHJvcEluZGljYXRvci5yZW1vdmUoKTsKICAgICAgdGhpcy5kcm9wSW5kaWNhdG9yID0gbnVsbDsKICAgIH0KICAgIGlmICh0aGlzLmRyYWdnZWRCbG9ja0lkKSB7CiAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgdGhpcy5wZXJmb3JtRHJvcCgpOwogICAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgICB9KTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuaGFuZGxlRHJhZ0VuZCgpOwogICAgfQogIH07CiAgLyoqCiAgICogUGVyZm9ybXMgdGhlIGFjdHVhbCBkcm9wIG9wZXJhdGlvbgogICAqLwogIHBlcmZvcm1Ecm9wKCkgewogICAgaWYgKCF0aGlzLmRyYWdnZWRCbG9ja0lkKQogICAgICByZXR1cm47CiAgICBjb25zdCBibG9ja0VsZW1lbnRzMiA9IEFycmF5LmZyb20odGhpcy5jb21wb25lbnQuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpKTsKICAgIGNvbnN0IGRyYWdnZWRFbGVtZW50ID0gYmxvY2tFbGVtZW50czIuZmluZCgoZWwpID0+IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgIGlmICghZHJhZ2dlZEVsZW1lbnQpCiAgICAgIHJldHVybjsKICAgIGNvbnN0IHZpc3VhbE9yZGVyID0gYmxvY2tFbGVtZW50czIubWFwKChlbCkgPT4gewogICAgICBjb25zdCBpZCA9IGVsLmdldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIpOwogICAgICBjb25zdCByZWN0ID0gZWwuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGNlbnRlclkgPSByZWN0LnRvcCArIHJlY3QuaGVpZ2h0IC8gMjsKICAgICAgcmV0dXJuIHsgaWQsIGNlbnRlclksIGVsZW1lbnQ6IGVsIH07CiAgICB9KTsKICAgIHZpc3VhbE9yZGVyLnNvcnQoKGE1LCBiNSkgPT4gYTUuY2VudGVyWSAtIGI1LmNlbnRlclkpOwogICAgY29uc3QgbmV3QmxvY2tJZHMgPSB2aXN1YWxPcmRlci5tYXAoKGl0ZW0pID0+IGl0ZW0uaWQpLmZpbHRlcigoaWQpID0+IGlkICE9PSBudWxsKTsKICAgIGNvbnN0IG9yaWdpbmFsQmxvY2tzID0gWy4uLnRoaXMuY29tcG9uZW50LmJsb2Nrc107CiAgICBjb25zdCBkcmFnZ2VkQmxvY2sgPSBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuZHJhZ2dlZEJsb2NrSWQpOwogICAgaWYgKCFkcmFnZ2VkQmxvY2spCiAgICAgIHJldHVybjsKICAgIGNvbnN0IG9sZE9yZGVyID0gb3JpZ2luYWxCbG9ja3MubWFwKChiNSkgPT4gYjUuaWQpOwogICAgY29uc3Qgb3JkZXJDaGFuZ2VkID0gIW5ld0Jsb2NrSWRzLmV2ZXJ5KChpZCwgaW5kZXgyKSA9PiBpZCA9PT0gb2xkT3JkZXJbaW5kZXgyXSk7CiAgICBpZiAoIW9yZGVyQ2hhbmdlZCkgewogICAgICByZXR1cm47CiAgICB9CiAgICBjb25zdCBuZXdCbG9ja3MgPSBuZXdCbG9ja0lkcy5tYXAoKGlkKSA9PiBvcmlnaW5hbEJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGlkKSkuZmlsdGVyKEJvb2xlYW4pOwogICAgdGhpcy5jb21wb25lbnQuYmxvY2tzID0gbmV3QmxvY2tzOwogICAgdGhpcy5jb21wb25lbnQucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgdGhpcy5jb21wb25lbnQudXBkYXRlVmFsdWUoKTsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBpZiAoZHJhZ2dlZEJsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIHRoaXMuY29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGRyYWdnZWRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0sIDEwMCk7CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy93eXNpd3lnLmhpc3RvcnkuanMKdmFyIFd5c2l3eWdIaXN0b3J5ID0gY2xhc3MgewogIGhpc3RvcnkgPSBbXTsKICBjdXJyZW50SW5kZXggPSAtMTsKICBtYXhIaXN0b3J5U2l6ZSA9IDUwOwogIGxhc3RTYXZlVGltZSA9IDA7CiAgc2F2ZURlYm91bmNlTXMgPSA1MDA7CiAgLy8gRGVib3VuY2Ugc2F2ZXMgdG8gYXZvaWQgdG9vIG1hbnkgc25hcHNob3RzCiAgY29uc3RydWN0b3IoKSB7CiAgICB0aGlzLmhpc3RvcnkgPSBbXTsKICAgIHRoaXMuY3VycmVudEluZGV4ID0gLTE7CiAgfQogIC8qKgogICAqIFNhdmUgY3VycmVudCBzdGF0ZSB0byBoaXN0b3J5CiAgICovCiAgc2F2ZVN0YXRlKGJsb2Nrcywgc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbikgewogICAgY29uc3Qgbm93MiA9IERhdGUubm93KCk7CiAgICBpZiAobm93MiAtIHRoaXMubGFzdFNhdmVUaW1lIDwgdGhpcy5zYXZlRGVib3VuY2VNcyAmJiB0aGlzLmN1cnJlbnRJbmRleCA+PSAwKSB7CiAgICAgIHRoaXMuaGlzdG9yeVt0aGlzLmN1cnJlbnRJbmRleF0gPSB7CiAgICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgICAgc2VsZWN0ZWRCbG9ja0lkLAogICAgICAgIGN1cnNvclBvc2l0aW9uOiBjdXJzb3JQb3NpdGlvbiA/IHsgLi4uY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgICB0aW1lc3RhbXA6IG5vdzIKICAgICAgfTsKICAgICAgcmV0dXJuOwogICAgfQogICAgaWYgKHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDEpIHsKICAgICAgdGhpcy5oaXN0b3J5ID0gdGhpcy5oaXN0b3J5LnNsaWNlKDAsIHRoaXMuY3VycmVudEluZGV4ICsgMSk7CiAgICB9CiAgICBjb25zdCBuZXdTdGF0ZSA9IHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKGJsb2NrcyksCiAgICAgIHNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IGN1cnNvclBvc2l0aW9uID8geyAuLi5jdXJzb3JQb3NpdGlvbiB9IDogdm9pZCAwLAogICAgICB0aW1lc3RhbXA6IG5vdzIKICAgIH07CiAgICB0aGlzLmhpc3RvcnkucHVzaChuZXdTdGF0ZSk7CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgaWYgKHRoaXMuaGlzdG9yeS5sZW5ndGggPiB0aGlzLm1heEhpc3RvcnlTaXplKSB7CiAgICAgIHRoaXMuaGlzdG9yeS5zaGlmdCgpOwogICAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgfQogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSBub3cyOwogIH0KICAvKioKICAgKiBGb3JjZSBzYXZlIGEgY2hlY2twb2ludCAodXNlZnVsIGZvciBvcGVyYXRpb25zIGxpa2UgYmxvY2sgZGVsZXRpb24pCiAgICovCiAgc2F2ZUNoZWNrcG9pbnQoYmxvY2tzLCBzZWxlY3RlZEJsb2NrSWQsIGN1cnNvclBvc2l0aW9uKSB7CiAgICB0aGlzLmxhc3RTYXZlVGltZSA9IDA7CiAgICB0aGlzLnNhdmVTdGF0ZShibG9ja3MsIHNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogIH0KICAvKioKICAgKiBVbmRvIHRvIHByZXZpb3VzIHN0YXRlCiAgICovCiAgdW5kbygpIHsKICAgIGlmICghdGhpcy5jYW5VbmRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleC0tOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogUmVkbyB0byBuZXh0IHN0YXRlCiAgICovCiAgcmVkbygpIHsKICAgIGlmICghdGhpcy5jYW5SZWRvKCkpIHsKICAgICAgcmV0dXJuIG51bGw7CiAgICB9CiAgICB0aGlzLmN1cnJlbnRJbmRleCsrOwogICAgcmV0dXJuIHRoaXMuY2xvbmVTdGF0ZSh0aGlzLmhpc3RvcnlbdGhpcy5jdXJyZW50SW5kZXhdKTsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgdW5kbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5VbmRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4ID4gMDsKICB9CiAgLyoqCiAgICogQ2hlY2sgaWYgcmVkbyBpcyBhdmFpbGFibGUKICAgKi8KICBjYW5SZWRvKCkgewogICAgcmV0dXJuIHRoaXMuY3VycmVudEluZGV4IDwgdGhpcy5oaXN0b3J5Lmxlbmd0aCAtIDE7CiAgfQogIC8qKgogICAqIEdldCBjdXJyZW50IHN0YXRlCiAgICovCiAgZ2V0Q3VycmVudFN0YXRlKCkgewogICAgaWYgKHRoaXMuY3VycmVudEluZGV4ID49IDAgJiYgdGhpcy5jdXJyZW50SW5kZXggPCB0aGlzLmhpc3RvcnkubGVuZ3RoKSB7CiAgICAgIHJldHVybiB0aGlzLmNsb25lU3RhdGUodGhpcy5oaXN0b3J5W3RoaXMuY3VycmVudEluZGV4XSk7CiAgICB9CiAgICByZXR1cm4gbnVsbDsKICB9CiAgLyoqCiAgICogQ2xlYXIgaGlzdG9yeQogICAqLwogIGNsZWFyKCkgewogICAgdGhpcy5oaXN0b3J5ID0gW107CiAgICB0aGlzLmN1cnJlbnRJbmRleCA9IC0xOwogICAgdGhpcy5sYXN0U2F2ZVRpbWUgPSAwOwogIH0KICAvKioKICAgKiBEZWVwIGNsb25lIGJsb2NrcwogICAqLwogIGNsb25lQmxvY2tzKGJsb2NrcykgewogICAgcmV0dXJuIGJsb2Nrcy5tYXAoKGJsb2NrKSA9PiAoewogICAgICAuLi5ibG9jaywKICAgICAgbWV0YWRhdGE6IGJsb2NrLm1ldGFkYXRhID8geyAuLi5ibG9jay5tZXRhZGF0YSB9IDogdm9pZCAwCiAgICB9KSk7CiAgfQogIC8qKgogICAqIENsb25lIGEgaGlzdG9yeSBzdGF0ZQogICAqLwogIGNsb25lU3RhdGUoc3RhdGUxMikgewogICAgcmV0dXJuIHsKICAgICAgYmxvY2tzOiB0aGlzLmNsb25lQmxvY2tzKHN0YXRlMTIuYmxvY2tzKSwKICAgICAgc2VsZWN0ZWRCbG9ja0lkOiBzdGF0ZTEyLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgY3Vyc29yUG9zaXRpb246IHN0YXRlMTIuY3Vyc29yUG9zaXRpb24gPyB7IC4uLnN0YXRlMTIuY3Vyc29yUG9zaXRpb24gfSA6IHZvaWQgMCwKICAgICAgdGltZXN0YW1wOiBzdGF0ZTEyLnRpbWVzdGFtcAogICAgfTsKICB9CiAgLyoqCiAgICogR2V0IGhpc3RvcnkgaW5mbyBmb3IgZGVidWdnaW5nCiAgICovCiAgZ2V0SGlzdG9yeUluZm8oKSB7CiAgICByZXR1cm4gewogICAgICBzaXplOiB0aGlzLmhpc3RvcnkubGVuZ3RoLAogICAgICBjdXJyZW50SW5kZXg6IHRoaXMuY3VycmVudEluZGV4LAogICAgICBjYW5VbmRvOiB0aGlzLmNhblVuZG8oKSwKICAgICAgY2FuUmVkbzogdGhpcy5jYW5SZWRvKCkKICAgIH07CiAgfQp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L2RlZXMtaW5wdXQtd3lzaXd5Zy9kZWVzLXd5c2l3eWctYmxvY2suanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjMgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY0ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzV3lzaXd5Z0Jsb2NrID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy13eXNpd3lnLWJsb2NrIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfYmxvY2tfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2NrX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYmxvY2tfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzU2VsZWN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX2lzU2VsZWN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19kZWNvcmF0b3JzOwogIGxldCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9kZWNvcmF0b3JzOwogIGxldCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1d5c2l3eWdCbG9jazIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9ibG9ja19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2lzU2VsZWN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfaGFuZGxlcnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfYmxvY2tfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYmxvY2siLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJsb2NrLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5ibG9jayA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja19pbml0aWFsaXplcnMsIF9ibG9ja19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF9pc1NlbGVjdGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzU2VsZWN0ZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzU2VsZWN0ZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNTZWxlY3RlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNTZWxlY3RlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc1NlbGVjdGVkX2luaXRpYWxpemVycywgX2lzU2VsZWN0ZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Myh0aGlzLCBudWxsLCBfaGFuZGxlcnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaGFuZGxlcnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImhhbmRsZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhhbmRsZXJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5oYW5kbGVycyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9oYW5kbGVyc19pbml0aWFsaXplcnMsIF9oYW5kbGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTYzKHRoaXMsIG51bGwsIF93eXNpd3lnQ29tcG9uZW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInd5c2l3eWdDb21wb25lbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInd5c2l3eWdDb21wb25lbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud3lzaXd5Z0NvbXBvbmVudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud3lzaXd5Z0NvbXBvbmVudCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93eXNpd3lnQ29tcG9uZW50X2luaXRpYWxpemVycywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIGFzeW5jIGRpc2Nvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5kaXNjb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICBpZiAodGhpcy5fc2VsZWN0aW9uSGFuZGxlcikgewogICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInNlbGVjdGlvbmNoYW5nZSIsIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIpOwogICAgICB9CiAgICB9CiAgICAjYmxvY2tfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2luaXRpYWxpemVycywgdm9pZCAwKTsKICAgIGdldCBibG9jaygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2sodmFsdWUyKSB7CiAgICAgIHRoaXMuI2Jsb2NrX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNTZWxlY3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2Jsb2NrX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaXNTZWxlY3RlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNTZWxlY3RlZCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzU2VsZWN0ZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1NlbGVjdGVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc1NlbGVjdGVkX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaGFuZGxlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY0KHRoaXMsIF9pc1NlbGVjdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfaGFuZGxlcnNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBoYW5kbGVycygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaGFuZGxlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2hhbmRsZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjd3lzaXd5Z0NvbXBvbmVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX2hhbmRsZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NCh0aGlzLCBfd3lzaXd5Z0NvbXBvbmVudF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHd5c2l3eWdDb21wb25lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN3eXNpd3lnQ29tcG9uZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICAvLyBSZWZlcmVuY2UgdG8gcGFyZW50IGRlZXMtaW5wdXQtd3lzaXd5ZwogICAgc2V0IHd5c2l3eWdDb21wb25lbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3d5c2l3eWdDb21wb25lbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIFJlZmVyZW5jZSB0byB0aGUgZWRpdGFibGUgYmxvY2sgZWxlbWVudAogICAgYmxvY2tFbGVtZW50ID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjQodGhpcywgX3d5c2l3eWdDb21wb25lbnRfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIC8vIFRyYWNrIGlmIHdlJ3ZlIGluaXRpYWxpemVkIHRoZSBjb250ZW50CiAgICBjb250ZW50SW5pdGlhbGl6ZWQgPSBmYWxzZTsKICAgIC8vIFRyYWNrIGN1cnNvciBwb3NpdGlvbgogICAgbGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSAwOwogICAgbGFzdFNlbGVjdGVkVGV4dCA9ICIiOwogICAgaGFuZGxlclN0eWxlc0luamVjdGVkID0gZmFsc2U7CiAgICAvLyBCbG9jayB0eXBlcyB0aGF0IGRvbid0IHN1cHBvcnQgY29udGVudGVkaXRhYmxlCiAgICBzdGF0aWMgTk9OX0VESVRBQkxFX1RZUEVTID0gWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiXTsKICAgIGluamVjdEhhbmRsZXJTdHlsZXMoKSB7CiAgICAgIGlmICh0aGlzLmhhbmRsZXJTdHlsZXNJbmplY3RlZCkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuaGFuZGxlclN0eWxlc0luamVjdGVkID0gdHJ1ZTsKICAgICAgbGV0IHN0eWxlczMgPSAiIjsKICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IEJsb2NrUmVnaXN0cnkuZ2V0QWxsVHlwZXMoKTsKICAgICAgZm9yIChjb25zdCB0eXBlNSBvZiBibG9ja1R5cGVzKSB7CiAgICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodHlwZTUpOwogICAgICAgIGlmIChoYW5kbGVyMikgewogICAgICAgICAgc3R5bGVzMyArPSBoYW5kbGVyMi5nZXRTdHlsZXMoKTsKICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHN0eWxlczMpIHsKICAgICAgICBjb25zdCBzdHlsZUVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpOwogICAgICAgIHN0eWxlRWxlbWVudC50ZXh0Q29udGVudCA9IHN0eWxlczM7CiAgICAgICAgdGhpcy5zaGFkb3dSb290Py5hcHBlbmRDaGlsZChzdHlsZUVsZW1lbnQpOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAuYmxvY2sgewogICAgICAgIHBhZGRpbmc6IDRweCAwOwogICAgICAgIG1pbi1oZWlnaHQ6IDEuNmVtOwogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgd29yZC13cmFwOiBicmVhay13b3JkOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAwMDAiLCAiI2UwZTBlMCIpfTsKICAgICAgfQoKICAgICAgLmJsb2NrOmVtcHR5Om5vdCg6Zm9jdXMpOjpiZWZvcmUgewogICAgICAgIGNvbnRlbnQ6IGF0dHIoZGF0YS1wbGFjZWhvbGRlcik7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjOTk5IiwgIiM2NjYiKX07CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICB9CgogICAgICAvKiBCbG9jay1zcGVjaWZpYyBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlcnMgKi8KCgogICAgICAvKiBGb3JtYXR0aW5nIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOmlzKGIsIHN0cm9uZykgewogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNmZmZmZmYiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayA6aXMoaSwgZW0pIHsKICAgICAgICBmb250LXN0eWxlOiBpdGFsaWM7CiAgICAgIH0KCiAgICAgIC5ibG9jayB1IHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IHVuZGVybGluZTsKICAgICAgfQoKICAgICAgLmJsb2NrIHMgewogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbGluZS10aHJvdWdoOwogICAgICB9CgogICAgICAuYmxvY2sgY29kZSB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdTRiBNb25vJywgJ01vbmFjbycsICdJbmNvbnNvbGF0YScsICdGaXJhIENvZGUnLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDE0IiwgIiNmZjZiNmIiKX07CiAgICAgIH0KCiAgICAgIC5ibG9jayBhIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDY2Y2MiLCAiIzRkOTRmZiIpfTsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHRyYW5zcGFyZW50OwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlci1jb2xvciAwLjE1cyBlYXNlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgfQoKICAgICAgLmJsb2NrIGE6aG92ZXIgewogICAgICAgIGJvcmRlci1ib3R0b20tY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDA2NmNjIiwgIiM0ZDk0ZmYiKX07CiAgICAgIH0KCiAgICAgIC8qIENvZGUgYmxvY2sgY29udGFpbmVyIGFuZCBsYW5ndWFnZSBzdHlsZXMgbW92ZWQgdG8gaGFuZGxlciAqLwoKICAgICAgLyogU2VsZWN0aW9uIHN0eWxlcyAqLwogICAgICAuYmxvY2sgOjpzZWxlY3Rpb24gewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDEwMiwgMjA0LCAwLjMpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjMpIil9OwogICAgICAgIGNvbG9yOiBpbmhlcml0OwogICAgICB9CgoKICAgICAgLyogU3RyaWtlIHRocm91Z2ggKi8KICAgICAgLmJsb2NrIDppcyhzLCBzdHJpa2UpIHsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IGxpbmUtdGhyb3VnaDsKICAgICAgICBvcGFjaXR5OiAwLjc7CiAgICAgIH0KCgogICAgICAvKiBCbG9jayBtYXJnaW4gYWRqdXN0bWVudHMgYmFzZWQgb24gdHlwZSAqLwogICAgICA6aG9zdC1jb250ZXh0KC5ibG9jay13cmFwcGVyOmZpcnN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi10b3A6IDAgIWltcG9ydGFudDsKICAgICAgfQoKICAgICAgOmhvc3QtY29udGV4dCguYmxvY2std3JhcHBlcjpsYXN0LWNoaWxkKSAuYmxvY2sgewogICAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICAgIH0KCiAgICAgIC8qIFNlbGVjdGVkIHN0YXRlICovCiAgICAgIC5ibG9jay5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMDUpIiwgInJnYmEoNzcsIDE0OCwgMjU1LCAwLjA4KSIpfTsKICAgICAgICBib3gtc2hhZG93OiBpbnNldCAwIDAgMCAycHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMTAyLCAyMDQsIDAuMikiLCAicmdiYSg3NywgMTQ4LCAyNTUsIDAuMikiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiAtOHB4OwogICAgICAgIG1hcmdpbi1yaWdodDogLThweDsKICAgICAgICBwYWRkaW5nLWxlZnQ6IDhweDsKICAgICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIH0KCgoKCiAgICBgCiAgICBdOwogICAgc2hvdWxkVXBkYXRlKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImlzU2VsZWN0ZWQiKSAmJiB0aGlzLmJsb2NrKSB7CiAgICAgICAgbGV0IGVsZW1lbnQ0ID0gbnVsbDsKICAgICAgICBjb25zdCBibG9ja1R5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgICAgY29uc3Qgc2VsZWN0b3IgPSBgLmJsb2NrLiR7YmxvY2tUeXBlfWA7CiAgICAgICAgZWxlbWVudDQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3Ioc2VsZWN0b3IpOwogICAgICAgIGlmIChlbGVtZW50NCkgewogICAgICAgICAgaWYgKHRoaXMuaXNTZWxlY3RlZCkgewogICAgICAgICAgICBlbGVtZW50NC5jbGFzc0xpc3QuYWRkKCJzZWxlY3RlZCIpOwogICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgZWxlbWVudDQuY2xhc3NMaXN0LnJlbW92ZSgic2VsZWN0ZWQiKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImJsb2NrIikgJiYgdGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IG9sZEJsb2NrID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJibG9jayIpOwogICAgICAgIGlmIChvbGRCbG9jayAmJiBvbGRCbG9jay5pZCAmJiBvbGRCbG9jay50eXBlICYmIG9sZEJsb2NrLmlkID09PSB0aGlzLmJsb2NrLmlkICYmIG9sZEJsb2NrLnR5cGUgPT09IHRoaXMuYmxvY2sudHlwZSkgewogICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgIH0KICAgICAgfQogICAgICByZXR1cm4gIXRoaXMuYmxvY2tFbGVtZW50IHx8IHRoaXMuYmxvY2s/LnR5cGUgIT09IHRoaXMuYmxvY2tFbGVtZW50LmRhdGFzZXQuYmxvY2tUeXBlOwogICAgfQogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLmNvbnRlbnRJbml0aWFsaXplZCA9IHRydWU7CiAgICAgIHRoaXMuaW5qZWN0SGFuZGxlclN0eWxlcygpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICBpZiAoY29udGFpbmVyICYmIHRoaXMuYmxvY2spIHsKICAgICAgICBjb250YWluZXIuaW5uZXJIVE1MID0gdGhpcy5yZW5kZXJCbG9ja0NvbnRlbnQoKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jaykgewogICAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgICBjb25zdCBibG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgICBoYW5kbGVyMi5zZXR1cChibG9ja0VsZW1lbnQsIHRoaXMuYmxvY2ssIHRoaXMuaGFuZGxlcnMpOwogICAgICAgICAgfQogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUJsb2NrID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKGVkaXRhYmxlQmxvY2spIHsKICAgICAgICBlZGl0YWJsZUJsb2NrLnNldEF0dHJpYnV0ZSgiZGF0YS1ibG9jay1pZCIsIHRoaXMuYmxvY2suaWQpOwogICAgICAgIGVkaXRhYmxlQmxvY2suc2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLXR5cGUiLCB0aGlzLmJsb2NrLnR5cGUpOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiaW5wdXQiLCAoZTExKSA9PiB7CiAgICAgICAgICB0aGlzLmhhbmRsZXJzPy5vbklucHV0Py4oZTExKTsKICAgICAgICAgIGNvbnN0IHBvcyA9IHRoaXMuZ2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVCbG9jayk7CiAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgIHRoaXMubGFzdEtub3duQ3Vyc29yUG9zaXRpb24gPSBwb3M7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJrZXlkb3duIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uS2V5RG93bj8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uRm9jdXM/LigpOwogICAgICAgIH0pOwogICAgICAgIGVkaXRhYmxlQmxvY2suYWRkRXZlbnRMaXN0ZW5lcigiYmx1ciIsICgpID0+IHsKICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uQmx1cj8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjb21wb3NpdGlvbnN0YXJ0IiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvblN0YXJ0Py4oKTsKICAgICAgICB9KTsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImNvbXBvc2l0aW9uZW5kIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oYW5kbGVycz8ub25Db21wb3NpdGlvbkVuZD8uKCk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgKGUxMSkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICAgIHRoaXMuaGFuZGxlcnM/Lm9uTW91c2VVcD8uKGUxMSk7CiAgICAgICAgfSk7CiAgICAgICAgZWRpdGFibGVCbG9jay5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBjb25zdCBwb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlQmxvY2spOwogICAgICAgICAgICBpZiAocG9zICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgICAgfQogICAgICAgICAgfSwgMCk7CiAgICAgICAgfSk7CiAgICAgICAgY29uc3QgY2hlY2tTZWxlY3Rpb24gPSAoKSA9PiB7CiAgICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgICBpZiAoIXNlbGVjdGlvbiB8fCBzZWxlY3Rpb24ucmFuZ2VDb3VudCA9PT0gMCkKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgICAgY29uc3Qgc2VsZWN0ZWRUZXh0ID0gc2VsZWN0aW9uLnRvU3RyaW5nKCk7CiAgICAgICAgICBpZiAoc2VsZWN0ZWRUZXh0Lmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICBpZiAodGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICAgICAgICB0ZXh0OiAiIiwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiBmYWxzZQogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgICAgICAgIH0pKTsKICAgICAgICAgICAgfQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICB9CiAgICAgICAgICBjb25zdCBjdXJyZW50RWRpdGFibGVCbG9jayA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoIWN1cnJlbnRFZGl0YWJsZUJsb2NrKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBwYXJlbnRDb21wb25lbnQgPSB0aGlzLmNsb3Nlc3QoImRlZXMtaW5wdXQtd3lzaXd5ZyIpOwogICAgICAgICAgY29uc3QgcGFyZW50U2hhZG93Um9vdCA9IHBhcmVudENvbXBvbmVudD8uc2hhZG93Um9vdDsKICAgICAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgICAgICBpZiAocGFyZW50U2hhZG93Um9vdCkKICAgICAgICAgICAgc2hhZG93Um9vdHMucHVzaChwYXJlbnRTaGFkb3dSb290KTsKICAgICAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgICAgIHNoYWRvd1Jvb3RzLnB1c2godGhpcy5zaGFkb3dSb290KTsKICAgICAgICAgIGNvbnN0IHNlbGVjdGlvbkluZm8gPSBXeXNpd3lnU2VsZWN0aW9uLmdldFNlbGVjdGlvbkluZm8oLi4uc2hhZG93Um9vdHMpOwogICAgICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBzdGFydEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKTsKICAgICAgICAgIGNvbnN0IGVuZEluQmxvY2sgPSBXeXNpd3lnU2VsZWN0aW9uLmNvbnRhaW5zQWNyb3NzU2hhZG93RE9NKGN1cnJlbnRFZGl0YWJsZUJsb2NrLCBzZWxlY3Rpb25JbmZvLmVuZENvbnRhaW5lcik7CiAgICAgICAgICBpZiAoc3RhcnRJbkJsb2NrIHx8IGVuZEluQmxvY2spIHsKICAgICAgICAgICAgaWYgKHNlbGVjdGVkVGV4dCAhPT0gdGhpcy5sYXN0U2VsZWN0ZWRUZXh0KSB7CiAgICAgICAgICAgICAgdGhpcy5sYXN0U2VsZWN0ZWRUZXh0ID0gc2VsZWN0ZWRUZXh0OwogICAgICAgICAgICAgIGNvbnN0IHJhbmdlMiA9IFd5c2l3eWdTZWxlY3Rpb24uY3JlYXRlUmFuZ2VGcm9tSW5mbyhzZWxlY3Rpb25JbmZvKTsKICAgICAgICAgICAgICBjb25zdCByZWN0ID0gcmFuZ2UyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImJsb2NrLXRleHQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgICAgdGV4dDogc2VsZWN0ZWRUZXh0LnRyaW0oKSwKICAgICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgICAgcmFuZ2U6IHJhbmdlMiwKICAgICAgICAgICAgICAgICAgcmVjdCwKICAgICAgICAgICAgICAgICAgaGFzU2VsZWN0aW9uOiB0cnVlCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgICAgICAgfSkpOwogICAgICAgICAgICB9CiAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMubGFzdFNlbGVjdGVkVGV4dCkgewogICAgICAgICAgICB0aGlzLmxhc3RTZWxlY3RlZFRleHQgPSAiIjsKICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgiYmxvY2stdGV4dC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICBkZXRhaWw6IHsKICAgICAgICAgICAgICAgIHRleHQ6ICIiLAogICAgICAgICAgICAgICAgYmxvY2tJZDogdGhpcy5ibG9jay5pZCwKICAgICAgICAgICAgICAgIGhhc1NlbGVjdGlvbjogZmFsc2UKICAgICAgICAgICAgICB9LAogICAgICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgfSkpOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigic2VsZWN0aW9uY2hhbmdlIiwgY2hlY2tTZWxlY3Rpb24pOwogICAgICAgIHRoaXMuX3NlbGVjdGlvbkhhbmRsZXIgPSBjaGVja1NlbGVjdGlvbjsKICAgICAgICBlZGl0YWJsZUJsb2NrLmFkZEV2ZW50TGlzdGVuZXIoImtleXVwIiwgKCkgPT4gewogICAgICAgICAgY29uc3QgcG9zID0gdGhpcy5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUJsb2NrKTsKICAgICAgICAgIGlmIChwb3MgIT09IG51bGwpIHsKICAgICAgICAgICAgdGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiA9IHBvczsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpZiAodGhpcy5ibG9jay5jb250ZW50KSB7CiAgICAgICAgICBlZGl0YWJsZUJsb2NrLmlubmVySFRNTCA9IHRoaXMuYmxvY2suY29udGVudDsKICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja0VsZW1lbnQgPSBlZGl0YWJsZUJsb2NrOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2spCiAgICAgICAgcmV0dXJuIHUzYGA7CiAgICAgIHJldHVybiB1M2A8ZGl2IGNsYXNzPSJ3eXNpd3lnLWJsb2NrLWNvbnRhaW5lciI+PC9kaXY+YDsKICAgIH0KICAgIHJlbmRlckJsb2NrQ29udGVudCgpIHsKICAgICAgaWYgKCF0aGlzLmJsb2NrKQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyKSB7CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnJlbmRlcih0aGlzLmJsb2NrLCB0aGlzLmlzU2VsZWN0ZWQpOwogICAgICB9CiAgICAgIGNvbnN0IHNlbGVjdGVkQ2xhc3MgPSB0aGlzLmlzU2VsZWN0ZWQgPyAiIHNlbGVjdGVkIiA6ICIiOwogICAgICByZXR1cm4gYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImJsb2NrICR7dGhpcy5ibG9jay50eXBlfSR7c2VsZWN0ZWRDbGFzc30iCiAgICAgICAgY29udGVudGVkaXRhYmxlPSJ0cnVlIgogICAgICA+PC9kaXY+CiAgICBgOwogICAgfQogICAgZm9jdXMoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1cykgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLmZvY3VzKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGlmICh0aGlzLmJsb2NrICYmIERlZXNXeXNpd3lnQmxvY2syLk5PTl9FRElUQUJMRV9UWVBFUy5pbmNsdWRlcyh0aGlzLmJsb2NrLnR5cGUpKSB7CiAgICAgICAgY29uc3QgYmxvY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAuYmxvY2suJHt0aGlzLmJsb2NrLnR5cGV9YCk7CiAgICAgICAgaWYgKGJsb2NrRWxlbWVudCkgewogICAgICAgICAgYmxvY2tFbGVtZW50LmZvY3VzKCk7CiAgICAgICAgfQogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBlZGl0YWJsZUVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudCkKICAgICAgICByZXR1cm47CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIikpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJjb250ZW50ZWRpdGFibGUiLCAidHJ1ZSIpOwogICAgICB9CiAgICAgIGVkaXRhYmxlRWxlbWVudC5mb2N1cygpOwogICAgICBpZiAoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50ICYmIHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudCAhPT0gZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiB7CiAgICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgZm9jdXNXaXRoQ3Vyc29yKHBvc2l0aW9uMyA9ICJlbmQiKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5mb2N1c1dpdGhDdXJzb3IoY29udGFpbmVyLCBwb3NpdGlvbjMsIGNvbnRleHQyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9jayAmJiBEZWVzV3lzaXd5Z0Jsb2NrMi5OT05fRURJVEFCTEVfVFlQRVMuaW5jbHVkZXModGhpcy5ibG9jay50eXBlKSkgewogICAgICAgIHRoaXMuZm9jdXMoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBpZiAoIWVkaXRhYmxlRWxlbWVudC5oYXNBdHRyaWJ1dGUoImNvbnRlbnRlZGl0YWJsZSIpKSB7CiAgICAgICAgZWRpdGFibGVFbGVtZW50LnNldEF0dHJpYnV0ZSgiY29udGVudGVkaXRhYmxlIiwgInRydWUiKTsKICAgICAgfQogICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgY29uc3Qgc2V0Q3Vyc29yID0gKCkgPT4gewogICAgICAgIGlmIChwb3NpdGlvbjMgPT09ICJzdGFydCIpIHsKICAgICAgICAgIHRoaXMuc2V0Q3Vyc29yVG9TdGFydCgpOwogICAgICAgIH0gZWxzZSBpZiAocG9zaXRpb24zID09PSAiZW5kIikgewogICAgICAgICAgdGhpcy5zZXRDdXJzb3JUb0VuZCgpOwogICAgICAgIH0gZWxzZSBpZiAodHlwZW9mIHBvc2l0aW9uMyA9PT0gIm51bWJlciIpIHsKICAgICAgICAgIFd5c2l3eWdTZWxlY3Rpb24uc2V0Q3Vyc29yUG9zaXRpb24oZWRpdGFibGVFbGVtZW50LCBwb3NpdGlvbjMpOwogICAgICAgIH0KICAgICAgfTsKICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgIHNldEN1cnNvcigpOwogICAgICB9IGVsc2UgewogICAgICAgIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oKCkgPT4gewogICAgICAgICAgaWYgKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBzZXRDdXJzb3IoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBHZXQgY3Vyc29yIHBvc2l0aW9uIGluIHRoZSBlZGl0YWJsZSBlbGVtZW50CiAgICAgKi8KICAgIGdldEN1cnNvclBvc2l0aW9uKGVsZW1lbnQ0KSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbikgewogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDdXJzb3JQb3NpdGlvbihlbGVtZW50NCwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBTZWxlY3Rpb24gaW5mbyBmcm9tIHNoYWRvdyBET01zOiIsIHsKICAgICAgICBzZWxlY3Rpb25JbmZvLAogICAgICAgIHNoYWRvd1Jvb3RzQ291bnQ6IHNoYWRvd1Jvb3RzLmxlbmd0aAogICAgICB9KTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBObyBzZWxlY3Rpb24gZm91bmQiKTsKICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IFJhbmdlIGluZm86IiwgewogICAgICAgIHN0YXJ0Q29udGFpbmVyOiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLAogICAgICAgIHN0YXJ0T2Zmc2V0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0T2Zmc2V0LAogICAgICAgIGNvbGxhcHNlZDogc2VsZWN0aW9uSW5mby5jb2xsYXBzZWQsCiAgICAgICAgc3RhcnRDb250YWluZXJUZXh0OiBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyLnRleHRDb250ZW50CiAgICAgIH0pOwogICAgICBpZiAoIWVsZW1lbnQ0LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpKSB7CiAgICAgICAgY29uc29sZS5sb2coImdldEN1cnNvclBvc2l0aW9uOiBSYW5nZSBub3QgaW4gZWxlbWVudCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnN0IHByZUNhcmV0UmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBwcmVDYXJldFJhbmdlLnNlbGVjdE5vZGVDb250ZW50cyhlbGVtZW50NCk7CiAgICAgIHByZUNhcmV0UmFuZ2Uuc2V0RW5kKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIsIHNlbGVjdGlvbkluZm8uc3RhcnRPZmZzZXQpOwogICAgICBjb25zdCBwb3NpdGlvbjMgPSBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCkubGVuZ3RoOwogICAgICBjb25zb2xlLmxvZygiZ2V0Q3Vyc29yUG9zaXRpb246IENhbGN1bGF0ZWQgcG9zaXRpb246IiwgewogICAgICAgIHBvc2l0aW9uOiBwb3NpdGlvbjMsCiAgICAgICAgcHJlQ2FyZXRUZXh0OiBwcmVDYXJldFJhbmdlLnRvU3RyaW5nKCksCiAgICAgICAgZWxlbWVudFRleHQ6IGVsZW1lbnQ0LnRleHRDb250ZW50LAogICAgICAgIGVsZW1lbnRUZXh0TGVuZ3RoOiBlbGVtZW50NC50ZXh0Q29udGVudD8ubGVuZ3RoCiAgICAgIH0pOwogICAgICByZXR1cm4gcG9zaXRpb24zOwogICAgfQogICAgZ2V0Q29udGVudCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldENvbnRlbnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5nZXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KQogICAgICAgIHJldHVybiAiIjsKICAgICAgY29uc3QgY29udGVudDMgPSBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MIHx8ICIiOwogICAgICBjb25zb2xlLmxvZygiR2V0dGluZyBjb250ZW50IGZyb20gYmxvY2s6IiwgY29udGVudDMpOwogICAgICByZXR1cm4gY29udGVudDM7CiAgICB9CiAgICBzZXRDb250ZW50KGNvbnRlbnQzKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDb250ZW50KSB7CiAgICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIud3lzaXd5Zy1ibG9jay1jb250YWluZXIiKTsKICAgICAgICBjb25zdCBjb250ZXh0MiA9IHsgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LCBjb21wb25lbnQ6IHRoaXMgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuc2V0Q29udGVudChjb250YWluZXIsIGNvbnRlbnQzLCBjb250ZXh0Mik7CiAgICAgIH0KICAgICAgY29uc3QgZWRpdGFibGVFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuYmxvY2siKTsKICAgICAgaWYgKCFlZGl0YWJsZUVsZW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBoYWRGb2N1cyA9IGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudCB8fCB0aGlzLnNoYWRvd1Jvb3Q/LmFjdGl2ZUVsZW1lbnQgPT09IGVkaXRhYmxlRWxlbWVudDsKICAgICAgZWRpdGFibGVFbGVtZW50LmlubmVySFRNTCA9IGNvbnRlbnQzOwogICAgICBpZiAoaGFkRm9jdXMpIHsKICAgICAgICBlZGl0YWJsZUVsZW1lbnQuZm9jdXMoKTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9TdGFydCgpIHsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLnNldEN1cnNvclRvU3RhcnQpIHsKICAgICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi53eXNpd3lnLWJsb2NrLWNvbnRhaW5lciIpOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0geyBzaGFkb3dSb290OiB0aGlzLnNoYWRvd1Jvb3QsIGNvbXBvbmVudDogdGhpcyB9OwogICAgICAgIHJldHVybiBoYW5kbGVyMi5zZXRDdXJzb3JUb1N0YXJ0KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvU3RhcnQoZWRpdGFibGVFbGVtZW50KTsKICAgICAgfQogICAgfQogICAgc2V0Q3Vyc29yVG9FbmQoKSB7CiAgICAgIGNvbnN0IGhhbmRsZXIyID0gQmxvY2tSZWdpc3RyeS5nZXRIYW5kbGVyKHRoaXMuYmxvY2sudHlwZSk7CiAgICAgIGlmIChoYW5kbGVyMiAmJiBoYW5kbGVyMi5zZXRDdXJzb3JUb0VuZCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc3QgY29udGV4dDIgPSB7IHNoYWRvd1Jvb3Q6IHRoaXMuc2hhZG93Um9vdCwgY29tcG9uZW50OiB0aGlzIH07CiAgICAgICAgcmV0dXJuIGhhbmRsZXIyLnNldEN1cnNvclRvRW5kKGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmIChlZGl0YWJsZUVsZW1lbnQpIHsKICAgICAgICBXeXNpd3lnQmxvY2tzLnNldEN1cnNvclRvRW5kKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIH0KICAgIH0KICAgIC8qKgogICAgICogR2V0IGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhpcyBibG9jawogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBpZiAoIXRoaXMuYmxvY2sgfHwgdGhpcy5ibG9jay50eXBlID09PSAiZGl2aWRlciIpIHsKICAgICAgICByZXR1cm4gW107CiAgICAgIH0KICAgICAgY29uc3QgYmxvY2tUeXBlcyA9IFd5c2l3eWdTaG9ydGN1dHMuZ2V0U2xhc2hNZW51SXRlbXMoKTsKICAgICAgY29uc3QgY3VycmVudFR5cGUgPSB0aGlzLmJsb2NrLnR5cGU7CiAgICAgIGNvbnN0IHd5c2l3eWdDb21wb25lbnQgPSB0aGlzLnd5c2l3eWdDb21wb25lbnQ7CiAgICAgIGNvbnN0IGJsb2NrSWQgPSB0aGlzLmJsb2NrLmlkOwogICAgICBjb25zdCBibG9ja1R5cGVJdGVtcyA9IGJsb2NrVHlwZXMuZmlsdGVyKChpdGVtKSA9PiBpdGVtLnR5cGUgIT09IGN1cnJlbnRUeXBlICYmIGl0ZW0udHlwZSAhPT0gImRpdmlkZXIiKS5tYXAoKGl0ZW0pID0+ICh7CiAgICAgICAgbmFtZTogaXRlbS5sYWJlbCwKICAgICAgICBpY29uTmFtZTogaXRlbS5pY29uLnJlcGxhY2UoImx1Y2lkZToiLCAiIiksCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICBjb25zdCBibG9ja1RvVHJhbnNmb3JtID0gd3lzaXd5Z0NvbXBvbmVudC5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgaWYgKGJsb2NrVG9UcmFuc2Zvcm0pIHsKICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLnR5cGUgPSBpdGVtLnR5cGU7CiAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50IHx8ICIiOwogICAgICAgICAgICAgIGlmIChpdGVtLnR5cGUgPT09ICJjb2RlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5tZXRhZGF0YSA9IHsgbGFuZ3VhZ2U6ICJ0eXBlc2NyaXB0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibGlzdCIpIHsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGxpc3RUeXBlOiAiYnVsbGV0IiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAiaW1hZ2UiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgICAgICAgICAgfSBlbHNlIGlmIChpdGVtLnR5cGUgPT09ICJ5b3V0dWJlIikgewogICAgICAgICAgICAgICAgYmxvY2tUb1RyYW5zZm9ybS5jb250ZW50ID0gIiI7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICAgICAgICAgIH0gZWxzZSBpZiAoaXRlbS50eXBlID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImh0bWwiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgICAgICAgICB9IGVsc2UgaWYgKGl0ZW0udHlwZSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgICAgICAgICBibG9ja1RvVHJhbnNmb3JtLmNvbnRlbnQgPSAiIjsKICAgICAgICAgICAgICAgIGJsb2NrVG9UcmFuc2Zvcm0ubWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZUJsb2NrRWxlbWVudChibG9ja0lkKTsKICAgICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgICAgICAgIHd5c2l3eWdDb21wb25lbnQuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2soYmxvY2tJZCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pKTsKICAgICAgY29uc3QgbWVudUl0ZW1zID0gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDaGFuZ2UgVHlwZSIsCiAgICAgICAgICBpY29uTmFtZTogInR5cGUiLAogICAgICAgICAgc3VibWVudTogYmxvY2tUeXBlSXRlbXMKICAgICAgICB9CiAgICAgIF07CiAgICAgIGlmICghWyJpbWFnZSIsICJkaXZpZGVyIiwgInlvdXR1YmUiLCAiYXR0YWNobWVudCJdLmluY2x1ZGVzKHRoaXMuYmxvY2sudHlwZSkpIHsKICAgICAgICBtZW51SXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogIkN1dCIsCiAgICAgICAgICBpY29uTmFtZTogInNjaXNzb3JzIiwKICAgICAgICAgIHNob3J0Y3V0OiAiQ21kK1giLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGRvY3VtZW50LmV4ZWNDb21tYW5kKCJjdXQiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiQ29weSIsCiAgICAgICAgICBpY29uTmFtZTogImNvcHkiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrQyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoImNvcHkiKTsKICAgICAgICAgIH0KICAgICAgICB9LCB7CiAgICAgICAgICBuYW1lOiAiUGFzdGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJjbGlwYm9hcmQiLAogICAgICAgICAgc2hvcnRjdXQ6ICJDbWQrViIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgZG9jdW1lbnQuZXhlY0NvbW1hbmQoInBhc3RlIik7CiAgICAgICAgICB9CiAgICAgICAgfSk7CiAgICAgIH0KICAgICAgbWVudUl0ZW1zLnB1c2goeyBkaXZpZGVyOiB0cnVlIH0sIHsKICAgICAgICBuYW1lOiAiRGVsZXRlIEJsb2NrIiwKICAgICAgICBpY29uTmFtZTogInRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAod3lzaXd5Z0NvbXBvbmVudCAmJiB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucykgewogICAgICAgICAgICB3eXNpd3lnQ29tcG9uZW50LmJsb2NrT3BlcmF0aW9ucy5kZWxldGVCbG9jayhibG9ja0lkKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0pOwogICAgICByZXR1cm4gbWVudUl0ZW1zOwogICAgfQogICAgLyoqCiAgICAgKiBHZXRzIGNvbnRlbnQgc3BsaXQgYXQgY3Vyc29yIHBvc2l0aW9uCiAgICAgKi8KICAgIGdldFNwbGl0Q29udGVudCgpIHsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3RhcnRpbmcuLi4iKTsKICAgICAgY29uc3QgaGFuZGxlcjIgPSBCbG9ja1JlZ2lzdHJ5LmdldEhhbmRsZXIodGhpcy5ibG9jay50eXBlKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogQ2hlY2tpbmcgZm9yIGhhbmRsZXIiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaGFzSGFuZGxlcjogISFoYW5kbGVyMiwKICAgICAgICBoYXNTcGxpdE1ldGhvZDogISEoaGFuZGxlcjIgJiYgaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KQogICAgICB9KTsKICAgICAgaWYgKGhhbmRsZXIyICYmIGhhbmRsZXIyLmdldFNwbGl0Q29udGVudCkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnd5c2l3eWctYmxvY2stY29udGFpbmVyIik7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRm91bmQgY29udGFpbmVyIiwgewogICAgICAgICAgY29udGFpbmVyOiAhIWNvbnRhaW5lciwKICAgICAgICAgIGNvbnRhaW5lckhUTUw6IGNvbnRhaW5lcj8uaW5uZXJIVE1MPy5zdWJzdHJpbmcoMCwgMTAwKQogICAgICAgIH0pOwogICAgICAgIGNvbnN0IGNvbnRleHQyID0gewogICAgICAgICAgc2hhZG93Um9vdDogdGhpcy5zaGFkb3dSb290LAogICAgICAgICAgY29tcG9uZW50OiB0aGlzCiAgICAgICAgfTsKICAgICAgICByZXR1cm4gaGFuZGxlcjIuZ2V0U3BsaXRDb250ZW50KGNvbnRhaW5lciwgY29udGV4dDIpOwogICAgICB9CiAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgIGlmICghZWRpdGFibGVFbGVtZW50KSB7CiAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogTm8gZWRpdGFibGUgZWxlbWVudCBmb3VuZCIpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEVsZW1lbnQgaW5mbzoiLCB7CiAgICAgICAgYmxvY2tUeXBlOiB0aGlzLmJsb2NrLnR5cGUsCiAgICAgICAgaW5uZXJIVE1MOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MLAogICAgICAgIHRleHRDb250ZW50OiBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQsCiAgICAgICAgdGV4dExlbmd0aDogZWRpdGFibGVFbGVtZW50LnRleHRDb250ZW50Py5sZW5ndGgKICAgICAgfSk7CiAgICAgIGNvbnN0IHBhcmVudENvbXBvbmVudCA9IHRoaXMuY2xvc2VzdCgiZGVlcy1pbnB1dC13eXNpd3lnIik7CiAgICAgIGNvbnN0IHBhcmVudFNoYWRvd1Jvb3QgPSBwYXJlbnRDb21wb25lbnQ/LnNoYWRvd1Jvb3Q7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmIChwYXJlbnRTaGFkb3dSb290KQogICAgICAgIHNoYWRvd1Jvb3RzLnB1c2gocGFyZW50U2hhZG93Um9vdCk7CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIGluZm8gZnJvbSBzaGFkb3cgRE9NczoiLCB7CiAgICAgICAgc2VsZWN0aW9uSW5mbywKICAgICAgICBzaGFkb3dSb290c0NvdW50OiBzaGFkb3dSb290cy5sZW5ndGgKICAgICAgfSk7CiAgICAgIGlmICghc2VsZWN0aW9uSW5mbykgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IE5vIHNlbGVjdGlvbiwgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU3BsaXR0aW5nIHdpdGggbGFzdCBrbm93biBwb3NpdGlvbjoiLCB7CiAgICAgICAgICAgIHBvcywKICAgICAgICAgICAgZnVsbFRleHRMZW5ndGg6IGZ1bGxUZXh0Lmxlbmd0aCwKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9KTsKICAgICAgICAgIHJldHVybiB7CiAgICAgICAgICAgIGJlZm9yZTogZnVsbFRleHQuc3Vic3RyaW5nKDAsIHBvcyksCiAgICAgICAgICAgIGFmdGVyOiBmdWxsVGV4dC5zdWJzdHJpbmcocG9zKQogICAgICAgICAgfTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgIH0KICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogU2VsZWN0aW9uIHJhbmdlOiIsIHsKICAgICAgICBzdGFydENvbnRhaW5lcjogc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwKICAgICAgICBzdGFydE9mZnNldDogc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCwKICAgICAgICBzdGFydENvbnRhaW5lckluRWxlbWVudDogZWRpdGFibGVFbGVtZW50LmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpCiAgICAgIH0pOwogICAgICBpZiAoIVd5c2l3eWdTZWxlY3Rpb24uY29udGFpbnNBY3Jvc3NTaGFkb3dET00oZWRpdGFibGVFbGVtZW50LCBzZWxlY3Rpb25JbmZvLnN0YXJ0Q29udGFpbmVyKSkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IFNlbGVjdGlvbiBub3QgaW4gdGhpcyBibG9jaywgdXNpbmcgbGFzdCBrbm93biBwb3NpdGlvbjoiLCB0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uKTsKICAgICAgICBpZiAodGhpcy5sYXN0S25vd25DdXJzb3JQb3NpdGlvbiAhPT0gbnVsbCkgewogICAgICAgICAgY29uc3QgZnVsbFRleHQgPSBlZGl0YWJsZUVsZW1lbnQudGV4dENvbnRlbnQgfHwgIiI7CiAgICAgICAgICBjb25zdCBwb3MgPSBNYXRoLm1pbih0aGlzLmxhc3RLbm93bkN1cnNvclBvc2l0aW9uLCBmdWxsVGV4dC5sZW5ndGgpOwogICAgICAgICAgcmV0dXJuIHsKICAgICAgICAgICAgYmVmb3JlOiBmdWxsVGV4dC5zdWJzdHJpbmcoMCwgcG9zKSwKICAgICAgICAgICAgYWZ0ZXI6IGZ1bGxUZXh0LnN1YnN0cmluZyhwb3MpCiAgICAgICAgICB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBjdXJzb3JQb3MgPSB0aGlzLmdldEN1cnNvclBvc2l0aW9uKGVkaXRhYmxlRWxlbWVudCk7CiAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBwb3NpdGlvbiBmb3IgSFRNTCBzcGxpdDoiLCBjdXJzb3JQb3MpOwogICAgICBpZiAoY3Vyc29yUG9zID09PSBudWxsIHx8IGN1cnNvclBvcyA9PT0gMCkgewogICAgICAgIGNvbnNvbGUubG9nKCJnZXRTcGxpdENvbnRlbnQ6IEN1cnNvciBhdCBzdGFydCBvciBudWxsLCBtb3ZpbmcgYWxsIGNvbnRlbnQiKTsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYmVmb3JlOiAiIiwKICAgICAgICAgIGFmdGVyOiBlZGl0YWJsZUVsZW1lbnQuaW5uZXJIVE1MCiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCBiZWZvcmVSYW5nZSA9IGRvY3VtZW50LmNyZWF0ZVJhbmdlKCk7CiAgICAgIGNvbnN0IGFmdGVyUmFuZ2UgPSBkb2N1bWVudC5jcmVhdGVSYW5nZSgpOwogICAgICBiZWZvcmVSYW5nZS5zZXRTdGFydChlZGl0YWJsZUVsZW1lbnQsIDApOwogICAgICBiZWZvcmVSYW5nZS5zZXRFbmQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0U3RhcnQoc2VsZWN0aW9uSW5mby5zdGFydENvbnRhaW5lciwgc2VsZWN0aW9uSW5mby5zdGFydE9mZnNldCk7CiAgICAgIGFmdGVyUmFuZ2Uuc2V0RW5kKGVkaXRhYmxlRWxlbWVudCwgZWRpdGFibGVFbGVtZW50LmNoaWxkTm9kZXMubGVuZ3RoKTsKICAgICAgY29uc3QgYmVmb3JlRnJhZ21lbnQgPSBiZWZvcmVSYW5nZS5jbG9uZUNvbnRlbnRzKCk7CiAgICAgIGNvbnN0IGFmdGVyRnJhZ21lbnQgPSBhZnRlclJhbmdlLmNsb25lQ29udGVudHMoKTsKICAgICAgY29uc3QgdGVtcERpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGJlZm9yZUZyYWdtZW50KTsKICAgICAgY29uc3QgYmVmb3JlSHRtbCA9IHRlbXBEaXYuaW5uZXJIVE1MOwogICAgICB0ZW1wRGl2LmlubmVySFRNTCA9ICIiOwogICAgICB0ZW1wRGl2LmFwcGVuZENoaWxkKGFmdGVyRnJhZ21lbnQpOwogICAgICBjb25zdCBhZnRlckh0bWwgPSB0ZW1wRGl2LmlubmVySFRNTDsKICAgICAgY29uc29sZS5sb2coImdldFNwbGl0Q29udGVudDogRmluYWwgc3BsaXQgcmVzdWx0OiIsIHsKICAgICAgICBjdXJzb3JQb3MsCiAgICAgICAgYmVmb3JlSHRtbCwKICAgICAgICBiZWZvcmVMZW5ndGg6IGJlZm9yZUh0bWwubGVuZ3RoLAogICAgICAgIGJlZm9yZUh0bWxQcmV2aWV3OiBiZWZvcmVIdG1sLnN1YnN0cmluZygwLCAxMDApICsgKGJlZm9yZUh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIiksCiAgICAgICAgYWZ0ZXJIdG1sLAogICAgICAgIGFmdGVyTGVuZ3RoOiBhZnRlckh0bWwubGVuZ3RoLAogICAgICAgIGFmdGVySHRtbFByZXZpZXc6IGFmdGVySHRtbC5zdWJzdHJpbmcoMCwgMTAwKSArIChhZnRlckh0bWwubGVuZ3RoID4gMTAwID8gIi4uLiIgOiAiIikKICAgICAgfSk7CiAgICAgIHJldHVybiB7CiAgICAgICAgYmVmb3JlOiBiZWZvcmVIdG1sLAogICAgICAgIGFmdGVyOiBhZnRlckh0bWwKICAgICAgfTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjQoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNXeXNpd3lnQmxvY2syID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1pbnB1dC9kZWVzLWlucHV0LXd5c2l3eWcvZGVlcy1pbnB1dC13eXNpd3lnLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTY0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0lucHV0V3lzaXd5ZyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtaW5wdXQtd3lzaXd5ZyIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibG9ja3NfZGVjb3JhdG9yczsKICBsZXQgX2Jsb2Nrc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2Jsb2Nrc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9yczsKICBsZXQgX2RyYWdnZWRCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJCbG9ja0lkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFRleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0V3lzaXd5ZzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF92YWx1ZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2Jsb2Nrc19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ2dlZEJsb2NrSWRfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2RyYWdPdmVyQmxvY2tJZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfc2VsZWN0ZWRUZXh0X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY0KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX291dHB1dEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRGb3JtYXQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dEZvcm1hdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dEZvcm1hdCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRGb3JtYXRfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2Jsb2Nrc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJibG9ja3MiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImJsb2NrcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5ibG9ja3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmJsb2NrcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX2RyYWdnZWRCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdnZWRCbG9ja0lkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnZ2VkQmxvY2tJZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kcmFnZ2VkQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ2dlZEJsb2NrSWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ2dlZEJsb2NrSWRfaW5pdGlhbGl6ZXJzLCBfZHJhZ2dlZEJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJCbG9ja0lkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRyYWdPdmVyQmxvY2tJZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZHJhZ092ZXJCbG9ja0lkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyQmxvY2tJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHJhZ092ZXJCbG9ja0lkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NCh0aGlzLCBudWxsLCBfZHJhZ092ZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJkcmFnT3ZlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkcmFnT3ZlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmRyYWdPdmVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmRyYWdPdmVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHJhZ092ZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9kcmFnT3ZlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQodGhpcywgbnVsbCwgX3NlbGVjdGVkVGV4dF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFRleHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFRleHRfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRUZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDA7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dEZvcm1hdF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfb3V0cHV0Rm9ybWF0X2luaXRpYWxpemVycywgImh0bWwiKSk7CiAgICBnZXQgb3V0cHV0Rm9ybWF0KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgb3V0cHV0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9vdXRwdXRGb3JtYXRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9ibG9ja3NfaW5pdGlhbGl6ZXJzLCBbCiAgICAgIHsKICAgICAgICBpZDogV3lzaXd5Z1Nob3J0Y3V0cy5nZW5lcmF0ZUJsb2NrSWQoKSwKICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICBjb250ZW50OiAiIgogICAgICB9CiAgICBdKSk7CiAgICBnZXQgYmxvY2tzKCkgewogICAgICByZXR1cm4gdGhpcy4jYmxvY2tzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYmxvY2tzKHZhbHVlMikgewogICAgICB0aGlzLiNibG9ja3NfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIC8vIE5vdCB1c2luZyBAc3RhdGUgdG8gYXZvaWQgcmUtcmVuZGVycyB3aGVuIHNlbGVjdGlvbiBjaGFuZ2VzCiAgICBzZWxlY3RlZEJsb2NrSWQgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfYmxvY2tzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICAvLyBTbGFzaCBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgc2xhc2hNZW51ID0gRGVlc1NsYXNoTWVudS5nZXRJbnN0YW5jZSgpOwogICAgI2RyYWdnZWRCbG9ja0lkX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpOwogICAgZ2V0IGRyYWdnZWRCbG9ja0lkKCkgewogICAgICByZXR1cm4gdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnZ2VkQmxvY2tJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ2dlZEJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnZ2VkQmxvY2tJZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX2RyYWdPdmVyQmxvY2tJZF9pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBkcmFnT3ZlckJsb2NrSWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlckJsb2NrSWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBkcmFnT3ZlckJsb2NrSWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2RyYWdPdmVyQmxvY2tJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2RyYWdPdmVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlckJsb2NrSWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY1KHRoaXMsIF9kcmFnT3ZlclBvc2l0aW9uX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGRyYWdPdmVyUG9zaXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkcmFnT3ZlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZHJhZ092ZXJQb3NpdGlvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZHJhZ092ZXJQb3NpdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gRm9ybWF0dGluZyBtZW51IGlzIG5vdyBnbG9iYWxseSByZW5kZXJlZAogICAgZm9ybWF0dGluZ01lbnUgPSAoX19ydW5Jbml0aWFsaXplcnM2NSh0aGlzLCBfZHJhZ092ZXJQb3NpdGlvbl9leHRyYUluaXRpYWxpemVycyksIERlZXNGb3JtYXR0aW5nTWVudS5nZXRJbnN0YW5jZSgpKTsKICAgICNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBzZWxlY3RlZFRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzZWxlY3RlZFRleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZFRleHQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3NlbGVjdGVkVGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgZWRpdG9yQ29udGVudFJlZiA9IF9fcnVuSW5pdGlhbGl6ZXJzNjUodGhpcywgX3NlbGVjdGVkVGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICBpc0NvbXBvc2luZyA9IGZhbHNlOwogICAgLy8gSGFuZGxlciBpbnN0YW5jZXMKICAgIGJsb2NrT3BlcmF0aW9uczsKICAgIGlucHV0SGFuZGxlcjsKICAgIGtleWJvYXJkSGFuZGxlcjsKICAgIGRyYWdEcm9wSGFuZGxlcjsKICAgIGhpc3Rvcnk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICB3eXNpd3lnU3R5bGVzCiAgICBdOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zID0gbmV3IFd5c2l3eWdCbG9ja09wZXJhdGlvbnModGhpcyk7CiAgICAgIHRoaXMuaW5wdXRIYW5kbGVyID0gbmV3IFd5c2l3eWdJbnB1dEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMua2V5Ym9hcmRIYW5kbGVyID0gbmV3IFd5c2l3eWdLZXlib2FyZEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuZHJhZ0Ryb3BIYW5kbGVyID0gbmV3IFd5c2l3eWdEcmFnRHJvcEhhbmRsZXIodGhpcyk7CiAgICAgIHRoaXMuaGlzdG9yeSA9IG5ldyBXeXNpd3lnSGlzdG9yeSgpOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgYXdhaXQgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy5pbnB1dEhhbmRsZXI/LmRlc3Ryb3koKTsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgICAgdGhpcy5ibHVyVGltZW91dCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGZpcnN0VXBkYXRlZCgpIHsKICAgICAgaWYgKHRoaXMudmFsdWUgJiYgdGhpcy52YWx1ZS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgIGNvbnN0IHBhcnNlZEJsb2NrcyA9IHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIgPyBXeXNpd3lnQ29udmVydGVycy5wYXJzZUh0bWxUb0Jsb2Nrcyh0aGlzLnZhbHVlKSA6IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlTWFya2Rvd25Ub0Jsb2Nrcyh0aGlzLnZhbHVlKTsKICAgICAgICBpZiAocGFyc2VkQmxvY2tzLmxlbmd0aCA+IDApIHsKICAgICAgICAgIHRoaXMuYmxvY2tzID0gcGFyc2VkQmxvY2tzOwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuZWRpdG9yLWNvbnRlbnQiKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsIChlMTEpID0+IHRoaXMuaGFuZGxlRWRpdG9yQ2xpY2soZTExKSk7CiAgICAgIH0KICAgICAgdGhpcy5hZGRFdmVudExpc3RlbmVyKCJibG9jay10ZXh0LXNlbGVjdGVkIiwgKGUxMSkgPT4gewogICAgICAgIGlmICghdGhpcy5zbGFzaE1lbnUudmlzaWJsZSAmJiBlMTEuZGV0YWlsLmhhc1NlbGVjdGlvbiAmJiBlMTEuZGV0YWlsLnRleHQubGVuZ3RoID4gMCkgewogICAgICAgICAgdGhpcy5zZWxlY3RlZFRleHQgPSBlMTEuZGV0YWlsLnRleHQ7CiAgICAgICAgICBpZiAoZTExLmRldGFpbC5yZWN0KSB7CiAgICAgICAgICAgIGNvbnN0IGNvb3JkcyA9IHsKICAgICAgICAgICAgICB4OiBlMTEuZGV0YWlsLnJlY3QubGVmdCArIGUxMS5kZXRhaWwucmVjdC53aWR0aCAvIDIsCiAgICAgICAgICAgICAgeTogTWF0aC5tYXgoNDUsIGUxMS5kZXRhaWwucmVjdC50b3AgLSA0NSkKICAgICAgICAgICAgfTsKICAgICAgICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5zaG93KGNvb3JkcywgYXN5bmMgKGNvbW1hbmQpID0+IGF3YWl0IHRoaXMuYXBwbHlGb3JtYXQoY29tbWFuZCkpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCBmb3JtYXR0aW5nTWVudUVsZW1lbnQgPSB0aGlzLmZvcm1hdHRpbmdNZW51LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5mb3JtYXR0aW5nLW1lbnUiKTsKICAgICAgICBpZiAoZm9ybWF0dGluZ01lbnVFbGVtZW50ICYmIGZvcm1hdHRpbmdNZW51RWxlbWVudC5jb250YWlucyhlMTEudGFyZ2V0KSkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCBzZWxlY3Rpb24gPSB3aW5kb3cuZ2V0U2VsZWN0aW9uKCk7CiAgICAgICAgaWYgKHNlbGVjdGlvbiAmJiBzZWxlY3Rpb24udG9TdHJpbmcoKS50cmltKCkubGVuZ3RoID4gMCkgewogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5mb3JtYXR0aW5nTWVudS52aXNpYmxlKSB7CiAgICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMuYWRkRXZlbnRMaXN0ZW5lcigia2V5ZG93biIsIChlMTEpID0+IHsKICAgICAgICBjb25zdCB0YXJnZXQgPSBlMTEudGFyZ2V0OwogICAgICAgIGlmICghdGhpcy5jb250YWlucyh0YXJnZXQpICYmICF0aGlzLnNoYWRvd1Jvb3Q/LmNvbnRhaW5zKHRhcmdldCkpIHsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgaWYgKChlMTEubWV0YUtleSB8fCBlMTEuY3RybEtleSkgJiYgIWUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy51bmRvKCk7CiAgICAgICAgfSBlbHNlIGlmICgoZTExLm1ldGFLZXkgfHwgZTExLmN0cmxLZXkpICYmIGUxMS5zaGlmdEtleSAmJiBlMTEua2V5ID09PSAieiIpIHsKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5yZWRvKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5oaXN0b3J5LnNhdmVTdGF0ZSh0aGlzLmJsb2NrcywgdGhpcy5zZWxlY3RlZEJsb2NrSWQpOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgIH0KICAgIC8qKgogICAgICogUmVuZGVycyBhbGwgYmxvY2tzIHByb2dyYW1tYXRpY2FsbHkgd2l0aG91dCB0cmlnZ2VyaW5nIHJlLXJlbmRlcnMKICAgICAqLwogICAgcmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRvckNvbnRlbnRSZWYpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLmVkaXRvckNvbnRlbnRSZWYuaW5uZXJIVE1MID0gIiI7CiAgICAgIHRoaXMuYmxvY2tzLmZvckVhY2goKGJsb2NrKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tXcmFwcGVyID0gdGhpcy5jcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spOwogICAgICAgIHRoaXMuZWRpdG9yQ29udGVudFJlZi5hcHBlbmRDaGlsZChibG9ja1dyYXBwZXIpOwogICAgICB9KTsKICAgIH0KICAgIC8qKgogICAgICogQ3JlYXRlcyBhIGJsb2NrIGVsZW1lbnQgcHJvZ3JhbW1hdGljYWxseQogICAgICovCiAgICBjcmVhdGVCbG9ja0VsZW1lbnQoYmxvY2spIHsKICAgICAgY29uc3Qgd3JhcHBlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICB3cmFwcGVyLmNsYXNzTmFtZSA9ICJibG9jay13cmFwcGVyIjsKICAgICAgd3JhcHBlci5zZXRBdHRyaWJ1dGUoImRhdGEtYmxvY2staWQiLCBibG9jay5pZCk7CiAgICAgIGlmIChibG9jay50eXBlICE9PSAiZGl2aWRlciIpIHsKICAgICAgICBjb25zdCBkcmFnSGFuZGxlID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgZHJhZ0hhbmRsZS5jbGFzc05hbWUgPSAiZHJhZy1oYW5kbGUiOwogICAgICAgIGRyYWdIYW5kbGUuZHJhZ2dhYmxlID0gdHJ1ZTsKICAgICAgICBkcmFnSGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdzdGFydCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdTdGFydChlMTEsIGJsb2NrKSk7CiAgICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChkcmFnSGFuZGxlKTsKICAgICAgfQogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBibG9ja0NvbXBvbmVudC5ibG9jayA9IGJsb2NrOwogICAgICBibG9ja0NvbXBvbmVudC5pc1NlbGVjdGVkID0gdGhpcy5zZWxlY3RlZEJsb2NrSWQgPT09IGJsb2NrLmlkOwogICAgICBibG9ja0NvbXBvbmVudC53eXNpd3lnQ29tcG9uZW50ID0gdGhpczsKICAgICAgYmxvY2tDb21wb25lbnQuaGFuZGxlcnMgPSB7CiAgICAgICAgb25JbnB1dDogKGUxMSkgPT4gdGhpcy5pbnB1dEhhbmRsZXIuaGFuZGxlQmxvY2tJbnB1dChlMTEsIGJsb2NrKSwKICAgICAgICBvbktleURvd246IChlMTEpID0+IHRoaXMua2V5Ym9hcmRIYW5kbGVyLmhhbmRsZUJsb2NrS2V5RG93bihlMTEsIGJsb2NrKSwKICAgICAgICBvbkZvY3VzOiAoKSA9PiB0aGlzLmhhbmRsZUJsb2NrRm9jdXMoYmxvY2spLAogICAgICAgIG9uQmx1cjogKCkgPT4gdGhpcy5oYW5kbGVCbG9ja0JsdXIoYmxvY2spLAogICAgICAgIG9uQ29tcG9zaXRpb25TdGFydDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IHRydWUsCiAgICAgICAgb25Db21wb3NpdGlvbkVuZDogKCkgPT4gdGhpcy5pc0NvbXBvc2luZyA9IGZhbHNlLAogICAgICAgIG9uTW91c2VVcDogKGUxMSkgPT4gdGhpcy5oYW5kbGVUZXh0U2VsZWN0aW9uKGUxMSksCiAgICAgICAgb25SZXF1ZXN0VXBkYXRlOiAoKSA9PiB0aGlzLnVwZGF0ZUJsb2NrRWxlbWVudChibG9jay5pZCkKICAgICAgfTsKICAgICAgd3JhcHBlci5hcHBlbmRDaGlsZChibG9ja0NvbXBvbmVudCk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJhZ292ZXIiLCAoZTExKSA9PiB0aGlzLmRyYWdEcm9wSGFuZGxlci5oYW5kbGVEcmFnT3ZlcihlMTEsIGJsb2NrKSk7CiAgICAgIHdyYXBwZXIuYWRkRXZlbnRMaXN0ZW5lcigiZHJvcCIsIChlMTEpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyb3AoZTExLCBibG9jaykpOwogICAgICB3cmFwcGVyLmFkZEV2ZW50TGlzdGVuZXIoImRyYWdsZWF2ZSIsICgpID0+IHRoaXMuZHJhZ0Ryb3BIYW5kbGVyLmhhbmRsZURyYWdMZWF2ZShibG9jaykpOwogICAgICByZXR1cm4gd3JhcHBlcjsKICAgIH0KICAgIC8qKgogICAgICogVXBkYXRlcyBhIHNwZWNpZmljIGJsb2NrIGVsZW1lbnQKICAgICAqLwogICAgdXBkYXRlQmxvY2tFbGVtZW50KGJsb2NrSWQpIHsKICAgICAgY29uc3QgYmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IGJsb2NrSWQpOwogICAgICBpZiAoIWJsb2NrKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yKGBbZGF0YS1ibG9jay1pZD0iJHtibG9ja0lkfSJdYCk7CiAgICAgIGlmICghd3JhcHBlcikKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChibG9jayk7CiAgICAgIHdyYXBwZXIucmVwbGFjZVdpdGgobmV3V3JhcHBlcik7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiB1M2AKICAgICAgPGRlZXMtbGFiZWwKICAgICAgICAubGFiZWw9IiR7dGhpcy5sYWJlbH0iCiAgICAgICAgLmRlc2NyaXB0aW9uPSIke3RoaXMuZGVzY3JpcHRpb259IgogICAgICAgIC5yZXF1aXJlZD0iJHt0aGlzLnJlcXVpcmVkfSIKICAgICAgPjwvZGVlcy1sYWJlbD4KICAgICAgPGRpdiBjbGFzcz0id3lzaXd5Zy1jb250YWluZXIiPgogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0iZWRpdG9yLWNvbnRlbnQgJHt0aGlzLmRyYWdnZWRCbG9ja0lkID8gImRyYWdnaW5nIiA6ICIifSIKICAgICAgICAgIGlkPSJlZGl0b3ItY29udGVudCIKICAgICAgICA+CiAgICAgICAgICA8IS0tIEJsb2NrcyB3aWxsIGJlIHJlbmRlcmVkIHByb2dyYW1tYXRpY2FsbHkgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIC8vIE9sZCByZW5kZXJCbG9jayBtZXRob2QgcmVtb3ZlZCAtIHVzaW5nIHByb2dyYW1tYXRpYyByZW5kZXJpbmcgaW5zdGVhZAogICAgaGFuZGxlU2xhc2hNZW51S2V5Ym9hcmQoZTExKSB7CiAgICAgIHN3aXRjaCAoZTExLmtleSkgewogICAgICAgIGNhc2UgIkFycm93RG93biI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51Lm5hdmlnYXRlKCJkb3duIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJBcnJvd1VwIjoKICAgICAgICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgICAgdGhpcy5zbGFzaE1lbnUubmF2aWdhdGUoInVwIik7CiAgICAgICAgICBicmVhazsKICAgICAgICBjYXNlICJFbnRlciI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuc2xhc2hNZW51LnNlbGVjdEN1cnJlbnQoKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIkVzY2FwZSI6CiAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgIHRoaXMuY2xvc2VTbGFzaE1lbnUodHJ1ZSk7CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfQogICAgY2xvc2VTbGFzaE1lbnUoY2xlYXJTbGFzaCA9IGZhbHNlKSB7CiAgICAgIGlmIChjbGVhclNsYXNoICYmIHRoaXMuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgY29uc3QgY3VycmVudEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSB0aGlzLnNlbGVjdGVkQmxvY2tJZCk7CiAgICAgICAgaWYgKGN1cnJlbnRCbG9jaykgewogICAgICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgICBjb25zdCBjb250ZW50MyA9IGJsb2NrQ29tcG9uZW50LmdldENvbnRlbnQoKTsKICAgICAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgICAgIGNvbnN0IGNsZWFuQ29udGVudCA9IGNvbnRlbnQzLnJlcGxhY2UoL15cL1teXHNdKlxzKi8sICIiKS50cmltKCk7CiAgICAgICAgICAgICAgYmxvY2tDb21wb25lbnQuc2V0Q29udGVudChjbGVhbkNvbnRlbnQpOwogICAgICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgICAgICAgIHJlcXVlc3RBbmltYXRpb25GcmFtZSgoKSA9PiB7CiAgICAgICAgICAgICAgICBibG9ja0NvbXBvbmVudC5mb2N1c1dpdGhDdXJzb3IoMCk7CiAgICAgICAgICAgICAgfSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgdGhpcy5zbGFzaE1lbnUuaGlkZSgpOwogICAgfQogICAgaGFuZGxlQmxvY2tGb2N1cyhibG9jaykgewogICAgICBpZiAodGhpcy5ibHVyVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLmJsdXJUaW1lb3V0KTsKICAgICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gbnVsbDsKICAgICAgfQogICAgICBjb25zdCBwcmV2U2VsZWN0ZWRJZCA9IHRoaXMuc2VsZWN0ZWRCbG9ja0lkOwogICAgICB0aGlzLnNlbGVjdGVkQmxvY2tJZCA9IGJsb2NrLmlkOwogICAgICBpZiAocHJldlNlbGVjdGVkSWQgIT09IGJsb2NrLmlkKSB7CiAgICAgICAgaWYgKHByZXZTZWxlY3RlZElkKSB7CiAgICAgICAgICBjb25zdCBwcmV2V3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7cHJldlNlbGVjdGVkSWR9Il1gKTsKICAgICAgICAgIGNvbnN0IHByZXZCbG9ja0NvbXBvbmVudCA9IHByZXZXcmFwcGVyPy5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgICAgIGlmIChwcmV2QmxvY2tDb21wb25lbnQpIHsKICAgICAgICAgICAgcHJldkJsb2NrQ29tcG9uZW50LmlzU2VsZWN0ZWQgPSBmYWxzZTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgY29uc3Qgd3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7YmxvY2suaWR9Il1gKTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCkgewogICAgICAgICAgYmxvY2tDb21wb25lbnQuaXNTZWxlY3RlZCA9IHRydWU7CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBibHVyVGltZW91dCA9IG51bGw7CiAgICBoYW5kbGVCbG9ja0JsdXIoYmxvY2spIHsKICAgICAgaWYgKHRoaXMuYmx1clRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5ibHVyVGltZW91dCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgd3JhcHBlckVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2Jsb2NrLmlkfSJdYCk7CiAgICAgIGNvbnN0IGJsb2NrQ29tcG9uZW50ID0gd3JhcHBlckVsZW1lbnQ/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICBpZiAoYmxvY2tDb21wb25lbnQgJiYgYmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCkgewogICAgICAgIGNvbnN0IG5ld0NvbnRlbnQgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGJsb2NrLmNvbnRlbnQgIT09IG5ld0NvbnRlbnQpIHsKICAgICAgICAgIGJsb2NrLmNvbnRlbnQgPSBuZXdDb250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmJsdXJUaW1lb3V0ID0gc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgYWN0aXZlRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdD8uYWN0aXZlRWxlbWVudDsKICAgICAgICBjb25zdCBpc0Jsb2NrRm9jdXNlZCA9IGFjdGl2ZUVsZW1lbnQ/LmNsYXNzTGlzdC5jb250YWlucygiYmxvY2siKTsKICAgICAgICBpZiAoIWlzQmxvY2tGb2N1c2VkKSB7CiAgICAgICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgICAgfQogICAgICB9LCAxMDApOwogICAgfQogICAgaGFuZGxlRWRpdG9yQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS50YXJnZXQ7CiAgICAgIGlmICh0aGlzLnNsYXNoTWVudS52aXNpYmxlKSB7CiAgICAgICAgdGhpcy5jbG9zZVNsYXNoTWVudSh0cnVlKTsKICAgICAgfQogICAgICBpZiAodGFyZ2V0LmNsYXNzTGlzdC5jb250YWlucygiZWRpdG9yLWNvbnRlbnQiKSkgewogICAgICAgIGNvbnN0IGxhc3RCbG9jayA9IHRoaXMuYmxvY2tzW3RoaXMuYmxvY2tzLmxlbmd0aCAtIDFdOwogICAgICAgIHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobGFzdEJsb2NrLmlkLCBsYXN0QmxvY2sudHlwZSA9PT0gImRpdmlkZXIiIHx8IGxhc3RCbG9jay50eXBlID09PSAiaW1hZ2UiID8gdm9pZCAwIDogImVuZCIpOwogICAgICB9CiAgICB9CiAgICBjcmVhdGVOZXdCbG9jayh0eXBlNSA9ICJwYXJhZ3JhcGgiLCBjb250ZW50MyA9ICIiLCBtZXRhZGF0YSkgewogICAgICByZXR1cm4gewogICAgICAgIGlkOiBXeXNpd3lnU2hvcnRjdXRzLmdlbmVyYXRlQmxvY2tJZCgpLAogICAgICAgIHR5cGU6IHR5cGU1LAogICAgICAgIGNvbnRlbnQ6IGNvbnRlbnQzLAogICAgICAgIC4uLm1ldGFkYXRhICYmIHsgbWV0YWRhdGEgfQogICAgICB9OwogICAgfQogICAgYXN5bmMgaW5zZXJ0QmxvY2tBZnRlcihhZnRlckJsb2NrLCBuZXdCbG9jaywgZm9jdXNOZXdCbG9jayA9IHRydWUpIHsKICAgICAgY29uc3QgYmxvY2tJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSBhZnRlckJsb2NrLmlkKTsKICAgICAgdGhpcy5ibG9ja3MgPSBbLi4udGhpcy5ibG9ja3Muc2xpY2UoMCwgYmxvY2tJbmRleCArIDEpLCBuZXdCbG9jaywgLi4udGhpcy5ibG9ja3Muc2xpY2UoYmxvY2tJbmRleCArIDEpXTsKICAgICAgY29uc3QgYWZ0ZXJXcmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2FmdGVyQmxvY2suaWR9Il1gKTsKICAgICAgaWYgKGFmdGVyV3JhcHBlcikgewogICAgICAgIGNvbnN0IG5ld1dyYXBwZXIgPSB0aGlzLmNyZWF0ZUJsb2NrRWxlbWVudChuZXdCbG9jayk7CiAgICAgICAgYWZ0ZXJXcmFwcGVyLmluc2VydEFkamFjZW50RWxlbWVudCgiYWZ0ZXJlbmQiLCBuZXdXcmFwcGVyKTsKICAgICAgfQogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIGlmIChmb2N1c05ld0Jsb2NrICYmIG5ld0Jsb2NrLnR5cGUgIT09ICJkaXZpZGVyIikgewogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gc2V0VGltZW91dChyZXNvbHZlMiwgMCkpOwogICAgICAgIGF3YWl0IHRoaXMuYmxvY2tPcGVyYXRpb25zLmZvY3VzQmxvY2sobmV3QmxvY2suaWQsICJzdGFydCIpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbnNlcnRCbG9jayh0eXBlNSkgewogICAgICBjb25zdCBjdXJyZW50QmxvY2sgPSB0aGlzLmJsb2Nrcy5maW5kKChiNSkgPT4gYjUuaWQgPT09IHRoaXMuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgaWYgKCFjdXJyZW50QmxvY2spIHsKICAgICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGNvbnN0IHdyYXBwZXJFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke2N1cnJlbnRCbG9jay5pZH0iXWApOwogICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXJFbGVtZW50Py5xdWVyeVNlbGVjdG9yKCJkZWVzLXd5c2l3eWctYmxvY2siKTsKICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgY29uc3QgY29udGVudDMgPSBibG9ja0NvbXBvbmVudC5nZXRDb250ZW50KCk7CiAgICAgICAgaWYgKGNvbnRlbnQzLnN0YXJ0c1dpdGgoIi8iKSkgewogICAgICAgICAgY29uc3QgY2xlYW5Db250ZW50ID0gY29udGVudDMucmVwbGFjZSgvXlwvW15cc10qXHMqLywgIiIpLnRyaW0oKTsKICAgICAgICAgIGJsb2NrQ29tcG9uZW50LnNldENvbnRlbnQoY2xlYW5Db250ZW50KTsKICAgICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY2xlYW5Db250ZW50OwogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLmNsb3NlU2xhc2hNZW51KGZhbHNlKTsKICAgICAgaWYgKHR5cGU1ID09PSAiY29kZSIpIHsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGxhbmd1YWdlOiAidHlwZXNjcmlwdCIgfTsKICAgICAgfQogICAgICBjdXJyZW50QmxvY2sudHlwZSA9IHR5cGU1OwogICAgICBjdXJyZW50QmxvY2suY29udGVudCA9IGN1cnJlbnRCbG9jay5jb250ZW50IHx8ICIiOwogICAgICBpZiAodHlwZTUgPT09ICJkaXZpZGVyIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiAiOwogICAgICAgIGNvbnN0IG5ld0Jsb2NrID0gdGhpcy5jcmVhdGVOZXdCbG9jaygpOwogICAgICAgIHRoaXMuaW5zZXJ0QmxvY2tBZnRlcihjdXJyZW50QmxvY2ssIG5ld0Jsb2NrKTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImxpc3QiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBsaXN0VHlwZTogImJ1bGxldCIgfTsKICAgICAgICBjdXJyZW50QmxvY2suY29udGVudCA9ICIiOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAiaW1hZ2UiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IHVybDogIiIsIGxvYWRpbmc6IGZhbHNlIH07CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJ5b3V0dWJlIikgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gIiI7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyB2aWRlb0lkOiAiIiwgdXJsOiAiIiB9OwogICAgICB9IGVsc2UgaWYgKHR5cGU1ID09PSAibWFya2Rvd24iKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImh0bWwiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLm1ldGFkYXRhID0geyBzaG93UHJldmlldzogZmFsc2UgfTsKICAgICAgfSBlbHNlIGlmICh0eXBlNSA9PT0gImF0dGFjaG1lbnQiKSB7CiAgICAgICAgY3VycmVudEJsb2NrLmNvbnRlbnQgPSAiIjsKICAgICAgICBjdXJyZW50QmxvY2subWV0YWRhdGEgPSB7IGZpbGVzOiBbXSB9OwogICAgICB9IGVsc2UgewogICAgICAgIGN1cnJlbnRCbG9jay5jb250ZW50ID0gY3VycmVudEJsb2NrLmNvbnRlbnQgfHwgIiI7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVCbG9ja0VsZW1lbnQoY3VycmVudEJsb2NrLmlkKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDApKTsKICAgICAgaWYgKHR5cGU1ID09PSAibGlzdCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgICAgcmVxdWVzdEFuaW1hdGlvbkZyYW1lKCgpID0+IHsKICAgICAgICAgIGNvbnN0IGJsb2NrV3JhcHBlciA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7Y3VycmVudEJsb2NrLmlkfSJdYCk7CiAgICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudDIgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50MikgewogICAgICAgICAgICBibG9ja0NvbXBvbmVudDIuZm9jdXNMaXN0SXRlbSgpOwogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9IGVsc2UgaWYgKHR5cGU1ICE9PSAiZGl2aWRlciIgJiYgdHlwZTUgIT09ICJpbWFnZSIgJiYgdHlwZTUgIT09ICJ5b3V0dWJlIiAmJiB0eXBlNSAhPT0gIm1hcmtkb3duIiAmJiB0eXBlNSAhPT0gImh0bWwiICYmIHR5cGU1ICE9PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCwgInN0YXJ0Iik7CiAgICAgIH0gZWxzZSBpZiAodHlwZTUgPT09ICJpbWFnZSIgfHwgdHlwZTUgPT09ICJ5b3V0dWJlIiB8fCB0eXBlNSA9PT0gIm1hcmtkb3duIiB8fCB0eXBlNSA9PT0gImh0bWwiIHx8IHR5cGU1ID09PSAiYXR0YWNobWVudCIpIHsKICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKGN1cnJlbnRCbG9jay5pZCk7CiAgICAgIH0KICAgIH0KICAgIHVwZGF0ZVZhbHVlKCkgewogICAgICBpZiAodGhpcy5vdXRwdXRGb3JtYXQgPT09ICJodG1sIikgewogICAgICAgIHRoaXMudmFsdWUgPSBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZhbHVlID0gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgICB9CiAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMudmFsdWUpOwogICAgICB0aGlzLnNhdmVUb0hpc3RvcnkodHJ1ZSk7CiAgICB9CiAgICBnZXRWYWx1ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMudmFsdWU7CiAgICB9CiAgICBzZXRWYWx1ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy52YWx1ZSA9IHZhbHVlMjsKICAgICAgaWYgKHRoaXMub3V0cHV0Rm9ybWF0ID09PSAiaHRtbCIpIHsKICAgICAgICB0aGlzLmJsb2NrcyA9IFd5c2l3eWdDb252ZXJ0ZXJzLnBhcnNlSHRtbFRvQmxvY2tzKHZhbHVlMik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBXeXNpd3lnQ29udmVydGVycy5wYXJzZU1hcmtkb3duVG9CbG9ja3ModmFsdWUyKTsKICAgICAgfQogICAgICBpZiAodGhpcy5ibG9ja3MubGVuZ3RoID09PSAwKSB7CiAgICAgICAgdGhpcy5ibG9ja3MgPSBbewogICAgICAgICAgaWQ6IFd5c2l3eWdTaG9ydGN1dHMuZ2VuZXJhdGVCbG9ja0lkKCksCiAgICAgICAgICB0eXBlOiAicGFyYWdyYXBoIiwKICAgICAgICAgIGNvbnRlbnQ6ICIiCiAgICAgICAgfV07CiAgICAgIH0KICAgICAgdGhpcy5jaGFuZ2VTdWJqZWN0Lm5leHQodGhpcy52YWx1ZSk7CiAgICAgIGlmICh0aGlzLmVkaXRvckNvbnRlbnRSZWYpIHsKICAgICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBFeHBvcnQgdGhlIGVkaXRvciBjb250ZW50IGFzIHJhdyBibG9ja3MgKGxvc3NsZXNzKQogICAgICovCiAgICBleHBvcnRCbG9ja3MoKSB7CiAgICAgIHJldHVybiBKU09OLnBhcnNlKEpTT04uc3RyaW5naWZ5KHRoaXMuYmxvY2tzKSk7CiAgICB9CiAgICAvKioKICAgICAqIEltcG9ydCByYXcgYmxvY2tzIChsb3NzbGVzcykKICAgICAqLwogICAgaW1wb3J0QmxvY2tzKGJsb2NrcykgewogICAgICB0aGlzLmJsb2NrcyA9IEpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoYmxvY2tzKSk7CiAgICAgIHRoaXMudXBkYXRlVmFsdWUoKTsKICAgICAgaWYgKHRoaXMuZWRpdG9yQ29udGVudFJlZikgewogICAgICAgIHRoaXMucmVuZGVyQmxvY2tzUHJvZ3JhbW1hdGljYWxseSgpOwogICAgICB9CiAgICB9CiAgICAvKioKICAgICAqIEV4cG9ydCBjb250ZW50IGFzIEhUTUwgcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc0h0bWwoKSB7CiAgICAgIHJldHVybiBXeXNpd3lnQ29udmVydGVycy5nZXRIdG1sT3V0cHV0KHRoaXMuYmxvY2tzKTsKICAgIH0KICAgIC8qKgogICAgICogRXhwb3J0IGNvbnRlbnQgYXMgTWFya2Rvd24gcmVnYXJkbGVzcyBvZiBvdXRwdXRGb3JtYXQgc2V0dGluZwogICAgICovCiAgICBleHBvcnRBc01hcmtkb3duKCkgewogICAgICByZXR1cm4gV3lzaXd5Z0NvbnZlcnRlcnMuZ2V0TWFya2Rvd25PdXRwdXQodGhpcy5ibG9ja3MpOwogICAgfQogICAgLyoqCiAgICAgKiBHZXQgYSBKU09OIHJlcHJlc2VudGF0aW9uIG9mIHRoZSBlZGl0b3Igc3RhdGUgKGZvciBzYXZpbmcpCiAgICAgKi8KICAgIGV4cG9ydFN0YXRlKCkgewogICAgICByZXR1cm4gewogICAgICAgIGJsb2NrczogdGhpcy5leHBvcnRCbG9ja3MoKSwKICAgICAgICBvdXRwdXRGb3JtYXQ6IHRoaXMub3V0cHV0Rm9ybWF0CiAgICAgIH07CiAgICB9CiAgICAvKioKICAgICAqIFJlc3RvcmUgZWRpdG9yIHN0YXRlIGZyb20gSlNPTgogICAgICovCiAgICBpbXBvcnRTdGF0ZShzdGF0ZTEyKSB7CiAgICAgIGlmIChzdGF0ZTEyLm91dHB1dEZvcm1hdCkgewogICAgICAgIHRoaXMub3V0cHV0Rm9ybWF0ID0gc3RhdGUxMi5vdXRwdXRGb3JtYXQ7CiAgICAgIH0KICAgICAgdGhpcy5pbXBvcnRCbG9ja3Moc3RhdGUxMi5ibG9ja3MpOwogICAgfQogICAgaGFuZGxlRHJhZ0VuZCgpIHsKICAgICAgaWYgKHRoaXMuZHJhZ2dlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gdGhpcy5lZGl0b3JDb250ZW50UmVmLnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuZHJhZ2dlZEJsb2NrSWR9Il1gKTsKICAgICAgICBpZiAod3JhcHBlcikgewogICAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnZ2luZyIpOwogICAgICAgIH0KICAgICAgfQogICAgICBjb25zdCBhbGxXcmFwcGVycyA9IHRoaXMuZWRpdG9yQ29udGVudFJlZi5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBhbGxXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgd3JhcHBlci5jbGFzc0xpc3QucmVtb3ZlKCJkcmFnLW92ZXItYmVmb3JlIiwgImRyYWctb3Zlci1hZnRlciIpOwogICAgICB9KTsKICAgICAgdGhpcy5lZGl0b3JDb250ZW50UmVmLmNsYXNzTGlzdC5yZW1vdmUoImRyYWdnaW5nIik7CiAgICAgIHRoaXMuZHJhZ2dlZEJsb2NrSWQgPSBudWxsOwogICAgICB0aGlzLmRyYWdPdmVyQmxvY2tJZCA9IG51bGw7CiAgICAgIHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9IG51bGw7CiAgICB9CiAgICBoYW5kbGVEcm9wKGUxMSwgdGFyZ2V0QmxvY2spIHsKICAgICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGlmICghdGhpcy5kcmFnZ2VkQmxvY2tJZCB8fCB0aGlzLmRyYWdnZWRCbG9ja0lkID09PSB0YXJnZXRCbG9jay5pZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGRyYWdnZWRJbmRleCA9IHRoaXMuYmxvY2tzLmZpbmRJbmRleCgoYjUpID0+IGI1LmlkID09PSB0aGlzLmRyYWdnZWRCbG9ja0lkKTsKICAgICAgY29uc3QgdGFyZ2V0SW5kZXggPSB0aGlzLmJsb2Nrcy5maW5kSW5kZXgoKGI1KSA9PiBiNS5pZCA9PT0gdGFyZ2V0QmxvY2suaWQpOwogICAgICBpZiAoZHJhZ2dlZEluZGV4ID09PSAtMSB8fCB0YXJnZXRJbmRleCA9PT0gLTEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBbZHJhZ2dlZEJsb2NrXSA9IHRoaXMuYmxvY2tzLnNwbGljZShkcmFnZ2VkSW5kZXgsIDEpOwogICAgICBsZXQgbmV3SW5kZXggPSB0YXJnZXRJbmRleDsKICAgICAgaWYgKHRoaXMuZHJhZ092ZXJQb3NpdGlvbiA9PT0gImFmdGVyIikgewogICAgICAgIG5ld0luZGV4ID0gZHJhZ2dlZEluZGV4IDwgdGFyZ2V0SW5kZXggPyB0YXJnZXRJbmRleCA6IHRhcmdldEluZGV4ICsgMTsKICAgICAgfSBlbHNlIHsKICAgICAgICBuZXdJbmRleCA9IGRyYWdnZWRJbmRleCA8IHRhcmdldEluZGV4ID8gdGFyZ2V0SW5kZXggLSAxIDogdGFyZ2V0SW5kZXg7CiAgICAgIH0KICAgICAgdGhpcy5ibG9ja3Muc3BsaWNlKG5ld0luZGV4LCAwLCBkcmFnZ2VkQmxvY2spOwogICAgICB0aGlzLnJlbmRlckJsb2Nrc1Byb2dyYW1tYXRpY2FsbHkoKTsKICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgICB0aGlzLmhhbmRsZURyYWdFbmQoKTsKICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgY29uc3QgbW92ZWRCbG9ja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcihgW2RhdGEtYmxvY2staWQ9IiR7ZHJhZ2dlZEJsb2NrLmlkfSJdIC5ibG9ja2ApOwogICAgICAgIGlmIChtb3ZlZEJsb2NrRWxlbWVudCAmJiBkcmFnZ2VkQmxvY2sudHlwZSAhPT0gImRpdmlkZXIiKSB7CiAgICAgICAgICBtb3ZlZEJsb2NrRWxlbWVudC5mb2N1cygpOwogICAgICAgIH0KICAgICAgfSwgMTAwKTsKICAgIH0KICAgIGhhbmRsZVRleHRTZWxlY3Rpb24oX2UpIHsKICAgICAgaWYgKHRoaXMuc2xhc2hNZW51LnZpc2libGUpCiAgICAgICAgcmV0dXJuOwogICAgfQogICAgdXBkYXRlRm9ybWF0dGluZ01lbnVQb3NpdGlvbigpIHsKICAgICAgY29uc3Qgc2hhZG93Um9vdHMgPSBbXTsKICAgICAgaWYgKHRoaXMuc2hhZG93Um9vdCkKICAgICAgICBzaGFkb3dSb290cy5wdXNoKHRoaXMuc2hhZG93Um9vdCk7CiAgICAgIGNvbnN0IGJsb2NrV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGJsb2NrV3JhcHBlcnM/LmZvckVhY2goKHdyYXBwZXIpID0+IHsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBzaGFkb3dSb290cy5wdXNoKGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QpOwogICAgICAgIH0KICAgICAgfSk7CiAgICAgIGNvbnN0IGNvb3JkcyA9IFd5c2l3eWdGb3JtYXR0aW5nLmdldFNlbGVjdGlvbkNvb3JkaW5hdGVzKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKGNvb3JkcykgewogICAgICAgIHRoaXMuZm9ybWF0dGluZ01lbnUuc2hvdyh7IHg6IGNvb3Jkcy54LCB5OiBjb29yZHMueSB9LCBhc3luYyAoY29tbWFuZCkgPT4gYXdhaXQgdGhpcy5hcHBseUZvcm1hdChjb21tYW5kKSk7CiAgICAgIH0gZWxzZSB7CiAgICAgIH0KICAgIH0KICAgIGhpZGVGb3JtYXR0aW5nTWVudSgpIHsKICAgICAgdGhpcy5mb3JtYXR0aW5nTWVudS5oaWRlKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICB9CiAgICBhc3luYyBhcHBseUZvcm1hdChjb21tYW5kKSB7CiAgICAgIGNvbnN0IHNoYWRvd1Jvb3RzID0gW107CiAgICAgIGlmICh0aGlzLnNoYWRvd1Jvb3QpCiAgICAgICAgc2hhZG93Um9vdHMucHVzaCh0aGlzLnNoYWRvd1Jvb3QpOwogICAgICBjb25zdCBibG9ja1dyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIuYmxvY2std3JhcHBlciIpOwogICAgICBibG9ja1dyYXBwZXJzPy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSB3cmFwcGVyLnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudD8uc2hhZG93Um9vdCkgewogICAgICAgICAgc2hhZG93Um9vdHMucHVzaChibG9ja0NvbXBvbmVudC5zaGFkb3dSb290KTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBjb25zdCBzZWxlY3Rpb25JbmZvID0gV3lzaXd5Z1NlbGVjdGlvbi5nZXRTZWxlY3Rpb25JbmZvKC4uLnNoYWRvd1Jvb3RzKTsKICAgICAgaWYgKCFzZWxlY3Rpb25JbmZvKQogICAgICAgIHJldHVybjsKICAgICAgbGV0IHRhcmdldEJsb2NrOwogICAgICBsZXQgdGFyZ2V0QmxvY2tDb21wb25lbnQ7CiAgICAgIGNvbnN0IHdyYXBwZXJzID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3JBbGwoIi5ibG9jay13cmFwcGVyIik7CiAgICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IHdyYXBwZXJzLmxlbmd0aDsgaTExKyspIHsKICAgICAgICBjb25zdCB3cmFwcGVyID0gd3JhcHBlcnNbaTExXTsKICAgICAgICBjb25zdCBibG9ja0NvbXBvbmVudCA9IHdyYXBwZXIucXVlcnlTZWxlY3RvcigiZGVlcy13eXNpd3lnLWJsb2NrIik7CiAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50Py5zaGFkb3dSb290KSB7CiAgICAgICAgICBjb25zdCBibG9jayA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmJsb2NrIik7CiAgICAgICAgICBpZiAoYmxvY2sgJiYgKGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uc3RhcnRDb250YWluZXIpIHx8IGJsb2NrLmNvbnRhaW5zKHNlbGVjdGlvbkluZm8uZW5kQ29udGFpbmVyKSkpIHsKICAgICAgICAgICAgY29uc3QgYmxvY2tJZCA9IHdyYXBwZXIuZ2V0QXR0cmlidXRlKCJkYXRhLWJsb2NrLWlkIik7CiAgICAgICAgICAgIHRhcmdldEJsb2NrID0gdGhpcy5ibG9ja3MuZmluZCgoYjUpID0+IGI1LmlkID09PSBibG9ja0lkKTsKICAgICAgICAgICAgdGFyZ2V0QmxvY2tDb21wb25lbnQgPSBibG9ja0NvbXBvbmVudDsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmICghdGFyZ2V0QmxvY2sgfHwgIXRhcmdldEJsb2NrQ29tcG9uZW50KQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgcmFuZ2UyID0gV3lzaXd5Z1NlbGVjdGlvbi5jcmVhdGVSYW5nZUZyb21JbmZvKHNlbGVjdGlvbkluZm8pOwogICAgICBpZiAoY29tbWFuZCA9PT0gImxpbmsiKSB7CiAgICAgICAgY29uc3QgdXJsID0gYXdhaXQgdGhpcy5zaG93TGlua0RpYWxvZygpOwogICAgICAgIGlmICghdXJsKSB7CiAgICAgICAgICB0YXJnZXRCbG9ja0NvbXBvbmVudC5mb2N1cygpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBXeXNpd3lnRm9ybWF0dGluZy5hcHBseUZvcm1hdChjb21tYW5kLCB1cmwsIHJhbmdlMiwgc2hhZG93Um9vdHMpOwogICAgICB9IGVsc2UgewogICAgICAgIFd5c2l3eWdGb3JtYXR0aW5nLmFwcGx5Rm9ybWF0KGNvbW1hbmQsIHZvaWQgMCwgcmFuZ2UyLCBzaGFkb3dSb290cyk7CiAgICAgIH0KICAgICAgYXdhaXQgbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiBzZXRUaW1lb3V0KHJlc29sdmUyLCAxMCkpOwogICAgICB0YXJnZXRCbG9jay5jb250ZW50ID0gdGFyZ2V0QmxvY2tDb21wb25lbnQuZ2V0Q29udGVudCgpOwogICAgICB0aGlzLnVwZGF0ZVZhbHVlKCk7CiAgICAgIHRhcmdldEJsb2NrQ29tcG9uZW50LmZvY3VzKCk7CiAgICAgIGlmIChjb21tYW5kID09PSAibGluayIpIHsKICAgICAgICB0aGlzLmhpZGVGb3JtYXR0aW5nTWVudSgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuc2VsZWN0ZWRUZXh0ID0gIiI7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNob3dMaW5rRGlhbG9nKCkgewogICAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyKSA9PiB7CiAgICAgICAgbGV0IGxpbmtVcmwgPSBudWxsOwogICAgICAgIERlZXNNb2RhbC5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGhlYWRpbmc6ICJBZGQgTGluayIsCiAgICAgICAgICBjb250ZW50OiB1M2AKICAgICAgICAgIDxzdHlsZT4KICAgICAgICAgICAgLmxpbmstaW5wdXQgewogICAgICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHZhcigtLWRlZXMtY29sb3ItbGluZS1icmlnaHQpOwogICAgICAgICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICAgICAgICBiYWNrZ3JvdW5kOiB2YXIoLS1kZWVzLWNvbG9yLWlucHV0KTsKICAgICAgICAgICAgICBjb2xvcjogdmFyKC0tZGVlcy1jb2xvci10ZXh0KTsKICAgICAgICAgICAgICBtYXJnaW46IDE2cHggMDsKICAgICAgICAgICAgfQogICAgICAgICAgICAubGluay1pbnB1dDpmb2N1cyB7CiAgICAgICAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICAgICAgICBib3JkZXItY29sb3I6IHZhcigtLWRlZXMtY29sb3ItcHJpbWFyeSk7CiAgICAgICAgICAgIH0KICAgICAgICAgIDwvc3R5bGU+CiAgICAgICAgICA8aW5wdXQgCiAgICAgICAgICAgIGNsYXNzPSJsaW5rLWlucHV0IiAKICAgICAgICAgICAgdHlwZT0idXJsIiAKICAgICAgICAgICAgcGxhY2Vob2xkZXI9Imh0dHBzOi8vZXhhbXBsZS5jb20iIAogICAgICAgICAgICBAa2V5ZG93bj0iJHsoZTExKSA9PiB7CiAgICAgICAgICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICAgICAgICAgIGxpbmtVcmwgPSBpbnB1dC52YWx1ZTsKICAgICAgICAgICAgICBjb25zdCBtb2RhbCA9IGlucHV0LmNsb3Nlc3QoImRlZXMtbW9kYWwiKTsKICAgICAgICAgICAgICBpZiAobW9kYWwpIHsKICAgICAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gbW9kYWwuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLmJvdHRvbUJ1dHRvbjpsYXN0LWNoaWxkIik7CiAgICAgICAgICAgICAgICBpZiAob2tCdXR0b24pCiAgICAgICAgICAgICAgICAgIG9rQnV0dG9uLmNsaWNrKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9fSIKICAgICAgICAgICAgQGlucHV0PSIkeyhlMTEpID0+IHsKICAgICAgICAgICAgbGlua1VybCA9IGUxMS50YXJnZXQudmFsdWU7CiAgICAgICAgICB9fSIKICAgICAgICAgIC8+CiAgICAgICAgYCwKICAgICAgICAgIG1lbnVPcHRpb25zOiBbCiAgICAgICAgICAgIHsKICAgICAgICAgICAgICBuYW1lOiAiQ2FuY2VsIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobnVsbCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9LAogICAgICAgICAgICB7CiAgICAgICAgICAgICAgbmFtZTogIkFkZCBMaW5rIiwKICAgICAgICAgICAgICBhY3Rpb246IGFzeW5jIChtb2RhbCkgPT4gewogICAgICAgICAgICAgICAgbW9kYWwuZGVzdHJveSgpOwogICAgICAgICAgICAgICAgcmVzb2x2ZTIobGlua1VybCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICBdCiAgICAgICAgfSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBpbnB1dCA9IGRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoImRlZXMtbW9kYWwgLmxpbmstaW5wdXQiKTsKICAgICAgICAgIGlmIChpbnB1dCkgewogICAgICAgICAgICBpbnB1dC5mb2N1cygpOwogICAgICAgICAgfQogICAgICAgIH0sIDEwMCk7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBVbmRvIHRoZSBsYXN0IGFjdGlvbgogICAgICovCiAgICB1bmRvKCkgewogICAgICBjb25zdCBzdGF0ZTEyID0gdGhpcy5oaXN0b3J5LnVuZG8oKTsKICAgICAgaWYgKHN0YXRlMTIpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTEyKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZWRvIHRoZSBuZXh0IGFjdGlvbgogICAgICovCiAgICByZWRvKCkgewogICAgICBjb25zdCBzdGF0ZTEyID0gdGhpcy5oaXN0b3J5LnJlZG8oKTsKICAgICAgaWYgKHN0YXRlMTIpIHsKICAgICAgICB0aGlzLnJlc3RvcmVTdGF0ZShzdGF0ZTEyKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBSZXN0b3JlIGVkaXRvciBzdGF0ZSBmcm9tIGhpc3RvcnkKICAgICAqLwogICAgcmVzdG9yZVN0YXRlKHN0YXRlMTIpIHsKICAgICAgdGhpcy5ibG9ja3MgPSBzdGF0ZTEyLmJsb2NrczsKICAgICAgdGhpcy5zZWxlY3RlZEJsb2NrSWQgPSBzdGF0ZTEyLnNlbGVjdGVkQmxvY2tJZDsKICAgICAgdGhpcy5yZW5kZXJCbG9ja3NQcm9ncmFtbWF0aWNhbGx5KCk7CiAgICAgIGlmIChzdGF0ZTEyLmN1cnNvclBvc2l0aW9uKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3N0YXRlMTIuY3Vyc29yUG9zaXRpb24uYmxvY2tJZH0iXWApOwogICAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgICAgaWYgKGJsb2NrQ29tcG9uZW50KSB7CiAgICAgICAgICAgIGJsb2NrQ29tcG9uZW50LmZvY3VzV2l0aEN1cnNvcihzdGF0ZTEyLmN1cnNvclBvc2l0aW9uLm9mZnNldCk7CiAgICAgICAgICB9CiAgICAgICAgfSwgNTApOwogICAgICB9IGVsc2UgaWYgKHN0YXRlMTIuc2VsZWN0ZWRCbG9ja0lkKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmJsb2NrT3BlcmF0aW9ucy5mb2N1c0Jsb2NrKHN0YXRlMTIuc2VsZWN0ZWRCbG9ja0lkKTsKICAgICAgICB9LCA1MCk7CiAgICAgIH0KICAgICAgdGhpcy51cGRhdGVWYWx1ZSgpOwogICAgfQogICAgLyoqCiAgICAgKiBTYXZlIGN1cnJlbnQgc3RhdGUgdG8gaGlzdG9yeSB3aXRoIGN1cnNvciBwb3NpdGlvbgogICAgICovCiAgICBzYXZlVG9IaXN0b3J5KGRlYm91bmNlNCA9IHRydWUpIHsKICAgICAgbGV0IGN1cnNvclBvc2l0aW9uOwogICAgICBpZiAodGhpcy5zZWxlY3RlZEJsb2NrSWQpIHsKICAgICAgICBjb25zdCBibG9ja1dyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYFtkYXRhLWJsb2NrLWlkPSIke3RoaXMuc2VsZWN0ZWRCbG9ja0lkfSJdYCk7CiAgICAgICAgY29uc3QgYmxvY2tDb21wb25lbnQgPSBibG9ja1dyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtd3lzaXd5Zy1ibG9jayIpOwogICAgICAgIGlmIChibG9ja0NvbXBvbmVudCAmJiB0eXBlb2YgYmxvY2tDb21wb25lbnQuZ2V0Q3Vyc29yUG9zaXRpb24gPT09ICJmdW5jdGlvbiIpIHsKICAgICAgICAgIGNvbnN0IGVkaXRhYmxlRWxlbWVudCA9IGJsb2NrQ29tcG9uZW50LnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ibG9jayIpOwogICAgICAgICAgaWYgKGVkaXRhYmxlRWxlbWVudCkgewogICAgICAgICAgICBjb25zdCBvZmZzZXQgPSBibG9ja0NvbXBvbmVudC5nZXRDdXJzb3JQb3NpdGlvbihlZGl0YWJsZUVsZW1lbnQpOwogICAgICAgICAgICBpZiAob2Zmc2V0ICE9PSBudWxsKSB7CiAgICAgICAgICAgICAgY3Vyc29yUG9zaXRpb24gPSB7CiAgICAgICAgICAgICAgICBibG9ja0lkOiB0aGlzLnNlbGVjdGVkQmxvY2tJZCwKICAgICAgICAgICAgICAgIG9mZnNldAogICAgICAgICAgICAgIH07CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKGRlYm91bmNlNCkgewogICAgICAgIHRoaXMuaGlzdG9yeS5zYXZlU3RhdGUodGhpcy5ibG9ja3MsIHRoaXMuc2VsZWN0ZWRCbG9ja0lkLCBjdXJzb3JQb3NpdGlvbik7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5oaXN0b3J5LnNhdmVDaGVja3BvaW50KHRoaXMuYmxvY2tzLCB0aGlzLnNlbGVjdGVkQmxvY2tJZCwgY3Vyc29yUG9zaXRpb24pOwogICAgICB9CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSW5wdXRXeXNpd3lnMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUuY3JvcHBlci5qcwp2YXIgSW1hZ2VDcm9wcGVyID0gY2xhc3MgewogIG9wdGlvbnM7CiAgY2FudmFzOwogIGN0eDsKICBpbWc7CiAgb3ZlcmxheUNhbnZhczsKICBvdmVybGF5Q3R4OwogIC8vIENyb3AgYXJlYSBwcm9wZXJ0aWVzCiAgY3JvcFggPSAwOwogIGNyb3BZID0gMDsKICBjcm9wU2l6ZSA9IDIwMDsKICBtaW5Dcm9wU2l6ZSA9IDUwOwogIC8vIEludGVyYWN0aW9uIHN0YXRlCiAgaXNEcmFnZ2luZyA9IGZhbHNlOwogIGlzUmVzaXppbmcgPSBmYWxzZTsKICBkcmFnU3RhcnRYID0gMDsKICBkcmFnU3RhcnRZID0gMDsKICByZXNpemVIYW5kbGUgPSAiIjsKICAvLyBJbWFnZSBwcm9wZXJ0aWVzCiAgaW1hZ2VTY2FsZSA9IDE7CiAgaW1hZ2VPZmZzZXRYID0gMDsKICBpbWFnZU9mZnNldFkgPSAwOwogIGNvbnN0cnVjdG9yKG9wdGlvbnMpIHsKICAgIHRoaXMub3B0aW9ucyA9IHsKICAgICAgbWluU2l6ZTogNTAsCiAgICAgIG91dHB1dFNpemU6IDgwMCwKICAgICAgLy8gSGlnaGVyIGRlZmF1bHQgcmVzb2x1dGlvbgogICAgICBvdXRwdXRRdWFsaXR5OiAwLjk1LAogICAgICAvLyBIaWdoZXIgcXVhbGl0eQogICAgICAuLi5vcHRpb25zCiAgICB9OwogICAgdGhpcy5jYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKICAgIHRoaXMuY3R4ID0gdGhpcy5jYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgdGhpcy5vdmVybGF5Q3R4ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldENvbnRleHQoIjJkIik7CiAgICB0aGlzLmltZyA9IG5ldyBJbWFnZSgpOwogIH0KICBhc3luYyBpbml0aWFsaXplKCkgewogICAgYXdhaXQgdGhpcy5sb2FkSW1hZ2UoKTsKICAgIHRoaXMuc2V0dXBDYW52YXNlcygpOwogICAgdGhpcy5zZXR1cEV2ZW50TGlzdGVuZXJzKCk7CiAgICB0aGlzLnJlbmRlcigpOwogIH0KICBhc3luYyBsb2FkSW1hZ2UoKSB7CiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUyLCByZWplY3QpID0+IHsKICAgICAgdGhpcy5pbWcub25sb2FkID0gKCkgPT4gcmVzb2x2ZTIoKTsKICAgICAgdGhpcy5pbWcub25lcnJvciA9IHJlamVjdDsKICAgICAgdGhpcy5pbWcuc3JjID0gdGhpcy5vcHRpb25zLmltYWdlOwogICAgfSk7CiAgfQogIHNldHVwQ2FudmFzZXMoKSB7CiAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLm9wdGlvbnMuY29udGFpbmVyOwogICAgY29uc3QgY29udGFpbmVyU2l6ZSA9IE1hdGgubWluKGNvbnRhaW5lci5jbGllbnRXaWR0aCwgY29udGFpbmVyLmNsaWVudEhlaWdodCk7CiAgICB0aGlzLmNhbnZhcy53aWR0aCA9IGNvbnRhaW5lclNpemU7CiAgICB0aGlzLmNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5oZWlnaHQgPSAiMTAwJSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS50b3AgPSAiMCI7CiAgICB0aGlzLmNhbnZhcy5zdHlsZS5sZWZ0ID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLndpZHRoID0gY29udGFpbmVyU2l6ZTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQgPSBjb250YWluZXJTaXplOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLndpZHRoID0gIjEwMCUiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmhlaWdodCA9ICIxMDAlIjsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5zdHlsZS5wb3NpdGlvbiA9ICJhYnNvbHV0ZSI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUudG9wID0gIjAiOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmxlZnQgPSAiMCI7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzKTsKICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLm92ZXJsYXlDYW52YXMpOwogICAgY29uc3Qgc2NhbGUgPSBNYXRoLm1pbihjb250YWluZXJTaXplIC8gdGhpcy5pbWcud2lkdGgsIGNvbnRhaW5lclNpemUgLyB0aGlzLmltZy5oZWlnaHQpOwogICAgdGhpcy5pbWFnZVNjYWxlID0gc2NhbGU7CiAgICB0aGlzLmltYWdlT2Zmc2V0WCA9IChjb250YWluZXJTaXplIC0gdGhpcy5pbWcud2lkdGggKiBzY2FsZSkgLyAyOwogICAgdGhpcy5pbWFnZU9mZnNldFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuaW1nLmhlaWdodCAqIHNjYWxlKSAvIDI7CiAgICBjb25zdCBzY2FsZWRJbWFnZVdpZHRoID0gdGhpcy5pbWcud2lkdGggKiBzY2FsZTsKICAgIGNvbnN0IHNjYWxlZEltYWdlSGVpZ2h0ID0gdGhpcy5pbWcuaGVpZ2h0ICogc2NhbGU7CiAgICBjb25zdCBtYXhDcm9wU2l6ZSA9IE1hdGgubWluKHNjYWxlZEltYWdlV2lkdGgsIHNjYWxlZEltYWdlSGVpZ2h0LCBjb250YWluZXJTaXplICogMC44KTsKICAgIHRoaXMuY3JvcFNpemUgPSBtYXhDcm9wU2l6ZSAqIDAuODsKICAgIHRoaXMuY3JvcFggPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICAgIHRoaXMuY3JvcFkgPSAoY29udGFpbmVyU2l6ZSAtIHRoaXMuY3JvcFNpemUpIC8gMjsKICB9CiAgc2V0dXBFdmVudExpc3RlbmVycygpIHsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWRvd24iLCB0aGlzLmhhbmRsZU1vdXNlRG93bi5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZU1vdXNlTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5oYW5kbGVNb3VzZVVwLmJpbmQodGhpcykpOwogICAgdGhpcy5vdmVybGF5Q2FudmFzLmFkZEV2ZW50TGlzdGVuZXIoIm1vdXNlbGVhdmUiLCB0aGlzLmhhbmRsZU1vdXNlVXAuYmluZCh0aGlzKSk7CiAgICB0aGlzLm92ZXJsYXlDYW52YXMuYWRkRXZlbnRMaXN0ZW5lcigidG91Y2hzdGFydCIsIHRoaXMuaGFuZGxlVG91Y2hTdGFydC5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaG1vdmUiLCB0aGlzLmhhbmRsZVRvdWNoTW92ZS5iaW5kKHRoaXMpKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5hZGRFdmVudExpc3RlbmVyKCJ0b3VjaGVuZCIsIHRoaXMuaGFuZGxlVG91Y2hFbmQuYmluZCh0aGlzKSk7CiAgfQogIGhhbmRsZU1vdXNlRG93bihlMTEpIHsKICAgIGNvbnN0IHJlY3QgPSB0aGlzLm92ZXJsYXlDYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICBjb25zdCB4MyA9IChlMTEuY2xpZW50WCAtIHJlY3QubGVmdCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLndpZHRoIC8gcmVjdC53aWR0aCk7CiAgICBjb25zdCB5NSA9IChlMTEuY2xpZW50WSAtIHJlY3QudG9wKSAqICh0aGlzLm92ZXJsYXlDYW52YXMuaGVpZ2h0IC8gcmVjdC5oZWlnaHQpOwogICAgY29uc3QgaGFuZGxlMyA9IHRoaXMuZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSk7CiAgICBpZiAoaGFuZGxlMykgewogICAgICB0aGlzLmlzUmVzaXppbmcgPSB0cnVlOwogICAgICB0aGlzLnJlc2l6ZUhhbmRsZSA9IGhhbmRsZTM7CiAgICB9IGVsc2UgaWYgKHRoaXMuaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpKSB7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICB9CiAgICB0aGlzLmRyYWdTdGFydFggPSB4MzsKICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogIH0KICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICBjb25zdCByZWN0ID0gdGhpcy5vdmVybGF5Q2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgY29uc3QgeDMgPSAoZTExLmNsaWVudFggLSByZWN0LmxlZnQpICogKHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCAvIHJlY3Qud2lkdGgpOwogICAgY29uc3QgeTUgPSAoZTExLmNsaWVudFkgLSByZWN0LnRvcCkgKiAodGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCAvIHJlY3QuaGVpZ2h0KTsKICAgIGNvbnN0IGhhbmRsZTMgPSB0aGlzLmdldFJlc2l6ZUhhbmRsZSh4MywgeTUpOwogICAgaWYgKGhhbmRsZTMpIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9IHRoaXMuZ2V0UmVzaXplQ3Vyc29yKGhhbmRsZTMpOwogICAgfSBlbHNlIGlmICh0aGlzLmlzSW5zaWRlQ3JvcEFyZWEoeDMsIHk1KSkgewogICAgICB0aGlzLm92ZXJsYXlDYW52YXMuc3R5bGUuY3Vyc29yID0gIm1vdmUiOwogICAgfSBlbHNlIHsKICAgICAgdGhpcy5vdmVybGF5Q2FudmFzLnN0eWxlLmN1cnNvciA9ICJkZWZhdWx0IjsKICAgIH0KICAgIGlmICh0aGlzLmlzRHJhZ2dpbmcpIHsKICAgICAgY29uc3QgZHggPSB4MyAtIHRoaXMuZHJhZ1N0YXJ0WDsKICAgICAgY29uc3QgZHkgPSB5NSAtIHRoaXMuZHJhZ1N0YXJ0WTsKICAgICAgY29uc3QgbWluWCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgICBjb25zdCBtYXhYID0gdGhpcy5pbWFnZU9mZnNldFggKyB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSAtIHRoaXMuY3JvcFNpemU7CiAgICAgIGNvbnN0IG1pblkgPSB0aGlzLmltYWdlT2Zmc2V0WTsKICAgICAgY29uc3QgbWF4WSA9IHRoaXMuaW1hZ2VPZmZzZXRZICsgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgdGhpcy5jcm9wWCA9IE1hdGgubWF4KG1pblgsIE1hdGgubWluKG1heFgsIHRoaXMuY3JvcFggKyBkeCkpOwogICAgICB0aGlzLmNyb3BZID0gTWF0aC5tYXgobWluWSwgTWF0aC5taW4obWF4WSwgdGhpcy5jcm9wWSArIGR5KSk7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WCA9IHgzOwogICAgICB0aGlzLmRyYWdTdGFydFkgPSB5NTsKICAgICAgdGhpcy5yZW5kZXIoKTsKICAgIH0KICAgIGlmICh0aGlzLmlzUmVzaXppbmcpIHsKICAgICAgdGhpcy5oYW5kbGVSZXNpemUoeDMsIHk1KTsKICAgICAgdGhpcy5kcmFnU3RhcnRYID0geDM7CiAgICAgIHRoaXMuZHJhZ1N0YXJ0WSA9IHk1OwogICAgICB0aGlzLnJlbmRlcigpOwogICAgfQogIH0KICBoYW5kbGVNb3VzZVVwKCkgewogICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB0aGlzLmlzUmVzaXppbmcgPSBmYWxzZTsKICAgIHRoaXMucmVzaXplSGFuZGxlID0gIiI7CiAgfQogIGhhbmRsZVRvdWNoU3RhcnQoZTExKSB7CiAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgIGNvbnN0IHRvdWNoID0gZTExLnRvdWNoZXNbMF07CiAgICBjb25zdCBtb3VzZUV2ZW50ID0gbmV3IE1vdXNlRXZlbnQoIm1vdXNlZG93biIsIHsKICAgICAgY2xpZW50WDogdG91Y2guY2xpZW50WCwKICAgICAgY2xpZW50WTogdG91Y2guY2xpZW50WQogICAgfSk7CiAgICB0aGlzLmhhbmRsZU1vdXNlRG93bihtb3VzZUV2ZW50KTsKICB9CiAgaGFuZGxlVG91Y2hNb3ZlKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCB0b3VjaCA9IGUxMS50b3VjaGVzWzBdOwogICAgY29uc3QgbW91c2VFdmVudCA9IG5ldyBNb3VzZUV2ZW50KCJtb3VzZW1vdmUiLCB7CiAgICAgIGNsaWVudFg6IHRvdWNoLmNsaWVudFgsCiAgICAgIGNsaWVudFk6IHRvdWNoLmNsaWVudFkKICAgIH0pOwogICAgdGhpcy5oYW5kbGVNb3VzZU1vdmUobW91c2VFdmVudCk7CiAgfQogIGhhbmRsZVRvdWNoRW5kKGUxMSkgewogICAgZTExLnByZXZlbnREZWZhdWx0KCk7CiAgICB0aGlzLmhhbmRsZU1vdXNlVXAoKTsKICB9CiAgZ2V0UmVzaXplSGFuZGxlKHgzLCB5NSkgewogICAgY29uc3QgaGFuZGxlU2l6ZSA9IDIwOwogICAgY29uc3QgaGFuZGxlcyA9IHsKICAgICAgIm53IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgICJuZSI6IHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgInN3IjogeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICAic2UiOiB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICB9OwogICAgZm9yIChjb25zdCBba2V5MiwgcG9zXSBvZiBPYmplY3QuZW50cmllcyhoYW5kbGVzKSkgewogICAgICBpZiAoTWF0aC5hYnMoeDMgLSBwb3MueCkgPCBoYW5kbGVTaXplICYmIE1hdGguYWJzKHk1IC0gcG9zLnkpIDwgaGFuZGxlU2l6ZSkgewogICAgICAgIHJldHVybiBrZXkyOwogICAgICB9CiAgICB9CiAgICByZXR1cm4gIiI7CiAgfQogIGdldFJlc2l6ZUN1cnNvcihoYW5kbGUzKSB7CiAgICBjb25zdCBjdXJzb3JzID0gewogICAgICAibnciOiAibnctcmVzaXplIiwKICAgICAgIm5lIjogIm5lLXJlc2l6ZSIsCiAgICAgICJzdyI6ICJzdy1yZXNpemUiLAogICAgICAic2UiOiAic2UtcmVzaXplIgogICAgfTsKICAgIHJldHVybiBjdXJzb3JzW2hhbmRsZTNdIHx8ICJkZWZhdWx0IjsKICB9CiAgaXNJbnNpZGVDcm9wQXJlYSh4MywgeTUpIHsKICAgIHJldHVybiB4MyA+PSB0aGlzLmNyb3BYICYmIHgzIDw9IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplICYmIHk1ID49IHRoaXMuY3JvcFkgJiYgeTUgPD0gdGhpcy5jcm9wWSArIHRoaXMuY3JvcFNpemU7CiAgfQogIGhhbmRsZVJlc2l6ZSh4MywgeTUpIHsKICAgIGNvbnN0IGR4ID0geDMgLSB0aGlzLmRyYWdTdGFydFg7CiAgICBjb25zdCBkeSA9IHk1IC0gdGhpcy5kcmFnU3RhcnRZOwogICAgY29uc3QgaW1nTGVmdCA9IHRoaXMuaW1hZ2VPZmZzZXRYOwogICAgY29uc3QgaW1nVG9wID0gdGhpcy5pbWFnZU9mZnNldFk7CiAgICBjb25zdCBpbWdSaWdodCA9IHRoaXMuaW1hZ2VPZmZzZXRYICsgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGU7CiAgICBjb25zdCBpbWdCb3R0b20gPSB0aGlzLmltYWdlT2Zmc2V0WSArIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZTsKICAgIHN3aXRjaCAodGhpcy5yZXNpemVIYW5kbGUpIHsKICAgICAgY2FzZSAic2UiOgogICAgICAgIHRoaXMuY3JvcFNpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCBNYXRoLm1pbih0aGlzLmNyb3BTaXplICsgTWF0aC5tYXgoZHgsIGR5KSwgTWF0aC5taW4oaW1nUmlnaHQgLSB0aGlzLmNyb3BYLCBpbWdCb3R0b20gLSB0aGlzLmNyb3BZKSkpOwogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJudyI6CiAgICAgICAgY29uc3QgbmV3U2l6ZSA9IE1hdGgubWF4KHRoaXMubWluQ3JvcFNpemUsIHRoaXMuY3JvcFNpemUgLSBNYXRoLm1heChkeCwgZHkpKTsKICAgICAgICBjb25zdCBzaXplRGlmZiA9IHRoaXMuY3JvcFNpemUgLSBuZXdTaXplOwogICAgICAgIGNvbnN0IG5ld1ggPSB0aGlzLmNyb3BYICsgc2l6ZURpZmY7CiAgICAgICAgY29uc3QgbmV3WSA9IHRoaXMuY3JvcFkgKyBzaXplRGlmZjsKICAgICAgICBpZiAobmV3WCA+PSBpbWdMZWZ0ICYmIG5ld1kgPj0gaW1nVG9wKSB7CiAgICAgICAgICB0aGlzLmNyb3BYID0gbmV3WDsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZXdZOwogICAgICAgICAgdGhpcy5jcm9wU2l6ZSA9IG5ld1NpemU7CiAgICAgICAgfQogICAgICAgIGJyZWFrOwogICAgICBjYXNlICJuZSI6CiAgICAgICAgY29uc3QgbmVTaXplRHggPSBNYXRoLm1heChkeCwgLWR5KTsKICAgICAgICBjb25zdCBuZU5ld1NpemUgPSBNYXRoLm1heCh0aGlzLm1pbkNyb3BTaXplLCB0aGlzLmNyb3BTaXplICsgbmVTaXplRHgpOwogICAgICAgIGNvbnN0IG5lU2l6ZURpZmYgPSBuZU5ld1NpemUgLSB0aGlzLmNyb3BTaXplOwogICAgICAgIGNvbnN0IG5lTmV3WSA9IHRoaXMuY3JvcFkgLSBuZVNpemVEaWZmOwogICAgICAgIGlmIChuZU5ld1kgPj0gaW1nVG9wICYmIHRoaXMuY3JvcFggKyBuZU5ld1NpemUgPD0gaW1nUmlnaHQpIHsKICAgICAgICAgIHRoaXMuY3JvcFkgPSBuZU5ld1k7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gbmVOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgICAgY2FzZSAic3ciOgogICAgICAgIGNvbnN0IHN3U2l6ZUR4ID0gTWF0aC5tYXgoLWR4LCBkeSk7CiAgICAgICAgY29uc3Qgc3dOZXdTaXplID0gTWF0aC5tYXgodGhpcy5taW5Dcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSArIHN3U2l6ZUR4KTsKICAgICAgICBjb25zdCBzd1NpemVEaWZmID0gc3dOZXdTaXplIC0gdGhpcy5jcm9wU2l6ZTsKICAgICAgICBjb25zdCBzd05ld1ggPSB0aGlzLmNyb3BYIC0gc3dTaXplRGlmZjsKICAgICAgICBpZiAoc3dOZXdYID49IGltZ0xlZnQgJiYgdGhpcy5jcm9wWSArIHN3TmV3U2l6ZSA8PSBpbWdCb3R0b20pIHsKICAgICAgICAgIHRoaXMuY3JvcFggPSBzd05ld1g7CiAgICAgICAgICB0aGlzLmNyb3BTaXplID0gc3dOZXdTaXplOwogICAgICAgIH0KICAgICAgICBicmVhazsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5vdmVybGF5Q3R4LmNsZWFyUmVjdCgwLCAwLCB0aGlzLm92ZXJsYXlDYW52YXMud2lkdGgsIHRoaXMub3ZlcmxheUNhbnZhcy5oZWlnaHQpOwogICAgdGhpcy5jdHguZmlsbFN0eWxlID0gIiMwMDAwMDAiOwogICAgdGhpcy5jdHguZmlsbFJlY3QoMCwgMCwgdGhpcy5jYW52YXMud2lkdGgsIHRoaXMuY2FudmFzLmhlaWdodCk7CiAgICB0aGlzLmN0eC5kcmF3SW1hZ2UodGhpcy5pbWcsIHRoaXMuaW1hZ2VPZmZzZXRYLCB0aGlzLmltYWdlT2Zmc2V0WSwgdGhpcy5pbWcud2lkdGggKiB0aGlzLmltYWdlU2NhbGUsIHRoaXMuaW1nLmhlaWdodCAqIHRoaXMuaW1hZ2VTY2FsZSk7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFN0eWxlID0gInJnYmEoMCwgMCwgMCwgMC41KSI7CiAgICB0aGlzLm92ZXJsYXlDdHguZmlsbFJlY3QodGhpcy5pbWFnZU9mZnNldFgsIHRoaXMuaW1hZ2VPZmZzZXRZLCB0aGlzLmltZy53aWR0aCAqIHRoaXMuaW1hZ2VTY2FsZSwgdGhpcy5pbWcuaGVpZ2h0ICogdGhpcy5pbWFnZVNjYWxlKTsKICAgIHRoaXMub3ZlcmxheUN0eC5zYXZlKCk7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmFyYyh0aGlzLmNyb3BYICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFkgKyB0aGlzLmNyb3BTaXplIC8gMiwgdGhpcy5jcm9wU2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmNsaXAoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5iZWdpblBhdGgoKTsKICAgICAgdGhpcy5vdmVybGF5Q3R4LnJlY3QodGhpcy5jcm9wWCwgdGhpcy5jcm9wWSwgdGhpcy5jcm9wU2l6ZSwgdGhpcy5jcm9wU2l6ZSk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5jbGlwKCk7CiAgICB9CiAgICB0aGlzLm92ZXJsYXlDdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMub3ZlcmxheUNhbnZhcy53aWR0aCwgdGhpcy5vdmVybGF5Q2FudmFzLmhlaWdodCk7CiAgICB0aGlzLm92ZXJsYXlDdHgucmVzdG9yZSgpOwogICAgdGhpcy5vdmVybGF5Q3R4LnN0cm9rZVN0eWxlID0gIndoaXRlIjsKICAgIHRoaXMub3ZlcmxheUN0eC5saW5lV2lkdGggPSAyOwogICAgaWYgKHRoaXMub3B0aW9ucy5zaGFwZSA9PT0gInJvdW5kIikgewogICAgICB0aGlzLm92ZXJsYXlDdHguYmVnaW5QYXRoKCk7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5hcmModGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUgLyAyLCB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSAvIDIsIHRoaXMuY3JvcFNpemUgLyAyLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2UoKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5zdHJva2VSZWN0KHRoaXMuY3JvcFgsIHRoaXMuY3JvcFksIHRoaXMuY3JvcFNpemUsIHRoaXMuY3JvcFNpemUpOwogICAgfQogICAgdGhpcy5kcmF3UmVzaXplSGFuZGxlcygpOwogIH0KICBkcmF3UmVzaXplSGFuZGxlcygpIHsKICAgIGNvbnN0IGhhbmRsZVNpemUgPSA4OwogICAgY29uc3QgaGFuZGxlcyA9IFsKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZIH0sCiAgICAgIHsgeDogdGhpcy5jcm9wWCArIHRoaXMuY3JvcFNpemUsIHk6IHRoaXMuY3JvcFkgfSwKICAgICAgeyB4OiB0aGlzLmNyb3BYLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9LAogICAgICB7IHg6IHRoaXMuY3JvcFggKyB0aGlzLmNyb3BTaXplLCB5OiB0aGlzLmNyb3BZICsgdGhpcy5jcm9wU2l6ZSB9CiAgICBdOwogICAgdGhpcy5vdmVybGF5Q3R4LmZpbGxTdHlsZSA9ICJ3aGl0ZSI7CiAgICBoYW5kbGVzLmZvckVhY2goKGhhbmRsZTMpID0+IHsKICAgICAgdGhpcy5vdmVybGF5Q3R4LmJlZ2luUGF0aCgpOwogICAgICB0aGlzLm92ZXJsYXlDdHguYXJjKGhhbmRsZTMueCwgaGFuZGxlMy55LCBoYW5kbGVTaXplLCAwLCBNYXRoLlBJICogMik7CiAgICAgIHRoaXMub3ZlcmxheUN0eC5maWxsKCk7CiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0Q3JvcHBlZEltYWdlKCkgewogICAgY29uc3QgY3JvcENhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgY29uc3QgY3JvcEN0eCA9IGNyb3BDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNvbnN0IHNjYWxlID0gMSAvIHRoaXMuaW1hZ2VTY2FsZTsKICAgIGNvbnN0IG9yaWdpbmFsQ3JvcFNpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBjb25zdCBvdXRwdXRTaXplID0gdGhpcy5vcHRpb25zLm91dHB1dFNpemU7CiAgICBpZiAob3V0cHV0U2l6ZSA+IG9yaWdpbmFsQ3JvcFNpemUpIHsKICAgICAgY29uc29sZS5pbmZvKGBQcm9maWxlIHBpY3R1cmU6IFVwc2NhbGluZyBmcm9tICR7TWF0aC5yb3VuZChvcmlnaW5hbENyb3BTaXplKX1weCB0byAke291dHB1dFNpemV9cHhgKTsKICAgIH0KICAgIGNyb3BDYW52YXMud2lkdGggPSBvdXRwdXRTaXplOwogICAgY3JvcENhbnZhcy5oZWlnaHQgPSBvdXRwdXRTaXplOwogICAgY29uc3Qgc3ggPSAodGhpcy5jcm9wWCAtIHRoaXMuaW1hZ2VPZmZzZXRYKSAqIHNjYWxlOwogICAgY29uc3Qgc3kgPSAodGhpcy5jcm9wWSAtIHRoaXMuaW1hZ2VPZmZzZXRZKSAqIHNjYWxlOwogICAgY29uc3Qgc1NpemUgPSB0aGlzLmNyb3BTaXplICogc2NhbGU7CiAgICBpZiAodGhpcy5vcHRpb25zLnNoYXBlID09PSAicm91bmQiKSB7CiAgICAgIGNyb3BDdHguYmVnaW5QYXRoKCk7CiAgICAgIGNyb3BDdHguYXJjKG91dHB1dFNpemUgLyAyLCBvdXRwdXRTaXplIC8gMiwgb3V0cHV0U2l6ZSAvIDIsIDAsIE1hdGguUEkgKiAyKTsKICAgICAgY3JvcEN0eC5jbGlwKCk7CiAgICB9CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZCA9IHRydWU7CiAgICBjcm9wQ3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgIGNyb3BDdHguZHJhd0ltYWdlKHRoaXMuaW1nLCBzeCwgc3ksIHNTaXplLCBzU2l6ZSwgMCwgMCwgb3V0cHV0U2l6ZSwgb3V0cHV0U2l6ZSk7CiAgICBjb25zdCBpc1BuZyA9IHRoaXMub3B0aW9ucy5pbWFnZS5pbmNsdWRlcygiaW1hZ2UvcG5nIik7CiAgICBjb25zdCBmb3JtYXQyID0gaXNQbmcgPyAiaW1hZ2UvcG5nIiA6ICJpbWFnZS9qcGVnIjsKICAgIHJldHVybiBjcm9wQ2FudmFzLnRvRGF0YVVSTChmb3JtYXQyLCB0aGlzLm9wdGlvbnMub3V0cHV0UXVhbGl0eSk7CiAgfQogIGRlc3Ryb3koKSB7CiAgICB0aGlzLmNhbnZhcy5yZW1vdmUoKTsKICAgIHRoaXMub3ZlcmxheUNhbnZhcy5yZW1vdmUoKTsKICB9Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvcHJvZmlsZXBpY3R1cmUubW9kYWwuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNjUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBQcm9maWxlUGljdHVyZU1vZGFsID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wcm9maWxlcGljdHVyZS1tb2RhbCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2luaXRpYWxJbWFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbEltYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9kZWNvcmF0b3JzOwogIGxldCBfc2hhcGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaGFwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9yczsKICBsZXQgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50U3RlcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzOwogIGxldCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNQcm9jZXNzaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hhcGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9jcm9wcGVkSW1hZ2VfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX2lzUHJvY2Vzc2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaW5pdGlhbEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImluaXRpYWxJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaW5pdGlhbEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfc2hhcGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hhcGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNoYXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNoYXBlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaGFwZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaGFwZV9pbml0aWFsaXplcnMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY1KHRoaXMsIG51bGwsIF9vdXRwdXRTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm91dHB1dFNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm91dHB1dFNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoub3V0cHV0U2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoub3V0cHV0U2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9vdXRwdXRTaXplX2luaXRpYWxpemVycywgX291dHB1dFNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRRdWFsaXR5Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRRdWFsaXR5IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFF1YWxpdHksIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFF1YWxpdHkgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjUodGhpcywgbnVsbCwgX2N1cnJlbnRTdGVwX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRTdGVwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50U3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50U3RlcCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFN0ZXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfY3JvcHBlZEltYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNyb3BwZWRJbWFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3JvcHBlZEltYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNyb3BwZWRJbWFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3JvcHBlZEltYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Nyb3BwZWRJbWFnZV9pbml0aWFsaXplcnMsIF9jcm9wcGVkSW1hZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NSh0aGlzLCBudWxsLCBfaXNQcm9jZXNzaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzUHJvY2Vzc2luZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNQcm9jZXNzaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzUHJvY2Vzc2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNQcm9jZXNzaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzUHJvY2Vzc2luZ19pbml0aWFsaXplcnMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIFByb2ZpbGVQaWN0dXJlTW9kYWwyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgICNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX2luaXRpYWxJbWFnZV9pbml0aWFsaXplcnMsICIiKTsKICAgIGdldCBpbml0aWFsSW1hZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsSW1hZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpbml0aWFsSW1hZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NoYXBlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaW5pdGlhbEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCAicm91bmQiKSk7CiAgICBnZXQgc2hhcGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNoYXBlKHZhbHVlMikgewogICAgICB0aGlzLiNzaGFwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9zaGFwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG91dHB1dFNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI291dHB1dFNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjYodGhpcywgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCAwLjk1KSk7CiAgICBnZXQgb3V0cHV0UXVhbGl0eSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9vdXRwdXRRdWFsaXR5X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfaW5pdGlhbGl6ZXJzLCAiY3JvcCIpKTsKICAgIGdldCBjdXJyZW50U3RlcCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFN0ZXAodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1cnJlbnRTdGVwX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3VycmVudFN0ZXBfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9jcm9wcGVkSW1hZ2VfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGNyb3BwZWRJbWFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Nyb3BwZWRJbWFnZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNyb3BwZWRJbWFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3JvcHBlZEltYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNQcm9jZXNzaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfY3JvcHBlZEltYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nih0aGlzLCBfaXNQcm9jZXNzaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Byb2Nlc3NpbmcoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Byb2Nlc3NpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Byb2Nlc3NpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzUHJvY2Vzc2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY3JvcHBlciA9IChfX3J1bkluaXRpYWxpemVyczY2KHRoaXMsIF9pc1Byb2Nlc3NpbmdfZXh0cmFJbml0aWFsaXplcnMpLCBudWxsKTsKICAgIHdpbmRvd0xheWVyOwogICAgekluZGV4ID0gMDsKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICR7Y3NzR2Vpc3RGb250RmFtaWx5fTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiB2YXIoLS16LWluZGV4KTsKICAgICAgfQoKICAgICAgLm1vZGFsLWNvbnRhaW5lciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzBhMGEwYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDgpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCkiKX07CiAgICAgICAgYm94LXNoYWRvdzogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIjAgMjBweCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAwIDEwcHggMTBweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4wNCkiLCAiMCAyMHB4IDI1cHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMyksIDAgMTBweCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIHdpZHRoOiA0ODBweDsKICAgICAgICBtYXgtd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMTBweCkgc2NhbGUoMC45OCk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBhbmltYXRpb246IG1vZGFsU2hvdyAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIGZvcndhcmRzOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIG1vZGFsU2hvdyB7CiAgICAgICAgdG8gewogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICAgIHRyYW5zZm9ybTogdHJhbnNsYXRlWSgwcHgpIHNjYWxlKDEpOwogICAgICAgIH0KICAgICAgfQoKICAgICAgLm1vZGFsLWhlYWRlciB7CiAgICAgICAgaGVpZ2h0OiA1MnB4OwogICAgICAgIHBhZGRpbmc6IDAgMjBweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4wNikiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA2KSIpfTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAubW9kYWwtdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAuY2xvc2UtYnV0dG9uIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDEwcHg7CiAgICAgICAgdG9wOiA1MCU7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKC01MCUpOwogICAgICAgIHdpZHRoOiAzMnB4OwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDUpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5jbG9zZS1idXR0b246YWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA4KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpIil9OwogICAgICB9CgogICAgICAubW9kYWwtYm9keSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAyMHB4OwogICAgICB9CgogICAgICAuY3JvcHBlci1jb250YWluZXIgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzYwcHg7CiAgICAgICAgYXNwZWN0LXJhdGlvOiAxOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjMDAwMDAwIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4wNikiLCAiaW5zZXQgMCAycHggNHB4IHJnYmEoMCwgMCwgMCwgMC4yKSIpfTsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDIwcHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICB3aWR0aDogMTgwcHg7CiAgICAgICAgaGVpZ2h0OiAxODBweDsKICAgICAgICBvYmplY3QtZml0OiBjb3ZlcjsKICAgICAgICBib3JkZXI6IDRweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4xKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjA1KSIsICIwIDEwcHggMTVweCAtM3B4IHJnYmEoMCwgMCwgMCwgMC4zKSwgMCA0cHggNnB4IC0ycHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5yb3VuZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICB9CgogICAgICAucHJldmlldy1pbWFnZS5zcXVhcmUgewogICAgICAgIGJvcmRlci1yYWRpdXM6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zdWNjZXNzLW1lc3NhZ2UgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAyMHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMTBiOTgxIiwgIiMxMGI5ODEiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGFuaW1hdGlvbjogc3VjY2Vzc1B1bHNlIDAuNHMgZWFzZS1vdXQ7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3VjY2Vzc1B1bHNlIHsKICAgICAgICAwJSB7IHRyYW5zZm9ybTogc2NhbGUoMC45KTsgb3BhY2l0eTogMDsgfQogICAgICAgIDUwJSB7IHRyYW5zZm9ybTogc2NhbGUoMS4wMik7IH0KICAgICAgICAxMDAlIHsgdHJhbnNmb3JtOiBzY2FsZSgxKTsgb3BhY2l0eTogMTsgfQogICAgICB9CgogICAgICAubW9kYWwtZm9vdGVyIHsKICAgICAgICBwYWRkaW5nOiAyMHB4IDI0cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMDYpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNikiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmluc3RydWN0aW9ucyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjYTFhMWFhIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXNwaW5uZXIgewogICAgICAgIHdpZHRoOiA0MHB4OwogICAgICAgIGhlaWdodDogNDBweDsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjEpIiwgInJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKSIpfTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjNjBhNWZhIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IHNwaW4gMC42cyBsaW5lYXIgaW5maW5pdGU7CiAgICAgIH0KCiAgICAgIEBrZXlmcmFtZXMgc3BpbiB7CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMzYwZGVnKTsKICAgICAgICB9CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiA3NjhweCkgewogICAgICAgIC5tb2RhbC1jb250YWluZXIgewogICAgICAgICAgd2lkdGg6IGNhbGMoMTAwdncgLSAzMnB4KTsKICAgICAgICAgIG1hcmdpbjogMTZweDsKICAgICAgICB9CiAgICAgICAgCiAgICAgICAgLm1vZGFsLWJvZHkgewogICAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB9CiAgICAgIH0KICAgIGAKICAgIF07CiAgICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH0pOwogICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gdGhpcy5jbG9zZSgpKTsKICAgICAgdGhpcy56SW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHRoaXMuc3R5bGUuc2V0UHJvcGVydHkoIi0tei1pbmRleCIsIHRoaXMuekluZGV4LnRvU3RyaW5nKCkpOwogICAgICB6SW5kZXhSZWdpc3RyeS5yZWdpc3Rlcih0aGlzLCB0aGlzLnpJbmRleCk7CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgaWYgKHRoaXMuY3JvcHBlcikgewogICAgICAgIHRoaXMuY3JvcHBlci5kZXN0cm95KCk7CiAgICAgIH0KICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWNvbnRhaW5lciIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbC1oZWFkZXIiPgogICAgICAgICAgPGgzIGNsYXNzPSJtb2RhbC10aXRsZSI+CiAgICAgICAgICAgICR7dGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiID8gIkFkanVzdCBJbWFnZSIgOiAiU3VjY2VzcyJ9CiAgICAgICAgICA8L2gzPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY2xvc2UtYnV0dG9uIiBAY2xpY2s9JHt0aGlzLmNsb3NlfSB0aXRsZT0iQ2xvc2UiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTp4IiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgPC9idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgICAgCiAgICAgICAgPGRpdiBjbGFzcz0ibW9kYWwtYm9keSI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbnN0cnVjdGlvbnMiPgogICAgICAgICAgICAgIFBvc2l0aW9uIGFuZCByZXNpemUgdGhlIHNxdWFyZSB0byBzZWxlY3QgeW91ciBwcm9maWxlIGFyZWEKICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNyb3BwZXItY29udGFpbmVyIiBpZD0iY3JvcHBlckNvbnRhaW5lciI+PC9kaXY+CiAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgICAgICAke3RoaXMuaXNQcm9jZXNzaW5nID8gYjJgCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5zdHJ1Y3Rpb25zIj5TYXZpbmcuLi48L2Rpdj4KICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICA8aW1nIAogICAgICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1pbWFnZSAke3RoaXMuc2hhcGV9IiAKICAgICAgICAgICAgICAgICAgc3JjPSIke3RoaXMuY3JvcHBlZEltYWdlfSIgCiAgICAgICAgICAgICAgICAgIGFsdD0iQ3JvcHBlZCBwcmV2aWV3IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InN1Y2Nlc3MtbWVzc2FnZSI+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOmNoZWNrIiBpY29uU2l6ZT0iMTYiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICA8c3Bhbj5Mb29raW5nIGdvb2QhPC9zcGFuPgogICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgfQogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxkaXYgY2xhc3M9Im1vZGFsLWZvb3RlciI+CiAgICAgICAgICAke3RoaXMuY3VycmVudFN0ZXAgPT09ICJjcm9wIiA/IGIyYAogICAgICAgICAgICA8ZGVlcy1idXR0b24gdHlwZT0iZGVzdHJ1Y3RpdmUiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmNsb3NlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uIHR5cGU9ImRlZmF1bHQiIHNpemU9InNtIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUNyb3B9PgogICAgICAgICAgICAgIFNhdmUKICAgICAgICAgICAgPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIGAgOiAiIn0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50U3RlcCA9PT0gImNyb3AiKSB7CiAgICAgICAgYXdhaXQgdGhpcy5pbml0aWFsaXplQ3JvcHBlcigpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBpbml0aWFsaXplQ3JvcHBlcigpIHsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgY29uc3QgY29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LmdldEVsZW1lbnRCeUlkKCJjcm9wcGVyQ29udGFpbmVyIik7CiAgICAgIGlmICghY29udGFpbmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5jcm9wcGVyID0gbmV3IEltYWdlQ3JvcHBlcih7CiAgICAgICAgY29udGFpbmVyLAogICAgICAgIGltYWdlOiB0aGlzLmluaXRpYWxJbWFnZSwKICAgICAgICBzaGFwZTogdGhpcy5zaGFwZSwKICAgICAgICBhc3BlY3RSYXRpbzogMSwKICAgICAgICBvdXRwdXRTaXplOiB0aGlzLm91dHB1dFNpemUsCiAgICAgICAgb3V0cHV0UXVhbGl0eTogdGhpcy5vdXRwdXRRdWFsaXR5CiAgICAgIH0pOwogICAgICBhd2FpdCB0aGlzLmNyb3BwZXIuaW5pdGlhbGl6ZSgpOwogICAgfQogICAgYXN5bmMgaGFuZGxlQ3JvcCgpIHsKICAgICAgaWYgKCF0aGlzLmNyb3BwZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0cnkgewogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gdHJ1ZTsKICAgICAgICB0aGlzLmN1cnJlbnRTdGVwID0gInByZXZpZXciOwogICAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgICAgY29uc3QgY3JvcHBlZERhdGEgPSBhd2FpdCB0aGlzLmNyb3BwZXIuZ2V0Q3JvcHBlZEltYWdlKCk7CiAgICAgICAgdGhpcy5jcm9wcGVkSW1hZ2UgPSBjcm9wcGVkRGF0YTsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDgwMCkpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgic2F2ZSIsIHsKICAgICAgICAgIGRldGFpbDogeyBjcm9wcGVkSW1hZ2U6IHRoaXMuY3JvcHBlZEltYWdlIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KSk7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0aGlzLmNsb3NlKCk7CiAgICAgICAgfSwgMTUwMCk7CiAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgY3JvcHBpbmcgaW1hZ2U6IiwgZXJyb3IpOwogICAgICAgIHRoaXMuaXNQcm9jZXNzaW5nID0gZmFsc2U7CiAgICAgIH0KICAgIH0KICAgIGNsb3NlKCkgewogICAgICB0aGlzLnJlbW92ZSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gUHJvZmlsZVBpY3R1cmVNb2RhbDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLWlucHV0L3Byb2ZpbGVwaWN0dXJlL2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgICR7aWAKICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWF4LXdpZHRoOiAxMjAwcHg7CiAgICAgICAgbWFyZ2luOiAwIGF1dG87CiAgICAgIH0KICAgICAgCiAgICAgIGRlZXMtcGFuZWwgewogICAgICAgIG1hcmdpbi1ib3R0b206IDI0cHg7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDQ4cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICAgIH0KICAgICAgCiAgICAgIC5kZW1vLW91dHB1dCB7CiAgICAgICAgbWFyZ2luLXRvcDogMTZweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMTA1LCAyNDIsIDAuMSk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBtYXgtaGVpZ2h0OiAxMDBweDsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICAuZmVhdHVyZS1saXN0IHsKICAgICAgICBtYXJnaW4tdG9wOiAxNnB4OwogICAgICAgIHBhZGRpbmctbGVmdDogMjBweDsKICAgICAgfQogICAgICAKICAgICAgLmZlYXR1cmUtbGlzdCBsaSB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgICB9CiAgICBgfQogIDwvc3R5bGU+CiAgCiAgPGRpdiBjbGFzcz0iZGVtby1jb250YWluZXIiPgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCByb3VuZFByb2ZpbGUgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoJ2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmVbc2hhcGU9InJvdW5kIl0nKTsKICBpZiAocm91bmRQcm9maWxlKSB7CiAgICByb3VuZFByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coIlJvdW5kIHByb2ZpbGUgcGljdHVyZSBjaGFuZ2VkOiIsIHRhcmdldC52YWx1ZT8uc3Vic3RyaW5nKDAsIDUwKSArICIuLi4iKTsKICAgIH0pOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJQcm9maWxlIFBpY3R1cmUgSW5wdXQifSAuc3VidGl0bGU9JHsiQmFzaWMgdXNhZ2Ugd2l0aCByb3VuZCBhbmQgc3F1YXJlIHNoYXBlcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJQcm9maWxlIFBpY3R1cmUgKFJvdW5kKSIKICAgICAgICAgICAgZGVzY3JpcHRpb249IkNsaWNrIHRvIHVwbG9hZCBvciBkcmFnICYgZHJvcCBhbiBpbWFnZSIKICAgICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iUHJvZmlsZSBQaWN0dXJlIChTcXVhcmUpIgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iU3VwcG9ydHMgSlBFRywgUE5HLCBhbmQgV2ViUCBmb3JtYXRzIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICBzaXplPSIxMjAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CgogICAgPGRlZXMtZGVtb3dyYXBwZXIgLnJ1bkFmdGVyUmVuZGVyPSR7YXN5bmMgKGVsZW1lbnRBcmcpID0+IHsKICBjb25zdCBwcm9maWxlcyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpOwogIHByb2ZpbGVzLmZvckVhY2goKHByb2ZpbGUpID0+IHsKICAgIHByb2ZpbGUuYWRkRXZlbnRMaXN0ZW5lcigiY2hhbmdlIiwgKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGV2ZW50LnRhcmdldDsKICAgICAgY29uc29sZS5sb2coYFByb2ZpbGUgKHNpemUgJHt0YXJnZXQuc2l6ZX0pIGNoYW5nZWRgKTsKICAgIH0pOwogIH0pOwp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlNpemUgVmFyaWF0aW9ucyJ9IC5zdWJ0aXRsZT0keyJQcm9maWxlIHBpY3R1cmVzIGluIGRpZmZlcmVudCBzaXplcyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJTbWFsbCAoODBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iODAiCiAgICAgICAgICA+PC9kZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZQogICAgICAgICAgICBsYWJlbD0iTWVkaXVtICgxMjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTIwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IkxhcmdlICgxNjBweCkiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgc2l6ZT0iMTYwIgogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3Qgc2FtcGxlSW1hZ2VVcmwgPSAiZGF0YTppbWFnZS9zdmcreG1sO2Jhc2U2NCxQSE4yWnlCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnZUcxc2JuTTlJbWgwZEhBNkx5OTNkM2N1ZHpNdWIzSm5Mekl3TURBdmMzWm5JajRLSUNBOFpHVm1jejRLSUNBZ0lEeHNhVzVsWVhKSGNtRmthV1Z1ZENCcFpEMGlaM0poWkdsbGJuUWlJSGd4UFNJd0pTSWdlVEU5SWpBbElpQjRNajBpTVRBd0pTSWdlVEk5SWpFd01DVWlQZ29nSUNBZ0lDQThjM1J2Y0NCdlptWnpaWFE5SWpBbElpQnpkRzl3TFdOdmJHOXlQU0lqTmpZM1pXVmhJaUF2UGdvZ0lDQWdJQ0E4YzNSdmNDQnZabVp6WlhROUlqRXdNQ1VpSUhOMGIzQXRZMjlzYjNJOUlpTTNOalJpWVRJaUlDOCtDaUFnSUNBOEwyeHBibVZoY2tkeVlXUnBaVzUwUGdvZ0lEd3ZaR1ZtY3o0S0lDQThjbVZqZENCM2FXUjBhRDBpTWpBd0lpQm9aV2xuYUhROUlqSXdNQ0lnWm1sc2JEMGlkWEpzS0NObmNtRmthV1Z1ZENraUlDOCtDaUFnUEhSbGVIUWdlRDBpTlRBbElpQjVQU0kxTUNVaUlHUnZiV2x1WVc1MExXSmhjMlZzYVc1bFBTSnRhV1JrYkdVaUlIUmxlSFF0WVc1amFHOXlQU0p0YVdSa2JHVWlJR1p2Ym5RdFptRnRhV3g1UFNKQmNtbGhiQ0lnWm05dWRDMXphWHBsUFNJNE1DSWdabWxzYkQwaWQyaHBkR1VpUGtwRVBDOTBaWGgwUGdvOEwzTjJaejQ9IjsKICBjb25zdCBwcmVmaWxsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjcHJlZmlsbGVkLXByb2ZpbGUiKTsKICBpZiAocHJlZmlsbGVkUHJvZmlsZSkgewogICAgcHJlZmlsbGVkUHJvZmlsZS52YWx1ZSA9IHNhbXBsZUltYWdlVXJsOwogICAgcHJlZmlsbGVkUHJvZmlsZS5hZGRFdmVudExpc3RlbmVyKCJjaGFuZ2UiLCAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBvdXRwdXQgPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoIiNwcmVmaWxsZWQtb3V0cHV0Iik7CiAgICAgIGlmIChvdXRwdXQpIHsKICAgICAgICBvdXRwdXQudGV4dENvbnRlbnQgPSB0YXJnZXQudmFsdWUgPyBgSW1hZ2UgZGF0YTogJHt0YXJnZXQudmFsdWUuc3Vic3RyaW5nKDAsIDgwKX0uLi5gIDogIk5vIGltYWdlIHNlbGVjdGVkIjsKICAgICAgfQogICAgfSk7CiAgfQp9fT4KICAgICAgPGRlZXMtcGFuZWwgLnRpdGxlPSR7IlByZS1maWxsZWQgYW5kIFZhbHVlIEJpbmRpbmcifSAuc3VidGl0bGU9JHsiUHJvZmlsZSBwaWN0dXJlIHdpdGggaW5pdGlhbCB2YWx1ZSBhbmQgY2hhbmdlIHRyYWNraW5nIn0+CiAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgIGlkPSJwcmVmaWxsZWQtcHJvZmlsZSIKICAgICAgICAgIGxhYmVsPSJFZGl0IEV4aXN0aW5nIFByb2ZpbGUiCiAgICAgICAgICBkZXNjcmlwdGlvbj0iQ2xpY2sgdGhlIGVkaXQgYnV0dG9uIHRvIGNoYW5nZSBvciBkZWxldGUgdG8gcmVtb3ZlIgogICAgICAgICAgc2hhcGU9InJvdW5kIgogICAgICAgICAgc2l6ZT0iMTUwIgogICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgCiAgICAgICAgPGRpdiBpZD0icHJlZmlsbGVkLW91dHB1dCIgY2xhc3M9ImRlbW8tb3V0cHV0Ij4KICAgICAgICAgIEltYWdlIGRhdGEgd2lsbCBhcHBlYXIgaGVyZSB3aGVuIGNoYW5nZWQKICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgY29uc3QgZGlzYWJsZWRQcm9maWxlID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGlzYWJsZWQtcHJvZmlsZSIpOwogIGlmIChkaXNhYmxlZFByb2ZpbGUpIHsKICAgIGRpc2FibGVkUHJvZmlsZS52YWx1ZSA9ICJkYXRhOmltYWdlL3N2Zyt4bWw7YmFzZTY0LFBITjJaeUIzYVdSMGFEMGlNakF3SWlCb1pXbG5hSFE5SWpJd01DSWdlRzFzYm5NOUltaDBkSEE2THk5M2QzY3Vkek11YjNKbkx6SXdNREF2YzNabklqNEtJQ0E4Y21WamRDQjNhV1IwYUQwaU1qQXdJaUJvWldsbmFIUTlJakl3TUNJZ1ptbHNiRDBpSTJOalkyTmpZeUlnTHo0S0lDQThkR1Y0ZENCNFBTSTFNQ1VpSUhrOUlqVXdKU0lnWkc5dGFXNWhiblF0WW1GelpXeHBibVU5SW0xcFpHUnNaU0lnZEdWNGRDMWhibU5vYjNJOUltMXBaR1JzWlNJZ1ptOXVkQzFtWVcxcGJIazlJa0Z5YVdGc0lpQm1iMjUwTFhOcGVtVTlJall3SWlCbWFXeHNQU0ozYUdsMFpTSStUa0U4TDNSbGVIUStDand2YzNablBnPT0iOwogIH0KfX0+CiAgICAgIDxkZWVzLXBhbmVsIC50aXRsZT0keyJGb3JtIFN0YXRlcyJ9IC5zdWJ0aXRsZT0keyJEaWZmZXJlbnQgc3RhdGVzIGFuZCBjb25maWd1cmF0aW9ucyJ9PgogICAgICAgIDxkaXYgY2xhc3M9ImRlbW8tcm93Ij4KICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGxhYmVsPSJSZXF1aXJlZCBGaWVsZCIKICAgICAgICAgICAgZGVzY3JpcHRpb249IlRoaXMgZmllbGQgaXMgcmVxdWlyZWQiCiAgICAgICAgICAgIHNoYXBlPSJyb3VuZCIKICAgICAgICAgICAgLnJlcXVpcmVkPSR7dHJ1ZX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmU+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWlucHV0LXByb2ZpbGVwaWN0dXJlCiAgICAgICAgICAgIGlkPSJkaXNhYmxlZC1wcm9maWxlIgogICAgICAgICAgICBsYWJlbD0iRGlzYWJsZWQgU3RhdGUiCiAgICAgICAgICAgIGRlc2NyaXB0aW9uPSJDYW5ub3QgYmUgZWRpdGVkIgogICAgICAgICAgICBzaGFwZT0ic3F1YXJlIgogICAgICAgICAgICAuZGlzYWJsZWQ9JHt0cnVlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtaW5wdXQtcHJvZmlsZXBpY3R1cmUKICAgICAgICAgICAgbGFiZWw9IlVwbG9hZCBPbmx5IgogICAgICAgICAgICBkZXNjcmlwdGlvbj0iRGVsZXRlIG5vdCBhbGxvd2VkIgogICAgICAgICAgICBzaGFwZT0icm91bmQiCiAgICAgICAgICAgIC5hbGxvd0RlbGV0ZT0ke2ZhbHNlfQogICAgICAgICAgPjwvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZT4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kZWVzLXBhbmVsPgogICAgPC9kZWVzLWRlbW93cmFwcGVyPgoKICAgIDxkZWVzLWRlbW93cmFwcGVyPgogICAgICA8ZGVlcy1wYW5lbCAudGl0bGU9JHsiRmVhdHVyZXMifSAuc3VidGl0bGU9JHsiQ29tcGxldGUgZmVhdHVyZSBzZXQgb2YgdGhlIHByb2ZpbGUgcGljdHVyZSBpbnB1dCJ9PgogICAgICAgIDx1bCBjbGFzcz0iZmVhdHVyZS1saXN0Ij4KICAgICAgICAgIDxsaT48c3Ryb25nPkltYWdlIFVwbG9hZDo8L3N0cm9uZz4gQ2xpY2sgdG8gdXBsb2FkIG9yIGRyYWcgJiBkcm9wIGltYWdlczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5JbWFnZSBDcm9wcGluZzo8L3N0cm9uZz4gSW50ZXJhY3RpdmUgY3JvcCB0b29sIHdpdGggcmVzaXplIGhhbmRsZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2hhcGUgU3VwcG9ydDo8L3N0cm9uZz4gUm91bmQgb3Igc3F1YXJlIHByb2ZpbGUgcGljdHVyZXM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+U2l6ZSBDdXN0b21pemF0aW9uOjwvc3Ryb25nPiBBZGp1c3RhYmxlIGRpbWVuc2lvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UHJldmlldyAmIEVkaXQ6PC9zdHJvbmc+IEhvdmVyIG92ZXJsYXkgd2l0aCBlZGl0IGFuZCBkZWxldGUgb3B0aW9uczwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5GaWxlIFZhbGlkYXRpb246PC9zdHJvbmc+IEZvcm1hdCBhbmQgc2l6ZSByZXN0cmljdGlvbnM8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+UmVzcG9uc2l2ZSBEZXNpZ246PC9zdHJvbmc+IFdvcmtzIG9uIGRlc2t0b3AgYW5kIG1vYmlsZSBkZXZpY2VzPC9saT4KICAgICAgICAgIDxsaT48c3Ryb25nPkZvcm0gSW50ZWdyYXRpb246PC9zdHJvbmc+IFN0YW5kYXJkIGZvcm0gdmFsdWUgYmluZGluZyBhbmQgdmFsaWRhdGlvbjwvbGk+CiAgICAgICAgICA8bGk+PHN0cm9uZz5BY2Nlc3NpYmlsaXR5Ojwvc3Ryb25nPiBLZXlib2FyZCBuYXZpZ2F0aW9uIGFuZCBzY3JlZW4gcmVhZGVyIHN1cHBvcnQ8L2xpPgogICAgICAgICAgPGxpPjxzdHJvbmc+Wi1JbmRleCBNYW5hZ2VtZW50Ojwvc3Ryb25nPiBQcm9wZXIgbW9kYWwgc3RhY2tpbmcgd2l0aCByZWdpc3RyeTwvbGk+CiAgICAgICAgPC91bD4KICAgICAgICAKICAgICAgICA8ZGl2IHN0eWxlPSJtYXJnaW4tdG9wOiAyNHB4OyI+CiAgICAgICAgICA8c3Ryb25nPlN1cHBvcnRlZCBGb3JtYXRzOjwvc3Ryb25nPiBKUEVHLCBQTkcsIFdlYlA8YnI+CiAgICAgICAgICA8c3Ryb25nPk1heCBGaWxlIFNpemU6PC9zdHJvbmc+IDVNQiAoY29uZmlndXJhYmxlKTxicj4KICAgICAgICAgIDxzdHJvbmc+T3V0cHV0IEZvcm1hdDo8L3N0cm9uZz4gQmFzZTY0IGVuY29kZWQgSlBFRwogICAgICAgIDwvZGl2PgogICAgICA8L2RlZXMtcGFuZWw+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtaW5wdXQvcHJvZmlsZXBpY3R1cmUvZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU2NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNjcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1pbnB1dC1wcm9maWxlcGljdHVyZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzSW5wdXRCYXNlOwogIGxldCBfdmFsdWVfZGVjb3JhdG9yczsKICBsZXQgX3ZhbHVlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdmFsdWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2RlY29yYXRvcnM7CiAgbGV0IF9zaGFwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NoYXBlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZGVjb3JhdG9yczsKICBsZXQgX3BsYWNlaG9sZGVyX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2RlY29yYXRvcnM7CiAgbGV0IF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FsbG93VXBsb2FkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzOwogIGxldCBfYWxsb3dEZWxldGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZGVjb3JhdG9yczsKICBsZXQgX21heEZpbGVTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2FjY2VwdGVkRm9ybWF0c19kZWNvcmF0b3JzOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWNjZXB0ZWRGb3JtYXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9vdXRwdXRTaXplX2RlY29yYXRvcnM7CiAgbGV0IF9vdXRwdXRTaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0U2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzOwogIGxldCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX291dHB1dFF1YWxpdHlfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0RyYWdnaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0RyYWdnaW5nX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNMb2FkaW5nX2RlY29yYXRvcnM7CiAgbGV0IF9pc0xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfdmFsdWVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9zaGFwZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9wbGFjZWhvbGRlcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX2FsbG93VXBsb2FkX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2FsbG93RGVsZXRlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX21heEZpbGVTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9vdXRwdXRTaXplX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfb3V0cHV0UXVhbGl0eV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzSG92ZXJlZF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNEcmFnZ2luZ19kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfaXNMb2FkaW5nX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF92YWx1ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ2YWx1ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidmFsdWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudmFsdWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnZhbHVlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ZhbHVlX2luaXRpYWxpemVycywgX3ZhbHVlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3NoYXBlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNoYXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaGFwZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaGFwZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hhcGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hhcGVfaW5pdGlhbGl6ZXJzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfc2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2l6ZV9pbml0aWFsaXplcnMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX3BsYWNlaG9sZGVyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBsYWNlaG9sZGVyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wbGFjZWhvbGRlciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGxhY2Vob2xkZXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCBfcGxhY2Vob2xkZXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWxsb3dVcGxvYWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiYWxsb3dVcGxvYWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFsbG93VXBsb2FkIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFsbG93VXBsb2FkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5hbGxvd1VwbG9hZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hbGxvd1VwbG9hZF9pbml0aWFsaXplcnMsIF9hbGxvd1VwbG9hZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9hbGxvd0RlbGV0ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJhbGxvd0RlbGV0ZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWxsb3dEZWxldGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWxsb3dEZWxldGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmFsbG93RGVsZXRlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FsbG93RGVsZXRlX2luaXRpYWxpemVycywgX2FsbG93RGVsZXRlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX21heEZpbGVTaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1heEZpbGVTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJtYXhGaWxlU2l6ZSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXhGaWxlU2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWF4RmlsZVNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbWF4RmlsZVNpemVfaW5pdGlhbGl6ZXJzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfYWNjZXB0ZWRGb3JtYXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjY2VwdGVkRm9ybWF0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYWNjZXB0ZWRGb3JtYXRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmFjY2VwdGVkRm9ybWF0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWNjZXB0ZWRGb3JtYXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2FjY2VwdGVkRm9ybWF0c19pbml0aWFsaXplcnMsIF9hY2NlcHRlZEZvcm1hdHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfb3V0cHV0U2l6ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJvdXRwdXRTaXplIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJvdXRwdXRTaXplIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm91dHB1dFNpemUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm91dHB1dFNpemUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfb3V0cHV0U2l6ZV9pbml0aWFsaXplcnMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjYodGhpcywgbnVsbCwgX291dHB1dFF1YWxpdHlfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAib3V0cHV0UXVhbGl0eSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAib3V0cHV0UXVhbGl0eSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5vdXRwdXRRdWFsaXR5LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5vdXRwdXRRdWFsaXR5ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX291dHB1dFF1YWxpdHlfaW5pdGlhbGl6ZXJzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0hvdmVyZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaXNIb3ZlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0hvdmVyZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pc0hvdmVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNIb3ZlcmVkX2luaXRpYWxpemVycywgX2lzSG92ZXJlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY2KHRoaXMsIG51bGwsIF9pc0RyYWdnaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzRHJhZ2dpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzRHJhZ2dpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNEcmFnZ2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNEcmFnZ2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0RyYWdnaW5nX2luaXRpYWxpemVycywgX2lzRHJhZ2dpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2Nih0aGlzLCBudWxsLCBfaXNMb2FkaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzTG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNMb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzTG9hZGluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNMb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIF9pc0xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NihudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNJbnB1dFByb2ZpbGVQaWN0dXJlMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDE7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIklucHV0IjsKICAgICN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfdmFsdWVfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgdmFsdWUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN2YWx1ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gQmFzZTY0IGVuY29kZWQgaW1hZ2Ugb3IgVVJMCiAgICBzZXQgdmFsdWUodmFsdWUyKSB7CiAgICAgIHRoaXMuI3ZhbHVlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF92YWx1ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3NoYXBlX2luaXRpYWxpemVycywgInJvdW5kIikpOwogICAgZ2V0IHNoYXBlKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaGFwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2hhcGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfc2hhcGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMTIwKSk7CiAgICBnZXQgc2l6ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NpemVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzaXplKHZhbHVlMikgewogICAgICB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9zaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfcGxhY2Vob2xkZXJfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IHBsYWNlaG9sZGVyKCkgewogICAgICByZXR1cm4gdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGxhY2Vob2xkZXJfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX3BsYWNlaG9sZGVyX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgYWxsb3dVcGxvYWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFsbG93VXBsb2FkKHZhbHVlMikgewogICAgICB0aGlzLiNhbGxvd1VwbG9hZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfYWxsb3dVcGxvYWRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBhbGxvd0RlbGV0ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgYWxsb3dEZWxldGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FsbG93RGVsZXRlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWF4RmlsZVNpemVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hbGxvd0RlbGV0ZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX21heEZpbGVTaXplX2luaXRpYWxpemVycywgNSAqIDEwMjQgKiAxMDI0KSk7CiAgICBnZXQgbWF4RmlsZVNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtYXhGaWxlU2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gNU1CCiAgICBzZXQgbWF4RmlsZVNpemUodmFsdWUyKSB7CiAgICAgIHRoaXMuI21heEZpbGVTaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfbWF4RmlsZVNpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9hY2NlcHRlZEZvcm1hdHNfaW5pdGlhbGl6ZXJzLCBbImltYWdlL2pwZWciLCAiaW1hZ2UvcG5nIiwgImltYWdlL3dlYnAiXSkpOwogICAgZ2V0IGFjY2VwdGVkRm9ybWF0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2FjY2VwdGVkRm9ybWF0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjY2VwdGVkRm9ybWF0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYWNjZXB0ZWRGb3JtYXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2FjY2VwdGVkRm9ybWF0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX291dHB1dFNpemVfaW5pdGlhbGl6ZXJzLCA4MDApKTsKICAgIGdldCBvdXRwdXRTaXplKCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gT3V0cHV0IHJlc29sdXRpb24gaW4gcGl4ZWxzCiAgICBzZXQgb3V0cHV0U2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jb3V0cHV0U2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI291dHB1dFF1YWxpdHlfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY3KHRoaXMsIF9vdXRwdXRTaXplX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9pbml0aWFsaXplcnMsIDAuOTUpKTsKICAgIGdldCBvdXRwdXRRdWFsaXR5KCkgewogICAgICByZXR1cm4gdGhpcy4jb3V0cHV0UXVhbGl0eV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgLy8gMC0xIHF1YWxpdHkgZm9yIEpQRUcKICAgIHNldCBvdXRwdXRRdWFsaXR5KHZhbHVlMikgewogICAgICB0aGlzLiNvdXRwdXRRdWFsaXR5X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfb3V0cHV0UXVhbGl0eV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzSG92ZXJlZF9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNIb3ZlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmVkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNIb3ZlcmVkKHZhbHVlMikgewogICAgICB0aGlzLiNpc0hvdmVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNIb3ZlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNEcmFnZ2luZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzRHJhZ2dpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0RyYWdnaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0RyYWdnaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNEcmFnZ2luZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjcodGhpcywgX2lzTG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgaXNMb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNMb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaXNMb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNpc0xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIG1vZGFsSW5zdGFuY2UgPSAoX19ydW5Jbml0aWFsaXplcnM2Nyh0aGlzLCBfaXNMb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgbnVsbCk7CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIC4uLkRlZXNJbnB1dEJhc2UuYmFzZVN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICB9CgogICAgICAuaW5wdXQtd3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1jb250YWluZXI6aG92ZXIgewogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wMik7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUgewogICAgICAgIHdpZHRoOiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgaGVpZ2h0OiB2YXIoLS1zaXplLCAxMjBweCk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNWY1ZjUiLCAiIzE4MTgxYiIpfTsKICAgICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBlYXNlOwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLnJvdW5kIHsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmUuc3F1YXJlIHsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmRyYWdnaW5nIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgYm94LXNoYWRvdzogMCAwIDAgNHB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDU5LCAxMzAsIDI0NiwgMC4xNSkiLCAicmdiYSg5NiwgMTY1LCAyNTAsIDAuMTUpIil9OwogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlOmhvdmVyIHsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDRkNGQ4IiwgIiMzZjNmNDYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9maWxlLXBpY3R1cmU6ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAucHJvZmlsZS1pbWFnZSB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG9iamVjdC1maXQ6IGNvdmVyOwogICAgICB9CgogICAgICAucGxhY2Vob2xkZXItaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC42KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuM3MgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLnByb2ZpbGUtY29udGFpbmVyOmhvdmVyIC5vdmVybGF5IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAub3ZlcmxheS1jb250ZW50IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgfQoKICAgICAgLm92ZXJsYXktYnV0dG9uIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuOTUpIiwgInJnYmEoMzksIDM5LCA0MiwgMC45NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4ycyBlYXNlOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDRweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzNmM2Y0NiIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMSk7CiAgICAgICAgYm94LXNoYWRvdzogMCA0cHggOHB4IHJnYmEoMCwgMCwgMCwgMC4xNSk7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIzOSwgNjgsIDY4LCAwLjkpIiwgInJnYmEoMjIwLCAzOCwgMzgsIDAuOSkiKX07CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlci1jb2xvcjogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5vdmVybGF5LWJ1dHRvbi5kZWxldGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWY0NDQ0IiwgIiNkYzI2MjYiKX07CiAgICAgIH0KCiAgICAgIC5kcm9wLXpvbmUtdGV4dCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogNTAlOwogICAgICAgIGxlZnQ6IDUwJTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZSgtNTAlLCAtNTAlKTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgY29sb3I6IHdoaXRlOwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5oaWRkZW4taW5wdXQgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC8qIExvYWRpbmcgYW5pbWF0aW9uICovCiAgICAgIC5sb2FkaW5nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjU1LCAyNTUsIDI1NSwgMC44KSIsICJyZ2JhKDAsIDAsIDAsIDAuOCkiKX07CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGJvcmRlci1yYWRpdXM6IGluaGVyaXQ7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctb3ZlcmxheS5zaG93IHsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICB9CgogICAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgICB3aWR0aDogNDBweDsKICAgICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgICAgYm9yZGVyOiAzcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xKSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgYm9yZGVyLXRvcC1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzYwYTVmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYW5pbWF0aW9uOiBzcGluIDAuNnMgbGluZWFyIGluZmluaXRlOwogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHNwaW4gewogICAgICAgIHRvIHsKICAgICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBAa2V5ZnJhbWVzIHB1bHNlIHsKICAgICAgICAwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEpOwogICAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB9CiAgICAgICAgNTAlIHsKICAgICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMS4wNSk7CiAgICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgfQogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxKTsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgfQogICAgICB9CgogICAgICAucHJvZmlsZS1waWN0dXJlLmNsaWNraW5nIHsKICAgICAgICBhbmltYXRpb246IHB1bHNlIDAuM3MgZWFzZS1vdXQ7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iaW5wdXQtd3JhcHBlciI+CiAgICAgICAgPGRlZXMtbGFiZWwgLmxhYmVsPSR7dGhpcy5sYWJlbH0gLmRlc2NyaXB0aW9uPSR7dGhpcy5kZXNjcmlwdGlvbn0gLnJlcXVpcmVkPSR7dGhpcy5yZXF1aXJlZH0+PC9kZWVzLWxhYmVsPgogICAgICAgIAogICAgICAgIDxkaXYgCiAgICAgICAgICBjbGFzcz0icHJvZmlsZS1jb250YWluZXIiCiAgICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgICAgQGRyYWdvdmVyPSR7dGhpcy5oYW5kbGVEcmFnT3Zlcn0KICAgICAgICAgIEBkcmFnbGVhdmU9JHt0aGlzLmhhbmRsZURyYWdMZWF2ZX0KICAgICAgICAgIEBkcm9wPSR7dGhpcy5oYW5kbGVEcm9wfQogICAgICAgICAgc3R5bGU9Ii0tc2l6ZTogJHt0aGlzLnNpemV9cHgiCiAgICAgICAgPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJvZmlsZS1waWN0dXJlICR7dGhpcy5zaGFwZX0gJHt0aGlzLmlzRHJhZ2dpbmcgPyAiZHJhZ2dpbmciIDogIiJ9ICR7dGhpcy5pc0xvYWRpbmcgJiYgIXRoaXMudmFsdWUgPyAiY2xpY2tpbmciIDogIiJ9Ij4KICAgICAgICAgICAgJHt0aGlzLnZhbHVlID8gYjJgCiAgICAgICAgICAgICAgPGltZyBjbGFzcz0icHJvZmlsZS1pbWFnZSIgc3JjPSIke3RoaXMudmFsdWV9IiBhbHQ9IlByb2ZpbGUgcGljdHVyZSIgLz4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkZWVzLWljb24gY2xhc3M9InBsYWNlaG9sZGVyLWljb24iIGljb249Imx1Y2lkZTp1c2VyIiBpY29uU2l6ZT0iJHt0aGlzLnNpemUgKiAwLjV9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgYH0KICAgICAgICAgICAgCiAgICAgICAgICAgICR7dGhpcy5pc0RyYWdnaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ib3ZlcmxheSIgc3R5bGU9Im9wYWNpdHk6IDEiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZHJvcC16b25lLXRleHQiPgogICAgICAgICAgICAgICAgICBEcm9wIGltYWdlIGhlcmUKICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgIAogICAgICAgICAgICAke3RoaXMudmFsdWUgJiYgIXRoaXMuZGlzYWJsZWQgPyBiMmAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJvdmVybGF5Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9Im92ZXJsYXktY29udGVudCI+CiAgICAgICAgICAgICAgICAgICR7dGhpcy5hbGxvd1VwbG9hZCA/IGIyYAogICAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9Im92ZXJsYXktYnV0dG9uIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMub3Blbk1vZGFsKCk7CiAgICAgIH19IHRpdGxlPSJDaGFuZ2UgcGljdHVyZSI+CiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpwZW5jaWwiIGljb25TaXplPSIyMCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgICAgJHt0aGlzLmFsbG93RGVsZXRlID8gYjJgCiAgICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ib3ZlcmxheS1idXR0b24gZGVsZXRlIiBAY2xpY2s9JHsoZTExKSA9PiB7CiAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgIHRoaXMuZGVsZXRlUGljdHVyZSgpOwogICAgICB9fSB0aXRsZT0iRGVsZXRlIHBpY3R1cmUiPgogICAgICAgICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6dHJhc2gyIiBpY29uU2l6ZT0iMjAiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgICAKICAgICAgICAgICAgJHt0aGlzLmlzTG9hZGluZyAmJiAhdGhpcy52YWx1ZSA/IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctb3ZlcmxheSBzaG93Ij4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3Bpbm5lciI+PC9kaXY+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICAgIAogICAgICAgIDxpbnB1dAogICAgICAgICAgdHlwZT0iZmlsZSIKICAgICAgICAgIGNsYXNzPSJoaWRkZW4taW5wdXQiCiAgICAgICAgICBhY2NlcHQ9IiR7dGhpcy5hY2NlcHRlZEZvcm1hdHMuam9pbigiLCIpfSIKICAgICAgICAgIEBjaGFuZ2U9JHt0aGlzLmhhbmRsZUZpbGVTZWxlY3R9CiAgICAgICAgLz4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgaGFuZGxlQ2xpY2soKSB7CiAgICAgIGlmICh0aGlzLmRpc2FibGVkIHx8ICF0aGlzLmFsbG93VXBsb2FkKQogICAgICAgIHJldHVybjsKICAgICAgaWYgKCF0aGlzLnZhbHVlKSB7CiAgICAgICAgdGhpcy5pc0xvYWRpbmcgPSB0cnVlOwogICAgICAgIGNvbnN0IGlucHV0ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5oaWRkZW4taW5wdXQiKTsKICAgICAgICBjb25zdCBoYW5kbGVGb2N1cyA9ICgpID0+IHsKICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICAgICAgICBpZiAoIWlucHV0LmZpbGVzIHx8IGlucHV0LmZpbGVzLmxlbmd0aCA9PT0gMCkgewogICAgICAgICAgICAgIHRoaXMuaXNMb2FkaW5nID0gZmFsc2U7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgd2luZG93LnJlbW92ZUV2ZW50TGlzdGVuZXIoImZvY3VzIiwgaGFuZGxlRm9jdXMpOwogICAgICAgICAgfSwgMzAwKTsKICAgICAgICB9OwogICAgICAgIHdpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJmb2N1cyIsIGhhbmRsZUZvY3VzKTsKICAgICAgICBpbnB1dC5jbGljaygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVGaWxlU2VsZWN0KGV2ZW50KSB7CiAgICAgIGNvbnN0IGlucHV0ID0gZXZlbnQudGFyZ2V0OwogICAgICBjb25zdCBmaWxlID0gaW5wdXQuZmlsZXM/LlswXTsKICAgICAgdGhpcy5pc0xvYWRpbmcgPSBmYWxzZTsKICAgICAgaWYgKGZpbGUpIHsKICAgICAgICB0aGlzLnByb2Nlc3NGaWxlKGZpbGUpOwogICAgICB9CiAgICAgIGlucHV0LnZhbHVlID0gIiI7CiAgICB9CiAgICBoYW5kbGVEcmFnT3ZlcihldmVudCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBpZiAoIXRoaXMuZGlzYWJsZWQgJiYgdGhpcy5hbGxvd1VwbG9hZCkgewogICAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IHRydWU7CiAgICAgIH0KICAgIH0KICAgIGhhbmRsZURyYWdMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0RyYWdnaW5nID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVEcm9wKGV2ZW50KSB7CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIHRoaXMuaXNEcmFnZ2luZyA9IGZhbHNlOwogICAgICBpZiAodGhpcy5kaXNhYmxlZCB8fCAhdGhpcy5hbGxvd1VwbG9hZCkKICAgICAgICByZXR1cm47CiAgICAgIGNvbnN0IGZpbGUgPSBldmVudC5kYXRhVHJhbnNmZXI/LmZpbGVzWzBdOwogICAgICBpZiAoZmlsZSkgewogICAgICAgIHRoaXMucHJvY2Vzc0ZpbGUoZmlsZSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHByb2Nlc3NGaWxlKGZpbGUpIHsKICAgICAgaWYgKCF0aGlzLmFjY2VwdGVkRm9ybWF0cy5pbmNsdWRlcyhmaWxlLnR5cGUpKSB7CiAgICAgICAgY29uc29sZS5lcnJvcigiSW52YWxpZCBmaWxlIHR5cGU6IiwgZmlsZS50eXBlKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKGZpbGUuc2l6ZSA+IHRoaXMubWF4RmlsZVNpemUpIHsKICAgICAgICBjb25zb2xlLmVycm9yKCJGaWxlIHRvbyBsYXJnZToiLCBmaWxlLnNpemUpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCByZWFkZXIgPSBuZXcgRmlsZVJlYWRlcigpOwogICAgICByZWFkZXIub25sb2FkID0gYXN5bmMgKGUxMSkgPT4gewogICAgICAgIGNvbnN0IGJhc2U2NDIgPSBlMTEudGFyZ2V0Py5yZXN1bHQ7CiAgICAgICAgYXdhaXQgdGhpcy5vcGVuTW9kYWwoYmFzZTY0Mik7CiAgICAgIH07CiAgICAgIHJlYWRlci5yZWFkQXNEYXRhVVJMKGZpbGUpOwogICAgfQogICAgYXN5bmMgb3Blbk1vZGFsKGluaXRpYWxJbWFnZSkgewogICAgICBjb25zdCBpbWFnZVRvRWRpdCA9IGluaXRpYWxJbWFnZSB8fCB0aGlzLnZhbHVlOwogICAgICBpZiAoIWltYWdlVG9FZGl0KSB7CiAgICAgICAgY29uc3QgaW5wdXQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmhpZGRlbi1pbnB1dCIpOwogICAgICAgIGlucHV0LmNsaWNrKCk7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZSA9IG5ldyBQcm9maWxlUGljdHVyZU1vZGFsKCk7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5zaGFwZSA9IHRoaXMuc2hhcGU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5pbml0aWFsSW1hZ2UgPSBpbWFnZVRvRWRpdDsKICAgICAgdGhpcy5tb2RhbEluc3RhbmNlLm91dHB1dFNpemUgPSB0aGlzLm91dHB1dFNpemU7CiAgICAgIHRoaXMubW9kYWxJbnN0YW5jZS5vdXRwdXRRdWFsaXR5ID0gdGhpcy5vdXRwdXRRdWFsaXR5OwogICAgICB0aGlzLm1vZGFsSW5zdGFuY2UuYWRkRXZlbnRMaXN0ZW5lcigic2F2ZSIsIChldmVudCkgPT4gewogICAgICAgIHRoaXMudmFsdWUgPSBldmVudC5kZXRhaWwuY3JvcHBlZEltYWdlOwogICAgICAgIHRoaXMuY2hhbmdlU3ViamVjdC5uZXh0KHRoaXMpOwogICAgICB9KTsKICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh0aGlzLm1vZGFsSW5zdGFuY2UpOwogICAgfQogICAgZGVsZXRlUGljdHVyZSgpIHsKICAgICAgdGhpcy52YWx1ZSA9ICIiOwogICAgICB0aGlzLmNoYW5nZVN1YmplY3QubmV4dCh0aGlzKTsKICAgIH0KICAgIGdldFZhbHVlKCkgewogICAgICByZXR1cm4gdGhpcy52YWx1ZTsKICAgIH0KICAgIHNldFZhbHVlKHZhbHVlMikgewogICAgICB0aGlzLnZhbHVlID0gdmFsdWUyOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM2NyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0lucHV0UHJvZmlsZVBpY3R1cmUyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYvY29tcG9uZW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90cygpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNjcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczY4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGRmID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1wZGYiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZGZVcmxfZGVjb3JhdG9yczsKICBsZXQgX3BkZlVybF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3BkZlVybF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU2Nyh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2NyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGYyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIERFTU8KICAgIHN0YXRpYyBkZW1vID0gKCkgPT4gYjJgIDxkZWVzLXBkZj48L2RlZXMtcGRmPiBgOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM2OCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIpOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBwZGZVcmwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZGZVcmwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgodGhpcywgX3BkZlVybF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgIDpob3N0IHsKICAgICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICBtYXgtd2lkdGg6IDgwMHB4OwogICAgICAgIH0KICAgICAgICA6aG9zdChbaGlkZGVuXSkgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CgogICAgICAgICNwZGZjYW52YXMgewogICAgICAgICAgYm94LXNoYWRvdzogMHB4IDBweCA1cHggI2NjYzsKICAgICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGNhbnZhcwogICAgICAgIGlkPSJwZGZjYW52YXMiCiAgICAgICAgLmhlaWdodD0kezB9CiAgICAgICAgLndpZHRoPSR7MH0KCiAgICAgID48L2NhbnZhcz4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgcGRmSnNSZWFkeTsKICAgIHN0YXRpYyBwZGZqc0xpYjsKICAgIC8vIHR5cGVvZiBwZGZqc1R5cGVzOwogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGlmICghRGVlc1BkZjIucGRmSnNSZWFkeSkgewogICAgICAgIGNvbnN0IHBkZkpzUmVhZHlEZWZlcnJlZCA9IGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCk7CiAgICAgICAgRGVlc1BkZjIucGRmSnNSZWFkeSA9IHBkZkpzUmVhZHlEZWZlcnJlZC5wcm9taXNlOwogICAgICAgIERlZXNQZGYyLnBkZmpzTGliID0gYXdhaXQgaW1wb3J0KCJodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL3BkZmpzLWRpc3RANC4wLjM3OS8rZXNtIik7CiAgICAgICAgRGVlc1BkZjIucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgICAgIHBkZkpzUmVhZHlEZWZlcnJlZC5yZXNvbHZlKCk7CiAgICAgIH0KICAgICAgYXdhaXQgRGVlc1BkZjIucGRmSnNSZWFkeTsKICAgICAgdGhpcy5kaXNwbGF5Q29udGVudCgpOwogICAgfQogICAgYXN5bmMgZGlzcGxheUNvbnRlbnQoKSB7CiAgICAgIGF3YWl0IERlZXNQZGYyLnBkZkpzUmVhZHk7CiAgICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gRGVlc1BkZjIucGRmanNMaWIuZ2V0RG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICBsb2FkaW5nVGFzay5wcm9taXNlLnRoZW4oKHBkZikgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgbG9hZGVkIik7CiAgICAgICAgY29uc3QgcGFnZU51bWJlciA9IDE7CiAgICAgICAgcGRmLmdldFBhZ2UocGFnZU51bWJlcikudGhlbigocGFnZSkgPT4gewogICAgICAgICAgY29uc29sZS5sb2coIlBhZ2UgbG9hZGVkIik7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IDEwOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiI3BkZmNhbnZhcyIpOwogICAgICAgICAgY29uc3QgY29udGV4dDIgPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHJlbmRlclRhc2sucHJvbWlzZS50aGVuKGZ1bmN0aW9uKCkgewogICAgICAgICAgICBjb25zb2xlLmxvZygiUGFnZSByZW5kZXJlZCIpOwogICAgICAgICAgfSk7CiAgICAgICAgfSk7CiAgICAgIH0sIChyZWFzb24pID0+IHsKICAgICAgICBjb25zb2xlLmVycm9yKHJlYXNvbik7CiAgICAgIH0pOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgdGhlIGdsb2JhbCBjb250ZXh0IG1lbnUgaGFuZGxlcgogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICAgIGxpbmszLmhyZWYgPSB0aGlzLnBkZlVybDsKICAgICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNjgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGYyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL1BkZk1hbmFnZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIFBkZk1hbmFnZXIgPSBjbGFzcyB7CiAgc3RhdGljIHBkZmpzTGliOwogIHN0YXRpYyBpbml0aWFsaXplZCA9IGZhbHNlOwogIHN0YXRpYyBhc3luYyBpbml0aWFsaXplKCkgewogICAgaWYgKHRoaXMuaW5pdGlhbGl6ZWQpCiAgICAgIHJldHVybjsKICAgIHRoaXMucGRmanNMaWIgPSBhd2FpdCBpbXBvcnQoImh0dHBzOi8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEA0LjAuMzc5Lytlc20iKTsKICAgIHRoaXMucGRmanNMaWIuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMgPSAiaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9wZGZqcy1kaXN0QDQuMC4zNzkvYnVpbGQvcGRmLndvcmtlci5tanMiOwogICAgdGhpcy5pbml0aWFsaXplZCA9IHRydWU7CiAgfQogIHN0YXRpYyBhc3luYyBsb2FkRG9jdW1lbnQodXJsKSB7CiAgICBhd2FpdCB0aGlzLmluaXRpYWxpemUoKTsKICAgIGNvbnN0IGxvYWRpbmdUYXNrID0gdGhpcy5wZGZqc0xpYi5nZXREb2N1bWVudCh1cmwpOwogICAgY29uc3QgZG9jdW1lbnQ0ID0gYXdhaXQgbG9hZGluZ1Rhc2sucHJvbWlzZTsKICAgIHJldHVybiBkb2N1bWVudDQ7CiAgfQogIHN0YXRpYyByZWxlYXNlRG9jdW1lbnQoX3VybCkgewogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL0NhbnZhc1Bvb2wuanMKdmFyIENhbnZhc1Bvb2wgPSBjbGFzcyB7CiAgc3RhdGljIHBvb2wgPSBbXTsKICBzdGF0aWMgbWF4UG9vbFNpemUgPSAyMDsKICBzdGF0aWMgTUlOX0NBTlZBU19TSVpFID0gMjU2OwogIHN0YXRpYyBNQVhfQ0FOVkFTX1NJWkUgPSA0MDk2OwogIHN0YXRpYyBhY3F1aXJlKHdpZHRoLCBoZWlnaHQpIHsKICAgIGNvbnN0IHN1aXRhYmxlID0gdGhpcy5wb29sLmZpbmQoKGl0ZW0pID0+ICFpdGVtLmluVXNlICYmIGl0ZW0uY2FudmFzLndpZHRoID49IHdpZHRoICYmIGl0ZW0uY2FudmFzLmhlaWdodCA+PSBoZWlnaHQgJiYgaXRlbS5jYW52YXMud2lkdGggPD0gd2lkdGggKiAxLjUgJiYgaXRlbS5jYW52YXMuaGVpZ2h0IDw9IGhlaWdodCAqIDEuNSk7CiAgICBpZiAoc3VpdGFibGUpIHsKICAgICAgc3VpdGFibGUuaW5Vc2UgPSB0cnVlOwogICAgICBzdWl0YWJsZS5sYXN0VXNlZCA9IERhdGUubm93KCk7CiAgICAgIHN1aXRhYmxlLmNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgICBzdWl0YWJsZS5jYW52YXMuaGVpZ2h0ID0gaGVpZ2h0OwogICAgICBzdWl0YWJsZS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICByZXR1cm4gc3VpdGFibGU7CiAgICB9CiAgICBpZiAodGhpcy5wb29sLmxlbmd0aCA8IHRoaXMubWF4UG9vbFNpemUpIHsKICAgICAgY29uc3QgY2FudmFzMiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOwogICAgICBjb25zdCBjdHgyID0gY2FudmFzMi5nZXRDb250ZXh0KCIyZCIsIHsKICAgICAgICBhbHBoYTogdHJ1ZSwKICAgICAgICBkZXN5bmNocm9uaXplZDogdHJ1ZQogICAgICB9KTsKICAgICAgY2FudmFzMi53aWR0aCA9IE1hdGgubWluKE1hdGgubWF4KHdpZHRoLCB0aGlzLk1JTl9DQU5WQVNfU0laRSksIHRoaXMuTUFYX0NBTlZBU19TSVpFKTsKICAgICAgY2FudmFzMi5oZWlnaHQgPSBNYXRoLm1pbihNYXRoLm1heChoZWlnaHQsIHRoaXMuTUlOX0NBTlZBU19TSVpFKSwgdGhpcy5NQVhfQ0FOVkFTX1NJWkUpOwogICAgICBjb25zdCBwb29sZWRDYW52YXMgPSB7CiAgICAgICAgY2FudmFzOiBjYW52YXMyLAogICAgICAgIGN0eDogY3R4MiwKICAgICAgICBpblVzZTogdHJ1ZSwKICAgICAgICBsYXN0VXNlZDogRGF0ZS5ub3coKQogICAgICB9OwogICAgICB0aGlzLnBvb2wucHVzaChwb29sZWRDYW52YXMpOwogICAgICByZXR1cm4gcG9vbGVkQ2FudmFzOwogICAgfQogICAgY29uc3QgbHJ1ID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNvcnQoKGE1LCBiNSkgPT4gYTUubGFzdFVzZWQgLSBiNS5sYXN0VXNlZClbMF07CiAgICBpZiAobHJ1KSB7CiAgICAgIGxydS5jYW52YXMud2lkdGggPSB3aWR0aDsKICAgICAgbHJ1LmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CiAgICAgIGxydS5jdHguY2xlYXJSZWN0KDAsIDAsIHdpZHRoLCBoZWlnaHQpOwogICAgICBscnUuaW5Vc2UgPSB0cnVlOwogICAgICBscnUubGFzdFVzZWQgPSBEYXRlLm5vdygpOwogICAgICByZXR1cm4gbHJ1OwogICAgfQogICAgY29uc3QgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CiAgICBjb25zdCBjdHggPSBjYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOwogICAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKICAgIHJldHVybiB7CiAgICAgIGNhbnZhcywKICAgICAgY3R4LAogICAgICBpblVzZTogdHJ1ZSwKICAgICAgbGFzdFVzZWQ6IERhdGUubm93KCkKICAgIH07CiAgfQogIHN0YXRpYyByZWxlYXNlKHBvb2xlZENhbnZhcykgewogICAgaWYgKHRoaXMucG9vbC5pbmNsdWRlcyhwb29sZWRDYW52YXMpKSB7CiAgICAgIHBvb2xlZENhbnZhcy5pblVzZSA9IGZhbHNlOwogICAgICBwb29sZWRDYW52YXMuY3R4LmNsZWFyUmVjdCgwLCAwLCBwb29sZWRDYW52YXMuY2FudmFzLndpZHRoLCBwb29sZWRDYW52YXMuY2FudmFzLmhlaWdodCk7CiAgICB9CiAgfQogIHN0YXRpYyByZWxlYXNlQWxsKCkgewogICAgZm9yIChjb25zdCBpdGVtIG9mIHRoaXMucG9vbCkgewogICAgICBpdGVtLmluVXNlID0gZmFsc2U7CiAgICAgIGl0ZW0uY3R4LmNsZWFyUmVjdCgwLCAwLCBpdGVtLmNhbnZhcy53aWR0aCwgaXRlbS5jYW52YXMuaGVpZ2h0KTsKICAgIH0KICB9CiAgc3RhdGljIGRlc3Ryb3koKSB7CiAgICBmb3IgKGNvbnN0IGl0ZW0gb2YgdGhpcy5wb29sKSB7CiAgICAgIGl0ZW0uY2FudmFzLndpZHRoID0gMDsKICAgICAgaXRlbS5jYW52YXMuaGVpZ2h0ID0gMDsKICAgIH0KICAgIHRoaXMucG9vbCA9IFtdOwogIH0KICBzdGF0aWMgZ2V0U3RhdHMoKSB7CiAgICByZXR1cm4gewogICAgICBwb29sU2l6ZTogdGhpcy5wb29sLmxlbmd0aCwKICAgICAgbWF4UG9vbFNpemU6IHRoaXMubWF4UG9vbFNpemUsCiAgICAgIGluVXNlOiB0aGlzLnBvb2wuZmlsdGVyKChpdGVtKSA9PiBpdGVtLmluVXNlKS5sZW5ndGgsCiAgICAgIGF2YWlsYWJsZTogdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLmxlbmd0aAogICAgfTsKICB9CiAgc3RhdGljIGFkanVzdFBvb2xTaXplKG5ld1NpemUpIHsKICAgIGlmIChuZXdTaXplIDwgdGhpcy5wb29sLmxlbmd0aCkgewogICAgICBjb25zdCB0b1JlbW92ZSA9IHRoaXMucG9vbC5sZW5ndGggLSBuZXdTaXplOwogICAgICBjb25zdCByZW1vdmVkID0gdGhpcy5wb29sLmZpbHRlcigoaXRlbSkgPT4gIWl0ZW0uaW5Vc2UpLnNsaWNlKDAsIHRvUmVtb3ZlKTsKICAgICAgZm9yIChjb25zdCBpdGVtIG9mIHJlbW92ZWQpIHsKICAgICAgICBjb25zdCBpbmRleDIgPSB0aGlzLnBvb2wuaW5kZXhPZihpdGVtKTsKICAgICAgICBpZiAoaW5kZXgyID4gLTEpIHsKICAgICAgICAgIHRoaXMucG9vbC5zcGxpY2UoaW5kZXgyLCAxKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHRoaXMubWF4UG9vbFNpemUgPSBuZXdTaXplOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtc2hhcmVkL3V0aWxzLmpzCmZ1bmN0aW9uIGRlYm91bmNlMyhmdW5jLCB3YWl0MikgewogIGxldCB0aW1lb3V0MjsKICByZXR1cm4gZnVuY3Rpb24gZXhlY3V0ZWRGdW5jdGlvbiguLi5hcmdzKSB7CiAgICBjb25zdCBsYXRlciA9ICgpID0+IHsKICAgICAgY2xlYXJUaW1lb3V0KHRpbWVvdXQyKTsKICAgICAgZnVuYyguLi5hcmdzKTsKICAgIH07CiAgICBjbGVhclRpbWVvdXQodGltZW91dDIpOwogICAgdGltZW91dDIgPSB3aW5kb3cuc2V0VGltZW91dChsYXRlciwgd2FpdDIpOwogIH07Cn0KZnVuY3Rpb24gdGhyb3R0bGUyKGZ1bmMsIGxpbWl0KSB7CiAgbGV0IGluVGhyb3R0bGU7CiAgcmV0dXJuIGZ1bmN0aW9uIGV4ZWN1dGVkRnVuY3Rpb24oLi4uYXJncykgewogICAgaWYgKCFpblRocm90dGxlKSB7CiAgICAgIGZ1bmMuYXBwbHkodGhpcywgYXJncyk7CiAgICAgIGluVGhyb3R0bGUgPSB0cnVlOwogICAgICBzZXRUaW1lb3V0KCgpID0+IGluVGhyb3R0bGUgPSBmYWxzZSwgbGltaXQpOwogICAgfQogIH07Cn0KZnVuY3Rpb24gZm9ybWF0RmlsZVNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IDApCiAgICByZXR1cm4gIjAgQnl0ZXMiOwogIGNvbnN0IGs0ID0gMTAyNDsKICBjb25zdCBzaXplcyA9IFsiQnl0ZXMiLCAiS0IiLCAiTUIiLCAiR0IiXTsKICBjb25zdCBpMTEgPSBNYXRoLmZsb29yKE1hdGgubG9nKGJ5dGVzKSAvIE1hdGgubG9nKGs0KSk7CiAgcmV0dXJuIE1hdGgucm91bmQoYnl0ZXMgLyBNYXRoLnBvdyhrNCwgaTExKSAqIDEwMCkgLyAxMDAgKyAiICIgKyBzaXplc1tpMTFdOwp9CmZ1bmN0aW9uIGlzSW5WaWV3cG9ydChlbGVtZW50NCwgbWFyZ2luID0gMCkgewogIGNvbnN0IHJlY3QgPSBlbGVtZW50NC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICByZXR1cm4gcmVjdC50b3AgPj0gLW1hcmdpbiAmJiByZWN0LmxlZnQgPj0gLW1hcmdpbiAmJiByZWN0LmJvdHRvbSA8PSAod2luZG93LmlubmVySGVpZ2h0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQpICsgbWFyZ2luICYmIHJlY3QucmlnaHQgPD0gKHdpbmRvdy5pbm5lcldpZHRoIHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRXaWR0aCkgKyBtYXJnaW47Cn0KdmFyIFBlcmZvcm1hbmNlTW9uaXRvciA9IGNsYXNzIHsKICBzdGF0aWMgbWFya3MgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogIHN0YXRpYyBtZWFzdXJlcyA9IFtdOwogIHN0YXRpYyBtYXJrKG5hbWUpIHsKICAgIHRoaXMubWFya3Muc2V0KG5hbWUsIHBlcmZvcm1hbmNlLm5vdygpKTsKICB9CiAgc3RhdGljIG1lYXN1cmUobmFtZSwgc3RhcnRNYXJrKSB7CiAgICBjb25zdCBzdGFydCA9IHRoaXMubWFya3MuZ2V0KHN0YXJ0TWFyayk7CiAgICBpZiAoc3RhcnQpIHsKICAgICAgY29uc3QgZHVyYXRpb24gPSBwZXJmb3JtYW5jZS5ub3coKSAtIHN0YXJ0OwogICAgICB0aGlzLm1lYXN1cmVzLnB1c2goeyBuYW1lLCBkdXJhdGlvbiB9KTsKICAgICAgdGhpcy5tYXJrcy5kZWxldGUoc3RhcnRNYXJrKTsKICAgICAgcmV0dXJuIGR1cmF0aW9uOwogICAgfQogICAgcmV0dXJuIDA7CiAgfQogIHN0YXRpYyBnZXRSZXBvcnQoKSB7CiAgICBjb25zdCByZXBvcnQgPSB7CiAgICAgIG1lYXN1cmVzOiBbLi4udGhpcy5tZWFzdXJlc10sCiAgICAgIGF2ZXJhZ2VzOiB7fQogICAgfTsKICAgIGNvbnN0IGdyb3VwZWQgPSAvKiBAX19QVVJFX18gKi8gbmV3IE1hcCgpOwogICAgZm9yIChjb25zdCBtZWFzdXJlIG9mIHRoaXMubWVhc3VyZXMpIHsKICAgICAgaWYgKCFncm91cGVkLmhhcyhtZWFzdXJlLm5hbWUpKSB7CiAgICAgICAgZ3JvdXBlZC5zZXQobWVhc3VyZS5uYW1lLCBbXSk7CiAgICAgIH0KICAgICAgZ3JvdXBlZC5nZXQobWVhc3VyZS5uYW1lKS5wdXNoKG1lYXN1cmUuZHVyYXRpb24pOwogICAgfQogICAgZm9yIChjb25zdCBbbmFtZSwgZHVyYXRpb25zXSBvZiBncm91cGVkKSB7CiAgICAgIHJlcG9ydC5hdmVyYWdlc1tuYW1lXSA9IGR1cmF0aW9ucy5yZWR1Y2UoKGE1LCBiNSkgPT4gYTUgKyBiNSwgMCkgLyBkdXJhdGlvbnMubGVuZ3RoOwogICAgfQogICAgcmV0dXJuIHJlcG9ydDsKICB9CiAgc3RhdGljIGNsZWFyKCkgewogICAgdGhpcy5tYXJrcy5jbGVhcigpOwogICAgdGhpcy5tZWFzdXJlcyA9IFtdOwogIH0KfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9zdHlsZXMuanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHByZXZpZXdTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgICBoZWlnaHQ6IDI2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTglKSIsICJoc2woMjE1IDIwJSAxNCUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjJzIGVhc2UsIGJveC1zaGFkb3cgMC4ycyBlYXNlOwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjI0KSIpfTsKICAgIH0KCiAgICAucHJldmlldy1jb250YWluZXIuY2xpY2thYmxlIHsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgewogICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDI0cHggJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMCwgMCwgMCwgMC4xMikiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5wcmV2aWV3LWNvbnRhaW5lci5jbGlja2FibGU6aG92ZXIgLnByZXZpZXctb3ZlcmxheSB7CiAgICAgIG9wYWNpdHk6IDE7CiAgICB9CgogICAgLnByZXZpZXctc3RhY2sgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC5wcmV2aWV3LXN0YWNrLm5vbi1hNCB7CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICB9CgogICAgLnByZXZpZXctY2FudmFzIHsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBiYWNrZ3JvdW5kOiB3aGl0ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1heC13aWR0aDogMTAwJTsKICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgd2lkdGg6IGF1dG87CiAgICAgIGhlaWdodDogYXV0bzsKICAgICAgb2JqZWN0LWZpdDogY29udGFpbjsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiBhdXRvOwogICAgICAtd2Via2l0LWZvbnQtc21vb3RoaW5nOiBhbnRpYWxpYXNlZDsKICAgICAgYm94LXNoYWRvdzogMCAxcHggM3B4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgfQoKICAgIC5ub24tYTQgLnByZXZpZXctY2FudmFzIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkyJSkiLCAiaHNsKDIxNyAyNSUgMjQlKSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogOHB4OwogICAgICBsZWZ0OiA4cHg7CiAgICAgIHJpZ2h0OiA4cHg7CiAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSAvIDAuOTIpIiwgImhzbCgyMTUgMjAlIDEyJSAvIDAuOTIpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGdhcDogNnB4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNDUlKSIsICJoc2woMjE1IDE2JSA3NSUpIil9OwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIGJveC1zaGFkb3c6IDAgMnB4IDhweCByZ2JhKDAsIDAsIDAsIDAuMSk7CiAgICAgIHotaW5kZXg6IDEwOwogICAgfQoKICAgIC5wcmV2aWV3LWluZm8gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1wYWdlcyB7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IHsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHJpZ2h0OiAwOwogICAgICBib3R0b206IDA7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuNykiLCAicmdiYSgwLCAwLCAwLCAwLjgpIil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiA4cHg7CiAgICAgIG9wYWNpdHk6IDA7CiAgICAgIHRyYW5zaXRpb246IG9wYWNpdHkgMC4ycyBlYXNlOwogICAgICB6LWluZGV4OiAyMDsKICAgIH0KCiAgICAucHJldmlldy1vdmVybGF5IGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LW92ZXJsYXkgc3BhbiB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6IHdoaXRlOwogICAgfQoKICAgIC5wcmV2aWV3LWxvYWRpbmcsCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiAwOwogICAgICBsZWZ0OiAwOwogICAgICByaWdodDogMDsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgZ2FwOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1sb2FkaW5nIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk5JSkiLCAiaHNsKDIxNSAyMCUgMTQlKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1lcnJvciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgOTglKSIsICJoc2woMCA2MiUgMjAlKSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA3MiUgNDAlKSIsICJoc2woMCA3MCUgNjglKSIpfTsKICAgIH0KCiAgICAucHJldmlldy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDI0cHg7CiAgICAgIGhlaWdodDogMjRweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDJweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAucHJldmlldy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wcmV2aWV3LWVycm9yIGRlZXMtaWNvbiB7CiAgICAgIGZvbnQtc2l6ZTogMzJweDsKICAgIH0KCiAgICAucHJldmlldy1wYWdlLWluZGljYXRvciB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgdG9wOiA4cHg7CiAgICAgIGxlZnQ6IDhweDsKICAgICAgcmlnaHQ6IDhweDsKICAgICAgcGFkZGluZzogNXB4IDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC43KSIsICJoc2woMCAwJSAxMDAlIC8gMC45KSIpfTsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJ3aGl0ZSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBiYWNrZHJvcC1maWx0ZXI6IGJsdXIoMTJweCk7CiAgICAgIHotaW5kZXg6IDE1OwogICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgYW5pbWF0aW9uOiBmYWRlSW4gMC4ycyBlYXNlOwogICAgfQoKICAgIEBrZXlmcmFtZXMgZmFkZUluIHsKICAgICAgZnJvbSB7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTRweCk7CiAgICAgIH0KICAgICAgdG8gewogICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDApOwogICAgICB9CiAgICB9CgogICAgLyogUmVzcG9uc2l2ZSBzaXplcyAqLwogICAgOmhvc3QoW3NpemU9InNtYWxsIl0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpZHRoOiAxNTBweDsKICAgICAgaGVpZ2h0OiAxOTVweDsKICAgIH0KCiAgICA6aG9zdChbc2l6ZT0ibGFyZ2UiXSkgLnByZXZpZXctY29udGFpbmVyIHsKICAgICAgd2lkdGg6IDI1MHB4OwogICAgICBoZWlnaHQ6IDMyNXB4OwogICAgfQoKICAgIC8qIEdyaWQgb3B0aW1pemF0aW9ucyAqLwogICAgOmhvc3QoW2dyaWQtbW9kZV0pIC5wcmV2aWV3LWNvbnRhaW5lciB7CiAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgfQoKICAgIDpob3N0KFtncmlkLW1vZGVdKSAucHJldmlldy1jYW52YXMgewogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi1wcmV2aWV3L2RlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW8gPSAoKSA9PiB7CiAgY29uc3Qgc2FtcGxlUGRmcyA9IFsKICAgICJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiLAogICAgImh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICBdOwogIGNvbnN0IGdlbmVyYXRlR3JpZEl0ZW1zID0gKGNvdW50MikgPT4gewogICAgY29uc3QgaXRlbXMgPSBbXTsKICAgIGZvciAobGV0IGkxMSA9IDA7IGkxMSA8IGNvdW50MjsgaTExKyspIHsKICAgICAgY29uc3QgcGRmVXJsID0gc2FtcGxlUGRmc1tpMTEgJSBzYW1wbGVQZGZzLmxlbmd0aF07CiAgICAgIGl0ZW1zLnB1c2goYjJgCiAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgIHBkZlVybD0iJHtwZGZVcmx9IgogICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICBzdGFja09mZnNldD0iNiIKICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgIGdyaWQtbW9kZQogICAgICAgICAgQHBkZi1wcmV2aWV3LWNsaWNrPSR7KGUxMSkgPT4gewogICAgICAgIGNvbnNvbGUubG9nKCJQREYgUHJldmlldyBjbGlja2VkOiIsIGUxMS5kZXRhaWwpOwogICAgICAgIGFsZXJ0KGBQREYgY2xpY2tlZDogJHtlMTEuZGV0YWlsLnBhZ2VDb3VudH0gcGFnZXNgKTsKICAgICAgfX0KICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICBgKTsKICAgIH0KICAgIHJldHVybiBpdGVtczsKICB9OwogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLmRlbW8tY29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICAgIH0KCiAgICAgIC5kZW1vLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi1ib3R0b206IDYwcHg7CiAgICAgIH0KCiAgICAgIGgzIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICB9CgogICAgICAucHJldmlldy1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LXJvdyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDI0cHg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICB9CgogICAgICAucHJldmlldy1sYWJlbCB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgbWluLXdpZHRoOiAxMDBweDsKICAgICAgfQoKICAgICAgLnBlcmZvcm1hbmNlLXN0YXRzIHsKICAgICAgICBtYXJnaW4tdG9wOiAyMHB4OwogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogd2hpdGU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnN0YXRzLWdyaWQgewogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiByZXBlYXQoYXV0by1maWxsLCBtaW5tYXgoMTUwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBtYXJnaW4tdG9wOiAxMnB4OwogICAgICB9CgogICAgICAuc3RhdC1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWxhYmVsIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5zdGF0LXZhbHVlIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgzPlNpbmdsZSBQREYgUHJldmlldyB3aXRoIFN0YWNrZWQgUGFnZXM8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS93ZWIvY29tcHJlc3NlZC50cmFjZW1vbmtleS1wbGRpLTA5LnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5EaWZmZXJlbnQgU2l6ZXM8L2gzPgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPlNtYWxsOjwvZGl2PgogICAgICAgICAgPGRlZXMtcGRmLXByZXZpZXcKICAgICAgICAgICAgc2l6ZT0ic21hbGwiCiAgICAgICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL2V4YW1wbGVzL2xlYXJuaW5nL2hlbGxvd29ybGQucGRmIgogICAgICAgICAgICBtYXhQYWdlcz0iMiIKICAgICAgICAgICAgc3RhY2tPZmZzZXQ9IjYiCiAgICAgICAgICAgIGNsaWNrYWJsZT0idHJ1ZSIKICAgICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcm93Ij4KICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctbGFiZWwiPkRlZmF1bHQ6PC9kaXY+CiAgICAgICAgICA8ZGVlcy1wZGYtcHJldmlldwogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjMiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSI4IgogICAgICAgICAgICBjbGlja2FibGU9InRydWUiCiAgICAgICAgICA+PC9kZWVzLXBkZi1wcmV2aWV3PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXJvdyI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxhYmVsIj5MYXJnZTo8L2Rpdj4KICAgICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICAgIHNpemU9ImxhcmdlIgogICAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgICAgbWF4UGFnZXM9IjQiCiAgICAgICAgICAgIHN0YWNrT2Zmc2V0PSIxMCIKICAgICAgICAgICAgY2xpY2thYmxlPSJ0cnVlIgogICAgICAgICAgPjwvZGVlcy1wZGYtcHJldmlldz4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMz5Ob24tQ2xpY2thYmxlIFByZXZpZXc8L2gzPgogICAgICAgIDxkZWVzLXBkZi1wcmV2aWV3CiAgICAgICAgICBwZGZVcmw9Imh0dHBzOi8vcmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbS9tb3ppbGxhL3BkZi5qcy9iYTJlZGVhZS9leGFtcGxlcy9sZWFybmluZy9oZWxsb3dvcmxkLnBkZiIKICAgICAgICAgIG1heFBhZ2VzPSIzIgogICAgICAgICAgc3RhY2tPZmZzZXQ9IjgiCiAgICAgICAgICBjbGlja2FibGU9ImZhbHNlIgogICAgICAgID48L2RlZXMtcGRmLXByZXZpZXc+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDM+UGVyZm9ybWFuY2UgR3JpZCAtIDUwIFBERnMgd2l0aCBMYXp5IExvYWRpbmc8L2gzPgogICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tYm90dG9tOiAyMHB4OyBmb250LXNpemU6IDE0cHg7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICBUaGlzIGdyaWQgZGVtb25zdHJhdGVzIHRoZSBwZXJmb3JtYW5jZSBvcHRpbWl6YXRpb25zIHdpdGggNTAgUERGIHByZXZpZXdzLgogICAgICAgICAgU2Nyb2xsIHRvIHNlZSBsYXp5IGxvYWRpbmcgaW4gYWN0aW9uIC0gcHJldmlld3MgcmVuZGVyIG9ubHkgd2hlbiB2aXNpYmxlLgogICAgICAgIDwvcD4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1ncmlkIj4KICAgICAgICAgICR7Z2VuZXJhdGVHcmlkSXRlbXMoNTApfQogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJwZXJmb3JtYW5jZS1zdGF0cyI+CiAgICAgICAgICA8aDQ+UGVyZm9ybWFuY2UgRmVhdHVyZXM8L2g0PgogICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdHMtZ3JpZCI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPkxhenkgTG9hZGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEVuYWJsZWQ8L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzdGF0LWl0ZW0iPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWxhYmVsIj5DYW52YXMgUG9vbGluZzwvc3Bhbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC12YWx1ZSI+4pyTIEFjdGl2ZTwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InN0YXQtaXRlbSI+CiAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtbGFiZWwiPk1lbW9yeSBNYW5hZ2VtZW50PC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj7inJMgT3B0aW1pemVkPC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RhdC1pdGVtIj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic3RhdC1sYWJlbCI+SW50ZXJzZWN0aW9uIE9ic2VydmVyPC9zcGFuPgogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LXZhbHVlIj4yMDBweCBtYXJnaW48L3NwYW4+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1wZGYvZGVlcy1wZGYtcHJldmlldy9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY4ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM2OSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlByZXZpZXcgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXBkZi1wcmV2aWV3IildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfcGRmVXJsX2RlY29yYXRvcnM7CiAgbGV0IF9wZGZVcmxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRQcmV2aWV3UGFnZV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFByZXZpZXdQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGlja2FibGVfZGVjb3JhdG9yczsKICBsZXQgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsaWNrYWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZUNvdW50X2RlY29yYXRvcnM7CiAgbGV0IF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9kZWNvcmF0b3JzOwogIGxldCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZW5kZXJlZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZGVjb3JhdG9yczsKICBsZXQgX2Vycm9yX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzSG92ZXJpbmdfZGVjb3JhdG9yczsKICBsZXQgX2lzSG92ZXJpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0hvdmVyaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc0E0Rm9ybWF0X2RlY29yYXRvcnM7CiAgbGV0IF9pc0E0Rm9ybWF0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGRmUHJldmlldzIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9jdXJyZW50UHJldmlld1BhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9jbGlja2FibGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfcGFnZUNvdW50X2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfbG9hZGluZ19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9yZW5kZXJlZF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lcnJvcl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2lzQTRGb3JtYXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY3VycmVudFByZXZpZXdQYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRQcmV2aWV3UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFByZXZpZXdQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1cnJlbnRQcmV2aWV3UGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFByZXZpZXdQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQcmV2aWV3UGFnZV9pbml0aWFsaXplcnMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfY2xpY2thYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNsaWNrYWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY2xpY2thYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNsaWNrYWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2xpY2thYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NsaWNrYWJsZV9pbml0aWFsaXplcnMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfcGFnZUNvdW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VDb3VudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGFnZUNvdW50IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBhZ2VDb3VudCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZUNvdW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BhZ2VDb3VudF9pbml0aWFsaXplcnMsIF9wYWdlQ291bnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfbG9hZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsb2FkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJsb2FkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmxvYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxvYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbG9hZGluZ19pbml0aWFsaXplcnMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgodGhpcywgbnVsbCwgX3JlbmRlcmVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJlbmRlcmVkIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZW5kZXJlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZW5kZXJlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucmVuZGVyZWQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBfcmVuZGVyZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfZXJyb3JfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiZXJyb3IiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVycm9yIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmVycm9yLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5lcnJvciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lcnJvcl9pbml0aWFsaXplcnMsIF9lcnJvcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY4KHRoaXMsIG51bGwsIF9pc0hvdmVyaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzSG92ZXJpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImlzSG92ZXJpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaXNIb3ZlcmluZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNIb3ZlcmluZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgX2lzSG92ZXJpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OCh0aGlzLCBudWxsLCBfaXNBNEZvcm1hdF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpc0E0Rm9ybWF0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJpc0E0Rm9ybWF0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzQTRGb3JtYXQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmlzQTRGb3JtYXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaXNBNEZvcm1hdF9pbml0aWFsaXplcnMsIF9pc0E0Rm9ybWF0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJQREYiOwogICAgc3RhdGljIHN0eWxlcyA9IHByZXZpZXdTdHlsZXM7CiAgICAjcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICBnZXQgcGRmVXJsKCkgewogICAgICByZXR1cm4gdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGRmVXJsKHZhbHVlMikgewogICAgICB0aGlzLiNwZGZVcmxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfaW5pdGlhbGl6ZXJzLCAxKSk7CiAgICBnZXQgY3VycmVudFByZXZpZXdQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFByZXZpZXdQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VycmVudFByZXZpZXdQYWdlKHZhbHVlMikgewogICAgICB0aGlzLiNjdXJyZW50UHJldmlld1BhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jdXJyZW50UHJldmlld1BhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgY2xpY2thYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2xpY2thYmxlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2xpY2thYmxlKHZhbHVlMikgewogICAgICB0aGlzLiNjbGlja2FibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9jbGlja2FibGVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9wYWdlQ291bnRfaW5pdGlhbGl6ZXJzLCAwKSk7CiAgICBnZXQgcGFnZUNvdW50KCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZUNvdW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZUNvdW50KHZhbHVlMikgewogICAgICB0aGlzLiNwYWdlQ291bnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcGFnZUNvdW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfbG9hZGluZ19pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgbG9hZGluZygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBsb2FkaW5nKHZhbHVlMikgewogICAgICB0aGlzLiNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9sb2FkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfcmVuZGVyZWRfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IHJlbmRlcmVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCByZW5kZXJlZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVuZGVyZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlcnJvcl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX3JlbmRlcmVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGVycm9yKCkgewogICAgICByZXR1cm4gdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlcnJvcih2YWx1ZTIpIHsKICAgICAgdGhpcy4jZXJyb3JfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0hvdmVyaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfZXJyb3JfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczY5KHRoaXMsIF9pc0hvdmVyaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc0hvdmVyaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaXNIb3ZlcmluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGlzSG92ZXJpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzSG92ZXJpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNIb3ZlcmluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNjkodGhpcywgX2lzQTRGb3JtYXRfaW5pdGlhbGl6ZXJzLCB0cnVlKSk7CiAgICBnZXQgaXNBNEZvcm1hdCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2lzQTRGb3JtYXRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc0E0Rm9ybWF0KHZhbHVlMikgewogICAgICB0aGlzLiNpc0E0Rm9ybWF0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZW5kZXJQYWdlc1Rhc2sgPSAoX19ydW5Jbml0aWFsaXplcnM2OSh0aGlzLCBfaXNBNEZvcm1hdF9leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgcmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgIG9ic2VydmVyOwogICAgcGRmRG9jdW1lbnQ7CiAgICBjYW52YXNlcyA9IFtdOwogICAgcmVzaXplT2JzZXJ2ZXI7CiAgICBwcmV2aWV3Q29udGFpbmVyID0gbnVsbDsKICAgIHN0YWNrRWxlbWVudCA9IG51bGw7CiAgICBsb2FkZWRQZGZVcmwgPSBudWxsOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdgogICAgICAgIGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciAke3RoaXMubG9hZGluZyA/ICJsb2FkaW5nIiA6ICIifSAke3RoaXMuZXJyb3IgPyAiZXJyb3IiIDogIiJ9ICR7dGhpcy5jbGlja2FibGUgPyAiY2xpY2thYmxlIiA6ICIifSIKICAgICAgICBAY2xpY2s9JHt0aGlzLmhhbmRsZUNsaWNrfQogICAgICAgIEBtb3VzZWVudGVyPSR7dGhpcy5oYW5kbGVNb3VzZUVudGVyfQogICAgICAgIEBtb3VzZWxlYXZlPSR7dGhpcy5oYW5kbGVNb3VzZUxlYXZlfQogICAgICAgIEBtb3VzZW1vdmU9JHt0aGlzLmhhbmRsZU1vdXNlTW92ZX0KICAgICAgPgogICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWxvYWRpbmciPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXNwaW5uZXIiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LXRleHQiPkxvYWRpbmcgcHJldmlldy4uLjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQoKICAgICAgICAke3RoaXMuZXJyb3IgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctZXJyb3IiPgogICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpGaWxlWCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctdGV4dCI+RmFpbGVkIHRvIGxvYWQgUERGPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICBgIDogIiJ9CgogICAgICAgICR7IXRoaXMubG9hZGluZyAmJiAhdGhpcy5lcnJvciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1zdGFjayAkeyF0aGlzLmlzQTRGb3JtYXQgPyAibm9uLWE0IiA6ICIifSI+CiAgICAgICAgICAgIDxjYW52YXMKICAgICAgICAgICAgICBjbGFzcz0icHJldmlldy1jYW52YXMiCiAgICAgICAgICAgICAgZGF0YS1wYWdlPSIke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfSIKICAgICAgICAgICAgPjwvY2FudmFzPgogICAgICAgICAgPC9kaXY+CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDEgJiYgdGhpcy5pc0hvdmVyaW5nID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctcGFnZS1pbmRpY2F0b3IiPgogICAgICAgICAgICAgIFBhZ2UgJHt0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZX0gb2YgJHt0aGlzLnBhZ2VDb3VudH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgJHt0aGlzLnBhZ2VDb3VudCA+IDAgJiYgIXRoaXMuaXNIb3ZlcmluZyA/IGIyYAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWluZm8iPgogICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkZpbGVUZXh0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0icHJldmlldy1wYWdlcyI+JHt0aGlzLnBhZ2VDb3VudH0gcGFnZSR7dGhpcy5wYWdlQ291bnQgPiAxID8gInMiIDogIiJ9PC9zcGFuPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KCiAgICAgICAgICAke3RoaXMuY2xpY2thYmxlID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctb3ZlcmxheSI+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6RXllIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5WaWV3IFBERjwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBoYW5kbGVNb3VzZUVudGVyKCkgewogICAgICB0aGlzLmlzSG92ZXJpbmcgPSB0cnVlOwogICAgfQogICAgaGFuZGxlTW91c2VMZWF2ZSgpIHsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSAhPT0gMSkgewogICAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgICB2b2lkIHRoaXMuc2NoZWR1bGVSZW5kZXJQYWdlcygpOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVNb3VzZU1vdmUoZTExKSB7CiAgICAgIGlmICghdGhpcy5pc0hvdmVyaW5nIHx8IHRoaXMucGFnZUNvdW50IDw9IDEpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCByZWN0ID0gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgY29uc3QgeDMgPSBlMTEuY2xpZW50WCAtIHJlY3QubGVmdDsKICAgICAgY29uc3Qgd2lkdGggPSByZWN0LndpZHRoOwogICAgICBjb25zdCBwZXJjZW50YWdlID0gTWF0aC5tYXgoMCwgTWF0aC5taW4oMSwgeDMgLyB3aWR0aCkpOwogICAgICBjb25zdCBuZXdQYWdlID0gTWF0aC5jZWlsKHBlcmNlbnRhZ2UgKiB0aGlzLnBhZ2VDb3VudCkgfHwgMTsKICAgICAgaWYgKG5ld1BhZ2UgIT09IHRoaXMuY3VycmVudFByZXZpZXdQYWdlKSB7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSBuZXdQYWdlOwogICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLnNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKTsKICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIHRoaXMuc2V0dXBSZXNpemVPYnNlcnZlcigpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICBpZiAodGhpcy5vYnNlcnZlcikgewogICAgICAgIHRoaXMub2JzZXJ2ZXIuZGlzY29ubmVjdCgpOwogICAgICB9CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgIH0KICAgIHNldHVwSW50ZXJzZWN0aW9uT2JzZXJ2ZXIoKSB7CiAgICAgIGNvbnN0IG9wdGlvbnMgPSB7CiAgICAgICAgcm9vdDogbnVsbCwKICAgICAgICByb290TWFyZ2luOiAiMjAwcHgiLAogICAgICAgIHRocmVzaG9sZDogMC4wMQogICAgICB9OwogICAgICB0aGlzLm9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKHRocm90dGxlMigoZW50cmllcykgPT4gewogICAgICAgIGZvciAoY29uc3QgZW50cnkgb2YgZW50cmllcykgewogICAgICAgICAgaWYgKGVudHJ5LmlzSW50ZXJzZWN0aW5nICYmICF0aGlzLnJlbmRlcmVkICYmIHRoaXMucGRmVXJsKSB7CiAgICAgICAgICAgIHRoaXMubG9hZEFuZFJlbmRlclByZXZpZXcoKTsKICAgICAgICAgIH0gZWxzZSBpZiAoIWVudHJ5LmlzSW50ZXJzZWN0aW5nICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIDEwMCksIG9wdGlvbnMpOwogICAgICB0aGlzLm9ic2VydmVyLm9ic2VydmUodGhpcyk7CiAgICB9CiAgICBhc3luYyBsb2FkQW5kUmVuZGVyUHJldmlldygpIHsKICAgICAgaWYgKHRoaXMucmVuZGVyZWQgfHwgdGhpcy5sb2FkaW5nKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5lcnJvciA9IGZhbHNlOwogICAgICBQZXJmb3JtYW5jZU1vbml0b3IubWFyayhgcHJldmlldy1sb2FkLSR7dGhpcy5wZGZVcmx9YCk7CiAgICAgIHRyeSB7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IGF3YWl0IFBkZk1hbmFnZXIubG9hZERvY3VtZW50KHRoaXMucGRmVXJsKTsKICAgICAgICB0aGlzLnBhZ2VDb3VudCA9IHRoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM7CiAgICAgICAgdGhpcy5jdXJyZW50UHJldmlld1BhZ2UgPSAxOwogICAgICAgIHRoaXMubG9hZGVkUGRmVXJsID0gdGhpcy5wZGZVcmw7CiAgICAgICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICB0aGlzLmNhY2hlRWxlbWVudHMoKTsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgICB0aGlzLnJlbmRlcmVkID0gdHJ1ZTsKICAgICAgICBjb25zdCBkdXJhdGlvbiA9IFBlcmZvcm1hbmNlTW9uaXRvci5tZWFzdXJlKGBwcmV2aWV3LXJlbmRlci0ke3RoaXMucGRmVXJsfWAsIGBwcmV2aWV3LWxvYWQtJHt0aGlzLnBkZlVybH1gKTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIHByZXZpZXcgcmVuZGVyZWQgaW4gJHtkdXJhdGlvbn1tc2ApOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byBsb2FkIFBERiBwcmV2aWV3OiIsIGVycm9yKTsKICAgICAgICB0aGlzLmVycm9yID0gdHJ1ZTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgfQogICAgfQogICAgc2NoZWR1bGVSZW5kZXJQYWdlcygpIHsKICAgICAgaWYgKCF0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlclBhZ2VzVGFzaykgewogICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSB0cnVlOwogICAgICAgIHJldHVybiB0aGlzLnJlbmRlclBhZ2VzVGFzazsKICAgICAgfQogICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IChhc3luYyAoKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGF3YWl0IHRoaXMucGVyZm9ybVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkZhaWxlZCB0byByZW5kZXIgUERGIHByZXZpZXcgcGFnZXM6IiwgZXJyb3IpOwogICAgICAgIH0KICAgICAgfSkoKS5maW5hbGx5KCgpID0+IHsKICAgICAgICB0aGlzLnJlbmRlclBhZ2VzVGFzayA9IG51bGw7CiAgICAgICAgaWYgKHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQpIHsKICAgICAgICAgIHRoaXMucmVuZGVyUGFnZXNRdWV1ZWQgPSBmYWxzZTsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgcmV0dXJuIHRoaXMucmVuZGVyUGFnZXNUYXNrOwogICAgfQogICAgYXN5bmMgcGVyZm9ybVJlbmRlclBhZ2VzKCkgewogICAgICBpZiAoIXRoaXMucGRmRG9jdW1lbnQpCiAgICAgICAgcmV0dXJuOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LWNhbnZhcyIpOwogICAgICBpZiAoIWNhbnZhcykgewogICAgICAgIGNvbnNvbGUud2FybigiUHJldmlldyBjYW52YXMgbm90IGZvdW5kIGluIERPTSIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgdGhpcy5jYWNoZUVsZW1lbnRzKCk7CiAgICAgIGNvbnN0IHsgYXZhaWxhYmxlV2lkdGgsIGF2YWlsYWJsZUhlaWdodCB9ID0gdGhpcy5nZXRBdmFpbGFibGVTaXplKCk7CiAgICAgIHRyeSB7CiAgICAgICAgY29uc3QgcGFnZU51bSA9IHRoaXMuY3VycmVudFByZXZpZXdQYWdlOwogICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgY29uc3QgaW5pdGlhbFZpZXdwb3J0ID0gcGFnZS5nZXRWaWV3cG9ydCh7IHNjYWxlOiAxIH0pOwogICAgICAgIGNvbnN0IGFzcGVjdFJhdGlvID0gaW5pdGlhbFZpZXdwb3J0LmhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC53aWR0aDsKICAgICAgICBjb25zdCBhNFBvcnRyYWl0UmF0aW8gPSAxLjQxNDsKICAgICAgICBjb25zdCBhNExhbmRzY2FwZVJhdGlvID0gMC43MDc7CiAgICAgICAgY29uc3QgbGV0dGVyUG9ydHJhaXRSYXRpbyA9IDEuMjk0OwogICAgICAgIGNvbnN0IGxldHRlckxhbmRzY2FwZVJhdGlvID0gMC43NzM7CiAgICAgICAgY29uc3QgdG9sZXJhbmNlID0gMC4wNTsKICAgICAgICBjb25zdCBpc0E0UG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGE0UG9ydHJhaXRSYXRpbykgPCBhNFBvcnRyYWl0UmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgY29uc3QgaXNBNExhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gYTRMYW5kc2NhcGVSYXRpbykgPCBhNExhbmRzY2FwZVJhdGlvICogdG9sZXJhbmNlOwogICAgICAgIGNvbnN0IGlzTGV0dGVyUG9ydHJhaXQgPSBNYXRoLmFicyhhc3BlY3RSYXRpbyAtIGxldHRlclBvcnRyYWl0UmF0aW8pIDwgbGV0dGVyUG9ydHJhaXRSYXRpbyAqIHRvbGVyYW5jZTsKICAgICAgICBjb25zdCBpc0xldHRlckxhbmRzY2FwZSA9IE1hdGguYWJzKGFzcGVjdFJhdGlvIC0gbGV0dGVyTGFuZHNjYXBlUmF0aW8pIDwgbGV0dGVyTGFuZHNjYXBlUmF0aW8gKiB0b2xlcmFuY2U7CiAgICAgICAgdGhpcy5pc0E0Rm9ybWF0ID0gaXNBNFBvcnRyYWl0IHx8IGlzQTRMYW5kc2NhcGUgfHwgaXNMZXR0ZXJQb3J0cmFpdCB8fCBpc0xldHRlckxhbmRzY2FwZTsKICAgICAgICBjb25zb2xlLmxvZyhgUERGIGFzcGVjdCByYXRpbzogJHthc3BlY3RSYXRpby50b0ZpeGVkKDMpfSwgc3RhbmRhcmQgZm9ybWF0OiAke3RoaXMuaXNBNEZvcm1hdH1gKTsKICAgICAgICBjb25zdCBhZGp1c3RlZFdpZHRoID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlV2lkdGggOiBhdmFpbGFibGVXaWR0aCAtIDI0OwogICAgICAgIGNvbnN0IGFkanVzdGVkSGVpZ2h0ID0gdGhpcy5pc0E0Rm9ybWF0ID8gYXZhaWxhYmxlSGVpZ2h0IDogYXZhaWxhYmxlSGVpZ2h0IC0gMjQ7CiAgICAgICAgY29uc3Qgc2NhbGVYID0gYWRqdXN0ZWRXaWR0aCA+IDAgPyBhZGp1c3RlZFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoIDogMDsKICAgICAgICBjb25zdCBzY2FsZVkgPSBhZGp1c3RlZEhlaWdodCA+IDAgPyBhZGp1c3RlZEhlaWdodCAvIGluaXRpYWxWaWV3cG9ydC5oZWlnaHQgOiAwOwogICAgICAgIGNvbnN0IGJhc2VTY2FsZSA9IE1hdGgubWluKHNjYWxlWCB8fCAwLjUsIHNjYWxlWSB8fCBzY2FsZVggfHwgMC41KTsKICAgICAgICBjb25zdCByZW5kZXJTY2FsZSA9IE1hdGgubWluKGJhc2VTY2FsZSAqIDIsIDMpOwogICAgICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHJlbmRlclNjYWxlKSB8fCByZW5kZXJTY2FsZSA8PSAwKSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHBhZ2UuZ2V0Vmlld3BvcnQoeyBzY2FsZTogcmVuZGVyU2NhbGUgfSk7CiAgICAgICAgY29uc3QgcG9vbGVkQ2FudmFzID0gQ2FudmFzUG9vbC5hY3F1aXJlKHZpZXdwb3J0LndpZHRoLCB2aWV3cG9ydC5oZWlnaHQpOwogICAgICAgIHRoaXMuY2FudmFzZXMucHVzaChwb29sZWRDYW52YXMpOwogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBwb29sZWRDYW52YXMuY3R4LAogICAgICAgICAgdmlld3BvcnQKICAgICAgICB9OwogICAgICAgIGF3YWl0IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpLnByb21pc2U7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLmhlaWdodCA9IHZpZXdwb3J0LmhlaWdodDsKICAgICAgICBjb25zdCBkaXNwbGF5V2lkdGggPSBhZGp1c3RlZFdpZHRoOwogICAgICAgIGNvbnN0IGRpc3BsYXlIZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQgLyB2aWV3cG9ydC53aWR0aCAqIGFkanVzdGVkV2lkdGg7CiAgICAgICAgaWYgKGRpc3BsYXlIZWlnaHQgPiBhZGp1c3RlZEhlaWdodCkgewogICAgICAgICAgY29uc3QgYWx0RGlzcGxheUhlaWdodCA9IGFkanVzdGVkSGVpZ2h0OwogICAgICAgICAgY29uc3QgYWx0RGlzcGxheVdpZHRoID0gdmlld3BvcnQud2lkdGggLyB2aWV3cG9ydC5oZWlnaHQgKiBhZGp1c3RlZEhlaWdodDsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2FsdERpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7YWx0RGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIGNhbnZhcy5zdHlsZS53aWR0aCA9IGAke2Rpc3BsYXlXaWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7ZGlzcGxheUhlaWdodH1weGA7CiAgICAgICAgfQogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmIChjdHgpIHsKICAgICAgICAgIGN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQgPSB0cnVlOwogICAgICAgICAgY3R4LmltYWdlU21vb3RoaW5nUXVhbGl0eSA9ICJoaWdoIjsKICAgICAgICAgIGN0eC5kcmF3SW1hZ2UocG9vbGVkQ2FudmFzLmNhbnZhcywgMCwgMCk7CiAgICAgICAgfQogICAgICAgIHBhZ2UuY2xlYW51cCgpOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoYEZhaWxlZCB0byByZW5kZXIgcGFnZSAke3RoaXMuY3VycmVudFByZXZpZXdQYWdlfTpgLCBlcnJvcik7CiAgICAgIH0KICAgIH0KICAgIGNsZWFyQ2FudmFzZXMoKSB7CiAgICAgIGZvciAoY29uc3QgcG9vbGVkQ2FudmFzIG9mIHRoaXMuY2FudmFzZXMpIHsKICAgICAgICBDYW52YXNQb29sLnJlbGVhc2UocG9vbGVkQ2FudmFzKTsKICAgICAgfQogICAgICB0aGlzLmNhbnZhc2VzID0gW107CiAgICB9CiAgICBjbGVhbnVwKCkgewogICAgICB0aGlzLmNsZWFyQ2FudmFzZXMoKTsKICAgICAgaWYgKHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudCh0aGlzLmxvYWRlZFBkZlVybCA/PyB0aGlzLnBkZlVybCk7CiAgICAgICAgdGhpcy5wZGZEb2N1bWVudCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZW5kZXJQYWdlc1F1ZXVlZCA9IGZhbHNlOwogICAgICB0aGlzLnBhZ2VDb3VudCA9IDA7CiAgICAgIHRoaXMuY3VycmVudFByZXZpZXdQYWdlID0gMTsKICAgICAgdGhpcy5pc0hvdmVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMuaXNBNEZvcm1hdCA9IHRydWU7CiAgICAgIHRoaXMucHJldmlld0NvbnRhaW5lciA9IG51bGw7CiAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gbnVsbDsKICAgICAgdGhpcy5sb2FkZWRQZGZVcmwgPSBudWxsOwogICAgICB0aGlzLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogICAgICB0aGlzLmVycm9yID0gZmFsc2U7CiAgICB9CiAgICBoYW5kbGVDbGljaygpIHsKICAgICAgaWYgKCF0aGlzLmNsaWNrYWJsZSkKICAgICAgICByZXR1cm47CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInBkZi1wcmV2aWV3LWNsaWNrIiwgewogICAgICAgIGRldGFpbDogewogICAgICAgICAgcGRmVXJsOiB0aGlzLnBkZlVybCwKICAgICAgICAgIHBhZ2VDb3VudDogdGhpcy5wYWdlQ291bnQKICAgICAgICB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgICBzdXBlci51cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicGRmVXJsIikgJiYgdGhpcy5wZGZVcmwpIHsKICAgICAgICBjb25zdCBwcmV2aW91c1VybCA9IGNoYW5nZWRQcm9wZXJ0aWVzLmdldCgicGRmVXJsIik7CiAgICAgICAgaWYgKHByZXZpb3VzVXJsKSB7CiAgICAgICAgICBQZGZNYW5hZ2VyLnJlbGVhc2VEb2N1bWVudChwcmV2aW91c1VybCk7CiAgICAgICAgfQogICAgICAgIHRoaXMuY2xlYW51cCgpOwogICAgICAgIHRoaXMucmVuZGVyZWQgPSBmYWxzZTsKICAgICAgICB0aGlzLmN1cnJlbnRQcmV2aWV3UGFnZSA9IDE7CiAgICAgICAgaWYgKHRoaXMub2JzZXJ2ZXIpIHsKICAgICAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgICAgaWYgKHJlY3QudG9wIDwgd2luZG93LmlubmVySGVpZ2h0ICYmIHJlY3QuYm90dG9tID4gMCkgewogICAgICAgICAgICB0aGlzLmxvYWRBbmRSZW5kZXJQcmV2aWV3KCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICAgIGlmIChjaGFuZ2VkUHJvcGVydGllcy5oYXMoImN1cnJlbnRQcmV2aWV3UGFnZSIpICYmIHRoaXMucmVuZGVyZWQpIHsKICAgICAgICBhd2FpdCB0aGlzLnNjaGVkdWxlUmVuZGVyUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICBjb25zdCBpdGVtcyA9IFtdOwogICAgICBpZiAodGhpcy5jbGlja2FibGUpIHsKICAgICAgICBpdGVtcy5wdXNoKHsKICAgICAgICAgIG5hbWU6ICJWaWV3IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpFeWUiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuaGFuZGxlQ2xpY2soKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICBpdGVtcy5wdXNoKHsgZGl2aWRlcjogdHJ1ZSB9KTsKICAgICAgfQogICAgICBpdGVtcy5wdXNoKHsKICAgICAgICBuYW1lOiAiT3BlbiBQREYgaW4gTmV3IFRhYiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6RXh0ZXJuYWxMaW5rIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHdpbmRvdy5vcGVuKHRoaXMucGRmVXJsLCAiX2JsYW5rIik7CiAgICAgICAgfQogICAgICB9LCB7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkNvcHkiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgIH0KICAgICAgfSwgewogICAgICAgIG5hbWU6ICJEb3dubG9hZCBQREYiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOkRvd25sb2FkIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgbGluazMuaHJlZiA9IHRoaXMucGRmVXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSB0aGlzLnBkZlVybC5zcGxpdCgiLyIpLnBvcCgpIHx8ICJkb2N1bWVudC5wZGYiOwogICAgICAgICAgbGluazMuY2xpY2soKTsKICAgICAgICB9CiAgICAgIH0pOwogICAgICBpZiAodGhpcy5wYWdlQ291bnQgPiAwKSB7CiAgICAgICAgaXRlbXMucHVzaCh7IGRpdmlkZXI6IHRydWUgfSwgewogICAgICAgICAgbmFtZTogYCR7dGhpcy5wYWdlQ291bnR9IHBhZ2Uke3RoaXMucGFnZUNvdW50ID4gMSA/ICJzIiA6ICIifWAsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpGaWxlVGV4dCIsCiAgICAgICAgICBkaXNhYmxlZDogdHJ1ZSwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgfQogICAgICAgIH0pOwogICAgICB9CiAgICAgIHJldHVybiBpdGVtczsKICAgIH0KICAgIGNhY2hlRWxlbWVudHMoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyKSB7CiAgICAgICAgdGhpcy5wcmV2aWV3Q29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1jb250YWluZXIiKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc3RhY2tFbGVtZW50KSB7CiAgICAgICAgdGhpcy5zdGFja0VsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wcmV2aWV3LXN0YWNrIik7CiAgICAgIH0KICAgIH0KICAgIHNldHVwUmVzaXplT2JzZXJ2ZXIoKSB7CiAgICAgIGlmICghdGhpcy5wcmV2aWV3Q29udGFpbmVyIHx8IHRoaXMucmVzaXplT2JzZXJ2ZXIpCiAgICAgICAgcmV0dXJuOwogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyID0gbmV3IFJlc2l6ZU9ic2VydmVyKCgpID0+IHsKICAgICAgICBpZiAodGhpcy5yZW5kZXJlZCAmJiB0aGlzLnBkZkRvY3VtZW50ICYmICF0aGlzLmxvYWRpbmcpIHsKICAgICAgICAgIHZvaWQgdGhpcy5zY2hlZHVsZVJlbmRlclBhZ2VzKCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZ2V0QXZhaWxhYmxlU2l6ZSgpIHsKICAgICAgaWYgKCF0aGlzLnN0YWNrRWxlbWVudCkgewogICAgICAgIHRoaXMuc3RhY2tFbGVtZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIucHJldmlldy1zdGFjayIpOwogICAgICB9CiAgICAgIGlmICghdGhpcy5zdGFja0VsZW1lbnQpIHsKICAgICAgICByZXR1cm4gewogICAgICAgICAgYXZhaWxhYmxlV2lkdGg6IDIwMCwKICAgICAgICAgIC8vIEZ1bGwgY29udGFpbmVyIHdpZHRoCiAgICAgICAgICBhdmFpbGFibGVIZWlnaHQ6IDI2MAogICAgICAgICAgLy8gRnVsbCBjb250YWluZXIgaGVpZ2h0CiAgICAgICAgfTsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5zdGFja0VsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIGNvbnN0IGF2YWlsYWJsZVdpZHRoID0gTWF0aC5tYXgocmVjdC53aWR0aCwgMCkgfHwgMjAwOwogICAgICBjb25zdCBhdmFpbGFibGVIZWlnaHQgPSBNYXRoLm1heChyZWN0LmhlaWdodCwgMCkgfHwgMjYwOwogICAgICByZXR1cm4geyBhdmFpbGFibGVXaWR0aCwgYXZhaWxhYmxlSGVpZ2h0IH07CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczY5KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzUGRmUHJldmlldzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy8wMGdyb3VwLXBkZi9kZWVzLXBkZi12aWV3ZXIvc3R5bGVzLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciB2aWV3ZXJTdHlsZXMgPSBbCiAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogIGlgCiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiA2MDBweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICBjb250YWluOiBsYXlvdXQgc3R5bGU7CiAgICB9CgogICAgLnBkZi12aWV3ZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTclKSIsICJoc2woMjE1IDIwJSAxMCUpIil9OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICB9CgogICAgLnRvb2xiYXIgewogICAgICBoZWlnaHQ6IDQ4cHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxNSUpIil9OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICBnYXA6IDE2cHg7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgIC50b29sYmFyLWdyb3VwIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgZ2FwOiA0cHg7CiAgICB9CgogICAgLnRvb2xiYXItZ3JvdXAtLWVuZCB7CiAgICAgIG1hcmdpbi1sZWZ0OiBhdXRvOwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbiB7CiAgICAgIHdpZHRoOiAzMnB4OwogICAgICBoZWlnaHQ6IDMycHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjE1cyBlYXNlOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b246aG92ZXI6bm90KDpkaXNhYmxlZCkgewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgOTIlKSIsICJoc2woMjE3IDI1JSAyMiUpIil9OwogICAgfQoKICAgIC50b29sYmFyLWJ1dHRvbjpkaXNhYmxlZCB7CiAgICAgIG9wYWNpdHk6IDAuNDsKICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgIH0KCiAgICAudG9vbGJhci1idXR0b24gZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgfQoKICAgIC5wYWdlLWluZm8gewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDhweDsKICAgICAgcGFkZGluZzogMCA4cHg7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICB9CgogICAgLnBhZ2UtaW5wdXQgewogICAgICB3aWR0aDogNDhweDsKICAgICAgaGVpZ2h0OiAyOHB4OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA4NiUpIiwgImhzbCgyMTcgMjUlIDI4JSkiKX07CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMjE1IDIwJSAxMiUpIil9OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMjIgNDclIDExJSkiLCAiaHNsKDIxMCAyMCUgOTYlKSIpfTsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIGZvbnQtZmFtaWx5OiBpbmhlcml0OwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgIC5wYWdlLWlucHV0OmZvY3VzIHsKICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgfQoKICAgIC5wYWdlLXNlcGFyYXRvciB7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAxNiUgNjAlKSIsICJoc2woMjE1IDE2JSA1MCUpIil9OwogICAgfQoKICAgIC56b29tLWxldmVsIHsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgICBtaW4td2lkdGg6IDQ4cHg7CiAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgIH0KCiAgICAudmlld2VyLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDE7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgbWluLWhlaWdodDogMDsKICAgIH0KCiAgICAuc2lkZWJhciB7CiAgICAgIHdpZHRoOiAyMDBweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDEwMCUpIiwgImhzbCgyMTUgMjAlIDE1JSkiKX07CiAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MSUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgIH0KCiAgICAuc2lkZWJhci1oZWFkZXIgewogICAgICBoZWlnaHQ6IDQwcHg7CiAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDkxJSkiLCAiaHNsKDIxNyAyNSUgMjIlKSIpfTsKICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICBmb250LXdlaWdodDogNjAwOwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZSB7CiAgICAgIHdpZHRoOiAyNHB4OwogICAgICBoZWlnaHQ6IDI0cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDE2JSA0NSUpIiwgImhzbCgyMTUgMTYlIDc1JSkiKX07CiAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXMgZWFzZTsKICAgIH0KCiAgICAuc2lkZWJhci1jbG9zZTpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE0IDMxJSA5MiUpIiwgImhzbCgyMTcgMjUlIDIyJSkiKX07CiAgICB9CgogICAgLnNpZGViYXItY2xvc2UgZGVlcy1pY29uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgfQoKICAgIC5zaWRlYmFyLWNvbnRlbnQgewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIC50aHVtYm5haWwgewogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgdHJhbnNpdGlvbjogYm9yZGVyLWNvbG9yIDAuMTVzIGVhc2U7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5NSUpIiwgImhzbCgyMTUgMjAlIDE4JSkiKX07CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgLyogRGVmYXVsdCBBNCBhc3BlY3QgcmF0aW8gKDI5N21tIC8gMjEwbW0g4omIIDEuNDE0KSAqLwogICAgICBtaW4taGVpZ2h0OiBjYWxjKDE3NnB4ICogMS40MTQpOwogICAgfQoKICAgIC50aHVtYm5haWw6bGFzdC1jaGlsZCB7CiAgICAgIG1hcmdpbi1ib3R0b206IDA7CiAgICB9CgogICAgLnRodW1ibmFpbDpob3ZlciB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTQgMzElIDg2JSkiLCAiaHNsKDIxNyAyNSUgMzUlKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLmFjdGl2ZSB7CiAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTcgOTElIDYwJSkiLCAiaHNsKDIxMyA5MyUgNjglKSIpfTsKICAgIH0KCiAgICAudGh1bWJuYWlsLWNhbnZhcyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiBhdXRvOwogICAgICBpbWFnZS1yZW5kZXJpbmc6IC13ZWJraXQtb3B0aW1pemUtY29udHJhc3Q7CiAgICAgIGltYWdlLXJlbmRlcmluZzogY3Jpc3AtZWRnZXM7CiAgICB9CgogICAgLnRodW1ibmFpbC1udW1iZXIgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIGJvdHRvbTogNHB4OwogICAgICByaWdodDogNHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjcpIiwgInJnYmEoMCwgMCwgMCwgMC44KSIpfTsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIHBhZGRpbmc6IDJweCA2cHg7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgIH0KCiAgICAudmlld2VyLW1haW4gewogICAgICBmbGV4OiAxOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgIHNjcm9sbC1iZWhhdmlvcjogc21vb3RoOwogICAgICBvdmVyc2Nyb2xsLWJlaGF2aW9yOiBjb250YWluOwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICB9CgogICAgLmxvYWRpbmctY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgZ2FwOiAxNnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMTYlIDQ1JSkiLCAiaHNsKDIxNSAxNiUgNzUlKSIpfTsKICAgIH0KCiAgICAubG9hZGluZy1zcGlubmVyIHsKICAgICAgd2lkdGg6IDMycHg7CiAgICAgIGhlaWdodDogMzJweDsKICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICBib3JkZXI6IDNweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNCAzMSUgODYlKSIsICJoc2woMjE3IDI1JSAyOCUpIil9OwogICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNyA5MSUgNjAlKSIsICJoc2woMjEzIDkzJSA2OCUpIil9OwogICAgICBhbmltYXRpb246IHNwaW4gMC44cyBsaW5lYXIgaW5maW5pdGU7CiAgICB9CgogICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgdG8gewogICAgICAgIHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgIH0KICAgIH0KCiAgICAubG9hZGluZy10ZXh0IHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBmb250LXdlaWdodDogNTAwOwogICAgfQoKICAgIC5wYWdlcy1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBnYXA6IDIwcHg7CiAgICB9CgogICAgLnBhZ2Utd3JhcHBlciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICB3aWR0aDogMTAwJTsKICAgIH0KCiAgICAuY2FudmFzLWNvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3gtc2hhZG93OiAwIDJweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgwLCAwLCAwLCAwLjMpIil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgIH0KCiAgICAucGFnZS1jYW52YXMgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgaW1hZ2UtcmVuZGVyaW5nOiAtd2Via2l0LW9wdGltaXplLWNvbnRyYXN0OwogICAgICBpbWFnZS1yZW5kZXJpbmc6IGNyaXNwLWVkZ2VzOwogICAgfQoKICAgIC5wZGYtdmlld2VyLndpdGgtc2lkZWJhciAudmlld2VyLW1haW4gewogICAgICBtYXJnaW4tbGVmdDogMDsKICAgIH0KICBgCl07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vMiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIGJhY2tncm91bmQ6ICNmNWY1ZjU7CiAgICB9CgogICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgIG1hcmdpbi1ib3R0b206IDQwcHg7CiAgICB9CgogICAgaDMgewogICAgICBtYXJnaW4tYm90dG9tOiAyMHB4OwogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICB9CgogICAgZGVlcy1wZGYtdmlld2VyIHsKICAgICAgYm9yZGVyOiAxcHggc29saWQgI2RkZDsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgfQoKICAgIC52aWV3ZXItdGFsbCB7CiAgICAgIGhlaWdodDogODAwcHg7CiAgICB9CgogICAgLnZpZXdlci1jb21wYWN0IHsKICAgICAgaGVpZ2h0OiA1MDBweDsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+RnVsbCBGZWF0dXJlZCBQREYgVmlld2VyIHdpdGggVG9vbGJhcjwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLXRhbGwiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvd2ViL2NvbXByZXNzZWQudHJhY2Vtb25rZXktcGxkaS0wOS5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9InRydWUiCiAgICAgICAgc2hvd1NpZGViYXI9ImZhbHNlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLWZpdCIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CgogICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgPGgzPlBERiBWaWV3ZXIgd2l0aCBTaWRlYmFyIE5hdmlnYXRpb248L2gzPgogICAgICA8ZGVlcy1wZGYtdmlld2VyCiAgICAgICAgY2xhc3M9InZpZXdlci10YWxsIgogICAgICAgIHBkZlVybD0iaHR0cHM6Ly9yYXcuZ2l0aHVidXNlcmNvbnRlbnQuY29tL21vemlsbGEvcGRmLmpzL2JhMmVkZWFlL3dlYi9jb21wcmVzc2VkLnRyYWNlbW9ua2V5LXBsZGktMDkucGRmIgogICAgICAgIHNob3dUb29sYmFyPSJ0cnVlIgogICAgICAgIHNob3dTaWRlYmFyPSJ0cnVlIgogICAgICAgIGluaXRpYWxab29tPSJwYWdlLXdpZHRoIgogICAgICA+PC9kZWVzLXBkZi12aWV3ZXI+CiAgICA8L2Rpdj4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICA8aDM+Q29tcGFjdCBWaWV3ZXIgd2l0aG91dCBDb250cm9sczwvaDM+CiAgICAgIDxkZWVzLXBkZi12aWV3ZXIKICAgICAgICBjbGFzcz0idmlld2VyLWNvbXBhY3QiCiAgICAgICAgcGRmVXJsPSJodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vbW96aWxsYS9wZGYuanMvYmEyZWRlYWUvZXhhbXBsZXMvbGVhcm5pbmcvaGVsbG93b3JsZC5wZGYiCiAgICAgICAgc2hvd1Rvb2xiYXI9ImZhbHNlIgogICAgICAgIHNob3dTaWRlYmFyPSJmYWxzZSIKICAgICAgICBpbml0aWFsWm9vbT0iYXV0byIKICAgICAgPjwvZGVlcy1wZGYtdmlld2VyPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtcGRmL2RlZXMtcGRmLXZpZXdlci9jb21wb25lbnQuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKdmFyIF9fZXNEZWNvcmF0ZTY5ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1BkZlZpZXdlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGRmLXZpZXdlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BkZlVybF9kZWNvcmF0b3JzOwogIGxldCBfcGRmVXJsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGRmVXJsX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzOwogIGxldCBfaW5pdGlhbFBhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZGVjb3JhdG9yczsKICBsZXQgX2luaXRpYWxab29tX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2RlY29yYXRvcnM7CiAgbGV0IF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dUb29sYmFyX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9kZWNvcmF0b3JzOwogIGxldCBfc2hvd1NpZGViYXJfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZGVjb3JhdG9yczsKICBsZXQgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RvdGFsUGFnZXNfZGVjb3JhdG9yczsKICBsZXQgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbFBhZ2VzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzOwogIGxldCBfY3VycmVudFpvb21faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXJyZW50Wm9vbV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbG9hZGluZ19kZWNvcmF0b3JzOwogIGxldCBfbG9hZGluZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xvYWRpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2RvY3VtZW50SWRfZGVjb3JhdG9yczsKICBsZXQgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnM7CiAgbGV0IF90aHVtYm5haWxEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGh1bWJuYWlsRGF0YV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VEYXRhX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1BkZlZpZXdlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wZGZVcmxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9pbml0aWFsUGFnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2luaXRpYWxab29tX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2hvd1Rvb2xiYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfY3VycmVudFBhZ2VfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF90b3RhbFBhZ2VzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIgfSldOwogICAgICBfY3VycmVudFpvb21fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9sb2FkaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBCb29sZWFuIH0pXTsKICAgICAgX2RvY3VtZW50SWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF90aHVtYm5haWxEYXRhX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBBcnJheSB9KV07CiAgICAgIF9wYWdlRGF0YV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfcGRmVXJsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBkZlVybCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicGRmVXJsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBkZlVybCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGRmVXJsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3BkZlVybF9pbml0aWFsaXplcnMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfaW5pdGlhbFBhZ2VfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiaW5pdGlhbFBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImluaXRpYWxQYWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmluaXRpYWxQYWdlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5pbml0aWFsUGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9pbml0aWFsWm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJpbml0aWFsWm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaW5pdGlhbFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouaW5pdGlhbFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmluaXRpYWxab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgX2luaXRpYWxab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3Nob3dUb29sYmFyX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNob3dUb29sYmFyIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93VG9vbGJhciIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zaG93VG9vbGJhciwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2hvd1Rvb2xiYXIgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd1Rvb2xiYXJfaW5pdGlhbGl6ZXJzLCBfc2hvd1Rvb2xiYXJfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfc2hvd1NpZGViYXJfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2hvd1NpZGViYXIiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNob3dTaWRlYmFyIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dTaWRlYmFyLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zaG93U2lkZWJhciA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaG93U2lkZWJhcl9pbml0aWFsaXplcnMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50UGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50UGFnZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFBhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRQYWdlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgX2N1cnJlbnRQYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3RvdGFsUGFnZXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWxQYWdlcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidG90YWxQYWdlcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50b3RhbFBhZ2VzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbFBhZ2VzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RvdGFsUGFnZXNfaW5pdGlhbGl6ZXJzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9jdXJyZW50Wm9vbV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXJyZW50Wm9vbSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VycmVudFpvb20iIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VycmVudFpvb20sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1cnJlbnRab29tID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgX2N1cnJlbnRab29tX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX2xvYWRpbmdfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibG9hZGluZyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibG9hZGluZyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sb2FkaW5nLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sb2FkaW5nID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xvYWRpbmdfaW5pdGlhbGl6ZXJzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTY5KHRoaXMsIG51bGwsIF9kb2N1bWVudElkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImRvY3VtZW50SWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImRvY3VtZW50SWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZG9jdW1lbnRJZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZG9jdW1lbnRJZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9kb2N1bWVudElkX2luaXRpYWxpemVycywgX2RvY3VtZW50SWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OSh0aGlzLCBudWxsLCBfdGh1bWJuYWlsRGF0YV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0aHVtYm5haWxEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0aHVtYm5haWxEYXRhIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRodW1ibmFpbERhdGEsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRodW1ibmFpbERhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNjkodGhpcywgbnVsbCwgX3BhZ2VEYXRhX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2VEYXRhIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwYWdlRGF0YSIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5wYWdlRGF0YSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZURhdGEgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU2OShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtbzI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlBERiI7CiAgICBzdGF0aWMgc3R5bGVzID0gdmlld2VyU3R5bGVzOwogICAgI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGRmVXJsX2luaXRpYWxpemVycywgIiIpOwogICAgZ2V0IHBkZlVybCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BkZlVybF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHBkZlVybCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGRmVXJsX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9wZGZVcmxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9pbml0aWFsaXplcnMsIDEpKTsKICAgIGdldCBpbml0aWFsUGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgaW5pdGlhbFBhZ2UodmFsdWUyKSB7CiAgICAgIHRoaXMuI2luaXRpYWxQYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjaW5pdGlhbFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9pbml0aWFsUGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2luaXRpYWxab29tX2luaXRpYWxpemVycywgImF1dG8iKSk7CiAgICBnZXQgaW5pdGlhbFpvb20oKSB7CiAgICAgIHJldHVybiB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGluaXRpYWxab29tKHZhbHVlMikgewogICAgICB0aGlzLiNpbml0aWFsWm9vbV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfaW5pdGlhbFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBzaG93VG9vbGJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1Rvb2xiYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dUb29sYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc2hvd1NpZGViYXJfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93VG9vbGJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX3Nob3dTaWRlYmFyX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93U2lkZWJhcigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2hvd1NpZGViYXIodmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dTaWRlYmFyX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9zaG93U2lkZWJhcl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRQYWdlX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRQYWdlKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50UGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFBhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFBhZ2VfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90b3RhbFBhZ2VzX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IHRvdGFsUGFnZXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0b3RhbFBhZ2VzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdG90YWxQYWdlcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxQYWdlc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1cnJlbnRab29tX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdG90YWxQYWdlc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2N1cnJlbnRab29tX2luaXRpYWxpemVycywgMSkpOwogICAgZ2V0IGN1cnJlbnRab29tKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50Wm9vbSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFpvb21fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsb2FkaW5nX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfY3VycmVudFpvb21fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9sb2FkaW5nX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBsb2FkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jbG9hZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxvYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2xvYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfbG9hZGluZ19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzAodGhpcywgX2RvY3VtZW50SWRfaW5pdGlhbGl6ZXJzLCAiIikpOwogICAgZ2V0IGRvY3VtZW50SWQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNkb2N1bWVudElkX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgZG9jdW1lbnRJZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZG9jdW1lbnRJZF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF9kb2N1bWVudElkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfdGh1bWJuYWlsRGF0YV9pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgdGh1bWJuYWlsRGF0YSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RodW1ibmFpbERhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0aHVtYm5haWxEYXRhKHZhbHVlMikgewogICAgICB0aGlzLiN0aHVtYm5haWxEYXRhX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcwKHRoaXMsIF90aHVtYm5haWxEYXRhX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHBhZ2VEYXRhKCkgewogICAgICByZXR1cm4gdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwYWdlRGF0YSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZURhdGFfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHBkZkRvY3VtZW50ID0gX19ydW5Jbml0aWFsaXplcnM3MCh0aGlzLCBfcGFnZURhdGFfZXh0cmFJbml0aWFsaXplcnMpOwogICAgcmVuZGVyU3RhdGUgPSAiaWRsZSI7CiAgICByZW5kZXJBYm9ydENvbnRyb2xsZXIgPSBudWxsOwogICAgcGFnZVJlbmRlcmluZyA9IGZhbHNlOwogICAgcGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgdGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgIHBhZ2VSZW5kZXJUYXNrcyA9IC8qIEBfX1BVUkVfXyAqLyBuZXcgTWFwKCk7CiAgICBjYW52YXM7CiAgICBjdHg7CiAgICB2aWV3ZXJNYWluID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJzZWN0aW9uT2JzZXJ2ZXI7CiAgICBzY3JvbGxUaHJvdHRsZVRpbWVvdXQ7CiAgICB2aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgIHZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgIE1BTlVBTF9NSU5fWk9PTSA9IDAuNTsKICAgIE1BTlVBTF9NQVhfWk9PTSA9IDM7CiAgICBBQlNPTFVURV9NSU5fWk9PTSA9IDAuMTsKICAgIEFCU09MVVRFX01BWF9aT09NID0gNDsKICAgIFBBR0VfR0FQID0gMjA7CiAgICBSRU5ERVJfQlVGRkVSID0gMzsKICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InBkZi12aWV3ZXIgJHt0aGlzLnNob3dTaWRlYmFyID8gIndpdGgtc2lkZWJhciIgOiAiIn0iPgogICAgICAgICR7dGhpcy5zaG93VG9vbGJhciA/IGIyYAogICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhciI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXItZ3JvdXAiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMucHJldmlvdXNQYWdlfQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5jdXJyZW50UGFnZSA8PSAxfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25MZWZ0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdlLWluZm8iPgogICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgIHR5cGU9Im51bWJlciIKICAgICAgICAgICAgICAgICAgbWluPSIxIgogICAgICAgICAgICAgICAgICBtYXg9IiR7dGhpcy50b3RhbFBhZ2VzfSIKICAgICAgICAgICAgICAgICAgLnZhbHVlPSR7U3RyaW5nKHRoaXMuY3VycmVudFBhZ2UpfQogICAgICAgICAgICAgICAgICBAY2hhbmdlPSR7dGhpcy5oYW5kbGVQYWdlSW5wdXR9CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJwYWdlLWlucHV0IgogICAgICAgICAgICAgICAgLz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXNlcGFyYXRvciI+Lzwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJwYWdlLXRvdGFsIj4ke3RoaXMudG90YWxQYWdlc308L3NwYW4+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5uZXh0UGFnZX0KICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMuY3VycmVudFBhZ2UgPj0gdGhpcy50b3RhbFBhZ2VzfQogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkNoZXZyb25SaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCI+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tT3V0fQogICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY2FuWm9vbU91dH0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpab29tT3V0Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnJlc2V0Wm9vbX0KICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iem9vbS1sZXZlbCI+JHtNYXRoLnJvdW5kKHRoaXMuY3VycmVudFpvb20gKiAxMDApfSU8L3NwYW4+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy56b29tSW59CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5jYW5ab29tSW59CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiBpY29uPSJsdWNpZGU6Wm9vbUluIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPC9kaXY+CgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyLWdyb3VwIj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmZpdFRvUGFnZX0KICAgICAgICAgICAgICAgIHRpdGxlPSJGaXQgdG8gcGFnZSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpNYXhpbWl6ZSI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9InRvb2xiYXItYnV0dG9uIgogICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5maXRUb1dpZHRofQogICAgICAgICAgICAgICAgdGl0bGU9IkZpdCB0byB3aWR0aCIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249Imx1Y2lkZTpBcnJvd0xlZnRSaWdodCI+PC9kZWVzLWljb24+CiAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9vbGJhci1ncm91cCB0b29sYmFyLWdyb3VwLS1lbmQiPgogICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgIGNsYXNzPSJ0b29sYmFyLWJ1dHRvbiIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2hvd1NpZGViYXIgPSAhdGhpcy5zaG93U2lkZWJhcn0KICAgICAgICAgICAgICAgIHRpdGxlPSIke3RoaXMuc2hvd1NpZGViYXIgPyAiSGlkZSB0aHVtYm5haWxzIiA6ICJTaG93IHRodW1ibmFpbHMifSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIGljb249IiR7dGhpcy5zaG93U2lkZWJhciA/ICJsdWNpZGU6U2lkZWJhckNsb3NlIiA6ICJsdWNpZGU6U2lkZWJhciJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLmRvd25sb2FkUGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IkRvd25sb2FkIgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOkRvd25sb2FkIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICBjbGFzcz0idG9vbGJhci1idXR0b24iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHt0aGlzLnByaW50UGRmfQogICAgICAgICAgICAgICAgdGl0bGU9IlByaW50IgogICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlByaW50ZXIiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIGAgOiAiIn0KCiAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMuc2hvd1NpZGViYXIgPyBiMmAKICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICAgICAgPHNwYW4+UGFnZXM8L3NwYW4+CiAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgIGNsYXNzPSJzaWRlYmFyLWNsb3NlIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dTaWRlYmFyID0gZmFsc2V9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gaWNvbj0ibHVjaWRlOlgiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1jb250ZW50Ij4KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLmtleWVkKHRoaXMuZG9jdW1lbnRJZCwgYjJgCiAgICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlcGVhdCh0aGlzLnRodW1ibmFpbERhdGEsIChpdGVtKSA9PiBpdGVtLnBhZ2UsIChpdGVtKSA9PiBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9InRodW1ibmFpbCAke3RoaXMuY3VycmVudFBhZ2UgPT09IGl0ZW0ucGFnZSA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSIKICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7dGhpcy5oYW5kbGVUaHVtYm5haWxDbGlja30KICAgICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgICAgPGNhbnZhcyBjbGFzcz0idGh1bWJuYWlsLWNhbnZhcyIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPjwvY2FudmFzPgogICAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idGh1bWJuYWlsLW51bWJlciI+JHtpdGVtLnBhZ2V9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgIDogIiJ9CgogICAgICAgICAgPGRpdiBjbGFzcz0idmlld2VyLW1haW4iIEBzY3JvbGw9JHt0aGlzLmhhbmRsZVNjcm9sbH0+CiAgICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gYjJgCiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1jb250YWluZXIiPgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ibG9hZGluZy1zcGlubmVyIj48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctdGV4dCI+TG9hZGluZyBQREYuLi48L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6IGIyYAogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2VzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAke2RpcmVjdGl2ZXNfZXhwb3J0cy5yZXBlYXQodGhpcy5wYWdlRGF0YSwgKGl0ZW0pID0+IGl0ZW0ucGFnZSwgKGl0ZW0pID0+IGIyYAogICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2Utd3JhcHBlciIgZGF0YS1wYWdlPSIke2l0ZW0ucGFnZX0iPgogICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY2FudmFzLWNvbnRhaW5lciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxjYW52YXMgY2xhc3M9InBhZ2UtY2FudmFzIiBkYXRhLXBhZ2U9IiR7aXRlbS5wYWdlfSI+PC9jYW52YXM+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYCl9CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICBpZiAodGhpcy5wZGZVcmwpIHsKICAgICAgICB0aGlzLmRvY3VtZW50SWQgPSBgJHt0aGlzLnBkZlVybH0tJHtEYXRlLm5vdygpfS0ke01hdGgucmFuZG9tKCl9YDsKICAgICAgICBhd2FpdCB0aGlzLmxvYWRQZGYoKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXI/LmRpc2Nvbm5lY3QoKTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IHZvaWQgMDsKICAgICAgdGhpcy5pbnRlcnNlY3Rpb25PYnNlcnZlcj8uZGlzY29ubmVjdCgpOwogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gdm9pZCAwOwogICAgICBpZiAodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpIHsKICAgICAgICBjbGVhclRpbWVvdXQodGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQpOwogICAgICAgIHRoaXMuc2Nyb2xsVGhyb3R0bGVUaW1lb3V0ID0gdm9pZCAwOwogICAgICB9CiAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAiZGlzcG9zZWQiOwogICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICB0aGlzLmNhbnZhcyA9IHZvaWQgMDsKICAgICAgdGhpcy5jdHggPSB2b2lkIDA7CiAgICB9CiAgICBhc3luYyB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLnVwZGF0ZWQoY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJwZGZVcmwiKSAmJiB0aGlzLnBkZlVybCkgewogICAgICAgIGNvbnN0IHByZXZpb3VzVXJsID0gY2hhbmdlZFByb3BlcnRpZXMuZ2V0KCJwZGZVcmwiKTsKICAgICAgICBpZiAocHJldmlvdXNVcmwpIHsKICAgICAgICAgIFBkZk1hbmFnZXIucmVsZWFzZURvY3VtZW50KHByZXZpb3VzVXJsKTsKICAgICAgICB9CiAgICAgICAgdGhpcy5kb2N1bWVudElkID0gYCR7dGhpcy5wZGZVcmx9LSR7RGF0ZS5ub3coKX0tJHtNYXRoLnJhbmRvbSgpfWA7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkUGRmKCk7CiAgICAgIH0KICAgICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygic2hvd1NpZGViYXIiKSAmJiB0aGlzLnNob3dTaWRlYmFyICYmIHRoaXMucGRmRG9jdW1lbnQpIHsKICAgICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHJlcXVlc3RBbmltYXRpb25GcmFtZShyZXNvbHZlMikpOwogICAgICAgIHRoaXMudGh1bWJuYWlsRGF0YS5mb3JFYWNoKCh0aHVtYikgPT4gdGh1bWIucmVuZGVyZWQgPSBmYWxzZSk7CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJUaHVtYm5haWxzKCk7CiAgICAgICAgdGhpcy5zZXR1cEludGVyc2VjdGlvbk9ic2VydmVyKCk7CiAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyh0aGlzLmN1cnJlbnRQYWdlKTsKICAgICAgfQogICAgfQogICAgYXN5bmMgbG9hZFBkZigpIHsKICAgICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJsb2FkaW5nIjsKICAgICAgdHJ5IHsKICAgICAgICBhd2FpdCB0aGlzLmNsZWFudXBEb2N1bWVudCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIGNvbnN0IHNpZ25hbCA9IHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyLnNpZ25hbDsKICAgICAgICB0aGlzLnBkZkRvY3VtZW50ID0gYXdhaXQgUGRmTWFuYWdlci5sb2FkRG9jdW1lbnQodGhpcy5wZGZVcmwpOwogICAgICAgIGlmIChzaWduYWwuYWJvcnRlZCkKICAgICAgICAgIHJldHVybjsKICAgICAgICB0aGlzLnRvdGFsUGFnZXMgPSB0aGlzLnBkZkRvY3VtZW50Lm51bVBhZ2VzOwogICAgICAgIHRoaXMuY3VycmVudFBhZ2UgPSB0aGlzLmluaXRpYWxQYWdlOwogICAgICAgIHRoaXMucmVzb2x2ZUluaXRpYWxWaWV3cG9ydE1vZGUoKTsKICAgICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlCiAgICAgICAgfSkpOwogICAgICAgIHRoaXMucGFnZURhdGEgPSBBcnJheS5mcm9tKHsgbGVuZ3RoOiB0aGlzLnRvdGFsUGFnZXMgfSwgKF80LCBpMTEpID0+ICh7CiAgICAgICAgICBwYWdlOiBpMTEgKyAxLAogICAgICAgICAgcmVuZGVyZWQ6IGZhbHNlLAogICAgICAgICAgcmVuZGVyaW5nOiBmYWxzZQogICAgICAgIH0pKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICAgIHRoaXMuZW5zdXJlVmlld2VyUmVmcygpOwogICAgICAgIHRoaXMuc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpOwogICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyaW5nLW1haW4iOwogICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgcmV0dXJuOwogICAgICAgIGlmICh0aGlzLmluaXRpYWxQYWdlID4gMSkgewogICAgICAgICAgYXdhaXQgdGhpcy5zY3JvbGxUb1BhZ2UodGhpcy5pbml0aWFsUGFnZSwgZmFsc2UpOwogICAgICAgIH0KICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICAgIGF3YWl0IG5ldyBQcm9taXNlKChyZXNvbHZlMikgPT4gcmVxdWVzdEFuaW1hdGlvbkZyYW1lKHJlc29sdmUyKSk7CiAgICAgICAgICBpZiAoc2lnbmFsLmFib3J0ZWQpCiAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgIGF3YWl0IHRoaXMucmVuZGVyVGh1bWJuYWlscygpOwogICAgICAgICAgaWYgKHNpZ25hbC5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHRoaXMucmVuZGVyU3RhdGUgPSAicmVuZGVyZWQiOwogICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgUERGOiIsIGVycm9yKTsKICAgICAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICAgICAgICB0aGlzLnJlbmRlclN0YXRlID0gImVycm9yIjsKICAgICAgfQogICAgfQogICAgc2V0dXBJbnRlcnNlY3Rpb25PYnNlcnZlcigpIHsKICAgICAgaWYgKHRoaXMuaW50ZXJzZWN0aW9uT2JzZXJ2ZXIpIHsKICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyLmRpc2Nvbm5lY3QoKTsKICAgICAgfQogICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyID0gbmV3IEludGVyc2VjdGlvbk9ic2VydmVyKChlbnRyaWVzKSA9PiB7CiAgICAgICAgZm9yIChjb25zdCBlbnRyeSBvZiBlbnRyaWVzKSB7CiAgICAgICAgICBjb25zdCBwYWdlV3JhcHBlciA9IGVudHJ5LnRhcmdldDsKICAgICAgICAgIGNvbnN0IHBhZ2VOdW0gPSBwYXJzZUludChwYWdlV3JhcHBlci5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGlmIChlbnRyeS5pc0ludGVyc2VjdGluZykgewogICAgICAgICAgICB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0sIHsKICAgICAgICByb290OiB0aGlzLnZpZXdlck1haW4sCiAgICAgICAgcm9vdE1hcmdpbjogYCR7dGhpcy5SRU5ERVJfQlVGRkVSICogMTAwfXB4IDBweGAsCiAgICAgICAgdGhyZXNob2xkOiAwLjAxCiAgICAgIH0pOwogICAgICBjb25zdCBwYWdlV3JhcHBlcnMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi5wYWdlLXdyYXBwZXIiKTsKICAgICAgaWYgKHBhZ2VXcmFwcGVycykgewogICAgICAgIHBhZ2VXcmFwcGVycy5mb3JFYWNoKCh3cmFwcGVyKSA9PiB7CiAgICAgICAgICB0aGlzLmludGVyc2VjdGlvbk9ic2VydmVyPy5vYnNlcnZlKHdyYXBwZXIpOwogICAgICAgIH0pOwogICAgICB9CiAgICB9CiAgICBhc3luYyByZW5kZXJWaXNpYmxlUGFnZXMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gdGhpcy52aWV3ZXJNYWluLmNsaWVudEhlaWdodDsKICAgICAgZm9yIChjb25zdCBwYWdlSW5mbyBvZiB0aGlzLnBhZ2VEYXRhKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke3BhZ2VJbmZvLnBhZ2V9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBjb25zdCBidWZmZXIyID0gdGhpcy5SRU5ERVJfQlVGRkVSICogY2xpZW50SGVpZ2h0OwogICAgICAgIGlmIChyZWxhdGl2ZUJvdHRvbSA+PSAtYnVmZmVyMiAmJiByZWxhdGl2ZVRvcCA8PSBjbGllbnRIZWlnaHQgKyBidWZmZXIyKSB7CiAgICAgICAgICBhd2FpdCB0aGlzLnJlbmRlclBhZ2VJZk5lZWRlZChwYWdlSW5mby5wYWdlKTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclBhZ2VJZk5lZWRlZChwYWdlTnVtKSB7CiAgICAgIGNvbnN0IHBhZ2VJbmZvID0gdGhpcy5wYWdlRGF0YS5maW5kKChwNykgPT4gcDcucGFnZSA9PT0gcGFnZU51bSk7CiAgICAgIGlmICghcGFnZUluZm8gfHwgcGFnZUluZm8ucmVuZGVyZWQgfHwgcGFnZUluZm8ucmVuZGVyaW5nKQogICAgICAgIHJldHVybjsKICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gdHJ1ZTsKICAgICAgdHJ5IHsKICAgICAgICBjb25zdCBjYW52YXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLWNhbnZhc1tkYXRhLXBhZ2U9IiR7cGFnZU51bX0iXWApOwogICAgICAgIGlmICghY2FudmFzKSB7CiAgICAgICAgICBwYWdlSW5mby5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICAgICAgY29uc3QgcGFnZSA9IGF3YWl0IHRoaXMucGRmRG9jdW1lbnQuZ2V0UGFnZShwYWdlTnVtKTsKICAgICAgICBjb25zdCB2aWV3cG9ydCA9IHRoaXMuY29tcHV0ZVZpZXdwb3J0KHBhZ2UpOwogICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgY2FudmFzLndpZHRoID0gdmlld3BvcnQud2lkdGg7CiAgICAgICAgY2FudmFzLnN0eWxlLndpZHRoID0gYCR7dmlld3BvcnQud2lkdGh9cHhgOwogICAgICAgIGNhbnZhcy5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgIGNvbnN0IGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgIGlmICghY3R4KSB7CiAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICBjYW52YXNDb250ZXh0OiBjdHgsCiAgICAgICAgICB2aWV3cG9ydAogICAgICAgIH07CiAgICAgICAgY29uc3QgcmVuZGVyVGFzayA9IHBhZ2UucmVuZGVyKHJlbmRlckNvbnRleHQpOwogICAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLnNldChwYWdlTnVtLCByZW5kZXJUYXNrKTsKICAgICAgICBhd2FpdCByZW5kZXJUYXNrLnByb21pc2U7CiAgICAgICAgcGFnZS5jbGVhbnVwPy4oKTsKICAgICAgICBwYWdlSW5mby5yZW5kZXJlZCA9IHRydWU7CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgicGFnZURhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKGBFcnJvciByZW5kZXJpbmcgcGFnZSAke3BhZ2VOdW19OmAsIGVycm9yKTsKICAgICAgICB9CiAgICAgICAgcGFnZUluZm8ucmVuZGVyaW5nID0gZmFsc2U7CiAgICAgICAgdGhpcy5wYWdlUmVuZGVyVGFza3MuZGVsZXRlKHBhZ2VOdW0pOwogICAgICB9CiAgICB9CiAgICBoYW5kbGVTY3JvbGwgPSAoKSA9PiB7CiAgICAgIGlmICh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCkgewogICAgICAgIGNsZWFyVGltZW91dCh0aGlzLnNjcm9sbFRocm90dGxlVGltZW91dCk7CiAgICAgIH0KICAgICAgdGhpcy5zY3JvbGxUaHJvdHRsZVRpbWVvdXQgPSB3aW5kb3cuc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgdGhpcy51cGRhdGVDdXJyZW50UGFnZSgpOwogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0sIDUwKTsKICAgIH07CiAgICB1cGRhdGVDdXJyZW50UGFnZSgpIHsKICAgICAgaWYgKCF0aGlzLnZpZXdlck1haW4pCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBzY3JvbGxUb3AgPSB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wOwogICAgICBjb25zdCBjbGllbnRIZWlnaHQgPSB0aGlzLnZpZXdlck1haW4uY2xpZW50SGVpZ2h0OwogICAgICBjb25zdCBjZW50ZXJZID0gc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC8gMjsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDwgdGhpcy5wYWdlRGF0YS5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgY29uc3QgcGFnZVdyYXBwZXIgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoYC5wYWdlLXdyYXBwZXJbZGF0YS1wYWdlPSIke2kxMSArIDF9Il1gKTsKICAgICAgICBpZiAoIXBhZ2VXcmFwcGVyKQogICAgICAgICAgY29udGludWU7CiAgICAgICAgY29uc3QgcmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgcmVsYXRpdmVUb3AgPSByZWN0LnRvcCAtIHZpZXdlclJlY3QudG9wICsgc2Nyb2xsVG9wOwogICAgICAgIGNvbnN0IHJlbGF0aXZlQm90dG9tID0gcmVsYXRpdmVUb3AgKyByZWN0LmhlaWdodDsKICAgICAgICBpZiAoY2VudGVyWSA+PSByZWxhdGl2ZVRvcCAmJiBjZW50ZXJZIDw9IHJlbGF0aXZlQm90dG9tKSB7CiAgICAgICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSAhPT0gaTExICsgMSkgewogICAgICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gaTExICsgMTsKICAgICAgICAgICAgaWYgKHRoaXMuc2hvd1NpZGViYXIpIHsKICAgICAgICAgICAgICB0aGlzLnNjcm9sbFRodW1ibmFpbEludG9WaWV3KGkxMSArIDEpOwogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIHNjcm9sbFRodW1ibmFpbEludG9WaWV3KHBhZ2VOdW0pIHsKICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAudGh1bWJuYWlsW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGNvbnN0IHNpZGViYXJDb250ZW50ID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKCIuc2lkZWJhci1jb250ZW50Iik7CiAgICAgIGlmICh0aHVtYm5haWwgJiYgc2lkZWJhckNvbnRlbnQpIHsKICAgICAgICBjb25zdCB0aHVtYm5haWxSZWN0ID0gdGh1bWJuYWlsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHNpZGViYXJSZWN0ID0gc2lkZWJhckNvbnRlbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgaXNBYm92ZSA9IHRodW1ibmFpbFJlY3QudG9wIDwgc2lkZWJhclJlY3QudG9wOwogICAgICAgIGNvbnN0IGlzQmVsb3cgPSB0aHVtYm5haWxSZWN0LmJvdHRvbSA+IHNpZGViYXJSZWN0LmJvdHRvbTsKICAgICAgICBpZiAoaXNBYm92ZSB8fCBpc0JlbG93KSB7CiAgICAgICAgICBjb25zdCB0aHVtYm5haWxPZmZzZXQgPSB0aHVtYm5haWwub2Zmc2V0VG9wOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsSGVpZ2h0ID0gdGh1bWJuYWlsLm9mZnNldEhlaWdodDsKICAgICAgICAgIGNvbnN0IHNpZGViYXJIZWlnaHQgPSBzaWRlYmFyQ29udGVudC5jbGllbnRIZWlnaHQ7CiAgICAgICAgICBjb25zdCB0YXJnZXRTY3JvbGxUb3AgPSB0aHVtYm5haWxPZmZzZXQgLSBzaWRlYmFySGVpZ2h0IC8gMiArIHRodW1ibmFpbEhlaWdodCAvIDI7CiAgICAgICAgICBzaWRlYmFyQ29udGVudC5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogTWF0aC5tYXgoMCwgdGFyZ2V0U2Nyb2xsVG9wKSwKICAgICAgICAgICAgYmVoYXZpb3I6ICJzbW9vdGgiCiAgICAgICAgICB9KTsKICAgICAgICB9CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHNjcm9sbFRvUGFnZShwYWdlTnVtLCBzbW9vdGggPSB0cnVlKSB7CiAgICAgIGF3YWl0IHRoaXMudXBkYXRlQ29tcGxldGU7CiAgICAgIGNvbnN0IHBhZ2VXcmFwcGVyID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yKGAucGFnZS13cmFwcGVyW2RhdGEtcGFnZT0iJHtwYWdlTnVtfSJdYCk7CiAgICAgIGlmIChwYWdlV3JhcHBlciAmJiB0aGlzLnZpZXdlck1haW4pIHsKICAgICAgICBjb25zdCBwYWdlUmVjdCA9IHBhZ2VXcmFwcGVyLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICAgIGNvbnN0IHZpZXdlclJlY3QgPSB0aGlzLnZpZXdlck1haW4uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgICAgY29uc3QgY3VycmVudFNjcm9sbFRvcCA9IHRoaXMudmlld2VyTWFpbi5zY3JvbGxUb3A7CiAgICAgICAgY29uc3QgdGFyZ2V0U2Nyb2xsVG9wID0gY3VycmVudFNjcm9sbFRvcCArIChwYWdlUmVjdC50b3AgLSB2aWV3ZXJSZWN0LnRvcCkgLSB0aGlzLnZpZXdlck1haW4uY2xpZW50VG9wOwogICAgICAgIGlmIChzbW9vdGgpIHsKICAgICAgICAgIHRoaXMudmlld2VyTWFpbi5zY3JvbGxUbyh7CiAgICAgICAgICAgIHRvcDogdGFyZ2V0U2Nyb2xsVG9wLAogICAgICAgICAgICBiZWhhdmlvcjogInNtb290aCIKICAgICAgICAgIH0pOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnZpZXdlck1haW4uc2Nyb2xsVG9wID0gdGFyZ2V0U2Nyb2xsVG9wOwogICAgICAgIH0KICAgICAgICB0aGlzLmN1cnJlbnRQYWdlID0gcGFnZU51bTsKICAgICAgICBpZiAodGhpcy5zaG93U2lkZWJhcikgewogICAgICAgICAgdGhpcy5zY3JvbGxUaHVtYm5haWxJbnRvVmlldyhwYWdlTnVtKTsKICAgICAgICB9CiAgICAgICAgYXdhaXQgdGhpcy5yZW5kZXJQYWdlSWZOZWVkZWQocGFnZU51bSk7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIHJlbmRlclRodW1ibmFpbHMoKSB7CiAgICAgIGlmICghdGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy50aHVtYm5haWxEYXRhLmxlbmd0aCA+IDAgJiYgdGhpcy50aHVtYm5haWxEYXRhLmV2ZXJ5KCh0OSkgPT4gdDkucmVuZGVyZWQpKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlcj8uc2lnbmFsLmFib3J0ZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc2lnbmFsID0gdGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXI/LnNpZ25hbDsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJyZW5kZXJpbmctdGh1bWJzIjsKICAgICAgZm9yIChjb25zdCB0YXNrIG9mIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MpIHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfQogICAgICB0aGlzLnRodW1ibmFpbFJlbmRlclRhc2tzID0gW107CiAgICAgIHRyeSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVDb21wbGV0ZTsKICAgICAgICBjb25zdCB0aHVtYm5haWxzID0gdGhpcy5zaGFkb3dSb290Py5xdWVyeVNlbGVjdG9yQWxsKCIudGh1bWJuYWlsIik7CiAgICAgICAgY29uc3QgdGh1bWJuYWlsQ2FudmFzZXMgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3JBbGwoIi50aHVtYm5haWwtY2FudmFzIik7CiAgICAgICAgY29uc3Qgc2lkZWJhckNvbnRlbnQgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5zaWRlYmFyLWNvbnRlbnQiKTsKICAgICAgICBjb25zdCBzaWRlYmFyU3R5bGVzID0gd2luZG93LmdldENvbXB1dGVkU3R5bGUoc2lkZWJhckNvbnRlbnQpOwogICAgICAgIGNvbnN0IHNpZGViYXJQYWRkaW5nID0gcGFyc2VGbG9hdChzaWRlYmFyU3R5bGVzLnBhZGRpbmdMZWZ0KSArIHBhcnNlRmxvYXQoc2lkZWJhclN0eWxlcy5wYWRkaW5nUmlnaHQpOwogICAgICAgIGNvbnN0IG1heFRodW1ibmFpbFdpZHRoID0gMjAwIC0gc2lkZWJhclBhZGRpbmcgLSA0OwogICAgICAgIGZvciAoY29uc3QgY2FudmFzIG9mIEFycmF5LmZyb20odGh1bWJuYWlsQ2FudmFzZXMpKSB7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKGNvbnRleHQyKSB7CiAgICAgICAgICAgIGNvbnRleHQyLmNsZWFyUmVjdCgwLCAwLCBjYW52YXMud2lkdGgsIGNhbnZhcy5oZWlnaHQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCB0aHVtYm5haWxDYW52YXNlcy5sZW5ndGg7IGkxMSsrKSB7CiAgICAgICAgICBpZiAoc2lnbmFsPy5hYm9ydGVkKQogICAgICAgICAgICByZXR1cm47CiAgICAgICAgICBjb25zdCBjYW52YXMgPSB0aHVtYm5haWxDYW52YXNlc1tpMTFdOwogICAgICAgICAgY29uc3QgdGh1bWJuYWlsID0gdGh1bWJuYWlsc1tpMTFdOwogICAgICAgICAgY29uc3QgcGFnZU51bSA9IHBhcnNlSW50KGNhbnZhcy5kYXRhc2V0LnBhZ2UgfHwgIjEiKTsKICAgICAgICAgIGNvbnN0IHBhZ2UgPSBhd2FpdCB0aGlzLnBkZkRvY3VtZW50LmdldFBhZ2UocGFnZU51bSk7CiAgICAgICAgICBjb25zdCBpbml0aWFsVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgICAgICBjb25zdCBzY2FsZSA9IG1heFRodW1ibmFpbFdpZHRoIC8gaW5pdGlhbFZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3Qgdmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGUgfSk7CiAgICAgICAgICBjYW52YXMud2lkdGggPSB2aWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNhbnZhcy5oZWlnaHQgPSB2aWV3cG9ydC5oZWlnaHQ7CiAgICAgICAgICBjYW52YXMuc3R5bGUud2lkdGggPSBgJHt2aWV3cG9ydC53aWR0aH1weGA7CiAgICAgICAgICBjYW52YXMuc3R5bGUuaGVpZ2h0ID0gYCR7dmlld3BvcnQuaGVpZ2h0fXB4YDsKICAgICAgICAgIHRodW1ibmFpbC5zdHlsZS5oZWlnaHQgPSBgJHt2aWV3cG9ydC5oZWlnaHR9cHhgOwogICAgICAgICAgdGh1bWJuYWlsLnN0eWxlLm1pbkhlaWdodCA9IGAke3ZpZXdwb3J0LmhlaWdodH1weGA7CiAgICAgICAgICBjb25zdCBjb250ZXh0MiA9IGNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOwogICAgICAgICAgaWYgKCFjb250ZXh0MikgewogICAgICAgICAgICBwYWdlLmNsZWFudXA/LigpOwogICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgIH0KICAgICAgICAgIGNvbnN0IHJlbmRlckNvbnRleHQgPSB7CiAgICAgICAgICAgIGNhbnZhc0NvbnRleHQ6IGNvbnRleHQyLAogICAgICAgICAgICB2aWV3cG9ydAogICAgICAgICAgfTsKICAgICAgICAgIGNvbnN0IHJlbmRlclRhc2sgPSBwYWdlLnJlbmRlcihyZW5kZXJDb250ZXh0KTsKICAgICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MucHVzaChyZW5kZXJUYXNrKTsKICAgICAgICAgIGF3YWl0IHJlbmRlclRhc2sucHJvbWlzZTsKICAgICAgICAgIHBhZ2UuY2xlYW51cD8uKCk7CiAgICAgICAgICBjb25zdCB0aHVtYkRhdGEgPSB0aGlzLnRodW1ibmFpbERhdGEuZmluZCgodDkpID0+IHQ5LnBhZ2UgPT09IHBhZ2VOdW0pOwogICAgICAgICAgaWYgKHRodW1iRGF0YSkgewogICAgICAgICAgICB0aHVtYkRhdGEucmVuZGVyZWQgPSB0cnVlOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoInRodW1ibmFpbERhdGEiKTsKICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICBpZiAoZXJyb3I/Lm5hbWUgIT09ICJSZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24iKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciByZW5kZXJpbmcgdGh1bWJuYWlsczoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9IGZpbmFsbHkgewogICAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgfQogICAgfQogICAgcHJldmlvdXNQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA+IDEpIHsKICAgICAgICB0aGlzLnNjcm9sbFRvUGFnZSh0aGlzLmN1cnJlbnRQYWdlIC0gMSk7CiAgICAgIH0KICAgIH0KICAgIG5leHRQYWdlKCkgewogICAgICBpZiAodGhpcy5jdXJyZW50UGFnZSA8IHRoaXMudG90YWxQYWdlcykgewogICAgICAgIHRoaXMuc2Nyb2xsVG9QYWdlKHRoaXMuY3VycmVudFBhZ2UgKyAxKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlVGh1bWJuYWlsQ2xpY2soZTExKSB7CiAgICAgIGNvbnN0IHRhcmdldCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQodGFyZ2V0LmRhdGFzZXQucGFnZSB8fCAiMSIpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIGhhbmRsZVBhZ2VJbnB1dChlMTEpIHsKICAgICAgY29uc3QgaW5wdXQgPSBlMTEudGFyZ2V0OwogICAgICBjb25zdCBwYWdlTnVtID0gcGFyc2VJbnQoaW5wdXQudmFsdWUpOwogICAgICB0aGlzLnNjcm9sbFRvUGFnZShwYWdlTnVtKTsKICAgIH0KICAgIHpvb21JbigpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1pbih0aGlzLk1BTlVBTF9NQVhfWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAqIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgem9vbU91dCgpIHsKICAgICAgY29uc3QgbmV4dFpvb20gPSBNYXRoLm1heCh0aGlzLk1BTlVBTF9NSU5fWk9PTSwgdGhpcy5jdXJyZW50Wm9vbSAvIDEuMik7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgIGlmIChuZXh0Wm9vbSAhPT0gdGhpcy5jdXJyZW50Wm9vbSkgewogICAgICAgIHRoaXMuY3VycmVudFpvb20gPSBuZXh0Wm9vbTsKICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgfQogICAgfQogICAgcmVzZXRab29tKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJjdXN0b20iOwogICAgICB0aGlzLmN1cnJlbnRab29tID0gMTsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1BhZ2UoKSB7CiAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICBmaXRUb1dpZHRoKCkgewogICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgdGhpcy5yZVJlbmRlckFsbFBhZ2VzKCk7CiAgICB9CiAgICByZVJlbmRlckFsbFBhZ2VzKCkgewogICAgICB0aGlzLnBhZ2VEYXRhLmZvckVhY2goKHBhZ2UpID0+IHsKICAgICAgICBwYWdlLnJlbmRlcmVkID0gZmFsc2U7CiAgICAgICAgcGFnZS5yZW5kZXJpbmcgPSBmYWxzZTsKICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmZvckVhY2goKHRhc2spID0+IHsKICAgICAgICB0cnkgewogICAgICAgICAgdGFzay5jYW5jZWwoKTsKICAgICAgICB9IGNhdGNoIChlcnJvcikgewogICAgICAgIH0KICAgICAgfSk7CiAgICAgIHRoaXMucGFnZVJlbmRlclRhc2tzLmNsZWFyKCk7CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMucmVuZGVyVmlzaWJsZVBhZ2VzKCk7CiAgICAgIH0pOwogICAgfQogICAgZG93bmxvYWRQZGYoKSB7CiAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICBsaW5rMy5ocmVmID0gdGhpcy5wZGZVcmw7CiAgICAgIGxpbmszLmRvd25sb2FkID0gdGhpcy5wZGZVcmwuc3BsaXQoIi8iKS5wb3AoKSB8fCAiZG9jdW1lbnQucGRmIjsKICAgICAgbGluazMuY2xpY2soKTsKICAgIH0KICAgIHByaW50UGRmKCkgewogICAgICB3aW5kb3cub3Blbih0aGlzLnBkZlVybCwgIl9ibGFuayIpPy5wcmludCgpOwogICAgfQogICAgLyoqCiAgICAgKiBQcm92aWRlIGNvbnRleHQgbWVudSBpdGVtcyBmb3IgcmlnaHQtY2xpY2sgZnVuY3Rpb25hbGl0eQogICAgICovCiAgICBnZXRDb250ZXh0TWVudUl0ZW1zKCkgewogICAgICByZXR1cm4gWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIFBERiBpbiBOZXcgVGFiIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOkV4dGVybmFsTGluayIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgd2luZG93Lm9wZW4odGhpcy5wZGZVcmwsICJfYmxhbmsiKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJDb3B5IFBERiBVUkwiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Q29weSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgYXdhaXQgbmF2aWdhdG9yLmNsaXBib2FyZC53cml0ZVRleHQodGhpcy5wZGZVcmwpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkRvd25sb2FkIFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpEb3dubG9hZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgICAgdGhpcy5kb3dubG9hZFBkZigpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlByaW50IFBERiIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpQcmludGVyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLnByaW50UGRmKCk7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdOwogICAgfQogICAgZ2V0IGNhblpvb21JbigpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tIDwgdGhpcy5NQU5VQUxfTUFYX1pPT007CiAgICB9CiAgICBnZXQgY2FuWm9vbU91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMudmlld3BvcnRNb2RlICE9PSAiY3VzdG9tIiB8fCB0aGlzLmN1cnJlbnRab29tID4gdGhpcy5NQU5VQUxfTUlOX1pPT007CiAgICB9CiAgICBlbnN1cmVWaWV3ZXJSZWZzKCkgewogICAgICBpZiAoIXRoaXMudmlld2VyTWFpbikgewogICAgICAgIHRoaXMudmlld2VyTWFpbiA9IHRoaXMuc2hhZG93Um9vdD8ucXVlcnlTZWxlY3RvcigiLnZpZXdlci1tYWluIik7CiAgICAgIH0KICAgICAgaWYgKHRoaXMudmlld2VyTWFpbiAmJiAhdGhpcy5yZXNpemVPYnNlcnZlcikgewogICAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSBuZXcgUmVzaXplT2JzZXJ2ZXIoKCkgPT4gewogICAgICAgICAgdGhpcy5tZWFzdXJlVmlld3BvcnREaW1lbnNpb25zKCk7CiAgICAgICAgICBpZiAodGhpcy5wZGZEb2N1bWVudCkgewogICAgICAgICAgICB0aGlzLnJlUmVuZGVyQWxsUGFnZXMoKTsKICAgICAgICAgIH0KICAgICAgICB9KTsKICAgICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyLm9ic2VydmUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgICB0aGlzLm1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKTsKICAgICAgICB0aGlzLnZpZXdlck1haW4uYWRkRXZlbnRMaXN0ZW5lcigid2hlZWwiLCAoZTExKSA9PiB7CiAgICAgICAgICBjb25zdCBlbGVtZW50NCA9IGUxMS5jdXJyZW50VGFyZ2V0OwogICAgICAgICAgY29uc3Qgc2Nyb2xsVG9wID0gZWxlbWVudDQuc2Nyb2xsVG9wOwogICAgICAgICAgY29uc3Qgc2Nyb2xsSGVpZ2h0ID0gZWxlbWVudDQuc2Nyb2xsSGVpZ2h0OwogICAgICAgICAgY29uc3QgY2xpZW50SGVpZ2h0ID0gZWxlbWVudDQuY2xpZW50SGVpZ2h0OwogICAgICAgICAgY29uc3QgZGVsdGFZID0gZTExLmRlbHRhWTsKICAgICAgICAgIGNvbnN0IGlzQXRUb3AgPSBzY3JvbGxUb3AgPT09IDA7CiAgICAgICAgICBjb25zdCBpc0F0Qm90dG9tID0gTWF0aC5hYnMoc2Nyb2xsVG9wICsgY2xpZW50SGVpZ2h0IC0gc2Nyb2xsSGVpZ2h0KSA8IDE7CiAgICAgICAgICBpZiAoZGVsdGFZIDwgMCAmJiAhaXNBdFRvcCB8fCBkZWx0YVkgPiAwICYmICFpc0F0Qm90dG9tKSB7CiAgICAgICAgICAgIGUxMS5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICAgIH0gZWxzZSBpZiAoZGVsdGFZIDwgMCAmJiBpc0F0VG9wIHx8IGRlbHRhWSA+IDAgJiYgaXNBdEJvdHRvbSkgewogICAgICAgICAgICBlMTEucHJldmVudERlZmF1bHQoKTsKICAgICAgICAgICAgZTExLnN0b3BQcm9wYWdhdGlvbigpOwogICAgICAgICAgfQogICAgICAgIH0sIHsgcGFzc2l2ZTogZmFsc2UgfSk7CiAgICAgIH0KICAgIH0KICAgIG1lYXN1cmVWaWV3cG9ydERpbWVuc2lvbnMoKSB7CiAgICAgIGlmICghdGhpcy52aWV3ZXJNYWluKSB7CiAgICAgICAgdGhpcy52aWV3cG9ydERpbWVuc2lvbnMgPSB7IHdpZHRoOiAwLCBoZWlnaHQ6IDAgfTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qgc3R5bGVzMyA9IGdldENvbXB1dGVkU3R5bGUodGhpcy52aWV3ZXJNYWluKTsKICAgICAgY29uc3QgcGFkZGluZ1ggPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ0xlZnQgfHwgIjAiKSArIHBhcnNlRmxvYXQoc3R5bGVzMy5wYWRkaW5nUmlnaHQgfHwgIjAiKTsKICAgICAgY29uc3QgcGFkZGluZ1kgPSBwYXJzZUZsb2F0KHN0eWxlczMucGFkZGluZ1RvcCB8fCAiMCIpICsgcGFyc2VGbG9hdChzdHlsZXMzLnBhZGRpbmdCb3R0b20gfHwgIjAiKTsKICAgICAgY29uc3Qgd2lkdGggPSBNYXRoLm1heCh0aGlzLnZpZXdlck1haW4uY2xpZW50V2lkdGggLSBwYWRkaW5nWCwgMCk7CiAgICAgIGNvbnN0IGhlaWdodCA9IE1hdGgubWF4KHRoaXMudmlld2VyTWFpbi5jbGllbnRIZWlnaHQgLSBwYWRkaW5nWSwgMCk7CiAgICAgIHRoaXMudmlld3BvcnREaW1lbnNpb25zID0geyB3aWR0aCwgaGVpZ2h0IH07CiAgICB9CiAgICByZXNvbHZlSW5pdGlhbFZpZXdwb3J0TW9kZSgpIHsKICAgICAgaWYgKHR5cGVvZiB0aGlzLmluaXRpYWxab29tID09PSAibnVtYmVyIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gImN1c3RvbSI7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmluaXRpYWxab29tLCB0cnVlKTsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS13aWR0aCIpIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJwYWdlLXdpZHRoIjsKICAgICAgfSBlbHNlIGlmICh0aGlzLmluaXRpYWxab29tID09PSAicGFnZS1maXQiIHx8IHRoaXMuaW5pdGlhbFpvb20gPT09ICJhdXRvIikgewogICAgICAgIHRoaXMudmlld3BvcnRNb2RlID0gInBhZ2UtZml0IjsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnZpZXdwb3J0TW9kZSA9ICJhdXRvIjsKICAgICAgfQogICAgICBpZiAodGhpcy52aWV3cG9ydE1vZGUgIT09ICJjdXN0b20iKSB7CiAgICAgICAgdGhpcy5jdXJyZW50Wm9vbSA9IDE7CiAgICAgIH0KICAgIH0KICAgIGNvbXB1dGVWaWV3cG9ydChwYWdlKSB7CiAgICAgIHRoaXMubWVhc3VyZVZpZXdwb3J0RGltZW5zaW9ucygpOwogICAgICBjb25zdCBiYXNlVmlld3BvcnQgPSBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IDEgfSk7CiAgICAgIGxldCBzY2FsZTsKICAgICAgc3dpdGNoICh0aGlzLnZpZXdwb3J0TW9kZSkgewogICAgICAgIGNhc2UgInBhZ2Utd2lkdGgiOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIHNjYWxlID0gYXZhaWxhYmxlV2lkdGggLyBiYXNlVmlld3BvcnQud2lkdGg7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAicGFnZS1maXQiOgogICAgICAgIGNhc2UgImF1dG8iOiB7CiAgICAgICAgICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLndpZHRoIHx8IGJhc2VWaWV3cG9ydC53aWR0aDsKICAgICAgICAgIGNvbnN0IGF2YWlsYWJsZUhlaWdodCA9IHRoaXMudmlld3BvcnREaW1lbnNpb25zLmhlaWdodCB8fCBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgY29uc3Qgd2lkdGhTY2FsZSA9IGF2YWlsYWJsZVdpZHRoIC8gYmFzZVZpZXdwb3J0LndpZHRoOwogICAgICAgICAgY29uc3QgaGVpZ2h0U2NhbGUgPSBhdmFpbGFibGVIZWlnaHQgLyBiYXNlVmlld3BvcnQuaGVpZ2h0OwogICAgICAgICAgc2NhbGUgPSBNYXRoLm1pbih3aWR0aFNjYWxlLCBoZWlnaHRTY2FsZSk7CiAgICAgICAgICBicmVhazsKICAgICAgICB9CiAgICAgICAgY2FzZSAiY3VzdG9tIjoKICAgICAgICBkZWZhdWx0OiB7CiAgICAgICAgICBzY2FsZSA9IHRoaXMubm9ybWFsaXplWm9vbSh0aGlzLmN1cnJlbnRab29tIHx8IDEsIGZhbHNlKTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgfQogICAgICBpZiAoIU51bWJlci5pc0Zpbml0ZShzY2FsZSkgfHwgc2NhbGUgPD0gMCkgewogICAgICAgIHNjYWxlID0gMTsKICAgICAgfQogICAgICBjb25zdCBjbGFtcGVkU2NhbGUgPSB0aGlzLnZpZXdwb3J0TW9kZSA9PT0gImN1c3RvbSIgPyB0aGlzLm5vcm1hbGl6ZVpvb20oc2NhbGUsIHRydWUpIDogdGhpcy5ub3JtYWxpemVab29tKHNjYWxlLCBmYWxzZSk7CiAgICAgIGlmICh0aGlzLnZpZXdwb3J0TW9kZSAhPT0gImN1c3RvbSIpIHsKICAgICAgICB0aGlzLmN1cnJlbnRab29tID0gY2xhbXBlZFNjYWxlOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlLmdldFZpZXdwb3J0KHsgc2NhbGU6IGNsYW1wZWRTY2FsZSB9KTsKICAgIH0KICAgIG5vcm1hbGl6ZVpvb20odmFsdWUyLCBjbGFtcFRvTWFudWFsUmFuZ2UpIHsKICAgICAgY29uc3QgbWluMyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01JTl9aT09NIDogdGhpcy5BQlNPTFVURV9NSU5fWk9PTTsKICAgICAgY29uc3QgbWF4MyA9IGNsYW1wVG9NYW51YWxSYW5nZSA/IHRoaXMuTUFOVUFMX01BWF9aT09NIDogdGhpcy5BQlNPTFVURV9NQVhfWk9PTTsKICAgICAgcmV0dXJuIE1hdGgubWluKE1hdGgubWF4KHZhbHVlMiwgbWluMyksIG1heDMpOwogICAgfQogICAgYXN5bmMgY2xlYW51cERvY3VtZW50KCkgewogICAgICBpZiAodGhpcy5yZW5kZXJBYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnJlbmRlckFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICAgIHRoaXMucmVuZGVyQWJvcnRDb250cm9sbGVyID0gbnVsbDsKICAgICAgfQogICAgICBpZiAodGhpcy5jdXJyZW50UmVuZGVyUHJvbWlzZSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICBhd2FpdCB0aGlzLmN1cnJlbnRSZW5kZXJQcm9taXNlOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICAgIHRoaXMuY3VycmVudFJlbmRlclByb21pc2UgPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMuY3VycmVudFJlbmRlclRhc2sgPSBudWxsOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5mb3JFYWNoKCh0YXNrKSA9PiB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRhc2suY2FuY2VsKCk7CiAgICAgICAgfSBjYXRjaCAoZXJyb3IpIHsKICAgICAgICB9CiAgICAgIH0pOwogICAgICB0aGlzLnBhZ2VSZW5kZXJUYXNrcy5jbGVhcigpOwogICAgICBmb3IgKGNvbnN0IHRhc2sgb2YgdGhpcy50aHVtYm5haWxSZW5kZXJUYXNrcyB8fCBbXSkgewogICAgICAgIHRyeSB7CiAgICAgICAgICB0YXNrLmNhbmNlbCgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMudGh1bWJuYWlsUmVuZGVyVGFza3MgPSBbXTsKICAgICAgdGhpcy5yZW5kZXJTdGF0ZSA9ICJpZGxlIjsKICAgICAgdGhpcy5wYWdlUmVuZGVyaW5nID0gZmFsc2U7CiAgICAgIHRoaXMucGFnZU51bVBlbmRpbmcgPSBudWxsOwogICAgICB0aGlzLnRodW1ibmFpbERhdGEgPSBbXTsKICAgICAgdGhpcy5wYWdlRGF0YSA9IFtdOwogICAgICB0aGlzLmRvY3VtZW50SWQgPSAiIjsKICAgICAgaWYgKHRoaXMuY2FudmFzICYmIHRoaXMuY3R4KSB7CiAgICAgICAgdGhpcy5jdHguY2xlYXJSZWN0KDAsIDAsIHRoaXMuY2FudmFzLndpZHRoLCB0aGlzLmNhbnZhcy5oZWlnaHQpOwogICAgICB9CiAgICAgIGlmICh0aGlzLnBkZkRvY3VtZW50KSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIHRoaXMucGRmRG9jdW1lbnQuZGVzdHJveSgpOwogICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7CiAgICAgICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZXN0cm95aW5nIFBERiBkb2N1bWVudDoiLCBlcnJvcik7CiAgICAgICAgfQogICAgICB9CiAgICAgIHRoaXMucGRmRG9jdW1lbnQgPSBudWxsOwogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQZGZWaWV3ZXIyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIF9fZXNEZWNvcmF0ZTcwID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVtb1ZpZXdEYXNoYm9hcmQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZW1vLXZpZXctZGFzaGJvYXJkIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld0Rhc2hib2FyZDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9fZXNEZWNvcmF0ZTcwKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVtb1ZpZXdEYXNoYm9hcmQyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgIH0KICAgICAgaDEgewogICAgICAgIG1hcmdpbjogMCAwIDIwcHggMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwMDAiLCAiI2ZmZiIpfTsKICAgICAgfQogICAgICBkZWVzLXN0YXRzZ3JpZCB7CiAgICAgICAgbWFyZ2luLXRvcDogMjBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgIHN0YXRzVGlsZXMgPSBbCiAgICAgIHsKICAgICAgICBpZDogInVzZXJzIiwKICAgICAgICB0aXRsZTogIkFjdGl2ZSBVc2VycyIsCiAgICAgICAgdmFsdWU6IDEyMzQsCiAgICAgICAgdHlwZTogIm51bWJlciIsCiAgICAgICAgaWNvbjogImZhVXNlcnMiLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzE1JSBmcm9tIGxhc3Qgd2VlayIsCiAgICAgICAgY29sb3I6ICIjMjJjNTVlIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJwYWdldmlld3MiLAogICAgICAgIHRpdGxlOiAiUGFnZSBWaWV3cyIsCiAgICAgICAgdmFsdWU6IDU2NzAwLAogICAgICAgIHR5cGU6ICJudW1iZXIiLAogICAgICAgIGljb246ICJmYUV5ZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICI1Ni43ayB0b3RhbCB2aWV3cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJ1cHRpbWUiLAogICAgICAgIHRpdGxlOiAiU3lzdGVtIFVwdGltZSIsCiAgICAgICAgdmFsdWU6IDg5LAogICAgICAgIHVuaXQ6ICIlIiwKICAgICAgICB0eXBlOiAiZ2F1Z2UiLAogICAgICAgIGljb246ICJmYVNlcnZlciIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDMwIGRheXMiLAogICAgICAgIGNvbG9yOiAiIzEwYjk4MSIsCiAgICAgICAgZ2F1Z2VPcHRpb25zOiB7CiAgICAgICAgICBtaW46IDAsCiAgICAgICAgICBtYXg6IDEwMCwKICAgICAgICAgIHRocmVzaG9sZHM6IFsKICAgICAgICAgICAgeyB2YWx1ZTogODAsIGNvbG9yOiAiI2VmNDQ0NCIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogOTAsIGNvbG9yOiAiI2Y1OWUwYiIgfSwKICAgICAgICAgICAgeyB2YWx1ZTogMTAwLCBjb2xvcjogIiMxMGI5ODEiIH0KICAgICAgICAgIF0KICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogInJlc3BvbnNlIiwKICAgICAgICB0aXRsZTogIkF2ZyBSZXNwb25zZSBUaW1lIiwKICAgICAgICB2YWx1ZTogMy4yLAogICAgICAgIHVuaXQ6ICJzIiwKICAgICAgICB0eXBlOiAibnVtYmVyIiwKICAgICAgICBpY29uOiAiZmFDbG9jayIsCiAgICAgICAgZGVzY3JpcHRpb246ICItMC41cyBpbXByb3ZlbWVudCIsCiAgICAgICAgY29sb3I6ICIjZjU5ZTBiIgogICAgICB9LAogICAgICB7CiAgICAgICAgaWQ6ICJyZXZlbnVlIiwKICAgICAgICB0aXRsZTogIk1vbnRobHkgUmV2ZW51ZSIsCiAgICAgICAgdmFsdWU6IDQ4NTIwLAogICAgICAgIHVuaXQ6ICIkIiwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYURvbGxhclNpZ24iLAogICAgICAgIGRlc2NyaXB0aW9uOiAiKzguMiUgZ3Jvd3RoIiwKICAgICAgICBjb2xvcjogIiMyMmM1NWUiLAogICAgICAgIHRyZW5kRGF0YTogWzM1ZTMsIDM4ZTMsIDM3NTAwLCA0MWUzLCAzOTgwMCwgNDJlMywgNDQxMDAsIDQzMjAwLCA0NTYwMCwgNDcxMDAsIDQ2ODAwLCA0ODUyMF0KICAgICAgfSwKICAgICAgewogICAgICAgIGlkOiAidHJhZmZpYyIsCiAgICAgICAgdGl0bGU6ICJUcmFmZmljIFRyZW5kIiwKICAgICAgICB2YWx1ZTogMTY4MCwKICAgICAgICB0eXBlOiAidHJlbmQiLAogICAgICAgIGljb246ICJmYUNoYXJ0TGluZSIsCiAgICAgICAgZGVzY3JpcHRpb246ICJMYXN0IDcgZGF5cyIsCiAgICAgICAgY29sb3I6ICIjM2I4MmY2IiwKICAgICAgICB0cmVuZERhdGE6IFsxMjAwLCAxMzUwLCAxMTAwLCAxNDUwLCAxNjAwLCAxNTUwLCAxNjgwXQogICAgICB9CiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5EYXNoYm9hcmQ8L2gxPgogICAgICA8cD5XZWxjb21lIHRvIHlvdXIgYXBwbGljYXRpb24gZGFzaGJvYXJkLiBIZXJlJ3MgYW4gb3ZlcnZpZXcgb2YgeW91ciBtZXRyaWNzOjwvcD4KICAgICAgPGRlZXMtc3RhdHNncmlkCiAgICAgICAgLnRpbGVzPSR7dGhpcy5zdGF0c1RpbGVzfQogICAgICAgIEB0aWxlLWFjdGlvbj0keyhlMTEpID0+IHsKICAgICAgICBjb25zb2xlLmxvZygiVGlsZSBhY3Rpb246IiwgZTExLmRldGFpbCk7CiAgICAgIH19CiAgICAgID48L2RlZXMtc3RhdHNncmlkPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3RGFzaGJvYXJkMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld0FuYWx5dGljcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlbW8tdmlldy1hbmFseXRpY3MiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgdmFyIERlbW9WaWV3QW5hbHl0aWNzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld0FuYWx5dGljczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgfQogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiAwIDAgMjBweCAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5BbmFseXRpY3M8L2gxPgogICAgICA8cD5UaGlzIGlzIHRoZSBhbmFseXRpY3Mgdmlldy4gWW91IGNhbiBhZGQgY2hhcnRzIGFuZCBtZXRyaWNzIGhlcmUuPC9wPgogICAgYDsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzEoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlbW9WaWV3QW5hbHl0aWNzMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CnZhciBEZW1vVmlld1NldHRpbmdzID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVtby12aWV3LXNldHRpbmdzIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIHZhciBEZW1vVmlld1NldHRpbmdzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX19lc0RlY29yYXRlNzAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZW1vVmlld1NldHRpbmdzMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nOiA0MHB4OwogICAgICB9CiAgICAgIGgxIHsKICAgICAgICBtYXJnaW46IDAgMCAyMHB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gewogICAgICAgIG1hcmdpbi10b3A6IDMwcHg7CiAgICAgIH0KICAgICAgLnNldHRpbmdzLXNlY3Rpb24gaDIgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBtYXJnaW46IDAgMCAxNXB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNjY2MiKX07CiAgICAgIH0KICAgICAgLmhvcml6b250YWwtZm9ybS1zZWN0aW9uIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y1ZjVmNSIsICIjMWExYTFhIil9OwogICAgICAgIHBhZGRpbmc6IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG1hcmdpbjogMTVweCAwOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxoMT5TZXR0aW5nczwvaDE+CiAgICAgIDxwPkNvbmZpZ3VyZSB5b3VyIGFwcGxpY2F0aW9uIHNldHRpbmdzIGJlbG93OjwvcD4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5HZW5lcmFsIFNldHRpbmdzPC9oMj4KICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9ImFwcE5hbWUiIGxhYmVsPSJBcHBsaWNhdGlvbiBOYW1lIiB2YWx1ZT0iTXkgQXBwIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJhcGlFbmRwb2ludCIgbGFiZWw9IkFQSSBFbmRwb2ludCIgdmFsdWU9Imh0dHBzOi8vYXBpLmV4YW1wbGUuY29tIj48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgIDxkZWVzLWlucHV0LWRyb3Bkb3duCiAgICAgICAgICAgIGtleT0iZW52aXJvbm1lbnQiCiAgICAgICAgICAgIGxhYmVsPSJFbnZpcm9ubWVudCIKICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJEZXZlbG9wbWVudCIsIGtleTogImRldiIgfSwKICAgICAgICB7IG9wdGlvbjogIlN0YWdpbmciLCBrZXk6ICJzdGFnaW5nIiB9LAogICAgICAgIHsgb3B0aW9uOiAiUHJvZHVjdGlvbiIsIGtleTogInByb2QiIH0KICAgICAgXX0KICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJQcm9kdWN0aW9uIiwga2V5OiAicHJvZCIgfX0KICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9ImVuYWJsZU5vdGlmaWNhdGlvbnMiIGxhYmVsPSJFbmFibGUgTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iZW5hYmxlQW5hbHl0aWNzIiBsYWJlbD0iRW5hYmxlIEFuYWx5dGljcyIgdmFsdWU9ImZhbHNlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TYXZlIEdlbmVyYWwgU2V0dGluZ3M8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgIDwvZGl2PgogICAgICAKICAgICAgPGRpdiBjbGFzcz0ic2V0dGluZ3Mtc2VjdGlvbiI+CiAgICAgICAgPGgyPkRpc3BsYXkgUHJlZmVyZW5jZXM8L2gyPgogICAgICAgIDxkaXYgY2xhc3M9Imhvcml6b250YWwtZm9ybS1zZWN0aW9uIj4KICAgICAgICAgIDxwIHN0eWxlPSJtYXJnaW4tdG9wOiAwOyBtYXJnaW4tYm90dG9tOiAxNnB4OyI+UXVpY2sgZGlzcGxheSBzZXR0aW5ncyB1c2luZyBob3Jpem9udGFsIGxheW91dDo8L3A+CiAgICAgICAgICA8ZGVlcy1mb3JtIGhvcml6b250YWwtbGF5b3V0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93bgogICAgICAgICAgICAgIGtleT0idGhlbWUiCiAgICAgICAgICAgICAgbGFiZWw9IlRoZW1lIgogICAgICAgICAgICAgIC5lbmFibGVTZWFyY2g9JHtmYWxzZX0KICAgICAgICAgICAgICAub3B0aW9ucz0ke1sKICAgICAgICB7IG9wdGlvbjogIkxpZ2h0Iiwga2V5OiAibGlnaHQiIH0sCiAgICAgICAgeyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfSwKICAgICAgICB7IG9wdGlvbjogIkF1dG8iLCBrZXk6ICJhdXRvIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJEYXJrIiwga2V5OiAiZGFyayIgfX0KICAgICAgICAgICAgPjwvZGVlcy1pbnB1dC1kcm9wZG93bj4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9Imxhbmd1YWdlIgogICAgICAgICAgICAgIGxhYmVsPSJMYW5ndWFnZSIKICAgICAgICAgICAgICAuZW5hYmxlU2VhcmNoPSR7ZmFsc2V9CiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgICAgeyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH0sCiAgICAgICAgeyBvcHRpb246ICJHZXJtYW4iLCBrZXk6ICJkZSIgfSwKICAgICAgICB7IG9wdGlvbjogIlNwYW5pc2giLCBrZXk6ICJlcyIgfSwKICAgICAgICB7IG9wdGlvbjogIkZyZW5jaCIsIGtleTogImZyIiB9CiAgICAgIF19CiAgICAgICAgICAgICAgLnNlbGVjdGVkT3B0aW9uPSR7eyBvcHRpb246ICJFbmdsaXNoIiwga2V5OiAiZW4iIH19CiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0iY29tcGFjdE1vZGUiIGxhYmVsPSJDb21wYWN0IE1vZGUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgCiAgICAgIDxkaXYgY2xhc3M9InNldHRpbmdzLXNlY3Rpb24iPgogICAgICAgIDxoMj5Ob3RpZmljYXRpb24gU2V0dGluZ3M8L2gyPgogICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1yYWRpb2dyb3VwCiAgICAgICAgICAgIC5sYWJlbD0keyJFbWFpbCBGcmVxdWVuY3kifQogICAgICAgICAgICAub3B0aW9ucz0ke1siUmVhbC10aW1lIiwgIkRhaWx5IERpZ2VzdCIsICJXZWVrbHkgU3VtbWFyeSIsICJOZXZlciJdfQogICAgICAgICAgICAuc2VsZWN0ZWRPcHRpb249JHsiUmVhbC10aW1lIn0KICAgICAgICAgICAgLmtleT0keyJlbWFpbEZyZXF1ZW5jeSJ9CiAgICAgICAgICA+PC9kZWVzLWlucHV0LXJhZGlvZ3JvdXA+CiAgICAgICAgICA8ZGVlcy1pbnB1dC1jaGVja2JveCBrZXk9InB1c2hOb3RpZmljYXRpb25zIiBsYWJlbD0iRW5hYmxlIFB1c2ggTm90aWZpY2F0aW9ucyIgdmFsdWU9InRydWUiPjwvZGVlcy1pbnB1dC1jaGVja2JveD4KICAgICAgICAgIDxkZWVzLWlucHV0LWNoZWNrYm94IGtleT0ic291bmRBbGVydHMiIGxhYmVsPSJQbGF5IFNvdW5kIGZvciBBbGVydHMiIHZhbHVlPSJ0cnVlIj48L2RlZXMtaW5wdXQtY2hlY2tib3g+CiAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5VcGRhdGUgTm90aWZpY2F0aW9uczwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVtb1ZpZXdTZXR0aW5nczIgPSBfY2xhc3NUaGlzOwp9KSgpOwp2YXIgZGVtb0Z1bmM0MiA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1hcHBkYXNoCiAgICAgIG5hbWU9Ik15IEFwcGxpY2F0aW9uIgogICAgICB0ZXJtaW5hbFNldHVwQ29tbWFuZD0iZWNobyAnV2VsY29tZSB0byB0aGUgdGVybWluYWwhJyIKICAgICAgLnZpZXdUYWJzPSR7WwogIHsKICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgaWNvbk5hbWU6ICJsdWNpZGU6aG9tZSIsCiAgICBlbGVtZW50OiBEZW1vVmlld0Rhc2hib2FyZAogIH0sCiAgewogICAgbmFtZTogIkFuYWx5dGljcyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgZWxlbWVudDogRGVtb1ZpZXdBbmFseXRpY3MKICB9LAogIHsKICAgIG5hbWU6ICJTZXR0aW5ncyIsCiAgICBpY29uTmFtZTogImx1Y2lkZTpzZXR0aW5ncyIsCiAgICBlbGVtZW50OiBEZW1vVmlld1NldHRpbmdzCiAgfQpdfQogICAgICBAbG9nb3V0PSR7KCkgPT4gewogIGNvbnNvbGUubG9nKCJMb2dvdXQgZXZlbnQgdHJpZ2dlcmVkIik7CiAgYWxlcnQoIkxvZ291dCBjbGlja2VkISIpOwp9fQogICAgICBAdmlldy1zZWxlY3Q9JHsoZTExKSA9PiB7CiAgY29uc29sZS5sb2coIlZpZXcgc2VsZWN0ZWQ6IiwgZTExLmRldGFpbC52aWV3Lm5hbWUpOwp9fQogICAgPjwvZGVlcy1zaW1wbGUtYXBwZGFzaD4KICA8L2Rpdj4KYDsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtYXBwZGFzaC9kZWVzLXNpbXBsZS1hcHBkYXNoLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGVlc19pY29uKCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcxID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MiA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUFwcERhc2ggPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNpbXBsZS1hcHBkYXNoIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbmFtZV9kZWNvcmF0b3JzOwogIGxldCBfbmFtZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX25hbWVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2RlY29yYXRvcnM7CiAgbGV0IF92aWV3VGFic19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzOwogIGxldCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFZpZXdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1NpbXBsZUFwcERhc2gyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfdmlld1RhYnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEFycmF5IH0pXTsKICAgICAgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfc2VsZWN0ZWRWaWV3X2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF9uYW1lX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm5hbWUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm5hbWUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubmFtZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubmFtZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9uYW1lX2luaXRpYWxpemVycywgX25hbWVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MSh0aGlzLCBudWxsLCBfdmlld1RhYnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidmlld1RhYnMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInZpZXdUYWJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnZpZXdUYWJzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai52aWV3VGFicyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF92aWV3VGFic19pbml0aWFsaXplcnMsIF92aWV3VGFic19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTcxKHRoaXMsIG51bGwsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0ZXJtaW5hbFNldHVwQ29tbWFuZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGVybWluYWxTZXR1cENvbW1hbmQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGVybWluYWxTZXR1cENvbW1hbmQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnRlcm1pbmFsU2V0dXBDb21tYW5kID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2luaXRpYWxpemVycywgX3Rlcm1pbmFsU2V0dXBDb21tYW5kX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEodGhpcywgbnVsbCwgX3NlbGVjdGVkVmlld19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFZpZXciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkVmlldyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFZpZXcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkVmlldyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFZpZXdfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlQXBwRGFzaDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNDI7CiAgICBzdGF0aWMgZGVtb0dyb3VwID0gIlNpbXBsZSI7CiAgICAjbmFtZV9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfbmFtZV9pbml0aWFsaXplcnMsICJBcHBsaWNhdGlvbiBEYXNoYm9hcmQiKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdmlld1RhYnNfaW5pdGlhbGl6ZXJzLCBbXSkpOwogICAgZ2V0IHZpZXdUYWJzKCkgewogICAgICByZXR1cm4gdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB2aWV3VGFicyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdmlld1RhYnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN0ZXJtaW5hbFNldHVwQ29tbWFuZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3ZpZXdUYWJzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfdGVybWluYWxTZXR1cENvbW1hbmRfaW5pdGlhbGl6ZXJzLCBgZWNobyAiVGVybWluYWwgcmVhZHkiYCkpOwogICAgZ2V0IHRlcm1pbmFsU2V0dXBDb21tYW5kKCkgewogICAgICByZXR1cm4gdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXJtaW5hbFNldHVwQ29tbWFuZCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGVybWluYWxTZXR1cENvbW1hbmRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZFZpZXdfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczcyKHRoaXMsIF90ZXJtaW5hbFNldHVwQ29tbWFuZF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzIodGhpcywgX3NlbGVjdGVkVmlld19pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHNlbGVjdGVkVmlldygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkVmlld19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNlbGVjdGVkVmlldyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2VsZWN0ZWRWaWV3X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLm1haW5jb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiAwcHg7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAuYXBwYmFyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgd2lkdGg6IDI0MHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5OSUpIiwgImhzbCgwIDAlIDclKSIpfTsKICAgICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBmb250LWZhbWlseTogJ0dlaXN0IFNhbnMnLCBzYW5zLXNlcmlmOwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLXJvd3M6IGF1dG8gMWZyIG1pbi1jb250ZW50OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMjBweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgOTElKSIsICJoc2woMCAwJSAxMyUpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEycHg7CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDM2cHg7CiAgICAgICAgaGVpZ2h0OiAzNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCgxMzVkZWcsIGhzbCgyMTUgMjAlIDk1JSkgMCUsIGhzbCgyMTUgMjAlIDkwJSkgMTAwJSkiLCAibGluZWFyLWdyYWRpZW50KDEzNWRlZywgaHNsKDIxNSAyMCUgMTglKSAwJSwgaHNsKDIxNSAyMCUgMTQlKSAxMDAlKSIpfTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMDUpLCBpbnNldCAwIDFweCAwIHJnYigyNTUgMjU1IDI1NSAvIDAuNSkiLCAiMCAxcHggMnB4IHJnYigwIDAgMCAvIDAuMiksIGluc2V0IDAgMXB4IDAgcmdiKDI1NSAyNTUgMjU1IC8gMC4wNSkiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkZXItaWNvbi13cmFwcGVyIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIxNSAyMCUgNDAlKSIsICJoc2woMjE1IDIwJSA3MCUpIil9OwogICAgICB9CgogICAgICAuYXBwTmFtZSB7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXIgewogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgc2Nyb2xsYmFyLXdpZHRoOiB0aGluOwogICAgICAgIHNjcm9sbGJhci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg1JSkiLCAiaHNsKDAgMCUgMjAlKSIpfSB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXIgewogICAgICAgIHdpZHRoOiA2cHg7CiAgICAgIH0KCiAgICAgIC52aWV3VGFicy1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRyYWNrIHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgfQoKICAgICAgLnZpZXdUYWJzLWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA4NSUpIiwgImhzbCgwIDAlIDIwJSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAudmlld1RhYnMtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10aHVtYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDc1JSkiLCAiaHNsKDAgMCUgMzAlKSIpfTsKICAgICAgfQoKICAgICAgLnNlY3Rpb24tbGFiZWwgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIHRleHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IDAuMDVlbTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDUwJSkiLCAiaHNsKDAgMCUgNTAlKSIpfTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweCA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNHB4OwogICAgICB9CgogICAgICAudmlld1RhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDJweDsKICAgICAgfQoKICAgICAgLnZpZXdUYWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDQwJSkiLCAiaHNsKDAgMCUgNjUlKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAudmlld1RhYjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDAlIC8gMC4wNCkiLCAiaHNsKDAgMCUgMTAwJSAvIDAuMDUpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTUlKSIsICJoc2woMCAwJSA5MCUpIil9OwogICAgICB9CgogICAgICAudmlld1RhYjphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAwJSAvIDAuMDYpIiwgImhzbCgwIDAlIDEwMCUgLyAwLjA3KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDAuOTkpOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDk1JSkiLCAiaHNsKDIxNSAyMCUgMTUlKSIpfTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgyMTUgMjUlIDMwJSkiLCAiaHNsKDIxNSAyNSUgODUlKSIpfTsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAudmlld1RhYi5zZWxlY3RlZDo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgbGVmdDogMDsKICAgICAgICB0b3A6IDhweDsKICAgICAgICBib3R0b206IDhweDsKICAgICAgICB3aWR0aDogM3B4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAgMnB4IDJweCAwOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA1MCUpIiwgImhzbCgyMTUgNzAlIDYwJSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIGRlZXMtaWNvbiB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTU7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgIH0KCiAgICAgIC52aWV3VGFiOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC43NTsKICAgICAgfQoKICAgICAgLnZpZXdUYWIuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBvcGFjaXR5OiAwLjk7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMjE1IDcwJSA0NSUpIiwgImhzbCgyMTUgNzAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC52aWV3VGFiIHNwYW4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYXBwQWN0aW9ucyB7CiAgICAgICAgcGFkZGluZzogMTJweCA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5MSUpIiwgImhzbCgwIDAlIDEzJSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDEwcHg7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA0MCUpIiwgImhzbCgwIDAlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCA4NCUgNjAlIC8gMC4wOCkiLCAiaHNsKDAgODQlIDYwJSAvIDAuMTIpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hY3Rpb24gZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC42OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1cyBlYXNlOwogICAgICB9CgogICAgICAuYWN0aW9uOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgb3BhY2l0eTogMC45OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgODQlIDQ1JSkiLCAiaHNsKDAgODQlIDY1JSkiKX07CiAgICAgIH0KCiAgICAgIC5hcHBjb250ZW50IHsKICAgICAgICB6LWluZGV4OiAxOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDBweDsKICAgICAgICByaWdodDogMHB4OwogICAgICAgIGhlaWdodDogY2FsYygxMDAlIC0gMjRweCk7CiAgICAgICAgYm90dG9tOiAyNHB4OwogICAgICAgIHdpZHRoOiBjYWxjKDEwMCUgLSAyNDBweCk7CiAgICAgICAgb3ZlcmZsb3c6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDk3JSkiLCAiaHNsKDAgMCUgNSUpIil9OwogICAgICAgIG92ZXJzY3JvbGwtYmVoYXZpb3I6IGNvbnRhaW47CiAgICAgIH0KCiAgICAgIC5jb250cm9sYmFyIHsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgYm90dG9tOiAwcHg7CiAgICAgICAgbGVmdDogMHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMjRweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDIyMCAxMyUgMTglKSIsICJoc2woMjIwIDEzJSAxMiUpIil9OwogICAgICAgIHotaW5kZXg6IDI7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogMC4wMWVtOwogICAgICB9CgogICAgICAuY29udHJvbCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDAgMTJweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgICAgY29sb3I6IGhzbCgwIDAlIDcwJSk7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBoc2woMCAwJSAxMDAlIC8gMC4wOCk7CiAgICAgIH0KCiAgICAgIC5jb250cm9sOmZpcnN0LWNoaWxkIHsKICAgICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgfQoKICAgICAgLmNvbnRyb2w6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IGhzbCgwIDAlIDEwMCUgLyAwLjA2KTsKICAgICAgICBjb2xvcjogaHNsKDAgMCUgOTUlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jb250cm9sLnN0YXR1cy1jb25uZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogaHNsKDE0MiA3MCUgNTAlKTsKICAgICAgfQoKICAgICAgLmNvbnRyb2wuc3RhdHVzLXRlcm1pbmFsIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6IGhzbCg0NSA5MCUgNTUlKTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBiYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXItaWNvbi13cmFwcGVyIj4KICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6bGF5b3V0R3JpZCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcE5hbWUiPiR7dGhpcy5uYW1lfTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3VGFicy1jb250YWluZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWxhYmVsIj5OYXZpZ2F0aW9uPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InZpZXdUYWJzIj4KICAgICAgICAgICAgICAke3RoaXMudmlld1RhYnMubWFwKCh2aWV3KSA9PiBiMmAKICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJ2aWV3VGFiICR7dGhpcy5zZWxlY3RlZFZpZXcgPT09IHZpZXcgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMubG9hZFZpZXcodmlldyl9CiAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAke3ZpZXcuaWNvbk5hbWUgPyBiMmAKICAgICAgICAgICAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7dmlldy5pY29uTmFtZS5pbmNsdWRlcygiOiIpID8gdmlldy5pY29uTmFtZSA6IGBsdWNpZGU6JHt2aWV3Lmljb25OYW1lfWB9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgIDogYjJgCiAgICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6ZmlsZSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgIDxzcGFuPiR7dmlldy5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICBgKX0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImFwcEFjdGlvbnMiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iIEBjbGljaz0keygpID0+IHsKICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2dvdXQiLCB7IGJ1YmJsZXM6IHRydWUsIGNvbXBvc2VkOiB0cnVlIH0pKTsKICAgICAgfX0+CiAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0iJHsibHVjaWRlOmxvZ091dCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICA8c3Bhbj5TaWduIG91dDwvc3Bhbj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhcHBjb250ZW50Ij4KICAgICAgICAgIDwhLS0gQ29udGVudCBnb2VzIGhlcmUgLS0+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iY29udHJvbGJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy1jb25uZWN0ZWQiPgogICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSIkeyJsdWNpZGU6d2lmaSJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+Q29ubmVjdGVkPC9zcGFuPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJjb250cm9sIHN0YXR1cy10ZXJtaW5hbCIgQGNsaWNrPSR7dGhpcy5sYXVuY2hUZXJtaW5hbH0+CiAgICAgICAgICAgIDxkZWVzLWljb24gLmljb249IiR7Imx1Y2lkZTp0ZXJtaW5hbCJ9Ij48L2RlZXMtaWNvbj4KICAgICAgICAgICAgPHNwYW4+VGVybWluYWw8L3NwYW4+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKF9jaGFuZ2VkUHJvcGVydGllcykgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBzdXBlci5maXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKTsKICAgICAgaWYgKHRoaXMudmlld1RhYnMgJiYgdGhpcy52aWV3VGFicy5sZW5ndGggPiAwKSB7CiAgICAgICAgYXdhaXQgdGhpcy5sb2FkVmlldyh0aGlzLnZpZXdUYWJzWzBdKTsKICAgICAgfQogICAgfQogICAgY3VycmVudFRlcm1pbmFsID0gX19ydW5Jbml0aWFsaXplcnM3Mih0aGlzLCBfc2VsZWN0ZWRWaWV3X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIGFzeW5jIGxhdW5jaFRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICBhd2FpdCB0aGlzLmNsb3NlVGVybWluYWwoKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbWFpbmNvbnRhaW5lciA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpOwogICAgICBjb25zdCB7IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDogRGVlc1dvcmtzcGFjZVRlcm1pbmFsMiB9ID0gYXdhaXQgUHJvbWlzZS5yZXNvbHZlKCkudGhlbigoKSA9PiAoaW5pdF9kZWVzX3dvcmtzcGFjZV90ZXJtaW5hbCgpLCBkZWVzX3dvcmtzcGFjZV90ZXJtaW5hbF9leHBvcnRzKSk7CiAgICAgIGNvbnN0IHRlcm1pbmFsID0gbmV3IERlZXNXb3Jrc3BhY2VUZXJtaW5hbDIoKTsKICAgICAgdGVybWluYWwuc2V0dXBDb21tYW5kID0gdGhpcy50ZXJtaW5hbFNldHVwQ29tbWFuZDsKICAgICAgdGhpcy5jdXJyZW50VGVybWluYWwgPSB0ZXJtaW5hbDsKICAgICAgbWFpbmNvbnRhaW5lci5hcHBlbmRDaGlsZCh0ZXJtaW5hbCk7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnBvc2l0aW9uID0gImFic29sdXRlIjsKICAgICAgdGVybWluYWwuc3R5bGUuekluZGV4ID0gIjEwIjsKICAgICAgdGVybWluYWwuc3R5bGUudG9wID0gIjBweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLmxlZnQgPSAiMjQwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5yaWdodCA9ICIwcHgiOwogICAgICB0ZXJtaW5hbC5zdHlsZS5ib3R0b20gPSAiMjRweCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICB0ZXJtaW5hbC5zdHlsZS50cmFuc2l0aW9uID0gImFsbCAwLjI1cyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpIjsKICAgICAgdGVybWluYWwuc3R5bGUuYm94U2hhZG93ID0gIjAgMjVweCA1MHB4IC0xMnB4IHJnYigwIDAgMCAvIDAuNSksIDAgMCAwIDFweCByZ2IoMjU1IDI1NSAyNTUgLyAwLjA1KSI7CiAgICAgIHRlcm1pbmFsLnN0eWxlLm1heFdpZHRoID0gYGNhbGMoJHttYWluY29udGFpbmVyLmNsaWVudFdpZHRofXB4IC0yNDBweClgOwogICAgICB0ZXJtaW5hbC5zdHlsZS5tYXhIZWlnaHQgPSBgY2FsYygke21haW5jb250YWluZXIuY2xpZW50SGVpZ2h0fXB4IC0gMjRweClgOwogICAgICB0ZXJtaW5hbC5hZGRFdmVudExpc3RlbmVyKCJjbG9zZSIsICgpID0+IHRoaXMuY2xvc2VUZXJtaW5hbCgpKTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigwKTsKICAgICAgdGVybWluYWwuc3R5bGUub3BhY2l0eSA9ICIxIjsKICAgICAgdGVybWluYWwuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMCkgc2NhbGUoMSkiOwogICAgICByZXR1cm4gdGVybWluYWw7CiAgICB9CiAgICBhc3luYyBjbG9zZVRlcm1pbmFsKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBpZiAodGhpcy5jdXJyZW50VGVybWluYWwpIHsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5zdHlsZS5vcGFjaXR5ID0gIjAiOwogICAgICAgIHRoaXMuY3VycmVudFRlcm1pbmFsLnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDhweCkgc2NhbGUoMC45OSkiOwogICAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMjUwKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbC5yZW1vdmUoKTsKICAgICAgICB0aGlzLmN1cnJlbnRUZXJtaW5hbCA9IG51bGw7CiAgICAgIH0KICAgIH0KICAgIGN1cnJlbnRWaWV3OwogICAgYXN5bmMgbG9hZFZpZXcodmlld0FyZykgewogICAgICBjb25zdCBhcHBjb250ZW50ID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5hcHBjb250ZW50Iik7CiAgICAgIGNvbnN0IHZpZXcgPSBuZXcgdmlld0FyZy5lbGVtZW50KCk7CiAgICAgIGlmICh0aGlzLmN1cnJlbnRWaWV3KSB7CiAgICAgICAgdGhpcy5jdXJyZW50Vmlldy5yZW1vdmUoKTsKICAgICAgfQogICAgICBhcHBjb250ZW50LmFwcGVuZENoaWxkKHZpZXcpOwogICAgICB0aGlzLmN1cnJlbnRWaWV3ID0gdmlldzsKICAgICAgdGhpcy5zZWxlY3RlZFZpZXcgPSB2aWV3QXJnOwogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJ2aWV3LXNlbGVjdCIsIHsKICAgICAgICBkZXRhaWw6IHsgdmlldzogdmlld0FyZyB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NpbXBsZUFwcERhc2gyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvMDBncm91cC1zaW1wbGUvZGVlcy1zaW1wbGUtbG9naW4vZGVlcy1zaW1wbGUtbG9naW4uZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0MyA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIGJvZHkgewogICAgICBtYXJnaW46IDA7CiAgICAgIHBhZGRpbmc6IDA7CiAgICB9CiAgICAuZGVtby1jb250YWluZXIgewogICAgICB3aWR0aDogMTAwJTsKICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMDsKICAgICAgbGVmdDogMDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW8tY29udGFpbmVyIj4KICAgIDxkZWVzLXNpbXBsZS1sb2dpbiAKICAgICAgbmFtZT0iTXkgQXBwbGljYXRpb24iCiAgICAgIEBsb2dpbj0keyhlMTEpID0+IHsKICBjb25zb2xlLmxvZygiTG9naW4gZXZlbnQgcmVjZWl2ZWQ6IiwgZTExLmRldGFpbCk7CiAgY29uc3QgbG9naW5EYXRhID0gZTExLmRldGFpbD8uZGF0YSB8fCBlMTEuZGV0YWlsOwogIGlmIChsb2dpbkRhdGE/LnVzZXJuYW1lICYmIGxvZ2luRGF0YT8ucGFzc3dvcmQpIHsKICAgIGFsZXJ0KGBMb2dpbiBhdHRlbXB0ZWQgd2l0aDoKVXNlcm5hbWU6ICR7bG9naW5EYXRhLnVzZXJuYW1lfQpQYXNzd29yZDogJHtsb2dpbkRhdGEucGFzc3dvcmR9YCk7CiAgfSBlbHNlIHsKICAgIGNvbnNvbGUuZXJyb3IoIkludmFsaWQgbG9naW4gZGF0YSBzdHJ1Y3R1cmU6IiwgZTExLmRldGFpbCk7CiAgfQp9fQogICAgPgogICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiA0MHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7Ij4KICAgICAgICA8aDE+V2VsY29tZSE8L2gxPgogICAgICAgIDxwPlRoaXMgaXMgdGhlIHNsb3R0ZWQgY29udGVudCB0aGF0IGFwcGVhcnMgYWZ0ZXIgbG9naW4uPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGVlcy1zaW1wbGUtbG9naW4+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzLzAwZ3JvdXAtc2ltcGxlL2RlZXMtc2ltcGxlLWxvZ2luL2RlZXMtc2ltcGxlLWxvZ2luLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTcyID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3MyA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NpbXBsZUxvZ2luID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1zaW1wbGUtbG9naW4iKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9uYW1lX2RlY29yYXRvcnM7CiAgbGV0IF9uYW1lX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbmFtZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU2ltcGxlTG9naW4yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbmFtZV9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU3Mih0aGlzLCBudWxsLCBfbmFtZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJuYW1lIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJuYW1lIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLm5hbWUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm5hbWUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfbmFtZV9pbml0aWFsaXplcnMsIF9uYW1lX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzIobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQzOwogICAgc3RhdGljIGRlbW9Hcm91cCA9ICJTaW1wbGUiOwogICAgI25hbWVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzModGhpcywgX25hbWVfaW5pdGlhbGl6ZXJzLCAiQXBwbGljYXRpb24iKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgbmFtZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI25hbWVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBuYW1lKHZhbHVlMikgewogICAgICB0aGlzLiNuYW1lX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMy45JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgfQoKICAgICAgLmxvZ2luQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgMTAwJSkiLCAiaHNsKDAgMCUgMy45JSkiKX07CiAgICAgIH0KCiAgICAgIC5zbG90Q29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgdHJhbnNpdGlvbjogb3BhY2l0eSAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5sb2dpbiB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LXdpZHRoOiAzNjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiAyNHB4OwogICAgICB9CgogICAgICAubG9naW4taGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBmb250LXNpemU6IDI0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBsZXR0ZXItc3BhY2luZzogLTAuMDI1ZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSA5JSkiLCAiaHNsKDAgMCUgOTglKSIpfTsKICAgICAgfQoKICAgICAgLnN1YmhlYWRlciB7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiaHNsKDAgMCUgNDUuMSUpIiwgImhzbCgwIDAlIDYzLjklKSIpfTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJoc2woMCAwJSAxMDAlKSIsICJoc2woMCAwJSA5JSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImhzbCgwIDAlIDg5LjglKSIsICJoc2woMCAwJSAxNC45JSkiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5sb2dpbi1jYXJkIGRlZXMtZm9ybSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGdhcDogMTZweDsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1pbnB1dC10ZXh0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgfQoKICAgICAgLmxvZ2luLWNhcmQgZGVlcy1mb3JtLXN1Ym1pdCB7CiAgICAgICAgbWFyZ2luLXRvcDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9ImxvZ2luQ29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbiI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2dpbi1oZWFkZXIiPgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkZXIiPlNpZ24gaW48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3ViaGVhZGVyIj5FbnRlciB5b3VyIGNyZWRlbnRpYWxzIHRvIGFjY2VzcyAke3RoaXMubmFtZX08L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0ibG9naW4tY2FyZCI+CiAgICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9InVzZXJuYW1lIiBsYWJlbD0iVXNlcm5hbWUiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJwYXNzd29yZCIgbGFiZWw9IlBhc3N3b3JkIiBpc1Bhc3N3b3JkQm9vbCByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5TaWduIGluPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2xvdENvbnRhaW5lciI+CiAgICAgICAgPHNsb3Q+PC9zbG90PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICBjb25zdCBmb3JtID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBpZiAoZm9ybSkgewogICAgICAgIGZvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoZXZlbnQpID0+IHsKICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvZ2luIiwgewogICAgICAgICAgICBkZXRhaWw6IGV2ZW50LmRldGFpbCwKICAgICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgIH0pKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgLyoqCiAgICAgKiBhbGxvd3Mgc3dpdGNoaW5nIHRvIHNsb3R0ZWQgY29udGVudAogICAgICovCiAgICBhc3luYyBzd2l0Y2hUb1Nsb3R0ZWRDb250ZW50KCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBsb2dpbkRpdiA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubG9naW4iKTsKICAgICAgY29uc3QgbG9naW5Db250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLmxvZ2luQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IHNsb3RDb250YWluZXJEaXYgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnNsb3RDb250YWluZXIiKTsKICAgICAgbG9naW5EaXYuc3R5bGUub3BhY2l0eSA9ICIwIjsKICAgICAgbG9naW5EaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMjBweCkiOwogICAgICBsb2dpbkNvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gIm5vbmUiOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLnRyYW5zZm9ybSA9ICJ0cmFuc2xhdGVZKDIwcHgpIjsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigzMDApOwogICAgICBzbG90Q29udGFpbmVyRGl2LnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIHNsb3RDb250YWluZXJEaXYuc3R5bGUudHJhbnNmb3JtID0gInRyYW5zbGF0ZVkoMHB4KSI7CiAgICAgIGF3YWl0IGRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMzAwKTsKICAgICAgc2xvdENvbnRhaW5lckRpdi5zdHlsZS5wb2ludGVyRXZlbnRzID0gImFsbCI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3Myh0aGlzLCBfbmFtZV9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczczKF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU2ltcGxlTG9naW4yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1hY3Rpb25iYXIvaW5kZXguanMKaW5pdF9kZWVzX2FjdGlvbmJhcigpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWJhZGdlL2RlZXMtYmFkZ2UuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM0NCA9ICgpID0+IGIyYAogIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGdhcDogOHB4OyBhbGlnbi1pdGVtczogY2VudGVyOyI+CiAgICA8ZGVlcy1iYWRnZSAudGV4dD0keyJEZWZhdWx0In0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsicHJpbWFyeSJ9IC50ZXh0PSR7IlByaW1hcnkifT48L2RlZXMtYmFkZ2U+CiAgICA8ZGVlcy1iYWRnZSAudHlwZT0keyJzdWNjZXNzIn0gLnRleHQ9JHsiU3VjY2VzcyJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7Indhcm5pbmcifSAudGV4dD0keyJXYXJuaW5nIn0+PC9kZWVzLWJhZGdlPgogICAgPGRlZXMtYmFkZ2UgLnR5cGU9JHsiZXJyb3IifSAudGV4dD0keyJFcnJvciJ9PjwvZGVlcy1iYWRnZT4KICAgIDxkZWVzLWJhZGdlIC50eXBlPSR7InByaW1hcnkifSAucm91bmRlZD0ke3RydWV9IC50ZXh0PSR7IlJvdW5kZWQifT48L2RlZXMtYmFkZ2U+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtYmFkZ2UvZGVlcy1iYWRnZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3MyA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzQgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNCYWRnZSA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtYmFkZ2UiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9kZWNvcmF0b3JzOwogIGxldCBfdGV4dF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3RleHRfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3JvdW5kZWRfZGVjb3JhdG9yczsKICBsZXQgX3JvdW5kZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNCYWRnZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfdGV4dF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3JvdW5kZWRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfX2VzRGVjb3JhdGU3Myh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzModGhpcywgbnVsbCwgX3RleHRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidGV4dCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAidGV4dCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai50ZXh0LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50ZXh0ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3RleHRfaW5pdGlhbGl6ZXJzLCBfdGV4dF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTczKHRoaXMsIG51bGwsIF9yb3VuZGVkX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJvdW5kZWQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInJvdW5kZWQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucm91bmRlZCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucm91bmRlZCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9yb3VuZGVkX2luaXRpYWxpemVycywgX3JvdW5kZWRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNCYWRnZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ0OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiZGVmYXVsdCIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NCh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsICIiKSk7CiAgICBnZXQgdGV4dCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3RleHRfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0ZXh0KHZhbHVlMikgewogICAgICB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzQodGhpcywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCByb3VuZGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jcm91bmRlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHJvdW5kZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI3JvdW5kZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc0KHRoaXMsIF9yb3VuZGVkX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgZG9tdG9vbHNfZWxlbWVudGJhc2ljX2V4cG9ydHMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMnB4IDhweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBsaW5lLWhlaWdodDogMS41OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICB9CgogICAgICAuYmFkZ2Uucm91bmRlZCB7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgfQoKICAgICAgLmJhZGdlLmRlZmF1bHQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjVmNWY1IiwgIiMzMzMiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNjY2MiKX07CiAgICAgIH0KCiAgICAgIC5iYWRnZS5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMDA1MGI5OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuYmFkZ2Uuc3VjY2VzcyB7CiAgICAgICAgYmFja2dyb3VuZDogIzJlN2QzMjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQoKICAgICAgLmJhZGdlLndhcm5pbmcgewogICAgICAgIGJhY2tncm91bmQ6ICNlZDZjMDI7CiAgICAgICAgY29sb3I6ICNmZmZmZmY7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5lcnJvciB7CiAgICAgICAgYmFja2dyb3VuZDogI2U0MDAyYjsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJiYWRnZSAke3RoaXMudHlwZX0gJHt0aGlzLnJvdW5kZWQgPyAicm91bmRlZCIgOiAiIn0iPgogICAgICAgICR7dGhpcy50ZXh0fQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQmFkZ2UyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1jaGlwcy9kZWVzLWNoaXBzLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDUgPSAoKSA9PiBiMmAKICA8c3R5bGU+CiAgICAuZGVtb0NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CiAgICAKICAgIC5zZWN0aW9uIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmZmZmYiLCAiIzE4MTgxYiIpfTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICBwYWRkaW5nOiAyNHB4OwogICAgICBib3gtc2hhZG93OiAwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpOwogICAgfQogICAgCiAgICAuc2VjdGlvbi10aXRsZSB7CiAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CiAgICAKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgIH0KICA8L3N0eWxlPgogIDxkaXYgY2xhc3M9ImRlbW9Db250YWluZXIiPgogICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPk5vbi1TZWxlY3RhYmxlIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkJhc2ljIGNoaXBzIHdpdGhvdXQgc2VsZWN0aW9uIGNhcGFiaWxpdHkuIFVzZSBmb3IgZGlzcGxheS1vbmx5IHRhZ3MuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ibm9uZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAic3RhdHVzIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJ0aWVyIiwgdmFsdWU6ICJQcmVtaXVtIiB9LAogIHsga2V5OiAicmVnaW9uIiwgdmFsdWU6ICJFVS1XZXN0IiB9LAogIHsga2V5OiAidHlwZSIsIHZhbHVlOiAiRW50ZXJwcmlzZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5TaW5nbGUgU2VsZWN0aW9uIENoaXBzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPkNsaWNrIHRvIHNlbGVjdCBvbmUgY2hpcCBhdCBhIHRpbWUuIFVzZWZ1bCBmb3IgZmlsdGVycyBhbmQgb3B0aW9ucy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJzaW5nbGUiCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImFsbCIsIHZhbHVlOiAiQWxsIFByb2plY3RzIiB9LAogIHsga2V5OiAiYWN0aXZlIiwgdmFsdWU6ICJBY3RpdmUiIH0sCiAgeyBrZXk6ICJhcmNoaXZlZCIsIHZhbHVlOiAiQXJjaGl2ZWQiIH0sCiAgeyBrZXk6ICJkcmFmdHMiLCB2YWx1ZTogIkRyYWZ0cyIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NdWx0aXBsZSBTZWxlY3Rpb24gQ2hpcHM8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+U2VsZWN0IG11bHRpcGxlIGNoaXBzIHNpbXVsdGFuZW91c2x5LiBHcmVhdCBmb3IgdGFnIHNlbGVjdGlvbi48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICAuc2VsZWN0YWJsZUNoaXBzPSR7WwogIHsga2V5OiAianMiLCB2YWx1ZTogIkphdmFTY3JpcHQiIH0sCiAgeyBrZXk6ICJ0cyIsIHZhbHVlOiAiVHlwZVNjcmlwdCIgfSwKICB7IGtleTogInJlYWN0IiwgdmFsdWU6ICJSZWFjdCIgfSwKICB7IGtleTogInZ1ZSIsIHZhbHVlOiAiVnVlIiB9LAogIHsga2V5OiAiYW5ndWxhciIsIHZhbHVlOiAiQW5ndWxhciIgfSwKICB7IGtleTogIm5vZGUiLCB2YWx1ZTogIk5vZGUuanMiIH0KXX0KICAgICAgPjwvZGVlcy1jaGlwcz4KICAgIDwvZGl2PgogICAgCiAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uIj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+UmVtb3ZhYmxlIENoaXBzIHdpdGggS2V5czwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj5DaGlwcyB3aXRoIHJlbW92ZSBidXR0b25zIGFuZCBrZXktdmFsdWUgcGFpcnMuIFBlcmZlY3QgZm9yIGR5bmFtaWMgbGlzdHMuPC9kaXY+CiAgICAgIDxkZWVzLWNoaXBzCiAgICAgICAgc2VsZWN0aW9uTW9kZT0ic2luZ2xlIgogICAgICAgIGNoaXBzQXJlUmVtb3ZhYmxlCiAgICAgICAgLnNlbGVjdGFibGVDaGlwcz0ke1sKICB7IGtleTogImVudiIsIHZhbHVlOiAiUHJvZHVjdGlvbiIgfSwKICB7IGtleTogInZlcnNpb24iLCB2YWx1ZTogIjIuNC4xIiB9LAogIHsga2V5OiAiYnJhbmNoIiwgdmFsdWU6ICJtYWluIiB9LAogIHsga2V5OiAiYXV0aG9yIiwgdmFsdWU6ICJKb2huIERvZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgICAKICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLXRpdGxlIj5NaXhlZCBDb250ZW50IEV4YW1wbGU8L2Rpdj4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+Q29tYmluaW5nIGRpZmZlcmVudCBjaGlwIHR5cGVzIGZvciBjb21wbGV4IFVJcy48L2Rpdj4KICAgICAgPGRlZXMtY2hpcHMKICAgICAgICBzZWxlY3Rpb25Nb2RlPSJtdWx0aXBsZSIKICAgICAgICBjaGlwc0FyZVJlbW92YWJsZQogICAgICAgIC5zZWxlY3RhYmxlQ2hpcHM9JHtbCiAgeyBrZXk6ICJwcmlvcml0eSIsIHZhbHVlOiAiSGlnaCIgfSwKICB7IGtleTogInN0YXR1cyIsIHZhbHVlOiAiSW4gUHJvZ3Jlc3MiIH0sCiAgeyBrZXk6ICJidWciLCB2YWx1ZTogIkJ1ZyIgfSwKICB7IGtleTogImZlYXR1cmUiLCB2YWx1ZTogIkZlYXR1cmUiIH0sCiAgeyBrZXk6ICJzcHJpbnQiLCB2YWx1ZTogIlNwcmludCAyMyIgfSwKICB7IGtleTogImFzc2lnbmVlIiwgdmFsdWU6ICJBbGljZSIgfQpdfQogICAgICA+PC9kZWVzLWNoaXBzPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtY2hpcHMvZGVlcy1jaGlwcy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzUgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNDaGlwcyA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtY2hpcHMiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0aW9uTW9kZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9yczsKICBsZXQgX2NoaXBzQXJlUmVtb3ZhYmxlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2hpcHNBcmVSZW1vdmFibGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGFibGVDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0YWJsZUNoaXBzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZENoaXBfZGVjb3JhdG9yczsKICBsZXQgX3NlbGVjdGVkQ2hpcF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzOwogIGxldCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0NoaXBzMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NlbGVjdGlvbk1vZGVfZGVjb3JhdG9ycyA9IFtuNSgpXTsKICAgICAgX2NoaXBzQXJlUmVtb3ZhYmxlX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEJvb2xlYW4KICAgICAgfSldOwogICAgICBfc2VsZWN0YWJsZUNoaXBzX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX3NlbGVjdGVkQ2hpcF9kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfc2VsZWN0ZWRDaGlwc19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBBcnJheQogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3Rpb25Nb2RlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGlvbk1vZGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGlvbk1vZGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0aW9uTW9kZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0aW9uTW9kZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3Rpb25Nb2RlX2luaXRpYWxpemVycywgX3NlbGVjdGlvbk1vZGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NCh0aGlzLCBudWxsLCBfY2hpcHNBcmVSZW1vdmFibGVfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY2hpcHNBcmVSZW1vdmFibGUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImNoaXBzQXJlUmVtb3ZhYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNoaXBzQXJlUmVtb3ZhYmxlLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jaGlwc0FyZVJlbW92YWJsZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jaGlwc0FyZVJlbW92YWJsZV9pbml0aWFsaXplcnMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RhYmxlQ2hpcHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0YWJsZUNoaXBzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RhYmxlQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0YWJsZUNoaXBzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RhYmxlQ2hpcHMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0YWJsZUNoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGFibGVDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic2VsZWN0ZWRDaGlwIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzZWxlY3RlZENoaXAiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zZWxlY3RlZENoaXAgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2VsZWN0ZWRDaGlwX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc0KHRoaXMsIG51bGwsIF9zZWxlY3RlZENoaXBzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNlbGVjdGVkQ2hpcHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkQ2hpcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2VsZWN0ZWRDaGlwcywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2VsZWN0ZWRDaGlwcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZENoaXBzX2luaXRpYWxpemVycywgX3NlbGVjdGVkQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NChudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNDaGlwczIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ1OwogICAgI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGlvbk1vZGVfaW5pdGlhbGl6ZXJzLCAic2luZ2xlIik7CiAgICBnZXQgc2VsZWN0aW9uTW9kZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGlvbk1vZGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3Rpb25Nb2RlKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3Rpb25Nb2RlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3Rpb25Nb2RlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfY2hpcHNBcmVSZW1vdmFibGVfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGNoaXBzQXJlUmVtb3ZhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjaGlwc0FyZVJlbW92YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2hpcHNBcmVSZW1vdmFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9jaGlwc0FyZVJlbW92YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzUodGhpcywgX3NlbGVjdGFibGVDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0YWJsZUNoaXBzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0YWJsZUNoaXBzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0YWJsZUNoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RhYmxlQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RhYmxlQ2hpcHNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc1KHRoaXMsIF9zZWxlY3RlZENoaXBfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRDaGlwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRDaGlwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19pbml0aWFsaXplcnMsIFtdKSk7CiAgICBnZXQgc2VsZWN0ZWRDaGlwcygpIHsKICAgICAgcmV0dXJuIHRoaXMuI3NlbGVjdGVkQ2hpcHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzZWxlY3RlZENoaXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZENoaXBzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NSh0aGlzLCBfc2VsZWN0ZWRDaGlwc19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5tYWluYm94IHsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmNoaXAgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGhlaWdodDogMzJweDsKICAgICAgICBwYWRkaW5nOiAwcHggMTJweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBib3gtc2hhZG93OiAwIDFweCAycHggMCByZ2JhKDAsIDAsIDAsIDAuMDUpOwogICAgICB9CgogICAgICAuY2hpcDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzNmM2Y0NiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZDFkNWRiIiwgIiM1MjUyNWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwOmFjdGl2ZSB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGNvbG9yOiAjZmZmZmZmOwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMyNTYzZWIiLCAiIzI1NjNlYiIpfTsKICAgICAgICBib3JkZXItY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMjU2M2ViIiwgIiMyNTYzZWIiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgwLCAwLCAwLCAwLjA2KSIsICJyZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSkiKX07CiAgICAgICAgaGVpZ2h0OiAyMHB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAyMHB4OwogICAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWxlZnQ6IC04cHg7CiAgICAgICAgcGFkZGluZzogMHB4IDhweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDhweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgIH0KCiAgICAgIC5jaGlwLnNlbGVjdGVkIC5jaGlwS2V5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMik7CiAgICAgICAgY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC45KTsKICAgICAgfQoKICAgICAgZGVlcy1pY29uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiAtNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDNweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXMgZWFzZTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgfQoKICAgICAgLmNoaXAuc2VsZWN0ZWQgZGVlcy1pY29uIHsKICAgICAgICBjb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjgpOwogICAgICB9CgogICAgICBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpIil9OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VmNDQ0NCIsICIjZWY0NDQ0Iil9OwogICAgICB9CgogICAgICAuY2hpcC5zZWxlY3RlZCBkZWVzLWljb246aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4yKTsKICAgICAgICBjb2xvcjogI2ZmZmZmZjsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJtYWluYm94Ij4KICAgICAgICAke3RoaXMuc2VsZWN0YWJsZUNoaXBzLm1hcCgoY2hpcCkgPT4gYjJgCiAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdENoaXAoY2hpcCl9CiAgICAgICAgICAgICAgY2xhc3M9ImNoaXAgJHt0aGlzLmlzU2VsZWN0ZWQoY2hpcCkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICA+CiAgICAgICAgICAgICAgJHtjaGlwLmtleSA/IGIyYDxkaXYgY2xhc3M9ImNoaXBLZXkiPiR7Y2hpcC5rZXl9PC9kaXY+YCA6IGIyYGB9ICR7Y2hpcC52YWx1ZX0KICAgICAgICAgICAgICAke3RoaXMuY2hpcHNBcmVSZW1vdmFibGUgPyBiMmAKICAgICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoZXZlbnQpID0+IHsKICAgICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgICB0aGlzLnJlbW92ZUNoaXAoY2hpcCk7CiAgICAgIH19CiAgICAgICAgICAgICAgICAgICAgICAuaWNvbj0keyJmYTp4bWFyayJ9CiAgICAgICAgICAgICAgICAgICAgPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgICBgIDogYjJgYH0KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgfQogICAgaXNTZWxlY3RlZChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJzaW5nbGUiKSB7CiAgICAgICAgcmV0dXJuIHRoaXMuc2VsZWN0ZWRDaGlwID8gdGhpcy5pc1NhbWVDaGlwKHRoaXMuc2VsZWN0ZWRDaGlwLCBjaGlwKSA6IGZhbHNlOwogICAgICB9IGVsc2UgewogICAgICAgIHJldHVybiB0aGlzLnNlbGVjdGVkQ2hpcHMuc29tZSgoc2VsZWN0ZWQpID0+IHRoaXMuaXNTYW1lQ2hpcChzZWxlY3RlZCwgY2hpcCkpOwogICAgICB9CiAgICB9CiAgICBpc1NhbWVDaGlwKGNoaXAxLCBjaGlwMikgewogICAgICBpZiAoY2hpcDEua2V5ICYmIGNoaXAyLmtleSkgewogICAgICAgIHJldHVybiBjaGlwMS5rZXkgPT09IGNoaXAyLmtleTsKICAgICAgfQogICAgICByZXR1cm4gY2hpcDEudmFsdWUgPT09IGNoaXAyLnZhbHVlICYmIGNoaXAxLmtleSA9PT0gY2hpcDIua2V5OwogICAgfQogICAgYXN5bmMgc2VsZWN0Q2hpcChjaGlwKSB7CiAgICAgIGlmICh0aGlzLnNlbGVjdGlvbk1vZGUgPT09ICJub25lIikgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBpZiAodGhpcy5zZWxlY3Rpb25Nb2RlID09PSAic2luZ2xlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwID0gbnVsbDsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFtdOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IGNoaXA7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcHMgPSBbY2hpcF07CiAgICAgICAgfQogICAgICB9IGVsc2UgaWYgKHRoaXMuc2VsZWN0aW9uTW9kZSA9PT0gIm11bHRpcGxlIikgewogICAgICAgIGlmICh0aGlzLmlzU2VsZWN0ZWQoY2hpcCkpIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKHNlbGVjdGVkKSA9PiAhdGhpcy5pc1NhbWVDaGlwKHNlbGVjdGVkLCBjaGlwKSk7CiAgICAgICAgfSBlbHNlIHsKICAgICAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IFsuLi50aGlzLnNlbGVjdGVkQ2hpcHMsIGNoaXBdOwogICAgICAgIH0KICAgICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgICAgfQogICAgICBjb25zb2xlLmxvZyh0aGlzLnNlbGVjdGVkQ2hpcHMpOwogICAgfQogICAgcmVtb3ZlQ2hpcChjaGlwVG9SZW1vdmUpIHsKICAgICAgdGhpcy5zZWxlY3RhYmxlQ2hpcHMgPSB0aGlzLnNlbGVjdGFibGVDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIHRoaXMuc2VsZWN0ZWRDaGlwcyA9IHRoaXMuc2VsZWN0ZWRDaGlwcy5maWx0ZXIoKGNoaXApID0+ICF0aGlzLmlzU2FtZUNoaXAoY2hpcCwgY2hpcFRvUmVtb3ZlKSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQ2hpcCAmJiB0aGlzLmlzU2FtZUNoaXAodGhpcy5zZWxlY3RlZENoaXAsIGNoaXBUb1JlbW92ZSkpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQ2hpcCA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzQ2hpcHMyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ2ID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLWRlbW93cmFwcGVyIC5ydW5BZnRlclJlbmRlcj0ke2FzeW5jIChlbGVtZW50QXJnKSA9PiB7CiAgICBjb25zdCBncmlkID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCIjZGFzaGJvYXJkR3JpZCIpOwogICAgY29uc3Qgc2VlZFdpZGdldHMgPSBbCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MxIiwKICAgICAgICB4OiAwLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiUmV2ZW51ZSIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpkb2xsYXJTaWduIiwKICAgICAgICBjb250ZW50OiBiMmAKICAgICAgICAgICAgPGRpdiBzdHlsZT0icGFkZGluZzogMjBweDsiPgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMzJweDsgZm9udC13ZWlnaHQ6IDcwMDsgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07Ij4kMTI0LDU2MzwvZGl2PgogICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjMjJjNTVlOyBmb250LXNpemU6IDE0cHg7IG1hcmdpbi10b3A6IDhweDsiPuKGkSAxMi41JSBmcm9tIGxhc3QgbW9udGg8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogIm1ldHJpY3MyIiwKICAgICAgICB4OiAzLAogICAgICAgIHk6IDAsCiAgICAgICAgdzogMywKICAgICAgICBoOiAyLAogICAgICAgIHRpdGxlOiAiVXNlcnMiLAogICAgICAgIGljb246ICJsdWNpZGU6dXNlcnMiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iZm9udC1zaXplOiAzMnB4OyBmb250LXdlaWdodDogNzAwOyBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsiPjgsMjM0PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0iY29sb3I6ICMzYjgyZjY7IGZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+4oaRIDUuMiUgZnJvbSBsYXN0IHdlZWs8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBpZDogImNoYXJ0MSIsCiAgICAgICAgeDogNiwKICAgICAgICB5OiAwLAogICAgICAgIHc6IDYsCiAgICAgICAgaDogNCwKICAgICAgICB0aXRsZTogIkFuYWx5dGljcyIsCiAgICAgICAgaWNvbjogImx1Y2lkZTpsaW5lQ2hhcnQiLAogICAgICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyMHB4OyBoZWlnaHQ6IDEwMCU7IGRpc3BsYXk6IGZsZXg7IGFsaWduLWl0ZW1zOiBjZW50ZXI7IGp1c3RpZnktY29udGVudDogY2VudGVyOyI+CiAgICAgICAgICAgICAgPGRpdiBzdHlsZT0idGV4dC1hbGlnbjogY2VudGVyOyBjb2xvcjogIzcxNzE3YTsiPgogICAgICAgICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGluZUNoYXJ0In0gc3R5bGU9ImZvbnQtc2l6ZTogNDhweDsgbWFyZ2luLWJvdHRvbTogMTZweDsiPjwvZGVlcy1pY29uPgogICAgICAgICAgICAgICAgPGRpdj5DaGFydCB2aXN1YWxpemF0aW9uIGFyZWE8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICBgCiAgICAgIH0KICAgIF07CiAgICBncmlkLndpZGdldHMgPSBzZWVkV2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gKHsgLi4ud2lkZ2V0IH0pKTsKICAgIGdyaWQuY2VsbEhlaWdodCA9IDgwOwogICAgZ3JpZC5tYXJnaW4gPSB7IHRvcDogMTAsIHJpZ2h0OiAxMCwgYm90dG9tOiAxMCwgbGVmdDogMTAgfTsKICAgIGdyaWQuZW5hYmxlQW5pbWF0aW9uID0gdHJ1ZTsKICAgIGdyaWQuc2hvd0dyaWRMaW5lcyA9IGZhbHNlOwogICAgY29uc3QgYmFzZUxheW91dCA9IGdyaWQuZ2V0TGF5b3V0KCkubWFwKChpdGVtKSA9PiAoeyAuLi5pdGVtIH0pKTsKICAgIGNvbnN0IG1vYmlsZUxheW91dCA9IGdyaWQud2lkZ2V0cy5tYXAoKHdpZGdldCwgaW5kZXgyKSA9PiAoewogICAgICBpZDogd2lkZ2V0LmlkLAogICAgICB4OiAwLAogICAgICB5OiBpbmRleDIgPT09IDAgPyAwIDogZ3JpZC53aWRnZXRzLnNsaWNlKDAsIGluZGV4MikucmVkdWNlKChhY2MsIHByZXYpID0+IGFjYyArIHByZXYuaCwgMCksCiAgICAgIHc6IGdyaWQuY29sdW1ucywKICAgICAgaDogd2lkZ2V0LmgKICAgIH0pKTsKICAgIGdyaWQubGF5b3V0cyA9IHsKICAgICAgYmFzZTogYmFzZUxheW91dCwKICAgICAgbW9iaWxlOiBtb2JpbGVMYXlvdXQKICAgIH07CiAgICBjb25zdCBzdGF0dXNFbCA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiI2Rhc2hib2FyZExheW91dFN0YXR1cyIpOwogICAgY29uc3QgdXBkYXRlU3RhdHVzID0gKCkgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBzdGF0dXNFbC50ZXh0Q29udGVudCA9IGBBY3RpdmUgYnJlYWtwb2ludDogJHtncmlkLmFjdGl2ZUJyZWFrcG9pbnR9IFx1MjAyMiBUaWxlczogJHtsYXlvdXQubGVuZ3RofWA7CiAgICB9OwogICAgY29uc3QgbWVkaWFRdWVyeSA9IHdpbmRvdy5tYXRjaE1lZGlhKCIobWF4LXdpZHRoOiA3NjhweCkiKTsKICAgIGNvbnN0IGhhbmRsZUJyZWFrcG9pbnQgPSAoKSA9PiB7CiAgICAgIGNvbnN0IHRhcmdldCA9IG1lZGlhUXVlcnkubWF0Y2hlcyA/ICJtb2JpbGUiIDogImJhc2UiOwogICAgICBncmlkLmFwcGx5QnJlYWtwb2ludExheW91dCh0YXJnZXQpOwogICAgICB1cGRhdGVTdGF0dXMoKTsKICAgIH07CiAgICBpZiAodHlwZW9mIG1lZGlhUXVlcnkuYWRkRXZlbnRMaXN0ZW5lciA9PT0gImZ1bmN0aW9uIikgewogICAgICBtZWRpYVF1ZXJ5LmFkZEV2ZW50TGlzdGVuZXIoImNoYW5nZSIsIGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfSBlbHNlIHsKICAgICAgbWVkaWFRdWVyeS5hZGRMaXN0ZW5lcj8uKGhhbmRsZUJyZWFrcG9pbnQpOwogICAgfQogICAgaGFuZGxlQnJlYWtwb2ludCgpOwogICAgbGV0IHdpZGdldENvdW50ZXIgPSA0OwogICAgY29uc3QgYnV0dG9ucyA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvckFsbCgiZGVlcy1idXR0b24iKTsKICAgIGJ1dHRvbnMuZm9yRWFjaCgoYnV0dG9uKSA9PiB7CiAgICAgIGNvbnN0IHRleHQ5ID0gYnV0dG9uLnRleHRDb250ZW50Py50cmltKCk7CiAgICAgIHN3aXRjaCAodGV4dDkpIHsKICAgICAgICBjYXNlICJUb2dnbGUgQW5pbWF0aW9uIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5lbmFibGVBbmltYXRpb24gPSAhZ3JpZC5lbmFibGVBbmltYXRpb247CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBHcmlkIExpbmVzIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5zaG93R3JpZExpbmVzID0gIWdyaWQuc2hvd0dyaWRMaW5lczsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQWRkIFdpZGdldCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IG5ld1dpZGdldCA9IHsKICAgICAgICAgICAgICBpZDogYHdpZGdldCR7d2lkZ2V0Q291bnRlcisrfWAsCiAgICAgICAgICAgICAgeDogMCwKICAgICAgICAgICAgICB5OiAwLAogICAgICAgICAgICAgIHc6IDMsCiAgICAgICAgICAgICAgaDogMiwKICAgICAgICAgICAgICBhdXRvUG9zaXRpb246IHRydWUsCiAgICAgICAgICAgICAgdGl0bGU6IGBXaWRnZXQgJHt3aWRnZXRDb3VudGVyIC0gMX1gLAogICAgICAgICAgICAgIGljb246ICJsdWNpZGU6cGFja2FnZSIsCiAgICAgICAgICAgICAgY29udGVudDogYjJgCiAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9InBhZGRpbmc6IDIwcHg7IHRleHQtYWxpZ246IGNlbnRlcjsiPgogICAgICAgICAgICAgICAgICAgIDxkaXYgc3R5bGU9ImNvbG9yOiAjNzE3MTdhOyI+TmV3IHdpZGdldCBjb250ZW50PC9kaXY+CiAgICAgICAgICAgICAgICAgICAgPGRpdiBzdHlsZT0ibWFyZ2luLXRvcDogOHB4OyBmb250LXNpemU6IDI0cHg7IGZvbnQtd2VpZ2h0OiA2MDA7IGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OyI+JHtNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkgKiAxZTMpfTwvZGl2PgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAKICAgICAgICAgICAgfTsKICAgICAgICAgICAgZ3JpZC5hZGRXaWRnZXQobmV3V2lkZ2V0LCB0cnVlKTsKICAgICAgICAgIH0pOwogICAgICAgICAgYnJlYWs7CiAgICAgICAgY2FzZSAiQ29tcGFjdCBHcmlkIjoKICAgICAgICAgIGJ1dHRvbi5hZGRFdmVudExpc3RlbmVyKCJjbGljayIsICgpID0+IHsKICAgICAgICAgICAgZ3JpZC5jb21wYWN0KCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlRvZ2dsZSBFZGl0IE1vZGUiOgogICAgICAgICAgYnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgICBncmlkLmVkaXRhYmxlID0gIWdyaWQuZWRpdGFibGU7CiAgICAgICAgICAgIGJ1dHRvbi50ZXh0Q29udGVudCA9IGdyaWQuZWRpdGFibGUgPyAiTG9jayBHcmlkIiA6ICJVbmxvY2sgR3JpZCI7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGNhc2UgIlJlc2V0IExheW91dCI6CiAgICAgICAgICBidXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB7CiAgICAgICAgICAgIGdyaWQuYXBwbHlCcmVha3BvaW50TGF5b3V0KGdyaWQuYWN0aXZlQnJlYWtwb2ludCk7CiAgICAgICAgICB9KTsKICAgICAgICAgIGJyZWFrOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICBicmVhazsKICAgICAgfQogICAgfSk7CiAgICBsZXQgbGFzdFBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgbGV0IG1vdmVFdmVudENvdW50ZXIgPSAwOwogICAgY29uc3QgbG9nR3JpZFN0YXRlID0gKGV2ZW50TmFtZSwgZGV0YWlscykgPT4gewogICAgICBjb25zdCBsYXlvdXQgPSBncmlkLmdldExheW91dCgpOwogICAgICBjb25zb2xlLmdyb3VwKGBcdXsxRjUwNH0gJHtldmVudE5hbWV9IFtFdmVudCAjJHsrK21vdmVFdmVudENvdW50ZXJ9XWApOwogICAgICBjb25zb2xlLmxvZygiVGltZXN0YW1wOiIsICgvKiBAX19QVVJFX18gKi8gbmV3IERhdGUoKSkudG9JU09TdHJpbmcoKSk7CiAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbmZpZ3VyYXRpb246IiwgewogICAgICAgIGNvbHVtbnM6IGdyaWQuY29sdW1ucywKICAgICAgICBjZWxsSGVpZ2h0OiBncmlkLmNlbGxIZWlnaHQsCiAgICAgICAgbWFyZ2luOiBncmlkLm1hcmdpbiwKICAgICAgICBlZGl0YWJsZTogZ3JpZC5lZGl0YWJsZSwKICAgICAgICBhY3RpdmVCcmVha3BvaW50OiBncmlkLmFjdGl2ZUJyZWFrcG9pbnQKICAgICAgfSk7CiAgICAgIGNvbnNvbGUubG9nKCJDdXJyZW50IExheW91dDoiLCBsYXlvdXQpOwogICAgICBjb25zb2xlLmxvZygiV2lkZ2V0IENvdW50OiIsIGxheW91dC5sZW5ndGgpOwogICAgICBjb25zb2xlLmxvZygiR3JpZCBCb3VuZHM6IiwgewogICAgICAgIHRvdGFsV2lkZ2V0czogZ3JpZC53aWRnZXRzLmxlbmd0aCwKICAgICAgICBtYXhZOiBNYXRoLm1heCguLi5sYXlvdXQubWFwKCh3MykgPT4gdzMueSArIHczLmgpKSwKICAgICAgICBvY2N1cGllZDogbGF5b3V0Lm1hcCgodzMpID0+IGAke3czLmlkfTogKCR7dzMueH0sJHt3My55fSkgJHt3My53fXgke3czLmh9YCkuam9pbigiLCAiKQogICAgICB9KTsKICAgICAgaWYgKGRldGFpbHMpIHsKICAgICAgICBjb25zb2xlLmxvZygiRXZlbnQgRGV0YWlsczoiLCBkZXRhaWxzKTsKICAgICAgfQogICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICB9OwogICAgY29uc3QgcGxhY2Vob2xkZXJPYnNlcnZlciA9IG5ldyBNdXRhdGlvbk9ic2VydmVyKCgpID0+IHsKICAgICAgY29uc3QgcGxhY2Vob2xkZXIgPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5wbGFjZWhvbGRlciIpOwogICAgICBpZiAocGxhY2Vob2xkZXIpIHsKICAgICAgICBjb25zdCBjdXJyZW50UG9zaXRpb24gPSB7CiAgICAgICAgICBsZWZ0OiBwbGFjZWhvbGRlci5zdHlsZS5sZWZ0LAogICAgICAgICAgdG9wOiBwbGFjZWhvbGRlci5zdHlsZS50b3AsCiAgICAgICAgICB3aWR0aDogcGxhY2Vob2xkZXIuc3R5bGUud2lkdGgsCiAgICAgICAgICBoZWlnaHQ6IHBsYWNlaG9sZGVyLnN0eWxlLmhlaWdodAogICAgICAgIH07CiAgICAgICAgaWYgKEpTT04uc3RyaW5naWZ5KGN1cnJlbnRQb3NpdGlvbikgIT09IEpTT04uc3RyaW5naWZ5KGxhc3RQbGFjZWhvbGRlclBvc2l0aW9uKSkgewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUY0Q0R9IFBsYWNlaG9sZGVyIFBvc2l0aW9uIENoYW5nZWQiKTsKICAgICAgICAgIGNvbnNvbGUubG9nKCJQcmV2aW91czoiLCBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbik7CiAgICAgICAgICBjb25zb2xlLmxvZygiQ3VycmVudDoiLCBjdXJyZW50UG9zaXRpb24pOwogICAgICAgICAgY29uc3QgZ3JpZEluZm8gPSBncmlkLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoIi5ncmlkLWNvbnRhaW5lciIpOwogICAgICAgICAgaWYgKGdyaWRJbmZvKSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJHcmlkIENvbnRhaW5lciBEaW1lbnNpb25zOiIsIHsKICAgICAgICAgICAgICB3aWR0aDogZ3JpZEluZm8uY2xpZW50V2lkdGgsCiAgICAgICAgICAgICAgaGVpZ2h0OiBncmlkSW5mby5jbGllbnRIZWlnaHQKICAgICAgICAgICAgfSk7CiAgICAgICAgICB9CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBsYXN0UGxhY2Vob2xkZXJQb3NpdGlvbiA9IGN1cnJlbnRQb3NpdGlvbjsKICAgICAgICB9CiAgICAgIH0KICAgIH0pOwogICAgaWYgKGdyaWQuc2hhZG93Um9vdCkgewogICAgICBwbGFjZWhvbGRlck9ic2VydmVyLm9ic2VydmUoZ3JpZC5zaGFkb3dSb290LCB7CiAgICAgICAgY2hpbGRMaXN0OiB0cnVlLAogICAgICAgIHN1YnRyZWU6IHRydWUsCiAgICAgICAgYXR0cmlidXRlczogdHJ1ZSwKICAgICAgICBhdHRyaWJ1dGVGaWx0ZXI6IFsic3R5bGUiXQogICAgICB9KTsKICAgIH0KICAgIGxvZ0dyaWRTdGF0ZSgiSW5pdGlhbCBHcmlkIFN0YXRlIik7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1tb3ZlIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBNb3ZlIiwgewogICAgICAgIHdpZGdldDogZTExLmRldGFpbC53aWRnZXQsCiAgICAgICAgZGlzcGxhY2VkOiBlMTEuZGV0YWlsLmRpc3BsYWNlZCwKICAgICAgICBzd2FwcGVkV2l0aDogZTExLmRldGFpbC5zd2FwcGVkV2l0aAogICAgICB9KTsKICAgIH0pOwogICAgZ3JpZC5hZGRFdmVudExpc3RlbmVyKCJ3aWRnZXQtcmVzaXplIiwgKGUxMSkgPT4gewogICAgICBsb2dHcmlkU3RhdGUoIldpZGdldCBSZXNpemUiLCB7CiAgICAgICAgd2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldCwKICAgICAgICBkaXNwbGFjZWQ6IGUxMS5kZXRhaWwuZGlzcGxhY2VkLAogICAgICAgIHN3YXBwZWRXaXRoOiBlMTEuZGV0YWlsLnN3YXBwZWRXaXRoCiAgICAgIH0pOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoIndpZGdldC1yZW1vdmUiLCAoZTExKSA9PiB7CiAgICAgIGxvZ0dyaWRTdGF0ZSgiV2lkZ2V0IFJlbW92ZSIsIHsKICAgICAgICByZW1vdmVkV2lkZ2V0OiBlMTEuZGV0YWlsLndpZGdldAogICAgICB9KTsKICAgICAgdXBkYXRlU3RhdHVzKCk7CiAgICB9KTsKICAgIGdyaWQuYWRkRXZlbnRMaXN0ZW5lcigibGF5b3V0LWNoYW5nZSIsICgpID0+IHsKICAgICAgbG9nR3JpZFN0YXRlKCJMYXlvdXQgQ2hhbmdlIik7CiAgICAgIHVwZGF0ZVN0YXR1cygpOwogICAgfSk7CiAgICBncmlkLmFkZEV2ZW50TGlzdGVuZXIoInBvaW50ZXJkb3duIiwgKGUxMSkgPT4gewogICAgICBjb25zdCBpc0hlYWRlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLndpZGdldC1oZWFkZXIiKTsKICAgICAgY29uc3QgaXNSZXNpemVIYW5kbGUgPSBlMTEudGFyZ2V0LmNsb3Nlc3QoIi5yZXNpemUtaGFuZGxlIik7CiAgICAgIGlmIChpc0hlYWRlciB8fCBpc1Jlc2l6ZUhhbmRsZSkgewogICAgICAgIGNvbnNvbGUuZ3JvdXAoYFx1ezFGM0FGfSBJbnRlcmFjdGlvbiBTdGFydGVkOiAke2lzSGVhZGVyID8gIkRyYWciIDogIlJlc2l6ZSJ9YCk7CiAgICAgICAgY29uc29sZS5sb2coIlRhcmdldCBXaWRnZXQ6IiwgZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik/LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSk7CiAgICAgICAgY29uc29sZS5sb2coIlBvaW50ZXIgUG9zaXRpb246IiwgeyB4OiBlMTEuY2xpZW50WCwgeTogZTExLmNsaWVudFkgfSk7CiAgICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICAgIGNvbnN0IGhhbmRsZVBvaW50ZXJNb3ZlID0gKG1vdmVFdmVudCkgPT4gewogICAgICAgICAgY29uc3Qgd2lkZ2V0ID0gZTExLnRhcmdldC5jbG9zZXN0KCIud2lkZ2V0Iik7CiAgICAgICAgICBpZiAod2lkZ2V0KSB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKGBcdTIxOTRcdUZFMEYgUG9pbnRlciBNb3ZlOmAsIHsKICAgICAgICAgICAgICB3aWRnZXRJZDogd2lkZ2V0LmdldEF0dHJpYnV0ZSgiZGF0YS13aWRnZXQtaWQiKSwKICAgICAgICAgICAgICBwb3NpdGlvbjogeyB4OiBtb3ZlRXZlbnQuY2xpZW50WCwgeTogbW92ZUV2ZW50LmNsaWVudFkgfSwKICAgICAgICAgICAgICBkZWx0YTogewogICAgICAgICAgICAgICAgeDogbW92ZUV2ZW50LmNsaWVudFggLSBlMTEuY2xpZW50WCwKICAgICAgICAgICAgICAgIHk6IG1vdmVFdmVudC5jbGllbnRZIC0gZTExLmNsaWVudFkKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0pOwogICAgICAgICAgfQogICAgICAgIH07CiAgICAgICAgY29uc3QgaGFuZGxlUG9pbnRlclVwID0gKCkgPT4gewogICAgICAgICAgY29uc29sZS5ncm91cCgiXHV7MUYzQzF9IEludGVyYWN0aW9uIEVuZGVkIik7CiAgICAgICAgICBsb2dHcmlkU3RhdGUoIkZpbmFsIFN0YXRlIEFmdGVyIEludGVyYWN0aW9uIik7CiAgICAgICAgICBjb25zb2xlLmdyb3VwRW5kKCk7CiAgICAgICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoInBvaW50ZXJ1cCIsIGhhbmRsZVBvaW50ZXJVcCk7CiAgICAgICAgfTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIGhhbmRsZVBvaW50ZXJNb3ZlKTsKICAgICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCBoYW5kbGVQb2ludGVyVXApOwogICAgICB9CiAgICB9KTsKICAgIGNvbnN0IG9yaWdpbmFsQWRkV2lkZ2V0ID0gZ3JpZC5hZGRXaWRnZXQuYmluZChncmlkKTsKICAgIGdyaWQuYWRkV2lkZ2V0ID0gKHdpZGdldCwgYXV0b1Bvc2l0aW9uKSA9PiB7CiAgICAgIGNvbnNvbGUuZ3JvdXAoIlx1Mjc5NSBBZGRpbmcgV2lkZ2V0Iik7CiAgICAgIGNvbnNvbGUubG9nKCJOZXcgV2lkZ2V0OiIsIHdpZGdldCk7CiAgICAgIGNvbnNvbGUubG9nKCJBdXRvIFBvc2l0aW9uOiIsIGF1dG9Qb3NpdGlvbik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQWRkV2lkZ2V0KHdpZGdldCwgYXV0b1Bvc2l0aW9uKTsKICAgICAgbG9nR3JpZFN0YXRlKCJBZnRlciBXaWRnZXQgQWRkZWQiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIGNvbnN0IG9yaWdpbmFsQ29tcGFjdCA9IGdyaWQuY29tcGFjdC5iaW5kKGdyaWQpOwogICAgZ3JpZC5jb21wYWN0ID0gKGRpcmVjdGlvbikgPT4gewogICAgICBjb25zb2xlLmdyb3VwKCJcdXsxRjVEQ31cdUZFMEYgQ29tcGFjdGluZyBHcmlkIik7CiAgICAgIGNvbnNvbGUubG9nKCJEaXJlY3Rpb246IiwgZGlyZWN0aW9uIHx8ICJ2ZXJ0aWNhbCIpOwogICAgICBsb2dHcmlkU3RhdGUoIkJlZm9yZSBDb21wYWN0Iik7CiAgICAgIGNvbnN0IHJlc3VsdCA9IG9yaWdpbmFsQ29tcGFjdChkaXJlY3Rpb24pOwogICAgICBsb2dHcmlkU3RhdGUoIkFmdGVyIENvbXBhY3QiKTsKICAgICAgY29uc29sZS5ncm91cEVuZCgpOwogICAgICByZXR1cm4gcmVzdWx0OwogICAgfTsKICAgIHVwZGF0ZVN0YXR1cygpOwogIH19PgogICAgICA8c3R5bGU+CiAgICAgICAgJHtpYAogICAgICAgICAgLmRlbW9Cb3ggewogICAgICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMwOTA5MGIiKX07CiAgICAgICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgICAgIHBhZGRpbmc6IDQwcHg7CiAgICAgICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgICAgIGdhcDogMjRweDsKICAgICAgICAgIH0KCiAgICAgICAgICAuZGVtby1jb250cm9scyB7CiAgICAgICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgICAgICAgICAgZ2FwOiAxMnB4OwogICAgICAgICAgfQoKICAgICAgICAgIC5kZW1vLWNvbnRyb2xzIGRlZXMtYnV0dG9uIHsKICAgICAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgICB9CgogICAgICAgICAgLmdyaWQtY29udGFpbmVyLXdyYXBwZXIgewogICAgICAgICAgICBmbGV4OiAxOwogICAgICAgICAgICBtaW4taGVpZ2h0OiA2MDBweDsKICAgICAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgICAgfQoKICAgICAgICAgIC5pbmZvIHsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICAgICAgZm9udC1mYW1pbHk6ICdHZWlzdCBTYW5zJywgc2Fucy1zZXJpZjsKICAgICAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgICAgICBnYXA6IDZweDsKICAgICAgICAgIH0KCiAgICAgICAgICAjZGFzaGJvYXJkTGF5b3V0U3RhdHVzIHsKICAgICAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiM2MGE1ZmEiKX07CiAgICAgICAgICB9CiAgICAgICAgYH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0iZGVtb0JveCI+CiAgICAgICAgPGRpdiBjbGFzcz0iZGVtby1jb250cm9scyI+CiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFuaW1hdGlvbjoiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEFuaW1hdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iRGlzcGxheToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEdyaWQgTGluZXM8L2RlZXMtYnV0dG9uPgogICAgICAgICAgPC9kZWVzLWJ1dHRvbi1ncm91cD4KCiAgICAgICAgICA8ZGVlcy1idXR0b24tZ3JvdXAgbGFiZWw9IkFjdGlvbnM6Ij4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPkFkZCBXaWRnZXQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q29tcGFjdCBHcmlkPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgICAgPGRlZXMtYnV0dG9uPlJlc2V0IExheW91dDwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgoKICAgICAgICAgIDxkZWVzLWJ1dHRvbi1ncm91cCBsYWJlbD0iTW9kZToiPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+VG9nZ2xlIEVkaXQgTW9kZTwvZGVlcy1idXR0b24+CiAgICAgICAgICA8L2RlZXMtYnV0dG9uLWdyb3VwPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJncmlkLWNvbnRhaW5lci13cmFwcGVyIj4KICAgICAgICAgIDxkZWVzLWRhc2hib2FyZGdyaWQgaWQ9ImRhc2hib2FyZEdyaWQiPjwvZGVlcy1kYXNoYm9hcmRncmlkPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmZvIj4KICAgICAgICAgIDxkaXY+RHJhZyB0byByZXBvc2l0aW9uLCByZXNpemUgZnJvbSBoYW5kbGVzLCBvciByaWdodC1jbGljayBhIGhlYWRlciB0byBkZWxldGUgYSB0aWxlLjwvZGl2PgogICAgICAgICAgPGRpdiBpZD0iZGFzaGJvYXJkTGF5b3V0U3RhdHVzIj48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2RlZXMtZGVtb3dyYXBwZXI+CiAgYDsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL3N0eWxlcy5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGFzaGJvYXJkR3JpZFN0eWxlcyA9IFsKICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgaWAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLWNvbnRhaW5lciB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1pbi1oZWlnaHQ6IDQwMHB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldCB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHdpbGwtY2hhbmdlOiBhdXRvOwogICAgICB9CiAgICAgIAogICAgICA6aG9zdChbZW5hYmxlYW5pbWF0aW9uXSkgLmdyaWQtd2lkZ2V0IHsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4zcyBjdWJpYy1iZXppZXIoMC40LCAwLCAwLjIsIDEpOwogICAgICB9CgogICAgICAuZ3JpZC13aWRnZXQuZHJhZ2dpbmcgewogICAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICAgIG9wYWNpdHk6IDAuODsKICAgICAgICBjdXJzb3I6IGdyYWJiaW5nOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLXdpZGdldC5wbGFjZWhvbGRlciB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgei1pbmRleDogMTsKICAgICAgfQogICAgICAKICAgICAgLmdyaWQtd2lkZ2V0LnBsYWNlaG9sZGVyIC53aWRnZXQtY29udGVudCB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIiwgInJnYmEoNTksIDEzMCwgMjQ2LCAwLjEpIil9OwogICAgICAgIGJvcmRlcjogMnB4IGRhc2hlZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIGJveC1zaGFkb3c6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5yZXNpemluZyB7CiAgICAgICAgdHJhbnNpdGlvbjogbm9uZSAhaW1wb3J0YW50OwogICAgICB9CgogICAgICAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIHRvcDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDFweCAzcHggcmdiYSgwLCAwLCAwLCAwLjEpIiwgIjAgMXB4IDNweCByZ2JhKDAsIDAsIDAsIDAuMykiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYm94LXNoYWRvdyAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDRweCAxMnB4IHJnYmEoMCwgMCwgMCwgMC4xNSkiLCAiMCA0cHggMTJweCByZ2JhKDAsIDAsIDAsIDAuNCkiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldC5kcmFnZ2luZyAud2lkZ2V0LWNvbnRlbnQgewogICAgICAgIGJveC1zaGFkb3c6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIwIDE2cHggNDhweCByZ2JhKDAsIDAsIDAsIDAuMjUpIiwgIjAgMTZweCA0OHB4IHJnYmEoMCwgMCwgMCwgMC42KSIpfTsKICAgICAgICB0cmFuc2Zvcm06IHNjYWxlKDEuMDUpOwogICAgICB9CgogICAgICAud2lkZ2V0LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweCAxNnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDYwMDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2Y5ZmFmYiIsICIjMGEwYTBhIil9OwogICAgICAgIGN1cnNvcjogZ3JhYjsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQogICAgICAKICAgICAgLndpZGdldC1oZWFkZXI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMxODE4MWIiKX07CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyOmFjdGl2ZSB7CiAgICAgICAgY3Vyc29yOiBncmFiYmluZzsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIubG9ja2VkIHsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgCiAgICAgIC53aWRnZXQtaGVhZGVyLmxvY2tlZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOWZhZmIiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1oZWFkZXIgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC53aWRnZXQtYm9keSB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIHRvcDogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMwOTA5MGIiLCAiI2ZhZmFmYSIpfTsKICAgICAgfQoKICAgICAgLndpZGdldC1ib2R5Lmhhcy1oZWFkZXIgewogICAgICAgIHRvcDogNDVweDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICB6LWluZGV4OiAxMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1lIHsKICAgICAgICBjdXJzb3I6IGV3LXJlc2l6ZTsKICAgICAgICB3aWR0aDogMTJweDsKICAgICAgICByaWdodDogLTZweDsKICAgICAgICB0b3A6IDEwJTsKICAgICAgICBoZWlnaHQ6IDgwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtcyB7CiAgICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgICAgaGVpZ2h0OiAxMnB4OwogICAgICAgIHdpZHRoOiA4MCU7CiAgICAgICAgYm90dG9tOiAtNnB4OwogICAgICAgIGxlZnQ6IDEwJTsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2UgewogICAgICAgIGN1cnNvcjogc2UtcmVzaXplOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICByaWdodDogLTJweDsKICAgICAgICBib3R0b206IC0ycHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnMgZWFzZTsKICAgICAgfQogICAgICAKICAgICAgLnJlc2l6ZS1oYW5kbGUtc2U6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgcmlnaHQ6IDRweDsKICAgICAgICBib3R0b206IDRweDsKICAgICAgICB3aWR0aDogNnB4OwogICAgICAgIGhlaWdodDogNnB4OwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMnB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgIH0KCiAgICAgIC5ncmlkLXdpZGdldDpob3ZlciAucmVzaXplLWhhbmRsZS1zZSB7CiAgICAgICAgb3BhY2l0eTogMC43OwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMSAhaW1wb3J0YW50OwogICAgICB9CiAgICAgIAogICAgICAucmVzaXplLWhhbmRsZS1zZTpob3Zlcjo6YWZ0ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzYjgyZjYiLCAiIzNiODJmNiIpfTsKICAgICAgfQoKICAgICAgLmdyaWQtcGxhY2Vob2xkZXIgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICAgIG9wYWNpdHk6IDAuMTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyOiAycHggZGFzaGVkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnMgZWFzZTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDQwMHB4OwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzcxNzE3YSIsICIjNzE3MTdhIil9OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgZGVlcy1pY29uIHsKICAgICAgICBmb250LXNpemU6IDQ4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgIH0KICAgICAgCiAgICAgIC5ncmlkLWxpbmVzIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHotaW5kZXg6IC0xOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLXZlcnRpY2FsIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgICAgIAogICAgICAuZ3JpZC1saW5lLWhvcml6b250YWwgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMyNzI3MmEiKX07CiAgICAgICAgb3BhY2l0eTogMC4zOwogICAgICB9CiAgYApdOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvbGF5b3V0LmpzCnZhciBERUZBVUxUX01BUkdJTiA9IDEwOwp2YXIgcmVzb2x2ZU1hcmdpbnMgPSAobWFyZ2luKSA9PiB7CiAgaWYgKHR5cGVvZiBtYXJnaW4gPT09ICJudW1iZXIiKSB7CiAgICByZXR1cm4gewogICAgICBob3Jpem9udGFsOiBtYXJnaW4sCiAgICAgIHZlcnRpY2FsOiBtYXJnaW4sCiAgICAgIHRvcDogbWFyZ2luLAogICAgICByaWdodDogbWFyZ2luLAogICAgICBib3R0b206IG1hcmdpbiwKICAgICAgbGVmdDogbWFyZ2luCiAgICB9OwogIH0KICBjb25zdCByZXNvbHZlZDIgPSB7CiAgICB0b3A6IG1hcmdpbi50b3AgPz8gREVGQVVMVF9NQVJHSU4sCiAgICByaWdodDogbWFyZ2luLnJpZ2h0ID8/IERFRkFVTFRfTUFSR0lOLAogICAgYm90dG9tOiBtYXJnaW4uYm90dG9tID8/IERFRkFVTFRfTUFSR0lOLAogICAgbGVmdDogbWFyZ2luLmxlZnQgPz8gREVGQVVMVF9NQVJHSU4KICB9OwogIHJldHVybiB7CiAgICAuLi5yZXNvbHZlZDIsCiAgICBob3Jpem9udGFsOiAocmVzb2x2ZWQyLmxlZnQgKyByZXNvbHZlZDIucmlnaHQpIC8gMiwKICAgIHZlcnRpY2FsOiAocmVzb2x2ZWQyLnRvcCArIHJlc29sdmVkMi5ib3R0b20pIC8gMgogIH07Cn07CnZhciBjYWxjdWxhdGVDZWxsTWV0cmljcyA9IChjb250YWluZXJXaWR0aCwgY29sdW1ucywgbWFyZ2lucywgY2VsbEhlaWdodCwgY2VsbEhlaWdodFVuaXQpID0+IHsKICBjb25zdCB0b3RhbE1hcmdpbldpZHRoID0gbWFyZ2lucy5ob3Jpem9udGFsICogKGNvbHVtbnMgKyAxKTsKICBjb25zdCBhdmFpbGFibGVXaWR0aCA9IE1hdGgubWF4KGNvbnRhaW5lcldpZHRoIC0gdG90YWxNYXJnaW5XaWR0aCwgMCk7CiAgY29uc3QgY2VsbFdpZHRoUHggPSBjb2x1bW5zID4gMCA/IGF2YWlsYWJsZVdpZHRoIC8gY29sdW1ucyA6IDA7CiAgY29uc3QgY2VsbEhlaWdodFB4ID0gY2VsbEhlaWdodFVuaXQgPT09ICJhdXRvIiA/IGNlbGxXaWR0aFB4IDogY2VsbEhlaWdodDsKICByZXR1cm4gewogICAgY29udGFpbmVyV2lkdGgsCiAgICBjZWxsV2lkdGhQeCwKICAgIG1hcmdpbkhvcml6b250YWxQeDogbWFyZ2lucy5ob3Jpem9udGFsLAogICAgY2VsbEhlaWdodFB4LAogICAgbWFyZ2luVmVydGljYWxQeDogbWFyZ2lucy52ZXJ0aWNhbAogIH07Cn07CnZhciBjYWxjdWxhdGVHcmlkSGVpZ2h0ID0gKHdpZGdldHMsIG1hcmdpbnMsIGNlbGxIZWlnaHQpID0+IHsKICBpZiAod2lkZ2V0cy5sZW5ndGggPT09IDApCiAgICByZXR1cm4gMDsKICBjb25zdCBtYXhZID0gTWF0aC5tYXgoLi4ud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiBtYXhZICogY2VsbEhlaWdodCArIChtYXhZICsgMSkgKiBtYXJnaW5zLnZlcnRpY2FsOwp9Owp2YXIgb3ZlcmxhcHMgPSAod2lkZ2V0LCB4MywgeTUsIHczLCBoOSkgPT4geDMgPCB3aWRnZXQueCArIHdpZGdldC53ICYmIHgzICsgdzMgPiB3aWRnZXQueCAmJiB5NSA8IHdpZGdldC55ICsgd2lkZ2V0LmggJiYgeTUgKyBoOSA+IHdpZGdldC55Owp2YXIgY29sbGVjdENvbGxpc2lvbnMgPSAod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXID0gdGFyZ2V0LncsIG5leHRIID0gdGFyZ2V0LmgpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gewogICAgaWYgKHdpZGdldC5pZCA9PT0gdGFyZ2V0LmlkKQogICAgICByZXR1cm4gZmFsc2U7CiAgICByZXR1cm4gb3ZlcmxhcHMod2lkZ2V0LCBuZXh0WCwgbmV4dFksIG5leHRXLCBuZXh0SCk7CiAgfSk7Cn07CnZhciBjaGVja0NvbGxpc2lvbiA9ICh3aWRnZXRzLCB0YXJnZXQsIG5leHRYLCBuZXh0WSkgPT4gY29sbGVjdENvbGxpc2lvbnMod2lkZ2V0cywgdGFyZ2V0LCBuZXh0WCwgbmV4dFkpLmxlbmd0aCA+IDA7CnZhciBjbG9uZVdpZGdldCA9ICh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KTsKdmFyIGNsb25lV2lkZ2V0cyA9ICh3aWRnZXRzKSA9PiB3aWRnZXRzLm1hcChjbG9uZVdpZGdldCk7CnZhciBmaW5kQXZhaWxhYmxlUG9zaXRpb24gPSAod2lkZ2V0cywgd2lkdGgsIGhlaWdodCwgY29sdW1ucykgPT4gewogIGZvciAobGV0IHk1ID0gMDsgeTUgPCAyMDA7IHk1KyspIHsKICAgIGZvciAobGV0IHgzID0gMDsgeDMgPD0gY29sdW1ucyAtIHdpZHRoOyB4MysrKSB7CiAgICAgIGNvbnN0IGlzRnJlZSA9ICF3aWRnZXRzLnNvbWUoKHdpZGdldCkgPT4gb3ZlcmxhcHMod2lkZ2V0LCB4MywgeTUsIHdpZHRoLCBoZWlnaHQpKTsKICAgICAgaWYgKGlzRnJlZSkgewogICAgICAgIHJldHVybiB7IHg6IHgzLCB5OiB5NSB9OwogICAgICB9CiAgICB9CiAgfQogIGNvbnN0IG1heFkgPSB3aWRnZXRzLnJlZHVjZSgoYWNjLCB3aWRnZXQpID0+IE1hdGgubWF4KGFjYywgd2lkZ2V0LnkgKyB3aWRnZXQuaCksIDApOwogIHJldHVybiB7IHg6IDAsIHk6IG1heFkgfTsKfTsKdmFyIHJlc29sdmVXaWRnZXRQbGFjZW1lbnQgPSAod2lkZ2V0cywgd2lkZ2V0SWQsIG5leHQyLCBjb2x1bW5zLCBwcmV2aW91c1Bvc2l0aW9uKSA9PiB7CiAgY29uc3Qgc291cmNlV2lkZ2V0cyA9IGNsb25lV2lkZ2V0cyh3aWRnZXRzKTsKICBjb25zdCBtb3ZpbmcgPSBzb3VyY2VXaWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgY29uc3Qgb3JpZ2luYWwgPSB3aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgaWYgKCFtb3ZpbmcgfHwgIW9yaWdpbmFsKSB7CiAgICByZXR1cm4gbnVsbDsKICB9CiAgY29uc3QgdGFyZ2V0ID0gewogICAgeDogbmV4dDIueCwKICAgIHk6IG5leHQyLnksCiAgICB3OiBuZXh0Mi53ID8/IG1vdmluZy53LAogICAgaDogbmV4dDIuaCA/PyBtb3ZpbmcuaAogIH07CiAgbW92aW5nLnggPSB0YXJnZXQueDsKICBtb3ZpbmcueSA9IHRhcmdldC55OwogIG1vdmluZy53ID0gdGFyZ2V0Lnc7CiAgbW92aW5nLmggPSB0YXJnZXQuaDsKICBjb25zdCBjb2xsaXNpb25zID0gY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgbW92aW5nLCB0YXJnZXQueCwgdGFyZ2V0LnksIHRhcmdldC53LCB0YXJnZXQuaCk7CiAgaWYgKGNvbGxpc2lvbnMubGVuZ3RoID09PSAwKSB7CiAgICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IFttb3ZpbmcuaWRdIH07CiAgfQogIGlmIChjb2xsaXNpb25zLmxlbmd0aCA9PT0gMSkgewogICAgY29uc3Qgb3RoZXIgPSBjb2xsaXNpb25zWzBdOwogICAgaWYgKCFvdGhlci5sb2NrZWQgJiYgIW90aGVyLm5vTW92ZSAmJiBvdGhlci53ID09PSBtb3ZpbmcudyAmJiBvdGhlci5oID09PSBtb3ZpbmcuaCkgewogICAgICBjb25zdCBvdGhlckNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb3RoZXIuaWQpOwogICAgICBpZiAob3RoZXJDbG9uZSkgewogICAgICAgIGNvbnN0IHN3YXBUYXJnZXQgPSBvcmlnaW5hbDsKICAgICAgICBjb25zdCBwcmV2aW91c090aGVyUG9zaXRpb24gPSB7IHg6IG90aGVyQ2xvbmUueCwgeTogb3RoZXJDbG9uZS55IH07CiAgICAgICAgb3RoZXJDbG9uZS54ID0gc3dhcFRhcmdldC54OwogICAgICAgIG90aGVyQ2xvbmUueSA9IHN3YXBUYXJnZXQueTsKICAgICAgICBjb25zdCBzd2FwVmFsaWQgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKS5sZW5ndGggPT09IDAgJiYgY29sbGVjdENvbGxpc2lvbnMoc291cmNlV2lkZ2V0cywgb3RoZXJDbG9uZSwgb3RoZXJDbG9uZS54LCBvdGhlckNsb25lLnksIG90aGVyQ2xvbmUudywgb3RoZXJDbG9uZS5oKS5sZW5ndGggPT09IDA7CiAgICAgICAgaWYgKHN3YXBWYWxpZCkgewogICAgICAgICAgcmV0dXJuIHsgd2lkZ2V0czogc291cmNlV2lkZ2V0cywgbW92ZWRXaWRnZXRzOiBbbW92aW5nLmlkLCBvdGhlckNsb25lLmlkXSwgc3dhcHBlZFdpdGg6IG90aGVyQ2xvbmUuaWQgfTsKICAgICAgICB9CiAgICAgICAgb3RoZXJDbG9uZS54ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLng7CiAgICAgICAgb3RoZXJDbG9uZS55ID0gcHJldmlvdXNPdGhlclBvc2l0aW9uLnk7CiAgICAgIH0KICAgIH0KICB9CiAgY29uc3QgbW92ZWRJZHMgPSAvKiBAX19QVVJFX18gKi8gbmV3IFNldChbbW92aW5nLmlkXSk7CiAgZm9yIChjb25zdCBvZmZlbmRpbmcgb2YgY29sbGlzaW9ucykgewogICAgaWYgKG9mZmVuZGluZy5sb2NrZWQgfHwgb2ZmZW5kaW5nLm5vTW92ZSkgewogICAgICByZXR1cm4gbnVsbDsKICAgIH0KICAgIGNvbnN0IGNsb25lID0gc291cmNlV2lkZ2V0cy5maW5kKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gb2ZmZW5kaW5nLmlkKTsKICAgIGlmICghY2xvbmUpCiAgICAgIGNvbnRpbnVlOwogICAgY29uc3QgcmVtYWluaW5nID0gc291cmNlV2lkZ2V0cy5maWx0ZXIoKHdpZGdldCkgPT4gd2lkZ2V0LmlkICE9PSBvZmZlbmRpbmcuaWQpOwogICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHJlbWFpbmluZywgY2xvbmUudywgY2xvbmUuaCwgY29sdW1ucyk7CiAgICBjbG9uZS54ID0gcG9zaXRpb24zLng7CiAgICBjbG9uZS55ID0gcG9zaXRpb24zLnk7CiAgICBtb3ZlZElkcy5hZGQoY2xvbmUuaWQpOwogIH0KICBjb25zdCB2ZXJpZnkgPSBjb2xsZWN0Q29sbGlzaW9ucyhzb3VyY2VXaWRnZXRzLCBtb3ZpbmcsIG1vdmluZy54LCBtb3ZpbmcueSwgbW92aW5nLncsIG1vdmluZy5oKTsKICBpZiAodmVyaWZ5Lmxlbmd0aCA+IDApIHsKICAgIHJldHVybiBudWxsOwogIH0KICByZXR1cm4geyB3aWRnZXRzOiBzb3VyY2VXaWRnZXRzLCBtb3ZlZFdpZGdldHM6IEFycmF5LmZyb20obW92ZWRJZHMpIH07Cn07CnZhciBjb21wYWN0TGF5b3V0ID0gKHdpZGdldHMsIGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpID0+IHsKICBjb25zdCBzb3J0ZWQgPSBbLi4ud2lkZ2V0c10uc29ydCgoYTUsIGI1KSA9PiB7CiAgICBpZiAoZGlyZWN0aW9uID09PSAidmVydGljYWwiKSB7CiAgICAgIGlmIChhNS55ICE9PSBiNS55KQogICAgICAgIHJldHVybiBhNS55IC0gYjUueTsKICAgICAgcmV0dXJuIGE1LnggLSBiNS54OwogICAgfQogICAgaWYgKGE1LnggIT09IGI1LngpCiAgICAgIHJldHVybiBhNS54IC0gYjUueDsKICAgIHJldHVybiBhNS55IC0gYjUueTsKICB9KTsKICBmb3IgKGNvbnN0IHdpZGdldCBvZiBzb3J0ZWQpIHsKICAgIGlmICh3aWRnZXQubG9ja2VkIHx8IHdpZGdldC5ub01vdmUpCiAgICAgIGNvbnRpbnVlOwogICAgaWYgKGRpcmVjdGlvbiA9PT0gInZlcnRpY2FsIikgewogICAgICB3aGlsZSAod2lkZ2V0LnkgPiAwICYmICFjaGVja0NvbGxpc2lvbih3aWRnZXRzLCB3aWRnZXQsIHdpZGdldC54LCB3aWRnZXQueSAtIDEpKSB7CiAgICAgICAgd2lkZ2V0LnkgLT0gMTsKICAgICAgfQogICAgfSBlbHNlIHsKICAgICAgd2hpbGUgKHdpZGdldC54ID4gMCAmJiAhY2hlY2tDb2xsaXNpb24od2lkZ2V0cywgd2lkZ2V0LCB3aWRnZXQueCAtIDEsIHdpZGdldC55KSkgewogICAgICAgIHdpZGdldC54IC09IDE7CiAgICAgIH0KICAgIH0KICB9Cn07CnZhciBhcHBseUxheW91dCA9ICh3aWRnZXRzLCBsYXlvdXQpID0+IHsKICByZXR1cm4gd2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gewogICAgY29uc3QgbGF5b3V0SXRlbSA9IGxheW91dC5maW5kKChpdGVtKSA9PiBpdGVtLmlkID09PSB3aWRnZXQuaWQpOwogICAgcmV0dXJuIGxheW91dEl0ZW0gPyB7IC4uLndpZGdldCwgLi4ubGF5b3V0SXRlbSB9IDogd2lkZ2V0OwogIH0pOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvaW50ZXJhY3Rpb24uanMKdmFyIGNvbXB1dGVHcmlkQ29vcmRpbmF0ZXMgPSAoeyBwb2ludGVyLCBjb250YWluZXJSZWN0LCBtZXRyaWNzLCBjb2x1bW5zLCB3aWRnZXQsIHJ0bCwgZHJhZ09mZnNldFggPSAwLCBkcmFnT2Zmc2V0WSA9IDAgfSkgPT4gewogIGNvbnN0IHJlbGF0aXZlWCA9IHBvaW50ZXIuY2xpZW50WCAtIGNvbnRhaW5lclJlY3QubGVmdCAtIGRyYWdPZmZzZXRYOwogIGNvbnN0IHJlbGF0aXZlWSA9IHBvaW50ZXIuY2xpZW50WSAtIGNvbnRhaW5lclJlY3QudG9wIC0gZHJhZ09mZnNldFk7CiAgY29uc3QgbWFyZ2luWCA9IG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IG1hcmdpblkgPSBtZXRyaWNzLm1hcmdpblZlcnRpY2FsUHg7CiAgY29uc3QgY2VsbFdpZHRoID0gbWV0cmljcy5jZWxsV2lkdGhQeDsKICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgY29uc3QgY2xhbXAzID0gKHZhbHVlMiwgbWluMywgbWF4MykgPT4gTWF0aC5tYXgobWluMywgTWF0aC5taW4obWF4MywgdmFsdWUyKSk7CiAgY29uc3QgYWRqdXN0ZWRYID0gY2xhbXAzKHJlbGF0aXZlWCAtIG1hcmdpblgsIDAsIGNvbnRhaW5lclJlY3Qud2lkdGggLSBtYXJnaW5YKTsKICBjb25zdCBhZGp1c3RlZFkgPSBjbGFtcDMocmVsYXRpdmVZIC0gbWFyZ2luWSwgMCwgTnVtYmVyLlBPU0lUSVZFX0lORklOSVRZKTsKICBjb25zdCBjZWxsUGx1c01hcmdpblggPSBjZWxsV2lkdGggKyBtYXJnaW5YOwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IGNlbGxIZWlnaHQgKyBtYXJnaW5ZOwogIGxldCBncmlkWCA9IE1hdGgucm91bmQoYWRqdXN0ZWRYIC8gY2VsbFBsdXNNYXJnaW5YKTsKICBpZiAocnRsKSB7CiAgICBncmlkWCA9IGNvbHVtbnMgLSB3aWRnZXQudyAtIGdyaWRYOwogIH0KICBncmlkWCA9IGNsYW1wMyhncmlkWCwgMCwgY29sdW1ucyAtIHdpZGdldC53KTsKICBjb25zdCBncmlkWSA9IGNsYW1wMyhNYXRoLnJvdW5kKGFkanVzdGVkWSAvIGNlbGxQbHVzTWFyZ2luWSksIDAsIE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKTsKICByZXR1cm4geyB4OiBncmlkWCwgeTogZ3JpZFkgfTsKfTsKdmFyIGNvbXB1dGVSZXNpemVEaW1lbnNpb25zID0gKHsgcG9pbnRlciwgY29udGFpbmVyUmVjdCwgbWV0cmljcywgc3RhcnRXaWR0aCwgc3RhcnRIZWlnaHQsIHN0YXJ0UG9pbnRlciwgaGFuZGxlcjogaGFuZGxlcjIsIHdpZGdldCwgY29sdW1ucyB9KSA9PiB7CiAgY29uc3QgZGVsdGFYID0gcG9pbnRlci5jbGllbnRYIC0gc3RhcnRQb2ludGVyLmNsaWVudFg7CiAgY29uc3QgZGVsdGFZID0gcG9pbnRlci5jbGllbnRZIC0gc3RhcnRQb2ludGVyLmNsaWVudFk7CiAgbGV0IHdpZHRoID0gc3RhcnRXaWR0aDsKICBsZXQgaGVpZ2h0ID0gc3RhcnRIZWlnaHQ7CiAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogIGNvbnN0IGNlbGxQbHVzTWFyZ2luWSA9IG1ldHJpY3MuY2VsbEhlaWdodFB4ICsgbWV0cmljcy5tYXJnaW5WZXJ0aWNhbFB4OwogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygiZSIpKSB7CiAgICBjb25zdCBkZWx0YUNvbHMgPSBNYXRoLnJvdW5kKGRlbHRhWCAvIGNlbGxQbHVzTWFyZ2luWCk7CiAgICB3aWR0aCA9IHN0YXJ0V2lkdGggKyBkZWx0YUNvbHM7CiAgfQogIGlmIChoYW5kbGVyMi5pbmNsdWRlcygicyIpKSB7CiAgICBjb25zdCBkZWx0YVJvd3MgPSBNYXRoLnJvdW5kKGRlbHRhWSAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICBoZWlnaHQgPSBzdGFydEhlaWdodCArIGRlbHRhUm93czsKICB9CiAgY29uc3QgY2xhbXBlZFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgfHwgMSwgTWF0aC5taW4od2lkdGgsIHdpZGdldC5tYXhXIHx8IGNvbHVtbnMgLSB3aWRnZXQueCkpOwogIGNvbnN0IGNsYW1wZWRIZWlnaHQgPSBNYXRoLm1heCh3aWRnZXQubWluSCB8fCAxLCBNYXRoLm1pbihoZWlnaHQsIHdpZGdldC5tYXhIIHx8IE51bWJlci5NQVhfU0FGRV9JTlRFR0VSKSk7CiAgcmV0dXJuIHsKICAgIHdpZHRoOiBjbGFtcGVkV2lkdGgsCiAgICBoZWlnaHQ6IGNsYW1wZWRIZWlnaHQKICB9Owp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWRhc2hib2FyZGdyaWQvY29udGV4dG1lbnUuanMKdmFyIG9wZW5XaWRnZXRDb250ZXh0TWVudSA9ICh7IHdpZGdldCwgaG9zdCwgZXZlbnQgfSkgPT4gewogIGNvbnN0IGl0ZW1zID0gWwogICAgewogICAgICBuYW1lOiAiRGVsZXRlIHRpbGUiLAogICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICBob3N0LnJlbW92ZVdpZGdldCh3aWRnZXQuaWQpOwogICAgICAgIHJldHVybiBudWxsOwogICAgICB9CiAgICB9CiAgXTsKICBEZWVzQ29udGV4dG1lbnUub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIGl0ZW1zKTsKfTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1kYXNoYm9hcmRncmlkL2RlZXMtZGFzaGJvYXJkZ3JpZC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2RlZXNfaWNvbigpOwp2YXIgX19lc0RlY29yYXRlNzUgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc2ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzRGFzaGJvYXJkZ3JpZCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtZGFzaGJvYXJkZ3JpZCIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3dpZGdldHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF93aWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jZWxsSGVpZ2h0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2VsbEhlaWdodF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWFyZ2luX2RlY29yYXRvcnM7CiAgbGV0IF9tYXJnaW5faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYXJnaW5fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NvbHVtbnNfZGVjb3JhdG9yczsKICBsZXQgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jb2x1bW5zX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9kZWNvcmF0b3JzOwogIGxldCBfZWRpdGFibGVfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfZW5hYmxlQW5pbWF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9lbmFibGVBbmltYXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnM7CiAgbGV0IF9jZWxsSGVpZ2h0VW5pdF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ydGxfZGVjb3JhdG9yczsKICBsZXQgX3J0bF9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3J0bF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzOwogIGxldCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Nob3dHcmlkTGluZXNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2xheW91dHNfZGVjb3JhdG9yczsKICBsZXQgX2xheW91dHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9sYXlvdXRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnM7CiAgbGV0IF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzOwogIGxldCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21ldHJpY3NfZGVjb3JhdG9yczsKICBsZXQgX21ldHJpY3NfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZXRyaWNzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9yczsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZGVjb3JhdG9yczsKICBsZXQgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcHJldmlld1dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0Rhc2hib2FyZGdyaWQyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfd2lkZ2V0c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQXJyYXkgfSldOwogICAgICBfY2VsbEhlaWdodF9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX21hcmdpbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2NvbHVtbnNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciB9KV07CiAgICAgIF9lZGl0YWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9lbmFibGVBbmltYXRpb25fZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4sIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfY2VsbEhlaWdodFVuaXRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9ydGxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IEJvb2xlYW4gfSldOwogICAgICBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiB9KV07CiAgICAgIF9sYXlvdXRzX2RlY29yYXRvcnMgPSBbbjUoeyBhdHRyaWJ1dGU6IGZhbHNlIH0pXTsKICAgICAgX2FjdGl2ZUJyZWFrcG9pbnRfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9wbGFjZWhvbGRlclBvc2l0aW9uX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9tZXRyaWNzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycyA9IFtyNSgpXTsKICAgICAgX3ByZXZpZXdXaWRnZXRzX2RlY29yYXRvcnMgPSBbcjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF93aWRnZXRzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIndpZGdldHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIndpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoud2lkZ2V0cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoud2lkZ2V0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF93aWRnZXRzX2luaXRpYWxpemVycywgX3dpZGdldHNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfY2VsbEhlaWdodF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjZWxsSGVpZ2h0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmNlbGxIZWlnaHQsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmNlbGxIZWlnaHQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodF9pbml0aWFsaXplcnMsIF9jZWxsSGVpZ2h0X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21hcmdpbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtYXJnaW4iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1hcmdpbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYXJnaW4sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1hcmdpbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCBfbWFyZ2luX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NvbHVtbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY29sdW1ucyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY29sdW1ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jb2x1bW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jb2x1bW5zID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9lZGl0YWJsZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlZGl0YWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiZWRpdGFibGUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouZWRpdGFibGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVkaXRhYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2VkaXRhYmxlX2luaXRpYWxpemVycywgX2VkaXRhYmxlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2VuYWJsZUFuaW1hdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJlbmFibGVBbmltYXRpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImVuYWJsZUFuaW1hdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5lbmFibGVBbmltYXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmVuYWJsZUFuaW1hdGlvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9lbmFibGVBbmltYXRpb25faW5pdGlhbGl6ZXJzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2NlbGxIZWlnaHRVbml0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImNlbGxIZWlnaHRVbml0Iiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjZWxsSGVpZ2h0VW5pdCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jZWxsSGVpZ2h0VW5pdCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY2VsbEhlaWdodFVuaXQgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCBfY2VsbEhlaWdodFVuaXRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcnRsX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInJ0bCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicnRsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnJ0bCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucnRsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3J0bF9pbml0aWFsaXplcnMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfc2hvd0dyaWRMaW5lc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzaG93R3JpZExpbmVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzaG93R3JpZExpbmVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnNob3dHcmlkTGluZXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNob3dHcmlkTGluZXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc2hvd0dyaWRMaW5lc19pbml0aWFsaXplcnMsIF9zaG93R3JpZExpbmVzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX2xheW91dHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibGF5b3V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGF5b3V0cyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5sYXlvdXRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5sYXlvdXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9hY3RpdmVCcmVha3BvaW50X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImFjdGl2ZUJyZWFrcG9pbnQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImFjdGl2ZUJyZWFrcG9pbnQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouYWN0aXZlQnJlYWtwb2ludCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYWN0aXZlQnJlYWtwb2ludCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9hY3RpdmVCcmVha3BvaW50X2luaXRpYWxpemVycywgX2FjdGl2ZUJyZWFrcG9pbnRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3NSh0aGlzLCBudWxsLCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwbGFjZWhvbGRlclBvc2l0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwbGFjZWhvbGRlclBvc2l0aW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24sIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGxhY2Vob2xkZXJQb3NpdGlvbl9pbml0aWFsaXplcnMsIF9wbGFjZWhvbGRlclBvc2l0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUodGhpcywgbnVsbCwgX21ldHJpY3NfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWV0cmljcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWV0cmljcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZXRyaWNzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tZXRyaWNzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21ldHJpY3NfaW5pdGlhbGl6ZXJzLCBfbWV0cmljc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9yZXNvbHZlZE1hcmdpbnNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVzb2x2ZWRNYXJnaW5zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJyZXNvbHZlZE1hcmdpbnMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucmVzb2x2ZWRNYXJnaW5zLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZXNvbHZlZE1hcmdpbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcmVzb2x2ZWRNYXJnaW5zX2luaXRpYWxpemVycywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc1KHRoaXMsIG51bGwsIF9wcmV2aWV3V2lkZ2V0c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwcmV2aWV3V2lkZ2V0cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicHJldmlld1dpZGdldHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucHJldmlld1dpZGdldHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnByZXZpZXdXaWRnZXRzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgX3ByZXZpZXdXaWRnZXRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzUobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzRGFzaGJvYXJkZ3JpZDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ2OwogICAgc3RhdGljIHN0eWxlcyA9IGRhc2hib2FyZEdyaWRTdHlsZXM7CiAgICAjd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19pbml0aWFsaXplcnMsIFtdKTsKICAgIGdldCB3aWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jd2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHdpZGdldHModmFsdWUyKSB7CiAgICAgIHRoaXMuI3dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfd2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfaW5pdGlhbGl6ZXJzLCA4MCkpOwogICAgZ2V0IGNlbGxIZWlnaHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY2VsbEhlaWdodCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY2VsbEhlaWdodF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tYXJnaW5faW5pdGlhbGl6ZXJzLCAxMCkpOwogICAgZ2V0IG1hcmdpbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI21hcmdpbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hcmdpbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWFyZ2luX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21hcmdpbl9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NvbHVtbnNfaW5pdGlhbGl6ZXJzLCAxMikpOwogICAgZ2V0IGNvbHVtbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjb2x1bW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY29sdW1ucyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY29sdW1uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2VkaXRhYmxlX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY29sdW1uc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VkaXRhYmxlX2luaXRpYWxpemVycywgdHJ1ZSkpOwogICAgZ2V0IGVkaXRhYmxlKCkgewogICAgICByZXR1cm4gdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlZGl0YWJsZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jZWRpdGFibGVfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9lZGl0YWJsZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2VuYWJsZUFuaW1hdGlvbl9pbml0aWFsaXplcnMsIHRydWUpKTsKICAgIGdldCBlbmFibGVBbmltYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNlbmFibGVBbmltYXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBlbmFibGVBbmltYXRpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI2VuYWJsZUFuaW1hdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2NlbGxIZWlnaHRVbml0X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfZW5hYmxlQW5pbWF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfY2VsbEhlaWdodFVuaXRfaW5pdGlhbGl6ZXJzLCAicHgiKSk7CiAgICBnZXQgY2VsbEhlaWdodFVuaXQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGNlbGxIZWlnaHRVbml0KHZhbHVlMikgewogICAgICB0aGlzLiNjZWxsSGVpZ2h0VW5pdF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2NlbGxIZWlnaHRVbml0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfcnRsX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBydGwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNydGxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBydGwodmFsdWUyKSB7CiAgICAgIHRoaXMuI3J0bF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9ydGxfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9zaG93R3JpZExpbmVzX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBzaG93R3JpZExpbmVzKCkgewogICAgICByZXR1cm4gdGhpcy4jc2hvd0dyaWRMaW5lc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHNob3dHcmlkTGluZXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3Nob3dHcmlkTGluZXNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNsYXlvdXRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfc2hvd0dyaWRMaW5lc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2xheW91dHNfaW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCBsYXlvdXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jbGF5b3V0c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxheW91dHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2xheW91dHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNhY3RpdmVCcmVha3BvaW50X2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfbGF5b3V0c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX2FjdGl2ZUJyZWFrcG9pbnRfaW5pdGlhbGl6ZXJzLCAiYmFzZSIpKTsKICAgIGdldCBhY3RpdmVCcmVha3BvaW50KCkgewogICAgICByZXR1cm4gdGhpcy4jYWN0aXZlQnJlYWtwb2ludF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGFjdGl2ZUJyZWFrcG9pbnQodmFsdWUyKSB7CiAgICAgIHRoaXMuI2FjdGl2ZUJyZWFrcG9pbnRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM3Nih0aGlzLCBfYWN0aXZlQnJlYWtwb2ludF9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25faW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcGxhY2Vob2xkZXJQb3NpdGlvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BsYWNlaG9sZGVyUG9zaXRpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwbGFjZWhvbGRlclBvc2l0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNwbGFjZWhvbGRlclBvc2l0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3BsYWNlaG9sZGVyUG9zaXRpb25fZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9tZXRyaWNzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IG1ldHJpY3MoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXRyaWNzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWV0cmljcyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWV0cmljc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3Jlc29sdmVkTWFyZ2luc19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX21ldHJpY3NfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9yZXNvbHZlZE1hcmdpbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgcmVzb2x2ZWRNYXJnaW5zKCkgewogICAgICByZXR1cm4gdGhpcy4jcmVzb2x2ZWRNYXJnaW5zX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVzb2x2ZWRNYXJnaW5zKHZhbHVlMikgewogICAgICB0aGlzLiNyZXNvbHZlZE1hcmdpbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNwcmV2aWV3V2lkZ2V0c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3Jlc29sdmVkTWFyZ2luc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzYodGhpcywgX3ByZXZpZXdXaWRnZXRzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IHByZXZpZXdXaWRnZXRzKCkgewogICAgICByZXR1cm4gdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwcmV2aWV3V2lkZ2V0cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcHJldmlld1dpZGdldHNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnRhaW5lckJvdW5kcyA9IChfX3J1bkluaXRpYWxpemVyczc2KHRoaXMsIF9wcmV2aWV3V2lkZ2V0c19leHRyYUluaXRpYWxpemVycyksIG51bGwpOwogICAgZHJhZ1N0YXRlID0gbnVsbDsKICAgIHJlc2l6ZVN0YXRlID0gbnVsbDsKICAgIHJlc2l6ZU9ic2VydmVyOwogICAgaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgICBhd2FpdCBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIHRoaXMub2JzZXJ2ZVJlc2l6ZSgpOwogICAgfQogICAgYXN5bmMgZGlzY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICAgIGF3YWl0IHN1cGVyLmRpc2Nvbm5lY3RlZENhbGxiYWNrKCk7CiAgICAgIHRoaXMuZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCk7CiAgICAgIHRoaXMucmVsZWFzZVBvaW50ZXJFdmVudHMoKTsKICAgIH0KICAgIHVwZGF0ZWQoY2hhbmdlZCkgewogICAgICBpZiAoY2hhbmdlZC5oYXMoIm1hcmdpbiIpIHx8IGNoYW5nZWQuaGFzKCJjb2x1bW5zIikgfHwgY2hhbmdlZC5oYXMoImNlbGxIZWlnaHQiKSB8fCBjaGFuZ2VkLmhhcygiY2VsbEhlaWdodFVuaXQiKSkgewogICAgICAgIHRoaXMuY29tcHV0ZU1ldHJpY3MoKTsKICAgICAgfQogICAgICBpZiAoY2hhbmdlZC5oYXMoIndpZGdldHMiKSAmJiAhdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSkgewogICAgICAgIHRoaXMubm90aWZ5TGF5b3V0Q2hhbmdlKCk7CiAgICAgIH0KICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgY29uc3QgYmFzZVdpZGdldHMgPSB0aGlzLndpZGdldHM7CiAgICAgIGlmIChiYXNlV2lkZ2V0cy5sZW5ndGggPT09IDApIHsKICAgICAgICByZXR1cm4gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgPGRlZXMtaWNvbiAuaWNvbj0keyJsdWNpZGU6bGF5b3V0R3JpZCJ9PjwvZGVlcy1pY29uPgogICAgICAgICAgPGRpdj5ObyB3aWRnZXRzIGNvbmZpZ3VyZWQ8L2Rpdj4KICAgICAgICAgIDxkaXYgc3R5bGU9ImZvbnQtc2l6ZTogMTRweDsgbWFyZ2luLXRvcDogOHB4OyI+QWRkIHdpZGdldHMgdG8gcG9wdWxhdGUgdGhlIGRhc2hib2FyZDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgICB9CiAgICAgIGNvbnN0IG1ldHJpY3MgPSB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgY29uc3QgbWFyZ2lucyA9IHRoaXMucmVzb2x2ZWRNYXJnaW5zID8/IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgY29uc3QgY2VsbEhlaWdodCA9IG1ldHJpY3MuY2VsbEhlaWdodFB4OwogICAgICBjb25zdCBsYXlvdXRGb3JIZWlnaHQgPSB0aGlzLnByZXZpZXdXaWRnZXRzID8/IHRoaXMud2lkZ2V0czsKICAgICAgY29uc3QgZ3JpZEhlaWdodCA9IGNhbGN1bGF0ZUdyaWRIZWlnaHQobGF5b3V0Rm9ySGVpZ2h0LCBtYXJnaW5zLCBjZWxsSGVpZ2h0KTsKICAgICAgY29uc3QgcHJldmlld01hcCA9IHRoaXMucHJldmlld1dpZGdldHMgPyBuZXcgTWFwKHRoaXMucHJldmlld1dpZGdldHMubWFwKCh3aWRnZXQpID0+IFt3aWRnZXQuaWQsIHdpZGdldF0pKSA6IG51bGw7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0iZ3JpZC1jb250YWluZXIiIHN0eWxlPSJoZWlnaHQ6ICR7Z3JpZEhlaWdodH1weDsiPgogICAgICAgICR7dGhpcy5zaG93R3JpZExpbmVzID8gdGhpcy5yZW5kZXJHcmlkTGluZXMobWV0cmljcywgZ3JpZEhlaWdodCkgOiBudWxsfQogICAgICAgICR7YmFzZVdpZGdldHMubWFwKCh3aWRnZXQpID0+IHRoaXMucmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkpfQogICAgICAgICR7dGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID8gdGhpcy5yZW5kZXJQbGFjZWhvbGRlcihtZXRyaWNzLCBtYXJnaW5zKSA6IG51bGx9CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlckdyaWRMaW5lcyhtZXRyaWNzLCBncmlkSGVpZ2h0KSB7CiAgICAgIGNvbnN0IHZlcnRpY2FsID0gW107CiAgICAgIGNvbnN0IGhvcml6b250YWwgPSBbXTsKICAgICAgY29uc3QgY2VsbFBsdXNNYXJnaW5YID0gbWV0cmljcy5jZWxsV2lkdGhQeCArIG1ldHJpY3MubWFyZ2luSG9yaXpvbnRhbFB4OwogICAgICBjb25zdCBjZWxsUGx1c01hcmdpblkgPSBtZXRyaWNzLmNlbGxIZWlnaHRQeCArIG1ldHJpY3MubWFyZ2luVmVydGljYWxQeDsKICAgICAgZm9yIChsZXQgaTExID0gMDsgaTExIDw9IHRoaXMuY29sdW1uczsgaTExKyspIHsKICAgICAgICBjb25zdCBsZWZ0UHggPSBpMTEgKiBjZWxsUGx1c01hcmdpblggKyBtZXRyaWNzLm1hcmdpbkhvcml6b250YWxQeDsKICAgICAgICBjb25zdCBsZWZ0UGVyY2VudCA9IHRoaXMucHhUb1BlcmNlbnQobGVmdFB4LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgICB2ZXJ0aWNhbC5wdXNoKGIyYDxkaXYgY2xhc3M9ImdyaWQtbGluZS12ZXJ0aWNhbCIgc3R5bGU9ImxlZnQ6ICR7bGVmdFBlcmNlbnR9JTsiPjwvZGl2PmApOwogICAgICB9CiAgICAgIGNvbnN0IHJvd3MgPSBNYXRoLmNlaWwoZ3JpZEhlaWdodCAvIGNlbGxQbHVzTWFyZ2luWSk7CiAgICAgIGZvciAobGV0IHJvdyA9IDA7IHJvdyA8PSByb3dzOyByb3crKykgewogICAgICAgIGNvbnN0IHRvcCA9IHJvdyAqIGNlbGxQbHVzTWFyZ2luWTsKICAgICAgICBob3Jpem9udGFsLnB1c2goYjJgPGRpdiBjbGFzcz0iZ3JpZC1saW5lLWhvcml6b250YWwiIHN0eWxlPSJ0b3A6ICR7dG9wfXB4OyI+PC9kaXY+YCk7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJncmlkLWxpbmVzIj4KICAgICAgICAke3ZlcnRpY2FsfQogICAgICAgICR7aG9yaXpvbnRhbH0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgcmVuZGVyV2lkZ2V0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucywgcHJldmlld01hcCkgewogICAgICBjb25zdCBpc0RyYWdnaW5nID0gdGhpcy5kcmFnU3RhdGU/LndpZGdldElkID09PSB3aWRnZXQuaWQ7CiAgICAgIGNvbnN0IGlzUmVzaXppbmcgPSB0aGlzLnJlc2l6ZVN0YXRlPy53aWRnZXRJZCA9PT0gd2lkZ2V0LmlkOwogICAgICBjb25zdCBpc0xvY2tlZCA9IHdpZGdldC5sb2NrZWQgfHwgIXRoaXMuZWRpdGFibGU7CiAgICAgIGNvbnN0IHByZXZpZXdXaWRnZXQgPSBwcmV2aWV3TWFwPy5nZXQod2lkZ2V0LmlkKSA/PyBudWxsOwogICAgICBjb25zdCBsYXlvdXRGb3JSZW5kZXIgPSBpc0RyYWdnaW5nID8gd2lkZ2V0IDogcHJldmlld1dpZGdldCA/PyB3aWRnZXQ7CiAgICAgIGNvbnN0IHJlY3QgPSB0aGlzLmNvbXB1dGVXaWRnZXRSZWN0KGxheW91dEZvclJlbmRlciwgbWV0cmljcywgbWFyZ2lucyk7CiAgICAgIGNvbnN0IHNpZGVQcm9wZXJ0eSA9IHRoaXMucnRsID8gInJpZ2h0IiA6ICJsZWZ0IjsKICAgICAgY29uc3Qgc2lkZVZhbHVlID0gdGhpcy5weFRvUGVyY2VudChyZWN0LmxlZnQsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBjb25zdCB3aWR0aFBlcmNlbnQgPSB0aGlzLnB4VG9QZXJjZW50KHJlY3Qud2lkdGgsIG1ldHJpY3MuY29udGFpbmVyV2lkdGgpOwogICAgICBsZXQgdHJhbnNmb3JtMiA9ICIiOwogICAgICBpZiAoaXNEcmFnZ2luZyAmJiB0aGlzLmRyYWdTdGF0ZT8uY3VycmVudFBvaW50ZXIpIHsKICAgICAgICBjb25zdCBwb2ludGVyID0gdGhpcy5kcmFnU3RhdGUuY3VycmVudFBvaW50ZXI7CiAgICAgICAgY29uc3QgYm91bmRzID0gdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgICBjb25zdCB0cmFuc2xhdGVYID0gcG9pbnRlci5jbGllbnRYIC0gYm91bmRzLmxlZnQgLSB0aGlzLmRyYWdTdGF0ZS5vZmZzZXRYIC0gcmVjdC5sZWZ0OwogICAgICAgIGNvbnN0IHRyYW5zbGF0ZVkgPSBwb2ludGVyLmNsaWVudFkgLSBib3VuZHMudG9wIC0gdGhpcy5kcmFnU3RhdGUub2Zmc2V0WSAtIHJlY3QudG9wOwogICAgICAgIHRyYW5zZm9ybTIgPSBgdHJhbnNmb3JtOiB0cmFuc2xhdGUoJHt0cmFuc2xhdGVYfXB4LCAke3RyYW5zbGF0ZVl9cHgpO2A7CiAgICAgIH0KICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0ICR7aXNEcmFnZ2luZyA/ICJkcmFnZ2luZyIgOiAiIn0gJHtpc1Jlc2l6aW5nID8gInJlc2l6aW5nIiA6ICIifSIKICAgICAgICBzdHlsZT0iCiAgICAgICAgICAke3NpZGVQcm9wZXJ0eX06ICR7c2lkZVZhbHVlfSU7CiAgICAgICAgICB0b3A6ICR7cmVjdC50b3B9cHg7CiAgICAgICAgICB3aWR0aDogJHt3aWR0aFBlcmNlbnR9JTsKICAgICAgICAgIGhlaWdodDogJHtyZWN0LmhlaWdodH1weDsKICAgICAgICAgICR7dHJhbnNmb3JtMn0KICAgICAgICAiCiAgICAgICAgZGF0YS13aWRnZXQtaWQ9JHt3aWRnZXQuaWR9CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJ3aWRnZXQtY29udGVudCI+CiAgICAgICAgICAke3dpZGdldC50aXRsZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0id2lkZ2V0LWhlYWRlciAke2lzTG9ja2VkID8gImxvY2tlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IChldnQpID0+IHRoaXMuc3RhcnREcmFnKGV2dCwgd2lkZ2V0KSA6IG51bGx9CiAgICAgICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhldnQpID0+IHRoaXMuaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgICB0YWJpbmRleD0keyFpc0xvY2tlZCAmJiAhd2lkZ2V0Lm5vTW92ZSA/IDAgOiAtMX0KICAgICAgICAgICAgICAgICAgQGtleWRvd249JHsoZXZ0KSA9PiB0aGlzLmhhbmRsZUhlYWRlcktleWRvd24oZXZ0LCB3aWRnZXQpfQogICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAke3dpZGdldC5pY29uID8gYjJgPGRlZXMtaWNvbiAuaWNvbj0ke3dpZGdldC5pY29ufT48L2RlZXMtaWNvbj5gIDogbnVsbH0KICAgICAgICAgICAgICAgICAgJHt3aWRnZXQudGl0bGV9CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogbnVsbH0KICAgICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1ib2R5ICR7d2lkZ2V0LnRpdGxlID8gImhhcy1oZWFkZXIiIDogIiJ9Ij4KICAgICAgICAgICAgJHt3aWRnZXQuY29udGVudH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgJHshaXNMb2NrZWQgJiYgIXdpZGdldC5ub1Jlc2l6ZSA/IGIyYAogICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICBjbGFzcz0icmVzaXplLWhhbmRsZSByZXNpemUtaGFuZGxlLWUiCiAgICAgICAgICAgICAgICAgIEBwb2ludGVyZG93bj0keyhldnQpID0+IHRoaXMuc3RhcnRSZXNpemUoZXZ0LCB3aWRnZXQsICJlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlIHJlc2l6ZS1oYW5kbGUtcyIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInMiKX0KICAgICAgICAgICAgICAgID48L2Rpdj4KICAgICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgICAgY2xhc3M9InJlc2l6ZS1oYW5kbGUgcmVzaXplLWhhbmRsZS1zZSIKICAgICAgICAgICAgICAgICAgQHBvaW50ZXJkb3duPSR7KGV2dCkgPT4gdGhpcy5zdGFydFJlc2l6ZShldnQsIHdpZGdldCwgInNlIil9CiAgICAgICAgICAgICAgICA+PC9kaXY+CiAgICAgICAgICAgICAgYCA6IG51bGx9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICAgIH0KICAgIHJlbmRlclBsYWNlaG9sZGVyKG1ldHJpY3MsIG1hcmdpbnMpIHsKICAgICAgaWYgKCF0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24pIHsKICAgICAgICByZXR1cm4gYjJgYDsKICAgICAgfQogICAgICBjb25zdCByZWN0ID0gdGhpcy5jb21wdXRlV2lkZ2V0UmVjdCh0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24sIG1ldHJpY3MsIG1hcmdpbnMpOwogICAgICBjb25zdCBzaWRlUHJvcGVydHkgPSB0aGlzLnJ0bCA/ICJyaWdodCIgOiAibGVmdCI7CiAgICAgIGNvbnN0IHNpZGVWYWx1ZSA9IHRoaXMucHhUb1BlcmNlbnQocmVjdC5sZWZ0LCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgY29uc3Qgd2lkdGhQZXJjZW50ID0gdGhpcy5weFRvUGVyY2VudChyZWN0LndpZHRoLCBtZXRyaWNzLmNvbnRhaW5lcldpZHRoKTsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2CiAgICAgICAgY2xhc3M9ImdyaWQtd2lkZ2V0IHBsYWNlaG9sZGVyIgogICAgICAgIHN0eWxlPSIKICAgICAgICAgICR7c2lkZVByb3BlcnR5fTogJHtzaWRlVmFsdWV9JTsKICAgICAgICAgIHRvcDogJHtyZWN0LnRvcH1weDsKICAgICAgICAgIHdpZHRoOiAke3dpZHRoUGVyY2VudH0lOwogICAgICAgICAgaGVpZ2h0OiAke3JlY3QuaGVpZ2h0fXB4OwogICAgICAgICIKICAgICAgPgogICAgICAgIDxkaXYgY2xhc3M9IndpZGdldC1jb250ZW50Ij48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgc3RhcnREcmFnKGV2ZW50LCB3aWRnZXQpIHsKICAgICAgaWYgKCF0aGlzLmVkaXRhYmxlIHx8IHdpZGdldC5ub01vdmUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgY29uc3Qgd2lkZ2V0RWxlbWVudCA9IGV2ZW50LmN1cnJlbnRUYXJnZXQuY2xvc2VzdCgiLmdyaWQtd2lkZ2V0Iik7CiAgICAgIGlmICghd2lkZ2V0RWxlbWVudCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCB3aWRnZXRSZWN0ID0gd2lkZ2V0RWxlbWVudC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTsKICAgICAgdGhpcy5jb250YWluZXJCb3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmVuc3VyZU1ldHJpY3MoKTsKICAgICAgdGhpcy5kcmFnU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBvZmZzZXRYOiBldmVudC5jbGllbnRYIC0gd2lkZ2V0UmVjdC5sZWZ0LAogICAgICAgIG9mZnNldFk6IGV2ZW50LmNsaWVudFkgLSB3aWRnZXRSZWN0LnRvcCwKICAgICAgICBzdGFydDogeyBpZDogd2lkZ2V0LmlkLCB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9LAogICAgICAgIHByZXZpb3VzUG9zaXRpb246IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfSwKICAgICAgICBjdXJyZW50UG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgbGFzdFBsYWNlbWVudDogbnVsbAogICAgICB9OwogICAgICB0aGlzLmludGVyYWN0aW9uQWN0aXZlID0gdHJ1ZTsKICAgICAgZXZlbnQuY3VycmVudFRhcmdldC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVybW92ZSIsIHRoaXMuaGFuZGxlRHJhZ01vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZURyYWdFbmQpOwogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH07CiAgICB9CiAgICBoYW5kbGVEcmFnTW92ZSA9IChldmVudCkgPT4gewogICAgICBpZiAoIXRoaXMuZHJhZ1N0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMuZHJhZ1N0YXRlLndpZGdldElkKTsKICAgICAgaWYgKCF3aWRnZXQpCiAgICAgICAgcmV0dXJuOwogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCBwcmV2aW91c1Bvc2l0aW9uID0gdGhpcy5kcmFnU3RhdGUucHJldmlvdXNQb3NpdGlvbjsKICAgICAgY29uc3QgY29vcmRzID0gY29tcHV0ZUdyaWRDb29yZGluYXRlcyh7CiAgICAgICAgcG9pbnRlcjogeyBjbGllbnRYOiBldmVudC5jbGllbnRYLCBjbGllbnRZOiBldmVudC5jbGllbnRZIH0sCiAgICAgICAgY29udGFpbmVyUmVjdDogdGhpcy5jb250YWluZXJCb3VuZHMgPz8gdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKSwKICAgICAgICBtZXRyaWNzLAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucywKICAgICAgICB3aWRnZXQsCiAgICAgICAgcnRsOiB0aGlzLnJ0bCwKICAgICAgICBkcmFnT2Zmc2V0WDogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WCwKICAgICAgICBkcmFnT2Zmc2V0WTogdGhpcy5kcmFnU3RhdGUub2Zmc2V0WQogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogY29vcmRzLngsIHk6IGNvb3Jkcy55IH0sIHRoaXMuY29sdW1ucywgcHJldmlvdXNQb3NpdGlvbik7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICBjb25zdCB1cGRhdGVkV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0LmlkKTsKICAgICAgICB0aGlzLmRyYWdTdGF0ZSA9IHsKICAgICAgICAgIC4uLnRoaXMuZHJhZ1N0YXRlLAogICAgICAgICAgY3VycmVudFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgICAgbGFzdFBsYWNlbWVudDogcGxhY2VtZW50LAogICAgICAgICAgcHJldmlvdXNQb3NpdGlvbjogdXBkYXRlZFdpZGdldCA/IHsgaWQ6IHVwZGF0ZWRXaWRnZXQuaWQsIHg6IHVwZGF0ZWRXaWRnZXQueCwgeTogdXBkYXRlZFdpZGdldC55LCB3OiB1cGRhdGVkV2lkZ2V0LncsIGg6IHVwZGF0ZWRXaWRnZXQuaCB9IDogeyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9CiAgICAgICAgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0geyBpZDogd2lkZ2V0LmlkLCB4OiBjb29yZHMueCwgeTogY29vcmRzLnksIHc6IHdpZGdldC53LCBoOiB3aWRnZXQuaCB9OwogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB9CiAgICAgIHRoaXMucmVxdWVzdFVwZGF0ZSgpOwogICAgfTsKICAgIGhhbmRsZURyYWdFbmQgPSAoZXZlbnQpID0+IHsKICAgICAgY29uc3QgZHJhZ1N0YXRlID0gdGhpcy5kcmFnU3RhdGU7CiAgICAgIGlmICghZHJhZ1N0YXRlIHx8IGV2ZW50LnBvaW50ZXJJZCAhPT0gZHJhZ1N0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCB0YXJnZXQgPSB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPz8gZHJhZ1N0YXRlLnN0YXJ0OwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KGxheW91dFNvdXJjZSwgZHJhZ1N0YXRlLndpZGdldElkLCB7IHg6IHRhcmdldC54LCB5OiB0YXJnZXQueSB9LCB0aGlzLmNvbHVtbnMsIGRyYWdTdGF0ZS5wcmV2aW91c1Bvc2l0aW9uKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIGNvbnN0IGZpbmFsV2lkZ2V0ID0gcGxhY2VtZW50LndpZGdldHMuZmluZCgodzMpID0+IHczLmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQpOwogICAgICAgIGlmIChmaW5hbFdpZGdldCkgewogICAgICAgICAgY29uc3QgaGFzT3ZlcmxhcCA9IHBsYWNlbWVudC53aWRnZXRzLnNvbWUoKHczKSA9PiB7CiAgICAgICAgICAgIGlmICh3My5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkKQogICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgcmV0dXJuIGZpbmFsV2lkZ2V0LnggPCB3My54ICsgdzMudyAmJiBmaW5hbFdpZGdldC54ICsgZmluYWxXaWRnZXQudyA+IHczLnggJiYgZmluYWxXaWRnZXQueSA8IHczLnkgKyB3My5oICYmIGZpbmFsV2lkZ2V0LnkgKyBmaW5hbFdpZGdldC5oID4gdzMueTsKICAgICAgICAgIH0pOwogICAgICAgICAgaWYgKCFoYXNPdmVybGFwKSB7CiAgICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgZHJhZ1N0YXRlLndpZGdldElkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgICAgIH0gZWxzZSB7CiAgICAgICAgICAgIHRoaXMud2lkZ2V0cyA9IHRoaXMud2lkZ2V0cy5tYXAoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSBkcmFnU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgeDogZHJhZ1N0YXRlLnN0YXJ0LngsIHk6IGRyYWdTdGF0ZS5zdGFydC55IH0gOiB3aWRnZXQpOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gZHJhZ1N0YXRlLndpZGdldElkID8geyAuLi53aWRnZXQsIHg6IGRyYWdTdGF0ZS5zdGFydC54LCB5OiBkcmFnU3RhdGUuc3RhcnQueSB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLmRyYWdTdGF0ZSA9IG51bGw7CiAgICAgIHRoaXMuaW50ZXJhY3Rpb25BY3RpdmUgPSBmYWxzZTsKICAgICAgdGhpcy5yZWxlYXNlUG9pbnRlckV2ZW50cygpOwogICAgfTsKICAgIHN0YXJ0UmVzaXplKGV2ZW50LCB3aWRnZXQsIGhhbmRsZXIyKSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9SZXNpemUgfHwgd2lkZ2V0LmxvY2tlZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgdGhpcy5lbnN1cmVNZXRyaWNzKCk7CiAgICAgIHRoaXMucmVzaXplU3RhdGUgPSB7CiAgICAgICAgd2lkZ2V0SWQ6IHdpZGdldC5pZCwKICAgICAgICBwb2ludGVySWQ6IGV2ZW50LnBvaW50ZXJJZCwKICAgICAgICBoYW5kbGVyOiBoYW5kbGVyMiwKICAgICAgICBzdGFydFBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIHN0YXJ0OiB7IGlkOiB3aWRnZXQuaWQsIHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogd2lkZ2V0LncsIGg6IHdpZGdldC5oIH0sCiAgICAgICAgc3RhcnRXaWR0aDogd2lkZ2V0LncsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHdpZGdldC5oLAogICAgICAgIGxhc3RQbGFjZW1lbnQ6IG51bGwKICAgICAgfTsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IHRydWU7CiAgICAgIGV2ZW50LmN1cnJlbnRUYXJnZXQuc2V0UG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTsKICAgICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsgaWQ6IHdpZGdldC5pZCwgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiB3aWRnZXQudywgaDogd2lkZ2V0LmggfTsKICAgIH0KICAgIGhhbmRsZVJlc2l6ZU1vdmUgPSAoZXZlbnQpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6ZVN0YXRlKQogICAgICAgIHJldHVybjsKICAgICAgY29uc3QgbWV0cmljcyA9IHRoaXMuZW5zdXJlTWV0cmljcygpOwogICAgICBjb25zdCBhY3RpdmVXaWRnZXRzID0gdGhpcy53aWRnZXRzOwogICAgICBjb25zdCB3aWRnZXQgPSBhY3RpdmVXaWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHRoaXMucmVzaXplU3RhdGUud2lkZ2V0SWQpOwogICAgICBpZiAoIXdpZGdldCkKICAgICAgICByZXR1cm47CiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICAgIGNvbnN0IG5leHRTaXplID0gY29tcHV0ZVJlc2l6ZURpbWVuc2lvbnMoewogICAgICAgIHBvaW50ZXI6IHsgY2xpZW50WDogZXZlbnQuY2xpZW50WCwgY2xpZW50WTogZXZlbnQuY2xpZW50WSB9LAogICAgICAgIGNvbnRhaW5lclJlY3Q6IHRoaXMuY29udGFpbmVyQm91bmRzID8/IHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCksCiAgICAgICAgbWV0cmljcywKICAgICAgICBzdGFydFdpZHRoOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0V2lkdGgsCiAgICAgICAgc3RhcnRIZWlnaHQ6IHRoaXMucmVzaXplU3RhdGUuc3RhcnRIZWlnaHQsCiAgICAgICAgc3RhcnRQb2ludGVyOiB0aGlzLnJlc2l6ZVN0YXRlLnN0YXJ0UG9pbnRlciwKICAgICAgICBoYW5kbGVyOiB0aGlzLnJlc2l6ZVN0YXRlLmhhbmRsZXIsCiAgICAgICAgd2lkZ2V0LAogICAgICAgIGNvbHVtbnM6IHRoaXMuY29sdW1ucwogICAgICB9KTsKICAgICAgY29uc3QgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudChhY3RpdmVXaWRnZXRzLCB3aWRnZXQuaWQsIHsgeDogd2lkZ2V0LngsIHk6IHdpZGdldC55LCB3OiBuZXh0U2l6ZS53aWR0aCwgaDogbmV4dFNpemUuaGVpZ2h0IH0sIHRoaXMuY29sdW1ucywgdGhpcy5yZXNpemVTdGF0ZS5zdGFydCk7CiAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICB0aGlzLnJlc2l6ZVN0YXRlID0geyAuLi50aGlzLnJlc2l6ZVN0YXRlLCBsYXN0UGxhY2VtZW50OiBwbGFjZW1lbnQgfTsKICAgICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gcGxhY2VtZW50LndpZGdldHM7CiAgICAgICAgY29uc3QgcHJldmlld1dpZGdldCA9IHBsYWNlbWVudC53aWRnZXRzLmZpbmQoKGl0ZW0pID0+IGl0ZW0uaWQgPT09IHdpZGdldC5pZCk7CiAgICAgICAgaWYgKHByZXZpZXdXaWRnZXQpIHsKICAgICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IHsKICAgICAgICAgICAgaWQ6IHByZXZpZXdXaWRnZXQuaWQsCiAgICAgICAgICAgIHg6IHByZXZpZXdXaWRnZXQueCwKICAgICAgICAgICAgeTogcHJldmlld1dpZGdldC55LAogICAgICAgICAgICB3OiBwcmV2aWV3V2lkZ2V0LncsCiAgICAgICAgICAgIGg6IHByZXZpZXdXaWRnZXQuaAogICAgICAgICAgfTsKICAgICAgICB9IGVsc2UgewogICAgICAgICAgdGhpcy5wbGFjZWhvbGRlclBvc2l0aW9uID0gewogICAgICAgICAgICBpZDogd2lkZ2V0LmlkLAogICAgICAgICAgICB4OiB3aWRnZXQueCwKICAgICAgICAgICAgeTogd2lkZ2V0LnksCiAgICAgICAgICAgIHc6IG5leHRTaXplLndpZHRoLAogICAgICAgICAgICBoOiBuZXh0U2l6ZS5oZWlnaHQKICAgICAgICAgIH07CiAgICAgICAgfQogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICAgIHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbiA9IG51bGw7CiAgICAgIH0KICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9OwogICAgaGFuZGxlUmVzaXplRW5kID0gKGV2ZW50KSA9PiB7CiAgICAgIGNvbnN0IHJlc2l6ZVN0YXRlID0gdGhpcy5yZXNpemVTdGF0ZTsKICAgICAgaWYgKCFyZXNpemVTdGF0ZSB8fCBldmVudC5wb2ludGVySWQgIT09IHJlc2l6ZVN0YXRlLnBvaW50ZXJJZCkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBjb25zdCBsYXlvdXRTb3VyY2UgPSB0aGlzLndpZGdldHM7CiAgICAgIHRoaXMucHJldmlld1dpZGdldHMgPSBudWxsOwogICAgICBjb25zdCBwbGFjZW1lbnQgPSByZXNpemVTdGF0ZS5sYXN0UGxhY2VtZW50ID8/IHJlc29sdmVXaWRnZXRQbGFjZW1lbnQobGF5b3V0U291cmNlLCByZXNpemVTdGF0ZS53aWRnZXRJZCwgewogICAgICAgIHg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueCA/PyByZXNpemVTdGF0ZS5zdGFydC54LAogICAgICAgIHk6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8ueSA/PyByZXNpemVTdGF0ZS5zdGFydC55LAogICAgICAgIHc6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8udyA/PyByZXNpemVTdGF0ZS5zdGFydC53LAogICAgICAgIGg6IHRoaXMucGxhY2Vob2xkZXJQb3NpdGlvbj8uaCA/PyByZXNpemVTdGF0ZS5zdGFydC5oCiAgICAgIH0sIHRoaXMuY29sdW1ucywgcmVzaXplU3RhdGUuc3RhcnQpOwogICAgICBpZiAocGxhY2VtZW50KSB7CiAgICAgICAgdGhpcy5jb21taXRQbGFjZW1lbnQocGxhY2VtZW50LCByZXNpemVTdGF0ZS53aWRnZXRJZCwgIndpZGdldC1yZXNpemUiKTsKICAgICAgfSBlbHNlIHsKICAgICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gcmVzaXplU3RhdGUud2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgdzogcmVzaXplU3RhdGUuc3RhcnQudywgaDogcmVzaXplU3RhdGUuc3RhcnQuaCB9IDogd2lkZ2V0KTsKICAgICAgfQogICAgICB0aGlzLnBsYWNlaG9sZGVyUG9zaXRpb24gPSBudWxsOwogICAgICB0aGlzLnJlc2l6ZVN0YXRlID0gbnVsbDsKICAgICAgdGhpcy5pbnRlcmFjdGlvbkFjdGl2ZSA9IGZhbHNlOwogICAgICB0aGlzLnJlbGVhc2VQb2ludGVyRXZlbnRzKCk7CiAgICB9OwogICAgaGFuZGxlSGVhZGVyS2V5ZG93bihldmVudCwgd2lkZ2V0KSB7CiAgICAgIGlmICghdGhpcy5lZGl0YWJsZSB8fCB3aWRnZXQubm9Nb3ZlIHx8IHdpZGdldC5sb2NrZWQpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3Qga2V5MiA9IGV2ZW50LmtleTsKICAgICAgY29uc3QgaXNSZXNpemUgPSBldmVudC5zaGlmdEtleTsKICAgICAgbGV0IHBsYWNlbWVudCA9IG51bGw7CiAgICAgIGlmIChpc1Jlc2l6ZSAmJiBbIkFycm93TGVmdCIsICJBcnJvd1JpZ2h0IiwgIkFycm93VXAiLCAiQXJyb3dEb3duIl0uaW5jbHVkZXMoa2V5MikpIHsKICAgICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICAgIGNvbnN0IGRlbHRhMiA9IGtleTIgPT09ICJBcnJvd1JpZ2h0IiB8fCBrZXkyID09PSAiQXJyb3dEb3duIiA/IDEgOiAtMTsKICAgICAgICBpZiAoa2V5MiA9PT0gIkFycm93TGVmdCIgfHwga2V5MiA9PT0gIkFycm93UmlnaHQiKSB7CiAgICAgICAgICBjb25zdCBtYXhXaWR0aCA9IHdpZGdldC5tYXhXID8/IHRoaXMuY29sdW1ucyAtIHdpZGdldC54OwogICAgICAgICAgY29uc3QgbmV4dFdpZHRoID0gTWF0aC5tYXgod2lkZ2V0Lm1pblcgPz8gMSwgTWF0aC5taW4obWF4V2lkdGgsIHdpZGdldC53ICsgZGVsdGEyKSk7CiAgICAgICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHdpZGdldC54LCB5OiB3aWRnZXQueSwgdzogbmV4dFdpZHRoLCBoOiB3aWRnZXQuaCB9LCB0aGlzLmNvbHVtbnMpOwogICAgICAgIH0gZWxzZSB7CiAgICAgICAgICBjb25zdCBtYXhIZWlnaHQgPSB3aWRnZXQubWF4SCA/PyBOdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFk7CiAgICAgICAgICBjb25zdCBuZXh0SGVpZ2h0ID0gTWF0aC5tYXgod2lkZ2V0Lm1pbkggPz8gMSwgTWF0aC5taW4obWF4SGVpZ2h0LCB3aWRnZXQuaCArIGRlbHRhMikpOwogICAgICAgICAgcGxhY2VtZW50ID0gcmVzb2x2ZVdpZGdldFBsYWNlbWVudCh0aGlzLndpZGdldHMsIHdpZGdldC5pZCwgeyB4OiB3aWRnZXQueCwgeTogd2lkZ2V0LnksIHc6IHdpZGdldC53LCBoOiBuZXh0SGVpZ2h0IH0sIHRoaXMuY29sdW1ucyk7CiAgICAgICAgfQogICAgICAgIGlmIChwbGFjZW1lbnQpIHsKICAgICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LXJlc2l6ZSIpOwogICAgICAgIH0KICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgY29uc3QgbW92ZU1hcCA9IHsKICAgICAgICBBcnJvd0xlZnQ6IHsgZHg6IC0xLCBkeTogMCB9LAogICAgICAgIEFycm93UmlnaHQ6IHsgZHg6IDEsIGR5OiAwIH0sCiAgICAgICAgQXJyb3dVcDogeyBkeDogMCwgZHk6IC0xIH0sCiAgICAgICAgQXJyb3dEb3duOiB7IGR4OiAwLCBkeTogMSB9CiAgICAgIH07CiAgICAgIGNvbnN0IGRlbHRhID0gbW92ZU1hcFtrZXkyXTsKICAgICAgaWYgKCFkZWx0YSkgewogICAgICAgIHJldHVybjsKICAgICAgfQogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBjb25zdCB0YXJnZXRYID0gTWF0aC5tYXgoMCwgTWF0aC5taW4odGhpcy5jb2x1bW5zIC0gd2lkZ2V0LncsIHdpZGdldC54ICsgZGVsdGEuZHgpKTsKICAgICAgY29uc3QgdGFyZ2V0WSA9IE1hdGgubWF4KDAsIHdpZGdldC55ICsgZGVsdGEuZHkpOwogICAgICBwbGFjZW1lbnQgPSByZXNvbHZlV2lkZ2V0UGxhY2VtZW50KHRoaXMud2lkZ2V0cywgd2lkZ2V0LmlkLCB7IHg6IHRhcmdldFgsIHk6IHRhcmdldFkgfSwgdGhpcy5jb2x1bW5zKTsKICAgICAgaWYgKHBsYWNlbWVudCkgewogICAgICAgIHRoaXMuY29tbWl0UGxhY2VtZW50KHBsYWNlbWVudCwgd2lkZ2V0LmlkLCAid2lkZ2V0LW1vdmUiKTsKICAgICAgfQogICAgfQogICAgaGFuZGxlV2lkZ2V0Q29udGV4dE1lbnUoZXZlbnQsIHdpZGdldCkgewogICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgICBldmVudC5zdG9wUHJvcGFnYXRpb24oKTsKICAgICAgb3BlbldpZGdldENvbnRleHRNZW51KHsgd2lkZ2V0LCBob3N0OiB0aGlzLCBldmVudCB9KTsKICAgIH0KICAgIGNvbW1pdFBsYWNlbWVudChyZXN1bHQsIHdpZGdldElkLCB0eXBlNSkgewogICAgICB0aGlzLnByZXZpZXdXaWRnZXRzID0gbnVsbDsKICAgICAgdGhpcy53aWRnZXRzID0gcmVzdWx0LndpZGdldHM7CiAgICAgIGNvbnN0IHN1YmplY3QgPSB0aGlzLndpZGdldHMuZmluZCgoaXRlbSkgPT4gaXRlbS5pZCA9PT0gd2lkZ2V0SWQpOwogICAgICBpZiAoc3ViamVjdCkgewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQodHlwZTUsIHsKICAgICAgICAgIGRldGFpbDogewogICAgICAgICAgICB3aWRnZXQ6IHN1YmplY3QsCiAgICAgICAgICAgIGRpc3BsYWNlZDogcmVzdWx0Lm1vdmVkV2lkZ2V0cy5maWx0ZXIoKGlkKSA9PiBpZCAhPT0gd2lkZ2V0SWQpLAogICAgICAgICAgICBzd2FwcGVkV2l0aDogcmVzdWx0LnN3YXBwZWRXaXRoCiAgICAgICAgICB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkpOwogICAgICB9CiAgICB9CiAgICByZW1vdmVXaWRnZXQod2lkZ2V0SWQpIHsKICAgICAgY29uc3QgdGFyZ2V0ID0gdGhpcy53aWRnZXRzLmZpbmQoKHdpZGdldCkgPT4gd2lkZ2V0LmlkID09PSB3aWRnZXRJZCk7CiAgICAgIGlmICghdGFyZ2V0KQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy53aWRnZXRzID0gdGhpcy53aWRnZXRzLmZpbHRlcigod2lkZ2V0KSA9PiB3aWRnZXQuaWQgIT09IHdpZGdldElkKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgid2lkZ2V0LXJlbW92ZSIsIHsKICAgICAgICBkZXRhaWw6IHsgd2lkZ2V0OiB0YXJnZXQgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pKTsKICAgIH0KICAgIHVwZGF0ZVdpZGdldCh3aWRnZXRJZCwgdXBkYXRlcykgewogICAgICB0aGlzLndpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+IHdpZGdldC5pZCA9PT0gd2lkZ2V0SWQgPyB7IC4uLndpZGdldCwgLi4udXBkYXRlcyB9IDogd2lkZ2V0KTsKICAgIH0KICAgIGdldExheW91dCgpIHsKICAgICAgcmV0dXJuIHRoaXMud2lkZ2V0cy5tYXAoKHsgaWQsIHg6IHgzLCB5OiB5NSwgdzogdzMsIGg6IGg5IH0pID0+ICh7IGlkLCB4OiB4MywgeTogeTUsIHc6IHczLCBoOiBoOSB9KSk7CiAgICB9CiAgICBzZXRMYXlvdXQobGF5b3V0KSB7CiAgICAgIHRoaXMud2lkZ2V0cyA9IGFwcGx5TGF5b3V0KHRoaXMud2lkZ2V0cywgbGF5b3V0KTsKICAgIH0KICAgIGxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gZmFsc2U7CiAgICB9CiAgICB1bmxvY2tHcmlkKCkgewogICAgICB0aGlzLmVkaXRhYmxlID0gdHJ1ZTsKICAgIH0KICAgIGFkZFdpZGdldCh3aWRnZXQsIGF1dG9Qb3NpdGlvbiA9IGZhbHNlKSB7CiAgICAgIGNvbnN0IG5leHRXaWRnZXQgPSB7IC4uLndpZGdldCB9OwogICAgICBpZiAoYXV0b1Bvc2l0aW9uIHx8IG5leHRXaWRnZXQuYXV0b1Bvc2l0aW9uKSB7CiAgICAgICAgY29uc3QgcG9zaXRpb24zID0gZmluZEF2YWlsYWJsZVBvc2l0aW9uKHRoaXMud2lkZ2V0cywgbmV4dFdpZGdldC53LCBuZXh0V2lkZ2V0LmgsIHRoaXMuY29sdW1ucyk7CiAgICAgICAgbmV4dFdpZGdldC54ID0gcG9zaXRpb24zLng7CiAgICAgICAgbmV4dFdpZGdldC55ID0gcG9zaXRpb24zLnk7CiAgICAgIH0KICAgICAgdGhpcy53aWRnZXRzID0gWy4uLnRoaXMud2lkZ2V0cywgbmV4dFdpZGdldF07CiAgICB9CiAgICBjb21wYWN0KGRpcmVjdGlvbiA9ICJ2ZXJ0aWNhbCIpIHsKICAgICAgY29uc3QgbmV4dFdpZGdldHMgPSB0aGlzLndpZGdldHMubWFwKCh3aWRnZXQpID0+ICh7IC4uLndpZGdldCB9KSk7CiAgICAgIGNvbXBhY3RMYXlvdXQobmV4dFdpZGdldHMsIGRpcmVjdGlvbik7CiAgICAgIHRoaXMud2lkZ2V0cyA9IG5leHRXaWRnZXRzOwogICAgfQogICAgYXBwbHlCcmVha3BvaW50TGF5b3V0KGJyZWFrcG9pbnQpIHsKICAgICAgdGhpcy5hY3RpdmVCcmVha3BvaW50ID0gYnJlYWtwb2ludDsKICAgICAgY29uc3QgbGF5b3V0ID0gdGhpcy5sYXlvdXRzPy5bYnJlYWtwb2ludF07CiAgICAgIGlmIChsYXlvdXQpIHsKICAgICAgICB0aGlzLnNldExheW91dChsYXlvdXQpOwogICAgICB9CiAgICB9CiAgICBub3RpZnlMYXlvdXRDaGFuZ2UoKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxheW91dC1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IGxheW91dDogdGhpcy5nZXRMYXlvdXQoKSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgZW5zdXJlTWV0cmljcygpIHsKICAgICAgaWYgKCF0aGlzLm1ldHJpY3MpIHsKICAgICAgICB0aGlzLmNvbXB1dGVNZXRyaWNzKCk7CiAgICAgIH0KICAgICAgcmV0dXJuIHRoaXMubWV0cmljczsKICAgIH0KICAgIGNvbXB1dGVNZXRyaWNzKCkgewogICAgICBpZiAoIXRoaXMuaXNDb25uZWN0ZWQpCiAgICAgICAgcmV0dXJuOwogICAgICBjb25zdCBib3VuZHMgPSB0aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpOwogICAgICB0aGlzLmNvbnRhaW5lckJvdW5kcyA9IGJvdW5kczsKICAgICAgY29uc3QgbWFyZ2lucyA9IHJlc29sdmVNYXJnaW5zKHRoaXMubWFyZ2luKTsKICAgICAgdGhpcy5yZXNvbHZlZE1hcmdpbnMgPSBtYXJnaW5zOwogICAgICB0aGlzLm1ldHJpY3MgPSBjYWxjdWxhdGVDZWxsTWV0cmljcyhib3VuZHMud2lkdGgsIHRoaXMuY29sdW1ucywgbWFyZ2lucywgdGhpcy5jZWxsSGVpZ2h0LCB0aGlzLmNlbGxIZWlnaHRVbml0KTsKICAgIH0KICAgIG9ic2VydmVSZXNpemUoKSB7CiAgICAgIGlmICh0aGlzLnJlc2l6ZU9ic2VydmVyKQogICAgICAgIHJldHVybjsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlciA9IG5ldyBSZXNpemVPYnNlcnZlcigoKSA9PiB7CiAgICAgICAgdGhpcy5jb21wdXRlTWV0cmljcygpOwogICAgICB9KTsKICAgICAgdGhpcy5yZXNpemVPYnNlcnZlci5vYnNlcnZlKHRoaXMpOwogICAgfQogICAgZGlzY29ubmVjdFJlc2l6ZU9ic2VydmVyKCkgewogICAgICB0aGlzLnJlc2l6ZU9ic2VydmVyPy5kaXNjb25uZWN0KCk7CiAgICAgIHRoaXMucmVzaXplT2JzZXJ2ZXIgPSB2b2lkIDA7CiAgICB9CiAgICByZWxlYXNlUG9pbnRlckV2ZW50cygpIHsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZURyYWdNb3ZlKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcnVwIiwgdGhpcy5oYW5kbGVEcmFnRW5kKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicG9pbnRlcm1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZU1vdmUpOwogICAgICBkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCJwb2ludGVydXAiLCB0aGlzLmhhbmRsZVJlc2l6ZUVuZCk7CiAgICB9CiAgICBweFRvUGVyY2VudCh2YWx1ZTIsIGNvbnRhaW5lcikgewogICAgICBpZiAoIWNvbnRhaW5lcikKICAgICAgICByZXR1cm4gMDsKICAgICAgcmV0dXJuIE51bWJlcigodmFsdWUyIC8gY29udGFpbmVyICogMTAwKS50b0ZpeGVkKDQpKTsKICAgIH0KICAgIGNvbXB1dGVXaWRnZXRSZWN0KHdpZGdldCwgbWV0cmljcywgbWFyZ2lucykgewogICAgICBjb25zdCBjZWxsV2lkdGggPSBtZXRyaWNzLmNlbGxXaWR0aFB4OwogICAgICBjb25zdCBjZWxsSGVpZ2h0ID0gbWV0cmljcy5jZWxsSGVpZ2h0UHg7CiAgICAgIGNvbnN0IGxlZnQgPSB3aWRnZXQueCAqIChjZWxsV2lkdGggKyBtYXJnaW5zLmhvcml6b250YWwpICsgbWFyZ2lucy5ob3Jpem9udGFsOwogICAgICBjb25zdCB0b3AgPSB3aWRnZXQueSAqIChjZWxsSGVpZ2h0ICsgbWFyZ2lucy52ZXJ0aWNhbCkgKyBtYXJnaW5zLnZlcnRpY2FsOwogICAgICBjb25zdCB3aWR0aCA9IHdpZGdldC53ICogY2VsbFdpZHRoICsgTWF0aC5tYXgoMCwgd2lkZ2V0LncgLSAxKSAqIG1hcmdpbnMuaG9yaXpvbnRhbDsKICAgICAgY29uc3QgaGVpZ2h0ID0gd2lkZ2V0LmggKiBjZWxsSGVpZ2h0ICsgTWF0aC5tYXgoMCwgd2lkZ2V0LmggLSAxKSAqIG1hcmdpbnMudmVydGljYWw7CiAgICAgIHJldHVybiB7IGxlZnQsIHRvcCwgd2lkdGgsIGhlaWdodCB9OwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3NihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0Rhc2hib2FyZGdyaWQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CmZ1bmN0aW9uIGRlbW9GdW5jNDcoKSB7CiAgcmV0dXJuIGIyYAogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iMSI+VGhpcyBpcyBhIEgxIGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjIiPlRoaXMgaXMgYSBIMiBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSIzIj5UaGlzIGlzIGEgSDMgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iNCI+VGhpcyBpcyBhIEg0IGhlYWRpbmc8L2RlZXMtaGVhZGluZz4KICAgIDxkZWVzLWhlYWRpbmcgbGV2ZWw9IjUiPlRoaXMgaXMgYSBINSBoZWFkaW5nPC9kZWVzLWhlYWRpbmc+CiAgICA8ZGVlcy1oZWFkaW5nIGxldmVsPSI2Ij5UaGlzIGlzIGEgSDYgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHIiPlRoaXMgaXMgYW4gaHIgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPlRoaXMgaXMgYW4gaHIgc21hbGwgaGVhZGluZzwvZGVlcy1oZWFkaW5nPgogIGA7Cn0KCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1oZWFkaW5nL2RlZXMtaGVhZGluZy5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU3NiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzNzcgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNIZWFkaW5nID0gKCgpID0+IHsKICBsZXQgX2NsYXNzRGVjb3JhdG9ycyA9IFt0NCgiZGVlcy1oZWFkaW5nIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfbGV2ZWxfZGVjb3JhdG9yczsKICBsZXQgX2xldmVsX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbGV2ZWxfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc0hlYWRpbmcyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbGV2ZWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZywgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc2KHRoaXMsIG51bGwsIF9sZXZlbF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJsZXZlbCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibGV2ZWwiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubGV2ZWwsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmxldmVsID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2xldmVsX2luaXRpYWxpemVycywgX2xldmVsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzYobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gZGVtbwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ3OwogICAgI2xldmVsX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9pbml0aWFsaXplcnMsICIxIik7CiAgICAvLyBwcm9wZXJ0aWVzCiAgICAvKioKICAgICAqIEhlYWRpbmcgbGV2ZWw6IDEtNiBmb3IgaDEtaDYsIG9yICdocicgZm9yIGhvcml6b250YWwgcnVsZSBzdHlsZQogICAgICovCiAgICBnZXQgbGV2ZWwoKSB7CiAgICAgIHJldHVybiB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGxldmVsKHZhbHVlMikgewogICAgICB0aGlzLiNsZXZlbF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgLy8gU1RBVElDIFNUWUxFUwogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIC8qIEhlYWRpbmcgc3R5bGVzICovCiAgICAgIGgxLCBoMiwgaDMsIGg0LCBoNSwgaDYgewogICAgICAgIG1hcmdpbjogMTZweCAwIDhweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMCIsICIjZmZmIil9OwogICAgICB9CiAgICAgIGgxIHsgZm9udC1zaXplOiAzMnB4OyBmb250LWZhbWlseTogJHtjc3NDYWxTYW5zRm9udEZhbWlseX07IGxldHRlci1zcGFjaW5nOiAwLjAyNWVtO30KICAgICAgaDIgeyBmb250LXNpemU6IDI4cHg7IH0KICAgICAgaDMgeyBmb250LXNpemU6IDI0cHg7IH0KICAgICAgaDQgeyBmb250LXNpemU6IDIwcHg7IH0KICAgICAgaDUgeyBmb250LXNpemU6IDE2cHg7IH0KICAgICAgaDYgeyBmb250LXNpemU6IDE0cHg7IH0KICAgICAgLyogSG9yaXpvbnRhbCBydWxlIHN0eWxlIGhlYWRpbmcgKi8KICAgICAgLmhlYWRpbmctaHIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luOiAxNnB4IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwIiwgIiNmZmYiKX07CiAgICAgIH0KICAgICAgLyogRmFkZSBsaW5lcyB0b3dhcmQgYW5kIGF3YXkgZnJvbSB0ZXh0IGZvciBociBzdHlsZSAqLwogICAgICAuaGVhZGluZy1ocjo6YmVmb3JlIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGhlaWdodDogMXB4OwogICAgICAgIC8qIGZhZGUgaW4gdG93YXJkIGNlbnRlciAqLwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjY2NjKSIsICJsaW5lYXItZ3JhZGllbnQodG8gcmlnaHQsIHRyYW5zcGFyZW50LCAjMzMzKSIpfTsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICAgIC5oZWFkaW5nLWhyOjphZnRlciB7CiAgICAgICAgY29udGVudDogJyc7CiAgICAgICAgZmxleDogMTsKICAgICAgICBoZWlnaHQ6IDFweDsKICAgICAgICAvKiBmYWRlIG91dCBhd2F5IGZyb20gY2VudGVyICovCiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgI2NjYywgdHJhbnNwYXJlbnQpIiwgImxpbmVhci1ncmFkaWVudCh0byByaWdodCwgIzMzMywgdHJhbnNwYXJlbnQpIil9OwogICAgICAgIG1hcmdpbjogMCA4cHg7CiAgICAgIH0KICAgICAgLyogU21hbGwgaHIgdmFyaWFudCB3aXRoIHJlZHVjZWQgbWFyZ2lucyAqLwogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsIHsKICAgICAgICBtYXJnaW46IDhweCAwOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgICAuaGVhZGluZy1oci5oZWFkaW5nLWhyLXNtYWxsOjpiZWZvcmUsCiAgICAgIC5oZWFkaW5nLWhyLmhlYWRpbmctaHItc21hbGw6OmFmdGVyIHsKICAgICAgICBtYXJnaW46IDAgOHB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgLy8gSU5TVEFOQ0UKICAgIHJlbmRlcigpIHsKICAgICAgc3dpdGNoICh0aGlzLmxldmVsKSB7CiAgICAgICAgY2FzZSAiMSI6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgICAgY2FzZSAiMiI6CiAgICAgICAgICByZXR1cm4gYjJgPGgyPjxzbG90Pjwvc2xvdD48L2gyPmA7CiAgICAgICAgY2FzZSAiMyI6CiAgICAgICAgICByZXR1cm4gYjJgPGgzPjxzbG90Pjwvc2xvdD48L2gzPmA7CiAgICAgICAgY2FzZSAiNCI6CiAgICAgICAgICByZXR1cm4gYjJgPGg0PjxzbG90Pjwvc2xvdD48L2g0PmA7CiAgICAgICAgY2FzZSAiNSI6CiAgICAgICAgICByZXR1cm4gYjJgPGg1PjxzbG90Pjwvc2xvdD48L2g1PmA7CiAgICAgICAgY2FzZSAiNiI6CiAgICAgICAgICByZXR1cm4gYjJgPGg2PjxzbG90Pjwvc2xvdD48L2g2PmA7CiAgICAgICAgY2FzZSAiaHIiOgogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9ImhlYWRpbmctaHIiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGNhc2UgImhyLXNtYWxsIjoKICAgICAgICAgIHJldHVybiBiMmA8ZGl2IGNsYXNzPSJoZWFkaW5nLWhyIGhlYWRpbmctaHItc21hbGwiPjxzbG90Pjwvc2xvdD48L2Rpdj5gOwogICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICByZXR1cm4gYjJgPGgxPjxzbG90Pjwvc2xvdD48L2gxPmA7CiAgICAgIH0KICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgICBfX3J1bkluaXRpYWxpemVyczc3KHRoaXMsIF9sZXZlbF9leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczc3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzSGVhZGluZzIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNDggPSAoKSA9PiBiMmAKICA8ZGVlcy1oaW50PjwvZGVlcy1oaW50PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLWhpbnQvZGVlcy1oaW50LmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTc3ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM3OCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc0hpbnQgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLWhpbnQiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF90eXBlX2RlY29yYXRvcnM7CiAgbGV0IF90eXBlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzSGludDIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF90eXBlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBTdHJpbmcgfSldOwogICAgICBfX2VzRGVjb3JhdGU3Nyh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzcobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzSGludDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzQ4OwogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfaW5pdGlhbGl6ZXJzLCAiaW5mbyIpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzNzgodGhpcywgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkb210b29sc19lbGVtZW50YmFzaWNfZXhwb3J0cy5zZXR1cCgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFt0aGVtZURlZmF1bHRTdHlsZXMsIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgIGBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgIDxkaXYgY2xhc3M9Im1haW5ib3giPjwvZGl2PiBgOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OChfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc0hpbnQyID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1pY29uL2luZGV4LmpzCmluaXRfZGVlc19pY29uKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtbW9iaWxlbmF2aWdhdGlvbi9kZWVzLW1vYmlsZW5hdmlnYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kZWVzX2ljb24oKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzggPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczc5ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzTW9iaWxlbmF2aWdhdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtbW9iaWxlbmF2aWdhdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2hlYWRpbmdfZGVjb3JhdG9yczsKICBsZXQgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tZW51SXRlbXNfZGVjb3JhdG9yczsKICBsZXQgX21lbnVJdGVtc19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfbW9iaWxlTmF2WkluZGV4X2RlY29yYXRvcnM7CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tb2JpbGVOYXZaSW5kZXhfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc01vYmlsZW5hdmlnYXRpb24yID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfaGVhZGluZ19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfbWVudUl0ZW1zX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IEFycmF5CiAgICAgIH0pXTsKICAgICAgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzID0gW3I1KCldOwogICAgICBfX2VzRGVjb3JhdGU3OCh0aGlzLCBudWxsLCBfaGVhZGluZ19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJoZWFkaW5nIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJoZWFkaW5nIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmhlYWRpbmcsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmhlYWRpbmcgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfaGVhZGluZ19pbml0aWFsaXplcnMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21lbnVJdGVtc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtZW51SXRlbXMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lbnVJdGVtcyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tZW51SXRlbXMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1lbnVJdGVtcyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZW51SXRlbXNfaW5pdGlhbGl6ZXJzLCBfbWVudUl0ZW1zX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgodGhpcywgbnVsbCwgX21vYmlsZU5hdlpJbmRleF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJtb2JpbGVOYXZaSW5kZXgiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1vYmlsZU5hdlpJbmRleCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tb2JpbGVOYXZaSW5kZXgsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLm1vYmlsZU5hdlpJbmRleCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tb2JpbGVOYXZaSW5kZXhfaW5pdGlhbGl6ZXJzLCBfbW9iaWxlTmF2WkluZGV4X2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlNzgobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzTW9iaWxlbmF2aWdhdGlvbjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtYnV0dG9uIEBjbGljaz0keygpID0+IHsKICAgICAgRGVlc01vYmlsZW5hdmlnYXRpb24yLmNyZWF0ZUFuZFNob3coWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEYXNoYm9hcmQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bGF5b3V0LWRhc2hib2FyZCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJOYXZpZ2F0ZSB0byBkYXNoYm9hcmQiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiUHJvZmlsZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp1c2VyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKGRlZXNNb2JpbGVOYXYpID0+IHsKICAgICAgICAgICAgY29uc29sZS5sb2coIk5hdmlnYXRlIHRvIHByb2ZpbGUiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2V0dGluZ3MiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6c2V0dGluZ3MiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoZGVlc01vYmlsZU5hdikgPT4gewogICAgICAgICAgICBjb25zb2xlLmxvZygiTmF2aWdhdGUgdG8gc2V0dGluZ3MiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiSGVscCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpoZWxwLWNpcmNsZSIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaG93IGhlbHAiKTsKICAgICAgICAgICAgcmV0dXJuIG51bGw7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiU2lnbiBPdXQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6bG9nLW91dCIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jIChkZWVzTW9iaWxlTmF2KSA9PiB7CiAgICAgICAgICAgIGNvbnNvbGUubG9nKCJTaWduIG91dCIpOwogICAgICAgICAgICByZXR1cm4gbnVsbDsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIF0pOwogICAgfX0+T3BlbiBNb2JpbGUgTmF2aWdhdGlvbjwvZGVlcy1idXR0b24+CiAgYDsKICAgIHN0YXRpYyBzaW5nbGV0b25SZWY7CiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhtZW51SXRlbXNBcmcpIHsKICAgICAgaWYgKCF0aGlzLnNpbmdsZXRvblJlZikgewogICAgICAgIHRoaXMuc2luZ2xldG9uUmVmID0gbmV3IERlZXNNb2JpbGVuYXZpZ2F0aW9uMigpOwogICAgICAgIGRvY3VtZW50LmJvZHkuYXBwZW5kKHRoaXMuc2luZ2xldG9uUmVmKTsKICAgICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5pbml0KCk7CiAgICAgIH0KICAgICAgdGhpcy5zaW5nbGV0b25SZWYubWVudUl0ZW1zID0gbWVudUl0ZW1zQXJnOwogICAgICBhd2FpdCB0aGlzLnNpbmdsZXRvblJlZi5yZWFkeURlZmVycmVkLnByb21pc2U7CiAgICAgIHRoaXMuc2luZ2xldG9uUmVmLnNob3coKTsKICAgICAgcmV0dXJuIHRoaXMuc2luZ2xldG9uUmVmOwogICAgfQogICAgI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX2hlYWRpbmdfaW5pdGlhbGl6ZXJzLCBgTWVudWApOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBoZWFkaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jaGVhZGluZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGhlYWRpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2hlYWRpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczc5KHRoaXMsIF9oZWFkaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM3OSh0aGlzLCBfbWVudUl0ZW1zX2luaXRpYWxpemVycywgW10pKTsKICAgIGdldCBtZW51SXRlbXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZW51SXRlbXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBtZW51SXRlbXModmFsdWUyKSB7CiAgICAgIHRoaXMuI21lbnVJdGVtc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21lbnVJdGVtc19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9pbml0aWFsaXplcnMsIDFlMykpOwogICAgZ2V0IG1vYmlsZU5hdlpJbmRleCgpIHsKICAgICAgcmV0dXJuIHRoaXMuI21vYmlsZU5hdlpJbmRleF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1vYmlsZU5hdlpJbmRleCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbW9iaWxlTmF2WkluZGV4X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICByZWFkeURlZmVycmVkID0gKF9fcnVuSW5pdGlhbGl6ZXJzNzkodGhpcywgX21vYmlsZU5hdlpJbmRleF9leHRyYUluaXRpYWxpemVycyksIGRpc3RfdHNfZXhwb3J0czI1LnBsdWdpbnMuc21hcnRwcm9taXNlLmRlZmVyKCkpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBtb2JpbGUgbmF2aWdhdGlvbgogICAgICovCiAgICBhc3luYyBpbml0KCkgewogICAgICBhd2FpdCB0aGlzLnVwZGF0ZUNvbXBsZXRlOwogICAgICB0aGlzLnJlYWR5RGVmZXJyZWQucmVzb2x2ZSgpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBmb250LWZhbWlseTogJHtjc3NHZWlzdEZvbnRGYW1pbHl9OwogICAgICB9CgogICAgICAubWFpbiB7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuM3MgY3ViaWMtYmV6aWVyKDAuNCwgMCwgMC4yLCAxKTsKICAgICAgICB3aWxsLWNoYW5nZTogdHJhbnNmb3JtOwogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICBoZWlnaHQ6IDEwMHZoOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIG1heC13aWR0aDogMzIwcHg7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKDEwMCUpOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgICAgIHotaW5kZXg6IHZhcigtLXotaW5kZXgpOwogICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgcmlnaHQ6IDBweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBib3R0b206IDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMDkwOTBiIil9OwogICAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBib3gtc2hhZG93OiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiLTIwcHggMCAyNXB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjEpLCAtMTBweCAwIDEwcHggLTVweCByZ2JhKDAsIDAsIDAsIDAuMDQpIiwgIi0yMHB4IDAgMjVweCAtNXB4IHJnYmEoMCwgMCwgMCwgMC4zKSwgLTEwcHggMCAxMHB4IC01cHggcmdiYSgwLCAwLCAwLCAwLjIpIil9OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgLm1haW4uc2hvdyB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICBvcGFjaXR5OiAxOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAyNHB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICB9CgogICAgICAuaGVhZGluZyB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAyZW07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXIgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzIGVhc2U7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAubWVudUl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZjRmNGY1IiwgIiMyNzI3MmEiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbTphY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgwLjk4KTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtIGRlZXMtaWNvbiB7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiM3MTcxN2EiKX07CiAgICAgICAgdHJhbnNpdGlvbjogY29sb3IgMC4xNXMgZWFzZTsKICAgICAgfQoKICAgICAgLm1lbnVJdGVtOmhvdmVyIGRlZXMtaWNvbiB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICAgIH0KCiAgICAgIC5tZW51SXRlbS10ZXh0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGxldHRlci1zcGFjaW5nOiAtMC4wMWVtOwogICAgICB9CgogICAgICAubWVudUl0ZW0tZGl2aWRlciB7CiAgICAgICAgaGVpZ2h0OiAxcHg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlNWU3ZWIiLCAiIzI3MjcyYSIpfTsKICAgICAgICBtYXJnaW46IDhweCAxNnB4OwogICAgICB9CgogICAgICAvKiBNb2JpbGUgcmVzcG9uc2l2ZW5lc3MgKi8KICAgICAgQG1lZGlhIChtYXgtd2lkdGg6IDQwMHB4KSB7CiAgICAgICAgLm1haW4gewogICAgICAgICAgbWF4LXdpZHRoOiAxMDB2dzsKICAgICAgICAgIHdpZHRoOiA4NXZ3OwogICAgICAgIH0KICAgICAgfQoKICAgICAgLyogQW5pbWF0aW9uIGZvciBtZW51IGl0ZW1zICovCiAgICAgIEBrZXlmcmFtZXMgc2xpZGVJblJpZ2h0IHsKICAgICAgICBmcm9tIHsKICAgICAgICAgIG9wYWNpdHk6IDA7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMjBweCk7CiAgICAgICAgfQogICAgICAgIHRvIHsKICAgICAgICAgIG9wYWNpdHk6IDE7CiAgICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMCk7CiAgICAgICAgfQogICAgICB9CgogICAgICAubWFpbi5zaG93IC5tZW51SXRlbSB7CiAgICAgICAgYW5pbWF0aW9uOiBzbGlkZUluUmlnaHQgMC4zcyBlYXNlLW91dCBmb3J3YXJkczsKICAgICAgICBhbmltYXRpb24tZGVsYXk6IGNhbGModmFyKC0taXRlbS1pbmRleCwgMCkgKiAwLjA1cyk7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQoKICAgICAgLyogU2Nyb2xsYmFyIHN0eWxpbmcgKi8KICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhciB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgfQoKICAgICAgLm1lbnUtY29udGFpbmVyOjotd2Via2l0LXNjcm9sbGJhci10cmFjayB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgIH0KCiAgICAgIC5tZW51LWNvbnRhaW5lcjo6LXdlYmtpdC1zY3JvbGxiYXItdGh1bWIgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTVlN2ViIiwgIiMzZjNmNDYiKX07CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICB9CgogICAgICAubWVudS1jb250YWluZXI6Oi13ZWJraXQtc2Nyb2xsYmFyLXRodW1iOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2QxZDVkYiIsICIjNTI1MjViIil9OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxzdHlsZT4KICAgICAgICAubWFpbiB7CiAgICAgICAgICAtLXotaW5kZXg6ICR7dGhpcy5tb2JpbGVOYXZaSW5kZXh9OwogICAgICAgIH0KICAgICAgPC9zdHlsZT4KICAgICAgPGRpdiBjbGFzcz0ibWFpbiI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxoMiBjbGFzcz0iaGVhZGluZyI+JHt0aGlzLmhlYWRpbmd9PC9oMj4KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZW51LWNvbnRhaW5lciI+CiAgICAgICAgICAke3RoaXMubWVudUl0ZW1zLm1hcCgobWVudUl0ZW0sIGluZGV4MikgPT4gewogICAgICAgIGlmICgiZGl2aWRlciIgaW4gbWVudUl0ZW0gJiYgbWVudUl0ZW0uZGl2aWRlcikgewogICAgICAgICAgcmV0dXJuIGIyYDxkaXYgY2xhc3M9Im1lbnVJdGVtLWRpdmlkZXIiPjwvZGl2PmA7CiAgICAgICAgfQogICAgICAgIHJldHVybiBiMmAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0ibWVudUl0ZW0iCiAgICAgICAgICAgICAgICBzdHlsZT0iLS1pdGVtLWluZGV4OiAke2luZGV4Mn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9IiR7KCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgICBtZW51SXRlbS5hY3Rpb24odGhpcyk7CiAgICAgICAgfX0iCiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgJHttZW51SXRlbS5pY29uTmFtZSA/IGIyYAogICAgICAgICAgICAgICAgICA8ZGVlcy1pY29uIC5pY29uPSR7bWVudUl0ZW0uaWNvbk5hbWV9IHNpemU9IjIwIj48L2RlZXMtaWNvbj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZW51SXRlbS10ZXh0Ij4ke21lbnVJdGVtLm5hbWV9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgOwogICAgICB9KX0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgd2luZG93TGF5ZXI7CiAgICAvKioKICAgICAqIGluaXRzIHRoZSBzaG93CiAgICAgKi8KICAgIGFzeW5jIHNob3coKSB7CiAgICAgIGNvbnN0IGRvbXRvb2xzID0gYXdhaXQgdGhpcy5kb210b29sc1Byb21pc2U7CiAgICAgIGNvbnN0IG1haW4gPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLm1haW4iKTsKICAgICAgaWYgKCF0aGlzLndpbmRvd0xheWVyKSB7CiAgICAgICAgdGhpcy53aW5kb3dMYXllciA9IGF3YWl0IERlZXNXaW5kb3dMYXllci5jcmVhdGVBbmRTaG93KHsKICAgICAgICAgIGJsdXI6IHRydWUKICAgICAgICB9KTsKICAgICAgICB0aGlzLndpbmRvd0xheWVyLmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIiwgKCkgPT4gewogICAgICAgICAgdGhpcy5oaWRlKCk7CiAgICAgICAgfSk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgZG9jdW1lbnQuYm9keS5hcHBlbmQodGhpcy53aW5kb3dMYXllcik7CiAgICAgICAgYXdhaXQgdGhpcy53aW5kb3dMYXllci5zaG93KCk7CiAgICAgIH0KICAgICAgdGhpcy5tb2JpbGVOYXZaSW5kZXggPSB6SW5kZXhSZWdpc3RyeS5nZXROZXh0WkluZGV4KCk7CiAgICAgIHpJbmRleFJlZ2lzdHJ5LnJlZ2lzdGVyKHRoaXMsIHRoaXMubW9iaWxlTmF2WkluZGV4KTsKICAgICAgYXdhaXQgZG9tdG9vbHMuY29udmVuaWVuY2Uuc21hcnRkZWxheS5kZWxheUZvcigxMCk7CiAgICAgIG1haW4uY2xhc3NMaXN0LmFkZCgic2hvdyIpOwogICAgfQogICAgLyoqCiAgICAgKiBpbml0cyB0aGUgaGlkZSBmdW5jdGlvbgogICAgICovCiAgICBhc3luYyBoaWRlKCkgewogICAgICBjb25zdCBkb210b29scyA9IGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBjb25zdCBtYWluID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5tYWluIik7CiAgICAgIG1haW4uY2xhc3NMaXN0LnJlbW92ZSgic2hvdyIpOwogICAgICB6SW5kZXhSZWdpc3RyeS51bnJlZ2lzdGVyKHRoaXMpOwogICAgICBpZiAodGhpcy53aW5kb3dMYXllcikgewogICAgICAgIGF3YWl0IHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgICB9CiAgICB9CiAgICBhc3luYyBkaXNjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgICAgc3VwZXIuZGlzY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgICAgekluZGV4UmVnaXN0cnkudW5yZWdpc3Rlcih0aGlzKTsKICAgICAgaWYgKHRoaXMud2luZG93TGF5ZXIpIHsKICAgICAgICBhd2FpdCB0aGlzLndpbmRvd0xheWVyLmRlc3Ryb3koKTsKICAgICAgfQogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM3OShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc01vYmlsZW5hdmlnYXRpb24yID0gX2NsYXNzVGhpczsKfSkoKTsKCi8vIG5vZGVfbW9kdWxlcy8ucG5wbS9AZGVzaWduLmVzdGF0ZStkZWVzLWNhdGFsb2dAMy4zNy4wX0B0aXB0YXArcG1AMi4yNy4yL25vZGVfbW9kdWxlcy9AZGVzaWduLmVzdGF0ZS9kZWVzLWNhdGFsb2cvZGlzdF90c193ZWIvZWxlbWVudHMvZGVlcy1wYWdpbmF0aW9uL2RlZXMtcGFnaW5hdGlvbi5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzQ5ID0gKCkgPT4gYjJgCiAgPGRpdiBzdHlsZT0iZGlzcGxheTogZmxleDsgYWxpZ24taXRlbXM6IGNlbnRlcjsgZ2FwOiAxNnB4OyI+CiAgICA8IS0tIFNtYWxsIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjUgcGFnZXMsIHN0YXJ0aW5nIGF0IDE6PC9zcGFuPgogICAgICA8ZGVlcy1wYWdpbmF0aW9uCiAgICAgICAgLnRvdGFsPSR7NX0KICAgICAgICAucGFnZT0kezF9CiAgICAgICAgQHBhZ2UtY2hhbmdlPSR7KGUxMSkgPT4gY29uc29sZS5sb2coIlBhZ2UgY2hhbmdlZCB0byIsIGUxMS5kZXRhaWwucGFnZSl9CiAgICAgID48L2RlZXMtcGFnaW5hdGlvbj4KICAgIDwvZGl2PgoKICAgIDwhLS0gTGFyZ2VyIHNldCBvZiBwYWdlcyAtLT4KICAgIDxkaXYgc3R5bGU9ImRpc3BsYXk6IGZsZXg7IGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47IGdhcDogNHB4OyI+CiAgICAgIDxzcGFuPjE1IHBhZ2VzLCBzdGFydGluZyBhdCA4Ojwvc3Bhbj4KICAgICAgPGRlZXMtcGFnaW5hdGlvbgogICAgICAgIC50b3RhbD0kezE1fQogICAgICAgIC5wYWdlPSR7OH0KICAgICAgICBAcGFnZS1jaGFuZ2U9JHsoZTExKSA9PiBjb25zb2xlLmxvZygiUGFnZSBjaGFuZ2VkIHRvIiwgZTExLmRldGFpbC5wYWdlKX0KICAgICAgPjwvZGVlcy1wYWdpbmF0aW9uPgogICAgPC9kaXY+CiAgPC9kaXY+CmA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcGFnaW5hdGlvbi9kZWVzLXBhZ2luYXRpb24uanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlNzkgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczgwID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzUGFnaW5hdGlvbiA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcGFnaW5hdGlvbiIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3BhZ2VfZGVjb3JhdG9yczsKICBsZXQgX3BhZ2VfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9wYWdlX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9kZWNvcmF0b3JzOwogIGxldCBfdG90YWxfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90b3RhbF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUGFnaW5hdGlvbjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9wYWdlX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBOdW1iZXIsIHJlZmxlY3Q6IHRydWUgfSldOwogICAgICBfdG90YWxfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE51bWJlciwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTc5KHRoaXMsIG51bGwsIF9wYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInBhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInBhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoucGFnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoucGFnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9wYWdlX2luaXRpYWxpemVycywgX3BhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU3OSh0aGlzLCBudWxsLCBfdG90YWxfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidG90YWwiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRvdGFsIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnRvdGFsLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai50b3RhbCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90b3RhbF9pbml0aWFsaXplcnMsIF90b3RhbF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTc5KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1BhZ2luYXRpb24yID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM0OTsKICAgICNwYWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgwKHRoaXMsIF9wYWdlX2luaXRpYWxpemVycywgMSk7CiAgICAvKiogQ3VycmVudCBwYWdlICgxLWJhc2VkKSAqLwogICAgZ2V0IHBhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNwYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcGFnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcGFnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RvdGFsX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4MCh0aGlzLCBfcGFnZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2luaXRpYWxpemVycywgMSkpOwogICAgLyoqIFRvdGFsIG51bWJlciBvZiBwYWdlcyAqLwogICAgZ2V0IHRvdGFsKCkgewogICAgICByZXR1cm4gdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB0b3RhbCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdG90YWxfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgfQogICAgICBidXR0b24gewogICAgICAgIGJhY2tncm91bmQ6IG5vbmU7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIG1hcmdpbjogMCAycHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjJzOwogICAgICB9CiAgICAgIGJ1dHRvbjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlZWUiLCAiIzQ0NCIpfTsKICAgICAgfQogICAgICBidXR0b246ZGlzYWJsZWQgewogICAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNhYWEiLCAiIzY2NiIpfTsKICAgICAgfQogICAgICBidXR0b24uY3VycmVudCB7CiAgICAgICAgYmFja2dyb3VuZDogIzAwNTBiOTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBjdXJzb3I6IGRlZmF1bHQ7CiAgICAgIH0KICAgICAgc3Bhbi5lbGxpcHNpcyB7CiAgICAgICAgbWFyZ2luOiAwIDRweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2NjYyIpfTsKICAgICAgfQogICAgYAogICAgXTsKICAgIGdldCBwYWdlcygpIHsKICAgICAgY29uc3QgcGFnZXMgPSBbXTsKICAgICAgY29uc3QgdG90YWwgPSB0aGlzLnRvdGFsOwogICAgICBjb25zdCBjdXJyZW50ID0gdGhpcy5wYWdlOwogICAgICBpZiAodG90YWwgPD0gNykgewogICAgICAgIGZvciAobGV0IGkxMSA9IDE7IGkxMSA8PSB0b3RhbDsgaTExKyspIHsKICAgICAgICAgIHBhZ2VzLnB1c2goaTExKTsKICAgICAgICB9CiAgICAgIH0gZWxzZSB7CiAgICAgICAgcGFnZXMucHVzaCgxKTsKICAgICAgICBpZiAoY3VycmVudCA+IDQpIHsKICAgICAgICAgIHBhZ2VzLnB1c2goIi4uLiIpOwogICAgICAgIH0KICAgICAgICBjb25zdCBzdGFydCA9IE1hdGgubWF4KDIsIGN1cnJlbnQgLSAyKTsKICAgICAgICBjb25zdCBlbmQzID0gTWF0aC5taW4odG90YWwgLSAxLCBjdXJyZW50ICsgMik7CiAgICAgICAgZm9yIChsZXQgaTExID0gc3RhcnQ7IGkxMSA8PSBlbmQzOyBpMTErKykgewogICAgICAgICAgcGFnZXMucHVzaChpMTEpOwogICAgICAgIH0KICAgICAgICBpZiAoY3VycmVudCA8IHRvdGFsIC0gMykgewogICAgICAgICAgcGFnZXMucHVzaCgiLi4uIik7CiAgICAgICAgfQogICAgICAgIHBhZ2VzLnB1c2godG90YWwpOwogICAgICB9CiAgICAgIHJldHVybiBwYWdlczsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8YnV0dG9uCiAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5jaGFuZ2VQYWdlKHRoaXMucGFnZSAtIDEpfQogICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA8PSAxfQogICAgICAgIGFyaWEtbGFiZWw9IlByZXZpb3VzIHBhZ2UiCiAgICAgID4KICAgICAgICDigLkKICAgICAgPC9idXR0b24+CiAgICAgICR7dGhpcy5wYWdlcy5tYXAoKHA3KSA9PiBwNyA9PT0gIi4uLiIgPyBiMmA8c3BhbiBjbGFzcz0iZWxsaXBzaXMiPuKApjwvc3Bhbj5gIDogYjJgCiAgICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgICAgY2xhc3M9IiR7cDcgPT09IHRoaXMucGFnZSA/ICJjdXJyZW50IiA6ICIifSIKICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZShwNyl9CiAgICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHtwNyA9PT0gdGhpcy5wYWdlfQogICAgICAgICAgICAgICAgYXJpYS1sYWJlbD0iUGFnZSAke3A3fSIKICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAke3A3fQogICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICBgKX0KICAgICAgPGJ1dHRvbgogICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY2hhbmdlUGFnZSh0aGlzLnBhZ2UgKyAxKX0KICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnBhZ2UgPj0gdGhpcy50b3RhbH0KICAgICAgICBhcmlhLWxhYmVsPSJOZXh0IHBhZ2UiCiAgICAgID4KICAgICAgICDigLoKICAgICAgPC9idXR0b24+CiAgICBgOwogICAgfQogICAgY2hhbmdlUGFnZShuZXdQYWdlKSB7CiAgICAgIGlmIChuZXdQYWdlIDwgMSB8fCBuZXdQYWdlID4gdGhpcy50b3RhbCB8fCBuZXdQYWdlID09PSB0aGlzLnBhZ2UpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgdGhpcy5wYWdlID0gbmV3UGFnZTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyBDdXN0b21FdmVudCgicGFnZS1jaGFuZ2UiLCB7CiAgICAgICAgZGV0YWlsOiB7IHBhZ2U6IHRoaXMucGFnZSB9LAogICAgICAgIGJ1YmJsZXM6IHRydWUKICAgICAgfSkpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAodGhpcywgX3RvdGFsX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODAoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNQYWdpbmF0aW9uMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUwID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxkZWVzLXByb2dyZXNzYmFyCiAgICAgIC5wZXJjZW50YWdlPSR7NTB9CiAgICA+PC9kZWVzLXByb2dyZXNzYmFyPgogIGA7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtcHJvZ3Jlc3NiYXIvZGVlcy1wcm9ncmVzc2Jhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MCA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODEgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNQcm9ncmVzc2JhciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtcHJvZ3Jlc3NiYXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9wZXJjZW50YWdlX2RlY29yYXRvcnM7CiAgbGV0IF9wZXJjZW50YWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfcGVyY2VudGFnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzUHJvZ3Jlc3NiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfcGVyY2VudGFnZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBOdW1iZXIKICAgICAgfSldOwogICAgICBfX2VzRGVjb3JhdGU4MCh0aGlzLCBudWxsLCBfcGVyY2VudGFnZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJwZXJjZW50YWdlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJwZXJjZW50YWdlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnBlcmNlbnRhZ2UsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnBlcmNlbnRhZ2UgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfcGVyY2VudGFnZV9pbml0aWFsaXplcnMsIF9wZXJjZW50YWdlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODAobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzUHJvZ3Jlc3NiYXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIC8vIFNUQVRJQwogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUwOwogICAgI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfaW5pdGlhbGl6ZXJzLCAwKTsKICAgIC8vIElOU1RBTkNFCiAgICBnZXQgcGVyY2VudGFnZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3BlcmNlbnRhZ2VfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBwZXJjZW50YWdlKHZhbHVlMikgewogICAgICB0aGlzLiNwZXJjZW50YWdlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShicmlnaHQudGV4dCwgZGFyay50ZXh0KX07CiAgICAgIH0KICAgICAgLnByb2dyZXNzQmFyQ29udGFpbmVyIHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgbWluLXdpZHRoOiAyMDBweDsKICAgICAgfQoKICAgICAgLnByb2dyZXNzQmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2VlZWVlYiIsICIjNDQ0Iil9OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBib3JkZXItdG9wOiAwLjVweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgibm9uZSIsICIjNTU1Iil9OwogICAgICB9CgogICAgICAucHJvZ3Jlc3NCYXJGaWxsIHsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGJyaWdodC5ibHVlQWN0aXZlKX07CiAgICAgICAgaGVpZ2h0OiA4cHg7CiAgICAgICAgbWFyZ2luLXRvcDogLTAuNXB4OwogICAgICAgIHRyYW5zaXRpb246IDAuMnMgd2lkdGg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHdpZHRoOiAwcHg7CiAgICAgICAgYm9yZGVyLXRvcDogMC41IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJub25lIiwgIiMzOThmZmYiKX07CiAgICAgIH0KCiAgICAgIC5wcm9ncmVzc1RleHQgewogICAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3NCYXJDb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzQmFyRmlsbCI+PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcm9ncmVzc1RleHQiPgogICAgICAgICAgICAke3RoaXMucGVyY2VudGFnZX0lCiAgICAgICAgICA8ZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoX2NoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICAgIHN1cGVyLmZpcnN0VXBkYXRlZChfY2hhbmdlZFByb3BlcnRpZXMpOwogICAgICB0aGlzLnVwZGF0ZUNvbXBsZXRlLnRoZW4oKCkgPT4gewogICAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgICB9KTsKICAgIH0KICAgIGFzeW5jIHVwZGF0ZVBlcmNlbnRhZ2UoKSB7CiAgICAgIGNvbnN0IHByb2dyZXNzQmFyRmlsbCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIucHJvZ3Jlc3NCYXJGaWxsIik7CiAgICAgIHByb2dyZXNzQmFyRmlsbC5zdHlsZS53aWR0aCA9IGAke3RoaXMucGVyY2VudGFnZX0lYDsKICAgIH0KICAgIHVwZGF0ZWQoKSB7CiAgICAgIHRoaXMudXBkYXRlUGVyY2VudGFnZSgpOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODEodGhpcywgX3BlcmNlbnRhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MShfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1Byb2dyZXNzYmFyMiA9IF9jbGFzc1RoaXM7Cn0pKCk7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtc2VhcmNoYmFyL2RlZXMtc2VhcmNoYmFyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTEgPSAoKSA9PiB7CiAgY29uc3Qgb25DaGFuZ2VkID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNjaGFuZ2VkIik7CiAgICBpZiAoZWwpCiAgICAgIGVsLnRleHRDb250ZW50ID0gYHNlYXJjaC1jaGFuZ2VkOiAke2UxMS5kZXRhaWwudmFsdWV9YDsKICB9OwogIGNvbnN0IG9uU3VibWl0ID0gKGUxMSkgPT4gewogICAgY29uc3Qgd3JhcHBlciA9IGUxMS50YXJnZXQuY2xvc2VzdCgiLmRlbW9XcmFwcGVyIik7CiAgICBjb25zdCBlbCA9IHdyYXBwZXI/LnF1ZXJ5U2VsZWN0b3IoIiNzdWJtaXR0ZWQiKTsKICAgIGlmIChlbCkKICAgICAgZWwudGV4dENvbnRlbnQgPSBgc2VhcmNoLXN1Ym1pdDogJHtlMTEuZGV0YWlsLnZhbHVlfWA7CiAgfTsKICByZXR1cm4gYjJgCiAgICA8c3R5bGU+CiAgICAgIC5kZW1vV3JhcHBlciB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIAogICAgICAgIGJhY2tncm91bmQ6ICM4ODg4ODg7CiAgICAgIH0KICAgICAgLmxvZ3MgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgd2lkdGg6IDYwMHB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KICAgICAgLmxvZ3MgZGl2IHsKICAgICAgICBtYXJnaW46IDRweCAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0iZGVtb1dyYXBwZXIiPgogICAgICA8ZGVlcy1zZWFyY2hiYXIKICAgICAgICBAc2VhcmNoLWNoYW5nZWQ9JHtvbkNoYW5nZWR9CiAgICAgICAgQHNlYXJjaC1zdWJtaXQ9JHtvblN1Ym1pdH0KICAgICAgPjwvZGVlcy1zZWFyY2hiYXI+CiAgICAgIDxkaXYgY2xhc3M9ImxvZ3MiPgogICAgICAgIDxkaXYgaWQ9ImNoYW5nZWQiPnNlYXJjaC1jaGFuZ2VkOjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InN1Ym1pdHRlZCI+c2VhcmNoLXN1Ym1pdDo8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNlYXJjaGJhci9kZWVzLXNlYXJjaGJhci5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODIgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTZWFyY2hiYXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNlYXJjaGJhciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2ZpbHRlcnNfZGVjb3JhdG9yczsKICBsZXQgX2ZpbHRlcnNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTZWFyY2hiYXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfZmlsdGVyc19kZWNvcmF0b3JzID0gW241KCldOwogICAgICBfX2VzRGVjb3JhdGU4MSh0aGlzLCBudWxsLCBfZmlsdGVyc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJmaWx0ZXJzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJmaWx0ZXJzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmZpbHRlcnMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmZpbHRlcnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZmlsdGVyc19pbml0aWFsaXplcnMsIF9maWx0ZXJzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODEobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU2VhcmNoYmFyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICAvLyBERU1PCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTE7CiAgICAvLyBTVEFUSUMKICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICA6aG9zdCB7CiAgICAgICAgcGFkZGluZzogNDBweDsKICAgICAgICBmb250LWZhbWlseTogRGVlcyBTYW5zOwogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgIH0KCiAgICAgIC5zZWFyY2hib3hDb250YWluZXIgewogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMDE1IiwgIiNmZmZmZmYxNSIpfTsKICAgICAgICAtLWJveEhlaWdodDogNjBweDsKICAgICAgICBoZWlnaHQ6IHZhcigtLWJveEhlaWdodCk7CiAgICAgICAgYm9yZGVyLXJhZGl1czogdmFyKC0tYm94SGVpZ2h0KTsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDE0MHB4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwMTUiLCAiI2ZmZmZmZjIwIil9OwogICAgICB9CgogICAgICBpbnB1dCB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBiYWNrZ3JvdW5kOiBub25lOwogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzAwMDAwMCIsICIjZWVlZWViIil9OwogICAgICAgIHBhZGRpbmctbGVmdDogMjVweDsKICAgICAgICBtYXJnaW4tcmlnaHQ6IC04cHg7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBmb250LXNpemU6IDE2cHg7CiAgICAgIH0KCiAgICAgIC5zZWFyY2hCdXR0b24gewogICAgICAgIC0tYnV0dG9uUGFkZGluZzogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMwMDAwMDAiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDAwMDAwIiwgIiNlZWVlZWIiKX07CiAgICAgICAgbGluZS1oZWlnaHQ6IGNhbGModmFyKC0tYm94SGVpZ2h0KSAtICh2YXIoLS1idXR0b25QYWRkaW5nKSAqIDIpKTsKICAgICAgICBib3JkZXItcmFkaXVzOiB2YXIoLS1ib3hIZWlnaHQpOwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMSkgOwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDUwJSA1MCU7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIAogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjFzLCBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgICAgbWFyZ2luLXJpZ2h0OiB2YXIoLS1idXR0b25QYWRkaW5nKTsKICAgICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgfQoKICAgICAgLnNlYXJjaEJ1dHRvbjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWUsIGRhcmsuYmx1ZSl9OwogICAgICB9CgogICAgICAuc2VhcmNoQnV0dG9uOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoYnJpZ2h0LmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIHRyYW5zZm9ybTogc2NhbGUoMC45OCk7CiAgICAgIH0KCiAgICAgIC5maWx0ZXJzIHsKICAgICAgICBtYXJnaW46IGF1dG87CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgfQogICAgYAogICAgXTsKICAgICNmaWx0ZXJzX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczgyKHRoaXMsIF9maWx0ZXJzX2luaXRpYWxpemVycywgW10pOwogICAgLy8gSU5TVEFOQ0UKICAgIGdldCBmaWx0ZXJzKCkgewogICAgICByZXR1cm4gdGhpcy4jZmlsdGVyc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGZpbHRlcnModmFsdWUyKSB7CiAgICAgIHRoaXMuI2ZpbHRlcnNfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIHNlYXJjaElucHV0ID0gX19ydW5Jbml0aWFsaXplcnM4Mih0aGlzLCBfZmlsdGVyc19leHRyYUluaXRpYWxpemVycyk7CiAgICBzZWFyY2hCdXR0b247CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgIH0KICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGl2IGNsYXNzPSJzZWFyY2hib3hDb250YWluZXIiPgogICAgICAgIDxpbnB1dCB0eXBlPSJ0ZXh0IiBwbGFjZWhvbGRlcj0iWW91ciBTa2lsbHMgKGUuZy4gVHlwZVNjcmlwdCwgUnVzdCwgUHJvamVjdG1hbmFnZW1lbnQpIiAvPgogICAgICAgIDxkaXYgY2xhc3M9InNlYXJjaEJ1dHRvbiI+U2VhcmNoIC0+PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMuZmlsdGVycy5sZW5ndGggPiAwID8gYjJgCiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVycyI+CiAgICAgICAgPGRlZXMtaGVhZGluZyBsZXZlbD0iaHItc21hbGwiPkZpbHRlcnM8L2RlZXMtaGVhZGluZz4KICAgICAgICA8ZGVlcy1pbnB1dC1kcm9wZG93biAubGFiZWw9JHsibG9jYXRpb24ifT48L2RlZXMtaW5wdXQtZHJvcGRvd24+CiAgICAgIDwvZGl2PiAgCiAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIC8qKgogICAgICogTGlmZWN5Y2xlOiBhZnRlciBmaXJzdCByZW5kZXIsIHdpcmUgdXAgZXZlbnRzIGZvciBpbnB1dCBhbmQgc3VibWl0IGFjdGlvbnMKICAgICAqLwogICAgZmlyc3RVcGRhdGVkKCkgewogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImlucHV0IiwgKCkgPT4gewogICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoInNlYXJjaC1jaGFuZ2VkIiwgewogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlLAogICAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgICB9KSk7CiAgICAgIH0pOwogICAgICB0aGlzLnNlYXJjaElucHV0LmFkZEV2ZW50TGlzdGVuZXIoImtleWRvd24iLCAoZTExKSA9PiB7CiAgICAgICAgaWYgKGUxMS5rZXkgPT09ICJFbnRlciIpIHsKICAgICAgICAgIHRoaXMuX2Rpc3BhdGNoU3VibWl0KCk7CiAgICAgICAgfQogICAgICB9KTsKICAgICAgdGhpcy5zZWFyY2hCdXR0b24uYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLCAoKSA9PiB0aGlzLl9kaXNwYXRjaFN1Ym1pdCgpKTsKICAgIH0KICAgIC8qKgogICAgICogRGlzcGF0Y2ggYSBzdWJtaXQgZXZlbnQgd2l0aCB0aGUgY3VycmVudCBzZWFyY2ggdmFsdWUKICAgICAqLwogICAgX2Rpc3BhdGNoU3VibWl0KCkgewogICAgICB0aGlzLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJzZWFyY2gtc3VibWl0IiwgewogICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgY29tcG9zZWQ6IHRydWUsCiAgICAgICAgZGV0YWlsOiB7IHZhbHVlOiB0aGlzLnNlYXJjaElucHV0LnZhbHVlIH0KICAgICAgfSkpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MihfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NlYXJjaGJhcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5kZW1vLmpzCmluaXRfZGlzdF90czI2KCk7CnZhciBkZW1vRnVuYzUyID0gKCkgPT4gewogIHJldHVybiBiMmAKICAgIDxzdHlsZT4KICAgICAgLnJlZjEgewogICAgICAgIG1hcmdpbjogMjBweDsKICAgICAgICB3aWR0aDogMTBweDsKICAgICAgICBoZWlnaHQ6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmVkOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBjbGFzcz0icmVmMSI+PC9kaXY+CiAgICA8ZGVlcy1zcGVlY2hidWJibGUgLnRleHQ9JHtgCiAgICAgICoqVGhpcyBpcyBhIGxvbmdlciBtYXJrZG93biB0ZXh0IHRoYXQgIGNhbiBiZSB1c2VkIHRoZSB3cml0ZSoqICAKICAgICAgYSBsb25nZXIgZGVzY3JpcHRpb24gYWJvdXQgd2hhdHMgZ29pbmcgb24gdGhlIGFwcCAgCiAgCiAgICAgICoqVGhpcyBpcyBhIHN1YmhlYWRlcioqCiAgICAgIGFuZCBhbm90aGVyIHRleHQKICAgIAogICAgYH0+PC9kZWVzLXNwZWVjaGJ1YmJsZT4KICBgOwp9OwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwZWVjaGJ1YmJsZS9kZWVzLXNwZWVjaGJ1YmJsZS5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4MiA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODMgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNTcGVlY2hidWJibGUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwZWVjaGJ1YmJsZSIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9yczsKICBsZXQgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF90ZXh0X2RlY29yYXRvcnM7CiAgbGV0IF90ZXh0X2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfdGV4dF9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfd2F2ZV9kZWNvcmF0b3JzOwogIGxldCBfd2F2ZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX21hbmlmZXN0ZWRfZGVjb3JhdG9yczsKICBsZXQgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGF0dXNfZGVjb3JhdG9yczsKICBsZXQgX3N0YXR1c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzU3BlZWNoYnViYmxlMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogT2JqZWN0CiAgICAgIH0pXTsKICAgICAgX3RleHRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nLAogICAgICAgIHJlZmxlY3Q6IHRydWUKICAgICAgfSldOwogICAgICBfd2F2ZV9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBCb29sZWFuCiAgICAgIH0pXTsKICAgICAgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQm9vbGVhbgogICAgICB9KV07CiAgICAgIF9zdGF0dXNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX3JlZmZlZEVsZW1lbnRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAicmVmZmVkRWxlbWVudCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAicmVmZmVkRWxlbWVudCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5yZWZmZWRFbGVtZW50LCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5yZWZmZWRFbGVtZW50ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3JlZmZlZEVsZW1lbnRfaW5pdGlhbGl6ZXJzLCBfcmVmZmVkRWxlbWVudF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF90ZXh0X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInRleHQiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInRleHQiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoudGV4dCwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoudGV4dCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF90ZXh0X2luaXRpYWxpemVycywgX3RleHRfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Mih0aGlzLCBudWxsLCBfd2F2ZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ3YXZlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ3YXZlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLndhdmUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLndhdmUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfd2F2ZV9pbml0aWFsaXplcnMsIF93YXZlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODIodGhpcywgbnVsbCwgX21hbmlmZXN0ZWRfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAibWFuaWZlc3RlZCIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAibWFuaWZlc3RlZCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5tYW5pZmVzdGVkLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5tYW5pZmVzdGVkID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX21hbmlmZXN0ZWRfaW5pdGlhbGl6ZXJzLCBfbWFuaWZlc3RlZF9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKHRoaXMsIG51bGwsIF9zdGF0dXNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAic3RhdHVzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJzdGF0dXMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RhdHVzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5zdGF0dXMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfc3RhdHVzX2luaXRpYWxpemVycywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTgyKG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBkZW1vRnVuYzUyOwogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgYXN5bmMgY3JlYXRlQW5kU2hvdyhyZWZFbGVtZW50LCB0ZXh0QXJnKSB7CiAgICAgIGNvbnN0IHdpbmRvd0xheWVyID0gYXdhaXQgRGVlc1dpbmRvd0xheWVyLmNyZWF0ZUFuZFNob3coewogICAgICAgIGJsdXI6IGZhbHNlCiAgICAgIH0pOwogICAgICBjb25zdCBzcGVlY2hidWJibGUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkZWVzLXNwZWVjaGJ1YmJsZSIpOwogICAgICBzcGVlY2hidWJibGUud2luZG93TGF5ZXIgPSB3aW5kb3dMYXllcjsKICAgICAgc3BlZWNoYnViYmxlLnJlZmZlZEVsZW1lbnQgPSByZWZFbGVtZW50OwogICAgICBzcGVlY2hidWJibGUudGV4dCA9IHRleHRBcmc7CiAgICAgIHNwZWVjaGJ1YmJsZS5tYW5pZmVzdGVkID0gdHJ1ZTsKICAgICAgd2luZG93TGF5ZXIuYXBwZW5kQ2hpbGQoc3BlZWNoYnViYmxlKTsKICAgICAgd2luZG93TGF5ZXIuc3R5bGUucG9pbnRlckV2ZW50cyA9ICJub25lIjsKICAgICAgd2luZG93TGF5ZXIuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIud2luZG93T3ZlcmxheSIpLnN0eWxlLnBvaW50ZXJFdmVudHMgPSAibm9uZSI7CiAgICAgIHJldHVybiBzcGVlY2hidWJibGU7CiAgICB9CiAgICAjcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfcmVmZmVkRWxlbWVudF9pbml0aWFsaXplcnMsIHZvaWQgMCk7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IHJlZmZlZEVsZW1lbnQoKSB7CiAgICAgIHJldHVybiB0aGlzLiNyZWZmZWRFbGVtZW50X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgcmVmZmVkRWxlbWVudCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jcmVmZmVkRWxlbWVudF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3RleHRfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9yZWZmZWRFbGVtZW50X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfdGV4dF9pbml0aWFsaXplcnMsIHZvaWQgMCkpOwogICAgZ2V0IHRleHQoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0ZXh0X2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdGV4dCh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdGV4dF9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF90ZXh0X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfd2F2ZV9pbml0aWFsaXplcnMsIGZhbHNlKSk7CiAgICBnZXQgd2F2ZSgpIHsKICAgICAgcmV0dXJuIHRoaXMuI3dhdmVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCB3YXZlKHZhbHVlMikgewogICAgICB0aGlzLiN3YXZlX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODModGhpcywgX3dhdmVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBtYW5pZmVzdGVkKCkgewogICAgICByZXR1cm4gdGhpcy4jbWFuaWZlc3RlZF9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IG1hbmlmZXN0ZWQodmFsdWUyKSB7CiAgICAgIHRoaXMuI21hbmlmZXN0ZWRfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9tYW5pZmVzdGVkX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Myh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgd2luZG93TGF5ZXIgPSBfX3J1bkluaXRpYWxpemVyczgzKHRoaXMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgICAgdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5tYWluY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgd2lsbC1jaGFuZ2U6IHRyYW5zZm9ybTsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4yczsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoMHB4KTsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4yczsKICAgICAgICBtYXJnaW4tbGVmdDogMHB4OwogICAgICAgIGZpbHRlcjogZHJvcC1zaGFkb3coMHB4IDBweCAycHggcmdiYSgwLCAwLCAwLCAwLjIpKTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBvcGFjaXR5OiAwOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuYXJyb3cgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSg0NWRlZyk7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmZmYiLCAiIzMzMyIpfTsKICAgICAgICBoZWlnaHQ6IDE1cHg7CiAgICAgICAgd2lkdGg6IDE1cHg7CiAgICAgICAgbGVmdDogMnB4OwogICAgICAgIHRvcDogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIH0KCiAgICAgIC5zcGVlY2hidWJibGUgewogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMzMzMiKX07CiAgICAgICAgcGFkZGluZzogMHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogM3B4OwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBtaW4td2lkdGg6IDI0MHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICB0b3A6IDBweDsKICAgICAgICBsZWZ0OiA4cHg7CiAgICAgIH0KCiAgICAgIC53YXZlIHsKICAgICAgICBhbmltYXRpb24tbmFtZTogd2F2ZS1hbmltYXRpb247IC8qIFJlZmVycyB0byB0aGUgbmFtZSBvZiB5b3VyIEBrZXlmcmFtZXMgZWxlbWVudCBiZWxvdyAqLwogICAgICAgIGFuaW1hdGlvbi1kdXJhdGlvbjogMi41czsgLyogQ2hhbmdlIHRvIHNwZWVkIHVwIG9yIHNsb3cgZG93biAqLwogICAgICAgIGFuaW1hdGlvbi1pdGVyYXRpb24tY291bnQ6IGluZmluaXRlOyAvKiBOZXZlciBzdG9wIHdhdmluZyA6KSAqLwogICAgICAgIHRyYW5zZm9ybS1vcmlnaW46IDcwJSA3MCU7IC8qIFBpdm90IGFyb3VuZCB0aGUgYm90dG9tLWxlZnQgcGFsbSAqLwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyB3YXZlLWFuaW1hdGlvbiB7CiAgICAgICAgMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICAgIDEwJSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHJvdGF0ZSgxNGRlZyk7CiAgICAgICAgfSAvKiBUaGUgZm9sbG93aW5nIGZpdmUgdmFsdWVzIGNhbiBiZSBwbGF5ZWQgd2l0aCB0byBtYWtlIHRoZSB3YXZpbmcgbW9yZSBvciBsZXNzIGV4dHJlbWUgKi8KICAgICAgICAyMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLThkZWcpOwogICAgICAgIH0KICAgICAgICAzMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTRkZWcpOwogICAgICAgIH0KICAgICAgICA0MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoLTRkZWcpOwogICAgICAgIH0KICAgICAgICA1MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMTBkZWcpOwogICAgICAgIH0KICAgICAgICA2MCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfSAvKiBSZXNldCBmb3IgdGhlIGxhc3QgaGFsZiB0byBwYXVzZSAqLwogICAgICAgIDEwMCUgewogICAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoMGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgICR7dGhpcy5tYW5pZmVzdGVkID8gYjJgCiAgICAgICAgICAgIDxkaXYgY2xhc3M9Im1haW5jb250YWluZXIiIEBjbGljaz0ke3RoaXMuaGFuZGxlQ2xpY2t9PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImFycm93Ij48L2Rpdj4KICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGVlY2hidWJibGUiPgogICAgICAgICAgICAgICAgJHt0aGlzLndhdmUgPyBiMmA8c3BhbiBjbGFzcz0id2F2ZSI+8J+Rizwvc3Bhbj5gIDogYjJgYH0KICAgICAgICAgICAgICAgICR7ZGlyZWN0aXZlc19leHBvcnRzLnJlc29sdmUodGhpcy5nZXRIdG1sKCkpfQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiBiMmBgfQogICAgYDsKICAgIH0KICAgIGFzeW5jIGhhbmRsZUNsaWNrKCkgewogICAgICBjb25zb2xlLmxvZygic3BlZWNoYnViYmxlIGdvdCBjbGlja2VkLiIpOwogICAgfQogICAgYXN5bmMgZmlyc3RVcGRhdGVkKCkgewogICAgICBpZiAoIXRoaXMucmVmZmVkRWxlbWVudCkgewogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudCA9IHRoaXMucHJldmlvdXNFbGVtZW50U2libGluZzsKICAgICAgfQogICAgICBpZiAodGhpcy5tYW5pZmVzdGVkKSB7CiAgICAgICAgYXdhaXQgdGhpcy51cGRhdGVQb3NpdGlvbigpOwogICAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMSI7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgbGV0IHNwZWVjaGJ1YmJsZTsKICAgICAgICB0aGlzLnJlZmZlZEVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VlbnRlciIsIGFzeW5jICgpID0+IHsKICAgICAgICAgIHNwZWVjaGJ1YmJsZSA9IGF3YWl0IERlZXNTcGVlY2hidWJibGUyLmNyZWF0ZUFuZFNob3codGhpcy5yZWZmZWRFbGVtZW50LCB0aGlzLnRleHQpOwogICAgICAgIH0pOwogICAgICAgIHRoaXMucmVmZmVkRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZWxlYXZlIiwgKCkgPT4gewogICAgICAgICAgc3BlZWNoYnViYmxlLmRlc3Ryb3koKTsKICAgICAgICB9KTsKICAgICAgfQogICAgfQogICAgYXN5bmMgdXBkYXRlUG9zaXRpb24oKSB7CiAgICAgIGNvbnN0IHJlZkVsZW1lbnQgPSB0aGlzLnJlZmZlZEVsZW1lbnQ7CiAgICAgIGNvbnN0IGJvdW5kaW5nQ2xpZW50UmVjdCA9IHJlZkVsZW1lbnQuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7CiAgICAgIHRoaXMuc3R5bGUucG9zaXRpb24gPSAiZml4ZWQiOwogICAgICB0aGlzLnN0eWxlLnRvcCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC50b3AgLSAxM31weGA7CiAgICAgIHRoaXMuc3R5bGUubGVmdCA9IGAke2JvdW5kaW5nQ2xpZW50UmVjdC5sZWZ0ICsgcmVmRWxlbWVudC5jbGllbnRXaWR0aCArIDR9cHhgOwogICAgICBpZiAoYm91bmRpbmdDbGllbnRSZWN0LnJpZ2h0ID4gMjUwKSB7CiAgICAgICAgdGhpcy5zdHlsZS53aWR0aCA9IGAyNTBweGA7CiAgICAgIH0KICAgIH0KICAgIGFzeW5jIGdldEh0bWwoKSB7CiAgICAgIGlmICghdGhpcy50ZXh0KSB7CiAgICAgICAgcmV0dXJuICIiOwogICAgICB9CiAgICAgIGNvbnN0IG5vcm1hbGl6ZWQgPSBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0c3RyaW5nLm5vcm1hbGl6ZS5zdGFuZGFyZCh0aGlzLnRleHQpOwogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBkaXN0X3RzX2V4cG9ydHMyNS5wbHVnaW5zLnNtYXJ0bWFya2Rvd24uU21hcnRNYXJrZG93bi5lYXN5TWFya2Rvd25Ub0h0bWwobm9ybWFsaXplZCk7CiAgICAgIHJldHVybiBvOChyZXN1bHQpOwogICAgfQogICAgYXN5bmMgc2hvdygpIHsKICAgIH0KICAgIGFzeW5jIGRlc3Ryb3koKSB7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIubWFpbmNvbnRhaW5lciIpLnN0eWxlLm9wYWNpdHkgPSAiMCI7CiAgICAgIHRoaXMud2luZG93TGF5ZXIuZGVzdHJveSgpOwogICAgfQogICAgc3RhdGljIHsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4MyhfY2xhc3NUaGlzLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgfTsKICByZXR1cm4gRGVlc1NwZWVjaGJ1YmJsZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXNwaW5uZXIvZGVlcy1zcGlubmVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTgzID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NCA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1NwaW5uZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXNwaW5uZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zaXplX2RlY29yYXRvcnM7CiAgbGV0IF9zaXplX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2l6ZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfYm53X2RlY29yYXRvcnM7CiAgbGV0IF9ibndfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9ibndfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3N0YXR1c19kZWNvcmF0b3JzOwogIGxldCBfc3RhdHVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfc3RhdHVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNTcGlubmVyMiA9IGNsYXNzIGV4dGVuZHMgX2NsYXNzU3VwZXIgewogICAgc3RhdGljIHsKICAgICAgX2NsYXNzVGhpcyA9IHRoaXM7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBjb25zdCBfbWV0YWRhdGEgPSB0eXBlb2YgU3ltYm9sID09PSAiZnVuY3Rpb24iICYmIFN5bWJvbC5tZXRhZGF0YSA/IE9iamVjdC5jcmVhdGUoX2NsYXNzU3VwZXJbU3ltYm9sLm1ldGFkYXRhXSA/PyBudWxsKSA6IHZvaWQgMDsKICAgICAgX3NpemVfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogTnVtYmVyCiAgICAgIH0pXTsKICAgICAgX2Jud19kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfc3RhdHVzX2RlY29yYXRvcnMgPSBbbjUoKV07CiAgICAgIF9fZXNEZWNvcmF0ZTgzKHRoaXMsIG51bGwsIF9zaXplX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInNpemUiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNpemUiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc2l6ZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc2l6ZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zaXplX2luaXRpYWxpemVycywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfYm53X2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImJudyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiYm53IiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmJudywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouYm53ID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2Jud19pbml0aWFsaXplcnMsIF9ibndfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Myh0aGlzLCBudWxsLCBfc3RhdHVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogInN0YXR1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RhdHVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnN0YXR1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouc3RhdHVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0YXR1c19pbml0aWFsaXplcnMsIF9zdGF0dXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4MyhudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNTcGlubmVyMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9ICgpID0+IGIyYAogICAgPGRlZXMtc3Bpbm5lcj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgICA8ZGVlcy1zcGlubmVyIHNpemU9JHs2NH0gc3RhdHVzPSJzdWNjZXNzIj48L2RlZXMtc3Bpbm5lcj4KICAgIDxkZWVzLXNwaW5uZXIgLnNpemU9JHs2NH0gc3RhdHVzPSJlcnJvciI+PC9kZWVzLXNwaW5uZXI+CiAgYDsKICAgICNzaXplX2FjY2Vzc29yX3N0b3JhZ2UgPSBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9zaXplX2luaXRpYWxpemVycywgMjApOwogICAgZ2V0IHNpemUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzaXplX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2l6ZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jc2l6ZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2Jud19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3NpemVfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg0KHRoaXMsIF9ibndfaW5pdGlhbGl6ZXJzLCBmYWxzZSkpOwogICAgZ2V0IGJudygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2Jud19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGJudyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jYm53X2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjc3RhdHVzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfYm53X2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NCh0aGlzLCBfc3RhdHVzX2luaXRpYWxpemVycywgIm5vcm1hbCIpKTsKICAgIGdldCBzdGF0dXMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGF0dXNfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBzdGF0dXModmFsdWUyKSB7CiAgICAgIHRoaXMuI3N0YXR1c19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODQodGhpcywgX3N0YXR1c19leHRyYUluaXRpYWxpemVycyk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CgogICAgICAjbG9hZGluZyB7CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIHRyYW5zaXRpb246IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBhbGlnbi1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgYmFja2dyb3VuZDogIzhiYzM0YTAwOwogICAgICAgIGJvcmRlcjogM3B4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsIDAsIDAsIDAuMSkiLCAicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjMpIil9OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBib3JkZXItdG9wLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzMzMyIsICIjZmZmIil9OwogICAgICAgIGFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogc3BpbiAxcyBlYXNlLWluLW91dCBpbmZpbml0ZTsKICAgICAgfQoKICAgICAgI2xvYWRpbmcuc3VjY2VzcyB7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBhbmltYXRpb246IG5vbmU7CiAgICAgICAgLXdlYmtpdC1hbmltYXRpb246IG5vbmU7CiAgICAgIH0KCiAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNTAlOwogICAgICAgIGFuaW1hdGlvbjogbm9uZTsKICAgICAgICAtd2Via2l0LWFuaW1hdGlvbjogbm9uZTsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CiAgICAgIEAtd2Via2l0LWtleWZyYW1lcyBzcGluIHsKICAgICAgICB0byB7CiAgICAgICAgICAtd2Via2l0LXRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7CiAgICAgICAgfQogICAgICB9CgogICAgICBkZWVzLWljb24gewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KICAgIGAKICAgIF07CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICNsb2FkaW5nIHsKICAgICAgICAgIHdpZHRoOiAke3RoaXMuc2l6ZX1weDsKICAgICAgICAgIGhlaWdodDogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLnN1Y2Nlc3MgewogICAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKHRoaXMuYm53ID8gIiMzMzMiIDogYCM4YmMzNGFgLCB0aGlzLmJudyA/ICIjZmZmIiA6IGAjOGJjMzRhYCl9OwogICAgICAgICAgCiAgICAgICAgfQogICAgICAgICNsb2FkaW5nLmVycm9yIHsKICAgICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSh0aGlzLmJudyA/ICIjMzMzIiA6IGAjZTY0YTE5YCwgdGhpcy5ibncgPyAiI2ZmZiIgOiBgI2U2NGExOWApfTsKICAgICAgICB9CiAgICAgICAgZGVlcy1pY29uIHsKICAgICAgICAgIGZvbnQtc2l6ZTogJHt0aGlzLnNpemV9cHg7CiAgICAgICAgfQogICAgICA8L3N0eWxlPgogICAgICA8ZGl2IGNsYXNzPSIke3RoaXMuc3RhdHVzfSIgaWQ9ImxvYWRpbmciPgogICAgICAgICR7KCgpID0+IHsKICAgICAgICBpZiAodGhpcy5zdGF0dXMgPT09ICJzdWNjZXNzIikgewogICAgICAgICAgcmV0dXJuIGIyYDxkZWVzLWljb24gc3R5bGU9InRyYW5zZm9ybTogdHJhbnNsYXRlWCgxJSkgdHJhbnNsYXRlWSgzJSk7IiAuaWNvbj0keyJmYTpjaXJjbGUtY2hlY2sifT48L2RlZXMtaWNvbj5gOwogICAgICAgIH0gZWxzZSBpZiAodGhpcy5zdGF0dXMgPT09ICJlcnJvciIpIHsKICAgICAgICAgIHJldHVybiBiMmA8ZGVlcy1pY29uIC5pY29uPSR7ImZhOmNpcmNsZS14bWFyayJ9PjwvZGVlcy1pY29uPmA7CiAgICAgICAgfQogICAgICB9KSgpfQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg0KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3Bpbm5lcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIHN0ZXBwZXJEZW1vID0gKCkgPT4gYjJgCiAgPGRlZXMtc3RlcHBlcgogICAgLnN0ZXBzPSR7WwogIHsKICAgIHRpdGxlOiAiQWNjb3VudCBTZXR1cCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJlbWFpbCIgbGFiZWw9IldvcmsgRW1haWwiIHJlcXVpcmVkPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0icGFzc3dvcmQiIGxhYmVsPSJDcmVhdGUgUGFzc3dvcmQiIHR5cGU9InBhc3N3b3JkIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlByb2ZpbGUgRGV0YWlscyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJmaXJzdE5hbWUiIGxhYmVsPSJGaXJzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtdGV4dCBrZXk9Imxhc3ROYW1lIiBsYWJlbD0iTGFzdCBOYW1lIiByZXF1aXJlZD48L2RlZXMtaW5wdXQtdGV4dD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIkNvbnRhY3QgSW5mb3JtYXRpb24iLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1waG9uZSBrZXk9InBob25lIiBsYWJlbD0iTW9iaWxlIE51bWJlciIgcmVxdWlyZWQ+PC9kZWVzLWlucHV0LXBob25lPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC10ZXh0IGtleT0iY29tcGFueSIgbGFiZWw9IkNvbXBhbnkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiVGVhbSBTaXplIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtZHJvcGRvd24KICAgICAgICAgICAgICBrZXk9InRlYW1TaXplIgogICAgICAgICAgICAgIGxhYmVsPSJIb3cgYmlnIGlzIHlvdXIgdGVhbT8iCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICIxLTUiLCB2YWx1ZTogIjEtNSIgfSwKICAgICAgeyBsYWJlbDogIjYtMjAiLCB2YWx1ZTogIjYtMjAiIH0sCiAgICAgIHsgbGFiZWw6ICIyMS01MCIsIHZhbHVlOiAiMjEtNTAiIH0sCiAgICAgIHsgbGFiZWw6ICI1MSsiLCB2YWx1ZTogIjUxKyIgfQogICAgXX0KICAgICAgICAgICAgICByZXF1aXJlZAogICAgICAgICAgICA+PC9kZWVzLWlucHV0LWRyb3Bkb3duPgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiR29hbHMiLAogICAgY29udGVudDogYjJgCiAgICAgICAgICA8ZGVlcy1mb3JtPgogICAgICAgICAgICA8ZGVlcy1pbnB1dC1tdWx0aXRvZ2dsZQogICAgICAgICAgICAgIGtleT0iZ29hbCIKICAgICAgICAgICAgICBsYWJlbD0iTWFpbiBvYmplY3RpdmUiCiAgICAgICAgICAgICAgLm9wdGlvbnM9JHtbCiAgICAgIHsgbGFiZWw6ICJPbmJvYXJkaW5nIiwgdmFsdWU6ICJvbmJvYXJkaW5nIiB9LAogICAgICB7IGxhYmVsOiAiQW5hbHl0aWNzIiwgdmFsdWU6ICJhbmFseXRpY3MiIH0sCiAgICAgIHsgbGFiZWw6ICJBdXRvbWF0aW9uIiwgdmFsdWU6ICJhdXRvbWF0aW9uIiB9CiAgICBdfQogICAgICAgICAgICAgIHJlcXVpcmVkCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbXVsdGl0b2dnbGU+CiAgICAgICAgICAgIDxkZWVzLWZvcm0tc3VibWl0PkNvbnRpbnVlPC9kZWVzLWZvcm0tc3VibWl0PgogICAgICAgICAgPC9kZWVzLWZvcm0+CiAgICAgICAgYCwKICAgIHZhbGlkYXRpb25GdW5jOiBhc3luYyAoc3RlcHBlckFyZywgZWxlbWVudEFyZykgPT4gewogICAgICBjb25zdCBkZWVzRm9ybSA9IGVsZW1lbnRBcmcucXVlcnlTZWxlY3RvcigiZGVlcy1mb3JtIik7CiAgICAgIGRlZXNGb3JtLmFkZEV2ZW50TGlzdGVuZXIoImZvcm1EYXRhIiwgKCkgPT4gc3RlcHBlckFyZy5nb05leHQoKSwgeyBvbmNlOiB0cnVlIH0pOwogICAgfQogIH0sCiAgewogICAgdGl0bGU6ICJCcmFuZCBQcmVmZXJlbmNlcyIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLWZvcm0+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJicmFuZENvbG9yIiBsYWJlbD0iUHJpbWFyeSBicmFuZCBjb2xvciI+PC9kZWVzLWlucHV0LXRleHQ+CiAgICAgICAgICAgIDxkZWVzLWlucHV0LXRleHQga2V5PSJ0b25lIiBsYWJlbD0iUHJlZmVycmVkIHRvbmUgKGUuZy4gZnJpZW5kbHksIGZvcm1hbCkiPjwvZGVlcy1pbnB1dC10ZXh0PgogICAgICAgICAgICA8ZGVlcy1mb3JtLXN1Ym1pdD5Db250aW51ZTwvZGVlcy1mb3JtLXN1Ym1pdD4KICAgICAgICAgIDwvZGVlcy1mb3JtPgogICAgICAgIGAsCiAgICB2YWxpZGF0aW9uRnVuYzogYXN5bmMgKHN0ZXBwZXJBcmcsIGVsZW1lbnRBcmcpID0+IHsKICAgICAgY29uc3QgZGVlc0Zvcm0gPSBlbGVtZW50QXJnLnF1ZXJ5U2VsZWN0b3IoImRlZXMtZm9ybSIpOwogICAgICBkZWVzRm9ybS5hZGRFdmVudExpc3RlbmVyKCJmb3JtRGF0YSIsICgpID0+IHN0ZXBwZXJBcmcuZ29OZXh0KCksIHsgb25jZTogdHJ1ZSB9KTsKICAgIH0KICB9LAogIHsKICAgIHRpdGxlOiAiSW50ZWdyYXRpb25zIiwKICAgIGNvbnRlbnQ6IGIyYAogICAgICAgICAgPGRlZXMtZm9ybT4KICAgICAgICAgICAgPGRlZXMtaW5wdXQtbGlzdAogICAgICAgICAgICAgIGtleT0iaW50ZWdyYXRpb25zIgogICAgICAgICAgICAgIGxhYmVsPSJJbnRlZ3JhdGlvbnMgaW4gdXNlIgogICAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJBZGQgaW50ZWdyYXRpb24iCiAgICAgICAgICAgID48L2RlZXMtaW5wdXQtbGlzdD4KICAgICAgICAgICAgPGRlZXMtZm9ybS1zdWJtaXQ+Q29udGludWU8L2RlZXMtZm9ybS1zdWJtaXQ+CiAgICAgICAgICA8L2RlZXMtZm9ybT4KICAgICAgICBgLAogICAgdmFsaWRhdGlvbkZ1bmM6IGFzeW5jIChzdGVwcGVyQXJnLCBlbGVtZW50QXJnKSA9PiB7CiAgICAgIGNvbnN0IGRlZXNGb3JtID0gZWxlbWVudEFyZy5xdWVyeVNlbGVjdG9yKCJkZWVzLWZvcm0iKTsKICAgICAgZGVlc0Zvcm0uYWRkRXZlbnRMaXN0ZW5lcigiZm9ybURhdGEiLCAoKSA9PiBzdGVwcGVyQXJnLmdvTmV4dCgpLCB7IG9uY2U6IHRydWUgfSk7CiAgICB9CiAgfSwKICB7CiAgICB0aXRsZTogIlJldmlldyAmIExhdW5jaCIsCiAgICBjb250ZW50OiBiMmAKICAgICAgICAgIDxkZWVzLXBhbmVsPgogICAgICAgICAgICA8cD5BbG1vc3QgdGhlcmUhIFJldmlldyB5b3VyIHNlbGVjdGlvbnMgYW5kIGxhdW5jaCB3aGVuZXZlciB5b3UncmUgcmVhZHkuPC9wPgogICAgICAgICAgPC9kZWVzLXBhbmVsPgogICAgICAgIGAKICB9Cl19CiAgPjwvZGVlcy1zdGVwcGVyPgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXN0ZXBwZXIvZGVlcy1zdGVwcGVyLmpzCmluaXRfZGlzdF90czI2KCk7CmluaXRfZGlzdF90czI1KCk7CmluaXRfdGhlbWUoKTsKdmFyIF9fZXNEZWNvcmF0ZTg0ID0gZnVuY3Rpb24oY3RvciwgZGVzY3JpcHRvckluLCBkZWNvcmF0b3JzLCBjb250ZXh0SW4sIGluaXRpYWxpemVycywgZXh0cmFJbml0aWFsaXplcnMpIHsKICBmdW5jdGlvbiBhY2NlcHQoZjcpIHsKICAgIGlmIChmNyAhPT0gdm9pZCAwICYmIHR5cGVvZiBmNyAhPT0gImZ1bmN0aW9uIikgdGhyb3cgbmV3IFR5cGVFcnJvcigiRnVuY3Rpb24gZXhwZWN0ZWQiKTsKICAgIHJldHVybiBmNzsKICB9CiAgdmFyIGtpbmQgPSBjb250ZXh0SW4ua2luZCwga2V5MiA9IGtpbmQgPT09ICJnZXR0ZXIiID8gImdldCIgOiBraW5kID09PSAic2V0dGVyIiA/ICJzZXQiIDogInZhbHVlIjsKICB2YXIgdGFyZ2V0ID0gIWRlc2NyaXB0b3JJbiAmJiBjdG9yID8gY29udGV4dEluWyJzdGF0aWMiXSA/IGN0b3IgOiBjdG9yLnByb3RvdHlwZSA6IG51bGw7CiAgdmFyIGRlc2NyaXB0b3IgPSBkZXNjcmlwdG9ySW4gfHwgKHRhcmdldCA/IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSkgOiB7fSk7CiAgdmFyIF80LCBkb25lID0gZmFsc2U7CiAgZm9yICh2YXIgaTExID0gZGVjb3JhdG9ycy5sZW5ndGggLSAxOyBpMTEgPj0gMDsgaTExLS0pIHsKICAgIHZhciBjb250ZXh0MiA9IHt9OwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluKSBjb250ZXh0MltwN10gPSBwNyA9PT0gImFjY2VzcyIgPyB7fSA6IGNvbnRleHRJbltwN107CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4uYWNjZXNzKSBjb250ZXh0Mi5hY2Nlc3NbcDddID0gY29udGV4dEluLmFjY2Vzc1twN107CiAgICBjb250ZXh0Mi5hZGRJbml0aWFsaXplciA9IGZ1bmN0aW9uKGY3KSB7CiAgICAgIGlmIChkb25lKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgYWRkIGluaXRpYWxpemVycyBhZnRlciBkZWNvcmF0aW9uIGhhcyBjb21wbGV0ZWQiKTsKICAgICAgZXh0cmFJbml0aWFsaXplcnMucHVzaChhY2NlcHQoZjcgfHwgbnVsbCkpOwogICAgfTsKICAgIHZhciByZXN1bHQgPSAoMCwgZGVjb3JhdG9yc1tpMTFdKShraW5kID09PSAiYWNjZXNzb3IiID8geyBnZXQ6IGRlc2NyaXB0b3IuZ2V0LCBzZXQ6IGRlc2NyaXB0b3Iuc2V0IH0gOiBkZXNjcmlwdG9yW2tleTJdLCBjb250ZXh0Mik7CiAgICBpZiAoa2luZCA9PT0gImFjY2Vzc29yIikgewogICAgICBpZiAocmVzdWx0ID09PSB2b2lkIDApIGNvbnRpbnVlOwogICAgICBpZiAocmVzdWx0ID09PSBudWxsIHx8IHR5cGVvZiByZXN1bHQgIT09ICJvYmplY3QiKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QgZXhwZWN0ZWQiKTsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5nZXQpKSBkZXNjcmlwdG9yLmdldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LnNldCkpIGRlc2NyaXB0b3Iuc2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuaW5pdCkpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgIH0gZWxzZSBpZiAoXzQgPSBhY2NlcHQocmVzdWx0KSkgewogICAgICBpZiAoa2luZCA9PT0gImZpZWxkIikgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgICBlbHNlIGRlc2NyaXB0b3Jba2V5Ml0gPSBfNDsKICAgIH0KICB9CiAgaWYgKHRhcmdldCkgT2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCwgY29udGV4dEluLm5hbWUsIGRlc2NyaXB0b3IpOwogIGRvbmUgPSB0cnVlOwp9Owp2YXIgX19ydW5Jbml0aWFsaXplcnM4NSA9IGZ1bmN0aW9uKHRoaXNBcmcsIGluaXRpYWxpemVycywgdmFsdWUyKSB7CiAgdmFyIHVzZVZhbHVlID0gYXJndW1lbnRzLmxlbmd0aCA+IDI7CiAgZm9yICh2YXIgaTExID0gMDsgaTExIDwgaW5pdGlhbGl6ZXJzLmxlbmd0aDsgaTExKyspIHsKICAgIHZhbHVlMiA9IHVzZVZhbHVlID8gaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnLCB2YWx1ZTIpIDogaW5pdGlhbGl6ZXJzW2kxMV0uY2FsbCh0aGlzQXJnKTsKICB9CiAgcmV0dXJuIHVzZVZhbHVlID8gdmFsdWUyIDogdm9pZCAwOwp9Owp2YXIgRGVlc1N0ZXBwZXIgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXN0ZXBwZXIiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9zdGVwc19kZWNvcmF0b3JzOwogIGxldCBfc3RlcHNfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zdGVwc19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnM7CiAgbGV0IF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9zZWxlY3RlZFN0ZXBfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICB2YXIgRGVlc1N0ZXBwZXIyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfc3RlcHNfZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogQXJyYXkKICAgICAgfSldOwogICAgICBfc2VsZWN0ZWRTdGVwX2RlY29yYXRvcnMgPSBbbjUoewogICAgICAgIHR5cGU6IE9iamVjdAogICAgICB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg0KHRoaXMsIG51bGwsIF9zdGVwc19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzdGVwcyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAic3RlcHMiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouc3RlcHMsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnN0ZXBzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX3N0ZXBzX2luaXRpYWxpemVycywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQodGhpcywgbnVsbCwgX3NlbGVjdGVkU3RlcF9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJzZWxlY3RlZFN0ZXAiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInNlbGVjdGVkU3RlcCIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5zZWxlY3RlZFN0ZXAsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnNlbGVjdGVkU3RlcCA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9zZWxlY3RlZFN0ZXBfaW5pdGlhbGl6ZXJzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODQobnVsbCwgX2NsYXNzRGVzY3JpcHRvciA9IHsgdmFsdWU6IF9jbGFzc1RoaXMgfSwgX2NsYXNzRGVjb3JhdG9ycywgeyBraW5kOiAiY2xhc3MiLCBuYW1lOiBfY2xhc3NUaGlzLm5hbWUsIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgbnVsbCwgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgICBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgc3RhdGljIGRlbW8gPSBzdGVwcGVyRGVtbzsKICAgICNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc3RlcHNfaW5pdGlhbGl6ZXJzLCBbXSk7CiAgICBnZXQgc3RlcHMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IHN0ZXBzKHZhbHVlMikgewogICAgICB0aGlzLiNzdGVwc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3NlbGVjdGVkU3RlcF9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODUodGhpcywgX3N0ZXBzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2luaXRpYWxpemVycywgdm9pZCAwKSk7CiAgICBnZXQgc2VsZWN0ZWRTdGVwKCkgewogICAgICByZXR1cm4gdGhpcy4jc2VsZWN0ZWRTdGVwX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgc2VsZWN0ZWRTdGVwKHZhbHVlMikgewogICAgICB0aGlzLiNzZWxlY3RlZFN0ZXBfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgIGNvbnN0cnVjdG9yKCkgewogICAgICBzdXBlcigpOwogICAgfQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIC8qIFRPRE86IE1pZ3JhdGUgaGFyZGNvZGVkIHZhbHVlcyB0byAtLWRlZXMtKiBDU1MgdmFyaWFibGVzICovCiAgICAgIDpob3N0IHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CiAgICAgIC5zdGVwcGVyQ29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zdGVwIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IG5vbmU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGJveC1zaGFkb3cgMC43cyBjdWJpYy1iZXppZXIoMC44NywgMCwgMC4xMywgMSksIGZpbHRlciAwLjdzIGN1YmljLWJlemllcigwLjg3LCAwLCAwLjEzLCAxKSwgYm9yZGVyIDAuN3MgY3ViaWMtYmV6aWVyKDAuODcsIDAsIDAuMTMsIDEpOwogICAgICAgIG1heC13aWR0aDogNTAwcHg7CiAgICAgICAgbWluLWhlaWdodDogMzAwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMGYwZjExIil9OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZTJlOGYwIiwgIiMyNzI3MjkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmNWY1ZjUiKX07CiAgICAgICAgbWFyZ2luOiBhdXRvOwogICAgICAgIG1hcmdpbi1ib3R0b206IDIwcHg7CiAgICAgICAgZmlsdGVyOiBvcGFjaXR5KDAuNTUpIHNhdHVyYXRlKDAuODUpOwogICAgICAgIGJveC1zaGFkb3c6IDAgOHB4IDMycHggcmdiYSgwLCAwLCAwLCAwLjQpOwogICAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB9CgogICAgICAuc3RlcC5zZWxlY3RlZCB7CiAgICAgICAgcG9pbnRlci1ldmVudHM6IGFsbDsKICAgICAgICBmaWx0ZXI6IG9wYWNpdHkoMSkgc2F0dXJhdGUoMSk7CiAgICAgICAgdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgIH0KCiAgICAgIC5zdGVwLmhpZGRlblN0ZXAgewogICAgICAgIGZpbHRlcjogb3BhY2l0eSgwKTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UgewogICAgICAgIHRyYW5zaXRpb246IHRyYW5zZm9ybSAwLjM1cyBlYXNlLCBib3gtc2hhZG93IDAuMzVzIGVhc2UsIGZpbHRlciAwLjM1cyBlYXNlLCBib3JkZXIgMC4zNXMgZWFzZTsKICAgICAgfQoKICAgICAgLnN0ZXAuZW50cmFuY2UuaGlkZGVuU3RlcCB7CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVZKDE2cHgpOwogICAgICB9CgogICAgICAuc3RlcDpsYXN0LWNoaWxkIHsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMDB2aDsKICAgICAgfQoKICAgICAgLnN0ZXAgLnN0ZXBDb3VudGVyIHsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM2NDc0OGIiLCAiI2ExYTFhYSIpfTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAxMnB4OwogICAgICAgIHJpZ2h0OiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxNHB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA5OTlweDsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC40NSkiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoInJnYmEoMjI2LCAyMzIsIDI0MCwgMC43KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNikiKX07CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2sgewogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDEycHg7CiAgICAgICAgbGVmdDogMTJweDsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDk5OXB4OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuOSkiLCAicmdiYSg2MywgNjMsIDcwLCAwLjg1KSIpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyNTUsIDI1NSwgMjU1LCAwLjkpIiwgInJnYmEoMzksIDM5LCA0MiwgMC44NSkiKX07CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNDc1NTY5IiwgIiNkNGQ0ZDgiKX07CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGJvcmRlciAwLjJzIGVhc2UsIGNvbG9yIDAuMnMgZWFzZSwgYmFja2dyb3VuZCAwLjJzIGVhc2UsIHRyYW5zZm9ybSAwLjJzIGVhc2U7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5nb0JhY2s6aG92ZXIgewogICAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzBmMTcyYSIsICIjZmFmYWZhIil9OwogICAgICAgIGJvcmRlci1jb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoZGFyay5ibHVlLCBkYXJrLmJsdWUpfTsKICAgICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgicmdiYSgyMjYsIDIzMiwgMjQwLCAwLjk1KSIsICJyZ2JhKDYzLCA2MywgNzAsIDAuNykiKX07CiAgICAgICAgdHJhbnNmb3JtOiB0cmFuc2xhdGVYKC0ycHgpOwogICAgICB9CgogICAgICAuc3RlcCAuZ29CYWNrOmFjdGl2ZSB7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMGYxNzJhIiwgIiNmYWZhZmEiKX07CiAgICAgICAgYm9yZGVyLWNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZShkYXJrLmJsdWVBY3RpdmUsIGRhcmsuYmx1ZUFjdGl2ZSl9OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDIyNiwgMjMyLCAyNDAsIDAuODUpIiwgInJnYmEoNjMsIDYzLCA3MCwgMC42KSIpfTsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjayBzcGFuIHsKICAgICAgICB0cmFuc2l0aW9uOiB0cmFuc2Zvcm0gMC4ycyBlYXNlOwogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgfQoKICAgICAgLnN0ZXAgLmdvQmFjazpob3ZlciBzcGFuIHsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVgoLTJweCk7CiAgICAgIH0KCiAgICAgIC5zdGVwIC50aXRsZSB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmctdG9wOiA2NHB4OwogICAgICAgIGZvbnQtZmFtaWx5OiAnR2Vpc3QgU2FucycsIHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAyNHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbGV0dGVyLXNwYWNpbmc6IC0wLjAxZW07CiAgICAgICAgY29sb3I6IGluaGVyaXQ7CiAgICAgIH0KCiAgICAgIC5zdGVwIC5jb250ZW50IHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InN0ZXBwZXJDb250YWluZXIiPgogICAgICAgICR7dGhpcy5zdGVwcy5tYXAoKHN0ZXBBcmcpID0+IGIyYDxkaXYKICAgICAgICAgICAgICBjbGFzcz0ic3RlcCAke3N0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwID8gInNlbGVjdGVkIiA6IG51bGx9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA+IHRoaXMuZ2V0SW5kZXhPZlN0ZXAodGhpcy5zZWxlY3RlZFN0ZXApID8gImhpZGRlblN0ZXAiIDogIiJ9ICR7dGhpcy5nZXRJbmRleE9mU3RlcChzdGVwQXJnKSA9PT0gMCA/ICJlbnRyYW5jZSIgOiAiIn0iCiAgICAgICAgICAgID4KICAgICAgICAgICAgICAke3RoaXMuZ2V0SW5kZXhPZlN0ZXAoc3RlcEFyZykgPiAwID8gYjJgPGRpdiBjbGFzcz0iZ29CYWNrIiBAY2xpY2s9JHt0aGlzLmdvQmFja30+PHNwYW4gc3R5bGU9ImZvbnQtZmFtaWx5OiBJbnRlciI+PC08L3NwYW4+IGdvIHRvIHByZXZpb3VzIHN0ZXA8L2Rpdj5gIDogYGB9CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3RlcENvdW50ZXIiPgogICAgICAgICAgICAgICAgU3RlcCAke3RoaXMuc3RlcHMuZmluZEluZGV4KChlbGVtZW50QXJnKSA9PiBlbGVtZW50QXJnID09PSBzdGVwQXJnKSArIDF9IG9mCiAgICAgICAgICAgICAgICAke3RoaXMuc3RlcHMubGVuZ3RofQogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDxkaXYgY2xhc3M9InRpdGxlIj4ke3N0ZXBBcmcudGl0bGV9PC9kaXY+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+JHtzdGVwQXJnLmNvbnRlbnR9PC9kaXY+CiAgICAgICAgICAgIDwvZGl2PiBgKX0KICAgICAgPC9kaXY+CiAgICBgOwogICAgfQogICAgZ2V0SW5kZXhPZlN0ZXAgPSAoX19ydW5Jbml0aWFsaXplcnM4NSh0aGlzLCBfc2VsZWN0ZWRTdGVwX2V4dHJhSW5pdGlhbGl6ZXJzKSwgKHN0ZXBBcmcpID0+IHsKICAgICAgcmV0dXJuIHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnMikgPT4gc3RlcEFyZyA9PT0gc3RlcEFyZzIpOwogICAgfSk7CiAgICBhc3luYyBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIGF3YWl0IHRoaXMuZG9tdG9vbHNQcm9taXNlOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzLmNvbnZlbmllbmNlLnNtYXJ0ZGVsYXkuZGVsYXlGb3IoMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gdGhpcy5zdGVwc1swXTsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDM1MCk7CiAgICAgIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc3RlcC5lbnRyYW5jZSIpPy5jbGFzc0xpc3QucmVtb3ZlKCJlbnRyYW5jZSIpOwogICAgfQogICAgYXN5bmMgdXBkYXRlZCgpIHsKICAgICAgdGhpcy5zZXRTY3JvbGxTdGF0dXMoKTsKICAgIH0KICAgIHNjcm9sbGVyOwogICAgYXN5bmMgc2V0U2Nyb2xsU3RhdHVzKCkgewogICAgICBjb25zdCBzdGVwcGVyQ29udGFpbmVyID0gdGhpcy5zaGFkb3dSb290LnF1ZXJ5U2VsZWN0b3IoIi5zdGVwcGVyQ29udGFpbmVyIik7CiAgICAgIGNvbnN0IGZpcnN0U3RlcEVsZW1lbnQgPSB0aGlzLnNoYWRvd1Jvb3QucXVlcnlTZWxlY3RvcigiLnN0ZXAiKTsKICAgICAgY29uc3Qgc2VsZWN0ZWRTdGVwRWxlbWVudCA9IHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKTsKICAgICAgaWYgKCFzZWxlY3RlZFN0ZXBFbGVtZW50KSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICghc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wKSB7CiAgICAgICAgc3RlcHBlckNvbnRhaW5lci5zdHlsZS5wYWRkaW5nVG9wID0gYCR7c3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyIC0gc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyfXB4YDsKICAgICAgfQogICAgICBjb25zb2xlLmxvZygiU2V0dGluZyBzY3JvbGwgc3RhdHVzIik7CiAgICAgIGNvbnNvbGUubG9nKHNlbGVjdGVkU3RlcEVsZW1lbnQpOwogICAgICBjb25zdCBzY3JvbGxQb3NpdGlvbiA9IHNlbGVjdGVkU3RlcEVsZW1lbnQub2Zmc2V0VG9wIC0gc3RlcHBlckNvbnRhaW5lci5vZmZzZXRIZWlnaHQgLyAyICsgc2VsZWN0ZWRTdGVwRWxlbWVudC5vZmZzZXRIZWlnaHQgLyAyOwogICAgICBjb25zb2xlLmxvZyhzY3JvbGxQb3NpdGlvbik7CiAgICAgIGNvbnN0IGRvbXRvb2xzSW5zdGFuY2UgPSBhd2FpdCBEb21Ub29scy5zZXR1cERvbVRvb2xzKCk7CiAgICAgIGlmICghdGhpcy5zY3JvbGxlcikgewogICAgICAgIHRoaXMuc2Nyb2xsZXIgPSBuZXcgZG9tdG9vbHNfcGx1Z2luZXhwb3J0c19leHBvcnRzLlN3ZWV0U2Nyb2xsKHsKICAgICAgICAgIHZlcnRpY2FsOiB0cnVlLAogICAgICAgICAgaG9yaXpvbnRhbDogZmFsc2UsCiAgICAgICAgICBlYXNpbmc6ICJlYXNlSW5PdXRFeHBvIiwKICAgICAgICAgIGR1cmF0aW9uOiA3MDAKICAgICAgICB9LCBzdGVwcGVyQ29udGFpbmVyKTsKICAgICAgfQogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkICYmIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZFN0ZXAuYWJvcnRDb250cm9sbGVyID0gbmV3IEFib3J0Q29udHJvbGxlcigpOwogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gdHJ1ZTsKICAgICAgICBhd2FpdCB0aGlzLnNlbGVjdGVkU3RlcC52YWxpZGF0aW9uRnVuYyh0aGlzLCBzZWxlY3RlZFN0ZXBFbGVtZW50LCB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuc2lnbmFsKTsKICAgICAgfQogICAgICB0aGlzLnNjcm9sbGVyLnRvKHNjcm9sbFBvc2l0aW9uKTsKICAgIH0KICAgIGFzeW5jIGdvQmFjaygpIHsKICAgICAgY29uc3QgY3VycmVudEluZGV4ID0gdGhpcy5zdGVwcy5maW5kSW5kZXgoKHN0ZXBBcmcpID0+IHN0ZXBBcmcgPT09IHRoaXMuc2VsZWN0ZWRTdGVwKTsKICAgICAgaWYgKGN1cnJlbnRJbmRleCA8PSAwKSB7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkU3RlcC5hYm9ydENvbnRyb2xsZXIuYWJvcnQoKTsKICAgICAgfQogICAgICBjb25zdCBjdXJyZW50U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4XTsKICAgICAgY3VycmVudFN0ZXAudmFsaWRhdGlvbkZ1bmNDYWxsZWQgPSBmYWxzZTsKICAgICAgY29uc3QgcHJldmlvdXNTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXggLSAxXTsKICAgICAgcHJldmlvdXNTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gcHJldmlvdXNTdGVwOwogICAgICBhd2FpdCB0aGlzLmRvbXRvb2xzUHJvbWlzZTsKICAgICAgYXdhaXQgdGhpcy5kb210b29scy5jb252ZW5pZW5jZS5zbWFydGRlbGF5LmRlbGF5Rm9yKDEwMCk7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLm9uUmV0dXJuVG9TdGVwRnVuYz8uKHRoaXMsIHRoaXMuc2hhZG93Um9vdC5xdWVyeVNlbGVjdG9yKCIuc2VsZWN0ZWQiKSk7CiAgICB9CiAgICBnb05leHQoKSB7CiAgICAgIGNvbnN0IGN1cnJlbnRJbmRleCA9IHRoaXMuc3RlcHMuZmluZEluZGV4KChzdGVwQXJnKSA9PiBzdGVwQXJnID09PSB0aGlzLnNlbGVjdGVkU3RlcCk7CiAgICAgIGlmIChjdXJyZW50SW5kZXggPCAwIHx8IGN1cnJlbnRJbmRleCA+PSB0aGlzLnN0ZXBzLmxlbmd0aCAtIDEpIHsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlcikgewogICAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwLmFib3J0Q29udHJvbGxlci5hYm9ydCgpOwogICAgICB9CiAgICAgIGNvbnN0IGN1cnJlbnRTdGVwID0gdGhpcy5zdGVwc1tjdXJyZW50SW5kZXhdOwogICAgICBjdXJyZW50U3RlcC52YWxpZGF0aW9uRnVuY0NhbGxlZCA9IGZhbHNlOwogICAgICBjb25zdCBuZXh0U3RlcCA9IHRoaXMuc3RlcHNbY3VycmVudEluZGV4ICsgMV07CiAgICAgIG5leHRTdGVwLnZhbGlkYXRpb25GdW5jQ2FsbGVkID0gZmFsc2U7CiAgICAgIHRoaXMuc2VsZWN0ZWRTdGVwID0gbmV4dFN0ZXA7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg1KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzU3RlcHBlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRvYXN0L2RlZXMtdG9hc3QuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1MyA9ICgpID0+IGIyYAogICAgPHN0eWxlPgogICAgICAuZGVtby1jb250YWluZXIgewogICAgICAgIHBhZGRpbmc6IDMycHg7CiAgICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgfQoKICAgICAgLmRlbW8tc2VjdGlvbiB7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogNDhweDsKICAgICAgfQoKICAgICAgLmRlbW8tdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjRweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMzMzIiwgIiNmZmYiKX07CiAgICAgIH0KCiAgICAgIC5kZW1vLWRlc2NyaXB0aW9uIHsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNjY2IiwgIiNhYWEiKX07CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgICAgfQoKICAgICAgLmJ1dHRvbi1ncmlkIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZml0LCBtaW5tYXgoMjAwcHgsIDFmcikpOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAzMnB4OwogICAgICB9CgogICAgICAudGhlbWUtdG9nZ2xlIHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAxNnB4OwogICAgICAgIHJpZ2h0OiAxNnB4OwogICAgICAgIHotaW5kZXg6IDEwMDsKICAgICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICAgIDxkZWVzLWJ1dHRvbiBjbGFzcz0idGhlbWUtdG9nZ2xlIiBAY2xpY2tlZD0keygpID0+IHsKICBkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC50b2dnbGUoImJyaWdodCIpOwp9fT5Ub2dnbGUgVGhlbWU8L2RlZXMtYnV0dG9uPgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlRvYXN0IFR5cGVzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBEaWZmZXJlbnQgdG9hc3QgdHlwZXMgZm9yIHZhcmlvdXMgbm90aWZpY2F0aW9uIHNjZW5hcmlvcy4gQ2xpY2sgYW55IGJ1dHRvbiB0byBzaG93IGEgdG9hc3QuCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuaW5mbygiVGhpcyBpcyBhbiBpbmZvcm1hdGlvbmFsIG1lc3NhZ2UiKTsKfX0+SW5mbyBUb2FzdDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiB0eXBlPSJoaWdobGlnaHRlZCIgQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIk9wZXJhdGlvbiBjb21wbGV0ZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5TdWNjZXNzIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC53YXJuaW5nKCJQbGVhc2UgcmV2aWV3IGJlZm9yZSBwcm9jZWVkaW5nIik7Cn19Pldhcm5pbmcgVG9hc3Q8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmVycm9yKCJBbiBlcnJvciBvY2N1cnJlZCB3aGlsZSBwcm9jZXNzaW5nIik7Cn19PkVycm9yIFRvYXN0PC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+VG9hc3QgUG9zaXRpb25zPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBUb2FzdHMgY2FuIGFwcGVhciBpbiBkaWZmZXJlbnQgcG9zaXRpb25zIG9uIHRoZSBzY3JlZW4uCiAgICAgICAgPC9wPgogICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbi1ncmlkIj4KICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVG9wIFJpZ2h0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLXJpZ2h0IgogIH0pOwp9fT5Ub3AgUmlnaHQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBMZWZ0IFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAidG9wLWxlZnQiCiAgfSk7Cn19PlRvcCBMZWZ0PC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gUmlnaHQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tcmlnaHQiCiAgfSk7Cn19PkJvdHRvbSBSaWdodDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiQm90dG9tIExlZnQgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJib3R0b20tbGVmdCIKICB9KTsKfX0+Qm90dG9tIExlZnQ8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlRvcCBDZW50ZXIgUG9zaXRpb24iLAogICAgdHlwZTogImluZm8iLAogICAgcG9zaXRpb246ICJ0b3AtY2VudGVyIgogIH0pOwp9fT5Ub3AgQ2VudGVyPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJCb3R0b20gQ2VudGVyIFBvc2l0aW9uIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIHBvc2l0aW9uOiAiYm90dG9tLWNlbnRlciIKICB9KTsKfX0+Qm90dG9tIENlbnRlcjwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPkR1cmF0aW9uIE9wdGlvbnM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbnRyb2wgaG93IGxvbmcgdG9hc3RzIHN0YXkgdmlzaWJsZS4gRHVyYXRpb24gaW4gbWlsbGlzZWNvbmRzLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnNob3coewogICAgbWVzc2FnZTogIlF1aWNrIHRvYXN0ICgxIHNlY29uZCkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDFlMwogIH0pOwp9fT4xIFNlY29uZDwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU3RhbmRhcmQgdG9hc3QgKDMgc2Vjb25kcykiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDNlMwogIH0pOwp9fT4zIFNlY29uZHMgKERlZmF1bHQpPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJMb25nIHRvYXN0ICg1IHNlY29uZHMpIiwKICAgIHR5cGU6ICJpbmZvIiwKICAgIGR1cmF0aW9uOiA1ZTMKICB9KTsKfX0+NSBTZWNvbmRzPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIAogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5zaG93KHsKICAgIG1lc3NhZ2U6ICJNYW51YWwgZGlzbWlzcyBvbmx5IChjbGljayB0byBjbG9zZSkiLAogICAgdHlwZTogIndhcm5pbmciLAogICAgZHVyYXRpb246IDAKICB9KTsKfX0+Tm8gQXV0by1EaXNtaXNzPC9kZWVzLWJ1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJkZW1vLXNlY3Rpb24iPgogICAgICAgIDxoMiBjbGFzcz0iZGVtby10aXRsZSI+TXVsdGlwbGUgVG9hc3RzPC9oMj4KICAgICAgICA8cCBjbGFzcz0iZGVtby1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBNdWx0aXBsZSB0b2FzdHMgc3RhY2sgYXV0b21hdGljYWxseS4gVGhleSBtYWludGFpbiB0aGVpciBvcmRlciBhbmQgYW5pbWF0ZSBzbW9vdGhseS4KICAgICAgICA8L3A+CiAgICAgICAgPGRpdiBjbGFzcz0iYnV0dG9uLWdyaWQiPgogICAgICAgICAgPGRlZXMtYnV0dG9uIEBjbGlja2VkPSR7KCkgPT4gewogIERlZXNUb2FzdC5pbmZvKCJGaXJzdCBub3RpZmljYXRpb24iKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC5zdWNjZXNzKCJTZWNvbmQgbm90aWZpY2F0aW9uIiksIDIwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Qud2FybmluZygiVGhpcmQgbm90aWZpY2F0aW9uIiksIDQwMCk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3QuZXJyb3IoIkZvdXJ0aCBub3RpZmljYXRpb24iKSwgNjAwKTsKfX0+U2hvdyBNdWx0aXBsZTwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBmb3IgKGxldCBpMTEgPSAxOyBpMTEgPD0gNTsgaTExKyspIHsKICAgIHNldFRpbWVvdXQoKCkgPT4gewogICAgICBEZWVzVG9hc3Quc2hvdyh7CiAgICAgICAgbWVzc2FnZTogYE5vdGlmaWNhdGlvbiAjJHtpMTF9YCwKICAgICAgICB0eXBlOiBpMTEgJSAyID09PSAwID8gInN1Y2Nlc3MiIDogImluZm8iLAogICAgICAgIGR1cmF0aW9uOiAyZTMgKyBpMTEgKiA1MDAKICAgICAgfSk7CiAgICB9LCBpMTEgKiAxMDApOwogIH0KfX0+UmFwaWQgRmlyZTwvZGVlcy1idXR0b24+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0iZGVtby1zZWN0aW9uIj4KICAgICAgICA8aDIgY2xhc3M9ImRlbW8tdGl0bGUiPlJlYWwtV29ybGQgRXhhbXBsZXM8L2gyPgogICAgICAgIDxwIGNsYXNzPSJkZW1vLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENvbW1vbiB1c2UgY2FzZXMgZm9yIHRvYXN0IG5vdGlmaWNhdGlvbnMgaW4gYXBwbGljYXRpb25zLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiU2F2aW5nIGNoYW5nZXMuLi4iLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJDaGFuZ2VzIHNhdmVkIHN1Y2Nlc3NmdWxseSEiKTsKICB9LCAyZTMpOwp9fT5TYXZlIE9wZXJhdGlvbjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3QuZXJyb3IoIkZhaWxlZCB0byBjb25uZWN0IHRvIHNlcnZlci4gUGxlYXNlIGNoZWNrIHlvdXIgaW50ZXJuZXQgY29ubmVjdGlvbi4iKTsKfX0+TmV0d29yayBFcnJvcjwvZGVlcy1idXR0b24+CiAgICAgICAgICAKICAgICAgICAgIDxkZWVzLWJ1dHRvbiBAY2xpY2tlZD0keygpID0+IHsKICBEZWVzVG9hc3Qud2FybmluZygiWW91ciBzZXNzaW9uIHdpbGwgZXhwaXJlIGluIDUgbWludXRlcyIpOwp9fT5TZXNzaW9uIFdhcm5pbmc8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LnN1Y2Nlc3MoIkZpbGUgdXBsb2FkZWQgc3VjY2Vzc2Z1bGx5ISIpOwp9fT5VcGxvYWQgQ29tcGxldGU8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9ImRlbW8tc2VjdGlvbiI+CiAgICAgICAgPGgyIGNsYXNzPSJkZW1vLXRpdGxlIj5Qcm9ncmFtbWF0aWMgQ29udHJvbDwvaDI+CiAgICAgICAgPHAgY2xhc3M9ImRlbW8tZGVzY3JpcHRpb24iPgogICAgICAgICAgQWR2YW5jZWQgY29udHJvbCBvdmVyIHRvYXN0IGJlaGF2aW9yLgogICAgICAgIDwvcD4KICAgICAgICA8ZGl2IGNsYXNzPSJidXR0b24tZ3JpZCI+CiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHthc3luYyAoKSA9PiB7CiAgY29uc3QgdG9hc3QgPSBhd2FpdCBEZWVzVG9hc3Quc2hvdyh7CiAgICBtZXNzYWdlOiAiVGhpcyB0b2FzdCBjYW4gYmUgZGlzbWlzc2VkIHByb2dyYW1tYXRpY2FsbHkiLAogICAgdHlwZTogImluZm8iLAogICAgZHVyYXRpb246IDAKICB9KTsKICBzZXRUaW1lb3V0KCgpID0+IHsKICAgIHRvYXN0LmRpc21pc3MoKTsKICAgIERlZXNUb2FzdC5zdWNjZXNzKCJUb2FzdCBkaXNtaXNzZWQgYWZ0ZXIgMiBzZWNvbmRzIik7CiAgfSwgMmUzKTsKfX0+UHJvZ3JhbW1hdGljIERpc21pc3M8L2RlZXMtYnV0dG9uPgogICAgICAgICAgCiAgICAgICAgICA8ZGVlcy1idXR0b24gQGNsaWNrZWQ9JHsoKSA9PiB7CiAgRGVlc1RvYXN0LmluZm8oIkluZm8gbWVzc2FnZSIsIDJlMyk7CiAgc2V0VGltZW91dCgoKSA9PiBEZWVzVG9hc3Quc3VjY2VzcygiU3VjY2VzcyBtZXNzYWdlIiwgMmUzKSwgNTAwKTsKICBzZXRUaW1lb3V0KCgpID0+IERlZXNUb2FzdC53YXJuaW5nKCJXYXJuaW5nIG1lc3NhZ2UiLCAyZTMpLCAxZTMpOwogIHNldFRpbWVvdXQoKCkgPT4gRGVlc1RvYXN0LmVycm9yKCJFcnJvciBtZXNzYWdlIiwgMmUzKSwgMTUwMCk7Cn19PkNvbnZlbmllbmNlIE1ldGhvZHM8L2RlZXMtYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogIGA7CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdG9hc3QvZGVlcy10b2FzdC5qcwppbml0X2Rpc3RfdHMyNigpOwppbml0X2Rpc3RfdHMyNSgpOwppbml0X3RoZW1lKCk7CnZhciBfX2VzRGVjb3JhdGU4NSA9IGZ1bmN0aW9uKGN0b3IsIGRlc2NyaXB0b3JJbiwgZGVjb3JhdG9ycywgY29udGV4dEluLCBpbml0aWFsaXplcnMsIGV4dHJhSW5pdGlhbGl6ZXJzKSB7CiAgZnVuY3Rpb24gYWNjZXB0KGY3KSB7CiAgICBpZiAoZjcgIT09IHZvaWQgMCAmJiB0eXBlb2YgZjcgIT09ICJmdW5jdGlvbiIpIHRocm93IG5ldyBUeXBlRXJyb3IoIkZ1bmN0aW9uIGV4cGVjdGVkIik7CiAgICByZXR1cm4gZjc7CiAgfQogIHZhciBraW5kID0gY29udGV4dEluLmtpbmQsIGtleTIgPSBraW5kID09PSAiZ2V0dGVyIiA/ICJnZXQiIDoga2luZCA9PT0gInNldHRlciIgPyAic2V0IiA6ICJ2YWx1ZSI7CiAgdmFyIHRhcmdldCA9ICFkZXNjcmlwdG9ySW4gJiYgY3RvciA/IGNvbnRleHRJblsic3RhdGljIl0gPyBjdG9yIDogY3Rvci5wcm90b3R5cGUgOiBudWxsOwogIHZhciBkZXNjcmlwdG9yID0gZGVzY3JpcHRvckluIHx8ICh0YXJnZXQgPyBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHRhcmdldCwgY29udGV4dEluLm5hbWUpIDoge30pOwogIHZhciBfNCwgZG9uZSA9IGZhbHNlOwogIGZvciAodmFyIGkxMSA9IGRlY29yYXRvcnMubGVuZ3RoIC0gMTsgaTExID49IDA7IGkxMS0tKSB7CiAgICB2YXIgY29udGV4dDIgPSB7fTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbikgY29udGV4dDJbcDddID0gcDcgPT09ICJhY2Nlc3MiID8ge30gOiBjb250ZXh0SW5bcDddOwogICAgZm9yICh2YXIgcDcgaW4gY29udGV4dEluLmFjY2VzcykgY29udGV4dDIuYWNjZXNzW3A3XSA9IGNvbnRleHRJbi5hY2Nlc3NbcDddOwogICAgY29udGV4dDIuYWRkSW5pdGlhbGl6ZXIgPSBmdW5jdGlvbihmNykgewogICAgICBpZiAoZG9uZSkgdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGFkZCBpbml0aWFsaXplcnMgYWZ0ZXIgZGVjb3JhdGlvbiBoYXMgY29tcGxldGVkIik7CiAgICAgIGV4dHJhSW5pdGlhbGl6ZXJzLnB1c2goYWNjZXB0KGY3IHx8IG51bGwpKTsKICAgIH07CiAgICB2YXIgcmVzdWx0ID0gKDAsIGRlY29yYXRvcnNbaTExXSkoa2luZCA9PT0gImFjY2Vzc29yIiA/IHsgZ2V0OiBkZXNjcmlwdG9yLmdldCwgc2V0OiBkZXNjcmlwdG9yLnNldCB9IDogZGVzY3JpcHRvcltrZXkyXSwgY29udGV4dDIpOwogICAgaWYgKGtpbmQgPT09ICJhY2Nlc3NvciIpIHsKICAgICAgaWYgKHJlc3VsdCA9PT0gdm9pZCAwKSBjb250aW51ZTsKICAgICAgaWYgKHJlc3VsdCA9PT0gbnVsbCB8fCB0eXBlb2YgcmVzdWx0ICE9PSAib2JqZWN0IikgdGhyb3cgbmV3IFR5cGVFcnJvcigiT2JqZWN0IGV4cGVjdGVkIik7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuZ2V0KSkgZGVzY3JpcHRvci5nZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5zZXQpKSBkZXNjcmlwdG9yLnNldCA9IF80OwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmluaXQpKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICB9IGVsc2UgaWYgKF80ID0gYWNjZXB0KHJlc3VsdCkpIHsKICAgICAgaWYgKGtpbmQgPT09ICJmaWVsZCIpIGluaXRpYWxpemVycy51bnNoaWZ0KF80KTsKICAgICAgZWxzZSBkZXNjcmlwdG9yW2tleTJdID0gXzQ7CiAgICB9CiAgfQogIGlmICh0YXJnZXQpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0YXJnZXQsIGNvbnRleHRJbi5uYW1lLCBkZXNjcmlwdG9yKTsKICBkb25lID0gdHJ1ZTsKfTsKdmFyIF9fcnVuSW5pdGlhbGl6ZXJzODYgPSBmdW5jdGlvbih0aGlzQXJnLCBpbml0aWFsaXplcnMsIHZhbHVlMikgewogIHZhciB1c2VWYWx1ZSA9IGFyZ3VtZW50cy5sZW5ndGggPiAyOwogIGZvciAodmFyIGkxMSA9IDA7IGkxMSA8IGluaXRpYWxpemVycy5sZW5ndGg7IGkxMSsrKSB7CiAgICB2YWx1ZTIgPSB1c2VWYWx1ZSA/IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZywgdmFsdWUyKSA6IGluaXRpYWxpemVyc1tpMTFdLmNhbGwodGhpc0FyZyk7CiAgfQogIHJldHVybiB1c2VWYWx1ZSA/IHZhbHVlMiA6IHZvaWQgMDsKfTsKdmFyIERlZXNUb2FzdCA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdG9hc3QiKV07CiAgbGV0IF9jbGFzc0Rlc2NyaXB0b3I7CiAgbGV0IF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jbGFzc1RoaXM7CiAgbGV0IF9jbGFzc1N1cGVyID0gRGVlc0VsZW1lbnQ7CiAgbGV0IF9tZXNzYWdlX2RlY29yYXRvcnM7CiAgbGV0IF9tZXNzYWdlX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfbWVzc2FnZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfdHlwZV9kZWNvcmF0b3JzOwogIGxldCBfdHlwZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX3R5cGVfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2RlY29yYXRvcnM7CiAgbGV0IF9kdXJhdGlvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9pc1Zpc2libGVfZGVjb3JhdG9yczsKICBsZXQgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVG9hc3QyID0gY2xhc3MgZXh0ZW5kcyBfY2xhc3NTdXBlciB7CiAgICBzdGF0aWMgewogICAgICBfY2xhc3NUaGlzID0gdGhpczsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIGNvbnN0IF9tZXRhZGF0YSA9IHR5cGVvZiBTeW1ib2wgPT09ICJmdW5jdGlvbiIgJiYgU3ltYm9sLm1ldGFkYXRhID8gT2JqZWN0LmNyZWF0ZShfY2xhc3NTdXBlcltTeW1ib2wubWV0YWRhdGFdID8/IG51bGwpIDogdm9pZCAwOwogICAgICBfbWVzc2FnZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogU3RyaW5nIH0pXTsKICAgICAgX3R5cGVfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IFN0cmluZyB9KV07CiAgICAgIF9kdXJhdGlvbl9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogTnVtYmVyIH0pXTsKICAgICAgX2lzVmlzaWJsZV9kZWNvcmF0b3JzID0gW241KHsgdHlwZTogQm9vbGVhbiwgcmVmbGVjdDogdHJ1ZSB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg1KHRoaXMsIG51bGwsIF9tZXNzYWdlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogIm1lc3NhZ2UiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gIm1lc3NhZ2UiIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmoubWVzc2FnZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmoubWVzc2FnZSA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9tZXNzYWdlX2luaXRpYWxpemVycywgX21lc3NhZ2VfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfdHlwZV9kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJ0eXBlIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJ0eXBlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnR5cGUsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLnR5cGUgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfdHlwZV9pbml0aWFsaXplcnMsIF90eXBlX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODUodGhpcywgbnVsbCwgX2R1cmF0aW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImR1cmF0aW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJkdXJhdGlvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5kdXJhdGlvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouZHVyYXRpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfZHVyYXRpb25faW5pdGlhbGl6ZXJzLCBfZHVyYXRpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NSh0aGlzLCBudWxsLCBfaXNWaXNpYmxlX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImlzVmlzaWJsZSIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiaXNWaXNpYmxlIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmlzVmlzaWJsZSwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouaXNWaXNpYmxlID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2lzVmlzaWJsZV9pbml0aWFsaXplcnMsIF9pc1Zpc2libGVfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4NShudWxsLCBfY2xhc3NEZXNjcmlwdG9yID0geyB2YWx1ZTogX2NsYXNzVGhpcyB9LCBfY2xhc3NEZWNvcmF0b3JzLCB7IGtpbmQ6ICJjbGFzcyIsIG5hbWU6IF9jbGFzc1RoaXMubmFtZSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBudWxsLCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyk7CiAgICAgIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzID0gX2NsYXNzRGVzY3JpcHRvci52YWx1ZTsKICAgICAgaWYgKF9tZXRhZGF0YSkgT2JqZWN0LmRlZmluZVByb3BlcnR5KF9jbGFzc1RoaXMsIFN5bWJvbC5tZXRhZGF0YSwgeyBlbnVtZXJhYmxlOiB0cnVlLCBjb25maWd1cmFibGU6IHRydWUsIHdyaXRhYmxlOiB0cnVlLCB2YWx1ZTogX21ldGFkYXRhIH0pOwogICAgfQogICAgLy8gU1RBVElDCiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTM7CiAgICBzdGF0aWMgdG9hc3RDb250YWluZXJzID0gLyogQF9fUFVSRV9fICovIG5ldyBNYXAoKTsKICAgIHN0YXRpYyBnZXRPckNyZWF0ZUNvbnRhaW5lcihwb3NpdGlvbjMpIHsKICAgICAgaWYgKCF0aGlzLnRvYXN0Q29udGFpbmVycy5oYXMocG9zaXRpb24zKSkgewogICAgICAgIGNvbnN0IGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOwogICAgICAgIGNvbnRhaW5lci5jbGFzc05hbWUgPSBgdG9hc3QtY29udGFpbmVyIHRvYXN0LWNvbnRhaW5lci0ke3Bvc2l0aW9uM31gOwogICAgICAgIGNvbnRhaW5lci5zdHlsZS5jc3NUZXh0ID0gYAogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB6LWluZGV4OiAke3pJbmRleExheWVycy5vdmVybGF5LnRvYXN0fTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBnYXA6IDhweDsKICAgICAgYDsKICAgICAgICBzd2l0Y2ggKHBvc2l0aW9uMykgewogICAgICAgICAgY2FzZSAidG9wLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgInRvcC1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnRvcCA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLXJpZ2h0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLnJpZ2h0ID0gIjAiOwogICAgICAgICAgICBicmVhazsKICAgICAgICAgIGNhc2UgImJvdHRvbS1sZWZ0IjoKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmJvdHRvbSA9ICIwIjsKICAgICAgICAgICAgY29udGFpbmVyLnN0eWxlLmxlZnQgPSAiMCI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAidG9wLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50b3AgPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgY2FzZSAiYm90dG9tLWNlbnRlciI6CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5ib3R0b20gPSAiMCI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS5sZWZ0ID0gIjUwJSI7CiAgICAgICAgICAgIGNvbnRhaW5lci5zdHlsZS50cmFuc2Zvcm0gPSAidHJhbnNsYXRlWCgtNTAlKSI7CiAgICAgICAgICAgIGJyZWFrOwogICAgICAgIH0KICAgICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGNvbnRhaW5lcik7CiAgICAgICAgdGhpcy50b2FzdENvbnRhaW5lcnMuc2V0KHBvc2l0aW9uMywgY29udGFpbmVyKTsKICAgICAgfQogICAgICByZXR1cm4gdGhpcy50b2FzdENvbnRhaW5lcnMuZ2V0KHBvc2l0aW9uMyk7CiAgICB9CiAgICBzdGF0aWMgYXN5bmMgc2hvdyhvcHRpb25zKSB7CiAgICAgIGNvbnN0IG9wdHMgPSB0eXBlb2Ygb3B0aW9ucyA9PT0gInN0cmluZyIgPyB7IG1lc3NhZ2U6IG9wdGlvbnMgfSA6IG9wdGlvbnM7CiAgICAgIGNvbnN0IHRvYXN0ID0gbmV3IERlZXNUb2FzdDIoKTsKICAgICAgdG9hc3QubWVzc2FnZSA9IG9wdHMubWVzc2FnZTsKICAgICAgdG9hc3QudHlwZSA9IG9wdHMudHlwZSB8fCAiaW5mbyI7CiAgICAgIHRvYXN0LmR1cmF0aW9uID0gb3B0cy5kdXJhdGlvbiB8fCAzZTM7CiAgICAgIGNvbnN0IGNvbnRhaW5lciA9IHRoaXMuZ2V0T3JDcmVhdGVDb250YWluZXIob3B0cy5wb3NpdGlvbiB8fCAidG9wLXJpZ2h0Iik7CiAgICAgIGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0b2FzdCk7CiAgICAgIGF3YWl0IHRvYXN0LnVwZGF0ZUNvbXBsZXRlOwogICAgICByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoKCkgPT4gewogICAgICAgIHRvYXN0LmlzVmlzaWJsZSA9IHRydWU7CiAgICAgIH0pOwogICAgICBpZiAodG9hc3QuZHVyYXRpb24gPiAwKSB7CiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7CiAgICAgICAgICB0b2FzdC5kaXNtaXNzKCk7CiAgICAgICAgfSwgdG9hc3QuZHVyYXRpb24pOwogICAgICB9CiAgICAgIHJldHVybiB0b2FzdDsKICAgIH0KICAgIC8vIEFsaWFzIGZvciBjb25zaXN0ZW5jeSB3aXRoIERlZXNNb2RhbAogICAgc3RhdGljIGFzeW5jIGNyZWF0ZUFuZFNob3cob3B0aW9ucykgewogICAgICByZXR1cm4gdGhpcy5zaG93KG9wdGlvbnMpOwogICAgfQogICAgLy8gQ29udmVuaWVuY2UgbWV0aG9kcwogICAgc3RhdGljIGluZm8obWVzc2FnZTIsIGR1cmF0aW9uKSB7CiAgICAgIHJldHVybiB0aGlzLnNob3coeyBtZXNzYWdlOiBtZXNzYWdlMiwgdHlwZTogImluZm8iLCBkdXJhdGlvbiB9KTsKICAgIH0KICAgIHN0YXRpYyBzdWNjZXNzKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJzdWNjZXNzIiwgZHVyYXRpb24gfSk7CiAgICB9CiAgICBzdGF0aWMgd2FybmluZyhtZXNzYWdlMiwgZHVyYXRpb24pIHsKICAgICAgcmV0dXJuIHRoaXMuc2hvdyh7IG1lc3NhZ2U6IG1lc3NhZ2UyLCB0eXBlOiAid2FybmluZyIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgc3RhdGljIGVycm9yKG1lc3NhZ2UyLCBkdXJhdGlvbikgewogICAgICByZXR1cm4gdGhpcy5zaG93KHsgbWVzc2FnZTogbWVzc2FnZTIsIHR5cGU6ICJlcnJvciIsIGR1cmF0aW9uIH0pOwogICAgfQogICAgI21lc3NhZ2VfYWNjZXNzb3Jfc3RvcmFnZSA9IF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX21lc3NhZ2VfaW5pdGlhbGl6ZXJzLCAiIik7CiAgICAvLyBJTlNUQU5DRQogICAgZ2V0IG1lc3NhZ2UoKSB7CiAgICAgIHJldHVybiB0aGlzLiNtZXNzYWdlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgbWVzc2FnZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jbWVzc2FnZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI3R5cGVfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg2KHRoaXMsIF9tZXNzYWdlX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9pbml0aWFsaXplcnMsICJpbmZvIikpOwogICAgZ2V0IHR5cGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiN0eXBlX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdHlwZSh2YWx1ZTIpIHsKICAgICAgdGhpcy4jdHlwZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2R1cmF0aW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfdHlwZV9leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2luaXRpYWxpemVycywgM2UzKSk7CiAgICBnZXQgZHVyYXRpb24oKSB7CiAgICAgIHJldHVybiB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGR1cmF0aW9uKHZhbHVlMikgewogICAgICB0aGlzLiNkdXJhdGlvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2R1cmF0aW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nih0aGlzLCBfaXNWaXNpYmxlX2luaXRpYWxpemVycywgZmFsc2UpKTsKICAgIGdldCBpc1Zpc2libGUoKSB7CiAgICAgIHJldHVybiB0aGlzLiNpc1Zpc2libGVfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBpc1Zpc2libGUodmFsdWUyKSB7CiAgICAgIHRoaXMuI2lzVmlzaWJsZV9hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKCk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYodGhpcywgX2lzVmlzaWJsZV9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIGRvbXRvb2xzX2VsZW1lbnRiYXNpY19leHBvcnRzLnNldHVwKCk7CiAgICB9CiAgICBzdGF0aWMgc3R5bGVzID0gWwogICAgICB0aGVtZURlZmF1bHRTdHlsZXMsCiAgICAgIGNzc01hbmFnZXIuZGVmYXVsdFN0eWxlcywKICAgICAgaWAKICAgICAgLyogVE9ETzogTWlncmF0ZSBoYXJkY29kZWQgdmFsdWVzIHRvIC0tZGVlcy0qIENTUyB2YXJpYWJsZXMgKi8KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBhdXRvOwogICAgICAgIGZvbnQtZmFtaWx5OiAke2Nzc0dlaXN0Rm9udEZhbWlseX07CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoLTEwcHgpOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjNzIGN1YmljLWJlemllcigwLjQsIDAsIDAuMiwgMSk7CiAgICAgIH0KCiAgICAgIDpob3N0KFtpc3Zpc2libGVdKSB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgICB0cmFuc2Zvcm06IHRyYW5zbGF0ZVkoMCk7CiAgICAgIH0KCiAgICAgIC50b2FzdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxNnB4IDIwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmIiwgIiMyMjIiKX07CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNlMGUwZTAiLCAiIzMzMyIpfTsKICAgICAgICBib3gtc2hhZG93OiAwIDRweCAxMnB4ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCJyZ2JhKDAsMCwwLDAuMSkiLCAicmdiYSgwLDAsMCwwLjMpIil9OwogICAgICAgIG1pbi13aWR0aDogMzAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA1MDBweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC50b2FzdDpob3ZlciB7CiAgICAgICAgdHJhbnNmb3JtOiBzY2FsZSgxLjAyKTsKICAgICAgfQoKICAgICAgLmljb24gewogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICAgIHdpZHRoOiAyMHB4OwogICAgICAgIGhlaWdodDogMjBweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5pY29uIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAubWVzc2FnZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNTsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgfQoKICAgICAgLmNsb3NlIHsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICB0cmFuc2l0aW9uOiBvcGFjaXR5IDAuMnM7CiAgICAgIH0KCiAgICAgIC5jbG9zZTpob3ZlciB7CiAgICAgICAgb3BhY2l0eTogMTsKICAgICAgfQoKICAgICAgLmNsb3NlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGZpbGw6IGN1cnJlbnRDb2xvcjsKICAgICAgfQoKICAgICAgLyogVHlwZS1zcGVjaWZpYyBzdHlsZXMgKi8KICAgICAgOmhvc3QoW3R5cGU9ImluZm8iXSkgLmljb24gewogICAgICAgIGNvbG9yOiAjMDA4NGZmOwogICAgICB9CgogICAgICA6aG9zdChbdHlwZT0ic3VjY2VzcyJdKSAuaWNvbiB7CiAgICAgICAgY29sb3I6ICMyMmM1NWU7CiAgICAgIH0KCiAgICAgIDpob3N0KFt0eXBlPSJ3YXJuaW5nIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2Y1OWUwYjsKICAgICAgfQoKICAgICAgOmhvc3QoW3R5cGU9ImVycm9yIl0pIC5pY29uIHsKICAgICAgICBjb2xvcjogI2VmNDQ0NDsKICAgICAgfQoKICAgICAgLyogUHJvZ3Jlc3MgYmFyICovCiAgICAgIC5wcm9ncmVzcyB7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGJvdHRvbTogMDsKICAgICAgICBsZWZ0OiAwOwogICAgICAgIHJpZ2h0OiAwOwogICAgICAgIGhlaWdodDogM3B4OwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjI7CiAgICAgICAgYm9yZGVyLXJhZGl1czogMCAwIDhweCA4cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLnByb2dyZXNzLWJhciB7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICAgIGJhY2tncm91bmQ6IGN1cnJlbnRDb2xvcjsKICAgICAgICBvcGFjaXR5OiAwLjg7CiAgICAgICAgdHJhbnNmb3JtLW9yaWdpbjogbGVmdDsKICAgICAgICBhbmltYXRpb246IHByb2dyZXNzIGxpbmVhciBmb3J3YXJkczsKICAgICAgfQoKICAgICAgQGtleWZyYW1lcyBwcm9ncmVzcyB7CiAgICAgICAgZnJvbSB7CiAgICAgICAgICB0cmFuc2Zvcm06IHNjYWxlWCgxKTsKICAgICAgICB9CiAgICAgICAgdG8gewogICAgICAgICAgdHJhbnNmb3JtOiBzY2FsZVgoMCk7CiAgICAgICAgfQogICAgICB9CiAgICBgCiAgICBdOwogICAgcmVuZGVyKCkgewogICAgICBjb25zdCBpY29uczUgPSB7CiAgICAgICAgaW5mbzogYjJgPHN2ZyB2aWV3Qm94PSIwIDAgMjAgMjAiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgPHBhdGggZmlsbC1ydWxlPSJldmVub2RkIiBkPSJNMTAgMThhOCA4IDAgMTAwLTE2IDggOCAwIDAwMCAxNnptMS0xMWExIDEgMCAxMC0yIDB2Mkg3YTEgMSAwIDEwMCAyaDJ2MmExIDEgMCAxMDIgMHYtMmgyYTEgMSAwIDEwMC0yaC0yVjd6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YCwKICAgICAgICBzdWNjZXNzOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2em0zLjcwNy05LjI5M2ExIDEgMCAwMC0xLjQxNC0xLjQxNEw5IDEwLjU4NiA3LjcwNyA5LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNGwyIDJhMSAxIDAgMDAxLjQxNCAwbDQtNHoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIHdhcm5pbmc6IGIyYDxzdmcgdmlld0JveD0iMCAwIDIwIDIwIiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgIDxwYXRoIGZpbGwtcnVsZT0iZXZlbm9kZCIgZD0iTTguMjU3IDMuMDk5Yy43NjUtMS4zNiAyLjcyMi0xLjM2IDMuNDg2IDBsNS41OCA5LjkyYy43NSAxLjMzNC0uMjEzIDIuOTgtMS43NDIgMi45OEg0LjQyYy0xLjUzIDAtMi40OTMtMS42NDYtMS43NDMtMi45OGw1LjU4LTkuOTJ6TTExIDEzYTEgMSAwIDExLTIgMCAxIDEgMCAwMTIgMHptLTEtOGExIDEgMCAwMC0xIDF2M2ExIDEgMCAwMDIgMFY2YTEgMSAwIDAwLTEtMXoiIGNsaXAtcnVsZT0iZXZlbm9kZCIvPgogICAgICA8L3N2Zz5gLAogICAgICAgIGVycm9yOiBiMmA8c3ZnIHZpZXdCb3g9IjAgMCAyMCAyMCIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICA8cGF0aCBmaWxsLXJ1bGU9ImV2ZW5vZGQiIGQ9Ik0xMCAxOGE4IDggMCAxMDAtMTYgOCA4IDAgMDAwIDE2ek04LjcwNyA3LjI5M2ExIDEgMCAwMC0xLjQxNCAxLjQxNEw4LjU4NiAxMGwtMS4yOTMgMS4yOTNhMSAxIDAgMTAxLjQxNCAxLjQxNEwxMCAxMS40MTRsMS4yOTMgMS4yOTNhMSAxIDAgMDAxLjQxNC0xLjQxNEwxMS40MTQgMTBsMS4yOTMtMS4yOTNhMSAxIDAgMDAtMS40MTQtMS40MTRMMTAgOC41ODYgOC43MDcgNy4yOTN6IiBjbGlwLXJ1bGU9ImV2ZW5vZGQiLz4KICAgICAgPC9zdmc+YAogICAgICB9OwogICAgICByZXR1cm4gYjJgCiAgICAgIDxkaXYgY2xhc3M9InRvYXN0IiBAY2xpY2s9JHt0aGlzLmRpc21pc3N9PgogICAgICAgIDxkaXYgY2xhc3M9Imljb24iPgogICAgICAgICAgJHtpY29uczVbdGhpcy50eXBlXX0KICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJtZXNzYWdlIj4ke3RoaXMubWVzc2FnZX08L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJjbG9zZSI+CiAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxNiAxNiIgZmlsbD0iY3VycmVudENvbG9yIj4KICAgICAgICAgICAgPHBhdGggZD0iTTQuNjQ2IDQuNjQ2YS41LjUgMCAwIDEgLjcwOCAwTDggNy4yOTNsMi42NDYtMi42NDdhLjUuNSAwIDAgMSAuNzA4LjcwOEw4LjcwNyA4bDIuNjQ3IDIuNjQ2YS41LjUgMCAwIDEtLjcwOC43MDhMOCA4LjcwN2wtMi42NDYgMi42NDdhLjUuNSAwIDAgMS0uNzA4LS43MDhMNy4yOTMgOCA0LjY0NiA1LjM1NGEuNS41IDAgMCAxIDAtLjcwOHoiLz4KICAgICAgICAgIDwvc3ZnPgogICAgICAgIDwvZGl2PgogICAgICAgICR7dGhpcy5kdXJhdGlvbiA+IDAgPyBiMmAKICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJvZ3Jlc3MtYmFyIiBzdHlsZT0iYW5pbWF0aW9uLWR1cmF0aW9uOiAke3RoaXMuZHVyYXRpb259bXMiPjwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkaXNtaXNzKCkgewogICAgICB0aGlzLmlzVmlzaWJsZSA9IGZhbHNlOwogICAgICBhd2FpdCBuZXcgUHJvbWlzZSgocmVzb2x2ZTIpID0+IHNldFRpbWVvdXQocmVzb2x2ZTIsIDMwMCkpOwogICAgICB0aGlzLnJlbW92ZSgpOwogICAgICBjb25zdCBjb250YWluZXIgPSB0aGlzLnBhcmVudEVsZW1lbnQ7CiAgICAgIGlmIChjb250YWluZXIgJiYgY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCA9PT0gMCkgewogICAgICAgIGNvbnRhaW5lci5yZW1vdmUoKTsKICAgICAgICBmb3IgKGNvbnN0IFtwb3NpdGlvbjMsIGNvbnRdIG9mIERlZXNUb2FzdDIudG9hc3RDb250YWluZXJzLmVudHJpZXMoKSkgewogICAgICAgICAgaWYgKGNvbnQgPT09IGNvbnRhaW5lcikgewogICAgICAgICAgICBEZWVzVG9hc3QyLnRvYXN0Q29udGFpbmVycy5kZWxldGUocG9zaXRpb24zKTsKICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9CiAgICB9CiAgICBmaXJzdFVwZGF0ZWQoKSB7CiAgICAgIHRoaXMuc2V0QXR0cmlidXRlKCJ0eXBlIiwgdGhpcy50eXBlKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODYoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUb2FzdDIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXVwZGF0ZXIvZGVlcy11cGRhdGVyLmRlbW8uanMKaW5pdF9kaXN0X3RzMjYoKTsKdmFyIGRlbW9GdW5jNTQgPSBhc3luYyAoKSA9PiB7CiAgY29uc3QgdXBkYXRlciA9IGF3YWl0IERlZXNVcGRhdGVyLmNyZWF0ZUFuZFNob3coKTsKICBzZXRUaW1lb3V0KGFzeW5jICgpID0+IHsKICAgIGF3YWl0IHVwZGF0ZXIuZGVzdHJveSgpOwogIH0sIDFlNCk7Cn07CgovLyBub2RlX21vZHVsZXMvLnBucG0vQGRlc2lnbi5lc3RhdGUrZGVlcy1jYXRhbG9nQDMuMzcuMF9AdGlwdGFwK3BtQDIuMjcuMi9ub2RlX21vZHVsZXMvQGRlc2lnbi5lc3RhdGUvZGVlcy1jYXRhbG9nL2Rpc3RfdHNfd2ViL2VsZW1lbnRzL2RlZXMtdXBkYXRlci9kZWVzLXVwZGF0ZXIuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODYgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg3ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVXBkYXRlciA9ICgoKSA9PiB7CiAgbGV0IF9jbGFzc0RlY29yYXRvcnMgPSBbdDQoImRlZXMtdXBkYXRlciIpXTsKICBsZXQgX2NsYXNzRGVzY3JpcHRvcjsKICBsZXQgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2NsYXNzVGhpczsKICBsZXQgX2NsYXNzU3VwZXIgPSBEZWVzRWxlbWVudDsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnM7CiAgbGV0IF9jdXJyZW50VmVyc2lvbl9pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9kZWNvcmF0b3JzOwogIGxldCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyA9IFtdOwogIHZhciBEZWVzVXBkYXRlcjIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXJyZW50VmVyc2lvbl9kZWNvcmF0b3JzID0gW241KHsKICAgICAgICB0eXBlOiBTdHJpbmcKICAgICAgfSldOwogICAgICBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycyA9IFtuNSh7CiAgICAgICAgdHlwZTogU3RyaW5nCiAgICAgIH0pXTsKICAgICAgX19lc0RlY29yYXRlODYodGhpcywgbnVsbCwgX2N1cnJlbnRWZXJzaW9uX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1cnJlbnRWZXJzaW9uIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXJyZW50VmVyc2lvbiIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXJyZW50VmVyc2lvbiwgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VycmVudFZlcnNpb24gPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCBfY3VycmVudFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nih0aGlzLCBudWxsLCBfdXBkYXRlZFZlcnNpb25fZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAidXBkYXRlZFZlcnNpb24iLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gInVwZGF0ZWRWZXJzaW9uIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLnVwZGF0ZWRWZXJzaW9uLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai51cGRhdGVkVmVyc2lvbiA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF91cGRhdGVkVmVyc2lvbl9pbml0aWFsaXplcnMsIF91cGRhdGVkVmVyc2lvbl9leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg2KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1VwZGF0ZXIyID0gX2NsYXNzVGhpcyA9IF9jbGFzc0Rlc2NyaXB0b3IudmFsdWU7CiAgICAgIGlmIChfbWV0YWRhdGEpIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShfY2xhc3NUaGlzLCBTeW1ib2wubWV0YWRhdGEsIHsgZW51bWVyYWJsZTogdHJ1ZSwgY29uZmlndXJhYmxlOiB0cnVlLCB3cml0YWJsZTogdHJ1ZSwgdmFsdWU6IF9tZXRhZGF0YSB9KTsKICAgIH0KICAgIHN0YXRpYyBkZW1vID0gZGVtb0Z1bmM1NDsKICAgIHN0YXRpYyBhc3luYyBjcmVhdGVBbmRTaG93KCkgewogICAgICBjb25zdCB1cGRhdGVyID0gbmV3IERlZXNVcGRhdGVyMigpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHVwZGF0ZXIpOwogICAgICByZXR1cm4gdXBkYXRlcjsKICAgIH0KICAgICNjdXJyZW50VmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfY3VycmVudFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApOwogICAgZ2V0IGN1cnJlbnRWZXJzaW9uKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXJyZW50VmVyc2lvbih2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VycmVudFZlcnNpb25fYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICN1cGRhdGVkVmVyc2lvbl9hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODcodGhpcywgX2N1cnJlbnRWZXJzaW9uX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25faW5pdGlhbGl6ZXJzLCB2b2lkIDApKTsKICAgIGdldCB1cGRhdGVkVmVyc2lvbigpIHsKICAgICAgcmV0dXJuIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgdXBkYXRlZFZlcnNpb24odmFsdWUyKSB7CiAgICAgIHRoaXMuI3VwZGF0ZWRWZXJzaW9uX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICBjb25zdHJ1Y3RvcigpIHsKICAgICAgc3VwZXIoKTsKICAgICAgX19ydW5Jbml0aWFsaXplcnM4Nyh0aGlzLCBfdXBkYXRlZFZlcnNpb25fZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBkaXN0X3RzX2V4cG9ydHMyNS5lbGVtZW50QmFzaWMuc2V0dXAoKTsKICAgIH0KICAgIHN0YXRpYyBzdHlsZXMgPSBbCiAgICAgIHRoZW1lRGVmYXVsdFN0eWxlcywKICAgICAgY3NzTWFuYWdlci5kZWZhdWx0U3R5bGVzLAogICAgICBpYAogICAgICAvKiBUT0RPOiBNaWdyYXRlIGhhcmRjb2RlZCB2YWx1ZXMgdG8gLS1kZWVzLSogQ1NTIHZhcmlhYmxlcyAqLwogICAgICAubW9kYWxDb250YWluZXIgewogICAgICAgIHdpbGwtY2hhbmdlOiB0cmFuc2Zvcm07CiAgICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMyMjIiKX07CiAgICAgICAgbWF4LXdpZHRoOiA4MDBweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZWVlZWViIiwgIiMzMzMiKX07CiAgICAgIH0KCiAgICAgIC5oZWFkaW5nQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogNDBweCA0MHB4OwogICAgICB9CgogICAgICBoMSB7CiAgICAgICAgbWFyZ2luOiBub25lOwogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiMzMzMiLCAiI2ZmZiIpfTsKICAgICAgICBtYXJnaW4tbGVmdDogMjBweDsKICAgICAgICBmb250LXdlaWdodDogbm9ybWFsOwogICAgICB9CgogICAgICAuYnV0dG9uQ29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogNTAlIDUwJTsKICAgICAgfQogICAgYAogICAgXTsKICAgIHJlbmRlcigpIHsKICAgICAgcmV0dXJuIGIyYAogICAgICA8ZGVlcy13aW5kb3dsYXllcgogICAgICAgIEBjbGlja2VkPSIke3RoaXMud2luZG93TGF5ZXJDbGlja2VkfSIKICAgICAgICAub3B0aW9ucz0ke3sKICAgICAgICBibHVyOiB0cnVlCiAgICAgIH19CiAgICAgID4KICAgICAgICA8ZGl2IGNsYXNzPSJtb2RhbENvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWFkaW5nQ29udGFpbmVyIj4KICAgICAgICAgICAgPGRlZXMtc3Bpbm5lciAuc2l6ZT0kezYwfT48L2RlZXMtc3Bpbm5lcj4KICAgICAgICAgICAgPGgxPlVwZGF0aW5nIHRoZSBhcHBsaWNhdGlvbi4uLjwvaDE+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9InByb2dyZXNzIj4KICAgICAgICAgICAgPGRlZXMtcHJvZ3Jlc3NiYXIgLnByb2dyZXNzPSR7MC41fT48L2RlZXMtcHJvZ3Jlc3NiYXI+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJ1dHRvbkNvbnRhaW5lciI+CiAgICAgICAgICAgIDxkZWVzLWJ1dHRvbj5Nb3JlIGluZm88L2RlZXMtYnV0dG9uPgogICAgICAgICAgICA8ZGVlcy1idXR0b24+Q2hhbmdlbG9nPC9kZWVzLWJ1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PiA8L2RlZXMtd2luZG93bGF5ZXIKICAgICAgPj4KICAgIGA7CiAgICB9CiAgICBhc3luYyBkZXN0cm95KCkgewogICAgICB0aGlzLnBhcmVudEVsZW1lbnQucmVtb3ZlQ2hpbGQodGhpcyk7CiAgICB9CiAgICB3aW5kb3dMYXllckNsaWNrZWQoKSB7CiAgICB9CiAgICBzdGF0aWMgewogICAgICBfX3J1bkluaXRpYWxpemVyczg3KF9jbGFzc1RoaXMsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICB9OwogIHJldHVybiBEZWVzVXBkYXRlcjIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuZGVtby5qcwppbml0X2Rpc3RfdHMyNigpOwp2YXIgZGVtb0Z1bmM1NSA9ICgpID0+IGIyYAogIDxzdHlsZT4KICAgIC5kZW1vLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGdhcDogMzJweDsKICAgICAgcGFkZGluZzogNDhweDsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmOGY5ZmEiLCAiIzBhMGEwYSIpfTsKICAgICAgbWluLWhlaWdodDogMTAwdmg7CiAgICB9CgogICAgLnNlY3Rpb24gewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2ZmZmZmZiIsICIjMTgxODFiIil9OwogICAgICBib3JkZXI6IDFweCBzb2xpZCAke2Nzc01hbmFnZXIuYmRUaGVtZSgiI2U1ZTdlYiIsICIjMjcyNzJhIil9OwogICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICB9CgogICAgLnNlY3Rpb24tdGl0bGUgewogICAgICBmb250LXNpemU6IDE4cHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIGNvbG9yOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzA5MDkwYiIsICIjZmFmYWZhIil9OwogICAgfQoKICAgIC5zZWN0aW9uLWRlc2NyaXB0aW9uIHsKICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogMjRweDsKICAgIH0KCiAgICAudG9rZW4tZ3JpZCB7CiAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogcmVwZWF0KGF1dG8tZmlsbCwgbWlubWF4KDIwMHB4LCAxZnIpKTsKICAgICAgZ2FwOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1pdGVtIHsKICAgICAgYmFja2dyb3VuZDogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiNmNGY0ZjUiLCAiIzI3MjcyYSIpfTsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBwYWRkaW5nOiAxNnB4OwogICAgfQoKICAgIC50b2tlbi1uYW1lIHsKICAgICAgZm9udC1mYW1pbHk6ICdJbnRlbCBPbmUgTW9ubycsIG1vbm9zcGFjZTsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICBjb2xvcjogJHtjc3NNYW5hZ2VyLmJkVGhlbWUoIiM3MTcxN2EiLCAiI2ExYTFhYSIpfTsKICAgICAgbWFyZ2luLWJvdHRvbTogOHB4OwogICAgfQoKICAgIC50b2tlbi12YWx1ZSB7CiAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjMDkwOTBiIiwgIiNmYWZhZmEiKX07CiAgICB9CgogICAgLnNwYWNpbmctZGVtbyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBmbGV4LWVuZDsKICAgICAgZ2FwOiA4cHg7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuc3BhY2luZy1ib3ggewogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICB9CgogICAgLnJhZGl1cy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnJhZGl1cy1ib3ggewogICAgICB3aWR0aDogNjBweDsKICAgICAgaGVpZ2h0OiA2MHB4OwogICAgICBiYWNrZ3JvdW5kOiAke2Nzc01hbmFnZXIuYmRUaGVtZSgiIzNiODJmNiIsICIjM2I4MmY2Iil9OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDExcHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CgogICAgLnNoYWRvdy1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAyNHB4OwogICAgICBmbGV4LXdyYXA6IHdyYXA7CiAgICB9CgogICAgLnNoYWRvdy1ib3ggewogICAgICB3aWR0aDogMTAwcHg7CiAgICAgIGhlaWdodDogMTAwcHg7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjZmZmZmZmIiwgIiMyNzI3MmEiKX07CiAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZm9udC13ZWlnaHQ6IDUwMDsKICAgICAgY29sb3I6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjNzE3MTdhIiwgIiNhMWExYWEiKX07CiAgICB9CgogICAgLmhlaWdodC1kZW1vIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZ2FwOiAxNnB4OwogICAgICBhbGlnbi1pdGVtczogZmxleC1lbmQ7CiAgICAgIGZsZXgtd3JhcDogd3JhcDsKICAgIH0KCiAgICAuaGVpZ2h0LWJveCB7CiAgICAgIGJhY2tncm91bmQ6ICR7Y3NzTWFuYWdlci5iZFRoZW1lKCIjM2I4MmY2IiwgIiMzYjgyZjYiKX07CiAgICAgIHdpZHRoOiAxMjBweDsKICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgY29sb3I6IHdoaXRlOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICB9CiAgPC9zdHlsZT4KICA8ZGl2IGNsYXNzPSJkZW1vLWNvbnRhaW5lciI+CiAgICA8ZGVlcy10aGVtZT4KICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbiI+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi10aXRsZSI+U3BhY2luZyBTY2FsZTwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tZGVzY3JpcHRpb24iPgogICAgICAgICAgQ1NTIHZhcmlhYmxlczogLS1kZWVzLXNwYWNpbmcteHMgdGhyb3VnaCAtLWRlZXMtc3BhY2luZy0zeGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhzKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteHMpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhzICg0cHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1zbSk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLXNtKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5zbSAoOHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctbWQpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy1tZCk7Ij48L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWQgKDEycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy1sZyk7IGhlaWdodDogdmFyKC0tZGVlcy1zcGFjaW5nLWxnKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5sZyAoMTZweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic3BhY2luZy1ib3giIHN0eWxlPSJ3aWR0aDogdmFyKC0tZGVlcy1zcGFjaW5nLXhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmcteGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnhsICgyNHB4KTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzcGFjaW5nLWJveCIgc3R5bGU9IndpZHRoOiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsgaGVpZ2h0OiB2YXIoLS1kZWVzLXNwYWNpbmctMnhsKTsiPjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4yeGwgKDMycHgpPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNwYWNpbmctYm94IiBzdHlsZT0id2lkdGg6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyBoZWlnaHQ6IHZhcigtLWRlZXMtc3BhY2luZy0zeGwpOyI+PC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjN4bCAoNDhweCk8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkJvcmRlciBSYWRpdXMgU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1yYWRpdXMteHMgdGhyb3VnaCAtLWRlZXMtcmFkaXVzLWZ1bGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMteHMpOyI+eHM8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+MnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1zbSk7Ij5zbTwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj40cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0icmFkaXVzLWJveCIgc3R5bGU9ImJvcmRlci1yYWRpdXM6IHZhcigtLWRlZXMtcmFkaXVzLW1kKTsiPm1kPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjZweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJyYWRpdXMtYm94IiBzdHlsZT0iYm9yZGVyLXJhZGl1czogdmFyKC0tZGVlcy1yYWRpdXMtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OHB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy14bCk7Ij54bDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4xMnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InJhZGl1cy1ib3giIHN0eWxlPSJib3JkZXItcmFkaXVzOiB2YXIoLS1kZWVzLXJhZGl1cy1mdWxsKTsiPmZ1bGw8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+OTk5cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlNoYWRvdyBFbGV2YXRpb24gU2NhbGU8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWN0aW9uLWRlc2NyaXB0aW9uIj4KICAgICAgICAgIENTUyB2YXJpYWJsZXM6IC0tZGVlcy1zaGFkb3cteHMgdGhyb3VnaCAtLWRlZXMtc2hhZG93LWxnCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWRlbW8iPgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXhzKTsiPnhzPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPm1pbmltYWw8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0ic2hhZG93LWJveCIgc3R5bGU9ImJveC1zaGFkb3c6IHZhcigtLWRlZXMtc2hhZG93LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPnN1YnRsZTwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJzaGFkb3ctYm94IiBzdHlsZT0iYm94LXNoYWRvdzogdmFyKC0tZGVlcy1zaGFkb3ctbWQpOyI+bWQ8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+bWVkaXVtPC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InNoYWRvdy1ib3giIHN0eWxlPSJib3gtc2hhZG93OiB2YXIoLS1kZWVzLXNoYWRvdy1sZyk7Ij5sZzwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj5wcm9taW5lbnQ8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPkNvbnRyb2wgSGVpZ2h0IFNjYWxlPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtY29udHJvbC1oZWlnaHQtc20gdGhyb3VnaCAtLWRlZXMtY29udHJvbC1oZWlnaHQteGwKICAgICAgICA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtZGVtbyI+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXNtKTsiPnNtPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjMycHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iaGVpZ2h0LWJveCIgc3R5bGU9ImhlaWdodDogdmFyKC0tZGVlcy1jb250cm9sLWhlaWdodC1tZCk7Ij5tZDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1uYW1lIj4zNnB4PC9kaXY+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9ImhlaWdodC1ib3giIHN0eWxlPSJoZWlnaHQ6IHZhcigtLWRlZXMtY29udHJvbC1oZWlnaHQtbGcpOyI+bGc8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+NDBweDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJoZWlnaHQtYm94IiBzdHlsZT0iaGVpZ2h0OiB2YXIoLS1kZWVzLWNvbnRyb2wtaGVpZ2h0LXhsKTsiPnhsPC9kaXY+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPjQ4cHg8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24iPgogICAgICAgIDxkaXYgY2xhc3M9InNlY3Rpb24tdGl0bGUiPlRyYW5zaXRpb24gRHVyYXRpb25zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VjdGlvbi1kZXNjcmlwdGlvbiI+CiAgICAgICAgICBDU1MgdmFyaWFibGVzOiAtLWRlZXMtdHJhbnNpdGlvbi1mYXN0IHRocm91Z2ggLS1kZWVzLXRyYW5zaXRpb24tc2xvd2VyCiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tZ3JpZCI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZmFzdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi1pdGVtIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tbmFtZSI+LS1kZWVzLXRyYW5zaXRpb24tZGVmYXVsdDwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4xNXM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3c8L2Rpdj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4tdmFsdWUiPjAuMnM8L2Rpdj4KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0idG9rZW4taXRlbSI+CiAgICAgICAgICAgIDxkaXYgY2xhc3M9InRva2VuLW5hbWUiPi0tZGVlcy10cmFuc2l0aW9uLXNsb3dlcjwvZGl2PgogICAgICAgICAgICA8ZGl2IGNsYXNzPSJ0b2tlbi12YWx1ZSI+MC4zczwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgPC9kZWVzLXRoZW1lPgogIDwvZGl2PgpgOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9kZWVzLXRoZW1lL2RlZXMtdGhlbWUuanMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF90aGVtZSgpOwp2YXIgX19lc0RlY29yYXRlODcgPSBmdW5jdGlvbihjdG9yLCBkZXNjcmlwdG9ySW4sIGRlY29yYXRvcnMsIGNvbnRleHRJbiwgaW5pdGlhbGl6ZXJzLCBleHRyYUluaXRpYWxpemVycykgewogIGZ1bmN0aW9uIGFjY2VwdChmNykgewogICAgaWYgKGY3ICE9PSB2b2lkIDAgJiYgdHlwZW9mIGY3ICE9PSAiZnVuY3Rpb24iKSB0aHJvdyBuZXcgVHlwZUVycm9yKCJGdW5jdGlvbiBleHBlY3RlZCIpOwogICAgcmV0dXJuIGY3OwogIH0KICB2YXIga2luZCA9IGNvbnRleHRJbi5raW5kLCBrZXkyID0ga2luZCA9PT0gImdldHRlciIgPyAiZ2V0IiA6IGtpbmQgPT09ICJzZXR0ZXIiID8gInNldCIgOiAidmFsdWUiOwogIHZhciB0YXJnZXQgPSAhZGVzY3JpcHRvckluICYmIGN0b3IgPyBjb250ZXh0SW5bInN0YXRpYyJdID8gY3RvciA6IGN0b3IucHJvdG90eXBlIDogbnVsbDsKICB2YXIgZGVzY3JpcHRvciA9IGRlc2NyaXB0b3JJbiB8fCAodGFyZ2V0ID8gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0YXJnZXQsIGNvbnRleHRJbi5uYW1lKSA6IHt9KTsKICB2YXIgXzQsIGRvbmUgPSBmYWxzZTsKICBmb3IgKHZhciBpMTEgPSBkZWNvcmF0b3JzLmxlbmd0aCAtIDE7IGkxMSA+PSAwOyBpMTEtLSkgewogICAgdmFyIGNvbnRleHQyID0ge307CiAgICBmb3IgKHZhciBwNyBpbiBjb250ZXh0SW4pIGNvbnRleHQyW3A3XSA9IHA3ID09PSAiYWNjZXNzIiA/IHt9IDogY29udGV4dEluW3A3XTsKICAgIGZvciAodmFyIHA3IGluIGNvbnRleHRJbi5hY2Nlc3MpIGNvbnRleHQyLmFjY2Vzc1twN10gPSBjb250ZXh0SW4uYWNjZXNzW3A3XTsKICAgIGNvbnRleHQyLmFkZEluaXRpYWxpemVyID0gZnVuY3Rpb24oZjcpIHsKICAgICAgaWYgKGRvbmUpIHRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhZGQgaW5pdGlhbGl6ZXJzIGFmdGVyIGRlY29yYXRpb24gaGFzIGNvbXBsZXRlZCIpOwogICAgICBleHRyYUluaXRpYWxpemVycy5wdXNoKGFjY2VwdChmNyB8fCBudWxsKSk7CiAgICB9OwogICAgdmFyIHJlc3VsdCA9ICgwLCBkZWNvcmF0b3JzW2kxMV0pKGtpbmQgPT09ICJhY2Nlc3NvciIgPyB7IGdldDogZGVzY3JpcHRvci5nZXQsIHNldDogZGVzY3JpcHRvci5zZXQgfSA6IGRlc2NyaXB0b3Jba2V5Ml0sIGNvbnRleHQyKTsKICAgIGlmIChraW5kID09PSAiYWNjZXNzb3IiKSB7CiAgICAgIGlmIChyZXN1bHQgPT09IHZvaWQgMCkgY29udGludWU7CiAgICAgIGlmIChyZXN1bHQgPT09IG51bGwgfHwgdHlwZW9mIHJlc3VsdCAhPT0gIm9iamVjdCIpIHRocm93IG5ldyBUeXBlRXJyb3IoIk9iamVjdCBleHBlY3RlZCIpOwogICAgICBpZiAoXzQgPSBhY2NlcHQocmVzdWx0LmdldCkpIGRlc2NyaXB0b3IuZ2V0ID0gXzQ7CiAgICAgIGlmIChfNCA9IGFjY2VwdChyZXN1bHQuc2V0KSkgZGVzY3JpcHRvci5zZXQgPSBfNDsKICAgICAgaWYgKF80ID0gYWNjZXB0KHJlc3VsdC5pbml0KSkgaW5pdGlhbGl6ZXJzLnVuc2hpZnQoXzQpOwogICAgfSBlbHNlIGlmIChfNCA9IGFjY2VwdChyZXN1bHQpKSB7CiAgICAgIGlmIChraW5kID09PSAiZmllbGQiKSBpbml0aWFsaXplcnMudW5zaGlmdChfNCk7CiAgICAgIGVsc2UgZGVzY3JpcHRvcltrZXkyXSA9IF80OwogICAgfQogIH0KICBpZiAodGFyZ2V0KSBPYmplY3QuZGVmaW5lUHJvcGVydHkodGFyZ2V0LCBjb250ZXh0SW4ubmFtZSwgZGVzY3JpcHRvcik7CiAgZG9uZSA9IHRydWU7Cn07CnZhciBfX3J1bkluaXRpYWxpemVyczg4ID0gZnVuY3Rpb24odGhpc0FyZywgaW5pdGlhbGl6ZXJzLCB2YWx1ZTIpIHsKICB2YXIgdXNlVmFsdWUgPSBhcmd1bWVudHMubGVuZ3RoID4gMjsKICBmb3IgKHZhciBpMTEgPSAwOyBpMTEgPCBpbml0aWFsaXplcnMubGVuZ3RoOyBpMTErKykgewogICAgdmFsdWUyID0gdXNlVmFsdWUgPyBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcsIHZhbHVlMikgOiBpbml0aWFsaXplcnNbaTExXS5jYWxsKHRoaXNBcmcpOwogIH0KICByZXR1cm4gdXNlVmFsdWUgPyB2YWx1ZTIgOiB2b2lkIDA7Cn07CnZhciBEZWVzVGhlbWUgPSAoKCkgPT4gewogIGxldCBfY2xhc3NEZWNvcmF0b3JzID0gW3Q0KCJkZWVzLXRoZW1lIildOwogIGxldCBfY2xhc3NEZXNjcmlwdG9yOwogIGxldCBfY2xhc3NFeHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY2xhc3NUaGlzOwogIGxldCBfY2xhc3NTdXBlciA9IERlZXNFbGVtZW50OwogIGxldCBfY3VzdG9tU3BhY2luZ19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbVJhZGl1c19kZWNvcmF0b3JzOwogIGxldCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tUmFkaXVzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgbGV0IF9jdXN0b21TaGFkb3dzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21TaGFkb3dzX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tU2hhZG93c19leHRyYUluaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZGVjb3JhdG9yczsKICBsZXQgX2N1c3RvbVRyYW5zaXRpb25zX2luaXRpYWxpemVycyA9IFtdOwogIGxldCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2RlY29yYXRvcnM7CiAgbGV0IF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMgPSBbXTsKICBsZXQgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzID0gW107CiAgdmFyIERlZXNUaGVtZTIgPSBjbGFzcyBleHRlbmRzIF9jbGFzc1N1cGVyIHsKICAgIHN0YXRpYyB7CiAgICAgIF9jbGFzc1RoaXMgPSB0aGlzOwogICAgfQogICAgc3RhdGljIHsKICAgICAgY29uc3QgX21ldGFkYXRhID0gdHlwZW9mIFN5bWJvbCA9PT0gImZ1bmN0aW9uIiAmJiBTeW1ib2wubWV0YWRhdGEgPyBPYmplY3QuY3JlYXRlKF9jbGFzc1N1cGVyW1N5bWJvbC5tZXRhZGF0YV0gPz8gbnVsbCkgOiB2b2lkIDA7CiAgICAgIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzID0gW241KHsgdHlwZTogT2JqZWN0IH0pXTsKICAgICAgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMgPSBbbjUoeyB0eXBlOiBPYmplY3QgfSldOwogICAgICBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycyA9IFtuNSh7IHR5cGU6IE9iamVjdCB9KV07CiAgICAgIF9fZXNEZWNvcmF0ZTg3KHRoaXMsIG51bGwsIF9jdXN0b21TcGFjaW5nX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVNwYWNpbmciLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbVNwYWNpbmciIGluIG9iaiwgZ2V0OiAob2JqKSA9PiBvYmouY3VzdG9tU3BhY2luZywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tU3BhY2luZyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21TcGFjaW5nX2luaXRpYWxpemVycywgX2N1c3RvbVNwYWNpbmdfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tUmFkaXVzX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVJhZGl1cyIsIHN0YXRpYzogZmFsc2UsIHByaXZhdGU6IGZhbHNlLCBhY2Nlc3M6IHsgaGFzOiAob2JqKSA9PiAiY3VzdG9tUmFkaXVzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVJhZGl1cywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tUmFkaXVzID0gdmFsdWUyOwogICAgICB9IH0sIG1ldGFkYXRhOiBfbWV0YWRhdGEgfSwgX2N1c3RvbVJhZGl1c19pbml0aWFsaXplcnMsIF9jdXN0b21SYWRpdXNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tU2hhZG93c19kZWNvcmF0b3JzLCB7IGtpbmQ6ICJhY2Nlc3NvciIsIG5hbWU6ICJjdXN0b21TaGFkb3dzIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21TaGFkb3dzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbVNoYWRvd3MsIHNldDogKG9iaiwgdmFsdWUyKSA9PiB7CiAgICAgICAgb2JqLmN1c3RvbVNoYWRvd3MgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tU2hhZG93c19pbml0aWFsaXplcnMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgX19lc0RlY29yYXRlODcodGhpcywgbnVsbCwgX2N1c3RvbVRyYW5zaXRpb25zX2RlY29yYXRvcnMsIHsga2luZDogImFjY2Vzc29yIiwgbmFtZTogImN1c3RvbVRyYW5zaXRpb25zIiwgc3RhdGljOiBmYWxzZSwgcHJpdmF0ZTogZmFsc2UsIGFjY2VzczogeyBoYXM6IChvYmopID0+ICJjdXN0b21UcmFuc2l0aW9ucyIgaW4gb2JqLCBnZXQ6IChvYmopID0+IG9iai5jdXN0b21UcmFuc2l0aW9ucywgc2V0OiAob2JqLCB2YWx1ZTIpID0+IHsKICAgICAgICBvYmouY3VzdG9tVHJhbnNpdGlvbnMgPSB2YWx1ZTI7CiAgICAgIH0gfSwgbWV0YWRhdGE6IF9tZXRhZGF0YSB9LCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpOwogICAgICBfX2VzRGVjb3JhdGU4Nyh0aGlzLCBudWxsLCBfY3VzdG9tQ29udHJvbEhlaWdodHNfZGVjb3JhdG9ycywgeyBraW5kOiAiYWNjZXNzb3IiLCBuYW1lOiAiY3VzdG9tQ29udHJvbEhlaWdodHMiLCBzdGF0aWM6IGZhbHNlLCBwcml2YXRlOiBmYWxzZSwgYWNjZXNzOiB7IGhhczogKG9iaikgPT4gImN1c3RvbUNvbnRyb2xIZWlnaHRzIiBpbiBvYmosIGdldDogKG9iaikgPT4gb2JqLmN1c3RvbUNvbnRyb2xIZWlnaHRzLCBzZXQ6IChvYmosIHZhbHVlMikgPT4gewogICAgICAgIG9iai5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHZhbHVlMjsKICAgICAgfSB9LCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19leHRyYUluaXRpYWxpemVycyk7CiAgICAgIF9fZXNEZWNvcmF0ZTg3KG51bGwsIF9jbGFzc0Rlc2NyaXB0b3IgPSB7IHZhbHVlOiBfY2xhc3NUaGlzIH0sIF9jbGFzc0RlY29yYXRvcnMsIHsga2luZDogImNsYXNzIiwgbmFtZTogX2NsYXNzVGhpcy5uYW1lLCBtZXRhZGF0YTogX21ldGFkYXRhIH0sIG51bGwsIF9jbGFzc0V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgICAgRGVlc1RoZW1lMiA9IF9jbGFzc1RoaXMgPSBfY2xhc3NEZXNjcmlwdG9yLnZhbHVlOwogICAgICBpZiAoX21ldGFkYXRhKSBPYmplY3QuZGVmaW5lUHJvcGVydHkoX2NsYXNzVGhpcywgU3ltYm9sLm1ldGFkYXRhLCB7IGVudW1lcmFibGU6IHRydWUsIGNvbmZpZ3VyYWJsZTogdHJ1ZSwgd3JpdGFibGU6IHRydWUsIHZhbHVlOiBfbWV0YWRhdGEgfSk7CiAgICB9CiAgICBzdGF0aWMgZGVtbyA9IGRlbW9GdW5jNTU7CiAgICAjY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlID0gX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tU3BhY2luZ19pbml0aWFsaXplcnMsIG51bGwpOwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByb3BlcnRpZXMgZm9yIHRoZW1lIG92ZXJyaWRlcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdldCBjdXN0b21TcGFjaW5nKCkgewogICAgICByZXR1cm4gdGhpcy4jY3VzdG9tU3BhY2luZ19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVNwYWNpbmcodmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbVNwYWNpbmdfYWNjZXNzb3Jfc3RvcmFnZSA9IHZhbHVlMjsKICAgIH0KICAgICNjdXN0b21SYWRpdXNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TcGFjaW5nX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tUmFkaXVzX2luaXRpYWxpemVycywgbnVsbCkpOwogICAgZ2V0IGN1c3RvbVJhZGl1cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVJhZGl1c19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVJhZGl1cyh2YWx1ZTIpIHsKICAgICAgdGhpcy4jY3VzdG9tUmFkaXVzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tU2hhZG93c19hY2Nlc3Nvcl9zdG9yYWdlID0gKF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVJhZGl1c19leHRyYUluaXRpYWxpemVycyksIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbVNoYWRvd3NfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tU2hhZG93cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbVNoYWRvd3NfYWNjZXNzb3Jfc3RvcmFnZTsKICAgIH0KICAgIHNldCBjdXN0b21TaGFkb3dzKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21TaGFkb3dzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAjY3VzdG9tVHJhbnNpdGlvbnNfYWNjZXNzb3Jfc3RvcmFnZSA9IChfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21TaGFkb3dzX2V4dHJhSW5pdGlhbGl6ZXJzKSwgX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfaW5pdGlhbGl6ZXJzLCBudWxsKSk7CiAgICBnZXQgY3VzdG9tVHJhbnNpdGlvbnMoKSB7CiAgICAgIHJldHVybiB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlOwogICAgfQogICAgc2V0IGN1c3RvbVRyYW5zaXRpb25zKHZhbHVlMikgewogICAgICB0aGlzLiNjdXN0b21UcmFuc2l0aW9uc19hY2Nlc3Nvcl9zdG9yYWdlID0gdmFsdWUyOwogICAgfQogICAgI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSAoX19ydW5Jbml0aWFsaXplcnM4OCh0aGlzLCBfY3VzdG9tVHJhbnNpdGlvbnNfZXh0cmFJbml0aWFsaXplcnMpLCBfX3J1bkluaXRpYWxpemVyczg4KHRoaXMsIF9jdXN0b21Db250cm9sSGVpZ2h0c19pbml0aWFsaXplcnMsIG51bGwpKTsKICAgIGdldCBjdXN0b21Db250cm9sSGVpZ2h0cygpIHsKICAgICAgcmV0dXJuIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2U7CiAgICB9CiAgICBzZXQgY3VzdG9tQ29udHJvbEhlaWdodHModmFsdWUyKSB7CiAgICAgIHRoaXMuI2N1c3RvbUNvbnRyb2xIZWlnaHRzX2FjY2Vzc29yX3N0b3JhZ2UgPSB2YWx1ZTI7CiAgICB9CiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgLy8gU3R5bGVzCiAgICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogICAgc3RhdGljIHN0eWxlcyA9IFsKICAgICAgdGhlbWVEZWZhdWx0U3R5bGVzLAogICAgICBjc3NNYW5hZ2VyLmRlZmF1bHRTdHlsZXMsCiAgICAgIGlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBjb250ZW50czsKICAgICAgfQogICAgYAogICAgXTsKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBSZW5kZXIKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICByZW5kZXIoKSB7CiAgICAgIHJldHVybiBiMmAKICAgICAgPHN0eWxlPgogICAgICAgICR7dGhpcy5nZW5lcmF0ZUN1c3RvbVN0eWxlcygpfQogICAgICA8L3N0eWxlPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICBgOwogICAgfQogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIC8vIFByaXZhdGUgTWV0aG9kcwogICAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAgIGdlbmVyYXRlQ3VzdG9tU3R5bGVzKCkgewogICAgICBjb25zdCBzdHlsZXMzID0gWyI6aG9zdCB7Il07CiAgICAgIGlmICh0aGlzLmN1c3RvbVNwYWNpbmcpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tU3BhY2luZykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1zcGFjaW5nLSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tUmFkaXVzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVJhZGl1cykpIHsKICAgICAgICAgIGlmICh2YWx1ZTIpIHsKICAgICAgICAgICAgc3R5bGVzMy5wdXNoKGAgIC0tZGVlcy1yYWRpdXMtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBpZiAodGhpcy5jdXN0b21TaGFkb3dzKSB7CiAgICAgICAgZm9yIChjb25zdCBba2V5MiwgdmFsdWUyXSBvZiBPYmplY3QuZW50cmllcyh0aGlzLmN1c3RvbVNoYWRvd3MpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtc2hhZG93LSR7a2V5Mn06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIGNvbnN0IGNzc0tleSA9IGtleTIgPT09ICJkZWZhdWx0IiA/ICJkZWZhdWx0IiA6IGtleTI7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtdHJhbnNpdGlvbi0ke2Nzc0tleX06ICR7dmFsdWUyfTtgKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgICAgaWYgKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpIHsKICAgICAgICBmb3IgKGNvbnN0IFtrZXkyLCB2YWx1ZTJdIG9mIE9iamVjdC5lbnRyaWVzKHRoaXMuY3VzdG9tQ29udHJvbEhlaWdodHMpKSB7CiAgICAgICAgICBpZiAodmFsdWUyKSB7CiAgICAgICAgICAgIHN0eWxlczMucHVzaChgICAtLWRlZXMtY29udHJvbC1oZWlnaHQtJHtrZXkyfTogJHt2YWx1ZTJ9O2ApOwogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgICBzdHlsZXMzLnB1c2goIn0iKTsKICAgICAgcmV0dXJuIHN0eWxlczMuam9pbigiXG4iKTsKICAgIH0KICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvLyBQdWJsaWMgQVBJIE1ldGhvZHMKICAgIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgICAvKioKICAgICAqIFNldCBhIHNwYWNpbmcgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0U3BhY2luZyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TcGFjaW5nID0geyAuLi50aGlzLmN1c3RvbVNwYWNpbmcsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHJhZGl1cyB2YWx1ZSBkeW5hbWljYWxseQogICAgICovCiAgICBzZXRSYWRpdXMoa2V5MiwgdmFsdWUyKSB7CiAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0geyAuLi50aGlzLmN1c3RvbVJhZGl1cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgc2hhZG93IHZhbHVlIGR5bmFtaWNhbGx5CiAgICAgKi8KICAgIHNldFNoYWRvdyhrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21TaGFkb3dzID0geyAuLi50aGlzLmN1c3RvbVNoYWRvd3MsIFtrZXkyXTogdmFsdWUyIH07CiAgICB9CiAgICAvKioKICAgICAqIFNldCBhIHRyYW5zaXRpb24gdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0VHJhbnNpdGlvbihrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHsgLi4udGhpcy5jdXN0b21UcmFuc2l0aW9ucywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogU2V0IGEgY29udHJvbCBoZWlnaHQgdmFsdWUgZHluYW1pY2FsbHkKICAgICAqLwogICAgc2V0Q29udHJvbEhlaWdodChrZXkyLCB2YWx1ZTIpIHsKICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHsgLi4udGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cywgW2tleTJdOiB2YWx1ZTIgfTsKICAgIH0KICAgIC8qKgogICAgICogR2V0IHRoZSBjdXJyZW50IHRoZW1lIGNvbmZpZ3VyYXRpb24gKGRlZmF1bHRzICsgb3ZlcnJpZGVzKQogICAgICovCiAgICBnZXRUaGVtZSgpIHsKICAgICAgcmV0dXJuIHsKICAgICAgICBjb2xvcnM6IHRoZW1lRGVmYXVsdHMuY29sb3JzLAogICAgICAgIHNwYWNpbmc6IHsgLi4udGhlbWVEZWZhdWx0cy5zcGFjaW5nLCAuLi50aGlzLmN1c3RvbVNwYWNpbmcgfSwKICAgICAgICByYWRpdXM6IHsgLi4udGhlbWVEZWZhdWx0cy5yYWRpdXMsIC4uLnRoaXMuY3VzdG9tUmFkaXVzIH0sCiAgICAgICAgc2hhZG93czogeyAuLi50aGVtZURlZmF1bHRzLnNoYWRvd3MsIC4uLnRoaXMuY3VzdG9tU2hhZG93cyB9LAogICAgICAgIHRyYW5zaXRpb25zOiB7IC4uLnRoZW1lRGVmYXVsdHMudHJhbnNpdGlvbnMsIC4uLnRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgfSwKICAgICAgICBjb250cm9sSGVpZ2h0czogeyAuLi50aGVtZURlZmF1bHRzLmNvbnRyb2xIZWlnaHRzLCAuLi50aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzIH0KICAgICAgfTsKICAgIH0KICAgIC8qKgogICAgICogUmVzZXQgYWxsIGN1c3RvbSBvdmVycmlkZXMgdG8gZGVmYXVsdHMKICAgICAqLwogICAgcmVzZXRUb0RlZmF1bHRzKCkgewogICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbVJhZGl1cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tU2hhZG93cyA9IG51bGw7CiAgICAgIHRoaXMuY3VzdG9tVHJhbnNpdGlvbnMgPSBudWxsOwogICAgICB0aGlzLmN1c3RvbUNvbnRyb2xIZWlnaHRzID0gbnVsbDsKICAgIH0KICAgIC8qKgogICAgICogQXBwbHkgYSBjb21wbGV0ZSB0aGVtZSBvYmplY3QKICAgICAqLwogICAgYXBwbHlUaGVtZSh0aGVtZSkgewogICAgICBpZiAodGhlbWUuc3BhY2luZykKICAgICAgICB0aGlzLmN1c3RvbVNwYWNpbmcgPSB0aGVtZS5zcGFjaW5nOwogICAgICBpZiAodGhlbWUucmFkaXVzKQogICAgICAgIHRoaXMuY3VzdG9tUmFkaXVzID0gdGhlbWUucmFkaXVzOwogICAgICBpZiAodGhlbWUuc2hhZG93cykKICAgICAgICB0aGlzLmN1c3RvbVNoYWRvd3MgPSB0aGVtZS5zaGFkb3dzOwogICAgICBpZiAodGhlbWUudHJhbnNpdGlvbnMpCiAgICAgICAgdGhpcy5jdXN0b21UcmFuc2l0aW9ucyA9IHRoZW1lLnRyYW5zaXRpb25zOwogICAgICBpZiAodGhlbWUuY29udHJvbEhlaWdodHMpCiAgICAgICAgdGhpcy5jdXN0b21Db250cm9sSGVpZ2h0cyA9IHRoZW1lLmNvbnRyb2xIZWlnaHRzOwogICAgfQogICAgY29uc3RydWN0b3IoKSB7CiAgICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgodGhpcywgX2N1c3RvbUNvbnRyb2xIZWlnaHRzX2V4dHJhSW5pdGlhbGl6ZXJzKTsKICAgIH0KICAgIHN0YXRpYyB7CiAgICAgIF9fcnVuSW5pdGlhbGl6ZXJzODgoX2NsYXNzVGhpcywgX2NsYXNzRXh0cmFJbml0aWFsaXplcnMpOwogICAgfQogIH07CiAgcmV0dXJuIERlZXNUaGVtZTIgPSBfY2xhc3NUaGlzOwp9KSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi9lbGVtZW50cy9pbmRleC5qcwppbml0X3RoZW1lKCk7CmluaXRfZ3JvdXBfcnVudGltZSgpOwoKLy8gbm9kZV9tb2R1bGVzLy5wbnBtL0BkZXNpZ24uZXN0YXRlK2RlZXMtY2F0YWxvZ0AzLjM3LjBfQHRpcHRhcCtwbUAyLjI3LjIvbm9kZV9tb2R1bGVzL0BkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZy9kaXN0X3RzX3dlYi8wMF9jb21taXRpbmZvX2RhdGEuanMKdmFyIGNvbW1pdGluZm8gPSB7CiAgbmFtZTogIkBkZXNpZ24uZXN0YXRlL2RlZXMtY2F0YWxvZyIsCiAgdmVyc2lvbjogIjMuMzYuMCIsCiAgZGVzY3JpcHRpb246ICJBIGNvbXByZWhlbnNpdmUgbGlicmFyeSB0aGF0IHByb3ZpZGVzIGR5bmFtaWMgd2ViIGNvbXBvbmVudHMgZm9yIGJ1aWxkaW5nIHNvcGhpc3RpY2F0ZWQgYW5kIG1vZGVybiB3ZWIgYXBwbGljYXRpb25zIHVzaW5nIEphdmFTY3JpcHQgYW5kIFR5cGVTY3JpcHQuIgp9OwoKLy8gdHNfd2ViL3BsdWdpbnMudHMKaW5pdF9kaXN0X3RzMjYoKTsKaW5pdF9kaXN0X3RzMTUoKTsKdmFyIGh0bWw3ID0gYjI7CnZhciBjc3MyID0gaTsKdmFyIGNzc01hbmFnZXIyID0gY3NzTWFuYWdlcjsKdmFyIGN1c3RvbUVsZW1lbnQgPSB0NDsKdmFyIHByb3BlcnR5ID0gbjU7CnZhciBzdGF0ZSA9IHI1Owp2YXIgRGVlc0VsZW1lbnQyID0gRGVlc0VsZW1lbnQ7CgovLyB0c193ZWIvc2VydmljZXMvYXBpLnNlcnZpY2UudHMKdmFyIEFwaVNlcnZpY2UgPSBjbGFzcyB7CiAgYmFzZVVybDsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHRoaXMuYmFzZVVybCA9IHdpbmRvdy5sb2NhdGlvbi5vcmlnaW4gKyAiL3R5cGVkcmVxdWVzdCI7CiAgfQogIC8qKgogICAqIE1ha2UgYSB0eXBlZCByZXF1ZXN0IHRvIHRoZSBiYWNrZW5kCiAgICovCiAgYXN5bmMgcmVxdWVzdChtZXRob2QsIHJlcXVlc3REYXRhKSB7CiAgICBjb25zdCB0eXBlZFJlcXVlc3QgPSBuZXcgZGlzdF90c19leHBvcnRzMTUuVHlwZWRSZXF1ZXN0KHRoaXMuYmFzZVVybCwgbWV0aG9kKTsKICAgIGNvbnN0IHJlc3BvbnNlID0gYXdhaXQgdHlwZWRSZXF1ZXN0LmZpcmUocmVxdWVzdERhdGEpOwogICAgcmV0dXJuIHJlc3BvbnNlOwogIH0KICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgLy8gUzMgQVBJIE1ldGhvZHMKICAvLyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiAgYXN5bmMgbGlzdEJ1Y2tldHMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImxpc3RCdWNrZXRzIiwge30pOwogICAgcmV0dXJuIHJlc3VsdC5idWNrZXRzOwogIH0KICBhc3luYyBjcmVhdGVCdWNrZXQoYnVja2V0TmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KAogICAgICAiY3JlYXRlQnVja2V0IiwKICAgICAgeyBidWNrZXROYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRlbGV0ZUJ1Y2tldChidWNrZXROYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJkZWxldGVCdWNrZXQiLAogICAgICB7IGJ1Y2tldE5hbWUgfQogICAgKTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgbGlzdE9iamVjdHMoYnVja2V0TmFtZSwgcHJlZml4NCwgZGVsaW1pdGVyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJsaXN0T2JqZWN0cyIsIHsgYnVja2V0TmFtZSwgcHJlZml4OiBwcmVmaXg0LCBkZWxpbWl0ZXIgfSk7CiAgfQogIGFzeW5jIGdldE9iamVjdChidWNrZXROYW1lLCBrZXkyKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJnZXRPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICB9CiAgYXN5bmMgZ2V0T2JqZWN0TWV0YWRhdGEoYnVja2V0TmFtZSwga2V5MikgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZ2V0T2JqZWN0TWV0YWRhdGEiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICB9CiAgYXN5bmMgcHV0T2JqZWN0KGJ1Y2tldE5hbWUsIGtleTIsIGNvbnRlbnQzLCBjb250ZW50VHlwZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJwdXRPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiwgY29udGVudDogY29udGVudDMsIGNvbnRlbnRUeXBlIH0pOwogICAgcmV0dXJuIHJlc3VsdC5zdWNjZXNzOwogIH0KICBhc3luYyBkZWxldGVPYmplY3QoYnVja2V0TmFtZSwga2V5MikgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkZWxldGVPYmplY3QiLCB7IGJ1Y2tldE5hbWUsIGtleToga2V5MiB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZGVsZXRlUHJlZml4KGJ1Y2tldE5hbWUsIHByZWZpeDQpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZGVsZXRlUHJlZml4IiwgeyBidWNrZXROYW1lLCBwcmVmaXg6IHByZWZpeDQgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGdldE9iamVjdFVybChidWNrZXROYW1lLCBrZXkyKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldE9iamVjdFVybCIsIHsgYnVja2V0TmFtZSwga2V5OiBrZXkyIH0pOwogICAgcmV0dXJuIHJlc3VsdC51cmw7CiAgfQogIGFzeW5jIGNvcHlPYmplY3Qoc291cmNlQnVja2V0LCBzb3VyY2VLZXksIGRlc3RCdWNrZXQsIGRlc3RLZXkpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY29weU9iamVjdCIsIHsgc291cmNlQnVja2V0LCBzb3VyY2VLZXksIGRlc3RCdWNrZXQsIGRlc3RLZXkgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIC8vID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KICAvLyBNb25nb0RCIEFQSSBNZXRob2RzCiAgLy8gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQogIGFzeW5jIGxpc3REYXRhYmFzZXMoKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJsaXN0RGF0YWJhc2VzIiwKICAgICAge30KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LmRhdGFiYXNlczsKICB9CiAgYXN5bmMgY3JlYXRlRGF0YWJhc2UoZGF0YWJhc2VOYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoCiAgICAgICJjcmVhdGVEYXRhYmFzZSIsCiAgICAgIHsgZGF0YWJhc2VOYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGRyb3BEYXRhYmFzZShkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgKICAgICAgImRyb3BEYXRhYmFzZSIsCiAgICAgIHsgZGF0YWJhc2VOYW1lIH0KICAgICk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGxpc3RDb2xsZWN0aW9ucyhkYXRhYmFzZU5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgibGlzdENvbGxlY3Rpb25zIiwgeyBkYXRhYmFzZU5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LmNvbGxlY3Rpb25zOwogIH0KICBhc3luYyBjcmVhdGVDb2xsZWN0aW9uKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY3JlYXRlQ29sbGVjdGlvbiIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZHJvcENvbGxlY3Rpb24oZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJkcm9wQ29sbGVjdGlvbiIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3VjY2VzczsKICB9CiAgYXN5bmMgZmluZERvY3VtZW50cyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBvcHRpb25zKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJmaW5kRG9jdW1lbnRzIiwgewogICAgICBkYXRhYmFzZU5hbWUsCiAgICAgIGNvbGxlY3Rpb25OYW1lLAogICAgICAuLi5vcHRpb25zCiAgICB9KTsKICB9CiAgYXN5bmMgZ2V0RG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJnZXREb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCB9KTsKICAgIHJldHVybiByZXN1bHQuZG9jdW1lbnQ7CiAgfQogIGFzeW5jIGluc2VydERvY3VtZW50KGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGRvY3VtZW50NCkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJpbnNlcnREb2N1bWVudCIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnQ6IGRvY3VtZW50NCB9KTsKICAgIHJldHVybiByZXN1bHQuaW5zZXJ0ZWRJZDsKICB9CiAgYXN5bmMgdXBkYXRlRG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCwgdXBkYXRlKSB7CiAgICByZXR1cm4gdGhpcy5yZXF1ZXN0KCJ1cGRhdGVEb2N1bWVudCIsIHsKICAgICAgZGF0YWJhc2VOYW1lLAogICAgICBjb2xsZWN0aW9uTmFtZSwKICAgICAgZG9jdW1lbnRJZCwKICAgICAgdXBkYXRlCiAgICB9KTsKICB9CiAgYXN5bmMgZGVsZXRlRG9jdW1lbnQoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwgZG9jdW1lbnRJZCkgewogICAgcmV0dXJuIHRoaXMucmVxdWVzdCgiZGVsZXRlRG9jdW1lbnQiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGRvY3VtZW50SWQgfSk7CiAgfQogIGFzeW5jIHJ1bkFnZ3JlZ2F0aW9uKGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIHBpcGVsaW5lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoInJ1bkFnZ3JlZ2F0aW9uIiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBwaXBlbGluZSB9KTsKICAgIHJldHVybiByZXN1bHQucmVzdWx0czsKICB9CiAgYXN5bmMgbGlzdEluZGV4ZXMoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSkgewogICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgdGhpcy5yZXF1ZXN0KCJsaXN0SW5kZXhlcyIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuaW5kZXhlczsKICB9CiAgYXN5bmMgY3JlYXRlSW5kZXgoZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSwga2V5czIsIG9wdGlvbnMpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiY3JlYXRlSW5kZXgiLCB7IGRhdGFiYXNlTmFtZSwgY29sbGVjdGlvbk5hbWUsIGtleXM6IGtleXMyLCBvcHRpb25zIH0pOwogICAgcmV0dXJuIHJlc3VsdC5pbmRleE5hbWU7CiAgfQogIGFzeW5jIGRyb3BJbmRleChkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBpbmRleE5hbWUpIHsKICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IHRoaXMucmVxdWVzdCgiZHJvcEluZGV4IiwgeyBkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lLCBpbmRleE5hbWUgfSk7CiAgICByZXR1cm4gcmVzdWx0LnN1Y2Nlc3M7CiAgfQogIGFzeW5jIGdldENvbGxlY3Rpb25TdGF0cyhkYXRhYmFzZU5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBjb25zdCByZXN1bHQgPSBhd2FpdCB0aGlzLnJlcXVlc3QoImdldENvbGxlY3Rpb25TdGF0cyIsIHsgZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZSB9KTsKICAgIHJldHVybiByZXN1bHQuc3RhdHM7CiAgfQogIGFzeW5jIGdldFNlcnZlclN0YXR1cygpIHsKICAgIHJldHVybiB0aGlzLnJlcXVlc3QoImdldFNlcnZlclN0YXR1cyIsIHt9KTsKICB9Cn07CgovLyB0c193ZWIvc2VydmljZXMvaW5kZXgudHMKdmFyIGFwaVNlcnZpY2UgPSBuZXcgQXBpU2VydmljZSgpOwoKLy8gdHNfd2ViL3N0eWxlcy90aGVtZS50cwppbml0X2Rpc3RfdHMyNigpOwp2YXIgdGhlbWVTdHlsZXMgPSBpYAogIDpob3N0IHsKICAgIC8qIEJhY2tncm91bmQgY29sb3JzICovCiAgICAtLXRzdmlldy1iZy1wcmltYXJ5OiAjMWExYTFhOwogICAgLS10c3ZpZXctYmctc2Vjb25kYXJ5OiAjMWUxZTFlOwogICAgLS10c3ZpZXctYmctdGVydGlhcnk6ICMxNDE0MTQ7CiAgICAtLXRzdmlldy1iZy1vdmVybGF5OiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAtLXRzdmlldy1iZy1vdmVybGF5LWRhcms6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgIC0tdHN2aWV3LWJnLWRpYWxvZy1vdmVybGF5OiByZ2JhKDAsIDAsIDAsIDAuNyk7CgogICAgLyogQm9yZGVyIGNvbG9ycyAqLwogICAgLS10c3ZpZXctYm9yZGVyLXByaW1hcnk6ICMzMzM7CiAgICAtLXRzdmlldy1ib3JkZXItc2Vjb25kYXJ5OiAjNDQ0OwogICAgLS10c3ZpZXctYm9yZGVyLXRlcnRpYXJ5OiAjMmEyYTNlOwoKICAgIC8qIFRleHQgY29sb3JzICovCiAgICAtLXRzdmlldy10ZXh0LXByaW1hcnk6ICNmZmY7CiAgICAtLXRzdmlldy10ZXh0LXNlY29uZGFyeTogI2UwZTBlMDsKICAgIC0tdHN2aWV3LXRleHQtdGVydGlhcnk6ICNjY2M7CiAgICAtLXRzdmlldy10ZXh0LW11dGVkOiAjODg4OwogICAgLS10c3ZpZXctdGV4dC1kaW06ICM2NjY7CgogICAgLyogSW50ZXJhY3RpdmUgc3RhdGVzICovCiAgICAtLXRzdmlldy1ob3Zlci1iZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgIC0tdHN2aWV3LWhvdmVyLWJnLXN0cm9uZzogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgLS10c3ZpZXctc2VsZWN0ZWQtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAtLXRzdmlldy1hY3RpdmUtYmc6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKCiAgICAvKiBBY2NlbnQgY29sb3JzICovCiAgICAtLXRzdmlldy1hY2NlbnQtZm9sZGVyOiAjZmJiZjI0OwoKICAgIC8qIERhbmdlci9kZXN0cnVjdGl2ZSBhY3Rpb25zICovCiAgICAtLXRzdmlldy1kYW5nZXI6ICNlZjQ0NDQ7CiAgICAtLXRzdmlldy1kYW5nZXItdGV4dDogI2Y4NzE3MTsKICAgIC0tdHN2aWV3LWRhbmdlci1iZzogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgIC0tdHN2aWV3LWRhbmdlci1iZy1ob3ZlcjogcmdiYSgyMzksIDY4LCA2OCwgMC4zKTsKCiAgICAvKiBTdWNjZXNzIHN0YXRlcyAqLwogICAgLS10c3ZpZXctc3VjY2VzczogIzIyYzU1ZTsKICAgIC0tdHN2aWV3LXN1Y2Nlc3MtYmc6IHJnYmEoMzQsIDE5NywgOTQsIDAuMik7CgogICAgLyogQm9yZGVyIHJhZGl1cyAqLwogICAgLS10c3ZpZXctcmFkaXVzLXNtOiA0cHg7CiAgICAtLXRzdmlldy1yYWRpdXMtbWQ6IDZweDsKICAgIC0tdHN2aWV3LXJhZGl1cy1sZzogOHB4OwogICAgLS10c3ZpZXctcmFkaXVzLXhsOiAxMnB4OwoKICAgIC8qIFNwYWNpbmcgKi8KICAgIC0tdHN2aWV3LXNwYWNpbmcteHM6IDRweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctc206IDhweDsKICAgIC0tdHN2aWV3LXNwYWNpbmctbWQ6IDEycHg7CiAgICAtLXRzdmlldy1zcGFjaW5nLWxnOiAxNnB4OwogICAgLS10c3ZpZXctc3BhY2luZy14bDogMjRweDsKICB9CmA7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LWFwcC50cwp2YXIgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldF9kZWMsIF9zM0NyZWF0ZURpYWxvZ1R5cGVfZGVjLCBfc2hvd1MzQ3JlYXRlRGlhbG9nX2RlYywgX25ld0RhdGFiYXNlTmFtZV9kZWMsIF9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2dfZGVjLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjLCBfbmV3QnVja2V0TmFtZV9kZWMsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYywgX2RhdGFiYXNlc19kZWMsIF9idWNrZXRzX2RlYywgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMsIF9zZWxlY3RlZERhdGFiYXNlX2RlYywgX3NlbGVjdGVkQnVja2V0X2RlYywgX3ZpZXdNb2RlX2RlYywgX2E0LCBfVHN2aWV3QXBwX2RlY29yYXRvcnMsIF9pbml0LCBfdmlld01vZGUsIF9zZWxlY3RlZEJ1Y2tldCwgX3NlbGVjdGVkRGF0YWJhc2UsIF9zZWxlY3RlZENvbGxlY3Rpb24sIF9idWNrZXRzLCBfZGF0YWJhc2VzLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZywgX25ld0J1Y2tldE5hbWUsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZywgX25ld0NvbGxlY3Rpb25OYW1lLCBfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nLCBfbmV3RGF0YWJhc2VOYW1lLCBfc2hvd1MzQ3JlYXRlRGlhbG9nLCBfczNDcmVhdGVEaWFsb2dUeXBlLCBfczNDcmVhdGVEaWFsb2dCdWNrZXQsIF9zM0NyZWF0ZURpYWxvZ05hbWU7CnZhciB7IGh0bWw6IGh0bWw4LCBjc3M6IGNzczMsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIzLCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50Miwgc3RhdGU6IHN0YXRlMiwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MyB9ID0gcGx1Z2luc19leHBvcnRzNTsKdmFyIHsgRGVlc0NvbnRleHRtZW51OiBEZWVzQ29udGV4dG1lbnUyIH0gPSBkaXN0X3RzX3dlYl9leHBvcnRzMjsKX1Rzdmlld0FwcF9kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQyKCJ0c3ZpZXctYXBwIildOwp2YXIgVHN2aWV3QXBwID0gY2xhc3MgZXh0ZW5kcyAoX2E0ID0gRGVlc0VsZW1lbnQzLCBfdmlld01vZGVfZGVjID0gW3N0YXRlMigpXSwgX3NlbGVjdGVkQnVja2V0X2RlYyA9IFtzdGF0ZTIoKV0sIF9zZWxlY3RlZERhdGFiYXNlX2RlYyA9IFtzdGF0ZTIoKV0sIF9zZWxlY3RlZENvbGxlY3Rpb25fZGVjID0gW3N0YXRlMigpXSwgX2J1Y2tldHNfZGVjID0gW3N0YXRlMigpXSwgX2RhdGFiYXNlc19kZWMgPSBbc3RhdGUyKCldLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZ19kZWMgPSBbc3RhdGUyKCldLCBfbmV3QnVja2V0TmFtZV9kZWMgPSBbc3RhdGUyKCldLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjID0gW3N0YXRlMigpXSwgX25ld0NvbGxlY3Rpb25OYW1lX2RlYyA9IFtzdGF0ZTIoKV0sIF9zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2dfZGVjID0gW3N0YXRlMigpXSwgX25ld0RhdGFiYXNlTmFtZV9kZWMgPSBbc3RhdGUyKCldLCBfc2hvd1MzQ3JlYXRlRGlhbG9nX2RlYyA9IFtzdGF0ZTIoKV0sIF9zM0NyZWF0ZURpYWxvZ1R5cGVfZGVjID0gW3N0YXRlMigpXSwgX3MzQ3JlYXRlRGlhbG9nQnVja2V0X2RlYyA9IFtzdGF0ZTIoKV0sIF9zM0NyZWF0ZURpYWxvZ05hbWVfZGVjID0gW3N0YXRlMigpXSwgX2E0KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF92aWV3TW9kZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDgsIHRoaXMsICJzMyIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRCdWNrZXQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWREYXRhYmFzZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDE2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZENvbGxlY3Rpb24sIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYnVja2V0cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDI0LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kYXRhYmFzZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAyOCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDMyLCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9uZXdCdWNrZXROYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAzOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0MywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX25ld0NvbGxlY3Rpb25OYW1lLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNDQsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA0NywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDQ4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9uZXdEYXRhYmFzZU5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1MiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDU1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd1MzQ3JlYXRlRGlhbG9nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA1OSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3MzQ3JlYXRlRGlhbG9nVHlwZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDYwLCB0aGlzLCAiZm9sZGVyIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDY0LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdCwgNjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zM0NyZWF0ZURpYWxvZ05hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCA2OCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQsIDcxLCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkRGF0YSgpOwogIH0KICBhc3luYyBsb2FkRGF0YSgpIHsKICAgIHRyeSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdEJ1Y2tldHMoKTsKICAgICAgdGhpcy5kYXRhYmFzZXMgPSBhd2FpdCBhcGlTZXJ2aWNlLmxpc3REYXRhYmFzZXMoKTsKICAgICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJzMyIgJiYgdGhpcy5idWNrZXRzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWRCdWNrZXQpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdOwogICAgICB9CiAgICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iICYmIHRoaXMuZGF0YWJhc2VzLmxlbmd0aCA+IDAgJiYgIXRoaXMuc2VsZWN0ZWREYXRhYmFzZSkgewogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2VzWzBdLm5hbWU7CiAgICAgIH0KICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIGRhdGE6IiwgZXJyKTsKICAgIH0KICB9CiAgc2V0Vmlld01vZGUobW9kZSkgewogICAgdGhpcy52aWV3TW9kZSA9IG1vZGU7CiAgfQogIHNlbGVjdEJ1Y2tldChidWNrZXQpIHsKICAgIHRoaXMuc2VsZWN0ZWRCdWNrZXQgPSBidWNrZXQ7CiAgfQogIHNlbGVjdERhdGFiYXNlKGRiKSB7CiAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSBkYjsKICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgfQogIHNlbGVjdENvbGxlY3Rpb24oY29sbGVjdGlvbikgewogICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSBjb2xsZWN0aW9uOwogIH0KICBhc3luYyBjcmVhdGVCdWNrZXQoKSB7CiAgICBpZiAoIXRoaXMubmV3QnVja2V0TmFtZS50cmltKCkpIHJldHVybjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmNyZWF0ZUJ1Y2tldCh0aGlzLm5ld0J1Y2tldE5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuYnVja2V0cyA9IFsuLi50aGlzLmJ1Y2tldHMsIHRoaXMubmV3QnVja2V0TmFtZS50cmltKCldOwogICAgICB0aGlzLm5ld0J1Y2tldE5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gZmFsc2U7CiAgICB9CiAgfQogIGFzeW5jIGNyZWF0ZUNvbGxlY3Rpb24oKSB7CiAgICBpZiAoIXRoaXMubmV3Q29sbGVjdGlvbk5hbWUudHJpbSgpIHx8ICF0aGlzLnNlbGVjdGVkRGF0YWJhc2UpIHJldHVybjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmNyZWF0ZUNvbGxlY3Rpb24odGhpcy5zZWxlY3RlZERhdGFiYXNlLCB0aGlzLm5ld0NvbGxlY3Rpb25OYW1lLnRyaW0oKSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLm5ld0NvbGxlY3Rpb25OYW1lID0gIiI7CiAgICAgIHRoaXMuc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgY3JlYXRlRGF0YWJhc2UoKSB7CiAgICBpZiAoIXRoaXMubmV3RGF0YWJhc2VOYW1lLnRyaW0oKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuY3JlYXRlRGF0YWJhc2UodGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuZGF0YWJhc2VzID0gWy4uLnRoaXMuZGF0YWJhc2VzLCB7IG5hbWU6IHRoaXMubmV3RGF0YWJhc2VOYW1lLnRyaW0oKSB9XTsKICAgICAgdGhpcy5uZXdEYXRhYmFzZU5hbWUgPSAiIjsKICAgICAgdGhpcy5zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2cgPSBmYWxzZTsKICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlQnVja2V0KGJ1Y2tldCwgZTExKSB7CiAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBidWNrZXQgIiR7YnVja2V0fSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIG9iamVjdHMgaW4gdGhlIGJ1Y2tldC5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZGVsZXRlQnVja2V0KGJ1Y2tldCk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmJ1Y2tldHMgPSB0aGlzLmJ1Y2tldHMuZmlsdGVyKChiNSkgPT4gYjUgIT09IGJ1Y2tldCk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkQnVja2V0ID09PSBidWNrZXQpIHsKICAgICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5idWNrZXRzWzBdIHx8ICIiOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGRlbGV0ZURhdGFiYXNlKGRiTmFtZSwgZTExKSB7CiAgICBlMTEuc3RvcFByb3BhZ2F0aW9uKCk7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBkYXRhYmFzZSAiJHtkYk5hbWV9Ij8gVGhpcyB3aWxsIGRlbGV0ZSBhbGwgY29sbGVjdGlvbnMgYW5kIGRvY3VtZW50cy5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcERhdGFiYXNlKGRiTmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLmRhdGFiYXNlcyA9IHRoaXMuZGF0YWJhc2VzLmZpbHRlcigoZDYpID0+IGQ2Lm5hbWUgIT09IGRiTmFtZSk7CiAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPT09IGRiTmFtZSkgewogICAgICAgIHRoaXMuc2VsZWN0ZWREYXRhYmFzZSA9IHRoaXMuZGF0YWJhc2VzWzBdPy5uYW1lIHx8ICIiOwogICAgICAgIHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID0gIiI7CiAgICAgIH0KICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlQ29sbGVjdGlvbihkYk5hbWUsIGNvbGxlY3Rpb25OYW1lKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSBjb2xsZWN0aW9uICIke2NvbGxlY3Rpb25OYW1lfSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIGRvY3VtZW50cy5gKSkgcmV0dXJuOwogICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcENvbGxlY3Rpb24oZGJOYW1lLCBjb2xsZWN0aW9uTmFtZSk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICBpZiAodGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPT09IGNvbGxlY3Rpb25OYW1lKSB7CiAgICAgICAgdGhpcy5zZWxlY3RlZENvbGxlY3Rpb24gPSAiIjsKICAgICAgfQogICAgICB0aGlzLnJlcXVlc3RVcGRhdGUoKTsKICAgIH0KICB9CiAgaGFuZGxlQnVja2V0Q29udGV4dE1lbnUoZXZlbnQsIGJ1Y2tldCkgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTIub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJWaWV3IENvbnRlbnRzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJPcGVuIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0QnVja2V0KGJ1Y2tldCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlblMzQ3JlYXRlRGlhbG9nKGJ1Y2tldCwgImZvbGRlciIpCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlblMzQ3JlYXRlRGlhbG9nKGJ1Y2tldCwgImZpbGUiKQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUgQnVja2V0IiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgaWYgKGNvbmZpcm0oYERlbGV0ZSBidWNrZXQgIiR7YnVja2V0fSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIG9iamVjdHMgaW4gdGhlIGJ1Y2tldC5gKSkgewogICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVCdWNrZXQoYnVja2V0KTsKICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICAgICAgICB0aGlzLmJ1Y2tldHMgPSB0aGlzLmJ1Y2tldHMuZmlsdGVyKChiNSkgPT4gYjUgIT09IGJ1Y2tldCk7CiAgICAgICAgICAgICAgaWYgKHRoaXMuc2VsZWN0ZWRCdWNrZXQgPT09IGJ1Y2tldCkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZEJ1Y2tldCA9IHRoaXMuYnVja2V0c1swXSB8fCAiIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICBvcGVuUzNDcmVhdGVEaWFsb2coYnVja2V0LCB0eXBlNSkgewogICAgdGhpcy5zM0NyZWF0ZURpYWxvZ0J1Y2tldCA9IGJ1Y2tldDsKICAgIHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID0gdHlwZTU7CiAgICB0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZSA9ICIiOwogICAgdGhpcy5zaG93UzNDcmVhdGVEaWFsb2cgPSB0cnVlOwogIH0KICBnZXRDb250ZW50VHlwZShleHQpIHsKICAgIGNvbnN0IGNvbnRlbnRUeXBlcyA9IHsKICAgICAganNvbjogImFwcGxpY2F0aW9uL2pzb24iLAogICAgICB0eHQ6ICJ0ZXh0L3BsYWluIiwKICAgICAgaHRtbDogInRleHQvaHRtbCIsCiAgICAgIGNzczogInRleHQvY3NzIiwKICAgICAganM6ICJhcHBsaWNhdGlvbi9qYXZhc2NyaXB0IiwKICAgICAgdHM6ICJ0ZXh0L3R5cGVzY3JpcHQiLAogICAgICBtZDogInRleHQvbWFya2Rvd24iLAogICAgICB4bWw6ICJhcHBsaWNhdGlvbi94bWwiLAogICAgICB5YW1sOiAidGV4dC95YW1sIiwKICAgICAgeW1sOiAidGV4dC95YW1sIiwKICAgICAgY3N2OiAidGV4dC9jc3YiCiAgICB9OwogICAgcmV0dXJuIGNvbnRlbnRUeXBlc1tleHRdIHx8ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogIH0KICBnZXREZWZhdWx0Q29udGVudChleHQpIHsKICAgIGNvbnN0IGRlZmF1bHRzID0gewogICAgICBqc29uOiAie1xuICBcbn0iLAogICAgICBodG1sOiAiPCFET0NUWVBFIGh0bWw+XG48aHRtbD5cbjxoZWFkPlxuICA8dGl0bGU+PC90aXRsZT5cbjwvaGVhZD5cbjxib2R5PlxuICBcbjwvYm9keT5cbjwvaHRtbD4iLAogICAgICBtZDogIiMgVGl0bGVcblxuIiwKICAgICAgdHh0OiAiIgogICAgfTsKICAgIHJldHVybiBkZWZhdWx0c1tleHRdIHx8ICIiOwogIH0KICBhc3luYyBoYW5kbGVTM0NyZWF0ZSgpIHsKICAgIGlmICghdGhpcy5zM0NyZWF0ZURpYWxvZ05hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBuYW1lID0gdGhpcy5zM0NyZWF0ZURpYWxvZ05hbWUudHJpbSgpOwogICAgbGV0IHBhdGgyOwogICAgaWYgKHRoaXMuczNDcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIikgewogICAgICBwYXRoMiA9IG5hbWUgKyAiLy5rZWVwIjsKICAgIH0gZWxzZSB7CiAgICAgIHBhdGgyID0gbmFtZTsKICAgIH0KICAgIGNvbnN0IGV4dCA9IG5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5zM0NyZWF0ZURpYWxvZ1R5cGUgPT09ICJmaWxlIiA/IHRoaXMuZ2V0Q29udGVudFR5cGUoZXh0KSA6ICJhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW0iOwogICAgY29uc3QgY29udGVudDMgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nVHlwZSA9PT0gImZpbGUiID8gdGhpcy5nZXREZWZhdWx0Q29udGVudChleHQpIDogIiI7CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5wdXRPYmplY3QoCiAgICAgIHRoaXMuczNDcmVhdGVEaWFsb2dCdWNrZXQsCiAgICAgIHBhdGgyLAogICAgICBidG9hKGNvbnRlbnQzKSwKICAgICAgY29udGVudFR5cGUKICAgICk7CiAgICBpZiAoc3VjY2VzcykgewogICAgICB0aGlzLnNob3dTM0NyZWF0ZURpYWxvZyA9IGZhbHNlOwogICAgICB0aGlzLnNlbGVjdGVkQnVja2V0ID0gdGhpcy5zM0NyZWF0ZURpYWxvZ0J1Y2tldDsKICAgICAgdGhpcy5yZXF1ZXN0VXBkYXRlKCk7CiAgICB9CiAgfQogIGhhbmRsZURhdGFiYXNlQ29udGV4dE1lbnUoZXZlbnQsIGRiTmFtZSkgewogICAgZXZlbnQucHJldmVudERlZmF1bHQoKTsKICAgIERlZXNDb250ZXh0bWVudTIub3BlbkNvbnRleHRNZW51V2l0aE9wdGlvbnMoZXZlbnQsIFsKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgQ29sbGVjdGlvbiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPSBkYk5hbWU7CiAgICAgICAgICB0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nID0gdHJ1ZTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBEYXRhYmFzZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZGF0YWJhc2UgIiR7ZGJOYW1lfSI/IFRoaXMgd2lsbCBkZWxldGUgYWxsIGNvbGxlY3Rpb25zIGFuZCBkb2N1bWVudHMuYCkpIHsKICAgICAgICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UuZHJvcERhdGFiYXNlKGRiTmFtZSk7CiAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgdGhpcy5kYXRhYmFzZXMgPSB0aGlzLmRhdGFiYXNlcy5maWx0ZXIoKGQ2KSA9PiBkNi5uYW1lICE9PSBkYk5hbWUpOwogICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPT09IGRiTmFtZSkgewogICAgICAgICAgICAgICAgdGhpcy5zZWxlY3RlZERhdGFiYXNlID0gdGhpcy5kYXRhYmFzZXNbMF0/Lm5hbWUgfHwgIiI7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9ICIiOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIHJlbmRlcigpIHsKICAgIHJldHVybiBodG1sOGAKICAgICAgPGRpdiBjbGFzcz0iYXBwLWNvbnRhaW5lciI+CiAgICAgICAgPGhlYWRlciBjbGFzcz0iYXBwLWhlYWRlciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJhcHAtdGl0bGUiPgogICAgICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgPHBhdGggZD0iTTIgM2g2YTQgNCAwIDAgMSA0IDR2MTRhMyAzIDAgMCAwLTMtM0gyeiI+PC9wYXRoPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAzaC02YTQgNCAwIDAgMC00IDR2MTRhMyAzIDAgMCAxIDMtM2g3eiI+PC9wYXRoPgogICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgVHNWaWV3CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8bmF2IGNsYXNzPSJuYXYtdGFicyI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0ibmF2LXRhYiAke3RoaXMudmlld01vZGUgPT09ICJzMyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdNb2RlKCJzMyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgUzMgU3RvcmFnZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJuYXYtdGFiICR7dGhpcy52aWV3TW9kZSA9PT0gIm1vbmdvIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0Vmlld01vZGUoIm1vbmdvIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBNb25nb0RCCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9Im5hdi10YWIgJHt0aGlzLnZpZXdNb2RlID09PSAic2V0dGluZ3MiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3TW9kZSgic2V0dGluZ3MiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIFNldHRpbmdzCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9uYXY+CiAgICAgICAgPC9oZWFkZXI+CgogICAgICAgIDxtYWluIGNsYXNzPSJhcHAtbWFpbiI+CiAgICAgICAgICAke3RoaXMucmVuZGVyU2lkZWJhcigpfQogICAgICAgICAgJHt0aGlzLnJlbmRlckNvbnRlbnQoKX0KICAgICAgICA8L21haW4+CiAgICAgIDwvZGl2PgogICAgICAke3RoaXMucmVuZGVyQ3JlYXRlQnVja2V0RGlhbG9nKCl9CiAgICAgICR7dGhpcy5yZW5kZXJDcmVhdGVDb2xsZWN0aW9uRGlhbG9nKCl9CiAgICAgICR7dGhpcy5yZW5kZXJDcmVhdGVEYXRhYmFzZURpYWxvZygpfQogICAgICAke3RoaXMucmVuZGVyUzNDcmVhdGVEaWFsb2coKX0KICAgIGA7CiAgfQogIHJlbmRlckNyZWF0ZUJ1Y2tldERpYWxvZygpIHsKICAgIGlmICghdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nKSByZXR1cm4gIiI7CiAgICByZXR1cm4gaHRtbDhgCiAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1vdmVybGF5IiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVCdWNrZXREaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5DcmVhdGUgTmV3IEJ1Y2tldDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJCdWNrZXQgbmFtZSIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5uZXdCdWNrZXROYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLm5ld0J1Y2tldE5hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5jcmVhdGVCdWNrZXQoKX0KICAgICAgICAgIC8+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jYW5jZWwiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5uZXdCdWNrZXROYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZUJ1Y2tldCgpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgQ3JlYXRlCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ3JlYXRlQ29sbGVjdGlvbkRpYWxvZygpIHsKICAgIGlmICghdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZykgcmV0dXJuICIiOwogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPkNyZWF0ZSBDb2xsZWN0aW9uIGluICR7dGhpcy5zZWxlY3RlZERhdGFiYXNlfTwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSJDb2xsZWN0aW9uIG5hbWUiCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMubmV3Q29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMubmV3Q29sbGVjdGlvbk5hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5jcmVhdGVDb2xsZWN0aW9uKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVDb2xsZWN0aW9uRGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLm5ld0NvbGxlY3Rpb25OYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmNyZWF0ZUNvbGxlY3Rpb24oKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlckNyZWF0ZURhdGFiYXNlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZykgcmV0dXJuICIiOwogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGF0YWJhc2VEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5DcmVhdGUgTmV3IERhdGFiYXNlPC9kaXY+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkRhdGFiYXNlIG5hbWUiCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMubmV3RGF0YWJhc2VOYW1lfQogICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLm5ld0RhdGFiYXNlTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmNyZWF0ZURhdGFiYXNlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICAgICAgICBDYW5jZWwKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNyZWF0ZSIKICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHshdGhpcy5uZXdEYXRhYmFzZU5hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuY3JlYXRlRGF0YWJhc2UoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlclMzQ3JlYXRlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dTM0NyZWF0ZURpYWxvZykgcmV0dXJuICIiOwogICAgY29uc3QgaXNGb2xkZXIgPSB0aGlzLnMzQ3JlYXRlRGlhbG9nVHlwZSA9PT0gImZvbGRlciI7CiAgICBjb25zdCB0aXRsZSA9IGlzRm9sZGVyID8gIkNyZWF0ZSBOZXcgRm9sZGVyIiA6ICJDcmVhdGUgTmV3IEZpbGUiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSBpc0ZvbGRlciA/ICJmb2xkZXItbmFtZSBvciBwYXRoL3RvL2ZvbGRlciIgOiAiZmlsZW5hbWUudHh0IG9yIHBhdGgvdG8vZmlsZS50eHQiOwogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93UzNDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj4ke3RpdGxlfTwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWxvY2F0aW9uIj4KICAgICAgICAgICAgTG9jYXRpb246ICR7dGhpcy5zM0NyZWF0ZURpYWxvZ0J1Y2tldH0vCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfQogICAgICAgICAgICAudmFsdWU9JHt0aGlzLnMzQ3JlYXRlRGlhbG9nTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5zM0NyZWF0ZURpYWxvZ05hbWUgPSBlMTEudGFyZ2V0LnZhbHVlfQogICAgICAgICAgICBAa2V5ZG93bj0keyhlMTEpID0+IGUxMS5rZXkgPT09ICJFbnRlciIgJiYgdGhpcy5oYW5kbGVTM0NyZWF0ZSgpfQogICAgICAgICAgLz4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1oaW50Ij4KICAgICAgICAgICAgVXNlICIvIiB0byBjcmVhdGUgbmVzdGVkICR7aXNGb2xkZXIgPyAiZm9sZGVycyIgOiAicGF0aCJ9IChlLmcuLCAke2lzRm9sZGVyID8gInBhcmVudC9jaGlsZCIgOiAiZm9sZGVyL2ZpbGUudHh0In0pCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1hY3Rpb25zIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNhbmNlbCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93UzNDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuczNDcmVhdGVEaWFsb2dOYW1lLnRyaW0oKX0KICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLmhhbmRsZVMzQ3JlYXRlKCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDcmVhdGUKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJTaWRlYmFyKCkgewogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJzMyIpIHsKICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgIDxhc2lkZSBjbGFzcz0ic2lkZWJhciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+QnVja2V0czwvZGl2PgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3JlYXRlLWJ0biIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gdHJ1ZX0+CiAgICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxsaW5lIHgxPSIxMiIgeTE9IjUiIHgyPSIxMiIgeTI9IjE5Ij48L2xpbmU+CiAgICAgICAgICAgICAgPGxpbmUgeDE9IjUiIHkxPSIxMiIgeDI9IjE5IiB5Mj0iMTIiPjwvbGluZT4KICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgIE5ldyBCdWNrZXQKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1saXN0Ij4KICAgICAgICAgICAgJHt0aGlzLmJ1Y2tldHMubGVuZ3RoID09PSAwID8gaHRtbDhgPGRpdiBjbGFzcz0ic2lkZWJhci1pdGVtIiBzdHlsZT0iY29sb3I6ICM2NjY7IGN1cnNvcjogZGVmYXVsdDsiPk5vIGJ1Y2tldHMgZm91bmQ8L2Rpdj5gIDogdGhpcy5idWNrZXRzLm1hcCgKICAgICAgICAoYnVja2V0KSA9PiBodG1sOGAKICAgICAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgICAgICBjbGFzcz0ic2lkZWJhci1pdGVtICR7YnVja2V0ID09PSB0aGlzLnNlbGVjdGVkQnVja2V0ID8gInNlbGVjdGVkIiA6ICIifSIKICAgICAgICAgICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0QnVja2V0KGJ1Y2tldCl9CiAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUJ1Y2tldENvbnRleHRNZW51KGUxMSwgYnVja2V0KX0KICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0ic2lkZWJhci1pdGVtLW5hbWUiPiR7YnVja2V0fTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgICApfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hc2lkZT4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLnZpZXdNb2RlID09PSAibW9uZ28iKSB7CiAgICAgIHJldHVybiBodG1sOGAKICAgICAgICA8YXNpZGUgY2xhc3M9InNpZGViYXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1oZWFkZXIiPkRhdGFiYXNlcyAmIENvbGxlY3Rpb25zPC9kaXY+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJjcmVhdGUtYnRuIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEYXRhYmFzZURpYWxvZyA9IHRydWV9PgogICAgICAgICAgICA8c3ZnIHdpZHRoPSIxNCIgaGVpZ2h0PSIxNCIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICA8bGluZSB4MT0iMTIiIHkxPSI1IiB4Mj0iMTIiIHkyPSIxOSI+PC9saW5lPgogICAgICAgICAgICAgIDxsaW5lIHgxPSI1IiB5MT0iMTIiIHgyPSIxOSIgeTI9IjEyIj48L2xpbmU+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICBOZXcgRGF0YWJhc2UKICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1saXN0Ij4KICAgICAgICAgICAgJHt0aGlzLmRhdGFiYXNlcy5sZW5ndGggPT09IDAgPyBodG1sOGA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iIHN0eWxlPSJjb2xvcjogIzY2NjsgY3Vyc29yOiBkZWZhdWx0OyI+Tm8gZGF0YWJhc2VzIGZvdW5kPC9kaXY+YCA6IHRoaXMuZGF0YWJhc2VzLm1hcCgoZGIpID0+IHRoaXMucmVuZGVyRGF0YWJhc2VHcm91cChkYikpfQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9hc2lkZT4KICAgICAgYDsKICAgIH0KICAgIHJldHVybiBodG1sOGAKICAgICAgPGFzaWRlIGNsYXNzPSJzaWRlYmFyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWhlYWRlciI+U2V0dGluZ3M8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWxpc3QiPgogICAgICAgICAgPGRpdiBjbGFzcz0ic2lkZWJhci1pdGVtIj5Db25uZWN0aW9uPC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJzaWRlYmFyLWl0ZW0iPkRpc3BsYXk8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9hc2lkZT4KICAgIGA7CiAgfQogIHJlbmRlckRhdGFiYXNlR3JvdXAoZGIpIHsKICAgIHJldHVybiBodG1sOGAKICAgICAgPGRpdiBjbGFzcz0iZGItZ3JvdXAiPgogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJkYi1ncm91cC1oZWFkZXIgJHt0aGlzLnNlbGVjdGVkRGF0YWJhc2UgPT09IGRiLm5hbWUgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3REYXRhYmFzZShkYi5uYW1lKX0KICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlRGF0YWJhc2VDb250ZXh0TWVudShlMTEsIGRiLm5hbWUpfQogICAgICAgID4KICAgICAgICAgIDxzdmcgd2lkdGg9IjE0IiBoZWlnaHQ9IjE0IiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICA8ZWxsaXBzZSBjeD0iMTIiIGN5PSI1IiByeD0iOSIgcnk9IjMiPjwvZWxsaXBzZT4KICAgICAgICAgICAgPHBhdGggZD0iTTIxIDEyYzAgMS42Ni00IDMtOSAzcy05LTEuMzQtOS0zIj48L3BhdGg+CiAgICAgICAgICAgIDxwYXRoIGQ9Ik0zIDV2MTRjMCAxLjY2IDQgMyA5IDNzOS0xLjM0IDktM1Y1Ij48L3BhdGg+CiAgICAgICAgICA8L3N2Zz4KICAgICAgICAgIDxzcGFuIHN0eWxlPSJmbGV4OiAxOyI+JHtkYi5uYW1lfTwvc3Bhbj4KICAgICAgICA8L2Rpdj4KICAgICAgICAke3RoaXMuc2VsZWN0ZWREYXRhYmFzZSA9PT0gZGIubmFtZSA/IHRoaXMucmVuZGVyQ29sbGVjdGlvbnNMaXN0KGRiLm5hbWUpIDogIiJ9CiAgICAgIDwvZGl2PgogICAgYDsKICB9CiAgcmVuZGVyQ29sbGVjdGlvbnNMaXN0KGRiTmFtZSkgewogICAgcmV0dXJuIGh0bWw4YAogICAgICA8dHN2aWV3LW1vbmdvLWNvbGxlY3Rpb25zCiAgICAgICAgLmRhdGFiYXNlTmFtZT0ke2RiTmFtZX0KICAgICAgICAuc2VsZWN0ZWRDb2xsZWN0aW9uPSR7dGhpcy5zZWxlY3RlZENvbGxlY3Rpb259CiAgICAgICAgQGNvbGxlY3Rpb24tc2VsZWN0ZWQ9JHsoZTExKSA9PiB0aGlzLnNlbGVjdENvbGxlY3Rpb24oZTExLmRldGFpbCl9CiAgICAgICAgQGNvbGxlY3Rpb24tZGVsZXRlZD0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29sbGVjdGlvbkRlbGV0ZWQoZTExKX0KICAgICAgPjwvdHN2aWV3LW1vbmdvLWNvbGxlY3Rpb25zPgogICAgYDsKICB9CiAgaGFuZGxlQ29sbGVjdGlvbkRlbGV0ZWQoZTExKSB7CiAgICBjb25zdCB7IGNvbGxlY3Rpb25OYW1lIH0gPSBlMTEuZGV0YWlsOwogICAgaWYgKHRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID09PSBjb2xsZWN0aW9uTmFtZSkgewogICAgICB0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbiA9ICIiOwogICAgfQogIH0KICByZW5kZXJDb250ZW50KCkgewogICAgaWYgKHRoaXMudmlld01vZGUgPT09ICJzMyIpIHsKICAgICAgaWYgKCF0aGlzLnNlbGVjdGVkQnVja2V0KSB7CiAgICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgIDxwYXRoIGQ9Ik0yMiAxOWEyIDIgMCAwIDEtMiAySDRhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJoNWwyIDNoOWEyIDIgMCAwIDEgMiAyeiI+PC9wYXRoPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxwPlNlbGVjdCBhIGJ1Y2tldCB0byBicm93c2U8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgIDx0c3ZpZXctczMtYnJvd3NlciAuYnVja2V0TmFtZT0ke3RoaXMuc2VsZWN0ZWRCdWNrZXR9PjwvdHN2aWV3LXMzLWJyb3dzZXI+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy52aWV3TW9kZSA9PT0gIm1vbmdvIikgewogICAgICBpZiAoIXRoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uKSB7CiAgICAgICAgcmV0dXJuIGh0bWw4YAogICAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgICAgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPgogICAgICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgIDxlbGxpcHNlIGN4PSIxMiIgY3k9IjUiIHJ4PSI5IiByeT0iMyI+PC9lbGxpcHNlPgogICAgICAgICAgICAgICAgPHBhdGggZD0iTTIxIDEyYzAgMS42Ni00IDMtOSAzcy05LTEuMzQtOS0zIj48L3BhdGg+CiAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMyA1djE0YzAgMS42NiA0IDMgOSAzczktMS4zNCA5LTNWNSI+PC9wYXRoPgogICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgIDxwPlNlbGVjdCBhIGNvbGxlY3Rpb24gdG8gdmlldyBkb2N1bWVudHM8L3A+CiAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgYDsKICAgICAgfQogICAgICByZXR1cm4gaHRtbDhgCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudC1hcmVhIj4KICAgICAgICAgIDx0c3ZpZXctbW9uZ28tYnJvd3NlcgogICAgICAgICAgICAuZGF0YWJhc2VOYW1lPSR7dGhpcy5zZWxlY3RlZERhdGFiYXNlfQogICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLnNlbGVjdGVkQ29sbGVjdGlvbn0KICAgICAgICAgID48L3Rzdmlldy1tb25nby1icm93c2VyPgogICAgICAgIDwvZGl2PgogICAgICBgOwogICAgfQogICAgcmV0dXJuIGh0bWw4YAogICAgICA8ZGl2IGNsYXNzPSJjb250ZW50LWFyZWEiPgogICAgICAgIDxoMj5TZXR0aW5nczwvaDI+CiAgICAgICAgPHA+Q29uZmlndXJhdGlvbiBvcHRpb25zIGNvbWluZyBzb29uLjwvcD4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNCk7Cl92aWV3TW9kZSA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEJ1Y2tldCA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZERhdGFiYXNlID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbiA9IG5ldyBXZWFrTWFwKCk7Cl9idWNrZXRzID0gbmV3IFdlYWtNYXAoKTsKX2RhdGFiYXNlcyA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93Q3JlYXRlQnVja2V0RGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0J1Y2tldE5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfbmV3Q29sbGVjdGlvbk5hbWUgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nID0gbmV3IFdlYWtNYXAoKTsKX25ld0RhdGFiYXNlTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaG93UzNDcmVhdGVEaWFsb2cgPSBuZXcgV2Vha01hcCgpOwpfczNDcmVhdGVEaWFsb2dUeXBlID0gbmV3IFdlYWtNYXAoKTsKX3MzQ3JlYXRlRGlhbG9nQnVja2V0ID0gbmV3IFdlYWtNYXAoKTsKX3MzQ3JlYXRlRGlhbG9nTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAidmlld01vZGUiLCBfdmlld01vZGVfZGVjLCBUc3ZpZXdBcHAsIF92aWV3TW9kZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRCdWNrZXQiLCBfc2VsZWN0ZWRCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zZWxlY3RlZEJ1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWREYXRhYmFzZSIsIF9zZWxlY3RlZERhdGFiYXNlX2RlYywgVHN2aWV3QXBwLCBfc2VsZWN0ZWREYXRhYmFzZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMsIFRzdmlld0FwcCwgX3NlbGVjdGVkQ29sbGVjdGlvbik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiYnVja2V0cyIsIF9idWNrZXRzX2RlYywgVHN2aWV3QXBwLCBfYnVja2V0cyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiZGF0YWJhc2VzIiwgX2RhdGFiYXNlc19kZWMsIFRzdmlld0FwcCwgX2RhdGFiYXNlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyIsIF9zaG93Q3JlYXRlQnVja2V0RGlhbG9nX2RlYywgVHN2aWV3QXBwLCBfc2hvd0NyZWF0ZUJ1Y2tldERpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3QnVja2V0TmFtZSIsIF9uZXdCdWNrZXROYW1lX2RlYywgVHN2aWV3QXBwLCBfbmV3QnVja2V0TmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2ciLCBfc2hvd0NyZWF0ZUNvbGxlY3Rpb25EaWFsb2dfZGVjLCBUc3ZpZXdBcHAsIF9zaG93Q3JlYXRlQ29sbGVjdGlvbkRpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3Q29sbGVjdGlvbk5hbWUiLCBfbmV3Q29sbGVjdGlvbk5hbWVfZGVjLCBUc3ZpZXdBcHAsIF9uZXdDb2xsZWN0aW9uTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd0NyZWF0ZURhdGFiYXNlRGlhbG9nIiwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dDcmVhdGVEYXRhYmFzZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAibmV3RGF0YWJhc2VOYW1lIiwgX25ld0RhdGFiYXNlTmFtZV9kZWMsIFRzdmlld0FwcCwgX25ld0RhdGFiYXNlTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAic2hvd1MzQ3JlYXRlRGlhbG9nIiwgX3Nob3dTM0NyZWF0ZURpYWxvZ19kZWMsIFRzdmlld0FwcCwgX3Nob3dTM0NyZWF0ZURpYWxvZyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dUeXBlIiwgX3MzQ3JlYXRlRGlhbG9nVHlwZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nVHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dCdWNrZXQiLCBfczNDcmVhdGVEaWFsb2dCdWNrZXRfZGVjLCBUc3ZpZXdBcHAsIF9zM0NyZWF0ZURpYWxvZ0J1Y2tldCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCA0LCAiczNDcmVhdGVEaWFsb2dOYW1lIiwgX3MzQ3JlYXRlRGlhbG9nTmFtZV9kZWMsIFRzdmlld0FwcCwgX3MzQ3JlYXRlRGlhbG9nTmFtZSk7ClRzdmlld0FwcCA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0LCAwLCAiVHN2aWV3QXBwIiwgX1Rzdmlld0FwcF9kZWNvcmF0b3JzLCBUc3ZpZXdBcHApOwpfX3B1YmxpY0ZpZWxkKFRzdmlld0FwcCwgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyMy5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczNgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHZhcigtLXRzdmlldy1iZy1wcmltYXJ5LCAjMWExYTFhKTsKICAgICAgICBjb2xvcjogI2VlZTsKICAgICAgICBmb250LWZhbWlseTogLWFwcGxlLXN5c3RlbSwgQmxpbmtNYWNTeXN0ZW1Gb250LCAnU2Vnb2UgVUknLCBSb2JvdG8sIHNhbnMtc2VyaWY7CiAgICAgIH0KCiAgICAgIC5hcHAtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtcm93czogNDhweCAxZnI7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuYXBwLWhlYWRlciB7CiAgICAgICAgYmFja2dyb3VuZDogIzE0MTQxNDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMCAxNnB4OwogICAgICAgIGdhcDogMjRweDsKICAgICAgfQoKICAgICAgLmFwcC10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYXBwLXRpdGxlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDI0cHg7CiAgICAgICAgaGVpZ2h0OiAyNHB4OwogICAgICB9CgogICAgICAubmF2LXRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IG5vbmU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5uYXYtdGFiOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAubmF2LXRhYi5hY3RpdmUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmFwcC1tYWluIHsKICAgICAgICBkaXNwbGF5OiBncmlkOwogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMjQwcHggMWZyOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgIGJvcmRlci1yaWdodDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgb3ZlcmZsb3cteTogYXV0bzsKICAgICAgfQoKICAgICAgLnNpZGViYXItaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4IDE2cHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLnNpZGViYXItbGlzdCB7CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5zaWRlYmFyLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbSAuY291bnQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgcGFkZGluZzogMnB4IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMHB4OwogICAgICB9CgogICAgICAuY29udGVudC1hcmVhIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDY0cHg7CiAgICAgICAgaGVpZ2h0OiA2NHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAuZGItZ3JvdXAgewogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgfQoKICAgICAgLmRiLWdyb3VwLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICM5OTk7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmRiLWdyb3VwLWhlYWRlcjpob3ZlciB7CiAgICAgICAgY29sb3I6ICNjY2M7CiAgICAgIH0KCiAgICAgIC5kYi1ncm91cC1jb2xsZWN0aW9ucyB7CiAgICAgICAgcGFkZGluZy1sZWZ0OiAxMnB4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pdGVtIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pdGVtOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pdGVtLnNlbGVjdGVkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0biB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIG1hcmdpbjogOHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXI6IDFweCBkYXNoZWQgcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuY3JlYXRlLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgICBib3JkZXItY29sb3I6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4zKTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC43KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmRpYWxvZyB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWluLXdpZHRoOiA0MDBweDsKICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTQxNDE0OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIGJveC1zaXppbmc6IGJvcmRlci1ib3g7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQ6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWxvY2F0aW9uIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICB9CgogICAgICAuZGlhbG9nLWhpbnQgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICAgIG1hcmdpbi10b3A6IC04cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNDA0MDQwOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNTA1MDUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1kZWxldGUgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjM5LCA2OCwgNjgsIDAuMik7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tZGVsZXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuc2lkZWJhci1pdGVtLWNvbnRlbnQgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG1pbi13aWR0aDogMDsKICAgICAgfQoKICAgICAgLnNpZGViYXItaXRlbS1uYW1lIHsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0LCAxLCBUc3ZpZXdBcHApOwoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1icm93c2VyLnRzCnZhciBfcmVmcmVzaEtleV9kZWMsIF9zZWxlY3RlZEtleV9kZWMsIF9jdXJyZW50UHJlZml4X2RlYywgX3ZpZXdUeXBlX2RlYywgX2J1Y2tldE5hbWVfZGVjLCBfYTUsIF9Uc3ZpZXdTM0Jyb3dzZXJfZGVjb3JhdG9ycywgX2luaXQyLCBfYnVja2V0TmFtZSwgX3ZpZXdUeXBlLCBfY3VycmVudFByZWZpeCwgX3NlbGVjdGVkS2V5LCBfcmVmcmVzaEtleTsKdmFyIHsgaHRtbDogaHRtbDksIGNzczogY3NzNCwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjQsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQzLCBwcm9wZXJ0eTogcHJvcGVydHkyLCBzdGF0ZTogc3RhdGUzLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ0IH0gPSBwbHVnaW5zX2V4cG9ydHM1OwpfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDMoInRzdmlldy1zMy1icm93c2VyIildOwp2YXIgVHN2aWV3UzNCcm93c2VyID0gY2xhc3MgZXh0ZW5kcyAoX2E1ID0gRGVlc0VsZW1lbnQ0LCBfYnVja2V0TmFtZV9kZWMgPSBbcHJvcGVydHkyKHsgdHlwZTogU3RyaW5nIH0pXSwgX3ZpZXdUeXBlX2RlYyA9IFtzdGF0ZTMoKV0sIF9jdXJyZW50UHJlZml4X2RlYyA9IFtzdGF0ZTMoKV0sIF9zZWxlY3RlZEtleV9kZWMgPSBbc3RhdGUzKCldLCBfcmVmcmVzaEtleV9kZWMgPSBbc3RhdGUzKCldLCBfYTUpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3ZpZXdUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDIsIDEyLCB0aGlzLCAiY29sdW1ucyIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2N1cnJlbnRQcmVmaXgsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZEtleSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyMCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MiwgMjQsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAyNywgdGhpcyk7CiAgfQogIHNldFZpZXdUeXBlKHR5cGU1KSB7CiAgICB0aGlzLnZpZXdUeXBlID0gdHlwZTU7CiAgfQogIG5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCkgewogICAgdGhpcy5jdXJyZW50UHJlZml4ID0gcHJlZml4NDsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICB9CiAgaGFuZGxlS2V5U2VsZWN0ZWQoZTExKSB7CiAgICB0aGlzLnNlbGVjdGVkS2V5ID0gZTExLmRldGFpbC5rZXk7CiAgfQogIGhhbmRsZU5hdmlnYXRlKGUxMSkgewogICAgdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KGUxMS5kZXRhaWwucHJlZml4KTsKICB9CiAgaGFuZGxlT2JqZWN0RGVsZXRlZChlMTEpIHsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSAiIjsKICAgIHRoaXMucmVmcmVzaEtleSsrOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikpIHsKICAgICAgdGhpcy5zZWxlY3RlZEtleSA9ICIiOwogICAgICB0aGlzLmN1cnJlbnRQcmVmaXggPSAiIjsKICAgIH0KICB9CiAgcmVuZGVyKCkgewogICAgY29uc3QgYnJlYWRjcnVtYlBhcnRzID0gdGhpcy5jdXJyZW50UHJlZml4ID8gdGhpcy5jdXJyZW50UHJlZml4LnNwbGl0KCIvIikuZmlsdGVyKEJvb2xlYW4pIDogW107CiAgICByZXR1cm4gaHRtbDlgCiAgICAgIDxkaXYgY2xhc3M9ImJyb3dzZXItY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJ0b29sYmFyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImJyZWFkY3J1bWIiPgogICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgIGNsYXNzPSJicmVhZGNydW1iLWl0ZW0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5uYXZpZ2F0ZVRvUHJlZml4KCIiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICA8L3NwYW4+CiAgICAgICAgICAgICR7YnJlYWRjcnVtYlBhcnRzLm1hcCgocGFydCwgaW5kZXgyKSA9PiB7CiAgICAgIGNvbnN0IHByZWZpeDQgPSBicmVhZGNydW1iUGFydHMuc2xpY2UoMCwgaW5kZXgyICsgMSkuam9pbigiLyIpICsgIi8iOwogICAgICByZXR1cm4gaHRtbDlgCiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iYnJlYWRjcnVtYi1zZXBhcmF0b3IiPi88L3NwYW4+CiAgICAgICAgICAgICAgICA8c3BhbgogICAgICAgICAgICAgICAgICBjbGFzcz0iYnJlYWRjcnVtYi1pdGVtIgogICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLm5hdmlnYXRlVG9QcmVmaXgocHJlZml4NCl9CiAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICR7cGFydH0KICAgICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICBgOwogICAgfSl9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJ2aWV3LXRvZ2dsZSI+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idmlldy1idG4gJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldFZpZXdUeXBlKCJjb2x1bW5zIil9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDb2x1bW5zCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InZpZXctYnRuICR7dGhpcy52aWV3VHlwZSA9PT0gImtleXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRWaWV3VHlwZSgia2V5cyIpfQogICAgICAgICAgICA+CiAgICAgICAgICAgICAgTGlzdAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJjb250ZW50ICR7dGhpcy5zZWxlY3RlZEtleSA/ICJoYXMtcHJldmlldyIgOiAiIn0iPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi12aWV3Ij4KICAgICAgICAgICAgJHt0aGlzLnZpZXdUeXBlID09PSAiY29sdW1ucyIgPyBodG1sOWAKICAgICAgICAgICAgICAgICAgPHRzdmlldy1zMy1jb2x1bW5zCiAgICAgICAgICAgICAgICAgICAgLmJ1Y2tldE5hbWU9JHt0aGlzLmJ1Y2tldE5hbWV9CiAgICAgICAgICAgICAgICAgICAgLmN1cnJlbnRQcmVmaXg9JHt0aGlzLmN1cnJlbnRQcmVmaXh9CiAgICAgICAgICAgICAgICAgICAgLnJlZnJlc2hLZXk9JHt0aGlzLnJlZnJlc2hLZXl9CiAgICAgICAgICAgICAgICAgICAgQGtleS1zZWxlY3RlZD0ke3RoaXMuaGFuZGxlS2V5U2VsZWN0ZWR9CiAgICAgICAgICAgICAgICAgICAgQG5hdmlnYXRlPSR7dGhpcy5oYW5kbGVOYXZpZ2F0ZX0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLWNvbHVtbnM+CiAgICAgICAgICAgICAgICBgIDogaHRtbDlgCiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMta2V5cwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5jdXJyZW50UHJlZml4PSR7dGhpcy5jdXJyZW50UHJlZml4fQogICAgICAgICAgICAgICAgICAgIC5yZWZyZXNoS2V5PSR7dGhpcy5yZWZyZXNoS2V5fQogICAgICAgICAgICAgICAgICAgIEBrZXktc2VsZWN0ZWQ9JHt0aGlzLmhhbmRsZUtleVNlbGVjdGVkfQogICAgICAgICAgICAgICAgICAgIEBuYXZpZ2F0ZT0ke3RoaXMuaGFuZGxlTmF2aWdhdGV9CiAgICAgICAgICAgICAgICAgID48L3Rzdmlldy1zMy1rZXlzPgogICAgICAgICAgICAgICAgYH0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgICR7dGhpcy5zZWxlY3RlZEtleSA/IGh0bWw5YAogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1wYW5lbCI+CiAgICAgICAgICAgICAgICAgIDx0c3ZpZXctczMtcHJldmlldwogICAgICAgICAgICAgICAgICAgIC5idWNrZXROYW1lPSR7dGhpcy5idWNrZXROYW1lfQogICAgICAgICAgICAgICAgICAgIC5vYmplY3RLZXk9JHt0aGlzLnNlbGVjdGVkS2V5fQogICAgICAgICAgICAgICAgICAgIEBvYmplY3QtZGVsZXRlZD0ke3RoaXMuaGFuZGxlT2JqZWN0RGVsZXRlZH0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LXMzLXByZXZpZXc+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICBgIDogIiJ9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0MiA9IF9fZGVjb3JhdG9yU3RhcnQoX2E1KTsKX2J1Y2tldE5hbWUgPSBuZXcgV2Vha01hcCgpOwpfdmlld1R5cGUgPSBuZXcgV2Vha01hcCgpOwpfY3VycmVudFByZWZpeCA9IG5ldyBXZWFrTWFwKCk7Cl9zZWxlY3RlZEtleSA9IG5ldyBXZWFrTWFwKCk7Cl9yZWZyZXNoS2V5ID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAiYnVja2V0TmFtZSIsIF9idWNrZXROYW1lX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfYnVja2V0TmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInZpZXdUeXBlIiwgX3ZpZXdUeXBlX2RlYywgVHN2aWV3UzNCcm93c2VyLCBfdmlld1R5cGUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDQsICJjdXJyZW50UHJlZml4IiwgX2N1cnJlbnRQcmVmaXhfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9jdXJyZW50UHJlZml4KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQyLCA0LCAic2VsZWN0ZWRLZXkiLCBfc2VsZWN0ZWRLZXlfZGVjLCBUc3ZpZXdTM0Jyb3dzZXIsIF9zZWxlY3RlZEtleSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MiwgNCwgInJlZnJlc2hLZXkiLCBfcmVmcmVzaEtleV9kZWMsIFRzdmlld1MzQnJvd3NlciwgX3JlZnJlc2hLZXkpOwpUc3ZpZXdTM0Jyb3dzZXIgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDIsIDAsICJUc3ZpZXdTM0Jyb3dzZXIiLCBfVHN2aWV3UzNCcm93c2VyX2RlY29yYXRvcnMsIFRzdmlld1MzQnJvd3Nlcik7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNCcm93c2VyLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI0LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmJyb3dzZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXItcmFkaXVzOiA4cHg7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjb2xvcjogIzk5OTsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItaXRlbSB7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHBhZGRpbmc6IDRweCA4cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xNXM7CiAgICAgIH0KCiAgICAgIC5icmVhZGNydW1iLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmJyZWFkY3J1bWItc2VwYXJhdG9yIHsKICAgICAgICBjb2xvcjogIzU1NTsKICAgICAgfQoKICAgICAgLnZpZXctdG9nZ2xlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAudmlldy1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAudmlldy1idG46aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLnZpZXctYnRuLmFjdGl2ZSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmNvbnRlbnQgewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICBnYXA6IDE2cHg7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogMWZyIDM1MHB4OwogICAgICB9CgogICAgICAubWFpbi12aWV3IHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAucHJldmlldy1wYW5lbCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICBAbWVkaWEgKG1heC13aWR0aDogMTAyNHB4KSB7CiAgICAgICAgLmNvbnRlbnQsCiAgICAgICAgLmNvbnRlbnQuaGFzLXByZXZpZXcgewogICAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnI7CiAgICAgICAgfQoKICAgICAgICAucHJldmlldy1wYW5lbCB7CiAgICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICAgIH0KICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQyLCAxLCBUc3ZpZXdTM0Jyb3dzZXIpOwoKLy8gdHNfd2ViL3V0aWxpdGllcy9mb3JtYXR0ZXJzLnRzCmZ1bmN0aW9uIGZvcm1hdFNpemUoYnl0ZXMpIHsKICBpZiAoYnl0ZXMgPT09IHZvaWQgMCB8fCBieXRlcyA9PT0gbnVsbCkgcmV0dXJuICItIjsKICBpZiAoYnl0ZXMgPT09IDApIHJldHVybiAiMCBCIjsKICBjb25zdCB1bml0czIgPSBbIkIiLCAiS0IiLCAiTUIiLCAiR0IiLCAiVEIiXTsKICBsZXQgc2l6ZSA9IGJ5dGVzOwogIGxldCB1bml0SW5kZXggPSAwOwogIHdoaWxlIChzaXplID49IDEwMjQgJiYgdW5pdEluZGV4IDwgdW5pdHMyLmxlbmd0aCAtIDEpIHsKICAgIHNpemUgLz0gMTAyNDsKICAgIHVuaXRJbmRleCsrOwogIH0KICByZXR1cm4gYCR7c2l6ZS50b0ZpeGVkKHVuaXRJbmRleCA+IDAgPyAxIDogMCl9ICR7dW5pdHMyW3VuaXRJbmRleF19YDsKfQpmdW5jdGlvbiBmb3JtYXRDb3VudChjb3VudDIpIHsKICBpZiAoY291bnQyID09PSB2b2lkIDAgfHwgY291bnQyID09PSBudWxsKSByZXR1cm4gIiI7CiAgaWYgKGNvdW50MiA+PSAxZTYpIHJldHVybiBgJHsoY291bnQyIC8gMWU2KS50b0ZpeGVkKDEpfU1gOwogIGlmIChjb3VudDIgPj0gMWUzKSByZXR1cm4gYCR7KGNvdW50MiAvIDFlMykudG9GaXhlZCgxKX1LYDsKICByZXR1cm4gY291bnQyLnRvU3RyaW5nKCk7Cn0KZnVuY3Rpb24gZ2V0RmlsZU5hbWUocGF0aDIpIHsKICBjb25zdCBwYXJ0cyA9IHBhdGgyLnJlcGxhY2UoL1wvJC8sICIiKS5zcGxpdCgiLyIpOwogIHJldHVybiBwYXJ0c1twYXJ0cy5sZW5ndGggLSAxXSB8fCBwYXRoMjsKfQoKLy8gdHNfd2ViL2VsZW1lbnRzL3Rzdmlldy1zMy1jb2x1bW5zLnRzCnZhciBfY3JlYXRlRGlhbG9nTmFtZV9kZWMsIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYywgX2xvYWRpbmdfZGVjLCBfY29sdW1uc19kZWMsIF9yZWZyZXNoS2V5X2RlYzIsIF9jdXJyZW50UHJlZml4X2RlYzIsIF9idWNrZXROYW1lX2RlYzIsIF9hNiwgX1Rzdmlld1MzQ29sdW1uc19kZWNvcmF0b3JzLCBfaW5pdDMsIF9idWNrZXROYW1lMiwgX2N1cnJlbnRQcmVmaXgyLCBfcmVmcmVzaEtleTIsIF9jb2x1bW5zLCBfbG9hZGluZywgX3Nob3dDcmVhdGVEaWFsb2csIF9jcmVhdGVEaWFsb2dUeXBlLCBfY3JlYXRlRGlhbG9nUHJlZml4LCBfY3JlYXRlRGlhbG9nTmFtZTsKdmFyIHsgaHRtbDogaHRtbDEwLCBjc3M6IGNzczUsIGNzc01hbmFnZXI6IGNzc01hbmFnZXI1LCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50NCwgcHJvcGVydHk6IHByb3BlcnR5Mywgc3RhdGU6IHN0YXRlNCwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50NSB9ID0gcGx1Z2luc19leHBvcnRzNTsKdmFyIHsgRGVlc0NvbnRleHRtZW51OiBEZWVzQ29udGV4dG1lbnUzIH0gPSBkaXN0X3RzX3dlYl9leHBvcnRzMjsKX1Rzdmlld1MzQ29sdW1uc19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ0KCJ0c3ZpZXctczMtY29sdW1ucyIpXTsKdmFyIFRzdmlld1MzQ29sdW1ucyA9IGNsYXNzIGV4dGVuZHMgKF9hNiA9IERlZXNFbGVtZW50NSwgX2J1Y2tldE5hbWVfZGVjMiA9IFtwcm9wZXJ0eTMoeyB0eXBlOiBTdHJpbmcgfSldLCBfY3VycmVudFByZWZpeF9kZWMyID0gW3Byb3BlcnR5Myh7IHR5cGU6IFN0cmluZyB9KV0sIF9yZWZyZXNoS2V5X2RlYzIgPSBbcHJvcGVydHkzKHsgdHlwZTogTnVtYmVyIH0pXSwgX2NvbHVtbnNfZGVjID0gW3N0YXRlNCgpXSwgX2xvYWRpbmdfZGVjID0gW3N0YXRlNCgpXSwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjID0gW3N0YXRlNCgpXSwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjID0gW3N0YXRlNCgpXSwgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMgPSBbc3RhdGU0KCldLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMgPSBbc3RhdGU0KCldLCBfYTYpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2J1Y2tldE5hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jdXJyZW50UHJlZml4MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3JlZnJlc2hLZXkyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDE2LCB0aGlzLCAwKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2x1bW5zLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDIwLCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyNCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3Nob3dDcmVhdGVEaWFsb2csIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMjgsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dUeXBlLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDMyLCB0aGlzLCAiZm9sZGVyIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDM1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY3JlYXRlRGlhbG9nUHJlZml4LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDMsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY3JlYXRlRGlhbG9nTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCA0MCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQzLCA0MywgdGhpcyk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJyZXNpemluZyIsIG51bGwpOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiREVGQVVMVF9DT0xVTU5fV0lEVEgiLCAyNTApOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAiTUlOX0NPTFVNTl9XSURUSCIsIDE1MCk7CiAgICBfX3B1YmxpY0ZpZWxkKHRoaXMsICJNQVhfQ09MVU1OX1dJRFRIIiwgNTAwKTsKICAgIF9fcHVibGljRmllbGQodGhpcywgImhhbmRsZVJlc2l6ZSIsIChlMTEpID0+IHsKICAgICAgaWYgKCF0aGlzLnJlc2l6aW5nKSByZXR1cm47CiAgICAgIGNvbnN0IGRlbHRhID0gZTExLmNsaWVudFggLSB0aGlzLnJlc2l6aW5nLnN0YXJ0WDsKICAgICAgY29uc3QgbmV3V2lkdGggPSBNYXRoLm1pbigKICAgICAgICB0aGlzLk1BWF9DT0xVTU5fV0lEVEgsCiAgICAgICAgTWF0aC5tYXgodGhpcy5NSU5fQ09MVU1OX1dJRFRILCB0aGlzLnJlc2l6aW5nLnN0YXJ0V2lkdGggKyBkZWx0YSkKICAgICAgKTsKICAgICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sLCBpMTEpID0+IHsKICAgICAgICBpZiAoaTExID09PSB0aGlzLnJlc2l6aW5nLmNvbHVtbkluZGV4KSB7CiAgICAgICAgICByZXR1cm4geyAuLi5jb2wsIHdpZHRoOiBuZXdXaWR0aCB9OwogICAgICAgIH0KICAgICAgICByZXR1cm4gY29sOwogICAgICB9KTsKICAgIH0pOwogICAgX19wdWJsaWNGaWVsZCh0aGlzLCAic3RvcFJlc2l6ZSIsICgpID0+IHsKICAgICAgdGhpcy5yZXNpemluZyA9IG51bGw7CiAgICAgIGRvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1vdXNlbW92ZSIsIHRoaXMuaGFuZGxlUmVzaXplKTsKICAgICAgZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibW91c2V1cCIsIHRoaXMuc3RvcFJlc2l6ZSk7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gIiI7CiAgICAgIGRvY3VtZW50LmJvZHkuc3R5bGUudXNlclNlbGVjdCA9ICIiOwogICAgfSk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicmVmcmVzaEtleSIpKSB7CiAgICAgIHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZEluaXRpYWxDb2x1bW4oKSB7CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMuY3VycmVudFByZWZpeCwgIi8iKTsKICAgICAgdGhpcy5jb2x1bW5zID0gWwogICAgICAgIHsKICAgICAgICAgIHByZWZpeDogdGhpcy5jdXJyZW50UHJlZml4LAogICAgICAgICAgb2JqZWN0czogcmVzdWx0Lm9iamVjdHMsCiAgICAgICAgICBwcmVmaXhlczogcmVzdWx0LnByZWZpeGVzLAogICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLAogICAgICAgICAgd2lkdGg6IHRoaXMuREVGQVVMVF9DT0xVTU5fV0lEVEgKICAgICAgICB9CiAgICAgIF07CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3RzOiIsIGVycik7CiAgICAgIHRoaXMuY29sdW1ucyA9IFtdOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGFzeW5jIHNlbGVjdEZvbGRlcihjb2x1bW5JbmRleCwgcHJlZml4NCkgewogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLm1hcCgoY29sLCBpMTEpID0+IHsKICAgICAgaWYgKGkxMSA9PT0gY29sdW1uSW5kZXgpIHsKICAgICAgICByZXR1cm4geyAuLi5jb2wsIHNlbGVjdGVkSXRlbTogcHJlZml4NCB9OwogICAgICB9CiAgICAgIHJldHVybiBjb2w7CiAgICB9KTsKICAgIHRoaXMuY29sdW1ucyA9IHRoaXMuY29sdW1ucy5zbGljZSgwLCBjb2x1bW5JbmRleCArIDEpOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHByZWZpeDQsICIvIik7CiAgICAgIHRoaXMuY29sdW1ucyA9IFsKICAgICAgICAuLi50aGlzLmNvbHVtbnMsCiAgICAgICAgewogICAgICAgICAgcHJlZml4OiBwcmVmaXg0LAogICAgICAgICAgb2JqZWN0czogcmVzdWx0Lm9iamVjdHMsCiAgICAgICAgICBwcmVmaXhlczogcmVzdWx0LnByZWZpeGVzLAogICAgICAgICAgc2VsZWN0ZWRJdGVtOiBudWxsLAogICAgICAgICAgd2lkdGg6IHRoaXMuREVGQVVMVF9DT0xVTU5fV0lEVEgKICAgICAgICB9CiAgICAgIF07CiAgICAgIHRoaXMudXBkYXRlQ29tcGxldGUudGhlbigoKSA9PiB0aGlzLnNjcm9sbFRvRW5kKCkpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZm9sZGVyOiIsIGVycik7CiAgICB9CiAgfQogIHNjcm9sbFRvRW5kKCkgewogICAgdGhpcy5zY3JvbGxMZWZ0ID0gdGhpcy5zY3JvbGxXaWR0aCAtIHRoaXMuY2xpZW50V2lkdGg7CiAgfQogIHN0YXJ0UmVzaXplKGUxMSwgY29sdW1uSW5kZXgpIHsKICAgIGUxMS5wcmV2ZW50RGVmYXVsdCgpOwogICAgdGhpcy5yZXNpemluZyA9IHsKICAgICAgY29sdW1uSW5kZXgsCiAgICAgIHN0YXJ0WDogZTExLmNsaWVudFgsCiAgICAgIHN0YXJ0V2lkdGg6IHRoaXMuY29sdW1uc1tjb2x1bW5JbmRleF0ud2lkdGgKICAgIH07CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW1vdmUiLCB0aGlzLmhhbmRsZVJlc2l6ZSk7CiAgICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCJtb3VzZXVwIiwgdGhpcy5zdG9wUmVzaXplKTsKICAgIGRvY3VtZW50LmJvZHkuc3R5bGUuY3Vyc29yID0gImNvbC1yZXNpemUiOwogICAgZG9jdW1lbnQuYm9keS5zdHlsZS51c2VyU2VsZWN0ID0gIm5vbmUiOwogIH0KICBzZWxlY3RGaWxlKGNvbHVtbkluZGV4LCBrZXkyKSB7CiAgICB0aGlzLmNvbHVtbnMgPSB0aGlzLmNvbHVtbnMubWFwKChjb2wsIGkxMSkgPT4gewogICAgICBpZiAoaTExID09PSBjb2x1bW5JbmRleCkgewogICAgICAgIHJldHVybiB7IC4uLmNvbCwgc2VsZWN0ZWRJdGVtOiBrZXkyIH07CiAgICAgIH0KICAgICAgcmV0dXJuIGNvbDsKICAgIH0pOwogICAgdGhpcy5jb2x1bW5zID0gdGhpcy5jb2x1bW5zLnNsaWNlKDAsIGNvbHVtbkluZGV4ICsgMSk7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgIG5ldyBDdXN0b21FdmVudCgia2V5LXNlbGVjdGVkIiwgewogICAgICAgIGRldGFpbDogeyBrZXk6IGtleTIgfSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBnZXRGaWxlSWNvbihrZXkyKSB7CiAgICBjb25zdCBleHQgPSBrZXkyLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgIiI7CiAgICBjb25zdCBpY29uTWFwID0gewogICAgICBqc29uOiAiTTE0IDJINmEyIDIgMCAwIDAtMiAydjE2YTIgMiAwIDAgMCAyIDJoMTJhMiAyIDAgMCAwIDItMlY4eiIsCiAgICAgIHR4dDogIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiLAogICAgICBwbmc6ICJNNSAzaDE0YTIgMiAwIDAgMSAyIDJ2MTRhMiAyIDAgMCAxLTIgMkg1YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yeiIsCiAgICAgIGpwZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAganBlZzogIk01IDNoMTRhMiAyIDAgMCAxIDIgMnYxNGEyIDIgMCAwIDEtMiAySDVhMiAyIDAgMCAxLTItMlY1YTIgMiAwIDAgMSAyLTJ6IiwKICAgICAgZ2lmOiAiTTUgM2gxNGEyIDIgMCAwIDEgMiAydjE0YTIgMiAwIDAgMS0yIDJINWEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMnoiLAogICAgICBwZGY6ICJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IgogICAgfTsKICAgIHJldHVybiBpY29uTWFwW2V4dF0gfHwgIk0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiOwogIH0KICBoYW5kbGVGb2xkZXJDb250ZXh0TWVudShldmVudCwgY29sdW1uSW5kZXgsIHByZWZpeDQpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnUzLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiT3BlbiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyT3BlbiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdEZvbGRlcihjb2x1bW5JbmRleCwgcHJlZml4NCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChwcmVmaXg0KTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIk5ldyBGb2xkZXIgSW5zaWRlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZm9sZGVyIiwgcHJlZml4NCkKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSBJbnNpZGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZmlsZSIsIHByZWZpeDQpCiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBGb2xkZXIiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGZvbGRlciAiJHtnZXRGaWxlTmFtZShwcmVmaXg0KX0iIGFuZCBhbGwgaXRzIGNvbnRlbnRzP2ApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZVByZWZpeCh0aGlzLmJ1Y2tldE5hbWUsIHByZWZpeDQpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIGhhbmRsZUZpbGVDb250ZXh0TWVudShldmVudCwgY29sdW1uSW5kZXgsIGtleTIpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnUzLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiUHJldmlldyIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIHRoaXMuc2VsZWN0RmlsZShjb2x1bW5JbmRleCwga2V5Mik7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRvd25sb2FkIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpkb3dubG9hZCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB1cmwgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldE9iamVjdFVybCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgY29uc3QgbGluazMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgICAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgICAgICAgbGluazMuZG93bmxvYWQgPSBnZXRGaWxlTmFtZShrZXkyKTsKICAgICAgICAgIGxpbmszLmNsaWNrKCk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChrZXkyKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHsKICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZmlsZSAiJHtnZXRGaWxlTmFtZShrZXkyKX0iP2ApKSB7CiAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZU9iamVjdCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgfQogICAgXSk7CiAgfQogIGhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShldmVudCwgY29sdW1uSW5kZXgpIHsKICAgIGlmIChldmVudC50YXJnZXQgIT09IGV2ZW50LmN1cnJlbnRUYXJnZXQpIHJldHVybjsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBjb25zdCBwcmVmaXg0ID0gdGhpcy5jb2x1bW5zW2NvbHVtbkluZGV4XS5wcmVmaXg7CiAgICBEZWVzQ29udGV4dG1lbnUzLm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZvbGRlciIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZvbGRlciIsIHByZWZpeDQpCiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZpbGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZpbGVQbHVzIiwKICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZmlsZSIsIHByZWZpeDQpCiAgICAgIH0KICAgIF0pOwogIH0KICBvcGVuQ3JlYXRlRGlhbG9nKHR5cGU1LCBwcmVmaXg0KSB7CiAgICB0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPSB0eXBlNTsKICAgIHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ID0gcHJlZml4NDsKICAgIHRoaXMuY3JlYXRlRGlhbG9nTmFtZSA9ICIiOwogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gdHJ1ZTsKICB9CiAgZ2V0Q29udGVudFR5cGUoZXh0KSB7CiAgICBjb25zdCBjb250ZW50VHlwZXMgPSB7CiAgICAgIGpzb246ICJhcHBsaWNhdGlvbi9qc29uIiwKICAgICAgdHh0OiAidGV4dC9wbGFpbiIsCiAgICAgIGh0bWw6ICJ0ZXh0L2h0bWwiLAogICAgICBjc3M6ICJ0ZXh0L2NzcyIsCiAgICAgIGpzOiAiYXBwbGljYXRpb24vamF2YXNjcmlwdCIsCiAgICAgIHRzOiAidGV4dC90eXBlc2NyaXB0IiwKICAgICAgbWQ6ICJ0ZXh0L21hcmtkb3duIiwKICAgICAgeG1sOiAiYXBwbGljYXRpb24veG1sIiwKICAgICAgeWFtbDogInRleHQveWFtbCIsCiAgICAgIHltbDogInRleHQveWFtbCIsCiAgICAgIGNzdjogInRleHQvY3N2IgogICAgfTsKICAgIHJldHVybiBjb250ZW50VHlwZXNbZXh0XSB8fCAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICB9CiAgZ2V0RGVmYXVsdENvbnRlbnQoZXh0KSB7CiAgICBjb25zdCBkZWZhdWx0cyA9IHsKICAgICAganNvbjogIntcbiAgXG59IiwKICAgICAgaHRtbDogIjwhRE9DVFlQRSBodG1sPlxuPGh0bWw+XG48aGVhZD5cbiAgPHRpdGxlPjwvdGl0bGU+XG48L2hlYWQ+XG48Ym9keT5cbiAgXG48L2JvZHk+XG48L2h0bWw+IiwKICAgICAgbWQ6ICIjIFRpdGxlXG5cbiIsCiAgICAgIHR4dDogIiIKICAgIH07CiAgICByZXR1cm4gZGVmYXVsdHNbZXh0XSB8fCAiIjsKICB9CiAgYXN5bmMgaGFuZGxlQ3JlYXRlKCkgewogICAgaWYgKCF0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpKSByZXR1cm47CiAgICBjb25zdCBuYW1lID0gdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKTsKICAgIGxldCBwYXRoMjsKICAgIGlmICh0aGlzLmNyZWF0ZURpYWxvZ1R5cGUgPT09ICJmb2xkZXIiKSB7CiAgICAgIHBhdGgyID0gdGhpcy5jcmVhdGVEaWFsb2dQcmVmaXggKyBuYW1lICsgIi8ua2VlcCI7CiAgICB9IGVsc2UgewogICAgICBwYXRoMiA9IHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ICsgbmFtZTsKICAgIH0KICAgIGNvbnN0IGV4dCA9IG5hbWUuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGNvbnRlbnRUeXBlID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldENvbnRlbnRUeXBlKGV4dCkgOiAiYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtIjsKICAgIGNvbnN0IGNvbnRlbnQzID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZmlsZSIgPyB0aGlzLmdldERlZmF1bHRDb250ZW50KGV4dCkgOiAiIjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLnB1dE9iamVjdCgKICAgICAgdGhpcy5idWNrZXROYW1lLAogICAgICBwYXRoMiwKICAgICAgYnRvYShjb250ZW50MyksCiAgICAgIGNvbnRlbnRUeXBlCiAgICApOwogICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2U7CiAgICAgIGF3YWl0IHRoaXMubG9hZEluaXRpYWxDb2x1bW4oKTsKICAgIH0KICB9CiAgcmVuZGVyQ3JlYXRlRGlhbG9nKCkgewogICAgaWYgKCF0aGlzLnNob3dDcmVhdGVEaWFsb2cpIHJldHVybiAiIjsKICAgIGNvbnN0IGlzRm9sZGVyID0gdGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIjsKICAgIGNvbnN0IHRpdGxlID0gaXNGb2xkZXIgPyAiQ3JlYXRlIE5ldyBGb2xkZXIiIDogIkNyZWF0ZSBOZXcgRmlsZSI7CiAgICBjb25zdCBwbGFjZWhvbGRlciA9IGlzRm9sZGVyID8gImZvbGRlci1uYW1lIG9yIHBhdGgvdG8vZm9sZGVyIiA6ICJmaWxlbmFtZS50eHQgb3IgcGF0aC90by9maWxlLnR4dCI7CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2V9PgogICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZyIgQGNsaWNrPSR7KGUxMSkgPT4gZTExLnN0b3BQcm9wYWdhdGlvbigpfT4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy10aXRsZSI+JHt0aXRsZX08L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1sb2NhdGlvbiI+CiAgICAgICAgICAgIExvY2F0aW9uOiAke3RoaXMuYnVja2V0TmFtZX0vJHt0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeH0KICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGlucHV0CiAgICAgICAgICAgIHR5cGU9InRleHQiCiAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgIHBsYWNlaG9sZGVyPSR7cGxhY2Vob2xkZXJ9CiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuY3JlYXRlRGlhbG9nTmFtZX0KICAgICAgICAgICAgQGlucHV0PSR7KGUxMSkgPT4gdGhpcy5jcmVhdGVEaWFsb2dOYW1lID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgQGtleWRvd249JHsoZTExKSA9PiBlMTEua2V5ID09PSAiRW50ZXIiICYmIHRoaXMuaGFuZGxlQ3JlYXRlKCl9CiAgICAgICAgICAvPgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWhpbnQiPgogICAgICAgICAgICBVc2UgIi8iIHRvIGNyZWF0ZSBuZXN0ZWQgJHtpc0ZvbGRlciA/ICJmb2xkZXJzIiA6ICJwYXRoIn0gKGUuZy4sICR7aXNGb2xkZXIgPyAicGFyZW50L2NoaWxkIiA6ICJmb2xkZXIvZmlsZS50eHQifSkKICAgICAgICAgIDwvZGl2PgogICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLWFjdGlvbnMiPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY2FuY2VsIiBAY2xpY2s9JHsoKSA9PiB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZX0+CiAgICAgICAgICAgICAgQ2FuY2VsCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9ImRpYWxvZy1idG4gZGlhbG9nLWJ0bi1jcmVhdGUiCiAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7IXRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCl9CiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5oYW5kbGVDcmVhdGUoKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIENyZWF0ZQogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgIDwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQogIHJlbmRlcigpIHsKICAgIGlmICh0aGlzLmxvYWRpbmcgJiYgdGhpcy5jb2x1bW5zLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gaHRtbDEwYDxkaXYgY2xhc3M9ImxvYWRpbmciPkxvYWRpbmcuLi48L2Rpdj5gOwogICAgfQogICAgcmV0dXJuIGh0bWwxMGAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1ucy1jb250YWluZXIiPgogICAgICAgICR7dGhpcy5jb2x1bW5zLm1hcCgoY29sdW1uLCBpbmRleDIpID0+IHRoaXMucmVuZGVyQ29sdW1uV3JhcHBlcihjb2x1bW4sIGluZGV4MikpfQogICAgICA8L2Rpdj4KICAgICAgJHt0aGlzLnJlbmRlckNyZWF0ZURpYWxvZygpfQogICAgYDsKICB9CiAgcmVuZGVyQ29sdW1uV3JhcHBlcihjb2x1bW4sIGluZGV4MikgewogICAgcmV0dXJuIGh0bWwxMGAKICAgICAgPGRpdiBjbGFzcz0iY29sdW1uLXdyYXBwZXIiPgogICAgICAgICR7dGhpcy5yZW5kZXJDb2x1bW4oY29sdW1uLCBpbmRleDIpfQogICAgICAgIDxkaXYKICAgICAgICAgIGNsYXNzPSJyZXNpemUtaGFuZGxlICR7dGhpcy5yZXNpemluZz8uY29sdW1uSW5kZXggPT09IGluZGV4MiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgQG1vdXNlZG93bj0keyhlMTEpID0+IHRoaXMuc3RhcnRSZXNpemUoZTExLCBpbmRleDIpfQogICAgICAgID48L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXJDb2x1bW4oY29sdW1uLCBpbmRleDIpIHsKICAgIGNvbnN0IGhlYWRlck5hbWUgPSBjb2x1bW4ucHJlZml4ID8gZ2V0RmlsZU5hbWUoY29sdW1uLnByZWZpeCkgOiB0aGlzLmJ1Y2tldE5hbWU7CiAgICByZXR1cm4gaHRtbDEwYAogICAgICA8ZGl2IGNsYXNzPSJjb2x1bW4iIHN0eWxlPSJ3aWR0aDogJHtjb2x1bW4ud2lkdGh9cHgiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi1oZWFkZXIiIHRpdGxlPSR7Y29sdW1uLnByZWZpeCB8fCB0aGlzLmJ1Y2tldE5hbWV9PgogICAgICAgICAgJHtoZWFkZXJOYW1lfQogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImNvbHVtbi1pdGVtcyIgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVFbXB0eVNwYWNlQ29udGV4dE1lbnUoZTExLCBpbmRleDIpfT4KICAgICAgICAgICR7Y29sdW1uLnByZWZpeGVzLmxlbmd0aCA9PT0gMCAmJiBjb2x1bW4ub2JqZWN0cy5sZW5ndGggPT09IDAgPyBodG1sMTBgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPkVtcHR5IGZvbGRlcjwvZGl2PmAgOiAiIn0KICAgICAgICAgICR7Y29sdW1uLnByZWZpeGVzLm1hcCgKICAgICAgKHByZWZpeDQpID0+IGh0bWwxMGAKICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICBjbGFzcz0iY29sdW1uLWl0ZW0gZm9sZGVyICR7Y29sdW1uLnNlbGVjdGVkSXRlbSA9PT0gcHJlZml4NCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdEZvbGRlcihpbmRleDIsIHByZWZpeDQpfQogICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVGb2xkZXJDb250ZXh0TWVudShlMTEsIGluZGV4MiwgcHJlZml4NCl9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJjdXJyZW50Q29sb3IiPgogICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnoiIC8+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJuYW1lIj4ke2dldEZpbGVOYW1lKHByZWZpeDQpfTwvc3Bhbj4KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNoZXZyb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgICAgIDxwb2x5bGluZSBwb2ludHM9IjkgMTggMTUgMTIgOSA2Ij48L3BvbHlsaW5lPgogICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgIGAKICAgICl9CiAgICAgICAgICAke2NvbHVtbi5vYmplY3RzLm1hcCgKICAgICAgKG9iaikgPT4gaHRtbDEwYAogICAgICAgICAgICAgIDxkaXYKICAgICAgICAgICAgICAgIGNsYXNzPSJjb2x1bW4taXRlbSAke2NvbHVtbi5zZWxlY3RlZEl0ZW0gPT09IG9iai5rZXkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RGaWxlKGluZGV4Miwgb2JqLmtleSl9CiAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUZpbGVDb250ZXh0TWVudShlMTEsIGluZGV4Miwgb2JqLmtleSl9CiAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0iaWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgPHBhdGggZD0iJHt0aGlzLmdldEZpbGVJY29uKG9iai5rZXkpfSIgLz4KICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9Im5hbWUiPiR7Z2V0RmlsZU5hbWUob2JqLmtleSl9PC9zcGFuPgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICBgCiAgICApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDMgPSBfX2RlY29yYXRvclN0YXJ0KF9hNik7Cl9idWNrZXROYW1lMiA9IG5ldyBXZWFrTWFwKCk7Cl9jdXJyZW50UHJlZml4MiA9IG5ldyBXZWFrTWFwKCk7Cl9yZWZyZXNoS2V5MiA9IG5ldyBXZWFrTWFwKCk7Cl9jb2x1bW5zID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmcgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURpYWxvZyA9IG5ldyBXZWFrTWFwKCk7Cl9jcmVhdGVEaWFsb2dUeXBlID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ1ByZWZpeCA9IG5ldyBXZWFrTWFwKCk7Cl9jcmVhdGVEaWFsb2dOYW1lID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiYnVja2V0TmFtZSIsIF9idWNrZXROYW1lX2RlYzIsIFRzdmlld1MzQ29sdW1ucywgX2J1Y2tldE5hbWUyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY3VycmVudFByZWZpeCIsIF9jdXJyZW50UHJlZml4X2RlYzIsIFRzdmlld1MzQ29sdW1ucywgX2N1cnJlbnRQcmVmaXgyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAicmVmcmVzaEtleSIsIF9yZWZyZXNoS2V5X2RlYzIsIFRzdmlld1MzQ29sdW1ucywgX3JlZnJlc2hLZXkyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY29sdW1ucyIsIF9jb2x1bW5zX2RlYywgVHN2aWV3UzNDb2x1bW5zLCBfY29sdW1ucyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWMsIFRzdmlld1MzQ29sdW1ucywgX2xvYWRpbmcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJzaG93Q3JlYXRlRGlhbG9nIiwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9zaG93Q3JlYXRlRGlhbG9nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCA0LCAiY3JlYXRlRGlhbG9nVHlwZSIsIF9jcmVhdGVEaWFsb2dUeXBlX2RlYywgVHN2aWV3UzNDb2x1bW5zLCBfY3JlYXRlRGlhbG9nVHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MywgNCwgImNyZWF0ZURpYWxvZ1ByZWZpeCIsIF9jcmVhdGVEaWFsb2dQcmVmaXhfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jcmVhdGVEaWFsb2dQcmVmaXgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDMsIDQsICJjcmVhdGVEaWFsb2dOYW1lIiwgX2NyZWF0ZURpYWxvZ05hbWVfZGVjLCBUc3ZpZXdTM0NvbHVtbnMsIF9jcmVhdGVEaWFsb2dOYW1lKTsKVHN2aWV3UzNDb2x1bW5zID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQzLCAwLCAiVHN2aWV3UzNDb2x1bW5zIiwgX1Rzdmlld1MzQ29sdW1uc19kZWNvcmF0b3JzLCBUc3ZpZXdTM0NvbHVtbnMpOwpfX3B1YmxpY0ZpZWxkKFRzdmlld1MzQ29sdW1ucywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyNS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczVgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgICAgICBvdmVyZmxvdy15OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5jb2x1bW5zLWNvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgbWluLXdpZHRoOiBtYXgtY29udGVudDsKICAgICAgfQoKICAgICAgLmNvbHVtbi13cmFwcGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLmNvbHVtbiB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZSB7CiAgICAgICAgd2lkdGg6IDVweDsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgY3Vyc29yOiBjb2wtcmVzaXplOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICBmbGV4LXNocmluazogMDsKICAgICAgfQoKICAgICAgLnJlc2l6ZS1oYW5kbGU6OmFmdGVyIHsKICAgICAgICBjb250ZW50OiAnJzsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDJweDsKICAgICAgICB3aWR0aDogMXB4OwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiAjMzMzOwogICAgICB9CgogICAgICAucmVzaXplLWhhbmRsZTpob3Zlcjo6YWZ0ZXIsCiAgICAgIC5yZXNpemUtaGFuZGxlLmFjdGl2ZTo6YWZ0ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICM0MDQwNDA7CiAgICAgICAgd2lkdGg6IDJweDsKICAgICAgICBsZWZ0OiAxcHg7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4td3JhcHBlcjpsYXN0LWNoaWxkIC5yZXNpemUtaGFuZGxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuY29sdW1uLWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtcyB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgICAgcGFkZGluZzogNnB4IDEwcHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYmFja2dyb3VuZCAwLjFzOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbS5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuY29sdW1uLWl0ZW0uZm9sZGVyIHsKICAgICAgICBjb2xvcjogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmNvbHVtbi1pdGVtIC5pY29uIHsKICAgICAgICB3aWR0aDogMTZweDsKICAgICAgICBoZWlnaHQ6IDE2cHg7CiAgICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbSAubmFtZSB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CiAgICAgIH0KCiAgICAgIC5jb2x1bW4taXRlbSAuY2hldnJvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbG9yOiAjNTU1OwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmxvYWRpbmcgewogICAgICAgIHBhZGRpbmc6IDE2cHg7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAuZGlhbG9nLW92ZXJsYXkgewogICAgICAgIHBvc2l0aW9uOiBmaXhlZDsKICAgICAgICB0b3A6IDA7CiAgICAgICAgbGVmdDogMDsKICAgICAgICByaWdodDogMDsKICAgICAgICBib3R0b206IDA7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjcpOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICB6LWluZGV4OiAxMDAwOwogICAgICB9CgogICAgICAuZGlhbG9nIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjMWUxZTFlOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICBtaW4td2lkdGg6IDQwMHB4OwogICAgICAgIGJveC1zaGFkb3c6IDAgMjBweCA0MHB4IHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgfQoKICAgICAgLmRpYWxvZy10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxOHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA2MDA7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1sb2NhdGlvbiB7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dCB7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgICAgcGFkZGluZzogMTBweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6ICMxNDE0MTQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzMzMzsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB9CgogICAgICAuZGlhbG9nLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1oaW50IHsKICAgICAgICBmb250LXNpemU6IDExcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTZweDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1hY3Rpb25zIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0biB7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMnM7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbCB7CiAgICAgICAgYmFja2dyb3VuZDogdHJhbnNwYXJlbnQ7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY2FuY2VsOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGUgewogICAgICAgIGJhY2tncm91bmQ6ICM0MDQwNDA7CiAgICAgICAgYm9yZGVyOiBub25lOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6ICM1MDUwNTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNyZWF0ZTpkaXNhYmxlZCB7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICAgIGN1cnNvcjogbm90LWFsbG93ZWQ7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MywgMSwgVHN2aWV3UzNDb2x1bW5zKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctczMta2V5cy50cwp2YXIgX2NyZWF0ZURpYWxvZ05hbWVfZGVjMiwgX2NyZWF0ZURpYWxvZ1ByZWZpeF9kZWMyLCBfY3JlYXRlRGlhbG9nVHlwZV9kZWMyLCBfc2hvd0NyZWF0ZURpYWxvZ19kZWMyLCBfZmlsdGVyVGV4dF9kZWMsIF9zZWxlY3RlZEtleV9kZWMyLCBfbG9hZGluZ19kZWMyLCBfcHJlZml4ZXNfZGVjLCBfYWxsS2V5c19kZWMsIF9yZWZyZXNoS2V5X2RlYzMsIF9jdXJyZW50UHJlZml4X2RlYzMsIF9idWNrZXROYW1lX2RlYzMsIF9hNywgX1Rzdmlld1MzS2V5c19kZWNvcmF0b3JzLCBfaW5pdDQsIF9idWNrZXROYW1lMywgX2N1cnJlbnRQcmVmaXgzLCBfcmVmcmVzaEtleTMsIF9hbGxLZXlzLCBfcHJlZml4ZXMsIF9sb2FkaW5nMiwgX3NlbGVjdGVkS2V5MiwgX2ZpbHRlclRleHQsIF9zaG93Q3JlYXRlRGlhbG9nMiwgX2NyZWF0ZURpYWxvZ1R5cGUyLCBfY3JlYXRlRGlhbG9nUHJlZml4MiwgX2NyZWF0ZURpYWxvZ05hbWUyOwp2YXIgeyBodG1sOiBodG1sMTEsIGNzczogY3NzNiwgY3NzTWFuYWdlcjogY3NzTWFuYWdlcjYsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ1LCBwcm9wZXJ0eTogcHJvcGVydHk0LCBzdGF0ZTogc3RhdGU1LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQ2IH0gPSBwbHVnaW5zX2V4cG9ydHM1Owp2YXIgeyBEZWVzQ29udGV4dG1lbnU6IERlZXNDb250ZXh0bWVudTQgfSA9IGRpc3RfdHNfd2ViX2V4cG9ydHMyOwpfVHN2aWV3UzNLZXlzX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDUoInRzdmlldy1zMy1rZXlzIildOwp2YXIgVHN2aWV3UzNLZXlzID0gY2xhc3MgZXh0ZW5kcyAoX2E3ID0gRGVlc0VsZW1lbnQ2LCBfYnVja2V0TmFtZV9kZWMzID0gW3Byb3BlcnR5NCh7IHR5cGU6IFN0cmluZyB9KV0sIF9jdXJyZW50UHJlZml4X2RlYzMgPSBbcHJvcGVydHk0KHsgdHlwZTogU3RyaW5nIH0pXSwgX3JlZnJlc2hLZXlfZGVjMyA9IFtwcm9wZXJ0eTQoeyB0eXBlOiBOdW1iZXIgfSldLCBfYWxsS2V5c19kZWMgPSBbc3RhdGU1KCldLCBfcHJlZml4ZXNfZGVjID0gW3N0YXRlNSgpXSwgX2xvYWRpbmdfZGVjMiA9IFtzdGF0ZTUoKV0sIF9zZWxlY3RlZEtleV9kZWMyID0gW3N0YXRlNSgpXSwgX2ZpbHRlclRleHRfZGVjID0gW3N0YXRlNSgpXSwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjMiA9IFtzdGF0ZTUoKV0sIF9jcmVhdGVEaWFsb2dUeXBlX2RlYzIgPSBbc3RhdGU1KCldLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYzIgPSBbc3RhdGU1KCldLCBfY3JlYXRlRGlhbG9nTmFtZV9kZWMyID0gW3N0YXRlNSgpXSwgX2E3KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXROYW1lMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY3VycmVudFByZWZpeDMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9yZWZyZXNoS2V5MywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAxNiwgdGhpcywgMCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfYWxsS2V5cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyMCwgdGhpcywgW10pKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3ByZWZpeGVzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDI0LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMjgsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZEtleTIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9maWx0ZXJUZXh0LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDM2LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDM5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2hvd0NyZWF0ZURpYWxvZzIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgNDAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgNDMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dUeXBlMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0NCwgdGhpcywgImZvbGRlciIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA0NywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NyZWF0ZURpYWxvZ1ByZWZpeDIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgNDgsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NCwgNTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jcmVhdGVEaWFsb2dOYW1lMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA1MiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ0LCA1NSwgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZE9iamVjdHMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiYnVja2V0TmFtZSIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiY3VycmVudFByZWZpeCIpIHx8IGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygicmVmcmVzaEtleSIpKSB7CiAgICAgIHRoaXMubG9hZE9iamVjdHMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZE9iamVjdHMoKSB7CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5saXN0T2JqZWN0cyh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMuY3VycmVudFByZWZpeCwgIi8iKTsKICAgICAgdGhpcy5hbGxLZXlzID0gcmVzdWx0Lm9iamVjdHM7CiAgICAgIHRoaXMucHJlZml4ZXMgPSByZXN1bHQucHJlZml4ZXM7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3RzOiIsIGVycik7CiAgICAgIHRoaXMuYWxsS2V5cyA9IFtdOwogICAgICB0aGlzLnByZWZpeGVzID0gW107CiAgICB9CiAgICB0aGlzLmxvYWRpbmcgPSBmYWxzZTsKICB9CiAgaGFuZGxlRmlsdGVySW5wdXQoZTExKSB7CiAgICB0aGlzLmZpbHRlclRleHQgPSBlMTEudGFyZ2V0LnZhbHVlOwogIH0KICBzZWxlY3RLZXkoa2V5MiwgaXNGb2xkZXIpIHsKICAgIHRoaXMuc2VsZWN0ZWRLZXkgPSBrZXkyOwogICAgaWYgKGlzRm9sZGVyKSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoIm5hdmlnYXRlIiwgewogICAgICAgICAgZGV0YWlsOiB7IHByZWZpeDoga2V5MiB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0gZWxzZSB7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImtleS1zZWxlY3RlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBrZXk6IGtleTIgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9CiAgfQogIGdldCBmaWx0ZXJlZEl0ZW1zKCkgewogICAgY29uc3QgZmlsdGVyMiA9IHRoaXMuZmlsdGVyVGV4dC50b0xvd2VyQ2FzZSgpOwogICAgY29uc3QgZm9sZGVycyA9IHRoaXMucHJlZml4ZXMuZmlsdGVyKChwNykgPT4gIWZpbHRlcjIgfHwgZ2V0RmlsZU5hbWUocDcpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyMikpLm1hcCgocDcpID0+ICh7IGtleTogcDcsIGlzRm9sZGVyOiB0cnVlLCBzaXplOiB2b2lkIDAgfSkpOwogICAgY29uc3QgZmlsZXMgPSB0aGlzLmFsbEtleXMuZmlsdGVyKChvMTMpID0+ICFmaWx0ZXIyIHx8IGdldEZpbGVOYW1lKG8xMy5rZXkpLnRvTG93ZXJDYXNlKCkuaW5jbHVkZXMoZmlsdGVyMikpLm1hcCgobzEzKSA9PiAoeyBrZXk6IG8xMy5rZXksIGlzRm9sZGVyOiBmYWxzZSwgc2l6ZTogbzEzLnNpemUgfSkpOwogICAgcmV0dXJuIFsuLi5mb2xkZXJzLCAuLi5maWxlc107CiAgfQogIGhhbmRsZUl0ZW1Db250ZXh0TWVudShldmVudCwga2V5MiwgaXNGb2xkZXIpIHsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBpZiAoaXNGb2xkZXIpIHsKICAgICAgRGVlc0NvbnRleHRtZW51NC5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJPcGVuIiwKICAgICAgICAgIGljb25OYW1lOiAibHVjaWRlOmZvbGRlck9wZW4iLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIHRoaXMuc2VsZWN0S2V5KGtleTIsIHRydWUpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChrZXkyKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJOZXcgRm9sZGVyIEluc2lkZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmb2xkZXJQbHVzIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmb2xkZXIiLCBrZXkyKQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIk5ldyBGaWxlIEluc2lkZSIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlUGx1cyIsCiAgICAgICAgICBhY3Rpb246IGFzeW5jICgpID0+IHRoaXMub3BlbkNyZWF0ZURpYWxvZygiZmlsZSIsIGtleTIpCiAgICAgICAgfSwKICAgICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRGVsZXRlIEZvbGRlciIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGlmIChjb25maXJtKGBEZWxldGUgZm9sZGVyICIke2dldEZpbGVOYW1lKGtleTIpfSIgYW5kIGFsbCBpdHMgY29udGVudHM/YCkpIHsKICAgICAgICAgICAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVQcmVmaXgodGhpcy5idWNrZXROYW1lLCBrZXkyKTsKICAgICAgICAgICAgICBpZiAoc3VjY2VzcykgewogICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5sb2FkT2JqZWN0cygpOwogICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgfQogICAgICAgIH0KICAgICAgXSk7CiAgICB9IGVsc2UgewogICAgICBEZWVzQ29udGV4dG1lbnU0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgICAgewogICAgICAgICAgbmFtZTogIlByZXZpZXciLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZXllIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICB0aGlzLnNlbGVjdEtleShrZXkyLCBmYWxzZSk7CiAgICAgICAgICB9CiAgICAgICAgfSwKICAgICAgICB7CiAgICAgICAgICBuYW1lOiAiRG93bmxvYWQiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZG93bmxvYWQiLAogICAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICAgIGNvbnN0IHVybCA9IGF3YWl0IGFwaVNlcnZpY2UuZ2V0T2JqZWN0VXJsKHRoaXMuYnVja2V0TmFtZSwga2V5Mik7CiAgICAgICAgICAgIGNvbnN0IGxpbmszID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOwogICAgICAgICAgICBsaW5rMy5ocmVmID0gdXJsOwogICAgICAgICAgICBsaW5rMy5kb3dubG9hZCA9IGdldEZpbGVOYW1lKGtleTIpOwogICAgICAgICAgICBsaW5rMy5jbGljaygpOwogICAgICAgICAgfQogICAgICAgIH0sCiAgICAgICAgewogICAgICAgICAgbmFtZTogIkNvcHkgUGF0aCIsCiAgICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5IiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChrZXkyKTsKICAgICAgICAgIH0KICAgICAgICB9LAogICAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICAgIHsKICAgICAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6dHJhc2gyIiwKICAgICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGZpbGUgIiR7Z2V0RmlsZU5hbWUoa2V5Mil9Ij9gKSkgewogICAgICAgICAgICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZU9iamVjdCh0aGlzLmJ1Y2tldE5hbWUsIGtleTIpOwogICAgICAgICAgICAgIGlmIChzdWNjZXNzKSB7CiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmxvYWRPYmplY3RzKCk7CiAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICBdKTsKICAgIH0KICB9CiAgaGFuZGxlRW1wdHlTcGFjZUNvbnRleHRNZW51KGV2ZW50KSB7CiAgICBpZiAoZXZlbnQudGFyZ2V0LmNsb3Nlc3QoInRyIikpIHJldHVybjsKICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CiAgICBEZWVzQ29udGV4dG1lbnU0Lm9wZW5Db250ZXh0TWVudVdpdGhPcHRpb25zKGV2ZW50LCBbCiAgICAgIHsKICAgICAgICBuYW1lOiAiTmV3IEZvbGRlciIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Zm9sZGVyUGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB0aGlzLm9wZW5DcmVhdGVEaWFsb2coImZvbGRlciIsIHRoaXMuY3VycmVudFByZWZpeCkKICAgICAgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJOZXcgRmlsZSIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZmlsZVBsdXMiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gdGhpcy5vcGVuQ3JlYXRlRGlhbG9nKCJmaWxlIiwgdGhpcy5jdXJyZW50UHJlZml4KQogICAgICB9CiAgICBdKTsKICB9CiAgb3BlbkNyZWF0ZURpYWxvZyh0eXBlNSwgcHJlZml4NCkgewogICAgdGhpcy5jcmVhdGVEaWFsb2dUeXBlID0gdHlwZTU7CiAgICB0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeCA9IHByZWZpeDQ7CiAgICB0aGlzLmNyZWF0ZURpYWxvZ05hbWUgPSAiIjsKICAgIHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IHRydWU7CiAgfQogIGdldENvbnRlbnRUeXBlKGV4dCkgewogICAgY29uc3QgY29udGVudFR5cGVzID0gewogICAgICBqc29uOiAiYXBwbGljYXRpb24vanNvbiIsCiAgICAgIHR4dDogInRleHQvcGxhaW4iLAogICAgICBodG1sOiAidGV4dC9odG1sIiwKICAgICAgY3NzOiAidGV4dC9jc3MiLAogICAgICBqczogImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiLAogICAgICB0czogInRleHQvdHlwZXNjcmlwdCIsCiAgICAgIG1kOiAidGV4dC9tYXJrZG93biIsCiAgICAgIHhtbDogImFwcGxpY2F0aW9uL3htbCIsCiAgICAgIHlhbWw6ICJ0ZXh0L3lhbWwiLAogICAgICB5bWw6ICJ0ZXh0L3lhbWwiLAogICAgICBjc3Y6ICJ0ZXh0L2NzdiIKICAgIH07CiAgICByZXR1cm4gY29udGVudFR5cGVzW2V4dF0gfHwgImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgfQogIGdldERlZmF1bHRDb250ZW50KGV4dCkgewogICAgY29uc3QgZGVmYXVsdHMgPSB7CiAgICAgIGpzb246ICJ7XG4gIFxufSIsCiAgICAgIGh0bWw6ICI8IURPQ1RZUEUgaHRtbD5cbjxodG1sPlxuPGhlYWQ+XG4gIDx0aXRsZT48L3RpdGxlPlxuPC9oZWFkPlxuPGJvZHk+XG4gIFxuPC9ib2R5PlxuPC9odG1sPiIsCiAgICAgIG1kOiAiIyBUaXRsZVxuXG4iLAogICAgICB0eHQ6ICIiCiAgICB9OwogICAgcmV0dXJuIGRlZmF1bHRzW2V4dF0gfHwgIiI7CiAgfQogIGFzeW5jIGhhbmRsZUNyZWF0ZSgpIHsKICAgIGlmICghdGhpcy5jcmVhdGVEaWFsb2dOYW1lLnRyaW0oKSkgcmV0dXJuOwogICAgY29uc3QgbmFtZSA9IHRoaXMuY3JlYXRlRGlhbG9nTmFtZS50cmltKCk7CiAgICBsZXQgcGF0aDI7CiAgICBpZiAodGhpcy5jcmVhdGVEaWFsb2dUeXBlID09PSAiZm9sZGVyIikgewogICAgICBwYXRoMiA9IHRoaXMuY3JlYXRlRGlhbG9nUHJlZml4ICsgbmFtZSArICIvLmtlZXAiOwogICAgfSBlbHNlIHsKICAgICAgcGF0aDIgPSB0aGlzLmNyZWF0ZURpYWxvZ1ByZWZpeCArIG5hbWU7CiAgICB9CiAgICBjb25zdCBleHQgPSBuYW1lLnNwbGl0KCIuIikucG9wKCk/LnRvTG93ZXJDYXNlKCkgfHwgIiI7CiAgICBjb25zdCBjb250ZW50VHlwZSA9IHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9PT0gImZpbGUiID8gdGhpcy5nZXRDb250ZW50VHlwZShleHQpIDogImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSI7CiAgICBjb25zdCBjb250ZW50MyA9IHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9PT0gImZpbGUiID8gdGhpcy5nZXREZWZhdWx0Q29udGVudChleHQpIDogIiI7CiAgICBjb25zdCBzdWNjZXNzID0gYXdhaXQgYXBpU2VydmljZS5wdXRPYmplY3QoCiAgICAgIHRoaXMuYnVja2V0TmFtZSwKICAgICAgcGF0aDIsCiAgICAgIGJ0b2EoY29udGVudDMpLAogICAgICBjb250ZW50VHlwZQogICAgKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IGZhbHNlOwogICAgICBhd2FpdCB0aGlzLmxvYWRPYmplY3RzKCk7CiAgICB9CiAgfQogIHJlbmRlckNyZWF0ZURpYWxvZygpIHsKICAgIGlmICghdGhpcy5zaG93Q3JlYXRlRGlhbG9nKSByZXR1cm4gIiI7CiAgICBjb25zdCBpc0ZvbGRlciA9IHRoaXMuY3JlYXRlRGlhbG9nVHlwZSA9PT0gImZvbGRlciI7CiAgICBjb25zdCB0aXRsZSA9IGlzRm9sZGVyID8gIkNyZWF0ZSBOZXcgRm9sZGVyIiA6ICJDcmVhdGUgTmV3IEZpbGUiOwogICAgY29uc3QgcGxhY2Vob2xkZXIgPSBpc0ZvbGRlciA/ICJmb2xkZXItbmFtZSBvciBwYXRoL3RvL2ZvbGRlciIgOiAiZmlsZW5hbWUudHh0IG9yIHBhdGgvdG8vZmlsZS50eHQiOwogICAgcmV0dXJuIGh0bWwxMWAKICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLW92ZXJsYXkiIEBjbGljaz0keygpID0+IHRoaXMuc2hvd0NyZWF0ZURpYWxvZyA9IGZhbHNlfT4KICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ciIEBjbGljaz0keyhlMTEpID0+IGUxMS5zdG9wUHJvcGFnYXRpb24oKX0+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctdGl0bGUiPiR7dGl0bGV9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctbG9jYXRpb24iPgogICAgICAgICAgICBMb2NhdGlvbjogJHt0aGlzLmJ1Y2tldE5hbWV9LyR7dGhpcy5jcmVhdGVEaWFsb2dQcmVmaXh9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZGlhbG9nLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0ke3BsYWNlaG9sZGVyfQogICAgICAgICAgICAudmFsdWU9JHt0aGlzLmNyZWF0ZURpYWxvZ05hbWV9CiAgICAgICAgICAgIEBpbnB1dD0keyhlMTEpID0+IHRoaXMuY3JlYXRlRGlhbG9nTmFtZSA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgIEBrZXlkb3duPSR7KGUxMSkgPT4gZTExLmtleSA9PT0gIkVudGVyIiAmJiB0aGlzLmhhbmRsZUNyZWF0ZSgpfQogICAgICAgICAgLz4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1oaW50Ij4KICAgICAgICAgICAgVXNlICIvIiB0byBjcmVhdGUgbmVzdGVkICR7aXNGb2xkZXIgPyAiZm9sZGVycyIgOiAicGF0aCJ9IChlLmcuLCAke2lzRm9sZGVyID8gInBhcmVudC9jaGlsZCIgOiAiZm9sZGVyL2ZpbGUudHh0In0pCiAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImRpYWxvZy1hY3Rpb25zIj4KICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGlhbG9nLWJ0biBkaWFsb2ctYnRuLWNhbmNlbCIgQGNsaWNrPSR7KCkgPT4gdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gZmFsc2V9PgogICAgICAgICAgICAgIENhbmNlbAogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctYnRuIGRpYWxvZy1idG4tY3JlYXRlIgogICAgICAgICAgICAgID9kaXNhYmxlZD0keyF0aGlzLmNyZWF0ZURpYWxvZ05hbWUudHJpbSgpfQogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuaGFuZGxlQ3JlYXRlKCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICBDcmVhdGUKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDExYAogICAgICA8ZGl2IGNsYXNzPSJrZXlzLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iZmlsdGVyLWJhciI+CiAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgdHlwZT0idGV4dCIKICAgICAgICAgICAgY2xhc3M9ImZpbHRlci1pbnB1dCIKICAgICAgICAgICAgcGxhY2Vob2xkZXI9IkZpbHRlciBmaWxlcy4uLiIKICAgICAgICAgICAgLnZhbHVlPSR7dGhpcy5maWx0ZXJUZXh0fQogICAgICAgICAgICBAaW5wdXQ9JHt0aGlzLmhhbmRsZUZpbHRlcklucHV0fQogICAgICAgICAgLz4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0ia2V5cy1saXN0IiBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZUVtcHR5U3BhY2VDb250ZXh0TWVudShlMTEpfT4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDExYDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+YCA6IHRoaXMuZmlsdGVyZWRJdGVtcy5sZW5ndGggPT09IDAgPyBodG1sMTFgPGRpdiBjbGFzcz0iZW1wdHktc3RhdGUiPk5vIG9iamVjdHMgZm91bmQ8L2Rpdj5gIDogaHRtbDExYAogICAgICAgICAgICAgICAgICA8dGFibGU+CiAgICAgICAgICAgICAgICAgICAgPHRoZWFkPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGg+TmFtZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0aCBzdHlsZT0id2lkdGg6IDEwMHB4OyI+U2l6ZTwvdGg+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGhlYWQ+CiAgICAgICAgICAgICAgICAgICAgPHRib2R5PgogICAgICAgICAgICAgICAgICAgICAgJHt0aGlzLmZpbHRlcmVkSXRlbXMubWFwKAogICAgICAoaXRlbSkgPT4gaHRtbDExYAogICAgICAgICAgICAgICAgICAgICAgICAgIDx0cgogICAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9IiR7dGhpcy5zZWxlY3RlZEtleSA9PT0gaXRlbS5rZXkgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZWxlY3RLZXkoaXRlbS5rZXksIGl0ZW0uaXNGb2xkZXIpfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgQGNvbnRleHRtZW51PSR7KGUxMSkgPT4gdGhpcy5oYW5kbGVJdGVtQ29udGV4dE1lbnUoZTExLCBpdGVtLmtleSwgaXRlbS5pc0ZvbGRlcil9CiAgICAgICAgICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJrZXktY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJHtpdGVtLmlzRm9sZGVyID8gaHRtbDExYAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImtleS1pY29uIGZvbGRlci1pY29uIiB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9ImN1cnJlbnRDb2xvciI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMjIgMTlhMiAyIDAgMCAxLTIgMkg0YTIgMiAwIDAgMS0yLTJWNWEyIDIgMCAwIDEgMi0yaDVsMiAzaDlhMiAyIDAgMCAxIDIgMnoiIC8+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPC9zdmc+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGAgOiBodG1sMTFgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPHN2ZyBjbGFzcz0ia2V5LWljb24iIHZpZXdCb3g9IjAgMCAyNCAyNCIgZmlsbD0ibm9uZSIgc3Ryb2tlPSJjdXJyZW50Q29sb3IiIHN0cm9rZS13aWR0aD0iMiI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8cGF0aCBkPSJNMTQgMkg2YTIgMiAwIDAgMC0yIDJ2MTZhMiAyIDAgMCAwIDIgMmgxMmEyIDIgMCAwIDAgMi0yVjh6IiAvPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBgfQogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJrZXktbmFtZSI+JHtnZXRGaWxlTmFtZShpdGVtLmtleSl9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9InNpemUtY2VsbCI+CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICR7aXRlbS5pc0ZvbGRlciA/ICItIiA6IGZvcm1hdFNpemUoaXRlbS5zaXplKX0KICAgICAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICAgICAgICAgICAgICA8L3Rib2R5PgogICAgICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICAgICR7dGhpcy5yZW5kZXJDcmVhdGVEaWFsb2coKX0KICAgIGA7CiAgfQp9OwpfaW5pdDQgPSBfX2RlY29yYXRvclN0YXJ0KF9hNyk7Cl9idWNrZXROYW1lMyA9IG5ldyBXZWFrTWFwKCk7Cl9jdXJyZW50UHJlZml4MyA9IG5ldyBXZWFrTWFwKCk7Cl9yZWZyZXNoS2V5MyA9IG5ldyBXZWFrTWFwKCk7Cl9hbGxLZXlzID0gbmV3IFdlYWtNYXAoKTsKX3ByZWZpeGVzID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmcyID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkS2V5MiA9IG5ldyBXZWFrTWFwKCk7Cl9maWx0ZXJUZXh0ID0gbmV3IFdlYWtNYXAoKTsKX3Nob3dDcmVhdGVEaWFsb2cyID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ1R5cGUyID0gbmV3IFdlYWtNYXAoKTsKX2NyZWF0ZURpYWxvZ1ByZWZpeDIgPSBuZXcgV2Vha01hcCgpOwpfY3JlYXRlRGlhbG9nTmFtZTIgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJidWNrZXROYW1lIiwgX2J1Y2tldE5hbWVfZGVjMywgVHN2aWV3UzNLZXlzLCBfYnVja2V0TmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJjdXJyZW50UHJlZml4IiwgX2N1cnJlbnRQcmVmaXhfZGVjMywgVHN2aWV3UzNLZXlzLCBfY3VycmVudFByZWZpeDMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJyZWZyZXNoS2V5IiwgX3JlZnJlc2hLZXlfZGVjMywgVHN2aWV3UzNLZXlzLCBfcmVmcmVzaEtleTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJhbGxLZXlzIiwgX2FsbEtleXNfZGVjLCBUc3ZpZXdTM0tleXMsIF9hbGxLZXlzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ0LCA0LCAicHJlZml4ZXMiLCBfcHJlZml4ZXNfZGVjLCBUc3ZpZXdTM0tleXMsIF9wcmVmaXhlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImxvYWRpbmciLCBfbG9hZGluZ19kZWMyLCBUc3ZpZXdTM0tleXMsIF9sb2FkaW5nMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgInNlbGVjdGVkS2V5IiwgX3NlbGVjdGVkS2V5X2RlYzIsIFRzdmlld1MzS2V5cywgX3NlbGVjdGVkS2V5Mik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NCwgNCwgImZpbHRlclRleHQiLCBfZmlsdGVyVGV4dF9kZWMsIFRzdmlld1MzS2V5cywgX2ZpbHRlclRleHQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJzaG93Q3JlYXRlRGlhbG9nIiwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjMiwgVHN2aWV3UzNLZXlzLCBfc2hvd0NyZWF0ZURpYWxvZzIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJjcmVhdGVEaWFsb2dUeXBlIiwgX2NyZWF0ZURpYWxvZ1R5cGVfZGVjMiwgVHN2aWV3UzNLZXlzLCBfY3JlYXRlRGlhbG9nVHlwZTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJjcmVhdGVEaWFsb2dQcmVmaXgiLCBfY3JlYXRlRGlhbG9nUHJlZml4X2RlYzIsIFRzdmlld1MzS2V5cywgX2NyZWF0ZURpYWxvZ1ByZWZpeDIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDQsICJjcmVhdGVEaWFsb2dOYW1lIiwgX2NyZWF0ZURpYWxvZ05hbWVfZGVjMiwgVHN2aWV3UzNLZXlzLCBfY3JlYXRlRGlhbG9nTmFtZTIpOwpUc3ZpZXdTM0tleXMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDQsIDAsICJUc3ZpZXdTM0tleXMiLCBfVHN2aWV3UzNLZXlzX2RlY29yYXRvcnMsIFRzdmlld1MzS2V5cyk7Cl9fcHVibGljRmllbGQoVHN2aWV3UzNLZXlzLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI2LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzNmAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB9CgogICAgICAua2V5cy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItYmFyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0IHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgfQoKICAgICAgLmZpbHRlci1pbnB1dDo6cGxhY2Vob2xkZXIgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAua2V5cy1saXN0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgIH0KCiAgICAgIHRhYmxlIHsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwogICAgICB9CgogICAgICB0aGVhZCB7CiAgICAgICAgcG9zaXRpb246IHN0aWNreTsKICAgICAgICB0b3A6IDA7CiAgICAgICAgYmFja2dyb3VuZDogIzFhMWExYTsKICAgICAgICB6LWluZGV4OiAxOwogICAgICB9CgogICAgICB0aCB7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC10cmFuc2Zvcm06IHVwcGVyY2FzZTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgdGQgewogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzJhMmEzZTsKICAgICAgfQoKICAgICAgdHI6aG92ZXIgdGQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wMyk7CiAgICAgIH0KCiAgICAgIHRyLnNlbGVjdGVkIHRkIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDgpOwogICAgICB9CgogICAgICAua2V5LWNlbGwgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5rZXktaWNvbiB7CiAgICAgICAgd2lkdGg6IDE2cHg7CiAgICAgICAgaGVpZ2h0OiAxNnB4OwogICAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgICB9CgogICAgICAuZm9sZGVyLWljb24gewogICAgICAgIGNvbG9yOiAjZmJiZjI0OwogICAgICB9CgogICAgICAua2V5LW5hbWUgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgfQoKICAgICAgLnNpemUtY2VsbCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgZm9udC12YXJpYW50LW51bWVyaWM6IHRhYnVsYXItbnVtczsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiAzMnB4OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC43KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmRpYWxvZyB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsKICAgICAgICBib3JkZXItcmFkaXVzOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgICAgbWluLXdpZHRoOiA0MDBweDsKICAgICAgICBib3gtc2hhZG93OiAwIDIwcHggNDBweCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMThweDsKICAgICAgICBmb250LXdlaWdodDogNjAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctbG9jYXRpb24gewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDEwcHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiAjMTQxNDE0OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiA4cHg7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaGludCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDEycHg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBmbGV4LWVuZDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjJzOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jYW5jZWwgewogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLWNhbmNlbDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNDA0MDQwOwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4tY3JlYXRlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiAjNTA1MDUwOwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi1jcmVhdGU6ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDQsIDEsIFRzdmlld1MzS2V5cyk7CgovLyB0c193ZWIvZWxlbWVudHMvdHN2aWV3LXMzLXByZXZpZXcudHMKdmFyIF9lcnJvcl9kZWMsIF9sYXN0TW9kaWZpZWRfZGVjLCBfc2l6ZV9kZWMsIF9jb250ZW50VHlwZV9kZWMsIF9oYXNDaGFuZ2VzX2RlYywgX29yaWdpbmFsVGV4dENvbnRlbnRfZGVjLCBfY29udGVudF9kZWMsIF9zYXZpbmdfZGVjLCBfbG9hZGluZ19kZWMzLCBfb2JqZWN0S2V5X2RlYywgX2J1Y2tldE5hbWVfZGVjNCwgX2E4LCBfVHN2aWV3UzNQcmV2aWV3X2RlY29yYXRvcnMsIF9pbml0NSwgX2J1Y2tldE5hbWU0LCBfb2JqZWN0S2V5LCBfbG9hZGluZzMsIF9zYXZpbmcsIF9jb250ZW50LCBfb3JpZ2luYWxUZXh0Q29udGVudCwgX2hhc0NoYW5nZXMsIF9jb250ZW50VHlwZSwgX3NpemUsIF9sYXN0TW9kaWZpZWQsIF9lcnJvcjsKdmFyIHsgaHRtbDogaHRtbDEyLCBjc3M6IGNzczcsIGNzc01hbmFnZXI6IGNzc01hbmFnZXI3LCBjdXN0b21FbGVtZW50OiBjdXN0b21FbGVtZW50NiwgcHJvcGVydHk6IHByb3BlcnR5NSwgc3RhdGU6IHN0YXRlNiwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50NyB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld1MzUHJldmlld19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQ2KCJ0c3ZpZXctczMtcHJldmlldyIpXTsKdmFyIFRzdmlld1MzUHJldmlldyA9IGNsYXNzIGV4dGVuZHMgKF9hOCA9IERlZXNFbGVtZW50NywgX2J1Y2tldE5hbWVfZGVjNCA9IFtwcm9wZXJ0eTUoeyB0eXBlOiBTdHJpbmcgfSldLCBfb2JqZWN0S2V5X2RlYyA9IFtwcm9wZXJ0eTUoeyB0eXBlOiBTdHJpbmcgfSldLCBfbG9hZGluZ19kZWMzID0gW3N0YXRlNigpXSwgX3NhdmluZ19kZWMgPSBbc3RhdGU2KCldLCBfY29udGVudF9kZWMgPSBbc3RhdGU2KCldLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMgPSBbc3RhdGU2KCldLCBfaGFzQ2hhbmdlc19kZWMgPSBbc3RhdGU2KCldLCBfY29udGVudFR5cGVfZGVjID0gW3N0YXRlNigpXSwgX3NpemVfZGVjID0gW3N0YXRlNigpXSwgX2xhc3RNb2RpZmllZF9kZWMgPSBbc3RhdGU2KCldLCBfZXJyb3JfZGVjID0gW3N0YXRlNigpXSwgX2E4KSB7CiAgY29uc3RydWN0b3IoKSB7CiAgICBzdXBlciguLi5hcmd1bWVudHMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9idWNrZXROYW1lNCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb2JqZWN0S2V5LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTYsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zYXZpbmcsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb250ZW50LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI0LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfb3JpZ2luYWxUZXh0Q29udGVudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAyOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2hhc0NoYW5nZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb250ZW50VHlwZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCAzOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NpemUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgNDAsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA0MywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xhc3RNb2RpZmllZCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA0NCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ1LCA0NywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2Vycm9yLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDQ4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDUsIDUxLCB0aGlzKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygib2JqZWN0S2V5IikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJidWNrZXROYW1lIikpIHsKICAgICAgaWYgKHRoaXMub2JqZWN0S2V5KSB7CiAgICAgICAgdGhpcy5sb2FkT2JqZWN0KCk7CiAgICAgIH0gZWxzZSB7CiAgICAgICAgdGhpcy5jb250ZW50ID0gIiI7CiAgICAgICAgdGhpcy5jb250ZW50VHlwZSA9ICIiOwogICAgICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgICAgICB0aGlzLm9yaWdpbmFsVGV4dENvbnRlbnQgPSAiIjsKICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgfQogICAgfQogIH0KICBhc3luYyBsb2FkT2JqZWN0KCkgewogICAgaWYgKCF0aGlzLm9iamVjdEtleSB8fCAhdGhpcy5idWNrZXROYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdGhpcy5lcnJvciA9ICIiOwogICAgdGhpcy5oYXNDaGFuZ2VzID0gZmFsc2U7CiAgICB0cnkgewogICAgICBjb25zdCByZXN1bHQgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldE9iamVjdCh0aGlzLmJ1Y2tldE5hbWUsIHRoaXMub2JqZWN0S2V5KTsKICAgICAgdGhpcy5jb250ZW50ID0gcmVzdWx0LmNvbnRlbnQ7CiAgICAgIHRoaXMuY29udGVudFR5cGUgPSByZXN1bHQuY29udGVudFR5cGU7CiAgICAgIHRoaXMuc2l6ZSA9IHJlc3VsdC5zaXplOwogICAgICB0aGlzLmxhc3RNb2RpZmllZCA9IHJlc3VsdC5sYXN0TW9kaWZpZWQ7CiAgICAgIGlmICh0aGlzLmlzVGV4dCgpKSB7CiAgICAgICAgdGhpcy5vcmlnaW5hbFRleHRDb250ZW50ID0gdGhpcy5nZXRUZXh0Q29udGVudCgpOwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBvYmplY3Q6IiwgZXJyKTsKICAgICAgdGhpcy5lcnJvciA9ICJGYWlsZWQgdG8gbG9hZCBvYmplY3QiOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGZvcm1hdERhdGUoZGF0ZVN0cikgewogICAgaWYgKCFkYXRlU3RyKSByZXR1cm4gIi0iOwogICAgY29uc3QgZGF0ZSA9IG5ldyBEYXRlKGRhdGVTdHIpOwogICAgcmV0dXJuIGRhdGUudG9Mb2NhbGVTdHJpbmcoKTsKICB9CiAgaXNJbWFnZSgpIHsKICAgIHJldHVybiB0aGlzLmNvbnRlbnRUeXBlLnN0YXJ0c1dpdGgoImltYWdlLyIpOwogIH0KICBpc1RleHQoKSB7CiAgICByZXR1cm4gdGhpcy5jb250ZW50VHlwZS5zdGFydHNXaXRoKCJ0ZXh0LyIpIHx8IHRoaXMuY29udGVudFR5cGUgPT09ICJhcHBsaWNhdGlvbi9qc29uIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24veG1sIiB8fCB0aGlzLmNvbnRlbnRUeXBlID09PSAiYXBwbGljYXRpb24vamF2YXNjcmlwdCI7CiAgfQogIGdldFRleHRDb250ZW50KCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYih0aGlzLmNvbnRlbnQpOwogICAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJpbmFyeVN0cmluZy5sZW5ndGgpOwogICAgICBmb3IgKGxldCBpMTEgPSAwOyBpMTEgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpMTErKykgewogICAgICAgIGJ5dGVzW2kxMV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpMTEpOwogICAgICB9CiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoInV0Zi04IikuZGVjb2RlKGJ5dGVzKTsKICAgIH0gY2F0Y2ggewogICAgICByZXR1cm4gIlVuYWJsZSB0byBkZWNvZGUgY29udGVudCI7CiAgICB9CiAgfQogIGFzeW5jIGhhbmRsZURvd25sb2FkKCkgewogICAgdHJ5IHsKICAgICAgY29uc3QgYmxvYiA9IG5ldyBCbG9iKFtVaW50OEFycmF5LmZyb20oYXRvYih0aGlzLmNvbnRlbnQpLCAoYzExKSA9PiBjMTEuY2hhckNvZGVBdCgwKSldLCB7CiAgICAgICAgdHlwZTogdGhpcy5jb250ZW50VHlwZQogICAgICB9KTsKICAgICAgY29uc3QgdXJsID0gVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTsKICAgICAgY29uc3QgYTUgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CiAgICAgIGE1LmhyZWYgPSB1cmw7CiAgICAgIGE1LmRvd25sb2FkID0gZ2V0RmlsZU5hbWUodGhpcy5vYmplY3RLZXkpOwogICAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGE1KTsKICAgICAgYTUuY2xpY2soKTsKICAgICAgZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChhNSk7CiAgICAgIFVSTC5yZXZva2VPYmplY3RVUkwodXJsKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkb3dubG9hZGluZzoiLCBlcnIpOwogICAgfQogIH0KICBhc3luYyBoYW5kbGVEZWxldGUoKSB7CiAgICBpZiAoIWNvbmZpcm0oYERlbGV0ZSAiJHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9Ij9gKSkgcmV0dXJuOwogICAgdHJ5IHsKICAgICAgYXdhaXQgYXBpU2VydmljZS5kZWxldGVPYmplY3QodGhpcy5idWNrZXROYW1lLCB0aGlzLm9iamVjdEtleSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoIm9iamVjdC1kZWxldGVkIiwgewogICAgICAgICAgZGV0YWlsOiB7IGtleTogdGhpcy5vYmplY3RLZXkgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZGVsZXRpbmcgb2JqZWN0OiIsIGVycik7CiAgICB9CiAgfQogIGdldExhbmd1YWdlKCkgewogICAgY29uc3QgZXh0ID0gdGhpcy5vYmplY3RLZXkuc3BsaXQoIi4iKS5wb3AoKT8udG9Mb3dlckNhc2UoKSB8fCAiIjsKICAgIGNvbnN0IGxhbmd1YWdlTWFwID0gewogICAgICB0czogInR5cGVzY3JpcHQiLAogICAgICB0c3g6ICJ0eXBlc2NyaXB0IiwKICAgICAganM6ICJqYXZhc2NyaXB0IiwKICAgICAganN4OiAiamF2YXNjcmlwdCIsCiAgICAgIG1qczogImphdmFzY3JpcHQiLAogICAgICBjanM6ICJqYXZhc2NyaXB0IiwKICAgICAganNvbjogImpzb24iLAogICAgICBodG1sOiAiaHRtbCIsCiAgICAgIGh0bTogImh0bWwiLAogICAgICBjc3M6ICJjc3MiLAogICAgICBzY3NzOiAic2NzcyIsCiAgICAgIHNhc3M6ICJzY3NzIiwKICAgICAgbGVzczogImxlc3MiLAogICAgICBtZDogIm1hcmtkb3duIiwKICAgICAgbWFya2Rvd246ICJtYXJrZG93biIsCiAgICAgIHhtbDogInhtbCIsCiAgICAgIHlhbWw6ICJ5YW1sIiwKICAgICAgeW1sOiAieWFtbCIsCiAgICAgIHB5OiAicHl0aG9uIiwKICAgICAgcmI6ICJydWJ5IiwKICAgICAgZ286ICJnbyIsCiAgICAgIHJzOiAicnVzdCIsCiAgICAgIGphdmE6ICJqYXZhIiwKICAgICAgYzogImMiLAogICAgICBjcHA6ICJjcHAiLAogICAgICBoOiAiYyIsCiAgICAgIGhwcDogImNwcCIsCiAgICAgIGNzOiAiY3NoYXJwIiwKICAgICAgcGhwOiAicGhwIiwKICAgICAgc2g6ICJzaGVsbCIsCiAgICAgIGJhc2g6ICJzaGVsbCIsCiAgICAgIHpzaDogInNoZWxsIiwKICAgICAgc3FsOiAic3FsIiwKICAgICAgZ3JhcGhxbDogImdyYXBocWwiLAogICAgICBncWw6ICJncmFwaHFsIiwKICAgICAgZG9ja2VyZmlsZTogImRvY2tlcmZpbGUiLAogICAgICB0eHQ6ICJwbGFpbnRleHQiCiAgICB9OwogICAgcmV0dXJuIGxhbmd1YWdlTWFwW2V4dF0gfHwgInBsYWludGV4dCI7CiAgfQogIGhhbmRsZUNvbnRlbnRDaGFuZ2UoZXZlbnQpIHsKICAgIGNvbnN0IG5ld1ZhbHVlID0gZXZlbnQuZGV0YWlsOwogICAgdGhpcy5oYXNDaGFuZ2VzID0gbmV3VmFsdWUgIT09IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICB9CiAgaGFuZGxlRGlzY2FyZCgpIHsKICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgaWYgKGNvZGVFZGl0b3IpIHsKICAgICAgY29kZUVkaXRvci52YWx1ZSA9IHRoaXMub3JpZ2luYWxUZXh0Q29udGVudDsKICAgIH0KICAgIHRoaXMuaGFzQ2hhbmdlcyA9IGZhbHNlOwogIH0KICBhc3luYyBoYW5kbGVTYXZlKCkgewogICAgaWYgKCF0aGlzLmhhc0NoYW5nZXMgfHwgdGhpcy5zYXZpbmcpIHJldHVybjsKICAgIHRoaXMuc2F2aW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIGNvbnN0IGNvZGVFZGl0b3IgPSB0aGlzLnNoYWRvd1Jvb3Q/LnF1ZXJ5U2VsZWN0b3IoImRlZXMtaW5wdXQtY29kZSIpOwogICAgICBjb25zdCBjdXJyZW50Q29udGVudCA9IGNvZGVFZGl0b3I/LnZhbHVlID8/ICIiOwogICAgICBjb25zdCBlbmNvZGVyMiA9IG5ldyBUZXh0RW5jb2RlcigpOwogICAgICBjb25zdCBieXRlcyA9IGVuY29kZXIyLmVuY29kZShjdXJyZW50Q29udGVudCk7CiAgICAgIGNvbnN0IGJhc2U2NENvbnRlbnQgPSBidG9hKFN0cmluZy5mcm9tQ2hhckNvZGUoLi4uYnl0ZXMpKTsKICAgICAgY29uc3Qgc3VjY2VzcyA9IGF3YWl0IGFwaVNlcnZpY2UucHV0T2JqZWN0KAogICAgICAgIHRoaXMuYnVja2V0TmFtZSwKICAgICAgICB0aGlzLm9iamVjdEtleSwKICAgICAgICBiYXNlNjRDb250ZW50LAogICAgICAgIHRoaXMuY29udGVudFR5cGUKICAgICAgKTsKICAgICAgaWYgKHN1Y2Nlc3MpIHsKICAgICAgICB0aGlzLm9yaWdpbmFsVGV4dENvbnRlbnQgPSBjdXJyZW50Q29udGVudDsKICAgICAgICB0aGlzLmhhc0NoYW5nZXMgPSBmYWxzZTsKICAgICAgICB0aGlzLmNvbnRlbnQgPSBiYXNlNjRDb250ZW50OwogICAgICB9CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIG9iamVjdDoiLCBlcnIpOwogICAgfQogICAgdGhpcy5zYXZpbmcgPSBmYWxzZTsKICB9CiAgcmVuZGVyKCkgewogICAgaWYgKCF0aGlzLm9iamVjdEtleSkgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMTQgMiAxNCA4IDIwIDgiIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBmaWxlIHRvIHByZXZpZXc8L3A+CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxMmAKICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nLi4uPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5lcnJvcikgewogICAgICByZXR1cm4gaHRtbDEyYAogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLXN0YXRlIj4ke3RoaXMuZXJyb3J9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDEyYAogICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1oZWFkZXIiPgogICAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy10aXRsZSI+JHtnZXRGaWxlTmFtZSh0aGlzLm9iamVjdEtleSl9PC9kaXY+CiAgICAgICAgICA8ZGl2IGNsYXNzPSJwcmV2aWV3LW1ldGEiPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke3RoaXMuY29udGVudFR5cGV9PC9zcGFuPgogICAgICAgICAgICA8c3BhbiBjbGFzcz0ibWV0YS1pdGVtIj4ke2Zvcm1hdFNpemUodGhpcy5zaXplKX08L3NwYW4+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJtZXRhLWl0ZW0iPiR7dGhpcy5mb3JtYXREYXRlKHRoaXMubGFzdE1vZGlmaWVkKX08L3NwYW4+CiAgICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJ1bnNhdmVkLWluZGljYXRvciI+CiAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0idW5zYXZlZC1kb3QiPjwvc3Bhbj4KICAgICAgICAgICAgICAgIFVuc2F2ZWQgY2hhbmdlcwogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgYCA6ICIifQogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9InByZXZpZXctY29udGVudCAke3RoaXMuaXNUZXh0KCkgPyAiY29kZS1lZGl0b3IiIDogIiJ9Ij4KICAgICAgICAgICR7dGhpcy5pc0ltYWdlKCkgPyBodG1sMTJgPGltZyBjbGFzcz0icHJldmlldy1pbWFnZSIgc3JjPSJkYXRhOiR7dGhpcy5jb250ZW50VHlwZX07YmFzZTY0LCR7dGhpcy5jb250ZW50fSIgLz5gIDogdGhpcy5pc1RleHQoKSA/IGh0bWwxMmAKICAgICAgICAgICAgICAgICAgPGRlZXMtaW5wdXQtY29kZQogICAgICAgICAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMub3JpZ2luYWxUZXh0Q29udGVudH0KICAgICAgICAgICAgICAgICAgICAubGFuZ3VhZ2U9JHt0aGlzLmdldExhbmd1YWdlKCl9CiAgICAgICAgICAgICAgICAgICAgaGVpZ2h0PSIxMDAlIgogICAgICAgICAgICAgICAgICAgIEBjb250ZW50LWNoYW5nZT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29udGVudENoYW5nZShlMTEpfQogICAgICAgICAgICAgICAgICA+PC9kZWVzLWlucHV0LWNvZGU+CiAgICAgICAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJiaW5hcnktcHJldmlldyI+CiAgICAgICAgICAgICAgICAgICAgPHA+QmluYXJ5IGZpbGUgcHJldmlldyBub3QgYXZhaWxhYmxlPC9wPgogICAgICAgICAgICAgICAgICAgIDxwPkRvd25sb2FkIHRvIHZpZXc8L3A+CiAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0icHJldmlldy1hY3Rpb25zIj4KICAgICAgICAgICR7dGhpcy5oYXNDaGFuZ2VzID8gaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIHNlY29uZGFyeSIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEaXNjYXJkfT5EaXNjYXJkPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0iYWN0aW9uLWJ0biBwcmltYXJ5IgogICAgICAgICAgICAgIEBjbGljaz0ke3RoaXMuaGFuZGxlU2F2ZX0KICAgICAgICAgICAgICA/ZGlzYWJsZWQ9JHt0aGlzLnNhdmluZ30KICAgICAgICAgICAgPgogICAgICAgICAgICAgICR7dGhpcy5zYXZpbmcgPyAiU2F2aW5nLi4uIiA6ICJTYXZlIn0KICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICBgIDogaHRtbDEyYAogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZURvd25sb2FkfT5Eb3dubG9hZDwvYnV0dG9uPgogICAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJhY3Rpb24tYnRuIGRhbmdlciIgQGNsaWNrPSR7dGhpcy5oYW5kbGVEZWxldGV9PkRlbGV0ZTwvYnV0dG9uPgogICAgICAgICAgYH0KICAgICAgICA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICBgOwogIH0KfTsKX2luaXQ1ID0gX19kZWNvcmF0b3JTdGFydChfYTgpOwpfYnVja2V0TmFtZTQgPSBuZXcgV2Vha01hcCgpOwpfb2JqZWN0S2V5ID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmczID0gbmV3IFdlYWtNYXAoKTsKX3NhdmluZyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50ID0gbmV3IFdlYWtNYXAoKTsKX29yaWdpbmFsVGV4dENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfaGFzQ2hhbmdlcyA9IG5ldyBXZWFrTWFwKCk7Cl9jb250ZW50VHlwZSA9IG5ldyBXZWFrTWFwKCk7Cl9zaXplID0gbmV3IFdlYWtNYXAoKTsKX2xhc3RNb2RpZmllZCA9IG5ldyBXZWFrTWFwKCk7Cl9lcnJvciA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgImJ1Y2tldE5hbWUiLCBfYnVja2V0TmFtZV9kZWM0LCBUc3ZpZXdTM1ByZXZpZXcsIF9idWNrZXROYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9iamVjdEtleSIsIF9vYmplY3RLZXlfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9vYmplY3RLZXkpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjMywgVHN2aWV3UzNQcmV2aWV3LCBfbG9hZGluZzMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJzYXZpbmciLCBfc2F2aW5nX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfc2F2aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudCIsIF9jb250ZW50X2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfY29udGVudCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgIm9yaWdpbmFsVGV4dENvbnRlbnQiLCBfb3JpZ2luYWxUZXh0Q29udGVudF9kZWMsIFRzdmlld1MzUHJldmlldywgX29yaWdpbmFsVGV4dENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJoYXNDaGFuZ2VzIiwgX2hhc0NoYW5nZXNfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9oYXNDaGFuZ2VzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiY29udGVudFR5cGUiLCBfY29udGVudFR5cGVfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9jb250ZW50VHlwZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgNCwgInNpemUiLCBfc2l6ZV9kZWMsIFRzdmlld1MzUHJldmlldywgX3NpemUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDUsIDQsICJsYXN0TW9kaWZpZWQiLCBfbGFzdE1vZGlmaWVkX2RlYywgVHN2aWV3UzNQcmV2aWV3LCBfbGFzdE1vZGlmaWVkKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ1LCA0LCAiZXJyb3IiLCBfZXJyb3JfZGVjLCBUc3ZpZXdTM1ByZXZpZXcsIF9lcnJvcik7ClRzdmlld1MzUHJldmlldyA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0NSwgMCwgIlRzdmlld1MzUHJldmlldyIsIF9Uc3ZpZXdTM1ByZXZpZXdfZGVjb3JhdG9ycywgVHN2aWV3UzNQcmV2aWV3KTsKX19wdWJsaWNGaWVsZChUc3ZpZXdTM1ByZXZpZXcsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjcuZGVmYXVsdFN0eWxlcywKICB0aGVtZVN0eWxlcywKICBjc3M3YAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAucHJldmlldy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWhlYWRlciB7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzMzMzsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDhweDsKICAgICAgICB3b3JkLWJyZWFrOiBicmVhay1hbGw7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LW1ldGEgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC13cmFwOiB3cmFwOwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5tZXRhLWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICB9CgogICAgICAucHJldmlldy1jb250ZW50LmNvZGUtZWRpdG9yIHsKICAgICAgICBwYWRkaW5nOiAwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWNvbnRlbnQuY29kZS1lZGl0b3IgZGVlcy1pbnB1dC1jb2RlIHsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWltYWdlIHsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgICAgbWF4LWhlaWdodDogMTAwJTsKICAgICAgICBvYmplY3QtZml0OiBjb250YWluOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgfQoKICAgICAgLnByZXZpZXctdGV4dCB7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjU7CiAgICAgICAgd2hpdGUtc3BhY2U6IHByZS13cmFwOwogICAgICAgIHdvcmQtYnJlYWs6IGJyZWFrLWFsbDsKICAgICAgICBjb2xvcjogI2NjYzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgIH0KCiAgICAgIC5wcmV2aWV3LWFjdGlvbnMgewogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBnYXA6IDhweDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4gewogICAgICAgIGZsZXg6IDE7CiAgICAgICAgcGFkZGluZzogOHB4IDE2cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgdHJhbnNpdGlvbjogYWxsIDAuMTVzOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDU5LCAxMzAsIDI0NiwgMC4zKTsKICAgICAgICBib3JkZXItY29sb3I6ICMzYjgyZjY7CiAgICAgICAgY29sb3I6ICM2MGE1ZmE7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoNTksIDEzMCwgMjQ2LCAwLjQpOwogICAgICB9CgogICAgICAuYWN0aW9uLWJ0bi5wcmltYXJ5OmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMDUpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzU1NTsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uc2Vjb25kYXJ5OmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWluZGljYXRvciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGdhcDogNnB4OwogICAgICAgIHBhZGRpbmc6IDZweCAxMHB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUxLCAxOTEsIDM2LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMjUxLCAxOTEsIDM2LCAwLjMpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICNmYmJmMjQ7CiAgICAgIH0KCiAgICAgIC51bnNhdmVkLWRvdCB7CiAgICAgICAgd2lkdGg6IDZweDsKICAgICAgICBoZWlnaHQ6IDZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgICAgYmFja2dyb3VuZDogI2ZiYmYyNDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSBzdmcgewogICAgICAgIHdpZHRoOiA0OHB4OwogICAgICAgIGhlaWdodDogNDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgfQoKICAgICAgLmxvYWRpbmctc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lcnJvci1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogMTZweDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIC5iaW5hcnktcHJldmlldyB7CiAgICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIHBhZGRpbmc6IDI0cHg7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NSwgMSwgVHN2aWV3UzNQcmV2aWV3KTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tYnJvd3Nlci50cwp2YXIgX3N0YXRzX2RlYywgX3NlbGVjdGVkRG9jdW1lbnRJZF9kZWMsIF9hY3RpdmVUYWJfZGVjLCBfY29sbGVjdGlvbk5hbWVfZGVjLCBfZGF0YWJhc2VOYW1lX2RlYywgX2E5LCBfVHN2aWV3TW9uZ29Ccm93c2VyX2RlY29yYXRvcnMsIF9pbml0NiwgX2RhdGFiYXNlTmFtZSwgX2NvbGxlY3Rpb25OYW1lLCBfYWN0aXZlVGFiLCBfc2VsZWN0ZWREb2N1bWVudElkLCBfc3RhdHM7CnZhciB7IGh0bWw6IGh0bWwxMywgY3NzOiBjc3M4LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyOCwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDcsIHByb3BlcnR5OiBwcm9wZXJ0eTYsIHN0YXRlOiBzdGF0ZTcsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDggfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0Jyb3dzZXJfZGVjb3JhdG9ycyA9IFtjdXN0b21FbGVtZW50NygidHN2aWV3LW1vbmdvLWJyb3dzZXIiKV07CnZhciBUc3ZpZXdNb25nb0Jyb3dzZXIgPSBjbGFzcyBleHRlbmRzIChfYTkgPSBEZWVzRWxlbWVudDgsIF9kYXRhYmFzZU5hbWVfZGVjID0gW3Byb3BlcnR5Nih7IHR5cGU6IFN0cmluZyB9KV0sIF9jb2xsZWN0aW9uTmFtZV9kZWMgPSBbcHJvcGVydHk2KHsgdHlwZTogU3RyaW5nIH0pXSwgX2FjdGl2ZVRhYl9kZWMgPSBbc3RhdGU3KCldLCBfc2VsZWN0ZWREb2N1bWVudElkX2RlYyA9IFtzdGF0ZTcoKV0sIF9zdGF0c19kZWMgPSBbc3RhdGU3KCldLCBfYTkpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9hY3RpdmVUYWIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTYsIHRoaXMsICJkb2N1bWVudHMiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zZWxlY3RlZERvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zdGF0cywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ2LCAyNCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDYsIDI3LCB0aGlzKTsKICB9CiAgYXN5bmMgY29ubmVjdGVkQ2FsbGJhY2soKSB7CiAgICBzdXBlci5jb25uZWN0ZWRDYWxsYmFjaygpOwogICAgYXdhaXQgdGhpcy5sb2FkU3RhdHMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZGF0YWJhc2VOYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjb2xsZWN0aW9uTmFtZSIpKSB7CiAgICAgIHRoaXMubG9hZFN0YXRzKCk7CiAgICAgIHRoaXMuc2VsZWN0ZWREb2N1bWVudElkID0gIiI7CiAgICB9CiAgfQogIGFzeW5jIGxvYWRTdGF0cygpIHsKICAgIGlmICghdGhpcy5kYXRhYmFzZU5hbWUgfHwgIXRoaXMuY29sbGVjdGlvbk5hbWUpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIHRoaXMuc3RhdHMgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldENvbGxlY3Rpb25TdGF0cyh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBzdGF0czoiLCBlcnIpOwogICAgICB0aGlzLnN0YXRzID0gbnVsbDsKICAgIH0KICB9CiAgc2V0QWN0aXZlVGFiKHRhYjIpIHsKICAgIHRoaXMuYWN0aXZlVGFiID0gdGFiMjsKICB9CiAgaGFuZGxlRG9jdW1lbnRTZWxlY3RlZChlMTEpIHsKICAgIHRoaXMuc2VsZWN0ZWREb2N1bWVudElkID0gZTExLmRldGFpbC5kb2N1bWVudElkOwogIH0KICByZW5kZXIoKSB7CiAgICByZXR1cm4gaHRtbDEzYAogICAgICA8ZGl2IGNsYXNzPSJicm93c2VyLWNvbnRhaW5lciI+CiAgICAgICAgPGRpdiBjbGFzcz0iaGVhZGVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbGxlY3Rpb24taW5mbyI+CiAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJjb2xsZWN0aW9uLXRpdGxlIj4ke3RoaXMuY29sbGVjdGlvbk5hbWV9PC9zcGFuPgogICAgICAgICAgICAke3RoaXMuc3RhdHMgPyBodG1sMTNgCiAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImNvbGxlY3Rpb24tc3RhdHMiPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWl0ZW0iPiR7Zm9ybWF0Q291bnQodGhpcy5zdGF0cy5jb3VudCl9IGRvY3M8L3NwYW4+CiAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9InN0YXQtaXRlbSI+JHtmb3JtYXRTaXplKHRoaXMuc3RhdHMuc2l6ZSl9PC9zcGFuPgogICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJzdGF0LWl0ZW0iPiR7dGhpcy5zdGF0cy5pbmRleENvdW50fSBpbmRleGVzPC9zcGFuPgogICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgIGAgOiAiIn0KICAgICAgICAgIDwvZGl2PgoKICAgICAgICAgIDxkaXYgY2xhc3M9InRhYnMiPgogICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgY2xhc3M9InRhYiAke3RoaXMuYWN0aXZlVGFiID09PSAiZG9jdW1lbnRzIiA/ICJhY3RpdmUiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2V0QWN0aXZlVGFiKCJkb2N1bWVudHMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIERvY3VtZW50cwogICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgPGJ1dHRvbgogICAgICAgICAgICAgIGNsYXNzPSJ0YWIgJHt0aGlzLmFjdGl2ZVRhYiA9PT0gImluZGV4ZXMiID8gImFjdGl2ZSIgOiAiIn0iCiAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5zZXRBY3RpdmVUYWIoImluZGV4ZXMiKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEluZGV4ZXMKICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICBjbGFzcz0idGFiICR7dGhpcy5hY3RpdmVUYWIgPT09ICJhZ2dyZWdhdGlvbiIgPyAiYWN0aXZlIiA6ICIifSIKICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNldEFjdGl2ZVRhYigiYWdncmVnYXRpb24iKX0KICAgICAgICAgICAgPgogICAgICAgICAgICAgIEFnZ3JlZ2F0aW9uCiAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImNvbnRlbnQiPgogICAgICAgICAgPGRpdiBjbGFzcz0ibWFpbi1wYW5lbCI+CiAgICAgICAgICAgICR7dGhpcy5hY3RpdmVUYWIgPT09ICJkb2N1bWVudHMiID8gaHRtbDEzYAogICAgICAgICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWRvY3VtZW50cwogICAgICAgICAgICAgICAgICAgIC5kYXRhYmFzZU5hbWU9JHt0aGlzLmRhdGFiYXNlTmFtZX0KICAgICAgICAgICAgICAgICAgICAuY29sbGVjdGlvbk5hbWU9JHt0aGlzLmNvbGxlY3Rpb25OYW1lfQogICAgICAgICAgICAgICAgICAgIEBkb2N1bWVudC1zZWxlY3RlZD0ke3RoaXMuaGFuZGxlRG9jdW1lbnRTZWxlY3RlZH0KICAgICAgICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWRvY3VtZW50cz4KICAgICAgICAgICAgICAgIGAgOiB0aGlzLmFjdGl2ZVRhYiA9PT0gImluZGV4ZXMiID8gaHRtbDEzYAogICAgICAgICAgICAgICAgICAgIDx0c3ZpZXctbW9uZ28taW5kZXhlcwogICAgICAgICAgICAgICAgICAgICAgLmRhdGFiYXNlTmFtZT0ke3RoaXMuZGF0YWJhc2VOYW1lfQogICAgICAgICAgICAgICAgICAgICAgLmNvbGxlY3Rpb25OYW1lPSR7dGhpcy5jb2xsZWN0aW9uTmFtZX0KICAgICAgICAgICAgICAgICAgICA+PC90c3ZpZXctbW9uZ28taW5kZXhlcz4KICAgICAgICAgICAgICAgICAgYCA6IGh0bWwxM2AKICAgICAgICAgICAgICAgICAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nOiAyNHB4OyB0ZXh0LWFsaWduOiBjZW50ZXI7IGNvbG9yOiAjNjY2OyI+CiAgICAgICAgICAgICAgICAgICAgICBBZ2dyZWdhdGlvbiBwaXBlbGluZSBidWlsZGVyIGNvbWluZyBzb29uCiAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICA8ZGl2IGNsYXNzPSJkZXRhaWwtcGFuZWwiPgogICAgICAgICAgICA8dHN2aWV3LW1vbmdvLWRvY3VtZW50CiAgICAgICAgICAgICAgLmRhdGFiYXNlTmFtZT0ke3RoaXMuZGF0YWJhc2VOYW1lfQogICAgICAgICAgICAgIC5jb2xsZWN0aW9uTmFtZT0ke3RoaXMuY29sbGVjdGlvbk5hbWV9CiAgICAgICAgICAgICAgLmRvY3VtZW50SWQ9JHt0aGlzLnNlbGVjdGVkRG9jdW1lbnRJZH0KICAgICAgICAgICAgPjwvdHN2aWV3LW1vbmdvLWRvY3VtZW50PgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0NiA9IF9fZGVjb3JhdG9yU3RhcnQoX2E5KTsKX2RhdGFiYXNlTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9jb2xsZWN0aW9uTmFtZSA9IG5ldyBXZWFrTWFwKCk7Cl9hY3RpdmVUYWIgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWREb2N1bWVudElkID0gbmV3IFdlYWtNYXAoKTsKX3N0YXRzID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWMsIFRzdmlld01vbmdvQnJvd3NlciwgX2RhdGFiYXNlTmFtZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgImNvbGxlY3Rpb25OYW1lIiwgX2NvbGxlY3Rpb25OYW1lX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfY29sbGVjdGlvbk5hbWUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDQsICJhY3RpdmVUYWIiLCBfYWN0aXZlVGFiX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfYWN0aXZlVGFiKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ2LCA0LCAic2VsZWN0ZWREb2N1bWVudElkIiwgX3NlbGVjdGVkRG9jdW1lbnRJZF9kZWMsIFRzdmlld01vbmdvQnJvd3NlciwgX3NlbGVjdGVkRG9jdW1lbnRJZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NiwgNCwgInN0YXRzIiwgX3N0YXRzX2RlYywgVHN2aWV3TW9uZ29Ccm93c2VyLCBfc3RhdHMpOwpUc3ZpZXdNb25nb0Jyb3dzZXIgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDYsIDAsICJUc3ZpZXdNb25nb0Jyb3dzZXIiLCBfVHN2aWV3TW9uZ29Ccm93c2VyX2RlY29yYXRvcnMsIFRzdmlld01vbmdvQnJvd3Nlcik7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Ccm93c2VyLCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXI4LmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzOGAKICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgfQoKICAgICAgLmJyb3dzZXItY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxNnB4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi10aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAxNnB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiA1MDA7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLXN0YXRzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTZweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5zdGF0LWl0ZW0gewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDRweDsKICAgICAgfQoKICAgICAgLnRhYnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA0cHg7CiAgICAgIH0KCiAgICAgIC50YWIgewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogbm9uZTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICB0cmFuc2l0aW9uOiBhbGwgMC4xNXM7CiAgICAgIH0KCiAgICAgIC50YWI6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgICAgY29sb3I6ICNhYWE7CiAgICAgIH0KCiAgICAgIC50YWIuYWN0aXZlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb250ZW50IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIGRpc3BsYXk6IGdyaWQ7CiAgICAgICAgZ3JpZC10ZW1wbGF0ZS1jb2x1bW5zOiAxZnIgNDAwcHg7CiAgICAgICAgZ2FwOiAxNnB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIC5tYWluLXBhbmVsIHsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICB9CgogICAgICAuZGV0YWlsLXBhbmVsIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMik7CiAgICAgICAgYm9yZGVyLXJhZGl1czogOHB4OwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIH0KCiAgICAgIEBtZWRpYSAobWF4LXdpZHRoOiAxMjAwcHgpIHsKICAgICAgICAuY29udGVudCB7CiAgICAgICAgICBncmlkLXRlbXBsYXRlLWNvbHVtbnM6IDFmcjsKICAgICAgICB9CgogICAgICAgIC5kZXRhaWwtcGFuZWwgewogICAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB9CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NiwgMSwgVHN2aWV3TW9uZ29Ccm93c2VyKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tY29sbGVjdGlvbnMudHMKdmFyIF9sb2FkaW5nX2RlYzQsIF9jb2xsZWN0aW9uc19kZWMsIF9zZWxlY3RlZENvbGxlY3Rpb25fZGVjMiwgX2RhdGFiYXNlTmFtZV9kZWMyLCBfYTEwLCBfVHN2aWV3TW9uZ29Db2xsZWN0aW9uc19kZWNvcmF0b3JzLCBfaW5pdDcsIF9kYXRhYmFzZU5hbWUyLCBfc2VsZWN0ZWRDb2xsZWN0aW9uMiwgX2NvbGxlY3Rpb25zLCBfbG9hZGluZzQ7CnZhciB7IGh0bWw6IGh0bWwxNCwgY3NzOiBjc3M5LCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyOSwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDgsIHByb3BlcnR5OiBwcm9wZXJ0eTcsIHN0YXRlOiBzdGF0ZTgsIERlZXNFbGVtZW50OiBEZWVzRWxlbWVudDkgfSA9IHBsdWdpbnNfZXhwb3J0czU7CnZhciB7IERlZXNDb250ZXh0bWVudTogRGVlc0NvbnRleHRtZW51NSB9ID0gZGlzdF90c193ZWJfZXhwb3J0czI7Cl9Uc3ZpZXdNb25nb0NvbGxlY3Rpb25zX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDgoInRzdmlldy1tb25nby1jb2xsZWN0aW9ucyIpXTsKdmFyIFRzdmlld01vbmdvQ29sbGVjdGlvbnMgPSBjbGFzcyBleHRlbmRzIChfYTEwID0gRGVlc0VsZW1lbnQ5LCBfZGF0YWJhc2VOYW1lX2RlYzIgPSBbcHJvcGVydHk3KHsgdHlwZTogU3RyaW5nIH0pXSwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMyID0gW3Byb3BlcnR5Nyh7IHR5cGU6IFN0cmluZyB9KV0sIF9jb2xsZWN0aW9uc19kZWMgPSBbc3RhdGU4KCldLCBfbG9hZGluZ19kZWM0ID0gW3N0YXRlOCgpXSwgX2ExMCkgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YWJhc2VOYW1lMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfc2VsZWN0ZWRDb2xsZWN0aW9uMiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbGxlY3Rpb25zLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDE2LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDcsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMjAsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0NywgMjMsIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWRDb2xsZWN0aW9ucygpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkYXRhYmFzZU5hbWUiKSkgewogICAgICB0aGlzLmxvYWRDb2xsZWN0aW9ucygpOwogICAgfQogIH0KICBhc3luYyBsb2FkQ29sbGVjdGlvbnMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgdGhpcy5jb2xsZWN0aW9ucyA9IGF3YWl0IGFwaVNlcnZpY2UubGlzdENvbGxlY3Rpb25zKHRoaXMuZGF0YWJhc2VOYW1lKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBsb2FkaW5nIGNvbGxlY3Rpb25zOiIsIGVycik7CiAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSBbXTsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBzZWxlY3RDb2xsZWN0aW9uKG5hbWUpIHsKICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgbmV3IEN1c3RvbUV2ZW50KCJjb2xsZWN0aW9uLXNlbGVjdGVkIiwgewogICAgICAgIGRldGFpbDogbmFtZSwKICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgIH0pCiAgICApOwogIH0KICBhc3luYyBkZWxldGVDb2xsZWN0aW9uKG5hbWUpIHsKICAgIGlmICghY29uZmlybShgRGVsZXRlIGNvbGxlY3Rpb24gIiR7bmFtZX0iPyBUaGlzIHdpbGwgZGVsZXRlIGFsbCBkb2N1bWVudHMuYCkpIHJldHVybjsKICAgIGNvbnN0IHN1Y2Nlc3MgPSBhd2FpdCBhcGlTZXJ2aWNlLmRyb3BDb2xsZWN0aW9uKHRoaXMuZGF0YWJhc2VOYW1lLCBuYW1lKTsKICAgIGlmIChzdWNjZXNzKSB7CiAgICAgIHRoaXMuY29sbGVjdGlvbnMgPSB0aGlzLmNvbGxlY3Rpb25zLmZpbHRlcigoYzExKSA9PiBjMTEubmFtZSAhPT0gbmFtZSk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImNvbGxlY3Rpb24tZGVsZXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkYXRhYmFzZU5hbWU6IHRoaXMuZGF0YWJhc2VOYW1lLCBjb2xsZWN0aW9uTmFtZTogbmFtZSB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0KICB9CiAgaGFuZGxlQ29sbGVjdGlvbkNvbnRleHRNZW51KGV2ZW50LCBjb2xsZWN0aW9uKSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgRGVlc0NvbnRleHRtZW51NS5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIlZpZXcgRG9jdW1lbnRzIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpmaWxlVGV4dCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdENvbGxlY3Rpb24oY29sbGVjdGlvbi5uYW1lKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsgZGl2aWRlcjogdHJ1ZSB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkRlbGV0ZSBDb2xsZWN0aW9uIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTp0cmFzaDIiLAogICAgICAgIGFjdGlvbjogYXN5bmMgKCkgPT4gewogICAgICAgICAgYXdhaXQgdGhpcy5kZWxldGVDb2xsZWN0aW9uKGNvbGxlY3Rpb24ubmFtZSk7CiAgICAgICAgfQogICAgICB9CiAgICBdKTsKICB9CiAgYXN5bmMgcmVmcmVzaCgpIHsKICAgIGF3YWl0IHRoaXMubG9hZENvbGxlY3Rpb25zKCk7CiAgfQogIHJlbmRlcigpIHsKICAgIGlmICh0aGlzLmxvYWRpbmcpIHsKICAgICAgcmV0dXJuIGh0bWwxNGA8ZGl2IGNsYXNzPSJsb2FkaW5nLXN0YXRlIj5Mb2FkaW5nIGNvbGxlY3Rpb25zLi4uPC9kaXY+YDsKICAgIH0KICAgIGlmICh0aGlzLmNvbGxlY3Rpb25zLmxlbmd0aCA9PT0gMCkgewogICAgICByZXR1cm4gaHRtbDE0YDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBjb2xsZWN0aW9uczwvZGl2PmA7CiAgICB9CiAgICByZXR1cm4gaHRtbDE0YAogICAgICA8ZGl2IGNsYXNzPSJjb2xsZWN0aW9ucy1saXN0Ij4KICAgICAgICAke3RoaXMuY29sbGVjdGlvbnMubWFwKAogICAgICAoY29sbCkgPT4gaHRtbDE0YAogICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgY2xhc3M9ImNvbGxlY3Rpb24taXRlbSAke3RoaXMuc2VsZWN0ZWRDb2xsZWN0aW9uID09PSBjb2xsLm5hbWUgPyAic2VsZWN0ZWQiIDogIiJ9IgogICAgICAgICAgICAgIEBjbGljaz0keygpID0+IHRoaXMuc2VsZWN0Q29sbGVjdGlvbihjb2xsLm5hbWUpfQogICAgICAgICAgICAgIEBjb250ZXh0bWVudT0keyhlMTEpID0+IHRoaXMuaGFuZGxlQ29sbGVjdGlvbkNvbnRleHRNZW51KGUxMSwgY29sbCl9CiAgICAgICAgICAgID4KICAgICAgICAgICAgICA8c3BhbiBjbGFzcz0iY29sbGVjdGlvbi1uYW1lIj4KICAgICAgICAgICAgICAgIDxzdmcgY2xhc3M9ImNvbGxlY3Rpb24taWNvbiIgdmlld0JveD0iMCAwIDI0IDI0IiBmaWxsPSJub25lIiBzdHJva2U9ImN1cnJlbnRDb2xvciIgc3Ryb2tlLXdpZHRoPSIyIj4KICAgICAgICAgICAgICAgICAgPHBhdGggZD0iTTIyIDE5YTIgMiAwIDAgMS0yIDJINGEyIDIgMCAwIDEtMi0yVjVhMiAyIDAgMCAxIDItMmg1bDIgM2g5YTIgMiAwIDAgMSAyIDJ6Ij48L3BhdGg+CiAgICAgICAgICAgICAgICA8L3N2Zz4KICAgICAgICAgICAgICAgICR7Y29sbC5uYW1lfQogICAgICAgICAgICAgIDwvc3Bhbj4KICAgICAgICAgICAgICAke2NvbGwuY291bnQgIT09IHZvaWQgMCA/IGh0bWwxNGA8c3BhbiBjbGFzcz0iY29sbGVjdGlvbi1jb3VudCI+JHtmb3JtYXRDb3VudChjb2xsLmNvdW50KX08L3NwYW4+YCA6ICIifQogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAKICAgICl9CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0NyA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMCk7Cl9kYXRhYmFzZU5hbWUyID0gbmV3IFdlYWtNYXAoKTsKX3NlbGVjdGVkQ29sbGVjdGlvbjIgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbnMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzQgPSBuZXcgV2Vha01hcCgpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDQsICJkYXRhYmFzZU5hbWUiLCBfZGF0YWJhc2VOYW1lX2RlYzIsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9kYXRhYmFzZU5hbWUyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAic2VsZWN0ZWRDb2xsZWN0aW9uIiwgX3NlbGVjdGVkQ29sbGVjdGlvbl9kZWMyLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zLCBfc2VsZWN0ZWRDb2xsZWN0aW9uMik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0NywgNCwgImNvbGxlY3Rpb25zIiwgX2NvbGxlY3Rpb25zX2RlYywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgX2NvbGxlY3Rpb25zKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ3LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzQsIFRzdmlld01vbmdvQ29sbGVjdGlvbnMsIF9sb2FkaW5nNCk7ClRzdmlld01vbmdvQ29sbGVjdGlvbnMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDcsIDAsICJUc3ZpZXdNb25nb0NvbGxlY3Rpb25zIiwgX1Rzdmlld01vbmdvQ29sbGVjdGlvbnNfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29Db2xsZWN0aW9ucyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Db2xsZWN0aW9ucywgInN0eWxlcyIsIFsKICBjc3NNYW5hZ2VyOS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczlgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb25zLWxpc3QgewogICAgICAgIHBhZGRpbmctbGVmdDogMTJweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taXRlbSB7CiAgICAgICAgcGFkZGluZzogNnB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogc3BhY2UtYmV0d2VlbjsKICAgICAgICB0cmFuc2l0aW9uOiBiYWNrZ3JvdW5kIDAuMXM7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW06aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wNSk7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLWl0ZW0uc2VsZWN0ZWQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4wOCk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5jb2xsZWN0aW9uLW5hbWUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDZweDsKICAgICAgfQoKICAgICAgLmNvbGxlY3Rpb24taWNvbiB7CiAgICAgICAgd2lkdGg6IDE0cHg7CiAgICAgICAgaGVpZ2h0OiAxNHB4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuY29sbGVjdGlvbi1jb3VudCB7CiAgICAgICAgZm9udC1zaXplOiAxMXB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBwYWRkaW5nOiAycHggNnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTJweDsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5lbXB0eS1zdGF0ZSB7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQ3LCAxLCBUc3ZpZXdNb25nb0NvbGxlY3Rpb25zKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tZG9jdW1lbnRzLnRzCnZhciBfc2VsZWN0ZWRJZF9kZWMsIF9maWx0ZXJUZXh0X2RlYzIsIF9sb2FkaW5nX2RlYzUsIF9wYWdlU2l6ZV9kZWMsIF9wYWdlX2RlYywgX3RvdGFsX2RlYywgX2RvY3VtZW50c19kZWMsIF9jb2xsZWN0aW9uTmFtZV9kZWMyLCBfZGF0YWJhc2VOYW1lX2RlYzMsIF9hMTEsIF9Uc3ZpZXdNb25nb0RvY3VtZW50c19kZWNvcmF0b3JzLCBfaW5pdDgsIF9kYXRhYmFzZU5hbWUzLCBfY29sbGVjdGlvbk5hbWUyLCBfZG9jdW1lbnRzLCBfdG90YWwsIF9wYWdlLCBfcGFnZVNpemUsIF9sb2FkaW5nNSwgX2ZpbHRlclRleHQyLCBfc2VsZWN0ZWRJZDsKdmFyIHsgaHRtbDogaHRtbDE1LCBjc3M6IGNzczEwLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTAsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQ5LCBwcm9wZXJ0eTogcHJvcGVydHk4LCBzdGF0ZTogc3RhdGU5LCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMCB9ID0gcGx1Z2luc19leHBvcnRzNTsKdmFyIHsgRGVlc0NvbnRleHRtZW51OiBEZWVzQ29udGV4dG1lbnU2IH0gPSBkaXN0X3RzX3dlYl9leHBvcnRzMjsKX1Rzdmlld01vbmdvRG9jdW1lbnRzX2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDkoInRzdmlldy1tb25nby1kb2N1bWVudHMiKV07CnZhciBUc3ZpZXdNb25nb0RvY3VtZW50cyA9IGNsYXNzIGV4dGVuZHMgKF9hMTEgPSBEZWVzRWxlbWVudDEwLCBfZGF0YWJhc2VOYW1lX2RlYzMgPSBbcHJvcGVydHk4KHsgdHlwZTogU3RyaW5nIH0pXSwgX2NvbGxlY3Rpb25OYW1lX2RlYzIgPSBbcHJvcGVydHk4KHsgdHlwZTogU3RyaW5nIH0pXSwgX2RvY3VtZW50c19kZWMgPSBbc3RhdGU5KCldLCBfdG90YWxfZGVjID0gW3N0YXRlOSgpXSwgX3BhZ2VfZGVjID0gW3N0YXRlOSgpXSwgX3BhZ2VTaXplX2RlYyA9IFtzdGF0ZTkoKV0sIF9sb2FkaW5nX2RlYzUgPSBbc3RhdGU5KCldLCBfZmlsdGVyVGV4dF9kZWMyID0gW3N0YXRlOSgpXSwgX3NlbGVjdGVkSWRfZGVjID0gW3N0YXRlOSgpXSwgX2ExMSkgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YWJhc2VOYW1lMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCA4LCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDExLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfY29sbGVjdGlvbk5hbWUyLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDE1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZG9jdW1lbnRzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDE2LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDE5LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfdG90YWwsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMjAsIHRoaXMsIDApKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyMywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3BhZ2UsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMjQsIHRoaXMsIDEpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAyNywgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3BhZ2VTaXplLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDI4LCB0aGlzLCA1MCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzUsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9maWx0ZXJUZXh0MiwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzNiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ4LCAzOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX3NlbGVjdGVkSWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgNDAsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OCwgNDMsIHRoaXMpOwogIH0KICBhc3luYyBjb25uZWN0ZWRDYWxsYmFjaygpIHsKICAgIHN1cGVyLmNvbm5lY3RlZENhbGxiYWNrKCk7CiAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudHMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZGF0YWJhc2VOYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjb2xsZWN0aW9uTmFtZSIpKSB7CiAgICAgIHRoaXMucGFnZSA9IDE7CiAgICAgIHRoaXMubG9hZERvY3VtZW50cygpOwogICAgfQogIH0KICBhc3luYyBsb2FkRG9jdW1lbnRzKCkgewogICAgaWYgKCF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRyeSB7CiAgICAgIGxldCBmaWx0ZXIyID0ge307CiAgICAgIGlmICh0aGlzLmZpbHRlclRleHQudHJpbSgpKSB7CiAgICAgICAgdHJ5IHsKICAgICAgICAgIGZpbHRlcjIgPSBKU09OLnBhcnNlKHRoaXMuZmlsdGVyVGV4dCk7CiAgICAgICAgfSBjYXRjaCB7CiAgICAgICAgfQogICAgICB9CiAgICAgIGNvbnN0IHJlc3VsdCA9IGF3YWl0IGFwaVNlcnZpY2UuZmluZERvY3VtZW50cygKICAgICAgICB0aGlzLmRhdGFiYXNlTmFtZSwKICAgICAgICB0aGlzLmNvbGxlY3Rpb25OYW1lLAogICAgICAgIHsKICAgICAgICAgIGZpbHRlcjogZmlsdGVyMiwKICAgICAgICAgIHNraXA6ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUsCiAgICAgICAgICBsaW1pdDogdGhpcy5wYWdlU2l6ZQogICAgICAgIH0KICAgICAgKTsKICAgICAgdGhpcy5kb2N1bWVudHMgPSByZXN1bHQuZG9jdW1lbnRzOwogICAgICB0aGlzLnRvdGFsID0gcmVzdWx0LnRvdGFsOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGxvYWRpbmcgZG9jdW1lbnRzOiIsIGVycik7CiAgICAgIHRoaXMuZG9jdW1lbnRzID0gW107CiAgICAgIHRoaXMudG90YWwgPSAwOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIGhhbmRsZUZpbHRlcklucHV0KGUxMSkgewogICAgdGhpcy5maWx0ZXJUZXh0ID0gZTExLnRhcmdldC52YWx1ZTsKICB9CiAgaGFuZGxlRmlsdGVyU3VibWl0KCkgewogICAgdGhpcy5wYWdlID0gMTsKICAgIHRoaXMubG9hZERvY3VtZW50cygpOwogIH0KICBoYW5kbGVLZXlQcmVzcyhlMTEpIHsKICAgIGlmIChlMTEua2V5ID09PSAiRW50ZXIiKSB7CiAgICAgIHRoaXMuaGFuZGxlRmlsdGVyU3VibWl0KCk7CiAgICB9CiAgfQogIHNlbGVjdERvY3VtZW50KGRvYykgewogICAgY29uc3QgaWQgPSBkb2MuX2lkIHx8ICIiOwogICAgdGhpcy5zZWxlY3RlZElkID0gaWQ7CiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtc2VsZWN0ZWQiLCB7CiAgICAgICAgZGV0YWlsOiB7IGRvY3VtZW50SWQ6IGlkLCBkb2N1bWVudDogZG9jIH0sCiAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICB9KQogICAgKTsKICB9CiAgZ29Ub1BhZ2UocGFnZU51bSkgewogICAgdGhpcy5wYWdlID0gcGFnZU51bTsKICAgIHRoaXMubG9hZERvY3VtZW50cygpOwogIH0KICBnZXREb2N1bWVudFByZXZpZXcoZG9jKSB7CiAgICBjb25zdCBwcmV2aWV3ID0ge307CiAgICBjb25zdCBrZXlzMiA9IE9iamVjdC5rZXlzKGRvYykuZmlsdGVyKChrNCkgPT4gazQgIT09ICJfaWQiKTsKICAgIGZvciAoY29uc3Qga2V5MiBvZiBrZXlzMi5zbGljZSgwLCAzKSkgewogICAgICBwcmV2aWV3W2tleTJdID0gZG9jW2tleTJdOwogICAgfQogICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KHByZXZpZXcpOwogIH0KICBnZXQgdG90YWxQYWdlcygpIHsKICAgIHJldHVybiBNYXRoLmNlaWwodGhpcy50b3RhbCAvIHRoaXMucGFnZVNpemUpOwogIH0KICBhc3luYyBoYW5kbGVJbnNlcnROZXcoKSB7CiAgICBjb25zdCBuZXdEb2MgPSB7CiAgICAgIC8vIERlZmF1bHQgZW1wdHkgZG9jdW1lbnQKICAgICAgY3JlYXRlZEF0OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkKICAgIH07CiAgICB0cnkgewogICAgICBjb25zdCBpbnNlcnRlZElkID0gYXdhaXQgYXBpU2VydmljZS5pbnNlcnREb2N1bWVudCgKICAgICAgICB0aGlzLmRhdGFiYXNlTmFtZSwKICAgICAgICB0aGlzLmNvbGxlY3Rpb25OYW1lLAogICAgICAgIG5ld0RvYwogICAgICApOwogICAgICBhd2FpdCB0aGlzLmxvYWREb2N1bWVudHMoKTsKICAgICAgdGhpcy5zZWxlY3RlZElkID0gaW5zZXJ0ZWRJZDsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtc2VsZWN0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogaW5zZXJ0ZWRJZCB9LAogICAgICAgICAgYnViYmxlczogdHJ1ZSwKICAgICAgICAgIGNvbXBvc2VkOiB0cnVlCiAgICAgICAgfSkKICAgICAgKTsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBpbnNlcnRpbmcgZG9jdW1lbnQ6IiwgZXJyKTsKICAgIH0KICB9CiAgaGFuZGxlRG9jdW1lbnRDb250ZXh0TWVudShldmVudCwgZG9jKSB7CiAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpOwogICAgY29uc3QgZG9jSWQgPSBkb2MuX2lkOwogICAgRGVlc0NvbnRleHRtZW51Ni5vcGVuQ29udGV4dE1lbnVXaXRoT3B0aW9ucyhldmVudCwgWwogICAgICB7CiAgICAgICAgbmFtZTogIlZpZXcvRWRpdCIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6ZWRpdCIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICB0aGlzLnNlbGVjdERvY3VtZW50KGRvYyk7CiAgICAgICAgfQogICAgICB9LAogICAgICB7CiAgICAgICAgbmFtZTogIkNvcHkgYXMgSlNPTiIsCiAgICAgICAgaWNvbk5hbWU6ICJsdWNpZGU6Y29weSIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBhd2FpdCBuYXZpZ2F0b3IuY2xpcGJvYXJkLndyaXRlVGV4dChKU09OLnN0cmluZ2lmeShkb2MsIG51bGwsIDIpKTsKICAgICAgICB9CiAgICAgIH0sCiAgICAgIHsKICAgICAgICBuYW1lOiAiRHVwbGljYXRlIiwKICAgICAgICBpY29uTmFtZTogImx1Y2lkZTpjb3B5UGx1cyIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBjb25zdCB7IF9pZCwgLi4uZG9jV2l0aG91dElkIH0gPSBkb2M7CiAgICAgICAgICBjb25zdCBuZXdEb2MgPSB7IC4uLmRvY1dpdGhvdXRJZCwgY3JlYXRlZEF0OiAoLyogQF9fUFVSRV9fICovIG5ldyBEYXRlKCkpLnRvSVNPU3RyaW5nKCkgfTsKICAgICAgICAgIHRyeSB7CiAgICAgICAgICAgIGNvbnN0IGluc2VydGVkSWQgPSBhd2FpdCBhcGlTZXJ2aWNlLmluc2VydERvY3VtZW50KAogICAgICAgICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgICAgICAgbmV3RG9jCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWQgPSBpbnNlcnRlZElkOwogICAgICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoCiAgICAgICAgICAgICAgbmV3IEN1c3RvbUV2ZW50KCJkb2N1bWVudC1zZWxlY3RlZCIsIHsKICAgICAgICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiBpbnNlcnRlZElkIH0sCiAgICAgICAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICAgICAgICB9KQogICAgICAgICAgICApOwogICAgICAgICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGR1cGxpY2F0aW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgICAgICB9CiAgICAgICAgfQogICAgICB9LAogICAgICB7IGRpdmlkZXI6IHRydWUgfSwKICAgICAgewogICAgICAgIG5hbWU6ICJEZWxldGUiLAogICAgICAgIGljb25OYW1lOiAibHVjaWRlOnRyYXNoMiIsCiAgICAgICAgYWN0aW9uOiBhc3luYyAoKSA9PiB7CiAgICAgICAgICBpZiAoY29uZmlybShgRGVsZXRlIGRvY3VtZW50ICIke2RvY0lkfSI/YCkpIHsKICAgICAgICAgICAgY29uc3QgcmVzdWx0ID0gYXdhaXQgYXBpU2VydmljZS5kZWxldGVEb2N1bWVudCgKICAgICAgICAgICAgICB0aGlzLmRhdGFiYXNlTmFtZSwKICAgICAgICAgICAgICB0aGlzLmNvbGxlY3Rpb25OYW1lLAogICAgICAgICAgICAgIGRvY0lkCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIGlmIChyZXN1bHQuc3VjY2VzcykgewogICAgICAgICAgICAgIGF3YWl0IHRoaXMubG9hZERvY3VtZW50cygpOwogICAgICAgICAgICAgIGlmICh0aGlzLnNlbGVjdGVkSWQgPT09IGRvY0lkKSB7CiAgICAgICAgICAgICAgICB0aGlzLnNlbGVjdGVkSWQgPSAiIjsKICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgIH0KICAgICAgICB9CiAgICAgIH0KICAgIF0pOwogIH0KICByZW5kZXIoKSB7CiAgICBjb25zdCBzdGFydFJlY29yZCA9ICh0aGlzLnBhZ2UgLSAxKSAqIHRoaXMucGFnZVNpemUgKyAxOwogICAgY29uc3QgZW5kUmVjb3JkID0gTWF0aC5taW4odGhpcy5wYWdlICogdGhpcy5wYWdlU2l6ZSwgdGhpcy50b3RhbCk7CiAgICByZXR1cm4gaHRtbDE1YAogICAgICA8ZGl2IGNsYXNzPSJkb2N1bWVudHMtY29udGFpbmVyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJmaWx0ZXItYmFyIj4KICAgICAgICAgIDxpbnB1dAogICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICBjbGFzcz0iZmlsdGVyLWlucHV0IgogICAgICAgICAgICBwbGFjZWhvbGRlcj0nRmlsdGVyOiB7ImZpZWxkIjogInZhbHVlIn0nCiAgICAgICAgICAgIC52YWx1ZT0ke3RoaXMuZmlsdGVyVGV4dH0KICAgICAgICAgICAgQGlucHV0PSR7dGhpcy5oYW5kbGVGaWx0ZXJJbnB1dH0KICAgICAgICAgICAgQGtleXByZXNzPSR7dGhpcy5oYW5kbGVLZXlQcmVzc30KICAgICAgICAgIC8+CiAgICAgICAgICA8YnV0dG9uIGNsYXNzPSJmaWx0ZXItYnRuIiBAY2xpY2s9JHt0aGlzLmhhbmRsZUZpbHRlclN1Ym1pdH0+QXBwbHk8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9ucy1iYXIiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iYWN0aW9uLWJ0biIgQGNsaWNrPSR7dGhpcy5oYW5kbGVJbnNlcnROZXd9PisgSW5zZXJ0IERvY3VtZW50PC9idXR0b24+CiAgICAgICAgPC9kaXY+CgogICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50cy1saXN0Ij4KICAgICAgICAgICR7dGhpcy5sb2FkaW5nID8gaHRtbDE1YDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj5gIDogdGhpcy5kb2N1bWVudHMubGVuZ3RoID09PSAwID8gaHRtbDE1YDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBkb2N1bWVudHMgZm91bmQ8L2Rpdj5gIDogdGhpcy5kb2N1bWVudHMubWFwKAogICAgICAoZG9jKSA9PiBodG1sMTVgCiAgICAgICAgICAgICAgICAgICAgPGRpdgogICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRvY3VtZW50LXJvdyAke3RoaXMuc2VsZWN0ZWRJZCA9PT0gZG9jLl9pZCA/ICJzZWxlY3RlZCIgOiAiIn0iCiAgICAgICAgICAgICAgICAgICAgICBAY2xpY2s9JHsoKSA9PiB0aGlzLnNlbGVjdERvY3VtZW50KGRvYyl9CiAgICAgICAgICAgICAgICAgICAgICBAY29udGV4dG1lbnU9JHsoZTExKSA9PiB0aGlzLmhhbmRsZURvY3VtZW50Q29udGV4dE1lbnUoZTExLCBkb2MpfQogICAgICAgICAgICAgICAgICAgID4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LWlkIj5faWQ6ICR7ZG9jLl9pZH08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImRvY3VtZW50LXByZXZpZXciPiR7dGhpcy5nZXREb2N1bWVudFByZXZpZXcoZG9jKX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgYAogICAgKX0KICAgICAgICA8L2Rpdj4KCiAgICAgICAgJHt0aGlzLnRvdGFsID4gMCA/IGh0bWwxNWAKICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJwYWdpbmF0aW9uIj4KICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9InBhZ2luYXRpb24taW5mbyI+CiAgICAgICAgICAgICAgICAgIFNob3dpbmcgJHtzdGFydFJlY29yZH0tJHtlbmRSZWNvcmR9IG9mICR7dGhpcy50b3RhbH0KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0icGFnaW5hdGlvbi1jb250cm9scyI+CiAgICAgICAgICAgICAgICAgIDxidXR0b24KICAgICAgICAgICAgICAgICAgICBjbGFzcz0icGFnZS1idG4iCiAgICAgICAgICAgICAgICAgICAgP2Rpc2FibGVkPSR7dGhpcy5wYWdlIDw9IDF9CiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5nb1RvUGFnZSh0aGlzLnBhZ2UgLSAxKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIFByZXZpb3VzCiAgICAgICAgICAgICAgICAgIDwvYnV0dG9uPgogICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgY2xhc3M9InBhZ2UtYnRuIgogICAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke3RoaXMucGFnZSA+PSB0aGlzLnRvdGFsUGFnZXN9CiAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5nb1RvUGFnZSh0aGlzLnBhZ2UgKyAxKX0KICAgICAgICAgICAgICAgICAgPgogICAgICAgICAgICAgICAgICAgIE5leHQKICAgICAgICAgICAgICAgICAgPC9idXR0b24+CiAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgYCA6ICIifQogICAgICA8L2Rpdj4KICAgIGA7CiAgfQp9OwpfaW5pdDggPSBfX2RlY29yYXRvclN0YXJ0KF9hMTEpOwpfZGF0YWJhc2VOYW1lMyA9IG5ldyBXZWFrTWFwKCk7Cl9jb2xsZWN0aW9uTmFtZTIgPSBuZXcgV2Vha01hcCgpOwpfZG9jdW1lbnRzID0gbmV3IFdlYWtNYXAoKTsKX3RvdGFsID0gbmV3IFdlYWtNYXAoKTsKX3BhZ2UgPSBuZXcgV2Vha01hcCgpOwpfcGFnZVNpemUgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzUgPSBuZXcgV2Vha01hcCgpOwpfZmlsdGVyVGV4dDIgPSBuZXcgV2Vha01hcCgpOwpfc2VsZWN0ZWRJZCA9IG5ldyBXZWFrTWFwKCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjMywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9kYXRhYmFzZU5hbWUzKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAiY29sbGVjdGlvbk5hbWUiLCBfY29sbGVjdGlvbk5hbWVfZGVjMiwgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9jb2xsZWN0aW9uTmFtZTIpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJkb2N1bWVudHMiLCBfZG9jdW1lbnRzX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9kb2N1bWVudHMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJ0b3RhbCIsIF90b3RhbF9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfdG90YWwpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJwYWdlIiwgX3BhZ2VfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX3BhZ2UpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJwYWdlU2l6ZSIsIF9wYWdlU2l6ZV9kZWMsIFRzdmlld01vbmdvRG9jdW1lbnRzLCBfcGFnZVNpemUpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjNSwgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9sb2FkaW5nNSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OCwgNCwgImZpbHRlclRleHQiLCBfZmlsdGVyVGV4dF9kZWMyLCBUc3ZpZXdNb25nb0RvY3VtZW50cywgX2ZpbHRlclRleHQyKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ4LCA0LCAic2VsZWN0ZWRJZCIsIF9zZWxlY3RlZElkX2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudHMsIF9zZWxlY3RlZElkKTsKVHN2aWV3TW9uZ29Eb2N1bWVudHMgPSBfX2RlY29yYXRlRWxlbWVudChfaW5pdDgsIDAsICJUc3ZpZXdNb25nb0RvY3VtZW50cyIsIF9Uc3ZpZXdNb25nb0RvY3VtZW50c19kZWNvcmF0b3JzLCBUc3ZpZXdNb25nb0RvY3VtZW50cyk7Cl9fcHVibGljRmllbGQoVHN2aWV3TW9uZ29Eb2N1bWVudHMsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjEwLmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzMTBgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmRvY3VtZW50cy1jb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogMTJweDsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICB9CgogICAgICAuZmlsdGVyLWlucHV0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmZpbHRlci1pbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAgIH0KCiAgICAgIC5maWx0ZXItaW5wdXQ6OnBsYWNlaG9sZGVyIHsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgfQoKICAgICAgLmZpbHRlci1idG4gewogICAgICAgIHBhZGRpbmc6IDhweCAxNnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDA0MDQwOwogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICB9CgogICAgICAuZmlsdGVyLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmRvY3VtZW50cy1saXN0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwogICAgICB9CgogICAgICAuZG9jdW1lbnQtcm93IHsKICAgICAgICBwYWRkaW5nOiAxMHB4IDEycHg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBtYXJnaW4tYm90dG9tOiA0cHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIHRyYW5zaXRpb246IGJhY2tncm91bmQgMC4xczsKICAgICAgfQoKICAgICAgLmRvY3VtZW50LXJvdzpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA1KTsKICAgICAgfQoKICAgICAgLmRvY3VtZW50LXJvdy5zZWxlY3RlZCB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjA4KTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTUpOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtaWQgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIG1hcmdpbi1ib3R0b206IDRweDsKICAgICAgfQoKICAgICAgLmRvY3VtZW50LXByZXZpZXcgewogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBmb250LWZhbWlseTogbW9ub3NwYWNlOwogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgICB0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKICAgICAgICBtYXgtd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIC5wYWdpbmF0aW9uIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkICMzMzM7CiAgICAgICAgZm9udC1zaXplOiAxM3B4OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAucGFnaW5hdGlvbi1pbmZvIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5wYWdpbmF0aW9uLWNvbnRyb2xzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogNHB4OwogICAgICB9CgogICAgICAucGFnZS1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0NDQ7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5wYWdlLWJ0bjpob3Zlcjpub3QoOmRpc2FibGVkKSB7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNjY2OwogICAgICAgIGNvbG9yOiAjYWFhOwogICAgICB9CgogICAgICAucGFnZS1idG46ZGlzYWJsZWQgewogICAgICAgIG9wYWNpdHk6IDAuNTsKICAgICAgICBjdXJzb3I6IG5vdC1hbGxvd2VkOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgIH0KCiAgICAgIC5sb2FkaW5nLXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmFjdGlvbnMtYmFyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgICAgcGFkZGluZzogOHB4IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMmM1NWU7CiAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICB9CiAgICBgCl0pOwpfX3J1bkluaXRpYWxpemVycyhfaW5pdDgsIDEsIFRzdmlld01vbmdvRG9jdW1lbnRzKTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28tZG9jdW1lbnQudHMKdmFyIF9lcnJvcl9kZWMyLCBfZWRpdENvbnRlbnRfZGVjLCBfZWRpdGluZ19kZWMsIF9sb2FkaW5nX2RlYzYsIF9kb2N1bWVudF9kZWMsIF9kb2N1bWVudElkX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIF9kYXRhYmFzZU5hbWVfZGVjNCwgX2ExMiwgX1Rzdmlld01vbmdvRG9jdW1lbnRfZGVjb3JhdG9ycywgX2luaXQ5LCBfZGF0YWJhc2VOYW1lNCwgX2NvbGxlY3Rpb25OYW1lMywgX2RvY3VtZW50SWQsIF9kb2N1bWVudCwgX2xvYWRpbmc2LCBfZWRpdGluZywgX2VkaXRDb250ZW50LCBfZXJyb3IyOwp2YXIgeyBodG1sOiBodG1sMTYsIGNzczogY3NzMTEsIGNzc01hbmFnZXI6IGNzc01hbmFnZXIxMSwgY3VzdG9tRWxlbWVudDogY3VzdG9tRWxlbWVudDEwLCBwcm9wZXJ0eTogcHJvcGVydHk5LCBzdGF0ZTogc3RhdGUxMCwgRGVlc0VsZW1lbnQ6IERlZXNFbGVtZW50MTEgfSA9IHBsdWdpbnNfZXhwb3J0czU7Cl9Uc3ZpZXdNb25nb0RvY3VtZW50X2RlY29yYXRvcnMgPSBbY3VzdG9tRWxlbWVudDEwKCJ0c3ZpZXctbW9uZ28tZG9jdW1lbnQiKV07CnZhciBUc3ZpZXdNb25nb0RvY3VtZW50ID0gY2xhc3MgZXh0ZW5kcyAoX2ExMiA9IERlZXNFbGVtZW50MTEsIF9kYXRhYmFzZU5hbWVfZGVjNCA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjMyA9IFtwcm9wZXJ0eTkoeyB0eXBlOiBTdHJpbmcgfSldLCBfZG9jdW1lbnRJZF9kZWMgPSBbcHJvcGVydHk5KHsgdHlwZTogU3RyaW5nIH0pXSwgX2RvY3VtZW50X2RlYyA9IFtzdGF0ZTEwKCldLCBfbG9hZGluZ19kZWM2ID0gW3N0YXRlMTAoKV0sIF9lZGl0aW5nX2RlYyA9IFtzdGF0ZTEwKCldLCBfZWRpdENvbnRlbnRfZGVjID0gW3N0YXRlMTAoKV0sIF9lcnJvcl9kZWMyID0gW3N0YXRlMTAoKV0sIF9hMTIpIHsKICBjb25zdHJ1Y3RvcigpIHsKICAgIHN1cGVyKC4uLmFyZ3VtZW50cyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RhdGFiYXNlTmFtZTQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2NvbGxlY3Rpb25OYW1lMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxMiwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2RvY3VtZW50SWQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMTksIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9kb2N1bWVudCwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAyMCwgdGhpcywgbnVsbCkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDIzLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbG9hZGluZzYsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjQsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMjcsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lZGl0aW5nLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDI4LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDksIDMxLCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZWRpdENvbnRlbnQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzIsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzUsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9lcnJvcjIsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzYsIHRoaXMsICIiKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0OSwgMzksIHRoaXMpOwogIH0KICB1cGRhdGVkKGNoYW5nZWRQcm9wZXJ0aWVzKSB7CiAgICBpZiAoY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJkb2N1bWVudElkIikpIHsKICAgICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7CiAgICAgIGlmICh0aGlzLmRvY3VtZW50SWQpIHsKICAgICAgICB0aGlzLmxvYWREb2N1bWVudCgpOwogICAgICB9IGVsc2UgewogICAgICAgIHRoaXMuZG9jdW1lbnQgPSBudWxsOwogICAgICB9CiAgICB9CiAgfQogIGFzeW5jIGxvYWREb2N1bWVudCgpIHsKICAgIGlmICghdGhpcy5kb2N1bWVudElkIHx8ICF0aGlzLmRhdGFiYXNlTmFtZSB8fCAhdGhpcy5jb2xsZWN0aW9uTmFtZSkgcmV0dXJuOwogICAgdGhpcy5sb2FkaW5nID0gdHJ1ZTsKICAgIHRoaXMuZXJyb3IgPSAiIjsKICAgIHRyeSB7CiAgICAgIHRoaXMuZG9jdW1lbnQgPSBhd2FpdCBhcGlTZXJ2aWNlLmdldERvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgICB0aGlzLmVycm9yID0gIkZhaWxlZCB0byBsb2FkIGRvY3VtZW50IjsKICAgIH0KICAgIHRoaXMubG9hZGluZyA9IGZhbHNlOwogIH0KICBzdGFydEVkaXRpbmcoKSB7CiAgICB0aGlzLmVkaXRDb250ZW50ID0gSlNPTi5zdHJpbmdpZnkodGhpcy5kb2N1bWVudCwgbnVsbCwgMik7CiAgICB0aGlzLmVkaXRpbmcgPSB0cnVlOwogIH0KICBjYW5jZWxFZGl0aW5nKCkgewogICAgdGhpcy5lZGl0aW5nID0gZmFsc2U7CiAgICB0aGlzLmVkaXRDb250ZW50ID0gIiI7CiAgfQogIGFzeW5jIHNhdmVEb2N1bWVudCgpIHsKICAgIHRyeSB7CiAgICAgIGNvbnN0IHVwZGF0ZWREb2MgPSBKU09OLnBhcnNlKHRoaXMuZWRpdENvbnRlbnQpOwogICAgICBjb25zdCB7IF9pZCwgLi4udXBkYXRlRmllbGRzIH0gPSB1cGRhdGVkRG9jOwogICAgICBhd2FpdCBhcGlTZXJ2aWNlLnVwZGF0ZURvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkLAogICAgICAgIHVwZGF0ZUZpZWxkcwogICAgICApOwogICAgICB0aGlzLmVkaXRpbmcgPSBmYWxzZTsKICAgICAgYXdhaXQgdGhpcy5sb2FkRG9jdW1lbnQoKTsKICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KAogICAgICAgIG5ldyBDdXN0b21FdmVudCgiZG9jdW1lbnQtdXBkYXRlZCIsIHsKICAgICAgICAgIGRldGFpbDogeyBkb2N1bWVudElkOiB0aGlzLmRvY3VtZW50SWQgfSwKICAgICAgICAgIGJ1YmJsZXM6IHRydWUsCiAgICAgICAgICBjb21wb3NlZDogdHJ1ZQogICAgICAgIH0pCiAgICAgICk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3Igc2F2aW5nIGRvY3VtZW50OiIsIGVycik7CiAgICAgIHRoaXMuZXJyb3IgPSAiSW52YWxpZCBKU09OIG9yIHNhdmUgZmFpbGVkIjsKICAgIH0KICB9CiAgYXN5bmMgZGVsZXRlRG9jdW1lbnQoKSB7CiAgICBpZiAoIWNvbmZpcm0oIkRlbGV0ZSB0aGlzIGRvY3VtZW50PyIpKSByZXR1cm47CiAgICB0cnkgewogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmRlbGV0ZURvY3VtZW50KAogICAgICAgIHRoaXMuZGF0YWJhc2VOYW1lLAogICAgICAgIHRoaXMuY29sbGVjdGlvbk5hbWUsCiAgICAgICAgdGhpcy5kb2N1bWVudElkCiAgICAgICk7CiAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudCgKICAgICAgICBuZXcgQ3VzdG9tRXZlbnQoImRvY3VtZW50LWRlbGV0ZWQiLCB7CiAgICAgICAgICBkZXRhaWw6IHsgZG9jdW1lbnRJZDogdGhpcy5kb2N1bWVudElkIH0sCiAgICAgICAgICBidWJibGVzOiB0cnVlLAogICAgICAgICAgY29tcG9zZWQ6IHRydWUKICAgICAgICB9KQogICAgICApOwogICAgICB0aGlzLmRvY3VtZW50ID0gbnVsbDsKICAgIH0gY2F0Y2ggKGVycikgewogICAgICBjb25zb2xlLmVycm9yKCJFcnJvciBkZWxldGluZyBkb2N1bWVudDoiLCBlcnIpOwogICAgICB0aGlzLmVycm9yID0gIkRlbGV0ZSBmYWlsZWQiOwogICAgfQogIH0KICBmb3JtYXRKc29uKG9iaikgewogICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KG9iaiwgbnVsbCwgMik7CiAgfQogIHN5bnRheEhpZ2hsaWdodChqc29uKSB7CiAgICByZXR1cm4ganNvbi5yZXBsYWNlKC8iKFteIl0rKSI6L2csICc8c3BhbiBjbGFzcz0ianNvbi1rZXkiPiIkMSI8L3NwYW4+OicpLnJlcGxhY2UoLzogIihbXiJdKikiL2csICc6IDxzcGFuIGNsYXNzPSJqc29uLXN0cmluZyI+IiQxIjwvc3Bhbj4nKS5yZXBsYWNlKC86IChcZCtcLj9cZCopL2csICc6IDxzcGFuIGNsYXNzPSJqc29uLW51bWJlciI+JDE8L3NwYW4+JykucmVwbGFjZSgvOiAodHJ1ZXxmYWxzZSkvZywgJzogPHNwYW4gY2xhc3M9Impzb24tYm9vbGVhbiI+JDE8L3NwYW4+JykucmVwbGFjZSgvOiAobnVsbCkvZywgJzogPHNwYW4gY2xhc3M9Impzb24tbnVsbCI+JDE8L3NwYW4+Jyk7CiAgfQogIHJlbmRlcigpIHsKICAgIGlmICghdGhpcy5kb2N1bWVudElkKSB7CiAgICAgIHJldHVybiBodG1sMTZgCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj4KICAgICAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMjQgMjQiIGZpbGw9Im5vbmUiIHN0cm9rZT0iY3VycmVudENvbG9yIiBzdHJva2Utd2lkdGg9IjIiPgogICAgICAgICAgICAgIDxwYXRoIGQ9Ik0xNCAySDZhMiAyIDAgMCAwLTIgMnYxNmEyIDIgMCAwIDAgMiAyaDEyYTIgMiAwIDAgMCAyLTJWOHoiIC8+CiAgICAgICAgICAgICAgPHBvbHlsaW5lIHBvaW50cz0iMTQgMiAxNCA4IDIwIDgiIC8+CiAgICAgICAgICAgIDwvc3ZnPgogICAgICAgICAgICA8cD5TZWxlY3QgYSBkb2N1bWVudCB0byB2aWV3PC9wPgogICAgICAgICAgPC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICBpZiAodGhpcy5sb2FkaW5nKSB7CiAgICAgIHJldHVybiBodG1sMTZgCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImxvYWRpbmctc3RhdGUiPkxvYWRpbmcuLi48L2Rpdj4KICAgICAgICA8L2Rpdj4KICAgICAgYDsKICAgIH0KICAgIGlmICh0aGlzLmVycm9yICYmICF0aGlzLmRvY3VtZW50KSB7CiAgICAgIHJldHVybiBodG1sMTZgCiAgICAgICAgPGRpdiBjbGFzcz0iZG9jdW1lbnQtY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yLXN0YXRlIj4ke3RoaXMuZXJyb3J9PC9kaXY+CiAgICAgICAgPC9kaXY+CiAgICAgIGA7CiAgICB9CiAgICByZXR1cm4gaHRtbDE2YAogICAgICA8ZGl2IGNsYXNzPSJkb2N1bWVudC1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVhZGVyLXRpdGxlIj5Eb2N1bWVudDwvc3Bhbj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImhlYWRlci1hY3Rpb25zIj4KICAgICAgICAgICAgJHt0aGlzLmVkaXRpbmcgPyBodG1sMTZgCiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4iIEBjbGljaz0ke3RoaXMuY2FuY2VsRWRpdGluZ30+Q2FuY2VsPC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4gcHJpbWFyeSIgQGNsaWNrPSR7dGhpcy5zYXZlRG9jdW1lbnR9PlNhdmU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIGAgOiBodG1sMTZgCiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4iIEBjbGljaz0ke3RoaXMuc3RhcnRFZGl0aW5nfT5FZGl0PC9idXR0b24+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImFjdGlvbi1idG4gZGFuZ2VyIiBAY2xpY2s9JHt0aGlzLmRlbGV0ZURvY3VtZW50fT5EZWxldGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIGB9CiAgICAgICAgICA8L2Rpdj4KICAgICAgICA8L2Rpdj4KCiAgICAgICAgPGRpdiBjbGFzcz0iY29udGVudCI+CiAgICAgICAgICAke3RoaXMuZWRpdGluZyA/IGh0bWwxNmAKICAgICAgICAgICAgICAgIDx0ZXh0YXJlYQogICAgICAgICAgICAgICAgICBjbGFzcz0iZWRpdC1hcmVhIgogICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLmVkaXRDb250ZW50fQogICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLmVkaXRDb250ZW50ID0gZTExLnRhcmdldC52YWx1ZX0KICAgICAgICAgICAgICAgID48L3RleHRhcmVhPgogICAgICAgICAgICAgIGAgOiBodG1sMTZgCiAgICAgICAgICAgICAgICA8ZGl2CiAgICAgICAgICAgICAgICAgIGNsYXNzPSJqc29uLXZpZXciCiAgICAgICAgICAgICAgICAgIC5pbm5lckhUTUw9JHt0aGlzLnN5bnRheEhpZ2hsaWdodCh0aGlzLmZvcm1hdEpzb24odGhpcy5kb2N1bWVudCkpfQogICAgICAgICAgICAgICAgPjwvZGl2PgogICAgICAgICAgICAgIGB9CiAgICAgICAgPC9kaXY+CiAgICAgIDwvZGl2PgogICAgYDsKICB9Cn07Cl9pbml0OSA9IF9fZGVjb3JhdG9yU3RhcnQoX2ExMik7Cl9kYXRhYmFzZU5hbWU0ID0gbmV3IFdlYWtNYXAoKTsKX2NvbGxlY3Rpb25OYW1lMyA9IG5ldyBXZWFrTWFwKCk7Cl9kb2N1bWVudElkID0gbmV3IFdlYWtNYXAoKTsKX2RvY3VtZW50ID0gbmV3IFdlYWtNYXAoKTsKX2xvYWRpbmc2ID0gbmV3IFdlYWtNYXAoKTsKX2VkaXRpbmcgPSBuZXcgV2Vha01hcCgpOwpfZWRpdENvbnRlbnQgPSBuZXcgV2Vha01hcCgpOwpfZXJyb3IyID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZGF0YWJhc2VOYW1lIiwgX2RhdGFiYXNlTmFtZV9kZWM0LCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZGF0YWJhc2VOYW1lNCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImNvbGxlY3Rpb25OYW1lIiwgX2NvbGxlY3Rpb25OYW1lX2RlYzMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9jb2xsZWN0aW9uTmFtZTMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJkb2N1bWVudElkIiwgX2RvY3VtZW50SWRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZG9jdW1lbnRJZCk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImRvY3VtZW50IiwgX2RvY3VtZW50X2RlYywgVHN2aWV3TW9uZ29Eb2N1bWVudCwgX2RvY3VtZW50KTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAibG9hZGluZyIsIF9sb2FkaW5nX2RlYzYsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9sb2FkaW5nNik7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgNCwgImVkaXRpbmciLCBfZWRpdGluZ19kZWMsIFRzdmlld01vbmdvRG9jdW1lbnQsIF9lZGl0aW5nKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQ5LCA0LCAiZWRpdENvbnRlbnQiLCBfZWRpdENvbnRlbnRfZGVjLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZWRpdENvbnRlbnQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDksIDQsICJlcnJvciIsIF9lcnJvcl9kZWMyLCBUc3ZpZXdNb25nb0RvY3VtZW50LCBfZXJyb3IyKTsKVHN2aWV3TW9uZ29Eb2N1bWVudCA9IF9fZGVjb3JhdGVFbGVtZW50KF9pbml0OSwgMCwgIlRzdmlld01vbmdvRG9jdW1lbnQiLCBfVHN2aWV3TW9uZ29Eb2N1bWVudF9kZWNvcmF0b3JzLCBUc3ZpZXdNb25nb0RvY3VtZW50KTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0RvY3VtZW50LCAic3R5bGVzIiwgWwogIGNzc01hbmFnZXIxMS5kZWZhdWx0U3R5bGVzLAogIHRoZW1lU3R5bGVzLAogIGNzczExYAogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuZG9jdW1lbnQtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAuaGVhZGVyIHsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICAgIH0KCiAgICAgIC5oZWFkZXItdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICB9CgogICAgICAuaGVhZGVyLWFjdGlvbnMgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZ2FwOiA4cHg7CiAgICAgIH0KCiAgICAgIC5hY3Rpb24tYnRuIHsKICAgICAgICBwYWRkaW5nOiA2cHggMTJweDsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHRyYW5zaXRpb246IGFsbCAwLjE1czsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG46aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlci1jb2xvcjogIzQwNDA0MDsKICAgICAgICBjb2xvcjogI2UwZTBlMDsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4ucHJpbWFyeTpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjE1KTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjIpOwogICAgICAgIGJvcmRlci1jb2xvcjogI2VmNDQ0NDsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmFjdGlvbi1idG4uZGFuZ2VyOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDIzOSwgNjgsIDY4LCAwLjMpOwogICAgICB9CgogICAgICAuY29udGVudCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICBvdmVyZmxvdzogYXV0bzsKICAgICAgICBwYWRkaW5nOiAxMnB4OwogICAgICB9CgogICAgICAuanNvbi12aWV3IHsKICAgICAgICBmb250LWZhbWlseTogJ01vbmFjbycsICdNZW5sbycsIG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgbGluZS1oZWlnaHQ6IDEuNjsKICAgICAgICB3aGl0ZS1zcGFjZTogcHJlLXdyYXA7CiAgICAgICAgd29yZC1icmVhazogYnJlYWstYWxsOwogICAgICAgIGNvbG9yOiAjY2NjOwogICAgICB9CgogICAgICAuanNvbi1rZXkgewogICAgICAgIGNvbG9yOiAjZTBlMGUwOwogICAgICB9CgogICAgICAuanNvbi1zdHJpbmcgewogICAgICAgIGNvbG9yOiAjYTVkNmE3OwogICAgICB9CgogICAgICAuanNvbi1udW1iZXIgewogICAgICAgIGNvbG9yOiAjZmJiZjI0OwogICAgICB9CgogICAgICAuanNvbi1ib29sZWFuIHsKICAgICAgICBjb2xvcjogI2Y4NzE3MTsKICAgICAgfQoKICAgICAgLmpzb24tbnVsbCB7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC5lZGl0LWFyZWEgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuMyk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgIzQ0NDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY29sb3I6ICNmZmY7CiAgICAgICAgZm9udC1mYW1pbHk6ICdNb25hY28nLCAnTWVubG8nLCBtb25vc3BhY2U7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIGxpbmUtaGVpZ2h0OiAxLjY7CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgICByZXNpemU6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5lZGl0LWFyZWE6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgICAgYm9yZGVyLWNvbG9yOiAjNDA0MDQwOwogICAgICB9CgogICAgICAuZW1wdHktc3RhdGUgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzY2NjsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHN2ZyB7CiAgICAgICAgd2lkdGg6IDQ4cHg7CiAgICAgICAgaGVpZ2h0OiA0OHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgICAgb3BhY2l0eTogMC41OwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMTAwJTsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgfQoKICAgICAgLmVycm9yLXN0YXRlIHsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIGNvbG9yOiAjZjg3MTcxOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQogICAgYApdKTsKX19ydW5Jbml0aWFsaXplcnMoX2luaXQ5LCAxLCBUc3ZpZXdNb25nb0RvY3VtZW50KTsKCi8vIHRzX3dlYi9lbGVtZW50cy90c3ZpZXctbW9uZ28taW5kZXhlcy50cwp2YXIgX25ld0luZGV4U3BhcnNlX2RlYywgX25ld0luZGV4VW5pcXVlX2RlYywgX25ld0luZGV4S2V5c19kZWMsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzMsIF9sb2FkaW5nX2RlYzcsIF9pbmRleGVzX2RlYywgX2NvbGxlY3Rpb25OYW1lX2RlYzQsIF9kYXRhYmFzZU5hbWVfZGVjNSwgX2ExMywgX1Rzdmlld01vbmdvSW5kZXhlc19kZWNvcmF0b3JzLCBfaW5pdDEwLCBfZGF0YWJhc2VOYW1lNSwgX2NvbGxlY3Rpb25OYW1lNCwgX2luZGV4ZXMsIF9sb2FkaW5nNywgX3Nob3dDcmVhdGVEaWFsb2czLCBfbmV3SW5kZXhLZXlzLCBfbmV3SW5kZXhVbmlxdWUsIF9uZXdJbmRleFNwYXJzZTsKdmFyIHsgaHRtbDogaHRtbDE3LCBjc3M6IGNzczEyLCBjc3NNYW5hZ2VyOiBjc3NNYW5hZ2VyMTIsIGN1c3RvbUVsZW1lbnQ6IGN1c3RvbUVsZW1lbnQxMSwgcHJvcGVydHk6IHByb3BlcnR5MTAsIHN0YXRlOiBzdGF0ZTExLCBEZWVzRWxlbWVudDogRGVlc0VsZW1lbnQxMiB9ID0gcGx1Z2luc19leHBvcnRzNTsKX1Rzdmlld01vbmdvSW5kZXhlc19kZWNvcmF0b3JzID0gW2N1c3RvbUVsZW1lbnQxMSgidHN2aWV3LW1vbmdvLWluZGV4ZXMiKV07CnZhciBUc3ZpZXdNb25nb0luZGV4ZXMgPSBjbGFzcyBleHRlbmRzIChfYTEzID0gRGVlc0VsZW1lbnQxMiwgX2RhdGFiYXNlTmFtZV9kZWM1ID0gW3Byb3BlcnR5MTAoeyB0eXBlOiBTdHJpbmcgfSldLCBfY29sbGVjdGlvbk5hbWVfZGVjNCA9IFtwcm9wZXJ0eTEwKHsgdHlwZTogU3RyaW5nIH0pXSwgX2luZGV4ZXNfZGVjID0gW3N0YXRlMTEoKV0sIF9sb2FkaW5nX2RlYzcgPSBbc3RhdGUxMSgpXSwgX3Nob3dDcmVhdGVEaWFsb2dfZGVjMyA9IFtzdGF0ZTExKCldLCBfbmV3SW5kZXhLZXlzX2RlYyA9IFtzdGF0ZTExKCldLCBfbmV3SW5kZXhVbmlxdWVfZGVjID0gW3N0YXRlMTEoKV0sIF9uZXdJbmRleFNwYXJzZV9kZWMgPSBbc3RhdGUxMSgpXSwgX2ExMykgewogIGNvbnN0cnVjdG9yKCkgewogICAgc3VwZXIoLi4uYXJndW1lbnRzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfZGF0YWJhc2VOYW1lNSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMTEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9jb2xsZWN0aW9uTmFtZTQsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDEyLCB0aGlzLCAiIikpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxNSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2luZGV4ZXMsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDE2LCB0aGlzLCBbXSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAxOSwgdGhpcyk7CiAgICBfX3ByaXZhdGVBZGQodGhpcywgX2xvYWRpbmc3LCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyMCwgdGhpcywgZmFsc2UpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjMsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9zaG93Q3JlYXRlRGlhbG9nMywgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMjQsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDI3LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3SW5kZXhLZXlzLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAyOCwgdGhpcywgIiIpKSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMzEsIHRoaXMpOwogICAgX19wcml2YXRlQWRkKHRoaXMsIF9uZXdJbmRleFVuaXF1ZSwgX19ydW5Jbml0aWFsaXplcnMoX2luaXQxMCwgMzIsIHRoaXMsIGZhbHNlKSksIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDM1LCB0aGlzKTsKICAgIF9fcHJpdmF0ZUFkZCh0aGlzLCBfbmV3SW5kZXhTcGFyc2UsIF9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDM2LCB0aGlzLCBmYWxzZSkpLCBfX3J1bkluaXRpYWxpemVycyhfaW5pdDEwLCAzOSwgdGhpcyk7CiAgfQogIGFzeW5jIGNvbm5lY3RlZENhbGxiYWNrKCkgewogICAgc3VwZXIuY29ubmVjdGVkQ2FsbGJhY2soKTsKICAgIGF3YWl0IHRoaXMubG9hZEluZGV4ZXMoKTsKICB9CiAgdXBkYXRlZChjaGFuZ2VkUHJvcGVydGllcykgewogICAgaWYgKGNoYW5nZWRQcm9wZXJ0aWVzLmhhcygiZGF0YWJhc2VOYW1lIikgfHwgY2hhbmdlZFByb3BlcnRpZXMuaGFzKCJjb2xsZWN0aW9uTmFtZSIpKSB7CiAgICAgIHRoaXMubG9hZEluZGV4ZXMoKTsKICAgIH0KICB9CiAgYXN5bmMgbG9hZEluZGV4ZXMoKSB7CiAgICBpZiAoIXRoaXMuZGF0YWJhc2VOYW1lIHx8ICF0aGlzLmNvbGxlY3Rpb25OYW1lKSByZXR1cm47CiAgICB0aGlzLmxvYWRpbmcgPSB0cnVlOwogICAgdHJ5IHsKICAgICAgdGhpcy5pbmRleGVzID0gYXdhaXQgYXBpU2VydmljZS5saXN0SW5kZXhlcyh0aGlzLmRhdGFiYXNlTmFtZSwgdGhpcy5jb2xsZWN0aW9uTmFtZSk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgbG9hZGluZyBpbmRleGVzOiIsIGVycik7CiAgICAgIHRoaXMuaW5kZXhlcyA9IFtdOwogICAgfQogICAgdGhpcy5sb2FkaW5nID0gZmFsc2U7CiAgfQogIG9wZW5DcmVhdGVEaWFsb2coKSB7CiAgICB0aGlzLm5ld0luZGV4S2V5cyA9ICIiOwogICAgdGhpcy5uZXdJbmRleFVuaXF1ZSA9IGZhbHNlOwogICAgdGhpcy5uZXdJbmRleFNwYXJzZSA9IGZhbHNlOwogICAgdGhpcy5zaG93Q3JlYXRlRGlhbG9nID0gdHJ1ZTsKICB9CiAgY2xvc2VDcmVhdGVEaWFsb2coKSB7CiAgICB0aGlzLnNob3dDcmVhdGVEaWFsb2cgPSBmYWxzZTsKICB9CiAgYXN5bmMgY3JlYXRlSW5kZXgoKSB7CiAgICB0cnkgewogICAgICBjb25zdCBrZXlzMiA9IEpTT04ucGFyc2UodGhpcy5uZXdJbmRleEtleXMpOwogICAgICBhd2FpdCBhcGlTZXJ2aWNlLmNyZWF0ZUluZGV4KHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lLCBrZXlzMiwgewogICAgICAgIHVuaXF1ZTogdGhpcy5uZXdJbmRleFVuaXF1ZSwKICAgICAgICBzcGFyc2U6IHRoaXMubmV3SW5kZXhTcGFyc2UKICAgICAgfSk7CiAgICAgIHRoaXMuY2xvc2VDcmVhdGVEaWFsb2coKTsKICAgICAgYXdhaXQgdGhpcy5sb2FkSW5kZXhlcygpOwogICAgfSBjYXRjaCAoZXJyKSB7CiAgICAgIGNvbnNvbGUuZXJyb3IoIkVycm9yIGNyZWF0aW5nIGluZGV4OiIsIGVycik7CiAgICAgIGFsZXJ0KCJJbnZhbGlkIEpTT04gb3IgaW5kZXggY3JlYXRpb24gZmFpbGVkIik7CiAgICB9CiAgfQogIGFzeW5jIGRyb3BJbmRleChpbmRleE5hbWUpIHsKICAgIGlmIChpbmRleE5hbWUgPT09ICJfaWRfIikgewogICAgICBhbGVydCgiQ2Fubm90IGRyb3AgdGhlIF9pZCBpbmRleCIpOwogICAgICByZXR1cm47CiAgICB9CiAgICBpZiAoIWNvbmZpcm0oYERyb3AgaW5kZXggIiR7aW5kZXhOYW1lfSI/YCkpIHJldHVybjsKICAgIHRyeSB7CiAgICAgIGF3YWl0IGFwaVNlcnZpY2UuZHJvcEluZGV4KHRoaXMuZGF0YWJhc2VOYW1lLCB0aGlzLmNvbGxlY3Rpb25OYW1lLCBpbmRleE5hbWUpOwogICAgICBhd2FpdCB0aGlzLmxvYWRJbmRleGVzKCk7CiAgICB9IGNhdGNoIChlcnIpIHsKICAgICAgY29uc29sZS5lcnJvcigiRXJyb3IgZHJvcHBpbmcgaW5kZXg6IiwgZXJyKTsKICAgIH0KICB9CiAgZm9ybWF0S2V5cyhrZXlzMikgewogICAgcmV0dXJuIEpTT04uc3RyaW5naWZ5KGtleXMyKTsKICB9CiAgcmVuZGVyKCkgewogICAgcmV0dXJuIGh0bWwxN2AKICAgICAgPGRpdiBjbGFzcz0iaW5kZXhlcy1jb250YWluZXIiPgogICAgICAgIDxkaXYgY2xhc3M9InRvb2xiYXIiPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iY3JlYXRlLWJ0biIgQGNsaWNrPSR7dGhpcy5vcGVuQ3JlYXRlRGlhbG9nfT4rIENyZWF0ZSBJbmRleDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgoKICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleGVzLWxpc3QiPgogICAgICAgICAgJHt0aGlzLmxvYWRpbmcgPyBodG1sMTdgPGRpdiBjbGFzcz0ibG9hZGluZy1zdGF0ZSI+TG9hZGluZy4uLjwvZGl2PmAgOiB0aGlzLmluZGV4ZXMubGVuZ3RoID09PSAwID8gaHRtbDE3YDxkaXYgY2xhc3M9ImVtcHR5LXN0YXRlIj5ObyBpbmRleGVzIGZvdW5kPC9kaXY+YCA6IHRoaXMuaW5kZXhlcy5tYXAoCiAgICAgIChpZHgpID0+IGh0bWwxN2AKICAgICAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJpbmRleC1jYXJkIj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWhlYWRlciI+CiAgICAgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPSJpbmRleC1uYW1lIj4ke2lkeC5uYW1lfTwvc3Bhbj4KICAgICAgICAgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iaW5kZXgtYmFkZ2VzIj4KICAgICAgICAgICAgICAgICAgICAgICAgICAke2lkeC51bmlxdWUgPyBodG1sMTdgPHNwYW4gY2xhc3M9ImJhZGdlIHVuaXF1ZSI+dW5pcXVlPC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgICAke2lkeC5zcGFyc2UgPyBodG1sMTdgPHNwYW4gY2xhc3M9ImJhZGdlIHNwYXJzZSI+c3BhcnNlPC9zcGFuPmAgOiAiIn0KICAgICAgICAgICAgICAgICAgICAgICAgPC9kaXY+CiAgICAgICAgICAgICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWtleXMiPiR7dGhpcy5mb3JtYXRLZXlzKGlkeC5rZXlzKX08L2Rpdj4KICAgICAgICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9ImluZGV4LWFjdGlvbnMiPgogICAgICAgICAgICAgICAgICAgICAgICA8YnV0dG9uCiAgICAgICAgICAgICAgICAgICAgICAgICAgY2xhc3M9ImRyb3AtYnRuIgogICAgICAgICAgICAgICAgICAgICAgICAgID9kaXNhYmxlZD0ke2lkeC5uYW1lID09PSAiX2lkXyJ9CiAgICAgICAgICAgICAgICAgICAgICAgICAgQGNsaWNrPSR7KCkgPT4gdGhpcy5kcm9wSW5kZXgoaWR4Lm5hbWUpfQogICAgICAgICAgICAgICAgICAgICAgICA+CiAgICAgICAgICAgICAgICAgICAgICAgICAgRHJvcAogICAgICAgICAgICAgICAgICAgICAgICA8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgICAgICBgCiAgICApfQogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgICR7dGhpcy5zaG93Q3JlYXRlRGlhbG9nID8gaHRtbDE3YAogICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctb3ZlcmxheSIgQGNsaWNrPSR7dGhpcy5jbG9zZUNyZWF0ZURpYWxvZ30+CiAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nIiBAY2xpY2s9JHsoZTExKSA9PiBlMTEuc3RvcFByb3BhZ2F0aW9uKCl9PgogICAgICAgICAgICAgICAgPGRpdiBjbGFzcz0iZGlhbG9nLXRpdGxlIj5DcmVhdGUgSW5kZXg8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctZmllbGQiPgogICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImRpYWxvZy1sYWJlbCI+SW5kZXggS2V5cyAoSlNPTik8L2xhYmVsPgogICAgICAgICAgICAgICAgICA8aW5wdXQKICAgICAgICAgICAgICAgICAgICB0eXBlPSJ0ZXh0IgogICAgICAgICAgICAgICAgICAgIGNsYXNzPSJkaWFsb2ctaW5wdXQiCiAgICAgICAgICAgICAgICAgICAgcGxhY2Vob2xkZXI9J3siZmllbGQiOiAxfScKICAgICAgICAgICAgICAgICAgICAudmFsdWU9JHt0aGlzLm5ld0luZGV4S2V5c30KICAgICAgICAgICAgICAgICAgICBAaW5wdXQ9JHsoZTExKSA9PiB0aGlzLm5ld0luZGV4S2V5cyA9IGUxMS50YXJnZXQudmFsdWV9CiAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctZmllbGQiPgogICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImRpYWxvZy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIC5jaGVja2VkPSR7dGhpcy5uZXdJbmRleFVuaXF1ZX0KICAgICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB0aGlzLm5ld0luZGV4VW5pcXVlID0gZTExLnRhcmdldC5jaGVja2VkfQogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgVW5pcXVlCiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctZmllbGQiPgogICAgICAgICAgICAgICAgICA8bGFiZWwgY2xhc3M9ImRpYWxvZy1jaGVja2JveCI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0CiAgICAgICAgICAgICAgICAgICAgICB0eXBlPSJjaGVja2JveCIKICAgICAgICAgICAgICAgICAgICAgIC5jaGVja2VkPSR7dGhpcy5uZXdJbmRleFNwYXJzZX0KICAgICAgICAgICAgICAgICAgICAgIEBjaGFuZ2U9JHsoZTExKSA9PiB0aGlzLm5ld0luZGV4U3BhcnNlID0gZTExLnRhcmdldC5jaGVja2VkfQogICAgICAgICAgICAgICAgICAgIC8+CiAgICAgICAgICAgICAgICAgICAgU3BhcnNlCiAgICAgICAgICAgICAgICAgIDwvbGFiZWw+CiAgICAgICAgICAgICAgICA8L2Rpdj4KCiAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPSJkaWFsb2ctYWN0aW9ucyI+CiAgICAgICAgICAgICAgICAgIDxidXR0b24gY2xhc3M9ImRpYWxvZy1idG4gc2Vjb25kYXJ5IiBAY2xpY2s9JHt0aGlzLmNsb3NlQ3JlYXRlRGlhbG9nfT5DYW5jZWw8L2J1dHRvbj4KICAgICAgICAgICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGlhbG9nLWJ0biBwcmltYXJ5IiBAY2xpY2s9JHt0aGlzLmNyZWF0ZUluZGV4fT5DcmVhdGU8L2J1dHRvbj4KICAgICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICAgIDwvZGl2PgogICAgICAgICAgICA8L2Rpdj4KICAgICAgICAgIGAgOiAiIn0KICAgIGA7CiAgfQp9OwpfaW5pdDEwID0gX19kZWNvcmF0b3JTdGFydChfYTEzKTsKX2RhdGFiYXNlTmFtZTUgPSBuZXcgV2Vha01hcCgpOwpfY29sbGVjdGlvbk5hbWU0ID0gbmV3IFdlYWtNYXAoKTsKX2luZGV4ZXMgPSBuZXcgV2Vha01hcCgpOwpfbG9hZGluZzcgPSBuZXcgV2Vha01hcCgpOwpfc2hvd0NyZWF0ZURpYWxvZzMgPSBuZXcgV2Vha01hcCgpOwpfbmV3SW5kZXhLZXlzID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4VW5pcXVlID0gbmV3IFdlYWtNYXAoKTsKX25ld0luZGV4U3BhcnNlID0gbmV3IFdlYWtNYXAoKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgImRhdGFiYXNlTmFtZSIsIF9kYXRhYmFzZU5hbWVfZGVjNSwgVHN2aWV3TW9uZ29JbmRleGVzLCBfZGF0YWJhc2VOYW1lNSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJjb2xsZWN0aW9uTmFtZSIsIF9jb2xsZWN0aW9uTmFtZV9kZWM0LCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9jb2xsZWN0aW9uTmFtZTQpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAiaW5kZXhlcyIsIF9pbmRleGVzX2RlYywgVHN2aWV3TW9uZ29JbmRleGVzLCBfaW5kZXhlcyk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJsb2FkaW5nIiwgX2xvYWRpbmdfZGVjNywgVHN2aWV3TW9uZ29JbmRleGVzLCBfbG9hZGluZzcpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAic2hvd0NyZWF0ZURpYWxvZyIsIF9zaG93Q3JlYXRlRGlhbG9nX2RlYzMsIFRzdmlld01vbmdvSW5kZXhlcywgX3Nob3dDcmVhdGVEaWFsb2czKTsKX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgNCwgIm5ld0luZGV4S2V5cyIsIF9uZXdJbmRleEtleXNfZGVjLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9uZXdJbmRleEtleXMpOwpfX2RlY29yYXRlRWxlbWVudChfaW5pdDEwLCA0LCAibmV3SW5kZXhVbmlxdWUiLCBfbmV3SW5kZXhVbmlxdWVfZGVjLCBUc3ZpZXdNb25nb0luZGV4ZXMsIF9uZXdJbmRleFVuaXF1ZSk7Cl9fZGVjb3JhdGVFbGVtZW50KF9pbml0MTAsIDQsICJuZXdJbmRleFNwYXJzZSIsIF9uZXdJbmRleFNwYXJzZV9kZWMsIFRzdmlld01vbmdvSW5kZXhlcywgX25ld0luZGV4U3BhcnNlKTsKVHN2aWV3TW9uZ29JbmRleGVzID0gX19kZWNvcmF0ZUVsZW1lbnQoX2luaXQxMCwgMCwgIlRzdmlld01vbmdvSW5kZXhlcyIsIF9Uc3ZpZXdNb25nb0luZGV4ZXNfZGVjb3JhdG9ycywgVHN2aWV3TW9uZ29JbmRleGVzKTsKX19wdWJsaWNGaWVsZChUc3ZpZXdNb25nb0luZGV4ZXMsICJzdHlsZXMiLCBbCiAgY3NzTWFuYWdlcjEyLmRlZmF1bHRTdHlsZXMsCiAgdGhlbWVTdHlsZXMsCiAgY3NzMTJgCiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgICAgb3ZlcmZsb3c6IGhpZGRlbjsKICAgICAgfQoKICAgICAgLmluZGV4ZXMtY29udGFpbmVyIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgaGVpZ2h0OiAxMDAlOwogICAgICB9CgogICAgICAudG9vbGJhciB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIHBhZGRpbmc6IDEycHg7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICMzMzM7CiAgICAgIH0KCiAgICAgIC5jcmVhdGUtYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjIpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICMyMmM1NWU7CiAgICAgICAgY29sb3I6ICM0YWRlODA7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNnB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5jcmVhdGUtYnRuOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDM0LCAxOTcsIDk0LCAwLjMpOwogICAgICB9CgogICAgICAuaW5kZXhlcy1saXN0IHsKICAgICAgICBmbGV4OiAxOwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICAgICAgcGFkZGluZzogMTJweDsKICAgICAgfQoKICAgICAgLmluZGV4LWNhcmQgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4yKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDhweDsKICAgICAgICBwYWRkaW5nOiAxNnB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDEycHg7CiAgICAgIH0KCiAgICAgIC5pbmRleC1oZWFkZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBzcGFjZS1iZXR3ZWVuOwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAgbWFyZ2luLWJvdHRvbTogMTJweDsKICAgICAgfQoKICAgICAgLmluZGV4LW5hbWUgewogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIGNvbG9yOiAjZmZmOwogICAgICB9CgogICAgICAuaW5kZXgtYmFkZ2VzIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGdhcDogOHB4OwogICAgICB9CgogICAgICAuYmFkZ2UgewogICAgICAgIGZvbnQtc2l6ZTogMTFweDsKICAgICAgICBwYWRkaW5nOiAycHggOHB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEwcHg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuYmFkZ2UudW5pcXVlIHsKICAgICAgICBiYWNrZ3JvdW5kOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMSk7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5iYWRnZS5zcGFyc2UgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjUxLCAxOTEsIDM2LCAwLjIpOwogICAgICAgIGNvbG9yOiAjZmJiZjI0OwogICAgICB9CgogICAgICAuaW5kZXgta2V5cyB7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgwLCAwLCAwLCAwLjIpOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgICBtYXJnaW4tYm90dG9tOiAxMnB4OwogICAgICB9CgogICAgICAuaW5kZXgtYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICB9CgogICAgICAuZHJvcC1idG4gewogICAgICAgIHBhZGRpbmc6IDZweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHRyYW5zcGFyZW50OwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZjQ0NDQ7CiAgICAgICAgY29sb3I6ICNmODcxNzE7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgIC5kcm9wLWJ0bjpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyMzksIDY4LCA2OCwgMC4yKTsKICAgICAgfQoKICAgICAgLmRyb3AtYnRuOmRpc2FibGVkIHsKICAgICAgICBvcGFjaXR5OiAwLjU7CiAgICAgICAgY3Vyc29yOiBub3QtYWxsb3dlZDsKICAgICAgfQoKICAgICAgLmVtcHR5LXN0YXRlIHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGNlbnRlcjsKICAgICAgICBoZWlnaHQ6IDIwMHB4OwogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICB9CgogICAgICAubG9hZGluZy1zdGF0ZSB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwogICAgICAgIGp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICAgIGhlaWdodDogMjAwcHg7CiAgICAgICAgY29sb3I6ICM4ODg7CiAgICAgIH0KCiAgICAgIC8qIERpYWxvZyBzdHlsZXMgKi8KICAgICAgLmRpYWxvZy1vdmVybGF5IHsKICAgICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICAgICAgdG9wOiAwOwogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgcmlnaHQ6IDA7CiAgICAgICAgYm90dG9tOiAwOwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC43KTsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgICAgei1pbmRleDogMTAwMDsKICAgICAgfQoKICAgICAgLmRpYWxvZyB7CiAgICAgICAgYmFja2dyb3VuZDogIzFlMWUxZTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjMzMzOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDEycHg7CiAgICAgICAgcGFkZGluZzogMjRweDsKICAgICAgICB3aWR0aDogNDAwcHg7CiAgICAgICAgbWF4LXdpZHRoOiA5MCU7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMTZweDsKICAgICAgICBmb250LXdlaWdodDogNTAwOwogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctZmllbGQgewogICAgICAgIG1hcmdpbi1ib3R0b206IDE2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctbGFiZWwgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgICBjb2xvcjogIzg4ODsKICAgICAgICBtYXJnaW4tYm90dG9tOiA2cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctaW5wdXQgewogICAgICAgIHdpZHRoOiAxMDAlOwogICAgICAgIHBhZGRpbmc6IDhweCAxMnB4OwogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMCwgMCwgMCwgMC4zKTsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGJvcmRlci1yYWRpdXM6IDZweDsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1pbnB1dDpmb2N1cyB7CiAgICAgICAgb3V0bGluZTogbm9uZTsKICAgICAgICBib3JkZXItY29sb3I6ICM0MDQwNDA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctY2hlY2tib3ggewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgYWxpZ24taXRlbXM6IGNlbnRlcjsKICAgICAgICBnYXA6IDhweDsKICAgICAgICBmb250LXNpemU6IDEzcHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYWN0aW9ucyB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBqdXN0aWZ5LWNvbnRlbnQ6IGZsZXgtZW5kOwogICAgICAgIGdhcDogOHB4OwogICAgICAgIG1hcmdpbi10b3A6IDI0cHg7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuIHsKICAgICAgICBwYWRkaW5nOiA4cHggMTZweDsKICAgICAgICBib3JkZXItcmFkaXVzOiA2cHg7CiAgICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICAgIGZvbnQtc2l6ZTogMTNweDsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4uc2Vjb25kYXJ5IHsKICAgICAgICBiYWNrZ3JvdW5kOiB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCAjNDQ0OwogICAgICAgIGNvbG9yOiAjODg4OwogICAgICB9CgogICAgICAuZGlhbG9nLWJ0bi5zZWNvbmRhcnk6aG92ZXIgewogICAgICAgIGJvcmRlci1jb2xvcjogIzY2NjsKICAgICAgICBjb2xvcjogI2FhYTsKICAgICAgfQoKICAgICAgLmRpYWxvZy1idG4ucHJpbWFyeSB7CiAgICAgICAgYmFja2dyb3VuZDogcmdiYSgyNTUsIDI1NSwgMjU1LCAwLjEpOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM0MDQwNDA7CiAgICAgICAgY29sb3I6ICNlMGUwZTA7CiAgICAgIH0KCiAgICAgIC5kaWFsb2ctYnRuLnByaW1hcnk6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQ6IHJnYmEoMjU1LCAyNTUsIDI1NSwgMC4xNSk7CiAgICAgIH0KICAgIGAKXSk7Cl9fcnVuSW5pdGlhbGl6ZXJzKF9pbml0MTAsIDEsIFRzdmlld01vbmdvSW5kZXhlcyk7CgovLyB0c193ZWIvaW5kZXgudHMKdmFyIGluaXRBcHAgPSBhc3luYyAoKSA9PiB7CiAgY29uc29sZS5sb2coIlRzVmlldyBVSSBpbml0aWFsaXppbmcuLi4iKTsKICBhd2FpdCBjdXN0b21FbGVtZW50cy53aGVuRGVmaW5lZCgidHN2aWV3LWFwcCIpOwogIGlmICghZG9jdW1lbnQucXVlcnlTZWxlY3RvcigidHN2aWV3LWFwcCIpKSB7CiAgICBjb25zdCBhcHAgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0c3ZpZXctYXBwIik7CiAgICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGFwcCk7CiAgfQogIGNvbnNvbGUubG9nKCJUc1ZpZXcgVUkgcmVhZHkiKTsKfTsKaWYgKGRvY3VtZW50LnJlYWR5U3RhdGUgPT09ICJsb2FkaW5nIikgewogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNvbnRlbnRMb2FkZWQiLCBpbml0QXBwKTsKfSBlbHNlIHsKICBpbml0QXBwKCk7Cn0KLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9jc3MtdGFnLmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCkBsaXQvcmVhY3RpdmUtZWxlbWVudC9yZWFjdGl2ZS1lbGVtZW50LmpzOgpsaXQtaHRtbC9saXQtaHRtbC5qczoKbGl0LWVsZW1lbnQvbGl0LWVsZW1lbnQuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3Byb3BlcnR5LmpzOgpsaXQtaHRtbC9kaXJlY3RpdmUuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvdW5zYWZlLWh0bWwuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL2N1c3RvbS1lbGVtZW50LmpzOgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9zdGF0ZS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvZXZlbnQtb3B0aW9ucy5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvYmFzZS5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnkuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFsbC5qczoKQGxpdC9yZWFjdGl2ZS1lbGVtZW50L2RlY29yYXRvcnMvcXVlcnktYXN5bmMuanM6CkBsaXQvcmVhY3RpdmUtZWxlbWVudC9kZWNvcmF0b3JzL3F1ZXJ5LWFzc2lnbmVkLW5vZGVzLmpzOgpsaXQtaHRtbC9hc3luYy1kaXJlY3RpdmUuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvdW50aWwuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvYXN5bmMtcmVwbGFjZS5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9hc3luYy1hcHBlbmQuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMvcmVwZWF0LmpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTcgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBCU0QtMy1DbGF1c2UKICAgKikKCmxpdC1odG1sL2lzLXNlcnZlci5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIyIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpzd2VldC1zY3JvbGwvc3dlZXQtc2Nyb2xsLmpzOgogICgqISBAcHJlc2VydmUgc3dlZXQtc2Nyb2xsIHY0LjAuMCAtIHRzdXlvc2hpd2FkYSB8IE1JVCBMaWNlbnNlICopCiAgKCohICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCiAgICAgIENvcHlyaWdodCAoYykgTWljcm9zb2Z0IENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgogICAgICBMaWNlbnNlZCB1bmRlciB0aGUgQXBhY2hlIExpY2Vuc2UsIFZlcnNpb24gMi4wICh0aGUgIkxpY2Vuc2UiKTsgeW91IG1heSBub3QgdXNlCiAgICAgIHRoaXMgZmlsZSBleGNlcHQgaW4gY29tcGxpYW5jZSB3aXRoIHRoZSBMaWNlbnNlLiBZb3UgbWF5IG9idGFpbiBhIGNvcHkgb2YgdGhlCiAgICAgIExpY2Vuc2UgYXQgaHR0cDovL3d3dy5hcGFjaGUub3JnL2xpY2Vuc2VzL0xJQ0VOU0UtMi4wCiAgCiAgICAgIFRISVMgQ09ERSBJUyBQUk9WSURFRCBPTiBBTiAqQVMgSVMqIEJBU0lTLCBXSVRIT1VUIFdBUlJBTlRJRVMgT1IgQ09ORElUSU9OUyBPRiBBTlkKICAgICAgS0lORCwgRUlUSEVSIEVYUFJFU1MgT1IgSU1QTElFRCwgSU5DTFVESU5HIFdJVEhPVVQgTElNSVRBVElPTiBBTlkgSU1QTElFRAogICAgICBXQVJSQU5USUVTIE9SIENPTkRJVElPTlMgT0YgVElUTEUsIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLAogICAgICBNRVJDSEFOVEFCTElUWSBPUiBOT04tSU5GUklOR0VNRU5ULgogIAogICAgICBTZWUgdGhlIEFwYWNoZSBWZXJzaW9uIDIuMCBMaWNlbnNlIGZvciBzcGVjaWZpYyBsYW5ndWFnZSBnb3Zlcm5pbmcgcGVybWlzc2lvbnMKICAgICAgYW5kIGxpbWl0YXRpb25zIHVuZGVyIHRoZSBMaWNlbnNlLgogICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiAqKQoKbGl0LWh0bWwvc3RhdGljLmpzOgpsaXQtaHRtbC9kaXJlY3RpdmUtaGVscGVycy5qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDIwIEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQlNELTMtQ2xhdXNlCiAgICopCgpAbGl0L3JlYWN0aXZlLWVsZW1lbnQvZGVjb3JhdG9ycy9xdWVyeS1hc3NpZ25lZC1lbGVtZW50cy5qczoKbGl0LWh0bWwvZGlyZWN0aXZlcy9wcml2YXRlLWFzeW5jLWhlbHBlcnMuanM6CmxpdC1odG1sL2RpcmVjdGl2ZXMva2V5ZWQuanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAyMSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEJTRC0zLUNsYXVzZQogICAqKQoKQGZvcnRhd2Vzb21lL2ZvbnRhd2Vzb21lLXN2Zy1jb3JlL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtYnJhbmRzLXN2Zy1pY29ucy9pbmRleC5tanM6CkBmb3J0YXdlc29tZS9mcmVlLXJlZ3VsYXItc3ZnLWljb25zL2luZGV4Lm1qczoKQGZvcnRhd2Vzb21lL2ZyZWUtc29saWQtc3ZnLWljb25zL2luZGV4Lm1qczoKICAoKiEKICAgKiBGb250IEF3ZXNvbWUgRnJlZSA3LjEuMCBieSBAZm9udGF3ZXNvbWUgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbQogICAqIExpY2Vuc2UgLSBodHRwczovL2ZvbnRhd2Vzb21lLmNvbS9saWNlbnNlL2ZyZWUgKEljb25zOiBDQyBCWSA0LjAsIEZvbnRzOiBTSUwgT0ZMIDEuMSwgQ29kZTogTUlUIExpY2Vuc2UpCiAgICogQ29weXJpZ2h0IDIwMjUgRm9udGljb25zLCBJbmMuCiAgICopCgpsdWNpZGUvZGlzdC9lc20vZGVmYXVsdEF0dHJpYnV0ZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9jcmVhdGVFbGVtZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vcmVwbGFjZUVsZW1lbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYS1sYXJnZS1zbWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FjY2Vzc2liaWxpdHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hY3Rpdml0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fpci12ZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9haXJwbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2stbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1jbG9jay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxhcm0tY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGFybS1zbW9rZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsYnVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tY2VudGVyLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1jZW50ZXItdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1lbmQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWVuZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtZGlzdHJpYnV0ZS1jZW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWRpc3RyaWJ1dGUtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24taG9yaXpvbnRhbC1qdXN0aWZ5LWNlbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtanVzdGlmeS1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLWp1c3RpZnktc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1ob3Jpem9udGFsLXNwYWNlLWFyb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLWhvcml6b250YWwtc3BhY2UtYmV0d2Vlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXN0YXJ0LWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi1zdGFydC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWRpc3RyaWJ1dGUtY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtZGlzdHJpYnV0ZS1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1kaXN0cmlidXRlLXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYWxpZ24tdmVydGljYWwtanVzdGlmeS1jZW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1qdXN0aWZ5LWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FsaWduLXZlcnRpY2FsLWp1c3RpZnktc3RhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1zcGFjZS1hcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbGlnbi12ZXJ0aWNhbC1zcGFjZS1iZXR3ZWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1idWxhbmNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW1wZXJzYW5kcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FtcGhvcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmNob3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbmdyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fubm95ZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hbnRlbm5hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYW52aWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcGVydHVyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcC13aW5kb3ctbWFjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXBwLXdpbmRvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FwcGxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS1yZXN0b3JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJjaGl2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FybWNoYWlyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWRvd24tZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLWxlZnQtZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctYmlnLXJpZ2h0LWRhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1iaWctdXAtZGFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWJpZy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tMC0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi0xLTAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLWEtei5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tZnJvbS1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdG8tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi1uYXJyb3ctd2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdG8tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWRvd24tdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLXdpZGUtbmFycm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctZG93bi16LWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LWxlZnQtZnJvbS1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC10by1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXJpZ2h0LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy1yaWdodC10by1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0wLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC0xLTAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1hLXouanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtZnJvbS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1mcm9tLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3ctdXAtbmFycm93LXdpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXRvLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hcnJvdy11cC13aWRlLW5hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLXotYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Fycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXJyb3dzLXVwLWZyb20tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2FzdGVyaXNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXQtc2lnbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9hdWRpby1saW5lcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2F3YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYXVkaW8td2F2ZWZvcm0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9heGlzLTNkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFieS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhY2twYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1jZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1kb2xsYXItc2lnbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLWV1cm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1pbmZvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtamFwYW5lc2UteWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXBvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFkZ2UtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXJ1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS1zd2lzcy1mcmFuYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXR1cmtpc2gtbGlyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZGdlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWRnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhZ2dhZ2UtY2xhaW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYWxsb29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuYW5hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmFuZGFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jhbmtub3RlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYW5rbm90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhcmNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXJyZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXNlbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdGguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LWNoYXJnaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1mdWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmF0dGVyeS1sb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iYXR0ZXJ5LW1lZGl1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnktd2FybmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JhdHRlcnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFrZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWFuLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWQtZG91YmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVkLXNpbmdsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZWYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JlbGwtZWxlY3RyaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmVsbC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLXJpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iZWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi1ob3Jpem9udGFsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4taG9yaXpvbnRhbC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JldHdlZW4tdmVydGljYWwtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmV0d2Vlbi12ZXJ0aWNhbC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpY2Vwcy1mbGV4ZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmluYXJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlvaGF6YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmlub2N1bGFycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmRob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JpcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9iaXRjb2luLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmxlbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibGluZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibG9ja3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGgtY29ubmVjdGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYmx1ZXRvb3RoLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JsdWV0b290aC1zZWFyY2hpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ibHVldG9vdGguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib2xkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9sdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvbWIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stYXVkaW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1jb3B5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWhlYWRwaG9uZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1rZXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLWltYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1tYXJrZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9vay1vcGVuLXRleHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdGV4dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2stdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXR5cGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVwLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmstY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvb2ttYXJrLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29rbWFyay14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYm9va21hcmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib29tLWJveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1tZXNzYWdlLXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JvdC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ib3R0bGUtd2luZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Jvdy1hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JveGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhY2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhY2tldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmFpbi1jaXJjdWl0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4tY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLWZpcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmljay13YWxsLXNoaWVsZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWNrLXdhbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtYnVzaW5lc3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icmllZmNhc2UtY29udmV5b3ItYmVsdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JyaWVmY2FzZS1tZWRpY2FsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpZWZjYXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnJpbmctdG8tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9icnVzaC1jbGVhbmluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2JydXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvYnViYmxlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWctcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1Zy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1aWxkaW5nLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9idWlsZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy1mcm9udC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2J1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhYmxlLWNhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhYmxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FrZS1zbGljZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nha2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxjdWxhdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1hcnJvdy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNoZWNrLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXItZGF5cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLWZvbGQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW1pbnVzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci1yYW5nZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbGVuZGFyLXN5bmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhci14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FsZW5kYXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYWxlbmRhcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYW1lcmEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FtZXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FuZHktY2FuZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhbmR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FubmFiaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXB0aW9ucy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci1mcm9udC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhci10YXhpLWZyb250LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FyYXZhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NhcmQtc2ltLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2Fycm90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzZS1sb3dlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc2Utc2Vuc2l0aXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzZS11cHBlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nhc3NldHRlLXRhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2FzdGxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2F0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2N0di5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWFyZWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1iYXItaW5jcmVhc2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWJhci1zdGFja2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtYmFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY2FuZGxlc3RpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4tYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1jb2x1bW4taW5jcmVhc2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LWNvbHVtbi1zdGFja2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtY29sdW1uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtZ2FudHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbmV0d29yay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LW5vLWF4ZXMtY29sdW1uLWRlY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbHVtbi1pbmNyZWFzaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1jb2x1bW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1uby1heGVzLWNvbWJpbmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hhcnQtbm8tYXhlcy1nYW50dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXBpZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoYXJ0LXNjYXR0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGFydC1zcGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWNrLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZWYtaGF0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlcnJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3MtYmlzaG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hlc3Mta2luZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLWtuaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXNzLXBhd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1xdWVlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tZmlyc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGVzcy1yb29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb24tdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1kb3duLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLWxlZnQtcmlnaHQtZWxsaXBzaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1sZWZ0LXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2hldnJvbnMtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXJpZ2h0LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NoZXZyb25zLXVwLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaGV2cm9ucy11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NodXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpZ2FyZXR0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaHJvbWl1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpZ2FyZXR0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hbGVydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWFycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctb3V0LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1hcnJvdy1vdXQtdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtYXJyb3ctdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hlY2stYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWNoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1jaGV2cm9uLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG9sbGFyLXNpZ24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZG90LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZWxsaXBzaXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZXF1YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtZmFkaW5nLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWZhZGluZy1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLWdhdWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wYXJraW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcGlsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1wbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS1zbGFzaC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXNtYWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXN0YXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUtc3RvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS11c2VyLXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2lyY2xlLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXJjbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NpcmN1aXQtYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jaXRydXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGFwcGVyYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQtY29weS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1saXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBhc3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xpcGJvYXJkLXR5cGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbGlwYm9hcmQteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NsaXBib2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0xMC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTExLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stNi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLTcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay04LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stOS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb2NrLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2stY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1mYWRpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9jay1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG9zZWQtY2FwdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtYmFja3VwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1kb3dubG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLWRyaXp6bGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1mb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1oYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbGlnaHRuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi1yYWluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4td2luZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nsb3VkLXJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zbm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtc3VuLXJhaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zdW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZC1zeW5jLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQtdXBsb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY2xvdWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG91ZHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbG92ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jbHViLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZS14bWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29kZXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvZGVzYW5kYm94LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29mZmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29pbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb2x1bW5zLTMtY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29sdW1ucy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tYmluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbW1hbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb21wYXNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcG9uZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29tcHV0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25jaWVyZ2UtYmVsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb25zdHJ1Y3Rpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb250YWN0LXJvdW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29udGFjdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRhaW5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvbnRyYXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2llLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29va2luZy1wb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NvcHktc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29weWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3B5cmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItZG93bi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1kb3duLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItbGVmdC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLWxlZnQtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jb3JuZXItcmlnaHQtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci1yaWdodC11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nvcm5lci11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY29ybmVyLXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3B1LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JlYXRpdmUtY29tbW9ucy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2NyZWRpdC1jYXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvaXNzYW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3JvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Nyb3NzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvc3NoYWlyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3Jvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdWJvaWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9jdXAtc29kYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2N1cnJlbmN5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvY3lsaW5kZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS1iYWNrdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS16YXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kYXRhYmFzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RlY2ltYWxzLWFycm93LWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kZWNpbWFscy1hcnJvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RlbGV0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rlc3NlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtZXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RpYW1vbmQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWNlLTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWFtb25kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS02LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZS00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGljZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaWZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZGlzYy1hbGJ1bS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rpc2MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kbmEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RuYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvbGxhci1zaWduLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZG9udXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC1sb2NrZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kb29yLWNsb3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvb3Itb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Rvd25sb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJhZnRpbmctY29tcGFzcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2RyYW1hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJpYmJibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcmlsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Ryb25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcm9wbGV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJvcGxldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9kcnVtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHJ1bXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZHVtYmJlbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lYXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWFydGgtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VhcnRoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZWNsaXBzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1mcmllZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VnZy1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lZ2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9lbGxpcHNpcy12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXF1YWwtYXBwcm94aW1hdGVseS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLW5vdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VyYXNlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2VxdWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXRoZXJuZXQtcG9ydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V1cm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ldi1jaGFyZ2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXh0ZXJuYWwtbGluay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V4cGFuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2V5ZS1jbG9zZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9leWUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZXllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFjdG9yeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZhY2Vib29rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmFzdC1mb3J3YXJkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVhdGhlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZlbmNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmVycmlzLXdoZWVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlnbWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWFyY2hpdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWF4aXMtM2QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJhZGdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1icmFjZXMtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWJyYWNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtY29sdW1uLWluY3JlYXNpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoYXJ0LWNvbHVtbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY2hhcnQtcGllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jaGVjay1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1jbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtY29kZS1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlmZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtZGlnaXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWV4Y2xhbWF0aW9uLXBvaW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1oZWFkcGhvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1pbWFnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLWtleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMtY29ybmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1tdXNpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLW91dHB1dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGVuLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtcGx1cy1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNjYW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2lnbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS1zcHJlYWRzaGVldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc2xpZGVycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtc3RhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXN5bWxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXRlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS10eXBlLWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdHlwZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXVzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlLXZvbHVtZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUtdmlkZW8tY2FtZXJhLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlsZS14LWNvcm5lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maWxlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZpbG0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maW5nZXJwcmludC1wYXR0ZXJuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlyZS1leHRpbmd1aXNoZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9maXNoLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2gtc3ltYm9sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmlzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zpc2hpbmctaG9vay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYWctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy10cmlhbmdsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLWtpbmRsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYW1lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2hsaWdodC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzaGxpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZmxhc2stY29uaWNhbC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGFzay1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsYXNrLWNvbmljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbGlwLWhvcml6b250YWwtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZsaXAtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mbG93ZXItMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zsb3dlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvY3VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1hcmNoaXZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNsb3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1naXQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1naXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaGVhcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIta2FuYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLWtleS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1sb2NrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4tZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItb3V0cHV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXJvb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXN5bWxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXItc3luYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvbGRlci10cmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9sZGVyLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mb2xkZXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9vdHByaW50cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvcmtsaWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZm9ybS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZvcndhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mcmFtZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ZyYW1lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Zyb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bGxzY3JlZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9mdW5uZWwtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2Z1bm5lbC14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZnVubmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS1ob3Jpem9udGFsLWVuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdGh1bWJuYWlscy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbGxlcnktdmVydGljYWwtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2FsbGVyeS12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dhbWVwYWQtZGlyZWN0aW9uYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYW1lcGFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2F1Z2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nYXZlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dlbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dlb3JnaWFuLWxhcmkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naG9zdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtYnJhbmNoLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWJyYW5jaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1icmFuY2gtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1jb21taXQtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS1hcnJvd3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtY29tcGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1mb3JrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LWdyYXBoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LW1lcmdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1hcnJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtY2xvc2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0LXB1bGwtcmVxdWVzdC1jcmVhdGUtYXJyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LWNyZWF0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dpdC1wdWxsLXJlcXVlc3QtZHJhZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9naXQtcHVsbC1yZXF1ZXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0aHViLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2l0bGFiLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xhc3Mtd2F0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9nbGFzc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ2xvYmUtbG9jay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dsb2JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ29hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dwdS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyYWR1YXRpb24tY2FwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtMngyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTJ4Mi14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpZC0yeDIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncmlkLTN4Mi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaWQtM3gzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvZ3JpcC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2dyaXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ncm91cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2d1aXRhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbWJ1cmdlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbW1lci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtY29pbnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWZpc3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWdyYWIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1oZWxwaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZC1tZXRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQtcGxhdHRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYW5kYmFnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFuZHNoYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS1kb3dubG9hZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhcmQtZHJpdmUtdXBsb2FkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1oYXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGFyZC1kcml2ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hhdC1nbGFzc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGF6ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGRtaS1wb3J0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy01LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy02LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYWRwaG9uZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFkcGhvbmVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhZHNldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlYXJ0LWNyYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtaGFuZHNoYWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGVhcnQtcHVsc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWF0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hlbGljb3B0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oZXhhZ29uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaGlnaGxpZ2h0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9oaXN0b3J5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG9wLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvc3BpdGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG90ZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VyZ2xhc3MuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLXBsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ob3VzZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaG91c2Utd2lmaS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2hvdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaWNlLWNyZWFtLWJvd2wuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pY2UtY3JlYW0tY29uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQtbGFueWFyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2lkLWNhcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbWFnZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2UtdXBzY2FsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2ltYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1hZ2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW1wb3J0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5ib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbmZpbml0eS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2luZm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9pbnNwZWN0aW9uLXBhbmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaW5zdGFncmFtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRhbGljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvaXRlcmF0aW9uLWNjdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2l0ZXJhdGlvbi1jdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2phcGFuZXNlLXllbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2pveXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2FuYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2F5YWsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXktc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMva2V5Ym9hcmQtbXVzaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9rZXlib2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtY2VpbGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZGVzay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtZmxvb3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW1wLXdhbGwtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAtd2FsbC11cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kLXBsb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYW5kbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhbmd1YWdlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhcHRvcC1taW5pbWFsLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGFwdG9wLW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXB0b3AuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby1zZWxlY3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXNzby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xhdWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5ZXJzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXllcnMtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1kYXNoYm9hcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtZ3JpZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xheW91dC1saXN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXBhbmVsLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sYXlvdXQtcGFuZWwtdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGF5b3V0LXRlbXBsYXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVhZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xlYWZ5LWdyZWVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGVjdGVybi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpYnJhcnktYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlicmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZmUtYnVveS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2F0dXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlnaHRidWxiLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpZ2h0YnVsYi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmUtc3F1aWdnbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saW5rLTItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGluay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpbmtlZGluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtY2hlY2tzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGV2cm9ucy1kb3duLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jaGV2cm9ucy11cC1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1jb2xsYXBzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1maWx0ZXItcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtZmlsdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1pbmRlbnQtZGVjcmVhc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LWluZGVudC1pbmNyZWFzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LW11c2ljLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1vcmRlcmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1yZXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC1zdGFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdG9kby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdHJlZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xpc3QtdmlkZW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9saXN0LXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2FkZXItY2lyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbGlzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci1waW53aGVlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvYWRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1maXhlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2F0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NhdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2NrLWtleWhvbGUtb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2sta2V5aG9sZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2stb3Blbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctaW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9sb2ctb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbG9ncy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL2xvbGxpcG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbHVnZ2FnZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hZ25ldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWwtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1xdWVzdGlvbi1tYXJrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbC1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXdhcm5pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYWlsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFpbGJveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21haWxzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1jaGVjay1pbnNpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1ob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tbWludXMtaW5zaWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGluLXBsdXMtaW5zaWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBpbi14LWluc2lkZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4teC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcC1waW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAtcGlubmVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWFwLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJzLXN0cm9rZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21hcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tYXJ0aW5pLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWF4aW1pemUtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21heGltaXplLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVnYXBob25lLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZ2FwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lZGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVtb3J5LXN0aWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVyZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZW51LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLWhlYXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtbW9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS1xdWVzdGlvbi1tYXJrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUtcmVwbHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLWNpcmNsZS13YXJuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1jaXJjbGUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2UtY2lyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWRpZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1tb3JlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXF1b3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUtcmVwbHkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS1zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLXRleHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tZXNzYWdlLXNxdWFyZS13YXJuaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZS1zcXVhcmUteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21lc3NhZ2Utc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWVzc2FnZXMtc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWljLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy12b2NhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3JvY2hpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pY3Jvc2NvcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWNyb3dhdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWxlc3RvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taWxrLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21pbGsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taW5pbWl6ZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbWluaW1pemUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWNsb3VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9uaXRvci1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc21hcnRwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc3BlYWtlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3Itc3RvcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vbml0b3ItdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb25pdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi1zdGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW90b3JiaWtlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdW50YWluLXNub3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VudGFpbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItMi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLWJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdXNlLXBvaW50ZXItY2xpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3VzZS1wb2ludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW91c2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLTNkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kaWFnb25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1ob3Jpem9udGFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUtdXAtcmlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tb3ZlLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbW92ZS12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL21vdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbXVzaWMtMy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL211c2ljLTQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9tdXNpYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24tMi1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uYXZpZ2F0aW9uLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25hdmlnYXRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uZXdzcGFwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9uZXR3b3JrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbmZjLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm9uLWJpbmFyeS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL25vdGVib29rLXRhYnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlYm9vay10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZWJvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ub3RlcGFkLXRleHQtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbm90ZXBhZC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvbnV0LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL251dC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24tYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vY3RhZ29uLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb2N0YWdvbi1wYXVzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24teC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29jdGFnb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9vbWVnYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29wdGlvbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL29yYml0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvb3JpZ2FtaS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhY2thZ2UtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFja2FnZS1zZWFyY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWNrYWdlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtYnVja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnQtcm9sbGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFpbnRicnVzaC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhaW50YnJ1c2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYWxldHRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZGEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tY2xvc2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20tZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtYm90dG9tLW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1ib3R0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LWNsb3NlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtbGVmdC1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1sZWZ0LXJpZ2h0LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC1jbG9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXJpZ2h0LW9wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYW5lbC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1ib3R0b20tZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWNsb3NlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVsLXRvcC1vcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLWxlZnQtYm90dG9tLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWwtdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGFuZWxzLXJpZ2h0LWJvdHRvbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhbmVscy10b3AtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcGVyY2xpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcmtpbmctbWV0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wYXJlbnRoZXNlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhcnR5LXBvcHBlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGF3LXByaW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGMtY2FzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi1saW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Blbi10b29sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZW5jaWwtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLXJ1bGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVuY2lsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVudGFnb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wZXJjZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGVyc29uLXN0YW5kaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhpbGlwcGluZS1wZXNvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtZm9yd2FyZGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtY2FsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Bob25lLWluY29taW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtbWlzc2VkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGhvbmUtb3V0Z29pbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlhbm8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWNrYXhlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGljdHVyZS1pbi1waWN0dXJlLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWN0dXJlLWluLXBpY3R1cmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWdneS1iYW5rLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlsY3Jvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGNyb3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waWxsLWJvdHRsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9waW4tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGluLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGlwZXR0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BpenphLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcGxhbmUtbGFuZGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYW5lLXRha2VvZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbGFuZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsYXkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVnLXphcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9ja2V0LWtuaWZlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9ja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9kY2FzdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvaW50ZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvcGNvcm4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wb3BzaWNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3BvdW5kLXN0ZXJsaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG93ZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmVzZW50YXRpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9wcmludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHJpbnRlci1jaGVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb2plY3Rvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Byb3BvcnRpb25zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHV6emxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcHlyYW1pZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3FyLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9xdW90ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhYmJpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGFyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWF0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGlvLXJlY2VpdmVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFkaW8tdG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yYWRpby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhZGl1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhaWwtc3ltYm9sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmFpbmJvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JhdGlvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1jZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1ldXJvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC1pbmRpYW4tcnVwZWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LWphcGFuZXNlLXllbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY2VpcHQtcG91bmQtc3RlcmxpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXJ1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LXN3aXNzLWZyYW5jLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjZWlwdC10dXJraXNoLWxpcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWNlaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWNpcmNsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1lbGxpcHNpcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlY3RhbmdsZS1nb2dnbGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVjdGFuZ2xlLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN0YW5nbGUtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWN5Y2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVkby1kb3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWRvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3ctZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVmcmVzaC1jY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyZXNoLWN3LW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlZnJlc2gtY3cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWZyaWdlcmF0b3IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZWdleC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlbW92ZS1mb3JtYXR0aW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwZWF0LTEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yZXBlYXQtMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGVhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGxhY2UtYWxsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmVwbGFjZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LWFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JlcGx5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmV3aW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcmliYm9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9ja2luZy1jaGFpci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvbGxlci1jb2FzdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm9zZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jY3cta2V5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWNjdy1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9yb3RhdGUtY2N3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm90YXRlLWN3LXNxdWFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdGF0ZS1jdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3JvdXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm91dGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcm93cy00LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcnNzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvcnVsZXItZGltZW5zaW9uLWxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9ydWxlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3J1c3NpYW4tcnVibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYWlsYm9hdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhbGFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2FuZHdpY2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXRlbGxpdGUtZGlzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdGVsbGl0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdWRpLXJpeWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2F2ZS1hbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zYXZlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NhdmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY2FsZS0zZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYWxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NhbGluZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tZXllLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1iYXJjb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1mYWNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi1oZWFydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tbGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tcXItY29kZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjYW4tc2VhcmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaG9vbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjaXNzb3JzLWxpbmUtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Npc3NvcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zY29vdGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2NyZWVuLXNoYXJlLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NjcmVlbi1zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Njcm9sbC10ZXh0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2Nyb2xsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWFsZXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VhcmNoLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gtc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZWFyY2gteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlbmQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlY3Rpb24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLXRvLWJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VwYXJhdG9yLWhvcml6b250YWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXBhcmF0b3ItdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXJ2ZXItY29nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLWNyYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2VydmVyLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NlcnZlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NldHRpbmdzLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zZXR0aW5ncy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXBlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoYXJlLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGFyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoZWV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hlbGwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtYmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWVsbGlwc2lzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLWhhbGYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQtcXVlc3Rpb24tbWFyay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaWVsZC11c2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpZWxkLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGllbGQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaGlwLXdoZWVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hpcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NoaXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctYmFza2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hvcHBpbmctY2FydC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3ZlbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nob3dlci1oZWFkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2hyZWRkZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJpbXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaHJ1Yi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NodWZmbGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtaGlnaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ21hLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lnbmFsLWxvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC1tZWRpdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zaWduYWwtemVyby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25hdHVyZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25wb3N0LWJpZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NpZ25wb3N0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2lyZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9za2lwLWJhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9za3VsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NraXAtZm9yd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsYWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbGljZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NsaWRlcnMtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLWNoYXJnaW5nLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21hcnRwaG9uZS1uZmMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbWFydHBob25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc21pbGUtcGx1cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NtaWxlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc25haWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zbm93Zmxha2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zb2FwLWRpc3BlbnNlci1kcm9wbGV0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc29mYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NvbGFyLXBhbmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc291cC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwYWNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BhZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGFya2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BhcmtsZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGVha2VyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlZWNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BlbGwtY2hlY2stMi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NwZWxsLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BsaW5lLXBvaW50ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Nwb29sLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3BvdGxpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3ByYXktY2FuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Byb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFjdGl2aXR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWRvd24tbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtYXJyb3ctbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1vdXQtZG93bi1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC1kb3duLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LW91dC11cC1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1hcnJvdy11cC1sZWZ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLXJpZ2h0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWFzdGVyaXNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWJvdHRvbS1kYXNoZWQtc2Npc3NvcnMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hhcnQtZ2FudHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hlY2stYmlnLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNoZXZyb24tZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLWxlZnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtY2hldnJvbi1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1jaGV2cm9uLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWNvZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLWJvdHRvbS1jb2RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC1ib3R0b20uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZGFzaGVkLWthbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtbW91c2UtcG9pbnRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kYXNoZWQtdG9wLXNvbGlkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWRhc2hlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1kaXZpZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtZG90LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWVxdWFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWZ1bmN0aW9uLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLWthbmJhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1saWJyYXJ5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtbWVudS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1taW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1tb3VzZS1wb2ludGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmctb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhcmtpbmcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGVuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBhdXNlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBlcmNlbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcGlsY3Jvdy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1wbGF5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcG93ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtcmFkaWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zY2lzc29ycy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1yb3VuZC1jb3JuZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2lnbWEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc2xhc2guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3BsaXQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcGxpdC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3RhY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS1zdG9wLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXRlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLXVzZXItcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmUtdXNlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWFyZS14LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1leGNsdWRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy1pbnRlcnNlY3QuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zcXVhcmVzLXN1YnRyYWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJjbGUtZGFzaGVkLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1YXJlcy11bml0ZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3NxdWlyY2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3F1aXJyZWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdGFtcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0YXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci1oYWxmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtYmFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXAtZm9yd2FyZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0ZXRob3Njb3BlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2tlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0b25lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3RpY2t5LW5vdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdG9yZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0cmV0Y2gtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N0cmV0Y2gtdmVydGljYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdHJpa2V0aHJvdWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3Vic2NyaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLWRpbS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1tZWRpdW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zdW4tbW9vbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bi1zbm93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3VucmlzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1bnNldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N1cGVyc2NyaXB0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvc3dhdGNoLWJvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd2lzcy1mcmFuYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3aXRjaC1jYW1lcmEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy9zd29yZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N3b3Jkcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3N5cmluZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS0yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY2VsbHMtbWVyZ2UuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1jZWxscy1zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLW9mLWNvbnRlbnRzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUtY29sdW1ucy1zcGxpdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxlLXByb3BlcnRpZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZS1yb3dzLXNwbGl0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWJsZXQtc21hcnRwaG9uZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhYmxldHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWdzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktMS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YWxseS0zLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFsbHktNC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RhbGx5LTUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90YW5nZW50LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGFyZ2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVsZXNjb3BlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC10cmVlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlc3QtdHViZS1kaWFnb25hbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rlcm1pbmFsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGVzdC10dWJlcy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtYWxpZ24tY2VudGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1hbGlnbi1lbmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLWp1c3RpZnkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWFsaWduLXN0YXJ0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGV4dC1jdXJzb3ItaW5wdXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWN1cnNvci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtcXVvdGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LWluaXRpYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90ZXh0LXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtc2VsZWN0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGhlYXRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RleHQtd3JhcC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLXNub3dmbGFrZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLXN1bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RoZXJtb21ldGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGh1bWJzLWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aHVtYnMtdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtY2hlY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtbWludXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQtcGVyY2VudC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpY2tldC1wbHVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXNsYXNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0LXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90aWNrZXRzLXBsYW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGlja2V0cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RpbWVyLXJlc2V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXItb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdGltZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b2dnbGUtbGVmdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvZ2dsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RvaWxldC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvb2wtY2FzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvb2xib3guanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3JuYWRvLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdG9ydXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3VjaHBhZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3Rvd2VyLWNvbnRyb2wuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90b3ktYnJpY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFmZmljLWNvbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFjdG9yLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQtdHVubmVsLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJhaW4tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFpbi10cmFjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYW0tZnJvbnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFuc2dlbmRlci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyYXNoLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmFzaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZWUtZGVjaWR1b3VzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZS1wYWxtLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZS1waW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVsbG8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmVuZGluZy1kb3duLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJlbmRpbmctdXAtZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyZW5kaW5nLXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJpYW5nbGUtYWxlcnQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1kYXNoZWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cmlhbmdsZS1yaWdodC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3RyaWFuZ2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJvcGh5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdHJ1Y2stZWxlY3RyaWMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90cnVjay5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cmtpc2gtbGlyYS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cm50YWJsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R1cnRsZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwtcGxheS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R2LW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90di5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXRjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3R3aXR0ZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLW91dGxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy90eXBlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW1icmVsbGEuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRlcmxpbmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmRvLWRvdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZG8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmZvbGQtaG9yaXpvbnRhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZm9sZC12ZXJ0aWNhbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VuZ3JvdXAuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bml2ZXJzaXR5LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdW5saW5rLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bmxpbmsuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91bnBsdWcuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2IuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91cGxvYWQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLWxvY2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLWNoZWNrLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1jb2cuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLW1pbnVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXNlci1yb3VuZC1wZW4uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXBsdXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItcm91bmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXJvdW5kLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2VyLXNlYXJjaC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXItc3Rhci5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIteC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy91c2Vycy1yb3VuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3VzZXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRlbnNpbHMtY3Jvc3NlZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3V0ZW5zaWxzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmFuLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdXRpbGl0eS1wb2xlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmFyaWFibGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92YXVsdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlY3Rvci1zcXVhcmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZWdhbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlbmV0aWFuLW1hc2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92ZW51cy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZlbnVzLWFuZC1tYXJzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlicmF0ZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWJyYXRlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlkZW8tb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdmlkZW8uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2ljZW1haWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWRlb3RhcGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92aWV3LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sbGV5YmFsbC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3ZvbHVtZS0xLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLTIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvdm9sdW1lLXguanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b2x1bWUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy92b3RlLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FsbGV0LW1pbmltYWwuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQtY2FyZHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxsZXQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YWxscGFwZXIuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YW5kLXNwYXJrbGVzLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2FuZC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhcmVob3VzZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhc2hpbmctbWFjaGluZS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdGNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtYXJyb3ctZG93bi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dhdmVzLWFycm93LXVwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMtbGFkZGVyLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2F2ZXMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93YXlwb2ludHMuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJjYW0uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWJob29rLW9mZi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dlYmhvb2suanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWlnaHQtdGlsZGUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93ZWlnaHQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aGVhdC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dob2xlLXdvcmQuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLWNvZy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktbG93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1oaWdoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2lmaS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aWZpLXBlbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktc3luYy5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmktemVyby5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dpZmkuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLWFycm93LWRvd24uanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5kLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd2luZS1vZmYuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy93aW5lLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd29ybS5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3dvcmtmbG93LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvd3JlbmNoLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMveC5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3lvdXR1YmUuanM6Cmx1Y2lkZS9kaXN0L2VzbS9pY29ucy96YXAtb2ZmLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvemFwLmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnMvem9vbS1pbi5qczoKbHVjaWRlL2Rpc3QvZXNtL2ljb25zL3pvb20tb3V0LmpzOgpsdWNpZGUvZGlzdC9lc20vaWNvbnNBbmRBbGlhc2VzLmpzOgpsdWNpZGUvZGlzdC9lc20vbHVjaWRlLmpzOgogICgqKgogICAqIEBsaWNlbnNlIGx1Y2lkZSB2MC41NjIuMCAtIElTQwogICAqCiAgICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgSVNDIGxpY2Vuc2UuCiAgICogU2VlIHRoZSBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAgICopCgppYmFudG9vbHMvanNuZXh0L2liYW50b29scy5qczoKICAoKiEKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCBTYcWhYSBKb3ZhbmnEhwogICAqIExpY2Vuc2VkIHVuZGVyIHRoZSBNb3ppbGxhIFB1YmxpYyBMaWNlbnNlLCBWZXJzaW9uIDIuMCBvciB0aGUgTUlUIGxpY2Vuc2UsCiAgICogYXQgeW91ciBvcHRpb24uIFRoaXMgZmlsZSBtYXkgbm90IGJlIGNvcGllZCwgbW9kaWZpZWQsIG9yIGRpc3RyaWJ1dGVkCiAgICogZXhjZXB0IGFjY29yZGluZyB0byB0aG9zZSB0ZXJtcy4KICAgKiBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiBTYcWhYSBKb3ZhbmnEhwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBNSVQgb3IgTVBMLzIuMAogICAqKQogICgqKgogICAqIFZhbGlkYXRpb24sIGV4dHJhY3Rpb24gYW5kIGNyZWF0aW9uIG9mIElCQU4sIEJCQU4sIEJJQy9TV0lGVCBudW1iZXJzIHBsdXMgc29tZSBvdGhlciBoZWxwZnVsIHN0dWZmCiAgICogQHBhY2thZ2UgRG9jdW1lbnRhdGlvbgogICAqIEBhdXRob3IgU2HFoWEgSm92YW5pxIcKICAgKiBAbW9kdWxlIGliYW50b29scwogICAqIEB2ZXJzaW9uIDQuNS4xCiAgICogQGxpY2Vuc2UgTUlUIG9yIE1QTC0yLjAKICAgKiBAcHJlZmVycmVkCiAgICopCiovCi8vIyBzb3VyY2VNYXBwaW5nVVJMPWJ1bmRsZS0xNzY5MzQ1Nzc4MjQ5LmpzLm1hcAo=" }, { "path": "index.html", diff --git a/ts/plugins.ts b/ts/plugins.ts index 91a72f0..57137e0 100644 --- a/ts/plugins.ts +++ b/ts/plugins.ts @@ -37,6 +37,10 @@ export { import * as s3 from '@aws-sdk/client-s3'; export { s3 }; +// MongoDB driver for ObjectId handling +import * as mongodb from 'mongodb'; +export { mongodb }; + // @api.global scope import * as typedrequest from '@api.global/typedrequest'; import * as typedrequestInterfaces from '@api.global/typedrequest-interfaces'; diff --git a/ts_web/00_commitinfo_data.ts b/ts_web/00_commitinfo_data.ts index 572b8b7..c251883 100644 --- a/ts_web/00_commitinfo_data.ts +++ b/ts_web/00_commitinfo_data.ts @@ -3,6 +3,6 @@ */ export const commitinfo = { name: '@git.zone/tsview', - version: '1.2.0', + version: '1.3.0', description: 'A CLI tool for viewing S3 and MongoDB data with a web UI' } diff --git a/ts_web/elements/tsview-app.ts b/ts_web/elements/tsview-app.ts index 868276f..cbf20f2 100644 --- a/ts_web/elements/tsview-app.ts +++ b/ts_web/elements/tsview-app.ts @@ -45,6 +45,18 @@ export class TsviewApp extends DeesElement { @state() private accessor newDatabaseName: string = ''; + @state() + private accessor showS3CreateDialog: boolean = false; + + @state() + private accessor s3CreateDialogType: 'folder' | 'file' = 'folder'; + + @state() + private accessor s3CreateDialogBucket: string = ''; + + @state() + private accessor s3CreateDialogName: string = ''; + public static styles = [ cssManager.defaultStyles, themeStyles, @@ -297,6 +309,20 @@ export class TsviewApp extends DeesElement { border-color: #e0e0e0; } + .dialog-location { + font-size: 12px; + color: #888; + margin-bottom: 12px; + font-family: monospace; + } + + .dialog-hint { + font-size: 11px; + color: #666; + margin-bottom: 16px; + margin-top: -8px; + } + .dialog-actions { display: flex; gap: 12px; @@ -483,6 +509,17 @@ export class TsviewApp extends DeesElement { }, }, { divider: true }, + { + name: 'New Folder', + iconName: 'lucide:folderPlus', + action: async () => this.openS3CreateDialog(bucket, 'folder'), + }, + { + name: 'New File', + iconName: 'lucide:filePlus', + action: async () => this.openS3CreateDialog(bucket, 'file'), + }, + { divider: true }, { name: 'Delete Bucket', iconName: 'lucide:trash2', @@ -501,6 +538,72 @@ export class TsviewApp extends DeesElement { ]); } + private openS3CreateDialog(bucket: string, type: 'folder' | 'file') { + this.s3CreateDialogBucket = bucket; + this.s3CreateDialogType = type; + this.s3CreateDialogName = ''; + this.showS3CreateDialog = true; + } + + private getContentType(ext: string): string { + const contentTypes: Record = { + json: 'application/json', + txt: 'text/plain', + html: 'text/html', + css: 'text/css', + js: 'application/javascript', + ts: 'text/typescript', + md: 'text/markdown', + xml: 'application/xml', + yaml: 'text/yaml', + yml: 'text/yaml', + csv: 'text/csv', + }; + return contentTypes[ext] || 'application/octet-stream'; + } + + private getDefaultContent(ext: string): string { + const defaults: Record = { + json: '{\n \n}', + html: '\n\n\n \n\n\n \n\n', + md: '# Title\n\n', + txt: '', + }; + return defaults[ext] || ''; + } + + private async handleS3Create() { + if (!this.s3CreateDialogName.trim()) return; + + const name = this.s3CreateDialogName.trim(); + let path: string; + + if (this.s3CreateDialogType === 'folder') { + path = name + '/.keep'; + } else { + path = name; + } + + const ext = name.split('.').pop()?.toLowerCase() || ''; + const contentType = this.s3CreateDialogType === 'file' ? this.getContentType(ext) : 'application/octet-stream'; + const content = this.s3CreateDialogType === 'file' ? this.getDefaultContent(ext) : ''; + + const success = await apiService.putObject( + this.s3CreateDialogBucket, + path, + btoa(content), + contentType + ); + + if (success) { + this.showS3CreateDialog = false; + // Select the bucket to show the new content + this.selectedBucket = this.s3CreateDialogBucket; + // Trigger a refresh by dispatching an event + this.requestUpdate(); + } + } + private handleDatabaseContextMenu(event: MouseEvent, dbName: string) { event.preventDefault(); DeesContextmenu.openContextMenuWithOptions(event, [ @@ -574,6 +677,7 @@ export class TsviewApp extends DeesElement { ${this.renderCreateBucketDialog()} ${this.renderCreateCollectionDialog()} ${this.renderCreateDatabaseDialog()} + ${this.renderS3CreateDialog()} `; } @@ -670,6 +774,48 @@ export class TsviewApp extends DeesElement { `; } + private renderS3CreateDialog() { + if (!this.showS3CreateDialog) return ''; + + const isFolder = this.s3CreateDialogType === 'folder'; + const title = isFolder ? 'Create New Folder' : 'Create New File'; + const placeholder = isFolder ? 'folder-name or path/to/folder' : 'filename.txt or path/to/file.txt'; + + return html` +
this.showS3CreateDialog = false}> +
e.stopPropagation()}> +
${title}
+
+ Location: ${this.s3CreateDialogBucket}/ +
+ this.s3CreateDialogName = (e.target as HTMLInputElement).value} + @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && this.handleS3Create()} + /> +
+ Use "/" to create nested ${isFolder ? 'folders' : 'path'} (e.g., ${isFolder ? 'parent/child' : 'folder/file.txt'}) +
+
+ + +
+
+
+ `; + } + private renderSidebar() { if (this.viewMode === 's3') { return html` diff --git a/ts_web/elements/tsview-s3-columns.ts b/ts_web/elements/tsview-s3-columns.ts index 1a9953a..1c4ece2 100644 --- a/ts_web/elements/tsview-s3-columns.ts +++ b/ts_web/elements/tsview-s3-columns.ts @@ -31,6 +31,18 @@ export class TsviewS3Columns extends DeesElement { @state() private accessor loading: boolean = false; + @state() + private accessor showCreateDialog: boolean = false; + + @state() + private accessor createDialogType: 'folder' | 'file' = 'folder'; + + @state() + private accessor createDialogPrefix: string = ''; + + @state() + private accessor createDialogName: string = ''; + private resizing: { columnIndex: number; startX: number; startWidth: number } | null = null; private readonly DEFAULT_COLUMN_WIDTH = 250; private readonly MIN_COLUMN_WIDTH = 150; @@ -170,6 +182,104 @@ export class TsviewS3Columns extends DeesElement { text-align: center; color: #666; } + + .dialog-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + } + + .dialog { + background: #1e1e1e; + border-radius: 12px; + padding: 24px; + min-width: 400px; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5); + } + + .dialog-title { + font-size: 18px; + font-weight: 600; + margin-bottom: 16px; + color: #fff; + } + + .dialog-location { + font-size: 12px; + color: #888; + margin-bottom: 12px; + font-family: monospace; + } + + .dialog-input { + width: 100%; + padding: 10px 12px; + background: #141414; + border: 1px solid #333; + border-radius: 6px; + color: #fff; + font-size: 14px; + margin-bottom: 8px; + box-sizing: border-box; + } + + .dialog-input:focus { + outline: none; + border-color: #e0e0e0; + } + + .dialog-hint { + font-size: 11px; + color: #666; + margin-bottom: 16px; + } + + .dialog-actions { + display: flex; + gap: 12px; + justify-content: flex-end; + } + + .dialog-btn { + padding: 8px 16px; + border-radius: 6px; + font-size: 14px; + cursor: pointer; + transition: all 0.2s; + } + + .dialog-btn-cancel { + background: transparent; + border: 1px solid #444; + color: #aaa; + } + + .dialog-btn-cancel:hover { + background: rgba(255, 255, 255, 0.05); + color: #fff; + } + + .dialog-btn-create { + background: #404040; + border: none; + color: #fff; + } + + .dialog-btn-create:hover { + background: #505050; + } + + .dialog-btn-create:disabled { + opacity: 0.5; + cursor: not-allowed; + } `, ]; @@ -337,6 +447,17 @@ export class TsviewS3Columns extends DeesElement { }, }, { divider: true }, + { + name: 'New Folder Inside', + iconName: 'lucide:folderPlus', + action: async () => this.openCreateDialog('folder', prefix), + }, + { + name: 'New File Inside', + iconName: 'lucide:filePlus', + action: async () => this.openCreateDialog('file', prefix), + }, + { divider: true }, { name: 'Delete Folder', iconName: 'lucide:trash2', @@ -396,6 +517,133 @@ export class TsviewS3Columns extends DeesElement { ]); } + private handleEmptySpaceContextMenu(event: MouseEvent, columnIndex: number) { + // Only trigger if clicking on the container itself, not on items + if (event.target !== event.currentTarget) return; + event.preventDefault(); + + const prefix = this.columns[columnIndex].prefix; + + DeesContextmenu.openContextMenuWithOptions(event, [ + { + name: 'New Folder', + iconName: 'lucide:folderPlus', + action: async () => this.openCreateDialog('folder', prefix), + }, + { + name: 'New File', + iconName: 'lucide:filePlus', + action: async () => this.openCreateDialog('file', prefix), + }, + ]); + } + + private openCreateDialog(type: 'folder' | 'file', prefix: string) { + this.createDialogType = type; + this.createDialogPrefix = prefix; + this.createDialogName = ''; + this.showCreateDialog = true; + } + + private getContentType(ext: string): string { + const contentTypes: Record = { + json: 'application/json', + txt: 'text/plain', + html: 'text/html', + css: 'text/css', + js: 'application/javascript', + ts: 'text/typescript', + md: 'text/markdown', + xml: 'application/xml', + yaml: 'text/yaml', + yml: 'text/yaml', + csv: 'text/csv', + }; + return contentTypes[ext] || 'application/octet-stream'; + } + + private getDefaultContent(ext: string): string { + const defaults: Record = { + json: '{\n \n}', + html: '\n\n\n \n\n\n \n\n', + md: '# Title\n\n', + txt: '', + }; + return defaults[ext] || ''; + } + + private async handleCreate() { + if (!this.createDialogName.trim()) return; + + const name = this.createDialogName.trim(); + let path: string; + + if (this.createDialogType === 'folder') { + // Support deep paths: "a/b/c" creates nested folders + path = this.createDialogPrefix + name + '/.keep'; + } else { + path = this.createDialogPrefix + name; + } + + const ext = name.split('.').pop()?.toLowerCase() || ''; + const contentType = this.createDialogType === 'file' ? this.getContentType(ext) : 'application/octet-stream'; + const content = this.createDialogType === 'file' ? this.getDefaultContent(ext) : ''; + + const success = await apiService.putObject( + this.bucketName, + path, + btoa(content), + contentType + ); + + if (success) { + this.showCreateDialog = false; + await this.loadInitialColumn(); + } + } + + private renderCreateDialog() { + if (!this.showCreateDialog) return ''; + + const isFolder = this.createDialogType === 'folder'; + const title = isFolder ? 'Create New Folder' : 'Create New File'; + const placeholder = isFolder ? 'folder-name or path/to/folder' : 'filename.txt or path/to/file.txt'; + + return html` +
this.showCreateDialog = false}> +
e.stopPropagation()}> +
${title}
+
+ Location: ${this.bucketName}/${this.createDialogPrefix} +
+ this.createDialogName = (e.target as HTMLInputElement).value} + @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && this.handleCreate()} + /> +
+ Use "/" to create nested ${isFolder ? 'folders' : 'path'} (e.g., ${isFolder ? 'parent/child' : 'folder/file.txt'}) +
+
+ + +
+
+
+ `; + } + render() { if (this.loading && this.columns.length === 0) { return html`
Loading...
`; @@ -405,6 +653,7 @@ export class TsviewS3Columns extends DeesElement {
${this.columns.map((column, index) => this.renderColumnWrapper(column, index))}
+ ${this.renderCreateDialog()} `; } @@ -430,7 +679,7 @@ export class TsviewS3Columns extends DeesElement {
${headerName}
-
+
this.handleEmptySpaceContextMenu(e, index)}> ${column.prefixes.length === 0 && column.objects.length === 0 ? html`
Empty folder
` : ''} diff --git a/ts_web/elements/tsview-s3-keys.ts b/ts_web/elements/tsview-s3-keys.ts index 215c70e..e35d5cd 100644 --- a/ts_web/elements/tsview-s3-keys.ts +++ b/ts_web/elements/tsview-s3-keys.ts @@ -32,6 +32,18 @@ export class TsviewS3Keys extends DeesElement { @state() private accessor filterText: string = ''; + @state() + private accessor showCreateDialog: boolean = false; + + @state() + private accessor createDialogType: 'folder' | 'file' = 'folder'; + + @state() + private accessor createDialogPrefix: string = ''; + + @state() + private accessor createDialogName: string = ''; + public static styles = [ cssManager.defaultStyles, themeStyles, @@ -146,6 +158,104 @@ export class TsviewS3Keys extends DeesElement { text-align: center; color: #666; } + + .dialog-overlay { + position: fixed; + top: 0; + left: 0; + right: 0; + bottom: 0; + background: rgba(0, 0, 0, 0.7); + display: flex; + align-items: center; + justify-content: center; + z-index: 1000; + } + + .dialog { + background: #1e1e1e; + border-radius: 12px; + padding: 24px; + min-width: 400px; + box-shadow: 0 20px 40px rgba(0, 0, 0, 0.5); + } + + .dialog-title { + font-size: 18px; + font-weight: 600; + margin-bottom: 16px; + color: #fff; + } + + .dialog-location { + font-size: 12px; + color: #888; + margin-bottom: 12px; + font-family: monospace; + } + + .dialog-input { + width: 100%; + padding: 10px 12px; + background: #141414; + border: 1px solid #333; + border-radius: 6px; + color: #fff; + font-size: 14px; + margin-bottom: 8px; + box-sizing: border-box; + } + + .dialog-input:focus { + outline: none; + border-color: #e0e0e0; + } + + .dialog-hint { + font-size: 11px; + color: #666; + margin-bottom: 16px; + } + + .dialog-actions { + display: flex; + gap: 12px; + justify-content: flex-end; + } + + .dialog-btn { + padding: 8px 16px; + border-radius: 6px; + font-size: 14px; + cursor: pointer; + transition: all 0.2s; + } + + .dialog-btn-cancel { + background: transparent; + border: 1px solid #444; + color: #aaa; + } + + .dialog-btn-cancel:hover { + background: rgba(255, 255, 255, 0.05); + color: #fff; + } + + .dialog-btn-create { + background: #404040; + border: none; + color: #fff; + } + + .dialog-btn-create:hover { + background: #505050; + } + + .dialog-btn-create:disabled { + opacity: 0.5; + cursor: not-allowed; + } `, ]; @@ -231,6 +341,17 @@ export class TsviewS3Keys extends DeesElement { }, }, { divider: true }, + { + name: 'New Folder Inside', + iconName: 'lucide:folderPlus', + action: async () => this.openCreateDialog('folder', key), + }, + { + name: 'New File Inside', + iconName: 'lucide:filePlus', + action: async () => this.openCreateDialog('file', key), + }, + { divider: true }, { name: 'Delete Folder', iconName: 'lucide:trash2', @@ -288,6 +409,130 @@ export class TsviewS3Keys extends DeesElement { } } + private handleEmptySpaceContextMenu(event: MouseEvent) { + // Only trigger if clicking on the container itself, not on items + if ((event.target as HTMLElement).closest('tr')) return; + event.preventDefault(); + + DeesContextmenu.openContextMenuWithOptions(event, [ + { + name: 'New Folder', + iconName: 'lucide:folderPlus', + action: async () => this.openCreateDialog('folder', this.currentPrefix), + }, + { + name: 'New File', + iconName: 'lucide:filePlus', + action: async () => this.openCreateDialog('file', this.currentPrefix), + }, + ]); + } + + private openCreateDialog(type: 'folder' | 'file', prefix: string) { + this.createDialogType = type; + this.createDialogPrefix = prefix; + this.createDialogName = ''; + this.showCreateDialog = true; + } + + private getContentType(ext: string): string { + const contentTypes: Record = { + json: 'application/json', + txt: 'text/plain', + html: 'text/html', + css: 'text/css', + js: 'application/javascript', + ts: 'text/typescript', + md: 'text/markdown', + xml: 'application/xml', + yaml: 'text/yaml', + yml: 'text/yaml', + csv: 'text/csv', + }; + return contentTypes[ext] || 'application/octet-stream'; + } + + private getDefaultContent(ext: string): string { + const defaults: Record = { + json: '{\n \n}', + html: '\n\n\n \n\n\n \n\n', + md: '# Title\n\n', + txt: '', + }; + return defaults[ext] || ''; + } + + private async handleCreate() { + if (!this.createDialogName.trim()) return; + + const name = this.createDialogName.trim(); + let path: string; + + if (this.createDialogType === 'folder') { + path = this.createDialogPrefix + name + '/.keep'; + } else { + path = this.createDialogPrefix + name; + } + + const ext = name.split('.').pop()?.toLowerCase() || ''; + const contentType = this.createDialogType === 'file' ? this.getContentType(ext) : 'application/octet-stream'; + const content = this.createDialogType === 'file' ? this.getDefaultContent(ext) : ''; + + const success = await apiService.putObject( + this.bucketName, + path, + btoa(content), + contentType + ); + + if (success) { + this.showCreateDialog = false; + await this.loadObjects(); + } + } + + private renderCreateDialog() { + if (!this.showCreateDialog) return ''; + + const isFolder = this.createDialogType === 'folder'; + const title = isFolder ? 'Create New Folder' : 'Create New File'; + const placeholder = isFolder ? 'folder-name or path/to/folder' : 'filename.txt or path/to/file.txt'; + + return html` +
this.showCreateDialog = false}> +
e.stopPropagation()}> +
${title}
+
+ Location: ${this.bucketName}/${this.createDialogPrefix} +
+ this.createDialogName = (e.target as HTMLInputElement).value} + @keydown=${(e: KeyboardEvent) => e.key === 'Enter' && this.handleCreate()} + /> +
+ Use "/" to create nested ${isFolder ? 'folders' : 'path'} (e.g., ${isFolder ? 'parent/child' : 'folder/file.txt'}) +
+
+ + +
+
+
+ `; + } + render() { return html`
@@ -301,7 +546,7 @@ export class TsviewS3Keys extends DeesElement { />
-
+
this.handleEmptySpaceContextMenu(e)}> ${this.loading ? html`
Loading...
` : this.filteredItems.length === 0 @@ -349,6 +594,7 @@ export class TsviewS3Keys extends DeesElement { `}
+ ${this.renderCreateDialog()} `; } } diff --git a/ts_web/elements/tsview-s3-preview.ts b/ts_web/elements/tsview-s3-preview.ts index 150b32c..39922cf 100644 --- a/ts_web/elements/tsview-s3-preview.ts +++ b/ts_web/elements/tsview-s3-preview.ts @@ -16,9 +16,18 @@ export class TsviewS3Preview extends DeesElement { @state() private accessor loading: boolean = false; + @state() + private accessor saving: boolean = false; + @state() private accessor content: string = ''; + @state() + private accessor originalTextContent: string = ''; + + @state() + private accessor hasChanges: boolean = false; + @state() private accessor contentType: string = ''; @@ -78,6 +87,15 @@ export class TsviewS3Preview extends DeesElement { padding: 12px; } + .preview-content.code-editor { + padding: 0; + overflow: hidden; + } + + .preview-content.code-editor dees-input-code { + height: 100%; + } + .preview-image { max-width: 100%; max-height: 100%; @@ -130,6 +148,51 @@ export class TsviewS3Preview extends DeesElement { background: rgba(239, 68, 68, 0.3); } + .action-btn.primary { + background: rgba(59, 130, 246, 0.3); + border-color: #3b82f6; + color: #60a5fa; + } + + .action-btn.primary:hover { + background: rgba(59, 130, 246, 0.4); + } + + .action-btn.primary:disabled { + opacity: 0.5; + cursor: not-allowed; + } + + .action-btn.secondary { + background: rgba(255, 255, 255, 0.05); + border-color: #555; + color: #aaa; + } + + .action-btn.secondary:hover { + background: rgba(255, 255, 255, 0.1); + color: #fff; + } + + .unsaved-indicator { + display: flex; + align-items: center; + gap: 6px; + padding: 6px 10px; + background: rgba(251, 191, 36, 0.1); + border: 1px solid rgba(251, 191, 36, 0.3); + border-radius: 4px; + font-size: 12px; + color: #fbbf24; + } + + .unsaved-dot { + width: 6px; + height: 6px; + border-radius: 50%; + background: #fbbf24; + } + .empty-state { display: flex; flex-direction: column; @@ -177,7 +240,9 @@ export class TsviewS3Preview extends DeesElement { } else { this.content = ''; this.contentType = ''; - this.error = ''; // Clear error when no file selected + this.error = ''; + this.originalTextContent = ''; + this.hasChanges = false; } } } @@ -187,6 +252,7 @@ export class TsviewS3Preview extends DeesElement { this.loading = true; this.error = ''; + this.hasChanges = false; try { const result = await apiService.getObject(this.bucketName, this.objectKey); @@ -194,6 +260,11 @@ export class TsviewS3Preview extends DeesElement { this.contentType = result.contentType; this.size = result.size; this.lastModified = result.lastModified; + + // For text files, decode and store original content + if (this.isText()) { + this.originalTextContent = this.getTextContent(); + } } catch (err) { console.error('Error loading object:', err); this.error = 'Failed to load object'; @@ -270,6 +341,98 @@ export class TsviewS3Preview extends DeesElement { } } + private getLanguage(): string { + const ext = this.objectKey.split('.').pop()?.toLowerCase() || ''; + const languageMap: Record = { + ts: 'typescript', + tsx: 'typescript', + js: 'javascript', + jsx: 'javascript', + mjs: 'javascript', + cjs: 'javascript', + json: 'json', + html: 'html', + htm: 'html', + css: 'css', + scss: 'scss', + sass: 'scss', + less: 'less', + md: 'markdown', + markdown: 'markdown', + xml: 'xml', + yaml: 'yaml', + yml: 'yaml', + py: 'python', + rb: 'ruby', + go: 'go', + rs: 'rust', + java: 'java', + c: 'c', + cpp: 'cpp', + h: 'c', + hpp: 'cpp', + cs: 'csharp', + php: 'php', + sh: 'shell', + bash: 'shell', + zsh: 'shell', + sql: 'sql', + graphql: 'graphql', + gql: 'graphql', + dockerfile: 'dockerfile', + txt: 'plaintext', + }; + return languageMap[ext] || 'plaintext'; + } + + private handleContentChange(event: CustomEvent) { + const newValue = event.detail as string; + this.hasChanges = newValue !== this.originalTextContent; + } + + private handleDiscard() { + const codeEditor = this.shadowRoot?.querySelector('dees-input-code') as any; + if (codeEditor) { + codeEditor.value = this.originalTextContent; + } + this.hasChanges = false; + } + + private async handleSave() { + if (!this.hasChanges || this.saving) return; + + this.saving = true; + + try { + // Get current content from the editor + const codeEditor = this.shadowRoot?.querySelector('dees-input-code') as any; + const currentContent = codeEditor?.value ?? ''; + + // Encode the text content to base64 + const encoder = new TextEncoder(); + const bytes = encoder.encode(currentContent); + const base64Content = btoa(String.fromCharCode(...bytes)); + + const success = await apiService.putObject( + this.bucketName, + this.objectKey, + base64Content, + this.contentType + ); + + if (success) { + this.originalTextContent = currentContent; + this.hasChanges = false; + // Update the stored content as well + this.content = base64Content; + } + } catch (err) { + console.error('Error saving object:', err); + } + + this.saving = false; + } + render() { if (!this.objectKey) { return html` @@ -309,14 +472,27 @@ export class TsviewS3Preview extends DeesElement { ${this.contentType} ${formatSize(this.size)} ${this.formatDate(this.lastModified)} + ${this.hasChanges ? html` + + + Unsaved changes + + ` : ''}
-
+
${this.isImage() ? html`` : this.isText() - ? html`
${this.getTextContent()}
` + ? html` + this.handleContentChange(e)} + > + ` : html`

Binary file preview not available

@@ -326,8 +502,19 @@ export class TsviewS3Preview extends DeesElement {
- - + ${this.hasChanges ? html` + + + ` : html` + + + `}
`;